diff --git a/Recast/Build/VC9/Recast.sln b/Recast/Build/VC9/Recast.sln
new file mode 100644
index 0000000..d3c3d24
--- /dev/null
+++ b/Recast/Build/VC9/Recast.sln
@@ -0,0 +1,20 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual C++ Express 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Recast", "Recast.vcproj", "{CEF242C5-E9A3-403B-BAFF-99397BDA5730}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Release|Win32 = Release|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {CEF242C5-E9A3-403B-BAFF-99397BDA5730}.Debug|Win32.ActiveCfg = Debug|Win32
+ {CEF242C5-E9A3-403B-BAFF-99397BDA5730}.Debug|Win32.Build.0 = Debug|Win32
+ {CEF242C5-E9A3-403B-BAFF-99397BDA5730}.Release|Win32.ActiveCfg = Release|Win32
+ {CEF242C5-E9A3-403B-BAFF-99397BDA5730}.Release|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Recast/Build/VC9/Recast.suo b/Recast/Build/VC9/Recast.suo
new file mode 100644
index 0000000..ffe0ef3
Binary files /dev/null and b/Recast/Build/VC9/Recast.suo differ
diff --git a/Recast/Build/VC9/Recast.vcproj b/Recast/Build/VC9/Recast.vcproj
new file mode 100644
index 0000000..0269043
--- /dev/null
+++ b/Recast/Build/VC9/Recast.vcproj
@@ -0,0 +1,275 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Recast/Build/Xcode/English.lproj/InfoPlist.strings b/Recast/Build/Xcode/English.lproj/InfoPlist.strings
new file mode 100644
index 0000000..5e45963
Binary files /dev/null and b/Recast/Build/Xcode/English.lproj/InfoPlist.strings differ
diff --git a/Recast/Build/Xcode/English.lproj/MainMenu.xib b/Recast/Build/Xcode/English.lproj/MainMenu.xib
new file mode 100644
index 0000000..3a7530a
--- /dev/null
+++ b/Recast/Build/Xcode/English.lproj/MainMenu.xib
@@ -0,0 +1,3034 @@
+
+
+
+ 1050
+ 9D29
+ 664
+ 949.33
+ 352.00
+
+
+
+
+
+ YES
+
+
+ performMiniaturize:
+
+
+
+ 37
+
+
+
+ arrangeInFront:
+
+
+
+ 39
+
+
+
+ print:
+
+
+
+ 86
+
+
+
+ runPageLayout:
+
+
+
+ 87
+
+
+
+ clearRecentDocuments:
+
+
+
+ 127
+
+
+
+ orderFrontStandardAboutPanel:
+
+
+
+ 142
+
+
+
+ performClose:
+
+
+
+ 193
+
+
+
+ toggleContinuousSpellChecking:
+
+
+
+ 222
+
+
+
+ undo:
+
+
+
+ 223
+
+
+
+ copy:
+
+
+
+ 224
+
+
+
+ checkSpelling:
+
+
+
+ 225
+
+
+
+ paste:
+
+
+
+ 226
+
+
+
+ stopSpeaking:
+
+
+
+ 227
+
+
+
+ cut:
+
+
+
+ 228
+
+
+
+ showGuessPanel:
+
+
+
+ 230
+
+
+
+ redo:
+
+
+
+ 231
+
+
+
+ selectAll:
+
+
+
+ 232
+
+
+
+ startSpeaking:
+
+
+
+ 233
+
+
+
+ delete:
+
+
+
+ 235
+
+
+
+ performZoom:
+
+
+
+ 240
+
+
+
+ performFindPanelAction:
+
+
+
+ 241
+
+
+
+ centerSelectionInVisibleArea:
+
+
+
+ 245
+
+
+
+ toggleGrammarChecking:
+
+
+
+ 347
+
+
+
+ toggleSmartInsertDelete:
+
+
+
+ 355
+
+
+
+ toggleAutomaticQuoteSubstitution:
+
+
+
+ 356
+
+
+
+ toggleAutomaticLinkDetection:
+
+
+
+ 357
+
+
+
+ showHelp:
+
+
+
+ 360
+
+
+
+ saveDocument:
+
+
+
+ 362
+
+
+
+ saveDocumentAs:
+
+
+
+ 363
+
+
+
+ revertDocumentToSaved:
+
+
+
+ 364
+
+
+
+ runToolbarCustomizationPalette:
+
+
+
+ 365
+
+
+
+ toggleToolbarShown:
+
+
+
+ 366
+
+
+
+ hide:
+
+
+
+ 367
+
+
+
+ hideOtherApplications:
+
+
+
+ 368
+
+
+
+ unhideAllApplications:
+
+
+
+ 370
+
+
+
+ newDocument:
+
+
+
+ 373
+
+
+
+ openDocument:
+
+
+
+ 374
+
+
+
+ addFontTrait:
+
+
+
+ 421
+
+
+
+ addFontTrait:
+
+
+
+ 422
+
+
+
+ modifyFont:
+
+
+
+ 423
+
+
+
+ orderFrontFontPanel:
+
+
+
+ 424
+
+
+
+ modifyFont:
+
+
+
+ 425
+
+
+
+ raiseBaseline:
+
+
+
+ 426
+
+
+
+ lowerBaseline:
+
+
+
+ 427
+
+
+
+ copyFont:
+
+
+
+ 428
+
+
+
+ subscript:
+
+
+
+ 429
+
+
+
+ superscript:
+
+
+
+ 430
+
+
+
+ tightenKerning:
+
+
+
+ 431
+
+
+
+ underline:
+
+
+
+ 432
+
+
+
+ orderFrontColorPanel:
+
+
+
+ 433
+
+
+
+ useAllLigatures:
+
+
+
+ 434
+
+
+
+ loosenKerning:
+
+
+
+ 435
+
+
+
+ pasteFont:
+
+
+
+ 436
+
+
+
+ unscript:
+
+
+
+ 437
+
+
+
+ useStandardKerning:
+
+
+
+ 438
+
+
+
+ useStandardLigatures:
+
+
+
+ 439
+
+
+
+ turnOffLigatures:
+
+
+
+ 440
+
+
+
+ turnOffKerning:
+
+
+
+ 441
+
+
+
+ alignLeft:
+
+
+
+ 442
+
+
+
+ alignJustified:
+
+
+
+ 443
+
+
+
+ copyRuler:
+
+
+
+ 444
+
+
+
+ alignCenter:
+
+
+
+ 445
+
+
+
+ toggleRuler:
+
+
+
+ 446
+
+
+
+ alignRight:
+
+
+
+ 447
+
+
+
+ pasteRuler:
+
+
+
+ 448
+
+
+
+ terminate:
+
+
+
+ 449
+
+
+
+
+ YES
+
+ 0
+
+ YES
+
+
+
+
+
+ -2
+
+
+ RmlsZSdzIE93bmVyA
+
+
+ -1
+
+
+ First Responder
+
+
+ -3
+
+
+ Application
+
+
+ 29
+
+
+ YES
+
+
+
+
+
+
+
+
+
+ MainMenu
+
+
+ 19
+
+
+ YES
+
+
+
+
+
+ 56
+
+
+ YES
+
+
+
+
+
+ 103
+
+
+ YES
+
+
+
+ 1
+
+
+ 217
+
+
+ YES
+
+
+
+
+
+ 83
+
+
+ YES
+
+
+
+
+
+ 81
+
+
+ YES
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 75
+
+
+ 3
+
+
+ 80
+
+
+ 8
+
+
+ 78
+
+
+ 6
+
+
+ 72
+
+
+
+
+ 82
+
+
+ 9
+
+
+ 124
+
+
+ YES
+
+
+
+
+
+ 77
+
+
+ 5
+
+
+ 73
+
+
+ 1
+
+
+ 79
+
+
+ 7
+
+
+ 112
+
+
+ 10
+
+
+ 74
+
+
+ 2
+
+
+ 125
+
+
+ YES
+
+
+
+
+
+ 126
+
+
+
+
+ 205
+
+
+ YES
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 202
+
+
+
+
+ 198
+
+
+
+
+ 207
+
+
+
+
+ 214
+
+
+
+
+ 199
+
+
+
+
+ 203
+
+
+
+
+ 197
+
+
+
+
+ 206
+
+
+
+
+ 215
+
+
+
+
+ 218
+
+
+ YES
+
+
+
+
+
+ 216
+
+
+ YES
+
+
+
+
+
+ 200
+
+
+ YES
+
+
+
+
+
+
+
+
+ 219
+
+
+
+
+ 201
+
+
+
+
+ 204
+
+
+
+
+ 220
+
+
+ YES
+
+
+
+
+
+
+
+
+
+ 213
+
+
+
+
+ 210
+
+
+
+
+ 221
+
+
+
+
+ 208
+
+
+
+
+ 209
+
+
+
+
+ 106
+
+
+ YES
+
+
+
+ 2
+
+
+ 111
+
+
+
+
+ 57
+
+
+ YES
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 58
+
+
+
+
+ 134
+
+
+
+
+ 150
+
+
+
+
+ 136
+
+
+ 1111
+
+
+ 144
+
+
+
+
+ 129
+
+
+ 121
+
+
+ 143
+
+
+
+
+ 236
+
+
+
+
+ 131
+
+
+ YES
+
+
+
+
+
+ 149
+
+
+
+
+ 145
+
+
+
+
+ 130
+
+
+
+
+ 24
+
+
+ YES
+
+
+
+
+
+
+
+
+ 92
+
+
+
+
+ 5
+
+
+
+
+ 239
+
+
+
+
+ 23
+
+
+
+
+ 295
+
+
+ YES
+
+
+
+
+
+ 296
+
+
+ YES
+
+
+
+
+
+
+ 297
+
+
+
+
+ 298
+
+
+
+
+ 211
+
+
+ YES
+
+
+
+
+
+ 212
+
+
+ YES
+
+
+
+
+
+
+ 195
+
+
+
+
+ 196
+
+
+
+
+ 346
+
+
+
+
+ 348
+
+
+ YES
+
+
+
+
+
+ 349
+
+
+ YES
+
+
+
+
+
+
+
+ 350
+
+
+
+
+ 351
+
+
+
+
+ 354
+
+
+
+
+ 371
+
+
+ YES
+
+
+
+
+
+ 372
+
+
+
+
+ 375
+
+
+ YES
+
+
+
+
+
+ 376
+
+
+ YES
+
+
+
+
+
+
+ 377
+
+
+ YES
+
+
+
+
+
+ 378
+
+
+ YES
+
+
+
+
+
+ 379
+
+
+ YES
+
+
+
+
+
+
+
+
+
+
+
+
+ 380
+
+
+
+
+ 381
+
+
+
+
+ 382
+
+
+
+
+ 383
+
+
+
+
+ 384
+
+
+
+
+ 385
+
+
+
+
+ 386
+
+
+
+
+ 387
+
+
+
+
+ 388
+
+
+ YES
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 389
+
+
+
+
+ 390
+
+
+
+
+ 391
+
+
+
+
+ 392
+
+
+
+
+ 393
+
+
+
+
+ 394
+
+
+
+
+ 395
+
+
+
+
+ 396
+
+
+
+
+ 397
+
+
+ YES
+
+
+
+
+
+ 398
+
+
+ YES
+
+
+
+
+
+ 399
+
+
+ YES
+
+
+
+
+
+ 400
+
+
+
+
+ 401
+
+
+
+
+ 402
+
+
+
+
+ 403
+
+
+
+
+ 404
+
+
+
+
+ 405
+
+
+ YES
+
+
+
+
+
+
+
+
+
+ 406
+
+
+
+
+ 407
+
+
+
+
+ 408
+
+
+
+
+ 409
+
+
+
+
+ 410
+
+
+
+
+ 411
+
+
+ YES
+
+
+
+
+
+
+
+ 412
+
+
+
+
+ 413
+
+
+
+
+ 414
+
+
+
+
+ 415
+
+
+ YES
+
+
+
+
+
+
+
+
+ 416
+
+
+
+
+ 417
+
+
+
+
+ 418
+
+
+
+
+ 419
+
+
+
+
+ 420
+
+
+
+
+
+
+ YES
+
+ YES
+ -1.IBPluginDependency
+ -2.IBPluginDependency
+ -3.IBPluginDependency
+ 103.IBPluginDependency
+ 103.ImportedFromIB2
+ 106.IBPluginDependency
+ 106.ImportedFromIB2
+ 106.editorWindowContentRectSynchronizationRect
+ 111.IBPluginDependency
+ 111.ImportedFromIB2
+ 112.IBPluginDependency
+ 112.ImportedFromIB2
+ 124.IBPluginDependency
+ 124.ImportedFromIB2
+ 125.IBPluginDependency
+ 125.ImportedFromIB2
+ 125.editorWindowContentRectSynchronizationRect
+ 126.IBPluginDependency
+ 126.ImportedFromIB2
+ 129.IBPluginDependency
+ 129.ImportedFromIB2
+ 130.IBPluginDependency
+ 130.ImportedFromIB2
+ 130.editorWindowContentRectSynchronizationRect
+ 131.IBPluginDependency
+ 131.ImportedFromIB2
+ 134.IBPluginDependency
+ 134.ImportedFromIB2
+ 136.IBPluginDependency
+ 136.ImportedFromIB2
+ 143.IBPluginDependency
+ 143.ImportedFromIB2
+ 144.IBPluginDependency
+ 144.ImportedFromIB2
+ 145.IBPluginDependency
+ 145.ImportedFromIB2
+ 149.IBPluginDependency
+ 149.ImportedFromIB2
+ 150.IBPluginDependency
+ 150.ImportedFromIB2
+ 19.IBPluginDependency
+ 19.ImportedFromIB2
+ 195.IBPluginDependency
+ 195.ImportedFromIB2
+ 196.IBPluginDependency
+ 196.ImportedFromIB2
+ 197.IBPluginDependency
+ 197.ImportedFromIB2
+ 198.IBPluginDependency
+ 198.ImportedFromIB2
+ 199.IBPluginDependency
+ 199.ImportedFromIB2
+ 200.IBPluginDependency
+ 200.ImportedFromIB2
+ 200.editorWindowContentRectSynchronizationRect
+ 201.IBPluginDependency
+ 201.ImportedFromIB2
+ 202.IBPluginDependency
+ 202.ImportedFromIB2
+ 203.IBPluginDependency
+ 203.ImportedFromIB2
+ 204.IBPluginDependency
+ 204.ImportedFromIB2
+ 205.IBPluginDependency
+ 205.ImportedFromIB2
+ 205.editorWindowContentRectSynchronizationRect
+ 206.IBPluginDependency
+ 206.ImportedFromIB2
+ 207.IBPluginDependency
+ 207.ImportedFromIB2
+ 208.IBPluginDependency
+ 208.ImportedFromIB2
+ 209.IBPluginDependency
+ 209.ImportedFromIB2
+ 210.IBPluginDependency
+ 210.ImportedFromIB2
+ 211.IBPluginDependency
+ 211.ImportedFromIB2
+ 212.IBPluginDependency
+ 212.ImportedFromIB2
+ 212.editorWindowContentRectSynchronizationRect
+ 213.IBPluginDependency
+ 213.ImportedFromIB2
+ 214.IBPluginDependency
+ 214.ImportedFromIB2
+ 215.IBPluginDependency
+ 215.ImportedFromIB2
+ 216.IBPluginDependency
+ 216.ImportedFromIB2
+ 217.IBPluginDependency
+ 217.ImportedFromIB2
+ 218.IBPluginDependency
+ 218.ImportedFromIB2
+ 219.IBPluginDependency
+ 219.ImportedFromIB2
+ 220.IBPluginDependency
+ 220.ImportedFromIB2
+ 220.editorWindowContentRectSynchronizationRect
+ 221.IBPluginDependency
+ 221.ImportedFromIB2
+ 23.IBPluginDependency
+ 23.ImportedFromIB2
+ 236.IBPluginDependency
+ 236.ImportedFromIB2
+ 239.IBPluginDependency
+ 239.ImportedFromIB2
+ 24.IBPluginDependency
+ 24.ImportedFromIB2
+ 24.editorWindowContentRectSynchronizationRect
+ 29.IBEditorWindowLastContentRect
+ 29.IBPluginDependency
+ 29.ImportedFromIB2
+ 29.WindowOrigin
+ 29.editorWindowContentRectSynchronizationRect
+ 295.IBPluginDependency
+ 296.IBPluginDependency
+ 296.editorWindowContentRectSynchronizationRect
+ 297.IBPluginDependency
+ 298.IBPluginDependency
+ 346.IBPluginDependency
+ 346.ImportedFromIB2
+ 348.IBPluginDependency
+ 348.ImportedFromIB2
+ 349.IBPluginDependency
+ 349.ImportedFromIB2
+ 349.editorWindowContentRectSynchronizationRect
+ 350.IBPluginDependency
+ 350.ImportedFromIB2
+ 351.IBPluginDependency
+ 351.ImportedFromIB2
+ 354.IBPluginDependency
+ 354.ImportedFromIB2
+ 371.IBEditorWindowLastContentRect
+ 371.IBPluginDependency
+ 371.IBWindowTemplateEditedContentRect
+ 371.NSWindowTemplate.visibleAtLaunch
+ 371.editorWindowContentRectSynchronizationRect
+ 371.windowTemplate.maxSize
+ 372.IBPluginDependency
+ 375.IBPluginDependency
+ 376.IBEditorWindowLastContentRect
+ 376.IBPluginDependency
+ 377.IBPluginDependency
+ 378.IBPluginDependency
+ 379.IBPluginDependency
+ 380.IBPluginDependency
+ 381.IBPluginDependency
+ 382.IBPluginDependency
+ 383.IBPluginDependency
+ 384.IBPluginDependency
+ 385.IBPluginDependency
+ 386.IBPluginDependency
+ 387.IBPluginDependency
+ 388.IBEditorWindowLastContentRect
+ 388.IBPluginDependency
+ 389.IBPluginDependency
+ 390.IBPluginDependency
+ 391.IBPluginDependency
+ 392.IBPluginDependency
+ 393.IBPluginDependency
+ 394.IBPluginDependency
+ 395.IBPluginDependency
+ 396.IBPluginDependency
+ 397.IBPluginDependency
+ 398.IBPluginDependency
+ 399.IBPluginDependency
+ 400.IBPluginDependency
+ 401.IBPluginDependency
+ 402.IBPluginDependency
+ 403.IBPluginDependency
+ 404.IBPluginDependency
+ 405.IBPluginDependency
+ 406.IBPluginDependency
+ 407.IBPluginDependency
+ 408.IBPluginDependency
+ 409.IBPluginDependency
+ 410.IBPluginDependency
+ 411.IBPluginDependency
+ 412.IBPluginDependency
+ 413.IBPluginDependency
+ 414.IBPluginDependency
+ 415.IBPluginDependency
+ 416.IBPluginDependency
+ 417.IBPluginDependency
+ 418.IBPluginDependency
+ 419.IBPluginDependency
+ 5.IBPluginDependency
+ 5.ImportedFromIB2
+ 56.IBPluginDependency
+ 56.ImportedFromIB2
+ 57.IBEditorWindowLastContentRect
+ 57.IBPluginDependency
+ 57.ImportedFromIB2
+ 57.editorWindowContentRectSynchronizationRect
+ 58.IBPluginDependency
+ 58.ImportedFromIB2
+ 72.IBPluginDependency
+ 72.ImportedFromIB2
+ 73.IBPluginDependency
+ 73.ImportedFromIB2
+ 74.IBPluginDependency
+ 74.ImportedFromIB2
+ 75.IBPluginDependency
+ 75.ImportedFromIB2
+ 77.IBPluginDependency
+ 77.ImportedFromIB2
+ 78.IBPluginDependency
+ 78.ImportedFromIB2
+ 79.IBPluginDependency
+ 79.ImportedFromIB2
+ 80.IBPluginDependency
+ 80.ImportedFromIB2
+ 81.IBPluginDependency
+ 81.ImportedFromIB2
+ 81.editorWindowContentRectSynchronizationRect
+ 82.IBPluginDependency
+ 82.ImportedFromIB2
+ 83.IBPluginDependency
+ 83.ImportedFromIB2
+ 92.IBPluginDependency
+ 92.ImportedFromIB2
+
+
+ YES
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilderKit
+ com.apple.InterfaceBuilderKit
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{596, 852}, {216, 23}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{522, 812}, {146, 23}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{436, 809}, {64, 6}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{608, 612}, {275, 83}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{187, 434}, {243, 243}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{608, 612}, {167, 43}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{608, 612}, {241, 103}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{525, 802}, {197, 73}}
+ {{207, 285}, {478, 20}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {74, 862}
+ {{6, 978}, {478, 20}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{475, 832}, {234, 43}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{608, 612}, {215, 63}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{335, 390}, {480, 360}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{335, 390}, {480, 360}}
+
+ {{33, 99}, {480, 360}}
+ {3.40282e+38, 3.40282e+38}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{437, 242}, {86, 43}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{523, 2}, {178, 283}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{219, 102}, {245, 183}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{23, 794}, {245, 183}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{145, 474}, {199, 203}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+
+ YES
+
+ YES
+
+
+ YES
+
+
+
+ 449
+
+
+ 0
+
+ 3
+
+
diff --git a/Recast/Build/Xcode/Info.plist b/Recast/Build/Xcode/Info.plist
new file mode 100644
index 0000000..612b7da
--- /dev/null
+++ b/Recast/Build/Xcode/Info.plist
@@ -0,0 +1,28 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIconFile
+
+ CFBundleIdentifier
+ com.yourcompany.${PRODUCT_NAME:identifier}
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${PRODUCT_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ NSMainNibFile
+ MainMenu
+ NSPrincipalClass
+ NSApplication
+
+
diff --git a/Recast/Build/Xcode/Recast.xcodeproj/TemplateIcon.icns b/Recast/Build/Xcode/Recast.xcodeproj/TemplateIcon.icns
new file mode 100644
index 0000000..62cb701
Binary files /dev/null and b/Recast/Build/Xcode/Recast.xcodeproj/TemplateIcon.icns differ
diff --git a/Recast/Build/Xcode/Recast.xcodeproj/memon.pbxuser b/Recast/Build/Xcode/Recast.xcodeproj/memon.pbxuser
new file mode 100644
index 0000000..42150ec
--- /dev/null
+++ b/Recast/Build/Xcode/Recast.xcodeproj/memon.pbxuser
@@ -0,0 +1,250 @@
+// !$*UTF8*$!
+{
+ 29B97313FDCFA39411CA2CEA /* Project object */ = {
+ activeBuildConfigurationName = Debug;
+ activeExecutable = 6B8632970F78114600E2684A /* Recast */;
+ activeTarget = 8D1107260486CEB800E47090 /* Recast */;
+ addToTargets = (
+ 8D1107260486CEB800E47090 /* Recast */,
+ );
+ codeSenseManager = 6B8632AA0F78115100E2684A /* Code sense */;
+ executables = (
+ 6B8632970F78114600E2684A /* Recast */,
+ );
+ perUserDictionary = {
+ PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = {
+ PBXFileTableDataSourceColumnSortingDirectionKey = "-1";
+ PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID;
+ PBXFileTableDataSourceColumnWidthsKey = (
+ 20,
+ 625,
+ 20,
+ 48,
+ 43,
+ 43,
+ 20,
+ );
+ PBXFileTableDataSourceColumnsKey = (
+ PBXFileDataSource_FiletypeID,
+ PBXFileDataSource_Filename_ColumnID,
+ PBXFileDataSource_Built_ColumnID,
+ PBXFileDataSource_ObjectSize_ColumnID,
+ PBXFileDataSource_Errors_ColumnID,
+ PBXFileDataSource_Warnings_ColumnID,
+ PBXFileDataSource_Target_ColumnID,
+ );
+ };
+ PBXPerProjectTemplateStateSaveDate = 259608223;
+ PBXWorkspaceStateSaveDate = 259608223;
+ };
+ perUserProjectItems = {
+ 6B68D7640F781974007E6D78 /* PBXTextBookmark */ = 6B68D7640F781974007E6D78 /* PBXTextBookmark */;
+ 6B85EA8A0F7970D500780B56 /* PBXTextBookmark */ = 6B85EA8A0F7970D500780B56 /* PBXTextBookmark */;
+ 6B8633370F7813A600E2684A /* PBXTextBookmark */ = 6B8633370F7813A600E2684A /* PBXTextBookmark */;
+ 6B86333A0F7813A600E2684A /* PBXTextBookmark */ = 6B86333A0F7813A600E2684A /* PBXTextBookmark */;
+ 6B86333B0F7813A600E2684A /* PBXTextBookmark */ = 6B86333B0F7813A600E2684A /* PBXTextBookmark */;
+ 6B8633780F78173000E2684A /* PBXTextBookmark */ = 6B8633780F78173000E2684A /* PBXTextBookmark */;
+ 6B8633790F78173000E2684A /* PBXTextBookmark */ = 6B8633790F78173000E2684A /* PBXTextBookmark */;
+ 6B86337C0F78173000E2684A /* PBXTextBookmark */ = 6B86337C0F78173000E2684A /* PBXTextBookmark */;
+ 6B86337E0F78173000E2684A /* PBXTextBookmark */ = 6B86337E0F78173000E2684A /* PBXTextBookmark */;
+ 6B8633820F78174400E2684A /* PBXTextBookmark */ = 6B8633820F78174400E2684A /* PBXTextBookmark */;
+ 6B8633840F78174400E2684A /* PBXTextBookmark */ = 6B8633840F78174400E2684A /* PBXTextBookmark */;
+ };
+ sourceControlManager = 6B8632A90F78115100E2684A /* Source Control */;
+ userBuildSettings = {
+ };
+ };
+ 6B68D7640F781974007E6D78 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B8632BC0F7811CB00E2684A /* demo.cpp */;
+ name = "demo.cpp: 631";
+ rLen = 0;
+ rLoc = 16040;
+ rType = 0;
+ vrLen = 1544;
+ vrLoc = 15684;
+ };
+ 6B85EA8A0F7970D500780B56 /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B8632BC0F7811CB00E2684A /* demo.cpp */;
+ name = "demo.cpp: 640";
+ rLen = 0;
+ rLoc = 16397;
+ rType = 0;
+ vrLen = 1544;
+ vrLoc = 15684;
+ };
+ 6B8632970F78114600E2684A /* Recast */ = {
+ isa = PBXExecutable;
+ activeArgIndices = (
+ );
+ argumentStrings = (
+ );
+ autoAttachOnCrash = 1;
+ breakpointsEnabled = 0;
+ configStateDict = {
+ };
+ customDataFormattersEnabled = 1;
+ debuggerPlugin = GDBDebugging;
+ disassemblyDisplayState = 0;
+ dylibVariantSuffix = "";
+ enableDebugStr = 1;
+ environmentEntries = (
+ );
+ executableSystemSymbolLevel = 0;
+ executableUserSymbolLevel = 0;
+ libgmallocEnabled = 0;
+ name = Recast;
+ sourceDirectories = (
+ );
+ };
+ 6B8632A90F78115100E2684A /* Source Control */ = {
+ isa = PBXSourceControlManager;
+ fallbackIsa = XCSourceControlManager;
+ isSCMEnabled = 0;
+ scmConfiguration = {
+ };
+ };
+ 6B8632AA0F78115100E2684A /* Code sense */ = {
+ isa = PBXCodeSenseManager;
+ indexTemplatePath = "";
+ };
+ 6B8632BA0F78119A00E2684A /* SDLMain.m */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {943, 6016}}";
+ sepNavSelRange = "{4217, 0}";
+ sepNavVisRange = "{3795, 1449}";
+ };
+ };
+ 6B8632BC0F7811CB00E2684A /* demo.cpp */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {803, 11568}}";
+ sepNavSelRange = "{16397, 0}";
+ sepNavVisRange = "{15684, 1544}";
+ };
+ };
+ 6B8633370F7813A600E2684A /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B8633380F7813A600E2684A /* SDL_events.h */;
+ name = "SDL_events.h: 238";
+ rLen = 0;
+ rLoc = 8641;
+ rType = 0;
+ vrLen = 785;
+ vrLoc = 8262;
+ };
+ 6B8633380F7813A600E2684A /* SDL_events.h */ = {
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ name = SDL_events.h;
+ path = /Library/Frameworks/SDL.framework/Versions/A/Headers/SDL_events.h;
+ sourceTree = "";
+ };
+ 6B86333A0F7813A600E2684A /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B8632BC0F7811CB00E2684A /* demo.cpp */;
+ name = "demo.cpp: 37";
+ rLen = 0;
+ rLoc = 0;
+ rType = 0;
+ vrLen = 438;
+ vrLoc = 598;
+ };
+ 6B86333B0F7813A600E2684A /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B86333C0F7813A600E2684A /* SDL_events.h */;
+ name = "SDL_events.h: 238";
+ rLen = 0;
+ rLoc = 8641;
+ rType = 0;
+ vrLen = 785;
+ vrLoc = 8262;
+ };
+ 6B86333C0F7813A600E2684A /* SDL_events.h */ = {
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.h;
+ name = SDL_events.h;
+ path = /Library/Frameworks/SDL.framework/Versions/A/Headers/SDL_events.h;
+ sourceTree = "";
+ };
+ 6B86335E0F7816FA00E2684A /* Recast.cpp */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {803, 4720}}";
+ sepNavSelRange = "{827, 0}";
+ sepNavVisRange = "{441, 1040}";
+ };
+ };
+ 6B8633650F7816FA00E2684A /* RecastMesh.cpp */ = {
+ uiCtxt = {
+ sepNavIntBoundsRect = "{{0, 0}, {803, 10768}}";
+ sepNavSelRange = "{1485, 0}";
+ sepNavVisRange = "{667, 687}";
+ };
+ };
+ 6B8633780F78173000E2684A /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B8632BA0F78119A00E2684A /* SDLMain.m */;
+ name = "SDLMain.m: 146";
+ rLen = 0;
+ rLoc = 4217;
+ rType = 0;
+ vrLen = 1449;
+ vrLoc = 3795;
+ };
+ 6B8633790F78173000E2684A /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B86335E0F7816FA00E2684A /* Recast.cpp */;
+ name = "Recast.cpp: 15";
+ rLen = 0;
+ rLoc = 827;
+ rType = 0;
+ vrLen = 1040;
+ vrLoc = 441;
+ };
+ 6B86337C0F78173000E2684A /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B8632BA0F78119A00E2684A /* SDLMain.m */;
+ name = "SDLMain.m: 146";
+ rLen = 0;
+ rLoc = 4217;
+ rType = 0;
+ vrLen = 1449;
+ vrLoc = 3795;
+ };
+ 6B86337E0F78173000E2684A /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B86335E0F7816FA00E2684A /* Recast.cpp */;
+ name = "Recast.cpp: 15";
+ rLen = 0;
+ rLoc = 827;
+ rType = 0;
+ vrLen = 1040;
+ vrLoc = 441;
+ };
+ 6B8633820F78174400E2684A /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B8633650F7816FA00E2684A /* RecastMesh.cpp */;
+ name = "RecastMesh.cpp: 42";
+ rLen = 0;
+ rLoc = 1485;
+ rType = 0;
+ vrLen = 687;
+ vrLoc = 667;
+ };
+ 6B8633840F78174400E2684A /* PBXTextBookmark */ = {
+ isa = PBXTextBookmark;
+ fRef = 6B8633650F7816FA00E2684A /* RecastMesh.cpp */;
+ name = "RecastMesh.cpp: 42";
+ rLen = 0;
+ rLoc = 1485;
+ rType = 0;
+ vrLen = 687;
+ vrLoc = 667;
+ };
+ 8D1107260486CEB800E47090 /* Recast */ = {
+ activeExec = 0;
+ executables = (
+ 6B8632970F78114600E2684A /* Recast */,
+ );
+ };
+}
diff --git a/Recast/Build/Xcode/Recast.xcodeproj/memon.perspectivev3 b/Recast/Build/Xcode/Recast.xcodeproj/memon.perspectivev3
new file mode 100644
index 0000000..8e7c960
--- /dev/null
+++ b/Recast/Build/Xcode/Recast.xcodeproj/memon.perspectivev3
@@ -0,0 +1,1484 @@
+
+
+
+
+ ActivePerspectiveName
+ Project
+ AllowedModules
+
+
+ BundleLoadPath
+
+ MaxInstances
+ n
+ Module
+ PBXSmartGroupTreeModule
+ Name
+ Groups and Files Outline View
+
+
+ BundleLoadPath
+
+ MaxInstances
+ n
+ Module
+ PBXNavigatorGroup
+ Name
+ Editor
+
+
+ BundleLoadPath
+
+ MaxInstances
+ n
+ Module
+ XCTaskListModule
+ Name
+ Task List
+
+
+ BundleLoadPath
+
+ MaxInstances
+ n
+ Module
+ XCDetailModule
+ Name
+ File and Smart Group Detail Viewer
+
+
+ BundleLoadPath
+
+ MaxInstances
+ 1
+ Module
+ PBXBuildResultsModule
+ Name
+ Detailed Build Results Viewer
+
+
+ BundleLoadPath
+
+ MaxInstances
+ 1
+ Module
+ PBXProjectFindModule
+ Name
+ Project Batch Find Tool
+
+
+ BundleLoadPath
+
+ MaxInstances
+ n
+ Module
+ XCProjectFormatConflictsModule
+ Name
+ Project Format Conflicts List
+
+
+ BundleLoadPath
+
+ MaxInstances
+ n
+ Module
+ PBXBookmarksModule
+ Name
+ Bookmarks Tool
+
+
+ BundleLoadPath
+
+ MaxInstances
+ n
+ Module
+ PBXClassBrowserModule
+ Name
+ Class Browser
+
+
+ BundleLoadPath
+
+ MaxInstances
+ n
+ Module
+ PBXCVSModule
+ Name
+ Source Code Control Tool
+
+
+ BundleLoadPath
+
+ MaxInstances
+ n
+ Module
+ PBXDebugBreakpointsModule
+ Name
+ Debug Breakpoints Tool
+
+
+ BundleLoadPath
+
+ MaxInstances
+ n
+ Module
+ XCDockableInspector
+ Name
+ Inspector
+
+
+ BundleLoadPath
+
+ MaxInstances
+ n
+ Module
+ PBXOpenQuicklyModule
+ Name
+ Open Quickly Tool
+
+
+ BundleLoadPath
+
+ MaxInstances
+ 1
+ Module
+ PBXDebugSessionModule
+ Name
+ Debugger
+
+
+ BundleLoadPath
+
+ MaxInstances
+ 1
+ Module
+ PBXDebugCLIModule
+ Name
+ Debug Console
+
+
+ BundleLoadPath
+
+ MaxInstances
+ n
+ Module
+ XCSnapshotModule
+ Name
+ Snapshots Tool
+
+
+ BundlePath
+ /Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources
+ Description
+ AIODescriptionKey
+ DockingSystemVisible
+
+ Extension
+ perspectivev3
+ FavBarConfig
+
+ PBXProjectModuleGUID
+ 6B8632A80F78115100E2684A
+ XCBarModuleItemNames
+
+ XCBarModuleItems
+
+
+ FirstTimeWindowDisplayed
+
+ Identifier
+ com.apple.perspectives.project.defaultV3
+ MajorVersion
+ 34
+ MinorVersion
+ 0
+ Name
+ All-In-One
+ Notifications
+
+ OpenEditors
+
+ PerspectiveWidths
+
+ 810
+ 810
+
+ Perspectives
+
+
+ ChosenToolbarItems
+
+ XCToolbarPerspectiveControl
+ NSToolbarSeparatorItem
+ active-combo-popup
+ action
+ NSToolbarFlexibleSpaceItem
+ build-and-go
+ com.apple.ide.PBXToolbarStopButton
+ NSToolbarFlexibleSpaceItem
+ get-info
+ com.apple.pbx.toolbar.searchfield
+
+ ControllerClassBaseName
+
+ IconName
+ WindowOfProject
+ Identifier
+ perspective.project
+ IsVertical
+
+ Layout
+
+
+ ContentConfiguration
+
+ PBXBottomSmartGroupGIDs
+
+ 1C37FBAC04509CD000000102
+ 1C37FAAC04509CD000000102
+ 1C08E77C0454961000C914BD
+ 1C37FABC05509CD000000102
+ 1C37FABC05539CD112110102
+ E2644B35053B69B200211256
+ 1C37FABC04509CD000100104
+ 1CC0EA4004350EF90044410B
+ 1CC0EA4004350EF90041110B
+ 1C77FABC04509CD000000102
+
+ PBXProjectModuleGUID
+ 1CA23ED40692098700951B8B
+ PBXProjectModuleLabel
+ Files
+ PBXProjectStructureProvided
+ yes
+ PBXSmartGroupTreeModuleColumnData
+
+ PBXSmartGroupTreeModuleColumnWidthsKey
+
+ 185
+
+ PBXSmartGroupTreeModuleColumnsKey_v4
+
+ MainColumn
+
+
+ PBXSmartGroupTreeModuleOutlineStateKey_v7
+
+ PBXSmartGroupTreeModuleOutlineStateExpansionKey
+
+ 29B97314FDCFA39411CA2CEA
+ 080E96DDFE201D6D7F000001
+ 29B97323FDCFA39411CA2CEA
+ 1058C7A0FEA54F0111CA2CBB
+
+ PBXSmartGroupTreeModuleOutlineStateSelectionKey
+
+
+ 2
+ 1
+ 0
+
+
+ PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
+ {{0, 0}, {185, 595}}
+
+ PBXTopSmartGroupGIDs
+
+ XCIncludePerspectivesSwitch
+
+
+ GeometryConfiguration
+
+ Frame
+ {{0, 0}, {202, 613}}
+ GroupTreeTableConfiguration
+
+ MainColumn
+ 185
+
+ RubberWindowFrame
+ 55 112 1071 654 0 0 1280 778
+
+ Module
+ PBXSmartGroupTreeModule
+ Proportion
+ 202pt
+
+
+ Dock
+
+
+ BecomeActive
+
+ ContentConfiguration
+
+ PBXProjectModuleGUID
+ 6B8632A30F78115100E2684A
+ PBXProjectModuleLabel
+ demo.cpp
+ PBXSplitModuleInNavigatorKey
+
+ Split0
+
+ PBXProjectModuleGUID
+ 6B8632A40F78115100E2684A
+ PBXProjectModuleLabel
+ demo.cpp
+ _historyCapacity
+ 0
+ bookmark
+ 6B85EA8A0F7970D500780B56
+ history
+
+ 6B8633370F7813A600E2684A
+ 6B8633780F78173000E2684A
+ 6B8633790F78173000E2684A
+ 6B8633820F78174400E2684A
+ 6B68D7640F781974007E6D78
+
+ prevStack
+
+ 6B86333A0F7813A600E2684A
+ 6B86333B0F7813A600E2684A
+ 6B86337C0F78173000E2684A
+ 6B86337E0F78173000E2684A
+ 6B8633840F78174400E2684A
+
+
+ SplitCount
+ 1
+
+ StatusBarVisibility
+
+ XCSharingToken
+ com.apple.Xcode.CommonNavigatorGroupSharingToken
+
+ GeometryConfiguration
+
+ Frame
+ {{0, 0}, {864, 581}}
+ RubberWindowFrame
+ 55 112 1071 654 0 0 1280 778
+
+ Module
+ PBXNavigatorGroup
+ Proportion
+ 581pt
+
+
+ Proportion
+ 27pt
+ Tabs
+
+
+ ContentConfiguration
+
+ PBXProjectModuleGUID
+ 1CA23EDF0692099D00951B8B
+ PBXProjectModuleLabel
+ Detail
+
+ GeometryConfiguration
+
+ Frame
+ {{10, 27}, {864, 0}}
+ RubberWindowFrame
+ 55 112 1071 654 0 0 1280 778
+
+ Module
+ XCDetailModule
+
+
+ ContentConfiguration
+
+ PBXProjectModuleGUID
+ 1CA23EE00692099D00951B8B
+ PBXProjectModuleLabel
+ Project Find
+
+ GeometryConfiguration
+
+ Frame
+ {{10, 31}, {603, 297}}
+
+ Module
+ PBXProjectFindModule
+
+
+ ContentConfiguration
+
+ PBXCVSModuleFilterTypeKey
+ 1032
+ PBXProjectModuleGUID
+ 1CA23EE10692099D00951B8B
+ PBXProjectModuleLabel
+ SCM Results
+
+ GeometryConfiguration
+
+ Frame
+ {{10, 31}, {603, 297}}
+
+ Module
+ PBXCVSModule
+
+
+ ContentConfiguration
+
+ PBXProjectModuleGUID
+ XCMainBuildResultsModuleGUID
+ PBXProjectModuleLabel
+ Build
+ XCBuildResultsTrigger_Collapse
+ 1021
+ XCBuildResultsTrigger_Open
+ 1011
+
+ GeometryConfiguration
+
+ Frame
+ {{10, 27}, {864, 0}}
+
+ Module
+ PBXBuildResultsModule
+
+
+
+
+ Proportion
+ 864pt
+
+
+ Name
+ Project
+ ServiceClasses
+
+ XCModuleDock
+ PBXSmartGroupTreeModule
+ XCModuleDock
+ PBXNavigatorGroup
+ XCDockableTabModule
+ XCDetailModule
+ PBXProjectFindModule
+ PBXCVSModule
+ PBXBuildResultsModule
+
+ TableOfContents
+
+ 6B85EA810F794EA900780B56
+ 1CA23ED40692098700951B8B
+ 6B85EA820F794EA900780B56
+ 6B8632A30F78115100E2684A
+ 6B85EA830F794EA900780B56
+ 1CA23EDF0692099D00951B8B
+ 1CA23EE00692099D00951B8B
+ 1CA23EE10692099D00951B8B
+ XCMainBuildResultsModuleGUID
+
+ ToolbarConfiguration
+ xcode.toolbar.config.defaultV3
+
+
+ ChosenToolbarItems
+
+ XCToolbarPerspectiveControl
+ NSToolbarSeparatorItem
+ active-combo-popup
+ NSToolbarFlexibleSpaceItem
+ build-and-go
+ com.apple.ide.PBXToolbarStopButton
+ debugger-restart-executable
+ debugger-pause
+ debugger-step-over
+ debugger-step-into
+ debugger-step-out
+ debugger-enable-breakpoints
+ NSToolbarFlexibleSpaceItem
+ com.apple.ide.XCBreakpointsToolbarItem
+ clear-log
+
+ ControllerClassBaseName
+ PBXDebugSessionModule
+ IconName
+ DebugTabIcon
+ Identifier
+ perspective.debug
+ IsVertical
+
+ Layout
+
+
+ ContentConfiguration
+
+ PBXProjectModuleGUID
+ 1CCC7628064C1048000F2A68
+ PBXProjectModuleLabel
+ Debugger Console
+
+ GeometryConfiguration
+
+ Frame
+ {{0, 0}, {810, 132}}
+
+ Module
+ PBXDebugCLIModule
+ Proportion
+ 132pt
+
+
+ ContentConfiguration
+
+ Debugger
+
+ HorizontalSplitView
+
+ _collapsingFrameDimension
+ 0.0
+ _indexOfCollapsedView
+ 0
+ _percentageOfCollapsedView
+ 0.0
+ isCollapsed
+ yes
+ sizes
+
+ {{0, 0}, {395, 150}}
+ {{395, 0}, {415, 150}}
+
+
+ VerticalSplitView
+
+ _collapsingFrameDimension
+ 0.0
+ _indexOfCollapsedView
+ 0
+ _percentageOfCollapsedView
+ 0.0
+ isCollapsed
+ yes
+ sizes
+
+ {{0, 0}, {810, 150}}
+ {{0, 150}, {810, 159}}
+
+
+
+ LauncherConfigVersion
+ 8
+ PBXProjectModuleGUID
+ 1CCC7629064C1048000F2A68
+ PBXProjectModuleLabel
+ Debug
+
+ GeometryConfiguration
+
+ DebugConsoleVisible
+ None
+ DebugConsoleWindowFrame
+ {{200, 200}, {500, 300}}
+ DebugSTDIOWindowFrame
+ {{200, 200}, {500, 300}}
+ Frame
+ {{0, 137}, {810, 309}}
+ PBXDebugSessionStackFrameViewKey
+
+ DebugVariablesTableConfiguration
+
+ Name
+ 120
+ Value
+ 85
+ Summary
+ 185
+
+ Frame
+ {{395, 0}, {415, 150}}
+
+
+ Module
+ PBXDebugSessionModule
+ Proportion
+ 309pt
+
+
+ Name
+ Debug
+ ServiceClasses
+
+ XCModuleDock
+ PBXDebugCLIModule
+ PBXDebugSessionModule
+ PBXDebugProcessAndThreadModule
+ PBXDebugProcessViewModule
+ PBXDebugThreadViewModule
+ PBXDebugStackFrameViewModule
+ PBXNavigatorGroup
+
+ TableOfContents
+
+ 6B85EA840F794EA900780B56
+ 1CCC7628064C1048000F2A68
+ 1CCC7629064C1048000F2A68
+ 6B85EA850F794EA900780B56
+ 6B85EA860F794EA900780B56
+ 6B85EA870F794EA900780B56
+ 6B85EA880F794EA900780B56
+ 6B85EA890F794EA900780B56
+
+ ToolbarConfiguration
+ xcode.toolbar.config.debugV3
+
+
+ PerspectivesBarVisible
+
+ ShelfIsVisible
+
+ SourceDescription
+ file at '/Developer/Library/PrivateFrameworks/DevToolsInterface.framework/Resources/XCPerspectivesSpecification.xcperspec'
+ StatusbarIsVisible
+
+ TimeStamp
+ 0.0
+ ToolbarDisplayMode
+ 1
+ ToolbarIsVisible
+
+ ToolbarSizeMode
+ 1
+ Type
+ Perspectives
+ UpdateMessage
+
+ WindowJustification
+ 5
+ WindowOrderList
+
+ /Users/memon/Code/Recast/Build/Xcode/Recast.xcodeproj
+
+ WindowString
+ 55 112 1071 654 0 0 1280 778
+ WindowToolsV3
+
+
+ Identifier
+ windowTool.debugger
+ Layout
+
+
+ Dock
+
+
+ ContentConfiguration
+
+ Debugger
+
+ HorizontalSplitView
+
+ _collapsingFrameDimension
+ 0.0
+ _indexOfCollapsedView
+ 0
+ _percentageOfCollapsedView
+ 0.0
+ isCollapsed
+ yes
+ sizes
+
+ {{0, 0}, {317, 164}}
+ {{317, 0}, {377, 164}}
+
+
+ VerticalSplitView
+
+ _collapsingFrameDimension
+ 0.0
+ _indexOfCollapsedView
+ 0
+ _percentageOfCollapsedView
+ 0.0
+ isCollapsed
+ yes
+ sizes
+
+ {{0, 0}, {694, 164}}
+ {{0, 164}, {694, 216}}
+
+
+
+ LauncherConfigVersion
+ 8
+ PBXProjectModuleGUID
+ 1C162984064C10D400B95A72
+ PBXProjectModuleLabel
+ Debug - GLUTExamples (Underwater)
+
+ GeometryConfiguration
+
+ DebugConsoleDrawerSize
+ {100, 120}
+ DebugConsoleVisible
+ None
+ DebugConsoleWindowFrame
+ {{200, 200}, {500, 300}}
+ DebugSTDIOWindowFrame
+ {{200, 200}, {500, 300}}
+ Frame
+ {{0, 0}, {694, 380}}
+ RubberWindowFrame
+ 321 238 694 422 0 0 1440 878
+
+ Module
+ PBXDebugSessionModule
+ Proportion
+ 100%
+
+
+ Proportion
+ 100%
+
+
+ Name
+ Debugger
+ ServiceClasses
+
+ PBXDebugSessionModule
+
+ StatusbarIsVisible
+ 1
+ TableOfContents
+
+ 1CD10A99069EF8BA00B06720
+ 1C0AD2AB069F1E9B00FABCE6
+ 1C162984064C10D400B95A72
+ 1C0AD2AC069F1E9B00FABCE6
+
+ ToolbarConfiguration
+ xcode.toolbar.config.debugV3
+ WindowString
+ 321 238 694 422 0 0 1440 878
+ WindowToolGUID
+ 1CD10A99069EF8BA00B06720
+ WindowToolIsVisible
+ 0
+
+
+ Identifier
+ windowTool.build
+ Layout
+
+
+ Dock
+
+
+ ContentConfiguration
+
+ PBXProjectModuleGUID
+ 1CD0528F0623707200166675
+ PBXProjectModuleLabel
+ <No Editor>
+ PBXSplitModuleInNavigatorKey
+
+ Split0
+
+ PBXProjectModuleGUID
+ 1CD052900623707200166675
+
+ SplitCount
+ 1
+
+ StatusBarVisibility
+ 1
+
+ GeometryConfiguration
+
+ Frame
+ {{0, 0}, {500, 215}}
+ RubberWindowFrame
+ 192 257 500 500 0 0 1280 1002
+
+ Module
+ PBXNavigatorGroup
+ Proportion
+ 218pt
+
+
+ BecomeActive
+ 1
+ ContentConfiguration
+
+ PBXProjectModuleGUID
+ XCMainBuildResultsModuleGUID
+ PBXProjectModuleLabel
+ Build
+
+ GeometryConfiguration
+
+ Frame
+ {{0, 222}, {500, 236}}
+ RubberWindowFrame
+ 192 257 500 500 0 0 1280 1002
+
+ Module
+ PBXBuildResultsModule
+ Proportion
+ 236pt
+
+
+ Proportion
+ 458pt
+
+
+ Name
+ Build Results
+ ServiceClasses
+
+ PBXBuildResultsModule
+
+ StatusbarIsVisible
+ 1
+ TableOfContents
+
+ 1C78EAA5065D492600B07095
+ 1C78EAA6065D492600B07095
+ 1CD0528F0623707200166675
+ XCMainBuildResultsModuleGUID
+
+ ToolbarConfiguration
+ xcode.toolbar.config.buildV3
+ WindowString
+ 192 257 500 500 0 0 1280 1002
+
+
+ Identifier
+ windowTool.find
+ Layout
+
+
+ Dock
+
+
+ Dock
+
+
+ ContentConfiguration
+
+ PBXProjectModuleGUID
+ 1CDD528C0622207200134675
+ PBXProjectModuleLabel
+ <No Editor>
+ PBXSplitModuleInNavigatorKey
+
+ Split0
+
+ PBXProjectModuleGUID
+ 1CD0528D0623707200166675
+
+ SplitCount
+ 1
+
+ StatusBarVisibility
+ 1
+
+ GeometryConfiguration
+
+ Frame
+ {{0, 0}, {781, 167}}
+ RubberWindowFrame
+ 62 385 781 470 0 0 1440 878
+
+ Module
+ PBXNavigatorGroup
+ Proportion
+ 781pt
+
+
+ Proportion
+ 50%
+
+
+ BecomeActive
+ 1
+ ContentConfiguration
+
+ PBXProjectModuleGUID
+ 1CD0528E0623707200166675
+ PBXProjectModuleLabel
+ Project Find
+
+ GeometryConfiguration
+
+ Frame
+ {{8, 0}, {773, 254}}
+ RubberWindowFrame
+ 62 385 781 470 0 0 1440 878
+
+ Module
+ PBXProjectFindModule
+ Proportion
+ 50%
+
+
+ Proportion
+ 428pt
+
+
+ Name
+ Project Find
+ ServiceClasses
+
+ PBXProjectFindModule
+
+ StatusbarIsVisible
+ 1
+ TableOfContents
+
+ 1C530D57069F1CE1000CFCEE
+ 1C530D58069F1CE1000CFCEE
+ 1C530D59069F1CE1000CFCEE
+ 1CDD528C0622207200134675
+ 1C530D5A069F1CE1000CFCEE
+ 1CE0B1FE06471DED0097A5F4
+ 1CD0528E0623707200166675
+
+ WindowString
+ 62 385 781 470 0 0 1440 878
+ WindowToolGUID
+ 1C530D57069F1CE1000CFCEE
+ WindowToolIsVisible
+ 0
+
+
+ Identifier
+ windowTool.snapshots
+ Layout
+
+
+ Dock
+
+
+ Module
+ XCSnapshotModule
+ Proportion
+ 100%
+
+
+ Proportion
+ 100%
+
+
+ Name
+ Snapshots
+ ServiceClasses
+
+ XCSnapshotModule
+
+ StatusbarIsVisible
+ Yes
+ ToolbarConfiguration
+ xcode.toolbar.config.snapshots
+ WindowString
+ 315 824 300 550 0 0 1440 878
+ WindowToolIsVisible
+ Yes
+
+
+ Identifier
+ windowTool.debuggerConsole
+ Layout
+
+
+ Dock
+
+
+ BecomeActive
+ 1
+ ContentConfiguration
+
+ PBXProjectModuleGUID
+ 1C78EAAC065D492600B07095
+ PBXProjectModuleLabel
+ Debugger Console
+
+ GeometryConfiguration
+
+ Frame
+ {{0, 0}, {700, 358}}
+ RubberWindowFrame
+ 149 87 700 400 0 0 1440 878
+
+ Module
+ PBXDebugCLIModule
+ Proportion
+ 358pt
+
+
+ Proportion
+ 358pt
+
+
+ Name
+ Debugger Console
+ ServiceClasses
+
+ PBXDebugCLIModule
+
+ StatusbarIsVisible
+ 1
+ TableOfContents
+
+ 1C530D5B069F1CE1000CFCEE
+ 1C530D5C069F1CE1000CFCEE
+ 1C78EAAC065D492600B07095
+
+ ToolbarConfiguration
+ xcode.toolbar.config.consoleV3
+ WindowString
+ 149 87 440 400 0 0 1440 878
+ WindowToolGUID
+ 1C530D5B069F1CE1000CFCEE
+ WindowToolIsVisible
+ 0
+
+
+ Identifier
+ windowTool.scm
+ Layout
+
+
+ Dock
+
+
+ ContentConfiguration
+
+ PBXProjectModuleGUID
+ 1C78EAB2065D492600B07095
+ PBXProjectModuleLabel
+ <No Editor>
+ PBXSplitModuleInNavigatorKey
+
+ Split0
+
+ PBXProjectModuleGUID
+ 1C78EAB3065D492600B07095
+
+ SplitCount
+ 1
+
+ StatusBarVisibility
+ 1
+
+ GeometryConfiguration
+
+ Frame
+ {{0, 0}, {452, 0}}
+ RubberWindowFrame
+ 743 379 452 308 0 0 1280 1002
+
+ Module
+ PBXNavigatorGroup
+ Proportion
+ 0pt
+
+
+ BecomeActive
+ 1
+ ContentConfiguration
+
+ PBXProjectModuleGUID
+ 1CD052920623707200166675
+ PBXProjectModuleLabel
+ SCM
+
+ GeometryConfiguration
+
+ ConsoleFrame
+ {{0, 259}, {452, 0}}
+ Frame
+ {{0, 7}, {452, 259}}
+ RubberWindowFrame
+ 743 379 452 308 0 0 1280 1002
+ TableConfiguration
+
+ Status
+ 30
+ FileName
+ 199
+ Path
+ 197.09500122070312
+
+ TableFrame
+ {{0, 0}, {452, 250}}
+
+ Module
+ PBXCVSModule
+ Proportion
+ 262pt
+
+
+ Proportion
+ 266pt
+
+
+ Name
+ SCM
+ ServiceClasses
+
+ PBXCVSModule
+
+ StatusbarIsVisible
+ 1
+ TableOfContents
+
+ 1C78EAB4065D492600B07095
+ 1C78EAB5065D492600B07095
+ 1C78EAB2065D492600B07095
+ 1CD052920623707200166675
+
+ ToolbarConfiguration
+ xcode.toolbar.config.scmV3
+ WindowString
+ 743 379 452 308 0 0 1280 1002
+
+
+ Identifier
+ windowTool.breakpoints
+ IsVertical
+ 0
+ Layout
+
+
+ Dock
+
+
+ BecomeActive
+ 1
+ ContentConfiguration
+
+ PBXBottomSmartGroupGIDs
+
+ 1C77FABC04509CD000000102
+
+ PBXProjectModuleGUID
+ 1CE0B1FE06471DED0097A5F4
+ PBXProjectModuleLabel
+ Files
+ PBXProjectStructureProvided
+ no
+ PBXSmartGroupTreeModuleColumnData
+
+ PBXSmartGroupTreeModuleColumnWidthsKey
+
+ 168
+
+ PBXSmartGroupTreeModuleColumnsKey_v4
+
+ MainColumn
+
+
+ PBXSmartGroupTreeModuleOutlineStateKey_v7
+
+ PBXSmartGroupTreeModuleOutlineStateExpansionKey
+
+ 1C77FABC04509CD000000102
+
+ PBXSmartGroupTreeModuleOutlineStateSelectionKey
+
+
+ 0
+
+
+ PBXSmartGroupTreeModuleOutlineStateVisibleRectKey
+ {{0, 0}, {168, 350}}
+
+ PBXTopSmartGroupGIDs
+
+ XCIncludePerspectivesSwitch
+ 0
+
+ GeometryConfiguration
+
+ Frame
+ {{0, 0}, {185, 368}}
+ GroupTreeTableConfiguration
+
+ MainColumn
+ 168
+
+ RubberWindowFrame
+ 315 424 744 409 0 0 1440 878
+
+ Module
+ PBXSmartGroupTreeModule
+ Proportion
+ 185pt
+
+
+ ContentConfiguration
+
+ PBXProjectModuleGUID
+ 1CA1AED706398EBD00589147
+ PBXProjectModuleLabel
+ Detail
+
+ GeometryConfiguration
+
+ Frame
+ {{190, 0}, {554, 368}}
+ RubberWindowFrame
+ 315 424 744 409 0 0 1440 878
+
+ Module
+ XCDetailModule
+ Proportion
+ 554pt
+
+
+ Proportion
+ 368pt
+
+
+ MajorVersion
+ 3
+ MinorVersion
+ 0
+ Name
+ Breakpoints
+ ServiceClasses
+
+ PBXSmartGroupTreeModule
+ XCDetailModule
+
+ StatusbarIsVisible
+ 1
+ TableOfContents
+
+ 1CDDB66807F98D9800BB5817
+ 1CDDB66907F98D9800BB5817
+ 1CE0B1FE06471DED0097A5F4
+ 1CA1AED706398EBD00589147
+
+ ToolbarConfiguration
+ xcode.toolbar.config.breakpointsV3
+ WindowString
+ 315 424 744 409 0 0 1440 878
+ WindowToolGUID
+ 1CDDB66807F98D9800BB5817
+ WindowToolIsVisible
+ 1
+
+
+ Identifier
+ windowTool.debugAnimator
+ Layout
+
+
+ Dock
+
+
+ Module
+ PBXNavigatorGroup
+ Proportion
+ 100%
+
+
+ Proportion
+ 100%
+
+
+ Name
+ Debug Visualizer
+ ServiceClasses
+
+ PBXNavigatorGroup
+
+ StatusbarIsVisible
+ 1
+ ToolbarConfiguration
+ xcode.toolbar.config.debugAnimatorV3
+ WindowString
+ 100 100 700 500 0 0 1280 1002
+
+
+ Identifier
+ windowTool.bookmarks
+ Layout
+
+
+ Dock
+
+
+ Module
+ PBXBookmarksModule
+ Proportion
+ 166pt
+
+
+ Proportion
+ 166pt
+
+
+ Name
+ Bookmarks
+ ServiceClasses
+
+ PBXBookmarksModule
+
+ StatusbarIsVisible
+ 0
+ WindowString
+ 538 42 401 187 0 0 1280 1002
+
+
+ Identifier
+ windowTool.projectFormatConflicts
+ Layout
+
+
+ Dock
+
+
+ Module
+ XCProjectFormatConflictsModule
+ Proportion
+ 100%
+
+
+ Proportion
+ 100%
+
+
+ Name
+ Project Format Conflicts
+ ServiceClasses
+
+ XCProjectFormatConflictsModule
+
+ StatusbarIsVisible
+ 0
+ WindowContentMinSize
+ 450 300
+ WindowString
+ 50 850 472 307 0 0 1440 877
+
+
+ Identifier
+ windowTool.classBrowser
+ Layout
+
+
+ Dock
+
+
+ BecomeActive
+ 1
+ ContentConfiguration
+
+ OptionsSetName
+ Hierarchy, all classes
+ PBXProjectModuleGUID
+ 1CA6456E063B45B4001379D8
+ PBXProjectModuleLabel
+ Class Browser - NSObject
+
+ GeometryConfiguration
+
+ ClassesFrame
+ {{0, 0}, {369, 96}}
+ ClassesTreeTableConfiguration
+
+ PBXClassNameColumnIdentifier
+ 208
+ PBXClassBookColumnIdentifier
+ 22
+
+ Frame
+ {{0, 0}, {616, 353}}
+ MembersFrame
+ {{0, 105}, {369, 395}}
+ MembersTreeTableConfiguration
+
+ PBXMemberTypeIconColumnIdentifier
+ 22
+ PBXMemberNameColumnIdentifier
+ 216
+ PBXMemberTypeColumnIdentifier
+ 94
+ PBXMemberBookColumnIdentifier
+ 22
+
+ PBXModuleWindowStatusBarHidden2
+ 1
+ RubberWindowFrame
+ 597 125 616 374 0 0 1280 1002
+
+ Module
+ PBXClassBrowserModule
+ Proportion
+ 354pt
+
+
+ Proportion
+ 354pt
+
+
+ Name
+ Class Browser
+ ServiceClasses
+
+ PBXClassBrowserModule
+
+ StatusbarIsVisible
+ 0
+ TableOfContents
+
+ 1C78EABA065D492600B07095
+ 1C78EABB065D492600B07095
+ 1CA6456E063B45B4001379D8
+
+ ToolbarConfiguration
+ xcode.toolbar.config.classbrowser
+ WindowString
+ 597 125 616 374 0 0 1280 1002
+
+
+ Identifier
+ windowTool.refactoring
+ IncludeInToolsMenu
+ 0
+ Layout
+
+
+ Dock
+
+
+ BecomeActive
+ 1
+ GeometryConfiguration
+
+ Frame
+ {0, 0}, {500, 335}
+ RubberWindowFrame
+ {0, 0}, {500, 335}
+
+ Module
+ XCRefactoringModule
+ Proportion
+ 100%
+
+
+ Proportion
+ 100%
+
+
+ Name
+ Refactoring
+ ServiceClasses
+
+ XCRefactoringModule
+
+ WindowString
+ 200 200 500 356 0 0 1920 1200
+
+
+
+
diff --git a/Recast/Build/Xcode/Recast.xcodeproj/project.pbxproj b/Recast/Build/Xcode/Recast.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..118f09b
--- /dev/null
+++ b/Recast/Build/Xcode/Recast.xcodeproj/project.pbxproj
@@ -0,0 +1,364 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 45;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; };
+ 6B8632BB0F78119A00E2684A /* SDLMain.m in Sources */ = {isa = PBXBuildFile; fileRef = 6B8632BA0F78119A00E2684A /* SDLMain.m */; };
+ 6B8632BD0F7811CB00E2684A /* demo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B8632BC0F7811CB00E2684A /* demo.cpp */; };
+ 6B8632DA0F78122C00E2684A /* SDL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B8632D90F78122C00E2684A /* SDL.framework */; };
+ 6B8632DC0F78123E00E2684A /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B8632DB0F78123E00E2684A /* OpenGL.framework */; };
+ 6B86335A0F7816C900E2684A /* glfont.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B8633540F7816C900E2684A /* glfont.cpp */; };
+ 6B86335B0F7816C900E2684A /* imgui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B8633560F7816C900E2684A /* imgui.cpp */; };
+ 6B86335C0F7816C900E2684A /* MeshLoaderObj.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B8633580F7816C900E2684A /* MeshLoaderObj.cpp */; };
+ 6B86336A0F7816FA00E2684A /* Recast.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B86335E0F7816FA00E2684A /* Recast.cpp */; };
+ 6B86336B0F7816FA00E2684A /* RecastContour.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B86335F0F7816FA00E2684A /* RecastContour.cpp */; };
+ 6B86336C0F7816FA00E2684A /* RecastDebugDraw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B8633600F7816FA00E2684A /* RecastDebugDraw.cpp */; };
+ 6B86336D0F7816FA00E2684A /* RecastFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B8633620F7816FA00E2684A /* RecastFilter.cpp */; };
+ 6B86336E0F7816FA00E2684A /* RecastLog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B8633630F7816FA00E2684A /* RecastLog.cpp */; };
+ 6B86336F0F7816FA00E2684A /* RecastMesh.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B8633650F7816FA00E2684A /* RecastMesh.cpp */; };
+ 6B8633700F7816FA00E2684A /* RecastRasterization.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B8633660F7816FA00E2684A /* RecastRasterization.cpp */; };
+ 6B8633710F7816FA00E2684A /* RecastRegion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B8633670F7816FA00E2684A /* RecastRegion.cpp */; };
+ 6B8633720F7816FA00E2684A /* RecastTimer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6B8633680F7816FA00E2684A /* RecastTimer.cpp */; };
+ 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
+ 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; };
+ 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; };
+ 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; };
+ 1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = ""; };
+ 29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; };
+ 29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; };
+ 32CA4F630368D1EE00C91783 /* Recast_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Recast_Prefix.pch; sourceTree = ""; };
+ 6B68D7620F78196F007E6D78 /* RecastDebugDraw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RecastDebugDraw.h; path = ../../Include/RecastDebugDraw.h; sourceTree = SOURCE_ROOT; };
+ 6B68D7630F78196F007E6D78 /* RecastTimer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RecastTimer.h; path = ../../Include/RecastTimer.h; sourceTree = SOURCE_ROOT; };
+ 6B8632B90F78119A00E2684A /* SDLMain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SDLMain.h; path = ../../Examples/SDLMain.h; sourceTree = SOURCE_ROOT; };
+ 6B8632BA0F78119A00E2684A /* SDLMain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDLMain.m; path = ../../Examples/SDLMain.m; sourceTree = SOURCE_ROOT; };
+ 6B8632BC0F7811CB00E2684A /* demo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = demo.cpp; path = ../../Examples/demo.cpp; sourceTree = SOURCE_ROOT; };
+ 6B8632D90F78122C00E2684A /* SDL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SDL.framework; path = Library/Frameworks/SDL.framework; sourceTree = SDKROOT; };
+ 6B8632DB0F78123E00E2684A /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
+ 6B8633540F7816C900E2684A /* glfont.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = glfont.cpp; path = ../../Examples/glfont.cpp; sourceTree = SOURCE_ROOT; };
+ 6B8633550F7816C900E2684A /* glfont.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = glfont.h; path = ../../Examples/glfont.h; sourceTree = SOURCE_ROOT; };
+ 6B8633560F7816C900E2684A /* imgui.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = imgui.cpp; path = ../../Examples/imgui.cpp; sourceTree = SOURCE_ROOT; };
+ 6B8633570F7816C900E2684A /* imgui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = imgui.h; path = ../../Examples/imgui.h; sourceTree = SOURCE_ROOT; };
+ 6B8633580F7816C900E2684A /* MeshLoaderObj.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = MeshLoaderObj.cpp; path = ../../Examples/MeshLoaderObj.cpp; sourceTree = SOURCE_ROOT; };
+ 6B8633590F7816C900E2684A /* MeshLoaderObj.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MeshLoaderObj.h; path = ../../Examples/MeshLoaderObj.h; sourceTree = SOURCE_ROOT; };
+ 6B86335D0F7816ED00E2684A /* Recast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Recast.h; path = ../../Include/Recast.h; sourceTree = SOURCE_ROOT; };
+ 6B86335E0F7816FA00E2684A /* Recast.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = Recast.cpp; path = ../../Source/Recast.cpp; sourceTree = SOURCE_ROOT; };
+ 6B86335F0F7816FA00E2684A /* RecastContour.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RecastContour.cpp; path = ../../Source/RecastContour.cpp; sourceTree = SOURCE_ROOT; };
+ 6B8633600F7816FA00E2684A /* RecastDebugDraw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RecastDebugDraw.cpp; path = ../../Source/RecastDebugDraw.cpp; sourceTree = SOURCE_ROOT; };
+ 6B8633620F7816FA00E2684A /* RecastFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RecastFilter.cpp; path = ../../Source/RecastFilter.cpp; sourceTree = SOURCE_ROOT; };
+ 6B8633630F7816FA00E2684A /* RecastLog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RecastLog.cpp; path = ../../Source/RecastLog.cpp; sourceTree = SOURCE_ROOT; };
+ 6B8633640F7816FA00E2684A /* RecastLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RecastLog.h; path = ../../Source/RecastLog.h; sourceTree = SOURCE_ROOT; };
+ 6B8633650F7816FA00E2684A /* RecastMesh.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RecastMesh.cpp; path = ../../Source/RecastMesh.cpp; sourceTree = SOURCE_ROOT; };
+ 6B8633660F7816FA00E2684A /* RecastRasterization.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RecastRasterization.cpp; path = ../../Source/RecastRasterization.cpp; sourceTree = SOURCE_ROOT; };
+ 6B8633670F7816FA00E2684A /* RecastRegion.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RecastRegion.cpp; path = ../../Source/RecastRegion.cpp; sourceTree = SOURCE_ROOT; };
+ 6B8633680F7816FA00E2684A /* RecastTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = RecastTimer.cpp; path = ../../Source/RecastTimer.cpp; sourceTree = SOURCE_ROOT; };
+ 8D1107310486CEB800E47090 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 8D1107320486CEB800E47090 /* Recast.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Recast.app; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 8D11072E0486CEB800E47090 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
+ 6B8632DA0F78122C00E2684A /* SDL.framework in Frameworks */,
+ 6B8632DC0F78123E00E2684A /* OpenGL.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 080E96DDFE201D6D7F000001 /* Classes */ = {
+ isa = PBXGroup;
+ children = (
+ 6B8633730F7816FE00E2684A /* Recast */,
+ 6B8633540F7816C900E2684A /* glfont.cpp */,
+ 6B8633550F7816C900E2684A /* glfont.h */,
+ 6B8633560F7816C900E2684A /* imgui.cpp */,
+ 6B8633570F7816C900E2684A /* imgui.h */,
+ 6B8633580F7816C900E2684A /* MeshLoaderObj.cpp */,
+ 6B8633590F7816C900E2684A /* MeshLoaderObj.h */,
+ 6B8632B90F78119A00E2684A /* SDLMain.h */,
+ 6B8632BA0F78119A00E2684A /* SDLMain.m */,
+ 6B8632BC0F7811CB00E2684A /* demo.cpp */,
+ );
+ name = Classes;
+ sourceTree = "";
+ };
+ 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 6B8632D90F78122C00E2684A /* SDL.framework */,
+ 6B8632DB0F78123E00E2684A /* OpenGL.framework */,
+ 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
+ );
+ name = "Linked Frameworks";
+ sourceTree = "";
+ };
+ 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 29B97324FDCFA39411CA2CEA /* AppKit.framework */,
+ 13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
+ 29B97325FDCFA39411CA2CEA /* Foundation.framework */,
+ );
+ name = "Other Frameworks";
+ sourceTree = "";
+ };
+ 19C28FACFE9D520D11CA2CBB /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 8D1107320486CEB800E47090 /* Recast.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 29B97314FDCFA39411CA2CEA /* Recast */ = {
+ isa = PBXGroup;
+ children = (
+ 080E96DDFE201D6D7F000001 /* Classes */,
+ 29B97315FDCFA39411CA2CEA /* Other Sources */,
+ 29B97317FDCFA39411CA2CEA /* Resources */,
+ 29B97323FDCFA39411CA2CEA /* Frameworks */,
+ 19C28FACFE9D520D11CA2CBB /* Products */,
+ );
+ name = Recast;
+ sourceTree = "";
+ };
+ 29B97315FDCFA39411CA2CEA /* Other Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 32CA4F630368D1EE00C91783 /* Recast_Prefix.pch */,
+ );
+ name = "Other Sources";
+ sourceTree = "";
+ };
+ 29B97317FDCFA39411CA2CEA /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 8D1107310486CEB800E47090 /* Info.plist */,
+ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
+ 1DDD58140DA1D0A300B32029 /* MainMenu.xib */,
+ );
+ name = Resources;
+ sourceTree = "";
+ };
+ 29B97323FDCFA39411CA2CEA /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
+ 1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 6B8633730F7816FE00E2684A /* Recast */ = {
+ isa = PBXGroup;
+ children = (
+ 6B68D7620F78196F007E6D78 /* RecastDebugDraw.h */,
+ 6B68D7630F78196F007E6D78 /* RecastTimer.h */,
+ 6B86335E0F7816FA00E2684A /* Recast.cpp */,
+ 6B86335F0F7816FA00E2684A /* RecastContour.cpp */,
+ 6B8633600F7816FA00E2684A /* RecastDebugDraw.cpp */,
+ 6B8633620F7816FA00E2684A /* RecastFilter.cpp */,
+ 6B8633630F7816FA00E2684A /* RecastLog.cpp */,
+ 6B8633640F7816FA00E2684A /* RecastLog.h */,
+ 6B8633650F7816FA00E2684A /* RecastMesh.cpp */,
+ 6B8633660F7816FA00E2684A /* RecastRasterization.cpp */,
+ 6B8633670F7816FA00E2684A /* RecastRegion.cpp */,
+ 6B8633680F7816FA00E2684A /* RecastTimer.cpp */,
+ 6B86335D0F7816ED00E2684A /* Recast.h */,
+ );
+ name = Recast;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 8D1107260486CEB800E47090 /* Recast */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Recast" */;
+ buildPhases = (
+ 8D1107290486CEB800E47090 /* Resources */,
+ 8D11072C0486CEB800E47090 /* Sources */,
+ 8D11072E0486CEB800E47090 /* Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Recast;
+ productInstallPath = "$(HOME)/Applications";
+ productName = Recast;
+ productReference = 8D1107320486CEB800E47090 /* Recast.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 29B97313FDCFA39411CA2CEA /* Project object */ = {
+ isa = PBXProject;
+ buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Recast" */;
+ compatibilityVersion = "Xcode 3.1";
+ hasScannedForEncodings = 1;
+ mainGroup = 29B97314FDCFA39411CA2CEA /* Recast */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 8D1107260486CEB800E47090 /* Recast */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 8D1107290486CEB800E47090 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
+ 1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 8D11072C0486CEB800E47090 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6B8632BB0F78119A00E2684A /* SDLMain.m in Sources */,
+ 6B8632BD0F7811CB00E2684A /* demo.cpp in Sources */,
+ 6B86335A0F7816C900E2684A /* glfont.cpp in Sources */,
+ 6B86335B0F7816C900E2684A /* imgui.cpp in Sources */,
+ 6B86335C0F7816C900E2684A /* MeshLoaderObj.cpp in Sources */,
+ 6B86336A0F7816FA00E2684A /* Recast.cpp in Sources */,
+ 6B86336B0F7816FA00E2684A /* RecastContour.cpp in Sources */,
+ 6B86336C0F7816FA00E2684A /* RecastDebugDraw.cpp in Sources */,
+ 6B86336D0F7816FA00E2684A /* RecastFilter.cpp in Sources */,
+ 6B86336E0F7816FA00E2684A /* RecastLog.cpp in Sources */,
+ 6B86336F0F7816FA00E2684A /* RecastMesh.cpp in Sources */,
+ 6B8633700F7816FA00E2684A /* RecastRasterization.cpp in Sources */,
+ 6B8633710F7816FA00E2684A /* RecastRegion.cpp in Sources */,
+ 6B8633720F7816FA00E2684A /* RecastTimer.cpp in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 089C165DFE840E0CC02AAC07 /* English */,
+ );
+ name = InfoPlist.strings;
+ sourceTree = "";
+ };
+ 1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 1DDD58150DA1D0A300B32029 /* English */,
+ );
+ name = MainMenu.xib;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ C01FCF4B08A954540054247B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CONFIGURATION_BUILD_DIR = ../../Examples;
+ COPY_PHASE_STRIP = NO;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_ENABLE_FIX_AND_CONTINUE = YES;
+ GCC_MODEL_TUNING = G5;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = Recast_Prefix.pch;
+ HEADER_SEARCH_PATHS = "/Library/Frameworks/SDL.framework/Headers/**";
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Applications";
+ PRODUCT_NAME = Recast;
+ };
+ name = Debug;
+ };
+ C01FCF4C08A954540054247B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CONFIGURATION_BUILD_DIR = ../../Examples;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ GCC_MODEL_TUNING = G5;
+ GCC_PRECOMPILE_PREFIX_HEADER = YES;
+ GCC_PREFIX_HEADER = Recast_Prefix.pch;
+ HEADER_SEARCH_PATHS = "/Library/Frameworks/SDL.framework/Headers/**";
+ INFOPLIST_FILE = Info.plist;
+ INSTALL_PATH = "$(HOME)/Applications";
+ PRODUCT_NAME = Recast;
+ };
+ name = Release;
+ };
+ C01FCF4F08A954540054247B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PREBINDING = NO;
+ SDKROOT = macosx10.5;
+ };
+ name = Debug;
+ };
+ C01FCF5008A954540054247B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ARCHS = "$(ARCHS_STANDARD_32_BIT)";
+ GCC_C_LANGUAGE_STANDARD = c99;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ PREBINDING = NO;
+ SDKROOT = macosx10.5;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Recast" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C01FCF4B08A954540054247B /* Debug */,
+ C01FCF4C08A954540054247B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Recast" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C01FCF4F08A954540054247B /* Debug */,
+ C01FCF5008A954540054247B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
+}
diff --git a/Recast/Build/Xcode/Recast_Prefix.pch b/Recast/Build/Xcode/Recast_Prefix.pch
new file mode 100644
index 0000000..3b101c2
--- /dev/null
+++ b/Recast/Build/Xcode/Recast_Prefix.pch
@@ -0,0 +1,7 @@
+//
+// Prefix header for all source files of the 'Recast' target in the 'Recast' project
+//
+
+#ifdef __OBJC__
+ #import
+#endif
diff --git a/Recast/Contrib/SDL/readme.txt b/Recast/Contrib/SDL/readme.txt
new file mode 100644
index 0000000..051e80f
--- /dev/null
+++ b/Recast/Contrib/SDL/readme.txt
@@ -0,0 +1 @@
+Download SDL Developer Libraries from http://www.libsdl.org and unzip them here.
\ No newline at end of file
diff --git a/Recast/Examples/MeshLoaderObj.cpp b/Recast/Examples/MeshLoaderObj.cpp
new file mode 100644
index 0000000..b10d037
--- /dev/null
+++ b/Recast/Examples/MeshLoaderObj.cpp
@@ -0,0 +1,219 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#include "MeshLoaderObj.h"
+#include
+#include
+#include
+#define _USE_MATH_DEFINES
+#include
+
+rcMeshLoaderObj::rcMeshLoaderObj() :
+ m_verts(0),
+ m_normals(0),
+ m_tris(0),
+ m_vertCount(0),
+ m_triCount(0)
+{
+}
+
+rcMeshLoaderObj::~rcMeshLoaderObj()
+{
+ delete [] m_verts;
+ delete [] m_normals;
+ delete [] m_tris;
+}
+
+void rcMeshLoaderObj::addVertex(float x, float y, float z, int& cap)
+{
+ if (m_vertCount+1 > cap)
+ {
+ cap = !cap ? 8 : cap*2;
+ float* nv = new float[cap*3];
+ if (m_vertCount)
+ memcpy(nv, m_verts, m_vertCount*3*sizeof(float));
+ delete [] m_verts;
+ m_verts = nv;
+ }
+ float* dst = &m_verts[m_vertCount*3];
+ *dst++ = x;
+ *dst++ = y;
+ *dst++ = z;
+ m_vertCount++;
+}
+
+void rcMeshLoaderObj::addTriangle(int a, int b, int c, int& cap)
+{
+ if (m_triCount+1 > cap)
+ {
+ cap = !cap ? 8 : cap*2;
+ int* nv = new int[cap*3];
+ if (m_triCount)
+ memcpy(nv, m_tris, m_triCount*3*sizeof(int));
+ delete [] m_tris;
+ m_tris = nv;
+ }
+ int* dst = &m_tris[m_triCount*3];
+ *dst++ = a;
+ *dst++ = b;
+ *dst++ = c;
+ m_triCount++;
+}
+
+static char* parseRow(char* buf, char* bufEnd, char* row, int len)
+{
+ bool cont = false;
+ bool start = true;
+ bool done = false;
+ int n = 0;
+ while (!done && buf < bufEnd)
+ {
+ char c = *buf;
+ buf++;
+ // multirow
+ switch (c)
+ {
+ case '\\':
+ cont = true; // multirow
+ break;
+ case '\n':
+ if (start) break;
+ done = true;
+ break;
+ case '\r':
+ break;
+ case '\t':
+ case ' ':
+ if (start) break;
+ default:
+ start = false;
+ cont = false;
+ row[n++] = c;
+ if (n >= len-1)
+ done = true;
+ break;
+ }
+ }
+ row[n] = '\0';
+ return buf;
+}
+
+static int parseFace(char* row, int* data, int n, int vcnt)
+{
+ int j = 0;
+ while (*row != '\0')
+ {
+ // Skip initial white space
+ while (*row != '\0' && (*row == ' ' || *row == '\t'))
+ row++;
+ char* s = row;
+ // Find vertex delimiter and terminated the string there for conversion.
+ while (*row != '\0' && *row != ' ' && *row != '\t')
+ {
+ if (*row == '/') *row = '\0';
+ row++;
+ }
+ if (*s == '\0')
+ continue;
+ int vi = atoi(s);
+ data[j++] = vi < 0 ? vi+vcnt : vi-1;
+ if (j >= n) return j;
+ }
+ return j;
+}
+
+bool rcMeshLoaderObj::load(const char* filename)
+{
+ char* buf = 0;
+ FILE* fp = fopen(filename, "rb");
+ if (!fp)
+ return false;
+ fseek(fp, 0, SEEK_END);
+ int bufSize = ftell(fp);
+ fseek(fp, 0, SEEK_SET);
+ buf = new char[bufSize];
+ if (!buf)
+ {
+ fclose(fp);
+ return false;
+ }
+ fread(buf, bufSize, 1, fp);
+ fclose(fp);
+
+ char* src = buf;
+ char* srcEnd = buf + bufSize;
+ char row[512];
+ int face[32];
+ float x,y,z;
+ int nv;
+ int vcap = 0;
+ int tcap = 0;
+
+ while (src < srcEnd)
+ {
+ // Parse one row
+ row[0] = '\0';
+ src = parseRow(src, srcEnd, row, sizeof(row)/sizeof(char));
+ // Skip comments
+ if (row[0] == '#') continue;
+ if (row[0] == 'v' && row[1] != 'n' && row[1] != 't')
+ {
+ // Vertex pos
+ sscanf(row+1, "%f %f %f", &x, &y, &z);
+ addVertex(x, y, z, vcap);
+ }
+ if (row[0] == 'f')
+ {
+ // Faces
+ nv = parseFace(row+1, face, 32, m_vertCount);
+ for (int i = 2; i < nv; ++i)
+ addTriangle(face[0], face[i-1], face[i], tcap);
+ }
+ }
+
+ delete [] buf;
+
+ // Calculate normals.
+ m_normals = new float[m_triCount*3];
+ for (int i = 0; i < m_triCount*3; i += 3)
+ {
+ const float* v0 = &m_verts[m_tris[i]*3];
+ const float* v1 = &m_verts[m_tris[i+1]*3];
+ const float* v2 = &m_verts[m_tris[i+2]*3];
+ float e0[3], e1[3];
+ for (int j = 0; j < 3; ++j)
+ {
+ e0[j] = v1[j] - v0[j];
+ e1[j] = v2[j] - v0[j];
+ }
+ float* n = &m_normals[i];
+ n[0] = e0[1]*e1[2] - e0[2]*e1[1];
+ n[1] = e0[2]*e1[0] - e0[0]*e1[2];
+ n[2] = e0[0]*e1[1] - e0[1]*e1[0];
+ float d = sqrtf(n[0]*n[0] + n[1]*n[1] + n[2]*n[2]);
+ if (d > 0)
+ {
+ d = 1.0f/d;
+ n[0] *= d;
+ n[1] *= d;
+ n[2] *= d;
+ }
+ }
+
+ return true;
+}
diff --git a/Recast/Examples/MeshLoaderObj.h b/Recast/Examples/MeshLoaderObj.h
new file mode 100644
index 0000000..4f1f7c0
--- /dev/null
+++ b/Recast/Examples/MeshLoaderObj.h
@@ -0,0 +1,48 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#ifndef MESHLOADER_OBJ
+#define MESHLOADER_OBJ
+
+class rcMeshLoaderObj
+{
+public:
+ rcMeshLoaderObj();
+ ~rcMeshLoaderObj();
+
+ bool load(const char* fileName);
+
+ inline const float* getVerts() const { return m_verts; }
+ inline const float* getNormals() const { return m_normals; }
+ inline const int* getTris() const { return m_tris; }
+ inline int getVertCount() const { return m_vertCount; }
+ inline int getTriCount() const { return m_triCount; }
+
+private:
+
+ void addVertex(float x, float y, float z, int& cap);
+ void addTriangle(int a, int b, int c, int& cap);
+
+ float* m_verts;
+ int* m_tris;
+ float* m_normals;
+ int m_vertCount;
+ int m_triCount;
+};
+
+#endif // MESHLOADER_OBJ
diff --git a/Recast/Examples/Meshes/dungeon.obj b/Recast/Examples/Meshes/dungeon.obj
new file mode 100644
index 0000000..8d17dce
--- /dev/null
+++ b/Recast/Examples/Meshes/dungeon.obj
@@ -0,0 +1,15234 @@
+v 32.471557617 31.175949097 3.788104773
+v 31.950048447 31.175949097 2.338263273
+v 31.688222885 31.175949097 0.819886208
+v 34.222843170 31.175949097 6.309397697
+v 33.236907959 31.175949097 5.125359535
+v 45.539302826 31.175949097 7.342514992
+v 39.693061829 31.175949097 8.885383606
+v 36.730842590 31.175949097 8.079663277
+v 35.399402618 31.175949097 7.304241180
+v 38.176704407 31.175949097 8.612103462
+v 48.521808624 31.175949097 -3.622624636
+v 49.026046753 31.175949097 2.402715683
+v 47.718185425 31.175949097 5.180017471
+v 46.723342896 31.175949097 6.356580257
+v 48.493606567 31.175949097 3.848578453
+v 49.305145264 31.175949097 -0.654410124
+v 49.299327850 31.175949097 0.886361718
+v 42.752204895 31.175949097 8.629374504
+v 41.233833313 31.175949097 8.891200066
+v 44.202045441 31.175949097 8.107864380
+v 49.043319702 31.175949097 -2.172783852
+v 38.241161346 31.175949097 -8.463897705
+v 44.262527466 31.175949097 -7.914186001
+v 46.770526886 31.175949097 -6.143918514
+v 47.756462097 31.175949097 -4.959880829
+v 45.593963623 31.175949097 -7.138762951
+v 41.300308228 31.175949097 -8.719906807
+v 42.816661835 31.175949097 -8.446626663
+v 31.694038391 31.175949097 -0.720889091
+v 31.967319489 31.175949097 -2.237243176
+v 33.275184631 31.175949097 -5.014545441
+v 32.499759674 31.175949097 -3.683105707
+v 35.454067230 31.175949097 -7.177039623
+v 36.791320801 31.175949097 -7.942388058
+v 34.270027161 31.175949097 -6.191106319
+v 39.759536743 31.175949097 -8.725723267
+v 31.788227081 9.998181343 3.466857910
+v 31.788227081 13.729361534 3.467402458
+v 32.028339386 13.729361534 3.467821598
+v 32.028339386 9.998181343 3.467277050
+v 32.028583527 13.729488373 3.327821970
+v 32.028583527 9.998181343 3.327277660
+v 31.788471222 9.998181343 3.326858521
+v 31.788471222 13.729488373 3.327402830
+v 31.788461685 16.147314072 3.332412243
+v 32.028575897 16.147314072 3.332831383
+v 32.028331757 16.147188187 3.472831011
+v 31.788217545 16.147188187 3.472411871
+v 31.736412048 16.147670746 2.534013748
+v 31.496299744 16.147670746 2.533594608
+v 31.496307373 14.267010689 2.528585196
+v 31.345476151 14.589399338 1.754027605
+v 31.345466614 16.147884369 1.759037018
+v 31.585578918 16.147884369 1.759456158
+v 31.585588455 14.589399338 1.754446745
+v 31.736419678 14.267010689 2.529004335
+v 31.213439941 14.785192490 0.919718027
+v 31.213432312 16.148014069 0.924727559
+v 31.453556061 14.785192490 0.920137167
+v 31.453544617 16.148014069 0.925146699
+v 31.166309357 16.148063660 0.074689411
+v 31.406433105 14.858482361 0.070098996
+v 31.406423569 16.148063660 0.075108476
+v 31.166316986 14.858482361 0.069679931
+v 31.800228119 9.998181343 -3.409051180
+v 31.800226212 13.749429703 -3.408686399
+v 31.799911499 13.749273300 -3.228687048
+v 31.799911499 9.998181343 -3.229051828
+v 32.040023804 9.998181343 -3.228632689
+v 32.040023804 13.749273300 -3.228267908
+v 32.040340424 13.749429703 -3.408267260
+v 32.040340424 9.998181343 -3.408632040
+v 31.216400146 14.795266151 -0.776435494
+v 31.216392517 16.148019791 -0.771425962
+v 31.456514359 14.795266151 -0.776016355
+v 31.456504822 16.148019791 -0.771006942
+v 31.591457367 14.590011597 -1.608003974
+v 31.591447830 16.147884369 -1.602994561
+v 31.351343155 14.590011597 -1.608423114
+v 31.351333618 16.147884369 -1.603413701
+v 32.040016174 16.147327423 -3.223258734
+v 31.799903870 16.147327423 -3.223677874
+v 31.800216675 16.147483826 -3.403676987
+v 32.040328979 16.147483826 -3.403257847
+v 31.745027542 16.147678375 -2.403040648
+v 31.504913330 16.147678375 -2.403459787
+v 31.745037079 14.277850151 -2.408050060
+v 31.504922867 14.277850151 -2.408469200
+v 46.721595764 24.693101883 6.354872704
+v 45.537879944 24.693101883 7.340530396
+v 47.716171265 24.693101883 5.178639412
+v 48.491386414 24.693101883 3.847570896
+v 46.722469330 23.774042130 6.355726242
+v 45.538589478 23.774042130 7.341522694
+v 47.717178345 23.774042130 5.179327965
+v 48.492496490 23.774042130 3.848074436
+v 42.751548767 24.693101883 8.627023697
+v 41.233592987 24.693101883 8.888769150
+v 44.200992584 24.693101883 8.105663300
+v 39.693244934 24.693101883 8.882948875
+v 44.201519012 23.774042130 8.106764793
+v 41.233711243 23.774042130 8.889985085
+v 39.693153381 23.774042130 8.884165764
+v 42.751876831 23.774042130 8.628198624
+v 49.023681641 24.693101883 2.402109146
+v 49.296894073 24.693101883 0.886175275
+v 49.302715302 24.693101883 -0.654170871
+v 49.024864197 23.774042130 2.402412415
+v 49.298110962 23.774042130 0.886268497
+v 49.303928375 23.774042130 -0.654290438
+v 49.040969849 24.693101883 -2.172126293
+v 48.519607544 24.693101883 -3.621569395
+v 49.042144775 23.774042130 -2.172455311
+v 48.520709991 23.774042130 -3.622097015
+v 47.754474640 24.693101883 -4.958458900
+v 46.768821716 24.693101883 -6.142173767
+v 45.592586517 24.693101883 -7.136748314
+v 44.261516571 24.693101883 -7.911962032
+v 42.816055298 24.693101883 -8.444260597
+v 45.593276978 23.774042130 -7.137755394
+v 46.769672394 23.774042130 -6.143045902
+v 47.755466461 23.774042130 -4.959169388
+v 42.816360474 23.774042130 -8.445443153
+v 44.262020111 23.774042130 -7.913074017
+v 41.300121307 24.693101883 -8.717472076
+v 39.759777069 24.693101883 -8.723292351
+v 38.241821289 24.693101883 -8.461545944
+v 39.759654999 23.774042130 -8.724507332
+v 41.300216675 23.774042130 -8.718688965
+v 38.241493225 23.774042130 -8.462721825
+v 49.023681641 17.277132034 2.402109146
+v 48.491386414 17.277132034 3.847570896
+v 49.296894073 17.277132034 0.886175275
+v 49.302715302 17.277132034 -0.654170871
+v 46.721595764 17.277132034 6.354872704
+v 45.537879944 17.277132034 7.340530396
+v 47.716171265 17.277132034 5.178639412
+v 42.751548767 17.277132034 8.627023697
+v 41.233592987 17.277132034 8.888769150
+v 44.200992584 17.277132034 8.105663300
+v 39.693244934 17.277132034 8.882948875
+v 46.721595764 16.372127533 6.354872704
+v 45.537879944 16.372127533 7.340530396
+v 47.716171265 16.372127533 5.178639412
+v 48.491386414 16.372127533 3.847570896
+v 46.721595764 10.354028702 6.354872704
+v 45.537879944 10.354028702 7.340530396
+v 47.716171265 10.354028702 5.178639412
+v 48.491386414 10.354028702 3.847570896
+v 42.751548767 16.372127533 8.627023697
+v 44.200992584 16.372127533 8.105663300
+v 44.200992584 10.354028702 8.105663300
+v 42.751548767 10.354028702 8.627023697
+v 45.442817688 10.109920502 7.175106049
+v 46.599250793 10.109920502 6.208469391
+v 46.599605560 9.998180389 6.208224297
+v 45.443206787 9.998180389 7.174926758
+v 45.872833252 9.998180389 5.478765011
+v 47.570262909 10.109920502 5.055705547
+v 47.570568085 9.998180389 5.055403233
+v 44.854145050 9.998181343 6.330346107
+v 46.728168488 9.998180389 4.463228226
+v 44.136096954 10.109920502 7.926244736
+v 42.718795776 10.109920502 8.439061165
+v 42.454551697 9.998181343 7.443909645
+v 43.703060150 9.998181343 6.992096901
+v 44.136512756 9.998181343 7.926135540
+v 42.719226837 9.998181343 8.439026833
+v 49.023681641 16.372127533 2.402109146
+v 49.296894073 16.372127533 0.886175275
+v 49.302715302 16.372127533 -0.654170871
+v 49.023681641 10.354028702 2.402109146
+v 49.296894073 10.354028702 0.886175275
+v 49.302715302 10.354028702 -0.654170871
+v 48.326347351 10.109920502 3.751841307
+v 48.326595306 9.998180389 3.751490116
+v 47.394161224 9.998180389 3.314592838
+v 48.086002350 9.998180389 -0.567131877
+v 48.844528198 10.109920502 2.336492777
+v 47.850578308 9.998180389 2.067759991
+v 48.844711304 9.998180389 2.336104155
+v 49.109176636 9.998180389 0.852250695
+v 49.109066010 10.109920502 0.852665544
+v 48.083549500 9.998180389 0.760612607
+v 49.111961365 9.998180389 -0.654983759
+v 49.111923218 10.109920502 -0.654555559
+v 41.233592987 16.372127533 8.888769150
+v 39.693244934 16.372127533 8.882948875
+v 41.233592987 10.354028702 8.888769150
+v 39.693244934 10.354028702 8.882948875
+v 38.242927551 10.109920502 8.430583000
+v 39.726757050 10.109920502 8.695119858
+v 39.727172852 9.998181343 8.695234299
+v 38.243316650 9.998181343 8.430766106
+v 39.818809509 9.998181343 7.669605255
+v 37.264827728 9.998181343 6.980216503
+v 41.146553040 9.998181343 7.672055721
+v 41.234405518 9.998181343 8.698015213
+v 41.233978271 10.109920502 8.697976112
+v 41.300121307 17.277132034 -8.717472076
+v 42.816055298 17.277132034 -8.444260597
+v 39.759777069 17.277132034 -8.723292351
+v 38.241821289 17.277132034 -8.461545944
+v 49.040969849 17.277132034 -2.172126293
+v 48.519607544 17.277132034 -3.621569395
+v 47.754474640 17.277132034 -4.958458900
+v 46.768821716 17.277132034 -6.142173767
+v 45.592586517 17.277132034 -7.136748314
+v 44.261516571 17.277132034 -7.911962032
+v 49.040969849 16.372127533 -2.172126293
+v 48.519607544 16.372127533 -3.621569395
+v 45.592586517 16.372127533 -7.136748314
+v 46.768821716 16.372127533 -6.142173767
+v 47.754474640 16.372127533 -4.958458900
+v 44.261516571 16.372127533 -7.911962032
+v 42.816055298 16.372127533 -8.444260597
+v 43.728538513 9.998181343 -6.814738750
+v 44.877174377 9.998181343 -6.148745060
+v 45.469352722 9.998180389 -6.991144657
+v 41.174560547 9.998181343 -7.504128933
+v 45.892707825 9.998180389 -5.293409824
+v 49.040969849 10.354028702 -2.172126293
+v 48.519607544 10.354028702 -3.621569395
+v 48.852970123 9.998180389 -2.139802933
+v 47.857856750 9.998180389 -1.875129580
+v 48.853004456 10.109920502 -2.139374256
+v 48.340190887 10.109920502 -3.556675434
+v 47.406040192 9.998180389 -3.123638630
+v 48.340080261 9.998180389 -3.557091475
+v 47.754474640 10.354028702 -4.958458900
+v 46.768821716 10.354028702 -6.142173767
+v 45.592586517 10.354028702 -7.136748314
+v 44.261516571 10.354028702 -7.911962032
+v 42.816055298 10.354028702 -8.444260597
+v 47.588871002 9.998180389 -4.863785744
+v 46.744293213 9.998180389 -4.274724007
+v 47.589050293 10.109920502 -4.863395691
+v 46.622417450 10.109920502 -6.019829273
+v 46.622169495 9.998180389 -6.020182610
+v 45.469654083 10.109920502 -6.990839005
+v 44.165786743 10.109920502 -7.746923447
+v 44.165435791 9.998181343 -7.747171879
+v 41.300121307 16.372127533 -8.717472076
+v 39.759777069 16.372127533 -8.723292351
+v 38.241821289 16.372127533 -8.461545944
+v 41.300121307 10.354028702 -8.717472076
+v 39.759777069 10.354028702 -8.723292351
+v 38.241821289 10.354028702 -8.461545944
+v 42.750438690 10.109920502 -8.265105247
+v 42.750049591 9.998181343 -8.265288353
+v 42.481704712 9.998181343 -7.271155834
+v 41.266613007 10.109920502 -8.529643059
+v 41.266197205 9.998181343 -8.529757500
+v 39.759391785 10.109920502 -8.532499313
+v 39.758964539 9.998181343 -8.532538414
+v 39.846813202 9.998181343 -7.506579876
+v 38.538818359 9.998181343 -7.278433323
+v 38.274574280 10.109920502 -8.273585320
+v 38.274143219 9.998181343 -8.273550034
+v 36.731849670 24.693101883 8.077439308
+v 38.177310944 24.693101883 8.609737396
+v 35.400783539 24.693101883 7.302225113
+v 34.224548340 24.693101883 6.307652473
+v 33.238891602 24.693101883 5.123937607
+v 36.731346130 23.774042130 8.078551292
+v 38.177009583 23.774042130 8.610920906
+v 35.400093079 23.774042130 7.303232670
+v 34.223693848 23.774042130 6.308525085
+v 33.237899780 23.774042130 5.124648571
+v 31.952400208 24.693101883 2.337605953
+v 31.690650940 24.693101883 0.819646955
+v 32.473762512 24.693101883 3.787048340
+v 32.472660065 23.774042130 3.787576437
+v 31.951225281 23.774042130 2.337934732
+v 31.696472168 24.693101883 -0.720702767
+v 31.689437866 23.774042130 0.819766641
+v 32.501983643 24.693101883 -3.682098389
+v 33.277198792 24.693101883 -5.013166428
+v 31.969684601 24.693101883 -2.236636877
+v 32.500873566 23.774042130 -3.682601929
+v 33.276191711 23.774042130 -5.013856411
+v 31.968502045 23.774042130 -2.236939907
+v 31.695255280 23.774042130 -0.720795989
+v 35.455490112 24.693101883 -7.175054550
+v 36.792377472 24.693101883 -7.940186977
+v 34.271774292 24.693101883 -6.189398766
+v 36.791851044 23.774042130 -7.941287518
+v 35.454776764 23.774042130 -7.176047325
+v 34.270900726 23.774042130 -6.190252781
+v 32.473762512 17.277132034 3.787048340
+v 31.952400208 17.277132034 2.337605953
+v 33.238891602 17.277132034 5.123937607
+v 31.690650940 17.277132034 0.819646955
+v 31.693531036 17.277132034 0.057565335
+v 36.731849670 17.277132034 8.077439308
+v 38.177310944 17.277132034 8.609737396
+v 35.400783539 17.277132034 7.302225113
+v 34.224548340 17.277132034 6.307652473
+v 36.731849670 16.372127533 8.077439308
+v 38.177310944 16.372127533 8.609737396
+v 35.400783539 16.372127533 7.302225113
+v 34.224548340 16.372127533 6.307652473
+v 33.238891602 16.372127533 5.123937607
+v 32.473762512 16.372127533 3.787048340
+v 32.217067719 15.177541733 3.073410511
+v 31.952400208 16.372127533 2.337605953
+v 36.731849670 10.354028702 8.077439308
+v 35.400783539 10.354028702 7.302225113
+v 38.177310944 10.354028702 8.609737396
+v 38.511661530 9.998181343 7.436633110
+v 36.827930450 9.998181343 7.912648678
+v 33.586009979 9.998181343 3.286829948
+v 36.827579498 10.109920502 7.912400246
+v 35.523715973 10.109920502 7.156316757
+v 35.524017334 9.998181343 7.156622887
+v 36.116191864 9.998181343 6.314222813
+v 35.100658417 9.998181343 5.458888531
+v 32.473762512 10.354028702 3.787048340
+v 33.238891602 10.354028702 5.123937607
+v 34.224548340 10.354028702 6.307652473
+v 34.371196747 9.998181343 6.185661316
+v 33.404495239 9.998181343 5.029264927
+v 33.404315948 10.109920502 5.028873920
+v 34.370952606 10.109920502 6.185307503
+v 34.249076843 9.998181343 4.440203190
+v 32.653285980 9.998181343 3.722570896
+v 32.653179169 10.109920502 3.722154856
+v 32.390846252 9.998181343 3.008769512
+v 32.390743256 10.109920502 3.009335756
+v 32.215225220 10.354028702 3.068289518
+v 33.416843414 9.998181343 2.826718807
+v 32.210395813 9.998181343 3.071496487
+v 32.216464996 13.597610474 3.071733236
+v 30.841369629 9.998181343 3.065892220
+v 30.841371536 13.593065262 3.065892696
+v 29.847984314 9.998181343 3.064158440
+v 29.847984314 13.593065262 3.064158440
+v 32.101707458 13.597610474 3.071532965
+v 32.095634460 9.998181343 3.071296215
+v 31.952400208 14.024101257 2.337605953
+v 31.824810028 14.315032005 1.630335212
+v 31.710052490 14.315032005 1.630134821
+v 29.849193573 14.013492584 2.370918036
+v 30.842580795 14.013491631 2.372651577
+v 30.843887329 14.319043159 1.625072956
+v 29.850498199 14.319043159 1.623339295
+v 30.845237732 14.504489899 0.850766778
+v 30.846607208 14.566659927 0.065888450
+v 29.853219986 14.566660881 0.064154625
+v 29.851850510 14.504489899 0.849032998
+v 31.575893402 14.506861687 0.819446802
+v 31.690650940 14.506861687 0.819646955
+v 31.690650940 16.372127533 0.819646955
+v 31.693531036 16.372127533 0.057565335
+v 31.578773499 14.563559532 0.057368152
+v 31.693531036 14.563559532 0.057568435
+v 31.837966919 14.025511742 2.338305235
+v 32.397361755 9.998181343 -2.868865728
+v 32.501983643 17.277132034 -3.682098389
+v 33.277198792 17.277132034 -5.013166428
+v 31.969684601 17.277132034 -2.236636877
+v 31.696472168 17.277132034 -0.720702767
+v 36.792377472 17.277132034 -7.940186977
+v 35.455490112 17.277132034 -7.175054550
+v 34.271774292 17.277132034 -6.189398766
+v 33.422950745 9.998181343 -2.681992054
+v 31.696472168 14.500898361 -0.720702767
+v 31.696472168 16.372127533 -0.720702767
+v 31.581714630 14.500898361 -0.720903039
+v 32.221408844 9.998181343 -2.947216749
+v 32.106651306 9.998181343 -2.947417021
+v 29.858455658 9.998181343 -2.935833454
+v 33.597019196 9.998181343 -3.145344257
+v 32.666774750 9.998181343 -3.586017847
+v 32.397502899 10.109920502 -2.868808270
+v 32.667022705 10.109920502 -3.586368561
+v 32.501983643 10.354028702 -3.682098389
+v 32.230220795 10.354028702 -2.944126129
+v 32.501983643 16.372127533 -3.682098389
+v 30.851840973 9.998181343 -2.934099674
+v 31.969684601 16.372127533 -2.236636877
+v 30.850643158 14.013491631 -2.246689558
+v 30.849338531 14.319043159 -1.499111056
+v 29.857255936 14.013492584 -2.248423100
+v 29.858455658 13.593065262 -2.935833454
+v 30.851842880 13.593065262 -2.934099674
+v 29.855951309 14.319043159 -1.500844717
+v 31.832874298 14.318614006 -1.495679021
+v 31.718116760 14.318614006 -1.495879292
+v 30.847988129 14.504489899 -0.724804401
+v 29.854598999 14.504489899 -0.726538181
+v 33.277198792 16.372127533 -5.013166428
+v 32.223587036 15.128337860 -2.926110983
+v 31.969684601 14.016605377 -2.236636877
+v 32.227390289 13.587356567 -2.936434984
+v 36.792377472 16.372127533 -7.940186977
+v 35.455490112 16.372127533 -7.175054550
+v 34.271774292 16.372127533 -6.189398766
+v 34.265201569 9.998181343 -4.297754765
+v 36.139221191 9.998181343 -6.164871693
+v 36.792377472 10.354028702 -7.940186977
+v 35.455490112 10.354028702 -7.175054550
+v 36.857269287 10.109920502 -7.760769367
+v 36.856853485 9.998181343 -7.760660172
+v 37.290306091 9.998181343 -6.826621532
+v 35.550552368 10.109920502 -7.009631634
+v 35.550159454 9.998181343 -7.009452343
+v 34.271774292 10.354028702 -6.189398766
+v 33.277198792 10.354028702 -5.013166428
+v 33.422801971 9.998181343 -4.889929771
+v 34.394119263 10.109920502 -6.042995930
+v 33.423107147 10.109920502 -4.890232563
+v 35.120536804 9.998181343 -5.313291073
+v 34.393764496 9.998181343 -6.042750835
+v 31.854927063 14.016605377 -2.236837149
+v 32.112632751 13.587356567 -2.936635256
+v 10.356585503 15.374712944 5.018982410
+v 29.294418335 16.423784256 3.660708904
+v 29.291988373 15.376764297 5.051695347
+v 10.358929634 16.423786163 3.627655268
+v 29.296293259 16.884586334 2.586380243
+v 10.360805511 16.884588242 2.553326368
+v 29.298488617 17.185401917 1.329080343
+v 10.362999916 17.185403824 1.296026111
+v 29.300714493 17.272243500 0.053253978
+v 10.365226746 17.272245407 0.020199960
+v 29.302951813 17.185401917 -1.229294538
+v 10.367465019 17.185403824 -1.262348533
+v 29.305149078 16.884586334 -2.486595154
+v 10.369660378 16.884588242 -2.519649506
+v 29.307025909 16.422849655 -3.563069105
+v 10.371539116 16.422851563 -3.596122742
+v 29.309436798 15.374711037 -4.943069458
+v 10.373947144 15.381685257 -4.975730896
+v 29.304344177 15.435887337 -2.026943684
+v 28.841117859 14.941126823 -2.793433666
+v 28.839639664 15.304441452 -1.946416855
+v 29.305885315 15.072572708 -2.908475876
+v 28.638072968 14.662881851 -2.633832216
+v 28.636623383 14.979496956 -1.803709745
+v 29.309436798 15.026430130 -4.943069458
+v 29.138191223 15.381684303 -4.729002476
+v 29.138191223 15.242951393 -4.729002476
+v 28.639835358 13.952214241 -3.643826246
+v 28.843130112 14.116405487 -3.946170568
+v 29.308036804 14.219081879 -4.141609192
+v 28.840187073 14.013489723 -2.260160208
+v 28.841386795 13.593063354 -2.947570324
+v 28.636323929 14.589397430 -1.631963611
+v 28.637676239 14.267008781 -2.406255484
+v 28.639068604 13.729486465 -3.204560280
+v 28.837913513 15.541136742 -0.957117617
+v 29.302547455 15.672581673 -0.997330248
+v 28.635015488 15.184299469 -0.882141113
+v 28.836151123 15.609466553 0.052426800
+v 29.300714493 15.740912437 0.053353190
+v 28.633384705 15.245204926 0.052069638
+v 28.634868622 14.785190582 -0.797887027
+v 28.838882446 14.319040298 -1.512581468
+v 28.837530136 14.504487991 -0.738275290
+v 28.633384705 14.858480453 0.052066229
+v 28.836151123 14.566658020 0.052417602
+v 28.639068604 9.998180389 -3.204016447
+v 28.841384888 9.998180389 -2.947570324
+v 28.830911636 9.998180389 3.052421331
+v 29.116922379 10.109930038 -4.061254501
+v 29.118087769 10.109925270 -4.728369236
+v 29.118087769 9.998066902 -4.728369236
+v 28.843128204 9.998180389 -3.945131063
+v 29.308036804 10.354040146 -4.141703129
+v 29.116922379 9.998066902 -4.061254501
+v 29.309436798 10.354034424 -4.943069458
+v 28.639841080 9.998180389 -3.646778345
+v 29.298891068 15.672581673 1.097742677
+v 28.834398270 15.541136742 1.055923820
+v 28.631757736 15.202935219 0.984243691
+v 29.297094345 15.435887337 2.127355576
+v 28.832672119 15.304441452 2.045222759
+v 28.630126953 15.017164230 1.918454051
+v 28.631908417 14.795264244 0.898266375
+v 28.834779739 14.504487991 0.837295890
+v 28.630455017 14.590009689 1.730486751
+v 28.833427429 14.319040298 1.611602187
+v 28.629058838 14.277847290 2.530798197
+v 28.831195831 14.941862106 2.890551567
+v 28.628692627 14.678530693 2.739474773
+v 29.295558929 15.073307991 3.007130861
+v 28.832122803 14.013489723 2.359180450
+v 28.627624512 13.749271393 3.351529121
+v 28.626873016 13.975434303 3.781867743
+v 29.293388367 14.220697403 4.250654221
+v 28.829160690 14.118021011 4.056437016
+v 29.291988373 15.028306961 5.051695347
+v 29.121498108 15.383560181 4.835417271
+v 29.121498108 15.244828224 4.835417271
+v 28.627624512 9.998180389 3.351893425
+v 28.830913544 13.593063354 3.052421331
+v 28.626873016 9.998180389 3.781398773
+v 28.829162598 9.998180389 4.055243969
+v 29.291988373 10.354028702 5.051671505
+v 29.293388367 10.354027748 4.250892162
+v 29.101392746 9.998066902 4.835268974
+v 29.102554321 9.998066902 4.170360088
+v 29.101392746 10.109920502 4.835268974
+v 29.102554321 10.109919548 4.170360088
+v 10.544443130 15.381685257 -4.761458397
+v 10.544443130 15.242953300 -4.761458397
+v 10.373948097 15.026432037 -4.976121902
+v 10.373948097 10.354028702 -4.976121902
+v 11.038537025 9.998181343 -3.275253773
+v 10.836583138 9.998181343 -3.976563454
+v 10.564364433 10.109919548 -4.760755062
+v 11.039286613 9.998181343 -3.704759359
+v 10.834840775 9.998181343 -2.979003191
+v 10.564364433 9.998067856 -4.760755062
+v 10.824367523 9.998181343 3.020988703
+v 10.822616577 9.998181343 4.023811817
+v 10.356501579 10.354034424 5.018618584
+v 10.547670364 9.998067856 4.802883148
+v 11.026322365 9.998181343 3.723418236
+v 11.027094841 9.998181343 3.280656099
+v 10.547670364 10.109925270 4.802883148
+v 10.527830124 15.381774902 4.802964687
+v 10.356585503 15.026519775 5.018982410
+v 10.527830124 15.243041992 4.802964687
+v 10.372631073 14.220699310 -4.174578667
+v 10.370459557 15.073310852 -2.930491924
+v 10.834573746 14.941128731 -2.824866056
+v 10.836585999 14.116407394 -3.977602959
+v 11.037467957 14.678532600 -2.662835360
+v 11.039287567 13.975436211 -3.705228567
+v 11.037103653 14.277850151 -2.454159260
+v 11.038536072 13.749273300 -3.274889231
+v 11.036034584 15.017166138 -1.841814637
+v 10.833095551 15.304443359 -1.977849364
+v 10.368923187 15.435888290 -2.050716639
+v 9.840255737 14.013492584 -2.293326378
+v 10.833642960 14.013491631 -2.291592836
+v 10.832337379 14.319043159 -1.544014096
+v 11.035706520 14.590011597 -1.653847337
+v 11.034403801 15.202938080 -0.907604218
+v 10.831368446 15.541138649 -0.988549888
+v 10.367126465 15.672584534 -1.021103144
+v 11.032777786 15.245207787 0.024569876
+v 10.830013275 15.609468460 0.024212779
+v 10.365303040 15.740915298 0.023286272
+v 11.034254074 14.795266151 -0.821626842
+v 9.838950157 14.319043159 -1.545748115
+v 10.830985069 14.504489899 -0.769707739
+v 9.837597847 14.504489899 -0.771441817
+v 9.836218834 14.566660881 0.019251090
+v 10.829605103 14.566659927 0.020985158
+v 11.032777786 14.858482361 0.024573289
+v 10.834841728 13.593065262 -2.979002953
+v 9.841454506 9.998181343 -2.980736971
+v 9.841455460 13.593065262 -2.980736732
+v 10.372630119 10.354027748 -4.174252510
+v 10.563604355 9.998067856 -4.093901634
+v 10.563604355 10.109919548 -4.093901634
+v 11.031147003 15.184301376 0.958780825
+v 10.827854156 15.541138649 1.024491310
+v 10.363469124 15.672584534 1.073969722
+v 10.361672401 15.435888290 2.103582621
+v 11.029538155 14.979497910 1.880349159
+v 10.826127052 15.304443359 2.013790369
+v 10.828235626 14.504489899 0.805863440
+v 9.834848404 14.504489899 0.804129362
+v 11.031293869 14.785192490 0.874526620
+v 10.826883316 14.319043159 1.580169678
+v 9.833496094 14.319043159 1.578435779
+v 10.825578690 14.013491631 2.327747822
+v 11.029838562 14.589399338 1.708603024
+v 11.028089523 14.662883759 2.710471869
+v 10.824651718 14.941864014 2.859119177
+v 10.360135078 15.072574615 2.985115051
+v 11.028487206 14.267010689 2.482894659
+v 11.026327133 13.952216148 3.720466137
+v 9.832191467 14.013492584 2.326014042
+v 11.027093887 13.729488373 3.281200171
+v 10.824368477 13.593065262 3.020988941
+v 10.822615623 14.118022919 4.025004864
+v 10.357982635 14.219083786 4.218248844
+v 9.830981255 9.998181343 3.019254923
+v 10.357981682 10.354040146 4.217919350
+v 9.830982208 13.593065262 3.019254923
+v 10.549234390 9.998067856 4.138958454
+v 10.549234390 10.109930038 4.138958454
+v 5.309868813 16.884586334 -4.066629410
+v 5.965365887 16.423784256 -4.917809963
+v 7.409113407 16.423784256 -4.080895424
+v 4.787422657 16.423784256 -6.099878311
+v 5.892444134 15.376764297 -6.944730759
+v 6.814069748 15.376764297 -6.019875526
+v 3.933958769 16.884586334 -5.447355747
+v 3.955558538 16.423784256 -7.546542645
+v 5.241590500 15.376764297 -8.076605797
+v 9.319129944 16.422849655 -3.599782944
+v 9.020275116 16.423784256 -3.646166325
+v 9.321538925 15.374711037 -4.979783535
+v 7.943663597 15.376764297 -5.365069389
+v 6.996253967 16.884586334 -3.089062452
+v 8.878190041 16.884586334 -2.581273079
+v 9.317251205 16.884586334 -2.523308992
+v 2.935139656 17.185401917 -4.683700562
+v 1.799856663 17.185401917 -6.658026218
+v 1.921602488 17.272243500 -3.908794165
+v 4.542731285 17.185401917 -3.070481777
+v 2.962290764 16.884586334 -7.137146473
+v 3.472298384 16.423784256 -9.458216667
+v 3.526463032 16.423784256 -9.159214973
+v 2.461080551 16.884586334 -9.020846367
+v 4.863285065 15.376764297 -9.455788612
+v 2.397970200 16.884586334 -9.460092545
+v 1.214250684 17.185401917 -8.858910561
+v -0.135156274 17.272243500 -9.464513779
+v -0.050951496 17.272243500 -8.694589615
+v -1.322819948 17.185401917 -8.529404640
+v 1.140670061 17.185401917 -9.462286949
+v -1.417704940 17.185401917 -9.466752052
+v 0.620294213 17.272243500 -6.171846390
+v -1.727916718 16.884586334 -5.203984261
+v -0.565482378 17.185401917 -5.683104515
+v 0.902725697 17.185401917 -3.129805088
+v -2.569650412 16.884586334 -8.367468834
+v -2.675005198 16.884586334 -9.468947411
+v -3.751479387 16.422849655 -9.470826149
+v -5.005669594 15.374711037 -8.051085472
+v -5.131479740 15.374711037 -9.473235130
+v -3.637160063 16.422849655 -8.228823662
+v -2.723167658 16.422849655 -4.793770790
+v -0.096093923 16.884586334 -2.366149664
+v -3.999043703 15.374711037 -4.267893314
+v 3.764290810 17.272243500 -2.059657097
+v 2.981748581 17.185401917 -1.043506265
+v 6.513077736 17.185401917 -1.928307772
+v 6.022782326 17.272243500 -0.750450432
+v 5.529903412 17.185401917 0.433612496
+v 8.711903572 17.185401917 -1.335014701
+v 9.315055847 17.185401917 -1.266008496
+v 8.543165207 17.272243500 -0.070394248
+v 9.312817574 17.272243500 0.016540131
+v 0.715803146 15.374711037 1.898883700
+v 1.557805777 16.422849655 0.805522621
+v 4.633044720 16.422849655 2.588180780
+v 4.102715492 15.374711037 3.862213135
+v 5.046727657 16.884586334 1.594367266
+v 2.214611053 16.884586334 -0.047358394
+v 9.310590744 17.185401917 1.292366385
+v 9.308396339 16.884586334 2.549666405
+v 8.207252502 16.884586334 2.447146654
+v 8.373538017 17.185401917 1.200888276
+v 9.306520462 16.423784256 3.623995066
+v 8.064883232 16.422849655 3.514165878
+v 7.882367134 15.374711037 4.882045746
+v 9.304092407 15.376764297 5.014981270
+v -2.047555685 15.374711037 -0.874144256
+v -0.951261282 16.422849655 -1.712323785
+v 5.892444134 15.028306961 -6.944730759
+v 5.671233654 15.244828224 -6.775876999
+v 4.984215736 15.244828224 -7.970758915
+v 6.644100189 15.383560181 -5.799521923
+v 5.671233654 15.383560181 -6.775876999
+v 6.644100189 15.244828224 -5.799521923
+v 6.814069748 15.028306961 -6.019875526
+v 8.853220940 14.941126823 -2.830147266
+v 8.651939392 13.952214241 -3.680540323
+v 8.650176048 14.662881851 -2.670546055
+v 9.317987442 15.072572708 -2.945189476
+v 8.855233192 14.116405487 -3.982884407
+v 9.320139885 14.219081879 -4.178322792
+v 7.836515903 15.383560181 -5.108233452
+v 7.836515903 15.244828224 -5.108233452
+v 7.943663597 15.028306961 -5.365069389
+v 9.321538925 15.026430130 -4.979783535
+v 9.150295258 15.242951393 -4.765716553
+v 9.150295258 15.381684303 -4.765716553
+v 7.943655014 10.354028702 -5.365047932
+v 6.814056873 10.354028702 -6.019856930
+v 5.892426014 10.354028702 -6.944716454
+v 5.241590500 15.028306961 -8.076605797
+v 5.671510220 10.109920502 -6.777579784
+v 5.241569042 10.354028702 -8.076597214
+v 5.671510220 9.998180389 -6.777579784
+v 6.643928051 9.998180389 -5.801239014
+v 6.643928051 10.109920502 -5.801239014
+v 9.321538925 10.354034424 -4.979783535
+v 9.320139885 10.354040146 -4.178416729
+v 8.651944160 9.998180389 -3.683492422
+v 7.835906506 9.998180389 -5.109846592
+v 7.835906506 10.109920502 -5.109846592
+v 9.130189896 10.109925270 -4.765082836
+v 9.129025459 10.109930038 -4.097968102
+v 9.130189896 9.998180389 -4.765082836
+v 9.129025459 9.998180389 -4.097968102
+v 8.855231285 9.998180389 -3.981844902
+v 8.651171684 9.998180389 -3.240730286
+v 8.651172638 13.729486465 -3.241274357
+v 8.853487968 9.998180389 -2.984283924
+v 8.853489876 13.593063354 -2.984283924
+v 8.649779320 14.267008781 -2.442969084
+v 4.647006512 15.383560181 -9.285297394
+v 4.984215736 15.383560181 -7.970758915
+v 4.647006512 15.244828224 -9.285297394
+v 4.863285065 15.028306961 -9.455788612
+v 2.818720818 15.073307991 -9.459357262
+v 1.730043888 15.017164230 -8.793926239
+v 2.702141523 14.941862106 -8.994995117
+v 1.856812716 15.304441452 -8.996471405
+v 1.542076707 14.590009689 -8.794254303
+v 2.551064491 14.678530693 -8.792492867
+v 1.938945532 15.435887337 -9.460893631
+v 4.062243938 14.220697403 -9.457186699
+v 2.865756989 13.593063354 -9.994748116
+v 2.864011288 13.593063354 -8.994712830
+v 2.170770407 14.013489723 -8.995923042
+v 2.342388153 14.277847290 -8.792857170
+v 3.593457460 13.975434303 -8.790673256
+v 3.163118601 13.749271393 -8.791424751
+v 3.868026495 14.118021011 -8.992959976
+v 4.863260746 10.354028702 -9.455788612
+v 4.984924793 9.998180389 -7.972333431
+v 3.866833925 9.998180389 -8.992960930
+v 3.592988729 9.998180389 -8.790673256
+v 3.981950045 10.109919548 -9.266352654
+v 4.062481880 10.354027748 -9.457186699
+v 3.981950045 9.998180389 -9.266352654
+v 4.646858215 10.109920502 -9.265192032
+v 4.646858215 9.998180389 -9.265192032
+v 4.984924793 10.109920502 -7.972333431
+v 3.163483381 9.998180389 -8.791422844
+v 2.864011049 9.998180389 -8.994710922
+v 2.865756750 9.998180389 -9.994747162
+v 0.909332395 15.672581673 -9.462690353
+v 0.867513537 15.541136742 -8.998197556
+v 0.795833468 15.202935219 -8.795557022
+v 2.172516346 14.013488770 -9.995958328
+v 1.423191905 14.319040298 -8.997227669
+v 1.424937487 14.319040298 -9.997262955
+v 0.709856033 14.795264244 -8.795706749
+v 0.648885727 14.504487991 -8.998579025
+v 0.650631309 14.504487991 -9.998614311
+v -1.905951262 9.998180389 -0.982230663
+v -3.834289074 9.998181343 -4.335646629
+v -1.905951262 10.109925270 -0.982230663
+v -3.834289312 10.109925270 -4.335646629
+v -2.047555685 10.354034424 -0.874144256
+v -2.047555685 15.026430130 -0.874144256
+v -3.999043703 10.354034424 -4.267893314
+v -0.135983437 15.609466553 -8.999949455
+v -0.136340588 15.245204926 -8.797183990
+v -0.135057062 15.740912437 -9.464513779
+v -0.135992631 14.566658020 -8.999949455
+v -0.134247005 14.566658020 -9.999984741
+v -0.136344001 14.858480453 -8.797183990
+v -1.185740471 15.672581673 -9.466347694
+v -2.215353489 15.435887337 -9.468144417
+v -0.926685452 14.504487991 -9.001329422
+v -0.986297250 14.785190582 -8.798667908
+v -0.924939871 14.504487991 -10.001364708
+v -1.070551395 15.184299469 -8.798814774
+v -1.145527720 15.541136742 -9.001711845
+v -2.134827137 15.304441452 -9.003438950
+v -1.992120028 14.979496956 -8.800423622
+v -1.820373774 14.589397430 -8.800123215
+v -1.700991750 14.319040298 -9.002680779
+v -1.699246168 14.319040298 -10.002716064
+v -3.096885920 15.072572708 -9.469683647
+v -2.981843472 14.941126823 -9.004917145
+v -2.822242498 14.662881851 -8.801872253
+v -2.448570251 14.013489723 -9.003986359
+v -2.594665527 14.267008781 -8.801475525
+v -2.446824312 14.013488770 -10.004021645
+v -4.828895092 15.242951393 -8.073754311
+v -4.828895092 15.381684303 -8.073754311
+v -3.834159613 15.381684303 -4.335542679
+v -5.005669594 15.026430130 -8.051085472
+v -3.834159613 15.242951393 -4.335542679
+v -3.999043703 15.026430130 -4.267893314
+v -3.135980606 13.593063354 -9.005186081
+v -3.832236767 13.952214241 -8.803635597
+v -4.134581089 14.116405487 -9.006929398
+v -3.392970800 13.729486465 -8.802868843
+v -4.330019474 14.219081879 -9.471836090
+v -5.131479740 15.026430130 -9.473235130
+v -4.917412758 15.381684303 -9.301991463
+v -4.917412758 15.242951393 -9.301991463
+v -1.905799270 15.242951393 -0.982163668
+v -1.905799270 15.381684303 -0.982163668
+v -3.134235144 9.998181343 -10.005220413
+v -3.135980844 9.998181343 -9.005184174
+v -3.392427206 9.998181343 -8.802867889
+v -4.828992844 9.998181343 -8.073887825
+v -4.828992844 10.109925270 -8.073887825
+v -5.005669594 10.354034424 -8.051085472
+v -4.133541584 9.998181343 -9.006927490
+v -3.835189104 9.998181343 -8.803640366
+v -4.916779518 10.109925270 -9.281886101
+v -5.131479740 10.354034424 -9.473235130
+v -4.916779518 9.998181343 -9.281886101
+v -3.134234905 13.593063354 -10.005221367
+v -4.330113411 10.354040146 -9.471836090
+v -4.249664783 9.998181343 -9.280721664
+v -4.249664783 10.109930038 -9.280721664
+v 9.316448212 15.435887337 -2.063657284
+v 8.851742744 15.304441452 -1.983130693
+v 8.648727417 14.979496956 -1.840423584
+v 8.850015640 15.541136742 -0.993831396
+v 9.314651489 15.672581673 -1.034044147
+v 8.647118568 15.184299469 -0.918855011
+v 8.852290154 14.013489723 -2.296873808
+v 8.648427010 14.589397430 -1.668677330
+v 8.850984573 14.319040298 -1.549295425
+v 8.646971703 14.785190582 -0.834600866
+v 8.849633217 14.504487991 -0.774989128
+v 8.848253250 15.609466553 0.015712952
+v 8.645487785 15.245204926 0.015355791
+v 9.312817574 15.740912437 0.016639344
+v 9.310994148 15.672581673 1.061028719
+v 8.846501350 15.541136742 1.019209862
+v 8.643860817 15.202935219 0.947529793
+v 8.848253250 14.566658020 0.015703756
+v 8.645487785 14.858480453 0.015352380
+v 8.644010544 14.795264244 0.861552477
+v 8.846882820 14.504487991 0.800582051
+v 8.639726639 9.998180389 3.315179348
+v 8.843014717 9.998180389 3.015707970
+v 4.171304703 9.998180389 3.697805405
+v 8.638977051 9.998180389 3.744684696
+v 9.309197426 15.435887337 2.090641737
+v 8.844775200 15.304441452 2.008509159
+v 8.642230034 15.017164230 1.881740332
+v 9.307661057 15.073307991 2.970417023
+v 8.843298912 14.941862106 2.853837729
+v 8.640796661 14.678530693 2.702761173
+v 8.642558098 14.590009689 1.693773031
+v 8.845531464 14.319040298 1.574888349
+v 8.641160965 14.277847290 2.494084597
+v 8.844226837 14.013489723 2.322466850
+v 8.639728546 13.749271393 3.314815044
+v 8.843016624 13.593063354 3.015707731
+v 9.305490494 14.220697403 4.213940144
+v 8.841263771 14.118021011 4.019722939
+v 8.638977051 13.975434303 3.745153666
+v 9.304092407 15.028306961 5.014981270
+v 9.133601189 15.244828224 4.798703671
+v 9.133601189 15.383560181 4.798703671
+v 7.906223297 15.381684303 4.705427647
+v 7.906223297 15.242951393 4.705427647
+v 7.882367134 15.026430130 4.882045746
+v 7.882367134 10.354034424 4.882045746
+v 9.113495827 10.109920502 4.798554897
+v 9.114656448 10.109919548 4.133646488
+v 9.114656448 9.998180389 4.133646488
+v 9.113495827 9.998180389 4.798554897
+v 9.304092407 10.354028702 5.014957428
+v 9.305490494 10.354027748 4.214178562
+v 8.841264725 9.998180389 4.018530369
+v 7.906068802 9.998180389 4.705486774
+v 7.906068802 10.109925270 4.705486774
+v 4.102715492 15.026430130 3.862213135
+v 4.171470165 15.242951393 3.697786808
+v 4.171470165 15.381684303 3.697786808
+v 4.102715492 10.354034424 3.862213135
+v 4.171304703 10.109925270 3.697804928
+v 0.824607968 9.998180389 1.757830381
+v 0.824607849 10.109925270 1.757830381
+v 0.715803146 10.354034424 1.898883700
+v 0.824772000 15.381684303 1.757855892
+v 0.715803146 15.026430130 1.898883700
+v 0.824772000 15.242951393 1.757855892
+v -8.753063202 5.376532555 4.954570293
+v 0.230767518 6.425604343 3.563241482
+v 0.230767518 5.378584385 4.954230309
+v -8.753147125 6.425606728 3.563240767
+v 0.230766773 6.886405945 2.488911390
+v -8.753147125 6.886408329 2.488910437
+v 0.230766773 7.187221527 1.231609106
+v -8.753147125 7.187223434 1.231608272
+v 0.230766773 7.274062157 -0.044219129
+v -8.753147125 7.274064541 -0.044219974
+v 0.230766773 7.187221527 -1.326769710
+v -8.753147125 7.187223434 -1.326770663
+v 0.230766773 6.886405945 -2.584072113
+v -8.753147125 6.886408329 -2.584073305
+v 0.230766773 6.424669266 -3.660547972
+v -8.753147125 6.424670696 -3.660548687
+v 0.230766773 5.376530647 -5.040550232
+v -8.753147125 5.383505344 -5.040158749
+v -8.085589409 4.268830299 2.417313814
+v -8.299681664 3.594884872 3.000001907
+v -8.299681664 4.015311241 2.306759596
+v -8.292544365 4.320862770 1.559179902
+v -9.000000000 4.015311241 2.306759596
+v -8.085588455 3.731307507 3.215620279
+v -9.000000000 3.594884872 3.000001907
+v -8.085589409 4.664703846 2.644890785
+v -8.085588455 3.954035997 3.654886723
+v -8.753063202 5.028339386 4.954570293
+v -8.582195282 5.383594036 4.738254070
+v -8.598057747 5.244861126 4.782492161
+v -8.753063202 4.220902920 4.153835297
+v -9.000000000 7.255914688 2.405723095
+v -9.000000000 7.254602909 3.184659481
+v -9.500000000 7.254602909 3.184647322
+v -9.500000000 7.255914688 2.405723095
+v -9.500000000 3.594884872 3.000001907
+v -8.753063202 5.074394226 2.920700073
+v -9.500000000 7.256734848 1.625433087
+v -9.000000000 7.256734848 1.625224113
+v -9.000000000 4.320862770 1.559179902
+v -8.753064156 5.437708378 2.039165974
+v -9.500000000 4.015311241 2.306759596
+v -8.085589409 4.591218948 1.643020630
+v -8.085589409 4.981317997 1.814767003
+v -8.292540550 4.943684101 2.793893814
+v -8.292540550 5.306262970 1.948563099
+v -9.999998093 4.320862770 1.559180021
+v -9.500000000 4.320862770 1.559179902
+v -9.000000000 7.257231712 0.773615956
+v -9.500000000 7.257231712 0.773804307
+v -9.000000000 7.257397652 -0.044181678
+v -9.500000000 7.257397652 -0.044181675
+v -8.753064156 5.674404144 1.009551167
+v -9.000000000 4.568480015 -0.044245362
+v -8.753064156 5.742734909 -0.041133784
+v -8.292540550 5.542958260 0.959262550
+v -8.292540550 5.611288548 -0.041018460
+v -9.500000000 4.506309509 0.740634203
+v -8.085589409 5.186120987 0.893197119
+v -8.085589409 4.787011623 0.808942795
+v -8.292540550 4.506309509 0.740634203
+v -8.085589409 5.247027397 -0.041015293
+v -8.085589409 4.860301971 -0.041011877
+v -8.292540550 4.568480015 -0.044245362
+v -9.000000000 4.506309509 0.740634203
+v -9.500000000 4.568480015 -0.044245347
+v -9.999997139 4.568480492 -0.000007104
+v -9.999997139 4.506309986 0.784872413
+v 0.230767518 5.030126095 4.954230309
+v 0.044036582 5.246647835 4.782487869
+v 0.059897333 5.385379791 4.738249779
+v -8.753147125 0.355853915 4.954206467
+v -8.085588455 0.000001048 3.657839060
+v -8.292540550 0.000001429 3.958587885
+v 0.039793111 -0.000113393 4.738136292
+v -8.085588455 0.000001048 3.215075970
+v -8.299681664 0.000001429 3.003443718
+v -8.562355995 -0.000112630 4.738137245
+v -8.562355995 0.111745358 4.738137245
+v 0.039793111 0.111739635 4.738136292
+v -8.292540550 4.119843006 3.959781170
+v -8.753064156 0.355859280 4.153505802
+v -9.000000000 0.000001429 3.003443718
+v -9.500000000 -0.002705861 3.183461428
+v -9.000000000 -0.002705861 3.183461428
+v -9.500000000 0.000001429 3.003443718
+v -9.999998093 4.015311718 2.306759834
+v -9.999997139 3.594885111 3.000001431
+v -9.999998093 0.000001292 3.000001431
+v -8.561950684 -0.000112630 4.074211597
+v -8.561950684 0.111749932 4.074211597
+v -9.000000000 0.000001429 -3.000231981
+v -9.999998093 0.000001292 -2.999999762
+v -9.500000000 0.000001429 -3.000231981
+v -8.299681664 0.000001429 -3.000231981
+v -8.562355042 -0.000112630 -4.825516224
+v 0.039793123 -0.000113393 -4.825516224
+v 0.039793123 0.111745358 -4.825516224
+v 0.230766773 0.355853915 -5.040550232
+v 0.230766773 5.028249741 -5.040550232
+v 0.230767518 0.355848223 4.954206467
+v -8.562355042 0.111739255 -4.825516224
+v 0.059897345 5.383503914 -4.826185226
+v 0.059897345 5.244771004 -4.826185226
+v -8.582277298 5.383505344 -4.826184273
+v -8.582277298 5.244772911 -4.826184273
+v -8.753147125 5.028251648 -5.040549755
+v -8.292540550 0.000001429 -4.041800499
+v -8.085590363 0.000001048 -3.770350456
+v -8.085590363 0.000001048 -3.340844154
+v -8.753147125 0.355848223 -5.040549755
+v -9.000000000 7.255914688 -2.456159115
+v -9.000000000 7.256734371 -1.676682115
+v -9.500000000 7.256734371 -1.676682115
+v -9.500000000 7.255914688 -2.456159115
+v -9.500000000 7.254604816 -3.248138905
+v -9.000000000 7.254604816 -3.248138905
+v -8.753064156 5.674404144 -1.085524917
+v -8.292540550 5.542958260 -1.053782225
+v -8.753064156 5.437708378 -2.115139723
+v -9.000000000 7.257230759 -0.869287789
+v -9.500000000 7.257230759 -0.869287610
+v -9.000000000 4.506309509 -0.834939539
+v -9.000000000 4.320862770 -1.609247208
+v -9.500000000 4.506309509 -0.834939539
+v -9.500000000 4.320862770 -1.609247208
+v -8.299681664 4.506309509 -0.834939539
+v -8.085590363 4.591831207 -1.719435334
+v -8.085590363 4.797085762 -0.887213409
+v -8.292540550 4.320862770 -1.609247208
+v -8.292540550 5.306262970 -2.043083191
+v -8.085590363 5.018985748 -1.907402754
+v -8.085590363 5.204757690 -0.973190904
+v -9.999998093 4.506309986 -0.790701210
+v -9.999997139 4.320862770 -1.565008759
+v -9.500000000 4.015311241 -2.356827021
+v -9.500000000 3.594884872 -3.000231743
+v -9.999997139 4.015311718 -2.312588453
+v -9.000000000 3.594884872 -3.000231743
+v -9.000000000 4.015311241 -2.356827021
+v -8.753064156 5.075129986 -2.994916439
+v -8.292544365 4.942948341 -2.845862865
+v -8.085590363 4.680352211 -2.728424549
+v -8.085590363 4.279669762 -2.519748211
+v -8.292540550 4.015311241 -2.356827021
+v -8.753064156 4.222518921 -4.239005566
+v -8.299681664 3.594884872 -3.000231743
+v -8.085590363 3.751092434 -3.340479851
+v -8.085590363 3.977255583 -3.770819902
+v -9.500000000 0.000001429 -3.252239466
+v -9.999997139 3.594885111 -2.999999762
+v -9.000000000 0.000001429 -3.252239466
+v -8.292544365 4.118226528 -3.998601675
+v -8.753064156 0.355847448 -4.238679409
+v -8.561952591 0.111738876 -4.158661842
+v -8.561952591 -0.000113012 -4.158661842
+v 11.438048363 13.578246117 -18.801122665
+v 11.792361259 13.578246117 -19.005466461
+v 12.150432587 13.368027687 -18.578733444
+v 12.462369919 13.078775406 -18.214624405
+v 11.797165871 13.078775406 -17.828817368
+v 11.628574371 13.368027687 -18.277658463
+v 12.537845612 13.368027687 -19.040140152
+v 12.955503464 13.078775406 -18.804676056
+v 11.035212517 13.578246117 -18.730283737
+v 11.040124893 13.705832481 -19.307260513
+v 11.035212517 13.368027687 -18.173225403
+v 11.040124893 13.078775406 -17.693790436
+v 11.245326996 13.705832481 -19.344982147
+v 13.217087746 13.078775406 -19.527807236
+v 12.744085312 13.368027687 -19.606222153
+v 12.744275093 13.368027687 -20.208702087
+v 12.195487976 13.578246117 -19.702953339
+v 13.215572357 13.078775406 -20.296792984
+v 12.055417061 13.578246117 -19.318668365
+v 11.558197975 13.705832481 -19.611412048
+v 12.195678711 13.578246117 -20.111970901
+v 11.628130913 13.705832481 -19.807983398
+v 11.425251007 13.705832481 -19.450613022
+v 11.042902946 13.748605728 -19.906599045
+v 11.626614571 13.705832481 -20.016616821
+v 12.055965424 13.578246117 -20.496385574
+v 12.538393021 13.368027687 -20.774915695
+v 12.951137543 13.078775406 -21.018886566
+v 12.151271820 13.368027687 -21.236564636
+v 11.793200493 13.578246117 -20.809831619
+v 12.455681801 13.078775406 -21.606990814
+v 11.629601479 13.368027687 -21.537969589
+v 11.788961411 13.078775406 -21.990169525
+v 11.439075470 13.578246117 -21.014505386
+v 11.418563843 13.705832481 -20.371000290
+v 11.032533646 13.578246117 -21.085718155
+v 11.237122536 13.705832481 -20.474004745
+v 11.032533646 13.368027687 -21.642776489
+v 11.031394005 13.078775406 -22.122211456
+v 11.553833008 13.705832481 -20.212152481
+v 11.027621269 13.705832481 -20.508741379
+v 10.765499115 13.325869560 -17.371828079
+v 10.589583397 13.486545563 -17.125236511
+v 10.589580536 14.006744385 -17.938571930
+v 10.765499115 13.814806938 -18.067226410
+v 10.912987709 13.542448044 -18.201259613
+v 10.912987709 13.172634125 -17.547973633
+v 10.765499115 14.032635689 -18.638780594
+v 10.912987709 13.764249802 -18.741415024
+v 10.403736115 13.592807770 -16.911849976
+v 10.403735161 14.096672058 -17.795053482
+v 9.857499123 14.013492584 -17.601242065
+v 9.857499123 14.319044113 -18.348821640
+v 9.857499123 13.593065262 -16.907999039
+v 10.403735161 14.346630096 -18.426431656
+v 10.589580536 14.256196976 -18.528282166
+v 10.765499115 14.173540115 -19.273298264
+v 10.912987709 13.898954391 -19.323276520
+v 10.589580536 14.419042587 -19.218427658
+v 10.403735161 14.509475708 -19.163867950
+v 9.857499123 14.504489899 -19.123128891
+v 10.589580536 14.466053009 -19.916234970
+v 10.776260376 14.215442657 -19.916215897
+v 10.912987709 13.949377060 -19.916213989
+v 9.857499123 14.566660881 -19.908008575
+v 10.403735161 14.556488037 -19.916397095
+v 12.951138496 9.993399620 -21.018886566
+v 12.955503464 9.993399620 -18.804676056
+v 13.217088699 9.993399620 -19.527805328
+v 12.462368965 9.993399620 -18.214622498
+v 11.797164917 9.993399620 -17.828817368
+v 12.455682755 9.993399620 -21.606988907
+v 11.788962364 9.993399620 -21.990169525
+v 11.040123940 9.993399620 -17.693790436
+v 13.215572357 9.993399620 -20.296792984
+v 10.912989616 9.993399620 -17.548355103
+v 10.765501022 9.993399620 -17.369794846
+v 10.589581490 9.993399620 -17.126068115
+v 9.857499123 9.998181343 -16.907999039
+v 10.403736115 9.994852066 -16.912084579
+v 10.765499115 14.186361313 -20.558336258
+v 10.912986755 13.905885696 -20.506532669
+v 10.589581490 14.419042587 -20.622749329
+v 9.857499123 14.504489899 -20.698701859
+v 10.403736115 14.509475708 -20.664417267
+v 10.765499115 14.058550835 -21.201557159
+v 10.912986755 13.764671326 -21.087100983
+v 10.589581490 14.256196976 -21.312894821
+v 9.857499123 14.319044113 -21.473009109
+v 10.403736115 14.346630096 -21.401855469
+v 10.912986755 13.549904823 -21.645406723
+v 10.912986755 13.186244965 -22.217958450
+v 10.765499115 13.825572968 -21.766845703
+v 10.765499115 13.341844559 -22.484550476
+v 10.589578629 14.006237984 -21.872920990
+v 10.589580536 13.485433578 -22.677083969
+v 9.857499123 14.013492584 -22.220588684
+v 10.403736115 14.097177505 -22.031974792
+v 10.403737068 13.593919754 -22.905027390
+v 9.857499123 13.593065262 -22.908000946
+v 10.765499115 9.993399620 -22.484228134
+v 10.912987709 9.993399620 -22.218212128
+v 11.031394958 9.993399620 -22.122211456
+v 9.857499123 9.998181343 -22.908000946
+v 10.589583397 9.993399620 -22.707220078
+v 10.403737068 9.994852066 -22.904792786
+v 4.858413219 15.381685257 -14.934789658
+v 9.327021599 16.423784256 -16.325420380
+v 9.327021599 15.376764297 -14.934431076
+v 3.478802681 16.422851563 -16.327211380
+v 9.327021599 16.884586334 -17.399749756
+v 2.402328014 16.884588242 -17.392444611
+v 9.327021599 17.185401917 -18.657051086
+v 1.145025015 17.185403824 -18.650850296
+v 9.327021599 17.272243500 -19.932880402
+v 4.858804226 15.374711037 -10.468370438
+v -0.137525633 17.272245407 -19.933252335
+v 1.145023227 17.185401917 -10.468370438
+v -0.137527332 17.272243500 -10.468370438
+v 2.402325630 16.884586334 -10.468370438
+v 3.478801250 16.422849655 -10.468370438
+v -0.137525663 17.272245407 -29.403888702
+v 1.138338208 17.185403824 -21.214948654
+v 9.327021599 17.185401917 -21.215431213
+v 9.327021599 16.884586334 -22.472732544
+v 2.395640373 16.884588242 -22.473354340
+v 9.327021599 16.422849655 -23.549209595
+v 3.469970226 16.423786163 -23.538587570
+v 9.327021599 15.374711037 -24.929210663
+v 3.478802681 16.422851563 -29.403888702
+v 4.860601902 15.381685257 -24.928821564
+v 2.402328014 16.884588242 -29.403888702
+v 1.145024896 17.185403824 -29.403888702
+v 4.858413219 15.381685257 -29.403888702
+v -5.136315823 15.374712944 -14.934705734
+v -3.744987965 16.423784256 -10.468370438
+v -5.135976791 15.376764297 -10.468370438
+v -3.744986534 16.423786163 -16.327211380
+v -2.670657635 16.884586334 -10.468370438
+v -2.670656204 16.884588242 -17.392444611
+v -1.413355708 17.185401917 -10.468370438
+v -1.413353801 17.185403824 -18.650850296
+v -9.608413696 15.374712944 -14.934091568
+v -9.608496666 17.185403824 -18.657052994
+v -9.608496666 17.272245407 -19.932880402
+v -9.608496666 16.884588242 -17.399749756
+v -9.608496666 16.423786163 -16.325420380
+v -1.420040607 17.185403824 -21.214948654
+v -1.413353801 17.185403824 -29.403888702
+v -2.670656204 16.884588242 -29.403888702
+v -2.677342892 16.884588242 -22.473354340
+v -3.744986534 16.423786163 -29.403888702
+v -3.743196487 16.423786163 -23.540378571
+v -5.136315823 15.374712944 -29.403804779
+v -9.608496666 16.422851563 -23.549209595
+v -5.133429050 15.381685257 -24.931009293
+v -9.608496666 16.884588242 -22.472734451
+v -9.608496666 17.185403824 -21.215431213
+v -9.608496666 15.381685257 -24.928819656
+v 9.327021599 15.028306961 -14.934431076
+v 9.156151772 15.383560181 -15.150411606
+v 9.156151772 15.244828224 -15.150411606
+v 8.862455368 14.118021011 -15.928879738
+v 8.659689903 14.678530693 -17.245491028
+v 8.659689903 13.975434303 -16.203096390
+v 9.327021599 14.220697403 -15.735473633
+v 8.862455368 14.941862106 -17.094766617
+v 9.327021599 15.073307991 -16.978998184
+v 4.644438744 15.242953300 -15.150722504
+v 4.644438744 15.381685257 -15.150722504
+v 4.858804226 15.026432037 -14.934789658
+v 4.858804226 10.354028702 -14.934789658
+v 4.643770218 10.109919548 -15.154069901
+v 9.136047363 10.109920502 -15.150524139
+v 9.136047363 9.998181343 -15.150524139
+v 4.643770218 9.998181343 -15.154069901
+v 9.327021599 10.354028702 -14.934454918
+v 3.860055447 9.998181343 -15.931425095
+v 8.862454414 9.998181343 -15.930072784
+v 8.659689903 13.749271393 -16.633434296
+v 8.659689903 9.998181343 -16.203563690
+v 8.862455368 13.593063354 -16.932897568
+v 8.659689903 9.998181343 -16.633069992
+v 8.862454414 9.998181343 -16.932897568
+v 9.327021599 10.354027748 -15.735235214
+v 9.136047363 10.109919548 -15.815433502
+v 9.136047363 9.998181343 -15.815433502
+v 3.558393955 13.952214241 -11.135701180
+v 2.708353996 14.941126823 -10.932935715
+v 3.861092567 14.116405487 -10.932935715
+v 4.057342529 14.219081879 -10.468370438
+v 2.824207306 15.072572708 -10.468370438
+v 4.858804226 15.026430130 -10.468370438
+v 4.644438744 15.381684303 -10.639239311
+v 4.644438744 15.242951393 -10.639239311
+v 4.643770218 10.109925270 -10.659343719
+v 4.858804226 10.354034424 -10.468370438
+v 4.643770218 9.998181343 -10.659343719
+v 3.860053062 9.998181343 -10.932935715
+v 3.118583202 9.998181343 -11.135701180
+v 3.119127274 13.729486465 -11.135701180
+v 2.862490654 9.998181343 -9.932899475
+v 2.862490654 13.593063354 -9.932898521
+v 2.862490654 13.593063354 -10.932935715
+v 2.862490654 9.998181343 -10.932937622
+v 4.057436466 10.354040146 -10.468370438
+v 3.561346054 9.998181343 -11.135701180
+v 3.976654530 10.109930038 -10.659343719
+v 3.976654530 9.998181343 -10.659343719
+v 1.942673564 15.435887337 -10.468370438
+v 2.548398018 14.662881851 -11.135701180
+v 1.861335874 15.304441452 -10.932935715
+v 2.175079346 14.013488770 -9.932898521
+v 2.175079823 14.013489723 -10.932935715
+v 2.320821285 14.267008781 -11.135701180
+v 0.913058519 15.672581673 -10.468370438
+v 0.872035027 15.541136742 -10.932935715
+v 1.718274593 14.979496956 -11.135701180
+v 0.796704412 15.184299469 -11.135701180
+v -0.137626544 15.740912437 -10.468370438
+v -0.137511060 15.609466553 -10.932935715
+v -0.137507826 15.245204926 -11.135701180
+v 1.427499771 14.319040298 -9.932898521
+v 0.653192222 14.504487991 -9.932898521
+v 1.427499771 14.319040298 -10.932935715
+v 1.546528220 14.589397430 -11.135701180
+v 0.712450206 14.785190582 -11.135701180
+v 0.653192282 14.504487991 -10.932935715
+v -0.137504414 14.858480453 -11.135701180
+v -0.137501866 14.566658020 -10.932935715
+v -0.137501940 14.566658020 -9.932898521
+v -3.137510300 9.998181343 -10.932937622
+v 3.159098625 9.998181343 -16.652217865
+v 2.862492561 9.998181343 -16.934700012
+v 3.588604927 9.998181343 -16.220819473
+v 8.659689903 15.017164230 -18.066513062
+v 8.862455368 15.304441452 -17.940097809
+v 9.327021599 15.435887337 -17.858776093
+v 8.659689903 14.277847290 -17.454166412
+v 8.862455368 14.013489723 -17.626138687
+v 8.862455368 14.319040298 -18.373718262
+v 8.659689903 14.590009689 -18.254480362
+v 8.862455368 15.541136742 -18.929397583
+v 9.327021599 15.672581673 -18.888389587
+v 8.659689903 15.202935219 -19.000724792
+v 8.659689903 14.858480453 -19.932903290
+v 8.659689903 15.245204926 -19.932899475
+v 8.862455368 15.609466553 -19.932895660
+v 9.327021599 15.740912437 -19.932781219
+v 8.862455368 14.504487991 -19.148025513
+v 8.659689903 14.795264244 -19.086702347
+v 8.862455368 14.566658020 -19.932905197
+v -3.135706425 9.998181343 -16.932899475
+v 2.862493038 9.998181343 -22.931098938
+v 8.862454414 9.998181343 -22.932899475
+v 8.659689903 15.184299469 -20.867111206
+v 8.862455368 15.541136742 -20.942441940
+v 9.327021599 15.672581673 -20.983467102
+v 8.659689903 14.979496956 -21.788682938
+v 8.862456322 15.304441452 -21.931743622
+v 8.659689903 14.662881851 -22.618804932
+v 9.327021599 15.435887337 -22.013080597
+v 8.862456322 14.941126823 -22.778760910
+v 8.659689903 14.785190582 -20.782857895
+v 8.862455368 14.504487991 -20.723600388
+v 8.862455368 14.319040298 -21.497907639
+v 8.659689903 14.589397430 -21.616935730
+v 8.862455368 14.013489723 -22.245487213
+v 8.659689903 14.267008781 -22.391227722
+v 9.327021599 15.072572708 -22.894615173
+v 8.862455368 14.116405487 -23.931501389
+v 8.659689903 13.729486465 -23.189535141
+v 8.862455368 13.593063354 -22.932899475
+v 8.659689903 13.952214241 -23.628801346
+v 9.136047363 10.109930038 -24.047061920
+v 9.136047363 9.998181343 -24.047061920
+v 8.862455368 9.998181343 -23.930461884
+v 9.327021599 10.354040146 -24.127843857
+v 3.574571609 9.998181343 -23.659011841
+v 3.143173695 9.998181343 -23.229505539
+v 8.659689903 9.998181343 -23.631753922
+v 3.865317822 9.998181343 -23.934371948
+v 3.588604927 9.998181343 -28.736331940
+v 3.159098625 9.998181343 -28.736331940
+v 8.659689903 9.998181343 -23.188991547
+v 2.862492561 9.998181343 -28.939510345
+v 9.327021599 14.219081879 -24.127750397
+v 9.327021599 15.026430130 -24.929210663
+v 9.156151772 15.381684303 -24.714845657
+v 9.156151772 15.242951393 -24.714845657
+v 9.327021599 10.354034424 -24.929210663
+v 4.860936642 10.354034424 -24.931011200
+v 4.644866943 10.109925270 -24.711727142
+v 4.644866943 9.998181343 -24.711727142
+v 9.136047363 9.998181343 -24.714178085
+v 9.136047363 10.109925270 -24.714178085
+v 4.861299992 15.026519775 -24.931093216
+v 4.644983768 15.381774902 -24.715158463
+v 4.644983768 15.243041992 -24.715158463
+v 4.644979954 15.383560181 -29.226558685
+v 4.644438744 15.242953300 -29.233018875
+v 4.858804226 15.026432037 -29.403888702
+v 4.057260036 14.220699310 -29.403806686
+v 2.708355427 14.941128731 -28.939508438
+v 3.861094475 14.116407394 -28.939508438
+v 2.813170910 15.073310852 -29.403806686
+v 2.546679020 14.678532600 -28.736331940
+v 3.589074135 13.975436211 -28.736331940
+v 4.858804226 10.354028702 -29.403888702
+v 4.644866943 10.109920502 -29.206455231
+v 4.644866943 9.998181343 -29.206455231
+v 3.865318775 9.998181343 -28.932861328
+v 3.158733845 13.749273300 -28.736331940
+v 4.056933880 10.354027748 -29.403806686
+v 2.862492561 13.593065262 -29.932897568
+v 2.862492561 9.998182297 -29.932899475
+v 2.862492561 13.593065262 -28.939510345
+v 1.861337543 15.304443359 -28.939508438
+v 1.933394313 15.435888290 -29.403806686
+v 1.725657225 15.017166138 -28.736331940
+v 2.338002682 14.277850151 -28.736331940
+v 2.175081253 14.013491631 -28.939508438
+v 2.175081253 14.013492584 -29.932897568
+v 1.537689686 14.590011597 -28.736331940
+v 1.427501559 14.319043159 -28.939508438
+v 0.872036457 15.541138649 -28.939508438
+v 0.903779268 15.672584534 -29.403806686
+v 0.791445196 15.202938080 -28.736331940
+v -0.140611842 15.740915298 -29.403806686
+v -0.140727192 15.609468460 -28.939094543
+v -0.140733764 14.858482361 -28.736331940
+v -0.140730351 15.245207787 -28.736331940
+v 1.427501559 14.319043159 -29.932897568
+v 0.653193831 14.504489899 -28.939510345
+v 0.705467701 14.795266151 -28.736331940
+v 0.653193951 14.504489899 -29.932899475
+v -0.137500286 14.566659927 -28.939510345
+v -0.137500197 14.566660881 -29.932897568
+v -3.137508869 9.998181343 -28.939510345
+v 3.976916313 10.109919548 -29.212692261
+v 3.976916313 9.998181343 -29.212692261
+v -1.141009688 15.541136742 -10.932935715
+v -1.069683313 15.202935219 -11.135701180
+v -1.182017684 15.672581673 -10.468370438
+v -2.211632252 15.435887337 -10.468370438
+v -2.003895283 15.017164230 -11.135701180
+v -2.975640297 14.941862106 -10.932935715
+v -2.130310535 15.304441452 -10.932935715
+v -0.922381461 14.504487991 -9.932898521
+v -1.696689010 14.319040298 -9.932898521
+v -0.922381401 14.504487991 -10.932935715
+v -0.983705938 14.795264244 -11.135701180
+v -1.815927625 14.590009689 -11.135701180
+v -1.696688890 14.319040298 -10.932935715
+v -2.444268703 14.013488770 -9.932898521
+v -3.091409206 15.073307991 -10.468370438
+v -2.824917316 14.678530693 -11.135701180
+v -2.616240501 14.277847290 -11.135701180
+v -2.444268703 14.013489723 -10.932935715
+v -3.867311954 13.975434303 -11.135701180
+v -3.436972618 13.749271393 -11.135701180
+v -3.137510300 13.593063354 -9.932898521
+v -3.137510300 13.593063354 -10.932935715
+v -4.141528130 14.118021011 -10.932935715
+v -3.437336922 9.998181343 -11.135702133
+v -3.866843224 9.998181343 -11.135702133
+v -3.137510300 9.998181343 -9.932899475
+v -3.418189049 9.998181343 -16.636293411
+v -4.140335083 9.998181343 -10.932937622
+v -4.138982296 9.998181343 -15.935336113
+v -3.849586487 9.998181343 -16.206787109
+v -4.334934235 14.220697403 -10.468370438
+v -5.135976791 15.028306961 -10.468370438
+v -4.919996262 15.383560181 -10.639239311
+v -4.919996262 15.244828224 -10.639239311
+v -4.919999599 15.243041992 -15.150640488
+v -4.919999599 15.381774902 -15.150640488
+v -5.136315823 15.026519775 -14.934705734
+v -4.919883251 10.109925270 -15.154071808
+v -4.919883251 10.109920502 -10.659344673
+v -4.919883251 9.998181343 -10.659344673
+v -4.916337013 9.998181343 -15.151620865
+v -5.135952473 10.354034424 -14.934789658
+v -5.135952950 10.354028702 -10.468370438
+v -4.254973412 10.109919548 -10.659344673
+v -4.254973412 9.998181343 -10.659344673
+v -4.335172176 10.354027748 -10.468370438
+v -8.940937996 13.952216148 -16.233774185
+v -9.144116402 14.941864014 -17.094768524
+v -9.144117355 14.118022919 -15.928879738
+v -9.608413696 15.026519775 -14.934091568
+v -9.437545776 15.381774902 -15.150407791
+v -9.437545776 15.243041992 -15.150407791
+v -9.608413696 14.219083786 -15.734826088
+v -9.608413696 15.072574615 -16.967962265
+v -9.144118309 9.998181343 -16.932897568
+v -8.934705734 9.998181343 -16.676807404
+v -9.144119263 9.998181343 -15.930072784
+v -9.411063194 9.998181343 -15.151620865
+v -8.940937996 9.998181343 -16.230821609
+v -9.411063194 10.109925270 -15.151620865
+v -9.608496666 10.354034424 -14.934453964
+v -9.417300224 10.109930038 -15.814449310
+v -9.608414650 10.354040146 -15.735155106
+v -9.417300224 9.998181343 -15.814449310
+v -8.940937996 13.729488373 -16.673040390
+v -9.144117355 13.593065262 -16.932897568
+v -10.137507439 9.998181343 -16.932897568
+v -10.137506485 13.593065262 -16.932897568
+v -9.608414650 15.435888290 -17.849494934
+v -8.940939903 14.662883759 -17.243770599
+v -9.144117355 15.304443359 -17.940097809
+v -8.940939903 14.267010689 -17.471347809
+v -10.137507439 14.013492584 -17.626140594
+v -9.144117355 14.013491631 -17.626140594
+v -8.940939903 14.979497910 -18.073894501
+v -9.608414650 15.672584534 -18.879110336
+v -9.144116402 15.541138649 -18.929399490
+v -8.940939903 15.184301376 -18.995464325
+v -9.608414650 15.740915298 -19.929794312
+v -9.143704414 15.609468460 -19.929679871
+v -8.940939903 15.245207787 -19.929676056
+v -8.940939903 14.589399338 -18.245639801
+v -9.144117355 14.319043159 -18.373720169
+v -8.940939903 14.785192490 -19.079717636
+v -10.137507439 14.319043159 -18.373720169
+v -10.137506485 14.504489899 -19.148027420
+v -9.144116402 14.504489899 -19.148027420
+v -8.940939903 14.858482361 -19.929672241
+v -9.144117355 14.566659927 -19.932907104
+v -10.137506485 14.566660881 -19.932907104
+v -3.137508392 9.998181343 -22.931098938
+v -10.137507439 9.998181343 -22.932899475
+v -9.608414650 15.672584534 -20.974185944
+v -9.144116402 15.541138649 -20.942443848
+v -8.940939903 15.202938080 -20.861852646
+v -9.144116402 15.304443359 -21.931743622
+v -8.940939903 15.017166138 -21.796064377
+v -9.608414650 15.435888290 -22.003801346
+v -9.144116402 14.941128731 -22.778762817
+v -10.137507439 14.504489899 -20.723600388
+v -8.940939903 14.795266151 -20.775875092
+v -10.137506485 14.319043159 -21.497907639
+v -9.144117355 14.504489899 -20.723600388
+v -8.940939903 14.590011597 -21.608097076
+v -10.137506485 14.013492584 -22.245487213
+v -9.144116402 14.319043159 -21.497907639
+v -8.940939903 14.678532600 -22.617086411
+v -9.608414650 15.073310852 -22.883577347
+v -8.940939903 14.277850151 -22.408409119
+v -9.144116402 14.013491631 -22.245487213
+v -10.137506485 13.593065262 -22.932899475
+v -9.144117355 13.593065262 -22.932899475
+v -8.940939903 13.749273300 -23.229141235
+v -8.940939903 13.975436211 -23.659481049
+v -9.144116402 14.116407394 -23.931501389
+v -3.863620758 9.998181343 -23.644977570
+v -4.135071278 9.998181343 -23.934373856
+v -8.940939903 9.998181343 -23.659011841
+v -3.434114456 9.998181343 -23.213581085
+v -8.940939903 9.998181343 -23.229505539
+v -9.144118309 9.998181343 -22.932899475
+v -3.393599987 9.998181343 -28.730098724
+v -3.839584827 9.998181343 -28.736330032
+v -9.137470245 9.998181343 -23.935726166
+v -9.417302132 9.998181343 -24.047323227
+v -9.417302132 10.109919548 -24.047323227
+v -9.608496666 10.354028702 -24.929210663
+v -9.608414650 10.354027748 -24.127340317
+v -9.411063194 10.109920502 -24.715274811
+v -9.411063194 9.998181343 -24.715274811
+v -3.137508869 9.998182297 -29.932899475
+v -4.140333652 9.998181343 -28.939510345
+v -4.255957127 10.109930038 -29.212692261
+v -4.255957127 9.998181343 -29.212692261
+v -1.141008139 15.541138649 -28.939508438
+v -1.191296935 15.672584534 -29.403806686
+v -1.074942827 15.184301376 -28.736331940
+v -2.130308628 15.304443359 -28.939510345
+v -2.220911503 15.435888290 -29.403806686
+v -1.996512532 14.979497910 -28.736331940
+v -2.975638866 14.941864014 -28.939508438
+v -2.826636791 14.662883759 -28.736331940
+v -0.922379851 14.504489899 -28.939508438
+v -0.990688443 14.785192490 -28.736331940
+v -0.922379732 14.504489899 -29.932897568
+v -1.696687222 14.319043159 -28.939510345
+v -1.824766159 14.589399338 -28.736331940
+v -2.444266796 14.013491631 -28.939510345
+v -2.599059105 14.267010689 -28.736331940
+v -1.696687341 14.319043159 -29.932899475
+v -2.444266796 14.013492584 -29.932899475
+v -3.102445602 15.072574615 -29.403804779
+v -4.141526699 14.118022919 -28.939510345
+v -3.137508869 13.593065262 -28.939510345
+v -3.137508869 13.593065262 -29.932897568
+v -3.836632729 13.952216148 -28.736330032
+v -3.397366047 13.729488373 -28.736330032
+v -4.335580826 14.219083786 -29.403804779
+v -5.136315823 15.026519775 -29.403804779
+v -4.919999599 15.381774902 -29.232936859
+v -4.919455051 15.242951393 -29.226558685
+v -4.918786526 10.109925270 -29.206455231
+v -4.918786526 10.109919548 -24.711729050
+v -4.918786526 9.998181343 -24.711729050
+v -4.918786526 9.998181343 -29.206455231
+v -5.135952473 10.354034424 -29.403888702
+v -5.133820057 15.026432037 -24.931009293
+v -5.133820057 10.354028702 -24.931009293
+v -4.919454575 15.381685257 -24.715076447
+v -4.919454575 15.242953300 -24.715076447
+v -4.335251331 10.354040146 -29.403806686
+v -9.431168556 15.244828224 -24.715387344
+v -9.608496666 15.026432037 -24.929210663
+v -9.431168556 15.383560181 -24.715387344
+v -9.608414650 14.220699310 -24.127666473
+v -9.194107056 2.851734638 2.761604309
+v -9.184239388 4.903903484 2.737780094
+v -9.217930794 4.903903484 2.771472692
+v -9.260048866 2.851734638 2.737920523
+v -9.251623154 4.903903484 2.737780094
+v -9.194107056 2.851734638 2.999632597
+v -9.184238434 4.903903484 2.975809097
+v -9.217930794 4.903903484 3.009500980
+v -9.260048866 2.851734638 2.975808382
+v -9.251622200 4.903903484 2.975809097
+v -9.194107056 2.851734638 2.951984406
+v -9.217930794 4.903903484 2.942117214
+v -9.174771309 2.851734638 2.975808382
+v -9.241754532 2.851734638 2.951984406
+v -9.174771309 2.851734638 2.738004923
+v -9.241754532 2.851734638 2.999632597
+v -9.241754532 2.851734638 2.523857117
+v -9.194107056 2.851734638 2.523857117
+v -9.217930794 4.903903484 2.533725500
+v -9.260048866 2.851734638 2.500032902
+v -9.241754532 2.851734638 2.714097023
+v -9.241754532 2.851734638 2.476208925
+v -9.251622200 4.903903484 2.500033379
+v -9.194107056 2.851734638 2.476208925
+v -9.174771309 2.851734638 2.500032902
+v -9.184238434 4.903903484 2.500033379
+v -9.194107056 2.851734638 2.714097023
+v -9.217930794 4.903903484 2.704088449
+v -9.217930794 4.903903484 2.466341496
+v -9.241754532 2.851734638 2.047632456
+v -9.194107056 2.851734638 2.047632456
+v -9.217930794 4.903903484 2.057500839
+v -9.260048866 2.851734638 2.023808241
+v -9.241754532 2.851734638 1.999984503
+v -9.251622200 4.903903484 2.023808718
+v -9.194107056 2.851734638 1.999984503
+v -9.174771309 2.851734638 2.023808241
+v -9.184238434 4.903903484 2.023808718
+v -9.260048866 2.851734638 2.261920691
+v -9.241754532 2.851734638 2.285828829
+v -9.217930794 4.903903484 2.295696974
+v -9.174771309 2.851734638 2.262004614
+v -9.194107056 2.851734638 2.238096952
+v -9.217930794 4.903903484 2.228312969
+v -9.194107056 2.851734638 2.285828829
+v -9.184239388 4.903903484 2.262005091
+v -9.241754532 2.851734638 2.238096952
+v -9.251623154 4.903903484 2.262005091
+v -9.241754532 2.851734638 1.761872530
+v -9.251623154 4.903903484 1.785780668
+v -9.217930794 4.903903484 1.752088666
+v -9.174771309 2.851734638 1.785780668
+v -9.184239388 4.903903484 1.785780668
+v -9.194107056 2.851734638 1.809604406
+v -9.217930794 4.903903484 1.819472432
+v -9.260048866 2.851734638 1.785696149
+v -9.217930794 4.903903484 1.990117311
+v -9.194107056 2.851734638 1.761872530
+v -9.241754532 2.851734638 1.809604406
+v -9.241754532 2.851734638 1.571408272
+v -9.194107056 2.851734638 1.571408272
+v -9.217930794 4.903903484 1.581276536
+v -9.260048866 2.851734638 3.202257156
+v -9.174771309 2.851734638 3.202257156
+v -9.251623154 2.764342785 2.975809097
+v -9.174771309 2.764550686 3.202257156
+v -9.174771309 2.764550686 2.975808382
+v -9.194107056 2.764285803 2.999632597
+v -9.251623154 2.764400005 3.202257156
+v -9.217930794 2.764285803 2.975809097
+v -9.217930794 2.764400005 3.202223778
+v -9.217930794 2.851734638 3.202223778
+v -9.217930794 2.764285564 2.737780094
+v -9.217930794 2.764285564 2.771472692
+v -9.184239388 2.764371395 2.737920523
+v -9.260048866 2.764551163 2.737920523
+v -9.241754532 2.764342785 2.714097023
+v -9.194107056 2.764285803 2.951984882
+v -9.217930794 2.764285564 2.500033379
+v -9.194107056 2.764285564 2.523857117
+v -9.174771309 2.764551163 2.500032902
+v -9.251623154 2.764342785 2.500032902
+v -9.194107056 2.764285564 2.476209641
+v -9.217930794 2.764285564 2.295696497
+v -9.184239388 2.764370918 2.261920691
+v -9.260048866 2.764551163 2.261920691
+v -9.217930794 2.764285564 2.262004614
+v -9.241754532 2.764342785 2.238096952
+v -9.217930794 2.764285803 2.023808718
+v -9.251623154 2.764342785 2.023808718
+v -9.194107056 2.764285803 2.047632456
+v -9.194107056 2.764285803 1.999985099
+v -9.174771309 2.764550686 2.023808241
+v -9.260048866 2.764551163 1.785696149
+v -9.184239388 2.764371395 1.785696149
+v -9.217930794 2.764285564 1.819471836
+v -9.217930794 2.764285564 1.785780668
+v -9.251623154 2.764342785 1.547584295
+v -9.241754532 2.764342785 1.761872530
+v -9.194107056 2.764285564 1.571408272
+v -9.174771309 2.851734638 1.547583818
+v -9.174771309 2.764551163 1.547583818
+v -9.260048866 2.851734638 1.547583818
+v -9.194107056 2.851734638 1.523760080
+v -9.241754532 2.851734638 1.523760080
+v -9.217930794 4.903903484 1.513892889
+v -9.184238434 4.903903484 1.547584534
+v -9.251622200 4.903903484 1.547584534
+v -9.194107056 2.851734638 1.333379865
+v -9.184239388 4.903903484 1.309556246
+v -9.217930794 4.903903484 1.343248129
+v -9.260048866 2.851734638 1.309471726
+v -9.251623154 4.903903484 1.309556246
+v -9.241754532 2.851734638 1.285648108
+v -9.217930794 4.903903484 1.275864244
+v -9.174771309 2.851734638 1.309556246
+v -9.241754532 2.851734638 1.333379865
+v -9.194107056 2.851734638 1.285648108
+v -9.174771309 2.851734638 0.833331823
+v -9.194107056 2.851734638 0.809423327
+v -9.184239388 4.903903484 0.833331823
+v -9.194107056 2.851734638 0.857155442
+v -9.241754532 2.851734638 0.857155442
+v -9.217930794 4.903903484 0.867023766
+v -9.260048866 2.851734638 0.833247066
+v -9.241754532 2.851734638 0.809423327
+v -9.251623154 4.903903484 0.833331823
+v -9.194107056 2.851734638 1.095183849
+v -9.174771309 2.851734638 1.071359396
+v -9.184238434 4.903903484 1.071360111
+v -9.241754532 2.851734638 1.095183849
+v -9.217930794 4.903903484 1.105052114
+v -9.260048866 2.851734638 1.071359396
+v -9.241754532 2.851734638 1.047535658
+v -9.251622200 4.903903484 1.071360111
+v -9.194107056 2.851734638 1.047535658
+v -9.217930794 4.903903484 1.037668347
+v -9.217930794 4.903903484 0.799639761
+v -9.194107056 2.851734638 0.618959129
+v -9.184238434 4.903903484 0.595135331
+v -9.217930794 4.903903484 0.628827274
+v -9.260048866 2.851734638 0.595134735
+v -9.251622200 4.903903484 0.595135331
+v -9.194107056 2.851734638 0.571310997
+v -9.217930794 4.903903484 0.561443686
+v -9.174771309 2.851734638 0.595134735
+v -9.241754532 2.851734638 0.618959129
+v -9.241754532 2.851734638 0.571310997
+v -9.241754532 2.851734638 0.380930841
+v -9.194107056 2.851734638 0.380930841
+v -9.217930794 4.903903484 0.390799046
+v -9.174771309 2.851734638 0.357107073
+v -9.184239388 4.903903484 0.357107073
+v -9.260048866 2.851734638 0.357022703
+v -9.251623154 4.903903484 0.357107073
+v -9.241754532 2.851734638 0.333198935
+v -9.217930794 4.903903484 0.323415101
+v -9.194107056 2.851734638 0.333198935
+v -9.194107056 2.851734638 0.142734706
+v -9.184238434 4.903903484 0.118910953
+v -9.217930794 4.903903484 0.152602926
+v -9.260048866 2.851734638 0.118910357
+v -9.251622200 4.903903484 0.118910953
+v -9.194107056 2.851734638 0.095086604
+v -9.217930794 4.903903484 0.085219286
+v -9.174771309 2.851734638 0.118910357
+v -9.241754532 2.851734638 0.142734706
+v -9.241754532 2.851734638 0.095086604
+v -9.217930794 2.764285564 1.547584534
+v -9.194107056 2.764285564 1.523760676
+v -9.260048866 2.764551163 1.309471726
+v -9.184239388 2.764371395 1.309471726
+v -9.217930794 2.764285564 1.343247890
+v -9.217930794 2.764285564 1.309556246
+v -9.241754532 2.764342785 1.285648108
+v -9.194107056 2.764285803 1.095183849
+v -9.251623154 2.764342785 1.071359873
+v -9.174771309 2.764551163 1.071359396
+v -9.217930794 2.764285803 1.071360111
+v -9.194107056 2.764285803 1.047536373
+v -9.217930794 2.764285564 0.833331823
+v -9.241754532 2.764342785 0.809423327
+v -9.260048866 2.764550686 0.833247066
+v -9.217930794 2.764285564 0.867023468
+v -9.184239388 2.764371395 0.833247066
+v -9.251623154 2.764342785 0.595135033
+v -9.194107056 2.764285803 0.618959129
+v -9.217930794 2.764285803 0.595135331
+v -9.174771309 2.764551163 0.595134735
+v -9.194107056 2.764285803 0.571311593
+v -9.184239388 2.764371395 0.357022703
+v -9.217930794 2.764285564 0.390798748
+v -9.260048866 2.764551163 0.357022703
+v -9.217930794 2.764285564 0.357107073
+v -9.241754532 2.764342785 0.333198935
+v -9.217930794 2.764285803 0.118910953
+v -9.194107056 2.764285803 0.142734706
+v -9.174771309 2.764551163 0.118910357
+v -9.251623154 2.764342785 0.118910655
+v -9.194107056 2.764285803 0.095087208
+v -9.241754532 0.663206697 2.999632597
+v -9.194107056 0.663206935 2.951984406
+v -9.194107056 0.663206697 2.761604309
+v -9.260048866 0.663206697 2.737920523
+v -9.174771309 0.663206935 2.975808382
+v -9.194107056 0.663206697 2.999632597
+v -9.174771309 0.663206697 2.738004923
+v -9.260048866 0.663206935 2.975808382
+v -9.241754532 0.663206935 2.951984406
+v -9.194107056 0.663206697 2.714097023
+v -9.241754532 0.663206816 2.523857117
+v -9.194107056 0.663206816 2.476208925
+v -9.174771309 0.663206816 2.500032902
+v -9.194107056 0.663206816 2.523857117
+v -9.241754532 0.663206697 2.714097023
+v -9.260048866 0.663206816 2.500032902
+v -9.241754532 0.663206816 2.476208925
+v -9.174771309 0.663206816 2.023808241
+v -9.194107056 0.663206816 1.999984503
+v -9.194107056 0.663206816 2.047632217
+v -9.241754532 0.663206816 2.047632217
+v -9.260048866 0.663206816 2.023808241
+v -9.241754532 0.663206816 1.999984503
+v -9.194107056 0.663206816 2.285828829
+v -9.174771309 0.663206816 2.262005091
+v -9.241754532 0.663206816 2.285828829
+v -9.260048866 0.663206816 2.261920691
+v -9.241754532 0.663206816 2.238096952
+v -9.194107056 0.663206816 2.238096952
+v -9.194107056 0.663206816 1.761872530
+v -9.194107056 0.663206816 1.809604406
+v -9.260048866 0.663206816 1.785696149
+v -9.241754532 0.663206816 1.761872530
+v -9.241754532 0.663206816 1.571408272
+v -9.194107056 0.663206816 1.571408272
+v -9.174771309 0.663206816 1.785780311
+v -9.241754532 0.663206816 1.809604406
+v -9.174771309 0.663206697 3.202257156
+v -9.174771309 0.585616350 3.202257156
+v -9.251623154 0.585465491 2.975808382
+v -9.251623154 0.585465491 3.202257156
+v -9.260048866 0.663206697 3.202257156
+v -9.217930794 0.663206697 3.202223778
+v -9.174771309 0.585616350 2.975808382
+v -9.260048866 0.585616350 2.737920523
+v -9.184239388 0.585465550 2.737920523
+v -9.194107056 0.585465491 2.999632597
+v -9.217930794 0.585465491 3.202223778
+v -9.224709511 0.001949469 2.975809097
+v -9.217930794 0.585465550 2.771472692
+v -9.194107056 0.585465491 2.951984406
+v -9.224709511 0.001949608 2.737780094
+v -9.241754532 0.585465550 2.714097023
+v -9.251623154 0.585465550 2.500032902
+v -9.224709511 0.001949469 2.500033379
+v -9.194107056 0.585465550 2.523857117
+v -9.174771309 0.585616410 2.500032902
+v -9.194107056 0.585465550 2.476208925
+v -9.260048866 0.585616410 2.261920691
+v -9.184239388 0.585465550 2.261920691
+v -9.217930794 0.585465550 2.295696497
+v -9.251623154 0.585465550 2.023808241
+v -9.224709511 0.001949469 2.023808718
+v -9.194107056 0.585465550 2.047632217
+v -9.194107056 0.585465550 1.999984503
+v -9.174771309 0.585616410 2.023808241
+v -9.224709511 0.001949678 2.262005091
+v -9.241754532 0.585465550 2.238096952
+v -9.260048866 0.585616410 1.785696149
+v -9.184239388 0.585465372 1.785696149
+v -9.174771309 0.663206816 1.547583818
+v -9.251623154 0.585465431 1.547583818
+v -9.260048866 0.663206816 1.547583818
+v -9.174771309 0.585616469 1.547583818
+v -9.217930794 0.585465372 1.819472313
+v -9.224709511 0.001949678 1.785780668
+v -9.194107056 0.585465431 1.571408272
+v -9.241754532 0.585465372 1.761872530
+v -9.241754532 0.663206816 1.523760080
+v -9.194107056 0.663206816 1.523760080
+v -9.241754532 0.663206875 1.285648108
+v -9.194107056 0.663206875 1.285648108
+v -9.194107056 0.663206875 1.333379865
+v -9.260048866 0.663206875 1.309471726
+v -9.241754532 0.663206875 1.333379865
+v -9.174771309 0.663206875 1.309556246
+v -9.260048866 0.663206875 1.071359396
+v -9.241754532 0.663206875 1.095183849
+v -9.241754532 0.663206875 1.047535658
+v -9.194107056 0.663206875 1.047535658
+v -9.174771309 0.663206875 1.071359396
+v -9.194107056 0.663206875 1.095183849
+v -9.241754532 0.663206875 0.809423327
+v -9.194107056 0.663206875 0.809423327
+v -9.194107056 0.663206875 0.857155442
+v -9.260048866 0.663206875 0.833247066
+v -9.174771309 0.663206875 0.833331823
+v -9.241754532 0.663206875 0.857155442
+v -9.241754532 0.663206875 0.618959129
+v -9.194107056 0.663206875 0.618959129
+v -9.260048866 0.663206875 0.595134735
+v -9.241754532 0.663206875 0.571310997
+v -9.194107056 0.663206875 0.571310997
+v -9.174771309 0.663206875 0.595134735
+v -9.194107056 0.663206875 0.380930841
+v -9.260048866 0.663206875 0.357022703
+v -9.241754532 0.663206875 0.380930841
+v -9.174771309 0.663206875 0.357107073
+v -9.194107056 0.663206875 0.333198935
+v -9.241754532 0.663206875 0.333198935
+v -9.194107056 0.663206875 0.142734706
+v -9.241754532 0.663206875 0.142734706
+v -9.194107056 0.663206875 0.095086604
+v -9.174771309 0.663206875 0.118910357
+v -9.260048866 0.663206875 0.118910357
+v -9.241754532 0.663206875 0.095086604
+v -9.224709511 0.001949469 1.547584534
+v -9.194107056 0.585465431 1.523760080
+v -9.260048866 0.585616469 1.309471726
+v -9.224709511 0.001949678 1.309556246
+v -9.217930794 0.585465431 1.343247890
+v -9.241754532 0.585465431 1.285648108
+v -9.184239388 0.585465431 1.309471726
+v -9.194107056 0.585465431 1.095183849
+v -9.251623154 0.585465431 1.071359396
+v -9.224709511 0.001949330 1.071360111
+v -9.174771309 0.585616469 1.071359396
+v -9.194107056 0.585465431 1.047535658
+v -9.184239388 0.585465431 0.833247066
+v -9.224709511 0.001949748 0.833331823
+v -9.241754532 0.585465491 0.809423327
+v -9.260048866 0.585616469 0.833247066
+v -9.217930794 0.585465431 0.867023468
+v -9.251623154 0.585465491 0.595134735
+v -9.174771309 0.585616529 0.595134735
+v -9.260048866 0.585616529 0.357022703
+v -9.184239388 0.585465491 0.357022703
+v -9.224709511 0.001949330 0.595135331
+v -9.194107056 0.585465491 0.618959129
+v -9.194107056 0.585465491 0.571310997
+v -9.217930794 0.585465491 0.390798748
+v -9.224709511 0.001949748 0.357107073
+v -9.241754532 0.585465491 0.333198935
+v -9.194107056 0.585465491 0.142734706
+v -9.224709511 0.001949399 0.118910953
+v -9.174771309 0.585616529 0.118910357
+v -9.251623154 0.585465491 0.118910357
+v -9.194107056 0.585465491 0.095086604
+v -9.241754532 2.851734638 -0.095293581
+v -9.194107056 2.851734638 -0.095293581
+v -9.217930794 4.903903484 -0.085425362
+v -9.260048866 2.851734638 -0.119201690
+v -9.174771309 2.851734638 -0.119117334
+v -9.194107056 2.851734638 -0.143025458
+v -9.184239388 4.903903484 -0.119117334
+v -9.241754532 2.851734638 -0.143025458
+v -9.251623154 4.903903484 -0.119117334
+v -9.217930794 4.903903484 -0.152809307
+v -9.194107056 2.851734638 -0.333489835
+v -9.184238434 4.903903484 -0.357313603
+v -9.217930794 4.903903484 -0.323621780
+v -9.260048866 2.851734638 -0.357314199
+v -9.251622200 4.903903484 -0.357313603
+v -9.194107056 2.851734638 -0.381137967
+v -9.217930794 4.903903484 -0.391005576
+v -9.241754532 2.851734638 -0.333489835
+v -9.241754532 2.851734638 -0.381137967
+v -9.174771309 2.851734638 -0.357314199
+v -9.194107056 2.851734638 -0.571518302
+v -9.184239388 4.903903484 -0.595342040
+v -9.217930794 4.903903484 -0.561650217
+v -9.260048866 2.851734638 -0.595426559
+v -9.251623154 4.903903484 -0.595342040
+v -9.241754532 2.851734638 -0.619250298
+v -9.217930794 4.903903484 -0.629034042
+v -9.194107056 2.851734638 -0.619250298
+v -9.194107056 2.851734638 -0.809714198
+v -9.184238434 4.903903484 -0.833538115
+v -9.217930794 4.903903484 -0.799846351
+v -9.260048866 2.851734638 -0.833538711
+v -9.251622200 4.903903484 -0.833538115
+v -9.174771309 2.851734638 -0.595342159
+v -9.241754532 2.851734638 -0.571518302
+v -9.174771309 2.851734638 -0.833538711
+v -9.241754532 2.851734638 -0.809714198
+v -9.241754532 2.851734638 -1.095474720
+v -9.251623154 4.903903484 -1.071566582
+v -9.217930794 4.903903484 -1.105258584
+v -9.174771309 2.851734638 -1.071566582
+v -9.184239388 4.903903484 -1.071566582
+v -9.194107056 2.851734638 -1.047742844
+v -9.217930794 4.903903484 -1.037874579
+v -9.260048866 2.851734638 -1.071650743
+v -9.194107056 2.851734638 -0.857362509
+v -9.217930794 4.903903484 -0.867230058
+v -9.241754532 2.851734638 -1.047742844
+v -9.241754532 2.851734638 -0.857362509
+v -9.194107056 2.851734638 -1.095474720
+v -9.194107056 2.851734638 -1.285938621
+v -9.174771309 2.851734638 -1.309763074
+v -9.184238434 4.903903484 -1.309762597
+v -9.241754532 2.851734638 -1.285938621
+v -9.217930794 4.903903484 -1.276070833
+v -9.260048866 2.851734638 -1.309763074
+v -9.241754532 2.851734638 -1.333587050
+v -9.251622200 4.903903484 -1.309762597
+v -9.194107056 2.851734638 -1.333587050
+v -9.194107056 2.851734638 -1.523967266
+v -9.184239388 4.903903484 -1.547790885
+v -9.217930794 4.903903484 -1.514099121
+v -9.260048866 2.851734638 -1.547875404
+v -9.251623154 4.903903484 -1.547790885
+v -9.241754532 2.851734638 -1.571699142
+v -9.217930794 4.903903484 -1.581482887
+v -9.174771309 2.851734638 -1.547790885
+v -9.217930794 4.903903484 -1.343454361
+v -9.217930794 2.764285564 -0.119117334
+v -9.241754532 2.764342785 -0.143025458
+v -9.260048866 2.764550686 -0.119201690
+v -9.184239388 2.764370918 -0.119201690
+v -9.217930794 2.764285564 -0.085425660
+v -9.217930794 2.764285803 -0.357313752
+v -9.194107056 2.764285803 -0.333490014
+v -9.174771309 2.764550686 -0.357314199
+v -9.194107056 2.764285803 -0.381137490
+v -9.251623154 2.764342785 -0.357313901
+v -9.260048866 2.764551163 -0.595426559
+v -9.184239388 2.764371395 -0.595426559
+v -9.217930794 2.764285564 -0.561650217
+v -9.217930794 2.764285564 -0.595342159
+v -9.251623154 2.764342785 -0.833538413
+v -9.241754532 2.764342785 -0.619250298
+v -9.194107056 2.764285564 -0.809714556
+v -9.174771309 2.764551163 -0.833538711
+v -9.217930794 2.764285564 -0.833538294
+v -9.194107056 2.764285803 -0.857361853
+v -9.217930794 2.764285564 -1.071566582
+v -9.217930794 2.764285564 -1.037874579
+v -9.184239388 2.764370918 -1.071650743
+v -9.260048866 2.764551163 -1.071650743
+v -9.241754532 2.764342785 -1.095474720
+v -9.251623154 2.764342785 -1.309763074
+v -9.194107056 2.764285803 -1.285939097
+v -9.174771309 2.764550686 -1.309763074
+v -9.217930794 2.764285803 -1.309762716
+v -9.194107056 2.764285803 -1.333586216
+v -9.241754532 2.851734638 -1.523967266
+v -9.217930794 2.764285564 -1.514099121
+v -9.184239388 2.764371395 -1.547875404
+v -9.260048866 2.764551163 -1.547875404
+v -9.194107056 2.851734638 -1.571699262
+v -9.260048866 2.851734638 -1.785987616
+v -9.241754532 2.851734638 -1.762163401
+v -9.217930794 4.903903484 -1.752295256
+v -9.241754532 2.851734638 -1.809811354
+v -9.251622200 4.903903484 -1.785987139
+v -9.194107056 2.851734638 -1.809811354
+v -9.174771309 2.851734638 -1.785987616
+v -9.217930794 4.903903484 -1.819678783
+v -9.194107056 2.851734638 -1.762163401
+v -9.184238434 4.903903484 -1.785987139
+v -9.194107056 2.851734638 -2.000191689
+v -9.184239388 4.903903484 -2.024015427
+v -9.217930794 4.903903484 -1.990323782
+v -9.260048866 2.851734638 -2.024100065
+v -9.251623154 4.903903484 -2.024015427
+v -9.241754532 2.851734638 -2.000191689
+v -9.174771309 2.851734638 -2.024015665
+v -9.241754532 2.851734638 -2.238387823
+v -9.194107056 2.851734638 -2.238387823
+v -9.217930794 4.903903484 -2.228519678
+v -9.260048866 2.851734638 -2.262212276
+v -9.194107056 2.851734638 -2.047923565
+v -9.217930794 4.903903484 -2.057707310
+v -9.241754532 2.851734638 -2.286036015
+v -9.251622200 4.903903484 -2.262211800
+v -9.194107056 2.851734638 -2.286036015
+v -9.174771309 2.851734638 -2.262212276
+v -9.184238434 4.903903484 -2.262211800
+v -9.241754532 2.851734638 -2.047923565
+v -9.217930794 4.903903484 -2.295903683
+v -9.241754532 2.851734638 -2.524148226
+v -9.260048866 2.851734638 -2.500324249
+v -9.251623154 4.903903484 -2.500240326
+v -9.241754532 2.851734638 -2.476416349
+v -9.194107056 2.851734638 -2.476416349
+v -9.217930794 4.903903484 -2.466548204
+v -9.194107056 2.851734638 -2.524148226
+v -9.217930794 4.903903484 -2.533931971
+v -9.174771309 2.851734638 -2.500240326
+v -9.184239388 4.903903484 -2.500240326
+v -9.241754532 2.851734638 -2.714612246
+v -9.184238434 4.903903484 -2.738436222
+v -9.217930794 4.903903484 -2.704744339
+v -9.260048866 2.851734638 -2.738436699
+v -9.251622200 4.903903484 -2.738436222
+v -9.194107056 2.851734638 -2.714612246
+v -9.174770355 2.851734638 -2.738436699
+v -9.241754532 2.851734638 -2.762260437
+v -9.194107056 2.851734638 -2.762260437
+v -9.217930794 4.903903484 -2.772128105
+v -9.241754532 2.851734638 -3.000288248
+v -9.251622200 4.903903484 -2.976464748
+v -9.217930794 4.903903484 -3.010156393
+v -9.194107056 2.851734638 -3.000288248
+v -9.184238434 4.903903484 -2.976464748
+v -9.194107056 2.851734638 -2.952640533
+v -9.217930794 4.903903484 -2.942772388
+v -9.260048866 2.851734638 -2.976464748
+v -9.174771309 2.851734638 -2.976464272
+v -9.241754532 2.851734638 -2.952640533
+v -9.217930794 2.764285564 -1.547791004
+v -9.241754532 2.764342785 -1.571699262
+v -9.251623154 2.764342785 -1.785987496
+v -9.194107056 2.764285564 -1.762163520
+v -9.217930794 2.764285564 -1.785987139
+v -9.174771309 2.764551163 -1.785987616
+v -9.217930794 2.764285564 -2.024015665
+v -9.217930794 2.764285564 -1.990323663
+v -9.184239388 2.764371395 -2.024100065
+v -9.260048866 2.764551163 -2.024099827
+v -9.241754532 2.764342785 -2.047923803
+v -9.194107056 2.764285564 -1.809810996
+v -9.217930794 2.764285803 -2.262211800
+v -9.194107056 2.764285803 -2.238388062
+v -9.174771309 2.764550686 -2.262212276
+v -9.251623154 2.764342785 -2.262211800
+v -9.194107056 2.764285803 -2.286035538
+v -9.217930794 2.764285564 -2.500240326
+v -9.260048866 2.764550686 -2.500324249
+v -9.217930794 2.764285564 -2.466548204
+v -9.241754532 2.764342785 -2.524148226
+v -9.184239388 2.764371395 -2.500324249
+v -9.251622200 2.764342785 -2.738436460
+v -9.194107056 2.764285803 -2.714612246
+v -9.174770355 2.764551163 -2.738436699
+v -9.217930794 2.764285803 -2.738436222
+v -9.194107056 2.764285803 -2.762260199
+v -9.251623154 2.764342785 -2.976464748
+v -9.217930794 2.764285564 -2.976464748
+v -9.194107056 2.764285564 -2.952641010
+v -9.174771309 2.764551163 -2.976464272
+v -9.174771309 2.851734400 -3.202257156
+v -9.217930794 2.764285088 -3.201863527
+v -9.194107056 2.764399529 -2.999536991
+v -9.260048866 2.764550447 -3.202257156
+v -9.260048866 2.851734400 -3.202257156
+v -9.184239388 2.764342308 -3.202257156
+v -9.217930794 2.851734400 -3.201863527
+v -9.194107056 0.663206875 -0.333490014
+v -9.241754532 0.663206875 -0.333490014
+v -9.194107056 0.663206875 -0.095293581
+v -9.260048866 0.663206875 -0.119201690
+v -9.241754532 0.663206875 -0.143025458
+v -9.194107056 0.663206875 -0.143025458
+v -9.174771309 0.663206875 -0.119117633
+v -9.241754532 0.663206875 -0.095293581
+v -9.174771309 0.663206875 -0.357314348
+v -9.260048866 0.663206875 -0.357314348
+v -9.241754532 0.663206875 -0.619250298
+v -9.194107056 0.663206875 -0.619250298
+v -9.194107056 0.663206875 -0.381138086
+v -9.194107056 0.663206875 -0.571518421
+v -9.260048866 0.663206875 -0.595426559
+v -9.241754532 0.663206875 -0.571518421
+v -9.241754532 0.663206875 -0.381138086
+v -9.174771309 0.663206875 -0.595342159
+v -9.241754532 0.663206935 -0.809714556
+v -9.194107056 0.663206935 -0.809714556
+v -9.260048866 0.663206935 -0.833538890
+v -9.241754532 0.663206935 -0.857362628
+v -9.194107056 0.663206935 -0.857362628
+v -9.174771309 0.663206935 -0.833538890
+v -9.241754532 0.663206697 -1.095474839
+v -9.194107056 0.663206697 -1.095474839
+v -9.260048866 0.663206697 -1.071651101
+v -9.194107056 0.663206697 -1.047743082
+v -9.241754532 0.663206697 -1.047743082
+v -9.174771309 0.663206697 -1.071566582
+v -9.194107056 0.663206697 -1.285939097
+v -9.174771309 0.663206935 -1.309763074
+v -9.241754532 0.663206697 -1.285939097
+v -9.260048866 0.663206935 -1.309763074
+v -9.241754532 0.663206935 -1.333587050
+v -9.194107056 0.663206935 -1.333587050
+v -9.194107056 0.663206697 -1.523967385
+v -9.260048866 0.663206697 -1.547875524
+v -9.241754532 0.663206697 -1.571699262
+v -9.194107056 0.663206697 -1.571699262
+v -9.260048866 0.585616529 -0.119201690
+v -9.224709511 0.001949748 -0.119117334
+v -9.217930794 0.585465491 -0.085425660
+v -9.184239388 0.585465491 -0.119201690
+v -9.241754532 0.585465491 -0.143025458
+v -9.194107056 0.585465491 -0.333490014
+v -9.224709511 0.001949399 -0.357313752
+v -9.174771309 0.585616529 -0.357314348
+v -9.251623154 0.585465491 -0.357314348
+v -9.194107056 0.585465491 -0.381138086
+v -9.260048866 0.585616350 -0.595426559
+v -9.184239388 0.585465491 -0.595426559
+v -9.251623154 0.585465491 -0.833538711
+v -9.174771309 0.585616350 -0.833538711
+v -9.217930794 0.585465491 -0.561650217
+v -9.224709511 0.001949748 -0.595342159
+v -9.194107056 0.585465491 -0.809714556
+v -9.241754532 0.585465491 -0.619250298
+v -9.224709511 0.001949399 -0.833538294
+v -9.194107056 0.585465491 -0.857362628
+v -9.184239388 0.585465491 -1.071651101
+v -9.224709511 0.001949608 -1.071566701
+v -9.241754532 0.585465491 -1.095474839
+v -9.217930794 0.585465491 -1.037874579
+v -9.260048866 0.585616350 -1.071651101
+v -9.251623154 0.585465491 -1.309763074
+v -9.194107056 0.585465491 -1.285939097
+v -9.194107056 0.585465491 -1.333587050
+v -9.224709511 0.001949399 -1.309762716
+v -9.174771309 0.585616350 -1.309763074
+v -9.184239388 0.585465491 -1.547875524
+v -9.224709511 0.001949608 -1.547790885
+v -9.241754532 0.585465491 -1.571699262
+v -9.260048866 0.585616350 -1.547875524
+v -9.217930794 0.585465491 -1.514099121
+v -9.241754532 0.663206697 -1.523967385
+v -9.174771309 0.663206697 -1.547791004
+v -9.194107056 0.663206816 -1.762163520
+v -9.174771309 0.663206816 -1.785987616
+v -9.241754532 0.663206816 -1.762163520
+v -9.260048866 0.663206816 -1.785987616
+v -9.241754532 0.663206816 -1.809811592
+v -9.194107056 0.663206816 -1.809811592
+v -9.260048866 0.663206816 -2.024100065
+v -9.194107056 0.663206816 -2.000191927
+v -9.174771309 0.663206816 -2.024015903
+v -9.241754532 0.663206816 -2.000191927
+v -9.194107056 0.663206816 -2.047923803
+v -9.194107056 0.663206816 -2.238387823
+v -9.241754532 0.663206816 -2.238387823
+v -9.194107056 0.663206816 -2.286036253
+v -9.174771309 0.663206816 -2.262212276
+v -9.241754532 0.663206816 -2.047923803
+v -9.241754532 0.663206816 -2.286036253
+v -9.260048866 0.663206816 -2.262212276
+v -9.194107056 0.663206816 -2.476416588
+v -9.174771309 0.663206816 -2.500240326
+v -9.194107056 0.663206816 -2.524148226
+v -9.241754532 0.663206816 -2.476416588
+v -9.260048866 0.663206816 -2.500324488
+v -9.241754532 0.663206816 -2.524148226
+v -9.194107056 0.663206816 -2.714612484
+v -9.241754532 0.663206816 -2.714612484
+v -9.260048866 0.663206816 -2.738436699
+v -9.241754532 0.663206816 -2.762260437
+v -9.174770355 0.663206816 -2.738436699
+v -9.241754532 0.663206875 -3.000288486
+v -9.174771309 0.663206875 -2.976464748
+v -9.194107056 0.663206875 -2.952641010
+v -9.241754532 0.663206875 -2.952641010
+v -9.194107056 0.663206816 -2.762260437
+v -9.260048866 0.663206875 -2.976464748
+v -9.194107056 0.663206875 -3.000288486
+v -9.251623154 0.585465550 -1.785987616
+v -9.174771309 0.585616410 -1.785987616
+v -9.260048866 0.585616410 -2.024100065
+v -9.184239388 0.585465550 -2.024100065
+v -9.194107056 0.585465550 -1.762163520
+v -9.224709511 0.001949469 -1.785987139
+v -9.194107056 0.585465550 -1.809811711
+v -9.217930794 0.585465550 -1.990323782
+v -9.224709511 0.001949678 -2.024015665
+v -9.194107056 0.585465550 -2.238387823
+v -9.224709511 0.001949469 -2.262211800
+v -9.174771309 0.585616410 -2.262212276
+v -9.251623154 0.585465550 -2.262212276
+v -9.194107056 0.585465550 -2.286036253
+v -9.241754532 0.585465550 -2.047923803
+v -9.260048866 0.585616410 -2.500324488
+v -9.224709511 0.001949678 -2.500240326
+v -9.217930794 0.585465550 -2.466548204
+v -9.241754532 0.585465550 -2.524148226
+v -9.184239388 0.585465550 -2.500324488
+v -9.194107056 0.585465550 -2.714612484
+v -9.224708557 0.001949469 -2.738436222
+v -9.174770355 0.585616469 -2.738436699
+v -9.251622200 0.585465372 -2.738436699
+v -9.194107056 0.585465431 -2.762260437
+v -9.217930794 0.663206875 -3.201863527
+v -9.260048866 0.663206875 -3.202257156
+v -9.174771309 0.663206875 -3.202257156
+v -9.174771309 0.585616469 -2.975544691
+v -9.260048866 0.585616469 -3.202257156
+v -9.251623154 0.585465431 -2.976464748
+v -9.184239388 0.585465431 -3.202257156
+v -9.224709511 0.001949678 -2.976464748
+v -9.217930794 0.585465431 -2.942772865
+v -9.194107056 0.585465431 -3.000288486
+v -9.217930794 0.585465431 -3.201863527
+v -9.342898369 -0.000000013 -3.231861830
+v -9.342898369 -0.000000013 3.241882324
+v -9.342898369 4.903903484 3.241882324
+v -9.124868393 4.903903484 -3.231861830
+v -9.124868393 4.903903484 3.241882324
+v -9.124868393 -0.000000013 3.241882324
+v -9.124868393 -0.000000013 -3.231861830
+v -9.342898369 4.903903484 -3.231861830
+v -10.522571564 5.376530647 4.996312141
+v -11.944499016 5.376530647 4.868019581
+v -10.522571564 6.424669266 3.616309643
+v -11.764372826 6.424669266 3.499822855
+v -10.522571564 6.886405945 2.539833784
+v -13.171661377 6.430963993 3.262741804
+v -12.903519630 6.891765594 2.222413063
+v -11.623864174 6.886405945 2.432556391
+v -11.459753036 7.187221527 1.186010599
+v -10.522571564 7.187221527 1.282531500
+v -12.589709282 7.192582607 1.004901886
+v -14.142993927 5.574815273 4.435072899
+v -16.842653275 6.576874256 3.338032007
+v -13.740724564 6.623157978 3.103520393
+v -13.518838882 5.382621288 4.609709740
+v -16.202087402 7.625217438 2.103313446
+v -13.430030823 7.083959579 2.075096607
+v -13.066421509 7.384777069 0.871518970
+v -15.707345963 8.086019516 1.149680018
+v -18.450126648 8.610714912 0.656888247
+v -19.308334351 7.562372684 1.751571774
+v -17.787288666 9.071516991 -0.188589811
+v -17.011562347 9.372335434 -1.178062677
+v -15.128343582 8.386837006 0.033630669
+v -14.540811539 8.473677635 -1.098863363
+v -12.697456360 7.471618652 -0.349792302
+v -12.271274567 7.279423714 -0.230548218
+v -12.326546669 7.384777546 -1.577539444
+v -10.522571564 7.274062157 -0.000019173
+v -11.292346954 7.274062157 -0.085567750
+v -11.951164246 7.192582607 -1.472508669
+v -11.125818253 7.187221527 -1.350481272
+v -10.522571564 7.187221527 -1.275847554
+v -11.637353897 6.891765594 -2.690018654
+v -11.962936401 7.083960533 -2.781116486
+v -10.522571564 6.886405945 -2.533149719
+v -10.961707115 6.886405945 -2.597026825
+v -16.224405289 9.459175110 -2.182115555
+v -18.626115799 10.376508713 -2.704424858
+v -19.570501328 10.075691223 -1.874399185
+v -20.377454758 9.614888191 -1.165164828
+v -21.422256470 8.566545486 -0.246882081
+v -23.146909714 9.572109222 -2.623607874
+v -14.657373428 9.071517944 -4.180932045
+v -15.760075569 10.075691223 -5.223401070
+v -13.993212700 8.609780312 -5.028099060
+v -14.951511383 9.613953590 -5.934051991
+v -13.141783714 7.560319424 -6.114133835
+v -12.875452042 7.624282837 -4.308912277
+v -13.371181488 8.086019516 -3.353374243
+v -12.239946365 6.574821472 -5.533876419
+v -11.651623726 6.622223377 -3.811594248
+v -11.252530098 5.572762966 -5.132627487
+v -11.024242401 5.380568027 -5.068752766
+v -10.522571564 6.425604343 -3.607479572
+v -10.821478844 6.425604343 -3.662166119
+v -10.522571564 5.378584385 -4.998468876
+v -11.368676186 6.430028915 -3.732426405
+v -13.950182915 8.386837006 -2.237324953
+v -15.433100700 9.372335434 -3.191458941
+v -17.667814255 10.463348389 -3.546681166
+v -18.845424652 11.468912125 -5.169534683
+v -16.704462051 10.376508713 -4.393375397
+v -16.659719467 11.081255913 -6.463191032
+v -17.741708755 11.382072449 -5.822793007
+v -15.733344078 10.619517326 -7.011487007
+v -16.207056046 11.416520119 -7.968554020
+v -17.204814911 11.878255844 -7.564476013
+v -16.370790482 11.411161423 -9.472515106
+v -14.545764923 9.570056915 -7.714380741
+v -14.991180420 10.369996071 -9.472515106
+v -14.927967072 10.367058754 -8.486566544
+v -13.914962769 8.564492226 -6.845079422
+v -19.943355560 11.382072449 -4.519700527
+v -18.370176315 12.179073334 -7.092521667
+v -19.558938980 12.265913010 -6.611088753
+v -17.447265625 11.887731552 -9.463213921
+v -18.704566956 12.188549042 -9.463213921
+v -20.741472244 12.179073334 -6.132178783
+v -21.906833649 11.878255844 -5.660224438
+v -21.262947083 12.188549042 -9.463213921
+v -19.987119675 12.275389671 -9.463213921
+v -21.025344849 11.081254959 -3.879302502
+v -21.949874878 10.620451927 -3.332099915
+v -22.902603149 11.417453766 -5.256952286
+v -24.191875458 10.369110107 -4.734813690
+v -22.520248413 11.887731552 -9.463213921
+v -24.985912323 10.363021851 -9.472431183
+v -23.594579697 11.426930428 -9.463213921
+v -11.921522141 5.244771004 4.691285133
+v -13.464874268 5.250683784 4.400579453
+v -13.464874268 5.389416695 4.400579453
+v -11.921522141 5.383503914 4.691285133
+v -11.944499016 5.028249741 4.868019581
+v -13.518838882 5.034162521 4.609709740
+v -10.522571564 5.028249741 4.996312141
+v -10.693440437 5.244771004 4.781946659
+v -10.693440437 5.383503914 4.781946659
+v -10.522571564 4.220901012 4.194850445
+v -10.522571564 5.074391842 2.961715221
+v -10.987136841 5.306261063 1.998843908
+v -10.987136841 4.942946434 2.845861673
+v -10.522571564 5.437706947 2.080181360
+v -11.189902306 4.981316566 1.855782747
+v -11.189902306 4.664701939 2.685906410
+v -10.987136841 4.118224621 3.998601198
+v -10.987136841 3.594882727 2.999999046
+v -10.987136841 4.015309334 2.312587738
+v -11.189902306 3.954033852 3.695902348
+v -11.189902306 4.268828392 2.458329201
+v -11.189902306 3.731305599 3.256635666
+v -10.522571564 5.674401283 1.050566673
+v -11.189902306 5.186119080 0.934212565
+v -11.189902306 4.591217518 1.684036255
+v -10.987136841 5.542956352 1.009543061
+v -10.987136841 5.611286163 -0.000002925
+v -10.522571564 5.742732048 -0.000118388
+v -11.189902306 5.247025013 0.000000297
+v -10.987136841 4.320860386 1.565007925
+v -11.189902306 4.787009716 0.849958301
+v -10.987136841 4.506307602 0.790700376
+v -11.189902306 4.860300064 0.000003708
+v -10.987136841 4.568477631 0.000006273
+v -14.080591202 5.442877769 4.228303909
+v -14.080591202 5.581610680 4.228303909
+v -14.142993927 5.226356506 4.435072899
+v -16.743244171 6.583669662 3.146288157
+v -16.743244171 6.444936752 3.146288395
+v -16.842651367 6.228415489 3.338032246
+v -16.842641830 1.554137230 3.338010311
+v -11.944499016 0.355853915 4.868019581
+v -10.522571564 0.355859280 4.194944382
+v -13.518832207 0.359884471 4.609686375
+v -13.464838028 0.115775906 4.400473118
+v -11.921388626 0.111744970 4.691383362
+v -11.921388626 0.000000567 4.691383362
+v -13.462984085 0.004034261 4.393279076
+v -10.987136841 0.000000545 3.997561693
+v -10.713544846 0.000000571 4.781278133
+v -10.713544846 0.111745164 4.781278133
+v -10.713544846 0.111750051 4.114162445
+v -10.713544846 0.000000542 4.114162445
+v -10.522571564 0.355853915 4.996312141
+v -11.189902306 0.000000532 3.698854685
+v -11.189902306 0.000000513 3.256092072
+v -10.987138748 0.000000502 2.999999285
+v -10.987138748 0.000000239 -3.000002146
+v -11.189903259 0.000000226 -3.299829006
+v -11.189903259 0.000000207 -3.729335070
+v -14.073675156 -0.000450481 4.214264393
+v -17.247392654 1.200104237 2.855069160
+v -17.247392654 1.400104165 2.855069160
+v -16.737829208 1.200104237 3.131706238
+v -17.743127823 1.600104690 2.561540604
+v -16.743198395 1.310028553 3.146185875
+v -16.221801758 1.000105262 3.387467623
+v -16.737829208 1.000105023 3.131706238
+v -16.221801758 0.800105274 3.387467623
+v -15.696773529 0.800104618 3.623860836
+v -14.142986298 0.552077711 4.435049057
+v -14.073494911 0.200105667 4.214318752
+v -14.619277954 0.400105536 4.038478851
+v -14.080564499 0.307969123 4.228194237
+v -15.696773529 0.600105345 3.623860836
+v -15.159379005 0.600104690 3.842149973
+v -15.159379005 0.400105536 3.842149973
+v -14.619277954 0.200104803 4.038478851
+v -11.522525787 0.199350193 -4.998117447
+v -11.522524834 0.399350166 -4.998117447
+v -11.312547684 -0.000552034 -4.930464745
+v -11.313628197 0.197789952 -4.928623199
+v -11.077886581 0.004034458 -4.860519409
+v -11.730351448 0.599349976 -5.073661804
+v -11.730351448 0.399350077 -5.073661804
+v -10.522571564 5.674401283 -1.044509530
+v -11.189902306 5.204754829 -0.932175219
+v -10.987136841 5.542956352 -1.003501534
+v -11.189902306 5.018983364 -1.866387129
+v -11.189902306 4.797083855 -0.846197724
+v -11.189902306 4.591829300 -1.678419709
+v -10.522571564 5.437706947 -2.074124336
+v -10.987136841 5.306261063 -1.992802382
+v -10.987136841 4.506307602 -0.784873307
+v -10.987136841 4.015309334 -2.306760550
+v -10.987136841 4.320860386 -1.559180737
+v -11.189902306 4.279667377 -2.478732586
+v -11.189902306 4.680350304 -2.687409163
+v -12.338356018 1.198818803 -5.345024109
+v -12.533795357 1.199349403 -5.453479290
+v -12.139158249 0.999349713 -5.248617649
+v -12.337719917 0.999349594 -5.347032547
+v -12.724548340 1.399349451 -5.566424370
+v -12.724548340 1.599349260 -5.566424370
+v -12.533795357 1.399349451 -5.453479290
+v -17.743127823 1.400104165 2.561540604
+v -11.937133789 0.599349856 -5.157656670
+v -11.937134743 0.799349844 -5.157656193
+v -12.139158249 0.799349785 -5.248617649
+v -19.160146713 2.200103760 1.573689103
+v -19.160099030 2.000426531 1.573725939
+v -13.269801140 1.999348879 -5.946537971
+v -19.592878342 2.200426340 1.222027302
+v -13.269801140 2.199348927 -5.946537971
+v -18.688013077 2.000103712 1.929206133
+v -18.688011169 1.800426364 1.929207444
+v -13.088128090 1.799349070 -5.809739113
+v -19.592884064 2.400103569 1.222023010
+v -13.436311722 2.199348927 -6.081855297
+v -18.234491348 1.800103784 2.245227337
+v -18.234491348 1.600103617 2.245227337
+v -12.913619041 1.599349260 -5.688138008
+v -12.913618088 1.799349189 -5.688138008
+v -13.088128090 1.999348998 -5.809739113
+v -20.024847031 2.600103378 0.844038010
+v -23.146888733 4.549372673 -2.623620272
+v -24.191854477 5.346374035 -4.734823227
+v -23.146909714 9.223649979 -2.623607874
+v -21.422256470 8.218087196 -0.246882007
+v -21.260068893 8.573341370 -0.389510125
+v -19.175127029 7.569168091 1.581561685
+v -21.260068893 8.434608459 -0.389510125
+v -19.175127029 7.430434704 1.581561685
+v -19.308334351 7.213913918 1.751571774
+v -21.422237396 3.543808699 -0.246898398
+v -19.308319092 2.539635181 1.751552343
+v -19.175062180 2.295526981 1.581469178
+v -20.024841309 2.400426388 0.844043970
+v -21.259988785 3.299700022 -0.389589429
+v -20.442436218 2.800103426 0.450453132
+v -20.870805740 2.800103188 0.014673174
+v -20.870805740 3.000103235 0.014673110
+v -20.442432404 2.600426197 0.450456142
+v -21.249750137 3.200103283 -0.401151925
+v -21.631483078 3.400102854 -0.852646232
+v -21.631483078 3.200103283 -0.852646172
+v -21.249750137 3.000103235 -0.401151925
+v -21.983184814 3.600101948 -1.301658869
+v -22.960983276 4.305263996 -2.733731031
+v -22.318733215 3.805263281 -1.764104128
+v -22.639333725 3.805263281 -2.242145777
+v -22.639333725 4.005263329 -2.242145777
+v -22.318899155 3.600747585 -1.764345169
+v -21.983184814 3.400102139 -1.301658869
+v -14.730253220 9.577030182 -7.605214596
+v -15.126667023 10.235299110 -8.406121254
+v -14.730253220 9.438297272 -7.605214596
+v -15.126667023 10.374031067 -8.406121254
+v -14.545764923 9.171813011 -7.714380741
+v -14.075992584 8.571465492 -6.703580856
+v -14.075993538 8.432733536 -6.703579426
+v -13.914962769 8.166248322 -6.845079422
+v -17.301195145 9.664704323 -8.797198296
+v -16.291198730 8.954035759 -8.797198296
+v -17.141239166 9.942949295 -8.999963760
+v -15.988500595 9.118226051 -8.999963760
+v -17.025384903 10.074394226 -9.464529037
+v -15.792250633 9.220903397 -9.464529037
+v -14.927967072 9.968814850 -8.486566544
+v -15.205154419 10.369996071 -9.301646233
+v -15.205154419 10.231264114 -9.301646233
+v -14.990788460 9.978288651 -9.464529037
+v -12.338684082 6.581794739 -5.343604088
+v -13.274061203 7.567292213 -5.945445061
+v -12.338685989 6.443062305 -5.343603611
+v -13.141783714 7.162075520 -6.114133835
+v -12.239946365 6.176578522 -5.533876419
+v -13.274061203 7.428560257 -5.945445061
+v -11.314546585 5.579736233 -4.927428246
+v -14.545763016 4.500739098 -7.714381695
+v -14.990787506 5.307215691 -9.463213921
+v -15.792155266 5.357183456 -9.463213921
+v -13.914960861 3.495175600 -6.845081329
+v -14.927965164 5.297739983 -8.486567497
+v -16.730466843 8.731307983 -8.797198296
+v -16.987102509 8.594884872 -8.999963760
+v -16.987100601 4.999999523 -8.998647690
+v -15.989538193 4.999999523 -8.998647690
+v -16.731008530 4.999999523 -8.795883179
+v -16.288244247 4.999999523 -8.795883179
+v -10.522571564 5.075127602 -2.953901052
+v -10.987136841 4.943681717 -2.838132381
+v -10.522571564 4.222517490 -4.197426319
+v -11.189902306 3.977253675 -3.729803801
+v -10.987136841 4.119840622 -4.004019737
+v -10.522571564 5.030126095 -4.998468876
+v -11.077722549 5.387540817 -4.861165047
+v -10.693440437 5.385379791 -4.782487869
+v -11.077723503 5.248808861 -4.861164570
+v -10.693440437 5.246647835 -4.782487869
+v -11.024242401 5.032286644 -5.068752766
+v -11.252530098 5.174519539 -5.132627487
+v -11.314546585 5.441003799 -4.927427292
+v -12.239945412 1.505504131 -5.533878326
+v -13.141781807 2.491002083 -6.114135265
+v -15.032476425 4.604507923 -8.194774628
+v -14.938087463 4.604507923 -7.995305538
+v -15.032476425 4.804508209 -8.194774628
+v -14.730827332 4.306592941 -7.604877949
+v -15.120501518 4.804507256 -8.400219917
+v -15.120501518 5.004507065 -8.400219917
+v -15.127285004 5.103593826 -8.405874252
+v -15.205821991 5.113069534 -9.272240639
+v -15.205821991 4.999999523 -9.272240639
+v -15.872937202 5.113074780 -9.272240639
+v -11.189902306 3.751090527 -3.299464226
+v -10.987136841 3.594882727 -3.000002384
+v -11.252530098 0.503444910 -5.132629395
+v -13.274473190 2.296855927 -5.944923878
+v -12.338994026 1.311358094 -5.343014717
+v -14.076495171 3.301029444 -6.703143120
+v -14.485184669 3.804508448 -7.230883598
+v -14.608549118 3.804508448 -7.414827347
+v -14.608549118 4.004508495 -7.414827347
+v -14.485260963 3.599347115 -7.230987549
+v -14.356073380 3.599347115 -7.052937508
+v -14.356073380 3.399347782 -7.052937508
+v -14.220742226 3.399347782 -6.880163670
+v -14.725962639 4.204507828 -7.604827881
+v -14.835721016 4.404508591 -7.798212051
+v -14.938087463 4.404508591 -7.995305538
+v -14.835721970 4.204507828 -7.798211575
+v -14.725962639 4.004508495 -7.604827881
+v -10.987138748 0.000000195 -4.002827168
+v -11.024241447 0.361212969 -5.068754196
+v -10.522571564 0.355848223 -4.998444557
+v -10.522571564 0.355847448 -4.197664261
+v -10.713545799 0.000000153 -4.782374859
+v -10.713545799 0.111738972 -4.117465496
+v -10.713545799 0.000000182 -4.117465496
+v -10.713545799 0.111739635 -4.782374859
+v -11.077886581 0.117104389 -4.860519409
+v -11.314742088 0.309298813 -4.926791668
+v -13.436311722 2.399348736 -6.081855297
+v -13.602527618 2.599348783 -6.227298737
+v -13.763211250 2.599348783 -6.378746033
+v -13.763211250 2.799348593 -6.378746033
+v -13.602527618 2.399348736 -6.227298737
+v -14.220742226 3.199348211 -6.880163670
+v -14.073856354 3.199347496 -6.706433773
+v -14.073856354 2.999348164 -6.706433773
+v -13.928043365 2.999348402 -6.546429634
+v -13.928043365 2.799348593 -6.546429634
+v -15.872937202 4.999999523 -9.272240639
+v -18.131317139 9.981318474 -8.797198296
+v -17.988256454 10.306262970 -8.999963760
+v -17.906917572 10.437708855 -9.464529037
+v -19.052888870 10.186120033 -8.797198296
+v -18.977558136 10.542957306 -8.999963760
+v -18.303064346 9.591218948 -8.797198296
+v -19.137142181 9.787012100 -8.797198296
+v -18.936534882 10.674402237 -9.464529037
+v -17.528772354 9.268830299 -8.797198296
+v -17.674510956 9.016634941 -8.998647690
+v -17.674514771 9.015310287 -10.000000954
+v -16.987102509 8.594883919 -10.000000954
+v -18.422090530 9.322186470 -8.998647690
+v -19.196399689 9.506309509 -8.999963760
+v -19.196399689 9.506309509 -10.000000954
+v -18.422092438 9.320861816 -10.000000954
+v -19.987100601 10.247028351 -8.797198296
+v -19.987104416 10.611288071 -8.999963760
+v -19.987218857 10.742734909 -9.464529991
+v -20.919277191 10.204757690 -8.797198296
+v -20.990602493 10.542957306 -8.999963760
+v -21.031610489 10.674402237 -9.464529991
+v -19.987096786 9.860301971 -8.797198296
+v -19.987094879 9.568479538 -8.999963760
+v -19.987094879 9.568479538 -10.000000954
+v -20.833299637 9.797085762 -8.797198296
+v -20.771974564 9.506309509 -8.999963760
+v -20.771974564 9.506309509 -10.000000954
+v -22.961076736 9.440172195 -2.733668089
+v -22.961076736 9.578904152 -2.733668089
+v -23.991712570 10.375905991 -4.815942287
+v -23.991712570 10.237173080 -4.815942287
+v -24.191875458 10.020651817 -4.734813690
+v -22.061225891 10.437708855 -9.464529037
+v -22.825233459 9.943684578 -8.999963760
+v -21.979904175 10.306262970 -8.999963760
+v -22.941001892 10.075129509 -9.464529037
+v -24.184528351 9.222518921 -9.464529037
+v -23.716903687 8.977254868 -8.797198296
+v -22.674510956 9.680353165 -8.797198296
+v -23.991121292 9.119842529 -8.999963760
+v -22.465831757 9.279668808 -8.797198296
+v -23.286565781 8.751092911 -8.797198296
+v -22.293861389 9.015311241 -8.999963760
+v -22.987102509 8.594884872 -8.999963760
+v -22.987102509 8.594883919 -10.000000954
+v -21.665519714 9.591831207 -8.797198296
+v -21.546281815 9.320861816 -8.999963760
+v -21.546281815 9.320861816 -10.000000954
+v -21.853488922 10.018985748 -8.797198296
+v -22.293861389 9.015310287 -10.000000954
+v -24.985912323 10.014828682 -9.472431183
+v -24.769596100 10.370082855 -9.301564217
+v -24.769596100 10.231350899 -9.301564217
+v -24.985546112 5.355849743 -9.464529037
+v -22.944475174 4.205263615 -2.735925198
+v -22.944475174 4.005263329 -2.735925198
+v -23.230068207 4.204940796 -3.239145756
+v -23.229717255 4.405263901 -3.238497257
+v -23.969812393 5.005263329 -4.803016186
+v -23.741117477 4.604940891 -4.269253254
+v -23.969812393 4.805263042 -4.803016186
+v -23.741048813 4.805263042 -4.269100666
+v -23.495750427 4.605263710 -3.750710487
+v -23.496076584 4.404941082 -3.751371861
+v -23.991611481 5.102264881 -4.815990448
+v -23.286930084 4.999999523 -8.797198296
+v -23.716436386 4.999999523 -8.797197342
+v -23.989929199 4.999999523 -8.999961853
+v -24.769477844 4.986489296 -9.281723022
+v -22.987102509 4.999999523 -8.999961853
+v -16.987102509 4.999999523 -10.000000000
+v -22.987102509 4.999999523 -10.000000000
+v -24.184766769 5.355849266 -9.464529037
+v -24.769477844 5.111741543 -9.273554802
+v -24.104564667 5.111741066 -9.273554802
+v -24.104564667 4.999999523 -9.273554802
+v -25.015216827 10.370100975 -10.486470222
+v -24.881961823 10.370100975 -11.907939911
+v -23.635223389 11.418239594 -10.481653214
+v -23.514402390 11.418239594 -11.723038673
+v -22.558753967 11.879976273 -10.477895737
+v -23.272411346 11.424533844 -13.129491806
+v -22.233024597 11.885335922 -12.857720375
+v -22.447633743 11.879976273 -11.578805923
+v -21.201667786 12.180791855 -11.410345078
+v -21.301460266 12.180791855 -10.473506927
+v -21.016616821 12.186153412 -12.539662361
+v -24.441345215 10.568386078 -14.104910851
+v -23.334888458 11.570444107 -16.800724030
+v -23.111204147 11.616727829 -13.697996140
+v -24.618160248 10.376192093 -13.481369019
+v -22.102413177 12.618787766 -16.155851364
+v -22.083871841 12.077529907 -13.383714676
+v -20.881570816 12.378347397 -13.015907288
+v -21.150512695 13.079589844 -15.657785416
+v -20.648149490 13.604285240 -18.398828506
+v -21.739830017 12.555942535 -19.260852814
+v -19.804990768 14.065087318 -17.733043671
+v -18.818231583 14.365905762 -16.953866959
+v -20.036491394 13.380407333 -15.074891090
+v -18.906053543 13.467247963 -14.483409882
+v -19.661554337 12.465188980 -12.642681122
+v -19.782285690 12.272994041 -12.216917038
+v -18.435110092 12.378347397 -12.267487526
+v -20.018917084 12.267632484 -10.469030380
+v -19.930683136 12.267632484 -11.238502502
+v -18.541450500 12.186153412 -11.892474174
+v -18.666357040 12.180791855 -11.067559242
+v -18.743097305 12.180791855 -10.464576721
+v -17.325042725 11.885335922 -11.574416161
+v -17.232809067 12.077530861 -11.899678230
+v -17.485801697 11.879976273 -10.460188866
+v -17.420392990 11.879976273 -10.899098396
+v -17.816932678 14.452745438 -16.163211823
+v -17.286243439 15.370079041 -18.563083649
+v -18.112966537 15.069261551 -19.510362625
+v -18.819381714 14.608458519 -20.319784164
+v -19.734010696 13.560115814 -21.367786407
+v -17.351280212 14.565679550 -23.084133148
+v -15.823597908 14.065088272 -14.589212418
+v -14.777286530 15.069261551 -15.688269615
+v -14.978754044 13.603350639 -13.922099113
+v -14.069461823 14.607523918 -14.877229691
+v -13.895698547 12.553890228 -13.066884995
+v -15.701837540 12.617853165 -12.806856155
+v -16.655639648 13.079589844 -13.305916786
+v -14.479099274 11.568391800 -12.167078018
+v -16.203424454 11.615793228 -11.584771156
+v -14.883792877 10.566333771 -11.181069374
+v -14.948463440 10.374137878 -10.953004837
+v -16.411479950 11.419174194 -10.456439018
+v -16.355749130 11.419174194 -10.755152702
+v -15.020498276 10.372154236 -10.451583862
+v -16.283580780 11.423599243 -11.302101135
+v -17.769660950 13.380407333 -13.888811111
+v -16.810358047 14.365905762 -15.368389130
+v -16.447336197 15.456918716 -17.601848602
+v -14.820383072 16.462482452 -18.773788452
+v -15.604010582 15.370079041 -16.635547638
+v -13.534363747 16.074825287 -16.583580017
+v -14.170981407 16.375642776 -17.667797089
+v -12.989304543 15.613087654 -15.655296326
+v -12.030590057 16.410091400 -16.125663757
+v -12.431182861 16.871826172 -17.124828339
+v -10.526067734 16.404731750 -16.284149170
+v -12.290560722 14.563627243 -14.465271950
+v -10.530882835 15.363566399 -14.904547691
+v -11.517045021 15.360629082 -14.844776154
+v -13.162057877 13.558062553 -13.837507248
+v -15.466381073 16.375642776 -19.873981476
+v -12.899066925 17.172643661 -18.291830063
+v -13.376347542 17.259483337 -19.482267380
+v -10.531611443 16.881301880 -17.360651016
+v -10.527222633 17.182119370 -18.617944717
+v -13.851127625 17.172643661 -20.666463852
+v -14.319011688 16.871826172 -21.833465576
+v -10.518292427 17.182119370 -21.176307678
+v -10.522746086 17.268959045 -19.900487900
+v -16.102998734 16.074825287 -20.958198547
+v -16.646970749 15.614022255 -21.884632111
+v -14.718805313 16.411024094 -22.830635071
+v -15.236440659 15.362680435 -24.121723175
+v -10.513904572 16.881301880 -22.433601379
+v -10.496080399 15.356592178 -24.899217606
+v -10.510154724 16.420501709 -23.507926941
+v -24.705308914 10.238341331 -11.884346008
+v -24.409217834 10.244254112 -13.426673889
+v -24.409217834 10.382987022 -13.426673889
+v -24.705308914 10.377074242 -11.884346008
+v -24.881961823 10.021820068 -11.907939911
+v -24.618160248 10.027732849 -13.481369019
+v -25.015216827 10.021820068 -10.486470222
+v -24.800256729 10.238341331 -10.656588554
+v -24.800256729 10.377074242 -10.656588554
+v -24.213760376 9.214471817 -10.483672142
+v -22.980632782 10.067962646 -10.479368210
+v -22.016145706 10.299831390 -10.940568924
+v -22.863159180 9.936516762 -10.943525314
+v -22.099105835 10.431277275 -10.476290703
+v -21.872377396 9.974886894 -11.142833710
+v -22.702497482 9.658271790 -11.145730972
+v -24.015892029 9.111795425 -10.947548866
+v -23.017295837 8.588453293 -10.944063187
+v -22.329887390 9.008879662 -10.941663742
+v -22.333377838 9.008878708 -9.941633224
+v -23.712486267 8.947604179 -11.149256706
+v -23.020786285 8.588453293 -9.944032669
+v -22.474920273 9.262398720 -11.144936562
+v -23.273221970 8.724876404 -11.147723198
+v -21.069496155 10.667971611 -10.472697258
+v -20.950813293 10.179689407 -11.139616966
+v -21.700632095 9.584787369 -11.142234802
+v -21.026851654 10.536526680 -10.937115669
+v -20.017311096 10.604856491 -10.933591843
+v -20.018817902 10.736302376 -10.469030380
+v -20.016607285 10.240594864 -11.136356354
+v -21.582313538 9.314430237 -10.939054489
+v -21.585803986 9.314430237 -9.939023972
+v -20.866559982 9.780580521 -11.139323235
+v -20.811500549 9.499877930 -9.936321259
+v -20.808010101 9.499877930 -10.936351776
+v -20.016611099 9.853870392 -11.136356354
+v -20.017320633 9.562047958 -10.933591843
+v -20.020811081 9.562047958 -9.933561325
+v -24.234794617 10.436448097 -14.041786194
+v -24.234794617 10.575181007 -14.041786194
+v -24.441345215 10.219926834 -14.104910851
+v -23.143491745 11.577239990 -16.700647354
+v -23.143491745 11.438507080 -16.700645447
+v -23.334888458 11.221985817 -16.800722122
+v -23.334865570 6.547707558 -16.800710678
+v -24.881961823 5.349424362 -11.907939911
+v -24.213853836 5.349429607 -10.483672142
+v -24.618135452 5.353454590 -13.481361389
+v -24.409112930 5.109346390 -13.426637650
+v -24.705408096 5.105315208 -11.884212494
+v -24.705408096 4.993570805 -11.884212494
+v -24.401924133 4.997604370 -13.424758911
+v -24.014850616 4.993570805 -10.947545052
+v -24.799518585 4.993570805 -10.676690102
+v -24.799518585 5.105315685 -10.676690102
+v -24.132406235 5.105320454 -10.674362183
+v -24.132406235 4.993570805 -10.674362183
+v -25.015216827 5.349424362 -10.486470222
+v -23.715438843 4.993570805 -11.149267197
+v -23.272678375 4.993570805 -11.147721291
+v -23.017295837 4.993570805 -10.944065094
+v -23.020786285 4.993570805 -9.944033623
+v -17.017330170 4.993570805 -10.923122406
+v -16.716798782 4.993570328 -11.124839783
+v -17.020822525 4.993570805 -9.923090935
+v -16.287294388 4.993570328 -11.123340607
+v -24.220779419 4.993119717 -14.034821510
+v -22.850515366 6.193674564 -17.203773499
+v -22.850515366 6.393674374 -17.203773499
+v -23.128929138 6.193674564 -16.695180893
+v -22.555257797 6.593675137 -17.698482513
+v -23.143390656 6.303598881 -16.700599670
+v -23.386489868 5.993675709 -16.180047989
+v -23.128929138 5.993675232 -16.695180893
+v -23.386489868 5.793675423 -16.180047989
+v -23.624713898 5.793674946 -15.655849457
+v -24.441320419 5.545648098 -14.104903221
+v -24.220834732 5.193675995 -14.034641266
+v -24.043090820 5.393675804 -14.579807281
+v -24.234685898 5.301539421 -14.041759491
+v -23.624713898 5.593675613 -15.655849457
+v -23.844877243 5.593675137 -15.119219780
+v -23.844877243 5.393675804 -15.119219780
+v -24.043090820 5.193675041 -14.579807281
+v -15.017359734 5.192920685 -11.451532364
+v -15.017359734 5.392920494 -11.451531410
+v -15.085744858 4.993018150 -11.241790771
+v -15.087582588 5.191360474 -11.242877960
+v -15.156508446 4.997604847 -11.007375717
+v -14.941089630 5.592920303 -11.659092903
+v -14.941089630 5.392920494 -11.659092903
+v -18.974433899 10.667971611 -10.465384483
+v -19.084438324 10.198325157 -11.133102417
+v -19.013818741 10.536526680 -10.930088997
+v -18.150232315 10.012554169 -11.129841805
+v -19.170413971 9.790654182 -11.133402824
+v -18.338197708 9.585399628 -11.130497932
+v -17.944824219 10.431277275 -10.461791039
+v -18.024524689 10.299831390 -10.926635742
+v -19.235937119 9.499877930 -9.930821419
+v -19.232446671 9.499877930 -10.930851936
+v -18.461633682 9.314430237 -9.928118706
+v -17.710567474 9.008879662 -10.925539970
+v -18.458143234 9.314430237 -10.928149223
+v -17.537889481 9.273237228 -11.127704620
+v -17.329214096 9.673920631 -11.126976013
+v -17.714057922 9.008878708 -9.925509453
+v -14.667607307 6.192389011 -12.266146660
+v -14.558470726 6.192919731 -12.461206436
+v -14.764708519 5.992919922 -12.067286491
+v -14.665601730 5.992919922 -12.265502930
+v -14.444860458 6.392919540 -12.651563644
+v -14.444860458 6.592919350 -12.651563644
+v -14.558470726 6.392919540 -12.461206436
+v -22.555257797 6.393674374 -17.698482513
+v -14.856374741 5.592920303 -11.865580559
+v -14.856374741 5.792920113 -11.865581512
+v -14.764708519 5.792920113 -12.067286491
+v -21.562465668 7.193674088 -19.112043381
+v -21.562503815 6.993996620 -19.111997604
+v -14.062846184 6.992918968 -13.195486069
+v -21.209297180 7.193996429 -19.543546677
+v -14.062846184 7.192919254 -13.195486069
+v -21.919630051 6.993674278 -18.641155243
+v -21.919630051 6.793996811 -18.641153336
+v -14.200278282 6.792919159 -13.014291763
+v -21.209291458 7.393673897 -19.543550491
+v -13.926948547 7.192919254 -13.361523628
+v -22.237232208 6.793673992 -18.188739777
+v -22.237232208 6.593673706 -18.188739777
+v -14.322487831 6.592919350 -12.840208054
+v -14.322487831 6.792919636 -12.840208054
+v -14.200278282 6.992919445 -13.014291763
+v -20.829801559 7.593673706 -19.974193573
+v -17.351268768 9.542943001 -23.084110260
+v -15.236431122 10.339944839 -24.121700287
+v -17.351280212 14.217220306 -23.084133148
+v -19.734010696 13.211657524 -21.367786407
+v -19.591949463 13.566911697 -21.205101013
+v -21.570287704 12.562738419 -19.127052307
+v -19.591949463 13.428178787 -21.205101013
+v -21.570287704 12.424005508 -19.127052307
+v -21.739830017 12.207484245 -19.260852814
+v -19.733995438 8.537379265 -21.367767334
+v -21.739810944 7.533205509 -19.260837555
+v -21.570194244 7.289097309 -19.126987457
+v -20.829807281 7.393996716 -19.974185944
+v -19.591871262 8.293270111 -21.205020905
+v -20.434761047 7.793673515 -20.390405655
+v -19.997489929 7.793673515 -20.817251205
+v -19.997489929 7.993673325 -20.817251205
+v -20.434764862 7.593996525 -20.390401840
+v -19.580345154 8.193674088 -21.194742203
+v -19.127519608 8.393672943 -21.574895859
+v -19.127519608 8.193674088 -21.574895859
+v -19.580345154 7.993673325 -21.194742203
+v -18.677282333 8.593671799 -21.925027847
+v -17.241806030 9.298833847 -22.897821426
+v -18.213668823 8.798833847 -22.258960724
+v -17.734512329 8.798833847 -22.577890396
+v -17.734512329 8.998833656 -22.577890396
+v -18.213428497 8.594318390 -22.259124756
+v -18.677282333 8.393672943 -21.925027847
+v -12.399082184 14.570600510 -14.650138855
+v -11.596796989 15.228869438 -15.043756485
+v -12.399082184 14.431867599 -14.650139809
+v -11.596796989 15.367601395 -15.043754578
+v -12.290560722 14.165383339 -14.465271950
+v -13.302993774 13.565035820 -13.999031067
+v -13.302995682 13.426303864 -13.999031067
+v -13.162057877 13.159818649 -13.837507248
+v -11.198131561 14.658274651 -17.216905594
+v -11.201657295 13.947606087 -16.206914902
+v -10.995925903 14.936519623 -17.056241989
+v -10.999949455 14.111796379 -15.903511047
+v -10.531768799 15.067964554 -16.938766479
+v -10.536072731 14.214473724 -15.705640793
+v -11.517045021 14.962385178 -14.844776154
+v -10.701003075 15.363566399 -15.119117737
+v -10.701003075 15.224834442 -15.119117737
+v -10.538870811 14.971858978 -14.904184341
+v -14.669025421 11.575365067 -12.266479492
+v -14.063923836 12.560862541 -13.199748993
+v -14.669026375 11.436632156 -12.266481400
+v -13.895698547 12.155645370 -13.066884995
+v -14.479099274 11.170148849 -12.167078018
+v -14.063923836 12.422130585 -13.199749947
+v -15.088773727 10.573307037 -11.243801117
+v -12.290559769 9.494309425 -14.465270042
+v -10.540185928 10.300786018 -14.904186249
+v -10.537387848 10.350753784 -15.705550194
+v -13.162055969 8.488745689 -13.837506294
+v -11.517044067 10.291310310 -14.844774246
+v -11.200123787 13.724878311 -16.646181107
+v -10.996463776 13.588455200 -16.902107239
+v -10.997779846 9.993570328 -16.902109146
+v -11.001261711 9.993570328 -15.904552460
+v -11.201436996 9.993570328 -16.646726608
+v -11.202982903 9.993570328 -16.203966141
+v -17.065053940 10.068697929 -10.458720207
+v -17.179199219 9.937252045 -10.923685074
+v -15.821536064 9.216087341 -10.454379082
+v -16.286827087 8.970824242 -11.123337746
+v -16.013319016 9.113410950 -10.919615746
+v -15.020498276 10.023696899 -10.451583862
+v -15.155863762 10.381111145 -11.007209778
+v -15.235881805 10.378950119 -10.623204231
+v -15.155864716 10.242379189 -11.007210732
+v -15.235881805 10.240218163 -10.623204231
+v -14.948463440 10.025856972 -10.953004837
+v -14.883792877 10.168089867 -11.181069374
+v -15.088775635 10.434574127 -11.243801117
+v -14.479097366 6.499074459 -12.167078018
+v -13.895696640 7.484572411 -13.066883087
+v -11.808470726 9.598077774 -14.950302124
+v -12.008268356 9.598077774 -14.856611252
+v -11.808470726 9.798078537 -14.950302124
+v -12.399416924 9.300163269 -14.650714874
+v -11.602720261 9.798077583 -15.037611008
+v -11.602720261 9.998077393 -15.037611008
+v -11.597042084 10.097164154 -15.044374466
+v -10.730405807 10.106639862 -15.119886398
+v -10.730405807 9.993570328 -15.119886398
+v -10.728077888 10.106645584 -15.786997795
+v -16.717163086 8.744661331 -11.124839783
+v -17.017330170 8.588453293 -10.923120499
+v -17.020820618 8.588453293 -9.923089981
+v -14.883790970 5.497014999 -11.181069374
+v -14.064443588 7.290426254 -13.200163841
+v -14.669614792 6.304928303 -12.266791344
+v -13.303430557 8.294599533 -13.999534607
+v -12.774266243 8.798078537 -14.406379700
+v -12.589893341 8.798078537 -14.529100418
+v -12.589893341 8.998079300 -14.529100418
+v -12.774162292 8.592917442 -14.406455994
+v -12.952661514 8.592917442 -14.277889252
+v -12.952661514 8.392917633 -14.277889252
+v -13.125906944 8.392917633 -14.143162727
+v -12.399484634 9.198078156 -14.645851135
+v -12.205717087 9.398078918 -14.754933357
+v -12.008268356 9.398078918 -14.856611252
+v -12.205718040 9.198078156 -14.754934311
+v -12.399484634 8.998079300 -14.645851135
+v -16.014513016 4.993570328 -10.919622421
+v -14.948462486 5.354783058 -10.953003883
+v -15.020523071 5.349418640 -10.451583862
+v -15.821298599 5.349417686 -10.454379082
+v -15.235923767 4.993570328 -10.643310547
+v -15.900829315 5.105309486 -10.645630836
+v -15.900829315 4.993570328 -10.645630836
+v -15.235923767 5.105309963 -10.643310547
+v -15.156508446 5.110674858 -11.007375717
+v -15.089410782 5.302869320 -11.243998528
+v -13.926948547 7.392919064 -13.361523628
+v -13.780925751 7.592919350 -13.527230263
+v -13.628918648 7.592919350 -13.687385559
+v -13.628918648 7.792919159 -13.687385559
+v -13.780925751 7.392919064 -13.527230263
+v -13.125906944 8.192918777 -14.143162727
+v -13.300148010 8.192917824 -13.996884346
+v -13.300148010 7.992918491 -13.996884346
+v -13.460660934 7.992918968 -13.851630211
+v -13.460660934 7.792919159 -13.851630211
+v -10.728077888 9.993570328 -15.786997795
+v -11.195234299 14.974888802 -18.047021866
+v -10.992969513 15.299833298 -17.903255463
+v -10.528691292 15.431279182 -17.820295334
+v -11.192017555 15.179690361 -18.968587875
+v -10.989516258 15.536527634 -18.892549515
+v -11.194635391 14.584789276 -18.218769073
+v -11.191723824 14.780582428 -19.052841187
+v -10.525097847 15.667972565 -18.849905014
+v -11.197337151 14.262400627 -17.444480896
+v -10.995380402 14.010205269 -17.589515686
+v -9.994033813 14.008880615 -17.586023331
+v -9.996433258 13.588454247 -16.898616791
+v -10.992771149 14.315756798 -18.337091446
+v -10.988752365 14.499879837 -19.111391068
+v -9.988721848 14.499879837 -19.107900620
+v -9.991424561 14.314432144 -18.333597183
+v -11.188756943 15.240598679 -19.902793884
+v -10.985992432 15.604858398 -19.902090073
+v -10.521430016 15.736305237 -19.900583267
+v -11.185503006 15.198328018 -20.834964752
+v -10.982489586 15.536527634 -20.905582428
+v -10.517784119 15.667972565 -20.944969177
+v -11.188756943 14.853872299 -19.902790070
+v -10.985992432 14.562049866 -19.902080536
+v -9.985961914 14.562049866 -19.898590088
+v -11.185803413 14.790656090 -20.748987198
+v -10.983252525 14.499879837 -20.686954498
+v -9.983222008 14.499879837 -20.683464050
+v -17.241868973 14.433742523 -22.897914886
+v -17.241868973 14.572474480 -22.897914886
+v -15.156010628 15.369476318 -23.921278000
+v -15.156010628 15.230743408 -23.921278000
+v -15.236440659 15.014222145 -24.121723175
+v -10.514191628 15.431279182 -21.974576950
+v -10.976085663 14.937254906 -22.740201950
+v -10.979036331 15.299833298 -21.894876480
+v -10.511120796 15.068699837 -22.854347229
+v -10.506779671 14.216089249 -24.097867966
+v -11.175738335 13.970825195 -23.632574081
+v -11.179376602 14.673923492 -22.590187073
+v -10.972016335 14.113412857 -23.906082153
+v -11.180105209 14.273239136 -22.381509781
+v -11.177240372 13.744663239 -23.202238083
+v -10.977940559 14.008881569 -22.208833694
+v -10.975521088 13.588455200 -22.902070999
+v -9.975490570 13.588454247 -22.898580551
+v -11.182898521 14.585401535 -21.581203461
+v -10.980549812 14.314432144 -21.461257935
+v -9.980519295 14.314432144 -21.457767487
+v -11.182242393 15.012556076 -21.769170761
+v -9.977910042 14.008880615 -22.205343246
+v -10.496080399 15.008399010 -24.899217606
+v -10.667700768 15.363653183 -24.683498383
+v -10.667700768 15.224921227 -24.683498383
+v -10.503984451 10.349420547 -24.898880005
+v -17.239669800 9.198833466 -22.881307602
+v -17.239669800 8.998833656 -22.881307602
+v -16.735456467 9.198511124 -23.165142059
+v -16.736104965 9.398834229 -23.164793015
+v -15.169013023 9.998833656 -23.899423599
+v -15.703571320 9.598510742 -23.672592163
+v -15.169013023 9.798833847 -23.899423599
+v -15.703723907 9.798833847 -23.672523499
+v -16.222967148 9.598834038 -23.429035187
+v -16.222305298 9.398511887 -23.429361343
+v -15.155962944 10.095834732 -23.921176910
+v -11.177239418 9.993570328 -23.202602386
+v -11.175741196 9.993570328 -23.632106781
+v -10.972023010 9.993570328 -23.904890060
+v -10.687541962 9.980059624 -24.683450699
+v -10.975522995 9.993570328 -22.902070999
+v -9.996434212 9.993570328 -16.898616791
+v -9.975491524 9.993570328 -22.898578644
+v -10.506779671 10.349419594 -24.098104477
+v -10.695711136 10.105312347 -24.683479309
+v -10.698031425 10.105311394 -24.018569946
+v -10.698031425 9.993570328 -24.018569946
+v 18.151639938 16.422849655 -39.982330322
+v 20.731946945 15.374711037 -40.315002441
+v 18.820676804 15.374711037 -38.775352478
+v 19.747991562 16.422849655 -41.182910919
+v 17.629753113 16.884586334 -40.923835754
+v 18.982986450 16.884586334 -41.973312378
+v 17.020200729 17.185401917 -42.023498535
+v 18.176250458 17.185401917 -42.818588257
+v 22.158515930 16.422847748 -44.359470367
+v 19.015058517 17.272243500 -45.918804169
+v 20.193902969 17.185401917 -45.329006195
+v 21.180492401 16.884586334 -44.811431885
+v 23.330167770 15.374711037 -43.793838501
+v 22.288990021 16.884586334 -48.230606079
+v 23.356256485 16.422849655 -48.090103149
+v 24.724452972 15.374711037 -47.909973145
+v 21.132287979 17.185401917 -49.331924438
+v 22.389589310 16.884586334 -49.331924438
+v 23.463920593 16.423784256 -49.331924438
+v 24.854907990 15.376764297 -49.331924438
+v 21.042442322 17.185401917 -48.394718170
+v 18.505952835 17.185401917 -48.728652954
+v 19.770866394 17.272243500 -48.562126160
+v 19.856460571 17.272243500 -49.331924438
+v 18.573909760 17.185401917 -49.331924438
+v 17.286430359 17.272243500 -43.806549072
+v 16.426416397 17.185401917 -44.773418427
+v 17.777982712 17.185401917 -46.515922546
+v 16.398406982 17.272243500 -43.145240784
+v 16.772066116 16.884586334 -47.060039520
+v 17.259407043 16.884586334 -48.892765045
+v 15.817419052 16.423784256 -47.575325012
+v 15.601982117 16.884586334 -45.628391266
+v 16.194267273 16.423784256 -49.032993317
+v 16.240131378 16.422849655 -49.331924438
+v 17.316606522 16.884586334 -49.331924438
+v 14.912005424 16.423784256 -46.542243958
+v 13.975111961 15.376764297 -47.516983032
+v 14.464689255 15.376764297 -48.408912659
+v 14.649476051 16.423784256 -46.300395966
+v 15.170322418 16.884586334 -45.360763550
+v 14.860130310 15.374711037 -49.331924438
+v 6.673092842 15.374712944 -32.725341797
+v 17.220638275 16.422851563 -39.476814270
+v 17.890140533 15.381685257 -38.270545959
+v 5.997828484 16.423786163 -33.941822052
+v 16.689041138 16.884586334 -40.382247925
+v 5.476475239 16.884588242 -34.881168365
+v 16.078891754 17.185401917 -41.481575012
+v 4.866324902 17.185403824 -35.980499268
+v 15.465692520 17.272245407 -42.638774872
+v 4.247186661 17.272245407 -37.096027374
+v 14.837350845 17.185401917 -43.718509674
+v 15.779872894 17.185401917 -44.261104584
+v 3.624784470 17.185403824 -38.217433929
+v 14.227202415 16.884586334 -44.817840576
+v 3.014636040 16.884588242 -39.316761017
+v 13.715051651 16.423786163 -45.792980194
+v 3.933006287 17.185401917 -35.473697662
+v 3.317041874 17.185401917 -35.048015594
+v 2.558747768 17.272243500 -35.967140198
+v 4.542557240 16.884586334 -34.374034882
+v 4.134359837 16.884586334 -33.951190948
+v 3.314471245 17.272243500 -36.589561462
+v 2.492240429 16.422851563 -40.257987976
+v 13.039787292 15.374712944 -47.009456635
+v 1.822737694 15.381685257 -41.464256287
+v 1.726429939 17.185401917 -36.979194641
+v 0.669525146 17.272243500 -33.767730713
+v -0.472972870 17.185401917 -34.307502747
+v 0.819322586 16.884586334 -37.894798279
+v 2.692678452 17.185401917 -37.711303711
+v 1.841757774 17.185401917 -33.227012634
+v 3.769361496 16.423784256 -32.242866516
+v 5.248190880 15.376764297 -31.325889587
+v 4.852749825 15.374711037 -30.402873993
+v 3.518613338 16.423784256 -30.701808929
+v 2.890336990 16.884586334 -32.690055847
+v 3.472748280 16.422849655 -30.402873993
+v 2.453473568 16.884586334 -30.842037201
+v 4.828486443 16.423784256 -33.241661072
+v 5.737767696 15.376764297 -32.217819214
+v 5.063403130 16.423784256 -33.434406281
+v 2.396272659 16.884586334 -30.402873993
+v 1.206927299 17.185401917 -31.006147385
+v 1.138970375 17.185401917 -30.402873993
+v -0.057985306 17.272243500 -31.172676086
+v -0.143579483 17.272243500 -30.402873993
+v -1.329563141 17.185401917 -31.340084076
+v -1.419406891 17.185401917 -30.402873993
+v -2.576108932 16.884586334 -31.504192352
+v -1.386344910 16.884586334 -34.814693451
+v -2.676710129 16.884586334 -30.402873993
+v -3.751039505 16.423784256 -30.402873993
+v -3.643377304 16.422849655 -31.644699097
+v -5.011572838 15.374711037 -31.824825287
+v -5.142028809 15.376764297 -30.402873993
+v -2.529266357 16.422849655 -35.398258209
+v -3.617288589 15.374711037 -35.940959930
+v -1.115442276 15.374711037 -39.509117126
+v -0.062291145 16.422849655 -38.602146149
+v 1.561239243 16.422849655 -39.752471924
+v 0.892202377 15.374711037 -40.959449768
+v 2.083126068 16.884586334 -38.810966492
+v 18.820676804 15.026430130 -38.775352478
+v 18.866195679 15.242951393 -39.045677185
+v 20.609476089 15.242951393 -40.444480896
+v 18.866195679 15.381684303 -39.045677185
+v 20.609476089 15.381684303 -40.444480896
+v 18.432121277 14.219081879 -39.476325989
+v 18.284229279 14.662881851 -41.119606018
+v 18.560924530 13.729486465 -40.620433807
+v 18.173898697 14.267008781 -41.318649292
+v 17.834285736 15.072572708 -40.554851532
+v 18.743295670 14.116405487 -39.873195648
+v 18.184436798 14.941126823 -40.881404877
+v 18.773887634 13.952214241 -40.236244202
+v 18.259162903 13.593063354 -40.746593475
+v 17.406908035 15.435887337 -41.325855255
+v 17.773792267 15.304441452 -41.622222900
+v 16.470603943 15.435888290 -40.828010559
+v 15.970950127 15.672584534 -41.728263855
+v 15.549583435 15.541138649 -41.530700684
+v 16.083345413 14.277850151 -40.150325775
+v 16.690469742 13.975436211 -39.056442261
+v 16.184612274 14.678532600 -39.967868805
+v 15.694966316 14.590011597 -40.850086212
+v 15.786183357 15.017166138 -40.685733795
+v 17.000125885 14.116407394 -38.917198181
+v 16.440719604 14.941128731 -39.925106049
+v 17.890331268 15.026432037 -38.270202637
+v 17.636901855 15.381685257 -38.374713898
+v 17.636901855 15.242953300 -38.374713898
+v 17.501281738 14.220699310 -38.970996857
+v 16.897548676 15.073310852 -40.058773041
+v 17.384096146 13.593065262 -40.272407532
+v 16.515522003 13.593065262 -39.790332794
+v 16.181930542 14.013491631 -40.391376495
+v 17.881778717 14.979496956 -41.845649719
+v 17.050506592 14.013492584 -40.873451233
+v 17.925899506 14.013489723 -41.347816467
+v 16.688812256 14.319040298 -41.516834259
+v 16.481632233 13.749273300 -39.432716370
+v 15.819142342 14.319043159 -41.045024872
+v 16.029674530 15.304443359 -40.665699005
+v 15.332825661 15.202938080 -41.502567291
+v 15.443385124 14.504489899 -41.722049713
+v 15.291101456 14.795266151 -41.577743530
+v 20.731946945 15.026430130 -40.315002441
+v 20.731946945 10.354034424 -40.315002441
+v 18.775318146 9.998181343 -40.233661652
+v 18.742792130 9.998181343 -39.874103546
+v 18.820676804 10.354034424 -38.775352478
+v 16.999622345 9.998181343 -38.918109894
+v 16.690242767 9.998181343 -39.056854248
+v 18.432167053 10.354040146 -39.476242065
+v 17.501123428 10.354027748 -38.971282959
+v 17.890331268 10.354028702 -38.270202637
+v 20.609426498 9.998181343 -40.444320679
+v 18.883455276 9.998181343 -39.056011200
+v 18.560031891 9.998181343 -39.639484406
+v 18.883455276 10.109926224 -39.056011200
+v 20.609426498 10.109925270 -40.444320679
+v 18.560031891 10.109930038 -39.639484406
+v 18.259164810 9.998181343 -40.746593475
+v 18.560661316 9.998181343 -40.620910645
+v 16.515522003 9.998181343 -39.790332794
+v 17.384096146 9.998181343 -40.272407532
+v 17.295192719 10.109919548 -38.948501587
+v 17.295192719 9.998066902 -38.948501587
+v 17.619159698 10.109919548 -38.365627289
+v 17.619159698 9.998067856 -38.365627289
+v 16.481809616 9.998181343 -39.432395935
+v 13.603816986 9.998181343 -45.036472321
+v 6.109062672 9.998181343 -34.698329926
+v 6.673092842 15.026519775 -32.725341797
+v 6.717516899 15.243041992 -32.997402191
+v 6.717516899 15.381774902 -32.997402191
+v 6.672841549 10.354034424 -32.725624084
+v 6.734807014 10.109926224 -33.007129669
+v 6.627419472 9.998181343 -34.183063507
+v 6.595716476 9.998181343 -33.821502686
+v 6.734807014 9.998067856 -33.007129669
+v 6.412554264 9.998181343 -34.570194244
+v 23.172214508 15.242951393 -43.876388550
+v 23.330167770 15.026430130 -43.793838501
+v 23.172214508 15.381684303 -43.876388550
+v 23.330167770 10.354034424 -43.793838501
+v 23.172218323 10.109925270 -43.876220703
+v 23.172218323 9.998180389 -43.876220703
+v 15.382289886 9.998180389 -46.354846954
+v 24.547792435 15.242951393 -47.933521271
+v 24.724452972 15.026430130 -47.909973145
+v 24.547792435 15.381684303 -47.933521271
+v 23.586244583 13.975434303 -48.664596558
+v 22.335172653 14.277847290 -48.664596558
+v 23.155904770 13.749271393 -48.664596558
+v 24.053865433 14.220697403 -49.331924438
+v 22.694572449 14.941862106 -48.867359161
+v 23.860460281 14.118021011 -48.867359161
+v 22.543849945 14.678530693 -48.664596558
+v 22.810340881 15.073307991 -49.331924438
+v 24.638927460 15.383560181 -49.161056519
+v 24.638927460 15.244828224 -49.161056519
+v 24.854907990 15.028306961 -49.331924438
+v 21.930564880 15.435887337 -49.331924438
+v 20.900951385 15.672581673 -49.331924438
+v 22.856441498 13.593063354 -49.867401123
+v 22.856443405 13.593063354 -48.867359161
+v 22.163200378 14.013489723 -48.867359161
+v 22.163200378 14.013488770 -49.867397308
+v 21.415620804 14.319040298 -48.867359161
+v 21.415620804 14.319040298 -49.867397308
+v 21.534858704 14.590009689 -48.664596558
+v 21.722827911 15.017164230 -48.664596558
+v 20.788616180 15.202935219 -48.664596558
+v 21.849243164 15.304441452 -48.867359161
+v 20.859943390 15.541136742 -48.867359161
+v 19.856441498 15.245204926 -48.664596558
+v 19.856443405 15.609466553 -48.867359161
+v 19.856559753 15.740912437 -49.331924438
+v 20.641313553 14.504487991 -49.867401123
+v 20.641313553 14.504487991 -48.867359161
+v 20.702638626 14.795264244 -48.664596558
+v 19.856433868 14.566658020 -48.867359161
+v 19.856433868 14.566658020 -49.867397308
+v 19.856437683 14.858480453 -48.664596558
+v 19.065740585 14.504487991 -49.867397308
+v 19.065740585 14.504487991 -48.867359161
+v 19.006483078 14.785190582 -48.664596558
+v 18.922229767 15.184299469 -48.664596558
+v 23.156269073 9.998180389 -48.664596558
+v 22.856441498 9.998180389 -48.867359161
+v 16.856441498 9.998180389 -48.867359161
+v 16.600349426 9.998180389 -48.664596558
+v 16.856441498 9.998178482 -49.867397308
+v 22.856449127 9.998178482 -49.867393494
+v 24.547851563 10.109925270 -47.933364868
+v 24.547851563 9.998180389 -47.933364868
+v 24.724452972 10.354034424 -47.909973145
+v 23.585773468 9.998180389 -48.664596558
+v 23.859268188 9.998180389 -48.867359161
+v 24.854885101 10.354028702 -49.331924438
+v 24.054103851 10.354027748 -49.331924438
+v 24.638816833 10.109920502 -49.140953064
+v 24.638816833 9.998180389 -49.140953064
+v 23.973905563 10.109919548 -49.140953064
+v 23.973905563 9.998180389 -49.140953064
+v 15.350305557 9.998180389 -45.994308472
+v 15.059673309 14.566659927 -42.413398743
+v 16.311960220 14.504489899 -42.204124451
+v 15.930086136 14.566658020 -42.885616302
+v 15.549570084 14.504487991 -43.572086334
+v 14.678782463 14.504489899 -43.099658966
+v 16.804738998 14.566658020 -43.370445251
+v 17.188076019 14.504487991 -42.678886414
+v 16.907741547 15.672581673 -42.226379395
+v 17.294172287 15.541136742 -42.487483978
+v 17.434993744 15.184299469 -42.651672363
+v 16.398359299 15.740912437 -43.145328522
+v 16.804733276 15.609466553 -43.370452881
+v 16.982080460 14.858480453 -43.468750000
+v 17.394145966 14.785190582 -42.725360870
+v 16.982078552 15.245204926 -43.468750000
+v 17.798515320 14.589397430 -41.995861053
+v 17.563465118 14.319040298 -42.001663208
+v 16.571832657 14.795264244 -44.208854675
+v 16.318229675 15.541136742 -44.248130798
+v 16.530149460 15.202935219 -44.284049988
+v 15.892028809 15.672581673 -44.058773041
+v 15.392861366 15.435887337 -44.959293365
+v 16.077236176 15.017164230 -45.101131439
+v 15.838605881 15.304441452 -45.113391876
+v 15.057744980 15.609468460 -42.416015625
+v 15.464122772 15.740915298 -42.641433716
+v 14.572686195 15.541138649 -43.290817261
+v 14.954242706 15.672584534 -43.560108185
+v 14.092594147 15.304443359 -44.155822754
+v 14.454587936 15.435888290 -44.460357666
+v 14.880453110 14.858482361 -42.317623138
+v 14.880453110 15.245207787 -42.317619324
+v 14.427095413 15.184301376 -43.134456635
+v 14.467983246 14.785192490 -43.060787201
+v 14.303024292 14.319043159 -43.776679993
+v 14.063219070 14.589399338 -43.790069580
+v 15.171600342 14.319043159 -44.258758545
+v 16.424221039 14.504487991 -44.056915283
+v 14.808811188 14.013492584 -44.912406921
+v 16.048828125 14.319040298 -44.734138489
+v 16.168361664 14.590009689 -44.936729431
+v 13.682369232 14.941864014 -44.894939423
+v 13.979873657 14.979497910 -43.940235138
+v 13.577028275 14.662883759 -44.666057587
+v 13.687467575 14.267010689 -44.467075348
+v 13.940235138 14.013491631 -44.430332184
+v 13.603816032 13.593065262 -45.036472321
+v 14.966337204 15.073307991 -45.728763580
+v 15.173831940 13.975434303 -46.730911255
+v 15.780364990 14.277847290 -45.636699677
+v 15.382465363 13.749271393 -46.354526520
+v 15.686395645 14.013489723 -45.387985229
+v 15.350305557 13.593063354 -45.994308472
+v 14.863548279 14.118021011 -46.872444153
+v 15.679196358 14.678530693 -45.819213867
+v 14.363464355 14.220697403 -46.816375732
+v 15.428781509 14.941862106 -45.852733612
+v 14.475652695 13.593063354 -45.509483337
+v 17.776258469 15.435887337 -49.331924438
+v 16.894725800 15.072572708 -49.331924438
+v 18.846897125 15.541136742 -48.867359161
+v 18.805873871 15.672581673 -49.331924438
+v 17.857597351 15.304441452 -48.867359161
+v 18.000658035 14.979496956 -48.664596558
+v 18.172405243 14.589397430 -48.664596558
+v 18.291433334 14.319040298 -48.867359161
+v 18.291431427 14.319040298 -49.867397308
+v 17.398113251 14.267008781 -48.664596558
+v 16.856441498 13.593063354 -48.867359161
+v 17.543853760 14.013489723 -48.867359161
+v 17.170534134 14.662881851 -48.664596558
+v 17.543853760 14.013488770 -49.867397308
+v 15.661590576 14.219081879 -49.331924438
+v 17.010580063 14.941126823 -48.867359161
+v 15.857839584 14.116405487 -48.867359161
+v 16.160539627 13.952214241 -48.664596558
+v 16.599805832 13.729486465 -48.664596558
+v 16.856441498 13.593063354 -49.867397308
+v 13.975111961 15.028306961 -47.516983032
+v 14.229267120 15.383560181 -47.410919189
+v 14.229267120 15.244828224 -47.410919189
+v 14.711436272 15.244828224 -48.280220032
+v 14.711436272 15.383560181 -48.280220032
+v 14.464689255 15.028306961 -48.408912659
+v 14.860130310 15.026430130 -49.331924438
+v 15.074495316 15.242951393 -49.161056519
+v 15.074495316 15.381684303 -49.161056519
+v 15.661497116 10.354040146 -49.331924438
+v 14.464710236 10.354028702 -48.408901215
+v 14.860130310 10.354034424 -49.331924438
+v 13.975122452 10.354028702 -47.516960144
+v 14.472393036 9.998181343 -45.518547058
+v 14.864127159 9.998180389 -46.871398926
+v 15.174060822 9.998180389 -46.730503082
+v 14.363349915 10.354027748 -46.816581726
+v 14.569259644 10.109919548 -46.839023590
+v 14.246905327 10.109920502 -47.420566559
+v 14.569259644 9.998180389 -46.839023590
+v 14.246905327 9.998180389 -47.420566559
+v 15.858880043 9.998180389 -48.867359161
+v 16.157585144 9.998180389 -48.664596558
+v 14.709774971 10.109920502 -48.279747009
+v 14.709774971 9.998180389 -48.279747009
+v 15.742279053 10.109930038 -49.140953064
+v 15.742279053 9.998180389 -49.140953064
+v 15.075164795 10.109925270 -49.140953064
+v 15.075164795 9.998180389 -49.140953064
+v 13.039787292 15.026519775 -47.009456635
+v 12.995363235 15.381774902 -46.737400055
+v 12.995363235 15.243041992 -46.737400055
+v 13.428371429 14.219083786 -46.309329987
+v 14.026791573 15.072574615 -45.231132507
+v 13.116581917 14.118022919 -45.914340973
+v 13.086893082 13.952216148 -45.549156189
+v 13.300060272 13.729488373 -45.165081024
+v 13.300325394 9.998181343 -45.164604187
+v 3.197357178 9.998181343 -39.944465637
+v 13.085459709 9.998181343 -45.551734924
+v 3.231069088 9.998181343 -40.302406311
+v 13.428532600 10.354040146 -46.309043884
+v 13.117163658 9.998181343 -45.913299561
+v 13.040038109 10.354034424 -47.009178162
+v 13.299910545 10.109930038 -46.146965027
+v 13.299910545 9.998067856 -46.146965027
+v 12.978073120 9.998067856 -46.727668762
+v 12.978073120 10.109926224 -46.727668762
+v 4.746542931 15.073307991 -34.006038666
+v 6.284508705 14.219083786 -33.425472260
+v 5.686088085 15.072574615 -34.503669739
+v 6.030510902 14.941864014 -34.839862823
+v 5.258291245 15.435888290 -35.274444580
+v 6.596298218 14.118022919 -33.820461273
+v 5.237226486 13.593063354 -34.225318909
+v 4.904067993 14.013492584 -34.822391510
+v 6.109063148 13.593065262 -34.698329926
+v 6.625987053 13.952216148 -34.185646057
+v 6.135851860 14.662883759 -35.068740845
+v 6.025412083 14.267010689 -35.267723083
+v 6.412818909 13.729488373 -34.569721222
+v 5.772644043 14.013491631 -35.304470062
+v 2.328782558 9.998181343 -39.462390900
+v 1.152217865 9.998181343 -39.113891602
+v 4.330589294 9.998180389 -33.379955292
+v 4.362574100 9.998180389 -33.740489960
+v 5.237226486 9.998180389 -34.225318909
+v 6.284347057 10.354040146 -33.425758362
+v 5.349416256 14.220697403 -32.918426514
+v 6.412969112 9.998067856 -33.587833405
+v 6.412969112 10.109930038 -33.587833405
+v 5.001443863 15.244828224 -31.454582214
+v 5.001443863 15.383560181 -31.454582214
+v 5.483613491 15.383560181 -32.323879242
+v 5.483613491 15.244828224 -32.323879242
+v 5.737767696 15.028306961 -32.217819214
+v 5.248190880 15.028306961 -31.325889587
+v 4.852749825 15.026430130 -30.402873993
+v 4.638384819 15.242951393 -30.573743820
+v 4.638384819 15.381684303 -30.573743820
+v 4.051288605 14.219081879 -30.402873993
+v 2.818153858 15.072572708 -30.402875900
+v 2.702300072 14.941126823 -30.867439270
+v 1.936620712 15.435887337 -30.402873993
+v 1.855282784 15.304441452 -30.867439270
+v 2.542345047 14.662881851 -31.070205688
+v 1.712222099 14.979496956 -31.070205688
+v 3.855039597 14.116405487 -30.867441177
+v 3.552340508 13.952214241 -31.070205688
+v 2.856437206 13.593063354 -30.867441177
+v 2.314766884 14.267008781 -31.070205688
+v 3.113073349 13.729486465 -31.070205688
+v 2.856437206 13.593063354 -29.867403030
+v 2.169026375 14.013488770 -29.867403030
+v 0.907005310 15.672581673 -30.402873993
+v 0.865982056 15.541136742 -30.867441177
+v 0.790650368 15.184299469 -31.070205688
+v -0.143679619 15.740912437 -30.402873993
+v -0.143562317 15.609466553 -30.867441177
+v -0.143560410 15.245204926 -31.070205688
+v 1.540474892 14.589397430 -31.070205688
+v 2.169026375 14.013489723 -30.867439270
+v 1.421446800 14.319040298 -30.867441177
+v 1.421447754 14.319040298 -29.867403030
+v 0.706397057 14.785190582 -31.070205688
+v 0.647138596 14.504487991 -30.867441177
+v 0.647139549 14.504487991 -29.867403030
+v 4.320018768 15.435887337 -34.775508881
+v 3.820850372 15.672581673 -35.676029205
+v 3.874273777 15.304441452 -34.621406555
+v 3.394650459 15.541136742 -35.486671448
+v 4.284097672 14.941862106 -33.882064819
+v 4.849331856 14.118021011 -32.862358093
+v 4.033683300 14.678530693 -33.915588379
+v 4.026483536 14.013489723 -34.346813202
+v 4.330414295 13.749271393 -33.380271912
+v 3.932514668 14.277847290 -34.098102570
+v 4.362574577 13.593063354 -33.740489960
+v 4.539047241 13.975434303 -33.003890991
+v 3.182729244 15.202935219 -35.450752258
+v 3.635644913 15.017164230 -34.633670807
+v 3.141046047 14.795264244 -35.525947571
+v 3.544517040 14.590009689 -34.798072815
+v 3.664050102 14.319040298 -35.000663757
+v 4.051383018 10.354040146 -30.402873993
+v 4.852749825 10.354034424 -30.402873993
+v 5.248169422 10.354028702 -31.325901031
+v 5.737757683 10.354028702 -32.217842102
+v 3.112530708 9.998180389 -31.070205688
+v 2.856438637 9.998180389 -30.867443085
+v 2.856437206 9.998180389 -29.867403030
+v 3.853999615 9.998180389 -30.867441177
+v 3.555293560 9.998180389 -31.070205688
+v 4.623218060 9.998180389 -30.557798386
+v 5.003104687 9.998180389 -31.455053329
+v 5.003104687 10.109920502 -31.455053329
+v 4.623218060 10.109920502 -30.557798386
+v 4.848752975 9.998180389 -32.863403320
+v 4.538818359 9.998180389 -33.004299164
+v 3.970601082 10.109930038 -30.593849182
+v 3.970601082 9.998180389 -30.593849182
+v 5.465974808 10.109920502 -32.314231873
+v 5.465974808 9.998180389 -32.314231873
+v 5.143620014 10.109919548 -32.895774841
+v 5.349530697 10.354027748 -32.918220520
+v 5.143620014 9.998180389 -32.895774841
+v 1.152847290 10.109930038 -40.095317841
+v 1.152847290 9.998181343 -40.095317841
+v 0.970087051 9.998181343 -39.860694885
+v 1.280713081 10.354040146 -40.258556366
+v 2.328783035 13.593065262 -39.462390900
+v 1.453714371 9.998181343 -38.988208771
+v 1.453716278 13.593063354 -38.988208771
+v 4.248755932 15.740915298 -37.093368530
+v 4.655133724 15.609468460 -37.318782806
+v 3.741929054 15.672584534 -38.006538391
+v 5.140193939 15.541138649 -36.443981171
+v 4.758635998 15.672584534 -36.174694061
+v 2.805136681 15.672581673 -37.508422852
+v 3.314519405 15.740912437 -36.589473724
+v 4.163295269 15.541138649 -38.204101563
+v 5.620284557 15.304443359 -35.578979492
+v 2.908140182 14.566658020 -36.364356995
+v 3.288658142 14.504487991 -35.677886963
+v 4.541278839 14.319043159 -35.476043701
+v 4.165520668 14.504489899 -36.153064728
+v 5.733006477 14.979497910 -35.794563293
+v 5.285783291 15.184301376 -36.600345612
+v 5.649660110 14.589399338 -35.944732666
+v 5.244895458 14.785192490 -36.674011230
+v 5.409854889 14.319043159 -35.958118439
+v 4.380053520 15.202938080 -38.232234955
+v 4.832426071 14.858482361 -37.417175293
+v 4.421778202 14.795266151 -38.157058716
+v 4.653206348 14.566659927 -37.321403503
+v 4.832426071 15.245207787 -37.417179108
+v 5.034096718 14.504489899 -36.635139465
+v 3.788245678 14.566660881 -36.817073822
+v 2.908144951 15.609466553 -36.364349365
+v 2.730801582 15.245204926 -36.266048431
+v 2.730799198 14.858480453 -36.266052246
+v 2.524804115 14.504487991 -37.055912018
+v 3.399456501 14.504487991 -37.540740967
+v 4.269494057 14.504489899 -38.012752533
+v 3.025161266 14.319043159 -38.207698822
+v 2.305970669 15.435887337 -38.408943176
+v 1.939085960 15.304441452 -38.112579346
+v 2.418706894 15.541136742 -37.247318268
+v 1.831100464 14.979496956 -37.889152527
+v 2.277885914 15.184299469 -37.083129883
+v 1.428648949 14.662881851 -38.615196228
+v 2.318733692 14.785190582 -37.009437561
+v 2.149413109 14.319040298 -37.733139038
+v 1.786979675 14.013489723 -38.386985779
+v 1.914364815 14.589397430 -37.738937378
+v 1.538980484 14.267008781 -38.416152954
+v -0.143557549 14.858480453 -31.070205688
+v -0.143554688 14.566658020 -30.867439270
+v -0.143553734 14.566658020 -29.867403030
+v -0.928434372 14.504487991 -29.867401123
+v -0.928434372 14.504487991 -30.867439270
+v -1.075737000 15.202935219 -31.070205688
+v -0.989757538 14.795264244 -31.070205688
+v -1.147062302 15.541136742 -30.867441177
+v -1.188070297 15.672581673 -30.402873993
+v -2.217683792 15.435887337 -30.402873993
+v -2.136363029 15.304441452 -30.867439270
+v -2.009947777 15.017164230 -31.070205688
+v -1.821979523 14.590009689 -31.070205688
+v -1.702740669 14.319040298 -29.867401123
+v -1.702741623 14.319040298 -30.867439270
+v -2.981693268 14.941862106 -30.867439270
+v -2.830970764 14.678530693 -31.070205688
+v -3.097460747 15.073307991 -30.402873993
+v -3.459335327 15.242951393 -35.858413696
+v -3.459335327 15.381684303 -35.858413696
+v -4.834913254 15.381684303 -31.801279068
+v -4.834913254 15.242951393 -31.801279068
+v -5.011572838 15.026430130 -31.824825287
+v -3.617288589 15.026430130 -35.940959930
+v -2.622293472 14.277847290 -31.070205688
+v -2.450321198 14.013489723 -30.867439270
+v -2.450321198 14.013488770 -29.867401123
+v -3.443025589 13.749271393 -31.070205688
+v -3.143564224 13.593063354 -30.867439270
+v -3.143561363 13.593063354 -29.867401123
+v -3.873365402 13.975434303 -31.070205688
+v -4.340984344 14.220697403 -30.402873993
+v -4.147581100 14.118021011 -30.867439270
+v -4.926047325 15.244828224 -30.573741913
+v -4.926047325 15.383560181 -30.573741913
+v -5.142028809 15.028306961 -30.402873993
+v -3.143563271 9.998180389 -30.867441177
+v -3.459339142 9.998180389 -35.858577728
+v -3.443388939 9.998180389 -31.070205688
+v -3.143561363 9.998180389 -29.867403030
+v -3.459339142 10.109925270 -35.858577728
+v -4.834972382 10.109925270 -31.801433563
+v -5.011572838 10.354034424 -31.824825287
+v -3.617288589 10.354034424 -35.940959930
+v -4.834972382 9.998180389 -31.801433563
+v -3.872895241 9.998180389 -31.070205688
+v -4.146388054 9.998180389 -30.867439270
+v -5.142004013 10.354028702 -30.402873993
+v -4.341223717 10.354027748 -30.402873993
+v -4.925933838 10.109920502 -30.593847275
+v -4.261025429 10.109919548 -30.593847275
+v -4.261025429 9.998180389 -30.593847275
+v -4.925933838 9.998180389 -30.593847275
+v 0.937560081 9.998181343 -39.501136780
+v -0.992921829 9.998181343 -39.379798889
+v -0.992971420 15.242951393 -39.379638672
+v -0.992971420 15.381684303 -39.379638672
+v -1.115442276 15.026430130 -39.509117126
+v -1.115442276 10.354034424 -39.509117126
+v -0.992921829 10.109925270 -39.379798889
+v 3.231245995 13.749273300 -40.302085876
+v 3.022637367 9.998181343 -40.677947998
+v 3.022408962 13.975436211 -40.678356171
+v 3.197357178 13.593065262 -39.944465637
+v 1.822546959 15.026432037 -41.464599609
+v 2.075977325 15.242953300 -41.360088348
+v 2.075977325 15.381685257 -41.360088348
+v 2.713257313 9.998181343 -40.816692352
+v 2.093720436 9.998067856 -41.369171143
+v 2.093720436 10.109919548 -41.369171143
+v 1.822546959 10.354028702 -41.464599609
+v 3.242274284 15.435888290 -38.906787872
+v 1.528442383 14.941126823 -38.853397369
+v 1.878594398 15.072572708 -39.179950714
+v 2.662373066 14.013492584 -38.861351013
+v 3.530948639 14.013491631 -39.343425751
+v 3.893736839 14.319043159 -38.689773560
+v 3.629533768 14.277850151 -39.584476471
+v 2.712753773 14.116407394 -40.817600250
+v 3.528266907 14.678532600 -39.766933441
+v 3.683204651 15.304443359 -39.069103241
+v 2.815331459 15.073310852 -39.676025391
+v 3.926695824 15.017166138 -39.049068451
+v 3.272159576 14.941128731 -39.809696198
+v 4.017912865 14.590011597 -38.884716034
+v 1.280758858 14.219081879 -40.258476257
+v 2.211596489 14.220699310 -40.763801575
+v 0.938992500 13.952214241 -39.498558044
+v 0.969583511 14.116405487 -39.861606598
+v 1.151953697 13.729486465 -39.114364624
+v 0.846682549 15.381684303 -40.689121246
+v 0.846682549 15.242951393 -40.689121246
+v 0.892202377 15.026430130 -40.959449768
+v 0.892202377 10.354034424 -40.959449768
+v 2.211755276 10.354027748 -40.763519287
+v 0.829423904 9.998181343 -40.678791046
+v 0.829423904 10.109926224 -40.678791046
+v 2.417686462 10.109919548 -40.786300659
+v 2.417686462 9.998066902 -40.786300659
+v 19.847118378 22.273571014 -69.295516968
+v 19.847118378 22.264093399 -64.533531189
+v 18.564567566 22.177253723 -64.533531189
+v 18.564567566 22.186729431 -69.295516968
+v 17.307264328 21.876436234 -64.533531189
+v 17.307264328 21.885911942 -69.295516968
+v 16.230789185 21.414699554 -64.533531189
+v 16.230791092 21.409341812 -69.304817200
+v 14.850788116 20.365238190 -64.533531189
+v 14.851180077 20.368175507 -69.304817200
+v 18.564567566 21.380252838 -62.923557281
+v 19.847118378 21.467092514 -62.923557281
+v 17.307264328 21.079437256 -62.923561096
+v 16.230789185 20.617698669 -62.923561096
+v 14.850788116 19.568237305 -62.923557281
+v 17.307264328 20.073871613 -60.915550232
+v 16.230789185 18.607959747 -58.926403046
+v 16.230789185 19.612133026 -60.915550232
+v 17.307264328 19.069698334 -58.926403046
+v 14.850787163 17.558500290 -58.926403046
+v 14.850787163 18.562671661 -60.915550232
+v 18.564567566 20.374689102 -60.915550232
+v 19.847118378 20.461528778 -60.915550232
+v 18.564565659 19.370515823 -58.926403046
+v 19.847118378 19.457355499 -58.926403046
+v 24.845911026 20.361202240 -69.304733276
+v 24.845569611 20.367290497 -64.533531189
+v 23.454578400 21.415634155 -64.533531189
+v 23.454578400 21.425109863 -69.295516968
+v 22.380249023 21.876436234 -64.533531189
+v 22.380249023 21.885911942 -69.295516968
+v 21.122945786 22.177253723 -64.533531189
+v 21.122945786 22.186729431 -69.295516968
+v 23.454578400 20.618633270 -62.923557281
+v 24.845569611 19.570289612 -62.923557281
+v 22.380249023 21.079435349 -62.923557281
+v 21.122945786 21.380252838 -62.923557281
+v 21.122945786 20.374689102 -60.915550232
+v 22.380249023 20.073871613 -60.915550232
+v 21.122945786 19.370515823 -58.926403046
+v 22.380249023 19.069698334 -58.926403046
+v 24.845569611 18.564725876 -60.915550232
+v 23.454578400 18.608894348 -58.926403046
+v 23.454578400 19.613067627 -60.915550232
+v 24.845569611 17.560552597 -58.926403046
+v 17.307264328 18.084199905 -56.921527863
+v 16.230787277 16.620403290 -54.928943634
+v 16.230789185 17.622463226 -56.921527863
+v 17.307264328 17.082141876 -54.928943634
+v 14.850786209 15.570942879 -54.928943634
+v 14.850786209 16.573001862 -56.921527863
+v 18.564565659 18.385017395 -56.921527863
+v 19.847116470 18.471858978 -56.921527863
+v 18.564565659 17.382957458 -54.928943634
+v 19.847116470 17.469799042 -54.928943634
+v 16.230787277 16.428209305 -54.486366272
+v 17.307262421 16.889945984 -54.486366272
+v 14.850786209 15.378747940 -54.486366272
+v 17.307262421 16.884588242 -50.361312866
+v 16.230787277 16.422851563 -50.361312866
+v 14.851177216 15.381685257 -50.361312866
+v 19.847116470 17.272245407 -50.361312866
+v 18.564565659 17.190763474 -54.486366272
+v 19.847116470 17.277603149 -54.486366272
+v 18.564565659 17.185403824 -50.361312866
+v 22.380247116 18.084199905 -56.921527863
+v 21.122945786 17.382957458 -54.928943634
+v 21.122945786 18.385017395 -56.921527863
+v 22.380247116 17.082139969 -54.928943634
+v 23.454578400 17.623397827 -56.921527863
+v 24.845567703 16.575054169 -56.921527863
+v 23.454578400 16.621337891 -54.928943634
+v 24.845569611 15.572996140 -54.928943634
+v 22.380247116 16.884588242 -50.361312866
+v 21.122943878 17.190763474 -54.486366272
+v 22.380247116 16.889945984 -54.486366272
+v 21.122943878 17.185403824 -50.361312866
+v 23.454576492 16.429143906 -54.486366272
+v 24.845567703 15.380802155 -54.486366272
+v 24.845907211 15.374712944 -50.361396790
+v 23.454576492 16.423786163 -50.361312866
+v 15.065155029 20.229444504 -69.133949280
+v 15.065154076 20.372211456 -64.533569336
+v 15.065155029 20.233478546 -64.533569336
+v 15.065155029 20.368175507 -69.133949280
+v 14.850788116 20.026432037 -69.296829224
+v 14.850788116 20.016956329 -64.533531189
+v 17.388771057 19.267009735 -68.629501343
+v 17.991315842 19.979499817 -68.629501343
+v 17.161193848 19.662883759 -68.629501343
+v 16.885383606 20.072574615 -69.296829224
+v 17.001237869 19.941129684 -68.832267761
+v 17.766918182 20.435890198 -69.296829224
+v 15.848499298 19.116405487 -68.832267761
+v 17.848257065 20.304443359 -68.832267761
+v 16.151197433 18.952217102 -68.629501343
+v 15.652250290 19.219083786 -69.296829224
+v 17.534513474 19.013490677 -69.832305908
+v 17.534511566 19.014816284 -68.830947876
+v 16.847101212 18.593065262 -68.832267761
+v 16.847101212 18.593063354 -69.832305908
+v 16.590465546 18.729488373 -68.629501343
+v 18.837556839 20.541137695 -68.832267761
+v 18.912887573 20.184299469 -68.629501343
+v 18.796533585 20.672582626 -69.296829224
+v 19.847219467 20.740915298 -69.296829224
+v 19.847103119 20.609468460 -68.832267761
+v 19.847099304 20.245208740 -68.629501343
+v 18.997142792 19.785192490 -68.629501343
+v 19.056400299 19.504489899 -69.832305908
+v 19.056400299 19.504489899 -68.832267761
+v 18.282091141 19.320365906 -68.830947876
+v 18.163064957 19.589399338 -68.629501343
+v 19.847097397 19.858482361 -68.629501343
+v 19.847093582 19.566659927 -69.832305908
+v 19.847093582 19.566659927 -68.832267761
+v 18.282093048 19.319042206 -69.832305908
+v 23.146928787 14.998180389 -68.629501343
+v 24.614154816 15.003443718 -64.519569397
+v 23.576435089 14.998180389 -68.629501343
+v 22.847103119 14.998180389 -68.832260132
+v 15.061660767 15.002688408 -64.519554138
+v 15.652154922 15.355363846 -69.295516968
+v 16.847101212 14.998180389 -69.832305908
+v 16.847099304 14.998180389 -68.830947876
+v 15.849536896 14.998180389 -68.830947876
+v 16.591007233 14.998180389 -68.628189087
+v 16.148244858 14.998180389 -68.628189087
+v 14.850786209 15.355358124 -69.295516968
+v 14.850786209 15.345883369 -64.533531189
+v 15.065820694 14.998180389 -69.104545593
+v 15.065818787 15.101775169 -64.533576965
+v 15.065820694 15.111249924 -69.104545593
+v 15.732936859 14.998180389 -69.104545593
+v 15.732936859 15.111255646 -69.104545593
+v 15.065154076 19.575210571 -62.923599243
+v 15.065155029 19.436477661 -62.923599243
+v 14.850788116 19.219955444 -62.923557281
+v 15.065153122 18.569644928 -60.915592194
+v 15.065154076 18.430913925 -60.915592194
+v 14.850787163 18.214391708 -60.915550232
+v 14.850784302 13.543317795 -60.915550232
+v 14.850785255 14.548881531 -62.923561096
+v 15.061659813 14.802688599 -64.116996765
+v 15.065818787 14.304773331 -62.923606873
+v 15.061660767 14.602687836 -63.719551086
+v 15.061660767 14.802688599 -64.519554138
+v 15.061659813 14.602687836 -64.116996765
+v 15.061660767 14.402688980 -63.319549561
+v 15.061660767 14.402688980 -63.719551086
+v 15.061659813 14.202688217 -62.919067383
+v 15.061660767 14.202688217 -63.319549561
+v 15.061660767 14.002689362 -62.516796112
+v 15.061660767 14.002689362 -62.919067383
+v 15.061660767 13.802688599 -62.117893219
+v 15.061660767 13.802688599 -62.516796112
+v 15.065818787 13.299209595 -60.915596008
+v 15.061663628 13.597527504 -61.721931458
+v 15.061662674 13.597527504 -62.118125916
+v 15.061663628 13.397527695 -61.326660156
+v 15.061663628 13.397527695 -61.721931458
+v 15.061664581 13.197527885 -60.916912079
+v 15.061663628 13.197528839 -61.326660156
+v 14.850784302 12.539145470 -58.926403046
+v 14.850787163 17.210218430 -58.926403046
+v 15.065153122 17.565471649 -58.926445007
+v 15.065154076 17.426740646 -58.926445007
+v 15.061664581 12.997529030 -60.527023315
+v 15.065818787 12.295036316 -58.926448822
+v 15.061664581 12.597529411 -59.705848694
+v 15.061664581 12.797529221 -60.103534698
+v 15.061664581 12.997528076 -60.916912079
+v 15.061664581 12.797529221 -60.527023315
+v 15.061664581 12.597529411 -60.103534698
+v 24.614154816 14.203443527 -62.919086456
+v 24.614154816 14.203121185 -63.320079803
+v 24.614154816 13.803443909 -62.117912292
+v 24.614154816 13.803443909 -62.516815186
+v 24.614154816 14.003443718 -62.919086456
+v 24.614154816 14.003443718 -62.516815186
+v 24.614152908 13.598928452 -62.118114471
+v 24.614154816 14.803442955 -64.117019653
+v 24.614154816 14.603444099 -63.719570160
+v 24.614154816 14.403120995 -63.720081329
+v 24.614154816 14.603120804 -64.117134094
+v 24.614154816 14.803443909 -64.519569397
+v 24.614154816 14.403444290 -63.319568634
+v 24.614152908 12.998283386 -60.916931152
+v 24.614152908 13.198284149 -60.916931152
+v 24.614152908 13.198284149 -61.326679230
+v 24.614152908 13.398283005 -61.326679230
+v 24.614152908 13.398283005 -61.721950531
+v 24.614152908 13.598281860 -61.721950531
+v 24.614151001 12.798283577 -60.103549957
+v 24.614151001 12.598283768 -59.705867767
+v 15.061664581 12.397529602 -59.705848694
+v 24.614151001 12.598606110 -60.103549957
+v 24.614151001 12.798283577 -60.527042389
+v 15.061666489 12.197528839 -58.921619415
+v 24.614151001 12.998283386 -60.527042389
+v 24.614151001 12.198284149 -58.921638489
+v 24.614151001 12.398607254 -59.705860138
+v 20.779275894 20.202938080 -68.629501343
+v 20.891609192 20.672582626 -69.296829224
+v 20.850601196 20.541137695 -68.832267761
+v 21.839902878 20.304443359 -68.832267761
+v 21.921224594 20.435890198 -69.296829224
+v 21.713487625 20.017166138 -68.629501343
+v 22.685232162 19.941864014 -68.832267761
+v 20.693298340 19.795265198 -68.629501343
+v 20.631973267 19.504489899 -69.832305908
+v 21.406280518 19.319042206 -69.832305908
+v 20.631973267 19.504489899 -68.832267761
+v 21.525520325 19.590011597 -68.629501343
+v 22.153862000 19.013490677 -69.832305908
+v 21.406280518 19.319042206 -68.832267761
+v 22.534509659 19.678533554 -68.629501343
+v 22.325832367 19.277849197 -68.629501343
+v 22.153862000 19.013492584 -68.832267761
+v 24.629589081 20.235353470 -64.533569336
+v 24.629594803 20.368263245 -69.133865356
+v 24.629594803 20.229530334 -69.133865356
+v 24.629589081 20.374086380 -64.533569336
+v 24.845569611 20.018833160 -64.533531189
+v 24.845909119 20.013008118 -69.304733276
+v 22.801000595 20.073310852 -69.296829224
+v 23.851119995 19.118022919 -68.832267761
+v 23.576902390 18.975435257 -68.629501343
+v 24.044528961 19.220699310 -69.296829224
+v 23.146564484 18.749273300 -68.629501343
+v 22.847103119 18.593063354 -69.832305908
+v 22.847103119 18.593065262 -68.832267761
+v 23.849927902 14.998180389 -68.832260132
+v 24.629476547 14.984669685 -69.114028931
+v 23.964565277 14.998180389 -69.105857849
+v 22.847103119 14.998180389 -69.832305908
+v 23.964565277 15.109921455 -69.105857849
+v 24.044765472 15.354029655 -69.296829224
+v 24.629476547 15.109922409 -69.105857849
+v 24.845544815 15.354030609 -69.296829224
+v 24.845544815 15.344554901 -64.533531189
+v 24.629476547 15.100444794 -64.533576965
+v 24.845569611 19.221830368 -62.923557281
+v 24.845544815 14.547553062 -62.923557281
+v 24.845569611 18.216266632 -60.915550232
+v 24.629589081 18.432788849 -60.915592194
+v 24.629589081 19.438352585 -62.923599243
+v 24.629589081 19.577083588 -62.923599243
+v 24.629589081 18.571521759 -60.915592194
+v 24.629589081 17.428615570 -58.926445007
+v 24.629589081 17.567348480 -58.926445007
+v 24.629476547 14.303443909 -62.923603058
+v 24.845544815 13.541989326 -60.915550232
+v 24.629476547 13.297880173 -60.915596008
+v 24.845569611 17.212093353 -58.926403046
+v 24.845544815 12.537815094 -58.926403046
+v 24.629476547 12.293706894 -58.926448822
+v 15.065153122 16.441242218 -56.921569824
+v 14.850786209 15.222661972 -54.928943634
+v 14.850786209 16.224720001 -56.921527863
+v 15.065153122 15.439184189 -54.928985596
+v 15.065153122 15.577916145 -54.928985596
+v 15.065152168 16.579975128 -56.921569824
+v 15.061664581 12.397529602 -59.308055878
+v 14.850784302 11.553647041 -56.921527863
+v 15.061666489 10.997529984 -56.523735046
+v 15.063741684 11.196999550 -56.922222137
+v 15.065818787 11.309538841 -56.921573639
+v 15.061666489 11.397529602 -57.324699402
+v 15.061666489 11.597529411 -57.723960876
+v 15.061666489 11.397529602 -57.723960876
+v 15.061666489 11.197529793 -57.324699402
+v 15.061665535 10.997529984 -56.922870636
+v 15.061666489 11.997529030 -58.512027740
+v 15.061664581 12.197528839 -59.308055878
+v 15.061666489 11.997529030 -58.921619415
+v 15.061666489 11.797529221 -58.128948212
+v 15.061666489 11.797529221 -58.512027740
+v 15.061666489 11.597529411 -58.128948212
+v 14.850784302 10.551588058 -54.928943634
+v 15.065153122 15.246988297 -54.486324310
+v 14.850786209 15.030466080 -54.486366272
+v 14.850784302 10.359393120 -54.486366272
+v 15.065818787 10.307478905 -54.928993225
+v 15.061666489 10.797530174 -56.124694824
+v 15.061666489 10.597530365 -55.722717285
+v 15.061666489 10.797530174 -56.523735046
+v 15.061666489 10.597530365 -56.124694824
+v 15.061666489 10.397530556 -55.324447632
+v 15.061666489 10.397530556 -55.722717285
+v 15.063743591 10.195970535 -54.928028107
+v 15.061666489 10.197530746 -55.324447632
+v 15.061666489 9.997628212 -54.927124023
+v 15.065818787 10.002214432 -54.486320496
+v 15.065818787 10.115284920 -54.486320496
+v 24.614151001 11.798606873 -58.512046814
+v 24.614151001 11.998606682 -58.921596527
+v 24.614151001 12.398283958 -59.308078766
+v 24.614151001 12.198606491 -59.308071136
+v 24.614151001 11.998284340 -58.512046814
+v 24.614151001 11.798284531 -58.128967285
+v 24.614151001 11.398284912 -57.723983765
+v 24.614151001 11.598284721 -58.128967285
+v 24.614151001 11.598285675 -57.723983765
+v 24.614151001 11.398284912 -57.324714661
+v 24.614151001 11.198284149 -57.324714661
+v 24.614149094 11.198285103 -56.922889709
+v 24.614149094 10.798285484 -56.523754120
+v 24.614149094 10.998285294 -56.523754120
+v 24.614149094 10.798284531 -56.124717712
+v 24.614151001 10.998285294 -56.922889709
+v 24.614149094 10.598284721 -55.722736359
+v 24.614149094 10.598285675 -56.124717712
+v 24.614149094 9.997730255 -54.927211761
+v 24.614149094 10.398285866 -55.324470520
+v 24.614149094 10.198285103 -55.324470520
+v 24.622045517 10.002214432 -54.486320496
+v 24.614149094 10.398285866 -55.722736359
+v 24.614149094 10.198286057 -54.927082062
+v 15.065152168 15.385721207 -54.486324310
+v 15.065151215 15.242953300 -50.532180786
+v 15.065151215 15.381685257 -50.532180786
+v 14.850786209 15.026432037 -50.361312866
+v 16.120515823 13.975436211 -51.028869629
+v 17.371587753 14.277850151 -51.028869629
+v 16.550857544 13.749273300 -51.028869629
+v 15.848496437 14.116407394 -50.825691223
+v 17.162912369 14.678532600 -51.028869629
+v 17.001235962 14.941128731 -50.825691223
+v 17.534509659 14.013491631 -50.825691223
+v 16.847099304 13.593065262 -50.825691223
+v 16.847099304 13.593065262 -49.832305908
+v 17.534509659 14.013492584 -49.832305908
+v 15.652330399 14.220699310 -50.361396790
+v 16.896419525 15.073310852 -50.361396790
+v 17.983934402 15.017166138 -51.028869629
+v 17.848253250 15.304443359 -50.825691223
+v 17.776197433 15.435888290 -50.361396790
+v 18.837554932 15.541138649 -50.825691223
+v 18.805810928 15.672584534 -50.361396790
+v 18.918146133 15.202938080 -51.028869629
+v 19.850324631 14.858482361 -51.028869629
+v 19.850320816 15.245207787 -51.028869629
+v 19.850202560 15.740915298 -50.361396790
+v 19.850318909 15.609468460 -50.826107025
+v 19.004123688 14.795266151 -51.028869629
+v 19.847091675 14.566659927 -50.825691223
+v 19.056396484 14.504489899 -50.825691223
+v 18.171901703 14.590011597 -51.028869629
+v 19.056396484 14.504489899 -49.832302094
+v 18.282089233 14.319043159 -49.832305908
+v 19.847091675 14.566660881 -49.832305908
+v 18.282089233 14.319043159 -50.825691223
+v 23.106412888 9.998181343 -51.028869629
+v 23.549175262 9.998181343 -51.028869629
+v 22.847099304 9.998181343 -50.825691223
+v 16.847097397 9.998181343 -50.825691223
+v 16.847097397 9.998181343 -49.832302094
+v 16.550491333 9.998181343 -51.028869629
+v 16.120986938 9.998181343 -51.028869629
+v 15.849535942 9.998181343 -50.825691223
+v 15.065820694 9.998181343 -50.552104950
+v 14.850786209 10.354028702 -50.361312866
+v 15.065820694 10.109919548 -50.552104950
+v 15.652656555 10.354027748 -50.361396790
+v 15.732674599 10.109919548 -50.552509308
+v 15.732674599 9.998181343 -50.552509308
+v 24.845567703 16.226596832 -56.921527863
+v 24.845542908 11.552317619 -56.921527863
+v 24.629587173 16.581850052 -56.921569824
+v 24.629587173 16.443117142 -56.921569824
+v 24.629589081 15.441058159 -54.928985596
+v 24.845569611 15.224536896 -54.928943634
+v 24.629589081 15.579791069 -54.928985596
+v 24.629474640 11.308209419 -56.921573639
+v 24.845542908 10.358064651 -54.486366272
+v 24.845567703 15.032342911 -54.486366272
+v 24.845542908 10.550258636 -54.928943634
+v 24.629474640 10.306149483 -54.928989410
+v 24.629474640 10.113956451 -54.486320496
+v 20.850599289 15.541138649 -50.825691223
+v 20.900888443 15.672584534 -50.361396790
+v 20.700279236 14.785192490 -51.028869629
+v 20.784534454 15.184301376 -51.028869629
+v 21.930501938 15.435888290 -50.361396790
+v 21.839899063 15.304443359 -50.825691223
+v 22.685230255 14.941864014 -50.825691223
+v 21.706104279 14.979497910 -51.028869629
+v 21.406278610 14.319043159 -50.825691223
+v 20.631971359 14.504489899 -50.825691223
+v 21.534357071 14.589399338 -51.028869629
+v 20.631971359 14.504489899 -49.832305908
+v 22.153858185 14.013491631 -50.825691223
+v 22.308650970 14.267010689 -51.028869629
+v 22.536228180 14.662883759 -51.028869629
+v 21.406278610 14.319043159 -49.832302094
+v 22.153858185 14.013492584 -49.832302094
+v 24.629587173 15.248864174 -54.486324310
+v 24.629587173 15.387597084 -54.486324310
+v 24.845907211 15.026519775 -50.361396790
+v 24.629589081 15.243041992 -50.532264709
+v 24.629589081 15.381774902 -50.532264709
+v 23.546222687 13.952216148 -51.028869629
+v 23.851118088 14.118022919 -50.825691223
+v 23.106956482 13.729488373 -51.028869629
+v 22.847099304 13.593065262 -50.825691223
+v 22.847099304 13.593065262 -49.832305908
+v 22.812036514 15.072574615 -50.361396790
+v 24.045171738 14.219083786 -50.361396790
+v 24.629474640 9.998181343 -50.552104950
+v 24.629474640 10.109925270 -50.552104950
+v 24.845542908 10.354034424 -50.361312866
+v 23.849924088 9.998181343 -50.825691223
+v 23.965547562 10.109930038 -50.552509308
+v 23.965547562 9.998181343 -50.552509308
+v 24.044841766 10.354040146 -50.361396790
+v 22.847099304 9.998181343 -49.832302094
+v 29.770776749 14.983057976 -79.765068054
+v 29.990617752 14.983057976 -79.764480591
+v 29.770776749 14.983057976 -76.728233337
+v 29.990617752 19.614944458 -79.764816284
+v 29.990617752 14.983057976 -76.724792480
+v 29.770776749 19.614944458 -79.764595032
+v 29.990617752 18.641347885 -76.728233337
+v 29.990617752 19.552772522 -78.981636047
+v 29.770776749 19.552772522 -78.978973389
+v 29.990617752 19.367326736 -78.206016541
+v 29.770776749 19.367326736 -78.206016541
+v 29.770776749 18.641349792 -76.728233337
+v 29.990617752 19.061775208 -77.458442688
+v 29.770776749 19.061775208 -77.458442688
+v 29.990617752 19.367326736 -81.333724976
+v 29.770776749 19.367326736 -81.331604004
+v 29.990617752 19.552772522 -80.557205200
+v 29.770776749 19.552772522 -80.555305481
+v 29.990617752 14.983057976 -82.789794922
+v 29.770776749 14.983057976 -82.789558411
+v 29.990617752 19.061775208 -82.081695557
+v 29.770776749 19.061775208 -82.079597473
+v 29.990617752 18.641347885 -82.789794922
+v 29.770776749 18.641349792 -82.789558411
+v 25.150344849 36.803638458 -78.226249695
+v 23.507511139 36.803638458 -76.151039124
+v 22.379907608 37.816291809 -77.288597107
+v 25.149658203 37.588485718 -78.859718323
+v 23.760309219 38.146606445 -79.075546265
+v 26.582733154 37.451553345 -80.917556763
+v 26.741977692 36.803638458 -80.926628113
+v 23.620162964 40.143218994 -80.539779663
+v 23.214408875 38.849967957 -80.607490540
+v 22.805299759 38.849967957 -79.122245789
+v 23.983345032 38.146606445 -80.741073608
+v 22.286933899 40.141529083 -79.104644775
+v 21.626663208 38.849967957 -77.977058411
+v 21.465209961 40.042587280 -77.248382568
+v 21.989391327 38.146606445 -77.923149109
+v 18.922386169 38.849967957 -77.383468628
+v 18.781166077 39.983886719 -75.779251099
+v 19.296573639 37.549797058 -77.759208679
+v 19.071321487 38.146606445 -77.910560608
+v 26.055217743 35.033866882 -80.746879578
+v 24.823348999 35.031005859 -76.757247925
+v 25.464570999 32.528594971 -77.825080872
+v 21.454284668 32.629238129 -76.140113831
+v 24.596004486 35.184875488 -75.502090454
+v 25.541439056 32.444717407 -80.763412476
+v 18.820507050 35.188179016 -77.004943848
+v 19.020227432 36.803642273 -77.550704956
+v 18.437503815 32.598598480 -74.781242371
+v 15.987350464 38.849967957 -75.045997620
+v 15.820146561 40.176586151 -73.660858154
+v 16.128425598 38.146606445 -75.713554382
+v 16.336780548 37.600803375 -75.754692078
+v 16.051029205 36.803642273 -74.879219055
+v 15.816267014 35.004508972 -73.347824097
+v 15.454005241 32.571670532 -72.626029968
+v 12.481450081 32.488109589 -72.487487793
+v 12.481454849 36.824386597 -71.998634338
+v 12.481455803 34.988109589 -72.289489746
+v 9.841464043 32.488113403 -72.487487793
+v 9.841464043 36.824386597 -71.998641968
+v 9.841464043 37.488113403 -72.269149780
+v 12.481452942 37.488109589 -72.269142151
+v 9.841464043 34.988113403 -72.289505005
+v 9.841464043 38.150741577 -73.263992310
+v 12.481452942 38.150741577 -73.263984680
+v 9.841464043 38.831653595 -73.557495117
+v 9.841464043 39.987960815 -72.482528687
+v 12.481452942 39.987960815 -72.482521057
+v 12.481452942 38.831653595 -73.557495117
+v 24.103481293 34.949363708 -83.712203979
+v 25.275901794 32.545532227 -84.405128479
+v 23.822326660 36.803642273 -83.586334229
+v 21.669319153 36.803638458 -86.960464478
+v 20.021114349 32.419254303 -86.266639709
+v 24.059520721 37.374099731 -83.686401367
+v 23.201112747 39.767883301 -83.417564392
+v 23.296180725 38.849967957 -82.913650513
+v 23.527416229 38.146606445 -82.990409851
+v 21.588678360 37.490589142 -86.695175171
+v 21.198863983 38.146606445 -86.152320862
+v 21.211910248 38.849967957 -86.241333008
+v 20.951198578 34.872016907 -86.784126282
+v 18.210243225 34.756584167 -89.659729004
+v 18.384002686 32.098144531 -89.750251770
+v 18.141355515 36.803638458 -88.407386780
+v 21.635330200 40.005462646 -87.013442993
+v 18.081920624 37.317695618 -88.053428650
+v 17.714733124 38.146606445 -87.833557129
+v 17.707719803 38.849967957 -88.143836975
+v 18.099239349 39.993171692 -89.274894714
+v 15.259215355 39.788761139 -87.509864807
+v 14.867755890 38.849967957 -86.730918884
+v 14.875638962 38.146606445 -86.616233826
+v 15.287878036 37.231719971 -87.092933655
+v 15.288704872 36.803642273 -87.207962036
+v 15.292680740 34.746036530 -87.760856628
+v 15.425393105 32.172321320 -87.813186646
+v 12.481456757 34.988113403 -87.337501526
+v 12.481456757 32.488113403 -87.139503479
+v 9.841465950 34.988113403 -87.337501526
+v 9.841465950 32.488113403 -87.139511108
+v 12.481451988 36.803638458 -87.625076294
+v 9.841465950 36.824386597 -87.628364563
+v 12.481458664 37.488113403 -87.354400635
+v 12.481458664 38.831653595 -86.051231384
+v 9.841455460 38.831653595 -86.069503784
+v 9.841456413 38.150741577 -86.363006592
+v 12.452425003 39.987964630 -87.164901733
+v 9.841456413 39.987960815 -87.144470215
+v 9.841456413 37.488113403 -87.357849121
+v 12.481458664 38.150741577 -86.348823547
+v 29.305988312 21.413707733 -76.206016541
+v 29.305988312 20.366687775 -74.815032959
+v 24.837379456 20.371608734 -74.815391541
+v 23.466409683 21.406253815 -76.199089050
+v 25.255584717 14.946889877 -76.231483459
+v 26.604797363 14.982656479 -76.265853882
+v 27.231506348 14.950581551 -76.265853882
+v 23.980312347 21.871791840 -77.274734497
+v 24.203563690 21.958866119 -77.837463379
+v 24.520853043 21.999008179 -78.534027100
+v 23.593200684 21.483489990 -76.369125366
+v 29.305988312 21.874507904 -77.280349731
+v 29.305988312 22.175323486 -78.537651062
+v 24.800132751 22.060703278 -79.218650818
+v 29.305988312 22.262165070 -79.813476563
+v 24.956825256 22.130088806 -79.813652039
+v 23.457771301 21.412771225 -70.348968506
+v 23.082004547 21.573951721 -75.407218933
+v 22.381294250 21.874509811 -74.702331543
+v 22.381294250 21.874507904 -70.348968506
+v 24.837772369 20.364633560 -70.348968506
+v 18.565612793 22.107646942 -72.990287781
+v 19.841440201 22.250955582 -73.242851257
+v 19.841440201 22.262165070 -70.348968506
+v 21.123991013 22.175323486 -70.348968506
+v 21.123991013 22.175325394 -74.250564575
+v 25.056758881 22.139398575 -80.535820007
+v 24.705877304 22.122812271 -81.095756531
+v 29.305988312 22.175323486 -81.096031189
+v 29.305988312 21.874507904 -82.353332520
+v 23.299259186 21.874511719 -82.353866577
+v 23.448938370 21.413709641 -83.419189453
+v 29.305988312 21.412771225 -83.429809570
+v 29.305988312 20.364633560 -84.809814453
+v 24.839569092 20.371608734 -84.809417725
+v 23.457771301 21.412773132 -89.284484863
+v 24.837379456 20.371608734 -89.284484863
+v 22.797550201 21.693103790 -82.773315430
+v 22.375690460 21.873327255 -83.476203918
+v 22.381294250 21.874511719 -89.284484863
+v 21.123992920 22.175325394 -89.284484863
+v 22.168815613 21.903715134 -83.783325195
+v 21.120126724 22.067075729 -84.549667358
+v 19.841442108 22.176996231 -84.137710571
+v 19.841442108 22.262166977 -89.284484863
+v 18.565612793 22.175325394 -89.284484863
+v 18.565612793 22.175323486 -70.348968506
+v 18.272354126 21.979415894 -73.085937500
+v 17.308311462 21.518264771 -73.613197327
+v 17.308309555 21.874507904 -70.348968506
+v 16.233982086 20.961898804 -74.645462036
+v 16.233980179 21.413707733 -70.348968506
+v 14.842990875 20.366687775 -70.348968506
+v 16.933029175 21.336425781 -73.846252441
+v 14.842651367 20.219360352 -74.815307617
+v 15.540415764 20.409646988 -75.513656616
+v 15.635255814 20.520387650 -75.291046143
+v 15.281488419 20.586505890 -75.753463745
+v 14.728040695 20.909824371 -76.207351685
+v 15.799945831 20.644830704 -75.183647156
+v 10.370471001 21.413709641 -76.206024170
+v 13.212484360 21.168054581 -77.276458740
+v 14.610939026 20.942386627 -76.341934204
+v 10.370471001 21.874511719 -77.280349731
+v 10.370553970 20.364635468 -74.814689636
+v 13.357571602 21.493791580 -79.813629150
+v 12.988756180 21.191238403 -78.535026550
+v 10.370471001 22.175325394 -78.537651062
+v 13.057863235 21.173599243 -77.588134766
+v 10.370471001 22.262166977 -79.813484192
+v 13.967662811 21.837032318 -81.095771790
+v 10.370471001 22.175325394 -81.096031189
+v 13.763244629 21.696022034 -80.502403259
+v 14.216711998 21.863300323 -81.803222656
+v 14.747447968 21.848104477 -82.353805542
+v 10.370471001 21.874511719 -82.353332520
+v 14.845539093 20.371608734 -84.811607361
+v 10.370471001 21.412773132 -83.429809570
+v 10.982007980 20.373481750 -84.595985413
+v 10.370471001 20.371608734 -84.809417725
+v 15.094427109 21.729990005 -82.688247681
+v 16.235771179 21.413709641 -83.420799255
+v 16.762920380 21.712316513 -82.950569153
+v 18.560976028 22.168703079 -83.647201538
+v 17.301679611 21.976741791 -83.235755920
+v 17.308311462 21.874511719 -89.284484863
+v 14.842651367 20.364635468 -89.284408569
+v 16.233982086 21.413709641 -89.284484863
+v 24.488052368 30.094154358 -75.618225098
+v 25.518449783 28.812402725 -75.841156006
+v 24.347496033 28.985239029 -75.019706726
+v 23.141761780 30.100467682 -74.650505066
+v 24.634094238 26.688255310 -75.590003967
+v 23.490127563 27.013437271 -73.939460754
+v 23.440853119 28.999212265 -74.159996033
+v 22.817611694 27.110204697 -72.569808960
+v 21.266868591 26.662124634 -71.392883301
+v 19.449996948 28.567934036 -72.402175903
+v 19.529581070 29.983152390 -73.100250244
+v 19.787189484 26.169006348 -71.135566711
+v 22.061599731 24.255449295 -74.742469788
+v 20.893354416 24.193212509 -74.051712036
+v 21.115722656 24.546749115 -72.695671082
+v 22.511524200 24.635454178 -73.533271790
+v 22.808015823 25.561082840 -72.700889587
+v 23.368392944 25.587879181 -74.153945923
+v 21.280704498 25.101297379 -71.769996643
+v 19.866724014 24.839723587 -71.833221436
+v 19.801246643 24.161594391 -72.210723877
+v 23.329086304 24.272464752 -74.836639404
+v 23.955390930 25.325462341 -75.683670044
+v 23.781864166 23.778326035 -75.961318970
+v 22.722534180 23.988742828 -75.623329163
+v 23.200160980 23.616571426 -76.630523682
+v 23.091220856 23.616294861 -76.484764099
+v 22.626701355 22.961791992 -76.785835266
+v 22.330196381 23.193660736 -76.181762695
+v 26.550949097 29.874471664 -77.890174866
+v 26.447105408 28.526062012 -76.735382080
+v 26.842082977 28.425216675 -77.812469482
+v 26.544471741 28.660789490 -80.678894043
+v 26.738830566 28.452816010 -79.091911316
+v 25.884006500 26.118581772 -77.365158081
+v 25.705062866 26.361009598 -76.578338623
+v 25.819625854 26.084964752 -78.917701721
+v 25.796188354 26.212837219 -79.443344116
+v 25.092411041 24.798793793 -77.526428223
+v 25.752429962 26.067216873 -78.103294373
+v 24.865108490 24.997421265 -76.733055115
+v 24.665222168 23.828989029 -77.714935303
+v 25.286739349 24.730936050 -78.227584839
+v 25.378070831 24.778564453 -79.131469727
+v 23.948272705 23.776203156 -76.147186279
+v 24.426811218 23.831975937 -77.107467651
+v 23.688209534 23.579959869 -77.967208862
+v 23.549936295 23.637470245 -77.448776245
+v 25.604660034 24.897699356 -79.702133179
+v 25.027832031 24.062568665 -78.296684265
+v 25.358690262 24.106132507 -79.120513916
+v 25.383094788 24.321857452 -79.871215820
+v 24.432258606 23.809860229 -79.742805481
+v 24.290679932 23.616666794 -79.205200195
+v 29.305988312 20.063230515 -76.859596252
+v 29.135120392 20.373481750 -75.031013489
+v 24.623407364 20.371608734 -75.031326294
+v 29.135120392 20.234748840 -75.031013489
+v 24.623407364 20.232875824 -75.031326294
+v 29.305988312 20.018226624 -74.815032959
+v 19.794349670 23.879894257 -73.666061401
+v 19.805347443 22.543739319 -73.894897461
+v 20.892026901 20.662504196 -70.348968506
+v 19.841341019 20.730834961 -70.348968506
+v 20.851001740 20.531059265 -70.813537598
+v 21.840303421 20.294363022 -70.813537598
+v 19.841457367 20.599388123 -70.813537598
+v 21.921642303 20.425807953 -70.348968506
+v 22.803176880 20.062494278 -70.348968506
+v 23.537363052 18.942136765 -71.016304016
+v 22.527366638 19.652805328 -71.016304016
+v 22.687320709 19.931049347 -70.813537598
+v 23.840061188 19.106327057 -70.813537598
+v 24.036310196 19.209003448 -70.348968506
+v 21.767883301 23.401014328 -75.542915344
+v 20.757532120 23.470703125 -75.025962830
+v 19.773284912 23.212747574 -74.474105835
+v 20.944026947 22.566518784 -74.784950256
+v 22.061439514 22.344963074 -75.191322327
+v 22.683864594 22.077983856 -75.817459106
+v 23.025321960 21.929023743 -76.520858765
+v 24.623407364 20.371606827 -70.519836426
+v 24.623407364 20.232873917 -70.519836426
+v 24.837772369 20.016351700 -70.348968506
+v 24.036403656 15.343961716 -70.348968506
+v 24.837772369 20.016353607 -74.815391541
+v 24.837772369 15.343955994 -70.348968506
+v 23.098094940 18.719408035 -71.016304016
+v 23.097551346 14.950710297 -71.016304016
+v 22.841457367 14.950710297 -70.813537598
+v 23.839019775 14.950710297 -70.813537598
+v 23.540313721 14.950710297 -71.016304016
+v 22.841457367 18.582984924 -70.813537598
+v 24.622737885 14.950710297 -70.539947510
+v 23.955623627 14.950710297 -70.539947510
+v 23.955623627 15.099852562 -70.539947510
+v 24.622737885 15.099847794 -70.539947510
+v 24.837770462 15.343947411 -74.815391541
+v 24.606698990 14.947907448 -75.034667969
+v 21.894195557 14.901648521 -72.612403870
+v 24.612802505 15.079806328 -75.034667969
+v 23.336404800 14.936596870 -74.047241211
+v 23.298706055 15.231988907 -75.839904785
+v 23.259780884 14.938171387 -75.032234192
+v 25.088092804 15.331356049 -76.757781982
+v 22.979141235 15.738905907 -77.437652588
+v 29.305988312 19.210618973 -75.616073608
+v 29.305988312 15.343950272 -74.815055847
+v 28.841423035 19.931785583 -76.975364685
+v 28.841423035 19.107944489 -75.809478760
+v 29.305988312 15.343950272 -75.615837097
+v 28.638660431 14.950710297 -76.084167480
+v 28.638660431 18.965354919 -76.083694458
+v 28.638660431 18.739192963 -76.514038086
+v 28.638660431 14.950710297 -76.513671875
+v 28.841423035 14.950710297 -75.810668945
+v 29.115013123 14.950710297 -75.031127930
+v 24.735479355 15.422969818 -77.767738342
+v 26.498107910 14.949935913 -76.926391602
+v 29.115013123 15.099842072 -75.031127930
+v 29.115013123 15.099841118 -75.696037292
+v 29.115013123 14.950710297 -75.696037292
+v 22.299789429 19.256931305 -71.016304016
+v 22.154045105 19.003412247 -70.813537598
+v 21.406467438 19.308963776 -70.813537598
+v 21.525495529 19.579319000 -71.016304016
+v 20.775671005 20.174221039 -71.016304016
+v 21.697242737 19.969417572 -71.016304016
+v 20.691417694 19.775112152 -71.016304016
+v 20.632160187 19.494409561 -70.813537598
+v 19.841459274 20.235126495 -71.016304016
+v 19.841461182 19.848402023 -71.016304016
+v 19.841464996 19.556579590 -70.813537598
+v 16.841457367 14.950710297 -70.813537598
+v 20.586040497 14.937191010 -71.819656372
+v 18.894596100 14.938294411 -72.220695496
+v 20.435432434 15.061697960 -72.449722290
+v 18.696746826 15.379846573 -73.383460999
+v 18.772079468 15.265413284 -72.659072876
+v 17.032363892 15.983451843 -73.813018799
+v 21.754692078 14.977915764 -73.410140991
+v 20.325994492 15.450225830 -73.102951050
+v 21.950759888 15.306118011 -73.966735840
+v 21.694307327 15.916619301 -75.330863953
+v 20.282855988 16.405143738 -74.777481079
+v 21.458448410 16.824398041 -78.550865173
+v 21.431514740 16.321739197 -76.831939697
+v 18.578311920 15.797663689 -74.144912720
+v 20.631263733 15.616428375 -73.627922058
+v 18.694887161 16.794986725 -75.507049561
+v 23.809509277 23.007034302 -79.658699036
+v 23.685874939 22.939796448 -79.189224243
+v 24.038337708 23.547147751 -78.586608887
+v 23.465511322 22.890916824 -78.649032593
+v 29.305988312 20.425807953 -77.739372253
+v 29.305988312 20.662504196 -78.768989563
+v 28.841423035 20.531059265 -78.809997559
+v 28.638660431 20.007085800 -77.947113037
+v 28.638660431 19.668453217 -77.126091003
+v 28.841423035 20.294363022 -77.820693970
+v 28.638660431 19.267768860 -77.334770203
+v 28.638660431 20.192857742 -78.881324768
+v 28.638660431 19.579931259 -78.135078430
+v 28.638660431 19.785186768 -78.967300415
+v 28.841423035 20.599388123 -79.813499451
+v 29.305988312 20.730834961 -79.813377380
+v 28.638660431 20.235126495 -79.813499451
+v 28.841423035 19.494409561 -79.028625488
+v 29.841461182 19.308961868 -78.254318237
+v 28.841423035 19.308963776 -78.254318237
+v 29.841461182 19.494409561 -79.028625488
+v 28.841423035 19.556579590 -79.813507080
+v 29.841461182 19.556579590 -79.813507080
+v 28.638660431 19.848402023 -79.813499451
+v 28.841423035 19.003412247 -77.506736755
+v 28.841423035 18.582984924 -76.813499451
+v 29.841461182 18.582984924 -76.813499451
+v 29.841461182 19.003410339 -77.506736755
+v 28.841423035 14.950710297 -76.813499451
+v 29.841461182 14.988102913 -76.813499451
+v 26.069618225 14.947598457 -77.688873291
+v 27.280761719 14.949302673 -81.662971497
+v 26.861991882 14.947669029 -81.228546143
+v 28.196334839 14.950796127 -82.088394165
+v 28.841423035 14.950710297 -82.813499451
+v 28.196334839 14.950674057 -82.655242920
+v 26.867954254 15.440361977 -82.661079407
+v 26.867954254 15.730962753 -82.088844299
+v 29.841461182 14.988102913 -82.813499451
+v 26.535839081 14.949819565 -80.187927246
+v 26.665481567 14.947300911 -80.670341492
+v 25.893093109 14.945127487 -78.708297729
+v 25.875171661 14.947607040 -79.065750122
+v 26.184097290 14.950408936 -79.661888123
+v 24.564708710 15.443685532 -78.836112976
+v 22.942348480 16.209550858 -78.833389282
+v 24.546791077 15.496338844 -79.185707092
+v 24.855716705 15.576368332 -79.749267578
+v 22.946269989 16.330913544 -79.273895264
+v 23.259548187 16.457134247 -79.899765015
+v 22.733558655 22.972330093 -76.940849304
+v 23.201393127 22.975053787 -78.108131409
+v 23.039005280 23.035600662 -77.655403137
+v 23.137948990 21.997629166 -76.671897888
+v 23.481811523 22.259363174 -77.476325989
+v 23.680122375 22.266258240 -77.976188660
+v 23.961961746 22.227539063 -78.594932556
+v 24.210037231 22.282510757 -79.203063965
+v 24.349227905 22.352766037 -79.731590271
+v 21.507698059 17.028732300 -79.056488037
+v 21.912975311 17.337978363 -79.802665710
+v 20.085742950 17.311626434 -76.427032471
+v 20.119037628 17.919717789 -78.256080627
+v 18.678516388 17.549781799 -76.917640686
+v 20.157531738 18.068082809 -78.809753418
+v 20.502685547 18.281394958 -79.627601624
+v 18.786527634 19.179737091 -79.585365295
+v 26.305461884 29.938735962 -80.742683411
+v 25.685838699 30.050054550 -84.391563416
+v 25.666475296 28.903474808 -84.421432495
+v 25.907665253 26.450117111 -80.232681274
+v 26.151550293 26.630941391 -80.783760071
+v 25.638500214 27.246767044 -84.464599609
+v 25.065311432 26.102489471 -84.893760681
+v 25.663249969 24.491418839 -80.759208679
+v 25.920974731 25.083208084 -80.329757690
+v 26.520496368 25.468971252 -81.519325256
+v 26.707901001 24.878492355 -81.515037537
+v 25.468273163 24.755270004 -81.602767944
+v 24.205516815 24.160057068 -80.901245117
+v 24.522552490 23.985321045 -80.395317078
+v 25.201683044 24.895957947 -82.327247620
+v 25.152015686 24.942050934 -84.862052917
+v 24.254001617 24.662267685 -83.632957458
+v 22.481258392 23.758296967 -82.416992188
+v 22.934574127 24.070884705 -82.038009644
+v 23.021926880 24.178052902 -84.502494812
+v 22.100090027 23.673082352 -83.052085876
+v 22.501628876 23.353986740 -81.663024902
+v 21.430339813 29.881513596 -87.753814697
+v 23.237037659 27.381513596 -89.024147034
+v 23.450878143 26.034505844 -87.742164612
+v 22.340473175 28.903474808 -88.446884155
+v 18.217596054 29.553066254 -89.729858398
+v 18.321304321 27.053068161 -90.041275024
+v 18.924333572 25.752410889 -88.468887329
+v 18.244543076 28.903474808 -89.810775757
+v 18.851167679 24.901309967 -88.307090759
+v 21.652906418 23.939552307 -84.968963623
+v 19.944507599 24.132301331 -84.900215149
+v 23.233039856 25.185806274 -87.248916626
+v 21.900707245 23.957534790 -84.885879517
+v 21.899944305 23.594797134 -83.399215698
+v 19.810281754 23.811729431 -83.664077759
+v 20.965631485 23.643945694 -84.022010803
+v 28.841423035 20.531059265 -80.823043823
+v 29.305988312 20.662504196 -80.864067078
+v 29.305988312 20.425807953 -81.893684387
+v 28.638660431 20.174221039 -80.747711182
+v 28.638660431 19.969417572 -81.669281006
+v 28.638660431 19.579319000 -81.497535706
+v 28.638660431 19.775112152 -80.663459778
+v 28.841423035 20.294363022 -81.812339783
+v 28.841423035 19.931049347 -82.659362793
+v 28.638660431 19.652805328 -82.499404907
+v 29.305988312 19.209003448 -84.008346558
+v 29.305988312 20.062494278 -82.775215149
+v 29.305988312 20.016351700 -84.809814453
+v 29.135120392 20.371606827 -84.595443726
+v 29.135120392 20.232873917 -84.595443726
+v 24.623950958 20.371696472 -84.595756531
+v 24.623950958 20.232963562 -84.595756531
+v 24.840267181 20.016441345 -84.811691284
+v 24.126316071 22.467172623 -80.870460510
+v 22.876848221 22.344964981 -81.988014221
+v 23.611503601 23.333345413 -80.670333862
+v 22.431190491 22.181167603 -82.360595703
+v 23.953485489 23.180593491 -80.251121521
+v 24.437995911 22.389266968 -80.373077393
+v 28.841423035 19.308963776 -81.378509521
+v 28.841423035 19.494409561 -80.604202271
+v 29.841461182 19.494409561 -80.604202271
+v 28.841423035 19.003412247 -82.126083374
+v 29.841461182 19.308961868 -81.378509521
+v 29.841461182 19.003410339 -82.126083374
+v 28.638660431 19.256931305 -82.271827698
+v 28.841423035 18.582984924 -82.813499451
+v 29.841461182 18.582984924 -82.813499451
+v 28.638660431 18.719408035 -83.070137024
+v 28.638660431 18.942136765 -83.509399414
+v 28.841423035 19.106327057 -83.812103271
+v 28.638660431 14.950710297 -83.069587708
+v 28.841423035 14.950710297 -83.811058044
+v 29.305988312 15.343961716 -84.008445740
+v 28.638660431 14.950710297 -83.512351990
+v 28.196334839 14.950065613 -83.009132385
+v 26.867954254 14.944667816 -83.010108948
+v 29.115013123 14.950710297 -83.927658081
+v 29.115013123 14.950710297 -84.594779968
+v 29.115013123 15.099852562 -83.927658081
+v 29.115013123 15.099847794 -84.594779968
+v 25.952377319 15.555994034 -81.667083740
+v 25.533611298 15.441658974 -81.235389709
+v 25.271785736 16.370138168 -82.129051208
+v 24.623832703 15.084804535 -84.639930725
+v 29.305988312 15.343955994 -84.809814453
+v 24.623832703 14.946317673 -84.659896851
+v 25.271785736 14.928886414 -83.643524170
+v 25.207458496 15.607461929 -80.229797363
+v 25.337100983 15.596984863 -80.685585022
+v 23.611289978 16.304542542 -80.392143250
+v 23.740932465 16.228935242 -80.838890076
+v 24.356212616 15.971117020 -81.711555481
+v 23.937442780 16.058343887 -81.356719971
+v 22.438049316 17.129186630 -80.770584106
+v 22.308406830 17.217609406 -80.322029114
+v 23.053329468 16.767339706 -81.716812134
+v 22.634559631 16.920852661 -81.308265686
+v 23.968902588 16.563045502 -82.157836914
+v 25.271785736 15.919914246 -82.709167480
+v 25.271785736 15.354865074 -83.046897888
+v 23.967103958 15.168118477 -83.748222351
+v 23.968902588 15.525764465 -83.178428650
+v 23.968902588 14.925689697 -84.537361145
+v 23.968902588 16.310291290 -82.731681824
+v 24.623405457 20.232875824 -89.113616943
+v 24.623947144 20.373481750 -89.107162476
+v 24.837772369 20.016353607 -89.284484863
+v 24.036228180 19.210620880 -89.284408569
+v 22.792137146 20.063232422 -89.284408569
+v 24.839904785 15.343955994 -84.818161011
+v 24.623832703 14.950710297 -89.087051392
+v 24.623832703 15.099842072 -89.087051392
+v 23.567571640 14.950710297 -88.617889404
+v 23.568038940 18.965358734 -88.616928101
+v 23.137702942 18.739194870 -88.616928101
+v 24.035900116 15.343950272 -89.284408569
+v 24.837772369 15.343950272 -89.284484863
+v 23.844284058 14.950710297 -88.813461304
+v 23.138065338 14.950710297 -88.648902893
+v 23.955883026 14.950710297 -89.093292236
+v 23.955883026 15.099841118 -89.093292236
+v 23.840061188 19.106328964 -88.820106506
+v 22.687324524 19.931051254 -88.820106506
+v 22.525646210 19.668455124 -88.616928101
+v 20.873836517 19.212495804 -83.716064453
+v 19.406978607 19.888927460 -84.077728271
+v 19.414176941 21.462732315 -82.990173340
+v 19.958477020 19.926210403 -82.459869385
+v 20.875013351 19.308794022 -82.895057678
+v 21.772899628 23.068262100 -82.548583984
+v 21.598121643 22.997964859 -82.851722717
+v 21.872701645 22.243719101 -83.257759094
+v 22.105762482 23.112348557 -81.993980408
+v 22.056463242 22.266183853 -82.984947205
+v 20.782215118 22.993917465 -83.395591736
+v 19.773288727 23.212579727 -83.083015442
+v 19.805349350 22.443315506 -83.586601257
+v 20.941175461 22.310987473 -83.938491821
+v 20.991313934 18.459091187 -80.719329834
+v 20.861671448 18.407154083 -80.239631653
+v 21.606594086 17.911363602 -81.903717041
+v 21.187824249 18.329421997 -81.446632385
+v 19.342899323 19.541238785 -80.956283569
+v 19.187976837 19.356319427 -80.242729187
+v 19.540824890 19.720926285 -81.783370972
+v 22.522163391 17.274503708 -82.934059143
+v 22.522163391 17.592578888 -82.239845276
+v 22.484359741 16.313440323 -84.120674133
+v 22.518768311 16.689754486 -83.503875732
+v 20.859477997 18.254144669 -84.122451782
+v 20.770414352 20.192859650 -88.616928101
+v 19.838237762 20.235130310 -88.616928101
+v 19.838233948 19.848403931 -88.616928101
+v 21.704624176 20.007087708 -88.616928101
+v 20.684436798 19.785186768 -88.616928101
+v 21.840305328 20.294364929 -88.820106506
+v 20.851005554 20.531061172 -88.820106506
+v 21.912361145 20.425811768 -89.284408569
+v 20.882747650 20.662506104 -89.284408569
+v 22.316970825 19.267770767 -88.616928101
+v 22.154048920 19.003414154 -88.820106506
+v 22.841461182 18.582986832 -88.820106506
+v 22.841461182 18.582986832 -89.813499451
+v 21.406469345 19.308963776 -88.820106506
+v 21.516656876 19.579933167 -88.616928101
+v 22.137996674 19.003410339 -89.813499451
+v 19.838356018 20.730836868 -89.284408569
+v 19.838241577 20.599390030 -88.819694519
+v 20.632162094 19.494411469 -88.820106506
+v 21.390419006 19.308961868 -89.813499451
+v 20.632162094 19.494411469 -89.813499451
+v 19.841468811 19.556581497 -88.820106506
+v 19.841468811 19.556581497 -89.813499451
+v 20.751476288 17.103826523 -84.706436157
+v 19.339275360 18.912166595 -84.394371033
+v 21.049032211 15.863847733 -85.412651062
+v 19.170335770 17.632045746 -84.910621643
+v 20.875701904 14.949906349 -86.055358887
+v 22.390251160 15.629423141 -84.830459595
+v 18.301856995 14.937114716 -86.137916565
+v 22.807044983 14.988101959 -89.813499451
+v 22.841461182 14.950710297 -88.823219299
+v 16.841459274 14.950710297 -88.820114136
+v 16.831239700 14.988101959 -89.813499451
+v 15.818071365 27.487817764 -72.805198669
+v 15.743446350 28.903474808 -73.059967041
+v 16.720575333 28.934715271 -73.143966675
+v 18.047039032 28.909187317 -73.017089844
+v 15.684791565 30.003684998 -73.260215759
+v 18.525236130 26.654150009 -71.953231812
+v 18.162685394 26.808786392 -72.181945801
+v 17.223571777 27.178163528 -72.633407593
+v 17.245525360 25.270286560 -72.983283997
+v 16.740139008 25.390344620 -73.098541260
+v 16.748601913 27.326850891 -72.748352051
+v 18.209056854 25.080087662 -72.513275146
+v 18.169246674 24.404680252 -72.365806580
+v 18.578323364 24.984479904 -72.266166687
+v 18.462497711 24.405164719 -72.263618469
+v 18.657451630 23.969886780 -73.577072144
+v 17.135082245 24.324024200 -73.184768677
+v 18.401916504 23.923854828 -73.576492310
+v 15.684789658 25.591835022 -73.260215759
+v 16.730388641 24.162227631 -73.436096191
+v 15.793661118 24.871000290 -74.105880737
+v 17.519702911 23.677232742 -74.143333435
+v 17.169528961 23.476366043 -74.372077942
+v 15.101604462 24.741426468 -74.480918884
+v 16.451955795 22.982490540 -75.175552368
+v 12.481462479 29.988111496 -72.297737122
+v 12.481460571 28.858713150 -72.394294739
+v 12.481462479 26.238111496 -73.774490356
+v 12.481455803 27.488111496 -72.685501099
+v 9.841464043 28.858713150 -72.394302368
+v 9.841464043 29.988111496 -72.297760010
+v 9.841464043 27.488111496 -72.685501099
+v 9.841464043 26.238111496 -73.774505615
+v 12.481455803 25.478315353 -73.873489380
+v 14.326726913 24.516502380 -75.883964539
+v 9.841368675 24.988111496 -77.254035950
+v 9.841463089 25.488111496 -73.873512268
+v 13.640657425 23.942804337 -77.135154724
+v 12.481455803 24.591220856 -77.239486694
+v 13.473918915 23.923679352 -77.471260071
+v 12.481456757 23.876964569 -79.813499451
+v 13.399394989 23.645229340 -78.492370605
+v 9.841464996 24.988111496 -79.813499451
+v 17.767335892 20.425807953 -70.348968506
+v 18.796949387 20.662504196 -70.348968506
+v 18.837957382 20.531059265 -70.813537598
+v 17.848655701 20.294363022 -70.813537598
+v 18.909282684 20.192857742 -71.016304016
+v 17.003326416 19.931785583 -70.813537598
+v 17.975070953 20.007085800 -71.016304016
+v 17.154048920 19.668453217 -71.016304016
+v 18.163040161 19.579931259 -71.016304016
+v 18.995262146 19.785186768 -71.016304016
+v 16.887557983 20.063230515 -70.348968506
+v 19.056587219 19.494409561 -70.813537598
+v 15.837439537 19.107944489 -70.813537598
+v 16.111656189 18.965354919 -71.016304016
+v 17.362728119 19.267768860 -71.016304016
+v 15.644033432 19.210618973 -70.348968506
+v 18.765943527 23.200260162 -74.275917053
+v 18.538703918 23.132932663 -74.281570435
+v 18.655975342 22.460165024 -73.696899414
+v 18.379405975 22.330810547 -73.808197021
+v 17.710544586 22.778474808 -74.852195740
+v 17.357477188 22.535253525 -75.078155518
+v 17.420154572 21.845836639 -74.421234131
+v 18.282279968 19.308963776 -70.813537598
+v 17.534698486 19.003412247 -70.813537598
+v 16.541996002 18.739192963 -71.016304016
+v 16.841457367 18.582984924 -70.813537598
+v 15.058970451 20.373481750 -70.519836426
+v 14.842990875 20.018226624 -70.348968506
+v 15.058971405 20.234748840 -70.519836426
+v 14.843014717 15.343950272 -70.348968506
+v 15.838632584 14.950710297 -70.813537598
+v 15.643795013 15.343950272 -70.348968506
+v 14.843015671 15.343955994 -74.815391541
+v 16.541629791 14.950710297 -71.016304016
+v 16.112125397 14.950710297 -71.016304016
+v 17.295028687 14.950681686 -73.240432739
+v 16.225315094 14.950619698 -74.404861450
+v 15.059083939 14.950710297 -70.539947510
+v 15.723994255 14.950710297 -70.539947510
+v 15.723994255 15.099841118 -70.539947510
+v 15.059083939 15.099842072 -70.539947510
+v 15.059083939 15.099847794 -75.034667969
+v 15.062631607 14.950710297 -75.032218933
+v 15.993486404 16.043682098 -74.891418457
+v 17.580718994 18.601600647 -76.582916260
+v 17.608123779 18.033020020 -75.992507935
+v 18.956254959 16.238872528 -74.623527527
+v 16.658613205 17.280139923 -75.766830444
+v 16.858667374 16.648092270 -75.071937561
+v 14.842651367 19.999349594 -74.815307617
+v 15.058968544 20.170953751 -75.031242371
+v 15.689005852 16.945304871 -75.395370483
+v 14.469780922 17.697820663 -75.849273682
+v 14.633446693 16.660942078 -75.592468262
+v 15.504920006 18.060466766 -76.458518982
+v 15.058967590 20.286876678 -75.031242371
+v 15.580442429 22.254665375 -76.067657471
+v 16.570756912 21.943433762 -75.816146851
+v 16.149850845 21.184806824 -75.519653320
+v 15.663236618 21.165817261 -76.608116150
+v 15.639649391 20.889797211 -76.033630371
+v 15.230363846 20.653139114 -76.445938110
+v 17.006267548 21.571250916 -74.693077087
+v 16.605232239 21.943433762 -75.816146851
+v 14.933979988 22.035934448 -78.985809326
+v 14.907885551 21.989849091 -78.614784241
+v 15.965945244 20.967689514 -78.567970276
+v 15.890275955 21.048503876 -78.917999268
+v 15.283826828 22.158493042 -79.612579346
+v 17.397212982 19.778511047 -78.448715210
+v 16.154167175 21.231525421 -79.520309448
+v 17.266906738 19.912086487 -78.838211060
+v 14.990085602 21.806129456 -77.740325928
+v 15.364355087 21.519338608 -77.042915344
+v 16.191160202 20.680904388 -77.723434448
+v 14.957674980 22.561777115 -76.607536316
+v 15.367637634 22.353986740 -76.263748169
+v 14.490463257 22.840423584 -77.478836060
+v 16.308990479 19.685749054 -76.490653992
+v 16.175315857 20.300151825 -76.929840088
+v 18.414966583 18.401939392 -78.381942749
+v 17.587017059 19.222574234 -77.421653748
+v 18.426315308 18.667060852 -78.873901367
+v 17.356460571 20.098489761 -79.467292786
+v 15.592473984 19.060592651 -76.803924561
+v 14.817337990 18.983997345 -76.982727051
+v 10.541421890 20.371696472 -75.031005859
+v 10.541421890 20.232963562 -75.031005859
+v 10.370553970 20.016441345 -74.814689636
+v 13.694046021 19.710155487 -76.971282959
+v 13.428596497 20.853733063 -79.356292725
+v 13.365878105 20.853733063 -78.175544739
+v 13.549103737 20.215240479 -77.503173828
+v 14.390188217 22.835433960 -77.743637085
+v 14.358359337 22.587871552 -79.014625549
+v 14.372740746 22.729833603 -78.576995850
+v 14.723241806 22.743982315 -79.741401672
+v 13.407335281 23.436180115 -79.013099670
+v 13.797117233 23.424091339 -79.871200562
+v 10.370553970 20.062496185 -76.848564148
+v 10.370553970 19.209005356 -75.615425110
+v 10.834850311 19.107944489 -75.809478760
+v 11.038029671 18.942138672 -76.114372253
+v 11.038028717 19.652805328 -77.124366760
+v 10.834851265 19.931785583 -76.975364685
+v 10.370553017 20.662506104 -78.759712219
+v 10.370553017 20.425811768 -77.730094910
+v 10.370553017 20.730836868 -79.810394287
+v 10.834851265 20.531061172 -78.809997559
+v 10.834850311 20.294364929 -77.820701599
+v 11.038028717 19.969421387 -77.954490662
+v 11.038028717 19.256933212 -77.351943970
+v 11.038028717 19.579320908 -78.126243591
+v 10.834850311 19.308963776 -78.254318237
+v 9.841461182 19.308965683 -78.254318237
+v 9.841462135 19.494411469 -79.028625488
+v 11.038028717 19.775114059 -78.960319519
+v 11.038028717 20.174222946 -78.876060486
+v 10.834851265 19.494411469 -79.028625488
+v 10.835263252 20.599390030 -79.810279846
+v 11.038028717 19.848403931 -79.810272217
+v 9.841462135 19.556581497 -79.813507080
+v 11.038028717 20.235130310 -79.810279846
+v 10.834850311 19.556581497 -79.813507080
+v 12.184720993 16.376655579 -78.849044800
+v 12.877394676 19.252302170 -79.155899048
+v 13.270064354 19.252302170 -79.928024292
+v 13.095947266 18.804010391 -77.196586609
+v 12.300619125 17.382823944 -77.248023987
+v 12.916456223 19.252302170 -77.798713684
+v 12.728396416 17.382823944 -76.634635925
+v 13.275438309 18.355716705 -76.594451904
+v 13.140472412 17.382823944 -76.043762207
+v 10.370553017 15.343961716 -75.615753174
+v 10.370471001 15.343955994 -74.815055847
+v 10.834850311 18.582986832 -76.813499451
+v 9.841462135 18.582986832 -76.813499451
+v 9.841461182 19.003414154 -77.506736755
+v 11.038029671 18.719409943 -76.553642273
+v 10.834850311 19.003414154 -77.506736755
+v 10.834848404 14.951487541 -75.810676575
+v 11.038029671 14.951487541 -76.111419678
+v 11.044261932 14.951487541 -76.557403564
+v 12.175566673 14.938457489 -75.595718384
+v 10.567905426 14.951487541 -75.032218933
+v 10.567905426 15.099847794 -75.032218933
+v 10.561667442 15.099852562 -75.695053101
+v 10.561667442 14.951487541 -75.695053101
+v 11.428196907 14.924728394 -78.595741272
+v 12.577390671 16.376655579 -79.621170044
+v 11.820867538 14.924728394 -79.367866516
+v 10.834849358 14.937757492 -76.813499451
+v 9.841461182 14.988102913 -76.813499451
+v 9.797045708 18.615947723 -76.733764648
+v 9.841461182 14.988102913 -82.813499451
+v 9.841462135 19.003414154 -82.126091003
+v 9.841462135 18.582986832 -82.813499451
+v 9.841462135 19.308965683 -81.378509521
+v 9.841461182 19.494411469 -80.604202271
+v 12.481460571 28.903474808 -86.941497803
+v 15.313100815 28.903474808 -87.490287781
+v 15.296688080 29.545209885 -87.612686157
+v 12.481462479 29.988113403 -86.941497803
+v 12.481456757 27.488113403 -86.941490173
+v 9.841465950 29.988111496 -87.329231262
+v 9.841465950 28.858713150 -87.232696533
+v 9.841465950 27.488111496 -86.941505432
+v 14.277844429 23.393224716 -80.594512939
+v 14.455027580 23.561286926 -81.253829956
+v 12.481463432 24.737924576 -82.387504578
+v 14.723598480 23.582912445 -82.016731262
+v 15.364147186 23.638420105 -83.156723022
+v 9.841465950 26.238111496 -85.852500916
+v 12.481462479 26.238113403 -85.852493286
+v 15.360628128 27.045209885 -87.135848999
+v 15.797599792 25.972791672 -86.195816040
+v 12.481456757 25.488113403 -85.753501892
+v 9.841465950 25.488111496 -85.753494263
+v 15.738739014 25.267404556 -86.186729431
+v 17.516098022 23.335683823 -82.759796143
+v 18.653358459 23.667816162 -83.212455750
+v 18.540206909 24.219396591 -84.522186279
+v 17.128713608 23.555570602 -83.480865479
+v 18.667587280 22.528354645 -83.149971008
+v 18.762870789 23.123046875 -82.676109314
+v 17.769180298 22.723236084 -82.368392944
+v 17.548355103 22.285589218 -82.930236816
+v 18.299018860 21.698566437 -83.135536194
+v 18.299633026 22.112844467 -82.534400940
+v 17.343858719 22.503286362 -82.168144226
+v 17.795085907 20.623046875 -80.934585571
+v 18.047508240 20.899999619 -81.670639038
+v 16.956222534 21.655448914 -81.338508606
+v 18.500097275 21.186233521 -82.271835327
+v 16.428874969 22.516170502 -81.662994385
+v 17.385707855 21.768718719 -81.907676697
+v 18.294757843 20.863731384 -83.381980896
+v 18.220481873 19.797840118 -83.738861084
+v 17.601169586 20.357986450 -80.238296509
+v 15.655702591 22.447345734 -80.161003113
+v 16.550643921 21.352880478 -80.101470947
+v 16.722076416 21.495004654 -80.637100220
+v 15.806715012 22.605678558 -80.663780212
+v 17.070299149 22.044887543 -82.607398987
+v 16.659742355 20.853733063 -82.871192932
+v 15.355899811 20.853733063 -82.468498230
+v 17.451713562 20.503826141 -83.742225647
+v 15.295934677 23.441549301 -82.610466003
+v 15.500967979 23.194305420 -81.540473938
+v 15.980512619 22.986270905 -82.037948608
+v 15.275939941 23.389579773 -80.901260376
+v 15.670108795 23.259626389 -82.971130371
+v 16.010105133 22.582714081 -81.228546143
+v 16.294021606 22.860517502 -82.340133667
+v 17.028942108 23.000946045 -82.523216248
+v 16.547252655 23.328453064 -83.191894531
+v 15.091239929 23.186864853 -80.365119934
+v 13.821267128 20.853733063 -80.128417969
+v 14.063079834 20.853733063 -80.807723999
+v 14.746932030 20.853733063 -82.280418396
+v 14.285540581 20.853733063 -81.432670593
+v 13.734337807 19.252302170 -81.232284546
+v 9.841464996 24.988111496 -82.387512207
+v 10.834851265 20.531061172 -80.823043823
+v 10.370553017 20.662506104 -80.854789734
+v 10.834850311 19.494411469 -80.604202271
+v 11.038027763 19.785186768 -80.656471252
+v 11.038027763 20.192859650 -80.742454529
+v 10.370553017 20.425811768 -81.884399414
+v 10.370553017 20.063232422 -82.764175415
+v 10.834851265 20.294364929 -81.812347412
+v 11.038027763 19.579933167 -81.488693237
+v 11.038027763 20.007087708 -81.676666260
+v 11.038027763 19.668455124 -82.497688293
+v 10.547799110 20.234748840 -84.595985413
+v 15.059513092 20.232875824 -84.595672607
+v 15.059513092 20.371608734 -84.595672607
+v 10.370471001 20.016353607 -84.809814453
+v 14.845148087 20.016353607 -84.811607361
+v 14.552314758 19.252302170 -82.628776550
+v 14.338544846 16.376655579 -82.885971069
+v 16.162754059 19.252302170 -83.525245667
+v 10.834851265 19.003414154 -82.126091003
+v 10.834851265 19.308963776 -81.378509521
+v 11.038027763 19.267770767 -82.289009094
+v 10.834851265 19.106328964 -83.812103271
+v 10.834851265 19.931051254 -82.659362793
+v 10.370553017 19.210620880 -84.008270264
+v 11.038027763 18.965358734 -83.540084839
+v 11.038027763 18.739194870 -83.109741211
+v 10.834850311 18.582986832 -82.813499451
+v 13.707309723 19.186428070 -81.221466064
+v 13.041664124 16.376655579 -80.925430298
+v 13.527381897 14.924728394 -83.489402771
+v 11.570766449 14.924728394 -80.672126770
+v 10.834849358 14.937757492 -82.813499451
+v 17.518198013 19.252302170 -84.293426514
+v 18.020149231 18.335988998 -84.308212280
+v 18.102117538 15.832498550 -85.543647766
+v 18.853557587 15.782326698 -85.912292480
+v 16.129116058 16.376655579 -83.949760437
+v 15.060180664 14.937757492 -84.592330933
+v 17.285715103 16.376655579 -85.060470581
+v 18.787670135 20.662506104 -89.284408569
+v 17.758056641 20.425811768 -89.284408569
+v 16.876522064 20.062496185 -89.284408569
+v 17.848659515 20.294364929 -88.820106506
+v 18.837959290 20.531061172 -88.820106506
+v 18.904026031 20.174222946 -88.616928101
+v 16.581602097 18.719409943 -88.616928101
+v 17.379907608 19.256933212 -88.616928101
+v 17.152332306 19.652805328 -88.616928101
+v 17.003330231 19.931785583 -88.820106506
+v 15.837440491 19.107944489 -88.820106506
+v 16.142333984 18.942138672 -88.616928101
+v 16.841457367 18.582986832 -88.820106506
+v 16.831239700 18.582984924 -89.813499451
+v 17.534702301 19.003414154 -89.813499451
+v 19.056587219 19.494411469 -88.820106506
+v 17.982456207 19.969421387 -88.616928101
+v 18.988279343 19.775114059 -88.616928101
+v 18.154201508 19.579320908 -88.616928101
+v 17.769893646 14.937680244 -86.186363220
+v 16.585369110 14.950710297 -88.610694885
+v 17.534702301 19.003414154 -88.820106506
+v 18.282279968 19.308965683 -89.813499451
+v 19.056587219 19.494411469 -89.813499451
+v 18.282279968 19.308963776 -88.820106506
+v 16.139383316 14.950710297 -88.616928101
+v 10.370471001 15.343950272 -84.809814453
+v 11.038027763 14.937757492 -83.539611816
+v 10.567904472 15.099842072 -84.595870972
+v 15.060180664 15.099842072 -84.592330933
+v 14.845148087 15.343950272 -84.811607361
+v 10.567904472 14.937757492 -84.595870972
+v 10.841497421 14.937757492 -83.816322327
+v 11.038027763 14.937757492 -83.110107422
+v 10.370553017 15.343950272 -84.007942200
+v 10.561665535 15.099841118 -83.927925110
+v 10.561665535 14.937757492 -83.927925110
+v 15.643386841 19.209005356 -89.284408569
+v 14.842651367 20.016441345 -89.284408569
+v 15.058968544 20.371696472 -89.113540649
+v 15.059513092 20.232873917 -89.107162476
+v 15.643715858 15.343961716 -89.284408569
+v 15.838634491 14.950710297 -88.820114136
+v 14.843015671 15.343955994 -89.284484863
+v 15.060181618 14.950710297 -89.087051392
+v 15.060180664 15.099847794 -89.087051392
+v 15.723011017 14.950710297 -89.093292236
+v 15.723011017 15.099852562 -89.093292236
+f 1 2 3
+f 4 5 1
+f 6 7 4
+f 7 8 4
+f 8 9 4
+f 7 10 8
+f 4 1 3
+f 11 12 6
+f 12 13 6
+f 13 14 6
+f 12 15 13
+f 16 17 12
+f 6 18 7
+f 18 19 7
+f 6 20 18
+f 11 6 4
+f 11 16 12
+f 11 21 16
+f 22 23 11
+f 23 24 11
+f 24 25 11
+f 23 26 24
+f 22 27 23
+f 27 28 23
+f 29 30 3
+f 30 31 3
+f 31 22 3
+f 22 4 3
+f 22 11 4
+f 30 32 31
+f 31 33 22
+f 33 34 22
+f 31 35 33
+f 22 36 27
+f 37 38 39
+f 40 39 41
+f 41 42 40
+f 39 40 37
+f 43 44 38
+f 38 37 43
+f 45 46 47
+f 47 48 45
+f 49 46 45
+f 45 50 49
+f 51 52 53
+f 53 50 51
+f 49 54 55
+f 55 56 49
+f 54 49 50
+f 50 53 54
+f 48 47 39
+f 46 49 56
+f 50 45 44
+f 39 47 46
+f 44 45 48
+f 39 38 48
+f 44 51 50
+f 56 41 46
+f 46 41 39
+f 48 38 44
+f 52 57 58
+f 58 53 52
+f 59 55 54
+f 54 60 59
+f 60 54 53
+f 53 58 60
+f 61 58 57
+f 62 59 60
+f 60 63 62
+f 57 64 61
+f 63 60 58
+f 58 61 63
+f 65 66 67
+f 67 68 65
+f 69 70 71
+f 71 72 69
+f 72 71 66
+f 66 65 72
+f 64 73 74
+f 74 61 64
+f 75 62 63
+f 63 76 75
+f 76 63 61
+f 61 74 76
+f 77 75 76
+f 76 78 77
+f 73 79 80
+f 80 74 73
+f 78 76 74
+f 74 80 78
+f 81 82 83
+f 83 84 81
+f 81 85 86
+f 86 82 81
+f 87 77 78
+f 78 85 87
+f 79 88 86
+f 86 80 79
+f 85 78 80
+f 80 86 85
+f 82 86 88
+f 85 81 70
+f 84 83 66
+f 70 81 84
+f 66 83 82
+f 82 67 66
+f 66 71 84
+f 88 67 82
+f 84 71 70
+f 70 87 85
+f 6 14 89
+f 89 90 6
+f 14 13 91
+f 91 89 14
+f 13 15 92
+f 92 91 13
+f 90 89 93
+f 93 94 90
+f 89 91 95
+f 95 93 89
+f 91 92 96
+f 96 95 91
+f 97 98 19
+f 18 20 99
+f 99 97 18
+f 20 6 90
+f 90 99 20
+f 7 19 98
+f 98 100 7
+f 19 18 97
+f 99 90 94
+f 94 101 99
+f 100 98 102
+f 102 103 100
+f 98 97 104
+f 104 102 98
+f 97 99 101
+f 101 104 97
+f 15 12 105
+f 105 92 15
+f 12 17 106
+f 106 105 12
+f 107 106 17
+f 108 96 92
+f 105 106 109
+f 109 108 105
+f 110 109 106
+f 92 105 108
+f 17 16 107
+f 16 21 111
+f 111 107 16
+f 21 11 112
+f 112 111 21
+f 106 107 110
+f 107 111 113
+f 113 110 107
+f 111 112 114
+f 114 113 111
+f 11 25 115
+f 115 112 11
+f 25 24 116
+f 116 115 25
+f 24 26 117
+f 117 116 24
+f 26 23 118
+f 118 117 26
+f 23 28 119
+f 119 118 23
+f 120 121 116
+f 112 115 122
+f 122 114 112
+f 115 116 121
+f 121 122 115
+f 116 117 120
+f 123 124 118
+f 117 118 124
+f 124 120 117
+f 118 119 123
+f 28 27 125
+f 125 119 28
+f 27 36 126
+f 126 125 27
+f 127 126 36
+f 125 126 128
+f 119 125 129
+f 129 123 119
+f 130 128 126
+f 128 129 125
+f 96 108 131
+f 131 132 96
+f 108 109 133
+f 133 131 108
+f 134 133 109
+f 94 93 135
+f 135 136 94
+f 93 95 137
+f 137 135 93
+f 95 96 132
+f 132 137 95
+f 138 139 102
+f 104 101 140
+f 140 138 104
+f 101 94 136
+f 136 140 101
+f 103 102 139
+f 139 141 103
+f 102 104 138
+f 136 135 142
+f 142 143 136
+f 135 137 144
+f 144 142 135
+f 137 132 145
+f 145 144 137
+f 143 142 146
+f 146 147 143
+f 142 144 148
+f 148 146 142
+f 144 145 149
+f 149 148 144
+f 150 151 152
+f 152 153 150
+f 151 143 147
+f 147 152 151
+f 154 155 156
+f 156 157 154
+f 147 146 155
+f 155 154 147
+f 157 156 158
+f 155 159 160
+f 160 156 155
+f 146 148 159
+f 159 155 146
+f 161 158 162
+f 162 158 156
+f 163 164 153
+f 165 166 161
+f 164 163 167
+f 167 168 164
+f 153 152 163
+f 166 165 168
+f 168 167 166
+f 161 166 167
+f 167 157 161
+f 158 161 157
+f 165 161 162
+f 163 154 157
+f 157 167 163
+f 152 147 154
+f 154 163 152
+f 169 145 132
+f 131 133 170
+f 170 169 131
+f 171 170 133
+f 132 131 169
+f 145 169 172
+f 172 149 145
+f 169 170 173
+f 173 172 169
+f 174 173 170
+f 148 149 175
+f 175 159 148
+f 159 175 176
+f 176 160 159
+f 156 160 162
+f 177 162 160
+f 160 176 177
+f 165 162 178
+f 179 175 149
+f 162 180 178
+f 162 177 180
+f 176 181 180
+f 180 177 176
+f 175 179 181
+f 181 176 175
+f 149 172 179
+f 182 181 179
+f 172 173 183
+f 184 180 181
+f 181 182 184
+f 183 179 172
+f 179 183 182
+f 180 184 178
+f 185 182 183
+f 186 183 173
+f 178 184 182
+f 182 185 178
+f 183 186 185
+f 173 174 186
+f 140 136 143
+f 143 151 140
+f 141 139 187
+f 187 188 141
+f 139 138 150
+f 150 187 139
+f 138 140 151
+f 151 150 138
+f 188 187 189
+f 189 190 188
+f 187 150 153
+f 153 189 187
+f 191 192 193
+f 194 193 195
+f 196 195 165
+f 189 153 164
+f 165 197 198
+f 198 168 165
+f 164 199 189
+f 195 197 165
+f 199 164 168
+f 168 198 199
+f 193 198 197
+f 192 199 198
+f 198 193 192
+f 190 189 199
+f 199 192 190
+f 197 195 193
+f 123 129 200
+f 200 201 123
+f 129 128 202
+f 202 200 129
+f 203 202 128
+f 109 110 134
+f 110 113 204
+f 204 134 110
+f 113 114 205
+f 205 204 113
+f 114 122 206
+f 206 205 114
+f 122 121 207
+f 207 206 122
+f 121 120 208
+f 208 207 121
+f 120 124 209
+f 209 208 120
+f 124 123 201
+f 201 209 124
+f 133 134 171
+f 134 204 210
+f 210 171 134
+f 204 205 211
+f 211 210 204
+f 212 213 207
+f 205 206 214
+f 214 211 205
+f 206 207 213
+f 213 214 206
+f 207 208 212
+f 208 209 215
+f 215 212 208
+f 209 201 216
+f 216 215 209
+f 217 218 219
+f 165 178 220
+f 178 221 220
+f 221 217 220
+f 221 218 217
+f 170 171 174
+f 171 210 222
+f 222 174 171
+f 210 211 223
+f 223 222 210
+f 185 224 225
+f 226 186 174
+f 225 178 185
+f 186 226 224
+f 224 185 186
+f 174 222 226
+f 222 223 227
+f 228 225 224
+f 224 229 228
+f 227 226 222
+f 178 228 221
+f 178 225 228
+f 226 227 229
+f 229 224 226
+f 211 214 230
+f 230 223 211
+f 214 213 231
+f 231 230 214
+f 213 212 232
+f 232 231 213
+f 212 215 233
+f 233 232 212
+f 215 216 234
+f 234 233 215
+f 229 235 236
+f 227 237 235
+f 235 229 227
+f 236 228 229
+f 228 236 221
+f 221 236 235
+f 223 230 237
+f 237 227 223
+f 238 237 230
+f 235 239 221
+f 237 238 239
+f 239 235 237
+f 230 231 238
+f 219 239 238
+f 240 238 231
+f 238 240 219
+f 218 221 239
+f 239 219 218
+f 231 232 240
+f 240 241 242
+f 242 219 240
+f 219 242 217
+f 232 233 241
+f 241 240 232
+f 201 200 243
+f 243 216 201
+f 244 243 200
+f 200 202 244
+f 245 244 202
+f 216 243 246
+f 246 234 216
+f 243 244 247
+f 247 246 243
+f 248 247 244
+f 249 241 233
+f 242 250 251
+f 251 217 242
+f 217 251 220
+f 241 249 250
+f 250 242 241
+f 233 234 249
+f 234 246 252
+f 252 249 234
+f 220 251 250
+f 250 253 220
+f 249 252 253
+f 253 250 249
+f 252 254 255
+f 255 253 252
+f 246 247 254
+f 254 252 246
+f 256 220 253
+f 253 255 256
+f 220 256 257
+f 258 254 247
+f 259 255 254
+f 257 256 255
+f 9 8 260
+f 8 10 261
+f 261 260 8
+f 10 7 100
+f 100 261 10
+f 260 262 9
+f 263 264 5
+f 4 9 262
+f 262 263 4
+f 5 4 263
+f 262 260 265
+f 260 261 266
+f 266 265 260
+f 261 100 103
+f 103 266 261
+f 263 262 267
+f 267 268 263
+f 268 269 264
+f 265 267 262
+f 264 263 268
+f 3 2 270
+f 270 271 3
+f 2 1 272
+f 272 270 2
+f 5 264 1
+f 264 272 1
+f 3 271 29
+f 270 272 273
+f 273 274 270
+f 272 264 269
+f 269 273 272
+f 271 270 274
+f 275 271 276
+f 274 276 271
+f 31 32 277
+f 277 278 31
+f 32 30 279
+f 279 277 32
+f 30 29 275
+f 275 279 30
+f 271 275 29
+f 278 277 280
+f 280 281 278
+f 277 279 282
+f 282 280 277
+f 279 275 283
+f 283 282 279
+f 276 283 275
+f 284 285 34
+f 36 22 127
+f 22 34 285
+f 285 127 22
+f 33 35 286
+f 35 31 278
+f 278 286 35
+f 286 284 33
+f 34 33 284
+f 287 130 127
+f 288 287 285
+f 126 127 130
+f 127 285 287
+f 289 288 284
+f 286 278 281
+f 285 284 288
+f 281 289 286
+f 284 286 289
+f 290 291 274
+f 269 292 273
+f 292 290 273
+f 276 274 291
+f 291 293 276
+f 274 273 290
+f 293 294 276
+f 267 265 295
+f 265 266 296
+f 296 295 265
+f 266 103 141
+f 141 296 266
+f 295 297 267
+f 298 292 269
+f 268 267 297
+f 297 298 268
+f 269 268 298
+f 297 295 299
+f 295 296 300
+f 300 299 295
+f 296 141 188
+f 188 300 296
+f 299 301 297
+f 292 298 302
+f 302 303 292
+f 298 297 301
+f 301 302 298
+f 303 304 290
+f 305 306 304
+f 291 290 304
+f 304 306 291
+f 290 292 303
+f 301 299 307
+f 307 308 301
+f 299 300 309
+f 309 307 299
+f 300 188 190
+f 190 309 300
+f 310 196 311
+f 195 310 194
+f 312 196 165
+f 196 310 195
+f 313 191 194
+f 307 309 191
+f 193 194 191
+f 309 190 192
+f 192 191 309
+f 311 194 310
+f 308 307 313
+f 191 313 307
+f 313 314 308
+f 314 313 311
+f 194 311 313
+f 315 311 196
+f 311 315 314
+f 196 316 315
+f 317 316 196
+f 318 304 319
+f 304 303 319
+f 303 302 320
+f 320 319 303
+f 302 301 308
+f 308 320 302
+f 321 322 323
+f 312 317 196
+f 324 323 319
+f 312 325 317
+f 317 325 322
+f 320 308 314
+f 324 314 315
+f 315 321 324
+f 316 317 321
+f 321 315 316
+f 319 320 324
+f 322 321 317
+f 314 324 320
+f 323 324 321
+f 326 322 325
+f 322 326 327
+f 318 319 323
+f 323 327 318
+f 327 323 322
+f 326 328 329
+f 330 318 327
+f 312 331 328
+f 328 326 312
+f 329 328 332
+f 327 329 330
+f 318 330 333
+f 329 327 326
+f 334 335 44
+f 335 334 336
+f 336 337 335
+f 44 43 334
+f 42 41 338
+f 339 338 333
+f 333 330 339
+f 338 339 42
+f 42 339 334
+f 330 332 339
+f 332 330 329
+f 42 43 37
+f 37 40 42
+f 334 43 42
+f 340 305 333
+f 340 306 305
+f 341 306 340
+f 56 55 342
+f 333 305 304
+f 343 344 335
+f 335 344 51
+f 51 44 335
+f 344 345 52
+f 52 51 344
+f 346 345 344
+f 344 343 346
+f 335 337 343
+f 347 348 64
+f 64 57 347
+f 349 348 347
+f 345 346 350
+f 347 350 349
+f 350 347 345
+f 345 347 57
+f 57 52 345
+f 342 351 352
+f 352 341 342
+f 353 306 341
+f 341 352 353
+f 342 55 59
+f 59 351 342
+f 306 353 293
+f 294 293 353
+f 353 354 294
+f 293 291 306
+f 354 353 352
+f 62 355 351
+f 351 355 356
+f 356 352 351
+f 351 59 62
+f 352 356 354
+f 342 357 56
+f 41 56 357
+f 357 338 41
+f 338 357 340
+f 340 333 338
+f 357 342 341
+f 341 340 357
+f 333 304 318
+f 358 328 331
+f 332 328 358
+f 281 280 359
+f 359 360 281
+f 280 282 361
+f 361 359 280
+f 282 283 362
+f 362 361 282
+f 276 294 283
+f 294 362 283
+f 363 203 130
+f 364 363 287
+f 128 130 203
+f 130 287 363
+f 365 364 288
+f 289 281 360
+f 360 365 289
+f 287 288 364
+f 288 289 365
+f 325 312 326
+f 312 165 220
+f 366 331 312
+f 356 367 368
+f 355 62 75
+f 75 369 355
+f 355 369 367
+f 367 356 355
+f 339 332 370
+f 334 339 371
+f 372 336 334
+f 331 366 358
+f 366 373 374
+f 374 358 366
+f 375 376 377
+f 377 378 375
+f 376 375 358
+f 378 377 379
+f 358 374 376
+f 334 380 372
+f 370 371 339
+f 371 380 334
+f 358 370 332
+f 361 362 368
+f 368 381 361
+f 381 368 367
+f 362 294 354
+f 368 354 356
+f 354 368 362
+f 67 88 382
+f 383 382 88
+f 382 384 385
+f 385 386 382
+f 88 79 383
+f 383 387 384
+f 384 382 383
+f 382 386 67
+f 388 367 369
+f 369 389 388
+f 367 388 381
+f 369 75 77
+f 77 389 369
+f 79 73 390
+f 390 391 387
+f 387 383 390
+f 348 390 73
+f 348 349 391
+f 73 64 348
+f 390 383 79
+f 391 390 348
+f 359 361 381
+f 381 379 359
+f 360 359 379
+f 379 392 360
+f 381 393 379
+f 389 77 87
+f 394 381 388
+f 393 395 379
+f 394 395 393
+f 381 394 393
+f 203 363 396
+f 202 203 245
+f 396 245 203
+f 397 396 363
+f 398 397 364
+f 392 398 365
+f 365 360 392
+f 363 364 397
+f 364 365 398
+f 373 366 399
+f 366 312 399
+f 312 400 399
+f 312 220 400
+f 244 245 248
+f 245 396 401
+f 401 248 245
+f 396 397 402
+f 402 401 396
+f 403 258 248
+f 247 248 258
+f 404 259 258
+f 220 257 400
+f 255 259 257
+f 405 257 259
+f 259 404 405
+f 254 258 259
+f 248 401 403
+f 257 405 400
+f 258 403 404
+f 400 405 404
+f 406 403 401
+f 403 406 407
+f 404 407 400
+f 401 402 406
+f 407 404 403
+f 397 398 408
+f 408 402 397
+f 398 392 409
+f 409 408 398
+f 392 379 377
+f 377 409 392
+f 373 399 410
+f 411 412 410
+f 399 413 414
+f 414 410 399
+f 400 413 399
+f 411 406 402
+f 406 411 414
+f 414 407 406
+f 407 414 413
+f 402 408 411
+f 413 400 407
+f 376 412 409
+f 374 410 412
+f 409 377 376
+f 410 374 373
+f 412 376 374
+f 408 409 412
+f 412 411 408
+f 410 414 411
+f 389 415 394
+f 394 388 389
+f 415 416 395
+f 379 395 378
+f 87 415 389
+f 395 394 415
+f 415 87 70
+f 70 416 415
+f 68 67 386
+f 385 372 380
+f 380 386 385
+f 416 371 378
+f 416 70 69
+f 69 371 416
+f 378 395 416
+f 386 380 68
+f 378 370 358
+f 68 69 72
+f 72 65 68
+f 370 378 371
+f 358 375 378
+f 69 68 380
+f 380 371 69
+f 417 418 419
+f 420 421 418
+f 422 423 421
+f 424 425 423
+f 426 427 425
+f 428 429 427
+f 430 431 429
+f 432 433 431
+f 418 417 420
+f 427 426 428
+f 423 422 424
+f 429 428 430
+f 421 420 422
+f 431 430 432
+f 425 424 426
+f 433 432 434
+f 435 436 437
+f 438 436 435
+f 439 437 436
+f 437 439 440
+f 429 438 435
+f 438 429 431
+f 441 442 443
+f 441 433 442
+f 444 436 445
+f 438 445 436
+f 446 445 438
+f 446 433 441
+f 431 446 438
+f 446 431 433
+f 384 447 448
+f 436 444 439
+f 385 384 448
+f 447 449 450
+f 384 387 447
+f 448 450 451
+f 450 448 447
+f 440 452 437
+f 453 437 452
+f 435 437 453
+f 452 440 454
+f 427 435 453
+f 435 427 429
+f 454 455 452
+f 456 452 455
+f 425 453 456
+f 453 425 427
+f 453 452 456
+f 455 454 457
+f 458 459 460
+f 387 391 459
+f 387 459 447
+f 449 447 459
+f 459 458 449
+f 391 460 459
+f 461 460 462
+f 349 462 460
+f 391 349 460
+f 460 461 458
+f 457 458 461
+f 449 454 440
+f 454 449 458
+f 450 440 439
+f 440 450 449
+f 451 439 444
+f 439 451 450
+f 458 457 454
+f 463 464 451
+f 465 372 464
+f 448 464 372
+f 466 467 468
+f 469 470 466
+f 468 471 466
+f 470 472 467
+f 467 466 470
+f 466 471 469
+f 469 471 468
+f 451 464 448
+f 444 445 469
+f 444 463 451
+f 372 385 448
+f 470 445 446
+f 441 470 446
+f 445 470 469
+f 473 444 469
+f 473 463 444
+f 470 441 472
+f 474 455 475
+f 456 455 474
+f 475 457 476
+f 457 475 455
+f 423 456 474
+f 456 423 425
+f 477 475 478
+f 474 475 477
+f 421 474 477
+f 474 421 423
+f 478 476 479
+f 476 478 475
+f 480 462 481
+f 476 461 480
+f 461 476 457
+f 462 480 461
+f 350 481 462
+f 349 350 462
+f 479 480 482
+f 482 481 483
+f 483 484 482
+f 346 343 483
+f 346 483 481
+f 350 346 481
+f 481 482 480
+f 480 479 476
+f 485 479 486
+f 479 485 478
+f 487 478 485
+f 418 477 487
+f 477 418 421
+f 477 478 487
+f 484 483 488
+f 488 489 484
+f 482 486 479
+f 486 482 484
+f 343 488 483
+f 484 490 486
+f 491 485 492
+f 487 419 418
+f 487 485 491
+f 490 484 489
+f 492 486 490
+f 486 492 485
+f 493 419 491
+f 493 494 419
+f 419 487 491
+f 493 495 494
+f 372 465 336
+f 337 336 465
+f 496 497 465
+f 498 489 496
+f 499 491 492
+f 489 498 490
+f 490 499 492
+f 500 491 501
+f 491 500 493
+f 491 499 501
+f 499 490 498
+f 337 497 488
+f 343 337 488
+f 489 488 497
+f 497 496 489
+f 465 497 337
+f 499 502 503
+f 503 502 504
+f 505 504 500
+f 504 505 503
+f 503 505 499
+f 499 505 501
+f 500 501 505
+f 506 442 433
+f 507 443 442
+f 508 441 443
+f 433 434 506
+f 442 506 507
+f 443 507 508
+f 472 508 509
+f 463 473 510
+f 469 468 511
+f 512 467 472
+f 508 472 441
+f 473 469 513
+f 464 463 514
+f 515 468 467
+f 511 513 469
+f 510 514 463
+f 513 510 473
+f 515 511 468
+f 514 516 464
+f 467 512 515
+f 472 509 512
+f 499 498 517
+f 518 500 504
+f 502 499 519
+f 498 496 520
+f 465 464 516
+f 496 465 521
+f 522 504 502
+f 516 521 465
+f 520 517 498
+f 502 519 522
+f 517 519 499
+f 521 520 496
+f 504 522 518
+f 494 523 417
+f 493 524 525
+f 495 525 523
+f 493 518 524
+f 518 493 500
+f 525 495 493
+f 417 419 494
+f 523 494 495
+f 508 506 434
+f 508 507 506
+f 508 434 526
+f 434 527 526
+f 526 528 529
+f 527 528 526
+f 530 529 528
+f 531 532 533
+f 527 434 432
+f 529 530 531
+f 534 528 535
+f 527 535 528
+f 536 535 527
+f 528 534 530
+f 432 536 527
+f 536 432 430
+f 532 531 530
+f 537 538 539
+f 540 530 534
+f 532 539 538
+f 538 533 532
+f 530 540 532
+f 535 541 534
+f 541 535 542
+f 536 542 535
+f 430 543 536
+f 543 430 428
+f 543 542 536
+f 544 542 545
+f 428 546 543
+f 546 428 426
+f 542 544 541
+f 543 545 542
+f 546 545 543
+f 534 547 540
+f 548 539 549
+f 550 548 549
+f 540 549 539
+f 539 532 540
+f 549 540 547
+f 547 534 541
+f 548 537 539
+f 551 550 552
+f 547 552 549
+f 553 541 544
+f 541 553 547
+f 550 549 552
+f 552 547 553
+f 510 554 514
+f 514 555 516
+f 556 555 514
+f 513 533 510
+f 533 513 531
+f 511 526 529
+f 509 526 557
+f 526 509 508
+f 531 511 529
+f 526 511 557
+f 511 531 513
+f 514 554 556
+f 556 554 538
+f 533 538 554
+f 537 556 538
+f 554 510 533
+f 558 515 512
+f 512 559 558
+f 509 557 559
+f 559 512 509
+f 515 558 511
+f 559 557 511
+f 511 558 559
+f 545 560 544
+f 560 545 561
+f 426 562 546
+f 562 426 424
+f 546 561 545
+f 562 561 546
+f 424 563 562
+f 563 424 422
+f 561 564 560
+f 564 561 565
+f 562 565 561
+f 563 565 562
+f 551 552 566
+f 567 551 566
+f 566 553 568
+f 553 566 552
+f 544 568 553
+f 568 544 560
+f 567 566 569
+f 570 567 569
+f 570 569 571
+f 568 569 566
+f 572 560 564
+f 560 572 568
+f 572 571 569
+f 569 568 572
+f 573 565 574
+f 422 575 563
+f 575 422 420
+f 565 573 564
+f 563 574 565
+f 575 574 563
+f 576 564 573
+f 574 577 573
+f 578 570 571
+f 564 576 572
+f 573 579 576
+f 576 580 571
+f 571 572 576
+f 577 574 581
+f 575 581 574
+f 582 581 575
+f 579 573 577
+f 420 582 575
+f 582 420 417
+f 524 417 523
+f 524 523 525
+f 582 417 524
+f 521 516 579
+f 580 516 583
+f 583 516 555
+f 520 521 577
+f 584 581 582
+f 577 581 517
+f 524 584 582
+f 584 524 518
+f 583 585 580
+f 578 571 580
+f 585 578 580
+f 579 516 580
+f 577 521 579
+f 580 576 579
+f 520 577 517
+f 581 584 517
+f 519 586 587
+f 517 586 519
+f 517 587 586
+f 584 518 522
+f 517 584 587
+f 522 587 584
+f 587 522 519
+f 588 589 590
+f 591 592 593
+f 593 589 591
+f 594 591 589
+f 589 588 594
+f 595 596 592
+f 592 591 595
+f 597 598 599
+f 590 600 599
+f 599 598 590
+f 589 593 600
+f 600 590 589
+f 590 601 588
+f 602 597 603
+f 602 598 597
+f 601 590 598
+f 598 602 601
+f 594 604 605
+f 606 604 607
+f 604 594 588
+f 588 607 604
+f 608 595 591
+f 591 594 608
+f 605 608 594
+f 609 610 611
+f 612 610 609
+f 610 612 596
+f 596 595 610
+f 611 610 595
+f 609 611 613
+f 613 611 614
+f 595 608 611
+f 614 611 608
+f 608 605 614
+f 615 616 617
+f 618 616 615
+f 618 614 616
+f 613 614 618
+f 615 617 619
+f 616 614 605
+f 605 620 616
+f 617 616 620
+f 621 622 623
+f 620 605 604
+f 604 606 620
+f 622 620 606
+f 606 623 622
+f 620 622 617
+f 619 624 625
+f 619 617 624
+f 626 627 628
+f 626 629 627
+f 625 629 626
+f 625 624 629
+f 624 617 622
+f 630 621 631
+f 622 621 624
+f 629 624 621
+f 621 630 629
+f 627 629 630
+f 630 632 627
+f 607 633 606
+f 623 606 633
+f 633 634 623
+f 633 607 635
+f 634 633 636
+f 636 637 634
+f 638 603 639
+f 602 638 635
+f 638 602 603
+f 640 639 641
+f 640 638 639
+f 637 636 640
+f 635 601 602
+f 636 635 638
+f 638 640 636
+f 607 588 601
+f 601 635 607
+f 635 636 633
+f 642 643 644
+f 644 645 642
+f 637 646 647
+f 643 647 646
+f 646 644 643
+f 647 634 637
+f 648 649 650
+f 640 651 637
+f 646 637 651
+f 651 650 646
+f 644 646 650
+f 651 641 648
+f 651 640 641
+f 648 650 651
+f 652 650 649
+f 652 653 650
+f 654 652 655
+f 650 653 644
+f 654 653 652
+f 645 644 653
+f 653 654 645
+f 643 642 656
+f 631 623 634
+f 657 631 647
+f 634 647 631
+f 647 643 657
+f 656 657 643
+f 632 630 657
+f 623 631 621
+f 657 656 632
+f 631 657 630
+f 658 659 660
+f 661 593 592
+f 662 659 663
+f 663 661 662
+f 659 658 664
+f 664 663 659
+f 662 592 596
+f 592 662 661
+f 665 666 667
+f 668 669 665
+f 670 669 668
+f 668 603 597
+f 597 670 668
+f 593 661 671
+f 671 600 593
+f 661 663 672
+f 672 671 661
+f 663 664 673
+f 673 672 663
+f 672 673 674
+f 674 675 672
+f 600 671 676
+f 676 599 600
+f 671 672 675
+f 675 676 671
+f 674 676 675
+f 674 599 676
+f 670 599 674
+f 670 597 599
+f 677 673 664
+f 678 664 658
+f 679 658 680
+f 681 679 682
+f 681 683 684
+f 684 685 681
+f 679 681 685
+f 685 678 679
+f 658 679 678
+f 673 677 686
+f 687 674 686
+f 687 669 670
+f 686 674 673
+f 674 687 670
+f 688 689 684
+f 678 685 690
+f 664 678 677
+f 685 684 689
+f 689 690 685
+f 690 677 678
+f 691 686 677
+f 692 691 693
+f 693 694 692
+f 687 686 691
+f 691 692 687
+f 695 694 693
+f 695 687 692
+f 695 689 688
+f 695 693 689
+f 690 689 693
+f 688 684 696
+f 693 691 690
+f 677 690 691
+f 692 694 695
+f 666 696 697
+f 688 666 695
+f 688 696 666
+f 696 698 697
+f 697 698 699
+f 669 687 695
+f 667 697 700
+f 666 665 669
+f 556 537 699
+f 666 669 695
+f 699 700 697
+f 697 667 666
+f 612 701 702
+f 701 703 660
+f 703 704 680
+f 704 701 612
+f 704 703 701
+f 705 612 609
+f 706 707 708
+f 709 710 706
+f 705 708 707
+f 711 708 705
+f 707 706 710
+f 705 707 712
+f 713 714 715
+f 716 717 710
+f 717 716 718
+f 710 719 707
+f 719 710 717
+f 715 718 716
+f 718 715 714
+f 680 660 703
+f 702 660 659
+f 659 662 702
+f 682 680 704
+f 702 596 612
+f 660 680 658
+f 660 702 701
+f 596 702 662
+f 704 612 712
+f 612 705 712
+f 712 707 719
+f 712 720 704
+f 721 722 723
+f 722 724 725
+f 726 724 722
+f 727 724 726
+f 722 728 726
+f 720 725 724
+f 683 681 729
+f 682 729 681
+f 680 682 679
+f 721 729 727
+f 729 682 720
+f 723 683 721
+f 729 721 683
+f 722 712 719
+f 712 722 725
+f 722 717 723
+f 704 720 682
+f 717 722 719
+f 720 712 725
+f 714 730 718
+f 730 714 731
+f 731 714 713
+f 713 732 731
+f 718 723 717
+f 723 718 730
+f 727 728 721
+f 720 727 729
+f 728 722 721
+f 724 727 720
+f 726 728 727
+f 609 711 705
+f 711 609 613
+f 613 733 711
+f 711 734 708
+f 733 734 711
+f 735 708 734
+f 733 613 618
+f 710 709 716
+f 736 713 715
+f 737 716 709
+f 716 737 715
+f 736 715 737
+f 738 736 737
+f 708 735 706
+f 739 706 735
+f 706 739 709
+f 740 709 739
+f 709 740 737
+f 738 737 740
+f 741 738 740
+f 723 730 683
+f 684 683 742
+f 683 730 743
+f 744 742 743
+f 743 745 744
+f 746 744 745
+f 747 746 748
+f 743 742 683
+f 745 748 746
+f 733 749 734
+f 734 750 735
+f 750 734 749
+f 751 749 733
+f 618 751 733
+f 751 618 615
+f 739 752 740
+f 753 741 752
+f 741 740 752
+f 735 754 739
+f 754 735 750
+f 752 739 754
+f 615 755 751
+f 755 615 619
+f 619 756 755
+f 757 754 758
+f 754 757 752
+f 753 752 757
+f 759 753 757
+f 758 750 760
+f 750 758 754
+f 751 761 749
+f 755 761 751
+f 755 762 761
+f 749 760 750
+f 760 749 761
+f 761 763 760
+f 760 764 758
+f 759 757 765
+f 766 759 765
+f 764 760 763
+f 765 758 764
+f 758 765 757
+f 756 619 625
+f 625 767 756
+f 767 625 626
+f 756 762 755
+f 756 768 762
+f 767 768 756
+f 763 761 762
+f 762 769 763
+f 769 762 768
+f 770 764 771
+f 764 770 765
+f 766 765 770
+f 772 766 770
+f 763 771 764
+f 771 763 769
+f 773 774 775
+f 776 773 777
+f 774 627 632
+f 632 775 774
+f 775 777 773
+f 777 778 776
+f 771 779 770
+f 768 780 769
+f 767 781 768
+f 772 770 779
+f 779 771 782
+f 782 769 780
+f 769 782 771
+f 783 628 784
+f 784 785 786
+f 784 628 785
+f 784 773 776
+f 784 786 773
+f 786 774 773
+f 786 785 774
+f 628 774 785
+f 628 627 774
+f 780 768 781
+f 783 781 767
+f 626 783 767
+f 783 626 628
+f 748 778 747
+f 778 777 787
+f 787 747 778
+f 777 775 788
+f 788 787 777
+f 775 632 656
+f 656 788 775
+f 731 789 790
+f 789 731 732
+f 730 791 743
+f 791 731 790
+f 791 730 731
+f 792 793 745
+f 745 743 792
+f 793 794 748
+f 748 745 793
+f 778 748 794
+f 795 743 796
+f 795 792 743
+f 794 776 778
+f 793 797 798
+f 792 795 799
+f 793 798 794
+f 792 797 793
+f 792 799 797
+f 789 800 779
+f 780 791 782
+f 782 790 779
+f 800 772 779
+f 796 743 791
+f 779 790 789
+f 796 791 780
+f 791 790 782
+f 780 781 795
+f 794 784 776
+f 794 798 784
+f 801 781 783
+f 781 801 795
+f 796 780 795
+f 784 801 783
+f 801 784 798
+f 799 802 803
+f 801 798 797
+f 797 803 801
+f 803 802 795
+f 803 797 799
+f 795 801 803
+f 795 802 799
+f 668 665 804
+f 667 805 665
+f 805 667 806
+f 603 668 804
+f 700 806 667
+f 804 665 805
+f 806 807 805
+f 808 805 807
+f 804 805 808
+f 807 806 809
+f 639 804 808
+f 804 639 603
+f 537 548 810
+f 537 810 699
+f 810 811 700
+f 811 810 812
+f 700 699 810
+f 548 812 810
+f 813 812 814
+f 550 814 812
+f 806 700 811
+f 812 813 811
+f 548 550 812
+f 811 809 806
+f 809 811 813
+f 815 809 816
+f 817 807 815
+f 808 807 817
+f 641 808 817
+f 808 641 639
+f 809 815 807
+f 648 817 818
+f 817 648 641
+f 817 815 818
+f 816 819 815
+f 818 815 819
+f 819 816 820
+f 551 821 814
+f 550 551 814
+f 814 822 813
+f 822 814 821
+f 816 813 822
+f 813 816 809
+f 821 823 822
+f 823 821 824
+f 567 824 821
+f 822 820 816
+f 820 822 823
+f 551 567 821
+f 825 698 696
+f 555 556 699
+f 699 698 555
+f 826 555 698
+f 825 826 698
+f 827 828 825
+f 555 826 583
+f 827 825 696
+f 829 819 830
+f 818 819 829
+f 649 818 829
+f 818 649 648
+f 823 831 820
+f 830 820 831
+f 820 830 819
+f 829 830 832
+f 833 831 834
+f 832 830 833
+f 831 833 830
+f 829 652 649
+f 835 824 836
+f 570 578 836
+f 570 836 824
+f 567 570 824
+f 831 823 835
+f 824 835 823
+f 837 836 838
+f 835 834 831
+f 834 835 837
+f 838 839 837
+f 578 838 836
+f 578 585 838
+f 836 837 835
+f 585 840 838
+f 841 833 842
+f 839 838 840
+f 837 843 834
+f 843 837 839
+f 842 834 843
+f 834 842 833
+f 655 832 841
+f 832 655 652
+f 652 829 832
+f 832 833 841
+f 844 845 846
+f 847 655 846
+f 847 654 655
+f 848 846 845
+f 848 847 846
+f 849 845 844
+f 849 848 845
+f 844 846 655
+f 844 655 841
+f 850 849 844
+f 851 852 853
+f 853 854 851
+f 855 856 852
+f 852 851 855
+f 853 852 857
+f 857 854 853
+f 857 852 856
+f 857 858 854
+f 851 850 855
+f 858 857 828
+f 858 851 854
+f 851 859 850
+f 858 859 851
+f 826 840 585
+f 585 583 826
+f 840 825 839
+f 825 840 826
+f 839 828 843
+f 828 839 825
+f 850 844 855
+f 857 841 842
+f 841 857 856
+f 843 857 842
+f 857 843 828
+f 855 841 856
+f 841 855 844
+f 860 861 848
+f 848 849 860
+f 861 862 847
+f 847 848 861
+f 862 645 654
+f 654 847 862
+f 863 860 849
+f 827 864 859
+f 859 858 827
+f 864 863 850
+f 858 828 827
+f 849 850 863
+f 850 859 864
+f 696 684 865
+f 742 865 684
+f 865 827 696
+f 865 866 864
+f 866 867 863
+f 868 642 645
+f 645 862 868
+f 869 870 861
+f 861 860 869
+f 870 868 862
+f 862 861 870
+f 867 869 860
+f 863 864 866
+f 864 827 865
+f 860 863 867
+f 747 787 870
+f 787 788 868
+f 868 870 787
+f 870 869 747
+f 788 656 642
+f 642 868 788
+f 746 747 869
+f 744 746 867
+f 867 866 744
+f 866 865 742
+f 869 867 746
+f 742 744 866
+f 871 872 873
+f 872 871 874
+f 874 875 872
+f 875 874 876
+f 876 877 875
+f 877 876 878
+f 878 879 877
+f 879 878 880
+f 880 881 879
+f 881 880 882
+f 882 883 881
+f 883 882 884
+f 884 885 883
+f 885 884 886
+f 886 887 885
+f 887 886 888
+f 889 890 891
+f 892 891 893
+f 890 889 894
+f 895 893 891
+f 891 890 895
+f 894 896 897
+f 898 899 900
+f 901 871 898
+f 898 871 899
+f 902 903 904
+f 904 905 902
+f 905 904 906
+f 903 902 893
+f 907 876 874
+f 901 874 871
+f 905 908 909
+f 902 909 910
+f 911 878 876
+f 876 907 911
+f 909 902 905
+f 908 905 912
+f 896 894 889
+f 891 913 889
+f 913 891 892
+f 914 889 913
+f 889 914 896
+f 907 915 911
+f 911 915 916
+f 916 896 914
+f 896 916 915
+f 893 910 892
+f 910 893 902
+f 906 912 905
+f 917 918 912
+f 912 918 908
+f 919 909 908
+f 908 920 919
+f 921 919 920
+f 920 922 921
+f 923 880 878
+f 919 921 924
+f 925 926 927
+f 923 926 925
+f 880 923 925
+f 922 920 928
+f 913 929 914
+f 929 913 930
+f 926 914 929
+f 914 926 916
+f 892 930 913
+f 930 892 931
+f 931 892 910
+f 930 932 929
+f 932 930 933
+f 927 929 932
+f 929 927 926
+f 934 931 935
+f 931 933 930
+f 933 931 934
+f 935 910 909
+f 924 935 919
+f 928 936 922
+f 918 928 920
+f 937 936 928
+f 938 937 928
+f 917 938 918
+f 938 928 918
+f 910 935 931
+f 935 924 934
+f 909 919 935
+f 920 908 918
+f 878 911 923
+f 923 916 926
+f 911 916 923
+f 939 898 900
+f 900 940 939
+f 941 899 871
+f 871 873 941
+f 940 900 899
+f 899 941 940
+f 939 942 898
+f 943 944 945
+f 946 943 945
+f 947 946 945
+f 945 948 949
+f 944 948 945
+f 950 949 942
+f 897 951 944
+f 897 946 894
+f 894 947 890
+f 952 951 901
+f 898 952 901
+f 953 895 890
+f 893 895 903
+f 897 915 951
+f 954 904 903
+f 907 951 915
+f 901 951 907
+f 874 901 907
+f 915 897 896
+f 955 903 895
+f 956 906 904
+f 957 912 906
+f 958 957 906
+f 957 917 912
+f 959 958 906
+f 904 954 956
+f 903 955 954
+f 943 897 944
+f 943 946 897
+f 952 898 942
+f 951 952 944
+f 944 960 948
+f 948 960 961
+f 952 942 949
+f 944 952 961
+f 949 961 952
+f 961 949 948
+f 944 961 960
+f 890 947 953
+f 895 953 955
+f 906 956 959
+f 946 947 894
+f 954 955 953
+f 953 956 954
+f 962 953 947
+f 959 956 963
+f 964 956 953
+f 953 962 964
+f 947 965 962
+f 964 963 956
+f 966 967 968
+f 968 967 945
+f 969 968 950
+f 970 969 971
+f 972 968 969
+f 887 970 939
+f 970 973 974
+f 970 887 973
+f 877 879 881
+f 881 883 875
+f 883 885 872
+f 885 887 873
+f 939 873 887
+f 939 941 873
+f 939 940 941
+f 875 877 881
+f 872 875 883
+f 873 872 885
+f 971 939 970
+f 887 888 975
+f 975 973 887
+f 976 974 973
+f 973 975 976
+f 977 970 974
+f 974 976 977
+f 977 969 970
+f 968 972 966
+f 978 979 967
+f 980 965 967
+f 966 978 967
+f 969 981 972
+f 965 947 967
+f 979 980 967
+f 969 977 981
+f 945 967 947
+f 945 950 968
+f 950 971 969
+f 949 950 945
+f 942 939 971
+f 942 971 950
+f 982 983 984
+f 985 986 987
+f 984 985 982
+f 987 982 985
+f 988 927 989
+f 925 927 988
+f 932 989 927
+f 882 925 988
+f 988 989 990
+f 991 921 922
+f 922 992 991
+f 983 991 992
+f 992 984 983
+f 988 884 882
+f 925 882 880
+f 993 924 921
+f 994 993 991
+f 936 995 992
+f 995 996 984
+f 991 983 994
+f 992 922 936
+f 984 992 995
+f 921 991 993
+f 997 998 999
+f 998 997 1000
+f 990 989 1001
+f 1000 997 993
+f 999 1002 1003
+f 1002 999 998
+f 1001 1003 1002
+f 1003 1001 989
+f 989 932 1003
+f 997 934 924
+f 934 999 933
+f 999 934 997
+f 933 1003 932
+f 1003 933 999
+f 1004 995 936
+f 937 1004 936
+f 1005 996 995
+f 1004 1005 995
+f 924 993 997
+f 993 994 1000
+f 996 1006 985
+f 1006 1007 986
+f 1005 1008 996
+f 1009 1010 982
+f 1010 994 983
+f 1011 1001 1012
+f 1012 1002 1013
+f 1002 1012 1001
+f 998 1013 1002
+f 990 1001 1011
+f 1014 1000 1015
+f 1013 998 1014
+f 1015 1000 994
+f 1000 1014 998
+f 977 975 888
+f 977 976 975
+f 888 1011 1016
+f 977 888 1016
+f 1010 1009 1017
+f 1017 1015 1010
+f 1015 1018 1014
+f 1018 1015 1017
+f 1019 1014 1018
+f 994 1010 1015
+f 886 990 1011
+f 990 886 884
+f 884 988 990
+f 985 984 996
+f 986 985 1006
+f 982 987 1009
+f 983 982 1010
+f 1011 888 886
+f 962 1009 987
+f 1008 1006 996
+f 1020 986 1007
+f 1021 1007 1006
+f 1008 1021 1006
+f 1022 987 986
+f 1011 1012 1016
+f 1023 1013 1019
+f 1013 1023 1012
+f 1014 1019 1013
+f 1016 1012 1023
+f 964 1007 1021
+f 986 1020 1022
+f 1017 980 1018
+f 965 1017 1009
+f 987 1022 962
+f 1018 979 1019
+f 1019 978 1023
+f 978 1016 1023
+f 1016 981 977
+f 1016 978 1024
+f 979 1018 980
+f 978 1019 979
+f 981 1016 1024
+f 1021 963 964
+f 1009 962 965
+f 1022 1020 964
+f 1007 964 1020
+f 980 1017 965
+f 964 962 1022
+f 1025 972 981
+f 981 1024 1025
+f 1025 1024 978
+f 978 1026 1025
+f 1026 966 972
+f 966 1026 978
+f 972 1025 1026
+f 1027 1028 1029
+f 1030 1031 1032
+f 1032 1029 1030
+f 1033 1029 1028
+f 1034 1030 1029
+f 1029 1033 1034
+f 1029 1032 1027
+f 1027 1035 1036
+f 1032 1037 1035
+f 1035 1027 1032
+f 1031 1038 1037
+f 1037 1032 1031
+f 1028 1027 1039
+f 1040 1034 1033
+f 1033 1041 1040
+f 1042 1041 1043
+f 1044 1040 1041
+f 1028 1045 1033
+f 1043 1045 1046
+f 1047 1043 1048
+f 1041 1033 1045
+f 1045 1043 1041
+f 1045 1028 1049
+f 1049 1046 1045
+f 1036 1039 1027
+f 1039 1049 1028
+f 1039 1036 1050
+f 1046 1048 1043
+f 1051 1048 1050
+f 1049 1039 1050
+f 1046 1049 1050
+f 1048 1046 1050
+f 1043 1047 1042
+f 1041 1042 1044
+f 1052 1047 1051
+f 1053 1042 1047
+f 1047 1052 1053
+f 1054 1044 1042
+f 1042 1053 1054
+f 1055 1053 1052
+f 1052 1056 1055
+f 1057 1054 1053
+f 1053 1055 1057
+f 1058 1055 1056
+f 1059 1057 1055
+f 1055 1058 1059
+f 1060 1056 1061
+f 1062 1060 1063
+f 1056 1060 1058
+f 1064 1058 1060
+f 1060 1062 1064
+f 1065 1059 1058
+f 1058 1064 1065
+f 1051 1066 1052
+f 1056 1052 1066
+f 1066 1061 1056
+f 1048 1051 1047
+f 1061 1063 1060
+f 1066 1051 1050
+f 1061 1066 1050
+f 1063 1061 1050
+f 1067 1063 1050
+f 1063 1067 1062
+f 1068 1069 1070
+f 1070 1071 1068
+f 1071 1072 1073
+f 1073 1068 1071
+f 1038 1073 1072
+f 1072 1037 1038
+f 1072 1071 1074
+f 1074 1075 1072
+f 1075 1035 1037
+f 1037 1072 1075
+f 1069 1076 1077
+f 1077 1070 1069
+f 1077 1078 1079
+f 1076 1080 1078
+f 1078 1077 1076
+f 1070 1077 1081
+f 1081 1082 1070
+f 1082 1074 1071
+f 1071 1070 1082
+f 1079 1081 1077
+f 1083 1084 1075
+f 1075 1074 1083
+f 1074 1082 1085
+f 1085 1083 1074
+f 1084 1036 1035
+f 1035 1075 1084
+f 1082 1081 1086
+f 1086 1085 1082
+f 1081 1079 1087
+f 1087 1086 1081
+f 1083 1085 1088
+f 1088 1089 1083
+f 1090 1050 1036
+f 1036 1084 1090
+f 1089 1090 1084
+f 1084 1083 1089
+f 1086 1087 1091
+f 1091 1092 1086
+f 1085 1086 1092
+f 1092 1088 1085
+f 1093 1094 1095
+f 1096 1097 1031
+f 1098 1096 1094
+f 1094 1096 1030
+f 1099 1097 1096
+f 1095 1094 1034
+f 1100 1097 1099
+f 1101 1095 1040
+f 1038 1031 1097
+f 1031 1030 1096
+f 1030 1034 1094
+f 1034 1040 1095
+f 1097 1100 1038
+f 1100 1102 1073
+f 1068 1103 1104
+f 1102 1103 1068
+f 1105 1080 1076
+f 1073 1038 1100
+f 1104 1069 1068
+f 1068 1073 1102
+f 1069 1104 1106
+f 1106 1076 1069
+f 1076 1106 1105
+f 1107 1108 1090
+f 1090 1089 1107
+f 1089 1088 1109
+f 1109 1107 1089
+f 1108 1067 1050
+f 1050 1090 1108
+f 1092 1091 1110
+f 1110 1111 1092
+f 1088 1092 1111
+f 1111 1109 1088
+f 1112 1113 1108
+f 1108 1107 1112
+f 1113 1062 1067
+f 1067 1108 1113
+f 1107 1109 1114
+f 1114 1112 1107
+f 1111 1110 1115
+f 1115 1116 1111
+f 1109 1111 1116
+f 1116 1114 1109
+f 1062 1113 1117
+f 1064 1117 1118
+f 1119 1117 1113
+f 1117 1064 1062
+f 1120 1118 1117
+f 1118 1065 1064
+f 1119 1121 1122
+f 1122 1120 1119
+f 1117 1119 1120
+f 1113 1112 1119
+f 1116 1115 1123
+f 1112 1114 1121
+f 1121 1119 1112
+f 1114 1116 1124
+f 1124 1121 1114
+f 1123 1124 1116
+f 1121 1124 1125
+f 1125 1122 1121
+f 1126 1125 1124
+f 1124 1123 1126
+f 1104 1103 1127
+f 1103 1102 1128
+f 1102 1100 1129
+f 1130 1105 1106
+f 1106 1104 1131
+f 1040 1044 1101
+f 1044 1054 1093
+f 1054 1057 1098
+f 1057 1059 1099
+f 1093 1101 1044
+f 1098 1094 1093
+f 1098 1093 1054
+f 1099 1096 1098
+f 1099 1098 1057
+f 1093 1095 1101
+f 1129 1099 1059
+f 1125 1132 1131
+f 1131 1122 1125
+f 1126 1130 1132
+f 1132 1125 1126
+f 1118 1120 1127
+f 1065 1118 1128
+f 1120 1122 1131
+f 1059 1065 1129
+f 1128 1127 1103
+f 1129 1128 1102
+f 1100 1099 1129
+f 1131 1132 1106
+f 1127 1131 1104
+f 1106 1132 1130
+f 1128 1129 1065
+f 1127 1128 1118
+f 1131 1127 1120
+f 1133 1134 1135
+f 1134 1133 1136
+f 1136 1137 1134
+f 1137 1136 1138
+f 1138 1139 1137
+f 1139 1138 1140
+f 1140 1141 1139
+f 1142 1136 1133
+f 1143 1144 1145
+f 1144 1143 1140
+f 1140 1146 1144
+f 1146 1140 1138
+f 1138 1147 1146
+f 1147 1138 1136
+f 1136 1142 1147
+f 1141 1140 1143
+f 1148 1149 1143
+f 1143 1150 1141
+f 1150 1143 1149
+f 1149 1151 1150
+f 1151 1149 1152
+f 1152 1153 1151
+f 1153 1152 1154
+f 1154 1155 1153
+f 1156 1157 1154
+f 1154 1158 1156
+f 1158 1154 1152
+f 1152 1159 1158
+f 1159 1152 1149
+f 1149 1148 1159
+f 1157 1156 1160
+f 1155 1154 1157
+f 1161 1162 1163
+f 1162 1161 1164
+f 1164 1165 1162
+f 1165 1164 1166
+f 1166 1167 1165
+f 1167 1166 1168
+f 1168 1145 1167
+f 1169 1164 1161
+f 1143 1170 1171
+f 1170 1143 1168
+f 1168 1172 1170
+f 1172 1168 1166
+f 1166 1173 1172
+f 1173 1166 1164
+f 1164 1169 1173
+f 1145 1168 1143
+f 1171 1174 1143
+f 1143 1175 1148
+f 1175 1143 1174
+f 1174 1176 1175
+f 1176 1174 1177
+f 1177 1178 1176
+f 1178 1177 1179
+f 1179 1180 1178
+f 1181 1182 1179
+f 1179 1183 1181
+f 1183 1179 1177
+f 1177 1184 1183
+f 1184 1177 1174
+f 1174 1171 1184
+f 1182 1181 1185
+f 1180 1179 1182
+f 1186 1187 1135
+f 1186 1188 1187
+f 1189 1190 1191
+f 1192 1193 1189
+f 1194 1193 1192
+f 1186 1135 1192
+f 1135 1194 1192
+f 1194 1135 1134
+f 1188 1195 1196
+f 1196 1187 1188
+f 1186 1197 1195
+f 1195 1188 1186
+f 1187 1196 1133
+f 1133 1135 1187
+f 1186 1198 1197
+f 1199 1200 1201
+f 1201 1202 1199
+f 1198 1203 1200
+f 1200 1199 1198
+f 1204 1202 1205
+f 1201 1205 1202
+f 1198 1186 1203
+f 1205 1192 1189
+f 1191 1205 1189
+f 1206 1207 1191
+f 1208 1209 1206
+f 1210 1208 1080
+f 1192 1203 1186
+f 1205 1191 1207
+f 1203 1192 1211
+f 1192 1205 1211
+f 1205 1212 1211
+f 1205 1201 1213
+f 1213 1212 1205
+f 1200 1212 1213
+f 1213 1201 1200
+f 1203 1211 1212
+f 1212 1200 1203
+f 1214 1215 1216
+f 1217 1216 1218
+f 1219 1220 1221
+f 1219 1142 1220
+f 1217 1142 1219
+f 1147 1217 1218
+f 1217 1147 1142
+f 1222 1199 1202
+f 1223 1197 1198
+f 1223 1198 1199
+f 1202 1204 1224
+f 1225 1224 1204
+f 1214 1216 1225
+f 1214 1226 1227
+f 1228 1229 1230
+f 1227 1231 1230
+f 1232 1216 1217
+f 1219 1232 1217
+f 1226 1231 1227
+f 1233 1226 1214
+f 1233 1214 1225
+f 1216 1232 1225
+f 1230 1231 1228
+f 1232 1219 1223
+f 1142 1133 1196
+f 1197 1223 1219
+f 1195 1221 1220
+f 1220 1196 1195
+f 1197 1219 1221
+f 1221 1195 1197
+f 1196 1220 1142
+f 1222 1234 1232
+f 1225 1235 1224
+f 1202 1224 1222
+f 1199 1222 1223
+f 1234 1222 1224
+f 1224 1235 1234
+f 1232 1223 1222
+f 1218 1215 1236
+f 1218 1216 1215
+f 1237 1238 1215
+f 1146 1218 1236
+f 1218 1146 1147
+f 1239 1240 1230
+f 1230 1241 1227
+f 1227 1237 1214
+f 1229 1239 1230
+f 1215 1214 1237
+f 1237 1227 1241
+f 1241 1230 1240
+f 1242 1238 1243
+f 1236 1238 1242
+f 1236 1215 1238
+f 1243 1244 1245
+f 1238 1237 1244
+f 1144 1236 1242
+f 1236 1144 1146
+f 1244 1243 1238
+f 1246 1243 1247
+f 1247 1245 1248
+f 1245 1247 1243
+f 1242 1243 1246
+f 1145 1242 1246
+f 1242 1145 1144
+f 1249 1250 1251
+f 1249 1251 1240
+f 1239 1249 1240
+f 1244 1241 1252
+f 1241 1244 1237
+f 1240 1252 1241
+f 1252 1240 1251
+f 1251 1253 1252
+f 1252 1245 1244
+f 1245 1252 1253
+f 1253 1251 1254
+f 1250 1254 1251
+f 1255 1254 1256
+f 1257 1256 1254
+f 1250 1257 1254
+f 1253 1248 1245
+f 1248 1253 1255
+f 1254 1255 1253
+f 1225 1232 1234
+f 1258 1228 1231
+f 1234 1235 1225
+f 1226 1233 1259
+f 1231 1226 1260
+f 1204 1261 1225
+f 1233 1225 1261
+f 1193 1262 1190
+f 1194 1263 1193
+f 1264 1263 1194
+f 1134 1264 1194
+f 1264 1134 1137
+f 1265 1191 1190
+f 1191 1265 1206
+f 1266 1206 1265
+f 1206 1266 1208
+f 1080 1208 1266
+f 1190 1189 1193
+f 1078 1080 1266
+f 1267 1265 1268
+f 1265 1267 1266
+f 1078 1266 1267
+f 1268 1190 1262
+f 1190 1268 1265
+f 1264 1269 1263
+f 1270 1269 1264
+f 1262 1193 1263
+f 1263 1271 1262
+f 1271 1263 1269
+f 1137 1270 1264
+f 1270 1137 1139
+f 1272 1271 1273
+f 1270 1274 1269
+f 1269 1273 1271
+f 1275 1274 1270
+f 1273 1269 1274
+f 1139 1275 1270
+f 1275 1139 1141
+f 1268 1276 1267
+f 1079 1267 1276
+f 1262 1277 1268
+f 1079 1078 1267
+f 1277 1278 1276
+f 1278 1277 1272
+f 1087 1079 1276
+f 1087 1276 1278
+f 1277 1262 1271
+f 1091 1087 1278
+f 1276 1268 1277
+f 1271 1272 1277
+f 1259 1260 1226
+f 1260 1259 1210
+f 1279 1260 1280
+f 1261 1204 1207
+f 1260 1279 1231
+f 1261 1259 1233
+f 1259 1261 1209
+f 1209 1208 1210
+f 1130 1210 1105
+f 1207 1206 1209
+f 1080 1105 1210
+f 1209 1210 1259
+f 1210 1281 1260
+f 1205 1207 1204
+f 1207 1209 1261
+f 1274 1282 1273
+f 1282 1274 1283
+f 1275 1283 1274
+f 1284 1283 1275
+f 1141 1284 1275
+f 1284 1141 1150
+f 1283 1285 1282
+f 1285 1283 1286
+f 1286 1287 1285
+f 1284 1286 1283
+f 1288 1286 1284
+f 1288 1289 1286
+f 1150 1288 1284
+f 1288 1150 1151
+f 1273 1290 1272
+f 1291 1272 1290
+f 1272 1291 1278
+f 1091 1278 1291
+f 1110 1091 1291
+f 1290 1273 1282
+f 1290 1292 1291
+f 1110 1291 1292
+f 1282 1293 1290
+f 1115 1110 1292
+f 1115 1292 1294
+f 1123 1115 1294
+f 1292 1290 1293
+f 1295 1285 1287
+f 1293 1282 1285
+f 1293 1294 1292
+f 1285 1295 1293
+f 1294 1293 1295
+f 1287 1286 1289
+f 1296 1289 1288
+f 1296 1297 1289
+f 1151 1296 1288
+f 1296 1151 1153
+f 1287 1298 1295
+f 1295 1299 1294
+f 1123 1294 1299
+f 1289 1300 1287
+f 1126 1123 1299
+f 1299 1295 1298
+f 1298 1287 1300
+f 1210 1130 1281
+f 1301 1302 1303
+f 1303 1304 1301
+f 1305 1306 1307
+f 1305 1308 1309
+f 1280 1260 1281
+f 1308 1305 1303
+f 1306 1305 1310
+f 1306 1280 1311
+f 1280 1306 1312
+f 1313 1297 1296
+f 1314 1315 1316
+f 1314 1155 1315
+f 1313 1155 1314
+f 1300 1289 1297
+f 1153 1313 1296
+f 1313 1153 1155
+f 1317 1318 1319
+f 1307 1303 1305
+f 1281 1311 1280
+f 1311 1307 1306
+f 1320 1308 1321
+f 1322 1319 1320
+f 1317 1323 1318
+f 1303 1321 1308
+f 1299 1281 1130
+f 1307 1300 1303
+f 1307 1311 1300
+f 1297 1304 1303
+f 1311 1281 1298
+f 1304 1314 1317
+f 1298 1281 1299
+f 1130 1126 1299
+f 1300 1297 1303
+f 1300 1311 1298
+f 1304 1297 1313
+f 1314 1304 1313
+f 1324 1315 1155
+f 1155 1157 1324
+f 1323 1317 1314
+f 1323 1314 1316
+f 1325 1316 1315
+f 1315 1324 1325
+f 1316 1325 1323
+f 1319 1322 1317
+f 1303 1302 1321
+f 1301 1322 1321
+f 1322 1301 1304
+f 1321 1302 1301
+f 1320 1321 1322
+f 1304 1317 1322
+f 1326 1324 1157
+f 1157 1160 1326
+f 1327 1325 1324
+f 1324 1326 1327
+f 1328 1323 1325
+f 1325 1327 1328
+f 1329 1330 1331
+f 1332 1330 1329
+f 1328 1326 1160
+f 1328 1327 1326
+f 1331 1333 1334
+f 1328 1160 1329
+f 1160 1332 1329
+f 1332 1160 1156
+f 1318 1335 1336
+f 1336 1319 1318
+f 1337 1320 1319
+f 1308 1320 1338
+f 1337 1338 1320
+f 1319 1336 1337
+f 1318 1328 1335
+f 1328 1318 1323
+f 1339 1309 1334
+f 1309 1339 1310
+f 1335 1329 1340
+f 1338 1334 1309
+f 1329 1338 1340
+f 1341 1342 1312
+f 1310 1343 1312
+f 1338 1329 1331
+f 1343 1310 1339
+f 1329 1335 1328
+f 1312 1343 1341
+f 1334 1338 1331
+f 1332 1344 1330
+f 1345 1344 1332
+f 1156 1345 1332
+f 1345 1156 1158
+f 1330 1346 1333
+f 1334 1347 1339
+f 1348 1339 1347
+f 1339 1348 1343
+f 1341 1343 1348
+f 1349 1341 1348
+f 1333 1331 1330
+f 1347 1334 1333
+f 1350 1333 1346
+f 1333 1350 1347
+f 1349 1348 1351
+f 1351 1347 1350
+f 1347 1351 1348
+f 1345 1352 1344
+f 1353 1352 1345
+f 1158 1353 1345
+f 1353 1158 1159
+f 1346 1330 1344
+f 1344 1354 1346
+f 1354 1344 1352
+f 1159 1355 1353
+f 1355 1159 1148
+f 1355 1356 1353
+f 1357 1354 1358
+f 1353 1356 1352
+f 1352 1358 1354
+f 1358 1352 1356
+f 1359 1351 1360
+f 1350 1360 1351
+f 1359 1349 1351
+f 1346 1361 1350
+f 1362 1359 1360
+f 1362 1360 1363
+f 1361 1346 1354
+f 1364 1362 1363
+f 1354 1357 1361
+f 1363 1361 1357
+f 1361 1363 1360
+f 1360 1350 1361
+f 1310 1312 1306
+f 1312 1365 1280
+f 1309 1310 1305
+f 1338 1309 1308
+f 1335 1340 1366
+f 1366 1336 1335
+f 1336 1366 1367
+f 1367 1337 1336
+f 1312 1342 1365
+f 1337 1367 1338
+f 1366 1340 1338
+f 1338 1367 1366
+f 1368 1248 1369
+f 1248 1368 1247
+f 1255 1369 1248
+f 1370 1247 1368
+f 1246 1247 1370
+f 1167 1246 1370
+f 1246 1167 1145
+f 1370 1368 1371
+f 1372 1373 1374
+f 1374 1369 1372
+f 1165 1370 1371
+f 1370 1165 1167
+f 1369 1374 1368
+f 1371 1368 1374
+f 1375 1376 1377
+f 1375 1377 1256
+f 1257 1375 1256
+f 1378 1372 1369
+f 1256 1378 1255
+f 1369 1255 1378
+f 1378 1256 1377
+f 1377 1379 1378
+f 1372 1378 1379
+f 1379 1377 1380
+f 1376 1381 1380
+f 1376 1380 1377
+f 1382 1374 1373
+f 1371 1374 1382
+f 1162 1371 1382
+f 1371 1162 1165
+f 1373 1372 1383
+f 1380 1384 1379
+f 1384 1380 1385
+f 1381 1385 1380
+f 1383 1379 1384
+f 1379 1383 1372
+f 1386 1384 1387
+f 1381 1388 1385
+f 1387 1385 1389
+f 1388 1389 1385
+f 1384 1386 1383
+f 1383 1390 1373
+f 1385 1387 1384
+f 1391 1389 1258
+f 1392 1387 1391
+f 1228 1258 1393
+f 1388 1393 1258
+f 1391 1258 1394
+f 1395 1392 1396
+f 1392 1391 1397
+f 1258 1231 1279
+f 1163 1382 1398
+f 1382 1163 1162
+f 1398 1373 1390
+f 1382 1373 1398
+f 1399 1400 1163
+f 1390 1383 1386
+f 1399 1401 1400
+f 1399 1163 1398
+f 1402 1401 1399
+f 1400 1403 1161
+f 1161 1163 1400
+f 1401 1402 1403
+f 1403 1400 1401
+f 1399 1404 1402
+f 1405 1406 1407
+f 1407 1408 1405
+f 1409 1410 1406
+f 1406 1405 1409
+f 1396 1408 1395
+f 1407 1395 1408
+f 1399 1409 1404
+f 1409 1399 1410
+f 1389 1391 1387
+f 1258 1389 1388
+f 1386 1395 1390
+f 1387 1392 1386
+f 1395 1398 1390
+f 1398 1410 1399
+f 1406 1411 1412
+f 1412 1407 1406
+f 1410 1413 1411
+f 1411 1406 1410
+f 1395 1411 1413
+f 1395 1407 1412
+f 1412 1411 1395
+f 1398 1395 1413
+f 1410 1398 1413
+f 1395 1386 1392
+f 1414 1415 1416
+f 1417 1418 1419
+f 1420 1169 1417
+f 1173 1420 1421
+f 1420 1173 1169
+f 1420 1416 1421
+f 1417 1169 1418
+f 1422 1423 1279
+f 1424 1425 1396
+f 1423 1426 1394
+f 1427 1405 1408
+f 1428 1409 1405
+f 1428 1404 1409
+f 1408 1396 1425
+f 1426 1424 1397
+f 1403 1418 1169
+f 1169 1161 1403
+f 1404 1428 1417
+f 1404 1417 1419
+f 1419 1402 1404
+f 1402 1419 1418
+f 1418 1403 1402
+f 1427 1429 1430
+f 1408 1425 1427
+f 1430 1428 1427
+f 1425 1431 1429
+f 1424 1431 1425
+f 1405 1427 1428
+f 1424 1430 1429
+f 1429 1427 1425
+f 1423 1422 1432
+f 1430 1417 1428
+f 1416 1430 1424
+f 1433 1422 1434
+f 1426 1414 1424
+f 1426 1423 1414
+f 1414 1416 1424
+f 1434 1435 1433
+f 1432 1422 1433
+f 1414 1423 1432
+f 1417 1430 1420
+f 1430 1416 1420
+f 1421 1172 1173
+f 1421 1415 1436
+f 1421 1416 1415
+f 1172 1421 1436
+f 1437 1438 1415
+f 1432 1437 1414
+f 1415 1414 1437
+f 1433 1439 1432
+f 1437 1432 1439
+f 1440 1441 1433
+f 1435 1440 1433
+f 1439 1433 1441
+f 1436 1170 1172
+f 1438 1437 1442
+f 1443 1438 1444
+f 1436 1438 1443
+f 1436 1415 1438
+f 1170 1436 1443
+f 1444 1442 1445
+f 1442 1444 1438
+f 1446 1444 1447
+f 1171 1443 1446
+f 1443 1171 1170
+f 1447 1445 1448
+f 1445 1447 1444
+f 1443 1444 1446
+f 1449 1445 1442
+f 1439 1442 1437
+f 1441 1449 1439
+f 1449 1441 1450
+f 1442 1439 1449
+f 1450 1451 1449
+f 1452 1450 1441
+f 1452 1453 1450
+f 1440 1452 1441
+f 1445 1449 1451
+f 1451 1450 1454
+f 1453 1454 1450
+f 1448 1451 1455
+f 1455 1454 1456
+f 1457 1456 1454
+f 1453 1457 1454
+f 1451 1448 1445
+f 1454 1455 1451
+f 1394 1279 1423
+f 1397 1394 1426
+f 1397 1396 1392
+f 1394 1397 1391
+f 1279 1394 1258
+f 1279 1458 1422
+f 1396 1397 1424
+f 1434 1422 1459
+f 1424 1429 1431
+f 1184 1446 1460
+f 1446 1184 1171
+f 1460 1447 1461
+f 1446 1447 1460
+f 1461 1448 1462
+f 1448 1461 1447
+f 1455 1462 1448
+f 1463 1462 1464
+f 1462 1463 1461
+f 1183 1460 1465
+f 1460 1183 1184
+f 1464 1466 1463
+f 1465 1461 1463
+f 1460 1461 1465
+f 1457 1467 1456
+f 1468 1464 1462
+f 1456 1468 1455
+f 1467 1469 1470
+f 1468 1456 1470
+f 1462 1455 1468
+f 1470 1471 1468
+f 1467 1470 1456
+f 1469 1472 1473
+f 1469 1473 1470
+f 1471 1470 1473
+f 1464 1468 1471
+f 1466 1464 1474
+f 1465 1181 1183
+f 1475 1463 1466
+f 1465 1463 1475
+f 1181 1465 1475
+f 1473 1476 1471
+f 1471 1474 1464
+f 1476 1473 1477
+f 1474 1471 1476
+f 1472 1477 1473
+f 1478 1479 1477
+f 1472 1478 1477
+f 1480 1477 1479
+f 1477 1480 1476
+f 1481 1476 1480
+f 1474 1482 1466
+f 1476 1481 1474
+f 1483 1484 1485
+f 1486 1483 1487
+f 1458 1486 1488
+f 1486 1458 1489
+f 1483 1486 1490
+f 1458 1280 1365
+f 1279 1280 1458
+f 1491 1485 1484
+f 1487 1488 1486
+f 1485 1487 1483
+f 1488 1422 1458
+f 1491 1492 1493
+f 1494 1495 1493
+f 1493 1496 1494
+f 1488 1459 1422
+f 1493 1495 1491
+f 1497 1492 1491
+f 1496 1493 1492
+f 1492 1497 1496
+f 1498 1365 1342
+f 1499 1500 1501
+f 1355 1502 1356
+f 1503 1502 1355
+f 1356 1504 1358
+f 1504 1356 1502
+f 1148 1503 1355
+f 1503 1148 1175
+f 1503 1505 1502
+f 1506 1505 1503
+f 1502 1507 1504
+f 1506 1508 1505
+f 1175 1506 1503
+f 1506 1175 1176
+f 1507 1502 1505
+f 1505 1509 1507
+f 1510 1357 1511
+f 1357 1510 1363
+f 1364 1363 1510
+f 1512 1364 1510
+f 1511 1358 1504
+f 1358 1511 1357
+f 1512 1510 1513
+f 1504 1514 1511
+f 1511 1513 1510
+f 1515 1514 1516
+f 1514 1515 1513
+f 1513 1511 1514
+f 1514 1504 1507
+f 1507 1516 1514
+f 1516 1507 1509
+f 1517 1512 1513
+f 1517 1513 1515
+f 1518 1517 1515
+f 1519 1508 1506
+f 1519 1520 1508
+f 1176 1519 1506
+f 1519 1176 1178
+f 1509 1505 1508
+f 1518 1515 1521
+f 1522 1518 1521
+f 1516 1521 1515
+f 1508 1523 1509
+f 1521 1516 1524
+f 1524 1509 1523
+f 1509 1524 1516
+f 1525 1180 1526
+f 1178 1525 1519
+f 1525 1178 1180
+f 1523 1508 1520
+f 1525 1520 1519
+f 1526 1527 1528
+f 1526 1180 1527
+f 1365 1489 1458
+f 1484 1483 1499
+f 1489 1490 1486
+f 1490 1499 1483
+f 1529 1530 1531
+f 1499 1532 1484
+f 1531 1484 1532
+f 1533 1534 1535
+f 1533 1535 1530
+f 1527 1536 1537
+f 1534 1526 1528
+f 1528 1537 1534
+f 1536 1527 1180
+f 1180 1182 1536
+f 1534 1533 1526
+f 1537 1528 1527
+f 1531 1532 1529
+f 1500 1529 1532
+f 1532 1501 1500
+f 1499 1501 1532
+f 1538 1533 1529
+f 1530 1529 1533
+f 1529 1500 1538
+f 1499 1538 1500
+f 1526 1538 1525
+f 1523 1520 1499
+f 1523 1489 1524
+f 1498 1522 1521
+f 1524 1365 1521
+f 1538 1520 1525
+f 1490 1523 1499
+f 1490 1489 1523
+f 1489 1365 1524
+f 1538 1526 1533
+f 1520 1538 1499
+f 1521 1365 1498
+f 1537 1539 1540
+f 1541 1536 1182
+f 1539 1537 1536
+f 1182 1185 1541
+f 1540 1534 1537
+f 1536 1541 1539
+f 1540 1539 1541
+f 1475 1466 1542
+f 1482 1474 1481
+f 1540 1185 1542
+f 1542 1466 1482
+f 1185 1475 1542
+f 1475 1185 1181
+f 1540 1541 1185
+f 1530 1496 1497
+f 1497 1531 1530
+f 1535 1494 1496
+f 1496 1530 1535
+f 1497 1491 1531
+f 1484 1531 1491
+f 1485 1480 1487
+f 1535 1540 1494
+f 1540 1535 1534
+f 1480 1485 1481
+f 1487 1479 1488
+f 1542 1491 1495
+f 1494 1542 1495
+f 1478 1459 1488
+f 1491 1481 1485
+f 1479 1487 1480
+f 1481 1491 1482
+f 1488 1479 1478
+f 1491 1542 1482
+f 1542 1494 1540
+f 1543 1544 1545
+f 1546 1545 1547
+f 1548 1549 1550
+f 1551 1550 1552
+f 1553 1552 1554
+f 1555 1554 1549
+f 1546 1543 1545
+f 1556 1551 1552
+f 1553 1556 1552
+f 1543 1557 1544
+f 1555 1553 1554
+f 1548 1555 1549
+f 1558 1548 1550
+f 1551 1558 1550
+f 1559 1560 1561
+f 1562 1559 1561
+f 1563 1546 1547
+f 1564 1562 1565
+f 1566 1564 1565
+f 1560 1567 1568
+f 1557 1569 1544
+f 1567 1566 1568
+f 1563 1547 1570
+f 1569 1570 1544
+f 1560 1568 1561
+f 1562 1561 1565
+f 1566 1565 1571
+f 1566 1571 1568
+f 1572 1573 1574
+f 1575 1572 1574
+f 1576 1575 1577
+f 1578 1576 1577
+f 1573 1579 1580
+f 1579 1578 1580
+f 1581 1582 1583
+f 1584 1585 1586
+f 1582 1587 1583
+f 1587 1584 1588
+f 1589 1581 1590
+f 1587 1588 1583
+f 1581 1583 1590
+f 1589 1590 1586
+f 1584 1586 1588
+f 1573 1580 1574
+f 1575 1574 1577
+f 1591 1592 1593
+f 1594 1593 1595
+f 1596 1595 1597
+f 1598 1597 1592
+f 1578 1577 1599
+f 1578 1599 1580
+f 1594 1600 1593
+f 1591 1598 1592
+f 1598 1601 1597
+f 1601 1596 1597
+f 1596 1594 1595
+f 1602 1603 1604
+f 1548 1558 1605
+f 1558 1551 1605
+f 1555 1548 1606
+f 1605 1551 1607
+f 1608 1609 1555
+f 1609 1608 1610
+f 1610 1611 1607
+f 1612 1610 1609
+f 1612 1607 1610
+f 1613 1610 1608
+f 1611 1610 1613
+f 1614 1606 1548
+f 1605 1614 1548
+f 1555 1606 1608
+f 1607 1611 1605
+f 1615 1616 1617
+f 1615 1618 1616
+f 1615 1619 1618
+f 1615 1617 1619
+f 1556 1553 1543
+f 1557 1555 1609
+f 1551 1556 1546
+f 1553 1555 1557
+f 1620 1617 1609
+f 1607 1616 1620
+f 1618 1607 1551
+f 1612 1620 1607
+f 1612 1609 1620
+f 1557 1543 1553
+f 1609 1617 1557
+f 1616 1607 1618
+f 1543 1546 1556
+f 1617 1620 1616
+f 1551 1546 1618
+f 1621 1622 1623
+f 1621 1624 1622
+f 1621 1625 1624
+f 1621 1623 1625
+f 1569 1557 1567
+f 1624 1618 1546
+f 1619 1622 1617
+f 1618 1624 1619
+f 1567 1557 1617
+f 1563 1569 1560
+f 1546 1563 1559
+f 1617 1623 1567
+f 1623 1617 1622
+f 1567 1560 1569
+f 1560 1559 1563
+f 1546 1562 1624
+f 1559 1562 1546
+f 1622 1619 1624
+f 1566 1567 1584
+f 1564 1566 1587
+f 1624 1626 1625
+f 1562 1564 1582
+f 1625 1627 1623
+f 1584 1567 1623
+f 1628 1624 1562
+f 1623 1627 1584
+f 1582 1581 1562
+f 1562 1581 1628
+f 1626 1624 1628
+f 1584 1587 1566
+f 1627 1625 1626
+f 1587 1582 1564
+f 1629 1630 1628
+f 1629 1627 1630
+f 1629 1628 1626
+f 1629 1626 1627
+f 1631 1632 1633
+f 1631 1634 1632
+f 1631 1635 1634
+f 1631 1633 1635
+f 1585 1584 1579
+f 1589 1585 1573
+f 1581 1589 1572
+f 1632 1628 1581
+f 1630 1633 1627
+f 1628 1632 1630
+f 1579 1584 1627
+f 1581 1575 1632
+f 1573 1572 1589
+f 1579 1573 1585
+f 1633 1630 1632
+f 1572 1575 1581
+f 1627 1635 1579
+f 1635 1627 1633
+f 1575 1598 1636
+f 1596 1601 1576
+f 1601 1598 1575
+f 1594 1596 1578
+f 1636 1632 1575
+f 1578 1579 1594
+f 1634 1637 1635
+f 1632 1638 1634
+f 1576 1578 1596
+f 1575 1576 1601
+f 1594 1579 1635
+f 1638 1632 1636
+f 1639 1638 1637
+f 1639 1636 1638
+f 1637 1634 1638
+f 1635 1637 1594
+f 1640 1636 1598
+f 1641 1642 1637
+f 1636 1640 1641
+f 1639 1637 1641
+f 1639 1641 1636
+f 1643 1594 1637
+f 1600 1594 1643
+f 1591 1600 1603
+f 1598 1591 1602
+f 1643 1603 1600
+f 1642 1641 1640
+f 1603 1602 1591
+f 1637 1644 1643
+f 1602 1645 1598
+f 1598 1645 1640
+f 1644 1637 1642
+f 1646 1647 1648
+f 1643 1646 1648
+f 1603 1643 1649
+f 1645 1602 1604
+f 1647 1645 1650
+f 1651 1652 1653
+f 1654 1653 1655
+f 1656 1655 1657
+f 1658 1657 1652
+f 1603 1649 1604
+f 1645 1604 1650
+f 1647 1650 1648
+f 1643 1648 1649
+f 1659 1651 1653
+f 1651 1658 1652
+f 1658 1660 1657
+f 1656 1654 1655
+f 1654 1659 1653
+f 1661 1662 1663
+f 1664 1661 1663
+f 1665 1664 1666
+f 1667 1665 1666
+f 1668 1667 1669
+f 1670 1671 1672
+f 1673 1670 1674
+f 1675 1673 1674
+f 1676 1675 1677
+f 1678 1676 1679
+f 1671 1678 1679
+f 1664 1663 1666
+f 1667 1666 1669
+f 1670 1672 1674
+f 1675 1674 1677
+f 1676 1677 1679
+f 1671 1679 1672
+f 1662 1680 1663
+f 1668 1669 1680
+f 1681 1682 1683
+f 1684 1683 1685
+f 1686 1685 1687
+f 1688 1687 1682
+f 1684 1689 1683
+f 1690 1684 1685
+f 1686 1690 1685
+f 1688 1686 1687
+f 1681 1688 1682
+f 1689 1681 1683
+f 1691 1692 1693
+f 1692 1694 1695
+f 1696 1691 1693
+f 1692 1695 1693
+f 1696 1693 1697
+f 1698 1697 1699
+f 1700 1699 1695
+f 1701 1702 1703
+f 1704 1703 1705
+f 1706 1705 1707
+f 1708 1707 1702
+f 1709 1701 1703
+f 1704 1709 1703
+f 1698 1696 1697
+f 1710 1704 1705
+f 1706 1710 1705
+f 1701 1708 1702
+f 1708 1706 1707
+f 1694 1700 1695
+f 1711 1642 1644
+f 1711 1640 1642
+f 1711 1712 1640
+f 1711 1644 1712
+f 1646 1643 1658
+f 1658 1643 1644
+f 1713 1640 1645
+f 1712 1714 1644
+f 1640 1715 1712
+f 1645 1647 1659
+f 1714 1712 1715
+f 1644 1714 1658
+f 1645 1654 1713
+f 1651 1659 1647
+f 1715 1640 1713
+f 1658 1651 1646
+f 1659 1654 1645
+f 1716 1713 1715
+f 1716 1717 1713
+f 1716 1714 1717
+f 1716 1715 1714
+f 1654 1656 1673
+f 1660 1658 1671
+f 1656 1660 1670
+f 1717 1718 1714
+f 1713 1719 1717
+f 1671 1658 1714
+f 1719 1713 1654
+f 1673 1675 1654
+f 1671 1670 1660
+f 1670 1673 1656
+f 1720 1714 1718
+f 1718 1717 1719
+f 1714 1720 1671
+f 1654 1675 1719
+f 1721 1720 1722
+f 1721 1718 1720
+f 1721 1719 1718
+f 1721 1722 1719
+f 1723 1724 1725
+f 1723 1725 1726
+f 1723 1726 1727
+f 1723 1727 1724
+f 1719 1726 1722
+f 1726 1719 1725
+f 1675 1676 1665
+f 1661 1671 1720
+f 1725 1719 1675
+f 1722 1727 1720
+f 1678 1671 1661
+f 1720 1727 1661
+f 1675 1667 1725
+f 1727 1722 1726
+f 1661 1664 1678
+f 1665 1667 1675
+f 1664 1665 1676
+f 1725 1728 1724
+f 1662 1661 1688
+f 1668 1662 1681
+f 1667 1668 1689
+f 1688 1661 1727
+f 1728 1725 1667
+f 1724 1729 1727
+f 1730 1729 1731
+f 1730 1728 1729
+f 1731 1727 1729
+f 1727 1731 1688
+f 1729 1724 1728
+f 1688 1681 1662
+f 1667 1684 1728
+f 1689 1684 1667
+f 1681 1689 1668
+f 1686 1688 1694
+f 1694 1688 1731
+f 1690 1686 1692
+f 1684 1690 1691
+f 1730 1732 1728
+f 1730 1731 1732
+f 1732 1733 1731
+f 1728 1734 1732
+f 1735 1728 1684
+f 1692 1691 1690
+f 1733 1732 1734
+f 1691 1696 1684
+f 1734 1728 1735
+f 1684 1696 1735
+f 1731 1733 1694
+f 1694 1692 1686
+f 1736 1734 1733
+f 1736 1735 1734
+f 1736 1737 1735
+f 1736 1733 1737
+f 1738 1739 1740
+f 1738 1741 1739
+f 1738 1742 1741
+f 1738 1740 1742
+f 1696 1698 1709
+f 1708 1694 1733
+f 1741 1735 1696
+f 1700 1694 1708
+f 1698 1700 1701
+f 1737 1739 1733
+f 1735 1741 1737
+f 1701 1709 1698
+f 1733 1740 1708
+f 1709 1704 1696
+f 1740 1733 1739
+f 1708 1701 1700
+f 1739 1737 1741
+f 1696 1704 1741
+f 1743 1610 1607
+f 1744 1607 1620
+f 1745 1617 1616
+f 1746 1616 1618
+f 1747 1620 1609
+f 1748 1609 1610
+f 1745 1749 1617
+f 1746 1745 1616
+f 1748 1747 1609
+f 1743 1748 1610
+f 1750 1743 1607
+f 1751 1750 1607
+f 1744 1751 1607
+f 1747 1744 1620
+f 1752 1619 1617
+f 1753 1622 1624
+f 1754 1624 1625
+f 1755 1625 1623
+f 1756 1623 1622
+f 1757 1618 1619
+f 1757 1746 1618
+f 1749 1752 1617
+f 1758 1753 1624
+f 1759 1758 1624
+f 1754 1759 1624
+f 1756 1755 1623
+f 1755 1754 1625
+f 1753 1756 1622
+f 1760 1761 1634
+f 1762 1760 1635
+f 1763 1762 1633
+f 1764 1763 1632
+f 1765 1764 1632
+f 1761 1765 1632
+f 1766 1767 1627
+f 1768 1766 1626
+f 1769 1768 1626
+f 1770 1769 1628
+f 1767 1771 1627
+f 1770 1628 1630
+f 1771 1630 1627
+f 1766 1627 1626
+f 1769 1626 1628
+f 1762 1635 1633
+f 1763 1633 1632
+f 1772 1641 1637
+f 1761 1632 1634
+f 1760 1634 1635
+f 1773 1637 1638
+f 1774 1638 1636
+f 1775 1636 1641
+f 1776 1777 1642
+f 1773 1778 1637
+f 1779 1773 1638
+f 1774 1779 1638
+f 1775 1774 1636
+f 1778 1772 1637
+f 1747 1780 1781
+f 1782 1783 1784
+f 1785 1780 1748
+f 1784 1785 1748
+f 1747 1748 1780
+f 1784 1750 1782
+f 1748 1743 1784
+f 1781 1786 1747
+f 1743 1750 1784
+f 1787 1782 1750
+f 1744 1747 1749
+f 1751 1744 1745
+f 1750 1751 1746
+f 1749 1747 1786
+f 1745 1746 1751
+f 1786 1788 1749
+f 1750 1746 1787
+f 1749 1745 1744
+f 1786 1781 1789
+f 1790 1789 1781
+f 1789 1783 1782
+f 1783 1789 1790
+f 1789 1791 1786
+f 1782 1791 1789
+f 1792 1782 1787
+f 1782 1792 1793
+f 1793 1788 1786
+f 1793 1791 1782
+f 1786 1791 1793
+f 1788 1793 1792
+f 1788 1794 1795
+f 1796 1797 1798
+f 1792 1794 1788
+f 1787 1794 1792
+f 1798 1797 1799
+f 1800 1797 1796
+f 1795 1794 1787
+f 1799 1797 1800
+f 1795 1798 1788
+f 1787 1796 1795
+f 1757 1752 1756
+f 1746 1757 1753
+f 1796 1787 1746
+f 1752 1749 1755
+f 1755 1749 1788
+f 1753 1758 1746
+f 1755 1756 1752
+f 1798 1795 1796
+f 1756 1753 1757
+f 1746 1758 1796
+f 1788 1799 1755
+f 1799 1788 1798
+f 1767 1755 1799
+f 1801 1796 1758
+f 1759 1754 1766
+f 1800 1802 1799
+f 1758 1759 1768
+f 1796 1803 1800
+f 1754 1755 1767
+f 1799 1802 1767
+f 1758 1769 1801
+f 1768 1769 1758
+f 1767 1766 1754
+f 1802 1800 1803
+f 1766 1768 1759
+f 1803 1796 1801
+f 1804 1805 1806
+f 1807 1805 1804
+f 1808 1805 1807
+f 1803 1809 1802
+f 1801 1809 1803
+f 1810 1809 1801
+f 1802 1809 1810
+f 1806 1805 1808
+f 1801 1804 1810
+f 1760 1767 1802
+f 1804 1801 1769
+f 1769 1770 1763
+f 1810 1806 1802
+f 1771 1767 1760
+f 1770 1771 1762
+f 1808 1802 1806
+f 1802 1808 1760
+f 1806 1810 1804
+f 1760 1762 1771
+f 1763 1764 1769
+f 1762 1763 1770
+f 1769 1764 1804
+f 1761 1760 1778
+f 1765 1761 1773
+f 1764 1765 1779
+f 1778 1760 1808
+f 1811 1804 1764
+f 1773 1779 1765
+f 1778 1773 1761
+f 1808 1812 1778
+f 1764 1774 1811
+f 1779 1774 1764
+f 1813 1778 1812
+f 1814 1811 1774
+f 1774 1775 1776
+f 1772 1778 1813
+f 1775 1772 1777
+f 1774 1815 1814
+f 1777 1776 1775
+f 1813 1777 1772
+f 1812 1816 1813
+f 1776 1815 1774
+f 1817 1818 1812
+f 1811 1818 1817
+f 1807 1812 1808
+f 1812 1807 1817
+f 1804 1817 1807
+f 1817 1804 1811
+f 1819 1820 1814
+f 1811 1814 1820
+f 1816 1812 1819
+f 1820 1818 1811
+f 1812 1818 1820
+f 1820 1819 1812
+f 1821 1815 1640
+f 1822 1821 1640
+f 1777 1813 1644
+f 1813 1822 1712
+f 1815 1776 1640
+f 1823 1713 1717
+f 1824 1717 1714
+f 1825 1714 1715
+f 1826 1715 1713
+f 1777 1644 1642
+f 1776 1642 1640
+f 1822 1640 1712
+f 1813 1712 1644
+f 1826 1827 1715
+f 1825 1828 1714
+f 1823 1826 1713
+f 1828 1824 1714
+f 1827 1825 1715
+f 1829 1830 1719
+f 1831 1829 1719
+f 1832 1831 1719
+f 1833 1832 1722
+f 1834 1833 1720
+f 1830 1834 1718
+f 1830 1718 1719
+f 1832 1719 1722
+f 1835 1725 1724
+f 1836 1724 1727
+f 1833 1722 1720
+f 1837 1727 1726
+f 1838 1726 1725
+f 1834 1720 1718
+f 1837 1839 1727
+f 1835 1838 1725
+f 1839 1836 1727
+f 1840 1837 1726
+f 1838 1840 1726
+f 1841 1842 1729
+f 1843 1841 1728
+f 1844 1843 1728
+f 1845 1844 1728
+f 1846 1845 1732
+f 1842 1846 1731
+f 1842 1731 1729
+f 1841 1729 1728
+f 1845 1728 1732
+f 1846 1732 1731
+f 1847 1733 1734
+f 1848 1734 1735
+f 1849 1847 1734
+f 1848 1849 1734
+f 1847 1850 1733
+f 1851 1737 1733
+f 1852 1735 1737
+f 1853 1740 1739
+f 1854 1739 1741
+f 1855 1741 1742
+f 1856 1742 1740
+f 1850 1851 1733
+f 1853 1856 1740
+f 1854 1853 1739
+f 1857 1854 1741
+f 1858 1857 1741
+f 1855 1858 1741
+f 1852 1848 1735
+f 1856 1855 1742
+f 1819 1859 1816
+f 1814 1859 1819
+f 1860 1859 1814
+f 1816 1859 1860
+f 1861 1862 1863
+f 1864 1862 1861
+f 1865 1862 1864
+f 1863 1862 1865
+f 1833 1828 1865
+f 1824 1828 1833
+f 1823 1824 1834
+f 1864 1866 1865
+f 1861 1867 1864
+f 1867 1861 1826
+f 1826 1823 1830
+f 1860 1865 1816
+f 1814 1863 1860
+f 1828 1813 1816
+f 1861 1814 1815
+f 1822 1813 1828
+f 1821 1822 1825
+f 1815 1821 1827
+f 1863 1814 1861
+f 1828 1825 1822
+f 1865 1860 1863
+f 1825 1827 1821
+f 1816 1865 1828
+f 1827 1826 1815
+f 1815 1826 1861
+f 1867 1868 1866
+f 1866 1868 1869
+f 1870 1868 1867
+f 1871 1872 1873
+f 1873 1872 1874
+f 1875 1872 1871
+f 1874 1872 1875
+f 1869 1868 1870
+f 1834 1830 1823
+f 1869 1865 1866
+f 1865 1869 1833
+f 1826 1829 1867
+f 1866 1864 1867
+f 1833 1834 1824
+f 1830 1829 1826
+f 1870 1871 1869
+f 1874 1867 1829
+f 1832 1833 1839
+f 1831 1832 1837
+f 1839 1833 1869
+f 1829 1831 1840
+f 1867 1875 1870
+f 1829 1838 1874
+f 1840 1838 1829
+f 1839 1837 1832
+f 1869 1871 1839
+f 1837 1840 1831
+f 1875 1867 1874
+f 1871 1870 1875
+f 1836 1839 1846
+f 1835 1836 1842
+f 1838 1835 1841
+f 1846 1839 1871
+f 1876 1874 1838
+f 1842 1841 1835
+f 1846 1842 1836
+f 1871 1877 1846
+f 1838 1843 1876
+f 1841 1843 1838
+f 1843 1844 1849
+f 1878 1876 1843
+f 1845 1846 1850
+f 1850 1846 1877
+f 1844 1845 1847
+f 1849 1848 1843
+f 1877 1879 1850
+f 1847 1849 1844
+f 1850 1847 1845
+f 1843 1848 1878
+f 1874 1876 1873
+f 1876 1880 1881
+f 1877 1871 1881
+f 1873 1881 1871
+f 1881 1873 1876
+f 1881 1880 1877
+f 1877 1880 1882
+f 1883 1876 1878
+f 1882 1879 1877
+f 1882 1880 1876
+f 1879 1882 1883
+f 1876 1883 1882
+f 1879 1884 1885
+f 1878 1884 1883
+f 1883 1884 1879
+f 1885 1884 1878
+f 1886 1887 1888
+f 1889 1887 1886
+f 1890 1887 1889
+f 1888 1887 1890
+f 1856 1850 1879
+f 1889 1878 1848
+f 1851 1850 1856
+f 1852 1851 1853
+f 1848 1852 1854
+f 1885 1886 1879
+f 1878 1889 1885
+f 1879 1888 1856
+f 1854 1857 1848
+f 1856 1853 1851
+f 1888 1879 1886
+f 1848 1857 1889
+f 1886 1885 1889
+f 1853 1854 1852
+f 1891 1892 1893
+f 1894 1891 1893
+f 1895 1896 1897
+f 1892 1895 1897
+f 1898 1894 1899
+f 1892 1897 1893
+f 1894 1893 1899
+f 1898 1899 1900
+f 1896 1900 1897
+f 1901 1902 1903
+f 1904 1903 1905
+f 1906 1905 1907
+f 1906 1907 1902
+f 1904 1908 1903
+f 1909 1904 1905
+f 1906 1909 1905
+f 1901 1910 1902
+f 1910 1906 1902
+f 1908 1901 1903
+f 1911 1912 1913
+f 1914 1913 1915
+f 1916 1915 1917
+f 1918 1917 1912
+f 1919 1920 1921
+f 1922 1921 1923
+f 1911 1924 1912
+f 1925 1911 1913
+f 1916 1914 1915
+f 1919 1926 1920
+f 1914 1925 1913
+f 1927 1919 1921
+f 1922 1927 1921
+f 1924 1918 1912
+f 1928 1929 1930
+f 1931 1930 1932
+f 1933 1932 1934
+f 1935 1934 1929
+f 1936 1923 1937
+f 1936 1937 1920
+f 1938 1933 1934
+f 1935 1938 1934
+f 1928 1935 1929
+f 1939 1922 1923
+f 1936 1939 1923
+f 1933 1931 1932
+f 1931 1940 1930
+f 1926 1936 1920
+f 1941 1942 1943
+f 1944 1941 1945
+f 1946 1944 1945
+f 1947 1946 1948
+f 1949 1947 1948
+f 1942 1949 1943
+f 1950 1951 1952
+f 1953 1952 1954
+f 1955 1954 1956
+f 1957 1956 1951
+f 1941 1943 1945
+f 1946 1945 1948
+f 1949 1948 1958
+f 1949 1958 1943
+f 1959 1960 1961
+f 1959 1962 1960
+f 1959 1963 1962
+f 1959 1961 1963
+f 1961 1741 1704
+f 1706 1708 1895
+f 1710 1706 1892
+f 1704 1710 1891
+f 1742 1962 1740
+f 1741 1963 1742
+f 1895 1708 1740
+f 1963 1741 1961
+f 1891 1894 1704
+f 1740 1962 1895
+f 1704 1894 1961
+f 1895 1892 1706
+f 1892 1891 1710
+f 1962 1742 1963
+f 1964 1965 1966
+f 1964 1966 1967
+f 1964 1968 1965
+f 1964 1967 1968
+f 1968 1961 1894
+f 1896 1895 1910
+f 1898 1896 1901
+f 1894 1898 1908
+f 1960 1965 1962
+f 1961 1968 1960
+f 1910 1895 1962
+f 1910 1901 1896
+f 1894 1904 1968
+f 1901 1908 1898
+f 1908 1904 1894
+f 1965 1960 1968
+f 1966 1962 1965
+f 1962 1966 1910
+f 1925 1914 1904
+f 1924 1911 1906
+f 1904 1914 1969
+f 1911 1925 1909
+f 1967 1970 1966
+f 1968 1971 1967
+f 1906 1910 1924
+f 1909 1906 1911
+f 1904 1909 1925
+f 1924 1910 1966
+f 1969 1968 1904
+f 1972 1969 1971
+f 1970 1967 1971
+f 1966 1970 1924
+f 1971 1968 1969
+f 1972 1971 1970
+f 1926 1924 1970
+f 1916 1918 1919
+f 1914 1916 1927
+f 1918 1924 1926
+f 1969 1973 1974
+f 1972 1974 1969
+f 1972 1970 1974
+f 1974 1975 1970
+f 1973 1969 1914
+f 1927 1922 1914
+f 1970 1976 1926
+f 1914 1922 1973
+f 1976 1970 1975
+f 1926 1919 1918
+f 1975 1974 1973
+f 1919 1927 1916
+f 1977 1975 1976
+f 1977 1973 1975
+f 1977 1978 1973
+f 1977 1976 1978
+f 1979 1980 1981
+f 1979 1982 1980
+f 1979 1983 1982
+f 1979 1981 1983
+f 1939 1936 1933
+f 1922 1939 1938
+f 1931 1926 1976
+f 1982 1973 1922
+f 1978 1981 1976
+f 1973 1980 1978
+f 1936 1926 1931
+f 1976 1981 1931
+f 1981 1978 1980
+f 1922 1935 1982
+f 1980 1973 1982
+f 1931 1933 1936
+f 1938 1935 1922
+f 1933 1938 1939
+f 1984 1982 1935
+f 1983 1985 1981
+f 1940 1931 1942
+f 1928 1940 1941
+f 1935 1928 1944
+f 1982 1984 1983
+f 1942 1931 1981
+f 1942 1941 1940
+f 1981 1986 1942
+f 1941 1944 1928
+f 1935 1946 1984
+f 1944 1946 1935
+f 1986 1981 1985
+f 1985 1983 1984
+f 1987 1985 1986
+f 1987 1984 1985
+f 1987 1988 1984
+f 1987 1986 1988
+f 1949 1942 1957
+f 1947 1949 1950
+f 1946 1947 1989
+f 1984 1990 1988
+f 1988 1991 1986
+f 1957 1942 1986
+f 1992 1984 1946
+f 1950 1989 1947
+f 1957 1950 1949
+f 1991 1988 1990
+f 1989 1953 1946
+f 1986 1991 1957
+f 1946 1953 1992
+f 1990 1984 1992
+f 1953 1989 1952
+f 1950 1957 1951
+f 1989 1950 1952
+f 1957 1993 1956
+f 1955 1953 1954
+f 1994 1995 1996
+f 1997 1994 1998
+f 1999 1997 1998
+f 2000 1999 2001
+f 2002 2000 2003
+f 1995 2002 1996
+f 2004 2005 2006
+f 2007 2006 2008
+f 2002 2003 1996
+f 1994 1996 1998
+f 1999 1998 2001
+f 2000 2001 2003
+f 2009 2004 2006
+f 2004 2010 2005
+f 2007 2009 2006
+f 2011 2012 2013
+f 2014 2011 2013
+f 2010 2015 2016
+f 2017 2014 2018
+f 2019 2017 2018
+f 2012 2020 2021
+f 2022 2007 2008
+f 2020 2019 2021
+f 2022 2008 2016
+f 2010 2016 2005
+f 2012 2021 2013
+f 2014 2013 2018
+f 2019 2018 2023
+f 2019 2023 2021
+f 2024 2025 2026
+f 2027 2028 2029
+f 2030 2024 2031
+f 2025 2027 2029
+f 2032 2030 2033
+f 2028 2032 2033
+f 2028 2033 2029
+f 2025 2029 2026
+f 2024 2026 2031
+f 2030 2031 2033
+f 2034 2035 2036
+f 2037 2036 2038
+f 2037 2034 2036
+f 2034 2039 2035
+f 2039 2040 2035
+f 2041 2037 2038
+f 2042 2041 2043
+f 2040 2042 2043
+f 2044 2045 2046
+f 2047 2046 2048
+f 2049 2048 2050
+f 2051 2050 2045
+f 2041 2038 2043
+f 2040 2043 2035
+f 2052 2047 2048
+f 2051 2053 2050
+f 2049 2052 2048
+f 2047 2044 2046
+f 2053 2049 2050
+f 2044 2051 2045
+f 2054 1990 1991
+f 2054 1992 1990
+f 2054 2055 1992
+f 2054 1991 2055
+f 1992 2056 2055
+f 2000 1957 1991
+f 2056 1992 1953
+f 1993 1957 2000
+f 1955 1993 2002
+f 1953 1955 1995
+f 2055 2057 1991
+f 2058 2056 2057
+f 1991 2059 2000
+f 2059 1991 2057
+f 2058 2057 2059
+f 2057 2055 2056
+f 2000 2002 1993
+f 2002 1995 1955
+f 1995 1994 1953
+f 1953 1994 2056
+f 2060 2061 2062
+f 2060 2063 2061
+f 2060 2064 2063
+f 2060 2062 2064
+f 1997 1999 2004
+f 1994 1997 2009
+f 2010 2000 2059
+f 1999 2000 2010
+f 2058 2065 2056
+f 2063 2056 1994
+f 2065 2062 2059
+f 2056 2061 2065
+f 2058 2059 2065
+f 2009 2007 1994
+f 2062 2065 2061
+f 1994 2007 2063
+f 2061 2056 2063
+f 2010 2004 1999
+f 2059 2062 2010
+f 2004 2009 1997
+f 2066 2067 2068
+f 2066 2069 2067
+f 2066 2070 2069
+f 2066 2068 2070
+f 2020 2010 2062
+f 2069 2063 2007
+f 2063 2069 2064
+f 2015 2010 2020
+f 2022 2015 2012
+f 2007 2022 2011
+f 2064 2067 2062
+f 2012 2011 2022
+f 2020 2012 2015
+f 2062 2068 2020
+f 2007 2014 2069
+f 2068 2062 2067
+f 2011 2014 2007
+f 2067 2064 2069
+f 2071 2072 2073
+f 2071 2074 2072
+f 2071 2075 2074
+f 2071 2073 2075
+f 2014 2017 2027
+f 2032 2020 2068
+f 2070 2075 2068
+f 2069 2073 2070
+f 2017 2019 2028
+f 2072 2069 2014
+f 2019 2020 2032
+f 2032 2028 2019
+f 2075 2070 2073
+f 2028 2027 2017
+f 2068 2075 2032
+f 2027 2025 2014
+f 2014 2025 2072
+f 2073 2069 2072
+f 2076 2072 2025
+f 2074 2077 2075
+f 2030 2032 2040
+f 2024 2030 2039
+f 2025 2024 2034
+f 2072 2076 2074
+f 2040 2032 2075
+f 2078 2075 2077
+f 2039 2034 2024
+f 2034 2037 2025
+f 2025 2037 2076
+f 2077 2074 2076
+f 2040 2039 2030
+f 2075 2078 2040
+f 2079 2077 2078
+f 2079 2076 2077
+f 2079 2080 2076
+f 2079 2078 2080
+f 2037 2051 2081
+f 2052 2049 2042
+f 2049 2053 2041
+f 2053 2051 2037
+f 2082 2083 2084
+f 2082 2081 2083
+f 2084 2080 2083
+f 2083 2076 2081
+f 2078 2084 2052
+f 2052 2040 2078
+f 2081 2076 2037
+f 2076 2083 2080
+f 2080 2084 2078
+f 2042 2040 2052
+f 2037 2041 2053
+f 2085 2052 2084
+f 2081 2086 2087
+f 2088 2081 2051
+f 2082 2087 2081
+f 2082 2084 2087
+f 2047 2052 2085
+f 2051 2044 2089
+f 2087 2090 2084
+f 2090 2087 2086
+f 2086 2081 2088
+f 2085 2091 2047
+f 2091 2089 2044
+f 2051 2089 2088
+f 2084 2090 2085
+f 2092 1966 1965
+f 2093 1965 1968
+f 2094 1962 1963
+f 2095 1963 1961
+f 2096 1961 1960
+f 2097 1960 1962
+f 2094 2098 1962
+f 2099 2094 1963
+f 2095 2099 1963
+f 2092 2100 1966
+f 2093 2092 1965
+f 2096 2095 1961
+f 2101 2093 1968
+f 2098 2097 1962
+f 2102 1969 1974
+f 2103 1974 1970
+f 2104 1968 1967
+f 2100 1967 1966
+f 2105 1970 1971
+f 2106 1971 1969
+f 2107 2105 1971
+f 2106 2107 1971
+f 2102 2106 1969
+f 2108 2101 1968
+f 2104 2108 1968
+f 2100 2104 1967
+f 2109 2103 1970
+f 2105 2109 1970
+f 2110 2111 1975
+f 2112 2110 1973
+f 2113 2112 1973
+f 2114 2113 1973
+f 2115 2114 1978
+f 2111 2115 1976
+f 2110 1975 1973
+f 2114 1973 1978
+f 2115 1978 1976
+f 2116 1982 1983
+f 2117 1983 1981
+f 2118 1980 1982
+f 2111 1976 1975
+f 2119 1981 1980
+f 2120 2119 1980
+f 2118 2120 1980
+f 2116 2118 1982
+f 2121 2117 1981
+f 2119 2121 1981
+f 2122 2123 1986
+f 2124 2122 1985
+f 2125 2124 1984
+f 2126 2125 1984
+f 2127 2126 1984
+f 2123 2127 1988
+f 2128 1991 1990
+f 2129 1990 1992
+f 2130 1992 2055
+f 2131 2055 1991
+f 2122 1986 1985
+f 2124 1985 1984
+f 2127 1984 1988
+f 2123 1988 1986
+f 2132 2133 2134
+f 2135 2133 2136
+f 2136 2133 2132
+f 2137 2138 2139
+f 2140 2138 2137
+f 2134 2133 2135
+f 2141 2138 2140
+f 2139 2138 2141
+f 2098 1856 1888
+f 1890 2135 1888
+f 1889 2134 1890
+f 2132 1889 1857
+f 1855 1856 2098
+f 1858 1855 2094
+f 1857 1858 2099
+f 1888 2135 2098
+f 1857 2095 2132
+f 2135 1890 2134
+f 2098 2094 1855
+f 2134 1889 2132
+f 2094 2099 1858
+f 2099 2095 1857
+f 2100 2092 2097
+f 2135 2139 2100
+f 2095 2101 2140
+f 2137 2136 2140
+f 2092 2093 2096
+f 2139 2135 2137
+f 2093 2101 2095
+f 2097 2098 2100
+f 2095 2096 2093
+f 2136 2137 2135
+f 2132 2140 2136
+f 2100 2098 2135
+f 2140 2132 2095
+f 2096 2097 2092
+f 2109 2100 2139
+f 2142 2140 2101
+f 2104 2100 2109
+f 2108 2104 2105
+f 2101 2108 2107
+f 2101 2106 2142
+f 2105 2107 2108
+f 2139 2143 2109
+f 2107 2106 2101
+f 2109 2105 2104
+f 2103 2109 2115
+f 2102 2103 2111
+f 2106 2102 2110
+f 2115 2109 2143
+f 2144 2142 2106
+f 2115 2111 2103
+f 2111 2110 2102
+f 2143 2145 2115
+f 2106 2112 2144
+f 2110 2112 2106
+f 2141 2143 2139
+f 2143 2141 2146
+f 2140 2146 2141
+f 2146 2140 2142
+f 2146 2147 2143
+f 2142 2147 2146
+f 2148 2149 2144
+f 2142 2144 2149
+f 2149 2147 2142
+f 2143 2147 2149
+f 2145 2143 2148
+f 2149 2148 2143
+f 2144 2150 2148
+f 2151 2150 2144
+f 2145 2150 2151
+f 2152 2153 2154
+f 2155 2153 2152
+f 2156 2153 2155
+f 2154 2153 2156
+f 2148 2150 2145
+f 2156 2157 2154
+f 2157 2156 2118
+f 2117 2121 2123
+f 2123 2121 2152
+f 2116 2117 2122
+f 2118 2116 2124
+f 2154 2158 2152
+f 2114 2115 2121
+f 2113 2114 2119
+f 2151 2152 2145
+f 2144 2155 2151
+f 2112 2113 2120
+f 2121 2115 2145
+f 2156 2144 2112
+f 2120 2118 2112
+f 2152 2151 2155
+f 2119 2120 2113
+f 2145 2152 2121
+f 2112 2118 2156
+f 2155 2144 2156
+f 2121 2119 2114
+f 2159 2160 2157
+f 2161 2160 2159
+f 2158 2160 2161
+f 2162 2163 2164
+f 2157 2160 2158
+f 2165 2163 2166
+f 2164 2163 2165
+f 2166 2163 2162
+f 2152 2161 2123
+f 2161 2152 2158
+f 2158 2154 2157
+f 2118 2125 2157
+f 2123 2122 2117
+f 2122 2124 2116
+f 2124 2125 2118
+f 2125 2126 2167
+f 2126 2127 2128
+f 2127 2123 2168
+f 2165 2157 2125
+f 2168 2123 2161
+f 2159 2162 2161
+f 2157 2166 2159
+f 2166 2157 2165
+f 2128 2167 2126
+f 2161 2162 2168
+f 2168 2128 2127
+f 2125 2129 2165
+f 2162 2159 2166
+f 2167 2129 2125
+f 2128 2168 1991
+f 2130 2129 1992
+f 2167 2128 1990
+f 2129 2167 1990
+f 2168 2131 1991
+f 2169 2170 2059
+f 2171 2169 2057
+f 2172 2171 2056
+f 2173 2172 2056
+f 2174 2173 2056
+f 2170 2174 2065
+f 2175 2061 2063
+f 2169 2059 2057
+f 2171 2057 2056
+f 2174 2056 2065
+f 2170 2065 2059
+f 2176 2062 2061
+f 2176 2177 2062
+f 2178 2176 2061
+f 2175 2178 2061
+f 2179 2064 2062
+f 2180 2068 2067
+f 2181 2067 2069
+f 2182 2069 2070
+f 2183 2070 2068
+f 2184 2063 2064
+f 2185 2186 2069
+f 2182 2185 2069
+f 2183 2182 2070
+f 2180 2183 2068
+f 2181 2180 2067
+f 2186 2181 2069
+f 2184 2175 2063
+f 2177 2179 2062
+f 2187 2188 2075
+f 2188 2189 2075
+f 2190 2187 2073
+f 2191 2190 2073
+f 2192 2191 2072
+f 2191 2073 2072
+f 2192 2072 2074
+f 2189 2074 2075
+f 2187 2075 2073
+f 2193 2078 2077
+f 2194 2077 2076
+f 2194 2193 2077
+f 2195 2194 2076
+f 2196 2195 2076
+f 2193 2197 2078
+f 2198 2081 2087
+f 2199 2087 2084
+f 2200 2084 2083
+f 2201 2083 2081
+f 2202 2076 2080
+f 2197 2080 2078
+f 2200 2199 2084
+f 2201 2200 2083
+f 2203 2201 2081
+f 2198 2203 2081
+f 2204 2198 2087
+f 2202 2196 2076
+f 2197 2202 2080
+f 2199 2204 2087
+f 2170 2168 2162
+f 2205 2165 2129
+f 2131 2168 2170
+f 2130 2131 2169
+f 2129 2130 2171
+f 2129 2172 2205
+f 2169 2171 2130
+f 2162 2206 2170
+f 2171 2172 2129
+f 2170 2169 2131
+f 2174 2170 2177
+f 2173 2174 2176
+f 2172 2173 2178
+f 2207 2205 2172
+f 2177 2170 2206
+f 2172 2175 2207
+f 2178 2175 2172
+f 2176 2178 2173
+f 2206 2208 2177
+f 2177 2176 2174
+f 2164 2209 2162
+f 2165 2205 2164
+f 2209 2210 2206
+f 2205 2210 2209
+f 2206 2162 2209
+f 2209 2164 2205
+f 2208 2211 2212
+f 2211 2210 2205
+f 2206 2210 2211
+f 2211 2208 2206
+f 2205 2212 2211
+f 2212 2205 2207
+f 2212 2213 2208
+f 2207 2213 2212
+f 2214 2215 2216
+f 2217 2215 2214
+f 2218 2215 2217
+f 2216 2215 2218
+f 2219 2213 2207
+f 2208 2213 2219
+f 2184 2179 2180
+f 2179 2177 2183
+f 2175 2184 2181
+f 2183 2177 2208
+f 2217 2207 2175
+f 2219 2214 2208
+f 2207 2217 2219
+f 2183 2180 2179
+f 2180 2181 2184
+f 2175 2186 2217
+f 2216 2208 2214
+f 2208 2216 2183
+f 2214 2219 2217
+f 2181 2186 2175
+f 2220 2221 2222
+f 2223 2221 2220
+f 2224 2221 2223
+f 2225 2226 2227
+f 2228 2226 2225
+f 2229 2226 2228
+f 2227 2226 2229
+f 2222 2221 2224
+f 2217 2222 2218
+f 2185 2182 2187
+f 2182 2183 2188
+f 2186 2185 2190
+f 2218 2224 2216
+f 2188 2183 2216
+f 2220 2217 2186
+f 2188 2187 2182
+f 2224 2218 2222
+f 2190 2191 2186
+f 2187 2190 2185
+f 2222 2217 2220
+f 2216 2224 2188
+f 2186 2191 2220
+f 2228 2220 2191
+f 2189 2188 2197
+f 2192 2189 2193
+f 2191 2192 2194
+f 2223 2225 2224
+f 2220 2228 2223
+f 2197 2188 2224
+f 2227 2224 2225
+f 2193 2194 2192
+f 2225 2223 2228
+f 2197 2193 2189
+f 2194 2195 2191
+f 2224 2227 2197
+f 2191 2195 2228
+f 2230 2231 2198
+f 2203 2198 2231
+f 2204 2199 2232
+f 2232 2199 2233
+f 2203 2231 2234
+f 2232 2230 2204
+f 2234 2235 2203
+f 2233 2236 2232
+f 2199 2197 2227
+f 2202 2197 2199
+f 2196 2202 2200
+f 2195 2196 2201
+f 2235 2228 2195
+f 2201 2203 2195
+f 2200 2201 2196
+f 2227 2233 2199
+f 2195 2203 2235
+f 2199 2200 2202
+f 2235 2237 2238
+f 2229 2233 2227
+f 2233 2229 2238
+f 2238 2228 2235
+f 2228 2238 2229
+f 2238 2237 2233
+f 2236 2239 2240
+f 2240 2235 2234
+f 2239 2236 2233
+f 2233 2237 2239
+f 2235 2240 2239
+f 2239 2237 2235
+f 2241 2242 2243
+f 2244 2245 2246
+f 2245 2243 2242
+f 2242 2246 2245
+f 2243 2245 2244
+f 2247 2246 2242
+f 2248 2244 2247
+f 2247 2241 2248
+f 2244 2248 2243
+f 2243 2248 2241
+f 2246 2247 2244
+f 2242 2241 2247
+f 2249 2250 2251
+f 2250 2252 2251
+f 2251 2252 2253
+f 2252 2254 2255
+f 2254 2252 2250
+f 2256 2257 2258
+f 2259 2257 2256
+f 2256 2255 2259
+f 2255 2256 2252
+f 2252 2256 2253
+f 2253 2256 2258
+f 2260 2261 2262
+f 2262 2254 2260
+f 2254 2263 2260
+f 2250 2263 2254
+f 2262 2264 2265
+f 2255 2265 2266
+f 2255 2254 2262
+f 2265 2255 2262
+f 2267 2265 2264
+f 2268 2264 2269
+f 2261 2269 2264
+f 2270 2267 2268
+f 2264 2268 2267
+f 2271 2272 2270
+f 2267 2270 2272
+f 2272 2271 2273
+f 2264 2262 2261
+f 2266 2274 2275
+f 2272 2266 2267
+f 2265 2267 2266
+f 2273 2274 2272
+f 2266 2272 2274
+f 2274 2273 2276
+f 2259 2255 2266
+f 2259 2266 2275
+f 2258 2257 2277
+f 2257 2278 2277
+f 2275 2278 2257
+f 2257 2259 2275
+f 2279 2280 2278
+f 2278 2275 2279
+f 2277 2278 2281
+f 2278 2280 2281
+f 2275 2274 2279
+f 2274 2276 2279
+f 2282 2279 2283
+f 2279 2276 2283
+f 2281 2280 2284
+f 2280 2285 2284
+f 2282 2285 2280
+f 2280 2279 2282
+f 2286 2273 2271
+f 2287 2271 2288
+f 2270 2288 2271
+f 2271 2287 2286
+f 2289 2268 2290
+f 2269 2290 2268
+f 2288 2270 2289
+f 2268 2289 2270
+f 2290 2291 2289
+f 2292 2293 2294
+f 2294 2295 2296
+f 2295 2294 2293
+f 2294 2297 2292
+f 2298 2292 2297
+f 2296 2299 2294
+f 2300 2301 2302
+f 2303 2304 2305
+f 2302 2305 2304
+f 2304 2306 2302
+f 2299 2301 2297
+f 2300 2297 2301
+f 2297 2294 2299
+f 2306 2300 2302
+f 2284 2285 2303
+f 2285 2304 2303
+f 2306 2304 2285
+f 2285 2282 2306
+f 2282 2283 2306
+f 2283 2300 2306
+f 2307 2276 2273
+f 2298 2283 2307
+f 2276 2307 2283
+f 2297 2300 2298
+f 2283 2298 2300
+f 2308 2307 2286
+f 2273 2286 2307
+f 2292 2298 2308
+f 2307 2308 2298
+f 2309 2286 2287
+f 2309 2310 2311
+f 2311 2308 2309
+f 2286 2309 2308
+f 2308 2311 2292
+f 2312 2293 2313
+f 2311 2313 2293
+f 2314 2295 2312
+f 2293 2312 2295
+f 2293 2292 2311
+f 2315 2316 2317
+f 2314 2315 2318
+f 2317 2319 2320
+f 2315 2317 2320
+f 2315 2314 2316
+f 2312 2316 2314
+f 2318 2321 2314
+f 2320 2318 2315
+f 2295 2314 2321
+f 2321 2296 2295
+f 2313 2311 2310
+f 2310 2309 2322
+f 2323 2313 2324
+f 2310 2324 2313
+f 2313 2323 2312
+f 2316 2323 2325
+f 2316 2325 2317
+f 2323 2324 2326
+f 2323 2326 2325
+f 2316 2312 2323
+f 2327 2328 2329
+f 2324 2330 2326
+f 2327 2329 2330
+f 2327 2322 2328
+f 2331 2328 2322
+f 2324 2310 2327
+f 2322 2327 2310
+f 2324 2327 2330
+f 2332 2333 2331
+f 2291 2334 2332
+f 2331 2288 2332
+f 2289 2332 2288
+f 2322 2287 2331
+f 2288 2331 2287
+f 2287 2322 2309
+f 2332 2289 2291
+f 2333 2332 2334
+f 2328 2335 2329
+f 2336 2337 2334
+f 2337 2333 2334
+f 2328 2333 2335
+f 2333 2337 2335
+f 2328 2331 2333
+f 2338 2339 2340
+f 2263 2250 2341
+f 2341 2340 2263
+f 2339 2338 2342
+f 2342 2343 2339
+f 2340 2341 2338
+f 2341 2250 2249
+f 2342 2338 2344
+f 2338 2345 2344
+f 2338 2341 2345
+f 2341 2346 2345
+f 2346 2341 2249
+f 2345 2346 2344
+f 2346 2249 2344
+f 2344 2249 2347
+f 2348 2347 2251
+f 2249 2251 2347
+f 2349 2350 2351
+f 2351 2350 2348
+f 2352 2353 2349
+f 2350 2349 2353
+f 2351 2348 2253
+f 2251 2253 2348
+f 2350 2354 2348
+f 2355 2356 957
+f 2353 2357 2350
+f 2355 957 958
+f 2356 2355 2358
+f 2359 2358 2355
+f 2357 2353 2359
+f 2358 2359 2353
+f 2360 2349 2351
+f 2352 2361 2362
+f 2361 2352 2363
+f 2360 2351 2258
+f 2253 2258 2351
+f 2363 2349 2360
+f 2349 2363 2352
+f 2364 2363 2365
+f 2365 2363 2360
+f 2366 2361 2364
+f 2365 2360 2277
+f 2258 2277 2360
+f 2363 2364 2361
+f 2367 2356 2362
+f 2356 2367 917
+f 2353 2352 2358
+f 2362 2358 2352
+f 2358 2362 2356
+f 2356 917 957
+f 2362 2368 2367
+f 2367 938 917
+f 2368 2362 2361
+f 2369 2367 2368
+f 2367 2369 938
+f 2368 2370 2369
+f 2371 2369 2370
+f 2369 2371 937
+f 2369 937 938
+f 2370 2368 2366
+f 2361 2366 2368
+f 2339 2372 2373
+f 2373 2260 2340
+f 2260 2263 2340
+f 2374 2372 2343
+f 2372 2339 2343
+f 2340 2339 2373
+f 2261 2260 2375
+f 2373 2375 2260
+f 2375 2373 2376
+f 2372 2376 2373
+f 2376 2372 2377
+f 2374 2377 2372
+f 2377 2374 2378
+f 2354 2350 2357
+f 2348 2354 2347
+f 2342 2344 2379
+f 2347 2380 2344
+f 2374 2343 2381
+f 2343 2342 2379
+f 2379 2381 2343
+f 2382 2383 2384
+f 2384 2385 2382
+f 2381 2379 2383
+f 2383 2382 2381
+f 2385 2384 2386
+f 2387 2388 2389
+f 2387 2390 2386
+f 2388 2391 2380
+f 2380 2389 2388
+f 2389 2390 2387
+f 2389 2380 2386
+f 2386 2390 2389
+f 2391 2388 2383
+f 2379 2391 2383
+f 2387 2386 2384
+f 2383 2388 2384
+f 2388 2387 2384
+f 2386 2354 2357
+f 2347 2354 2380
+f 2386 2380 2354
+f 2386 2357 2392
+f 2344 2391 2379
+f 2391 2344 2380
+f 2357 2393 2392
+f 2359 2394 2393
+f 2359 2393 2357
+f 2355 2394 2359
+f 2355 958 959
+f 959 2394 2355
+f 2394 2395 2393
+f 2395 2396 2393
+f 2394 959 2395
+f 963 2395 959
+f 2385 2396 2397
+f 2398 2385 2397
+f 2393 2385 2392
+f 2392 2385 2386
+f 2385 2393 2396
+f 2399 2400 2401
+f 2400 2402 2403
+f 2400 2403 2401
+f 2401 2403 2404
+f 2405 2401 2404
+f 2406 2404 2407
+f 2378 2408 2403
+f 2408 2378 2374
+f 2404 2403 2407
+f 2409 2410 2411
+f 2411 2382 2409
+f 2398 2409 2385
+f 2408 2374 2381
+f 2382 2411 2408
+f 2381 2382 2408
+f 2382 2385 2409
+f 2412 2407 2413
+f 2411 2403 2408
+f 2414 2413 2410
+f 2410 2409 2415
+f 2413 2407 2411
+f 2407 2403 2411
+f 2410 2413 2411
+f 2416 2417 2410
+f 2397 2418 2398
+f 2398 2418 2419
+f 2419 2416 2415
+f 2420 2417 2410
+f 2414 2410 2417
+f 2412 2413 2421
+f 2419 2409 2398
+f 2413 2414 2422
+f 2410 2415 2416
+f 2415 2409 2419
+f 2385 2420 2410
+f 2410 2417 2404
+f 2423 2364 2365
+f 2423 2365 2281
+f 2277 2281 2365
+f 2424 2366 2425
+f 2425 2364 2423
+f 2364 2425 2366
+f 2424 2426 2427
+f 2428 2427 2426
+f 2429 2423 2284
+f 2281 2284 2423
+f 2430 2425 2429
+f 2429 2425 2423
+f 2426 2424 2430
+f 2425 2430 2424
+f 2366 2424 2370
+f 2370 2427 2371
+f 2427 2370 2424
+f 2371 1004 937
+f 2431 2371 2427
+f 2431 1005 1004
+f 2371 2431 1004
+f 2427 2428 2431
+f 2432 2433 2434
+f 2434 2428 2435
+f 2433 2431 2428
+f 2433 2432 1008
+f 2433 1008 1005
+f 2431 2433 1005
+f 2426 2435 2428
+f 2428 2434 2433
+f 2436 2437 2399
+f 2438 2439 2405
+f 2440 2441 2402
+f 2442 2440 2443
+f 2437 2442 2400
+f 2439 2436 2401
+f 2421 2444 2412
+f 2444 2445 2407
+f 2446 2438 2404
+f 2445 2446 2406
+f 2417 2422 2414
+f 2422 2421 2413
+f 2417 2438 2404
+f 2401 2405 2439
+f 2407 2412 2444
+f 2404 2406 2446
+f 2406 2407 2445
+f 2405 2404 2438
+f 2447 2448 2449
+f 2450 2447 2451
+f 2452 2453 2454
+f 2455 2450 2456
+f 2457 2458 2459
+f 2453 2457 2460
+f 2448 2452 2461
+f 2457 2460 2462
+f 2400 2399 2437
+f 2443 2400 2442
+f 2458 2402 2441
+f 2402 2443 2440
+f 2399 2401 2436
+f 2404 2438 2457
+f 2449 2451 2447
+f 2459 2460 2457
+f 2461 2449 2448
+f 2454 2461 2452
+f 2460 2454 2453
+f 2441 2459 2458
+f 2438 2460 2457
+f 2463 2464 2465
+f 2465 2466 2463
+f 2290 2269 2467
+f 2468 2467 2269
+f 2467 2468 2469
+f 2470 2469 2468
+f 2469 2470 2466
+f 2471 2466 2470
+f 2466 2465 2469
+f 2472 2463 2466
+f 2466 2471 2472
+f 2375 2468 2261
+f 2468 2375 2470
+f 2376 2470 2375
+f 2470 2376 2471
+f 2377 2471 2376
+f 2269 2261 2468
+f 2471 2377 2473
+f 2378 2473 2377
+f 2443 2402 2400
+f 2403 2474 2378
+f 2402 2457 2403
+f 2457 2474 2403
+f 2473 2378 2474
+f 2453 2452 2457
+f 2458 2457 2402
+f 2448 2447 2452
+f 2475 2462 2455
+f 2462 2474 2455
+f 2455 2474 2447
+f 2447 2474 2452
+f 2452 2474 2457
+f 2450 2455 2447
+f 2474 2476 2473
+f 2473 2472 2471
+f 2462 2477 2474
+f 2478 2479 2477
+f 2472 2473 2476
+f 2480 2477 2462
+f 2479 2476 2477
+f 2477 2476 2474
+f 2479 2481 2476
+f 2476 2481 2482
+f 2483 2482 2481
+f 2484 2481 2479
+f 2482 2485 2476
+f 2463 2472 2486
+f 2476 2486 2472
+f 2485 2487 2476
+f 2487 2486 2476
+f 2488 2489 2487
+f 2490 2487 2485
+f 2491 2485 2482
+f 2318 2320 2492
+f 2493 2494 2495
+f 2492 2495 2494
+f 2494 2493 2496
+f 2492 2497 2318
+f 2321 2318 2497
+f 2494 2498 2492
+f 2497 2492 2498
+f 2496 2499 2494
+f 2498 2494 2499
+f 2500 2501 2502
+f 2502 2503 2504
+f 2317 2325 2504
+f 2504 2505 2317
+f 2319 2317 2505
+f 2506 2496 2493
+f 2495 2492 2320
+f 2320 2319 2495
+f 2495 2507 2493
+f 2493 2508 2506
+f 2509 2319 2505
+f 2507 2508 2493
+f 2319 2507 2495
+f 2508 2509 2506
+f 2508 2507 2509
+f 2507 2319 2509
+f 2510 2511 2512
+f 2513 2514 2515
+f 2512 2515 2514
+f 2299 2296 2510
+f 2510 2516 2299
+f 2511 2497 2515
+f 2515 2498 2513
+f 2511 2510 2296
+f 2515 2512 2511
+f 2296 2321 2511
+f 2496 2506 2517
+f 2497 2511 2321
+f 2499 2513 2498
+f 2498 2515 2497
+f 2518 2509 2519
+f 2517 2520 2496
+f 2499 2496 2520
+f 2521 2517 2506
+f 2509 2518 2521
+f 2504 2503 2505
+f 2503 2502 2501
+f 2506 2509 2521
+f 2501 2500 2522
+f 2523 2524 2522
+f 2525 2503 2501
+f 2522 2526 2501
+f 2505 2503 2519
+f 2505 2519 2509
+f 2525 2501 2527
+f 2525 2519 2503
+f 2501 2526 2527
+f 2522 2524 2526
+f 2528 2430 2429
+f 2284 2303 2429
+f 2430 2529 2426
+f 2528 2429 2303
+f 2529 2430 2528
+f 2435 2426 2529
+f 2530 2529 2528
+f 2435 2531 2434
+f 2531 2435 2532
+f 2529 2532 2435
+f 2530 2305 2533
+f 2530 2528 2305
+f 2303 2305 2528
+f 2534 2535 2305
+f 2305 2302 2534
+f 2536 2537 2535
+f 2535 2534 2536
+f 2538 2533 2537
+f 2537 2536 2538
+f 2305 2535 2533
+f 2535 2537 2533
+f 2538 2536 2539
+f 2301 2516 2534
+f 2534 2516 2536
+f 2516 2540 2536
+f 2536 2540 2539
+f 2302 2301 2534
+f 2540 2512 2539
+f 2514 2539 2512
+f 2514 2513 2541
+f 2513 2499 2542
+f 2301 2299 2516
+f 2512 2540 2510
+f 2516 2510 2540
+f 2543 2544 2545
+f 2517 2521 2546
+f 2544 2546 2545
+f 2547 2545 2548
+f 2545 2549 2548
+f 2520 2542 2499
+f 2549 2546 2521
+f 2546 2549 2545
+f 2549 2550 2548
+f 2550 2551 2548
+f 2548 2551 2525
+f 2521 2518 2549
+f 2551 2550 2552
+f 2550 2518 2519
+f 2518 2550 2549
+f 2553 2434 2531
+f 2432 2554 1021
+f 2434 2553 2432
+f 2554 2432 2553
+f 2432 1021 1008
+f 2541 2555 2514
+f 2542 2541 2513
+f 2556 2557 2542
+f 2520 2517 2558
+f 2558 2546 2559
+f 2560 2559 2561
+f 2562 2563 2559
+f 2564 2565 2563
+f 2565 2558 2563
+f 2563 2558 2559
+f 2561 2546 2566
+f 2566 2546 2567
+f 2544 2567 2546
+f 2559 2546 2561
+f 2546 2558 2517
+f 2568 2567 2544
+f 2569 2566 2567
+f 2570 2561 2566
+f 2532 2571 2531
+f 2532 2530 2571
+f 2538 2539 2572
+f 2539 2514 2555
+f 2532 2529 2530
+f 2533 2538 2572
+f 2533 2573 2530
+f 2397 2531 2571
+f 2574 2571 2530
+f 2572 2573 2533
+f 2531 2397 2553
+f 2574 2530 2573
+f 2539 2555 2572
+f 2553 2396 2554
+f 2395 2554 2396
+f 1021 2554 2395
+f 2395 963 1021
+f 2396 2553 2397
+f 2397 2571 2420
+f 2420 2571 2575
+f 2420 2418 2397
+f 2574 2576 2571
+f 2571 2576 2577
+f 2577 2575 2571
+f 2577 2576 2578
+f 2578 2575 2577
+f 2576 2574 2573
+f 2579 2578 2573
+f 2573 2578 2576
+f 2573 2572 2579
+f 2420 2575 2578
+f 2578 2579 2420
+f 2580 2419 2420
+f 2420 2419 2418
+f 2572 2555 2579
+f 2555 2580 2579
+f 2579 2580 2420
+f 2555 2541 2580
+f 2421 2422 2417
+f 2417 2416 2419
+f 2580 2445 2421
+f 2421 2417 2580
+f 2580 2417 2419
+f 2438 2445 2557
+f 2557 2445 2580
+f 2438 2446 2445
+f 2439 2438 2436
+f 2557 2436 2438
+f 2557 2580 2541
+f 2445 2444 2421
+f 2451 2556 2581
+f 2456 2451 2581
+f 2556 2558 2582
+f 2583 2582 2584
+f 2542 2520 2556
+f 2585 2581 2582
+f 2582 2581 2556
+f 2586 2587 2565
+f 2558 2556 2520
+f 2582 2558 2584
+f 2588 2589 2587
+f 2589 2558 2587
+f 2584 2558 2589
+f 2587 2558 2565
+f 2590 2584 2589
+f 2454 2460 2461
+f 2459 2441 2460
+f 2541 2542 2557
+f 2557 2556 2441
+f 2441 2556 2460
+f 2440 2442 2441
+f 2441 2442 2557
+f 2436 2557 2442
+f 2437 2436 2442
+f 2525 2527 2548
+f 2548 2527 2526
+f 2551 2591 2525
+f 2552 2591 2551
+f 2525 2591 2552
+f 2519 2552 2550
+f 2552 2519 2525
+f 2460 2556 2461
+f 2461 2556 2451
+f 2449 2461 2451
+f 2585 2582 2462
+f 2456 2581 2455
+f 2451 2456 2450
+f 2581 2585 2475
+f 2460 2582 2462
+f 2480 2462 2582
+f 2478 2477 2584
+f 2479 2478 2590
+f 2462 2475 2585
+f 2477 2480 2583
+f 2475 2455 2581
+f 2481 2462 2587
+f 2583 2584 2477
+f 2588 2587 2481
+f 2582 2583 2480
+f 2584 2590 2478
+f 2589 2588 2484
+f 2590 2589 2479
+f 2462 2582 2587
+f 2592 2500 2593
+f 2502 2593 2500
+f 2593 2502 2594
+f 2594 2502 2504
+f 2325 2326 2594
+f 2594 2504 2325
+f 2595 2592 2596
+f 2593 2596 2592
+f 2592 2595 2597
+f 2598 2597 2595
+f 2599 2594 2326
+f 2596 2593 2599
+f 2599 2593 2594
+f 2522 2600 2523
+f 2600 2522 2500
+f 2523 2601 2602
+f 2523 2602 2603
+f 2601 2523 2600
+f 2600 2597 2601
+f 2500 2592 2600
+f 2597 2598 2604
+f 2605 2604 2598
+f 2604 2606 2607
+f 2601 2604 2607
+f 2604 2601 2597
+f 2601 2607 2602
+f 2597 2600 2592
+f 2608 2595 2609
+f 2609 2596 2610
+f 2610 2596 2599
+f 2610 2599 2330
+f 2326 2330 2599
+f 2596 2609 2595
+f 2611 2608 2612
+f 2613 2610 2329
+f 2330 2329 2610
+f 2612 2609 2613
+f 2613 2609 2610
+f 2609 2612 2608
+f 2598 2614 2605
+f 2615 2605 2614
+f 2605 2616 2606
+f 2595 2608 2598
+f 2614 2598 2608
+f 2604 2605 2606
+f 2605 2615 2616
+f 2608 2611 2614
+f 2617 2614 2611
+f 2614 2617 2615
+f 2618 2615 2617
+f 2615 2619 2616
+f 2615 2618 2619
+f 2469 2620 2467
+f 2291 2290 2621
+f 2467 2621 2290
+f 2620 2469 2465
+f 2621 2467 2620
+f 2621 2622 2291
+f 2620 2623 2621
+f 2465 2624 2620
+f 2622 2621 2623
+f 2334 2291 2622
+f 2624 2465 2464
+f 2623 2620 2624
+f 2625 2613 2335
+f 2329 2335 2613
+f 2625 2612 2613
+f 2626 2627 2628
+f 2628 2625 2337
+f 2629 2626 2628
+f 2335 2337 2625
+f 2630 2631 2632
+f 2626 2632 2631
+f 2631 2630 2633
+f 2633 2634 2635
+f 2634 2633 2630
+f 2636 2635 2634
+f 2635 2636 2637
+f 2617 2638 2618
+f 2639 2618 2638
+f 2618 2639 2640
+f 2618 2640 2619
+f 2638 2617 2641
+f 2631 2641 2626
+f 2627 2626 2641
+f 2641 2611 2627
+f 2612 2627 2611
+f 2628 2627 2625
+f 2611 2641 2617
+f 2627 2612 2625
+f 2635 2639 2633
+f 2635 2637 2642
+f 2639 2635 2642
+f 2639 2642 2640
+f 2633 2638 2631
+f 2641 2631 2638
+f 2638 2633 2639
+f 2623 2624 2643
+f 2644 2622 2645
+f 2643 2624 2464
+f 2622 2623 2645
+f 2336 2334 2644
+f 2334 2622 2644
+f 2645 2623 2643
+f 2629 2336 2643
+f 2643 2646 2629
+f 2629 2628 2336
+f 2644 2645 2643
+f 2632 2626 2629
+f 2337 2336 2628
+f 2336 2644 2643
+f 2586 2565 2482
+f 2485 2563 2562
+f 2565 2564 2491
+f 2587 2586 2483
+f 2564 2563 2485
+f 2587 2559 2481
+f 2483 2481 2587
+f 2485 2491 2564
+f 2482 2483 2586
+f 2481 2484 2588
+f 2562 2490 2485
+f 2491 2482 2565
+f 2484 2479 2589
+f 2559 2487 2481
+f 2570 2566 2647
+f 2560 2561 2489
+f 2561 2570 2648
+f 2562 2559 2487
+f 2559 2560 2488
+f 2487 2559 2567
+f 2489 2488 2560
+f 2648 2489 2561
+f 2649 2647 2566
+f 2487 2490 2562
+f 2650 2649 2569
+f 2488 2487 2559
+f 2647 2648 2570
+f 2650 2487 2567
+f 2651 2548 2526
+f 2544 2543 2652
+f 2547 2548 2651
+f 2545 2547 2653
+f 2543 2545 2654
+f 2568 2544 2655
+f 2569 2567 2650
+f 2566 2569 2649
+f 2567 2548 2650
+f 2567 2568 2656
+f 2655 2656 2568
+f 2654 2652 2543
+f 2656 2650 2567
+f 2652 2655 2544
+f 2653 2654 2545
+f 2651 2653 2547
+f 2548 2651 2650
+f 2649 2650 2647
+f 2655 2486 2650
+f 2648 2647 2489
+f 2650 2486 2647
+f 2647 2486 2489
+f 2489 2486 2487
+f 2486 2657 2463
+f 2464 2463 2657
+f 2653 2651 2654
+f 2656 2655 2650
+f 2651 2657 2654
+f 2654 2657 2655
+f 2657 2486 2655
+f 2652 2654 2655
+f 2526 2658 2651
+f 2658 2659 2651
+f 2651 2659 2660
+f 2464 2657 2646
+f 2651 2661 2657
+f 2662 2658 2526
+f 2523 2603 2663
+f 2663 2524 2523
+f 2664 2662 2663
+f 2524 2662 2526
+f 2524 2663 2662
+f 2662 2636 2658
+f 2662 2664 2637
+f 2665 2660 2629
+f 2658 2634 2659
+f 2646 2643 2464
+f 2659 2630 2660
+f 2665 2629 2646
+f 2661 2666 2657
+f 2657 2666 2646
+f 2660 2661 2651
+f 2632 2660 2630
+f 2637 2636 2662
+f 2634 2658 2636
+f 2630 2659 2634
+f 2632 2629 2660
+f 2660 2667 2668
+f 2667 2665 2646
+f 2646 2666 2667
+f 2666 2661 2668
+f 2668 2661 2660
+f 2665 2667 2660
+f 2668 2667 2666
+f 2669 2670 2671
+f 2670 2672 2671
+f 2671 2672 2673
+f 2672 2674 2675
+f 2674 2672 2670
+f 2676 2677 2678
+f 2679 2677 2676
+f 2676 2675 2679
+f 2675 2676 2672
+f 2672 2676 2673
+f 2673 2676 2678
+f 2680 2681 2682
+f 2682 2674 2680
+f 2674 2683 2680
+f 2670 2683 2674
+f 2682 2684 2685
+f 2675 2685 2686
+f 2675 2674 2682
+f 2685 2675 2682
+f 2687 2685 2684
+f 2688 2684 2689
+f 2681 2689 2684
+f 2690 2687 2688
+f 2684 2688 2687
+f 2691 2692 2690
+f 2687 2690 2692
+f 2692 2691 2693
+f 2684 2682 2681
+f 2686 2694 2695
+f 2692 2686 2687
+f 2685 2687 2686
+f 2693 2694 2692
+f 2686 2692 2694
+f 2694 2693 2696
+f 2679 2675 2686
+f 2679 2686 2695
+f 2678 2677 2697
+f 2677 2698 2697
+f 2695 2698 2677
+f 2677 2679 2695
+f 2699 2700 2698
+f 2698 2695 2699
+f 2697 2698 2701
+f 2698 2700 2701
+f 2695 2694 2699
+f 2694 2696 2699
+f 2702 2699 2703
+f 2699 2696 2703
+f 2701 2700 2704
+f 2700 2705 2704
+f 2702 2705 2700
+f 2700 2699 2702
+f 2706 2693 2691
+f 2707 2691 2708
+f 2690 2708 2691
+f 2691 2707 2706
+f 2709 2688 2710
+f 2689 2710 2688
+f 2708 2690 2709
+f 2688 2709 2690
+f 2710 2711 2709
+f 2712 2713 2714
+f 2714 2715 2716
+f 2715 2714 2713
+f 2714 2717 2712
+f 2718 2712 2717
+f 2716 2719 2714
+f 2720 2721 2722
+f 2723 2724 2725
+f 2722 2725 2724
+f 2724 2726 2722
+f 2719 2721 2717
+f 2720 2717 2721
+f 2717 2714 2719
+f 2726 2720 2722
+f 2704 2705 2723
+f 2705 2724 2723
+f 2726 2724 2705
+f 2705 2702 2726
+f 2702 2703 2726
+f 2703 2720 2726
+f 2727 2696 2693
+f 2718 2703 2727
+f 2696 2727 2703
+f 2717 2720 2718
+f 2703 2718 2720
+f 2728 2727 2706
+f 2693 2706 2727
+f 2712 2718 2728
+f 2727 2728 2718
+f 2729 2706 2707
+f 2729 2730 2731
+f 2731 2728 2729
+f 2706 2729 2728
+f 2728 2731 2712
+f 2732 2713 2733
+f 2731 2733 2713
+f 2734 2715 2732
+f 2713 2732 2715
+f 2713 2712 2731
+f 2735 2736 2737
+f 2734 2735 2738
+f 2737 2739 2740
+f 2735 2737 2740
+f 2735 2734 2736
+f 2732 2736 2734
+f 2738 2741 2734
+f 2740 2738 2735
+f 2715 2734 2741
+f 2741 2716 2715
+f 2733 2731 2730
+f 2730 2729 2742
+f 2743 2733 2744
+f 2730 2744 2733
+f 2733 2743 2732
+f 2736 2743 2745
+f 2736 2745 2737
+f 2743 2744 2746
+f 2743 2746 2745
+f 2736 2732 2743
+f 2747 2748 2749
+f 2744 2750 2746
+f 2747 2749 2750
+f 2747 2742 2748
+f 2751 2748 2742
+f 2744 2730 2747
+f 2742 2747 2730
+f 2744 2747 2750
+f 2752 2753 2751
+f 2711 2754 2752
+f 2751 2708 2752
+f 2709 2752 2708
+f 2742 2707 2751
+f 2708 2751 2707
+f 2707 2742 2729
+f 2752 2709 2711
+f 2753 2752 2754
+f 2748 2755 2749
+f 2756 2757 2754
+f 2757 2753 2754
+f 2748 2753 2755
+f 2753 2757 2755
+f 2748 2751 2753
+f 2758 2759 2760
+f 2683 2670 2761
+f 2761 2760 2683
+f 2759 2758 2762
+f 2762 2763 2759
+f 2760 2761 2758
+f 2761 2670 2669
+f 2762 2758 2764
+f 2758 2765 2764
+f 2758 2761 2765
+f 2761 2766 2765
+f 2766 2761 2669
+f 2765 2766 2764
+f 2766 2669 2764
+f 2764 2669 2767
+f 2768 2767 2671
+f 2669 2671 2767
+f 2769 2770 2771
+f 2771 2770 2768
+f 2772 2773 2769
+f 2770 2769 2773
+f 2771 2768 2673
+f 2671 2673 2768
+f 2770 2774 2768
+f 2775 2776 2777
+f 2773 2778 2770
+f 2775 2777 2779
+f 2776 2775 2780
+f 2781 2780 2775
+f 2778 2773 2781
+f 2780 2781 2773
+f 2782 2769 2771
+f 2772 2783 2784
+f 2783 2772 2785
+f 2782 2771 2678
+f 2673 2678 2771
+f 2785 2769 2782
+f 2769 2785 2772
+f 2786 2785 2787
+f 2787 2785 2782
+f 2788 2783 2786
+f 2787 2782 2697
+f 2678 2697 2782
+f 2785 2786 2783
+f 2789 2776 2784
+f 2776 2789 2790
+f 2773 2772 2780
+f 2784 2780 2772
+f 2780 2784 2776
+f 2776 2790 2777
+f 2784 2791 2789
+f 2789 2792 2790
+f 2791 2784 2783
+f 2793 2789 2791
+f 2789 2793 2792
+f 2791 2794 2793
+f 2795 2793 2794
+f 2793 2795 2796
+f 2793 2796 2792
+f 2794 2791 2788
+f 2783 2788 2791
+f 2759 2797 2798
+f 2798 2680 2760
+f 2680 2683 2760
+f 2799 2797 2763
+f 2797 2759 2763
+f 2760 2759 2798
+f 2681 2680 2800
+f 2798 2800 2680
+f 2800 2798 2801
+f 2797 2801 2798
+f 2801 2797 2802
+f 2799 2802 2797
+f 2802 2799 2803
+f 2774 2770 2778
+f 2768 2774 2767
+f 2762 2764 2804
+f 2767 2805 2764
+f 2799 2763 2806
+f 2763 2762 2804
+f 2804 2806 2763
+f 2807 2808 2809
+f 2809 2810 2807
+f 2806 2804 2808
+f 2808 2807 2806
+f 2810 2809 2811
+f 2812 2813 2814
+f 2812 2815 2811
+f 2813 2816 2805
+f 2805 2814 2813
+f 2814 2815 2812
+f 2814 2805 2811
+f 2811 2815 2814
+f 2816 2813 2808
+f 2804 2816 2808
+f 2812 2811 2809
+f 2808 2813 2809
+f 2813 2812 2809
+f 2811 2774 2778
+f 2767 2774 2805
+f 2811 2805 2774
+f 2811 2778 2817
+f 2764 2816 2804
+f 2816 2764 2805
+f 2778 2818 2817
+f 2781 2819 2818
+f 2781 2818 2778
+f 2775 2819 2781
+f 2775 2779 2820
+f 2820 2819 2775
+f 2819 2821 2818
+f 2821 2822 2818
+f 2819 2820 2821
+f 2823 2821 2820
+f 2810 2822 2824
+f 2825 2810 2824
+f 2818 2810 2817
+f 2817 2810 2811
+f 2810 2818 2822
+f 2826 2827 2828
+f 2827 2829 2830
+f 2827 2830 2828
+f 2828 2830 2831
+f 2832 2828 2831
+f 2833 2831 2834
+f 2803 2835 2830
+f 2835 2803 2799
+f 2831 2830 2834
+f 2836 2837 2838
+f 2838 2807 2836
+f 2825 2836 2810
+f 2835 2799 2806
+f 2807 2838 2835
+f 2806 2807 2835
+f 2807 2810 2836
+f 2839 2834 2840
+f 2838 2830 2835
+f 2841 2840 2837
+f 2837 2836 2842
+f 2840 2834 2838
+f 2834 2830 2838
+f 2837 2840 2838
+f 2843 2844 2837
+f 2824 2845 2825
+f 2825 2845 2846
+f 2846 2843 2842
+f 2847 2844 2837
+f 2841 2837 2844
+f 2839 2840 2848
+f 2846 2836 2825
+f 2840 2841 2849
+f 2837 2842 2843
+f 2842 2836 2846
+f 2810 2847 2837
+f 2837 2844 2831
+f 2850 2786 2787
+f 2850 2787 2701
+f 2697 2701 2787
+f 2851 2788 2852
+f 2852 2786 2850
+f 2786 2852 2788
+f 2851 2853 2854
+f 2855 2854 2853
+f 2856 2850 2704
+f 2701 2704 2850
+f 2857 2852 2856
+f 2856 2852 2850
+f 2853 2851 2857
+f 2852 2857 2851
+f 2788 2851 2794
+f 2794 2854 2795
+f 2854 2794 2851
+f 2795 2858 2796
+f 2859 2795 2854
+f 2859 2860 2858
+f 2795 2859 2858
+f 2854 2855 2859
+f 2861 2862 2863
+f 2863 2855 2864
+f 2862 2859 2855
+f 2862 2861 2865
+f 2862 2865 2860
+f 2859 2862 2860
+f 2853 2864 2855
+f 2855 2863 2862
+f 2866 2867 2826
+f 2868 2869 2832
+f 2870 2871 2829
+f 2872 2870 2873
+f 2867 2872 2827
+f 2869 2866 2828
+f 2848 2874 2839
+f 2874 2875 2834
+f 2876 2868 2831
+f 2875 2876 2833
+f 2844 2849 2841
+f 2849 2848 2840
+f 2844 2868 2831
+f 2828 2832 2869
+f 2834 2839 2874
+f 2831 2833 2876
+f 2833 2834 2875
+f 2832 2831 2868
+f 2877 2878 2879
+f 2880 2877 2881
+f 2882 2883 2884
+f 2885 2880 2886
+f 2887 2888 2889
+f 2883 2887 2890
+f 2878 2882 2891
+f 2887 2890 2892
+f 2827 2826 2867
+f 2873 2827 2872
+f 2888 2829 2871
+f 2829 2873 2870
+f 2826 2828 2866
+f 2831 2868 2887
+f 2879 2881 2877
+f 2889 2890 2887
+f 2891 2879 2878
+f 2884 2891 2882
+f 2890 2884 2883
+f 2871 2889 2888
+f 2868 2890 2887
+f 2893 2894 2895
+f 2895 2896 2893
+f 2710 2689 2897
+f 2898 2897 2689
+f 2897 2898 2899
+f 2900 2899 2898
+f 2899 2900 2896
+f 2901 2896 2900
+f 2896 2895 2899
+f 2902 2893 2896
+f 2896 2901 2902
+f 2800 2898 2681
+f 2898 2800 2900
+f 2801 2900 2800
+f 2900 2801 2901
+f 2802 2901 2801
+f 2689 2681 2898
+f 2901 2802 2903
+f 2803 2903 2802
+f 2873 2829 2827
+f 2830 2904 2803
+f 2829 2887 2830
+f 2887 2904 2830
+f 2903 2803 2904
+f 2883 2882 2887
+f 2888 2887 2829
+f 2878 2877 2882
+f 2905 2892 2885
+f 2892 2904 2885
+f 2885 2904 2877
+f 2877 2904 2882
+f 2882 2904 2887
+f 2880 2885 2877
+f 2904 2906 2903
+f 2903 2902 2901
+f 2892 2907 2904
+f 2908 2909 2907
+f 2902 2903 2906
+f 2910 2907 2892
+f 2909 2906 2907
+f 2907 2906 2904
+f 2909 2911 2906
+f 2906 2911 2912
+f 2913 2912 2911
+f 2914 2911 2909
+f 2912 2915 2906
+f 2893 2902 2916
+f 2906 2916 2902
+f 2915 2917 2906
+f 2917 2916 2906
+f 2918 2919 2917
+f 2920 2917 2915
+f 2921 2915 2912
+f 2738 2740 2922
+f 2923 2924 2925
+f 2922 2925 2924
+f 2924 2923 2926
+f 2922 2927 2738
+f 2741 2738 2927
+f 2924 2928 2922
+f 2927 2922 2928
+f 2926 2929 2924
+f 2928 2924 2929
+f 2930 2931 2932
+f 2932 2933 2934
+f 2737 2745 2934
+f 2934 2935 2737
+f 2739 2737 2935
+f 2936 2926 2923
+f 2925 2922 2740
+f 2740 2739 2925
+f 2925 2937 2923
+f 2923 2938 2936
+f 2939 2739 2935
+f 2937 2938 2923
+f 2739 2937 2925
+f 2938 2939 2936
+f 2938 2937 2939
+f 2937 2739 2939
+f 2940 2941 2942
+f 2943 2944 2945
+f 2942 2945 2944
+f 2719 2716 2940
+f 2940 2946 2719
+f 2941 2927 2945
+f 2945 2928 2943
+f 2941 2940 2716
+f 2945 2942 2941
+f 2716 2741 2941
+f 2926 2936 2947
+f 2927 2941 2741
+f 2929 2943 2928
+f 2928 2945 2927
+f 2948 2939 2949
+f 2947 2950 2926
+f 2929 2926 2950
+f 2951 2947 2936
+f 2939 2948 2951
+f 2934 2933 2935
+f 2933 2932 2931
+f 2936 2939 2951
+f 2931 2930 2952
+f 2953 2954 2952
+f 2955 2933 2931
+f 2952 2956 2931
+f 2935 2933 2949
+f 2935 2949 2939
+f 2955 2931 2957
+f 2955 2949 2933
+f 2931 2956 2957
+f 2952 2954 2956
+f 2958 2857 2856
+f 2704 2723 2856
+f 2857 2959 2853
+f 2958 2856 2723
+f 2959 2857 2958
+f 2864 2853 2959
+f 2960 2959 2958
+f 2864 2961 2863
+f 2961 2864 2962
+f 2959 2962 2864
+f 2960 2725 2963
+f 2960 2958 2725
+f 2723 2725 2958
+f 2964 2965 2725
+f 2725 2722 2964
+f 2966 2967 2965
+f 2965 2964 2966
+f 2968 2963 2967
+f 2967 2966 2968
+f 2725 2965 2963
+f 2965 2967 2963
+f 2968 2966 2969
+f 2721 2946 2964
+f 2964 2946 2966
+f 2946 2970 2966
+f 2966 2970 2969
+f 2722 2721 2964
+f 2970 2942 2969
+f 2944 2969 2942
+f 2944 2943 2971
+f 2943 2929 2972
+f 2721 2719 2946
+f 2942 2970 2940
+f 2946 2940 2970
+f 2973 2974 2975
+f 2947 2951 2976
+f 2974 2976 2975
+f 2977 2975 2978
+f 2975 2979 2978
+f 2950 2972 2929
+f 2979 2976 2951
+f 2976 2979 2975
+f 2979 2980 2978
+f 2980 2981 2978
+f 2978 2981 2955
+f 2951 2948 2979
+f 2981 2980 2982
+f 2980 2948 2949
+f 2948 2980 2979
+f 2983 2863 2961
+f 2861 2984 2985
+f 2863 2983 2861
+f 2984 2861 2983
+f 2861 2985 2865
+f 2971 2986 2944
+f 2972 2971 2943
+f 2987 2988 2972
+f 2950 2947 2989
+f 2989 2976 2990
+f 2991 2990 2992
+f 2993 2994 2990
+f 2995 2996 2994
+f 2996 2989 2994
+f 2994 2989 2990
+f 2992 2976 2997
+f 2997 2976 2998
+f 2974 2998 2976
+f 2990 2976 2992
+f 2976 2989 2947
+f 2999 2998 2974
+f 3000 2997 2998
+f 3001 2992 2997
+f 2962 3002 2961
+f 2962 2960 3002
+f 2968 2969 3003
+f 2969 2944 2986
+f 2962 2959 2960
+f 2963 2968 3003
+f 2963 3004 2960
+f 2824 2961 3002
+f 3005 3002 2960
+f 3003 3004 2963
+f 2961 2824 2983
+f 3005 2960 3004
+f 2969 2986 3003
+f 2983 2822 2984
+f 2821 2984 2822
+f 2985 2984 2821
+f 2821 2823 2985
+f 2822 2983 2824
+f 2824 3002 2847
+f 2847 3002 3006
+f 2847 2845 2824
+f 3005 3007 3002
+f 3002 3007 3008
+f 3008 3006 3002
+f 3008 3007 3009
+f 3009 3006 3008
+f 3007 3005 3004
+f 3010 3009 3004
+f 3004 3009 3007
+f 3004 3003 3010
+f 2847 3006 3009
+f 3009 3010 2847
+f 3011 2846 2847
+f 2847 2846 2845
+f 3003 2986 3010
+f 2986 3011 3010
+f 3010 3011 2847
+f 2986 2971 3011
+f 2848 2849 2844
+f 2844 2843 2846
+f 3011 2875 2848
+f 2848 2844 3011
+f 3011 2844 2846
+f 2868 2875 2988
+f 2988 2875 3011
+f 2868 2876 2875
+f 2869 2868 2866
+f 2988 2866 2868
+f 2988 3011 2971
+f 2875 2874 2848
+f 2881 2987 3012
+f 2886 2881 3012
+f 2987 2989 3013
+f 3014 3013 3015
+f 2972 2950 2987
+f 3016 3012 3013
+f 3013 3012 2987
+f 3017 3018 2996
+f 2989 2987 2950
+f 3013 2989 3015
+f 3019 3020 3018
+f 3020 2989 3018
+f 3015 2989 3020
+f 3018 2989 2996
+f 3021 3015 3020
+f 2884 2890 2891
+f 2889 2871 2890
+f 2971 2972 2988
+f 2988 2987 2871
+f 2871 2987 2890
+f 2870 2872 2871
+f 2871 2872 2988
+f 2866 2988 2872
+f 2867 2866 2872
+f 2955 2957 2978
+f 2978 2957 2956
+f 2981 3022 2955
+f 2982 3022 2981
+f 2955 3022 2982
+f 2949 2982 2980
+f 2982 2949 2955
+f 2890 2987 2891
+f 2891 2987 2881
+f 2879 2891 2881
+f 3016 3013 2892
+f 2886 3012 2885
+f 2881 2886 2880
+f 3012 3016 2905
+f 2890 3013 2892
+f 2910 2892 3013
+f 2908 2907 3015
+f 2909 2908 3021
+f 2892 2905 3016
+f 2907 2910 3014
+f 2905 2885 3012
+f 2911 2892 3018
+f 3014 3015 2907
+f 3019 3018 2911
+f 3013 3014 2910
+f 3015 3021 2908
+f 3020 3019 2914
+f 3021 3020 2909
+f 2892 3013 3018
+f 3023 2930 3024
+f 2932 3024 2930
+f 3024 2932 3025
+f 3025 2932 2934
+f 2745 2746 3025
+f 3025 2934 2745
+f 3026 3023 3027
+f 3024 3027 3023
+f 3023 3026 3028
+f 3029 3028 3026
+f 3030 3025 2746
+f 3027 3024 3030
+f 3030 3024 3025
+f 2952 3031 2953
+f 3031 2952 2930
+f 2953 3032 3033
+f 2953 3033 3034
+f 3032 2953 3031
+f 3031 3028 3032
+f 2930 3023 3031
+f 3028 3029 3035
+f 3036 3035 3029
+f 3035 3037 3038
+f 3032 3035 3038
+f 3035 3032 3028
+f 3032 3038 3033
+f 3028 3031 3023
+f 3039 3026 3040
+f 3040 3027 3041
+f 3041 3027 3030
+f 3041 3030 2750
+f 2746 2750 3030
+f 3027 3040 3026
+f 3042 3039 3043
+f 3044 3041 2749
+f 2750 2749 3041
+f 3043 3040 3044
+f 3044 3040 3041
+f 3040 3043 3039
+f 3029 3045 3036
+f 3046 3036 3045
+f 3036 3047 3037
+f 3026 3039 3029
+f 3045 3029 3039
+f 3035 3036 3037
+f 3036 3046 3047
+f 3039 3042 3045
+f 3048 3045 3042
+f 3045 3048 3046
+f 3049 3046 3048
+f 3046 3050 3047
+f 3046 3049 3050
+f 2899 3051 2897
+f 2711 2710 3052
+f 2897 3052 2710
+f 3051 2899 2895
+f 3052 2897 3051
+f 3052 3053 2711
+f 3051 3054 3052
+f 2895 3055 3051
+f 3053 3052 3054
+f 2754 2711 3053
+f 3055 2895 2894
+f 3054 3051 3055
+f 3056 3044 2755
+f 2749 2755 3044
+f 3056 3043 3044
+f 3057 3058 3059
+f 3059 3056 2757
+f 3060 3057 3059
+f 2755 2757 3056
+f 3061 3062 3063
+f 3057 3063 3062
+f 3062 3061 3064
+f 3064 3065 3066
+f 3065 3064 3061
+f 3067 3066 3065
+f 3066 3067 3068
+f 3048 3069 3049
+f 3070 3049 3069
+f 3049 3070 3071
+f 3049 3071 3050
+f 3069 3048 3072
+f 3062 3072 3057
+f 3058 3057 3072
+f 3072 3042 3058
+f 3043 3058 3042
+f 3059 3058 3056
+f 3042 3072 3048
+f 3058 3043 3056
+f 3066 3070 3064
+f 3066 3068 3073
+f 3070 3066 3073
+f 3070 3073 3071
+f 3064 3069 3062
+f 3072 3062 3069
+f 3069 3064 3070
+f 3054 3055 3074
+f 3075 3053 3076
+f 3074 3055 2894
+f 3053 3054 3076
+f 2756 2754 3075
+f 2754 3053 3075
+f 3076 3054 3074
+f 3060 2756 3074
+f 3074 3077 3060
+f 3060 3059 2756
+f 3075 3076 3074
+f 3063 3057 3060
+f 2757 2756 3059
+f 2756 3075 3074
+f 3017 2996 2912
+f 2915 2994 2993
+f 2996 2995 2921
+f 3018 3017 2913
+f 2995 2994 2915
+f 3018 2990 2911
+f 2913 2911 3018
+f 2915 2921 2995
+f 2912 2913 3017
+f 2911 2914 3019
+f 2993 2920 2915
+f 2921 2912 2996
+f 2914 2909 3020
+f 2990 2917 2911
+f 3001 2997 3078
+f 2991 2992 2919
+f 2992 3001 3079
+f 2993 2990 2917
+f 2990 2991 2918
+f 2917 2990 2998
+f 2919 2918 2991
+f 3079 2919 2992
+f 3080 3078 2997
+f 2917 2920 2993
+f 3081 3080 3000
+f 2918 2917 2990
+f 3078 3079 3001
+f 3081 2917 2998
+f 3082 2978 2956
+f 2974 2973 3083
+f 2977 2978 3082
+f 2975 2977 3084
+f 2973 2975 3085
+f 2999 2974 3086
+f 3000 2998 3081
+f 2997 3000 3080
+f 2998 2978 3081
+f 2998 2999 3087
+f 3086 3087 2999
+f 3085 3083 2973
+f 3087 3081 2998
+f 3083 3086 2974
+f 3084 3085 2975
+f 3082 3084 2977
+f 2978 3082 3081
+f 3080 3081 3078
+f 3086 2916 3081
+f 3079 3078 2919
+f 3081 2916 3078
+f 3078 2916 2919
+f 2919 2916 2917
+f 2916 3088 2893
+f 2894 2893 3088
+f 3084 3082 3085
+f 3087 3086 3081
+f 3082 3088 3085
+f 3085 3088 3086
+f 3088 2916 3086
+f 3083 3085 3086
+f 2956 3089 3082
+f 3089 3090 3082
+f 3082 3090 3091
+f 2894 3088 3077
+f 3082 3092 3088
+f 3093 3089 2956
+f 2953 3034 3094
+f 3094 2954 2953
+f 3095 3093 3094
+f 2954 3093 2956
+f 2954 3094 3093
+f 3093 3067 3089
+f 3093 3095 3068
+f 3096 3091 3060
+f 3089 3065 3090
+f 3077 3074 2894
+f 3090 3061 3091
+f 3096 3060 3077
+f 3092 3097 3088
+f 3088 3097 3077
+f 3091 3092 3082
+f 3063 3091 3061
+f 3068 3067 3093
+f 3065 3089 3067
+f 3061 3090 3065
+f 3063 3060 3091
+f 3091 3098 3099
+f 3098 3096 3077
+f 3077 3097 3098
+f 3097 3092 3099
+f 3099 3092 3091
+f 3096 3098 3091
+f 3099 3098 3097
+f 3100 3101 3102
+f 3100 3103 3101
+f 3104 3103 3100
+f 3104 3105 3103
+f 3106 3105 3104
+f 3106 3107 3105
+f 3101 3103 3108
+f 3109 3110 3107
+f 3110 3111 3105
+f 3103 3105 3111
+f 3111 3108 3103
+f 3108 3112 3101
+f 3108 3111 3113
+f 3113 3114 3108
+f 3112 3108 3114
+f 3114 3115 3112
+f 3116 3117 3113
+f 3118 3113 3117
+f 3118 3114 3113
+f 3115 3118 3119
+f 3115 3114 3118
+f 3111 3110 3120
+f 3120 3113 3111
+f 3121 3122 3109
+f 3110 3109 3122
+f 3122 3120 3110
+f 3120 3123 3116
+f 3120 3122 3123
+f 3116 3113 3120
+f 3122 3121 3124
+f 3122 3124 3123
+f 3125 3126 3127
+f 3107 3125 3109
+f 3128 3125 3107
+f 3128 3107 3106
+f 3105 3107 3110
+f 3127 3129 3130
+f 3131 3129 3132
+f 3126 3132 3129
+f 3129 3127 3126
+f 3109 3127 3121
+f 3127 3109 3125
+f 3133 3130 3129
+f 3130 3121 3127
+f 3130 3134 3135
+f 3121 3135 3124
+f 3121 3130 3135
+f 3132 3136 3131
+f 3136 3137 3138
+f 3138 3131 3136
+f 3139 3132 3140
+f 3139 3136 3132
+f 3137 3136 3139
+f 3131 3138 3141
+f 3130 3133 3134
+f 3129 3131 3133
+f 3134 3133 3141
+f 3141 3133 3131
+f 3142 3143 3144
+f 3143 3142 3145
+f 3145 3146 3143
+f 3147 3148 3146
+f 3149 3150 3148
+f 3151 3152 3150
+f 3153 3126 3125
+f 3140 3126 3153
+f 3140 3132 3126
+f 3154 3155 3152
+f 3156 3157 3155
+f 3153 3125 3128
+f 3158 3159 3160
+f 3161 3159 3158
+f 3161 3162 3159
+f 3146 3145 3147
+f 3148 3147 3149
+f 3158 3160 3163
+f 3150 3149 3151
+f 3152 3151 3154
+f 3157 3156 3164
+f 3164 3165 3157
+f 3165 3164 3166
+f 3155 3154 3156
+f 3167 3160 3168
+f 3168 3169 3167
+f 3170 3167 3169
+f 3163 3167 3171
+f 3163 3160 3167
+f 3160 3159 3172
+f 3173 3174 3175
+f 3175 3176 3173
+f 3177 3173 3176
+f 3178 3176 3175
+f 3179 3176 3178
+f 3180 3181 3174
+f 3174 3173 3180
+f 3162 3180 3173
+f 3181 3180 3182
+f 3182 3162 3161
+f 3182 3180 3162
+f 3176 3179 3177
+f 3179 3178 3183
+f 3179 3184 3172
+f 3184 3183 3185
+f 3184 3179 3183
+f 3172 3168 3160
+f 3173 3177 3162
+f 3159 3162 3177
+f 3172 3177 3179
+f 3177 3172 3159
+f 3168 3172 3184
+f 3186 3185 3187
+f 3186 3184 3185
+f 3188 3187 3189
+f 3188 3186 3187
+f 3189 3190 3188
+f 3188 3190 3191
+f 3186 3188 3169
+f 3191 3169 3188
+f 3184 3186 3168
+f 3169 3168 3186
+f 3189 3192 3190
+f 3193 3190 3192
+f 3193 3194 3190
+f 3195 3193 3196
+f 3195 3194 3193
+f 3197 3191 3190
+f 3194 3195 3198
+f 3190 3194 3197
+f 3198 3197 3194
+f 3171 3167 3170
+f 3199 3200 3197
+f 3201 3199 3202
+f 3203 3170 3200
+f 3201 3200 3199
+f 3203 3200 3201
+f 3171 3170 3203
+f 3197 3198 3199
+f 3169 3191 3170
+f 3200 3170 3191
+f 3191 3197 3200
+f 3204 3205 3206
+f 3204 3207 3205
+f 3204 3102 3207
+f 3205 3207 3208
+f 3102 3208 3207
+f 3209 3102 3204
+f 3209 3100 3102
+f 3210 3211 3212
+f 3213 3214 3215
+f 3209 3214 3213
+f 3215 3216 3210
+f 3216 3215 3214
+f 3217 3212 3211
+f 3211 3210 3216
+f 3218 3106 3104
+f 3104 3213 3218
+f 3213 3104 3100
+f 3218 3215 3219
+f 3213 3215 3218
+f 3210 3219 3215
+f 3220 3143 3146
+f 3221 3222 3220
+f 3146 3221 3220
+f 3221 3146 3148
+f 3223 3224 3225
+f 3226 3225 3227
+f 3225 3228 3229
+f 3229 3227 3225
+f 3225 3226 3223
+f 3230 3231 3144
+f 3230 3232 3231
+f 3233 3229 3228
+f 3230 3144 3233
+f 3144 3234 3233
+f 3234 3144 3143
+f 3235 3236 3237
+f 3234 3229 3233
+f 3100 3209 3213
+f 3143 3220 3234
+f 3212 3238 3210
+f 3239 3240 3217
+f 3239 3235 3237
+f 3212 3217 3240
+f 3239 3241 3240
+f 3235 3239 3217
+f 3224 3223 3242
+f 3228 3225 3224
+f 3223 3243 3237
+f 3237 3242 3223
+f 3239 3237 3243
+f 3241 3239 3243
+f 3242 3237 3236
+f 3234 3244 3229
+f 3227 3229 3244
+f 3244 3245 3227
+f 3245 3244 3222
+f 3220 3244 3234
+f 3220 3222 3244
+f 3241 3243 3246
+f 3247 3227 3245
+f 3227 3247 3226
+f 3226 3246 3243
+f 3243 3223 3226
+f 3246 3226 3247
+f 3204 3206 3248
+f 3205 3208 3206
+f 3102 3101 3208
+f 3249 3204 3248
+f 3250 3216 3251
+f 3216 3214 3251
+f 3249 3252 3204
+f 3253 3224 3254
+f 3224 3253 3228
+f 3204 3255 3209
+f 3255 3204 3252
+f 3253 3233 3228
+f 3233 3253 3256
+f 3257 3233 3256
+f 3233 3257 3230
+f 3258 3251 3259
+f 3251 3260 3259
+f 3258 3261 3262
+f 3258 3259 3261
+f 3263 3261 3259
+f 3262 3252 3249
+f 3262 3261 3252
+f 3259 3260 3263
+f 3255 3252 3261
+f 3261 3263 3255
+f 3211 3264 3217
+f 3250 3265 3216
+f 3265 3264 3211
+f 3266 3236 3235
+f 3255 3214 3209
+f 3267 3235 3217
+f 3214 3255 3251
+f 3216 3265 3211
+f 3268 3256 3253
+f 3253 3269 3268
+f 3270 3268 3269
+f 3269 3271 3270
+f 3271 3269 3253
+f 3257 3256 3268
+f 3268 3270 3257
+f 3272 3236 3266
+f 3236 3272 3242
+f 3266 3273 3274
+f 3254 3242 3272
+f 3242 3254 3224
+f 3230 3275 3276
+f 3276 3232 3230
+f 3231 3277 3142
+f 3230 3278 3275
+f 3142 3144 3231
+f 3232 3276 3277
+f 3277 3231 3232
+f 3270 3279 3278
+f 3280 3281 3254
+f 3271 3282 3279
+f 3281 3282 3253
+f 3271 3253 3282
+f 3279 3270 3271
+f 3278 3257 3270
+f 3278 3230 3257
+f 3253 3254 3281
+f 3254 3272 3280
+f 3272 3266 3283
+f 3284 3285 3248
+f 3206 3208 3286
+f 3286 3284 3206
+f 3208 3101 3112
+f 3112 3286 3208
+f 3248 3206 3284
+f 3249 3248 3285
+f 3285 3287 3249
+f 3258 3262 3288
+f 3288 3289 3258
+f 3262 3249 3287
+f 3287 3288 3262
+f 3251 3258 3289
+f 3290 3265 3289
+f 3250 3289 3265
+f 3251 3289 3250
+f 3285 3284 3291
+f 3291 3292 3285
+f 3284 3286 3293
+f 3293 3291 3284
+f 3286 3112 3115
+f 3115 3293 3286
+f 3294 3295 3296
+f 3297 3298 3299
+f 3299 3300 3294
+f 3300 3299 3298
+f 3301 3298 3297
+f 3119 3301 3297
+f 3301 3119 3118
+f 3293 3115 3119
+f 3291 3293 3302
+f 3292 3291 3303
+f 3293 3119 3302
+f 3291 3302 3303
+f 3292 3303 3304
+f 3304 3302 3119
+f 3304 3303 3302
+f 3304 3119 3297
+f 3118 3305 3301
+f 3305 3118 3117
+f 3117 3306 3305
+f 3306 3117 3116
+f 3307 3308 3309
+f 3310 3307 3309
+f 3295 3294 3300
+f 3309 3296 3295
+f 3296 3309 3308
+f 3295 3311 3309
+f 3312 3310 3311
+f 3311 3295 3313
+f 3310 3309 3311
+f 3300 3313 3295
+f 3313 3300 3314
+f 3315 3316 3317
+f 3317 3318 3315
+f 3318 3317 3319
+f 3306 3317 3305
+f 3306 3319 3317
+f 3320 3319 3306
+f 3116 3320 3306
+f 3320 3116 3123
+f 3316 3315 3314
+f 3301 3316 3298
+f 3305 3316 3301
+f 3305 3317 3316
+f 3298 3314 3300
+f 3314 3298 3316
+f 3321 3312 3322
+f 3313 3322 3311
+f 3322 3313 3323
+f 3312 3311 3322
+f 3323 3314 3315
+f 3314 3323 3313
+f 3321 3322 3324
+f 3323 3324 3322
+f 3325 3321 3324
+f 3326 3315 3318
+f 3315 3326 3323
+f 3324 3323 3326
+f 3327 3325 3328
+f 3329 3318 3330
+f 3325 3324 3328
+f 3328 3326 3329
+f 3326 3328 3324
+f 3318 3329 3326
+f 3331 3332 3333
+f 3331 3333 3334
+f 3334 3289 3331
+f 3334 3290 3289
+f 3335 3332 3336
+f 3332 3335 3333
+f 3289 3288 3337
+f 3337 3338 3289
+f 3288 3287 3339
+f 3339 3337 3288
+f 3287 3285 3292
+f 3292 3339 3287
+f 3289 3338 3340
+f 3341 3294 3340
+f 3339 3304 3342
+f 3342 3297 3343
+f 3297 3341 3343
+f 3296 3340 3294
+f 3341 3297 3299
+f 3339 3292 3304
+f 3294 3341 3299
+f 3297 3342 3304
+f 3338 3337 3344
+f 3341 3338 3345
+f 3344 3339 3342
+f 3344 3337 3339
+f 3338 3344 3345
+f 3338 3341 3340
+f 3341 3346 3343
+f 3342 3343 3346
+f 3347 3346 3341
+f 3344 3346 3347
+f 3346 3344 3342
+f 3347 3345 3344
+f 3341 3345 3347
+f 3307 3336 3332
+f 3308 3331 3296
+f 3331 3308 3332
+f 3340 3296 3331
+f 3340 3331 3289
+f 3332 3308 3307
+f 3235 3267 3266
+f 3251 3255 3263
+f 3263 3260 3251
+f 3265 3348 3264
+f 3348 3267 3264
+f 3217 3264 3267
+f 3247 3349 3246
+f 3350 3241 3246
+f 3350 3246 3349
+f 3351 3350 3349
+f 3352 3351 3353
+f 3351 3352 3354
+f 3351 3354 3355
+f 3350 3351 3355
+f 3356 3219 3357
+f 3218 3219 3356
+f 3219 3210 3238
+f 3238 3357 3219
+f 3356 3128 3106
+f 3106 3218 3356
+f 3357 3238 3358
+f 3359 3357 3360
+f 3355 3361 3362
+f 3356 3357 3359
+f 3362 3363 3358
+f 3361 3355 3354
+f 3363 3362 3361
+f 3360 3358 3363
+f 3358 3360 3357
+f 3240 3364 3212
+f 3364 3240 3365
+f 3364 3358 3238
+f 3358 3364 3362
+f 3365 3362 3364
+f 3238 3212 3364
+f 3350 3355 3365
+f 3241 3350 3365
+f 3362 3365 3355
+f 3241 3365 3240
+f 3354 3366 3361
+f 3363 3367 3360
+f 3368 3361 3366
+f 3361 3368 3363
+f 3369 3367 3370
+f 3366 3371 3368
+f 3368 3372 3367
+f 3369 3360 3367
+f 3367 3363 3368
+f 3359 3360 3369
+f 3221 3373 3222
+f 3374 3373 3221
+f 3374 3375 3373
+f 3376 3375 3374
+f 3128 3356 3359
+f 3148 3374 3221
+f 3374 3148 3150
+f 3150 3376 3374
+f 3369 3140 3153
+f 3153 3359 3369
+f 3359 3153 3128
+f 3376 3377 3375
+f 3376 3150 3152
+f 3152 3378 3376
+f 3378 3152 3155
+f 3245 3379 3247
+f 3222 3380 3245
+f 3380 3222 3373
+f 3349 3247 3379
+f 3379 3245 3380
+f 3373 3381 3380
+f 3381 3373 3375
+f 3353 3379 3382
+f 3382 3380 3381
+f 3380 3382 3379
+f 3351 3349 3353
+f 3379 3353 3349
+f 3352 3353 3383
+f 3382 3383 3353
+f 3383 3382 3384
+f 3352 3385 3386
+f 3385 3387 3388
+f 3352 3386 3354
+f 3366 3354 3386
+f 3386 3389 3366
+f 3389 3386 3388
+f 3385 3388 3386
+f 3378 3390 3377
+f 3384 3381 3391
+f 3392 3377 3390
+f 3377 3392 3391
+f 3378 3377 3376
+f 3381 3384 3382
+f 3375 3391 3381
+f 3391 3375 3377
+f 3393 3391 3392
+f 3391 3393 3384
+f 3385 3352 3383
+f 3385 3383 3394
+f 3387 3385 3394
+f 3393 3395 3394
+f 3394 3384 3393
+f 3384 3394 3383
+f 3370 3372 3396
+f 3370 3367 3372
+f 3139 3370 3396
+f 3370 3139 3140
+f 3140 3369 3370
+f 3397 3398 3399
+f 3400 3399 3398
+f 3399 3400 3401
+f 3402 3403 3397
+f 3398 3397 3403
+f 3404 3405 3402
+f 3403 3402 3405
+f 3389 3403 3371
+f 3371 3366 3389
+f 3396 3405 3404
+f 3405 3371 3403
+f 3371 3405 3372
+f 3372 3368 3371
+f 3396 3372 3405
+f 3403 3389 3398
+f 3388 3398 3389
+f 3398 3388 3400
+f 3406 3401 3400
+f 3387 3406 3400
+f 3387 3400 3388
+f 3407 3124 3135
+f 3135 3408 3407
+f 3408 3135 3134
+f 3319 3330 3318
+f 3320 3409 3319
+f 3410 3409 3320
+f 3123 3410 3320
+f 3410 3123 3124
+f 3330 3319 3409
+f 3407 3411 3410
+f 3124 3407 3410
+f 3410 3411 3409
+f 3409 3412 3330
+f 3412 3409 3411
+f 3330 3413 3329
+f 3414 3329 3413
+f 3329 3414 3328
+f 3413 3330 3412
+f 3327 3328 3414
+f 3415 3327 3414
+f 3416 3417 3418
+f 3418 3413 3416
+f 3413 3418 3414
+f 3416 3412 3419
+f 3412 3416 3413
+f 3420 3415 3418
+f 3415 3414 3418
+f 3420 3418 3417
+f 3134 3421 3408
+f 3411 3419 3412
+f 3419 3411 3422
+f 3407 3422 3411
+f 3408 3422 3407
+f 3408 3423 3422
+f 3424 3422 3423
+f 3417 3416 3425
+f 3425 3419 3424
+f 3419 3425 3416
+f 3426 3420 3417
+f 3422 3424 3419
+f 3421 3423 3408
+f 3427 3428 3137
+f 3427 3429 3428
+f 3428 3429 3430
+f 3430 3431 3428
+f 3431 3138 3137
+f 3429 3427 3432
+f 3432 3430 3429
+f 3137 3428 3431
+f 3430 3432 3433
+f 3433 3434 3430
+f 3138 3431 3435
+f 3431 3430 3434
+f 3434 3435 3431
+f 3433 3141 3435
+f 3435 3141 3138
+f 3433 3435 3434
+f 3421 3134 3141
+f 3433 3436 3421
+f 3421 3141 3433
+f 3437 3432 3427
+f 3438 3433 3432
+f 3427 3137 3404
+f 3404 3439 3427
+f 3440 3406 3395
+f 3397 3441 3402
+f 3401 3290 3399
+f 3348 3401 3406
+f 3399 3442 3397
+f 3441 3404 3402
+f 3439 3404 3443
+f 3406 3440 3348
+f 3441 3397 3442
+f 3442 3399 3290
+f 3290 3401 3348
+f 3404 3441 3443
+f 3439 3443 3444
+f 3444 3445 3439
+f 3446 3447 3445
+f 3441 3447 3446
+f 3445 3444 3446
+f 3441 3444 3443
+f 3446 3444 3441
+f 3423 3436 3448
+f 3432 3437 3438
+f 3436 3423 3421
+f 3427 3439 3437
+f 3436 3433 3438
+f 3334 3333 3425
+f 3425 3333 3417
+f 3335 3426 3417
+f 3417 3333 3335
+f 3424 3423 3448
+f 3424 3334 3425
+f 3449 3424 3448
+f 3449 3334 3424
+f 3449 3442 3290
+f 3441 3442 3449
+f 3439 3445 3450
+f 3450 3437 3439
+f 3449 3290 3334
+f 3441 3448 3451
+f 3441 3449 3448
+f 3451 3447 3441
+f 3445 3447 3451
+f 3451 3450 3445
+f 3452 3453 3448
+f 3454 3452 3436
+f 3448 3436 3452
+f 3448 3453 3455
+f 3452 3454 3455
+f 3455 3453 3452
+f 3455 3454 3450
+f 3437 3450 3454
+f 3448 3455 3451
+f 3450 3451 3455
+f 3454 3438 3437
+f 3436 3438 3454
+f 3456 3457 3458
+f 3456 3165 3457
+f 3396 3137 3139
+f 3157 3459 3460
+f 3459 3157 3165
+f 3155 3460 3378
+f 3460 3155 3157
+f 3460 3390 3378
+f 3460 3461 3390
+f 3390 3462 3392
+f 3462 3390 3461
+f 3406 3387 3395
+f 3395 3393 3463
+f 3463 3392 3462
+f 3392 3463 3393
+f 3387 3394 3395
+f 3267 3348 3440
+f 3273 3464 3465
+f 3464 3466 3467
+f 3266 3267 3273
+f 3265 3290 3348
+f 3440 3273 3267
+f 3137 3396 3404
+f 3456 3468 3459
+f 3459 3461 3460
+f 3459 3165 3456
+f 3462 3464 3463
+f 3462 3461 3469
+f 3463 3273 3395
+f 3468 3456 3470
+f 3468 3461 3459
+f 3466 3462 3469
+f 3461 3468 3469
+f 3466 3464 3462
+f 3464 3273 3463
+f 3395 3273 3440
+f 3469 3471 3472
+f 3469 3468 3471
+f 3469 3472 3473
+f 3468 3470 3474
+f 3473 3472 3471
+f 3474 3471 3468
+f 3471 3474 3473
+f 3475 3181 3182
+f 3145 3476 3477
+f 3476 3145 3142
+f 3275 3277 3276
+f 3275 3142 3277
+f 3477 3478 3479
+f 3477 3480 3478
+f 3147 3477 3479
+f 3477 3147 3145
+f 3481 3482 3483
+f 3478 3484 3485
+f 3484 3478 3480
+f 3483 3486 3487
+f 3487 3485 3484
+f 3485 3487 3486
+f 3482 3488 3483
+f 3465 3489 3274
+f 3490 3491 3492
+f 3283 3280 3272
+f 3489 3492 3493
+f 3274 3283 3266
+f 3493 3274 3489
+f 3476 3480 3477
+f 3275 3494 3476
+f 3476 3142 3275
+f 3181 3475 3495
+f 3487 3274 3483
+f 3494 3275 3278
+f 3484 3480 3281
+f 3484 3283 3487
+f 3494 3480 3476
+f 3483 3274 3493
+f 3283 3274 3487
+f 3280 3484 3281
+f 3280 3283 3484
+f 3480 3494 3281
+f 3494 3278 3279
+f 3281 3496 3282
+f 3279 3497 3494
+f 3281 3494 3497
+f 3497 3279 3282
+f 3282 3496 3497
+f 3281 3497 3496
+f 3498 3499 3500
+f 3501 3502 3503
+f 3503 3498 3501
+f 3502 3500 3181
+f 3502 3501 3500
+f 3181 3500 3499
+f 3499 3174 3181
+f 3500 3501 3498
+f 3498 3503 3504
+f 3504 3505 3498
+f 3174 3499 3506
+f 3499 3498 3505
+f 3505 3506 3499
+f 3506 3175 3174
+f 3504 3506 3505
+f 3504 3175 3506
+f 3507 3178 3175
+f 3178 3507 3508
+f 3508 3509 3510
+f 3511 3512 3513
+f 3512 3511 3509
+f 3508 3514 3509
+f 3510 3509 3511
+f 3507 3514 3508
+f 3515 3509 3514
+f 3516 3517 3518
+f 3518 3512 3515
+f 3512 3518 3517
+f 3519 3520 3516
+f 3509 3515 3512
+f 3510 3185 3183
+f 3183 3508 3510
+f 3508 3183 3178
+f 3185 3510 3521
+f 3522 3513 3523
+f 3513 3522 3511
+f 3521 3511 3522
+f 3510 3511 3521
+f 3521 3187 3185
+f 3187 3521 3524
+f 3524 3522 3525
+f 3521 3522 3524
+f 3525 3523 3526
+f 3523 3525 3522
+f 3527 3528 3529
+f 3530 3529 3528
+f 3520 3530 3528
+f 3520 3528 3516
+f 3517 3516 3528
+f 3517 3513 3512
+f 3513 3517 3527
+f 3528 3527 3517
+f 3527 3523 3513
+f 3523 3527 3531
+f 3529 3531 3527
+f 3531 3529 3532
+f 3533 3532 3529
+f 3530 3533 3529
+f 3182 3534 3475
+f 3534 3182 3161
+f 3161 3535 3534
+f 3534 3536 3475
+f 3534 3537 3536
+f 3495 3538 3539
+f 3540 3539 3538
+f 3541 3542 3543
+f 3542 3541 3544
+f 3543 3545 3540
+f 3545 3543 3542
+f 3539 3540 3545
+f 3536 3546 3547
+f 3547 3548 3549
+f 3475 3538 3495
+f 3475 3536 3538
+f 3538 3547 3540
+f 3547 3538 3536
+f 3549 3540 3547
+f 3482 3481 3541
+f 3482 3541 3550
+f 3550 3543 3549
+f 3543 3550 3541
+f 3540 3549 3543
+f 3481 3544 3541
+f 3507 3175 3504
+f 3504 3551 3507
+f 3552 3504 3503
+f 3553 3503 3502
+f 3502 3181 3495
+f 3495 3554 3502
+f 3555 3556 3518
+f 3518 3556 3516
+f 3557 3519 3516
+f 3516 3556 3557
+f 3515 3514 3558
+f 3515 3555 3518
+f 3559 3515 3558
+f 3559 3555 3515
+f 3558 3560 3561
+f 3553 3562 3563
+f 3563 3552 3553
+f 3551 3552 3563
+f 3562 3561 3560
+f 3560 3563 3562
+f 3564 3565 3559
+f 3559 3565 3491
+f 3566 3563 3560
+f 3560 3567 3566
+f 3566 3567 3558
+f 3563 3566 3551
+f 3558 3551 3566
+f 3558 3567 3560
+f 3554 3568 3562
+f 3559 3491 3555
+f 3562 3553 3554
+f 3561 3569 3564
+f 3558 3561 3564
+f 3568 3569 3561
+f 3561 3562 3568
+f 3564 3559 3558
+f 3551 3504 3552
+f 3503 3553 3552
+f 3502 3554 3553
+f 3551 3514 3507
+f 3514 3551 3558
+f 3564 3570 3571
+f 3572 3569 3568
+f 3554 3571 3570
+f 3572 3570 3564
+f 3568 3570 3572
+f 3570 3568 3554
+f 3564 3569 3572
+f 3565 3542 3491
+f 3554 3495 3571
+f 3495 3564 3571
+f 3481 3493 3492
+f 3564 3545 3565
+f 3491 3544 3492
+f 3542 3565 3545
+f 3493 3481 3483
+f 3544 3491 3542
+f 3492 3544 3481
+f 3564 3495 3539
+f 3545 3564 3539
+f 3573 3574 3575
+f 3575 3576 3573
+f 3577 3489 3465
+f 3490 3492 3578
+f 3492 3489 3578
+f 3579 3578 3489
+f 3580 3581 3582
+f 3580 3583 3581
+f 3584 3583 3580
+f 3163 3585 3586
+f 3154 3580 3582
+f 3580 3154 3151
+f 3151 3584 3580
+f 3582 3581 3587
+f 3584 3588 3583
+f 3584 3151 3149
+f 3149 3479 3584
+f 3479 3149 3147
+f 3535 3161 3158
+f 3158 3586 3535
+f 3586 3158 3163
+f 3548 3589 3590
+f 3590 3549 3548
+f 3549 3590 3550
+f 3591 3482 3550
+f 3591 3550 3590
+f 3592 3591 3590
+f 3592 3590 3589
+f 3479 3478 3588
+f 3479 3588 3584
+f 3583 3593 3594
+f 3593 3583 3588
+f 3588 3485 3593
+f 3485 3588 3478
+f 3595 3594 3593
+f 3594 3595 3596
+f 3486 3483 3488
+f 3488 3595 3486
+f 3595 3488 3597
+f 3591 3592 3597
+f 3591 3597 3488
+f 3482 3591 3488
+f 3486 3593 3485
+f 3593 3486 3595
+f 3598 3599 3600
+f 3601 3600 3599
+f 3599 3598 3602
+f 3587 3602 3598
+f 3602 3587 3581
+f 3581 3594 3602
+f 3594 3581 3583
+f 3603 3599 3596
+f 3596 3602 3594
+f 3602 3596 3599
+f 3597 3596 3595
+f 3596 3597 3603
+f 3599 3603 3601
+f 3604 3601 3603
+f 3592 3603 3597
+f 3586 3605 3535
+f 3546 3536 3537
+f 3537 3606 3546
+f 3548 3547 3546
+f 3535 3537 3534
+f 3535 3605 3537
+f 3607 3546 3606
+f 3546 3607 3548
+f 3589 3548 3607
+f 3606 3537 3605
+f 3592 3604 3603
+f 3604 3589 3608
+f 3609 3604 3608
+f 3600 3601 3610
+f 3609 3611 3610
+f 3604 3592 3589
+f 3609 3610 3601
+f 3604 3609 3601
+f 3585 3163 3171
+f 3171 3612 3585
+f 3585 3613 3614
+f 3612 3613 3585
+f 3614 3615 3616
+f 3615 3614 3613
+f 3613 3617 3615
+f 3608 3607 3618
+f 3586 3614 3605
+f 3585 3614 3586
+f 3607 3608 3589
+f 3618 3606 3616
+f 3606 3618 3607
+f 3605 3616 3606
+f 3616 3605 3614
+f 3611 3609 3619
+f 3611 3619 3620
+f 3618 3619 3608
+f 3609 3608 3619
+f 3620 3621 3622
+f 3621 3620 3619
+f 3619 3618 3621
+f 3615 3622 3621
+f 3621 3616 3615
+f 3616 3621 3618
+f 3532 3623 3531
+f 3623 3532 3624
+f 3625 3624 3532
+f 3533 3625 3532
+f 3531 3526 3523
+f 3526 3531 3623
+f 3626 3627 3624
+f 3625 3626 3624
+f 3623 3628 3526
+f 3628 3623 3629
+f 3624 3629 3623
+f 3629 3624 3627
+f 3526 3630 3525
+f 3524 3189 3187
+f 3189 3524 3631
+f 3631 3630 3632
+f 3631 3525 3630
+f 3524 3525 3631
+f 3628 3633 3630
+f 3630 3526 3628
+f 3629 3634 3628
+f 3627 3635 3629
+f 3634 3629 3635
+f 3626 3636 3627
+f 3635 3627 3637
+f 3636 3637 3627
+f 3634 3638 3633
+f 3633 3628 3634
+f 3638 3634 3639
+f 3640 3633 3638
+f 3632 3633 3640
+f 3632 3630 3633
+f 3641 3642 3643
+f 3642 3198 3195
+f 3644 3645 3646
+f 3643 3644 3641
+f 3195 3643 3642
+f 3646 3641 3644
+f 3192 3631 3632
+f 3631 3192 3189
+f 3193 3632 3640
+f 3632 3193 3192
+f 3639 3635 3647
+f 3637 3647 3635
+f 3647 3637 3648
+f 3636 3649 3637
+f 3635 3639 3634
+f 3649 3648 3637
+f 3648 3650 3647
+f 3650 3648 3651
+f 3652 3651 3648
+f 3649 3652 3648
+f 3647 3653 3639
+f 3654 3638 3655
+f 3640 3638 3654
+f 3196 3640 3654
+f 3640 3196 3193
+f 3655 3639 3653
+f 3639 3655 3638
+f 3653 3647 3650
+f 3643 3195 3196
+f 3645 3644 3656
+f 3644 3643 3657
+f 3644 3657 3656
+f 3658 3657 3196
+f 3658 3196 3654
+f 3645 3656 3658
+f 3658 3656 3657
+f 3643 3196 3657
+f 3659 3557 3556
+f 3660 3555 3491
+f 3660 3661 3555
+f 3661 3556 3555
+f 3661 3659 3556
+f 3557 3659 3662
+f 3660 3663 3664
+f 3665 3664 3663
+f 3663 3666 3665
+f 3664 3667 3660
+f 3666 3646 3645
+f 3668 3660 3667
+f 3645 3665 3666
+f 3650 3668 3653
+f 3669 3654 3655
+f 3653 3669 3655
+f 3665 3645 3658
+f 3654 3670 3658
+f 3661 3651 3659
+f 3659 3651 3652
+f 3652 3662 3659
+f 3668 3650 3661
+f 3660 3668 3661
+f 3651 3661 3650
+f 3665 3658 3670
+f 3669 3653 3668
+f 3670 3654 3671
+f 3654 3669 3671
+f 3672 3673 3674
+f 3670 3671 3673
+f 3674 3675 3672
+f 3669 3673 3671
+f 3669 3675 3674
+f 3674 3673 3669
+f 3673 3672 3670
+f 3669 3667 3675
+f 3667 3672 3675
+f 3667 3664 3672
+f 3672 3664 3665
+f 3667 3669 3668
+f 3672 3665 3670
+f 3491 3490 3660
+f 3676 3660 3490
+f 3575 3660 3676
+f 3575 3677 3660
+f 3678 3679 3642
+f 3642 3641 3678
+f 3679 3199 3198
+f 3198 3642 3679
+f 3680 3678 3641
+f 3681 3680 3646
+f 3641 3646 3680
+f 3677 3682 3663
+f 3663 3660 3677
+f 3646 3666 3681
+f 3682 3681 3666
+f 3666 3663 3682
+f 3683 3684 3685
+f 3684 3683 3467
+f 3465 3274 3273
+f 3686 3467 3683
+f 3467 3686 3465
+f 3687 3456 3458
+f 3458 3688 3687
+f 3688 3458 3457
+f 3457 3689 3688
+f 3165 3166 3689
+f 3687 3470 3456
+f 3689 3457 3165
+f 3466 3469 3684
+f 3469 3473 3690
+f 3691 3473 3474
+f 3692 3474 3470
+f 3691 3690 3473
+f 3470 3687 3693
+f 3474 3692 3691
+f 3684 3467 3466
+f 3470 3693 3692
+f 3690 3684 3469
+f 3467 3465 3464
+f 3156 3582 3694
+f 3582 3156 3154
+f 3582 3587 3694
+f 3612 3695 3613
+f 3696 3695 3612
+f 3694 3164 3156
+f 3612 3171 3203
+f 3203 3696 3612
+f 3696 3203 3201
+f 3617 3613 3695
+f 3697 3577 3698
+f 3697 3620 3579
+f 3577 3697 3579
+f 3622 3615 3617
+f 3622 3579 3620
+f 3697 3611 3620
+f 3697 3698 3699
+f 3611 3697 3699
+f 3685 3700 3683
+f 3700 3699 3698
+f 3698 3683 3700
+f 3683 3698 3686
+f 3701 3702 3685
+f 3694 3703 3704
+f 3694 3587 3703
+f 3705 3706 3703
+f 3703 3598 3705
+f 3598 3703 3587
+f 3704 3703 3706
+f 3699 3700 3707
+f 3600 3705 3598
+f 3705 3600 3707
+f 3611 3699 3610
+f 3610 3707 3600
+f 3707 3610 3699
+f 3706 3705 3702
+f 3702 3701 3706
+f 3700 3685 3702
+f 3707 3702 3705
+f 3702 3707 3700
+f 3164 3694 3704
+f 3201 3708 3696
+f 3704 3706 3709
+f 3577 3686 3698
+f 3166 3704 3709
+f 3704 3166 3164
+f 3687 3689 3166
+f 3687 3166 3709
+f 3687 3688 3689
+f 3709 3706 3701
+f 3710 3695 3711
+f 3696 3711 3695
+f 3708 3711 3696
+f 3579 3622 3712
+f 3712 3617 3710
+f 3617 3712 3622
+f 3695 3710 3617
+f 3202 3679 3713
+f 3714 3713 3679
+f 3715 3713 3714
+f 3715 3202 3713
+f 3715 3714 3678
+f 3708 3202 3715
+f 3708 3201 3202
+f 3681 3715 3680
+f 3715 3678 3680
+f 3714 3679 3678
+f 3202 3199 3679
+f 3715 3576 3708
+f 3576 3715 3716
+f 3693 3709 3717
+f 3690 3685 3684
+f 3685 3690 3701
+f 3690 3709 3701
+f 3709 3690 3717
+f 3709 3693 3687
+f 3710 3711 3575
+f 3676 3710 3575
+f 3681 3716 3715
+f 3677 3718 3719
+f 3682 3716 3681
+f 3677 3575 3718
+f 3575 3574 3718
+f 3677 3719 3682
+f 3573 3719 3718
+f 3682 3719 3716
+f 3489 3577 3579
+f 3710 3490 3712
+f 3465 3686 3577
+f 3490 3578 3712
+f 3576 3711 3708
+f 3711 3576 3575
+f 3712 3578 3579
+f 3676 3490 3710
+f 3720 3692 3693
+f 3721 3691 3692
+f 3691 3721 3690
+f 3693 3717 3720
+f 3720 3717 3690
+f 3690 3721 3720
+f 3692 3720 3721
+f 3719 3573 3576
+f 3718 3574 3573
+f 3576 3716 3719
+f 3722 3723 3724
+f 3724 3725 3722
+f 3725 3724 3726
+f 3726 3727 3725
+f 3727 3726 3728
+f 3728 3729 3727
+f 3729 3728 3730
+f 3730 3731 3729
+f 3723 3732 3724
+f 3732 3723 3733
+f 3724 3734 3726
+f 3734 3724 3732
+f 3726 3735 3728
+f 3735 3726 3734
+f 3728 3736 3730
+f 3736 3728 3735
+f 3737 3738 3739
+f 3738 3737 3740
+f 3739 3741 3742
+f 3741 3739 3738
+f 3734 3739 3735
+f 3739 3734 3737
+f 3735 3742 3736
+f 3742 3735 3739
+f 3733 3743 3732
+f 3743 3733 3744
+f 3732 3737 3734
+f 3737 3732 3743
+f 3744 3745 3743
+f 3745 3744 3746
+f 3743 3740 3737
+f 3740 3743 3745
+f 3747 3748 3749
+f 3749 3750 3747
+f 3750 3749 3751
+f 3751 3752 3750
+f 3752 3751 3753
+f 3753 3754 3752
+f 3754 3753 3723
+f 3723 3722 3754
+f 3748 3755 3749
+f 3755 3748 3756
+f 3749 3757 3751
+f 3757 3749 3755
+f 3751 3758 3753
+f 3758 3751 3757
+f 3753 3733 3723
+f 3733 3753 3758
+f 3757 3759 3758
+f 3759 3757 3760
+f 3758 3744 3733
+f 3744 3758 3759
+f 3760 3761 3759
+f 3761 3760 3762
+f 3759 3746 3744
+f 3746 3759 3761
+f 3763 3764 3765
+f 3764 3763 3766
+f 3765 3762 3760
+f 3762 3765 3764
+f 3756 3765 3755
+f 3765 3756 3763
+f 3755 3760 3757
+f 3760 3755 3765
+f 3767 3768 3769
+f 3768 3767 3770
+f 3769 3771 3772
+f 3771 3769 3768
+f 3740 3769 3738
+f 3769 3740 3767
+f 3738 3772 3741
+f 3772 3738 3769
+f 3746 3773 3745
+f 3773 3746 3774
+f 3745 3767 3740
+f 3767 3745 3773
+f 3774 3775 3773
+f 3775 3774 3776
+f 3773 3770 3767
+f 3770 3773 3775
+f 3777 3770 3778
+f 3777 3768 3770
+f 3779 3768 3777
+f 3779 3771 3768
+f 3780 3777 3778
+f 3777 3780 3781
+f 3781 3779 3777
+f 3779 3781 3782
+f 3783 3784 3785
+f 3784 3783 3786
+f 3786 3778 3784
+f 3778 3786 3780
+f 3784 3776 3785
+f 3784 3775 3776
+f 3770 3784 3778
+f 3770 3775 3784
+f 3787 3788 3789
+f 3788 3787 3790
+f 3789 3776 3774
+f 3776 3789 3788
+f 3762 3789 3761
+f 3789 3762 3787
+f 3761 3774 3746
+f 3774 3761 3789
+f 3766 3791 3764
+f 3791 3766 3792
+f 3764 3787 3762
+f 3787 3764 3791
+f 3792 3793 3791
+f 3793 3792 3794
+f 3791 3790 3787
+f 3790 3791 3793
+f 3795 3796 3797
+f 3796 3795 3798
+f 3798 3785 3796
+f 3785 3798 3783
+f 3788 3797 3796
+f 3788 3790 3797
+f 3785 3788 3796
+f 3785 3776 3788
+f 3794 3799 3793
+f 3794 3800 3799
+f 3793 3797 3790
+f 3793 3799 3797
+f 3801 3799 3800
+f 3799 3801 3802
+f 3802 3797 3799
+f 3797 3802 3795
+f 3803 3804 3805
+f 3804 3803 3806
+f 3807 3805 3808
+f 3805 3807 3803
+f 3806 3730 3804
+f 3730 3806 3731
+f 3809 3810 3811
+f 3812 3813 3814
+f 3812 3815 3813
+f 3811 3816 3813
+f 3727 3812 3814
+f 3812 3727 3729
+f 3807 3806 3803
+f 3807 3731 3806
+f 3817 3813 3815
+f 3818 3815 3812
+f 3818 3731 3807
+f 3729 3818 3812
+f 3818 3729 3731
+f 3819 3820 3821
+f 3813 3817 3811
+f 3822 3819 3821
+f 3811 3823 3809
+f 3809 3821 3820
+f 3821 3809 3823
+f 3823 3811 3817
+f 3824 3810 3825
+f 3810 3824 3816
+f 3826 3816 3824
+f 3814 3816 3826
+f 3814 3813 3816
+f 3725 3814 3826
+f 3814 3725 3727
+f 3826 3824 3827
+f 3828 3825 3829
+f 3825 3828 3824
+f 3722 3826 3827
+f 3826 3722 3725
+f 3830 3829 3825
+f 3827 3824 3828
+f 3831 3832 3833
+f 3825 3834 3830
+f 3829 3830 3835
+f 3836 3837 3832
+f 3831 3836 3832
+f 3830 3833 3832
+f 3832 3835 3830
+f 3835 3832 3837
+f 3838 3831 3833
+f 3838 3833 3820
+f 3819 3838 3820
+f 3820 3834 3809
+f 3834 3820 3833
+f 3834 3825 3810
+f 3816 3811 3810
+f 3810 3809 3834
+f 3833 3830 3834
+f 3839 3840 3841
+f 3842 3840 3839
+f 3840 3842 3843
+f 3844 3815 3818
+f 3845 3822 3821
+f 3823 3846 3821
+f 3817 3815 3847
+f 3807 3844 3818
+f 3848 3846 3823
+f 3815 3844 3847
+f 3821 3846 3845
+f 3849 3817 3847
+f 3844 3807 3850
+f 3849 3848 3817
+f 3817 3848 3823
+f 3807 3808 3851
+f 3851 3850 3807
+f 3852 3843 3847
+f 3853 3852 3854
+f 3851 3854 3850
+f 3854 3851 3853
+f 3852 3853 3843
+f 3847 3843 3849
+f 3847 3855 3852
+f 3852 3855 3856
+f 3844 3850 3854
+f 3854 3856 3844
+f 3842 3845 3846
+f 3856 3855 3847
+f 3847 3844 3856
+f 3856 3854 3852
+f 3846 3843 3842
+f 3849 3843 3848
+f 3848 3843 3846
+f 3730 3857 3804
+f 3857 3730 3736
+f 3804 3858 3805
+f 3858 3804 3857
+f 3805 3859 3808
+f 3859 3805 3858
+f 3736 3860 3857
+f 3857 3861 3858
+f 3858 3862 3859
+f 3861 3857 3860
+f 3863 3859 3862
+f 3860 3736 3742
+f 3862 3858 3861
+f 3859 3863 3864
+f 3808 3864 3851
+f 3864 3808 3859
+f 3865 3853 3866
+f 3865 3866 3867
+f 3843 3853 3865
+f 3843 3865 3868
+f 3865 3867 3869
+f 3867 3870 3871
+f 3851 3866 3853
+f 3866 3851 3864
+f 3866 3870 3867
+f 3870 3872 3873
+f 3872 3874 3875
+f 3874 3876 3877
+f 3872 3866 3874
+f 3870 3866 3872
+f 3874 3866 3876
+f 3864 3878 3866
+f 3876 3879 3880
+f 3879 3881 3882
+f 3881 3878 3883
+f 3879 3878 3881
+f 3876 3878 3879
+f 3876 3866 3878
+f 3881 3883 3884
+f 3878 3864 3863
+f 3885 3862 3886
+f 3742 3887 3860
+f 3887 3742 3741
+f 3860 3888 3861
+f 3888 3860 3887
+f 3861 3886 3862
+f 3886 3861 3888
+f 3883 3878 3889
+f 3862 3885 3863
+f 3863 3890 3878
+f 3891 3878 3890
+f 3892 3878 3891
+f 3889 3878 3892
+f 3883 3889 3893
+f 3889 3892 3894
+f 3890 3863 3885
+f 3892 3891 3895
+f 3872 3896 3897
+f 3876 3898 3899
+f 3875 3900 3896
+f 3877 3899 3901
+f 3880 3902 3898
+f 3874 3901 3900
+f 3903 3865 3869
+f 3904 3867 3871
+f 3905 3871 3870
+f 3906 3869 3867
+f 3907 3868 3865
+f 3840 3843 3868
+f 3843 3872 3840
+f 3868 3907 3840
+f 3869 3906 3903
+f 3871 3905 3904
+f 3873 3897 3908
+f 3870 3908 3905
+f 3867 3904 3906
+f 3865 3903 3907
+f 3896 3840 3872
+f 3908 3870 3873
+f 3896 3872 3875
+f 3901 3874 3877
+f 3899 3877 3876
+f 3900 3875 3874
+f 3872 3883 3896
+f 3897 3873 3872
+f 3893 3909 3910
+f 3883 3910 3911
+f 3881 3912 3913
+f 3884 3911 3912
+f 3882 3913 3914
+f 3910 3896 3883
+f 3914 3902 3880
+f 3911 3884 3883
+f 3913 3882 3881
+f 3880 3879 3914
+f 3898 3876 3880
+f 3914 3879 3882
+f 3912 3881 3884
+f 3910 3883 3893
+f 3915 3892 3895
+f 3916 3891 3917
+f 3918 3895 3891
+f 3919 3894 3892
+f 3883 3920 3910
+f 3909 3893 3889
+f 3921 3889 3894
+f 3891 3916 3918
+f 3895 3918 3915
+f 3922 3910 3920
+f 3917 3923 3916
+f 3894 3919 3921
+f 3892 3915 3919
+f 3889 3921 3909
+f 3835 3924 3829
+f 3925 3828 3926
+f 3827 3828 3925
+f 3926 3829 3924
+f 3829 3926 3828
+f 3754 3827 3925
+f 3827 3754 3722
+f 3924 3927 3926
+f 3928 3926 3927
+f 3925 3926 3928
+f 3752 3925 3928
+f 3925 3752 3754
+f 3929 3930 3927
+f 3927 3924 3929
+f 3924 3835 3931
+f 3932 3933 3934
+f 3932 3934 3837
+f 3836 3932 3837
+f 3931 3929 3924
+f 3837 3931 3835
+f 3931 3837 3934
+f 3934 3935 3931
+f 3933 3936 3937
+f 3929 3931 3935
+f 3935 3934 3937
+f 3933 3937 3934
+f 3935 3938 3929
+f 3938 3935 3939
+f 3936 3940 3937
+f 3937 3939 3935
+f 3939 3937 3940
+f 3941 3942 3943
+f 3942 3941 3944
+f 3945 3943 3946
+f 3943 3945 3941
+f 3944 3747 3942
+f 3747 3944 3748
+f 3930 3929 3938
+f 3947 3927 3930
+f 3750 3928 3947
+f 3928 3750 3752
+f 3928 3927 3947
+f 3947 3747 3750
+f 3948 3938 3949
+f 3946 3942 3747
+f 3950 3930 3948
+f 3947 3930 3950
+f 3946 3943 3942
+f 3946 3747 3950
+f 3747 3947 3950
+f 3939 3949 3938
+f 3949 3939 3951
+f 3938 3948 3930
+f 3952 3953 3940
+f 3936 3952 3940
+f 3940 3951 3939
+f 3951 3940 3953
+f 3954 3955 3956
+f 3845 3842 3957
+f 3954 3958 3959
+f 3956 3958 3954
+f 3960 3958 3956
+f 3956 3955 3960
+f 3961 3959 3958
+f 3958 3960 3961
+f 3952 3957 3842
+f 3961 3950 3959
+f 3950 3954 3959
+f 3954 3949 3841
+f 3839 3953 3842
+f 3953 3839 3951
+f 3954 3950 3948
+f 3842 3953 3952
+f 3950 3961 3946
+f 3949 3954 3948
+f 3961 3962 3945
+f 3945 3946 3961
+f 3951 3841 3949
+f 3841 3951 3839
+f 3841 3840 3954
+f 3840 3960 3955
+f 3963 3961 3960
+f 3961 3963 3962
+f 3954 3840 3955
+f 3960 3840 3963
+f 3964 3962 3965
+f 3965 3966 3964
+f 3962 3964 3945
+f 3964 3967 3968
+f 3969 3941 3968
+f 3945 3968 3941
+f 3944 3756 3748
+f 3968 3945 3964
+f 3756 3944 3969
+f 3969 3763 3756
+f 3968 3970 3969
+f 3941 3969 3944
+f 3970 3766 3763
+f 3763 3969 3970
+f 3966 3971 3967
+f 3972 3967 3971
+f 3766 3970 3972
+f 3970 3968 3967
+f 3967 3964 3966
+f 3967 3972 3970
+f 3903 3963 3840
+f 3904 3963 3903
+f 3903 3840 3907
+f 3904 3903 3906
+f 3908 3904 3905
+f 3963 3965 3962
+f 3965 3963 3973
+f 3904 3973 3963
+f 3896 3973 3908
+f 3898 3901 3899
+f 3898 3973 3901
+f 3901 3896 3900
+f 3973 3974 3965
+f 3896 3908 3897
+f 3901 3973 3896
+f 3908 3973 3904
+f 3974 3973 3975
+f 3914 3898 3902
+f 3975 3898 3914
+f 3975 3973 3898
+f 3912 3914 3913
+f 3966 3965 3974
+f 3974 3976 3966
+f 3971 3966 3976
+f 3921 3910 3909
+f 3912 3910 3975
+f 3975 3914 3912
+f 3975 3910 3921
+f 3910 3912 3911
+f 3976 3974 3977
+f 3978 3915 3916
+f 3975 3977 3974
+f 3977 3975 3978
+f 3915 3921 3919
+f 3915 3975 3921
+f 3916 3915 3918
+f 3978 3975 3915
+f 3979 3980 3981
+f 3980 3979 3982
+f 3772 3983 3984
+f 3983 3772 3771
+f 3984 3982 3979
+f 3982 3984 3983
+f 3741 3984 3887
+f 3984 3741 3772
+f 3887 3979 3888
+f 3979 3887 3984
+f 3888 3981 3886
+f 3981 3888 3979
+f 3890 3985 3891
+f 3891 3985 3917
+f 3886 3986 3885
+f 3986 3886 3981
+f 3987 3988 3989
+f 3990 3989 3988
+f 3989 3990 3991
+f 3991 3990 3992
+f 3990 3988 3993
+f 3988 3987 3994
+f 3991 3890 3989
+f 3989 3885 3986
+f 3985 3890 3920
+f 3920 3890 3995
+f 3985 3920 3996
+f 3920 3995 3997
+f 3995 3890 3998
+f 3998 3890 3991
+f 3995 3998 3999
+f 3998 3991 4000
+f 3885 3989 3890
+f 3981 4001 3986
+f 4001 3981 3980
+f 3980 4002 4003
+f 4004 3980 4003
+f 3986 4005 3989
+f 3989 4006 3987
+f 4005 4006 3989
+f 4007 4006 4005
+f 4006 4008 3987
+f 4007 4009 4006
+f 4010 4011 4007
+f 4005 3986 4001
+f 4005 4010 4007
+f 4012 4013 4010
+f 4012 4010 4005
+f 4014 4012 4015
+f 4015 4012 4005
+f 4016 4001 4004
+f 4016 4005 4001
+f 4015 4005 4016
+f 4017 3999 3998
+f 4018 3997 3995
+f 4019 3985 3996
+f 4020 3996 3920
+f 3923 3917 3985
+f 3922 3920 3997
+f 4021 3995 3999
+f 3997 4018 3922
+f 3999 4017 4021
+f 3920 3922 4020
+f 3998 4022 4017
+f 3995 4021 4018
+f 3996 4020 4019
+f 4023 3992 3990
+f 4024 4000 3991
+f 4022 3998 4000
+f 4025 3991 3992
+f 4026 3990 3993
+f 4027 3993 3988
+f 3920 3988 3922
+f 3992 4023 4025
+f 4000 4024 4022
+f 3988 4028 4027
+f 3993 4027 4026
+f 3990 4026 4023
+f 3991 4025 4024
+f 4028 3922 3988
+f 4008 4029 4030
+f 4006 4031 4029
+f 3987 4030 4032
+f 4007 4033 4034
+f 3994 4032 4028
+f 4009 4034 4031
+f 4034 4009 4007
+f 4031 4006 4009
+f 4028 3988 3994
+f 4030 3987 4008
+f 4029 4008 4006
+f 4032 3994 3987
+f 3988 4012 4028
+f 4012 4014 4035
+f 4036 4010 4013
+f 4037 4013 4012
+f 4033 4007 4011
+f 4012 4015 4038
+f 4039 4011 4010
+f 4012 4040 4037
+f 4011 4039 4033
+f 4013 4037 4036
+f 4010 4036 4039
+f 4035 4040 4012
+f 4038 4040 4012
+f 4040 4028 4012
+f 3980 3982 4002
+f 4041 3771 3779
+f 4041 3983 3771
+f 4002 3983 4041
+f 4002 3982 3983
+f 4042 4002 4041
+f 4041 4043 4042
+f 4044 4003 4002
+f 4002 4042 4044
+f 4043 4041 3779
+f 3779 3782 4043
+f 4045 4046 4047
+f 4048 4049 4045
+f 4049 4048 4050
+f 4051 4047 4046
+f 4047 4051 4052
+f 4053 4052 4051
+f 4054 4053 4051
+f 4046 4045 4049
+f 4044 4042 4043
+f 4055 4050 4048
+f 4044 3782 4055
+f 3782 4056 4055
+f 4056 3782 3781
+f 4044 4043 3782
+f 4050 4057 4049
+f 4056 4050 4055
+f 4056 4058 4050
+f 4059 4058 4056
+f 3781 4059 4056
+f 4059 3781 3780
+f 4059 4060 4058
+f 4061 4060 4059
+f 4057 4050 4058
+f 4058 4062 4057
+f 4062 4058 4060
+f 3780 4061 4059
+f 4061 3780 3786
+f 4063 4062 4064
+f 4065 4066 4061
+f 4061 4066 4060
+f 3786 4065 4061
+f 4065 3786 3783
+f 4060 4064 4062
+f 4064 4060 4066
+f 4067 4068 4069
+f 4069 4070 4067
+f 4068 4067 4063
+f 4067 4057 4062
+f 4071 4072 4069
+f 4071 4069 4068
+f 4073 4071 4068
+f 4062 4063 4067
+f 4070 4049 4057
+f 4074 4046 4070
+f 4046 4074 4051
+f 4049 4070 4046
+f 4054 4051 4074
+f 4057 4067 4070
+f 4070 4069 4074
+f 4072 4054 4074
+f 4072 4074 4069
+f 4075 4076 4035
+f 4077 4075 4035
+f 4035 4014 4077
+f 4078 4077 4014
+f 4078 4079 4077
+f 4080 4078 4014
+f 4081 4080 4014
+f 4004 4001 3980
+f 4082 4081 4014
+f 4083 4082 4015
+f 4014 4015 4082
+f 4004 4084 4085
+f 4085 4016 4004
+f 4016 4085 4083
+f 4083 4015 4016
+f 4044 4004 4003
+f 4055 4084 4044
+f 4052 4080 4047
+f 4078 4052 4053
+f 4045 4082 4048
+f 4082 4055 4048
+f 4047 4081 4045
+f 4053 4079 4078
+f 4004 4044 4084
+f 4084 4055 4086
+f 4080 4052 4078
+f 4055 4082 4086
+f 4082 4045 4081
+f 4081 4047 4080
+f 4087 4086 4082
+f 4085 4087 4088
+f 4087 4085 4084
+f 4083 4088 4082
+f 4082 4088 4087
+f 4088 4083 4085
+f 4084 4086 4087
+f 4019 3978 3916
+f 3985 4019 3923
+f 4089 3977 4090
+f 4019 3916 3923
+f 3972 3792 3766
+f 3792 3972 4091
+f 3971 4091 3972
+f 4091 3971 4092
+f 3976 4092 3971
+f 4092 3976 4089
+f 3977 4089 3976
+f 4093 4089 4094
+f 4091 3794 3792
+f 3794 4091 4095
+f 4092 4095 4091
+f 4095 4092 4093
+f 4089 4093 4092
+f 4028 4096 4026
+f 4030 4096 4028
+f 4026 4025 4023
+f 4028 4026 4027
+f 4030 4028 4032
+f 4090 3978 4096
+f 4096 4022 4025
+f 4096 4025 4026
+f 4021 3978 3922
+f 3922 4019 4020
+f 4021 3922 4018
+f 3922 3978 4019
+f 3978 4090 3977
+f 4022 4021 4017
+f 4025 4022 4024
+f 4022 3978 4021
+f 4096 3978 4022
+f 4097 4098 4094
+f 4090 4094 4089
+f 4094 4090 4099
+f 4096 4099 4090
+f 4031 4096 4030
+f 4100 4031 4033
+f 4100 4096 4031
+f 4031 4030 4029
+f 4033 4031 4034
+f 4036 4033 4039
+f 4099 4096 4100
+f 4099 4100 4101
+f 4099 4101 4097
+f 4037 4040 4036
+f 4100 4033 4036
+f 4100 4036 4040
+f 4040 4101 4100
+f 4038 4040 4035
+f 4040 4038 4101
+f 4065 4102 4066
+f 4103 4102 4065
+f 4104 4064 4105
+f 3783 4103 4065
+f 4103 3783 3798
+f 4066 4105 4064
+f 4105 4066 4102
+f 4106 4107 4103
+f 3798 4106 4103
+f 4106 3798 3795
+f 4106 4108 4107
+f 4103 4107 4102
+f 4102 4109 4105
+f 4109 4102 4107
+f 4104 4110 4111
+f 4111 4063 4104
+f 4063 4111 4068
+f 4064 4104 4063
+f 4105 4112 4104
+f 4073 4068 4111
+f 4113 4073 4111
+f 4113 4111 4110
+f 4112 4114 4110
+f 4114 4112 4115
+f 4107 4116 4109
+f 4110 4104 4112
+f 4109 4115 4112
+f 4112 4105 4109
+f 4117 4113 4110
+f 4117 4110 4114
+f 4118 4117 4114
+f 4098 4119 4093
+f 4095 4119 4120
+f 4095 4093 4119
+f 4098 4093 4094
+f 4120 3794 4095
+f 4120 3800 3794
+f 4098 4121 4122
+f 4122 4119 4098
+f 4120 4123 3801
+f 3801 3800 4120
+f 4119 4122 4123
+f 4123 4120 4119
+f 4108 4124 4116
+f 4124 4108 4125
+f 4116 4126 4115
+f 4115 4127 4114
+f 4127 4115 4126
+f 4118 4114 4127
+f 4128 4118 4127
+f 4126 4116 4124
+f 3795 4129 4106
+f 4129 3795 3802
+f 3802 4130 4129
+f 4116 4107 4108
+f 4129 4108 4106
+f 4129 4125 4108
+f 4115 4109 4116
+f 4121 4123 4122
+f 4130 4125 4129
+f 4130 3802 3801
+f 4121 3801 4123
+f 4130 3801 4121
+f 4097 4094 4099
+f 4038 4035 4131
+f 4038 4131 4132
+f 4101 4132 4133
+f 4076 4134 4035
+f 4132 4101 4038
+f 4133 4097 4101
+f 4134 4131 4035
+f 4135 4132 4131
+f 4134 4135 4136
+f 4131 4136 4135
+f 4137 4133 4132
+f 4134 4137 4135
+f 4132 4135 4137
+f 4138 4077 4079
+f 4134 4136 4131
+f 4133 4098 4097
+f 4075 4077 4126
+f 4125 4137 4134
+f 4137 4121 4133
+f 4076 4124 4134
+f 4076 4075 4124
+f 4127 4077 4138
+f 4098 4133 4121
+f 4138 4128 4127
+f 4137 4125 4130
+f 4121 4137 4130
+f 4124 4125 4134
+f 4124 4075 4126
+f 4126 4077 4127
+f 4139 4140 4141
+f 4140 4142 4143
+f 4141 4144 4139
+f 4143 4145 4141
+f 4143 4141 4140
+f 4146 4147 4148
+f 4147 4149 4148
+f 4147 4144 4141
+f 4142 4146 4143
+f 4142 4144 4146
+f 4144 4147 4146
+f 4150 4141 4145
+f 4148 4151 4143
+f 4145 4143 4151
+f 4152 4149 4141
+f 4141 4150 4152
+f 4148 4143 4146
+f 4141 4149 4147
+f 4148 4149 4151
+f 4149 4152 4151
+f 4151 4152 4145
+f 4152 4150 4145
+f 4153 4154 4155
+f 4154 4156 4155
+f 4155 4156 4142
+f 4156 4144 4142
+f 4155 4142 4157
+f 4144 4156 4158
+f 4159 4160 4153
+f 4160 4154 4153
+f 4155 4157 4153
+f 4161 4162 4159
+f 4158 4156 4154
+f 4162 4160 4159
+f 4159 4157 4161
+f 4159 4153 4157
+f 4161 4157 4162
+f 4158 4160 4162
+f 4154 4160 4158
+f 4158 4162 4157
+f 4139 4157 4140
+f 4139 4158 4157
+f 4139 4144 4158
+f 4157 4142 4140
+f 4163 4164 4165
+f 4165 4166 4163
+f 4167 4166 4165
+f 4166 4168 4169
+f 4170 4171 4172
+f 4171 4173 4167
+f 4167 4172 4171
+f 4169 4163 4166
+f 4173 4168 4166
+f 4166 4167 4173
+f 4174 4172 4175
+f 4175 4176 4174
+f 4172 4174 4170
+f 4172 4167 4177
+f 4177 4175 4172
+f 4165 4177 4167
+f 4178 4175 4177
+f 4179 4176 4175
+f 4175 4178 4179
+f 4165 4180 4181
+f 4181 4177 4165
+f 4177 4181 4178
+f 4182 4183 4163
+f 4163 4169 4182
+f 4183 4184 4185
+f 4185 4186 4183
+f 4182 4187 4184
+f 4184 4183 4182
+f 4183 4186 4164
+f 4164 4163 4183
+f 4164 4186 4188
+f 4188 4189 4164
+f 4190 4188 4186
+f 4186 4185 4190
+f 4165 4164 4189
+f 4189 4180 4165
+f 4179 4178 4191
+f 4191 4192 4179
+f 4178 4181 4193
+f 4193 4191 4178
+f 4181 4180 4194
+f 4194 4193 4181
+f 4194 4180 4189
+f 4195 4189 4188
+f 4196 4197 4198
+f 4188 4190 4197
+f 4197 4196 4188
+f 4199 4195 4196
+f 4189 4195 4194
+f 4188 4196 4195
+f 4196 4200 4199
+f 4200 4198 4201
+f 4199 4202 4203
+f 4198 4200 4196
+f 4195 4199 4204
+f 4200 4205 4202
+f 4201 4205 4200
+f 4202 4199 4200
+f 4206 4207 4204
+f 4207 4206 4208
+f 4209 4210 4211
+f 4208 4211 4207
+f 4203 4204 4199
+f 4211 4208 4209
+f 4204 4203 4206
+f 4204 4207 4193
+f 4207 4211 4191
+f 4211 4210 4192
+f 4192 4191 4211
+f 4191 4193 4207
+f 4204 4194 4195
+f 4193 4194 4204
+f 4182 4212 4213
+f 4212 4214 4215
+f 4216 4213 4212
+f 4212 4182 4169
+f 4169 4214 4212
+f 4214 4169 4168
+f 4213 4187 4182
+f 4168 4217 4214
+f 4218 4219 4171
+f 4171 4170 4218
+f 4219 4220 4173
+f 4173 4171 4219
+f 4220 4217 4168
+f 4168 4173 4220
+f 4214 4217 4221
+f 4221 4217 4220
+f 4222 4220 4219
+f 4223 4219 4218
+f 4224 4225 4226
+f 4221 4215 4214
+f 4226 4216 4224
+f 4227 4225 4224
+f 4224 4215 4227
+f 4227 4215 4221
+f 4215 4224 4212
+f 4212 4224 4216
+f 4219 4223 4222
+f 4218 4228 4223
+f 4229 4221 4222
+f 4220 4222 4221
+f 4222 4230 4229
+f 4231 4223 4228
+f 4221 4229 4227
+f 4228 4232 4231
+f 4230 4222 4223
+f 4223 4231 4230
+f 4233 4234 4231
+f 4231 4232 4233
+f 4235 4236 4229
+f 4229 4230 4235
+f 4237 4227 4229
+f 4229 4236 4237
+f 4234 4235 4230
+f 4230 4231 4234
+f 4227 4237 4238
+f 4225 4238 4239
+f 4240 4238 4237
+f 4241 4239 4238
+f 4239 4226 4225
+f 4238 4225 4227
+f 4240 4242 4243
+f 4243 4241 4240
+f 4242 4240 4244
+f 4245 4244 4246
+f 4244 4245 4242
+f 4237 4244 4240
+f 4238 4240 4241
+f 4247 4248 4249
+f 4250 4251 4248
+f 4252 4246 4253
+f 4253 4249 4252
+f 4249 4253 4247
+f 4246 4252 4245
+f 4248 4247 4250
+f 4247 4234 4233
+f 4253 4235 4234
+f 4244 4237 4236
+f 4246 4236 4235
+f 4235 4253 4246
+f 4233 4250 4247
+f 4236 4246 4244
+f 4234 4247 4253
+f 4254 4255 4256
+f 4256 4257 4254
+f 4258 4259 4260
+f 4261 4262 4263
+f 4254 4257 4264
+f 4261 4263 4265
+f 4266 4263 4267
+f 4254 4264 4261
+f 4263 4266 4265
+f 4266 4267 4268
+f 4267 4269 4268
+f 4254 4261 4265
+f 4270 4271 4257
+f 4270 4272 4271
+f 4270 4273 4272
+f 4270 4257 4256
+f 4256 4274 4270
+f 4275 4276 4277
+f 4273 4278 4279
+f 4279 4272 4273
+f 4278 4277 4276
+f 4276 4279 4278
+f 4280 4281 4282
+f 4268 4269 4280
+f 4283 4282 4281
+f 4281 4284 4283
+f 4268 4280 4282
+f 4285 4286 4283
+f 4287 4286 4285
+f 4285 4288 4287
+f 4289 4290 4288
+f 4285 4283 4284
+f 4285 4284 4291
+f 4288 4285 4289
+f 4285 4292 4293
+f 4285 4291 4292
+f 4294 4292 4295
+f 4294 4295 4296
+f 4296 4297 4298
+f 4299 4298 4297
+f 4285 4293 4289
+f 4294 4293 4292
+f 4298 4294 4296
+f 4277 4300 4275
+f 4300 4301 4275
+f 4300 4302 4301
+f 4300 4303 4302
+f 4304 4305 4306
+f 4305 4307 4303
+f 4307 4302 4303
+f 4305 4304 4307
+f 4308 4309 4310
+f 4304 4306 4308
+f 4308 4311 4309
+f 4308 4312 4311
+f 4304 4308 4313
+f 4308 4310 4313
+f 4314 4315 4316
+f 4314 4317 4315
+f 4308 4314 4312
+f 4308 4318 4314
+f 4314 4316 4312
+f 4319 4320 4321
+f 4322 4321 4320
+f 4322 4317 4321
+f 4322 4315 4317
+f 4323 4319 4321
+f 4324 4319 4325
+f 4319 4323 4325
+f 4324 4326 4319
+f 4325 4327 4324
+f 4325 4328 4327
+f 4325 4329 4328
+f 4330 4331 4332
+f 4331 4333 4332
+f 4334 4328 4329
+f 4334 4329 4331
+f 4330 4335 4331
+f 4335 4334 4331
+f 4335 4336 4334
+f 4337 4338 4339
+f 4335 4339 4338
+f 4335 4338 4336
+f 4339 4299 4337
+f 4340 4341 4335
+f 4335 4330 4340
+f 4297 4337 4299
+f 4335 4341 4339
+f 4342 4343 4344
+f 4344 4345 4342
+f 4344 4343 4346
+f 4346 4347 4344
+f 4344 4348 4345
+f 4348 4344 4347
+f 4347 4349 4348
+f 4342 4345 4185
+f 4349 4350 4351
+f 4351 4348 4349
+f 4348 4351 4352
+f 4352 4345 4348
+f 4350 4353 4351
+f 4185 4345 4352
+f 4352 4190 4185
+f 4354 4355 4356
+f 4356 4357 4354
+f 4357 4358 4359
+f 4358 4349 4347
+f 4356 4360 4358
+f 4358 4357 4356
+f 4358 4360 4350
+f 4350 4349 4358
+f 4360 4361 4353
+f 4362 4361 4360
+f 4356 4357 4362
+f 4353 4350 4360
+f 4356 4362 4360
+f 4359 4363 4357
+f 4364 4365 4363
+f 4363 4359 4364
+f 4346 4364 4359
+f 4359 4347 4346
+f 4347 4359 4358
+f 4357 4363 4366
+f 4366 4354 4357
+f 4367 4368 4365
+f 4363 4365 4368
+f 4368 4366 4363
+f 4366 4368 4369
+f 4369 4370 4366
+f 4371 4372 4343
+f 4343 4342 4371
+f 4373 4372 4371
+f 4374 4375 4371
+f 4184 4342 4185
+f 4184 4371 4342
+f 4371 4184 4187
+f 4372 4373 4376
+f 4376 4377 4372
+f 4378 4373 4375
+f 4379 4375 4374
+f 4375 4373 4371
+f 4343 4372 4377
+f 4377 4346 4343
+f 4377 4376 4380
+f 4381 4376 4373
+f 4382 4380 4383
+f 4376 4381 4384
+f 4384 4380 4376
+f 4375 4379 4378
+f 4378 4381 4373
+f 4384 4381 4378
+f 4385 4378 4379
+f 4346 4377 4382
+f 4382 4364 4346
+f 4386 4364 4382
+f 4380 4382 4377
+f 4387 4383 4388
+f 4382 4387 4386
+f 4388 4389 4387
+f 4386 4387 4389
+f 4383 4387 4382
+f 4379 4390 4385
+f 4391 4384 4385
+f 4392 4385 4390
+f 4378 4385 4384
+f 4380 4384 4391
+f 4390 4393 4392
+f 4385 4392 4391
+f 4391 4383 4380
+f 4392 4393 4394
+f 4391 4392 4395
+f 4386 4365 4364
+f 4255 4254 4396
+f 4365 4386 4367
+f 4256 4255 4397
+f 4398 4397 4399
+f 4400 4399 4401
+f 4355 4402 4362
+f 4279 4276 4403
+f 4362 4356 4355
+f 4277 4278 4404
+f 4405 4404 4406
+f 4407 4406 4404
+f 4406 4408 4405
+f 4404 4405 4277
+f 4404 4409 4407
+f 4409 4404 4278
+f 4278 4273 4409
+f 4410 4409 4273
+f 4273 4270 4410
+f 4411 4412 4413
+f 4409 4410 4413
+f 4414 4413 4410
+f 4415 4410 4270
+f 4416 4417 4355
+f 4418 4417 4419
+f 4419 4403 4418
+f 4403 4419 4279
+f 4420 4419 4417
+f 4402 4355 4417
+f 4417 4418 4402
+f 4421 4422 4257
+f 4271 4272 4420
+f 4257 4271 4421
+f 4420 4421 4271
+f 4264 4257 4422
+f 4422 4421 4370
+f 4354 4366 4370
+f 4355 4354 4416
+f 4272 4279 4419
+f 4370 4416 4354
+f 4416 4370 4421
+f 4419 4420 4272
+f 4421 4420 4416
+f 4417 4416 4420
+f 4423 4424 4425
+f 4425 4274 4423
+f 4414 4415 4426
+f 4410 4415 4414
+f 4415 4274 4425
+f 4270 4274 4415
+f 4426 4415 4425
+f 4427 4425 4424
+f 4424 4400 4427
+f 4428 4425 4427
+f 4398 4423 4274
+f 4274 4256 4398
+f 4400 4424 4423
+f 4423 4398 4400
+f 4429 4430 4431
+f 4426 4432 4414
+f 4411 4433 4430
+f 4434 4431 3957
+f 4432 4433 4411
+f 4435 4436 4437
+f 4426 4428 4438
+f 4438 4437 4426
+f 4432 4436 4435
+f 4432 4426 4437
+f 4437 4438 4435
+f 4437 4436 4432
+f 4411 4414 4432
+f 4430 4429 4411
+f 4431 4434 4429
+f 3957 3952 4434
+f 4425 4428 4426
+f 4427 4439 4428
+f 4440 4441 4430
+f 4428 4439 4442
+f 4438 4442 4440
+f 4441 4440 4443
+f 4440 4433 4432
+f 4432 4435 4440
+f 4440 4435 4438
+f 4442 4438 4428
+f 4430 4433 4440
+f 4440 4258 4443
+f 4444 4445 4258
+f 4258 4445 4443
+f 4258 4446 4444
+f 4447 4444 4446
+f 4397 4255 4401
+f 4401 4399 4397
+f 4401 4255 4448
+f 4396 4448 4255
+f 4449 4401 4448
+f 4450 4451 4448
+f 4399 4400 4398
+f 4401 4427 4400
+f 4439 4427 4401
+f 4397 4398 4256
+f 4401 4449 4439
+f 4448 4452 4449
+f 4453 4454 4455
+f 4455 4456 4453
+f 4454 4453 4457
+f 4448 4451 4457
+f 4457 4452 4448
+f 4457 4451 4454
+f 4258 4440 4458
+f 4459 4446 4460
+f 4260 4460 4446
+f 4458 4440 4442
+f 4461 4442 4439
+f 4446 4258 4260
+f 4457 4462 4452
+f 4463 4462 4457
+f 4461 4462 4463
+f 4463 4458 4461
+f 4449 4452 4462
+f 4462 4461 4449
+f 4457 4458 4463
+f 4260 4458 4457
+f 4260 4457 4453
+f 4260 4453 4456
+f 4258 4458 4260
+f 4442 4461 4458
+f 4439 4449 4461
+f 4413 4414 4411
+f 4412 4411 4429
+f 4434 3952 3936
+f 4429 4464 4412
+f 4464 4429 4434
+f 4465 3936 3933
+f 3936 4465 4434
+f 3933 4466 4465
+f 4434 4465 4464
+f 4467 4464 4465
+f 4465 4466 4467
+f 4407 4413 4412
+f 4468 4469 4467
+f 4469 4412 4464
+f 4464 4467 4469
+f 4413 4407 4409
+f 4406 4407 4469
+f 4412 4469 4407
+f 4467 4470 4468
+f 3932 4471 4466
+f 4466 3933 3932
+f 4466 4471 4470
+f 4469 4468 4406
+f 4470 4467 4466
+f 4408 4406 4468
+f 4468 4472 4408
+f 4473 4470 4471
+f 4471 4474 4473
+f 3836 4474 4471
+f 4472 4468 4470
+f 4470 4473 4472
+f 4471 3932 3836
+f 3957 4431 4475
+f 4431 4476 4477
+f 4430 4476 4431
+f 4441 4476 4430
+f 4475 3845 3957
+f 4477 4475 4431
+f 4478 4479 4480
+f 4476 4480 4477
+f 4481 4477 4480
+f 4443 4482 4441
+f 4483 4482 4484
+f 4484 4485 4486
+f 4482 4443 4445
+f 4445 4484 4482
+f 4480 4476 4478
+f 4482 4483 4478
+f 4478 4441 4482
+f 4479 4478 4483
+f 4441 4478 4476
+f 4485 4484 4445
+f 4445 4444 4485
+f 4487 4488 4447
+f 4444 4447 4488
+f 4488 4485 4444
+f 4489 4483 4490
+f 4484 4490 4483
+f 4490 4486 4491
+f 4486 4490 4484
+f 4395 4394 4492
+f 4394 4395 4392
+f 4492 4493 4395
+f 4494 4395 4493
+f 4493 4495 4494
+f 4496 4497 4498
+f 4496 4396 4254
+f 4254 4265 4496
+f 4497 4496 4265
+f 4265 4266 4497
+f 4499 4500 4450
+f 4501 4450 4396
+f 4448 4396 4450
+f 4454 4500 4502
+f 4451 4450 4500
+f 4396 4496 4501
+f 4498 4501 4496
+f 4450 4501 4499
+f 4503 4499 4501
+f 4500 4499 4504
+f 4505 4504 4499
+f 4506 4498 4497
+f 4497 4507 4506
+f 4498 4506 4508
+f 4507 4497 4266
+f 4266 4268 4507
+f 4504 4505 4509
+f 4510 4511 4509
+f 4509 4512 4510
+f 4499 4503 4505
+f 4501 4498 4503
+f 4513 4514 4512
+f 4505 4515 4513
+f 4513 4509 4505
+f 4512 4509 4513
+f 4503 4508 4515
+f 4515 4505 4503
+f 4508 4503 4498
+f 4455 4502 4516
+f 4516 4517 4455
+f 4500 4454 4451
+f 4518 4517 4516
+f 4502 4455 4454
+f 4516 4519 4518
+f 4519 4516 4511
+f 4511 4510 4519
+f 4502 4504 4511
+f 4504 4502 4500
+f 4511 4516 4502
+f 4509 4511 4504
+f 4456 4455 4517
+f 4517 4520 4456
+f 4520 4517 4518
+f 4518 4521 4520
+f 4260 4456 4520
+f 4520 4460 4260
+f 4522 4460 4520
+f 4523 4524 4520
+f 4520 4525 4523
+f 4526 4525 4520
+f 4527 4528 4529
+f 4529 4525 4527
+f 4523 4525 4529
+f 4530 4526 4520
+f 4531 4520 4532
+f 4520 4524 4532
+f 4520 4521 4530
+f 4520 4533 4522
+f 4534 4533 4520
+f 4520 4535 4534
+f 4531 4535 4520
+f 4459 4536 4537
+f 4446 4459 4447
+f 4536 4459 4522
+f 4460 4522 4459
+f 4522 4533 4536
+f 4538 4536 4533
+f 4539 4538 4534
+f 4534 4535 4539
+f 4536 4538 4540
+f 4538 4539 4541
+f 4533 4534 4538
+f 4542 4369 4368
+f 4389 4388 4543
+f 4543 4544 4389
+f 4389 4367 4386
+f 4367 4389 4544
+f 4544 4542 4367
+f 4368 4367 4542
+f 4422 4545 4264
+f 4261 4264 4545
+f 4370 4369 4422
+f 4546 4545 4542
+f 4369 4542 4545
+f 4545 4422 4369
+f 4547 4546 4544
+f 4546 4547 4262
+f 4262 4261 4546
+f 4545 4546 4261
+f 4544 4543 4547
+f 4542 4544 4546
+f 4495 4543 4388
+f 4494 4388 4383
+f 4388 4494 4495
+f 4383 4391 4494
+f 4395 4494 4391
+f 4548 4547 4543
+f 4263 4262 4547
+f 4267 4263 4548
+f 4549 4548 4495
+f 4543 4495 4548
+f 4547 4548 4263
+f 4493 4492 4550
+f 4495 4493 4549
+f 4549 4550 4269
+f 4550 4549 4493
+f 4269 4267 4549
+f 4548 4549 4267
+f 4447 4537 4487
+f 4551 4487 4537
+f 4537 4540 4551
+f 4552 4551 4540
+f 4540 4541 4552
+f 4537 4447 4459
+f 4541 4540 4538
+f 4540 4537 4536
+f 4485 4488 4553
+f 4554 4553 4488
+f 4553 4486 4485
+f 4486 4553 4555
+f 4556 4554 4487
+f 4551 4552 4557
+f 4487 4551 4556
+f 4556 4557 4558
+f 4488 4487 4554
+f 4557 4556 4551
+f 4187 4559 4371
+f 4560 4559 4187
+f 4187 4213 4560
+f 4371 4559 4374
+f 4561 4374 4559
+f 4559 4560 4561
+f 4374 4562 4379
+f 4563 4562 4374
+f 4374 4561 4564
+f 4564 4563 4374
+f 4563 4564 4565
+f 4566 4567 4568
+f 4563 4568 4567
+f 4567 4562 4563
+f 4562 4567 4390
+f 4390 4379 4562
+f 4568 4569 4566
+f 4567 4566 4393
+f 4393 4390 4567
+f 4566 4570 4571
+f 4566 4569 4570
+f 4571 4572 4566
+f 4393 4566 4572
+f 4565 4568 4563
+f 4570 4569 4573
+f 4573 4569 4574
+f 4574 4575 4573
+f 4571 4570 4573
+f 4574 4569 4568
+f 4568 4565 4574
+f 4573 4575 4576
+f 4576 4577 4573
+f 4571 4573 4577
+f 4575 4578 4579
+f 4579 4576 4575
+f 4571 4577 4580
+f 4581 4560 4213
+f 4582 4564 4561
+f 4564 4582 4583
+f 4561 4584 4582
+f 4584 4561 4560
+f 4560 4581 4584
+f 4585 4581 4216
+f 4584 4581 4585
+f 4213 4216 4581
+f 4582 4586 4587
+f 4588 4586 4582
+f 4582 4584 4588
+f 4583 4587 4589
+f 4587 4583 4582
+f 4590 4589 4591
+f 4574 4589 4590
+f 4589 4592 4583
+f 4578 4593 4594
+f 4595 4596 4590
+f 4596 4594 4593
+f 4593 4590 4596
+f 4590 4591 4595
+f 4583 4565 4564
+f 4574 4590 4593
+f 4574 4592 4589
+f 4578 4575 4574
+f 4578 4574 4593
+f 4592 4574 4565
+f 4565 4583 4592
+f 4597 4506 4507
+f 4507 4598 4597
+f 4598 4507 4268
+f 4268 4282 4598
+f 4599 4598 4282
+f 4506 4597 4600
+f 4601 4600 4597
+f 4602 4603 4600
+f 4604 4597 4598
+f 4600 4508 4506
+f 4508 4600 4603
+f 4603 4515 4508
+f 4600 4601 4602
+f 4605 4604 4599
+f 4282 4283 4599
+f 4597 4604 4601
+f 4606 4601 4604
+f 4598 4599 4604
+f 4607 4608 4286
+f 4604 4605 4606
+f 4599 4608 4605
+f 4608 4599 4283
+f 4283 4286 4608
+f 4607 4287 4609
+f 4610 4611 4609
+f 4609 4287 4610
+f 4286 4287 4607
+f 4612 4610 4287
+f 4613 4611 4610
+f 4614 4609 4611
+f 4615 4616 4284
+f 4284 4281 4615
+f 4617 4580 4616
+f 4618 4616 4580
+f 4616 4618 4291
+f 4291 4284 4616
+f 4572 4394 4393
+f 4580 4617 4571
+f 4572 4571 4617
+f 4617 4619 4572
+f 4394 4572 4619
+f 4619 4492 4394
+f 4619 4617 4615
+f 4281 4280 4620
+f 4550 4620 4280
+f 4280 4269 4550
+f 4620 4550 4492
+f 4492 4619 4620
+f 4616 4615 4617
+f 4620 4615 4281
+f 4615 4620 4619
+f 4621 4622 4603
+f 4515 4603 4622
+f 4622 4513 4515
+f 4514 4513 4622
+f 4622 4623 4514
+f 4623 4622 4621
+f 4624 4621 4602
+f 4603 4602 4621
+f 4621 4625 4623
+f 4625 4621 4624
+f 4624 4626 4625
+f 4627 4602 4601
+f 4602 4627 4624
+f 4628 4629 4626
+f 4601 4606 4627
+f 4630 4627 4606
+f 4627 4630 4628
+f 4628 4624 4627
+f 4626 4624 4628
+f 4606 4631 4630
+f 4632 4605 4608
+f 4608 4607 4632
+f 4631 4606 4605
+f 4605 4632 4631
+f 4633 4630 4631
+f 4631 4632 4634
+f 4530 4629 4628
+f 4632 4607 4635
+f 4526 4628 4630
+f 4628 4526 4530
+f 4634 4636 4631
+f 4631 4636 4633
+f 4630 4633 4526
+f 4635 4634 4632
+f 4637 4526 4633
+f 4633 4636 4637
+f 4527 4525 4526
+f 4526 4637 4527
+f 4638 4636 4634
+f 4634 4639 4640
+f 4640 4639 4641
+f 4641 4639 4634
+f 4634 4635 4641
+f 4642 4641 4635
+f 4643 4644 4524
+f 4524 4523 4643
+f 4529 4643 4523
+f 4645 4529 4528
+f 4643 4529 4645
+f 4641 4642 4640
+f 4646 4642 4647
+f 4647 4609 4614
+f 4648 4640 4642
+f 4635 4647 4642
+f 4635 4607 4609
+f 4609 4647 4635
+f 4649 4634 4640
+f 4638 4634 4649
+f 4528 4527 4637
+f 4637 4638 4528
+f 4636 4638 4637
+f 4535 4531 4650
+f 4531 4532 4651
+f 4644 4651 4532
+f 4532 4524 4644
+f 4651 4650 4531
+f 4539 4650 4652
+f 4650 4651 4653
+f 4650 4539 4535
+f 4654 4655 4644
+f 4645 4654 4643
+f 4644 4643 4654
+f 4655 4653 4651
+f 4651 4644 4655
+f 4652 4541 4539
+f 4652 4653 4656
+f 4653 4652 4650
+f 4541 4652 4657
+f 4658 4659 4655
+f 4659 4656 4653
+f 4653 4655 4659
+f 4660 4658 4654
+f 4655 4654 4658
+f 4528 4661 4645
+f 4638 4649 4662
+f 4661 4528 4638
+f 4638 4662 4661
+f 4649 4663 4664
+f 4649 4665 4663
+f 4662 4664 4666
+f 4660 4645 4661
+f 4661 4666 4660
+f 4654 4645 4660
+f 4666 4661 4662
+f 4664 4662 4649
+f 4667 4613 4612
+f 4668 4612 4288
+f 4287 4288 4612
+f 4669 4614 4613
+f 4610 4612 4613
+f 4611 4613 4614
+f 4613 4667 4669
+f 4612 4668 4667
+f 4669 4290 4670
+f 4671 4670 4290
+f 4290 4289 4671
+f 4288 4290 4668
+f 4668 4290 4669
+f 4669 4667 4668
+f 4614 4672 4647
+f 4672 4614 4669
+f 4673 4648 4646
+f 4642 4646 4648
+f 4674 4646 4672
+f 4665 4648 4673
+f 4649 4640 4648
+f 4647 4672 4646
+f 4665 4649 4648
+f 4675 4676 4677
+f 4670 4678 4679
+f 4669 4679 4672
+f 4676 4675 4680
+f 4680 4678 4670
+f 4675 4681 4665
+f 4665 4680 4675
+f 4665 4673 4680
+f 4672 4679 4674
+f 4646 4674 4673
+f 4673 4682 4680
+f 4677 4681 4675
+f 4683 4674 4679
+f 4682 4673 4674
+f 4679 4678 4683
+f 4683 4678 4680
+f 4680 4682 4683
+f 4674 4683 4682
+f 4670 4684 4680
+f 4685 4684 4670
+f 4686 4676 4684
+f 4679 4669 4670
+f 4680 4684 4676
+f 4687 4688 4689
+f 4690 4691 4689
+f 4689 4691 4687
+f 4576 4579 4692
+f 4594 4579 4578
+f 4579 4594 4693
+f 4692 4693 4694
+f 4693 4692 4579
+f 4695 4692 4696
+f 4577 4576 4695
+f 4695 4580 4577
+f 4692 4695 4576
+f 4580 4695 4618
+f 4696 4694 4295
+f 4696 4618 4695
+f 4292 4291 4618
+f 4295 4292 4696
+f 4694 4696 4692
+f 4618 4696 4292
+f 4697 4698 4699
+f 4699 4700 4697
+f 4594 4596 4697
+f 4596 4595 4698
+f 4693 4697 4700
+f 4698 4697 4596
+f 4697 4693 4594
+f 4700 4699 4297
+f 4700 4694 4693
+f 4296 4295 4694
+f 4694 4700 4296
+f 4657 4656 4701
+f 4656 4657 4652
+f 4552 4657 4702
+f 4703 4704 4659
+f 4704 4701 4656
+f 4656 4659 4704
+f 4657 4552 4541
+f 4701 4702 4657
+f 4705 4706 4702
+f 4707 4705 4701
+f 4702 4701 4705
+f 4702 4557 4552
+f 4701 4704 4707
+f 4557 4702 4706
+f 4666 4708 4709
+f 4708 4666 4664
+f 4663 4710 4711
+f 4709 4660 4666
+f 4711 4664 4663
+f 4658 4660 4709
+f 4664 4711 4708
+f 4710 4663 4665
+f 4704 4703 4690
+f 4691 4709 4708
+f 4659 4658 4703
+f 4709 4703 4658
+f 4703 4709 4691
+f 4691 4690 4703
+f 4690 4707 4704
+f 4708 4687 4691
+f 4712 4711 4710
+f 4711 4712 4687
+f 4687 4708 4711
+f 4688 4687 4712
+f 4297 4296 4700
+f 4713 4714 4715
+f 4716 4713 4717
+f 4715 4717 4713
+f 4716 4686 4685
+f 4713 4716 4718
+f 4714 4713 4719
+f 4720 4671 4289
+f 4289 4293 4720
+f 4721 4720 4293
+f 4293 4294 4721
+f 4718 4685 4671
+f 4685 4718 4716
+f 4671 4720 4718
+f 4719 4718 4720
+f 4677 4722 4723
+f 4722 4677 4676
+f 4670 4671 4685
+f 4723 4724 4677
+f 4676 4686 4722
+f 4725 4724 4723
+f 4684 4685 4686
+f 4726 4723 4722
+f 4686 4716 4727
+f 4728 4723 4726
+f 4722 4727 4726
+f 4723 4728 4725
+f 4727 4722 4686
+f 4720 4721 4719
+f 4729 4721 4294
+f 4730 4719 4721
+f 4294 4298 4729
+f 4719 4730 4714
+f 4718 4719 4713
+f 4721 4729 4730
+f 4727 4717 4731
+f 4731 4726 4727
+f 4732 4726 4731
+f 4717 4727 4716
+f 4726 4732 4728
+f 4731 4733 4732
+f 4734 4735 4733
+f 4733 4731 4734
+f 4734 4731 4717
+f 4717 4715 4734
+f 4710 4736 4712
+f 4688 4712 4736
+f 4736 4737 4688
+f 4737 4736 4738
+f 4738 4739 4737
+f 4665 4740 4738
+f 4738 4741 4665
+f 4665 4741 4710
+f 4681 4740 4665
+f 4739 4738 4740
+f 4736 4710 4741
+f 4741 4738 4736
+f 4681 4742 4740
+f 4733 4735 4743
+f 4728 4743 4725
+f 4744 4724 4725
+f 4728 4732 4743
+f 4681 4677 4724
+f 4733 4743 4732
+f 4745 4744 4743
+f 4743 4735 4746
+f 4681 4744 4745
+f 4724 4744 4681
+f 4725 4743 4744
+f 4747 4748 4749
+f 4351 4750 4352
+f 4190 4352 4751
+f 4751 4197 4190
+f 4750 4751 4352
+f 4750 4749 4751
+f 4749 4748 4751
+f 4351 4752 4753
+f 4753 4750 4351
+f 4353 4752 4351
+f 4750 4753 4754
+f 4755 4754 4753
+f 4756 4757 4754
+f 4747 4757 4756
+f 4754 4749 4750
+f 4754 4757 4749
+f 4749 4757 4747
+f 4753 4758 4755
+f 4755 4758 4759
+f 4353 4361 4760
+f 4760 4752 4353
+f 4752 4760 4758
+f 4758 4753 4752
+f 4362 4761 4760
+f 4761 4362 4402
+f 4402 4762 4761
+f 4760 4361 4362
+f 4763 4759 4764
+f 4761 4759 4758
+f 4759 4761 4762
+f 4762 4764 4759
+f 4758 4760 4761
+f 4756 4755 4763
+f 4756 4765 4747
+f 4765 4756 4766
+f 4766 4767 4765
+f 4754 4755 4756
+f 4759 4763 4755
+f 4766 4763 4768
+f 4767 4766 4769
+f 4770 4767 4771
+f 4763 4766 4756
+f 4764 4768 4763
+f 4197 4751 4772
+f 4772 4198 4197
+f 4751 4748 4773
+f 4773 4772 4751
+f 4774 4775 4747
+f 4748 4747 4775
+f 4775 4773 4748
+f 4773 4776 4777
+f 4776 4773 4775
+f 4775 4778 4776
+f 4779 4778 4775
+f 4777 4772 4773
+f 4198 4772 4777
+f 4777 4201 4198
+f 4765 4767 4780
+f 4780 4774 4765
+f 4747 4765 4774
+f 4770 4781 4780
+f 4770 4780 4767
+f 4775 4774 4779
+f 4782 4783 4780
+f 4774 4780 4783
+f 4783 4779 4774
+f 4784 4785 4780
+f 4785 4784 4786
+f 4780 4781 4784
+f 4787 4785 4788
+f 4788 4785 4786
+f 4780 4785 4782
+f 4785 4787 4789
+f 4789 4782 4785
+f 4790 4791 4792
+f 4408 4792 4791
+f 4791 4405 4408
+f 4303 4300 4791
+f 4405 4791 4300
+f 4300 4277 4405
+f 4793 4792 4794
+f 4795 4793 4796
+f 4794 4796 4793
+f 4797 4796 4798
+f 4799 4798 4796
+f 4800 4790 4793
+f 4792 4793 4790
+f 4792 4408 4472
+f 4799 4473 4474
+f 4474 4801 4799
+f 3831 4801 4474
+f 4474 3836 3831
+f 4794 4472 4473
+f 4473 4799 4794
+f 4798 4799 4801
+f 4796 4794 4799
+f 4801 3831 3838
+f 4472 4794 4792
+f 4791 4790 4303
+f 4306 4305 4800
+f 4790 4800 4305
+f 4305 4303 4790
+f 4802 4795 4797
+f 4796 4797 4795
+f 4803 4797 4804
+f 4805 4800 4795
+f 4793 4795 4800
+f 4762 4402 4418
+f 4418 4806 4762
+f 4764 4762 4806
+f 4806 4807 4764
+f 4806 4418 4403
+f 4403 4808 4806
+f 4807 4806 4808
+f 4808 4809 4807
+f 4809 4808 4275
+f 4275 4301 4809
+f 4808 4403 4276
+f 4276 4275 4808
+f 4810 4811 4769
+f 4768 4764 4807
+f 4807 4810 4768
+f 4810 4807 4809
+f 4769 4768 4810
+f 4811 4810 4812
+f 4809 4812 4810
+f 4301 4302 4812
+f 4812 4809 4301
+f 4798 4804 4797
+f 4801 4813 4798
+f 4813 3838 3819
+f 4804 4798 4813
+f 4813 4814 4804
+f 3838 4813 4801
+f 3819 4814 4813
+f 4815 4804 4814
+f 4814 4816 4815
+f 3822 4816 4814
+f 4814 3819 3822
+f 4797 4803 4802
+f 4804 4815 4803
+f 4795 4802 4805
+f 4817 4306 4818
+f 4818 4819 4817
+f 4818 4306 4805
+f 4800 4805 4306
+f 4820 4818 4805
+f 4805 4802 4821
+f 4821 4822 4805
+f 4818 4820 4823
+f 4815 4824 4825
+f 4803 4825 4821
+f 4821 4802 4803
+f 4805 4822 4820
+f 4825 4803 4815
+f 4477 4826 4475
+f 3822 3845 4475
+f 4477 4481 4826
+f 4475 4816 3822
+f 4824 4826 4827
+f 4824 4815 4816
+f 4826 4824 4475
+f 4816 4475 4824
+f 4821 4828 4829
+f 4830 4831 4820
+f 4821 4830 4822
+f 4831 4830 4829
+f 4829 4828 4831
+f 4820 4822 4830
+f 4829 4830 4821
+f 4827 4825 4824
+f 4832 4831 4828
+f 4823 4820 4831
+f 4833 4828 4821
+f 4821 4825 4833
+f 4827 4833 4825
+f 4826 4834 4827
+f 4828 4833 4832
+f 4831 4832 4823
+f 4835 4836 4837
+f 4837 4836 4838
+f 4838 4489 4837
+f 4479 4839 4481
+f 4481 4480 4479
+f 4834 4826 4481
+f 4489 4838 4839
+f 4839 4479 4489
+f 4818 4840 4841
+f 4842 4843 4844
+f 4843 4842 4845
+f 4839 4845 4842
+f 4823 4840 4818
+f 4845 4839 4838
+f 4817 4846 4308
+f 4819 4841 4846
+f 4834 4844 4833
+f 4833 4827 4834
+f 4844 4834 4842
+f 4481 4842 4834
+f 4842 4481 4839
+f 4781 4770 4847
+f 4768 4769 4766
+f 4771 4847 4770
+f 4769 4771 4767
+f 4771 4769 4811
+f 4811 4848 4771
+f 4847 4771 4848
+f 4848 4849 4850
+f 4849 4851 4850
+f 4851 4852 4850
+f 4852 4851 4309
+f 4309 4311 4852
+f 4311 4312 4852
+f 4312 4316 4852
+f 4853 4812 4302
+f 4853 4849 4848
+f 4853 4854 4848
+f 4302 4307 4853
+f 4849 4853 4307
+f 4812 4853 4811
+f 4848 4811 4853
+f 4307 4313 4849
+f 4313 4310 4849
+f 4851 4849 4310
+f 4310 4309 4851
+f 4855 4856 4857
+f 4857 4858 4855
+f 4859 4855 4858
+f 4858 4857 4860
+f 4861 4858 4862
+f 4863 4864 4865
+f 4856 4863 4865
+f 4865 4857 4856
+f 4866 4867 4850
+f 4848 4850 4847
+f 4868 4866 4864
+f 4850 4864 4866
+f 4867 4847 4850
+f 4850 4848 4854
+f 4869 4870 4864
+f 4869 4850 4852
+f 4870 4865 4864
+f 4864 4850 4869
+f 4491 4837 4490
+f 4837 4491 4835
+f 4555 4491 4486
+f 4490 4837 4489
+f 4483 4489 4479
+f 4871 4555 4553
+f 4860 4872 4555
+f 4553 4554 4871
+f 4872 4835 4491
+f 4555 4871 4860
+f 4491 4555 4872
+f 4554 4556 4873
+f 4558 4873 4556
+f 4862 4860 4871
+f 4873 4871 4554
+f 4871 4873 4862
+f 4874 4862 4873
+f 4873 4558 4874
+f 4865 4870 4835
+f 4857 4865 4872
+f 4860 4862 4858
+f 4862 4874 4861
+f 4835 4872 4865
+f 4872 4860 4857
+f 4869 4852 4316
+f 4875 4316 4876
+f 4870 4869 4836
+f 4316 4875 4869
+f 4875 4838 4836
+f 4836 4835 4870
+f 4838 4875 4845
+f 4836 4869 4875
+f 4845 4876 4843
+f 4876 4845 4875
+f 4846 4817 4819
+f 4841 4819 4818
+f 4308 4306 4817
+f 4846 4877 4318
+f 4318 4308 4846
+f 4841 4878 4877
+f 4877 4846 4841
+f 4840 4879 4878
+f 4878 4841 4840
+f 4880 4315 4322
+f 4319 4881 4882
+f 4882 4320 4319
+f 4320 4882 4883
+f 4883 4322 4320
+f 4866 4868 4784
+f 4867 4866 4781
+f 4847 4867 4781
+f 4784 4781 4866
+f 4788 4786 4884
+f 4786 4784 4868
+f 4868 4884 4786
+f 4884 4868 4863
+f 4885 4886 4856
+f 4856 4855 4885
+f 4887 4885 4855
+f 4864 4863 4868
+f 4886 4884 4863
+f 4863 4856 4886
+f 4888 4788 4886
+f 4886 4885 4888
+f 4889 4888 4885
+f 4884 4886 4788
+f 4788 4888 4787
+f 4890 4891 4892
+f 4893 4894 4895
+f 4892 4895 4890
+f 4891 4890 4314
+f 4323 4321 4896
+f 4897 4896 4321
+f 4321 4317 4897
+f 4890 4897 4317
+f 4317 4314 4890
+f 4898 4896 4899
+f 4900 4899 4896
+f 4894 4901 4900
+f 4900 4895 4894
+f 4896 4897 4900
+f 4895 4900 4897
+f 4897 4890 4895
+f 4902 4903 4901
+f 4901 4894 4902
+f 4904 4905 4906
+f 4899 4900 4901
+f 4907 4903 4904
+f 4901 4908 4899
+f 4908 4901 4903
+f 4903 4907 4908
+f 4904 4909 4907
+f 4910 4899 4908
+f 4911 4907 4909
+f 4906 4909 4904
+f 4909 4906 4912
+f 4913 4908 4907
+f 4908 4913 4910
+f 4912 4914 4909
+f 4907 4911 4913
+f 4909 4914 4911
+f 4915 4916 4917
+f 4918 4883 4882
+f 4919 4920 4916
+f 4880 4322 4883
+f 4881 4916 4920
+f 4882 4920 4918
+f 4921 4918 4920
+f 4920 4882 4881
+f 4880 4922 4843
+f 4922 4883 4918
+f 4922 4880 4883
+f 4843 4876 4880
+f 4315 4880 4876
+f 4876 4316 4315
+f 4923 4922 4918
+f 4891 4318 4879
+f 4314 4318 4891
+f 4924 4891 4879
+f 4925 4879 4840
+f 4877 4878 4879
+f 4879 4318 4877
+f 4895 4892 4893
+f 4926 4927 4928
+f 4894 4893 4929
+f 4929 4902 4894
+f 4902 4929 4926
+f 4928 4930 4926
+f 4905 4904 4930
+f 4930 4928 4905
+f 4926 4930 4902
+f 4903 4902 4930
+f 4930 4904 4903
+f 4924 4931 4892
+f 4879 4925 4924
+f 4931 4932 4893
+f 4893 4892 4931
+f 4893 4932 4933
+f 4933 4929 4893
+f 4892 4891 4924
+f 4934 4921 4933
+f 4833 4935 4936
+f 4923 4934 4833
+f 4936 4832 4833
+f 4935 4833 4934
+f 4925 4823 4832
+f 4832 4936 4925
+f 4932 4931 4934
+f 4934 4931 4935
+f 4934 4933 4932
+f 4931 4937 4938
+f 4931 4924 4937
+f 4937 4936 4935
+f 4935 4938 4937
+f 4924 4925 4936
+f 4936 4937 4924
+f 4931 4938 4935
+f 4922 4923 4844
+f 4844 4843 4922
+f 4934 4923 4921
+f 4840 4823 4925
+f 4833 4844 4923
+f 4923 4918 4921
+f 4939 4915 4940
+f 4920 4919 4921
+f 4933 4921 4919
+f 4940 4941 4939
+f 4942 4919 4915
+f 4916 4915 4919
+f 4912 4906 4943
+f 4905 4943 4906
+f 4942 4926 4929
+f 4944 4943 4928
+f 4905 4928 4943
+f 4943 4927 4926
+f 4915 4939 4942
+f 4929 4933 4942
+f 4945 4943 4942
+f 4919 4942 4933
+f 4926 4942 4943
+f 4945 4912 4943
+f 4946 4945 4947
+f 4946 4948 4945
+f 4949 4945 4948
+f 4949 4912 4945
+f 4950 4951 4952
+f 4952 4585 4226
+f 4226 4239 4952
+f 4953 4952 4239
+f 4951 4588 4585
+f 4585 4588 4584
+f 4585 4952 4951
+f 4216 4226 4585
+f 4951 4950 4954
+f 4952 4953 4950
+f 4955 4953 4241
+f 4241 4243 4955
+f 4950 4956 4957
+f 4956 4950 4953
+f 4953 4955 4956
+f 4239 4241 4953
+f 4958 4959 4960
+f 4961 4962 4960
+f 4960 4959 4961
+f 4957 4954 4950
+f 4963 4964 4954
+f 4965 4954 4964
+f 4954 4957 4963
+f 4966 4964 4967
+f 4968 4967 4964
+f 4964 4963 4968
+f 4588 4951 4965
+f 4965 4586 4588
+f 4966 4587 4586
+f 4586 4965 4966
+f 4964 4966 4965
+f 4587 4966 4969
+f 4954 4965 4951
+f 4970 4971 4972
+f 4591 4972 4971
+f 4971 4595 4591
+f 4972 4973 4970
+f 4589 4972 4591
+f 4962 4972 4589
+f 4699 4974 4337
+f 4698 4975 4974
+f 4974 4699 4698
+f 4595 4971 4975
+f 4975 4698 4595
+f 4975 4976 4977
+f 4977 4974 4975
+f 4971 4970 4976
+f 4976 4975 4971
+f 4978 4977 4976
+f 4979 4976 4980
+f 4974 4977 4338
+f 4981 4982 4983
+f 4984 4982 4707
+f 4980 4985 4986
+f 4986 4983 4982
+f 4982 4984 4986
+f 4979 4986 4984
+f 4986 4979 4980
+f 4976 4979 4978
+f 4338 4337 4974
+f 4338 4987 4988
+f 4977 4978 4987
+f 4987 4338 4977
+f 4707 4690 4984
+f 4982 4981 4705
+f 4705 4707 4982
+f 4981 4989 4706
+f 4706 4705 4981
+f 4706 4558 4557
+f 4989 4874 4558
+f 4558 4706 4989
+f 4689 4688 4978
+f 4978 4979 4689
+f 4984 4689 4979
+f 4689 4984 4690
+f 4858 4861 4859
+f 4990 4859 4861
+f 4861 4991 4990
+f 4992 4983 4993
+f 4993 4990 4992
+f 4991 4992 4990
+f 4991 4861 4874
+f 4874 4989 4991
+f 4983 4992 4981
+f 4992 4991 4989
+f 4989 4981 4992
+f 4976 4980 4994
+f 4336 4995 4996
+f 4338 4997 4995
+f 4336 4338 4977
+f 4995 4336 4338
+f 4994 4977 4976
+f 4977 4994 4336
+f 4996 4334 4336
+f 4998 4962 4961
+f 4998 4961 4999
+f 4999 5000 4998
+f 4961 4959 5001
+f 5001 4999 4961
+f 4962 4998 5002
+f 5000 4999 5003
+f 5003 4985 5000
+f 4985 5003 4986
+f 4983 4986 5003
+f 5003 4993 4983
+f 5004 5000 4985
+f 4985 4980 5004
+f 4993 5003 4999
+f 5005 4970 4973
+f 5004 5005 5006
+f 4970 5005 4980
+f 4980 4976 4970
+f 5005 5004 4980
+f 4973 5006 5005
+f 4973 4962 5006
+f 5002 4998 5000
+f 5002 5006 4962
+f 5000 5004 5002
+f 5006 5002 5004
+f 4855 4859 4887
+f 4859 4990 5007
+f 4319 5008 4881
+f 5008 4324 5009
+f 5008 4319 4324
+f 5007 4887 4859
+f 5001 5007 4990
+f 4990 4993 5001
+f 4999 5001 4993
+f 5007 5001 4959
+f 4887 5007 4958
+f 4959 4958 5007
+f 4958 4960 4889
+f 4885 4887 4889
+f 4958 4889 4887
+f 4328 5010 5011
+f 5011 4327 4328
+f 5009 4324 4327
+f 5010 4334 4996
+f 4327 5011 5009
+f 5010 4328 4334
+f 5012 5009 5011
+f 4917 5009 5012
+f 5008 4917 4916
+f 4916 4881 5008
+f 5012 5011 5010
+f 4917 5008 5009
+f 4787 4888 4889
+f 4889 4960 4787
+f 4325 4323 4898
+f 4789 4787 4960
+f 4960 5013 4789
+f 4896 4898 4323
+f 4910 5014 5015
+f 5015 4898 4910
+f 4899 4910 4898
+f 4898 5015 4325
+f 5014 4910 4913
+f 4949 5016 4914
+f 4914 4912 4949
+f 4911 5017 5018
+f 4913 5018 5014
+f 5018 4913 4911
+f 5017 4911 4914
+f 4914 5016 5017
+f 5019 5020 4331
+f 4331 4329 5019
+f 5015 5019 4329
+f 5014 5021 5019
+f 4329 4325 5015
+f 5019 5015 5014
+f 5017 5022 5023
+f 5023 5018 5017
+f 5022 5017 5016
+f 5018 5023 5021
+f 5021 5014 5018
+f 5024 5023 5022
+f 5025 5026 5027
+f 5028 5029 5026
+f 5010 5030 5012
+f 5030 5010 4996
+f 5030 4996 4995
+f 5031 5030 5032
+f 4332 5027 4330
+f 4946 5033 5034
+f 5034 5033 5035
+f 5034 4948 4946
+f 4948 5034 5016
+f 5016 4949 4948
+f 5016 5034 5022
+f 5035 5022 5034
+f 5036 5037 5024
+f 5023 5024 5037
+f 5037 5021 5023
+f 5038 5020 5037
+f 5021 5037 5020
+f 5020 5019 5021
+f 5022 5035 5024
+f 5039 5024 5035
+f 5035 5040 5039
+f 5040 5035 5033
+f 5033 4946 4947
+f 5033 5041 5040
+f 4947 5041 5033
+f 5042 5012 5030
+f 4940 4917 5012
+f 5043 5042 5030
+f 4940 5012 5042
+f 5031 5044 5045
+f 5045 5043 5031
+f 5042 5043 4940
+f 4917 4940 4915
+f 5030 5031 5043
+f 5046 5045 5044
+f 5045 5046 4939
+f 5043 5045 4941
+f 4941 4940 5043
+f 4942 5046 4945
+f 4942 4939 5046
+f 4939 4941 5045
+f 4988 4997 4338
+f 4688 4987 4978
+f 4337 4297 4699
+f 4997 5047 5032
+f 5032 4995 4997
+f 4997 4988 5048
+f 5048 5047 4997
+f 4995 5032 5030
+f 4987 4688 4737
+f 4737 4988 4987
+f 4740 4742 5049
+f 5049 5050 4740
+f 4740 5050 4739
+f 5048 4739 5050
+f 5050 5049 5048
+f 4988 4737 4739
+f 4739 5048 4988
+f 5047 5048 5049
+f 5051 5032 5047
+f 5052 5051 5053
+f 5047 5053 5051
+f 4298 4299 5054
+f 4299 4339 5055
+f 4969 4589 4587
+f 5054 4729 4298
+f 5056 5055 4339
+f 5055 5054 4299
+f 5057 5058 5054
+f 5058 4730 4729
+f 4729 5054 5058
+f 5054 5055 5057
+f 4730 5058 5059
+f 5060 5061 5062
+f 5063 5064 5065
+f 5061 5060 5066
+f 5066 5067 5068
+f 5062 5065 5060
+f 5069 4734 4715
+f 5070 5059 5058
+f 4714 5059 5071
+f 5071 4715 4714
+f 5072 5071 5059
+f 4715 5071 5069
+f 5059 4714 4730
+f 5059 5070 5072
+f 5070 5062 5061
+f 5061 5072 5070
+f 5063 5057 5055
+f 5055 5056 5063
+f 5058 5057 5070
+f 5062 5070 5057
+f 5057 5063 5062
+f 5053 5049 4742
+f 4742 5073 5053
+f 5049 5053 5047
+f 5053 5073 5052
+f 5074 5073 4742
+f 5066 5075 5061
+f 5072 5061 5075
+f 5075 5068 5076
+f 5068 5075 5066
+f 5076 4746 5077
+f 5076 5078 5075
+f 5075 5078 5072
+f 4735 5077 4746
+f 4735 4734 5069
+f 5069 5077 4735
+f 5077 5069 5078
+f 5078 5069 5071
+f 5078 5076 5077
+f 5071 5072 5078
+f 5076 5068 4746
+f 4745 5066 5060
+f 4746 5067 5066
+f 5067 4746 5068
+f 5060 5074 4745
+f 5066 4745 4746
+f 4743 4746 4745
+f 5074 4742 4681
+f 5079 5073 5074
+f 4681 4745 5074
+f 4973 4972 4962
+f 4960 4962 4969
+f 4589 4969 4962
+f 4339 4341 5056
+f 4967 4969 4966
+f 5013 4960 4967
+f 4333 4331 5020
+f 4967 4968 5013
+f 4969 4967 4960
+f 5080 5028 5038
+f 5037 5036 5038
+f 5020 5038 4333
+f 5028 5025 4332
+f 4332 4333 5028
+f 5028 4333 5038
+f 5026 5025 5028
+f 5027 4332 5025
+f 5024 5039 5036
+f 5052 5081 5044
+f 5051 5052 5044
+f 5032 5051 5031
+f 5082 5083 5084
+f 5085 5052 5083
+f 5044 5031 5051
+f 5081 5039 5040
+f 5038 5036 5086
+f 5086 5036 5039
+f 5087 5040 5041
+f 5046 5041 4947
+f 5039 5081 5086
+f 5038 5088 5080
+f 5041 5046 5087
+f 5040 5087 5081
+f 4947 4945 5046
+f 5086 5088 5038
+f 5052 5085 5086
+f 5083 5082 5085
+f 5052 5086 5081
+f 5084 5080 5082
+f 5044 5087 5046
+f 5044 5081 5087
+f 5089 5088 5086
+f 5080 5088 5089
+f 5090 5085 5082
+f 5082 5089 5090
+f 5089 5082 5080
+f 5086 5090 5089
+f 5085 5090 5086
+f 5091 5056 4341
+f 5064 5063 5056
+f 5065 5062 5063
+f 5056 5091 5064
+f 5091 4340 5092
+f 4341 4340 5091
+f 5092 4340 5093
+f 5093 5094 5092
+f 5095 5091 5092
+f 5065 5079 5074
+f 5074 5060 5065
+f 5065 5064 5096
+f 5092 5097 5095
+f 5064 5091 5095
+f 5095 5096 5064
+f 5096 5079 5065
+f 5052 5098 5099
+f 5097 5084 5083
+f 5083 5099 5097
+f 5099 5083 5052
+f 5096 5098 5052
+f 5079 5052 5073
+f 5052 5079 5096
+f 5095 5097 5099
+f 5096 5100 5098
+f 5099 5101 5095
+f 5101 5099 5098
+f 5096 5095 5101
+f 5098 5100 5101
+f 5096 5101 5100
+f 5093 5027 5026
+f 5027 5093 4340
+f 5029 5092 5094
+f 5097 5092 5029
+f 5094 5026 5029
+f 4340 4330 5027
+f 5084 5029 5028
+f 5026 5094 5093
+f 5028 5080 5084
+f 5029 5084 5097
diff --git a/Recast/Examples/Meshes/nav_test.obj b/Recast/Examples/Meshes/nav_test.obj
new file mode 100644
index 0000000..1d4c595
--- /dev/null
+++ b/Recast/Examples/Meshes/nav_test.obj
@@ -0,0 +1,3506 @@
+mtllib nav_test.mtl
+o nav_test.obj
+v -21.847065 -2.492895 19.569759
+v -15.847676 -2.492895 18.838863
+v -21.847065 -0.895197 19.569759
+v -15.847676 -0.895197 18.838863
+v -21.585381 -2.492895 21.717730
+v -15.585992 -2.492895 20.986834
+v -21.585381 -0.895197 21.717730
+v -15.585992 -0.895197 20.986834
+v -22.078766 -1.169756 17.667891
+v -16.079414 -1.169756 16.936998
+v -22.078766 0.427928 17.667891
+v -16.079414 0.427928 16.936998
+v -21.817081 -1.169756 19.815861
+v -15.817731 -1.169756 19.084969
+v -21.817081 0.427928 19.815861
+v -15.817731 0.427928 19.084969
+v -22.310509 0.142680 15.765698
+v -16.311157 0.142680 15.034807
+v -22.310509 1.740365 15.765698
+v -16.311157 1.740365 15.034807
+v -22.048828 0.142680 17.913649
+v -16.049477 0.142680 17.182758
+v -22.048828 1.740365 17.913649
+v -16.049477 1.740365 17.182758
+v -22.541557 1.588395 13.869190
+v -16.542206 1.588395 13.138299
+v -22.541557 3.186100 13.869190
+v -16.542206 3.186100 13.138299
+v -22.279873 1.588395 16.017160
+v -16.280521 1.588395 15.286268
+v -22.279873 3.186100 16.017160
+v -16.280521 3.186100 15.286268
+v -22.775589 2.892463 11.948195
+v -16.776237 2.892463 11.217304
+v -22.775589 4.490149 11.948195
+v -16.776237 4.490149 11.217304
+v -22.513905 2.892463 14.096166
+v -16.514553 2.892463 13.365274
+v -22.513905 4.490149 14.096166
+v -16.514553 4.490149 13.365274
+v -23.008904 4.280072 10.033092
+v -17.009552 4.280072 9.302201
+v -23.008904 5.877757 10.033092
+v -17.009552 5.877757 9.302201
+v -22.747219 4.280072 12.181063
+v -16.747868 4.280072 11.450171
+v -22.747219 5.877757 12.181063
+v -16.747868 5.877757 11.450171
+v -23.234169 5.535265 8.184037
+v -17.234818 5.535265 7.453146
+v -23.234169 7.132950 8.184037
+v -17.234818 7.132950 7.453146
+v -22.972485 5.535265 10.332007
+v -16.973133 5.535265 9.601116
+v -22.972485 7.132950 10.332007
+v -16.973133 7.132950 9.601116
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vn -0.642934 -0.577350 -0.503292
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503292
+vn 0.503291 0.577350 -0.642934
+vn -0.503292 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503292
+vn -0.503292 0.577350 0.642934
+vn 0.642934 0.577350 0.503292
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 4/1/4 2/2/2 1/3/1 3/4/3
+f 6/5/6 8/6/8 7/7/7 5/8/5
+f 6/5/6 5/8/5 1/3/1 2/2/2
+f 8/6/8 6/5/6 2/2/2 4/1/4
+f 7/7/7 8/6/8 4/1/4 3/4/3
+f 5/8/5 7/7/7 3/4/3 1/3/1
+f 12/9/12 10/10/10 9/11/9 11/12/11
+f 14/13/14 16/14/16 15/15/15 13/16/13
+f 14/13/14 13/16/13 9/11/9 10/10/10
+f 16/14/16 14/13/14 10/10/10 12/9/12
+f 15/15/15 16/14/16 12/9/12 11/12/11
+f 13/16/13 15/15/15 11/12/11 9/11/9
+f 20/17/20 18/18/18 17/19/17 19/20/19
+f 22/21/22 24/22/24 23/23/23 21/24/21
+f 22/21/22 21/24/21 17/19/17 18/18/18
+f 24/22/24 22/21/22 18/18/18 20/17/20
+f 23/23/23 24/22/24 20/17/20 19/20/19
+f 21/24/21 23/23/23 19/20/19 17/19/17
+f 28/25/28 26/26/26 25/27/25 27/28/27
+f 30/29/30 32/30/32 31/31/31 29/32/29
+f 30/29/30 29/32/29 25/27/25 26/26/26
+f 32/30/32 30/29/30 26/26/26 28/25/28
+f 31/31/31 32/30/32 28/25/28 27/28/27
+f 29/32/29 31/31/31 27/28/27 25/27/25
+f 36/33/36 34/34/34 33/35/33 35/36/35
+f 38/37/38 40/38/40 39/39/39 37/40/37
+f 38/37/38 37/40/37 33/35/33 34/34/34
+f 40/38/40 38/37/38 34/34/34 36/33/36
+f 39/39/39 40/38/40 36/33/36 35/36/35
+f 37/40/37 39/39/39 35/36/35 33/35/33
+f 44/41/44 42/42/42 41/43/41 43/44/43
+f 46/45/46 48/46/48 47/47/47 45/48/45
+f 46/45/46 45/48/45 41/43/41 42/42/42
+f 48/46/48 46/45/46 42/42/42 44/41/44
+f 47/47/47 48/46/48 44/41/44 43/44/43
+f 45/48/45 47/47/47 43/44/43 41/43/41
+f 52/49/52 50/50/50 49/51/49 51/52/51
+f 54/53/54 56/54/56 55/55/55 53/56/53
+f 54/53/54 53/56/53 49/51/49 50/50/50
+f 56/54/56 54/53/54 50/50/50 52/49/52
+f 55/55/55 56/54/56 52/49/52 51/52/51
+f 53/56/53 55/55/55 51/52/51 49/51/49
+v -28.889317 -3.557970 -20.236633
+v 21.065487 -3.557970 -26.322546
+v -28.889317 -2.370904 -20.236633
+v 21.065487 -2.370904 -26.322546
+v -22.640766 -3.557970 31.053141
+v 27.314037 -3.557970 24.967228
+v -22.640766 -2.370904 31.053141
+v 27.314037 -2.370904 24.967228
+v -11.345862 -3.554139 -0.603272
+v -1.840215 -3.554139 -1.761330
+v -2.998272 -3.554139 -11.266972
+v -12.503919 -3.554139 -10.108913
+v -11.345862 -2.367074 -0.603272
+v -1.840215 -2.367074 -1.761330
+v -2.998272 -2.367074 -11.266972
+v -12.503919 -2.367074 -10.108913
+v 14.880527 -2.365568 6.393913
+v 16.038584 -2.365752 15.899554
+v 6.532944 -2.365750 17.057611
+v 5.374887 -2.364530 7.551970
+v 6.532944 -3.552818 17.057611
+v 16.038584 -3.552819 15.899554
+v 14.880527 -3.552633 6.393913
+v 5.374887 -3.551598 7.551970
+v 1.032586 -2.363936 21.819389
+v -8.473061 -2.364388 22.977446
+v -9.631113 -2.364505 13.471843
+v -9.631113 -3.550801 13.471843
+v -8.473061 -3.551456 22.977446
+v 1.032586 -3.551004 21.819389
+v -0.125466 -2.361971 12.313786
+v -0.125466 -3.549039 12.313786
+vn -0.262337 -0.942870 -0.205369
+vn 0.205367 -0.942875 -0.262320
+vn -0.262635 0.942746 -0.205554
+vn 0.205639 0.942742 -0.262583
+vn -0.355815 -0.816687 0.454332
+vn 0.335634 -0.904611 0.262733
+vn -0.355909 0.816255 0.455034
+vn 0.335918 0.904340 0.263302
+vn 0.262962 -0.904544 -0.335637
+vn -0.335745 -0.904605 -0.262612
+vn -0.355807 -0.816428 0.454804
+vn 0.454699 -0.816419 0.355963
+vn 0.262672 0.904546 -0.335856
+vn -0.335747 0.904495 -0.262988
+vn -0.355864 0.816560 0.454522
+vn 0.454548 0.816575 0.355798
+vn -0.355652 0.816607 0.454604
+vn -0.454443 0.816647 -0.355766
+vn 0.356082 0.816529 -0.454407
+vn 0.262653 0.942785 0.205353
+vn 0.355755 -0.816589 -0.454555
+vn -0.454803 -0.816488 -0.355671
+vn -0.356080 -0.816394 0.454651
+vn 0.262333 -0.942818 0.205610
+vn -0.335659 0.904720 -0.262326
+vn 0.355853 0.816737 -0.454212
+vn 0.335572 0.904622 0.262774
+vn 0.335908 -0.904451 0.262933
+vn 0.355947 -0.816306 -0.454914
+vn -0.335871 -0.904446 -0.262999
+vn -0.262777 0.904593 0.335648
+vn -0.262932 -0.904466 0.335869
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 60/57/60 58/58/58 57/59/57 59/60/59
+f 62/61/62 64/62/64 63/63/63 61/64/61
+f 64/62/64 62/61/62 58/58/58 60/57/60
+f 61/64/61 63/63/63 59/60/59 57/59/57
+f 67/65/67 71/66/71 72/67/72 68/68/68
+f 70/69/70 66/70/66 65/71/65 69/72/69
+f 66/70/66 70/69/70 71/66/71 67/65/67
+f 69/72/69 65/71/65 68/68/68 72/67/72
+f 79/73/79 73/74/73 76/75/76 80/76/80
+f 74/77/74 78/78/78 77/79/77 75/80/75
+f 78/78/78 74/77/74 73/74/73 79/73/79
+f 75/80/75 77/79/77 80/76/80 76/75/76
+f 88/81/88 87/82/87 83/83/83 84/84/84
+f 81/85/81 86/86/86 85/87/85 82/88/82
+f 86/86/86 81/85/81 87/82/87 88/81/88
+f 82/88/82 85/87/85 84/84/84 83/83/83
+f 60/57/60 73/74/73 74/77/74 64/62/64
+f 64/62/64 74/77/74 75/80/75 81/85/81
+f 64/62/64 81/85/81 82/88/82 63/63/63
+f 81/85/81 75/80/75 76/75/76 87/82/87
+f 63/63/63 82/88/82 83/83/83 59/60/59
+f 83/83/83 69/72/69 59/60/59
+f 72/67/72 59/60/59 69/72/69
+f 59/60/59 72/67/72 71/66/71 60/57/60
+f 69/72/69 83/83/83 87/82/87 70/69/70
+f 87/82/87 76/75/76 70/69/70
+f 73/74/73 60/57/60 76/75/76
+f 60/57/60 71/66/71 70/69/70 76/75/76
+f 58/58/58 67/65/67 68/68/68 57/59/57
+f 58/58/58 80/76/80 66/70/66 67/65/67
+f 79/73/79 80/76/80 58/58/58
+f 58/58/58 62/61/62 78/78/78 79/73/79
+f 86/86/86 77/79/77 78/78/78 62/61/62
+f 61/64/61 85/87/85 86/86/86 62/61/62
+f 77/79/77 86/86/86 88/81/88 80/76/80
+f 88/81/88 84/84/84 65/71/65 66/70/66
+f 88/81/88 66/70/66 80/76/80
+f 65/71/65 57/59/57 68/68/68
+f 85/87/85 61/64/61 57/59/57 84/84/84
+f 84/84/84 57/59/57 65/71/65
+v -14.690150 -2.438636 -3.546326
+v -10.279407 -2.438636 0.585510
+v -14.690150 -0.840940 -3.546326
+v -10.279407 -0.840940 0.585510
+v -16.169479 -2.438636 -1.967133
+v -11.758737 -2.438636 2.164704
+v -16.169479 -0.840940 -1.967133
+v -11.758737 -0.840940 2.164704
+v -13.380321 -1.115499 -4.944578
+v -8.969601 -1.115499 -0.812760
+v -13.380321 0.482185 -4.944578
+v -8.969601 0.482185 -0.812760
+v -14.859653 -1.115499 -3.365405
+v -10.448930 -1.115499 0.766433
+v -14.859653 0.482185 -3.365405
+v -10.448930 0.482185 0.766433
+v -12.070254 0.196937 -6.343090
+v -7.659532 0.196937 -2.211254
+v -12.070254 1.794623 -6.343090
+v -7.659532 1.794623 -2.211254
+v -13.549586 0.196937 -4.763898
+v -9.138861 0.196937 -0.632061
+v -13.549586 1.794623 -4.763898
+v -9.138861 1.794623 -0.632061
+v -10.764113 1.642653 -7.737381
+v -6.353393 1.642653 -3.605563
+v -10.764113 3.240357 -7.737381
+v -6.353393 3.240357 -3.605563
+v -12.243443 1.642653 -6.158208
+v -7.832721 1.642653 -2.026372
+v -12.243443 3.240357 -6.158208
+v -7.832721 3.240357 -2.026372
+v -9.441105 2.946721 -9.149704
+v -5.030383 2.946721 -5.017866
+v -9.441105 4.544406 -9.149704
+v -5.030383 4.544406 -5.017866
+v -10.920434 2.946721 -7.570510
+v -6.509713 2.946721 -3.438693
+v -10.920434 4.544406 -7.570510
+v -6.509713 4.544406 -3.438693
+v -8.122141 4.334330 -10.557693
+v -3.711419 4.334330 -6.425856
+v -8.122141 5.932015 -10.557693
+v -3.711419 5.932015 -6.425856
+v -9.601472 4.334330 -8.978500
+v -5.190750 4.334330 -4.846683
+v -9.601472 5.932015 -8.978500
+v -5.190750 5.932015 -4.846683
+v -6.848679 5.589522 -11.917114
+v -2.437950 5.589522 -7.785277
+v -6.848679 7.187207 -11.917114
+v -2.437950 7.187207 -7.785277
+v -8.328009 5.589522 -10.337922
+v -3.917289 5.589522 -6.206105
+v -8.328009 7.187207 -10.337922
+v -3.917289 7.187207 -6.206105
+vn -0.026644 -0.577351 -0.816061
+vn 0.816062 -0.577350 -0.026645
+vn -0.026644 0.577351 -0.816061
+vn 0.816062 0.577350 -0.026645
+vn -0.816062 -0.577350 0.026644
+vn 0.026644 -0.577351 0.816061
+vn -0.816062 0.577350 0.026644
+vn 0.026644 0.577351 0.816061
+vn -0.026641 -0.577349 -0.816063
+vn 0.816062 -0.577350 -0.026644
+vn -0.026641 0.577349 -0.816063
+vn 0.816062 0.577350 -0.026644
+vn -0.816061 -0.577351 0.026640
+vn 0.026643 -0.577351 0.816061
+vn -0.816061 0.577351 0.026640
+vn 0.026643 0.577351 0.816061
+vn -0.026643 -0.577351 -0.816061
+vn 0.816062 -0.577349 -0.026644
+vn -0.026643 0.577351 -0.816061
+vn 0.816062 0.577349 -0.026644
+vn -0.816062 -0.577350 0.026643
+vn 0.026644 -0.577351 0.816061
+vn -0.816062 0.577350 0.026643
+vn 0.026644 0.577351 0.816061
+vn -0.026642 -0.577349 -0.816062
+vn 0.816062 -0.577350 -0.026644
+vn -0.026642 0.577349 -0.816062
+vn 0.816062 0.577350 -0.026644
+vn -0.816062 -0.577351 0.026641
+vn 0.026643 -0.577351 0.816061
+vn -0.816062 0.577351 0.026641
+vn 0.026643 0.577351 0.816061
+vn -0.026643 -0.577351 -0.816061
+vn 0.816062 -0.577351 -0.026641
+vn -0.026643 0.577351 -0.816061
+vn 0.816062 0.577351 -0.026641
+vn -0.816062 -0.577350 0.026645
+vn 0.026642 -0.577349 0.816062
+vn -0.816062 0.577350 0.026645
+vn 0.026642 0.577349 0.816062
+vn -0.026643 -0.577351 -0.816061
+vn 0.816062 -0.577351 -0.026641
+vn -0.026643 0.577351 -0.816061
+vn 0.816062 0.577351 -0.026641
+vn -0.816062 -0.577350 0.026644
+vn 0.026642 -0.577349 0.816063
+vn -0.816062 0.577350 0.026644
+vn 0.026642 0.577349 0.816063
+vn -0.026644 -0.577351 -0.816061
+vn 0.816061 -0.577352 -0.026640
+vn -0.026644 0.577351 -0.816061
+vn 0.816061 0.577352 -0.026640
+vn -0.816062 -0.577350 0.026644
+vn 0.026640 -0.577349 0.816063
+vn -0.816062 0.577350 0.026644
+vn 0.026640 0.577349 0.816063
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 92/89/92 90/90/90 89/91/89 91/92/91
+f 94/93/94 96/94/96 95/95/95 93/96/93
+f 94/93/94 93/96/93 89/91/89 90/90/90
+f 96/94/96 94/93/94 90/90/90 92/89/92
+f 95/95/95 96/94/96 92/89/92 91/92/91
+f 93/96/93 95/95/95 91/92/91 89/91/89
+f 100/97/100 98/98/98 97/99/97 99/100/99
+f 102/101/102 104/102/104 103/103/103 101/104/101
+f 102/101/102 101/104/101 97/99/97 98/98/98
+f 104/102/104 102/101/102 98/98/98 100/97/100
+f 103/103/103 104/102/104 100/97/100 99/100/99
+f 101/104/101 103/103/103 99/100/99 97/99/97
+f 108/105/108 106/106/106 105/107/105 107/108/107
+f 110/109/110 112/110/112 111/111/111 109/112/109
+f 110/109/110 109/112/109 105/107/105 106/106/106
+f 112/110/112 110/109/110 106/106/106 108/105/108
+f 111/111/111 112/110/112 108/105/108 107/108/107
+f 109/112/109 111/111/111 107/108/107 105/107/105
+f 116/113/116 114/114/114 113/115/113 115/116/115
+f 118/117/118 120/118/120 119/119/119 117/120/117
+f 118/117/118 117/120/117 113/115/113 114/114/114
+f 120/118/120 118/117/118 114/114/114 116/113/116
+f 119/119/119 120/118/120 116/113/116 115/116/115
+f 117/120/117 119/119/119 115/116/115 113/115/113
+f 124/121/124 122/122/122 121/123/121 123/124/123
+f 126/125/126 128/126/128 127/127/127 125/128/125
+f 126/125/126 125/128/125 121/123/121 122/122/122
+f 128/126/128 126/125/126 122/122/122 124/121/124
+f 127/127/127 128/126/128 124/121/124 123/124/123
+f 125/128/125 127/127/127 123/124/123 121/123/121
+f 132/129/132 130/130/130 129/131/129 131/132/131
+f 134/133/134 136/134/136 135/135/135 133/136/133
+f 134/133/134 133/136/133 129/131/129 130/130/130
+f 136/134/136 134/133/134 130/130/130 132/129/132
+f 135/135/135 136/134/136 132/129/132 131/132/131
+f 133/136/133 135/135/135 131/132/131 129/131/129
+f 140/137/140 138/138/138 137/139/137 139/140/139
+f 142/141/142 144/142/144 143/143/143 141/144/141
+f 142/141/142 141/144/141 137/139/137 138/138/138
+f 144/142/144 142/141/142 138/138/138 140/137/140
+f 143/143/143 144/142/144 140/137/140 139/140/139
+f 141/144/141 143/143/143 139/140/139 137/139/137
+v -3.133902 -2.799647 -1.494773
+v 1.464393 -2.799647 -2.054976
+v -3.133902 10.274025 -1.494773
+v 1.464393 10.274025 -2.054976
+v -2.673638 -2.799647 2.283187
+v 1.924656 -2.799647 1.722984
+v -2.673638 10.274025 2.283187
+v 1.924656 10.274025 1.722984
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 148/145/148 146/146/146 145/147/145 147/148/147
+f 150/149/150 152/150/152 151/151/151 149/152/149
+f 150/149/150 149/152/149 145/147/145 146/146/146
+f 152/150/152 150/149/150 146/146/146 148/145/148
+f 151/151/151 152/150/152 148/145/148 147/148/147
+f 149/152/149 151/151/151 147/148/147 145/147/145
+v 7.996987 -2.799647 3.106367
+v 10.805010 -2.799647 2.764270
+v 7.996987 10.274025 3.106367
+v 10.805010 10.274025 2.764270
+v 8.308006 -2.799647 5.659298
+v 11.116030 -2.799647 5.317201
+v 8.308006 10.274025 5.659298
+v 11.116030 10.274025 5.317201
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 156/153/156 154/154/154 153/155/153 155/156/155
+f 158/157/158 160/158/160 159/159/159 157/160/157
+f 158/157/158 157/160/157 153/155/153 154/154/154
+f 160/158/160 158/157/158 154/154/154 156/153/156
+f 159/159/159 160/158/160 156/153/156 155/156/155
+f 157/160/157 159/159/159 155/156/155 153/155/153
+v -10.347970 -2.799647 6.769098
+v -7.539968 -2.799647 6.427003
+v -10.347970 10.274025 6.769098
+v -7.539968 10.274025 6.427003
+v -10.036951 -2.799647 9.322028
+v -7.228948 -2.799647 8.979934
+v -10.036951 10.274025 9.322028
+v -7.228948 10.274025 8.979934
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 164/161/164 162/162/162 161/163/161 163/164/163
+f 166/165/166 168/166/168 167/167/167 165/168/165
+f 166/165/166 165/168/165 161/163/161 162/162/162
+f 168/166/168 166/165/166 162/162/162 164/161/164
+f 167/167/167 168/166/168 164/161/164 163/164/163
+f 165/168/165 167/167/167 163/164/163 161/163/161
+v 7.004179 -2.799647 -5.042874
+v 9.812201 -2.799647 -5.384971
+v 7.004179 10.274025 -5.042874
+v 9.812201 10.274025 -5.384971
+v 7.315200 -2.799647 -2.489926
+v 10.123222 -2.799647 -2.832022
+v 7.315200 10.274025 -2.489926
+v 10.123222 10.274025 -2.832022
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503292 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503292 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 172/169/172 170/170/170 169/171/169 171/172/171
+f 174/173/174 176/174/176 175/175/175 173/176/173
+f 174/173/174 173/176/173 169/171/169 170/170/170
+f 176/174/176 174/173/174 170/170/170 172/169/172
+f 175/175/175 176/174/176 172/169/172 171/172/171
+f 173/176/173 175/175/175 171/172/171 169/171/169
+v 5.762568 -2.799647 -15.234345
+v 8.570591 -2.799647 -15.576443
+v 5.762568 10.274025 -15.234345
+v 8.570591 10.274025 -15.576443
+v 6.073587 -2.799647 -12.681417
+v 8.881610 -2.799647 -13.023514
+v 6.073587 10.274025 -12.681417
+v 8.881610 10.274025 -13.023514
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503292
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503292
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 180/177/180 178/178/178 177/179/177 179/180/179
+f 182/181/182 184/182/184 183/183/183 181/184/181
+f 182/181/182 181/184/181 177/179/177 178/178/178
+f 184/182/184 182/181/182 178/178/178 180/177/180
+f 183/183/183 184/182/184 180/177/180 179/180/179
+f 181/184/181 183/183/183 179/180/179 177/179/177
+v 14.876493 -2.799647 -3.645519
+v 17.684513 -2.799647 -3.987616
+v 14.876493 10.274025 -3.645519
+v 17.684513 10.274025 -3.987616
+v 15.187513 -2.799647 -1.092582
+v 17.995535 -2.799647 -1.434679
+v 15.187513 10.274025 -1.092582
+v 17.995535 10.274025 -1.434679
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642935
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642935
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 188/185/188 186/186/186 185/187/185 187/188/187
+f 190/189/190 192/190/192 191/191/191 189/192/189
+f 190/189/190 189/192/189 185/187/185 186/186/186
+f 192/190/192 190/189/190 186/186/186 188/185/188
+f 191/191/191 192/190/192 188/185/188 187/188/187
+f 189/192/189 191/191/191 187/188/187 185/187/185
+v 12.915435 -2.799647 -13.547013
+v 15.723457 -2.799647 -13.889110
+v 12.915435 10.274025 -13.547013
+v 15.723457 10.274025 -13.889110
+v 13.226457 -2.799647 -10.994064
+v 16.034479 -2.799647 -11.336161
+v 13.226457 10.274025 -10.994064
+v 16.034479 10.274025 -11.336161
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 196/193/196 194/194/194 193/195/193 195/196/195
+f 198/197/198 200/198/200 199/199/199 197/200/197
+f 198/197/198 197/200/197 193/195/193 194/194/194
+f 200/198/200 198/197/198 194/194/194 196/193/196
+f 199/199/199 200/198/200 196/193/196 195/196/195
+f 197/200/197 199/199/199 195/196/195 193/195/193
+v -22.922894 -2.556200 -16.330383
+v -18.324535 -2.556200 -16.890593
+v -22.922894 0.984404 -16.330383
+v -18.324535 0.984404 -16.890593
+v -22.462635 -2.556200 -12.552464
+v -17.864281 -2.556200 -13.112674
+v -22.462635 0.984404 -12.552464
+v -17.864281 0.984404 -13.112674
+vn -0.642934 -0.577350 -0.503291
+vn 0.503292 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503292 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503292
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503292
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 204/201/204 202/202/202 201/203/201 203/204/203
+f 206/205/206 208/206/208 207/207/207 205/208/205
+f 206/205/206 205/208/205 201/203/201 202/202/202
+f 208/206/208 206/205/206 202/202/202 204/201/204
+f 207/207/207 208/206/208 204/201/204 203/204/203
+f 205/208/205 207/207/207 203/204/203 201/203/201
+v -19.387363 -2.556200 -12.904255
+v -15.430549 -2.556200 -10.495531
+v -19.387363 0.984404 -12.904255
+v -15.430549 0.984404 -10.495531
+v -21.366352 -2.556200 -9.653341
+v -17.409561 -2.556200 -7.244633
+v -21.366352 0.984404 -9.653341
+v -17.409561 0.984404 -7.244633
+vn -0.192948 -0.577351 -0.793371
+vn 0.793371 -0.577351 -0.192945
+vn -0.192948 0.577351 -0.793371
+vn 0.793371 0.577351 -0.192945
+vn -0.793371 -0.577350 0.192949
+vn 0.192946 -0.577349 0.793372
+vn -0.793371 0.577350 0.192949
+vn 0.192946 0.577349 0.793372
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 212/209/212 210/210/210 209/211/209 211/212/211
+f 214/213/214 216/214/216 215/215/215 213/216/213
+f 214/213/214 213/216/213 209/211/209 210/210/210
+f 216/214/216 214/213/214 210/210/210 212/209/212
+f 215/215/215 216/214/216 212/209/212 211/212/211
+f 213/216/213 215/215/215 211/212/211 209/211/209
+v -21.119835 0.947249 -14.128448
+v -16.834282 0.947249 -15.886953
+v -21.119835 4.487851 -14.128448
+v -16.834282 4.487851 -15.886953
+v -19.675140 0.947249 -10.607425
+v -15.389552 0.947249 -12.365835
+v -19.675140 4.487851 -10.607425
+v -15.389552 4.487851 -12.365835
+vn -0.753303 -0.577346 -0.314970
+vn 0.314968 -0.577355 -0.753297
+vn -0.753303 0.577346 -0.314970
+vn 0.314968 0.577355 -0.753297
+vn -0.314977 -0.577351 0.753297
+vn 0.753297 -0.577350 0.314978
+vn -0.314977 0.577351 0.753297
+vn 0.753297 0.577350 0.314978
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 220/217/220 218/218/218 217/219/217 219/220/219
+f 222/221/222 224/222/224 223/223/223 221/224/221
+f 222/221/222 221/224/221 217/219/217 218/218/218
+f 224/222/224 222/221/222 218/218/218 220/217/220
+f 223/223/223 224/222/224 220/217/220 219/220/219
+f 221/224/221 223/223/223 219/220/219 217/219/217
+v 2.391826 -2.556200 -19.414434
+v 6.990122 -2.556200 -19.974638
+v 2.391826 0.984404 -19.414434
+v 6.990122 0.984404 -19.974638
+v 2.852083 -2.556200 -15.636515
+v 7.450379 -2.556200 -16.196718
+v 2.852083 0.984404 -15.636515
+v 7.450379 0.984404 -16.196718
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 228/225/228 226/226/226 225/227/225 227/228/227
+f 230/229/230 232/230/232 231/231/231 229/232/229
+f 230/229/230 229/232/229 225/227/225 226/226/226
+f 232/230/232 230/229/230 226/226/226 228/225/228
+f 231/231/231 232/230/232 228/225/228 227/228/227
+f 229/232/229 231/231/231 227/228/227 225/227/225
+v 13.906441 -2.556200 -15.886549
+v 18.504681 -2.556200 -16.446747
+v 13.906441 0.984404 -15.886549
+v 18.504681 0.984404 -16.446747
+v 14.366704 -2.556200 -12.108590
+v 18.964945 -2.556200 -12.668786
+v 14.366704 0.984404 -12.108590
+v 18.964945 0.984404 -12.668786
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 236/233/236 234/234/234 233/235/233 235/236/235
+f 238/237/238 240/238/240 239/239/239 237/240/237
+f 238/237/238 237/240/237 233/235/233 234/234/234
+f 240/238/240 238/237/238 234/234/234 236/233/236
+f 239/239/239 240/238/240 236/233/236 235/236/235
+f 237/240/237 239/239/239 235/236/235 233/235/233
+v -5.576640 7.173705 -12.009265
+v 13.232948 7.173705 -14.300806
+v -5.576640 8.236020 -12.009265
+v 13.232948 8.236020 -14.300806
+v -4.784395 7.173705 -5.506305
+v 14.025193 7.173705 -7.797847
+v -4.784395 8.236020 -5.506305
+v 14.025193 8.236020 -7.797847
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 244/241/244 242/242/242 241/243/241 243/244/243
+f 246/245/246 248/246/248 247/247/247 245/248/245
+f 246/245/246 245/248/245 241/243/241 242/242/242
+f 248/246/248 246/245/246 242/242/242 244/241/244
+f 247/247/247 248/246/248 244/241/244 243/244/243
+f 245/248/245 247/247/247 243/244/243 241/243/241
+v -24.029739 6.868023 2.073466
+v -5.220205 6.868023 -0.218069
+v -24.029739 7.930318 2.073466
+v -5.220205 7.930318 -0.218069
+v -23.237495 6.868023 8.576427
+v -4.427960 6.868023 6.284892
+v -23.237495 7.930318 8.576427
+v -4.427960 7.930318 6.284892
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 252/249/252 250/250/250 249/251/249 251/252/251
+f 254/253/254 256/254/256 255/255/255 253/256/253
+f 254/253/254 253/256/253 249/251/249 250/250/250
+f 256/254/256 254/253/254 250/250/250 252/249/252
+f 255/255/255 256/254/256 252/249/252 251/252/251
+f 253/256/253 255/255/255 251/252/251 249/251/249
+v -3.066964 14.079152 8.374180
+v 1.850904 7.163459 -8.568049
+v -2.958884 15.068172 8.001846
+v 1.959003 8.152479 -8.940387
+v 3.224372 14.079152 10.200409
+v 8.142260 7.163459 -6.741843
+v 3.332469 15.068172 9.828053
+v 8.250336 8.152479 -7.114196
+vn -0.763055 -0.326793 0.557632
+vn -0.463362 -0.748238 -0.474802
+vn -0.645557 0.748250 0.152899
+vn -0.345879 0.326811 -0.879524
+vn 0.345884 -0.326798 0.879527
+vn 0.645565 -0.748241 -0.152908
+vn 0.463358 0.748247 0.474790
+vn 0.763048 0.326807 -0.557634
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 260/257/260 258/258/258 257/259/257 259/260/259
+f 262/261/262 264/262/264 263/263/263 261/264/261
+f 262/261/262 261/264/261 257/259/257 258/258/258
+f 264/262/264 262/261/262 258/258/258 260/257/260
+f 263/263/263 264/262/264 260/257/260 259/260/259
+f 261/264/261 263/263/263 259/260/259 257/259/257
+v -6.644157 5.489818 -0.528142
+v -2.045856 5.489818 -1.088346
+v -6.644157 9.030419 -0.528142
+v -2.045856 9.030419 -1.088346
+v -6.183894 5.489818 3.249823
+v -1.585592 5.489818 2.689619
+v -6.183894 9.030419 3.249823
+v -1.585592 9.030419 2.689619
+vn -0.642934 -0.577350 -0.503291
+vn 0.503291 -0.577350 -0.642934
+vn -0.642934 0.577350 -0.503291
+vn 0.503291 0.577350 -0.642934
+vn -0.503291 -0.577350 0.642934
+vn 0.642934 -0.577350 0.503291
+vn -0.503291 0.577350 0.642934
+vn 0.642934 0.577350 0.503291
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 268/265/268 266/266/266 265/267/265 267/268/267
+f 270/269/270 272/270/272 271/271/271 269/272/269
+f 270/269/270 269/272/269 265/267/265 266/266/266
+f 272/270/272 270/269/270 266/266/266 268/265/268
+f 271/271/271 272/270/272 268/265/268 267/268/267
+f 269/272/269 271/271/271 267/268/267 265/267/265
+v -6.385265 -2.556200 11.803425
+v -3.546856 -2.556200 8.142606
+v -6.385265 0.984404 11.803425
+v -3.546856 0.984404 8.142606
+v -3.377541 -2.556200 14.135456
+v -0.539135 -2.556200 10.474639
+v -3.377541 0.984404 14.135456
+v -0.539135 0.984404 10.474639
+vn -0.810037 -0.577350 0.102502
+vn -0.102502 -0.577350 -0.810037
+vn -0.810037 0.577350 0.102502
+vn -0.102502 0.577350 -0.810037
+vn 0.102502 -0.577350 0.810037
+vn 0.810037 -0.577350 -0.102502
+vn 0.102502 0.577350 0.810037
+vn 0.810037 0.577350 -0.102502
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 276/273/276 274/274/274 273/275/273 275/276/275
+f 278/277/278 280/278/280 279/279/279 277/280/277
+f 278/277/278 277/280/277 273/275/273 274/274/274
+f 280/278/280 278/277/278 274/274/274 276/273/276
+f 279/279/279 280/278/280 276/273/276 275/276/275
+f 277/280/277 279/279/279 275/276/275 273/275/273
+v 13.473137 2.100612 23.352911
+v 13.473137 4.463260 23.352911
+v 13.949500 2.100612 25.847401
+v 13.949500 4.463260 25.847401
+v 16.029657 2.104442 22.870707
+v 16.032919 4.467090 22.869925
+v 16.441402 4.467090 25.377504
+v 16.438084 2.104442 25.378296
+v 15.876395 -1.229438 21.959049
+v 20.448454 -1.235113 21.214510
+v 15.828266 11.838176 21.563995
+v 20.400303 11.832507 20.819263
+v 16.488071 -1.113641 25.713701
+v 21.060127 -1.119316 24.969160
+v 16.439941 11.953967 25.318645
+v 21.011976 11.948298 24.573915
+v 15.842556 8.721443 21.663544
+v 15.838550 9.811758 21.630657
+v 16.452887 9.204490 25.407169
+v 16.456894 8.114195 25.440060
+v 20.010408 9.286901 20.967091
+v 19.868492 10.358484 20.957176
+v 20.482813 9.751219 24.733696
+v 20.624725 8.679634 24.743608
+v 4.861748 -1.215768 23.753183
+v 9.433783 -1.221443 23.008457
+v 4.813596 11.851851 23.357937
+v 9.385630 11.846182 22.613211
+v 5.473380 -1.099970 27.507647
+v 10.045456 -1.105645 26.763109
+v 5.425251 11.967642 27.112595
+v 9.997305 11.961973 26.367865
+v 9.399155 8.938145 22.706486
+v 9.403185 7.847831 22.739567
+v 10.017523 7.240564 26.516081
+v 10.013493 8.330879 26.483002
+v 5.075011 8.351486 23.429117
+v 5.216946 7.279902 23.439030
+v 5.831264 6.672635 27.215549
+v 5.689349 7.744239 27.205633
+v 3.801822 8.678734 14.739783
+v 18.655296 10.626419 12.636736
+v 3.691645 9.718966 14.924976
+v 18.545118 11.666653 12.821929
+v 6.285872 6.223238 30.010189
+v 21.139345 8.170923 27.907164
+v 6.175710 7.263470 30.195515
+v 21.029186 9.211155 28.092489
+vn -0.674105 -0.578078 -0.459792
+vn -0.675137 0.577488 -0.459019
+vn -0.459175 -0.577157 0.675313
+vn -0.460414 0.576637 0.674915
+vn -0.874537 -0.404130 -0.268073
+vn -0.874058 0.405652 -0.267335
+vn -0.736228 0.412457 0.536514
+vn -0.736489 -0.410874 0.537370
+vn -0.869849 -0.419786 -0.259117
+vn 0.479020 -0.595811 -0.644631
+vn -0.665152 0.559481 -0.494525
+vn 0.475166 0.558302 -0.680086
+vn -0.738901 -0.394194 0.546477
+vn 0.664916 -0.559911 0.494354
+vn -0.479184 0.595394 0.644895
+vn 0.660295 0.594271 0.459187
+vn -0.653723 -0.674107 -0.343839
+vn -0.446641 0.889899 -0.092693
+vn -0.383476 0.738255 0.554911
+vn -0.598376 -0.717022 0.357528
+vn 0.507392 -0.483889 -0.713025
+vn 0.446897 0.670317 -0.592417
+vn 0.561639 0.615923 0.552450
+vn 0.761640 -0.500653 0.411401
+vn -0.660367 -0.594167 -0.459217
+vn 0.479057 -0.595661 -0.644742
+vn -0.664879 0.559997 -0.494307
+vn 0.474968 0.558803 -0.679812
+vn -0.474997 -0.558661 0.679909
+vn 0.664777 -0.560175 0.494242
+vn -0.479133 0.595490 0.644844
+vn 0.660283 0.594268 0.459208
+vn 0.284472 0.885635 -0.367052
+vn 0.383391 -0.738379 -0.554805
+vn 0.563394 -0.802022 0.198364
+vn 0.248563 0.881811 0.400782
+vn -0.761595 0.500754 -0.411362
+vn -0.561702 -0.615829 -0.552491
+vn -0.446695 -0.670632 0.592213
+vn -0.507480 0.483523 0.713210
+vn -0.598564 -0.549179 -0.583201
+vn 0.535219 -0.400513 -0.743727
+vn -0.550276 0.810953 -0.198876
+vn 0.415456 0.730181 -0.542431
+vn -0.415433 -0.730223 0.542392
+vn 0.718303 -0.581562 0.381871
+vn -0.535235 0.400459 0.743745
+vn 0.380927 0.788075 0.483563
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 283/281/283 284/282/284 282/283/282 281/284/281
+f 285/285/285 281/284/281 282/283/282 286/286/286
+f 288/287/288 283/281/283 281/284/281 285/285/285
+f 284/282/284 287/288/287 286/286/286 282/283/282
+f 294/289/294 293/290/293 289/291/289 290/292/290
+f 296/293/296 294/289/294 290/292/290 292/294/292
+f 295/295/295 296/293/296 292/294/292 291/296/291
+f 292/294/292 290/292/290 289/291/289 297/297/297 301/298/301 302/299/302 298/300/298 291/296/291
+f 294/289/294 296/293/296 295/295/295 299/301/299 303/302/303 304/303/304 300/304/300 293/290/293
+f 299/301/299 295/295/295 291/296/291 298/300/298
+f 310/305/310 309/306/309 305/307/305 306/308/306
+f 311/309/311 312/310/312 308/311/308 307/312/307
+f 309/306/309 311/309/311 307/312/307 305/307/305
+f 306/308/306 305/307/305 307/312/307 308/311/308 313/313/313 317/314/317 318/315/318 314/316/314
+f 319/317/319 320/318/320 316/319/316 312/310/312 311/309/311 309/306/309 310/305/310 315/320/315
+f 312/310/312 316/319/316 313/313/313 308/311/308
+f 315/320/315 310/305/310 306/308/306 314/316/314
+f 324/321/324 322/322/322 321/323/321 323/324/323
+f 326/325/326 328/326/328 327/327/327 325/328/325
+f 325/328/325 327/327/327 320/318/320 319/317/319
+f 317/314/317 323/324/323 321/323/321 318/315/318
+f 328/326/328 326/325/326 304/303/304 303/302/303
+f 301/298/301 322/322/322 324/321/324 302/299/302
+f 320/318/320 327/327/327 328/326/328 316/319/316
+f 316/319/316 328/326/328 303/302/303 299/301/299
+f 298/300/298 313/313/313 316/319/316 299/301/299
+f 324/321/324 323/324/323 298/300/298 302/299/302
+f 298/300/298 323/324/323 317/314/317 313/313/313
+f 297/297/297 314/316/314 318/315/318 321/323/321 322/322/322 301/298/301
+f 314/316/314 297/297/297 300/304/300 315/320/315
+f 319/317/319 315/320/315 300/304/300 304/303/304 326/325/326 325/328/325
+f 288/287/288 293/290/293 300/304/300 287/288/287
+f 293/290/293 288/287/288 285/285/285 289/291/289
+f 289/291/289 285/285/285 286/286/286 297/297/297
+f 297/297/297 286/286/286 287/288/287 300/304/300
+f 283/281/283 288/287/288 287/288/287 284/282/284
+v 4.061719 12.278974 11.206284
+v 4.061719 15.240368 11.206284
+v 3.714470 12.278974 13.660270
+v 3.714470 15.240368 13.660270
+v 2.186756 12.278974 15.611854
+v 2.186756 15.240368 15.611854
+v -0.112078 12.278974 16.538113
+v -0.112078 15.240368 16.538113
+v -2.566060 12.278974 16.190882
+v -2.566060 15.240368 16.190882
+v -4.517662 12.278974 14.663177
+v -4.517662 15.240368 14.663177
+v -5.443921 12.278974 12.364341
+v -5.443921 15.240368 12.364341
+v -5.096690 12.278974 9.910357
+v -5.096690 15.240368 9.910357
+v -3.568967 12.278974 7.958751
+v -3.568967 15.240368 7.958751
+v -1.270133 12.278974 7.032493
+v -1.270133 15.240368 7.032493
+v 1.183848 12.278974 7.379724
+v 1.183848 15.240368 7.379724
+v 3.135441 12.278974 8.907449
+v 3.135441 15.240368 8.907449
+vn 0.881556 -0.459701 -0.107399
+vn 0.881556 0.459701 -0.107399
+vn 0.817148 -0.459701 0.347770
+vn 0.817148 0.459701 0.347770
+vn 0.533785 -0.459701 0.709752
+vn 0.533785 0.459701 0.709752
+vn 0.107399 -0.459700 0.881556
+vn 0.107399 0.459700 0.881556
+vn -0.347764 -0.459701 0.817151
+vn -0.347764 0.459701 0.817151
+vn -0.709750 -0.459701 0.533788
+vn -0.709750 0.459701 0.533788
+vn -0.881556 -0.459700 0.107399
+vn -0.881556 0.459700 0.107399
+vn -0.817150 -0.459701 -0.347766
+vn -0.817150 0.459701 -0.347766
+vn -0.533786 -0.459701 -0.709751
+vn -0.533786 0.459701 -0.709751
+vn -0.107398 -0.459700 -0.881556
+vn -0.107398 0.459700 -0.881556
+vn 0.347767 -0.459701 -0.817149
+vn 0.347767 0.459701 -0.817149
+vn 0.709751 -0.459701 -0.533788
+vn 0.709751 0.459701 -0.533788
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 331/329/331 329/330/329 330/331/330 332/332/332
+f 333/333/333 331/329/331 332/332/332 334/334/334
+f 335/335/335 333/333/333 334/334/334 336/336/336
+f 337/337/337 335/335/335 336/336/336 338/338/338
+f 339/339/339 337/337/337 338/338/338 340/340/340
+f 341/341/341 339/339/339 340/340/340 342/342/342
+f 343/343/343 341/341/341 342/342/342 344/344/344
+f 345/345/345 343/343/343 344/344/344 346/346/346
+f 347/347/347 345/345/345 346/346/346 348/348/348
+f 349/349/349 347/347/347 348/348/348 350/350/350
+f 351/351/351 349/349/349 350/350/350 352/352/352
+f 329/330/329 351/351/351 352/352/352 330/331/330
+f 352/352/352 350/350/350 348/348/348 346/346/346 344/344/344 342/342/342 340/340/340 338/338/338 336/336/336 334/334/334 332/332/332 330/331/330
+f 329/330/329 331/329/331 333/333/333 335/335/335 337/337/337 339/339/339 341/341/341 343/343/343 345/345/345 347/347/347 349/349/349 351/351/351
+v 28.405697 -3.409447 -5.443012
+v 31.444405 -3.297550 -5.813213
+v 34.483120 -2.968940 -6.183414
+v 37.521828 -2.565424 -6.553616
+v 40.560539 -2.398096 -6.923816
+v 43.599251 -2.565424 -7.294018
+v 46.637955 -3.060902 -7.664218
+v 49.676670 -3.737523 -8.034420
+v 52.715378 -4.412263 -8.404621
+v 55.754086 -4.771656 -8.774822
+v 58.792797 -4.869517 -9.145023
+v 28.405697 -2.438035 -5.443012
+v 31.444405 -2.320616 -5.813213
+v 34.483120 -1.985266 -6.183414
+v 37.521828 -1.576197 -6.553616
+v 40.560539 -1.407172 -6.923816
+v 43.599251 -1.576197 -7.294018
+v 46.637955 -2.077228 -7.664218
+v 49.676670 -2.769071 -8.034420
+v 52.715378 -3.449503 -8.404621
+v 55.754086 -3.811076 -8.774822
+v 58.792797 -3.906463 -9.145023
+v 28.775898 -3.356195 -2.404303
+v 31.814606 -2.968940 -2.774504
+v 34.853321 -2.195561 -3.144706
+v 37.892029 -1.397891 -3.514907
+v 40.930740 -1.104276 -3.885108
+v 43.969452 -1.397891 -4.255310
+v 47.008156 -2.265358 -4.625510
+v 50.046871 -3.336131 -4.995712
+v 53.085579 -4.231285 -5.365912
+v 56.124287 -4.658715 -5.736114
+v 59.162998 -4.771657 -6.106315
+v 59.162998 -3.811076 -6.106315
+v 56.124287 -3.698599 -5.736114
+v 53.085579 -3.269352 -5.365912
+v 50.046871 -2.352459 -4.995712
+v 47.008156 -1.248837 -4.625510
+v 43.969452 -0.404662 -4.255310
+v 40.930740 -0.112976 -3.885108
+v 37.892029 -0.404662 -3.514907
+v 34.853321 -1.181921 -3.144706
+v 31.814606 -1.985266 -2.774504
+v 28.775898 -2.384776 -2.404303
+v 29.146099 -3.255616 0.634407
+v 32.184807 -2.565424 0.264205
+v 35.223522 -1.397891 -0.105996
+v 38.262230 -0.537756 -0.476197
+v 41.300941 -0.278140 -0.846398
+v 44.339653 -0.537756 -1.216600
+v 47.378357 -1.421056 -1.586800
+v 50.417072 -2.762392 -1.957002
+v 53.455780 -3.792841 -2.327203
+v 56.494488 -4.284532 -2.697404
+v 59.533199 -4.412263 -3.067605
+v 59.533199 -3.449503 -3.067605
+v 56.494488 -3.322612 -2.697404
+v 53.455780 -2.824036 -2.327203
+v 50.417072 -1.767833 -1.957002
+v 47.378357 -0.423386 -1.586800
+v 44.339653 0.459619 -1.216600
+v 41.300941 0.718170 -0.846398
+v 38.262230 0.459619 -0.476197
+v 35.223522 -0.404662 -0.105996
+v 32.184807 -1.576197 0.264205
+v 29.146099 -2.277591 0.634407
+v 29.516300 -3.198068 3.673115
+v 32.555008 -2.398096 3.302914
+v 35.593723 -1.104276 2.932712
+v 38.632431 -0.278140 2.562511
+v 41.671143 -0.053185 2.192311
+v 44.709854 -0.278140 1.822109
+v 47.748558 -1.104276 1.451908
+v 50.787273 -2.449177 1.081707
+v 53.825981 -3.395026 0.711506
+v 56.864689 -3.776620 0.341305
+v 59.903400 -3.849413 -0.028896
+v 59.903400 -2.886490 -0.028896
+v 56.864689 -2.812960 0.341305
+v 53.825981 -2.415678 0.711506
+v 50.787273 -1.455851 1.081707
+v 47.748558 -0.112976 1.451908
+v 44.709854 0.718170 1.822109
+v 41.671143 0.937435 2.192311
+v 38.632431 0.718170 2.562511
+v 35.593723 -0.112976 2.932712
+v 32.555008 -1.407172 3.302914
+v 29.516300 -2.218710 3.673115
+v 29.886501 -3.255616 6.711825
+v 32.925209 -2.565424 6.341624
+v 35.963924 -1.397891 5.971423
+v 39.002632 -0.537756 5.601222
+v 42.041344 -0.278140 5.231021
+v 45.080055 -0.537756 4.860819
+v 48.118759 -1.397891 4.490619
+v 51.157475 -2.565424 4.120417
+v 54.196182 -3.278783 3.750216
+v 57.234890 -3.476367 3.380015
+v 60.273602 -3.501402 3.009814
+v 60.273602 -2.533448 3.009814
+v 57.234890 -2.507833 3.380015
+v 54.196182 -2.300760 3.750216
+v 51.157475 -1.576197 4.120417
+v 48.118759 -0.404662 4.490619
+v 45.080055 0.459619 4.860819
+v 42.041344 0.718170 5.231021
+v 39.002632 0.459619 5.601222
+v 35.963924 -0.404662 5.971423
+v 32.925209 -1.576197 6.341624
+v 29.886501 -2.277591 6.711825
+v 30.256702 -3.356195 9.750534
+v 33.295410 -2.968940 9.380333
+v 36.334126 -2.195561 9.010131
+v 39.372833 -1.397891 8.639931
+v 42.411545 -1.104277 8.269730
+v 45.450256 -1.397891 7.899528
+v 48.488960 -2.195561 7.529327
+v 51.527676 -2.968940 7.159126
+v 54.566383 -3.356195 6.788925
+v 57.605091 -3.409447 6.418724
+v 60.643803 -3.409447 6.048523
+v 60.643803 -2.438035 6.048523
+v 57.605091 -2.438035 6.418724
+v 54.566383 -2.384776 6.788925
+v 51.527676 -1.985266 7.159126
+v 48.488960 -1.181921 7.529327
+v 45.450256 -0.404662 7.899528
+v 42.411545 -0.112976 8.269730
+v 39.372833 -0.404662 8.639931
+v 36.334126 -1.181921 9.010131
+v 33.295410 -1.985266 9.380333
+v 30.256702 -2.384776 9.750534
+v 30.626904 -3.409447 12.789245
+v 33.665611 -3.293368 12.419044
+v 36.704327 -2.968940 12.048842
+v 39.743034 -2.565424 11.678641
+v 42.781746 -2.398096 11.308440
+v 45.820457 -2.565424 10.938239
+v 48.859161 -2.968940 10.568038
+v 51.897877 -3.297550 10.197837
+v 54.936584 -3.350677 9.827636
+v 57.975292 -3.239676 9.457435
+v 61.014004 -3.176165 9.087234
+v 61.014004 -2.195984 9.087234
+v 57.975292 -2.260967 9.457435
+v 54.936584 -2.379257 9.827636
+v 51.897877 -2.320616 10.197837
+v 48.859161 -1.985266 10.568038
+v 45.820457 -1.576197 10.938239
+v 42.781746 -1.407172 11.308440
+v 39.743034 -1.576197 11.678641
+v 36.704327 -1.985266 12.048842
+v 33.665611 -2.314560 12.419044
+v 30.626904 -2.438035 12.789245
+v 30.997105 -3.044981 15.827954
+v 34.035812 -2.785754 15.457753
+v 37.074528 -2.991724 15.087551
+v 40.113235 -3.219331 14.717350
+v 43.151947 -3.198068 14.347149
+v 46.190659 -3.255616 13.976948
+v 49.229362 -3.356195 13.606747
+v 52.268078 -3.285955 13.236546
+v 55.306786 -2.923296 12.866344
+v 58.345493 -2.477970 12.496143
+v 61.384205 -2.293303 12.125942
+v 61.384205 -1.300357 12.125942
+v 58.345493 -1.486896 12.496143
+v 55.306786 -1.938351 12.866344
+v 52.268078 -2.308449 13.236546
+v 49.229362 -2.384776 13.606747
+v 46.190659 -2.277591 13.976948
+v 43.151947 -2.218710 14.347149
+v 40.113235 -2.242946 14.717350
+v 37.074528 -2.000064 15.087551
+v 34.035812 -1.786767 15.457753
+v 30.997105 -2.053322 15.827954
+v 31.367306 -1.861028 18.866663
+v 34.406013 -1.262635 18.496462
+v 37.444729 -1.861028 18.126261
+v 40.483437 -3.044981 17.756060
+v 43.522148 -3.409447 17.385859
+v 46.560860 -3.409447 17.015657
+v 49.599564 -3.350677 16.645456
+v 52.638279 -2.923296 16.275255
+v 55.676987 -2.069782 15.905054
+v 58.715694 -1.189459 15.534853
+v 61.754406 -0.865421 15.164652
+v 61.754406 0.127940 15.164652
+v 58.715694 -0.193970 15.534853
+v 55.676987 -1.051766 15.905054
+v 52.638279 -1.938351 16.275255
+v 49.599564 -2.379257 16.645456
+v 46.560860 -2.438035 17.015657
+v 43.522148 -2.438035 17.385859
+v 40.483437 -2.053322 17.756060
+v 37.444729 -0.836300 18.126261
+v 34.406013 -0.228566 18.496462
+v 31.367306 -0.836300 18.866663
+v 31.737507 -1.262635 21.905371
+v 34.776215 -0.734991 21.535170
+v 37.814930 -1.262635 21.164968
+v 40.853638 -2.785754 20.794767
+v 43.892349 -3.405265 20.424566
+v 46.931061 -3.409447 20.054365
+v 49.969765 -3.239676 19.684164
+v 53.008480 -2.477970 19.313963
+v 56.047188 -1.189459 18.943762
+v 59.085896 -0.240200 18.573561
+v 62.124607 0.046317 18.203360
+v 62.124607 1.045207 18.203360
+v 59.085896 0.759866 18.573561
+v 56.047188 -0.193970 18.943762
+v 53.008480 -1.486896 19.313963
+v 49.969765 -2.260967 19.684164
+v 46.931061 -2.438035 20.054365
+v 43.892349 -2.431980 20.424566
+v 40.853638 -1.786767 20.794767
+v 37.814930 -0.228566 21.164968
+v 34.776215 0.279237 21.535170
+v 31.737507 -0.228566 21.905371
+v 32.107708 -1.861028 24.944080
+v 35.146416 -1.262635 24.573879
+v 38.185131 -1.861028 24.203678
+v 41.223839 -3.044981 23.833477
+v 44.262550 -3.409447 23.463276
+v 47.301262 -3.409447 23.093075
+v 50.339966 -3.176165 22.722874
+v 53.378681 -2.293303 22.352673
+v 56.417389 -0.865421 21.982471
+v 59.456097 0.046317 21.612270
+v 62.494808 0.294580 21.242069
+v 32.107708 -0.836300 24.944080
+v 35.146416 -0.228566 24.573879
+v 38.185131 -0.836300 24.203678
+v 41.223839 -2.053322 23.833477
+v 44.262550 -2.438035 23.463276
+v 47.301262 -2.438035 23.093075
+v 50.339966 -2.195984 22.722874
+v 53.378681 -1.300357 22.352673
+v 56.417389 0.127940 21.982471
+v 59.456097 1.045207 21.612270
+v 62.494808 1.287191 21.242069
+vn -0.599026 -0.602062 -0.527910
+vn 0.050826 -0.714581 -0.697704
+vn 0.110539 -0.740282 -0.663147
+vn 0.068305 -0.791033 -0.607948
+vn -0.067464 -0.826818 -0.558408
+vn -0.220364 -0.810985 -0.541980
+vn -0.312818 -0.765434 -0.562366
+vn -0.310167 -0.731317 -0.607431
+vn -0.235293 -0.721301 -0.651431
+vn -0.146453 -0.720505 -0.677808
+vn 0.497112 -0.591272 -0.635041
+vn -0.673059 0.528950 -0.516918
+vn -0.214383 0.627951 -0.748143
+vn -0.244448 0.573497 -0.781886
+vn -0.195686 0.552643 -0.810119
+vn -0.099946 0.558569 -0.823415
+vn 0.008650 0.577861 -0.816090
+vn 0.097853 0.605520 -0.789792
+vn 0.119938 0.639695 -0.759213
+vn 0.058512 0.673582 -0.736793
+vn -0.026391 0.691911 -0.721500
+vn 0.510733 0.564070 -0.648828
+vn -0.636587 -0.765097 0.096869
+vn 0.243364 -0.969112 0.039942
+vn 0.296439 -0.944376 0.142401
+vn 0.202625 -0.945466 0.255022
+vn 0.038919 -0.947516 0.317330
+vn -0.134932 -0.932967 0.333716
+vn -0.273840 -0.911088 0.308108
+vn -0.300219 -0.924670 0.234209
+vn -0.206048 -0.966808 0.151086
+vn -0.082062 -0.991596 0.100012
+vn 0.695273 -0.718229 -0.027242
+vn 0.709541 0.690960 -0.138295
+vn 0.084344 0.992606 -0.087289
+vn 0.215679 0.969716 -0.114603
+vn 0.318789 0.933719 -0.162917
+vn 0.288834 0.927346 -0.237916
+vn 0.139049 0.942800 -0.302974
+vn -0.038532 0.947194 -0.318338
+vn -0.203287 0.933954 -0.293945
+vn -0.303199 0.922896 -0.237346
+vn -0.257204 0.954734 -0.149428
+vn -0.770621 0.637095 0.015922
+vn -0.611009 -0.785914 0.094909
+vn 0.309377 -0.950758 0.018605
+vn 0.330547 -0.939656 0.088237
+vn 0.190193 -0.969929 0.151870
+vn 0.020844 -0.984928 0.171703
+vn -0.150180 -0.970266 0.189817
+vn -0.308041 -0.927864 0.210190
+vn -0.329400 -0.923913 0.194626
+vn -0.204784 -0.965387 0.161530
+vn -0.068907 -0.986607 0.147847
+vn 0.702926 -0.711047 0.017523
+vn 0.700835 0.687586 -0.189883
+vn 0.069750 0.985420 -0.155188
+vn 0.209274 0.964095 -0.163481
+vn 0.335981 0.925650 -0.174037
+vn 0.311741 0.930325 -0.193166
+vn 0.149069 0.969065 -0.196701
+vn -0.021008 0.984904 -0.171823
+vn -0.189856 0.970498 -0.148620
+vn -0.334154 0.933955 -0.126767
+vn -0.317712 0.944096 -0.087989
+vn -0.788491 0.613893 0.037649
+vn -0.613516 -0.786143 0.074682
+vn 0.303138 -0.952222 -0.037151
+vn 0.317442 -0.947484 -0.038790
+vn 0.171703 -0.984929 -0.020833
+vn -0.000031 -1.000000 0.000039
+vn -0.171685 -0.984928 0.020991
+vn -0.320490 -0.946391 0.040385
+vn -0.316495 -0.946991 0.055123
+vn -0.169818 -0.982385 0.077982
+vn -0.041434 -0.992752 0.112813
+vn 0.707821 -0.706351 0.007588
+vn 0.695169 0.693527 -0.189104
+vn 0.039320 0.988596 -0.145367
+vn 0.166981 0.977636 -0.127844
+vn 0.313375 0.945008 -0.093569
+vn 0.319572 0.945981 -0.054709
+vn 0.171636 0.984904 -0.022475
+vn -0.000043 1.000000 -0.000034
+vn -0.171841 0.984904 0.020860
+vn -0.318278 0.947194 0.039025
+vn -0.305022 0.951604 0.037580
+vn -0.781929 0.616023 0.095404
+vn -0.641295 -0.765086 0.058177
+vn 0.228429 -0.969783 -0.085684
+vn 0.261573 -0.951515 -0.161862
+vn 0.151503 -0.969324 -0.193539
+vn -0.021001 -0.984929 -0.171682
+vn -0.193092 -0.969929 -0.148167
+vn -0.296212 -0.945466 -0.135469
+vn -0.250966 -0.963185 -0.096388
+vn -0.112666 -0.993312 -0.025260
+vn -0.018339 -0.999200 0.035536
+vn 0.705864 -0.707020 -0.043341
+vn 0.697463 0.703445 -0.136786
+vn 0.014976 0.997486 -0.069265
+vn 0.106696 0.993220 -0.046145
+vn 0.246332 0.969140 0.009378
+vn 0.293675 0.951714 0.089414
+vn 0.192035 0.969807 0.150325
+vn 0.020851 0.984903 0.171847
+vn -0.150426 0.970143 0.190246
+vn -0.256521 0.945340 0.201317
+vn -0.222547 0.962215 0.156895
+vn -0.754377 0.638420 0.152757
+vn -0.675241 -0.734843 0.063685
+vn 0.118792 -0.989218 -0.085657
+vn 0.157385 -0.966855 -0.201053
+vn 0.094325 -0.951515 -0.292784
+vn -0.038560 -0.947484 -0.317470
+vn -0.165018 -0.939656 -0.299694
+vn -0.209409 -0.944376 -0.253579
+vn -0.142467 -0.975746 -0.166202
+vn -0.038468 -0.997398 -0.060972
+vn 0.011450 -0.999861 0.012149
+vn 0.708895 -0.702842 -0.059000
+vn 0.693587 0.709641 -0.123879
+vn -0.016267 0.998809 -0.046007
+vn 0.030011 0.999395 -0.017564
+vn 0.134792 0.989619 0.049859
+vn 0.203306 0.966094 0.159148
+vn 0.160941 0.951269 0.263029
+vn 0.038904 0.947163 0.318386
+vn -0.086977 0.939483 0.331370
+vn -0.143412 0.943787 0.297824
+vn -0.107136 0.974403 0.197637
+vn -0.721435 0.671438 0.169419
+vn -0.676722 -0.726492 0.119404
+vn 0.044928 -0.998382 0.034851
+vn 0.017094 -0.998543 -0.051192
+vn 0.002788 -0.978146 -0.207902
+vn -0.039266 -0.953079 -0.300165
+vn -0.092341 -0.950757 -0.295861
+vn -0.087286 -0.969736 -0.228021
+vn -0.009467 -0.992899 -0.118585
+vn 0.070787 -0.997491 0.000420
+vn 0.077588 -0.991887 0.100702
+vn 0.729717 -0.683588 0.014874
+vn 0.674057 0.707296 -0.213024
+vn -0.084884 0.983981 -0.156769
+vn -0.083368 0.991253 -0.102311
+vn -0.005273 0.999943 -0.009270
+vn 0.076243 0.990585 0.113699
+vn 0.087305 0.968659 0.232545
+vn 0.040110 0.951586 0.304755
+vn 0.010646 0.952089 0.305636
+vn 0.004997 0.977760 0.209667
+vn -0.034190 0.997958 0.053954
+vn -0.729579 0.680585 0.067219
+vn -0.635657 -0.727218 0.259024
+vn 0.039333 -0.961732 0.271154
+vn -0.137465 -0.957450 0.253757
+vn -0.129258 -0.989870 0.058725
+vn -0.046866 -0.992288 -0.114753
+vn -0.025705 -0.988873 -0.146527
+vn 0.025003 -0.994393 -0.102744
+vn 0.136203 -0.990513 -0.018254
+vn 0.214018 -0.971281 0.103967
+vn 0.172436 -0.955708 0.238511
+vn 0.755635 -0.643259 0.123425
+vn 0.644344 0.685570 -0.338843
+vn -0.176109 0.933268 -0.313044
+vn -0.225667 0.945862 -0.233280
+vn -0.154735 0.981077 -0.116383
+vn -0.037547 0.999278 0.005775
+vn 0.020768 0.994831 0.099400
+vn 0.052134 0.987864 0.146311
+vn 0.157049 0.982054 0.104429
+vn 0.172396 0.982522 -0.070214
+vn -0.031789 0.969133 -0.244480
+vn -0.774993 0.621770 -0.113085
+vn -0.614110 -0.734644 0.288386
+vn 0.037162 -0.955783 0.291717
+vn -0.247938 -0.917069 0.312269
+vn -0.256380 -0.946881 0.194126
+vn -0.076923 -0.996657 0.027514
+vn 0.014613 -0.999399 -0.031445
+vn 0.112773 -0.993474 -0.017085
+vn 0.265926 -0.963190 0.039342
+vn 0.323267 -0.933484 0.155265
+vn 0.220989 -0.934749 0.278224
+vn 0.762125 -0.632263 0.139315
+vn 0.638094 0.689687 -0.342297
+vn -0.221099 0.921316 -0.319831
+vn -0.329283 0.908367 -0.257764
+vn -0.280638 0.945862 -0.163057
+vn -0.124206 0.990379 -0.061016
+vn -0.018246 0.999820 0.005245
+vn 0.086584 0.996041 0.020138
+vn 0.286958 0.956545 -0.051730
+vn 0.272502 0.939816 -0.206126
+vn -0.033691 0.955810 -0.292048
+vn -0.786435 0.608575 -0.105618
+vn -0.643540 -0.761356 0.078699
+vn -0.000319 -1.000000 0.000408
+vn -0.292106 -0.955783 0.033964
+vn -0.280714 -0.959253 0.032134
+vn -0.079081 -0.996824 0.009362
+vn 0.032279 -0.999471 -0.003932
+vn 0.163733 -0.986486 -0.006001
+vn 0.337538 -0.941095 0.020224
+vn 0.360082 -0.927949 0.096185
+vn 0.208215 -0.963843 0.166293
+vn 0.748825 -0.661451 0.041746
+vn 0.657610 0.721687 -0.216142
+vn -0.207816 0.964545 -0.162679
+vn -0.363560 0.921316 -0.137843
+vn -0.346170 0.933268 -0.095798
+vn -0.172563 0.983981 -0.044762
+vn -0.035218 0.999322 -0.010758
+vn 0.082937 0.996504 -0.010097
+vn 0.288978 0.956719 -0.034363
+vn 0.296553 0.954354 -0.035559
+vn -0.000565 1.000000 -0.000442
+vn -0.765765 0.636361 0.092994
+vn -0.472038 -0.643086 0.603009
+vn 0.078113 -0.761356 0.643611
+vn -0.132507 -0.734644 0.665387
+vn -0.098830 -0.727218 0.679254
+vn 0.041474 -0.719840 0.692900
+vn 0.112202 -0.706581 0.698680
+vn 0.209777 -0.690552 0.692194
+vn 0.328519 -0.648610 0.686572
+vn 0.327924 -0.633767 0.700575
+vn 0.212216 -0.658508 0.722033
+vn 0.658530 -0.542480 0.521588
+vn -0.541870 0.502924 0.673383
+vn 0.093119 0.634566 0.767239
+vn 0.276022 0.628194 0.727451
+vn 0.257877 0.667479 0.698549
+vn 0.129422 0.704689 0.697613
+vn 0.057278 0.709991 0.701878
+vn -0.044956 0.707296 0.705487
+vn -0.174229 0.685570 0.706851
+vn -0.179082 0.689687 0.701613
+vn -0.051932 0.721687 0.690268
+vn 0.626124 0.606414 0.490133
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Cube
+usemtl Default
+f 365/353/365 354/354/354 353/355/353 364/356/364
+f 366/357/366 355/358/355 354/354/354 365/353/365
+f 367/359/367 356/360/356 355/358/355 366/357/366
+f 368/361/368 357/362/357 356/360/356 367/359/367
+f 369/363/369 358/364/358 357/362/357 368/361/368
+f 370/365/370 359/366/359 358/364/358 369/363/369
+f 371/367/371 360/368/360 359/366/359 370/365/370
+f 372/369/372 361/370/361 360/368/360 371/367/371
+f 373/371/373 362/372/362 361/370/361 372/369/372
+f 374/373/374 363/374/363 362/372/362 373/371/373
+f 376/375/376 375/376/375 353/355/353 354/354/354
+f 377/377/377 376/375/376 354/354/354 355/358/355
+f 378/378/378 377/377/377 355/358/355 356/360/356
+f 379/379/379 378/378/378 356/360/356 357/362/357
+f 380/380/380 379/379/379 357/362/357 358/364/358
+f 381/381/381 380/380/380 358/364/358 359/366/359
+f 382/382/382 381/381/381 359/366/359 360/368/360
+f 383/383/383 382/382/382 360/368/360 361/370/361
+f 384/384/384 383/383/383 361/370/361 362/372/362
+f 385/385/385 384/384/384 362/372/362 363/374/363
+f 386/386/386 385/385/385 363/374/363 374/373/374
+f 387/387/387 386/386/386 374/373/374 373/371/373
+f 388/388/388 387/387/387 373/371/373 372/369/372
+f 389/389/389 388/388/388 372/369/372 371/367/371
+f 390/390/390 389/389/389 371/367/371 370/365/370
+f 391/391/391 390/390/390 370/365/370 369/363/369
+f 392/392/392 391/391/391 369/363/369 368/361/368
+f 393/393/393 392/392/392 368/361/368 367/359/367
+f 394/394/394 393/393/393 367/359/367 366/357/366
+f 395/395/395 394/394/394 366/357/366 365/353/365
+f 396/396/396 395/395/395 365/353/365 364/356/364
+f 375/376/375 396/396/396 364/356/364 353/355/353
+f 398/397/398 397/398/397 375/376/375 376/375/376
+f 399/399/399 398/397/398 376/375/376 377/377/377
+f 400/400/400 399/399/399 377/377/377 378/378/378
+f 401/401/401 400/400/400 378/378/378 379/379/379
+f 402/402/402 401/401/401 379/379/379 380/380/380
+f 403/403/403 402/402/402 380/380/380 381/381/381
+f 404/404/404 403/403/403 381/381/381 382/382/382
+f 405/405/405 404/404/404 382/382/382 383/383/383
+f 406/406/406 405/405/405 383/383/383 384/384/384
+f 407/407/407 406/406/406 384/384/384 385/385/385
+f 408/408/408 407/407/407 385/385/385 386/386/386
+f 409/409/409 408/408/408 386/386/386 387/387/387
+f 410/410/410 409/409/409 387/387/387 388/388/388
+f 411/411/411 410/410/410 388/388/388 389/389/389
+f 412/412/412 411/411/411 389/389/389 390/390/390
+f 413/413/413 412/412/412 390/390/390 391/391/391
+f 414/414/414 413/413/413 391/391/391 392/392/392
+f 415/415/415 414/414/414 392/392/392 393/393/393
+f 416/416/416 415/415/415 393/393/393 394/394/394
+f 417/417/417 416/416/416 394/394/394 395/395/395
+f 418/418/418 417/417/417 395/395/395 396/396/396
+f 397/398/397 418/418/418 396/396/396 375/376/375
+f 420/419/420 419/420/419 397/398/397 398/397/398
+f 421/421/421 420/419/420 398/397/398 399/399/399
+f 422/422/422 421/421/421 399/399/399 400/400/400
+f 423/423/423 422/422/422 400/400/400 401/401/401
+f 424/424/424 423/423/423 401/401/401 402/402/402
+f 425/425/425 424/424/424 402/402/402 403/403/403
+f 426/426/426 425/425/425 403/403/403 404/404/404
+f 427/427/427 426/426/426 404/404/404 405/405/405
+f 428/428/428 427/427/427 405/405/405 406/406/406
+f 429/429/429 428/428/428 406/406/406 407/407/407
+f 430/430/430 429/429/429 407/407/407 408/408/408
+f 431/431/431 430/430/430 408/408/408 409/409/409
+f 432/432/432 431/431/431 409/409/409 410/410/410
+f 433/433/433 432/432/432 410/410/410 411/411/411
+f 434/434/434 433/433/433 411/411/411 412/412/412
+f 435/435/435 434/434/434 412/412/412 413/413/413
+f 436/436/436 435/435/435 413/413/413 414/414/414
+f 437/437/437 436/436/436 414/414/414 415/415/415
+f 438/438/438 437/437/437 415/415/415 416/416/416
+f 439/439/439 438/438/438 416/416/416 417/417/417
+f 440/440/440 439/439/439 417/417/417 418/418/418
+f 419/420/419 440/440/440 418/418/418 397/398/397
+f 442/441/442 441/442/441 419/420/419 420/419/420
+f 443/443/443 442/441/442 420/419/420 421/421/421
+f 444/444/444 443/443/443 421/421/421 422/422/422
+f 445/445/445 444/444/444 422/422/422 423/423/423
+f 446/446/446 445/445/445 423/423/423 424/424/424
+f 447/447/447 446/446/446 424/424/424 425/425/425
+f 448/448/448 447/447/447 425/425/425 426/426/426
+f 449/449/449 448/448/448 426/426/426 427/427/427
+f 450/450/450 449/449/449 427/427/427 428/428/428
+f 451/451/451 450/450/450 428/428/428 429/429/429
+f 452/452/452 451/451/451 429/429/429 430/430/430
+f 453/453/453 452/452/452 430/430/430 431/431/431
+f 454/454/454 453/453/453 431/431/431 432/432/432
+f 455/455/455 454/454/454 432/432/432 433/433/433
+f 456/456/456 455/455/455 433/433/433 434/434/434
+f 457/457/457 456/456/456 434/434/434 435/435/435
+f 458/458/458 457/457/457 435/435/435 436/436/436
+f 459/459/459 458/458/458 436/436/436 437/437/437
+f 460/460/460 459/459/459 437/437/437 438/438/438
+f 461/461/461 460/460/460 438/438/438 439/439/439
+f 462/462/462 461/461/461 439/439/439 440/440/440
+f 441/442/441 462/462/462 440/440/440 419/420/419
+f 464/463/464 463/464/463 441/442/441 442/441/442
+f 465/465/465 464/463/464 442/441/442 443/443/443
+f 466/466/466 465/465/465 443/443/443 444/444/444
+f 467/467/467 466/466/466 444/444/444 445/445/445
+f 468/468/468 467/467/467 445/445/445 446/446/446
+f 469/469/469 468/468/468 446/446/446 447/447/447
+f 470/470/470 469/469/469 447/447/447 448/448/448
+f 471/471/471 470/470/470 448/448/448 449/449/449
+f 472/472/472 471/471/471 449/449/449 450/450/450
+f 473/473/473 472/472/472 450/450/450 451/451/451
+f 474/474/474 473/473/473 451/451/451 452/452/452
+f 475/475/475 474/474/474 452/452/452 453/453/453
+f 476/476/476 475/475/475 453/453/453 454/454/454
+f 477/477/477 476/476/476 454/454/454 455/455/455
+f 478/478/478 477/477/477 455/455/455 456/456/456
+f 479/479/479 478/478/478 456/456/456 457/457/457
+f 480/480/480 479/479/479 457/457/457 458/458/458
+f 481/481/481 480/480/480 458/458/458 459/459/459
+f 482/482/482 481/481/481 459/459/459 460/460/460
+f 483/483/483 482/482/482 460/460/460 461/461/461
+f 484/484/484 483/483/483 461/461/461 462/462/462
+f 463/464/463 484/484/484 462/462/462 441/442/441
+f 486/485/486 485/486/485 463/464/463 464/463/464
+f 487/487/487 486/485/486 464/463/464 465/465/465
+f 488/488/488 487/487/487 465/465/465 466/466/466
+f 489/489/489 488/488/488 466/466/466 467/467/467
+f 490/490/490 489/489/489 467/467/467 468/468/468
+f 491/491/491 490/490/490 468/468/468 469/469/469
+f 492/492/492 491/491/491 469/469/469 470/470/470
+f 493/493/493 492/492/492 470/470/470 471/471/471
+f 494/494/494 493/493/493 471/471/471 472/472/472
+f 495/495/495 494/494/494 472/472/472 473/473/473
+f 496/496/496 495/495/495 473/473/473 474/474/474
+f 497/497/497 496/496/496 474/474/474 475/475/475
+f 498/498/498 497/497/497 475/475/475 476/476/476
+f 499/499/499 498/498/498 476/476/476 477/477/477
+f 500/500/500 499/499/499 477/477/477 478/478/478
+f 501/501/501 500/500/500 478/478/478 479/479/479
+f 502/502/502 501/501/501 479/479/479 480/480/480
+f 503/503/503 502/502/502 480/480/480 481/481/481
+f 504/504/504 503/503/503 481/481/481 482/482/482
+f 505/505/505 504/504/504 482/482/482 483/483/483
+f 506/506/506 505/505/505 483/483/483 484/484/484
+f 485/486/485 506/506/506 484/484/484 463/464/463
+f 508/507/508 507/508/507 485/486/485 486/485/486
+f 509/509/509 508/507/508 486/485/486 487/487/487
+f 510/510/510 509/509/509 487/487/487 488/488/488
+f 511/511/511 510/510/510 488/488/488 489/489/489
+f 512/512/512 511/511/511 489/489/489 490/490/490
+f 513/513/513 512/512/512 490/490/490 491/491/491
+f 514/514/514 513/513/513 491/491/491 492/492/492
+f 515/515/515 514/514/514 492/492/492 493/493/493
+f 516/516/516 515/515/515 493/493/493 494/494/494
+f 517/517/517 516/516/516 494/494/494 495/495/495
+f 518/518/518 517/517/517 495/495/495 496/496/496
+f 519/519/519 518/518/518 496/496/496 497/497/497
+f 520/520/520 519/519/519 497/497/497 498/498/498
+f 521/521/521 520/520/520 498/498/498 499/499/499
+f 522/522/522 521/521/521 499/499/499 500/500/500
+f 523/523/523 522/522/522 500/500/500 501/501/501
+f 524/524/524 523/523/523 501/501/501 502/502/502
+f 525/525/525 524/524/524 502/502/502 503/503/503
+f 526/526/526 525/525/525 503/503/503 504/504/504
+f 527/527/527 526/526/526 504/504/504 505/505/505
+f 528/528/528 527/527/527 505/505/505 506/506/506
+f 507/508/507 528/528/528 506/506/506 485/486/485
+f 530/529/530 529/530/529 507/508/507 508/507/508
+f 531/531/531 530/529/530 508/507/508 509/509/509
+f 532/532/532 531/531/531 509/509/509 510/510/510
+f 533/533/533 532/532/532 510/510/510 511/511/511
+f 534/534/534 533/533/533 511/511/511 512/512/512
+f 535/535/535 534/534/534 512/512/512 513/513/513
+f 536/536/536 535/535/535 513/513/513 514/514/514
+f 537/537/537 536/536/536 514/514/514 515/515/515
+f 538/538/538 537/537/537 515/515/515 516/516/516
+f 539/539/539 538/538/538 516/516/516 517/517/517
+f 540/540/540 539/539/539 517/517/517 518/518/518
+f 541/541/541 540/540/540 518/518/518 519/519/519
+f 542/542/542 541/541/541 519/519/519 520/520/520
+f 543/543/543 542/542/542 520/520/520 521/521/521
+f 544/544/544 543/543/543 521/521/521 522/522/522
+f 545/545/545 544/544/544 522/522/522 523/523/523
+f 546/546/546 545/545/545 523/523/523 524/524/524
+f 547/547/547 546/546/546 524/524/524 525/525/525
+f 548/548/548 547/547/547 525/525/525 526/526/526
+f 549/549/549 548/548/548 526/526/526 527/527/527
+f 550/550/550 549/549/549 527/527/527 528/528/528
+f 529/530/529 550/550/550 528/528/528 507/508/507
+f 552/551/552 551/552/551 529/530/529 530/529/530
+f 553/553/553 552/551/552 530/529/530 531/531/531
+f 554/554/554 553/553/553 531/531/531 532/532/532
+f 555/555/555 554/554/554 532/532/532 533/533/533
+f 556/556/556 555/555/555 533/533/533 534/534/534
+f 557/557/557 556/556/556 534/534/534 535/535/535
+f 558/558/558 557/557/557 535/535/535 536/536/536
+f 559/559/559 558/558/558 536/536/536 537/537/537
+f 560/560/560 559/559/559 537/537/537 538/538/538
+f 561/561/561 560/560/560 538/538/538 539/539/539
+f 562/562/562 561/561/561 539/539/539 540/540/540
+f 563/563/563 562/562/562 540/540/540 541/541/541
+f 564/564/564 563/563/563 541/541/541 542/542/542
+f 565/565/565 564/564/564 542/542/542 543/543/543
+f 566/566/566 565/565/565 543/543/543 544/544/544
+f 567/567/567 566/566/566 544/544/544 545/545/545
+f 568/568/568 567/567/567 545/545/545 546/546/546
+f 569/569/569 568/568/568 546/546/546 547/547/547
+f 570/570/570 569/569/569 547/547/547 548/548/548
+f 571/571/571 570/570/570 548/548/548 549/549/549
+f 572/572/572 571/571/571 549/549/549 550/550/550
+f 551/552/551 572/572/572 550/550/550 529/530/529
+f 574/573/574 585/574/585 584/575/584 573/576/573
+f 575/577/575 586/578/586 585/574/585 574/573/574
+f 576/579/576 587/580/587 586/578/586 575/577/575
+f 577/581/577 588/582/588 587/580/587 576/579/576
+f 578/583/578 589/584/589 588/582/588 577/581/577
+f 579/585/579 590/586/590 589/584/589 578/583/578
+f 580/587/580 591/588/591 590/586/590 579/585/579
+f 581/589/581 592/590/592 591/588/591 580/587/580
+f 582/591/582 593/592/593 592/590/592 581/589/581
+f 583/593/583 594/594/594 593/592/593 582/591/582
+f 574/573/574 573/576/573 551/552/551 552/551/552
+f 575/577/575 574/573/574 552/551/552 553/553/553
+f 576/579/576 575/577/575 553/553/553 554/554/554
+f 577/581/577 576/579/576 554/554/554 555/555/555
+f 578/583/578 577/581/577 555/555/555 556/556/556
+f 579/585/579 578/583/578 556/556/556 557/557/557
+f 580/587/580 579/585/579 557/557/557 558/558/558
+f 581/589/581 580/587/580 558/558/558 559/559/559
+f 582/591/582 581/589/581 559/559/559 560/560/560
+f 583/593/583 582/591/582 560/560/560 561/561/561
+f 594/594/594 583/593/583 561/561/561 562/562/562
+f 593/592/593 594/594/594 562/562/562 563/563/563
+f 592/590/592 593/592/593 563/563/563 564/564/564
+f 591/588/591 592/590/592 564/564/564 565/565/565
+f 590/586/590 591/588/591 565/565/565 566/566/566
+f 589/584/589 590/586/590 566/566/566 567/567/567
+f 588/582/588 589/584/589 567/567/567 568/568/568
+f 587/580/587 588/582/588 568/568/568 569/569/569
+f 586/578/586 587/580/587 569/569/569 570/570/570
+f 585/574/585 586/578/586 570/570/570 571/571/571
+f 584/575/584 585/574/585 571/571/571 572/572/572
+f 573/576/573 584/575/584 572/572/572 551/552/551
+v 37.072704 6.798801 14.612655
+v 35.399620 -1.684892 -2.247932
+v 37.025742 7.748693 14.139361
+v 35.352657 -0.734998 -2.721227
+v 49.019722 6.798801 13.427149
+v 47.346642 -1.684892 -3.433439
+v 48.972759 7.748693 12.953856
+v 47.299675 -0.734998 -3.906734
+vn -0.498026 -0.257760 0.827967
+vn -0.599982 -0.774742 -0.199491
+vn -0.549076 0.774743 0.313511
+vn -0.651030 0.257761 -0.713946
+vn 0.651031 -0.257760 0.713946
+vn 0.549076 -0.774742 -0.313512
+vn 0.599981 0.774743 0.199490
+vn 0.498026 0.257761 -0.827967
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 598/595/598 596/596/596 595/597/595 597/598/597
+f 600/599/600 602/600/602 601/601/601 599/602/599
+f 600/599/600 599/602/599 595/597/595 596/596/596
+f 602/600/602 600/599/600 596/596/596 598/595/598
+f 601/601/601 602/600/602 598/595/598 597/598/597
+f 599/602/599 601/601/601 597/598/597 595/597/595
+v 41.590405 7.735011 14.423697
+v 40.583054 2.824299 4.272040
+v 41.588688 13.509675 14.406421
+v 40.583054 13.509675 4.272040
+v 44.149647 7.735011 14.169743
+v 43.142300 2.824299 4.018085
+v 44.147934 13.509675 14.152468
+v 43.142300 13.509675 4.018085
+vn -0.434325 -0.456966 0.776237
+vn -0.719726 -0.617016 -0.318254
+vn -0.517001 0.578506 0.630905
+vn -0.631539 0.577350 -0.517518
+vn 0.578405 -0.456966 0.675744
+vn 0.643145 -0.617016 -0.453492
+vn 0.630907 0.578506 0.516998
+vn 0.517518 0.577350 -0.631539
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 606/603/606 604/604/604 603/605/603 605/606/605
+f 608/607/608 610/608/610 609/609/609 607/610/607
+f 608/607/608 607/610/607 603/605/603 604/604/604
+f 610/608/610 608/607/608 604/604/604 606/603/606
+f 609/609/609 610/608/610 606/603/606 605/606/605
+f 607/610/607 609/609/609 605/606/605 603/605/603
+v 38.265141 6.735311 26.120773
+v 37.069580 6.735311 14.072419
+v 38.265141 7.797606 26.120773
+v 37.069580 7.797606 14.072419
+v 49.417778 6.735311 25.014093
+v 48.222221 6.735311 12.965740
+v 49.417778 7.797606 25.014093
+v 48.222221 7.797606 12.965740
+vn -0.517518 -0.577350 0.631539
+vn -0.631539 -0.577350 -0.517518
+vn -0.517518 0.577350 0.631539
+vn -0.631539 0.577350 -0.517518
+vn 0.631539 -0.577350 0.517518
+vn 0.517518 -0.577350 -0.631539
+vn 0.631539 0.577350 0.517518
+vn 0.517518 0.577350 -0.631539
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Generic
+usemtl Default
+f 614/611/614 612/612/612 611/613/611 613/614/613
+f 616/615/616 618/616/618 617/617/617 615/618/615
+f 616/615/616 615/618/615 611/613/611 612/612/612
+f 618/616/618 616/615/616 612/612/612 614/611/614
+f 617/617/617 618/616/618 614/611/614 613/614/613
+f 615/618/615 617/617/617 613/614/613 611/613/611
+v -4.999391 -2.723562 -20.058920
+v -4.799391 -2.723562 -20.058920
+v -4.999391 7.276438 -20.058920
+v -4.799391 7.276438 -20.058920
+v -4.999391 -2.723562 -19.858919
+v -4.799391 -2.723562 -19.858919
+v -4.999391 7.276438 -19.858919
+v -4.799391 7.276438 -19.858919
+vn -0.577350 -0.577350 -0.577350
+vn 0.577350 -0.577350 -0.577350
+vn -0.577350 0.577350 -0.577350
+vn 0.577350 0.577350 -0.577350
+vn -0.577350 -0.577350 0.577350
+vn 0.577350 -0.577350 0.577350
+vn -0.577350 0.577350 0.577350
+vn 0.577350 0.577350 0.577350
+vt 0.995049 0.995049
+vt 0.995049 0.995049
+vt 0.004950 0.995049
+vt 0.004950 0.995049
+vt 0.995049 0.004950
+vt 0.995049 0.004950
+vt 0.004950 0.004950
+vt 0.004950 0.004950
+g Cube
+usemtl Default
+f 622/619/622 620/620/620 619/621/619 621/622/621
+f 624/623/624 626/624/626 625/625/625 623/626/623
+f 624/623/624 623/626/623 619/621/619 620/620/620
+f 626/624/626 624/623/624 620/620/620 622/619/622
+f 625/625/625 626/624/626 622/619/622 621/622/621
+f 623/626/623 625/625/625 621/622/621 619/621/619
+v -1.781751 7.010753 -9.378036
+v -1.581751 7.010753 -9.378036
+v -1.781751 17.010754 -9.378036
+v -1.581751 17.010754 -9.378036
+v -1.781751 7.010753 -9.178036
+v -1.581751 7.010753 -9.178036
+v -1.781751 17.010754 -9.178036
+v -1.581751 17.010754 -9.178036
+vn -0.577350 -0.577350 -0.577350
+vn 0.577350 -0.577350 -0.577350
+vn -0.577350 0.577350 -0.577350
+vn 0.577350 0.577350 -0.577350
+vn -0.577350 -0.577350 0.577350
+vn 0.577350 -0.577350 0.577350
+vn -0.577350 0.577350 0.577350
+vn 0.577350 0.577350 0.577350
+vt 0.995049 0.995049
+vt 0.995049 0.995049
+vt 0.004950 0.995049
+vt 0.004950 0.995049
+vt 0.995049 0.004950
+vt 0.995049 0.004950
+vt 0.004950 0.004950
+vt 0.004950 0.004950
+g Cube
+usemtl Default
+f 630/627/630 628/628/628 627/629/627 629/630/629
+f 632/631/632 634/632/634 633/633/633 631/634/631
+f 632/631/632 631/634/631 627/629/627 628/628/628
+f 634/632/634 632/631/632 628/628/628 630/627/630
+f 633/633/633 634/632/634 630/627/630 629/630/629
+f 631/634/631 633/633/633 629/630/629 627/629/627
+v 23.601257 -3.409447 -42.598141
+v 26.639965 -3.297550 -42.968342
+v 29.678680 -2.968940 -43.338543
+v 32.717388 -2.565424 -43.708744
+v 35.756100 -2.398096 -44.078945
+v 38.794811 -2.565424 -44.449146
+v 41.833515 -3.060902 -44.819347
+v 44.872231 -3.737523 -45.189548
+v 47.910938 -4.412263 -45.559750
+v 50.949646 -4.771656 -45.929951
+v 53.988358 -4.869517 -46.300152
+v 23.601257 -2.438035 -42.598141
+v 26.639965 -2.320616 -42.968342
+v 29.678680 -1.985266 -43.338543
+v 32.717388 -1.576197 -43.708744
+v 35.756100 -1.407172 -44.078945
+v 38.794811 -1.576197 -44.449146
+v 41.833515 -2.077228 -44.819347
+v 44.872231 -2.769071 -45.189548
+v 47.910938 -3.449503 -45.559750
+v 50.949646 -3.811076 -45.929951
+v 53.988358 -3.906463 -46.300152
+v 23.971458 -3.356195 -39.559433
+v 27.010166 -2.968940 -39.929634
+v 30.048882 -2.195561 -40.299835
+v 33.087589 -1.397891 -40.670036
+v 36.126301 -1.104276 -41.040237
+v 39.165012 -1.397891 -41.410439
+v 42.203716 -2.265358 -41.780640
+v 45.242432 -3.336131 -42.150841
+v 48.281139 -4.231285 -42.521042
+v 51.319847 -4.658715 -42.891243
+v 54.358559 -4.771657 -43.261444
+v 54.358559 -3.811076 -43.261444
+v 51.319847 -3.698599 -42.891243
+v 48.281139 -3.269352 -42.521042
+v 45.242432 -2.352459 -42.150841
+v 42.203716 -1.248837 -41.780640
+v 39.165012 -0.404662 -41.410439
+v 36.126301 -0.112976 -41.040237
+v 33.087589 -0.404662 -40.670036
+v 30.048882 -1.181921 -40.299835
+v 27.010166 -1.985266 -39.929634
+v 23.971458 -2.384776 -39.559433
+v 24.341660 -3.255616 -36.520721
+v 27.380367 -2.565424 -36.890923
+v 30.419083 -1.397891 -37.261124
+v 33.457790 -0.537756 -37.631325
+v 36.496502 -0.278140 -38.001526
+v 39.535213 -0.537756 -38.371727
+v 42.573917 -1.421056 -38.741928
+v 45.612633 -2.762392 -39.112129
+v 48.651340 -3.792841 -39.482330
+v 51.690048 -4.284532 -39.852531
+v 54.728760 -4.412263 -40.222733
+v 54.728760 -3.449503 -40.222733
+v 51.690048 -3.322612 -39.852531
+v 48.651340 -2.824036 -39.482330
+v 45.612633 -1.767833 -39.112129
+v 42.573917 -0.423386 -38.741928
+v 39.535213 0.459619 -38.371727
+v 36.496502 0.718170 -38.001526
+v 33.457790 0.459619 -37.631325
+v 30.419083 -0.404662 -37.261124
+v 27.380367 -1.576197 -36.890923
+v 24.341660 -2.277591 -36.520721
+v 24.711861 -3.198068 -33.482014
+v 27.750568 -2.398096 -33.852215
+v 30.789284 -1.104276 -34.222416
+v 33.827991 -0.278140 -34.592617
+v 36.866703 -0.053185 -34.962818
+v 39.905415 -0.278140 -35.333019
+v 42.944118 -1.104276 -35.703220
+v 45.982834 -2.449177 -36.073421
+v 49.021542 -3.395026 -36.443623
+v 52.060249 -3.776620 -36.813824
+v 55.098961 -3.849413 -37.184025
+v 55.098961 -2.886490 -37.184025
+v 52.060249 -2.812960 -36.813824
+v 49.021542 -2.415678 -36.443623
+v 45.982834 -1.455851 -36.073421
+v 42.944118 -0.112976 -35.703220
+v 39.905415 0.718170 -35.333019
+v 36.866703 0.937435 -34.962818
+v 33.827991 0.718170 -34.592617
+v 30.789284 -0.112976 -34.222416
+v 27.750568 -1.407172 -33.852215
+v 24.711861 -2.218710 -33.482014
+v 25.082062 -3.255616 -30.443304
+v 28.120770 -2.565424 -30.813505
+v 31.159485 -1.397891 -31.183704
+v 34.198193 -0.537756 -31.553905
+v 37.236904 -0.278140 -31.924107
+v 40.275616 -0.537756 -32.294312
+v 43.314320 -1.397891 -32.664509
+v 46.353035 -2.565424 -33.034710
+v 49.391743 -3.278783 -33.404911
+v 52.430450 -3.476367 -33.775112
+v 55.469162 -3.501402 -34.145313
+v 55.469162 -2.533448 -34.145313
+v 52.430450 -2.507833 -33.775112
+v 49.391743 -2.300760 -33.404911
+v 46.353035 -1.576197 -33.034710
+v 43.314320 -0.404662 -32.664509
+v 40.275616 0.459619 -32.294312
+v 37.236904 0.718170 -31.924107
+v 34.198193 0.459619 -31.553905
+v 31.159485 -0.404662 -31.183704
+v 28.120770 -1.576197 -30.813505
+v 25.082062 -2.277591 -30.443304
+v 25.452263 -3.356195 -27.404594
+v 28.490971 -2.968940 -27.774796
+v 31.529686 -2.195561 -28.144997
+v 34.568394 -1.397891 -28.515198
+v 37.607105 -1.104277 -28.885399
+v 40.645817 -1.397891 -29.255600
+v 43.684521 -2.195561 -29.625801
+v 46.723236 -2.968940 -29.996002
+v 49.761944 -3.356195 -30.366203
+v 52.800652 -3.409447 -30.736404
+v 55.839363 -3.409447 -31.106606
+v 55.839363 -2.438035 -31.106606
+v 52.800652 -2.438035 -30.736404
+v 49.761944 -2.384776 -30.366203
+v 46.723236 -1.985266 -29.996002
+v 43.684521 -1.181921 -29.625801
+v 40.645817 -0.404662 -29.255600
+v 37.607105 -0.112976 -28.885399
+v 34.568394 -0.404662 -28.515198
+v 31.529686 -1.181921 -28.144997
+v 28.490971 -1.985266 -27.774796
+v 25.452263 -2.384776 -27.404594
+v 25.822464 -3.409447 -24.365883
+v 28.861172 -3.293368 -24.736084
+v 31.899887 -2.968940 -25.106285
+v 34.938595 -2.565424 -25.476486
+v 37.977306 -2.398096 -25.846687
+v 41.016018 -2.565424 -26.216888
+v 44.054722 -2.968940 -26.587090
+v 47.093437 -3.297550 -26.957291
+v 50.132145 -3.350677 -27.327492
+v 53.170853 -3.239676 -27.697693
+v 56.209564 -3.176165 -28.067894
+v 56.209564 -2.195984 -28.067894
+v 53.170853 -2.260967 -27.697693
+v 50.132145 -2.379257 -27.327492
+v 47.093437 -2.320616 -26.957291
+v 44.054722 -1.985266 -26.587090
+v 41.016018 -1.576197 -26.216888
+v 37.977306 -1.407172 -25.846687
+v 34.938595 -1.576197 -25.476486
+v 31.899887 -1.985266 -25.106285
+v 28.861172 -2.314560 -24.736084
+v 25.822464 -2.438035 -24.365883
+v 26.192665 -3.044981 -21.327175
+v 29.231373 -2.785754 -21.697376
+v 32.270088 -2.991724 -22.067577
+v 35.308796 -3.219331 -22.437778
+v 38.347507 -3.198068 -22.807980
+v 41.386219 -3.255616 -23.178181
+v 44.424923 -3.356195 -23.548382
+v 47.463638 -3.285955 -23.918583
+v 50.502346 -2.923296 -24.288784
+v 53.541054 -2.477970 -24.658985
+v 56.579765 -2.293303 -25.029186
+v 56.579765 -1.300357 -25.029186
+v 53.541054 -1.486896 -24.658985
+v 50.502346 -1.938351 -24.288784
+v 47.463638 -2.308449 -23.918583
+v 44.424923 -2.384776 -23.548382
+v 41.386219 -2.277591 -23.178181
+v 38.347507 -2.218710 -22.807980
+v 35.308796 -2.242946 -22.437778
+v 32.270088 -2.000064 -22.067577
+v 29.231373 -1.786767 -21.697376
+v 26.192665 -2.053322 -21.327175
+v 26.562866 -1.861028 -18.288465
+v 29.601574 -1.262635 -18.658667
+v 32.640289 -1.861028 -19.028868
+v 35.678997 -3.044981 -19.399069
+v 38.717709 -3.409447 -19.769270
+v 41.756420 -3.409447 -20.139471
+v 44.795124 -3.350677 -20.509672
+v 47.833839 -2.923296 -20.879873
+v 50.872547 -2.069782 -21.250074
+v 53.911255 -1.189459 -21.620275
+v 56.949966 -0.865421 -21.990477
+v 56.949966 0.127940 -21.990477
+v 53.911255 -0.193970 -21.620275
+v 50.872547 -1.051766 -21.250074
+v 47.833839 -1.938351 -20.879873
+v 44.795124 -2.379257 -20.509672
+v 41.756420 -2.438035 -20.139471
+v 38.717709 -2.438035 -19.769270
+v 35.678997 -2.053322 -19.399069
+v 32.640289 -0.836300 -19.028868
+v 29.601574 -0.228566 -18.658667
+v 26.562866 -0.836300 -18.288465
+v 26.933067 -1.262635 -15.249758
+v 29.971775 -0.734991 -15.619959
+v 33.010490 -1.262635 -15.990160
+v 36.049198 -2.785754 -16.360361
+v 39.087910 -3.405265 -16.730562
+v 42.126621 -3.409447 -17.100763
+v 45.165325 -3.239676 -17.470964
+v 48.204041 -2.477970 -17.841166
+v 51.242748 -1.189459 -18.211367
+v 54.281456 -0.240200 -18.581568
+v 57.320168 0.046317 -18.951769
+v 57.320168 1.045207 -18.951769
+v 54.281456 0.759866 -18.581568
+v 51.242748 -0.193970 -18.211367
+v 48.204041 -1.486896 -17.841166
+v 45.165325 -2.260967 -17.470964
+v 42.126621 -2.438035 -17.100763
+v 39.087910 -2.431980 -16.730562
+v 36.049198 -1.786767 -16.360361
+v 33.010490 -0.228566 -15.990160
+v 29.971775 0.279237 -15.619959
+v 26.933067 -0.228566 -15.249758
+v 27.303268 -1.861028 -12.211048
+v 30.341976 -1.262635 -12.581249
+v 33.380692 -1.861028 -12.951450
+v 36.419399 -3.044981 -13.321651
+v 39.458111 -3.409447 -13.691853
+v 42.496822 -3.409447 -14.062054
+v 45.535526 -3.176165 -14.432255
+v 48.574242 -2.293303 -14.802456
+v 51.612949 -0.865421 -15.172657
+v 54.651657 0.046317 -15.542858
+v 57.690369 0.294580 -15.913059
+v 27.303268 -0.836300 -12.211048
+v 30.341976 -0.228566 -12.581249
+v 33.380692 -0.836300 -12.951450
+v 36.419399 -2.053322 -13.321651
+v 39.458111 -2.438035 -13.691853
+v 42.496822 -2.438035 -14.062054
+v 45.535526 -2.195984 -14.432255
+v 48.574242 -1.300357 -14.802456
+v 51.612949 0.127940 -15.172657
+v 54.651657 1.045207 -15.542858
+v 57.690369 1.287191 -15.913059
+vn -0.599026 -0.602062 -0.527910
+vn 0.050826 -0.714581 -0.697704
+vn 0.110539 -0.740282 -0.663147
+vn 0.068305 -0.791033 -0.607948
+vn -0.067464 -0.826818 -0.558408
+vn -0.220365 -0.810985 -0.541980
+vn -0.312818 -0.765434 -0.562366
+vn -0.310167 -0.731317 -0.607431
+vn -0.235293 -0.721301 -0.651431
+vn -0.146453 -0.720505 -0.677808
+vn 0.497112 -0.591272 -0.635041
+vn -0.673059 0.528950 -0.516918
+vn -0.214383 0.627951 -0.748143
+vn -0.244448 0.573498 -0.781886
+vn -0.195686 0.552643 -0.810119
+vn -0.099946 0.558569 -0.823415
+vn 0.008650 0.577861 -0.816090
+vn 0.097853 0.605520 -0.789792
+vn 0.119938 0.639695 -0.759213
+vn 0.058512 0.673582 -0.736793
+vn -0.026391 0.691911 -0.721500
+vn 0.510733 0.564070 -0.648828
+vn -0.636587 -0.765097 0.096869
+vn 0.243364 -0.969112 0.039942
+vn 0.296439 -0.944376 0.142401
+vn 0.202625 -0.945466 0.255022
+vn 0.038919 -0.947516 0.317330
+vn -0.134932 -0.932967 0.333716
+vn -0.273840 -0.911088 0.308108
+vn -0.300219 -0.924670 0.234208
+vn -0.206048 -0.966808 0.151086
+vn -0.082062 -0.991596 0.100012
+vn 0.695273 -0.718229 -0.027242
+vn 0.709541 0.690960 -0.138295
+vn 0.084344 0.992606 -0.087289
+vn 0.215679 0.969716 -0.114603
+vn 0.318789 0.933719 -0.162917
+vn 0.288834 0.927346 -0.237915
+vn 0.139049 0.942800 -0.302974
+vn -0.038532 0.947194 -0.318338
+vn -0.203287 0.933954 -0.293945
+vn -0.303199 0.922896 -0.237346
+vn -0.257204 0.954734 -0.149428
+vn -0.770621 0.637095 0.015922
+vn -0.611009 -0.785914 0.094909
+vn 0.309377 -0.950758 0.018605
+vn 0.330547 -0.939656 0.088237
+vn 0.190193 -0.969929 0.151870
+vn 0.020843 -0.984928 0.171703
+vn -0.150180 -0.970266 0.189817
+vn -0.308041 -0.927864 0.210190
+vn -0.329400 -0.923914 0.194626
+vn -0.204784 -0.965387 0.161530
+vn -0.068907 -0.986607 0.147847
+vn 0.702926 -0.711047 0.017523
+vn 0.700835 0.687586 -0.189883
+vn 0.069750 0.985420 -0.155188
+vn 0.209274 0.964095 -0.163481
+vn 0.335981 0.925650 -0.174037
+vn 0.311741 0.930325 -0.193166
+vn 0.149069 0.969065 -0.196701
+vn -0.021008 0.984904 -0.171823
+vn -0.189856 0.970498 -0.148620
+vn -0.334154 0.933955 -0.126767
+vn -0.317712 0.944096 -0.087989
+vn -0.788491 0.613893 0.037649
+vn -0.613516 -0.786143 0.074682
+vn 0.303138 -0.952222 -0.037151
+vn 0.317442 -0.947484 -0.038790
+vn 0.171703 -0.984929 -0.020833
+vn -0.000031 -1.000000 0.000039
+vn -0.171685 -0.984928 0.020991
+vn -0.320490 -0.946391 0.040385
+vn -0.316495 -0.946991 0.055123
+vn -0.169818 -0.982385 0.077982
+vn -0.041434 -0.992752 0.112813
+vn 0.707821 -0.706351 0.007588
+vn 0.695169 0.693527 -0.189104
+vn 0.039320 0.988596 -0.145367
+vn 0.166981 0.977636 -0.127844
+vn 0.313375 0.945008 -0.093569
+vn 0.319572 0.945981 -0.054709
+vn 0.171636 0.984904 -0.022475
+vn -0.000043 1.000000 -0.000034
+vn -0.171841 0.984904 0.020860
+vn -0.318278 0.947194 0.039025
+vn -0.305022 0.951604 0.037580
+vn -0.781929 0.616023 0.095404
+vn -0.641295 -0.765086 0.058177
+vn 0.228429 -0.969783 -0.085684
+vn 0.261573 -0.951515 -0.161862
+vn 0.151503 -0.969324 -0.193538
+vn -0.021001 -0.984929 -0.171682
+vn -0.193092 -0.969929 -0.148167
+vn -0.296212 -0.945466 -0.135469
+vn -0.250966 -0.963185 -0.096388
+vn -0.112666 -0.993312 -0.025260
+vn -0.018339 -0.999200 0.035536
+vn 0.705864 -0.707020 -0.043341
+vn 0.697463 0.703445 -0.136786
+vn 0.014976 0.997486 -0.069265
+vn 0.106696 0.993220 -0.046144
+vn 0.246332 0.969140 0.009378
+vn 0.293675 0.951714 0.089414
+vn 0.192035 0.969807 0.150325
+vn 0.020851 0.984903 0.171847
+vn -0.150426 0.970143 0.190246
+vn -0.256521 0.945340 0.201317
+vn -0.222547 0.962215 0.156895
+vn -0.754377 0.638420 0.152757
+vn -0.675241 -0.734843 0.063685
+vn 0.118792 -0.989218 -0.085657
+vn 0.157385 -0.966855 -0.201053
+vn 0.094325 -0.951515 -0.292784
+vn -0.038560 -0.947484 -0.317470
+vn -0.165018 -0.939656 -0.299693
+vn -0.209409 -0.944376 -0.253579
+vn -0.142467 -0.975746 -0.166202
+vn -0.038468 -0.997398 -0.060972
+vn 0.011450 -0.999861 0.012149
+vn 0.708895 -0.702842 -0.059000
+vn 0.693587 0.709641 -0.123879
+vn -0.016267 0.998809 -0.046007
+vn 0.030011 0.999395 -0.017564
+vn 0.134792 0.989619 0.049859
+vn 0.203306 0.966094 0.159148
+vn 0.160941 0.951269 0.263029
+vn 0.038904 0.947163 0.318386
+vn -0.086977 0.939483 0.331370
+vn -0.143412 0.943787 0.297824
+vn -0.107136 0.974403 0.197637
+vn -0.721435 0.671438 0.169419
+vn -0.676722 -0.726492 0.119404
+vn 0.044928 -0.998382 0.034851
+vn 0.017094 -0.998543 -0.051192
+vn 0.002788 -0.978146 -0.207902
+vn -0.039266 -0.953079 -0.300165
+vn -0.092341 -0.950757 -0.295861
+vn -0.087286 -0.969736 -0.228021
+vn -0.009467 -0.992899 -0.118585
+vn 0.070787 -0.997491 0.000420
+vn 0.077588 -0.991887 0.100702
+vn 0.729717 -0.683588 0.014874
+vn 0.674057 0.707296 -0.213024
+vn -0.084884 0.983981 -0.156769
+vn -0.083368 0.991253 -0.102311
+vn -0.005273 0.999943 -0.009270
+vn 0.076243 0.990585 0.113699
+vn 0.087305 0.968659 0.232545
+vn 0.040110 0.951586 0.304755
+vn 0.010646 0.952089 0.305636
+vn 0.004997 0.977760 0.209667
+vn -0.034190 0.997958 0.053954
+vn -0.729579 0.680585 0.067219
+vn -0.635657 -0.727218 0.259024
+vn 0.039333 -0.961732 0.271154
+vn -0.137465 -0.957450 0.253757
+vn -0.129258 -0.989870 0.058725
+vn -0.046866 -0.992288 -0.114753
+vn -0.025705 -0.988873 -0.146527
+vn 0.025003 -0.994393 -0.102745
+vn 0.136203 -0.990513 -0.018254
+vn 0.214018 -0.971281 0.103967
+vn 0.172436 -0.955708 0.238511
+vn 0.755635 -0.643259 0.123425
+vn 0.644344 0.685570 -0.338843
+vn -0.176109 0.933268 -0.313044
+vn -0.225667 0.945862 -0.233280
+vn -0.154735 0.981077 -0.116383
+vn -0.037547 0.999278 0.005775
+vn 0.020768 0.994831 0.099400
+vn 0.052134 0.987864 0.146311
+vn 0.157049 0.982054 0.104429
+vn 0.172396 0.982522 -0.070214
+vn -0.031789 0.969133 -0.244480
+vn -0.774993 0.621770 -0.113085
+vn -0.614110 -0.734644 0.288386
+vn 0.037162 -0.955783 0.291717
+vn -0.247938 -0.917069 0.312268
+vn -0.256380 -0.946881 0.194126
+vn -0.076923 -0.996657 0.027514
+vn 0.014613 -0.999399 -0.031445
+vn 0.112773 -0.993474 -0.017085
+vn 0.265926 -0.963190 0.039342
+vn 0.323267 -0.933484 0.155265
+vn 0.220989 -0.934749 0.278224
+vn 0.762125 -0.632263 0.139315
+vn 0.638094 0.689687 -0.342297
+vn -0.221099 0.921316 -0.319831
+vn -0.329283 0.908367 -0.257764
+vn -0.280638 0.945862 -0.163057
+vn -0.124206 0.990379 -0.061016
+vn -0.018246 0.999820 0.005245
+vn 0.086584 0.996041 0.020138
+vn 0.286958 0.956545 -0.051730
+vn 0.272502 0.939816 -0.206126
+vn -0.033691 0.955810 -0.292048
+vn -0.786435 0.608576 -0.105618
+vn -0.643540 -0.761356 0.078699
+vn -0.000319 -1.000000 0.000408
+vn -0.292106 -0.955783 0.033964
+vn -0.280714 -0.959253 0.032134
+vn -0.079081 -0.996824 0.009362
+vn 0.032279 -0.999471 -0.003932
+vn 0.163733 -0.986486 -0.006001
+vn 0.337538 -0.941095 0.020224
+vn 0.360082 -0.927949 0.096185
+vn 0.208215 -0.963843 0.166293
+vn 0.748825 -0.661451 0.041746
+vn 0.657610 0.721687 -0.216142
+vn -0.207816 0.964545 -0.162679
+vn -0.363560 0.921316 -0.137843
+vn -0.346170 0.933268 -0.095798
+vn -0.172563 0.983981 -0.044762
+vn -0.035218 0.999322 -0.010758
+vn 0.082937 0.996504 -0.010097
+vn 0.288978 0.956719 -0.034363
+vn 0.296553 0.954354 -0.035559
+vn -0.000565 1.000000 -0.000442
+vn -0.765765 0.636361 0.092994
+vn -0.472038 -0.643086 0.603009
+vn 0.078113 -0.761356 0.643611
+vn -0.132507 -0.734644 0.665387
+vn -0.098830 -0.727218 0.679254
+vn 0.041474 -0.719840 0.692900
+vn 0.112202 -0.706581 0.698680
+vn 0.209777 -0.690552 0.692194
+vn 0.328519 -0.648610 0.686572
+vn 0.327924 -0.633767 0.700575
+vn 0.212216 -0.658508 0.722033
+vn 0.658530 -0.542480 0.521588
+vn -0.541870 0.502924 0.673383
+vn 0.093119 0.634566 0.767239
+vn 0.276022 0.628194 0.727451
+vn 0.257877 0.667479 0.698549
+vn 0.129422 0.704689 0.697613
+vn 0.057278 0.709991 0.701878
+vn -0.044956 0.707296 0.705487
+vn -0.174229 0.685570 0.706851
+vn -0.179082 0.689687 0.701613
+vn -0.051932 0.721687 0.690268
+vn 0.626124 0.606414 0.490133
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+vt 0.000000 0.000000
+g Cube
+usemtl Default
+f 647/635/647 636/636/636 635/637/635 646/638/646
+f 648/639/648 637/640/637 636/636/636 647/635/647
+f 649/641/649 638/642/638 637/640/637 648/639/648
+f 650/643/650 639/644/639 638/642/638 649/641/649
+f 651/645/651 640/646/640 639/644/639 650/643/650
+f 652/647/652 641/648/641 640/646/640 651/645/651
+f 653/649/653 642/650/642 641/648/641 652/647/652
+f 654/651/654 643/652/643 642/650/642 653/649/653
+f 655/653/655 644/654/644 643/652/643 654/651/654
+f 656/655/656 645/656/645 644/654/644 655/653/655
+f 658/657/658 657/658/657 635/637/635 636/636/636
+f 659/659/659 658/657/658 636/636/636 637/640/637
+f 660/660/660 659/659/659 637/640/637 638/642/638
+f 661/661/661 660/660/660 638/642/638 639/644/639
+f 662/662/662 661/661/661 639/644/639 640/646/640
+f 663/663/663 662/662/662 640/646/640 641/648/641
+f 664/664/664 663/663/663 641/648/641 642/650/642
+f 665/665/665 664/664/664 642/650/642 643/652/643
+f 666/666/666 665/665/665 643/652/643 644/654/644
+f 667/667/667 666/666/666 644/654/644 645/656/645
+f 668/668/668 667/667/667 645/656/645 656/655/656
+f 669/669/669 668/668/668 656/655/656 655/653/655
+f 670/670/670 669/669/669 655/653/655 654/651/654
+f 671/671/671 670/670/670 654/651/654 653/649/653
+f 672/672/672 671/671/671 653/649/653 652/647/652
+f 673/673/673 672/672/672 652/647/652 651/645/651
+f 674/674/674 673/673/673 651/645/651 650/643/650
+f 675/675/675 674/674/674 650/643/650 649/641/649
+f 676/676/676 675/675/675 649/641/649 648/639/648
+f 677/677/677 676/676/676 648/639/648 647/635/647
+f 678/678/678 677/677/677 647/635/647 646/638/646
+f 657/658/657 678/678/678 646/638/646 635/637/635
+f 680/679/680 679/680/679 657/658/657 658/657/658
+f 681/681/681 680/679/680 658/657/658 659/659/659
+f 682/682/682 681/681/681 659/659/659 660/660/660
+f 683/683/683 682/682/682 660/660/660 661/661/661
+f 684/684/684 683/683/683 661/661/661 662/662/662
+f 685/685/685 684/684/684 662/662/662 663/663/663
+f 686/686/686 685/685/685 663/663/663 664/664/664
+f 687/687/687 686/686/686 664/664/664 665/665/665
+f 688/688/688 687/687/687 665/665/665 666/666/666
+f 689/689/689 688/688/688 666/666/666 667/667/667
+f 690/690/690 689/689/689 667/667/667 668/668/668
+f 691/691/691 690/690/690 668/668/668 669/669/669
+f 692/692/692 691/691/691 669/669/669 670/670/670
+f 693/693/693 692/692/692 670/670/670 671/671/671
+f 694/694/694 693/693/693 671/671/671 672/672/672
+f 695/695/695 694/694/694 672/672/672 673/673/673
+f 696/696/696 695/695/695 673/673/673 674/674/674
+f 697/697/697 696/696/696 674/674/674 675/675/675
+f 698/698/698 697/697/697 675/675/675 676/676/676
+f 699/699/699 698/698/698 676/676/676 677/677/677
+f 700/700/700 699/699/699 677/677/677 678/678/678
+f 679/680/679 700/700/700 678/678/678 657/658/657
+f 702/701/702 701/702/701 679/680/679 680/679/680
+f 703/703/703 702/701/702 680/679/680 681/681/681
+f 704/704/704 703/703/703 681/681/681 682/682/682
+f 705/705/705 704/704/704 682/682/682 683/683/683
+f 706/706/706 705/705/705 683/683/683 684/684/684
+f 707/707/707 706/706/706 684/684/684 685/685/685
+f 708/708/708 707/707/707 685/685/685 686/686/686
+f 709/709/709 708/708/708 686/686/686 687/687/687
+f 710/710/710 709/709/709 687/687/687 688/688/688
+f 711/711/711 710/710/710 688/688/688 689/689/689
+f 712/712/712 711/711/711 689/689/689 690/690/690
+f 713/713/713 712/712/712 690/690/690 691/691/691
+f 714/714/714 713/713/713 691/691/691 692/692/692
+f 715/715/715 714/714/714 692/692/692 693/693/693
+f 716/716/716 715/715/715 693/693/693 694/694/694
+f 717/717/717 716/716/716 694/694/694 695/695/695
+f 718/718/718 717/717/717 695/695/695 696/696/696
+f 719/719/719 718/718/718 696/696/696 697/697/697
+f 720/720/720 719/719/719 697/697/697 698/698/698
+f 721/721/721 720/720/720 698/698/698 699/699/699
+f 722/722/722 721/721/721 699/699/699 700/700/700
+f 701/702/701 722/722/722 700/700/700 679/680/679
+f 724/723/724 723/724/723 701/702/701 702/701/702
+f 725/725/725 724/723/724 702/701/702 703/703/703
+f 726/726/726 725/725/725 703/703/703 704/704/704
+f 727/727/727 726/726/726 704/704/704 705/705/705
+f 728/728/728 727/727/727 705/705/705 706/706/706
+f 729/729/729 728/728/728 706/706/706 707/707/707
+f 730/730/730 729/729/729 707/707/707 708/708/708
+f 731/731/731 730/730/730 708/708/708 709/709/709
+f 732/732/732 731/731/731 709/709/709 710/710/710
+f 733/733/733 732/732/732 710/710/710 711/711/711
+f 734/734/734 733/733/733 711/711/711 712/712/712
+f 735/735/735 734/734/734 712/712/712 713/713/713
+f 736/736/736 735/735/735 713/713/713 714/714/714
+f 737/737/737 736/736/736 714/714/714 715/715/715
+f 738/738/738 737/737/737 715/715/715 716/716/716
+f 739/739/739 738/738/738 716/716/716 717/717/717
+f 740/740/740 739/739/739 717/717/717 718/718/718
+f 741/741/741 740/740/740 718/718/718 719/719/719
+f 742/742/742 741/741/741 719/719/719 720/720/720
+f 743/743/743 742/742/742 720/720/720 721/721/721
+f 744/744/744 743/743/743 721/721/721 722/722/722
+f 723/724/723 744/744/744 722/722/722 701/702/701
+f 746/745/746 745/746/745 723/724/723 724/723/724
+f 747/747/747 746/745/746 724/723/724 725/725/725
+f 748/748/748 747/747/747 725/725/725 726/726/726
+f 749/749/749 748/748/748 726/726/726 727/727/727
+f 750/750/750 749/749/749 727/727/727 728/728/728
+f 751/751/751 750/750/750 728/728/728 729/729/729
+f 752/752/752 751/751/751 729/729/729 730/730/730
+f 753/753/753 752/752/752 730/730/730 731/731/731
+f 754/754/754 753/753/753 731/731/731 732/732/732
+f 755/755/755 754/754/754 732/732/732 733/733/733
+f 756/756/756 755/755/755 733/733/733 734/734/734
+f 757/757/757 756/756/756 734/734/734 735/735/735
+f 758/758/758 757/757/757 735/735/735 736/736/736
+f 759/759/759 758/758/758 736/736/736 737/737/737
+f 760/760/760 759/759/759 737/737/737 738/738/738
+f 761/761/761 760/760/760 738/738/738 739/739/739
+f 762/762/762 761/761/761 739/739/739 740/740/740
+f 763/763/763 762/762/762 740/740/740 741/741/741
+f 764/764/764 763/763/763 741/741/741 742/742/742
+f 765/765/765 764/764/764 742/742/742 743/743/743
+f 766/766/766 765/765/765 743/743/743 744/744/744
+f 745/746/745 766/766/766 744/744/744 723/724/723
+f 768/767/768 767/768/767 745/746/745 746/745/746
+f 769/769/769 768/767/768 746/745/746 747/747/747
+f 770/770/770 769/769/769 747/747/747 748/748/748
+f 771/771/771 770/770/770 748/748/748 749/749/749
+f 772/772/772 771/771/771 749/749/749 750/750/750
+f 773/773/773 772/772/772 750/750/750 751/751/751
+f 774/774/774 773/773/773 751/751/751 752/752/752
+f 775/775/775 774/774/774 752/752/752 753/753/753
+f 776/776/776 775/775/775 753/753/753 754/754/754
+f 777/777/777 776/776/776 754/754/754 755/755/755
+f 778/778/778 777/777/777 755/755/755 756/756/756
+f 779/779/779 778/778/778 756/756/756 757/757/757
+f 780/780/780 779/779/779 757/757/757 758/758/758
+f 781/781/781 780/780/780 758/758/758 759/759/759
+f 782/782/782 781/781/781 759/759/759 760/760/760
+f 783/783/783 782/782/782 760/760/760 761/761/761
+f 784/784/784 783/783/783 761/761/761 762/762/762
+f 785/785/785 784/784/784 762/762/762 763/763/763
+f 786/786/786 785/785/785 763/763/763 764/764/764
+f 787/787/787 786/786/786 764/764/764 765/765/765
+f 788/788/788 787/787/787 765/765/765 766/766/766
+f 767/768/767 788/788/788 766/766/766 745/746/745
+f 790/789/790 789/790/789 767/768/767 768/767/768
+f 791/791/791 790/789/790 768/767/768 769/769/769
+f 792/792/792 791/791/791 769/769/769 770/770/770
+f 793/793/793 792/792/792 770/770/770 771/771/771
+f 794/794/794 793/793/793 771/771/771 772/772/772
+f 795/795/795 794/794/794 772/772/772 773/773/773
+f 796/796/796 795/795/795 773/773/773 774/774/774
+f 797/797/797 796/796/796 774/774/774 775/775/775
+f 798/798/798 797/797/797 775/775/775 776/776/776
+f 799/799/799 798/798/798 776/776/776 777/777/777
+f 800/800/800 799/799/799 777/777/777 778/778/778
+f 801/801/801 800/800/800 778/778/778 779/779/779
+f 802/802/802 801/801/801 779/779/779 780/780/780
+f 803/803/803 802/802/802 780/780/780 781/781/781
+f 804/804/804 803/803/803 781/781/781 782/782/782
+f 805/805/805 804/804/804 782/782/782 783/783/783
+f 806/806/806 805/805/805 783/783/783 784/784/784
+f 807/807/807 806/806/806 784/784/784 785/785/785
+f 808/808/808 807/807/807 785/785/785 786/786/786
+f 809/809/809 808/808/808 786/786/786 787/787/787
+f 810/810/810 809/809/809 787/787/787 788/788/788
+f 789/790/789 810/810/810 788/788/788 767/768/767
+f 812/811/812 811/812/811 789/790/789 790/789/790
+f 813/813/813 812/811/812 790/789/790 791/791/791
+f 814/814/814 813/813/813 791/791/791 792/792/792
+f 815/815/815 814/814/814 792/792/792 793/793/793
+f 816/816/816 815/815/815 793/793/793 794/794/794
+f 817/817/817 816/816/816 794/794/794 795/795/795
+f 818/818/818 817/817/817 795/795/795 796/796/796
+f 819/819/819 818/818/818 796/796/796 797/797/797
+f 820/820/820 819/819/819 797/797/797 798/798/798
+f 821/821/821 820/820/820 798/798/798 799/799/799
+f 822/822/822 821/821/821 799/799/799 800/800/800
+f 823/823/823 822/822/822 800/800/800 801/801/801
+f 824/824/824 823/823/823 801/801/801 802/802/802
+f 825/825/825 824/824/824 802/802/802 803/803/803
+f 826/826/826 825/825/825 803/803/803 804/804/804
+f 827/827/827 826/826/826 804/804/804 805/805/805
+f 828/828/828 827/827/827 805/805/805 806/806/806
+f 829/829/829 828/828/828 806/806/806 807/807/807
+f 830/830/830 829/829/829 807/807/807 808/808/808
+f 831/831/831 830/830/830 808/808/808 809/809/809
+f 832/832/832 831/831/831 809/809/809 810/810/810
+f 811/812/811 832/832/832 810/810/810 789/790/789
+f 834/833/834 833/834/833 811/812/811 812/811/812
+f 835/835/835 834/833/834 812/811/812 813/813/813
+f 836/836/836 835/835/835 813/813/813 814/814/814
+f 837/837/837 836/836/836 814/814/814 815/815/815
+f 838/838/838 837/837/837 815/815/815 816/816/816
+f 839/839/839 838/838/838 816/816/816 817/817/817
+f 840/840/840 839/839/839 817/817/817 818/818/818
+f 841/841/841 840/840/840 818/818/818 819/819/819
+f 842/842/842 841/841/841 819/819/819 820/820/820
+f 843/843/843 842/842/842 820/820/820 821/821/821
+f 844/844/844 843/843/843 821/821/821 822/822/822
+f 845/845/845 844/844/844 822/822/822 823/823/823
+f 846/846/846 845/845/845 823/823/823 824/824/824
+f 847/847/847 846/846/846 824/824/824 825/825/825
+f 848/848/848 847/847/847 825/825/825 826/826/826
+f 849/849/849 848/848/848 826/826/826 827/827/827
+f 850/850/850 849/849/849 827/827/827 828/828/828
+f 851/851/851 850/850/850 828/828/828 829/829/829
+f 852/852/852 851/851/851 829/829/829 830/830/830
+f 853/853/853 852/852/852 830/830/830 831/831/831
+f 854/854/854 853/853/853 831/831/831 832/832/832
+f 833/834/833 854/854/854 832/832/832 811/812/811
+f 856/855/856 867/856/867 866/857/866 855/858/855
+f 857/859/857 868/860/868 867/856/867 856/855/856
+f 858/861/858 869/862/869 868/860/868 857/859/857
+f 859/863/859 870/864/870 869/862/869 858/861/858
+f 860/865/860 871/866/871 870/864/870 859/863/859
+f 861/867/861 872/868/872 871/866/871 860/865/860
+f 862/869/862 873/870/873 872/868/872 861/867/861
+f 863/871/863 874/872/874 873/870/873 862/869/862
+f 864/873/864 875/874/875 874/872/874 863/871/863
+f 865/875/865 876/876/876 875/874/875 864/873/864
+f 856/855/856 855/858/855 833/834/833 834/833/834
+f 857/859/857 856/855/856 834/833/834 835/835/835
+f 858/861/858 857/859/857 835/835/835 836/836/836
+f 859/863/859 858/861/858 836/836/836 837/837/837
+f 860/865/860 859/863/859 837/837/837 838/838/838
+f 861/867/861 860/865/860 838/838/838 839/839/839
+f 862/869/862 861/867/861 839/839/839 840/840/840
+f 863/871/863 862/869/862 840/840/840 841/841/841
+f 864/873/864 863/871/863 841/841/841 842/842/842
+f 865/875/865 864/873/864 842/842/842 843/843/843
+f 876/876/876 865/875/865 843/843/843 844/844/844
+f 875/874/875 876/876/876 844/844/844 845/845/845
+f 874/872/874 875/874/875 845/845/845 846/846/846
+f 873/870/873 874/872/874 846/846/846 847/847/847
+f 872/868/872 873/870/873 847/847/847 848/848/848
+f 871/866/871 872/868/872 848/848/848 849/849/849
+f 870/864/870 871/866/871 849/849/849 850/850/850
+f 869/862/869 870/864/870 850/850/850 851/851/851
+f 868/860/868 869/862/869 851/851/851 852/852/852
+f 867/856/867 868/860/868 852/852/852 853/853/853
+f 866/857/866 867/856/867 853/853/853 854/854/854
+f 855/858/855 866/857/866 854/854/854 833/834/833
+v 38.838924 -2.723562 -29.694302
+v 39.038925 -2.723562 -29.694302
+v 38.838924 7.276438 -29.694302
+v 39.038925 7.276438 -29.694302
+v 38.838924 -2.723562 -29.494301
+v 39.038925 -2.723562 -29.494301
+v 38.838924 7.276438 -29.494301
+v 39.038925 7.276438 -29.494301
+vn -0.577350 -0.577350 -0.577350
+vn 0.577350 -0.577350 -0.577350
+vn -0.577350 0.577350 -0.577350
+vn 0.577350 0.577350 -0.577350
+vn -0.577350 -0.577350 0.577350
+vn 0.577350 -0.577350 0.577350
+vn -0.577350 0.577350 0.577350
+vn 0.577350 0.577350 0.577350
+vt 0.995049 0.995049
+vt 0.995049 0.995049
+vt 0.004950 0.995049
+vt 0.004950 0.995049
+vt 0.995049 0.004950
+vt 0.995049 0.004950
+vt 0.004950 0.004950
+vt 0.004950 0.004950
+g Cube
+usemtl Default
+f 880/877/880 878/878/878 877/879/877 879/880/879
+f 882/881/882 884/882/884 883/883/883 881/884/881
+f 882/881/882 881/884/881 877/879/877 878/878/878
+f 884/882/884 882/881/882 878/878/878 880/877/880
+f 883/883/883 884/882/884 880/877/880 879/880/879
+f 881/884/881 883/883/883 879/880/879 877/879/877
diff --git a/Recast/Examples/Recast.exe b/Recast/Examples/Recast.exe
new file mode 100644
index 0000000..62787e1
Binary files /dev/null and b/Recast/Examples/Recast.exe differ
diff --git a/Recast/Examples/SDL.dll b/Recast/Examples/SDL.dll
new file mode 100644
index 0000000..3ce97a5
Binary files /dev/null and b/Recast/Examples/SDL.dll differ
diff --git a/Recast/Examples/SDLMain.h b/Recast/Examples/SDLMain.h
new file mode 100644
index 0000000..4683df5
--- /dev/null
+++ b/Recast/Examples/SDLMain.h
@@ -0,0 +1,11 @@
+/* SDLMain.m - main entry point for our Cocoa-ized SDL app
+ Initial Version: Darrell Walisser
+ Non-NIB-Code & other changes: Max Horn
+
+ Feel free to customize this file to suit your needs
+*/
+
+#import
+
+@interface SDLMain : NSObject
+@end
diff --git a/Recast/Examples/SDLMain.m b/Recast/Examples/SDLMain.m
new file mode 100644
index 0000000..2eaa1c1
--- /dev/null
+++ b/Recast/Examples/SDLMain.m
@@ -0,0 +1,384 @@
+/* SDLMain.m - main entry point for our Cocoa-ized SDL app
+ Initial Version: Darrell Walisser
+ Non-NIB-Code & other changes: Max Horn
+
+ Feel free to customize this file to suit your needs
+*/
+
+#import "SDL.h"
+#import "SDLMain.h"
+#import /* for MAXPATHLEN */
+#import
+
+/* For some reaon, Apple removed setAppleMenu from the headers in 10.4,
+ but the method still is there and works. To avoid warnings, we declare
+ it ourselves here. */
+@interface NSApplication(SDL_Missing_Methods)
+- (void)setAppleMenu:(NSMenu *)menu;
+@end
+
+/* Use this flag to determine whether we use SDLMain.nib or not */
+#define SDL_USE_NIB_FILE 0
+
+/* Use this flag to determine whether we use CPS (docking) or not */
+#define SDL_USE_CPS 1
+#ifdef SDL_USE_CPS
+/* Portions of CPS.h */
+typedef struct CPSProcessSerNum
+{
+ UInt32 lo;
+ UInt32 hi;
+} CPSProcessSerNum;
+
+extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn);
+extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
+extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn);
+
+#endif /* SDL_USE_CPS */
+
+static int gArgc;
+static char **gArgv;
+static BOOL gFinderLaunch;
+static BOOL gCalledAppMainline = FALSE;
+
+static NSString *getApplicationName(void)
+{
+ NSDictionary *dict;
+ NSString *appName = 0;
+
+ /* Determine the application name */
+ dict = (NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle());
+ if (dict)
+ appName = [dict objectForKey: @"CFBundleName"];
+
+ if (![appName length])
+ appName = [[NSProcessInfo processInfo] processName];
+
+ return appName;
+}
+
+#if SDL_USE_NIB_FILE
+/* A helper category for NSString */
+@interface NSString (ReplaceSubString)
+- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
+@end
+#endif
+
+@interface SDLApplication : NSApplication
+@end
+
+@implementation SDLApplication
+/* Invoked from the Quit menu item */
+- (void)terminate:(id)sender
+{
+ /* Post a SDL_QUIT event */
+ SDL_Event event;
+ event.type = SDL_QUIT;
+ SDL_PushEvent(&event);
+}
+@end
+
+/* The main class of the application, the application's delegate */
+@implementation SDLMain
+
+/* Set the working directory to the .app's parent directory */
+- (void) setupWorkingDirectory:(BOOL)shouldChdir
+{
+ if (shouldChdir)
+ {
+ char parentdir[MAXPATHLEN];
+ CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
+ CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url);
+ if (CFURLGetFileSystemRepresentation(url2, true, (UInt8 *)parentdir, MAXPATHLEN)) {
+ assert ( chdir (parentdir) == 0 ); /* chdir to the binary app's parent */
+ }
+ CFRelease(url);
+ CFRelease(url2);
+ }
+
+}
+
+#if SDL_USE_NIB_FILE
+
+/* Fix menu to contain the real app name instead of "SDL App" */
+- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
+{
+ NSRange aRange;
+ NSEnumerator *enumerator;
+ NSMenuItem *menuItem;
+
+ aRange = [[aMenu title] rangeOfString:@"SDL App"];
+ if (aRange.length != 0)
+ [aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
+
+ enumerator = [[aMenu itemArray] objectEnumerator];
+ while ((menuItem = [enumerator nextObject]))
+ {
+ aRange = [[menuItem title] rangeOfString:@"SDL App"];
+ if (aRange.length != 0)
+ [menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
+ if ([menuItem hasSubmenu])
+ [self fixMenu:[menuItem submenu] withAppName:appName];
+ }
+ [ aMenu sizeToFit ];
+}
+
+#else
+
+static void setApplicationMenu(void)
+{
+ /* warning: this code is very odd */
+ NSMenu *appleMenu;
+ NSMenuItem *menuItem;
+ NSString *title;
+ NSString *appName;
+
+ appName = getApplicationName();
+ appleMenu = [[NSMenu alloc] initWithTitle:@""];
+
+ /* Add menu items */
+ title = [@"About " stringByAppendingString:appName];
+ [appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
+
+ [appleMenu addItem:[NSMenuItem separatorItem]];
+
+ title = [@"Hide " stringByAppendingString:appName];
+ [appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
+
+ menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
+ [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
+
+ [appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
+
+ [appleMenu addItem:[NSMenuItem separatorItem]];
+
+ title = [@"Quit " stringByAppendingString:appName];
+ [appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
+
+
+ /* Put menu into the menubar */
+ menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
+ [menuItem setSubmenu:appleMenu];
+ [[NSApp mainMenu] addItem:menuItem];
+
+ /* Tell the application object that this is now the application menu */
+ [NSApp setAppleMenu:appleMenu];
+
+ /* Finally give up our references to the objects */
+ [appleMenu release];
+ [menuItem release];
+}
+
+/* Create a window menu */
+static void setupWindowMenu(void)
+{
+ NSMenu *windowMenu;
+ NSMenuItem *windowMenuItem;
+ NSMenuItem *menuItem;
+
+ windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
+
+ /* "Minimize" item */
+ menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
+ [windowMenu addItem:menuItem];
+ [menuItem release];
+
+ /* Put menu into the menubar */
+ windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
+ [windowMenuItem setSubmenu:windowMenu];
+ [[NSApp mainMenu] addItem:windowMenuItem];
+
+ /* Tell the application object that this is now the window menu */
+ [NSApp setWindowsMenu:windowMenu];
+
+ /* Finally give up our references to the objects */
+ [windowMenu release];
+ [windowMenuItem release];
+}
+
+/* Replacement for NSApplicationMain */
+static void CustomApplicationMain (int argc, char **argv)
+{
+ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
+ SDLMain *sdlMain;
+
+ /* Ensure the application object is initialised */
+ [SDLApplication sharedApplication];
+
+#ifdef SDL_USE_CPS
+ {
+ CPSProcessSerNum PSN;
+ /* Tell the dock about us */
+ if (!CPSGetCurrentProcess(&PSN))
+ if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103))
+ if (!CPSSetFrontProcess(&PSN))
+ [SDLApplication sharedApplication];
+ }
+#endif /* SDL_USE_CPS */
+
+ /* Set up the menubar */
+ [NSApp setMainMenu:[[NSMenu alloc] init]];
+ setApplicationMenu();
+ setupWindowMenu();
+
+ /* Create SDLMain and make it the app delegate */
+ sdlMain = [[SDLMain alloc] init];
+ [NSApp setDelegate:sdlMain];
+
+ /* Start the main event loop */
+ [NSApp run];
+
+ [sdlMain release];
+ [pool release];
+}
+
+#endif
+
+
+/*
+ * Catch document open requests...this lets us notice files when the app
+ * was launched by double-clicking a document, or when a document was
+ * dragged/dropped on the app's icon. You need to have a
+ * CFBundleDocumentsType section in your Info.plist to get this message,
+ * apparently.
+ *
+ * Files are added to gArgv, so to the app, they'll look like command line
+ * arguments. Previously, apps launched from the finder had nothing but
+ * an argv[0].
+ *
+ * This message may be received multiple times to open several docs on launch.
+ *
+ * This message is ignored once the app's mainline has been called.
+ */
+- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
+{
+ const char *temparg;
+ size_t arglen;
+ char *arg;
+ char **newargv;
+
+ if (!gFinderLaunch) /* MacOS is passing command line args. */
+ return FALSE;
+
+ if (gCalledAppMainline) /* app has started, ignore this document. */
+ return FALSE;
+
+ temparg = [filename UTF8String];
+ arglen = SDL_strlen(temparg) + 1;
+ arg = (char *) SDL_malloc(arglen);
+ if (arg == NULL)
+ return FALSE;
+
+ newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2));
+ if (newargv == NULL)
+ {
+ SDL_free(arg);
+ return FALSE;
+ }
+ gArgv = newargv;
+
+ SDL_strlcpy(arg, temparg, arglen);
+ gArgv[gArgc++] = arg;
+ gArgv[gArgc] = NULL;
+ return TRUE;
+}
+
+
+/* Called when the internal event loop has just started running */
+- (void) applicationDidFinishLaunching: (NSNotification *) note
+{
+ int status;
+
+ /* Set the working directory to the .app's parent directory */
+ [self setupWorkingDirectory:gFinderLaunch];
+
+#if SDL_USE_NIB_FILE
+ /* Set the main menu to contain the real app name instead of "SDL App" */
+ [self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()];
+#endif
+
+ /* Hand off to main application code */
+ gCalledAppMainline = TRUE;
+ status = SDL_main (gArgc, gArgv);
+
+ /* We're done, thank you for playing */
+ exit(status);
+}
+@end
+
+
+@implementation NSString (ReplaceSubString)
+
+- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
+{
+ unsigned int bufferSize;
+ unsigned int selfLen = [self length];
+ unsigned int aStringLen = [aString length];
+ unichar *buffer;
+ NSRange localRange;
+ NSString *result;
+
+ bufferSize = selfLen + aStringLen - aRange.length;
+ buffer = NSAllocateMemoryPages(bufferSize*sizeof(unichar));
+
+ /* Get first part into buffer */
+ localRange.location = 0;
+ localRange.length = aRange.location;
+ [self getCharacters:buffer range:localRange];
+
+ /* Get middle part into buffer */
+ localRange.location = 0;
+ localRange.length = aStringLen;
+ [aString getCharacters:(buffer+aRange.location) range:localRange];
+
+ /* Get last part into buffer */
+ localRange.location = aRange.location + aRange.length;
+ localRange.length = selfLen - localRange.location;
+ [self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
+
+ /* Build output string */
+ result = [NSString stringWithCharacters:buffer length:bufferSize];
+
+ NSDeallocateMemoryPages(buffer, bufferSize);
+
+ return result;
+}
+
+@end
+
+
+
+#ifdef main
+# undef main
+#endif
+
+
+/* Main entry point to executable - should *not* be SDL_main! */
+int main (int argc, char **argv)
+{
+ /* Copy the arguments into a global variable */
+ /* This is passed if we are launched by double-clicking */
+ if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
+ gArgv = (char **) SDL_malloc(sizeof (char *) * 2);
+ gArgv[0] = argv[0];
+ gArgv[1] = NULL;
+ gArgc = 1;
+ gFinderLaunch = YES;
+ } else {
+ int i;
+ gArgc = argc;
+ gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1));
+ for (i = 0; i <= argc; i++)
+ gArgv[i] = argv[i];
+ gFinderLaunch = NO;
+ }
+
+#if SDL_USE_NIB_FILE
+ [SDLApplication poseAsClass:[NSApplication class]];
+ NSApplicationMain (argc, argv);
+#else
+ CustomApplicationMain (argc, argv);
+#endif
+ return 0;
+}
+
diff --git a/Recast/Examples/demo.cpp b/Recast/Examples/demo.cpp
new file mode 100644
index 0000000..03a8606
--- /dev/null
+++ b/Recast/Examples/demo.cpp
@@ -0,0 +1,796 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#include
+#include
+#define _USE_MATH_DEFINES
+#include
+#include
+#ifdef WIN32
+# include
+#else
+# include
+#endif
+#include "SDL.h"
+#include "SDL_Opengl.h"
+#include "GLFont.h"
+#include "RecastTimer.h"
+#include "MeshLoaderObj.h"
+#include "Recast.h"
+#include "RecastLog.h"
+#include "RecastDebugDraw.h"
+#include "imgui.h"
+
+#ifdef WIN32
+# define snprintf _snprintf
+#endif
+
+bool intersectSegmentTriangle(const float* sp, const float* sq,
+ const float* a, const float* b, const float* c,
+ float &t)
+{
+ float v, w;
+ float ab[3], ac[3], qp[3], ap[3], norm[3], e[3];
+ vsub(ab, b, a);
+ vsub(ac, c, a);
+ vsub(qp, sp, sq);
+
+ // Compute triangle normal. Can be precalculated or cached if
+ // intersecting multiple segments against the same triangle
+ vcross(norm, ab, ac);
+
+ // Compute denominator d. If d <= 0, segment is parallel to or points
+ // away from triangle, so exit early
+ float d = vdot(qp, norm);
+ if (d <= 0.0f) return false;
+
+ // Compute intersection t value of pq with plane of triangle. A ray
+ // intersects iff 0 <= t. Segment intersects iff 0 <= t <= 1. Delay
+ // dividing by d until intersection has been found to pierce triangle
+ vsub(ap, sp, a);
+ t = vdot(ap, norm);
+ if (t < 0.0f) return false;
+ if (t > d) return false; // For segment; exclude this code line for a ray test
+
+ // Compute barycentric coordinate components and test if within bounds
+ vcross(e, qp, ap);
+ v = vdot(ac, e);
+ if (v < 0.0f || v > d) return false;
+ w = -vdot(ab, e);
+ if (w < 0.0f || v + w > d) return false;
+
+ // Segment/ray intersects triangle. Perform delayed division
+ t /= d;
+
+ return true;
+}
+
+static bool raycast(rcMeshLoaderObj& mesh, float* src, float* dst, float& tmin)
+{
+ float dir[3];
+ vsub(dir, dst, src);
+
+ int nt = mesh.getTriCount();
+ const float* verts = mesh.getVerts();
+ const float* normals = mesh.getNormals();
+ const int* tris = mesh.getTris();
+ tmin = 1.0f;
+ bool hit = false;
+
+ for (int i = 0; i < nt*3; i += 3)
+ {
+ const float* n = &normals[i];
+ if (vdot(dir, n) > 0)
+ continue;
+
+ float t = 1;
+ if (intersectSegmentTriangle(src, dst,
+ &verts[tris[i]*3],
+ &verts[tris[i+1]*3],
+ &verts[tris[i+2]*3], t))
+ {
+ if (t < tmin)
+ tmin = t;
+ hit = true;
+ }
+ }
+
+ return hit;
+}
+
+struct FileList
+{
+ static const int MAX_FILES = 256;
+ inline FileList() : size(0) {}
+ inline ~FileList()
+ {
+ clear();
+ }
+
+ void clear()
+ {
+ for (int i = 0; i < size; ++i)
+ delete [] files[i];
+ size = 0;
+ }
+
+ void add(const char* path)
+ {
+ if (size >= MAX_FILES)
+ return;
+ int n = strlen(path);
+ files[size] = new char[n+1];
+ strcpy(files[size], path);
+ size++;
+ }
+
+ char* files[MAX_FILES];
+ int size;
+};
+
+void scanDirectory(const char* path, const char* ext, FileList& list)
+{
+ list.clear();
+
+#ifdef WIN32
+ _finddata_t dir;
+ char pathWithExt[MAX_PATH];
+ long fh;
+ strcpy(pathWithExt, path);
+ strcat(pathWithExt, "/*");
+ strcat(pathWithExt, ext);
+ fh = _findfirst(pathWithExt, &dir);
+ if (fh == -1L)
+ return;
+ do
+ {
+ list.add(dir.name);
+ }
+ while (_findnext(fh, &dir) == 0);
+ _findclose(fh);
+#else
+ dirent* current = 0;
+ DIR* dp = opendir(path);
+ if (!dp)
+ return;
+
+ while ((current = readdir(dp)) != 0)
+ {
+ int len = strlen(current->d_name);
+ if (len > 4 && strncmp(current->d_name+len-4, ext, 4) == 0)
+ {
+ list.add(current->d_name);
+ }
+ }
+ closedir(dp);
+#endif
+}
+
+
+enum DrawMode
+{
+ DRAWMODE_POLYMESH,
+ DRAWMODE_POLYMESH_TRANS,
+ DRAWMODE_MESH,
+ DRAWMODE_VOXELS,
+ DRAWMODE_VOXELS_WALKABLE,
+ DRAWMODE_COMPACT,
+ DRAWMODE_COMPACT_DISTANCE,
+ DRAWMODE_COMPACT_REGIONS,
+ DRAWMODE_RAW_CONTOURS,
+ DRAWMODE_CONTOURS,
+ MAX_DRAWMODE,
+};
+
+
+GLFont g_font;
+
+void drawText(int x, int y, int dir, const char* text, unsigned int col)
+{
+ if (dir < 0)
+ g_font.drawText((float)x - g_font.getTextLength(text), (float)y, text, col);
+ else
+ g_font.drawText((float)x, (float)y, text, col);
+}
+
+
+rcMeshLoaderObj* g_mesh = 0;
+unsigned char* g_triangleFlags = 0;
+rcHeightfield* g_solid = 0;
+rcCompactHeightfield* g_chf = 0;
+rcContourSet* g_cset = 0;
+rcPolyMesh* g_polyMesh = 0;
+rcConfig g_cfg;
+rcLog g_log;
+
+static bool buildNavigation()
+{
+ delete g_solid;
+ delete g_chf;
+ delete g_cset;
+ delete g_polyMesh;
+ delete [] g_triangleFlags;
+ g_solid = 0;
+ g_chf = 0;
+ g_cset = 0;
+ g_polyMesh = 0;
+ g_triangleFlags = 0;
+
+ g_log.clear();
+ rcSetLog(&g_log);
+
+ if (!g_mesh)
+ {
+ g_log.log(RC_LOG_ERROR, "Input mesh is not valid.");
+ return false;
+ }
+
+
+ rcTimeVal startTime = rcGetPerformanceTimer();
+
+ rcCalcBounds(g_mesh->getVerts(), g_mesh->getVertCount(), g_cfg.bmin, g_cfg.bmax);
+ rcCalcGridSize(g_cfg.bmin, g_cfg.bmax, g_cfg.cs, &g_cfg.width, &g_cfg.height);
+
+ g_log.log(RC_LOG_PROGRESS, "Building navigation");
+ g_log.log(RC_LOG_PROGRESS, " - %d x %d", g_cfg.width, g_cfg.height);
+ g_log.log(RC_LOG_PROGRESS, " - %d verts, %d tris", g_mesh->getVertCount(), g_mesh->getTriCount());
+
+ g_triangleFlags = new unsigned char[g_mesh->getTriCount()];
+ memset(g_triangleFlags, 0, g_mesh->getTriCount());
+ rcMarkWalkableTriangles(g_cfg.walkableSlopeAngle,
+ g_mesh->getTris(), g_mesh->getNormals(), g_mesh->getTriCount(),
+ g_triangleFlags);
+
+ g_solid = new rcHeightfield;
+ g_chf = new rcCompactHeightfield;
+ g_cset = new rcContourSet;
+ g_polyMesh = new rcPolyMesh;
+
+ if (!rcBuildNavMesh(g_cfg, g_mesh->getVerts(), g_mesh->getVertCount(),
+ g_mesh->getTris(), g_triangleFlags, g_mesh->getTriCount(),
+ *g_solid, *g_chf, *g_cset, *g_polyMesh))
+ {
+ g_log.log(RC_LOG_ERROR, "Could not build navmesh.");
+ return false;
+ }
+
+ rcTimeVal endTime = rcGetPerformanceTimer();
+ g_log.log(RC_LOG_PROGRESS, "Build time: %.1f ms", rcGetDeltaTimeUsec(startTime, endTime)/1000.0f);
+ g_log.log(RC_LOG_PROGRESS, "NavMesh");
+ g_log.log(RC_LOG_PROGRESS, " - %d verts, %d polys", g_polyMesh->nverts, g_polyMesh->npolys);
+ const int navMeshDataSize = g_polyMesh->nverts*3*sizeof(unsigned short) +
+ g_polyMesh->npolys*g_polyMesh->nvp*2*sizeof(unsigned short);
+ g_log.log(RC_LOG_PROGRESS, " - Approx data size %.1f kB", (float)navMeshDataSize/1024.f);
+
+ for (int i = 0; i < g_log.getMessageCount(); ++i)
+ {
+ printf("%s\n", g_log.getMessageText(i));
+ }
+
+ return true;
+}
+
+
+int main(int argc, char *argv[])
+{
+ // Init SDL
+ if (SDL_Init(SDL_INIT_EVERYTHING) != 0)
+ {
+ printf("Could not initialise SDL\n");
+ return -1;
+ }
+
+ // Init OpenGL
+ SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
+ SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 32);
+ SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
+ SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
+ SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
+ SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
+
+ int width = 1200;
+ int height = 700;
+ SDL_Surface* screen = SDL_SetVideoMode(width, height, 0, SDL_OPENGL);
+ if (!screen)
+ {
+ printf("Could not initialise SDL opengl\n");
+ return -1;
+ }
+
+ SDL_WM_SetCaption("Recast Demo", 0);
+
+ if(!g_font.create("font.cfnt"))
+ {
+ printf("Could not load font\n");
+ SDL_Quit();
+ return -1;
+ }
+
+ float cellSize = 0.3f;
+ float cellHeight = 0.2f;
+ float agentHeight = 2.0f;
+ float agentRadius = 0.3f;
+ float agentMaxClimb = 0.9f;
+ float agentMaxSlope = 45.0f;
+ float regionMinSize = 50;
+ float regionMergeSize = 20;
+ float edgeMaxLen = 12.0f;
+ float edgeMaxError = 1.5f;
+ float vertsPerPoly = 6.0f;
+ int drawMode = DRAWMODE_POLYMESH;
+ bool showLevels = false;
+ bool showLog = false;
+ char curLevel[256] = "Choose Level...";
+ bool mouseOverMenu = false;
+ FileList fileList;
+
+ float t = 0.0f;
+ Uint32 lastTime = SDL_GetTicks();
+ int mx = 0, my = 0;
+ float rx = 45;
+ float ry = -45;
+ float moveW = 0, moveS = 0, moveA = 0, moveD = 0;
+ float camx = 0, camy = 0, camz = 0, camr=10;
+ float origrx, origry;
+ int origx, origy;
+ bool rotate = false;
+ float rays[3], raye[3];
+ float spos[3] = {0,0,0};
+
+ glEnable(GL_CULL_FACE);
+
+ float fogCol[4] = { 0.1f,0.12f,0.14f,1 };
+ glEnable(GL_FOG);
+ glFogi(GL_FOG_MODE, GL_LINEAR);
+ glFogf(GL_FOG_START, 0);
+ glFogf(GL_FOG_END, 10);
+ glFogfv(GL_FOG_COLOR, fogCol);
+
+ bool done = false;
+ while(!done)
+ {
+ // Handle input events.
+ SDL_Event event;
+ while(SDL_PollEvent(&event))
+ {
+ switch(event.type)
+ {
+ case SDL_KEYDOWN:
+ // Handle any key presses here.
+ if(event.key.keysym.sym == SDLK_ESCAPE)
+ {
+ done = true;
+ }
+ break;
+
+ case SDL_MOUSEBUTTONDOWN:
+ // Handle mouse clicks here.
+ if (!mouseOverMenu)
+ {
+ if (event.button.button == SDL_BUTTON_LEFT)
+ {
+ // Rotate view
+ rotate = true;
+ origx = mx;
+ origy = my;
+ origrx = rx;
+ origry = ry;
+ }
+ else if (event.button.button == SDL_BUTTON_RIGHT)
+ {
+ // Hit test mesh.
+ if (g_mesh)
+ {
+ float t;
+ if (raycast(*g_mesh, rays, raye, t))
+ {
+ spos[0] = rays[0] + (raye[0] - rays[0])*t;
+ spos[1] = rays[1] + (raye[1] - rays[1])*t;
+ spos[2] = rays[2] + (raye[2] - rays[2])*t;
+ }
+ }
+ }
+ }
+ break;
+
+ case SDL_MOUSEBUTTONUP:
+ // Handle mouse clicks here.
+ if(event.button.button == SDL_BUTTON_LEFT)
+ {
+ rotate = false;
+ }
+ break;
+
+ case SDL_MOUSEMOTION:
+ mx = event.motion.x;
+ my = height - 1 - event.motion.y;
+ if (rotate)
+ {
+ int dx = mx - origx;
+ int dy = my - origy;
+ rx = origrx - dy*0.25f;
+ ry = origry + dx*0.25f;
+ }
+ break;
+
+ case SDL_QUIT:
+ done = true;
+ break;
+
+ default:
+ break;
+ }
+ }
+
+ Uint32 time = SDL_GetTicks();
+ float dt = (time - lastTime) / 1000.0f;
+ lastTime = time;
+
+ t += dt;
+
+
+ // Update and render
+ glViewport(0, 0, width, height);
+ glClearColor(0.3f, 0.3f, 0.32f, 1.0f);
+ glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glDisable(GL_TEXTURE_2D);
+
+ // Render 3d
+ glEnable(GL_DEPTH_TEST);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluPerspective(50.0f, (float)width/(float)height, 1.0f, camr);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glRotatef(rx,1,0,0);
+ glRotatef(ry,0,1,0);
+ glTranslatef(-camx, -camy, -camz);
+
+ // Get hit ray position and direction.
+ GLdouble proj[16];
+ GLdouble model[16];
+ GLint view[4];
+ glGetDoublev(GL_PROJECTION_MATRIX, proj);
+ glGetDoublev(GL_MODELVIEW_MATRIX, model);
+ glGetIntegerv(GL_VIEWPORT, view);
+ GLdouble x, y, z;
+ gluUnProject(mx, my, 0.0f, model, proj, view, &x, &y, &z);
+ rays[0] = (float)x; rays[1] = (float)y; rays[2] = (float)z;
+ gluUnProject(mx, my, 1.0f, model, proj, view, &x, &y, &z);
+ raye[0] = (float)x; raye[1] = (float)y; raye[2] = (float)z;
+
+ // Handle keyboard movement.
+ Uint8* keystate = SDL_GetKeyState(NULL);
+ moveW = rcClamp(moveW + dt * 4 * (keystate[SDLK_w] ? 1 : -1), 0.0f, 1.0f);
+ moveS = rcClamp(moveS + dt * 4 * (keystate[SDLK_s] ? 1 : -1), 0.0f, 1.0f);
+ moveA = rcClamp(moveA + dt * 4 * (keystate[SDLK_a] ? 1 : -1), 0.0f, 1.0f);
+ moveD = rcClamp(moveD + dt * 4 * (keystate[SDLK_d] ? 1 : -1), 0.0f, 1.0f);
+
+ float keybSpeed = 22.0f;
+ if (SDL_GetModState() & KMOD_SHIFT)
+ keybSpeed *= 4.0f;
+
+ float movex = (moveD - moveA) * keybSpeed * dt;
+ float movey = (moveS - moveW) * keybSpeed * dt;
+
+ camx += movex * (float)model[0];
+ camy += movex * (float)model[4];
+ camz += movex * (float)model[8];
+
+ camx += movey * (float)model[2];
+ camy += movey * (float)model[6];
+ camz += movey * (float)model[10];
+
+ glEnable(GL_FOG);
+
+ if (drawMode == DRAWMODE_MESH)
+ {
+ if (g_mesh)
+ rcDebugDrawMesh(*g_mesh, g_triangleFlags);
+ }
+ else if (drawMode != DRAWMODE_POLYMESH_TRANS)
+ {
+ if (g_mesh)
+ rcDebugDrawMesh(*g_mesh, 0);
+ }
+
+ glDepthMask(GL_FALSE);
+
+ if (drawMode == DRAWMODE_POLYMESH || drawMode == DRAWMODE_POLYMESH_TRANS)
+ {
+ if (g_polyMesh)
+ rcDebugDrawPolyMesh(*g_polyMesh, g_cfg.bmin, g_cfg.cs, g_cfg.ch);
+ }
+
+ glDepthMask(GL_TRUE);
+
+ if (drawMode == DRAWMODE_COMPACT)
+ {
+ if (g_chf)
+ rcDebugDrawCompactHeightfieldSolid(*g_chf);
+ }
+ if (drawMode == DRAWMODE_COMPACT_DISTANCE)
+ {
+ if (g_chf)
+ rcDebugDrawCompactHeightfieldDistance(*g_chf);
+ }
+ if (drawMode == DRAWMODE_COMPACT_REGIONS)
+ {
+ if (g_chf)
+ rcDebugDrawCompactHeightfieldRegions(*g_chf);
+ }
+ if (drawMode == DRAWMODE_VOXELS)
+ {
+ if (g_solid)
+ rcDebugDrawHeightfieldSolid(*g_solid, g_cfg.bmin, g_cfg.cs, g_cfg.ch);
+ }
+ if (drawMode == DRAWMODE_VOXELS_WALKABLE)
+ {
+ if (g_solid)
+ rcDebugDrawHeightfieldWalkable(*g_solid, g_cfg.bmin, g_cfg.cs, g_cfg.ch);
+ }
+ if (drawMode == DRAWMODE_RAW_CONTOURS)
+ {
+ if (g_cset)
+ rcDebugDrawRawContours(*g_cset, g_cfg.bmin, g_cfg.cs, g_cfg.ch);
+ }
+ if (drawMode == DRAWMODE_CONTOURS)
+ {
+ if (g_cset)
+ rcDebugDrawContours(*g_cset, g_cfg.bmin, g_cfg.cs, g_cfg.ch);
+ }
+
+ glDisable(GL_FOG);
+
+ if (g_mesh)
+ {
+ // Agent dimensions.
+ const float r = agentRadius;
+ const float h = agentHeight;
+ float col[4];
+ col[0] = 0.6f; col[1] = 0.1f; col[2] = 0.1f; col[3] = 0.75f;
+ rcDebugDrawCylinderWire(spos[0]-r, spos[1]+0.02f, spos[2]-r, spos[0]+r, spos[1]+h, spos[2]+r, col);
+
+ glColor4ub(0,0,0,196);
+ glBegin(GL_LINES);
+ glVertex3f(spos[0], spos[1]-agentMaxClimb, spos[2]);
+ glVertex3f(spos[0], spos[1]+agentMaxClimb, spos[2]);
+ glVertex3f(spos[0]-r/2, spos[1]+0.02f, spos[2]);
+ glVertex3f(spos[0]+r/2, spos[1]+0.02f, spos[2]);
+ glVertex3f(spos[0], spos[1]+0.02f, spos[2]-r/2);
+ glVertex3f(spos[0], spos[1]+0.02f, spos[2]+r/2);
+ glEnd();
+
+ // Mesh bbox.
+ col[0] = 1.0f; col[1] = 1.0f; col[2] = 1.0f; col[3] = 0.25f;
+ rcDebugDrawBoxWire(g_cfg.bmin[0], g_cfg.bmin[1], g_cfg.bmin[2],
+ g_cfg.bmax[0], g_cfg.bmax[1], g_cfg.bmax[2], col);
+ }
+
+ // Render GUI
+ glDisable(GL_DEPTH_TEST);
+ glMatrixMode(GL_PROJECTION);
+ glLoadIdentity();
+ gluOrtho2D(0, width, 0, height);
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+
+
+ imguiBeginFrame();
+
+ mouseOverMenu = false;
+
+ static int propScroll = 0;
+ if (imguiBeginScrollArea(GENID, "Properties", width - 250 - 10, 10, 250, height-20, &propScroll))
+ mouseOverMenu = true;
+
+ if (imguiButton(GENID, curLevel))
+ {
+ showLevels = true;
+ scanDirectory("meshes", ".obj", fileList);
+ }
+
+ imguiSeparator();
+
+ if (g_mesh)
+ {
+ if (imguiButton(GENID, "Build"))
+ {
+ memset(&g_cfg, 0, sizeof(g_cfg));
+ g_cfg.cs = cellSize;
+ g_cfg.ch = cellHeight;
+ g_cfg.walkableSlopeAngle = agentMaxSlope;
+ g_cfg.walkableHeight = (int)ceilf(agentHeight / g_cfg.ch);
+ g_cfg.walkableClimb = (int)ceilf(agentMaxClimb / g_cfg.ch);
+ g_cfg.walkableRadius = (int)ceilf(agentRadius / g_cfg.cs);
+ g_cfg.maxEdgeLen = (int)(edgeMaxLen / cellSize);
+ g_cfg.maxSimplificationError = edgeMaxError;
+ g_cfg.minRegionSize = (int)rcSqr(regionMinSize);
+ g_cfg.mergeRegionSize = (int)rcSqr(regionMergeSize);
+ g_cfg.maxVertsPerPoly = (int)vertsPerPoly;
+
+ buildNavigation();
+ }
+ }
+
+ imguiSeparator();
+
+ if (imguiCheck(GENID, "Show Log", showLog))
+ showLog = !showLog;
+
+ imguiSeparator();
+ imguiLabel(GENID, "Rasterization");
+ imguiSlider(GENID, "Cell Size", &cellSize, 0.1f, 1.0f, 0.01f);
+ imguiSlider(GENID, "Cell Height", &cellHeight, 0.1f, 1.0f, 0.01f);
+
+ if (g_mesh)
+ {
+ int gw = 0, gh = 0;
+ rcCalcGridSize(g_cfg.bmin, g_cfg.bmax, cellSize, &gw, &gh);
+ char text[64];
+ snprintf(text, 64, "Grid %d x %d", gw, gh);
+ imguiValue(GENID, text);
+ }
+
+ imguiSeparator();
+ imguiLabel(GENID, "Agent");
+ imguiSlider(GENID, "Height", &agentHeight, 0.1f, 5.0f, 0.1f);
+ imguiSlider(GENID, "Ragius", &agentRadius, 0.1f, 5.0f, 0.1f);
+ imguiSlider(GENID, "Max Climb", &agentMaxClimb, 0.1f, 5.0f, 0.1f);
+ imguiSlider(GENID, "Max Slope", &agentMaxSlope, 0.0f, 90.0f, 1.0f);
+
+ imguiSeparator();
+ imguiLabel(GENID, "Region");
+ imguiSlider(GENID, "Min Region Size", ®ionMinSize, 0.0f, 150.0f, 1.0f);
+ imguiSlider(GENID, "Merged Region Size", ®ionMergeSize, 0.0f, 150.0f, 1.0f);
+
+ imguiSeparator();
+ imguiLabel(GENID, "Polygonization");
+ imguiSlider(GENID, "Max Edge Length", &edgeMaxLen, 0.0f, 50.0f, 1.0f);
+ imguiSlider(GENID, "Max Edge Error", &edgeMaxError, 0.1f, 3.0f, 0.1f);
+ imguiSlider(GENID, "Verts Per Poly", &vertsPerPoly, 3.0f, 12.0f, 1.0f);
+
+ imguiSeparator();
+ imguiLabel(GENID, "Draw");
+ if (imguiCheck(GENID, "Input Mesh", drawMode == DRAWMODE_MESH))
+ drawMode = DRAWMODE_MESH;
+ if (imguiCheck(GENID, "Navmesh", drawMode == DRAWMODE_POLYMESH))
+ drawMode = DRAWMODE_POLYMESH;
+ if (imguiCheck(GENID, "Navmesh Trans", drawMode == DRAWMODE_POLYMESH_TRANS))
+ drawMode = DRAWMODE_POLYMESH_TRANS;
+ if (imguiCheck(GENID, "Voxels", drawMode == DRAWMODE_VOXELS))
+ drawMode = DRAWMODE_VOXELS;
+ if (imguiCheck(GENID, "Walkable Voxels", drawMode == DRAWMODE_VOXELS_WALKABLE))
+ drawMode = DRAWMODE_VOXELS_WALKABLE;
+ if (imguiCheck(GENID, "Compact", drawMode == DRAWMODE_COMPACT))
+ drawMode = DRAWMODE_COMPACT;
+ if (imguiCheck(GENID, "Compact Distance", drawMode == DRAWMODE_COMPACT_DISTANCE))
+ drawMode = DRAWMODE_COMPACT_DISTANCE;
+ if (imguiCheck(GENID, "Compact Regions", drawMode == DRAWMODE_COMPACT_REGIONS))
+ drawMode = DRAWMODE_COMPACT_REGIONS;
+ if (imguiCheck(GENID, "Raw Contours", drawMode == DRAWMODE_RAW_CONTOURS))
+ drawMode = DRAWMODE_RAW_CONTOURS;
+ if (imguiCheck(GENID, "Contours", drawMode == DRAWMODE_CONTOURS))
+ drawMode = DRAWMODE_CONTOURS;
+
+ imguiEndScrollArea();
+
+ // Log
+ if (showLog)
+ {
+ static int logScroll = 0;
+ if (imguiBeginScrollArea(GENID, "Log", 10, 10, width - 300, 200, &logScroll))
+ mouseOverMenu = true;
+ for (int i = 0; i < g_log.getMessageCount(); ++i)
+ imguiLabel(GENID1(i), g_log.getMessageText(i));
+ imguiEndScrollArea();
+ }
+
+ // Level selection dialog.
+ if (showLevels)
+ {
+ static int scroll = 0;
+ if (imguiBeginScrollArea(GENID, "Choose Level", width-10-250-10-200, height-10-250, 200, 250, &scroll))
+ mouseOverMenu = true;
+
+ int levelToLoad = -1;
+ for (int i = 0; i < fileList.size; ++i)
+ {
+ if (imguiItem(GENID1(i), fileList.files[i]))
+ levelToLoad = i;
+ }
+
+ if (levelToLoad != -1)
+ {
+ strncpy(curLevel, fileList.files[levelToLoad], sizeof(curLevel));
+ curLevel[sizeof(curLevel)-1] = '\0';
+ showLevels = false;
+
+ delete g_mesh;
+ delete g_solid;
+ delete g_chf;
+ delete g_cset;
+ delete g_polyMesh;
+ delete [] g_triangleFlags;
+ g_mesh = 0;
+ g_solid = 0;
+ g_chf = 0;
+ g_cset = 0;
+ g_polyMesh = 0;
+ g_triangleFlags = 0;
+
+ g_mesh = new rcMeshLoaderObj;
+
+ char path[256];
+ strcpy(path, "meshes/");
+ strcat(path, curLevel);
+
+ if (!g_mesh->load(path))
+ {
+ printf("Could not load mesh\n");
+ delete g_mesh;
+ g_mesh = 0;
+ }
+
+ if (g_mesh)
+ {
+ rcCalcBounds(g_mesh->getVerts(), g_mesh->getVertCount(), g_cfg.bmin, g_cfg.bmax);
+
+ // Reset camera.
+ camr = sqrtf(rcSqr(g_cfg.bmax[0]-g_cfg.bmin[0]) +
+ rcSqr(g_cfg.bmax[1]-g_cfg.bmin[1]) +
+ rcSqr(g_cfg.bmax[2]-g_cfg.bmin[2])) / 2;
+ camx = (g_cfg.bmax[0] + g_cfg.bmin[0]) / 2 + camr;
+ camy = (g_cfg.bmax[1] + g_cfg.bmin[1]) / 2 + camr;
+ camz = (g_cfg.bmax[2] + g_cfg.bmin[2]) / 2 + camr;
+ camr *= 3;
+ rx = 45;
+ ry = -45;
+
+ glFogf(GL_FOG_START, camr*0.5f);
+ glFogf(GL_FOG_END, camr*2.5f);
+ }
+
+ }
+
+ imguiEndScrollArea();
+
+ }
+
+ imguiEndFrame();
+ imguiRender(&drawText);
+
+ g_font.drawText(10.0f, (float)height-20.0f, "W/S/A/D: Move LMB: Rotate RMB: Place character", GLFont::RGBA(255,255,255,128));
+
+ glEnable(GL_DEPTH_TEST);
+ SDL_GL_SwapBuffers();
+ }
+
+ SDL_Quit();
+
+ delete g_mesh;
+ delete g_solid;
+ delete g_chf;
+ delete g_cset;
+ delete g_polyMesh;
+ delete [] g_triangleFlags;
+
+ return 0;
+}
diff --git a/Recast/Examples/font.cfnt b/Recast/Examples/font.cfnt
new file mode 100644
index 0000000..96a2047
Binary files /dev/null and b/Recast/Examples/font.cfnt differ
diff --git a/Recast/Examples/glfont.cpp b/Recast/Examples/glfont.cpp
new file mode 100644
index 0000000..cd99e42
--- /dev/null
+++ b/Recast/Examples/glfont.cpp
@@ -0,0 +1,285 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#include "GlFont.h"
+#include
+#define _USE_MATH_DEFINES
+#include
+#include
+#include
+
+GLFont::GLFont(int renderVerts) :
+ m_fd(0),
+ m_texId(0),
+ m_verts(0),
+ m_nverts(0),
+ m_maxVerts(renderVerts)
+{
+}
+
+GLFont::~GLFont()
+{
+ if (m_texId)
+ glDeleteTextures(1, (GLuint*)&m_texId);
+ unsigned char* data = (unsigned char*)m_fd;
+ if (data)
+ free(data);
+ if (m_verts)
+ free(m_verts);
+}
+
+bool GLFont::create(const char* fileName)
+{
+ unsigned char* data = 0;
+
+ FILE* fp = fopen(fileName, "rb");
+ if (!fp)
+ return false;
+
+ // Read cache file
+ fseek(fp, 0, SEEK_END);
+ unsigned n = ftell(fp);
+ fseek(fp, 0, SEEK_SET);
+ data = (unsigned char*)malloc(n);
+ fread(data, n, 1, fp);
+ fclose(fp);
+
+ if (!m_verts)
+ m_verts = (RenderVertex*)malloc(m_maxVerts*sizeof(RenderVertex));
+
+ return createFontFromFontData(data);
+}
+
+bool GLFont::createFontFromFontData(unsigned char* data)
+{
+ if (!data)
+ {
+ printf("GLFont::createFontFromFontData: No input data!\n");
+ return false;
+ }
+
+ m_fd = (FontData*)data;
+
+ // Patch kern pointers.
+ for (int i = 0; i < m_fd->charCount; ++i)
+ m_fd->glyphs[i].kern = (KerningPair*)((int)m_fd->glyphs[i].kernOffset + data);
+
+ unsigned char* texData = data + m_fd->textureOffset;
+
+ // Create textures
+ glEnable(GL_TEXTURE_2D);
+ glGenTextures(1, (GLuint*)&m_texId);
+ glBindTexture(GL_TEXTURE_2D, m_texId);
+
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, m_fd->texWidth, m_fd->texHeight, 0,
+ GL_ALPHA, GL_UNSIGNED_BYTE, texData);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+
+ return true;
+}
+
+int GLFont::getFontSize() const
+{
+ return m_fd ? m_fd->fontSize : 0;
+}
+
+int GLFont::getDescender() const
+{
+ return m_fd ? m_fd->descender : 0;
+}
+
+int GLFont::getAscender() const
+{
+ return m_fd ? m_fd->ascender : 0;
+}
+
+float GLFont::getLineHeight() const
+{
+ return m_fd ? m_fd->lineHeight : 0.0f;
+}
+
+float GLFont::getTextLength(const char* text, float size, float tracking)
+{
+ if (!m_texId) return 0.0f;
+ if (!m_fd) return 0.0f;
+
+ float scale = size < 0 ? 1 : size / (float)m_fd->fontSize;
+ float track = scale * m_fd->ascender * tracking / 1000.0f;
+
+ const unsigned char* src = (const unsigned char*)text;
+
+ int prevc = -1;
+ float len = 0.0f;
+ float tx = 0.0f;
+
+ for (; *src; ++src)
+ {
+ int c = (int)*src - m_fd->charMin;
+ if (c < 0 || c >= m_fd->charCount)
+ {
+ prevc = c;
+ continue;
+ }
+
+ CachedGlyph& cg = m_fd->glyphs[c];
+ if (prevc > 0 && prevc < m_fd->charCount)
+ {
+ CachedGlyph& prevcg = m_fd->glyphs[prevc];
+ if (prevcg.nkern != 0)
+ {
+ for (int i = 0; i < prevcg.nkern; ++i)
+ {
+ if (prevcg.kern[i].c == c)
+ {
+ tx += prevcg.kern[i].dx * scale;
+ break;
+ }
+ }
+ }
+ }
+
+ len = tx + (cg.ox + cg.w) * scale;
+
+ tx += cg.adv * scale + track;
+ prevc = c;
+ }
+
+ return len;
+}
+
+void GLFont::drawText(float tx, float ty, const char* text,
+ unsigned int col, float size, float tracking)
+{
+ if (!m_fd) return;
+ if (!m_texId) return;
+ if (!m_verts) return;
+
+ float scale = size < 0 ? 1 : size / (float)m_fd->fontSize;
+ float track = scale * m_fd->ascender * tracking / 1000.0f;
+ float su = 1.0f / m_fd->texWidth;
+ float sv = 1.0f / m_fd->texHeight;
+
+ const unsigned char* src = (const unsigned char*)text;
+
+ RenderVertex* v = &m_verts[m_nverts];
+
+ int prevc = -1;
+
+ for (; *src; ++src)
+ {
+ int c = (int)*src - m_fd->charMin;
+ if (c == '\n')
+ {
+ ty -= getLineHeight();
+ prevc = -1;
+ continue;
+ }
+ if (c < 0 || c >= m_fd->charCount)
+ {
+ prevc = c;
+ continue;
+ }
+
+ CachedGlyph& cg = m_fd->glyphs[c];
+ if (prevc > 0 && prevc < m_fd->charCount)
+ {
+ CachedGlyph& prevcg = m_fd->glyphs[prevc];
+ if (prevcg.nkern != 0)
+ {
+ for (int i = 0; i < prevcg.nkern; ++i)
+ {
+ if (prevcg.kern[i].c == c)
+ {
+ tx += prevcg.kern[i].dx * scale;
+ break;
+ }
+ }
+ }
+ }
+
+ float x0 = floorf(tx + (cg.ox - 1) * scale + 0.5f);
+ float y0 = floorf(ty + (cg.oy - 1) * scale + 0.5f);
+ float x1 = floorf(x0 + (cg.w + 2) * scale + 0.5f);
+ float y1 = floorf(y0 + (cg.h + 2) * scale + 0.5f);
+
+ float u0 = (cg.tx - 1) * su;
+ float v0 = (cg.ty - 1) * sv;
+ float u1 = (cg.tx + cg.w + 1) * su;
+ float v1 = (cg.ty + cg.h + 1) * sv;
+
+ if (m_nverts+6 > m_maxVerts) break;
+
+ v->set(x0, y0, u0, v0, col); v++;
+ v->set(x1, y0, u1, v0, col); v++;
+ v->set(x1, y1, u1, v1, col); v++;
+
+ v->set(x0, y0, u0, v0, col); v++;
+ v->set(x1, y1, u1, v1, col); v++;
+ v->set(x0, y1, u0, v1, col); v++;
+
+ m_nverts += 6;
+
+ tx += cg.adv * scale + track;
+ prevc = c;
+ }
+
+ render();
+}
+
+void GLFont::render()
+{
+ if (!m_fd) return;
+ if (!m_texId) return;
+ if (!m_verts) return;
+
+ // Render
+ glEnable(GL_TEXTURE_2D);
+ glBindTexture(GL_TEXTURE_2D, m_texId);
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+
+ glDisableClientState(GL_NORMAL_ARRAY);
+ glEnableClientState(GL_COLOR_ARRAY);
+ glEnableClientState(GL_VERTEX_ARRAY);
+ glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ glVertexPointer(2, GL_FLOAT, sizeof(RenderVertex), &m_verts[0].x);
+ glTexCoordPointer(2, GL_FLOAT, sizeof(RenderVertex), &m_verts[0].u);
+ glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(RenderVertex), &m_verts[0].col);
+
+ glDrawArrays(GL_TRIANGLES, 0, m_nverts);
+ m_nverts = 0;
+
+ glDisableClientState(GL_COLOR_ARRAY);
+ glDisableClientState(GL_VERTEX_ARRAY);
+ glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ glDisable(GL_TEXTURE_2D);
+}
+
+unsigned int GLFont::RGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+ return (a<<24) | (b<<16) | (g<<8) | r;
+/*#ifdef WIN32
+ return (a<<24) | (b<<16) | (g<<8) | r;
+#else
+ return (r<<24) | (g<<16) | (b<<8) | a;
+#endif*/
+}
diff --git a/Recast/Examples/glfont.h b/Recast/Examples/glfont.h
new file mode 100644
index 0000000..4d7a4e9
--- /dev/null
+++ b/Recast/Examples/glfont.h
@@ -0,0 +1,106 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#ifndef GLFONT_H
+#define GLFONT_H
+
+class GLFont
+{
+public:
+ GLFont(int renderVerts = 4096);
+ ~GLFont();
+
+ bool create(const char* fileName);
+
+ int getFontSize() const;
+ int getDescender() const;
+ int getAscender() const;
+ float getLineHeight() const;
+
+ float getTextLength(const char* text, float size = -1, float tracking = 0);
+ void drawText(float x, float y, const char* text,
+ unsigned int col, float size = -1, float tracking = 0);
+
+ void render();
+
+ void debugDraw();
+
+ static unsigned int RGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a = 255);
+
+private:
+ bool createFontFromFontData(unsigned char* fd);
+
+ struct KerningPair
+ {
+ inline KerningPair() {}
+ inline KerningPair(unsigned char c_, float dx_) : dx(dx_), c(c_) {}
+ inline void Set(unsigned char c_, float dx_) { dx = dx_; c = c_; }
+ float dx;
+ unsigned char c, pad[3];
+ };
+
+ struct CachedGlyph
+ {
+ inline CachedGlyph() : w(0), h(0), ox(0), oy(0), tx(0), ty(0), adv(0.0f), nkern(0), kern(0) {}
+ int w, h;
+ int ox, oy;
+ int tx, ty;
+ float adv;
+ int nkern;
+ union
+ {
+ KerningPair* kern;
+ int kernOffset;
+ };
+ };
+
+ struct FontData
+ {
+ unsigned int endian;
+ unsigned int version;
+ unsigned int dataSize;
+ unsigned int kernOffset;
+ unsigned int textureOffset;
+ int fontSize;
+ unsigned int texWidth;
+ unsigned int texHeight;
+ int numMipmaps;
+ int ascender;
+ int descender;
+ int lineHeight;
+ int charMin;
+ int charCount;
+ CachedGlyph glyphs[1];
+ };
+
+ FontData* m_fd;
+ unsigned int m_texId;
+
+ struct RenderVertex
+ {
+ inline void set(float x_, float y_, float u_, float v_, unsigned int c) { x=x_; y=y_; u=u_; v=v_; col=c; }
+ float x, y, u, v;
+ unsigned int col;
+ };
+ RenderVertex* m_verts;
+ int m_nverts;
+ const int m_maxVerts;
+};
+
+
+#endif // GLFONT_H
diff --git a/Recast/Examples/imgui.cpp b/Recast/Examples/imgui.cpp
new file mode 100644
index 0000000..2869452
--- /dev/null
+++ b/Recast/Examples/imgui.cpp
@@ -0,0 +1,851 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#include
+#define _USE_MATH_DEFINES
+#include
+#include "imgui.h"
+#include "SDL.h"
+#include "SDL_opengl.h"
+
+#ifdef WIN32
+# define snprintf _snprintf
+#endif
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+enum GfxCmdType
+{
+ GFXCMD_RECT,
+ GFXCMD_TRIANGLE,
+ GFXCMD_TEXT,
+ GFXCMD_SCISSOR,
+};
+
+struct GfxRect
+{
+ short x,y,w,h,r;
+};
+struct GfxText
+{
+ short x,y,dir;
+ const char* text;
+};
+
+struct GfxCmd
+{
+ char type;
+ char flags;
+ char pad[2];
+ unsigned int col;
+ union
+ {
+ GfxRect rect;
+ GfxText text;
+ };
+};
+
+unsigned int RGBA(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+ return (r) | (g << 8) | (b << 16) | (a << 24);
+}
+
+static const unsigned TEXT_POOL_SIZE = 4096;
+static char g_textPool[TEXT_POOL_SIZE];
+static unsigned g_textPoolSize = 0;
+const char* allocText(const char* text)
+{
+ unsigned len = strlen(text)+1;
+ if (g_textPoolSize + len >= TEXT_POOL_SIZE)
+ return 0;
+ char* dst = &g_textPool[g_textPoolSize];
+ memcpy(dst, text, len);
+ g_textPoolSize += len;
+ return dst;
+}
+
+static const unsigned GFXCMD_QUEUE_SIZE = 1024;
+static GfxCmd g_gfxCmdQueue[GFXCMD_QUEUE_SIZE];
+static unsigned g_gfxCmdQueueSize = 0;
+
+void resetGfxCmdQueue()
+{
+ g_gfxCmdQueueSize = 0;
+ g_textPoolSize = 0;
+}
+
+
+static const unsigned TEMP_COORD_COUNT = 100;
+static float g_tempCoords[TEMP_COORD_COUNT*2];
+static float g_tempNormals[TEMP_COORD_COUNT*2];
+
+static void drawPolygon(const float* coords, unsigned numCoords, float r, unsigned int col)
+{
+ if (numCoords > TEMP_COORD_COUNT) numCoords = TEMP_COORD_COUNT;
+
+ for (unsigned i = 0, j = numCoords-1; i < numCoords; j=i++)
+ {
+ const float* v0 = &coords[j*2];
+ const float* v1 = &coords[i*2];
+ float dx = v1[0] - v0[0];
+ float dy = v1[1] - v0[1];
+ float d = sqrtf(dx*dx+dy*dy);
+ if (d > 0)
+ {
+ d = 1.0f/d;
+ dx *= d;
+ dy *= d;
+ }
+ g_tempNormals[j*2+0] = dy;
+ g_tempNormals[j*2+1] = -dx;
+ }
+
+ for (unsigned i = 0, j = numCoords-1; i < numCoords; j=i++)
+ {
+ float dlx0 = g_tempNormals[j*2+0];
+ float dly0 = g_tempNormals[j*2+1];
+ float dlx1 = g_tempNormals[i*2+0];
+ float dly1 = g_tempNormals[i*2+1];
+ float dmx = (dlx0 + dlx1) * 0.5f;
+ float dmy = (dly0 + dly1) * 0.5f;
+ float dmr2 = dmx*dmx + dmy*dmy;
+ if (dmr2 > 0.000001f)
+ {
+ float scale = 1.0f / dmr2;
+ if (scale > 10.0f) scale = 10.0f;
+ dmx *= scale;
+ dmy *= scale;
+ }
+ g_tempCoords[i*2+0] = coords[i*2+0]+dmx*r;
+ g_tempCoords[i*2+1] = coords[i*2+1]+dmy*r;
+ }
+
+ unsigned int colTrans = RGBA(col&0xff, (col>>8)&0xff, (col>>16)&0xff, 0);
+
+ glBegin(GL_TRIANGLES);
+
+ glColor4ubv((GLubyte*)&col);
+
+ for (unsigned i = 0, j = numCoords-1; i < numCoords; j=i++)
+ {
+ glVertex2fv(&coords[i*2]);
+ glVertex2fv(&coords[j*2]);
+ glColor4ubv((GLubyte*)&colTrans);
+ glVertex2fv(&g_tempCoords[j*2]);
+
+ glVertex2fv(&g_tempCoords[j*2]);
+ glVertex2fv(&g_tempCoords[i*2]);
+
+ glColor4ubv((GLubyte*)&col);
+ glVertex2fv(&coords[i*2]);
+ }
+
+ glColor4ubv((GLubyte*)&col);
+ for (unsigned i = 2; i < numCoords; ++i)
+ {
+ glVertex2fv(&coords[0]);
+ glVertex2fv(&coords[(i-1)*2]);
+ glVertex2fv(&coords[i*2]);
+ }
+
+ glEnd();
+}
+
+static const int CIRCLE_VERTS = 8*4;
+static float g_circleVerts[CIRCLE_VERTS*2];
+static bool g_circleVertsInitialized = false;
+
+const float* getCircleVerts()
+{
+ if (!g_circleVertsInitialized)
+ {
+ g_circleVertsInitialized = true;
+ for (unsigned i = 0; i < CIRCLE_VERTS; ++i)
+ {
+ float a = (float)i/(float)CIRCLE_VERTS * (float)M_PI*2;
+ g_circleVerts[i*2+0] = cosf(a);
+ g_circleVerts[i*2+1] = sinf(a);
+ }
+ }
+ return g_circleVerts;
+}
+
+static void drawRect(float x, float y, float w, float h, float fth, unsigned int col)
+{
+ float verts[4*2] =
+ {
+ x, y,
+ x+w, y,
+ x+w, y+h,
+ x, y+h,
+ };
+ drawPolygon(verts, 4, fth, col);
+}
+
+static void drawEllipse(float x, float y, float w, float h, float fth, unsigned int col)
+{
+ float verts[CIRCLE_VERTS*2];
+ const float* cverts = getCircleVerts();
+ float* v = verts;
+
+ for (unsigned i = 0; i < CIRCLE_VERTS; ++i)
+ {
+ *v++ = x + cverts[i*2]*w;
+ *v++ = y + cverts[i*2+1]*h;
+ }
+
+ drawPolygon(verts, CIRCLE_VERTS, fth, col);
+}
+
+static void drawRoundedRect(float x, float y, float w, float h, float r, float fth, unsigned int col)
+{
+ const unsigned n = CIRCLE_VERTS/4;
+ float verts[(n+1)*4*2];
+ const float* cverts = getCircleVerts();
+ float* v = verts;
+
+ for (unsigned i = 0; i <= n; ++i)
+ {
+ *v++ = x+w-r + cverts[i*2]*r;
+ *v++ = y+h-r + cverts[i*2+1]*r;
+ }
+
+ for (unsigned i = n; i <= n*2; ++i)
+ {
+ *v++ = x+r + cverts[i*2]*r;
+ *v++ = y+h-r + cverts[i*2+1]*r;
+ }
+
+ for (unsigned i = n*2; i <= n*3; ++i)
+ {
+ *v++ = x+r + cverts[i*2]*r;
+ *v++ = y+r + cverts[i*2+1]*r;
+ }
+
+ for (unsigned i = n*3; i < n*4; ++i)
+ {
+ *v++ = x+w-r + cverts[i*2]*r;
+ *v++ = y+r + cverts[i*2+1]*r;
+ }
+ *v++ = x+w-r + cverts[0]*r;
+ *v++ = y+r + cverts[1]*r;
+
+ drawPolygon(verts, (n+1)*4, fth, col);
+}
+
+static void drawLine(float x0, float y0, float x1, float y1, float r, float fth, unsigned int col)
+{
+ float dx = x1-x0;
+ float dy = y1-y0;
+ float d = sqrtf(dx*dx+dy*dy);
+ if (d > 0.0001f)
+ {
+ d = 1.0f/d;
+ dx *= d;
+ dy *= d;
+ }
+ float t = dx;
+ dx = dy;
+ dy = -t;
+ float verts[4*2];
+ r -= fth;
+ r *= 0.5f;
+ if (r < 0.01f) r = 0.01f;
+ dx *= r;
+ dy *= r;
+
+ verts[0] = x0-dx;
+ verts[1] = y0-dy;
+
+ verts[2] = x0+dx;
+ verts[3] = y0+dy;
+
+ verts[4] = x1+dx;
+ verts[5] = y1+dy;
+
+ verts[6] = x1-dx;
+ verts[7] = y1-dy;
+
+ drawPolygon(verts, 4, fth, col);
+}
+
+
+void renderGfxCmdQueue(void (*drawText)(int x, int y, int dir, const char* text, unsigned int col))
+{
+ glDisable(GL_SCISSOR_TEST);
+ for (unsigned i = 0; i < g_gfxCmdQueueSize; ++i)
+ {
+ const GfxCmd& cmd = g_gfxCmdQueue[i];
+ if (cmd.type == GFXCMD_RECT)
+ {
+ if (cmd.rect.r == 0)
+ {
+ drawRect((float)cmd.rect.x+0.5f, (float)cmd.rect.y+0.5f,
+ (float)cmd.rect.w-1, (float)cmd.rect.h-1,
+ 1.0f, cmd.col);
+ }
+ else
+ {
+ drawRoundedRect((float)cmd.rect.x+0.5f, (float)cmd.rect.y+0.5f,
+ (float)cmd.rect.w-1, (float)cmd.rect.h-1,
+ (float)cmd.rect.r, 1.0f, cmd.col);
+ }
+ }
+ else if (cmd.type == GFXCMD_TRIANGLE)
+ {
+ glColor4ub(cmd.col&0xff, (cmd.col>>8)&0xff, (cmd.col>>16)&0xff, (cmd.col>>24)&0xff);
+ if (cmd.flags == 1)
+ {
+ const float verts[3*2] =
+ {
+ (float)cmd.rect.x+0.5f, (float)cmd.rect.y+0.5f,
+ (float)cmd.rect.x+0.5f+(float)cmd.rect.w-1, (float)cmd.rect.y+0.5f+(float)cmd.rect.h/2-0.5f,
+ (float)cmd.rect.x+0.5f, (float)cmd.rect.y+0.5f+(float)cmd.rect.h-1,
+ };
+ drawPolygon(verts, 3, 1.0f, cmd.col);
+ }
+ if (cmd.flags == 2)
+ {
+ const float verts[3*2] =
+ {
+ (float)cmd.rect.x+0.5f, (float)cmd.rect.y+(float)cmd.rect.h-1,
+ (float)cmd.rect.x+0.5f+(float)cmd.rect.w/2-0.5f, (float)cmd.rect.y+0.5f,
+ (float)cmd.rect.x+0.5f+(float)cmd.rect.w-1, (float)cmd.rect.y+0.5f+(float)cmd.rect.h-1,
+ };
+ drawPolygon(verts, 3, 1.0f, cmd.col);
+ }
+ }
+ else if (cmd.type == GFXCMD_TEXT)
+ {
+ drawText(cmd.text.x, cmd.text.y, cmd.text.dir, cmd.text.text, cmd.col);
+ }
+ else if (cmd.type == GFXCMD_SCISSOR)
+ {
+ if (cmd.flags)
+ {
+ glEnable(GL_SCISSOR_TEST);
+ glScissor(cmd.rect.x, cmd.rect.y, cmd.rect.w, cmd.rect.h);
+ }
+ else
+ {
+ glDisable(GL_SCISSOR_TEST);
+ }
+ }
+ }
+ glDisable(GL_SCISSOR_TEST);
+}
+
+void addGfxCmdScissor(int x, int y, int w, int h)
+{
+ if (g_gfxCmdQueueSize >= GFXCMD_QUEUE_SIZE)
+ return;
+ GfxCmd& cmd = g_gfxCmdQueue[g_gfxCmdQueueSize++];
+ cmd.type = GFXCMD_SCISSOR;
+ cmd.flags = x < 0 ? 0 : 1; // on/off flag.
+ cmd.col = 0;
+ cmd.rect.x = (short)x;
+ cmd.rect.y = (short)y;
+ cmd.rect.w = (short)w;
+ cmd.rect.h = (short)h;
+}
+
+void addGfxCmdRect(int x, int y, int w, int h, unsigned int color)
+{
+ if (g_gfxCmdQueueSize >= GFXCMD_QUEUE_SIZE)
+ return;
+ GfxCmd& cmd = g_gfxCmdQueue[g_gfxCmdQueueSize++];
+ cmd.type = GFXCMD_RECT;
+ cmd.flags = 0;
+ cmd.col = color;
+ cmd.rect.x = (short)x;
+ cmd.rect.y = (short)y;
+ cmd.rect.w = (short)w;
+ cmd.rect.h = (short)h;
+ cmd.rect.r = 0;
+}
+
+void addGfxCmdRoundedRect(int x, int y, int w, int h, int r, unsigned int color)
+{
+ if (g_gfxCmdQueueSize >= GFXCMD_QUEUE_SIZE)
+ return;
+ GfxCmd& cmd = g_gfxCmdQueue[g_gfxCmdQueueSize++];
+ cmd.type = GFXCMD_RECT;
+ cmd.flags = 0;
+ cmd.col = color;
+ cmd.rect.x = (short)x;
+ cmd.rect.y = (short)y;
+ cmd.rect.w = (short)w;
+ cmd.rect.h = (short)h;
+ cmd.rect.r = (short)r;
+}
+
+void addGfxCmdTriangle(int x, int y, int w, int h, int flags, unsigned int color)
+{
+ if (g_gfxCmdQueueSize >= GFXCMD_QUEUE_SIZE)
+ return;
+ GfxCmd& cmd = g_gfxCmdQueue[g_gfxCmdQueueSize++];
+ cmd.type = GFXCMD_TRIANGLE;
+ cmd.flags = (char)flags;
+ cmd.col = color;
+ cmd.rect.x = (short)x;
+ cmd.rect.y = (short)y;
+ cmd.rect.w = (short)w;
+ cmd.rect.h = (short)h;
+}
+
+void addGfxCmdText(int x, int y, int dir, const char* text, unsigned int color)
+{
+ if (g_gfxCmdQueueSize >= GFXCMD_QUEUE_SIZE)
+ return;
+ GfxCmd& cmd = g_gfxCmdQueue[g_gfxCmdQueueSize++];
+ cmd.type = GFXCMD_TEXT;
+ cmd.flags = 0;
+ cmd.col = color;
+ cmd.text.x = (short)x;
+ cmd.text.y = (short)y;
+ cmd.text.dir = (short)dir;
+ cmd.text.text = allocText(text);
+}
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+struct GuiState
+{
+ GuiState() :
+ mbutPressed(false), mbutReleased(false), mbut(false), mx(-1), my(-1),
+ isHot(false), isActive(false), wentActive(false),
+ dragX(0), dragY(0), dragOrig(0),
+ widgetX(0), widgetY(0), widgetW(100),
+ active(0), hot(0), hotToBe(0)
+ {
+ }
+
+ bool mbutPressed, mbutReleased;
+ bool mbut;
+ int mx,my;
+ unsigned int active;
+ unsigned int hot;
+ unsigned int hotToBe;
+ bool isHot;
+ bool isActive;
+ bool wentActive;
+ int dragX, dragY;
+ float dragOrig;
+ int widgetX, widgetY, widgetW;
+};
+
+static GuiState g_state;
+
+inline bool anyActive()
+{
+ return g_state.active != 0;
+}
+
+inline bool isActive(unsigned int id)
+{
+ return g_state.active == id;
+}
+
+inline bool isHot(unsigned int id)
+{
+ return g_state.hot == id;
+}
+
+inline bool inRect(int x, int y, int w, int h)
+{
+ return g_state.mx >= x && g_state.mx <= x+w && g_state.my >= y && g_state.my <= y+h;
+}
+
+void clearInput()
+{
+ g_state.mbutPressed = false;
+ g_state.mbutReleased = false;
+}
+
+void clearActive(void)
+{
+ g_state.active = 0;
+ // mark all UI for this frame as processed
+ clearInput();
+}
+
+void setActive(unsigned int id)
+{
+ g_state.active = id;
+ g_state.wentActive = true;
+}
+
+void setHot(unsigned int id)
+{
+ g_state.hotToBe = id;
+}
+
+
+bool buttonLogic(unsigned int id, bool over)
+{
+ bool res = false;
+ // process down
+ if (!anyActive())
+ {
+ if (over)
+ setHot(id);
+ if (isHot(id) && g_state.mbutPressed)
+ setActive(id);
+ }
+
+ // if button is active, then react on left up
+ if (isActive(id))
+ {
+ g_state.isActive = true;
+ if (over)
+ setHot(id);
+ if (g_state.mbutReleased)
+ {
+ if (isHot(id))
+ res = true;
+ clearActive();
+ }
+ }
+
+ if (isHot(id))
+ g_state.isHot = true;
+
+ return res;
+}
+
+static void updateInput()
+{
+ int mx, my;
+ Uint8 state = SDL_GetMouseState(&mx, &my);
+ bool mbut = (state & SDL_BUTTON_LMASK) != 0;
+ SDL_Surface* screen = SDL_GetVideoSurface();
+ my = screen->h-1 - my;
+
+ g_state.mx = mx;
+ g_state.my = my;
+ g_state.mbutPressed = !g_state.mbut && mbut;
+ g_state.mbutReleased = g_state.mbut && !mbut;
+ g_state.mbut = mbut;
+}
+
+void imguiBeginFrame()
+{
+ updateInput();
+
+ g_state.hot = g_state.hotToBe;
+ g_state.hotToBe = 0;
+
+ g_state.wentActive = false;
+ g_state.isActive = false;
+ g_state.isHot = false;
+
+ g_state.widgetX = 0;
+ g_state.widgetY = 0;
+ g_state.widgetW = 0;
+
+ resetGfxCmdQueue();
+}
+
+void imguiEndFrame()
+{
+ clearInput();
+}
+
+void imguiRender(void (*drawText)(int x, int y, int dir, const char* text, unsigned int col))
+{
+ renderGfxCmdQueue(drawText);
+}
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+static const int BUTTON_HEIGHT = 20;
+static const int SLIDER_HEIGHT = 20;
+static const int SLIDER_MARKER_WIDTH = 10;
+static const int CHECK_SIZE = 8;
+static const int DEFAULT_SPACING = 4;
+static const int TEXT_HEIGHT = 8;
+static const int SCROLL_AREA_PADDING = 6;
+static const int INTEND_SIZE = 16;
+static const int AREA_HEADER = 28;
+
+static int g_scrollTop = 0;
+static int g_scrollBottom = 0;
+static int g_scrollRight = 0;
+static int g_scrollAreaTop = 0;
+static int* g_scrollVal = 0;
+static int g_focusTop = 0;
+static int g_focusBottom = 0;
+static unsigned int g_scrollId = 0;
+
+bool imguiBeginScrollArea(unsigned int id, const char* name, int x, int y, int w, int h, int* scroll)
+{
+ g_scrollId = id;
+
+ g_state.widgetX = x + SCROLL_AREA_PADDING;
+ g_state.widgetY = y+h-AREA_HEADER + (*scroll);
+ g_state.widgetW = w - SCROLL_AREA_PADDING*4;
+ g_scrollTop = y-AREA_HEADER+h;
+ g_scrollBottom = y+SCROLL_AREA_PADDING;
+ g_scrollRight = x+w - SCROLL_AREA_PADDING*3;
+ g_scrollVal = scroll;
+
+ g_scrollAreaTop = g_state.widgetY;
+
+ g_focusTop = y-AREA_HEADER;
+ g_focusBottom = y-AREA_HEADER+h;
+
+ addGfxCmdRoundedRect(x, y, w, h, 6, RGBA(0,0,0,192));
+
+ addGfxCmdText(x+AREA_HEADER/2, y+h-AREA_HEADER/2-TEXT_HEIGHT/2, 1, name, RGBA(255,255,255,128));
+
+ addGfxCmdScissor(x+SCROLL_AREA_PADDING, y+SCROLL_AREA_PADDING, w-SCROLL_AREA_PADDING*4, h-AREA_HEADER-SCROLL_AREA_PADDING);
+
+ return inRect(x, y, w, h);
+}
+
+void imguiEndScrollArea()
+{
+ // Disable scissoring.
+ addGfxCmdScissor(-1,-1,-1,-1);
+
+ // Draw scroll bar
+ int x = g_scrollRight+SCROLL_AREA_PADDING/2;
+ int y = g_scrollBottom;
+ int w = SCROLL_AREA_PADDING*2;
+ int h = g_scrollTop - g_scrollBottom;
+
+ int stop = g_scrollAreaTop;
+ int sbot = g_state.widgetY;
+ int sh = stop - sbot; // The scrollable area height.
+
+ float barHeight = (float)h/(float)sh;
+
+ if (barHeight < 1)
+ {
+ float barY = (float)(y - sbot)/(float)sh;
+ if (barY < 0) barY = 0;
+ if (barY > 1) barY = 1;
+
+ // Handle scroll bar logic.
+ unsigned int hid = g_scrollId;
+ int hx = x;
+ int hy = y + (int)(barY*h);
+ int hw = w;
+ int hh = (int)(barHeight*h);
+
+ const int range = h - (hh-1);
+ bool over = inRect(hx, hy, hw, hh);
+ buttonLogic(hid, over);
+ if (isActive(hid))
+ {
+ float u = (float)(hy-y) / (float)range;
+ if (g_state.wentActive)
+ {
+ g_state.dragY = g_state.my;
+ g_state.dragOrig = u;
+ }
+ if (g_state.dragY != g_state.my)
+ {
+ u = g_state.dragOrig + (g_state.my - g_state.dragY) / (float)range;
+ if (u < 0) u = 0;
+ if (u > 1) u = 1;
+ *g_scrollVal = (int)((1-u) * (sh - h));
+ }
+ }
+
+ // BG
+ addGfxCmdRoundedRect(x, y, w, h, w/2-1, RGBA(0,0,0,196));
+ // Bar
+ if (isActive(hid))
+ addGfxCmdRoundedRect(hx, hy, hw, hh, w/2-1, RGBA(255,196,0,196));
+ else
+ addGfxCmdRoundedRect(hx, hy, hw, hh, w/2-1, isHot(hid) ? RGBA(255,196,0,96) : RGBA(255,255,255,64));
+ }
+}
+
+bool imguiButton(unsigned int id, const char* text)
+{
+ int x = g_state.widgetX;
+ int y = g_state.widgetY - BUTTON_HEIGHT;
+ int w = g_state.widgetW;
+ int h = BUTTON_HEIGHT;
+ g_state.widgetY -= BUTTON_HEIGHT + DEFAULT_SPACING;
+
+ bool over = inRect(x, y, w, h);
+ bool res = buttonLogic(id, over);
+
+ addGfxCmdRoundedRect(x, y, w, h, BUTTON_HEIGHT/2-1, RGBA(128,128,128, isActive(id)?196:96));
+ addGfxCmdText(x+BUTTON_HEIGHT/2, y+BUTTON_HEIGHT/2-TEXT_HEIGHT/2, 1, text, isHot(id) ? RGBA(255,196,0,255) : RGBA(255,255,255,200));
+
+ return res;
+}
+
+bool imguiItem(unsigned int id, const char* text)
+{
+ int x = g_state.widgetX;
+ int y = g_state.widgetY - BUTTON_HEIGHT;
+ int w = g_state.widgetW;
+ int h = BUTTON_HEIGHT;
+ g_state.widgetY -= BUTTON_HEIGHT + DEFAULT_SPACING;
+
+ bool over = inRect(x, y, w, h);
+ bool res = buttonLogic(id, over);
+
+ if (isHot(id))
+ addGfxCmdRoundedRect(x, y, w, h, 2, RGBA(255,196,0,isActive(id)?196:96));
+ addGfxCmdText(x+BUTTON_HEIGHT/2, y+BUTTON_HEIGHT/2-TEXT_HEIGHT/2, 1, text, RGBA(255,255,255,200));
+
+ return res;
+}
+
+bool imguiCheck(unsigned int id, const char* text, bool checked)
+{
+ int x = g_state.widgetX;
+ int y = g_state.widgetY - BUTTON_HEIGHT;
+ int w = g_state.widgetW;
+ int h = BUTTON_HEIGHT;
+ g_state.widgetY -= BUTTON_HEIGHT + DEFAULT_SPACING;
+
+ bool over = inRect(x, y, w, h);
+ bool res = buttonLogic(id, over);
+
+ const int cx = x+BUTTON_HEIGHT/2-CHECK_SIZE/2;
+ const int cy = y+BUTTON_HEIGHT/2-CHECK_SIZE/2;
+ addGfxCmdRoundedRect(cx-3, cy-3, CHECK_SIZE+6, CHECK_SIZE+6, 4, RGBA(128,128,128, isActive(id)?196:96));
+ if (checked)
+ addGfxCmdRoundedRect(cx, cy, CHECK_SIZE, CHECK_SIZE, CHECK_SIZE/2-1, RGBA(255,255,255,isActive(id)?255:200));
+
+ addGfxCmdText(x+BUTTON_HEIGHT, y+BUTTON_HEIGHT/2-TEXT_HEIGHT/2, 1, text, isHot(id) ? RGBA(255,196,0,255) : RGBA(255,255,255,200));
+
+ return res;
+}
+
+bool imguiCollapse(unsigned int id, const char* text, bool checked)
+{
+ int x = g_state.widgetX;
+ int y = g_state.widgetY - BUTTON_HEIGHT;
+ int w = g_state.widgetW;
+ int h = BUTTON_HEIGHT;
+ g_state.widgetY -= BUTTON_HEIGHT; // + DEFAULT_SPACING;
+
+ const int cx = x+BUTTON_HEIGHT/2-CHECK_SIZE/2;
+ const int cy = y+BUTTON_HEIGHT/2-CHECK_SIZE/2;
+
+ bool over = inRect(x, y, w, h);
+ bool res = buttonLogic(id, over);
+
+ if (checked)
+ addGfxCmdTriangle(cx, cy, CHECK_SIZE, CHECK_SIZE, 1, RGBA(255,255,255,isActive(id)?255:200));
+ else
+ addGfxCmdTriangle(cx, cy, CHECK_SIZE, CHECK_SIZE, 2, RGBA(255,255,255,isActive(id)?255:200));
+
+ addGfxCmdText(x+BUTTON_HEIGHT, y+BUTTON_HEIGHT/2-TEXT_HEIGHT/2, 1, text, isHot(id) ? RGBA(255,196,0,255) : RGBA(255,255,255,200));
+
+ return res;
+}
+
+void imguiLabel(unsigned int /*id*/, const char* text)
+{
+ int x = g_state.widgetX;
+ int y = g_state.widgetY - BUTTON_HEIGHT;
+ g_state.widgetY -= BUTTON_HEIGHT;
+ addGfxCmdText(x, y+BUTTON_HEIGHT/2-TEXT_HEIGHT/2, 1, text, RGBA(255,255,255,255));
+}
+
+void imguiValue(unsigned int /*id*/, const char* text)
+{
+ const int x = g_state.widgetX;
+ const int y = g_state.widgetY - BUTTON_HEIGHT;
+ const int w = g_state.widgetW;
+ g_state.widgetY -= BUTTON_HEIGHT;
+
+ addGfxCmdText(x+w-BUTTON_HEIGHT/2, y+BUTTON_HEIGHT/2-TEXT_HEIGHT/2, -1, text, RGBA(255,255,255,200));
+}
+
+bool imguiSlider(unsigned int id, const char* text, float* val, float vmin, float vmax, float vinc)
+{
+ int x = g_state.widgetX;
+ int y = g_state.widgetY - BUTTON_HEIGHT;
+ int w = g_state.widgetW;
+ int h = SLIDER_HEIGHT;
+ g_state.widgetY -= SLIDER_HEIGHT + DEFAULT_SPACING;
+
+ addGfxCmdRoundedRect(x, y, w, h, 4, RGBA(0,0,0,128));
+
+ const int range = w - SLIDER_MARKER_WIDTH;
+
+ float u = (*val - vmin) / (vmax-vmin);
+ if (u < 0) u = 0;
+ if (u > 1) u = 1;
+ int m = (int)(u * range);
+
+ bool over = inRect(x+m, y, SLIDER_MARKER_WIDTH, SLIDER_HEIGHT);
+ bool res = buttonLogic(id, over);
+ bool valChanged = false;
+
+ if (isActive(id))
+ {
+ if (g_state.wentActive)
+ {
+ g_state.dragX = g_state.mx;
+ g_state.dragOrig = u;
+ }
+ if (g_state.dragX != g_state.mx)
+ {
+ u = g_state.dragOrig + (float)(g_state.mx - g_state.dragX) / (float)range;
+ if (u < 0) u = 0;
+ if (u > 1) u = 1;
+ *val = vmin + u*(vmax-vmin);
+ *val = floorf(*val / vinc)*vinc; // Snap to vinc
+ m = (int)(u * range);
+ valChanged = true;
+ }
+ }
+
+ if (isActive(id))
+ addGfxCmdRoundedRect(x+m, y, SLIDER_MARKER_WIDTH, SLIDER_HEIGHT, 4, RGBA(255,255,255,255));
+ else
+ addGfxCmdRoundedRect(x+m, y, SLIDER_MARKER_WIDTH, SLIDER_HEIGHT, 4, isHot(id) ? RGBA(255,196,0,128) : RGBA(255,255,255,64));
+
+ int digits = (int)(ceilf(log10f(vinc)));
+ char fmt[16];
+ snprintf(fmt, 16, "%%.%df", digits >= 0 ? 0 : -digits);
+ char msg[128];
+ snprintf(msg, 128, fmt, *val);
+
+ addGfxCmdText(x+SLIDER_HEIGHT/2, y+SLIDER_HEIGHT/2-TEXT_HEIGHT/2, 1, text, isHot(id) ? RGBA(255,196,0,255) : RGBA(255,255,255,200));
+ addGfxCmdText(x+w-SLIDER_HEIGHT/2, y+SLIDER_HEIGHT/2-TEXT_HEIGHT/2, -1, msg, isHot(id) ? RGBA(255,196,0,255) : RGBA(255,255,255,200));
+
+ return res || valChanged;
+}
+
+
+void imguiIndent()
+{
+ g_state.widgetX += INTEND_SIZE;
+ g_state.widgetW -= INTEND_SIZE;
+}
+
+void imguiUnindent()
+{
+ g_state.widgetX -= INTEND_SIZE;
+ g_state.widgetW += INTEND_SIZE;
+}
+
+void imguiSeparator()
+{
+ g_state.widgetY -= DEFAULT_SPACING*3;
+}
\ No newline at end of file
diff --git a/Recast/Examples/imgui.h b/Recast/Examples/imgui.h
new file mode 100644
index 0000000..16e80e0
--- /dev/null
+++ b/Recast/Examples/imgui.h
@@ -0,0 +1,45 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#ifndef IMGUI_H
+#define IMGUI_H
+
+#define GENID ((__LINE__) << 16)
+#define GENID1(x) ((__LINE__) << 16 | (x))
+
+void imguiBeginFrame();
+void imguiEndFrame();
+void imguiRender(void (*drawText)(int x, int y, int dir, const char* text, unsigned int col));
+
+bool imguiBeginScrollArea(unsigned int id, const char* name, int x, int y, int w, int h, int* scroll);
+void imguiEndScrollArea();
+
+void imguiIndent();
+void imguiUnindent();
+void imguiSeparator();
+
+bool imguiButton(unsigned int id, const char* text);
+bool imguiItem(unsigned int id, const char* text);
+bool imguiCheck(unsigned int id, const char* text, bool checked);
+bool imguiCollapse(unsigned int id, const char* text, bool checked);
+void imguiLabel(unsigned int id, const char* text);
+void imguiValue(unsigned int id, const char* text);
+bool imguiSlider(unsigned int id, const char* text, float* val, float vmin, float vmax, float vinc);
+
+
+#endif // IMGUI_H
\ No newline at end of file
diff --git a/Recast/Include/Recast.h b/Recast/Include/Recast.h
new file mode 100644
index 0000000..064304f
--- /dev/null
+++ b/Recast/Include/Recast.h
@@ -0,0 +1,390 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#ifndef RECAST_H
+#define RECAST_H
+
+struct rcConfig
+{
+ int width, height; // Dimensions of the rasterized heighfield
+ float cs, ch; // Grid cell size and height.
+ float bmin[3], bmax[3]; // Grid bounds.
+ float walkableSlopeAngle; // Maximum walkble slope angle in degrees.
+ int walkableHeight; // Minimum height where the agent can still walk.
+ int walkableClimb; // Maximum height between grid cells the agent can climb.
+ int walkableRadius; // Radius of the agent in cells.
+ int maxEdgeLen; // Maximum contour edge length in cells.
+ float maxSimplificationError; // Maximum distance error from contour to cells.
+ int minRegionSize; // Minimum regions size. Smaller regions will be deleted.
+ int mergeRegionSize; // Minimum regions size. Smaller regions will be merged.
+ int maxVertsPerPoly; // Max number of vertices per polygon.
+};
+
+struct rcSpan
+{
+ unsigned int smin : 15; // Span min height.
+ unsigned int smax : 15; // Span max height.
+ unsigned int flags : 2; // Span flags.
+ rcSpan* next;
+};
+
+struct rcSpanPool
+{
+ rcSpanPool* next;
+ rcSpan items[1];
+};
+
+struct rcHeightfield
+{
+ inline rcHeightfield() : width(0), height(0), spans(0), pools(0), freelist(0) {}
+ inline ~rcHeightfield()
+ {
+ delete [] spans;
+ while (pools)
+ {
+ rcSpanPool* next = pools->next;
+ delete [] reinterpret_cast(pools);
+ pools = next;
+ }
+ }
+ int width, height;
+ rcSpan** spans;
+ rcSpanPool* pools;
+ rcSpan* freelist;
+};
+
+struct rcCompactCell
+{
+ unsigned int index : 24;
+ unsigned int count : 8;
+};
+
+struct rcCompactSpan
+{
+ unsigned short y;
+ unsigned short reg;
+ unsigned short dist;
+ unsigned short con;
+ unsigned char h;
+ unsigned char flags;
+};
+
+struct rcCompactHeightfield
+{
+ inline rcCompactHeightfield() : cells(0), spans(0), maxDistance(0), maxRegions(0) {}
+ inline ~rcCompactHeightfield() { delete [] cells; delete [] spans; }
+ int width, height;
+ int spanCount;
+ int walkableHeight, walkableClimb;
+ unsigned short maxDistance;
+ unsigned short maxRegions;
+ float minx, miny, minz;
+ float maxx, maxy, maxz;
+ float cs, ch;
+ rcCompactCell* cells;
+ rcCompactSpan* spans;
+};
+
+struct rcContour
+{
+ inline rcContour() : verts(0), nverts(0), rverts(0), nrverts(0), cx(0), cy(0), cz(0) { }
+ inline ~rcContour() { delete [] verts; delete [] rverts; }
+ int* verts;
+ int nverts;
+ int* rverts;
+ int nrverts;
+ int cx,cy,cz;
+ unsigned short reg;
+};
+
+struct rcContourSet
+{
+ inline rcContourSet() : conts(0), nconts(0) {}
+ inline ~rcContourSet() { delete [] conts; }
+ rcContour* conts;
+ int nconts;
+};
+
+struct rcPolyMesh
+{
+ inline rcPolyMesh() : verts(0), polys(0), nverts(0), npolys(0), nvp(3) {}
+ inline ~rcPolyMesh() { delete [] verts; delete [] polys; }
+ unsigned short* verts;
+ unsigned short* polys;
+ int nverts;
+ int npolys;
+ int nvp;
+};
+
+class rcIntArray
+{
+ int* m_data;
+ int m_size, m_cap;
+public:
+ inline rcIntArray() : m_data(0), m_size(0), m_cap(0) {}
+ inline rcIntArray(int n) : m_data(0), m_size(0), m_cap(n) { m_data = new int[n]; }
+ inline ~rcIntArray() { delete [] m_data; }
+ void resize(int n);
+ inline void push(int item) { resize(m_size+1); m_data[m_size-1] = item; }
+ inline int pop() { if (m_size > 0) m_size--; return m_data[m_size]; }
+ inline const int& operator[](int i) const { return m_data[i]; }
+ inline int& operator[](int i) { return m_data[i]; }
+ inline int size() const { return m_size; }
+};
+
+enum rcSpanFlags
+{
+ RC_WALKABLE = 0x01,
+ RC_REACHABLE = 0x02,
+};
+
+// Comppact span neighbour helpers.
+inline int rcGetCon(const rcCompactSpan& s, int dir)
+{
+ return (s.con >> (dir*4)) & 0xf;
+}
+
+inline int rcGetDirOffsetX(int dir)
+{
+ const int offset[4] = { -1, 0, 1, 0, };
+ return offset[dir&0x03];
+}
+
+inline int rcGetDirOffsetY(int dir)
+{
+ const int offset[4] = { 0, 1, 0, -1 };
+ return offset[dir&0x03];
+}
+
+// Common helper functions
+template inline void rcSwap(T& a, T& b) { T t = a; a = b; b = t; }
+template inline T rcMin(T a, T b) { return a < b ? a : b; }
+template inline T rcMax(T a, T b) { return a > b ? a : b; }
+template inline T rcAbs(T a) { return a < 0 ? -a : a; }
+template inline T rcSqr(T a) { return a*a; }
+template inline T rcClamp(T v, T mn, T mx) { return v < mn ? mn : (v > mx ? mx : v); }
+
+// Common vector helper functions.
+inline void vcross(float* dest, const float* v1, const float* v2)
+{
+ dest[0] = v1[1]*v2[2] - v1[2]*v2[1];
+ dest[1] = v1[2]*v2[0] - v1[0]*v2[2];
+ dest[2] = v1[0]*v2[1] - v1[1]*v2[0];
+}
+
+inline float vdot(const float* v1, const float* v2)
+{
+ return v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];
+}
+
+inline void vsub(float* dest, const float* v1, const float* v2)
+{
+ dest[0] = v1[0]-v2[0];
+ dest[1] = v1[1]-v2[1];
+ dest[2] = v1[2]-v2[2];
+}
+
+inline void vmin(float* mn, const float* v)
+{
+ mn[0] = rcMin(mn[0], v[0]);
+ mn[1] = rcMin(mn[1], v[1]);
+ mn[2] = rcMin(mn[2], v[2]);
+}
+
+inline void vmax(float* mx, const float* v)
+{
+ mx[0] = rcMax(mx[0], v[0]);
+ mx[1] = rcMax(mx[1], v[1]);
+ mx[2] = rcMax(mx[2], v[2]);
+}
+
+inline void vcopy(float* dest, const float* v)
+{
+ dest[0] = v[0];
+ dest[1] = v[1];
+ dest[2] = v[2];
+}
+
+inline float vdistSqr(const float* v1, const float* v2)
+{
+ float dx = v2[0] - v1[0];
+ float dy = v2[1] - v1[1];
+ float dz = v2[2] - v1[2];
+ return dx*dx + dy*dy + dz*dz;
+}
+
+inline void vnormalize(float* v)
+{
+ float d = 1.0f / sqrtf(rcSqr(v[0]) + rcSqr(v[1]) + rcSqr(v[2]));
+ v[0] *= d;
+ v[1] *= d;
+ v[2] *= d;
+}
+
+inline bool vequal(const float* p0, const float* p1)
+{
+ static const float thr = rcSqr(1.0f/16384.0f);
+ const float d = vdistSqr(p0, p1);
+ return d < thr;
+}
+
+
+// Calculated bounding box of array of vertices.
+// Params:
+// verts - (in) array of vertices
+// nv - (in) vertex count
+// bmin, bmax - (out) bounding box
+void rcCalcBounds(const float* verts, int nv, float* bmin, float* bmax);
+
+// Calculates grid size based on bounding box and grid cell size.
+// Params:
+// bmin, bmax - (in) bounding box
+// cs - (in) grid cell size
+// w - (out) grid width
+// h - (out) grid height
+void rcCalcGridSize(float* bmin, float* bmax, float cs, int* w, int* h);
+
+// Creates and initializes new heightfield.
+// Params:
+// hf - (in/out) heightfield to initialize.
+// width - (in) width of the heightfield.
+// height - (in) height of the heightfield.
+bool rcCreateHeightfield(rcHeightfield& hf, int width, int height);
+
+// Sets the WALKABLE flag for every triangle whose slope is below
+// the maximun walkable slope angle.
+// Params:
+// walkableSlopeAngle - (in) maximun slope angle in degrees.
+// tris - (in) array of triangle vertex indices
+// norms - (in) array of triangle normals
+// nt - (in) triangle count
+// flags - (out) array of triangle flags
+void rcMarkWalkableTriangles(const float walkableSlopeAngle,
+ const int* tris, const float* norms, int nt,
+ unsigned char* flags);
+
+// Rasterizes the triangles into heightfield spans.
+// Params:
+// bmin, bmax - (in) bounding box of the heightfield
+// cs - (in) grid cell size
+// ch - (in) grid cell height
+// verts - (in) array of vertices
+// nv - (in) vertex count
+// tris - (in) array of triangle vertex indices
+// norms - (in) array of triangle normals
+// flags - (in) array of triangle flags (uses WALKABLE)
+// nt - (in) triangle count
+// solid - (in) heighfield where the triangles are rasterized
+void rcRasterizeTriangles(const float* bmin, const float* bmax,
+ float cs, float ch,
+ const float* verts, int nv,
+ const int* tris, const unsigned char* flags, int nt,
+ rcHeightfield& solid);
+
+void rcFilterWalkableBorderSpans(const int walkableHeight,
+ const int walkableClimb,
+ rcHeightfield& solid);
+
+// Removes WALKABLE flag from all spans which have smaller than
+// 'walkableHeight' clearane above them.
+// Params:
+// walkableHeight - (in) minimum height where the agent can still walk
+// solid - (in/out) heightfield describing the solid space
+void rcFilterWalkableLowHeightSpans(int walkableHeight,
+ rcHeightfield& solid);
+
+// Marks spans which are reachable from any of the topmost spans.
+// Params:
+// walkableHeight - (in) minimum height where the agent can still walk
+// walkableClimb - (in) maximum height between grid cells the agent can climb
+// solid - (in/out) heightfield describing the solid space
+// Returns false if operation ran out of memory.
+bool rcMarkReachableSpans(const int walkableHeight,
+ const int walkableClimb,
+ rcHeightfield& solid);
+
+// Builds compact representation of the heightfield.
+// Params:
+// bmin, bmax - (in) bounding box of the heightfield
+// cs - (in) grid cell size
+// ch - (in) grid cell height
+// walkableHeight - (in) minimum height where the agent can still walk
+// walkableClimb - (in) maximum height between grid cells the agent can climb
+// hf - (in) heightfield to be compacted
+// chf - (out) compact heightfield representing the open space.
+// Returns false if operation ran out of memory.
+bool rcBuildCompactHeightfield(const float* bmin, const float* bmax,
+ const float cs, const float ch,
+ const int walkableHeight, const int walkableClimb,
+ unsigned char flags,
+ rcHeightfield& hf,
+ rcCompactHeightfield& chf);
+
+// Builds distance field and stores it into the combat heightfield.
+// Params:
+// chf - (in/out) compact heightfield representing the open space.
+// Returns false if operation ran out of memory.
+bool rcBuildDistanceField(rcCompactHeightfield& chf);
+
+// Divides the walkable heighfied into simple regions.
+// Each region has only one contour and no overlaps.
+// The regions are stored in the compact heightfield 'reg' field.
+// The regions will be shrinked by the radius of the agent.
+// The process sometimes creates small regions. The parameter
+// 'minRegionSize' specifies the smallest allowed regions size.
+// If the area of a regions is smaller than allowed, the regions is
+// removed or merged to neighbour region.
+// Params:
+// chf - (in/out) compact heightfield representing the open space.
+// walkableRadius - (in) the radius of the agent.
+// minRegionSize - (in) the smallest allowed regions size.
+// maxMergeRegionSize - (in) the largest allowed regions size which can be merged.
+// Returns false if operation ran out of memory.
+bool rcBuildRegions(rcCompactHeightfield& chf,
+ int walkableRadius, int minRegionSize, int mergeRegionSize);
+
+// Builds simplified contours from the regions outlines.
+// Params:
+// chf - (in) compact heightfield which has regions set.
+// maxError - (in) maximum allowed distance between simplified countour and cells.
+// maxEdgeLen - (in) maximum allowed contour edge length in cells.
+// cset - (out) Resulting contour set.
+// Returns false if operation ran out of memory.
+bool rcBuildContours(rcCompactHeightfield& chf,
+ float maxError, int maxEdgeLen,
+ rcContourSet& cset);
+
+// Builds connected convex polygon mesh from contour polygons.
+// Params:
+// cset - (in) contour set.
+// mesh - (out) poly mesh.
+// nvp - (int) maximum number of vertices per polygon.
+// Returns false if operation ran out of memory.
+bool rcBuildPolyMesh(rcContourSet& cset, rcPolyMesh& mesh, int nvp);
+
+
+bool rcBuildNavMesh(const rcConfig& cfg,
+ const float* verts, const int nverts,
+ const int* tris, const unsigned char* tflags, const int ntris,
+ rcHeightfield& solid,
+ rcCompactHeightfield& chf,
+ rcContourSet& cset,
+ rcPolyMesh& polyMesh);
+
+
+#endif // RECAST_H
diff --git a/Recast/Include/RecastDebugDraw.h b/Recast/Include/RecastDebugDraw.h
new file mode 100644
index 0000000..31d6099
--- /dev/null
+++ b/Recast/Include/RecastDebugDraw.h
@@ -0,0 +1,59 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#ifndef RECAST_DEBUGDRAW_H
+#define RECAST_DEBUGDRAW_H
+
+inline int bit(int a, int b)
+{
+ return (a & (1 << b)) >> b;
+}
+
+inline void intToCol(int i, float* col)
+{
+ int r = bit(i, 0) + bit(i, 3) * 2 + 1;
+ int g = bit(i, 1) + bit(i, 4) * 2 + 1;
+ int b = bit(i, 2) + bit(i, 5) * 2 + 1;
+ col[0] = 1 - r*63.0f/255.0f;
+ col[1] = 1 - g*63.0f/255.0f;
+ col[2] = 1 - b*63.0f/255.0f;
+}
+
+void rcDebugDrawHeightfieldSolid(const struct rcHeightfield& hf,
+ const float* orig, float cs, float ch);
+
+void rcDebugDrawHeightfieldWalkable(const struct rcHeightfield& hf,
+ const float* orig, float cs, float ch);
+
+void rcDebugDrawMesh(const class rcMeshLoaderObj& mesh, const unsigned char* flags);
+
+void rcDebugDrawCompactHeightfieldSolid(const struct rcCompactHeightfield& chf);
+void rcDebugDrawCompactHeightfieldRegions(const struct rcCompactHeightfield& chf);
+void rcDebugDrawCompactHeightfieldDistance(const struct rcCompactHeightfield& chf);
+
+void rcDebugDrawRawContours(const struct rcContourSet& cset, const float* orig, float cs, float ch);
+void rcDebugDrawContours(const struct rcContourSet& cset, const float* orig, float cs, float ch);
+void rcDebugDrawPolyMesh(const struct rcPolyMesh& mesh, const float* orig, float cs, float ch);
+
+void rcDebugDrawCylinderWire(float minx, float miny, float minz, float maxx, float maxy, float maxz, const float* col);
+void rcDebugDrawBoxWire(float minx, float miny, float minz, float maxx, float maxy, float maxz, const float* col);
+void rcDebugDrawBox(float minx, float miny, float minz, float maxx, float maxy, float maxz,
+ const float* col1, const float* col2);
+
+
+#endif // RECAST_DEBUGDRAW_H
\ No newline at end of file
diff --git a/Recast/Include/RecastLog.h b/Recast/Include/RecastLog.h
new file mode 100644
index 0000000..8dc432d
--- /dev/null
+++ b/Recast/Include/RecastLog.h
@@ -0,0 +1,53 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#ifndef RECAST_LOG_H
+#define RECAST_LOG_H
+
+enum rcLogCategory
+{
+ RC_LOG_PROGRESS = 1,
+ RC_LOG_WARNING,
+ RC_LOG_ERROR,
+};
+
+class rcLog
+{
+public:
+ rcLog();
+ ~rcLog();
+
+ void log(rcLogCategory category, const char* format, ...);
+ inline void clear() { m_messageCount = 0; m_textPoolSize = 0; }
+ inline int getMessageCount() const { return m_messageCount; }
+ inline char getMessageType(int i) const { return *m_messages[i]; }
+ inline const char* getMessageText(int i) const { return m_messages[i]+1; }
+
+private:
+ static const int MAX_MESSAGES = 1000;
+ const char* m_messages[MAX_MESSAGES];
+ int m_messageCount;
+ static const int TEXT_POOL_SIZE = 8000;
+ char m_textPool[TEXT_POOL_SIZE];
+ int m_textPoolSize;
+};
+
+void rcSetLog(rcLog* log);
+rcLog* rcGetLog();
+
+#endif // RECAST_LOG_H
diff --git a/Recast/Include/RecastTimer.h b/Recast/Include/RecastTimer.h
new file mode 100644
index 0000000..b065d6f
--- /dev/null
+++ b/Recast/Include/RecastTimer.h
@@ -0,0 +1,38 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+#ifndef RECAST_TIMER_H
+#define RECAST_TIMER_H
+
+#ifdef WIN32
+
+//#include
+typedef __int64 rcTimeVal;
+rcTimeVal rcGetPerformanceTimer();
+int rcGetDeltaTimeUsec(rcTimeVal start, rcTimeVal end);
+
+#else
+
+// OSX
+#include
+typedef uint64_t rcTimeVal;
+rcTimeVal rcGetPerformanceTimer();
+int rcGetDeltaTimeUsec(rcTimeVal start, rcTimeVal end);
+
+#endif
+
+#endif // RECAST_TIMER_H
diff --git a/Recast/License.txt b/Recast/License.txt
new file mode 100644
index 0000000..c259ddf
--- /dev/null
+++ b/Recast/License.txt
@@ -0,0 +1,18 @@
+Copyright (c) 2009 Mikko Mononen memon@inside.org
+
+This software is provided 'as-is', without any express or implied
+warranty. In no event will the authors be held liable for any damages
+arising from the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not
+claim that you wrote the original software. If you use this software
+in a product, an acknowledgment in the product documentation would be
+appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be
+misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+
diff --git a/Recast/Readme.txt b/Recast/Readme.txt
new file mode 100644
index 0000000..b29fe89
--- /dev/null
+++ b/Recast/Readme.txt
@@ -0,0 +1,13 @@
+Detour Version 1.0
+
+Welcome to Detour!
+
+Detour is a navigation system for games. The system comes with two parts: 1) Automatic preprocess which generates navmesh automatically from a polygon soup and, 2) runtime library which allows to do spatic queries and pathfinding on the navmesh.
+
+The project files with this distribution with with Microsoft Visual C++ 2008 (you can download it for free) and XCode 3.1.
+
+You can find examples how to use the preprocess and runtime on the Examples directory.
+
+
+Mikko Mononen
+memon@inside.org
diff --git a/Recast/Source/Recast.cpp b/Recast/Source/Recast.cpp
new file mode 100644
index 0000000..c5bada5
--- /dev/null
+++ b/Recast/Source/Recast.cpp
@@ -0,0 +1,302 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#include
+#define _USE_MATH_DEFINES
+#include
+#include
+#include
+#include
+#include "Recast.h"
+#include "RecastLog.h"
+#include "RecastTimer.h"
+
+
+void rcIntArray::resize(int n)
+{
+ if (n > m_cap)
+ {
+ if (!m_cap) m_cap = 8;
+ while (m_cap < n) m_cap *= 2;
+ int* newData = new int[m_cap];
+ if (m_size && newData) memcpy(newData, m_data, m_size*sizeof(int));
+ delete [] m_data;
+ m_data = newData;
+ }
+ m_size = n;
+}
+
+void rcCalcBounds(const float* verts, int nv, float* bmin, float* bmax)
+{
+ // Calculate bounding box.
+ vcopy(bmin, verts);
+ vcopy(bmax, verts);
+ for (int i = 1; i < nv; ++i)
+ {
+ const float* v = &verts[i*3];
+ vmin(bmin, v);
+ vmax(bmax, v);
+ }
+}
+
+void rcCalcGridSize(float* bmin, float* bmax, float cs, int* w, int* h)
+{
+ *w = (int)((bmax[0] - bmin[0])/cs+0.5f);
+ *h = (int)((bmax[2] - bmin[2])/cs+0.5f);
+}
+
+bool rcCreateHeightfield(rcHeightfield& hf, int width, int height)
+{
+ hf.width = width;
+ hf.height = height;
+ hf.spans = new rcSpan*[hf.width*hf.height];
+ if (!hf.spans)
+ return false;
+ memset(hf.spans, 0, sizeof(rcSpan*)*hf.width*hf.height);
+ return true;
+}
+
+void rcMarkWalkableTriangles(const float walkableSlopeAngle,
+ const int* tris, const float* norms, int nt,
+ unsigned char* flags)
+{
+ const float walkableThr = cosf(walkableSlopeAngle/180.0f*(float)M_PI);
+
+ for (int i = 0; i < nt; ++i)
+ {
+ // Check if the face is walkable.
+ if (norms[i*3+1] > walkableThr)
+ flags[i] |= RC_WALKABLE;
+ }
+}
+
+static int getSpanCount(unsigned char flags, rcHeightfield& hf)
+{
+ const int w = hf.width;
+ const int h = hf.height;
+ int spanCount = 0;
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ for (rcSpan* s = hf.spans[x + y*w]; s; s = s->next)
+ {
+ if (s->flags == flags)
+ spanCount++;
+ }
+ }
+ }
+ return spanCount;
+}
+
+inline void setCon(rcCompactSpan& s, int dir, int i)
+{
+ s.con &= ~(0xf << (dir*4));
+ s.con |= (i&0xf) << (dir*4);
+}
+
+bool rcBuildCompactHeightfield(const float* bmin, const float* bmax,
+ const float cs, const float ch,
+ const int walkableHeight, const int walkableClimb,
+ unsigned char flags, rcHeightfield& hf,
+ rcCompactHeightfield& chf)
+{
+ rcTimeVal startTime = rcGetPerformanceTimer();
+
+ const int w = hf.width;
+ const int h = hf.height;
+ const int spanCount = getSpanCount(flags, hf);
+
+ // Fill in header.
+ chf.width = w;
+ chf.height = h;
+ chf.spanCount = spanCount;
+ chf.walkableHeight = walkableHeight;
+ chf.walkableClimb = walkableClimb;
+ chf.maxRegions = 0;
+ chf.minx = bmin[0];
+ chf.miny = bmin[1];
+ chf.minz = bmin[2];
+ chf.maxx = bmax[0];
+ chf.maxy = bmax[1] + walkableHeight*ch;
+ chf.maxz = bmax[2];
+ chf.cs = cs;
+ chf.ch = ch;
+ chf.cells = new rcCompactCell[w*h];
+ if (!chf.cells)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildCompactHeightfield: Out of memory 'chf.cells' (%d)", w*h);
+ return false;
+ }
+ memset(chf.cells, 0, sizeof(rcCompactCell)*w*h);
+ chf.spans = new rcCompactSpan[spanCount];
+ if (!chf.spans)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildCompactHeightfield: Out of memory 'chf.spans' (%d)", spanCount);
+ return false;
+ }
+ memset(chf.spans, 0, sizeof(rcCompactSpan)*spanCount);
+
+ const int MAX_HEIGHT = 0xffff;
+
+ // Fill in cells and spans.
+ int idx = 0;
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ const rcSpan* s = hf.spans[x + y*w];
+ // If there are no spans at this cell, just leave the data to index=0, count=0.
+ if (!s) continue;
+ rcCompactCell& c = chf.cells[x+y*w];
+ c.index = idx;
+ c.count = 0;
+ while (s)
+ {
+ if (s->flags == flags)
+ {
+ const int bot = (int)s->smax;
+ const int top = (int)s->next ? (int)s->next->smin : MAX_HEIGHT;
+ chf.spans[idx].y = (unsigned short)rcClamp(bot, 0, 0xffff);
+ chf.spans[idx].h = (unsigned char)rcClamp(top - bot, 0, 0xff);
+ idx++;
+ c.count++;
+ }
+ s = s->next;
+ }
+ }
+ }
+
+ // Find neighbour connections.
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ const rcCompactCell& c = chf.cells[x+y*w];
+ for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i)
+ {
+ rcCompactSpan& s = chf.spans[i];
+ for (int dir = 0; dir < 4; ++dir)
+ {
+ setCon(s, dir, 0xf);
+ const int nx = x + rcGetDirOffsetX(dir);
+ const int ny = y + rcGetDirOffsetY(dir);
+ // First check that the neighbour cell is in bounds.
+ if (nx < 0 || ny < 0 || nx >= w || ny >= h)
+ continue;
+ // Iterate over all neighbour spans and check if any of the is
+ // accessible from current cell.
+ const rcCompactCell& nc = chf.cells[nx+ny*w];
+ for (int k = (int)nc.index, nk = (int)(nc.index+nc.count); k < nk; ++k)
+ {
+ const rcCompactSpan& ns = chf.spans[k];
+ const int bot = rcMax(s.y, ns.y);
+ const int top = rcMin(s.y+s.h, ns.y+ns.h);
+
+ // Check that the gap between the spans is walkable,
+ // and that the climb height between the gaps is not too high.
+ if ((top - bot) >= walkableHeight && rcAbs((int)ns.y - (int)s.y) <= walkableClimb)
+ {
+ // Mark direction as walkable.
+ setCon(s, dir, k - (int)nc.index);
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ rcTimeVal endTime = rcGetPerformanceTimer();
+
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_PROGRESS, "Build compact: %.3f ms", rcGetDeltaTimeUsec(startTime, endTime)/1000.0f);
+
+ return true;
+}
+
+bool rcBuildNavMesh(const rcConfig& cfg,
+ const float* verts, const int nverts,
+ const int* tris, const unsigned char* tflags, const int ntris,
+ rcHeightfield& solid,
+ rcCompactHeightfield& chf,
+ rcContourSet& cset,
+ rcPolyMesh& polyMesh)
+{
+ if (!rcCreateHeightfield(solid, cfg.width, cfg.height))
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildNavMesh: Could not create solid heightfield.");
+ return false;
+ }
+
+ rcRasterizeTriangles(cfg.bmin, cfg.bmax, cfg.cs, cfg.ch,
+ verts, nverts, tris, tflags, ntris, solid);
+
+ rcFilterWalkableBorderSpans(cfg.walkableHeight, cfg.walkableClimb, solid);
+
+ rcFilterWalkableLowHeightSpans(cfg.walkableHeight, solid);
+
+ if (!rcMarkReachableSpans(cfg.walkableHeight, cfg.walkableClimb, solid))
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildNavMesh: Could not build navigable heightfield.");
+ return false;
+ }
+
+ if (!rcBuildCompactHeightfield(cfg.bmin, cfg.bmax, cfg.cs, cfg.ch,
+ cfg.walkableHeight, cfg.walkableClimb,
+ RC_WALKABLE|RC_REACHABLE, solid, chf))
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildNavMesh: Could not build compact data.");
+ return false;
+ }
+
+ if (!rcBuildDistanceField(chf))
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildNavMesh: Could not build distance fields.");
+ return false;
+ }
+
+ if (!rcBuildRegions(chf, cfg.walkableRadius, cfg.minRegionSize, cfg.mergeRegionSize))
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildNavMesh: Could not build regions.");
+ return false;
+ }
+
+ if (!rcBuildContours(chf, cfg.maxSimplificationError, cfg.maxEdgeLen, cset))
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildNavMesh: Could not create contours.");
+ return false;
+ }
+
+ if (!rcBuildPolyMesh(cset, polyMesh, cfg.maxVertsPerPoly))
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildNavMesh: Could not triangulate contours.");
+ return false;
+ }
+
+ return true;
+}
diff --git a/Recast/Source/RecastContour.cpp b/Recast/Source/RecastContour.cpp
new file mode 100644
index 0000000..67112bb
--- /dev/null
+++ b/Recast/Source/RecastContour.cpp
@@ -0,0 +1,665 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#define _USE_MATH_DEFINES
+#include
+#include
+#include
+#include "Recast.h"
+#include "RecastLog.h"
+#include "RecastTimer.h"
+
+
+static int getCornerHeight(int x, int y, int i, int dir,
+ const rcCompactHeightfield& chf)
+{
+ const rcCompactSpan& s = chf.spans[i];
+ int ch = (int)s.y;
+ int dirp = (dir+1) & 0x3;
+ if (rcGetCon(s, dir) != 0xf)
+ {
+ const int ax = x + rcGetDirOffsetX(dir);
+ const int ay = y + rcGetDirOffsetY(dir);
+ const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(s, dir);
+ const rcCompactSpan& as = chf.spans[ai];
+ ch = rcMax(ch, (int)as.y);
+ if (rcGetCon(as, dirp) != 0xf)
+ {
+ const int ax2 = ax + rcGetDirOffsetX(dirp);
+ const int ay2 = ay + rcGetDirOffsetY(dirp);
+ const int ai2 = (int)chf.cells[ax2+ay2*chf.width].index + rcGetCon(as, dirp);
+ const rcCompactSpan& as2 = chf.spans[ai2];
+ ch = rcMax(ch, (int)as2.y);
+ }
+ }
+ if (rcGetCon(s, dirp) != 0xf)
+ {
+ const int ax = x + rcGetDirOffsetX(dirp);
+ const int ay = y + rcGetDirOffsetY(dirp);
+ const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(s, dirp);
+ const rcCompactSpan& as = chf.spans[ai];
+ ch = rcMax(ch, (int)as.y);
+ if (rcGetCon(as, dir) != 0xf)
+ {
+ const int ax2 = ax + rcGetDirOffsetX(dir);
+ const int ay2 = ay + rcGetDirOffsetY(dir);
+ const int ai2 = (int)chf.cells[ax2+ay2*chf.width].index + rcGetCon(as, dir);
+ const rcCompactSpan& as2 = chf.spans[ai2];
+ ch = rcMax(ch, (int)as2.y);
+ }
+ }
+
+ return ch;
+}
+
+static void walkContour(int x, int y, int i,
+ rcCompactHeightfield& chf,
+ unsigned char* flags, rcIntArray& points)
+{
+ // Choose the first non-connected edge
+ unsigned char dir = 0;
+ while ((flags[i] & (1 << dir)) == 0)
+ dir++;
+
+ unsigned char startDir = dir;
+ int starti = i;
+
+ int iter = 0;
+ while (++iter < 40000)
+ {
+ if (flags[i] & (1 << dir))
+ {
+ // Choose the edge corner
+ int px = x;
+ int py = getCornerHeight(x, y, i, dir, chf);
+ int pz = y;
+ switch(dir)
+ {
+ case 0: pz++; break;
+ case 1: px++; pz++; break;
+ case 2: px++; break;
+ }
+ int r = 0;
+ const rcCompactSpan& s = chf.spans[i];
+ if (rcGetCon(s, dir) != 0xf)
+ {
+ const int ax = x + rcGetDirOffsetX(dir);
+ const int ay = y + rcGetDirOffsetY(dir);
+ const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(s, dir);
+ const rcCompactSpan& as = chf.spans[ai];
+ r = (int)as.reg;
+ }
+
+ points.push(px);
+ points.push(py);
+ points.push(pz);
+ points.push(r);
+
+ flags[i] &= ~(1 << dir); // Remove visited edges
+ dir = (dir+1) & 0x3; // Rotate CW
+ }
+ else
+ {
+ int ni = -1;
+ const int nx = x + rcGetDirOffsetX(dir);
+ const int ny = y + rcGetDirOffsetY(dir);
+ const rcCompactSpan& s = chf.spans[i];
+ if (rcGetCon(s, dir) != 0xf)
+ {
+ const rcCompactCell& nc = chf.cells[nx+ny*chf.width];
+ ni = (int)nc.index + rcGetCon(s, dir);
+ }
+ if (ni == -1)
+ {
+ // Should not happen.
+ return;
+ }
+ x = nx;
+ y = ny;
+ i = ni;
+ dir = (dir+3) & 0x3; // Rotate CCW
+ }
+
+ if (starti == i && startDir == dir)
+ {
+ break;
+ }
+ }
+}
+
+static float distancePtSeg(int x, int y, int z,
+ int px, int py, int pz,
+ int qx, int qy, int qz)
+{
+ float pqx = (float)(qx - px);
+ float pqy = (float)(qy - py);
+ float pqz = (float)(qz - pz);
+ float dx = (float)(x - px);
+ float dy = (float)(y - py);
+ float dz = (float)(z - pz);
+ float d = pqx*pqx + pqy*pqy + pqz*pqz;
+ float t = pqx*dx + pqy*dy + pqz*dz;
+ if (d > 0)
+ t /= d;
+ if (t < 0)
+ t = 0;
+ else if (t > 1)
+ t = 1;
+
+ dx = px + t*pqx - x;
+ dy = py + t*pqy - y;
+ dz = pz + t*pqz - z;
+
+ return dx*dx + dy*dy + dz*dz;
+}
+
+static void simplifyContour(rcIntArray& points, rcIntArray& simplified, float maxError, int maxEdgeLen)
+{
+ // Add initial points.
+ bool noConnections = true;
+ for (int i = 0; i < points.size(); i += 4)
+ {
+ if (points[i+3] != 0)
+ {
+ noConnections = false;
+ break;
+ }
+ }
+
+ if (noConnections)
+ {
+ // If there is no connections at all,
+ // create some initial points for the simplification process.
+ // Find lower-left and upper-right vertices of the contour.
+ int llx = points[0];
+ int lly = points[1];
+ int llz = points[2];
+ int lli = 0;
+ int urx = points[0];
+ int ury = points[1];
+ int urz = points[2];
+ int uri = 0;
+ for (int i = 0; i < points.size(); i += 4)
+ {
+ int x = points[i+0];
+ int y = points[i+1];
+ int z = points[i+2];
+ if (x < llx || (x == llx && z < llz))
+ {
+ llx = x;
+ lly = y;
+ llz = z;
+ lli = i/4;
+ }
+ if (x >= urx || (x == urx && z > urz))
+ {
+ urx = x;
+ ury = y;
+ urz = z;
+ uri = i/4;
+ }
+ }
+ simplified.push(llx);
+ simplified.push(lly);
+ simplified.push(llz);
+ simplified.push(lli);
+
+ simplified.push(urx);
+ simplified.push(ury);
+ simplified.push(urz);
+ simplified.push(uri);
+ }
+ else
+ {
+ // The contour has some portals to other regions.
+ // Add a new point to every location where the region changes.
+ for (int i = 0, ni = points.size()/4; i < ni; ++i)
+ {
+ int ii = (i+1) % ni;
+ if (points[i*4+3] != points[ii*4+3])
+ {
+ simplified.push(points[i*4+0]);
+ simplified.push(points[i*4+1]);
+ simplified.push(points[i*4+2]);
+ simplified.push(i);
+ }
+ }
+ }
+
+ // Add points until all raw points are within
+ // error tolerance to the simplified shape.
+ const int pn = points.size()/4;
+ for (int i = 0; i < simplified.size()/4; )
+ {
+ int ii = (i+1) % (simplified.size()/4);
+
+ int ax = simplified[i*4+0];
+ int ay = simplified[i*4+1];
+ int az = simplified[i*4+2];
+ int ai = simplified[i*4+3];
+
+ int bx = simplified[ii*4+0];
+ int by = simplified[ii*4+1];
+ int bz = simplified[ii*4+2];
+ int bi = simplified[ii*4+3];
+
+ // Find maximum deviation from the segment.
+ float maxd = 0;
+ int maxi = -1;
+ int ci = (ai+1) % pn;
+
+ // Tesselate only outer edges.
+ if (points[ci*4+3] == 0)
+ {
+ while (ci != bi)
+ {
+ float d = distancePtSeg(points[ci*4+0], points[ci*4+1]/4, points[ci*4+2],
+ ax, ay/4, az, bx, by/4, bz);
+ if (d > maxd)
+ {
+ maxd = d;
+ maxi = ci;
+ }
+ ci = (ci+1) % pn;
+ }
+ }
+
+
+ // If the max deviation is larger than accepted error,
+ // add new point, else continue to next segment.
+ if (maxi != -1 && maxd > (maxError*maxError))
+ {
+ // Add space for the new point.
+ simplified.resize(simplified.size()+4);
+ int n = simplified.size()/4;
+ for (int j = n-1; j > i; --j)
+ {
+ simplified[j*4+0] = simplified[(j-1)*4+0];
+ simplified[j*4+1] = simplified[(j-1)*4+1];
+ simplified[j*4+2] = simplified[(j-1)*4+2];
+ simplified[j*4+3] = simplified[(j-1)*4+3];
+ }
+ // Add the point.
+ simplified[(i+1)*4+0] = points[maxi*4+0];
+ simplified[(i+1)*4+1] = points[maxi*4+1];
+ simplified[(i+1)*4+2] = points[maxi*4+2];
+ simplified[(i+1)*4+3] = maxi;
+ }
+ else
+ {
+ ++i;
+ }
+ }
+
+ // Split too long edges.
+ if (maxEdgeLen > 0)
+ {
+ for (int i = 0; i < simplified.size()/4; )
+ {
+ int ii = (i+1) % (simplified.size()/4);
+
+ int ax = simplified[i*4+0];
+ int az = simplified[i*4+2];
+ int ai = simplified[i*4+3];
+
+ int bx = simplified[ii*4+0];
+ int bz = simplified[ii*4+2];
+ int bi = simplified[ii*4+3];
+
+ // Find maximum deviation from the segment.
+ int maxi = -1;
+ int ci = (ai+1) % pn;
+
+ // Tesselate only outer edges.
+ if (points[ci*4+3] == 0)
+ {
+ int dx = bx - ax;
+ int dz = bz - az;
+ if (dx*dx + dz*dz > maxEdgeLen*maxEdgeLen)
+ {
+ int n = bi < ai ? (bi+pn - ai) : (bi - ai);
+ maxi = (ai + n/2) % pn;
+ }
+ }
+
+ // If the max deviation is larger than accepted error,
+ // add new point, else continue to next segment.
+ if (maxi != -1)
+ {
+ // Add space for the new point.
+ simplified.resize(simplified.size()+4);
+ int n = simplified.size()/4;
+ for (int j = n-1; j > i; --j)
+ {
+ simplified[j*4+0] = simplified[(j-1)*4+0];
+ simplified[j*4+1] = simplified[(j-1)*4+1];
+ simplified[j*4+2] = simplified[(j-1)*4+2];
+ simplified[j*4+3] = simplified[(j-1)*4+3];
+ }
+ // Add the point.
+ simplified[(i+1)*4+0] = points[maxi*4+0];
+ simplified[(i+1)*4+1] = points[maxi*4+1];
+ simplified[(i+1)*4+2] = points[maxi*4+2];
+ simplified[(i+1)*4+3] = maxi;
+ }
+ else
+ {
+ ++i;
+ }
+ }
+ }
+
+ for (int i = 0; i < simplified.size()/4; ++i)
+ {
+ int ai = (simplified[i*4+3]+1) % pn;
+ simplified[i*4+3] = points[ai*4+3];
+ }
+
+}
+
+static void removeDegenerateSegments(rcIntArray& simplified)
+{
+ // Remove adjacent vertices which are equal on xz-plane,
+ // or else the triangulator will get confused.
+ for (int i = 0; i < simplified.size()/4; ++i)
+ {
+ int ni = i+1;
+ if (ni >= (simplified.size()/4))
+ ni = 0;
+
+ if (simplified[i*4+0] == simplified[ni*4+0] &&
+ simplified[i*4+2] == simplified[ni*4+2])
+ {
+ // Degenerate segment, remove.
+ for (int j = i; j < simplified.size()/4-1; ++j)
+ {
+ simplified[j*4+0] = simplified[(j+1)*4+0];
+ simplified[j*4+1] = simplified[(j+1)*4+1];
+ simplified[j*4+2] = simplified[(j+1)*4+2];
+ simplified[j*4+3] = simplified[(j+1)*4+3];
+ }
+ simplified.pop();
+ }
+ }
+}
+
+static int calcAreaOfPolygon2D(const int* verts, const int nverts)
+{
+ int area = 0;
+ for (int i = 0, j = nverts-1; i < nverts; j=i++)
+ {
+ const int* vi = &verts[i*4];
+ const int* vj = &verts[j*4];
+ area += vi[0] * vj[2] - vj[0] * vi[2];
+ }
+ return (area+1) / 2;
+}
+
+static void getClosestIndices(const int* vertsa, const int nvertsa,
+ const int* vertsb, const int nvertsb,
+ int& ia, int& ib)
+{
+ int closestDist = 0xfffffff;
+ for (int i = 0; i < nvertsa; ++i)
+ {
+ const int* va = &vertsa[i*4];
+ for (int j = 0; j < nvertsb; ++j)
+ {
+ const int* vb = &vertsb[j*4];
+ const int dx = vb[0] - va[0];
+ const int dz = vb[2] - va[2];
+ const int d = dx*dx + dz*dz;
+ if (d < closestDist)
+ {
+ ia = i;
+ ib = j;
+ closestDist = d;
+ }
+ }
+ }
+}
+
+static bool mergeContours(rcContour& ca, rcContour& cb, int ia, int ib)
+{
+ const int maxVerts = ca.nverts + cb.nverts + 2;
+ int* verts = new int[maxVerts*4];
+ if (!verts)
+ return false;
+
+ int nv = 0;
+
+ // Copy contour A.
+ for (int i = 0; i <= ca.nverts; ++i)
+ {
+ int* dst = &verts[nv*4];
+ const int* src = &ca.verts[((ia+i)%ca.nverts)*4];
+ dst[0] = src[0];
+ dst[1] = src[1];
+ dst[2] = src[2];
+ dst[3] = src[3];
+ nv++;
+ }
+
+ // Copy contour B
+ for (int i = 0; i <= cb.nverts; ++i)
+ {
+ int* dst = &verts[nv*4];
+ const int* src = &cb.verts[((ib+i)%cb.nverts)*4];
+ dst[0] = src[0];
+ dst[1] = src[1];
+ dst[2] = src[2];
+ dst[3] = src[3];
+ nv++;
+ }
+
+ delete [] ca.verts;
+ ca.verts = verts;
+ ca.nverts = nv;
+
+ delete [] cb.verts;
+ cb.verts = 0;
+ cb.nverts = 0;
+
+ return true;
+}
+
+bool rcBuildContours(rcCompactHeightfield& chf,
+ float maxError, int maxEdgeLen,
+ rcContourSet& cset)
+{
+ const int w = chf.width;
+ const int h = chf.height;
+
+ rcTimeVal startTime = rcGetPerformanceTimer();
+
+ const int maxContours = chf.maxRegions*2;
+ cset.conts = new rcContour[maxContours];
+ if (!cset.conts)
+ return false;
+ cset.nconts = 0;
+
+ unsigned char* flags = new unsigned char[chf.spanCount];
+ if (!flags)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildContours: Out of memory 'flags'.");
+ return false;
+ }
+
+ rcTimeVal boundaryStartTime = rcGetPerformanceTimer();
+
+ // Mark boundaries.
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ const rcCompactCell& c = chf.cells[x+y*w];
+ for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i)
+ {
+ unsigned char res = 0;
+ const rcCompactSpan& s = chf.spans[i];
+ if (s.reg == 0)
+ {
+ flags[i] = 0;
+ continue;
+ }
+ for (int dir = 0; dir < 4; ++dir)
+ {
+ unsigned short r = 0;
+ if (rcGetCon(s, dir) != 0xf)
+ {
+ const int ax = x + rcGetDirOffsetX(dir);
+ const int ay = y + rcGetDirOffsetY(dir);
+ const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, dir);
+ const rcCompactSpan& as = chf.spans[ai];
+ r = as.reg;
+ }
+ if (r == s.reg)
+ res |= (1 << dir);
+ }
+ flags[i] = res ^ 0xf; // Inverse, mark non connected edges.
+ }
+ }
+ }
+
+ rcTimeVal boundaryEndTime = rcGetPerformanceTimer();
+
+ rcTimeVal contourStartTime = rcGetPerformanceTimer();
+
+ rcIntArray verts(256);
+ rcIntArray simplified(64);
+
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ const rcCompactCell& c = chf.cells[x+y*w];
+ for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i)
+ {
+ if (flags[i] == 0 || flags[i] == 0xf)
+ {
+ flags[i] = 0;
+ continue;
+ }
+
+ verts.resize(0);
+ simplified.resize(0);
+ walkContour(x, y, i, chf, flags, verts);
+ simplifyContour(verts, simplified, maxError, maxEdgeLen);
+ removeDegenerateSegments(simplified);
+
+ // Store region->contour remap info.
+ unsigned short reg = chf.spans[i].reg;
+ // Create contour.
+ if (simplified.size()/4 >= 3)
+ {
+ if (cset.nconts >= maxContours)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildContours: Too many contours %d, max %d.", cset.nconts, maxContours);
+ return false;
+ }
+
+ rcContour* cont = &cset.conts[cset.nconts++];
+
+ cont->nverts = simplified.size()/4;
+ cont->verts = new int[cont->nverts*4];
+ memcpy(cont->verts, &simplified[0], sizeof(int)*cont->nverts*4);
+
+ cont->nrverts = verts.size()/4;
+ cont->rverts = new int[cont->nrverts*4];
+ memcpy(cont->rverts, &verts[0], sizeof(int)*cont->nrverts*4);
+
+ cont->cx = cont->cy = cont->cz = 0;
+ for (int i = 0; i < cont->nverts; ++i)
+ {
+ cont->cx += cont->verts[i*4+0];
+ cont->cy += cont->verts[i*4+1];
+ cont->cz += cont->verts[i*4+2];
+ }
+ cont->cx /= cont->nverts;
+ cont->cy /= cont->nverts;
+ cont->cz /= cont->nverts;
+
+ cont->reg = reg;
+ }
+ }
+ }
+ }
+
+ // Check and merge droplings.
+ // Sometimes the previous algorithms can fail and create several countours
+ // per area. This pass will try to merge the holes into the main region.
+ for (int i = 0; i < cset.nconts; ++i)
+ {
+ rcContour& cont = cset.conts[i];
+ // Check if the contour is would backwards.
+ if (calcAreaOfPolygon2D(cont.verts, cont.nverts) < 0)
+ {
+ // Find another contour which has the same region ID.
+ int mergeIdx = -1;
+ for (int j = 0; j < cset.nconts; ++j)
+ {
+ if (i == j) continue;
+ if (cset.conts[j].nverts && cset.conts[j].reg == cont.reg)
+ {
+ // Make sure the polygon is correctly oriented.
+ if (calcAreaOfPolygon2D(cset.conts[j].verts, cset.conts[j].nverts))
+ {
+ mergeIdx = j;
+ break;
+ }
+ }
+ }
+ if (mergeIdx == -1)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_WARNING, "rcBuildContours: Could not find merge target for bad contour %d.", i);
+ }
+ else
+ {
+ rcContour& mcont = cset.conts[mergeIdx];
+ // Merge by closest points.
+ int ia, ib;
+ getClosestIndices(mcont.verts, mcont.nverts, cont.verts, cont.nverts, ia, ib);
+ if (!mergeContours(mcont, cont, ia, ib))
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_WARNING, "rcBuildContours: Failed to merge contours %d and %d.", i, mergeIdx);
+ }
+ }
+ }
+ }
+
+
+ rcTimeVal contourEndTime = rcGetPerformanceTimer();
+
+ // Delete vertices.
+ delete [] flags;
+
+ rcTimeVal endTime = rcGetPerformanceTimer();
+
+ if (rcGetLog())
+ {
+ rcGetLog()->log(RC_LOG_PROGRESS, "Create contours: %.3f ms", rcGetDeltaTimeUsec(startTime, endTime)/1000.0f);
+ rcGetLog()->log(RC_LOG_PROGRESS, " - boundary: %.3f ms", rcGetDeltaTimeUsec(boundaryStartTime, boundaryEndTime)/1000.0f);
+ rcGetLog()->log(RC_LOG_PROGRESS, " - contour: %.3f ms", rcGetDeltaTimeUsec(contourStartTime, contourEndTime)/1000.0f);
+ }
+
+ return true;
+}
diff --git a/Recast/Source/RecastDebugDraw.cpp b/Recast/Source/RecastDebugDraw.cpp
new file mode 100644
index 0000000..1ba932c
--- /dev/null
+++ b/Recast/Source/RecastDebugDraw.cpp
@@ -0,0 +1,491 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#define _USE_MATH_DEFINES
+#include
+#include "RecastDebugDraw.h"
+#include "SDL.h"
+#include "SDL_Opengl.h"
+#include "MeshLoaderObj.h"
+#include "Recast.h"
+
+void rcDebugDrawMesh(const rcMeshLoaderObj& mesh, const unsigned char* flags)
+{
+ int nt = mesh.getTriCount();
+ const float* verts = mesh.getVerts();
+ const float* normals = mesh.getNormals();
+ const int* tris = mesh.getTris();
+ glBegin(GL_TRIANGLES);
+ for (int i = 0; i < nt*3; i += 3)
+ {
+ float a = (2+normals[i+0]+normals[i+1])/4;
+ if (flags && !flags[i/3])
+ glColor3f(a,a*0.3f,a*0.1f);
+ else
+ glColor3f(a,a,a);
+ glVertex3fv(&verts[tris[i]*3]);
+ glVertex3fv(&verts[tris[i+1]*3]);
+ glVertex3fv(&verts[tris[i+2]*3]);
+ }
+ glEnd();
+}
+
+void drawBoxWire(float minx, float miny, float minz, float maxx, float maxy, float maxz, const float* col)
+{
+ glColor4fv(col);
+
+ // Top
+ glVertex3f(minx, miny, minz);
+ glVertex3f(maxx, miny, minz);
+ glVertex3f(maxx, miny, minz);
+ glVertex3f(maxx, miny, maxz);
+ glVertex3f(maxx, miny, maxz);
+ glVertex3f(minx, miny, maxz);
+ glVertex3f(minx, miny, maxz);
+ glVertex3f(minx, miny, minz);
+
+ // bottom
+ glVertex3f(minx, maxy, minz);
+ glVertex3f(maxx, maxy, minz);
+ glVertex3f(maxx, maxy, minz);
+ glVertex3f(maxx, maxy, maxz);
+ glVertex3f(maxx, maxy, maxz);
+ glVertex3f(minx, maxy, maxz);
+ glVertex3f(minx, maxy, maxz);
+ glVertex3f(minx, maxy, minz);
+
+ // Sides
+ glVertex3f(minx, miny, minz);
+ glVertex3f(minx, maxy, minz);
+ glVertex3f(maxx, miny, minz);
+ glVertex3f(maxx, maxy, minz);
+ glVertex3f(maxx, miny, maxz);
+ glVertex3f(maxx, maxy, maxz);
+ glVertex3f(minx, miny, maxz);
+ glVertex3f(minx, maxy, maxz);
+}
+
+void drawBox(float minx, float miny, float minz, float maxx, float maxy, float maxz,
+ const float* col1, const float* col2)
+{
+ float verts[8*3] =
+ {
+ minx, miny, minz,
+ maxx, miny, minz,
+ maxx, miny, maxz,
+ minx, miny, maxz,
+ minx, maxy, minz,
+ maxx, maxy, minz,
+ maxx, maxy, maxz,
+ minx, maxy, maxz,
+ };
+ static const float dim[6] =
+ {
+ 0.95f, 0.55f, 0.65f, 0.85f, 0.65f, 0.85f,
+ };
+ static const unsigned char inds[6*5] =
+ {
+ 0, 7, 6, 5, 4,
+ 1, 0, 1, 2, 3,
+ 2, 1, 5, 6, 2,
+ 3, 3, 7, 4, 0,
+ 4, 2, 6, 7, 3,
+ 5, 0, 4, 5, 1,
+ };
+
+ const unsigned char* in = inds;
+ for (int i = 0; i < 6; ++i)
+ {
+ float d = dim[*in]; in++;
+ if (i == 0)
+ glColor4f(d*col2[0],d*col2[1],d*col2[2], col2[3]);
+ else
+ glColor4f(d*col1[0],d*col1[1],d*col1[2], col1[3]);
+ glVertex3fv(&verts[*in*3]); in++;
+ glVertex3fv(&verts[*in*3]); in++;
+ glVertex3fv(&verts[*in*3]); in++;
+ glVertex3fv(&verts[*in*3]); in++;
+ }
+}
+
+void rcDebugDrawCylinderWire(float minx, float miny, float minz, float maxx, float maxy, float maxz, const float* col)
+{
+ static const int NUM_SEG = 16;
+ float dir[NUM_SEG*2];
+ for (int i = 0; i < NUM_SEG; ++i)
+ {
+ const float a = (float)i/(float)NUM_SEG*(float)M_PI*2;
+ dir[i*2] = cosf(a);
+ dir[i*2+1] = sinf(a);
+ }
+
+ const float cx = (maxx + minx)/2;
+ const float cz = (maxz + minz)/2;
+ const float rx = (maxx - minx)/2;
+ const float rz = (maxz - minz)/2;
+
+ glColor4fv(col);
+ glBegin(GL_LINES);
+ for (int i = 0, j=NUM_SEG-1; i < NUM_SEG; j=i++)
+ {
+ glVertex3f(cx+dir[j*2+0]*rx, miny, cz+dir[j*2+1]*rz);
+ glVertex3f(cx+dir[i*2+0]*rx, miny, cz+dir[i*2+1]*rz);
+ glVertex3f(cx+dir[j*2+0]*rx, maxy, cz+dir[j*2+1]*rz);
+ glVertex3f(cx+dir[i*2+0]*rx, maxy, cz+dir[i*2+1]*rz);
+ }
+ for (int i = 0; i < NUM_SEG; i += NUM_SEG/4)
+ {
+ glVertex3f(cx+dir[i*2+0]*rx, miny, cz+dir[i*2+1]*rz);
+ glVertex3f(cx+dir[i*2+0]*rx, maxy, cz+dir[i*2+1]*rz);
+ }
+ glEnd();
+}
+
+void rcDebugDrawBoxWire(float minx, float miny, float minz, float maxx, float maxy, float maxz, const float* col)
+{
+ glBegin(GL_LINES);
+ drawBoxWire(minx, miny, minz, maxx, maxy, maxz, col);
+ glEnd();
+}
+
+void rcDebugDrawBox(float minx, float miny, float minz, float maxx, float maxy, float maxz,
+ const float* col1, const float* col2)
+{
+ glBegin(GL_QUADS);
+ drawBox(minx, miny, minz, maxx, maxy, maxz, col1, col2);
+ glEnd();
+}
+
+
+void rcDebugDrawHeightfieldSolid(const rcHeightfield& hf,
+ const float* orig, float cs, float ch)
+{
+ static const float col0[4] = { 1,1,1,1 };
+
+ const int w = hf.width;
+ const int h = hf.height;
+
+ glBegin(GL_QUADS);
+
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ float fx = orig[0] + x*cs;
+ float fz = orig[2] + y*cs;
+ const rcSpan* s = hf.spans[x + y*w];
+ while (s)
+ {
+ drawBox(fx, orig[1]+s->smin*ch, fz, fx+cs, orig[1] + s->smax*ch, fz+cs, col0, col0);
+ s = s->next;
+ }
+ }
+ }
+ glEnd();
+}
+
+void rcDebugDrawHeightfieldWalkable(const rcHeightfield& hf,
+ const float* orig, float cs, float ch)
+{
+ static const float col0[4] = { 1,1,1,1 };
+ static const float col1[4] = { 0.25f,0.44f,0.5f,1 };
+
+ const int w = hf.width;
+ const int h = hf.height;
+
+ glBegin(GL_QUADS);
+
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ float fx = orig[0] + x*cs;
+ float fz = orig[2] + y*cs;
+ const rcSpan* s = hf.spans[x + y*w];
+ while (s)
+ {
+ bool csel = (s->flags & 0x2) == 0;
+ drawBox(fx, orig[1]+s->smin*ch, fz, fx+cs, orig[1] + s->smax*ch, fz+cs, col0, csel ? col0 : col1);
+ s = s->next;
+ }
+ }
+ }
+ glEnd();
+}
+
+void rcDebugDrawCompactHeightfieldSolid(const rcCompactHeightfield& chf)
+{
+ const float cs = chf.cs;
+ const float ch = chf.ch;
+
+ glColor3ub(64,112,128);
+
+ glBegin(GL_QUADS);
+ for (int y = 0; y < chf.height; ++y)
+ {
+ for (int x = 0; x < chf.width; ++x)
+ {
+ const float fx = chf.minx + x*cs;
+ const float fz = chf.minz + y*cs;
+ const rcCompactCell& c = chf.cells[x+y*chf.width];
+
+ for (unsigned i = c.index, ni = c.index+c.count; i < ni; ++i)
+ {
+ const rcCompactSpan& s = chf.spans[i];
+ const float fy = chf.miny + (s.y+1)*ch;
+ glVertex3f(fx, fy, fz);
+ glVertex3f(fx, fy, fz+cs);
+ glVertex3f(fx+cs, fy, fz+cs);
+ glVertex3f(fx+cs, fy, fz);
+ }
+ }
+ }
+ glEnd();
+}
+
+void rcDebugDrawCompactHeightfieldRegions(const rcCompactHeightfield& chf)
+{
+ const float cs = chf.cs;
+ const float ch = chf.ch;
+
+ float col[4] = { 1,1,1,1 };
+
+ glBegin(GL_QUADS);
+ for (int y = 0; y < chf.height; ++y)
+ {
+ for (int x = 0; x < chf.width; ++x)
+ {
+ const float fx = chf.minx + x*cs;
+ const float fz = chf.minz + y*cs;
+ const rcCompactCell& c = chf.cells[x+y*chf.width];
+
+ for (unsigned i = c.index, ni = c.index+c.count; i < ni; ++i)
+ {
+ const rcCompactSpan& s = chf.spans[i];
+ if (s.reg)
+ {
+ intToCol(s.reg, col);
+ glColor4fv(col);
+ }
+ else
+ glColor4ub(0,0,0,128);
+ const float fy = chf.miny + (s.y+1)*ch;
+ glVertex3f(fx, fy, fz);
+ glVertex3f(fx, fy, fz+cs);
+ glVertex3f(fx+cs, fy, fz+cs);
+ glVertex3f(fx+cs, fy, fz);
+ }
+ }
+ }
+ glEnd();
+}
+
+
+void rcDebugDrawCompactHeightfieldDistance(const rcCompactHeightfield& chf)
+{
+ const float cs = chf.cs;
+ const float ch = chf.ch;
+
+ float maxd = chf.maxDistance;
+ if (maxd < 1.0f) maxd = 1;
+ float dscale = 1.0f / maxd;
+
+ glBegin(GL_QUADS);
+ for (int y = 0; y < chf.height; ++y)
+ {
+ for (int x = 0; x < chf.width; ++x)
+ {
+ const float fx = chf.minx + x*cs;
+ const float fz = chf.minz + y*cs;
+ const rcCompactCell& c = chf.cells[x+y*chf.width];
+
+ for (unsigned i = c.index, ni = c.index+c.count; i < ni; ++i)
+ {
+ const rcCompactSpan& s = chf.spans[i];
+ const float fy = chf.miny + (s.y+1)*ch;
+ float cd = (float)s.dist * dscale;
+ glColor3f(cd, cd, cd);
+ glVertex3f(fx, fy, fz);
+ glVertex3f(fx, fy, fz+cs);
+ glVertex3f(fx+cs, fy, fz+cs);
+ glVertex3f(fx+cs, fy, fz);
+ }
+ }
+ }
+ glEnd();
+}
+
+void rcDebugDrawRawContours(const rcContourSet& cset, const float* orig, float cs, float ch)
+{
+ float col[4] = { 1,1,1,1 };
+ glLineWidth(3.0f);
+ for (int i = 0; i < cset.nconts; ++i)
+ {
+ const rcContour& c = cset.conts[i];
+ intToCol(c.reg, col);
+ glColor4fv(col);
+ glBegin(GL_LINE_LOOP);
+ for (int j = 0; j < c.nrverts; ++j)
+ {
+ const int* v = &c.rverts[j*4];
+ float fx = orig[0] + v[0]*cs;
+ float fy = orig[1] + (v[1]+1+(i&1))*ch;
+ float fz = orig[2] + v[2]*cs;
+ glVertex3f(fx,fy,fz);
+ }
+ glEnd();
+ }
+ glLineWidth(1.0f);
+}
+
+void rcDebugDrawContours(const rcContourSet& cset, const float* orig, float cs, float ch)
+{
+ float col[4] = { 1,1,1,1 };
+ glLineWidth(3.0f);
+ glPointSize(4.0f);
+ for (int i = 0; i < cset.nconts; ++i)
+ {
+ const rcContour& c = cset.conts[i];
+ intToCol(c.reg, col);
+ glColor4fv(col);
+ glBegin(GL_LINE_LOOP);
+ for (int j = 0; j < c.nverts; ++j)
+ {
+ const int* v = &c.verts[j*4];
+ float fx = orig[0] + v[0]*cs;
+ float fy = orig[1] + (v[1]+1+(i&1))*ch;
+ float fz = orig[2] + v[2]*cs;
+ glVertex3f(fx,fy,fz);
+ }
+ glEnd();
+ glColor4ub(0,0,0,128);
+ glBegin(GL_POINTS);
+ for (int j = 0; j < c.nverts; ++j)
+ {
+ const int* v = &c.verts[j*4];
+ float fx = orig[0] + v[0]*cs;
+ float fy = orig[1] + (v[1]+1+(i&1))*ch;
+ float fz = orig[2] + v[2]*cs;
+ glVertex3f(fx,fy,fz);
+ }
+ glEnd();
+ }
+ glLineWidth(1.0f);
+ glPointSize(1.0f);
+}
+
+void rcDebugDrawPolyMesh(const struct rcPolyMesh& mesh, const float* orig, float cs, float ch)
+{
+ const int nvp = mesh.nvp;
+ glColor4ub(0,196,255,64);
+ glBegin(GL_TRIANGLES);
+ for (int i = 0; i < mesh.npolys; ++i)
+ {
+ const unsigned short* p = &mesh.polys[i*nvp*2];
+ unsigned short vi[3];
+ for (int j = 2; j < nvp; ++j)
+ {
+ if (p[j] == 0xffff) break;
+ vi[0] = p[0];
+ vi[1] = p[j-1];
+ vi[2] = p[j];
+ for (int k = 0; k < 3; ++k)
+ {
+ const unsigned short* v = &mesh.verts[vi[k]*3];
+ const float x = orig[0] + v[0]*cs;
+ const float y = orig[1] + (v[1]+2)*ch;
+ const float z = orig[2] + v[2]*cs;
+ glVertex3f(x, y, z);
+ }
+ }
+ }
+ glEnd();
+
+ // Draw tri boundaries
+ glColor4ub(0,0,0,64);
+ glLineWidth(1.0f);
+ glBegin(GL_LINES);
+ for (int i = 0; i < mesh.npolys; ++i)
+ {
+ const unsigned short* poly = &mesh.polys[i*nvp*2];
+ for (int j = 0; j < nvp; ++j)
+ {
+ if (poly[j] == 0xffff) break;
+ if (poly[nvp+j] == 0xffff) continue;
+ int vi[2];
+ vi[0] = poly[j];
+ if (j+1 >= nvp || poly[j+1] == 0xffff)
+ vi[1] = poly[0];
+ else
+ vi[1] = poly[j+1];
+ for (int k = 0; k < 2; ++k)
+ {
+ const unsigned short* v = &mesh.verts[vi[k]*3];
+ const float x = orig[0] + v[0]*cs;
+ const float y = orig[1] + (v[1]+2)*ch + 0.1f;
+ const float z = orig[2] + v[2]*cs;
+ glVertex3f(x, y, z);
+ }
+ }
+ }
+ glEnd();
+
+ // Draw boundaries
+ glLineWidth(3.0f);
+ glColor4ub(0,0,0,128);
+ glBegin(GL_LINES);
+ for (int i = 0; i < mesh.npolys; ++i)
+ {
+ const unsigned short* poly = &mesh.polys[i*nvp*2];
+ for (int j = 0; j < nvp; ++j)
+ {
+ if (poly[j] == 0xffff) break;
+ if (poly[nvp+j] != 0xffff) continue;
+ int vi[2];
+ vi[0] = poly[j];
+ if (j+1 >= nvp || poly[j+1] == 0xffff)
+ vi[1] = poly[0];
+ else
+ vi[1] = poly[j+1];
+ for (int k = 0; k < 2; ++k)
+ {
+ const unsigned short* v = &mesh.verts[vi[k]*3];
+ const float x = orig[0] + v[0]*cs;
+ const float y = orig[1] + (v[1]+2)*ch + 0.1f;
+ const float z = orig[2] + v[2]*cs;
+ glVertex3f(x, y, z);
+ }
+ }
+ }
+ glEnd();
+ glLineWidth(1.0f);
+
+ glPointSize(4.0f);
+ glColor4ub(0,0,0,128);
+ glBegin(GL_POINTS);
+ for (int i = 0; i < mesh.nverts; ++i)
+ {
+ const unsigned short* v = &mesh.verts[i*3];
+ const float x = orig[0] + v[0]*cs;
+ const float y = orig[1] + (v[1]+2)*ch + 0.1f;
+ const float z = orig[2] + v[2]*cs;
+ glVertex3f(x, y, z);
+ }
+ glEnd();
+ glPointSize(1.0f);
+}
diff --git a/Recast/Source/RecastFilter.cpp b/Recast/Source/RecastFilter.cpp
new file mode 100644
index 0000000..1077a1e
--- /dev/null
+++ b/Recast/Source/RecastFilter.cpp
@@ -0,0 +1,232 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#define _USE_MATH_DEFINES
+#include
+#include
+#include "Recast.h"
+#include "RecastLog.h"
+#include "RecastTimer.h"
+
+
+void rcFilterWalkableBorderSpans(const int walkableHeight,
+ const int walkableClimb,
+ rcHeightfield& solid)
+{
+ rcTimeVal startTime = rcGetPerformanceTimer();
+
+ const int w = solid.width;
+ const int h = solid.height;
+ const int MAX_HEIGHT = 0xffff;
+
+ // Mark border spans.
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ for (rcSpan* s = solid.spans[x + y*w]; s; s = s->next)
+ {
+ // Skip non walkable spans.
+ if ((s->flags & RC_WALKABLE) == 0)
+ continue;
+
+ // The span is valid only if it has four neighbours.
+ int neighbourCount = 0;
+
+ const int bot = (int)s->smax;
+ const int top = (int)s->next ? (int)s->next->smin : MAX_HEIGHT;
+
+ // Visit neighbours in all 4 directions.
+ for (int dir = 0; dir < 4; ++dir)
+ {
+ int dx = x + rcGetDirOffsetX(dir);
+ int dy = y + rcGetDirOffsetY(dir);
+ // Skip neighbours which are out of bounds.
+ if (dx < 0 || dy < 0 || dx >= w || dy >= h)
+ continue;
+ for (rcSpan* ns = solid.spans[dx + dy*w]; ns; ns = ns->next)
+ {
+ const int nbot = (int)ns->smax;
+ const int ntop = (int)ns->next ? (int)ns->next->smin : MAX_HEIGHT;
+ // Skip neightbour if the gap between the spans is too small.
+ if (rcMin(top,ntop) - rcMax(bot,nbot) <= walkableHeight)
+ continue;
+ // Skip neightbour if the climb height to the neighbour is too high.
+ if (rcAbs(nbot - bot) >= walkableClimb)
+ continue;
+ // This neighbour is reachable.
+ neighbourCount++;
+ }
+ }
+ // Remove walkable flag.
+ if (neighbourCount != 4)
+ s->flags &= ~RC_WALKABLE;
+ }
+ }
+ }
+
+ rcTimeVal endTime = rcGetPerformanceTimer();
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_PROGRESS, "Filter border: %.3f ms", rcGetDeltaTimeUsec(startTime, endTime)/1000.0f);
+}
+
+void rcFilterWalkableLowHeightSpans(int walkableHeight,
+ rcHeightfield& solid)
+{
+ rcTimeVal startTime = rcGetPerformanceTimer();
+
+ const int w = solid.width;
+ const int h = solid.height;
+ const int MAX_HEIGHT = 0xffff;
+
+ // Remove walkable flag from spans which do not have enough
+ // space above them for the agent to stand there.
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ for (rcSpan* s = solid.spans[x + y*w]; s; s = s->next)
+ {
+ const int bot = (int)s->smax;
+ const int top = (int)s->next ? (int)s->next->smin : MAX_HEIGHT;
+ if ((top - bot) <= walkableHeight)
+ s->flags &= ~RC_WALKABLE;
+ }
+ }
+ }
+
+ rcTimeVal endTime = rcGetPerformanceTimer();
+
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_PROGRESS, "Filter walkable: %.3f ms", rcGetDeltaTimeUsec(startTime, endTime)/1000.0f);
+}
+
+struct rcReachableSeed
+{
+ inline void set(int ix, int iy, rcSpan* is)
+ {
+ x = (unsigned short)ix;
+ y = (unsigned short)iy;
+ s = is;
+ }
+ unsigned short x, y;
+ rcSpan* s;
+};
+
+bool rcMarkReachableSpans(const int walkableHeight,
+ const int walkableClimb,
+ rcHeightfield& solid)
+{
+ const int w = solid.width;
+ const int h = solid.height;
+ const int MAX_HEIGHT = 0xffff;
+
+ rcTimeVal startTime = rcGetPerformanceTimer();
+
+ // Build navigable space.
+ const int MAX_SEEDS = w*h;
+ rcReachableSeed* stack = new rcReachableSeed[MAX_SEEDS];
+ if (!stack)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcMarkReachableSpans: Out of memory 'stack' (%d).", MAX_SEEDS);
+ return false;
+ }
+ int stackSize = 0;
+
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ rcSpan* topSpan = solid.spans[x + y*w];
+ if (!topSpan)
+ continue;
+ while (topSpan->next)
+ topSpan = topSpan->next;
+
+ // If the span is not walkable, skip it.
+ if ((topSpan->flags & RC_WALKABLE) == 0)
+ continue;
+ // If the span has been visited already, skip it.
+ if (topSpan->flags & RC_REACHABLE)
+ continue;
+
+ // Start flood fill.
+ topSpan->flags |= RC_REACHABLE;
+ stackSize = 0;
+ stack[stackSize].set(x, y, topSpan);
+ stackSize++;
+
+ while (stackSize)
+ {
+ // Pop a seed from the stack.
+ stackSize--;
+ rcReachableSeed cur = stack[stackSize];
+
+ const int bot = (int)cur.s->smax;
+ const int top = (int)cur.s->next ? (int)cur.s->next->smin : MAX_HEIGHT;
+
+ // Visit neighbours in all 4 directions.
+ for (int dir = 0; dir < 4; ++dir)
+ {
+ int dx = (int)cur.x + rcGetDirOffsetX(dir);
+ int dy = (int)cur.y + rcGetDirOffsetY(dir);
+ // Skip neighbour which are out of bounds.
+ if (dx < 0 || dy < 0 || dx >= w || dy >= h)
+ continue;
+ for (rcSpan* ns = solid.spans[dx + dy*w]; ns; ns = ns->next)
+ {
+ // Skip neighbour if it is not walkable.
+ if ((ns->flags & RC_WALKABLE) == 0)
+ continue;
+ // Skip the neighbour if it has been visited already.
+ if (ns->flags & RC_REACHABLE)
+ continue;
+
+ const int nbot = (int)ns->smax;
+ const int ntop = (int)ns->next ? (int)ns->next->smin : MAX_HEIGHT;
+ // Skip neightbour if the gap between the spans is too small.
+ if (rcMin(top,ntop) - rcMax(bot,nbot) < walkableHeight)
+ continue;
+ // Skip neightbour if the climb height to the neighbour is too high.
+ if (rcAbs(nbot - bot) >= walkableClimb)
+ continue;
+
+ // This neighbour has not been visited yet.
+ // Mark it as reachable and add it to the seed stack.
+ ns->flags |= RC_REACHABLE;
+ if (stackSize < MAX_SEEDS)
+ {
+ stack[stackSize].set(dx, dy, ns);
+ stackSize++;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ delete [] stack;
+
+ rcTimeVal endTime = rcGetPerformanceTimer();
+
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_PROGRESS, "Mark reachable: %.3f ms", rcGetDeltaTimeUsec(startTime, endTime)/1000.0f);
+
+ return true;
+}
diff --git a/Recast/Source/RecastLog.cpp b/Recast/Source/RecastLog.cpp
new file mode 100644
index 0000000..cc05f22
--- /dev/null
+++ b/Recast/Source/RecastLog.cpp
@@ -0,0 +1,66 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#include "RecastLog.h"
+#include
+#include
+
+static rcLog* g_log = 0;
+
+rcLog::rcLog() :
+ m_messageCount(0),
+ m_textPoolSize(0)
+{
+}
+
+rcLog::~rcLog()
+{
+ if (g_log == this)
+ g_log = 0;
+}
+
+void rcLog::log(rcLogCategory category, const char* format, ...)
+{
+ if (m_messageCount >= MAX_MESSAGES)
+ return;
+ char* dst = &m_textPool[m_textPoolSize];
+ int n = TEXT_POOL_SIZE - m_textPoolSize;
+ if (n < 2)
+ return;
+ // Store category
+ *dst = (char)category;
+ n--;
+ // Store message
+ va_list ap;
+ va_start(ap, format);
+ int ret = vsnprintf(dst+1, n-1, format, ap);
+ va_end(ap);
+ if (ret > 0)
+ m_textPoolSize += ret+2;
+ m_messages[m_messageCount++] = dst;
+}
+
+void rcSetLog(rcLog* log)
+{
+ g_log = log;
+}
+
+rcLog* rcGetLog()
+{
+ return g_log;
+}
diff --git a/Recast/Source/RecastMesh.cpp b/Recast/Source/RecastMesh.cpp
new file mode 100644
index 0000000..243298d
--- /dev/null
+++ b/Recast/Source/RecastMesh.cpp
@@ -0,0 +1,699 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#define _USE_MATH_DEFINES
+#include
+#include
+#include
+#include "Recast.h"
+#include "RecastLog.h"
+#include "RecastTimer.h"
+
+
+struct rcEdge
+{
+ unsigned short vert[2];
+ unsigned short polyEdge[2];
+ unsigned short poly[2];
+};
+
+static bool buildMeshAdjacency(unsigned short* polys, const int npolys,
+ const int nverts, const int vertsPerPoly)
+{
+ // Based on code by Eric Lengyel from:
+ // http://www.terathon.com/code/edges.php
+
+ int maxEdgeCount = npolys*vertsPerPoly;
+ unsigned short* firstEdge = new unsigned short[nverts + maxEdgeCount];
+ if (!firstEdge)
+ return false;
+ unsigned short* nextEdge = firstEdge + nverts;
+ int edgeCount = 0;
+
+ rcEdge* edges = new rcEdge[maxEdgeCount];
+ if (!edges)
+ return false;
+
+ for (int i = 0; i < nverts; i++)
+ firstEdge[i] = 0xffff;
+
+ // Invalida indices are marked as 0xffff, the following code
+ // handles them just fine.
+
+ for (int i = 0; i < npolys; ++i)
+ {
+ unsigned short* t = &polys[i*vertsPerPoly*2];
+ for (int j = 0; j < vertsPerPoly; ++j)
+ {
+ unsigned short v0 = t[j];
+ unsigned short v1 = (j+1 >= vertsPerPoly || t[j+1] == 0xffff) ? t[0] : t[j+1];
+ if (v0 < v1)
+ {
+ rcEdge& edge = edges[edgeCount];
+ edge.vert[0] = v0;
+ edge.vert[1] = v1;
+ edge.poly[0] = (unsigned short)i;
+ edge.polyEdge[0] = (unsigned short)j;
+ edge.poly[1] = (unsigned short)i;
+ edge.polyEdge[1] = 0;
+ // Insert edge
+ nextEdge[edgeCount] = firstEdge[v0];
+ firstEdge[v0] = edgeCount;
+ edgeCount++;
+ }
+ }
+ }
+
+ for (int i = 0; i < npolys; ++i)
+ {
+ unsigned short* t = &polys[i*vertsPerPoly*2];
+ for (int j = 0; j < vertsPerPoly; ++j)
+ {
+ unsigned short v0 = t[j];
+ unsigned short v1 = (j+1 >= vertsPerPoly || t[j+1] == 0xffff) ? t[0] : t[j+1];
+ if (v0 > v1)
+ {
+ for (unsigned short e = firstEdge[v1]; e != 0xffff; e = nextEdge[e])
+ {
+ rcEdge& edge = edges[e];
+ if (edge.vert[1] == v0 && edge.poly[0] == edge.poly[1])
+ {
+ edge.poly[1] = (unsigned short)i;
+ edge.polyEdge[1] = (unsigned short)j;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ // Store adjacency
+ for (int i = 0; i < edgeCount; ++i)
+ {
+ const rcEdge& e = edges[i];
+ if (e.poly[0] != e.poly[1])
+ {
+ unsigned short* p0 = &polys[e.poly[0]*vertsPerPoly*2];
+ unsigned short* p1 = &polys[e.poly[1]*vertsPerPoly*2];
+ p0[vertsPerPoly + e.polyEdge[0]] = e.poly[1];
+ p1[vertsPerPoly + e.polyEdge[1]] = e.poly[0];
+ }
+ }
+
+ delete [] firstEdge;
+ delete [] edges;
+
+ return true;
+}
+
+
+static const int VERTEX_BUCKET_COUNT = (1<<12);
+
+inline int computeVertexHash(int x, int y, int z)
+{
+ const unsigned int h1 = 0x8da6b343; // Large multiplicative constants;
+ const unsigned int h2 = 0xd8163841; // here arbitrarily chosen primes
+ const unsigned int h3 = 0xcb1ab31f;
+ unsigned int n = h1 * x + h2 * y + h3 * z;
+ return (int)(n & (VERTEX_BUCKET_COUNT-1));
+}
+
+static int addVertex(unsigned short x, unsigned short y, unsigned short z,
+ unsigned short* verts, int* firstVert, int* nextVert, int& nv)
+{
+ int bucket = computeVertexHash(x, y, z);
+ int i = firstVert[bucket];
+
+ while (i != -1)
+ {
+ const unsigned short* v = &verts[i*3];
+ if (v[0] == x && v[1] == y && v[2] == z)
+ return i;
+ i = nextVert[i]; // next
+ }
+
+ // Could not find, create new.
+ i = nv; nv++;
+ unsigned short* v = &verts[i*3];
+ v[0] = x;
+ v[1] = y;
+ v[2] = z;
+ nextVert[i] = firstVert[bucket];
+ firstVert[bucket] = i;
+
+ return i;
+}
+
+inline int prev(int i, int n) { return i-1 >= 0 ? i-1 : n-1; }
+inline int next(int i, int n) { return i+1 < n ? i+1 : 0; }
+
+inline int area2(const int* a, const int* b, const int* c)
+{
+ return (b[0] - a[0]) * (c[2] - a[2]) - (c[0] - a[0]) * (b[2] - a[2]);
+}
+
+// Exclusive or: true iff exactly one argument is true.
+// The arguments are negated to ensure that they are 0/1
+// values. Then the bitwise Xor operator may apply.
+// (This idea is due to Michael Baldwin.)
+inline bool xorb(bool x, bool y)
+{
+ return !x ^ !y;
+}
+
+// Returns true iff c is strictly to the left of the directed
+// line through a to b.
+inline bool left(const int* a, const int* b, const int* c)
+{
+ return area2(a, b, c) < 0;
+}
+
+inline bool leftOn(const int* a, const int* b, const int* c)
+{
+ return area2(a, b, c) <= 0;
+}
+
+inline bool collinear(const int* a, const int* b, const int* c)
+{
+ return area2(a, b, c) == 0;
+}
+
+// Returns true iff ab properly intersects cd: they share
+// a point interior to both segments. The properness of the
+// intersection is ensured by using strict leftness.
+bool intersectProp(const int* a, const int* b, const int* c, const int* d)
+{
+ // Eliminate improper cases.
+ if (collinear(a,b,c) || collinear(a,b,d) ||
+ collinear(c,d,a) || collinear(c,d,b))
+ return false;
+
+ return xorb(left(a,b,c), left(a,b,d)) && xorb(left(c,d,a), left(c,d,b));
+}
+
+// Returns T iff (a,b,c) are collinear and point c lies
+// on the closed segement ab.
+static bool between(const int* a, const int* b, const int* c)
+{
+ if (!collinear(a, b, c))
+ return false;
+ // If ab not vertical, check betweenness on x; else on y.
+ if (a[0] != b[0])
+ return ((a[0] <= c[0]) && (c[0] <= b[0])) || ((a[0] >= c[0]) && (c[0] >= b[0]));
+ else
+ return ((a[2] <= c[2]) && (c[2] <= b[2])) || ((a[2] >= c[2]) && (c[2] >= b[2]));
+}
+
+// Returns true iff segments ab and cd intersect, properly or improperly.
+static bool intersect(const int* a, const int* b, const int* c, const int* d)
+{
+ if (intersectProp(a, b, c, d))
+ return true;
+ else if (between(a, b, c) || between(a, b, d) ||
+ between(c, d, a) || between(c, d, b))
+ return true;
+ else
+ return false;
+}
+
+static bool vequal(const int* a, const int* b)
+{
+ return a[0] == b[0] && a[2] == b[2];
+}
+
+// Returns T iff (v_i, v_j) is a proper internal *or* external
+// diagonal of P, *ignoring edges incident to v_i and v_j*.
+static bool diagonalie(int i, int j, int n, const int* verts, int* indices)
+{
+ const int* d0 = &verts[(indices[i] & 0x0fffffff) * 4];
+ const int* d1 = &verts[(indices[j] & 0x0fffffff) * 4];
+
+ // For each edge (k,k+1) of P
+ for (int k = 0; k < n; k++)
+ {
+ int k1 = next(k, n);
+ // Skip edges incident to i or j
+ if (!((k == i) || (k1 == i) || (k == j) || (k1 == j)))
+ {
+ const int* p0 = &verts[(indices[k] & 0x0fffffff) * 4];
+ const int* p1 = &verts[(indices[k1] & 0x0fffffff) * 4];
+
+ if (vequal(d0, p0) || vequal(d1, p0) || vequal(d0, p1) || vequal(d1, p1))
+ continue;
+
+ if (intersect(d0, d1, p0, p1))
+ return false;
+ }
+ }
+ return true;
+}
+
+// Returns true iff the diagonal (i,j) is strictly internal to the
+// polygon P in the neighborhood of the i endpoint.
+static bool inCone(int i, int j, int n, const int* verts, int* indices)
+{
+ const int* pi = &verts[(indices[i] & 0x0fffffff) * 4];
+ const int* pj = &verts[(indices[j] & 0x0fffffff) * 4];
+ const int* pi1 = &verts[(indices[next(i, n)] & 0x0fffffff) * 4];
+ const int* pin1 = &verts[(indices[prev(i, n)] & 0x0fffffff) * 4];
+
+ // If P[i] is a convex vertex [ i+1 left or on (i-1,i) ].
+ if (leftOn(pin1, pi, pi1))
+ return left(pi, pj, pin1) && left(pj, pi, pi1);
+ // Assume (i-1,i,i+1) not collinear.
+ // else P[i] is reflex.
+ return !(leftOn(pi, pj, pi1) && leftOn(pj, pi, pin1));
+}
+
+// Returns T iff (v_i, v_j) is a proper internal
+// diagonal of P.
+static bool diagonal(int i, int j, int n, const int* verts, int* indices)
+{
+ return inCone(i, j, n, verts, indices) && diagonalie(i, j, n, verts, indices);
+}
+
+int triangulate(int n, const int* verts, int* indices, int* tris)
+{
+ int ntris = 0;
+ int* dst = tris;
+
+ // The last bit of the index is used to indicate if the vertex can be removed.
+ for (int i = 0; i < n; i++)
+ {
+ int i1 = next(i, n);
+ int i2 = next(i1, n);
+ if (diagonal(i, i2, n, verts, indices))
+ indices[i1] |= 0x80000000;
+ }
+
+ while (n > 3)
+ {
+ int minLen = -1;
+ int mini = -1;
+ for (int i = 0; i < n; i++)
+ {
+ int i1 = next(i, n);
+ if (indices[i1] & 0x80000000)
+ {
+ const int* p0 = &verts[(indices[i] & 0x0fffffff) * 4];
+ const int* p2 = &verts[(indices[next(i1, n)] & 0x0fffffff) * 4];
+
+ int dx = p2[0] - p0[0];
+ int dy = p2[2] - p0[2];
+ int len = dx*dx + dy*dy;
+
+ if (minLen < 0 || len < minLen)
+ {
+ minLen = len;
+ mini = i;
+ }
+ }
+ }
+
+ if (mini == -1)
+ {
+ // Should not happen.
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_WARNING, "triangulate: Failed to triangulate polygon.");
+/* printf("mini == -1 ntris=%d n=%d\n", ntris, n);
+ for (int i = 0; i < n; i++)
+ {
+ printf("%d ", indices[i] & 0x0fffffff);
+ }
+ printf("\n");*/
+ return -ntris;
+ }
+
+ int i = mini;
+ int i1 = next(i, n);
+ int i2 = next(i1, n);
+
+ *dst++ = indices[i] & 0x0fffffff;
+ *dst++ = indices[i1] & 0x0fffffff;
+ *dst++ = indices[i2] & 0x0fffffff;
+ ntris++;
+
+ // Removes P[i1] by copying P[i+1]...P[n-1] left one index.
+ n--;
+ for (int k = i1; k < n; k++)
+ indices[k] = indices[k+1];
+
+ if (i1 >= n) i1 = 0;
+ i = prev(i1,n);
+ // Update diagonal flags.
+ if (diagonal(prev(i, n), i1, n, verts, indices))
+ indices[i] |= 0x80000000;
+ else
+ indices[i] &= 0x0fffffff;
+
+ if (diagonal(i, next(i1, n), n, verts, indices))
+ indices[i1] |= 0x80000000;
+ else
+ indices[i1] &= 0x0fffffff;
+ }
+
+ // Append the remaining triangle.
+ *dst++ = indices[0] & 0x0fffffff;
+ *dst++ = indices[1] & 0x0fffffff;
+ *dst++ = indices[2] & 0x0fffffff;
+ ntris++;
+
+ return ntris;
+}
+
+static int countPolyVerts(const unsigned short* p, const int nvp)
+{
+ for (int i = 0; i < nvp; ++i)
+ if (p[i] == 0xffff)
+ return i;
+ return nvp;
+}
+
+inline bool uleftOn(const unsigned short* a, const unsigned short* b, const unsigned short* c)
+{
+ return ((int)b[0] - (int)a[0]) * ((int)c[2] - (int)a[2]) -
+ ((int)c[0] - (int)a[0]) * ((int)b[2] - (int)a[2]) <= 0;
+}
+
+static int getPolyMergeValue(unsigned short* pa, unsigned short* pb,
+ const unsigned short* verts, int& ea, int& eb,
+ const int nvp)
+{
+ const int na = countPolyVerts(pa, nvp);
+ const int nb = countPolyVerts(pb, nvp);
+
+ // If the merged polygon would be too big, do not merge.
+ if (na+nb-2 > nvp)
+ return -1;
+
+ // Check if the polygons share an edge.
+ ea = -1;
+ eb = -1;
+
+ for (int i = 0; i < na; ++i)
+ {
+ unsigned short va0 = pa[i];
+ unsigned short va1 = pa[(i+1) % na];
+ if (va0 > va1)
+ rcSwap(va0, va1);
+ for (int j = 0; j < nb; ++j)
+ {
+ unsigned short vb0 = pb[j];
+ unsigned short vb1 = pb[(j+1) % nb];
+ if (vb0 > vb1)
+ rcSwap(vb0, vb1);
+ if (va0 == vb0 && va1 == vb1)
+ {
+ ea = i;
+ eb = j;
+ break;
+ }
+ }
+ }
+
+ // No common edge, cannot merge.
+ if (ea == -1 || eb == -1)
+ return -1;
+
+ // Check to see if the merged polygon would be convex.
+ unsigned short va, vb, vc;
+
+ va = pa[(ea+na-1) % na];
+ vb = pa[ea];
+ vc = pb[(eb+2) % nb];
+ if (!uleftOn(&verts[va*3], &verts[vb*3], &verts[vc*3]))
+ return -1;
+
+ va = pb[(eb+nb-1) % nb];
+ vb = pb[eb];
+ vc = pa[(ea+2) % na];
+ if (!uleftOn(&verts[va*3], &verts[vb*3], &verts[vc*3]))
+ return -1;
+
+ va = pa[ea];
+ vb = pa[(ea+1)%na];
+
+ int dx = (int)verts[va*3+0] - (int)verts[vb*3+0];
+ int dy = (int)verts[va*3+2] - (int)verts[vb*3+2];
+
+ return dx*dx + dy*dy;
+}
+
+static void mergePolys(unsigned short* pa, unsigned short* pb,
+ const unsigned short* verts, int ea, int eb,
+ unsigned short* tmp, const int nvp)
+{
+ const int na = countPolyVerts(pa, nvp);
+ const int nb = countPolyVerts(pb, nvp);
+
+ // Merge polygons.
+ memset(tmp, 0xff, sizeof(unsigned short)*nvp);
+ int n = 0;
+ // Add pa
+ for (int i = 0; i < na-1; ++i)
+ tmp[n++] = pa[(ea+1+i) % na];
+ // Add pb
+ for (int i = 0; i < nb-1; ++i)
+ tmp[n++] = pb[(eb+1+i) % nb];
+
+ memcpy(pa, tmp, sizeof(unsigned short)*nvp);
+}
+
+bool rcBuildPolyMesh(rcContourSet& cset, rcPolyMesh& mesh, const int nvp)
+{
+ rcTimeVal startTime = rcGetPerformanceTimer();
+
+ int maxVertices = 0;
+ int maxTris = 0;
+ int maxVertsPerCont = 0;
+ for (int i = 0; i < cset.nconts; ++i)
+ {
+ maxVertices += cset.conts[i].nverts;
+ maxTris += cset.conts[i].nverts - 2;
+ maxVertsPerCont = rcMax(maxVertsPerCont, cset.conts[i].nverts);
+ }
+
+ if (maxVertices >= 0xfffe)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildPolyMesh: Too many vertices %d.", maxVertices);
+ return false;
+ }
+
+ mesh.verts = new unsigned short[maxVertices*3];
+ if (!mesh.verts)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'mesh.verts' (%d).", maxVertices);
+ return false;
+ }
+ mesh.polys = new unsigned short[maxTris*nvp*2];
+ if (!mesh.polys)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'mesh.verts' (%d).", maxTris*nvp);
+ return false;
+ }
+ mesh.nverts = 0;
+ mesh.npolys = 0;
+ mesh.nvp = nvp;
+
+ memset(mesh.verts, 0, sizeof(unsigned short)*maxVertices*3);
+ memset(mesh.polys, 0xff, sizeof(unsigned short)*maxTris*nvp*2);
+
+ int* nextVert = new int[maxVertices];
+ if (!nextVert)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'nextVert' (%d).", maxVertices);
+ return false;
+ }
+ memset(nextVert, 0, sizeof(int)*maxVertices);
+
+ int* firstVert = new int[VERTEX_BUCKET_COUNT];
+ if (!firstVert)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'firstVert' (%d).", VERTEX_BUCKET_COUNT);
+ return false;
+ }
+ for (int i = 0; i < VERTEX_BUCKET_COUNT; ++i)
+ firstVert[i] = -1;
+
+ int* indices = new int[maxVertsPerCont];
+ if (!indices)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'indices' (%d).", maxVertsPerCont);
+ return false;
+ }
+ int* tris = new int[maxVertsPerCont*3];
+ if (!tris)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'tris' (%d).", maxVertsPerCont*3);
+ return false;
+ }
+ unsigned short* polys = new unsigned short[maxVertsPerCont*nvp];
+ if (!polys)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'polys' (%d).", maxVertsPerCont*nvp);
+ return false;
+ }
+ unsigned short* tmpPoly = new unsigned short[nvp];
+ if (!tmpPoly)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildPolyMesh: Out of memory 'tmpPoly' (%d).", nvp);
+ return false;
+ }
+
+ for (int i = 0; i < cset.nconts; ++i)
+ {
+ rcContour& cont = cset.conts[i];
+
+ // Skip empty contours.
+ if (cont.nverts < 3)
+ continue;
+
+ // Triangulate contour
+ for (int j = 0; j < cont.nverts; ++j)
+ indices[j] = j;
+
+ int ntris = triangulate(cont.nverts, cont.verts, &indices[0], &tris[0]);
+ if (ntris <= 0)
+ {
+ // Bad triangulation, should not happen.
+/* for (int k = 0; k < cont.nverts; ++k)
+ {
+ const int* v = &cont.verts[k*4];
+ printf("\t\t%d,%d,%d,%d,\n", v[0], v[1], v[2], v[3]);
+ if (nBadPos < 100)
+ {
+ badPos[nBadPos*3+0] = v[0];
+ badPos[nBadPos*3+1] = v[1];
+ badPos[nBadPos*3+2] = v[2];
+ nBadPos++;
+ }
+ }*/
+ ntris = -ntris;
+ }
+ // Add and merge vertices.
+ for (int j = 0; j < cont.nverts; ++j)
+ {
+ const int* v = &cont.verts[j*4];
+ indices[j] = addVertex((unsigned short)v[0], (unsigned short)v[1], (unsigned short)v[2],
+ mesh.verts, firstVert, nextVert, mesh.nverts);
+ }
+
+ // Build initial polygons.
+ int npolys = 0;
+ memset(polys, 0xff, maxVertsPerCont*nvp*sizeof(unsigned short));
+ for (int j = 0; j < ntris; ++j)
+ {
+ int* t = &tris[j*3];
+ if (t[0] != t[1] && t[0] != t[2] && t[1] != t[2])
+ {
+ polys[npolys*nvp+0] = (unsigned short)indices[t[0]];
+ polys[npolys*nvp+1] = (unsigned short)indices[t[1]];
+ polys[npolys*nvp+2] = (unsigned short)indices[t[2]];
+ npolys++;
+ }
+ }
+ if (!npolys)
+ continue;
+
+ // Merge polygons.
+ if (nvp > 3)
+ {
+ while (true)
+ {
+ // Find best polygons to merge.
+ int bestMergeVal = 0;
+ int bestPa, bestPb, bestEa, bestEb;
+
+ for (int j = 0; j < npolys-1; ++j)
+ {
+ unsigned short* pj = &polys[j*nvp];
+ for (int k = j+1; k < npolys; ++k)
+ {
+ unsigned short* pk = &polys[k*nvp];
+ int ea, eb;
+ int v = getPolyMergeValue(pj, pk, mesh.verts, ea, eb, nvp);
+ if (v > bestMergeVal)
+ {
+ bestMergeVal = v;
+ bestPa = j;
+ bestPb = k;
+ bestEa = ea;
+ bestEb = eb;
+ }
+ }
+ }
+
+ if (bestMergeVal > 0)
+ {
+ // Found best, merge.
+ unsigned short* pa = &polys[bestPa*nvp];
+ unsigned short* pb = &polys[bestPb*nvp];
+ mergePolys(pa, pb, mesh.verts, bestEa, bestEb, tmpPoly, nvp);
+ memcpy(pb, &polys[(npolys-1)*nvp], sizeof(unsigned short)*nvp);
+ npolys--;
+ }
+ else
+ {
+ // Could not merge any polygons, stop.
+ break;
+ }
+ }
+ }
+
+
+ // Store polygons.
+ for (int j = 0; j < npolys; ++j)
+ {
+ unsigned short* p = &mesh.polys[mesh.npolys*nvp*2];
+ unsigned short* q = &polys[j*nvp];
+ for (int k = 0; k < nvp; ++k)
+ p[k] = q[k];
+ mesh.npolys++;
+ }
+ }
+
+ delete [] tmpPoly;
+ delete [] firstVert;
+ delete [] nextVert;
+ delete [] indices;
+ delete [] tris;
+
+ // Calculate adjacency.
+ if (!buildMeshAdjacency(mesh.polys, mesh.npolys, mesh.nverts, nvp))
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildPolyMesh: Adjacency failed.");
+ return false;
+ }
+
+ rcTimeVal endTime = rcGetPerformanceTimer();
+
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "Build polymesh: %.3f ms", rcGetDeltaTimeUsec(startTime, endTime)/1000.0f);
+
+ return true;
+}
diff --git a/Recast/Source/RecastRasterization.cpp b/Recast/Source/RecastRasterization.cpp
new file mode 100644
index 0000000..fc9e171
--- /dev/null
+++ b/Recast/Source/RecastRasterization.cpp
@@ -0,0 +1,295 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#define _USE_MATH_DEFINES
+#include
+#include
+#include "Recast.h"
+#include "RecastTimer.h"
+#include "RecastLog.h"
+
+inline bool overlapBounds(const float* amin, const float* amax, const float* bmin, const float* bmax)
+{
+ bool overlap = true;
+ overlap = (amin[0] > bmax[0] || amax[0] < bmin[0]) ? false : overlap;
+ overlap = (amin[1] > bmax[1] || amax[1] < bmin[1]) ? false : overlap;
+ overlap = (amin[2] > bmax[2] || amax[2] < bmin[2]) ? false : overlap;
+ return overlap;
+}
+
+inline bool overlapInterval(unsigned short amin, unsigned short amax,
+ unsigned short bmin, unsigned short bmax)
+{
+ if (amax < bmin) return false;
+ if (amin > bmax) return false;
+ return true;
+}
+
+
+static rcSpan* allocSpan(rcHeightfield& hf)
+{
+ static const int SPANS_PER_POOL = 2048;
+ // If running out of memory, allocate new page and update the freelist.
+ if (!hf.freelist || !hf.freelist->next)
+ {
+ // Create new page.
+ // Allocate memory for the new pool.
+ const int size = (sizeof(rcSpanPool)-sizeof(rcSpan)) + sizeof(rcSpan)*SPANS_PER_POOL;
+ rcSpanPool* pool = reinterpret_cast(new unsigned char[size]);
+ if (!pool) return 0;
+ pool->next = 0;
+ // Add the pool into the list of pools.
+ pool->next = hf.pools;
+ hf.pools = pool;
+ // Add new items to the free list.
+ rcSpan* freelist = hf.freelist;
+ rcSpan* head = &pool->items[0];
+ rcSpan* it = &pool->items[SPANS_PER_POOL];
+ do
+ {
+ --it;
+ it->next = freelist;
+ freelist = it;
+ }
+ while (it != head);
+ hf.freelist = it;
+ }
+
+ // Pop item from in front of the free list.
+ rcSpan* it = hf.freelist;
+ hf.freelist = hf.freelist->next;
+ return it;
+}
+
+static void freeSpan(rcHeightfield& hf, rcSpan* ptr)
+{
+ if (!ptr) return;
+ // Add the node in front of the free list.
+ ptr->next = hf.freelist;
+ hf.freelist = ptr;
+}
+
+static void addSpan(rcHeightfield& hf, int x, int y,
+ unsigned short smin, unsigned short smax,
+ unsigned short flags)
+{
+ int idx = x + y*hf.width;
+
+ rcSpan* s = allocSpan(hf);
+ s->smin = smin;
+ s->smax = smax;
+ s->flags = flags;
+ s->next = 0;
+
+ // Empty cell, add he first span.
+ if (!hf.spans[idx])
+ {
+ hf.spans[idx] = s;
+ return;
+ }
+ rcSpan* prev = 0;
+ rcSpan* cur = hf.spans[idx];
+
+ // Insert and merge spans.
+ while (cur)
+ {
+ if (cur->smin > s->smax)
+ {
+ // Current span is further than the new span, break.
+ break;
+ }
+ else if (cur->smax < s->smin)
+ {
+ // Current span is before the new span advance.
+ prev = cur;
+ cur = cur->next;
+ }
+ else
+ {
+ // Merge spans.
+ if (cur->smin < s->smin)
+ s->smin = cur->smin;
+ if (cur->smax > s->smax)
+ s->smax = cur->smax;
+
+ // Merge flags.
+// if (s->smax == cur->smax)
+ if (rcAbs((int)s->smax - (int)cur->smax) <= 1)
+ s->flags |= cur->flags;
+
+ // Remove current span.
+ rcSpan* next = cur->next;
+ freeSpan(hf, cur);
+ if (prev)
+ prev->next = next;
+ else
+ hf.spans[idx] = next;
+ cur = next;
+ }
+ }
+
+ // Insert new span.
+ if (prev)
+ {
+ s->next = prev->next;
+ prev->next = s;
+ }
+ else
+ {
+ s->next = hf.spans[idx];
+ hf.spans[idx] = s;
+ }
+}
+
+static int clipPoly(const float* in, int n, float* out, float pnx, float pnz, float pd)
+{
+ float d[12];
+ for (int i = 0; i < n; ++i)
+ d[i] = pnx*in[i*3+0] + pnz*in[i*3+2] + pd;
+
+ int m = 0;
+ for (int i = 0, j = n-1; i < n; j=i, ++i)
+ {
+ bool ina = d[j] >= 0;
+ bool inb = d[i] >= 0;
+ if (ina != inb)
+ {
+ float s = d[j] / (d[j] - d[i]);
+ out[m*3+0] = in[j*3+0] + (in[i*3+0] - in[j*3+0])*s;
+ out[m*3+1] = in[j*3+1] + (in[i*3+1] - in[j*3+1])*s;
+ out[m*3+2] = in[j*3+2] + (in[i*3+2] - in[j*3+2])*s;
+ m++;
+ }
+ if (inb)
+ {
+ out[m*3+0] = in[i*3+0];
+ out[m*3+1] = in[i*3+1];
+ out[m*3+2] = in[i*3+2];
+ m++;
+ }
+ }
+ return m;
+}
+
+static void rasterizeTri(const float* v0, const float* v1, const float* v2,
+ unsigned char flags, rcHeightfield& hf,
+ const float* bmin, const float* bmax,
+ const float cs, const float ics, const float ich)
+{
+ const int w = hf.width;
+ const int h = hf.height;
+ float tmin[3], tmax[3];
+ const float by = bmax[1] - bmin[1];
+
+ // Calculate the bounding box of the triangle.
+ vcopy(tmin, v0);
+ vcopy(tmax, v0);
+ vmin(tmin, v1);
+ vmin(tmin, v2);
+ vmax(tmax, v1);
+ vmax(tmax, v2);
+
+ // If the triangle does not touch the bbox of the heightfield, skip the triagle.
+ if (!overlapBounds(bmin, bmax, tmin, tmax))
+ return;
+
+ // Calculate the footpring of the triangle on the grid.
+ int x0 = (int)((tmin[0] - bmin[0])*ics);
+ int y0 = (int)((tmin[2] - bmin[2])*ics);
+ int x1 = (int)((tmax[0] - bmin[0])*ics);
+ int y1 = (int)((tmax[2] - bmin[2])*ics);
+ x0 = rcClamp(x0, 0, w-1);
+ y0 = rcClamp(y0, 0, h-1);
+ x1 = rcClamp(x1, 0, w-1);
+ y1 = rcClamp(y1, 0, h-1);
+
+ // Clip the triangle into all grid cells it touches.
+ float in[7*3], out[7*3], inrow[7*3];
+
+ for (int y = y0; y <= y1; ++y)
+ {
+ // Clip polygon to row.
+ vcopy(&in[0], v0);
+ vcopy(&in[1*3], v1);
+ vcopy(&in[2*3], v2);
+ int nvrow = 3;
+ const float cz = bmin[2] + y*cs;
+ nvrow = clipPoly(in, nvrow, out, 0, 1, -cz);
+ if (nvrow < 3) continue;
+ nvrow = clipPoly(out, nvrow, inrow, 0, -1, cz+cs);
+ if (nvrow < 3) continue;
+
+ for (int x = x0; x <= x1; ++x)
+ {
+ // Clip polygon to column.
+ int nv = nvrow;
+ const float cx = bmin[0] + x*cs;
+ nv = clipPoly(inrow, nv, out, 1, 0, -cx);
+ if (nv < 3) continue;
+ nv = clipPoly(out, nv, in, -1, 0, cx+cs);
+ if (nv < 3) continue;
+
+ // Calculate min and max of the span.
+ float smin = in[1], smax = in[1];
+ for (int i = 1; i < nv; ++i)
+ {
+ smin = rcMin(smin, in[i*3+1]);
+ smax = rcMax(smax, in[i*3+1]);
+ }
+ smin -= bmin[1];
+ smax -= bmin[1];
+ // Skip the span if it is outside the heightfield bbox
+ if (smax < 0.0f) continue;
+ if (smin > by) continue;
+ // Clamp the span to the heightfield bbox.
+ if (smin < 0.0f) smin = bmin[1];
+ if (smax > by) smax = bmax[1];
+
+ // Snap the span to the heightfield height grid.
+ unsigned short ismin = (unsigned short)rcClamp((int)floorf(smin * ich), 0, 0x7fff);
+ unsigned short ismax = (unsigned short)rcClamp((int)ceilf(smax * ich), 0, 0x7fff);
+
+ addSpan(hf, x, y, ismin, ismax, flags);
+ }
+ }
+}
+
+void rcRasterizeTriangles(const float* bmin, const float* bmax, const float cs, const float ch,
+ const float* verts, int nv,
+ const int* tris, const unsigned char* flags, int nt,
+ rcHeightfield& solid)
+{
+ rcTimeVal startTime = rcGetPerformanceTimer();
+
+ const float ics = 1.0f/cs;
+ const float ich = 1.0f/ch;
+ // Rasterize triangles.
+ for (int i = 0; i < nt; ++i)
+ {
+ const float* v0 = &verts[tris[i*3+0]*3];
+ const float* v1 = &verts[tris[i*3+1]*3];
+ const float* v2 = &verts[tris[i*3+2]*3];
+ // Rasterize.
+ rasterizeTri(v0, v1, v2, flags[i], solid, bmin, bmax, cs, ics, ich);
+ }
+
+ rcTimeVal endTime = rcGetPerformanceTimer();
+
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_PROGRESS, "Rasterize: %.3f ms", rcGetDeltaTimeUsec(startTime, endTime)/1000.0f);
+}
diff --git a/Recast/Source/RecastRegion.cpp b/Recast/Source/RecastRegion.cpp
new file mode 100644
index 0000000..9197283
--- /dev/null
+++ b/Recast/Source/RecastRegion.cpp
@@ -0,0 +1,1037 @@
+//
+// Copyright (c) 2009 Mikko Mononen memon@inside.org
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+// 3. This notice may not be removed or altered from any source distribution.
+//
+
+#include
+#define _USE_MATH_DEFINES
+#include
+#include
+#include
+#include
+#include "Recast.h"
+#include "RecastLog.h"
+#include "RecastTimer.h"
+
+
+static unsigned short* calculateDistanceField(rcCompactHeightfield& chf,
+ unsigned short* src, unsigned short* dst,
+ unsigned short& maxDist)
+{
+ const int w = chf.width;
+ const int h = chf.height;
+
+ // Init distance and points.
+ for (int i = 0; i < chf.spanCount; ++i)
+ src[i] = 0xffff;
+
+ // Mark boundary cells.
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ const rcCompactCell& c = chf.cells[x+y*w];
+ for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i)
+ {
+ const rcCompactSpan& s = chf.spans[i];
+ int nc = 0;
+ for (int dir = 0; dir < 4; ++dir)
+ {
+ if (rcGetCon(s, dir) != 0xf)
+ nc++;
+ }
+ if (nc != 4)
+ src[i] = 0;
+ }
+ }
+ }
+
+ // Pass 1
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ const rcCompactCell& c = chf.cells[x+y*w];
+ for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i)
+ {
+ const rcCompactSpan& s = chf.spans[i];
+
+ if (rcGetCon(s, 0) != 0xf)
+ {
+ // (-1,0)
+ const int ax = x + rcGetDirOffsetX(0);
+ const int ay = y + rcGetDirOffsetY(0);
+ const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, 0);
+ const rcCompactSpan& as = chf.spans[ai];
+ if (src[ai]+2 < src[i])
+ src[i] = src[ai]+2;
+
+ // (-1,-1)
+ if (rcGetCon(as, 3) != 0xf)
+ {
+ const int aax = ax + rcGetDirOffsetX(3);
+ const int aay = ay + rcGetDirOffsetY(3);
+ const int aai = (int)chf.cells[aax+aay*w].index + rcGetCon(as, 3);
+ if (src[aai]+3 < src[i])
+ src[i] = src[aai]+3;
+ }
+ }
+ if (rcGetCon(s, 3) != 0xf)
+ {
+ // (0,-1)
+ const int ax = x + rcGetDirOffsetX(3);
+ const int ay = y + rcGetDirOffsetY(3);
+ const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, 3);
+ const rcCompactSpan& as = chf.spans[ai];
+ if (src[ai]+2 < src[i])
+ src[i] = src[ai]+2;
+
+ // (1,-1)
+ if (rcGetCon(as, 2) != 0xf)
+ {
+ const int aax = ax + rcGetDirOffsetX(2);
+ const int aay = ay + rcGetDirOffsetY(2);
+ const int aai = (int)chf.cells[aax+aay*w].index + rcGetCon(as, 2);
+ if (src[aai]+3 < src[i])
+ src[i] = src[aai]+3;
+ }
+ }
+ }
+ }
+ }
+
+ // Pass 2
+ for (int y = h-1; y >= 0; --y)
+ {
+ for (int x = w-1; x >= 0; --x)
+ {
+ const rcCompactCell& c = chf.cells[x+y*w];
+ for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i)
+ {
+ const rcCompactSpan& s = chf.spans[i];
+
+ if (rcGetCon(s, 2) != 0xf)
+ {
+ // (1,0)
+ const int ax = x + rcGetDirOffsetX(2);
+ const int ay = y + rcGetDirOffsetY(2);
+ const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, 2);
+ const rcCompactSpan& as = chf.spans[ai];
+ if (src[ai]+2 < src[i])
+ src[i] = src[ai]+2;
+
+ // (1,1)
+ if (rcGetCon(as, 1) != 0xf)
+ {
+ const int aax = ax + rcGetDirOffsetX(1);
+ const int aay = ay + rcGetDirOffsetY(1);
+ const int aai = (int)chf.cells[aax+aay*w].index + rcGetCon(as, 1);
+ if (src[aai]+3 < src[i])
+ src[i] = src[aai]+3;
+ }
+ }
+ if (rcGetCon(s, 1) != 0xf)
+ {
+ // (0,1)
+ const int ax = x + rcGetDirOffsetX(1);
+ const int ay = y + rcGetDirOffsetY(1);
+ const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, 1);
+ const rcCompactSpan& as = chf.spans[ai];
+ if (src[ai]+2 < src[i])
+ src[i] = src[ai]+2;
+
+ // (-1,1)
+ if (rcGetCon(as, 0) != 0xf)
+ {
+ const int aax = ax + rcGetDirOffsetX(0);
+ const int aay = ay + rcGetDirOffsetY(0);
+ const int aai = (int)chf.cells[aax+aay*w].index + rcGetCon(as, 0);
+ if (src[aai]+3 < src[i])
+ src[i] = src[aai]+3;
+ }
+ }
+ }
+ }
+ }
+
+ maxDist = 0;
+ for (int i = 0; i < chf.spanCount; ++i)
+ maxDist = rcMax(src[i], maxDist);
+
+ return src;
+
+}
+
+static unsigned short* boxBlur(rcCompactHeightfield& chf, int thr,
+ unsigned short* src, unsigned short* dst)
+{
+ const int w = chf.width;
+ const int h = chf.height;
+
+ thr *= 2;
+
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ const rcCompactCell& c = chf.cells[x+y*w];
+ for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i)
+ {
+ const rcCompactSpan& s = chf.spans[i];
+ int cd = (int)src[i];
+ if (cd <= thr)
+ {
+ dst[i] = cd;
+ continue;
+ }
+
+ int d = cd;
+ for (int dir = 0; dir < 4; ++dir)
+ {
+ if (rcGetCon(s, dir) != 0xf)
+ {
+ const int ax = x + rcGetDirOffsetX(dir);
+ const int ay = y + rcGetDirOffsetY(dir);
+ const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, dir);
+ d += (int)src[ai];
+
+ const rcCompactSpan& as = chf.spans[ai];
+ const int dir2 = (dir+1) & 0x3;
+ if (rcGetCon(as, dir2) != 0xf)
+ {
+ const int ax2 = ax + rcGetDirOffsetX(dir2);
+ const int ay2 = ay + rcGetDirOffsetY(dir2);
+ const int ai2 = (int)chf.cells[ax2+ay2*w].index + rcGetCon(as, dir2);
+ d += (int)src[ai2];
+ }
+ else
+ {
+ d += cd;
+ }
+ }
+ else
+ {
+ d += cd*2;
+ }
+ }
+ dst[i] = (unsigned short)((d+5)/9);
+ }
+ }
+ }
+ return dst;
+}
+
+
+static bool floodRegion(int x, int y, int i,
+ unsigned short level, unsigned short minLevel, unsigned short r,
+ rcCompactHeightfield& chf,
+ unsigned short* src,
+ rcIntArray& stack)
+{
+ const int w = chf.width;
+
+ // Flood fill mark region.
+ stack.resize(0);
+ stack.push((int)x);
+ stack.push((int)y);
+ stack.push((int)i);
+ src[i*2] = r;
+ src[i*2+1] = 0;
+
+ unsigned short lev = level >= minLevel+2 ? level-2 : minLevel;
+ int count = 0;
+
+ while (stack.size() > 0)
+ {
+ int ci = stack.pop();
+ int cy = stack.pop();
+ int cx = stack.pop();
+
+ const rcCompactSpan& cs = chf.spans[ci];
+
+ // Check if any of the neighbours already have a valid region set.
+ unsigned short ar = 0;
+ for (int dir = 0; dir < 4; ++dir)
+ {
+ // 8 connected
+ if (rcGetCon(cs, dir) != 0xf)
+ {
+ const int ax = cx + rcGetDirOffsetX(dir);
+ const int ay = cy + rcGetDirOffsetY(dir);
+ const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(cs, dir);
+ unsigned short nr = src[ai*2];
+ if (nr != 0 && nr != r)
+ ar = nr;
+
+ const rcCompactSpan& as = chf.spans[ai];
+
+ const int dir2 = (dir+1) & 0x3;
+ if (rcGetCon(as, dir2) != 0xf)
+ {
+ const int ax2 = ax + rcGetDirOffsetX(dir2);
+ const int ay2 = ay + rcGetDirOffsetY(dir2);
+ const int ai2 = (int)chf.cells[ax2+ay2*w].index + rcGetCon(as, dir2);
+
+ unsigned short nr = src[ai2*2];
+ if (nr != 0 && nr != r)
+ ar = nr;
+ }
+ }
+ }
+ if (ar != 0)
+ {
+ src[ci*2] = 0;
+ continue;
+ }
+ count++;
+
+ // Expand neighbours.
+ for (int dir = 0; dir < 4; ++dir)
+ {
+ if (rcGetCon(cs, dir) != 0xf)
+ {
+ const int ax = cx + rcGetDirOffsetX(dir);
+ const int ay = cy + rcGetDirOffsetY(dir);
+ const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(cs, dir);
+ if (chf.spans[ai].dist >= lev)
+ {
+ if (src[ai*2] == 0)
+ {
+ src[ai*2] = r;
+ src[ai*2+1] = 0;
+ stack.push(ax);
+ stack.push(ay);
+ stack.push(ai);
+ }
+ }
+ }
+ }
+ }
+
+ return count > 0;
+}
+
+static unsigned short* expandRegions(int maxIter, unsigned short level,
+ rcCompactHeightfield& chf,
+ unsigned short* src,
+ unsigned short* dst,
+ rcIntArray& stack)
+{
+ const int w = chf.width;
+ const int h = chf.height;
+
+ // Find cells revealed by the raised level.
+ stack.resize(0);
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ const rcCompactCell& c = chf.cells[x+y*w];
+ for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i)
+ {
+ if (chf.spans[i].dist >= level && src[i*2] == 0)
+ {
+ stack.push(x);
+ stack.push(y);
+ stack.push(i);
+ }
+ }
+ }
+ }
+
+ int iter = 0;
+ while (stack.size() > 0)
+ {
+ int failed = 0;
+
+ memcpy(dst, src, sizeof(unsigned short)*chf.spanCount*2);
+
+ for (int j = 0; j < stack.size(); j += 3)
+ {
+ int x = stack[j+0];
+ int y = stack[j+1];
+ int i = stack[j+2];
+ if (i < 0)
+ {
+ failed++;
+ continue;
+ }
+
+ unsigned short r = src[i*2];
+ unsigned short d2 = 0xffff;
+ const rcCompactSpan& s = chf.spans[i];
+ for (int dir = 0; dir < 4; ++dir)
+ {
+ if (rcGetCon(s, dir) == 0xf) continue;
+ const int ax = x + rcGetDirOffsetX(dir);
+ const int ay = y + rcGetDirOffsetY(dir);
+ const int ai = (int)chf.cells[ax+ay*w].index + rcGetCon(s, dir);
+ if (src[ai*2])
+ {
+ if ((int)src[ai*2+1]+2 < (int)d2)
+ {
+ r = src[ai*2];
+ d2 = src[ai*2+1]+2;
+ }
+ }
+ }
+ if (r)
+ {
+ stack[j+2] = -1; // mark as used
+ dst[i*2] = r;
+ dst[i*2+1] = d2;
+ }
+ else
+ {
+ failed++;
+ }
+ }
+
+ // rcSwap source and dest.
+ rcSwap(src, dst);
+
+ if (failed*3 == stack.size())
+ break;
+
+ if (level > 0)
+ {
+ ++iter;
+ if (iter >= maxIter)
+ break;
+ }
+ }
+
+ return src;
+}
+
+
+struct rcRegion
+{
+ inline rcRegion() : count(0), id(0) {}
+
+ int count;
+ unsigned short id;
+ rcIntArray connections;
+ rcIntArray floors;
+};
+
+static void removeAdjacentNeighbours(rcRegion& reg)
+{
+ // Remove adjacent duplicates.
+ for (int i = 0; i < reg.connections.size() && reg.connections.size() > 1; )
+ {
+ int ni = (i+1) % reg.connections.size();
+ if (reg.connections[i] == reg.connections[ni])
+ {
+ // Remove duplicate
+ for (int j = i; j < reg.connections.size()-1; ++j)
+ reg.connections[j] = reg.connections[j+1];
+ reg.connections.pop();
+ }
+ else
+ ++i;
+ }
+}
+
+void replaceNeighbour(rcRegion& reg, unsigned short oldId, unsigned short newId)
+{
+ bool neiChanged = false;
+ for (int i = 0; i < reg.connections.size(); ++i)
+ {
+ if (reg.connections[i] == oldId)
+ {
+ reg.connections[i] = newId;
+ neiChanged = true;
+ }
+ }
+ for (int i = 0; i < reg.floors.size(); ++i)
+ {
+ if (reg.floors[i] == oldId)
+ reg.floors[i] = newId;
+ }
+ if (neiChanged)
+ removeAdjacentNeighbours(reg);
+}
+
+bool canMergeWithRegion(rcRegion& reg, unsigned short id)
+{
+ int n = 0;
+ for (int i = 0; i < reg.connections.size(); ++i)
+ {
+ if (reg.connections[i] == id)
+ n++;
+ }
+ if (n > 1)
+ return false;
+ for (int i = 0; i < reg.floors.size(); ++i)
+ {
+ if (reg.floors[i] == id)
+ return false;
+ }
+ return true;
+}
+
+static void addUniqueFloorRegion(rcRegion& reg, unsigned short n)
+{
+ for (int i = 0; i < reg.floors.size(); ++i)
+ if (reg.floors[i] == n)
+ return;
+ reg.floors.push(n);
+}
+
+static bool mergeRegions(rcRegion& rega, rcRegion& regb)
+{
+ unsigned short aid = rega.id;
+ unsigned short bid = regb.id;
+
+ // Duplicate current neighbourhood.
+ rcIntArray acon;
+ acon.resize(rega.connections.size());
+ for (int i = 0; i < rega.connections.size(); ++i)
+ acon[i] = rega.connections[i];
+ rcIntArray& bcon = regb.connections;
+
+ // Find insertion point on A.
+ int insa = -1;
+ for (int i = 0; i < acon.size(); ++i)
+ {
+ if (acon[i] == bid)
+ {
+ insa = i;
+ break;
+ }
+ }
+ if (insa == -1)
+ return false;
+
+ // Find insertion point on B.
+ int insb = -1;
+ for (int i = 0; i < bcon.size(); ++i)
+ {
+ if (bcon[i] == aid)
+ {
+ insb = i;
+ break;
+ }
+ }
+ if (insb == -1)
+ return false;
+
+ // Merge neighbours.
+ rega.connections.resize(0);
+ for (int i = 0, ni = acon.size(); i < ni-1; ++i)
+ rega.connections.push(acon[(insa+1+i) % ni]);
+
+ for (int i = 0, ni = bcon.size(); i < ni-1; ++i)
+ rega.connections.push(bcon[(insb+1+i) % ni]);
+
+ removeAdjacentNeighbours(rega);
+
+ for (int j = 0; j < regb.floors.size(); ++j)
+ addUniqueFloorRegion(rega, regb.floors[j]);
+ rega.count += regb.count;
+ regb.count = 0;
+ regb.connections.resize(0);
+
+ return true;
+}
+
+static bool isRegionConnectedToBorder(const rcRegion& reg)
+{
+ // Region is connected to border if
+ // one of the neighbours is null id.
+ for (int i = 0; i < reg.connections.size(); ++i)
+ {
+ if (reg.connections[i] == 0)
+ return true;
+ }
+ return false;
+}
+
+static bool isSolidEdge(rcCompactHeightfield& chf, unsigned short* src,
+ int x, int y, int i, int dir)
+{
+ const rcCompactSpan& s = chf.spans[i];
+ unsigned short r = 0;
+ if (rcGetCon(s, dir) != 0xf)
+ {
+ const int ax = x + rcGetDirOffsetX(dir);
+ const int ay = y + rcGetDirOffsetY(dir);
+ const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(s, dir);
+ r = src[ai*2];
+ }
+ if (r == src[i*2])
+ return false;
+ return true;
+}
+
+static void walkContour(int x, int y, int i, int dir,
+ rcCompactHeightfield& chf,
+ unsigned short* src,
+ rcIntArray& cont)
+{
+ int startDir = dir;
+ int starti = i;
+
+ const rcCompactSpan& ss = chf.spans[i];
+ unsigned short curReg = 0;
+ if (rcGetCon(ss, dir) != 0xf)
+ {
+ const int ax = x + rcGetDirOffsetX(dir);
+ const int ay = y + rcGetDirOffsetY(dir);
+ const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(ss, dir);
+ curReg = src[ai*2];
+ }
+ cont.push(curReg);
+
+ int iter = 0;
+ while (++iter < 40000)
+ {
+ const rcCompactSpan& s = chf.spans[i];
+
+ if (isSolidEdge(chf, src, x, y, i, dir))
+ {
+ // Choose the edge corner
+ unsigned short r = 0;
+ if (rcGetCon(s, dir) != 0xf)
+ {
+ const int ax = x + rcGetDirOffsetX(dir);
+ const int ay = y + rcGetDirOffsetY(dir);
+ const int ai = (int)chf.cells[ax+ay*chf.width].index + rcGetCon(s, dir);
+ r = src[ai*2];
+ }
+ if (r != curReg)
+ {
+ curReg = r;
+ cont.push(curReg);
+ }
+
+ dir = (dir+1) & 0x3; // Rotate CW
+ }
+ else
+ {
+ int ni = -1;
+ const int nx = x + rcGetDirOffsetX(dir);
+ const int ny = y + rcGetDirOffsetY(dir);
+ if (rcGetCon(s, dir) != 0xf)
+ {
+ const rcCompactCell& nc = chf.cells[nx+ny*chf.width];
+ ni = (int)nc.index + rcGetCon(s, dir);
+ }
+ if (ni == -1)
+ {
+ // Should not happen.
+ return;
+ }
+ x = nx;
+ y = ny;
+ i = ni;
+ dir = (dir+3) & 0x3; // Rotate CCW
+ }
+
+ if (starti == i && startDir == dir)
+ {
+ break;
+ }
+ }
+
+ // Remove adjacent duplicates.
+ if (cont.size() > 1)
+ {
+ for (int i = 0; i < cont.size(); )
+ {
+ int ni = (i+1) % cont.size();
+ if (cont[i] == cont[ni])
+ {
+ for (int j = i; j < cont.size()-1; ++j)
+ cont[j] = cont[j+1];
+ cont.pop();
+ }
+ else
+ ++i;
+ }
+ }
+}
+
+static bool filterSmallRegions(int minRegionSize, int mergeRegionSize,
+ unsigned short& maxRegionId,
+ rcCompactHeightfield& chf,
+ unsigned short* src)
+{
+ const int w = chf.width;
+ const int h = chf.height;
+
+ int nreg = maxRegionId+1;
+ rcRegion* regions = new rcRegion[nreg];
+ if (!regions)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "filterSmallRegions: Out of memory 'regions' (%d).", nreg);
+ return false;
+ }
+
+ for (int i = 0; i < nreg; ++i)
+ regions[i].id = (unsigned short)i;
+
+ // Find edge of a region and find connections around the contour.
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ const rcCompactCell& c = chf.cells[x+y*w];
+ for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i)
+ {
+ unsigned short r = src[i*2];
+ if (r == 0 || r >= nreg)
+ continue;
+
+ rcRegion& reg = regions[r];
+ reg.count++;
+
+
+ // Update floors.
+ for (int j = (int)c.index; j < ni; ++j)
+ {
+ if (i == j) continue;
+ unsigned short floorId = src[j*2];
+ if (floorId == 0 || floorId >= nreg)
+ continue;
+ addUniqueFloorRegion(reg, floorId);
+ }
+
+ // Have found contour
+ if (reg.connections.size() > 0)
+ continue;
+
+ // Check if this cell is next to a border.
+ int ndir = -1;
+ for (int dir = 0; dir < 4; ++dir)
+ {
+ if (isSolidEdge(chf, src, x, y, i, dir))
+ {
+ ndir = dir;
+ break;
+ }
+ }
+
+ if (ndir != -1)
+ {
+ // The cell is at border.
+ // Walk around the contour to find all the neighbours.
+ walkContour(x, y, i, ndir, chf, src, reg.connections);
+ }
+ }
+ }
+ }
+
+ // Remove too small unconnected regions.
+ for (int i = 0; i < nreg; ++i)
+ {
+ rcRegion& reg = regions[i];
+ if (reg.id == 0)
+ continue;
+ if (reg.count == 0)
+ continue;
+
+ if (reg.connections.size() == 1 && reg.connections[0] == 0)
+ {
+ if (reg.count < minRegionSize)
+ {
+ // Non-connected small region, remove.
+ reg.count = 0;
+ reg.id = 0;
+ }
+ }
+ }
+
+
+ // Merge too small regions to neighbour regions.
+ int mergeCount = 0 ;
+ do
+ {
+ mergeCount = 0;
+ for (int i = 0; i < nreg; ++i)
+ {
+ rcRegion& reg = regions[i];
+ if (reg.id == 0)
+ continue;
+ if (reg.count == 0)
+ continue;
+
+ // Check to see if the region should be merged.
+ if (reg.count > mergeRegionSize && isRegionConnectedToBorder(reg))
+ continue;
+
+ // Small region with more than 1 connection.
+ // Or region which is not connected to a border at all.
+ // Find smallest neighbour region that connects to this one.
+ int smallest = 0xfffffff;
+ unsigned short mergeId = reg.id;
+ for (int j = 0; j < reg.connections.size(); ++j)
+ {
+ rcRegion& mreg = regions[reg.connections[j]];
+ if (mreg.id == 0) continue;
+ if (mreg.count < smallest &&
+ canMergeWithRegion(reg, mreg.id) &&
+ canMergeWithRegion(mreg, reg.id))
+ {
+ smallest = mreg.count;
+ mergeId = mreg.id;
+ }
+ }
+ // Found new id.
+ if (mergeId != reg.id)
+ {
+ unsigned short oldId = reg.id;
+ rcRegion& target = regions[mergeId];
+
+ // Merge neighbours.
+ if (mergeRegions(target, reg))
+ {
+ // Fixup regions pointing to current region.
+ for (int j = 0; j < nreg; ++j)
+ {
+ if (regions[j].id == 0) continue;
+ // If another region was already merged into current region
+ // change the nid of the previous region too.
+ if (regions[j].id == oldId)
+ regions[j].id = mergeId;
+ // Replace the current region with the new one if the
+ // current regions is neighbour.
+ replaceNeighbour(regions[j], oldId, mergeId);
+ }
+ mergeCount++;
+ }
+ }
+ }
+ }
+ while (mergeCount > 0);
+
+ // Compress region Ids.
+ for (int i = 0; i < nreg; ++i)
+ {
+ if (regions[i].id == 0) continue;
+ regions[i].id |= 0x8000;
+ }
+
+ unsigned short regIdGen = 0;
+ for (int i = 0; i < nreg; ++i)
+ {
+ if ((regions[i].id & 0x8000) == 0)
+ continue;
+ unsigned short oldId = regions[i].id;
+ unsigned short newId = ++regIdGen;
+ for (int j = i; j < nreg; ++j)
+ {
+ if (regions[j].id == oldId)
+ regions[j].id = newId;
+ }
+ }
+ maxRegionId = regIdGen;
+
+ // Remap regions.
+ for (int i = 0; i < chf.spanCount; ++i)
+ src[i*2] = regions[src[i*2]].id;
+
+ delete [] regions;
+
+ return true;
+}
+
+bool rcBuildDistanceField(rcCompactHeightfield& chf)
+{
+ rcTimeVal startTime = rcGetPerformanceTimer();
+
+ unsigned short* dist0 = new unsigned short[chf.spanCount];
+ if (!dist0)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildDistanceField: Out of memory 'dist0' (%d).", chf.spanCount);
+ return false;
+ }
+ unsigned short* dist1 = new unsigned short[chf.spanCount];
+ if (!dist1)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildDistanceField: Out of memory 'dist1' (%d).", chf.spanCount);
+ delete [] dist0;
+ return false;
+ }
+
+ unsigned short* src = dist0;
+ unsigned short* dst = dist1;
+
+ unsigned short maxDist = 0;
+
+ rcTimeVal distStartTime = rcGetPerformanceTimer();
+
+ if (calculateDistanceField(chf, src, dst, maxDist) != src)
+ rcSwap(src, dst);
+
+ chf.maxDistance = maxDist;
+
+ rcTimeVal distEndTime = rcGetPerformanceTimer();
+
+ rcTimeVal blurStartTime = rcGetPerformanceTimer();
+
+ // Blur
+ int blurThr[4] = { 2, 4, 8, 16 };
+ for (int i = 0; i < 4; ++i)
+ {
+ if (boxBlur(chf, blurThr[i], src, dst) != src)
+ rcSwap(src, dst);
+ }
+
+ // Store distance.
+ for (int i = 0; i < chf.spanCount; ++i)
+ chf.spans[i].dist = src[i];
+
+ rcTimeVal blurEndTime = rcGetPerformanceTimer();
+
+ delete [] dist0;
+ delete [] dist1;
+
+ rcTimeVal endTime = rcGetPerformanceTimer();
+
+ if (rcGetLog())
+ {
+ rcGetLog()->log(RC_LOG_PROGRESS, "Build distance field: %.3f ms", rcGetDeltaTimeUsec(startTime, endTime)/1000.0f);
+ rcGetLog()->log(RC_LOG_PROGRESS, " - dist: %.3f ms", rcGetDeltaTimeUsec(distStartTime, distEndTime)/1000.0f);
+ rcGetLog()->log(RC_LOG_PROGRESS, " - blur: %.3f ms", rcGetDeltaTimeUsec(blurStartTime, blurEndTime)/1000.0f);
+ }
+
+ return true;
+}
+
+bool rcBuildRegions(rcCompactHeightfield& chf,
+ int walkableRadius, int minRegionSize, int mergeRegionSize)
+{
+ rcTimeVal startTime = rcGetPerformanceTimer();
+
+ const int w = chf.width;
+ const int h = chf.height;
+
+ unsigned short* tmp1 = new unsigned short[chf.spanCount*2];
+ if (!tmp1)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildDistanceField: Out of memory 'tmp1' (%d).", chf.spanCount*2);
+ return false;
+ }
+ unsigned short* tmp2 = new unsigned short[chf.spanCount*2];
+ if (!tmp2)
+ {
+ if (rcGetLog())
+ rcGetLog()->log(RC_LOG_ERROR, "rcBuildDistanceField: Out of memory 'tmp2' (%d).", chf.spanCount*2);
+ delete [] tmp1;
+ return false;
+ }
+
+ rcTimeVal regStartTime = rcGetPerformanceTimer();
+
+ rcIntArray stack(1024);
+ rcIntArray visited(1024);
+
+ unsigned short* src = tmp1;
+ unsigned short* dst = tmp2;
+
+ memset(src, 0, sizeof(unsigned short) * chf.spanCount*2);
+
+ unsigned short regionId = 1;
+ unsigned short level = (chf.maxDistance+1) & ~1;
+
+ unsigned short minLevel = (unsigned short)walkableRadius * 2;
+
+ const int expandIters = 4 + walkableRadius * 2;
+
+ rcTimeVal expTime = 0;
+ rcTimeVal marknewTime = 0;
+ rcTimeVal floodTime = 0;
+
+ while (level > minLevel)
+ {
+ level = level >= 2 ? level-2 : 0;
+
+ rcTimeVal expStartTime = rcGetPerformanceTimer();
+
+ // Expand current regions until no empty connected cells found.
+ if (expandRegions(expandIters, level, chf, src, dst, stack) != src)
+ rcSwap(src, dst);
+
+ expTime += rcGetPerformanceTimer() - expStartTime;
+
+ rcTimeVal floodStartTime = rcGetPerformanceTimer();
+
+ // Mark new regions with IDs.
+ for (int y = 0; y < h; ++y)
+ {
+ for (int x = 0; x < w; ++x)
+ {
+ const rcCompactCell& c = chf.cells[x+y*w];
+ for (int i = (int)c.index, ni = (int)(c.index+c.count); i < ni; ++i)
+ {
+ if (chf.spans[i].dist < level || src[i*2] != 0)
+ continue;
+
+ if (floodRegion(x, y, i, minLevel, level, regionId, chf, src, stack))
+ regionId++;
+ }
+ }
+ }
+
+ floodTime += rcGetPerformanceTimer() - floodStartTime;
+
+ }
+
+ // Expand current regions until no empty connected cells found.
+ if (expandRegions(expandIters, minLevel, chf, src, dst, stack) != src)
+ rcSwap(src, dst);
+
+
+ rcTimeVal regEndTime = rcGetPerformanceTimer();
+
+ rcTimeVal filterStartTime = rcGetPerformanceTimer();
+
+ // Filter out small regions.
+ chf.maxRegions = regionId;
+ if (!filterSmallRegions(minRegionSize, mergeRegionSize, chf.maxRegions, chf, src))
+ return false;
+
+ rcTimeVal filterEndTime = rcGetPerformanceTimer();
+
+ // Write the result out.
+ for (int i = 0; i < chf.spanCount; ++i)
+ chf.spans[i].reg = src[i*2];
+
+ delete [] tmp1;
+ delete [] tmp2;
+
+ rcTimeVal endTime = rcGetPerformanceTimer();
+
+ if (rcGetLog())
+ {
+ rcGetLog()->log(RC_LOG_PROGRESS, "Build regions: %.3f ms", rcGetDeltaTimeUsec(startTime, endTime)/1000.0f);
+ rcGetLog()->log(RC_LOG_PROGRESS, " - reg: %.3f ms", rcGetDeltaTimeUsec(regStartTime, regEndTime)/1000.0f);
+ rcGetLog()->log(RC_LOG_PROGRESS, " - exp: %.3f ms", rcGetDeltaTimeUsec(0, expTime)/1000.0f);
+ rcGetLog()->log(RC_LOG_PROGRESS, " - new: %.3f ms", rcGetDeltaTimeUsec(0, marknewTime)/1000.0f);
+ rcGetLog()->log(RC_LOG_PROGRESS, " - flood: %.3f ms", rcGetDeltaTimeUsec(0, floodTime)/1000.0f);
+ rcGetLog()->log(RC_LOG_PROGRESS, " - filter: %.3f ms", rcGetDeltaTimeUsec(filterStartTime, filterEndTime)/1000.0f);
+ }
+
+ return true;
+}
+
+
diff --git a/Recast/Source/RecastTimer.cpp b/Recast/Source/RecastTimer.cpp
new file mode 100644
index 0000000..e58df1b
--- /dev/null
+++ b/Recast/Source/RecastTimer.cpp
@@ -0,0 +1,43 @@
+#include "RecastTimer.h"
+
+#ifdef WIN32
+
+#include
+
+rcTimeVal rcGetPerformanceTimer()
+{
+ __int64 count;
+ QueryPerformanceCounter((LARGE_INTEGER*)&count);
+ return count;
+}
+
+int rcGetDeltaTimeUsec(rcTimeVal start, rcTimeVal end)
+{
+ static __int64 freq = 0;
+ if (freq == 0)
+ QueryPerformanceFrequency((LARGE_INTEGER*)&freq);
+ __int64 elapsed = end - start;
+ return (int)(elapsed*1000000 / freq);
+}
+
+#else
+
+#include
+
+
+rcTimeVal rcGetPerformanceTimer()
+{
+ return mach_absolute_time();
+}
+
+int rcGetDeltaTimeUsec(rcTimeVal start, rcTimeVal end)
+{
+ static mach_timebase_info_data_t timebaseInfo;
+ if (timebaseInfo.denom == 0)
+ mach_timebase_info(&timebaseInfo);
+ uint64_t elapsed = end - start;
+ uint64_t nanosec = elapsed * timebaseInfo.numer / timebaseInfo.denom;
+ return (int)(nanosec / 1000);
+}
+
+#endif
\ No newline at end of file