furnace-xray 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (82) hide show
  1. data/.gitignore +18 -0
  2. data/Gemfile +5 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +60 -0
  5. data/Rakefile +1 -0
  6. data/bin/furnace-xray +23 -0
  7. data/furnace-xray.gemspec +33 -0
  8. data/lib/furnace-xray.rb +1 -0
  9. data/lib/furnace-xray/app/app.rb +56 -0
  10. data/lib/furnace-xray/app/assets/images/chosen-sprite.png +0 -0
  11. data/lib/furnace-xray/app/assets/images/evil_martians_bw_logo.svg +3 -0
  12. data/lib/furnace-xray/app/assets/images/evil_martians_logo.svg +3 -0
  13. data/lib/furnace-xray/app/assets/images/ui/ui-bg_diagonal-maze_20_6e4f1c_10x10.png +0 -0
  14. data/lib/furnace-xray/app/assets/images/ui/ui-bg_diagonal-maze_40_000000_10x10.png +0 -0
  15. data/lib/furnace-xray/app/assets/images/ui/ui-bg_fine-grain_10_eceadf_60x60.png +0 -0
  16. data/lib/furnace-xray/app/assets/images/ui/ui-bg_fine-grain_10_f8f7f6_60x60.png +0 -0
  17. data/lib/furnace-xray/app/assets/images/ui/ui-bg_fine-grain_15_eceadf_60x60.png +0 -0
  18. data/lib/furnace-xray/app/assets/images/ui/ui-bg_fine-grain_15_f7f3de_60x60.png +0 -0
  19. data/lib/furnace-xray/app/assets/images/ui/ui-bg_fine-grain_15_ffffff_60x60.png +0 -0
  20. data/lib/furnace-xray/app/assets/images/ui/ui-bg_fine-grain_65_654b24_60x60.png +0 -0
  21. data/lib/furnace-xray/app/assets/images/ui/ui-bg_fine-grain_68_b83400_60x60.png +0 -0
  22. data/lib/furnace-xray/app/assets/images/ui/ui-icons_222222_256x240.png +0 -0
  23. data/lib/furnace-xray/app/assets/images/ui/ui-icons_3572ac_256x240.png +0 -0
  24. data/lib/furnace-xray/app/assets/images/ui/ui-icons_8c291d_256x240.png +0 -0
  25. data/lib/furnace-xray/app/assets/images/ui/ui-icons_b83400_256x240.png +0 -0
  26. data/lib/furnace-xray/app/assets/images/ui/ui-icons_fbdb93_256x240.png +0 -0
  27. data/lib/furnace-xray/app/assets/images/ui/ui-icons_ffffff_256x240.png +0 -0
  28. data/lib/furnace-xray/app/assets/javascripts/application.js.coffee +219 -0
  29. data/lib/furnace-xray/app/assets/javascripts/lib/drawer.js.coffee +206 -0
  30. data/lib/furnace-xray/app/assets/javascripts/lib/graph.js.coffee +26 -0
  31. data/lib/furnace-xray/app/assets/javascripts/lib/input.js.coffee +134 -0
  32. data/lib/furnace-xray/app/assets/javascripts/lib/input_state.js.coffee +8 -0
  33. data/lib/furnace-xray/app/assets/javascripts/lib/map.js.coffee +45 -0
  34. data/lib/furnace-xray/app/assets/javascripts/lib/nodes/argument.js.coffee +7 -0
  35. data/lib/furnace-xray/app/assets/javascripts/lib/nodes/block.js.coffee +76 -0
  36. data/lib/furnace-xray/app/assets/javascripts/lib/nodes/function.js.coffee +15 -0
  37. data/lib/furnace-xray/app/assets/javascripts/lib/nodes/instruction.js.coffee +33 -0
  38. data/lib/furnace-xray/app/assets/javascripts/lib/nodes/operand.js.coffee +21 -0
  39. data/lib/furnace-xray/app/assets/javascripts/lib/nodes/type.js.coffee +12 -0
  40. data/lib/furnace-xray/app/assets/javascripts/vendor/chosen.jquery.js +1090 -0
  41. data/lib/furnace-xray/app/assets/javascripts/vendor/d3.v3.js +7806 -0
  42. data/lib/furnace-xray/app/assets/javascripts/vendor/dagre.js +4053 -0
  43. data/lib/furnace-xray/app/assets/javascripts/vendor/hotkeys.jquery.js +106 -0
  44. data/lib/furnace-xray/app/assets/javascripts/vendor/jquery.js +9472 -0
  45. data/lib/furnace-xray/app/assets/javascripts/vendor/mustache.js +532 -0
  46. data/lib/furnace-xray/app/assets/javascripts/vendor/stacktrace-0.4.js +424 -0
  47. data/lib/furnace-xray/app/assets/javascripts/vendor/sugar-1.3.8.js +8615 -0
  48. data/lib/furnace-xray/app/assets/javascripts/vendor/ui.jquery.js +14850 -0
  49. data/lib/furnace-xray/app/assets/stylesheets/app.css.sass +199 -0
  50. data/lib/furnace-xray/app/assets/stylesheets/chosen.jquery.css +413 -0
  51. data/lib/furnace-xray/app/assets/stylesheets/elements.css.sass +31 -0
  52. data/lib/furnace-xray/app/assets/stylesheets/graph.css.sass +29 -0
  53. data/lib/furnace-xray/app/assets/stylesheets/ui.jquery.css +1174 -0
  54. data/lib/furnace-xray/app/public/fonts/iconic_stroke.afm +170 -0
  55. data/lib/furnace-xray/app/public/fonts/iconic_stroke.eot +0 -0
  56. data/lib/furnace-xray/app/public/fonts/iconic_stroke.otf +0 -0
  57. data/lib/furnace-xray/app/public/fonts/iconic_stroke.svg +553 -0
  58. data/lib/furnace-xray/app/public/fonts/iconic_stroke.ttf +0 -0
  59. data/lib/furnace-xray/app/public/fonts/iconic_stroke.woff +0 -0
  60. data/lib/furnace-xray/app/public/fonts/iconic_stroke_demo.html +1 -0
  61. data/lib/furnace-xray/app/views/index.haml +52 -0
  62. data/lib/furnace-xray/app/views/nodes/argument.jst.mustache +1 -0
  63. data/lib/furnace-xray/app/views/nodes/block.jst.mustache +4 -0
  64. data/lib/furnace-xray/app/views/nodes/diff/added_line.jst.mustache +1 -0
  65. data/lib/furnace-xray/app/views/nodes/diff/changed_line.jst.mustache +2 -0
  66. data/lib/furnace-xray/app/views/nodes/diff/removed_line.jst.mustache +1 -0
  67. data/lib/furnace-xray/app/views/nodes/diff/unchanged_line.jst.mustache +1 -0
  68. data/lib/furnace-xray/app/views/nodes/function.jst.mustache +1 -0
  69. data/lib/furnace-xray/app/views/nodes/function_removed.jst.mustache +1 -0
  70. data/lib/furnace-xray/app/views/nodes/instruction_typed.jst.mustache +3 -0
  71. data/lib/furnace-xray/app/views/nodes/instruction_void.jst.mustache +3 -0
  72. data/lib/furnace-xray/app/views/nodes/operand_argument.jst.mustache +1 -0
  73. data/lib/furnace-xray/app/views/nodes/operand_basic_block.jst.mustache +1 -0
  74. data/lib/furnace-xray/app/views/nodes/operand_constant.jst.mustache +1 -0
  75. data/lib/furnace-xray/app/views/nodes/operand_constant_function.jst.mustache +1 -0
  76. data/lib/furnace-xray/app/views/nodes/operand_instruction.jst.mustache +1 -0
  77. data/lib/furnace-xray/app/views/nodes/type_constant.jst.mustache +1 -0
  78. data/lib/furnace-xray/app/views/nodes/type_parametric.jst.mustache +3 -0
  79. data/lib/furnace-xray/lib/jst_pages.rb +226 -0
  80. data/lib/furnace-xray/version.rb +5 -0
  81. data/sample.json +1 -0
  82. metadata +251 -0
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .sass-cache
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'pry'
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Boris Staal
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,60 @@
1
+ # Furnace X-Ray
2
+
3
+ Furnace X-Ray is a visualizer for transformations performed on Static Single
4
+ Assignment form in the [Furnace][] framework.
5
+
6
+ [Furnace]: http://github.com/whitequark/furnace
7
+
8
+ ## Installation
9
+
10
+ $ gem install furnace-xray
11
+
12
+ ## Usage
13
+
14
+ First, you need to enable instrumentation for the functions you want to
15
+ observe. Here is a sample snippet:
16
+
17
+ ``` ruby
18
+ mod = SSA::Module.new
19
+
20
+ fun = SSA::Function.new('my-function')
21
+
22
+ # It is important to enable instrumentation before doing anything else
23
+ # with the function. Otherwise, the collected data will be invalid.
24
+ fun.instrumentaiton = SSA::EventStream.new
25
+ mod.add fun
26
+
27
+ # Optionally, notify the instrumentation engine that you have started
28
+ # a transformation.
29
+ fun.instrumentation.transform_start "Set return type"
30
+
31
+ # Now, do whatever you want with the function.
32
+ fun.return_type = SSA.void_type
33
+
34
+ # After you have finished transforming functions, fetch the instrumentation
35
+ # data and dump it as JSON.
36
+ File.write("data.json", JSON.dump(mod.instrumentation))
37
+ ```
38
+
39
+ To view collected data, just point furnace-xray to it:
40
+
41
+ $ furnace-xray data.json
42
+ [2013-01-27 20:05:13] INFO WEBrick 1.3.1
43
+ [2013-01-27 20:05:13] INFO ruby 1.9.3 (2012-04-20) [x86_64-linux]
44
+ == Sinatra/1.3.3 has taken the stage on 4567 for development with backup from WEBrick
45
+ [2013-01-27 20:05:13] INFO WEBrick::HTTPServer#start: pid=28695 port=4567
46
+
47
+ Now, open your ~~browser~~ Chrome or Chromium and point it to
48
+ http://localhost:4567.
49
+
50
+ ## Contributing
51
+
52
+ 1. Fork it
53
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
54
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
55
+ 4. Push to the branch (`git push origin my-new-feature`)
56
+ 5. Create new Pull Request
57
+
58
+ ## License
59
+
60
+ MIT.
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'active_support/all'
5
+ require 'trollop'
6
+
7
+ lib = File.expand_path(File.dirname(__FILE__) + '/../lib')
8
+ $LOAD_PATH.unshift(lib) if File.directory?(lib) && !$LOAD_PATH.include?(lib)
9
+
10
+ require 'furnace-xray/version'
11
+ require 'furnace-xray/app/app'
12
+
13
+ opts = Trollop::options do
14
+ version "furnace-xray #{Furnace::Xray::VERSION}"
15
+
16
+ banner <<-EOS
17
+ Usage: furnace-xray <filename>
18
+ EOS
19
+ end
20
+
21
+ Trollop::die "File not specified or does not exist" unless ARGV[0] && File.exist?(ARGV[0])
22
+
23
+ Furnace::Xray::App.run! ARGV[0], :environment => :production
@@ -0,0 +1,33 @@
1
+ # encoding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'furnace-xray/version'
7
+
8
+ Gem::Specification.new do |gem|
9
+ gem.name = 'furnace-xray'
10
+ gem.version = Furnace::Xray::VERSION
11
+ gem.authors = ['Boris Staal']
12
+ gem.email = ['staal@evl.ms']
13
+ gem.description = 'A visualizer for transformations of code in Static Single Assignment form based on the Furnace library.'
14
+ gem.summary = gem.description
15
+ gem.homepage = 'https://github.com/evilmartians/furnace-xray'
16
+
17
+ gem.files = `git ls-files`.split($/)
18
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
19
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
20
+ gem.require_paths = ['lib']
21
+
22
+ gem.add_dependency 'trollop'
23
+ gem.add_dependency 'sprockets', '~> 2.0.0'
24
+ gem.add_dependency 'sinatra'
25
+ gem.add_dependency 'sinatra-sprockets-ext'
26
+ gem.add_dependency 'activesupport'
27
+ gem.add_dependency 'sprockets-vendor_gems'
28
+ gem.add_dependency 'haml'
29
+ gem.add_dependency 'sass'
30
+ gem.add_dependency 'sprockets-sass'
31
+ gem.add_dependency 'compass'
32
+ gem.add_dependency 'coffee-script'
33
+ end
@@ -0,0 +1 @@
1
+ require 'furnace-xray/version'
@@ -0,0 +1,56 @@
1
+ require 'sinatra/base'
2
+
3
+ require 'sprockets-vendor_gems/extend_all'
4
+ require 'sinatra/sprockets'
5
+
6
+ require 'haml'
7
+ require 'sprockets-sass'
8
+ require 'sass'
9
+ require 'compass'
10
+ require 'coffee-script'
11
+
12
+ require_relative '../lib/jst_pages'
13
+
14
+ Compass.configuration do |config|
15
+ config.project_path = File.dirname(__FILE__)
16
+ config.sass_dir = 'assets/stylesheets'
17
+ end
18
+
19
+ module Furnace
20
+ module Xray
21
+ class App < Sinatra::Base
22
+ def self.run!(file, options={})
23
+ set :json_location, file
24
+ super options
25
+ end
26
+
27
+ #
28
+ # Sprockets
29
+ #
30
+ register Sinatra::Sprockets
31
+ use Module.new {
32
+ def self.new(app)
33
+ Rack::Builder.new(app) do
34
+ map('/assets') { run Sinatra::Sprockets.environment }
35
+ end
36
+ end
37
+ }
38
+
39
+ #
40
+ # JST
41
+ #
42
+ register Sinatra::JstPages
43
+ serve_jst '/jst.js'
44
+
45
+ #
46
+ # App
47
+ #
48
+ enable :static
49
+ set :public_folder, File.expand_path('../public', __FILE__)
50
+
51
+ get '/' do
52
+ haml :index
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="157 293 283 207" width="283pt" height="207pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-11-20 08:29Z</dc:date><!-- Produced by OmniGraffle Professional 5.4.2 --></metadata><defs></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect width="595.28998" height="841.89"/><g><title>Layer 1</title><path d="M 324.13959 353.9943 C 324.13959 353.9693 324.14059 346.0923 331.20959 344.4173 L 331.20959 331.3503 L 331.22559 331.3173 C 331.22659 331.2563 331.22559 310.0903 352.46959 310.0903 L 375.1466 310.0903 C 396.3896 310.0903 396.3896 331.2563 396.3896 331.3173 L 396.4066 331.3503 L 396.4066 344.4173 C 403.4746 346.0923 403.4756 353.9693 403.4766 353.9943 L 403.4766 354.0603 C 403.4756 354.0853 403.4746 361.9613 396.4066 363.6373 L 396.4066 365.3663 L 392.5086 365.3663 L 392.5086 366.7833 C 392.5086 369.6183 389.6736 369.6183 389.6736 369.6183 C 386.8396 369.6183 386.8396 366.7833 386.8396 366.7833 L 386.8396 365.3663 L 381.1696 365.3663 L 381.1696 366.7833 C 381.1696 369.6183 378.3356 369.6183 378.3356 369.6183 C 375.5006 369.6183 375.5006 366.7833 375.5006 366.7833 L 375.5006 365.3663 L 369.8316 365.3663 L 369.8316 366.7833 C 369.8316 369.6183 366.99659 369.6183 366.99659 369.6183 C 364.16159 369.6183 364.16159 366.7833 364.16159 366.7833 L 364.16159 365.3663 L 358.49259 365.3663 L 358.49259 366.7833 C 358.49259 369.6183 355.65859 369.6183 355.65859 369.6183 C 352.82359 369.6183 352.82359 366.7833 352.82359 366.7833 L 352.82359 365.3663 L 352.46959 365.3663 C 343.40959 365.3663 341.64559 376.3883 347.17459 380.6853 C 347.25759 379.9773 347.69559 378.1213 349.98859 378.1213 C 352.82359 378.1213 352.82359 380.9563 352.82359 380.9563 L 352.82359 382.3733 L 358.49259 382.3733 L 358.49259 380.9563 C 358.49259 378.1213 361.32759 378.1213 361.32759 378.1213 C 364.16159 378.1213 364.16159 380.9563 364.16159 380.9563 L 364.16159 382.3733 L 369.8316 382.3733 L 369.8316 380.9563 C 369.8316 378.1213 372.6656 378.1213 372.6656 378.1213 C 375.5006 378.1213 375.5006 380.9563 375.5006 380.9563 L 375.5006 382.3733 L 381.1696 382.3733 L 381.1696 380.9563 C 381.1696 378.1213 384.0046 378.1213 384.0046 378.1213 C 386.8396 378.1213 386.8396 380.9563 386.8396 380.9563 L 386.8396 382.3733 L 387.9026 382.3733 L 396.4066 382.3733 L 396.4066 409.3033 C 397.7126 409.3033 397.8286 408.1013 397.8396 407.8853 L 397.8236 407.8853 L 397.8236 389.0353 L 397.8236 387.3343 C 397.8236 387.3173 397.8236 381.3813 403.7766 381.3813 C 405.2416 381.3813 406.3456 381.7423 407.1776 382.2843 C 408.0106 381.7423 409.1146 381.3813 410.5796 381.3813 C 412.0446 381.3813 413.1486 381.7423 413.9806 382.2843 C 414.8136 381.7423 415.9176 381.3813 417.3826 381.3813 C 423.3356 381.3813 423.3356 387.3173 423.3356 387.3343 L 423.3356 389.0353 L 423.3356 407.8853 L 423.3186 407.9183 C 423.3176 407.9953 423.3186 434.8143 396.4066 434.8143 L 396.4066 436.4773 C 419.0616 439.1443 419.0666 463.0553 419.0666 463.1283 L 419.0836 463.1613 L 419.0836 467.0703 L 430.7646 478.7513 L 393.5716 478.7513 L 393.5716 463.1613 L 393.5876 463.1613 C 393.5776 462.9453 393.4606 461.7443 392.1546 461.7443 L 355.16959 461.7443 C 349.42959 478.7333 329.88559 478.7353 329.82559 478.7353 L 329.79159 478.7513 L 325.88359 478.7513 L 314.20159 490.4333 L 314.20159 453.2403 L 329.79159 453.2403 L 329.79159 453.2553 C 330.00859 453.2453 331.20959 453.1293 331.20959 451.8223 L 331.20959 434.8143 C 304.29659 434.8143 304.29759 407.9953 304.29659 407.9183 L 304.28059 407.8853 L 304.28059 396.5473 L 304.28059 389.0353 L 304.28059 387.3343 C 304.28059 387.3173 304.28059 381.3813 310.23259 381.3813 C 311.69859 381.3813 312.80259 381.7423 313.63459 382.2843 C 314.46759 381.7423 315.57159 381.3813 317.03559 381.3813 C 318.50159 381.3813 319.60559 381.7423 320.43759 382.2843 C 321.27059 381.7423 322.37459 381.3813 323.83959 381.3813 C 329.79159 381.3813 329.79159 387.3173 329.79159 387.3343 L 329.79159 389.0353 L 329.79159 396.5473 L 329.79159 407.8853 L 329.77659 407.8853 C 329.78659 408.1013 329.90259 409.3033 331.20959 409.3033 L 331.20959 363.6373 C 324.14059 361.9613 324.13959 354.0853 324.13959 354.0603 Z M 183.80759 437.4223 L 167.25359 429.1453 L 183.80759 420.8693 L 183.80759 420.4143 L 167.25359 412.1373 L 183.80759 403.8603 L 183.80759 403.4063 L 167.25359 395.1293 L 183.80759 386.8523 L 183.80759 386.3983 L 167.25359 378.1213 L 183.80759 369.8453 L 183.80759 331.3503 L 183.82459 331.3173 C 183.82559 331.2823 183.82659 324.3893 187.76259 318.4683 L 180.88759 311.5933 C 180.80559 311.5113 180.73259 311.4243 180.66659 311.3333 C 179.64659 311.8733 178.35559 312.2163 176.72159 312.2163 C 175.54759 312.2163 174.59559 311.2643 174.59559 310.0903 C 174.59559 308.9163 175.54759 307.9643 176.72159 307.9643 C 180.27259 307.9643 180.27259 304.4143 180.27259 304.4043 C 180.28259 303.2353 181.23759 302.2943 182.40759 302.3033 C 183.57659 302.3123 184.51759 303.2683 184.50859 304.4373 C 184.50859 304.4483 184.50859 306.3753 183.54859 308.3073 C 183.67059 308.3873 183.78659 308.4803 183.89359 308.5873 L 190.51159 315.2043 C 193.65459 312.2573 198.27259 310.0903 205.06759 310.0903 L 233.41459 310.0903 C 240.20859 310.0903 244.82859 312.2573 247.97059 315.2043 L 254.58859 308.5873 C 254.69559 308.4803 254.81159 308.3873 254.93359 308.3073 C 253.97459 306.3743 253.97359 304.4483 253.97359 304.4373 C 253.96459 303.2683 254.90559 302.3123 256.07459 302.3033 C 257.24459 302.2943 258.20059 303.2353 258.20859 304.4043 C 258.20859 304.4143 258.20959 307.9643 261.76059 307.9643 C 262.93459 307.9643 263.88659 308.9163 263.88659 310.0903 C 263.88659 311.2643 262.93459 312.2163 261.76059 312.2163 C 260.12659 312.2163 258.83559 311.8733 257.81559 311.3333 C 257.74959 311.4243 257.67659 311.5113 257.59459 311.5933 L 250.71959 318.4683 C 254.65459 324.3893 254.65759 331.2823 254.65759 331.3173 L 254.67459 331.3503 L 254.67459 360.4053 L 254.67459 364.6573 L 246.40859 364.6573 L 242.62659 372.2203 L 238.84559 364.6573 L 235.06959 364.6573 L 231.28859 372.2203 L 227.50659 364.6573 L 223.73159 364.6573 L 219.94959 372.2203 L 216.16859 364.6573 L 212.39259 364.6573 L 208.61159 372.2203 L 204.83259 364.6623 C 195.88959 364.8553 194.25759 375.9403 199.93959 380.1063 L 202.94159 374.1023 L 206.72359 381.6653 L 210.49859 381.6653 L 214.28059 374.1023 L 218.06159 381.6653 L 221.83759 381.6653 L 225.61859 374.1023 L 229.40059 381.6653 L 233.17659 381.6653 L 236.95759 374.1023 L 240.73959 381.6653 L 244.51459 381.6653 L 248.29659 374.1023 L 252.07759 381.6653 L 301.40159 381.6653 L 292.89759 389.1063 L 292.18059 389.7343 L 293.97659 390.5513 L 302.49159 394.4213 L 293.97659 398.2903 L 292.18059 399.1083 L 292.89759 399.7363 L 301.40159 407.1773 L 254.67459 407.1773 L 254.67459 409.3033 L 301.40159 409.3033 L 292.89759 416.7443 L 292.18059 417.3713 L 293.97659 418.1883 L 302.49159 422.0583 L 293.97659 425.9293 L 292.18059 426.7453 L 292.89759 427.3733 L 301.40159 434.8143 L 254.67459 434.8143 L 254.67459 436.4773 C 277.32959 439.1443 277.33359 463.0553 277.33459 463.1283 L 277.35159 463.1613 L 277.35159 467.0703 L 289.03359 478.7513 L 251.83959 478.7513 L 251.83959 463.1613 L 251.85459 463.1613 C 251.84459 462.9453 251.72859 461.7443 250.42259 461.7443 L 207.76859 461.7443 C 202.02859 478.7333 182.48359 478.7353 182.42359 478.7353 L 182.39059 478.7513 L 178.48159 478.7513 L 166.80059 490.4333 L 166.80059 453.2403 L 182.39059 453.2403 L 182.39059 453.2553 C 182.60659 453.2453 183.80759 453.1293 183.80759 451.8223 Z" fill="white"/><path d="M 231.28859 342.6887 C 234.41859 342.6887 236.95759 345.2277 236.95759 348.3577 C 236.95759 351.4887 234.41859 354.0277 231.28859 354.0277 C 228.15759 354.0277 225.61959 351.4887 225.61959 348.3577 C 225.61959 345.2277 228.15759 342.6887 231.28859 342.6887 M 352.46959 342.6887 C 355.60059 342.6887 358.13859 345.2277 358.13859 348.3577 C 358.13859 351.4887 355.60059 354.0277 352.46959 354.0277 C 349.33859 354.0277 346.79959 351.4887 346.79959 348.3577 C 346.79959 345.2277 349.33859 342.6887 352.46959 342.6887 M 375.1466 342.6887 C 378.2766 342.6887 380.8156 345.2277 380.8156 348.3577 C 380.8156 351.4887 378.2766 354.0277 375.1466 354.0277 C 372.0166 354.0277 369.4766 351.4887 369.4766 348.3577 C 369.4766 345.2277 372.0166 342.6887 375.1466 342.6887 M 208.61159 342.6887 C 211.74159 342.6887 214.28059 345.2277 214.28059 348.3577 C 214.28059 351.4887 211.74159 354.0277 208.61159 354.0277 C 205.48059 354.0277 202.94159 351.4887 202.94159 348.3577 C 202.94159 345.2277 205.48059 342.6887 208.61159 342.6887" fill="white"/><path d="M 331.20949 359.0715 L 331.20949 348.9835 C 330.62449 349.2875 330.16049 349.6805 329.79249 350.1135 C 328.37549 351.7785 328.37549 354.0275 328.37549 354.0275 C 328.37549 356.2765 329.79249 357.9415 329.79249 357.9415 C 330.16049 358.3745 330.62449 358.7675 331.20949 359.0715 Z" fill="white"/><path d="M 183.80809 432.6887 L 183.80809 425.6027 L 176.72209 429.1457 Z" fill="white"/><path d="M 419.0835 407.8854 L 419.0835 396.5474 L 419.0835 389.0354 L 419.0835 387.3344 C 419.0835 385.6334 417.3825 385.6334 417.3825 385.6334 C 415.6825 385.6334 415.6825 387.3344 415.6825 387.3344 C 415.6825 389.0354 413.9805 389.0354 413.9805 389.0354 C 412.2805 389.0354 412.2805 387.3344 412.2805 387.3344 C 412.2805 385.6334 410.5795 385.6334 410.5795 385.6334 C 408.8785 385.6334 408.8785 387.3344 408.8785 387.3344 C 408.8785 389.0354 407.1775 389.0354 407.1775 389.0354 C 405.4775 389.0354 405.4775 387.3344 405.4775 387.3344 C 405.4775 385.6334 403.7765 385.6334 403.7765 385.6334 C 402.0755 385.6334 402.0755 387.3344 402.0755 387.3344 L 402.0755 389.0354 L 402.0755 396.5474 L 402.0755 407.8854 C 402.0755 412.5644 397.8235 413.4204 397.8235 413.4204 C 397.3955 413.5074 396.9245 413.5544 396.4065 413.5544 L 396.4065 430.5624 C 396.8905 430.5624 397.3595 430.5494 397.8235 430.5284 C 419.0795 429.6014 419.0835 407.8854 419.0835 407.8854 Z" fill="white"/><path d="M 399.2407 354.0275 C 399.2407 351.7785 397.8237 350.1135 397.8237 350.1135 C 397.4547 349.6805 396.9907 349.2875 396.4067 348.9835 L 396.4067 359.0715 C 396.9907 358.7675 397.4547 358.3745 397.8237 357.9415 C 399.2407 356.2765 399.2407 354.0275 399.2407 354.0275 Z" fill="white"/><path d="M 183.80809 381.6652 L 183.80809 374.5782 L 176.72209 378.1222 Z" fill="white"/><path d="M 183.80809 415.6808 L 183.80809 408.5948 L 176.72209 412.1378 Z" fill="white"/><path d="M 345.45459 341.3434 C 347.24959 339.5474 349.73059 338.4364 352.46959 338.4364 C 355.20859 338.4364 357.68859 339.5474 359.48459 341.3434 C 361.27959 343.1384 362.39059 345.6184 362.39059 348.3584 C 362.39059 351.0964 361.27959 353.5774 359.48459 355.3734 C 357.68859 357.1684 355.20859 358.2794 352.46959 358.2794 C 349.73059 358.2794 347.24959 357.1684 345.45459 355.3734 C 343.65859 353.5774 342.54759 351.0964 342.54759 348.3584 C 342.54759 345.6184 343.65859 343.1384 345.45459 341.3434 M 368.13159 341.3434 C 369.9276 339.5474 372.4076 338.4364 375.1466 338.4364 C 377.8856 338.4364 380.3656 339.5474 382.1616 341.3434 C 383.9566 343.1384 385.0676 345.6184 385.0676 348.3584 C 385.0676 351.0964 383.9566 353.5774 382.1616 355.3734 C 380.3656 357.1684 377.8856 358.2794 375.1466 358.2794 C 372.4076 358.2794 369.9276 357.1684 368.13159 355.3734 C 366.33559 353.5774 365.22559 351.0964 365.22559 348.3584 C 365.22559 345.6184 366.33559 343.1384 368.13159 341.3434 M 414.8316 468.8304 L 414.8316 463.1614 C 414.8296 444.4444 397.8236 441.0204 397.8236 441.0204 C 396.1116 440.6754 394.2286 440.4844 392.1546 440.4844 L 392.1546 436.5864 L 392.1546 430.5624 L 392.1546 413.5544 L 392.1546 410.3654 L 392.1546 394.4214 L 392.1546 386.6254 L 375.1466 386.6254 L 352.46959 386.6254 C 346.40559 386.6254 342.49259 383.2484 340.75459 378.9264 C 340.10359 377.3054 339.77759 375.5754 339.77759 373.8694 C 339.77759 372.1644 340.10259 370.4344 340.75459 368.8134 C 342.49259 364.4914 346.40559 361.1144 352.46959 361.1144 L 375.1466 361.1144 L 392.1546 361.1144 L 392.1546 331.3504 C 392.1546 314.3424 375.1466 314.3424 375.1466 314.3424 L 352.46959 314.3424 C 335.46159 314.3424 335.46159 331.3504 335.46159 331.3504 L 335.46159 413.5544 L 331.20959 413.5544 C 330.69059 413.5544 330.22059 413.5074 329.79159 413.4204 C 325.54059 412.5644 325.53959 407.8854 325.53959 407.8854 L 325.53959 396.5474 L 325.53959 389.0354 L 325.53959 387.3344 C 325.53959 385.6334 323.83959 385.6334 323.83959 385.6334 C 322.13859 385.6334 322.13859 387.3344 322.13859 387.3344 C 322.13859 389.0354 320.43759 389.0354 320.43759 389.0354 C 318.73659 389.0354 318.73659 387.3344 318.73659 387.3344 C 318.73659 385.6334 317.03659 385.6334 317.03659 385.6334 C 315.33559 385.6334 315.33559 387.3344 315.33559 387.3344 C 315.33559 389.0354 313.63459 389.0354 313.63459 389.0354 C 311.93359 389.0354 311.93359 387.3344 311.93359 387.3344 C 311.93359 385.6334 310.23259 385.6334 310.23259 385.6334 C 308.53259 385.6334 308.53259 387.3344 308.53259 387.3344 L 308.53259 389.0354 L 308.53259 396.5474 L 308.53259 407.8854 C 308.53659 429.6014 329.79159 430.5284 329.79159 430.5284 C 330.25559 430.5494 330.72559 430.5624 331.20959 430.5624 L 335.46159 430.5624 L 335.46159 440.4844 L 335.46159 440.4884 L 335.46159 440.4964 L 335.46159 440.5004 L 335.46159 451.8224 C 335.46159 457.4914 329.79159 457.4914 329.79159 457.4914 L 318.45359 457.4914 L 318.45359 474.4994 L 318.45359 480.1694 C 320.34359 478.2794 324.12259 474.4994 324.12259 474.4994 L 329.79159 474.4994 C 348.51459 474.4974 351.93459 457.4834 351.93459 457.4834 C 352.11159 457.4874 352.28859 457.4914 352.46959 457.4914 L 375.1466 457.4914 L 392.1546 457.4914 C 397.7356 457.4914 397.8226 462.9854 397.8236 463.1574 L 397.8236 463.1614 L 397.8236 474.4994 L 414.8316 474.4994 L 420.5006 474.4994 C 418.6116 472.6104 414.8316 468.8304 414.8316 468.8304" fill="white"/><path d="M 183.80809 398.673 L 183.80809 391.587 L 176.72209 395.13 Z" fill="white"/><path d="M 201.59619 341.3434 C 203.39219 339.5474 205.87219 338.4364 208.61119 338.4364 C 211.35019 338.4364 213.83019 339.5474 215.62619 341.3434 C 217.42219 343.1384 218.53319 345.6184 218.53319 348.3584 C 218.53319 351.0964 217.42219 353.5774 215.62619 355.3734 C 213.83019 357.1684 211.35019 358.2794 208.61119 358.2794 C 205.87219 358.2794 203.39219 357.1684 201.59619 355.3734 C 199.80119 353.5774 198.69019 351.0964 198.69019 348.3584 C 198.69019 345.6184 199.80119 343.1384 201.59619 341.3434 M 224.27319 341.3434 C 226.06919 339.5474 228.54919 338.4364 231.28819 338.4364 C 234.02719 338.4364 236.50819 339.5474 238.30319 341.3434 C 240.09819 343.1384 241.20919 345.6184 241.20919 348.3584 C 241.20919 351.0964 240.09819 353.5774 238.30319 355.3734 C 236.50819 357.1684 234.02719 358.2794 231.28819 358.2794 C 228.54919 358.2794 226.06919 357.1684 224.27319 355.3734 C 222.47819 353.5774 221.36719 351.0964 221.36719 348.3584 C 221.36719 345.6184 222.47819 343.1384 224.27319 341.3434 M 284.43819 418.5154 L 290.10719 413.5544 L 273.45319 413.5544 L 250.42219 413.5544 L 250.42219 404.3424 L 250.42219 402.9254 L 250.42219 385.9174 L 231.28819 385.9174 L 208.61119 385.9174 L 205.06819 385.9174 C 199.00319 385.9174 195.09119 382.5394 193.35319 378.2174 C 192.70219 376.5964 192.37619 374.8664 192.37619 373.1614 C 192.37619 371.4554 192.70219 369.7254 193.35319 368.1054 C 195.09119 363.7824 199.00319 360.4054 205.06819 360.4054 L 208.61119 360.4054 L 231.28819 360.4054 L 250.42219 360.4054 L 250.42219 331.3504 C 250.42219 314.3424 233.41419 314.3424 233.41419 314.3424 L 231.28819 314.3424 L 208.61119 314.3424 L 205.06819 314.3424 C 188.06019 314.3424 188.06019 331.3504 188.06019 331.3504 L 188.06019 440.4844 L 188.06019 440.4884 L 188.06019 440.4964 L 188.06019 440.5004 L 188.06019 451.8224 C 188.06019 457.4914 182.39019 457.4914 182.39019 457.4914 L 171.05219 457.4914 L 171.05219 474.4994 L 171.05219 480.1694 L 176.72119 474.4994 L 182.39019 474.4994 C 201.11319 474.4974 204.53319 457.4834 204.53319 457.4834 C 204.71019 457.4874 204.88719 457.4914 205.06819 457.4914 L 208.61119 457.4914 L 231.28819 457.4914 L 250.42219 457.4914 C 256.09219 457.4914 256.09219 463.1614 256.09219 463.1614 L 256.09219 474.4994 L 273.09919 474.4994 L 273.45319 474.4994 L 278.76919 474.4994 L 273.45319 469.1844 L 273.09919 468.8304 L 273.09919 463.1614 C 273.09919 440.4844 250.42219 440.4844 250.42219 440.4844 L 250.42219 430.5624 L 273.45319 430.5624 L 290.10719 430.5624 L 284.43819 425.6024 L 292.23319 422.0584 Z" fill="white"/><path d="M 352.46919 345.5236 C 350.90419 345.5236 349.63519 346.7926 349.63519 348.3576 C 349.63519 349.9236 350.90419 351.1926 352.46919 351.1926 C 354.03419 351.1926 355.30319 349.9236 355.30319 348.3576 C 355.30319 346.7926 354.03419 345.5236 352.46919 345.5236 Z" fill="white"/><path d="M 375.1465 345.5236 C 373.5815 345.5236 372.3125 346.7926 372.3125 348.3576 C 372.3125 349.9236 373.5815 351.1926 375.1465 351.1926 C 376.7115 351.1926 377.9805 349.9236 377.9805 348.3576 C 377.9805 346.7926 376.7115 345.5236 375.1465 345.5236 Z" fill="white"/><path d="M 290.10739 385.9172 L 273.45339 385.9172 L 254.67439 385.9172 L 254.67439 402.9252 L 273.45339 402.9252 L 290.10739 402.9252 L 284.43839 397.9642 L 292.23339 394.4212 L 284.43839 390.8772 Z" fill="white"/><path d="M 208.61129 345.5236 C 210.17629 345.5236 211.44529 346.7926 211.44529 348.3576 C 211.44529 349.9236 210.17629 351.1926 208.61129 351.1926 C 207.04629 351.1926 205.77729 349.9236 205.77729 348.3576 C 205.77729 346.7926 207.04629 345.5236 208.61129 345.5236 M 231.28829 345.5236 C 232.85429 345.5236 234.12329 346.7926 234.12329 348.3576 C 234.12329 349.9236 232.85429 351.1926 231.28829 351.1926 C 229.72329 351.1926 228.45329 349.9236 228.45329 348.3576 C 228.45329 346.7926 229.72329 345.5236 231.28829 345.5236 M 335.54729 330.0186 C 335.96229 326.0126 338.38129 314.3426 352.46929 314.3426 L 375.1463 314.3426 C 389.2353 314.3426 391.6533 326.0126 392.0683 330.0186 L 386.4853 335.6026 L 380.8163 329.9326 L 375.1463 335.6026 L 369.4773 329.9326 L 363.80829 335.6026 L 358.13829 329.9326 L 352.46929 335.6026 L 346.79929 329.9326 L 341.13129 335.6026 Z" fill="white"/></g></g></svg>
@@ -0,0 +1,3 @@
1
+ <?xml version="1.0"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xl="http://www.w3.org/1999/xlink" version="1.1" viewBox="157 293 283 207" width="283pt" height="207pt"><metadata xmlns:dc="http://purl.org/dc/elements/1.1/"><dc:date>2012-11-20 08:29Z</dc:date><!-- Produced by OmniGraffle Professional 5.4.2 --></metadata><defs></defs><g stroke="none" stroke-opacity="1" stroke-dasharray="none" fill="none" fill-opacity="1"><title>Canvas 1</title><rect width="595.28998" height="841.89"/><g><title>Layer 1</title><path d="M 324.13959 353.9943 C 324.13959 353.9693 324.14059 346.0923 331.20959 344.4173 L 331.20959 331.3503 L 331.22559 331.3173 C 331.22659 331.2563 331.22559 310.0903 352.46959 310.0903 L 375.1466 310.0903 C 396.3896 310.0903 396.3896 331.2563 396.3896 331.3173 L 396.4066 331.3503 L 396.4066 344.4173 C 403.4746 346.0923 403.4756 353.9693 403.4766 353.9943 L 403.4766 354.0603 C 403.4756 354.0853 403.4746 361.9613 396.4066 363.6373 L 396.4066 365.3663 L 392.5086 365.3663 L 392.5086 366.7833 C 392.5086 369.6183 389.6736 369.6183 389.6736 369.6183 C 386.8396 369.6183 386.8396 366.7833 386.8396 366.7833 L 386.8396 365.3663 L 381.1696 365.3663 L 381.1696 366.7833 C 381.1696 369.6183 378.3356 369.6183 378.3356 369.6183 C 375.5006 369.6183 375.5006 366.7833 375.5006 366.7833 L 375.5006 365.3663 L 369.8316 365.3663 L 369.8316 366.7833 C 369.8316 369.6183 366.99659 369.6183 366.99659 369.6183 C 364.16159 369.6183 364.16159 366.7833 364.16159 366.7833 L 364.16159 365.3663 L 358.49259 365.3663 L 358.49259 366.7833 C 358.49259 369.6183 355.65859 369.6183 355.65859 369.6183 C 352.82359 369.6183 352.82359 366.7833 352.82359 366.7833 L 352.82359 365.3663 L 352.46959 365.3663 C 343.40959 365.3663 341.64559 376.3883 347.17459 380.6853 C 347.25759 379.9773 347.69559 378.1213 349.98859 378.1213 C 352.82359 378.1213 352.82359 380.9563 352.82359 380.9563 L 352.82359 382.3733 L 358.49259 382.3733 L 358.49259 380.9563 C 358.49259 378.1213 361.32759 378.1213 361.32759 378.1213 C 364.16159 378.1213 364.16159 380.9563 364.16159 380.9563 L 364.16159 382.3733 L 369.8316 382.3733 L 369.8316 380.9563 C 369.8316 378.1213 372.6656 378.1213 372.6656 378.1213 C 375.5006 378.1213 375.5006 380.9563 375.5006 380.9563 L 375.5006 382.3733 L 381.1696 382.3733 L 381.1696 380.9563 C 381.1696 378.1213 384.0046 378.1213 384.0046 378.1213 C 386.8396 378.1213 386.8396 380.9563 386.8396 380.9563 L 386.8396 382.3733 L 387.9026 382.3733 L 396.4066 382.3733 L 396.4066 409.3033 C 397.7126 409.3033 397.8286 408.1013 397.8396 407.8853 L 397.8236 407.8853 L 397.8236 389.0353 L 397.8236 387.3343 C 397.8236 387.3173 397.8236 381.3813 403.7766 381.3813 C 405.2416 381.3813 406.3456 381.7423 407.1776 382.2843 C 408.0106 381.7423 409.1146 381.3813 410.5796 381.3813 C 412.0446 381.3813 413.1486 381.7423 413.9806 382.2843 C 414.8136 381.7423 415.9176 381.3813 417.3826 381.3813 C 423.3356 381.3813 423.3356 387.3173 423.3356 387.3343 L 423.3356 389.0353 L 423.3356 407.8853 L 423.3186 407.9183 C 423.3176 407.9953 423.3186 434.8143 396.4066 434.8143 L 396.4066 436.4773 C 419.0616 439.1443 419.0666 463.0553 419.0666 463.1283 L 419.0836 463.1613 L 419.0836 467.0703 L 430.7646 478.7513 L 393.5716 478.7513 L 393.5716 463.1613 L 393.5876 463.1613 C 393.5776 462.9453 393.4606 461.7443 392.1546 461.7443 L 355.16959 461.7443 C 349.42959 478.7333 329.88559 478.7353 329.82559 478.7353 L 329.79159 478.7513 L 325.88359 478.7513 L 314.20159 490.4333 L 314.20159 453.2403 L 329.79159 453.2403 L 329.79159 453.2553 C 330.00859 453.2453 331.20959 453.1293 331.20959 451.8223 L 331.20959 434.8143 C 304.29659 434.8143 304.29759 407.9953 304.29659 407.9183 L 304.28059 407.8853 L 304.28059 396.5473 L 304.28059 389.0353 L 304.28059 387.3343 C 304.28059 387.3173 304.28059 381.3813 310.23259 381.3813 C 311.69859 381.3813 312.80259 381.7423 313.63459 382.2843 C 314.46759 381.7423 315.57159 381.3813 317.03559 381.3813 C 318.50159 381.3813 319.60559 381.7423 320.43759 382.2843 C 321.27059 381.7423 322.37459 381.3813 323.83959 381.3813 C 329.79159 381.3813 329.79159 387.3173 329.79159 387.3343 L 329.79159 389.0353 L 329.79159 396.5473 L 329.79159 407.8853 L 329.77659 407.8853 C 329.78659 408.1013 329.90259 409.3033 331.20959 409.3033 L 331.20959 363.6373 C 324.14059 361.9613 324.13959 354.0853 324.13959 354.0603 Z M 183.80759 437.4223 L 167.25359 429.1453 L 183.80759 420.8693 L 183.80759 420.4143 L 167.25359 412.1373 L 183.80759 403.8603 L 183.80759 403.4063 L 167.25359 395.1293 L 183.80759 386.8523 L 183.80759 386.3983 L 167.25359 378.1213 L 183.80759 369.8453 L 183.80759 331.3503 L 183.82459 331.3173 C 183.82559 331.2823 183.82659 324.3893 187.76259 318.4683 L 180.88759 311.5933 C 180.80559 311.5113 180.73259 311.4243 180.66659 311.3333 C 179.64659 311.8733 178.35559 312.2163 176.72159 312.2163 C 175.54759 312.2163 174.59559 311.2643 174.59559 310.0903 C 174.59559 308.9163 175.54759 307.9643 176.72159 307.9643 C 180.27259 307.9643 180.27259 304.4143 180.27259 304.4043 C 180.28259 303.2353 181.23759 302.2943 182.40759 302.3033 C 183.57659 302.3123 184.51759 303.2683 184.50859 304.4373 C 184.50859 304.4483 184.50859 306.3753 183.54859 308.3073 C 183.67059 308.3873 183.78659 308.4803 183.89359 308.5873 L 190.51159 315.2043 C 193.65459 312.2573 198.27259 310.0903 205.06759 310.0903 L 233.41459 310.0903 C 240.20859 310.0903 244.82859 312.2573 247.97059 315.2043 L 254.58859 308.5873 C 254.69559 308.4803 254.81159 308.3873 254.93359 308.3073 C 253.97459 306.3743 253.97359 304.4483 253.97359 304.4373 C 253.96459 303.2683 254.90559 302.3123 256.07459 302.3033 C 257.24459 302.2943 258.20059 303.2353 258.20859 304.4043 C 258.20859 304.4143 258.20959 307.9643 261.76059 307.9643 C 262.93459 307.9643 263.88659 308.9163 263.88659 310.0903 C 263.88659 311.2643 262.93459 312.2163 261.76059 312.2163 C 260.12659 312.2163 258.83559 311.8733 257.81559 311.3333 C 257.74959 311.4243 257.67659 311.5113 257.59459 311.5933 L 250.71959 318.4683 C 254.65459 324.3893 254.65759 331.2823 254.65759 331.3173 L 254.67459 331.3503 L 254.67459 360.4053 L 254.67459 364.6573 L 246.40859 364.6573 L 242.62659 372.2203 L 238.84559 364.6573 L 235.06959 364.6573 L 231.28859 372.2203 L 227.50659 364.6573 L 223.73159 364.6573 L 219.94959 372.2203 L 216.16859 364.6573 L 212.39259 364.6573 L 208.61159 372.2203 L 204.83259 364.6623 C 195.88959 364.8553 194.25759 375.9403 199.93959 380.1063 L 202.94159 374.1023 L 206.72359 381.6653 L 210.49859 381.6653 L 214.28059 374.1023 L 218.06159 381.6653 L 221.83759 381.6653 L 225.61859 374.1023 L 229.40059 381.6653 L 233.17659 381.6653 L 236.95759 374.1023 L 240.73959 381.6653 L 244.51459 381.6653 L 248.29659 374.1023 L 252.07759 381.6653 L 301.40159 381.6653 L 292.89759 389.1063 L 292.18059 389.7343 L 293.97659 390.5513 L 302.49159 394.4213 L 293.97659 398.2903 L 292.18059 399.1083 L 292.89759 399.7363 L 301.40159 407.1773 L 254.67459 407.1773 L 254.67459 409.3033 L 301.40159 409.3033 L 292.89759 416.7443 L 292.18059 417.3713 L 293.97659 418.1883 L 302.49159 422.0583 L 293.97659 425.9293 L 292.18059 426.7453 L 292.89759 427.3733 L 301.40159 434.8143 L 254.67459 434.8143 L 254.67459 436.4773 C 277.32959 439.1443 277.33359 463.0553 277.33459 463.1283 L 277.35159 463.1613 L 277.35159 467.0703 L 289.03359 478.7513 L 251.83959 478.7513 L 251.83959 463.1613 L 251.85459 463.1613 C 251.84459 462.9453 251.72859 461.7443 250.42259 461.7443 L 207.76859 461.7443 C 202.02859 478.7333 182.48359 478.7353 182.42359 478.7353 L 182.39059 478.7513 L 178.48159 478.7513 L 166.80059 490.4333 L 166.80059 453.2403 L 182.39059 453.2403 L 182.39059 453.2553 C 182.60659 453.2453 183.80759 453.1293 183.80759 451.8223 Z" fill="#452a32"/><path d="M 231.28859 342.6887 C 234.41859 342.6887 236.95759 345.2277 236.95759 348.3577 C 236.95759 351.4887 234.41859 354.0277 231.28859 354.0277 C 228.15759 354.0277 225.61959 351.4887 225.61959 348.3577 C 225.61959 345.2277 228.15759 342.6887 231.28859 342.6887 M 352.46959 342.6887 C 355.60059 342.6887 358.13859 345.2277 358.13859 348.3577 C 358.13859 351.4887 355.60059 354.0277 352.46959 354.0277 C 349.33859 354.0277 346.79959 351.4887 346.79959 348.3577 C 346.79959 345.2277 349.33859 342.6887 352.46959 342.6887 M 375.1466 342.6887 C 378.2766 342.6887 380.8156 345.2277 380.8156 348.3577 C 380.8156 351.4887 378.2766 354.0277 375.1466 354.0277 C 372.0166 354.0277 369.4766 351.4887 369.4766 348.3577 C 369.4766 345.2277 372.0166 342.6887 375.1466 342.6887 M 208.61159 342.6887 C 211.74159 342.6887 214.28059 345.2277 214.28059 348.3577 C 214.28059 351.4887 211.74159 354.0277 208.61159 354.0277 C 205.48059 354.0277 202.94159 351.4887 202.94159 348.3577 C 202.94159 345.2277 205.48059 342.6887 208.61159 342.6887" fill="#fffffe"/><path d="M 331.20949 359.0715 L 331.20949 348.9835 C 330.62449 349.2875 330.16049 349.6805 329.79249 350.1135 C 328.37549 351.7785 328.37549 354.0275 328.37549 354.0275 C 328.37549 356.2765 329.79249 357.9415 329.79249 357.9415 C 330.16049 358.3745 330.62449 358.7675 331.20949 359.0715 Z" fill="#d5bb9f"/><path d="M 183.80809 432.6887 L 183.80809 425.6027 L 176.72209 429.1457 Z" fill="#d5bb9f"/><path d="M 419.0835 407.8854 L 419.0835 396.5474 L 419.0835 389.0354 L 419.0835 387.3344 C 419.0835 385.6334 417.3825 385.6334 417.3825 385.6334 C 415.6825 385.6334 415.6825 387.3344 415.6825 387.3344 C 415.6825 389.0354 413.9805 389.0354 413.9805 389.0354 C 412.2805 389.0354 412.2805 387.3344 412.2805 387.3344 C 412.2805 385.6334 410.5795 385.6334 410.5795 385.6334 C 408.8785 385.6334 408.8785 387.3344 408.8785 387.3344 C 408.8785 389.0354 407.1775 389.0354 407.1775 389.0354 C 405.4775 389.0354 405.4775 387.3344 405.4775 387.3344 C 405.4775 385.6334 403.7765 385.6334 403.7765 385.6334 C 402.0755 385.6334 402.0755 387.3344 402.0755 387.3344 L 402.0755 389.0354 L 402.0755 396.5474 L 402.0755 407.8854 C 402.0755 412.5644 397.8235 413.4204 397.8235 413.4204 C 397.3955 413.5074 396.9245 413.5544 396.4065 413.5544 L 396.4065 430.5624 C 396.8905 430.5624 397.3595 430.5494 397.8235 430.5284 C 419.0795 429.6014 419.0835 407.8854 419.0835 407.8854 Z" fill="#d5bb9f"/><path d="M 399.2407 354.0275 C 399.2407 351.7785 397.8237 350.1135 397.8237 350.1135 C 397.4547 349.6805 396.9907 349.2875 396.4067 348.9835 L 396.4067 359.0715 C 396.9907 358.7675 397.4547 358.3745 397.8237 357.9415 C 399.2407 356.2765 399.2407 354.0275 399.2407 354.0275 Z" fill="#d5bb9f"/><path d="M 183.80809 381.6652 L 183.80809 374.5782 L 176.72209 378.1222 Z" fill="#d5bb9f"/><path d="M 183.80809 415.6808 L 183.80809 408.5948 L 176.72209 412.1378 Z" fill="#d5bb9f"/><path d="M 345.45459 341.3434 C 347.24959 339.5474 349.73059 338.4364 352.46959 338.4364 C 355.20859 338.4364 357.68859 339.5474 359.48459 341.3434 C 361.27959 343.1384 362.39059 345.6184 362.39059 348.3584 C 362.39059 351.0964 361.27959 353.5774 359.48459 355.3734 C 357.68859 357.1684 355.20859 358.2794 352.46959 358.2794 C 349.73059 358.2794 347.24959 357.1684 345.45459 355.3734 C 343.65859 353.5774 342.54759 351.0964 342.54759 348.3584 C 342.54759 345.6184 343.65859 343.1384 345.45459 341.3434 M 368.13159 341.3434 C 369.9276 339.5474 372.4076 338.4364 375.1466 338.4364 C 377.8856 338.4364 380.3656 339.5474 382.1616 341.3434 C 383.9566 343.1384 385.0676 345.6184 385.0676 348.3584 C 385.0676 351.0964 383.9566 353.5774 382.1616 355.3734 C 380.3656 357.1684 377.8856 358.2794 375.1466 358.2794 C 372.4076 358.2794 369.9276 357.1684 368.13159 355.3734 C 366.33559 353.5774 365.22559 351.0964 365.22559 348.3584 C 365.22559 345.6184 366.33559 343.1384 368.13159 341.3434 M 414.8316 468.8304 L 414.8316 463.1614 C 414.8296 444.4444 397.8236 441.0204 397.8236 441.0204 C 396.1116 440.6754 394.2286 440.4844 392.1546 440.4844 L 392.1546 436.5864 L 392.1546 430.5624 L 392.1546 413.5544 L 392.1546 410.3654 L 392.1546 394.4214 L 392.1546 386.6254 L 375.1466 386.6254 L 352.46959 386.6254 C 346.40559 386.6254 342.49259 383.2484 340.75459 378.9264 C 340.10359 377.3054 339.77759 375.5754 339.77759 373.8694 C 339.77759 372.1644 340.10259 370.4344 340.75459 368.8134 C 342.49259 364.4914 346.40559 361.1144 352.46959 361.1144 L 375.1466 361.1144 L 392.1546 361.1144 L 392.1546 331.3504 C 392.1546 314.3424 375.1466 314.3424 375.1466 314.3424 L 352.46959 314.3424 C 335.46159 314.3424 335.46159 331.3504 335.46159 331.3504 L 335.46159 413.5544 L 331.20959 413.5544 C 330.69059 413.5544 330.22059 413.5074 329.79159 413.4204 C 325.54059 412.5644 325.53959 407.8854 325.53959 407.8854 L 325.53959 396.5474 L 325.53959 389.0354 L 325.53959 387.3344 C 325.53959 385.6334 323.83959 385.6334 323.83959 385.6334 C 322.13859 385.6334 322.13859 387.3344 322.13859 387.3344 C 322.13859 389.0354 320.43759 389.0354 320.43759 389.0354 C 318.73659 389.0354 318.73659 387.3344 318.73659 387.3344 C 318.73659 385.6334 317.03659 385.6334 317.03659 385.6334 C 315.33559 385.6334 315.33559 387.3344 315.33559 387.3344 C 315.33559 389.0354 313.63459 389.0354 313.63459 389.0354 C 311.93359 389.0354 311.93359 387.3344 311.93359 387.3344 C 311.93359 385.6334 310.23259 385.6334 310.23259 385.6334 C 308.53259 385.6334 308.53259 387.3344 308.53259 387.3344 L 308.53259 389.0354 L 308.53259 396.5474 L 308.53259 407.8854 C 308.53659 429.6014 329.79159 430.5284 329.79159 430.5284 C 330.25559 430.5494 330.72559 430.5624 331.20959 430.5624 L 335.46159 430.5624 L 335.46159 440.4844 L 335.46159 440.4884 L 335.46159 440.4964 L 335.46159 440.5004 L 335.46159 451.8224 C 335.46159 457.4914 329.79159 457.4914 329.79159 457.4914 L 318.45359 457.4914 L 318.45359 474.4994 L 318.45359 480.1694 C 320.34359 478.2794 324.12259 474.4994 324.12259 474.4994 L 329.79159 474.4994 C 348.51459 474.4974 351.93459 457.4834 351.93459 457.4834 C 352.11159 457.4874 352.28859 457.4914 352.46959 457.4914 L 375.1466 457.4914 L 392.1546 457.4914 C 397.7356 457.4914 397.8226 462.9854 397.8236 463.1574 L 397.8236 463.1614 L 397.8236 474.4994 L 414.8316 474.4994 L 420.5006 474.4994 C 418.6116 472.6104 414.8316 468.8304 414.8316 468.8304" fill="#d5bb9f"/><path d="M 183.80809 398.673 L 183.80809 391.587 L 176.72209 395.13 Z" fill="#d5bb9f"/><path d="M 201.59619 341.3434 C 203.39219 339.5474 205.87219 338.4364 208.61119 338.4364 C 211.35019 338.4364 213.83019 339.5474 215.62619 341.3434 C 217.42219 343.1384 218.53319 345.6184 218.53319 348.3584 C 218.53319 351.0964 217.42219 353.5774 215.62619 355.3734 C 213.83019 357.1684 211.35019 358.2794 208.61119 358.2794 C 205.87219 358.2794 203.39219 357.1684 201.59619 355.3734 C 199.80119 353.5774 198.69019 351.0964 198.69019 348.3584 C 198.69019 345.6184 199.80119 343.1384 201.59619 341.3434 M 224.27319 341.3434 C 226.06919 339.5474 228.54919 338.4364 231.28819 338.4364 C 234.02719 338.4364 236.50819 339.5474 238.30319 341.3434 C 240.09819 343.1384 241.20919 345.6184 241.20919 348.3584 C 241.20919 351.0964 240.09819 353.5774 238.30319 355.3734 C 236.50819 357.1684 234.02719 358.2794 231.28819 358.2794 C 228.54919 358.2794 226.06919 357.1684 224.27319 355.3734 C 222.47819 353.5774 221.36719 351.0964 221.36719 348.3584 C 221.36719 345.6184 222.47819 343.1384 224.27319 341.3434 M 284.43819 418.5154 L 290.10719 413.5544 L 273.45319 413.5544 L 250.42219 413.5544 L 250.42219 404.3424 L 250.42219 402.9254 L 250.42219 385.9174 L 231.28819 385.9174 L 208.61119 385.9174 L 205.06819 385.9174 C 199.00319 385.9174 195.09119 382.5394 193.35319 378.2174 C 192.70219 376.5964 192.37619 374.8664 192.37619 373.1614 C 192.37619 371.4554 192.70219 369.7254 193.35319 368.1054 C 195.09119 363.7824 199.00319 360.4054 205.06819 360.4054 L 208.61119 360.4054 L 231.28819 360.4054 L 250.42219 360.4054 L 250.42219 331.3504 C 250.42219 314.3424 233.41419 314.3424 233.41419 314.3424 L 231.28819 314.3424 L 208.61119 314.3424 L 205.06819 314.3424 C 188.06019 314.3424 188.06019 331.3504 188.06019 331.3504 L 188.06019 440.4844 L 188.06019 440.4884 L 188.06019 440.4964 L 188.06019 440.5004 L 188.06019 451.8224 C 188.06019 457.4914 182.39019 457.4914 182.39019 457.4914 L 171.05219 457.4914 L 171.05219 474.4994 L 171.05219 480.1694 L 176.72119 474.4994 L 182.39019 474.4994 C 201.11319 474.4974 204.53319 457.4834 204.53319 457.4834 C 204.71019 457.4874 204.88719 457.4914 205.06819 457.4914 L 208.61119 457.4914 L 231.28819 457.4914 L 250.42219 457.4914 C 256.09219 457.4914 256.09219 463.1614 256.09219 463.1614 L 256.09219 474.4994 L 273.09919 474.4994 L 273.45319 474.4994 L 278.76919 474.4994 L 273.45319 469.1844 L 273.09919 468.8304 L 273.09919 463.1614 C 273.09919 440.4844 250.42219 440.4844 250.42219 440.4844 L 250.42219 430.5624 L 273.45319 430.5624 L 290.10719 430.5624 L 284.43819 425.6024 L 292.23319 422.0584 Z" fill="#85912d"/><path d="M 352.46919 345.5236 C 350.90419 345.5236 349.63519 346.7926 349.63519 348.3576 C 349.63519 349.9236 350.90419 351.1926 352.46919 351.1926 C 354.03419 351.1926 355.30319 349.9236 355.30319 348.3576 C 355.30319 346.7926 354.03419 345.5236 352.46919 345.5236 Z" fill="#85912d"/><path d="M 375.1465 345.5236 C 373.5815 345.5236 372.3125 346.7926 372.3125 348.3576 C 372.3125 349.9236 373.5815 351.1926 375.1465 351.1926 C 376.7115 351.1926 377.9805 349.9236 377.9805 348.3576 C 377.9805 346.7926 376.7115 345.5236 375.1465 345.5236 Z" fill="#85912d"/><path d="M 290.10739 385.9172 L 273.45339 385.9172 L 254.67439 385.9172 L 254.67439 402.9252 L 273.45339 402.9252 L 290.10739 402.9252 L 284.43839 397.9642 L 292.23339 394.4212 L 284.43839 390.8772 Z" fill="#85912d"/><path d="M 208.61129 345.5236 C 210.17629 345.5236 211.44529 346.7926 211.44529 348.3576 C 211.44529 349.9236 210.17629 351.1926 208.61129 351.1926 C 207.04629 351.1926 205.77729 349.9236 205.77729 348.3576 C 205.77729 346.7926 207.04629 345.5236 208.61129 345.5236 M 231.28829 345.5236 C 232.85429 345.5236 234.12329 346.7926 234.12329 348.3576 C 234.12329 349.9236 232.85429 351.1926 231.28829 351.1926 C 229.72329 351.1926 228.45329 349.9236 228.45329 348.3576 C 228.45329 346.7926 229.72329 345.5236 231.28829 345.5236 M 335.54729 330.0186 C 335.96229 326.0126 338.38129 314.3426 352.46929 314.3426 L 375.1463 314.3426 C 389.2353 314.3426 391.6533 326.0126 392.0683 330.0186 L 386.4853 335.6026 L 380.8163 329.9326 L 375.1463 335.6026 L 369.4773 329.9326 L 363.80829 335.6026 L 358.13829 329.9326 L 352.46929 335.6026 L 346.79929 329.9326 L 341.13129 335.6026 Z" fill="#a1522b"/></g></g></svg>
@@ -0,0 +1,219 @@
1
+ #= require vendor/d3.v3
2
+ #= require vendor/dagre
3
+ #= require vendor/jquery
4
+ #= require vendor/ui.jquery
5
+ #= require vendor/sugar-1.3.8
6
+ #= require vendor/stacktrace-0.4
7
+ #= require vendor/chosen.jquery
8
+ #= require vendor/mustache
9
+ #= require vendor/hotkeys.jquery
10
+ #= require_tree ./lib
11
+ #= require_self
12
+
13
+ $ -> window.app = new Application
14
+
15
+ class Application
16
+
17
+ constructor: ->
18
+ @data = window.data
19
+
20
+ Drawer.attach('svg')
21
+
22
+ @toolbar = $('#toolbar')
23
+ @title = $('#title')
24
+ @transform = $('#transform')
25
+ @selector = $('#functions select')
26
+ @diff = $('#diff')
27
+
28
+ @zoomButton = $('#zoom button')
29
+
30
+ @container = $('#container')
31
+ @svg = $('svg')
32
+ @timeline = $('#timeline')
33
+ @slider = $('#timeline .slider')
34
+ @sliderInput = $('#timeline input')
35
+ @sliderApply = $('#timeline button.ok')
36
+ @sliderNext = $('#timeline button.next')
37
+ @sliderPrev = $('#timeline button.prev')
38
+ @sliderFNext = $('#timeline button.fnext')
39
+ @sliderFPrev = $('#timeline button.fprev')
40
+
41
+ @transforms = $('#transforms')
42
+
43
+ @buildZoomer()
44
+ @buildSelector()
45
+ @buildSlider()
46
+
47
+ redraw = =>
48
+ @dehasherize()
49
+ @currentFunction ||= 0
50
+ @draw()
51
+
52
+ redraw(); $(window).bind 'hashchange', redraw
53
+
54
+ resize = =>
55
+ @container.find('.stretch').height($(window).height() - @toolbar.outerHeight() - 4)
56
+ @slider.height($(window).height() - @toolbar.outerHeight() - 280)
57
+
58
+ resize(); $(window).bind('resize', resize)
59
+
60
+ draw: ->
61
+ try
62
+ @timeline.show()
63
+ @title.removeClass('error')
64
+ @transform.removeClass('active').html('')
65
+ @diff.html('')
66
+
67
+ input = @data[@currentFunction]
68
+
69
+ Drawer.reset() if @input?.source.name != input.source.name
70
+ Drawer.clear()
71
+
72
+ @input = input
73
+ @input.rewind(@currentStep)
74
+ @drawer = new Drawer(new Graph(@input))
75
+
76
+ @title.html @input.function.title()
77
+ @diff.html "~ " + @input.previousState.cursor if @input.previousState?.cursor?
78
+
79
+ @renewZoomer()
80
+ @renewSelector()
81
+ @renewSlider()
82
+ @renewNaming()
83
+ catch error
84
+ console.log error
85
+ @timeline.hide()
86
+ @title.addClass('error').text 'Unable to build graph: problem dumped to console'
87
+
88
+ dehasherize: ->
89
+ hash = window.location.hash.from(1)
90
+ hash = "0:#{@data[0].events.length-1}" if hash.length == 0
91
+ [@currentFunction, @currentStep] = hash.split(":").map (x) -> x.toNumber()
92
+
93
+ jumpTo: (func, step) ->
94
+ if Object.isString(func)
95
+ @selector.find('option').each (x) ->
96
+ func = $(@).attr('value').toNumber() if $(@).text() == func
97
+
98
+ @currentFunction = func; step = @data[func].events.length-1 if step == undefined
99
+ @currentStep = [step, @data[func].events.length-1].min()
100
+ @currentStep = [0, @currentStep].max()
101
+ window.location.hash = "#{@currentFunction}:#{@currentStep || 0}"
102
+
103
+ jumpToBlock: (name) ->
104
+ @drawer.zoomNode @svg.width(), @svg.height(), name
105
+
106
+ renewSlider: (max, value) ->
107
+ @slider.slider
108
+ max: @input.events.length-1
109
+ value: @input.cursor
110
+
111
+ @slider.find('.label').remove()
112
+
113
+ @input.transforms.each (entry) =>
114
+ height = entry.length/(@input.events.length-1)*100
115
+ top = 100-entry.id/(@input.events.length-1)*100-height
116
+ label = "#{entry.label}&nbsp;(#{entry.id}+#{entry.length})"
117
+
118
+ if @currentStep >= entry.id && @currentStep < entry.id+entry.length
119
+ klass = "current"
120
+ @transform.addClass('active').html(entry.label)
121
+ else
122
+ klass = ""
123
+
124
+ @transforms.append $("<div class='label #{klass}'><span>#{label}</span></div>")
125
+ .attr("style", "top: #{top}%; height: #{height}%;")
126
+ .mousedown (e) =>
127
+ e.stopPropagation()
128
+ @jumpTo @currentFunction, entry.id
129
+
130
+ renewSelector: ->
131
+ @selector.val(@currentFunction).trigger('liszt:updated')
132
+
133
+ renewZoomer: ->
134
+ @zoomButton.removeClass 'active'
135
+
136
+ renewNaming: ->
137
+ elements = $('.naming')
138
+ drawer = @drawer
139
+
140
+ elements.filter('.link').click ->
141
+ element = $(@)
142
+ active = element.hasClass('active')
143
+ needle = element.attr("data-naming") || @innerHTML
144
+ elements.removeClass('active')
145
+
146
+ unless active
147
+ elements.filter(->
148
+ ($(@).attr("data-naming") || @innerHTML) == needle
149
+ ).addClass('active')
150
+
151
+ drawer.repaint()
152
+
153
+ buildZoomer: ->
154
+ @zoomButton.click =>
155
+ if @zoomButton.hasClass('active')
156
+ @zoomButton.removeClass('active')
157
+ @drawer.unfit()
158
+ else
159
+ @zoomButton.addClass('active')
160
+ @drawer.fit(@svg.width(), @svg.height())
161
+
162
+ buildSelector: ->
163
+ groups = ['Present', 'Removed'].map (x) -> $("<optgroup label='#{x}'></optgroup>")
164
+
165
+ @data.each (f, i) =>
166
+ group = if f.source.present then groups[0] else groups[1]
167
+ group.append "<option value='#{i}'>#{f.source.name}</option>"
168
+
169
+ groups.each (x) => @selector.append x
170
+
171
+ @selector.chosen(search_contains: true).change => @jumpTo @selector.val().toNumber()
172
+ @selector.val(@currentFunction).trigger('liszt:updated')
173
+
174
+ buildSlider: ->
175
+ $('button').button()
176
+
177
+ @sliderInput.focus -> $(@).blur()
178
+
179
+ @slider.slider
180
+ min: 0
181
+ orientation: 'vertical'
182
+ slide: (event, ui) => @sliderInput.val ui.value
183
+ change: (event) =>
184
+ @sliderInput.val @slider.slider('value')
185
+ # Redraw if triggered by manual slider scroll
186
+ @jumpTo @currentFunction, @sliderInput.val().toNumber() if event.originalEvent
187
+
188
+ @slider.on 'mouseenter', '.label', -> $(this).find('span').show()
189
+ @slider.on 'mouseout', '.label', -> $(this).find('span').hide()
190
+
191
+ next = => @jumpTo @currentFunction, @currentStep+1
192
+ prev = => @jumpTo @currentFunction, @currentStep-1
193
+
194
+ fnext = =>
195
+ step = @input.transforms.find (x) => x.id > @currentStep
196
+ if step
197
+ @jumpTo @currentFunction, step.id
198
+ else
199
+ transform = @input.transforms.last()
200
+ step = transform.id + transform.length
201
+ @jumpTo @currentFunction, step if step > @currentStep
202
+
203
+ fprev = =>
204
+ step = @input.transforms.findAll((x) => x.id < @currentStep).last()
205
+ @jumpTo @currentFunction, step.id if step
206
+
207
+ @sliderPrev.click prev
208
+ @sliderNext.click next
209
+ @sliderFNext.click fnext
210
+ @sliderFPrev.click fprev
211
+
212
+ $(document).bind 'keydown.h', fprev
213
+ $(document).bind 'keydown.j', prev
214
+ $(document).bind 'keydown.k', next
215
+ $(document).bind 'keydown.l', fnext
216
+ $(document).bind 'keydown.x', => @zoomButton.click()
217
+ $(document).bind 'keydown.backspace', (e) ->
218
+ e.preventDefault()
219
+ history.back()