From df017149c510b56a0b6f357671d6653ebc52d3a4 Mon Sep 17 00:00:00 2001 From: Sebastian Hoogen Date: Thu, 3 May 2012 14:03:07 +0200 Subject: [PATCH 1/2] OpenSCAD module fixes #3 #7 #25 #26 #28 #30 #35 #36 #41 --- src/Mod/CMakeLists.txt | 1 + src/Mod/Makefile.am | 2 +- src/Mod/OpenSCAD/CMakeLists.txt | 45 + src/Mod/OpenSCAD/Init.py | 26 + src/Mod/OpenSCAD/InitGui.py | 129 + src/Mod/OpenSCAD/Makefile.am | 32 + src/Mod/OpenSCAD/OpenSCAD.dox | 3 + src/Mod/OpenSCAD/OpenSCAD2Dgeom.py | 460 + src/Mod/OpenSCAD/OpenSCADCommands.py | 173 + src/Mod/OpenSCAD/OpenSCADFeatures.py | 433 + src/Mod/OpenSCAD/OpenSCADUtils.py | 115 + src/Mod/OpenSCAD/OpenSCAD_rc.py | 8268 +++++++++++++++++ src/Mod/OpenSCAD/Resources/OpenSCAD.qrc | 10 + .../icons/OpenSCAD_ColorCodeShape.svg | 136 + .../icons/OpenSCAD_RefineShapeFeature.svg | 402 + .../icons/OpenSCAD_RemoveSubtree.svg | 461 + .../icons/OpenSCAD_ReplaceObject.svg | 457 + .../Resources/icons/preferences-openscad.svg | 1368 +++ .../Resources/ui/openscadprefs-base.ui | 547 ++ src/Mod/OpenSCAD/TODO | 5 + src/Mod/OpenSCAD/colorcodeshapes.py | 81 + src/Mod/OpenSCAD/expandplacements.py | 78 + src/Mod/OpenSCAD/exportCSG.py | 260 + src/Mod/OpenSCAD/exportVersions.txt | 18 + src/Mod/OpenSCAD/importCSG.py | 885 ++ src/Mod/OpenSCAD/importVersions.txt | 58 + src/Mod/OpenSCAD/ply/ANNOUNCE | 40 + src/Mod/OpenSCAD/ply/CHANGES | 1093 +++ src/Mod/OpenSCAD/ply/PKG-INFO | 22 + src/Mod/OpenSCAD/ply/README | 271 + src/Mod/OpenSCAD/ply/TODO | 16 + src/Mod/OpenSCAD/ply/__init__.py | 4 + src/Mod/OpenSCAD/ply/lex.py | 1058 +++ src/Mod/OpenSCAD/ply/setup.py | 31 + src/Mod/OpenSCAD/ply/yacc.py | 3276 +++++++ src/Mod/OpenSCAD/prototype.py | 688 ++ src/Mod/OpenSCAD/replaceobj.py | 31 + src/Mod/OpenSCAD/tokrules.py | 132 + 38 files changed, 21114 insertions(+), 1 deletion(-) create mode 100644 src/Mod/OpenSCAD/CMakeLists.txt create mode 100644 src/Mod/OpenSCAD/Init.py create mode 100644 src/Mod/OpenSCAD/InitGui.py create mode 100644 src/Mod/OpenSCAD/Makefile.am create mode 100644 src/Mod/OpenSCAD/OpenSCAD.dox create mode 100644 src/Mod/OpenSCAD/OpenSCAD2Dgeom.py create mode 100644 src/Mod/OpenSCAD/OpenSCADCommands.py create mode 100644 src/Mod/OpenSCAD/OpenSCADFeatures.py create mode 100644 src/Mod/OpenSCAD/OpenSCADUtils.py create mode 100644 src/Mod/OpenSCAD/OpenSCAD_rc.py create mode 100644 src/Mod/OpenSCAD/Resources/OpenSCAD.qrc create mode 100644 src/Mod/OpenSCAD/Resources/icons/OpenSCAD_ColorCodeShape.svg create mode 100644 src/Mod/OpenSCAD/Resources/icons/OpenSCAD_RefineShapeFeature.svg create mode 100644 src/Mod/OpenSCAD/Resources/icons/OpenSCAD_RemoveSubtree.svg create mode 100644 src/Mod/OpenSCAD/Resources/icons/OpenSCAD_ReplaceObject.svg create mode 100644 src/Mod/OpenSCAD/Resources/icons/preferences-openscad.svg create mode 100644 src/Mod/OpenSCAD/Resources/ui/openscadprefs-base.ui create mode 100644 src/Mod/OpenSCAD/TODO create mode 100644 src/Mod/OpenSCAD/colorcodeshapes.py create mode 100644 src/Mod/OpenSCAD/expandplacements.py create mode 100644 src/Mod/OpenSCAD/exportCSG.py create mode 100644 src/Mod/OpenSCAD/exportVersions.txt create mode 100644 src/Mod/OpenSCAD/importCSG.py create mode 100644 src/Mod/OpenSCAD/importVersions.txt create mode 100644 src/Mod/OpenSCAD/ply/ANNOUNCE create mode 100644 src/Mod/OpenSCAD/ply/CHANGES create mode 100644 src/Mod/OpenSCAD/ply/PKG-INFO create mode 100644 src/Mod/OpenSCAD/ply/README create mode 100644 src/Mod/OpenSCAD/ply/TODO create mode 100644 src/Mod/OpenSCAD/ply/__init__.py create mode 100644 src/Mod/OpenSCAD/ply/lex.py create mode 100644 src/Mod/OpenSCAD/ply/setup.py create mode 100644 src/Mod/OpenSCAD/ply/yacc.py create mode 100644 src/Mod/OpenSCAD/prototype.py create mode 100644 src/Mod/OpenSCAD/replaceobj.py create mode 100644 src/Mod/OpenSCAD/tokrules.py diff --git a/src/Mod/CMakeLists.txt b/src/Mod/CMakeLists.txt index 995c104fd..181d3ef91 100644 --- a/src/Mod/CMakeLists.txt +++ b/src/Mod/CMakeLists.txt @@ -46,3 +46,4 @@ endif(FREECAD_BUILD_SANDBOX) add_subdirectory(Surfaces) add_subdirectory(Ship) +add_subdirectory(OpenSCAD) diff --git a/src/Mod/Makefile.am b/src/Mod/Makefile.am index bc7e873c5..e018e56c7 100644 --- a/src/Mod/Makefile.am +++ b/src/Mod/Makefile.am @@ -1,5 +1,5 @@ #SUBDIRS=Part Mesh Points Raytracing Image Drawing Complete Draft Test TemplatePyMod -SUBDIRS=Points Complete Draft Test TemplatePyMod Web Start Idf Arch Surfaces Ship +SUBDIRS=Points Complete Draft Test TemplatePyMod Web Start Idf Arch Surfaces Ship OpenSCAD #if HAVE_OPENCV SUBDIRS += Image diff --git a/src/Mod/OpenSCAD/CMakeLists.txt b/src/Mod/OpenSCAD/CMakeLists.txt new file mode 100644 index 000000000..65edb823a --- /dev/null +++ b/src/Mod/OpenSCAD/CMakeLists.txt @@ -0,0 +1,45 @@ +SET(OpenSCAD_SRCS + Init.py + InitGui.py + OpenSCAD_rc.py + OpenSCAD2Dgeom.py + OpenSCADFeatures.py + OpenSCADUtils.py + OpenSCADCommands.py + exportCSG.py + importCSG.py + prototype.py + tokrules.py + colorcodeshapes.py + expandplacements.py + replaceobj.py +) +SOURCE_GROUP("" FILES ${OpenSCAD_SRCS}) + +SET(ply_SRCS + ply/lex.py + ply/README + ply/yacc.py + ply/__init__.py +) +SOURCE_GROUP("ply" FILES ${ply_SRCS}) + +set(all_files ${OpenSCAD_SRCS} ${ply_SRCS}) + +ADD_CUSTOM_TARGET(OpenSCAD ALL + SOURCES ${allfiles} +) + fc_copy_sources(OpenSCAD "${CMAKE_BINARY_DIR}/Mod/OpenSCAD" ${all_files}) + +INSTALL( + FILES + ${ply_SRCS} + DESTINATION + Mod/OpenSCAD/ply +) +INSTALL( + FILES + ${OpenSCAD_SRCS} + DESTINATION + Mod/OpenSCAD +) diff --git a/src/Mod/OpenSCAD/Init.py b/src/Mod/OpenSCAD/Init.py new file mode 100644 index 000000000..9020bcb3a --- /dev/null +++ b/src/Mod/OpenSCAD/Init.py @@ -0,0 +1,26 @@ +# FreeCAD init script of the OpenSCAD module +# (c) 2001 Juergen Riegel + +#*************************************************************************** +#* (c) Juergen Riegel (juergen.riegel@web.de) 2002 * +#* * +#* This file is part of the FreeCAD CAx development system. * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* FreeCAD is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Lesser General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with FreeCAD; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#* Juergen Riegel 2002 * +#***************************************************************************/ diff --git a/src/Mod/OpenSCAD/InitGui.py b/src/Mod/OpenSCAD/InitGui.py new file mode 100644 index 000000000..e87158764 --- /dev/null +++ b/src/Mod/OpenSCAD/InitGui.py @@ -0,0 +1,129 @@ +# OpenSCAD gui init module +# +# Gathering all the information to start FreeCAD +# This is the second one of three init scripts, the third one +# runs when the gui is up + +#*************************************************************************** +#* (c) Juergen Riegel (juergen.riegel@web.de) 2002 +#* * +#* This file is part of the FreeCAD CAx development system. * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU General Public License (GPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* FreeCAD is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with FreeCAD; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#* Juergen Riegel 2002 * +#***************************************************************************/ + +import FreeCAD +param = FreeCAD.ParamGet(\ + "User parameter:BaseApp/Preferences/Mod/OpenSCAD") +openscadfilename = param.GetString('openscadexecutable') + + +class OpenSCADWorkbench ( Workbench ): + "OpenSCAD workbench object" + Icon = """ +/* XPM */ +static char * openscadlogo_xpm[] = { +"16 16 33 1", +" c None", +". c #61320B", +"+ c #5D420B", +"@ c #4F4C09", +"# c #564930", +"$ c #754513", +"% c #815106", +"& c #666509", +"* c #875F55", +"= c #6E7000", +"- c #756A53", +"; c #717037", +"> c #946637", +", c #92710E", +"' c #797A0A", +") c #7C7720", +"! c #8A8603", +"~ c #88886F", +"{ c #AF8181", +"] c #999908", +"^ c #BB8D8D", +"/ c #AAAA00", +"( c #A9A880", +"_ c #B5B419", +": c #C1A9A9", +"< c #B1B19A", +"[ c #BEBE00", +"} c #B9B8B4", +"| c #CACC00", +"1 c #D4D4BC", +"2 c #DBD2D0", +"3 c #EEEEED", +"4 c None", +"4444444444444444", +"4444443113444444", +"4444<;']]!;<^^24", +"444(&@!]]]=&#^{3", +"44<']')@++)!&*{^", +"44)]/[|//[/]'@{{", +"42=/_|||||[]!&*{", +"4(&][|||||[/'@#}", +"3-..,|||||[)&&~4", +"^*$%.!|||[!+/](4", +"^{%%%._[[_&/[_14", +":{>%%.!//])_[_44", +"2{{%%+!]!!)]]344", +"4:{{#@&=&&@#3444", +"44224}~--~}44444", +"4444444444444444"}; +""" + MenuText = "OpenSCAD" + ToolTip = "OpenSCAD workbench" + def Initialize(self): + import OpenSCAD_rc,OpenSCADCommands + commands=["ColorCodeShape",'RefineShapeFeature','ReplaceObject',"Edgestofaces",'ExpandPlacements','RemoveSubtree'] + import FreeCAD + param = FreeCAD.ParamGet(\ + "User parameter:BaseApp/Preferences/Mod/OpenSCAD") + openscadfilename = param.GetString('openscadexecutable') + if openscadfilename: + commands.extend(['AddOpenSCADElement']) + self.appendToolbar("OpenSCADTools",["ColorCodeShape",'RefineShapeFeature','ReplaceObject','RemoveSubtree']) + self.appendMenu('OpenSCAD',commands) + #self.appendMenu('OpenSCAD',["AddOpenSCADElement"]) + ###self.appendCommandbar("&Generic Tools",["ColorCodeShape"]) + FreeCADGui.addIconPath(":/icons") + #FreeCADGui.addLanguagePath(":/translations") + FreeCADGui.addPreferencePage(":/ui/openscadprefs-base.ui","OpenSCAD") + def GetClassName(self): + #return "OpenSCADGui::Workbench" + return "Gui::PythonWorkbench" + + +Gui.addWorkbench(OpenSCADWorkbench()) +App.addImportType("OpenSCAD CSG Format (*.csg)","importCSG") +App.addExportType("OpenSCAD CSG Format (*.csg)","exportCSG") +App.addExportType("OpenSCAD Format (*.scad)","exportCSG") +import os +openscadbin = openscadfilename and os.path.isfile(openscadfilename) +if openscadbin: + App.addImportType("OpenSCAD Format (*.scad)","importCSG") + +if param.GetBool('debugRegisterPrototype'): + App.addImportType("OpenSCAD CSG prototype (*.csg)","prototype") #prototype + if openscadbin: + App.addImportType("OpenSCAD prototype (*.scad)","prototype") #prototype + diff --git a/src/Mod/OpenSCAD/Makefile.am b/src/Mod/OpenSCAD/Makefile.am new file mode 100644 index 000000000..ca0cf40f4 --- /dev/null +++ b/src/Mod/OpenSCAD/Makefile.am @@ -0,0 +1,32 @@ +#SUBDIRS=App Gui + +# Change data dir from default ($(prefix)/share) to $(prefix) +datadir = $(prefix)/Mod/OpenSCAD +data_DATA = \ + Init.py InitGui.py \ + OpenSCAD_rc.py \ + OpenSCAD2Dgeom.py \ + OpenSCADFeatures.py \ + OpenSCADUtils.py \ + OpenSCADCommands.py \ + exportCSG.py \ + importCSG.py \ + prototype.py \ + tokrules.py \ + colorcodeshapes.py \ + expandplacements.py \ + replaceobj.py + +nobase_data_DATA = \ + ply/lex.py \ + ply/README \ + ply/yacc.py \ + ply/__init__.py + + +EXTRA_DIST = \ + $(data_DATA) $(nobase_data_DATA) \ + CMakeLists.txt \ + OpenSCAD.dox \ + exportVersions.txt \ + importVersions.txt diff --git a/src/Mod/OpenSCAD/OpenSCAD.dox b/src/Mod/OpenSCAD/OpenSCAD.dox new file mode 100644 index 000000000..c48db6a63 --- /dev/null +++ b/src/Mod/OpenSCAD/OpenSCAD.dox @@ -0,0 +1,3 @@ +/** \defgroup TEMPLATE OpenSCAD + * \ingroup WORKBENCHES */ + diff --git a/src/Mod/OpenSCAD/OpenSCAD2Dgeom.py b/src/Mod/OpenSCAD/OpenSCAD2Dgeom.py new file mode 100644 index 000000000..7e6bddc9d --- /dev/null +++ b/src/Mod/OpenSCAD/OpenSCAD2Dgeom.py @@ -0,0 +1,460 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2012 Sebastian Hoogen * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +__title__="FreeCAD OpenSCAD Workbench - 2D helper fuctions" +__author__ = "Sebastian Hoogen" +__url__ = ["http://free-cad.sourceforge.net"] + +''' +This Script includes python functions to convert imported dxf geometry to Faces +''' + +class Overlappingfaces(): + '''combines overlapping faces together''' + def __init__(self,facelist): + self.sortedfaces = sorted(facelist,key=(lambda shape: shape.Area),reverse=True) + self.builddepdict() + #self.faceindex = {} + #for idx,face in enumerate(self.sortesfaces): + # self.faceindex[face.hashCode()] = idx + +# def __len__(self): +# return len(self.sortedfaces) + + @staticmethod + def dofacesoverlapboundbox(bigface,smallface): + return bigface.BoundBox.isIntersection(smallface.BoundBox) + + @staticmethod + def dofacesoverlapallverts(bigface,smallface): + def vertsinface(f1,verts,tol=0.001,inface=True): + '''check if all given verts are inside shape f1''' + return all([f1.isInside(vert.Point,tol,inface) for vert in verts]) + return vertsinface(bigface,smallface.Vertexes) + + @staticmethod + def dofacesoverlapboolean(bigface,smallface): + #import FreeCAD,FreeCADGui + #FreeCAD.Console.PrintLog('intersecting %d %d\n'%(bigfacei,smallfacei)) + #FreeCADGui.updateGui() + return bigface.common(smallface).Area > 0 + + def builddepdict(self): + import itertools + #isinsidelist = [] + self.isinsidedict = {} + #for bigface, smallface in itertools.combinations(sortedfaces,2): + for bigfacei, smallfacei in itertools.combinations(range(len(self.sortedfaces)),2): + try: + overlap = Overlappingfaces.dofacesoverlapboolean(\ + self.sortedfaces[bigfacei],self.sortedfaces[smallfacei]) + except: + overlap = Overlappingfaces.dofacesoverlapallverts(\ + self.sortedfaces[bigfacei],self.sortedfaces[smallfacei]) + if overlap: + #isinsidelist.append((bigfacei,smallfacei)) + smallinbig = self.isinsidedict.get(bigfacei,[]) + smallinbig.append(smallfacei) + if len(smallinbig) == 1: + self.isinsidedict[bigfacei] = smallinbig + + @staticmethod + def finddepth(dict1,faceidx,curdepth=0): + if faceidx not in dict1: + return curdepth+1 + else: + #print dict1[faceidx],[(finddepth(dict1,childface,curdepth)) for childface in dict1[faceidx]] + return max([(Overlappingfaces.finddepth(dict1,childface,curdepth+1)) for childface in dict1[faceidx]]) + + def findrootdepth(self): + return max([Overlappingfaces.finddepth(self.isinsidedict,fi) for fi in range(len(self.sortedfaces))]) + + def hasnoparent(self,faceindex): + return Overlappingfaces.hasnoparentstatic(self.isinsidedict,faceindex) + + @staticmethod + def hasnoparentstatic(isinsidedict,faceindex): + for smalllist in isinsidedict.itervalues(): + if faceindex in smalllist: + return False + return True + + #@staticmethod + #def subtreedict(rootface,parantdict): + # '''biuld a subtree dictinary''' + # newdict = parantdict.copy() + # del newdict[rootface] + # return newdict + + @staticmethod + def directchildren(isinsidedict,parent): + #return [child for child in isinsidedict.get(parent,[]) if child not in isinsidedict] + dchildren=[] + for child in isinsidedict.get(parent,[]): + direct = True + for key, value in isinsidedict.iteritems(): + if key != parent and child in value and parent not in value: + direct = False + if direct: + dchildren.append(child) + return dchildren + + #@staticmethod + #def indirectchildren(isinsidedict,parent): + # return [child for child in isinsidedict.get(parent,[]) if child in isinsidedict] + + @staticmethod + def printtree(isinsidedict,facenum): + def printtreechild(isinsidedict,facenum,parent): + children=Overlappingfaces.directchildren(isinsidedict,parent) + print 'parent %d directchild %s' % (parent,children) + if children: + subdict=isinsidedict.copy() + del subdict[parent] + for child in children: + printtreechild(subdict,facenum,child) + + rootitems=[fi for fi in range(facenum) if Overlappingfaces.hasnoparentstatic(isinsidedict,fi)] + for rootitem in rootitems: + printtreechild(isinsidedict,facenum,rootitem) + + def makefeatures(self,doc): + import FreeCAD + def addshape(faceindex): + obj=doc.addObject('Part::Feature','facefromedges_%d' % faceindex) + obj.Shape = self.sortedfaces[faceindex] + obj.ViewObject.hide() + return obj + + def addfeature(faceindex,isinsidedict): + directchildren = Overlappingfaces.directchildren(isinsidedict,faceindex) + if len(directchildren) == 0: + obj=addshape(faceindex) + else: + subdict=isinsidedict.copy() + del subdict[faceindex] + obj=doc.addObject("Part::Cut","facesfromedges_%d" % faceindex) + obj.Base= addshape(faceindex) #we only do subtraction + if len(directchildren) == 1: + obj.Tool = addfeature(directchildren[0],subdict) + else: + obj.Tool = doc.addObject("Part::MultiFuse","facesfromedges_union") + obj.Tool.Shapes = [addfeature(child,subdict) for child in directchildren] + obj.Tool.ViewObject.hide() + obj.ViewObject.hide() + return obj + + rootitems = [fi for fi in range(len(self.sortedfaces)) if self.hasnoparent(fi)] + for rootitem in rootitems: + addfeature(rootitem,self.isinsidedict).ViewObject.show() + + + def makeshape(self): + def removefaces(rfaces): + for tfi in directchildren[::-1]: + finishedwith.append(tfi) + #del faces[tfi] + if tfi in isinsidedict: + del isinsidedict[tfi] + for key,value in isinsidedict.iteritems(): + if tfi in value: + newlist=value[:] #we work on a shallow copy of isinsidedict + newlist.remove(tfi) + isinsidedict[key]=newlist + + def hasnoparent(faceindex): + for smalllist in self.isinsidedict.itervalues(): + if faceindex in smalllist: + return False + return True + + faces=self.sortedfaces[:] + isinsidedict=self.isinsidedict.copy() + finishedwith=[] + while not all([Overlappingfaces.hasnoparentstatic(isinsidedict,fi) for fi in range(len(faces))]): + #print [(Overlappingfaces.hasnoparentstatic(isinsidedict,fi),\ + #Overlappingfaces.directchildren(isinsidedict,fi)) for fi in range(len(faces))] + for fi in range(len(faces))[::-1]: + directchildren = Overlappingfaces.directchildren(isinsidedict,fi) + if not directchildren: + continue + elif len(directchildren) == 1: + faces[fi]=faces[fi].cut(faces[directchildren[0]]) + #print fi,'-' ,directchildren[0], faces[fi],faces[directchildren[0]] + removefaces(directchildren) + else: + toolface=fusefaces([faces[tfi] for tfi in directchildren]) + faces[fi]=faces[fi].cut(toolface) + #print fi, '- ()', directchildren, [faces[tfi] for tfi in directchildren] + removefaces(directchildren) + #print fi,directchildren + faces =[face for index,face in enumerate(faces) if index not in finishedwith] +# return faces + return fusefaces(faces) + +def findConnectedEdges(edgelist,eps=1e-6,debug=False): + '''returns a list of list of connected edges''' + + def vertequals(v1,v2,eps=1e-6): + '''check two vertices for equality''' + #return all([abs(c1-c2) 1: + innerdistances=[edges[i].Vertexes[-1].Point.sub(edges[i+1].\ + Vertexes[0].Point).Length for i in range(numedges-1)] + return max(innerdistances),min(innerdistances),outerdistance + else: + return 0.0,0.0,outerdistance + +def endpointdistancedebuglist(debuglist): + '''return the distance of of vertices in path (list of edges) as + maximum, mininum and distance between start and endpoint + it it expects a 'not reversed' flag for every edge''' + numedges=len(debuglist) + if numedges == 1 and len(debuglist[0][0].Vertexes) == 1: + return 0.0,0.0,0.0 + outerdistance = debuglist[0][0].Vertexes[(not debuglist[0][1])*-1].\ + Point.sub(debuglist[-1][0].Vertexes[(debuglist[-1][1])*-1].\ + Point).Length + if numedges > 1: + innerdistances=[debuglist[i][0].Vertexes[debuglist[i][1]*-1].\ + Point.sub(debuglist[i+1][0].Vertexes[(not debuglist[i+1][1])*\ + -1].Point).Length for i in range(numedges-1)] + return max(innerdistances),min(innerdistances),outerdistance + else: + return 0.0,0.0,outerdistance + +def edgestowires(edgelist,eps=0.001): + '''takes list of edges and returns a list of wires''' + import Part, Draft + # todo remove double edges + wirelist=[] + #for path in findConnectedEdges(edgelist,eps=eps): + for path,debug in zip(*findConnectedEdges(edgelist,eps=eps,debug=True)): + maxd,mind,outerd = endpointdistancedebuglist(debug) + assert(maxd <= eps*2) # Assume the input to be broken + if maxd < eps*2 and maxd > 0.000001: #OCC wont like it if maxd > 0.02: + print 'endpointdistance max:%f min:%f, ends:%f' %(maxd,mind,outerd) + + if True: + tobeclosed = outerd < eps*2 + # OpenSCAD uses 0.001 for corase grid + #from draftlibs import fcvec, fcgeo + #w2=fcgeo.superWire(path,tobeclosed) + w2=superWireReverse(debug,tobeclosed) + wirelist.append(w2) + else:#this locks up FreeCAD + comp=Part.Compound(path) + wirelist.append(comp.connectEdgesToWires(False,eps).Wires[0]) + #wirelist.append(comp.connectEdgesToWires(False,0.1).Wires[0]) + else: + done = False + try: + wire=Part.Wire(path) + #if not close or wire.isClosed or outerd > 0.0001: + wirelist.append(Part.Wire(path)) + done = True + except: + pass + if not done: + comp=Part.Compound(path) + wirelist.append(comp.connectEdgesToWires(False,eps).Wires[0]) + return wirelist + +def subtractfaces(faces): + '''searches for the biggest face and subtracts all smaller ones from the + first. Only makes sense if all faces overlap.''' + if len(faces)==1: + return faces[0] + else: + facelist=sorted(faces,key=(lambda shape: shape.Area),reverse=True) + base=facelist[0] + tool=reduce(lambda p1,p2: p1.fuse(p2),facelist[1:]) + return base.cut(tool) + +def fusefaces(faces): + if len(faces)==1: + return faces[0] + else: + return reduce(lambda p1,p2: p1.fuse(p2),faces) + +def subtractfaces2(faces): + '''Sort faces, check if they overlap. Subtract overlapping face and fuse + nonoverlapping groups.''' + return fusefaces([subtractfaces(facegroup) for facegroup in findoverlappingfaces(faces)]) + +def edgestofaces(edges,algo=3,eps=0.001): + #edges=[] + #for shapeobj in (objs): + # edges.extend(shapeobj.Shape.Edges) + #taken from Drafttools + #from draftlibs import fcvec, fcgeo + import Part + #wires = fcgeo.findWires(edges) + wires = edgestowires(edges,eps) + facel=[] + for w in wires: + #assert(len(w.Edges)>1) + if not w.isClosed(): + p0 = w.Vertexes[0].Point + p1 = w.Vertexes[-1].Point + edges2 = w.Edges[:] + try: + edges2.append(Part.Line(p1,p0).toShape()) + w = Part.Wire(edges2) + #w = Part.Wire(fcgeo.sortEdges(edges2)) + except: + comp=Part.Compound(edges2) + w = comp.connectEdgesToWires(False,eps).Wires[0] + facel.append(Part.Face(w)) + #if w.isValid: #debuging + # facel.append(Part.Face(w)) + #else: + # Part.show(w) + if algo is None: + return facel + elif algo == 1: #stabale behavior + return subtractfaces(facel) + elif algo == 0: #return all faces + return Part.Compound(facel) + elif algo == 2: + return subtractfaces2(facel) + elif algo == 3: + return Overlappingfaces(facel).makeshape() + +def superWireReverse(debuglist,closed=False): + '''superWireReverse(debuglist,[closed]): forces a wire between edges + that don't necessarily have coincident endpoints. If closed=True, wire + will always be closed. debuglist has a tuple for every edge.The first + entry is the edge, the second is the flag 'does not nedd to be inverted' + ''' + #taken from draftlibs + def median(v1,v2): + vd = v2.sub(v1) + vd.scale(.5,.5,.5) + return v1.add(vd) + try: + from DraftGeomUtils import findMidpoint + except ImportError: #workaround for Version 0.12 + from draftlibs.fcgeo import findMidpoint #workaround for Version 0.12 + import Part + #edges = sortEdges(edgeslist) + print debuglist + newedges = [] + for i in range(len(debuglist)): + curr = debuglist[i] + if i == 0: + if closed: + prev = debuglist[-1] + else: + prev = None + else: + prev = debuglist[i-1] + if i == (len(debuglist)-1): + if closed: + nexte = debuglist[0] + else: + nexte = None + else: + nexte = debuglist[i+1] + print i,prev,curr,nexte + if prev: + if curr[0].Vertexes[-1*(not curr[1])].Point == \ + prev[0].Vertexes[-1*prev[1]].Point: + p1 = curr[0].Vertexes[-1*(not curr[1])].Point + else: + p1 = median(curr[0].Vertexes[-1*(not curr[1])].Point,\ + prev[0].Vertexes[-1*prev[1]].Point) + else: + p1 = curr[0].Vertexes[-1*(not curr[1])].Point + if nexte: + if curr[0].Vertexes[-1*curr[1]].Point == \ + nexte[0].Vertexes[-1*(not nexte[1])].Point: + p2 = nexte[0].Vertexes[-1*(not nexte[1])].Point + else: + p2 = median(curr[0].Vertexes[-1*(curr[1])].Point,\ + nexte[0].Vertexes[-1*(not nexte[1])].Point) + else: + p2 = curr[0].Vertexes[-1*(curr[1])].Point + if isinstance(curr[0].Curve,Part.Line): + print "line",p1,p2 + newedges.append(Part.Line(p1,p2).toShape()) + elif isinstance(curr[0].Curve,Part.Circle): + p3 = findMidpoint(curr[0]) + print "arc",p1,p3,p2 + newedges.append(Part.Arc(p1,p3,p2).toShape()) + else: + print "Cannot superWire edges that are not lines or arcs" + return None + print newedges + return Part.Wire(newedges) diff --git a/src/Mod/OpenSCAD/OpenSCADCommands.py b/src/Mod/OpenSCAD/OpenSCADCommands.py new file mode 100644 index 000000000..165f841a2 --- /dev/null +++ b/src/Mod/OpenSCAD/OpenSCADCommands.py @@ -0,0 +1,173 @@ +import FreeCAD,FreeCADGui +from PyQt4 import QtGui, QtCore + +class ColorCodeShape: + "Change the Color of selected or all Shapes based on their validity" + def Activated(self): + import colorcodeshapes + selection=FreeCADGui.Selection.getSelectionEx() + if len(selection) > 0: + objs=[selobj.Object for selobj in selection] + + else: + objs=FreeCAD.ActiveDocument.Objects + colorcodeshapes.colorcodeshapes(objs) + def GetResources(self): + return {'Pixmap' : 'OpenSCAD_ColorCodeShape', 'MenuText': 'Color Shapes', 'ToolTip': 'Color Shapes by validity and type'} + +class Edgestofaces: + def Activated(self): + from OpenSCAD2Dgeom import edgestofaces,Overlappingfaces + selection=FreeCADGui.Selection.getSelectionEx() + edges=[] + for selobj in selection: + edges.extend(selobj.Object.Shape.Edges) + Overlappingfaces(edgestofaces(edges,None)).makefeatures(FreeCAD.ActiveDocument) + for selobj in selection: + selobj.Object.ViewObject.hide() + FreeCAD.ActiveDocument.recompute() + + def GetResources(self): + return {'Pixmap' : 'python', 'MenuText': 'EdgesToFaces', 'ToolTip': 'Convert Edges to Faces'} + +class RefineShapeFeature: + def Activated(self): + import Part,OpenSCADFeatures + selection=FreeCADGui.Selection.getSelectionEx() + for selobj in selection: + #newobj=FreeCAD.ActiveDocument.addObject("Part::FeaturePython",'refine') + newobj=selobj.Document.addObject("Part::FeaturePython",'refine') + OpenSCADFeatures.RefineShape(newobj,selobj.Object) + OpenSCADFeatures.ViewProviderTree(newobj.ViewObject) + newobj.Label='refine_%s' % selobj.Object.Label + selobj.Object.ViewObject.hide() + FreeCAD.ActiveDocument.recompute() + def GetResources(self): + return {'Pixmap' : 'OpenSCAD_RefineShapeFeature', 'MenuText': \ + 'Refine Shape Feature', 'ToolTip': 'Create Refine Shape Feature'} + + +class ExpandPlacements: + '''This should aid interactive repair in the future + but currently it breaks extrusions, as axis, base and so on have to be + recalculated''' + def Activated(self): + import expandplacements + selobj=FreeCADGui.Selection.getSelectionEx()[0] + expandplacements.expandplacements(selobj.Object,FreeCAD.Placement()) + FreeCAD.ActiveDocument.recompute() + def GetResources(self): + return {'Pixmap' : 'python', 'MenuText': 'Expand Placements', 'ToolTip': 'Expand all placements downwards the FeatureTree'} + +class ReplaceObject: + def Activated(self): + import replaceobj + #objs=[selobj.Object for selobj in FreeCADGui.Selection.getSelectionEx()] + objs=FreeCADGui.Selection.getSelection() + if len(objs)==3: + replaceobj.replaceobjfromselection(objs) + else: + FreeCAD.Console.PrintError('please select 3 objects first') + def GetResources(self): + return {'Pixmap' : 'OpenSCAD_ReplaceObject', 'MenuText': \ + 'Replace Object', 'ToolTip': \ + 'Replace an object in the Feature Tree select old, new and parent object'} + + +class RemoveSubtree: + def Activated(self): + def addsubobjs(obj,toremoveset): + toremove.add(obj) + for subobj in obj.OutList: + addsubobjs(subobj,toremoveset) + + import FreeCAD,FreeCADGui + objs=FreeCADGui.Selection.getSelection() + toremove=set() + for obj in objs: + addsubobjs(obj,toremove) + checkinlistcomplete =False + while not checkinlistcomplete: + for obj in toremove: + if (obj not in objs) and (frozenset(obj.InList) - toremove): + toremove.remove(obj) + break + else: + checkinlistcomplete = True + for obj in toremove: + obj.Document.removeObject(obj.Name) + def GetResources(self): + return {'Pixmap' : 'OpenSCAD_RemoveSubtree', 'MenuText': \ + 'Remove Objects and thier Children', 'ToolTip': \ + 'Removes the selected Objects and all Children that are not referenced from other objects'} + +class AddSCADWidget(QtGui.QWidget): + def __init__(self,*args): + QtGui.QWidget.__init__(self,*args) + self.textEdit=QtGui.QTextEdit() + self.buttonadd = QtGui.QPushButton(u'Add') + self.buttonclear = QtGui.QPushButton(u'Clear') + self.checkboxmesh = QtGui.QCheckBox(u'as Mesh') + layouth=QtGui.QHBoxLayout() + layouth.addWidget(self.buttonadd) + layouth.addWidget(self.buttonclear) + layout= QtGui.QVBoxLayout() + layout.addLayout(layouth) + layout.addWidget(self.checkboxmesh) + layout.addWidget(self.textEdit) + self.setLayout(layout) + self.setWindowTitle(u'Add OpenSCAD Element') + self.textEdit.setText(u'cube();') + self.buttonclear.clicked.connect(self.textEdit.clear) + +class AddSCADTask: + def __init__(self): + self.form = AddSCADWidget() + self.form.buttonadd.clicked.connect(self.addelement) + def getStandardButtons(self): + return int(QtGui.QDialogButtonBox.Close) + + def isAllowedAlterSelection(self): + return True + + def isAllowedAlterView(self): + return True + + def isAllowedAlterDocument(self): + return True + + def addelement(self): + scadstr=unicode(self.form.textEdit.toPlainText()) + asmesh=self.form.checkboxmesh.checkState() + import OpenSCADUtils, os + extension= 'stl' if asmesh else 'csg' + tmpfilename=OpenSCADUtils.callopenscadstring(scadstr,extension) + if tmpfilename: + doc=FreeCAD.activeDocument() or FreeCAD.newDocument() + if asmesh: + import Mesh + Mesh.insert(tmpfilename,doc.Name) + else: + import importCSG + importCSG.insert(tmpfilename,doc.Name) + os.unlink(tmpfilename) + else: + FreeCAD.Console.PrintError('Running OpenSCAD failed\n') + +class AddOpenSCADElement: + def Activated(self): + panel = AddSCADTask() + FreeCADGui.Control.showDialog(panel) + def GetResources(self): + return {'Pixmap' : 'python', 'MenuText': \ + 'Add OpenSCAD Element...', 'ToolTip': \ + 'Add an OpenSCAD Element by entering OpenSCAD Code and executing the OpenSCAD binary'} + + +FreeCADGui.addCommand('ColorCodeShape',ColorCodeShape()) +FreeCADGui.addCommand('Edgestofaces',Edgestofaces()) +FreeCADGui.addCommand('RefineShapeFeature',RefineShapeFeature()) +FreeCADGui.addCommand('ExpandPlacements',ExpandPlacements()) +FreeCADGui.addCommand('ReplaceObject',ReplaceObject()) +FreeCADGui.addCommand('RemoveSubtree',RemoveSubtree()) +FreeCADGui.addCommand('AddOpenSCADElement',AddOpenSCADElement()) diff --git a/src/Mod/OpenSCAD/OpenSCADFeatures.py b/src/Mod/OpenSCAD/OpenSCADFeatures.py new file mode 100644 index 000000000..176dffc02 --- /dev/null +++ b/src/Mod/OpenSCAD/OpenSCADFeatures.py @@ -0,0 +1,433 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2012 Sebastian Hoogen * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +__title__="FreeCAD OpenSCAD Workbench - Parametric Features" +__author__ = "Sebastian Hoogen" +__url__ = ["http://free-cad.sourceforge.net"] + +''' +This Script includes python Features to represent OpenSCAD Operations +''' +class ViewProviderTree: + "A generic View Provider for Elements with Children" + + def __init__(self, obj): + obj.Proxy = self + self.Object = obj.Object + + def attach(self, obj): + self.Object = obj.Object + return + + def updateData(self, fp, prop): + return + + def getDisplayModes(self,obj): + modes=[] + return modes + + def setDisplayMode(self,mode): + return mode + + def onChanged(self, vp, prop): + return + + def __getstate__(self): +# return {'ObjectName' : self.Object.Name} + return None + + def __setstate__(self,state): + if state is not None: + try: + import FreeCAD + doc = FreeCAD.ActiveDocument #crap + self.Object = doc.getObject(state['ObjectName']) + except: + raise +# return None + + def claimChildren(self): + objs = [] + if hasattr(self.Object.Proxy,"Base"): + objs.append(self.Object.Proxy.Base) + if hasattr(self.Object,"Base"): + objs.append(self.Object.Base) + if hasattr(self.Object,"Objects"): + objs.extend(self.Object.Objects) + if hasattr(self.Object,"Components"): + objs.extend(self.Object.Components) + return objs + + def getIcon(self): + #if self.Object.Proxy.__class__ == MatrixTransform: + if isinstance(self.Object.Proxy,MatrixTransform): + return """/* XPM */ +static char * matrix_xpm[] = { +"16 16 3 1", +" c #0079FF", +". c #FFFFFF", +"+ c #000000", +" ......... .", +" ............. .", +" . . . . . .", +" . . . . . .", +" ............. .", +" . . . . . .", +" . . . . . .", +" ............. .", +" . . . . . .", +" . . . . . .", +" ............. .", +" ...........+. .", +" ..+..+..+..+. .", +" ............. .", +" ......... .", +"................"};""" + elif False: + return """/* XPM */ +static char * qm_xpm[] = { +"16 16 37 1", +" c None", +". c #FFFFFF", +"+ c #CBE3FF", +"@ c #70B3FF", +"# c #3092FF", +"$ c #0D7FFF", +"% c #047BFF", +"& c #1885FF", +"* c #56A6FF", +"= c #CFE5FF", +"- c #0079FF", +"; c #067CFF", +"> c #B9DAFF", +", c #88C0FF", +"' c #CAE3FF", +") c #F2F8FF", +"! c #FAFCFF", +"~ c #CEE5FF", +"{ c #459DFF", +"] c #2D90FF", +"^ c #EEF6FF", +"/ c #077CFF", +"( c #B1D6FF", +"_ c #3494FF", +": c #90C4FF", +"< c #037AFF", +"[ c #BCDBFF", +"} c #6EB2FF", +"| c #087DFF", +"1 c #A8D1FF", +"2 c #8AC1FF", +"3 c #1C87FF", +"4 c #CCE4FF", +"5 c #1F89FF", +"6 c #CDE4FF", +"7 c #027AFF", +"8 c #FDFDFF", +"....+@#$%&*=....", +"....-------;>...", +"....#,')!~{-]...", +"..........^-/...", +"..........(-_...", +".........:/<[...", +"........}-|1....", +".......2-34.....", +".......5-6......", +".......7-8......", +".......--.......", +"................", +"................", +".......--.......", +".......--.......", +".......--......."}; +""" + else: + return """/* XPM */ +static char * openscadlogo_xpm[] = { +"16 16 33 1", +" c None", +". c #61320B", +"+ c #5D420B", +"@ c #4F4C09", +"# c #564930", +"$ c #754513", +"% c #815106", +"& c #666509", +"* c #875F55", +"= c #6E7000", +"- c #756A53", +"; c #717037", +"> c #946637", +", c #92710E", +"' c #797A0A", +") c #7C7720", +"! c #8A8603", +"~ c #88886F", +"{ c #AF8181", +"] c #999908", +"^ c #BB8D8D", +"/ c #AAAA00", +"( c #A9A880", +"_ c #B5B419", +": c #C1A9A9", +"< c #B1B19A", +"[ c #BEBE00", +"} c #B9B8B4", +"| c #CACC00", +"1 c #D4D4BC", +"2 c #DBD2D0", +"3 c #EEEEED", +"4 c #FDFFFC", +"4444444444444444", +"4444443113444444", +"4444<;']]!;<^^24", +"444(&@!]]]=&#^{3", +"44<']')@++)!&*{^", +"44)]/[|//[/]'@{{", +"42=/_|||||[]!&*{", +"4(&][|||||[/'@#}", +"3-..,|||||[)&&~4", +"^*$%.!|||[!+/](4", +"^{%%%._[[_&/[_14", +":{>%%.!//])_[_44", +"2{{%%+!]!!)]]344", +"4:{{#@&=&&@#3444", +"44224}~--~}44444", +"4444444444444444"}; +""" + + +class MatrixTransform: + def __init__(self, obj,matrix=None,child=None): + obj.addProperty("App::PropertyLink","Base","Base", + "The base object that must be tranfsformed") + obj.addProperty("App::PropertyMatrix","Matrix","Matrix", "Transformation Matrix") + obj.Proxy = self + obj.Matrix = matrix + obj.Base = child + + def onChanged(self, fp, prop): + "Do something when a property has changed" + pass + + def updateProperty(self, fp, prop, value): + epsilon = 0.0001 + if abs(getattr(fp, prop) - value) > epsilon: + setattr(fp, prop, value) + + def execute(self, fp): + pass + if fp.Matrix and fp.Base: + sh=fp.Base.Shape#.copy() + m=sh.Placement.toMatrix().multiply(fp.Matrix) + fp.Shape = sh.transformGeometry(m) + #else: + #FreeCAD.Console.PrintMessage('base %s\nmat %s/n' % (fp.Base,fp.Matrix)) + +class ImportObject: + def __init__(self, obj,child=None): + obj.addProperty("App::PropertyLink","Base","Base", + "The base object that must be tranfsformed") + obj.Proxy = self + obj.Base = child + + def onChanged(self, fp, prop): + "Do something when a property has changed" + pass + + def execute(self, fp): + pass +# if fp.Base: +# fp.Shape = fp.Base.Shape.copy() + +class RefineShape: + '''return a refined shape''' + def __init__(self, obj,child=None): + obj.addProperty("App::PropertyLink","Base","Base", + "The base object that must be refined") + obj.Proxy = self + obj.Base = child + + def onChanged(self, fp, prop): + "Do something when a property has changed" + pass + + def execute(self, fp): + if fp.Base and fp.Base.Shape.isValid(): + sh=fp.Base.Shape.removeSplitter() + if sh.Placement.isNull(): + fp.Shape=sh + else: + fp.Shape=sh.transformGeometry(sh.Placement.toMatrix()) + +class GetWire: + '''return the first wire from a given shape''' + def __init__(self, obj,child=None): + obj.addProperty("App::PropertyLink","Base","Base", + "The base object that wire must be extracted") + obj.Proxy = self + obj.Base = child + + def onChanged(self, fp, prop): + "Do something when a property has changed" + pass + + def execute(self, fp): + if fp.Base: + #fp.Shape=fp.Base.Shape.Wires[0] + fp.Shape=fp.Base.Shape.Wires[0].transformGeometry(\ + fp.Base.Shape.Placement.toMatrix()) + +class Frustum: + def __init__(self, obj,r1=1,r2=2,n=3,h=4): + obj.addProperty("App::PropertyInteger","FacesNumber","Base","Number of faces") + obj.addProperty("App::PropertyDistance","Radius1","Base","Radius of lower the inscribed control circle") + obj.addProperty("App::PropertyDistance","Radius2","Base","Radius of upper the inscribed control circle") + obj.addProperty("App::PropertyDistance","Height","Base","Height of the Frustum") + + obj.FacesNumber = n + obj.Radius1 = r1 + obj.Radius2= r2 + obj.Height= h + obj.Proxy = self + + def execute(self, fp): + self.createGeometry(fp) + + def onChanged(self, fp, prop): + if prop in ["FacesNumber","Radius1","Radius2","Height"]: + self.createGeometry(fp) + + def createGeometry(self,fp): + if all((fp.Radius1,fp.Radius2,fp.FacesNumber,fp.Height)): + import math + import FreeCAD,Part + #from draftlibs import fcgeo + plm = fp.Placement + wires=[] + faces=[] + for ir,r in enumerate((fp.Radius1,fp.Radius2)): + angle = (math.pi*2)/fp.FacesNumber + pts = [FreeCAD.Vector(r,0,ir*fp.Height)] + for i in range(fp.FacesNumber-1): + ang = (i+1)*angle + pts.append(FreeCAD.Vector(\ + r*math.cos(ang),r*math.sin(ang),ir*fp.Height)) + pts.append(pts[0]) + shape = Part.makePolygon(pts) + face = Part.Face(shape) + wires.append(shape) + faces.append(face) + #shellperi=Part.makeRuledSurface(*wires) + shellperi=Part.makeLoft(wires) + shell=Part.Shell(shellperi.Faces+faces) + fp.Shape = Part.Solid(shell) + fp.Placement = plm + +class Twist: + def __init__(self, obj,child=None,h=1.0,angle=0.0): + obj.addProperty("App::PropertyLink","Base","Base", + "The base object that must be tranfsformed") + obj.addProperty("App::PropertyAngle","Angle","Base","Twist Angle in degrees") #degree or rad + obj.addProperty("App::PropertyDistance","Height","Base","Height of the Extrusion") + + obj.Base = child + obj.Angle = angle + obj.Height = h + obj.Proxy = self + + def execute(self, fp): + self.createGeometry(fp) + + def onChanged(self, fp, prop): + pass + #if prop in ["Angle","Height"]: + # self.createGeometry(fp) + + def createGeometry(self,fp): + import FreeCAD,Part,math + #tangle = -twist #openscad uses degrees clockwise + if fp.Base and fp.Angle and fp.Height and \ + fp.Base.Shape.isValid(): + #wire=fp.Base.Shape.Wires[0].transformGeometry(fp.Base.Placement.toMatrix()) + solids=[] + for faceb in fp.Base.Shape.Faces: + #fp.Base.Shape.Faces[0].check() + + #faceb=fp.Base.Shape.Faces[0] + #faceb=fp.Base.Shape.removeSplitter().Faces[0] + faceu=faceb.copy() + facetransform=FreeCAD.Matrix() + facetransform.rotateZ(math.radians(fp.Angle)) + facetransform.move(FreeCAD.Vector(0,0,fp.Height)) + faceu.transformShape(facetransform) + step = 2 + int(fp.Angle // 90) #resolution in z direction + zinc = fp.Height/(step-1.0) + angleinc = math.radians(fp.Angle)/(step-1.0) + spine = Part.makePolygon([(0,0,i*zinc) \ + for i in range(step)]) + auxspine = Part.makePolygon([(math.cos(i*angleinc),\ + math.sin(i*angleinc),i*fp.Height/(step-1)) \ + for i in range(step)]) + faces=[faceb,faceu] + for wire in faceb.Wires: + pipeshell=Part.BRepOffsetAPI.MakePipeShell(spine) + pipeshell.setSpineSupport(spine) + pipeshell.add(wire) + pipeshell.setAuxiliarySpine(auxspine,True,False) + print pipeshell.getStatus() + assert(pipeshell.isReady()) + #fp.Shape=pipeshell.makeSolid() + pipeshell.build() + faces.extend(pipeshell.shape().Faces) + try: + fullshell=Part.Shell(faces) + solid=Part.Solid(fullshell) + if solid.Volume < 0: + solid.reverse() + assert(solid.Volume >= 0) + solids.append(solid) + except: + solids.append(Part.Compound(faces)) + fp.Shape=Part.Compound(solids) + +class OffsetShape: + def __init__(self, obj,child=None,offset=1.0): + obj.addProperty("App::PropertyLink","Base","Base", + "The base object that must be tranfsformed") + obj.addProperty("App::PropertyDistance","Offset","Base","Offset outwards") + + obj.Base = child + obj.Offset = offset + obj.Proxy = self + + def execute(self, fp): + self.createGeometry(fp) + + def onChanged(self, fp, prop): + pass + #if prop in ["Offset"]: + # self.createGeometry(fp) + + def createGeometry(self,fp): + if fp.Base and fp.Offset: + fp.Shape=fp.Base.Shape.makeOffsetShape(self.Offset,1e-6) diff --git a/src/Mod/OpenSCAD/OpenSCADUtils.py b/src/Mod/OpenSCAD/OpenSCADUtils.py new file mode 100644 index 000000000..8f815b1e2 --- /dev/null +++ b/src/Mod/OpenSCAD/OpenSCADUtils.py @@ -0,0 +1,115 @@ +#*************************************************************************** +#* * +#* Copyright (c) 2012 Sebastian Hoogen * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU Lesser General Public License (LGPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** + +__title__="FreeCAD OpenSCAD Workbench - Utility Fuctions" +__author__ = "Sebastian Hoogen" +__url__ = ["http://free-cad.sourceforge.net"] + +''' +This Script includes various pyhton helper functions that are shared across +the module +''' +def callopenscad(inputfilename,outputfilename=None,outputext='csg',keepname=False): + '''call the open scad binary + returns the filename of the result (or None), + please delete the file afterwards''' + import FreeCAD,os,subprocess,tempfile,time + osfilename = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/OpenSCAD").\ + GetString('openscadexecutable') + if osfilename and os.path.isfile(osfilename): + if not outputfilename: + dir1=tempfile.gettempdir() + if keepname: + outputfilename=os.path.join(dir1,'%s.%s' % (os.path.split(inputfilename)[1].rsplit('.',1)[0],outputext)) + else: + outputfilename=os.path.join(dir1,'output-%d.%s' % (int(time.time()*10) % 1000000,outputext)) + if subprocess.call([osfilename,'-o',outputfilename,inputfilename]) == 0: + return outputfilename + +def callopenscadstring(scadstr,outputext='csg'): + '''create a tempfile and call the open scad binary + returns the filename of the result (or None), + please delete the file afterwards''' + import os,tempfile,time + dir1=tempfile.gettempdir() + inputfilename=os.path.join(dir1,'input-%d.scad' % (int(time.time()*10) % 1000000)) + inputfile = open(inputfilename,'w') + inputfile.write(scadstr) + inputfile.close() + outputfilename = callopenscad(inputfilename,outputext=outputext,keepname=True) + os.unlink(inputfilename) + return outputfilename + +def reverseimporttypes(): + '''allows to search for supported filetypes by module''' + + def getsetfromdict(dict1,index): + if index in dict1: + return dict1[index] + else: + set1=set() + dict1[index]=set1 + return set1 + + importtypes={} + import FreeCAD + for key,value in FreeCAD.getImportType().iteritems(): + if type(value) is str: + getsetfromdict(importtypes,value).add(key) + else: + for vitem in value: + getsetfromdict(importtypes,vitem).add(key) + return importtypes + + +def fcsubmatrix(m): + """Extracts the 3x3 Submatrix from a freecad Matrix Object + as a list of row vectors""" + return [[m.A11,m.A12,m.A13],[m.A21,m.A22,m.A23],[m.A31,m.A32,m.A33]] + +def multiplymat(l,r): + """multiply matrices given as lists of row vectors""" + rt=zip(*r) #transpose r + mat=[] + for y in range(len(rt)): + mline=[] + for x in range(len(l)): + mline.append(sum([le*re for le,re in zip(l[y],rt[x])])) + mat.append(mline) + return mat + +def isorthogonal(submatrix,precision=4): + """checking if 3x3 Matrix is ortogonal (M*Transp(M)==I)""" + prod=multiplymat(submatrix,zip(*submatrix)) + return [[round(f,precision) for f in line] for line in prod]==[[1,0,0],[0,1,0],[0,0,1]] + +def detsubmatrix(s): + """get the determinant of a 3x3 Matrix given as list of row vectors""" + return s[0][0]*s[1][1]*s[2][2]+s[0][1]*s[1][2]*s[2][0]+s[0][2]*s[1][0]*s[2][1]\ + -s[2][0]*s[1][1]*s[0][2]-s[2][1]*s[1][2]*s[0][0]-s[2][2]*s[1][0]*s[0][1] + +def isspecialorthogonalpython(submat,precision=4): + return isorthogonal(submat,precision) and round(detsubmatrix(submat),precision)==1 + +def isspecialorthogonal(mat,precision=4): + return abs(mat.submatrix(3).isOrthogonal(10**(-precision))-1.0) < 10**(-precision) and \ + abs(mat.submatrix(3).determinant()-1.0) < 10**(-precision) diff --git a/src/Mod/OpenSCAD/OpenSCAD_rc.py b/src/Mod/OpenSCAD/OpenSCAD_rc.py new file mode 100644 index 000000000..d733868be --- /dev/null +++ b/src/Mod/OpenSCAD/OpenSCAD_rc.py @@ -0,0 +1,8268 @@ +# -*- coding: utf-8 -*- + +# Resource object code +# +# Created: Mo. Jun 25 14:52:51 2012 +# by: The Resource Compiler for PyQt (Qt v4.6.3) +# +# WARNING! All changes made in this file will be lost! + +from PyQt4 import QtCore + +qt_resource_data = "\ +\x00\x00\x44\x7f\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ +\x2d\x38\x22\x3f\x3e\x0a\x3c\x75\x69\x20\x76\x65\x72\x73\x69\x6f\ +\x6e\x3d\x22\x34\x2e\x30\x22\x3e\x0a\x20\x3c\x63\x6c\x61\x73\x73\ +\x3e\x47\x75\x69\x3a\x3a\x44\x69\x61\x6c\x6f\x67\x3a\x3a\x44\x6c\ +\x67\x53\x65\x74\x74\x69\x6e\x67\x73\x4f\x70\x65\x6e\x53\x43\x41\ +\x44\x3c\x2f\x63\x6c\x61\x73\x73\x3e\x0a\x20\x3c\x77\x69\x64\x67\ +\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\x57\x69\x64\x67\x65\ +\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x47\x75\x69\x3a\x3a\x44\x69\ +\x61\x6c\x6f\x67\x3a\x3a\x44\x6c\x67\x53\x65\x74\x74\x69\x6e\x67\ +\x73\x4f\x70\x65\x6e\x53\x43\x41\x44\x22\x3e\x0a\x20\x20\x3c\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x67\x65\ +\x6f\x6d\x65\x74\x72\x79\x22\x3e\x0a\x20\x20\x20\x3c\x72\x65\x63\ +\x74\x3e\x0a\x20\x20\x20\x20\x3c\x78\x3e\x30\x3c\x2f\x78\x3e\x0a\ +\x20\x20\x20\x20\x3c\x79\x3e\x30\x3c\x2f\x79\x3e\x0a\x20\x20\x20\ +\x20\x3c\x77\x69\x64\x74\x68\x3e\x35\x37\x35\x3c\x2f\x77\x69\x64\ +\x74\x68\x3e\x0a\x20\x20\x20\x20\x3c\x68\x65\x69\x67\x68\x74\x3e\ +\x36\x32\x39\x3c\x2f\x68\x65\x69\x67\x68\x74\x3e\x0a\x20\x20\x20\ +\x3c\x2f\x72\x65\x63\x74\x3e\x0a\x20\x20\x3c\x2f\x70\x72\x6f\x70\ +\x65\x72\x74\x79\x3e\x0a\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\ +\x79\x20\x6e\x61\x6d\x65\x3d\x22\x77\x69\x6e\x64\x6f\x77\x54\x69\ +\x74\x6c\x65\x22\x3e\x0a\x20\x20\x20\x3c\x73\x74\x72\x69\x6e\x67\ +\x3e\x47\x65\x6e\x65\x72\x61\x6c\x20\x73\x65\x74\x74\x69\x6e\x67\ +\x73\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x3c\x2f\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x3c\x6c\x61\x79\x6f\ +\x75\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\x56\x42\x6f\x78\x4c\ +\x61\x79\x6f\x75\x74\x22\x3e\x0a\x20\x20\x20\x3c\x70\x72\x6f\x70\ +\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x73\x70\x61\x63\x69\ +\x6e\x67\x22\x3e\x0a\x20\x20\x20\x20\x3c\x6e\x75\x6d\x62\x65\x72\ +\x3e\x36\x3c\x2f\x6e\x75\x6d\x62\x65\x72\x3e\x0a\x20\x20\x20\x3c\ +\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x3c\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x6d\x61\ +\x72\x67\x69\x6e\x22\x3e\x0a\x20\x20\x20\x20\x3c\x6e\x75\x6d\x62\ +\x65\x72\x3e\x39\x3c\x2f\x6e\x75\x6d\x62\x65\x72\x3e\x0a\x20\x20\ +\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\ +\x3c\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x3c\x77\x69\x64\x67\ +\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\x47\x72\x6f\x75\x70\ +\x42\x6f\x78\x22\x20\x6e\x61\x6d\x65\x3d\x22\x67\x72\x6f\x75\x70\ +\x42\x6f\x78\x22\x3e\x0a\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\ +\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x69\x74\x6c\x65\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x69\x6e\x67\ +\x3e\x47\x65\x6e\x65\x72\x61\x6c\x20\x4f\x70\x65\x6e\x53\x43\x41\ +\x44\x20\x53\x65\x74\x74\x69\x6e\x67\x73\x3c\x2f\x73\x74\x72\x69\ +\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x3c\x6c\x61\x79\x6f\x75\ +\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\x56\x42\x6f\x78\x4c\x61\ +\x79\x6f\x75\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x76\x65\x72\x74\ +\x69\x63\x61\x6c\x4c\x61\x79\x6f\x75\x74\x5f\x32\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x6c\x61\x79\x6f\x75\x74\x20\x63\x6c\x61\x73\x73\ +\x3d\x22\x51\x48\x42\x6f\x78\x4c\x61\x79\x6f\x75\x74\x22\x20\x6e\ +\x61\x6d\x65\x3d\x22\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x4c\ +\x61\x79\x6f\x75\x74\x5f\x32\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x77\x69\x64\x67\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x51\x4c\x61\x62\x65\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x66\ +\x63\x6c\x61\x62\x65\x6c\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\ +\x65\x3d\x22\x74\x65\x78\x74\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x69\x6e\x67\x3e\x4f\x70\x65\ +\x6e\x53\x43\x41\x44\x20\x65\x78\x65\x63\x75\x74\x61\x62\x6c\x65\ +\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\ +\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\ +\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\x69\x64\x67\ +\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x47\x75\x69\x3a\x3a\x50\ +\x72\x65\x66\x46\x69\x6c\x65\x43\x68\x6f\x6f\x73\x65\x72\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x67\x75\x69\x3a\x3a\x70\x72\x65\x66\x66\ +\x69\x6c\x65\x63\x68\x6f\x6f\x73\x65\x72\x22\x20\x6e\x61\x74\x69\ +\x76\x65\x3d\x22\x74\x72\x75\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\ +\x61\x6d\x65\x3d\x22\x6d\x69\x6e\x69\x6d\x75\x6d\x53\x69\x7a\x65\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\ +\x69\x7a\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x77\x69\x64\x74\x68\x3e\x33\x30\x30\x3c\x2f\x77\x69\x64\ +\x74\x68\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x68\x65\x69\x67\x68\x74\x3e\x30\x3c\x2f\x68\x65\x69\x67\x68\ +\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\ +\x73\x69\x7a\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\ +\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x54\x69\x70\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x69\ +\x6e\x67\x3e\x54\x68\x65\x20\x70\x61\x74\x68\x20\x74\x6f\x20\x74\ +\x68\x65\x20\x4f\x70\x65\x6e\x53\x43\x41\x44\x20\x65\x78\x65\x63\ +\x75\x74\x65\x61\x62\x6c\x65\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\ +\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\ +\x22\x70\x72\x65\x66\x45\x6e\x74\x72\x79\x22\x20\x73\x74\x64\x73\ +\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\x67\x3e\x6f\x70\x65\x6e\ +\x73\x63\x61\x64\x65\x78\x65\x63\x75\x74\x61\x62\x6c\x65\x3c\x2f\ +\x63\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x50\x61\x74\ +\x68\x22\x20\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\ +\x6e\x67\x3e\x4d\x6f\x64\x2f\x4f\x70\x65\x6e\x53\x43\x41\x44\x3c\ +\x2f\x63\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\ +\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\ +\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x6c\x61\x79\x6f\ +\x75\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\ +\x3e\x0a\x20\x20\x20\x20\x20\x3c\x2f\x6c\x61\x79\x6f\x75\x74\x3e\ +\x0a\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\x3e\x0a\x20\ +\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x3c\x69\x74\ +\x65\x6d\x3e\x0a\x20\x20\x20\x20\x3c\x77\x69\x64\x67\x65\x74\x20\ +\x63\x6c\x61\x73\x73\x3d\x22\x51\x47\x72\x6f\x75\x70\x42\x6f\x78\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x67\x72\x6f\x75\x70\x42\x6f\x78\ +\x5f\x32\x22\x3e\x0a\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x69\x74\x6c\x65\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x69\x6e\x67\x3e\ +\x4f\x70\x65\x6e\x53\x43\x41\x44\x20\x69\x6d\x70\x6f\x72\x74\x3c\ +\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x3c\x2f\ +\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x3c\ +\x6c\x61\x79\x6f\x75\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\x56\ +\x42\x6f\x78\x4c\x61\x79\x6f\x75\x74\x22\x20\x6e\x61\x6d\x65\x3d\ +\x22\x76\x65\x72\x74\x69\x63\x61\x6c\x4c\x61\x79\x6f\x75\x74\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x6c\x61\x79\x6f\x75\x74\x20\x63\x6c\ +\x61\x73\x73\x3d\x22\x51\x48\x42\x6f\x78\x4c\x61\x79\x6f\x75\x74\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x68\x6f\x72\x69\x7a\x6f\x6e\x74\ +\x61\x6c\x4c\x61\x79\x6f\x75\x74\x5f\x35\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x77\x69\x64\x67\x65\x74\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x47\x75\x69\x3a\x3a\x50\x72\x65\x66\x43\x68\x65\ +\x63\x6b\x42\x6f\x78\x22\x20\x6e\x61\x6d\x65\x3d\x22\x67\x75\x69\ +\x3a\x3a\x70\x72\x65\x66\x63\x68\x65\x63\x6b\x62\x6f\x78\x76\x69\ +\x65\x77\x74\x72\x65\x65\x70\x72\x6f\x76\x69\x64\x65\x72\x22\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\ +\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x54\ +\x69\x70\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x72\x69\x6e\x67\x3e\x49\x66\x20\x74\x68\x69\x73\x20\ +\x69\x73\x20\x63\x68\x65\x63\x6b\x65\x64\x2c\x20\x46\x65\x61\x74\ +\x75\x72\x65\x73\x20\x77\x69\x6c\x6c\x20\x63\x6c\x61\x69\x6d\x20\ +\x74\x68\x69\x65\x72\x20\x63\x68\x69\x6c\x64\x72\x65\x6e\x20\x69\ +\x6e\x20\x74\x68\x65\x20\x74\x72\x65\x65\x20\x76\x69\x65\x77\x3c\ +\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x65\x78\x74\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x69\ +\x6e\x67\x3e\x55\x73\x65\x20\x56\x69\x65\x77\x50\x72\x6f\x76\x69\ +\x64\x65\x72\x20\x69\x6e\x20\x54\x72\x65\x65\x20\x56\x69\x65\x77\ +\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x45\x6e\ +\x74\x72\x79\x22\x20\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x73\x74\ +\x72\x69\x6e\x67\x3e\x75\x73\x65\x56\x69\x65\x77\x50\x72\x6f\x76\ +\x69\x64\x65\x72\x54\x72\x65\x65\x3c\x2f\x63\x73\x74\x72\x69\x6e\ +\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\ +\x65\x3d\x22\x70\x72\x65\x66\x50\x61\x74\x68\x22\x20\x73\x74\x64\ +\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\x67\x3e\x4d\x6f\x64\ +\x2f\x4f\x70\x65\x6e\x53\x43\x41\x44\x3c\x2f\x63\x73\x74\x72\x69\ +\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\ +\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x6c\x61\x79\x6f\x75\x74\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x6c\x61\x79\x6f\x75\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\ +\x48\x42\x6f\x78\x4c\x61\x79\x6f\x75\x74\x22\x20\x6e\x61\x6d\x65\ +\x3d\x22\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x4c\x61\x79\x6f\ +\x75\x74\x5f\x36\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x77\x69\x64\x67\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x47\x75\ +\x69\x3a\x3a\x50\x72\x65\x66\x43\x68\x65\x63\x6b\x42\x6f\x78\x22\ +\x20\x6e\x61\x6d\x65\x3d\x22\x67\x75\x69\x3a\x3a\x70\x72\x65\x66\ +\x63\x68\x65\x63\x6b\x62\x6f\x78\x6d\x75\x6c\x74\x6d\x61\x74\x72\ +\x69\x78\x66\x65\x61\x74\x75\x72\x65\x22\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\ +\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x54\x69\x70\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x69\ +\x6e\x67\x3e\x49\x66\x20\x74\x68\x69\x73\x20\x69\x73\x20\x63\x68\ +\x65\x63\x6b\x65\x64\x2c\x20\x4d\x75\x6c\x74\x6d\x61\x74\x72\x69\ +\x78\x20\x4f\x62\x6a\x65\x63\x74\x20\x77\x69\x6c\x6c\x20\x62\x65\ +\x20\x50\x61\x72\x61\x6d\x65\x74\x72\x69\x63\x3c\x2f\x73\x74\x72\ +\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\ +\x61\x6d\x65\x3d\x22\x74\x65\x78\x74\x22\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x69\x6e\x67\x3e\x55\ +\x73\x65\x20\x4d\x75\x6c\x74\x6d\x61\x74\x72\x69\x78\x20\x46\x65\ +\x61\x74\x75\x72\x65\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x70\ +\x72\x65\x66\x45\x6e\x74\x72\x79\x22\x20\x73\x74\x64\x73\x65\x74\ +\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x63\x73\x74\x72\x69\x6e\x67\x3e\x75\x73\x65\x4d\x75\x6c\ +\x74\x6d\x61\x74\x72\x69\x78\x46\x65\x61\x74\x75\x72\x65\x3c\x2f\ +\x63\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x50\x61\x74\ +\x68\x22\x20\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\ +\x6e\x67\x3e\x4d\x6f\x64\x2f\x4f\x70\x65\x6e\x53\x43\x41\x44\x3c\ +\x2f\x63\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\ +\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\ +\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x6c\x61\x79\x6f\ +\x75\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x6c\x61\x79\x6f\x75\x74\x20\x63\x6c\ +\x61\x73\x73\x3d\x22\x51\x48\x42\x6f\x78\x4c\x61\x79\x6f\x75\x74\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x68\x6f\x72\x69\x7a\x6f\x6e\x74\ +\x61\x6c\x4c\x61\x79\x6f\x75\x74\x5f\x37\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x77\x69\x64\x67\x65\x74\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x51\x4c\x61\x62\x65\x6c\x22\x20\x6e\x61\x6d\x65\ +\x3d\x22\x6c\x61\x62\x65\x6c\x5f\x31\x32\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\ +\x20\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x54\x69\x70\x22\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\ +\x69\x6e\x67\x3e\x54\x68\x65\x20\x6d\x61\x78\x69\x6d\x75\x6d\x20\ +\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x66\x61\x63\x65\x73\x20\ +\x6f\x66\x20\x61\x20\x70\x6f\x6c\x79\x67\x6f\x6e\x2c\x20\x70\x72\ +\x69\x73\x6d\x20\x6f\x72\x20\x66\x72\x75\x73\x74\x75\x6d\x2e\x20\ +\x49\x66\x20\x66\x6e\x20\x69\x73\x20\x67\x72\x65\x61\x74\x65\x72\ +\x20\x74\x68\x61\x6e\x20\x74\x68\x69\x73\x20\x76\x61\x6c\x75\x65\ +\x20\x74\x68\x65\x20\x6f\x62\x6a\x65\x63\x74\x20\x69\x73\x20\x63\ +\x6f\x6e\x73\x69\x64\x65\x72\x65\x64\x20\x74\x6f\x20\x62\x65\x20\ +\x61\x20\x63\x69\x72\x63\x75\x6c\x61\x72\x2e\x20\x53\x65\x74\x20\ +\x74\x6f\x20\x30\x20\x66\x6f\x72\x20\x6e\x6f\x20\x6c\x69\x6d\x69\ +\x74\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\ +\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x65\x78\x74\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x72\x69\x6e\x67\x3e\x4d\x61\x78\x69\x6d\x75\x6d\x20\x6e\x75\x6d\ +\x62\x65\x72\x20\x6f\x66\x20\x66\x61\x63\x65\x73\x20\x66\x6f\x72\ +\x20\x70\x6f\x6c\x79\x67\x6f\x6e\x73\x20\x28\x66\x6e\x29\x3c\x2f\ +\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x70\x61\x63\x65\x72\ +\x20\x6e\x61\x6d\x65\x3d\x22\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\ +\x6c\x53\x70\x61\x63\x65\x72\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\ +\x6d\x65\x3d\x22\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x65\x6e\ +\x75\x6d\x3e\x51\x74\x3a\x3a\x48\x6f\x72\x69\x7a\x6f\x6e\x74\x61\ +\x6c\x3c\x2f\x65\x6e\x75\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x73\x69\x7a\x65\x48\x69\x6e\ +\x74\x22\x20\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x69\x7a\x65\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\x69\ +\x64\x74\x68\x3e\x34\x30\x3c\x2f\x77\x69\x64\x74\x68\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x68\x65\x69\x67\ +\x68\x74\x3e\x32\x30\x3c\x2f\x68\x65\x69\x67\x68\x74\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x73\x69\x7a\x65\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\ +\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x2f\x73\x70\x61\x63\x65\x72\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x77\x69\x64\x67\x65\x74\x20\x63\x6c\x61\x73\x73\ +\x3d\x22\x47\x75\x69\x3a\x3a\x50\x72\x65\x66\x53\x70\x69\x6e\x42\ +\x6f\x78\x22\x20\x6e\x61\x6d\x65\x3d\x22\x67\x75\x69\x3a\x3a\x70\ +\x72\x65\x66\x6d\x61\x78\x66\x6e\x73\x70\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\ +\x20\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x54\x69\x70\x22\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\ +\x69\x6e\x67\x3e\x54\x68\x65\x20\x6d\x61\x78\x69\x6d\x75\x6d\x20\ +\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x66\x61\x63\x65\x73\x20\ +\x6f\x66\x20\x61\x20\x70\x6f\x6c\x79\x67\x6f\x6e\x2c\x20\x70\x72\ +\x69\x73\x6d\x20\x6f\x72\x20\x66\x72\x75\x73\x74\x75\x6d\x2e\x20\ +\x49\x66\x20\x66\x6e\x20\x69\x73\x20\x67\x72\x65\x61\x74\x65\x72\ +\x20\x74\x68\x61\x6e\x20\x74\x68\x69\x73\x20\x76\x61\x6c\x75\x65\ +\x20\x74\x68\x65\x20\x6f\x62\x6a\x65\x63\x74\x20\x69\x73\x20\x63\ +\x6f\x6e\x73\x69\x64\x65\x72\x65\x64\x20\x74\x6f\x20\x62\x65\x20\ +\x61\x20\x63\x69\x72\x63\x75\x6c\x61\x72\x2e\x20\x53\x65\x74\x20\ +\x74\x6f\x20\x30\x20\x66\x6f\x72\x20\x6e\x6f\x20\x6c\x69\x6d\x69\ +\x74\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\ +\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x76\x61\x6c\x75\x65\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x6e\ +\x75\x6d\x62\x65\x72\x3e\x30\x3c\x2f\x6e\x75\x6d\x62\x65\x72\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\ +\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\ +\x22\x70\x72\x65\x66\x45\x6e\x74\x72\x79\x22\x20\x73\x74\x64\x73\ +\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\x67\x3e\x75\x73\x65\x4d\ +\x61\x78\x46\x4e\x3c\x2f\x63\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x70\ +\x72\x65\x66\x50\x61\x74\x68\x22\x20\x73\x74\x64\x73\x65\x74\x3d\ +\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x63\x73\x74\x72\x69\x6e\x67\x3e\x4d\x6f\x64\x2f\x4f\x70\x65\ +\x6e\x53\x43\x41\x44\x3c\x2f\x63\x73\x74\x72\x69\x6e\x67\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\ +\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x2f\x77\x69\x64\x67\x65\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x6c\x61\x79\x6f\x75\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x69\ +\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x3c\x6c\x61\x79\ +\x6f\x75\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\x48\x42\x6f\x78\ +\x4c\x61\x79\x6f\x75\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x68\x6f\ +\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x4c\x61\x79\x6f\x75\x74\x5f\x38\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\x69\x64\x67\ +\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x47\x75\x69\x3a\x3a\x50\ +\x72\x65\x66\x43\x68\x65\x63\x6b\x42\x6f\x78\x22\x20\x6e\x61\x6d\ +\x65\x3d\x22\x67\x75\x69\x3a\x3a\x70\x72\x65\x66\x63\x68\x65\x63\ +\x6b\x62\x6f\x78\x6d\x75\x6c\x74\x6d\x61\x74\x72\x69\x78\x66\x65\ +\x61\x74\x75\x72\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\ +\x3d\x22\x74\x6f\x6f\x6c\x54\x69\x70\x22\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x69\x6e\x67\x3e\x44\ +\x65\x62\x75\x67\x3a\x20\x52\x65\x67\x69\x73\x74\x65\x72\x20\x66\ +\x69\x6c\x65\x74\x79\x70\x65\x20\x74\x6f\x20\x70\x72\x6f\x74\x6f\ +\x74\x79\x70\x65\x20\x69\x6d\x70\x6f\x72\x74\x65\x72\x3c\x2f\x73\ +\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\ +\x20\x6e\x61\x6d\x65\x3d\x22\x74\x65\x78\x74\x22\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x69\x6e\x67\ +\x3e\x44\x65\x62\x75\x67\x3a\x20\x52\x65\x67\x69\x73\x74\x65\x72\ +\x20\x66\x69\x6c\x65\x74\x79\x70\x65\x20\x74\x6f\x20\x70\x72\x6f\ +\x74\x6f\x74\x79\x70\x65\x20\x69\x6d\x70\x6f\x72\x74\x65\x72\x3c\ +\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x45\x6e\x74\ +\x72\x79\x22\x20\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\ +\x69\x6e\x67\x3e\x64\x65\x62\x75\x67\x52\x65\x67\x69\x73\x74\x65\ +\x72\x50\x72\x6f\x74\x6f\x74\x79\x70\x65\x3c\x2f\x63\x73\x74\x72\ +\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\ +\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x50\x61\x74\x68\x22\x20\x73\ +\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\x67\x3e\x4d\ +\x6f\x64\x2f\x4f\x70\x65\x6e\x53\x43\x41\x44\x3c\x2f\x63\x73\x74\ +\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x2f\x6c\x61\x79\x6f\x75\x74\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x6c\x61\x79\x6f\x75\x74\x20\x63\x6c\x61\x73\x73\x3d\ +\x22\x51\x48\x42\x6f\x78\x4c\x61\x79\x6f\x75\x74\x22\x20\x6e\x61\ +\x6d\x65\x3d\x22\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x4c\x61\ +\x79\x6f\x75\x74\x5f\x33\x22\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x3c\x2f\x6c\ +\x61\x79\x6f\x75\x74\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\ +\x67\x65\x74\x3e\x0a\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\ +\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x3c\x77\ +\x69\x64\x67\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\x47\x72\ +\x6f\x75\x70\x42\x6f\x78\x22\x20\x6e\x61\x6d\x65\x3d\x22\x67\x72\ +\x6f\x75\x70\x42\x6f\x78\x5f\x33\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\ +\x74\x69\x74\x6c\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\ +\x74\x72\x69\x6e\x67\x3e\x4f\x70\x65\x6e\x53\x43\x41\x44\x20\x65\ +\x78\x70\x6f\x72\x74\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x3c\x6c\x61\x79\x6f\x75\x74\x20\x63\x6c\x61\ +\x73\x73\x3d\x22\x51\x56\x42\x6f\x78\x4c\x61\x79\x6f\x75\x74\x22\ +\x20\x6e\x61\x6d\x65\x3d\x22\x76\x65\x72\x74\x69\x63\x61\x6c\x4c\ +\x61\x79\x6f\x75\x74\x5f\x32\x31\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x6c\x61\x79\x6f\x75\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\x48\ +\x42\x6f\x78\x4c\x61\x79\x6f\x75\x74\x22\x20\x6e\x61\x6d\x65\x3d\ +\x22\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x4c\x61\x79\x6f\x75\ +\x74\x5f\x32\x31\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x77\x69\x64\x67\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\x4c\ +\x61\x62\x65\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x6c\x61\x62\x65\ +\x6c\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x65\ +\x78\x74\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x72\x69\x6e\x67\x3e\x6d\x61\x78\x69\x6d\x75\x6d\x20\ +\x66\x72\x61\x67\x6d\x65\x6e\x74\x20\x73\x69\x7a\x65\x3c\x2f\x73\ +\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x70\x61\x63\x65\x72\x20\ +\x6e\x61\x6d\x65\x3d\x22\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\ +\x53\x70\x61\x63\x65\x72\x5f\x32\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\ +\x61\x6d\x65\x3d\x22\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x65\ +\x6e\x75\x6d\x3e\x51\x74\x3a\x3a\x48\x6f\x72\x69\x7a\x6f\x6e\x74\ +\x61\x6c\x3c\x2f\x65\x6e\x75\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x73\x69\x7a\x65\x48\x69\ +\x6e\x74\x22\x20\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x69\x7a\x65\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\ +\x69\x64\x74\x68\x3e\x34\x30\x3c\x2f\x77\x69\x64\x74\x68\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x68\x65\x69\ +\x67\x68\x74\x3e\x32\x30\x3c\x2f\x68\x65\x69\x67\x68\x74\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x73\x69\x7a\ +\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x2f\x73\x70\x61\x63\x65\x72\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x77\x69\x64\x67\x65\x74\x20\x63\x6c\x61\x73\ +\x73\x3d\x22\x51\x4c\x61\x62\x65\x6c\x22\x20\x6e\x61\x6d\x65\x3d\ +\x22\x6c\x61\x62\x65\x6c\x5f\x33\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\ +\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x54\x69\x70\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x69\x6e\ +\x67\x3e\x6d\x69\x6e\x69\x6d\x75\x6d\x20\x61\x6e\x67\x6c\x65\x20\ +\x66\x6f\x72\x20\x61\x20\x66\x72\x61\x67\x6d\x65\x6e\x74\x3c\x2f\ +\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\ +\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x65\x78\x74\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x69\x6e\ +\x67\x3e\x61\x6e\x67\x75\x6c\x61\x72\x20\x28\x66\x61\x29\x3c\x2f\ +\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\x69\x64\x67\x65\x74\ +\x20\x63\x6c\x61\x73\x73\x3d\x22\x47\x75\x69\x3a\x3a\x50\x72\x65\ +\x66\x44\x6f\x75\x62\x6c\x65\x53\x70\x69\x6e\x42\x6f\x78\x22\x20\ +\x6e\x61\x6d\x65\x3d\x22\x64\x6f\x75\x62\x6c\x65\x53\x70\x69\x6e\ +\x42\x6f\x78\x5f\x32\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\ +\x3d\x22\x74\x6f\x6f\x6c\x54\x69\x70\x22\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x69\x6e\x67\x3e\x6d\ +\x69\x6e\x69\x6d\x75\x6d\x20\x61\x6e\x67\x6c\x65\x20\x66\x6f\x72\ +\x20\x61\x20\x66\x72\x61\x67\x6d\x65\x6e\x74\x3c\x2f\x73\x74\x72\ +\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\ +\x61\x6d\x65\x3d\x22\x73\x75\x66\x66\x69\x78\x22\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x69\x6e\x67\ +\x3e\xc2\xb0\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\ +\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\ +\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x6d\x69\x6e\ +\x69\x6d\x75\x6d\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x64\x6f\x75\x62\x6c\x65\x3e\x30\x2e\x30\x31\x30\x30\ +\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x3c\x2f\x64\x6f\x75\ +\x62\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\ +\x61\x6d\x65\x3d\x22\x6d\x61\x78\x69\x6d\x75\x6d\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x6f\x75\x62\x6c\ +\x65\x3e\x33\x36\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\ +\x30\x30\x30\x30\x30\x3c\x2f\x64\x6f\x75\x62\x6c\x65\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x76\ +\x61\x6c\x75\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x64\x6f\x75\x62\x6c\x65\x3e\x31\x32\x2e\x30\x30\x30\ +\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x3c\x2f\x64\x6f\ +\x75\x62\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\ +\x6e\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x45\x6e\x74\x72\x79\x22\ +\x20\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\x67\ +\x3e\x65\x78\x70\x6f\x72\x74\x46\x61\x3c\x2f\x63\x73\x74\x72\x69\ +\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\ +\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\ +\x6d\x65\x3d\x22\x70\x72\x65\x66\x50\x61\x74\x68\x22\x20\x73\x74\ +\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\x67\x3e\x4d\x6f\ +\x64\x2f\x4f\x70\x65\x6e\x53\x43\x41\x44\x3c\x2f\x63\x73\x74\x72\ +\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x77\x69\x64\x67\x65\x74\x20\x63\x6c\ +\x61\x73\x73\x3d\x22\x4c\x69\x6e\x65\x22\x20\x6e\x61\x6d\x65\x3d\ +\x22\x6c\x69\x6e\x65\x5f\x32\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\ +\x6d\x65\x3d\x22\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x65\x6e\ +\x75\x6d\x3e\x51\x74\x3a\x3a\x56\x65\x72\x74\x69\x63\x61\x6c\x3c\ +\x2f\x65\x6e\x75\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\x69\x64\x67\x65\x74\x20\ +\x63\x6c\x61\x73\x73\x3d\x22\x51\x4c\x61\x62\x65\x6c\x22\x20\x6e\ +\x61\x6d\x65\x3d\x22\x6c\x61\x62\x65\x6c\x5f\x34\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x54\x69\x70\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\ +\x74\x72\x69\x6e\x67\x3e\x6d\x69\x6e\x69\x6d\x75\x6d\x20\x73\x69\ +\x7a\x65\x20\x6f\x66\x20\x61\x20\x66\x72\x61\x67\x6d\x65\x6e\x74\ +\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x65\x78\x74\x22\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\ +\x69\x6e\x67\x3e\x73\x69\x7a\x65\x20\x28\x66\x73\x29\x3c\x2f\x73\ +\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\x69\x64\x67\x65\x74\x20\ +\x63\x6c\x61\x73\x73\x3d\x22\x47\x75\x69\x3a\x3a\x50\x72\x65\x66\ +\x44\x6f\x75\x62\x6c\x65\x53\x70\x69\x6e\x42\x6f\x78\x22\x20\x6e\ +\x61\x6d\x65\x3d\x22\x64\x6f\x75\x62\x6c\x65\x53\x70\x69\x6e\x42\ +\x6f\x78\x5f\x33\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\ +\x22\x65\x6e\x61\x62\x6c\x65\x64\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x62\x6f\x6f\x6c\x3e\x74\x72\x75\x65\ +\x3c\x2f\x62\x6f\x6f\x6c\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\ +\x79\x20\x6e\x61\x6d\x65\x3d\x22\x73\x69\x7a\x65\x50\x6f\x6c\x69\ +\x63\x79\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x69\x7a\x65\x70\x6f\x6c\x69\x63\x79\x20\x68\x73\x69\x7a\ +\x65\x74\x79\x70\x65\x3d\x22\x4d\x69\x6e\x69\x6d\x75\x6d\x22\x20\ +\x76\x73\x69\x7a\x65\x74\x79\x70\x65\x3d\x22\x46\x69\x78\x65\x64\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x68\x6f\x72\x73\x74\x72\x65\x74\x63\x68\x3e\x30\x3c\x2f\x68\x6f\ +\x72\x73\x74\x72\x65\x74\x63\x68\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x76\x65\x72\x73\x74\x72\x65\x74\x63\ +\x68\x3e\x30\x3c\x2f\x76\x65\x72\x73\x74\x72\x65\x74\x63\x68\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x73\x69\ +\x7a\x65\x70\x6f\x6c\x69\x63\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x6d\x69\x6e\x69\x6d\x75\ +\x6d\x53\x69\x7a\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x73\x69\x7a\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x77\x69\x64\x74\x68\x3e\x30\x3c\x2f\ +\x77\x69\x64\x74\x68\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x68\x65\x69\x67\x68\x74\x3e\x30\x3c\x2f\x68\x65\ +\x69\x67\x68\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x2f\x73\x69\x7a\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x54\x69\x70\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\ +\x74\x72\x69\x6e\x67\x3e\x6d\x69\x6e\x69\x6d\x75\x6d\x20\x73\x69\ +\x7a\x65\x20\x6f\x66\x20\x61\x20\x66\x72\x61\x67\x6d\x65\x6e\x74\ +\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x61\x6c\x69\x67\x6e\x6d\ +\x65\x6e\x74\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x65\x74\x3e\x51\x74\x3a\x3a\x41\x6c\x69\x67\x6e\x52\ +\x69\x67\x68\x74\x7c\x51\x74\x3a\x3a\x41\x6c\x69\x67\x6e\x54\x72\ +\x61\x69\x6c\x69\x6e\x67\x7c\x51\x74\x3a\x3a\x41\x6c\x69\x67\x6e\ +\x56\x43\x65\x6e\x74\x65\x72\x3c\x2f\x73\x65\x74\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x73\x75\ +\x66\x66\x69\x78\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x73\x74\x72\x69\x6e\x67\x3e\x6d\x6d\x3c\x2f\x73\x74\ +\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\ +\x6e\x61\x6d\x65\x3d\x22\x6d\x69\x6e\x69\x6d\x75\x6d\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x6f\x75\x62\ +\x6c\x65\x3e\x30\x2e\x30\x31\x30\x30\x30\x30\x30\x30\x30\x30\x30\ +\x30\x30\x30\x30\x3c\x2f\x64\x6f\x75\x62\x6c\x65\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x6d\x61\ +\x78\x69\x6d\x75\x6d\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x64\x6f\x75\x62\x6c\x65\x3e\x31\x30\x30\x30\x30\ +\x2e\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\ +\x3c\x2f\x64\x6f\x75\x62\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x76\x61\x6c\x75\x65\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x6f\ +\x75\x62\x6c\x65\x3e\x32\x2e\x30\x30\x30\x30\x30\x30\x30\x30\x30\ +\x30\x30\x30\x30\x30\x30\x3c\x2f\x64\x6f\x75\x62\x6c\x65\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\ +\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\ +\x70\x72\x65\x66\x45\x6e\x74\x72\x79\x22\x20\x73\x74\x64\x73\x65\ +\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\x67\x3e\x65\x78\x70\x6f\x72\ +\x74\x46\x73\x3c\x2f\x63\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x70\x72\ +\x65\x66\x50\x61\x74\x68\x22\x20\x73\x74\x64\x73\x65\x74\x3d\x22\ +\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x63\x73\x74\x72\x69\x6e\x67\x3e\x4d\x6f\x64\x2f\x4f\x70\x65\x6e\ +\x53\x43\x41\x44\x3c\x2f\x63\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\ +\x77\x69\x64\x67\x65\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x2f\x6c\x61\x79\x6f\x75\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\ +\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x69\x74\ +\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x3c\x6c\x61\x79\x6f\ +\x75\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\x48\x42\x6f\x78\x4c\ +\x61\x79\x6f\x75\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x68\x6f\x72\ +\x69\x7a\x6f\x6e\x74\x61\x6c\x4c\x61\x79\x6f\x75\x74\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\x69\x64\x67\x65\x74\x20\ +\x63\x6c\x61\x73\x73\x3d\x22\x51\x4c\x61\x62\x65\x6c\x22\x20\x6e\ +\x61\x6d\x65\x3d\x22\x6c\x61\x62\x65\x6c\x5f\x32\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x65\x78\x74\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\x69\ +\x6e\x67\x3e\x63\x6f\x6e\x76\x65\x78\x69\x74\x79\x3c\x2f\x73\x74\ +\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x70\x61\x63\x65\x72\x20\x6e\ +\x61\x6d\x65\x3d\x22\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x53\ +\x70\x61\x63\x65\x72\x5f\x33\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\ +\x6d\x65\x3d\x22\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x65\x6e\ +\x75\x6d\x3e\x51\x74\x3a\x3a\x48\x6f\x72\x69\x7a\x6f\x6e\x74\x61\ +\x6c\x3c\x2f\x65\x6e\x75\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x73\x69\x7a\x65\x48\x69\x6e\ +\x74\x22\x20\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x69\x7a\x65\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\x69\ +\x64\x74\x68\x3e\x34\x30\x3c\x2f\x77\x69\x64\x74\x68\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x68\x65\x69\x67\ +\x68\x74\x3e\x32\x30\x3c\x2f\x68\x65\x69\x67\x68\x74\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x73\x69\x7a\x65\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\ +\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x2f\x73\x70\x61\x63\x65\x72\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x77\x69\x64\x67\x65\x74\x20\x63\x6c\x61\x73\x73\ +\x3d\x22\x47\x75\x69\x3a\x3a\x50\x72\x65\x66\x53\x70\x69\x6e\x42\ +\x6f\x78\x22\x20\x6e\x61\x6d\x65\x3d\x22\x73\x70\x69\x6e\x42\x6f\ +\x78\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x76\x61\ +\x6c\x75\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x6e\x75\x6d\x62\x65\x72\x3e\x31\x30\x3c\x2f\x6e\x75\x6d\ +\x62\x65\x72\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\ +\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x45\x6e\x74\x72\x79\x22\x20\ +\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\x67\x3e\ +\x65\x78\x70\x6f\x72\x74\x43\x6f\x6e\x76\x65\x78\x69\x74\x79\x3c\ +\x2f\x63\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x50\x61\ +\x74\x68\x22\x20\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\ +\x69\x6e\x67\x3e\x4d\x6f\x64\x2f\x4f\x70\x65\x6e\x53\x43\x41\x44\ +\x3c\x2f\x63\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\ +\x65\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\ +\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x6c\x61\x79\ +\x6f\x75\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\ +\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x6c\x61\x79\x6f\x75\x74\x20\x63\ +\x6c\x61\x73\x73\x3d\x22\x51\x47\x72\x69\x64\x4c\x61\x79\x6f\x75\ +\x74\x22\x20\x6e\x61\x6d\x65\x3d\x22\x67\x72\x69\x64\x4c\x61\x79\ +\x6f\x75\x74\x5f\x32\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x69\x74\x65\x6d\x20\x72\x6f\x77\x3d\x22\x30\x22\x20\x63\x6f\ +\x6c\x75\x6d\x6e\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x77\x69\x64\x67\x65\x74\x20\x63\x6c\x61\x73\x73\ +\x3d\x22\x51\x4c\x61\x62\x65\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\ +\x6c\x61\x62\x65\x6c\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\ +\x3d\x22\x74\x65\x78\x74\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x73\x74\x72\x69\x6e\x67\x3e\x4d\x65\x73\x68\ +\x20\x66\x61\x6c\x6c\x62\x61\x63\x6b\x3c\x2f\x73\x74\x72\x69\x6e\ +\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x20\x72\x6f\x77\x3d\x22\x30\ +\x22\x20\x63\x6f\x6c\x75\x6d\x6e\x3d\x22\x31\x22\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x70\x61\x63\x65\x72\x20\x6e\ +\x61\x6d\x65\x3d\x22\x68\x6f\x72\x69\x7a\x6f\x6e\x74\x61\x6c\x53\ +\x70\x61\x63\x65\x72\x5f\x32\x31\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\ +\x61\x6d\x65\x3d\x22\x6f\x72\x69\x65\x6e\x74\x61\x74\x69\x6f\x6e\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x65\ +\x6e\x75\x6d\x3e\x51\x74\x3a\x3a\x48\x6f\x72\x69\x7a\x6f\x6e\x74\ +\x61\x6c\x3c\x2f\x65\x6e\x75\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x73\x69\x7a\x65\x48\x69\ +\x6e\x74\x22\x20\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x69\x7a\x65\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\ +\x69\x64\x74\x68\x3e\x34\x30\x3c\x2f\x77\x69\x64\x74\x68\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x68\x65\x69\ +\x67\x68\x74\x3e\x32\x30\x3c\x2f\x68\x65\x69\x67\x68\x74\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x73\x69\x7a\ +\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x2f\x73\x70\x61\x63\x65\x72\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x20\x72\x6f\x77\x3d\x22\x30\ +\x22\x20\x63\x6f\x6c\x75\x6d\x6e\x3d\x22\x32\x22\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x77\x69\x64\x67\x65\x74\x20\x63\ +\x6c\x61\x73\x73\x3d\x22\x51\x4c\x61\x62\x65\x6c\x22\x20\x6e\x61\ +\x6d\x65\x3d\x22\x6c\x61\x62\x65\x6c\x5f\x33\x6d\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x54\x69\x70\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\ +\x74\x72\x69\x6e\x67\x3e\x4d\x61\x78\x69\x75\x6d\x20\x4c\x65\x6e\ +\x67\x74\x68\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\ +\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\ +\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x65\x78\ +\x74\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x73\x74\x72\x69\x6e\x67\x3e\x4d\x61\x78\x4c\x65\x6e\x67\x74\x68\ +\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\ +\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\ +\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\ +\x20\x72\x6f\x77\x3d\x22\x31\x22\x20\x63\x6f\x6c\x75\x6d\x6e\x3d\ +\x22\x32\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\ +\x69\x64\x67\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x47\x75\x69\ +\x3a\x3a\x50\x72\x65\x66\x44\x6f\x75\x62\x6c\x65\x53\x70\x69\x6e\ +\x42\x6f\x78\x22\x20\x6e\x61\x6d\x65\x3d\x22\x64\x6f\x75\x62\x6c\ +\x65\x53\x70\x69\x6e\x42\x6f\x78\x5f\x32\x6c\x22\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\ +\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x54\x69\x70\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x72\x69\x6e\x67\x3e\x4d\x61\x78\x69\x6d\x75\x6d\x20\x4c\x65\x6e\ +\x67\x74\x68\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\ +\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\ +\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x6d\x69\x6e\ +\x69\x6d\x75\x6d\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x64\x6f\x75\x62\x6c\x65\x3e\x30\x2e\x30\x30\x30\x30\ +\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x3c\x2f\x64\x6f\x75\ +\x62\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\ +\x61\x6d\x65\x3d\x22\x6d\x61\x78\x69\x6d\x75\x6d\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x6f\x75\x62\x6c\ +\x65\x3e\x31\x30\x30\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x30\x30\ +\x30\x30\x30\x30\x30\x30\x3c\x2f\x64\x6f\x75\x62\x6c\x65\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\ +\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\ +\x76\x61\x6c\x75\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x64\x6f\x75\x62\x6c\x65\x3e\x31\x2e\x30\x30\x30\ +\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x3c\x2f\x64\x6f\ +\x75\x62\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\ +\x6e\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x45\x6e\x74\x72\x79\x22\ +\x20\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\x67\ +\x3e\x6d\x65\x73\x68\x6d\x61\x78\x6c\x65\x6e\x67\x74\x68\x3c\x2f\ +\x63\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x50\x61\x74\ +\x68\x22\x20\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\ +\x6e\x67\x3e\x4d\x6f\x64\x2f\x4f\x70\x65\x6e\x53\x43\x41\x44\x3c\ +\x2f\x63\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\ +\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\ +\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\ +\x20\x72\x6f\x77\x3d\x22\x30\x22\x20\x63\x6f\x6c\x75\x6d\x6e\x3d\ +\x22\x33\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\ +\x69\x64\x67\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\x4c\x61\ +\x62\x65\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x6c\x61\x62\x65\x6c\ +\x5f\x34\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\ +\x6f\x6f\x6c\x54\x69\x70\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x73\x74\x72\x69\x6e\x67\x3e\x4d\x61\x78\x69\ +\x6d\x75\x6d\x20\x41\x72\x65\x61\x3c\x2f\x73\x74\x72\x69\x6e\x67\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\ +\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\ +\x3d\x22\x74\x65\x78\x74\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x73\x74\x72\x69\x6e\x67\x3e\x6d\x61\x78\x41\ +\x72\x65\x61\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\ +\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\ +\x64\x67\x65\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\ +\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\ +\x74\x65\x6d\x20\x72\x6f\x77\x3d\x22\x31\x22\x20\x63\x6f\x6c\x75\ +\x6d\x6e\x3d\x22\x33\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x77\x69\x64\x67\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\ +\x47\x75\x69\x3a\x3a\x50\x72\x65\x66\x44\x6f\x75\x62\x6c\x65\x53\ +\x70\x69\x6e\x42\x6f\x78\x22\x20\x6e\x61\x6d\x65\x3d\x22\x64\x6f\ +\x75\x62\x6c\x65\x53\x70\x69\x6e\x42\x6f\x78\x5f\x32\x61\x22\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\ +\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x54\ +\x69\x70\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x72\x69\x6e\x67\x3e\x4d\x61\x78\x69\x6d\x75\x6d\x20\ +\x41\x72\x65\x61\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x6d\x69\ +\x6e\x69\x6d\x75\x6d\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x64\x6f\x75\x62\x6c\x65\x3e\x30\x2e\x30\x30\x30\ +\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x3c\x2f\x64\x6f\ +\x75\x62\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\ +\x6e\x61\x6d\x65\x3d\x22\x6d\x61\x78\x69\x6d\x75\x6d\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x6f\x75\x62\ +\x6c\x65\x3e\x31\x30\x30\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x30\ +\x30\x30\x30\x30\x30\x30\x30\x3c\x2f\x64\x6f\x75\x62\x6c\x65\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\ +\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\ +\x22\x76\x61\x6c\x75\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x64\x6f\x75\x62\x6c\x65\x3e\x30\x2e\x30\x30\ +\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x3c\x2f\x64\ +\x6f\x75\x62\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\ +\x20\x6e\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x45\x6e\x74\x72\x79\ +\x22\x20\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\ +\x67\x3e\x6d\x65\x73\x68\x6d\x61\x78\x61\x72\x65\x61\x3c\x2f\x63\ +\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\ +\x79\x20\x6e\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x50\x61\x74\x68\ +\x22\x20\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\ +\x67\x3e\x4d\x6f\x64\x2f\x4f\x70\x65\x6e\x53\x43\x41\x44\x3c\x2f\ +\x63\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x20\ +\x72\x6f\x77\x3d\x22\x31\x22\x20\x63\x6f\x6c\x75\x6d\x6e\x3d\x22\ +\x34\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\x69\ +\x64\x67\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x47\x75\x69\x3a\ +\x3a\x50\x72\x65\x66\x44\x6f\x75\x62\x6c\x65\x53\x70\x69\x6e\x42\ +\x6f\x78\x22\x20\x6e\x61\x6d\x65\x3d\x22\x64\x6f\x75\x62\x6c\x65\ +\x53\x70\x69\x6e\x42\x6f\x78\x5f\x6c\x6c\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\ +\x20\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x54\x69\x70\x22\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x72\ +\x69\x6e\x67\x3e\x4c\x6f\x63\x61\x6c\x20\x4c\x65\x6e\x67\x74\x68\ +\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\ +\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x6d\x69\x6e\x69\x6d\x75\ +\x6d\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x64\x6f\x75\x62\x6c\x65\x3e\x30\x2e\x30\x30\x30\x30\x30\x30\x30\ +\x30\x30\x30\x30\x30\x30\x30\x30\x3c\x2f\x64\x6f\x75\x62\x6c\x65\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\ +\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\ +\x3d\x22\x6d\x61\x78\x69\x6d\x75\x6d\x22\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x6f\x75\x62\x6c\x65\x3e\x31\ +\x30\x30\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\ +\x30\x30\x30\x3c\x2f\x64\x6f\x75\x62\x6c\x65\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\ +\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\ +\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x76\x61\x6c\ +\x75\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x64\x6f\x75\x62\x6c\x65\x3e\x30\x2e\x30\x30\x30\x30\x30\x30\ +\x30\x30\x30\x30\x30\x30\x30\x30\x30\x3c\x2f\x64\x6f\x75\x62\x6c\ +\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\ +\x65\x3d\x22\x70\x72\x65\x66\x45\x6e\x74\x72\x79\x22\x20\x73\x74\ +\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\x67\x3e\x6d\x65\ +\x73\x68\x6c\x6f\x63\x61\x6c\x6c\x65\x6e\x3c\x2f\x63\x73\x74\x72\ +\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\ +\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x50\x61\x74\x68\x22\x20\x73\ +\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\x67\x3e\x4d\ +\x6f\x64\x2f\x4f\x70\x65\x6e\x53\x43\x41\x44\x3c\x2f\x63\x73\x74\ +\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x20\x72\x6f\x77\ +\x3d\x22\x30\x22\x20\x63\x6f\x6c\x75\x6d\x6e\x3d\x22\x34\x22\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\x69\x64\x67\x65\ +\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\x4c\x61\x62\x65\x6c\x22\ +\x20\x6e\x61\x6d\x65\x3d\x22\x6c\x61\x62\x65\x6c\x5f\x34\x22\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\ +\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x54\ +\x69\x70\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x72\x69\x6e\x67\x3e\x4c\x6f\x63\x61\x6c\x20\x4c\x65\ +\x6e\x67\x74\x68\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\ +\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x65\ +\x78\x74\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x72\x69\x6e\x67\x3e\x6c\x6f\x63\x61\x6c\x4c\x65\x6e\ +\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\ +\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\ +\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\ +\x20\x72\x6f\x77\x3d\x22\x31\x22\x20\x63\x6f\x6c\x75\x6d\x6e\x3d\ +\x22\x35\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\ +\x69\x64\x67\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x47\x75\x69\ +\x3a\x3a\x50\x72\x65\x66\x44\x6f\x75\x62\x6c\x65\x53\x70\x69\x6e\ +\x42\x6f\x78\x22\x20\x6e\x61\x6d\x65\x3d\x22\x64\x6f\x75\x62\x6c\ +\x65\x53\x70\x69\x6e\x42\x6f\x78\x5f\x32\x61\x22\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\ +\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\x54\x69\x70\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x72\x69\x6e\x67\x3e\x44\x65\x66\x6c\x65\x63\x74\x69\x6f\x6e\x3c\ +\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\ +\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x6d\x69\x6e\x69\x6d\x75\x6d\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\ +\x6f\x75\x62\x6c\x65\x3e\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x30\ +\x30\x30\x30\x30\x30\x30\x30\x3c\x2f\x64\x6f\x75\x62\x6c\x65\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\ +\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\ +\x22\x6d\x61\x78\x69\x6d\x75\x6d\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x64\x6f\x75\x62\x6c\x65\x3e\x31\x30\ +\x30\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\x30\ +\x30\x30\x3c\x2f\x64\x6f\x75\x62\x6c\x65\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\ +\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x76\x61\x6c\x75\ +\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x64\x6f\x75\x62\x6c\x65\x3e\x30\x2e\x30\x30\x30\x30\x30\x30\x30\ +\x30\x30\x30\x30\x30\x30\x30\x30\x3c\x2f\x64\x6f\x75\x62\x6c\x65\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\ +\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\ +\x3d\x22\x70\x72\x65\x66\x45\x6e\x74\x72\x79\x22\x20\x73\x74\x64\ +\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\x67\x3e\x6d\x65\x73\ +\x68\x64\x65\x66\x6c\x65\x63\x74\x69\x6f\x6e\x3c\x2f\x63\x73\x74\ +\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\ +\x6e\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x50\x61\x74\x68\x22\x20\ +\x73\x74\x64\x73\x65\x74\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x73\x74\x72\x69\x6e\x67\x3e\ +\x4d\x6f\x64\x2f\x4f\x70\x65\x6e\x53\x43\x41\x44\x3c\x2f\x63\x73\ +\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\x6d\x20\x72\x6f\ +\x77\x3d\x22\x30\x22\x20\x63\x6f\x6c\x75\x6d\x6e\x3d\x22\x35\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x77\x69\x64\x67\ +\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\x4c\x61\x62\x65\x6c\ +\x22\x20\x6e\x61\x6d\x65\x3d\x22\x6c\x61\x62\x65\x6c\x5f\x34\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\ +\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x6f\x6f\x6c\ +\x54\x69\x70\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x72\x69\x6e\x67\x3e\x44\x65\x66\x6c\x65\x63\x74\ +\x69\x6f\x6e\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\ +\x79\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x72\ +\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x74\x65\x78\ +\x74\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x73\x74\x72\x69\x6e\x67\x3e\x64\x65\x66\x6c\x65\x63\x74\x69\x6f\ +\x6e\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\ +\x65\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\ +\x65\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x69\x74\x65\ +\x6d\x20\x72\x6f\x77\x3d\x22\x31\x22\x20\x63\x6f\x6c\x75\x6d\x6e\ +\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x77\x69\x64\x67\x65\x74\x20\x63\x6c\x61\x73\x73\x3d\x22\x51\x4c\ +\x61\x62\x65\x6c\x22\x20\x6e\x61\x6d\x65\x3d\x22\x6c\x61\x62\x65\ +\x6c\x5f\x35\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\ +\x74\x65\x78\x74\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x73\x74\x72\x69\x6e\x67\x3e\x54\x72\x69\x61\x6e\x67\ +\x75\x6c\x61\x74\x69\x6f\x6e\x20\x73\x65\x74\x74\x69\x6e\x67\x73\ +\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\ +\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\ +\x6d\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x6c\x61\x79\x6f\ +\x75\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\ +\x3e\x0a\x20\x20\x20\x20\x20\x3c\x2f\x6c\x61\x79\x6f\x75\x74\x3e\ +\x0a\x20\x20\x20\x20\x3c\x2f\x77\x69\x64\x67\x65\x74\x3e\x0a\x20\ +\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\x20\x20\x3c\x69\x74\ +\x65\x6d\x3e\x0a\x20\x20\x20\x20\x3c\x73\x70\x61\x63\x65\x72\x20\ +\x6e\x61\x6d\x65\x3d\x22\x76\x65\x72\x74\x69\x63\x61\x6c\x53\x70\ +\x61\x63\x65\x72\x22\x3e\x0a\x20\x20\x20\x20\x20\x3c\x70\x72\x6f\ +\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\x6f\x72\x69\x65\ +\x6e\x74\x61\x74\x69\x6f\x6e\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x65\x6e\x75\x6d\x3e\x51\x74\x3a\x3a\x56\x65\x72\x74\x69\x63\ +\x61\x6c\x3c\x2f\x65\x6e\x75\x6d\x3e\x0a\x20\x20\x20\x20\x20\x3c\ +\x2f\x70\x72\x6f\x70\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x20\ +\x3c\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x3d\x22\ +\x73\x69\x7a\x65\x48\x69\x6e\x74\x22\x20\x73\x74\x64\x73\x65\x74\ +\x3d\x22\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x69\x7a\ +\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x3c\x77\x69\x64\x74\x68\ +\x3e\x32\x30\x3c\x2f\x77\x69\x64\x74\x68\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x68\x65\x69\x67\x68\x74\x3e\x34\x30\x3c\x2f\x68\ +\x65\x69\x67\x68\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\x73\ +\x69\x7a\x65\x3e\x0a\x20\x20\x20\x20\x20\x3c\x2f\x70\x72\x6f\x70\ +\x65\x72\x74\x79\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x73\x70\x61\x63\ +\x65\x72\x3e\x0a\x20\x20\x20\x3c\x2f\x69\x74\x65\x6d\x3e\x0a\x20\ +\x20\x3c\x2f\x6c\x61\x79\x6f\x75\x74\x3e\x0a\x20\x3c\x2f\x77\x69\ +\x64\x67\x65\x74\x3e\x0a\x20\x3c\x6c\x61\x79\x6f\x75\x74\x64\x65\ +\x66\x61\x75\x6c\x74\x20\x73\x70\x61\x63\x69\x6e\x67\x3d\x22\x36\ +\x22\x20\x6d\x61\x72\x67\x69\x6e\x3d\x22\x31\x31\x22\x2f\x3e\x0a\ +\x20\x3c\x70\x69\x78\x6d\x61\x70\x66\x75\x6e\x63\x74\x69\x6f\x6e\ +\x3e\x71\x50\x69\x78\x6d\x61\x70\x46\x72\x6f\x6d\x4d\x69\x6d\x65\ +\x53\x6f\x75\x72\x63\x65\x3c\x2f\x70\x69\x78\x6d\x61\x70\x66\x75\ +\x6e\x63\x74\x69\x6f\x6e\x3e\x0a\x20\x3c\x63\x75\x73\x74\x6f\x6d\ +\x77\x69\x64\x67\x65\x74\x73\x3e\x0a\x20\x20\x3c\x63\x75\x73\x74\ +\x6f\x6d\x77\x69\x64\x67\x65\x74\x3e\x0a\x20\x20\x20\x3c\x63\x6c\ +\x61\x73\x73\x3e\x47\x75\x69\x3a\x3a\x46\x69\x6c\x65\x43\x68\x6f\ +\x6f\x73\x65\x72\x3c\x2f\x63\x6c\x61\x73\x73\x3e\x0a\x20\x20\x20\ +\x3c\x65\x78\x74\x65\x6e\x64\x73\x3e\x51\x57\x69\x64\x67\x65\x74\ +\x3c\x2f\x65\x78\x74\x65\x6e\x64\x73\x3e\x0a\x20\x20\x20\x3c\x68\ +\x65\x61\x64\x65\x72\x3e\x47\x75\x69\x2f\x46\x69\x6c\x65\x44\x69\ +\x61\x6c\x6f\x67\x2e\x68\x3c\x2f\x68\x65\x61\x64\x65\x72\x3e\x0a\ +\x20\x20\x3c\x2f\x63\x75\x73\x74\x6f\x6d\x77\x69\x64\x67\x65\x74\ +\x3e\x0a\x20\x20\x3c\x63\x75\x73\x74\x6f\x6d\x77\x69\x64\x67\x65\ +\x74\x3e\x0a\x20\x20\x20\x3c\x63\x6c\x61\x73\x73\x3e\x47\x75\x69\ +\x3a\x3a\x50\x72\x65\x66\x46\x69\x6c\x65\x43\x68\x6f\x6f\x73\x65\ +\x72\x3c\x2f\x63\x6c\x61\x73\x73\x3e\x0a\x20\x20\x20\x3c\x65\x78\ +\x74\x65\x6e\x64\x73\x3e\x47\x75\x69\x3a\x3a\x46\x69\x6c\x65\x43\ +\x68\x6f\x6f\x73\x65\x72\x3c\x2f\x65\x78\x74\x65\x6e\x64\x73\x3e\ +\x0a\x20\x20\x20\x3c\x68\x65\x61\x64\x65\x72\x3e\x47\x75\x69\x2f\ +\x50\x72\x65\x66\x57\x69\x64\x67\x65\x74\x73\x2e\x68\x3c\x2f\x68\ +\x65\x61\x64\x65\x72\x3e\x0a\x20\x20\x3c\x2f\x63\x75\x73\x74\x6f\ +\x6d\x77\x69\x64\x67\x65\x74\x3e\x0a\x20\x20\x3c\x63\x75\x73\x74\ +\x6f\x6d\x77\x69\x64\x67\x65\x74\x3e\x0a\x20\x20\x20\x3c\x63\x6c\ +\x61\x73\x73\x3e\x47\x75\x69\x3a\x3a\x50\x72\x65\x66\x53\x70\x69\ +\x6e\x42\x6f\x78\x3c\x2f\x63\x6c\x61\x73\x73\x3e\x0a\x20\x20\x20\ +\x3c\x65\x78\x74\x65\x6e\x64\x73\x3e\x51\x53\x70\x69\x6e\x42\x6f\ +\x78\x3c\x2f\x65\x78\x74\x65\x6e\x64\x73\x3e\x0a\x20\x20\x20\x3c\ +\x68\x65\x61\x64\x65\x72\x3e\x47\x75\x69\x2f\x50\x72\x65\x66\x57\ +\x69\x64\x67\x65\x74\x73\x2e\x68\x3c\x2f\x68\x65\x61\x64\x65\x72\ +\x3e\x0a\x20\x20\x3c\x2f\x63\x75\x73\x74\x6f\x6d\x77\x69\x64\x67\ +\x65\x74\x3e\x0a\x20\x20\x3c\x63\x75\x73\x74\x6f\x6d\x77\x69\x64\ +\x67\x65\x74\x3e\x0a\x20\x20\x20\x3c\x63\x6c\x61\x73\x73\x3e\x47\ +\x75\x69\x3a\x3a\x50\x72\x65\x66\x43\x68\x65\x63\x6b\x42\x6f\x78\ +\x3c\x2f\x63\x6c\x61\x73\x73\x3e\x0a\x20\x20\x20\x3c\x65\x78\x74\ +\x65\x6e\x64\x73\x3e\x51\x43\x68\x65\x63\x6b\x42\x6f\x78\x3c\x2f\ +\x65\x78\x74\x65\x6e\x64\x73\x3e\x0a\x20\x20\x20\x3c\x68\x65\x61\ +\x64\x65\x72\x3e\x47\x75\x69\x2f\x50\x72\x65\x66\x57\x69\x64\x67\ +\x65\x74\x73\x2e\x68\x3c\x2f\x68\x65\x61\x64\x65\x72\x3e\x0a\x20\ +\x20\x3c\x2f\x63\x75\x73\x74\x6f\x6d\x77\x69\x64\x67\x65\x74\x3e\ +\x0a\x20\x20\x3c\x63\x75\x73\x74\x6f\x6d\x77\x69\x64\x67\x65\x74\ +\x3e\x0a\x20\x20\x20\x3c\x63\x6c\x61\x73\x73\x3e\x47\x75\x69\x3a\ +\x3a\x50\x72\x65\x66\x44\x6f\x75\x62\x6c\x65\x53\x70\x69\x6e\x42\ +\x6f\x78\x3c\x2f\x63\x6c\x61\x73\x73\x3e\x0a\x20\x20\x20\x3c\x65\ +\x78\x74\x65\x6e\x64\x73\x3e\x51\x44\x6f\x75\x62\x6c\x65\x53\x70\ +\x69\x6e\x42\x6f\x78\x3c\x2f\x65\x78\x74\x65\x6e\x64\x73\x3e\x0a\ +\x20\x20\x20\x3c\x68\x65\x61\x64\x65\x72\x3e\x47\x75\x69\x2f\x50\ +\x72\x65\x66\x57\x69\x64\x67\x65\x74\x73\x2e\x68\x3c\x2f\x68\x65\ +\x61\x64\x65\x72\x3e\x0a\x20\x20\x3c\x2f\x63\x75\x73\x74\x6f\x6d\ +\x77\x69\x64\x67\x65\x74\x3e\x0a\x20\x3c\x2f\x63\x75\x73\x74\x6f\ +\x6d\x77\x69\x64\x67\x65\x74\x73\x3e\x0a\x20\x3c\x72\x65\x73\x6f\ +\x75\x72\x63\x65\x73\x2f\x3e\x0a\x20\x3c\x63\x6f\x6e\x6e\x65\x63\ +\x74\x69\x6f\x6e\x73\x2f\x3e\x0a\x3c\x2f\x75\x69\x3e\x0a\ +\x00\x00\x19\x09\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ +\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\ +\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\ +\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\ +\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\ +\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\ +\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\ +\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\ +\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\ +\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\ +\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\ +\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\ +\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\ +\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\ +\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\ +\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\ +\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\ +\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\ +\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\ +\x68\x74\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\ +\x73\x6f\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\ +\x44\x54\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\ +\x74\x64\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\ +\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\ +\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x34\ +\x70\x78\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\ +\x34\x70\x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x32\ +\x39\x38\x30\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\ +\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x33\x32\x22\x0a\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x65\x72\x73\ +\x69\x6f\x6e\x3d\x22\x30\x2e\x34\x38\x2e\x33\x2e\x31\x20\x72\x39\ +\x38\x38\x36\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\ +\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x54\x72\x65\x65\x5f\x50\ +\x61\x72\x74\x2e\x73\x76\x67\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x6f\x75\x74\x70\x75\x74\x5f\x65\x78\x74\x65\ +\x6e\x73\x69\x6f\x6e\x3d\x22\x6f\x72\x67\x2e\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x2e\x6f\x75\x74\x70\x75\x74\x2e\x73\x76\x67\x2e\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x22\x0a\x20\x20\x20\x76\x65\x72\x73\ +\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x3e\x0a\x20\x20\x3c\x64\x65\ +\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\ +\x32\x39\x38\x32\x22\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x33\x38\x36\x34\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x38\x36\x36\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x37\x31\ +\x62\x32\x66\x38\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\ +\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x73\x74\x6f\x70\x33\x38\x36\x38\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x32\x37\ +\x39\x35\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\ +\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\ +\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\ +\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\ +\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\x33\x32\x20\x3a\x20\x31\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\ +\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x36\x34\x20\x3a\x20\ +\x33\x32\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\ +\x6f\x72\x69\x67\x69\x6e\x3d\x22\x33\x32\x20\x3a\x20\x32\x31\x2e\ +\x33\x33\x33\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\ +\x76\x65\x32\x39\x38\x38\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x64\ +\x65\x66\x73\x3e\x0a\x20\x20\x3c\x73\x6f\x64\x69\x70\x6f\x64\x69\ +\x3a\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0a\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x62\x61\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x70\ +\x61\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\x66\ +\x66\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x63\x6f\ +\x6c\x6f\x72\x3d\x22\x23\x36\x36\x36\x36\x36\x36\x22\x0a\x20\x20\ +\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\ +\x3d\x22\x31\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x6f\x70\x61\x63\x69\x74\x79\ +\x3d\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x70\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\ +\x22\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\x35\x2e\x35\x22\x0a\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x2d\ +\x32\x2e\x38\x31\x38\x31\x38\x31\x38\x22\x0a\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x33\x32\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x6c\x61\ +\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x73\x68\x6f\x77\x67\ +\x72\x69\x64\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\x63\x75\x6d\x65\x6e\ +\x74\x2d\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\x22\x0a\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x69\x64\x2d\ +\x62\x62\x6f\x78\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\ +\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x33\x36\x36\x22\x0a\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\ +\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x37\x30\x36\x22\x0a\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\ +\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x2d\x38\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\ +\x2d\x79\x3d\x22\x2d\x38\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x6d\x61\x78\ +\x69\x6d\x69\x7a\x65\x64\x3d\x22\x31\x22\x20\x2f\x3e\x0a\x20\x20\ +\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0a\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x32\x39\x38\x35\x22\ +\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\ +\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\ +\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\x65\x2f\x73\ +\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\x72\x6d\x61\ +\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\ +\x79\x70\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\ +\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\x22\x68\x74\x74\ +\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\ +\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\x69\x6c\x6c\x49\x6d\ +\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x3c\x2f\x64\x63\x3a\x74\ +\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\x63\x63\ +\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x64\x66\ +\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\x74\x61\x64\x61\ +\x74\x61\x3e\x0a\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\x6c\x3d\x22\x4c\ +\x61\x79\x65\x72\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\x6f\x64\x65\x3d\ +\x22\x6c\x61\x79\x65\x72\x22\x3e\x0a\x20\x20\x20\x20\x3c\x67\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x33\x38\x34\x35\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\ +\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x35\x38\x33\ +\x30\x36\x31\x34\x33\x2c\x30\x2c\x30\x2c\x30\x2e\x35\x38\x33\x30\ +\x36\x31\x34\x33\x2c\x2d\x31\x32\x2e\x36\x35\x34\x37\x38\x2c\x2d\ +\x37\x37\x2e\x34\x33\x38\x34\x34\x32\x29\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\ +\x30\x30\x38\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ +\x64\x74\x68\x3a\x33\x2e\x34\x35\x31\x33\x38\x35\x39\x37\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\ +\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\ +\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x30\x30\x38\ +\x30\x30\x30\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\ +\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\ +\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ +\x3a\x33\x2e\x34\x35\x31\x33\x38\x35\x39\x37\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\ +\x62\x65\x76\x65\x6c\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\ +\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\ +\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\ +\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\ +\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\ +\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\ +\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\ +\x39\x36\x2e\x31\x38\x34\x34\x34\x2c\x31\x34\x31\x2e\x34\x34\x39\ +\x36\x38\x20\x2d\x31\x39\x2e\x38\x31\x34\x34\x31\x2c\x37\x2e\x31\ +\x37\x39\x32\x31\x20\x32\x39\x2e\x34\x33\x34\x39\x2c\x33\x2e\x39\ +\x37\x32\x30\x39\x20\x2d\x30\x2e\x37\x32\x33\x35\x37\x2c\x33\x36\ +\x2e\x31\x32\x36\x36\x35\x20\x31\x37\x2e\x32\x35\x38\x38\x31\x2c\ +\x2d\x31\x30\x2e\x39\x34\x33\x38\x38\x20\x30\x2e\x35\x37\x35\x38\ +\x37\x2c\x2d\x33\x34\x2e\x33\x38\x34\x38\x35\x20\x2d\x32\x36\x2e\ +\x37\x33\x31\x36\x2c\x2d\x31\x2e\x39\x34\x39\x32\x32\x20\x7a\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\ +\x74\x68\x33\x38\x32\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\ +\x70\x65\x73\x3d\x22\x63\x63\x63\x63\x63\x63\x63\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\ +\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x30\x30\x38\ +\x30\x30\x30\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\ +\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\ +\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ +\x3a\x33\x2e\x34\x35\x31\x33\x38\x35\x39\x37\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\ +\x62\x65\x76\x65\x6c\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\ +\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\ +\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\ +\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\ +\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\ +\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\ +\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\ +\x37\x35\x2e\x35\x37\x39\x34\x31\x2c\x31\x34\x38\x2e\x36\x35\x38\ +\x39\x20\x33\x30\x2e\x37\x30\x38\x38\x34\x2c\x33\x2e\x33\x36\x35\ +\x36\x32\x20\x30\x2c\x33\x36\x2e\x34\x37\x37\x31\x39\x20\x2d\x33\ +\x31\x2e\x31\x32\x33\x38\x33\x2c\x2d\x35\x2e\x30\x36\x34\x37\x39\ +\x20\x30\x2e\x34\x31\x34\x39\x39\x2c\x2d\x33\x34\x2e\x37\x37\x38\ +\x30\x32\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x32\x35\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\ +\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\x63\x63\x63\x63\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\ +\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\ +\x30\x30\x38\x30\x30\x30\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\ +\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\ +\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ +\x64\x74\x68\x3a\x33\x2e\x34\x35\x31\x33\x38\x35\x39\x37\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\ +\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\ +\x69\x6e\x3a\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\ +\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\ +\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\ +\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\ +\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\ +\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\ +\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\ +\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\ +\x61\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\ +\x22\x6d\x20\x31\x30\x36\x2e\x30\x35\x34\x33\x35\x2c\x31\x35\x32\ +\x2e\x30\x36\x39\x34\x38\x20\x31\x36\x2e\x37\x32\x35\x39\x38\x2c\ +\x2d\x38\x2e\x34\x30\x38\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x32\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\ +\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\ +\x74\x79\x70\x65\x3d\x22\x61\x72\x63\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x66\ +\x66\x66\x66\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\ +\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\ +\x68\x3a\x31\x2e\x36\x31\x33\x37\x34\x34\x33\x38\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\ +\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x61\x74\x68\x33\x37\x35\x39\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x63\x78\x3d\ +\x22\x34\x38\x2e\x30\x39\x30\x39\x30\x38\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x63\x79\x3d\x22\ +\x32\x37\x2e\x36\x33\x36\x33\x36\x34\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x72\x78\x3d\x22\x37\ +\x2e\x35\x34\x35\x34\x35\x34\x35\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x72\x79\x3d\x22\x34\x2e\ +\x33\x36\x33\x36\x33\x36\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x64\x3d\x22\x6d\x20\x35\x35\x2e\x36\x33\x36\x33\x36\x33\x2c\x32\ +\x37\x2e\x36\x33\x36\x33\x36\x34\x20\x61\x20\x37\x2e\x35\x34\x35\ +\x34\x35\x34\x35\x2c\x34\x2e\x33\x36\x33\x36\x33\x36\x35\x20\x30\ +\x20\x31\x20\x31\x20\x2d\x31\x35\x2e\x30\x39\x30\x39\x30\x39\x2c\ +\x30\x20\x37\x2e\x35\x34\x35\x34\x35\x34\x35\x2c\x34\x2e\x33\x36\ +\x33\x36\x33\x36\x35\x20\x30\x20\x31\x20\x31\x20\x31\x35\x2e\x30\ +\x39\x30\x39\x30\x39\x2c\x30\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\ +\x72\x69\x78\x28\x31\x2e\x33\x39\x36\x30\x31\x37\x36\x2c\x30\x2e\ +\x34\x35\x30\x35\x34\x35\x33\x35\x2c\x2d\x30\x2e\x34\x32\x34\x34\ +\x37\x33\x32\x31\x2c\x31\x2e\x34\x38\x31\x37\x36\x34\x33\x2c\x2d\ +\x33\x39\x2e\x34\x39\x35\x37\x37\x33\x2c\x2d\x34\x37\x2e\x30\x33\ +\x31\x31\x31\x35\x29\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x67\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x23\x66\x66\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x34\x2e\x32\x34\x39\x32\x37\ +\x36\x36\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ +\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\ +\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\ +\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x35\x33\x34\x38\x34\x35\ +\x39\x33\x2c\x30\x2c\x30\x2c\x30\x2e\x35\x34\x35\x39\x37\x32\x36\ +\x31\x2c\x2d\x33\x35\x2e\x39\x39\x33\x39\x34\x32\x2c\x2d\x34\x34\ +\x2e\x33\x38\x35\x34\x30\x34\x29\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x67\x33\x37\x36\x31\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\ +\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\ +\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\x22\ +\x63\x63\x63\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x37\x36\x35\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x37\x35\x2e\x35\ +\x37\x39\x34\x31\x2c\x31\x34\x38\x2e\x36\x35\x38\x39\x20\x33\x30\ +\x2e\x37\x30\x38\x38\x34\x2c\x33\x2e\x33\x36\x35\x36\x32\x20\x30\ +\x2c\x33\x36\x2e\x34\x37\x37\x31\x39\x20\x2d\x33\x31\x2e\x31\x32\ +\x33\x38\x33\x2c\x2d\x35\x2e\x30\x36\x34\x37\x39\x20\x30\x2e\x34\ +\x31\x34\x39\x39\x2c\x2d\x33\x34\x2e\x37\x37\x38\x30\x32\x20\x7a\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x66\x66\x30\x30\x30\x30\x3b\x66\ +\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\ +\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\ +\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x34\x2e\x32\x34\ +\x39\x32\x37\x36\x36\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ +\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x62\x65\x76\x65\x6c\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\ +\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\ +\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\ +\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\ +\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\ +\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\ +\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\ +\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\ +\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ +\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\ +\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x61\x74\x68\x33\x37\x36\x37\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x31\x30\x36\x2e\x30\ +\x35\x34\x33\x35\x2c\x31\x35\x32\x2e\x30\x36\x39\x34\x38\x20\x31\ +\x36\x2e\x37\x32\x35\x39\x38\x2c\x2d\x38\x2e\x34\x30\x38\x38\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x66\x69\x6c\x6c\x3a\x23\x66\x66\x30\x30\x30\x30\x3b\x66\x69\ +\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\ +\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\ +\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x34\x2e\x32\x34\x39\ +\x32\x37\x36\x36\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\ +\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\x65\x72\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\ +\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\ +\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\ +\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\ +\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\ +\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\ +\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\ +\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\ +\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\ +\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x3c\x67\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\ +\x6c\x3a\x23\x30\x30\x38\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x77\x69\x64\x74\x68\x3a\x33\x2e\x34\x35\x31\x33\x38\x35\x39\ +\x37\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\ +\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\ +\x61\x74\x72\x69\x78\x28\x30\x2e\x35\x38\x33\x30\x36\x31\x34\x33\ +\x2c\x30\x2c\x30\x2c\x30\x2e\x35\x38\x33\x30\x36\x31\x34\x33\x2c\ +\x2d\x31\x33\x2e\x32\x30\x30\x32\x33\x35\x2c\x2d\x34\x37\x2e\x32\ +\x35\x36\x36\x32\x34\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x67\x33\x37\x36\x39\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\ +\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\ +\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\x63\ +\x63\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x70\x61\x74\x68\x33\x37\x37\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x39\x32\x2e\x31\x33\x30\ +\x36\x30\x32\x2c\x31\x35\x31\x2e\x34\x32\x38\x33\x36\x20\x2d\x31\ +\x37\x2e\x39\x34\x33\x34\x30\x38\x2c\x31\x36\x2e\x32\x32\x32\x33\ +\x38\x20\x33\x32\x2e\x35\x35\x33\x32\x33\x36\x2c\x31\x32\x2e\x37\ +\x30\x33\x34\x34\x20\x39\x2e\x36\x32\x37\x31\x31\x2c\x2d\x31\x38\ +\x2e\x32\x34\x35\x32\x36\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\ +\x66\x66\x66\x66\x30\x30\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\ +\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\ +\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ +\x64\x74\x68\x3a\x33\x2e\x34\x35\x31\x33\x38\x35\x39\x37\x30\x30\ +\x30\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\ +\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x62\x65\x76\x65\ +\x6c\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\ +\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\ +\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\ +\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\ +\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\ +\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\ +\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\ +\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\ +\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\x00\x00\x3c\x23\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ +\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\ +\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\ +\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\ +\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\ +\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\ +\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\ +\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\ +\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\ +\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\ +\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\ +\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\ +\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\ +\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\ +\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\ +\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\ +\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\ +\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\ +\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\ +\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\ +\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x0a\x20\x20\x20\x78\x6d\ +\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\ +\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\ +\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\ +\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\ +\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\x61\x6d\ +\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x34\x70\x78\ +\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\x70\ +\x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x33\x36\x31\ +\x32\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\ +\x2e\x31\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x34\x38\x2e\x33\x2e\ +\x31\x20\x72\x39\x38\x38\x36\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\ +\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x4f\x70\ +\x65\x6e\x53\x43\x41\x44\x5f\x52\x65\x70\x6c\x61\x63\x65\x4f\x62\ +\x6a\x65\x63\x74\x2e\x73\x76\x67\x22\x3e\x0a\x20\x20\x3c\x64\x65\ +\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\ +\x33\x36\x31\x34\x22\x3e\x0a\x20\x20\x20\x20\x3c\x6d\x61\x72\x6b\ +\x65\x72\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x73\x74\x6f\x63\x6b\x69\x64\x3d\x22\x41\x72\x72\x6f\ +\x77\x31\x4d\x65\x6e\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x72\x69\x65\x6e\x74\x3d\x22\x61\x75\x74\x6f\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x72\x65\x66\x59\x3d\x22\x30\x2e\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x72\x65\x66\x58\x3d\x22\x30\x2e\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x41\x72\x72\x6f\ +\x77\x31\x4d\x65\x6e\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\ +\x69\x73\x69\x62\x6c\x65\x3b\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x33\x35\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x30\x2e\x30\x2c\x30\ +\x2e\x30\x20\x4c\x20\x35\x2e\x30\x2c\x2d\x35\x2e\x30\x20\x4c\x20\ +\x2d\x31\x32\x2e\x35\x2c\x30\x2e\x30\x20\x4c\x20\x35\x2e\x30\x2c\ +\x35\x2e\x30\x20\x4c\x20\x30\x2e\x30\x2c\x30\x2e\x30\x20\x7a\x20\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\ +\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\ +\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\ +\x31\x2e\x30\x70\x74\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x73\x63\x61\x6c\ +\x65\x28\x30\x2e\x34\x29\x20\x72\x6f\x74\x61\x74\x65\x28\x31\x38\ +\x30\x29\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x31\x30\x2c\ +\x30\x29\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6d\x61\x72\ +\x6b\x65\x72\x3e\x0a\x20\x20\x20\x20\x3c\x6d\x61\x72\x6b\x65\x72\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x73\x74\x6f\x63\x6b\x69\x64\x3d\x22\x41\x72\x72\x6f\x77\x31\ +\x4d\x73\x74\x61\x72\x74\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x72\x69\x65\x6e\x74\x3d\x22\x61\x75\x74\x6f\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x72\x65\x66\x59\x3d\x22\x30\x2e\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x72\x65\x66\x58\x3d\x22\x30\x2e\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x41\x72\x72\x6f\ +\x77\x31\x4d\x73\x74\x61\x72\x74\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x6f\x76\x65\x72\x66\x6c\x6f\x77\ +\x3a\x76\x69\x73\x69\x62\x6c\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x33\x32\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x30\x2e\x30\x2c\ +\x30\x2e\x30\x20\x4c\x20\x35\x2e\x30\x2c\x2d\x35\x2e\x30\x20\x4c\ +\x20\x2d\x31\x32\x2e\x35\x2c\x30\x2e\x30\x20\x4c\x20\x35\x2e\x30\ +\x2c\x35\x2e\x30\x20\x4c\x20\x30\x2e\x30\x2c\x30\x2e\x30\x20\x7a\ +\x20\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\ +\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\ +\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ +\x3a\x31\x2e\x30\x70\x74\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x73\x63\x61\x6c\ +\x65\x28\x30\x2e\x34\x29\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\ +\x28\x31\x30\x2c\x30\x29\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x2f\x6d\x61\x72\x6b\x65\x72\x3e\x0a\x20\x20\x20\x20\x3c\x6d\x61\ +\x72\x6b\x65\x72\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x73\x74\x6f\x63\x6b\x69\x64\x3d\x22\x41\x72\ +\x72\x6f\x77\x31\x4c\x73\x74\x61\x72\x74\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x6f\x72\x69\x65\x6e\x74\x3d\x22\x61\x75\x74\x6f\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x65\x66\x59\x3d\x22\x30\x2e\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x65\x66\x58\x3d\x22\ +\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x41\x72\x72\x6f\x77\x31\x4c\x73\x74\x61\x72\x74\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x6f\x76\x65\x72\ +\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x32\x36\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\ +\x30\x2e\x30\x2c\x30\x2e\x30\x20\x4c\x20\x35\x2e\x30\x2c\x2d\x35\ +\x2e\x30\x20\x4c\x20\x2d\x31\x32\x2e\x35\x2c\x30\x2e\x30\x20\x4c\ +\x20\x35\x2e\x30\x2c\x35\x2e\x30\x20\x4c\x20\x30\x2e\x30\x2c\x30\ +\x2e\x30\x20\x7a\x20\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\ +\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\ +\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\ +\x69\x64\x74\x68\x3a\x31\x2e\x30\x70\x74\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\ +\x73\x63\x61\x6c\x65\x28\x30\x2e\x38\x29\x20\x74\x72\x61\x6e\x73\ +\x6c\x61\x74\x65\x28\x31\x32\x2e\x35\x2c\x30\x29\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x2f\x6d\x61\x72\x6b\x65\x72\x3e\x0a\x20\ +\x20\x20\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\ +\x73\x70\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x76\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\x33\x32\x20\x3a\x20\ +\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\ +\x30\x20\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x36\x34\x20\ +\x3a\x20\x33\x32\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\ +\x64\x2d\x6f\x72\x69\x67\x69\x6e\x3d\x22\x33\x32\x20\x3a\x20\x32\ +\x31\x2e\x33\x33\x33\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\ +\x74\x69\x76\x65\x33\x36\x32\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\ +\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x33\x35\x38\ +\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\x69\ +\x6e\x3d\x22\x30\x2e\x35\x20\x3a\x20\x30\x2e\x33\x33\x33\x33\x33\ +\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x31\ +\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x79\ +\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\x3a\x20\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x76\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\ +\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\ +\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\ +\x70\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x33\x36\ +\x39\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\ +\x69\x6e\x3d\x22\x30\x2e\x35\x20\x3a\x20\x30\x2e\x33\x33\x33\x33\ +\x33\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\ +\x31\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\ +\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\x3a\x20\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x76\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\x30\x2e\x35\x20\x3a\ +\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\ +\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x31\x34\x34\ +\x2d\x36\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\ +\x6f\x70\x33\x31\x34\x36\x2d\x39\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\ +\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\x73\x74\x6f\ +\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\ +\x70\x33\x31\x34\x38\x2d\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\ +\x6c\x6f\x72\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\x73\x74\x6f\x70\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x33\x37\x30\x31\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\x30\x33\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x66\x66\ +\x66\x66\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\ +\x65\x74\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\x30\x35\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\ +\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\ +\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\ +\x22\x31\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\ +\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\ +\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x33\x31\x34\x34\x2d\x36\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x33\x36\x38\x38\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\ +\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\ +\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\ +\x78\x28\x31\x2c\x30\x2c\x30\x2c\x30\x2e\x36\x39\x38\x35\x32\x39\ +\x34\x2c\x30\x2c\x32\x30\x32\x2e\x38\x32\x38\x36\x33\x29\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x32\x32\x35\x2e\x32\ +\x36\x34\x30\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\ +\x22\x36\x37\x32\x2e\x37\x39\x37\x33\x36\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x66\x78\x3d\x22\x32\x32\x35\x2e\x32\x36\x34\x30\x32\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x36\x37\x32\ +\x2e\x37\x39\x37\x33\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\ +\x3d\x22\x33\x34\x2e\x33\x34\x35\x31\x38\x38\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x37\x30\ +\x38\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\ +\x70\x33\x37\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\ +\x72\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\x73\x74\x6f\x70\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\ +\x31\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\ +\x66\x66\x66\x66\x66\x66\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\ +\x74\x69\x76\x65\x33\x38\x30\x35\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\ +\x64\x2d\x6f\x72\x69\x67\x69\x6e\x3d\x22\x30\x2e\x35\x20\x3a\x20\ +\x30\x2e\x33\x33\x33\x33\x33\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x76\x70\x5f\x7a\x3d\x22\x31\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\ +\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\ +\x30\x20\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\x22\x30\x20\x3a\ +\x20\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x33\x38\x36\x34\x2d\x30\x2d\x30\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x38\x36\x36\x2d\x35\ +\x2d\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\ +\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\ +\x6f\x72\x3a\x23\x30\x36\x31\x39\x63\x30\x3b\x73\x74\x6f\x70\x2d\ +\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x38\x36\x38\ +\x2d\x37\x2d\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\ +\x6f\x6c\x6f\x72\x3a\x23\x33\x37\x39\x63\x66\x62\x3b\x73\x74\x6f\ +\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x33\x37\x39\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\ +\x61\x61\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\ +\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x73\x74\x6f\x70\x33\x33\x38\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x61\x66\x66\ +\x32\x62\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\ +\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x38\x36\x34\x2d\x30\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\ +\x33\x38\x36\x36\x2d\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\ +\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x36\x31\x39\x63\x30\x3b\x73\ +\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\ +\x33\x38\x36\x38\x2d\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\ +\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x33\x37\x39\x63\x66\x62\x3b\x73\ +\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x65\x63\x74\x69\ +\x76\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x65\ +\x72\x73\x70\x65\x63\x74\x69\x76\x65\x33\x39\x30\x32\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\ +\x65\x72\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\x69\x6e\x3d\x22\x30\ +\x2e\x35\x20\x3a\x20\x30\x2e\x33\x33\x33\x33\x33\x33\x33\x33\x20\ +\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x31\x20\x3a\x20\x30\ +\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\ +\x3a\x20\x31\x30\x30\x30\x20\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\ +\x3d\x22\x30\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x74\ +\x79\x70\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\ +\x72\x73\x70\x33\x64\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x35\x30\x34\x38\x22\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\ +\x6f\x6c\x6f\x72\x3a\x62\x6c\x61\x63\x6b\x3b\x73\x74\x6f\x70\x2d\ +\x6f\x70\x61\x63\x69\x74\x79\x3a\x30\x3b\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\ +\x70\x35\x30\x35\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x73\x74\x6f\x70\x35\x30\x35\x36\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x2e\ +\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x62\x6c\ +\x61\x63\x6b\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\ +\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x62\ +\x6c\x61\x63\x6b\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x30\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x35\x30\x35\x32\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x33\x38\x34\x31\x2d\x30\x2d\x33\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\ +\x38\x34\x33\x2d\x31\x2d\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\ +\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x36\x31\x39\x63\x30\x3b\ +\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\ +\x70\x33\x38\x34\x35\x2d\x30\x2d\x38\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\ +\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x33\x37\x39\x63\x66\ +\x62\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ +\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\ +\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\ +\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\ +\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\ +\x22\x31\x31\x34\x2e\x35\x36\x38\x34\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x66\x78\x3d\x22\x32\x30\x2e\x38\x39\x32\x30\x39\x39\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x35\x2e\x32\x35\x36\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x31\x31\x34\ +\x2e\x35\x36\x38\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\ +\x3d\x22\x32\x30\x2e\x38\x39\x32\x30\x39\x39\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x61\x69\x67\x72\x64\x32\x22\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x31\x35\ +\x35\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\ +\x23\x46\x30\x46\x30\x46\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x31\x35\x35\ +\x36\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\ +\x39\x61\x39\x61\x39\x61\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\ +\x22\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x3c\x2f\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\ +\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x36\x34\x2e\x35\x36\x37\ +\x39\x30\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\ +\x32\x30\x2e\x38\x39\x32\x30\x39\x39\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x72\x3d\x22\x35\x2e\x32\x35\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x79\x3d\x22\x36\x34\x2e\x35\x36\x37\x39\x30\x32\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x32\x30\x2e\ +\x38\x39\x32\x30\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x61\x69\x67\x72\x64\x33\x22\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x31\x35\x35\x37\x33\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x46\x30\x46\x30\ +\x46\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\ +\x73\x65\x74\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x73\x74\x6f\x70\x31\x35\x35\x37\x35\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\ +\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x39\x61\x39\x61\x39\ +\x61\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ +\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\x30\ +\x30\x30\x30\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\ +\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\ +\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x31\x35\x36\ +\x36\x32\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x66\ +\x66\x66\x66\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x2e\ +\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x31\x35\x36\x36\x34\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x38\x66\x38\ +\x66\x38\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\ +\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x31\x35\x36\x36\x36\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\ +\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x72\x3d\x22\x38\x36\x2e\x37\x30\x38\x34\x35\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x33\x35\x2e\x37\ +\x33\x36\x39\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\ +\x3d\x22\x33\x33\x2e\x39\x36\x36\x36\x37\x39\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x63\x79\x3d\x22\x33\x35\x2e\x37\x33\x36\x39\x31\ +\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x33\x33\ +\x2e\x39\x36\x36\x36\x37\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\ +\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x36\x30\x34\ +\x39\x32\x39\x37\x2c\x30\x2c\x30\x2c\x31\x2e\x30\x34\x31\x31\x33\ +\x32\x2c\x2d\x35\x32\x2e\x31\x34\x34\x32\x34\x39\x2c\x2d\x37\x30\ +\x32\x2e\x33\x33\x31\x35\x38\x29\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\ +\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x34\x34\x35\x32\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\ +\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x32\x35\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\ +\x6c\x77\x61\x79\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x32\x35\x39\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\ +\x6c\x6f\x72\x3a\x23\x66\x61\x66\x61\x66\x61\x3b\x73\x74\x6f\x70\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\ +\x30\x30\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\ +\x66\x73\x65\x74\x3d\x22\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\ +\x6f\x70\x32\x36\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ +\x3a\x23\x62\x62\x62\x62\x62\x62\x3b\x73\x74\x6f\x70\x2d\x6f\x70\ +\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\ +\x74\x3d\x22\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x32\ +\x36\x31\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\ +\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x33\x37\x2e\x37\x35\ +\x31\x37\x31\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\ +\x22\x33\x2e\x37\x35\x36\x31\x32\x38\x35\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x66\x78\x3d\x22\x38\x2e\x38\x32\x34\x34\x31\x39\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x33\x2e\x37\x35\ +\x36\x31\x32\x38\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\ +\x3d\x22\x38\x2e\x38\x32\x34\x34\x31\x39\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\ +\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\ +\x36\x38\x32\x37\x32\x39\x37\x2c\x30\x2c\x30\x2c\x31\x2e\x30\x33\ +\x32\x37\x36\x37\x2c\x2d\x34\x38\x2e\x37\x39\x30\x36\x39\x39\x2c\ +\x2d\x37\x30\x31\x2e\x36\x38\x35\x31\x33\x29\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\ +\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\ +\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x34\x34\x35\x34\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\ +\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x32\x36\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\ +\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x32\x36\x39\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\ +\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x61\x33\x61\x33\x61\x33\x3b\x73\ +\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\ +\x30\x30\x30\x30\x30\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x2e\x30\x30\x30\x30\x30\ +\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x73\x74\x6f\x70\x32\x37\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\ +\x6c\x6f\x72\x3a\x23\x34\x63\x34\x63\x34\x63\x3b\x73\x74\x6f\x70\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\ +\x30\x30\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\ +\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\ +\x6f\x70\x32\x37\x31\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\ +\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\ +\x20\x20\x20\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\ +\x72\x73\x70\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\ +\x34\x39\x34\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\x6f\x72\ +\x69\x67\x69\x6e\x3d\x22\x30\x2e\x35\x20\x3a\x20\x30\x2e\x33\x33\ +\x33\x33\x33\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x7a\ +\x3d\x22\x31\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\ +\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\x3a\x20\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x76\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\x30\x2e\x35\ +\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\ +\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x34\x30\ +\x39\x35\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x35\ +\x62\x66\x66\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\ +\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x34\x30\x39\x37\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\ +\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x63\x31\x65\x33\x66\ +\x37\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ +\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\ +\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x73\x74\x6f\x70\x34\x30\x39\x39\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\x73\ +\x70\x65\x63\x74\x69\x76\x65\x35\x30\x32\x37\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\ +\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\x69\x6e\x3d\x22\x30\x2e\x35\ +\x20\x3a\x20\x30\x2e\x33\x33\x33\x33\x33\x33\x33\x33\x20\x3a\x20\ +\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x31\x20\x3a\x20\x30\x2e\x35\ +\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\ +\x31\x30\x30\x30\x20\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\x22\ +\x30\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\ +\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\ +\x70\x33\x64\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\ +\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\ +\x73\x70\x65\x63\x74\x69\x76\x65\x35\x30\x37\x36\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\ +\x72\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\x69\x6e\x3d\x22\x30\x2e\ +\x35\x20\x3a\x20\x30\x2e\x33\x33\x33\x33\x33\x33\x33\x33\x20\x3a\ +\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x31\x20\x3a\x20\x30\x2e\ +\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\ +\x20\x31\x30\x30\x30\x20\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\ +\x22\x30\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\ +\x70\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\ +\x73\x70\x33\x64\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\ +\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\ +\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x34\x32\x34\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x34\ +\x32\x35\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\ +\x33\x39\x34\x2e\x31\x35\x37\x38\x34\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x79\x31\x3d\x22\x31\x38\x35\x2e\x31\x33\x30\x34\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x34\x33\x34\x2e\x37\ +\x33\x39\x34\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\ +\x22\x31\x34\x30\x2e\x32\x32\x37\x33\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\ +\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\ +\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\ +\x69\x78\x28\x30\x2e\x39\x34\x32\x33\x31\x38\x32\x36\x2c\x30\x2c\ +\x30\x2c\x30\x2e\x39\x34\x32\x33\x31\x38\x32\x36\x2c\x32\x33\x2e\ +\x37\x32\x37\x35\x34\x39\x2c\x38\x2e\x38\x32\x36\x32\x35\x33\x36\ +\x29\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x34\x32\x34\x37\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ +\x3a\x23\x32\x65\x38\x32\x30\x37\x3b\x73\x74\x6f\x70\x2d\x6f\x70\ +\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x34\ +\x32\x34\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\ +\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\ +\x35\x32\x66\x66\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x34\x32\x35\ +\x31\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\ +\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x31\x34\x30\x2e\x32\ +\x32\x37\x33\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\ +\x22\x34\x33\x34\x2e\x37\x33\x39\x34\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x79\x31\x3d\x22\x31\x38\x35\x2e\x31\x33\x30\x34\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x33\x39\x34\x2e\ +\x31\x35\x37\x38\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\ +\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\ +\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x34\x32\x33\x31\x38\ +\x32\x36\x2c\x30\x2c\x30\x2c\x30\x2e\x39\x34\x32\x33\x31\x38\x32\ +\x36\x2c\x32\x33\x2e\x37\x32\x37\x35\x34\x39\x2c\x38\x2e\x38\x32\ +\x36\x32\x35\x33\x36\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\ +\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\ +\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x35\x30\x38\x37\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\ +\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x34\ +\x32\x34\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\ +\x77\x61\x79\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x65\x63\x74\x69\ +\x76\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x65\ +\x72\x73\x70\x65\x63\x74\x69\x76\x65\x35\x31\x34\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\ +\x65\x72\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\x69\x6e\x3d\x22\x30\ +\x2e\x35\x20\x3a\x20\x30\x2e\x33\x33\x33\x33\x33\x33\x33\x33\x20\ +\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x31\x20\x3a\x20\x30\ +\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\ +\x3a\x20\x31\x30\x30\x30\x20\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\ +\x3d\x22\x30\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x74\ +\x79\x70\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\ +\x72\x73\x70\x33\x64\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x64\x65\ +\x66\x73\x3e\x0a\x20\x20\x3c\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\ +\x6e\x61\x6d\x65\x64\x76\x69\x65\x77\x0a\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x62\x61\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x70\x61\ +\x67\x65\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\x66\x66\ +\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x63\x6f\x6c\ +\x6f\x72\x3d\x22\x23\x36\x36\x36\x36\x36\x36\x22\x0a\x20\x20\x20\ +\x20\x20\x62\x6f\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\ +\x22\x31\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x70\x61\x67\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\ +\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x70\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\ +\x32\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x7a\x6f\x6f\x6d\x3d\x22\x35\x2e\x35\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x33\ +\x2e\x34\x37\x33\x38\x30\x37\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x33\x32\x22\x0a\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x75\x72\ +\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\x3d\x22\x6c\x61\x79\x65\ +\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x73\x68\x6f\x77\x67\x72\x69\ +\x64\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2d\ +\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\x22\x0a\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x69\x64\x2d\x62\x62\ +\x6f\x78\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x77\ +\x69\x64\x74\x68\x3d\x22\x31\x32\x38\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\ +\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x39\x36\x32\x22\x0a\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\ +\x6f\x77\x2d\x78\x3d\x22\x2d\x38\x22\x0a\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x79\ +\x3d\x22\x2d\x38\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x6d\x61\x78\x69\x6d\ +\x69\x7a\x65\x64\x3d\x22\x31\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x6d\ +\x65\x74\x61\x64\x61\x74\x61\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x33\x36\x31\x37\x22\x3e\x0a\ +\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\x74\x3d\ +\x22\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\ +\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\ +\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x79\x70\ +\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\ +\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\x22\x68\x74\x74\x70\x3a\ +\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x64\x63\ +\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\x69\x6c\x6c\x49\x6d\x61\x67\ +\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\ +\x63\x3a\x74\x69\x74\x6c\x65\x3e\x3c\x2f\x64\x63\x3a\x74\x69\x74\ +\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\x63\x63\x3a\x57\ +\x6f\x72\x6b\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\x52\ +\x44\x46\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\ +\x3e\x0a\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\x6c\x3d\x22\x4c\x61\x79\ +\x65\x72\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\x6f\x64\x65\x3d\x22\x6c\ +\x61\x79\x65\x72\x22\x3e\x0a\x20\x20\x20\x20\x3c\x67\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\ +\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x2d\x32\x35\x39\x2e\x38\ +\x35\x32\x30\x37\x2c\x2d\x31\x33\x32\x2e\x37\x38\x33\x34\x39\x29\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x34\x36\ +\x37\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x72\x65\x63\x74\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x79\x3d\x22\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x78\x3d\x22\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x79\x3d\x22\x31\x37\x39\ +\x2e\x35\x37\x31\x34\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x78\x3d\x22\x32\x38\x30\x2e\x37\x31\x34\x32\x39\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\ +\x39\x2e\x32\x37\x39\x32\x32\x31\x35\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x32\x34\x2e\x36\x38\ +\x38\x33\x31\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x72\x65\x63\x74\x34\x32\x35\x38\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\ +\x6f\x72\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x66\x69\x6c\x6c\x3a\ +\x23\x66\x66\x66\x66\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\ +\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\ +\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\ +\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\ +\x69\x64\x74\x68\x3a\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ +\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\ +\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\ +\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\ +\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\ +\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\ +\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\ +\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\ +\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\ +\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x3c\x72\x65\x63\x74\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x72\x79\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x72\x78\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x79\x3d\x22\x31\x35\x31\x2e\x35\x37\x31\x34\ +\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x78\x3d\x22\x32\ +\x38\x30\x2e\x37\x31\x34\x32\x39\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x39\x2e\x36\x34\x32\ +\x38\x35\x37\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\ +\x69\x64\x74\x68\x3d\x22\x32\x34\x2e\x36\x38\x38\x33\x31\x31\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x65\ +\x63\x74\x34\x32\x35\x38\x2d\x31\x2d\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\ +\x72\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x66\x69\x6c\x6c\x3a\x23\ +\x30\x30\x34\x32\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\ +\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\ +\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ +\x64\x74\x68\x3a\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\ +\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\ +\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\ +\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\ +\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\ +\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\ +\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\ +\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\ +\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\ +\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\ +\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x3c\x72\x65\x63\x74\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x72\x79\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x72\x78\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x79\x3d\x22\x31\x36\x35\x2e\x33\x38\x39\x36\x32\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x78\x3d\x22\x32\x38\ +\x35\x2e\x38\x30\x35\x32\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x39\x2e\x36\x34\x32\x38\ +\x35\x37\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\ +\x64\x74\x68\x3d\x22\x32\x34\x2e\x33\x32\x34\x36\x37\x35\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x65\x63\ +\x74\x34\x32\x35\x38\x2d\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\ +\x30\x30\x30\x30\x30\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x39\x66\x62\ +\x37\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\ +\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\ +\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ +\x3a\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\ +\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ +\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\ +\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\ +\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\ +\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\ +\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\ +\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\ +\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\ +\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\ +\x75\x6d\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x3c\x72\x65\x63\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x72\x79\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x72\x78\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x79\x3d\x22\x31\x33\x37\x2e\x35\x37\x31\x34\x34\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x78\x3d\x22\x32\x36\x36\x2e\x37\ +\x31\x34\x32\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x68\ +\x65\x69\x67\x68\x74\x3d\x22\x39\x2e\x36\x34\x32\x38\x35\x37\x36\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\ +\x3d\x22\x33\x32\x2e\x31\x34\x32\x38\x35\x37\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x65\x63\x74\x34\x32\ +\x35\x38\x2d\x31\x2d\x37\x2d\x34\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\ +\x23\x30\x30\x30\x30\x30\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x66\x66\ +\x66\x66\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\ +\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\ +\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\ +\x68\x3a\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\ +\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\ +\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\ +\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\ +\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\ +\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\ +\x69\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\ +\x6c\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\ +\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\ +\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\ +\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\ +\x79\x70\x65\x73\x3d\x22\x63\x63\x63\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x35\x30\x39\x38\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\ +\x32\x37\x31\x2e\x30\x37\x31\x34\x33\x2c\x32\x30\x37\x2e\x34\x32\ +\x38\x35\x37\x20\x30\x2c\x33\x37\x2e\x31\x34\x32\x38\x36\x20\x39\ +\x2e\x32\x38\x35\x37\x31\x2c\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\ +\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\ +\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\ +\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\ +\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\ +\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\ +\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\ +\x73\x6c\x61\x74\x65\x28\x30\x2c\x2d\x36\x30\x29\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\ +\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x30\x2c\x2d\x36\x30\ +\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x70\x61\x74\x68\x35\x31\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x64\x3d\x22\x6d\x20\x32\x38\x30\x2e\x38\x39\x32\x38\ +\x36\x2c\x32\x31\x36\x2e\x37\x31\x34\x32\x39\x20\x2d\x39\x2e\x36\ +\x34\x32\x38\x36\x2c\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\ +\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\ +\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\ +\x6f\x69\x6e\x3a\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\ +\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\ +\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\ +\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\ +\x3a\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\ +\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\ +\x20\x32\x37\x35\x2e\x36\x31\x36\x38\x38\x2c\x31\x35\x36\x2e\x31\ +\x35\x35\x38\x34\x20\x30\x2c\x31\x34\x2e\x32\x33\x33\x37\x37\x20\ +\x39\x2e\x32\x38\x35\x37\x31\x2c\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x30\x35\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\ +\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\ +\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\ +\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x3c\x70\ +\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\ +\x6b\x65\x3a\x23\x64\x33\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x2e\x33\x39\x39\x39\x39\x39\ +\x39\x39\x39\x39\x39\x39\x39\x39\x39\x39\x30\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\ +\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\ +\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\ +\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x35\x33\ +\x2e\x30\x39\x30\x39\x30\x39\x2c\x34\x35\x2e\x30\x39\x30\x39\x30\ +\x39\x20\x32\x34\x2e\x34\x35\x34\x35\x34\x35\x2c\x31\x36\x2e\x34\ +\x35\x34\x35\x34\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x70\x61\x74\x68\x33\x30\x36\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\ +\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\ +\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\ +\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x30\x36\x35\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x35\x33\x2e\x30\x39\x30\ +\x39\x30\x39\x2c\x31\x36\x2e\x34\x35\x34\x35\x34\x35\x20\x32\x34\ +\x2e\x34\x35\x34\x35\x34\x35\x2c\x34\x35\x2e\x30\x39\x30\x39\x30\ +\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\ +\x65\x3a\x23\x64\x33\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x77\x69\x64\x74\x68\x3a\x32\x2e\x33\x39\x39\x39\x39\x39\x39\ +\x39\x39\x39\x39\x39\x39\x39\x39\x39\x30\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\ +\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\ +\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\ +\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\ +\x3e\x0a\ +\x00\x00\xb3\x50\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ +\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\ +\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\ +\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\ +\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\ +\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\ +\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\ +\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\ +\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\ +\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\ +\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\ +\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\ +\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\ +\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\ +\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\ +\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\ +\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\ +\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\ +\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\ +\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\ +\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x0a\x20\x20\x20\x78\x6d\ +\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\ +\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\ +\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\ +\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\ +\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\x61\x6d\ +\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x34\x70\x78\ +\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\x70\ +\x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x35\x38\x32\ +\x31\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x76\ +\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x33\x32\x22\x0a\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\ +\x6e\x3d\x22\x30\x2e\x34\x38\x2e\x33\x2e\x31\x20\x72\x39\x38\x38\ +\x36\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x64\ +\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x70\x72\x65\x66\x65\x72\x65\x6e\ +\x63\x65\x73\x2d\x64\x72\x61\x66\x74\x2e\x73\x76\x67\x22\x0a\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6f\x75\x74\x70\x75\ +\x74\x5f\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x3d\x22\x6f\x72\x67\ +\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x75\x74\x70\x75\x74\ +\x2e\x73\x76\x67\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x22\x0a\x20\ +\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x3e\ +\x0a\x20\x20\x3c\x64\x65\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x64\x65\x66\x73\x35\x38\x32\x33\x22\x3e\x0a\x20\x20\x20\ +\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x36\x33\x34\x39\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\ +\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\x30\x30\ +\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\ +\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x73\x74\x6f\x70\x36\x33\x35\x31\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\ +\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\ +\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x30\x3b\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\ +\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x73\x74\x6f\x70\x36\x33\x35\x33\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x33\x33\x37\x37\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\ +\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\ +\x66\x66\x66\x66\x36\x36\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x33\x37\ +\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\ +\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x61\ +\x63\x66\x32\x62\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x33\x38\x31\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x65\x63\x74\ +\x69\x76\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\ +\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\ +\x3d\x22\x30\x20\x3a\x20\x33\x32\x20\x3a\x20\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\ +\x5f\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\x3a\x20\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x36\x34\x20\x3a\x20\x33\x32\x20\ +\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\x6f\x72\x69\ +\x67\x69\x6e\x3d\x22\x33\x32\x20\x3a\x20\x32\x31\x2e\x33\x33\x33\ +\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x35\ +\x38\x32\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\ +\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\ +\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\ +\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x36\ +\x33\x34\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x36\x33\ +\x35\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\ +\x31\x30\x33\x2e\x36\x33\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x63\x79\x3d\x22\x31\x34\x32\x34\x2e\x34\x34\x36\x35\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x31\x30\x33\x2e\ +\x36\x33\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\ +\x22\x31\x34\x32\x34\x2e\x34\x34\x36\x35\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x72\x3d\x22\x31\x39\x34\x2e\x34\x30\x36\x31\x34\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\ +\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\ +\x78\x28\x30\x2e\x39\x39\x38\x33\x37\x38\x32\x35\x2c\x30\x2e\x30\ +\x30\x36\x34\x35\x33\x32\x32\x2c\x2d\x30\x2e\x30\x30\x31\x32\x33\ +\x34\x36\x33\x2c\x30\x2e\x31\x39\x31\x30\x30\x39\x31\x39\x2c\x33\ +\x2e\x35\x34\x38\x34\x37\x38\x36\x2c\x31\x31\x34\x35\x2e\x32\x34\ +\x32\x32\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\ +\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\ +\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x38\x36\x34\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\ +\x38\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\ +\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\ +\x6c\x6f\x72\x3a\x23\x37\x31\x62\x32\x66\x38\x3b\x73\x74\x6f\x70\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x38\x36\ +\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\ +\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\ +\x72\x3a\x23\x30\x30\x32\x37\x39\x35\x3b\x73\x74\x6f\x70\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\ +\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x38\x36\x34\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\ +\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x36\x36\x31\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\ +\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\ +\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\ +\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\ +\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x36\x31\x38\x36\x35\x39\x38\ +\x2c\x30\x2e\x39\x36\x36\x36\x35\x34\x32\x2c\x2d\x31\x2e\x30\x33\ +\x33\x32\x34\x36\x32\x2c\x30\x2e\x36\x36\x31\x32\x37\x38\x36\x2c\ +\x2d\x33\x32\x37\x2e\x32\x37\x35\x36\x38\x2c\x2d\x32\x35\x35\x2e\ +\x38\x34\x31\x33\x36\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\ +\x78\x3d\x22\x32\x38\x32\x2e\x36\x34\x35\x38\x34\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x32\x39\x2e\x31\x34\x39\x30\ +\x34\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x32\ +\x38\x32\x2e\x36\x34\x35\x38\x34\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x66\x79\x3d\x22\x32\x39\x2e\x31\x34\x39\x30\x34\x36\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x31\x39\x2e\x35\x37\x31\ +\x34\x32\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x33\x36\x38\x32\x22\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\ +\x6f\x72\x3a\x23\x66\x66\x36\x64\x30\x66\x3b\x73\x74\x6f\x70\x2d\ +\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\ +\x70\x33\x36\x38\x34\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ +\x3a\x23\x66\x66\x31\x30\x30\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\ +\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\ +\x36\x38\x36\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\ +\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\ +\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\ +\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x33\x36\x38\x32\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x33\x38\x31\x37\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\ +\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\ +\x28\x31\x2e\x31\x31\x34\x39\x32\x31\x39\x2c\x30\x2e\x32\x37\x32\ +\x32\x33\x30\x36\x2c\x2d\x30\x2e\x37\x35\x30\x37\x31\x37\x31\x2c\ +\x33\x2e\x30\x37\x34\x35\x36\x33\x39\x2c\x2d\x34\x37\x31\x2e\x30\ +\x38\x36\x32\x39\x2c\x2d\x31\x34\x38\x2e\x33\x32\x38\x36\x33\x29\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x32\x37\x30\ +\x2e\x35\x38\x33\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\ +\x79\x3d\x22\x33\x33\x2e\x38\x39\x39\x39\x38\x36\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x32\x37\x30\x2e\x35\x38\x33\ +\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x33\ +\x33\x2e\x38\x39\x39\x39\x38\x36\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x72\x3d\x22\x31\x39\x2e\x35\x37\x31\x34\x32\x38\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\x65\ +\x3d\x22\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\ +\x33\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\x33\x32\ +\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\ +\x31\x30\x30\x30\x20\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\ +\x36\x34\x20\x3a\x20\x33\x32\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\ +\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\x69\x6e\x3d\x22\x33\x32\x20\ +\x3a\x20\x32\x31\x2e\x33\x33\x33\x33\x33\x33\x20\x3a\x20\x31\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\x73\ +\x70\x65\x63\x74\x69\x76\x65\x33\x31\x34\x38\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\ +\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\ +\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x64\x65\x66\x69\x74\x65\x6d\ +\x31\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\ +\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x34\x31\ +\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\ +\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\ +\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x63\x78\x3d\x22\x36\x33\x32\x2e\x37\x38\x31\x30\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x34\x38\x34\x2e\x34\x30\ +\x39\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\ +\x36\x33\x32\x2e\x37\x38\x31\x30\x31\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x66\x79\x3d\x22\x34\x38\x34\x2e\x34\x30\x39\x30\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x35\x34\x30\x2e\x32\ +\x37\x38\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\ +\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\ +\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\ +\x66\x69\x74\x65\x6d\x31\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x66\x79\x3d\x22\x34\x38\x34\x2e\x34\x30\x39\x30\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x36\x33\x32\x2e\x37\x38\ +\x31\x30\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x35\ +\x34\x30\x2e\x32\x37\x38\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x63\x79\x3d\x22\x34\x38\x34\x2e\x34\x30\x39\x30\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x36\x33\x32\x2e\x37\ +\x38\x31\x30\x31\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x73\x74\x6f\x70\x34\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x2e\x30\x30\x30\x30\x30\ +\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\ +\x66\x66\x66\x66\x66\x66\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\ +\x34\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\ +\x73\x65\x74\x3d\x22\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x65\x64\x65\x64\ +\x65\x64\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x3c\x2f\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\ +\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x64\x65\ +\x66\x69\x74\x65\x6d\x31\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x33\x34\x31\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\ +\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\ +\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x33\x34\x32\x2e\x36\x34\x39\ +\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x37\ +\x33\x32\x2e\x31\x32\x39\x30\x33\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x78\x32\x3d\x22\x33\x37\x39\x2e\x32\x34\x31\x30\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x36\x38\x36\x2e\x38\ +\x33\x30\x30\x32\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\ +\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\ +\x66\x69\x74\x65\x6d\x31\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x79\x32\x3d\x22\x36\x38\x36\x2e\x38\x33\x30\x30\x32\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x33\x37\x39\x2e\x32\x34\ +\x31\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\ +\x37\x33\x32\x2e\x31\x32\x39\x30\x33\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x31\x3d\x22\x33\x34\x32\x2e\x36\x34\x39\x39\x39\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x34\ +\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\ +\x65\x74\x3d\x22\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\ +\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x66\x66\x66\ +\x66\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ +\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x34\x35\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\ +\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\ +\x63\x6f\x6c\x6f\x72\x3a\x23\x39\x38\x39\x38\x39\x38\x3b\x73\x74\ +\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\ +\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\ +\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\ +\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\ +\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\ +\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x64\x65\x66\x69\x74\x65\x6d\ +\x31\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\ +\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x34\x31\ +\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\ +\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\ +\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x63\x78\x3d\x22\x31\x30\x33\x37\x2e\x32\x32\x30\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x32\x31\x31\x2e\x30\x38\ +\x38\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\ +\x31\x30\x33\x37\x2e\x32\x32\x30\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x66\x79\x3d\x22\x32\x31\x31\x2e\x30\x38\x38\x30\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x31\x31\x36\x34\x2e\ +\x32\x38\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\ +\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\ +\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\ +\x66\x69\x74\x65\x6d\x31\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x66\x79\x3d\x22\x32\x31\x31\x2e\x30\x38\x38\x30\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x33\x37\x2e\x32\ +\x32\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x31\ +\x31\x36\x34\x2e\x32\x38\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x63\x79\x3d\x22\x32\x31\x31\x2e\x30\x38\x38\x30\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x33\x37\x2e\ +\x32\x32\x30\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x73\x74\x6f\x70\x34\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x2e\x30\x30\x30\x30\x30\ +\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\ +\x66\x66\x66\x66\x66\x66\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\ +\x34\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\ +\x73\x65\x74\x3d\x22\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x61\x61\x61\x61\ +\x61\x61\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x3c\x2f\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\ +\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x64\x65\ +\x66\x69\x74\x65\x6d\x31\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x33\x34\x31\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\ +\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\ +\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x32\x37\x32\x2e\x35\x39\x32\ +\x30\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x34\ +\x35\x32\x2e\x33\x38\x38\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x78\x32\x3d\x22\x31\x39\x33\x2e\x32\x37\x36\x39\x39\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x35\x31\x36\x2e\x33\ +\x37\x30\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\ +\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\ +\x66\x69\x74\x65\x6d\x31\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x79\x32\x3d\x22\x35\x31\x36\x2e\x33\x37\x30\x30\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x31\x39\x33\x2e\x32\x37\ +\x36\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\ +\x34\x35\x32\x2e\x33\x38\x38\x30\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x31\x3d\x22\x32\x37\x32\x2e\x35\x39\x32\x30\x31\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x35\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\ +\x65\x74\x3d\x22\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\ +\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x36\x65\x36\x65\x36\ +\x65\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ +\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x35\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\ +\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\ +\x63\x6f\x6c\x6f\x72\x3a\x23\x64\x38\x64\x38\x64\x38\x3b\x73\x74\ +\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\ +\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\ +\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\ +\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\ +\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\ +\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x64\x65\x66\x69\x74\x65\x6d\ +\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x34\x32\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\ +\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\ +\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x78\x31\x3d\x22\x31\x30\x31\x34\x2e\x34\x33\x30\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x34\x39\x34\x2e\x37\x31\ +\x33\x30\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\ +\x31\x30\x37\x33\x2e\x30\x31\x30\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x79\x32\x3d\x22\x34\x39\x34\x2e\x37\x31\x33\x30\x31\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x67\ +\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\ +\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x69\x74\x65\x6d\ +\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x34\ +\x39\x34\x2e\x37\x31\x33\x30\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x78\x32\x3d\x22\x31\x30\x37\x33\x2e\x30\x31\x30\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x34\x39\x34\x2e\x37\ +\x31\x33\x30\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\ +\x22\x31\x30\x31\x34\x2e\x34\x33\x30\x30\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x35\x33\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\ +\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\ +\x6f\x6c\x6f\x72\x3a\x23\x36\x36\x36\x36\x36\x36\x3b\x73\x74\x6f\ +\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\ +\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\ +\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x73\x74\x6f\x70\x35\x34\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\x30\x30\ +\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ +\x3a\x23\x64\x63\x64\x63\x64\x63\x3b\x73\x74\x6f\x70\x2d\x6f\x70\ +\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\ +\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\ +\x66\x3d\x22\x23\x64\x65\x66\x69\x74\x65\x6d\x31\x37\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x34\x32\x32\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\ +\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\ +\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x37\ +\x33\x32\x2e\x31\x35\x36\x30\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x79\x31\x3d\x22\x33\x35\x31\x2e\x39\x33\x39\x30\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x39\x30\x39\x2e\x35\ +\x39\x33\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\ +\x22\x33\x35\x31\x2e\x39\x33\x39\x30\x30\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\ +\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\ +\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x64\x65\x66\x69\x74\x65\x6d\x31\x37\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x33\x35\x31\x2e\x39\x33\ +\x39\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\ +\x39\x30\x39\x2e\x35\x39\x33\x39\x39\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x79\x31\x3d\x22\x33\x35\x31\x2e\x39\x33\x39\x30\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x37\x33\x32\x2e\ +\x31\x35\x36\x30\x31\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\ +\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x73\x74\x6f\x70\x35\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x2e\x30\x30\x30\x30\ +\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\ +\x23\x36\x37\x36\x37\x36\x37\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\ +\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\ +\x70\x35\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\ +\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x64\x33\x64\ +\x33\x64\x33\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\ +\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x64\ +\x65\x66\x69\x74\x65\x6d\x31\x38\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x33\x34\x32\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\ +\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x33\x37\x30\x2e\x30\x32\ +\x32\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\ +\x33\x38\x37\x2e\x32\x37\x33\x30\x31\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x32\x3d\x22\x35\x38\x31\x2e\x33\x32\x33\x39\x37\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x32\x39\x31\x2e\ +\x39\x37\x36\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\ +\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\ +\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\ +\x65\x66\x69\x74\x65\x6d\x31\x38\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x79\x32\x3d\x22\x32\x39\x31\x2e\x39\x37\x36\x39\x39\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x35\x38\x31\x2e\x33\ +\x32\x33\x39\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\ +\x22\x33\x38\x37\x2e\x32\x37\x33\x30\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x78\x31\x3d\x22\x33\x37\x30\x2e\x30\x32\x32\x30\x30\ +\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\ +\x35\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\ +\x73\x65\x74\x3d\x22\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x36\x33\x36\x33\ +\x36\x33\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x36\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\ +\x22\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\ +\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x64\x36\x64\x36\x64\x36\x3b\x73\ +\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\ +\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\ +\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\ +\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\ +\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x64\x65\x66\x69\x74\x65\ +\x6d\x31\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x34\ +\x32\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\ +\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\ +\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x78\x31\x3d\x22\x31\x30\x34\x38\x2e\x37\x32\x30\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x36\x32\x39\x2e\x30\ +\x32\x38\x30\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\ +\x22\x31\x31\x32\x37\x2e\x39\x38\x30\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x79\x32\x3d\x22\x35\x38\x33\x2e\x37\x35\x32\x39\x39\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\ +\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x69\x74\x65\ +\x6d\x31\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\ +\x35\x38\x33\x2e\x37\x35\x32\x39\x39\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x32\x3d\x22\x31\x31\x32\x37\x2e\x39\x38\x30\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x36\x32\x39\x2e\ +\x30\x32\x38\x30\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\ +\x3d\x22\x31\x30\x34\x38\x2e\x37\x32\x30\x30\x22\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x36\x32\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\ +\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\ +\x63\x6f\x6c\x6f\x72\x3a\x23\x35\x65\x35\x65\x35\x65\x3b\x73\x74\ +\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\ +\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x73\x74\x6f\x70\x36\x33\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\x30\ +\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\ +\x72\x3a\x23\x65\x64\x65\x64\x65\x64\x3b\x73\x74\x6f\x70\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\ +\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\ +\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\ +\x65\x66\x3d\x22\x23\x64\x65\x66\x69\x74\x65\x6d\x32\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x34\x32\x38\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\ +\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\ +\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\ +\x31\x32\x39\x2e\x36\x38\x37\x30\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x79\x31\x3d\x22\x36\x33\x36\x2e\x39\x35\x33\x39\x38\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x32\x32\x30\x2e\ +\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\ +\x3d\x22\x35\x38\x34\x2e\x34\x30\x39\x39\x37\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\ +\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\ +\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x64\x65\x66\x69\x74\x65\x6d\x32\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x35\x38\x34\x2e\x34\ +\x30\x39\x39\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\ +\x22\x32\x32\x30\x2e\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x79\x31\x3d\x22\x36\x33\x36\x2e\x39\x35\x33\x39\x38\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x32\x39\ +\x2e\x36\x38\x37\x30\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\ +\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x73\x74\x6f\x70\x36\x35\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x2e\x30\x30\x30\ +\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ +\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\x73\x74\x6f\x70\x2d\x6f\x70\ +\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\ +\x6f\x70\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\x30\x30\x30\x30\x30\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x62\x62\ +\x62\x62\x62\x62\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\ +\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\ +\x64\x65\x66\x69\x74\x65\x6d\x32\x31\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x33\x34\x33\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x32\x38\x30\x2e\x30\ +\x34\x34\x30\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\ +\x22\x34\x31\x38\x2e\x36\x39\x38\x30\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x78\x32\x3d\x22\x31\x32\x38\x2e\x30\x35\x34\x39\x39\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x34\x38\x34\ +\x2e\x37\x31\x36\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\ +\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\ +\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x64\x65\x66\x69\x74\x65\x6d\x32\x31\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x79\x32\x3d\x22\x34\x38\x34\x2e\x37\x31\x36\x30\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x31\x32\x38\x2e\ +\x30\x35\x34\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\ +\x3d\x22\x34\x31\x38\x2e\x36\x39\x38\x30\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x78\x31\x3d\x22\x32\x38\x30\x2e\x30\x34\x34\x30\ +\x31\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\ +\x70\x36\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\ +\x66\x73\x65\x74\x3d\x22\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x36\x36\x36\ +\x36\x36\x36\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x36\x39\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\ +\x3d\x22\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\ +\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x64\x38\x64\x38\x64\x38\x3b\ +\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\ +\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\ +\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\ +\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x64\x65\x66\x69\x74\ +\x65\x6d\x32\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\ +\x34\x33\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\ +\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\ +\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x31\x3d\x22\x37\x38\x33\x2e\x37\x31\x36\x30\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x31\x30\x35\x2e\ +\x34\x38\x36\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\ +\x3d\x22\x35\x37\x36\x2e\x31\x34\x38\x39\x39\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x79\x32\x3d\x22\x33\x31\x33\x2e\x32\x37\x36\x30\ +\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x69\x74\ +\x65\x6d\x32\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\ +\x22\x33\x31\x33\x2e\x32\x37\x36\x30\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x78\x32\x3d\x22\x35\x37\x36\x2e\x31\x34\x38\x39\x39\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x31\x30\x35\ +\x2e\x34\x38\x36\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\ +\x31\x3d\x22\x37\x38\x33\x2e\x37\x31\x36\x30\x30\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x37\x31\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\ +\x22\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\ +\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x35\x61\x35\x61\x35\x61\x3b\x73\ +\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\ +\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x73\x74\x6f\x70\x37\x32\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\ +\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\ +\x6f\x72\x3a\x23\x63\x37\x63\x37\x63\x37\x3b\x73\x74\x6f\x70\x2d\ +\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\ +\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\ +\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\ +\x72\x65\x66\x3d\x22\x23\x64\x65\x66\x69\x74\x65\x6d\x32\x33\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x34\x33\x34\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\ +\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\ +\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\ +\x22\x31\x31\x37\x30\x2e\x39\x31\x30\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x79\x31\x3d\x22\x34\x37\x36\x2e\x34\x36\x35\x30\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x31\x30\x34\ +\x39\x2e\x38\x34\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\ +\x32\x3d\x22\x35\x34\x39\x2e\x33\x37\x37\x39\x39\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\ +\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\ +\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x69\x74\x65\x6d\x32\x33\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x35\x34\x39\x2e\ +\x33\x37\x37\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\ +\x3d\x22\x31\x30\x34\x39\x2e\x38\x34\x30\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x79\x31\x3d\x22\x34\x37\x36\x2e\x34\x36\x35\x30\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x31\ +\x37\x30\x2e\x39\x31\x30\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x73\x74\x6f\x70\x37\x34\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x2e\x30\x30\ +\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\ +\x72\x3a\x23\x35\x66\x35\x66\x35\x66\x3b\x73\x74\x6f\x70\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\ +\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\ +\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\ +\x74\x6f\x70\x37\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\x30\x30\x30\x30\x30\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x65\ +\x62\x65\x62\x65\x62\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\ +\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\ +\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\ +\x23\x64\x65\x66\x69\x74\x65\x6d\x32\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x33\x34\x33\x36\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\ +\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x30\x39\x34\ +\x2e\x32\x35\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\ +\x3d\x22\x32\x37\x30\x2e\x38\x35\x34\x30\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x78\x32\x3d\x22\x39\x39\x32\x2e\x34\x38\x39\x30\ +\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x33\x38\ +\x30\x2e\x34\x37\x31\x39\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\ +\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\ +\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x64\x65\x66\x69\x74\x65\x6d\x32\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x79\x32\x3d\x22\x33\x38\x30\x2e\x34\x37\x31\x39\x38\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x39\x39\x32\ +\x2e\x34\x38\x39\x30\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\ +\x31\x3d\x22\x32\x37\x30\x2e\x38\x35\x34\x30\x30\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x31\x30\x39\x34\x2e\x32\x35\ +\x30\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\ +\x6f\x70\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x30\x2e\x30\x30\x30\x30\x30\x30\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x36\x61\ +\x36\x61\x36\x61\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x37\x38\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\ +\x74\x3d\x22\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\ +\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x65\x36\x65\x36\x65\x36\ +\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\ +\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\ +\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\ +\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x64\x65\x66\x69\ +\x74\x65\x6d\x32\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x33\x34\x33\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\ +\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\ +\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x78\x31\x3d\x22\x31\x36\x34\x2e\x30\x31\x33\x30\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x34\x31\x32\ +\x2e\x39\x31\x39\x30\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\ +\x32\x3d\x22\x33\x30\x38\x2e\x37\x35\x30\x30\x30\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x33\x33\x37\x2e\x36\x30\x39\ +\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\ +\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x69\ +\x74\x65\x6d\x32\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\ +\x3d\x22\x33\x33\x37\x2e\x36\x30\x39\x39\x39\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x78\x32\x3d\x22\x33\x30\x38\x2e\x37\x35\x30\x30\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x34\x31\ +\x32\x2e\x39\x31\x39\x30\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x78\x31\x3d\x22\x31\x36\x34\x2e\x30\x31\x33\x30\x30\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x38\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\ +\x3d\x22\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\ +\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\ +\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\ +\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x38\x31\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x2e\ +\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\ +\x6c\x6f\x72\x3a\x23\x62\x66\x62\x66\x62\x66\x3b\x73\x74\x6f\x70\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\ +\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\ +\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\ +\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\ +\x68\x72\x65\x66\x3d\x22\x23\x64\x65\x66\x69\x74\x65\x6d\x32\x36\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x34\x34\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\ +\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\ +\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\ +\x3d\x22\x35\x33\x30\x2e\x37\x36\x30\x39\x39\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x79\x31\x3d\x22\x33\x34\x36\x2e\x33\x30\x33\x39\ +\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x32\x39\ +\x33\x2e\x33\x37\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x79\x32\x3d\x22\x33\x36\x30\x2e\x32\x37\x34\x39\x39\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\ +\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\ +\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x69\x74\x65\x6d\x32\x36\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x33\x36\x30\ +\x2e\x32\x37\x34\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\ +\x32\x3d\x22\x32\x39\x33\x2e\x33\x37\x30\x30\x30\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x33\x34\x36\x2e\x33\x30\x33\ +\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x35\ +\x33\x30\x2e\x37\x36\x30\x39\x39\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x73\x74\x6f\x70\x38\x33\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x2e\x30\ +\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\ +\x6f\x72\x3a\x23\x35\x66\x35\x66\x35\x66\x3b\x73\x74\x6f\x70\x2d\ +\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\ +\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x73\x74\x6f\x70\x38\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\x30\x30\x30\x30\ +\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\ +\x65\x35\x65\x35\x65\x35\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\ +\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\ +\x22\x23\x64\x65\x66\x69\x74\x65\x6d\x32\x37\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x33\x34\x34\x32\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\ +\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x39\x32\x31\ +\x2e\x30\x39\x31\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\ +\x31\x3d\x22\x34\x30\x33\x2e\x31\x38\x37\x39\x39\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x39\x38\x35\x2e\x39\x38\x31\ +\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x33\ +\x31\x37\x2e\x34\x34\x36\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\ +\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\ +\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x64\x65\x66\x69\x74\x65\x6d\x32\x37\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x79\x32\x3d\x22\x33\x31\x37\x2e\x34\x34\x36\x39\ +\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x39\x38\ +\x35\x2e\x39\x38\x31\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x79\x31\x3d\x22\x34\x30\x33\x2e\x31\x38\x37\x39\x39\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x39\x32\x31\x2e\x30\x39\ +\x31\x30\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\ +\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\ +\x74\x6f\x70\x38\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x2e\x30\x30\x30\x30\x30\x30\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x37\ +\x65\x37\x65\x37\x65\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\ +\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x38\ +\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\ +\x65\x74\x3d\x22\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\ +\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x65\x35\x65\x35\x65\ +\x35\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ +\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\ +\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x64\x65\x66\ +\x69\x74\x65\x6d\x33\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x33\x34\x34\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\ +\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\ +\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\ +\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x31\x2c\ +\x30\x2c\x30\x2c\x31\x2e\x30\x31\x36\x30\x33\x38\x2c\x30\x2c\x2d\ +\x31\x31\x2e\x37\x33\x38\x35\x35\x29\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x31\x3d\x22\x32\x38\x37\x2e\x35\x30\x30\x30\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x36\x33\x36\x2e\ +\x37\x30\x36\x39\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\ +\x3d\x22\x39\x38\x30\x2e\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x79\x32\x3d\x22\x36\x33\x36\x2e\x37\x30\x36\x39\ +\x37\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x69\x74\ +\x65\x6d\x33\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\ +\x22\x36\x33\x36\x2e\x37\x30\x36\x39\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x78\x32\x3d\x22\x39\x38\x30\x2e\x30\x30\x30\x30\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x36\x33\x36\ +\x2e\x37\x30\x36\x39\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\ +\x31\x3d\x22\x32\x38\x37\x2e\x35\x30\x30\x30\x30\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x39\x35\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\ +\x22\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\ +\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x34\x36\x34\x36\x34\x36\x3b\x73\ +\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\ +\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x73\x74\x6f\x70\x39\x36\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\ +\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\ +\x6f\x72\x3a\x23\x63\x32\x63\x32\x63\x32\x3b\x73\x74\x6f\x70\x2d\ +\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\ +\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\ +\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\ +\x72\x65\x66\x3d\x22\x23\x64\x65\x66\x69\x74\x65\x6d\x32\x38\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\ +\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x34\x34\x36\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\ +\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\ +\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\ +\x22\x31\x30\x39\x32\x2e\x37\x30\x34\x35\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x79\x3d\x22\x36\x34\x2e\x38\x34\x35\x32\x38\x34\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x38\ +\x39\x2e\x34\x30\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\ +\x79\x3d\x22\x36\x34\x2e\x38\x34\x34\x37\x36\x35\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x72\x3d\x22\x31\x32\x30\x32\x2e\x31\x35\x30\ +\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\ +\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x69\x74\ +\x65\x6d\x32\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\ +\x22\x33\x34\x35\x2e\x35\x36\x30\x30\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x34\x39\x2e\x37\x32\x30\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x31\x32\x30\x32\ +\x2e\x31\x35\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\ +\x3d\x22\x33\x34\x35\x2e\x35\x36\x30\x30\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x34\x39\x2e\x37\x32\x30\ +\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\ +\x70\x38\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\ +\x66\x73\x65\x74\x3d\x22\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x66\ +\x66\x66\x66\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x39\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\ +\x3d\x22\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\ +\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x61\x38\x61\x38\x61\x38\x3b\ +\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\ +\x30\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x2f\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\ +\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\ +\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x64\x65\x66\x69\x74\ +\x65\x6d\x32\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\ +\x34\x34\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\ +\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\ +\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x31\x3d\x22\x36\x34\x39\x2e\x34\x32\x39\x30\x32\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x38\x30\x37\x2e\ +\x34\x36\x36\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x32\ +\x3d\x22\x36\x35\x35\x2e\x33\x35\x31\x39\x39\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x79\x32\x3d\x22\x34\x38\x35\x2e\x39\x30\x39\x30\ +\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x69\x74\ +\x65\x6d\x32\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\ +\x22\x34\x38\x35\x2e\x39\x30\x39\x30\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x78\x32\x3d\x22\x36\x35\x35\x2e\x33\x35\x31\x39\x39\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\x38\x30\x37\ +\x2e\x34\x36\x36\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\ +\x31\x3d\x22\x36\x34\x39\x2e\x34\x32\x39\x30\x32\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x39\x32\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\ +\x22\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\ +\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\x73\ +\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\ +\x30\x30\x30\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x73\x74\x6f\x70\x39\x33\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\ +\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\ +\x6f\x72\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\x73\x74\x6f\x70\x2d\ +\x6f\x70\x61\x63\x69\x74\x79\x3a\x30\x2e\x31\x33\x37\x35\x36\x36\ +\x30\x30\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\ +\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\ +\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\ +\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x33\x36\x38\x32\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x34\x31\x33\x32\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\ +\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\ +\x28\x31\x2e\x31\x31\x34\x39\x32\x31\x39\x2c\x30\x2e\x32\x37\x32\ +\x32\x33\x30\x36\x2c\x2d\x30\x2e\x37\x35\x30\x37\x31\x37\x31\x2c\ +\x33\x2e\x30\x37\x34\x35\x36\x33\x39\x2c\x2d\x34\x37\x31\x2e\x30\ +\x38\x36\x32\x39\x2c\x2d\x31\x34\x38\x2e\x33\x32\x38\x36\x33\x29\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x32\x37\x30\ +\x2e\x35\x38\x33\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\ +\x79\x3d\x22\x33\x33\x2e\x38\x39\x39\x39\x38\x36\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x32\x37\x30\x2e\x35\x38\x33\ +\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x33\ +\x33\x2e\x38\x39\x39\x39\x38\x36\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x72\x3d\x22\x31\x39\x2e\x35\x37\x31\x34\x32\x38\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\ +\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\ +\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x38\x36\x34\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x34\x31\x33\x34\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\ +\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\ +\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\ +\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\ +\x74\x72\x69\x78\x28\x30\x2e\x36\x31\x38\x36\x35\x39\x38\x2c\x30\ +\x2e\x39\x36\x36\x36\x35\x34\x32\x2c\x2d\x31\x2e\x30\x33\x33\x32\ +\x34\x36\x32\x2c\x30\x2e\x36\x36\x31\x32\x37\x38\x36\x2c\x2d\x33\ +\x32\x37\x2e\x32\x37\x35\x36\x38\x2c\x2d\x32\x35\x35\x2e\x38\x34\ +\x31\x33\x36\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\ +\x22\x32\x38\x32\x2e\x36\x34\x35\x38\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x79\x3d\x22\x32\x39\x2e\x31\x34\x39\x30\x34\x36\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x32\x38\x32\ +\x2e\x36\x34\x35\x38\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\ +\x79\x3d\x22\x32\x39\x2e\x31\x34\x39\x30\x34\x36\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x72\x3d\x22\x31\x39\x2e\x35\x37\x31\x34\x32\ +\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\ +\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\ +\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\ +\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\ +\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x31\x39\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\ +\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\ +\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\ +\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\ +\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\ +\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\ +\x55\x73\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\ +\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\ +\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\ +\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\ +\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\ +\x32\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\ +\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\ +\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\ +\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\ +\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\ +\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\ +\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ +\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\ +\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x35\x33\x32\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\ +\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\ +\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\ +\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\ +\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\ +\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\ +\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\ +\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x35\x33\x33\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\ +\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\ +\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\ +\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\ +\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\ +\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\ +\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\ +\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\ +\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x35\x33\x33\x33\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\ +\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\ +\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\ +\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\ +\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\ +\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\ +\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x35\x33\x33\x35\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\ +\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\ +\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\ +\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\ +\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\ +\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\ +\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\ +\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x33\x37\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\ +\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\ +\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\ +\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\ +\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\ +\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\ +\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\ +\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x33\x39\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\ +\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\ +\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\ +\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\ +\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\ +\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\ +\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\ +\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\ +\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\ +\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\ +\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x34\x31\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\ +\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\ +\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\ +\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\ +\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\ +\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\ +\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\ +\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\ +\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\ +\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\ +\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\ +\x34\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\ +\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\ +\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\ +\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\ +\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\ +\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\ +\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ +\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\ +\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x35\x33\x34\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\ +\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\ +\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\ +\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\ +\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\ +\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\ +\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\ +\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x35\x33\x34\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\ +\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\ +\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\ +\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\ +\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\ +\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\ +\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\ +\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\ +\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x35\x33\x34\x39\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\ +\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\ +\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\ +\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\ +\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\ +\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\ +\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x35\x33\x35\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\ +\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\ +\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\ +\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\ +\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\ +\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\ +\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\ +\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x35\x33\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\ +\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\ +\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\ +\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\ +\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\ +\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\ +\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\ +\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x35\x35\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\ +\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\ +\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\ +\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\ +\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\ +\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\ +\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\ +\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\ +\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\ +\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\ +\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x35\x37\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\ +\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\ +\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\ +\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\ +\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\ +\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\ +\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\ +\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\ +\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\ +\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\ +\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\ +\x35\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\ +\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\ +\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\ +\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\ +\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\ +\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\ +\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ +\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\ +\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x35\x33\x36\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\ +\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\ +\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\ +\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\ +\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\ +\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\ +\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\ +\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x35\x33\x36\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\ +\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\ +\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\ +\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\ +\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\ +\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\ +\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\ +\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\ +\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x35\x33\x36\x35\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\ +\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\ +\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\ +\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\ +\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\ +\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\ +\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x35\x33\x36\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\ +\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\ +\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\ +\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\ +\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\ +\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\ +\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\ +\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x36\x39\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\ +\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\ +\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\ +\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\ +\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\ +\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\ +\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\ +\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x37\x31\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\ +\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\ +\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\ +\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\ +\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\ +\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\ +\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\ +\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\ +\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\ +\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\ +\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x37\x33\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\ +\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\ +\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\ +\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\ +\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\ +\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\ +\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\ +\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\ +\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\ +\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\ +\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\ +\x37\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\ +\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\ +\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\ +\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\ +\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\ +\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\ +\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ +\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\ +\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x35\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\ +\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\ +\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\ +\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\ +\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\ +\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\ +\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\ +\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x35\x33\x37\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\ +\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\ +\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\ +\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\ +\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\ +\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\ +\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\ +\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\ +\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x35\x33\x38\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\ +\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\ +\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\ +\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\ +\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\ +\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\ +\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x35\x33\x38\x33\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\ +\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\ +\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\ +\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\ +\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\ +\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\ +\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\ +\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x38\x35\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\ +\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\ +\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\ +\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\ +\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\ +\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\ +\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\ +\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x38\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\ +\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\ +\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\ +\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\ +\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\ +\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\ +\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\ +\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\ +\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\ +\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\ +\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x38\x39\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\ +\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\ +\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\ +\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\ +\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\ +\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\ +\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\ +\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\ +\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\ +\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\ +\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\ +\x39\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\ +\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\ +\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\ +\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\ +\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\ +\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\ +\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ +\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\ +\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x35\x33\x39\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\ +\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\ +\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\ +\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\ +\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\ +\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\ +\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\ +\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x35\x33\x39\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\ +\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\ +\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\ +\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x39\ +\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\x31\x37\ +\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\ +\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\ +\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\ +\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x35\x33\x39\x37\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\x30\x33\ +\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\ +\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\x2e\x35\ +\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\ +\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\ +\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\x69\x6e\ +\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x35\x33\x39\x39\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\ +\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\x30\x2e\ +\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\ +\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\x31\x37\ +\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x39\ +\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\ +\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\ +\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x34\x30\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\ +\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\ +\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x31\ +\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\x30\x33\ +\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\ +\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\x39\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\ +\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\x37\x37\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\ +\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x34\x30\x33\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\ +\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\ +\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\ +\x22\x31\x30\x2e\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x31\x30\x2e\ +\x30\x33\x31\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\ +\x79\x3d\x22\x39\x2e\x35\x31\x37\x32\x35\x37\x37\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x2e\x31\x37\x34\x39\x39\ +\x39\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\ +\x20\x20\x3c\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\ +\x64\x76\x69\x65\x77\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x62\ +\x61\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x70\x61\x67\x65\x63\x6f\ +\x6c\x6f\x72\x3d\x22\x23\x66\x66\x66\x66\x66\x66\x22\x0a\x20\x20\ +\x20\x20\x20\x62\x6f\x72\x64\x65\x72\x63\x6f\x6c\x6f\x72\x3d\x22\ +\x23\x36\x36\x36\x36\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\ +\x72\x64\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x31\x2e\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x70\x61\x67\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x2e\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x70\x61\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0a\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\ +\x6d\x3d\x22\x35\x2e\x38\x32\x37\x32\x36\x38\x32\x22\x0a\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\ +\x34\x33\x2e\x37\x32\x33\x36\x31\x39\x22\x0a\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x33\x31\x2e\ +\x30\x31\x37\x36\x31\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x63\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\ +\x65\x72\x3d\x22\x67\x33\x33\x36\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x74\x72\x75\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\ +\x63\x75\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\ +\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x67\x72\x69\x64\x2d\x62\x62\x6f\x78\x3d\x22\x74\x72\x75\x65\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\ +\x69\x6e\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x31\x33\x36\ +\x36\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\ +\x37\x30\x36\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x2d\x38\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\ +\x69\x6e\x64\x6f\x77\x2d\x79\x3d\x22\x2d\x38\x22\x0a\x20\x20\x20\ +\x20\x20\x73\x68\x6f\x77\x67\x75\x69\x64\x65\x73\x3d\x22\x74\x72\ +\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x67\x75\x69\x64\x65\x2d\x62\x62\x6f\x78\x3d\x22\x74\x72\ +\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x6d\x61\x78\x69\x6d\x69\x7a\ +\x65\x64\x3d\x22\x31\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x6d\x65\x74\ +\x61\x64\x61\x74\x61\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6d\ +\x65\x74\x61\x64\x61\x74\x61\x35\x38\x32\x36\x22\x3e\x0a\x20\x20\ +\x20\x20\x3c\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x3c\x63\x63\x3a\x57\x6f\x72\x6b\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\x74\x3d\x22\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x66\x6f\ +\x72\x6d\x61\x74\x3e\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\x78\ +\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x79\x70\x65\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x72\ +\x65\x73\x6f\x75\x72\x63\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\ +\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x64\x63\x6d\x69\ +\x74\x79\x70\x65\x2f\x53\x74\x69\x6c\x6c\x49\x6d\x61\x67\x65\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\ +\x74\x69\x74\x6c\x65\x3e\x3c\x2f\x64\x63\x3a\x74\x69\x74\x6c\x65\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\ +\x6b\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\ +\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0a\ +\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x61\ +\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x6c\x61\x62\x65\x6c\x3d\x22\x4c\x61\x79\x65\x72\ +\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x67\x72\x6f\x75\x70\x6d\x6f\x64\x65\x3d\x22\x6c\x61\x79\ +\x65\x72\x22\x3e\x0a\x20\x20\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x67\x33\x33\x36\x30\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x65\x78\ +\x70\x6f\x72\x74\x2d\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x2f\ +\x68\x6f\x6d\x65\x2f\x79\x6f\x72\x69\x6b\x2f\x44\x6f\x63\x75\x6d\ +\x65\x6e\x74\x73\x2f\x4c\x61\x62\x2f\x44\x72\x61\x66\x74\x2f\x69\ +\x63\x6f\x6e\x73\x2f\x64\x72\x61\x66\x74\x2e\x70\x6e\x67\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x65\x78\x70\x6f\x72\x74\x2d\x78\x64\x70\x69\x3d\x22\x33\x2e\x32\ +\x34\x37\x38\x31\x35\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x65\x78\x70\x6f\x72\x74\x2d\x79\ +\x64\x70\x69\x3d\x22\x33\x2e\x32\x34\x37\x38\x31\x35\x36\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\ +\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x31\x33\x36\x37\x38\ +\x36\x33\x2c\x30\x2c\x30\x2c\x30\x2e\x31\x33\x36\x37\x38\x36\x33\ +\x2c\x2d\x31\x31\x39\x2e\x31\x35\x35\x31\x39\x2c\x2d\x31\x33\x34\ +\x2e\x38\x36\x39\x36\x32\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x65\x78\x70\x6f\x72\x74\x2d\x79\ +\x64\x70\x69\x3d\x22\x36\x2e\x32\x39\x32\x36\x34\x33\x31\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x65\x78\x70\x6f\x72\x74\x2d\x78\x64\x70\x69\x3d\x22\x36\ +\x2e\x32\x39\x32\x36\x34\x33\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x65\x78\x70\x6f\ +\x72\x74\x2d\x66\x69\x6c\x65\x6e\x61\x6d\x65\x3d\x22\x2f\x68\x6f\ +\x6d\x65\x2f\x79\x6f\x72\x69\x6b\x2f\x44\x6f\x63\x75\x6d\x65\x6e\ +\x74\x73\x2f\x4c\x61\x62\x2f\x44\x72\x61\x66\x74\x2f\x69\x63\x6f\ +\x6e\x73\x2f\x64\x72\x61\x66\x74\x2e\x70\x6e\x67\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\ +\x33\x38\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\ +\x22\x6d\x20\x31\x32\x38\x32\x2e\x39\x39\x31\x32\x2c\x31\x34\x32\ +\x35\x2e\x35\x36\x34\x38\x20\x63\x20\x2d\x34\x31\x2e\x36\x35\x39\ +\x39\x2c\x33\x31\x2e\x33\x31\x33\x32\x20\x2d\x37\x32\x2e\x37\x30\ +\x33\x36\x2c\x32\x34\x2e\x36\x35\x30\x35\x20\x2d\x31\x31\x38\x2e\ +\x31\x33\x38\x35\x2c\x32\x34\x2e\x32\x34\x33\x37\x20\x2d\x37\x30\ +\x2e\x30\x37\x39\x36\x2c\x2d\x30\x2e\x36\x32\x37\x35\x20\x2d\x31\ +\x33\x35\x2e\x38\x34\x33\x2c\x38\x2e\x36\x31\x37\x37\x20\x2d\x32\ +\x30\x31\x2e\x37\x33\x36\x37\x32\x2c\x2d\x31\x37\x2e\x35\x36\x33\ +\x39\x20\x2d\x34\x35\x2e\x36\x36\x36\x33\x2c\x2d\x31\x38\x2e\x31\ +\x34\x34\x36\x20\x2d\x32\x2e\x35\x32\x36\x33\x38\x2c\x2d\x33\x39\ +\x2e\x37\x38\x37\x32\x20\x32\x31\x2e\x32\x36\x31\x34\x2c\x2d\x33\ +\x38\x2e\x39\x30\x37\x32\x20\x35\x33\x2e\x35\x37\x35\x35\x32\x2c\ +\x31\x2e\x39\x38\x32\x31\x20\x31\x31\x37\x2e\x37\x38\x39\x32\x32\ +\x2c\x2d\x33\x2e\x30\x34\x36\x32\x20\x31\x36\x39\x2e\x32\x31\x36\ +\x38\x32\x2c\x30\x20\x34\x33\x2e\x35\x36\x34\x33\x2c\x32\x2e\x35\ +\x38\x30\x34\x20\x39\x38\x2e\x36\x31\x36\x37\x2c\x35\x2e\x38\x39\ +\x30\x37\x20\x31\x32\x39\x2e\x33\x39\x37\x2c\x33\x32\x2e\x32\x32\ +\x37\x34\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\ +\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x36\x33\ +\x35\x35\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\ +\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\ +\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\ +\x73\x73\x73\x73\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\ +\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x67\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\ +\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\ +\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ +\x74\x68\x3a\x30\x2e\x31\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\ +\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\x65\ +\x72\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x67\x34\x35\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x74\ +\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\ +\x28\x32\x35\x2e\x39\x30\x33\x39\x36\x31\x2c\x30\x2c\x30\x2c\x32\ +\x35\x2e\x39\x30\x33\x39\x36\x31\x2c\x2d\x34\x35\x30\x36\x2e\x32\ +\x35\x34\x31\x2c\x2d\x32\x35\x38\x34\x2e\x32\x37\x34\x29\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x35\x32\x36\x38\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\ +\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x32\x35\x33\ +\x34\x32\x36\x32\x2c\x30\x2c\x30\x2c\x30\x2e\x32\x35\x33\x34\x32\ +\x36\x32\x2c\x31\x37\x32\x33\x2e\x37\x33\x35\x39\x2c\x31\x33\x32\ +\x30\x2e\x39\x32\x33\x37\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x72\x6f\x6b\x65\x2d\ +\x77\x69\x64\x74\x68\x3a\x31\x34\x2e\x36\x32\x31\x33\x34\x37\x34\ +\x33\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\ +\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x72\x6f\x6b\ +\x65\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\ +\x74\x72\x69\x78\x28\x2d\x32\x35\x2e\x39\x30\x33\x39\x36\x31\x2c\ +\x30\x2c\x30\x2c\x2d\x32\x35\x2e\x39\x30\x33\x39\x36\x31\x2c\x2d\ +\x32\x34\x33\x33\x2e\x39\x33\x36\x37\x2c\x2d\x35\x31\x31\x2e\x39\ +\x35\x37\x34\x33\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x56\x69\x65\x77\x30\x30\x31\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x67\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x33\ +\x37\x34\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\ +\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\ +\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x72\x6f\x6b\x65\x3a\ +\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x2d\x32\x37\x2e\x39\x32\ +\x30\x33\x2c\x32\x2e\x32\x36\x33\x33\x39\x20\x31\x35\x2e\x39\x32\ +\x30\x33\x2c\x2d\x32\x33\x2e\x30\x34\x38\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x31\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\ +\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x72\ +\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x2d\x31\ +\x35\x2e\x39\x32\x30\x33\x2c\x32\x33\x2e\x30\x34\x38\x20\x32\x37\ +\x2e\x39\x32\x30\x33\x2c\x2d\x32\x2e\x32\x36\x33\x33\x39\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ +\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\ +\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x67\x33\x37\x34\x35\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\ +\x65\x3a\x6e\x6f\x6e\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x73\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x70\x61\x74\x68\x33\x37\x34\x37\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x33\ +\x30\x2e\x34\x30\x35\x36\x2c\x2d\x37\x2e\x37\x35\x36\x37\x32\x20\ +\x41\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\x36\x30\x20\x30\ +\x20\x30\x20\x31\x35\x2e\x39\x32\x30\x33\x2c\x2d\x32\x33\x2e\x30\ +\x34\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\ +\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\ +\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\ +\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\ +\x61\x74\x68\x33\x37\x34\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x31\x35\x2e\ +\x39\x32\x30\x33\x2c\x2d\x32\x33\x2e\x30\x34\x38\x20\x61\x20\x31\ +\x32\x2c\x36\x2e\x39\x32\x38\x32\x30\x31\x36\x20\x36\x30\x20\x30\ +\x20\x30\x20\x31\x32\x2c\x32\x30\x2e\x37\x38\x34\x36\x31\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\ +\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x72\x6f\x6b\ +\x65\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\ +\x37\x35\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x32\x37\x2e\x39\x32\x30\x33\ +\x2c\x2d\x32\x2e\x32\x36\x33\x33\x39\x20\x61\x20\x31\x32\x2c\x36\ +\x2e\x39\x32\x38\x32\x20\x36\x30\x20\x30\x20\x30\x20\x32\x2e\x34\ +\x38\x35\x33\x2c\x2d\x35\x2e\x34\x39\x33\x33\x33\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\ +\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\ +\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x72\x6f\x6b\x65\x3a\ +\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x37\x35\ +\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x64\x3d\x22\x6d\x20\x2d\x32\x37\x2e\x39\x32\x30\x33\x2c\ +\x32\x2e\x32\x36\x33\x33\x39\x20\x61\x20\x31\x32\x2c\x36\x2e\x39\ +\x32\x38\x32\x30\x31\x36\x20\x36\x30\x20\x30\x20\x30\x20\x31\x32\ +\x2c\x32\x30\x2e\x37\x38\x34\x36\x31\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\ +\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\ +\x23\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\ +\x34\x30\x33\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ +\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\ +\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\ +\x72\x69\x78\x28\x2d\x32\x35\x2e\x39\x30\x33\x39\x36\x31\x2c\x30\ +\x2c\x30\x2c\x2d\x32\x35\x2e\x39\x30\x33\x39\x36\x31\x2c\x2d\x32\ +\x34\x33\x33\x2e\x39\x33\x37\x32\x2c\x2d\x35\x31\x31\x2e\x39\x35\ +\x37\x31\x32\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x56\x69\x65\x77\x22\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x33\x36\x37\x38\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\ +\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x32\ +\x39\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\ +\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\ +\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\ +\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x63\x69\x72\x63\ +\x6c\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\ +\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x35\x33\x32\x37\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ +\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\ +\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\ +\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x63\x69\x72\x63\ +\x6c\x65\x33\x36\x38\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x32\x35\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\ +\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x63\x78\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\ +\x69\x3a\x63\x78\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\ +\x3a\x63\x79\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\ +\x72\x78\x3d\x22\x32\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\ +\x72\x79\x3d\x22\x32\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x32\x35\x2c\x30\ +\x20\x43\x20\x32\x35\x2c\x31\x33\x2e\x38\x30\x37\x31\x31\x39\x20\ +\x31\x33\x2e\x38\x30\x37\x31\x31\x39\x2c\x32\x35\x20\x30\x2c\x32\ +\x35\x20\x2d\x31\x33\x2e\x38\x30\x37\x31\x31\x39\x2c\x32\x35\x20\ +\x2d\x32\x35\x2c\x31\x33\x2e\x38\x30\x37\x31\x31\x39\x20\x2d\x32\ +\x35\x2c\x30\x20\x63\x20\x30\x2c\x2d\x31\x33\x2e\x38\x30\x37\x31\ +\x31\x39\x20\x31\x31\x2e\x31\x39\x32\x38\x38\x31\x2c\x2d\x32\x35\ +\x20\x32\x35\x2c\x2d\x32\x35\x20\x31\x33\x2e\x38\x30\x37\x31\x31\ +\x39\x2c\x30\x20\x32\x35\x2c\x31\x31\x2e\x31\x39\x32\x38\x38\x31\ +\x20\x32\x35\x2c\x32\x35\x20\x7a\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x33\x36\x38\x32\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\ +\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x34\x30\ +\x31\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\ +\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\ +\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\ +\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\ +\x23\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\ +\x33\x33\x31\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ +\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\ +\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x36\ +\x38\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x64\x3d\x22\x4d\x20\x38\x2e\x34\x38\x35\x32\x38\x2c\ +\x31\x33\x2e\x30\x30\x38\x32\x20\x41\x20\x31\x32\x2c\x36\x2e\x39\ +\x32\x38\x32\x20\x2d\x31\x38\x30\x20\x30\x20\x30\x20\x2d\x31\x32\ +\x2c\x31\x37\x2e\x39\x30\x37\x32\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\ +\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\ +\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x33\ +\x33\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\ +\x2e\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\ +\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x36\x38\x36\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x64\x3d\x22\x4d\x20\x2d\x31\x32\x2c\x31\x37\x2e\x39\x30\x37\ +\x32\x20\x41\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\x2d\x31\ +\x38\x30\x20\x30\x20\x30\x20\x38\x2e\x34\x38\x35\x32\x38\x2c\x32\ +\x32\x2e\x38\x30\x36\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\ +\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\ +\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x33\x35\x29\ +\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\ +\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\ +\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x36\x38\x38\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\ +\x3d\x22\x4d\x20\x38\x2e\x34\x38\x35\x32\x38\x2c\x32\x32\x2e\x38\ +\x30\x36\x31\x20\x41\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\ +\x2d\x31\x38\x30\x20\x30\x20\x30\x20\x31\x32\x2c\x31\x37\x2e\x39\ +\x30\x37\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\ +\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\ +\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x33\x37\x29\x3b\x66\x69\ +\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\ +\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\ +\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x61\x74\x68\x33\x36\x39\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\ +\x20\x31\x32\x2c\x31\x37\x2e\x39\x30\x37\x32\x20\x41\x20\x31\x32\ +\x2c\x36\x2e\x39\x32\x38\x32\x20\x2d\x31\x38\x30\x20\x30\x20\x30\ +\x20\x38\x2e\x34\x38\x35\x32\x38\x2c\x31\x33\x2e\x30\x30\x38\x32\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\ +\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\ +\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x35\x33\x33\x39\x29\x3b\x66\x69\x6c\x6c\x2d\ +\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\x34\ +\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\ +\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x70\x61\x74\x68\x33\x36\x39\x32\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x37\x2e\ +\x30\x32\x32\x37\x38\x2c\x2d\x31\x33\x2e\x38\x35\x32\x36\x20\x41\ +\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\x36\x30\x20\x30\x20\ +\x30\x20\x32\x31\x2e\x35\x30\x38\x31\x2c\x31\x2e\x34\x33\x38\x37\ +\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\ +\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\ +\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\ +\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x35\x33\x34\x31\x29\x3b\x66\x69\x6c\x6c\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\ +\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\ +\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x70\x61\x74\x68\x33\x36\x39\x34\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x32\ +\x31\x2e\x35\x30\x38\x31\x2c\x31\x2e\x34\x33\x38\x37\x32\x20\x41\ +\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\x36\x30\x20\x30\x20\ +\x30\x20\x32\x33\x2e\x39\x39\x33\x33\x2c\x2d\x34\x2e\x30\x35\x34\ +\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\ +\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\ +\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\ +\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x35\x33\x34\x33\x29\x3b\x66\x69\x6c\x6c\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\ +\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\ +\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x70\x61\x74\x68\x33\x36\x39\x36\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x37\ +\x2e\x30\x32\x32\x37\x38\x2c\x31\x33\x2e\x38\x35\x32\x36\x20\x61\ +\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\x2d\x36\x30\x20\x30\ +\x20\x30\x20\x30\x2e\x30\x39\x35\x37\x34\x2c\x31\x2e\x34\x31\x32\ +\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\ +\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\ +\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\ +\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x35\x33\x34\x35\x29\x3b\x66\x69\x6c\x6c\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\ +\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\ +\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x70\x61\x74\x68\x33\x36\x39\x38\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x31\ +\x36\x2e\x37\x37\x39\x31\x2c\x2d\x31\x2e\x34\x36\x37\x36\x36\x20\ +\x41\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\x2d\x36\x30\x20\ +\x30\x20\x30\x20\x31\x34\x2e\x32\x33\x37\x2c\x30\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\ +\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\ +\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\ +\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x35\x33\x34\x37\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ +\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\ +\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\ +\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\ +\x33\x37\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x37\x2e\x31\x31\x38\x35\ +\x32\x2c\x31\x32\x2e\x33\x32\x39\x36\x20\x61\x20\x31\x32\x2c\x36\ +\x2e\x39\x32\x38\x32\x20\x2d\x36\x30\x20\x30\x20\x30\x20\x2d\x30\ +\x2e\x30\x39\x35\x37\x34\x2c\x31\x2e\x35\x32\x33\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\ +\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\ +\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\ +\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x35\x33\x34\x39\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ +\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\ +\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\ +\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\ +\x33\x37\x30\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x32\x33\x2e\x39\x39\x33\ +\x33\x2c\x2d\x34\x2e\x30\x35\x34\x36\x20\x41\x20\x31\x32\x2c\x36\ +\x2e\x39\x32\x38\x32\x20\x36\x30\x20\x30\x20\x30\x20\x39\x2e\x35\ +\x30\x38\x30\x36\x2c\x2d\x31\x39\x2e\x33\x34\x35\x39\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\ +\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\ +\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\ +\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x35\x33\x35\x31\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\ +\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ +\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\ +\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\ +\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\ +\x68\x33\x37\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x39\x2e\x35\x30\x38\ +\x30\x36\x2c\x2d\x31\x39\x2e\x33\x34\x35\x39\x20\x61\x20\x31\x32\ +\x2c\x36\x2e\x39\x32\x38\x32\x20\x36\x30\x20\x30\x20\x30\x20\x2d\ +\x32\x2e\x34\x38\x35\x32\x38\x2c\x35\x2e\x34\x39\x33\x33\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\ +\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\ +\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x35\x33\x35\x33\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\ +\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\ +\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\x34\x38\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\ +\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\ +\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\ +\x74\x68\x33\x37\x30\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x2d\x37\x2e\x30\ +\x32\x32\x37\x38\x2c\x2d\x31\x33\x2e\x38\x35\x32\x36\x20\x61\x20\ +\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\x2d\x36\x30\x20\x30\x20\ +\x30\x20\x2d\x32\x2e\x34\x38\x35\x32\x38\x2c\x2d\x35\x2e\x34\x39\ +\x33\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\ +\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\ +\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x35\x35\x29\x3b\x66\x69\x6c\ +\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\ +\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ +\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\ +\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x70\x61\x74\x68\x33\x37\x30\x38\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\ +\x2d\x39\x2e\x35\x30\x38\x30\x36\x2c\x2d\x31\x39\x2e\x33\x34\x35\ +\x39\x20\x41\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\x2d\x36\ +\x30\x20\x30\x20\x30\x20\x2d\x32\x33\x2e\x39\x39\x33\x33\x2c\x2d\ +\x34\x2e\x30\x35\x34\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\ +\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\ +\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x35\x37\x29\ +\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\ +\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\ +\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x37\x31\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\ +\x3d\x22\x6d\x20\x2d\x32\x33\x2e\x39\x39\x33\x33\x2c\x2d\x34\x2e\ +\x30\x35\x34\x36\x20\x61\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\ +\x20\x2d\x36\x30\x20\x30\x20\x30\x20\x32\x2e\x34\x38\x35\x32\x2c\ +\x35\x2e\x34\x39\x33\x33\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\ +\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\ +\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x35\x39\ +\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\ +\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\ +\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x37\x31\x32\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x64\x3d\x22\x4d\x20\x2d\x32\x31\x2e\x35\x30\x38\x31\x2c\x31\x2e\ +\x34\x33\x38\x37\x32\x20\x41\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\ +\x32\x20\x2d\x36\x30\x20\x30\x20\x30\x20\x2d\x37\x2e\x30\x32\x32\ +\x37\x38\x2c\x2d\x31\x33\x2e\x38\x35\x32\x36\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\ +\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\ +\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\ +\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x35\x33\x36\x31\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\ +\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\ +\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\ +\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\ +\x37\x31\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x38\x2e\x34\x38\x35\x32\x38\ +\x2c\x2d\x31\x33\x2e\x30\x30\x38\x32\x20\x61\x20\x31\x32\x2c\x36\ +\x2e\x39\x32\x38\x32\x20\x2d\x31\x38\x30\x20\x30\x20\x30\x20\x31\ +\x2e\x31\x37\x35\x33\x2c\x2d\x30\x2e\x37\x38\x39\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\ +\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\ +\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\ +\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x35\x33\x36\x33\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\ +\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ +\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\ +\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\ +\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\ +\x68\x33\x37\x31\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x2d\x39\x2e\x36\x36\ +\x30\x35\x38\x2c\x2d\x31\x33\x2e\x37\x39\x37\x33\x20\x61\x20\x31\ +\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\x2d\x31\x38\x30\x20\x30\x20\ +\x30\x20\x32\x2e\x35\x34\x32\x30\x36\x2c\x31\x2e\x34\x36\x37\x37\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\ +\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\ +\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x35\x33\x36\x35\x29\x3b\x66\x69\x6c\x6c\x2d\ +\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\x34\ +\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\ +\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x70\x61\x74\x68\x33\x37\x31\x38\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x37\x2e\ +\x31\x31\x38\x35\x32\x2c\x2d\x31\x32\x2e\x33\x32\x39\x36\x20\x61\ +\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\x2d\x31\x38\x30\x20\ +\x30\x20\x30\x20\x31\x2e\x33\x36\x36\x37\x36\x2c\x2d\x30\x2e\x36\ +\x37\x38\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\ +\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\ +\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x36\x37\x29\x3b\x66\x69\ +\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\ +\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\ +\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x61\x74\x68\x33\x37\x32\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\ +\x20\x2d\x37\x2e\x31\x31\x38\x35\x32\x2c\x31\x35\x2e\x32\x36\x34\ +\x39\x20\x61\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\x36\x30\ +\x20\x30\x20\x30\x20\x30\x2e\x30\x39\x35\x37\x34\x2c\x2d\x31\x2e\ +\x34\x31\x32\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ +\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\ +\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\ +\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x36\x39\x29\x3b\x66\ +\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\ +\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\ +\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x37\x32\x32\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\ +\x6d\x20\x2d\x37\x2e\x30\x32\x32\x37\x38\x2c\x31\x33\x2e\x38\x35\ +\x32\x36\x20\x61\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\x36\ +\x30\x20\x30\x20\x30\x20\x2d\x30\x2e\x30\x39\x35\x37\x34\x2c\x2d\ +\x31\x2e\x35\x32\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\ +\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\ +\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x37\x31\x29\x3b\ +\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\ +\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\ +\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x37\x32\x34\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\ +\x22\x6d\x20\x2d\x31\x34\x2e\x32\x33\x37\x2c\x30\x20\x61\x20\x31\ +\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\x36\x30\x20\x30\x20\x30\x20\ +\x2d\x32\x2e\x35\x34\x32\x31\x2c\x2d\x31\x2e\x34\x36\x37\x36\x36\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\ +\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\ +\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x35\x33\x37\x33\x29\x3b\x66\x69\x6c\x6c\x2d\ +\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\x34\ +\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\ +\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\ +\x20\x30\x2c\x31\x33\x2e\x38\x35\x36\x34\x20\x32\x2e\x34\x34\x31\ +\x31\x38\x2c\x31\x2e\x31\x31\x37\x37\x20\x32\x2e\x34\x36\x31\x35\ +\x38\x2c\x30\x2e\x34\x39\x36\x35\x20\x32\x2e\x31\x32\x38\x34\x36\ +\x2c\x2d\x30\x2e\x31\x39\x31\x34\x20\x31\x2e\x34\x31\x33\x33\x35\ +\x2c\x2d\x30\x2e\x35\x36\x38\x34\x20\x31\x2e\x32\x31\x36\x30\x31\ +\x2c\x2d\x30\x2e\x39\x31\x33\x35\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x32\x32\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\ +\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\ +\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x35\x33\x37\x35\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\x34\x38\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\ +\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\ +\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\ +\x2d\x38\x2e\x34\x38\x35\x32\x38\x2c\x31\x34\x2e\x36\x39\x36\x39\ +\x20\x31\x2e\x39\x37\x37\x37\x37\x2c\x30\x2e\x36\x39\x37\x38\x20\ +\x32\x2e\x32\x36\x37\x34\x37\x2c\x30\x2e\x30\x31\x30\x32\x20\x32\ +\x2e\x30\x38\x34\x37\x33\x2c\x2d\x30\x2e\x35\x33\x33\x33\x20\x4c\ +\x20\x30\x2c\x31\x33\x2e\x38\x35\x36\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x32\ +\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\ +\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\ +\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\ +\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x35\x33\x37\x37\x29\x3b\x66\x69\x6c\x6c\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\ +\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\ +\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\ +\x6d\x20\x2d\x39\x2e\x36\x36\x30\x35\x38\x2c\x31\x33\x2e\x37\x39\ +\x37\x33\x20\x30\x2e\x34\x39\x37\x2c\x30\x2e\x34\x33\x39\x35\x20\ +\x30\x2e\x33\x33\x31\x34\x35\x2c\x30\x2e\x32\x34\x32\x37\x20\x30\ +\x2e\x33\x34\x36\x38\x35\x2c\x30\x2e\x32\x31\x37\x34\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x32\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ +\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\ +\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\ +\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x37\x39\x29\x3b\x66\ +\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\ +\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\ +\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x64\x3d\x22\x4d\x20\x31\x36\x2e\x37\x37\x39\x31\x2c\x31\x2e\x34\ +\x36\x37\x36\x36\x20\x31\x36\x2e\x39\x31\x31\x32\x2c\x30\x2e\x38\ +\x31\x37\x34\x38\x37\x20\x31\x36\x2e\x39\x35\x35\x37\x2c\x30\x2e\ +\x34\x30\x39\x31\x30\x32\x20\x31\x36\x2e\x39\x37\x30\x36\x2c\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x32\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\ +\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\ +\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x38\x31\ +\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\ +\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\ +\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x64\x3d\x22\x4d\x20\x38\x2e\x34\x38\x35\x32\x38\x2c\ +\x2d\x31\x34\x2e\x36\x39\x36\x39\x20\x37\x2e\x38\x39\x39\x36\x35\ +\x2c\x2d\x31\x34\x2e\x39\x39\x31\x31\x20\x37\x2e\x35\x31\x35\x36\ +\x33\x2c\x2d\x31\x35\x2e\x31\x34\x31\x32\x20\x37\x2e\x31\x31\x38\ +\x35\x32\x2c\x2d\x31\x35\x2e\x32\x36\x34\x39\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x32\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\ +\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\ +\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x38\x33\x29\x3b\x66\x69\x6c\ +\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\ +\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ +\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\ +\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\ +\x22\x4d\x20\x31\x32\x2c\x2d\x36\x2e\x39\x32\x38\x32\x20\x31\x31\ +\x2e\x36\x36\x35\x35\x2c\x2d\x39\x2e\x39\x36\x38\x39\x35\x20\x31\ +\x30\x2e\x38\x31\x37\x31\x2c\x2d\x31\x32\x2e\x32\x34\x33\x32\x20\ +\x39\x2e\x37\x39\x30\x34\x37\x2c\x2d\x31\x33\x2e\x36\x36\x34\x34\ +\x20\x38\x2e\x34\x38\x35\x32\x38\x2c\x2d\x31\x34\x2e\x36\x39\x36\ +\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x32\x37\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\ +\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\ +\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x38\ +\x35\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\ +\x2e\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\ +\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x31\x36\x2e\x39\x37\x30\x36\ +\x2c\x30\x20\x31\x36\x2e\x35\x38\x35\x39\x2c\x2d\x32\x2e\x30\x36\ +\x31\x36\x36\x20\x31\x35\x2e\x34\x36\x31\x2c\x2d\x34\x2e\x30\x33\ +\x30\x34\x35\x20\x31\x33\x2e\x39\x35\x36\x39\x2c\x2d\x35\x2e\x35\ +\x36\x39\x32\x36\x20\x31\x32\x2c\x2d\x36\x2e\x39\x32\x38\x32\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x32\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\ +\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\ +\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x38\x37\x29\ +\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\ +\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\ +\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x64\x3d\x22\x4d\x20\x31\x32\x2c\x2d\x36\x2e\x39\x32\x38\ +\x32\x20\x39\x2e\x35\x30\x38\x30\x36\x2c\x2d\x35\x2e\x34\x38\x39\ +\x34\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x32\x39\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\ +\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\ +\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\ +\x38\x39\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\ +\x30\x2e\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\ +\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x30\x2c\x31\x30\x2e\x39\ +\x37\x39\x20\x30\x2c\x32\x2e\x38\x37\x37\x34\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x33\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\ +\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\ +\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x39\x31\x29\x3b\x66\x69\x6c\ +\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\ +\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ +\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\ +\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\ +\x22\x6d\x20\x2d\x31\x36\x2e\x39\x37\x30\x36\x2c\x30\x20\x30\x2e\ +\x30\x33\x38\x31\x2c\x30\x2e\x36\x35\x34\x32\x36\x33\x20\x30\x2e\ +\x30\x36\x32\x2c\x30\x2e\x34\x30\x37\x36\x31\x37\x20\x30\x2e\x30\ +\x39\x31\x34\x2c\x30\x2e\x34\x30\x35\x37\x38\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x33\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\ +\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\ +\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x39\x33\x29\x3b\x66\x69\x6c\ +\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\ +\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ +\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\ +\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\ +\x22\x6d\x20\x2d\x31\x32\x2c\x2d\x36\x2e\x39\x32\x38\x32\x20\x2d\ +\x32\x2e\x34\x36\x36\x31\x2c\x31\x2e\x38\x31\x30\x30\x35\x20\x2d\ +\x31\x2e\x35\x34\x35\x33\x2c\x31\x2e\x38\x37\x31\x38\x32\x20\x2d\ +\x30\x2e\x37\x31\x37\x35\x2c\x31\x2e\x35\x39\x39\x37\x32\x20\x4c\ +\x20\x2d\x31\x36\x2e\x39\x37\x30\x36\x2c\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x33\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\ +\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\ +\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x39\x35\x29\x3b\x66\x69\x6c\ +\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\ +\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ +\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\ +\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\ +\x22\x6d\x20\x2d\x38\x2e\x34\x38\x35\x32\x38\x2c\x2d\x31\x34\x2e\ +\x36\x39\x36\x39\x20\x2d\x31\x2e\x35\x39\x33\x31\x32\x2c\x31\x2e\ +\x33\x36\x33\x39\x20\x2d\x31\x2e\x31\x34\x32\x36\x2c\x31\x2e\x39\ +\x35\x38\x36\x20\x2d\x30\x2e\x35\x38\x30\x36\x2c\x32\x2e\x30\x37\ +\x32\x30\x32\x20\x4c\x20\x2d\x31\x32\x2c\x2d\x36\x2e\x39\x32\x38\ +\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x33\x33\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\ +\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\ +\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x35\x33\x39\ +\x37\x29\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\ +\x2e\x35\x36\x34\x34\x34\x34\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\ +\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x2d\x37\x2e\x31\x31\x38\x35\ +\x32\x2c\x2d\x31\x35\x2e\x32\x36\x34\x39\x20\x2d\x30\x2e\x36\x32\ +\x39\x31\x33\x2c\x30\x2e\x32\x31\x30\x36\x20\x2d\x30\x2e\x33\x37\ +\x35\x38\x39\x2c\x30\x2e\x31\x36\x35\x37\x20\x2d\x30\x2e\x33\x36\ +\x31\x37\x34\x2c\x30\x2e\x31\x39\x31\x37\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x33\ +\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\ +\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\ +\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\ +\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x35\x33\x39\x39\x29\x3b\x66\x69\x6c\x6c\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x77\x69\x64\x74\x68\x3a\x30\x2e\x35\x36\x34\x34\x34\x34\ +\x34\x38\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\ +\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\ +\x6d\x20\x2d\x31\x32\x2c\x2d\x36\x2e\x39\x32\x38\x32\x20\x32\x2e\ +\x34\x39\x31\x39\x34\x2c\x31\x2e\x34\x33\x38\x37\x32\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x33\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ +\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\ +\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x67\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x73\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x34\ +\x33\x39\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\ +\x78\x28\x2d\x32\x35\x2e\x39\x30\x33\x39\x36\x31\x2c\x30\x2c\x30\ +\x2c\x2d\x32\x35\x2e\x39\x30\x33\x39\x36\x31\x2c\x2d\x32\x34\x33\ +\x33\x2e\x39\x33\x36\x37\x2c\x2d\x35\x31\x31\x2e\x39\x35\x37\x34\ +\x33\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\ +\x73\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x34\ +\x34\x30\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\ +\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\ +\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\ +\x74\x68\x34\x34\x30\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x2d\x32\x37\x2e\ +\x39\x32\x30\x33\x2c\x32\x2e\x32\x36\x33\x33\x39\x20\x31\x35\x2e\ +\x39\x32\x30\x33\x2c\x2d\x32\x33\x2e\x30\x34\x38\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\ +\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x72\x6f\x6b\x65\x3a\ +\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ +\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\ +\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x34\x34\x30\ +\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x64\x3d\x22\x4d\x20\x2d\x31\x35\x2e\x39\x32\x30\x33\x2c\ +\x32\x33\x2e\x30\x34\x38\x20\x32\x37\x2e\x39\x32\x30\x33\x2c\x2d\ +\x32\x2e\x32\x36\x33\x33\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\ +\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x67\x34\x34\x30\x36\x22\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x73\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\ +\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x64\x3d\x22\x4d\x20\x33\x30\x2e\x34\x30\x35\x36\x2c\x2d\x37\x2e\ +\x37\x35\x36\x37\x32\x20\x41\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\ +\x32\x20\x36\x30\x20\x30\x20\x30\x20\x31\x35\x2e\x39\x32\x30\x33\ +\x2c\x2d\x32\x33\x2e\x30\x34\x38\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\ +\x68\x34\x34\x30\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x73\x74\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\ +\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\ +\x22\x6d\x20\x31\x35\x2e\x39\x32\x30\x33\x2c\x2d\x32\x33\x2e\x30\ +\x34\x38\x20\x61\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x30\x31\ +\x36\x20\x36\x30\x20\x30\x20\x30\x20\x31\x32\x2c\x32\x30\x2e\x37\ +\x38\x34\x36\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x34\x34\x31\ +\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\ +\x72\x6f\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\ +\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x32\ +\x37\x2e\x39\x32\x30\x33\x2c\x2d\x32\x2e\x32\x36\x33\x33\x39\x20\ +\x61\x20\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x20\x36\x30\x20\x30\ +\x20\x30\x20\x32\x2e\x34\x38\x35\x33\x2c\x2d\x35\x2e\x34\x39\x33\ +\x33\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x34\x34\x31\x32\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x72\x6f\ +\x6b\x65\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\ +\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x2d\x32\x37\ +\x2e\x39\x32\x30\x33\x2c\x32\x2e\x32\x36\x33\x33\x39\x20\x61\x20\ +\x31\x32\x2c\x36\x2e\x39\x32\x38\x32\x30\x31\x36\x20\x36\x30\x20\ +\x30\x20\x30\x20\x31\x32\x2c\x32\x30\x2e\x37\x38\x34\x36\x31\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x70\x61\x74\x68\x34\x34\x31\x34\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x67\x3e\ +\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\x00\x00\x76\xd9\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ +\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\ +\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\ +\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\ +\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\ +\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\ +\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x6e\x73\x2e\x61\x64\x6f\x62\ +\x65\x2e\x63\x6f\x6d\x2f\x41\x64\x6f\x62\x65\x49\x6c\x6c\x75\x73\ +\x74\x72\x61\x74\x6f\x72\x2f\x31\x30\x2e\x30\x2f\x22\x0a\x20\x20\ +\x20\x78\x6d\x6c\x6e\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\ +\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\ +\x65\x6d\x65\x6e\x74\x73\x2f\x31\x2e\x31\x2f\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x63\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\ +\x2f\x63\x72\x65\x61\x74\x69\x76\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\ +\x2e\x6f\x72\x67\x2f\x6e\x73\x23\x22\x0a\x20\x20\x20\x78\x6d\x6c\ +\x6e\x73\x3a\x72\x64\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\ +\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x30\ +\x32\x2f\x32\x32\x2d\x72\x64\x66\x2d\x73\x79\x6e\x74\x61\x78\x2d\ +\x6e\x73\x23\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x76\ +\x67\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\ +\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\ +\x20\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\ +\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\ +\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\ +\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\ +\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\ +\x6b\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x6f\x64\x69\ +\x70\x6f\x64\x69\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x73\x6f\x64\ +\x69\x70\x6f\x64\x69\x2e\x73\x6f\x75\x72\x63\x65\x66\x6f\x72\x67\ +\x65\x2e\x6e\x65\x74\x2f\x44\x54\x44\x2f\x73\x6f\x64\x69\x70\x6f\ +\x64\x69\x2d\x30\x2e\x64\x74\x64\x22\x0a\x20\x20\x20\x78\x6d\x6c\ +\x6e\x73\x3a\x69\x6e\x6b\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\ +\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x2e\x6f\x72\x67\x2f\x6e\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x22\x0a\x20\x20\x20\x77\x69\x64\ +\x74\x68\x3d\x22\x36\x34\x70\x78\x22\x0a\x20\x20\x20\x68\x65\x69\ +\x67\x68\x74\x3d\x22\x36\x34\x70\x78\x22\x0a\x20\x20\x20\x69\x64\ +\x3d\x22\x73\x76\x67\x32\x39\x38\x30\x22\x0a\x20\x20\x20\x73\x6f\ +\x64\x69\x70\x6f\x64\x69\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\ +\x30\x2e\x33\x32\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x34\x38\x2e\ +\x33\x2e\x31\x20\x72\x39\x38\x38\x36\x22\x0a\x20\x20\x20\x73\x6f\ +\x64\x69\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\ +\x54\x72\x65\x65\x5f\x50\x61\x72\x74\x2e\x73\x76\x67\x22\x0a\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6f\x75\x74\x70\x75\ +\x74\x5f\x65\x78\x74\x65\x6e\x73\x69\x6f\x6e\x3d\x22\x6f\x72\x67\ +\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x75\x74\x70\x75\x74\ +\x2e\x73\x76\x67\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x22\x0a\x20\ +\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x3e\ +\x0a\x20\x20\x3c\x64\x65\x66\x73\x0a\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x64\x65\x66\x73\x32\x39\x38\x32\x22\x3e\x0a\x20\x20\x20\ +\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x38\x36\x34\x22\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x38\ +\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\ +\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\ +\x6f\x72\x3a\x23\x37\x31\x62\x32\x66\x38\x3b\x73\x74\x6f\x70\x2d\ +\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x38\x36\x38\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\ +\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ +\x3a\x23\x30\x30\x32\x37\x39\x35\x3b\x73\x74\x6f\x70\x2d\x6f\x70\ +\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\ +\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\ +\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x38\x36\x34\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\ +\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x38\x35\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\ +\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\ +\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\ +\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\ +\x61\x74\x72\x69\x78\x28\x30\x2e\x36\x30\x32\x38\x34\x35\x39\x2c\ +\x31\x2e\x30\x34\x37\x31\x36\x33\x39\x2c\x2d\x31\x2e\x39\x37\x39\ +\x34\x30\x32\x31\x2c\x31\x2e\x31\x33\x39\x35\x32\x39\x35\x2c\x31\ +\x32\x37\x2e\x39\x35\x38\x38\x2c\x2d\x37\x34\x2e\x34\x35\x36\x39\ +\x30\x37\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\ +\x35\x31\x2e\x33\x32\x38\x38\x39\x32\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x63\x79\x3d\x22\x33\x31\x2e\x30\x37\x34\x31\x34\x36\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x35\x31\x2e\x33\ +\x32\x38\x38\x39\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x79\ +\x3d\x22\x33\x31\x2e\x30\x37\x34\x31\x34\x36\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x72\x3d\x22\x31\x39\x2e\x35\x37\x31\x34\x32\x38\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x74\ +\x79\x70\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\ +\x72\x73\x70\x33\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\x22\x30\x20\x3a\ +\x20\x33\x32\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x79\x3d\x22\x30\ +\x20\x3a\x20\x31\x30\x30\x30\x20\x3a\x20\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\ +\x7a\x3d\x22\x36\x34\x20\x3a\x20\x33\x32\x20\x3a\x20\x31\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x70\x65\x72\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\x69\x6e\x3d\x22\ +\x33\x32\x20\x3a\x20\x32\x31\x2e\x33\x33\x33\x33\x33\x33\x20\x3a\ +\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\ +\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x32\x39\x38\x38\x22\x20\ +\x2f\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\x20\x20\x3c\ +\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\x69\ +\x65\x77\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x62\x61\x73\x65\ +\x22\x0a\x20\x20\x20\x20\x20\x70\x61\x67\x65\x63\x6f\x6c\x6f\x72\ +\x3d\x22\x23\x66\x66\x66\x66\x66\x66\x22\x0a\x20\x20\x20\x20\x20\ +\x62\x6f\x72\x64\x65\x72\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x36\x36\ +\x36\x36\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\x65\ +\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x31\x2e\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\ +\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x2e\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\x67\ +\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\x22\ +\x31\x2e\x36\x31\x36\x30\x39\x36\x37\x22\x0a\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x78\x3d\x22\x31\x36\x2e\ +\x35\x37\x39\x33\x35\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x63\x79\x3d\x22\x2d\x34\x36\x2e\x37\x34\x38\ +\x38\x34\x33\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x63\x75\x72\x72\x65\x6e\x74\x2d\x6c\x61\x79\x65\x72\ +\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\x20\x20\x20\x73\ +\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x74\x72\x75\x65\x22\x0a\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x64\x6f\x63\ +\x75\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\x3d\x22\x70\x78\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\ +\x72\x69\x64\x2d\x62\x62\x6f\x78\x3d\x22\x74\x72\x75\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\ +\x6e\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\x22\x39\x31\x31\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\ +\x69\x6e\x64\x6f\x77\x2d\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x38\ +\x34\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\x22\x31\x37\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\ +\x6e\x64\x6f\x77\x2d\x79\x3d\x22\x31\x39\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\ +\x2d\x6d\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\x22\x30\x22\x20\x2f\ +\x3e\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\x74\x61\x0a\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\x64\x61\x74\x61\x32\ +\x39\x38\x35\x22\x3e\x0a\x20\x20\x20\x20\x3c\x72\x64\x66\x3a\x52\ +\x44\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x63\x63\x3a\x57\x6f\ +\x72\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\ +\x61\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x69\x6d\x61\ +\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\x2f\x64\x63\x3a\x66\ +\x6f\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x64\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\x75\x72\x63\x65\x3d\ +\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\x72\x67\ +\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\x65\x2f\x53\x74\x69\ +\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x3c\x2f\ +\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\x20\x20\x20\x20\x3c\ +\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x3c\x2f\x6d\x65\ +\x74\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\x67\x0a\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x6c\x61\x62\x65\ +\x6c\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\x72\x6f\x75\x70\x6d\ +\x6f\x64\x65\x3d\x22\x6c\x61\x79\x65\x72\x22\x3e\x0a\x20\x20\x20\ +\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\ +\x33\x38\x34\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x74\x72\x61\ +\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\ +\x2e\x34\x39\x36\x31\x31\x36\x39\x32\x2c\x30\x2c\x30\x2c\x30\x2e\ +\x34\x39\x36\x31\x31\x36\x39\x32\x2c\x2d\x36\x2e\x32\x33\x33\x36\ +\x35\x33\x36\x2c\x2d\x34\x30\x2e\x37\x31\x32\x31\x31\x32\x29\x22\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\ +\x6c\x6c\x3a\x23\x30\x30\x33\x34\x66\x66\x3b\x66\x69\x6c\x6c\x2d\ +\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\ +\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\ +\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x77\x69\x64\x74\x68\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x62\x65\ +\x76\x65\x6c\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ +\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\x65\x74\ +\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\ +\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\x62\x6c\ +\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\x6e\x65\ +\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\ +\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\ +\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x39\x36\ +\x2e\x31\x38\x34\x34\x34\x2c\x31\x34\x31\x2e\x34\x34\x39\x36\x38\ +\x20\x2d\x31\x39\x2e\x38\x31\x34\x34\x31\x2c\x37\x2e\x31\x37\x39\ +\x32\x31\x20\x32\x39\x2e\x34\x33\x34\x39\x2c\x33\x2e\x39\x37\x32\ +\x30\x39\x20\x2d\x30\x2e\x37\x32\x33\x35\x37\x2c\x33\x36\x2e\x31\ +\x32\x36\x36\x35\x20\x31\x37\x2e\x32\x35\x38\x38\x31\x2c\x2d\x31\ +\x30\x2e\x39\x34\x33\x38\x38\x20\x30\x2e\x35\x37\x35\x38\x37\x2c\ +\x2d\x33\x34\x2e\x33\x38\x34\x38\x35\x20\x2d\x32\x36\x2e\x37\x33\ +\x31\x36\x2c\x2d\x31\x2e\x39\x34\x39\x32\x32\x20\x7a\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\ +\x33\x38\x32\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\ +\x73\x3d\x22\x63\x63\x63\x63\x63\x63\x63\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ +\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\ +\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\ +\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x30\x30\x33\x34\x66\ +\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ +\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\ +\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\ +\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x34\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\ +\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\ +\x6a\x6f\x69\x6e\x3a\x62\x65\x76\x65\x6c\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\ +\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\ +\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\ +\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\ +\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\ +\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\ +\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\ +\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\ +\x75\x6c\x61\x74\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x64\x3d\x22\x6d\x20\x37\x35\x2e\x35\x37\x39\x34\x31\x2c\x31\x34\ +\x38\x2e\x36\x35\x38\x39\x20\x33\x30\x2e\x37\x30\x38\x38\x34\x2c\ +\x33\x2e\x33\x36\x35\x36\x32\x20\x30\x2c\x33\x36\x2e\x34\x37\x37\ +\x31\x39\x20\x2d\x33\x31\x2e\x31\x32\x33\x38\x33\x2c\x2d\x35\x2e\ +\x30\x36\x34\x37\x39\x20\x30\x2e\x34\x31\x34\x39\x39\x2c\x2d\x33\ +\x34\x2e\x37\x37\x38\x30\x32\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x32\x35\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\ +\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\ +\x63\x63\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\ +\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x75\x72\x6c\x28\x23\x72\x61\x64\x69\x61\x6c\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x33\x38\x35\x30\x29\x3b\x66\x69\x6c\ +\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\ +\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x34\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\ +\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\ +\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\x66\x73\ +\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\x6e\x65\ +\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\x73\x69\ +\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\x6c\x69\ +\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\ +\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\ +\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\x74\x65\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\ +\x31\x30\x36\x2e\x30\x35\x34\x33\x35\x2c\x31\x35\x32\x2e\x30\x36\ +\x39\x34\x38\x20\x31\x36\x2e\x37\x32\x35\x39\x38\x2c\x2d\x38\x2e\ +\x34\x30\x38\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x32\x37\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\ +\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\ +\x67\x3e\x0a\x20\x20\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x72\x6f\x6b\x65\x3a\x23\ +\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ +\x64\x74\x68\x3a\x31\x2e\x39\x37\x37\x38\x39\x33\x34\x37\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\ +\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\ +\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\ +\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x67\x33\x39\x38\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\ +\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x33\x34\x35\x33\x30\x30\x37\ +\x32\x2c\x2d\x30\x2e\x30\x34\x35\x39\x35\x35\x35\x2c\x30\x2e\x30\ +\x34\x35\x39\x35\x35\x35\x2c\x30\x2e\x33\x34\x35\x33\x30\x30\x37\ +\x32\x2c\x2d\x34\x33\x2e\x32\x32\x38\x39\x35\x36\x2c\x2d\x37\x2e\ +\x32\x33\x38\x31\x33\x34\x29\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x4c\x61\x79\x65\x72\x5f\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x3a\x72\x67\x62\x54\x72\x69\x6f\x3d\x22\x23\x34\x46\ +\x30\x30\x38\x30\x30\x30\x46\x46\x46\x46\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x3a\x6c\x61\x79\x65\x72\x3d\x22\x79\x65\ +\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x64\x69\ +\x6d\x6d\x65\x64\x50\x65\x72\x63\x65\x6e\x74\x3d\x22\x35\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\x2e\x39\ +\x37\x37\x38\x39\x33\x34\x37\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\ +\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\ +\x6e\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x67\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x67\ +\x33\x38\x39\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\ +\x69\x78\x28\x2d\x30\x2e\x33\x32\x34\x33\x35\x35\x31\x34\x2c\x30\ +\x2e\x31\x33\x37\x35\x34\x34\x36\x37\x2c\x2d\x30\x2e\x31\x33\x37\ +\x35\x34\x34\x36\x37\x2c\x2d\x30\x2e\x33\x32\x34\x33\x35\x35\x31\ +\x34\x2c\x32\x37\x30\x2e\x39\x30\x32\x2c\x31\x33\x39\x2e\x34\x30\ +\x38\x37\x36\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x72\x6f\x6b\x65\x3a\x23\ +\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ +\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\ +\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\ +\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\ +\x68\x33\x38\x39\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ +\x6c\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\ +\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x33\x34\x38\x2e\x34\ +\x32\x36\x2c\x34\x39\x2e\x31\x31\x33\x20\x63\x20\x31\x35\x2e\x35\ +\x31\x36\x2c\x2d\x34\x2e\x31\x34\x20\x33\x30\x2e\x33\x34\x38\x2c\ +\x2d\x38\x2e\x30\x32\x38\x20\x34\x35\x2e\x34\x36\x39\x2c\x2d\x31\ +\x31\x2e\x36\x36\x34\x20\x31\x35\x2e\x30\x38\x34\x2c\x2d\x33\x2e\ +\x38\x35\x32\x20\x33\x34\x2e\x30\x35\x35\x2c\x2d\x38\x2e\x34\x36\ +\x20\x34\x34\x2e\x31\x33\x35\x2c\x2d\x31\x30\x2e\x33\x33\x32\x20\ +\x39\x2e\x39\x33\x38\x2c\x2d\x31\x2e\x38\x37\x32\x20\x31\x30\x2e\ +\x36\x32\x31\x2c\x2d\x31\x2e\x31\x31\x36\x20\x31\x35\x2e\x30\x38\ +\x34\x2c\x2d\x30\x2e\x33\x36\x20\x34\x2e\x33\x32\x2c\x30\x2e\x36\ +\x34\x38\x20\x38\x2e\x32\x34\x34\x2c\x33\x2e\x34\x39\x32\x20\x31\ +\x30\x2e\x38\x30\x31\x2c\x34\x2e\x39\x33\x32\x20\x32\x2e\x33\x34\ +\x2c\x31\x2e\x32\x39\x36\x20\x33\x2e\x35\x32\x37\x2c\x30\x2e\x36\ +\x34\x38\x20\x33\x2e\x35\x36\x34\x2c\x33\x2e\x37\x34\x34\x20\x2d\ +\x30\x2e\x31\x38\x2c\x33\x2e\x30\x39\x36\x20\x2d\x31\x2e\x34\x37\ +\x37\x2c\x31\x31\x2e\x33\x34\x20\x2d\x33\x2e\x38\x38\x39\x2c\x31\ +\x35\x2e\x31\x35\x36\x20\x2d\x32\x2e\x34\x34\x37\x2c\x33\x2e\x37\ +\x30\x38\x20\x2d\x36\x2e\x35\x35\x33\x2c\x35\x2e\x33\x36\x34\x20\ +\x2d\x31\x30\x2e\x33\x36\x37\x2c\x37\x2e\x34\x38\x38\x20\x2d\x33\ +\x2e\x38\x38\x39\x2c\x32\x2e\x30\x38\x38\x20\x2d\x37\x2e\x36\x36\ +\x38\x2c\x33\x2e\x31\x33\x32\x20\x2d\x31\x32\x2e\x36\x30\x32\x2c\ +\x35\x2e\x30\x37\x36\x20\x2d\x35\x2e\x30\x33\x39\x2c\x31\x2e\x38\ +\x37\x32\x20\x2d\x34\x2e\x32\x34\x38\x2c\x30\x2e\x37\x32\x20\x2d\ +\x31\x37\x2e\x32\x30\x37\x2c\x35\x2e\x39\x37\x36\x20\x2d\x31\x33\ +\x2e\x32\x31\x33\x2c\x35\x2e\x31\x34\x38\x20\x2d\x34\x34\x2e\x34\ +\x36\x31\x2c\x31\x38\x2e\x30\x37\x32\x20\x2d\x36\x30\x2e\x32\x36\ +\x34\x2c\x32\x34\x2e\x38\x37\x36\x20\x2d\x31\x35\x2e\x37\x33\x32\ +\x2c\x36\x2e\x36\x36\x20\x2d\x32\x32\x2e\x39\x33\x32\x2c\x39\x2e\ +\x33\x36\x20\x2d\x33\x33\x2e\x35\x35\x33\x2c\x31\x35\x2e\x31\x39\ +\x32\x20\x2d\x31\x30\x2e\x37\x36\x34\x2c\x35\x2e\x37\x39\x35\x20\ +\x2d\x32\x31\x2e\x38\x38\x39\x2c\x31\x35\x2e\x35\x38\x38\x20\x2d\ +\x33\x30\x2e\x33\x31\x33\x2c\x31\x39\x2e\x32\x36\x20\x2d\x38\x2e\ +\x34\x35\x39\x2c\x33\x2e\x34\x39\x32\x20\x2d\x31\x33\x2e\x38\x35\ +\x39\x2c\x31\x2e\x34\x37\x37\x20\x2d\x31\x39\x2e\x39\x34\x33\x2c\ +\x32\x2e\x31\x36\x20\x2d\x36\x2e\x30\x38\x34\x2c\x30\x2e\x36\x31\ +\x31\x20\x2d\x38\x2e\x37\x31\x31\x2c\x2d\x30\x2e\x31\x34\x35\x20\ +\x2d\x31\x36\x2e\x37\x37\x35\x2c\x31\x2e\x37\x36\x34\x20\x2d\x38\ +\x2e\x33\x31\x36\x2c\x31\x2e\x38\x37\x31\x20\x2d\x32\x32\x2e\x32\ +\x34\x38\x2c\x35\x2e\x39\x33\x39\x20\x2d\x33\x32\x2e\x32\x32\x31\ +\x2c\x39\x2e\x34\x33\x32\x20\x2d\x31\x30\x2e\x31\x31\x36\x2c\x33\ +\x2e\x34\x39\x32\x20\x2d\x32\x30\x2e\x39\x38\x38\x2c\x38\x2e\x31\ +\x37\x32\x20\x2d\x32\x37\x2e\x32\x31\x36\x2c\x31\x30\x2e\x39\x38\ +\x20\x2d\x36\x2e\x31\x39\x32\x2c\x32\x2e\x36\x32\x39\x20\x2d\x39\ +\x2e\x34\x33\x32\x2c\x34\x2e\x32\x31\x33\x20\x2d\x39\x2e\x37\x32\ +\x2c\x34\x2e\x38\x39\x36\x20\x2d\x30\x2e\x31\x38\x2c\x33\x2e\x31\ +\x33\x31\x20\x2d\x32\x2e\x30\x31\x36\x2c\x36\x2e\x31\x31\x39\x20\ +\x2d\x35\x2e\x35\x30\x38\x2c\x39\x2e\x31\x30\x37\x20\x2d\x33\x2e\ +\x36\x2c\x32\x2e\x39\x38\x38\x20\x2d\x36\x2e\x35\x31\x36\x2c\x34\ +\x2e\x31\x37\x36\x20\x2d\x31\x35\x2e\x35\x35\x32\x2c\x38\x2e\x37\ +\x31\x33\x20\x2d\x39\x2e\x32\x31\x36\x2c\x34\x2e\x34\x32\x38\x20\ +\x2d\x32\x36\x2e\x39\x36\x34\x2c\x31\x32\x2e\x30\x39\x36\x20\x2d\ +\x33\x38\x2e\x39\x35\x32\x2c\x31\x37\x2e\x38\x35\x35\x20\x2d\x31\ +\x32\x2e\x31\x36\x38\x2c\x35\x2e\x37\x32\x35\x20\x2d\x32\x33\x2e\ +\x35\x34\x34\x2c\x31\x31\x2e\x35\x35\x37\x20\x2d\x33\x32\x2e\x37\ +\x36\x2c\x31\x36\x2e\x31\x32\x37\x20\x2d\x39\x2e\x31\x34\x34\x2c\ +\x34\x2e\x34\x33\x20\x2d\x31\x36\x2e\x32\x33\x36\x2c\x37\x2e\x39\ +\x35\x37\x20\x2d\x32\x31\x2e\x38\x31\x36\x2c\x31\x30\x2e\x35\x38\ +\x34\x20\x2d\x35\x2e\x36\x38\x38\x2c\x32\x2e\x35\x39\x32\x20\x2d\ +\x37\x2e\x35\x39\x36\x2c\x34\x2e\x34\x33\x20\x2d\x31\x31\x2e\x39\ +\x35\x32\x2c\x34\x2e\x39\x36\x39\x20\x2d\x34\x2e\x33\x39\x32\x2c\ +\x30\x2e\x33\x35\x39\x20\x2d\x38\x2e\x31\x2c\x30\x2e\x33\x32\x34\ +\x20\x2d\x31\x34\x2e\x36\x31\x36\x2c\x2d\x32\x2e\x36\x32\x39\x20\ +\x2d\x36\x2e\x37\x33\x32\x2c\x2d\x33\x2e\x31\x33\x31\x20\x2d\x31\ +\x37\x2e\x33\x38\x38\x2c\x2d\x31\x30\x2e\x33\x36\x37\x20\x2d\x32\ +\x35\x2e\x30\x32\x2c\x2d\x31\x35\x2e\x34\x34\x33\x20\x2d\x37\x2e\ +\x37\x30\x34\x2c\x2d\x35\x2e\x31\x31\x31\x20\x2d\x31\x36\x2e\x32\ +\x2c\x2d\x31\x30\x2e\x35\x31\x32\x20\x2d\x32\x30\x2e\x34\x38\x34\ +\x2c\x2d\x31\x34\x2e\x38\x33\x32\x20\x2d\x34\x2e\x32\x34\x38\x2c\ +\x2d\x34\x2e\x33\x32\x20\x2d\x33\x2e\x38\x35\x32\x2c\x2d\x36\x2e\ +\x35\x38\x38\x20\x2d\x34\x2e\x39\x33\x32\x2c\x2d\x31\x31\x2e\x30\ +\x38\x38\x20\x2d\x31\x2e\x32\x32\x34\x2c\x2d\x34\x2e\x36\x38\x20\ +\x2d\x32\x2e\x35\x32\x2c\x2d\x31\x31\x2e\x39\x38\x38\x20\x2d\x31\ +\x2e\x38\x2c\x2d\x31\x36\x2e\x32\x33\x36\x20\x30\x2e\x36\x31\x32\ +\x2c\x2d\x34\x2e\x33\x35\x35\x20\x32\x2e\x35\x35\x36\x2c\x2d\x36\ +\x2e\x39\x38\x34\x20\x35\x2e\x39\x37\x36\x2c\x2d\x39\x2e\x33\x39\ +\x35\x20\x33\x2e\x34\x39\x32\x2c\x2d\x32\x2e\x34\x31\x32\x20\x38\ +\x2e\x30\x36\x34\x2c\x2d\x34\x2e\x31\x34\x31\x20\x31\x34\x2e\x34\ +\x2c\x2d\x35\x2e\x30\x34\x31\x20\x30\x2e\x34\x33\x32\x2c\x2d\x39\ +\x2e\x37\x39\x31\x20\x30\x2e\x31\x38\x2c\x2d\x31\x39\x2e\x34\x37\ +\x37\x20\x2d\x30\x2e\x36\x31\x32\x2c\x2d\x32\x39\x2e\x33\x34\x20\ +\x2d\x30\x2e\x39\x37\x32\x2c\x2d\x39\x2e\x39\x37\x32\x20\x2d\x33\ +\x2e\x32\x34\x2c\x2d\x32\x31\x2e\x36\x33\x36\x20\x2d\x34\x2e\x34\ +\x32\x38\x2c\x2d\x32\x39\x2e\x37\x33\x36\x20\x2d\x31\x2e\x31\x35\ +\x32\x2c\x2d\x38\x2e\x31\x37\x32\x20\x2d\x32\x2e\x30\x35\x32\x2c\ +\x2d\x31\x34\x2e\x31\x38\x34\x20\x2d\x32\x2e\x35\x35\x36\x2c\x2d\ +\x31\x38\x2e\x35\x37\x36\x20\x31\x2e\x38\x2c\x2d\x34\x2e\x31\x30\ +\x34\x20\x34\x2e\x30\x36\x38\x2c\x2d\x36\x2e\x38\x30\x34\x20\x36\ +\x2e\x38\x30\x34\x2c\x2d\x38\x2e\x35\x33\x32\x20\x32\x2e\x36\x36\ +\x34\x2c\x2d\x31\x2e\x37\x36\x34\x20\x36\x2e\x33\x33\x36\x2c\x2d\ +\x31\x2e\x36\x35\x36\x20\x39\x2e\x33\x36\x2c\x2d\x31\x2e\x36\x32\ +\x20\x32\x2e\x39\x31\x36\x2c\x2d\x30\x2e\x30\x37\x32\x20\x35\x2e\ +\x37\x32\x34\x2c\x30\x2e\x34\x36\x38\x20\x38\x2e\x32\x38\x2c\x31\ +\x2e\x34\x37\x36\x20\x31\x2e\x38\x2c\x2d\x34\x2e\x37\x38\x38\x20\ +\x34\x2e\x36\x30\x38\x2c\x2d\x37\x2e\x35\x36\x20\x38\x2e\x35\x36\ +\x38\x2c\x2d\x38\x2e\x33\x31\x36\x20\x33\x2e\x38\x35\x32\x2c\x2d\ +\x30\x2e\x37\x35\x36\x20\x38\x2e\x38\x35\x36\x2c\x30\x2e\x33\x39\ +\x36\x20\x31\x34\x2e\x38\x36\x38\x2c\x33\x2e\x36\x20\x31\x2e\x38\ +\x33\x36\x2c\x2d\x33\x2e\x39\x36\x20\x34\x2e\x35\x2c\x2d\x36\x2e\ +\x30\x38\x34\x20\x37\x2e\x39\x39\x32\x2c\x2d\x36\x2e\x35\x31\x36\ +\x20\x33\x2e\x34\x39\x32\x2c\x2d\x30\x2e\x34\x33\x32\x20\x37\x2e\ +\x37\x30\x34\x2c\x30\x2e\x38\x32\x38\x20\x31\x32\x2e\x37\x38\x2c\ +\x33\x2e\x39\x32\x34\x20\x31\x2e\x35\x34\x38\x2c\x2d\x33\x2e\x30\ +\x32\x34\x20\x33\x2e\x37\x30\x38\x2c\x2d\x34\x2e\x37\x38\x38\x20\ +\x36\x2e\x36\x32\x34\x2c\x2d\x35\x2e\x31\x34\x38\x20\x32\x2e\x38\ +\x38\x2c\x2d\x30\x2e\x33\x39\x36\x20\x36\x2e\x34\x38\x2c\x30\x2e\ +\x34\x36\x38\x20\x31\x30\x2e\x38\x2c\x32\x2e\x37\x33\x36\x20\x31\ +\x2e\x39\x30\x38\x2c\x2d\x32\x2e\x39\x35\x32\x20\x34\x2e\x34\x32\ +\x38\x2c\x2d\x34\x2e\x35\x33\x36\x20\x37\x2e\x35\x36\x2c\x2d\x34\ +\x2e\x38\x39\x36\x20\x33\x2e\x31\x33\x32\x2c\x2d\x30\x2e\x34\x33\ +\x32\x20\x36\x2e\x37\x33\x32\x2c\x30\x2e\x35\x30\x34\x20\x31\x31\ +\x2e\x30\x38\x38\x2c\x32\x2e\x36\x36\x34\x20\x30\x2e\x31\x38\x2c\ +\x2d\x31\x2e\x34\x34\x20\x31\x2e\x32\x32\x34\x2c\x2d\x32\x2e\x34\ +\x31\x32\x20\x33\x2e\x36\x37\x32\x2c\x2d\x32\x2e\x35\x32\x20\x32\ +\x2e\x32\x36\x38\x2c\x2d\x30\x2e\x32\x31\x36\x20\x37\x2e\x31\x32\ +\x38\x2c\x30\x2e\x36\x31\x32\x20\x31\x30\x2e\x32\x39\x36\x2c\x31\ +\x2e\x33\x36\x38\x20\x33\x2e\x30\x39\x36\x2c\x30\x2e\x36\x31\x32\ +\x20\x34\x2e\x36\x34\x34\x2c\x31\x2e\x33\x36\x38\x20\x38\x2e\x33\ +\x38\x38\x2c\x32\x2e\x36\x36\x34\x20\x33\x2e\x36\x2c\x31\x2e\x32\ +\x36\x20\x39\x2e\x32\x35\x32\x2c\x33\x2e\x30\x39\x36\x20\x31\x33\ +\x2e\x35\x2c\x34\x2e\x39\x33\x32\x20\x34\x2e\x32\x34\x38\x2c\x31\ +\x2e\x37\x32\x38\x20\x39\x2e\x32\x38\x38\x2c\x32\x2e\x35\x35\x36\ +\x20\x31\x31\x2e\x36\x32\x38\x2c\x35\x2e\x34\x20\x32\x2e\x31\x39\ +\x36\x2c\x32\x2e\x37\x37\x32\x20\x31\x2e\x37\x36\x34\x2c\x34\x2e\ +\x37\x38\x38\x20\x31\x2e\x37\x36\x34\x2c\x31\x31\x2e\x33\x34\x20\ +\x2d\x30\x2e\x30\x33\x36\x2c\x36\x2e\x35\x38\x38\x20\x2d\x31\x2e\ +\x38\x2c\x32\x30\x2e\x32\x36\x38\x20\x2d\x31\x2e\x38\x33\x36\x2c\ +\x32\x37\x2e\x35\x37\x36\x20\x2d\x30\x2e\x31\x38\x2c\x37\x2e\x32\ +\x33\x36\x20\x30\x2e\x31\x38\x2c\x31\x32\x2e\x32\x30\x34\x20\x30\ +\x2e\x39\x33\x36\x2c\x31\x35\x2e\x34\x34\x34\x20\x31\x33\x2e\x30\ +\x36\x38\x2c\x2d\x34\x2e\x33\x32\x20\x32\x35\x2e\x30\x35\x36\x2c\ +\x2d\x38\x2e\x37\x34\x38\x20\x33\x36\x2e\x35\x30\x34\x2c\x2d\x31\ +\x33\x2e\x38\x32\x34\x20\x31\x31\x2e\x34\x31\x32\x2c\x2d\x35\x2e\ +\x31\x34\x38\x20\x32\x33\x2e\x36\x38\x38\x2c\x2d\x31\x31\x2e\x35\ +\x35\x36\x20\x33\x31\x2e\x35\x33\x36\x2c\x2d\x31\x36\x2e\x33\x30\ +\x38\x20\x37\x2e\x35\x39\x36\x2c\x2d\x34\x2e\x38\x39\x36\x20\x39\ +\x2e\x30\x33\x35\x2c\x2d\x39\x2e\x34\x33\x32\x20\x31\x34\x2e\x34\ +\x37\x33\x2c\x2d\x31\x32\x2e\x33\x34\x38\x20\x35\x2e\x33\x39\x38\ +\x2c\x2d\x32\x2e\x39\x31\x36\x20\x31\x30\x2e\x32\x39\x35\x2c\x2d\ +\x33\x2e\x32\x34\x20\x31\x37\x2e\x37\x34\x38\x2c\x2d\x35\x2e\x31\ +\x34\x38\x20\x37\x2e\x33\x37\x39\x2c\x2d\x32\x2e\x30\x35\x32\x20\ +\x31\x36\x2e\x34\x31\x36\x2c\x2d\x34\x2e\x32\x31\x32\x20\x32\x36\ +\x2e\x32\x37\x39\x2c\x2d\x36\x2e\x37\x36\x38\x20\x39\x2e\x36\x38\ +\x34\x2c\x2d\x32\x2e\x37\x37\x32\x20\x32\x32\x2e\x33\x39\x33\x2c\ +\x2d\x36\x2e\x33\x37\x32\x20\x33\x31\x2e\x38\x35\x39\x2c\x2d\x38\ +\x2e\x38\x35\x36\x20\x39\x2e\x33\x39\x38\x2c\x2d\x32\x2e\x34\x38\ +\x33\x20\x31\x37\x2e\x33\x31\x38\x2c\x2d\x34\x2e\x34\x36\x33\x20\ +\x32\x34\x2e\x31\x35\x38\x2c\x2d\x35\x2e\x39\x33\x39\x20\x7a\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\ +\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\ +\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\ +\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\ +\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\ +\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\ +\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\ +\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\ +\x68\x33\x38\x39\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ +\x6c\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\ +\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x32\x35\x39\x2e\x33\ +\x32\x36\x2c\x37\x34\x2e\x37\x30\x39\x20\x63\x20\x31\x33\x2e\x31\ +\x30\x34\x2c\x2d\x32\x2e\x37\x20\x32\x36\x2e\x38\x35\x35\x2c\x2d\ +\x35\x2e\x39\x34\x20\x34\x32\x2e\x30\x38\x34\x2c\x2d\x31\x30\x2e\ +\x30\x30\x38\x20\x31\x35\x2e\x31\x39\x31\x2c\x2d\x34\x2e\x32\x31\ +\x32\x20\x33\x31\x2e\x36\x38\x2c\x2d\x39\x2e\x36\x38\x34\x20\x34\ +\x38\x2e\x33\x34\x38\x2c\x2d\x31\x34\x2e\x31\x38\x34\x20\x31\x36\ +\x2e\x36\x33\x33\x2c\x2d\x34\x2e\x35\x33\x36\x20\x33\x34\x2e\x39\ +\x32\x2c\x2d\x38\x2e\x37\x31\x32\x20\x35\x30\x2e\x34\x2c\x2d\x31\ +\x32\x2e\x33\x38\x34\x20\x31\x35\x2e\x32\x36\x34\x2c\x2d\x33\x2e\ +\x38\x31\x36\x20\x33\x31\x2e\x34\x36\x33\x2c\x2d\x38\x2e\x34\x39\ +\x36\x20\x34\x30\x2e\x38\x32\x34\x2c\x2d\x39\x2e\x37\x32\x20\x39\ +\x2e\x31\x38\x2c\x2d\x31\x2e\x32\x36\x20\x31\x30\x2e\x37\x36\x34\ +\x2c\x30\x2e\x39\x33\x36\x20\x31\x34\x2e\x34\x37\x31\x2c\x32\x2e\ +\x34\x31\x32\x20\x33\x2e\x36\x33\x37\x2c\x31\x2e\x33\x36\x38\x20\ +\x39\x2e\x37\x32\x31\x2c\x33\x2e\x39\x39\x36\x20\x37\x2e\x34\x31\ +\x36\x2c\x36\x2e\x30\x38\x34\x20\x2d\x32\x2e\x34\x34\x37\x2c\x31\ +\x2e\x39\x34\x34\x20\x2d\x39\x2e\x36\x38\x34\x2c\x33\x2e\x30\x39\ +\x36\x20\x2d\x32\x31\x2e\x38\x35\x32\x2c\x36\x2e\x33\x37\x32\x20\ +\x2d\x31\x32\x2e\x33\x34\x38\x2c\x33\x2e\x32\x34\x20\x2d\x33\x34\ +\x2e\x35\x32\x33\x2c\x38\x2e\x38\x35\x36\x20\x2d\x35\x31\x2e\x31\ +\x31\x39\x2c\x31\x33\x2e\x35\x33\x36\x20\x2d\x31\x36\x2e\x37\x30\ +\x35\x2c\x34\x2e\x36\x38\x20\x2d\x33\x31\x2e\x33\x39\x33\x2c\x39\ +\x2e\x31\x30\x38\x20\x2d\x34\x37\x2e\x39\x35\x33\x2c\x31\x34\x2e\ +\x34\x20\x2d\x31\x36\x2e\x36\x33\x31\x2c\x35\x2e\x32\x32\x20\x2d\ +\x33\x38\x2e\x31\x39\x35\x2c\x31\x31\x2e\x39\x38\x38\x20\x2d\x35\ +\x30\x2e\x39\x33\x39\x2c\x31\x36\x2e\x38\x31\x32\x20\x2d\x31\x32\ +\x2e\x37\x34\x34\x2c\x34\x2e\x37\x35\x32\x20\x2d\x31\x32\x2e\x37\ +\x30\x37\x2c\x36\x2e\x30\x38\x34\x20\x2d\x32\x35\x2e\x31\x36\x34\ +\x2c\x31\x31\x2e\x37\x37\x32\x20\x2d\x31\x32\x2e\x37\x30\x37\x2c\ +\x35\x2e\x35\x38\x20\x2d\x33\x35\x2e\x38\x32\x2c\x31\x35\x2e\x37\ +\x36\x38\x20\x2d\x34\x39\x2e\x37\x35\x32\x2c\x32\x31\x2e\x38\x31\ +\x36\x20\x2d\x31\x33\x2e\x39\x33\x32\x2c\x36\x2e\x30\x34\x37\x20\ +\x2d\x32\x35\x2e\x33\x38\x2c\x31\x32\x2e\x32\x34\x20\x2d\x33\x32\ +\x2e\x38\x33\x32\x2c\x31\x34\x2e\x30\x30\x34\x20\x2d\x37\x2e\x34\ +\x38\x38\x2c\x31\x2e\x34\x37\x37\x20\x2d\x38\x2e\x39\x32\x38\x2c\ +\x2d\x32\x2e\x33\x30\x35\x20\x2d\x31\x31\x2e\x36\x36\x34\x2c\x2d\ +\x34\x2e\x33\x39\x33\x20\x2d\x32\x2e\x39\x31\x36\x2c\x2d\x32\x2e\ +\x31\x32\x33\x20\x2d\x34\x2e\x35\x33\x36\x2c\x2d\x34\x2e\x36\x38\ +\x20\x2d\x35\x2e\x32\x35\x36\x2c\x2d\x37\x2e\x39\x35\x35\x20\x31\ +\x31\x2e\x34\x38\x34\x2c\x2d\x34\x2e\x31\x34\x31\x20\x32\x32\x2e\ +\x35\x37\x32\x2c\x2d\x38\x2e\x36\x30\x35\x20\x33\x33\x2e\x36\x36\ +\x2c\x2d\x31\x33\x2e\x35\x33\x37\x20\x31\x31\x2e\x30\x35\x32\x2c\ +\x2d\x35\x2e\x30\x30\x34\x20\x32\x34\x2e\x33\x2c\x2d\x31\x30\x2e\ +\x39\x34\x34\x20\x33\x32\x2e\x33\x36\x34\x2c\x2d\x31\x35\x2e\x38\ +\x37\x36\x20\x37\x2e\x38\x38\x34\x2c\x2d\x35\x2e\x30\x34\x20\x31\ +\x30\x2e\x36\x32\x31\x2c\x2d\x31\x30\x2e\x34\x30\x34\x20\x31\x35\ +\x2e\x31\x35\x36\x2c\x2d\x31\x33\x2e\x36\x30\x38\x20\x34\x2e\x35\ +\x2c\x2d\x33\x2e\x32\x30\x33\x20\x38\x2e\x33\x38\x38\x2c\x2d\x35\ +\x2e\x30\x30\x33\x20\x31\x31\x2e\x38\x30\x38\x2c\x2d\x35\x2e\x35\ +\x34\x33\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\ +\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\ +\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\ +\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x30\ +\x30\x33\x34\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\ +\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\ +\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\ +\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ +\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\ +\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\ +\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\ +\x74\x68\x33\x38\x39\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\ +\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x64\x3d\x22\x6d\x20\x31\x37\x30\x2e\x31\x35\x34\x2c\ +\x31\x32\x36\x2e\x36\x32\x31\x20\x63\x20\x31\x35\x2e\x31\x35\x36\ +\x2c\x2d\x36\x2e\x35\x35\x33\x20\x32\x37\x2e\x37\x32\x2c\x2d\x31\ +\x32\x2e\x31\x33\x33\x20\x33\x38\x2e\x33\x37\x36\x2c\x2d\x31\x37\ +\x2e\x30\x32\x38\x20\x31\x30\x2e\x35\x34\x38\x2c\x2d\x34\x2e\x38\ +\x32\x34\x20\x31\x38\x2e\x34\x33\x32\x2c\x2d\x38\x2e\x34\x36\x20\ +\x32\x34\x2e\x37\x36\x38\x2c\x2d\x31\x32\x2e\x30\x32\x34\x20\x36\ +\x2e\x31\x35\x35\x2c\x2d\x33\x2e\x38\x31\x36\x20\x38\x2e\x32\x34\ +\x33\x2c\x2d\x39\x2e\x30\x33\x36\x20\x31\x32\x2e\x33\x38\x34\x2c\ +\x2d\x39\x2e\x39\x37\x32\x20\x34\x2e\x31\x34\x31\x2c\x2d\x30\x2e\ +\x39\x20\x39\x2e\x39\x2c\x32\x2e\x39\x31\x36\x20\x31\x32\x2e\x30\ +\x32\x33\x2c\x34\x2e\x36\x34\x34\x20\x31\x2e\x39\x38\x2c\x31\x2e\ +\x36\x32\x20\x32\x2e\x33\x30\x35\x2c\x33\x2e\x37\x30\x38\x20\x30\ +\x2c\x35\x2e\x32\x39\x32\x20\x2d\x32\x2e\x35\x32\x2c\x31\x2e\x33\ +\x33\x32\x20\x2d\x37\x2e\x38\x34\x38\x2c\x31\x2e\x35\x38\x34\x20\ +\x2d\x31\x34\x2e\x33\x32\x38\x2c\x33\x2e\x35\x32\x38\x20\x2d\x36\ +\x2e\x35\x35\x31\x2c\x32\x2e\x30\x35\x32\x20\x2d\x31\x36\x2e\x33\ +\x30\x37\x2c\x35\x2e\x36\x31\x36\x20\x2d\x32\x34\x2e\x32\x36\x33\ +\x2c\x38\x2e\x36\x30\x34\x20\x2d\x37\x2e\x39\x39\x32\x2c\x32\x2e\ +\x37\x37\x32\x20\x2d\x31\x35\x2e\x33\x33\x36\x2c\x35\x2e\x32\x39\ +\x32\x20\x2d\x32\x33\x2e\x32\x39\x32\x2c\x38\x2e\x36\x37\x37\x20\ +\x2d\x38\x2e\x31\x2c\x33\x2e\x34\x32\x20\x2d\x31\x36\x2e\x30\x39\ +\x32\x2c\x37\x2e\x31\x39\x39\x20\x2d\x32\x34\x2e\x35\x31\x36\x2c\ +\x31\x31\x2e\x36\x32\x37\x20\x2d\x30\x2e\x33\x36\x2c\x2d\x31\x2e\ +\x31\x31\x35\x20\x2d\x30\x2e\x37\x35\x36\x2c\x2d\x32\x2e\x32\x33\ +\x33\x20\x2d\x31\x2e\x31\x35\x32\x2c\x2d\x33\x2e\x33\x34\x38\x20\ +\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\ +\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\ +\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x30\x30\x33\x34\ +\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\ +\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\ +\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\ +\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\ +\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\ +\x38\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\ +\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x34\x36\x33\x2e\x31\x35\x38\ +\x2c\x34\x30\x2e\x37\x39\x37\x20\x63\x20\x30\x2e\x38\x32\x38\x2c\ +\x33\x2e\x39\x32\x34\x20\x2d\x30\x2e\x33\x39\x36\x2c\x37\x2e\x32\ +\x33\x36\x20\x2d\x34\x2e\x30\x36\x38\x2c\x31\x30\x2e\x32\x32\x34\ +\x20\x2d\x33\x2e\x37\x34\x34\x2c\x32\x2e\x38\x34\x34\x20\x2d\x31\ +\x30\x2e\x33\x33\x32\x2c\x34\x2e\x33\x35\x36\x20\x2d\x31\x37\x2e\ +\x36\x37\x36\x2c\x37\x2e\x33\x30\x38\x20\x2d\x37\x2e\x34\x38\x38\ +\x2c\x32\x2e\x39\x31\x36\x20\x2d\x31\x36\x2e\x30\x35\x37\x2c\x36\ +\x2e\x30\x34\x38\x20\x2d\x32\x36\x2e\x32\x34\x34\x2c\x31\x30\x2e\ +\x30\x38\x20\x2d\x31\x30\x2e\x33\x33\x32\x2c\x33\x2e\x38\x38\x38\ +\x20\x2d\x32\x34\x2e\x31\x39\x31\x2c\x39\x2e\x30\x37\x32\x20\x2d\ +\x33\x34\x2e\x36\x33\x33\x2c\x31\x33\x2e\x34\x36\x34\x20\x2d\x31\ +\x30\x2e\x34\x33\x39\x2c\x34\x2e\x33\x32\x20\x2d\x31\x37\x2e\x37\ +\x31\x31\x2c\x37\x2e\x35\x32\x34\x20\x2d\x32\x37\x2e\x36\x34\x36\ +\x2c\x31\x32\x2e\x33\x38\x34\x20\x2d\x31\x30\x2e\x31\x35\x32\x2c\ +\x34\x2e\x37\x31\x36\x20\x2d\x32\x34\x2e\x30\x38\x34\x2c\x31\x30\ +\x2e\x38\x33\x36\x20\x2d\x33\x32\x2e\x33\x36\x35\x2c\x31\x35\x2e\ +\x38\x37\x36\x20\x2d\x38\x2e\x32\x37\x39\x2c\x34\x2e\x38\x39\x36\ +\x20\x2d\x31\x31\x2e\x37\x33\x36\x2c\x31\x30\x2e\x39\x30\x38\x20\ +\x2d\x31\x37\x2e\x31\x37\x32\x2c\x31\x33\x2e\x34\x36\x35\x20\x2d\ +\x35\x2e\x36\x35\x32\x2c\x32\x2e\x34\x31\x32\x20\x2d\x39\x2e\x32\ +\x38\x37\x2c\x30\x2e\x38\x36\x33\x20\x2d\x31\x35\x2e\x37\x36\x38\ +\x2c\x31\x2e\x35\x38\x34\x20\x2d\x36\x2e\x35\x35\x33\x2c\x30\x2e\ +\x36\x38\x34\x20\x2d\x31\x32\x2e\x35\x32\x37\x2c\x30\x2e\x32\x35\ +\x32\x20\x2d\x32\x32\x2e\x37\x38\x37\x2c\x32\x2e\x35\x39\x32\x20\ +\x2d\x31\x30\x2e\x35\x31\x34\x2c\x32\x2e\x32\x36\x38\x20\x2d\x32\ +\x38\x2e\x39\x34\x35\x2c\x37\x2e\x35\x32\x33\x20\x2d\x33\x38\x2e\ +\x39\x31\x37\x2c\x31\x30\x2e\x39\x30\x38\x20\x2d\x39\x2e\x39\x37\ +\x32\x2c\x33\x2e\x33\x31\x31\x20\x2d\x31\x33\x2e\x38\x32\x34\x2c\ +\x36\x2e\x31\x31\x39\x20\x2d\x32\x30\x2e\x31\x36\x2c\x38\x2e\x38\ +\x31\x38\x20\x2d\x36\x2e\x33\x33\x36\x2c\x32\x2e\x35\x39\x34\x20\ +\x2d\x31\x32\x2e\x30\x32\x34\x2c\x34\x2e\x38\x39\x36\x20\x2d\x31\ +\x37\x2e\x34\x36\x2c\x36\x2e\x39\x31\x32\x20\x30\x2e\x37\x35\x36\ +\x2c\x34\x2e\x31\x34\x31\x20\x2d\x30\x2e\x32\x31\x36\x2c\x37\x2e\ +\x36\x36\x38\x20\x2d\x33\x2e\x33\x31\x32\x2c\x31\x30\x2e\x37\x32\ +\x39\x20\x2d\x33\x2e\x30\x39\x36\x2c\x32\x2e\x39\x35\x33\x20\x2d\ +\x38\x2e\x31\x2c\x33\x2e\x39\x39\x36\x20\x2d\x31\x35\x2e\x30\x31\ +\x32\x2c\x37\x2e\x33\x30\x39\x20\x2d\x37\x2e\x31\x32\x38\x2c\x33\ +\x2e\x32\x30\x33\x20\x2d\x31\x36\x2e\x34\x31\x36\x2c\x37\x2e\x32\ +\x33\x36\x20\x2d\x32\x37\x2e\x30\x33\x36\x2c\x31\x32\x2e\x32\x34\ +\x20\x2d\x31\x30\x2e\x37\x36\x34\x2c\x34\x2e\x39\x36\x37\x20\x2d\ +\x32\x35\x2e\x39\x32\x2c\x31\x32\x2e\x34\x39\x32\x20\x2d\x33\x36\ +\x2e\x35\x37\x36\x2c\x31\x37\x2e\x35\x36\x38\x20\x2d\x31\x30\x2e\ +\x37\x36\x34\x2c\x35\x2e\x30\x37\x34\x20\x2d\x31\x39\x2e\x36\x39\ +\x32\x2c\x39\x2e\x32\x38\x37\x20\x2d\x32\x37\x2e\x30\x37\x32\x2c\ +\x31\x32\x2e\x33\x34\x38\x20\x2d\x37\x2e\x34\x31\x36\x2c\x32\x2e\ +\x38\x37\x39\x20\x2d\x39\x2e\x37\x35\x36\x2c\x36\x2e\x34\x34\x33\ +\x20\x2d\x31\x36\x2e\x38\x38\x34\x2c\x35\x2e\x31\x34\x36\x20\x2d\ +\x37\x2e\x32\x33\x36\x2c\x2d\x31\x2e\x33\x36\x37\x20\x2d\x31\x37\ +\x2e\x35\x36\x38\x2c\x2d\x38\x2e\x31\x20\x2d\x32\x35\x2e\x39\x39\ +\x32\x2c\x2d\x31\x33\x2e\x31\x30\x34\x20\x2d\x38\x2e\x36\x37\x36\ +\x2c\x2d\x35\x2e\x31\x31\x31\x20\x2d\x31\x39\x2e\x32\x39\x36\x2c\ +\x2d\x31\x30\x2e\x33\x33\x32\x20\x2d\x32\x34\x2e\x36\x32\x34\x2c\ +\x2d\x31\x37\x2e\x30\x32\x37\x20\x2d\x35\x2e\x32\x32\x2c\x2d\x36\ +\x2e\x38\x30\x35\x20\x2d\x38\x2e\x36\x30\x34\x2c\x2d\x32\x30\x2e\ +\x33\x34\x20\x2d\x36\x2e\x36\x36\x2c\x2d\x32\x33\x2e\x31\x31\x31\ +\x20\x31\x2e\x39\x30\x38\x2c\x2d\x32\x2e\x37\x37\x33\x20\x31\x30\ +\x2e\x35\x31\x32\x2c\x32\x2e\x39\x31\x36\x20\x31\x37\x2e\x37\x34\ +\x38\x2c\x36\x2e\x35\x31\x36\x20\x37\x2e\x30\x35\x36\x2c\x33\x2e\ +\x34\x32\x20\x31\x37\x2e\x34\x39\x36\x2c\x31\x31\x2e\x35\x39\x32\ +\x20\x32\x34\x2e\x36\x36\x2c\x31\x34\x2e\x34\x20\x37\x2e\x30\x35\ +\x36\x2c\x32\x2e\x38\x34\x34\x20\x31\x30\x2e\x35\x34\x38\x2c\x33\ +\x2e\x36\x20\x31\x37\x2e\x37\x31\x32\x2c\x32\x2e\x32\x36\x38\x20\ +\x37\x2e\x30\x35\x36\x2c\x2d\x31\x2e\x35\x34\x39\x20\x31\x33\x2e\ +\x37\x38\x38\x2c\x2d\x36\x2e\x33\x33\x36\x20\x32\x34\x2e\x36\x36\ +\x2c\x2d\x31\x31\x2e\x30\x31\x36\x20\x31\x30\x2e\x39\x34\x34\x2c\ +\x2d\x34\x2e\x37\x38\x39\x20\x32\x37\x2e\x31\x30\x38\x2c\x2d\x31\ +\x31\x2e\x34\x31\x32\x20\x34\x30\x2e\x30\x33\x32\x2c\x2d\x31\x37\ +\x2e\x31\x30\x32\x20\x31\x32\x2e\x38\x31\x36\x2c\x2d\x35\x2e\x37\ +\x36\x20\x32\x36\x2e\x37\x34\x38\x2c\x2d\x31\x33\x2e\x34\x32\x38\ +\x20\x33\x36\x2e\x31\x30\x38\x2c\x2d\x31\x36\x2e\x37\x37\x35\x20\ +\x39\x2e\x32\x31\x36\x2c\x2d\x33\x2e\x33\x31\x33\x20\x31\x35\x2e\ +\x33\x33\x36\x2c\x2d\x34\x2e\x32\x34\x38\x20\x31\x38\x2e\x37\x35\ +\x36\x2c\x2d\x32\x2e\x39\x35\x31\x20\x34\x2e\x30\x36\x38\x2c\x2d\ +\x33\x2e\x31\x33\x33\x20\x31\x32\x2e\x33\x38\x34\x2c\x2d\x37\x2e\ +\x35\x36\x31\x20\x32\x35\x2e\x30\x39\x32\x2c\x2d\x31\x33\x2e\x34\ +\x32\x38\x20\x31\x32\x2e\x37\x34\x34\x2c\x2d\x36\x2e\x30\x38\x36\ +\x20\x33\x36\x2e\x37\x39\x32\x2c\x2d\x31\x35\x2e\x34\x30\x38\x20\ +\x35\x30\x2e\x37\x35\x39\x2c\x2d\x32\x31\x2e\x37\x30\x39\x20\x31\ +\x33\x2e\x38\x39\x36\x2c\x2d\x36\x2e\x32\x36\x34\x20\x31\x39\x2e\ +\x34\x37\x37\x2c\x2d\x31\x30\x2e\x37\x32\x38\x20\x33\x32\x2e\x31\ +\x34\x38\x2c\x2d\x31\x35\x2e\x34\x38\x20\x31\x32\x2e\x35\x32\x39\ +\x2c\x2d\x34\x2e\x38\x39\x36\x20\x32\x34\x2e\x36\x32\x35\x2c\x2d\ +\x37\x2e\x36\x33\x32\x20\x34\x32\x2e\x39\x34\x39\x2c\x2d\x31\x33\ +\x2e\x32\x31\x32\x20\x31\x38\x2e\x33\x35\x39\x2c\x2d\x35\x2e\x36\ +\x38\x38\x20\x34\x34\x2e\x38\x31\x38\x2c\x2d\x31\x34\x2e\x30\x30\ +\x34\x20\x36\x36\x2e\x33\x31\x31\x2c\x2d\x32\x30\x2e\x32\x33\x32\ +\x20\x32\x31\x2e\x33\x38\x35\x2c\x2d\x36\x2e\x33\x33\x36\x20\x34\ +\x31\x2e\x34\x33\x38\x2c\x2d\x31\x31\x2e\x37\x37\x32\x20\x36\x31\ +\x2e\x31\x32\x39\x2c\x2d\x31\x36\x2e\x39\x39\x32\x20\x7a\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\ +\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\ +\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x30\x30\x33\x34\x66\x66\x3b\ +\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\ +\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\ +\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\ +\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\ +\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\ +\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x39\x30\x31\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\ +\x6d\x20\x35\x32\x2e\x37\x35\x38\x2c\x32\x31\x32\x2e\x38\x37\x37\ +\x20\x63\x20\x2d\x34\x2e\x31\x30\x34\x2c\x2d\x30\x2e\x39\x37\x33\ +\x20\x2d\x32\x30\x2e\x38\x34\x34\x2c\x2d\x31\x30\x2e\x36\x35\x36\ +\x20\x2d\x32\x37\x2e\x34\x33\x32\x2c\x2d\x31\x35\x2e\x30\x34\x39\ +\x20\x2d\x36\x2e\x36\x32\x34\x2c\x2d\x34\x2e\x33\x39\x31\x20\x2d\ +\x39\x2c\x2d\x36\x2e\x39\x31\x32\x20\x2d\x31\x31\x2e\x37\x2c\x2d\ +\x31\x31\x2e\x33\x30\x33\x20\x2d\x32\x2e\x38\x34\x34\x2c\x2d\x34\ +\x2e\x36\x30\x39\x20\x2d\x36\x2e\x32\x32\x38\x2c\x2d\x31\x33\x2e\ +\x38\x36\x31\x20\x2d\x34\x2e\x34\x36\x34\x2c\x2d\x31\x35\x2e\x34\ +\x30\x38\x20\x31\x2e\x39\x30\x38\x2c\x2d\x31\x2e\x34\x30\x34\x20\ +\x31\x31\x2e\x35\x32\x2c\x32\x2e\x35\x39\x32\x20\x31\x35\x2e\x35\ +\x31\x36\x2c\x36\x2e\x37\x33\x32\x20\x33\x2e\x38\x38\x38\x2c\x34\ +\x2e\x30\x36\x36\x20\x33\x2e\x33\x34\x38\x2c\x31\x32\x2e\x38\x38\ +\x37\x20\x37\x2e\x35\x36\x2c\x31\x37\x2e\x32\x37\x39\x20\x34\x2e\ +\x30\x36\x38\x2c\x34\x2e\x31\x37\x36\x20\x31\x33\x2e\x32\x38\x34\ +\x2c\x35\x2e\x31\x31\x31\x20\x31\x36\x2e\x38\x31\x32\x2c\x38\x2e\ +\x31\x20\x33\x2e\x33\x38\x34\x2c\x33\x2e\x30\x32\x34\x20\x37\x2e\ +\x36\x33\x32\x2c\x31\x30\x2e\x34\x30\x35\x20\x33\x2e\x37\x30\x38\ +\x2c\x39\x2e\x36\x34\x39\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\ +\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\ +\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\ +\x6c\x3a\x23\x30\x30\x33\x34\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\ +\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\ +\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\ +\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x70\x61\x74\x68\x33\x39\x30\x33\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\ +\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x32\x36\x33\x2e\ +\x33\x39\x35\x2c\x31\x32\x34\x2e\x38\x32\x20\x63\x20\x2d\x38\x2e\ +\x31\x33\x37\x2c\x31\x2e\x34\x37\x37\x20\x2d\x31\x37\x2e\x33\x35\ +\x34\x2c\x34\x2e\x31\x30\x35\x20\x2d\x32\x38\x2e\x30\x38\x2c\x37\ +\x2e\x38\x38\x35\x20\x2d\x31\x30\x2e\x37\x36\x35\x2c\x33\x2e\x38\ +\x31\x36\x20\x2d\x32\x37\x2e\x37\x39\x32\x2c\x31\x31\x2e\x31\x39\ +\x35\x20\x2d\x33\x35\x2e\x39\x36\x34\x2c\x31\x34\x2e\x37\x39\x35\ +\x20\x2d\x38\x2e\x32\x38\x2c\x33\x2e\x34\x32\x32\x20\x2d\x31\x32\ +\x2e\x34\x35\x36\x2c\x35\x2e\x33\x36\x35\x20\x2d\x31\x33\x2e\x30\ +\x36\x38\x2c\x35\x2e\x38\x33\x32\x20\x31\x2e\x30\x38\x2c\x32\x2e\ +\x34\x38\x34\x20\x30\x2e\x36\x38\x34\x2c\x34\x2e\x37\x35\x32\x20\ +\x2d\x31\x2e\x31\x38\x38\x2c\x37\x2e\x32\x33\x36\x20\x2d\x31\x2e\ +\x39\x34\x34\x2c\x32\x2e\x33\x34\x20\x2d\x33\x2e\x37\x30\x38\x2c\ +\x33\x2e\x39\x36\x31\x20\x2d\x31\x30\x2e\x31\x35\x32\x2c\x37\x2e\ +\x30\x39\x32\x20\x2d\x36\x2e\x36\x39\x36\x2c\x33\x2e\x31\x36\x38\ +\x20\x2d\x32\x37\x2e\x33\x36\x2c\x31\x32\x2e\x37\x30\x39\x20\x2d\ +\x32\x38\x2e\x38\x2c\x31\x31\x2e\x37\x30\x31\x20\x2d\x31\x2e\x32\ +\x39\x36\x2c\x2d\x31\x2e\x33\x33\x32\x20\x31\x36\x2e\x39\x39\x32\ +\x2c\x2d\x31\x34\x2e\x30\x37\x36\x20\x32\x30\x2e\x38\x34\x34\x2c\ +\x2d\x31\x38\x2e\x36\x34\x38\x20\x33\x2e\x36\x33\x36\x2c\x2d\x34\ +\x2e\x35\x33\x35\x20\x2d\x30\x2e\x37\x35\x36\x2c\x2d\x36\x2e\x34\ +\x38\x20\x31\x2e\x32\x36\x2c\x2d\x38\x2e\x32\x30\x37\x20\x31\x2e\ +\x38\x37\x32\x2c\x2d\x31\x2e\x37\x32\x39\x20\x38\x2e\x37\x31\x32\ +\x2c\x2d\x30\x2e\x39\x20\x31\x30\x2e\x33\x36\x38\x2c\x2d\x32\x2e\ +\x32\x33\x32\x20\x31\x2e\x36\x32\x2c\x2d\x31\x2e\x34\x37\x37\x20\ +\x31\x2e\x34\x34\x2c\x2d\x33\x2e\x33\x38\x35\x20\x2d\x30\x2e\x35\ +\x34\x2c\x2d\x36\x2e\x31\x32\x31\x20\x31\x2e\x30\x38\x2c\x2d\x30\ +\x2e\x31\x34\x33\x20\x32\x2e\x31\x36\x2c\x2d\x30\x2e\x30\x37\x32\ +\x20\x33\x2e\x36\x37\x32\x2c\x30\x2e\x30\x37\x32\x20\x31\x2e\x34\ +\x30\x34\x2c\x30\x2e\x31\x34\x35\x20\x32\x2e\x39\x35\x32\x2c\x30\ +\x2e\x33\x35\x39\x20\x34\x2e\x37\x38\x38\x2c\x30\x2e\x37\x39\x33\ +\x20\x31\x2e\x39\x30\x38\x2c\x2d\x32\x2e\x38\x34\x34\x20\x36\x2e\ +\x30\x34\x38\x2c\x2d\x35\x2e\x39\x30\x34\x20\x31\x32\x2e\x35\x36\ +\x34\x2c\x2d\x39\x2e\x33\x32\x34\x20\x36\x2e\x35\x35\x32\x2c\x2d\ +\x33\x2e\x34\x35\x37\x20\x31\x37\x2e\x36\x34\x2c\x2d\x37\x2e\x35\ +\x32\x35\x20\x32\x36\x2e\x33\x31\x36\x2c\x2d\x31\x31\x2e\x30\x38\ +\x38\x20\x38\x2e\x35\x36\x38\x2c\x2d\x33\x2e\x36\x33\x37\x20\x32\ +\x30\x2e\x39\x31\x36\x2c\x2d\x31\x30\x2e\x34\x37\x37\x20\x32\x34\ +\x2e\x38\x34\x2c\x2d\x31\x30\x2e\x34\x30\x34\x20\x33\x2e\x37\x37\ +\x39\x2c\x30\x2e\x30\x33\x35\x20\x2d\x34\x2e\x33\x32\x2c\x38\x2e\ +\x34\x39\x36\x20\x2d\x32\x2e\x30\x38\x38\x2c\x31\x30\x2e\x34\x30\ +\x34\x20\x32\x2e\x32\x33\x31\x2c\x31\x2e\x37\x32\x36\x20\x37\x2e\ +\x31\x36\x33\x2c\x31\x2e\x37\x39\x38\x20\x31\x35\x2e\x32\x32\x38\ +\x2c\x30\x2e\x32\x31\x34\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\ +\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\ +\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\ +\x6c\x3a\x23\x30\x30\x33\x34\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\ +\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\ +\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\ +\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x70\x61\x74\x68\x33\x39\x30\x35\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\ +\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x34\x36\x31\x2e\ +\x34\x33\x2c\x34\x32\x2e\x37\x37\x37\x20\x63\x20\x32\x2e\x34\x34\ +\x37\x2c\x2d\x30\x2e\x32\x38\x38\x20\x2d\x30\x2e\x35\x37\x36\x2c\ +\x33\x2e\x36\x33\x36\x20\x2d\x32\x2e\x32\x36\x38\x2c\x35\x2e\x35\ +\x30\x38\x20\x2d\x31\x2e\x38\x30\x31\x2c\x31\x2e\x36\x39\x32\x20\ +\x2d\x31\x2e\x36\x35\x36\x2c\x32\x2e\x35\x32\x20\x2d\x37\x2e\x37\ +\x34\x2c\x34\x2e\x38\x36\x20\x2d\x36\x2e\x32\x32\x39\x2c\x32\x2e\ +\x32\x36\x38\x20\x2d\x32\x30\x2e\x35\x35\x37\x2c\x35\x2e\x37\x36\ +\x20\x2d\x32\x38\x2e\x35\x34\x39\x2c\x38\x2e\x36\x37\x36\x20\x2d\ +\x37\x2e\x39\x35\x35\x2c\x32\x2e\x37\x37\x32\x20\x2d\x38\x2e\x38\ +\x39\x31\x2c\x34\x2e\x30\x33\x32\x20\x2d\x31\x38\x2e\x37\x35\x36\ +\x2c\x38\x2e\x32\x34\x34\x20\x2d\x31\x30\x2e\x30\x34\x33\x2c\x34\ +\x2e\x31\x37\x36\x20\x2d\x33\x34\x2e\x30\x32\x2c\x31\x35\x2e\x31\ +\x35\x36\x20\x2d\x34\x30\x2e\x33\x39\x31\x2c\x31\x36\x2e\x38\x34\ +\x38\x20\x2d\x36\x2e\x32\x36\x34\x2c\x31\x2e\x34\x37\x36\x20\x2d\ +\x33\x2e\x35\x36\x34\x2c\x2d\x33\x2e\x37\x34\x34\x20\x32\x2e\x38\ +\x30\x37\x2c\x2d\x37\x2e\x33\x30\x38\x20\x36\x2e\x33\x37\x33\x2c\ +\x2d\x33\x2e\x36\x37\x32\x20\x32\x35\x2e\x34\x35\x33\x2c\x2d\x31\ +\x30\x2e\x32\x32\x34\x20\x33\x34\x2e\x38\x38\x35\x2c\x2d\x31\x33\ +\x2e\x38\x32\x34\x20\x39\x2e\x31\x34\x35\x2c\x2d\x33\x2e\x36\x20\ +\x31\x33\x2e\x35\x33\x35\x2c\x2d\x35\x2e\x31\x34\x38\x20\x32\x30\ +\x2e\x35\x35\x37\x2c\x2d\x37\x2e\x37\x30\x34\x20\x37\x2e\x30\x32\ +\x2c\x2d\x32\x2e\x37\x33\x36\x20\x31\x35\x2e\x31\x35\x36\x2c\x2d\ +\x35\x2e\x34\x20\x32\x31\x2e\x37\x37\x39\x2c\x2d\x37\x2e\x39\x39\ +\x32\x20\x36\x2e\x36\x32\x33\x2c\x2d\x32\x2e\x36\x32\x38\x20\x31\ +\x35\x2e\x30\x31\x32\x2c\x2d\x37\x2e\x30\x35\x36\x20\x31\x37\x2e\ +\x36\x37\x36\x2c\x2d\x37\x2e\x33\x30\x38\x20\x7a\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\ +\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\ +\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x66\x69\x6c\x6c\x3a\x23\x30\x30\x33\x34\x66\x66\x3b\x66\x69\ +\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\ +\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\ +\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\ +\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\ +\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x39\x30\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\ +\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\ +\x34\x34\x32\x2e\x37\x38\x31\x2c\x33\x39\x2e\x34\x36\x35\x20\x63\ +\x20\x36\x2e\x36\x32\x35\x2c\x2d\x31\x2e\x33\x36\x38\x20\x37\x2e\ +\x35\x32\x35\x2c\x2d\x30\x2e\x37\x35\x36\x20\x39\x2e\x31\x30\x39\ +\x2c\x2d\x31\x2e\x39\x30\x38\x20\x31\x2e\x35\x31\x32\x2c\x2d\x31\ +\x2e\x32\x39\x36\x20\x32\x2e\x39\x31\x36\x2c\x2d\x34\x2e\x35\x33\ +\x36\x20\x30\x2e\x30\x33\x35\x2c\x2d\x35\x2e\x32\x39\x32\x20\x2d\ +\x33\x2e\x30\x39\x36\x2c\x2d\x30\x2e\x37\x39\x32\x20\x2d\x36\x2e\ +\x39\x31\x32\x2c\x2d\x31\x2e\x33\x36\x38\x20\x2d\x31\x37\x2e\x39\ +\x36\x35\x2c\x30\x2e\x37\x35\x36\x20\x2d\x31\x31\x2e\x32\x36\x38\ +\x2c\x32\x2e\x30\x38\x38\x20\x2d\x34\x34\x2e\x33\x31\x34\x2c\x39\ +\x2e\x36\x38\x34\x20\x2d\x34\x38\x2e\x33\x31\x31\x2c\x31\x31\x2e\ +\x35\x35\x36\x20\x2d\x33\x2e\x37\x34\x34\x2c\x31\x2e\x36\x32\x20\ +\x32\x30\x2e\x34\x34\x37\x2c\x2d\x31\x2e\x33\x33\x32\x20\x32\x35\ +\x2e\x30\x39\x32\x2c\x2d\x31\x2e\x32\x32\x34\x20\x34\x2e\x34\x32\ +\x38\x2c\x30\x2e\x30\x37\x32\x20\x2d\x33\x2e\x39\x36\x31\x2c\x32\ +\x2e\x35\x32\x20\x31\x2e\x34\x37\x37\x2c\x31\x2e\x39\x34\x34\x20\ +\x35\x2e\x34\x37\x31\x2c\x2d\x30\x2e\x37\x39\x32\x20\x32\x33\x2e\ +\x37\x36\x31\x2c\x2d\x34\x2e\x35\x20\x33\x30\x2e\x35\x36\x33\x2c\ +\x2d\x35\x2e\x38\x33\x32\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\ +\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\ +\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\ +\x6c\x3a\x23\x30\x30\x33\x34\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\ +\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\ +\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\ +\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x70\x61\x74\x68\x33\x39\x30\x39\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\ +\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\ +\x37\x37\x2e\x34\x35\x34\x2c\x38\x33\x2e\x30\x36\x31\x20\x63\x20\ +\x30\x2e\x33\x36\x2c\x31\x2e\x35\x31\x32\x20\x2d\x37\x2e\x37\x37\ +\x36\x2c\x33\x2e\x31\x36\x38\x20\x2d\x31\x30\x2e\x36\x35\x36\x2c\ +\x33\x2e\x33\x31\x32\x20\x2d\x32\x2e\x39\x38\x38\x2c\x30\x2e\x31\ +\x34\x34\x20\x2d\x36\x2e\x32\x32\x38\x2c\x2d\x30\x2e\x37\x35\x36\ +\x20\x2d\x36\x2e\x36\x36\x2c\x2d\x32\x2e\x33\x30\x34\x20\x2d\x30\ +\x2e\x34\x33\x32\x2c\x2d\x31\x2e\x36\x35\x36\x20\x30\x2e\x39\x33\ +\x36\x2c\x2d\x37\x2e\x33\x38\x20\x33\x2e\x39\x36\x2c\x2d\x37\x2e\ +\x34\x35\x32\x20\x32\x2e\x39\x31\x36\x2c\x2d\x30\x2e\x31\x38\x20\ +\x31\x32\x2e\x37\x38\x2c\x34\x2e\x37\x35\x32\x20\x31\x33\x2e\x33\ +\x35\x36\x2c\x36\x2e\x34\x34\x34\x20\x7a\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\ +\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\ +\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\x66\x31\x3b\x66\x69\x6c\x6c\ +\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\ +\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\ +\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\ +\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x39\x31\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x22\x31\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\ +\x22\x6d\x20\x33\x38\x2e\x34\x33\x2c\x36\x37\x2e\x31\x38\x35\x20\ +\x63\x20\x2d\x30\x2e\x31\x30\x38\x2c\x32\x2e\x30\x31\x36\x20\x2d\ +\x36\x2e\x35\x38\x38\x2c\x39\x2e\x30\x37\x32\x20\x2d\x31\x30\x2e\ +\x31\x35\x32\x2c\x39\x2e\x36\x34\x38\x20\x2d\x33\x2e\x35\x36\x34\ +\x2c\x30\x2e\x34\x33\x32\x20\x2d\x31\x30\x2e\x34\x37\x36\x2c\x2d\ +\x34\x2e\x37\x38\x38\x20\x2d\x31\x30\x2e\x35\x38\x34\x2c\x2d\x36\ +\x2e\x37\x36\x38\x20\x2d\x30\x2e\x31\x34\x34\x2c\x2d\x32\x2e\x31\ +\x36\x20\x36\x2e\x34\x38\x2c\x2d\x34\x2e\x35\x37\x32\x20\x31\x30\ +\x2e\x30\x30\x38\x2c\x2d\x35\x2e\x31\x34\x38\x20\x33\x2e\x34\x35\ +\x36\x2c\x2d\x30\x2e\x35\x30\x34\x20\x31\x30\x2e\x35\x34\x38\x2c\ +\x30\x2e\x32\x35\x32\x20\x31\x30\x2e\x37\x32\x38\x2c\x32\x2e\x32\ +\x36\x38\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\ +\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\ +\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\ +\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\ +\x64\x65\x63\x66\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\ +\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\ +\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ +\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\ +\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\ +\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\ +\x61\x74\x68\x33\x39\x31\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\ +\x65\x72\x6c\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\ +\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x35\x37\x2e\ +\x33\x33\x2c\x37\x35\x2e\x34\x32\x39\x20\x63\x20\x30\x2e\x34\x33\ +\x32\x2c\x32\x2e\x33\x30\x34\x20\x2d\x33\x2e\x31\x33\x32\x2c\x39\ +\x2e\x30\x33\x36\x20\x2d\x36\x2e\x33\x37\x32\x2c\x39\x2e\x31\x30\ +\x38\x20\x2d\x33\x2e\x34\x32\x2c\x30\x20\x2d\x31\x32\x2e\x37\x30\ +\x38\x2c\x2d\x36\x2e\x36\x39\x36\x20\x2d\x31\x33\x2e\x32\x38\x34\ +\x2c\x2d\x38\x2e\x39\x36\x34\x20\x2d\x30\x2e\x35\x30\x34\x2c\x2d\ +\x32\x2e\x34\x34\x38\x20\x36\x2e\x35\x38\x38\x2c\x2d\x35\x2e\x31\ +\x38\x34\x20\x31\x30\x2e\x30\x30\x38\x2c\x2d\x35\x2e\x31\x34\x38\ +\x20\x33\x2e\x33\x34\x38\x2c\x2d\x30\x2e\x30\x33\x36\x20\x38\x2e\ +\x39\x36\x34\x2c\x32\x2e\x35\x35\x36\x20\x39\x2e\x36\x34\x38\x2c\ +\x35\x2e\x30\x30\x34\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\ +\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\ +\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\ +\x3a\x23\x65\x64\x65\x63\x66\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\ +\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\ +\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\ +\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x70\x61\x74\x68\x33\x39\x31\x35\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\ +\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\ +\x35\x38\x2e\x31\x32\x32\x2c\x36\x31\x2e\x32\x38\x31\x20\x63\x20\ +\x30\x2e\x39\x37\x32\x2c\x31\x2e\x39\x34\x34\x20\x2d\x30\x2e\x37\ +\x35\x36\x2c\x37\x2e\x32\x20\x2d\x33\x2e\x33\x38\x34\x2c\x37\x2e\ +\x39\x39\x32\x20\x2d\x32\x2e\x37\x33\x36\x2c\x30\x2e\x36\x31\x32\ +\x20\x2d\x31\x31\x2e\x37\x37\x32\x2c\x2d\x32\x2e\x30\x38\x38\x20\ +\x2d\x31\x32\x2e\x36\x37\x32\x2c\x2d\x33\x2e\x39\x32\x34\x20\x2d\ +\x31\x2e\x30\x34\x34\x2c\x2d\x31\x2e\x39\x34\x34\x20\x34\x2e\x31\ +\x30\x34\x2c\x2d\x36\x2e\x37\x36\x38\x20\x36\x2e\x38\x34\x2c\x2d\ +\x37\x2e\x33\x38\x20\x32\x2e\x36\x36\x34\x2c\x2d\x30\x2e\x36\x34\ +\x38\x20\x38\x2e\x31\x33\x36\x2c\x31\x2e\x33\x33\x32\x20\x39\x2e\ +\x32\x31\x36\x2c\x33\x2e\x33\x31\x32\x20\x7a\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\ +\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\ +\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\x66\x31\x3b\x66\x69\x6c\ +\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\ +\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\ +\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\ +\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x39\x31\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x22\ +\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\ +\x3d\x22\x6d\x20\x39\x33\x2e\x36\x35\x34\x2c\x37\x39\x2e\x36\x30\ +\x35\x20\x63\x20\x30\x2e\x38\x32\x38\x2c\x31\x2e\x34\x37\x36\x20\ +\x2d\x32\x2e\x36\x36\x34\x2c\x33\x2e\x32\x34\x20\x2d\x34\x2e\x39\ +\x33\x32\x2c\x33\x2e\x33\x34\x38\x20\x2d\x32\x2e\x34\x34\x38\x2c\ +\x2d\x30\x2e\x30\x33\x36\x20\x2d\x37\x2e\x39\x39\x32\x2c\x2d\x31\ +\x2e\x36\x39\x32\x20\x2d\x38\x2e\x38\x35\x36\x2c\x2d\x33\x2e\x31\ +\x36\x38\x20\x2d\x30\x2e\x38\x36\x34\x2c\x2d\x31\x2e\x35\x31\x32\ +\x20\x31\x2e\x32\x32\x34\x2c\x2d\x35\x2e\x37\x39\x36\x20\x33\x2e\ +\x36\x33\x36\x2c\x2d\x35\x2e\x37\x36\x20\x32\x2e\x33\x34\x2c\x30\ +\x2e\x30\x37\x32\x20\x39\x2e\x31\x30\x38\x2c\x33\x2e\x39\x32\x34\ +\x20\x31\x30\x2e\x31\x35\x32\x2c\x35\x2e\x35\x38\x20\x7a\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\ +\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\ +\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\x66\x31\x3b\ +\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\ +\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\ +\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\ +\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x39\x31\ +\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\ +\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\ +\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x64\x3d\x22\x6d\x20\x31\x31\x30\x2e\x34\x33\x2c\x37\x35\ +\x2e\x36\x38\x31\x20\x63\x20\x30\x2e\x30\x37\x32\x2c\x31\x2e\x35\ +\x34\x38\x20\x2d\x35\x2e\x34\x2c\x34\x2e\x37\x35\x32\x20\x2d\x37\ +\x2e\x38\x31\x32\x2c\x34\x2e\x37\x35\x32\x20\x2d\x32\x2e\x37\x2c\ +\x2d\x30\x2e\x32\x38\x38\x20\x2d\x36\x2e\x38\x30\x34\x2c\x2d\x34\ +\x2e\x31\x37\x36\x20\x2d\x37\x2e\x30\x32\x2c\x2d\x35\x2e\x36\x38\ +\x38\x20\x2d\x30\x2e\x31\x34\x34\x2c\x2d\x31\x2e\x35\x34\x38\x20\ +\x33\x2e\x38\x38\x38\x2c\x2d\x33\x2e\x35\x32\x38\x20\x36\x2e\x34\ +\x30\x38\x2c\x2d\x33\x2e\x33\x31\x32\x20\x32\x2e\x34\x31\x32\x2c\ +\x30\x2e\x31\x34\x34\x20\x38\x2e\x32\x38\x2c\x32\x2e\x36\x36\x34\ +\x20\x38\x2e\x34\x32\x34\x2c\x34\x2e\x32\x34\x38\x20\x7a\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\ +\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\ +\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\x66\x31\x3b\ +\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\ +\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\ +\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\ +\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x39\x32\ +\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\ +\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\ +\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x64\x3d\x22\x6d\x20\x31\x32\x35\x2e\x39\x31\x2c\x37\x33\ +\x2e\x38\x30\x39\x20\x63\x20\x30\x2c\x31\x2e\x31\x31\x36\x20\x2d\ +\x34\x2e\x37\x31\x36\x2c\x33\x2e\x38\x35\x32\x20\x2d\x36\x2e\x39\ +\x34\x38\x2c\x33\x2e\x38\x38\x38\x20\x2d\x32\x2e\x33\x37\x36\x2c\ +\x2d\x30\x2e\x31\x30\x38\x20\x2d\x36\x2e\x36\x36\x2c\x2d\x32\x2e\ +\x36\x32\x38\x20\x2d\x36\x2e\x37\x33\x32\x2c\x2d\x33\x2e\x38\x31\ +\x36\x20\x2d\x30\x2e\x31\x30\x38\x2c\x2d\x31\x2e\x32\x36\x20\x34\ +\x2e\x31\x30\x34\x2c\x2d\x33\x2e\x32\x37\x36\x20\x36\x2e\x34\x30\ +\x38\x2c\x2d\x33\x2e\x32\x37\x36\x20\x32\x2e\x33\x30\x34\x2c\x30\ +\x2e\x30\x37\x32\x20\x37\x2e\x30\x39\x32\x2c\x31\x2e\x38\x33\x36\ +\x20\x37\x2e\x32\x37\x32\x2c\x33\x2e\x32\x30\x34\x20\x7a\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\ +\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\ +\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\x66\x31\x3b\ +\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\ +\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\ +\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\ +\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x39\x32\ +\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\ +\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\ +\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x64\x3d\x22\x6d\x20\x31\x34\x32\x2e\x34\x33\x34\x2c\x37\ +\x30\x2e\x33\x31\x37\x20\x63\x20\x2d\x30\x2e\x30\x33\x36\x2c\x31\ +\x2e\x32\x36\x20\x2d\x34\x2e\x31\x34\x2c\x34\x2e\x38\x32\x34\x20\ +\x2d\x36\x2e\x34\x38\x2c\x35\x2e\x30\x30\x34\x20\x2d\x32\x2e\x34\ +\x34\x38\x2c\x30\x2e\x30\x33\x36\x20\x2d\x37\x2e\x30\x39\x32\x2c\ +\x2d\x33\x2e\x30\x39\x36\x20\x2d\x37\x2e\x32\x37\x32\x2c\x2d\x34\ +\x2e\x33\x39\x32\x20\x2d\x30\x2e\x31\x38\x2c\x2d\x31\x2e\x34\x30\ +\x34\x20\x34\x2e\x31\x30\x34\x2c\x2d\x33\x2e\x32\x30\x34\x20\x36\ +\x2e\x34\x34\x34\x2c\x2d\x33\x2e\x33\x31\x32\x20\x32\x2e\x33\x30\ +\x34\x2c\x2d\x30\x2e\x31\x30\x38\x20\x37\x2e\x30\x35\x36\x2c\x31\ +\x2e\x32\x39\x36\x20\x37\x2e\x33\x30\x38\x2c\x32\x2e\x37\x20\x7a\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\ +\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\ +\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\ +\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\x66\ +\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\ +\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\ +\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\ +\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\ +\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\ +\x39\x32\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\ +\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x31\x36\x32\x2e\x39\x31\x38\ +\x2c\x36\x37\x2e\x36\x38\x39\x20\x63\x20\x30\x2e\x31\x38\x2c\x31\ +\x2e\x34\x37\x36\x20\x2d\x34\x2e\x37\x31\x36\x2c\x33\x2e\x36\x20\ +\x2d\x37\x2e\x34\x35\x32\x2c\x33\x2e\x38\x38\x38\x20\x2d\x32\x2e\ +\x38\x34\x34\x2c\x30\x2e\x31\x30\x38\x20\x2d\x38\x2e\x34\x32\x34\ +\x2c\x2d\x31\x2e\x32\x36\x20\x2d\x38\x2e\x38\x32\x2c\x2d\x32\x2e\ +\x37\x33\x36\x20\x2d\x30\x2e\x33\x36\x2c\x2d\x31\x2e\x35\x38\x34\ +\x20\x34\x2e\x30\x33\x32\x2c\x2d\x36\x2e\x30\x38\x34\x20\x36\x2e\ +\x38\x30\x34\x2c\x2d\x36\x2e\x32\x36\x34\x20\x32\x2e\x38\x30\x38\ +\x2c\x2d\x30\x2e\x31\x34\x34\x20\x38\x2e\x39\x32\x38\x2c\x33\x2e\ +\x34\x35\x36\x20\x39\x2e\x34\x36\x38\x2c\x35\x2e\x31\x31\x32\x20\ +\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\ +\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\ +\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\ +\x66\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\ +\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\ +\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ +\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\ +\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\ +\x33\x39\x32\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\ +\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\ +\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x31\x36\x34\x2e\x35\x33\ +\x38\x2c\x37\x30\x2e\x33\x38\x39\x20\x63\x20\x2d\x33\x2e\x37\x34\ +\x34\x2c\x32\x2e\x33\x30\x34\x20\x2d\x36\x2e\x39\x34\x38\x2c\x33\ +\x2e\x34\x39\x32\x20\x2d\x31\x30\x2e\x30\x30\x38\x2c\x33\x2e\x37\ +\x30\x38\x20\x2d\x33\x2e\x30\x32\x34\x2c\x30\x2e\x31\x34\x34\x20\ +\x2d\x35\x2e\x37\x39\x36\x2c\x2d\x30\x2e\x36\x38\x34\x20\x2d\x38\ +\x2e\x31\x37\x32\x2c\x2d\x32\x2e\x36\x32\x38\x20\x30\x2e\x31\x38\ +\x2c\x39\x2e\x35\x30\x34\x20\x30\x2e\x34\x36\x38\x2c\x31\x39\x2e\ +\x34\x34\x20\x30\x2e\x37\x32\x2c\x33\x30\x2e\x36\x33\x36\x20\x30\ +\x2e\x32\x35\x32\x2c\x31\x31\x2e\x30\x38\x38\x20\x30\x2e\x35\x34\ +\x2c\x32\x32\x2e\x38\x32\x35\x20\x30\x2e\x38\x36\x34\x2c\x33\x35\ +\x2e\x36\x33\x39\x20\x33\x2e\x38\x31\x36\x2c\x31\x2e\x39\x30\x38\ +\x20\x36\x2e\x39\x31\x32\x2c\x32\x2e\x33\x37\x37\x20\x39\x2e\x36\ +\x38\x34\x2c\x31\x2e\x35\x34\x39\x20\x32\x2e\x37\x2c\x2d\x30\x2e\ +\x38\x36\x33\x20\x34\x2e\x37\x38\x38\x2c\x2d\x33\x2e\x31\x36\x38\ +\x20\x36\x2e\x34\x30\x38\x2c\x2d\x36\x2e\x37\x36\x38\x20\x2d\x30\ +\x2e\x38\x32\x38\x2c\x2d\x31\x31\x2e\x37\x33\x36\x20\x2d\x31\x2e\ +\x31\x38\x38\x2c\x2d\x32\x32\x2e\x34\x32\x38\x20\x2d\x31\x2e\x30\ +\x38\x2c\x2d\x33\x32\x2e\x39\x30\x34\x20\x30\x2e\x30\x33\x36\x2c\ +\x2d\x31\x30\x2e\x35\x31\x32\x20\x30\x2e\x36\x31\x32\x2c\x2d\x31\ +\x39\x2e\x39\x38\x20\x31\x2e\x35\x38\x34\x2c\x2d\x32\x39\x2e\x32\ +\x33\x32\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\ +\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\ +\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\ +\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\ +\x64\x65\x63\x66\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\ +\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\ +\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\ +\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\ +\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\ +\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\ +\x61\x74\x68\x33\x39\x32\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\ +\x65\x72\x6c\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\ +\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x31\x34\x34\ +\x2e\x30\x39\x2c\x37\x32\x2e\x38\x30\x31\x20\x63\x20\x2d\x31\x2e\ +\x39\x38\x2c\x32\x2e\x33\x37\x36\x20\x2d\x34\x2e\x32\x34\x38\x2c\ +\x33\x2e\x38\x31\x36\x20\x2d\x36\x2e\x36\x36\x2c\x34\x2e\x33\x32\ +\x20\x2d\x32\x2e\x34\x34\x38\x2c\x30\x2e\x34\x36\x38\x20\x2d\x35\ +\x2e\x31\x38\x34\x2c\x30\x20\x2d\x38\x2e\x30\x36\x34\x2c\x2d\x31\ +\x2e\x34\x30\x34\x20\x2d\x31\x2e\x30\x34\x34\x2c\x39\x2e\x33\x36\ +\x20\x2d\x31\x2e\x36\x32\x2c\x31\x39\x2e\x33\x36\x38\x20\x2d\x31\ +\x2e\x37\x32\x38\x2c\x33\x30\x2e\x34\x35\x36\x20\x2d\x30\x2e\x31\ +\x38\x2c\x31\x31\x2e\x30\x35\x32\x20\x30\x2e\x31\x30\x38\x2c\x32\ +\x32\x2e\x37\x38\x38\x20\x30\x2e\x38\x36\x34\x2c\x33\x35\x2e\x36\ +\x30\x34\x20\x33\x2e\x38\x31\x36\x2c\x31\x2e\x38\x37\x31\x20\x36\ +\x2e\x39\x31\x32\x2c\x32\x2e\x34\x34\x37\x20\x39\x2e\x36\x38\x34\ +\x2c\x31\x2e\x35\x38\x34\x20\x32\x2e\x37\x2c\x2d\x30\x2e\x39\x33\ +\x36\x20\x34\x2e\x37\x38\x38\x2c\x2d\x33\x2e\x30\x36\x31\x20\x36\ +\x2e\x34\x30\x38\x2c\x2d\x36\x2e\x37\x36\x38\x20\x30\x2e\x34\x33\ +\x32\x2c\x2d\x39\x2e\x37\x32\x31\x20\x30\x2e\x36\x31\x32\x2c\x2d\ +\x31\x39\x2e\x36\x35\x36\x20\x30\x2e\x35\x34\x2c\x2d\x33\x30\x2e\ +\x33\x34\x39\x20\x2d\x30\x2e\x31\x34\x34\x2c\x2d\x31\x30\x2e\x37\ +\x39\x39\x20\x2d\x30\x2e\x33\x39\x36\x2c\x2d\x32\x31\x2e\x36\x37\ +\x31\x20\x2d\x31\x2e\x30\x34\x34\x2c\x2d\x33\x33\x2e\x34\x34\x33\ +\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\ +\x6f\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\ +\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\ +\x63\x66\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\ +\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\ +\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\ +\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\ +\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\ +\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\ +\x68\x33\x39\x33\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ +\x6c\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\ +\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x31\x32\x36\x2e\x33\ +\x30\x36\x2c\x37\x37\x2e\x30\x31\x33\x20\x63\x20\x2d\x31\x2e\x34\ +\x34\x2c\x31\x2e\x35\x31\x32\x20\x2d\x33\x2e\x31\x33\x32\x2c\x32\ +\x2e\x34\x34\x38\x20\x2d\x35\x2e\x30\x37\x36\x2c\x32\x2e\x36\x36\ +\x34\x20\x2d\x32\x2e\x30\x31\x36\x2c\x30\x2e\x32\x31\x36\x20\x2d\ +\x34\x2e\x31\x37\x36\x2c\x2d\x30\x2e\x32\x35\x32\x20\x2d\x36\x2e\ +\x36\x32\x34\x2c\x2d\x31\x2e\x34\x30\x34\x20\x2d\x31\x2e\x35\x38\ +\x34\x2c\x31\x31\x2e\x36\x36\x34\x20\x2d\x32\x2e\x37\x37\x32\x2c\ +\x32\x33\x2e\x30\x37\x36\x20\x2d\x33\x2e\x34\x32\x2c\x33\x35\x2e\ +\x30\x36\x34\x20\x2d\x30\x2e\x37\x32\x2c\x31\x31\x2e\x39\x35\x32\ +\x20\x2d\x30\x2e\x39\x37\x32\x2c\x32\x33\x2e\x36\x35\x31\x20\x2d\ +\x30\x2e\x37\x35\x36\x2c\x33\x35\x2e\x39\x32\x39\x20\x33\x2e\x37\ +\x34\x34\x2c\x31\x2e\x39\x37\x39\x20\x36\x2e\x39\x38\x34\x2c\x32\ +\x2e\x33\x37\x35\x20\x39\x2e\x37\x32\x2c\x31\x2e\x35\x38\x34\x20\ +\x32\x2e\x37\x2c\x2d\x30\x2e\x39\x20\x34\x2e\x37\x38\x38\x2c\x2d\ +\x33\x2e\x31\x36\x38\x20\x36\x2e\x34\x30\x38\x2c\x2d\x36\x2e\x38\ +\x30\x35\x20\x2d\x30\x2e\x36\x34\x38\x2c\x2d\x31\x30\x2e\x38\x37\ +\x31\x20\x2d\x31\x2e\x31\x35\x32\x2c\x2d\x32\x31\x2e\x36\x20\x2d\ +\x31\x2e\x31\x31\x36\x2c\x2d\x33\x32\x2e\x38\x36\x38\x20\x2d\x30\ +\x2e\x30\x37\x32\x2c\x2d\x31\x31\x2e\x33\x30\x34\x20\x30\x2e\x32\ +\x31\x36\x2c\x2d\x32\x32\x2e\x34\x36\x34\x20\x30\x2e\x38\x36\x34\ +\x2c\x2d\x33\x34\x2e\x31\x36\x34\x20\x7a\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\ +\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\ +\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\x66\x31\x3b\x66\x69\x6c\x6c\ +\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\ +\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\ +\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\ +\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x39\x33\x33\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x22\x31\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\ +\x22\x6d\x20\x31\x31\x31\x2e\x38\x33\x34\x2c\x37\x39\x2e\x34\x36\ +\x31\x20\x63\x20\x2d\x32\x2e\x32\x36\x38\x2c\x31\x2e\x36\x39\x32\ +\x20\x2d\x34\x2e\x35\x33\x36\x2c\x32\x2e\x35\x35\x36\x20\x2d\x36\ +\x2e\x39\x34\x38\x2c\x32\x2e\x39\x38\x38\x20\x2d\x32\x2e\x34\x34\ +\x38\x2c\x30\x2e\x33\x36\x20\x2d\x34\x2e\x39\x36\x38\x2c\x30\x2e\ +\x30\x33\x36\x20\x2d\x37\x2e\x35\x36\x2c\x2d\x30\x2e\x38\x32\x38\ +\x20\x2d\x31\x2e\x38\x2c\x31\x34\x2e\x30\x37\x36\x20\x2d\x32\x2e\ +\x37\x37\x32\x2c\x32\x37\x2e\x32\x38\x38\x20\x2d\x33\x2e\x30\x36\ +\x2c\x34\x30\x2e\x31\x37\x36\x20\x2d\x30\x2e\x33\x36\x2c\x31\x32\ +\x2e\x38\x38\x39\x20\x30\x2e\x31\x30\x38\x2c\x32\x34\x2e\x38\x30\ +\x35\x20\x31\x2e\x32\x36\x2c\x33\x36\x2e\x34\x33\x32\x20\x32\x2e\ +\x35\x39\x32\x2c\x31\x2e\x30\x38\x20\x34\x2e\x38\x36\x2c\x31\x2e\ +\x30\x30\x38\x20\x37\x2e\x32\x33\x36\x2c\x2d\x30\x2e\x30\x37\x32\ +\x20\x32\x2e\x32\x36\x38\x2c\x2d\x31\x2e\x31\x35\x20\x34\x2e\x33\ +\x35\x36\x2c\x2d\x33\x2e\x34\x35\x35\x20\x36\x2e\x34\x30\x38\x2c\ +\x2d\x36\x2e\x37\x36\x38\x20\x2d\x31\x2e\x31\x38\x38\x2c\x2d\x31\ +\x30\x2e\x30\x30\x38\x20\x2d\x31\x2e\x35\x34\x38\x2c\x2d\x32\x30\ +\x2e\x38\x37\x39\x20\x2d\x31\x2e\x30\x38\x2c\x2d\x33\x32\x2e\x39\ +\x30\x34\x20\x30\x2e\x34\x36\x38\x2c\x2d\x31\x32\x2e\x30\x39\x36\ +\x20\x31\x2e\x36\x32\x2c\x2d\x32\x34\x2e\x39\x31\x32\x20\x33\x2e\ +\x37\x34\x34\x2c\x2d\x33\x39\x2e\x30\x32\x34\x20\x7a\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\ +\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\ +\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\x66\x31\x3b\x66\ +\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\ +\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\ +\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\ +\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\ +\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x39\x33\x35\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\ +\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\ +\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x64\x3d\x22\x6d\x20\x39\x35\x2e\x31\x33\x2c\x38\x31\x2e\x34\ +\x34\x31\x20\x63\x20\x2d\x30\x2e\x36\x34\x38\x2c\x32\x2e\x33\x34\ +\x20\x2d\x32\x2e\x31\x32\x34\x2c\x33\x2e\x35\x32\x38\x20\x2d\x34\ +\x2e\x34\x32\x38\x2c\x33\x2e\x39\x36\x20\x2d\x32\x2e\x33\x37\x36\ +\x2c\x30\x2e\x33\x36\x20\x2d\x35\x2e\x35\x30\x38\x2c\x2d\x30\x2e\ +\x32\x38\x38\x20\x2d\x39\x2e\x35\x34\x2c\x2d\x31\x2e\x38\x20\x2d\ +\x30\x2e\x36\x38\x34\x2c\x31\x31\x2e\x30\x31\x36\x20\x2d\x31\x2e\ +\x31\x38\x38\x2c\x32\x32\x2e\x38\x39\x36\x20\x2d\x31\x2e\x35\x31\ +\x32\x2c\x33\x36\x2e\x32\x31\x35\x20\x2d\x30\x2e\x33\x36\x2c\x31\ +\x33\x2e\x33\x35\x37\x20\x2d\x30\x2e\x35\x34\x2c\x32\x37\x2e\x34\ +\x36\x39\x20\x2d\x30\x2e\x35\x34\x2c\x34\x33\x2e\x31\x36\x34\x20\ +\x32\x2e\x39\x38\x38\x2c\x31\x2e\x39\x30\x38\x20\x35\x2e\x37\x36\ +\x2c\x32\x2e\x34\x34\x39\x20\x38\x2e\x31\x37\x32\x2c\x31\x2e\x37\ +\x36\x34\x20\x32\x2e\x33\x37\x36\x2c\x2d\x30\x2e\x37\x35\x36\x20\ +\x34\x2e\x35\x33\x36\x2c\x2d\x32\x2e\x38\x37\x39\x20\x36\x2e\x33\ +\x33\x36\x2c\x2d\x36\x2e\x32\x32\x37\x20\x2d\x30\x2e\x38\x32\x38\ +\x2c\x2d\x31\x30\x2e\x31\x31\x37\x20\x2d\x31\x2e\x30\x34\x34\x2c\ +\x2d\x32\x31\x2e\x34\x32\x20\x2d\x30\x2e\x37\x39\x32\x2c\x2d\x33\ +\x34\x2e\x33\x30\x39\x20\x30\x2e\x32\x35\x32\x2c\x2d\x31\x33\x2e\ +\x30\x33\x31\x20\x30\x2e\x39\x37\x32\x2c\x2d\x32\x36\x2e\x39\x36\ +\x33\x20\x32\x2e\x33\x30\x34\x2c\x2d\x34\x32\x2e\x37\x36\x37\x20\ +\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\ +\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\ +\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\ +\x66\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\ +\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\ +\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\ +\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\ +\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\ +\x33\x39\x33\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\ +\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\ +\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x37\x38\x2e\x37\x31\x34\ +\x2c\x38\x36\x2e\x31\x39\x33\x20\x63\x20\x2d\x33\x2e\x39\x36\x2c\ +\x31\x2e\x39\x30\x38\x20\x2d\x37\x2e\x34\x38\x38\x2c\x32\x2e\x37\ +\x20\x2d\x31\x31\x2e\x30\x31\x36\x2c\x32\x2e\x35\x32\x20\x2d\x33\ +\x2e\x35\x32\x38\x2c\x2d\x30\x2e\x32\x31\x36\x20\x2d\x36\x2e\x37\ +\x36\x38\x2c\x2d\x31\x2e\x34\x34\x20\x2d\x39\x2e\x38\x36\x34\x2c\ +\x2d\x33\x2e\x36\x37\x32\x20\x30\x2e\x34\x36\x38\x2c\x31\x38\x2e\ +\x37\x39\x32\x20\x30\x2e\x37\x39\x32\x2c\x33\x34\x2e\x38\x34\x38\ +\x20\x31\x2e\x31\x31\x36\x2c\x34\x38\x2e\x39\x39\x36\x20\x30\x2e\ +\x33\x32\x34\x2c\x31\x34\x2e\x31\x31\x31\x20\x30\x2e\x35\x30\x34\ +\x2c\x32\x35\x2e\x34\x38\x38\x20\x30\x2e\x36\x38\x34\x2c\x33\x34\ +\x2e\x39\x35\x35\x20\x34\x2e\x33\x32\x2c\x32\x2e\x37\x37\x33\x20\ +\x37\x2e\x38\x34\x38\x2c\x33\x2e\x37\x34\x34\x20\x31\x30\x2e\x37\ +\x32\x38\x2c\x33\x2e\x32\x30\x35\x20\x32\x2e\x38\x38\x2c\x2d\x30\ +\x2e\x36\x34\x38\x20\x34\x2e\x39\x36\x38\x2c\x2d\x32\x2e\x38\x30\ +\x39\x20\x36\x2e\x34\x30\x38\x2c\x2d\x36\x2e\x37\x36\x38\x20\x2d\ +\x31\x2e\x30\x38\x2c\x2d\x38\x2e\x38\x39\x33\x20\x2d\x31\x2e\x34\ +\x34\x2c\x2d\x31\x39\x2e\x35\x38\x34\x20\x2d\x31\x2e\x30\x38\x2c\ +\x2d\x33\x32\x2e\x39\x30\x34\x20\x30\x2e\x32\x38\x38\x2c\x2d\x31\ +\x33\x2e\x33\x32\x20\x31\x2e\x32\x39\x36\x2c\x2d\x32\x38\x2e\x35\ +\x38\x34\x20\x33\x2e\x30\x32\x34\x2c\x2d\x34\x36\x2e\x33\x33\x32\ +\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\ +\x6f\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\ +\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\ +\x63\x66\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\ +\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\ +\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\ +\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\ +\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\ +\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\ +\x68\x33\x39\x33\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\ +\x6c\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\ +\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x35\x33\x2e\x30\x38\ +\x32\x2c\x38\x37\x2e\x36\x33\x33\x20\x63\x20\x2d\x33\x2e\x38\x35\ +\x32\x2c\x30\x2e\x34\x36\x38\x20\x2d\x37\x2e\x30\x39\x32\x2c\x30\ +\x2e\x32\x35\x32\x20\x2d\x39\x2e\x38\x36\x34\x2c\x2d\x30\x2e\x37\ +\x39\x32\x20\x2d\x32\x2e\x38\x30\x38\x2c\x2d\x31\x2e\x31\x35\x32\ +\x20\x2d\x35\x2e\x30\x30\x34\x2c\x2d\x32\x2e\x38\x34\x34\x20\x2d\ +\x36\x2e\x37\x33\x32\x2c\x2d\x35\x2e\x35\x30\x38\x20\x31\x2e\x34\ +\x30\x34\x2c\x31\x37\x2e\x36\x34\x20\x32\x2e\x34\x38\x34\x2c\x33\ +\x32\x2e\x37\x36\x31\x20\x33\x2e\x30\x39\x36\x2c\x34\x36\x2e\x31\ +\x38\x38\x20\x30\x2e\x36\x31\x32\x2c\x31\x33\x2e\x33\x35\x35\x20\ +\x30\x2e\x39\x2c\x32\x34\x2e\x33\x33\x36\x20\x30\x2e\x37\x32\x2c\ +\x33\x33\x2e\x35\x31\x36\x20\x32\x2e\x34\x31\x32\x2c\x34\x2e\x30\ +\x33\x31\x20\x34\x2e\x38\x36\x2c\x36\x2e\x34\x30\x38\x20\x37\x2e\ +\x34\x38\x38\x2c\x37\x2e\x31\x32\x37\x20\x32\x2e\x36\x32\x38\x2c\ +\x30\x2e\x36\x34\x38\x20\x35\x2e\x31\x38\x34\x2c\x2d\x30\x2e\x32\ +\x31\x35\x20\x38\x2e\x30\x36\x34\x2c\x2d\x32\x2e\x38\x37\x39\x20\ +\x43\x20\x35\x35\x2e\x34\x35\x38\x2c\x31\x35\x32\x2e\x39\x20\x35\ +\x35\x2e\x30\x32\x36\x2c\x31\x34\x30\x2e\x35\x39\x20\x35\x34\x2e\ +\x35\x35\x38\x2c\x31\x32\x37\x2e\x35\x32\x31\x20\x35\x34\x2e\x30\ +\x39\x2c\x31\x31\x34\x2e\x34\x38\x38\x20\x35\x33\x2e\x35\x35\x2c\ +\x31\x30\x31\x2e\x33\x38\x35\x20\x35\x33\x2e\x30\x38\x32\x2c\x38\ +\x37\x2e\x36\x33\x33\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\ +\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\ +\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\ +\x3a\x23\x65\x64\x65\x63\x66\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\ +\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\ +\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\ +\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x70\x61\x74\x68\x33\x39\x34\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\ +\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\ +\x33\x32\x2e\x32\x30\x32\x2c\x37\x39\x2e\x38\x35\x37\x20\x63\x20\ +\x2d\x32\x2e\x38\x34\x34\x2c\x31\x2e\x38\x20\x2d\x35\x2e\x34\x37\ +\x32\x2c\x32\x2e\x33\x30\x34\x20\x2d\x38\x2e\x31\x37\x32\x2c\x31\ +\x2e\x31\x31\x36\x20\x2d\x32\x2e\x37\x33\x36\x2c\x2d\x31\x2e\x31\ +\x38\x38\x20\x2d\x35\x2e\x32\x35\x36\x2c\x2d\x33\x2e\x37\x38\x20\ +\x2d\x37\x2e\x38\x34\x38\x2c\x2d\x37\x2e\x39\x32\x20\x32\x2e\x38\ +\x30\x38\x2c\x31\x38\x2e\x35\x37\x36\x20\x34\x2e\x35\x33\x36\x2c\ +\x33\x34\x2e\x32\x37\x32\x20\x35\x2e\x37\x32\x34\x2c\x34\x38\x2e\ +\x30\x36\x31\x20\x31\x2e\x30\x38\x2c\x31\x33\x2e\x36\x38\x20\x31\ +\x2e\x32\x36\x2c\x32\x34\x2e\x36\x36\x20\x30\x2e\x36\x38\x34\x2c\ +\x33\x33\x2e\x35\x31\x36\x20\x32\x2e\x34\x31\x32\x2c\x33\x2e\x39\ +\x36\x31\x20\x34\x2e\x38\x36\x2c\x36\x2e\x31\x39\x31\x20\x37\x2e\ +\x34\x38\x38\x2c\x37\x2e\x31\x32\x39\x20\x32\x2e\x35\x35\x36\x2c\ +\x30\x2e\x38\x32\x36\x20\x35\x2e\x31\x34\x38\x2c\x30\x2e\x30\x37\ +\x20\x37\x2e\x39\x32\x2c\x2d\x32\x2e\x31\x32\x35\x20\x43\x20\x33\ +\x37\x2e\x36\x30\x32\x2c\x31\x34\x38\x2e\x32\x32\x32\x20\x33\x36\ +\x2e\x38\x31\x2c\x31\x33\x36\x2e\x30\x35\x34\x20\x33\x35\x2e\x39\ +\x31\x2c\x31\x32\x32\x2e\x36\x39\x38\x20\x33\x34\x2e\x39\x37\x34\ +\x2c\x31\x30\x39\x2e\x32\x36\x39\x20\x33\x33\x2e\x36\x34\x32\x2c\ +\x39\x35\x2e\x32\x36\x35\x20\x33\x32\x2e\x32\x30\x32\x2c\x37\x39\ +\x2e\x38\x35\x37\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\ +\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\ +\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\ +\x23\x65\x64\x65\x63\x66\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\ +\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\ +\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\ +\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\ +\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x70\x61\x74\x68\x33\x39\x34\x33\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\ +\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\ +\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x38\ +\x30\x2e\x30\x31\x2c\x35\x39\x2e\x38\x34\x31\x20\x63\x20\x30\x2e\ +\x37\x32\x2c\x31\x2e\x33\x33\x32\x20\x2d\x32\x2e\x31\x32\x34\x2c\ +\x33\x2e\x37\x38\x20\x2d\x34\x2e\x37\x38\x38\x2c\x34\x2e\x35\x37\ +\x32\x20\x2d\x32\x2e\x38\x34\x34\x2c\x30\x2e\x37\x32\x20\x2d\x31\ +\x30\x2e\x34\x34\x2c\x30\x2e\x36\x38\x34\x20\x2d\x31\x31\x2e\x32\ +\x36\x38\x2c\x2d\x30\x2e\x35\x30\x34\x20\x2d\x30\x2e\x36\x34\x38\ +\x2c\x2d\x31\x2e\x34\x30\x34\x20\x33\x2e\x39\x39\x36\x2c\x2d\x36\ +\x2e\x37\x33\x32\x20\x36\x2e\x38\x34\x2c\x2d\x37\x2e\x33\x38\x20\ +\x32\x2e\x37\x33\x36\x2c\x2d\x30\x2e\x36\x38\x34\x20\x38\x2e\x33\ +\x35\x32\x2c\x31\x2e\x39\x30\x38\x20\x39\x2e\x32\x31\x36\x2c\x33\ +\x2e\x33\x31\x32\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\ +\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\ +\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\ +\x23\x65\x64\x65\x63\x66\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\ +\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\ +\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\ +\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\ +\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x70\x61\x74\x68\x33\x39\x34\x35\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\ +\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\ +\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x39\ +\x38\x2e\x30\x38\x32\x2c\x35\x36\x2e\x30\x39\x37\x20\x63\x20\x30\ +\x2e\x36\x31\x32\x2c\x31\x2e\x35\x38\x34\x20\x2d\x32\x2e\x32\x33\ +\x32\x2c\x35\x2e\x34\x37\x32\x20\x2d\x34\x2e\x39\x33\x32\x2c\x36\ +\x2e\x32\x32\x38\x20\x2d\x32\x2e\x38\x30\x38\x2c\x30\x2e\x36\x31\ +\x32\x20\x2d\x31\x30\x2e\x34\x30\x34\x2c\x2d\x30\x2e\x36\x31\x32\ +\x20\x2d\x31\x31\x2e\x31\x32\x34\x2c\x2d\x32\x2e\x31\x36\x20\x2d\ +\x30\x2e\x36\x34\x38\x2c\x2d\x31\x2e\x36\x35\x36\x20\x33\x2e\x39\ +\x39\x36\x2c\x2d\x36\x2e\x36\x39\x36\x20\x36\x2e\x38\x34\x2c\x2d\ +\x37\x2e\x33\x34\x34\x20\x32\x2e\x37\x33\x36\x2c\x2d\x30\x2e\x37\ +\x32\x20\x38\x2e\x33\x35\x32\x2c\x31\x2e\x36\x32\x20\x39\x2e\x32\ +\x31\x36\x2c\x33\x2e\x32\x37\x36\x20\x7a\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\ +\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\ +\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\x66\x31\x3b\x66\x69\x6c\x6c\ +\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\ +\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\ +\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\ +\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x39\x34\x37\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x22\x31\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\ +\x22\x6d\x20\x31\x31\x36\x2e\x32\x39\x38\x2c\x35\x35\x2e\x30\x35\ +\x33\x20\x63\x20\x30\x2e\x33\x39\x36\x2c\x31\x2e\x36\x35\x36\x20\ +\x2d\x34\x2e\x31\x30\x34\x2c\x35\x2e\x34\x37\x32\x20\x2d\x36\x2e\ +\x36\x39\x36\x2c\x36\x2e\x33\x20\x2d\x32\x2e\x38\x30\x38\x2c\x30\ +\x2e\x36\x34\x38\x20\x2d\x38\x2e\x38\x39\x32\x2c\x2d\x30\x2e\x36\ +\x34\x38\x20\x2d\x39\x2e\x33\x36\x2c\x2d\x32\x2e\x32\x33\x32\x20\ +\x2d\x30\x2e\x33\x39\x36\x2c\x2d\x31\x2e\x37\x32\x38\x20\x33\x2e\ +\x39\x36\x2c\x2d\x36\x2e\x37\x33\x32\x20\x36\x2e\x38\x30\x34\x2c\ +\x2d\x37\x2e\x33\x38\x20\x32\x2e\x37\x2c\x2d\x30\x2e\x36\x38\x34\ +\x20\x38\x2e\x37\x34\x38\x2c\x31\x2e\x35\x38\x34\x20\x39\x2e\x32\ +\x35\x32\x2c\x33\x2e\x33\x31\x32\x20\x7a\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\ +\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\ +\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\ +\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\x66\x31\x3b\x66\x69\x6c\x6c\ +\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\ +\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\ +\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x70\ +\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x39\x34\x39\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x22\x31\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\ +\x22\x6d\x20\x31\x33\x35\x2e\x31\x32\x36\x2c\x35\x34\x2e\x33\x36\ +\x39\x20\x63\x20\x30\x2e\x35\x34\x2c\x31\x2e\x32\x32\x34\x20\x2d\ +\x32\x2e\x36\x32\x38\x2c\x34\x2e\x31\x30\x34\x20\x2d\x35\x2e\x34\ +\x37\x32\x2c\x34\x2e\x37\x35\x32\x20\x2d\x32\x2e\x38\x34\x34\x2c\ +\x30\x2e\x33\x36\x20\x2d\x31\x30\x2e\x38\x2c\x2d\x30\x2e\x35\x34\ +\x20\x2d\x31\x31\x2e\x33\x37\x36\x2c\x2d\x31\x2e\x37\x32\x38\x20\ +\x2d\x30\x2e\x35\x34\x2c\x2d\x31\x2e\x33\x33\x32\x20\x34\x2e\x36\ +\x34\x34\x2c\x2d\x34\x2e\x38\x39\x36\x20\x37\x2e\x36\x33\x32\x2c\ +\x2d\x35\x2e\x34\x33\x36\x20\x32\x2e\x37\x37\x32\x2c\x2d\x30\x2e\ +\x35\x37\x36\x20\x38\x2e\x35\x36\x38\x2c\x31\x2e\x31\x35\x32\x20\ +\x39\x2e\x32\x31\x36\x2c\x32\x2e\x34\x31\x32\x20\x7a\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\ +\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\ +\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\x66\x31\x3b\x66\ +\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\ +\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\ +\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\ +\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\ +\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x39\x35\x31\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\ +\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\ +\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x64\x3d\x22\x6d\x20\x37\x37\x2e\x37\x34\x32\x2c\x37\x30\x2e\ +\x33\x35\x33\x20\x63\x20\x31\x2e\x30\x30\x38\x2c\x31\x2e\x37\x32\ +\x38\x20\x2d\x33\x2e\x35\x36\x34\x2c\x35\x2e\x37\x36\x20\x2d\x35\ +\x2e\x39\x34\x2c\x36\x2e\x32\x36\x34\x20\x2d\x32\x2e\x34\x38\x34\ +\x2c\x30\x2e\x32\x38\x38\x20\x2d\x37\x2e\x38\x38\x34\x2c\x2d\x32\ +\x2e\x32\x33\x32\x20\x2d\x38\x2e\x38\x35\x36\x2c\x2d\x33\x2e\x39\ +\x36\x20\x2d\x31\x2e\x30\x34\x34\x2c\x2d\x31\x2e\x38\x33\x36\x20\ +\x30\x2c\x2d\x36\x2e\x31\x35\x36\x20\x32\x2e\x35\x35\x36\x2c\x2d\ +\x36\x2e\x35\x35\x32\x20\x32\x2e\x34\x34\x38\x2c\x2d\x30\x2e\x33\ +\x32\x34\x20\x31\x31\x2e\x31\x36\x2c\x32\x2e\x33\x34\x20\x31\x32\ +\x2e\x32\x34\x2c\x34\x2e\x32\x34\x38\x20\x7a\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\x72\ +\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\ +\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\x66\x31\x3b\x66\x69\x6c\ +\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\ +\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\x34\ +\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\ +\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3c\ +\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x39\x35\x33\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x22\ +\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\x66\x66\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\ +\x3d\x22\x6d\x20\x39\x35\x2e\x38\x35\x2c\x36\x37\x2e\x34\x30\x31\ +\x20\x63\x20\x31\x2e\x30\x30\x38\x2c\x31\x2e\x35\x34\x38\x20\x2d\ +\x32\x2e\x30\x35\x32\x2c\x35\x2e\x32\x35\x36\x20\x2d\x34\x2e\x33\ +\x32\x2c\x35\x2e\x37\x32\x34\x20\x2d\x32\x2e\x33\x30\x34\x2c\x30\ +\x2e\x32\x35\x32\x20\x2d\x37\x2e\x38\x34\x38\x2c\x2d\x32\x2e\x32\ +\x33\x32\x20\x2d\x39\x2c\x2d\x33\x2e\x37\x30\x38\x20\x2d\x31\x2e\ +\x31\x31\x36\x2c\x2d\x31\x2e\x35\x31\x32\x20\x2d\x30\x2e\x32\x38\ +\x38\x2c\x2d\x35\x2e\x30\x34\x20\x32\x2e\x30\x38\x38\x2c\x2d\x35\ +\x2e\x33\x32\x38\x20\x32\x2e\x31\x39\x36\x2c\x2d\x30\x2e\x33\x36\ +\x20\x31\x30\x2e\x30\x30\x38\x2c\x31\x2e\x37\x36\x34\x20\x31\x31\ +\x2e\x32\x33\x32\x2c\x33\x2e\x33\x31\x32\x20\x7a\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\x69\x70\x2d\ +\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\ +\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\x66\x31\x3b\x66\x69\ +\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\ +\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\x2e\x36\x31\ +\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\ +\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\ +\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x39\x35\x35\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\ +\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\x22\x4f\x66\ +\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x64\x3d\x22\x6d\x20\x31\x31\x33\x2e\x31\x33\x2c\x36\x36\x2e\x39\ +\x33\x33\x20\x63\x20\x30\x2e\x39\x37\x32\x2c\x31\x2e\x34\x30\x34\ +\x20\x2d\x33\x2e\x30\x39\x36\x2c\x33\x2e\x34\x39\x32\x20\x2d\x35\ +\x2e\x34\x2c\x33\x2e\x36\x33\x36\x20\x2d\x32\x2e\x34\x34\x38\x2c\ +\x30\x2e\x30\x33\x36\x20\x2d\x37\x2e\x33\x34\x34\x2c\x2d\x31\x2e\ +\x36\x39\x32\x20\x2d\x38\x2e\x34\x36\x2c\x2d\x33\x2e\x30\x39\x36\ +\x20\x2d\x31\x2e\x31\x31\x36\x2c\x2d\x31\x2e\x34\x37\x36\x20\x2d\ +\x30\x2e\x32\x38\x38\x2c\x2d\x35\x2e\x32\x35\x36\x20\x32\x2e\x30\ +\x38\x38\x2c\x2d\x35\x2e\x33\x36\x34\x20\x32\x2e\x32\x33\x32\x2c\ +\x2d\x30\x2e\x31\x38\x20\x31\x30\x2e\x36\x39\x32\x2c\x33\x2e\x34\ +\x32\x20\x31\x31\x2e\x37\x37\x32\x2c\x34\x2e\x38\x32\x34\x20\x7a\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\ +\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\ +\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\ +\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\x65\x63\x66\ +\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\ +\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\ +\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\ +\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\ +\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x33\ +\x39\x35\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\ +\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x31\x32\x38\x2e\x32\x38\x36\ +\x2c\x36\x33\x2e\x37\x32\x39\x20\x63\x20\x30\x2e\x37\x39\x32\x2c\ +\x31\x2e\x34\x37\x36\x20\x2d\x32\x2e\x38\x30\x38\x2c\x34\x2e\x37\ +\x31\x36\x20\x2d\x34\x2e\x38\x32\x34\x2c\x35\x2e\x31\x34\x38\x20\ +\x2d\x32\x2e\x31\x36\x2c\x30\x2e\x32\x35\x32\x20\x2d\x36\x2e\x33\ +\x33\x36\x2c\x2d\x31\x2e\x38\x20\x2d\x37\x2e\x32\x37\x32\x2c\x2d\ +\x33\x2e\x32\x34\x20\x2d\x30\x2e\x39\x33\x36\x2c\x2d\x31\x2e\x35\ +\x34\x38\x20\x30\x2e\x30\x33\x36\x2c\x2d\x35\x2e\x30\x30\x34\x20\ +\x32\x2e\x30\x38\x38\x2c\x2d\x35\x2e\x33\x36\x34\x20\x31\x2e\x39\ +\x38\x2c\x2d\x30\x2e\x33\x32\x34\x20\x39\x2e\x30\x37\x32\x2c\x31\ +\x2e\x39\x34\x34\x20\x31\x30\x2e\x30\x30\x38\x2c\x33\x2e\x34\x35\ +\x36\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\ +\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\ +\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\ +\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\ +\x65\x63\x66\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\ +\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\ +\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ +\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\ +\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\ +\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\ +\x74\x68\x33\x39\x35\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\ +\x72\x6c\x69\x6d\x69\x74\x3d\x22\x31\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\ +\x6f\x75\x74\x3d\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x31\x34\x38\x2e\ +\x33\x33\x38\x2c\x36\x30\x2e\x30\x35\x37\x20\x63\x20\x30\x2e\x38\ +\x36\x34\x2c\x31\x2e\x34\x37\x36\x20\x2d\x32\x2e\x39\x31\x36\x2c\ +\x34\x2e\x37\x31\x36\x20\x2d\x34\x2e\x38\x32\x34\x2c\x35\x2e\x31\ +\x34\x38\x20\x2d\x32\x2e\x31\x36\x2c\x30\x2e\x32\x35\x32\x20\x2d\ +\x36\x2e\x33\x37\x32\x2c\x2d\x31\x2e\x38\x20\x2d\x37\x2e\x32\x33\ +\x36\x2c\x2d\x33\x2e\x32\x34\x20\x2d\x30\x2e\x38\x32\x38\x2c\x2d\ +\x31\x2e\x35\x34\x38\x20\x2d\x30\x2e\x30\x33\x36\x2c\x2d\x35\x2e\ +\x30\x30\x34\x20\x32\x2e\x30\x38\x38\x2c\x2d\x35\x2e\x33\x36\x34\ +\x20\x32\x2e\x30\x31\x36\x2c\x2d\x30\x2e\x33\x32\x34\x20\x39\x2c\ +\x31\x2e\x39\x34\x34\x20\x39\x2e\x39\x37\x32\x2c\x33\x2e\x34\x35\ +\x36\x20\x7a\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x63\x6c\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\ +\x6e\x6f\x64\x64\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\ +\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\ +\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x65\x64\ +\x65\x63\x66\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\ +\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\ +\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ +\x74\x68\x3a\x35\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\ +\x31\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\ +\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\ +\x74\x68\x33\x39\x36\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x3a\x6b\x6e\x6f\x63\x6b\x6f\x75\x74\x3d\ +\x22\x4f\x66\x66\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x64\x3d\x22\x6d\x20\x31\x36\x38\x2e\x32\x38\x32\x2c\ +\x31\x33\x33\x2e\x31\x30\x32\x20\x63\x20\x2d\x31\x2e\x31\x31\x36\ +\x2c\x33\x2e\x34\x35\x35\x20\x2d\x33\x2e\x33\x31\x32\x2c\x35\x2e\ +\x37\x36\x20\x2d\x36\x2e\x38\x37\x36\x2c\x37\x2e\x30\x35\x35\x20\ +\x2d\x33\x2e\x35\x36\x34\x2c\x31\x2e\x32\x32\x35\x20\x2d\x38\x2e\ +\x33\x35\x32\x2c\x31\x2e\x34\x34\x31\x20\x2d\x31\x34\x2e\x33\x36\ +\x34\x2c\x30\x2e\x35\x30\x34\x20\x2d\x32\x2e\x36\x36\x34\x2c\x32\ +\x2e\x31\x39\x37\x20\x2d\x35\x2e\x34\x2c\x33\x2e\x37\x34\x34\x20\ +\x2d\x38\x2e\x32\x30\x38\x2c\x34\x2e\x35\x20\x2d\x32\x2e\x38\x34\ +\x34\x2c\x30\x2e\x37\x35\x36\x20\x2d\x35\x2e\x37\x36\x2c\x30\x2e\ +\x38\x36\x35\x20\x2d\x38\x2e\x37\x34\x38\x2c\x30\x2e\x31\x38\x32\ +\x20\x2d\x30\x2e\x33\x39\x36\x2c\x33\x2e\x30\x35\x39\x20\x2d\x32\ +\x2e\x31\x32\x34\x2c\x35\x2e\x31\x38\x34\x20\x2d\x35\x2e\x31\x38\ +\x34\x2c\x36\x2e\x36\x35\x38\x20\x2d\x33\x2e\x31\x36\x38\x2c\x31\ +\x2e\x34\x34\x31\x20\x2d\x37\x2e\x34\x31\x36\x2c\x31\x2e\x39\x34\ +\x35\x20\x2d\x31\x33\x2e\x31\x37\x36\x2c\x31\x2e\x38\x30\x31\x20\ +\x2d\x31\x2e\x32\x39\x36\x2c\x32\x2e\x39\x31\x36\x20\x2d\x33\x2e\ +\x30\x32\x34\x2c\x35\x2e\x31\x31\x31\x20\x2d\x35\x2e\x37\x32\x34\ +\x2c\x36\x2e\x35\x38\x38\x20\x2d\x32\x2e\x36\x32\x38\x2c\x31\x2e\ +\x33\x36\x39\x20\x2d\x36\x2e\x30\x34\x38\x2c\x32\x2e\x30\x31\x36\ +\x20\x2d\x31\x30\x2e\x31\x31\x36\x2c\x31\x2e\x39\x34\x33\x20\x2d\ +\x31\x2e\x37\x32\x38\x2c\x33\x2e\x36\x30\x32\x20\x2d\x33\x2e\x39\ +\x32\x34\x2c\x35\x2e\x37\x32\x35\x20\x2d\x36\x2e\x35\x38\x38\x2c\ +\x36\x2e\x36\x36\x20\x2d\x32\x2e\x37\x2c\x30\x2e\x39\x20\x2d\x35\ +\x2e\x38\x36\x38\x2c\x30\x2e\x33\x32\x34\x20\x2d\x39\x2e\x35\x30\ +\x34\x2c\x2d\x31\x2e\x34\x33\x39\x20\x2d\x34\x2e\x33\x39\x32\x2c\ +\x35\x2e\x31\x34\x38\x20\x2d\x38\x2e\x35\x33\x32\x2c\x37\x2e\x38\ +\x34\x38\x20\x2d\x31\x32\x2e\x32\x37\x36\x2c\x38\x2e\x33\x38\x39\ +\x20\x2d\x33\x2e\x38\x38\x38\x2c\x30\x2e\x34\x33\x32\x20\x2d\x37\ +\x2e\x32\x33\x36\x2c\x2d\x31\x2e\x32\x39\x37\x20\x2d\x31\x30\x2e\ +\x34\x37\x36\x2c\x2d\x35\x2e\x34\x37\x33\x20\x2d\x34\x2e\x38\x36\ +\x2c\x31\x2e\x32\x39\x37\x20\x2d\x38\x2e\x36\x34\x2c\x31\x2e\x34\ +\x33\x39\x20\x2d\x31\x31\x2e\x38\x38\x2c\x30\x2e\x35\x37\x36\x20\ +\x2d\x33\x2e\x32\x30\x34\x2c\x2d\x30\x2e\x39\x33\x36\x20\x2d\x35\ +\x2e\x36\x31\x36\x2c\x2d\x33\x2e\x30\x32\x33\x20\x2d\x37\x2e\x32\ +\x33\x36\x2c\x2d\x36\x2e\x31\x31\x39\x20\x2d\x35\x2e\x32\x32\x2c\ +\x31\x2e\x34\x30\x32\x20\x2d\x39\x2e\x33\x39\x36\x2c\x31\x2e\x32\ +\x39\x35\x20\x2d\x31\x32\x2e\x36\x37\x32\x2c\x2d\x30\x2e\x34\x36\ +\x39\x20\x2d\x33\x2e\x33\x31\x32\x2c\x2d\x31\x2e\x37\x36\x34\x20\ +\x2d\x35\x2e\x36\x31\x36\x2c\x2d\x35\x2e\x30\x37\x36\x20\x2d\x36\ +\x2e\x39\x31\x32\x2c\x2d\x39\x2e\x39\x33\x36\x20\x2d\x33\x2e\x31\ +\x33\x32\x2c\x2d\x30\x2e\x32\x35\x32\x20\x2d\x35\x2e\x33\x36\x34\ +\x2c\x30\x2e\x30\x37\x32\x20\x2d\x36\x2e\x36\x39\x36\x2c\x31\x2e\ +\x31\x31\x35\x20\x2d\x31\x2e\x34\x34\x2c\x30\x2e\x39\x33\x36\x20\ +\x2d\x33\x2e\x37\x34\x34\x2c\x32\x2e\x37\x37\x31\x20\x2d\x31\x2e\ +\x35\x31\x32\x2c\x34\x2e\x38\x32\x34\x20\x32\x2e\x32\x36\x38\x2c\ +\x31\x2e\x38\x37\x31\x20\x37\x2e\x33\x38\x2c\x33\x2e\x32\x34\x20\ +\x31\x34\x2e\x36\x35\x32\x2c\x37\x2e\x31\x36\x34\x20\x37\x2e\x30\ +\x39\x32\x2c\x33\x2e\x39\x35\x39\x20\x31\x38\x2e\x32\x31\x36\x2c\ +\x31\x34\x2e\x36\x31\x35\x20\x32\x37\x2e\x38\x32\x38\x2c\x31\x36\ +\x2e\x32\x37\x31\x20\x39\x2e\x33\x39\x36\x2c\x31\x2e\x34\x33\x39\ +\x20\x31\x35\x2e\x39\x38\x34\x2c\x2d\x32\x2e\x33\x30\x33\x20\x32\ +\x38\x2e\x39\x34\x34\x2c\x2d\x36\x2e\x39\x31\x32\x20\x31\x33\x2e\ +\x30\x36\x38\x2c\x2d\x34\x2e\x36\x34\x33\x20\x33\x35\x2e\x36\x37\ +\x36\x2c\x2d\x31\x35\x2e\x30\x38\x34\x20\x34\x38\x2e\x33\x38\x34\ +\x2c\x2d\x32\x30\x2e\x34\x38\x34\x20\x31\x32\x2e\x33\x38\x34\x2c\ +\x2d\x35\x2e\x33\x39\x38\x20\x31\x38\x2e\x34\x33\x32\x2c\x2d\x39\ +\x2e\x32\x35\x32\x20\x32\x36\x2e\x30\x36\x34\x2c\x2d\x31\x32\x2e\ +\x31\x33\x31\x20\x37\x2e\x35\x36\x2c\x2d\x33\x2e\x30\x39\x36\x20\ +\x31\x33\x2e\x39\x36\x38\x2c\x2d\x34\x2e\x38\x39\x36\x20\x31\x39\ +\x2e\x33\x36\x38\x2c\x2d\x35\x2e\x38\x33\x32\x20\x2d\x32\x2e\x32\ +\x36\x38\x2c\x2d\x30\x2e\x37\x39\x33\x20\x2d\x33\x2e\x39\x32\x34\ +\x2c\x2d\x31\x2e\x35\x38\x34\x20\x2d\x35\x2e\x31\x31\x32\x2c\x2d\ +\x32\x2e\x35\x32\x20\x2d\x31\x2e\x32\x32\x34\x2c\x2d\x30\x2e\x39\ +\x33\x37\x20\x2d\x31\x2e\x38\x33\x36\x2c\x2d\x31\x2e\x39\x30\x38\ +\x20\x2d\x31\x2e\x39\x38\x2c\x2d\x32\x2e\x39\x31\x35\x20\x7a\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x63\x6c\ +\x69\x70\x2d\x72\x75\x6c\x65\x3d\x22\x65\x76\x65\x6e\x6f\x64\x64\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\ +\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x23\x30\x30\x30\x30\x38\x30\ +\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\ +\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\ +\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x35\ +\x2e\x36\x31\x34\x30\x31\x36\x30\x36\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x31\x30\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\ +\x6e\x6f\x6e\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x2f\x67\x3e\ +\x0a\x20\x20\x20\x20\x3c\x2f\x67\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\ +\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\ +\x00\x00\x3b\x68\ +\x3c\ +\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\ +\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\ +\x2d\x38\x22\x20\x73\x74\x61\x6e\x64\x61\x6c\x6f\x6e\x65\x3d\x22\ +\x6e\x6f\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x43\x72\x65\x61\x74\ +\x65\x64\x20\x77\x69\x74\x68\x20\x49\x6e\x6b\x73\x63\x61\x70\x65\ +\x20\x28\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x29\x20\x2d\x2d\x3e\x0a\ +\x0a\x3c\x73\x76\x67\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x64\ +\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\x6c\x2e\x6f\ +\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\x73\x2f\x31\ +\x2e\x31\x2f\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\ +\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\ +\x65\x63\x6f\x6d\x6d\x6f\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\ +\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\ +\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\ +\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\ +\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\x3a\ +\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\ +\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3d\ +\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\ +\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x0a\x20\x20\x20\ +\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\ +\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\ +\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x0a\x20\x20\x20\x78\x6d\ +\x6c\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\ +\x74\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\ +\x75\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\ +\x44\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\ +\x22\x0a\x20\x20\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\x6e\x61\x6d\ +\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x22\x0a\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x36\x34\x70\x78\ +\x22\x0a\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\x70\ +\x78\x22\x0a\x20\x20\x20\x69\x64\x3d\x22\x73\x76\x67\x33\x36\x31\ +\x32\x22\x0a\x20\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\ +\x2e\x31\x22\x0a\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x34\x38\x2e\x33\x2e\ +\x31\x20\x72\x39\x38\x38\x36\x22\x0a\x20\x20\x20\x73\x6f\x64\x69\ +\x70\x6f\x64\x69\x3a\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x44\x72\ +\x61\x66\x74\x5f\x41\x64\x64\x54\x6f\x47\x72\x6f\x75\x70\x2e\x73\ +\x76\x67\x22\x3e\x0a\x20\x20\x3c\x64\x65\x66\x73\x0a\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x64\x65\x66\x73\x33\x36\x31\x34\x22\x3e\ +\x0a\x20\x20\x20\x20\x3c\x6d\x61\x72\x6b\x65\x72\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x73\x74\x6f\ +\x63\x6b\x69\x64\x3d\x22\x41\x72\x72\x6f\x77\x31\x4d\x65\x6e\x64\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x6f\x72\x69\x65\x6e\x74\x3d\ +\x22\x61\x75\x74\x6f\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x65\ +\x66\x59\x3d\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x72\x65\x66\x58\x3d\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x41\x72\x72\x6f\x77\x31\x4d\x65\x6e\x64\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\ +\x3b\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\ +\x68\x33\x38\x33\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x64\x3d\x22\x4d\x20\x30\x2e\x30\x2c\x30\x2e\x30\x20\x4c\x20\x35\ +\x2e\x30\x2c\x2d\x35\x2e\x30\x20\x4c\x20\x2d\x31\x32\x2e\x35\x2c\ +\x30\x2e\x30\x20\x4c\x20\x35\x2e\x30\x2c\x35\x2e\x30\x20\x4c\x20\ +\x30\x2e\x30\x2c\x30\x2e\x30\x20\x7a\x20\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\ +\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\x74\ +\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\x2e\x30\x70\x74\x3b\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x74\x72\x61\x6e\x73\ +\x66\x6f\x72\x6d\x3d\x22\x73\x63\x61\x6c\x65\x28\x30\x2e\x34\x29\ +\x20\x72\x6f\x74\x61\x74\x65\x28\x31\x38\x30\x29\x20\x74\x72\x61\ +\x6e\x73\x6c\x61\x74\x65\x28\x31\x30\x2c\x30\x29\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x2f\x6d\x61\x72\x6b\x65\x72\x3e\x0a\x20\ +\x20\x20\x20\x3c\x6d\x61\x72\x6b\x65\x72\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x73\x74\x6f\x63\x6b\ +\x69\x64\x3d\x22\x41\x72\x72\x6f\x77\x31\x4d\x73\x74\x61\x72\x74\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x6f\x72\x69\x65\x6e\x74\x3d\ +\x22\x61\x75\x74\x6f\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x65\ +\x66\x59\x3d\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x72\x65\x66\x58\x3d\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x41\x72\x72\x6f\x77\x31\x4d\x73\x74\x61\ +\x72\x74\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\x73\x69\x62\ +\x6c\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\ +\x74\x68\x33\x38\x33\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x64\x3d\x22\x4d\x20\x30\x2e\x30\x2c\x30\x2e\x30\x20\x4c\x20\ +\x35\x2e\x30\x2c\x2d\x35\x2e\x30\x20\x4c\x20\x2d\x31\x32\x2e\x35\ +\x2c\x30\x2e\x30\x20\x4c\x20\x35\x2e\x30\x2c\x35\x2e\x30\x20\x4c\ +\x20\x30\x2e\x30\x2c\x30\x2e\x30\x20\x7a\x20\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\ +\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\x73\ +\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\x2e\x30\x70\x74\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x74\x72\x61\x6e\x73\ +\x66\x6f\x72\x6d\x3d\x22\x73\x63\x61\x6c\x65\x28\x30\x2e\x34\x29\ +\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x31\x30\x2c\x30\x29\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6d\x61\x72\x6b\x65\ +\x72\x3e\x0a\x20\x20\x20\x20\x3c\x6d\x61\x72\x6b\x65\x72\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x73\ +\x74\x6f\x63\x6b\x69\x64\x3d\x22\x41\x72\x72\x6f\x77\x31\x4c\x73\ +\x74\x61\x72\x74\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x6f\x72\x69\ +\x65\x6e\x74\x3d\x22\x61\x75\x74\x6f\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x72\x65\x66\x59\x3d\x22\x30\x2e\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x72\x65\x66\x58\x3d\x22\x30\x2e\x30\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x41\x72\x72\x6f\x77\x31\ +\x4c\x73\x74\x61\x72\x74\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\ +\x69\x73\x69\x62\x6c\x65\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\ +\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x70\x61\x74\x68\x33\x38\x32\x36\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x64\x3d\x22\x4d\x20\x30\x2e\x30\x2c\x30\x2e\ +\x30\x20\x4c\x20\x35\x2e\x30\x2c\x2d\x35\x2e\x30\x20\x4c\x20\x2d\ +\x31\x32\x2e\x35\x2c\x30\x2e\x30\x20\x4c\x20\x35\x2e\x30\x2c\x35\ +\x2e\x30\x20\x4c\x20\x30\x2e\x30\x2c\x30\x2e\x30\x20\x7a\x20\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\ +\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\ +\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x31\ +\x2e\x30\x70\x74\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x74\ +\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x73\x63\x61\x6c\x65\x28\ +\x30\x2e\x38\x29\x20\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x31\ +\x32\x2e\x35\x2c\x30\x29\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x2f\x6d\x61\x72\x6b\x65\x72\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x65\x63\x74\x69\ +\x76\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\ +\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\ +\x22\x30\x20\x3a\x20\x33\x32\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\ +\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\x3a\x20\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x76\x70\x5f\x7a\x3d\x22\x36\x34\x20\x3a\x20\x33\x32\x20\x3a\ +\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\ +\x69\x6e\x3d\x22\x33\x32\x20\x3a\x20\x32\x31\x2e\x33\x33\x33\x33\ +\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x33\x36\ +\x32\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\x73\ +\x70\x65\x63\x74\x69\x76\x65\x33\x35\x38\x38\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\ +\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\x69\x6e\x3d\x22\x30\x2e\x35\ +\x20\x3a\x20\x30\x2e\x33\x33\x33\x33\x33\x33\x33\x33\x20\x3a\x20\ +\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x31\x20\x3a\x20\x30\x2e\x35\ +\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\ +\x31\x30\x30\x30\x20\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\x22\ +\x30\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\ +\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\ +\x70\x33\x64\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\ +\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\ +\x73\x70\x65\x63\x74\x69\x76\x65\x33\x36\x39\x32\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\ +\x72\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\x69\x6e\x3d\x22\x30\x2e\ +\x35\x20\x3a\x20\x30\x2e\x33\x33\x33\x33\x33\x33\x33\x33\x20\x3a\ +\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x31\x20\x3a\x20\x30\x2e\ +\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\ +\x20\x31\x30\x30\x30\x20\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\ +\x22\x30\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\ +\x70\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\ +\x73\x70\x33\x64\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x33\x31\x34\x34\x2d\x36\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x31\x34\x36\ +\x2d\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\ +\x66\x66\x66\x66\x66\x66\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x31\x34\x38\x2d\ +\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\ +\x66\x66\x66\x66\x66\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\ +\x74\x79\x3a\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\ +\x33\x37\x30\x31\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x73\x74\x6f\x70\x33\x37\x30\x33\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\ +\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\x73\x74\x6f\ +\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\ +\x70\x33\x37\x30\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\ +\x72\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\x73\x74\x6f\x70\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\ +\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\ +\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\ +\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x31\ +\x34\x34\x2d\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x33\ +\x36\x38\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\ +\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\ +\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\ +\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x31\x2c\x30\x2c\ +\x30\x2c\x30\x2e\x36\x39\x38\x35\x32\x39\x34\x2c\x30\x2c\x32\x30\ +\x32\x2e\x38\x32\x38\x36\x33\x29\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x63\x78\x3d\x22\x32\x32\x35\x2e\x32\x36\x34\x30\x32\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\x22\x36\x37\x32\x2e\x37\ +\x39\x37\x33\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\ +\x22\x32\x32\x35\x2e\x32\x36\x34\x30\x32\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x66\x79\x3d\x22\x36\x37\x32\x2e\x37\x39\x37\x33\x36\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x33\x34\x2e\x33\ +\x34\x35\x31\x38\x38\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x33\x37\x30\x38\x22\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\x31\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\ +\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x66\ +\x66\x66\x66\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\ +\x3a\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\ +\x73\x65\x74\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x37\x31\x32\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\ +\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x66\x66\x66\x66\ +\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\ +\x3d\x22\x31\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\ +\x20\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\ +\x70\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x33\x38\ +\x30\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\ +\x69\x6e\x3d\x22\x30\x2e\x35\x20\x3a\x20\x30\x2e\x33\x33\x33\x33\ +\x33\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\ +\x31\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\ +\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\x3a\x20\x30\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x76\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\x30\x2e\x35\x20\x3a\ +\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\ +\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\x20\x2f\x3e\x0a\x20\ +\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\ +\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x38\x36\x34\ +\x2d\x30\x2d\x30\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x73\x74\x6f\x70\x33\x38\x36\x36\x2d\x35\x2d\x37\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\ +\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x36\ +\x31\x39\x63\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\ +\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x73\x74\x6f\x70\x33\x38\x36\x38\x2d\x37\x2d\x36\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\ +\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\ +\x33\x37\x39\x63\x66\x62\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\ +\x69\x74\x79\x3a\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\ +\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x33\x33\ +\x37\x37\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\ +\x6f\x70\x33\x33\x37\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\ +\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x61\x61\x30\x30\x3b\x73\ +\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\ +\x33\x33\x38\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\ +\x6f\x6c\x6f\x72\x3a\x23\x66\x61\x66\x66\x32\x62\x3b\x73\x74\x6f\ +\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x33\x38\x36\x34\x2d\x30\x22\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x38\x36\x36\x2d\x35\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\ +\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ +\x3a\x23\x30\x36\x31\x39\x63\x30\x3b\x73\x74\x6f\x70\x2d\x6f\x70\ +\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x38\x36\x38\x2d\x37\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\ +\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ +\x3a\x23\x33\x37\x39\x63\x66\x62\x3b\x73\x74\x6f\x70\x2d\x6f\x70\ +\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\x74\ +\x69\x76\x65\x33\x39\x30\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\ +\x2d\x6f\x72\x69\x67\x69\x6e\x3d\x22\x30\x2e\x35\x20\x3a\x20\x30\ +\x2e\x33\x33\x33\x33\x33\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\ +\x70\x5f\x7a\x3d\x22\x31\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\x30\ +\x20\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\ +\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x35\x30\x34\x38\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\ +\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x62\ +\x6c\x61\x63\x6b\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\ +\x79\x3a\x30\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x35\x30\x35\x30\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\ +\x70\x35\x30\x35\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x2e\x35\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\ +\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x62\x6c\x61\x63\x6b\x3b\x73\x74\ +\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\ +\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x62\x6c\x61\x63\x6b\x3b\x73\ +\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x30\x3b\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\ +\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\ +\x22\x73\x74\x6f\x70\x35\x30\x35\x32\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x33\x38\x34\x31\x2d\x30\x2d\x33\x22\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x38\x34\x33\x2d\x31\x2d\ +\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\ +\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\ +\x72\x3a\x23\x30\x36\x31\x39\x63\x30\x3b\x73\x74\x6f\x70\x2d\x6f\ +\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x33\x38\x34\x35\x2d\ +\x30\x2d\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\ +\x66\x73\x65\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\ +\x6c\x6f\x72\x3a\x23\x33\x37\x39\x63\x66\x62\x3b\x73\x74\x6f\x70\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\ +\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\ +\x75\x73\x65\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x31\x31\x34\x2e\x35\ +\x36\x38\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\ +\x32\x30\x2e\x38\x39\x32\x30\x39\x39\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x72\x3d\x22\x35\x2e\x32\x35\x36\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x79\x3d\x22\x31\x31\x34\x2e\x35\x36\x38\x34\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x32\x30\x2e\x38\ +\x39\x32\x30\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\ +\x3d\x22\x61\x69\x67\x72\x64\x32\x22\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x73\x74\x6f\x70\x31\x35\x35\x36\x36\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\ +\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x46\x30\x46\x30\x46\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\ +\x65\x74\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x73\x74\x6f\x70\x31\x35\x35\x36\x38\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\ +\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x39\x61\x39\x61\x39\x61\ +\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\ +\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\x30\x30\ +\x30\x30\x30\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\ +\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\ +\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\x65\ +\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\ +\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\ +\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x66\x79\x3d\x22\x36\x34\x2e\x35\x36\x37\x39\x30\x32\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x32\x30\x2e\x38\x39\x32\ +\x30\x39\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\x22\x35\ +\x2e\x32\x35\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\x3d\ +\x22\x36\x34\x2e\x35\x36\x37\x39\x30\x32\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x63\x78\x3d\x22\x32\x30\x2e\x38\x39\x32\x30\x39\x39\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x61\x69\x67\ +\x72\x64\x33\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\ +\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\ +\x74\x6f\x70\x31\x35\x35\x37\x33\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\ +\x6f\x6c\x6f\x72\x3a\x23\x46\x30\x46\x30\x46\x30\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\ +\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\ +\x6f\x70\x31\x35\x35\x37\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\ +\x6c\x6f\x72\x3a\x23\x39\x61\x39\x61\x39\x61\x3b\x73\x74\x6f\x70\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\ +\x30\x30\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\ +\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x72\x61\x64\x69\x61\x6c\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x31\x35\x36\x36\x32\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\ +\x63\x6f\x6c\x6f\x72\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\x73\x74\ +\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\ +\x30\x30\x30\x30\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x6f\x66\x66\x73\x65\x74\x3d\x22\x30\x2e\x30\x30\x30\x30\x30\x30\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x73\x74\x6f\x70\x31\x35\x36\x36\x34\x22\x20\x2f\x3e\x0a\x20\x20\ +\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\ +\x6f\x6c\x6f\x72\x3a\x23\x66\x38\x66\x38\x66\x38\x3b\x73\x74\x6f\ +\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\ +\x30\x30\x30\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\ +\x66\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\x30\x30\x30\x30\x30\x30\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\ +\x74\x6f\x70\x31\x35\x36\x36\x36\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\x61\x6c\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x72\x3d\ +\x22\x38\x36\x2e\x37\x30\x38\x34\x35\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x66\x79\x3d\x22\x33\x35\x2e\x37\x33\x36\x39\x31\x36\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\x22\x33\x33\x2e\x39\ +\x36\x36\x36\x37\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x79\ +\x3d\x22\x33\x35\x2e\x37\x33\x36\x39\x31\x36\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x63\x78\x3d\x22\x33\x33\x2e\x39\x36\x36\x36\x37\ +\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\ +\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\ +\x72\x69\x78\x28\x30\x2e\x39\x36\x30\x34\x39\x32\x39\x37\x2c\x30\ +\x2c\x30\x2c\x31\x2e\x30\x34\x31\x31\x33\x32\x2c\x2d\x35\x32\x2e\ +\x31\x34\x34\x32\x34\x39\x2c\x2d\x37\x30\x32\x2e\x33\x33\x31\x35\ +\x38\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\ +\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\ +\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x34\x34\x35\x32\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\ +\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x32\x35\x39\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\ +\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x32\x35\x39\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x66\ +\x61\x66\x61\x66\x61\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\ +\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\ +\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x32\x36\x30\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x62\x62\x62\x62\ +\x62\x62\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x2e\x30\ +\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x32\x36\x31\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\ +\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x72\x61\x64\x69\ +\x61\x6c\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x72\x3d\x22\x33\x37\x2e\x37\x35\x31\x37\x31\x33\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x66\x79\x3d\x22\x33\x2e\x37\x35\x36\ +\x31\x32\x38\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x66\x78\x3d\ +\x22\x38\x2e\x38\x32\x34\x34\x31\x39\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x63\x79\x3d\x22\x33\x2e\x37\x35\x36\x31\x32\x38\x35\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x63\x78\x3d\x22\x38\x2e\x38\x32\ +\x34\x34\x31\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\ +\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\ +\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\x36\x38\x32\x37\x32\x39\ +\x37\x2c\x30\x2c\x30\x2c\x31\x2e\x30\x33\x32\x37\x36\x37\x2c\x2d\ +\x34\x38\x2e\x37\x39\x30\x36\x39\x39\x2c\x2d\x37\x30\x31\x2e\x36\ +\x38\x35\x31\x33\x29\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\ +\x61\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\ +\x72\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x61\x64\x69\x61\x6c\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x34\x34\x35\x34\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x78\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\ +\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x32\x36\ +\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\ +\x79\x73\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x32\x36\x39\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\ +\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\ +\x3a\x23\x61\x33\x61\x33\x61\x33\x3b\x73\x74\x6f\x70\x2d\x6f\x70\ +\x61\x63\x69\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\ +\x74\x3d\x22\x30\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x32\ +\x37\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\ +\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x34\ +\x63\x34\x63\x34\x63\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\ +\x74\x79\x3a\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x3b\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\ +\x31\x2e\x30\x30\x30\x30\x30\x30\x30\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x32\x37\x31\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x65\x63\x74\ +\x69\x76\x65\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\ +\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x34\x39\x34\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x70\x65\x72\x73\x70\x33\x64\x2d\x6f\x72\x69\x67\x69\x6e\x3d\x22\ +\x30\x2e\x35\x20\x3a\x20\x30\x2e\x33\x33\x33\x33\x33\x33\x33\x33\ +\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x7a\x3d\x22\x31\x20\x3a\x20\ +\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x79\x3d\x22\x30\ +\x20\x3a\x20\x31\x30\x30\x30\x20\x3a\x20\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\ +\x78\x3d\x22\x30\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\ +\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\ +\x65\x72\x73\x70\x33\x64\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\ +\x47\x72\x61\x64\x69\x65\x6e\x74\x34\x30\x39\x35\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\ +\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x35\x62\x66\x66\x3b\x73\x74\ +\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\ +\x73\x74\x6f\x70\x34\x30\x39\x37\x22\x20\x2f\x3e\x0a\x20\x20\x20\ +\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\x6f\x70\x2d\x63\x6f\ +\x6c\x6f\x72\x3a\x23\x63\x31\x65\x33\x66\x37\x3b\x73\x74\x6f\x70\ +\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\x74\x3d\x22\x31\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x73\x74\ +\x6f\x70\x34\x30\x39\x39\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x3c\ +\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x3e\ +\x0a\x20\x20\x20\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\ +\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x69\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\ +\x65\x35\x30\x32\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\x6f\ +\x72\x69\x67\x69\x6e\x3d\x22\x30\x2e\x35\x20\x3a\x20\x30\x2e\x33\ +\x33\x33\x33\x33\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\ +\x7a\x3d\x22\x31\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\x3a\ +\x20\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\x30\x2e\ +\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\ +\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\ +\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\x74\x69\ +\x76\x65\x35\x30\x37\x36\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x2d\ +\x6f\x72\x69\x67\x69\x6e\x3d\x22\x30\x2e\x35\x20\x3a\x20\x30\x2e\ +\x33\x33\x33\x33\x33\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\x70\ +\x5f\x7a\x3d\x22\x31\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\x30\x20\ +\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\x30\ +\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\ +\x6f\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\ +\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\x6c\x6c\x65\x63\x74\x3d\x22\ +\x61\x6c\x77\x61\x79\x73\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\ +\x6c\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\ +\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x34\x32\x34\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x34\x32\x35\x33\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x78\x31\x3d\x22\x33\x39\x34\x2e\x31\x35\ +\x37\x38\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\x22\ +\x31\x38\x35\x2e\x31\x33\x30\x34\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x78\x32\x3d\x22\x34\x33\x34\x2e\x37\x33\x39\x34\x37\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x79\x32\x3d\x22\x31\x34\x30\x2e\x32\ +\x32\x37\x33\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\ +\x64\x69\x65\x6e\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\ +\x53\x70\x61\x63\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\x54\x72\x61\x6e\x73\ +\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x30\x2e\x39\ +\x34\x32\x33\x31\x38\x32\x36\x2c\x30\x2c\x30\x2c\x30\x2e\x39\x34\ +\x32\x33\x31\x38\x32\x36\x2c\x32\x33\x2e\x37\x32\x37\x35\x34\x39\ +\x2c\x38\x2e\x38\x32\x36\x32\x35\x33\x36\x29\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\ +\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\ +\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x34\x32\x34\ +\x37\x22\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x73\x74\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x32\x65\x38\x32\ +\x30\x37\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\ +\x73\x65\x74\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x73\x74\x6f\x70\x34\x32\x34\x39\x22\x20\x2f\ +\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x73\x74\x6f\x70\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x73\x74\ +\x6f\x70\x2d\x63\x6f\x6c\x6f\x72\x3a\x23\x35\x32\x66\x66\x30\x30\ +\x3b\x73\x74\x6f\x70\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x6f\x66\x66\x73\x65\ +\x74\x3d\x22\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x73\x74\x6f\x70\x34\x32\x35\x31\x22\x20\x2f\x3e\x0a\ +\x20\x20\x20\x20\x3c\x2f\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\ +\x69\x65\x6e\x74\x3e\x0a\x20\x20\x20\x20\x3c\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x79\x32\x3d\x22\x31\x34\x30\x2e\x32\x32\x37\x33\x31\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x78\x32\x3d\x22\x34\x33\x34\x2e\x37\ +\x33\x39\x34\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x79\x31\x3d\ +\x22\x31\x38\x35\x2e\x31\x33\x30\x34\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x78\x31\x3d\x22\x33\x39\x34\x2e\x31\x35\x37\x38\x34\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\x74\ +\x54\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\ +\x78\x28\x30\x2e\x39\x34\x32\x33\x31\x38\x32\x36\x2c\x30\x2c\x30\ +\x2c\x30\x2e\x39\x34\x32\x33\x31\x38\x32\x36\x2c\x32\x33\x2e\x37\ +\x32\x37\x35\x34\x39\x2c\x38\x2e\x38\x32\x36\x32\x35\x33\x36\x29\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x67\x72\x61\x64\x69\x65\x6e\ +\x74\x55\x6e\x69\x74\x73\x3d\x22\x75\x73\x65\x72\x53\x70\x61\x63\ +\x65\x4f\x6e\x55\x73\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x6c\x69\x6e\x65\x61\x72\x47\x72\x61\x64\x69\x65\x6e\ +\x74\x35\x30\x38\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x78\x6c\ +\x69\x6e\x6b\x3a\x68\x72\x65\x66\x3d\x22\x23\x6c\x69\x6e\x65\x61\ +\x72\x47\x72\x61\x64\x69\x65\x6e\x74\x34\x32\x34\x37\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\ +\x6f\x6c\x6c\x65\x63\x74\x3d\x22\x61\x6c\x77\x61\x79\x73\x22\x20\ +\x2f\x3e\x0a\x20\x20\x20\x20\x3c\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x70\x65\x72\x73\x70\x65\x63\x74\x69\x76\x65\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x65\x72\x73\x70\x65\x63\x74\ +\x69\x76\x65\x35\x31\x34\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\ +\x2d\x6f\x72\x69\x67\x69\x6e\x3d\x22\x30\x2e\x35\x20\x3a\x20\x30\ +\x2e\x33\x33\x33\x33\x33\x33\x33\x33\x20\x3a\x20\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x76\ +\x70\x5f\x7a\x3d\x22\x31\x20\x3a\x20\x30\x2e\x35\x20\x3a\x20\x31\ +\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x76\x70\x5f\x79\x3d\x22\x30\x20\x3a\x20\x31\x30\x30\x30\ +\x20\x3a\x20\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\ +\x73\x63\x61\x70\x65\x3a\x76\x70\x5f\x78\x3d\x22\x30\x20\x3a\x20\ +\x30\x2e\x35\x20\x3a\x20\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x74\x79\x70\x65\x3d\x22\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x65\x72\x73\x70\x33\x64\x22\ +\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x64\x65\x66\x73\x3e\x0a\x20\x20\ +\x3c\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\x61\x6d\x65\x64\x76\ +\x69\x65\x77\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x62\x61\x73\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x70\x61\x67\x65\x63\x6f\x6c\x6f\ +\x72\x3d\x22\x23\x66\x66\x66\x66\x66\x66\x22\x0a\x20\x20\x20\x20\ +\x20\x62\x6f\x72\x64\x65\x72\x63\x6f\x6c\x6f\x72\x3d\x22\x23\x36\ +\x36\x36\x36\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x62\x6f\x72\x64\ +\x65\x72\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x31\x2e\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\ +\x67\x65\x6f\x70\x61\x63\x69\x74\x79\x3d\x22\x30\x2e\x30\x22\x0a\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x70\x61\ +\x67\x65\x73\x68\x61\x64\x6f\x77\x3d\x22\x32\x22\x0a\x20\x20\x20\ +\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x7a\x6f\x6f\x6d\x3d\ +\x22\x35\x2e\x35\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x63\x78\x3d\x22\x2d\x32\x2e\x38\x31\x38\x31\x38\ +\x31\x38\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x63\x79\x3d\x22\x33\x32\x22\x0a\x20\x20\x20\x20\x20\x69\ +\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x75\x72\x72\x65\x6e\x74\x2d\ +\x6c\x61\x79\x65\x72\x3d\x22\x6c\x61\x79\x65\x72\x31\x22\x0a\x20\ +\x20\x20\x20\x20\x73\x68\x6f\x77\x67\x72\x69\x64\x3d\x22\x74\x72\ +\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\ +\x65\x3a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2d\x75\x6e\x69\x74\x73\ +\x3d\x22\x70\x78\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\ +\x61\x70\x65\x3a\x67\x72\x69\x64\x2d\x62\x62\x6f\x78\x3d\x22\x74\ +\x72\x75\x65\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x77\x69\x64\x74\x68\x3d\ +\x22\x31\x33\x36\x36\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\ +\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x68\x65\x69\x67\ +\x68\x74\x3d\x22\x37\x30\x36\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\ +\x6b\x73\x63\x61\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x78\x3d\ +\x22\x2d\x38\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\ +\x70\x65\x3a\x77\x69\x6e\x64\x6f\x77\x2d\x79\x3d\x22\x2d\x38\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x77\ +\x69\x6e\x64\x6f\x77\x2d\x6d\x61\x78\x69\x6d\x69\x7a\x65\x64\x3d\ +\x22\x31\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x6d\x65\x74\x61\x64\x61\ +\x74\x61\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6d\x65\x74\x61\ +\x64\x61\x74\x61\x33\x36\x31\x37\x22\x3e\x0a\x20\x20\x20\x20\x3c\ +\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\ +\x63\x63\x3a\x57\x6f\x72\x6b\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x72\x64\x66\x3a\x61\x62\x6f\x75\x74\x3d\x22\x22\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x66\x6f\x72\x6d\x61\ +\x74\x3e\x69\x6d\x61\x67\x65\x2f\x73\x76\x67\x2b\x78\x6d\x6c\x3c\ +\x2f\x64\x63\x3a\x66\x6f\x72\x6d\x61\x74\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x79\x70\x65\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x72\x64\x66\x3a\x72\x65\x73\x6f\ +\x75\x72\x63\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\ +\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x64\x63\x6d\x69\x74\x79\x70\ +\x65\x2f\x53\x74\x69\x6c\x6c\x49\x6d\x61\x67\x65\x22\x20\x2f\x3e\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x3c\x64\x63\x3a\x74\x69\x74\ +\x6c\x65\x3e\x3c\x2f\x64\x63\x3a\x74\x69\x74\x6c\x65\x3e\x0a\x20\ +\x20\x20\x20\x20\x20\x3c\x2f\x63\x63\x3a\x57\x6f\x72\x6b\x3e\x0a\ +\x20\x20\x20\x20\x3c\x2f\x72\x64\x66\x3a\x52\x44\x46\x3e\x0a\x20\ +\x20\x3c\x2f\x6d\x65\x74\x61\x64\x61\x74\x61\x3e\x0a\x20\x20\x3c\ +\x67\x0a\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x6c\x61\x79\x65\x72\ +\x31\x22\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x6c\x61\x62\x65\x6c\x3d\x22\x4c\x61\x79\x65\x72\x20\x31\x22\ +\x0a\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x67\ +\x72\x6f\x75\x70\x6d\x6f\x64\x65\x3d\x22\x6c\x61\x79\x65\x72\x22\ +\x3e\x0a\x20\x20\x20\x20\x3c\x67\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\ +\x6c\x61\x74\x65\x28\x2d\x32\x35\x39\x2e\x38\x35\x32\x30\x37\x2c\ +\x2d\x31\x33\x32\x2e\x37\x38\x33\x34\x39\x29\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x67\x34\x36\x37\x30\x22\x3e\x0a\ +\x20\x20\x20\x20\x20\x20\x3c\x72\x65\x63\x74\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x72\x79\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x72\x78\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x79\x3d\x22\x31\x37\x39\x2e\x35\x37\x31\x34\ +\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x78\x3d\x22\x32\ +\x38\x30\x2e\x37\x31\x34\x32\x39\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x39\x2e\x32\x37\x39\ +\x32\x32\x31\x35\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\ +\x69\x64\x74\x68\x3d\x22\x32\x34\x2e\x36\x38\x38\x33\x31\x31\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x65\ +\x63\x74\x34\x32\x35\x38\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x30\ +\x30\x30\x30\x30\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x66\x66\x66\x66\ +\x66\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\ +\x6f\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\ +\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\ +\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\ +\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\ +\x65\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\ +\x79\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\ +\x72\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\ +\x79\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\ +\x79\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\ +\x77\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\ +\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\ +\x6d\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\ +\x20\x3c\x72\x65\x63\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x72\x79\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x72\x78\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x79\x3d\x22\x31\x35\x31\x2e\x35\x37\x31\x34\x34\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x78\x3d\x22\x32\x38\x30\x2e\x37\x31\ +\x34\x32\x39\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x68\x65\ +\x69\x67\x68\x74\x3d\x22\x39\x2e\x36\x34\x32\x38\x35\x37\x36\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3d\ +\x22\x32\x34\x2e\x36\x38\x38\x33\x31\x31\x22\x0a\x20\x20\x20\x20\ +\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x65\x63\x74\x34\x32\x35\ +\x38\x2d\x31\x2d\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\ +\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\ +\x30\x30\x30\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x30\x30\x34\x32\x66\ +\x66\x3b\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\ +\x3b\x66\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\ +\x64\x64\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\ +\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\ +\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\ +\x6a\x6f\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\ +\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\ +\x68\x6f\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\ +\x3a\x6e\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\ +\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\ +\x3a\x69\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\ +\x3a\x76\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\ +\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\ +\x75\x6c\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\ +\x3c\x72\x65\x63\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\ +\x79\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\ +\x78\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x79\ +\x3d\x22\x31\x36\x35\x2e\x33\x38\x39\x36\x32\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x78\x3d\x22\x32\x38\x35\x2e\x38\x30\x35\ +\x32\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x68\x65\x69\ +\x67\x68\x74\x3d\x22\x39\x2e\x36\x34\x32\x38\x35\x37\x36\x22\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\ +\x32\x34\x2e\x33\x32\x34\x36\x37\x35\x22\x0a\x20\x20\x20\x20\x20\ +\x20\x20\x20\x20\x69\x64\x3d\x22\x72\x65\x63\x74\x34\x32\x35\x38\ +\x2d\x31\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\ +\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\x30\ +\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x30\x30\x34\x32\x66\x66\x3b\x66\ +\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\x69\ +\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\x3b\ +\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\ +\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\ +\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\ +\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\ +\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\x66\ +\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\x6f\ +\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\x69\ +\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\x6e\ +\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\x69\ +\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\ +\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\x61\ +\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x72\x65\ +\x63\x74\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x79\x3d\x22\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x72\x78\x3d\x22\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x79\x3d\x22\x31\ +\x33\x37\x2e\x35\x37\x31\x34\x34\x22\x0a\x20\x20\x20\x20\x20\x20\ +\x20\x20\x20\x78\x3d\x22\x32\x36\x36\x2e\x37\x31\x34\x32\x39\x22\ +\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x68\x65\x69\x67\x68\x74\ +\x3d\x22\x39\x2e\x36\x34\x32\x38\x35\x37\x36\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x77\x69\x64\x74\x68\x3d\x22\x33\x32\x2e\ +\x31\x34\x32\x38\x35\x37\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x69\x64\x3d\x22\x72\x65\x63\x74\x34\x32\x35\x38\x2d\x31\x2d\ +\x37\x2d\x34\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x30\x30\x30\x30\ +\x30\x30\x3b\x66\x69\x6c\x6c\x3a\x23\x66\x66\x66\x66\x66\x66\x3b\ +\x66\x69\x6c\x6c\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x66\ +\x69\x6c\x6c\x2d\x72\x75\x6c\x65\x3a\x65\x76\x65\x6e\x6f\x64\x64\ +\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\ +\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\ +\x74\x74\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\ +\x69\x6e\x3a\x72\x6f\x75\x6e\x64\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\ +\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\x73\x68\x6f\ +\x66\x66\x73\x65\x74\x3a\x30\x3b\x6d\x61\x72\x6b\x65\x72\x3a\x6e\ +\x6f\x6e\x65\x3b\x76\x69\x73\x69\x62\x69\x6c\x69\x74\x79\x3a\x76\ +\x69\x73\x69\x62\x6c\x65\x3b\x64\x69\x73\x70\x6c\x61\x79\x3a\x69\ +\x6e\x6c\x69\x6e\x65\x3b\x6f\x76\x65\x72\x66\x6c\x6f\x77\x3a\x76\ +\x69\x73\x69\x62\x6c\x65\x3b\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\ +\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3a\x61\x63\x63\x75\x6d\x75\x6c\ +\x61\x74\x65\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\ +\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\ +\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\ +\x22\x63\x63\x63\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x61\x74\x68\x35\x30\x39\x38\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x32\x37\x31\x2e\x30\ +\x37\x31\x34\x33\x2c\x32\x30\x37\x2e\x34\x32\x38\x35\x37\x20\x30\ +\x2c\x33\x37\x2e\x31\x34\x32\x38\x36\x20\x39\x2e\x32\x38\x35\x37\ +\x31\x2c\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\ +\x79\x6c\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\ +\x74\x72\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\ +\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x3b\x73\x74\x72\ +\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\ +\x3a\x6d\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\ +\x74\x65\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\ +\x65\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x74\x72\x61\x6e\ +\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\ +\x28\x30\x2c\x2d\x36\x30\x29\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\x20\x20\x20\x20\x20\x20\x20\ +\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x22\x74\x72\x61\x6e\ +\x73\x6c\x61\x74\x65\x28\x30\x2c\x2d\x36\x30\x29\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x69\x64\x3d\x22\x70\x61\x74\x68\x35\ +\x31\x30\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x64\x3d\ +\x22\x6d\x20\x32\x38\x30\x2e\x38\x39\x32\x38\x36\x2c\x32\x31\x36\ +\x2e\x37\x31\x34\x32\x39\x20\x2d\x39\x2e\x36\x34\x32\x38\x36\x2c\ +\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\ +\x65\x3d\x22\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\ +\x6f\x6b\x65\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x77\x69\x64\x74\x68\x3a\x32\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\ +\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\ +\x69\x74\x65\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\ +\x72\x6c\x69\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x6f\x70\x61\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\ +\x2d\x64\x61\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\ +\x20\x2f\x3e\x0a\x20\x20\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\ +\x20\x20\x20\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\ +\x66\x69\x6c\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\ +\x3a\x23\x30\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\ +\x77\x69\x64\x74\x68\x3a\x32\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\ +\x69\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\ +\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\x65\ +\x72\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\ +\x6d\x69\x74\x3a\x34\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\ +\x63\x69\x74\x79\x3a\x31\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x64\x61\ +\x73\x68\x61\x72\x72\x61\x79\x3a\x6e\x6f\x6e\x65\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x32\x37\x35\x2e\ +\x36\x31\x36\x38\x38\x2c\x31\x35\x36\x2e\x31\x35\x35\x38\x34\x20\ +\x30\x2c\x31\x34\x2e\x32\x33\x33\x37\x37\x20\x39\x2e\x32\x38\x35\ +\x37\x31\x2c\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x69\ +\x64\x3d\x22\x70\x61\x74\x68\x33\x30\x35\x30\x22\x0a\x20\x20\x20\ +\x20\x20\x20\x20\x20\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\x6e\ +\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\x22\x63\x63\x63\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\ +\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\ +\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x2f\x3e\x0a\x20\x20\x20\x20\ +\x3c\x2f\x67\x3e\x0a\x20\x20\x20\x20\x3c\x70\x61\x74\x68\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x73\x74\x79\x6c\x65\x3d\x22\x66\x69\x6c\ +\x6c\x3a\x6e\x6f\x6e\x65\x3b\x73\x74\x72\x6f\x6b\x65\x3a\x23\x30\ +\x30\x30\x30\x30\x30\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\ +\x74\x68\x3a\x31\x70\x78\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\ +\x6e\x65\x63\x61\x70\x3a\x62\x75\x74\x74\x3b\x73\x74\x72\x6f\x6b\ +\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3a\x6d\x69\x74\x65\x72\ +\x3b\x73\x74\x72\x6f\x6b\x65\x2d\x6f\x70\x61\x63\x69\x74\x79\x3a\ +\x31\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x73\x74\x61\x72\x74\x3a\x75\ +\x72\x6c\x28\x23\x41\x72\x72\x6f\x77\x31\x4d\x73\x74\x61\x72\x74\ +\x29\x3b\x6d\x61\x72\x6b\x65\x72\x2d\x65\x6e\x64\x3a\x75\x72\x6c\ +\x28\x23\x41\x72\x72\x6f\x77\x31\x4d\x65\x6e\x64\x29\x22\x0a\x20\ +\x20\x20\x20\x20\x20\x20\x64\x3d\x22\x6d\x20\x35\x32\x2e\x33\x36\ +\x33\x36\x33\x36\x2c\x32\x34\x20\x63\x20\x37\x2e\x31\x39\x38\x35\ +\x32\x39\x2c\x30\x2e\x34\x32\x30\x35\x30\x32\x20\x38\x2e\x36\x36\ +\x38\x34\x35\x33\x2c\x2d\x31\x2e\x38\x38\x36\x36\x36\x33\x20\x38\ +\x2e\x37\x32\x37\x32\x37\x33\x2c\x36\x2e\x31\x38\x31\x38\x31\x38\ +\x20\x30\x2e\x30\x35\x38\x38\x32\x2c\x38\x2e\x30\x36\x38\x34\x38\ +\x31\x20\x2d\x30\x2e\x38\x30\x31\x32\x30\x34\x2c\x36\x2e\x38\x37\ +\x32\x37\x33\x38\x20\x2d\x37\x2e\x38\x31\x38\x31\x38\x32\x2c\x36\ +\x2e\x37\x32\x37\x32\x37\x33\x22\x0a\x20\x20\x20\x20\x20\x20\x20\ +\x69\x64\x3d\x22\x70\x61\x74\x68\x33\x38\x32\x30\x22\x0a\x20\x20\ +\x20\x20\x20\x20\x20\x69\x6e\x6b\x73\x63\x61\x70\x65\x3a\x63\x6f\ +\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\x75\x72\x76\x61\x74\x75\x72\ +\x65\x3d\x22\x30\x22\x0a\x20\x20\x20\x20\x20\x20\x20\x73\x6f\x64\ +\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\ +\x22\x63\x7a\x63\x22\x20\x2f\x3e\x0a\x20\x20\x3c\x2f\x67\x3e\x0a\ +\x3c\x2f\x73\x76\x67\x3e\x0a\ +" + +qt_resource_name = "\ +\x00\x05\ +\x00\x6f\xa6\x53\ +\x00\x69\ +\x00\x63\x00\x6f\x00\x6e\x00\x73\ +\x00\x02\ +\x00\x00\x07\xb9\ +\x00\x75\ +\x00\x69\ +\x00\x15\ +\x06\xfb\x4c\x79\ +\x00\x6f\ +\x00\x70\x00\x65\x00\x6e\x00\x73\x00\x63\x00\x61\x00\x64\x00\x70\x00\x72\x00\x65\x00\x66\x00\x73\x00\x2d\x00\x62\x00\x61\x00\x73\ +\x00\x65\x00\x2e\x00\x75\x00\x69\ +\x00\x1b\ +\x0c\xe7\x1b\x47\ +\x00\x4f\ +\x00\x70\x00\x65\x00\x6e\x00\x53\x00\x43\x00\x41\x00\x44\x00\x5f\x00\x43\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x43\x00\x6f\x00\x64\ +\x00\x65\x00\x53\x00\x68\x00\x61\x00\x70\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x1a\ +\x0e\xdc\xc4\xa7\ +\x00\x4f\ +\x00\x70\x00\x65\x00\x6e\x00\x53\x00\x43\x00\x41\x00\x44\x00\x5f\x00\x52\x00\x65\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x53\x00\x75\ +\x00\x62\x00\x74\x00\x72\x00\x65\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x18\ +\x08\x6c\x46\x27\ +\x00\x70\ +\x00\x72\x00\x65\x00\x66\x00\x65\x00\x72\x00\x65\x00\x6e\x00\x63\x00\x65\x00\x73\x00\x2d\x00\x6f\x00\x70\x00\x65\x00\x6e\x00\x73\ +\x00\x63\x00\x61\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x1f\ +\x0b\x74\x72\x47\ +\x00\x4f\ +\x00\x70\x00\x65\x00\x6e\x00\x53\x00\x43\x00\x41\x00\x44\x00\x5f\x00\x52\x00\x65\x00\x66\x00\x69\x00\x6e\x00\x65\x00\x53\x00\x68\ +\x00\x61\x00\x70\x00\x65\x00\x46\x00\x65\x00\x61\x00\x74\x00\x75\x00\x72\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\ +\x00\x1a\ +\x0b\xab\x18\xe7\ +\x00\x4f\ +\x00\x70\x00\x65\x00\x6e\x00\x53\x00\x43\x00\x41\x00\x44\x00\x5f\x00\x52\x00\x65\x00\x70\x00\x6c\x00\x61\x00\x63\x00\x65\x00\x4f\ +\x00\x62\x00\x6a\x00\x65\x00\x63\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\ +" + +qt_resource_struct = "\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x01\ +\x00\x00\x00\x10\x00\x02\x00\x00\x00\x01\x00\x00\x00\x08\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x03\ +\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x99\xb7\ +\x00\x00\x00\xf6\x00\x00\x00\x00\x00\x01\x00\x01\x4d\x0b\ +\x00\x00\x01\x3a\x00\x00\x00\x00\x00\x01\x00\x01\xc3\xe8\ +\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x01\x00\x00\x44\x83\ +\x00\x00\x00\x86\x00\x00\x00\x00\x00\x01\x00\x00\x5d\x90\ +\x00\x00\x00\x1a\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +" + +def qInitResources(): + QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +def qCleanupResources(): + QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + +qInitResources() diff --git a/src/Mod/OpenSCAD/Resources/OpenSCAD.qrc b/src/Mod/OpenSCAD/Resources/OpenSCAD.qrc new file mode 100644 index 000000000..d2c2d3e9b --- /dev/null +++ b/src/Mod/OpenSCAD/Resources/OpenSCAD.qrc @@ -0,0 +1,10 @@ + + + icons/preferences-openscad.svg + icons/OpenSCAD_ColorCodeShape.svg + icons/OpenSCAD_RefineShapeFeature.svg + icons/OpenSCAD_ReplaceObject.svg + icons/OpenSCAD_RemoveSubtree.svg + ui/openscadprefs-base.ui + + diff --git a/src/Mod/OpenSCAD/Resources/icons/OpenSCAD_ColorCodeShape.svg b/src/Mod/OpenSCAD/Resources/icons/OpenSCAD_ColorCodeShape.svg new file mode 100644 index 000000000..dffb727f3 --- /dev/null +++ b/src/Mod/OpenSCAD/Resources/icons/OpenSCAD_ColorCodeShape.svg @@ -0,0 +1,136 @@ + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Mod/OpenSCAD/Resources/icons/OpenSCAD_RefineShapeFeature.svg b/src/Mod/OpenSCAD/Resources/icons/OpenSCAD_RefineShapeFeature.svg new file mode 100644 index 000000000..a46396be3 --- /dev/null +++ b/src/Mod/OpenSCAD/Resources/icons/OpenSCAD_RefineShapeFeature.svg @@ -0,0 +1,402 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Mod/OpenSCAD/Resources/icons/OpenSCAD_RemoveSubtree.svg b/src/Mod/OpenSCAD/Resources/icons/OpenSCAD_RemoveSubtree.svg new file mode 100644 index 000000000..b75aa6046 --- /dev/null +++ b/src/Mod/OpenSCAD/Resources/icons/OpenSCAD_RemoveSubtree.svg @@ -0,0 +1,461 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/src/Mod/OpenSCAD/Resources/icons/OpenSCAD_ReplaceObject.svg b/src/Mod/OpenSCAD/Resources/icons/OpenSCAD_ReplaceObject.svg new file mode 100644 index 000000000..9ef32ad30 --- /dev/null +++ b/src/Mod/OpenSCAD/Resources/icons/OpenSCAD_ReplaceObject.svg @@ -0,0 +1,457 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/src/Mod/OpenSCAD/Resources/icons/preferences-openscad.svg b/src/Mod/OpenSCAD/Resources/icons/preferences-openscad.svg new file mode 100644 index 000000000..db7603038 --- /dev/null +++ b/src/Mod/OpenSCAD/Resources/icons/preferences-openscad.svg @@ -0,0 +1,1368 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Mod/OpenSCAD/Resources/ui/openscadprefs-base.ui b/src/Mod/OpenSCAD/Resources/ui/openscadprefs-base.ui new file mode 100644 index 000000000..a3176d0f0 --- /dev/null +++ b/src/Mod/OpenSCAD/Resources/ui/openscadprefs-base.ui @@ -0,0 +1,547 @@ + + + Gui::Dialog::DlgSettingsOpenSCAD + + + + 0 + 0 + 575 + 629 + + + + General settings + + + + 6 + + + 9 + + + + + General OpenSCAD Settings + + + + + + + + OpenSCAD executable + + + + + + + + 300 + 0 + + + + The path to the OpenSCAD executeable + + + openscadexecutable + + + Mod/OpenSCAD + + + + + + + + + + + + OpenSCAD import + + + + + + + + If this is checked, Features will claim thier children in the tree view + + + Use ViewProvider in Tree View + + + useViewProviderTree + + + Mod/OpenSCAD + + + + + + + + + + + If this is checked, Multmatrix Object will be Parametric + + + Use Multmatrix Feature + + + useMultmatrixFeature + + + Mod/OpenSCAD + + + + + + + + + + + The maximum number of faces of a polygon, prism or frustum. If fn is greater than this value the object is considered to be a circular. Set to 0 for no limit + + + Maximum number of faces for polygons (fn) + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + The maximum number of faces of a polygon, prism or frustum. If fn is greater than this value the object is considered to be a circular. Set to 0 for no limit + + + 0 + + + useMaxFN + + + Mod/OpenSCAD + + + + + + + + + + + Debug: Register filetype to prototype importer + + + Debug: Register filetype to prototype importer + + + debugRegisterPrototype + + + Mod/OpenSCAD + + + + + + + + + + + + + + + OpenSCAD export + + + + + + + + maximum fragment size + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + minimum angle for a fragment + + + angular (fa) + + + + + + + minimum angle for a fragment + + + ° + + + 0.010000000000000 + + + 360.000000000000000 + + + 12.000000000000000 + + + exportFa + + + Mod/OpenSCAD + + + + + + + Qt::Vertical + + + + + + + minimum size of a fragment + + + size (fs) + + + + + + + true + + + + 0 + 0 + + + + + 0 + 0 + + + + minimum size of a fragment + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + mm + + + 0.010000000000000 + + + 10000.000000000000000 + + + 2.000000000000000 + + + exportFs + + + Mod/OpenSCAD + + + + + + + + + + + convexity + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 10 + + + exportConvexity + + + Mod/OpenSCAD + + + + + + + + + + + Mesh fallback + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Maxium Length + + + MaxLength + + + + + + + Maximum Length + + + 0.000000000000000 + + + 1000.000000000000000 + + + 1.000000000000000 + + + meshmaxlength + + + Mod/OpenSCAD + + + + + + + Maximum Area + + + maxArea + + + + + + + Maximum Area + + + 0.000000000000000 + + + 1000.000000000000000 + + + 0.000000000000000 + + + meshmaxarea + + + Mod/OpenSCAD + + + + + + + Local Length + + + 0.000000000000000 + + + 1000.000000000000000 + + + 0.000000000000000 + + + meshlocallen + + + Mod/OpenSCAD + + + + + + + Local Length + + + localLen + + + + + + + Deflection + + + 0.000000000000000 + + + 1000.000000000000000 + + + 0.000000000000000 + + + meshdeflection + + + Mod/OpenSCAD + + + + + + + Deflection + + + deflection + + + + + + + Triangulation settings + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + qPixmapFromMimeSource + + + Gui::FileChooser + QWidget +
Gui/FileDialog.h
+
+ + Gui::PrefFileChooser + Gui::FileChooser +
Gui/PrefWidgets.h
+
+ + Gui::PrefSpinBox + QSpinBox +
Gui/PrefWidgets.h
+
+ + Gui::PrefCheckBox + QCheckBox +
Gui/PrefWidgets.h
+
+ + Gui::PrefDoubleSpinBox + QDoubleSpinBox +
Gui/PrefWidgets.h
+
+
+ + +
diff --git a/src/Mod/OpenSCAD/TODO b/src/Mod/OpenSCAD/TODO new file mode 100644 index 000000000..78e65cec1 --- /dev/null +++ b/src/Mod/OpenSCAD/TODO @@ -0,0 +1,5 @@ +Makefiles (get the python files included) +Copyright notices (Ply is BSD, everything Keith did is GPL, most of the stuff from freecad is LGPL) +Make filenames unique, e.g. prepepend module name +Add a gui command for the Refine Shape feature. +Add a gui command for subtractfaces2. diff --git a/src/Mod/OpenSCAD/colorcodeshapes.py b/src/Mod/OpenSCAD/colorcodeshapes.py new file mode 100644 index 000000000..c6fb19203 --- /dev/null +++ b/src/Mod/OpenSCAD/colorcodeshapes.py @@ -0,0 +1,81 @@ +import FreeCAD +def shapedict(shapelst): + return dict([(shape.hashCode(),shape) for shape in shapelst]) + +def shapeset(shapelst): + return set([shape.hashCode() for shape in shapelst]) + +def mostbasiccompound(comp): + '''searches fo the most basic shape in a Compound''' + solids=shapeset(comp.Solids) + shells=shapeset(comp.Shells) + faces=shapeset(comp.Faces) + wires=shapeset(comp.Wires) + edges=shapeset(comp.Edges) + vertexes=shapeset(comp.Vertexes) + #FreeCAD.Console.PrintMessage('%s\n' % (str((len(solids),len(shells),len(faces),len(wires),len(edges),len(vertexes))))) + for shape in comp.Solids: + shells -= shapeset(shape.Shells) + faces -= shapeset(shape.Faces) + wires -= shapeset(shape.Wires) + edges -= shapeset(shape.Edges) + vertexes -= shapeset(shape.Vertexes) + for shape in comp.Shells: + faces -= shapeset(shape.Faces) + wires -= shapeset(shape.Wires) + edges -= shapeset(shape.Edges) + vertexes -= shapeset(shape.Vertexes) + for shape in comp.Faces: + wires -= shapeset(shape.Wires) + edges -= shapeset(shape.Edges) + vertexes -= shapeset(shape.Vertexes) + for shape in comp.Wires: + edges -= shapeset(shape.Edges) + vertexes -= shapeset(shape.Vertexes) + for shape in comp.Edges: + vertexes -= shapeset(shape.Vertexes) + #FreeCAD.Console.PrintMessage('%s\n' % (str((len(solids),len(shells),len(faces),len(wires),len(edges),len(vertexes))))) + #return len(solids),len(shells),len(faces),len(wires),len(edges),len(vertexes) + if vertexes: + return "Vertex" + elif edges: + return "Edge" + elif wires: + return "Wire" + elif faces: + return "Face" + elif shells: + return "Shell" + elif solids: + return "Solid" + +def colorcodeshapes(objs): + shapecolors={ + "Compound":(0.3,0.3,0.4), + "CompSolid":(0.1,0.5,0.0), + "Solid":(0.0,0.8,0.0), + "Shell":(0.8,0.0,0.0), + "Face":(0.6,0.6,0.0), + "Wire":(0.1,0.1,0.1), + "Edge":(1.0,1.0,1.0), + "Vertex":(8.0,8.0,8.0), + "Shape":(0.0,0.0,1.0), + None:(0.0,0.0,0.0)} + + for obj in objs: + if hasattr(obj,'Shape'): + try: + if obj.Shape.isNull(): + continue + if not obj.Shape.isValid(): + color=(1.0,0.4,0.4) + else: + st=obj.Shape.ShapeType + if st in ["Compound","CompSolid"]: + st = mostbasiccompound(obj.Shape) + color=shapecolors[st] + obj.ViewObject.ShapeColor = color + except: + raise + +#colorcodeshapes(App.ActiveDocument.Objects) diff --git a/src/Mod/OpenSCAD/expandplacements.py b/src/Mod/OpenSCAD/expandplacements.py new file mode 100644 index 000000000..b258c499a --- /dev/null +++ b/src/Mod/OpenSCAD/expandplacements.py @@ -0,0 +1,78 @@ +import FreeCAD +from OpenSCADFeatures import * +from OpenSCADUtils import isspecialorthogonalpython,isspecialorthogonal +import replaceobj + +def likeprimitive(obj,extrusion=False): + '''we can't push the matrix transformation further down''' + return not obj.OutList or obj.isDerivedFrom('Part::Extrusion')\ + or extrusion and (obj.isDerivedFrom('Part::Revolution') \ + or obj.isDerivedFrom('Part::FeaturePython')) or \ + not obj.isDerivedFrom('Part::Feature') + +def expandplacementsmatrix(obj,matrix): + '''expand afine transformation down the feature tree''' + ownmatrix=matrix.multiply(obj.Placement.toMatrix()) + if obj.isDerivedFrom('Part::Feature') and \ + isinstance(obj.Proxy,MatrixTransform): + innermatrix=ownmatrix.multiply(obj.Matrix) + if likeprimitive(obj.Base,True): #this matrix is needed + obj.Placement=FreeCAD.Placement() + obj.Matrix = innermatrix + else: #the inner object is not a primitive + expandplacementsmatrix(obj.Base,innermatrix) + #remove the matrix object + for parent in obj.Base.InList: + replaceobj.replaceobj(parent,obj,obj.Base) + out.Document.removeObject(obj.Name) + elif likeprimitive(obj,True): + #if isspecialorthogonalpython(fcsubmatrix(ownmatrix)): + if isspecialorthogonal(ownmatrix): + obj.Placement=FreeCAD.Placement() + #this should never happen unless matrices cancel out + obj.Placement=FreeCAD.Placement(ownmatrix) + else: + newobj=doc.addObject("Part::FeaturePython",'exp_trans') + MatrixTransform(newobj,ownmatrix,obj) #This object is not mutable GUI + ViewProviderTree(newobj.ViewObject) + for parent in obj.InList: + replaceobj.replaceobj(parent,obj,newobj) # register the new object in the feature tree + obj.Placement=FreeCAD.Placement() + else: #not a primitive + for outobj in obj.OutList: + if outobj.isDerivedFrom('Part::Feature') and \ + isinstance(obj.Proxy,MatrixTransform): + newmatrix = ownmatrix.multiply(obj.Matrix).multiply(\ + outobj.Base.Placement.toMatrix()) + if likeprimitive(outobj.Base,True): #child of is like primtitive + outobj.Matrix = newmatrix + outobj.Base.Placement=FreeCAD.Placement() + else: #remove the MatrixTranformation + plainobj=outobj.Base + for parent in outobj.InList: + replaceobj.replaceobj(parent,outobj,plainobj) + outobj.Document.removeObject(outobj.Name) + expandplacementsmatrix(outobj,newmatrix) + else: + expandplacementsmatrix(outobj,ownmatrix) + obj.Placement=FreeCAD.Placement() + + +def expandplacements(obj,placement): + ownplacement=placement.multiply(obj.Placement) + if obj.isDerivedFrom('Part::FeaturePython') and isinstance(obj.Proxy,MatrixTransform): + #expandplacementsmatrix(obj,ownplacement.toMatrix()) + expandplacementsmatrix(obj,placement.toMatrix()) + elif likeprimitive(obj,False): + obj.Placement=ownplacement + else: + for outobj in obj.OutList: + if obj.isDerivedFrom('Part::Extrusion'): + obj.Dir=ownplacement.Rotation.multVec(obj.Dir) + elif obj.isDerivedFrom('Part::Revolution'): + obj.Axis=ownplacement.Rotation.multVec(obj.Axis) + #obj.Base=ownplacement.Rotation.multVec(obj.Base) + expandplacements(outobj,ownplacement) + obj.Placement=FreeCAD.Placement() + +#expandplacements(rootobj,FreeCAD.Placement()) diff --git a/src/Mod/OpenSCAD/exportCSG.py b/src/Mod/OpenSCAD/exportCSG.py new file mode 100644 index 000000000..13878ad0a --- /dev/null +++ b/src/Mod/OpenSCAD/exportCSG.py @@ -0,0 +1,260 @@ + +#*************************************************************************** +#* * +#* Copyright (c) 2012 Keith Sloan * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU General Public License (GPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#* Acknowledgements : * +#* * +#* Thanks to shoogen on the FreeCAD forum for programming advice * +#* and some code. * +#* * +#*************************************************************************** +__title__="FreeCAD OpenSCAD Workbench - CSG exporter Version 0.01c" +__author__ = "Keith Sloan " +__url__ = ["http://www.sloan-home.co.uk/Export/Export.html"] + +import FreeCAD, os, Part, math +from FreeCAD import Vector + +try: import FreeCADGui +except ValueError: gui = False +else: gui = True + +#*************************************************************************** +# Tailor following to your requirements ( Should all be strings ) * +#fafs = '$fa = 12, $fs = 2' +#convexity = 'convexity = 10' +params = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/OpenSCAD") +fa = params.GetFloat('exportFa',12.0) +fs = params.GetFloat('exportFs',2.0) +conv = params.GetInt('exportConvexity',10) +fafs = '$fa = %f, $fs = %f' % (fa,fs) +convexity = 'convexity = %d' % conv +#*************************************************************************** +if open.__module__ == '__builtin__': + pythonopen = open + +def check_center(ob): + # Only say center = false if no rotation and no displacement + if ob.Placement.isNull(): + return 'false' + return 'true' + +def center(b): + if b == 0 : + return 'false' + return 'true' + +def check_multmatrix(csg,ob,x,y,z): + v = FreeCAD.Vector(0,0,1) + b = FreeCAD.Vector(x,y,z) + if ( ob.Placement.Base == FreeCAD.Vector(0,0,0)): + return 0 # center = false no mm + elif not ob.Placement.isNull(): + print "Output Multmatrix" + m = ob.Placement.toMatrix() + # adjust position for center displacments + csg.write("multmatrix([["+str(m.A11)+", "+str(m.A12)+", "+str(m.A13)+", "+str(m.A14)+"], ["\ + +str(m.A21)+", "+str(m.A22)+", "+str(m.A23)+", "+str(m.A24)+"], ["\ + +str(m.A31)+", "+str(m.A32)+", "+str(m.A33)+", "+str(m.A34)+"], [ 0, 0, 0, 1]]){\n") + return 1 # center = true and mm + return 2 # center = true and no mm + +def mesh2polyhedron(mesh): + pointstr=','.join(['[%f,%f,%f]' % tuple(vec) for vec in mesh.Topology[0]]) + trianglestr=','.join(['[%d,%d,%d]' % tuple(tri) for tri in mesh.Topology[1]]) + return 'polyhedron ( points = [%s], triangles = [%s]);' % (pointstr,trianglestr) + +def vector2d(v): + return [v[0],v[1]] + +def vertexs2polygon(vertex): + pointstr=','.join(['[%f, %f]' % tuple(vector2d(v.Point)) for v in vertex]) + return 'polygon ( points = [%s], paths = undef, convexity = 1);}' % pointstr + +def shape2polyhedron(shape): + import MeshPart +fa = params.GetFloat('exportFa',12.0) + return mesh2polyhedron(MeshPart.meshFromShape(shape,params.GetFloat(\ + 'meshmaxlength',1.0), params.GetFloat('meshmaxarea',0.0),\ + params.GetFloat('meshlocallen',0.0),\ + params.GetFloat('meshdeflection',0.0))) + +def process_object(csg,ob): + + print "Placement" + print "Pos : "+str(ob.Placement.Base) + print "axis : "+str(ob.Placement.Rotation.Axis) + print "angle : "+str(ob.Placement.Rotation.Angle) + + if ob.Type == "Part::Sphere" : + print "Sphere Radius : "+str(ob.Radius) + check_multmatrix(csg,ob,0,0,0) + global fafs + csg.write("sphere($fn = 0, "+fafs+", r = "+str(ob.Radius)+");\n") + + elif ob.Type == "Part::Box" : + print "cube : ("+ str(ob.Length)+","+str(ob.Width)+","+str(ob.Height)+")" + mm = check_multmatrix(csg,ob,-ob.Length/2,-ob.Width/2,-ob.Height/2) + csg.write("cube (size = ["+str(ob.Length)+", "+str(ob.Width)+", "+str(ob.Height)+"], center = "+center(mm)+");\n") + if mm == 1 : csg.write("}\n") + + elif ob.Type == "Part::Cylinder" : + print "cylinder : Height "+str(ob.Height)+ " Radius "+str(ob.Radius) + mm = check_multmatrix(csg,ob,0,0,-ob.Height/2) + global fafs + csg.write("cylinder($fn = 0, "+fafs+", h = "+str(ob.Height)+ ", r1 = "+str(ob.Radius)+\ + ", r2 = " + str(ob.Radius) + ", center = "+center(mm)+");\n") + if mm == 1 : csg.write("}\n") + + elif ob.Type == "Part::Cone" : + print "cone : Height "+str(ob.Height)+ " Radius1 "+str(ob.Radius1)+" Radius2 "+str(ob.Radius2) + mm = check_multmatrix(csg,ob,0,0,-ob.Height/2) + global fafs + csg.write("cylinder($fn = 0, "+fafs+", h = "+str(ob.Height)+ ", r1 = "+str(ob.Radius1)+\ + ", r2 = "+str(ob.Radius2)+", center = "+center(mm)+");\n") + if mm == 1 : csg.write("}\n") + + elif ob.Type == "Part::Torus" : + print "Torus" + print ob.Radius1 + print ob.Radius2 + if ob.Angle3 == 360.00 : + mm = check_multmatrix(csg,ob,0,0,0) + global fafs + csg.write("rotate_extrude("+convexity+", $fn = 0, "+fafs+")\n") + csg.write("multmatrix([[1, 0, 0, "+str(ob.Radius1)+"], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]])\n") + csg.write("circle($fn = 0, "+fafs+", r = "+str(ob.Radius2)+");\n") + if mm == 1 : csg.write("}\n") + else : # Cannot convert to rotate extrude so best effort is polyhedron + csg.write('%s\n' % shape2polyhedron(ob.Shape)) + + elif ob.Type == "Part::Extrusion" : + print "Extrusion" + print ob.Base + print ob.Base.Name + #if ( ob.Base == "Part::FeaturePython" and ob.Base.Name == "Polygon") : + if ob.Base.Name == "Polygon" : + f = str(ob.Base.FacesNumber) + r = str(ob.Base.Radius) + h = str(ob.Dir[2]) + print "Faces : " + f + print "Radius : " + r + print "Height : " + h + mm = check_multmatrix(csg,ob,0,0,-float(h)/2) + global fafs + csg.write("cylinder($fn = "+f+", "+fafs+", h = "+h+", r1 = "+r+\ + ", r2 = "+r+", center = "+center(mm)+");\n") + if mm == 1: csg.write("}\n") + + elif ob.Base.Name == "circle" : + r = str(ob.Base.Radius) + h = str(ob.Dir[2]) + print "Radius : " + r + print "Height : " + h + mm = check_multmatrix(csg,ob,0,0,-float(h)/2) + global fafs + csg.write("cylinder($fn = 0, "+fafs+", h = "+h+", r1 = "+r+\ + ", r2 = "+r+", center = "+center(mm)+");\n") + if mm == 1: csg.write("}\n") + + elif ob.Base.Name == "Wire" : + print "Wire extrusion" + print ob.Base + mm = check_multmatrix(csg,ob,0,0,0) + global fafs + csg.write("linear_extrude(height = "+str(ob.Dir[2])+", center = "+center(mm)+", "+convexity+", twist = 0, slices = 2, $fn = 0, "+fafs+")\n{\n") + csg.write(vertexs2polygon(ob.Base.Shape.Vertexes)) + if mm == 1: csg.write("}\n") + + elif ob.Base.Name == "square" : + mm = check_multmatrix(csg,ob,0,0,0) + global fafs + csg.write("linear_extrude(height = "+str(ob.Dir[2])+", center = true, "+convexity+", twist = 0, slices = 2, $fn = 0, "+fafs+")\n{\n") + csg.write("square (size = ["+str(ob.Base.Length)+", "+str(ob.Base.Width)+"],center = "+center(mm)+";\n}\n") + if mm == 1: csg.write("}\n") + + elif ob.Type == "Part::Cut" : + print "Cut" + csg.write("difference() {\n") + process_object(csg,ob.Base) + process_object(csg,ob.Tool) + csg.write("}\n") + + elif ob.Type == "Part::Fuse" : + print "union" + csg.write("union() {\n") + process_object(csg,ob.Base) + process_object(csg,ob.Tool) + csg.write("}\n") + + elif ob.Type == "Part::Common" : + print "intersection" + csg.write("intersection() {\n") + process_object(csg,ob.Base) + process_object(csg,ob.Tool) + csg.write("}\n") + + elif ob.Type == "Part::MultiFuse" : + print "Multi Fuse / union" + csg.write("union() {\n") + for subobj in ob.Shapes: + process_object(csg,subobj) + csg.write("}\n") + + elif ob.Type == "Part::Common" : + print "Multi Common / intersection" + csg.write("intersection() {\n") + for subobj in ob.Shapes: + process_object(csg,subobj) + csg.write("}\n") + + elif ob.isDerivedFrom('Part::Feature') : + print "Part::Feature" + mm = check_multmatrix(csg,ob,0,0,0) + csg.write('%s\n' % shape2polyhedron(ob.Shape)) + if mm == 1 : csg.write("}\n") + + + +def export(exportList,filename): + "called when freecad exports a file" + + # process Objects + print "\nStart Export 0.1c\n" + print "Open Output File" + csg = pythonopen(filename,'w') + print "Write Inital Output" + # Not sure if comments as per scad are allowed in csg file + csg.write("// CSG file generated from FreeCAD Export 0.1c\n") + #write initial group statements - not sure if required + csg.write("group() {\n group(){\n") + for ob in exportList: + print ob + print "Name : "+ob.Name + print "Type : "+ob.Type + print "Shape : " + print ob.Shape + process_object(csg,ob) + + # write closing group braces + csg.write("}\n}\n") + # close file + csg.close() + FreeCAD.Console.PrintMessage("successfully exported "+filename) diff --git a/src/Mod/OpenSCAD/exportVersions.txt b/src/Mod/OpenSCAD/exportVersions.txt new file mode 100644 index 000000000..cd1f290aa --- /dev/null +++ b/src/Mod/OpenSCAD/exportVersions.txt @@ -0,0 +1,18 @@ +Version History +=============== + +0.01a - First Version + +0.01b - Added support for polyhedron ( Thanks shoogen ) + Some support for Torus + Some support for extruded regular polygon + +0.01c - Support for extruded polygon, square, circle + bug fix for polyhydron floating point - Thanks shoogen + + + +Thanks to shoogen and Peter Li for their advice, code, support and expertise. + +Keith Sloan +keith@sloan-home.co.uk \ No newline at end of file diff --git a/src/Mod/OpenSCAD/importCSG.py b/src/Mod/OpenSCAD/importCSG.py new file mode 100644 index 000000000..1e24f046d --- /dev/null +++ b/src/Mod/OpenSCAD/importCSG.py @@ -0,0 +1,885 @@ +# -*- coding: utf8 -*- + +#*************************************************************************** +#* * +#* Copyright (c) 2012 Keith Sloan * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU General Public License (GPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#* Acknowledgements : * +#* * +#* Thanks to shoogen on the FreeCAD forum and Peter Li * +#* for programming advice and some code. * +#* * +#* * +#*************************************************************************** +__title__="FreeCAD OpenSCAD Workbench - CSG importer Version 0.05d" +__author__ = "Keith Sloan " +__url__ = ["http://www.sloan-home.co.uk/ImportCSG"] + +import FreeCAD, os, sys +import ply.lex as lex +import ply.yacc as yacc +import Part + +from OpenSCADFeatures import RefineShape +from OpenSCAD2Dgeom import * +from OpenSCADUtils import * +isspecialorthogonaldeterminant = isspecialorthogonalpython +from OpenSCADFeatures import Twist + +if open.__module__ == '__builtin__': + pythonopen = open # to distinguish python built-in open function from the one declared here + +# Get the token map from the lexer. This is required. +import tokrules +from tokrules import tokens + +#Globals +dxfcache = {} + +def open(filename): + "called when freecad opens a file." + global doc + global pathName + docname = os.path.splitext(os.path.basename(filename))[0] + doc = FreeCAD.newDocument(docname) + if filename.lower().endswith('.scad'): + tmpfile=callopenscad(filename) + pathName = '' #https://github.com/openscad/openscad/issues/128 + #pathName = os.getcwd() #https://github.com/openscad/openscad/issues/128 + processcsg(tmpfile) + os.unlink(tmpfile) + else: + pathName = os.path.dirname(os.path.normpath(filename)) + processcsg(filename) + return doc + +def insert(filename,docname): + "called when freecad imports a file" + global doc + global pathName + groupname = os.path.splitext(os.path.basename(filename))[0] + try: + doc=FreeCAD.getDocument(docname) + except: + doc=FreeCAD.newDocument(docname) + importgroup = doc.addObject("App::DocumentObjectGroup",groupname) + if filename.lower().endswith('.scad'): + tmpfile=callopenscad(filename) + pathName = '' #https://github.com/openscad/openscad/issues/128 + #pathName = os.getcwd() #https://github.com/openscad/openscad/issues/128 + processcsg(tmpfile) + os.unlink(tmpfile) + else: + pathName = os.path.dirname(os.path.normpath(filename)) + processcsg(filename) + +def processcsg(filename): + global doc + + print 'ImportCSG Version 0.5d' + # Build the lexer + print 'Start Lex' + lex.lex(module=tokrules) + print 'End Lex' + + # Build the parser + print 'Load Parser' + # No debug out otherwise Linux has protection exception + #parser = yacc.yacc(debug=0) + parser = yacc.yacc(debug=0) + print 'Parser Loaded' + # Give the lexer some input + #f=open('test.scad', 'r') + f = pythonopen(filename, 'r') + #lexer.input(f.read()) + + print 'Start Parser' + # Swap statements to enable Parser debugging + #result = parser.parse(f.read(),debug=1) + result = parser.parse(f.read()) + print 'End Parser' + print result + FreeCAD.Console.PrintMessage('End processing CSG file') + doc.recompute() + #import colorcodeshapes + #colorcodeshapes.colorcodeshapes(doc.Objects) + +def p_block_list_(p): + ''' + block_list : statement + | block_list statement + ''' + print "Block List" + print p[1] + if(len(p) > 2) : + print p[2] + p[0] = p[1] + p[2] + else : + p[0] = p[1] + print "End Block List" + +def p_group_action1(p): + 'group_action1 : group LPAREN RPAREN OBRACE block_list EBRACE' + print "Group" + p[0] = p[5] + +def p_group_action2(p) : + 'group_action2 : group LPAREN RPAREN SEMICOL' + print "Group2" + p[0] = [] + +def p_boolean(p) : + ''' + boolean : true + | false + ''' + p[0] = p[1] + +#def p_string(p): +# 'string : QUOTE ID QUOTE' +# p[0] = p[2] + +def p_stripped_string(p): + 'stripped_string : STRING' + p[0] = p[1].strip('"') + +def p_statement(p): + '''statement : part + | operation + | multmatrix_action + | group_action1 + | group_action2 + | color_action + | not_supported + ''' + p[0] = p[1] + +def p_part(p): + ''' + part : sphere_action + | cylinder_action + | cube_action + | circle_action + | square_action + | polygon_action_nopath + | polygon_action_plus_path + | polyhedron_action + ''' + p[0] = p[1] + +def p_2d_point(p): + '2d_point : OSQUARE NUMBER COMMA NUMBER ESQUARE' + global points_list + print "2d Point" + p[0] = [float(p[2]),float(p[4])] + +def p_points_list_2d(p): + ''' + points_list_2d : 2d_point COMMA + | points_list_2d 2d_point COMMA + | points_list_2d 2d_point + ''' + if p[2] == ',' : + print "Start List" + print p[1] + p[0] = [p[1]] + else : + print p[1] + print p[2] + p[1].append(p[2]) + p[0] = p[1] + print p[0] + +def p_3d_point(p): + '3d_point : OSQUARE NUMBER COMMA NUMBER COMMA NUMBER ESQUARE' + global points_list + print "3d point" + p[0] = [p[2],p[4],p[6]] + +def p_points_list_3d(p): + ''' + points_list_3d : 3d_point COMMA + | points_list_3d 3d_point COMMA + | points_list_3d 3d_point + ''' + if p[2] == ',' : + print "Start List" + print p[1] + p[0] = [p[1]] + else : + print p[1] + print p[2] + p[1].append(p[2]) + p[0] = p[1] + print p[0] + +def p_path_points(p): + ''' + path_points : NUMBER COMMA + | path_points NUMBER COMMA + | path_points NUMBER + ''' + print "Path point" + if p[2] == ',' : + print 'Start list' + print p[1] + p[0] = [int(p[1])] + else : + print p[1] + print len(p[1]) + print p[2] + p[1].append(int(p[2])) + p[0] = p[1] + print p[0] + + +def p_path_list(p): + 'path_list : OSQUARE path_points ESQUARE' + print 'Path List ' + print p[2] + p[0] = p[2] + +def p_path_set(p) : + ''' + path_set : path_list + | path_set COMMA path_list + ''' + print 'Path Set' + print len(p) + if len(p) == 2 : + p[0] = [p[1]] + else : + p[1].append(p[3]) + p[0] = p[1] + print p[0] + +def p_operation(p): + ''' + operation : difference_action + | intersection_action + | union_action + | rotate_extrude_action + | linear_extrude_with_twist + | linear_extrude_action2 + | rotate_extrude_file + | import_file1 + | projection_action + ''' + p[0] = p[1] + +def p_not_supported(p): + ''' + not_supported : hull + | minkowski + ''' + from PyQt4 import QtGui + QtGui.QMessageBox.critical(None, "Unsupported Function : "+p[1], "Press OK") + +def p_size_vector(p): + 'size_vector : OSQUARE NUMBER COMMA NUMBER COMMA NUMBER ESQUARE' + print "size vector" + p[0] = [p[2],p[4],p[6]] + +def p_assign(p): + 'assign : ID EQ NUMBER' + print "Assignment" + print p[1] + ' : ' + p[3] + p[0] = p[3] + +def p_color_action(p): + 'color_action : color LPAREN vector RPAREN OBRACE block_list EBRACE' + import math + print "Color" + color = tuple([float(f) for f in p[3][:3]]) #RGB + transp = 100 - int(math.floor(100*float(p[3][3]))) #Alpha + for obj in p[6]: + obj.ViewObject.ShapeColor =color + obj.ViewObject.Transparency = transp + p[0] = p[6] + +# Error rule for syntax errors +def p_error(p): + print "Syntax error in input!" + print p + +def fuse(list,name): + global doc + print "Fuse" + print list + # Is this Multi Fuse + if ( len(list) > 2): + print "Multi Fuse" + myfuse = doc.addObject('Part::MultiFuse',name) + myfuse.Shapes = list + for subobj in myfuse.Shapes: + subobj.ViewObject.hide() + else : + print "Single Fuse" + myfuse = doc.addObject('Part::Fuse',name) + myfuse.Base = list[0] + myfuse.Tool = list[1] + myfuse.Base.ViewObject.hide() + myfuse.Tool.ViewObject.hide() + return(myfuse) + +def p_union_action(p): + 'union_action : union LPAREN RPAREN OBRACE block_list EBRACE' + print "union" + newpart = fuse(p[5],p[1]) + print "Push Union Result" + p[0] = [newpart] + print "End Union" + +def p_difference_action(p): + 'difference_action : difference LPAREN RPAREN OBRACE block_list EBRACE' + + print "difference" + print len(p[5]) + print p[5] + + mycut = doc.addObject('Part::Cut',p[1]) +# Cut using Fuse + mycut.Base = p[5][0] +# Can only Cut two objects do we need to fuse extras + if (len(p[5]) > 2 ): + print "Need to Fuse Extra First" + mycut.Tool = fuse(p[5][1:],'union') + else : + mycut.Tool = p[5][1] + mycut.Base.ViewObject.hide() + mycut.Tool.ViewObject.hide() + print "Push Resulting Cut" + p[0] = [mycut] + print "End Cut" + +def p_intersection_action(p): + 'intersection_action : intersection LPAREN RPAREN OBRACE block_list EBRACE' + + print "intersection" + # Is this Multi Common + if (len(p[5]) > 2): + print "Multi Common" + mycommon = doc.addObject('Part::MultiCommon',p[1]) + mycommon.Shapes = p[5] + for subobj in mycommon.Shapes: + subobj.ViewObject.hide() + else : + print "Single Common" + mycommon = doc.addObject('Part::Common',p[1]) + mycommon.Base = p[5][0] + mycommon.Tool = p[5][1] + mycommon.Base.ViewObject.hide() + mycommon.Tool.ViewObject.hide() + + p[0] = [mycommon] + print "End Intersection" + +def process_rotate_extrude(obj): + myrev = doc.addObject("Part::Revolution","RotateExtrude") + myrev.Source = obj + myrev.Axis = (0.00,1.00,0.00) + myrev.Base = (0.00,0.00,0.00) + myrev.Angle = 360.00 + myrev.Placement=FreeCAD.Placement(FreeCAD.Vector(),FreeCAD.Rotation(0,0,90)) + obj.ViewObject.hide() + newobj=doc.addObject("Part::FeaturePython",'RefineRotateExtrude') + RefineShape(newobj,myrev) + if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/OpenSCAD").\ + GetBool('useViewProviderTree'): + from OpenSCADFeatures import ViewProviderTree + ViewProviderTree(newobj.ViewObject) + else: + newobj.ViewObject.Proxy = 0 + myrev.ViewObject.hide() + return(newobj) + +def p_rotate_extrude_action(p): + 'rotate_extrude_action : rotate_extrude LPAREN assign COMMA assign COMMA assign COMMA assign RPAREN OBRACE block_list EBRACE' + print "Rotate Extrude" + if (len(p[12]) > 1) : + part = fuse(p[12],"Rotate Extrude Union") + else : + part = p[12][0] + p[0] = [process_rotate_extrude(part)] + print "End Rotate Extrude" + +def p_rotate_extrude_file(p): + 'rotate_extrude_file : rotate_extrude LPAREN file EQ stripped_string COMMA layer EQ stripped_string COMMA origin EQ 2d_point COMMA assign \ + COMMA assign COMMA assign COMMA assign COMMA assign RPAREN SEMICOL' + print "Rotate Extrude File" + filen,ext =p[5] .rsplit('.',1) + obj = process_import_file(filen,ext,p[9]) + p[0] = [process_rotate_extrude(obj)] + print "End Rotate Extrude File" + +def process_linear_extrude(obj,h) : + mylinear = doc.addObject("Part::Extrusion","LinearExtrude") + mylinear.Base = obj + mylinear.Dir = (0,0,h) + mylinear.Placement=FreeCAD.Placement() + try: + mylinear.Solid = True + except: + a = 1 # Any old null statement + obj.ViewObject.hide() + newobj=doc.addObject("Part::FeaturePython",'RefineLinearExtrude') + RefineShape(newobj,mylinear) + if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/OpenSCAD").\ + GetBool('useViewProviderTree'): + from OpenSCADFeatures import ViewProviderTree + ViewProviderTree(newobj.ViewObject) + else: + newobj.ViewObject.Proxy = 0 + mylinear.ViewObject.hide() + return(newobj) + +def process_linear_extrude_with_twist(base,height,twist) : + newobj=doc.addObject("Part::FeaturePython",'twist_extrude') + Twist(newobj,base,height,-twist) #base is an FreeCAD Object, heigth and twist are floats + if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/OpenSCAD").\ + GetBool('useViewProviderTree'): + from OpenSCADFeatures import ViewProviderTree + ViewProviderTree(newobj.ViewObject) + else: + newobj.ViewObject.Proxy = 0 + #import ViewProviderTree from OpenSCADFeatures + #ViewProviderTree(obj.ViewObject) + return(newobj) + +def p_linear_extrude_with_twist(p): + 'linear_extrude_with_twist : linear_extrude LPAREN assign COMMA center EQ boolean COMMA assign COMMA assign COMMA assign COMMA \ + assign COMMA assign COMMA assign RPAREN OBRACE block_list EBRACE' + print "Linear Extrude With Twist" + h = float(p[3]) + print "Twist : "+p[11] + t = float(p[11]) + s = int(p[13]) + if (len(p[22]) > 1) : + obj = fuse(p[22],"Linear Extrude Union") + else : + obj = p[22][0] + if t: + p[0] = [process_linear_extrude_with_twist(obj,h,t)] + else: + p[0] = [process_linear_extrude(obj,h)] + if p[7]=='true' : + center(obj,0,0,h) + print "End Linear Extrude with twist" + +def p_linear_extrude_action2(p): + 'linear_extrude_action2 : linear_extrude LPAREN assign COMMA center EQ boolean COMMA assign COMMA assign COMMA assign COMMA \ + assign RPAREN OBRACE block_list EBRACE' + print "Linear Extrude 2" + h = float(p[3]) + if (len(p[18]) > 1) : + obj = fuse(p[18],"Linear Extrude Union") + else : + obj = p[18][0] + p[0] = [process_linear_extrude(obj,h)] + if p[7]=='true' : + center(obj,0,0,h) + print "End Linear Extrude 2" + +def p_import_file1(p): + 'import_file1 : import LPAREN file EQ stripped_string COMMA layer EQ stripped_string COMMA origin EQ 2d_point COMMA assign COMMA assign COMMA \ + assign COMMA assign COMMA assign RPAREN SEMICOL' + print "Import File" + filen,ext =p[5] .rsplit('.',1) + p[0] = [process_import_file(filen,ext,p[9])] + print "End Import File" + +def process_import_file(fname,ext,layer): + print "Importing : "+fname+"."+ext+" Layer : "+layer + if ext.lower() in reverseimporttypes()['Mesh']: + obj=process_mesh_file(fname,ext) + elif ext=='dxf' : + obj=processDXF(fname,layer) + else : + print "Unsupported file extension" + return(obj) + +def process_mesh_file(fname,ext): + import Mesh + fullname = fname+'.'+ext + filename = os.path.join(pathName,fullname) + mesh1 = doc.getObject(fname) #reuse imported object + if not mesh1: + Mesh.insert(filename) + mesh1=doc.getObject(fname) + mesh1.ViewObject.hide() + sh=Part.Shape() + sh.makeShapeFromMesh(mesh1.Mesh.Topology,0.1) + solid = Part.Solid(sh) + obj=doc.addObject('Part::Feature',"Mesh") + #ImportObject(obj,mesh1) #This object is not mutable from the GUI + #ViewProviderTree(obj.ViewObject) + solid=solid.removeSplitter() + if solid.Volume < 0: + #sh.reverse() + #sh = sh.copy() + solid.complement() + obj.Shape=solid#.removeSplitter() + return(obj) + +def processDXF(fname,layer): + global doc + global pathName + print "Process DXF file" + print "File Name : "+fname + print "Layer : "+layer + print "PathName : "+pathName + dxfname = fname+'.dxf' + filename = os.path.join(pathName,dxfname) + print "DXF Full path : "+filename + #featname='import_dxf_%s_%s'%(objname,layera) + # reusing an allready imported object does not work if the + #shape in not yet calculated + import importDXF + global dxfcache + layers=dxfcache.get(id(doc),[]) + print "Layers : "+str(layers) + if layers: + try: + groupobj=[go for go in layers if (not layer) or go.Label == layer] + except: + groupobj= None + else: + groupobj= None + if not groupobj: + print "Importing Layer" + layers = importDXF.processdxf(doc,filename) or importDXF.layers + dxfcache[id(doc)] = layers[:] + for l in layers: + for o in l.Group: + o.ViewObject.hide() + l.ViewObject.hide() + groupobj=[go for go in layers if (not layer) or go.Label == layer] + edges=[] + if not groupobj: + print 'import of layer %s failed' % layer + for shapeobj in groupobj[0].Group: + edges.extend(shapeobj.Shape.Edges) + f=edgestofaces(edges) + #obj=doc.addObject("Part::FeaturePython",'import_dxf_%s_%s'%(objname,layera)) + obj=doc.addObject('Part::Feature',"dxf") + #ImportObject(obj,groupobj[0]) #This object is not mutable from the GUI + #ViewProviderTree(obj.ViewObject) + obj.Shape=f + print "DXF Diagnostics" + print obj.Shape.ShapeType + print "Closed : "+str(f.isClosed()) + print f.check() + print [w.isClosed() for w in obj.Shape.Wires] + return(obj) + +def processSTL(fname): + print "Process STL file" + +def p_multmatrix_action(p): + 'multmatrix_action : multmatrix LPAREN matrix RPAREN OBRACE block_list EBRACE' + print "MultMatrix" + transform_matrix = FreeCAD.Matrix() + print "Multmatrix" + print p[3] + transform_matrix.A11 = round(float(p[3][0][0]),12) + transform_matrix.A12 = round(float(p[3][0][1]),12) + transform_matrix.A13 = round(float(p[3][0][2]),12) + transform_matrix.A14 = round(float(p[3][0][3]),12) + transform_matrix.A21 = round(float(p[3][1][0]),12) + transform_matrix.A22 = round(float(p[3][1][1]),12) + transform_matrix.A23 = round(float(p[3][1][2]),12) + transform_matrix.A24 = round(float(p[3][1][3]),12) + transform_matrix.A31 = round(float(p[3][2][0]),12) + transform_matrix.A32 = round(float(p[3][2][1]),12) + transform_matrix.A33 = round(float(p[3][2][2]),12) + transform_matrix.A34 = round(float(p[3][2][3]),12) + print transform_matrix + print "Apply Multmatrix" +# If more than one object on the stack for multmatrix fuse first + if (len(p[6]) > 1) : + part = fuse(p[6],"Matrix Union") + else : + part = p[6][0] +# part = new_part.transformGeometry(transform_matrix) +# part = new_part.copy() +# part.transformShape(transform_matrix) + if (isspecialorthogonaldeterminant(fcsubmatrix(transform_matrix))) : + print "Orthogonal" + part.Placement=FreeCAD.Placement(transform_matrix).multiply(part.Placement) + new_part = part + elif FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/OpenSCAD").\ + GetBool('useMultmatrixFeature'): + from OpenSCADFeatures import MatrixTransform + new_part=doc.addObject("Part::FeaturePython",'Matrix Deformation') + MatrixTransform(new_part,transform_matrix,part) + if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/OpenSCAD").\ + GetBool('useViewProviderTree'): + from OpenSCADFeatures import ViewProviderTree + ViewProviderTree(new_part.ViewObject) + else: + new_part.ViewObject.Proxy = 0 + part.ViewObject.hide() + else : + print "Transform Geometry" +# Need to recompute to stop transformGeometry causing a crash + doc.recompute() + new_part = doc.addObject("Part::Feature","Matrix Deformation") + # new_part.Shape = part.Base.Shape.transformGeometry(transform_matrix) + new_part.Shape = part.Shape.transformGeometry(transform_matrix) + part.ViewObject.hide() + if False : +# Does not fix problemfile or beltTighener although later is closer + newobj=doc.addObject("Part::FeaturePython",'RefineMultMatrix') + RefineShape(newobj,new_part) + newobj.ViewObject.Proxy = 0 + new_part.ViewObject.hide() + p[0] = [newobj] + else : + p[0] = [new_part] + print "Multmatrix applied" + +def p_matrix(p): + 'matrix : OSQUARE vector COMMA vector COMMA vector COMMA vector ESQUARE' + print "Matrix" + p[0] = [p[2],p[4],p[6],p[8]] + +def p_vector(p): + 'vector : OSQUARE NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER ESQUARE' + print "Vector" + p[0] = [p[2],p[4],p[6],p[8]] + +def center(obj,x,y,z): + obj.Placement = FreeCAD.Placement(\ + FreeCAD.Vector(-x/2.0,-y/2.0,-z/2.0),\ + FreeCAD.Rotation(0,0,0,1)) + +def p_sphere_action(p): + 'sphere_action : sphere LPAREN assign COMMA assign COMMA assign COMMA assign RPAREN SEMICOL' + print "Sphere : "+p[9] + r = float(p[9]) + mysphere = doc.addObject("Part::Sphere",p[1]) + mysphere.Radius = r + print "Push Sphere" + p[0] = [mysphere] + print "End Sphere" + +def myPolygon(n,r1): + # Adapted from Draft::_Polygon + import math + print "My Polygon" + angle = math.pi*2/n + nodes = [FreeCAD.Vector(r1,0,0)] + for i in range(n-1) : + th = (i+1) * angle + nodes.append(FreeCAD.Vector(r1*math.cos(th),r1*math.sin(th),0)) + nodes.append(nodes[0]) + polygonwire = Part.makePolygon(nodes) + + polygon = doc.addObject("Part::Feature","Polygon") + polygon.Shape = Part.Face(polygonwire) + return(polygon) + +def p_cylinder_action(p): + 'cylinder_action : cylinder LPAREN assign COMMA assign COMMA assign COMMA assign COMMA assign COMMA assign COMMA center EQ boolean RPAREN SEMICOL' + print "Cylinder" + h = float(p[9]) + r1 = float(p[11]) + r2 = float(p[13]) + print p[9] + ' : ' + p[11] + ' : ' + p[13] + if ( r1 == r2 ): + print "Make Cylinder" + n = int(p[3]) + fnmax = FreeCAD.ParamGet(\ + "User parameter:BaseApp/Preferences/Mod/OpenSCAD").\ + GetInt('useMaxFN') + if n < 3 or fnmax != 0 and n > fnmax: + mycyl=doc.addObject("Part::Cylinder",p[1]) + mycyl.Height = h + mycyl.Radius = r1 + else : + print "Make Prism" + mycyl=doc.addObject("Part::Extrusion","prism") + mycyl.Dir = (0,0,h) + try : + import Draft + mycyl.Base = Draft.makePolygon(n,r1) + except : + # If Draft can't import (probably due to lack of Pivy on Mac and + # Linux builds of FreeCAD), this is a fallback. + # or old level of FreeCAD + print "Draft makePolygon Failed, falling back on manual polygon" + mycyl.Base = myPolygon(n,r1) + + else : + pass + + mycyl.Base.ViewObject.hide() + # mycyl.Solid = True + + else: + print "Make Cone" + mycyl=doc.addObject("Part::Cone",p[1]) + mycyl.Height = h + mycyl.Radius1 = r1 + mycyl.Radius2 = r2 + print "Center = "+str(p[17]) + if p[17]=='true' : + center(mycyl,0,0,h) + if False : +# Does not fix problemfile or beltTighener although later is closer + newobj=doc.addObject("Part::FeaturePython",'RefineCylinder') + RefineShape(newobj,mycyl) + if FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/OpenSCAD").\ + GetBool('useViewProviderTree'): + from OpenSCADFeatures import ViewProviderTree + ViewProviderTree(newobj.ViewObject) + else: + newobj.ViewObject.Proxy = 0 + mycyl.ViewObject.hide() + p[0] = [newobj] + else : + p[0] = [mycyl] + print "End Cylinder" + + +def p_cube_action(p): + 'cube_action : cube LPAREN size EQ size_vector COMMA center EQ boolean RPAREN SEMICOL' + global doc + l = float(p[5][0]) + w = float(p[5][1]) + h = float(p[5][2]) + print "cube : "+p[5][0] + ' : ' + p[5][1] +' : '+ p[5][2] + mycube=doc.addObject('Part::Box',p[1]) + mycube.Length=l + mycube.Width=w + mycube.Height=h + print "Center = "+str(p[9]) + if p[9]=='true' : + center(mycube,l,w,h); + p[0] = [mycube] + print "End Cube" + +def p_circle_action(p) : + 'circle_action : circle LPAREN assign COMMA assign COMMA assign COMMA assign RPAREN SEMICOL' + print "Circle : "+str(p[9]) + r = float(p[9]) + n = int(p[3]) + fnmax = FreeCAD.ParamGet(\ + "User parameter:BaseApp/Preferences/Mod/OpenSCAD").\ + GetInt('useMaxFN') + import Draft + if n == 0 or fnmax != 0 and n > fnmax: + mycircle = Draft.makeCircle(r) + #mycircle = doc.addObject('Part::Circle',p[1]) + #mycircle.Radius = r + else : + mycircle = Draft.makePolygon(n,r) + print "Push Circle" + p[0] = [mycircle] + +def p_square_action(p) : + 'square_action : square LPAREN size EQ 2d_point COMMA center EQ boolean RPAREN SEMICOL' + print "Square" + x = float(p[5][0]) + y = float(p[5][1]) + mysquare = doc.addObject('Part::Plane',p[1]) + mysquare.Length=x + mysquare.Width=y + if p[9]=='true' : + center(mysquare,x,y,0) + p[0] = [mysquare] + +def convert_points_list_to_vector(l): + v = [] + for i in l : + print i + v.append(FreeCAD.Vector(i[0],i[1])) + print v + return(v) + + +def p_polygon_action_nopath(p) : + 'polygon_action_nopath : polygon LPAREN points EQ OSQUARE points_list_2d ESQUARE COMMA paths EQ undef COMMA assign RPAREN SEMICOL' + print "Polygon" + print p[6] + v = convert_points_list_to_vector(p[6]) + mypolygon = doc.addObject('Part::Feature',p[1]) + print "Make Parts" + # Close Polygon + v.append(v[0]) + parts = Part.makePolygon(v) + print "update object" + mypolygon.Shape = Part.Face(parts) + p[0] = [mypolygon] + +def p_polygon_action_plus_path(p) : + 'polygon_action_plus_path : polygon LPAREN points EQ OSQUARE points_list_2d ESQUARE COMMA paths EQ OSQUARE path_set ESQUARE COMMA assign RPAREN SEMICOL' + print "Polygon with Path" + print p[6] + v = convert_points_list_to_vector(p[6]) + print "Path Set List" + print p[12] + for i in p[12] : + print i + mypolygon = doc.addObject('Part::Feature','wire') + path_list = [] + for j in i : + j = int(j) + print j + path_list.append(v[j]) +# Close path + path_list.append(v[int(i[0])]) + print 'Path List' + print path_list + wire = Part.makePolygon(path_list) + mypolygon.Shape = Part.Face(wire) + p[0] = [mypolygon] +# This only pushes last polygon + +def make_face(v1,v2,v3): + wire = Part.makePolygon([v1,v2,v3,v1]) + face = Part.Face(wire) + return face + +def p_polyhedron_action(p) : + 'polyhedron_action : polyhedron LPAREN points EQ OSQUARE points_list_3d ESQUARE COMMA triangles EQ OSQUARE points_list_3d ESQUARE COMMA assign RPAREN SEMICOL' + print "Polyhedron Points" + v = [] + for i in p[6] : + print i + v.append(FreeCAD.Vector(float(i[0]),float(i[1]),float(i[2]))) + print v + print "Polyhedron triangles" + print p[12] + faces_list = [] + mypolyhed = doc.addObject('Part::Feature',p[1]) + for i in p[12] : + print i + f = make_face(v[int(i[0])],v[int(i[1])],v[int(i[2])]) + faces_list.append(f) + shell=Part.makeShell(faces_list) + mypolyhed.Shape=Part.Solid(shell) + p[0] = [mypolyhed] + +def p_projection_action(p) : + 'projection_action : projection LPAREN cut EQ boolean COMMA assign RPAREN OBRACE block_list EBRACE' + print 'Projection' + from PyQt4 import QtGui + QtGui.QMessageBox.critical(None, "Projection Not yet Coded waiting for Peter Li"," Press OK") + diff --git a/src/Mod/OpenSCAD/importVersions.txt b/src/Mod/OpenSCAD/importVersions.txt new file mode 100644 index 000000000..010387ae1 --- /dev/null +++ b/src/Mod/OpenSCAD/importVersions.txt @@ -0,0 +1,58 @@ +Version History +=============== + +0.01a - First Version + +0.01b - Fixed + + Reset Global Variables + Fix Multmatrix use of Shape + + Added import Function (Untested) + +0.02b - Rewrite to use Bojects rather than shapes. + Objects now editible in FreeCad + +0.02c - disable debug output on Yacc to avoid permissions problem with Linux + +0.03a - Added support for + + Linear Extrusion + Rotational Extrusion + circle + square + polygon + polyhedron + +0.04a - Change to use parser stack rather than own stack + to fix a parsing problem + makes code cleaner and less global variables + parsers out SCAD comments ( Not sure if the are allowed in CSG file anyway + other minor fixes + +0.04b - Fixes where Multmatrix has more than one object neeed to fuse first + Correct import function call + +0.04c - Support for cylinders made with regular polygon ( Needs FreeCAD with fixes to Draft ) + Attempt at transformGeometry for non orthoganal Multmatrix + +0.04d - Fix to multmatrix transformGeometry to avoid crash + +0.04e - If problems with Draft or Draft's makePolygon because not on latest FreeCAD falls back + to non editable polygon + +0.04f - Fix bug with multiple intersections + +0.05a - Attempt to add shogens's import dxf function code. + +0.05b - Fix introduced bug with centre=true/false, ViewObject Proxy + +0.05c - Fix for polygon with path - Changes to Polygon and polyhdron - parse projection + +There appear to be problems with some files and these maybe as a result of bugs in FreeCAD that corrupt +the model. If you find problem files please email them to keith@sloan-home.co.uk + +Thanks to shoogen and Peter Li for their advice, support and expertise. + +Keith Sloan +keith@sloan-home.co.uk \ No newline at end of file diff --git a/src/Mod/OpenSCAD/ply/ANNOUNCE b/src/Mod/OpenSCAD/ply/ANNOUNCE new file mode 100644 index 000000000..bdc1c1094 --- /dev/null +++ b/src/Mod/OpenSCAD/ply/ANNOUNCE @@ -0,0 +1,40 @@ +February 17, 2011 + + Announcing : PLY-3.4 (Python Lex-Yacc) + + http://www.dabeaz.com/ply + +I'm pleased to announce PLY-3.4--a pure Python implementation of the +common parsing tools lex and yacc. PLY-3.4 is a minor bug fix +release. It supports both Python 2 and Python 3. + +If you are new to PLY, here are a few highlights: + +- PLY is closely modeled after traditional lex/yacc. If you know how + to use these or similar tools in other languages, you will find + PLY to be comparable. + +- PLY provides very extensive error reporting and diagnostic + information to assist in parser construction. The original + implementation was developed for instructional purposes. As + a result, the system tries to identify the most common types + of errors made by novice users. + +- PLY provides full support for empty productions, error recovery, + precedence rules, and ambiguous grammars. + +- Parsing is based on LR-parsing which is fast, memory efficient, + better suited to large grammars, and which has a number of nice + properties when dealing with syntax errors and other parsing + problems. Currently, PLY can build its parsing tables using + either SLR or LALR(1) algorithms. + +More information about PLY can be obtained on the PLY webpage at: + + http://www.dabeaz.com/ply + +PLY is freely available. + +Cheers, + +David Beazley (http://www.dabeaz.com) \ No newline at end of file diff --git a/src/Mod/OpenSCAD/ply/CHANGES b/src/Mod/OpenSCAD/ply/CHANGES new file mode 100644 index 000000000..34bf50f98 --- /dev/null +++ b/src/Mod/OpenSCAD/ply/CHANGES @@ -0,0 +1,1093 @@ +Version 3.4 +--------------------- +02/17/11: beazley + Minor patch to make cpp.py compatible with Python 3. Note: This + is an experimental file not currently used by the rest of PLY. + +02/17/11: beazley + Fixed setup.py trove classifiers to properly list PLY as + Python 3 compatible. + +01/02/11: beazley + Migration of repository to github. + +Version 3.3 +----------------------------- +08/25/09: beazley + Fixed issue 15 related to the set_lineno() method in yacc. Reported by + mdsherry. + +08/25/09: beazley + Fixed a bug related to regular expression compilation flags not being + properly stored in lextab.py files created by the lexer when running + in optimize mode. Reported by Bruce Frederiksen. + + +Version 3.2 +----------------------------- +03/24/09: beazley + Added an extra check to not print duplicated warning messages + about reduce/reduce conflicts. + +03/24/09: beazley + Switched PLY over to a BSD-license. + +03/23/09: beazley + Performance optimization. Discovered a few places to make + speedups in LR table generation. + +03/23/09: beazley + New warning message. PLY now warns about rules never + reduced due to reduce/reduce conflicts. Suggested by + Bruce Frederiksen. + +03/23/09: beazley + Some clean-up of warning messages related to reduce/reduce errors. + +03/23/09: beazley + Added a new picklefile option to yacc() to write the parsing + tables to a filename using the pickle module. Here is how + it works: + + yacc(picklefile="parsetab.p") + + This option can be used if the normal parsetab.py file is + extremely large. For example, on jython, it is impossible + to read parsing tables if the parsetab.py exceeds a certain + threshold. + + The filename supplied to the picklefile option is opened + relative to the current working directory of the Python + interpreter. If you need to refer to the file elsewhere, + you will need to supply an absolute or relative path. + + For maximum portability, the pickle file is written + using protocol 0. + +03/13/09: beazley + Fixed a bug in parser.out generation where the rule numbers + where off by one. + +03/13/09: beazley + Fixed a string formatting bug with one of the error messages. + Reported by Richard Reitmeyer + +Version 3.1 +----------------------------- +02/28/09: beazley + Fixed broken start argument to yacc(). PLY-3.0 broke this + feature by accident. + +02/28/09: beazley + Fixed debugging output. yacc() no longer reports shift/reduce + or reduce/reduce conflicts if debugging is turned off. This + restores similar behavior in PLY-2.5. Reported by Andrew Waters. + +Version 3.0 +----------------------------- +02/03/09: beazley + Fixed missing lexer attribute on certain tokens when + invoking the parser p_error() function. Reported by + Bart Whiteley. + +02/02/09: beazley + The lex() command now does all error-reporting and diagonistics + using the logging module interface. Pass in a Logger object + using the errorlog parameter to specify a different logger. + +02/02/09: beazley + Refactored ply.lex to use a more object-oriented and organized + approach to collecting lexer information. + +02/01/09: beazley + Removed the nowarn option from lex(). All output is controlled + by passing in a logger object. Just pass in a logger with a high + level setting to suppress output. This argument was never + documented to begin with so hopefully no one was relying upon it. + +02/01/09: beazley + Discovered and removed a dead if-statement in the lexer. This + resulted in a 6-7% speedup in lexing when I tested it. + +01/13/09: beazley + Minor change to the procedure for signalling a syntax error in a + production rule. A normal SyntaxError exception should be raised + instead of yacc.SyntaxError. + +01/13/09: beazley + Added a new method p.set_lineno(n,lineno) that can be used to set the + line number of symbol n in grammar rules. This simplifies manual + tracking of line numbers. + +01/11/09: beazley + Vastly improved debugging support for yacc.parse(). Instead of passing + debug as an integer, you can supply a Logging object (see the logging + module). Messages will be generated at the ERROR, INFO, and DEBUG + logging levels, each level providing progressively more information. + The debugging trace also shows states, grammar rule, values passed + into grammar rules, and the result of each reduction. + +01/09/09: beazley + The yacc() command now does all error-reporting and diagnostics using + the interface of the logging module. Use the errorlog parameter to + specify a logging object for error messages. Use the debuglog parameter + to specify a logging object for the 'parser.out' output. + +01/09/09: beazley + *HUGE* refactoring of the the ply.yacc() implementation. The high-level + user interface is backwards compatible, but the internals are completely + reorganized into classes. No more global variables. The internals + are also more extensible. For example, you can use the classes to + construct a LALR(1) parser in an entirely different manner than + what is currently the case. Documentation is forthcoming. + +01/07/09: beazley + Various cleanup and refactoring of yacc internals. + +01/06/09: beazley + Fixed a bug with precedence assignment. yacc was assigning the precedence + each rule based on the left-most token, when in fact, it should have been + using the right-most token. Reported by Bruce Frederiksen. + +11/27/08: beazley + Numerous changes to support Python 3.0 including removal of deprecated + statements (e.g., has_key) and the additional of compatibility code + to emulate features from Python 2 that have been removed, but which + are needed. Fixed the unit testing suite to work with Python 3.0. + The code should be backwards compatible with Python 2. + +11/26/08: beazley + Loosened the rules on what kind of objects can be passed in as the + "module" parameter to lex() and yacc(). Previously, you could only use + a module or an instance. Now, PLY just uses dir() to get a list of + symbols on whatever the object is without regard for its type. + +11/26/08: beazley + Changed all except: statements to be compatible with Python2.x/3.x syntax. + +11/26/08: beazley + Changed all raise Exception, value statements to raise Exception(value) for + forward compatibility. + +11/26/08: beazley + Removed all print statements from lex and yacc, using sys.stdout and sys.stderr + directly. Preparation for Python 3.0 support. + +11/04/08: beazley + Fixed a bug with referring to symbols on the the parsing stack using negative + indices. + +05/29/08: beazley + Completely revamped the testing system to use the unittest module for everything. + Added additional tests to cover new errors/warnings. + +Version 2.5 +----------------------------- +05/28/08: beazley + Fixed a bug with writing lex-tables in optimized mode and start states. + Reported by Kevin Henry. + +Version 2.4 +----------------------------- +05/04/08: beazley + A version number is now embedded in the table file signature so that + yacc can more gracefully accomodate changes to the output format + in the future. + +05/04/08: beazley + Removed undocumented .pushback() method on grammar productions. I'm + not sure this ever worked and can't recall ever using it. Might have + been an abandoned idea that never really got fleshed out. This + feature was never described or tested so removing it is hopefully + harmless. + +05/04/08: beazley + Added extra error checking to yacc() to detect precedence rules defined + for undefined terminal symbols. This allows yacc() to detect a potential + problem that can be really tricky to debug if no warning message or error + message is generated about it. + +05/04/08: beazley + lex() now has an outputdir that can specify the output directory for + tables when running in optimize mode. For example: + + lexer = lex.lex(optimize=True, lextab="ltab", outputdir="foo/bar") + + The behavior of specifying a table module and output directory are + more aligned with the behavior of yacc(). + +05/04/08: beazley + [Issue 9] + Fixed filename bug in when specifying the modulename in lex() and yacc(). + If you specified options such as the following: + + parser = yacc.yacc(tabmodule="foo.bar.parsetab",outputdir="foo/bar") + + yacc would create a file "foo.bar.parsetab.py" in the given directory. + Now, it simply generates a file "parsetab.py" in that directory. + Bug reported by cptbinho. + +05/04/08: beazley + Slight modification to lex() and yacc() to allow their table files + to be loaded from a previously loaded module. This might make + it easier to load the parsing tables from a complicated package + structure. For example: + + import foo.bar.spam.parsetab as parsetab + parser = yacc.yacc(tabmodule=parsetab) + + Note: lex and yacc will never regenerate the table file if used + in the form---you will get a warning message instead. + This idea suggested by Brian Clapper. + + +04/28/08: beazley + Fixed a big with p_error() functions being picked up correctly + when running in yacc(optimize=1) mode. Patch contributed by + Bart Whiteley. + +02/28/08: beazley + Fixed a bug with 'nonassoc' precedence rules. Basically the + non-precedence was being ignored and not producing the correct + run-time behavior in the parser. + +02/16/08: beazley + Slight relaxation of what the input() method to a lexer will + accept as a string. Instead of testing the input to see + if the input is a string or unicode string, it checks to see + if the input object looks like it contains string data. + This change makes it possible to pass string-like objects + in as input. For example, the object returned by mmap. + + import mmap, os + data = mmap.mmap(os.open(filename,os.O_RDONLY), + os.path.getsize(filename), + access=mmap.ACCESS_READ) + lexer.input(data) + + +11/29/07: beazley + Modification of ply.lex to allow token functions to aliased. + This is subtle, but it makes it easier to create libraries and + to reuse token specifications. For example, suppose you defined + a function like this: + + def number(t): + r'\d+' + t.value = int(t.value) + return t + + This change would allow you to define a token rule as follows: + + t_NUMBER = number + + In this case, the token type will be set to 'NUMBER' and use + the associated number() function to process tokens. + +11/28/07: beazley + Slight modification to lex and yacc to grab symbols from both + the local and global dictionaries of the caller. This + modification allows lexers and parsers to be defined using + inner functions and closures. + +11/28/07: beazley + Performance optimization: The lexer.lexmatch and t.lexer + attributes are no longer set for lexer tokens that are not + defined by functions. The only normal use of these attributes + would be in lexer rules that need to perform some kind of + special processing. Thus, it doesn't make any sense to set + them on every token. + + *** POTENTIAL INCOMPATIBILITY *** This might break code + that is mucking around with internal lexer state in some + sort of magical way. + +11/27/07: beazley + Added the ability to put the parser into error-handling mode + from within a normal production. To do this, simply raise + a yacc.SyntaxError exception like this: + + def p_some_production(p): + 'some_production : prod1 prod2' + ... + raise yacc.SyntaxError # Signal an error + + A number of things happen after this occurs: + + - The last symbol shifted onto the symbol stack is discarded + and parser state backed up to what it was before the + the rule reduction. + + - The current lookahead symbol is saved and replaced by + the 'error' symbol. + + - The parser enters error recovery mode where it tries + to either reduce the 'error' rule or it starts + discarding items off of the stack until the parser + resets. + + When an error is manually set, the parser does *not* call + the p_error() function (if any is defined). + *** NEW FEATURE *** Suggested on the mailing list + +11/27/07: beazley + Fixed structure bug in examples/ansic. Reported by Dion Blazakis. + +11/27/07: beazley + Fixed a bug in the lexer related to start conditions and ignored + token rules. If a rule was defined that changed state, but + returned no token, the lexer could be left in an inconsistent + state. Reported by + +11/27/07: beazley + Modified setup.py to support Python Eggs. Patch contributed by + Simon Cross. + +11/09/07: beazely + Fixed a bug in error handling in yacc. If a syntax error occurred and the + parser rolled the entire parse stack back, the parser would be left in in + inconsistent state that would cause it to trigger incorrect actions on + subsequent input. Reported by Ton Biegstraaten, Justin King, and others. + +11/09/07: beazley + Fixed a bug when passing empty input strings to yacc.parse(). This + would result in an error message about "No input given". Reported + by Andrew Dalke. + +Version 2.3 +----------------------------- +02/20/07: beazley + Fixed a bug with character literals if the literal '.' appeared as the + last symbol of a grammar rule. Reported by Ales Smrcka. + +02/19/07: beazley + Warning messages are now redirected to stderr instead of being printed + to standard output. + +02/19/07: beazley + Added a warning message to lex.py if it detects a literal backslash + character inside the t_ignore declaration. This is to help + problems that might occur if someone accidentally defines t_ignore + as a Python raw string. For example: + + t_ignore = r' \t' + + The idea for this is from an email I received from David Cimimi who + reported bizarre behavior in lexing as a result of defining t_ignore + as a raw string by accident. + +02/18/07: beazley + Performance improvements. Made some changes to the internal + table organization and LR parser to improve parsing performance. + +02/18/07: beazley + Automatic tracking of line number and position information must now be + enabled by a special flag to parse(). For example: + + yacc.parse(data,tracking=True) + + In many applications, it's just not that important to have the + parser automatically track all line numbers. By making this an + optional feature, it allows the parser to run significantly faster + (more than a 20% speed increase in many cases). Note: positional + information is always available for raw tokens---this change only + applies to positional information associated with nonterminal + grammar symbols. + *** POTENTIAL INCOMPATIBILITY *** + +02/18/07: beazley + Yacc no longer supports extended slices of grammar productions. + However, it does support regular slices. For example: + + def p_foo(p): + '''foo: a b c d e''' + p[0] = p[1:3] + + This change is a performance improvement to the parser--it streamlines + normal access to the grammar values since slices are now handled in + a __getslice__() method as opposed to __getitem__(). + +02/12/07: beazley + Fixed a bug in the handling of token names when combined with + start conditions. Bug reported by Todd O'Bryan. + +Version 2.2 +------------------------------ +11/01/06: beazley + Added lexpos() and lexspan() methods to grammar symbols. These + mirror the same functionality of lineno() and linespan(). For + example: + + def p_expr(p): + 'expr : expr PLUS expr' + p.lexpos(1) # Lexing position of left-hand-expression + p.lexpos(1) # Lexing position of PLUS + start,end = p.lexspan(3) # Lexing range of right hand expression + +11/01/06: beazley + Minor change to error handling. The recommended way to skip characters + in the input is to use t.lexer.skip() as shown here: + + def t_error(t): + print "Illegal character '%s'" % t.value[0] + t.lexer.skip(1) + + The old approach of just using t.skip(1) will still work, but won't + be documented. + +10/31/06: beazley + Discarded tokens can now be specified as simple strings instead of + functions. To do this, simply include the text "ignore_" in the + token declaration. For example: + + t_ignore_cppcomment = r'//.*' + + Previously, this had to be done with a function. For example: + + def t_ignore_cppcomment(t): + r'//.*' + pass + + If start conditions/states are being used, state names should appear + before the "ignore_" text. + +10/19/06: beazley + The Lex module now provides support for flex-style start conditions + as described at http://www.gnu.org/software/flex/manual/html_chapter/flex_11.html. + Please refer to this document to understand this change note. Refer to + the PLY documentation for PLY-specific explanation of how this works. + + To use start conditions, you first need to declare a set of states in + your lexer file: + + states = ( + ('foo','exclusive'), + ('bar','inclusive') + ) + + This serves the same role as the %s and %x specifiers in flex. + + One a state has been declared, tokens for that state can be + declared by defining rules of the form t_state_TOK. For example: + + t_PLUS = '\+' # Rule defined in INITIAL state + t_foo_NUM = '\d+' # Rule defined in foo state + t_bar_NUM = '\d+' # Rule defined in bar state + + t_foo_bar_NUM = '\d+' # Rule defined in both foo and bar + t_ANY_NUM = '\d+' # Rule defined in all states + + In addition to defining tokens for each state, the t_ignore and t_error + specifications can be customized for specific states. For example: + + t_foo_ignore = " " # Ignored characters for foo state + def t_bar_error(t): + # Handle errors in bar state + + With token rules, the following methods can be used to change states + + def t_TOKNAME(t): + t.lexer.begin('foo') # Begin state 'foo' + t.lexer.push_state('foo') # Begin state 'foo', push old state + # onto a stack + t.lexer.pop_state() # Restore previous state + t.lexer.current_state() # Returns name of current state + + These methods mirror the BEGIN(), yy_push_state(), yy_pop_state(), and + yy_top_state() functions in flex. + + The use of start states can be used as one way to write sub-lexers. + For example, the lexer or parser might instruct the lexer to start + generating a different set of tokens depending on the context. + + example/yply/ylex.py shows the use of start states to grab C/C++ + code fragments out of traditional yacc specification files. + + *** NEW FEATURE *** Suggested by Daniel Larraz with whom I also + discussed various aspects of the design. + +10/19/06: beazley + Minor change to the way in which yacc.py was reporting shift/reduce + conflicts. Although the underlying LALR(1) algorithm was correct, + PLY was under-reporting the number of conflicts compared to yacc/bison + when precedence rules were in effect. This change should make PLY + report the same number of conflicts as yacc. + +10/19/06: beazley + Modified yacc so that grammar rules could also include the '-' + character. For example: + + def p_expr_list(p): + 'expression-list : expression-list expression' + + Suggested by Oldrich Jedlicka. + +10/18/06: beazley + Attribute lexer.lexmatch added so that token rules can access the re + match object that was generated. For example: + + def t_FOO(t): + r'some regex' + m = t.lexer.lexmatch + # Do something with m + + + This may be useful if you want to access named groups specified within + the regex for a specific token. Suggested by Oldrich Jedlicka. + +10/16/06: beazley + Changed the error message that results if an illegal character + is encountered and no default error function is defined in lex. + The exception is now more informative about the actual cause of + the error. + +Version 2.1 +------------------------------ +10/02/06: beazley + The last Lexer object built by lex() can be found in lex.lexer. + The last Parser object built by yacc() can be found in yacc.parser. + +10/02/06: beazley + New example added: examples/yply + + This example uses PLY to convert Unix-yacc specification files to + PLY programs with the same grammar. This may be useful if you + want to convert a grammar from bison/yacc to use with PLY. + +10/02/06: beazley + Added support for a start symbol to be specified in the yacc + input file itself. Just do this: + + start = 'name' + + where 'name' matches some grammar rule. For example: + + def p_name(p): + 'name : A B C' + ... + + This mirrors the functionality of the yacc %start specifier. + +09/30/06: beazley + Some new examples added.: + + examples/GardenSnake : A simple indentation based language similar + to Python. Shows how you might handle + whitespace. Contributed by Andrew Dalke. + + examples/BASIC : An implementation of 1964 Dartmouth BASIC. + Contributed by Dave against his better + judgement. + +09/28/06: beazley + Minor patch to allow named groups to be used in lex regular + expression rules. For example: + + t_QSTRING = r'''(?P['"]).*?(?P=quote)''' + + Patch submitted by Adam Ring. + +09/28/06: beazley + LALR(1) is now the default parsing method. To use SLR, use + yacc.yacc(method="SLR"). Note: there is no performance impact + on parsing when using LALR(1) instead of SLR. However, constructing + the parsing tables will take a little longer. + +09/26/06: beazley + Change to line number tracking. To modify line numbers, modify + the line number of the lexer itself. For example: + + def t_NEWLINE(t): + r'\n' + t.lexer.lineno += 1 + + This modification is both cleanup and a performance optimization. + In past versions, lex was monitoring every token for changes in + the line number. This extra processing is unnecessary for a vast + majority of tokens. Thus, this new approach cleans it up a bit. + + *** POTENTIAL INCOMPATIBILITY *** + You will need to change code in your lexer that updates the line + number. For example, "t.lineno += 1" becomes "t.lexer.lineno += 1" + +09/26/06: beazley + Added the lexing position to tokens as an attribute lexpos. This + is the raw index into the input text at which a token appears. + This information can be used to compute column numbers and other + details (e.g., scan backwards from lexpos to the first newline + to get a column position). + +09/25/06: beazley + Changed the name of the __copy__() method on the Lexer class + to clone(). This is used to clone a Lexer object (e.g., if + you're running different lexers at the same time). + +09/21/06: beazley + Limitations related to the use of the re module have been eliminated. + Several users reported problems with regular expressions exceeding + more than 100 named groups. To solve this, lex.py is now capable + of automatically splitting its master regular regular expression into + smaller expressions as needed. This should, in theory, make it + possible to specify an arbitrarily large number of tokens. + +09/21/06: beazley + Improved error checking in lex.py. Rules that match the empty string + are now rejected (otherwise they cause the lexer to enter an infinite + loop). An extra check for rules containing '#' has also been added. + Since lex compiles regular expressions in verbose mode, '#' is interpreted + as a regex comment, it is critical to use '\#' instead. + +09/18/06: beazley + Added a @TOKEN decorator function to lex.py that can be used to + define token rules where the documentation string might be computed + in some way. + + digit = r'([0-9])' + nondigit = r'([_A-Za-z])' + identifier = r'(' + nondigit + r'(' + digit + r'|' + nondigit + r')*)' + + from ply.lex import TOKEN + + @TOKEN(identifier) + def t_ID(t): + # Do whatever + + The @TOKEN decorator merely sets the documentation string of the + associated token function as needed for lex to work. + + Note: An alternative solution is the following: + + def t_ID(t): + # Do whatever + + t_ID.__doc__ = identifier + + Note: Decorators require the use of Python 2.4 or later. If compatibility + with old versions is needed, use the latter solution. + + The need for this feature was suggested by Cem Karan. + +09/14/06: beazley + Support for single-character literal tokens has been added to yacc. + These literals must be enclosed in quotes. For example: + + def p_expr(p): + "expr : expr '+' expr" + ... + + def p_expr(p): + 'expr : expr "-" expr' + ... + + In addition to this, it is necessary to tell the lexer module about + literal characters. This is done by defining the variable 'literals' + as a list of characters. This should be defined in the module that + invokes the lex.lex() function. For example: + + literals = ['+','-','*','/','(',')','='] + + or simply + + literals = '+=*/()=' + + It is important to note that literals can only be a single character. + When the lexer fails to match a token using its normal regular expression + rules, it will check the current character against the literal list. + If found, it will be returned with a token type set to match the literal + character. Otherwise, an illegal character will be signalled. + + +09/14/06: beazley + Modified PLY to install itself as a proper Python package called 'ply'. + This will make it a little more friendly to other modules. This + changes the usage of PLY only slightly. Just do this to import the + modules + + import ply.lex as lex + import ply.yacc as yacc + + Alternatively, you can do this: + + from ply import * + + Which imports both the lex and yacc modules. + Change suggested by Lee June. + +09/13/06: beazley + Changed the handling of negative indices when used in production rules. + A negative production index now accesses already parsed symbols on the + parsing stack. For example, + + def p_foo(p): + "foo: A B C D" + print p[1] # Value of 'A' symbol + print p[2] # Value of 'B' symbol + print p[-1] # Value of whatever symbol appears before A + # on the parsing stack. + + p[0] = some_val # Sets the value of the 'foo' grammer symbol + + This behavior makes it easier to work with embedded actions within the + parsing rules. For example, in C-yacc, it is possible to write code like + this: + + bar: A { printf("seen an A = %d\n", $1); } B { do_stuff; } + + In this example, the printf() code executes immediately after A has been + parsed. Within the embedded action code, $1 refers to the A symbol on + the stack. + + To perform this equivalent action in PLY, you need to write a pair + of rules like this: + + def p_bar(p): + "bar : A seen_A B" + do_stuff + + def p_seen_A(p): + "seen_A :" + print "seen an A =", p[-1] + + The second rule "seen_A" is merely a empty production which should be + reduced as soon as A is parsed in the "bar" rule above. The use + of the negative index p[-1] is used to access whatever symbol appeared + before the seen_A symbol. + + This feature also makes it possible to support inherited attributes. + For example: + + def p_decl(p): + "decl : scope name" + + def p_scope(p): + """scope : GLOBAL + | LOCAL""" + p[0] = p[1] + + def p_name(p): + "name : ID" + if p[-1] == "GLOBAL": + # ... + else if p[-1] == "LOCAL": + #... + + In this case, the name rule is inheriting an attribute from the + scope declaration that precedes it. + + *** POTENTIAL INCOMPATIBILITY *** + If you are currently using negative indices within existing grammar rules, + your code will break. This should be extremely rare if non-existent in + most cases. The argument to various grammar rules is not usually not + processed in the same way as a list of items. + +Version 2.0 +------------------------------ +09/07/06: beazley + Major cleanup and refactoring of the LR table generation code. Both SLR + and LALR(1) table generation is now performed by the same code base with + only minor extensions for extra LALR(1) processing. + +09/07/06: beazley + Completely reimplemented the entire LALR(1) parsing engine to use the + DeRemer and Pennello algorithm for calculating lookahead sets. This + significantly improves the performance of generating LALR(1) tables + and has the added feature of actually working correctly! If you + experienced weird behavior with LALR(1) in prior releases, this should + hopefully resolve all of those problems. Many thanks to + Andrew Waters and Markus Schoepflin for submitting bug reports + and helping me test out the revised LALR(1) support. + +Version 1.8 +------------------------------ +08/02/06: beazley + Fixed a problem related to the handling of default actions in LALR(1) + parsing. If you experienced subtle and/or bizarre behavior when trying + to use the LALR(1) engine, this may correct those problems. Patch + contributed by Russ Cox. Note: This patch has been superceded by + revisions for LALR(1) parsing in Ply-2.0. + +08/02/06: beazley + Added support for slicing of productions in yacc. + Patch contributed by Patrick Mezard. + +Version 1.7 +------------------------------ +03/02/06: beazley + Fixed infinite recursion problem ReduceToTerminals() function that + would sometimes come up in LALR(1) table generation. Reported by + Markus Schoepflin. + +03/01/06: beazley + Added "reflags" argument to lex(). For example: + + lex.lex(reflags=re.UNICODE) + + This can be used to specify optional flags to the re.compile() function + used inside the lexer. This may be necessary for special situations such + as processing Unicode (e.g., if you want escapes like \w and \b to consult + the Unicode character property database). The need for this suggested by + Andreas Jung. + +03/01/06: beazley + Fixed a bug with an uninitialized variable on repeated instantiations of parser + objects when the write_tables=0 argument was used. Reported by Michael Brown. + +03/01/06: beazley + Modified lex.py to accept Unicode strings both as the regular expressions for + tokens and as input. Hopefully this is the only change needed for Unicode support. + Patch contributed by Johan Dahl. + +03/01/06: beazley + Modified the class-based interface to work with new-style or old-style classes. + Patch contributed by Michael Brown (although I tweaked it slightly so it would work + with older versions of Python). + +Version 1.6 +------------------------------ +05/27/05: beazley + Incorporated patch contributed by Christopher Stawarz to fix an extremely + devious bug in LALR(1) parser generation. This patch should fix problems + numerous people reported with LALR parsing. + +05/27/05: beazley + Fixed problem with lex.py copy constructor. Reported by Dave Aitel, Aaron Lav, + and Thad Austin. + +05/27/05: beazley + Added outputdir option to yacc() to control output directory. Contributed + by Christopher Stawarz. + +05/27/05: beazley + Added rununit.py test script to run tests using the Python unittest module. + Contributed by Miki Tebeka. + +Version 1.5 +------------------------------ +05/26/04: beazley + Major enhancement. LALR(1) parsing support is now working. + This feature was implemented by Elias Ioup (ezioup@alumni.uchicago.edu) + and optimized by David Beazley. To use LALR(1) parsing do + the following: + + yacc.yacc(method="LALR") + + Computing LALR(1) parsing tables takes about twice as long as + the default SLR method. However, LALR(1) allows you to handle + more complex grammars. For example, the ANSI C grammar + (in example/ansic) has 13 shift-reduce conflicts with SLR, but + only has 1 shift-reduce conflict with LALR(1). + +05/20/04: beazley + Added a __len__ method to parser production lists. Can + be used in parser rules like this: + + def p_somerule(p): + """a : B C D + | E F" + if (len(p) == 3): + # Must have been first rule + elif (len(p) == 2): + # Must be second rule + + Suggested by Joshua Gerth and others. + +Version 1.4 +------------------------------ +04/23/04: beazley + Incorporated a variety of patches contributed by Eric Raymond. + These include: + + 0. Cleans up some comments so they don't wrap on an 80-column display. + 1. Directs compiler errors to stderr where they belong. + 2. Implements and documents automatic line counting when \n is ignored. + 3. Changes the way progress messages are dumped when debugging is on. + The new format is both less verbose and conveys more information than + the old, including shift and reduce actions. + +04/23/04: beazley + Added a Python setup.py file to simply installation. Contributed + by Adam Kerrison. + +04/23/04: beazley + Added patches contributed by Adam Kerrison. + + - Some output is now only shown when debugging is enabled. This + means that PLY will be completely silent when not in debugging mode. + + - An optional parameter "write_tables" can be passed to yacc() to + control whether or not parsing tables are written. By default, + it is true, but it can be turned off if you don't want the yacc + table file. Note: disabling this will cause yacc() to regenerate + the parsing table each time. + +04/23/04: beazley + Added patches contributed by David McNab. This patch addes two + features: + + - The parser can be supplied as a class instead of a module. + For an example of this, see the example/classcalc directory. + + - Debugging output can be directed to a filename of the user's + choice. Use + + yacc(debugfile="somefile.out") + + +Version 1.3 +------------------------------ +12/10/02: jmdyck + Various minor adjustments to the code that Dave checked in today. + Updated test/yacc_{inf,unused}.exp to reflect today's changes. + +12/10/02: beazley + Incorporated a variety of minor bug fixes to empty production + handling and infinite recursion checking. Contributed by + Michael Dyck. + +12/10/02: beazley + Removed bogus recover() method call in yacc.restart() + +Version 1.2 +------------------------------ +11/27/02: beazley + Lexer and parser objects are now available as an attribute + of tokens and slices respectively. For example: + + def t_NUMBER(t): + r'\d+' + print t.lexer + + def p_expr_plus(t): + 'expr: expr PLUS expr' + print t.lexer + print t.parser + + This can be used for state management (if needed). + +10/31/02: beazley + Modified yacc.py to work with Python optimize mode. To make + this work, you need to use + + yacc.yacc(optimize=1) + + Furthermore, you need to first run Python in normal mode + to generate the necessary parsetab.py files. After that, + you can use python -O or python -OO. + + Note: optimized mode turns off a lot of error checking. + Only use when you are sure that your grammar is working. + Make sure parsetab.py is up to date! + +10/30/02: beazley + Added cloning of Lexer objects. For example: + + import copy + l = lex.lex() + lc = copy.copy(l) + + l.input("Some text") + lc.input("Some other text") + ... + + This might be useful if the same "lexer" is meant to + be used in different contexts---or if multiple lexers + are running concurrently. + +10/30/02: beazley + Fixed subtle bug with first set computation and empty productions. + Patch submitted by Michael Dyck. + +10/30/02: beazley + Fixed error messages to use "filename:line: message" instead + of "filename:line. message". This makes error reporting more + friendly to emacs. Patch submitted by François Pinard. + +10/30/02: beazley + Improvements to parser.out file. Terminals and nonterminals + are sorted instead of being printed in random order. + Patch submitted by François Pinard. + +10/30/02: beazley + Improvements to parser.out file output. Rules are now printed + in a way that's easier to understand. Contributed by Russ Cox. + +10/30/02: beazley + Added 'nonassoc' associativity support. This can be used + to disable the chaining of operators like a < b < c. + To use, simply specify 'nonassoc' in the precedence table + + precedence = ( + ('nonassoc', 'LESSTHAN', 'GREATERTHAN'), # Nonassociative operators + ('left', 'PLUS', 'MINUS'), + ('left', 'TIMES', 'DIVIDE'), + ('right', 'UMINUS'), # Unary minus operator + ) + + Patch contributed by Russ Cox. + +10/30/02: beazley + Modified the lexer to provide optional support for Python -O and -OO + modes. To make this work, Python *first* needs to be run in + unoptimized mode. This reads the lexing information and creates a + file "lextab.py". Then, run lex like this: + + # module foo.py + ... + ... + lex.lex(optimize=1) + + Once the lextab file has been created, subsequent calls to + lex.lex() will read data from the lextab file instead of using + introspection. In optimized mode (-O, -OO) everything should + work normally despite the loss of doc strings. + + To change the name of the file 'lextab.py' use the following: + + lex.lex(lextab="footab") + + (this creates a file footab.py) + + +Version 1.1 October 25, 2001 +------------------------------ + +10/25/01: beazley + Modified the table generator to produce much more compact data. + This should greatly reduce the size of the parsetab.py[c] file. + Caveat: the tables still need to be constructed so a little more + work is done in parsetab on import. + +10/25/01: beazley + There may be a possible bug in the cycle detector that reports errors + about infinite recursion. I'm having a little trouble tracking it + down, but if you get this problem, you can disable the cycle + detector as follows: + + yacc.yacc(check_recursion = 0) + +10/25/01: beazley + Fixed a bug in lex.py that sometimes caused illegal characters to be + reported incorrectly. Reported by Sverre Jørgensen. + +7/8/01 : beazley + Added a reference to the underlying lexer object when tokens are handled by + functions. The lexer is available as the 'lexer' attribute. This + was added to provide better lexing support for languages such as Fortran + where certain types of tokens can't be conveniently expressed as regular + expressions (and where the tokenizing function may want to perform a + little backtracking). Suggested by Pearu Peterson. + +6/20/01 : beazley + Modified yacc() function so that an optional starting symbol can be specified. + For example: + + yacc.yacc(start="statement") + + Normally yacc always treats the first production rule as the starting symbol. + However, if you are debugging your grammar it may be useful to specify + an alternative starting symbol. Idea suggested by Rich Salz. + +Version 1.0 June 18, 2001 +-------------------------- +Initial public offering + diff --git a/src/Mod/OpenSCAD/ply/PKG-INFO b/src/Mod/OpenSCAD/ply/PKG-INFO new file mode 100644 index 000000000..0080e0282 --- /dev/null +++ b/src/Mod/OpenSCAD/ply/PKG-INFO @@ -0,0 +1,22 @@ +Metadata-Version: 1.0 +Name: ply +Version: 3.4 +Summary: Python Lex & Yacc +Home-page: http://www.dabeaz.com/ply/ +Author: David Beazley +Author-email: dave@dabeaz.com +License: BSD +Description: + PLY is yet another implementation of lex and yacc for Python. Some notable + features include the fact that its implemented entirely in Python and it + uses LALR(1) parsing which is efficient and well suited for larger grammars. + + PLY provides most of the standard lex/yacc features including support for empty + productions, precedence rules, error recovery, and support for ambiguous grammars. + + PLY is extremely easy to use and provides very extensive error checking. + It is compatible with both Python 2 and Python 3. + +Platform: UNKNOWN +Classifier: Programming Language :: Python :: 3 +Classifier: Programming Language :: Python :: 2 diff --git a/src/Mod/OpenSCAD/ply/README b/src/Mod/OpenSCAD/ply/README new file mode 100644 index 000000000..f384d1a93 --- /dev/null +++ b/src/Mod/OpenSCAD/ply/README @@ -0,0 +1,271 @@ +PLY (Python Lex-Yacc) Version 3.4 + +Copyright (C) 2001-2011, +David M. Beazley (Dabeaz LLC) +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of the David Beazley or Dabeaz LLC may be used to + endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Introduction +============ + +PLY is a 100% Python implementation of the common parsing tools lex +and yacc. Here are a few highlights: + + - PLY is very closely modeled after traditional lex/yacc. + If you know how to use these tools in C, you will find PLY + to be similar. + + - PLY provides *very* extensive error reporting and diagnostic + information to assist in parser construction. The original + implementation was developed for instructional purposes. As + a result, the system tries to identify the most common types + of errors made by novice users. + + - PLY provides full support for empty productions, error recovery, + precedence specifiers, and moderately ambiguous grammars. + + - Parsing is based on LR-parsing which is fast, memory efficient, + better suited to large grammars, and which has a number of nice + properties when dealing with syntax errors and other parsing problems. + Currently, PLY builds its parsing tables using the LALR(1) + algorithm used in yacc. + + - PLY uses Python introspection features to build lexers and parsers. + This greatly simplifies the task of parser construction since it reduces + the number of files and eliminates the need to run a separate lex/yacc + tool before running your program. + + - PLY can be used to build parsers for "real" programming languages. + Although it is not ultra-fast due to its Python implementation, + PLY can be used to parse grammars consisting of several hundred + rules (as might be found for a language like C). The lexer and LR + parser are also reasonably efficient when parsing typically + sized programs. People have used PLY to build parsers for + C, C++, ADA, and other real programming languages. + +How to Use +========== + +PLY consists of two files : lex.py and yacc.py. These are contained +within the 'ply' directory which may also be used as a Python package. +To use PLY, simply copy the 'ply' directory to your project and import +lex and yacc from the associated 'ply' package. For example: + + import ply.lex as lex + import ply.yacc as yacc + +Alternatively, you can copy just the files lex.py and yacc.py +individually and use them as modules. For example: + + import lex + import yacc + +The file setup.py can be used to install ply using distutils. + +The file doc/ply.html contains complete documentation on how to use +the system. + +The example directory contains several different examples including a +PLY specification for ANSI C as given in K&R 2nd Ed. + +A simple example is found at the end of this document + +Requirements +============ +PLY requires the use of Python 2.2 or greater. However, you should +use the latest Python release if possible. It should work on just +about any platform. PLY has been tested with both CPython and Jython. +It also seems to work with IronPython. + +Resources +========= +More information about PLY can be obtained on the PLY webpage at: + + http://www.dabeaz.com/ply + +For a detailed overview of parsing theory, consult the excellent +book "Compilers : Principles, Techniques, and Tools" by Aho, Sethi, and +Ullman. The topics found in "Lex & Yacc" by Levine, Mason, and Brown +may also be useful. + +A Google group for PLY can be found at + + http://groups.google.com/group/ply-hack + +Acknowledgments +=============== +A special thanks is in order for all of the students in CS326 who +suffered through about 25 different versions of these tools :-). + +The CHANGES file acknowledges those who have contributed patches. + +Elias Ioup did the first implementation of LALR(1) parsing in PLY-1.x. +Andrew Waters and Markus Schoepflin were instrumental in reporting bugs +and testing a revised LALR(1) implementation for PLY-2.0. + +Special Note for PLY-3.0 +======================== +PLY-3.0 the first PLY release to support Python 3. However, backwards +compatibility with Python 2.2 is still preserved. PLY provides dual +Python 2/3 compatibility by restricting its implementation to a common +subset of basic language features. You should not convert PLY using +2to3--it is not necessary and may in fact break the implementation. + +Example +======= + +Here is a simple example showing a PLY implementation of a calculator +with variables. + +# ----------------------------------------------------------------------------- +# calc.py +# +# A simple calculator with variables. +# ----------------------------------------------------------------------------- + +tokens = ( + 'NAME','NUMBER', + 'PLUS','MINUS','TIMES','DIVIDE','EQUALS', + 'LPAREN','RPAREN', + ) + +# Tokens + +t_PLUS = r'\+' +t_MINUS = r'-' +t_TIMES = r'\*' +t_DIVIDE = r'/' +t_EQUALS = r'=' +t_LPAREN = r'\(' +t_RPAREN = r'\)' +t_NAME = r'[a-zA-Z_][a-zA-Z0-9_]*' + +def t_NUMBER(t): + r'\d+' + t.value = int(t.value) + return t + +# Ignored characters +t_ignore = " \t" + +def t_newline(t): + r'\n+' + t.lexer.lineno += t.value.count("\n") + +def t_error(t): + print("Illegal character '%s'" % t.value[0]) + t.lexer.skip(1) + +# Build the lexer +import ply.lex as lex +lex.lex() + +# Precedence rules for the arithmetic operators +precedence = ( + ('left','PLUS','MINUS'), + ('left','TIMES','DIVIDE'), + ('right','UMINUS'), + ) + +# dictionary of names (for storing variables) +names = { } + +def p_statement_assign(p): + 'statement : NAME EQUALS expression' + names[p[1]] = p[3] + +def p_statement_expr(p): + 'statement : expression' + print(p[1]) + +def p_expression_binop(p): + '''expression : expression PLUS expression + | expression MINUS expression + | expression TIMES expression + | expression DIVIDE expression''' + if p[2] == '+' : p[0] = p[1] + p[3] + elif p[2] == '-': p[0] = p[1] - p[3] + elif p[2] == '*': p[0] = p[1] * p[3] + elif p[2] == '/': p[0] = p[1] / p[3] + +def p_expression_uminus(p): + 'expression : MINUS expression %prec UMINUS' + p[0] = -p[2] + +def p_expression_group(p): + 'expression : LPAREN expression RPAREN' + p[0] = p[2] + +def p_expression_number(p): + 'expression : NUMBER' + p[0] = p[1] + +def p_expression_name(p): + 'expression : NAME' + try: + p[0] = names[p[1]] + except LookupError: + print("Undefined name '%s'" % p[1]) + p[0] = 0 + +def p_error(p): + print("Syntax error at '%s'" % p.value) + +import ply.yacc as yacc +yacc.yacc() + +while 1: + try: + s = raw_input('calc > ') # use input() on Python 3 + except EOFError: + break + yacc.parse(s) + + +Bug Reports and Patches +======================= +My goal with PLY is to simply have a decent lex/yacc implementation +for Python. As a general rule, I don't spend huge amounts of time +working on it unless I receive very specific bug reports and/or +patches to fix problems. I also try to incorporate submitted feature +requests and enhancements into each new version. To contact me about +bugs and/or new features, please send email to dave@dabeaz.com. + +In addition there is a Google group for discussing PLY related issues at + + http://groups.google.com/group/ply-hack + +-- Dave + + + + + + + + + diff --git a/src/Mod/OpenSCAD/ply/TODO b/src/Mod/OpenSCAD/ply/TODO new file mode 100644 index 000000000..f4800aacf --- /dev/null +++ b/src/Mod/OpenSCAD/ply/TODO @@ -0,0 +1,16 @@ +The PLY to-do list: + +1. Finish writing the C Preprocessor module. Started in the + file ply/cpp.py + +2. Create and document libraries of useful tokens. + +3. Expand the examples/yply tool that parses bison/yacc + files. + +4. Think of various diabolical things to do with the + new yacc internals. For example, it is now possible + to specify grammrs using completely different schemes + than the reflection approach used by PLY. + + diff --git a/src/Mod/OpenSCAD/ply/__init__.py b/src/Mod/OpenSCAD/ply/__init__.py new file mode 100644 index 000000000..853a98554 --- /dev/null +++ b/src/Mod/OpenSCAD/ply/__init__.py @@ -0,0 +1,4 @@ +# PLY package +# Author: David Beazley (dave@dabeaz.com) + +__all__ = ['lex','yacc'] diff --git a/src/Mod/OpenSCAD/ply/lex.py b/src/Mod/OpenSCAD/ply/lex.py new file mode 100644 index 000000000..bd32da932 --- /dev/null +++ b/src/Mod/OpenSCAD/ply/lex.py @@ -0,0 +1,1058 @@ +# ----------------------------------------------------------------------------- +# ply: lex.py +# +# Copyright (C) 2001-2011, +# David M. Beazley (Dabeaz LLC) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# * Neither the name of the David Beazley or Dabeaz LLC may be used to +# endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------------------------- + +__version__ = "3.4" +__tabversion__ = "3.2" # Version of table file used + +import re, sys, types, copy, os + +# This tuple contains known string types +try: + # Python 2.6 + StringTypes = (types.StringType, types.UnicodeType) +except AttributeError: + # Python 3.0 + StringTypes = (str, bytes) + +# Extract the code attribute of a function. Different implementations +# are for Python 2/3 compatibility. + +if sys.version_info[0] < 3: + def func_code(f): + return f.func_code +else: + def func_code(f): + return f.__code__ + +# This regular expression is used to match valid token names +_is_identifier = re.compile(r'^[a-zA-Z0-9_]+$') + +# Exception thrown when invalid token encountered and no default error +# handler is defined. + +class LexError(Exception): + def __init__(self,message,s): + self.args = (message,) + self.text = s + +# Token class. This class is used to represent the tokens produced. +class LexToken(object): + def __str__(self): + return "LexToken(%s,%r,%d,%d)" % (self.type,self.value,self.lineno,self.lexpos) + def __repr__(self): + return str(self) + +# This object is a stand-in for a logging object created by the +# logging module. + +class PlyLogger(object): + def __init__(self,f): + self.f = f + def critical(self,msg,*args,**kwargs): + self.f.write((msg % args) + "\n") + + def warning(self,msg,*args,**kwargs): + self.f.write("WARNING: "+ (msg % args) + "\n") + + def error(self,msg,*args,**kwargs): + self.f.write("ERROR: " + (msg % args) + "\n") + + info = critical + debug = critical + +# Null logger is used when no output is generated. Does nothing. +class NullLogger(object): + def __getattribute__(self,name): + return self + def __call__(self,*args,**kwargs): + return self + +# ----------------------------------------------------------------------------- +# === Lexing Engine === +# +# The following Lexer class implements the lexer runtime. There are only +# a few public methods and attributes: +# +# input() - Store a new string in the lexer +# token() - Get the next token +# clone() - Clone the lexer +# +# lineno - Current line number +# lexpos - Current position in the input string +# ----------------------------------------------------------------------------- + +class Lexer: + def __init__(self): + self.lexre = None # Master regular expression. This is a list of + # tuples (re,findex) where re is a compiled + # regular expression and findex is a list + # mapping regex group numbers to rules + self.lexretext = None # Current regular expression strings + self.lexstatere = {} # Dictionary mapping lexer states to master regexs + self.lexstateretext = {} # Dictionary mapping lexer states to regex strings + self.lexstaterenames = {} # Dictionary mapping lexer states to symbol names + self.lexstate = "INITIAL" # Current lexer state + self.lexstatestack = [] # Stack of lexer states + self.lexstateinfo = None # State information + self.lexstateignore = {} # Dictionary of ignored characters for each state + self.lexstateerrorf = {} # Dictionary of error functions for each state + self.lexreflags = 0 # Optional re compile flags + self.lexdata = None # Actual input data (as a string) + self.lexpos = 0 # Current position in input text + self.lexlen = 0 # Length of the input text + self.lexerrorf = None # Error rule (if any) + self.lextokens = None # List of valid tokens + self.lexignore = "" # Ignored characters + self.lexliterals = "" # Literal characters that can be passed through + self.lexmodule = None # Module + self.lineno = 1 # Current line number + self.lexoptimize = 0 # Optimized mode + + def clone(self,object=None): + c = copy.copy(self) + + # If the object parameter has been supplied, it means we are attaching the + # lexer to a new object. In this case, we have to rebind all methods in + # the lexstatere and lexstateerrorf tables. + + if object: + newtab = { } + for key, ritem in self.lexstatere.items(): + newre = [] + for cre, findex in ritem: + newfindex = [] + for f in findex: + if not f or not f[0]: + newfindex.append(f) + continue + newfindex.append((getattr(object,f[0].__name__),f[1])) + newre.append((cre,newfindex)) + newtab[key] = newre + c.lexstatere = newtab + c.lexstateerrorf = { } + for key, ef in self.lexstateerrorf.items(): + c.lexstateerrorf[key] = getattr(object,ef.__name__) + c.lexmodule = object + return c + + # ------------------------------------------------------------ + # writetab() - Write lexer information to a table file + # ------------------------------------------------------------ + def writetab(self,tabfile,outputdir=""): + if isinstance(tabfile,types.ModuleType): + return + basetabfilename = tabfile.split(".")[-1] + filename = os.path.join(outputdir,basetabfilename)+".py" + tf = open(filename,"w") + tf.write("# %s.py. This file automatically created by PLY (version %s). Don't edit!\n" % (tabfile,__version__)) + tf.write("_tabversion = %s\n" % repr(__version__)) + tf.write("_lextokens = %s\n" % repr(self.lextokens)) + tf.write("_lexreflags = %s\n" % repr(self.lexreflags)) + tf.write("_lexliterals = %s\n" % repr(self.lexliterals)) + tf.write("_lexstateinfo = %s\n" % repr(self.lexstateinfo)) + + tabre = { } + # Collect all functions in the initial state + initial = self.lexstatere["INITIAL"] + initialfuncs = [] + for part in initial: + for f in part[1]: + if f and f[0]: + initialfuncs.append(f) + + for key, lre in self.lexstatere.items(): + titem = [] + for i in range(len(lre)): + titem.append((self.lexstateretext[key][i],_funcs_to_names(lre[i][1],self.lexstaterenames[key][i]))) + tabre[key] = titem + + tf.write("_lexstatere = %s\n" % repr(tabre)) + tf.write("_lexstateignore = %s\n" % repr(self.lexstateignore)) + + taberr = { } + for key, ef in self.lexstateerrorf.items(): + if ef: + taberr[key] = ef.__name__ + else: + taberr[key] = None + tf.write("_lexstateerrorf = %s\n" % repr(taberr)) + tf.close() + + # ------------------------------------------------------------ + # readtab() - Read lexer information from a tab file + # ------------------------------------------------------------ + def readtab(self,tabfile,fdict): + if isinstance(tabfile,types.ModuleType): + lextab = tabfile + else: + if sys.version_info[0] < 3: + exec("import %s as lextab" % tabfile) + else: + env = { } + exec("import %s as lextab" % tabfile, env,env) + lextab = env['lextab'] + + if getattr(lextab,"_tabversion","0.0") != __version__: + raise ImportError("Inconsistent PLY version") + + self.lextokens = lextab._lextokens + self.lexreflags = lextab._lexreflags + self.lexliterals = lextab._lexliterals + self.lexstateinfo = lextab._lexstateinfo + self.lexstateignore = lextab._lexstateignore + self.lexstatere = { } + self.lexstateretext = { } + for key,lre in lextab._lexstatere.items(): + titem = [] + txtitem = [] + for i in range(len(lre)): + titem.append((re.compile(lre[i][0],lextab._lexreflags | re.VERBOSE),_names_to_funcs(lre[i][1],fdict))) + txtitem.append(lre[i][0]) + self.lexstatere[key] = titem + self.lexstateretext[key] = txtitem + self.lexstateerrorf = { } + for key,ef in lextab._lexstateerrorf.items(): + self.lexstateerrorf[key] = fdict[ef] + self.begin('INITIAL') + + # ------------------------------------------------------------ + # input() - Push a new string into the lexer + # ------------------------------------------------------------ + def input(self,s): + # Pull off the first character to see if s looks like a string + c = s[:1] + if not isinstance(c,StringTypes): + raise ValueError("Expected a string") + self.lexdata = s + self.lexpos = 0 + self.lexlen = len(s) + + # ------------------------------------------------------------ + # begin() - Changes the lexing state + # ------------------------------------------------------------ + def begin(self,state): + if not state in self.lexstatere: + raise ValueError("Undefined state") + self.lexre = self.lexstatere[state] + self.lexretext = self.lexstateretext[state] + self.lexignore = self.lexstateignore.get(state,"") + self.lexerrorf = self.lexstateerrorf.get(state,None) + self.lexstate = state + + # ------------------------------------------------------------ + # push_state() - Changes the lexing state and saves old on stack + # ------------------------------------------------------------ + def push_state(self,state): + self.lexstatestack.append(self.lexstate) + self.begin(state) + + # ------------------------------------------------------------ + # pop_state() - Restores the previous state + # ------------------------------------------------------------ + def pop_state(self): + self.begin(self.lexstatestack.pop()) + + # ------------------------------------------------------------ + # current_state() - Returns the current lexing state + # ------------------------------------------------------------ + def current_state(self): + return self.lexstate + + # ------------------------------------------------------------ + # skip() - Skip ahead n characters + # ------------------------------------------------------------ + def skip(self,n): + self.lexpos += n + + # ------------------------------------------------------------ + # opttoken() - Return the next token from the Lexer + # + # Note: This function has been carefully implemented to be as fast + # as possible. Don't make changes unless you really know what + # you are doing + # ------------------------------------------------------------ + def token(self): + # Make local copies of frequently referenced attributes + lexpos = self.lexpos + lexlen = self.lexlen + lexignore = self.lexignore + lexdata = self.lexdata + + while lexpos < lexlen: + # This code provides some short-circuit code for whitespace, tabs, and other ignored characters + if lexdata[lexpos] in lexignore: + lexpos += 1 + continue + + # Look for a regular expression match + for lexre,lexindexfunc in self.lexre: + m = lexre.match(lexdata,lexpos) + if not m: continue + + # Create a token for return + tok = LexToken() + tok.value = m.group() + tok.lineno = self.lineno + tok.lexpos = lexpos + + i = m.lastindex + func,tok.type = lexindexfunc[i] + + if not func: + # If no token type was set, it's an ignored token + if tok.type: + self.lexpos = m.end() + return tok + else: + lexpos = m.end() + break + + lexpos = m.end() + + # If token is processed by a function, call it + + tok.lexer = self # Set additional attributes useful in token rules + self.lexmatch = m + self.lexpos = lexpos + + newtok = func(tok) + + # Every function must return a token, if nothing, we just move to next token + if not newtok: + lexpos = self.lexpos # This is here in case user has updated lexpos. + lexignore = self.lexignore # This is here in case there was a state change + break + + # Verify type of the token. If not in the token map, raise an error + if not self.lexoptimize: + if not newtok.type in self.lextokens: + raise LexError("%s:%d: Rule '%s' returned an unknown token type '%s'" % ( + func_code(func).co_filename, func_code(func).co_firstlineno, + func.__name__, newtok.type),lexdata[lexpos:]) + + return newtok + else: + # No match, see if in literals + if lexdata[lexpos] in self.lexliterals: + tok = LexToken() + tok.value = lexdata[lexpos] + tok.lineno = self.lineno + tok.type = tok.value + tok.lexpos = lexpos + self.lexpos = lexpos + 1 + return tok + + # No match. Call t_error() if defined. + if self.lexerrorf: + tok = LexToken() + tok.value = self.lexdata[lexpos:] + tok.lineno = self.lineno + tok.type = "error" + tok.lexer = self + tok.lexpos = lexpos + self.lexpos = lexpos + newtok = self.lexerrorf(tok) + if lexpos == self.lexpos: + # Error method didn't change text position at all. This is an error. + raise LexError("Scanning error. Illegal character '%s'" % (lexdata[lexpos]), lexdata[lexpos:]) + lexpos = self.lexpos + if not newtok: continue + return newtok + + self.lexpos = lexpos + raise LexError("Illegal character '%s' at index %d" % (lexdata[lexpos],lexpos), lexdata[lexpos:]) + + self.lexpos = lexpos + 1 + if self.lexdata is None: + raise RuntimeError("No input string given with input()") + return None + + # Iterator interface + def __iter__(self): + return self + + def next(self): + t = self.token() + if t is None: + raise StopIteration + return t + + __next__ = next + +# ----------------------------------------------------------------------------- +# ==== Lex Builder === +# +# The functions and classes below are used to collect lexing information +# and build a Lexer object from it. +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# get_caller_module_dict() +# +# This function returns a dictionary containing all of the symbols defined within +# a caller further down the call stack. This is used to get the environment +# associated with the yacc() call if none was provided. +# ----------------------------------------------------------------------------- + +def get_caller_module_dict(levels): + try: + raise RuntimeError + except RuntimeError: + e,b,t = sys.exc_info() + f = t.tb_frame + while levels > 0: + f = f.f_back + levels -= 1 + ldict = f.f_globals.copy() + if f.f_globals != f.f_locals: + ldict.update(f.f_locals) + + return ldict + +# ----------------------------------------------------------------------------- +# _funcs_to_names() +# +# Given a list of regular expression functions, this converts it to a list +# suitable for output to a table file +# ----------------------------------------------------------------------------- + +def _funcs_to_names(funclist,namelist): + result = [] + for f,name in zip(funclist,namelist): + if f and f[0]: + result.append((name, f[1])) + else: + result.append(f) + return result + +# ----------------------------------------------------------------------------- +# _names_to_funcs() +# +# Given a list of regular expression function names, this converts it back to +# functions. +# ----------------------------------------------------------------------------- + +def _names_to_funcs(namelist,fdict): + result = [] + for n in namelist: + if n and n[0]: + result.append((fdict[n[0]],n[1])) + else: + result.append(n) + return result + +# ----------------------------------------------------------------------------- +# _form_master_re() +# +# This function takes a list of all of the regex components and attempts to +# form the master regular expression. Given limitations in the Python re +# module, it may be necessary to break the master regex into separate expressions. +# ----------------------------------------------------------------------------- + +def _form_master_re(relist,reflags,ldict,toknames): + if not relist: return [] + regex = "|".join(relist) + try: + lexre = re.compile(regex,re.VERBOSE | reflags) + + # Build the index to function map for the matching engine + lexindexfunc = [ None ] * (max(lexre.groupindex.values())+1) + lexindexnames = lexindexfunc[:] + + for f,i in lexre.groupindex.items(): + handle = ldict.get(f,None) + if type(handle) in (types.FunctionType, types.MethodType): + lexindexfunc[i] = (handle,toknames[f]) + lexindexnames[i] = f + elif handle is not None: + lexindexnames[i] = f + if f.find("ignore_") > 0: + lexindexfunc[i] = (None,None) + else: + lexindexfunc[i] = (None, toknames[f]) + + return [(lexre,lexindexfunc)],[regex],[lexindexnames] + except Exception: + m = int(len(relist)/2) + if m == 0: m = 1 + llist, lre, lnames = _form_master_re(relist[:m],reflags,ldict,toknames) + rlist, rre, rnames = _form_master_re(relist[m:],reflags,ldict,toknames) + return llist+rlist, lre+rre, lnames+rnames + +# ----------------------------------------------------------------------------- +# def _statetoken(s,names) +# +# Given a declaration name s of the form "t_" and a dictionary whose keys are +# state names, this function returns a tuple (states,tokenname) where states +# is a tuple of state names and tokenname is the name of the token. For example, +# calling this with s = "t_foo_bar_SPAM" might return (('foo','bar'),'SPAM') +# ----------------------------------------------------------------------------- + +def _statetoken(s,names): + nonstate = 1 + parts = s.split("_") + for i in range(1,len(parts)): + if not parts[i] in names and parts[i] != 'ANY': break + if i > 1: + states = tuple(parts[1:i]) + else: + states = ('INITIAL',) + + if 'ANY' in states: + states = tuple(names) + + tokenname = "_".join(parts[i:]) + return (states,tokenname) + + +# ----------------------------------------------------------------------------- +# LexerReflect() +# +# This class represents information needed to build a lexer as extracted from a +# user's input file. +# ----------------------------------------------------------------------------- +class LexerReflect(object): + def __init__(self,ldict,log=None,reflags=0): + self.ldict = ldict + self.error_func = None + self.tokens = [] + self.reflags = reflags + self.stateinfo = { 'INITIAL' : 'inclusive'} + self.files = {} + self.error = 0 + + if log is None: + self.log = PlyLogger(sys.stderr) + else: + self.log = log + + # Get all of the basic information + def get_all(self): + self.get_tokens() + self.get_literals() + self.get_states() + self.get_rules() + + # Validate all of the information + def validate_all(self): + self.validate_tokens() + self.validate_literals() + self.validate_rules() + return self.error + + # Get the tokens map + def get_tokens(self): + tokens = self.ldict.get("tokens",None) + if not tokens: + self.log.error("No token list is defined") + self.error = 1 + return + + if not isinstance(tokens,(list, tuple)): + self.log.error("tokens must be a list or tuple") + self.error = 1 + return + + if not tokens: + self.log.error("tokens is empty") + self.error = 1 + return + + self.tokens = tokens + + # Validate the tokens + def validate_tokens(self): + terminals = {} + for n in self.tokens: + if not _is_identifier.match(n): + self.log.error("Bad token name '%s'",n) + self.error = 1 + if n in terminals: + self.log.warning("Token '%s' multiply defined", n) + terminals[n] = 1 + + # Get the literals specifier + def get_literals(self): + self.literals = self.ldict.get("literals","") + + # Validate literals + def validate_literals(self): + try: + for c in self.literals: + if not isinstance(c,StringTypes) or len(c) > 1: + self.log.error("Invalid literal %s. Must be a single character", repr(c)) + self.error = 1 + continue + + except TypeError: + self.log.error("Invalid literals specification. literals must be a sequence of characters") + self.error = 1 + + def get_states(self): + self.states = self.ldict.get("states",None) + # Build statemap + if self.states: + if not isinstance(self.states,(tuple,list)): + self.log.error("states must be defined as a tuple or list") + self.error = 1 + else: + for s in self.states: + if not isinstance(s,tuple) or len(s) != 2: + self.log.error("Invalid state specifier %s. Must be a tuple (statename,'exclusive|inclusive')",repr(s)) + self.error = 1 + continue + name, statetype = s + if not isinstance(name,StringTypes): + self.log.error("State name %s must be a string", repr(name)) + self.error = 1 + continue + if not (statetype == 'inclusive' or statetype == 'exclusive'): + self.log.error("State type for state %s must be 'inclusive' or 'exclusive'",name) + self.error = 1 + continue + if name in self.stateinfo: + self.log.error("State '%s' already defined",name) + self.error = 1 + continue + self.stateinfo[name] = statetype + + # Get all of the symbols with a t_ prefix and sort them into various + # categories (functions, strings, error functions, and ignore characters) + + def get_rules(self): + tsymbols = [f for f in self.ldict if f[:2] == 't_' ] + + # Now build up a list of functions and a list of strings + + self.toknames = { } # Mapping of symbols to token names + self.funcsym = { } # Symbols defined as functions + self.strsym = { } # Symbols defined as strings + self.ignore = { } # Ignore strings by state + self.errorf = { } # Error functions by state + + for s in self.stateinfo: + self.funcsym[s] = [] + self.strsym[s] = [] + + if len(tsymbols) == 0: + self.log.error("No rules of the form t_rulename are defined") + self.error = 1 + return + + for f in tsymbols: + t = self.ldict[f] + states, tokname = _statetoken(f,self.stateinfo) + self.toknames[f] = tokname + + if hasattr(t,"__call__"): + if tokname == 'error': + for s in states: + self.errorf[s] = t + elif tokname == 'ignore': + line = func_code(t).co_firstlineno + file = func_code(t).co_filename + self.log.error("%s:%d: Rule '%s' must be defined as a string",file,line,t.__name__) + self.error = 1 + else: + for s in states: + self.funcsym[s].append((f,t)) + elif isinstance(t, StringTypes): + if tokname == 'ignore': + for s in states: + self.ignore[s] = t + if "\\" in t: + self.log.warning("%s contains a literal backslash '\\'",f) + + elif tokname == 'error': + self.log.error("Rule '%s' must be defined as a function", f) + self.error = 1 + else: + for s in states: + self.strsym[s].append((f,t)) + else: + self.log.error("%s not defined as a function or string", f) + self.error = 1 + + # Sort the functions by line number + for f in self.funcsym.values(): + if sys.version_info[0] < 3: + f.sort(lambda x,y: cmp(func_code(x[1]).co_firstlineno,func_code(y[1]).co_firstlineno)) + else: + # Python 3.0 + f.sort(key=lambda x: func_code(x[1]).co_firstlineno) + + # Sort the strings by regular expression length + for s in self.strsym.values(): + if sys.version_info[0] < 3: + s.sort(lambda x,y: (len(x[1]) < len(y[1])) - (len(x[1]) > len(y[1]))) + else: + # Python 3.0 + s.sort(key=lambda x: len(x[1]),reverse=True) + + # Validate all of the t_rules collected + def validate_rules(self): + for state in self.stateinfo: + # Validate all rules defined by functions + + + + for fname, f in self.funcsym[state]: + line = func_code(f).co_firstlineno + file = func_code(f).co_filename + self.files[file] = 1 + + tokname = self.toknames[fname] + if isinstance(f, types.MethodType): + reqargs = 2 + else: + reqargs = 1 + nargs = func_code(f).co_argcount + if nargs > reqargs: + self.log.error("%s:%d: Rule '%s' has too many arguments",file,line,f.__name__) + self.error = 1 + continue + + if nargs < reqargs: + self.log.error("%s:%d: Rule '%s' requires an argument", file,line,f.__name__) + self.error = 1 + continue + + if not f.__doc__: + self.log.error("%s:%d: No regular expression defined for rule '%s'",file,line,f.__name__) + self.error = 1 + continue + + try: + c = re.compile("(?P<%s>%s)" % (fname,f.__doc__), re.VERBOSE | self.reflags) + if c.match(""): + self.log.error("%s:%d: Regular expression for rule '%s' matches empty string", file,line,f.__name__) + self.error = 1 + except re.error: + _etype, e, _etrace = sys.exc_info() + self.log.error("%s:%d: Invalid regular expression for rule '%s'. %s", file,line,f.__name__,e) + if '#' in f.__doc__: + self.log.error("%s:%d. Make sure '#' in rule '%s' is escaped with '\\#'",file,line, f.__name__) + self.error = 1 + + # Validate all rules defined by strings + for name,r in self.strsym[state]: + tokname = self.toknames[name] + if tokname == 'error': + self.log.error("Rule '%s' must be defined as a function", name) + self.error = 1 + continue + + if not tokname in self.tokens and tokname.find("ignore_") < 0: + self.log.error("Rule '%s' defined for an unspecified token %s",name,tokname) + self.error = 1 + continue + + try: + c = re.compile("(?P<%s>%s)" % (name,r),re.VERBOSE | self.reflags) + if (c.match("")): + self.log.error("Regular expression for rule '%s' matches empty string",name) + self.error = 1 + except re.error: + _etype, e, _etrace = sys.exc_info() + self.log.error("Invalid regular expression for rule '%s'. %s",name,e) + if '#' in r: + self.log.error("Make sure '#' in rule '%s' is escaped with '\\#'",name) + self.error = 1 + + if not self.funcsym[state] and not self.strsym[state]: + self.log.error("No rules defined for state '%s'",state) + self.error = 1 + + # Validate the error function + efunc = self.errorf.get(state,None) + if efunc: + f = efunc + line = func_code(f).co_firstlineno + file = func_code(f).co_filename + self.files[file] = 1 + + if isinstance(f, types.MethodType): + reqargs = 2 + else: + reqargs = 1 + nargs = func_code(f).co_argcount + if nargs > reqargs: + self.log.error("%s:%d: Rule '%s' has too many arguments",file,line,f.__name__) + self.error = 1 + + if nargs < reqargs: + self.log.error("%s:%d: Rule '%s' requires an argument", file,line,f.__name__) + self.error = 1 + + for f in self.files: + self.validate_file(f) + + + # ----------------------------------------------------------------------------- + # validate_file() + # + # This checks to see if there are duplicated t_rulename() functions or strings + # in the parser input file. This is done using a simple regular expression + # match on each line in the given file. + # ----------------------------------------------------------------------------- + + def validate_file(self,filename): + import os.path + base,ext = os.path.splitext(filename) + if ext != '.py': return # No idea what the file is. Return OK + + try: + f = open(filename) + lines = f.readlines() + f.close() + except IOError: + return # Couldn't find the file. Don't worry about it + + fre = re.compile(r'\s*def\s+(t_[a-zA-Z_0-9]*)\(') + sre = re.compile(r'\s*(t_[a-zA-Z_0-9]*)\s*=') + + counthash = { } + linen = 1 + for l in lines: + m = fre.match(l) + if not m: + m = sre.match(l) + if m: + name = m.group(1) + prev = counthash.get(name) + if not prev: + counthash[name] = linen + else: + self.log.error("%s:%d: Rule %s redefined. Previously defined on line %d",filename,linen,name,prev) + self.error = 1 + linen += 1 + +# ----------------------------------------------------------------------------- +# lex(module) +# +# Build all of the regular expression rules from definitions in the supplied module +# ----------------------------------------------------------------------------- +def lex(module=None,object=None,debug=0,optimize=0,lextab="lextab",reflags=0,nowarn=0,outputdir="", debuglog=None, errorlog=None): + global lexer + ldict = None + stateinfo = { 'INITIAL' : 'inclusive'} + lexobj = Lexer() + lexobj.lexoptimize = optimize + global token,input + + if errorlog is None: + errorlog = PlyLogger(sys.stderr) + + if debug: + if debuglog is None: + debuglog = PlyLogger(sys.stderr) + + # Get the module dictionary used for the lexer + if object: module = object + + if module: + _items = [(k,getattr(module,k)) for k in dir(module)] + ldict = dict(_items) + else: + ldict = get_caller_module_dict(2) + + # Collect parser information from the dictionary + linfo = LexerReflect(ldict,log=errorlog,reflags=reflags) + linfo.get_all() + if not optimize: + if linfo.validate_all(): + raise SyntaxError("Can't build lexer") + + if optimize and lextab: + try: + lexobj.readtab(lextab,ldict) + token = lexobj.token + input = lexobj.input + lexer = lexobj + return lexobj + + except ImportError: + pass + + # Dump some basic debugging information + if debug: + debuglog.info("lex: tokens = %r", linfo.tokens) + debuglog.info("lex: literals = %r", linfo.literals) + debuglog.info("lex: states = %r", linfo.stateinfo) + + # Build a dictionary of valid token names + lexobj.lextokens = { } + for n in linfo.tokens: + lexobj.lextokens[n] = 1 + + # Get literals specification + if isinstance(linfo.literals,(list,tuple)): + lexobj.lexliterals = type(linfo.literals[0])().join(linfo.literals) + else: + lexobj.lexliterals = linfo.literals + + # Get the stateinfo dictionary + stateinfo = linfo.stateinfo + + regexs = { } + # Build the master regular expressions + for state in stateinfo: + regex_list = [] + + # Add rules defined by functions first + for fname, f in linfo.funcsym[state]: + line = func_code(f).co_firstlineno + file = func_code(f).co_filename + regex_list.append("(?P<%s>%s)" % (fname,f.__doc__)) + if debug: + debuglog.info("lex: Adding rule %s -> '%s' (state '%s')",fname,f.__doc__, state) + + # Now add all of the simple rules + for name,r in linfo.strsym[state]: + regex_list.append("(?P<%s>%s)" % (name,r)) + if debug: + debuglog.info("lex: Adding rule %s -> '%s' (state '%s')",name,r, state) + + regexs[state] = regex_list + + # Build the master regular expressions + + if debug: + debuglog.info("lex: ==== MASTER REGEXS FOLLOW ====") + + for state in regexs: + lexre, re_text, re_names = _form_master_re(regexs[state],reflags,ldict,linfo.toknames) + lexobj.lexstatere[state] = lexre + lexobj.lexstateretext[state] = re_text + lexobj.lexstaterenames[state] = re_names + if debug: + for i in range(len(re_text)): + debuglog.info("lex: state '%s' : regex[%d] = '%s'",state, i, re_text[i]) + + # For inclusive states, we need to add the regular expressions from the INITIAL state + for state,stype in stateinfo.items(): + if state != "INITIAL" and stype == 'inclusive': + lexobj.lexstatere[state].extend(lexobj.lexstatere['INITIAL']) + lexobj.lexstateretext[state].extend(lexobj.lexstateretext['INITIAL']) + lexobj.lexstaterenames[state].extend(lexobj.lexstaterenames['INITIAL']) + + lexobj.lexstateinfo = stateinfo + lexobj.lexre = lexobj.lexstatere["INITIAL"] + lexobj.lexretext = lexobj.lexstateretext["INITIAL"] + lexobj.lexreflags = reflags + + # Set up ignore variables + lexobj.lexstateignore = linfo.ignore + lexobj.lexignore = lexobj.lexstateignore.get("INITIAL","") + + # Set up error functions + lexobj.lexstateerrorf = linfo.errorf + lexobj.lexerrorf = linfo.errorf.get("INITIAL",None) + if not lexobj.lexerrorf: + errorlog.warning("No t_error rule is defined") + + # Check state information for ignore and error rules + for s,stype in stateinfo.items(): + if stype == 'exclusive': + if not s in linfo.errorf: + errorlog.warning("No error rule is defined for exclusive state '%s'", s) + if not s in linfo.ignore and lexobj.lexignore: + errorlog.warning("No ignore rule is defined for exclusive state '%s'", s) + elif stype == 'inclusive': + if not s in linfo.errorf: + linfo.errorf[s] = linfo.errorf.get("INITIAL",None) + if not s in linfo.ignore: + linfo.ignore[s] = linfo.ignore.get("INITIAL","") + + # Create global versions of the token() and input() functions + token = lexobj.token + input = lexobj.input + lexer = lexobj + + # If in optimize mode, we write the lextab + if lextab and optimize: + lexobj.writetab(lextab,outputdir) + + return lexobj + +# ----------------------------------------------------------------------------- +# runmain() +# +# This runs the lexer as a main program +# ----------------------------------------------------------------------------- + +def runmain(lexer=None,data=None): + if not data: + try: + filename = sys.argv[1] + f = open(filename) + data = f.read() + f.close() + except IndexError: + sys.stdout.write("Reading from standard input (type EOF to end):\n") + data = sys.stdin.read() + + if lexer: + _input = lexer.input + else: + _input = input + _input(data) + if lexer: + _token = lexer.token + else: + _token = token + + while 1: + tok = _token() + if not tok: break + sys.stdout.write("(%s,%r,%d,%d)\n" % (tok.type, tok.value, tok.lineno,tok.lexpos)) + +# ----------------------------------------------------------------------------- +# @TOKEN(regex) +# +# This decorator function can be used to set the regex expression on a function +# when its docstring might need to be set in an alternative way +# ----------------------------------------------------------------------------- + +def TOKEN(r): + def set_doc(f): + if hasattr(r,"__call__"): + f.__doc__ = r.__doc__ + else: + f.__doc__ = r + return f + return set_doc + +# Alternative spelling of the TOKEN decorator +Token = TOKEN + diff --git a/src/Mod/OpenSCAD/ply/setup.py b/src/Mod/OpenSCAD/ply/setup.py new file mode 100644 index 000000000..670cb3cc2 --- /dev/null +++ b/src/Mod/OpenSCAD/ply/setup.py @@ -0,0 +1,31 @@ +try: + from setuptools import setup +except ImportError: + from distutils.core import setup + +setup(name = "ply", + description="Python Lex & Yacc", + long_description = """ +PLY is yet another implementation of lex and yacc for Python. Some notable +features include the fact that its implemented entirely in Python and it +uses LALR(1) parsing which is efficient and well suited for larger grammars. + +PLY provides most of the standard lex/yacc features including support for empty +productions, precedence rules, error recovery, and support for ambiguous grammars. + +PLY is extremely easy to use and provides very extensive error checking. +It is compatible with both Python 2 and Python 3. +""", + license="""BSD""", + version = "3.4", + author = "David Beazley", + author_email = "dave@dabeaz.com", + maintainer = "David Beazley", + maintainer_email = "dave@dabeaz.com", + url = "http://www.dabeaz.com/ply/", + packages = ['ply'], + classifiers = [ + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 2', + ] + ) diff --git a/src/Mod/OpenSCAD/ply/yacc.py b/src/Mod/OpenSCAD/ply/yacc.py new file mode 100644 index 000000000..f70439ea5 --- /dev/null +++ b/src/Mod/OpenSCAD/ply/yacc.py @@ -0,0 +1,3276 @@ +# ----------------------------------------------------------------------------- +# ply: yacc.py +# +# Copyright (C) 2001-2011, +# David M. Beazley (Dabeaz LLC) +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# * Neither the name of the David Beazley or Dabeaz LLC may be used to +# endorse or promote products derived from this software without +# specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# ----------------------------------------------------------------------------- +# +# This implements an LR parser that is constructed from grammar rules defined +# as Python functions. The grammer is specified by supplying the BNF inside +# Python documentation strings. The inspiration for this technique was borrowed +# from John Aycock's Spark parsing system. PLY might be viewed as cross between +# Spark and the GNU bison utility. +# +# The current implementation is only somewhat object-oriented. The +# LR parser itself is defined in terms of an object (which allows multiple +# parsers to co-exist). However, most of the variables used during table +# construction are defined in terms of global variables. Users shouldn't +# notice unless they are trying to define multiple parsers at the same +# time using threads (in which case they should have their head examined). +# +# This implementation supports both SLR and LALR(1) parsing. LALR(1) +# support was originally implemented by Elias Ioup (ezioup@alumni.uchicago.edu), +# using the algorithm found in Aho, Sethi, and Ullman "Compilers: Principles, +# Techniques, and Tools" (The Dragon Book). LALR(1) has since been replaced +# by the more efficient DeRemer and Pennello algorithm. +# +# :::::::: WARNING ::::::: +# +# Construction of LR parsing tables is fairly complicated and expensive. +# To make this module run fast, a *LOT* of work has been put into +# optimization---often at the expensive of readability and what might +# consider to be good Python "coding style." Modify the code at your +# own risk! +# ---------------------------------------------------------------------------- + +__version__ = "3.4" +__tabversion__ = "3.2" # Table version + +#----------------------------------------------------------------------------- +# === User configurable parameters === +# +# Change these to modify the default behavior of yacc (if you wish) +#----------------------------------------------------------------------------- + +yaccdebug = 1 # Debugging mode. If set, yacc generates a + # a 'parser.out' file in the current directory + +debug_file = 'parser.out' # Default name of the debugging file +tab_module = 'parsetab' # Default name of the table module +default_lr = 'LALR' # Default LR table generation method + +error_count = 3 # Number of symbols that must be shifted to leave recovery mode + +yaccdevel = 0 # Set to True if developing yacc. This turns off optimized + # implementations of certain functions. + +resultlimit = 40 # Size limit of results when running in debug mode. + +pickle_protocol = 0 # Protocol to use when writing pickle files + +import re, types, sys, os.path + +# Compatibility function for python 2.6/3.0 +if sys.version_info[0] < 3: + def func_code(f): + return f.func_code +else: + def func_code(f): + return f.__code__ + +# Compatibility +try: + MAXINT = sys.maxint +except AttributeError: + MAXINT = sys.maxsize + +# Python 2.x/3.0 compatibility. +def load_ply_lex(): + if sys.version_info[0] < 3: + import lex + else: + import ply.lex as lex + return lex + +# This object is a stand-in for a logging object created by the +# logging module. PLY will use this by default to create things +# such as the parser.out file. If a user wants more detailed +# information, they can create their own logging object and pass +# it into PLY. + +class PlyLogger(object): + def __init__(self,f): + self.f = f + def debug(self,msg,*args,**kwargs): + self.f.write((msg % args) + "\n") + info = debug + + def warning(self,msg,*args,**kwargs): + self.f.write("WARNING: "+ (msg % args) + "\n") + + def error(self,msg,*args,**kwargs): + self.f.write("ERROR: " + (msg % args) + "\n") + + critical = debug + +# Null logger is used when no output is generated. Does nothing. +class NullLogger(object): + def __getattribute__(self,name): + return self + def __call__(self,*args,**kwargs): + return self + +# Exception raised for yacc-related errors +class YaccError(Exception): pass + +# Format the result message that the parser produces when running in debug mode. +def format_result(r): + repr_str = repr(r) + if '\n' in repr_str: repr_str = repr(repr_str) + if len(repr_str) > resultlimit: + repr_str = repr_str[:resultlimit]+" ..." + result = "<%s @ 0x%x> (%s)" % (type(r).__name__,id(r),repr_str) + return result + + +# Format stack entries when the parser is running in debug mode +def format_stack_entry(r): + repr_str = repr(r) + if '\n' in repr_str: repr_str = repr(repr_str) + if len(repr_str) < 16: + return repr_str + else: + return "<%s @ 0x%x>" % (type(r).__name__,id(r)) + +#----------------------------------------------------------------------------- +# === LR Parsing Engine === +# +# The following classes are used for the LR parser itself. These are not +# used during table construction and are independent of the actual LR +# table generation algorithm +#----------------------------------------------------------------------------- + +# This class is used to hold non-terminal grammar symbols during parsing. +# It normally has the following attributes set: +# .type = Grammar symbol type +# .value = Symbol value +# .lineno = Starting line number +# .endlineno = Ending line number (optional, set automatically) +# .lexpos = Starting lex position +# .endlexpos = Ending lex position (optional, set automatically) + +class YaccSymbol: + def __str__(self): return self.type + def __repr__(self): return str(self) + +# This class is a wrapper around the objects actually passed to each +# grammar rule. Index lookup and assignment actually assign the +# .value attribute of the underlying YaccSymbol object. +# The lineno() method returns the line number of a given +# item (or 0 if not defined). The linespan() method returns +# a tuple of (startline,endline) representing the range of lines +# for a symbol. The lexspan() method returns a tuple (lexpos,endlexpos) +# representing the range of positional information for a symbol. + +class YaccProduction: + def __init__(self,s,stack=None): + self.slice = s + self.stack = stack + self.lexer = None + self.parser= None + def __getitem__(self,n): + if n >= 0: return self.slice[n].value + else: return self.stack[n].value + + def __setitem__(self,n,v): + self.slice[n].value = v + + def __getslice__(self,i,j): + return [s.value for s in self.slice[i:j]] + + def __len__(self): + return len(self.slice) + + def lineno(self,n): + return getattr(self.slice[n],"lineno",0) + + def set_lineno(self,n,lineno): + self.slice[n].lineno = lineno + + def linespan(self,n): + startline = getattr(self.slice[n],"lineno",0) + endline = getattr(self.slice[n],"endlineno",startline) + return startline,endline + + def lexpos(self,n): + return getattr(self.slice[n],"lexpos",0) + + def lexspan(self,n): + startpos = getattr(self.slice[n],"lexpos",0) + endpos = getattr(self.slice[n],"endlexpos",startpos) + return startpos,endpos + + def error(self): + raise SyntaxError + + +# ----------------------------------------------------------------------------- +# == LRParser == +# +# The LR Parsing engine. +# ----------------------------------------------------------------------------- + +class LRParser: + def __init__(self,lrtab,errorf): + self.productions = lrtab.lr_productions + self.action = lrtab.lr_action + self.goto = lrtab.lr_goto + self.errorfunc = errorf + + def errok(self): + self.errorok = 1 + + def restart(self): + del self.statestack[:] + del self.symstack[:] + sym = YaccSymbol() + sym.type = '$end' + self.symstack.append(sym) + self.statestack.append(0) + + def parse(self,input=None,lexer=None,debug=0,tracking=0,tokenfunc=None): + if debug or yaccdevel: + if isinstance(debug,int): + debug = PlyLogger(sys.stderr) + return self.parsedebug(input,lexer,debug,tracking,tokenfunc) + elif tracking: + return self.parseopt(input,lexer,debug,tracking,tokenfunc) + else: + return self.parseopt_notrack(input,lexer,debug,tracking,tokenfunc) + + + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + # parsedebug(). + # + # This is the debugging enabled version of parse(). All changes made to the + # parsing engine should be made here. For the non-debugging version, + # copy this code to a method parseopt() and delete all of the sections + # enclosed in: + # + # #--! DEBUG + # statements + # #--! DEBUG + # + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + def parsedebug(self,input=None,lexer=None,debug=None,tracking=0,tokenfunc=None): + lookahead = None # Current lookahead symbol + lookaheadstack = [ ] # Stack of lookahead symbols + actions = self.action # Local reference to action table (to avoid lookup on self.) + goto = self.goto # Local reference to goto table (to avoid lookup on self.) + prod = self.productions # Local reference to production list (to avoid lookup on self.) + pslice = YaccProduction(None) # Production object passed to grammar rules + errorcount = 0 # Used during error recovery + + # --! DEBUG + debug.info("PLY: PARSE DEBUG START") + # --! DEBUG + + # If no lexer was given, we will try to use the lex module + if not lexer: + lex = load_ply_lex() + lexer = lex.lexer + + # Set up the lexer and parser objects on pslice + pslice.lexer = lexer + pslice.parser = self + + # If input was supplied, pass to lexer + if input is not None: + lexer.input(input) + + if tokenfunc is None: + # Tokenize function + get_token = lexer.token + else: + get_token = tokenfunc + + # Set up the state and symbol stacks + + statestack = [ ] # Stack of parsing states + self.statestack = statestack + symstack = [ ] # Stack of grammar symbols + self.symstack = symstack + + pslice.stack = symstack # Put in the production + errtoken = None # Err token + + # The start state is assumed to be (0,$end) + + statestack.append(0) + sym = YaccSymbol() + sym.type = "$end" + symstack.append(sym) + state = 0 + while 1: + # Get the next symbol on the input. If a lookahead symbol + # is already set, we just use that. Otherwise, we'll pull + # the next token off of the lookaheadstack or from the lexer + + # --! DEBUG + debug.debug('') + debug.debug('State : %s', state) + # --! DEBUG + + if not lookahead: + if not lookaheadstack: + lookahead = get_token() # Get the next token + else: + lookahead = lookaheadstack.pop() + if not lookahead: + lookahead = YaccSymbol() + lookahead.type = "$end" + + # --! DEBUG + debug.debug('Stack : %s', + ("%s . %s" % (" ".join([xx.type for xx in symstack][1:]), str(lookahead))).lstrip()) + # --! DEBUG + + # Check the action table + ltype = lookahead.type + t = actions[state].get(ltype) + + if t is not None: + if t > 0: + # shift a symbol on the stack + statestack.append(t) + state = t + + # --! DEBUG + debug.debug("Action : Shift and goto state %s", t) + # --! DEBUG + + symstack.append(lookahead) + lookahead = None + + # Decrease error count on successful shift + if errorcount: errorcount -=1 + continue + + if t < 0: + # reduce a symbol on the stack, emit a production + p = prod[-t] + pname = p.name + plen = p.len + + # Get production function + sym = YaccSymbol() + sym.type = pname # Production name + sym.value = None + + # --! DEBUG + if plen: + debug.info("Action : Reduce rule [%s] with %s and goto state %d", p.str, "["+",".join([format_stack_entry(_v.value) for _v in symstack[-plen:]])+"]",-t) + else: + debug.info("Action : Reduce rule [%s] with %s and goto state %d", p.str, [],-t) + + # --! DEBUG + + if plen: + targ = symstack[-plen-1:] + targ[0] = sym + + # --! TRACKING + if tracking: + t1 = targ[1] + sym.lineno = t1.lineno + sym.lexpos = t1.lexpos + t1 = targ[-1] + sym.endlineno = getattr(t1,"endlineno",t1.lineno) + sym.endlexpos = getattr(t1,"endlexpos",t1.lexpos) + + # --! TRACKING + + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + # The code enclosed in this section is duplicated + # below as a performance optimization. Make sure + # changes get made in both locations. + + pslice.slice = targ + + try: + # Call the grammar rule with our special slice object + del symstack[-plen:] + del statestack[-plen:] + p.callable(pslice) + # --! DEBUG + debug.info("Result : %s", format_result(pslice[0])) + # --! DEBUG + symstack.append(sym) + state = goto[statestack[-1]][pname] + statestack.append(state) + except SyntaxError: + # If an error was set. Enter error recovery state + lookaheadstack.append(lookahead) + symstack.pop() + statestack.pop() + state = statestack[-1] + sym.type = 'error' + lookahead = sym + errorcount = error_count + self.errorok = 0 + continue + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + else: + + # --! TRACKING + if tracking: + sym.lineno = lexer.lineno + sym.lexpos = lexer.lexpos + # --! TRACKING + + targ = [ sym ] + + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + # The code enclosed in this section is duplicated + # above as a performance optimization. Make sure + # changes get made in both locations. + + pslice.slice = targ + + try: + # Call the grammar rule with our special slice object + p.callable(pslice) + # --! DEBUG + debug.info("Result : %s", format_result(pslice[0])) + # --! DEBUG + symstack.append(sym) + state = goto[statestack[-1]][pname] + statestack.append(state) + except SyntaxError: + # If an error was set. Enter error recovery state + lookaheadstack.append(lookahead) + symstack.pop() + statestack.pop() + state = statestack[-1] + sym.type = 'error' + lookahead = sym + errorcount = error_count + self.errorok = 0 + continue + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + if t == 0: + n = symstack[-1] + result = getattr(n,"value",None) + # --! DEBUG + debug.info("Done : Returning %s", format_result(result)) + debug.info("PLY: PARSE DEBUG END") + # --! DEBUG + return result + + if t == None: + + # --! DEBUG + debug.error('Error : %s', + ("%s . %s" % (" ".join([xx.type for xx in symstack][1:]), str(lookahead))).lstrip()) + # --! DEBUG + + # We have some kind of parsing error here. To handle + # this, we are going to push the current token onto + # the tokenstack and replace it with an 'error' token. + # If there are any synchronization rules, they may + # catch it. + # + # In addition to pushing the error token, we call call + # the user defined p_error() function if this is the + # first syntax error. This function is only called if + # errorcount == 0. + if errorcount == 0 or self.errorok: + errorcount = error_count + self.errorok = 0 + errtoken = lookahead + if errtoken.type == "$end": + errtoken = None # End of file! + if self.errorfunc: + global errok,token,restart + errok = self.errok # Set some special functions available in error recovery + token = get_token + restart = self.restart + if errtoken and not hasattr(errtoken,'lexer'): + errtoken.lexer = lexer + tok = self.errorfunc(errtoken) + del errok, token, restart # Delete special functions + + if self.errorok: + # User must have done some kind of panic + # mode recovery on their own. The + # returned token is the next lookahead + lookahead = tok + errtoken = None + continue + else: + if errtoken: + if hasattr(errtoken,"lineno"): lineno = lookahead.lineno + else: lineno = 0 + if lineno: + sys.stderr.write("yacc: Syntax error at line %d, token=%s\n" % (lineno, errtoken.type)) + else: + sys.stderr.write("yacc: Syntax error, token=%s" % errtoken.type) + else: + sys.stderr.write("yacc: Parse error in input. EOF\n") + return + + else: + errorcount = error_count + + # case 1: the statestack only has 1 entry on it. If we're in this state, the + # entire parse has been rolled back and we're completely hosed. The token is + # discarded and we just keep going. + + if len(statestack) <= 1 and lookahead.type != "$end": + lookahead = None + errtoken = None + state = 0 + # Nuke the pushback stack + del lookaheadstack[:] + continue + + # case 2: the statestack has a couple of entries on it, but we're + # at the end of the file. nuke the top entry and generate an error token + + # Start nuking entries on the stack + if lookahead.type == "$end": + # Whoa. We're really hosed here. Bail out + return + + if lookahead.type != 'error': + sym = symstack[-1] + if sym.type == 'error': + # Hmmm. Error is on top of stack, we'll just nuke input + # symbol and continue + lookahead = None + continue + t = YaccSymbol() + t.type = 'error' + if hasattr(lookahead,"lineno"): + t.lineno = lookahead.lineno + t.value = lookahead + lookaheadstack.append(lookahead) + lookahead = t + else: + symstack.pop() + statestack.pop() + state = statestack[-1] # Potential bug fix + + continue + + # Call an error function here + raise RuntimeError("yacc: internal parser error!!!\n") + + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + # parseopt(). + # + # Optimized version of parse() method. DO NOT EDIT THIS CODE DIRECTLY. + # Edit the debug version above, then copy any modifications to the method + # below while removing #--! DEBUG sections. + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + + def parseopt(self,input=None,lexer=None,debug=0,tracking=0,tokenfunc=None): + lookahead = None # Current lookahead symbol + lookaheadstack = [ ] # Stack of lookahead symbols + actions = self.action # Local reference to action table (to avoid lookup on self.) + goto = self.goto # Local reference to goto table (to avoid lookup on self.) + prod = self.productions # Local reference to production list (to avoid lookup on self.) + pslice = YaccProduction(None) # Production object passed to grammar rules + errorcount = 0 # Used during error recovery + + # If no lexer was given, we will try to use the lex module + if not lexer: + lex = load_ply_lex() + lexer = lex.lexer + + # Set up the lexer and parser objects on pslice + pslice.lexer = lexer + pslice.parser = self + + # If input was supplied, pass to lexer + if input is not None: + lexer.input(input) + + if tokenfunc is None: + # Tokenize function + get_token = lexer.token + else: + get_token = tokenfunc + + # Set up the state and symbol stacks + + statestack = [ ] # Stack of parsing states + self.statestack = statestack + symstack = [ ] # Stack of grammar symbols + self.symstack = symstack + + pslice.stack = symstack # Put in the production + errtoken = None # Err token + + # The start state is assumed to be (0,$end) + + statestack.append(0) + sym = YaccSymbol() + sym.type = '$end' + symstack.append(sym) + state = 0 + while 1: + # Get the next symbol on the input. If a lookahead symbol + # is already set, we just use that. Otherwise, we'll pull + # the next token off of the lookaheadstack or from the lexer + + if not lookahead: + if not lookaheadstack: + lookahead = get_token() # Get the next token + else: + lookahead = lookaheadstack.pop() + if not lookahead: + lookahead = YaccSymbol() + lookahead.type = '$end' + + # Check the action table + ltype = lookahead.type + t = actions[state].get(ltype) + + if t is not None: + if t > 0: + # shift a symbol on the stack + statestack.append(t) + state = t + + symstack.append(lookahead) + lookahead = None + + # Decrease error count on successful shift + if errorcount: errorcount -=1 + continue + + if t < 0: + # reduce a symbol on the stack, emit a production + p = prod[-t] + pname = p.name + plen = p.len + + # Get production function + sym = YaccSymbol() + sym.type = pname # Production name + sym.value = None + + if plen: + targ = symstack[-plen-1:] + targ[0] = sym + + # --! TRACKING + if tracking: + t1 = targ[1] + sym.lineno = t1.lineno + sym.lexpos = t1.lexpos + t1 = targ[-1] + sym.endlineno = getattr(t1,"endlineno",t1.lineno) + sym.endlexpos = getattr(t1,"endlexpos",t1.lexpos) + + # --! TRACKING + + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + # The code enclosed in this section is duplicated + # below as a performance optimization. Make sure + # changes get made in both locations. + + pslice.slice = targ + + try: + # Call the grammar rule with our special slice object + del symstack[-plen:] + del statestack[-plen:] + p.callable(pslice) + symstack.append(sym) + state = goto[statestack[-1]][pname] + statestack.append(state) + except SyntaxError: + # If an error was set. Enter error recovery state + lookaheadstack.append(lookahead) + symstack.pop() + statestack.pop() + state = statestack[-1] + sym.type = 'error' + lookahead = sym + errorcount = error_count + self.errorok = 0 + continue + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + else: + + # --! TRACKING + if tracking: + sym.lineno = lexer.lineno + sym.lexpos = lexer.lexpos + # --! TRACKING + + targ = [ sym ] + + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + # The code enclosed in this section is duplicated + # above as a performance optimization. Make sure + # changes get made in both locations. + + pslice.slice = targ + + try: + # Call the grammar rule with our special slice object + p.callable(pslice) + symstack.append(sym) + state = goto[statestack[-1]][pname] + statestack.append(state) + except SyntaxError: + # If an error was set. Enter error recovery state + lookaheadstack.append(lookahead) + symstack.pop() + statestack.pop() + state = statestack[-1] + sym.type = 'error' + lookahead = sym + errorcount = error_count + self.errorok = 0 + continue + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + if t == 0: + n = symstack[-1] + return getattr(n,"value",None) + + if t == None: + + # We have some kind of parsing error here. To handle + # this, we are going to push the current token onto + # the tokenstack and replace it with an 'error' token. + # If there are any synchronization rules, they may + # catch it. + # + # In addition to pushing the error token, we call call + # the user defined p_error() function if this is the + # first syntax error. This function is only called if + # errorcount == 0. + if errorcount == 0 or self.errorok: + errorcount = error_count + self.errorok = 0 + errtoken = lookahead + if errtoken.type == '$end': + errtoken = None # End of file! + if self.errorfunc: + global errok,token,restart + errok = self.errok # Set some special functions available in error recovery + token = get_token + restart = self.restart + if errtoken and not hasattr(errtoken,'lexer'): + errtoken.lexer = lexer + tok = self.errorfunc(errtoken) + del errok, token, restart # Delete special functions + + if self.errorok: + # User must have done some kind of panic + # mode recovery on their own. The + # returned token is the next lookahead + lookahead = tok + errtoken = None + continue + else: + if errtoken: + if hasattr(errtoken,"lineno"): lineno = lookahead.lineno + else: lineno = 0 + if lineno: + sys.stderr.write("yacc: Syntax error at line %d, token=%s\n" % (lineno, errtoken.type)) + else: + sys.stderr.write("yacc: Syntax error, token=%s" % errtoken.type) + else: + sys.stderr.write("yacc: Parse error in input. EOF\n") + return + + else: + errorcount = error_count + + # case 1: the statestack only has 1 entry on it. If we're in this state, the + # entire parse has been rolled back and we're completely hosed. The token is + # discarded and we just keep going. + + if len(statestack) <= 1 and lookahead.type != '$end': + lookahead = None + errtoken = None + state = 0 + # Nuke the pushback stack + del lookaheadstack[:] + continue + + # case 2: the statestack has a couple of entries on it, but we're + # at the end of the file. nuke the top entry and generate an error token + + # Start nuking entries on the stack + if lookahead.type == '$end': + # Whoa. We're really hosed here. Bail out + return + + if lookahead.type != 'error': + sym = symstack[-1] + if sym.type == 'error': + # Hmmm. Error is on top of stack, we'll just nuke input + # symbol and continue + lookahead = None + continue + t = YaccSymbol() + t.type = 'error' + if hasattr(lookahead,"lineno"): + t.lineno = lookahead.lineno + t.value = lookahead + lookaheadstack.append(lookahead) + lookahead = t + else: + symstack.pop() + statestack.pop() + state = statestack[-1] # Potential bug fix + + continue + + # Call an error function here + raise RuntimeError("yacc: internal parser error!!!\n") + + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + # parseopt_notrack(). + # + # Optimized version of parseopt() with line number tracking removed. + # DO NOT EDIT THIS CODE DIRECTLY. Copy the optimized version and remove + # code in the #--! TRACKING sections + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + def parseopt_notrack(self,input=None,lexer=None,debug=0,tracking=0,tokenfunc=None): + lookahead = None # Current lookahead symbol + lookaheadstack = [ ] # Stack of lookahead symbols + actions = self.action # Local reference to action table (to avoid lookup on self.) + goto = self.goto # Local reference to goto table (to avoid lookup on self.) + prod = self.productions # Local reference to production list (to avoid lookup on self.) + pslice = YaccProduction(None) # Production object passed to grammar rules + errorcount = 0 # Used during error recovery + + # If no lexer was given, we will try to use the lex module + if not lexer: + lex = load_ply_lex() + lexer = lex.lexer + + # Set up the lexer and parser objects on pslice + pslice.lexer = lexer + pslice.parser = self + + # If input was supplied, pass to lexer + if input is not None: + lexer.input(input) + + if tokenfunc is None: + # Tokenize function + get_token = lexer.token + else: + get_token = tokenfunc + + # Set up the state and symbol stacks + + statestack = [ ] # Stack of parsing states + self.statestack = statestack + symstack = [ ] # Stack of grammar symbols + self.symstack = symstack + + pslice.stack = symstack # Put in the production + errtoken = None # Err token + + # The start state is assumed to be (0,$end) + + statestack.append(0) + sym = YaccSymbol() + sym.type = '$end' + symstack.append(sym) + state = 0 + while 1: + # Get the next symbol on the input. If a lookahead symbol + # is already set, we just use that. Otherwise, we'll pull + # the next token off of the lookaheadstack or from the lexer + + if not lookahead: + if not lookaheadstack: + lookahead = get_token() # Get the next token + else: + lookahead = lookaheadstack.pop() + if not lookahead: + lookahead = YaccSymbol() + lookahead.type = '$end' + + # Check the action table + ltype = lookahead.type + t = actions[state].get(ltype) + + if t is not None: + if t > 0: + # shift a symbol on the stack + statestack.append(t) + state = t + + symstack.append(lookahead) + lookahead = None + + # Decrease error count on successful shift + if errorcount: errorcount -=1 + continue + + if t < 0: + # reduce a symbol on the stack, emit a production + p = prod[-t] + pname = p.name + plen = p.len + + # Get production function + sym = YaccSymbol() + sym.type = pname # Production name + sym.value = None + + if plen: + targ = symstack[-plen-1:] + targ[0] = sym + + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + # The code enclosed in this section is duplicated + # below as a performance optimization. Make sure + # changes get made in both locations. + + pslice.slice = targ + + try: + # Call the grammar rule with our special slice object + del symstack[-plen:] + del statestack[-plen:] + p.callable(pslice) + symstack.append(sym) + state = goto[statestack[-1]][pname] + statestack.append(state) + except SyntaxError: + # If an error was set. Enter error recovery state + lookaheadstack.append(lookahead) + symstack.pop() + statestack.pop() + state = statestack[-1] + sym.type = 'error' + lookahead = sym + errorcount = error_count + self.errorok = 0 + continue + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + else: + + targ = [ sym ] + + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + # The code enclosed in this section is duplicated + # above as a performance optimization. Make sure + # changes get made in both locations. + + pslice.slice = targ + + try: + # Call the grammar rule with our special slice object + p.callable(pslice) + symstack.append(sym) + state = goto[statestack[-1]][pname] + statestack.append(state) + except SyntaxError: + # If an error was set. Enter error recovery state + lookaheadstack.append(lookahead) + symstack.pop() + statestack.pop() + state = statestack[-1] + sym.type = 'error' + lookahead = sym + errorcount = error_count + self.errorok = 0 + continue + # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + if t == 0: + n = symstack[-1] + return getattr(n,"value",None) + + if t == None: + + # We have some kind of parsing error here. To handle + # this, we are going to push the current token onto + # the tokenstack and replace it with an 'error' token. + # If there are any synchronization rules, they may + # catch it. + # + # In addition to pushing the error token, we call call + # the user defined p_error() function if this is the + # first syntax error. This function is only called if + # errorcount == 0. + if errorcount == 0 or self.errorok: + errorcount = error_count + self.errorok = 0 + errtoken = lookahead + if errtoken.type == '$end': + errtoken = None # End of file! + if self.errorfunc: + global errok,token,restart + errok = self.errok # Set some special functions available in error recovery + token = get_token + restart = self.restart + if errtoken and not hasattr(errtoken,'lexer'): + errtoken.lexer = lexer + tok = self.errorfunc(errtoken) + del errok, token, restart # Delete special functions + + if self.errorok: + # User must have done some kind of panic + # mode recovery on their own. The + # returned token is the next lookahead + lookahead = tok + errtoken = None + continue + else: + if errtoken: + if hasattr(errtoken,"lineno"): lineno = lookahead.lineno + else: lineno = 0 + if lineno: + sys.stderr.write("yacc: Syntax error at line %d, token=%s\n" % (lineno, errtoken.type)) + else: + sys.stderr.write("yacc: Syntax error, token=%s" % errtoken.type) + else: + sys.stderr.write("yacc: Parse error in input. EOF\n") + return + + else: + errorcount = error_count + + # case 1: the statestack only has 1 entry on it. If we're in this state, the + # entire parse has been rolled back and we're completely hosed. The token is + # discarded and we just keep going. + + if len(statestack) <= 1 and lookahead.type != '$end': + lookahead = None + errtoken = None + state = 0 + # Nuke the pushback stack + del lookaheadstack[:] + continue + + # case 2: the statestack has a couple of entries on it, but we're + # at the end of the file. nuke the top entry and generate an error token + + # Start nuking entries on the stack + if lookahead.type == '$end': + # Whoa. We're really hosed here. Bail out + return + + if lookahead.type != 'error': + sym = symstack[-1] + if sym.type == 'error': + # Hmmm. Error is on top of stack, we'll just nuke input + # symbol and continue + lookahead = None + continue + t = YaccSymbol() + t.type = 'error' + if hasattr(lookahead,"lineno"): + t.lineno = lookahead.lineno + t.value = lookahead + lookaheadstack.append(lookahead) + lookahead = t + else: + symstack.pop() + statestack.pop() + state = statestack[-1] # Potential bug fix + + continue + + # Call an error function here + raise RuntimeError("yacc: internal parser error!!!\n") + +# ----------------------------------------------------------------------------- +# === Grammar Representation === +# +# The following functions, classes, and variables are used to represent and +# manipulate the rules that make up a grammar. +# ----------------------------------------------------------------------------- + +import re + +# regex matching identifiers +_is_identifier = re.compile(r'^[a-zA-Z0-9_-]+$') + +# ----------------------------------------------------------------------------- +# class Production: +# +# This class stores the raw information about a single production or grammar rule. +# A grammar rule refers to a specification such as this: +# +# expr : expr PLUS term +# +# Here are the basic attributes defined on all productions +# +# name - Name of the production. For example 'expr' +# prod - A list of symbols on the right side ['expr','PLUS','term'] +# prec - Production precedence level +# number - Production number. +# func - Function that executes on reduce +# file - File where production function is defined +# lineno - Line number where production function is defined +# +# The following attributes are defined or optional. +# +# len - Length of the production (number of symbols on right hand side) +# usyms - Set of unique symbols found in the production +# ----------------------------------------------------------------------------- + +class Production(object): + reduced = 0 + def __init__(self,number,name,prod,precedence=('right',0),func=None,file='',line=0): + self.name = name + self.prod = tuple(prod) + self.number = number + self.func = func + self.callable = None + self.file = file + self.line = line + self.prec = precedence + + # Internal settings used during table construction + + self.len = len(self.prod) # Length of the production + + # Create a list of unique production symbols used in the production + self.usyms = [ ] + for s in self.prod: + if s not in self.usyms: + self.usyms.append(s) + + # List of all LR items for the production + self.lr_items = [] + self.lr_next = None + + # Create a string representation + if self.prod: + self.str = "%s -> %s" % (self.name," ".join(self.prod)) + else: + self.str = "%s -> " % self.name + + def __str__(self): + return self.str + + def __repr__(self): + return "Production("+str(self)+")" + + def __len__(self): + return len(self.prod) + + def __nonzero__(self): + return 1 + + def __getitem__(self,index): + return self.prod[index] + + # Return the nth lr_item from the production (or None if at the end) + def lr_item(self,n): + if n > len(self.prod): return None + p = LRItem(self,n) + + # Precompute the list of productions immediately following. Hack. Remove later + try: + p.lr_after = Prodnames[p.prod[n+1]] + except (IndexError,KeyError): + p.lr_after = [] + try: + p.lr_before = p.prod[n-1] + except IndexError: + p.lr_before = None + + return p + + # Bind the production function name to a callable + def bind(self,pdict): + if self.func: + self.callable = pdict[self.func] + +# This class serves as a minimal standin for Production objects when +# reading table data from files. It only contains information +# actually used by the LR parsing engine, plus some additional +# debugging information. +class MiniProduction(object): + def __init__(self,str,name,len,func,file,line): + self.name = name + self.len = len + self.func = func + self.callable = None + self.file = file + self.line = line + self.str = str + def __str__(self): + return self.str + def __repr__(self): + return "MiniProduction(%s)" % self.str + + # Bind the production function name to a callable + def bind(self,pdict): + if self.func: + self.callable = pdict[self.func] + + +# ----------------------------------------------------------------------------- +# class LRItem +# +# This class represents a specific stage of parsing a production rule. For +# example: +# +# expr : expr . PLUS term +# +# In the above, the "." represents the current location of the parse. Here +# basic attributes: +# +# name - Name of the production. For example 'expr' +# prod - A list of symbols on the right side ['expr','.', 'PLUS','term'] +# number - Production number. +# +# lr_next Next LR item. Example, if we are ' expr -> expr . PLUS term' +# then lr_next refers to 'expr -> expr PLUS . term' +# lr_index - LR item index (location of the ".") in the prod list. +# lookaheads - LALR lookahead symbols for this item +# len - Length of the production (number of symbols on right hand side) +# lr_after - List of all productions that immediately follow +# lr_before - Grammar symbol immediately before +# ----------------------------------------------------------------------------- + +class LRItem(object): + def __init__(self,p,n): + self.name = p.name + self.prod = list(p.prod) + self.number = p.number + self.lr_index = n + self.lookaheads = { } + self.prod.insert(n,".") + self.prod = tuple(self.prod) + self.len = len(self.prod) + self.usyms = p.usyms + + def __str__(self): + if self.prod: + s = "%s -> %s" % (self.name," ".join(self.prod)) + else: + s = "%s -> " % self.name + return s + + def __repr__(self): + return "LRItem("+str(self)+")" + +# ----------------------------------------------------------------------------- +# rightmost_terminal() +# +# Return the rightmost terminal from a list of symbols. Used in add_production() +# ----------------------------------------------------------------------------- +def rightmost_terminal(symbols, terminals): + i = len(symbols) - 1 + while i >= 0: + if symbols[i] in terminals: + return symbols[i] + i -= 1 + return None + +# ----------------------------------------------------------------------------- +# === GRAMMAR CLASS === +# +# The following class represents the contents of the specified grammar along +# with various computed properties such as first sets, follow sets, LR items, etc. +# This data is used for critical parts of the table generation process later. +# ----------------------------------------------------------------------------- + +class GrammarError(YaccError): pass + +class Grammar(object): + def __init__(self,terminals): + self.Productions = [None] # A list of all of the productions. The first + # entry is always reserved for the purpose of + # building an augmented grammar + + self.Prodnames = { } # A dictionary mapping the names of nonterminals to a list of all + # productions of that nonterminal. + + self.Prodmap = { } # A dictionary that is only used to detect duplicate + # productions. + + self.Terminals = { } # A dictionary mapping the names of terminal symbols to a + # list of the rules where they are used. + + for term in terminals: + self.Terminals[term] = [] + + self.Terminals['error'] = [] + + self.Nonterminals = { } # A dictionary mapping names of nonterminals to a list + # of rule numbers where they are used. + + self.First = { } # A dictionary of precomputed FIRST(x) symbols + + self.Follow = { } # A dictionary of precomputed FOLLOW(x) symbols + + self.Precedence = { } # Precedence rules for each terminal. Contains tuples of the + # form ('right',level) or ('nonassoc', level) or ('left',level) + + self.UsedPrecedence = { } # Precedence rules that were actually used by the grammer. + # This is only used to provide error checking and to generate + # a warning about unused precedence rules. + + self.Start = None # Starting symbol for the grammar + + + def __len__(self): + return len(self.Productions) + + def __getitem__(self,index): + return self.Productions[index] + + # ----------------------------------------------------------------------------- + # set_precedence() + # + # Sets the precedence for a given terminal. assoc is the associativity such as + # 'left','right', or 'nonassoc'. level is a numeric level. + # + # ----------------------------------------------------------------------------- + + def set_precedence(self,term,assoc,level): + assert self.Productions == [None],"Must call set_precedence() before add_production()" + if term in self.Precedence: + raise GrammarError("Precedence already specified for terminal '%s'" % term) + if assoc not in ['left','right','nonassoc']: + raise GrammarError("Associativity must be one of 'left','right', or 'nonassoc'") + self.Precedence[term] = (assoc,level) + + # ----------------------------------------------------------------------------- + # add_production() + # + # Given an action function, this function assembles a production rule and + # computes its precedence level. + # + # The production rule is supplied as a list of symbols. For example, + # a rule such as 'expr : expr PLUS term' has a production name of 'expr' and + # symbols ['expr','PLUS','term']. + # + # Precedence is determined by the precedence of the right-most non-terminal + # or the precedence of a terminal specified by %prec. + # + # A variety of error checks are performed to make sure production symbols + # are valid and that %prec is used correctly. + # ----------------------------------------------------------------------------- + + def add_production(self,prodname,syms,func=None,file='',line=0): + + if prodname in self.Terminals: + raise GrammarError("%s:%d: Illegal rule name '%s'. Already defined as a token" % (file,line,prodname)) + if prodname == 'error': + raise GrammarError("%s:%d: Illegal rule name '%s'. error is a reserved word" % (file,line,prodname)) + if not _is_identifier.match(prodname): + raise GrammarError("%s:%d: Illegal rule name '%s'" % (file,line,prodname)) + + # Look for literal tokens + for n,s in enumerate(syms): + if s[0] in "'\"": + try: + c = eval(s) + if (len(c) > 1): + raise GrammarError("%s:%d: Literal token %s in rule '%s' may only be a single character" % (file,line,s, prodname)) + if not c in self.Terminals: + self.Terminals[c] = [] + syms[n] = c + continue + except SyntaxError: + pass + if not _is_identifier.match(s) and s != '%prec': + raise GrammarError("%s:%d: Illegal name '%s' in rule '%s'" % (file,line,s, prodname)) + + # Determine the precedence level + if '%prec' in syms: + if syms[-1] == '%prec': + raise GrammarError("%s:%d: Syntax error. Nothing follows %%prec" % (file,line)) + if syms[-2] != '%prec': + raise GrammarError("%s:%d: Syntax error. %%prec can only appear at the end of a grammar rule" % (file,line)) + precname = syms[-1] + prodprec = self.Precedence.get(precname,None) + if not prodprec: + raise GrammarError("%s:%d: Nothing known about the precedence of '%s'" % (file,line,precname)) + else: + self.UsedPrecedence[precname] = 1 + del syms[-2:] # Drop %prec from the rule + else: + # If no %prec, precedence is determined by the rightmost terminal symbol + precname = rightmost_terminal(syms,self.Terminals) + prodprec = self.Precedence.get(precname,('right',0)) + + # See if the rule is already in the rulemap + map = "%s -> %s" % (prodname,syms) + if map in self.Prodmap: + m = self.Prodmap[map] + raise GrammarError("%s:%d: Duplicate rule %s. " % (file,line, m) + + "Previous definition at %s:%d" % (m.file, m.line)) + + # From this point on, everything is valid. Create a new Production instance + pnumber = len(self.Productions) + if not prodname in self.Nonterminals: + self.Nonterminals[prodname] = [ ] + + # Add the production number to Terminals and Nonterminals + for t in syms: + if t in self.Terminals: + self.Terminals[t].append(pnumber) + else: + if not t in self.Nonterminals: + self.Nonterminals[t] = [ ] + self.Nonterminals[t].append(pnumber) + + # Create a production and add it to the list of productions + p = Production(pnumber,prodname,syms,prodprec,func,file,line) + self.Productions.append(p) + self.Prodmap[map] = p + + # Add to the global productions list + try: + self.Prodnames[prodname].append(p) + except KeyError: + self.Prodnames[prodname] = [ p ] + return 0 + + # ----------------------------------------------------------------------------- + # set_start() + # + # Sets the starting symbol and creates the augmented grammar. Production + # rule 0 is S' -> start where start is the start symbol. + # ----------------------------------------------------------------------------- + + def set_start(self,start=None): + if not start: + start = self.Productions[1].name + if start not in self.Nonterminals: + raise GrammarError("start symbol %s undefined" % start) + self.Productions[0] = Production(0,"S'",[start]) + self.Nonterminals[start].append(0) + self.Start = start + + # ----------------------------------------------------------------------------- + # find_unreachable() + # + # Find all of the nonterminal symbols that can't be reached from the starting + # symbol. Returns a list of nonterminals that can't be reached. + # ----------------------------------------------------------------------------- + + def find_unreachable(self): + + # Mark all symbols that are reachable from a symbol s + def mark_reachable_from(s): + if reachable[s]: + # We've already reached symbol s. + return + reachable[s] = 1 + for p in self.Prodnames.get(s,[]): + for r in p.prod: + mark_reachable_from(r) + + reachable = { } + for s in list(self.Terminals) + list(self.Nonterminals): + reachable[s] = 0 + + mark_reachable_from( self.Productions[0].prod[0] ) + + return [s for s in list(self.Nonterminals) + if not reachable[s]] + + # ----------------------------------------------------------------------------- + # infinite_cycles() + # + # This function looks at the various parsing rules and tries to detect + # infinite recursion cycles (grammar rules where there is no possible way + # to derive a string of only terminals). + # ----------------------------------------------------------------------------- + + def infinite_cycles(self): + terminates = {} + + # Terminals: + for t in self.Terminals: + terminates[t] = 1 + + terminates['$end'] = 1 + + # Nonterminals: + + # Initialize to false: + for n in self.Nonterminals: + terminates[n] = 0 + + # Then propagate termination until no change: + while 1: + some_change = 0 + for (n,pl) in self.Prodnames.items(): + # Nonterminal n terminates iff any of its productions terminates. + for p in pl: + # Production p terminates iff all of its rhs symbols terminate. + for s in p.prod: + if not terminates[s]: + # The symbol s does not terminate, + # so production p does not terminate. + p_terminates = 0 + break + else: + # didn't break from the loop, + # so every symbol s terminates + # so production p terminates. + p_terminates = 1 + + if p_terminates: + # symbol n terminates! + if not terminates[n]: + terminates[n] = 1 + some_change = 1 + # Don't need to consider any more productions for this n. + break + + if not some_change: + break + + infinite = [] + for (s,term) in terminates.items(): + if not term: + if not s in self.Prodnames and not s in self.Terminals and s != 'error': + # s is used-but-not-defined, and we've already warned of that, + # so it would be overkill to say that it's also non-terminating. + pass + else: + infinite.append(s) + + return infinite + + + # ----------------------------------------------------------------------------- + # undefined_symbols() + # + # Find all symbols that were used the grammar, but not defined as tokens or + # grammar rules. Returns a list of tuples (sym, prod) where sym in the symbol + # and prod is the production where the symbol was used. + # ----------------------------------------------------------------------------- + def undefined_symbols(self): + result = [] + for p in self.Productions: + if not p: continue + + for s in p.prod: + if not s in self.Prodnames and not s in self.Terminals and s != 'error': + result.append((s,p)) + return result + + # ----------------------------------------------------------------------------- + # unused_terminals() + # + # Find all terminals that were defined, but not used by the grammar. Returns + # a list of all symbols. + # ----------------------------------------------------------------------------- + def unused_terminals(self): + unused_tok = [] + for s,v in self.Terminals.items(): + if s != 'error' and not v: + unused_tok.append(s) + + return unused_tok + + # ------------------------------------------------------------------------------ + # unused_rules() + # + # Find all grammar rules that were defined, but not used (maybe not reachable) + # Returns a list of productions. + # ------------------------------------------------------------------------------ + + def unused_rules(self): + unused_prod = [] + for s,v in self.Nonterminals.items(): + if not v: + p = self.Prodnames[s][0] + unused_prod.append(p) + return unused_prod + + # ----------------------------------------------------------------------------- + # unused_precedence() + # + # Returns a list of tuples (term,precedence) corresponding to precedence + # rules that were never used by the grammar. term is the name of the terminal + # on which precedence was applied and precedence is a string such as 'left' or + # 'right' corresponding to the type of precedence. + # ----------------------------------------------------------------------------- + + def unused_precedence(self): + unused = [] + for termname in self.Precedence: + if not (termname in self.Terminals or termname in self.UsedPrecedence): + unused.append((termname,self.Precedence[termname][0])) + + return unused + + # ------------------------------------------------------------------------- + # _first() + # + # Compute the value of FIRST1(beta) where beta is a tuple of symbols. + # + # During execution of compute_first1, the result may be incomplete. + # Afterward (e.g., when called from compute_follow()), it will be complete. + # ------------------------------------------------------------------------- + def _first(self,beta): + + # We are computing First(x1,x2,x3,...,xn) + result = [ ] + for x in beta: + x_produces_empty = 0 + + # Add all the non- symbols of First[x] to the result. + for f in self.First[x]: + if f == '': + x_produces_empty = 1 + else: + if f not in result: result.append(f) + + if x_produces_empty: + # We have to consider the next x in beta, + # i.e. stay in the loop. + pass + else: + # We don't have to consider any further symbols in beta. + break + else: + # There was no 'break' from the loop, + # so x_produces_empty was true for all x in beta, + # so beta produces empty as well. + result.append('') + + return result + + # ------------------------------------------------------------------------- + # compute_first() + # + # Compute the value of FIRST1(X) for all symbols + # ------------------------------------------------------------------------- + def compute_first(self): + if self.First: + return self.First + + # Terminals: + for t in self.Terminals: + self.First[t] = [t] + + self.First['$end'] = ['$end'] + + # Nonterminals: + + # Initialize to the empty set: + for n in self.Nonterminals: + self.First[n] = [] + + # Then propagate symbols until no change: + while 1: + some_change = 0 + for n in self.Nonterminals: + for p in self.Prodnames[n]: + for f in self._first(p.prod): + if f not in self.First[n]: + self.First[n].append( f ) + some_change = 1 + if not some_change: + break + + return self.First + + # --------------------------------------------------------------------- + # compute_follow() + # + # Computes all of the follow sets for every non-terminal symbol. The + # follow set is the set of all symbols that might follow a given + # non-terminal. See the Dragon book, 2nd Ed. p. 189. + # --------------------------------------------------------------------- + def compute_follow(self,start=None): + # If already computed, return the result + if self.Follow: + return self.Follow + + # If first sets not computed yet, do that first. + if not self.First: + self.compute_first() + + # Add '$end' to the follow list of the start symbol + for k in self.Nonterminals: + self.Follow[k] = [ ] + + if not start: + start = self.Productions[1].name + + self.Follow[start] = [ '$end' ] + + while 1: + didadd = 0 + for p in self.Productions[1:]: + # Here is the production set + for i in range(len(p.prod)): + B = p.prod[i] + if B in self.Nonterminals: + # Okay. We got a non-terminal in a production + fst = self._first(p.prod[i+1:]) + hasempty = 0 + for f in fst: + if f != '' and f not in self.Follow[B]: + self.Follow[B].append(f) + didadd = 1 + if f == '': + hasempty = 1 + if hasempty or i == (len(p.prod)-1): + # Add elements of follow(a) to follow(b) + for f in self.Follow[p.name]: + if f not in self.Follow[B]: + self.Follow[B].append(f) + didadd = 1 + if not didadd: break + return self.Follow + + + # ----------------------------------------------------------------------------- + # build_lritems() + # + # This function walks the list of productions and builds a complete set of the + # LR items. The LR items are stored in two ways: First, they are uniquely + # numbered and placed in the list _lritems. Second, a linked list of LR items + # is built for each production. For example: + # + # E -> E PLUS E + # + # Creates the list + # + # [E -> . E PLUS E, E -> E . PLUS E, E -> E PLUS . E, E -> E PLUS E . ] + # ----------------------------------------------------------------------------- + + def build_lritems(self): + for p in self.Productions: + lastlri = p + i = 0 + lr_items = [] + while 1: + if i > len(p): + lri = None + else: + lri = LRItem(p,i) + # Precompute the list of productions immediately following + try: + lri.lr_after = self.Prodnames[lri.prod[i+1]] + except (IndexError,KeyError): + lri.lr_after = [] + try: + lri.lr_before = lri.prod[i-1] + except IndexError: + lri.lr_before = None + + lastlri.lr_next = lri + if not lri: break + lr_items.append(lri) + lastlri = lri + i += 1 + p.lr_items = lr_items + +# ----------------------------------------------------------------------------- +# == Class LRTable == +# +# This basic class represents a basic table of LR parsing information. +# Methods for generating the tables are not defined here. They are defined +# in the derived class LRGeneratedTable. +# ----------------------------------------------------------------------------- + +class VersionError(YaccError): pass + +class LRTable(object): + def __init__(self): + self.lr_action = None + self.lr_goto = None + self.lr_productions = None + self.lr_method = None + + def read_table(self,module): + if isinstance(module,types.ModuleType): + parsetab = module + else: + if sys.version_info[0] < 3: + exec("import %s as parsetab" % module) + else: + env = { } + exec("import %s as parsetab" % module, env, env) + parsetab = env['parsetab'] + + if parsetab._tabversion != __tabversion__: + raise VersionError("yacc table file version is out of date") + + self.lr_action = parsetab._lr_action + self.lr_goto = parsetab._lr_goto + + self.lr_productions = [] + for p in parsetab._lr_productions: + self.lr_productions.append(MiniProduction(*p)) + + self.lr_method = parsetab._lr_method + return parsetab._lr_signature + + def read_pickle(self,filename): + try: + import cPickle as pickle + except ImportError: + import pickle + + in_f = open(filename,"rb") + + tabversion = pickle.load(in_f) + if tabversion != __tabversion__: + raise VersionError("yacc table file version is out of date") + self.lr_method = pickle.load(in_f) + signature = pickle.load(in_f) + self.lr_action = pickle.load(in_f) + self.lr_goto = pickle.load(in_f) + productions = pickle.load(in_f) + + self.lr_productions = [] + for p in productions: + self.lr_productions.append(MiniProduction(*p)) + + in_f.close() + return signature + + # Bind all production function names to callable objects in pdict + def bind_callables(self,pdict): + for p in self.lr_productions: + p.bind(pdict) + +# ----------------------------------------------------------------------------- +# === LR Generator === +# +# The following classes and functions are used to generate LR parsing tables on +# a grammar. +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# digraph() +# traverse() +# +# The following two functions are used to compute set valued functions +# of the form: +# +# F(x) = F'(x) U U{F(y) | x R y} +# +# This is used to compute the values of Read() sets as well as FOLLOW sets +# in LALR(1) generation. +# +# Inputs: X - An input set +# R - A relation +# FP - Set-valued function +# ------------------------------------------------------------------------------ + +def digraph(X,R,FP): + N = { } + for x in X: + N[x] = 0 + stack = [] + F = { } + for x in X: + if N[x] == 0: traverse(x,N,stack,F,X,R,FP) + return F + +def traverse(x,N,stack,F,X,R,FP): + stack.append(x) + d = len(stack) + N[x] = d + F[x] = FP(x) # F(X) <- F'(x) + + rel = R(x) # Get y's related to x + for y in rel: + if N[y] == 0: + traverse(y,N,stack,F,X,R,FP) + N[x] = min(N[x],N[y]) + for a in F.get(y,[]): + if a not in F[x]: F[x].append(a) + if N[x] == d: + N[stack[-1]] = MAXINT + F[stack[-1]] = F[x] + element = stack.pop() + while element != x: + N[stack[-1]] = MAXINT + F[stack[-1]] = F[x] + element = stack.pop() + +class LALRError(YaccError): pass + +# ----------------------------------------------------------------------------- +# == LRGeneratedTable == +# +# This class implements the LR table generation algorithm. There are no +# public methods except for write() +# ----------------------------------------------------------------------------- + +class LRGeneratedTable(LRTable): + def __init__(self,grammar,method='LALR',log=None): + if method not in ['SLR','LALR']: + raise LALRError("Unsupported method %s" % method) + + self.grammar = grammar + self.lr_method = method + + # Set up the logger + if not log: + log = NullLogger() + self.log = log + + # Internal attributes + self.lr_action = {} # Action table + self.lr_goto = {} # Goto table + self.lr_productions = grammar.Productions # Copy of grammar Production array + self.lr_goto_cache = {} # Cache of computed gotos + self.lr0_cidhash = {} # Cache of closures + + self._add_count = 0 # Internal counter used to detect cycles + + # Diagonistic information filled in by the table generator + self.sr_conflict = 0 + self.rr_conflict = 0 + self.conflicts = [] # List of conflicts + + self.sr_conflicts = [] + self.rr_conflicts = [] + + # Build the tables + self.grammar.build_lritems() + self.grammar.compute_first() + self.grammar.compute_follow() + self.lr_parse_table() + + # Compute the LR(0) closure operation on I, where I is a set of LR(0) items. + + def lr0_closure(self,I): + self._add_count += 1 + + # Add everything in I to J + J = I[:] + didadd = 1 + while didadd: + didadd = 0 + for j in J: + for x in j.lr_after: + if getattr(x,"lr0_added",0) == self._add_count: continue + # Add B --> .G to J + J.append(x.lr_next) + x.lr0_added = self._add_count + didadd = 1 + + return J + + # Compute the LR(0) goto function goto(I,X) where I is a set + # of LR(0) items and X is a grammar symbol. This function is written + # in a way that guarantees uniqueness of the generated goto sets + # (i.e. the same goto set will never be returned as two different Python + # objects). With uniqueness, we can later do fast set comparisons using + # id(obj) instead of element-wise comparison. + + def lr0_goto(self,I,x): + # First we look for a previously cached entry + g = self.lr_goto_cache.get((id(I),x),None) + if g: return g + + # Now we generate the goto set in a way that guarantees uniqueness + # of the result + + s = self.lr_goto_cache.get(x,None) + if not s: + s = { } + self.lr_goto_cache[x] = s + + gs = [ ] + for p in I: + n = p.lr_next + if n and n.lr_before == x: + s1 = s.get(id(n),None) + if not s1: + s1 = { } + s[id(n)] = s1 + gs.append(n) + s = s1 + g = s.get('$end',None) + if not g: + if gs: + g = self.lr0_closure(gs) + s['$end'] = g + else: + s['$end'] = gs + self.lr_goto_cache[(id(I),x)] = g + return g + + # Compute the LR(0) sets of item function + def lr0_items(self): + + C = [ self.lr0_closure([self.grammar.Productions[0].lr_next]) ] + i = 0 + for I in C: + self.lr0_cidhash[id(I)] = i + i += 1 + + # Loop over the items in C and each grammar symbols + i = 0 + while i < len(C): + I = C[i] + i += 1 + + # Collect all of the symbols that could possibly be in the goto(I,X) sets + asyms = { } + for ii in I: + for s in ii.usyms: + asyms[s] = None + + for x in asyms: + g = self.lr0_goto(I,x) + if not g: continue + if id(g) in self.lr0_cidhash: continue + self.lr0_cidhash[id(g)] = len(C) + C.append(g) + + return C + + # ----------------------------------------------------------------------------- + # ==== LALR(1) Parsing ==== + # + # LALR(1) parsing is almost exactly the same as SLR except that instead of + # relying upon Follow() sets when performing reductions, a more selective + # lookahead set that incorporates the state of the LR(0) machine is utilized. + # Thus, we mainly just have to focus on calculating the lookahead sets. + # + # The method used here is due to DeRemer and Pennelo (1982). + # + # DeRemer, F. L., and T. J. Pennelo: "Efficient Computation of LALR(1) + # Lookahead Sets", ACM Transactions on Programming Languages and Systems, + # Vol. 4, No. 4, Oct. 1982, pp. 615-649 + # + # Further details can also be found in: + # + # J. Tremblay and P. Sorenson, "The Theory and Practice of Compiler Writing", + # McGraw-Hill Book Company, (1985). + # + # ----------------------------------------------------------------------------- + + # ----------------------------------------------------------------------------- + # compute_nullable_nonterminals() + # + # Creates a dictionary containing all of the non-terminals that might produce + # an empty production. + # ----------------------------------------------------------------------------- + + def compute_nullable_nonterminals(self): + nullable = {} + num_nullable = 0 + while 1: + for p in self.grammar.Productions[1:]: + if p.len == 0: + nullable[p.name] = 1 + continue + for t in p.prod: + if not t in nullable: break + else: + nullable[p.name] = 1 + if len(nullable) == num_nullable: break + num_nullable = len(nullable) + return nullable + + # ----------------------------------------------------------------------------- + # find_nonterminal_trans(C) + # + # Given a set of LR(0) items, this functions finds all of the non-terminal + # transitions. These are transitions in which a dot appears immediately before + # a non-terminal. Returns a list of tuples of the form (state,N) where state + # is the state number and N is the nonterminal symbol. + # + # The input C is the set of LR(0) items. + # ----------------------------------------------------------------------------- + + def find_nonterminal_transitions(self,C): + trans = [] + for state in range(len(C)): + for p in C[state]: + if p.lr_index < p.len - 1: + t = (state,p.prod[p.lr_index+1]) + if t[1] in self.grammar.Nonterminals: + if t not in trans: trans.append(t) + state = state + 1 + return trans + + # ----------------------------------------------------------------------------- + # dr_relation() + # + # Computes the DR(p,A) relationships for non-terminal transitions. The input + # is a tuple (state,N) where state is a number and N is a nonterminal symbol. + # + # Returns a list of terminals. + # ----------------------------------------------------------------------------- + + def dr_relation(self,C,trans,nullable): + dr_set = { } + state,N = trans + terms = [] + + g = self.lr0_goto(C[state],N) + for p in g: + if p.lr_index < p.len - 1: + a = p.prod[p.lr_index+1] + if a in self.grammar.Terminals: + if a not in terms: terms.append(a) + + # This extra bit is to handle the start state + if state == 0 and N == self.grammar.Productions[0].prod[0]: + terms.append('$end') + + return terms + + # ----------------------------------------------------------------------------- + # reads_relation() + # + # Computes the READS() relation (p,A) READS (t,C). + # ----------------------------------------------------------------------------- + + def reads_relation(self,C, trans, empty): + # Look for empty transitions + rel = [] + state, N = trans + + g = self.lr0_goto(C[state],N) + j = self.lr0_cidhash.get(id(g),-1) + for p in g: + if p.lr_index < p.len - 1: + a = p.prod[p.lr_index + 1] + if a in empty: + rel.append((j,a)) + + return rel + + # ----------------------------------------------------------------------------- + # compute_lookback_includes() + # + # Determines the lookback and includes relations + # + # LOOKBACK: + # + # This relation is determined by running the LR(0) state machine forward. + # For example, starting with a production "N : . A B C", we run it forward + # to obtain "N : A B C ." We then build a relationship between this final + # state and the starting state. These relationships are stored in a dictionary + # lookdict. + # + # INCLUDES: + # + # Computes the INCLUDE() relation (p,A) INCLUDES (p',B). + # + # This relation is used to determine non-terminal transitions that occur + # inside of other non-terminal transition states. (p,A) INCLUDES (p', B) + # if the following holds: + # + # B -> LAT, where T -> epsilon and p' -L-> p + # + # L is essentially a prefix (which may be empty), T is a suffix that must be + # able to derive an empty string. State p' must lead to state p with the string L. + # + # ----------------------------------------------------------------------------- + + def compute_lookback_includes(self,C,trans,nullable): + + lookdict = {} # Dictionary of lookback relations + includedict = {} # Dictionary of include relations + + # Make a dictionary of non-terminal transitions + dtrans = {} + for t in trans: + dtrans[t] = 1 + + # Loop over all transitions and compute lookbacks and includes + for state,N in trans: + lookb = [] + includes = [] + for p in C[state]: + if p.name != N: continue + + # Okay, we have a name match. We now follow the production all the way + # through the state machine until we get the . on the right hand side + + lr_index = p.lr_index + j = state + while lr_index < p.len - 1: + lr_index = lr_index + 1 + t = p.prod[lr_index] + + # Check to see if this symbol and state are a non-terminal transition + if (j,t) in dtrans: + # Yes. Okay, there is some chance that this is an includes relation + # the only way to know for certain is whether the rest of the + # production derives empty + + li = lr_index + 1 + while li < p.len: + if p.prod[li] in self.grammar.Terminals: break # No forget it + if not p.prod[li] in nullable: break + li = li + 1 + else: + # Appears to be a relation between (j,t) and (state,N) + includes.append((j,t)) + + g = self.lr0_goto(C[j],t) # Go to next set + j = self.lr0_cidhash.get(id(g),-1) # Go to next state + + # When we get here, j is the final state, now we have to locate the production + for r in C[j]: + if r.name != p.name: continue + if r.len != p.len: continue + i = 0 + # This look is comparing a production ". A B C" with "A B C ." + while i < r.lr_index: + if r.prod[i] != p.prod[i+1]: break + i = i + 1 + else: + lookb.append((j,r)) + for i in includes: + if not i in includedict: includedict[i] = [] + includedict[i].append((state,N)) + lookdict[(state,N)] = lookb + + return lookdict,includedict + + # ----------------------------------------------------------------------------- + # compute_read_sets() + # + # Given a set of LR(0) items, this function computes the read sets. + # + # Inputs: C = Set of LR(0) items + # ntrans = Set of nonterminal transitions + # nullable = Set of empty transitions + # + # Returns a set containing the read sets + # ----------------------------------------------------------------------------- + + def compute_read_sets(self,C, ntrans, nullable): + FP = lambda x: self.dr_relation(C,x,nullable) + R = lambda x: self.reads_relation(C,x,nullable) + F = digraph(ntrans,R,FP) + return F + + # ----------------------------------------------------------------------------- + # compute_follow_sets() + # + # Given a set of LR(0) items, a set of non-terminal transitions, a readset, + # and an include set, this function computes the follow sets + # + # Follow(p,A) = Read(p,A) U U {Follow(p',B) | (p,A) INCLUDES (p',B)} + # + # Inputs: + # ntrans = Set of nonterminal transitions + # readsets = Readset (previously computed) + # inclsets = Include sets (previously computed) + # + # Returns a set containing the follow sets + # ----------------------------------------------------------------------------- + + def compute_follow_sets(self,ntrans,readsets,inclsets): + FP = lambda x: readsets[x] + R = lambda x: inclsets.get(x,[]) + F = digraph(ntrans,R,FP) + return F + + # ----------------------------------------------------------------------------- + # add_lookaheads() + # + # Attaches the lookahead symbols to grammar rules. + # + # Inputs: lookbacks - Set of lookback relations + # followset - Computed follow set + # + # This function directly attaches the lookaheads to productions contained + # in the lookbacks set + # ----------------------------------------------------------------------------- + + def add_lookaheads(self,lookbacks,followset): + for trans,lb in lookbacks.items(): + # Loop over productions in lookback + for state,p in lb: + if not state in p.lookaheads: + p.lookaheads[state] = [] + f = followset.get(trans,[]) + for a in f: + if a not in p.lookaheads[state]: p.lookaheads[state].append(a) + + # ----------------------------------------------------------------------------- + # add_lalr_lookaheads() + # + # This function does all of the work of adding lookahead information for use + # with LALR parsing + # ----------------------------------------------------------------------------- + + def add_lalr_lookaheads(self,C): + # Determine all of the nullable nonterminals + nullable = self.compute_nullable_nonterminals() + + # Find all non-terminal transitions + trans = self.find_nonterminal_transitions(C) + + # Compute read sets + readsets = self.compute_read_sets(C,trans,nullable) + + # Compute lookback/includes relations + lookd, included = self.compute_lookback_includes(C,trans,nullable) + + # Compute LALR FOLLOW sets + followsets = self.compute_follow_sets(trans,readsets,included) + + # Add all of the lookaheads + self.add_lookaheads(lookd,followsets) + + # ----------------------------------------------------------------------------- + # lr_parse_table() + # + # This function constructs the parse tables for SLR or LALR + # ----------------------------------------------------------------------------- + def lr_parse_table(self): + Productions = self.grammar.Productions + Precedence = self.grammar.Precedence + goto = self.lr_goto # Goto array + action = self.lr_action # Action array + log = self.log # Logger for output + + actionp = { } # Action production array (temporary) + + log.info("Parsing method: %s", self.lr_method) + + # Step 1: Construct C = { I0, I1, ... IN}, collection of LR(0) items + # This determines the number of states + + C = self.lr0_items() + + if self.lr_method == 'LALR': + self.add_lalr_lookaheads(C) + + # Build the parser table, state by state + st = 0 + for I in C: + # Loop over each production in I + actlist = [ ] # List of actions + st_action = { } + st_actionp = { } + st_goto = { } + log.info("") + log.info("state %d", st) + log.info("") + for p in I: + log.info(" (%d) %s", p.number, str(p)) + log.info("") + + for p in I: + if p.len == p.lr_index + 1: + if p.name == "S'": + # Start symbol. Accept! + st_action["$end"] = 0 + st_actionp["$end"] = p + else: + # We are at the end of a production. Reduce! + if self.lr_method == 'LALR': + laheads = p.lookaheads[st] + else: + laheads = self.grammar.Follow[p.name] + for a in laheads: + actlist.append((a,p,"reduce using rule %d (%s)" % (p.number,p))) + r = st_action.get(a,None) + if r is not None: + # Whoa. Have a shift/reduce or reduce/reduce conflict + if r > 0: + # Need to decide on shift or reduce here + # By default we favor shifting. Need to add + # some precedence rules here. + sprec,slevel = Productions[st_actionp[a].number].prec + rprec,rlevel = Precedence.get(a,('right',0)) + if (slevel < rlevel) or ((slevel == rlevel) and (rprec == 'left')): + # We really need to reduce here. + st_action[a] = -p.number + st_actionp[a] = p + if not slevel and not rlevel: + log.info(" ! shift/reduce conflict for %s resolved as reduce",a) + self.sr_conflicts.append((st,a,'reduce')) + Productions[p.number].reduced += 1 + elif (slevel == rlevel) and (rprec == 'nonassoc'): + st_action[a] = None + else: + # Hmmm. Guess we'll keep the shift + if not rlevel: + log.info(" ! shift/reduce conflict for %s resolved as shift",a) + self.sr_conflicts.append((st,a,'shift')) + elif r < 0: + # Reduce/reduce conflict. In this case, we favor the rule + # that was defined first in the grammar file + oldp = Productions[-r] + pp = Productions[p.number] + if oldp.line > pp.line: + st_action[a] = -p.number + st_actionp[a] = p + chosenp,rejectp = pp,oldp + Productions[p.number].reduced += 1 + Productions[oldp.number].reduced -= 1 + else: + chosenp,rejectp = oldp,pp + self.rr_conflicts.append((st,chosenp,rejectp)) + log.info(" ! reduce/reduce conflict for %s resolved using rule %d (%s)", a,st_actionp[a].number, st_actionp[a]) + else: + raise LALRError("Unknown conflict in state %d" % st) + else: + st_action[a] = -p.number + st_actionp[a] = p + Productions[p.number].reduced += 1 + else: + i = p.lr_index + a = p.prod[i+1] # Get symbol right after the "." + if a in self.grammar.Terminals: + g = self.lr0_goto(I,a) + j = self.lr0_cidhash.get(id(g),-1) + if j >= 0: + # We are in a shift state + actlist.append((a,p,"shift and go to state %d" % j)) + r = st_action.get(a,None) + if r is not None: + # Whoa have a shift/reduce or shift/shift conflict + if r > 0: + if r != j: + raise LALRError("Shift/shift conflict in state %d" % st) + elif r < 0: + # Do a precedence check. + # - if precedence of reduce rule is higher, we reduce. + # - if precedence of reduce is same and left assoc, we reduce. + # - otherwise we shift + rprec,rlevel = Productions[st_actionp[a].number].prec + sprec,slevel = Precedence.get(a,('right',0)) + if (slevel > rlevel) or ((slevel == rlevel) and (rprec == 'right')): + # We decide to shift here... highest precedence to shift + Productions[st_actionp[a].number].reduced -= 1 + st_action[a] = j + st_actionp[a] = p + if not rlevel: + log.info(" ! shift/reduce conflict for %s resolved as shift",a) + self.sr_conflicts.append((st,a,'shift')) + elif (slevel == rlevel) and (rprec == 'nonassoc'): + st_action[a] = None + else: + # Hmmm. Guess we'll keep the reduce + if not slevel and not rlevel: + log.info(" ! shift/reduce conflict for %s resolved as reduce",a) + self.sr_conflicts.append((st,a,'reduce')) + + else: + raise LALRError("Unknown conflict in state %d" % st) + else: + st_action[a] = j + st_actionp[a] = p + + # Print the actions associated with each terminal + _actprint = { } + for a,p,m in actlist: + if a in st_action: + if p is st_actionp[a]: + log.info(" %-15s %s",a,m) + _actprint[(a,m)] = 1 + log.info("") + # Print the actions that were not used. (debugging) + not_used = 0 + for a,p,m in actlist: + if a in st_action: + if p is not st_actionp[a]: + if not (a,m) in _actprint: + log.debug(" ! %-15s [ %s ]",a,m) + not_used = 1 + _actprint[(a,m)] = 1 + if not_used: + log.debug("") + + # Construct the goto table for this state + + nkeys = { } + for ii in I: + for s in ii.usyms: + if s in self.grammar.Nonterminals: + nkeys[s] = None + for n in nkeys: + g = self.lr0_goto(I,n) + j = self.lr0_cidhash.get(id(g),-1) + if j >= 0: + st_goto[n] = j + log.info(" %-30s shift and go to state %d",n,j) + + action[st] = st_action + actionp[st] = st_actionp + goto[st] = st_goto + st += 1 + + + # ----------------------------------------------------------------------------- + # write() + # + # This function writes the LR parsing tables to a file + # ----------------------------------------------------------------------------- + + def write_table(self,modulename,outputdir='',signature=""): + basemodulename = modulename.split(".")[-1] + filename = os.path.join(outputdir,basemodulename) + ".py" + try: + f = open(filename,"w") + + f.write(""" +# %s +# This file is automatically generated. Do not edit. +_tabversion = %r + +_lr_method = %r + +_lr_signature = %r + """ % (filename, __tabversion__, self.lr_method, signature)) + + # Change smaller to 0 to go back to original tables + smaller = 1 + + # Factor out names to try and make smaller + if smaller: + items = { } + + for s,nd in self.lr_action.items(): + for name,v in nd.items(): + i = items.get(name) + if not i: + i = ([],[]) + items[name] = i + i[0].append(s) + i[1].append(v) + + f.write("\n_lr_action_items = {") + for k,v in items.items(): + f.write("%r:([" % k) + for i in v[0]: + f.write("%r," % i) + f.write("],[") + for i in v[1]: + f.write("%r," % i) + + f.write("]),") + f.write("}\n") + + f.write(""" +_lr_action = { } +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_action: _lr_action[_x] = { } + _lr_action[_x][_k] = _y +del _lr_action_items +""") + + else: + f.write("\n_lr_action = { "); + for k,v in self.lr_action.items(): + f.write("(%r,%r):%r," % (k[0],k[1],v)) + f.write("}\n"); + + if smaller: + # Factor out names to try and make smaller + items = { } + + for s,nd in self.lr_goto.items(): + for name,v in nd.items(): + i = items.get(name) + if not i: + i = ([],[]) + items[name] = i + i[0].append(s) + i[1].append(v) + + f.write("\n_lr_goto_items = {") + for k,v in items.items(): + f.write("%r:([" % k) + for i in v[0]: + f.write("%r," % i) + f.write("],[") + for i in v[1]: + f.write("%r," % i) + + f.write("]),") + f.write("}\n") + + f.write(""" +_lr_goto = { } +for _k, _v in _lr_goto_items.items(): + for _x,_y in zip(_v[0],_v[1]): + if not _x in _lr_goto: _lr_goto[_x] = { } + _lr_goto[_x][_k] = _y +del _lr_goto_items +""") + else: + f.write("\n_lr_goto = { "); + for k,v in self.lr_goto.items(): + f.write("(%r,%r):%r," % (k[0],k[1],v)) + f.write("}\n"); + + # Write production table + f.write("_lr_productions = [\n") + for p in self.lr_productions: + if p.func: + f.write(" (%r,%r,%d,%r,%r,%d),\n" % (p.str,p.name, p.len, p.func,p.file,p.line)) + else: + f.write(" (%r,%r,%d,None,None,None),\n" % (str(p),p.name, p.len)) + f.write("]\n") + f.close() + + except IOError: + e = sys.exc_info()[1] + sys.stderr.write("Unable to create '%s'\n" % filename) + sys.stderr.write(str(e)+"\n") + return + + + # ----------------------------------------------------------------------------- + # pickle_table() + # + # This function pickles the LR parsing tables to a supplied file object + # ----------------------------------------------------------------------------- + + def pickle_table(self,filename,signature=""): + try: + import cPickle as pickle + except ImportError: + import pickle + outf = open(filename,"wb") + pickle.dump(__tabversion__,outf,pickle_protocol) + pickle.dump(self.lr_method,outf,pickle_protocol) + pickle.dump(signature,outf,pickle_protocol) + pickle.dump(self.lr_action,outf,pickle_protocol) + pickle.dump(self.lr_goto,outf,pickle_protocol) + + outp = [] + for p in self.lr_productions: + if p.func: + outp.append((p.str,p.name, p.len, p.func,p.file,p.line)) + else: + outp.append((str(p),p.name,p.len,None,None,None)) + pickle.dump(outp,outf,pickle_protocol) + outf.close() + +# ----------------------------------------------------------------------------- +# === INTROSPECTION === +# +# The following functions and classes are used to implement the PLY +# introspection features followed by the yacc() function itself. +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# get_caller_module_dict() +# +# This function returns a dictionary containing all of the symbols defined within +# a caller further down the call stack. This is used to get the environment +# associated with the yacc() call if none was provided. +# ----------------------------------------------------------------------------- + +def get_caller_module_dict(levels): + try: + raise RuntimeError + except RuntimeError: + e,b,t = sys.exc_info() + f = t.tb_frame + while levels > 0: + f = f.f_back + levels -= 1 + ldict = f.f_globals.copy() + if f.f_globals != f.f_locals: + ldict.update(f.f_locals) + + return ldict + +# ----------------------------------------------------------------------------- +# parse_grammar() +# +# This takes a raw grammar rule string and parses it into production data +# ----------------------------------------------------------------------------- +def parse_grammar(doc,file,line): + grammar = [] + # Split the doc string into lines + pstrings = doc.splitlines() + lastp = None + dline = line + for ps in pstrings: + dline += 1 + p = ps.split() + if not p: continue + try: + if p[0] == '|': + # This is a continuation of a previous rule + if not lastp: + raise SyntaxError("%s:%d: Misplaced '|'" % (file,dline)) + prodname = lastp + syms = p[1:] + else: + prodname = p[0] + lastp = prodname + syms = p[2:] + assign = p[1] + if assign != ':' and assign != '::=': + raise SyntaxError("%s:%d: Syntax error. Expected ':'" % (file,dline)) + + grammar.append((file,dline,prodname,syms)) + except SyntaxError: + raise + except Exception: + raise SyntaxError("%s:%d: Syntax error in rule '%s'" % (file,dline,ps.strip())) + + return grammar + +# ----------------------------------------------------------------------------- +# ParserReflect() +# +# This class represents information extracted for building a parser including +# start symbol, error function, tokens, precedence list, action functions, +# etc. +# ----------------------------------------------------------------------------- +class ParserReflect(object): + def __init__(self,pdict,log=None): + self.pdict = pdict + self.start = None + self.error_func = None + self.tokens = None + self.files = {} + self.grammar = [] + self.error = 0 + + if log is None: + self.log = PlyLogger(sys.stderr) + else: + self.log = log + + # Get all of the basic information + def get_all(self): + self.get_start() + self.get_error_func() + self.get_tokens() + self.get_precedence() + self.get_pfunctions() + + # Validate all of the information + def validate_all(self): + self.validate_start() + self.validate_error_func() + self.validate_tokens() + self.validate_precedence() + self.validate_pfunctions() + self.validate_files() + return self.error + + # Compute a signature over the grammar + def signature(self): + try: + from hashlib import md5 + except ImportError: + from md5 import md5 + try: + sig = md5() + if self.start: + sig.update(self.start.encode('latin-1')) + if self.prec: + sig.update("".join(["".join(p) for p in self.prec]).encode('latin-1')) + if self.tokens: + sig.update(" ".join(self.tokens).encode('latin-1')) + for f in self.pfuncs: + if f[3]: + sig.update(f[3].encode('latin-1')) + except (TypeError,ValueError): + pass + return sig.digest() + + # ----------------------------------------------------------------------------- + # validate_file() + # + # This method checks to see if there are duplicated p_rulename() functions + # in the parser module file. Without this function, it is really easy for + # users to make mistakes by cutting and pasting code fragments (and it's a real + # bugger to try and figure out why the resulting parser doesn't work). Therefore, + # we just do a little regular expression pattern matching of def statements + # to try and detect duplicates. + # ----------------------------------------------------------------------------- + + def validate_files(self): + # Match def p_funcname( + fre = re.compile(r'\s*def\s+(p_[a-zA-Z_0-9]*)\(') + + for filename in self.files.keys(): + base,ext = os.path.splitext(filename) + if ext != '.py': return 1 # No idea. Assume it's okay. + + try: + f = open(filename) + lines = f.readlines() + f.close() + except IOError: + continue + + counthash = { } + for linen,l in enumerate(lines): + linen += 1 + m = fre.match(l) + if m: + name = m.group(1) + prev = counthash.get(name) + if not prev: + counthash[name] = linen + else: + self.log.warning("%s:%d: Function %s redefined. Previously defined on line %d", filename,linen,name,prev) + + # Get the start symbol + def get_start(self): + self.start = self.pdict.get('start') + + # Validate the start symbol + def validate_start(self): + if self.start is not None: + if not isinstance(self.start,str): + self.log.error("'start' must be a string") + + # Look for error handler + def get_error_func(self): + self.error_func = self.pdict.get('p_error') + + # Validate the error function + def validate_error_func(self): + if self.error_func: + if isinstance(self.error_func,types.FunctionType): + ismethod = 0 + elif isinstance(self.error_func, types.MethodType): + ismethod = 1 + else: + self.log.error("'p_error' defined, but is not a function or method") + self.error = 1 + return + + eline = func_code(self.error_func).co_firstlineno + efile = func_code(self.error_func).co_filename + self.files[efile] = 1 + + if (func_code(self.error_func).co_argcount != 1+ismethod): + self.log.error("%s:%d: p_error() requires 1 argument",efile,eline) + self.error = 1 + + # Get the tokens map + def get_tokens(self): + tokens = self.pdict.get("tokens",None) + if not tokens: + self.log.error("No token list is defined") + self.error = 1 + return + + if not isinstance(tokens,(list, tuple)): + self.log.error("tokens must be a list or tuple") + self.error = 1 + return + + if not tokens: + self.log.error("tokens is empty") + self.error = 1 + return + + self.tokens = tokens + + # Validate the tokens + def validate_tokens(self): + # Validate the tokens. + if 'error' in self.tokens: + self.log.error("Illegal token name 'error'. Is a reserved word") + self.error = 1 + return + + terminals = {} + for n in self.tokens: + if n in terminals: + self.log.warning("Token '%s' multiply defined", n) + terminals[n] = 1 + + # Get the precedence map (if any) + def get_precedence(self): + self.prec = self.pdict.get("precedence",None) + + # Validate and parse the precedence map + def validate_precedence(self): + preclist = [] + if self.prec: + if not isinstance(self.prec,(list,tuple)): + self.log.error("precedence must be a list or tuple") + self.error = 1 + return + for level,p in enumerate(self.prec): + if not isinstance(p,(list,tuple)): + self.log.error("Bad precedence table") + self.error = 1 + return + + if len(p) < 2: + self.log.error("Malformed precedence entry %s. Must be (assoc, term, ..., term)",p) + self.error = 1 + return + assoc = p[0] + if not isinstance(assoc,str): + self.log.error("precedence associativity must be a string") + self.error = 1 + return + for term in p[1:]: + if not isinstance(term,str): + self.log.error("precedence items must be strings") + self.error = 1 + return + preclist.append((term,assoc,level+1)) + self.preclist = preclist + + # Get all p_functions from the grammar + def get_pfunctions(self): + p_functions = [] + for name, item in self.pdict.items(): + if name[:2] != 'p_': continue + if name == 'p_error': continue + if isinstance(item,(types.FunctionType,types.MethodType)): + line = func_code(item).co_firstlineno + file = func_code(item).co_filename + p_functions.append((line,file,name,item.__doc__)) + + # Sort all of the actions by line number + p_functions.sort() + self.pfuncs = p_functions + + + # Validate all of the p_functions + def validate_pfunctions(self): + grammar = [] + # Check for non-empty symbols + if len(self.pfuncs) == 0: + self.log.error("no rules of the form p_rulename are defined") + self.error = 1 + return + + for line, file, name, doc in self.pfuncs: + func = self.pdict[name] + if isinstance(func, types.MethodType): + reqargs = 2 + else: + reqargs = 1 + if func_code(func).co_argcount > reqargs: + self.log.error("%s:%d: Rule '%s' has too many arguments",file,line,func.__name__) + self.error = 1 + elif func_code(func).co_argcount < reqargs: + self.log.error("%s:%d: Rule '%s' requires an argument",file,line,func.__name__) + self.error = 1 + elif not func.__doc__: + self.log.warning("%s:%d: No documentation string specified in function '%s' (ignored)",file,line,func.__name__) + else: + try: + parsed_g = parse_grammar(doc,file,line) + for g in parsed_g: + grammar.append((name, g)) + except SyntaxError: + e = sys.exc_info()[1] + self.log.error(str(e)) + self.error = 1 + + # Looks like a valid grammar rule + # Mark the file in which defined. + self.files[file] = 1 + + # Secondary validation step that looks for p_ definitions that are not functions + # or functions that look like they might be grammar rules. + + for n,v in self.pdict.items(): + if n[0:2] == 'p_' and isinstance(v, (types.FunctionType, types.MethodType)): continue + if n[0:2] == 't_': continue + if n[0:2] == 'p_' and n != 'p_error': + self.log.warning("'%s' not defined as a function", n) + if ((isinstance(v,types.FunctionType) and func_code(v).co_argcount == 1) or + (isinstance(v,types.MethodType) and func_code(v).co_argcount == 2)): + try: + doc = v.__doc__.split(" ") + if doc[1] == ':': + self.log.warning("%s:%d: Possible grammar rule '%s' defined without p_ prefix", + func_code(v).co_filename, func_code(v).co_firstlineno,n) + except Exception: + pass + + self.grammar = grammar + +# ----------------------------------------------------------------------------- +# yacc(module) +# +# Build a parser +# ----------------------------------------------------------------------------- + +def yacc(method='LALR', debug=yaccdebug, module=None, tabmodule=tab_module, start=None, + check_recursion=1, optimize=0, write_tables=1, debugfile=debug_file,outputdir='', + debuglog=None, errorlog = None, picklefile=None): + + global parse # Reference to the parsing method of the last built parser + + # If pickling is enabled, table files are not created + + if picklefile: + write_tables = 0 + + if errorlog is None: + errorlog = PlyLogger(sys.stderr) + + # Get the module dictionary used for the parser + if module: + _items = [(k,getattr(module,k)) for k in dir(module)] + pdict = dict(_items) + else: + pdict = get_caller_module_dict(2) + + # Collect parser information from the dictionary + pinfo = ParserReflect(pdict,log=errorlog) + pinfo.get_all() + + if pinfo.error: + raise YaccError("Unable to build parser") + + # Check signature against table files (if any) + signature = pinfo.signature() + + # Read the tables + try: + lr = LRTable() + if picklefile: + read_signature = lr.read_pickle(picklefile) + else: + read_signature = lr.read_table(tabmodule) + if optimize or (read_signature == signature): + try: + lr.bind_callables(pinfo.pdict) + parser = LRParser(lr,pinfo.error_func) + parse = parser.parse + return parser + except Exception: + e = sys.exc_info()[1] + errorlog.warning("There was a problem loading the table file: %s", repr(e)) + except VersionError: + e = sys.exc_info() + errorlog.warning(str(e)) + except Exception: + pass + + if debuglog is None: + if debug: + debuglog = PlyLogger(open(debugfile,"w")) + else: + debuglog = NullLogger() + + debuglog.info("Created by PLY version %s (http://www.dabeaz.com/ply)", __version__) + + + errors = 0 + + # Validate the parser information + if pinfo.validate_all(): + raise YaccError("Unable to build parser") + + if not pinfo.error_func: + errorlog.warning("no p_error() function is defined") + + # Create a grammar object + grammar = Grammar(pinfo.tokens) + + # Set precedence level for terminals + for term, assoc, level in pinfo.preclist: + try: + grammar.set_precedence(term,assoc,level) + except GrammarError: + e = sys.exc_info()[1] + errorlog.warning("%s",str(e)) + + # Add productions to the grammar + for funcname, gram in pinfo.grammar: + file, line, prodname, syms = gram + try: + grammar.add_production(prodname,syms,funcname,file,line) + except GrammarError: + e = sys.exc_info()[1] + errorlog.error("%s",str(e)) + errors = 1 + + # Set the grammar start symbols + try: + if start is None: + grammar.set_start(pinfo.start) + else: + grammar.set_start(start) + except GrammarError: + e = sys.exc_info()[1] + errorlog.error(str(e)) + errors = 1 + + if errors: + raise YaccError("Unable to build parser") + + # Verify the grammar structure + undefined_symbols = grammar.undefined_symbols() + for sym, prod in undefined_symbols: + errorlog.error("%s:%d: Symbol '%s' used, but not defined as a token or a rule",prod.file,prod.line,sym) + errors = 1 + + unused_terminals = grammar.unused_terminals() + if unused_terminals: + debuglog.info("") + debuglog.info("Unused terminals:") + debuglog.info("") + for term in unused_terminals: + errorlog.warning("Token '%s' defined, but not used", term) + debuglog.info(" %s", term) + + # Print out all productions to the debug log + if debug: + debuglog.info("") + debuglog.info("Grammar") + debuglog.info("") + for n,p in enumerate(grammar.Productions): + debuglog.info("Rule %-5d %s", n, p) + + # Find unused non-terminals + unused_rules = grammar.unused_rules() + for prod in unused_rules: + errorlog.warning("%s:%d: Rule '%s' defined, but not used", prod.file, prod.line, prod.name) + + if len(unused_terminals) == 1: + errorlog.warning("There is 1 unused token") + if len(unused_terminals) > 1: + errorlog.warning("There are %d unused tokens", len(unused_terminals)) + + if len(unused_rules) == 1: + errorlog.warning("There is 1 unused rule") + if len(unused_rules) > 1: + errorlog.warning("There are %d unused rules", len(unused_rules)) + + if debug: + debuglog.info("") + debuglog.info("Terminals, with rules where they appear") + debuglog.info("") + terms = list(grammar.Terminals) + terms.sort() + for term in terms: + debuglog.info("%-20s : %s", term, " ".join([str(s) for s in grammar.Terminals[term]])) + + debuglog.info("") + debuglog.info("Nonterminals, with rules where they appear") + debuglog.info("") + nonterms = list(grammar.Nonterminals) + nonterms.sort() + for nonterm in nonterms: + debuglog.info("%-20s : %s", nonterm, " ".join([str(s) for s in grammar.Nonterminals[nonterm]])) + debuglog.info("") + + if check_recursion: + unreachable = grammar.find_unreachable() + for u in unreachable: + errorlog.warning("Symbol '%s' is unreachable",u) + + infinite = grammar.infinite_cycles() + for inf in infinite: + errorlog.error("Infinite recursion detected for symbol '%s'", inf) + errors = 1 + + unused_prec = grammar.unused_precedence() + for term, assoc in unused_prec: + errorlog.error("Precedence rule '%s' defined for unknown symbol '%s'", assoc, term) + errors = 1 + + if errors: + raise YaccError("Unable to build parser") + + # Run the LRGeneratedTable on the grammar + if debug: + errorlog.debug("Generating %s tables", method) + + lr = LRGeneratedTable(grammar,method,debuglog) + + if debug: + num_sr = len(lr.sr_conflicts) + + # Report shift/reduce and reduce/reduce conflicts + if num_sr == 1: + errorlog.warning("1 shift/reduce conflict") + elif num_sr > 1: + errorlog.warning("%d shift/reduce conflicts", num_sr) + + num_rr = len(lr.rr_conflicts) + if num_rr == 1: + errorlog.warning("1 reduce/reduce conflict") + elif num_rr > 1: + errorlog.warning("%d reduce/reduce conflicts", num_rr) + + # Write out conflicts to the output file + if debug and (lr.sr_conflicts or lr.rr_conflicts): + debuglog.warning("") + debuglog.warning("Conflicts:") + debuglog.warning("") + + for state, tok, resolution in lr.sr_conflicts: + debuglog.warning("shift/reduce conflict for %s in state %d resolved as %s", tok, state, resolution) + + already_reported = {} + for state, rule, rejected in lr.rr_conflicts: + if (state,id(rule),id(rejected)) in already_reported: + continue + debuglog.warning("reduce/reduce conflict in state %d resolved using rule (%s)", state, rule) + debuglog.warning("rejected rule (%s) in state %d", rejected,state) + errorlog.warning("reduce/reduce conflict in state %d resolved using rule (%s)", state, rule) + errorlog.warning("rejected rule (%s) in state %d", rejected, state) + already_reported[state,id(rule),id(rejected)] = 1 + + warned_never = [] + for state, rule, rejected in lr.rr_conflicts: + if not rejected.reduced and (rejected not in warned_never): + debuglog.warning("Rule (%s) is never reduced", rejected) + errorlog.warning("Rule (%s) is never reduced", rejected) + warned_never.append(rejected) + + # Write the table file if requested + if write_tables: + lr.write_table(tabmodule,outputdir,signature) + + # Write a pickled version of the tables + if picklefile: + lr.pickle_table(picklefile,signature) + + # Build the parser + lr.bind_callables(pinfo.pdict) + parser = LRParser(lr,pinfo.error_func) + + parse = parser.parse + return parser diff --git a/src/Mod/OpenSCAD/prototype.py b/src/Mod/OpenSCAD/prototype.py new file mode 100644 index 000000000..b9444977e --- /dev/null +++ b/src/Mod/OpenSCAD/prototype.py @@ -0,0 +1,688 @@ +#!/usr/bin/env python + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License (LGPL) +# as published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. + +import FreeCAD +import re,math +from OpenSCADFeatures import * +from OpenSCAD2Dgeom import * +from OpenSCADUtils import * + +if open.__module__ == '__builtin__': + pythonopen = open # to distinguish python built-in open function from the one declared here + +def openscadmesh(doc,scadstr,objname): + import Part,Mesh,os,OpenSCADUtils + tmpfilename=OpenSCADUtils.callopenscadstring(scadstr,'stl') + if tmpfilename: + #mesh1 = doc.getObject(objname) #reuse imported object + Mesh.insert(tmpfilename) + os.unlink(tmpfilename) + mesh1=doc.getObject(objname) #blog + mesh1.ViewObject.hide() + sh=Part.Shape() + sh.makeShapeFromMesh(mesh1.Mesh.Topology,0.1) + solid = Part.Solid(sh) + obj=doc.addObject("Part::FeaturePython",objname) + ImportObject(obj,mesh1) #This object is not mutable from the GUI + ViewProviderTree(obj.ViewObject) + solid=solid.removeSplitter() + if solid.Volume < 0: + solid.complement() + obj.Shape=solid#.removeSplitter() + return obj + else: + print scadstr + +class Node: + #fnmin=12 # maximal fn for implicit polygon renderfing + fnmin= FreeCAD.ParamGet(\ + "User parameter:BaseApp/Preferences/Mod/OpenSCAD").\ + GetInt('useMaxFN') + planedim=1e10 #size of the sqaure used as x-y-plane + def __init__(self,name,arguments=None,children=None,): + pass + self.name=name + self.arguments=arguments or {} + self.children=children or [] + + def __repr__(self): + str1 ='Node(name=%s' % self.name + if self.arguments: + str1 += ',arguments=%s' % self.arguments + if self.children: + str1 += ',children=%s' % self.children + return str1+')' + + def __nonzero__(self): + '''a Node is not obsolent if doesn't have children. Only if as neither name children or + arguments''' + return bool(self.name or self.arguments or self.children) + + def __len__(self): + '''return the numer of children''' + return len(self.children) + + def __getitem__(self,key): + '''dirct access to the children''' + return self.children.__getitem__(key) + + def rlen(self,checkmultmarix=False): + '''Total number of nodes''' + if self.children: + return 1+sum([ch.rlen() for ch in self.children]) + else: + return 1 + + + def addtofreecad(self,doc=None,fcpar=None): + def center(obj,x,y,z): + obj.Placement = FreeCAD.Placement(\ + FreeCAD.Vector(-x/2.0,-y/2.0,-z/2.0),\ + FreeCAD.Rotation(0,0,0,1)) + + import FreeCAD,Part + if not doc: + doc=FreeCAD.newDocument() + namel=self.name.lower() + multifeature={'union':"Part::MultiFuse",'imp_union':"Part::MultiFuse", + 'intersection':"Part::MultiCommon"} + if namel in multifeature: + if len(self.children)>1: + obj=doc.addObject(multifeature[namel],namel) + subobjs = [child.addtofreecad(doc,obj) for child in self.children] + obj.Shapes = subobjs + for subobj in subobjs: + subobj.ViewObject.hide() + elif len(self.children)==1: + obj = self.children[0].addtofreecad(doc,fcpar or True) + else: + obj = fcpar + elif namel == 'difference': + if len(self.children)==1: + obj = self.children[0].addtofreecad(doc,fcpar or True) + else: + obj=doc.addObject("Part::Cut",namel) + base = self.children[0].addtofreecad(doc,obj) + + if len(self.children)==2: + tool = self.children[1].addtofreecad(doc,obj) + else: + tool = Node(name='imp_union',\ + children=self.children[1:]).addtofreecad(doc,obj) + obj.Base = base + obj.Tool = tool + base.ViewObject.hide() + tool.ViewObject.hide() + elif namel == 'cube': + obj=doc.addObject('Part::Box',namel) + x,y,z=self.arguments['size'] + obj.Length=x + obj.Width=y + obj.Height=z + if self.arguments['center']: + center(obj,x,y,z) + elif namel == 'sphere': + obj=doc.addObject("Part::Sphere",namel) + obj.Radius = self.arguments['r'] + elif namel == 'cylinder': + h = self.arguments['h'] + r1 ,r2 = self.arguments['r1'], self.arguments['r2'] + if '$fn' in self.arguments and self.arguments['$fn'] > 2 \ + and self.arguments['$fn']<=Node.fnmin: + if r1 == r2: + import Draft + base = Draft.makePolygon(int(self.arguments['$fn']),r1) + obj = doc.addObject("Part::Extrusion",'prism') + obj.Base= base + obj.Dir = (0,0,h) + if self.arguments['center']: + center(obj,0,0,h) + base.ViewObject.hide() + elif True: #use Frustum Feature with makeRuledSurface + obj=doc.addObject("Part::FeaturePython",'frustum') + Frustum(obj,r1,r2,int(self.arguments['$fn']),h) + ViewProviderTree(obj.ViewObject) + if self.arguments['center']: + center(obj,0,0,h) + else: #Use Part::Loft and GetWire Feature + obj=doc.addObject('Part::Loft','frustum') + import Draft + p1 = Draft.makePolygon(int(self.arguments['$fn']),r1) + p2 = Draft.makePolygon(int(self.arguments['$fn']),r2) + if self.arguments['center']: + p1.Placement = FreeCAD.Placement(\ + FreeCAD.Vector(0.0,0.0,-h/2.0),FreeCAD.Rotation()) + p2.Placement = FreeCAD.Placement(\ + FreeCAD.Vector(0.0,0.0,h/2.0),FreeCAD.Rotation()) + else: + p2.Placement = FreeCAD.Placement(\ + FreeCAD.Vector(0.0,0.0,h),FreeCAD.Rotation()) + w1=doc.addObject("Part::FeaturePython",'polygonwire1') + w2=doc.addObject("Part::FeaturePython",'polygonwire2') + GetWire(w1,p1) + GetWire(w2,p2) + ViewProviderTree(w1.ViewObject) + ViewProviderTree(w2.ViewObject) + obj.Sections=[w1,w2] + obj.Solid=True + obj.Ruled=True + p1.ViewObject.hide() + p2.ViewObject.hide() + w1.ViewObject.hide() + w2.ViewObject.hide() + else: + if r1 == r2: + obj=doc.addObject("Part::Cylinder",namel) + obj.Height = h + obj.Radius = r1 + else: + obj=doc.addObject("Part::Cone",'cone') + obj.Height = h + obj.Radius1, obj.Radius2 = r1, r2 + if self.arguments['center']: + center(obj,0,0,h) + elif namel == 'polyhedron': + obj = doc.addObject("Part::Feature",namel) + points=self.arguments['points'] + faces=self.arguments['triangles'] + shell=Part.Shell([Part.Face(Part.makePolygon(\ + [tuple(points[pointindex]) for pointindex in \ + (face+face[0:1])])) for face in faces]) +# obj.Shape=Part.Solid(shell).removeSplitter() + solid=Part.Solid(shell).removeSplitter() + if solid.Volume < 0: +# solid.complement() + solid.reverse() + obj.Shape=solid#.removeSplitter() + + elif namel == 'polygon': + obj = doc.addObject("Part::Feature",namel) + points=self.arguments['points'] + paths = self.arguments.get('paths') + if not paths: + faces=[Part.Face(Part.makePolygon([(x,y,0) for x,y in points+points[0:1]]))] + else: + faces= [Part.Face(Part.makePolygon([(points[pointindex][0],points[pointindex][1],0) for \ + pointindex in (path+path[0:1])])) for path in paths] + obj.Shape=subtractfaces(faces) + elif namel == 'square': + obj = doc.addObject("Part::Plane",namel) + x,y = self.arguments['size'] + obj.Length = x + obj.Width = y + if self.arguments['center']: + center(obj,x,y,0) + elif namel == 'circle': + r = self.arguments['r'] + import Draft + if '$fn' in self.arguments and self.arguments['$fn'] != 0 \ + and self.arguments['$fn']<=Node.fnmin: + obj=Draft.makePolygon(int(self.arguments['$fn']),r) + else: + obj=Draft.makeCircle(r) # create a Face + #obj = doc.addObject("Part::Circle",namel);obj.Radius = r + elif namel == 'color': + if len(self.children) == 1: + obj = self.children[0].addtofreecad(doc,fcpar or True) + else: + obj = Node(name='imp_union',\ + children=self.children).addtofreecad(doc,fcpar or True) + obj.ViewObject.ShapeColor = tuple([float(p) for p in self.arguments[:3]]) #RGB + transp = 100 - int(math.floor(100*self.arguments[3])) #Alpha + obj.ViewObject.Transparency = transp + elif namel == 'multmatrix': + assert(len(self.children)>0) + m1l=[round(f,12) for f in sum(self.arguments,[])] #Thats the original matrix + m1=FreeCAD.Matrix(*tuple(m1l)) #Thats the original matrix + if isspecialorthogonalpython(fcsubmatrix(m1)): #a Placement can represent the transformation + if len(self.children) == 1: + obj = self.children[0].addtofreecad(doc,fcpar or True) + else: + obj = Node(name='imp_union',\ + children=self.children).addtofreecad(doc,fcpar or True) + #FreeCAD.Console.PrintMessage('obj %s\nmat %s/n' % (obj.Placement,m1)) + obj.Placement=FreeCAD.Placement(m1).multiply(obj.Placement) + else: #we need to apply the matrix transformation to the Shape using a custom PythonFeature + obj=doc.addObject("Part::FeaturePython",namel) + if len(self.children) == 1: + child = self.children[0].addtofreecad(doc,obj) + else: + child = Node(name='imp_union',\ + children=self.children).addtofreecad(doc,obj) + MatrixTransform(obj,m1,child) #This object is not mutable from the GUI + ViewProviderTree(obj.ViewObject) + #elif namel == 'import': pass #Custom Feature + elif namel == 'linear_extrude': + height = self.arguments['height'] + twist = self.arguments.get('twist') + if not twist: + obj = doc.addObject("Part::Extrusion",namel) + else: #twist + obj=doc.addObject("Part::FeaturePython",'twist_extrude') + if len(self.children)==0: + base= Node('import',self.arguments).addtofreecad(doc,obj) + elif len(self.children)==1: + base = self.children[0].addtofreecad(doc,obj) + else: + base = Node(name='imp_union',\ + children=self.children).addtofreecad(doc,obj) + if False and base.isDerivedFrom('Part::MultiFuse'): + #does not solve all the problems + newobj=doc.addObject("Part::FeaturePython",'refine') + RefineShape(newobj,base) + ViewProviderTree(newobj.ViewObject) + base.ViewObject.hide() + base=newobj + if not twist: + obj.Base= base + obj.Dir = (0,0,height) + else: #twist + Twist(obj,base,height,-twist) + ViewProviderTree(obj.ViewObject) + if self.arguments['center']: + center(obj,0,0,height) + base.ViewObject.hide() + + elif namel == 'rotate_extrude': + obj = doc.addObject("Part::Revolution",namel) + if len(self.children)==0: + base= Node('import',self.arguments).addtofreecad(doc,obj) + elif len(self.children)==1: + base = self.children[0].addtofreecad(doc,obj) + else: + base = Node(name='imp_union',\ + children=self.children).addtofreecad(doc,obj) + if False and base.isDerivedFrom('Part::MultiFuse'): + #creates 'Axe and meridian are confused' Errors + newobj=doc.addObject("Part::FeaturePython",'refine') + RefineShape(newobj,base) + ViewProviderTree(newobj.ViewObject) + base.ViewObject.hide() + base=newobj + obj.Source= base + obj.Axis = (0.00,1.00,0.00) + obj.Base = (0.00,0.00,0.00) + obj.Angle = 360.00 + base.ViewObject.hide() + obj.Placement=FreeCAD.Placement(FreeCAD.Vector(),FreeCAD.Rotation(0,0,90)) + elif namel == 'projection': + if self.arguments['cut']: + planename='xy_plane_used_for_project_cut' + obj=doc.addObject('Part::MultiCommon','projection_cut') + plane = doc.getObject(planename) + if not plane: + plane=doc.addObject("Part::Plane",planename) + plane.Length=Node.planedim*2 + plane.Width=Node.planedim*2 + plane.Placement = FreeCAD.Placement(FreeCAD.Vector(\ + -Node.planedim,-Node.planedim,0),FreeCAD.Rotation(0,0,0,1)) + #plane.ViewObject.hide() + subobjs = [child.addtofreecad(doc,obj) for child in self.children] + subobjs.append(plane) + obj.Shapes = subobjs + for subobj in subobjs: + subobj.ViewObject.hide() + else: + #Do a proper projection + raise(NotImplementedError) + elif namel == 'import': + filename = self.arguments.get('file') + scale = self.arguments.get('scale') + origin = self.arguments.get('origin') + if filename: + import os + docname=os.path.split(filename)[1] + objname,extension = docname.split('.',1) + if not os.path.isabs(filename): + try: + global lastimportpath + filename=os.path.join(lastimportpath,filename) + except: + raise #no path given + # Check for a mesh fileformat support by the Mesh mddule + if extension.lower() in reverseimporttypes()['Mesh']: + import Mesh + mesh1 = doc.getObject(objname) #reuse imported object + if not mesh1: + Mesh.insert(filename) + mesh1=doc.getObject(objname) + mesh1.ViewObject.hide() + sh=Part.Shape() + sh.makeShapeFromMesh(mesh1.Mesh.Topology,0.1) + solid = Part.Solid(sh) + obj=doc.addObject("Part::FeaturePython",'import_%s_%s'%(extension,objname)) + #obj=doc.addObject('Part::Feature',) + ImportObject(obj,mesh1) #This object is not mutable from the GUI + ViewProviderTree(obj.ViewObject) + solid=solid.removeSplitter() + if solid.Volume < 0: + #sh.reverse() + #sh = sh.copy() + solid.complement() + obj.Shape=solid#.removeSplitter() + elif extension in ['dxf']: + layera = self.arguments.get('layer') + featname='import_dxf_%s_%s'%(objname,layera) + # reusing an allready imported object does not work if the + #shape in not yet calculated + import importDXF + global dxfcache + layers=dxfcache.get(id(doc),[]) + if layers: + try: + groupobj=[go for go in layers if (not layera) or go.Label == layera] + except: + groupobj= None + else: + groupobj= None + if not groupobj: + groupname=objname + layers = importDXF.processdxf(doc,filename) or importDXF.layers + dxfcache[id(doc)] = layers[:] + for l in layers: + for o in l.Group: + o.ViewObject.hide() + l.ViewObject.hide() + groupobj=[go for go in layers if (not layera) or go.Label == layera] + edges=[] + for shapeobj in groupobj[0].Group: + edges.extend(shapeobj.Shape.Edges) + try: + f=edgestofaces(edges) + except: + FreeCAD.Console.PrintError(\ + 'processing of dxf import faild\nPlease rework \'%s\' manualy\n' % layera) + f=Part.Shape() #empty Shape + obj=doc.addObject("Part::FeaturePython",'import_dxf_%s_%s'%(objname,layera)) + #obj=doc.addObject('Part::Feature',) + ImportObject(obj,groupobj[0]) #This object is not mutable from the GUI + ViewProviderTree(obj.ViewObject) + obj.Shape=f + + else: + FreeCAD.Console.ErrorMessage(\ + 'Filetype of %s not supported\n' % (filename)) + raise(NotImplementedError) + if obj: #handle origin and scale + if scale is not None and scale !=1: + child = obj + m1=FreeCAD.Matrix() + m1.scale(scale,scale,scale) + obj=doc.addObject("Part::FeaturePython",'scale_import') + MatrixTransform(obj,m1,child) #This object is not mutable from the GUI + ViewProviderTree(obj.ViewObject) + elif origin is not None and any([c != 0 for c in origin]): + placement=FreeCAD.Placement(FreeCAD.Vector(*origin),FreeCAD.Rotation()) + obj.Placement=placement.multiply(obj.Placement) + else: + FreeCAD.Console.ErrorMessage('Import of %s failed\n' % (filename)) + + + elif namel == 'minkowski': + childrennames=[child.name.lower() for child in self.children] + if len(self.children) == 2 and \ + childrennames.count('cube')==1 and \ + (childrennames.count('sphere') + \ + childrennames.count('cylinder')) == 1: + if self.children[0].name.lower() == 'cube': + cube = self.children[0] + roundobj = self.children[1] + elif self.children[1].name.lower() == 'cube': + cube = self.children[1] + roundobj = self.children[0] + roundobjname=roundobj.name.lower() + issphere = roundobjname == 'sphere' + cubeobj=doc.addObject('Part::Box','roundedcube') + x,y,z=cube.arguments['size'] + r=roundobj.arguments.get('r') or \ + roundobj.arguments.get('r1') + cubeobj.Length=x+2*r + cubeobj.Width=y+2*r + cubeobj.Height=z+2*r*issphere + obj=doc.addObject("Part::Fillet","%s_%s"%(namel,roundobjname)) + obj.Base = cubeobj + cubeobj.ViewObject.hide() + if issphere: + obj.Edges = [(i,r,r) for i in range(1,13)] + else:#cylinder + obj.Edges = [(i,r,r) for i in [1,3,5,7]] + if cube.arguments['center']: + center(cubeobj,x+2*r,y+2*r,z+2*r*issphere) + else: #htandle a rotated cylinder + #OffsetShape + raise(NotImplementedError) + elif childrennames.count('sphere')==1: + sphereindex=childrennames.index('sphere') + sphere=self.children[sphereindex] + offset=sphere.arguments['r'] + nonsphere=self.children[0:sphereindex]+\ + self.sphere[sphereindex+1:] + obj=doc.addObject("Part::FeaturePython",'Offset') + if len(nonsphere) == 1: + child = nonsphere[0].addtofreecad(doc,obj) + else: + child = Node(name='imp_union',\ + children=nonsphere).addtofreecad(doc,obj) + OffsetShape(obj,child,offset) + ViewProviderTree(obj.ViewObject) + elif False: + raise(NotImplementedError) + pass # handle rotated cylinders and select edges that + #radius = radius0 * m1.multiply(FreeCAD.Vector(0,0,1)).dot(edge.Curve.tangent(0)[0]) + else: + raise(NotImplementedError) + elif namel == 'surface': + import os + scadstr = 'surface(file = "%s", center = %s );' % \ + (self.arguments['file'], 'true' if self.arguments['center'] else 'false') + docname=os.path.split(self.arguments['file'])[1] + objname,extension = docname.split('.',1) + obj = openscadmesh(doc,scadstr,objname) + + elif namel in ['glide','hull']: + raise(NotImplementedError) + elif namel in ['render','subdiv'] or True: + lenchld=len(self.children) + if lenchld == 1: + FreeCAD.Console.PrintMessage('Not recognized %s\n' % (self)) + obj = self.children[0].addtofreecad(doc,fcpar) + elif lenchld >1: + obj = Node(name='imp_union',\ + children=self.children).addtofreecad(doc,fcpar or True) + else: + obj = doc.addObject("Part::Feature",'Not_Impl_%s'%namel) + if fcpar == True: #We are the last real object, our parent is not rendered. + return obj + + if fcpar: + try: + obj.ViewObject.hide() + except: + raise + if True: #never refine the Shape, as it itroduces crashes + return obj + else: #refine Shape + import Draft + if obj.Type =='Part::Extrusion' and obj.Base.Type == 'Part::Part2DObjectPython' and \ + isinstance(obj.Base.Proxy,Draft._Polygon) or \ + (not obj.isDerivedFrom('Part::Extrusion') and \ + not obj.isDerivedFrom('Part::Boolean') and \ + not obj.isDerivedFrom('Part::Cut') and \ + not obj.isDerivedFrom('Part::MultiCommon') and \ + not obj.isDerivedFrom('Part::MultiFuse') and \ + not obj.isDerivedFrom('Part::Revolution') ) \ + or (obj.isDerivedFrom('Part::FeaturePython') and isinstance(obj.Proxy,RefineShape)): + return obj + else: + newobj=doc.addObject("Part::FeaturePython",'refine') + RefineShape(newobj,obj) + ViewProviderTree(newobj.ViewObject) + obj.ViewObject.hide() + return newobj + + else: + doc.recompute() + + def flattengroups(self,name='group'): + """removes group node with only one child and no arguments and empty groups""" + node=self + while (node.name==name and len(node.children)==1 and len(node.arguments)==0): + node=node.children[0] + node.children=[child for child in node.children if not (len(child.children)==0 and child.name==name)] + if node.children: + node.children = [child.flattengroups() for child in node.children] + return node + + def pprint(self,level=0): + """prints the indented tree""" + if self.arguments: + argstr = ' (%s)' % self.arguments + else: + argstr = '' + print '%s %s%s' %(' '*level,self.name,argstr) + for child in self.children: + child.pprint(level+1) + + def pprint2(self,path='root',pathjust=24): + """prints the tree. Left column contains the the systax to access a child""" + if self.arguments: + argstr = ' (%s)' % self.arguments + else: + argstr = '' + print '%s %s%s' %(path.ljust(pathjust),self.name,argstr) + for i,child in enumerate(self.children): + child.pprint2('%s[%d]'%(path,i),pathjust) + + + + +def parseexpression(e): + e=e.strip() + el = e.lower() + if len(el)==0: return None + if el == 'true': return True + elif el == 'false': return False + elif el == 'undef': return None + elif e[0].isdigit() or e[0] == '-' and len(e)>1 and e[1].isdigit(): + try: + return float(e) + except ValueError: + import FreeCAD + FreeCAD.Console.PrintMessage('%s\n' % (el)) + return 1.0 + + elif el.startswith('"'): return e.strip('"') #string literal + elif el.startswith('['): + bopen, bclose = e.count('['), e.count(']') + if bopen == bclose: + return eval(el) + else: + import FreeCAD + FreeCAD.Console.PrintMessage('%s\n' % (el)) + #return eval(el) + #assert(False) #Malformed + else: + return e #Return the string + +def parseargs(argstring): + if '=' in argstring: + level=0 + tok=[] + a=[] + for i,char in enumerate(argstring): + if char=='[': level+=1 + elif char ==']': level -=1 + if level==0 and (char=='=' or char==','): + tok.append(''.join(a).strip()) + a=[] + else: + a.append(char) + tok.append(''.join(a).strip()) + #print tok + argdict=dict(zip(tok[0::2],[parseexpression(argstring) for argstring in tok[1::2]])) +# argdict={} +# for key, value in re.findall(r"(\$?\w+)\s*=\s*(\[?\w+]?),?\s*",argstring): +# argdict[key] = parseexpression(value) + return argdict + else: + return parseexpression(argstring) + +def parsenode(str1): + name,str2=str1.strip().split('(',1) + assert('}' not in name) + name=name.strip('#!%* ')#remove/ignore modifiers + args,str3=str2.split(')',1) + str4=str3.lstrip() + if str4.startswith(';'): + #has no children + nextelement=str4[1:].lstrip() + return Node(name,parseargs(args)),nextelement + elif str4.startswith('{'): + #has children + level=0 + for index,char in enumerate(str4): + if char == '{': level += 1 + elif char == '}': level -= 1 + if level == 0: + break + #end of children + childstr= str4[1:index].strip() + nextelement = str4[index+1:].lstrip() + bopen,bclose=childstr.count('{'),childstr.count('}') + assert(bopen == bclose) + children=[] + while childstr: + try: + childnode,childstr=parsenode(childstr) + children.append(childnode) + except ValueError: + raise + if args: + args=parseargs(args) + return Node(name,args,children),nextelement + +def readfile(filename): + import os + global lastimportpath + lastimportpath,relname = os.path.split(filename) + isopenscad = relname.lower().endswith('.scad') + if isopenscad: + tmpfile=callopenscad(filename) + lastimportpath = os.getcwd() #https://github.com/openscad/openscad/issues/128 + f = pythonopen(tmpfile) + else: + f = pythonopen(filename) + rootnode=parsenode(f.read())[0] + f.close() + if isopenscad: + os.unlink(tmpfile) + return rootnode.flattengroups() + +def open(filename): + import os + docname=os.path.split(filename)[1] + doc=FreeCAD.newDocument(docname) + doc.Label = (docname.split('.',1)[0]) + readfile(filename).addtofreecad(doc) + #doc.recompute() + return doc + +def insert(filename,docname): + try: + doc=FreeCAD.getDocument(docname) + except: + doc=FreeCAD.newDocument(docname) + readfile(filename).addtofreecad(doc) + #doc.recompute() + + +import FreeCAD + +global dxfcache +dxfcache = {} + + diff --git a/src/Mod/OpenSCAD/replaceobj.py b/src/Mod/OpenSCAD/replaceobj.py new file mode 100644 index 000000000..54185734c --- /dev/null +++ b/src/Mod/OpenSCAD/replaceobj.py @@ -0,0 +1,31 @@ +def replaceobj(parent,oldchild,newchild): + for propname in parent.PropertiesList: + propvalue=parent.getPropertyByName(propname) + if type(propvalue) == list: + for dontcare in range(propvalue.count(oldchild)): + propvalue[propvalue.index(oldchild)] = newchild + setattr(parent,propname,propvalue) + #print propname, parent.getPropertyByName(propname) + else: + if propvalue == oldchild: + setattr(parent,propname,newchild) + print propname, parent.getPropertyByName(propname) + #else: print propname,propvalue + +def replaceobjfromselection(objs): + assert(len(objs)==3) + if objs[0] in objs[1].InList: parent, oldchild, newchild = objs + elif objs[0] in objs[2].InList: parent, newchild, oldchild = objs + elif objs[1] in objs[0].InList: oldchild, parent, newchild = objs + elif objs[1] in objs[2].InList: newchild, parent, oldchild = objs + elif objs[2] in objs[0].InList: oldchild, newchild, parent = objs + elif objs[2] in objs[1].InList: newchild, oldchild, parent = objs + else: assert(False) + replaceobj(parent,oldchild,newchild) + +if __name__ == '__main__': + import FreeCAD,FreeCADGui + objs=[selobj.Object for selobj in FreeCADGui.Selection.getSelectionEx()] + replaceobjfromselection(objs) + + diff --git a/src/Mod/OpenSCAD/tokrules.py b/src/Mod/OpenSCAD/tokrules.py new file mode 100644 index 000000000..73cccc9b0 --- /dev/null +++ b/src/Mod/OpenSCAD/tokrules.py @@ -0,0 +1,132 @@ +# -*- coding: utf8 -*- + +#*************************************************************************** +#* * +#* Copyright (c) 2012 Keith Sloan * +#* * +#* This program is free software; you can redistribute it and/or modify * +#* it under the terms of the GNU General Public License (GPL) * +#* as published by the Free Software Foundation; either version 2 of * +#* the License, or (at your option) any later version. * +#* for detail see the LICENCE text file. * +#* * +#* This program is distributed in the hope that it will be useful, * +#* but WITHOUT ANY WARRANTY; without even the implied warranty of * +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +#* GNU Library General Public License for more details. * +#* * +#* You should have received a copy of the GNU Library General Public * +#* License along with this program; if not, write to the Free Software * +#* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * +#* USA * +#* * +#*************************************************************************** +__title__="FreeCAD OpenSCAD Workbench - CSG importer Version 0.5c" +__author__ = "Keith Sloan " +__url__ = ["http://www.sloan-home.co.uk/ImportCSG"] + +# Reserved words +reserved = ( + 'group', + 'sphere', + 'cylinder', + 'cube', + 'size', + 'multmatrix', + 'intersection', + 'difference', + 'union', + 'rotate_extrude', + 'linear_extrude', + 'center', + 'true', + 'false', + 'circle', + 'square', + 'polygon', + 'paths', + 'points', + 'undef', + 'polyhedron', + 'triangles', + 'render', + 'surface', + 'subdiv', + 'glide', + 'hull', + 'minkowski', + 'projection', + 'import_stl', + 'import_dxf', + 'import', + 'origin', + 'layer', + 'file', + 'color', + 'cut', + ) + +# List of token names. This is always required +tokens = reserved + ( + 'WORD', + 'NUMBER', + 'LPAREN', + 'RPAREN', + 'OBRACE', + 'EBRACE', + 'OSQUARE', + 'ESQUARE', + 'COMMA', + 'SEMICOL', + 'EQ', + 'STRING', + 'ID', + 'DOT' +) + +# Regular expression rules for simple tokens +t_WORD = r'[$]?[a-zA-Z_]+[0-9]*' +t_NUMBER = r'[-]?[0-9]*[\.]*[0-9]+([eE]-?[0-9]+)*' +t_LPAREN = r'\(' +t_RPAREN = r'\)' +t_OBRACE = r'{' +t_EBRACE = r'\}' +t_OSQUARE = r'\[' +t_ESQUARE = r'\]' +t_COMMA = r',' +t_SEMICOL = r';' +t_EQ = r'=' +t_DOT = r'\.' +t_STRING = r'"[^"]*"' +#t_STRING = r'["]+[a-zA-Z.]+["]+' +# Deal with Reserved words +reserved_map = { } +for r in reserved: + reserved_map[r.lower()] = r + +# Deal with Comments +def t_comment1(t) : + r'//[^\r\n]*((\r\n)|<>)' + pass + +def t_comment2(t) : + r'//[^\n]*((\n)|<>)' + pass + +def t_ID(t): + r'[$]?[a-zA-Z_]+[0-9]*' + t.type = reserved_map.get(t.value, "ID") + return t + +# Define a rule so we can track line numbers +def t_newline(t): + r'\n+' + t.lexer.lineno += len(t.value) + +# A string containing ignored characters (spaces and tabs) +t_ignore = " \t\r" + +# Error handling rule +def t_error(t): + print "Illegal character '%s'" % t.value[0] + t.lexer.skip(1) From 4f9db45798adfb30caf191ce95d0be7881eb894e Mon Sep 17 00:00:00 2001 From: jriegel Date: Wed, 5 Sep 2012 19:44:03 +0200 Subject: [PATCH 2/2] Add Installer entry for the OpenSCAD module --- src/Mod/CMakeLists.txt | 2 + src/WindowsInstaller/FreeCAD.wxs | 2 + src/WindowsInstaller/FreeCADModules.wxs | 1 + src/WindowsInstaller/ModOpenSCAD.wxi | 51 +++++++++++++++++++++++++ 4 files changed, 56 insertions(+) create mode 100644 src/WindowsInstaller/ModOpenSCAD.wxi diff --git a/src/Mod/CMakeLists.txt b/src/Mod/CMakeLists.txt index 181d3ef91..d1f0736ae 100644 --- a/src/Mod/CMakeLists.txt +++ b/src/Mod/CMakeLists.txt @@ -47,3 +47,5 @@ endif(FREECAD_BUILD_SANDBOX) add_subdirectory(Surfaces) add_subdirectory(Ship) add_subdirectory(OpenSCAD) + + diff --git a/src/WindowsInstaller/FreeCAD.wxs b/src/WindowsInstaller/FreeCAD.wxs index ee21354a8..05a5d19fd 100644 --- a/src/WindowsInstaller/FreeCAD.wxs +++ b/src/WindowsInstaller/FreeCAD.wxs @@ -159,6 +159,8 @@ + + diff --git a/src/WindowsInstaller/FreeCADModules.wxs b/src/WindowsInstaller/FreeCADModules.wxs index e8d7e7db8..019ae14f8 100644 --- a/src/WindowsInstaller/FreeCADModules.wxs +++ b/src/WindowsInstaller/FreeCADModules.wxs @@ -52,6 +52,7 @@ + diff --git a/src/WindowsInstaller/ModOpenSCAD.wxi b/src/WindowsInstaller/ModOpenSCAD.wxi new file mode 100644 index 000000000..3e5bae553 --- /dev/null +++ b/src/WindowsInstaller/ModOpenSCAD.wxi @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +