From a97fd74399bd7a358f3bcd0badaa4ed3c4b4345d Mon Sep 17 00:00:00 2001 From: Seth Vargo Date: Thu, 18 Dec 2014 17:46:26 -0500 Subject: [PATCH 001/356] Add HCL to languages.yml More information on HCL: https://github.com/hashicorp/hcl --- lib/linguist/languages.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index d69b072a..a9f8b858 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1239,6 +1239,14 @@ Harbour: tm_scope: none ace_mode: text +HCL: + type: programming + extensions: + - .hcl + - .tf + ace_mode: javascript + tm_scope: source.json + Haskell: type: programming color: "#29b544" From 296d170ba9644013dba241b2853bd1d653e72853 Mon Sep 17 00:00:00 2001 From: Seth Vargo Date: Thu, 18 Dec 2014 17:52:30 -0500 Subject: [PATCH 002/356] Add sample for HCL --- samples/HCL/example.hcl | 6 ++++++ samples/HCL/example.tf | 13 +++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 samples/HCL/example.hcl create mode 100644 samples/HCL/example.tf diff --git a/samples/HCL/example.hcl b/samples/HCL/example.hcl new file mode 100644 index 00000000..276b171e --- /dev/null +++ b/samples/HCL/example.hcl @@ -0,0 +1,6 @@ +consul = "1.2.3.4" + +// This is a comment +template "foo" { + bar = "zip" +} diff --git a/samples/HCL/example.tf b/samples/HCL/example.tf new file mode 100644 index 00000000..976c2e07 --- /dev/null +++ b/samples/HCL/example.tf @@ -0,0 +1,13 @@ +resource "aws_instance" "web" { + // Copies the myapp.conf file to /etc/myapp.conf + provisioner "file" { + source = "conf/myapp.conf" + destination = "/etc/myapp.conf" + } + + // Copies the configs.d folder to /etc/configs.d + provisioner "file" { + source = "conf/configs.d" + destination = "/etc" + } +} From 5217f19faa8bb1030ce97b6ebe49031bd6fc725d Mon Sep 17 00:00:00 2001 From: Seth Vargo Date: Thu, 18 Dec 2014 17:53:53 -0500 Subject: [PATCH 003/356] Alphabetize order --- lib/linguist/languages.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index a9f8b858..b7df08fa 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1153,6 +1153,14 @@ Groovy Server Pages: tm_scope: text.html.jsp ace_mode: jsp +HCL: + type: programming + extensions: + - .hcl + - .tf + ace_mode: javascript + tm_scope: source.json + HTML: type: markup tm_scope: text.html.basic @@ -1239,14 +1247,6 @@ Harbour: tm_scope: none ace_mode: text -HCL: - type: programming - extensions: - - .hcl - - .tf - ace_mode: javascript - tm_scope: source.json - Haskell: type: programming color: "#29b544" From 0cfdbfb91c7bf41f69d0754e28bfbe6999012733 Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Wed, 7 Jan 2015 14:44:40 -0500 Subject: [PATCH 004/356] Merge github-linguist-grammars into github-linguist Now that all our grammars are licensed (or grandfathered in), we can distribute them as part of the standard github-linguist gem. This makes it easier for projects to get up and running with Linguist. --- Gemfile | 1 - Rakefile | 8 ++------ github-linguist-grammars.gemspec | 14 -------------- github-linguist.gemspec | 3 ++- lib/linguist.rb | 1 + lib/linguist/grammars.rb | 3 --- 6 files changed, 5 insertions(+), 25 deletions(-) delete mode 100644 github-linguist-grammars.gemspec diff --git a/Gemfile b/Gemfile index c5f2cc3b..9dc1b4dc 100644 --- a/Gemfile +++ b/Gemfile @@ -1,4 +1,3 @@ source 'https://rubygems.org' gemspec :name => "github-linguist" -gemspec :name => "github-linguist-grammars" gem 'byebug' if RUBY_VERSION >= '2.0' diff --git a/Rakefile b/Rakefile index b38486c0..186bc9c2 100644 --- a/Rakefile +++ b/Rakefile @@ -40,18 +40,14 @@ task :samples do end task :build_gem => :samples do + rm_rf "grammars" + sh "script/convert-grammars" languages = YAML.load_file("lib/linguist/languages.yml") File.write("lib/linguist/languages.json", Yajl.dump(languages)) `gem build github-linguist.gemspec` File.delete("lib/linguist/languages.json") end -task :build_grammars_gem do - rm_rf "grammars" - sh "script/convert-grammars" - sh "gem", "build", "github-linguist-grammars.gemspec" -end - namespace :benchmark do benchmark_path = "benchmark/results" diff --git a/github-linguist-grammars.gemspec b/github-linguist-grammars.gemspec deleted file mode 100644 index 429b3ff1..00000000 --- a/github-linguist-grammars.gemspec +++ /dev/null @@ -1,14 +0,0 @@ -require File.expand_path('../lib/linguist/version', __FILE__) - -Gem::Specification.new do |s| - s.name = 'github-linguist-grammars' - s.version = Linguist::VERSION - s.summary = "Language grammars for use with github-linguist" - - s.authors = "GitHub" - s.homepage = "https://github.com/github/linguist" - - s.files = ['lib/linguist/grammars.rb'] + Dir['grammars/*'] - - s.add_development_dependency 'plist', '~>3.1' -end diff --git a/github-linguist.gemspec b/github-linguist.gemspec index 983db982..974d1bc0 100644 --- a/github-linguist.gemspec +++ b/github-linguist.gemspec @@ -10,7 +10,7 @@ Gem::Specification.new do |s| s.homepage = "https://github.com/github/linguist" s.license = "MIT" - s.files = Dir['lib/**/*'] - ['lib/linguist/grammars.rb'] + s.files = Dir['lib/**/*'] + Dir['grammars/*'] s.executables << 'linguist' s.add_dependency 'charlock_holmes', '~> 0.7.3' @@ -20,6 +20,7 @@ Gem::Specification.new do |s| s.add_development_dependency 'minitest', '>= 5.0' s.add_development_dependency 'mocha' + s.add_development_dependency 'plist', '~>3.1' s.add_development_dependency 'pry' s.add_development_dependency 'rake' s.add_development_dependency 'yajl-ruby' diff --git a/lib/linguist.rb b/lib/linguist.rb index ff9fc3a2..edbd4483 100644 --- a/lib/linguist.rb +++ b/lib/linguist.rb @@ -1,5 +1,6 @@ require 'linguist/blob_helper' require 'linguist/generated' +require 'linguist/grammars' require 'linguist/heuristics' require 'linguist/language' require 'linguist/repository' diff --git a/lib/linguist/grammars.rb b/lib/linguist/grammars.rb index f6468280..b1ccbf6b 100644 --- a/lib/linguist/grammars.rb +++ b/lib/linguist/grammars.rb @@ -1,6 +1,3 @@ -# Note: This file is included in the github-linguist-grammars gem, not the -# github-linguist gem. - module Linguist module Grammars # Get the path to the directory containing the language grammar JSON files. From 23e55e92ca8a01b01f9908e77777d834b97a0f31 Mon Sep 17 00:00:00 2001 From: Adam Roben Date: Thu, 8 Jan 2015 09:19:18 -0500 Subject: [PATCH 005/356] Mention grammar licenses in LICENSE --- LICENSE | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/LICENSE b/LICENSE index f09a7d0a..7981307b 100644 --- a/LICENSE +++ b/LICENSE @@ -1,3 +1,9 @@ +The language grammars included in this gem are covered by their repositories' +respective licenses. See https://github.com/github/linguist/blob/master/grammars.yml +to determine the repository for each grammar. + +All other files are covered by the following license: + Copyright (c) 2011-2014 GitHub, Inc. Permission is hereby granted, free of charge, to any person From 885b5aab413d6710f871f8abc809bbf2a3594780 Mon Sep 17 00:00:00 2001 From: Stefan Johnson Date: Fri, 20 Feb 2015 14:08:39 +1100 Subject: [PATCH 006/356] Changed tokenizer number literals to be more encompassing Number literals now skips hexadecimal, and C style literals. --- lib/linguist/tokenizer.rb | 2 +- test/test_tokenizer.rb | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/linguist/tokenizer.rb b/lib/linguist/tokenizer.rb index 05882649..dc9fc9da 100644 --- a/lib/linguist/tokenizer.rb +++ b/lib/linguist/tokenizer.rb @@ -94,7 +94,7 @@ module Linguist end # Skip number literals - elsif s.scan(/(0x)?\d(\d|\.)*/) + elsif s.scan(/(0x\h(\h|\.)*|\d(\d|\.)*)([uU][lL]{0,2}|([eE][-+]\d*)?[fFlL]*)/) # SGML style brackets elsif token = s.scan(/<[^\s<>][^<>]*>/) diff --git a/test/test_tokenizer.rb b/test/test_tokenizer.rb index 780db019..140e03b5 100644 --- a/test/test_tokenizer.rb +++ b/test/test_tokenizer.rb @@ -25,6 +25,10 @@ class TestTokenizer < Minitest::Test assert_equal %w(add \( \)), tokenize('add(123, 456)') assert_equal %w(|), tokenize('0x01 | 0x10') assert_equal %w(*), tokenize('500.42 * 1.0') + assert_equal %w(), tokenize('1.23e-04') + assert_equal %w(), tokenize('1.0f') + assert_equal %w(), tokenize('1234ULL') + assert_equal %w(G1 X55 Y5 F2000), tokenize('G1 X55 Y5 F2000') end def test_skip_comments From 924fddf69892537322188fab6a23c787c1bfc363 Mon Sep 17 00:00:00 2001 From: Brandon Keepers Date: Fri, 17 Apr 2015 14:56:08 +1200 Subject: [PATCH 007/356] Move Linguist::Language.detect to Linguist.detect --- lib/linguist.rb | 78 ++++++++++++++++++++++++++++++++++++ lib/linguist/blob_helper.rb | 4 +- lib/linguist/language.rb | 38 +----------------- test/test_heuristics.rb | 2 +- test/test_instrumentation.rb | 4 +- 5 files changed, 85 insertions(+), 41 deletions(-) diff --git a/lib/linguist.rb b/lib/linguist.rb index 3929efb9..f0680ea6 100644 --- a/lib/linguist.rb +++ b/lib/linguist.rb @@ -8,8 +8,85 @@ require 'linguist/shebang' require 'linguist/version' class << Linguist + # Public: Detects the Language of the blob. + # + # blob - an object that includes the Linguist `BlobHelper` interface; + # see Linguist::LazyBlob and Linguist::FileBlob for examples + # + # Returns Language or nil. + def detect(blob) + # Bail early if the blob is binary or empty. + return nil if blob.likely_binary? || blob.binary? || blob.empty? + + Linguist.instrument("linguist.detection", :blob => blob) do + # Call each strategy until one candidate is returned. + languages = [] + returning_strategy = nil + + STRATEGIES.each do |strategy| + returning_strategy = strategy + candidates = Linguist.instrument("linguist.strategy", :blob => blob, :strategy => strategy, :candidates => languages) do + strategy.call(blob, languages) + end + if candidates.size == 1 + languages = candidates + break + elsif candidates.size > 1 + # More than one candidate was found, pass them to the next strategy. + languages = candidates + else + # No candidates, try the next strategy + end + end + + Linguist.instrument("linguist.detected", :blob => blob, :strategy => returning_strategy, :language => languages.first) + + languages.first + end + end + + # Internal: The strategies used to detect the language of a file. + # + # A strategy is an object that has a `.call` method that takes two arguments: + # + # blob - An object that quacks like a blob. + # languages - An Array of candidate Language objects that were returned by the + #     previous strategy. + # + # A strategy should return an Array of Language candidates. + # + # Strategies are called in turn until a single Language is returned. + STRATEGIES = [ + Linguist::Strategy::Modeline, + Linguist::Shebang, + Linguist::Strategy::Filename, + Linguist::Heuristics, + Linguist::Classifier + ] + + # Public: Set an instrumenter. + # + # class CustomInstrumenter + # def instrument(name, payload = {}) + # warn "Instrumenting #{name}: #{payload[:blob]}" + # end + # end + # + # Linguist.instrumenter = CustomInstrumenter + # + # The instrumenter must conform to the `ActiveSupport::Notifications` + # interface, which defines `#instrument` and accepts: + # + # name - the String name of the event (e.g. "linguist.detected") + # payload - a Hash of the exception context. attr_accessor :instrumenter + # Internal: Perform instrumentation on a block + # + # Linguist.instrument("linguist.dosomething", :blob => blob) do + # # logic to instrument here. + # end + # def instrument(*args, &bk) if instrumenter instrumenter.instrument(*args, &bk) @@ -17,4 +94,5 @@ class << Linguist yield if block_given? end end + end diff --git a/lib/linguist/blob_helper.rb b/lib/linguist/blob_helper.rb index 01a567e0..a1565646 100644 --- a/lib/linguist/blob_helper.rb +++ b/lib/linguist/blob_helper.rb @@ -6,7 +6,7 @@ require 'yaml' module Linguist # DEPRECATED Avoid mixing into Blob classes. Prefer functional interfaces - # like `Language.detect` over `Blob#language`. Functions are much easier to + # like `Linguist.detect` over `Blob#language`. Functions are much easier to # cache and compose. # # Avoid adding additional bloat to this module. @@ -325,7 +325,7 @@ module Linguist # # Returns a Language or nil if none is detected def language - @language ||= Language.detect(self) + @language ||= Linguist.detect(self) end # Internal: Get the TextMate compatible scope for the blob diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index da02b110..f7d7772d 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -87,14 +87,6 @@ module Linguist language end - STRATEGIES = [ - Linguist::Strategy::Modeline, - Linguist::Shebang, - Linguist::Strategy::Filename, - Linguist::Heuristics, - Linguist::Classifier - ] - # Public: Detects the Language of the blob. # # blob - an object that includes the Linguist `BlobHelper` interface; @@ -102,34 +94,8 @@ module Linguist # # Returns Language or nil. def self.detect(blob) - # Bail early if the blob is binary or empty. - return nil if blob.likely_binary? || blob.binary? || blob.empty? - - Linguist.instrument("linguist.detection", :blob => blob) do - # Call each strategy until one candidate is returned. - languages = [] - returning_strategy = nil - - STRATEGIES.each do |strategy| - returning_strategy = strategy - candidates = Linguist.instrument("linguist.strategy", :blob => blob, :strategy => strategy, :candidates => languages) do - strategy.call(blob, languages) - end - if candidates.size == 1 - languages = candidates - break - elsif candidates.size > 1 - # More than one candidate was found, pass them to the next strategy. - languages = candidates - else - # No candidates, try the next strategy - end - end - - Linguist.instrument("linguist.detected", :blob => blob, :strategy => returning_strategy, :language => languages.first) - - languages.first - end + warn "[DEPRECATED] `Linguist::Language.detect` is deprecated. Use `Linguist.detect`. #{caller[0]}" + Linguist.detect(blob) end # Public: Get all Languages diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index b3197c69..0f7c0cf4 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -40,7 +40,7 @@ class TestHeuristcs < Minitest::Test def test_detect_still_works_if_nothing_matches blob = Linguist::FileBlob.new(File.join(samples_path, "Objective-C/hello.m")) - match = Language.detect(blob) + match = Linguist.detect(blob) assert_equal Language["Objective-C"], match end diff --git a/test/test_instrumentation.rb b/test/test_instrumentation.rb index ab0615e5..d2eedad8 100644 --- a/test/test_instrumentation.rb +++ b/test/test_instrumentation.rb @@ -28,7 +28,7 @@ class TestInstrumentation < Minitest::Test def test_detection_instrumentation_with_binary_blob binary_blob = fixture_blob("Binary/octocat.ai") - Language.detect(binary_blob) + Linguist.detect(binary_blob) # Shouldn't instrument this (as it's binary) assert_equal 0, Linguist.instrumenter.events.size @@ -36,7 +36,7 @@ class TestInstrumentation < Minitest::Test def test_modeline_instrumentation blob = fixture_blob("Data/Modelines/ruby") - Language.detect(blob) + Linguist.detect(blob) detect_event = Linguist.instrumenter.events.last detect_event_payload = detect_event[:args].first From 1c56b03a28b6e96b221586ff220c8f788d70a48f Mon Sep 17 00:00:00 2001 From: Andrew Pennebaker Date: Thu, 30 Apr 2015 15:14:26 -0500 Subject: [PATCH 008/356] highlight DNS zone (BIND) files --- .gitmodules | 3 +++ vendor/grammars/Bind.tmbundle | 1 + 2 files changed, 4 insertions(+) create mode 160000 vendor/grammars/Bind.tmbundle diff --git a/.gitmodules b/.gitmodules index f1ce5891..f22c7288 100644 --- a/.gitmodules +++ b/.gitmodules @@ -657,3 +657,6 @@ [submodule "vendor/grammars/jflex.tmbundle"] path = vendor/grammars/jflex.tmbundle url = https://github.com/jflex-de/jflex.tmbundle.git +[submodule "vendor/grammars/Bind.tmbundle"] + path = vendor/grammars/Bind.tmbundle + url = git@github.com:norm/Bind.tmbundle.git diff --git a/vendor/grammars/Bind.tmbundle b/vendor/grammars/Bind.tmbundle new file mode 160000 index 00000000..ccc1e271 --- /dev/null +++ b/vendor/grammars/Bind.tmbundle @@ -0,0 +1 @@ +Subproject commit ccc1e2711a1238378b62d4045edae3f60679b703 From 5730ab28ab787032297a9f3668f09bb31ad56c5a Mon Sep 17 00:00:00 2001 From: Andrew Pennebaker Date: Thu, 30 Apr 2015 15:23:31 -0500 Subject: [PATCH 009/356] list zone in languages.yml --- lib/linguist/languages.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 662c488f..7544b198 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3633,3 +3633,8 @@ xBase: - .prg tm_scope: none ace_mode: text + +zone: + type: programming + extensions: + - .zone From 5aeac500da17406089a60ec21695520b8ceb2f74 Mon Sep 17 00:00:00 2001 From: Andrew Pennebaker Date: Thu, 30 Apr 2015 15:24:46 -0500 Subject: [PATCH 010/356] list zone in grammars.yml --- grammars.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/grammars.yml b/grammars.yml index 46f2fd5d..13b63cf6 100644 --- a/grammars.yml +++ b/grammars.yml @@ -26,6 +26,9 @@ vendor/grammars/Alloy.tmbundle: - source.alloy vendor/grammars/AutoHotkey/: - source.ahk +vendor/grammars/Bind.tmbundle: +- source.untitled +- text.zone vendor/grammars/BrightScript.tmbundle/: - source.brightauthorproject - source.brightscript From 188d2367df7bdf2e3afe504ac95caa6421d5eecf Mon Sep 17 00:00:00 2001 From: Andrew Pennebaker Date: Thu, 30 Apr 2015 15:25:52 -0500 Subject: [PATCH 011/356] add sample zone file --- samples/zone/sneaky.net.zone | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 samples/zone/sneaky.net.zone diff --git a/samples/zone/sneaky.net.zone b/samples/zone/sneaky.net.zone new file mode 100644 index 00000000..1276be5a --- /dev/null +++ b/samples/zone/sneaky.net.zone @@ -0,0 +1,12 @@ +$TTL 3d +@ IN SOA root.localhost. root.sneaky.net. ( + 2015042907 ; serial + 3d ; refresh + 1h ; retry + 12d ; expire + 2h ; negative response TTL + ) + IN NS root.localhost. + IN NS localhost. ; secondary name server is preferably externally maintained + +www IN A 3.141.59.26 From 8b736189e01634cc351758a6e98d193a192d8c87 Mon Sep 17 00:00:00 2001 From: Andrew Pennebaker Date: Thu, 30 Apr 2015 15:34:43 -0500 Subject: [PATCH 012/356] better name for DNS zone --- lib/linguist/languages.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 7544b198..94571e59 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -769,6 +769,11 @@ Diff: tm_scope: source.diff ace_mode: diff +DNS zone: + type: programming + extensions: + - .zone + Dockerfile: type: data tm_scope: source.dockerfile @@ -3633,8 +3638,3 @@ xBase: - .prg tm_scope: none ace_mode: text - -zone: - type: programming - extensions: - - .zone From 81c41df15c60b7389a1a905200bf46caa74c4863 Mon Sep 17 00:00:00 2001 From: Andrew Pennebaker Date: Thu, 30 Apr 2015 15:39:32 -0500 Subject: [PATCH 013/356] zone: add tm_scope --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 94571e59..e7ec4af9 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -773,6 +773,7 @@ DNS zone: type: programming extensions: - .zone + tm_scope: text.zone Dockerfile: type: data From 1e20b12241542f6f3e2bd659543e20f70f656262 Mon Sep 17 00:00:00 2001 From: Andrew Pennebaker Date: Thu, 30 Apr 2015 15:40:44 -0500 Subject: [PATCH 014/356] zone: add ace_mode --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index e7ec4af9..cc97d249 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -774,6 +774,7 @@ DNS zone: extensions: - .zone tm_scope: text.zone + ace_mode: text Dockerfile: type: data From 3b2ddb1a18f64e00d69afb74079f4317dbee21f1 Mon Sep 17 00:00:00 2001 From: Andrew Pennebaker Date: Fri, 1 May 2015 11:25:16 -0500 Subject: [PATCH 015/356] classify DNS zone as a data format --- lib/linguist/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index cc97d249..63fdc5c6 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -770,7 +770,7 @@ Diff: ace_mode: diff DNS zone: - type: programming + type: data extensions: - .zone tm_scope: text.zone From 03369b8a6c4d1231d4c1e14d0967d00600779f6d Mon Sep 17 00:00:00 2001 From: Andrew Pennebaker Date: Sun, 3 May 2015 12:51:52 -0500 Subject: [PATCH 016/356] use https url for travis support --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index f22c7288..cfaf6c66 100644 --- a/.gitmodules +++ b/.gitmodules @@ -659,4 +659,4 @@ url = https://github.com/jflex-de/jflex.tmbundle.git [submodule "vendor/grammars/Bind.tmbundle"] path = vendor/grammars/Bind.tmbundle - url = git@github.com:norm/Bind.tmbundle.git + url = https://github.com/norm/Bind.tmbundle.git From 0737a21e386e0889efe6ee4349a41b6a0db4a1bb Mon Sep 17 00:00:00 2001 From: Eric McCormick Date: Thu, 4 Jun 2015 21:37:58 -0500 Subject: [PATCH 017/356] XPages added as programming language XPages design element extensions and NSF-based design elements (Form, View) extensions added (all readable when marked up using XML settings for ACE); .jss (Domino SSJS) already aliased under JavaScript --- lib/linguist/languages.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index ba5c0103..f9a038ff 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3536,6 +3536,16 @@ XML: - Web.config - packages.config +XPages: + type: programming + extensions: + - .xsp + - .xsp-config + - .xsp-metadata + - .form + - .view + ace_mode: xml + XProc: type: programming extensions: From 5ac1e847a5cf98b706213feb11499214678bf8be Mon Sep 17 00:00:00 2001 From: Eric McCormick Date: Thu, 4 Jun 2015 22:09:49 -0500 Subject: [PATCH 018/356] samples added for XPages design elements (.xsp) and affiliated NSF-based elements (.form, .view) - demoServerRESTconsumption, src: https://gist.github.com/edm00se/15249dba8ff3fea38312, license: Creative Commons 3.0 - house.form, houses.view, house.xsp, src: https://github.com/edm00se/AnAppOfIceAndFire, license: Creative Commons 3.0 - UnpMainxsp, src: https://github.com/teamstudio/xcontrols-domino/blob/master/sampler-app/XPages/UnpMain.xsp, license: Apache v2.0 - xLogin.xsp, src: http://openntf.org/XSnippets.nsf/snippet.xsp?id=xpages-form-login-with-session-variable, license: Apache 2.0 --- samples/XPages/UnpMain.xsp | 83 +++++++++ samples/XPages/demoServerRESTconsumption.xsp | 64 +++++++ samples/XPages/house.form | 65 +++++++ samples/XPages/house.xsp | 176 +++++++++++++++++++ samples/XPages/houses.view | 54 ++++++ samples/XPages/xLogin.xsp | 38 ++++ 6 files changed, 480 insertions(+) create mode 100644 samples/XPages/UnpMain.xsp create mode 100644 samples/XPages/demoServerRESTconsumption.xsp create mode 100644 samples/XPages/house.form create mode 100644 samples/XPages/house.xsp create mode 100644 samples/XPages/houses.view create mode 100644 samples/XPages/xLogin.xsp diff --git a/samples/XPages/UnpMain.xsp b/samples/XPages/UnpMain.xsp new file mode 100644 index 00000000..e0eb6438 --- /dev/null +++ b/samples/XPages/UnpMain.xsp @@ -0,0 +1,83 @@ + + + +
+
+ + +
+ + + +
+
+
+
+

+ Closed sales by team member - $000s + (December) +

+
+
+
+
+
+ +
+ +
+ +
+
+
+
+ + + + + +
\ No newline at end of file diff --git a/samples/XPages/demoServerRESTconsumption.xsp b/samples/XPages/demoServerRESTconsumption.xsp new file mode 100644 index 00000000..3334c777 --- /dev/null +++ b/samples/XPages/demoServerRESTconsumption.xsp @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/XPages/house.form b/samples/XPages/house.form new file mode 100644 index 00000000..7c47b41c --- /dev/null +++ b/samples/XPages/house.form @@ -0,0 +1,65 @@ + +
+ +20141225T155631,49-06 +20150306T091952,06-08 +20150306T091952,05-08 +20150306T091952,06-08 +20150305T162153,26-08 +CN=Eric McCormick/O=Eric McCormick +CN=Eric McCormick/O=Eric McCormick + + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + +house
diff --git a/samples/XPages/house.xsp b/samples/XPages/house.xsp new file mode 100644 index 00000000..3c5a6e13 --- /dev/null +++ b/samples/XPages/house.xsp @@ -0,0 +1,176 @@ + + + + + + + +
+
+
+
+

+ +

+
+
+ + + + +
+ + +
+
+ + + + + + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
\ No newline at end of file diff --git a/samples/XPages/houses.view b/samples/XPages/houses.view new file mode 100644 index 00000000..354c3aa0 --- /dev/null +++ b/samples/XPages/houses.view @@ -0,0 +1,54 @@ + + + +20141225T155658,43-06 +20150316T150218,60-07 +20150316T150218,59-07 +20150316T150218,60-07 +20150305T162151,76-08 +CN=Eric McCormick/O=Eric McCormick +CN=Eric McCormick/O=Eric McCormickSELECT Form = "house" + + + + + + + + + + + + + + + + + + + + + + + + +@Text(@DocumentUniqueID) diff --git a/samples/XPages/xLogin.xsp b/samples/XPages/xLogin.xsp new file mode 100644 index 00000000..50afc329 --- /dev/null +++ b/samples/XPages/xLogin.xsp @@ -0,0 +1,38 @@ + + + + + UserID + Login + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 402fa5c2cd3e19c6e07f0f15c1427cb10ee5a506 Mon Sep 17 00:00:00 2001 From: Eric McCormick Date: Thu, 4 Jun 2015 22:51:55 -0500 Subject: [PATCH 019/356] added navbar.xsp, xsp-config, xsp.metadata for completeness of file extensions and corrected xsp.metadata extension in languages.yml --- lib/linguist/languages.yml | 2 +- samples/XPages/navbar.xsp | 53 ++++++++++++++++++++++++++++++ samples/XPages/navbar.xsp-config | 17 ++++++++++ samples/XPages/navbar.xsp.metadata | 22 +++++++++++++ 4 files changed, 93 insertions(+), 1 deletion(-) create mode 100755 samples/XPages/navbar.xsp create mode 100755 samples/XPages/navbar.xsp-config create mode 100755 samples/XPages/navbar.xsp.metadata diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index f9a038ff..8a366f41 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3541,7 +3541,7 @@ XPages: extensions: - .xsp - .xsp-config - - .xsp-metadata + - .xsp.metadata - .form - .view ace_mode: xml diff --git a/samples/XPages/navbar.xsp b/samples/XPages/navbar.xsp new file mode 100755 index 00000000..c7a5669e --- /dev/null +++ b/samples/XPages/navbar.xsp @@ -0,0 +1,53 @@ + + + + \ No newline at end of file diff --git a/samples/XPages/navbar.xsp-config b/samples/XPages/navbar.xsp-config new file mode 100755 index 00000000..d32555bb --- /dev/null +++ b/samples/XPages/navbar.xsp-config @@ -0,0 +1,17 @@ + + + + http://www.ibm.com/xsp/custom + xc + + + navbar + navbar + /navbar.xsp + + + true + + + + diff --git a/samples/XPages/navbar.xsp.metadata b/samples/XPages/navbar.xsp.metadata new file mode 100755 index 00000000..120b7002 --- /dev/null +++ b/samples/XPages/navbar.xsp.metadata @@ -0,0 +1,22 @@ + + +20131221T175632,71-05 +20150305T194407,22-08 +20150305T194407,21-08 +20150305T194407,22-08 +20150305T162153,30-08 +CN=Eric McCormick/O=Eric McCormick +CN=Eric McCormick/O=Eric McCormick +gC~4; +navbar.xsp + + + + + +navbar.xsp +8.5.3 + + + + \ No newline at end of file From f8ef01f557609544517031d85fdf5cd0f17f4181 Mon Sep 17 00:00:00 2001 From: Eric McCormick Date: Fri, 5 Jun 2015 06:13:36 -0500 Subject: [PATCH 020/356] updated tm_scope to none in languages.yml It looks like it helps to read the comments at the top of the file, who knew! --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 8a366f41..69bc704a 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3545,6 +3545,7 @@ XPages: - .form - .view ace_mode: xml + tm_scope: none XProc: type: programming From 743f7c76deba4f93bfc085ac2b16f27a41330ec4 Mon Sep 17 00:00:00 2001 From: Eric McCormick Date: Fri, 5 Jun 2015 06:19:02 -0500 Subject: [PATCH 021/356] resorted entry in languages.yml to be consistent with other blocks --- lib/linguist/languages.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 69bc704a..832e1e7e 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3539,13 +3539,13 @@ XML: XPages: type: programming extensions: + - .form + - .view - .xsp - .xsp-config - .xsp.metadata - - .form - - .view - ace_mode: xml tm_scope: none + ace_mode: xml XProc: type: programming From 4881e0aa510866b4d51e66b367f72aae4a549291 Mon Sep 17 00:00:00 2001 From: Eric McCormick Date: Fri, 5 Jun 2015 10:36:40 -0500 Subject: [PATCH 022/356] added color to languages.yml --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 832e1e7e..d606b675 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3538,6 +3538,7 @@ XML: XPages: type: programming + color: "#FFEBE4" extensions: - .form - .view From 26a5325dc3899895d1325a5f5d18675463107d33 Mon Sep 17 00:00:00 2001 From: Eric McCormick Date: Fri, 5 Jun 2015 11:04:34 -0500 Subject: [PATCH 023/356] undoing color apparently a bad idea, Travis CI didn't like it --- lib/linguist/languages.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index d606b675..832e1e7e 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3538,7 +3538,6 @@ XML: XPages: type: programming - color: "#FFEBE4" extensions: - .form - .view From 7fb62de4d79ac85dc9878c43b769466fbb73e39b Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Sat, 6 Jun 2015 15:37:41 +0200 Subject: [PATCH 024/356] Associate each heuristic rule to a file extension --- lib/linguist/heuristics.rb | 69 ++++++++++++++++++++------------------ 1 file changed, 36 insertions(+), 33 deletions(-) diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 39e286bb..736c4e89 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -13,11 +13,14 @@ module Linguist # ]) # # Returns an Array of languages, or empty if none matched or were inconclusive. - def self.call(blob, languages) + def self.call(blob, candidates) data = blob.data @heuristics.each do |heuristic| - return Array(heuristic.call(data)) if heuristic.matches?(languages) + if heuristic.matches?(blob.name) + languages = Array(heuristic.call(data)) + return languages if languages.any? || languages.all? { |l| candidates.include?(l) } + end end [] # No heuristics matched @@ -38,22 +41,22 @@ module Linguist # end # end # - def self.disambiguate(*languages, &heuristic) - @heuristics << new(languages, &heuristic) + def self.disambiguate(extension, &heuristic) + @heuristics << new(extension, &heuristic) end # Internal: Array of defined heuristics @heuristics = [] # Internal - def initialize(languages, &heuristic) - @languages = languages + def initialize(extension, &heuristic) + @extension = extension @heuristic = heuristic end # Internal: Check if this heuristic matches the candidate languages. - def matches?(candidates) - candidates.any? && candidates.all? { |l| @languages.include?(l.name) } + def matches?(filename) + filename.end_with?(@extension) end # Internal: Perform the heuristic @@ -64,7 +67,7 @@ module Linguist # Common heuristics ObjectiveCRegex = /^[ \t]*@(interface|class|protocol|property|end|synchronised|selector|implementation)\b/ - disambiguate "BitBake", "BlitzBasic" do |data| + disambiguate ".bb" do |data| if /^\s*; /.match(data) || data.include?("End Function") Language["BlitzBasic"] elsif /^\s*(# |include|require)\b/.match(data) @@ -72,7 +75,7 @@ module Linguist end end - disambiguate "C#", "Smalltalk" do |data| + disambiguate ".cs" do |data| if /![\w\s]+methodsFor: /.match(data) Language["Smalltalk"] elsif /^\s*namespace\s*[\w\.]+\s*{/.match(data) || /^\s*\/\//.match(data) @@ -80,7 +83,7 @@ module Linguist end end - disambiguate "Objective-C", "C++", "C" do |data| + disambiguate ".h" do |data| if ObjectiveCRegex.match(data) Language["Objective-C"] elsif (/^\s*#\s*include <(cstdint|string|vector|map|list|array|bitset|queue|stack|forward_list|unordered_map|unordered_set|(i|o|io)stream)>/.match(data) || @@ -89,7 +92,7 @@ module Linguist end end - disambiguate "Perl", "Perl6", "Prolog" do |data| + disambiguate ".pl" do |data| if data.include?("use v6") Language["Perl6"] elsif data.match(/use strict|use\s+v?5\./) @@ -99,7 +102,7 @@ module Linguist end end - disambiguate "ECL", "Prolog" do |data| + disambiguate ".ecl" do |data| if /^[^#]+:-/.match(data) Language["Prolog"] elsif data.include?(":=") @@ -107,7 +110,7 @@ module Linguist end end - disambiguate "IDL", "Prolog", "INI", "QMake" do |data| + disambiguate ".pro" do |data| if /^[^#]+:-/.match(data) Language["Prolog"] elsif data.include?("last_client=") @@ -119,7 +122,7 @@ module Linguist end end - disambiguate "GAP", "Scilab" do |data| + disambiguate ".tst" do |data| if (data.include?("gap> ")) Language["GAP"] # Heads up - we don't usually write heuristics like this (with no regex match) @@ -128,7 +131,7 @@ module Linguist end end - disambiguate "Common Lisp", "OpenCL", "Cool" do |data| + disambiguate ".cl" do |data| if /^\s*\((defun|in-package|defpackage) /i.match(data) Language["Common Lisp"] elsif /^class/x.match(data) @@ -138,7 +141,7 @@ module Linguist end end - disambiguate "Hack", "PHP" do |data| + disambiguate ".php" do |data| if data.include?(" |case\s+(\S+\s)+of/.match(data) @@ -274,7 +277,7 @@ module Linguist end end - disambiguate "NL", "NewLisp" do |data| + disambiguate ".nl" do |data| if /^(b|g)[0-9]+ /.match(data) Language["NL"] else @@ -282,7 +285,7 @@ module Linguist end end - disambiguate "Rust", "RenderScript" do |data| + disambiguate ".rs" do |data| if /^(use |fn |mod |pub |macro_rules|impl|#!?\[)/.match(data) Language["Rust"] elsif /#include|#pragma\s+(rs|version)|__attribute__/.match(data) @@ -290,7 +293,7 @@ module Linguist end end - disambiguate "Common Lisp", "Lex", "Groff" do |data| + disambiguate ".l" do |data| if data.include?("(def(un|macro)\s") Language["Common Lisp"] elsif /^(%[%{}]xs|<.*>)/.match(data) From 656f4f440d458380d7fd6fcd7047941be47fb62a Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Sat, 6 Jun 2015 17:44:02 +0200 Subject: [PATCH 025/356] Several extensions can be associated to a heuristic rule --- lib/linguist/heuristics.rb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 736c4e89..f02f4b73 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -41,22 +41,22 @@ module Linguist # end # end # - def self.disambiguate(extension, &heuristic) - @heuristics << new(extension, &heuristic) + def self.disambiguate(*extensions, &heuristic) + @heuristics << new(extensions, &heuristic) end # Internal: Array of defined heuristics @heuristics = [] # Internal - def initialize(extension, &heuristic) - @extension = extension + def initialize(extensions, &heuristic) + @extensions = extensions @heuristic = heuristic end # Internal: Check if this heuristic matches the candidate languages. def matches?(filename) - filename.end_with?(@extension) + @extensions.any? { |ext| filename.end_with?(ext) } end # Internal: Perform the heuristic @@ -167,7 +167,7 @@ module Linguist end end - disambiguate ".for" do |data| + disambiguate ".for", ".f" do |data| if /^: /.match(data) Language["Forth"] elsif /^([c*][^a-z]| (subroutine|program)\s|\s*!)/i.match(data) @@ -217,7 +217,7 @@ module Linguist end end - disambiguate ".lisp" do |data| + disambiguate ".lsp", ".lisp" do |data| if /^\s*\((defun|in-package|defpackage) /i.match(data) Language["Common Lisp"] elsif /^\s*\(define /.match(data) From e811021806c2db1e3c862b56319deb9635a52269 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Sat, 6 Jun 2015 18:27:59 +0200 Subject: [PATCH 026/356] Fix tests to use the correct extension in heuristic rules Extand a few tests where only one file was tested for a language --- test/test_heuristics.rb | 84 +++++++++++++++++++---------------------- 1 file changed, 39 insertions(+), 45 deletions(-) diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index a13ae12a..4b766bce 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -22,22 +22,27 @@ class TestHeuristcs < Minitest::Test assert_equal [], results end + def assert_heuristics(hash) + candidates = hash.keys.map { |l| Language[l] } + + hash.each do |language, blobs| + Array(blobs).each do |blob| + result = Heuristics.call(file_blob(blob), candidates) + assert_equal [Language[language]], result, "Failed for #{blob}" + end + end + end + # Candidate languages = ["C++", "Objective-C"] def test_obj_c_by_heuristics # Only calling out '.h' filenames as these are the ones causing issues assert_heuristics({ "Objective-C" => all_fixtures("Objective-C", "*.h"), - "C++" => ["C++/render_adapter.cpp", "C++/ThreadedQueue.h"], + "C++" => ["C++/scanner.h", "C++/qscicommand.h", "C++/v8.h", "C++/gdsdbreader.h"], "C" => nil }) end - def test_c_by_heuristics - languages = [Language["C++"], Language["Objective-C"], Language["C"]] - results = Heuristics.call(file_blob("C/ArrowLeft.h"), languages) - assert_equal [], results - end - def test_detect_still_works_if_nothing_matches blob = Linguist::FileBlob.new(File.join(samples_path, "Objective-C/hello.m")) match = Language.detect(blob) @@ -47,17 +52,17 @@ class TestHeuristcs < Minitest::Test # Candidate languages = ["Perl", "Prolog"] def test_pl_prolog_perl_by_heuristics assert_heuristics({ - "Prolog" => all_fixtures("Prolog/*.pl"), - "Perl" => all_fixtures("Perl/*.pl") + ["Perl/perl-test.t"], - "Perl6" => all_fixtures("Perl6/*.pl") + "Prolog" => all_fixtures("Prolog", "*.pl"), + "Perl" => all_fixtures("Perl", "*.pl"), + "Perl6" => all_fixtures("Perl6", "*.pl") }) end # Candidate languages = ["ECL", "Prolog"] def test_ecl_prolog_by_heuristics assert_heuristics({ - "ECL" => "ECL/sample.ecl", - "Prolog" => "Prolog/or-constraint.ecl" + "ECL" => all_fixtures("ECL", "*.ecl"), + "Prolog" => all_fixtures("Prolog", "*.ecl") }) end @@ -74,69 +79,69 @@ class TestHeuristcs < Minitest::Test # Candidate languages = ["AGS Script", "AsciiDoc", "Public Key"] def test_asc_by_heuristics assert_heuristics({ - "AsciiDoc" => "AsciiDoc/list.asc", - "AGS Script" => "AGS Script/GlobalScript.asc", + "AsciiDoc" => all_fixtures("AsciiDoc", "*.asc"), + "AGS Script" => all_fixtures("AGS Script", "*.asc"), "Public Key" => all_fixtures("Public Key", "*.asc") }) end def test_cl_by_heuristics assert_heuristics({ - "Common Lisp" => all_fixtures("Common Lisp"), - "OpenCL" => all_fixtures("OpenCL") + "Common Lisp" => all_fixtures("Common Lisp", "*.cl"), + "OpenCL" => all_fixtures("OpenCL", "*.cl") }) end def test_f_by_heuristics assert_heuristics({ - "FORTRAN" => all_fixtures("FORTRAN"), - "Forth" => all_fixtures("Forth") + "FORTRAN" => all_fixtures("FORTRAN", "*.f") + all_fixtures("FORTRAN", "*.for"), + "Forth" => all_fixtures("Forth", "*.f") + all_fixtures("Forth", "*.for") }) end # Candidate languages = ["Hack", "PHP"] def test_hack_by_heuristics assert_heuristics({ - "Hack" => "Hack/funs.php", - "PHP" => "PHP/Model.php" + "Hack" => all_fixtures("Hack", "*.php"), + "PHP" => all_fixtures("PHP", "*.php") }) end # Candidate languages = ["Scala", "SuperCollider"] def test_sc_supercollider_scala_by_heuristics assert_heuristics({ - "SuperCollider" => "SuperCollider/WarpPreset.sc", - "Scala" => "Scala/node11.sc" + "SuperCollider" => all_fixtures("SuperCollider", "*.sc"), + "Scala" => all_fixtures("Scala", "*.sc") }) end def test_fs_by_heuristics assert_heuristics({ - "F#" => all_fixtures("F#"), - "Forth" => all_fixtures("Forth"), - "GLSL" => all_fixtures("GLSL") + "F#" => all_fixtures("F#", "*.fs"), + "Forth" => all_fixtures("Forth", "*.fs"), + "GLSL" => all_fixtures("GLSL", "*.fs") }) end def test_fr_by_heuristics assert_heuristics({ - "Frege" => all_fixtures("Frege"), - "Forth" => all_fixtures("Forth"), - "Text" => all_fixtures("Text") + "Frege" => all_fixtures("Frege", "*.fr"), + "Forth" => all_fixtures("Forth", "*.fr"), + "Text" => all_fixtures("Text", "*.fr") }) end def test_bb_by_heuristics assert_heuristics({ - "BitBake" => all_fixtures("BitBake"), - "BlitzBasic" => all_fixtures("BlitzBasic") + "BitBake" => all_fixtures("BitBake", "*.bb"), + "BlitzBasic" => all_fixtures("BlitzBasic", "*.bb") }) end def test_lsp_by_heuristics assert_heuristics({ - "Common Lisp" => all_fixtures("Common Lisp"), - "NewLisp" => all_fixtures("NewLisp") + "Common Lisp" => all_fixtures("Common Lisp", "*.lsp") + all_fixtures("Common Lisp", "*.lisp"), + "NewLisp" => all_fixtures("NewLisp", "*.lsp") + all_fixtures("NewLisp", "*.lisp") }) end @@ -147,21 +152,10 @@ class TestHeuristcs < Minitest::Test }) end - def assert_heuristics(hash) - candidates = hash.keys.map { |l| Language[l] } - - hash.each do |language, blobs| - Array(blobs).each do |blob| - result = Heuristics.call(file_blob(blob), candidates) - assert_equal [Language[language]], result, "Failed for #{blob}" - end - end - end - def test_ls_by_heuristics assert_heuristics({ - "LiveScript" => "LiveScript/hello.ls", - "LoomScript" => "LoomScript/HelloWorld.ls" + "LiveScript" => all_fixtures("LiveScript", "*.ls"), + "LoomScript" => all_fixtures("LoomScript", "*.ls") }) end From b05f6f00187bf9619eca3f9f95a08a44a536b054 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Sat, 6 Jun 2015 18:49:36 +0200 Subject: [PATCH 027/356] Test for the new heuristic definitions --- samples/Perl6/List.pm | 699 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 699 insertions(+) create mode 100644 samples/Perl6/List.pm diff --git a/samples/Perl6/List.pm b/samples/Perl6/List.pm new file mode 100644 index 00000000..4e1ec47f --- /dev/null +++ b/samples/Perl6/List.pm @@ -0,0 +1,699 @@ +# for our tantrums +my class X::TypeCheck { ... } +my role Supply { ... } + +my sub combinations($n, $k) { + my @result; + my @stack; + + return ([],) unless $k; + + @stack.push(0); + gather while @stack { + my $index = @stack - 1; + my $value = @stack.pop; + + while $value < $n { + @result[$index++] = $value++; + @stack.push($value); + if $index == $k { + take [@result]; + $value = $n; # fake a last + } + } + } +} + +my sub permutations(Int $n) { + $n == 1 ?? ( [0,] ) !! + gather for ^$n -> $i { + my @i = grep none($i), ^$n; + take [$i, @i[@$_]] for permutations($n - 1); + } +} + +my class List does Positional { # declared in BOOTSTRAP + # class List is Iterable is Cool + # has Mu $!items; # VM's array of our reified elements + # has Mu $!flattens; # true if this list flattens its parcels + # has Mu $!nextiter; # iterator for generating remaining elements + + method new(|) { + my Mu $args := nqp::p6argvmarray(); + nqp::shift($args); + + nqp::p6list($args, self.WHAT, Mu); + } + + multi method Bool(List:D:) { self.gimme(1).Bool } + multi method Int(List:D:) { self.elems } + multi method end(List:D:) { self.elems - 1 } + multi method Numeric(List:D:) { self.elems } + multi method Str(List:D:) { self.join(' ') } + + # Pretend we're a Match assuming we're a list of Matches + method to() { self.elems ?? self[self.end].to !! Nil } + method from() { self.elems ?? self[0].from !! Nil } + + method fmt($format = '%s', $separator = ' ') { + self.map({ .fmt($format) }).join($separator); + } + + method flat() { self.flattens + ?? self + !! nqp::p6list(nqp::list(self), List, Bool::True) + } + method list() { self } + method lol() { + self.gimme(0); + my Mu $rpa := nqp::clone($!items); + nqp::push($rpa, $!nextiter) if $!nextiter.defined; + nqp::p6list($rpa, LoL, Mu); + } + + method flattens() { $!flattens } + + method Capture() { + self.gimme(*); + my $cap := nqp::create(Capture); + nqp::bindattr($cap, Capture, '$!list', $!items); + $cap + } + + method Parcel() { + my Mu $rpa := nqp::clone(nqp::p6listitems(self)); + nqp::push($rpa, $!nextiter) if $!nextiter.defined; + nqp::p6parcel($rpa, Any); + } + + method Supply(List:D:) { Supply.from-list(self) } + + multi method at_pos(List:D: int \pos) is rw { + fail X::OutOfRange.new(:what,:got(pos),:range<0..Inf>) + if nqp::islt_i(pos,0); + self.exists_pos(pos) ?? nqp::atpos($!items,pos) !! Nil; + } + multi method at_pos(List:D: Int:D \pos) is rw { + my int $pos = nqp::unbox_i(pos); + fail X::OutOfRange.new(:what,:got(pos),:range<0..Inf>) + if nqp::islt_i($pos,0); + self.exists_pos($pos) ?? nqp::atpos($!items,$pos) !! Nil; + } + + method eager() { self.gimme(*); self } + + method elems() { + return 0 unless self.DEFINITE; + return nqp::elems(nqp::p6listitems(self)) unless nqp::defined($!nextiter); + # Get as many elements as we can. If gimme stops before + # reaching the end of the list, assume the list is infinite. + my $n := self.gimme(*); + nqp::defined($!nextiter) ?? Inf !! $n + } + + multi method exists_pos(List:D: int $pos) { + return False if nqp::islt_i($pos,0); + self.gimme($pos + 1); + nqp::p6bool( + nqp::not_i(nqp::isnull(nqp::atpos($!items,$pos))) + ); + } + multi method exists_pos(List:D: Int:D $pos) { + return False if $pos < 0; + self.gimme($pos + 1); + nqp::p6bool( + nqp::not_i(nqp::isnull(nqp::atpos($!items,nqp::unbox_i($pos)))) + ); + } + + method gimme($n, :$sink) { + return unless self.DEFINITE; + # loop through iterators until we have at least $n elements + my int $count = nqp::elems(nqp::p6listitems(self)); + if nqp::istype($n, Whatever) || nqp::istype($n, Num) && nqp::istrue($n == Inf) { + while $!nextiter.DEFINITE && !$!nextiter.infinite { + $!nextiter.reify(*, :$sink); + $count = nqp::elems($!items); + } + } + else { + my int $target = $n.Int; + while nqp::isconcrete($!nextiter) && $count < $target { + $!nextiter.reify($target - $count, :$sink); + $count = nqp::elems($!items); + } + } + + # return the number of elements we have now + $count + } + + multi method infinite(List:D:) { $!nextiter.infinite } + + method iterator() { + # Return a reified ListIter containing our currently reified elements + # and any subsequent iterator. + my $iter := nqp::create(ListIter); + nqp::bindattr($iter, ListIter, '$!nextiter', $!nextiter); + nqp::bindattr($iter, ListIter, '$!reified', self.Parcel()); + $iter; + } + + method munch($n is copy) { + $n = 0 if $n < 0; + $n = self.gimme($n) if nqp::not_i(nqp::istype($n, Int)) + || nqp::not_i(nqp::islist($!items)) + || nqp::islt_i(nqp::elems($!items), nqp::unbox_i($n)); + nqp::p6parcel( + nqp::p6shiftpush(nqp::list(), $!items, nqp::unbox_i($n)), + Any + ) + } + + proto method pick(|) { * } + multi method pick() { + fail "Cannot .pick from infinite list" if self.infinite; + my $elems = self.elems; + $elems ?? self.at_pos($elems.rand.floor) !! Nil; + } + multi method pick($n is copy) { + fail "Cannot .pick from infinite list" if self.infinite; + ## We use a version of Fisher-Yates shuffle here to + ## replace picked elements with elements from the end + ## of the list, resulting in an O(n) algorithm. + my $elems = self.elems; + return unless $elems; + $n = Inf if nqp::istype($n, Whatever); + $n = $elems if $n > $elems; + return self.at_pos($elems.rand.floor) if $n == 1; + my Mu $rpa := nqp::clone($!items); + my $i; + my Mu $v; + gather while $n > 0 { + $i = nqp::rand_I(nqp::decont($elems), Int); + $elems--; $n--; + $v := nqp::atpos($rpa, nqp::unbox_i($i)); + # replace selected element with last unpicked one + nqp::bindpos($rpa, nqp::unbox_i($i), + nqp::atpos($rpa, nqp::unbox_i($elems))); + take-rw $v; + } + } + + method pop() is parcel { + my $elems = self.gimme(*); + fail 'Cannot .pop from an infinite list' if $!nextiter.defined; + $elems > 0 + ?? nqp::pop($!items) + !! fail 'Element popped from empty list'; + } + + method shift() is parcel { + # make sure we have at least one item, then shift+return it + nqp::islist($!items) && nqp::existspos($!items, 0) || self.gimme(1) + ?? nqp::shift($!items) + !! fail 'Element shifted from empty list'; + } + + my &list_push = multi method push(List:D: *@values) { + fail 'Cannot .push an infinite list' if @values.infinite; + nqp::p6listitems(self); + my $elems = self.gimme(*); + fail 'Cannot .push to an infinite list' if $!nextiter.DEFINITE; + + # push is always eager + @values.gimme(*); + + # need type checks? + my $of := self.of; + + unless $of =:= Mu { + X::TypeCheck.new( + operation => '.push', + expected => $of, + got => $_, + ).throw unless nqp::istype($_, $of) for @values; + } + + nqp::splice($!items, + nqp::getattr(@values, List, '$!items'), + $elems, 0); + + self; + } + + multi method push(List:D: \value) { + if nqp::iscont(value) || nqp::not_i(nqp::istype(value, Iterable)) && nqp::not_i(nqp::istype(value, Parcel)) { + $!nextiter.DEFINITE && self.gimme(*); + fail 'Cannot .push to an infinite list' if $!nextiter.DEFINITE; + nqp::p6listitems(self); + nqp::istype(value, self.of) + ?? nqp::push($!items, nqp::assign(nqp::p6scalarfromdesc(nqp::null), value)) + !! X::TypeCheck.new( + operation => '.push', + expected => self.of, + got => value, + ).throw; + self + } + else { + list_push(self, value) + } + } + + multi method unshift(List:D: \value) { + if nqp::iscont(value) || !(nqp::istype(value, Iterable) || nqp::istype(value, Parcel)) { + nqp::p6listitems(self); + value.gimme(*) if nqp::istype(value, List); # fixes #121994 + nqp::istype(value, self.of) + ?? nqp::unshift($!items, my $ = value) + !! X::TypeCheck.new( + operation => '.push', + expected => self.of, + got => value, + ).throw; + self + } + else { + callsame(); + } + } + + multi method unshift(List:D: *@values) { + fail 'Cannot .unshift an infinite list' if @values.infinite; + nqp::p6listitems(self); + + # don't bother with type checks + my $of := self.of; + if ( $of =:= Mu ) { + nqp::unshift($!items, @values.pop) while @values; + } + + # we must check types + else { + while @values { + my $value := @values.pop; + if nqp::istype($value, $of) { + nqp::unshift($!items, $value); + } + + # huh? + else { + X::TypeCheck.new( + operation => '.unshift', + expected => $of, + got => $value, + ).throw; + } + } + } + + self + } + + method plan(List:D: |args) { + nqp::p6listitems(self); + my $elems = self.gimme(*); + fail 'Cannot add plan to an infinite list' if $!nextiter.defined; + +# # need type checks? +# my $of := self.of; +# +# unless $of =:= Mu { +# X::TypeCheck.new( +# operation => '.push', +# expected => $of, +# got => $_, +# ).throw unless nqp::istype($_, $of) for @values; +# } + + nqp::bindattr(self, List, '$!nextiter', nqp::p6listiter(nqp::list(args.list), self)); + Nil; + } + + proto method roll(|) { * } + multi method roll() { + fail "Cannot .roll from infinite list" if self.infinite; + my $elems = self.elems; + $elems ?? self.at_pos($elems.rand.floor) !! Nil; + } + multi method roll($n is copy) { + fail "Cannot .roll from infinite list" if self.infinite; + my $elems = self.elems; + return unless $elems; + $n = Inf if nqp::istype($n, Whatever); + return self.at_pos($elems.rand.floor) if $n == 1; + + gather while $n > 0 { + take nqp::atpos($!items, nqp::unbox_i($elems.rand.floor.Int)); + $n--; + } + } + + method reverse() { + self.gimme(*); + fail 'Cannot .reverse from an infinite list' if $!nextiter.defined; + my Mu $rev := nqp::list(); + my Mu $orig := nqp::clone($!items); + nqp::push($rev, nqp::pop($orig)) while $orig; + my $rlist := nqp::create(self.WHAT); + nqp::bindattr($rlist, List, '$!items', $rev); + $rlist; + } + + method rotate(Int $n is copy = 1) { + self.gimme(*); + fail 'Cannot .rotate an infinite list' if $!nextiter.defined; + my $items = nqp::p6box_i(nqp::elems($!items)); + return self if !$items; + + $n %= $items; + return self if $n == 0; + + my Mu $res := nqp::clone($!items); + if $n > 0 { + nqp::push($res, nqp::shift($res)) while $n--; + } + elsif $n < 0 { + nqp::unshift($res, nqp::pop($res)) while $n++; + } + my $rlist := nqp::create(self.WHAT); + nqp::bindattr($rlist, List, '$!items', $res); + $rlist; + } + + method splice($offset = 0, $size?, *@values) { + self.gimme(*); + my $o = $offset; + my $s = $size; + my $elems = self.elems; + $o = $o($elems) if nqp::istype($o, Callable); + X::OutOfRange.new( + what => 'offset argument to List.splice', + got => $offset, + range => (0..^self.elems), + ).fail if $o < 0; + $s //= self.elems - ($o min $elems); + $s = $s(self.elems - $o) if nqp::istype($s, Callable); + X::OutOfRange.new( + what => 'size argument to List.splice', + got => $size, + range => (0..^(self.elems - $o)), + ).fail if $s < 0; + + my @ret = self[$o..($o + $s - 1)]; + nqp::splice($!items, + nqp::getattr(@values.eager, List, '$!items'), + $o.Int, $s.Int); + @ret; + } + + method sort($by = &infix:) { + fail 'Cannot .sort an infinite list' if self.infinite; #MMD? + + # Instead of sorting elements directly, we sort a Parcel of + # indices from 0..^$list.elems, then use that Parcel as + # a slice into self. This is for historical reasons: on + # Parrot we delegate to RPA.sort. The JVM implementation + # uses a Java collection sort. MoarVM has its sort algorithm + # implemented in NQP. + + # nothing to do here + my $elems := self.elems; + return self if $elems < 2; + + # Range is currently optimized for fast Parcel construction. + my $index := Range.new(0, $elems, :excludes-max).reify(*); + my Mu $index_rpa := nqp::getattr($index, Parcel, '$!storage'); + + # if $by.arity < 2, then we apply the block to the elements + # for sorting. + if ($by.?count // 2) < 2 { + my $list = self.map($by).eager; + nqp::p6sort($index_rpa, -> $a, $b { $list.at_pos($a) cmp $list.at_pos($b) || $a <=> $b }); + } + else { + my $list = self.eager; + nqp::p6sort($index_rpa, -> $a, $b { $by($list.at_pos($a), $list.at_pos($b)) || $a <=> $b }); + } + self[$index]; + } + + multi method ACCEPTS(List:D: $topic) { self } + + method uniq(|c) { + DEPRECATED('unique', |<2014.11 2015.11>); + self.unique(|c); + } + + proto method unique(|) {*} + multi method unique() { + my $seen := nqp::hash(); + my str $target; + gather for @.list { + $target = nqp::unbox_s($_.WHICH); + unless nqp::existskey($seen, $target) { + nqp::bindkey($seen, $target, 1); + take $_; + } + } + } + multi method unique( :&as!, :&with! ) { + my @seen = "should be Mu, but doesn't work in settings :-(" + my Mu $target; + gather for @.list { + $target = &as($_); + if first( { with($target,$_) }, @seen ) =:= Nil { + @seen.push($target); + take $_; + } + }; + } + multi method unique( :&as! ) { + my $seen := nqp::hash(); + my str $target; + gather for @.list { + $target = &as($_).WHICH; + unless nqp::existskey($seen, $target) { + nqp::bindkey($seen, $target, 1); + take $_; + } + } + } + multi method unique( :&with! ) { + nextwith() if &with === &[===]; # use optimized version + + my @seen; # should be Mu, but doesn't work in settings :-( + my Mu $target; + gather for @.list { + $target := $_; + if first( { with($target,$_) }, @seen ) =:= Nil { + @seen.push($target); + take $_; + } + } + } + + my @secret; + proto method squish(|) {*} + multi method squish( :&as!, :&with = &[===] ) { + my $last = @secret; + my str $which; + gather for @.list { + $which = &as($_).Str; + unless with($which,$last) { + $last = $which; + take $_; + } + } + } + multi method squish( :&with = &[===] ) { + my $last = @secret; + gather for @.list { + unless with($_,$last) { + $last = $_; + take $_; + } + } + } + + proto method rotor(|) {*} + multi method rotor(1, 0) { self } + multi method rotor($elems = 2, $overlap = 1) { + X::OutOfRange.new( + what => 'Overlap argument to List.rotor', + got => $overlap, + range => (0 .. $elems - 1), + ).fail unless 0 <= $overlap < $elems; + X::OutOfRange.new( + what => 'Elements argument to List.rotor', + got => $elems, + range => (0 .. *), + ).fail unless 0 <= $elems; + + my $finished = 0; + gather while $finished + $overlap < self.gimme($finished + $elems) { + take item self[$finished ..^ $finished + $elems]; + $finished += $elems - $overlap + } + } + + multi method gist(List:D:) { + @(self).map( -> $elem { + given ++$ { + when 101 { '...' } + when 102 { last } + default { $elem.gist } + } + } ).join: ' '; + } + multi method perl(List:D \SELF:) { + self.gimme(*); + self.Parcel.perl ~ '.list' + ~ (nqp::iscont(SELF) ?? '.item' !! '') + } + + method REIFY(Parcel \parcel, Mu \nextiter) { + nqp::splice($!items, nqp::getattr(parcel, Parcel, '$!storage'), + nqp::elems($!items), 0); + nqp::bindattr(self, List, '$!nextiter', nextiter); + parcel + } + + method FLATTENABLE_LIST() { self.gimme(*); $!items } + method FLATTENABLE_HASH() { nqp::hash() } + + multi method DUMP(List:D: :$indent-step = 4, :%ctx?) { + return DUMP(self, :$indent-step) unless %ctx; + + my $flags := ("\x221e" if self.infinite); + my Mu $attrs := nqp::list(); + nqp::push($attrs, '$!flattens'); + nqp::push($attrs, $!flattens ); + nqp::push($attrs, '$!items' ); + nqp::push($attrs, $!items ); + nqp::push($attrs, '$!nextiter'); + nqp::push($attrs, $!nextiter ); + self.DUMP-OBJECT-ATTRS($attrs, :$indent-step, :%ctx, :$flags); + } + + multi method keys(List:D:) { + self.values.map: { (state $)++ } + } + multi method kv(List:D:) { + gather for self.values { + take (state $)++; + take-rw $_; + } + } + multi method values(List:D:) { + my Mu $rpa := nqp::clone(nqp::p6listitems(self)); + nqp::push($rpa, $!nextiter) if $!nextiter.defined; + nqp::p6list($rpa, List, self.flattens); + } + multi method pairs(List:D:) { + self.values.map: {; (state $)++ => $_ } + } + + method reduce(List: &with) { + fail('can only reduce with arity 2') + unless &with.arity <= 2 <= &with.count; + return unless self.DEFINITE; + my \vals = self.values; + my Mu $val = vals.shift; + $val = with($val, $_) for vals; + $val; + } + + method sink() { + self.gimme(*, :sink) if self.DEFINITE && $!nextiter.DEFINITE; + Nil; + } + + # this is a remnant of a previous implementation of .push(), which + # apparently is used by LoL. Please remove when no longer necessary. + method STORE_AT_POS(Int \pos, Mu \v) is rw { + nqp::bindpos($!items, nqp::unbox_i(pos), v) + } + + proto method combinations($?) {*} + multi method combinations( Int $of ) { + ([self[@$_]] for combinations(self.elems, $of).eager) + } + multi method combinations( Range $of = 0 .. * ) { + gather for @$of { + last if $_ > self.elems; + take self.combinations($_); + } + } + + method permutations() { + # need block on Moar because of RT#121830 + gather { take [self[@$_]] for permutations(self.elems).eager } + } +} + +sub eager(|) { + nqp::p6parcel(nqp::p6argvmarray(), Any).eager +} + +sub flat(|) { + nqp::p6list(nqp::p6argvmarray(), List, Bool::True) +} + +sub list(|) { + nqp::p6list(nqp::p6argvmarray(), List, Mu) +} + +proto sub infix:(|) { * } +multi sub infix:() { fail "No zero-arg meaning for infix:" } +multi sub infix:(Mu \x) {x } +multi sub infix:(Mu \x, $n is copy, :$thunked!) { + $n = nqp::p6bool(nqp::istype($n, Whatever)) ?? Inf !! $n.Int; + GatherIter.new({ take x.() while --$n >= 0; }, :infinite($n == Inf)).list +} +multi sub infix:(Mu \x, Whatever, :$thunked!) { + GatherIter.new({ loop { take x.() } }, :infinite(True)).flat +} +multi sub infix:(Mu \x, Whatever) { + GatherIter.new({ loop { take x } }, :infinite(True)).flat +} +multi sub infix:(Mu \x, $n) { + my int $size = $n.Int; + + my Mu $rpa := nqp::list(); + if $size > 0 { + nqp::setelems($rpa, $size); + nqp::setelems($rpa, 0); + + $size = $size + 1; + nqp::push($rpa,x) while $size = $size - 1; + } + + nqp::p6parcel($rpa, Any); +} + +proto sub pop(@) {*} +multi sub pop(@a) { @a.pop } + +proto sub shift(@) {*} +multi sub shift(@a) { @a.shift } + +proto sub unshift(|) {*} +multi sub unshift(\a, \elem) { a.unshift: elem } +multi sub unshift(\a, *@elems) { a.unshift: @elems } + +proto sub push(|) {*} +multi sub push(\a, \elem) { a.push: elem } +multi sub push(\a, *@elems) { a.push: @elems } + +sub reverse(*@a) { @a.reverse } +sub rotate(@a, Int $n = 1) { @a.rotate($n) } +sub reduce (&with, *@list) { @list.reduce(&with) } +sub splice(@arr, $offset = 0, $size?, *@values) { + @arr.splice($offset, $size, @values) +} + +multi sub infix:(@a, @b) { (@a Zcmp @b).first(&prefix:) || @a <=> @b } + +# vim: ft=perl6 expandtab sw=4 From be122ca1a536ba730e292facabdc4348ec459281 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Sat, 6 Jun 2015 19:55:04 +0200 Subject: [PATCH 028/356] Fix test for Perl heuristic Improve heuristic rule for Perl6 Separate heuristic rules for .pl (with Prolog) and .pm (without Prolog) --- lib/linguist/heuristics.rb | 12 ++++++++++-- test/test_heuristics.rb | 12 ++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index f02f4b73..3fc27858 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -93,15 +93,23 @@ module Linguist end disambiguate ".pl" do |data| - if data.include?("use v6") + if /^(use v6|(my )?class|module)/.match(data) Language["Perl6"] - elsif data.match(/use strict|use\s+v?5\./) + elsif /use strict|use\s+v?5\./.match(data) Language["Perl"] elsif /^[^#]+:-/.match(data) Language["Prolog"] end end + disambiguate ".pm" do |data| + if /^(use v6|(my )?class|module)/.match(data) + Language["Perl6"] + elsif /use strict|use\s+v?5\./.match(data) + Language["Perl"] + end + end + disambiguate ".ecl" do |data| if /^[^#]+:-/.match(data) Language["Prolog"] diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index 4b766bce..da4dc6c8 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -49,15 +49,23 @@ class TestHeuristcs < Minitest::Test assert_equal Language["Objective-C"], match end - # Candidate languages = ["Perl", "Prolog"] + # Candidate languages = ["Perl", "Perl6", "Prolog"] def test_pl_prolog_perl_by_heuristics assert_heuristics({ "Prolog" => all_fixtures("Prolog", "*.pl"), - "Perl" => all_fixtures("Perl", "*.pl"), + "Perl" => ["Perl/oo1.pl", "Perl/oo2.pl", "Perl/oo3.pl", "Perl/fib.pl", "Perl/use5.pl"], "Perl6" => all_fixtures("Perl6", "*.pl") }) end + # Candidate languages = ["Perl", "Perl6"] + def test_pm_perl_by_heuristics + assert_heuristics({ + "Perl" => all_fixtures("Perl", "*.pm"), + "Perl6" => all_fixtures("Perl6", "*.pm") + }) + end + # Candidate languages = ["ECL", "Prolog"] def test_ecl_prolog_by_heuristics assert_heuristics({ From 3180c5d554a08a90713bb8f770080323a166fc7f Mon Sep 17 00:00:00 2001 From: Kevin Butler Date: Wed, 10 Jun 2015 15:37:31 +0100 Subject: [PATCH 029/356] Allow delimiting by comma in the language name --- lib/linguist/language.rb | 6 +++--- test/test_language.rb | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index d2d44466..05c5f802 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -150,7 +150,7 @@ module Linguist # # Returns the Language or nil if none was found. def self.find_by_name(name) - name && @name_index[name.downcase] + name && (@name_index[name.downcase] || @name_index[name.split(',').first.downcase]) end # Public: Look up Language by one of its aliases. @@ -164,7 +164,7 @@ module Linguist # # Returns the Language or nil if none was found. def self.find_by_alias(name) - name && @alias_index[name.downcase] + name && (@alias_index[name.downcase] || @alias_index[name.split(',').first.downcase]) end # Public: Look up Languages by filename. @@ -240,7 +240,7 @@ module Linguist # # Returns the Language or nil if none was found. def self.[](name) - name && @index[name.downcase] + name && (@index[name.downcase] || @index[name.split(',').first.downcase]) end # Public: A List of popular languages diff --git a/test/test_language.rb b/test/test_language.rb index 3c204c0a..3d1fd66c 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -263,6 +263,18 @@ class TestLanguage < Minitest::Test assert_equal 'AGS Script', Language.find_by_alias('AGS').name end + def test_find_ignores_comma + assert_equal 'Rust', Language['rust,no_run'].name + end + + def test_find_by_name_ignores_comma + assert_equal Language['Rust'], Language.find_by_name('rust,no_run') + end + + def test_find_by_alias_ignores_comma + assert_equal Language['Rust'], Language.find_by_alias('rust,no_run') + end + def test_name assert_equal 'Perl', Language['Perl'].name assert_equal 'Python', Language['Python'].name From bc8d65e7d3567783c132632d76af352a74bf6b4f Mon Sep 17 00:00:00 2001 From: Kevin Butler Date: Wed, 10 Jun 2015 15:50:24 +0100 Subject: [PATCH 030/356] Add 1.0 rust sample and add file with `extern crate` usage --- samples/Rust/hashmap.rs | 2324 +++++++++++++++++++++++++++++++++++++++ samples/Rust/main.rs | 12 + 2 files changed, 2336 insertions(+) create mode 100644 samples/Rust/hashmap.rs create mode 100644 samples/Rust/main.rs diff --git a/samples/Rust/hashmap.rs b/samples/Rust/hashmap.rs new file mode 100644 index 00000000..093218c6 --- /dev/null +++ b/samples/Rust/hashmap.rs @@ -0,0 +1,2324 @@ +// Copyright 2014-2015 The Rust Project Developers. See the COPYRIGHT +// file at the top-level directory of this distribution and at +// http://rust-lang.org/COPYRIGHT. +// +// Licensed under the Apache License, Version 2.0 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +use self::Entry::*; +use self::SearchResult::*; +use self::VacantEntryState::*; + +use borrow::Borrow; +use clone::Clone; +use cmp::{max, Eq, PartialEq}; +use default::Default; +use fmt::{self, Debug}; +use hash::{Hash, SipHasher}; +use iter::{self, Iterator, ExactSizeIterator, IntoIterator, FromIterator, Extend, Map}; +use marker::Sized; +use mem::{self, replace}; +use ops::{Deref, FnMut, FnOnce, Index}; +use option::Option::{self, Some, None}; +use rand::{self, Rng}; +use result::Result::{self, Ok, Err}; + +use super::table::{ + self, + Bucket, + EmptyBucket, + FullBucket, + FullBucketImm, + FullBucketMut, + RawTable, + SafeHash +}; +use super::table::BucketState::{ + Empty, + Full, +}; +use super::state::HashState; + +const INITIAL_LOG2_CAP: usize = 5; +#[unstable(feature = "std_misc")] +pub const INITIAL_CAPACITY: usize = 1 << INITIAL_LOG2_CAP; // 2^5 + +/// The default behavior of HashMap implements a load factor of 90.9%. +/// This behavior is characterized by the following condition: +/// +/// - if size > 0.909 * capacity: grow the map +#[derive(Clone)] +struct DefaultResizePolicy; + +impl DefaultResizePolicy { + fn new() -> DefaultResizePolicy { + DefaultResizePolicy + } + + #[inline] + fn min_capacity(&self, usable_size: usize) -> usize { + // Here, we are rephrasing the logic by specifying the lower limit + // on capacity: + // + // - if `cap < size * 1.1`: grow the map + usable_size * 11 / 10 + } + + /// An inverse of `min_capacity`, approximately. + #[inline] + fn usable_capacity(&self, cap: usize) -> usize { + // As the number of entries approaches usable capacity, + // min_capacity(size) must be smaller than the internal capacity, + // so that the map is not resized: + // `min_capacity(usable_capacity(x)) <= x`. + // The left-hand side can only be smaller due to flooring by integer + // division. + // + // This doesn't have to be checked for overflow since allocation size + // in bytes will overflow earlier than multiplication by 10. + cap * 10 / 11 + } +} + +#[test] +fn test_resize_policy() { + let rp = DefaultResizePolicy; + for n in 0..1000 { + assert!(rp.min_capacity(rp.usable_capacity(n)) <= n); + assert!(rp.usable_capacity(rp.min_capacity(n)) <= n); + } +} + +// The main performance trick in this hashmap is called Robin Hood Hashing. +// It gains its excellent performance from one essential operation: +// +// If an insertion collides with an existing element, and that element's +// "probe distance" (how far away the element is from its ideal location) +// is higher than how far we've already probed, swap the elements. +// +// This massively lowers variance in probe distance, and allows us to get very +// high load factors with good performance. The 90% load factor I use is rather +// conservative. +// +// > Why a load factor of approximately 90%? +// +// In general, all the distances to initial buckets will converge on the mean. +// At a load factor of α, the odds of finding the target bucket after k +// probes is approximately 1-α^k. If we set this equal to 50% (since we converge +// on the mean) and set k=8 (64-byte cache line / 8-byte hash), α=0.92. I round +// this down to make the math easier on the CPU and avoid its FPU. +// Since on average we start the probing in the middle of a cache line, this +// strategy pulls in two cache lines of hashes on every lookup. I think that's +// pretty good, but if you want to trade off some space, it could go down to one +// cache line on average with an α of 0.84. +// +// > Wait, what? Where did you get 1-α^k from? +// +// On the first probe, your odds of a collision with an existing element is α. +// The odds of doing this twice in a row is approximately α^2. For three times, +// α^3, etc. Therefore, the odds of colliding k times is α^k. The odds of NOT +// colliding after k tries is 1-α^k. +// +// The paper from 1986 cited below mentions an implementation which keeps track +// of the distance-to-initial-bucket histogram. This approach is not suitable +// for modern architectures because it requires maintaining an internal data +// structure. This allows very good first guesses, but we are most concerned +// with guessing entire cache lines, not individual indexes. Furthermore, array +// accesses are no longer linear and in one direction, as we have now. There +// is also memory and cache pressure that this would entail that would be very +// difficult to properly see in a microbenchmark. +// +// ## Future Improvements (FIXME!) +// +// Allow the load factor to be changed dynamically and/or at initialization. +// +// Also, would it be possible for us to reuse storage when growing the +// underlying table? This is exactly the use case for 'realloc', and may +// be worth exploring. +// +// ## Future Optimizations (FIXME!) +// +// Another possible design choice that I made without any real reason is +// parameterizing the raw table over keys and values. Technically, all we need +// is the size and alignment of keys and values, and the code should be just as +// efficient (well, we might need one for power-of-two size and one for not...). +// This has the potential to reduce code bloat in rust executables, without +// really losing anything except 4 words (key size, key alignment, val size, +// val alignment) which can be passed in to every call of a `RawTable` function. +// This would definitely be an avenue worth exploring if people start complaining +// about the size of rust executables. +// +// Annotate exceedingly likely branches in `table::make_hash` +// and `search_hashed` to reduce instruction cache pressure +// and mispredictions once it becomes possible (blocked on issue #11092). +// +// Shrinking the table could simply reallocate in place after moving buckets +// to the first half. +// +// The growth algorithm (fragment of the Proof of Correctness) +// -------------------- +// +// The growth algorithm is basically a fast path of the naive reinsertion- +// during-resize algorithm. Other paths should never be taken. +// +// Consider growing a robin hood hashtable of capacity n. Normally, we do this +// by allocating a new table of capacity `2n`, and then individually reinsert +// each element in the old table into the new one. This guarantees that the +// new table is a valid robin hood hashtable with all the desired statistical +// properties. Remark that the order we reinsert the elements in should not +// matter. For simplicity and efficiency, we will consider only linear +// reinsertions, which consist of reinserting all elements in the old table +// into the new one by increasing order of index. However we will not be +// starting our reinsertions from index 0 in general. If we start from index +// i, for the purpose of reinsertion we will consider all elements with real +// index j < i to have virtual index n + j. +// +// Our hash generation scheme consists of generating a 64-bit hash and +// truncating the most significant bits. When moving to the new table, we +// simply introduce a new bit to the front of the hash. Therefore, if an +// elements has ideal index i in the old table, it can have one of two ideal +// locations in the new table. If the new bit is 0, then the new ideal index +// is i. If the new bit is 1, then the new ideal index is n + i. Intuitively, +// we are producing two independent tables of size n, and for each element we +// independently choose which table to insert it into with equal probability. +// However the rather than wrapping around themselves on overflowing their +// indexes, the first table overflows into the first, and the first into the +// second. Visually, our new table will look something like: +// +// [yy_xxx_xxxx_xxx|xx_yyy_yyyy_yyy] +// +// Where x's are elements inserted into the first table, y's are elements +// inserted into the second, and _'s are empty sections. We now define a few +// key concepts that we will use later. Note that this is a very abstract +// perspective of the table. A real resized table would be at least half +// empty. +// +// Theorem: A linear robin hood reinsertion from the first ideal element +// produces identical results to a linear naive reinsertion from the same +// element. +// +// FIXME(Gankro, pczarn): review the proof and put it all in a separate README.md + +/// A hash map implementation which uses linear probing with Robin +/// Hood bucket stealing. +/// +/// The hashes are all keyed by the thread-local random number generator +/// on creation by default. This means that the ordering of the keys is +/// randomized, but makes the tables more resistant to +/// denial-of-service attacks (Hash DoS). This behaviour can be +/// overridden with one of the constructors. +/// +/// It is required that the keys implement the `Eq` and `Hash` traits, although +/// this can frequently be achieved by using `#[derive(PartialEq, Eq, Hash)]`. +/// If you implement these yourself, it is important that the following +/// property holds: +/// +/// ```text +/// k1 == k2 -> hash(k1) == hash(k2) +/// ``` +/// +/// In other words, if two keys are equal, their hashes must be equal. +/// +/// It is a logic error for a key to be modified in such a way that the key's +/// hash, as determined by the `Hash` trait, or its equality, as determined by +/// the `Eq` trait, changes while it is in the map. This is normally only +/// possible through `Cell`, `RefCell`, global state, I/O, or unsafe code. +/// +/// Relevant papers/articles: +/// +/// 1. Pedro Celis. ["Robin Hood Hashing"](https://cs.uwaterloo.ca/research/tr/1986/CS-86-14.pdf) +/// 2. Emmanuel Goossaert. ["Robin Hood +/// hashing"](http://codecapsule.com/2013/11/11/robin-hood-hashing/) +/// 3. Emmanuel Goossaert. ["Robin Hood hashing: backward shift +/// deletion"](http://codecapsule.com/2013/11/17/robin-hood-hashing-backward-shift-deletion/) +/// +/// # Examples +/// +/// ``` +/// use std::collections::HashMap; +/// +/// // type inference lets us omit an explicit type signature (which +/// // would be `HashMap<&str, &str>` in this example). +/// let mut book_reviews = HashMap::new(); +/// +/// // review some books. +/// book_reviews.insert("Adventures of Huckleberry Finn", "My favorite book."); +/// book_reviews.insert("Grimms' Fairy Tales", "Masterpiece."); +/// book_reviews.insert("Pride and Prejudice", "Very enjoyable."); +/// book_reviews.insert("The Adventures of Sherlock Holmes", "Eye lyked it alot."); +/// +/// // check for a specific one. +/// if !book_reviews.contains_key("Les Misérables") { +/// println!("We've got {} reviews, but Les Misérables ain't one.", +/// book_reviews.len()); +/// } +/// +/// // oops, this review has a lot of spelling mistakes, let's delete it. +/// book_reviews.remove("The Adventures of Sherlock Holmes"); +/// +/// // look up the values associated with some keys. +/// let to_find = ["Pride and Prejudice", "Alice's Adventure in Wonderland"]; +/// for book in &to_find { +/// match book_reviews.get(book) { +/// Some(review) => println!("{}: {}", book, review), +/// None => println!("{} is unreviewed.", book) +/// } +/// } +/// +/// // iterate over everything. +/// for (book, review) in &book_reviews { +/// println!("{}: \"{}\"", book, review); +/// } +/// ``` +/// +/// The easiest way to use `HashMap` with a custom type as key is to derive `Eq` and `Hash`. +/// We must also derive `PartialEq`. +/// +/// ``` +/// use std::collections::HashMap; +/// +/// #[derive(Hash, Eq, PartialEq, Debug)] +/// struct Viking { +/// name: String, +/// country: String, +/// } +/// +/// impl Viking { +/// /// Create a new Viking. +/// fn new(name: &str, country: &str) -> Viking { +/// Viking { name: name.to_string(), country: country.to_string() } +/// } +/// } +/// +/// // Use a HashMap to store the vikings' health points. +/// let mut vikings = HashMap::new(); +/// +/// vikings.insert(Viking::new("Einar", "Norway"), 25); +/// vikings.insert(Viking::new("Olaf", "Denmark"), 24); +/// vikings.insert(Viking::new("Harald", "Iceland"), 12); +/// +/// // Use derived implementation to print the status of the vikings. +/// for (viking, health) in &vikings { +/// println!("{:?} has {} hp", viking, health); +/// } +/// ``` +#[derive(Clone)] +#[stable(feature = "rust1", since = "1.0.0")] +pub struct HashMap { + // All hashes are keyed on these values, to prevent hash collision attacks. + hash_state: S, + + table: RawTable, + + resize_policy: DefaultResizePolicy, +} + +/// Search for a pre-hashed key. +fn search_hashed(table: M, + hash: SafeHash, + mut is_match: F) + -> SearchResult where + M: Deref>, + F: FnMut(&K) -> bool, +{ + // This is the only function where capacity can be zero. To avoid + // undefined behaviour when Bucket::new gets the raw bucket in this + // case, immediately return the appropriate search result. + if table.capacity() == 0 { + return TableRef(table); + } + + let size = table.size(); + let mut probe = Bucket::new(table, hash); + let ib = probe.index(); + + while probe.index() != ib + size { + let full = match probe.peek() { + Empty(b) => return TableRef(b.into_table()), // hit an empty bucket + Full(b) => b + }; + + if full.distance() + ib < full.index() { + // We can finish the search early if we hit any bucket + // with a lower distance to initial bucket than we've probed. + return TableRef(full.into_table()); + } + + // If the hash doesn't match, it can't be this one.. + if hash == full.hash() { + // If the key doesn't match, it can't be this one.. + if is_match(full.read().0) { + return FoundExisting(full); + } + } + + probe = full.next(); + } + + TableRef(probe.into_table()) +} + +fn pop_internal(starting_bucket: FullBucketMut) -> (K, V) { + let (empty, retkey, retval) = starting_bucket.take(); + let mut gap = match empty.gap_peek() { + Some(b) => b, + None => return (retkey, retval) + }; + + while gap.full().distance() != 0 { + gap = match gap.shift() { + Some(b) => b, + None => break + }; + } + + // Now we've done all our shifting. Return the value we grabbed earlier. + (retkey, retval) +} + +/// Perform robin hood bucket stealing at the given `bucket`. You must +/// also pass the position of that bucket's initial bucket so we don't have +/// to recalculate it. +/// +/// `hash`, `k`, and `v` are the elements to "robin hood" into the hashtable. +fn robin_hood<'a, K: 'a, V: 'a>(mut bucket: FullBucketMut<'a, K, V>, + mut ib: usize, + mut hash: SafeHash, + mut k: K, + mut v: V) + -> &'a mut V { + let starting_index = bucket.index(); + let size = { + let table = bucket.table(); // FIXME "lifetime too short". + table.size() + }; + // There can be at most `size - dib` buckets to displace, because + // in the worst case, there are `size` elements and we already are + // `distance` buckets away from the initial one. + let idx_end = starting_index + size - bucket.distance(); + + loop { + let (old_hash, old_key, old_val) = bucket.replace(hash, k, v); + loop { + let probe = bucket.next(); + assert!(probe.index() != idx_end); + + let full_bucket = match probe.peek() { + Empty(bucket) => { + // Found a hole! + let b = bucket.put(old_hash, old_key, old_val); + // Now that it's stolen, just read the value's pointer + // right out of the table! + return Bucket::at_index(b.into_table(), starting_index) + .peek() + .expect_full() + .into_mut_refs() + .1; + }, + Full(bucket) => bucket + }; + + let probe_ib = full_bucket.index() - full_bucket.distance(); + + bucket = full_bucket; + + // Robin hood! Steal the spot. + if ib < probe_ib { + ib = probe_ib; + hash = old_hash; + k = old_key; + v = old_val; + break; + } + } + } +} + +/// A result that works like Option> but preserves +/// the reference that grants us access to the table in any case. +enum SearchResult { + // This is an entry that holds the given key: + FoundExisting(FullBucket), + + // There was no such entry. The reference is given back: + TableRef(M) +} + +impl SearchResult { + fn into_option(self) -> Option> { + match self { + FoundExisting(bucket) => Some(bucket), + TableRef(_) => None + } + } +} + +impl HashMap + where K: Eq + Hash, S: HashState +{ + fn make_hash(&self, x: &X) -> SafeHash where X: Hash { + table::make_hash(&self.hash_state, x) + } + + /// Search for a key, yielding the index if it's found in the hashtable. + /// If you already have the hash for the key lying around, use + /// search_hashed. + fn search<'a, Q: ?Sized>(&'a self, q: &Q) -> Option> + where K: Borrow, Q: Eq + Hash + { + let hash = self.make_hash(q); + search_hashed(&self.table, hash, |k| q.eq(k.borrow())) + .into_option() + } + + fn search_mut<'a, Q: ?Sized>(&'a mut self, q: &Q) -> Option> + where K: Borrow, Q: Eq + Hash + { + let hash = self.make_hash(q); + search_hashed(&mut self.table, hash, |k| q.eq(k.borrow())) + .into_option() + } + + // The caller should ensure that invariants by Robin Hood Hashing hold. + fn insert_hashed_ordered(&mut self, hash: SafeHash, k: K, v: V) { + let cap = self.table.capacity(); + let mut buckets = Bucket::new(&mut self.table, hash); + let ib = buckets.index(); + + while buckets.index() != ib + cap { + // We don't need to compare hashes for value swap. + // Not even DIBs for Robin Hood. + buckets = match buckets.peek() { + Empty(empty) => { + empty.put(hash, k, v); + return; + } + Full(b) => b.into_bucket() + }; + buckets.next(); + } + panic!("Internal HashMap error: Out of space."); + } +} + +impl HashMap { + /// Creates an empty HashMap. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// let mut map: HashMap<&str, isize> = HashMap::new(); + /// ``` + #[inline] + #[stable(feature = "rust1", since = "1.0.0")] + pub fn new() -> HashMap { + Default::default() + } + + /// Creates an empty hash map with the given initial capacity. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// let mut map: HashMap<&str, isize> = HashMap::with_capacity(10); + /// ``` + #[inline] + #[stable(feature = "rust1", since = "1.0.0")] + pub fn with_capacity(capacity: usize) -> HashMap { + HashMap::with_capacity_and_hash_state(capacity, Default::default()) + } +} + +impl HashMap + where K: Eq + Hash, S: HashState +{ + /// Creates an empty hashmap which will use the given hasher to hash keys. + /// + /// The created map has the default initial capacity. + /// + /// # Examples + /// + /// ``` + /// # #![feature(std_misc)] + /// use std::collections::HashMap; + /// use std::collections::hash_map::RandomState; + /// + /// let s = RandomState::new(); + /// let mut map = HashMap::with_hash_state(s); + /// map.insert(1, 2); + /// ``` + #[inline] + #[unstable(feature = "std_misc", reason = "hasher stuff is unclear")] + pub fn with_hash_state(hash_state: S) -> HashMap { + HashMap { + hash_state: hash_state, + resize_policy: DefaultResizePolicy::new(), + table: RawTable::new(0), + } + } + + /// Creates an empty HashMap with space for at least `capacity` + /// elements, using `hasher` to hash the keys. + /// + /// Warning: `hasher` is normally randomly generated, and + /// is designed to allow HashMaps to be resistant to attacks that + /// cause many collisions and very poor performance. Setting it + /// manually using this function can expose a DoS attack vector. + /// + /// # Examples + /// + /// ``` + /// # #![feature(std_misc)] + /// use std::collections::HashMap; + /// use std::collections::hash_map::RandomState; + /// + /// let s = RandomState::new(); + /// let mut map = HashMap::with_capacity_and_hash_state(10, s); + /// map.insert(1, 2); + /// ``` + #[inline] + #[unstable(feature = "std_misc", reason = "hasher stuff is unclear")] + pub fn with_capacity_and_hash_state(capacity: usize, hash_state: S) + -> HashMap { + let resize_policy = DefaultResizePolicy::new(); + let min_cap = max(INITIAL_CAPACITY, resize_policy.min_capacity(capacity)); + let internal_cap = min_cap.checked_next_power_of_two().expect("capacity overflow"); + assert!(internal_cap >= capacity, "capacity overflow"); + HashMap { + hash_state: hash_state, + resize_policy: resize_policy, + table: RawTable::new(internal_cap), + } + } + + /// Returns the number of elements the map can hold without reallocating. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// let map: HashMap = HashMap::with_capacity(100); + /// assert!(map.capacity() >= 100); + /// ``` + #[inline] + #[stable(feature = "rust1", since = "1.0.0")] + pub fn capacity(&self) -> usize { + self.resize_policy.usable_capacity(self.table.capacity()) + } + + /// Reserves capacity for at least `additional` more elements to be inserted + /// in the `HashMap`. The collection may reserve more space to avoid + /// frequent reallocations. + /// + /// # Panics + /// + /// Panics if the new allocation size overflows `usize`. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// let mut map: HashMap<&str, isize> = HashMap::new(); + /// map.reserve(10); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn reserve(&mut self, additional: usize) { + let new_size = self.len().checked_add(additional).expect("capacity overflow"); + let min_cap = self.resize_policy.min_capacity(new_size); + + // An invalid value shouldn't make us run out of space. This includes + // an overflow check. + assert!(new_size <= min_cap); + + if self.table.capacity() < min_cap { + let new_capacity = max(min_cap.next_power_of_two(), INITIAL_CAPACITY); + self.resize(new_capacity); + } + } + + /// Resizes the internal vectors to a new capacity. It's your responsibility to: + /// 1) Make sure the new capacity is enough for all the elements, accounting + /// for the load factor. + /// 2) Ensure new_capacity is a power of two or zero. + fn resize(&mut self, new_capacity: usize) { + assert!(self.table.size() <= new_capacity); + assert!(new_capacity.is_power_of_two() || new_capacity == 0); + + let mut old_table = replace(&mut self.table, RawTable::new(new_capacity)); + let old_size = old_table.size(); + + if old_table.capacity() == 0 || old_table.size() == 0 { + return; + } + + // Grow the table. + // Specialization of the other branch. + let mut bucket = Bucket::first(&mut old_table); + + // "So a few of the first shall be last: for many be called, + // but few chosen." + // + // We'll most likely encounter a few buckets at the beginning that + // have their initial buckets near the end of the table. They were + // placed at the beginning as the probe wrapped around the table + // during insertion. We must skip forward to a bucket that won't + // get reinserted too early and won't unfairly steal others spot. + // This eliminates the need for robin hood. + loop { + bucket = match bucket.peek() { + Full(full) => { + if full.distance() == 0 { + // This bucket occupies its ideal spot. + // It indicates the start of another "cluster". + bucket = full.into_bucket(); + break; + } + // Leaving this bucket in the last cluster for later. + full.into_bucket() + } + Empty(b) => { + // Encountered a hole between clusters. + b.into_bucket() + } + }; + bucket.next(); + } + + // This is how the buckets might be laid out in memory: + // ($ marks an initialized bucket) + // ________________ + // |$$$_$$$$$$_$$$$$| + // + // But we've skipped the entire initial cluster of buckets + // and will continue iteration in this order: + // ________________ + // |$$$$$$_$$$$$ + // ^ wrap around once end is reached + // ________________ + // $$$_____________| + // ^ exit once table.size == 0 + loop { + bucket = match bucket.peek() { + Full(bucket) => { + let h = bucket.hash(); + let (b, k, v) = bucket.take(); + self.insert_hashed_ordered(h, k, v); + { + let t = b.table(); // FIXME "lifetime too short". + if t.size() == 0 { break } + }; + b.into_bucket() + } + Empty(b) => b.into_bucket() + }; + bucket.next(); + } + + assert_eq!(self.table.size(), old_size); + } + + /// Shrinks the capacity of the map as much as possible. It will drop + /// down as much as possible while maintaining the internal rules + /// and possibly leaving some space in accordance with the resize policy. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map: HashMap = HashMap::with_capacity(100); + /// map.insert(1, 2); + /// map.insert(3, 4); + /// assert!(map.capacity() >= 100); + /// map.shrink_to_fit(); + /// assert!(map.capacity() >= 2); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn shrink_to_fit(&mut self) { + let min_capacity = self.resize_policy.min_capacity(self.len()); + let min_capacity = max(min_capacity.next_power_of_two(), INITIAL_CAPACITY); + + // An invalid value shouldn't make us run out of space. + debug_assert!(self.len() <= min_capacity); + + if self.table.capacity() != min_capacity { + let old_table = replace(&mut self.table, RawTable::new(min_capacity)); + let old_size = old_table.size(); + + // Shrink the table. Naive algorithm for resizing: + for (h, k, v) in old_table.into_iter() { + self.insert_hashed_nocheck(h, k, v); + } + + debug_assert_eq!(self.table.size(), old_size); + } + } + + /// Insert a pre-hashed key-value pair, without first checking + /// that there's enough room in the buckets. Returns a reference to the + /// newly insert value. + /// + /// If the key already exists, the hashtable will be returned untouched + /// and a reference to the existing element will be returned. + fn insert_hashed_nocheck(&mut self, hash: SafeHash, k: K, v: V) -> &mut V { + self.insert_or_replace_with(hash, k, v, |_, _, _| ()) + } + + fn insert_or_replace_with<'a, F>(&'a mut self, + hash: SafeHash, + k: K, + v: V, + mut found_existing: F) + -> &'a mut V where + F: FnMut(&mut K, &mut V, V), + { + // Worst case, we'll find one empty bucket among `size + 1` buckets. + let size = self.table.size(); + let mut probe = Bucket::new(&mut self.table, hash); + let ib = probe.index(); + + loop { + let mut bucket = match probe.peek() { + Empty(bucket) => { + // Found a hole! + return bucket.put(hash, k, v).into_mut_refs().1; + } + Full(bucket) => bucket + }; + + // hash matches? + if bucket.hash() == hash { + // key matches? + if k == *bucket.read_mut().0 { + let (bucket_k, bucket_v) = bucket.into_mut_refs(); + debug_assert!(k == *bucket_k); + // Key already exists. Get its reference. + found_existing(bucket_k, bucket_v, v); + return bucket_v; + } + } + + let robin_ib = bucket.index() as isize - bucket.distance() as isize; + + if (ib as isize) < robin_ib { + // Found a luckier bucket than me. Better steal his spot. + return robin_hood(bucket, robin_ib as usize, hash, k, v); + } + + probe = bucket.next(); + assert!(probe.index() != ib + size + 1); + } + } + + /// An iterator visiting all keys in arbitrary order. + /// Iterator element type is `&'a K`. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert("a", 1); + /// map.insert("b", 2); + /// map.insert("c", 3); + /// + /// for key in map.keys() { + /// println!("{}", key); + /// } + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn keys<'a>(&'a self) -> Keys<'a, K, V> { + fn first((a, _): (A, B)) -> A { a } + let first: fn((&'a K,&'a V)) -> &'a K = first; // coerce to fn ptr + + Keys { inner: self.iter().map(first) } + } + + /// An iterator visiting all values in arbitrary order. + /// Iterator element type is `&'a V`. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert("a", 1); + /// map.insert("b", 2); + /// map.insert("c", 3); + /// + /// for val in map.values() { + /// println!("{}", val); + /// } + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn values<'a>(&'a self) -> Values<'a, K, V> { + fn second((_, b): (A, B)) -> B { b } + let second: fn((&'a K,&'a V)) -> &'a V = second; // coerce to fn ptr + + Values { inner: self.iter().map(second) } + } + + /// An iterator visiting all key-value pairs in arbitrary order. + /// Iterator element type is `(&'a K, &'a V)`. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert("a", 1); + /// map.insert("b", 2); + /// map.insert("c", 3); + /// + /// for (key, val) in map.iter() { + /// println!("key: {} val: {}", key, val); + /// } + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn iter(&self) -> Iter { + Iter { inner: self.table.iter() } + } + + /// An iterator visiting all key-value pairs in arbitrary order, + /// with mutable references to the values. + /// Iterator element type is `(&'a K, &'a mut V)`. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert("a", 1); + /// map.insert("b", 2); + /// map.insert("c", 3); + /// + /// // Update all values + /// for (_, val) in map.iter_mut() { + /// *val *= 2; + /// } + /// + /// for (key, val) in map.iter() { + /// println!("key: {} val: {}", key, val); + /// } + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn iter_mut(&mut self) -> IterMut { + IterMut { inner: self.table.iter_mut() } + } + + /// Gets the given key's corresponding entry in the map for in-place manipulation. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut letters = HashMap::new(); + /// + /// for ch in "a short treatise on fungi".chars() { + /// let counter = letters.entry(ch).or_insert(0); + /// *counter += 1; + /// } + /// + /// assert_eq!(letters[&'s'], 2); + /// assert_eq!(letters[&'t'], 3); + /// assert_eq!(letters[&'u'], 1); + /// assert_eq!(letters.get(&'y'), None); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn entry(&mut self, key: K) -> Entry { + // Gotta resize now. + self.reserve(1); + + let hash = self.make_hash(&key); + search_entry_hashed(&mut self.table, hash, key) + } + + /// Returns the number of elements in the map. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut a = HashMap::new(); + /// assert_eq!(a.len(), 0); + /// a.insert(1, "a"); + /// assert_eq!(a.len(), 1); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn len(&self) -> usize { self.table.size() } + + /// Returns true if the map contains no elements. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut a = HashMap::new(); + /// assert!(a.is_empty()); + /// a.insert(1, "a"); + /// assert!(!a.is_empty()); + /// ``` + #[inline] + #[stable(feature = "rust1", since = "1.0.0")] + pub fn is_empty(&self) -> bool { self.len() == 0 } + + /// Clears the map, returning all key-value pairs as an iterator. Keeps the + /// allocated memory for reuse. + /// + /// # Examples + /// + /// ``` + /// # #![feature(std_misc)] + /// use std::collections::HashMap; + /// + /// let mut a = HashMap::new(); + /// a.insert(1, "a"); + /// a.insert(2, "b"); + /// + /// for (k, v) in a.drain().take(1) { + /// assert!(k == 1 || k == 2); + /// assert!(v == "a" || v == "b"); + /// } + /// + /// assert!(a.is_empty()); + /// ``` + #[inline] + #[unstable(feature = "std_misc", + reason = "matches collection reform specification, waiting for dust to settle")] + pub fn drain(&mut self) -> Drain { + fn last_two((_, b, c): (A, B, C)) -> (B, C) { (b, c) } + let last_two: fn((SafeHash, K, V)) -> (K, V) = last_two; // coerce to fn pointer + + Drain { + inner: self.table.drain().map(last_two), + } + } + + /// Clears the map, removing all key-value pairs. Keeps the allocated memory + /// for reuse. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut a = HashMap::new(); + /// a.insert(1, "a"); + /// a.clear(); + /// assert!(a.is_empty()); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + #[inline] + pub fn clear(&mut self) { + self.drain(); + } + + /// Returns a reference to the value corresponding to the key. + /// + /// The key may be any borrowed form of the map's key type, but + /// `Hash` and `Eq` on the borrowed form *must* match those for + /// the key type. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert(1, "a"); + /// assert_eq!(map.get(&1), Some(&"a")); + /// assert_eq!(map.get(&2), None); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn get(&self, k: &Q) -> Option<&V> + where K: Borrow, Q: Hash + Eq + { + self.search(k).map(|bucket| bucket.into_refs().1) + } + + /// Returns true if the map contains a value for the specified key. + /// + /// The key may be any borrowed form of the map's key type, but + /// `Hash` and `Eq` on the borrowed form *must* match those for + /// the key type. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert(1, "a"); + /// assert_eq!(map.contains_key(&1), true); + /// assert_eq!(map.contains_key(&2), false); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn contains_key(&self, k: &Q) -> bool + where K: Borrow, Q: Hash + Eq + { + self.search(k).is_some() + } + + /// Returns a mutable reference to the value corresponding to the key. + /// + /// The key may be any borrowed form of the map's key type, but + /// `Hash` and `Eq` on the borrowed form *must* match those for + /// the key type. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert(1, "a"); + /// if let Some(x) = map.get_mut(&1) { + /// *x = "b"; + /// } + /// assert_eq!(map[&1], "b"); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn get_mut(&mut self, k: &Q) -> Option<&mut V> + where K: Borrow, Q: Hash + Eq + { + self.search_mut(k).map(|bucket| bucket.into_mut_refs().1) + } + + /// Inserts a key-value pair into the map. If the key already had a value + /// present in the map, that value is returned. Otherwise, `None` is returned. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// assert_eq!(map.insert(37, "a"), None); + /// assert_eq!(map.is_empty(), false); + /// + /// map.insert(37, "b"); + /// assert_eq!(map.insert(37, "c"), Some("b")); + /// assert_eq!(map[&37], "c"); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn insert(&mut self, k: K, v: V) -> Option { + let hash = self.make_hash(&k); + self.reserve(1); + + let mut retval = None; + self.insert_or_replace_with(hash, k, v, |_, val_ref, val| { + retval = Some(replace(val_ref, val)); + }); + retval + } + + /// Removes a key from the map, returning the value at the key if the key + /// was previously in the map. + /// + /// The key may be any borrowed form of the map's key type, but + /// `Hash` and `Eq` on the borrowed form *must* match those for + /// the key type. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert(1, "a"); + /// assert_eq!(map.remove(&1), Some("a")); + /// assert_eq!(map.remove(&1), None); + /// ``` + #[stable(feature = "rust1", since = "1.0.0")] + pub fn remove(&mut self, k: &Q) -> Option + where K: Borrow, Q: Hash + Eq + { + if self.table.size() == 0 { + return None + } + + self.search_mut(k).map(|bucket| pop_internal(bucket).1) + } +} + +fn search_entry_hashed<'a, K: Eq, V>(table: &'a mut RawTable, hash: SafeHash, k: K) + -> Entry<'a, K, V> +{ + // Worst case, we'll find one empty bucket among `size + 1` buckets. + let size = table.size(); + let mut probe = Bucket::new(table, hash); + let ib = probe.index(); + + loop { + let bucket = match probe.peek() { + Empty(bucket) => { + // Found a hole! + return Vacant(VacantEntry { + hash: hash, + key: k, + elem: NoElem(bucket), + }); + }, + Full(bucket) => bucket + }; + + // hash matches? + if bucket.hash() == hash { + // key matches? + if k == *bucket.read().0 { + return Occupied(OccupiedEntry{ + elem: bucket, + }); + } + } + + let robin_ib = bucket.index() as isize - bucket.distance() as isize; + + if (ib as isize) < robin_ib { + // Found a luckier bucket than me. Better steal his spot. + return Vacant(VacantEntry { + hash: hash, + key: k, + elem: NeqElem(bucket, robin_ib as usize), + }); + } + + probe = bucket.next(); + assert!(probe.index() != ib + size + 1); + } +} + +impl PartialEq for HashMap + where K: Eq + Hash, V: PartialEq, S: HashState +{ + fn eq(&self, other: &HashMap) -> bool { + if self.len() != other.len() { return false; } + + self.iter().all(|(key, value)| + other.get(key).map_or(false, |v| *value == *v) + ) + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl Eq for HashMap + where K: Eq + Hash, V: Eq, S: HashState +{} + +#[stable(feature = "rust1", since = "1.0.0")] +impl Debug for HashMap + where K: Eq + Hash + Debug, V: Debug, S: HashState +{ + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_map().entries(self.iter()).finish() + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl Default for HashMap + where K: Eq + Hash, + S: HashState + Default, +{ + fn default() -> HashMap { + HashMap::with_hash_state(Default::default()) + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, Q: ?Sized, V, S> Index<&'a Q> for HashMap + where K: Eq + Hash + Borrow, + Q: Eq + Hash, + S: HashState, +{ + type Output = V; + + #[inline] + fn index(&self, index: &Q) -> &V { + self.get(index).expect("no entry found for key") + } +} + +/// HashMap iterator. +#[stable(feature = "rust1", since = "1.0.0")] +pub struct Iter<'a, K: 'a, V: 'a> { + inner: table::Iter<'a, K, V> +} + +// FIXME(#19839) Remove in favor of `#[derive(Clone)]` +impl<'a, K, V> Clone for Iter<'a, K, V> { + fn clone(&self) -> Iter<'a, K, V> { + Iter { + inner: self.inner.clone() + } + } +} + +/// HashMap mutable values iterator. +#[stable(feature = "rust1", since = "1.0.0")] +pub struct IterMut<'a, K: 'a, V: 'a> { + inner: table::IterMut<'a, K, V> +} + +/// HashMap move iterator. +#[stable(feature = "rust1", since = "1.0.0")] +pub struct IntoIter { + inner: iter::Map, fn((SafeHash, K, V)) -> (K, V)> +} + +/// HashMap keys iterator. +#[stable(feature = "rust1", since = "1.0.0")] +pub struct Keys<'a, K: 'a, V: 'a> { + inner: Map, fn((&'a K, &'a V)) -> &'a K> +} + +// FIXME(#19839) Remove in favor of `#[derive(Clone)]` +impl<'a, K, V> Clone for Keys<'a, K, V> { + fn clone(&self) -> Keys<'a, K, V> { + Keys { + inner: self.inner.clone() + } + } +} + +/// HashMap values iterator. +#[stable(feature = "rust1", since = "1.0.0")] +pub struct Values<'a, K: 'a, V: 'a> { + inner: Map, fn((&'a K, &'a V)) -> &'a V> +} + +// FIXME(#19839) Remove in favor of `#[derive(Clone)]` +impl<'a, K, V> Clone for Values<'a, K, V> { + fn clone(&self) -> Values<'a, K, V> { + Values { + inner: self.inner.clone() + } + } +} + +/// HashMap drain iterator. +#[unstable(feature = "std_misc", + reason = "matches collection reform specification, waiting for dust to settle")] +pub struct Drain<'a, K: 'a, V: 'a> { + inner: iter::Map, fn((SafeHash, K, V)) -> (K, V)> +} + +/// A view into a single occupied location in a HashMap. +#[stable(feature = "rust1", since = "1.0.0")] +pub struct OccupiedEntry<'a, K: 'a, V: 'a> { + elem: FullBucket>, +} + +/// A view into a single empty location in a HashMap. +#[stable(feature = "rust1", since = "1.0.0")] +pub struct VacantEntry<'a, K: 'a, V: 'a> { + hash: SafeHash, + key: K, + elem: VacantEntryState>, +} + +/// A view into a single location in a map, which may be vacant or occupied. +#[stable(feature = "rust1", since = "1.0.0")] +pub enum Entry<'a, K: 'a, V: 'a> { + /// An occupied Entry. + #[stable(feature = "rust1", since = "1.0.0")] + Occupied(OccupiedEntry<'a, K, V>), + + /// A vacant Entry. + #[stable(feature = "rust1", since = "1.0.0")] + Vacant(VacantEntry<'a, K, V>), +} + +/// Possible states of a VacantEntry. +enum VacantEntryState { + /// The index is occupied, but the key to insert has precedence, + /// and will kick the current one out on insertion. + NeqElem(FullBucket, usize), + /// The index is genuinely vacant. + NoElem(EmptyBucket), +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V, S> IntoIterator for &'a HashMap + where K: Eq + Hash, S: HashState +{ + type Item = (&'a K, &'a V); + type IntoIter = Iter<'a, K, V>; + + fn into_iter(self) -> Iter<'a, K, V> { + self.iter() + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V, S> IntoIterator for &'a mut HashMap + where K: Eq + Hash, S: HashState +{ + type Item = (&'a K, &'a mut V); + type IntoIter = IterMut<'a, K, V>; + + fn into_iter(mut self) -> IterMut<'a, K, V> { + self.iter_mut() + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl IntoIterator for HashMap + where K: Eq + Hash, S: HashState +{ + type Item = (K, V); + type IntoIter = IntoIter; + + /// Creates a consuming iterator, that is, one that moves each key-value + /// pair out of the map in arbitrary order. The map cannot be used after + /// calling this. + /// + /// # Examples + /// + /// ``` + /// use std::collections::HashMap; + /// + /// let mut map = HashMap::new(); + /// map.insert("a", 1); + /// map.insert("b", 2); + /// map.insert("c", 3); + /// + /// // Not possible with .iter() + /// let vec: Vec<(&str, isize)> = map.into_iter().collect(); + /// ``` + fn into_iter(self) -> IntoIter { + fn last_two((_, b, c): (A, B, C)) -> (B, C) { (b, c) } + let last_two: fn((SafeHash, K, V)) -> (K, V) = last_two; + + IntoIter { + inner: self.table.into_iter().map(last_two) + } + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> Iterator for Iter<'a, K, V> { + type Item = (&'a K, &'a V); + + #[inline] fn next(&mut self) -> Option<(&'a K, &'a V)> { self.inner.next() } + #[inline] fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } +} +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> ExactSizeIterator for Iter<'a, K, V> { + #[inline] fn len(&self) -> usize { self.inner.len() } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> Iterator for IterMut<'a, K, V> { + type Item = (&'a K, &'a mut V); + + #[inline] fn next(&mut self) -> Option<(&'a K, &'a mut V)> { self.inner.next() } + #[inline] fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } +} +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> ExactSizeIterator for IterMut<'a, K, V> { + #[inline] fn len(&self) -> usize { self.inner.len() } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl Iterator for IntoIter { + type Item = (K, V); + + #[inline] fn next(&mut self) -> Option<(K, V)> { self.inner.next() } + #[inline] fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } +} +#[stable(feature = "rust1", since = "1.0.0")] +impl ExactSizeIterator for IntoIter { + #[inline] fn len(&self) -> usize { self.inner.len() } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> Iterator for Keys<'a, K, V> { + type Item = &'a K; + + #[inline] fn next(&mut self) -> Option<(&'a K)> { self.inner.next() } + #[inline] fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } +} +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> ExactSizeIterator for Keys<'a, K, V> { + #[inline] fn len(&self) -> usize { self.inner.len() } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> Iterator for Values<'a, K, V> { + type Item = &'a V; + + #[inline] fn next(&mut self) -> Option<(&'a V)> { self.inner.next() } + #[inline] fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } +} +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> ExactSizeIterator for Values<'a, K, V> { + #[inline] fn len(&self) -> usize { self.inner.len() } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> Iterator for Drain<'a, K, V> { + type Item = (K, V); + + #[inline] fn next(&mut self) -> Option<(K, V)> { self.inner.next() } + #[inline] fn size_hint(&self) -> (usize, Option) { self.inner.size_hint() } +} +#[stable(feature = "rust1", since = "1.0.0")] +impl<'a, K, V> ExactSizeIterator for Drain<'a, K, V> { + #[inline] fn len(&self) -> usize { self.inner.len() } +} + +impl<'a, K, V> Entry<'a, K, V> { + #[unstable(feature = "std_misc", + reason = "will soon be replaced by or_insert")] + #[deprecated(since = "1.0", + reason = "replaced with more ergonomic `or_insert` and `or_insert_with`")] + /// Returns a mutable reference to the entry if occupied, or the VacantEntry if vacant + pub fn get(self) -> Result<&'a mut V, VacantEntry<'a, K, V>> { + match self { + Occupied(entry) => Ok(entry.into_mut()), + Vacant(entry) => Err(entry), + } + } + + #[stable(feature = "rust1", since = "1.0.0")] + /// Ensures a value is in the entry by inserting the default if empty, and returns + /// a mutable reference to the value in the entry. + pub fn or_insert(self, default: V) -> &'a mut V { + match self { + Occupied(entry) => entry.into_mut(), + Vacant(entry) => entry.insert(default), + } + } + + #[stable(feature = "rust1", since = "1.0.0")] + /// Ensures a value is in the entry by inserting the result of the default function if empty, + /// and returns a mutable reference to the value in the entry. + pub fn or_insert_with V>(self, default: F) -> &'a mut V { + match self { + Occupied(entry) => entry.into_mut(), + Vacant(entry) => entry.insert(default()), + } + } +} + +impl<'a, K, V> OccupiedEntry<'a, K, V> { + /// Gets a reference to the value in the entry. + #[stable(feature = "rust1", since = "1.0.0")] + pub fn get(&self) -> &V { + self.elem.read().1 + } + + /// Gets a mutable reference to the value in the entry. + #[stable(feature = "rust1", since = "1.0.0")] + pub fn get_mut(&mut self) -> &mut V { + self.elem.read_mut().1 + } + + /// Converts the OccupiedEntry into a mutable reference to the value in the entry + /// with a lifetime bound to the map itself + #[stable(feature = "rust1", since = "1.0.0")] + pub fn into_mut(self) -> &'a mut V { + self.elem.into_mut_refs().1 + } + + /// Sets the value of the entry, and returns the entry's old value + #[stable(feature = "rust1", since = "1.0.0")] + pub fn insert(&mut self, mut value: V) -> V { + let old_value = self.get_mut(); + mem::swap(&mut value, old_value); + value + } + + /// Takes the value out of the entry, and returns it + #[stable(feature = "rust1", since = "1.0.0")] + pub fn remove(self) -> V { + pop_internal(self.elem).1 + } +} + +impl<'a, K: 'a, V: 'a> VacantEntry<'a, K, V> { + /// Sets the value of the entry with the VacantEntry's key, + /// and returns a mutable reference to it + #[stable(feature = "rust1", since = "1.0.0")] + pub fn insert(self, value: V) -> &'a mut V { + match self.elem { + NeqElem(bucket, ib) => { + robin_hood(bucket, ib, self.hash, self.key, value) + } + NoElem(bucket) => { + bucket.put(self.hash, self.key, value).into_mut_refs().1 + } + } + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl FromIterator<(K, V)> for HashMap + where K: Eq + Hash, S: HashState + Default +{ + fn from_iter>(iterable: T) -> HashMap { + let iter = iterable.into_iter(); + let lower = iter.size_hint().0; + let mut map = HashMap::with_capacity_and_hash_state(lower, + Default::default()); + map.extend(iter); + map + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl Extend<(K, V)> for HashMap + where K: Eq + Hash, S: HashState +{ + fn extend>(&mut self, iter: T) { + for (k, v) in iter { + self.insert(k, v); + } + } +} + + +/// `RandomState` is the default state for `HashMap` types. +/// +/// A particular instance `RandomState` will create the same instances of +/// `Hasher`, but the hashers created by two different `RandomState` +/// instances are unlikely to produce the same result for the same values. +#[derive(Clone)] +#[unstable(feature = "std_misc", + reason = "hashing an hash maps may be altered")] +pub struct RandomState { + k0: u64, + k1: u64, +} + +#[unstable(feature = "std_misc", + reason = "hashing an hash maps may be altered")] +impl RandomState { + /// Constructs a new `RandomState` that is initialized with random keys. + #[inline] + #[allow(deprecated)] + pub fn new() -> RandomState { + let mut r = rand::thread_rng(); + RandomState { k0: r.gen(), k1: r.gen() } + } +} + +#[unstable(feature = "std_misc", + reason = "hashing an hash maps may be altered")] +impl HashState for RandomState { + type Hasher = SipHasher; + #[inline] + fn hasher(&self) -> SipHasher { + SipHasher::new_with_keys(self.k0, self.k1) + } +} + +#[stable(feature = "rust1", since = "1.0.0")] +impl Default for RandomState { + #[inline] + fn default() -> RandomState { + RandomState::new() + } +} + +#[cfg(test)] +mod test_map { + use prelude::v1::*; + + use super::HashMap; + use super::Entry::{Occupied, Vacant}; + use iter::{range_inclusive, repeat}; + use cell::RefCell; + use rand::{thread_rng, Rng}; + + #[test] + fn test_create_capacity_zero() { + let mut m = HashMap::with_capacity(0); + + assert!(m.insert(1, 1).is_none()); + + assert!(m.contains_key(&1)); + assert!(!m.contains_key(&0)); + } + + #[test] + fn test_insert() { + let mut m = HashMap::new(); + assert_eq!(m.len(), 0); + assert!(m.insert(1, 2).is_none()); + assert_eq!(m.len(), 1); + assert!(m.insert(2, 4).is_none()); + assert_eq!(m.len(), 2); + assert_eq!(*m.get(&1).unwrap(), 2); + assert_eq!(*m.get(&2).unwrap(), 4); + } + + thread_local! { static DROP_VECTOR: RefCell> = RefCell::new(Vec::new()) } + + #[derive(Hash, PartialEq, Eq)] + struct Dropable { + k: usize + } + + impl Dropable { + fn new(k: usize) -> Dropable { + DROP_VECTOR.with(|slot| { + slot.borrow_mut()[k] += 1; + }); + + Dropable { k: k } + } + } + + impl Drop for Dropable { + fn drop(&mut self) { + DROP_VECTOR.with(|slot| { + slot.borrow_mut()[self.k] -= 1; + }); + } + } + + impl Clone for Dropable { + fn clone(&self) -> Dropable { + Dropable::new(self.k) + } + } + + #[test] + fn test_drops() { + DROP_VECTOR.with(|slot| { + *slot.borrow_mut() = repeat(0).take(200).collect(); + }); + + { + let mut m = HashMap::new(); + + DROP_VECTOR.with(|v| { + for i in 0..200 { + assert_eq!(v.borrow()[i], 0); + } + }); + + for i in 0..100 { + let d1 = Dropable::new(i); + let d2 = Dropable::new(i+100); + m.insert(d1, d2); + } + + DROP_VECTOR.with(|v| { + for i in 0..200 { + assert_eq!(v.borrow()[i], 1); + } + }); + + for i in 0..50 { + let k = Dropable::new(i); + let v = m.remove(&k); + + assert!(v.is_some()); + + DROP_VECTOR.with(|v| { + assert_eq!(v.borrow()[i], 1); + assert_eq!(v.borrow()[i+100], 1); + }); + } + + DROP_VECTOR.with(|v| { + for i in 0..50 { + assert_eq!(v.borrow()[i], 0); + assert_eq!(v.borrow()[i+100], 0); + } + + for i in 50..100 { + assert_eq!(v.borrow()[i], 1); + assert_eq!(v.borrow()[i+100], 1); + } + }); + } + + DROP_VECTOR.with(|v| { + for i in 0..200 { + assert_eq!(v.borrow()[i], 0); + } + }); + } + + #[test] + fn test_move_iter_drops() { + DROP_VECTOR.with(|v| { + *v.borrow_mut() = repeat(0).take(200).collect(); + }); + + let hm = { + let mut hm = HashMap::new(); + + DROP_VECTOR.with(|v| { + for i in 0..200 { + assert_eq!(v.borrow()[i], 0); + } + }); + + for i in 0..100 { + let d1 = Dropable::new(i); + let d2 = Dropable::new(i+100); + hm.insert(d1, d2); + } + + DROP_VECTOR.with(|v| { + for i in 0..200 { + assert_eq!(v.borrow()[i], 1); + } + }); + + hm + }; + + // By the way, ensure that cloning doesn't screw up the dropping. + drop(hm.clone()); + + { + let mut half = hm.into_iter().take(50); + + DROP_VECTOR.with(|v| { + for i in 0..200 { + assert_eq!(v.borrow()[i], 1); + } + }); + + for _ in half.by_ref() {} + + DROP_VECTOR.with(|v| { + let nk = (0..100).filter(|&i| { + v.borrow()[i] == 1 + }).count(); + + let nv = (0..100).filter(|&i| { + v.borrow()[i+100] == 1 + }).count(); + + assert_eq!(nk, 50); + assert_eq!(nv, 50); + }); + }; + + DROP_VECTOR.with(|v| { + for i in 0..200 { + assert_eq!(v.borrow()[i], 0); + } + }); + } + + #[test] + fn test_empty_pop() { + let mut m: HashMap = HashMap::new(); + assert_eq!(m.remove(&0), None); + } + + #[test] + fn test_lots_of_insertions() { + let mut m = HashMap::new(); + + // Try this a few times to make sure we never screw up the hashmap's + // internal state. + for _ in 0..10 { + assert!(m.is_empty()); + + for i in range_inclusive(1, 1000) { + assert!(m.insert(i, i).is_none()); + + for j in range_inclusive(1, i) { + let r = m.get(&j); + assert_eq!(r, Some(&j)); + } + + for j in range_inclusive(i+1, 1000) { + let r = m.get(&j); + assert_eq!(r, None); + } + } + + for i in range_inclusive(1001, 2000) { + assert!(!m.contains_key(&i)); + } + + // remove forwards + for i in range_inclusive(1, 1000) { + assert!(m.remove(&i).is_some()); + + for j in range_inclusive(1, i) { + assert!(!m.contains_key(&j)); + } + + for j in range_inclusive(i+1, 1000) { + assert!(m.contains_key(&j)); + } + } + + for i in range_inclusive(1, 1000) { + assert!(!m.contains_key(&i)); + } + + for i in range_inclusive(1, 1000) { + assert!(m.insert(i, i).is_none()); + } + + // remove backwards + for i in (1..1001).rev() { + assert!(m.remove(&i).is_some()); + + for j in range_inclusive(i, 1000) { + assert!(!m.contains_key(&j)); + } + + for j in range_inclusive(1, i-1) { + assert!(m.contains_key(&j)); + } + } + } + } + + #[test] + fn test_find_mut() { + let mut m = HashMap::new(); + assert!(m.insert(1, 12).is_none()); + assert!(m.insert(2, 8).is_none()); + assert!(m.insert(5, 14).is_none()); + let new = 100; + match m.get_mut(&5) { + None => panic!(), Some(x) => *x = new + } + assert_eq!(m.get(&5), Some(&new)); + } + + #[test] + fn test_insert_overwrite() { + let mut m = HashMap::new(); + assert!(m.insert(1, 2).is_none()); + assert_eq!(*m.get(&1).unwrap(), 2); + assert!(!m.insert(1, 3).is_none()); + assert_eq!(*m.get(&1).unwrap(), 3); + } + + #[test] + fn test_insert_conflicts() { + let mut m = HashMap::with_capacity(4); + assert!(m.insert(1, 2).is_none()); + assert!(m.insert(5, 3).is_none()); + assert!(m.insert(9, 4).is_none()); + assert_eq!(*m.get(&9).unwrap(), 4); + assert_eq!(*m.get(&5).unwrap(), 3); + assert_eq!(*m.get(&1).unwrap(), 2); + } + + #[test] + fn test_conflict_remove() { + let mut m = HashMap::with_capacity(4); + assert!(m.insert(1, 2).is_none()); + assert_eq!(*m.get(&1).unwrap(), 2); + assert!(m.insert(5, 3).is_none()); + assert_eq!(*m.get(&1).unwrap(), 2); + assert_eq!(*m.get(&5).unwrap(), 3); + assert!(m.insert(9, 4).is_none()); + assert_eq!(*m.get(&1).unwrap(), 2); + assert_eq!(*m.get(&5).unwrap(), 3); + assert_eq!(*m.get(&9).unwrap(), 4); + assert!(m.remove(&1).is_some()); + assert_eq!(*m.get(&9).unwrap(), 4); + assert_eq!(*m.get(&5).unwrap(), 3); + } + + #[test] + fn test_is_empty() { + let mut m = HashMap::with_capacity(4); + assert!(m.insert(1, 2).is_none()); + assert!(!m.is_empty()); + assert!(m.remove(&1).is_some()); + assert!(m.is_empty()); + } + + #[test] + fn test_pop() { + let mut m = HashMap::new(); + m.insert(1, 2); + assert_eq!(m.remove(&1), Some(2)); + assert_eq!(m.remove(&1), None); + } + + #[test] + fn test_iterate() { + let mut m = HashMap::with_capacity(4); + for i in 0..32 { + assert!(m.insert(i, i*2).is_none()); + } + assert_eq!(m.len(), 32); + + let mut observed: u32 = 0; + + for (k, v) in &m { + assert_eq!(*v, *k * 2); + observed |= 1 << *k; + } + assert_eq!(observed, 0xFFFF_FFFF); + } + + #[test] + fn test_keys() { + let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')]; + let map: HashMap<_, _> = vec.into_iter().collect(); + let keys: Vec<_> = map.keys().cloned().collect(); + assert_eq!(keys.len(), 3); + assert!(keys.contains(&1)); + assert!(keys.contains(&2)); + assert!(keys.contains(&3)); + } + + #[test] + fn test_values() { + let vec = vec![(1, 'a'), (2, 'b'), (3, 'c')]; + let map: HashMap<_, _> = vec.into_iter().collect(); + let values: Vec<_> = map.values().cloned().collect(); + assert_eq!(values.len(), 3); + assert!(values.contains(&'a')); + assert!(values.contains(&'b')); + assert!(values.contains(&'c')); + } + + #[test] + fn test_find() { + let mut m = HashMap::new(); + assert!(m.get(&1).is_none()); + m.insert(1, 2); + match m.get(&1) { + None => panic!(), + Some(v) => assert_eq!(*v, 2) + } + } + + #[test] + fn test_eq() { + let mut m1 = HashMap::new(); + m1.insert(1, 2); + m1.insert(2, 3); + m1.insert(3, 4); + + let mut m2 = HashMap::new(); + m2.insert(1, 2); + m2.insert(2, 3); + + assert!(m1 != m2); + + m2.insert(3, 4); + + assert_eq!(m1, m2); + } + + #[test] + fn test_show() { + let mut map = HashMap::new(); + let empty: HashMap = HashMap::new(); + + map.insert(1, 2); + map.insert(3, 4); + + let map_str = format!("{:?}", map); + + assert!(map_str == "{1: 2, 3: 4}" || + map_str == "{3: 4, 1: 2}"); + assert_eq!(format!("{:?}", empty), "{}"); + } + + #[test] + fn test_expand() { + let mut m = HashMap::new(); + + assert_eq!(m.len(), 0); + assert!(m.is_empty()); + + let mut i = 0; + let old_cap = m.table.capacity(); + while old_cap == m.table.capacity() { + m.insert(i, i); + i += 1; + } + + assert_eq!(m.len(), i); + assert!(!m.is_empty()); + } + + #[test] + fn test_behavior_resize_policy() { + let mut m = HashMap::new(); + + assert_eq!(m.len(), 0); + assert_eq!(m.table.capacity(), 0); + assert!(m.is_empty()); + + m.insert(0, 0); + m.remove(&0); + assert!(m.is_empty()); + let initial_cap = m.table.capacity(); + m.reserve(initial_cap); + let cap = m.table.capacity(); + + assert_eq!(cap, initial_cap * 2); + + let mut i = 0; + for _ in 0..cap * 3 / 4 { + m.insert(i, i); + i += 1; + } + // three quarters full + + assert_eq!(m.len(), i); + assert_eq!(m.table.capacity(), cap); + + for _ in 0..cap / 4 { + m.insert(i, i); + i += 1; + } + // half full + + let new_cap = m.table.capacity(); + assert_eq!(new_cap, cap * 2); + + for _ in 0..cap / 2 - 1 { + i -= 1; + m.remove(&i); + assert_eq!(m.table.capacity(), new_cap); + } + // A little more than one quarter full. + m.shrink_to_fit(); + assert_eq!(m.table.capacity(), cap); + // again, a little more than half full + for _ in 0..cap / 2 - 1 { + i -= 1; + m.remove(&i); + } + m.shrink_to_fit(); + + assert_eq!(m.len(), i); + assert!(!m.is_empty()); + assert_eq!(m.table.capacity(), initial_cap); + } + + #[test] + fn test_reserve_shrink_to_fit() { + let mut m = HashMap::new(); + m.insert(0, 0); + m.remove(&0); + assert!(m.capacity() >= m.len()); + for i in 0..128 { + m.insert(i, i); + } + m.reserve(256); + + let usable_cap = m.capacity(); + for i in 128..(128 + 256) { + m.insert(i, i); + assert_eq!(m.capacity(), usable_cap); + } + + for i in 100..(128 + 256) { + assert_eq!(m.remove(&i), Some(i)); + } + m.shrink_to_fit(); + + assert_eq!(m.len(), 100); + assert!(!m.is_empty()); + assert!(m.capacity() >= m.len()); + + for i in 0..100 { + assert_eq!(m.remove(&i), Some(i)); + } + m.shrink_to_fit(); + m.insert(0, 0); + + assert_eq!(m.len(), 1); + assert!(m.capacity() >= m.len()); + assert_eq!(m.remove(&0), Some(0)); + } + + #[test] + fn test_from_iter() { + let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)]; + + let map: HashMap<_, _> = xs.iter().cloned().collect(); + + for &(k, v) in &xs { + assert_eq!(map.get(&k), Some(&v)); + } + } + + #[test] + fn test_size_hint() { + let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)]; + + let map: HashMap<_, _> = xs.iter().cloned().collect(); + + let mut iter = map.iter(); + + for _ in iter.by_ref().take(3) {} + + assert_eq!(iter.size_hint(), (3, Some(3))); + } + + #[test] + fn test_iter_len() { + let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)]; + + let map: HashMap<_, _> = xs.iter().cloned().collect(); + + let mut iter = map.iter(); + + for _ in iter.by_ref().take(3) {} + + assert_eq!(iter.len(), 3); + } + + #[test] + fn test_mut_size_hint() { + let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)]; + + let mut map: HashMap<_, _> = xs.iter().cloned().collect(); + + let mut iter = map.iter_mut(); + + for _ in iter.by_ref().take(3) {} + + assert_eq!(iter.size_hint(), (3, Some(3))); + } + + #[test] + fn test_iter_mut_len() { + let xs = [(1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6)]; + + let mut map: HashMap<_, _> = xs.iter().cloned().collect(); + + let mut iter = map.iter_mut(); + + for _ in iter.by_ref().take(3) {} + + assert_eq!(iter.len(), 3); + } + + #[test] + fn test_index() { + let mut map = HashMap::new(); + + map.insert(1, 2); + map.insert(2, 1); + map.insert(3, 4); + + assert_eq!(map[&2], 1); + } + + #[test] + #[should_panic] + fn test_index_nonexistent() { + let mut map = HashMap::new(); + + map.insert(1, 2); + map.insert(2, 1); + map.insert(3, 4); + + map[&4]; + } + + #[test] + fn test_entry(){ + let xs = [(1, 10), (2, 20), (3, 30), (4, 40), (5, 50), (6, 60)]; + + let mut map: HashMap<_, _> = xs.iter().cloned().collect(); + + // Existing key (insert) + match map.entry(1) { + Vacant(_) => unreachable!(), + Occupied(mut view) => { + assert_eq!(view.get(), &10); + assert_eq!(view.insert(100), 10); + } + } + assert_eq!(map.get(&1).unwrap(), &100); + assert_eq!(map.len(), 6); + + + // Existing key (update) + match map.entry(2) { + Vacant(_) => unreachable!(), + Occupied(mut view) => { + let v = view.get_mut(); + let new_v = (*v) * 10; + *v = new_v; + } + } + assert_eq!(map.get(&2).unwrap(), &200); + assert_eq!(map.len(), 6); + + // Existing key (take) + match map.entry(3) { + Vacant(_) => unreachable!(), + Occupied(view) => { + assert_eq!(view.remove(), 30); + } + } + assert_eq!(map.get(&3), None); + assert_eq!(map.len(), 5); + + + // Inexistent key (insert) + match map.entry(10) { + Occupied(_) => unreachable!(), + Vacant(view) => { + assert_eq!(*view.insert(1000), 1000); + } + } + assert_eq!(map.get(&10).unwrap(), &1000); + assert_eq!(map.len(), 6); + } + + #[test] + fn test_entry_take_doesnt_corrupt() { + #![allow(deprecated)] //rand + // Test for #19292 + fn check(m: &HashMap) { + for k in m.keys() { + assert!(m.contains_key(k), + "{} is in keys() but not in the map?", k); + } + } + + let mut m = HashMap::new(); + let mut rng = thread_rng(); + + // Populate the map with some items. + for _ in 0..50 { + let x = rng.gen_range(-10, 10); + m.insert(x, ()); + } + + for i in 0..1000 { + let x = rng.gen_range(-10, 10); + match m.entry(x) { + Vacant(_) => {}, + Occupied(e) => { + println!("{}: remove {}", i, x); + e.remove(); + }, + } + + check(&m); + } + } +} diff --git a/samples/Rust/main.rs b/samples/Rust/main.rs new file mode 100644 index 00000000..f4fa9f42 --- /dev/null +++ b/samples/Rust/main.rs @@ -0,0 +1,12 @@ +extern crate foo; +extern crate bar; + +use foo::{self, quix}; +use bar::car::*; +use bar; + +fn main() { + println!("Hello {}", "World"); + + panic!("Goodbye") +} From e688c865bc2de210faa6f8f02f71b3a218d8a8ac Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Sat, 4 Jul 2015 22:48:06 +0200 Subject: [PATCH 031/356] Merge branch 'master' into associate-heuristic-with-extension --- .gitmodules | 6 + CONTRIBUTING.md | 23 +- github-linguist.gemspec | 2 +- grammars.yml | 4 + lib/linguist/generated.rb | 23 +- lib/linguist/heuristics.rb | 10 + lib/linguist/languages.yml | 49 +- lib/linguist/repository.rb | 5 +- lib/linguist/vendor.yml | 8 + lib/linguist/version.rb | 2 +- samples/AMPL/CT2.mod | 58 + samples/G-code/lm.g | 25912 ------------------ samples/G-code/rm.g | 29735 --------------------- samples/Isabelle ROOT/filenames/ROOT | 1104 + samples/Linux Kernel Module/bcm4334x.mod | 2 + samples/Linux Kernel Module/mbcache.mod | 2 + samples/Linux Kernel Module/md5.mod | 2 + samples/Modula-2/HuffChan.mod | 329 + samples/PHP/root.php | 6 + samples/Perl/strict.t | 1 + samples/Perl6/test.p6 | 20 - samples/SMT/bignum_lia1.smt2 | 20 + samples/SMT/list4.smt2 | 20 + samples/SMT/queen10-1.smt2 | 123 + samples/SMT/shufflevector.smt | 2104 ++ samples/XML/xhtml-struct-1.mod | 125 + test/fixtures/Generated/ABM8G.mod | 50 + test/fixtures/Generated/ms2.mod | 19 + test/fixtures/SVG/alg_schema.link.svg | 1 + test/fixtures/SVG/alg_schema.svg | 269 + test/test_blob.rb | 11 + vendor/grammars/Handlebars | 2 +- vendor/grammars/NimLime | 2 +- vendor/grammars/SMT.tmbundle | 1 + vendor/grammars/Sublime-Modula-2 | 1 + vendor/grammars/atom-fsharp | 2 +- vendor/grammars/carto-atom | 2 +- vendor/grammars/css.tmbundle | 2 +- vendor/grammars/d.tmbundle | 2 +- vendor/grammars/factor | 2 +- vendor/grammars/haxe-sublime-bundle | 2 +- vendor/grammars/jade-tmbundle | 2 +- vendor/grammars/language-clojure | 2 +- vendor/grammars/language-javascript | 2 +- vendor/grammars/language-jsoniq | 2 +- vendor/grammars/language-python | 2 +- vendor/grammars/perl.tmbundle | 2 +- vendor/grammars/sas.tmbundle | 2 +- vendor/grammars/sublime-mask | 2 +- vendor/grammars/sublime-text-ox | 2 +- 50 files changed, 4387 insertions(+), 55694 deletions(-) create mode 100644 samples/AMPL/CT2.mod delete mode 100644 samples/G-code/lm.g delete mode 100644 samples/G-code/rm.g create mode 100644 samples/Isabelle ROOT/filenames/ROOT create mode 100644 samples/Linux Kernel Module/bcm4334x.mod create mode 100644 samples/Linux Kernel Module/mbcache.mod create mode 100644 samples/Linux Kernel Module/md5.mod create mode 100644 samples/Modula-2/HuffChan.mod create mode 100644 samples/PHP/root.php create mode 100644 samples/SMT/bignum_lia1.smt2 create mode 100644 samples/SMT/list4.smt2 create mode 100644 samples/SMT/queen10-1.smt2 create mode 100644 samples/SMT/shufflevector.smt create mode 100644 samples/XML/xhtml-struct-1.mod create mode 100644 test/fixtures/Generated/ABM8G.mod create mode 100644 test/fixtures/Generated/ms2.mod create mode 120000 test/fixtures/SVG/alg_schema.link.svg create mode 100644 test/fixtures/SVG/alg_schema.svg create mode 160000 vendor/grammars/SMT.tmbundle create mode 160000 vendor/grammars/Sublime-Modula-2 diff --git a/.gitmodules b/.gitmodules index 12edcd9a..67eb93d6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -629,6 +629,9 @@ [submodule "vendor/grammars/jflex.tmbundle"] path = vendor/grammars/jflex.tmbundle url = https://github.com/jflex-de/jflex.tmbundle.git +[submodule "vendor/grammars/Sublime-Modula-2"] + path = vendor/grammars/Sublime-Modula-2 + url = https://github.com/harogaston/Sublime-Modula-2 [submodule "vendor/grammars/ada.tmbundle"] path = vendor/grammars/ada.tmbundle url = https://github.com/textmate/ada.tmbundle @@ -647,3 +650,6 @@ [submodule "vendor/grammars/atom-fsharp"] path = vendor/grammars/atom-fsharp url = https://github.com/fsprojects/atom-fsharp +[submodule "vendor/grammars/SMT.tmbundle"] + path = vendor/grammars/SMT.tmbundle + url = https://github.com/SRI-CSL/SMT.tmbundle.git diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ebae203c..80576ac4 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,9 +2,27 @@ Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. The majority of contributions won't need to touch any Ruby code at all. + +## Adding an extension to a language + +We try only to add new extensions once they have some usage on GitHub. In most cases we prefer that extensions be in use in hundreds of repositories before supporting them in Linguist. + +To add support for a new extension: + +0. Add your extension to the language entry in [`languages.yml`][languages]. +0. Add at least one sample for your extension to the [samples directory][samples] in the correct subdirectory. +0. Open a pull request, linking to a [GitHub search result](https://github.com/search?utf8=%E2%9C%93&q=extension%3Aboot+NOT+nothack&type=Code&ref=searchresults) showing in-the-wild usage. + +In addition, if this extension is already listed in [`languages.yml`][languages] then sometimes a few more steps will need to be taken: + +0. Make sure that example `.yourextension` files are present in the [samples directory][samples] for each language that uses `.yourextension`. +0. Test the performance of the Bayesian classifier with a relatively large number (1000s) of sample `.yourextension` files. (ping @arfon or @bkeepers to help with this) to ensure we're not misclassifying files. +0. If the Bayesian classifier does a bad job with the sample `.yourextension` files then a [heuristic](https://github.com/github/linguist/blob/master/lib/linguist/heuristics.rb) may need to be written to help. + + ## Adding a language -We try only to add languages once they have some usage on GitHub. In most cases we prefer that languages be in use in hundreds of repositories before supporting them in Linguist. +We try only to add languages once they have some usage on GitHub. In most cases we prefer that each new file extension be in use in hundreds of repositories before supporting them in Linguist. To add support for a new language: @@ -23,12 +41,14 @@ In addition, if your new language defines an extension that's already listed in Remember, the goal here is to try and avoid false positives! + ## Fixing a misclassified language Most languages are detected by their file extension defined in [languages.yml][languages]. For disambiguating between files with common extensions, linguist applies some [heuristics](/lib/linguist/heuristics.rb) and a [statistical classifier](lib/linguist/classifier.rb). This process can help differentiate between, for example, `.h` files which could be either C, C++, or Obj-C. Misclassifications can often be solved by either adding a new filename or extension for the language or adding more [samples][samples] to make the classifier smarter. + ## Fixing syntax highlighting Syntax highlighting in GitHub is performed using TextMate-compatible grammars. These are the same grammars that TextMate, Sublime Text and Atom use. Every language in [languages.yml][languages] is mapped to its corresponding TM `scope`. This scope will be used when picking up a grammar for highlighting. @@ -55,6 +75,7 @@ Sometimes getting the tests running can be too much work, especially if you don' Here's our current build status: [![Build Status](https://secure.travis-ci.org/github/linguist.png?branch=master)](http://travis-ci.org/github/linguist) + ## Releasing If you are the current maintainer of this gem: diff --git a/github-linguist.gemspec b/github-linguist.gemspec index 3f3a0853..ce2303bf 100644 --- a/github-linguist.gemspec +++ b/github-linguist.gemspec @@ -16,7 +16,7 @@ Gem::Specification.new do |s| s.add_dependency 'charlock_holmes', '~> 0.7.3' s.add_dependency 'escape_utils', '~> 1.1.0' s.add_dependency 'mime-types', '>= 1.19' - s.add_dependency 'rugged', '~> 0.23.0b1' + s.add_dependency 'rugged', '>= 0.23.0b' s.add_development_dependency 'minitest', '>= 5.0' s.add_development_dependency 'mocha' diff --git a/grammars.yml b/grammars.yml index c0bfe823..a70491a4 100644 --- a/grammars.yml +++ b/grammars.yml @@ -85,6 +85,8 @@ vendor/grammars/Racket: - source.racket vendor/grammars/SCSS.tmbundle: - source.scss +vendor/grammars/SMT.tmbundle: +- source.smt vendor/grammars/Scalate.tmbundle: - source.scaml - text.html.ssp @@ -107,6 +109,8 @@ vendor/grammars/Sublime-Logos: - source.logos vendor/grammars/Sublime-Loom: - source.loomscript +vendor/grammars/Sublime-Modula-2/: +- source.modula2 vendor/grammars/Sublime-Nit: - source.nit vendor/grammars/Sublime-QML: diff --git a/lib/linguist/generated.rb b/lib/linguist/generated.rb index d6bf6263..f1fb2d19 100644 --- a/lib/linguist/generated.rb +++ b/lib/linguist/generated.rb @@ -69,8 +69,9 @@ module Linguist generated_protocol_buffer? || generated_apache_thrift? || generated_jni_header? || - generated_unity3d_meta? || - vcr_cassette? + vcr_cassette? || + generated_module? || + generated_unity3d_meta? end # Internal: Is the blob an Xcode file? @@ -324,6 +325,24 @@ module Linguist return lines[0].include?("Generated by Cython") end + # Internal: Is it a KiCAD or GFortran module file? + # + # KiCAD module files contain: + # PCBNEW-LibModule-V1 yyyy-mm-dd h:mm:ss XM + # on the first line. + # + # GFortran module files contain: + # GFORTRAN module version 'x' created from + # on the first line. + # + # Return true of false + def generated_module? + return false unless extname == '.mod' + return false unless lines.count > 1 + return lines[0].include?("PCBNEW-LibModule-V") || + lines[0].include?("GFORTRAN module version '") + end + # Internal: Is this a metadata file from Unity3D? # # Unity3D Meta files start with: diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 9282c197..b734c2f3 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -285,6 +285,16 @@ module Linguist end end + disambiguate ".mod" do |data| + if data.include?('= 1, integer; # number of rows +param num_cols >= 1, integer; # number of columns + +set BEAMS := 1 .. num_beams; # set of beams + +set ROWS := 1 .. num_rows; # set of rows +set COLUMNS := 1 .. num_cols; # set of columns + +# values for entries of each beam +param beam_values {BEAMS, ROWS, COLUMNS} >= 0; + +# values of tumor +param tumor_values {ROWS, COLUMNS} >= 0; + +# values of critical area +param critical_values {ROWS, COLUMNS} >= 0; + +# critical maximum dosage requirement +param critical_max; + +# tumor minimum dosage requirement +param tumor_min; + +# dosage scalar of each beam +var X {i in BEAMS} >= 0; + + +# define the tumor area which includes the locations where tumor exists +set tumor_area := {k in ROWS, h in COLUMNS: tumor_values[k,h] > 0}; + +# define critical area +set critical_area := {k in ROWS, h in COLUMNS: critical_values[k,h] > 0}; + +var S {(k,h) in tumor_area} >= 0; +var T {(k,h) in critical_area} >= 0; + +# maximize total dosage in tumor area +maximize total_tumor_dosage: sum {i in BEAMS} sum {(k,h) in tumor_area} X[i] * beam_values[i,k,h]; + +# minimize total dosage in critical area +minimize total_critical_dosage: sum {i in BEAMS} sum {(k,h) in critical_area} X[i] * beam_values[i,k,h]; + +# minimize total tumor slack +minimize total_tumor_slack: sum {(k,h) in tumor_area} S[k,h]; + +# minimize total critical area slack +minimize total_critical_slack: sum {(k,h) in critical_area} T[k,h]; + +# total dosage at each tumor location [k,h] should be >= min tumor dosage with slack variable +subject to tumor_limit {(k,h) in tumor_area} : sum {i in BEAMS} X[i] * beam_values[i,k,h] == tumor_min - S[k,h]; + +# total dosage at each critical location [k,h] should be = max critical dosage with slack variable +subject to critical_limit {(k,h) in critical_area} : sum {i in BEAMS} X[i] * beam_values[i,k,h] == critical_max + T[k,h]; + + + diff --git a/samples/G-code/lm.g b/samples/G-code/lm.g deleted file mode 100644 index 4b60a136..00000000 --- a/samples/G-code/lm.g +++ /dev/null @@ -1,25912 +0,0 @@ -48 36266 43 38 - 0 0.259 - 1 0.00232 - 2 0.0392 - 3 0.0317 - 4 0.141 - 6 0.000138 - 7 0.0468 - 8 0.036 - 9 0.0021 - 10 0.00146 - 13 0.0395 - 14 0.0443 - 15 0.00874 - 16 0.000331 - 18 0.013 - 19 0.0104 - 20 0.0106 - 21 0.121 - 22 0.0148 - 23 0.00816 - 24 0.000772 - 25 0.000165 - 26 0.004 - 28 0.0217 - 29 0.0184 - 30 0.00976 - 31 0.0173 - 32 0.00767 - 33 0.0122 - 34 5.51e-05 - 35 5.51e-05 - 36 0.000276 - 37 0.000551 - 38 2.76e-05 - 39 0.00645 - 40 0.000138 - 41 0.0352 - 42 0.00447 - 43 0.000221 - 44 0.00149 - 45 0.0171 - 46 0.00105 - 47 0.0106 - - 0 4 3 0 - 2 0.25 - 13 0.5 - 19 0.25 - - 2 619 18 15 - 0 0.00323 - 3 0.00808 - 4 0.00808 - 7 0.00162 - 8 0.784 - 9 0.042 - 10 0.00646 - 13 0.0517 - 14 0.00323 - 15 0.00969 - 20 0.00162 - 28 0.00162 - 29 0.00162 - 30 0.00485 - 31 0.0307 - 41 0.0178 - 42 0.00969 - 46 0.0145 - - 3 1 1 0 - 3 1 - - 4 1 1 0 - 4 1 - - 8 526 12 0 - 4 0.0076 - 7 0.0019 - 8 0.901 - 10 0.0019 - 13 0.0342 - 15 0.0019 - 29 0.0019 - 30 0.0057 - 31 0.019 - 41 0.0114 - 42 0.00951 - 46 0.0038 - - 9 37 5 0 - 3 0.027 - 8 0.162 - 9 0.703 - 41 0.0811 - 42 0.027 - - 10 3 1 0 - 10 1 - - 13 15 4 0 - 3 0.0667 - 13 0.8 - 14 0.0667 - 41 0.0667 - - 14 1 1 0 - 14 1 - - 15 5 1 0 - 15 1 - - 20 1 1 0 - 20 1 - - 21 5 3 0 - 0 0.2 - 8 0.6 - 41 0.2 - - 28 1 1 0 - 28 1 - - 31 10 2 0 - 13 0.1 - 31 0.9 - - 39 1 1 0 - 3 1 - - 45 7 1 0 - 46 1 - - 48 2 2 0 - 0 0.5 - 3 0.5 - - 3 1036 24 8 - 0 0.00869 - 2 0.00965 - 3 0.0425 - 4 0.496 - 7 0.0734 - 8 0.0502 - 9 0.000965 - 13 0.00579 - 14 0.000965 - 15 0.029 - 18 0.0463 - 20 0.0299 - 24 0.000965 - 26 0.000965 - 28 0.00579 - 30 0.00483 - 31 0.0029 - 32 0.00193 - 33 0.0029 - 38 0.000965 - 39 0.166 - 41 0.0154 - 42 0.0029 - 45 0.000965 - - 2 4 4 0 - 7 0.25 - 13 0.25 - 28 0.25 - 39 0.25 - - 3 39 6 0 - 4 0.128 - 7 0.385 - 8 0.0256 - 18 0.0769 - 32 0.0256 - 39 0.359 - - 8 34 10 0 - 0 0.0294 - 2 0.0882 - 3 0.0294 - 4 0.5 - 8 0.0882 - 18 0.0294 - 20 0.0882 - 28 0.0294 - 32 0.0294 - 39 0.0882 - - 9 2 2 0 - 0 0.5 - 13 0.5 - - 13 769 21 0 - 0 0.0065 - 2 0.0065 - 3 0.0325 - 4 0.635 - 7 0.078 - 8 0.0611 - 9 0.0013 - 13 0.0026 - 14 0.0013 - 15 0.0351 - 18 0.0572 - 20 0.0364 - 24 0.0013 - 26 0.0013 - 28 0.0052 - 30 0.0065 - 31 0.0039 - 33 0.0039 - 41 0.0195 - 42 0.0039 - 45 0.0013 - - 14 2 2 0 - 2 0.5 - 41 0.5 - - 41 1 1 0 - 13 1 - - 47 184 9 0 - 0 0.0109 - 2 0.00543 - 3 0.0978 - 4 0.0163 - 8 0.00543 - 13 0.00543 - 15 0.0163 - 38 0.00543 - 39 0.837 - - 4 59 13 4 - 0 0.305 - 2 0.0847 - 7 0.186 - 10 0.0169 - 13 0.0678 - 21 0.0339 - 28 0.0678 - 29 0.0678 - 30 0.0169 - 31 0.0339 - 41 0.0508 - 42 0.0169 - 47 0.0508 - - 2 5 2 0 - 0 0.2 - 7 0.8 - - 21 4 2 0 - 0 0.75 - 31 0.25 - - 47 8 5 0 - 2 0.375 - 7 0.25 - 10 0.125 - 29 0.125 - 47 0.125 - - 48 3 3 0 - 0 0.333 - 41 0.333 - 42 0.333 - - 6 14 7 1 - 4 0.143 - 6 0.357 - 7 0.143 - 13 0.0714 - 20 0.0714 - 40 0.0714 - 45 0.143 - - 6 5 3 0 - 4 0.4 - 7 0.4 - 20 0.2 - - 7 72 19 3 - 0 0.222 - 2 0.0139 - 3 0.0278 - 7 0.0278 - 8 0.0278 - 9 0.0139 - 13 0.0694 - 14 0.0833 - 15 0.0278 - 21 0.153 - 22 0.0139 - 28 0.0278 - 29 0.0417 - 30 0.0139 - 31 0.0833 - 33 0.0278 - 41 0.0694 - 42 0.0278 - 47 0.0278 - - 8 21 10 0 - 0 0.0952 - 9 0.0476 - 13 0.0476 - 14 0.0476 - 21 0.286 - 22 0.0476 - 28 0.0476 - 31 0.19 - 33 0.0476 - 41 0.143 - - 13 5 5 0 - 3 0.2 - 7 0.2 - 13 0.2 - 42 0.2 - 47 0.2 - - 21 6 5 0 - 0 0.333 - 8 0.167 - 14 0.167 - 29 0.167 - 41 0.167 - - 8 10450 37 10 - 0 0.257 - 1 0.0022 - 2 0.0624 - 3 0.00545 - 4 0.0268 - 7 0.0371 - 8 0.0275 - 9 0.00191 - 10 0.00383 - 13 0.0362 - 14 0.0615 - 15 0.00766 - 16 0.000287 - 18 0.00287 - 19 0.00957 - 20 0.00268 - 21 0.235 - 22 0.0462 - 23 0.0262 - 24 0.000287 - 26 0.00373 - 28 0.0187 - 29 0.0162 - 30 0.00612 - 31 0.0156 - 32 0.00689 - 33 0.0111 - 37 0.000574 - 39 0.00593 - 40 0.000191 - 41 0.0333 - 42 0.00201 - 43 9.57e-05 - 44 0.000383 - 45 0.0185 - 46 0.000957 - 47 0.00785 - - 2 485 30 0 - 0 0.103 - 2 0.0206 - 3 0.00412 - 4 0.181 - 7 0.146 - 8 0.0701 - 9 0.00412 - 13 0.00619 - 14 0.00206 - 15 0.00825 - 18 0.0247 - 19 0.00206 - 20 0.0309 - 21 0.0577 - 22 0.0186 - 23 0.0144 - 24 0.00206 - 26 0.0165 - 28 0.0227 - 29 0.0124 - 30 0.0206 - 31 0.00619 - 32 0.00412 - 33 0.0144 - 40 0.00206 - 41 0.126 - 42 0.00825 - 45 0.0454 - 46 0.00206 - 47 0.0227 - - 8 227 22 0 - 0 0.0308 - 2 0.0837 - 3 0.0176 - 4 0.348 - 7 0.185 - 8 0.0617 - 10 0.00881 - 18 0.0176 - 19 0.00441 - 20 0.0352 - 23 0.00441 - 26 0.022 - 28 0.00441 - 29 0.0264 - 30 0.0132 - 31 0.00441 - 32 0.00441 - 33 0.00441 - 41 0.0264 - 42 0.00441 - 46 0.00441 - 47 0.0881 - - 9 9 5 0 - 0 0.222 - 2 0.111 - 4 0.444 - 20 0.111 - 28 0.111 - - 10 12 2 0 - 4 0.5 - 18 0.5 - - 23 4 1 0 - 4 1 - - 26 11 6 0 - 0 0.0909 - 4 0.273 - 7 0.364 - 29 0.0909 - 41 0.0909 - 45 0.0909 - - 41 91 20 0 - 0 0.0879 - 2 0.022 - 3 0.011 - 4 0.187 - 7 0.231 - 8 0.022 - 15 0.011 - 18 0.011 - 20 0.011 - 21 0.033 - 22 0.022 - 23 0.022 - 28 0.011 - 29 0.011 - 30 0.011 - 31 0.011 - 41 0.143 - 42 0.022 - 45 0.0879 - 47 0.033 - - 42 4 3 0 - 4 0.5 - 7 0.25 - 21 0.25 - - 46 9 1 0 - 45 1 - - 47 9595 37 0 - 0 0.272 - 1 0.0024 - 2 0.0646 - 3 0.00521 - 4 0.00803 - 7 0.0258 - 8 0.0247 - 9 0.00188 - 10 0.00396 - 13 0.0391 - 14 0.0669 - 15 0.00782 - 16 0.000313 - 18 0.00073 - 19 0.0102 - 20 0.000313 - 21 0.252 - 22 0.0492 - 23 0.0275 - 24 0.000208 - 26 0.00271 - 28 0.0189 - 29 0.0162 - 30 0.00521 - 31 0.0165 - 32 0.00719 - 33 0.0113 - 37 0.000625 - 39 0.00646 - 40 0.000104 - 41 0.0278 - 42 0.00146 - 43 0.000104 - 44 0.000417 - 45 0.0158 - 46 0.000834 - 47 0.005 - - 9 882 28 4 - 0 0.22 - 1 0.00227 - 2 0.0737 - 3 0.0317 - 4 0.0249 - 7 0.0181 - 8 0.0159 - 13 0.0964 - 14 0.0351 - 15 0.00227 - 18 0.00113 - 19 0.0204 - 20 0.00113 - 21 0.339 - 22 0.00113 - 24 0.00113 - 26 0.00227 - 28 0.0147 - 29 0.0238 - 30 0.017 - 31 0.0068 - 32 0.00907 - 33 0.0102 - 34 0.00113 - 41 0.017 - 42 0.00113 - 45 0.00794 - 47 0.00454 - - 2 26 16 0 - 0 0.0769 - 1 0.0385 - 4 0.0385 - 7 0.0385 - 13 0.0385 - 14 0.115 - 19 0.0385 - 21 0.0385 - 28 0.115 - 29 0.0385 - 30 0.0769 - 32 0.0385 - 33 0.0385 - 41 0.154 - 45 0.0769 - 47 0.0385 - - 8 15 7 0 - 4 0.2 - 7 0.4 - 8 0.0667 - 13 0.0667 - 20 0.0667 - 28 0.0667 - 30 0.133 - - 41 7 7 0 - 0 0.143 - 2 0.143 - 4 0.143 - 7 0.143 - 14 0.143 - 28 0.143 - 32 0.143 - - 47 829 27 0 - 0 0.23 - 1 0.00121 - 2 0.0772 - 3 0.0338 - 4 0.0169 - 7 0.00965 - 8 0.0157 - 13 0.1 - 14 0.0326 - 15 0.00241 - 18 0.00121 - 19 0.0193 - 21 0.359 - 22 0.00121 - 24 0.00121 - 26 0.00241 - 28 0.00844 - 29 0.0241 - 30 0.0133 - 31 0.00724 - 32 0.00724 - 33 0.00965 - 34 0.00121 - 41 0.0133 - 42 0.00121 - 45 0.00603 - 47 0.00362 - - 10 101 11 2 - 0 0.0495 - 2 0.0495 - 4 0.277 - 7 0.119 - 8 0.119 - 18 0.158 - 20 0.0792 - 21 0.119 - 29 0.0099 - 42 0.0099 - 46 0.0099 - - 8 29 4 0 - 2 0.0345 - 4 0.552 - 18 0.241 - 20 0.172 - - 47 68 11 0 - 0 0.0735 - 2 0.0588 - 4 0.162 - 7 0.176 - 8 0.176 - 18 0.103 - 20 0.0294 - 21 0.176 - 29 0.0147 - 42 0.0147 - 46 0.0147 - - 13 1069 25 11 - 0 0.0131 - 2 0.0215 - 3 0.836 - 4 0.0187 - 7 0.0159 - 8 0.00935 - 9 0.00187 - 10 0.000935 - 13 0.0337 - 14 0.00281 - 15 0.00468 - 18 0.00281 - 20 0.00468 - 21 0.00468 - 22 0.000935 - 25 0.000935 - 26 0.00187 - 28 0.00374 - 29 0.00187 - 30 0.00281 - 31 0.00468 - 33 0.000935 - 41 0.00655 - 45 0.00281 - 47 0.00187 - - 2 32 12 0 - 2 0.0938 - 4 0.219 - 7 0.125 - 8 0.0938 - 15 0.0625 - 18 0.0312 - 20 0.0938 - 28 0.0312 - 30 0.0625 - 31 0.0625 - 33 0.0312 - 41 0.0938 - - 3 3 3 0 - 4 0.333 - 26 0.333 - 41 0.333 - - 8 23 10 0 - 0 0.304 - 2 0.13 - 3 0.0435 - 4 0.087 - 8 0.0435 - 13 0.13 - 21 0.13 - 41 0.0435 - 45 0.0435 - 47 0.0435 - - 9 4 2 0 - 0 0.25 - 4 0.75 - - 13 11 5 0 - 3 0.364 - 4 0.0909 - 7 0.182 - 8 0.273 - 26 0.0909 - - 21 1 1 0 - 25 1 - - 29 5 3 0 - 3 0.4 - 4 0.2 - 13 0.4 - - 31 13 6 0 - 0 0.154 - 3 0.308 - 4 0.154 - 7 0.0769 - 13 0.231 - 21 0.0769 - - 41 5 3 0 - 7 0.4 - 8 0.2 - 20 0.4 - - 42 2 2 0 - 18 0.5 - 47 0.5 - - 47 967 20 0 - 0 0.00414 - 2 0.0165 - 3 0.913 - 4 0.00207 - 7 0.00724 - 8 0.00207 - 9 0.00207 - 10 0.00103 - 13 0.029 - 14 0.0031 - 15 0.0031 - 18 0.00103 - 21 0.00103 - 22 0.00103 - 28 0.0031 - 29 0.00207 - 30 0.00103 - 31 0.0031 - 41 0.00207 - 45 0.00207 - - 14 13 7 0 - 2 0.0769 - 3 0.538 - 4 0.0769 - 14 0.0769 - 33 0.0769 - 42 0.0769 - 47 0.0769 - - 15 172 19 7 - 0 0.0174 - 2 0.064 - 3 0.0116 - 4 0.279 - 7 0.157 - 8 0.0291 - 15 0.198 - 18 0.0174 - 20 0.0116 - 26 0.00581 - 28 0.0116 - 31 0.0174 - 33 0.0116 - 41 0.0465 - 42 0.00581 - 43 0.00581 - 44 0.00581 - 45 0.0116 - 47 0.093 - - 2 6 4 0 - 4 0.5 - 7 0.167 - 8 0.167 - 41 0.167 - - 3 4 2 0 - 4 0.5 - 20 0.5 - - 8 54 11 0 - 0 0.0185 - 4 0.37 - 7 0.278 - 8 0.037 - 15 0.0185 - 18 0.037 - 26 0.0185 - 33 0.0185 - 41 0.0556 - 45 0.0185 - 47 0.13 - - 13 3 3 0 - 3 0.333 - 8 0.333 - 15 0.333 - - 15 30 10 0 - 2 0.1 - 3 0.0333 - 4 0.433 - 7 0.133 - 8 0.0333 - 15 0.0667 - 28 0.0333 - 33 0.0333 - 45 0.0333 - 47 0.1 - - 41 35 8 0 - 2 0.0286 - 4 0.286 - 7 0.143 - 15 0.286 - 18 0.0286 - 28 0.0286 - 41 0.0857 - 47 0.114 - - 47 39 10 0 - 0 0.0513 - 2 0.179 - 7 0.0513 - 15 0.487 - 31 0.0769 - 41 0.0256 - 42 0.0256 - 43 0.0256 - 44 0.0256 - 47 0.0513 - - 20 2 2 0 - 2 0.5 - 7 0.5 - - 21 3162 36 12 - 0 0.285 - 1 0.00316 - 2 0.038 - 3 0.00506 - 4 0.189 - 7 0.0664 - 8 0.00538 - 9 0.000633 - 13 0.0417 - 14 0.0237 - 15 0.00253 - 16 0.000316 - 18 0.0104 - 19 0.012 - 20 0.012 - 21 0.0904 - 22 0.00285 - 23 0.0038 - 24 0.00158 - 25 0.000316 - 26 0.00633 - 28 0.0266 - 29 0.0256 - 30 0.0139 - 31 0.0202 - 32 0.013 - 33 0.0164 - 35 0.000316 - 37 0.00158 - 41 0.0332 - 42 0.00506 - 43 0.000633 - 44 0.00127 - 45 0.031 - 46 0.000316 - 47 0.0104 - - 7 3 3 0 - 2 0.333 - 13 0.333 - 24 0.333 - - 8 1970 32 0 - 0 0.342 - 1 0.00305 - 2 0.0396 - 3 0.00457 - 4 0.177 - 7 0.0503 - 8 0.00508 - 9 0.000508 - 13 0.0315 - 14 0.0107 - 15 0.00152 - 18 0.00812 - 19 0.0142 - 20 0.00914 - 21 0.0985 - 22 0.00254 - 23 0.00254 - 24 0.00152 - 26 0.00558 - 28 0.0223 - 29 0.0198 - 30 0.0117 - 31 0.0173 - 32 0.0107 - 33 0.0183 - 37 0.00254 - 41 0.0294 - 42 0.00508 - 43 0.00102 - 44 0.00152 - 45 0.0421 - 47 0.0102 - - 9 279 22 0 - 0 0.305 - 1 0.00358 - 2 0.0287 - 3 0.00358 - 4 0.219 - 7 0.0645 - 13 0.0287 - 14 0.0179 - 19 0.00717 - 21 0.0358 - 26 0.0108 - 28 0.0538 - 29 0.0538 - 30 0.0323 - 31 0.0215 - 32 0.0251 - 33 0.0179 - 41 0.0394 - 42 0.0108 - 45 0.00717 - 46 0.00358 - 47 0.0108 - - 10 12 3 0 - 2 0.0833 - 4 0.667 - 18 0.25 - - 13 2 1 0 - 21 1 - - 21 123 19 0 - 0 0.358 - 1 0.00813 - 2 0.0732 - 4 0.0244 - 7 0.0325 - 13 0.0407 - 14 0.0976 - 15 0.00813 - 20 0.00813 - 21 0.0732 - 28 0.0244 - 29 0.0163 - 31 0.0488 - 32 0.0244 - 35 0.00813 - 41 0.0732 - 42 0.0244 - 45 0.0407 - 47 0.0163 - - 22 35 12 0 - 0 0.4 - 2 0.114 - 4 0.143 - 7 0.0286 - 13 0.0571 - 19 0.0286 - 21 0.0286 - 28 0.0571 - 29 0.0286 - 30 0.0286 - 32 0.0286 - 41 0.0571 - - 23 2 1 0 - 47 1 - - 31 380 26 0 - 0 0.1 - 2 0.0316 - 3 0.0158 - 4 0.395 - 7 0.168 - 8 0.0105 - 9 0.00263 - 13 0.0132 - 14 0.00263 - 18 0.0289 - 20 0.05 - 21 0.0368 - 22 0.00526 - 23 0.0132 - 25 0.00263 - 26 0.0132 - 28 0.0184 - 29 0.0184 - 30 0.00526 - 31 0.00526 - 32 0.00526 - 33 0.0105 - 41 0.0211 - 44 0.00263 - 45 0.0105 - 47 0.0132 - - 41 5 4 0 - 0 0.4 - 4 0.2 - 31 0.2 - 45 0.2 - - 45 6 5 0 - 0 0.167 - 4 0.167 - 7 0.333 - 19 0.167 - 45 0.167 - - 47 339 26 0 - 0 0.112 - 1 0.0059 - 2 0.0206 - 4 0.056 - 7 0.0649 - 8 0.00885 - 13 0.145 - 14 0.106 - 15 0.0118 - 16 0.00295 - 18 0.00885 - 19 0.0177 - 21 0.165 - 22 0.0059 - 23 0.0059 - 24 0.00295 - 26 0.00295 - 28 0.0383 - 29 0.0501 - 30 0.0265 - 31 0.0442 - 32 0.0206 - 33 0.0206 - 41 0.0472 - 45 0.0059 - 47 0.00295 - - 22 504 23 6 - 0 0.246 - 2 0.0417 - 3 0.00198 - 4 0.188 - 7 0.0258 - 13 0.0516 - 14 0.0675 - 15 0.00992 - 18 0.00397 - 19 0.0298 - 20 0.00198 - 21 0.101 - 24 0.00198 - 26 0.00595 - 28 0.0417 - 29 0.0218 - 30 0.0357 - 31 0.0198 - 32 0.00397 - 33 0.0159 - 41 0.0397 - 45 0.0179 - 47 0.0258 - - 8 431 21 0 - 0 0.262 - 2 0.0464 - 4 0.213 - 7 0.0255 - 13 0.0441 - 14 0.0534 - 15 0.00464 - 18 0.00464 - 19 0.0255 - 21 0.111 - 24 0.00232 - 26 0.00696 - 28 0.0394 - 29 0.0116 - 30 0.0302 - 31 0.0186 - 32 0.00464 - 33 0.0139 - 41 0.0418 - 45 0.0162 - 47 0.0232 - - 21 5 5 0 - 2 0.2 - 7 0.2 - 14 0.2 - 30 0.2 - 41 0.2 - - 30 3 2 0 - 0 0.667 - 7 0.333 - - 31 18 8 0 - 0 0.389 - 14 0.111 - 15 0.167 - 20 0.0556 - 29 0.111 - 33 0.0556 - 41 0.0556 - 45 0.0556 - - 45 3 2 0 - 4 0.667 - 30 0.333 - - 47 42 13 0 - 0 0.0476 - 3 0.0238 - 13 0.167 - 14 0.19 - 19 0.0952 - 21 0.0714 - 28 0.0714 - 29 0.0952 - 30 0.0714 - 31 0.0476 - 33 0.0238 - 45 0.0238 - 47 0.0714 - - 23 292 18 1 - 0 0.0651 - 2 0.0514 - 3 0.0274 - 4 0.634 - 8 0.0171 - 13 0.0103 - 14 0.00342 - 15 0.00342 - 18 0.0548 - 19 0.00342 - 20 0.0548 - 21 0.0171 - 28 0.00342 - 31 0.00342 - 32 0.00342 - 41 0.0205 - 42 0.00342 - 47 0.024 - - 21 11 4 0 - 2 0.0909 - 4 0.727 - 31 0.0909 - 41 0.0909 - - 24 7 2 0 - 0 0.857 - 21 0.143 - - 26 11 1 0 - 8 1 - - 28 10 7 0 - 2 0.1 - 15 0.1 - 19 0.1 - 21 0.1 - 26 0.3 - 28 0.2 - 45 0.1 - - 29 10 4 0 - 2 0.2 - 13 0.6 - 21 0.1 - 32 0.1 - - 30 47 15 1 - 0 0.447 - 2 0.0213 - 4 0.0426 - 7 0.0213 - 10 0.0213 - 13 0.0426 - 14 0.0213 - 21 0.106 - 22 0.0638 - 28 0.0213 - 31 0.0426 - 32 0.0213 - 41 0.0426 - 45 0.0426 - 47 0.0426 - - 2 3 2 0 - 4 0.667 - 7 0.333 - - 31 750 26 3 - 0 0.145 - 1 0.00133 - 2 0.0187 - 3 0.00267 - 4 0.0187 - 7 0.00933 - 8 0.00267 - 9 0.00133 - 13 0.0373 - 14 0.04 - 15 0.00133 - 19 0.00533 - 20 0.00133 - 21 0.583 - 22 0.028 - 23 0.0107 - 25 0.00133 - 28 0.0187 - 29 0.016 - 30 0.004 - 31 0.004 - 32 0.004 - 33 0.0147 - 41 0.00667 - 45 0.00933 - 47 0.0147 - - 2 19 10 0 - 2 0.0526 - 4 0.211 - 7 0.0526 - 8 0.105 - 14 0.0526 - 15 0.0526 - 21 0.105 - 22 0.0526 - 41 0.0526 - 47 0.263 - - 41 2 2 0 - 4 0.5 - 41 0.5 - - 47 728 24 0 - 0 0.15 - 1 0.00137 - 2 0.0179 - 3 0.00275 - 4 0.0124 - 7 0.00824 - 9 0.00137 - 13 0.0385 - 14 0.0398 - 19 0.00549 - 20 0.00137 - 21 0.598 - 22 0.0275 - 23 0.011 - 25 0.00137 - 28 0.0192 - 29 0.0151 - 30 0.00412 - 31 0.00412 - 32 0.00412 - 33 0.0151 - 41 0.00412 - 45 0.00962 - 47 0.00824 - - 32 2 1 0 - 14 1 - - 37 1 1 0 - 47 1 - - 39 235 16 2 - 2 0.017 - 4 0.66 - 7 0.034 - 8 0.0809 - 9 0.0128 - 13 0.00426 - 18 0.0468 - 20 0.0426 - 28 0.017 - 29 0.00851 - 30 0.00426 - 31 0.0128 - 36 0.0128 - 41 0.034 - 42 0.00851 - 44 0.00426 - - 3 172 15 0 - 2 0.0233 - 4 0.721 - 7 0.0291 - 8 0.0698 - 9 0.00581 - 13 0.00581 - 18 0.0407 - 20 0.0233 - 28 0.0233 - 29 0.0116 - 30 0.00581 - 31 0.0174 - 41 0.00581 - 42 0.0116 - 44 0.00581 - - 8 62 8 0 - 4 0.484 - 7 0.0484 - 8 0.113 - 9 0.0323 - 18 0.0645 - 20 0.0968 - 36 0.0484 - 41 0.113 - - 41 151 10 6 - 2 0.00662 - 3 0.00662 - 8 0.603 - 9 0.0464 - 13 0.0331 - 14 0.00662 - 15 0.232 - 21 0.0464 - 31 0.0132 - 42 0.00662 - - 2 11 4 0 - 8 0.545 - 9 0.273 - 13 0.0909 - 31 0.0909 - - 8 109 4 0 - 8 0.642 - 13 0.0183 - 15 0.321 - 21 0.0183 - - 9 2 1 0 - 9 1 - - 13 4 3 0 - 3 0.25 - 8 0.25 - 13 0.5 - - 21 13 4 0 - 8 0.385 - 9 0.154 - 14 0.0769 - 21 0.385 - - 49 1 1 0 - 2 1 - - 42 10 6 0 - 7 0.1 - 8 0.4 - 9 0.1 - 13 0.2 - 15 0.1 - 46 0.1 - - 45 91 17 2 - 0 0.473 - 1 0.011 - 2 0.0989 - 3 0.011 - 4 0.044 - 7 0.0879 - 8 0.033 - 9 0.011 - 13 0.0549 - 14 0.011 - 18 0.011 - 19 0.011 - 21 0.0769 - 22 0.033 - 28 0.011 - 30 0.011 - 31 0.011 - - 21 18 5 0 - 0 0.722 - 2 0.0556 - 4 0.0556 - 7 0.0556 - 21 0.111 - - 48 7 3 0 - 0 0.429 - 7 0.143 - 13 0.429 - - 46 13 3 0 - 8 0.692 - 9 0.0769 - 41 0.231 - - 47 14411 40 29 - 0 0.326 - 1 0.00291 - 2 0.0278 - 3 0.005 - 4 0.176 - 7 0.0572 - 8 0.0154 - 9 0.000555 - 10 0.000416 - 13 0.043 - 14 0.0509 - 15 0.00638 - 16 0.000416 - 18 0.0164 - 19 0.0131 - 20 0.0133 - 21 0.0505 - 22 0.000833 - 23 0.000139 - 24 0.000971 - 25 0.000208 - 26 0.00465 - 28 0.0271 - 29 0.0232 - 30 0.0121 - 31 0.021 - 32 0.00965 - 33 0.0153 - 34 6.94e-05 - 35 6.94e-05 - 36 0.000347 - 37 0.000625 - 40 0.000139 - 41 0.0389 - 42 0.00527 - 43 0.000208 - 44 0.0018 - 45 0.0184 - 46 0.000833 - 47 0.0134 - - 0 4 3 0 - 2 0.25 - 13 0.5 - 19 0.25 - - 2 4 3 0 - 0 0.5 - 7 0.25 - 29 0.25 - - 3 814 22 0 - 0 0.0111 - 2 0.0111 - 3 0.00614 - 4 0.63 - 7 0.0934 - 8 0.0639 - 9 0.00123 - 13 0.00369 - 14 0.00123 - 15 0.0319 - 18 0.059 - 20 0.0381 - 24 0.00123 - 26 0.00123 - 28 0.00614 - 30 0.00614 - 31 0.00369 - 32 0.00246 - 33 0.00369 - 41 0.0197 - 42 0.00369 - 45 0.00123 - - 4 55 12 0 - 0 0.327 - 2 0.0727 - 7 0.164 - 13 0.0727 - 21 0.0364 - 28 0.0727 - 29 0.0727 - 30 0.0182 - 31 0.0364 - 41 0.0545 - 42 0.0182 - 47 0.0545 - - 6 8 5 0 - 4 0.25 - 7 0.25 - 20 0.125 - 40 0.125 - 45 0.25 - - 7 60 17 0 - 0 0.267 - 2 0.0167 - 3 0.0333 - 7 0.0333 - 8 0.0333 - 13 0.0833 - 14 0.0833 - 15 0.0333 - 21 0.117 - 28 0.0333 - 29 0.0333 - 30 0.0167 - 31 0.1 - 33 0.0333 - 41 0.0167 - 42 0.0333 - 47 0.0333 - - 8 6320 35 0 - 0 0.424 - 1 0.00364 - 2 0.0198 - 3 0.00301 - 4 0.0399 - 7 0.0562 - 8 0.00918 - 9 0.000316 - 10 0.000949 - 13 0.0546 - 14 0.0835 - 15 0.00411 - 16 0.000475 - 18 0.00475 - 19 0.0158 - 20 0.00443 - 21 0.0685 - 22 0.00127 - 23 0.000158 - 24 0.000475 - 26 0.00459 - 28 0.0309 - 29 0.0267 - 30 0.0101 - 31 0.0258 - 32 0.0114 - 33 0.0184 - 37 0.000633 - 40 0.000158 - 41 0.0375 - 42 0.00301 - 44 0.000475 - 45 0.0209 - 46 0.00111 - 47 0.013 - - 9 432 27 0 - 0 0.449 - 1 0.00463 - 2 0.0648 - 3 0.00926 - 4 0.0394 - 7 0.0347 - 8 0.00231 - 13 0.0509 - 14 0.0417 - 15 0.00463 - 18 0.00231 - 19 0.0417 - 20 0.00231 - 21 0.0255 - 24 0.00231 - 26 0.00231 - 28 0.0278 - 29 0.0486 - 30 0.0347 - 31 0.0139 - 32 0.0185 - 33 0.0208 - 34 0.00231 - 41 0.0301 - 42 0.00231 - 45 0.0139 - 47 0.00926 - - 10 72 9 0 - 0 0.0694 - 2 0.0278 - 4 0.361 - 7 0.167 - 18 0.222 - 20 0.111 - 29 0.0139 - 42 0.0139 - 46 0.0139 - - 13 133 22 0 - 0 0.105 - 2 0.0602 - 3 0.0602 - 4 0.128 - 7 0.0902 - 8 0.0752 - 13 0.18 - 14 0.0226 - 15 0.015 - 18 0.0226 - 20 0.0376 - 21 0.0226 - 25 0.00752 - 26 0.015 - 28 0.0226 - 29 0.015 - 30 0.0226 - 31 0.0376 - 33 0.00752 - 41 0.0226 - 45 0.015 - 47 0.015 - - 14 5 5 0 - 4 0.2 - 14 0.2 - 33 0.2 - 42 0.2 - 47 0.2 - - 15 130 17 0 - 0 0.0231 - 2 0.0462 - 4 0.369 - 7 0.2 - 8 0.0385 - 15 0.0308 - 18 0.0231 - 20 0.0154 - 26 0.00769 - 28 0.0154 - 31 0.0231 - 33 0.0154 - 41 0.0385 - 43 0.00769 - 44 0.00769 - 45 0.0154 - 47 0.123 - - 21 2958 36 0 - 0 0.305 - 1 0.00338 - 2 0.0389 - 3 0.00507 - 4 0.2 - 7 0.069 - 8 0.00541 - 9 0.000338 - 13 0.0433 - 14 0.0237 - 15 0.0027 - 16 0.000338 - 18 0.0112 - 19 0.0128 - 20 0.0128 - 21 0.0541 - 22 0.00101 - 23 0.000338 - 24 0.00169 - 25 0.000338 - 26 0.00676 - 28 0.0284 - 29 0.0274 - 30 0.0145 - 31 0.0213 - 32 0.0139 - 33 0.0176 - 35 0.000338 - 37 0.00169 - 41 0.0311 - 42 0.00541 - 43 0.000338 - 44 0.00135 - 45 0.027 - 46 0.000338 - 47 0.0112 - - 22 451 23 0 - 0 0.275 - 2 0.0466 - 3 0.00222 - 4 0.208 - 7 0.0288 - 13 0.0355 - 14 0.071 - 15 0.0111 - 18 0.00443 - 19 0.0333 - 20 0.00222 - 21 0.0244 - 24 0.00222 - 26 0.00665 - 28 0.0466 - 29 0.0244 - 30 0.0399 - 31 0.0222 - 32 0.00443 - 33 0.0177 - 41 0.0443 - 45 0.02 - 47 0.0288 - - 23 286 18 0 - 0 0.0664 - 2 0.0524 - 3 0.028 - 4 0.647 - 8 0.0035 - 13 0.0105 - 14 0.0035 - 15 0.0035 - 18 0.0559 - 19 0.0035 - 20 0.0559 - 21 0.0105 - 28 0.0035 - 31 0.0035 - 32 0.0035 - 41 0.021 - 42 0.0035 - 47 0.0245 - - 24 7 2 0 - 0 0.857 - 21 0.143 - - 28 9 6 0 - 15 0.111 - 19 0.111 - 21 0.111 - 26 0.333 - 28 0.222 - 45 0.111 - - 29 5 4 0 - 2 0.4 - 13 0.2 - 21 0.2 - 32 0.2 - - 30 38 12 0 - 0 0.553 - 4 0.0526 - 7 0.0263 - 13 0.0263 - 14 0.0263 - 21 0.0789 - 28 0.0263 - 31 0.0526 - 32 0.0263 - 41 0.0526 - 45 0.0263 - 47 0.0526 - - 31 286 25 0 - 0 0.381 - 1 0.0035 - 2 0.0105 - 3 0.00699 - 4 0.042 - 7 0.0245 - 8 0.0035 - 9 0.0035 - 13 0.0385 - 14 0.105 - 15 0.0035 - 19 0.014 - 20 0.0035 - 21 0.119 - 22 0.0035 - 25 0.0035 - 28 0.049 - 29 0.042 - 30 0.0105 - 31 0.0105 - 32 0.0105 - 33 0.0385 - 41 0.014 - 45 0.021 - 47 0.0385 - - 32 2 1 0 - 14 1 - - 39 234 16 0 - 2 0.0128 - 4 0.662 - 7 0.0342 - 8 0.0812 - 9 0.0128 - 13 0.00427 - 18 0.047 - 20 0.0427 - 28 0.0171 - 29 0.00855 - 30 0.00427 - 31 0.0128 - 36 0.0128 - 41 0.0342 - 42 0.00855 - 44 0.00427 - - 44 1 1 0 - 3 1 - - 45 74 15 0 - 0 0.581 - 1 0.0135 - 2 0.027 - 3 0.0135 - 4 0.0541 - 7 0.108 - 8 0.0405 - 13 0.0676 - 14 0.0135 - 18 0.0135 - 19 0.0135 - 21 0.0135 - 28 0.0135 - 30 0.0135 - 31 0.0135 - - 48 753 27 0 - 0 0.493 - 1 0.00531 - 2 0.0372 - 3 0.00133 - 4 0.089 - 7 0.0266 - 8 0.00266 - 13 0.0505 - 14 0.0398 - 15 0.00133 - 18 0.0186 - 19 0.00797 - 20 0.00797 - 21 0.0544 - 24 0.00266 - 26 0.00266 - 28 0.0133 - 29 0.0133 - 30 0.0093 - 31 0.00664 - 32 0.00531 - 33 0.0146 - 41 0.0452 - 42 0.0186 - 45 0.0212 - 46 0.00266 - 47 0.0093 - - 49 148 24 0 - 0 0.412 - 1 0.00676 - 2 0.0405 - 3 0.00676 - 4 0.142 - 7 0.027 - 13 0.00676 - 14 0.0203 - 15 0.0135 - 18 0.0135 - 19 0.00676 - 21 0.0405 - 26 0.00676 - 28 0.0608 - 29 0.0135 - 30 0.00676 - 31 0.0405 - 32 0.0135 - 33 0.0135 - 41 0.0473 - 42 0.00676 - 45 0.0203 - 46 0.00676 - 47 0.027 - - 55 268 22 0 - 0 0.31 - 2 0.0373 - 3 0.00373 - 4 0.00746 - 7 0.0187 - 13 0.0224 - 14 0.0261 - 16 0.00373 - 18 0.00373 - 19 0.00746 - 21 0.0299 - 24 0.00373 - 26 0.0149 - 28 0.0299 - 29 0.056 - 30 0.0261 - 31 0.00746 - 33 0.00746 - 41 0.347 - 42 0.0187 - 45 0.00746 - 47 0.0112 - - 57 3 3 0 - 2 0.333 - 13 0.333 - 41 0.333 - - 60 843 26 0 - 0 0.0119 - 2 0.00949 - 3 0.00356 - 4 0.619 - 7 0.051 - 8 0.0605 - 13 0.00356 - 15 0.013 - 16 0.00119 - 18 0.0652 - 19 0.00119 - 20 0.0522 - 21 0.00237 - 28 0.0142 - 29 0.00119 - 30 0.00593 - 31 0.0225 - 32 0.00237 - 33 0.00119 - 36 0.00237 - 41 0.019 - 42 0.0107 - 43 0.00119 - 44 0.0202 - 45 0.00237 - 47 0.00237 - - 48 771 28 1 - 0 0.481 - 1 0.00519 - 2 0.0389 - 3 0.00259 - 4 0.0908 - 7 0.0259 - 8 0.00259 - 13 0.0493 - 14 0.0389 - 15 0.0013 - 18 0.0182 - 19 0.00778 - 20 0.00778 - 21 0.0584 - 22 0.0013 - 24 0.00259 - 26 0.00259 - 28 0.013 - 29 0.013 - 30 0.00908 - 31 0.00649 - 32 0.00519 - 33 0.0143 - 41 0.0441 - 42 0.0182 - 45 0.0298 - 46 0.00259 - 47 0.00908 - - 8 2 2 0 - 14 0.5 - 29 0.5 - - 49 153 24 9 - 0 0.399 - 1 0.00654 - 2 0.0392 - 3 0.00654 - 4 0.137 - 7 0.0261 - 13 0.00654 - 14 0.0196 - 15 0.0131 - 18 0.0131 - 19 0.00654 - 21 0.0588 - 26 0.00654 - 28 0.0588 - 29 0.0131 - 30 0.00654 - 31 0.0392 - 32 0.0131 - 33 0.0131 - 41 0.0523 - 42 0.00654 - 45 0.0261 - 46 0.00654 - 47 0.0261 - - 4 2 2 0 - 7 0.5 - 47 0.5 - - 8 94 19 0 - 0 0.457 - 1 0.0106 - 2 0.0319 - 4 0.17 - 7 0.0106 - 14 0.0106 - 19 0.0106 - 21 0.0532 - 26 0.0106 - 28 0.0638 - 29 0.0213 - 30 0.0106 - 31 0.0319 - 32 0.0213 - 33 0.0106 - 41 0.0319 - 45 0.0213 - 46 0.0106 - 47 0.0106 - - 9 3 1 0 - 28 1 - - 22 4 4 0 - 2 0.25 - 13 0.25 - 31 0.25 - 47 0.25 - - 30 3 3 0 - 14 0.333 - 18 0.333 - 41 0.333 - - 31 27 11 0 - 0 0.37 - 2 0.037 - 3 0.037 - 4 0.185 - 7 0.0741 - 18 0.037 - 21 0.0741 - 31 0.037 - 33 0.037 - 45 0.0741 - 47 0.037 - - 47 5 5 0 - 0 0.2 - 15 0.2 - 21 0.2 - 31 0.2 - 42 0.2 - - 48 3 3 0 - 0 0.333 - 14 0.333 - 15 0.333 - - 55 2 1 0 - 41 1 - - 50 5 4 0 - 8 0.4 - 13 0.2 - 28 0.2 - 46 0.2 - - 55 276 23 7 - 0 0.301 - 2 0.0362 - 3 0.0109 - 4 0.00725 - 7 0.0181 - 13 0.0217 - 14 0.029 - 16 0.00362 - 18 0.00362 - 19 0.00725 - 21 0.0435 - 24 0.00362 - 26 0.0145 - 28 0.029 - 29 0.0543 - 30 0.0254 - 31 0.00725 - 33 0.00725 - 41 0.337 - 42 0.0181 - 44 0.00362 - 45 0.00725 - 47 0.0109 - - 8 141 15 0 - 0 0.206 - 2 0.0355 - 4 0.00709 - 7 0.0213 - 13 0.0142 - 14 0.00709 - 16 0.00709 - 19 0.0142 - 21 0.0567 - 29 0.00709 - 30 0.0142 - 33 0.00709 - 41 0.582 - 45 0.00709 - 47 0.0142 - - 9 97 15 0 - 0 0.423 - 2 0.0309 - 7 0.0206 - 13 0.0309 - 14 0.0309 - 21 0.0309 - 24 0.0103 - 26 0.0412 - 28 0.0515 - 29 0.144 - 30 0.0412 - 33 0.0103 - 41 0.0722 - 42 0.0515 - 47 0.0103 - - 21 8 6 0 - 0 0.25 - 3 0.125 - 13 0.125 - 14 0.25 - 30 0.125 - 45 0.125 - - 22 12 6 0 - 0 0.333 - 2 0.0833 - 21 0.0833 - 28 0.25 - 31 0.167 - 41 0.0833 - - 47 5 4 0 - 0 0.2 - 3 0.4 - 14 0.2 - 44 0.2 - - 48 1 1 0 - 18 1 - - 55 2 2 0 - 2 0.5 - 4 0.5 - - 57 5 5 0 - 2 0.2 - 9 0.2 - 13 0.2 - 31 0.2 - 41 0.2 - - 58 4 3 0 - 0 0.25 - 2 0.5 - 21 0.25 - - 60 843 26 5 - 0 0.0119 - 2 0.00949 - 3 0.00356 - 4 0.619 - 7 0.051 - 8 0.0605 - 13 0.00356 - 15 0.013 - 16 0.00119 - 18 0.0652 - 19 0.00119 - 20 0.0522 - 21 0.00237 - 28 0.0142 - 29 0.00119 - 30 0.00593 - 31 0.0225 - 32 0.00237 - 33 0.00119 - 36 0.00237 - 41 0.019 - 42 0.0107 - 43 0.00119 - 44 0.0202 - 45 0.00237 - 47 0.00237 - - 9 7 5 0 - 0 0.286 - 15 0.143 - 28 0.286 - 41 0.143 - 45 0.143 - - 13 117 18 0 - 0 0.0256 - 2 0.00855 - 4 0.282 - 7 0.308 - 8 0.00855 - 13 0.00855 - 15 0.0855 - 16 0.00855 - 18 0.0427 - 20 0.0598 - 21 0.00855 - 28 0.0256 - 29 0.00855 - 31 0.0171 - 32 0.00855 - 36 0.00855 - 41 0.0342 - 42 0.0513 - - 14 5 4 0 - 4 0.4 - 18 0.2 - 30 0.2 - 43 0.2 - - 21 4 3 0 - 0 0.5 - 21 0.25 - 28 0.25 - - 47 702 21 0 - 0 0.00285 - 2 0.00997 - 3 0.00427 - 4 0.689 - 7 0.00997 - 8 0.0712 - 13 0.00285 - 18 0.0698 - 19 0.00142 - 20 0.0513 - 28 0.00712 - 30 0.0057 - 31 0.0242 - 32 0.00142 - 33 0.00142 - 36 0.00142 - 41 0.0128 - 42 0.00427 - 44 0.0242 - 45 0.00142 - 47 0.00285 - - 64 4 2 0 - 9 0.25 - 13 0.75 - -49 42427 42 32 - 0 0.124 - 1 0.000896 - 2 0.0365 - 3 0.00983 - 4 0.00596 - 5 0.00099 - 6 0.000165 - 7 0.0272 - 8 0.00695 - 9 0.00104 - 10 0.000754 - 12 0.0316 - 13 0.111 - 14 0.0815 - 15 0.04 - 16 0.00189 - 17 9.43e-05 - 18 0.000707 - 19 0.0424 - 20 4.71e-05 - 21 0.054 - 22 0.00429 - 23 0.00099 - 24 0.00568 - 26 0.00653 - 28 0.0383 - 29 0.0368 - 30 0.025 - 31 0.0372 - 32 0.0107 - 33 0.0115 - 34 0.00938 - 35 0.00481 - 37 0.00033 - 40 9.43e-05 - 41 0.112 - 42 0.0079 - 43 0.000754 - 44 0.00113 - 45 0.00988 - 46 0.00189 - 47 0.0968 - - 2 138 19 10 - 2 0.0145 - 3 0.0145 - 4 0.0725 - 7 0.087 - 8 0.029 - 9 0.0145 - 10 0.00725 - 13 0.029 - 14 0.00725 - 19 0.00725 - 21 0.536 - 22 0.0725 - 24 0.00725 - 26 0.00725 - 31 0.00725 - 41 0.0435 - 45 0.00725 - 46 0.00725 - 47 0.029 - - 2 2 2 0 - 2 0.5 - 3 0.5 - - 7 9 1 0 - 7 1 - - 8 5 2 0 - 7 0.6 - 8 0.4 - - 9 2 1 0 - 9 1 - - 10 1 1 0 - 10 1 - - 13 3 2 0 - 4 0.333 - 13 0.667 - - 21 82 7 0 - 8 0.0122 - 13 0.0122 - 21 0.878 - 22 0.0122 - 26 0.0122 - 41 0.061 - 47 0.0122 - - 22 10 2 0 - 14 0.1 - 22 0.9 - - 24 1 1 0 - 24 1 - - 47 20 10 0 - 2 0.05 - 4 0.45 - 8 0.05 - 13 0.05 - 19 0.05 - 21 0.05 - 31 0.05 - 45 0.05 - 46 0.05 - 47 0.15 - - 3 35 11 3 - 2 0.0286 - 4 0.0286 - 7 0.0286 - 14 0.114 - 16 0.0286 - 26 0.371 - 28 0.0286 - 29 0.114 - 30 0.0286 - 31 0.0286 - 41 0.2 - - 13 3 3 0 - 4 0.333 - 26 0.333 - 28 0.333 - - 26 10 4 0 - 7 0.1 - 14 0.1 - 29 0.1 - 41 0.7 - - 47 20 6 0 - 2 0.05 - 14 0.15 - 26 0.55 - 29 0.15 - 30 0.05 - 31 0.05 - - 4 146 26 8 - 0 0.151 - 1 0.00685 - 2 0.00685 - 3 0.0274 - 4 0.00685 - 7 0.349 - 8 0.0205 - 12 0.00685 - 13 0.0342 - 14 0.0616 - 15 0.0137 - 17 0.0274 - 19 0.0205 - 21 0.0479 - 26 0.00685 - 28 0.0342 - 29 0.0137 - 30 0.0205 - 31 0.0342 - 33 0.00685 - 34 0.00685 - 41 0.0274 - 42 0.0137 - 44 0.00685 - 45 0.0274 - 47 0.0205 - - 2 10 6 0 - 0 0.5 - 1 0.1 - 15 0.1 - 21 0.1 - 26 0.1 - 31 0.1 - - 7 9 8 0 - 8 0.111 - 13 0.222 - 15 0.111 - 21 0.111 - 29 0.111 - 31 0.111 - 45 0.111 - 47 0.111 - - 8 4 3 0 - 8 0.25 - 17 0.5 - 45 0.25 - - 9 4 3 0 - 0 0.5 - 13 0.25 - 31 0.25 - - 13 9 7 0 - 3 0.111 - 7 0.111 - 8 0.111 - 12 0.111 - 19 0.222 - 41 0.222 - 45 0.111 - - 21 17 10 0 - 0 0.294 - 7 0.0588 - 13 0.0588 - 14 0.0588 - 21 0.176 - 29 0.0588 - 30 0.0588 - 41 0.0588 - 42 0.118 - 45 0.0588 - - 22 14 6 0 - 0 0.429 - 17 0.143 - 28 0.214 - 31 0.0714 - 33 0.0714 - 47 0.0714 - - 47 77 16 0 - 0 0.0519 - 2 0.013 - 3 0.039 - 4 0.013 - 7 0.636 - 13 0.013 - 14 0.0909 - 19 0.013 - 21 0.026 - 28 0.013 - 30 0.026 - 31 0.013 - 34 0.013 - 41 0.013 - 44 0.013 - 47 0.013 - - 5 2 2 0 - 7 0.5 - 14 0.5 - - 6 14 7 2 - 2 0.0714 - 6 0.5 - 13 0.0714 - 21 0.0714 - 41 0.143 - 42 0.0714 - 45 0.0714 - - 6 7 6 0 - 2 0.143 - 13 0.143 - 21 0.143 - 41 0.286 - 42 0.143 - 45 0.143 - - 47 7 1 0 - 6 1 - - 7 947 30 7 - 0 0.103 - 2 0.0454 - 3 0.00528 - 4 0.0127 - 7 0.0275 - 8 0.0158 - 9 0.0116 - 12 0.00422 - 13 0.13 - 14 0.106 - 15 0.0106 - 19 0.0106 - 21 0.0232 - 22 0.0422 - 23 0.00106 - 24 0.00528 - 28 0.0465 - 29 0.0232 - 30 0.0338 - 31 0.038 - 32 0.0106 - 33 0.0095 - 34 0.00106 - 35 0.00106 - 41 0.229 - 42 0.0106 - 44 0.00106 - 45 0.00317 - 46 0.00317 - 47 0.0348 - - 2 12 7 0 - 2 0.0833 - 21 0.0833 - 28 0.167 - 30 0.25 - 32 0.0833 - 33 0.167 - 47 0.167 - - 4 49 14 0 - 4 0.0408 - 7 0.0204 - 8 0.0612 - 12 0.0204 - 13 0.286 - 14 0.102 - 15 0.0408 - 19 0.0408 - 21 0.0816 - 24 0.0408 - 28 0.102 - 31 0.102 - 41 0.0408 - 47 0.0204 - - 8 3 3 0 - 9 0.333 - 14 0.333 - 47 0.333 - - 10 127 17 0 - 0 0.0551 - 2 0.134 - 3 0.00787 - 7 0.165 - 8 0.0157 - 12 0.0157 - 13 0.00787 - 14 0.0394 - 15 0.00787 - 21 0.0315 - 28 0.0709 - 30 0.0236 - 31 0.0157 - 34 0.00787 - 41 0.299 - 42 0.0394 - 47 0.063 - - 13 5 3 0 - 0 0.4 - 13 0.2 - 31 0.4 - - 21 75 20 0 - 0 0.107 - 2 0.0133 - 4 0.0267 - 7 0.0133 - 8 0.08 - 13 0.12 - 14 0.0667 - 15 0.0133 - 21 0.0533 - 22 0.107 - 24 0.04 - 28 0.0267 - 29 0.0133 - 31 0.0133 - 32 0.0133 - 35 0.0133 - 41 0.0933 - 42 0.0133 - 46 0.0133 - 47 0.16 - - 47 667 27 0 - 0 0.12 - 2 0.0345 - 3 0.006 - 4 0.012 - 7 0.003 - 8 0.006 - 9 0.015 - 12 0.0015 - 13 0.145 - 14 0.124 - 15 0.009 - 19 0.012 - 21 0.0135 - 22 0.048 - 23 0.0015 - 28 0.0375 - 29 0.0315 - 30 0.039 - 31 0.039 - 32 0.012 - 33 0.0105 - 41 0.25 - 42 0.006 - 44 0.0015 - 45 0.0045 - 46 0.003 - 47 0.0135 - - 8 249 26 3 - 0 0.0723 - 2 0.0723 - 3 0.012 - 4 0.0201 - 7 0.0482 - 8 0.0161 - 13 0.12 - 14 0.108 - 15 0.0281 - 19 0.0161 - 21 0.0281 - 22 0.0201 - 23 0.0161 - 24 0.00803 - 28 0.0683 - 29 0.0482 - 30 0.0442 - 31 0.0281 - 32 0.0161 - 33 0.0161 - 41 0.0643 - 42 0.00402 - 44 0.00402 - 45 0.00803 - 46 0.00402 - 47 0.108 - - 2 3 2 0 - 30 0.333 - 41 0.667 - - 13 11 8 0 - 2 0.0909 - 7 0.0909 - 13 0.273 - 28 0.0909 - 29 0.182 - 31 0.0909 - 41 0.0909 - 47 0.0909 - - 21 2 2 0 - 4 0.5 - 28 0.5 - - 9 115 18 1 - 0 0.0696 - 2 0.0348 - 3 0.0783 - 4 0.0435 - 8 0.0087 - 13 0.2 - 14 0.139 - 15 0.0087 - 21 0.0261 - 28 0.0522 - 29 0.191 - 30 0.0174 - 31 0.0087 - 32 0.0261 - 33 0.0174 - 41 0.0087 - 45 0.0174 - 47 0.0522 - - 7 9 6 0 - 0 0.222 - 4 0.111 - 13 0.111 - 14 0.333 - 28 0.111 - 45 0.111 - - 10 136 9 1 - 2 0.00735 - 4 0.00735 - 7 0.934 - 13 0.00735 - 14 0.00735 - 18 0.00735 - 19 0.00735 - 33 0.00735 - 41 0.0147 - - 2 1 1 0 - 18 1 - - 11 6 1 0 - 47 1 - - 13 104 21 2 - 0 0.0577 - 2 0.0481 - 3 0.0481 - 4 0.0865 - 7 0.0577 - 8 0.135 - 13 0.0865 - 14 0.0385 - 18 0.00962 - 19 0.0192 - 21 0.00962 - 26 0.0288 - 28 0.0577 - 29 0.0385 - 30 0.125 - 31 0.0577 - 32 0.00962 - 33 0.00962 - 34 0.00962 - 41 0.0577 - 42 0.00962 - - 7 12 8 0 - 0 0.25 - 2 0.0833 - 8 0.0833 - 19 0.0833 - 21 0.0833 - 29 0.0833 - 41 0.25 - 42 0.0833 - - 26 3 3 0 - 14 0.333 - 28 0.333 - 30 0.333 - - 14 6 3 0 - 3 0.333 - 13 0.5 - 41 0.167 - - 15 28 4 0 - 15 0.0714 - 18 0.0357 - 45 0.0714 - 47 0.821 - - 17 5 4 0 - 0 0.2 - 7 0.2 - 31 0.2 - 47 0.4 - - 19 7 4 0 - 3 0.143 - 14 0.571 - 34 0.143 - 45 0.143 - - 21 18349 40 5 - 0 0.129 - 1 0.000872 - 2 0.038 - 3 0.00283 - 4 0.00474 - 5 0.00114 - 7 0.0186 - 8 0.0055 - 9 0.000708 - 10 0.00125 - 12 0.0355 - 13 0.106 - 14 0.0861 - 15 0.0422 - 16 0.00202 - 18 0.00049 - 19 0.0463 - 20 5.45e-05 - 21 0.0809 - 22 0.00665 - 23 0.00196 - 24 0.00501 - 26 0.00605 - 28 0.0338 - 29 0.0305 - 30 0.0215 - 31 0.0337 - 32 0.00948 - 33 0.0101 - 34 0.0104 - 35 0.00534 - 37 0.000381 - 40 0.000109 - 41 0.105 - 42 0.00741 - 43 0.000708 - 44 0.00109 - 45 0.00981 - 46 0.00191 - 47 0.0966 - - 2 72 20 0 - 0 0.125 - 2 0.0417 - 4 0.0417 - 8 0.0139 - 13 0.125 - 14 0.111 - 15 0.0139 - 19 0.0556 - 21 0.0694 - 22 0.0278 - 23 0.0139 - 28 0.0556 - 30 0.0556 - 31 0.0556 - 33 0.0139 - 40 0.0139 - 41 0.0694 - 42 0.0278 - 45 0.0278 - 47 0.0417 - - 21 918 33 0 - 0 0.0915 - 2 0.0447 - 3 0.00109 - 4 0.00871 - 7 0.0229 - 8 0.012 - 9 0.00109 - 10 0.00763 - 12 0.0272 - 13 0.127 - 14 0.0915 - 15 0.0196 - 16 0.00218 - 18 0.00109 - 19 0.0272 - 21 0.0664 - 24 0.0185 - 26 0.00218 - 28 0.0566 - 29 0.037 - 30 0.0403 - 31 0.0632 - 32 0.0174 - 33 0.0153 - 34 0.00436 - 35 0.00109 - 41 0.0436 - 42 0.00871 - 43 0.00327 - 44 0.00218 - 45 0.0251 - 46 0.00436 - 47 0.105 - - 22 11 7 0 - 2 0.182 - 13 0.0909 - 19 0.0909 - 24 0.0909 - 28 0.273 - 31 0.182 - 47 0.0909 - - 26 2 2 0 - 2 0.5 - 29 0.5 - - 47 17337 40 0 - 0 0.131 - 1 0.000923 - 2 0.0375 - 3 0.00294 - 4 0.00438 - 5 0.00121 - 7 0.0185 - 8 0.00513 - 9 0.000692 - 10 0.000923 - 12 0.0362 - 13 0.105 - 14 0.0858 - 15 0.0435 - 16 0.00202 - 18 0.000461 - 19 0.0473 - 20 5.77e-05 - 21 0.0817 - 22 0.00692 - 23 0.00202 - 24 0.00427 - 26 0.00629 - 28 0.0322 - 29 0.0302 - 30 0.0204 - 31 0.032 - 32 0.00911 - 33 0.00981 - 34 0.0108 - 35 0.00559 - 37 0.000404 - 40 5.77e-05 - 41 0.109 - 42 0.00727 - 43 0.000577 - 44 0.00104 - 45 0.00894 - 46 0.00179 - 47 0.0964 - - 22 773 27 5 - 0 0.0414 - 1 0.00129 - 2 0.0388 - 3 0.00259 - 4 0.0233 - 7 0.0103 - 8 0.00647 - 12 0.0155 - 13 0.364 - 14 0.0893 - 15 0.0168 - 18 0.00129 - 19 0.0142 - 21 0.0349 - 24 0.00776 - 26 0.0194 - 28 0.0699 - 29 0.066 - 30 0.0401 - 31 0.0375 - 32 0.0233 - 33 0.022 - 35 0.00259 - 41 0.00906 - 42 0.00388 - 45 0.00259 - 47 0.0362 - - 2 10 6 0 - 2 0.2 - 14 0.1 - 26 0.2 - 32 0.2 - 33 0.1 - 41 0.2 - - 7 39 17 0 - 0 0.282 - 2 0.0513 - 4 0.0256 - 7 0.0256 - 8 0.0256 - 12 0.0769 - 13 0.128 - 14 0.0513 - 15 0.0513 - 19 0.0513 - 26 0.0769 - 28 0.0256 - 29 0.0256 - 32 0.0256 - 41 0.0256 - 42 0.0256 - 47 0.0256 - - 8 4 3 0 - 28 0.25 - 41 0.25 - 47 0.5 - - 21 119 22 0 - 0 0.0504 - 1 0.0084 - 2 0.0756 - 4 0.0336 - 7 0.0336 - 12 0.0168 - 13 0.0672 - 14 0.0672 - 15 0.0252 - 19 0.0168 - 21 0.134 - 24 0.0168 - 26 0.0252 - 28 0.109 - 29 0.0084 - 30 0.0588 - 31 0.0588 - 32 0.0252 - 41 0.0168 - 42 0.0168 - 45 0.0168 - 47 0.118 - - 47 601 24 0 - 0 0.025 - 2 0.0283 - 3 0.00333 - 4 0.0216 - 7 0.00499 - 8 0.00666 - 12 0.0116 - 13 0.446 - 14 0.0965 - 15 0.0133 - 18 0.00166 - 19 0.0116 - 21 0.0183 - 24 0.00666 - 26 0.0116 - 28 0.0649 - 29 0.0815 - 30 0.0399 - 31 0.0366 - 32 0.02 - 33 0.0266 - 35 0.00333 - 41 0.00166 - 47 0.0183 - - 23 76 21 2 - 0 0.184 - 2 0.0263 - 3 0.0132 - 4 0.0921 - 7 0.0395 - 12 0.0263 - 13 0.0789 - 14 0.0658 - 18 0.0132 - 19 0.0395 - 21 0.0132 - 26 0.0132 - 28 0.0132 - 29 0.0526 - 30 0.0132 - 31 0.0395 - 32 0.0132 - 33 0.0263 - 41 0.105 - 42 0.0395 - 47 0.0921 - - 21 35 14 0 - 0 0.0571 - 2 0.0571 - 3 0.0286 - 4 0.143 - 13 0.0857 - 14 0.0571 - 18 0.0286 - 19 0.0571 - 21 0.0286 - 29 0.0571 - 30 0.0286 - 41 0.143 - 42 0.0857 - 47 0.143 - - 47 36 15 0 - 0 0.306 - 4 0.0278 - 7 0.0556 - 12 0.0556 - 13 0.0833 - 14 0.0833 - 19 0.0278 - 26 0.0278 - 28 0.0278 - 29 0.0556 - 31 0.0833 - 32 0.0278 - 33 0.0556 - 41 0.0278 - 47 0.0556 - - 24 97 16 1 - 0 0.144 - 2 0.0103 - 4 0.0206 - 8 0.0206 - 9 0.0103 - 13 0.134 - 14 0.0928 - 19 0.0309 - 21 0.0412 - 28 0.155 - 29 0.134 - 30 0.0722 - 31 0.0309 - 32 0.0206 - 33 0.0515 - 41 0.0309 - - 21 3 3 0 - 21 0.333 - 30 0.333 - 33 0.333 - - 26 19 7 2 - 3 0.526 - 8 0.0526 - 13 0.158 - 14 0.0526 - 21 0.105 - 30 0.0526 - 31 0.0526 - - 3 11 2 0 - 3 0.909 - 14 0.0909 - - 13 3 1 0 - 13 1 - - 28 9 5 0 - 2 0.111 - 21 0.111 - 26 0.111 - 41 0.556 - 42 0.111 - - 31 2 2 0 - 28 0.5 - 30 0.5 - - 37 3 2 0 - 28 0.333 - 47 0.667 - - 41 6 3 0 - 7 0.167 - 13 0.167 - 21 0.667 - - 42 2 2 0 - 21 0.5 - 31 0.5 - - 45 5 4 0 - 0 0.4 - 13 0.2 - 14 0.2 - 42 0.2 - - 47 19808 40 27 - 0 0.133 - 1 0.000959 - 2 0.0361 - 3 0.00979 - 4 0.00464 - 5 0.00106 - 7 0.022 - 8 0.00687 - 9 0.000808 - 10 0.000353 - 12 0.0339 - 13 0.105 - 14 0.0777 - 15 0.0428 - 16 0.00202 - 18 0.000757 - 19 0.0454 - 20 5.05e-05 - 21 0.0318 - 22 0.000252 - 23 5.05e-05 - 24 0.00596 - 26 0.00651 - 28 0.0409 - 29 0.0394 - 30 0.0268 - 31 0.0399 - 32 0.0114 - 33 0.0123 - 34 0.01 - 35 0.00515 - 37 0.000353 - 40 0.000101 - 41 0.12 - 42 0.00838 - 43 0.000808 - 44 0.00121 - 45 0.0105 - 46 0.00202 - 47 0.104 - - 2 16 11 0 - 3 0.0625 - 8 0.0625 - 13 0.0625 - 14 0.0625 - 19 0.0625 - 21 0.125 - 31 0.0625 - 41 0.125 - 45 0.0625 - 46 0.0625 - 47 0.25 - - 3 23 10 0 - 4 0.0435 - 7 0.0435 - 14 0.174 - 16 0.0435 - 26 0.087 - 28 0.0435 - 29 0.174 - 30 0.0435 - 31 0.0435 - 41 0.304 - - 4 91 25 0 - 0 0.242 - 1 0.011 - 2 0.011 - 3 0.044 - 4 0.011 - 7 0.022 - 8 0.033 - 12 0.011 - 13 0.0549 - 14 0.0989 - 15 0.022 - 19 0.033 - 21 0.0549 - 26 0.011 - 28 0.0549 - 29 0.022 - 30 0.033 - 31 0.0549 - 33 0.011 - 34 0.011 - 41 0.044 - 42 0.022 - 44 0.011 - 45 0.044 - 47 0.033 - - 6 6 5 0 - 2 0.167 - 13 0.167 - 41 0.333 - 42 0.167 - 45 0.167 - - 7 750 29 0 - 0 0.131 - 2 0.0453 - 3 0.00667 - 4 0.004 - 7 0.0347 - 8 0.0187 - 9 0.00267 - 12 0.00533 - 13 0.0747 - 14 0.056 - 15 0.0133 - 19 0.0133 - 21 0.024 - 22 0.00133 - 24 0.00667 - 28 0.0587 - 29 0.0293 - 30 0.0427 - 31 0.048 - 32 0.0133 - 33 0.012 - 34 0.00133 - 35 0.00133 - 41 0.289 - 42 0.0133 - 44 0.00133 - 45 0.004 - 46 0.004 - 47 0.044 - - 8 223 25 0 - 0 0.0807 - 2 0.0583 - 3 0.0135 - 4 0.00448 - 7 0.0404 - 8 0.0179 - 13 0.13 - 14 0.112 - 15 0.0269 - 19 0.0179 - 21 0.0314 - 22 0.00448 - 24 0.00897 - 28 0.0673 - 29 0.0538 - 30 0.0493 - 31 0.0314 - 32 0.0179 - 33 0.0179 - 41 0.0717 - 42 0.00448 - 44 0.00448 - 45 0.00897 - 46 0.00448 - 47 0.121 - - 9 67 16 0 - 0 0.119 - 2 0.0299 - 4 0.0149 - 13 0.0597 - 14 0.0746 - 15 0.0149 - 21 0.0299 - 28 0.0896 - 29 0.328 - 30 0.0299 - 31 0.0149 - 32 0.0448 - 33 0.0299 - 41 0.0149 - 45 0.0149 - 47 0.0896 - - 10 8 7 0 - 4 0.125 - 13 0.125 - 14 0.125 - 18 0.125 - 19 0.125 - 33 0.125 - 41 0.25 - - 11 6 1 0 - 47 1 - - 13 69 19 0 - 0 0.087 - 2 0.029 - 3 0.029 - 7 0.0145 - 8 0.0435 - 13 0.116 - 14 0.058 - 18 0.0145 - 19 0.029 - 21 0.0145 - 28 0.087 - 29 0.058 - 30 0.188 - 31 0.087 - 32 0.0145 - 33 0.0145 - 34 0.0145 - 41 0.087 - 42 0.0145 - - 14 4 2 0 - 13 0.75 - 41 0.25 - - 15 27 4 0 - 15 0.037 - 18 0.037 - 45 0.0741 - 47 0.852 - - 17 4 3 0 - 0 0.25 - 31 0.25 - 47 0.5 - - 19 7 4 0 - 3 0.143 - 14 0.571 - 34 0.143 - 45 0.143 - - 21 16535 40 0 - 0 0.143 - 1 0.000968 - 2 0.0372 - 3 0.00302 - 4 0.00423 - 5 0.00127 - 7 0.0161 - 8 0.00593 - 9 0.000786 - 10 0.000363 - 12 0.0394 - 13 0.102 - 14 0.0788 - 15 0.0469 - 16 0.00224 - 18 0.000544 - 19 0.0513 - 20 6.05e-05 - 21 0.0339 - 22 0.000181 - 23 6.05e-05 - 24 0.00538 - 26 0.00659 - 28 0.0374 - 29 0.0337 - 30 0.0238 - 31 0.0374 - 32 0.0105 - 33 0.0112 - 34 0.0116 - 35 0.00593 - 37 0.000423 - 40 0.000121 - 41 0.117 - 42 0.00816 - 43 0.000786 - 44 0.00121 - 45 0.0107 - 46 0.00212 - 47 0.107 - - 22 466 26 0 - 0 0.0687 - 1 0.00215 - 2 0.0429 - 4 0.00858 - 7 0.0172 - 8 0.00644 - 12 0.0258 - 13 0.0987 - 14 0.088 - 15 0.0279 - 18 0.00215 - 19 0.0236 - 21 0.0236 - 24 0.0129 - 26 0.0322 - 28 0.116 - 29 0.109 - 30 0.0665 - 31 0.0622 - 32 0.0386 - 33 0.0365 - 35 0.00429 - 41 0.015 - 42 0.00644 - 45 0.00429 - 47 0.0601 - - 23 72 20 0 - 0 0.194 - 2 0.0278 - 3 0.0139 - 4 0.0833 - 12 0.0278 - 13 0.0833 - 14 0.0694 - 18 0.0139 - 19 0.0417 - 21 0.0139 - 26 0.0139 - 28 0.0139 - 29 0.0556 - 30 0.0139 - 31 0.0417 - 32 0.0139 - 33 0.0278 - 41 0.111 - 42 0.0417 - 47 0.0972 - - 24 90 14 0 - 0 0.156 - 4 0.0111 - 8 0.0111 - 13 0.133 - 14 0.1 - 19 0.0333 - 21 0.0333 - 28 0.156 - 29 0.144 - 30 0.0778 - 31 0.0333 - 32 0.0222 - 33 0.0556 - 41 0.0333 - - 26 2 2 0 - 30 0.5 - 31 0.5 - - 28 8 4 0 - 2 0.125 - 21 0.125 - 41 0.625 - 42 0.125 - - 31 2 2 0 - 28 0.5 - 30 0.5 - - 37 3 2 0 - 28 0.333 - 47 0.667 - - 45 4 3 0 - 0 0.5 - 13 0.25 - 14 0.25 - - 48 5 4 0 - 0 0.2 - 13 0.4 - 14 0.2 - 30 0.2 - - 49 347 26 0 - 0 0.0519 - 2 0.0202 - 4 0.00288 - 7 0.0202 - 8 0.0144 - 10 0.00288 - 13 0.15 - 14 0.098 - 15 0.0144 - 16 0.00288 - 18 0.00288 - 19 0.0173 - 21 0.0288 - 24 0.0231 - 28 0.0778 - 29 0.0605 - 30 0.0663 - 31 0.107 - 32 0.0288 - 33 0.0403 - 34 0.00288 - 41 0.0951 - 42 0.0173 - 44 0.00288 - 45 0.0115 - 47 0.0403 - - 55 960 29 0 - 0 0.026 - 1 0.00104 - 2 0.0177 - 3 0.132 - 4 0.00208 - 7 0.12 - 8 0.00417 - 9 0.00104 - 13 0.155 - 14 0.0521 - 15 0.0354 - 16 0.00104 - 19 0.00729 - 21 0.00833 - 24 0.00833 - 26 0.00104 - 28 0.0156 - 29 0.0667 - 30 0.00938 - 31 0.0406 - 32 0.00313 - 33 0.00208 - 34 0.00313 - 35 0.00104 - 41 0.142 - 42 0.00313 - 43 0.00313 - 45 0.00938 - 47 0.128 - - 60 5 4 0 - 0 0.2 - 28 0.2 - 29 0.4 - 33 0.2 - - 48 5 4 0 - 0 0.2 - 13 0.4 - 14 0.2 - 30 0.2 - - 49 357 27 2 - 0 0.0504 - 2 0.0224 - 4 0.0028 - 7 0.028 - 8 0.014 - 10 0.0028 - 13 0.148 - 14 0.098 - 15 0.014 - 16 0.0028 - 18 0.0028 - 19 0.0168 - 21 0.028 - 24 0.0252 - 26 0.0028 - 28 0.0756 - 29 0.0588 - 30 0.0644 - 31 0.104 - 32 0.028 - 33 0.0392 - 34 0.0028 - 41 0.0924 - 42 0.0196 - 44 0.0028 - 45 0.014 - 47 0.0392 - - 21 15 6 0 - 2 0.133 - 14 0.0667 - 21 0.0667 - 28 0.0667 - 31 0.0667 - 41 0.6 - - 41 3 3 0 - 13 0.333 - 14 0.333 - 42 0.333 - - 55 962 29 6 - 0 0.026 - 1 0.00104 - 2 0.0177 - 3 0.132 - 4 0.00208 - 7 0.121 - 8 0.00416 - 9 0.00104 - 13 0.156 - 14 0.052 - 15 0.0353 - 16 0.00104 - 19 0.00728 - 21 0.00832 - 24 0.00832 - 26 0.00104 - 28 0.0156 - 29 0.0665 - 30 0.00936 - 31 0.0405 - 32 0.00312 - 33 0.00208 - 34 0.00312 - 35 0.00104 - 41 0.141 - 42 0.00312 - 43 0.00312 - 45 0.00936 - 47 0.128 - - 6 1 1 0 - 30 1 - - 7 114 18 0 - 0 0.0263 - 2 0.00877 - 3 0.14 - 7 0.184 - 9 0.00877 - 13 0.132 - 14 0.0439 - 15 0.0614 - 21 0.0175 - 26 0.00877 - 29 0.0351 - 30 0.00877 - 31 0.0439 - 34 0.00877 - 35 0.00877 - 41 0.132 - 45 0.0263 - 47 0.105 - - 9 39 13 0 - 0 0.0769 - 2 0.0256 - 7 0.0769 - 13 0.0513 - 15 0.0256 - 24 0.0256 - 28 0.103 - 29 0.41 - 30 0.0256 - 31 0.0769 - 33 0.0256 - 41 0.0513 - 47 0.0256 - - 21 527 25 0 - 0 0.0266 - 2 0.0152 - 3 0.108 - 4 0.0038 - 7 0.0892 - 8 0.00759 - 13 0.186 - 14 0.0455 - 15 0.0493 - 16 0.0019 - 19 0.00759 - 21 0.0114 - 24 0.0133 - 28 0.00759 - 29 0.0531 - 30 0.00569 - 31 0.055 - 32 0.0038 - 33 0.0019 - 34 0.0038 - 41 0.108 - 42 0.0019 - 43 0.0038 - 45 0.0114 - 47 0.178 - - 22 269 17 0 - 0 0.0186 - 1 0.00372 - 2 0.0112 - 3 0.201 - 7 0.16 - 13 0.123 - 14 0.0743 - 19 0.0112 - 28 0.026 - 29 0.052 - 30 0.0112 - 31 0.00743 - 32 0.00372 - 41 0.227 - 42 0.00743 - 43 0.00372 - 47 0.0595 - - 47 5 3 0 - 2 0.6 - 13 0.2 - 14 0.2 - - 57 3 3 0 - 7 0.333 - 21 0.333 - 47 0.333 - - 60 5 4 0 - 0 0.2 - 28 0.2 - 29 0.4 - 33 0.2 - -50 1035 26 5 - 0 0.0058 - 2 0.0213 - 7 0.0174 - 8 0.0232 - 13 0.111 - 14 0.0889 - 15 0.0193 - 16 0.00193 - 19 0.00193 - 21 0.382 - 22 0.00193 - 24 0.00193 - 26 0.00483 - 28 0.00773 - 29 0.0058 - 30 0.00966 - 31 0.00773 - 32 0.00386 - 33 0.00773 - 41 0.222 - 42 0.0174 - 43 0.00193 - 44 0.00193 - 45 0.00193 - 46 0.00966 - 47 0.0213 - - 2 22 4 0 - 13 0.227 - 14 0.0455 - 22 0.0455 - 41 0.682 - - 7 223 5 3 - 7 0.00897 - 13 0.00897 - 14 0.00448 - 21 0.928 - 41 0.0493 - - 7 2 2 0 - 14 0.5 - 41 0.5 - - 21 11 2 0 - 13 0.182 - 41 0.818 - - 47 209 2 0 - 7 0.00957 - 21 0.99 - - 21 472 24 5 - 0 0.00636 - 2 0.0466 - 7 0.0275 - 8 0.0254 - 13 0.106 - 14 0.0932 - 15 0.0212 - 16 0.00212 - 19 0.00212 - 21 0.373 - 24 0.00212 - 28 0.00847 - 29 0.00636 - 30 0.0106 - 31 0.00847 - 32 0.00424 - 33 0.00847 - 41 0.189 - 42 0.0191 - 43 0.00212 - 44 0.00212 - 45 0.00212 - 46 0.0106 - 47 0.0233 - - 7 206 14 0 - 7 0.00485 - 8 0.0146 - 13 0.117 - 14 0.0922 - 15 0.00971 - 21 0.612 - 28 0.00485 - 29 0.00485 - 30 0.00485 - 31 0.00485 - 32 0.00971 - 41 0.0874 - 42 0.0243 - 46 0.00971 - - 8 4 3 0 - 0 0.25 - 8 0.5 - 33 0.25 - - 21 174 21 0 - 0 0.0115 - 7 0.00575 - 8 0.0402 - 13 0.149 - 14 0.144 - 15 0.046 - 16 0.00575 - 19 0.00575 - 24 0.00575 - 28 0.0172 - 29 0.0115 - 30 0.023 - 31 0.0172 - 33 0.0172 - 41 0.391 - 42 0.0172 - 43 0.00575 - 44 0.00575 - 45 0.00575 - 46 0.0172 - 47 0.0575 - - 26 5 3 0 - 41 0.6 - 42 0.2 - 47 0.2 - - 47 83 3 0 - 2 0.265 - 7 0.133 - 21 0.602 - - 28 5 1 0 - 26 1 - - 47 302 24 2 - 0 0.00993 - 7 0.00662 - 8 0.0397 - 13 0.189 - 14 0.152 - 15 0.0331 - 16 0.00331 - 19 0.00331 - 21 0.00993 - 22 0.00331 - 24 0.00331 - 28 0.0132 - 29 0.00993 - 30 0.0166 - 31 0.0132 - 32 0.00662 - 33 0.0132 - 41 0.381 - 42 0.0298 - 43 0.00331 - 44 0.00331 - 45 0.00331 - 46 0.0166 - 47 0.0364 - - 2 22 4 0 - 13 0.227 - 14 0.0455 - 22 0.0455 - 41 0.682 - - 7 15 4 0 - 13 0.133 - 14 0.0667 - 21 0.0667 - 41 0.733 - -51 1504 36 26 - 0 0.00399 - 2 0.0259 - 3 0.0153 - 4 0.000665 - 6 0.000665 - 7 0.118 - 8 0.00798 - 9 0.00266 - 10 0.000665 - 13 0.0465 - 14 0.0226 - 15 0.0426 - 16 0.00199 - 19 0.00266 - 21 0.0326 - 22 0.000665 - 24 0.00133 - 25 0.00864 - 27 0.00332 - 28 0.0166 - 29 0.00399 - 30 0.000665 - 31 0.00399 - 32 0.00332 - 33 0.00199 - 34 0.00798 - 35 0.00665 - 37 0.00798 - 40 0.00532 - 41 0.0951 - 42 0.0864 - 43 0.00465 - 44 0.00598 - 45 0.0598 - 46 0.00332 - 47 0.347 - - 2 50 6 0 - 13 0.14 - 14 0.02 - 41 0.24 - 42 0.04 - 45 0.02 - 47 0.54 - - 4 3 2 0 - 7 0.667 - 28 0.333 - - 7 7 5 0 - 2 0.143 - 35 0.286 - 41 0.143 - 45 0.143 - 47 0.286 - - 8 5 4 0 - 4 0.2 - 7 0.4 - 21 0.2 - 47 0.2 - - 21 48 11 0 - 2 0.229 - 7 0.167 - 10 0.0208 - 21 0.146 - 28 0.0208 - 35 0.0208 - 37 0.0833 - 41 0.0417 - 42 0.0208 - 45 0.0417 - 47 0.208 - - 35 4 4 0 - 2 0.25 - 21 0.25 - 42 0.25 - 43 0.25 - - 40 3 2 0 - 15 0.667 - 27 0.333 - - 41 96 15 8 - 0 0.0104 - 3 0.167 - 6 0.0104 - 8 0.0521 - 13 0.156 - 14 0.0417 - 15 0.323 - 16 0.0312 - 19 0.0312 - 21 0.0938 - 27 0.0417 - 28 0.0104 - 29 0.0104 - 30 0.0104 - 43 0.0104 - - 2 4 2 0 - 13 0.75 - 28 0.25 - - 45 2 2 0 - 19 0.5 - 29 0.5 - - 49 7 6 0 - 8 0.143 - 13 0.143 - 19 0.143 - 21 0.286 - 27 0.143 - 43 0.143 - - 55 48 9 0 - 3 0.312 - 8 0.0208 - 13 0.146 - 14 0.0208 - 15 0.292 - 16 0.0417 - 19 0.0208 - 21 0.0833 - 27 0.0625 - - 57 16 2 0 - 8 0.0625 - 15 0.938 - - 64 6 4 0 - 0 0.167 - 8 0.167 - 13 0.5 - 30 0.167 - - 69 2 2 0 - 3 0.5 - 6 0.5 - - 71 3 2 0 - 8 0.333 - 21 0.667 - - 42 78 15 4 - 3 0.0128 - 8 0.0128 - 13 0.218 - 14 0.167 - 15 0.269 - 21 0.0385 - 25 0.103 - 28 0.0128 - 29 0.0128 - 31 0.0385 - 32 0.0128 - 33 0.0128 - 43 0.0513 - 46 0.0128 - 47 0.0256 - - 45 24 6 0 - 13 0.125 - 14 0.125 - 15 0.5 - 21 0.0417 - 33 0.0417 - 43 0.167 - - 55 20 10 0 - 3 0.05 - 8 0.05 - 13 0.05 - 14 0.1 - 15 0.15 - 25 0.3 - 28 0.05 - 29 0.05 - 31 0.15 - 46 0.05 - - 62 19 3 0 - 13 0.632 - 14 0.211 - 15 0.158 - - 69 5 3 0 - 14 0.2 - 25 0.4 - 47 0.4 - - 45 37 5 0 - 41 0.0811 - 42 0.649 - 43 0.027 - 44 0.0541 - 47 0.189 - - 47 495 24 19 - 0 0.00404 - 2 0.0283 - 3 0.00202 - 7 0.178 - 13 0.0242 - 14 0.00606 - 15 0.00202 - 21 0.0121 - 24 0.00202 - 28 0.0202 - 29 0.00404 - 31 0.00202 - 32 0.00404 - 33 0.00202 - 34 0.0121 - 35 0.00202 - 37 0.00606 - 40 0.00404 - 41 0.0444 - 42 0.0525 - 44 0.00606 - 45 0.0525 - 46 0.00202 - 47 0.527 - - 2 42 5 0 - 13 0.119 - 41 0.19 - 42 0.0238 - 45 0.0238 - 47 0.643 - - 4 3 2 0 - 7 0.667 - 28 0.333 - - 21 24 7 0 - 2 0.0833 - 7 0.292 - 21 0.0417 - 28 0.0417 - 41 0.0417 - 45 0.0833 - 47 0.417 - - 41 2 2 0 - 13 0.5 - 21 0.5 - - 42 4 3 0 - 13 0.25 - 32 0.25 - 47 0.5 - - 45 8 2 0 - 44 0.125 - 47 0.875 - - 48 41 8 0 - 0 0.0244 - 7 0.439 - 21 0.0488 - 28 0.0244 - 37 0.0488 - 42 0.0244 - 45 0.0488 - 47 0.341 - - 49 47 8 0 - 2 0.0851 - 7 0.255 - 28 0.0213 - 37 0.0213 - 41 0.0638 - 42 0.0213 - 45 0.0213 - 47 0.511 - - 51 5 3 0 - 7 0.2 - 42 0.6 - 47 0.2 - - 52 7 3 0 - 40 0.143 - 45 0.429 - 47 0.429 - - 55 145 12 0 - 2 0.0138 - 7 0.166 - 14 0.0069 - 29 0.0069 - 33 0.0069 - 34 0.0414 - 35 0.0069 - 41 0.0276 - 42 0.0828 - 44 0.0069 - 45 0.0483 - 47 0.586 - - 57 55 15 0 - 0 0.0182 - 3 0.0182 - 7 0.127 - 13 0.0909 - 14 0.0182 - 15 0.0182 - 21 0.0182 - 28 0.0182 - 31 0.0182 - 41 0.0182 - 42 0.0364 - 44 0.0182 - 45 0.0364 - 46 0.0182 - 47 0.527 - - 64 18 4 0 - 2 0.0556 - 7 0.111 - 45 0.111 - 47 0.722 - - 65 1 1 0 - 40 1 - - 69 15 6 0 - 7 0.533 - 21 0.0667 - 29 0.0667 - 41 0.0667 - 42 0.0667 - 47 0.2 - - 71 13 7 0 - 2 0.231 - 14 0.0769 - 24 0.0769 - 28 0.154 - 41 0.0769 - 42 0.0769 - 47 0.308 - - 72 11 5 0 - 2 0.0909 - 28 0.0909 - 42 0.0909 - 45 0.273 - 47 0.455 - - 73 2 1 0 - 28 1 - - 74 17 4 0 - 7 0.0588 - 32 0.0588 - 41 0.0588 - 47 0.824 - - 48 49 12 3 - 0 0.0204 - 7 0.367 - 13 0.0408 - 15 0.0408 - 21 0.0612 - 28 0.0204 - 37 0.0408 - 40 0.0204 - 41 0.0204 - 42 0.0204 - 45 0.0612 - 47 0.286 - - 41 5 2 0 - 42 0.2 - 47 0.8 - - 42 2 2 0 - 15 0.5 - 21 0.5 - - 47 34 10 0 - 0 0.0294 - 7 0.529 - 13 0.0588 - 21 0.0588 - 28 0.0294 - 37 0.0588 - 40 0.0294 - 41 0.0294 - 45 0.0588 - 47 0.118 - - 49 64 14 3 - 2 0.0625 - 7 0.188 - 8 0.0156 - 13 0.0312 - 14 0.0156 - 19 0.0156 - 21 0.0312 - 28 0.0156 - 35 0.0156 - 37 0.0156 - 41 0.156 - 42 0.0469 - 45 0.0156 - 47 0.375 - - 41 8 2 0 - 41 0.125 - 47 0.875 - - 47 35 11 0 - 2 0.0286 - 7 0.314 - 8 0.0286 - 13 0.0571 - 14 0.0286 - 21 0.0571 - 35 0.0286 - 37 0.0286 - 41 0.2 - 42 0.0286 - 47 0.2 - - 49 3 3 0 - 2 0.333 - 7 0.333 - 28 0.333 - - 51 11 5 0 - 7 0.0909 - 41 0.0909 - 42 0.636 - 45 0.0909 - 47 0.0909 - - 52 11 4 0 - 40 0.0909 - 41 0.182 - 45 0.455 - 47 0.273 - - 55 273 23 6 - 2 0.00733 - 7 0.0879 - 8 0.00366 - 9 0.011 - 13 0.0183 - 14 0.0293 - 15 0.00733 - 21 0.033 - 25 0.00733 - 28 0.00366 - 29 0.00366 - 31 0.00366 - 33 0.00366 - 34 0.022 - 35 0.00366 - 37 0.00733 - 40 0.00733 - 41 0.194 - 42 0.117 - 44 0.011 - 45 0.103 - 46 0.00366 - 47 0.311 - - 2 2 2 0 - 33 0.5 - 47 0.5 - - 40 2 2 0 - 40 0.5 - 45 0.5 - - 41 57 7 0 - 2 0.0175 - 13 0.0175 - 21 0.0175 - 41 0.526 - 42 0.0351 - 45 0.0526 - 47 0.333 - - 42 26 3 0 - 42 0.0385 - 44 0.0769 - 47 0.885 - - 47 162 22 0 - 2 0.00617 - 7 0.13 - 8 0.00617 - 9 0.0185 - 13 0.0185 - 14 0.0432 - 15 0.0123 - 21 0.0494 - 25 0.0123 - 28 0.00617 - 29 0.00617 - 31 0.00617 - 34 0.037 - 35 0.00617 - 37 0.0123 - 40 0.00617 - 41 0.13 - 42 0.167 - 44 0.00617 - 45 0.142 - 46 0.00617 - 47 0.173 - - 62 5 2 0 - 7 0.6 - 47 0.4 - - 57 74 16 5 - 0 0.0135 - 3 0.0135 - 7 0.0946 - 8 0.0135 - 13 0.0676 - 14 0.0135 - 15 0.0135 - 21 0.0135 - 28 0.027 - 31 0.0135 - 41 0.243 - 42 0.027 - 44 0.0135 - 45 0.027 - 46 0.0135 - 47 0.392 - - 41 7 5 0 - 41 0.143 - 42 0.143 - 44 0.143 - 45 0.143 - 47 0.429 - - 42 24 3 0 - 41 0.458 - 45 0.0417 - 47 0.5 - - 47 26 12 0 - 0 0.0385 - 3 0.0385 - 7 0.192 - 13 0.192 - 14 0.0385 - 15 0.0385 - 21 0.0385 - 28 0.0385 - 31 0.0385 - 41 0.0385 - 46 0.0385 - 47 0.269 - - 55 9 3 0 - 7 0.222 - 42 0.111 - 47 0.667 - - 58 4 1 0 - 41 1 - - 58 8 5 0 - 13 0.125 - 15 0.5 - 32 0.125 - 46 0.125 - 47 0.125 - - 62 55 11 1 - 3 0.0727 - 7 0.0909 - 8 0.0182 - 9 0.0182 - 13 0.0182 - 14 0.0182 - 22 0.0182 - 35 0.0182 - 42 0.345 - 45 0.236 - 47 0.145 - - 42 3 1 0 - 47 1 - - 64 37 10 1 - 2 0.027 - 7 0.0541 - 8 0.0541 - 13 0.0541 - 21 0.108 - 35 0.0811 - 41 0.162 - 42 0.027 - 45 0.0811 - 47 0.351 - - 41 8 4 0 - 2 0.125 - 7 0.125 - 45 0.125 - 47 0.625 - - 65 1 1 0 - 40 1 - - 69 29 9 1 - 7 0.276 - 14 0.0345 - 21 0.103 - 25 0.103 - 29 0.0345 - 40 0.0345 - 41 0.103 - 42 0.207 - 47 0.103 - - 42 3 1 0 - 47 1 - - 71 17 7 0 - 2 0.235 - 14 0.0588 - 24 0.0588 - 28 0.118 - 41 0.235 - 42 0.0588 - 47 0.235 - - 72 11 5 0 - 2 0.0909 - 28 0.0909 - 42 0.0909 - 45 0.273 - 47 0.455 - - 73 2 1 0 - 28 1 - - 74 19 6 0 - 0 0.0526 - 7 0.0526 - 28 0.0526 - 32 0.0526 - 41 0.0526 - 47 0.737 - -52 280 19 10 - 2 0.0214 - 4 0.0179 - 7 0.00714 - 8 0.0107 - 13 0.00357 - 15 0.00357 - 20 0.00357 - 27 0.0286 - 28 0.05 - 29 0.0143 - 30 0.0143 - 33 0.00714 - 40 0.0107 - 41 0.225 - 42 0.0214 - 44 0.05 - 45 0.175 - 46 0.00714 - 47 0.329 - - 0 3 1 0 - 4 1 - - 13 6 4 0 - 8 0.5 - 41 0.167 - 44 0.167 - 47 0.167 - - 15 3 3 0 - 15 0.333 - 20 0.333 - 47 0.333 - - 21 18 5 0 - 28 0.0556 - 33 0.0556 - 41 0.111 - 42 0.0556 - 47 0.722 - - 27 86 13 0 - 2 0.0233 - 4 0.0116 - 7 0.0116 - 27 0.0349 - 28 0.0349 - 29 0.0233 - 30 0.0233 - 40 0.0233 - 41 0.221 - 42 0.0116 - 44 0.0581 - 45 0.267 - 47 0.256 - - 28 13 4 0 - 41 0.769 - 45 0.0769 - 46 0.0769 - 47 0.0769 - - 41 5 3 0 - 13 0.2 - 27 0.4 - 28 0.4 - - 45 3 3 0 - 2 0.333 - 28 0.333 - 47 0.333 - - 47 127 15 3 - 2 0.0236 - 4 0.00787 - 7 0.00787 - 27 0.00787 - 28 0.0472 - 29 0.0157 - 30 0.0157 - 33 0.00787 - 40 0.00787 - 41 0.228 - 42 0.0236 - 44 0.0551 - 45 0.181 - 46 0.00787 - 47 0.362 - - 21 17 5 0 - 28 0.0588 - 33 0.0588 - 41 0.0588 - 42 0.0588 - 47 0.765 - - 28 11 4 0 - 41 0.727 - 45 0.0909 - 46 0.0909 - 47 0.0909 - - 52 2 2 0 - 28 0.5 - 44 0.5 - - 52 2 2 0 - 28 0.5 - 44 0.5 - -53 81 5 3 - 2 0.0494 - 7 0.0494 - 42 0.173 - 44 0.0617 - 47 0.667 - - 13 2 1 0 - 44 1 - - 44 5 3 0 - 2 0.4 - 7 0.2 - 42 0.4 - - 47 38 4 1 - 2 0.0526 - 7 0.0526 - 42 0.184 - 47 0.711 - - 44 5 3 0 - 2 0.4 - 7 0.2 - 42 0.4 - -54 1410 26 10 - 0 0.00142 - 2 0.0128 - 3 0.0163 - 4 0.351 - 7 0.044 - 8 0.0326 - 13 0.00355 - 14 0.000709 - 15 0.241 - 16 0.00213 - 18 0.0184 - 20 0.0348 - 21 0.00142 - 26 0.00426 - 28 0.00284 - 29 0.00284 - 30 0.00142 - 31 0.000709 - 33 0.00426 - 34 0.00142 - 39 0.000709 - 41 0.178 - 44 0.00284 - 45 0.0163 - 46 0.00142 - 47 0.0227 - - 3 2 2 0 - 4 0.5 - 39 0.5 - - 4 5 4 0 - 7 0.4 - 21 0.2 - 33 0.2 - 41 0.2 - - 8 11 9 0 - 4 0.0909 - 7 0.0909 - 8 0.0909 - 18 0.0909 - 20 0.0909 - 29 0.0909 - 41 0.0909 - 45 0.182 - 47 0.182 - - 13 19 9 0 - 2 0.0526 - 3 0.158 - 4 0.105 - 7 0.0526 - 8 0.211 - 15 0.158 - 30 0.0526 - 31 0.0526 - 45 0.158 - - 15 697 20 3 - 0 0.00143 - 2 0.0115 - 3 0.01 - 4 0.34 - 7 0.0373 - 8 0.0301 - 13 0.0043 - 15 0.135 - 18 0.0158 - 20 0.0316 - 26 0.0043 - 28 0.00287 - 29 0.00143 - 33 0.00143 - 34 0.00143 - 41 0.344 - 44 0.00287 - 45 0.00574 - 46 0.00143 - 47 0.0172 - - 15 89 12 0 - 2 0.0112 - 3 0.0337 - 4 0.629 - 7 0.0787 - 8 0.0449 - 13 0.0112 - 15 0.0674 - 20 0.0674 - 26 0.0112 - 34 0.0112 - 41 0.0225 - 45 0.0112 - - 41 231 8 0 - 2 0.013 - 4 0.61 - 7 0.0216 - 8 0.026 - 15 0.238 - 18 0.0346 - 20 0.0519 - 33 0.00433 - - 47 371 18 0 - 0 0.0027 - 2 0.0108 - 3 0.0108 - 4 0.097 - 7 0.0377 - 8 0.027 - 13 0.00539 - 15 0.0889 - 18 0.00809 - 20 0.0108 - 26 0.00539 - 28 0.00539 - 29 0.0027 - 41 0.639 - 44 0.00539 - 45 0.00809 - 46 0.0027 - 47 0.0323 - - 16 7 2 0 - 3 0.286 - 15 0.714 - - 41 235 2 0 - 15 0.987 - 16 0.0128 - - 47 411 22 5 - 0 0.00243 - 2 0.0219 - 3 0.0268 - 4 0.596 - 7 0.0754 - 8 0.0438 - 13 0.00487 - 15 0.0146 - 18 0.0316 - 20 0.0584 - 21 0.00243 - 26 0.0073 - 28 0.00487 - 29 0.00487 - 30 0.00243 - 33 0.0073 - 34 0.00243 - 41 0.0195 - 44 0.00487 - 45 0.0268 - 46 0.00243 - 47 0.0389 - - 4 5 4 0 - 7 0.4 - 21 0.2 - 33 0.2 - 41 0.2 - - 8 8 6 0 - 7 0.125 - 18 0.125 - 29 0.125 - 41 0.125 - 45 0.25 - 47 0.25 - - 13 11 7 0 - 2 0.0909 - 3 0.182 - 4 0.182 - 7 0.0909 - 15 0.0909 - 30 0.0909 - 45 0.273 - - 15 365 20 0 - 0 0.00274 - 2 0.0219 - 3 0.0192 - 4 0.638 - 7 0.0712 - 8 0.0466 - 13 0.00548 - 15 0.0137 - 18 0.0301 - 20 0.0603 - 26 0.00822 - 28 0.00548 - 29 0.00274 - 33 0.00274 - 34 0.00274 - 41 0.0164 - 44 0.00548 - 45 0.011 - 46 0.00274 - 47 0.0329 - - 16 2 1 0 - 3 1 - - 54 6 4 0 - 4 0.5 - 7 0.167 - 20 0.167 - 33 0.167 - - 55 10 8 0 - 4 0.3 - 8 0.1 - 14 0.1 - 18 0.1 - 20 0.1 - 41 0.1 - 45 0.1 - 47 0.1 - -55 887998 48 60 - 0 0.0273 - 1 0.000351 - 2 0.0385 - 3 0.0187 - 4 0.0895 - 5 1.13e-05 - 6 0.00017 - 7 0.269 - 8 0.0578 - 9 0.00198 - 10 0.00144 - 11 4.5e-06 - 12 0.000276 - 13 0.0448 - 14 0.00865 - 15 0.0601 - 16 0.00132 - 17 0.000474 - 18 0.00933 - 19 0.00118 - 20 0.00947 - 21 0.00895 - 22 0.00032 - 23 7.09e-05 - 24 0.0044 - 25 2.93e-05 - 26 0.0257 - 27 9.01e-06 - 28 0.0421 - 29 0.0397 - 30 0.0252 - 31 0.0126 - 32 0.00881 - 33 0.0183 - 34 0.0013 - 35 0.000993 - 36 2.14e-05 - 37 0.00439 - 38 1.46e-05 - 39 9.01e-06 - 40 0.000164 - 41 0.0609 - 42 0.00956 - 43 0.000404 - 44 0.0025 - 45 0.0118 - 46 0.00365 - 47 0.078 - - 0 15 6 0 - 7 0.0667 - 13 0.133 - 14 0.0667 - 15 0.6 - 19 0.0667 - 44 0.0667 - - 2 4952 33 24 - 0 0.00101 - 2 0.000404 - 3 0.0186 - 4 0.00323 - 6 0.000202 - 7 0.00424 - 8 0.0307 - 9 0.000808 - 10 0.000404 - 13 0.33 - 14 0.202 - 15 0.361 - 16 0.0224 - 18 0.000404 - 19 0.00141 - 20 0.000808 - 21 0.00101 - 26 0.000202 - 28 0.00121 - 29 0.000202 - 30 0.00363 - 31 0.000808 - 32 0.000202 - 33 0.000404 - 34 0.000202 - 40 0.000202 - 41 0.00687 - 42 0.00182 - 43 0.000202 - 44 0.000202 - 45 0.000202 - 46 0.00283 - 47 0.00263 - - 3 95 6 0 - 3 0.884 - 7 0.0105 - 8 0.0105 - 13 0.0632 - 21 0.0105 - 41 0.0211 - - 4 22 10 0 - 0 0.0909 - 3 0.0455 - 4 0.273 - 7 0.227 - 8 0.0455 - 13 0.0909 - 15 0.0909 - 21 0.0455 - 32 0.0455 - 47 0.0455 - - 6 1 1 0 - 6 1 - - 8 278 11 0 - 3 0.0036 - 4 0.0216 - 8 0.432 - 9 0.00719 - 13 0.439 - 14 0.0396 - 15 0.036 - 31 0.00719 - 40 0.0036 - 41 0.0036 - 42 0.00719 - - 9 4 2 0 - 3 0.5 - 9 0.5 - - 10 2 1 0 - 10 1 - - 13 1555 11 0 - 4 0.00257 - 8 0.0167 - 13 0.826 - 14 0.134 - 15 0.00257 - 16 0.000643 - 30 0.0045 - 41 0.00836 - 42 0.00129 - 46 0.00193 - 47 0.00129 - - 14 982 10 0 - 3 0.00102 - 7 0.00102 - 8 0.00204 - 13 0.196 - 14 0.785 - 15 0.0102 - 16 0.00102 - 19 0.00204 - 33 0.00102 - 41 0.00102 - - 15 1822 10 0 - 8 0.0011 - 13 0.00549 - 14 0.000549 - 15 0.945 - 16 0.0406 - 18 0.0011 - 19 0.0011 - 30 0.000549 - 41 0.00384 - 43 0.000549 - - 16 66 3 0 - 14 0.0152 - 15 0.455 - 16 0.53 - - 19 5 3 0 - 7 0.2 - 15 0.2 - 19 0.6 - - 20 5 2 0 - 7 0.2 - 20 0.8 - - 21 4 2 0 - 13 0.5 - 21 0.5 - - 28 4 1 0 - 28 1 - - 30 15 3 0 - 13 0.333 - 14 0.0667 - 30 0.6 - - 31 4 2 0 - 13 0.75 - 31 0.25 - - 45 12 3 0 - 15 0.0833 - 42 0.167 - 46 0.75 - - 47 9 8 0 - 0 0.111 - 3 0.111 - 13 0.222 - 14 0.111 - 28 0.111 - 41 0.111 - 45 0.111 - 46 0.111 - - 48 3 2 0 - 13 0.667 - 31 0.333 - - 49 1 1 0 - 41 1 - - 54 2 2 0 - 15 0.5 - 41 0.5 - - 55 57 18 0 - 0 0.0351 - 2 0.0351 - 3 0.0351 - 7 0.193 - 13 0.0877 - 14 0.0526 - 15 0.0877 - 21 0.0175 - 26 0.0175 - 28 0.0175 - 29 0.0175 - 30 0.0175 - 33 0.0175 - 34 0.0175 - 41 0.105 - 42 0.0526 - 46 0.0175 - 47 0.175 - - 56 1 1 0 - 7 1 - - 57 2 2 0 - 41 0.5 - 44 0.5 - - 3 14951 40 22 - 0 0.0276 - 1 0.000334 - 2 0.0587 - 3 0.0198 - 4 0.0795 - 7 0.288 - 8 0.0544 - 9 0.000401 - 10 0.00114 - 12 0.000134 - 13 0.0364 - 14 0.00408 - 15 0.0177 - 16 6.69e-05 - 18 0.0093 - 19 0.001 - 20 0.00816 - 21 0.0375 - 24 0.00294 - 25 6.69e-05 - 26 0.066 - 28 0.0289 - 29 0.106 - 30 0.0142 - 31 0.0122 - 32 0.00375 - 33 0.0142 - 34 0.00127 - 35 0.000201 - 37 0.000936 - 38 0.00087 - 39 0.000535 - 40 0.000334 - 41 0.0413 - 42 0.026 - 43 0.000669 - 44 0.00261 - 45 0.00348 - 46 0.00107 - 47 0.0286 - - 2 89 12 0 - 0 0.0337 - 2 0.0112 - 4 0.124 - 7 0.461 - 8 0.0449 - 13 0.0225 - 20 0.0225 - 21 0.0337 - 28 0.0112 - 41 0.213 - 45 0.0112 - 46 0.0112 - - 3 284 22 0 - 0 0.00704 - 2 0.0141 - 3 0.00352 - 4 0.0141 - 7 0.387 - 8 0.0176 - 13 0.00352 - 14 0.0106 - 15 0.00352 - 21 0.0176 - 26 0.268 - 28 0.0141 - 29 0.13 - 30 0.00352 - 31 0.0211 - 33 0.0106 - 34 0.00704 - 39 0.00704 - 41 0.0141 - 42 0.0352 - 45 0.00352 - 47 0.00704 - - 7 3 1 0 - 4 1 - - 8 787 30 0 - 0 0.0419 - 1 0.00127 - 2 0.0801 - 3 0.0102 - 4 0.131 - 7 0.26 - 8 0.0305 - 13 0.00635 - 14 0.00254 - 15 0.0152 - 18 0.0343 - 20 0.0267 - 21 0.0178 - 24 0.0127 - 26 0.0165 - 28 0.0394 - 29 0.0496 - 30 0.0267 - 31 0.0114 - 32 0.00508 - 33 0.033 - 34 0.00127 - 35 0.00127 - 37 0.00254 - 39 0.00127 - 41 0.0343 - 42 0.0114 - 44 0.00127 - 45 0.00381 - 47 0.0902 - - 9 19 8 0 - 0 0.158 - 7 0.263 - 13 0.0526 - 28 0.0526 - 29 0.158 - 30 0.0526 - 41 0.0526 - 47 0.211 - - 10 28 4 0 - 4 0.643 - 7 0.0357 - 18 0.25 - 20 0.0714 - - 13 4530 37 0 - 0 0.0232 - 1 0.000442 - 2 0.0433 - 3 0.00596 - 4 0.0656 - 7 0.201 - 8 0.0272 - 9 0.000221 - 10 0.000662 - 12 0.000221 - 13 0.0347 - 14 0.00177 - 15 0.034 - 18 0.0102 - 20 0.00927 - 21 0.0408 - 24 0.00419 - 25 0.000221 - 26 0.0682 - 28 0.0563 - 29 0.179 - 30 0.0143 - 31 0.015 - 32 0.00574 - 33 0.0232 - 34 0.000442 - 35 0.000442 - 37 0.0011 - 39 0.000442 - 40 0.0011 - 41 0.0219 - 42 0.07 - 43 0.00177 - 44 0.00287 - 45 0.00419 - 46 0.0011 - 47 0.0302 - - 14 4275 34 0 - 0 0.0262 - 2 0.106 - 3 0.00819 - 4 0.116 - 7 0.244 - 8 0.0952 - 9 0.000234 - 10 0.00257 - 13 0.0732 - 14 0.00444 - 15 0.0133 - 16 0.000234 - 18 0.0101 - 19 0.00211 - 20 0.00959 - 21 0.0428 - 24 0.00281 - 26 0.0414 - 28 0.018 - 29 0.0648 - 30 0.0131 - 31 0.0159 - 32 0.00327 - 33 0.00912 - 34 0.00211 - 37 0.000468 - 39 0.000468 - 41 0.0409 - 42 0.00795 - 43 0.000234 - 44 0.00234 - 45 0.00234 - 46 0.000234 - 47 0.0201 - - 15 275 26 0 - 0 0.0182 - 2 0.0291 - 3 0.00364 - 4 0.2 - 7 0.153 - 8 0.0327 - 13 0.0436 - 15 0.08 - 18 0.04 - 19 0.00364 - 20 0.0291 - 21 0.00727 - 26 0.0182 - 28 0.0473 - 29 0.0509 - 30 0.0109 - 31 0.0145 - 32 0.00364 - 33 0.0545 - 34 0.0109 - 41 0.0582 - 42 0.00727 - 44 0.00727 - 45 0.00364 - 46 0.00364 - 47 0.0691 - - 16 24 11 0 - 0 0.0417 - 2 0.0417 - 4 0.375 - 7 0.167 - 8 0.0417 - 28 0.0417 - 29 0.0833 - 30 0.0833 - 33 0.0417 - 46 0.0417 - 47 0.0417 - - 18 25 6 0 - 4 0.04 - 7 0.64 - 15 0.2 - 26 0.04 - 28 0.04 - 29 0.04 - - 21 20 6 0 - 2 0.05 - 4 0.1 - 7 0.7 - 20 0.05 - 41 0.05 - 44 0.05 - - 30 15 6 0 - 4 0.267 - 7 0.333 - 18 0.0667 - 20 0.0667 - 28 0.133 - 47 0.133 - - 31 22 12 0 - 0 0.0909 - 2 0.0455 - 4 0.0909 - 7 0.273 - 8 0.0455 - 13 0.136 - 20 0.0455 - 29 0.0909 - 30 0.0455 - 39 0.0455 - 41 0.0455 - 47 0.0455 - - 41 29 8 0 - 2 0.0345 - 3 0.0345 - 4 0.069 - 7 0.172 - 8 0.241 - 21 0.069 - 28 0.0345 - 41 0.345 - - 43 1 1 0 - 44 1 - - 45 9 6 0 - 2 0.222 - 4 0.222 - 7 0.222 - 15 0.111 - 20 0.111 - 28 0.111 - - 46 4 3 0 - 8 0.25 - 13 0.25 - 45 0.5 - - 47 4447 34 0 - 0 0.0324 - 1 0.00045 - 2 0.0322 - 3 0.0501 - 4 0.0369 - 7 0.422 - 8 0.0515 - 9 0.000899 - 10 0.000675 - 12 0.000225 - 13 0.0103 - 14 0.00652 - 15 0.00225 - 19 0.00112 - 20 0.000225 - 21 0.0376 - 24 0.000675 - 26 0.0911 - 28 0.00967 - 29 0.0902 - 30 0.0139 - 31 0.00607 - 32 0.00225 - 33 0.00472 - 34 0.00045 - 37 0.000899 - 38 0.00292 - 41 0.0573 - 42 0.00382 - 43 0.000225 - 44 0.00247 - 45 0.00337 - 46 0.00135 - 47 0.0232 - - 48 43 14 0 - 0 0.0233 - 4 0.233 - 7 0.163 - 8 0.0233 - 13 0.0698 - 15 0.0233 - 18 0.093 - 28 0.0233 - 29 0.0233 - 33 0.0233 - 37 0.0233 - 41 0.209 - 46 0.0233 - 47 0.0465 - - 54 7 4 0 - 2 0.143 - 4 0.429 - 7 0.286 - 8 0.143 - - 55 9 8 0 - 2 0.111 - 4 0.222 - 7 0.111 - 8 0.111 - 15 0.111 - 20 0.111 - 32 0.111 - 33 0.111 - - 4 80857 41 32 - 0 0.0477 - 1 0.000742 - 2 0.0329 - 3 0.0128 - 4 0.00155 - 5 2.47e-05 - 6 2.47e-05 - 7 0.398 - 8 0.00234 - 9 0.000247 - 10 0.000371 - 12 0.000408 - 13 0.0102 - 14 0.0123 - 15 0.00247 - 16 9.89e-05 - 17 0.00409 - 18 2.47e-05 - 19 0.00233 - 21 0.0171 - 22 0.002 - 23 1.24e-05 - 24 0.00694 - 26 0.0309 - 28 0.0629 - 29 0.0511 - 30 0.0334 - 31 0.0145 - 32 0.0125 - 33 0.0213 - 34 0.00146 - 35 0.00124 - 37 0.00651 - 40 4.95e-05 - 41 0.0794 - 42 0.0066 - 43 0.00042 - 44 0.00117 - 45 0.0123 - 46 0.0031 - 47 0.107 - - 2 16 6 0 - 7 0.312 - 26 0.0625 - 28 0.25 - 30 0.188 - 32 0.0625 - 47 0.125 - - 3 1180 26 0 - 0 0.0127 - 2 0.0314 - 3 0.00169 - 7 0.618 - 8 0.00169 - 13 0.00678 - 14 0.00254 - 15 0.000847 - 17 0.00169 - 21 0.00763 - 24 0.00254 - 26 0.0178 - 28 0.0356 - 29 0.0322 - 30 0.0322 - 31 0.00847 - 32 0.00339 - 33 0.00763 - 34 0.000847 - 37 0.00508 - 41 0.05 - 42 0.00763 - 44 0.00169 - 45 0.00254 - 46 0.00254 - 47 0.105 - - 4 71 16 0 - 0 0.0423 - 7 0.394 - 8 0.0141 - 13 0.0141 - 21 0.0423 - 24 0.0141 - 28 0.0845 - 29 0.0141 - 30 0.0563 - 31 0.0282 - 32 0.0423 - 33 0.0282 - 41 0.0282 - 42 0.0141 - 45 0.0563 - 47 0.127 - - 6 18 9 0 - 0 0.0556 - 2 0.111 - 7 0.389 - 8 0.0556 - 28 0.111 - 31 0.0556 - 35 0.0556 - 41 0.0556 - 47 0.111 - - 7 1 1 0 - 15 1 - - 8 17405 38 0 - 0 0.078 - 1 0.00109 - 2 0.0307 - 3 0.00167 - 4 0.000862 - 5 0.000115 - 7 0.426 - 8 0.00184 - 9 5.75e-05 - 10 0.000632 - 12 0.000402 - 13 0.00718 - 14 0.00431 - 15 0.00218 - 16 5.75e-05 - 17 0.00287 - 19 0.00247 - 21 0.0196 - 22 5.75e-05 - 24 0.00678 - 26 0.0298 - 28 0.0666 - 29 0.0525 - 30 0.0357 - 31 0.0159 - 32 0.0133 - 33 0.0219 - 34 0.000804 - 35 0.000919 - 37 0.00368 - 40 5.75e-05 - 41 0.0705 - 42 0.00672 - 43 0.000172 - 44 0.000689 - 45 0.0106 - 46 0.00195 - 47 0.0812 - - 9 397 24 0 - 0 0.0907 - 2 0.063 - 7 0.378 - 13 0.00504 - 14 0.00756 - 15 0.00756 - 16 0.00252 - 17 0.00252 - 19 0.0101 - 21 0.0126 - 24 0.00252 - 26 0.0327 - 28 0.0932 - 29 0.0403 - 30 0.0529 - 31 0.0126 - 32 0.0277 - 33 0.0428 - 37 0.00252 - 41 0.0479 - 42 0.00756 - 44 0.00252 - 45 0.00252 - 47 0.0529 - - 10 727 22 0 - 0 0.144 - 1 0.00275 - 2 0.0151 - 7 0.38 - 13 0.00275 - 17 0.00138 - 19 0.00138 - 21 0.0578 - 24 0.00138 - 26 0.0289 - 28 0.0385 - 29 0.0399 - 30 0.00825 - 31 0.0165 - 32 0.0206 - 33 0.0179 - 37 0.00138 - 41 0.0894 - 42 0.011 - 44 0.00275 - 45 0.0179 - 47 0.1 - - 12 2 2 0 - 0 0.5 - 2 0.5 - - 13 38560 39 0 - 0 0.0431 - 1 0.000726 - 2 0.0281 - 3 0.0249 - 4 0.00114 - 6 2.59e-05 - 7 0.377 - 8 0.00319 - 9 0.000441 - 10 0.000363 - 12 0.000441 - 13 0.0138 - 14 0.0218 - 15 0.00265 - 16 7.78e-05 - 17 0.00423 - 18 5.19e-05 - 19 0.00202 - 21 0.0182 - 22 0.00412 - 24 0.00747 - 26 0.0309 - 28 0.0659 - 29 0.0534 - 30 0.0347 - 31 0.0155 - 32 0.0119 - 33 0.0219 - 34 0.00187 - 35 0.00119 - 37 0.00778 - 40 2.59e-05 - 41 0.0783 - 42 0.00578 - 43 0.000622 - 44 0.00137 - 45 0.0108 - 46 0.00371 - 47 0.101 - - 14 5945 33 0 - 0 0.0192 - 2 0.0441 - 4 0.00404 - 7 0.376 - 8 0.00202 - 10 0.000336 - 12 0.000168 - 13 0.00673 - 14 0.00471 - 15 0.000505 - 16 0.000168 - 17 0.0116 - 19 0.000505 - 21 0.0104 - 23 0.000168 - 24 0.00976 - 26 0.031 - 28 0.0833 - 29 0.0474 - 30 0.0368 - 31 0.00908 - 32 0.0172 - 33 0.02 - 34 0.00118 - 35 0.0032 - 37 0.00622 - 41 0.076 - 42 0.00706 - 43 0.000168 - 44 0.00135 - 45 0.0163 - 46 0.00219 - 47 0.152 - - 15 8602 35 0 - 0 0.0117 - 1 0.000465 - 2 0.0398 - 3 0.000581 - 4 0.00221 - 7 0.483 - 8 0.000581 - 12 0.000698 - 13 0.00581 - 14 0.00174 - 15 0.00267 - 16 0.000116 - 17 0.00093 - 19 0.00105 - 21 0.00523 - 22 0.000116 - 24 0.00302 - 26 0.038 - 28 0.0367 - 29 0.031 - 30 0.0208 - 31 0.0086 - 32 0.00732 - 33 0.0166 - 34 0.00221 - 35 0.00105 - 37 0.0086 - 40 0.000116 - 41 0.114 - 42 0.00546 - 43 0.000116 - 44 0.000814 - 45 0.00802 - 46 0.0057 - 47 0.135 - - 16 411 25 0 - 0 0.00243 - 2 0.0706 - 4 0.00243 - 7 0.406 - 13 0.0243 - 14 0.00487 - 17 0.00243 - 21 0.0219 - 24 0.00973 - 26 0.0487 - 28 0.0535 - 29 0.0316 - 30 0.0219 - 31 0.0073 - 32 0.00487 - 33 0.0073 - 34 0.00487 - 35 0.00243 - 37 0.0292 - 40 0.00243 - 41 0.0925 - 42 0.00487 - 44 0.00243 - 45 0.0122 - 47 0.129 - - 19 14 8 0 - 2 0.143 - 7 0.214 - 21 0.0714 - 26 0.143 - 29 0.0714 - 41 0.0714 - 45 0.143 - 47 0.143 - - 20 23 9 0 - 7 0.304 - 21 0.087 - 24 0.087 - 28 0.174 - 30 0.0435 - 31 0.0435 - 32 0.13 - 35 0.0435 - 45 0.087 - - 21 134 19 0 - 0 0.231 - 2 0.0149 - 4 0.00746 - 7 0.291 - 14 0.0224 - 15 0.00746 - 19 0.0224 - 21 0.0448 - 24 0.0149 - 26 0.0224 - 28 0.0522 - 29 0.0299 - 30 0.0522 - 33 0.0299 - 37 0.00746 - 41 0.0746 - 42 0.0149 - 45 0.0373 - 47 0.0224 - - 22 13 7 0 - 0 0.0769 - 4 0.0769 - 7 0.462 - 28 0.0769 - 29 0.0769 - 30 0.154 - 33 0.0769 - - 23 34 11 0 - 0 0.206 - 2 0.0294 - 7 0.235 - 21 0.0294 - 26 0.0294 - 28 0.0294 - 29 0.0588 - 31 0.0882 - 42 0.0294 - 45 0.0588 - 47 0.206 - - 30 600 27 0 - 0 0.0817 - 1 0.00333 - 2 0.0267 - 7 0.398 - 8 0.00167 - 13 0.005 - 14 0.00167 - 15 0.00333 - 17 0.005 - 19 0.00167 - 21 0.015 - 24 0.01 - 26 0.0333 - 28 0.055 - 29 0.0433 - 30 0.0367 - 31 0.00833 - 32 0.0217 - 33 0.045 - 34 0.00167 - 37 0.00667 - 41 0.0767 - 42 0.00833 - 43 0.00167 - 45 0.00833 - 46 0.00167 - 47 0.0983 - - 31 594 25 0 - 0 0.0303 - 2 0.0354 - 4 0.00673 - 7 0.468 - 8 0.00168 - 9 0.00168 - 13 0.00842 - 14 0.00337 - 17 0.00337 - 19 0.00168 - 21 0.00673 - 22 0.00168 - 24 0.0118 - 26 0.0286 - 28 0.0724 - 29 0.0825 - 30 0.0488 - 31 0.0152 - 32 0.0168 - 33 0.0118 - 37 0.00673 - 41 0.0488 - 42 0.00842 - 45 0.00168 - 47 0.0774 - - 39 26 10 0 - 2 0.0769 - 7 0.5 - 13 0.0385 - 14 0.0385 - 21 0.0385 - 26 0.115 - 29 0.0769 - 30 0.0385 - 41 0.0385 - 47 0.0385 - - 44 28 10 0 - 0 0.0714 - 2 0.107 - 7 0.393 - 19 0.0357 - 21 0.0357 - 28 0.0357 - 30 0.0357 - 35 0.0357 - 41 0.0357 - 45 0.214 - - 45 444 26 0 - 0 0.0968 - 1 0.00901 - 2 0.0203 - 7 0.358 - 9 0.00225 - 13 0.027 - 14 0.0045 - 15 0.0113 - 16 0.00225 - 17 0.00676 - 19 0.0113 - 21 0.0158 - 24 0.0045 - 26 0.027 - 28 0.0676 - 29 0.0968 - 30 0.0495 - 31 0.045 - 32 0.00676 - 33 0.0518 - 37 0.00225 - 41 0.0293 - 42 0.0135 - 45 0.00225 - 46 0.00225 - 47 0.036 - - 47 2538 32 0 - 0 0.0303 - 2 0.0693 - 3 0.0146 - 4 0.00473 - 7 0.265 - 8 0.00197 - 10 0.000394 - 12 0.000394 - 13 0.00709 - 14 0.00512 - 15 0.00197 - 17 0.0106 - 19 0.0118 - 21 0.0296 - 24 0.00591 - 26 0.0209 - 28 0.0571 - 29 0.0201 - 30 0.0197 - 31 0.00906 - 32 0.0197 - 33 0.015 - 34 0.000394 - 35 0.00236 - 37 0.00591 - 41 0.0563 - 42 0.0146 - 43 0.00118 - 44 0.00355 - 45 0.0583 - 46 0.00197 - 47 0.235 - - 48 2419 31 0 - 0 0.0864 - 1 0.000413 - 2 0.0364 - 3 0.00165 - 4 0.000827 - 6 0.000413 - 7 0.329 - 8 0.00248 - 10 0.000827 - 12 0.000413 - 13 0.00537 - 14 0.000827 - 15 0.00661 - 17 0.000413 - 19 0.00331 - 21 0.0215 - 24 0.0103 - 26 0.0302 - 28 0.0566 - 29 0.127 - 30 0.0463 - 31 0.0265 - 32 0.012 - 33 0.0294 - 37 0.00248 - 41 0.0744 - 42 0.00951 - 43 0.000413 - 45 0.0112 - 46 0.000827 - 47 0.0661 - - 49 8 4 0 - 0 0.375 - 7 0.375 - 29 0.125 - 32 0.125 - - 54 240 13 0 - 0 0.0125 - 2 0.0125 - 7 0.292 - 13 0.00417 - 26 0.00833 - 28 0.00833 - 29 0.0208 - 30 0.0208 - 31 0.0167 - 33 0.0208 - 41 0.383 - 42 0.00417 - 47 0.196 - - 55 157 17 0 - 0 0.0318 - 2 0.00637 - 7 0.395 - 13 0.00637 - 19 0.00637 - 21 0.00637 - 24 0.0127 - 26 0.0318 - 28 0.0446 - 29 0.0637 - 30 0.0318 - 31 0.0318 - 32 0.00637 - 33 0.0318 - 34 0.00637 - 41 0.146 - 47 0.14 - - 56 123 14 0 - 0 0.065 - 2 0.0325 - 7 0.463 - 21 0.0244 - 26 0.0325 - 28 0.0732 - 30 0.0244 - 31 0.00813 - 32 0.0325 - 33 0.0244 - 41 0.114 - 42 0.0163 - 45 0.00813 - 47 0.0813 - - 58 10 6 0 - 0 0.1 - 7 0.4 - 28 0.1 - 29 0.1 - 45 0.2 - 47 0.1 - - 60 63 9 0 - 0 0.0476 - 2 0.0317 - 7 0.714 - 21 0.0159 - 26 0.0476 - 28 0.0952 - 29 0.0159 - 30 0.0159 - 41 0.0159 - - 68 43 11 0 - 0 0.0465 - 2 0.0233 - 4 0.0465 - 7 0.628 - 26 0.0465 - 28 0.0233 - 29 0.0233 - 30 0.0465 - 33 0.0465 - 41 0.0233 - 47 0.0465 - - 5 861 24 0 - 0 0.00581 - 2 0.0918 - 7 0.18 - 8 0.00465 - 10 0.00348 - 13 0.0186 - 14 0.00465 - 15 0.00232 - 16 0.00116 - 19 0.00232 - 21 0.029 - 28 0.0163 - 29 0.0395 - 30 0.00465 - 31 0.00232 - 32 0.0279 - 33 0.0151 - 34 0.00813 - 37 0.0267 - 41 0.143 - 42 0.00813 - 44 0.00232 - 45 0.167 - 47 0.195 - - 6 150 19 6 - 2 0.0133 - 3 0.00667 - 4 0.127 - 6 0.193 - 7 0.12 - 8 0.02 - 15 0.28 - 18 0.0133 - 19 0.00667 - 20 0.0133 - 25 0.0133 - 26 0.0133 - 28 0.0133 - 29 0.00667 - 32 0.00667 - 33 0.00667 - 41 0.0333 - 45 0.0667 - 47 0.0467 - - 6 29 12 0 - 2 0.0345 - 4 0.241 - 6 0.172 - 7 0.138 - 8 0.0345 - 15 0.0345 - 18 0.069 - 28 0.0345 - 29 0.0345 - 41 0.0345 - 45 0.069 - 47 0.103 - - 13 12 4 0 - 4 0.25 - 6 0.583 - 8 0.0833 - 15 0.0833 - - 14 7 3 0 - 3 0.143 - 6 0.714 - 7 0.143 - - 15 42 2 0 - 6 0.0476 - 15 0.952 - - 46 2 1 0 - 45 1 - - 47 53 14 0 - 2 0.0189 - 4 0.151 - 6 0.17 - 7 0.226 - 19 0.0189 - 20 0.0377 - 25 0.0377 - 26 0.0377 - 28 0.0189 - 32 0.0189 - 33 0.0189 - 41 0.0755 - 45 0.0943 - 47 0.0755 - - 7 318 24 10 - 0 0.044 - 2 0.0314 - 3 0.0157 - 4 0.00314 - 7 0.151 - 8 0.0126 - 10 0.00314 - 13 0.132 - 14 0.0975 - 15 0.0943 - 18 0.00314 - 21 0.0535 - 26 0.0283 - 28 0.0566 - 29 0.0409 - 30 0.022 - 31 0.022 - 32 0.00943 - 33 0.0252 - 35 0.00314 - 41 0.0472 - 42 0.00943 - 45 0.00943 - 47 0.0849 - - 3 47 13 0 - 0 0.0851 - 3 0.0638 - 7 0.468 - 13 0.0426 - 15 0.0213 - 21 0.0213 - 26 0.106 - 29 0.0213 - 30 0.0426 - 31 0.0213 - 41 0.0638 - 42 0.0213 - 47 0.0213 - - 4 30 11 0 - 0 0.167 - 7 0.233 - 15 0.1 - 21 0.1 - 26 0.0667 - 28 0.0333 - 31 0.0333 - 33 0.0667 - 41 0.1 - 45 0.0333 - 47 0.0667 - - 8 19 11 0 - 0 0.0526 - 4 0.0526 - 7 0.0526 - 8 0.0526 - 14 0.0526 - 21 0.105 - 26 0.0526 - 28 0.316 - 29 0.105 - 31 0.105 - 41 0.0526 - - 13 86 17 0 - 0 0.0116 - 2 0.0116 - 3 0.0116 - 7 0.0581 - 8 0.0233 - 10 0.0116 - 13 0.337 - 14 0.267 - 18 0.0116 - 21 0.0698 - 28 0.0116 - 29 0.0349 - 30 0.0116 - 32 0.0116 - 33 0.0233 - 41 0.0581 - 47 0.0349 - - 14 2 2 0 - 45 0.5 - 47 0.5 - - 15 49 8 0 - 7 0.0204 - 13 0.184 - 14 0.102 - 15 0.531 - 28 0.0204 - 30 0.0408 - 31 0.0612 - 47 0.0408 - - 21 3 2 0 - 2 0.333 - 28 0.667 - - 39 2 2 0 - 21 0.5 - 26 0.5 - - 47 67 17 0 - 0 0.0448 - 2 0.119 - 7 0.149 - 8 0.0149 - 13 0.0149 - 14 0.0149 - 21 0.0597 - 28 0.104 - 29 0.0746 - 30 0.0149 - 32 0.0299 - 33 0.0448 - 35 0.0149 - 41 0.0299 - 42 0.0149 - 45 0.0149 - 47 0.239 - - 55 6 5 0 - 7 0.333 - 13 0.167 - 14 0.167 - 41 0.167 - 42 0.167 - - 8 48850 43 29 - 0 0.0133 - 1 0.000184 - 2 0.0351 - 3 0.0255 - 4 0.357 - 6 0.000143 - 7 0.172 - 8 0.0864 - 9 0.00254 - 10 0.00328 - 12 6.14e-05 - 13 0.0137 - 14 0.00282 - 15 0.0132 - 16 0.000246 - 17 2.05e-05 - 18 0.0354 - 19 0.000676 - 20 0.0406 - 21 0.00948 - 22 0.00086 - 23 0.00102 - 24 0.00264 - 25 2.05e-05 - 26 0.0131 - 28 0.0268 - 29 0.0167 - 30 0.0198 - 31 0.0105 - 32 0.00571 - 33 0.0085 - 34 0.000655 - 35 0.000205 - 36 6.14e-05 - 37 0.00192 - 40 4.09e-05 - 41 0.0306 - 42 0.00268 - 43 0.000368 - 44 0.00086 - 45 0.0123 - 46 0.000512 - 47 0.0316 - - 2 152 23 0 - 0 0.00658 - 2 0.0132 - 3 0.0263 - 4 0.289 - 7 0.23 - 8 0.0395 - 9 0.00658 - 13 0.0132 - 15 0.0263 - 18 0.0263 - 20 0.0197 - 21 0.0132 - 24 0.00658 - 26 0.0263 - 28 0.0263 - 30 0.0197 - 32 0.0132 - 33 0.0197 - 41 0.0855 - 42 0.00658 - 44 0.00658 - 45 0.0526 - 47 0.0263 - - 3 710 19 0 - 0 0.00282 - 2 0.00282 - 3 0.00845 - 4 0.785 - 7 0.141 - 8 0.00282 - 14 0.00282 - 18 0.0183 - 20 0.0127 - 21 0.00141 - 26 0.00141 - 28 0.00282 - 29 0.00563 - 30 0.00282 - 32 0.00141 - 33 0.00141 - 41 0.00141 - 42 0.00282 - 45 0.00282 - - 4 67 13 0 - 0 0.134 - 2 0.0299 - 7 0.328 - 21 0.0597 - 24 0.0149 - 26 0.0149 - 28 0.164 - 29 0.0149 - 30 0.0597 - 37 0.0149 - 41 0.0299 - 45 0.0149 - 47 0.119 - - 6 2 2 0 - 3 0.5 - 8 0.5 - - 8 3996 36 0 - 0 0.0133 - 1 0.000501 - 2 0.0511 - 3 0.0198 - 4 0.362 - 7 0.183 - 8 0.0568 - 9 0.00025 - 10 0.0015 - 13 0.00701 - 14 0.000501 - 15 0.00475 - 18 0.0455 - 19 0.001 - 20 0.048 - 21 0.00551 - 22 0.000751 - 23 0.00025 - 24 0.00375 - 26 0.00976 - 28 0.0263 - 29 0.0235 - 30 0.0205 - 31 0.00826 - 32 0.00676 - 33 0.00826 - 35 0.000501 - 37 0.00225 - 40 0.00025 - 41 0.04 - 42 0.00601 - 43 0.000501 - 44 0.000501 - 45 0.01 - 46 0.00025 - 47 0.0313 - - 9 12 8 0 - 0 0.0833 - 2 0.0833 - 4 0.417 - 7 0.0833 - 18 0.0833 - 31 0.0833 - 45 0.0833 - 47 0.0833 - - 10 7 3 0 - 4 0.429 - 7 0.143 - 18 0.429 - - 13 26070 40 0 - 0 0.011 - 1 0.000153 - 2 0.024 - 3 0.0157 - 4 0.465 - 6 0.000192 - 7 0.112 - 8 0.0908 - 9 0.00226 - 10 0.00315 - 13 0.0171 - 14 0.00345 - 15 0.0185 - 16 0.000345 - 18 0.043 - 19 0.000575 - 20 0.0436 - 21 0.00832 - 22 0.000921 - 23 0.000806 - 24 0.00146 - 25 3.84e-05 - 26 0.00809 - 28 0.0181 - 29 0.0136 - 30 0.0134 - 31 0.00951 - 32 0.00326 - 33 0.0061 - 34 0.000614 - 35 0.000115 - 36 7.67e-05 - 37 0.00119 - 41 0.0252 - 42 0.00153 - 43 0.000422 - 44 0.000959 - 45 0.0114 - 46 0.00046 - 47 0.0233 - - 14 13431 41 0 - 0 0.0187 - 1 0.000223 - 2 0.0561 - 3 0.0497 - 4 0.12 - 6 0.000149 - 7 0.281 - 8 0.11 - 9 0.00439 - 10 0.00499 - 12 0.000223 - 13 0.00864 - 14 0.00127 - 15 0.00849 - 16 0.000149 - 18 0.0237 - 19 0.00067 - 20 0.0344 - 21 0.00834 - 22 0.000968 - 23 0.00119 - 24 0.00499 - 26 0.0237 - 28 0.0472 - 29 0.0201 - 30 0.0331 - 31 0.0135 - 32 0.0108 - 33 0.0134 - 34 0.000968 - 35 0.000298 - 36 7.45e-05 - 37 0.00328 - 40 7.45e-05 - 41 0.0369 - 42 0.00335 - 43 0.000298 - 44 0.00067 - 45 0.00752 - 46 0.000819 - 47 0.0462 - - 15 1891 29 0 - 0 0.00635 - 2 0.0212 - 3 0.028 - 4 0.366 - 7 0.24 - 8 0.0317 - 9 0.00159 - 10 0.000529 - 13 0.027 - 14 0.0111 - 15 0.01 - 18 0.0296 - 19 0.000529 - 20 0.0317 - 21 0.00687 - 24 0.000529 - 26 0.0169 - 28 0.0164 - 29 0.0196 - 30 0.0206 - 31 0.0169 - 32 0.00212 - 33 0.0074 - 37 0.00106 - 41 0.0365 - 42 0.0037 - 45 0.0037 - 46 0.000529 - 47 0.0418 - - 16 101 21 0 - 2 0.0594 - 3 0.0396 - 4 0.168 - 7 0.277 - 8 0.0396 - 10 0.0099 - 13 0.0297 - 15 0.0198 - 20 0.0396 - 21 0.0099 - 26 0.0297 - 28 0.0198 - 29 0.0099 - 30 0.0297 - 31 0.0198 - 32 0.0099 - 33 0.0198 - 41 0.0495 - 42 0.0198 - 45 0.0099 - 47 0.0891 - - 18 12 5 0 - 4 0.583 - 7 0.0833 - 8 0.0833 - 13 0.167 - 47 0.0833 - - 21 3 3 0 - 2 0.333 - 4 0.333 - 15 0.333 - - 30 120 24 0 - 0 0.00833 - 2 0.158 - 3 0.0333 - 4 0.267 - 7 0.15 - 8 0.0333 - 10 0.00833 - 13 0.00833 - 14 0.00833 - 15 0.00833 - 18 0.05 - 20 0.05 - 21 0.0167 - 24 0.00833 - 26 0.0167 - 28 0.0333 - 29 0.00833 - 30 0.0333 - 31 0.00833 - 32 0.00833 - 33 0.025 - 41 0.025 - 45 0.00833 - 47 0.025 - - 31 89 15 0 - 0 0.0225 - 2 0.0112 - 3 0.0112 - 4 0.258 - 7 0.247 - 8 0.124 - 13 0.0674 - 15 0.0337 - 18 0.0562 - 20 0.0337 - 21 0.0112 - 28 0.0225 - 29 0.0449 - 30 0.0337 - 47 0.0225 - - 39 13 2 0 - 4 0.923 - 19 0.0769 - - 41 312 24 0 - 0 0.0128 - 2 0.00962 - 3 0.00641 - 4 0.471 - 7 0.17 - 8 0.0417 - 15 0.00321 - 18 0.00641 - 20 0.0577 - 21 0.00641 - 23 0.00321 - 24 0.00321 - 26 0.0128 - 28 0.0128 - 29 0.00641 - 30 0.00962 - 31 0.00321 - 32 0.00962 - 33 0.016 - 34 0.00321 - 41 0.0641 - 42 0.00641 - 45 0.0192 - 47 0.0449 - - 43 3 3 0 - 2 0.333 - 4 0.333 - 44 0.333 - - 44 7 5 0 - 2 0.143 - 4 0.286 - 7 0.286 - 21 0.143 - 29 0.143 - - 45 95 14 0 - 0 0.0105 - 2 0.0211 - 3 0.0105 - 4 0.537 - 7 0.147 - 8 0.0526 - 13 0.0105 - 18 0.0316 - 20 0.0421 - 28 0.0421 - 30 0.0211 - 31 0.0105 - 41 0.0526 - 47 0.0105 - - 46 136 9 0 - 2 0.00735 - 4 0.00735 - 8 0.0221 - 16 0.00735 - 19 0.00735 - 20 0.00735 - 21 0.0147 - 41 0.0147 - 45 0.912 - - 47 1224 33 0 - 0 0.018 - 2 0.0359 - 3 0.0098 - 4 0.393 - 7 0.151 - 8 0.0237 - 9 0.000817 - 10 0.00163 - 13 0.0106 - 14 0.00408 - 18 0.000817 - 19 0.00163 - 20 0.0474 - 21 0.0637 - 22 0.00163 - 23 0.00817 - 24 0.00163 - 26 0.0147 - 28 0.0221 - 29 0.0327 - 30 0.0163 - 31 0.00817 - 32 0.00654 - 33 0.0106 - 34 0.00163 - 35 0.000817 - 37 0.0049 - 41 0.0408 - 42 0.00572 - 43 0.000817 - 44 0.00327 - 45 0.00654 - 47 0.0507 - - 48 199 22 0 - 0 0.0101 - 2 0.0201 - 3 0.00503 - 4 0.533 - 7 0.121 - 8 0.0452 - 17 0.00503 - 18 0.0653 - 20 0.0704 - 21 0.0151 - 23 0.00503 - 24 0.00503 - 26 0.00503 - 28 0.0101 - 30 0.0151 - 31 0.00503 - 32 0.0101 - 33 0.00503 - 41 0.0201 - 42 0.00503 - 45 0.00503 - 47 0.0201 - - 54 13 5 0 - 4 0.385 - 7 0.308 - 8 0.154 - 20 0.0769 - 29 0.0769 - - 55 22 9 0 - 2 0.0455 - 3 0.0455 - 4 0.455 - 7 0.0909 - 8 0.0455 - 18 0.0909 - 20 0.0909 - 21 0.0909 - 30 0.0455 - - 56 68 12 0 - 2 0.0147 - 3 0.0294 - 4 0.309 - 7 0.221 - 8 0.0441 - 20 0.0882 - 26 0.0441 - 28 0.0735 - 29 0.0294 - 30 0.0441 - 31 0.0294 - 41 0.0735 - - 58 17 5 0 - 0 0.118 - 4 0.588 - 7 0.176 - 24 0.0588 - 33 0.0588 - - 60 30 3 0 - 4 0.9 - 7 0.0333 - 20 0.0667 - - 68 40 12 0 - 2 0.025 - 4 0.475 - 7 0.15 - 8 0.025 - 20 0.025 - 26 0.05 - 28 0.075 - 29 0.025 - 30 0.025 - 37 0.025 - 41 0.05 - 47 0.05 - - 9 1597 31 14 - 0 0.0601 - 1 0.00125 - 2 0.0507 - 3 0.015 - 4 0.249 - 7 0.193 - 8 0.0106 - 12 0.000626 - 13 0.0025 - 14 0.00689 - 15 0.0025 - 16 0.000626 - 18 0.0113 - 19 0.0025 - 20 0.0144 - 21 0.0244 - 24 0.00626 - 26 0.0288 - 28 0.102 - 29 0.0394 - 30 0.0557 - 31 0.01 - 32 0.0276 - 33 0.0244 - 34 0.000626 - 37 0.000626 - 41 0.025 - 42 0.00313 - 43 0.000626 - 45 0.01 - 47 0.02 - - 2 4 4 0 - 0 0.25 - 7 0.25 - 28 0.25 - 41 0.25 - - 3 5 1 0 - 4 1 - - 8 103 16 0 - 0 0.0291 - 2 0.117 - 4 0.214 - 7 0.243 - 21 0.0194 - 24 0.00971 - 26 0.0777 - 28 0.0485 - 29 0.0583 - 30 0.0485 - 31 0.0194 - 32 0.0291 - 33 0.0194 - 41 0.0291 - 45 0.0194 - 47 0.0194 - - 13 734 28 0 - 0 0.0436 - 1 0.00136 - 2 0.0354 - 3 0.0109 - 4 0.384 - 7 0.147 - 8 0.00954 - 12 0.00136 - 13 0.00136 - 14 0.00817 - 15 0.00545 - 16 0.00136 - 18 0.0177 - 19 0.00545 - 20 0.0123 - 21 0.0123 - 24 0.0109 - 26 0.03 - 28 0.0858 - 29 0.0245 - 30 0.045 - 31 0.00545 - 32 0.0232 - 33 0.0204 - 41 0.0327 - 42 0.00545 - 45 0.00545 - 47 0.0136 - - 14 473 26 0 - 0 0.0402 - 2 0.0465 - 3 0.0275 - 4 0.0867 - 7 0.296 - 8 0.0148 - 13 0.00211 - 14 0.00423 - 18 0.0106 - 20 0.0169 - 21 0.0127 - 24 0.00211 - 26 0.0317 - 28 0.123 - 29 0.0613 - 30 0.0677 - 31 0.00846 - 32 0.0317 - 33 0.0296 - 34 0.00211 - 37 0.00211 - 41 0.0233 - 42 0.00211 - 43 0.00211 - 45 0.0148 - 47 0.0402 - - 15 39 8 0 - 2 0.0513 - 4 0.513 - 7 0.154 - 20 0.0513 - 28 0.103 - 29 0.0256 - 30 0.0769 - 41 0.0256 - - 16 2 2 0 - 8 0.5 - 29 0.5 - - 30 2 2 0 - 2 0.5 - 26 0.5 - - 41 17 7 0 - 4 0.471 - 7 0.235 - 20 0.0588 - 30 0.0588 - 31 0.0588 - 32 0.0588 - 33 0.0588 - - 45 3 3 0 - 0 0.333 - 4 0.333 - 33 0.333 - - 46 1 1 0 - 45 1 - - 47 201 18 0 - 0 0.194 - 1 0.00498 - 2 0.0896 - 3 0.0149 - 4 0.0746 - 7 0.109 - 8 0.00995 - 13 0.00995 - 14 0.0149 - 20 0.00498 - 21 0.109 - 28 0.154 - 29 0.0398 - 30 0.0647 - 31 0.0249 - 32 0.0398 - 33 0.0299 - 45 0.00995 - - 48 4 3 0 - 4 0.25 - 7 0.25 - 20 0.5 - - 56 5 4 0 - 7 0.2 - 28 0.2 - 30 0.4 - 47 0.2 - - 10 1526 27 9 - 0 0.00197 - 2 0.0262 - 3 0.019 - 4 0.479 - 7 0.106 - 8 0.00524 - 13 0.00262 - 14 0.000655 - 18 0.132 - 19 0.000655 - 20 0.0511 - 21 0.0059 - 24 0.00459 - 26 0.00328 - 28 0.0105 - 29 0.0151 - 30 0.00655 - 31 0.00262 - 32 0.00328 - 33 0.00721 - 34 0.00131 - 35 0.00131 - 37 0.00262 - 41 0.0256 - 42 0.00262 - 45 0.0177 - 47 0.0655 - - 3 13 2 0 - 4 0.923 - 7 0.0769 - - 8 156 15 0 - 2 0.0128 - 3 0.0449 - 4 0.429 - 7 0.147 - 8 0.00641 - 18 0.154 - 20 0.0897 - 21 0.00641 - 28 0.00641 - 29 0.00641 - 35 0.00641 - 41 0.0192 - 42 0.00641 - 45 0.0321 - 47 0.0321 - - 13 661 14 0 - 2 0.00756 - 3 0.0121 - 4 0.632 - 7 0.0242 - 8 0.00756 - 13 0.00151 - 18 0.219 - 19 0.00151 - 20 0.059 - 28 0.00151 - 33 0.00151 - 37 0.00151 - 41 0.00756 - 47 0.0227 - - 14 291 20 0 - 2 0.0447 - 3 0.0412 - 4 0.316 - 7 0.22 - 8 0.00687 - 13 0.00344 - 14 0.00344 - 18 0.0962 - 20 0.0481 - 21 0.00687 - 26 0.00687 - 29 0.00687 - 33 0.0103 - 34 0.00344 - 35 0.00344 - 37 0.00344 - 41 0.055 - 42 0.00344 - 45 0.0447 - 47 0.0756 - - 15 19 9 0 - 2 0.0526 - 3 0.0526 - 4 0.211 - 7 0.263 - 26 0.0526 - 28 0.0526 - 33 0.105 - 41 0.0526 - 47 0.158 - - 16 3 3 0 - 4 0.333 - 7 0.333 - 32 0.333 - - 31 3 3 0 - 3 0.333 - 18 0.333 - 20 0.333 - - 47 359 21 0 - 0 0.00836 - 2 0.0501 - 4 0.351 - 7 0.139 - 13 0.00557 - 20 0.0279 - 21 0.0167 - 24 0.0195 - 26 0.00557 - 28 0.0362 - 29 0.0557 - 30 0.0279 - 31 0.00836 - 32 0.0111 - 33 0.0139 - 34 0.00279 - 37 0.00279 - 41 0.039 - 42 0.00557 - 45 0.0195 - 47 0.153 - - 56 3 3 0 - 4 0.333 - 31 0.333 - 37 0.333 - - 12 5 4 0 - 4 0.4 - 15 0.2 - 45 0.2 - 46 0.2 - - 13 129892 43 24 - 0 0.0054 - 1 0.000123 - 2 0.0201 - 3 0.0473 - 4 0.298 - 6 0.000123 - 7 0.0813 - 8 0.21 - 9 0.00684 - 10 0.00527 - 12 3.85e-05 - 13 0.123 - 14 0.0094 - 15 0.0406 - 16 0.000762 - 18 0.0276 - 19 0.000362 - 20 0.0287 - 21 0.00234 - 22 5.39e-05 - 23 7.7e-06 - 24 0.000993 - 25 1.54e-05 - 26 0.0052 - 27 1.54e-05 - 28 0.0115 - 29 0.00598 - 30 0.0138 - 31 0.00949 - 32 0.00208 - 33 0.00347 - 34 0.000223 - 35 0.000108 - 36 1.54e-05 - 37 0.000908 - 40 0.0001 - 41 0.0179 - 42 0.00142 - 43 0.000508 - 44 0.000608 - 45 0.00449 - 46 0.00184 - 47 0.0122 - - 2 1627 31 0 - 0 0.0086 - 2 0.0172 - 3 0.00738 - 4 0.189 - 7 0.205 - 8 0.144 - 9 0.00553 - 10 0.00246 - 13 0.0688 - 14 0.00738 - 15 0.0277 - 16 0.00123 - 18 0.0332 - 20 0.0424 - 21 0.00307 - 24 0.00123 - 26 0.0117 - 28 0.0203 - 29 0.0086 - 30 0.0178 - 31 0.0135 - 32 0.00246 - 33 0.00676 - 37 0.000615 - 41 0.119 - 42 0.0043 - 43 0.00123 - 44 0.00123 - 45 0.00615 - 46 0.000615 - 47 0.0209 - - 3 92 11 0 - 3 0.0217 - 4 0.478 - 7 0.174 - 8 0.0435 - 13 0.0217 - 15 0.0109 - 18 0.163 - 20 0.0217 - 30 0.0109 - 41 0.0435 - 45 0.0109 - - 4 1 1 0 - 31 1 - - 8 268 24 0 - 0 0.00373 - 2 0.123 - 3 0.0336 - 4 0.243 - 7 0.127 - 8 0.097 - 9 0.00373 - 10 0.0112 - 13 0.104 - 14 0.00373 - 15 0.0373 - 18 0.0672 - 20 0.0299 - 26 0.00746 - 28 0.0187 - 29 0.0149 - 30 0.0149 - 31 0.00373 - 33 0.00373 - 37 0.00373 - 41 0.0261 - 42 0.00373 - 45 0.00746 - 47 0.0112 - - 10 1 1 0 - 45 1 - - 13 15006 38 0 - 0 0.004 - 1 0.0002 - 2 0.0364 - 3 0.0287 - 4 0.304 - 6 0.000267 - 7 0.0826 - 8 0.211 - 9 0.00553 - 10 0.0072 - 13 0.0804 - 14 0.00653 - 15 0.0508 - 16 0.0004 - 18 0.0394 - 19 0.0002 - 20 0.0337 - 21 0.00187 - 22 6.66e-05 - 24 0.0008 - 25 0.000133 - 26 0.00433 - 28 0.0114 - 29 0.00513 - 30 0.0114 - 31 0.011 - 32 0.0022 - 33 0.0046 - 35 0.0002 - 37 0.001 - 40 0.0004 - 41 0.028 - 42 0.00233 - 43 0.0006 - 44 0.000666 - 45 0.0076 - 46 0.0016 - 47 0.0133 - - 14 9907 35 0 - 0 0.00757 - 2 0.0784 - 3 0.0262 - 4 0.0705 - 7 0.178 - 8 0.229 - 9 0.0139 - 10 0.00737 - 13 0.0728 - 14 0.00262 - 15 0.0373 - 16 0.000101 - 18 0.0196 - 19 0.000303 - 20 0.0263 - 21 0.00313 - 23 0.000101 - 24 0.00444 - 26 0.0146 - 28 0.0333 - 29 0.013 - 30 0.028 - 31 0.0133 - 32 0.00616 - 33 0.0125 - 34 0.000808 - 35 0.000202 - 37 0.00384 - 41 0.0365 - 42 0.00303 - 43 0.000202 - 44 0.000505 - 45 0.00757 - 46 0.00212 - 47 0.0461 - - 15 788 27 0 - 0 0.00635 - 2 0.0127 - 3 0.0178 - 4 0.0787 - 7 0.085 - 8 0.184 - 13 0.221 - 14 0.0127 - 15 0.225 - 16 0.0152 - 18 0.0127 - 20 0.019 - 24 0.00127 - 26 0.00888 - 28 0.00381 - 29 0.0114 - 30 0.00888 - 31 0.00381 - 33 0.014 - 35 0.00127 - 37 0.00254 - 41 0.0292 - 42 0.00127 - 44 0.00254 - 45 0.00381 - 46 0.00254 - 47 0.0152 - - 16 9 7 0 - 2 0.222 - 4 0.222 - 7 0.111 - 13 0.111 - 14 0.111 - 15 0.111 - 20 0.111 - - 18 2901 26 0 - 0 0.00103 - 2 0.00483 - 3 0.00345 - 4 0.694 - 7 0.0476 - 8 0.0958 - 9 0.00276 - 10 0.00207 - 13 0.0589 - 14 0.00414 - 15 0.0269 - 19 0.000345 - 20 0.0203 - 21 0.000689 - 26 0.00483 - 28 0.00172 - 29 0.0031 - 30 0.00552 - 31 0.00172 - 32 0.00138 - 33 0.00138 - 41 0.00276 - 42 0.000345 - 44 0.000345 - 45 0.000689 - 47 0.0138 - - 20 2 2 0 - 7 0.5 - 26 0.5 - - 21 3 3 0 - 2 0.333 - 7 0.333 - 21 0.333 - - 26 2 2 0 - 3 0.5 - 29 0.5 - - 29 11 5 0 - 3 0.273 - 4 0.0909 - 7 0.0909 - 8 0.273 - 13 0.273 - - 30 102 12 0 - 2 0.186 - 4 0.412 - 7 0.0392 - 8 0.118 - 10 0.0294 - 13 0.0588 - 15 0.0392 - 18 0.0392 - 20 0.0196 - 31 0.0196 - 41 0.0294 - 45 0.0098 - - 31 13 5 0 - 7 0.538 - 8 0.154 - 13 0.0769 - 15 0.154 - 41 0.0769 - - 41 247 24 0 - 0 0.00405 - 2 0.0162 - 4 0.19 - 7 0.243 - 8 0.0729 - 9 0.00405 - 10 0.00405 - 13 0.0567 - 15 0.00405 - 18 0.0162 - 20 0.0364 - 21 0.00405 - 26 0.0162 - 28 0.0121 - 29 0.0121 - 30 0.0202 - 31 0.0162 - 32 0.00405 - 33 0.0202 - 41 0.174 - 42 0.0162 - 44 0.00405 - 45 0.0202 - 47 0.0324 - - 42 4 2 0 - 4 0.5 - 7 0.5 - - 43 15 3 0 - 2 0.0667 - 8 0.2 - 44 0.733 - - 45 36 10 0 - 2 0.0556 - 3 0.0556 - 4 0.389 - 7 0.25 - 8 0.111 - 15 0.0278 - 26 0.0278 - 30 0.0278 - 42 0.0278 - 47 0.0278 - - 46 101 7 0 - 4 0.0198 - 7 0.0099 - 8 0.307 - 13 0.119 - 15 0.0099 - 20 0.0198 - 45 0.515 - - 47 98717 41 0 - 0 0.0055 - 1 0.000132 - 2 0.0119 - 3 0.0547 - 4 0.312 - 6 0.000122 - 7 0.0697 - 8 0.213 - 9 0.00656 - 10 0.00492 - 12 5.06e-05 - 13 0.137 - 14 0.0107 - 15 0.0387 - 16 0.00079 - 18 0.0272 - 19 0.000405 - 20 0.0283 - 21 0.00239 - 22 6.08e-05 - 24 0.000709 - 26 0.00422 - 27 2.03e-05 - 28 0.00951 - 29 0.00538 - 30 0.013 - 31 0.0091 - 32 0.00169 - 33 0.00229 - 34 0.000213 - 35 8.1e-05 - 36 2.03e-05 - 37 0.000618 - 40 7.09e-05 - 41 0.0127 - 42 0.00106 - 43 0.000537 - 44 0.000476 - 45 0.00321 - 46 0.00193 - 47 0.00844 - - 48 12 4 0 - 4 0.667 - 7 0.0833 - 18 0.167 - 47 0.0833 - - 58 9 5 0 - 2 0.111 - 8 0.222 - 13 0.333 - 14 0.222 - 20 0.111 - - 14 59133 41 12 - 0 0.00551 - 1 8.46e-05 - 2 0.028 - 3 0.0954 - 4 0.101 - 6 0.000135 - 7 0.098 - 8 0.238 - 9 0.00913 - 10 0.00495 - 12 6.76e-05 - 13 0.172 - 14 0.0106 - 15 0.0368 - 16 0.000507 - 18 0.019 - 19 0.000287 - 20 0.0275 - 21 0.00211 - 22 1.69e-05 - 23 3.38e-05 - 24 0.00215 - 26 0.00883 - 28 0.0216 - 29 0.0107 - 30 0.0221 - 31 0.0124 - 32 0.00499 - 33 0.00504 - 34 0.00093 - 35 0.000237 - 36 3.38e-05 - 37 0.00277 - 40 6.76e-05 - 41 0.0213 - 42 0.00235 - 43 0.000541 - 44 0.000321 - 45 0.00424 - 46 0.00194 - 47 0.0282 - - 2 995 29 0 - 0 0.00603 - 2 0.0101 - 3 0.0141 - 4 0.112 - 7 0.22 - 8 0.166 - 9 0.0111 - 10 0.00503 - 13 0.112 - 14 0.00101 - 15 0.0211 - 18 0.0221 - 19 0.00101 - 20 0.0332 - 21 0.00402 - 24 0.00302 - 26 0.0121 - 28 0.0322 - 29 0.00503 - 30 0.0251 - 31 0.0121 - 32 0.00704 - 33 0.00603 - 35 0.00101 - 37 0.00201 - 41 0.109 - 42 0.00201 - 46 0.00201 - 47 0.0442 - - 7 1 1 0 - 21 1 - - 8 4 4 0 - 10 0.25 - 15 0.25 - 31 0.25 - 47 0.25 - - 13 1104 26 0 - 0 0.000906 - 2 0.0435 - 3 0.0154 - 4 0.302 - 7 0.0462 - 8 0.232 - 9 0.00181 - 10 0.00543 - 13 0.137 - 14 0.00996 - 15 0.067 - 18 0.0362 - 20 0.0272 - 21 0.000906 - 26 0.00181 - 28 0.00634 - 29 0.00181 - 30 0.00453 - 31 0.0127 - 33 0.00362 - 40 0.000906 - 41 0.0317 - 42 0.00181 - 44 0.000906 - 45 0.00272 - 47 0.00634 - - 14 561 28 0 - 0 0.00891 - 1 0.00178 - 2 0.082 - 3 0.0321 - 4 0.0731 - 7 0.152 - 8 0.225 - 9 0.00535 - 10 0.0125 - 13 0.0927 - 14 0.00891 - 15 0.0392 - 16 0.00178 - 18 0.0232 - 20 0.0214 - 21 0.00178 - 26 0.016 - 28 0.0107 - 29 0.0214 - 30 0.025 - 31 0.016 - 32 0.0125 - 33 0.00713 - 37 0.00535 - 41 0.0232 - 42 0.00891 - 45 0.00535 - 47 0.0677 - - 15 46 14 0 - 2 0.087 - 4 0.0652 - 7 0.174 - 8 0.0652 - 13 0.152 - 14 0.0217 - 15 0.217 - 24 0.0217 - 26 0.0217 - 30 0.0217 - 34 0.0217 - 37 0.0217 - 41 0.0435 - 47 0.0652 - - 18 545 28 0 - 0 0.00183 - 2 0.0183 - 3 0.0312 - 4 0.27 - 7 0.196 - 8 0.128 - 10 0.00734 - 13 0.0569 - 14 0.00917 - 15 0.0404 - 18 0.00734 - 20 0.0514 - 21 0.00183 - 24 0.00183 - 26 0.0202 - 28 0.0422 - 29 0.0183 - 30 0.0239 - 31 0.0147 - 32 0.00183 - 33 0.011 - 34 0.00183 - 37 0.0055 - 41 0.011 - 42 0.0055 - 45 0.00734 - 46 0.00183 - 47 0.0128 - - 21 2 2 0 - 7 0.5 - 45 0.5 - - 30 5 3 0 - 3 0.2 - 13 0.4 - 28 0.4 - - 41 126 20 0 - 3 0.00794 - 4 0.0794 - 7 0.23 - 8 0.0714 - 13 0.0952 - 14 0.00794 - 15 0.0159 - 18 0.0317 - 20 0.0397 - 21 0.00794 - 26 0.0159 - 28 0.0159 - 29 0.0159 - 30 0.0397 - 32 0.0159 - 33 0.00794 - 41 0.238 - 42 0.0317 - 45 0.0159 - 47 0.0159 - - 46 7 3 0 - 8 0.286 - 14 0.143 - 45 0.571 - - 47 55733 41 0 - 0 0.00562 - 1 7.18e-05 - 2 0.0276 - 3 0.1 - 4 0.0954 - 6 0.000144 - 7 0.095 - 8 0.241 - 9 0.0094 - 10 0.00484 - 12 7.18e-05 - 13 0.176 - 14 0.0108 - 15 0.0363 - 16 0.00052 - 18 0.0186 - 19 0.000287 - 20 0.0273 - 21 0.00208 - 22 1.79e-05 - 23 3.59e-05 - 24 0.00219 - 26 0.0087 - 28 0.0216 - 29 0.0108 - 30 0.0223 - 31 0.0124 - 32 0.00499 - 33 0.00497 - 34 0.000951 - 35 0.000233 - 36 3.59e-05 - 37 0.00278 - 40 5.38e-05 - 41 0.0191 - 42 0.00221 - 43 0.000574 - 44 0.000323 - 45 0.0042 - 46 0.00201 - 47 0.0281 - - 15 90066 40 28 - 0 0.00298 - 1 4.44e-05 - 2 0.0414 - 3 0.00516 - 4 0.0969 - 6 0.000544 - 7 0.163 - 8 0.0247 - 9 0.000611 - 10 0.000244 - 12 7.77e-05 - 13 0.0143 - 14 0.00192 - 15 0.379 - 16 0.00816 - 18 0.00975 - 19 0.000155 - 20 0.0042 - 21 0.00236 - 24 0.000744 - 25 2.22e-05 - 26 0.0111 - 28 0.00883 - 29 0.0172 - 30 0.00653 - 31 0.0057 - 32 0.00205 - 33 0.0132 - 34 0.00101 - 35 0.000489 - 36 2.22e-05 - 37 0.00244 - 40 0.000644 - 41 0.0659 - 42 0.00489 - 43 0.000533 - 44 0.00461 - 45 0.00521 - 46 0.00472 - 47 0.0883 - - 0 7 5 0 - 4 0.143 - 7 0.429 - 8 0.143 - 41 0.143 - 47 0.143 - - 2 1783 31 0 - 0 0.00112 - 2 0.0202 - 3 0.00449 - 4 0.0892 - 6 0.000561 - 7 0.192 - 8 0.0135 - 13 0.00953 - 14 0.0101 - 15 0.306 - 16 0.0107 - 18 0.0129 - 20 0.00449 - 21 0.00112 - 24 0.00224 - 26 0.0107 - 28 0.00729 - 29 0.00897 - 30 0.00897 - 31 0.00168 - 32 0.000561 - 33 0.0028 - 34 0.000561 - 37 0.00112 - 40 0.00449 - 41 0.183 - 42 0.00449 - 44 0.0028 - 45 0.00393 - 46 0.000561 - 47 0.0802 - - 3 170 13 0 - 2 0.0118 - 3 0.0235 - 4 0.494 - 7 0.118 - 8 0.0471 - 15 0.0529 - 18 0.0706 - 20 0.129 - 28 0.0118 - 33 0.00588 - 41 0.0176 - 45 0.00588 - 47 0.0118 - - 4 9 5 0 - 0 0.111 - 2 0.111 - 7 0.222 - 15 0.444 - 45 0.111 - - 6 42 14 0 - 0 0.0238 - 2 0.0238 - 4 0.0476 - 6 0.0714 - 7 0.0952 - 8 0.0476 - 13 0.0238 - 15 0.357 - 26 0.0238 - 30 0.0238 - 33 0.0476 - 40 0.0476 - 41 0.0476 - 47 0.119 - - 7 26 10 0 - 4 0.0769 - 7 0.0769 - 13 0.0385 - 14 0.0385 - 15 0.385 - 18 0.0385 - 26 0.0385 - 41 0.154 - 45 0.115 - 47 0.0385 - - 8 530 25 0 - 0 0.00189 - 2 0.0226 - 3 0.0245 - 4 0.219 - 7 0.117 - 8 0.0528 - 9 0.00377 - 10 0.00377 - 13 0.017 - 15 0.408 - 18 0.00566 - 20 0.0151 - 26 0.00189 - 28 0.00377 - 29 0.00755 - 30 0.00755 - 31 0.00566 - 32 0.00189 - 33 0.00566 - 34 0.00189 - 37 0.00189 - 41 0.0283 - 44 0.00189 - 45 0.00189 - 47 0.0396 - - 13 5143 34 0 - 0 0.00136 - 2 0.0212 - 3 0.0148 - 4 0.396 - 6 0.000194 - 7 0.0609 - 8 0.0791 - 9 0.00331 - 10 0.000972 - 13 0.00719 - 14 0.000778 - 15 0.278 - 16 0.00486 - 18 0.0282 - 19 0.000583 - 20 0.0249 - 21 0.00156 - 24 0.000583 - 26 0.0035 - 28 0.00681 - 29 0.00506 - 30 0.00817 - 31 0.00564 - 32 0.00156 - 33 0.00506 - 37 0.00117 - 40 0.000583 - 41 0.0124 - 42 0.00117 - 43 0.000194 - 44 0.00117 - 45 0.00136 - 46 0.000194 - 47 0.021 - - 14 2150 33 0 - 0 0.00465 - 2 0.0488 - 3 0.0512 - 4 0.107 - 7 0.158 - 8 0.0963 - 9 0.00884 - 10 0.00279 - 13 0.00186 - 14 0.00093 - 15 0.25 - 16 0.00186 - 18 0.00837 - 20 0.0163 - 21 0.00279 - 24 0.00186 - 26 0.0223 - 28 0.0219 - 29 0.0107 - 30 0.0163 - 31 0.00744 - 32 0.00279 - 33 0.00651 - 34 0.00093 - 36 0.000465 - 37 0.0014 - 41 0.047 - 42 0.00279 - 43 0.00093 - 44 0.0014 - 45 0.00233 - 46 0.00093 - 47 0.093 - - 15 33917 38 0 - 0 0.00433 - 1 2.95e-05 - 2 0.0472 - 3 0.00448 - 4 0.102 - 6 0.000383 - 7 0.168 - 8 0.0195 - 9 0.000206 - 10 0.000236 - 12 5.9e-05 - 13 0.0196 - 14 0.00162 - 15 0.265 - 16 0.00363 - 18 0.0144 - 19 0.000147 - 20 0.00419 - 21 0.00242 - 24 0.000885 - 26 0.0134 - 28 0.00867 - 29 0.0286 - 30 0.00678 - 31 0.00436 - 32 0.00236 - 33 0.0287 - 34 0.00115 - 35 0.000649 - 37 0.00327 - 40 0.000472 - 41 0.0754 - 42 0.00669 - 43 0.000118 - 44 0.00313 - 45 0.00566 - 46 0.0108 - 47 0.142 - - 16 1508 30 0 - 0 0.00265 - 2 0.059 - 3 0.0106 - 4 0.115 - 7 0.208 - 8 0.0232 - 13 0.00464 - 14 0.00133 - 15 0.273 - 16 0.00133 - 18 0.0199 - 20 0.00862 - 21 0.000663 - 24 0.00133 - 25 0.000663 - 26 0.00995 - 28 0.00597 - 29 0.00995 - 30 0.00862 - 31 0.00464 - 33 0.00597 - 34 0.000663 - 35 0.000663 - 37 0.00133 - 41 0.0603 - 42 0.0179 - 43 0.000663 - 44 0.000663 - 45 0.00663 - 47 0.137 - - 18 5065 34 0 - 0 0.0101 - 2 0.0369 - 3 0.00118 - 4 0.0539 - 7 0.243 - 8 0.00967 - 9 0.000197 - 13 0.00296 - 14 0.00079 - 15 0.351 - 16 0.00415 - 18 0.00079 - 19 0.000197 - 20 0.000592 - 21 0.00494 - 24 0.00257 - 26 0.017 - 28 0.0265 - 29 0.0186 - 30 0.0128 - 31 0.00731 - 32 0.00592 - 33 0.0113 - 34 0.000592 - 35 0.000395 - 36 0.000197 - 37 0.00138 - 41 0.0661 - 42 0.00415 - 43 0.000197 - 44 0.00118 - 45 0.00395 - 46 0.00237 - 47 0.0971 - - 19 6 3 0 - 7 0.333 - 15 0.5 - 45 0.167 - - 21 4 1 0 - 47 1 - - 29 4 3 0 - 4 0.5 - 15 0.25 - 20 0.25 - - 30 22 6 0 - 2 0.0455 - 4 0.273 - 8 0.0909 - 15 0.5 - 18 0.0455 - 29 0.0455 - - 40 80 12 0 - 2 0.0625 - 4 0.0625 - 7 0.15 - 13 0.0125 - 15 0.463 - 16 0.0375 - 18 0.0125 - 31 0.0125 - 41 0.075 - 44 0.05 - 45 0.0125 - 47 0.05 - - 41 441 25 0 - 0 0.00454 - 2 0.0635 - 3 0.00227 - 4 0.0385 - 7 0.413 - 8 0.00907 - 13 0.0204 - 14 0.00454 - 15 0.0794 - 16 0.00454 - 18 0.00907 - 20 0.00454 - 21 0.00454 - 26 0.0181 - 28 0.00907 - 29 0.00454 - 30 0.00907 - 31 0.00454 - 37 0.00227 - 40 0.00227 - 41 0.204 - 42 0.0136 - 44 0.00227 - 45 0.0068 - 47 0.0658 - - 43 18 4 0 - 4 0.0556 - 13 0.0556 - 15 0.5 - 44 0.389 - - 44 6 5 0 - 2 0.167 - 4 0.167 - 15 0.333 - 26 0.167 - 32 0.167 - - 45 26 8 0 - 3 0.0385 - 4 0.192 - 7 0.154 - 8 0.0385 - 15 0.423 - 33 0.0385 - 41 0.0769 - 45 0.0385 - - 46 51 8 0 - 4 0.0196 - 7 0.0196 - 8 0.0196 - 15 0.333 - 18 0.0196 - 28 0.0196 - 45 0.49 - 47 0.0784 - - 47 38960 39 0 - 0 0.00108 - 1 7.7e-05 - 2 0.0398 - 3 0.00198 - 4 0.0551 - 6 0.000796 - 7 0.158 - 8 0.0203 - 9 0.000231 - 10 2.57e-05 - 12 0.000128 - 13 0.0134 - 14 0.00218 - 15 0.515 - 16 0.0138 - 18 0.0037 - 19 0.000128 - 20 0.000385 - 21 0.00223 - 24 0.000282 - 25 2.57e-05 - 26 0.00893 - 28 0.00649 - 29 0.0102 - 30 0.00454 - 31 0.00685 - 32 0.00149 - 33 0.00249 - 34 0.00113 - 35 0.000488 - 37 0.00223 - 40 0.000719 - 41 0.0599 - 42 0.00357 - 43 0.001 - 44 0.00706 - 45 0.0049 - 46 0.0011 - 47 0.0488 - - 48 41 7 0 - 4 0.146 - 7 0.0488 - 8 0.0244 - 15 0.707 - 18 0.0244 - 28 0.0244 - 47 0.0244 - - 54 5 3 0 - 4 0.6 - 7 0.2 - 47 0.2 - - 55 2 2 0 - 3 0.5 - 8 0.5 - - 58 35 7 0 - 2 0.0571 - 4 0.0857 - 7 0.0857 - 8 0.0857 - 15 0.629 - 20 0.0286 - 30 0.0286 - - 68 6 2 0 - 4 0.5 - 7 0.5 - - 16 2650 32 9 - 0 0.00189 - 2 0.0325 - 3 0.0136 - 4 0.156 - 7 0.0634 - 8 0.0408 - 9 0.000755 - 10 0.00113 - 13 0.00453 - 14 0.000755 - 15 0.57 - 16 0.0158 - 18 0.0125 - 19 0.000377 - 20 0.00189 - 21 0.0034 - 26 0.00377 - 28 0.00453 - 29 0.00113 - 30 0.00415 - 31 0.00151 - 32 0.000377 - 33 0.00226 - 34 0.000377 - 37 0.00113 - 40 0.00189 - 41 0.0208 - 42 0.00189 - 44 0.00113 - 45 0.00528 - 46 0.000377 - 47 0.0298 - - 2 111 10 0 - 3 0.00901 - 4 0.468 - 7 0.0631 - 8 0.018 - 15 0.288 - 18 0.00901 - 26 0.018 - 41 0.0541 - 45 0.018 - 47 0.0541 - - 8 8 3 0 - 3 0.125 - 15 0.75 - 45 0.125 - - 13 94 10 0 - 2 0.0426 - 3 0.0106 - 4 0.0638 - 7 0.0106 - 8 0.0426 - 13 0.0106 - 15 0.787 - 16 0.0106 - 20 0.0106 - 41 0.0106 - - 14 27 7 0 - 2 0.111 - 4 0.111 - 7 0.0741 - 15 0.593 - 16 0.037 - 28 0.037 - 47 0.037 - - 15 731 19 0 - 0 0.00137 - 2 0.0369 - 4 0.0301 - 7 0.0451 - 8 0.00274 - 13 0.0041 - 15 0.774 - 16 0.00684 - 18 0.0301 - 20 0.00274 - 21 0.00274 - 26 0.00137 - 29 0.00137 - 30 0.00137 - 33 0.00274 - 40 0.00547 - 41 0.0219 - 45 0.00137 - 47 0.0274 - - 16 42 11 0 - 3 0.143 - 4 0.119 - 7 0.119 - 8 0.119 - 15 0.167 - 26 0.0238 - 28 0.0238 - 41 0.0714 - 42 0.0238 - 45 0.0238 - 47 0.167 - - 18 66 8 0 - 2 0.0152 - 4 0.439 - 7 0.0303 - 8 0.0303 - 15 0.439 - 20 0.0152 - 26 0.0152 - 47 0.0152 - - 41 8 4 0 - 7 0.125 - 15 0.25 - 41 0.5 - 42 0.125 - - 47 1553 32 0 - 0 0.00258 - 2 0.0328 - 3 0.0174 - 4 0.191 - 7 0.0753 - 8 0.0599 - 9 0.00129 - 10 0.00193 - 13 0.00515 - 14 0.00129 - 15 0.495 - 16 0.0225 - 18 0.00644 - 19 0.000644 - 20 0.000644 - 21 0.00451 - 26 0.00322 - 28 0.00644 - 29 0.00129 - 30 0.00644 - 31 0.00258 - 32 0.000644 - 33 0.00258 - 34 0.000644 - 37 0.00193 - 40 0.000644 - 41 0.0161 - 42 0.00193 - 44 0.00193 - 45 0.0058 - 46 0.000644 - 47 0.0283 - - 17 321 24 2 - 0 0.0592 - 1 0.00312 - 2 0.0436 - 7 0.364 - 8 0.00312 - 9 0.00312 - 13 0.00623 - 14 0.00623 - 15 0.00312 - 19 0.00623 - 21 0.0343 - 24 0.00935 - 26 0.0218 - 28 0.103 - 29 0.0498 - 30 0.0498 - 31 0.0374 - 32 0.0156 - 33 0.0218 - 37 0.0125 - 41 0.0405 - 42 0.00312 - 45 0.0187 - 47 0.0841 - - 20 19 9 0 - 0 0.0526 - 7 0.316 - 26 0.0526 - 28 0.158 - 29 0.105 - 30 0.158 - 32 0.0526 - 42 0.0526 - 47 0.0526 - - 55 18 11 0 - 0 0.0556 - 2 0.0556 - 7 0.333 - 21 0.0556 - 26 0.111 - 28 0.0556 - 30 0.0556 - 31 0.0556 - 37 0.111 - 41 0.0556 - 47 0.0556 - - 18 8667 14 1 - 0 0.000115 - 3 0.00288 - 6 0.000231 - 8 0.00138 - 13 0.335 - 14 0.0631 - 15 0.587 - 16 0.00762 - 19 0.000808 - 21 0.000692 - 28 0.000577 - 30 0.000115 - 31 0.000346 - 32 0.000115 - - 13 4 4 0 - 13 0.25 - 14 0.25 - 15 0.25 - 21 0.25 - - 19 17428 40 9 - 0 0.00947 - 1 0.000115 - 2 0.0516 - 3 0.00138 - 4 0.0023 - 5 5.74e-05 - 7 0.171 - 8 0.00482 - 9 0.000402 - 10 0.000574 - 12 0.00304 - 13 0.0332 - 14 0.0155 - 15 0.00419 - 16 0.00023 - 18 5.74e-05 - 19 0.00161 - 21 0.0168 - 22 0.000402 - 23 5.74e-05 - 24 0.000115 - 26 0.00637 - 27 5.74e-05 - 28 0.0543 - 29 0.101 - 30 0.0205 - 31 0.0106 - 32 0.0237 - 33 0.0276 - 34 0.00861 - 35 0.0122 - 37 0.0274 - 40 5.74e-05 - 41 0.12 - 42 0.011 - 43 0.000516 - 44 0.00161 - 45 0.0876 - 46 0.0315 - 47 0.139 - - 2 7 5 0 - 2 0.286 - 7 0.286 - 26 0.143 - 34 0.143 - 41 0.143 - - 8 10 7 0 - 7 0.1 - 21 0.1 - 28 0.1 - 29 0.2 - 30 0.3 - 33 0.1 - 45 0.1 - - 13 15 7 0 - 2 0.0667 - 7 0.267 - 28 0.133 - 29 0.333 - 32 0.0667 - 33 0.0667 - 47 0.0667 - - 14 6 5 0 - 4 0.167 - 7 0.333 - 41 0.167 - 45 0.167 - 47 0.167 - - 15 4 4 0 - 4 0.25 - 15 0.25 - 18 0.25 - 47 0.25 - - 18 7 5 0 - 26 0.143 - 28 0.143 - 30 0.286 - 41 0.286 - 42 0.143 - - 41 1 1 0 - 15 1 - - 46 1 1 0 - 8 1 - - 48 4 3 0 - 7 0.5 - 33 0.25 - 41 0.25 - - 20 8397 36 20 - 0 0.0151 - 1 0.000357 - 2 0.0497 - 3 0.000357 - 4 0.00691 - 7 0.425 - 8 0.00214 - 9 0.000238 - 10 0.000119 - 12 0.000238 - 13 0.00429 - 14 0.00155 - 15 0.00131 - 16 0.000119 - 17 0.0031 - 18 0.000238 - 19 0.000238 - 21 0.00893 - 24 0.0168 - 26 0.0355 - 28 0.134 - 29 0.0905 - 30 0.0537 - 31 0.022 - 32 0.0139 - 33 0.0257 - 34 0.000834 - 35 0.00143 - 37 0.00631 - 41 0.025 - 42 0.00441 - 43 0.000119 - 44 0.000715 - 45 0.00965 - 46 0.00131 - 47 0.0381 - - 3 122 14 0 - 0 0.0164 - 2 0.0902 - 7 0.549 - 13 0.0082 - 15 0.0082 - 26 0.041 - 28 0.082 - 29 0.107 - 30 0.0246 - 31 0.0082 - 32 0.0082 - 33 0.0082 - 45 0.0082 - 47 0.041 - - 8 1980 30 0 - 0 0.0232 - 2 0.0399 - 3 0.000505 - 4 0.00253 - 7 0.483 - 8 0.00202 - 9 0.000505 - 13 0.00253 - 14 0.00101 - 15 0.00202 - 16 0.000505 - 17 0.00101 - 19 0.000505 - 21 0.00808 - 24 0.0121 - 26 0.0348 - 28 0.122 - 29 0.0884 - 30 0.05 - 31 0.0197 - 32 0.0136 - 33 0.0242 - 35 0.000505 - 37 0.00354 - 41 0.0217 - 42 0.00707 - 44 0.00101 - 45 0.00707 - 46 0.00101 - 47 0.0258 - - 9 23 6 0 - 2 0.0435 - 7 0.696 - 28 0.0435 - 29 0.087 - 41 0.0435 - 47 0.087 - - 10 78 15 0 - 0 0.0641 - 2 0.0256 - 7 0.449 - 8 0.0128 - 14 0.0128 - 26 0.0897 - 28 0.0256 - 29 0.0513 - 30 0.0256 - 31 0.0256 - 32 0.0128 - 37 0.0256 - 41 0.115 - 42 0.0128 - 47 0.0513 - - 13 3723 32 0 - 0 0.0142 - 2 0.047 - 4 0.00967 - 7 0.385 - 8 0.00161 - 9 0.000269 - 12 0.000537 - 13 0.00537 - 14 0.00161 - 15 0.00161 - 17 0.00322 - 18 0.000537 - 19 0.000269 - 21 0.0094 - 24 0.0172 - 26 0.033 - 28 0.132 - 29 0.107 - 30 0.0543 - 31 0.0277 - 32 0.0126 - 33 0.0312 - 34 0.00134 - 35 0.00134 - 37 0.00779 - 41 0.0263 - 42 0.00349 - 43 0.000269 - 44 0.000806 - 45 0.0145 - 46 0.00134 - 47 0.0486 - - 14 1627 27 0 - 0 0.00922 - 1 0.00184 - 2 0.0719 - 4 0.00676 - 7 0.406 - 8 0.00369 - 10 0.000615 - 13 0.00307 - 14 0.00246 - 17 0.00676 - 21 0.0117 - 24 0.0252 - 26 0.0363 - 28 0.154 - 29 0.0615 - 30 0.0639 - 31 0.0191 - 32 0.024 - 33 0.0234 - 34 0.000615 - 35 0.00307 - 37 0.00553 - 41 0.024 - 42 0.00492 - 45 0.00492 - 46 0.00123 - 47 0.0252 - - 15 368 17 0 - 0 0.00272 - 2 0.0272 - 4 0.00815 - 7 0.478 - 13 0.00272 - 24 0.0136 - 26 0.0408 - 28 0.163 - 29 0.111 - 30 0.0489 - 31 0.00815 - 33 0.0163 - 35 0.00272 - 37 0.0109 - 41 0.0109 - 45 0.00272 - 47 0.0516 - - 21 5 4 0 - 0 0.4 - 7 0.2 - 30 0.2 - 41 0.2 - - 29 1 1 0 - 42 1 - - 30 55 11 0 - 2 0.0727 - 7 0.436 - 8 0.0182 - 21 0.0182 - 24 0.0727 - 26 0.0364 - 28 0.218 - 29 0.0182 - 30 0.0545 - 33 0.0182 - 41 0.0364 - - 31 52 13 0 - 0 0.0192 - 2 0.0385 - 7 0.442 - 24 0.0192 - 26 0.0577 - 28 0.173 - 29 0.0962 - 30 0.0385 - 31 0.0192 - 37 0.0192 - 41 0.0192 - 46 0.0192 - 47 0.0385 - - 43 1 1 0 - 44 1 - - 44 5 3 0 - 7 0.6 - 32 0.2 - 45 0.2 - - 45 40 10 0 - 2 0.05 - 7 0.4 - 26 0.1 - 28 0.1 - 29 0.075 - 30 0.125 - 31 0.025 - 33 0.05 - 41 0.025 - 47 0.05 - - 47 34 12 0 - 0 0.0294 - 2 0.0588 - 3 0.0588 - 7 0.5 - 26 0.0294 - 28 0.0294 - 29 0.0294 - 30 0.0588 - 31 0.0294 - 33 0.0294 - 41 0.0294 - 47 0.118 - - 48 185 19 0 - 0 0.00541 - 2 0.027 - 4 0.00541 - 7 0.465 - 13 0.0162 - 17 0.00541 - 21 0.0216 - 24 0.0108 - 26 0.0216 - 28 0.195 - 29 0.0811 - 30 0.0486 - 31 0.0108 - 32 0.00541 - 33 0.0108 - 41 0.0378 - 45 0.00541 - 46 0.00541 - 47 0.0216 - - 54 23 6 0 - 2 0.13 - 7 0.522 - 13 0.0435 - 26 0.087 - 28 0.087 - 47 0.13 - - 56 36 12 0 - 2 0.0278 - 4 0.0278 - 7 0.5 - 26 0.0556 - 28 0.167 - 29 0.0278 - 31 0.0278 - 33 0.0278 - 34 0.0278 - 37 0.0278 - 41 0.0278 - 47 0.0556 - - 60 7 4 0 - 2 0.143 - 7 0.571 - 26 0.143 - 30 0.143 - - 68 4 3 0 - 4 0.25 - 7 0.5 - 28 0.25 - - 21 1703 33 27 - 0 0.102 - 1 0.00176 - 2 0.0552 - 3 0.0182 - 4 0.0804 - 7 0.203 - 8 0.00411 - 10 0.00117 - 12 0.000587 - 13 0.0393 - 14 0.0252 - 15 0.0153 - 18 0.00117 - 19 0.00294 - 20 0.00294 - 21 0.0687 - 23 0.000587 - 24 0.00646 - 26 0.00763 - 28 0.0399 - 29 0.0341 - 30 0.0164 - 31 0.0188 - 32 0.00881 - 33 0.0241 - 34 0.00411 - 37 0.00528 - 41 0.0781 - 42 0.017 - 44 0.00294 - 45 0.0153 - 46 0.00117 - 47 0.0981 - - 2 4 2 0 - 0 0.25 - 7 0.75 - - 3 108 17 0 - 0 0.13 - 1 0.00926 - 2 0.0648 - 7 0.296 - 13 0.0185 - 15 0.037 - 21 0.0463 - 24 0.00926 - 26 0.00926 - 28 0.0463 - 29 0.13 - 32 0.00926 - 33 0.0278 - 37 0.00926 - 41 0.0648 - 44 0.00926 - 47 0.0833 - - 4 458 23 0 - 0 0.138 - 1 0.00437 - 2 0.0852 - 3 0.00437 - 7 0.17 - 13 0.0524 - 14 0.0306 - 15 0.0131 - 21 0.048 - 24 0.00873 - 28 0.0218 - 29 0.0349 - 30 0.024 - 31 0.0284 - 32 0.00873 - 33 0.0328 - 34 0.00437 - 37 0.00218 - 41 0.105 - 42 0.024 - 45 0.0197 - 46 0.00218 - 47 0.138 - - 7 11 7 0 - 0 0.0909 - 7 0.182 - 14 0.364 - 21 0.0909 - 24 0.0909 - 30 0.0909 - 42 0.0909 - - 8 298 28 0 - 0 0.094 - 2 0.0235 - 3 0.0101 - 4 0.225 - 7 0.124 - 8 0.00671 - 10 0.00336 - 13 0.0268 - 14 0.0168 - 15 0.0134 - 18 0.00671 - 19 0.00336 - 20 0.0168 - 21 0.057 - 24 0.0101 - 26 0.0168 - 28 0.057 - 29 0.0436 - 30 0.0268 - 31 0.0101 - 32 0.0201 - 33 0.0302 - 37 0.0101 - 41 0.047 - 42 0.0101 - 45 0.0268 - 46 0.00336 - 47 0.0604 - - 9 27 12 0 - 0 0.148 - 4 0.0741 - 7 0.259 - 8 0.037 - 15 0.037 - 21 0.037 - 26 0.0741 - 28 0.0741 - 29 0.037 - 30 0.0741 - 33 0.037 - 41 0.111 - - 10 5 1 0 - 4 1 - - 13 130 21 0 - 0 0.115 - 2 0.0231 - 3 0.0231 - 4 0.0615 - 7 0.192 - 8 0.00769 - 13 0.0308 - 14 0.0154 - 15 0.0231 - 21 0.0538 - 26 0.00769 - 28 0.0231 - 29 0.0154 - 30 0.00769 - 31 0.0231 - 33 0.0154 - 37 0.0154 - 41 0.154 - 42 0.0231 - 44 0.00769 - 47 0.162 - - 14 42 13 0 - 0 0.0714 - 2 0.119 - 7 0.0952 - 13 0.0238 - 15 0.0476 - 19 0.0238 - 21 0.0476 - 33 0.0238 - 34 0.0238 - 41 0.262 - 42 0.0238 - 45 0.0476 - 47 0.19 - - 15 57 11 0 - 2 0.0351 - 3 0.263 - 7 0.0526 - 13 0.105 - 14 0.0702 - 28 0.0175 - 31 0.0175 - 32 0.0351 - 41 0.193 - 42 0.0175 - 47 0.193 - - 16 5 3 0 - 2 0.4 - 15 0.4 - 21 0.2 - - 17 8 5 0 - 7 0.25 - 21 0.125 - 29 0.125 - 33 0.125 - 47 0.375 - - 18 4 1 0 - 13 1 - - 19 3 3 0 - 7 0.333 - 41 0.333 - 45 0.333 - - 20 17 8 0 - 0 0.0588 - 2 0.118 - 7 0.235 - 21 0.118 - 28 0.176 - 41 0.118 - 44 0.0588 - 47 0.118 - - 21 57 20 0 - 0 0.0702 - 2 0.0877 - 4 0.0175 - 7 0.123 - 8 0.0175 - 13 0.0175 - 14 0.0526 - 15 0.0351 - 21 0.0351 - 28 0.158 - 29 0.0351 - 30 0.0175 - 31 0.0702 - 32 0.0351 - 33 0.0351 - 34 0.0175 - 41 0.0175 - 42 0.0351 - 44 0.0175 - 47 0.105 - - 22 8 6 0 - 0 0.25 - 4 0.125 - 7 0.125 - 19 0.25 - 41 0.125 - 47 0.125 - - 28 3 3 0 - 0 0.333 - 45 0.333 - 47 0.333 - - 30 5 4 0 - 0 0.2 - 2 0.4 - 4 0.2 - 28 0.2 - - 31 26 9 0 - 0 0.115 - 3 0.0385 - 4 0.423 - 7 0.192 - 8 0.0385 - 30 0.0385 - 37 0.0385 - 41 0.0385 - 47 0.0769 - - 39 2 2 0 - 2 0.5 - 28 0.5 - - 40 2 1 0 - 3 1 - - 47 369 26 0 - 0 0.0623 - 2 0.0379 - 3 0.0108 - 4 0.106 - 7 0.347 - 8 0.00271 - 10 0.00271 - 12 0.00271 - 13 0.0461 - 14 0.0244 - 15 0.00542 - 19 0.00271 - 21 0.144 - 23 0.00271 - 24 0.00542 - 26 0.0108 - 28 0.0379 - 29 0.0244 - 30 0.00542 - 31 0.0217 - 33 0.0108 - 34 0.00542 - 37 0.00271 - 41 0.019 - 45 0.00813 - 47 0.0515 - - 48 7 5 0 - 0 0.286 - 4 0.143 - 41 0.143 - 42 0.143 - 45 0.286 - - 49 2 2 0 - 33 0.5 - 42 0.5 - - 55 30 12 0 - 0 0.167 - 2 0.0667 - 7 0.1 - 14 0.0333 - 21 0.1 - 28 0.0333 - 30 0.0333 - 33 0.0333 - 41 0.133 - 42 0.167 - 44 0.0333 - 47 0.1 - - 56 3 3 0 - 0 0.333 - 4 0.333 - 34 0.333 - - 22 205 23 5 - 0 0.039 - 2 0.0195 - 3 0.00488 - 4 0.0634 - 7 0.0585 - 8 0.0146 - 13 0.146 - 14 0.0585 - 15 0.0634 - 16 0.00488 - 19 0.00488 - 21 0.0683 - 24 0.0146 - 26 0.00488 - 28 0.0293 - 29 0.0634 - 30 0.0293 - 31 0.0634 - 32 0.00976 - 33 0.0244 - 41 0.0195 - 45 0.0146 - 47 0.18 - - 4 128 16 0 - 0 0.00781 - 2 0.0156 - 3 0.00781 - 7 0.0156 - 8 0.0234 - 13 0.234 - 14 0.0859 - 15 0.102 - 16 0.00781 - 19 0.00781 - 21 0.0391 - 24 0.00781 - 29 0.0859 - 31 0.0781 - 41 0.0156 - 47 0.266 - - 8 34 14 0 - 0 0.0588 - 2 0.0588 - 4 0.265 - 7 0.147 - 14 0.0294 - 21 0.0294 - 24 0.0294 - 28 0.0294 - 30 0.118 - 31 0.0294 - 33 0.0294 - 41 0.0588 - 45 0.0588 - 47 0.0588 - - 13 4 4 0 - 0 0.25 - 4 0.25 - 26 0.25 - 47 0.25 - - 47 34 12 0 - 0 0.118 - 4 0.0588 - 7 0.118 - 21 0.235 - 24 0.0294 - 28 0.0882 - 29 0.0588 - 30 0.0294 - 31 0.0588 - 32 0.0588 - 33 0.118 - 45 0.0294 - - 48 3 3 0 - 4 0.333 - 7 0.333 - 28 0.333 - - 23 73 13 2 - 0 0.0411 - 2 0.0685 - 4 0.466 - 7 0.151 - 8 0.0137 - 13 0.0274 - 18 0.0137 - 20 0.0137 - 29 0.0137 - 32 0.0137 - 33 0.0137 - 41 0.0548 - 47 0.11 - - 8 50 11 0 - 0 0.06 - 2 0.04 - 4 0.6 - 7 0.1 - 8 0.02 - 13 0.02 - 18 0.02 - 20 0.02 - 32 0.02 - 41 0.02 - 47 0.08 - - 47 19 8 0 - 2 0.105 - 4 0.211 - 7 0.263 - 13 0.0526 - 29 0.0526 - 33 0.0526 - 41 0.105 - 47 0.158 - - 24 4 3 0 - 22 0.25 - 24 0.25 - 30 0.5 - - 25 14 3 0 - 15 0.0714 - 42 0.0714 - 47 0.857 - - 26 6 4 0 - 3 0.333 - 13 0.333 - 21 0.167 - 47 0.167 - - 27 8 5 0 - 0 0.125 - 4 0.125 - 26 0.125 - 30 0.125 - 45 0.5 - - 28 126 20 5 - 0 0.0317 - 2 0.0952 - 4 0.0159 - 7 0.0159 - 12 0.00794 - 13 0.00794 - 14 0.00794 - 19 0.00794 - 21 0.0317 - 26 0.46 - 28 0.0952 - 30 0.0238 - 32 0.00794 - 34 0.00794 - 35 0.00794 - 41 0.00794 - 42 0.0238 - 44 0.0238 - 45 0.0556 - 47 0.0635 - - 2 4 3 0 - 26 0.25 - 28 0.25 - 44 0.5 - - 3 4 3 0 - 2 0.25 - 14 0.25 - 26 0.5 - - 13 10 6 0 - 0 0.1 - 2 0.2 - 26 0.2 - 41 0.1 - 42 0.1 - 47 0.3 - - 14 16 7 0 - 2 0.312 - 4 0.0625 - 12 0.0625 - 13 0.0625 - 26 0.312 - 35 0.0625 - 42 0.125 - - 47 80 13 0 - 0 0.0375 - 2 0.0375 - 4 0.0125 - 7 0.025 - 19 0.0125 - 21 0.05 - 26 0.538 - 28 0.125 - 30 0.025 - 32 0.0125 - 34 0.0125 - 45 0.0625 - 47 0.05 - - 29 40 11 2 - 2 0.125 - 4 0.025 - 7 0.025 - 13 0.325 - 14 0.025 - 15 0.15 - 20 0.025 - 21 0.025 - 31 0.025 - 41 0.2 - 42 0.05 - - 8 11 3 0 - 13 0.545 - 31 0.0909 - 41 0.364 - - 14 10 5 0 - 7 0.1 - 13 0.4 - 14 0.1 - 15 0.2 - 42 0.2 - - 30 1783 33 10 - 0 0.00673 - 2 0.0432 - 3 0.0107 - 4 0.337 - 7 0.204 - 8 0.0707 - 9 0.00112 - 10 0.00112 - 13 0.06 - 14 0.00393 - 15 0.0123 - 16 0.00112 - 18 0.0488 - 19 0.000561 - 20 0.0308 - 21 0.00393 - 22 0.000561 - 24 0.00393 - 26 0.0123 - 28 0.0275 - 29 0.0123 - 30 0.0157 - 31 0.00617 - 32 0.00449 - 33 0.00897 - 36 0.000561 - 37 0.0028 - 41 0.0314 - 42 0.0028 - 43 0.000561 - 45 0.00505 - 46 0.000561 - 47 0.0286 - - 2 15 6 0 - 4 0.2 - 7 0.467 - 22 0.0667 - 28 0.0667 - 41 0.133 - 47 0.0667 - - 3 8 1 0 - 4 1 - - 8 96 15 0 - 0 0.0104 - 2 0.0312 - 3 0.0104 - 4 0.417 - 7 0.25 - 8 0.0104 - 13 0.0104 - 15 0.0104 - 18 0.0938 - 20 0.0312 - 26 0.0104 - 28 0.0312 - 29 0.0312 - 30 0.0208 - 47 0.0312 - - 13 884 28 0 - 0 0.00226 - 2 0.0351 - 3 0.00792 - 4 0.436 - 7 0.0995 - 8 0.0735 - 13 0.106 - 14 0.00339 - 15 0.0181 - 16 0.00226 - 18 0.0622 - 20 0.0328 - 21 0.00226 - 24 0.00452 - 26 0.00452 - 28 0.0158 - 29 0.0102 - 30 0.00905 - 31 0.00566 - 32 0.00113 - 33 0.00679 - 36 0.00113 - 37 0.00113 - 41 0.0317 - 42 0.00113 - 43 0.00113 - 45 0.00566 - 47 0.0192 - - 14 489 28 0 - 0 0.0123 - 2 0.0654 - 3 0.0204 - 4 0.131 - 7 0.299 - 8 0.115 - 9 0.00409 - 10 0.00409 - 13 0.0245 - 14 0.00613 - 15 0.0102 - 18 0.0389 - 19 0.00204 - 20 0.0389 - 21 0.00204 - 24 0.00409 - 26 0.0204 - 28 0.0389 - 29 0.00818 - 30 0.0307 - 31 0.00409 - 32 0.0143 - 33 0.0102 - 37 0.00613 - 41 0.0327 - 42 0.00613 - 46 0.00204 - 47 0.0491 - - 15 59 12 0 - 2 0.0339 - 3 0.0169 - 4 0.593 - 7 0.136 - 8 0.0169 - 18 0.0508 - 20 0.0339 - 26 0.0339 - 31 0.0169 - 33 0.0169 - 41 0.0339 - 47 0.0169 - - 30 4 4 0 - 4 0.25 - 7 0.25 - 29 0.25 - 41 0.25 - - 46 3 1 0 - 45 1 - - 47 198 20 0 - 0 0.0152 - 2 0.0455 - 4 0.237 - 7 0.439 - 8 0.00505 - 14 0.00505 - 20 0.00505 - 21 0.0202 - 24 0.00505 - 26 0.0202 - 28 0.0606 - 29 0.0253 - 30 0.0101 - 31 0.0152 - 33 0.0202 - 37 0.00505 - 41 0.0354 - 42 0.00505 - 45 0.00505 - 47 0.0202 - - 48 8 5 0 - 4 0.5 - 8 0.125 - 18 0.125 - 20 0.125 - 26 0.125 - - 31 1447 30 13 - 0 0.0104 - 2 0.0297 - 3 0.02 - 4 0.411 - 7 0.157 - 8 0.0643 - 9 0.00138 - 10 0.00207 - 13 0.0145 - 14 0.00138 - 15 0.00484 - 16 0.000691 - 18 0.0408 - 19 0.000691 - 20 0.0359 - 21 0.0221 - 24 0.00415 - 26 0.0194 - 28 0.0235 - 29 0.0111 - 30 0.027 - 31 0.00484 - 32 0.00346 - 33 0.00898 - 37 0.000691 - 41 0.0235 - 42 0.0152 - 43 0.00138 - 45 0.00829 - 47 0.0318 - - 2 4 2 0 - 4 0.5 - 47 0.5 - - 3 16 4 0 - 4 0.75 - 7 0.125 - 13 0.0625 - 14 0.0625 - - 8 111 18 0 - 0 0.00901 - 2 0.045 - 4 0.342 - 7 0.252 - 8 0.0811 - 9 0.00901 - 18 0.018 - 20 0.027 - 21 0.018 - 26 0.027 - 28 0.027 - 29 0.00901 - 30 0.00901 - 31 0.00901 - 33 0.00901 - 41 0.027 - 45 0.00901 - 47 0.0721 - - 13 747 27 0 - 0 0.00803 - 2 0.0241 - 3 0.0161 - 4 0.483 - 7 0.123 - 8 0.0589 - 9 0.00134 - 10 0.00268 - 13 0.00803 - 14 0.00134 - 15 0.00535 - 18 0.0589 - 19 0.00134 - 20 0.0455 - 21 0.0201 - 24 0.00402 - 26 0.012 - 28 0.0187 - 29 0.012 - 30 0.0228 - 31 0.00268 - 32 0.00402 - 33 0.00669 - 41 0.0214 - 42 0.00669 - 45 0.00669 - 47 0.0241 - - 14 423 27 0 - 0 0.0165 - 2 0.0473 - 3 0.0402 - 4 0.199 - 7 0.215 - 8 0.0922 - 10 0.00236 - 13 0.0331 - 15 0.00709 - 16 0.00236 - 18 0.0284 - 20 0.0213 - 21 0.026 - 24 0.00709 - 26 0.0355 - 28 0.0402 - 29 0.0142 - 30 0.0473 - 31 0.00946 - 32 0.00473 - 33 0.0165 - 37 0.00236 - 41 0.0165 - 42 0.0355 - 43 0.00473 - 45 0.00709 - 47 0.0284 - - 15 45 6 0 - 4 0.711 - 7 0.178 - 20 0.0222 - 21 0.0444 - 30 0.0222 - 41 0.0222 - - 18 3 2 0 - 4 0.333 - 41 0.667 - - 30 4 3 0 - 0 0.25 - 7 0.25 - 41 0.5 - - 41 7 2 0 - 4 0.714 - 41 0.286 - - 46 3 1 0 - 45 1 - - 47 45 6 0 - 4 0.733 - 7 0.0222 - 20 0.0444 - 21 0.0444 - 42 0.0444 - 47 0.111 - - 48 19 4 0 - 4 0.737 - 18 0.0526 - 20 0.158 - 26 0.0526 - - 60 8 1 0 - 4 1 - - 32 7 4 0 - 7 0.571 - 15 0.143 - 16 0.143 - 41 0.143 - - 33 22 11 0 - 0 0.136 - 2 0.227 - 4 0.0909 - 7 0.0909 - 13 0.0455 - 19 0.0909 - 21 0.0909 - 32 0.0455 - 41 0.0909 - 42 0.0455 - 44 0.0455 - - 34 68 18 2 - 2 0.0441 - 7 0.103 - 8 0.0294 - 13 0.0147 - 14 0.0294 - 15 0.0147 - 21 0.0147 - 28 0.0147 - 30 0.0147 - 32 0.0147 - 33 0.0147 - 35 0.0147 - 37 0.0147 - 41 0.397 - 42 0.0441 - 45 0.0147 - 46 0.0147 - 47 0.191 - - 13 4 3 0 - 7 0.5 - 8 0.25 - 28 0.25 - - 14 3 2 0 - 30 0.333 - 47 0.667 - - 35 8 6 0 - 0 0.125 - 2 0.125 - 26 0.125 - 28 0.125 - 33 0.125 - 47 0.375 - - 36 7 3 0 - 13 0.143 - 14 0.143 - 41 0.714 - - 37 5 4 0 - 7 0.2 - 21 0.2 - 28 0.4 - 33 0.2 - - 38 13 6 0 - 7 0.308 - 24 0.0769 - 26 0.385 - 28 0.0769 - 29 0.0769 - 33 0.0769 - - 39 1798 26 1 - 0 0.0289 - 2 0.191 - 4 0.015 - 6 0.00111 - 7 0.391 - 8 0.0106 - 13 0.00334 - 14 0.00167 - 15 0.00278 - 18 0.00222 - 19 0.00167 - 20 0.00222 - 21 0.0384 - 24 0.00222 - 26 0.12 - 28 0.0211 - 29 0.0651 - 30 0.0117 - 31 0.0117 - 32 0.00222 - 33 0.00612 - 41 0.0184 - 42 0.0139 - 43 0.000556 - 44 0.035 - 47 0.00222 - - 3 8 5 0 - 2 0.25 - 4 0.25 - 20 0.25 - 33 0.125 - 41 0.125 - - 40 83 3 0 - 15 0.964 - 16 0.012 - 21 0.0241 - - 41 1289 21 18 - 0 0.000776 - 2 0.000776 - 3 0.0279 - 7 0.00155 - 8 0.26 - 9 0.014 - 10 0.00388 - 11 0.00155 - 13 0.206 - 14 0.102 - 15 0.353 - 16 0.00698 - 19 0.00233 - 21 0.00233 - 22 0.000776 - 24 0.000776 - 29 0.000776 - 30 0.00465 - 31 0.00853 - 33 0.000776 - 43 0.000776 - - 2 27 6 0 - 3 0.0741 - 8 0.037 - 13 0.481 - 14 0.111 - 15 0.259 - 33 0.037 - - 3 25 1 0 - 3 1 - - 8 318 11 0 - 0 0.00314 - 3 0.0252 - 8 0.836 - 9 0.0252 - 13 0.0597 - 14 0.00314 - 15 0.00629 - 16 0.00314 - 24 0.00314 - 30 0.0126 - 31 0.022 - - 9 9 3 0 - 8 0.556 - 9 0.333 - 13 0.111 - - 10 1 1 0 - 10 1 - - 13 240 5 0 - 8 0.05 - 13 0.729 - 14 0.162 - 15 0.0542 - 31 0.00417 - - 14 117 4 0 - 8 0.0256 - 13 0.248 - 14 0.718 - 21 0.00855 - - 15 430 6 0 - 8 0.00233 - 9 0.00233 - 13 0.0093 - 15 0.981 - 19 0.00233 - 43 0.00233 - - 16 9 2 0 - 15 0.222 - 16 0.778 - - 21 9 4 0 - 2 0.111 - 8 0.444 - 13 0.222 - 15 0.222 - - 31 4 3 0 - 8 0.5 - 13 0.25 - 31 0.25 - - 46 11 2 0 - 13 0.727 - 15 0.273 - - 48 53 7 0 - 8 0.698 - 9 0.0943 - 10 0.0755 - 13 0.0566 - 14 0.0189 - 30 0.0189 - 31 0.0377 - - 49 1 1 0 - 21 1 - - 50 1 1 0 - 22 1 - - 55 16 8 0 - 3 0.0625 - 11 0.0625 - 13 0.25 - 14 0.188 - 15 0.188 - 19 0.125 - 29 0.0625 - 30 0.0625 - - 61 1 1 0 - 16 1 - - 64 6 5 0 - 7 0.333 - 11 0.167 - 13 0.167 - 14 0.167 - 21 0.167 - - 42 86 19 4 - 0 0.0116 - 4 0.0233 - 7 0.0233 - 8 0.0581 - 11 0.0233 - 13 0.0698 - 14 0.0233 - 15 0.0116 - 19 0.0116 - 21 0.0116 - 25 0.0116 - 27 0.0233 - 28 0.0116 - 29 0.0116 - 30 0.0116 - 40 0.0116 - 42 0.0116 - 46 0.0116 - 47 0.628 - - 2 6 3 0 - 8 0.333 - 13 0.333 - 27 0.333 - - 15 31 2 0 - 15 0.0323 - 47 0.968 - - 55 24 14 0 - 7 0.0833 - 8 0.0417 - 11 0.0833 - 13 0.0833 - 14 0.0833 - 21 0.0417 - 25 0.0417 - 28 0.0417 - 29 0.0417 - 30 0.0417 - 40 0.0417 - 42 0.0417 - 46 0.0417 - 47 0.292 - - 62 2 2 0 - 0 0.5 - 19 0.5 - - 43 48 9 1 - 3 0.0208 - 4 0.0208 - 8 0.0625 - 13 0.312 - 15 0.396 - 18 0.0625 - 20 0.0208 - 28 0.0208 - 40 0.0833 - - 15 13 4 0 - 4 0.0769 - 13 0.0769 - 15 0.769 - 40 0.0769 - - 44 91 19 7 - 0 0.011 - 2 0.033 - 3 0.011 - 4 0.319 - 7 0.121 - 8 0.0769 - 13 0.033 - 14 0.022 - 15 0.0879 - 20 0.0549 - 23 0.011 - 26 0.033 - 28 0.044 - 30 0.011 - 34 0.011 - 40 0.044 - 41 0.011 - 42 0.011 - 47 0.0549 - - 4 2 2 0 - 0 0.5 - 26 0.5 - - 8 10 5 0 - 4 0.4 - 7 0.2 - 8 0.2 - 26 0.1 - 40 0.1 - - 13 25 9 0 - 3 0.04 - 4 0.44 - 7 0.08 - 8 0.12 - 13 0.04 - 15 0.08 - 20 0.12 - 23 0.04 - 28 0.04 - - 15 33 12 0 - 2 0.0606 - 4 0.303 - 7 0.152 - 8 0.0303 - 13 0.0303 - 15 0.182 - 20 0.0303 - 28 0.0303 - 30 0.0303 - 34 0.0303 - 40 0.0909 - 41 0.0303 - - 19 2 2 0 - 2 0.5 - 13 0.5 - - 55 10 5 0 - 4 0.1 - 7 0.2 - 28 0.1 - 42 0.1 - 47 0.5 - - 60 2 1 0 - 14 1 - - 45 1242 32 20 - 0 0.0266 - 1 0.000805 - 2 0.0282 - 3 0.0121 - 4 0.357 - 7 0.153 - 8 0.0837 - 9 0.00242 - 10 0.00161 - 13 0.0346 - 14 0.00322 - 15 0.0225 - 18 0.0548 - 19 0.00161 - 20 0.0322 - 21 0.00483 - 22 0.000805 - 24 0.00322 - 26 0.00886 - 28 0.0242 - 29 0.0169 - 30 0.0298 - 31 0.0185 - 32 0.00242 - 33 0.0137 - 40 0.000805 - 41 0.0145 - 42 0.00805 - 44 0.00564 - 45 0.000805 - 46 0.00242 - 47 0.0298 - - 3 11 6 0 - 0 0.0909 - 2 0.0909 - 4 0.545 - 7 0.0909 - 8 0.0909 - 33 0.0909 - - 4 35 13 0 - 0 0.143 - 2 0.0286 - 4 0.0286 - 7 0.229 - 13 0.0571 - 21 0.0571 - 28 0.0857 - 29 0.0286 - 30 0.0286 - 33 0.0571 - 41 0.0857 - 42 0.0571 - 47 0.114 - - 6 4 3 0 - 2 0.25 - 4 0.5 - 42 0.25 - - 8 363 25 0 - 0 0.00826 - 2 0.00551 - 3 0.0165 - 4 0.551 - 7 0.107 - 8 0.0606 - 9 0.00275 - 10 0.00275 - 13 0.00826 - 15 0.00275 - 18 0.0468 - 19 0.00275 - 20 0.0358 - 21 0.00551 - 22 0.00275 - 24 0.00551 - 26 0.00826 - 28 0.0275 - 29 0.0193 - 30 0.0303 - 31 0.0193 - 33 0.00551 - 41 0.0138 - 42 0.00275 - 47 0.00826 - - 10 6 2 0 - 4 0.833 - 20 0.167 - - 13 292 19 0 - 2 0.0445 - 3 0.00685 - 4 0.5 - 7 0.0616 - 8 0.12 - 9 0.00342 - 13 0.0753 - 14 0.00685 - 15 0.0103 - 18 0.0651 - 20 0.0342 - 26 0.00685 - 28 0.00685 - 29 0.00342 - 30 0.0103 - 31 0.0205 - 41 0.00342 - 46 0.0103 - 47 0.0103 - - 14 68 17 0 - 0 0.0147 - 2 0.0294 - 3 0.0147 - 4 0.103 - 7 0.0588 - 8 0.338 - 9 0.0147 - 10 0.0147 - 13 0.162 - 15 0.0147 - 18 0.118 - 19 0.0147 - 20 0.0294 - 28 0.0294 - 30 0.0147 - 31 0.0147 - 33 0.0147 - - 15 97 14 0 - 2 0.0103 - 3 0.0103 - 4 0.34 - 7 0.0412 - 8 0.0928 - 13 0.0309 - 15 0.196 - 18 0.134 - 20 0.0412 - 31 0.0103 - 33 0.0103 - 40 0.0103 - 44 0.0103 - 47 0.0619 - - 16 3 3 0 - 8 0.333 - 20 0.333 - 29 0.333 - - 20 6 5 0 - 4 0.167 - 7 0.333 - 8 0.167 - 18 0.167 - 33 0.167 - - 21 5 5 0 - 4 0.2 - 7 0.2 - 24 0.2 - 29 0.2 - 33 0.2 - - 22 2 2 0 - 20 0.5 - 26 0.5 - - 27 4 3 0 - 2 0.5 - 30 0.25 - 32 0.25 - - 30 6 3 0 - 4 0.667 - 7 0.167 - 31 0.167 - - 31 8 6 0 - 0 0.125 - 8 0.25 - 18 0.25 - 20 0.125 - 29 0.125 - 31 0.125 - - 48 28 9 0 - 0 0.0714 - 4 0.5 - 7 0.179 - 8 0.0357 - 13 0.0357 - 18 0.0357 - 29 0.0357 - 30 0.0714 - 31 0.0357 - - 54 10 7 0 - 0 0.1 - 2 0.1 - 3 0.1 - 4 0.2 - 15 0.2 - 18 0.2 - 20 0.1 - - 55 237 25 0 - 0 0.0717 - 1 0.00422 - 2 0.0422 - 3 0.00844 - 4 0.00844 - 7 0.409 - 8 0.00422 - 13 0.00422 - 14 0.00422 - 15 0.00844 - 18 0.00422 - 21 0.00422 - 24 0.00422 - 26 0.0211 - 28 0.0549 - 29 0.0338 - 30 0.0759 - 31 0.0211 - 32 0.00844 - 33 0.0338 - 41 0.038 - 42 0.0211 - 44 0.0211 - 45 0.00422 - 47 0.0886 - - 56 22 6 0 - 3 0.0455 - 4 0.364 - 8 0.318 - 18 0.0909 - 20 0.136 - 21 0.0455 - - 62 21 8 0 - 0 0.0952 - 3 0.0476 - 4 0.286 - 7 0.333 - 14 0.0476 - 20 0.0952 - 42 0.0476 - 44 0.0476 - - 46 382 21 10 - 3 0.0105 - 6 0.00524 - 8 0.387 - 9 0.00262 - 10 0.00524 - 13 0.304 - 14 0.0183 - 15 0.162 - 16 0.0105 - 18 0.00524 - 19 0.00524 - 21 0.00262 - 27 0.00262 - 28 0.00785 - 29 0.00262 - 30 0.0131 - 31 0.0157 - 40 0.00524 - 41 0.0288 - 46 0.00262 - 47 0.00262 - - 2 14 5 0 - 13 0.643 - 14 0.143 - 15 0.0714 - 41 0.0714 - 47 0.0714 - - 3 2 2 0 - 9 0.5 - 15 0.5 - - 8 15 5 0 - 6 0.0667 - 8 0.467 - 13 0.333 - 28 0.0667 - 31 0.0667 - - 13 206 14 0 - 3 0.00971 - 8 0.422 - 10 0.00485 - 13 0.325 - 14 0.0146 - 15 0.136 - 16 0.0146 - 18 0.00971 - 19 0.00971 - 27 0.00485 - 28 0.00971 - 30 0.0194 - 31 0.0146 - 46 0.00485 - - 14 99 11 0 - 3 0.0202 - 6 0.0101 - 8 0.495 - 10 0.0101 - 13 0.333 - 14 0.0202 - 15 0.0606 - 16 0.0101 - 21 0.0101 - 29 0.0101 - 31 0.0202 - - 15 30 5 0 - 8 0.1 - 13 0.0667 - 15 0.767 - 30 0.0333 - 40 0.0333 - - 45 3 1 0 - 41 1 - - 48 1 1 0 - 40 1 - - 55 6 1 0 - 41 1 - - 58 3 1 0 - 15 1 - - 47 311752 45 53 - 0 0.0388 - 1 0.0005 - 2 0.0469 - 3 0.00405 - 4 0.00179 - 5 1.6e-05 - 6 7.7e-05 - 7 0.382 - 8 0.00254 - 9 0.000189 - 10 9.3e-05 - 12 0.000388 - 13 0.0121 - 14 0.00672 - 15 0.00325 - 16 0.000112 - 17 0.000106 - 18 0.000202 - 19 0.00157 - 20 7.7e-05 - 21 0.0104 - 22 0.00016 - 23 1.28e-05 - 24 0.00627 - 25 3.85e-05 - 26 0.0366 - 27 6.42e-06 - 28 0.0599 - 29 0.0565 - 30 0.0332 - 31 0.0151 - 32 0.0125 - 33 0.026 - 34 0.00184 - 35 0.00141 - 36 1.92e-05 - 37 0.00624 - 40 9.94e-05 - 41 0.0842 - 42 0.0135 - 43 0.00033 - 44 0.00341 - 45 0.0148 - 46 0.00455 - 47 0.111 - - 0 3 3 0 - 7 0.333 - 14 0.333 - 44 0.333 - - 2 61 15 0 - 0 0.0656 - 2 0.0328 - 7 0.344 - 21 0.0164 - 26 0.0164 - 29 0.0164 - 30 0.0492 - 32 0.0164 - 33 0.0328 - 34 0.0164 - 41 0.0984 - 42 0.0492 - 44 0.0164 - 45 0.0164 - 47 0.213 - - 3 11856 34 0 - 0 0.0347 - 1 0.000422 - 2 0.066 - 3 0.000506 - 4 0.000759 - 7 0.359 - 8 0.00793 - 13 0.038 - 14 0.00506 - 15 0.00793 - 16 8.43e-05 - 18 0.000169 - 19 0.0011 - 21 0.038 - 24 0.00371 - 25 8.43e-05 - 26 0.083 - 28 0.0361 - 29 0.134 - 30 0.0172 - 31 0.0135 - 32 0.00472 - 33 0.0179 - 34 0.0016 - 35 0.000253 - 37 0.00118 - 40 0.000253 - 41 0.0499 - 42 0.0328 - 43 0.000843 - 44 0.00321 - 45 0.00346 - 46 0.00118 - 47 0.0361 - - 4 79613 41 0 - 0 0.0484 - 1 0.000754 - 2 0.0331 - 3 0.013 - 4 0.000666 - 5 2.51e-05 - 6 2.51e-05 - 7 0.404 - 8 0.00131 - 9 0.000214 - 10 7.54e-05 - 12 0.000415 - 13 0.0103 - 14 0.0123 - 15 0.0024 - 16 0.0001 - 17 0.000301 - 18 1.26e-05 - 19 0.00236 - 21 0.0111 - 22 0.000377 - 23 1.26e-05 - 24 0.00705 - 26 0.0314 - 28 0.0638 - 29 0.0519 - 30 0.0339 - 31 0.0147 - 32 0.0126 - 33 0.0216 - 34 0.00148 - 35 0.00126 - 37 0.00661 - 40 5.02e-05 - 41 0.0806 - 42 0.00671 - 43 0.000427 - 44 0.00117 - 45 0.0121 - 46 0.00315 - 47 0.108 - - 5 861 24 0 - 0 0.00581 - 2 0.0918 - 7 0.18 - 8 0.00465 - 10 0.00348 - 13 0.0186 - 14 0.00465 - 15 0.00232 - 16 0.00116 - 19 0.00232 - 21 0.029 - 28 0.0163 - 29 0.0395 - 30 0.00465 - 31 0.00232 - 32 0.0279 - 33 0.0151 - 34 0.00813 - 37 0.0267 - 41 0.143 - 42 0.00813 - 44 0.00232 - 45 0.167 - 47 0.195 - - 6 48 13 0 - 2 0.0208 - 4 0.0208 - 7 0.375 - 19 0.0208 - 25 0.0417 - 26 0.0417 - 28 0.0417 - 29 0.0208 - 32 0.0208 - 33 0.0208 - 41 0.104 - 45 0.125 - 47 0.146 - - 7 266 22 0 - 0 0.0526 - 2 0.0376 - 3 0.00376 - 7 0.18 - 8 0.0113 - 10 0.00376 - 13 0.147 - 14 0.105 - 15 0.015 - 21 0.0188 - 26 0.0338 - 28 0.0639 - 29 0.0489 - 30 0.0263 - 31 0.0263 - 32 0.0113 - 33 0.0301 - 35 0.00376 - 41 0.0564 - 42 0.0113 - 45 0.0113 - 47 0.102 - - 8 19385 39 0 - 0 0.0334 - 1 0.000464 - 2 0.0742 - 3 0.00284 - 4 0.00212 - 6 0.000258 - 7 0.434 - 8 0.00175 - 9 5.16e-05 - 12 0.000155 - 13 0.0156 - 14 0.00655 - 15 0.00542 - 16 0.000206 - 18 0.000516 - 19 0.00119 - 20 5.16e-05 - 21 0.00774 - 22 0.000155 - 24 0.00665 - 25 5.16e-05 - 26 0.0329 - 28 0.0675 - 29 0.0412 - 30 0.0447 - 31 0.0181 - 32 0.0144 - 33 0.0214 - 34 0.0016 - 35 0.000516 - 36 0.000103 - 37 0.00464 - 41 0.0594 - 42 0.00645 - 43 0.000258 - 44 0.00165 - 45 0.0122 - 46 0.000413 - 47 0.0797 - - 9 1078 30 0 - 0 0.0891 - 1 0.00186 - 2 0.0714 - 3 0.000928 - 4 0.000928 - 7 0.286 - 8 0.00371 - 12 0.000928 - 13 0.00278 - 14 0.00742 - 15 0.00371 - 16 0.000928 - 18 0.00278 - 19 0.00371 - 21 0.0111 - 24 0.00928 - 26 0.0427 - 28 0.151 - 29 0.0584 - 30 0.0826 - 31 0.0139 - 32 0.0408 - 33 0.0362 - 34 0.000928 - 37 0.000928 - 41 0.0288 - 42 0.00464 - 43 0.000928 - 45 0.0121 - 47 0.0297 - - 10 467 25 0 - 0 0.00642 - 2 0.0814 - 3 0.00214 - 4 0.00642 - 7 0.343 - 8 0.00214 - 13 0.00642 - 14 0.00214 - 19 0.00214 - 21 0.00857 - 24 0.015 - 26 0.0107 - 28 0.0343 - 29 0.0493 - 30 0.0214 - 31 0.00857 - 32 0.0107 - 33 0.0236 - 34 0.00428 - 35 0.00428 - 37 0.00857 - 41 0.0814 - 42 0.00857 - 45 0.045 - 47 0.214 - - 12 2 2 0 - 45 0.5 - 46 0.5 - - 13 22292 40 0 - 0 0.0312 - 1 0.000718 - 2 0.0474 - 3 0.000942 - 4 0.00493 - 7 0.47 - 8 0.00287 - 9 0.000449 - 10 8.97e-05 - 12 0.000224 - 13 0.0139 - 14 0.00453 - 15 0.00359 - 16 0.000135 - 18 0.000224 - 19 0.00144 - 20 4.49e-05 - 21 0.00763 - 22 8.97e-05 - 24 0.00574 - 25 8.97e-05 - 26 0.0302 - 27 4.49e-05 - 28 0.0663 - 29 0.0343 - 30 0.0394 - 31 0.0156 - 32 0.012 - 33 0.0202 - 34 0.00112 - 35 0.000538 - 37 0.00529 - 40 4.49e-05 - 41 0.0834 - 42 0.00745 - 43 0.000179 - 44 0.00242 - 45 0.0131 - 46 0.00112 - 47 0.0713 - - 14 14611 37 0 - 0 0.0223 - 1 0.000342 - 2 0.0463 - 3 0.000137 - 4 0.0011 - 6 6.84e-05 - 7 0.397 - 8 0.0024 - 9 0.000274 - 10 6.84e-05 - 12 0.000274 - 13 0.00609 - 14 0.00342 - 15 0.000342 - 18 0.000274 - 19 0.000753 - 21 0.00527 - 22 6.84e-05 - 24 0.00862 - 26 0.0357 - 28 0.0862 - 29 0.0426 - 30 0.0557 - 31 0.0153 - 32 0.0201 - 33 0.0203 - 34 0.00356 - 35 0.000958 - 37 0.0112 - 40 0.000137 - 41 0.0757 - 42 0.00897 - 43 0.000205 - 44 0.00103 - 45 0.0125 - 46 0.000958 - 47 0.114 - - 15 39318 40 0 - 0 0.00677 - 1 0.000102 - 2 0.0486 - 3 0.00145 - 4 0.00305 - 6 0.000178 - 7 0.372 - 8 0.00542 - 9 0.000203 - 10 7.63e-05 - 12 0.000153 - 13 0.0124 - 14 0.0032 - 15 0.0044 - 16 5.09e-05 - 18 0.000382 - 19 0.000254 - 20 0.000254 - 21 0.00387 - 24 0.0017 - 25 2.54e-05 - 26 0.0255 - 28 0.0202 - 29 0.0393 - 30 0.0134 - 31 0.011 - 32 0.00471 - 33 0.0302 - 34 0.00231 - 35 0.00112 - 36 5.09e-05 - 37 0.0056 - 40 0.000203 - 41 0.14 - 42 0.0104 - 43 0.000102 - 44 0.00972 - 45 0.00946 - 46 0.01 - 47 0.202 - - 16 399 24 0 - 0 0.0125 - 2 0.0501 - 4 0.00752 - 7 0.421 - 8 0.00251 - 13 0.00752 - 14 0.00501 - 15 0.00251 - 20 0.00251 - 21 0.01 - 26 0.0251 - 28 0.0301 - 29 0.00752 - 30 0.0226 - 31 0.00501 - 32 0.00251 - 33 0.015 - 34 0.00251 - 37 0.00752 - 41 0.115 - 42 0.0125 - 44 0.00752 - 45 0.0276 - 47 0.198 - - 17 312 24 0 - 0 0.0609 - 1 0.00321 - 2 0.0449 - 7 0.372 - 8 0.00321 - 9 0.00321 - 13 0.00641 - 14 0.00641 - 15 0.00321 - 19 0.00641 - 21 0.00962 - 24 0.00962 - 26 0.0224 - 28 0.106 - 29 0.0513 - 30 0.0513 - 31 0.0385 - 32 0.016 - 33 0.0224 - 37 0.0128 - 41 0.0417 - 42 0.00321 - 45 0.0192 - 47 0.0865 - - 18 4 1 0 - 28 1 - - 19 17392 39 0 - 0 0.00949 - 1 0.000115 - 2 0.0515 - 3 0.00138 - 4 0.00149 - 5 5.75e-05 - 7 0.171 - 8 0.00477 - 9 0.000402 - 10 0.000575 - 12 0.00305 - 13 0.0331 - 14 0.0155 - 15 0.00385 - 16 0.00023 - 19 0.00161 - 21 0.0166 - 22 0.000402 - 23 5.75e-05 - 24 0.000115 - 26 0.00638 - 27 5.75e-05 - 28 0.0544 - 29 0.101 - 30 0.0205 - 31 0.0106 - 32 0.0237 - 33 0.0277 - 34 0.00862 - 35 0.0122 - 37 0.0274 - 40 5.75e-05 - 41 0.12 - 42 0.011 - 43 0.000517 - 44 0.00149 - 45 0.0877 - 46 0.0316 - 47 0.14 - - 20 8301 36 0 - 0 0.0153 - 1 0.000361 - 2 0.0496 - 3 0.000361 - 4 0.00422 - 7 0.429 - 8 0.00169 - 9 0.000241 - 10 0.00012 - 12 0.000241 - 13 0.00361 - 14 0.00108 - 15 0.00133 - 16 0.00012 - 17 0.00012 - 18 0.000241 - 19 0.000241 - 21 0.00675 - 24 0.017 - 26 0.0359 - 28 0.136 - 29 0.0916 - 30 0.0543 - 31 0.0223 - 32 0.0141 - 33 0.026 - 34 0.000723 - 35 0.00145 - 37 0.00638 - 41 0.0253 - 42 0.00446 - 43 0.00012 - 44 0.000602 - 45 0.00904 - 46 0.00133 - 47 0.0385 - - 21 1441 29 0 - 0 0.12 - 1 0.00208 - 2 0.0625 - 3 0.00625 - 4 0.00208 - 7 0.237 - 8 0.00278 - 12 0.000694 - 13 0.0437 - 14 0.0278 - 15 0.0153 - 19 0.00278 - 21 0.0396 - 24 0.00763 - 26 0.00902 - 28 0.0472 - 29 0.0402 - 30 0.0194 - 31 0.0222 - 32 0.0104 - 33 0.0285 - 34 0.00486 - 37 0.00625 - 41 0.0861 - 42 0.0201 - 44 0.00347 - 45 0.0146 - 46 0.00139 - 47 0.116 - - 22 181 22 0 - 0 0.0442 - 2 0.0221 - 3 0.00552 - 7 0.0663 - 8 0.0166 - 13 0.166 - 14 0.0663 - 15 0.0718 - 16 0.00552 - 19 0.00552 - 21 0.0331 - 24 0.0166 - 26 0.00552 - 28 0.0331 - 29 0.0718 - 30 0.0331 - 31 0.0718 - 32 0.011 - 33 0.0276 - 41 0.0166 - 45 0.00552 - 47 0.204 - - 23 35 9 0 - 0 0.0571 - 2 0.143 - 7 0.314 - 13 0.0571 - 29 0.0286 - 32 0.0286 - 33 0.0286 - 41 0.114 - 47 0.229 - - 24 2 2 0 - 22 0.5 - 24 0.5 - - 25 13 2 0 - 42 0.0769 - 47 0.923 - - 27 3 3 0 - 0 0.333 - 26 0.333 - 30 0.333 - - 28 113 18 0 - 0 0.0354 - 2 0.0708 - 7 0.0177 - 12 0.00885 - 14 0.00885 - 19 0.00885 - 21 0.00885 - 26 0.513 - 28 0.106 - 30 0.0265 - 32 0.00885 - 34 0.00885 - 35 0.00885 - 41 0.00885 - 42 0.0265 - 44 0.0177 - 45 0.0442 - 47 0.0708 - - 29 19 7 0 - 2 0.263 - 7 0.0526 - 13 0.0526 - 15 0.0526 - 31 0.0526 - 41 0.421 - 42 0.105 - - 30 714 22 0 - 0 0.0154 - 2 0.0868 - 7 0.51 - 8 0.0014 - 13 0.0028 - 14 0.0028 - 19 0.0014 - 21 0.0028 - 24 0.0098 - 26 0.0308 - 28 0.0672 - 29 0.0308 - 30 0.0336 - 31 0.0084 - 32 0.0112 - 33 0.0224 - 37 0.007 - 41 0.0714 - 42 0.007 - 43 0.0014 - 45 0.0042 - 47 0.0714 - - 31 540 22 0 - 0 0.0278 - 2 0.0722 - 4 0.00185 - 7 0.419 - 13 0.0037 - 14 0.00185 - 15 0.00556 - 21 0.0111 - 24 0.0111 - 26 0.0519 - 28 0.063 - 29 0.0296 - 30 0.0685 - 31 0.00556 - 32 0.00926 - 33 0.0241 - 37 0.00185 - 41 0.0556 - 42 0.0407 - 43 0.0037 - 45 0.00741 - 47 0.0852 - - 32 6 3 0 - 7 0.667 - 15 0.167 - 41 0.167 - - 33 18 9 0 - 0 0.167 - 2 0.278 - 7 0.111 - 19 0.111 - 21 0.0556 - 32 0.0556 - 41 0.111 - 42 0.0556 - 44 0.0556 - - 34 67 17 0 - 2 0.0448 - 7 0.104 - 8 0.0299 - 13 0.0149 - 14 0.0299 - 15 0.0149 - 28 0.0149 - 30 0.0149 - 32 0.0149 - 33 0.0149 - 35 0.0149 - 37 0.0149 - 41 0.403 - 42 0.0448 - 45 0.0149 - 46 0.0149 - 47 0.194 - - 35 8 6 0 - 0 0.125 - 2 0.125 - 26 0.125 - 28 0.125 - 33 0.125 - 47 0.375 - - 36 7 3 0 - 13 0.143 - 14 0.143 - 41 0.714 - - 37 4 3 0 - 7 0.25 - 28 0.5 - 33 0.25 - - 38 13 6 0 - 7 0.308 - 24 0.0769 - 26 0.385 - 28 0.0769 - 29 0.0769 - 33 0.0769 - - 39 1743 25 0 - 0 0.0298 - 2 0.197 - 4 0.000574 - 6 0.00115 - 7 0.402 - 8 0.00344 - 13 0.00229 - 14 0.00172 - 15 0.00287 - 19 0.00172 - 20 0.000574 - 21 0.0384 - 24 0.00229 - 26 0.124 - 28 0.0218 - 29 0.0671 - 30 0.012 - 31 0.0103 - 32 0.00229 - 33 0.00631 - 41 0.0189 - 42 0.0143 - 43 0.000574 - 44 0.0361 - 47 0.00229 - - 41 2 2 0 - 0 0.5 - 3 0.5 - - 42 57 4 0 - 14 0.0175 - 40 0.0175 - 42 0.0175 - 47 0.947 - - 44 39 13 0 - 0 0.0256 - 2 0.0769 - 4 0.0256 - 7 0.282 - 14 0.0513 - 15 0.0513 - 26 0.0769 - 28 0.103 - 34 0.0256 - 40 0.103 - 41 0.0256 - 42 0.0256 - 47 0.128 - - 45 468 24 0 - 0 0.0662 - 1 0.00214 - 2 0.0491 - 3 0.00427 - 7 0.404 - 13 0.0128 - 14 0.00427 - 15 0.00427 - 18 0.00427 - 19 0.00214 - 21 0.00427 - 24 0.00855 - 26 0.0235 - 28 0.0641 - 29 0.0449 - 30 0.0726 - 31 0.0406 - 32 0.00641 - 33 0.0363 - 41 0.0299 - 42 0.0192 - 44 0.015 - 45 0.00214 - 47 0.0791 - - 48 1258 29 0 - 0 0.0819 - 1 0.000795 - 2 0.0429 - 4 0.00238 - 7 0.431 - 13 0.00477 - 14 0.00159 - 15 0.00238 - 18 0.000795 - 19 0.00238 - 21 0.0127 - 23 0.000795 - 24 0.00477 - 25 0.00159 - 26 0.0334 - 28 0.0787 - 29 0.0437 - 30 0.0437 - 31 0.0151 - 32 0.0207 - 33 0.0231 - 35 0.000795 - 36 0.000795 - 37 0.00397 - 41 0.0453 - 42 0.0167 - 45 0.0175 - 46 0.000795 - 47 0.0652 - - 49 116 18 0 - 0 0.0776 - 2 0.0776 - 3 0.0172 - 7 0.241 - 13 0.0517 - 14 0.00862 - 21 0.00862 - 26 0.00862 - 28 0.0517 - 29 0.0431 - 30 0.0345 - 31 0.0345 - 32 0.00862 - 34 0.00862 - 41 0.284 - 42 0.0259 - 46 0.00862 - 47 0.00862 - - 50 10 7 0 - 0 0.2 - 14 0.1 - 28 0.1 - 29 0.1 - 30 0.2 - 33 0.2 - 42 0.1 - - 53 7 4 0 - 2 0.143 - 7 0.143 - 42 0.429 - 47 0.286 - - 54 72 13 0 - 0 0.0139 - 2 0.0556 - 4 0.0139 - 7 0.417 - 26 0.0417 - 28 0.0278 - 29 0.0278 - 30 0.0139 - 33 0.0278 - 34 0.0139 - 41 0.111 - 46 0.0139 - 47 0.222 - - 55 80263 43 0 - 0 0.0575 - 1 0.000536 - 2 0.0458 - 3 0.000461 - 4 0.00156 - 5 2.49e-05 - 6 8.72e-05 - 7 0.377 - 8 0.00127 - 9 9.97e-05 - 10 2.49e-05 - 12 0.00015 - 13 0.00471 - 14 0.00257 - 15 0.00239 - 16 9.97e-05 - 17 9.97e-05 - 18 0.000174 - 19 0.00179 - 20 0.000125 - 21 0.00893 - 22 6.23e-05 - 24 0.00776 - 25 3.74e-05 - 26 0.0369 - 28 0.0637 - 29 0.0564 - 30 0.0373 - 31 0.0168 - 32 0.0133 - 33 0.0337 - 34 0.000648 - 35 0.000336 - 36 1.25e-05 - 37 0.00262 - 40 8.72e-05 - 41 0.0805 - 42 0.0217 - 43 0.000336 - 44 0.00209 - 45 0.00795 - 46 0.00182 - 47 0.111 - - 57 11 7 0 - 2 0.273 - 24 0.0909 - 28 0.182 - 33 0.182 - 41 0.0909 - 42 0.0909 - 44 0.0909 - - 58 14 6 0 - 0 0.0714 - 2 0.0714 - 7 0.643 - 28 0.0714 - 31 0.0714 - 41 0.0714 - - 60 8061 34 0 - 0 0.0514 - 1 0.000124 - 2 0.0294 - 3 0.000496 - 4 0.00062 - 7 0.386 - 8 0.00248 - 9 0.000124 - 13 0.016 - 14 0.00657 - 15 0.00385 - 16 0.000124 - 18 0.000496 - 19 0.00124 - 21 0.0112 - 22 0.000124 - 23 0.000124 - 24 0.00844 - 26 0.154 - 28 0.0624 - 29 0.08 - 30 0.0249 - 31 0.02 - 32 0.00893 - 33 0.0238 - 34 0.000744 - 37 0.00211 - 41 0.0215 - 42 0.0383 - 43 0.000124 - 44 0.0203 - 45 0.00136 - 46 0.000248 - 47 0.0226 - - 62 34 6 0 - 7 0.647 - 26 0.0882 - 30 0.0294 - 42 0.0294 - 45 0.0588 - 47 0.147 - - 64 40 15 0 - 0 0.1 - 2 0.025 - 7 0.2 - 13 0.025 - 19 0.05 - 24 0.025 - 26 0.05 - 28 0.1 - 29 0.05 - 30 0.025 - 31 0.075 - 33 0.075 - 41 0.1 - 45 0.075 - 47 0.025 - - 68 95 14 0 - 0 0.0105 - 2 0.0211 - 7 0.516 - 21 0.0105 - 26 0.0421 - 28 0.0737 - 29 0.0105 - 30 0.0632 - 31 0.0105 - 32 0.0211 - 33 0.0632 - 41 0.0211 - 42 0.0211 - 47 0.116 - - 48 4567 37 18 - 0 0.0274 - 1 0.000219 - 2 0.0125 - 3 0.0103 - 4 0.53 - 7 0.119 - 8 0.0458 - 9 0.00153 - 10 0.000438 - 13 0.00613 - 14 0.000438 - 15 0.0101 - 16 0.000219 - 18 0.0469 - 19 0.00153 - 20 0.0405 - 21 0.00504 - 22 0.000876 - 23 0.000219 - 24 0.00131 - 25 0.000438 - 26 0.0092 - 28 0.0217 - 29 0.0123 - 30 0.0138 - 31 0.00963 - 32 0.00569 - 33 0.00635 - 35 0.000219 - 36 0.000438 - 37 0.00109 - 40 0.000219 - 41 0.0243 - 42 0.0046 - 45 0.0109 - 46 0.000438 - 47 0.018 - - 3 17 2 0 - 4 0.941 - 18 0.0588 - - 4 16 7 0 - 0 0.375 - 7 0.125 - 21 0.188 - 28 0.0625 - 32 0.125 - 37 0.0625 - 45 0.0625 - - 8 500 23 0 - 0 0.03 - 2 0.016 - 3 0.024 - 4 0.448 - 7 0.148 - 8 0.034 - 13 0.014 - 15 0.006 - 18 0.058 - 20 0.064 - 22 0.002 - 26 0.008 - 28 0.012 - 29 0.016 - 30 0.012 - 31 0.02 - 32 0.004 - 33 0.016 - 35 0.002 - 41 0.036 - 42 0.014 - 45 0.004 - 47 0.012 - - 9 5 4 0 - 2 0.2 - 4 0.4 - 7 0.2 - 30 0.2 - - 13 2669 34 0 - 0 0.0217 - 1 0.000375 - 2 0.00712 - 3 0.0045 - 4 0.651 - 7 0.0573 - 8 0.0476 - 9 0.00225 - 10 0.000375 - 13 0.00525 - 14 0.000749 - 15 0.00599 - 18 0.0555 - 19 0.00187 - 20 0.0412 - 21 0.00337 - 22 0.000749 - 23 0.000375 - 24 0.00112 - 25 0.000375 - 26 0.00599 - 28 0.0139 - 29 0.0109 - 30 0.0105 - 31 0.00974 - 32 0.003 - 33 0.003 - 36 0.000749 - 40 0.000375 - 41 0.0161 - 42 0.00187 - 45 0.00599 - 46 0.000749 - 47 0.00862 - - 14 854 30 0 - 0 0.0457 - 2 0.0269 - 3 0.0234 - 4 0.196 - 7 0.292 - 8 0.0679 - 9 0.00117 - 10 0.00117 - 13 0.00468 - 15 0.0304 - 16 0.00117 - 18 0.0222 - 19 0.00117 - 20 0.0293 - 21 0.0082 - 22 0.00117 - 24 0.00351 - 25 0.00117 - 26 0.0152 - 28 0.0504 - 29 0.0222 - 30 0.0258 - 31 0.0082 - 32 0.0129 - 33 0.0141 - 37 0.00351 - 41 0.0293 - 42 0.0082 - 45 0.0152 - 47 0.0386 - - 15 246 19 0 - 0 0.0122 - 2 0.0203 - 3 0.00813 - 4 0.537 - 7 0.142 - 8 0.0122 - 13 0.00407 - 15 0.00407 - 18 0.0407 - 20 0.0325 - 21 0.00407 - 26 0.0285 - 28 0.0163 - 30 0.0163 - 32 0.00813 - 33 0.00407 - 37 0.00407 - 41 0.0407 - 47 0.065 - - 16 8 5 0 - 4 0.25 - 7 0.375 - 26 0.125 - 41 0.125 - 47 0.125 - - 18 2 1 0 - 13 1 - - 30 11 5 0 - 4 0.545 - 7 0.0909 - 20 0.182 - 28 0.0909 - 45 0.0909 - - 31 14 5 0 - 4 0.429 - 7 0.214 - 18 0.143 - 20 0.143 - 42 0.0714 - - 41 40 10 0 - 2 0.025 - 3 0.025 - 4 0.55 - 7 0.075 - 18 0.05 - 20 0.075 - 21 0.025 - 30 0.025 - 41 0.125 - 47 0.025 - - 46 19 2 0 - 4 0.158 - 45 0.842 - - 47 89 12 0 - 0 0.0225 - 4 0.753 - 7 0.0674 - 8 0.0112 - 19 0.0112 - 20 0.0112 - 21 0.0225 - 28 0.0562 - 30 0.0112 - 31 0.0112 - 32 0.0112 - 41 0.0112 - - 48 29 9 0 - 0 0.069 - 4 0.414 - 7 0.069 - 18 0.0345 - 20 0.0345 - 26 0.0345 - 28 0.0345 - 41 0.276 - 45 0.0345 - - 55 7 5 0 - 4 0.286 - 7 0.286 - 20 0.143 - 28 0.143 - 47 0.143 - - 56 9 4 0 - 4 0.444 - 7 0.333 - 8 0.111 - 47 0.111 - - 58 6 4 0 - 4 0.333 - 7 0.333 - 8 0.167 - 42 0.167 - - 49 130 21 9 - 0 0.0692 - 2 0.0769 - 3 0.0154 - 4 0.0615 - 7 0.215 - 13 0.0462 - 14 0.00769 - 18 0.00769 - 21 0.0231 - 26 0.00769 - 28 0.0462 - 29 0.0385 - 30 0.0308 - 31 0.0308 - 32 0.00769 - 34 0.00769 - 41 0.262 - 42 0.0231 - 45 0.00769 - 46 0.00769 - 47 0.00769 - - 3 7 3 0 - 7 0.429 - 30 0.143 - 41 0.429 - - 4 51 12 0 - 0 0.0588 - 2 0.118 - 7 0.294 - 13 0.118 - 28 0.0588 - 29 0.0392 - 30 0.0392 - 31 0.0588 - 32 0.0196 - 41 0.157 - 42 0.0196 - 47 0.0196 - - 8 6 4 0 - 7 0.5 - 28 0.167 - 29 0.167 - 31 0.167 - - 13 19 10 0 - 0 0.0526 - 4 0.368 - 7 0.158 - 14 0.0526 - 28 0.0526 - 29 0.0526 - 30 0.0526 - 41 0.105 - 42 0.0526 - 45 0.0526 - - 14 4 4 0 - 4 0.25 - 7 0.25 - 26 0.25 - 29 0.25 - - 15 5 3 0 - 18 0.2 - 41 0.6 - 42 0.2 - - 41 3 2 0 - 3 0.667 - 7 0.333 - - 47 1 1 0 - 34 1 - - 55 29 7 0 - 0 0.138 - 2 0.138 - 7 0.069 - 21 0.069 - 28 0.0345 - 41 0.517 - 46 0.0345 - - 50 14 10 0 - 0 0.143 - 14 0.143 - 15 0.0714 - 28 0.0714 - 29 0.0714 - 30 0.143 - 32 0.0714 - 33 0.143 - 41 0.0714 - 42 0.0714 - - 53 7 4 0 - 2 0.143 - 7 0.143 - 42 0.429 - 47 0.286 - - 54 390 20 6 - 0 0.00256 - 2 0.0154 - 3 0.0282 - 4 0.618 - 7 0.0769 - 8 0.0359 - 13 0.00256 - 15 0.0128 - 18 0.0308 - 20 0.059 - 26 0.00769 - 28 0.00513 - 29 0.00513 - 30 0.00256 - 33 0.00513 - 34 0.00256 - 41 0.0205 - 45 0.0256 - 46 0.00256 - 47 0.041 - - 8 28 2 0 - 3 0.0714 - 4 0.929 - - 13 239 11 0 - 2 0.00418 - 3 0.0167 - 4 0.762 - 7 0.0251 - 8 0.0418 - 15 0.00837 - 18 0.046 - 20 0.0753 - 33 0.00837 - 41 0.00837 - 47 0.00418 - - 14 26 8 0 - 2 0.0769 - 3 0.115 - 4 0.462 - 18 0.0385 - 20 0.115 - 28 0.0385 - 41 0.0385 - 47 0.115 - - 15 74 17 0 - 0 0.0135 - 2 0.0405 - 3 0.027 - 4 0.189 - 7 0.27 - 8 0.0541 - 13 0.0135 - 15 0.0405 - 26 0.027 - 28 0.0135 - 29 0.027 - 30 0.0135 - 34 0.0135 - 41 0.0676 - 45 0.027 - 46 0.0135 - 47 0.149 - - 18 3 2 0 - 7 0.667 - 26 0.333 - - 46 8 1 0 - 45 1 - - 55 80957 43 26 - 0 0.057 - 1 0.000531 - 2 0.0461 - 3 0.000581 - 4 0.00351 - 5 2.47e-05 - 6 8.65e-05 - 7 0.374 - 8 0.00166 - 9 9.88e-05 - 10 4.94e-05 - 12 0.000148 - 13 0.00473 - 14 0.00267 - 15 0.00241 - 16 9.88e-05 - 17 0.000371 - 18 0.000259 - 19 0.00178 - 20 0.000259 - 21 0.00965 - 22 7.41e-05 - 24 0.0077 - 25 3.71e-05 - 26 0.0366 - 28 0.0632 - 29 0.0559 - 30 0.037 - 31 0.0167 - 32 0.0131 - 33 0.0334 - 34 0.000642 - 35 0.000334 - 36 1.24e-05 - 37 0.00259 - 40 8.65e-05 - 41 0.0801 - 42 0.0218 - 43 0.000371 - 44 0.0022 - 45 0.0108 - 46 0.00188 - 47 0.11 - - 0 4 4 0 - 7 0.25 - 29 0.25 - 30 0.25 - 32 0.25 - - 2 4 3 0 - 4 0.25 - 7 0.5 - 47 0.25 - - 3 137 16 0 - 0 0.0073 - 2 0.0146 - 7 0.577 - 13 0.0073 - 14 0.0146 - 24 0.0146 - 26 0.0292 - 28 0.0438 - 29 0.0365 - 30 0.0073 - 31 0.0073 - 32 0.0438 - 33 0.0365 - 34 0.0073 - 41 0.0803 - 47 0.073 - - 4 2 2 0 - 13 0.5 - 26 0.5 - - 8 1730 27 0 - 0 0.0254 - 2 0.0353 - 3 0.00116 - 4 0.00578 - 7 0.478 - 8 0.000578 - 9 0.000578 - 13 0.00347 - 18 0.00116 - 21 0.00925 - 24 0.00925 - 26 0.0364 - 28 0.0572 - 29 0.041 - 30 0.0272 - 31 0.00925 - 32 0.00578 - 33 0.0168 - 34 0.00116 - 35 0.00173 - 37 0.00173 - 41 0.102 - 42 0.00694 - 44 0.000578 - 45 0.00347 - 46 0.00347 - 47 0.115 - - 9 15 7 0 - 7 0.467 - 26 0.0667 - 28 0.0667 - 29 0.0667 - 31 0.0667 - 33 0.0667 - 41 0.2 - - 10 202 18 0 - 0 0.114 - 2 0.0248 - 3 0.00495 - 7 0.347 - 15 0.00495 - 20 0.00495 - 21 0.0248 - 24 0.00495 - 26 0.00495 - 28 0.0248 - 29 0.0198 - 30 0.0347 - 31 0.0198 - 32 0.00495 - 33 0.00495 - 41 0.262 - 42 0.0099 - 47 0.0842 - - 13 3620 33 0 - 0 0.0177 - 2 0.0282 - 3 0.0011 - 4 0.0113 - 7 0.41 - 8 0.00414 - 10 0.000276 - 13 0.00249 - 14 0.00166 - 15 0.00138 - 17 0.0011 - 18 0.000276 - 19 0.000552 - 20 0.0011 - 21 0.00912 - 24 0.00691 - 26 0.0373 - 28 0.0715 - 29 0.0561 - 30 0.0331 - 31 0.0133 - 32 0.0127 - 33 0.0218 - 34 0.000552 - 35 0.000276 - 37 0.00331 - 41 0.0956 - 42 0.00635 - 43 0.000552 - 44 0.00138 - 45 0.0047 - 46 0.00221 - 47 0.142 - - 14 1127 28 0 - 0 0.00532 - 2 0.024 - 3 0.00177 - 4 0.0071 - 7 0.482 - 8 0.0071 - 13 0.00532 - 14 0.00177 - 15 0.000887 - 17 0.00177 - 21 0.00266 - 24 0.00621 - 26 0.0417 - 28 0.0816 - 29 0.0488 - 30 0.039 - 31 0.0177 - 32 0.0115 - 33 0.0195 - 34 0.00266 - 35 0.00177 - 37 0.00799 - 41 0.0532 - 42 0.00444 - 44 0.00177 - 45 0.00444 - 46 0.000887 - 47 0.117 - - 15 868 28 0 - 0 0.0104 - 2 0.0657 - 3 0.0023 - 4 0.00806 - 7 0.468 - 8 0.00691 - 13 0.0023 - 14 0.00115 - 15 0.00115 - 18 0.00461 - 20 0.00115 - 21 0.0023 - 24 0.00115 - 26 0.0415 - 28 0.0173 - 29 0.0242 - 30 0.0161 - 31 0.00461 - 32 0.00346 - 33 0.0242 - 34 0.0023 - 37 0.00115 - 41 0.0668 - 42 0.0127 - 44 0.00115 - 45 0.00806 - 46 0.0023 - 47 0.199 - - 16 33 9 0 - 2 0.0303 - 7 0.455 - 20 0.0606 - 28 0.0909 - 30 0.0303 - 32 0.0303 - 41 0.0606 - 45 0.0303 - 47 0.212 - - 18 5 4 0 - 2 0.4 - 7 0.2 - 26 0.2 - 45 0.2 - - 23 2 2 0 - 2 0.5 - 33 0.5 - - 30 87 11 0 - 2 0.023 - 7 0.575 - 26 0.046 - 28 0.103 - 29 0.0345 - 30 0.0345 - 31 0.023 - 33 0.023 - 41 0.092 - 42 0.0115 - 47 0.0345 - - 31 59 13 0 - 2 0.0339 - 4 0.0339 - 7 0.475 - 14 0.0169 - 24 0.0169 - 26 0.0339 - 28 0.0508 - 29 0.102 - 30 0.0508 - 31 0.0169 - 41 0.0169 - 46 0.0169 - 47 0.136 - - 41 5 5 0 - 2 0.2 - 4 0.2 - 7 0.2 - 28 0.2 - 41 0.2 - - 43 4 2 0 - 7 0.25 - 44 0.75 - - 45 68 11 0 - 0 0.0441 - 2 0.0147 - 7 0.426 - 15 0.0147 - 26 0.0735 - 28 0.0735 - 29 0.132 - 30 0.0294 - 33 0.0441 - 41 0.0294 - 47 0.118 - - 46 6 2 0 - 19 0.167 - 45 0.833 - - 47 72658 43 0 - 0 0.0614 - 1 0.000592 - 2 0.0476 - 3 0.000495 - 4 0.0029 - 5 2.75e-05 - 6 9.63e-05 - 7 0.366 - 8 0.00143 - 9 9.63e-05 - 10 4.13e-05 - 12 0.000165 - 13 0.00491 - 14 0.00278 - 15 0.00256 - 16 0.00011 - 17 0.00033 - 18 0.000193 - 19 0.00193 - 20 0.000179 - 21 0.00988 - 22 8.26e-05 - 24 0.0078 - 25 4.13e-05 - 26 0.0365 - 28 0.0633 - 29 0.0569 - 30 0.0378 - 31 0.0172 - 32 0.0135 - 33 0.0349 - 34 0.000578 - 35 0.000289 - 36 1.38e-05 - 37 0.00255 - 40 9.63e-05 - 41 0.0789 - 42 0.0236 - 43 0.000385 - 44 0.00228 - 45 0.0115 - 46 0.00183 - 47 0.107 - - 48 235 20 0 - 0 0.0255 - 2 0.0255 - 4 0.00851 - 7 0.417 - 14 0.00851 - 19 0.00426 - 21 0.0128 - 24 0.0128 - 26 0.034 - 28 0.0638 - 29 0.0213 - 30 0.0255 - 31 0.017 - 32 0.00851 - 33 0.0213 - 41 0.0979 - 42 0.00851 - 45 0.00426 - 46 0.00426 - 47 0.179 - - 54 12 2 0 - 7 0.833 - 28 0.167 - - 55 7 6 0 - 7 0.286 - 13 0.143 - 26 0.143 - 28 0.143 - 29 0.143 - 47 0.143 - - 57 19 7 0 - 4 0.0526 - 7 0.526 - 26 0.0526 - 29 0.105 - 30 0.0526 - 33 0.0526 - 41 0.158 - - 60 22 6 0 - 7 0.682 - 21 0.0455 - 28 0.0455 - 30 0.0455 - 41 0.0909 - 47 0.0909 - - 68 8 5 0 - 7 0.375 - 28 0.25 - 30 0.125 - 32 0.125 - 47 0.125 - - 56 295 15 2 - 2 0.00678 - 3 0.0542 - 4 0.42 - 7 0.00339 - 8 0.251 - 9 0.0169 - 10 0.0102 - 15 0.00339 - 20 0.122 - 21 0.0102 - 30 0.00678 - 31 0.0102 - 34 0.00339 - 41 0.00678 - 45 0.0746 - - 15 2 2 0 - 7 0.5 - 8 0.5 - - 46 2 1 0 - 45 1 - - 57 38 11 4 - 2 0.132 - 13 0.0526 - 14 0.0263 - 15 0.5 - 24 0.0263 - 28 0.0526 - 33 0.0526 - 41 0.0526 - 42 0.0263 - 44 0.0263 - 45 0.0526 - - 18 19 2 0 - 13 0.0526 - 15 0.947 - - 41 4 4 0 - 2 0.25 - 24 0.25 - 41 0.25 - 45 0.25 - - 47 4 4 0 - 13 0.25 - 14 0.25 - 28 0.25 - 33 0.25 - - 55 5 4 0 - 2 0.4 - 28 0.2 - 41 0.2 - 44 0.2 - - 58 108 17 5 - 0 0.00926 - 2 0.00926 - 3 0.037 - 4 0.0926 - 6 0.0185 - 7 0.0833 - 8 0.167 - 13 0.102 - 15 0.333 - 16 0.00926 - 18 0.0185 - 20 0.0278 - 28 0.00926 - 31 0.00926 - 40 0.0185 - 41 0.0185 - 46 0.037 - - 8 10 7 0 - 0 0.1 - 2 0.1 - 4 0.1 - 7 0.2 - 8 0.3 - 18 0.1 - 20 0.1 - - 13 37 10 0 - 3 0.0811 - 4 0.216 - 6 0.027 - 7 0.0811 - 8 0.216 - 13 0.135 - 15 0.162 - 18 0.027 - 20 0.027 - 46 0.027 - - 14 21 10 0 - 4 0.0476 - 6 0.0476 - 7 0.0952 - 8 0.238 - 13 0.19 - 15 0.19 - 20 0.0476 - 28 0.0476 - 31 0.0476 - 46 0.0476 - - 15 31 5 0 - 7 0.0645 - 8 0.0323 - 15 0.806 - 16 0.0323 - 40 0.0645 - - 47 5 4 0 - 3 0.2 - 13 0.2 - 41 0.2 - 46 0.4 - - 60 8217 36 21 - 0 0.0504 - 1 0.000122 - 2 0.0288 - 3 0.00231 - 4 0.00828 - 7 0.378 - 8 0.00633 - 9 0.000122 - 10 0.000122 - 13 0.0158 - 14 0.00645 - 15 0.00377 - 16 0.000122 - 18 0.00316 - 19 0.00122 - 20 0.000852 - 21 0.0113 - 22 0.000122 - 23 0.000122 - 24 0.00828 - 26 0.151 - 28 0.0612 - 29 0.0785 - 30 0.0245 - 31 0.0207 - 32 0.00876 - 33 0.0234 - 34 0.00073 - 37 0.00207 - 41 0.0211 - 42 0.0376 - 43 0.000122 - 44 0.0202 - 45 0.00146 - 46 0.000243 - 47 0.0221 - - 2 2 2 0 - 31 0.5 - 41 0.5 - - 3 8 4 0 - 0 0.25 - 26 0.375 - 28 0.125 - 29 0.25 - - 4 63 16 0 - 0 0.143 - 2 0.111 - 7 0.143 - 13 0.0317 - 14 0.0317 - 15 0.0159 - 24 0.0317 - 26 0.0317 - 28 0.0317 - 29 0.0476 - 31 0.0159 - 32 0.0159 - 33 0.0317 - 41 0.206 - 42 0.0159 - 47 0.0952 - - 7 7 5 0 - 0 0.429 - 2 0.143 - 7 0.143 - 13 0.143 - 45 0.143 - - 8 300 22 0 - 0 0.0933 - 2 0.0467 - 4 0.0267 - 7 0.31 - 8 0.00333 - 13 0.01 - 15 0.00667 - 18 0.03 - 20 0.00333 - 21 0.0133 - 24 0.0133 - 26 0.02 - 28 0.0867 - 29 0.05 - 30 0.0367 - 31 0.0267 - 32 0.00667 - 33 0.0333 - 37 0.00333 - 41 0.04 - 42 0.09 - 47 0.05 - - 9 5 5 0 - 2 0.2 - 28 0.2 - 29 0.2 - 32 0.2 - 41 0.2 - - 13 1033 27 0 - 0 0.0552 - 1 0.000968 - 2 0.0387 - 3 0.000968 - 4 0.0155 - 7 0.284 - 8 0.0029 - 13 0.00581 - 14 0.0106 - 15 0.00194 - 18 0.0029 - 19 0.00194 - 21 0.0271 - 24 0.00678 - 26 0.0736 - 28 0.0697 - 29 0.0794 - 30 0.0368 - 31 0.0281 - 32 0.0126 - 33 0.0523 - 37 0.000968 - 41 0.0542 - 42 0.092 - 44 0.00678 - 45 0.00194 - 47 0.0368 - - 14 1393 31 0 - 0 0.0682 - 2 0.0223 - 3 0.00144 - 4 0.0215 - 7 0.363 - 8 0.0223 - 9 0.000718 - 13 0.0625 - 14 0.00718 - 15 0.00287 - 16 0.000718 - 18 0.00718 - 19 0.00287 - 20 0.00359 - 21 0.0122 - 24 0.00861 - 26 0.0818 - 28 0.0653 - 29 0.0639 - 30 0.023 - 31 0.0294 - 32 0.0108 - 33 0.0294 - 34 0.000718 - 37 0.0101 - 41 0.0251 - 42 0.0101 - 43 0.000718 - 44 0.00144 - 45 0.00287 - 47 0.038 - - 15 70 16 0 - 0 0.0143 - 2 0.0286 - 4 0.0857 - 7 0.386 - 8 0.0143 - 18 0.0143 - 20 0.0143 - 28 0.0857 - 29 0.0571 - 30 0.0286 - 31 0.0143 - 33 0.0571 - 41 0.0286 - 42 0.0429 - 46 0.0143 - 47 0.114 - - 16 12 5 0 - 0 0.0833 - 4 0.333 - 7 0.25 - 28 0.167 - 47 0.167 - - 20 18 11 0 - 0 0.111 - 2 0.111 - 7 0.167 - 26 0.0556 - 28 0.0556 - 29 0.111 - 30 0.0556 - 32 0.0556 - 33 0.111 - 41 0.111 - 42 0.0556 - - 21 4 3 0 - 18 0.25 - 31 0.5 - 42 0.25 - - 31 5 3 0 - 0 0.4 - 7 0.4 - 33 0.2 - - 45 1 1 0 - 32 1 - - 46 1 1 0 - 45 1 - - 47 5237 31 0 - 0 0.0405 - 2 0.0258 - 3 0.00306 - 4 0.000573 - 7 0.409 - 8 0.00286 - 10 0.000191 - 13 0.00592 - 14 0.00573 - 15 0.0042 - 18 0.000382 - 19 0.000764 - 21 0.0084 - 22 0.000191 - 23 0.000191 - 24 0.00802 - 26 0.198 - 28 0.0571 - 29 0.0852 - 30 0.0223 - 31 0.0164 - 32 0.00726 - 33 0.0145 - 34 0.000955 - 37 0.000191 - 41 0.00955 - 42 0.0315 - 44 0.03 - 45 0.000382 - 46 0.000191 - 47 0.0107 - - 48 4 4 0 - 7 0.25 - 28 0.25 - 41 0.25 - 47 0.25 - - 55 19 8 0 - 0 0.105 - 2 0.158 - 7 0.368 - 26 0.105 - 28 0.0526 - 42 0.105 - 45 0.0526 - 47 0.0526 - - 56 14 6 0 - 4 0.0714 - 7 0.571 - 24 0.0714 - 29 0.0714 - 33 0.143 - 47 0.0714 - - 58 1 1 0 - 45 1 - - 60 15 4 0 - 7 0.8 - 8 0.0667 - 26 0.0667 - 31 0.0667 - - 62 60 9 3 - 7 0.367 - 18 0.0167 - 26 0.05 - 30 0.0167 - 34 0.0167 - 41 0.0167 - 42 0.05 - 45 0.383 - 47 0.0833 - - 2 10 3 0 - 7 0.7 - 26 0.2 - 30 0.1 - - 46 14 1 0 - 45 1 - - 47 13 6 0 - 7 0.308 - 34 0.0769 - 41 0.0769 - 42 0.154 - 45 0.154 - 47 0.231 - - 64 48 16 4 - 0 0.0833 - 2 0.0208 - 7 0.188 - 13 0.0208 - 19 0.0417 - 24 0.0208 - 26 0.0417 - 28 0.0833 - 29 0.0417 - 30 0.0208 - 31 0.0625 - 33 0.0625 - 41 0.208 - 45 0.0625 - 46 0.0208 - 47 0.0208 - - 2 5 4 0 - 7 0.4 - 28 0.2 - 29 0.2 - 45 0.2 - - 41 9 7 0 - 0 0.222 - 2 0.111 - 7 0.222 - 19 0.111 - 24 0.111 - 26 0.111 - 47 0.111 - - 42 11 8 0 - 0 0.0909 - 7 0.364 - 13 0.0909 - 26 0.0909 - 28 0.0909 - 29 0.0909 - 30 0.0909 - 33 0.0909 - - 47 22 9 0 - 0 0.0455 - 7 0.0455 - 19 0.0455 - 28 0.0455 - 31 0.136 - 33 0.0909 - 41 0.455 - 45 0.0909 - 46 0.0455 - - 68 206 22 3 - 0 0.00971 - 2 0.00971 - 3 0.00971 - 4 0.209 - 7 0.238 - 8 0.194 - 9 0.00485 - 13 0.0146 - 15 0.0291 - 18 0.034 - 20 0.0194 - 21 0.00485 - 26 0.0194 - 28 0.034 - 29 0.00485 - 30 0.0388 - 31 0.0146 - 32 0.00971 - 33 0.0291 - 41 0.00971 - 42 0.00971 - 47 0.0534 - - 8 17 5 0 - 7 0.294 - 8 0.529 - 15 0.0588 - 32 0.0588 - 47 0.0588 - - 13 71 12 0 - 2 0.0282 - 4 0.465 - 7 0.127 - 8 0.183 - 9 0.0141 - 13 0.0423 - 15 0.0423 - 26 0.0141 - 30 0.0141 - 33 0.0282 - 41 0.0141 - 47 0.0282 - - 14 113 19 0 - 0 0.0177 - 3 0.0177 - 4 0.0796 - 7 0.274 - 8 0.159 - 15 0.0177 - 18 0.0619 - 20 0.0354 - 21 0.00885 - 26 0.0265 - 28 0.0619 - 29 0.00885 - 30 0.0619 - 31 0.0265 - 32 0.00885 - 33 0.0354 - 41 0.00885 - 42 0.0177 - 47 0.0708 - - 69 5 3 0 - 4 0.2 - 18 0.4 - 45 0.4 - -56 3353 24 19 - 2 0.24 - 3 0.0289 - 4 0.15 - 6 0.000596 - 7 0.00209 - 8 0.17 - 9 0.00716 - 10 0.00388 - 13 0.0674 - 14 0.0155 - 15 0.0692 - 16 0.00418 - 18 0.0746 - 20 0.0435 - 21 0.00507 - 30 0.00537 - 31 0.00775 - 34 0.00119 - 36 0.00119 - 39 0.000596 - 40 0.000298 - 41 0.0537 - 42 0.000596 - 45 0.0474 - - 2 8 4 0 - 13 0.375 - 14 0.125 - 15 0.375 - 16 0.125 - - 3 22 9 1 - 2 0.318 - 4 0.136 - 8 0.182 - 15 0.0455 - 18 0.0909 - 20 0.0455 - 21 0.0455 - 39 0.0909 - 45 0.0455 - - 47 7 4 0 - 8 0.429 - 21 0.143 - 39 0.286 - 45 0.143 - - 4 10 4 0 - 2 0.1 - 21 0.1 - 41 0.1 - 45 0.7 - - 6 8 2 0 - 6 0.25 - 45 0.75 - - 7 3 1 0 - 15 1 - - 8 253 14 4 - 2 0.506 - 3 0.0356 - 4 0.107 - 7 0.00395 - 8 0.119 - 9 0.0119 - 13 0.00395 - 15 0.00791 - 18 0.0711 - 20 0.0395 - 30 0.00395 - 31 0.00395 - 41 0.0632 - 45 0.0237 - - 8 21 4 0 - 2 0.857 - 18 0.0476 - 41 0.0476 - 45 0.0476 - - 13 140 14 0 - 2 0.464 - 3 0.00714 - 4 0.15 - 7 0.00714 - 8 0.157 - 9 0.00714 - 13 0.00714 - 15 0.00714 - 18 0.0786 - 20 0.0357 - 30 0.00714 - 31 0.00714 - 41 0.0357 - 45 0.0286 - - 14 76 10 0 - 2 0.5 - 3 0.0526 - 4 0.0263 - 8 0.105 - 9 0.0263 - 15 0.0132 - 18 0.0789 - 20 0.0526 - 41 0.132 - 45 0.0132 - - 47 3 1 0 - 3 1 - - 13 596 17 4 - 2 0.201 - 3 0.0185 - 4 0.0839 - 8 0.309 - 9 0.00503 - 10 0.00336 - 13 0.173 - 14 0.0101 - 15 0.0436 - 18 0.0453 - 20 0.0185 - 30 0.0134 - 31 0.0101 - 34 0.00168 - 36 0.00168 - 41 0.052 - 45 0.0101 - - 13 101 12 0 - 2 0.337 - 3 0.0198 - 4 0.129 - 8 0.248 - 9 0.0099 - 10 0.0099 - 13 0.0891 - 15 0.0297 - 20 0.0198 - 31 0.0099 - 41 0.0891 - 45 0.0099 - - 14 94 9 0 - 2 0.479 - 4 0.0638 - 8 0.266 - 9 0.0106 - 13 0.0319 - 15 0.0106 - 20 0.0319 - 31 0.0213 - 41 0.0851 - - 30 4 1 0 - 2 1 - - 47 392 17 0 - 2 0.0893 - 3 0.023 - 4 0.0791 - 8 0.339 - 9 0.00255 - 10 0.00255 - 13 0.23 - 14 0.0153 - 15 0.0536 - 18 0.0689 - 20 0.0153 - 30 0.0204 - 31 0.00765 - 34 0.00255 - 36 0.00255 - 41 0.0357 - 45 0.0128 - - 14 320 16 1 - 2 0.0781 - 3 0.0375 - 4 0.0531 - 8 0.312 - 9 0.00625 - 10 0.00625 - 13 0.306 - 14 0.00313 - 15 0.0281 - 18 0.0188 - 20 0.0281 - 21 0.00938 - 30 0.00938 - 31 0.0281 - 41 0.0719 - 45 0.00313 - - 13 6 4 0 - 2 0.333 - 13 0.167 - 20 0.167 - 41 0.333 - - 15 301 16 6 - 2 0.159 - 3 0.0133 - 4 0.0897 - 7 0.0133 - 8 0.0399 - 9 0.00332 - 13 0.00664 - 14 0.0332 - 15 0.412 - 16 0.00997 - 18 0.0365 - 20 0.0133 - 21 0.00332 - 40 0.00332 - 41 0.0399 - 45 0.123 - - 7 3 3 0 - 2 0.333 - 15 0.333 - 40 0.333 - - 13 17 9 0 - 2 0.0588 - 4 0.294 - 8 0.235 - 14 0.0588 - 15 0.118 - 18 0.0588 - 20 0.0588 - 41 0.0588 - 45 0.0588 - - 14 6 6 0 - 2 0.167 - 3 0.167 - 4 0.167 - 8 0.167 - 9 0.167 - 15 0.167 - - 15 119 11 0 - 2 0.261 - 4 0.118 - 7 0.0084 - 8 0.0336 - 14 0.0672 - 15 0.252 - 16 0.0084 - 18 0.042 - 20 0.0084 - 41 0.0672 - 45 0.134 - - 16 9 5 0 - 2 0.222 - 15 0.222 - 18 0.111 - 20 0.222 - 45 0.222 - - 47 139 13 0 - 2 0.0719 - 3 0.0216 - 4 0.0432 - 7 0.0216 - 8 0.0216 - 13 0.0144 - 14 0.00719 - 15 0.612 - 16 0.0144 - 18 0.0216 - 21 0.00719 - 41 0.0216 - 45 0.122 - - 16 14 4 0 - 2 0.143 - 4 0.143 - 15 0.643 - 41 0.0714 - - 21 5 2 0 - 2 0.8 - 41 0.2 - - 30 11 4 0 - 2 0.273 - 8 0.273 - 13 0.364 - 20 0.0909 - - 31 9 3 0 - 2 0.556 - 4 0.222 - 21 0.222 - - 45 9 6 0 - 2 0.111 - 3 0.111 - 13 0.222 - 14 0.111 - 18 0.333 - 20 0.111 - - 47 1311 20 13 - 2 0.304 - 3 0.0297 - 4 0.188 - 7 0.00153 - 8 0.12 - 9 0.00763 - 10 0.00458 - 13 0.00763 - 14 0.0168 - 15 0.0259 - 16 0.00458 - 18 0.0931 - 20 0.0549 - 21 0.00458 - 30 0.00305 - 31 0.00534 - 34 0.00153 - 36 0.00153 - 41 0.0686 - 45 0.0572 - - 4 9 3 0 - 2 0.111 - 41 0.111 - 45 0.778 - - 6 6 1 0 - 45 1 - - 8 224 12 0 - 2 0.571 - 3 0.0268 - 4 0.116 - 7 0.00446 - 8 0.0402 - 9 0.00893 - 15 0.00446 - 18 0.0804 - 20 0.0446 - 30 0.00446 - 41 0.0714 - 45 0.0268 - - 13 298 15 0 - 2 0.396 - 3 0.00671 - 4 0.154 - 8 0.134 - 9 0.00671 - 10 0.00336 - 13 0.00336 - 15 0.0302 - 18 0.0906 - 20 0.0369 - 31 0.00671 - 34 0.00336 - 36 0.00336 - 41 0.104 - 45 0.0201 - - 14 117 13 0 - 2 0.197 - 3 0.0855 - 4 0.12 - 8 0.197 - 9 0.00855 - 10 0.0171 - 13 0.0342 - 15 0.0256 - 18 0.0342 - 20 0.0598 - 30 0.00855 - 31 0.0171 - 41 0.197 - - 15 154 13 0 - 2 0.292 - 4 0.162 - 7 0.00649 - 8 0.039 - 13 0.00649 - 14 0.0649 - 15 0.026 - 16 0.013 - 18 0.0455 - 20 0.026 - 21 0.00649 - 41 0.0779 - 45 0.234 - - 21 5 2 0 - 2 0.8 - 41 0.2 - - 31 9 3 0 - 2 0.556 - 4 0.222 - 21 0.222 - - 45 9 6 0 - 2 0.111 - 3 0.111 - 13 0.222 - 14 0.111 - 18 0.333 - 20 0.111 - - 48 10 4 0 - 2 0.6 - 4 0.2 - 18 0.1 - 20 0.1 - - 55 17 5 0 - 2 0.412 - 3 0.0588 - 4 0.0588 - 18 0.0588 - 45 0.412 - - 56 414 19 0 - 2 0.101 - 3 0.0459 - 4 0.297 - 8 0.181 - 9 0.0121 - 10 0.00725 - 13 0.00483 - 14 0.0266 - 15 0.0411 - 16 0.00966 - 18 0.14 - 20 0.087 - 21 0.00725 - 30 0.00483 - 31 0.00725 - 34 0.00242 - 36 0.00242 - 41 0.0121 - 45 0.00966 - - 62 2 1 0 - 45 1 - - 48 11 5 0 - 2 0.545 - 4 0.182 - 8 0.0909 - 18 0.0909 - 20 0.0909 - - 55 22 6 0 - 2 0.318 - 3 0.0909 - 4 0.0455 - 18 0.0455 - 42 0.0909 - 45 0.409 - - 56 419 19 0 - 2 0.1 - 3 0.0453 - 4 0.294 - 8 0.179 - 9 0.0119 - 10 0.00716 - 13 0.00477 - 14 0.0263 - 15 0.0406 - 16 0.00955 - 18 0.138 - 20 0.0859 - 21 0.00716 - 30 0.00477 - 31 0.00716 - 34 0.00239 - 36 0.00239 - 41 0.0119 - 45 0.0215 - - 62 2 1 0 - 45 1 - -57 191766 42 26 - 0 0.0127 - 1 6.26e-05 - 2 0.00876 - 3 0.0413 - 4 0.00784 - 6 9.91e-05 - 7 0.0115 - 8 0.0343 - 9 0.00545 - 10 0.00283 - 12 0.000167 - 13 0.352 - 14 0.15 - 15 0.0378 - 16 0.00175 - 18 0.000245 - 19 0.00638 - 20 5.21e-06 - 21 0.0315 - 22 0.00242 - 23 0.000209 - 24 0.00711 - 25 3.65e-05 - 26 0.000136 - 27 7.3e-05 - 28 0.0277 - 29 0.0264 - 30 0.0277 - 31 0.0819 - 32 0.00613 - 33 0.00986 - 34 0.000375 - 35 0.000261 - 37 9.39e-05 - 40 4.17e-05 - 41 0.0447 - 42 0.00376 - 43 0.00162 - 44 0.00109 - 45 0.00293 - 46 0.00618 - 47 0.0445 - - 2 77 17 3 - 0 0.013 - 3 0.0519 - 4 0.0519 - 8 0.013 - 9 0.013 - 13 0.338 - 14 0.0779 - 15 0.026 - 18 0.013 - 19 0.013 - 21 0.0519 - 24 0.026 - 28 0.026 - 31 0.013 - 41 0.221 - 42 0.026 - 46 0.026 - - 7 4 3 0 - 24 0.25 - 31 0.25 - 41 0.5 - - 47 57 10 0 - 3 0.0702 - 4 0.0702 - 8 0.0175 - 13 0.439 - 14 0.0702 - 15 0.0351 - 18 0.0175 - 21 0.0702 - 41 0.193 - 42 0.0175 - - 57 14 10 0 - 0 0.0714 - 9 0.0714 - 13 0.0714 - 14 0.143 - 19 0.0714 - 24 0.0714 - 28 0.0714 - 41 0.286 - 42 0.0714 - 46 0.0714 - - 4 29 13 2 - 0 0.103 - 7 0.069 - 8 0.103 - 13 0.0345 - 14 0.103 - 24 0.069 - 28 0.0345 - 29 0.0345 - 32 0.069 - 33 0.103 - 41 0.207 - 46 0.0345 - 47 0.0345 - - 7 18 9 0 - 0 0.111 - 7 0.111 - 14 0.0556 - 24 0.111 - 29 0.0556 - 32 0.0556 - 33 0.167 - 41 0.278 - 47 0.0556 - - 57 11 8 0 - 0 0.0909 - 8 0.273 - 13 0.0909 - 14 0.182 - 28 0.0909 - 32 0.0909 - 41 0.0909 - 46 0.0909 - - 6 16 6 1 - 3 0.0625 - 6 0.188 - 13 0.188 - 15 0.188 - 41 0.188 - 44 0.188 - - 6 3 1 0 - 44 1 - - 7 83565 41 0 - 0 0.0129 - 1 7.18e-05 - 2 0.00859 - 3 0.0374 - 4 0.00881 - 6 7.18e-05 - 7 0.0117 - 8 0.0334 - 9 0.00596 - 10 0.00335 - 12 0.000168 - 13 0.369 - 14 0.156 - 15 0.0407 - 16 0.00188 - 18 0.000239 - 19 0.006 - 21 0.0348 - 22 0.00268 - 23 0.000215 - 24 0.00704 - 25 2.39e-05 - 26 0.000132 - 27 1.2e-05 - 28 0.0257 - 29 0.0221 - 30 0.0204 - 31 0.0807 - 32 0.00594 - 33 0.00902 - 34 0.000419 - 35 0.000299 - 37 8.38e-05 - 40 3.59e-05 - 41 0.0318 - 42 0.00281 - 43 0.0017 - 44 0.00107 - 45 0.00294 - 46 0.0061 - 47 0.0473 - - 8 392 18 5 - 0 0.0281 - 2 0.00255 - 3 0.00255 - 8 0.0051 - 13 0.0765 - 14 0.436 - 20 0.00255 - 21 0.0179 - 24 0.00255 - 29 0.00255 - 30 0.00255 - 31 0.00255 - 41 0.342 - 42 0.0281 - 44 0.0051 - 45 0.0051 - 46 0.0332 - 47 0.0051 - - 7 342 7 0 - 8 0.00292 - 13 0.0614 - 14 0.488 - 41 0.377 - 42 0.0322 - 44 0.00585 - 46 0.0322 - - 14 1 1 0 - 20 1 - - 26 12 8 0 - 3 0.0833 - 13 0.167 - 14 0.0833 - 21 0.0833 - 31 0.0833 - 41 0.25 - 45 0.167 - 47 0.0833 - - 47 25 9 0 - 0 0.44 - 2 0.04 - 8 0.04 - 13 0.12 - 14 0.12 - 21 0.12 - 24 0.04 - 29 0.04 - 30 0.04 - - 57 10 5 0 - 13 0.3 - 21 0.3 - 41 0.2 - 46 0.1 - 47 0.1 - - 9 2 2 0 - 0 0.5 - 33 0.5 - - 13 8 5 0 - 3 0.125 - 8 0.125 - 13 0.5 - 28 0.125 - 41 0.125 - - 15 11 5 0 - 15 0.455 - 16 0.0909 - 42 0.0909 - 45 0.273 - 47 0.0909 - - 21 467 30 5 - 0 0.0428 - 2 0.0428 - 3 0.00214 - 4 0.00214 - 7 0.0171 - 8 0.03 - 10 0.00214 - 13 0.107 - 14 0.122 - 15 0.0107 - 18 0.00428 - 19 0.0214 - 21 0.0685 - 22 0.00214 - 24 0.00214 - 28 0.0364 - 29 0.0321 - 30 0.0193 - 31 0.0664 - 32 0.00642 - 33 0.0236 - 34 0.00214 - 37 0.00214 - 41 0.165 - 42 0.0257 - 43 0.00428 - 44 0.00857 - 45 0.0193 - 46 0.00642 - 47 0.105 - - 7 289 25 0 - 0 0.0346 - 2 0.0554 - 3 0.00346 - 7 0.0138 - 8 0.0381 - 10 0.00346 - 13 0.111 - 14 0.135 - 15 0.0138 - 19 0.00692 - 21 0.0554 - 22 0.00346 - 28 0.0208 - 29 0.0138 - 31 0.0727 - 32 0.00692 - 33 0.00346 - 37 0.00346 - 41 0.221 - 42 0.0311 - 43 0.00692 - 44 0.00346 - 45 0.0138 - 46 0.00692 - 47 0.121 - - 21 10 7 0 - 0 0.1 - 13 0.1 - 14 0.2 - 29 0.1 - 41 0.3 - 44 0.1 - 47 0.1 - - 30 4 3 0 - 41 0.5 - 44 0.25 - 47 0.25 - - 47 90 23 0 - 0 0.0556 - 2 0.0333 - 7 0.0444 - 8 0.0111 - 13 0.133 - 14 0.1 - 15 0.0111 - 18 0.0111 - 19 0.0667 - 21 0.144 - 24 0.0111 - 28 0.0444 - 29 0.0444 - 30 0.0556 - 31 0.0667 - 32 0.0111 - 33 0.0667 - 34 0.0111 - 41 0.0111 - 42 0.0111 - 45 0.0111 - 46 0.0111 - 47 0.0333 - - 57 62 18 0 - 0 0.0645 - 4 0.0161 - 8 0.0323 - 13 0.0484 - 14 0.0968 - 18 0.0161 - 19 0.0323 - 21 0.0323 - 28 0.0968 - 29 0.0968 - 30 0.0645 - 31 0.0645 - 33 0.0645 - 41 0.0645 - 42 0.0323 - 44 0.0161 - 45 0.0323 - 47 0.129 - - 22 7 7 0 - 0 0.143 - 21 0.143 - 22 0.143 - 30 0.143 - 33 0.143 - 41 0.143 - 47 0.143 - - 24 55 11 0 - 0 0.0182 - 13 0.0909 - 14 0.0545 - 19 0.0545 - 28 0.2 - 29 0.109 - 30 0.145 - 31 0.236 - 32 0.0182 - 33 0.0545 - 41 0.0182 - - 26 8661 35 0 - 0 0.00185 - 2 0.00496 - 3 0.0928 - 4 0.00127 - 6 0.000231 - 7 0.00947 - 8 0.068 - 9 0.00266 - 10 0.000115 - 13 0.286 - 14 0.103 - 15 0.02 - 16 0.000924 - 19 0.00935 - 21 0.0461 - 22 0.00173 - 23 0.000231 - 24 0.00877 - 26 0.000115 - 27 0.000693 - 28 0.0462 - 29 0.0701 - 30 0.076 - 31 0.0876 - 32 0.00774 - 33 0.0162 - 35 0.000115 - 40 0.000115 - 41 0.0264 - 42 0.00196 - 43 0.00127 - 44 0.000231 - 45 0.000462 - 46 0.00531 - 47 0.00231 - - 28 3 3 0 - 2 0.333 - 14 0.333 - 41 0.333 - - 29 2 1 0 - 41 1 - - 30 1062 21 2 - 2 0.00847 - 3 0.00659 - 7 0.00282 - 8 0.00282 - 13 0.0574 - 14 0.0433 - 15 0.0122 - 16 0.00188 - 19 0.00282 - 21 0.0104 - 22 0.000942 - 28 0.000942 - 29 0.00188 - 30 0.000942 - 31 0.0132 - 41 0.65 - 42 0.0377 - 44 0.00188 - 45 0.00282 - 46 0.0113 - 47 0.13 - - 47 613 20 0 - 2 0.00326 - 3 0.00979 - 7 0.00326 - 8 0.00489 - 13 0.0897 - 14 0.0669 - 15 0.0212 - 16 0.00326 - 19 0.00326 - 21 0.0179 - 22 0.00163 - 28 0.00163 - 29 0.00326 - 31 0.0179 - 41 0.622 - 42 0.0636 - 44 0.00326 - 45 0.00163 - 46 0.00653 - 47 0.0555 - - 57 448 12 0 - 2 0.0156 - 3 0.00223 - 7 0.00223 - 13 0.0134 - 14 0.0112 - 19 0.00223 - 30 0.00223 - 31 0.0067 - 41 0.69 - 45 0.00446 - 46 0.0179 - 47 0.232 - - 31 361 21 3 - 2 0.0166 - 3 0.036 - 4 0.00554 - 7 0.0166 - 8 0.036 - 9 0.00277 - 13 0.108 - 14 0.0526 - 15 0.00277 - 21 0.0139 - 28 0.00277 - 30 0.00277 - 31 0.0139 - 32 0.00277 - 41 0.593 - 42 0.00554 - 43 0.00277 - 44 0.00277 - 45 0.0111 - 46 0.00277 - 47 0.0693 - - 7 2 1 0 - 14 1 - - 47 57 12 0 - 2 0.105 - 4 0.0175 - 7 0.0351 - 8 0.0702 - 13 0.0351 - 21 0.0351 - 28 0.0175 - 41 0.404 - 42 0.0175 - 44 0.0175 - 45 0.0526 - 47 0.193 - - 57 302 18 0 - 3 0.043 - 4 0.00331 - 7 0.0132 - 8 0.0298 - 9 0.00331 - 13 0.123 - 14 0.0563 - 15 0.00331 - 21 0.00993 - 30 0.00331 - 31 0.0166 - 32 0.00331 - 41 0.632 - 42 0.00331 - 43 0.00331 - 45 0.00331 - 46 0.00331 - 47 0.0464 - - 41 8 6 0 - 2 0.125 - 13 0.125 - 14 0.125 - 15 0.125 - 18 0.25 - 21 0.25 - - 42 3 1 0 - 25 1 - - 45 10 7 0 - 0 0.2 - 3 0.1 - 13 0.2 - 14 0.1 - 19 0.1 - 21 0.2 - 47 0.1 - - 46 2 1 0 - 21 1 - - 47 94690 41 22 - 0 0.0128 - 1 6.34e-05 - 2 0.00877 - 3 0.0418 - 4 0.00773 - 6 8.45e-05 - 7 0.0116 - 8 0.0327 - 9 0.00546 - 10 0.00276 - 12 0.000169 - 13 0.357 - 14 0.151 - 15 0.0383 - 16 0.00177 - 18 0.000232 - 19 0.00646 - 21 0.0268 - 22 0.00233 - 23 0.000211 - 24 0.0072 - 25 2.11e-05 - 26 0.000137 - 27 7.39e-05 - 28 0.0281 - 29 0.0267 - 30 0.0257 - 31 0.0814 - 32 0.00621 - 33 0.00998 - 34 0.00038 - 35 0.000253 - 37 9.5e-05 - 40 4.22e-05 - 41 0.0452 - 42 0.00379 - 43 0.00163 - 44 0.0011 - 45 0.00291 - 46 0.00625 - 47 0.045 - - 2 75 16 0 - 0 0.0133 - 3 0.0533 - 4 0.0533 - 8 0.0133 - 9 0.0133 - 13 0.347 - 14 0.08 - 15 0.0267 - 19 0.0133 - 21 0.0533 - 24 0.0267 - 28 0.0133 - 31 0.0133 - 41 0.227 - 42 0.0267 - 46 0.0267 - - 4 29 13 0 - 0 0.103 - 7 0.069 - 8 0.103 - 13 0.0345 - 14 0.103 - 24 0.069 - 28 0.0345 - 29 0.0345 - 32 0.069 - 33 0.103 - 41 0.207 - 46 0.0345 - 47 0.0345 - - 6 13 5 0 - 3 0.0769 - 13 0.231 - 15 0.231 - 41 0.231 - 44 0.231 - - 7 82196 41 0 - 0 0.0132 - 1 7.3e-05 - 2 0.00869 - 3 0.0379 - 4 0.00861 - 6 7.3e-05 - 7 0.0119 - 8 0.0297 - 9 0.00592 - 10 0.00316 - 12 0.00017 - 13 0.375 - 14 0.158 - 15 0.0413 - 16 0.00191 - 18 0.000243 - 19 0.0061 - 21 0.0258 - 22 0.00248 - 23 0.000219 - 24 0.00715 - 25 2.43e-05 - 26 0.000134 - 27 1.22e-05 - 28 0.0261 - 29 0.0225 - 30 0.0207 - 31 0.082 - 32 0.00603 - 33 0.00917 - 34 0.000426 - 35 0.00028 - 37 8.52e-05 - 40 3.65e-05 - 41 0.0323 - 42 0.00286 - 43 0.0017 - 44 0.00107 - 45 0.00293 - 46 0.00618 - 47 0.0481 - - 8 387 17 0 - 0 0.0284 - 2 0.00258 - 3 0.00258 - 8 0.00258 - 13 0.0775 - 14 0.442 - 21 0.0103 - 24 0.00258 - 29 0.00258 - 30 0.00258 - 31 0.00258 - 41 0.346 - 42 0.0284 - 44 0.00517 - 45 0.00517 - 46 0.0336 - 47 0.00517 - - 9 2 2 0 - 0 0.5 - 33 0.5 - - 13 7 5 0 - 3 0.143 - 8 0.143 - 13 0.429 - 28 0.143 - 41 0.143 - - 15 11 5 0 - 15 0.455 - 16 0.0909 - 42 0.0909 - 45 0.273 - 47 0.0909 - - 21 439 28 0 - 0 0.0456 - 2 0.0456 - 3 0.00228 - 4 0.00228 - 7 0.0182 - 8 0.0296 - 13 0.114 - 14 0.125 - 15 0.0114 - 18 0.00456 - 19 0.0228 - 21 0.0296 - 24 0.00228 - 28 0.0387 - 29 0.0342 - 30 0.0205 - 31 0.0706 - 32 0.00683 - 33 0.0251 - 34 0.00228 - 37 0.00228 - 41 0.173 - 42 0.0273 - 43 0.00456 - 44 0.00911 - 45 0.0137 - 46 0.00683 - 47 0.112 - - 22 7 7 0 - 0 0.143 - 21 0.143 - 22 0.143 - 30 0.143 - 33 0.143 - 41 0.143 - 47 0.143 - - 24 55 11 0 - 0 0.0182 - 13 0.0909 - 14 0.0545 - 19 0.0545 - 28 0.2 - 29 0.109 - 30 0.145 - 31 0.236 - 32 0.0182 - 33 0.0545 - 41 0.0182 - - 26 8601 35 0 - 0 0.00186 - 2 0.00488 - 3 0.0935 - 4 0.00128 - 6 0.000233 - 7 0.00953 - 8 0.0671 - 9 0.00267 - 10 0.000116 - 13 0.288 - 14 0.103 - 15 0.0201 - 16 0.00093 - 19 0.00942 - 21 0.0414 - 22 0.00163 - 23 0.000233 - 24 0.00884 - 26 0.000116 - 27 0.000698 - 28 0.0465 - 29 0.0706 - 30 0.0765 - 31 0.0882 - 32 0.00779 - 33 0.0163 - 35 0.000116 - 40 0.000116 - 41 0.0265 - 42 0.00198 - 43 0.00128 - 44 0.000233 - 45 0.000465 - 46 0.00535 - 47 0.00233 - - 29 2 1 0 - 41 1 - - 30 1055 21 0 - 2 0.00853 - 3 0.00664 - 7 0.00284 - 8 0.00284 - 13 0.0578 - 14 0.0436 - 15 0.0123 - 16 0.0019 - 19 0.00284 - 21 0.00379 - 22 0.000948 - 28 0.000948 - 29 0.0019 - 30 0.000948 - 31 0.0133 - 41 0.654 - 42 0.0379 - 44 0.0019 - 45 0.00284 - 46 0.0114 - 47 0.131 - - 31 358 21 0 - 2 0.0168 - 3 0.0363 - 4 0.00559 - 7 0.0168 - 8 0.0363 - 9 0.00279 - 13 0.109 - 14 0.0531 - 15 0.00279 - 21 0.00559 - 28 0.00279 - 30 0.00279 - 31 0.014 - 32 0.00279 - 41 0.598 - 42 0.00559 - 43 0.00279 - 44 0.00279 - 45 0.0112 - 46 0.00279 - 47 0.0698 - - 41 2 2 0 - 2 0.5 - 15 0.5 - - 45 9 7 0 - 0 0.222 - 3 0.111 - 13 0.222 - 14 0.111 - 19 0.111 - 21 0.111 - 47 0.111 - - 49 623 28 0 - 0 0.0674 - 2 0.0369 - 3 0.00321 - 4 0.00642 - 7 0.00482 - 8 0.0161 - 9 0.00161 - 12 0.00161 - 13 0.114 - 14 0.0867 - 15 0.0112 - 19 0.00963 - 21 0.0321 - 22 0.00161 - 24 0.00963 - 28 0.0161 - 29 0.0289 - 30 0.0144 - 31 0.0754 - 32 0.00482 - 33 0.0144 - 37 0.00161 - 41 0.319 - 42 0.0385 - 44 0.00321 - 45 0.0161 - 46 0.00482 - 47 0.0594 - - 50 17 10 0 - 8 0.176 - 13 0.118 - 14 0.0588 - 24 0.0588 - 28 0.0588 - 30 0.0588 - 31 0.118 - 33 0.0588 - 41 0.235 - 45 0.0588 - - 55 135 19 0 - 0 0.141 - 2 0.0593 - 7 0.133 - 8 0.0148 - 13 0.0815 - 14 0.0519 - 15 0.00741 - 21 0.037 - 24 0.00741 - 26 0.00741 - 28 0.0444 - 29 0.0444 - 31 0.0741 - 32 0.00741 - 33 0.0296 - 41 0.156 - 42 0.037 - 46 0.00741 - 47 0.0593 - - 57 656 25 0 - 0 0.0244 - 2 0.00915 - 3 0.00457 - 4 0.00305 - 7 0.00457 - 8 0.0457 - 9 0.0061 - 12 0.00152 - 13 0.245 - 14 0.148 - 15 0.0259 - 19 0.00915 - 21 0.0152 - 24 0.0061 - 28 0.0884 - 29 0.0381 - 30 0.061 - 31 0.123 - 32 0.0213 - 33 0.0274 - 41 0.0396 - 42 0.0152 - 45 0.00305 - 46 0.00305 - 47 0.0305 - - 74 5 2 0 - 41 0.2 - 47 0.8 - - 49 628 28 4 - 0 0.0669 - 2 0.0366 - 3 0.00318 - 4 0.00637 - 7 0.00478 - 8 0.0175 - 9 0.00159 - 12 0.00159 - 13 0.113 - 14 0.086 - 15 0.0111 - 19 0.00955 - 21 0.035 - 22 0.00159 - 24 0.00955 - 28 0.0159 - 29 0.0287 - 30 0.0143 - 31 0.0748 - 32 0.00478 - 33 0.0143 - 37 0.00159 - 41 0.318 - 42 0.0382 - 44 0.00318 - 45 0.0175 - 46 0.00478 - 47 0.0589 - - 21 11 6 0 - 0 0.273 - 2 0.0909 - 13 0.0909 - 14 0.182 - 21 0.0909 - 41 0.273 - - 26 36 15 0 - 0 0.0278 - 2 0.0833 - 8 0.0833 - 13 0.306 - 14 0.0833 - 15 0.0278 - 19 0.0278 - 21 0.0556 - 28 0.0278 - 29 0.0556 - 30 0.0278 - 31 0.0833 - 33 0.0278 - 41 0.0556 - 44 0.0278 - - 48 1 1 0 - 7 1 - - 57 6 3 0 - 21 0.333 - 33 0.167 - 42 0.5 - - 50 17 10 0 - 8 0.176 - 13 0.118 - 14 0.0588 - 24 0.0588 - 28 0.0588 - 30 0.0588 - 31 0.118 - 33 0.0588 - 41 0.235 - 45 0.0588 - - 55 142 21 4 - 0 0.134 - 2 0.0563 - 3 0.00704 - 7 0.141 - 8 0.0141 - 13 0.0775 - 14 0.0493 - 15 0.00704 - 21 0.0423 - 24 0.00704 - 26 0.00704 - 28 0.0423 - 29 0.0423 - 30 0.00704 - 31 0.0704 - 32 0.00704 - 33 0.0282 - 41 0.162 - 42 0.0352 - 46 0.00704 - 47 0.0563 - - 41 2 2 0 - 30 0.5 - 41 0.5 - - 47 5 3 0 - 2 0.2 - 3 0.2 - 7 0.6 - - 55 3 2 0 - 8 0.333 - 41 0.667 - - 57 5 4 0 - 2 0.2 - 13 0.2 - 26 0.2 - 41 0.4 - - 57 1537 25 1 - 0 0.0104 - 2 0.013 - 3 0.00195 - 4 0.00846 - 7 0.00195 - 8 0.028 - 9 0.0026 - 12 0.000651 - 13 0.108 - 14 0.0638 - 15 0.0111 - 19 0.0039 - 21 0.0592 - 24 0.0026 - 28 0.0377 - 29 0.0163 - 30 0.318 - 31 0.249 - 32 0.00911 - 33 0.0117 - 41 0.0176 - 42 0.00846 - 45 0.00195 - 46 0.0013 - 47 0.013 - - 7 8 4 0 - 0 0.125 - 4 0.125 - 31 0.125 - 41 0.625 - - 74 5 2 0 - 41 0.2 - 47 0.8 - -58 7648 40 29 - 0 0.00628 - 2 0.0209 - 3 0.0234 - 4 0.0068 - 6 0.00157 - 7 0.0111 - 8 0.028 - 9 0.00144 - 10 0.00105 - 11 0.000262 - 12 0.00144 - 13 0.168 - 14 0.125 - 15 0.117 - 16 0.00405 - 18 0.00131 - 19 0.00902 - 20 0.000785 - 21 0.0369 - 22 0.00105 - 23 0.000262 - 24 0.00105 - 26 0.000785 - 28 0.00732 - 29 0.0034 - 30 0.00288 - 31 0.011 - 32 0.00366 - 33 0.00484 - 34 0.00209 - 35 0.000523 - 37 0.00235 - 40 0.0123 - 41 0.151 - 42 0.0554 - 43 0.000523 - 44 0.132 - 45 0.00392 - 46 0.036 - 47 0.00314 - - 0 2 1 0 - 2 1 - - 2 101 4 0 - 15 0.0099 - 41 0.327 - 42 0.406 - 44 0.257 - - 4 1 1 0 - 28 1 - - 7 6 3 0 - 41 0.333 - 42 0.167 - 44 0.5 - - 8 16 2 0 - 2 0.125 - 44 0.875 - - 13 22 5 0 - 2 0.0909 - 8 0.136 - 13 0.182 - 15 0.0455 - 44 0.545 - - 15 36 5 0 - 2 0.0556 - 15 0.139 - 41 0.0278 - 44 0.75 - 45 0.0278 - - 21 14 6 0 - 2 0.214 - 7 0.143 - 12 0.0714 - 41 0.143 - 42 0.286 - 44 0.143 - - 28 3 2 0 - 2 0.333 - 44 0.667 - - 32 2 1 0 - 2 1 - - 41 1008 32 9 - 0 0.0129 - 2 0.0595 - 3 0.0188 - 4 0.0109 - 6 0.00198 - 7 0.0218 - 8 0.0506 - 9 0.00298 - 10 0.000992 - 11 0.000992 - 12 0.00198 - 13 0.309 - 14 0.143 - 15 0.143 - 16 0.00397 - 18 0.00198 - 19 0.0139 - 21 0.101 - 22 0.00397 - 23 0.000992 - 24 0.00397 - 26 0.00198 - 28 0.0109 - 29 0.00893 - 30 0.00496 - 31 0.0268 - 32 0.00794 - 33 0.0129 - 34 0.00694 - 35 0.00198 - 37 0.00794 - 43 0.000992 - - 2 23 12 0 - 0 0.0435 - 3 0.0435 - 4 0.0435 - 6 0.0435 - 8 0.087 - 13 0.261 - 14 0.087 - 15 0.087 - 21 0.087 - 31 0.087 - 32 0.0435 - 33 0.087 - - 46 99 15 0 - 0 0.0202 - 4 0.0202 - 7 0.0202 - 8 0.121 - 13 0.424 - 14 0.152 - 15 0.0606 - 16 0.0101 - 19 0.0303 - 21 0.0505 - 24 0.0101 - 28 0.0303 - 31 0.0202 - 32 0.0202 - 43 0.0101 - - 49 51 12 0 - 0 0.0196 - 2 0.294 - 3 0.0196 - 7 0.0588 - 8 0.0784 - 13 0.216 - 14 0.118 - 15 0.0588 - 21 0.0588 - 28 0.0196 - 29 0.0196 - 31 0.0392 - - 52 6 3 0 - 7 0.5 - 13 0.333 - 30 0.167 - - 55 139 10 0 - 0 0.0144 - 3 0.0216 - 8 0.0144 - 10 0.00719 - 13 0.122 - 14 0.129 - 15 0.619 - 21 0.0576 - 31 0.00719 - 33 0.00719 - - 57 77 19 0 - 0 0.013 - 2 0.26 - 7 0.0649 - 8 0.039 - 13 0.221 - 14 0.104 - 15 0.0779 - 16 0.039 - 21 0.026 - 22 0.013 - 26 0.013 - 28 0.013 - 29 0.013 - 30 0.013 - 31 0.013 - 33 0.026 - 34 0.013 - 35 0.013 - 37 0.026 - - 62 507 29 0 - 0 0.00789 - 2 0.0375 - 3 0.0256 - 4 0.0158 - 6 0.00197 - 7 0.00986 - 8 0.0375 - 9 0.00592 - 11 0.00197 - 12 0.00197 - 13 0.349 - 14 0.168 - 15 0.0671 - 18 0.00394 - 19 0.0158 - 21 0.142 - 22 0.00592 - 23 0.00197 - 24 0.00592 - 26 0.00197 - 28 0.00789 - 29 0.00986 - 30 0.00394 - 31 0.0355 - 32 0.00789 - 33 0.00986 - 34 0.00592 - 35 0.00197 - 37 0.00986 - - 64 50 16 0 - 0 0.02 - 2 0.08 - 7 0.04 - 8 0.12 - 12 0.02 - 13 0.32 - 14 0.06 - 15 0.04 - 19 0.02 - 21 0.06 - 28 0.04 - 29 0.02 - 32 0.02 - 33 0.06 - 34 0.06 - 37 0.02 - - 66 45 12 0 - 2 0.0444 - 3 0.0222 - 7 0.0444 - 8 0.0222 - 13 0.378 - 14 0.156 - 15 0.0889 - 19 0.0444 - 21 0.133 - 29 0.0222 - 30 0.0222 - 31 0.0222 - - 42 412 25 9 - 0 0.00971 - 2 0.0146 - 3 0.034 - 4 0.00485 - 7 0.0121 - 8 0.0558 - 9 0.00243 - 10 0.00243 - 12 0.00243 - 13 0.354 - 14 0.26 - 15 0.102 - 16 0.00971 - 18 0.00243 - 19 0.00485 - 21 0.034 - 26 0.00243 - 28 0.017 - 29 0.00485 - 30 0.00485 - 31 0.0243 - 32 0.00971 - 33 0.00728 - 43 0.00243 - 46 0.0218 - - 2 40 13 0 - 3 0.05 - 4 0.025 - 8 0.125 - 13 0.325 - 14 0.025 - 15 0.075 - 21 0.1 - 28 0.025 - 29 0.05 - 30 0.05 - 31 0.05 - 32 0.075 - 46 0.025 - - 48 11 7 0 - 2 0.0909 - 3 0.0909 - 7 0.0909 - 8 0.0909 - 13 0.182 - 14 0.364 - 15 0.0909 - - 49 27 10 0 - 0 0.037 - 3 0.037 - 8 0.0741 - 12 0.037 - 13 0.481 - 14 0.148 - 15 0.0741 - 18 0.037 - 21 0.037 - 31 0.037 - - 51 3 3 0 - 13 0.333 - 15 0.333 - 26 0.333 - - 55 119 16 0 - 0 0.0168 - 2 0.0084 - 3 0.042 - 7 0.0084 - 8 0.0168 - 9 0.0084 - 13 0.345 - 14 0.319 - 15 0.118 - 16 0.0168 - 19 0.0084 - 21 0.0336 - 28 0.0168 - 31 0.0084 - 43 0.0084 - 46 0.0252 - - 57 81 15 0 - 0 0.0123 - 2 0.037 - 3 0.0617 - 4 0.0123 - 7 0.0247 - 8 0.0247 - 10 0.0123 - 13 0.309 - 14 0.321 - 15 0.037 - 21 0.0494 - 28 0.0123 - 31 0.037 - 33 0.0123 - 46 0.037 - - 62 65 12 0 - 2 0.0154 - 7 0.0154 - 8 0.138 - 13 0.385 - 14 0.277 - 15 0.0308 - 19 0.0154 - 21 0.0154 - 28 0.0154 - 31 0.0462 - 33 0.0308 - 46 0.0154 - - 64 38 8 0 - 8 0.0263 - 13 0.368 - 14 0.158 - 15 0.316 - 16 0.0526 - 28 0.0263 - 32 0.0263 - 46 0.0263 - - 69 15 3 0 - 13 0.467 - 14 0.333 - 15 0.2 - - 44 1007 29 18 - 0 0.00794 - 2 0.000993 - 3 0.0566 - 4 0.0119 - 6 0.00397 - 7 0.0129 - 8 0.0298 - 9 0.000993 - 10 0.000993 - 12 0.00199 - 13 0.183 - 14 0.229 - 15 0.291 - 16 0.00695 - 18 0.00199 - 19 0.0139 - 20 0.00298 - 21 0.00894 - 28 0.00894 - 29 0.00199 - 30 0.00397 - 31 0.00497 - 32 0.00199 - 33 0.00199 - 37 0.000993 - 40 0.0467 - 41 0.00993 - 46 0.0437 - 47 0.00894 - - 2 26 9 0 - 0 0.0769 - 6 0.0385 - 13 0.423 - 14 0.192 - 15 0.0769 - 16 0.0385 - 28 0.0385 - 30 0.0769 - 31 0.0385 - - 8 14 7 0 - 4 0.214 - 7 0.214 - 8 0.214 - 9 0.0714 - 13 0.143 - 15 0.0714 - 40 0.0714 - - 9 1 1 0 - 20 1 - - 13 12 7 0 - 3 0.167 - 4 0.333 - 7 0.167 - 10 0.0833 - 13 0.0833 - 15 0.0833 - 31 0.0833 - - 14 2 2 0 - 8 0.5 - 41 0.5 - - 15 27 6 0 - 4 0.111 - 15 0.667 - 16 0.037 - 19 0.0741 - 28 0.037 - 40 0.0741 - - 21 2 2 0 - 0 0.5 - 14 0.5 - - 28 2 1 0 - 28 1 - - 45 24 5 0 - 13 0.375 - 14 0.0417 - 15 0.458 - 18 0.0417 - 46 0.0833 - - 48 24 10 0 - 0 0.0417 - 2 0.0417 - 3 0.25 - 4 0.0417 - 8 0.125 - 13 0.333 - 14 0.0417 - 15 0.0417 - 16 0.0417 - 40 0.0417 - - 49 12 7 0 - 0 0.0833 - 8 0.25 - 12 0.167 - 13 0.25 - 15 0.0833 - 33 0.0833 - 47 0.0833 - - 51 3 3 0 - 8 0.333 - 15 0.333 - 47 0.333 - - 52 5 2 0 - 13 0.8 - 21 0.2 - - 55 676 20 0 - 3 0.0621 - 4 0.00148 - 6 0.00444 - 7 0.00888 - 8 0.00888 - 13 0.129 - 14 0.266 - 15 0.354 - 16 0.00592 - 18 0.00148 - 19 0.0163 - 20 0.00296 - 21 0.00296 - 28 0.00296 - 29 0.00148 - 31 0.00148 - 40 0.0636 - 41 0.00888 - 46 0.0562 - 47 0.00148 - - 57 52 14 0 - 0 0.0192 - 3 0.0192 - 8 0.0962 - 13 0.385 - 14 0.25 - 15 0.0385 - 19 0.0192 - 21 0.0385 - 28 0.0192 - 29 0.0192 - 30 0.0192 - 31 0.0385 - 41 0.0192 - 46 0.0192 - - 62 63 14 0 - 0 0.0317 - 3 0.0476 - 7 0.0159 - 8 0.0794 - 13 0.302 - 14 0.159 - 15 0.111 - 21 0.0635 - 28 0.0159 - 32 0.0317 - 33 0.0159 - 37 0.0159 - 46 0.0159 - 47 0.0952 - - 64 23 7 0 - 3 0.087 - 8 0.0435 - 13 0.565 - 14 0.174 - 28 0.0435 - 41 0.0435 - 46 0.0435 - - 69 25 5 0 - 3 0.04 - 13 0.16 - 14 0.56 - 15 0.2 - 30 0.04 - - 45 30 4 0 - 41 0.0667 - 42 0.1 - 44 0.8 - 46 0.0333 - - 46 105 4 1 - 13 0.00952 - 33 0.00952 - 41 0.962 - 46 0.019 - - 42 1 1 0 - 13 1 - - 47 2420 38 11 - 0 0.00909 - 2 0.0298 - 3 0.0364 - 4 0.0107 - 6 0.00248 - 7 0.0165 - 8 0.0434 - 9 0.00207 - 10 0.00124 - 11 0.000413 - 12 0.00207 - 13 0.26 - 14 0.194 - 15 0.163 - 16 0.0062 - 18 0.00207 - 19 0.012 - 20 0.00124 - 21 0.0496 - 22 0.00165 - 23 0.000413 - 24 0.00165 - 26 0.00124 - 28 0.0116 - 29 0.00537 - 30 0.00455 - 31 0.0174 - 32 0.00579 - 33 0.00744 - 34 0.00331 - 35 0.000826 - 37 0.00372 - 40 0.0194 - 41 0.0306 - 42 0.00248 - 43 0.000826 - 46 0.0351 - 47 0.00496 - - 2 12 3 0 - 15 0.0833 - 41 0.833 - 42 0.0833 - - 41 884 32 0 - 0 0.0113 - 2 0.0679 - 3 0.0192 - 4 0.0124 - 6 0.00226 - 7 0.0249 - 8 0.0577 - 9 0.00339 - 10 0.00113 - 11 0.00113 - 12 0.00226 - 13 0.337 - 14 0.145 - 15 0.0679 - 16 0.00339 - 18 0.00226 - 19 0.0158 - 21 0.11 - 22 0.00452 - 23 0.00113 - 24 0.00452 - 26 0.00226 - 28 0.0124 - 29 0.0102 - 30 0.00566 - 31 0.0305 - 32 0.00905 - 33 0.0147 - 34 0.00792 - 35 0.00226 - 37 0.00905 - 43 0.00113 - - 42 407 25 0 - 0 0.00983 - 2 0.0147 - 3 0.0344 - 4 0.00491 - 7 0.0123 - 8 0.0565 - 9 0.00246 - 10 0.00246 - 12 0.00246 - 13 0.359 - 14 0.263 - 15 0.0958 - 16 0.00983 - 18 0.00246 - 19 0.00246 - 21 0.0344 - 26 0.00246 - 28 0.0172 - 29 0.00491 - 30 0.00491 - 31 0.0246 - 32 0.00983 - 33 0.00737 - 43 0.00246 - 46 0.0197 - - 44 1007 29 0 - 0 0.00794 - 2 0.000993 - 3 0.0566 - 4 0.0119 - 6 0.00397 - 7 0.0129 - 8 0.0298 - 9 0.000993 - 10 0.000993 - 12 0.00199 - 13 0.183 - 14 0.229 - 15 0.291 - 16 0.00695 - 18 0.00199 - 19 0.0139 - 20 0.00298 - 21 0.00894 - 28 0.00894 - 29 0.00199 - 30 0.00397 - 31 0.00497 - 32 0.00199 - 33 0.00199 - 37 0.000993 - 40 0.0467 - 41 0.00993 - 46 0.0437 - 47 0.00894 - - 49 6 3 0 - 41 0.667 - 42 0.167 - 46 0.167 - - 51 1 1 0 - 42 1 - - 55 5 3 0 - 41 0.4 - 46 0.4 - 47 0.2 - - 57 9 5 0 - 2 0.333 - 14 0.111 - 15 0.111 - 41 0.333 - 42 0.111 - - 62 70 9 0 - 4 0.0143 - 8 0.0143 - 14 0.0286 - 16 0.0143 - 34 0.0143 - 41 0.557 - 42 0.0286 - 46 0.3 - 47 0.0286 - - 64 3 2 0 - 2 0.667 - 46 0.333 - - 66 12 2 0 - 41 0.333 - 46 0.667 - - 48 48 7 0 - 0 0.0208 - 13 0.0417 - 21 0.146 - 41 0.0208 - 42 0.229 - 44 0.5 - 45 0.0417 - - 49 102 7 3 - 7 0.0098 - 14 0.0098 - 21 0.0392 - 41 0.539 - 42 0.275 - 44 0.118 - 46 0.0098 - - 41 4 1 0 - 42 1 - - 47 57 5 0 - 14 0.0175 - 21 0.0526 - 41 0.684 - 42 0.14 - 44 0.105 - - 48 6 3 0 - 21 0.167 - 41 0.333 - 44 0.5 - - 51 8 3 0 - 41 0.125 - 42 0.5 - 44 0.375 - - 52 12 3 0 - 41 0.5 - 42 0.0833 - 44 0.417 - - 55 985 13 2 - 3 0.00102 - 7 0.00203 - 8 0.00102 - 9 0.00102 - 13 0.00102 - 19 0.00203 - 21 0.0223 - 41 0.143 - 42 0.121 - 44 0.686 - 45 0.0122 - 46 0.00609 - 47 0.00102 - - 41 101 4 0 - 41 0.109 - 42 0.0297 - 44 0.851 - 46 0.0099 - - 69 25 2 0 - 41 0.96 - 46 0.04 - - 57 225 9 1 - 2 0.0178 - 13 0.00889 - 14 0.00889 - 15 0.00444 - 41 0.356 - 42 0.364 - 44 0.231 - 45 0.00444 - 46 0.00444 - - 41 12 2 0 - 42 0.917 - 44 0.0833 - - 58 4 3 0 - 13 0.5 - 21 0.25 - 46 0.25 - - 62 781 11 2 - 4 0.00128 - 8 0.00128 - 14 0.00256 - 16 0.00128 - 34 0.00128 - 41 0.699 - 42 0.0858 - 44 0.0807 - 45 0.0128 - 46 0.111 - 47 0.00256 - - 41 5 3 0 - 41 0.2 - 42 0.4 - 45 0.4 - - 46 2 1 0 - 45 1 - - 64 117 8 0 - 2 0.0171 - 10 0.00855 - 15 0.00855 - 21 0.00855 - 41 0.427 - 42 0.325 - 44 0.197 - 46 0.00855 - - 66 86 2 0 - 41 0.57 - 46 0.43 - - 67 6 3 0 - 41 0.167 - 44 0.167 - 45 0.667 - - 68 4 3 0 - 21 0.25 - 42 0.5 - 44 0.25 - - 69 68 9 0 - 10 0.0147 - 13 0.0294 - 14 0.0441 - 15 0.176 - 19 0.118 - 21 0.0147 - 41 0.0147 - 42 0.221 - 44 0.368 - -59 5288 19 7 - 0 0.00265 - 2 0.000378 - 3 0.000378 - 4 0.00151 - 7 0.000378 - 8 0.00227 - 9 0.000378 - 13 0.0223 - 14 0.0129 - 15 0.00227 - 19 0.0318 - 21 0.000756 - 24 0.000756 - 28 0.326 - 29 0.179 - 30 0.151 - 31 0.169 - 32 0.0416 - 33 0.0552 - - 2 2 1 0 - 24 1 - - 7 65 11 0 - 8 0.0154 - 13 0.0308 - 14 0.0154 - 15 0.0154 - 19 0.0769 - 28 0.154 - 29 0.277 - 30 0.108 - 31 0.215 - 32 0.0308 - 33 0.0615 - - 8 6 4 0 - 8 0.167 - 14 0.167 - 28 0.5 - 31 0.167 - - 21 84 12 0 - 0 0.0119 - 3 0.0119 - 13 0.0833 - 14 0.0238 - 15 0.0119 - 19 0.0714 - 28 0.238 - 29 0.107 - 30 0.155 - 31 0.226 - 32 0.0238 - 33 0.0357 - - 23 1 1 0 - 0 1 - - 24 2483 18 1 - 0 0.00201 - 2 0.000805 - 4 0.00161 - 7 0.000403 - 8 0.00161 - 9 0.000403 - 13 0.0201 - 14 0.0117 - 15 0.00161 - 19 0.0294 - 21 0.000805 - 24 0.000403 - 28 0.333 - 29 0.178 - 30 0.153 - 31 0.166 - 32 0.0427 - 33 0.056 - - 2 2 1 0 - 13 1 - - 47 2642 18 4 - 0 0.00265 - 3 0.000379 - 4 0.00151 - 7 0.000379 - 8 0.00227 - 9 0.000379 - 13 0.0223 - 14 0.0129 - 15 0.00227 - 19 0.0318 - 21 0.000757 - 24 0.000379 - 28 0.326 - 29 0.179 - 30 0.151 - 31 0.169 - 32 0.0416 - 33 0.0553 - - 7 65 11 0 - 8 0.0154 - 13 0.0308 - 14 0.0154 - 15 0.0154 - 19 0.0769 - 28 0.154 - 29 0.277 - 30 0.108 - 31 0.215 - 32 0.0308 - 33 0.0615 - - 8 6 4 0 - 8 0.167 - 14 0.167 - 28 0.5 - 31 0.167 - - 21 84 12 0 - 0 0.0119 - 3 0.0119 - 13 0.0833 - 14 0.0238 - 15 0.0119 - 19 0.0714 - 28 0.238 - 29 0.107 - 30 0.155 - 31 0.226 - 32 0.0238 - 33 0.0357 - - 23 1 1 0 - 0 1 - -60 27233 41 25 - 0 0.0313 - 1 7.34e-05 - 2 0.0264 - 3 0.111 - 4 0.0584 - 7 0.296 - 8 0.0205 - 9 0.0164 - 10 0.0061 - 13 0.0187 - 14 0.00639 - 15 0.00323 - 16 0.000147 - 17 0.000257 - 18 0.00804 - 19 0.000808 - 20 0.00463 - 21 0.0559 - 22 0.00382 - 23 7.34e-05 - 24 0.0051 - 25 0.00011 - 26 0.11 - 28 0.038 - 29 0.0476 - 30 0.0154 - 31 0.0166 - 32 0.00543 - 33 0.0142 - 34 0.000441 - 36 0.000147 - 37 0.00125 - 38 0.0047 - 39 0.00683 - 41 0.0143 - 42 0.0234 - 43 0.000184 - 44 0.0134 - 45 0.00114 - 46 0.00022 - 47 0.0135 - - 2 230 9 4 - 3 0.626 - 4 0.0304 - 7 0.00435 - 8 0.00435 - 13 0.265 - 14 0.0565 - 31 0.00435 - 41 0.00435 - 43 0.00435 - - 3 94 4 0 - 3 0.543 - 4 0.0426 - 13 0.404 - 31 0.0106 - - 7 4 3 0 - 3 0.25 - 4 0.5 - 7 0.25 - - 9 51 3 0 - 3 0.627 - 13 0.176 - 14 0.196 - - 39 43 5 0 - 3 0.907 - 4 0.0233 - 14 0.0233 - 41 0.0233 - 43 0.0233 - - 3 6618 35 9 - 0 0.011 - 2 0.0193 - 3 0.317 - 4 0.0252 - 7 0.221 - 8 0.0113 - 9 0.000151 - 10 0.0192 - 13 0.0119 - 14 0.00287 - 15 0.00181 - 16 0.000151 - 18 0.00468 - 19 0.000302 - 20 0.00181 - 21 0.0979 - 22 0.000151 - 24 0.00121 - 25 0.000453 - 26 0.116 - 28 0.00861 - 29 0.0323 - 30 0.00378 - 31 0.00423 - 32 0.00212 - 33 0.00242 - 34 0.000453 - 38 0.0192 - 39 0.0264 - 41 0.0068 - 42 0.0258 - 43 0.000151 - 44 0.000453 - 45 0.000907 - 47 0.00181 - - 2 115 19 0 - 0 0.0261 - 2 0.0435 - 3 0.209 - 4 0.0609 - 7 0.243 - 8 0.0435 - 13 0.0174 - 14 0.0087 - 19 0.0087 - 21 0.0261 - 26 0.0087 - 28 0.0261 - 29 0.0174 - 31 0.0261 - 32 0.0087 - 33 0.0087 - 38 0.0087 - 39 0.191 - 45 0.0174 - - 3 2100 30 0 - 0 0.0229 - 2 0.0143 - 4 0.0305 - 7 0.277 - 8 0.0162 - 10 0.00143 - 13 0.00286 - 14 0.00667 - 15 0.00524 - 16 0.000476 - 18 0.0138 - 20 0.00571 - 21 0.0419 - 22 0.000476 - 24 0.00238 - 25 0.00143 - 26 0.224 - 28 0.0181 - 29 0.0929 - 30 0.00857 - 31 0.00905 - 32 0.000952 - 33 0.00476 - 34 0.00143 - 38 0.0576 - 39 0.0376 - 41 0.0171 - 42 0.0786 - 44 0.000476 - 47 0.00571 - - 7 33 11 0 - 0 0.0303 - 2 0.0606 - 3 0.0303 - 7 0.303 - 13 0.0303 - 21 0.303 - 31 0.0303 - 32 0.0606 - 33 0.0303 - 41 0.0909 - 42 0.0303 - - 8 4 2 0 - 3 0.5 - 4 0.5 - - 9 13 8 0 - 0 0.154 - 2 0.0769 - 10 0.0769 - 28 0.0769 - 29 0.231 - 30 0.0769 - 32 0.0769 - 41 0.231 - - 13 293 22 0 - 0 0.0205 - 2 0.0751 - 3 0.294 - 4 0.0546 - 7 0.171 - 8 0.0102 - 10 0.00341 - 13 0.0102 - 14 0.00683 - 15 0.00341 - 18 0.00341 - 21 0.041 - 26 0.232 - 28 0.0137 - 29 0.00683 - 30 0.00683 - 31 0.0102 - 32 0.0137 - 33 0.00683 - 39 0.00683 - 42 0.00341 - 45 0.00683 - - 14 71 14 0 - 0 0.0986 - 2 0.127 - 3 0.0423 - 4 0.0141 - 7 0.254 - 14 0.0141 - 21 0.127 - 26 0.169 - 28 0.0563 - 29 0.0141 - 41 0.0282 - 42 0.0282 - 44 0.0141 - 45 0.0141 - - 26 310 22 0 - 0 0.0194 - 3 0.171 - 4 0.0258 - 7 0.155 - 8 0.0194 - 9 0.00323 - 10 0.00323 - 13 0.216 - 19 0.00323 - 21 0.0419 - 24 0.00645 - 28 0.0226 - 29 0.0323 - 30 0.0129 - 31 0.00323 - 32 0.0129 - 33 0.00645 - 39 0.232 - 42 0.00323 - 43 0.00323 - 44 0.00323 - 45 0.00323 - - 47 3678 16 0 - 2 0.016 - 3 0.525 - 4 0.0188 - 7 0.198 - 8 0.00734 - 10 0.0329 - 14 0.000272 - 18 0.000272 - 21 0.139 - 24 0.000272 - 26 0.0593 - 29 0.000272 - 31 0.000272 - 38 0.00136 - 41 0.000272 - 42 0.000272 - - 4 242 23 7 - 0 0.0124 - 2 0.0248 - 3 0.00413 - 4 0.00413 - 7 0.343 - 10 0.0289 - 13 0.0207 - 14 0.00413 - 17 0.0289 - 21 0.165 - 24 0.0165 - 26 0.0331 - 28 0.0702 - 29 0.0702 - 30 0.0165 - 31 0.0248 - 32 0.00413 - 33 0.0289 - 41 0.00826 - 42 0.00826 - 44 0.00413 - 46 0.00413 - 47 0.0744 - - 2 7 5 0 - 7 0.286 - 29 0.286 - 31 0.143 - 32 0.143 - 47 0.143 - - 3 79 19 0 - 0 0.0253 - 2 0.038 - 3 0.0127 - 7 0.278 - 10 0.0253 - 13 0.0506 - 17 0.0127 - 21 0.0127 - 24 0.0127 - 26 0.0253 - 28 0.0633 - 29 0.127 - 30 0.0253 - 33 0.038 - 41 0.0253 - 42 0.0253 - 44 0.0127 - 46 0.0127 - 47 0.177 - - 8 39 9 0 - 7 0.154 - 10 0.0769 - 13 0.0256 - 14 0.0256 - 21 0.513 - 26 0.0769 - 28 0.0769 - 29 0.0256 - 30 0.0256 - - 9 7 3 0 - 7 0.429 - 26 0.429 - 28 0.143 - - 13 35 12 0 - 0 0.0286 - 2 0.0571 - 4 0.0286 - 7 0.429 - 17 0.114 - 21 0.143 - 24 0.0286 - 28 0.0286 - 29 0.0286 - 31 0.0286 - 33 0.0571 - 47 0.0286 - - 39 24 9 0 - 7 0.208 - 17 0.0417 - 21 0.0833 - 28 0.25 - 29 0.0833 - 30 0.0417 - 31 0.167 - 33 0.0833 - 47 0.0417 - - 47 41 6 0 - 7 0.634 - 10 0.0488 - 17 0.0244 - 21 0.244 - 24 0.0244 - 47 0.0244 - - 7 1759 31 14 - 0 0.0352 - 1 0.000569 - 2 0.0222 - 3 0.0188 - 4 0.00227 - 7 0.204 - 8 0.0824 - 9 0.252 - 10 0.00114 - 13 0.00569 - 14 0.0131 - 15 0.00114 - 16 0.000569 - 19 0.00114 - 21 0.0495 - 22 0.0563 - 24 0.00682 - 26 0.0324 - 28 0.0591 - 29 0.0233 - 30 0.021 - 31 0.0171 - 32 0.00625 - 33 0.0347 - 37 0.00625 - 41 0.0148 - 42 0.00455 - 44 0.00284 - 45 0.00227 - 46 0.00114 - 47 0.0222 - - 3 910 26 0 - 0 0.0297 - 2 0.0176 - 3 0.0275 - 4 0.0022 - 7 0.137 - 8 0.112 - 9 0.289 - 13 0.0011 - 14 0.0044 - 15 0.0011 - 16 0.0011 - 21 0.0593 - 22 0.0725 - 24 0.0022 - 26 0.0396 - 28 0.0418 - 29 0.0286 - 30 0.0231 - 31 0.0154 - 32 0.0044 - 33 0.0396 - 37 0.0011 - 41 0.0187 - 42 0.00549 - 45 0.0011 - 47 0.0242 - - 4 45 17 0 - 0 0.0222 - 3 0.0444 - 4 0.0222 - 7 0.0889 - 8 0.0222 - 9 0.333 - 10 0.0222 - 13 0.0222 - 14 0.0444 - 21 0.0444 - 22 0.156 - 24 0.0222 - 29 0.0222 - 31 0.0444 - 33 0.0222 - 41 0.0222 - 42 0.0444 - - 7 5 2 0 - 3 0.8 - 9 0.2 - - 8 11 4 0 - 8 0.0909 - 14 0.364 - 21 0.273 - 22 0.273 - - 10 161 20 0 - 0 0.0435 - 1 0.00621 - 2 0.0497 - 7 0.404 - 8 0.00621 - 13 0.00621 - 14 0.00621 - 21 0.00621 - 24 0.0248 - 26 0.0248 - 28 0.137 - 29 0.0248 - 30 0.0435 - 31 0.0248 - 32 0.00621 - 33 0.0186 - 37 0.0621 - 41 0.0248 - 45 0.00621 - 47 0.0745 - - 13 26 13 0 - 0 0.115 - 4 0.0385 - 9 0.346 - 13 0.0385 - 21 0.0769 - 22 0.0769 - 26 0.0385 - 30 0.0385 - 31 0.0385 - 33 0.0769 - 42 0.0385 - 45 0.0385 - 47 0.0385 - - 14 16 5 0 - 2 0.125 - 7 0.0625 - 9 0.375 - 14 0.375 - 46 0.0625 - - 17 27 10 0 - 0 0.0741 - 7 0.111 - 9 0.481 - 21 0.0741 - 22 0.0741 - 26 0.037 - 28 0.037 - 30 0.037 - 32 0.037 - 45 0.037 - - 21 16 8 0 - 0 0.125 - 3 0.0625 - 8 0.0625 - 9 0.438 - 13 0.0625 - 21 0.0625 - 22 0.0625 - 41 0.125 - - 26 53 12 0 - 7 0.472 - 13 0.0377 - 14 0.0566 - 19 0.0189 - 21 0.0189 - 24 0.0189 - 28 0.226 - 31 0.0189 - 32 0.0377 - 33 0.0377 - 41 0.0377 - 47 0.0189 - - 28 2 1 0 - 22 1 - - 38 10 8 0 - 2 0.2 - 8 0.1 - 9 0.1 - 21 0.1 - 26 0.1 - 28 0.2 - 29 0.1 - 33 0.1 - - 39 470 23 0 - 0 0.0404 - 2 0.0213 - 7 0.287 - 8 0.0809 - 9 0.27 - 10 0.00213 - 13 0.00638 - 14 0.00638 - 15 0.00213 - 19 0.00213 - 21 0.0404 - 22 0.034 - 24 0.00851 - 26 0.0298 - 28 0.0596 - 29 0.0191 - 30 0.0149 - 31 0.0149 - 32 0.00638 - 33 0.034 - 44 0.0106 - 46 0.00213 - 47 0.00638 - - 47 3 3 0 - 2 0.333 - 9 0.333 - 21 0.333 - - 8 256 17 9 - 0 0.0117 - 2 0.00391 - 3 0.0156 - 4 0.195 - 7 0.117 - 10 0.00781 - 15 0.00391 - 21 0.594 - 22 0.00391 - 26 0.00781 - 28 0.00391 - 29 0.00391 - 30 0.00781 - 31 0.00781 - 33 0.00781 - 39 0.00391 - 41 0.00391 - - 3 37 9 0 - 0 0.0541 - 4 0.459 - 7 0.297 - 26 0.027 - 28 0.027 - 29 0.027 - 30 0.027 - 31 0.0541 - 33 0.027 - - 7 140 4 0 - 0 0.00714 - 4 0.00714 - 7 0.00714 - 21 0.979 - - 13 4 3 0 - 4 0.5 - 7 0.25 - 41 0.25 - - 14 3 3 0 - 2 0.333 - 7 0.333 - 33 0.333 - - 21 1 1 0 - 30 1 - - 26 4 3 0 - 4 0.25 - 7 0.5 - 15 0.25 - - 39 8 3 0 - 4 0.625 - 7 0.25 - 21 0.125 - - 41 1 1 0 - 39 1 - - 47 56 7 0 - 3 0.0714 - 4 0.411 - 7 0.196 - 10 0.0357 - 21 0.25 - 22 0.0179 - 26 0.0179 - - 9 511 25 2 - 0 0.0509 - 2 0.133 - 3 0.0254 - 4 0.0274 - 7 0.29 - 8 0.00196 - 13 0.0157 - 14 0.00783 - 15 0.00391 - 19 0.00196 - 20 0.00196 - 21 0.047 - 24 0.00391 - 26 0.0391 - 28 0.0685 - 29 0.0705 - 30 0.0352 - 31 0.0391 - 32 0.00587 - 33 0.0235 - 37 0.00391 - 41 0.0509 - 42 0.0157 - 45 0.00196 - 47 0.0352 - - 7 443 23 0 - 0 0.0587 - 2 0.0384 - 4 0.0316 - 7 0.334 - 13 0.0158 - 14 0.00677 - 15 0.00451 - 19 0.00226 - 20 0.00226 - 21 0.0519 - 24 0.00451 - 26 0.0451 - 28 0.079 - 29 0.0813 - 30 0.0406 - 31 0.0451 - 32 0.00677 - 33 0.0271 - 37 0.00451 - 41 0.0587 - 42 0.0181 - 45 0.00226 - 47 0.0406 - - 47 67 5 0 - 2 0.761 - 3 0.194 - 8 0.0149 - 14 0.0149 - 21 0.0149 - - 10 163 2 0 - 2 0.00613 - 7 0.994 - - 13 383 11 5 - 3 0.765 - 4 0.094 - 7 0.0731 - 8 0.0104 - 10 0.00522 - 20 0.00261 - 21 0.0339 - 24 0.00261 - 26 0.00783 - 33 0.00261 - 42 0.00261 - - 2 23 1 0 - 3 1 - - 7 3 2 0 - 4 0.667 - 7 0.333 - - 26 108 3 0 - 3 0.972 - 7 0.0185 - 21 0.00926 - - 39 1 1 0 - 20 1 - - 47 248 10 0 - 3 0.665 - 4 0.137 - 7 0.101 - 8 0.0161 - 10 0.00806 - 21 0.0484 - 24 0.00403 - 26 0.0121 - 33 0.00403 - 42 0.00403 - - 14 104 11 4 - 2 0.00962 - 3 0.683 - 4 0.00962 - 7 0.173 - 8 0.0288 - 15 0.00962 - 21 0.0385 - 26 0.00962 - 28 0.0192 - 41 0.00962 - 45 0.00962 - - 3 1 1 0 - 4 1 - - 7 10 6 0 - 2 0.1 - 3 0.4 - 7 0.1 - 28 0.2 - 41 0.1 - 45 0.1 - - 47 82 4 0 - 3 0.707 - 7 0.207 - 8 0.0366 - 21 0.0488 - - 58 1 1 0 - 15 1 - - 15 2 2 0 - 3 0.5 - 15 0.5 - - 17 43 7 0 - 4 0.0233 - 7 0.628 - 10 0.0698 - 14 0.0233 - 21 0.209 - 28 0.0233 - 31 0.0233 - - 21 1368 30 13 - 0 0.0775 - 2 0.0702 - 3 0.00146 - 4 0.0139 - 7 0.284 - 8 0.00439 - 13 0.0168 - 14 0.0102 - 15 0.00512 - 18 0.00146 - 19 0.00292 - 20 0.00146 - 21 0.0694 - 23 0.000731 - 24 0.0146 - 26 0.0373 - 28 0.0877 - 29 0.0687 - 30 0.0234 - 31 0.0307 - 32 0.0183 - 33 0.0424 - 36 0.000731 - 37 0.00219 - 41 0.0387 - 42 0.0175 - 43 0.000731 - 44 0.00512 - 45 0.00219 - 47 0.0497 - - 3 628 30 0 - 0 0.0955 - 2 0.0446 - 3 0.00318 - 4 0.00796 - 7 0.247 - 8 0.00159 - 13 0.0175 - 14 0.00478 - 15 0.00955 - 18 0.00159 - 19 0.00318 - 20 0.00318 - 21 0.0525 - 23 0.00159 - 24 0.00637 - 26 0.0318 - 28 0.0732 - 29 0.0971 - 30 0.0271 - 31 0.035 - 32 0.0223 - 33 0.0589 - 36 0.00159 - 37 0.00318 - 41 0.0478 - 42 0.0159 - 43 0.00159 - 44 0.00796 - 45 0.00318 - 47 0.0732 - - 4 38 10 0 - 2 0.0526 - 7 0.263 - 14 0.0263 - 21 0.0789 - 28 0.0263 - 29 0.0789 - 31 0.0526 - 33 0.105 - 41 0.132 - 47 0.184 - - 7 71 14 0 - 0 0.0845 - 2 0.0423 - 7 0.183 - 8 0.0423 - 21 0.394 - 24 0.0423 - 26 0.0141 - 28 0.0282 - 29 0.0282 - 32 0.0141 - 33 0.0563 - 41 0.0141 - 42 0.0282 - 47 0.0282 - - 8 152 20 0 - 0 0.0461 - 2 0.0592 - 4 0.00658 - 7 0.375 - 8 0.00658 - 13 0.0132 - 14 0.0263 - 21 0.0461 - 24 0.0329 - 26 0.0526 - 28 0.164 - 29 0.0526 - 30 0.0197 - 31 0.0197 - 32 0.0132 - 33 0.0132 - 37 0.00658 - 41 0.0132 - 42 0.0132 - 47 0.0197 - - 9 15 9 0 - 0 0.0667 - 4 0.133 - 7 0.267 - 21 0.0667 - 26 0.0667 - 28 0.0667 - 32 0.133 - 41 0.133 - 45 0.0667 - - 13 12 8 0 - 2 0.25 - 21 0.0833 - 24 0.0833 - 28 0.0833 - 29 0.0833 - 32 0.0833 - 41 0.0833 - 47 0.25 - - 14 4 3 0 - 7 0.5 - 24 0.25 - 29 0.25 - - 17 9 6 0 - 2 0.111 - 7 0.222 - 24 0.111 - 29 0.222 - 33 0.111 - 47 0.222 - - 21 59 17 0 - 0 0.0508 - 2 0.0169 - 7 0.102 - 13 0.0508 - 14 0.0847 - 19 0.0339 - 21 0.0169 - 24 0.0169 - 26 0.0169 - 28 0.288 - 29 0.0508 - 31 0.0678 - 32 0.0339 - 33 0.0508 - 41 0.0847 - 42 0.0169 - 47 0.0169 - - 26 21 10 0 - 0 0.19 - 2 0.0952 - 7 0.19 - 14 0.0476 - 15 0.0476 - 28 0.19 - 30 0.0952 - 33 0.0476 - 41 0.0476 - 42 0.0476 - - 38 11 8 0 - 7 0.182 - 21 0.0909 - 24 0.0909 - 26 0.182 - 28 0.182 - 29 0.0909 - 31 0.0909 - 42 0.0909 - - 39 296 20 0 - 0 0.0811 - 2 0.0676 - 4 0.0372 - 7 0.409 - 8 0.00338 - 13 0.0236 - 18 0.00338 - 21 0.0304 - 24 0.0101 - 26 0.0608 - 28 0.0709 - 29 0.0405 - 30 0.0338 - 31 0.0338 - 32 0.0101 - 33 0.0203 - 41 0.0203 - 42 0.0236 - 44 0.00676 - 47 0.0135 - - 47 51 3 0 - 2 0.529 - 7 0.255 - 21 0.216 - - 22 108 17 2 - 0 0.0556 - 2 0.0648 - 4 0.037 - 7 0.333 - 8 0.0185 - 13 0.00926 - 14 0.00926 - 21 0.0278 - 24 0.0185 - 26 0.00926 - 28 0.0185 - 29 0.0926 - 30 0.13 - 31 0.0556 - 33 0.037 - 41 0.0463 - 47 0.037 - - 26 2 2 0 - 0 0.5 - 28 0.5 - - 47 6 3 0 - 2 0.667 - 13 0.167 - 14 0.167 - - 24 3 3 0 - 21 0.333 - 28 0.333 - 41 0.333 - - 25 3 2 0 - 7 0.667 - 30 0.333 - - 26 510 10 4 - 3 0.608 - 7 0.104 - 8 0.00784 - 13 0.212 - 14 0.0118 - 21 0.0412 - 22 0.00392 - 24 0.00196 - 28 0.00784 - 32 0.00196 - - 3 345 9 0 - 3 0.539 - 7 0.0957 - 13 0.304 - 14 0.0145 - 21 0.0261 - 22 0.0029 - 24 0.0029 - 28 0.0116 - 32 0.0029 - - 8 1 1 0 - 8 1 - - 39 157 7 0 - 3 0.783 - 7 0.115 - 8 0.0127 - 13 0.00637 - 14 0.00637 - 21 0.0701 - 22 0.00637 - - 47 1 1 0 - 8 1 - - 31 6 2 0 - 4 0.833 - 20 0.167 - - 38 128 14 0 - 2 0.0312 - 4 0.102 - 7 0.43 - 8 0.0312 - 13 0.0156 - 18 0.0391 - 21 0.0859 - 24 0.00781 - 26 0.195 - 28 0.0156 - 29 0.0156 - 31 0.00781 - 42 0.0156 - 47 0.00781 - - 39 5335 31 2 - 0 0.0274 - 2 0.0231 - 3 0.00075 - 4 0.108 - 7 0.384 - 8 0.0249 - 10 0.00394 - 13 0.00506 - 14 0.00281 - 15 0.00356 - 18 0.0135 - 19 0.000375 - 20 0.00862 - 21 0.0583 - 24 0.00375 - 26 0.153 - 28 0.0319 - 29 0.0437 - 30 0.0144 - 31 0.0172 - 32 0.00356 - 33 0.00619 - 34 0.000562 - 36 0.000187 - 37 0.000187 - 41 0.00656 - 42 0.0191 - 44 0.0313 - 45 0.000187 - 46 0.000187 - 47 0.0045 - - 3 165 16 0 - 0 0.0182 - 2 0.0242 - 4 0.103 - 7 0.582 - 8 0.0242 - 15 0.00606 - 18 0.0121 - 20 0.00606 - 21 0.0727 - 26 0.0121 - 28 0.0485 - 29 0.0182 - 31 0.0364 - 33 0.00606 - 42 0.0121 - 44 0.0182 - - 8 1 1 0 - 20 1 - - 41 2 2 0 - 8 0.5 - 38 0.5 - - 45 3 3 0 - 0 0.333 - 21 0.333 - 28 0.333 - - 46 2 2 0 - 9 0.5 - 10 0.5 - - 47 9444 38 17 - 0 0.0451 - 1 0.000106 - 2 0.026 - 3 0.00381 - 4 0.0736 - 7 0.334 - 8 0.019 - 9 0.000106 - 10 0.000106 - 13 0.0197 - 14 0.00805 - 15 0.00455 - 16 0.000212 - 18 0.0115 - 19 0.00116 - 20 0.00667 - 21 0.0109 - 22 0.000106 - 23 0.000106 - 24 0.0072 - 26 0.132 - 28 0.0547 - 29 0.0686 - 30 0.0222 - 31 0.0236 - 32 0.00784 - 33 0.0205 - 34 0.000635 - 36 0.000212 - 37 0.0018 - 39 0.00106 - 41 0.0205 - 42 0.0338 - 43 0.000212 - 44 0.0194 - 45 0.00148 - 46 0.000212 - 47 0.0195 - - 2 79 4 0 - 3 0.367 - 13 0.468 - 14 0.152 - 31 0.0127 - - 3 1998 31 0 - 0 0.0365 - 2 0.017 - 4 0.044 - 7 0.278 - 8 0.019 - 9 0.000501 - 13 0.0395 - 14 0.00901 - 15 0.00601 - 16 0.000501 - 18 0.015 - 19 0.001 - 20 0.00601 - 21 0.01 - 22 0.000501 - 24 0.0035 - 26 0.212 - 28 0.0285 - 29 0.107 - 30 0.0125 - 31 0.0135 - 32 0.00701 - 33 0.00801 - 34 0.0015 - 39 0.00501 - 41 0.022 - 42 0.0856 - 43 0.000501 - 44 0.0015 - 45 0.003 - 47 0.00601 - - 4 139 20 0 - 0 0.0216 - 2 0.0288 - 3 0.00719 - 7 0.273 - 13 0.036 - 14 0.00719 - 21 0.0144 - 24 0.0216 - 26 0.0432 - 28 0.122 - 29 0.122 - 30 0.0288 - 31 0.0432 - 32 0.00719 - 33 0.0504 - 41 0.0144 - 42 0.0144 - 44 0.00719 - 46 0.00719 - 47 0.129 - - 7 944 27 0 - 0 0.0657 - 1 0.00106 - 2 0.0371 - 4 0.00212 - 7 0.374 - 8 0.0053 - 13 0.00636 - 14 0.0138 - 15 0.00212 - 16 0.00106 - 19 0.00212 - 21 0.0169 - 24 0.0127 - 26 0.0604 - 28 0.11 - 29 0.0434 - 30 0.0392 - 31 0.0318 - 32 0.0117 - 33 0.0646 - 37 0.0117 - 41 0.0275 - 42 0.00847 - 44 0.0053 - 45 0.00318 - 46 0.00106 - 47 0.0413 - - 8 45 12 0 - 0 0.0667 - 2 0.0222 - 4 0.244 - 7 0.422 - 15 0.0222 - 26 0.0222 - 28 0.0222 - 29 0.0222 - 30 0.0444 - 31 0.0444 - 33 0.0444 - 41 0.0222 - - 9 422 23 0 - 0 0.0616 - 2 0.0403 - 4 0.0166 - 7 0.351 - 13 0.0166 - 14 0.00711 - 15 0.00474 - 19 0.00237 - 20 0.00237 - 21 0.0213 - 24 0.00474 - 26 0.0474 - 28 0.0829 - 29 0.0853 - 30 0.0427 - 31 0.0474 - 32 0.00711 - 33 0.0284 - 37 0.00474 - 41 0.0616 - 42 0.019 - 45 0.00237 - 47 0.0427 - - 13 8 7 0 - 4 0.125 - 7 0.25 - 20 0.125 - 21 0.125 - 24 0.125 - 33 0.125 - 42 0.125 - - 14 8 6 0 - 2 0.125 - 4 0.125 - 7 0.25 - 26 0.125 - 28 0.25 - 41 0.125 - - 17 3 3 0 - 14 0.333 - 28 0.333 - 31 0.333 - - 21 1259 30 0 - 0 0.0842 - 2 0.054 - 3 0.00159 - 4 0.0127 - 7 0.296 - 8 0.00397 - 13 0.0183 - 14 0.0103 - 15 0.00556 - 18 0.00159 - 19 0.00318 - 20 0.00159 - 21 0.0286 - 23 0.000794 - 24 0.0159 - 26 0.0397 - 28 0.0953 - 29 0.0747 - 30 0.0254 - 31 0.0334 - 32 0.0199 - 33 0.0461 - 36 0.000794 - 37 0.00238 - 41 0.0421 - 42 0.0191 - 43 0.000794 - 44 0.00556 - 45 0.00238 - 47 0.054 - - 22 100 16 0 - 0 0.06 - 2 0.03 - 4 0.01 - 7 0.36 - 8 0.02 - 13 0.01 - 21 0.03 - 24 0.02 - 26 0.01 - 28 0.02 - 29 0.1 - 30 0.14 - 31 0.06 - 33 0.04 - 41 0.05 - 47 0.04 - - 24 2 2 0 - 28 0.5 - 41 0.5 - - 26 5 2 0 - 28 0.8 - 32 0.2 - - 31 6 2 0 - 4 0.833 - 20 0.167 - - 38 105 13 0 - 2 0.019 - 4 0.124 - 7 0.429 - 8 0.0381 - 13 0.019 - 18 0.0476 - 24 0.00952 - 26 0.238 - 28 0.019 - 29 0.019 - 31 0.00952 - 42 0.019 - 47 0.00952 - - 39 4310 30 0 - 0 0.0339 - 2 0.0186 - 3 0.000928 - 4 0.128 - 7 0.366 - 8 0.029 - 10 0.000232 - 13 0.00603 - 14 0.00348 - 15 0.00441 - 18 0.0167 - 19 0.000464 - 20 0.0107 - 21 0.00348 - 24 0.00464 - 26 0.152 - 28 0.0394 - 29 0.0541 - 30 0.0179 - 31 0.0202 - 32 0.00441 - 33 0.00766 - 34 0.000696 - 36 0.000232 - 37 0.000232 - 41 0.00812 - 42 0.0237 - 44 0.0387 - 45 0.000232 - 47 0.00557 - - 45 3 3 0 - 0 0.333 - 21 0.333 - 28 0.333 - - 55 4 3 0 - 7 0.5 - 42 0.25 - 45 0.25 - - 58 1 1 0 - 14 1 - -61 127 13 5 - 2 0.0315 - 3 0.00787 - 4 0.0315 - 8 0.0157 - 13 0.189 - 14 0.0709 - 15 0.00787 - 21 0.15 - 24 0.00787 - 28 0.0157 - 41 0.441 - 42 0.0157 - 46 0.0157 - - 47 47 8 0 - 2 0.0426 - 4 0.0426 - 13 0.191 - 14 0.0851 - 28 0.0213 - 41 0.574 - 42 0.0213 - 46 0.0213 - - 49 32 6 0 - 2 0.0625 - 4 0.0625 - 13 0.0938 - 14 0.0625 - 24 0.0312 - 41 0.688 - - 55 24 7 0 - 8 0.0833 - 13 0.0833 - 14 0.0417 - 15 0.0417 - 21 0.667 - 41 0.0417 - 46 0.0417 - - 57 11 4 0 - 13 0.455 - 14 0.0909 - 28 0.0909 - 41 0.364 - - 64 1 1 0 - 3 1 - -62 295300 46 32 - 0 0.00594 - 1 0.000213 - 2 0.0265 - 3 0.00539 - 4 0.00642 - 5 0.0029 - 6 5.08e-05 - 7 0.092 - 8 0.0115 - 9 0.000735 - 10 0.000362 - 11 4.06e-05 - 12 0.000328 - 13 0.0983 - 14 0.0637 - 15 0.0501 - 16 0.00223 - 17 1.35e-05 - 18 0.000511 - 19 0.0512 - 20 4.74e-05 - 21 0.0258 - 22 0.00043 - 23 4.74e-05 - 24 0.000969 - 25 2.37e-05 - 26 0.00111 - 27 0.000102 - 28 0.0131 - 29 0.035 - 30 0.00893 - 31 0.0163 - 32 0.0106 - 33 0.0136 - 34 0.0284 - 35 0.0149 - 36 6.77e-06 - 37 0.0127 - 40 0.000139 - 41 0.079 - 42 0.0087 - 43 0.000972 - 44 0.00109 - 45 0.0288 - 46 0.00572 - 47 0.275 - - 0 8 5 0 - 2 0.125 - 13 0.375 - 14 0.25 - 15 0.125 - 37 0.125 - - 2 2293 7 5 - 9 0.000436 - 13 0.000436 - 41 0.00741 - 42 0.00174 - 45 0.044 - 46 0.000436 - 47 0.945 - - 55 1575 4 0 - 41 0.0019 - 45 0.047 - 46 0.000635 - 47 0.95 - - 57 241 3 0 - 42 0.0083 - 45 0.0124 - 47 0.979 - - 62 101 4 0 - 41 0.109 - 42 0.0099 - 45 0.0594 - 47 0.822 - - 66 1 1 0 - 41 1 - - 69 19 5 0 - 9 0.0526 - 13 0.0526 - 41 0.0526 - 45 0.105 - 47 0.737 - - 4 32 9 0 - 4 0.0312 - 8 0.0312 - 14 0.156 - 15 0.312 - 19 0.25 - 34 0.0625 - 35 0.0312 - 41 0.0938 - 42 0.0312 - - 7 39 2 0 - 45 0.0256 - 47 0.974 - - 12 4 3 0 - 14 0.25 - 19 0.5 - 37 0.25 - - 21 199 25 5 - 0 0.0101 - 2 0.0201 - 7 0.101 - 8 0.0201 - 12 0.0201 - 13 0.0704 - 14 0.0452 - 15 0.0201 - 19 0.0452 - 21 0.0151 - 23 0.00503 - 24 0.00503 - 25 0.00503 - 28 0.00503 - 29 0.106 - 31 0.0302 - 32 0.00503 - 33 0.00503 - 35 0.00503 - 37 0.00503 - 41 0.0704 - 42 0.0151 - 45 0.0251 - 46 0.0101 - 47 0.337 - - 41 7 2 0 - 45 0.143 - 47 0.857 - - 55 44 5 0 - 2 0.0682 - 37 0.0227 - 41 0.114 - 45 0.0455 - 47 0.75 - - 57 7 1 0 - 47 1 - - 64 5 1 0 - 47 1 - - 69 122 24 0 - 0 0.0164 - 2 0.0082 - 7 0.148 - 8 0.0328 - 12 0.0328 - 13 0.107 - 14 0.0738 - 15 0.0328 - 19 0.0738 - 21 0.0164 - 23 0.0082 - 24 0.0082 - 25 0.0082 - 28 0.0082 - 29 0.172 - 31 0.0492 - 32 0.0082 - 33 0.0082 - 35 0.0082 - 41 0.0656 - 42 0.0246 - 45 0.0164 - 46 0.0164 - 47 0.0574 - - 26 5 3 0 - 8 0.6 - 13 0.2 - 19 0.2 - - 40 10 6 0 - 8 0.1 - 13 0.4 - 14 0.2 - 19 0.1 - 21 0.1 - 27 0.1 - - 41 12917 37 14 - 0 0.00356 - 2 0.00434 - 3 0.0433 - 4 0.0079 - 5 0.000155 - 6 7.74e-05 - 7 0.00596 - 8 0.0321 - 9 0.00341 - 10 0.00147 - 11 0.000387 - 12 0.000774 - 13 0.376 - 14 0.157 - 15 0.124 - 16 0.00426 - 18 0.000387 - 19 0.0109 - 20 7.74e-05 - 21 0.16 - 22 0.00395 - 23 0.000232 - 24 0.00348 - 26 0.000155 - 27 0.00194 - 28 0.00898 - 29 0.00681 - 30 0.00457 - 31 0.0181 - 32 0.00341 - 33 0.00735 - 34 0.000542 - 35 0.000232 - 37 0.000387 - 42 0.000155 - 43 0.00333 - 46 0.000232 - - 2 15 7 0 - 8 0.133 - 13 0.267 - 14 0.133 - 15 0.267 - 18 0.0667 - 19 0.0667 - 27 0.0667 - - 21 6 3 0 - 13 0.667 - 19 0.167 - 28 0.167 - - 45 125 16 0 - 0 0.008 - 2 0.016 - 3 0.016 - 4 0.008 - 8 0.024 - 13 0.256 - 14 0.216 - 15 0.12 - 16 0.008 - 19 0.04 - 21 0.112 - 28 0.008 - 29 0.024 - 30 0.016 - 31 0.032 - 33 0.096 - - 46 950 26 0 - 0 0.0158 - 2 0.00105 - 3 0.0158 - 4 0.0179 - 7 0.00947 - 8 0.0884 - 9 0.00737 - 10 0.00105 - 12 0.00632 - 13 0.379 - 14 0.154 - 15 0.0674 - 16 0.00526 - 19 0.0442 - 21 0.0695 - 22 0.00105 - 24 0.0126 - 26 0.00105 - 28 0.0316 - 29 0.0147 - 30 0.00947 - 31 0.0337 - 32 0.00421 - 33 0.00632 - 42 0.00211 - 43 0.00105 - - 48 3 3 0 - 0 0.333 - 13 0.333 - 14 0.333 - - 49 375 22 0 - 2 0.016 - 3 0.032 - 4 0.008 - 7 0.0107 - 8 0.008 - 9 0.00267 - 10 0.00267 - 13 0.339 - 14 0.216 - 15 0.171 - 16 0.00533 - 18 0.00533 - 19 0.0347 - 21 0.112 - 24 0.008 - 27 0.00267 - 30 0.00267 - 31 0.00533 - 32 0.00533 - 33 0.00533 - 34 0.00267 - 43 0.00533 - - 55 9312 33 0 - 0 0.00268 - 2 0.00129 - 3 0.0493 - 4 0.00709 - 5 0.000215 - 7 0.00473 - 8 0.0306 - 9 0.00365 - 10 0.00183 - 11 0.000537 - 12 0.00043 - 13 0.39 - 14 0.156 - 15 0.113 - 16 0.00397 - 18 0.000107 - 19 0.00655 - 20 0.000107 - 21 0.165 - 22 0.00515 - 23 0.000322 - 24 0.00279 - 26 0.000107 - 27 0.00215 - 28 0.00805 - 29 0.00677 - 30 0.00451 - 31 0.0183 - 32 0.00333 - 33 0.00698 - 37 0.00043 - 43 0.00365 - 46 0.000322 - - 57 600 21 0 - 2 0.0383 - 3 0.035 - 4 0.01 - 7 0.0183 - 8 0.00167 - 13 0.258 - 14 0.132 - 15 0.275 - 16 0.00667 - 19 0.0117 - 21 0.182 - 22 0.00167 - 27 0.00167 - 29 0.00167 - 30 0.00167 - 31 0.00333 - 32 0.00333 - 34 0.00833 - 35 0.005 - 37 0.00167 - 43 0.00333 - - 58 38 9 0 - 2 0.0263 - 8 0.0263 - 9 0.0263 - 13 0.474 - 14 0.132 - 15 0.105 - 21 0.158 - 32 0.0263 - 33 0.0263 - - 62 430 21 0 - 0 0.00465 - 2 0.00233 - 3 0.0256 - 4 0.00233 - 7 0.0093 - 8 0.0209 - 9 0.00233 - 13 0.302 - 14 0.184 - 15 0.258 - 16 0.00233 - 19 0.0093 - 21 0.135 - 24 0.00698 - 28 0.00698 - 29 0.00698 - 30 0.00233 - 31 0.00465 - 32 0.00233 - 33 0.00698 - 43 0.00465 - - 64 201 16 0 - 0 0.00498 - 2 0.0448 - 3 0.0846 - 4 0.00498 - 7 0.0199 - 8 0.0149 - 13 0.269 - 14 0.114 - 15 0.124 - 16 0.0149 - 21 0.269 - 22 0.00498 - 28 0.00995 - 31 0.00995 - 33 0.00498 - 34 0.00498 - - 66 1 1 0 - 2 1 - - 69 839 21 0 - 0 0.00119 - 3 0.0262 - 4 0.00834 - 7 0.00119 - 8 0.0274 - 13 0.398 - 14 0.16 - 15 0.113 - 16 0.00238 - 18 0.00119 - 19 0.00715 - 21 0.205 - 24 0.00119 - 27 0.00238 - 28 0.00477 - 29 0.00358 - 30 0.00358 - 31 0.0238 - 32 0.00238 - 33 0.00477 - 43 0.00238 - - 74 11 7 0 - 6 0.0909 - 13 0.364 - 14 0.182 - 19 0.0909 - 29 0.0909 - 32 0.0909 - 33 0.0909 - - 42 133 20 7 - 3 0.00752 - 4 0.015 - 8 0.0602 - 11 0.0226 - 13 0.233 - 14 0.143 - 15 0.0677 - 19 0.0226 - 21 0.0226 - 24 0.00752 - 25 0.0301 - 28 0.00752 - 29 0.015 - 40 0.00752 - 41 0.015 - 42 0.00752 - 43 0.00752 - 45 0.00752 - 46 0.015 - 47 0.286 - - 45 19 6 0 - 13 0.0526 - 15 0.158 - 19 0.158 - 24 0.0526 - 29 0.0526 - 47 0.526 - - 49 4 4 0 - 8 0.25 - 14 0.25 - 15 0.25 - 28 0.25 - - 55 51 14 0 - 8 0.0392 - 11 0.0392 - 13 0.255 - 14 0.118 - 15 0.0588 - 21 0.0196 - 25 0.0196 - 29 0.0196 - 40 0.0196 - 41 0.0196 - 42 0.0196 - 43 0.0196 - 46 0.0392 - 47 0.314 - - 57 6 3 0 - 4 0.167 - 13 0.167 - 47 0.667 - - 62 17 6 0 - 13 0.353 - 14 0.176 - 15 0.0588 - 21 0.118 - 45 0.0588 - 47 0.235 - - 66 6 3 0 - 4 0.167 - 8 0.667 - 13 0.167 - - 69 22 8 0 - 3 0.0455 - 8 0.0455 - 11 0.0455 - 13 0.227 - 14 0.409 - 15 0.0455 - 25 0.136 - 41 0.0455 - - 43 32 6 0 - 11 0.0938 - 13 0.344 - 14 0.125 - 15 0.281 - 18 0.0312 - 19 0.125 - - 44 156 17 1 - 0 0.00641 - 2 0.0128 - 4 0.00641 - 7 0.0385 - 8 0.00641 - 13 0.0128 - 14 0.0128 - 21 0.0192 - 28 0.0256 - 29 0.00641 - 32 0.00641 - 33 0.00641 - 35 0.00641 - 41 0.0192 - 45 0.0128 - 46 0.00641 - 47 0.795 - - 57 22 1 0 - 47 1 - - 45 2718 26 8 - 0 0.0011 - 2 0.00478 - 3 0.00258 - 4 0.0011 - 7 0.0118 - 8 0.000736 - 13 0.0545 - 14 0.0309 - 15 0.0213 - 16 0.000736 - 18 0.000736 - 19 0.0169 - 21 0.00331 - 28 0.00184 - 29 0.00258 - 31 0.0118 - 32 0.000736 - 33 0.00736 - 37 0.000368 - 40 0.000368 - 41 0.0982 - 42 0.0232 - 44 0.00221 - 45 0.000736 - 46 0.000736 - 47 0.699 - - 2 87 1 0 - 47 1 - - 48 56 9 0 - 2 0.0179 - 4 0.0179 - 13 0.5 - 14 0.25 - 15 0.0179 - 19 0.125 - 31 0.0357 - 33 0.0179 - 42 0.0179 - - 49 64 7 0 - 13 0.0625 - 14 0.0312 - 15 0.0312 - 19 0.0156 - 41 0.0781 - 42 0.0625 - 47 0.719 - - 55 1037 20 0 - 0 0.00193 - 2 0.00964 - 7 0.0251 - 13 0.0135 - 14 0.000964 - 15 0.00193 - 19 0.0116 - 21 0.00482 - 28 0.00386 - 29 0.00482 - 31 0.026 - 32 0.00193 - 33 0.0145 - 37 0.000964 - 40 0.000964 - 41 0.165 - 42 0.0328 - 44 0.00482 - 46 0.00193 - 47 0.673 - - 57 75 6 0 - 2 0.0133 - 7 0.04 - 31 0.0133 - 41 0.0533 - 42 0.0133 - 47 0.867 - - 62 945 9 0 - 7 0.00317 - 29 0.00106 - 31 0.00106 - 33 0.00106 - 41 0.0254 - 42 0.0159 - 44 0.00106 - 45 0.00212 - 47 0.949 - - 64 96 4 0 - 2 0.0104 - 41 0.104 - 42 0.0417 - 47 0.844 - - 69 334 18 0 - 0 0.00299 - 3 0.021 - 4 0.00599 - 8 0.00599 - 13 0.305 - 14 0.198 - 15 0.159 - 16 0.00599 - 18 0.00599 - 19 0.0778 - 21 0.012 - 28 0.00299 - 29 0.00299 - 31 0.00299 - 33 0.00898 - 41 0.15 - 42 0.00599 - 47 0.0269 - - 46 1060 13 6 - 3 0.000943 - 8 0.00283 - 13 0.0236 - 14 0.0123 - 15 0.0236 - 16 0.00189 - 19 0.000943 - 21 0.000943 - 30 0.000943 - 40 0.0151 - 41 0.899 - 46 0.00472 - 47 0.0132 - - 49 3 3 0 - 13 0.333 - 15 0.333 - 47 0.333 - - 55 921 6 0 - 13 0.00217 - 14 0.00217 - 40 0.0163 - 41 0.967 - 46 0.00434 - 47 0.0076 - - 57 3 2 0 - 41 0.333 - 47 0.667 - - 62 10 2 0 - 41 0.7 - 47 0.3 - - 64 3 2 0 - 8 0.667 - 41 0.333 - - 69 99 12 0 - 3 0.0101 - 8 0.0101 - 13 0.222 - 14 0.111 - 15 0.242 - 16 0.0202 - 19 0.0101 - 21 0.0101 - 30 0.0101 - 40 0.0101 - 41 0.333 - 46 0.0101 - - 47 95402 42 25 - 0 0.00867 - 1 0.000325 - 2 0.0289 - 3 0.0027 - 4 0.00311 - 6 1.05e-05 - 7 0.141 - 8 0.0136 - 9 0.00066 - 10 0.000136 - 12 0.000419 - 13 0.0355 - 14 0.0168 - 15 0.00423 - 16 0.000199 - 17 2.1e-05 - 18 3.14e-05 - 19 0.00112 - 21 0.00595 - 22 0.00022 - 23 2.1e-05 - 24 0.00122 - 25 1.05e-05 - 26 0.00167 - 28 0.0194 - 29 0.0534 - 30 0.0131 - 31 0.0233 - 32 0.016 - 33 0.0203 - 34 0.0436 - 35 0.023 - 36 1.05e-05 - 37 0.0196 - 40 2.1e-05 - 41 0.0307 - 42 0.0112 - 43 0.000199 - 44 0.00087 - 45 0.0302 - 46 0.00213 - 47 0.426 - - 2 2188 5 0 - 41 0.000457 - 42 0.00183 - 45 0.0064 - 46 0.000457 - 47 0.991 - - 4 5 4 0 - 8 0.2 - 34 0.4 - 35 0.2 - 41 0.2 - - 7 38 1 0 - 47 1 - - 21 173 25 0 - 0 0.0116 - 2 0.00578 - 7 0.116 - 8 0.0231 - 12 0.0173 - 13 0.0636 - 14 0.0405 - 15 0.0173 - 19 0.0289 - 21 0.00578 - 23 0.00578 - 24 0.00578 - 25 0.00578 - 28 0.00578 - 29 0.121 - 31 0.0347 - 32 0.00578 - 33 0.00578 - 35 0.00578 - 37 0.00578 - 41 0.0462 - 42 0.0173 - 45 0.00578 - 46 0.0116 - 47 0.387 - - 26 5 3 0 - 8 0.6 - 13 0.2 - 19 0.2 - - 41 29 9 0 - 2 0.069 - 4 0.0345 - 7 0.379 - 15 0.0345 - 21 0.0345 - 31 0.069 - 34 0.241 - 35 0.103 - 37 0.0345 - - 42 40 3 0 - 4 0.025 - 45 0.025 - 47 0.95 - - 44 146 14 0 - 0 0.00685 - 2 0.0137 - 4 0.00685 - 7 0.0411 - 8 0.00685 - 14 0.00685 - 21 0.00685 - 28 0.0274 - 29 0.00685 - 32 0.00685 - 33 0.00685 - 35 0.00685 - 45 0.00685 - 47 0.849 - - 45 2081 17 0 - 0 0.00144 - 2 0.000481 - 7 0.0154 - 13 0.000961 - 14 0.000481 - 21 0.000481 - 28 0.0024 - 29 0.00288 - 31 0.0149 - 32 0.000961 - 33 0.00865 - 37 0.000481 - 41 0.0139 - 42 0.0207 - 44 0.00192 - 45 0.000481 - 47 0.914 - - 46 14 1 0 - 47 1 - - 48 401 21 0 - 0 0.00249 - 2 0.0125 - 7 0.0499 - 13 0.0125 - 14 0.00249 - 15 0.00748 - 16 0.00249 - 21 0.00748 - 24 0.00499 - 28 0.0698 - 29 0.122 - 30 0.0374 - 31 0.387 - 32 0.0249 - 33 0.0249 - 34 0.00249 - 37 0.00249 - 41 0.0823 - 42 0.00249 - 45 0.00998 - 47 0.132 - - 49 2499 23 0 - 0 0.0016 - 2 0.0272 - 7 0.0344 - 8 0.0004 - 12 0.0004 - 13 0.0068 - 14 0.0024 - 15 0.0016 - 21 0.006 - 24 0.0008 - 28 0.0012 - 29 0.0012 - 30 0.0012 - 31 0.0016 - 32 0.002 - 33 0.0016 - 34 0.0656 - 35 0.0324 - 37 0.0012 - 41 0.0312 - 42 0.0156 - 45 0.0228 - 47 0.741 - - 50 6 1 0 - 47 1 - - 51 15 6 0 - 2 0.0667 - 7 0.0667 - 32 0.0667 - 33 0.0667 - 45 0.2 - 47 0.533 - - 52 43 8 0 - 2 0.0233 - 28 0.0233 - 41 0.0233 - 42 0.0233 - 44 0.0233 - 45 0.209 - 46 0.0233 - 47 0.651 - - 53 30 4 0 - 2 0.0333 - 7 0.0333 - 42 0.1 - 47 0.833 - - 55 52582 38 0 - 0 0.00203 - 1 0.000342 - 2 0.0449 - 3 0.00038 - 4 0.00443 - 7 0.183 - 8 0.00304 - 9 0.000133 - 10 0.000133 - 12 1.9e-05 - 13 0.0151 - 14 0.00688 - 15 0.000856 - 16 3.8e-05 - 17 3.8e-05 - 18 1.9e-05 - 19 0.000513 - 21 0.00382 - 22 0.000114 - 24 0.000114 - 26 0.000228 - 28 0.0187 - 29 0.071 - 30 0.00837 - 31 0.0106 - 32 0.018 - 33 0.0195 - 34 0.0097 - 35 0.00778 - 36 1.9e-05 - 37 0.0328 - 41 0.0205 - 42 0.0131 - 43 0.000114 - 44 0.00103 - 45 0.0401 - 46 0.00202 - 47 0.461 - - 57 4707 21 0 - 2 0.0191 - 4 0.00085 - 7 0.0416 - 8 0.000212 - 13 0.000637 - 14 0.000212 - 21 0.00085 - 28 0.000637 - 29 0.000212 - 31 0.00106 - 32 0.000212 - 33 0.000425 - 34 0.00722 - 35 0.00297 - 37 0.00149 - 40 0.000212 - 41 0.0161 - 42 0.0117 - 44 0.00085 - 45 0.021 - 47 0.872 - - 58 17 7 0 - 4 0.0588 - 7 0.294 - 34 0.235 - 35 0.118 - 37 0.118 - 42 0.0588 - 47 0.118 - - 62 4872 24 0 - 0 0.00144 - 2 0.00944 - 4 0.00123 - 7 0.0515 - 8 0.000205 - 13 0.00205 - 14 0.000411 - 15 0.000205 - 19 0.000205 - 21 0.00164 - 28 0.00164 - 29 0.0133 - 30 0.00144 - 31 0.00103 - 32 0.00226 - 33 0.00431 - 34 0.00554 - 35 0.00144 - 37 0.00513 - 41 0.00513 - 42 0.016 - 44 0.000821 - 45 0.0525 - 47 0.821 - - 64 1775 16 0 - 0 0.00113 - 2 0.0293 - 4 0.00169 - 7 0.0958 - 21 0.00225 - 29 0.00451 - 30 0.000563 - 32 0.00282 - 33 0.00169 - 34 0.000563 - 35 0.000563 - 37 0.00113 - 41 0.0169 - 42 0.0135 - 45 0.093 - 47 0.735 - - 66 16 3 0 - 2 0.0625 - 42 0.0625 - 47 0.875 - - 68 15 7 0 - 7 0.0667 - 13 0.0667 - 28 0.0667 - 31 0.0667 - 42 0.0667 - 45 0.0667 - 47 0.6 - - 69 23688 39 0 - 0 0.0296 - 1 0.000549 - 2 0.0054 - 3 0.01 - 4 0.00198 - 6 4.22e-05 - 7 0.13 - 8 0.0475 - 9 0.00236 - 10 0.000253 - 12 0.00148 - 13 0.107 - 14 0.0514 - 15 0.0146 - 16 0.000675 - 18 8.44e-05 - 19 0.00308 - 21 0.0139 - 22 0.000633 - 23 4.22e-05 - 24 0.00443 - 26 0.00621 - 28 0.0343 - 29 0.0511 - 30 0.0331 - 31 0.0616 - 32 0.0226 - 33 0.0358 - 34 0.144 - 35 0.0708 - 37 0.00414 - 40 4.22e-05 - 41 0.0661 - 42 0.00515 - 43 0.000549 - 44 0.000675 - 45 0.0068 - 46 0.00393 - 47 0.0277 - - 74 7 5 0 - 2 0.286 - 41 0.143 - 42 0.143 - 45 0.143 - 47 0.286 - - 48 954 28 7 - 0 0.00105 - 2 0.00629 - 3 0.00314 - 4 0.00524 - 7 0.021 - 8 0.00314 - 13 0.155 - 14 0.142 - 15 0.0304 - 16 0.00314 - 18 0.00105 - 19 0.169 - 21 0.0136 - 22 0.00105 - 24 0.0021 - 28 0.0294 - 29 0.0514 - 30 0.0157 - 31 0.162 - 32 0.0105 - 33 0.0115 - 34 0.00105 - 37 0.00105 - 41 0.0388 - 42 0.0021 - 45 0.0629 - 46 0.00105 - 47 0.0556 - - 41 16 6 0 - 2 0.125 - 21 0.0625 - 41 0.0625 - 42 0.0625 - 45 0.125 - 47 0.562 - - 47 806 26 0 - 0 0.00124 - 2 0.00372 - 3 0.00372 - 4 0.0062 - 7 0.0223 - 8 0.00372 - 13 0.176 - 14 0.164 - 15 0.036 - 16 0.00372 - 19 0.102 - 21 0.0149 - 22 0.00124 - 24 0.00248 - 28 0.0211 - 29 0.0521 - 30 0.0136 - 31 0.185 - 32 0.0124 - 33 0.00993 - 37 0.00124 - 41 0.0397 - 42 0.00124 - 45 0.0682 - 46 0.00124 - 47 0.0533 - - 49 5 4 0 - 2 0.2 - 13 0.4 - 14 0.2 - 18 0.2 - - 55 19 8 0 - 13 0.0526 - 28 0.211 - 29 0.263 - 30 0.105 - 31 0.158 - 33 0.0526 - 41 0.105 - 47 0.0526 - - 62 36 5 0 - 7 0.0278 - 13 0.0278 - 14 0.0278 - 19 0.889 - 45 0.0278 - - 64 63 9 0 - 13 0.0317 - 14 0.0159 - 19 0.683 - 28 0.111 - 29 0.0317 - 30 0.0317 - 31 0.0476 - 33 0.0317 - 41 0.0159 - - 69 2 2 0 - 34 0.5 - 41 0.5 - - 49 6007 36 13 - 0 0.00117 - 2 0.0255 - 3 0.00117 - 4 0.00383 - 5 0.00333 - 7 0.0146 - 8 0.00133 - 9 0.000333 - 10 0.000166 - 12 0.000166 - 13 0.122 - 14 0.107 - 15 0.101 - 16 0.00449 - 18 0.00117 - 19 0.108 - 21 0.0103 - 23 0.000166 - 24 0.000333 - 28 0.000499 - 29 0.000666 - 30 0.000832 - 31 0.000832 - 32 0.000999 - 33 0.000999 - 34 0.0276 - 35 0.0135 - 37 0.000499 - 40 0.000333 - 41 0.106 - 42 0.00916 - 43 0.000832 - 44 0.000666 - 45 0.0201 - 46 0.0025 - 47 0.308 - - 41 1889 16 0 - 2 0.0238 - 4 0.000529 - 7 0.00106 - 13 0.00318 - 14 0.00159 - 15 0.00106 - 19 0.000529 - 21 0.00424 - 32 0.000529 - 40 0.00106 - 41 0.157 - 42 0.00794 - 44 0.00159 - 45 0.0312 - 46 0.000529 - 47 0.764 - - 44 2 2 0 - 2 0.5 - 45 0.5 - - 45 7 4 0 - 7 0.143 - 14 0.286 - 15 0.286 - 47 0.286 - - 47 59 15 0 - 4 0.0169 - 8 0.0339 - 13 0.237 - 14 0.22 - 15 0.102 - 19 0.0169 - 21 0.0339 - 28 0.0169 - 29 0.0339 - 30 0.0339 - 31 0.0339 - 32 0.0169 - 33 0.0169 - 41 0.119 - 47 0.0678 - - 48 9 4 0 - 14 0.111 - 21 0.111 - 41 0.222 - 47 0.556 - - 49 30 9 0 - 2 0.0333 - 7 0.0333 - 13 0.0667 - 14 0.133 - 15 0.2 - 19 0.233 - 41 0.1 - 42 0.0333 - 47 0.167 - - 55 493 13 0 - 2 0.178 - 7 0.0365 - 9 0.00203 - 13 0.00203 - 14 0.00609 - 21 0.0183 - 32 0.00203 - 34 0.00203 - 37 0.00406 - 41 0.0953 - 42 0.0325 - 45 0.069 - 47 0.552 - - 57 31 7 0 - 2 0.161 - 14 0.0323 - 41 0.0645 - 42 0.0323 - 44 0.0323 - 45 0.0645 - 47 0.613 - - 58 78 5 0 - 2 0.0641 - 41 0.0128 - 42 0.0256 - 45 0.0641 - 47 0.833 - - 62 11 4 0 - 2 0.182 - 42 0.0909 - 45 0.182 - 47 0.545 - - 64 6 3 0 - 2 0.167 - 45 0.5 - 47 0.333 - - 66 3 2 0 - 21 0.667 - 47 0.333 - - 69 3383 34 0 - 0 0.00207 - 2 0.00118 - 3 0.00207 - 4 0.00621 - 5 0.00591 - 7 0.0195 - 8 0.00177 - 9 0.000296 - 10 0.000296 - 12 0.000296 - 13 0.21 - 14 0.181 - 15 0.175 - 16 0.00798 - 18 0.00207 - 19 0.189 - 21 0.0118 - 23 0.000296 - 24 0.000591 - 28 0.000591 - 29 0.000591 - 30 0.000887 - 31 0.000887 - 32 0.000887 - 33 0.00148 - 34 0.0488 - 35 0.0239 - 37 0.000296 - 41 0.0822 - 42 0.00562 - 43 0.00148 - 45 0.00414 - 46 0.00414 - 47 0.00739 - - 50 8 3 0 - 14 0.125 - 19 0.125 - 47 0.75 - - 51 20 7 0 - 2 0.05 - 7 0.05 - 32 0.05 - 33 0.05 - 41 0.05 - 45 0.35 - 47 0.4 - - 52 51 9 1 - 2 0.0196 - 27 0.0196 - 28 0.0196 - 41 0.098 - 42 0.0196 - 44 0.0196 - 45 0.235 - 46 0.0196 - 47 0.549 - - 55 4 3 0 - 28 0.25 - 45 0.5 - 46 0.25 - - 53 30 4 0 - 2 0.0333 - 7 0.0333 - 42 0.1 - 47 0.833 - - 55 67719 43 18 - 0 0.00162 - 1 0.000266 - 2 0.0581 - 3 0.000753 - 4 0.0036 - 5 1.48e-05 - 7 0.143 - 8 0.00282 - 9 0.000266 - 10 0.00034 - 12 2.95e-05 - 13 0.019 - 14 0.00755 - 15 0.00347 - 16 8.86e-05 - 17 2.95e-05 - 18 4.43e-05 - 19 0.00157 - 21 0.0104 - 22 0.000192 - 23 1.48e-05 - 24 8.86e-05 - 25 1.48e-05 - 26 0.000177 - 27 1.48e-05 - 28 0.0146 - 29 0.0552 - 30 0.00653 - 31 0.00828 - 32 0.0141 - 33 0.0153 - 34 0.00755 - 35 0.00604 - 36 1.48e-05 - 37 0.0255 - 40 4.43e-05 - 41 0.159 - 42 0.0118 - 43 0.000295 - 44 0.00233 - 45 0.0466 - 46 0.0162 - 47 0.358 - - 4 27 11 0 - 7 0.037 - 8 0.037 - 13 0.037 - 14 0.037 - 28 0.037 - 29 0.0741 - 32 0.037 - 41 0.0741 - 45 0.037 - 46 0.037 - 47 0.556 - - 12 3 3 0 - 2 0.333 - 33 0.333 - 42 0.333 - - 21 9 5 0 - 7 0.111 - 13 0.111 - 28 0.333 - 29 0.222 - 31 0.222 - - 41 1402 27 0 - 0 0.000713 - 2 0.0464 - 4 0.000713 - 7 0.0464 - 8 0.000713 - 10 0.000713 - 13 0.0728 - 14 0.00499 - 15 0.0278 - 19 0.000713 - 21 0.0107 - 27 0.000713 - 28 0.000713 - 29 0.0157 - 30 0.000713 - 31 0.00143 - 32 0.00713 - 33 0.00214 - 34 0.00214 - 37 0.00285 - 41 0.0449 - 42 0.0157 - 43 0.000713 - 44 0.00357 - 45 0.0271 - 46 0.00143 - 47 0.66 - - 42 27 7 0 - 2 0.111 - 7 0.148 - 21 0.037 - 29 0.0741 - 41 0.111 - 45 0.185 - 47 0.333 - - 43 29 2 0 - 7 0.069 - 44 0.931 - - 45 366 17 0 - 2 0.0273 - 7 0.167 - 13 0.0109 - 14 0.00273 - 21 0.00273 - 22 0.00273 - 28 0.0328 - 29 0.29 - 30 0.0355 - 31 0.0082 - 32 0.0109 - 33 0.082 - 34 0.00273 - 37 0.00273 - 41 0.0765 - 42 0.00273 - 47 0.243 - - 46 63 7 0 - 2 0.0159 - 7 0.0159 - 28 0.0317 - 29 0.0159 - 34 0.0159 - 41 0.0159 - 45 0.889 - - 47 833 26 0 - 0 0.0072 - 2 0.0336 - 3 0.0012 - 4 0.0096 - 7 0.0204 - 8 0.0192 - 9 0.0012 - 13 0.0636 - 14 0.0156 - 15 0.048 - 16 0.0012 - 18 0.0024 - 19 0.0876 - 21 0.0168 - 28 0.0396 - 29 0.0564 - 30 0.0072 - 31 0.376 - 32 0.0072 - 33 0.0264 - 34 0.0048 - 41 0.0264 - 42 0.0108 - 43 0.0024 - 45 0.0888 - 47 0.0264 - - 48 482 15 0 - 0 0.00622 - 2 0.027 - 7 0.0373 - 14 0.00207 - 28 0.344 - 29 0.0996 - 30 0.168 - 31 0.0705 - 32 0.0975 - 33 0.104 - 41 0.0228 - 42 0.00415 - 44 0.00415 - 45 0.00207 - 47 0.0104 - - 49 2900 25 0 - 0 0.00069 - 2 0.0714 - 3 0.000345 - 4 0.00103 - 7 0.108 - 8 0.00069 - 13 0.0121 - 14 0.00448 - 15 0.000345 - 21 0.0031 - 28 0.00586 - 29 0.0366 - 30 0.00138 - 31 0.00276 - 32 0.00931 - 33 0.00931 - 34 0.00586 - 35 0.00655 - 37 0.0169 - 41 0.128 - 42 0.0134 - 44 0.0031 - 45 0.0345 - 46 0.0031 - 47 0.521 - - 55 480 19 0 - 2 0.0854 - 4 0.00417 - 7 0.0437 - 13 0.0104 - 15 0.00208 - 21 0.00833 - 28 0.0896 - 29 0.0854 - 30 0.0479 - 31 0.0146 - 32 0.05 - 33 0.0646 - 35 0.00208 - 37 0.0125 - 41 0.102 - 42 0.0333 - 45 0.0167 - 46 0.00208 - 47 0.325 - - 57 150 18 0 - 0 0.0133 - 1 0.00667 - 2 0.0467 - 4 0.00667 - 7 0.06 - 13 0.0467 - 14 0.02 - 29 0.0333 - 30 0.0133 - 32 0.0267 - 33 0.00667 - 34 0.00667 - 37 0.02 - 41 0.187 - 42 0.0133 - 44 0.02 - 45 0.0267 - 47 0.447 - - 58 218 11 0 - 2 0.0505 - 7 0.0275 - 14 0.00459 - 21 0.00459 - 28 0.00459 - 34 0.00459 - 35 0.00459 - 41 0.0367 - 42 0.0183 - 45 0.0826 - 47 0.761 - - 62 10 5 0 - 2 0.1 - 14 0.1 - 19 0.2 - 37 0.1 - 47 0.5 - - 64 14 5 0 - 2 0.143 - 19 0.0714 - 32 0.0714 - 45 0.0714 - 47 0.643 - - 68 3 3 0 - 30 0.333 - 31 0.333 - 32 0.333 - - 69 60692 42 0 - 0 0.00158 - 1 0.00028 - 2 0.0584 - 3 0.000807 - 4 0.00377 - 5 1.65e-05 - 7 0.151 - 8 0.00282 - 9 0.00028 - 10 0.000362 - 12 3.3e-05 - 13 0.0177 - 14 0.00774 - 15 0.00254 - 16 8.24e-05 - 17 3.3e-05 - 18 1.65e-05 - 19 0.000478 - 21 0.0109 - 22 0.000198 - 23 1.65e-05 - 24 9.89e-05 - 25 1.65e-05 - 26 0.000198 - 28 0.0117 - 29 0.0552 - 30 0.00512 - 31 0.00315 - 32 0.0136 - 33 0.0144 - 34 0.00796 - 35 0.00639 - 36 1.65e-05 - 37 0.0274 - 40 4.94e-05 - 41 0.167 - 42 0.0115 - 43 0.00028 - 44 0.00185 - 45 0.047 - 46 0.0179 - 47 0.35 - - 57 5900 27 12 - 2 0.0561 - 3 0.000339 - 4 0.00102 - 7 0.0334 - 8 0.000508 - 9 0.000169 - 13 0.0149 - 14 0.00797 - 15 0.00831 - 16 0.000169 - 19 0.000339 - 21 0.00746 - 28 0.000508 - 29 0.000169 - 31 0.000847 - 32 0.000169 - 33 0.000339 - 34 0.00576 - 35 0.00237 - 37 0.00119 - 40 0.000678 - 41 0.117 - 42 0.0103 - 44 0.00441 - 45 0.0295 - 46 0.000508 - 47 0.696 - - 41 4850 19 0 - 2 0.0485 - 3 0.000206 - 4 0.000412 - 7 0.0221 - 13 0.00536 - 14 0.00103 - 15 0.00227 - 21 0.00515 - 28 0.000206 - 29 0.000206 - 34 0.000206 - 37 0.000412 - 40 0.000619 - 41 0.132 - 42 0.00928 - 44 0.00536 - 45 0.0262 - 46 0.000412 - 47 0.74 - - 42 18 3 0 - 42 0.111 - 45 0.0556 - 47 0.833 - - 44 2 1 0 - 45 1 - - 46 2 1 0 - 45 1 - - 47 28 11 0 - 7 0.107 - 8 0.0357 - 13 0.107 - 14 0.0357 - 31 0.179 - 32 0.0357 - 37 0.0357 - 41 0.0714 - 42 0.0357 - 45 0.0714 - 47 0.286 - - 49 12 5 0 - 2 0.167 - 13 0.167 - 35 0.0833 - 41 0.0833 - 47 0.5 - - 55 612 13 0 - 2 0.126 - 4 0.00327 - 7 0.127 - 13 0.031 - 21 0.0261 - 28 0.00327 - 33 0.00163 - 37 0.00654 - 40 0.00163 - 41 0.0392 - 42 0.018 - 45 0.049 - 47 0.567 - - 57 50 8 0 - 2 0.02 - 7 0.02 - 14 0.02 - 15 0.02 - 41 0.08 - 42 0.02 - 45 0.02 - 47 0.8 - - 58 106 7 0 - 2 0.0755 - 13 0.00943 - 41 0.00943 - 42 0.00943 - 45 0.066 - 46 0.00943 - 47 0.821 - - 62 14 4 0 - 2 0.286 - 9 0.0714 - 21 0.0714 - 47 0.571 - - 64 6 4 0 - 8 0.167 - 19 0.167 - 45 0.167 - 47 0.5 - - 69 196 17 0 - 2 0.0153 - 3 0.0051 - 4 0.0102 - 7 0.0408 - 8 0.0051 - 13 0.189 - 14 0.204 - 15 0.189 - 16 0.0051 - 19 0.0051 - 21 0.0102 - 33 0.0051 - 34 0.168 - 35 0.0663 - 41 0.0714 - 45 0.0051 - 47 0.0051 - - 58 579 32 8 - 0 0.00173 - 2 0.0311 - 3 0.00864 - 4 0.0155 - 7 0.0138 - 8 0.019 - 9 0.00345 - 10 0.00173 - 11 0.00173 - 13 0.337 - 14 0.162 - 15 0.0725 - 16 0.00345 - 18 0.00345 - 19 0.0104 - 21 0.154 - 22 0.00518 - 23 0.00173 - 24 0.00173 - 28 0.00345 - 29 0.00345 - 30 0.00345 - 31 0.0173 - 32 0.00345 - 33 0.00864 - 34 0.00691 - 35 0.00345 - 37 0.00345 - 41 0.0691 - 42 0.00173 - 46 0.0242 - 47 0.00345 - - 41 32 9 0 - 2 0.0312 - 3 0.0312 - 13 0.25 - 14 0.0312 - 21 0.0625 - 32 0.0312 - 41 0.156 - 46 0.375 - 47 0.0312 - - 42 3 3 0 - 21 0.333 - 41 0.333 - 47 0.333 - - 45 95 13 0 - 2 0.0421 - 4 0.0316 - 7 0.0211 - 8 0.0211 - 13 0.368 - 14 0.158 - 15 0.0526 - 19 0.0105 - 21 0.168 - 31 0.0316 - 33 0.0105 - 37 0.0105 - 41 0.0737 - - 55 212 26 0 - 0 0.00472 - 2 0.0425 - 3 0.0142 - 4 0.00943 - 7 0.00943 - 8 0.0236 - 9 0.00472 - 10 0.00472 - 11 0.00472 - 13 0.259 - 14 0.118 - 15 0.0283 - 19 0.0142 - 21 0.278 - 22 0.00943 - 23 0.00472 - 24 0.00472 - 28 0.00472 - 29 0.00943 - 30 0.00472 - 31 0.0236 - 32 0.00472 - 33 0.0189 - 37 0.00472 - 41 0.0849 - 46 0.00943 - - 57 3 3 0 - 2 0.333 - 21 0.333 - 42 0.333 - - 62 13 9 0 - 3 0.0769 - 7 0.0769 - 8 0.0769 - 9 0.0769 - 13 0.308 - 14 0.0769 - 21 0.154 - 31 0.0769 - 41 0.0769 - - 64 6 3 0 - 2 0.5 - 13 0.167 - 21 0.333 - - 69 207 17 0 - 4 0.0193 - 7 0.0145 - 8 0.0145 - 13 0.435 - 14 0.237 - 15 0.14 - 16 0.00966 - 18 0.00966 - 19 0.00966 - 21 0.029 - 22 0.00483 - 28 0.00483 - 30 0.00483 - 31 0.00483 - 34 0.0193 - 35 0.00966 - 41 0.0338 - - 62 6481 29 9 - 0 0.00108 - 2 0.0227 - 4 0.000926 - 7 0.0389 - 8 0.00463 - 9 0.00108 - 13 0.00339 - 14 0.000463 - 15 0.000309 - 19 0.000309 - 21 0.00355 - 22 0.000154 - 28 0.00123 - 29 0.01 - 30 0.00108 - 31 0.000771 - 32 0.0017 - 33 0.00324 - 34 0.00417 - 35 0.00108 - 37 0.00386 - 40 0.000154 - 41 0.0728 - 42 0.0151 - 43 0.000154 - 44 0.00278 - 45 0.186 - 46 0.00154 - 47 0.617 - - 41 2566 9 0 - 2 0.00857 - 7 0.000779 - 21 0.000779 - 41 0.0744 - 42 0.00468 - 44 0.00039 - 45 0.295 - 46 0.00234 - 47 0.613 - - 42 4 2 0 - 42 0.75 - 45 0.25 - - 45 3 1 0 - 7 1 - - 46 10 1 0 - 45 1 - - 47 3515 29 0 - 0 0.00199 - 2 0.0259 - 4 0.00171 - 7 0.0512 - 8 0.00853 - 9 0.00199 - 13 0.00597 - 14 0.000853 - 15 0.000569 - 19 0.000569 - 21 0.00455 - 22 0.000284 - 28 0.00228 - 29 0.0182 - 30 0.00199 - 31 0.00142 - 32 0.00199 - 33 0.00569 - 34 0.00768 - 35 0.00199 - 37 0.00683 - 40 0.000284 - 41 0.0688 - 42 0.0216 - 43 0.000284 - 44 0.00427 - 45 0.118 - 46 0.00114 - 47 0.634 - - 49 6 4 0 - 2 0.167 - 7 0.333 - 41 0.333 - 47 0.167 - - 55 102 6 0 - 2 0.049 - 13 0.0098 - 41 0.0098 - 42 0.0196 - 45 0.0098 - 47 0.902 - - 58 17 3 0 - 2 0.118 - 45 0.0588 - 47 0.824 - - 69 256 12 0 - 2 0.102 - 7 0.254 - 21 0.0195 - 29 0.00391 - 32 0.0156 - 33 0.00391 - 37 0.00391 - 41 0.141 - 42 0.0195 - 44 0.00781 - 45 0.0664 - 47 0.363 - - 64 2370 27 7 - 0 0.000844 - 2 0.0992 - 4 0.00127 - 7 0.0726 - 8 0.0207 - 9 0.00127 - 10 0.000422 - 13 0.00464 - 14 0.00338 - 19 0.000422 - 21 0.00759 - 22 0.00169 - 29 0.00338 - 30 0.000422 - 32 0.00211 - 33 0.00127 - 34 0.000422 - 35 0.000422 - 37 0.000844 - 40 0.000844 - 41 0.101 - 42 0.0122 - 43 0.000422 - 44 0.00127 - 45 0.11 - 46 0.00127 - 47 0.55 - - 41 1979 21 0 - 0 0.000505 - 2 0.099 - 4 0.00152 - 7 0.0753 - 10 0.000505 - 13 0.00152 - 14 0.000505 - 21 0.00707 - 29 0.00303 - 32 0.00202 - 33 0.00101 - 35 0.000505 - 37 0.000505 - 40 0.000505 - 41 0.111 - 42 0.0116 - 43 0.000505 - 44 0.00152 - 45 0.106 - 46 0.000505 - 47 0.576 - - 47 74 10 0 - 8 0.662 - 9 0.0405 - 13 0.0811 - 14 0.0541 - 19 0.0135 - 21 0.0405 - 22 0.0541 - 41 0.0135 - 46 0.027 - 47 0.0135 - - 49 6 4 0 - 32 0.167 - 41 0.333 - 45 0.333 - 47 0.167 - - 55 100 11 0 - 2 0.12 - 7 0.13 - 13 0.01 - 14 0.01 - 21 0.01 - 29 0.02 - 40 0.01 - 41 0.11 - 42 0.03 - 45 0.08 - 47 0.47 - - 58 68 6 0 - 2 0.132 - 7 0.0147 - 41 0.0441 - 42 0.0147 - 45 0.118 - 47 0.676 - - 62 3 2 0 - 2 0.333 - 45 0.667 - - 69 121 13 0 - 0 0.00826 - 2 0.116 - 7 0.0496 - 13 0.00826 - 14 0.0165 - 30 0.00826 - 33 0.00826 - 34 0.00826 - 37 0.00826 - 41 0.00826 - 42 0.00826 - 45 0.231 - 47 0.521 - - 65 8 2 0 - 45 0.5 - 47 0.5 - - 66 35 6 1 - 2 0.0571 - 21 0.286 - 41 0.0286 - 42 0.2 - 44 0.0286 - 47 0.4 - - 47 3 2 0 - 2 0.667 - 42 0.333 - - 67 6 2 0 - 45 0.667 - 47 0.333 - - 68 21 11 0 - 7 0.0476 - 13 0.0476 - 14 0.0476 - 19 0.0952 - 21 0.0476 - 28 0.0476 - 31 0.0476 - 41 0.0476 - 42 0.0476 - 45 0.0952 - 47 0.429 - - 69 90079 42 2 - 0 0.00829 - 1 0.000155 - 2 0.00168 - 3 0.00775 - 4 0.0133 - 5 0.00924 - 6 0.000144 - 7 0.0348 - 8 0.0152 - 9 0.000844 - 10 0.000544 - 12 0.000444 - 13 0.201 - 14 0.151 - 15 0.13 - 16 0.00602 - 18 0.0014 - 19 0.154 - 20 0.000144 - 21 0.0443 - 22 0.000366 - 23 5.55e-05 - 24 0.00124 - 26 0.00173 - 27 2.22e-05 - 28 0.00959 - 29 0.0139 - 30 0.00948 - 31 0.0174 - 32 0.00625 - 33 0.00968 - 34 0.0385 - 35 0.0187 - 37 0.00109 - 40 9.99e-05 - 41 0.0694 - 42 0.00417 - 43 0.00219 - 44 0.000244 - 45 0.00562 - 46 0.0036 - 47 0.00728 - - 41 4 2 0 - 13 0.75 - 15 0.25 - - 69 6 5 0 - 13 0.167 - 14 0.333 - 34 0.167 - 41 0.167 - 46 0.167 - - 74 22 8 0 - 2 0.0909 - 5 0.0455 - 13 0.0455 - 18 0.0455 - 41 0.545 - 42 0.0455 - 45 0.0909 - 47 0.0909 - -63 79666 1 0 - 47 1 - -64 56433 41 26 - 0 0.0151 - 1 3.54e-05 - 2 0.021 - 3 0.00828 - 4 0.00434 - 5 7.09e-05 - 6 3.54e-05 - 7 0.0226 - 8 0.0251 - 9 0.00383 - 10 0.000656 - 12 3.54e-05 - 13 0.178 - 14 0.1 - 15 0.0189 - 16 0.00159 - 17 0.000106 - 18 0.000213 - 19 0.00564 - 21 0.0233 - 22 0.00184 - 24 0.00365 - 26 0.00124 - 28 0.0339 - 29 0.164 - 30 0.0194 - 31 0.0203 - 32 0.0433 - 33 0.0486 - 34 3.54e-05 - 35 0.000284 - 36 1.77e-05 - 37 8.86e-05 - 40 7.09e-05 - 41 0.155 - 42 0.0084 - 43 0.000939 - 44 0.00119 - 45 0.0125 - 46 0.0073 - 47 0.0483 - - 2 17 8 0 - 7 0.176 - 13 0.0588 - 22 0.0588 - 28 0.176 - 30 0.0588 - 41 0.294 - 46 0.0588 - 47 0.118 - - 4 202 17 0 - 0 0.0891 - 2 0.0594 - 3 0.0149 - 8 0.00495 - 13 0.144 - 14 0.00495 - 21 0.0149 - 24 0.0099 - 28 0.0743 - 29 0.342 - 30 0.0396 - 31 0.0347 - 32 0.099 - 33 0.0446 - 41 0.0149 - 42 0.00495 - 45 0.00495 - - 7 10218 35 1 - 0 0.0262 - 2 0.0361 - 3 0.00861 - 4 0.000587 - 7 0.0236 - 8 0.0418 - 9 0.00803 - 10 0.000685 - 12 9.79e-05 - 13 0.141 - 14 0.0686 - 15 0.0234 - 16 0.00147 - 18 0.000294 - 19 0.00832 - 21 0.065 - 22 0.00431 - 24 0.00528 - 26 0.000391 - 28 0.0397 - 29 0.102 - 30 0.0302 - 31 0.0349 - 32 0.0379 - 33 0.0506 - 34 9.79e-05 - 35 0.00108 - 37 9.79e-05 - 41 0.11 - 42 0.00851 - 43 0.00127 - 44 0.00137 - 45 0.019 - 46 0.00617 - 47 0.0931 - - 7 48 15 0 - 0 0.0208 - 8 0.0208 - 13 0.125 - 14 0.125 - 18 0.0208 - 21 0.104 - 28 0.0625 - 29 0.0208 - 30 0.0417 - 32 0.0208 - 33 0.0625 - 41 0.229 - 42 0.0417 - 46 0.0208 - 47 0.0833 - - 12 1 1 0 - 42 1 - - 13 8 7 0 - 2 0.125 - 7 0.125 - 8 0.125 - 13 0.25 - 14 0.125 - 21 0.125 - 30 0.125 - - 15 14 1 0 - 47 1 - - 21 385 23 4 - 0 0.0182 - 2 0.0779 - 3 0.0104 - 4 0.0026 - 7 0.0545 - 8 0.0234 - 13 0.0909 - 14 0.0649 - 15 0.013 - 19 0.0104 - 21 0.0571 - 24 0.013 - 28 0.0234 - 29 0.013 - 30 0.0156 - 31 0.0312 - 32 0.0026 - 33 0.0026 - 41 0.249 - 42 0.026 - 45 0.0416 - 46 0.013 - 47 0.145 - - 7 246 21 0 - 2 0.0813 - 3 0.0122 - 7 0.061 - 8 0.0325 - 13 0.0854 - 14 0.061 - 15 0.0163 - 19 0.0122 - 21 0.0285 - 24 0.00407 - 28 0.00813 - 29 0.0122 - 30 0.0122 - 31 0.0163 - 32 0.00407 - 33 0.00407 - 41 0.297 - 42 0.0407 - 45 0.0407 - 46 0.0203 - 47 0.15 - - 21 13 8 0 - 2 0.0769 - 7 0.0769 - 8 0.0769 - 13 0.231 - 14 0.154 - 21 0.231 - 29 0.0769 - 41 0.0769 - - 47 118 18 0 - 0 0.0508 - 2 0.0678 - 3 0.00847 - 4 0.00847 - 7 0.0424 - 13 0.0932 - 14 0.0593 - 15 0.00847 - 19 0.00847 - 21 0.102 - 24 0.0339 - 28 0.0508 - 29 0.00847 - 30 0.0254 - 31 0.0678 - 41 0.178 - 45 0.0424 - 47 0.144 - - 71 5 5 0 - 2 0.2 - 14 0.2 - 28 0.2 - 45 0.2 - 47 0.2 - - 26 2 1 0 - 30 1 - - 34 10 5 0 - 2 0.1 - 13 0.4 - 14 0.1 - 41 0.2 - 47 0.2 - - 35 5 2 0 - 2 0.4 - 47 0.6 - - 41 8 5 0 - 8 0.25 - 13 0.375 - 14 0.125 - 28 0.125 - 33 0.125 - - 44 5 4 0 - 2 0.2 - 8 0.4 - 14 0.2 - 30 0.2 - - 45 26 7 0 - 2 0.0385 - 13 0.0769 - 14 0.0769 - 28 0.0769 - 29 0.269 - 33 0.192 - 41 0.269 - - 47 27924 40 25 - 0 0.0152 - 1 3.58e-05 - 2 0.0212 - 3 0.00834 - 4 0.00437 - 5 7.16e-05 - 6 3.58e-05 - 7 0.0219 - 8 0.0252 - 9 0.0038 - 10 0.000573 - 12 3.58e-05 - 13 0.18 - 14 0.1 - 15 0.0191 - 16 0.00161 - 17 0.000107 - 18 0.000215 - 19 0.00569 - 21 0.0165 - 22 0.00175 - 24 0.00369 - 26 0.00125 - 28 0.0342 - 29 0.166 - 30 0.0196 - 31 0.0206 - 32 0.0438 - 33 0.0491 - 34 3.58e-05 - 35 0.000179 - 37 7.16e-05 - 40 7.16e-05 - 41 0.156 - 42 0.00849 - 43 0.000931 - 44 0.00111 - 45 0.0122 - 46 0.00734 - 47 0.0488 - - 2 12 7 0 - 7 0.25 - 13 0.0833 - 22 0.0833 - 28 0.25 - 30 0.0833 - 41 0.0833 - 47 0.167 - - 4 201 17 0 - 0 0.0896 - 2 0.0597 - 3 0.0149 - 8 0.00498 - 13 0.144 - 14 0.00498 - 21 0.00995 - 24 0.00995 - 28 0.0746 - 29 0.343 - 30 0.0398 - 31 0.0348 - 32 0.0995 - 33 0.0448 - 41 0.0149 - 42 0.00498 - 45 0.00498 - - 7 9753 35 0 - 0 0.0275 - 2 0.0378 - 3 0.00892 - 4 0.000615 - 7 0.0198 - 8 0.0437 - 9 0.00841 - 10 0.000513 - 12 0.000103 - 13 0.146 - 14 0.0687 - 15 0.0245 - 16 0.00154 - 18 0.000308 - 19 0.00872 - 21 0.0321 - 22 0.00451 - 24 0.00554 - 26 0.00041 - 28 0.0416 - 29 0.107 - 30 0.0317 - 31 0.0366 - 32 0.0397 - 33 0.053 - 34 0.000103 - 35 0.000513 - 37 0.000103 - 41 0.115 - 42 0.00892 - 43 0.00133 - 44 0.00113 - 45 0.0199 - 46 0.00646 - 47 0.0975 - - 12 1 1 0 - 42 1 - - 13 7 6 0 - 2 0.143 - 8 0.143 - 13 0.286 - 14 0.143 - 21 0.143 - 30 0.143 - - 15 14 1 0 - 47 1 - - 21 367 23 0 - 0 0.0191 - 2 0.0817 - 3 0.0109 - 4 0.00272 - 7 0.0572 - 8 0.0245 - 13 0.0899 - 14 0.0654 - 15 0.0136 - 19 0.0109 - 21 0.0191 - 24 0.0136 - 28 0.0245 - 29 0.0136 - 30 0.0163 - 31 0.0327 - 32 0.00272 - 33 0.00272 - 41 0.262 - 42 0.0272 - 45 0.0436 - 46 0.0136 - 47 0.153 - - 26 2 1 0 - 30 1 - - 34 10 5 0 - 2 0.1 - 13 0.4 - 14 0.1 - 41 0.2 - 47 0.2 - - 35 4 2 0 - 2 0.25 - 47 0.75 - - 41 2 2 0 - 28 0.5 - 33 0.5 - - 44 5 4 0 - 2 0.2 - 8 0.4 - 14 0.2 - 30 0.2 - - 45 24 7 0 - 2 0.0417 - 13 0.0833 - 14 0.0833 - 28 0.0833 - 29 0.292 - 33 0.208 - 41 0.208 - - 49 130 21 0 - 0 0.0385 - 2 0.0385 - 7 0.00769 - 8 0.0308 - 13 0.0923 - 14 0.0385 - 15 0.00769 - 19 0.00769 - 21 0.0385 - 24 0.00769 - 28 0.00769 - 29 0.0154 - 30 0.00769 - 31 0.0231 - 33 0.00769 - 41 0.369 - 42 0.0615 - 44 0.00769 - 45 0.0308 - 46 0.0154 - 47 0.146 - - 55 50 13 0 - 2 0.02 - 7 0.04 - 13 0.14 - 14 0.08 - 15 0.06 - 21 0.04 - 29 0.1 - 30 0.02 - 31 0.04 - 33 0.12 - 41 0.2 - 42 0.02 - 47 0.12 - - 57 13 9 0 - 8 0.0769 - 13 0.231 - 14 0.154 - 29 0.0769 - 31 0.0769 - 41 0.154 - 42 0.0769 - 46 0.0769 - 47 0.0769 - - 62 7901 29 0 - 0 0.00253 - 2 0.000506 - 3 0.00797 - 4 0.00367 - 7 0.00101 - 8 0.0221 - 9 0.0024 - 10 0.00101 - 13 0.172 - 14 0.078 - 15 0.00848 - 16 0.000127 - 17 0.000253 - 18 0.000127 - 19 0.00329 - 21 0.00633 - 22 0.000127 - 24 0.000759 - 28 0.0291 - 29 0.424 - 30 0.0182 - 31 0.0151 - 32 0.0938 - 33 0.0919 - 41 0.0103 - 42 0.00101 - 43 0.000506 - 45 0.00165 - 46 0.00354 - - 64 337 24 0 - 0 0.0326 - 2 0.0089 - 4 0.00593 - 7 0.0386 - 8 0.0326 - 13 0.131 - 14 0.0504 - 15 0.0089 - 19 0.0119 - 21 0.00297 - 22 0.00297 - 24 0.0119 - 26 0.00297 - 28 0.0801 - 29 0.285 - 30 0.0178 - 31 0.0148 - 32 0.0475 - 33 0.107 - 41 0.0623 - 42 0.0089 - 44 0.00297 - 45 0.0178 - 47 0.0148 - - 66 31 12 0 - 2 0.0645 - 7 0.0323 - 9 0.0645 - 13 0.226 - 14 0.0323 - 15 0.0645 - 18 0.0323 - 28 0.0323 - 29 0.0323 - 31 0.0968 - 41 0.0968 - 47 0.226 - - 68 2 2 0 - 8 0.5 - 47 0.5 - - 70 36 15 0 - 0 0.0278 - 2 0.0833 - 7 0.167 - 13 0.0278 - 19 0.0278 - 24 0.0278 - 28 0.111 - 29 0.0278 - 30 0.0278 - 31 0.0278 - 32 0.111 - 33 0.139 - 42 0.0278 - 45 0.0556 - 47 0.111 - - 71 1934 30 0 - 0 0.0274 - 2 0.0398 - 3 0.015 - 4 0.000517 - 7 0.0729 - 8 0.0217 - 9 0.00103 - 10 0.00103 - 13 0.171 - 14 0.0693 - 15 0.0274 - 18 0.000517 - 19 0.00982 - 21 0.0274 - 22 0.000517 - 24 0.0062 - 26 0.0031 - 28 0.06 - 29 0.0186 - 30 0.0129 - 31 0.0202 - 32 0.0119 - 33 0.0186 - 40 0.00103 - 41 0.204 - 42 0.014 - 44 0.00155 - 45 0.0264 - 46 0.0114 - 47 0.105 - - 72 6740 35 0 - 0 0.00608 - 1 0.000148 - 2 0.0113 - 3 0.00653 - 4 0.012 - 5 0.000297 - 6 0.000148 - 7 0.0323 - 8 0.00445 - 9 0.000148 - 10 0.000148 - 13 0.241 - 14 0.19 - 15 0.0223 - 16 0.00415 - 17 0.000148 - 19 0.00282 - 21 0.00415 - 22 0.000148 - 24 0.00267 - 26 0.00356 - 28 0.02 - 29 0.00341 - 30 0.00564 - 31 0.00356 - 32 0.0046 - 33 0.00401 - 37 0.000148 - 41 0.368 - 42 0.012 - 43 0.00134 - 44 0.00208 - 45 0.00712 - 46 0.0111 - 47 0.0126 - - 73 321 18 0 - 0 0.00312 - 2 0.0125 - 3 0.00935 - 4 0.00623 - 8 0.00623 - 13 0.424 - 14 0.137 - 15 0.0343 - 16 0.00312 - 28 0.0125 - 30 0.00623 - 31 0.00312 - 33 0.00623 - 41 0.277 - 42 0.0187 - 44 0.00312 - 45 0.00935 - 46 0.028 - - 74 14 5 0 - 7 0.286 - 41 0.143 - 42 0.143 - 45 0.143 - 47 0.286 - - 49 130 21 3 - 0 0.0385 - 2 0.0385 - 7 0.00769 - 8 0.0308 - 13 0.0923 - 14 0.0385 - 15 0.00769 - 19 0.00769 - 21 0.0385 - 24 0.00769 - 28 0.00769 - 29 0.0154 - 30 0.00769 - 31 0.0231 - 33 0.00769 - 41 0.369 - 42 0.0615 - 44 0.00769 - 45 0.0308 - 46 0.0154 - 47 0.146 - - 21 2 2 0 - 30 0.5 - 31 0.5 - - 71 10 6 0 - 8 0.1 - 14 0.1 - 41 0.3 - 42 0.2 - 46 0.1 - 47 0.2 - - 72 7 5 0 - 0 0.429 - 21 0.143 - 33 0.143 - 41 0.143 - 47 0.143 - - 55 50 13 0 - 2 0.02 - 7 0.04 - 13 0.14 - 14 0.08 - 15 0.06 - 21 0.04 - 29 0.1 - 30 0.02 - 31 0.04 - 33 0.12 - 41 0.2 - 42 0.02 - 47 0.12 - - 57 13 9 0 - 8 0.0769 - 13 0.231 - 14 0.154 - 29 0.0769 - 31 0.0769 - 41 0.154 - 42 0.0769 - 46 0.0769 - 47 0.0769 - - 62 7950 30 0 - 0 0.00252 - 2 0.000503 - 3 0.00792 - 4 0.00365 - 7 0.00126 - 8 0.022 - 9 0.00289 - 10 0.00113 - 13 0.172 - 14 0.0776 - 15 0.00843 - 16 0.000126 - 17 0.000252 - 18 0.000126 - 19 0.00327 - 21 0.00654 - 22 0.000881 - 24 0.000755 - 28 0.0289 - 29 0.421 - 30 0.0181 - 31 0.015 - 32 0.0932 - 33 0.0913 - 37 0.000126 - 41 0.0102 - 42 0.00101 - 43 0.000629 - 45 0.00453 - 46 0.00365 - - 64 340 24 0 - 0 0.0324 - 2 0.00882 - 4 0.00588 - 7 0.0382 - 8 0.0324 - 13 0.129 - 14 0.05 - 15 0.00882 - 19 0.0118 - 21 0.0118 - 22 0.00294 - 24 0.0118 - 26 0.00294 - 28 0.0794 - 29 0.282 - 30 0.0176 - 31 0.0147 - 32 0.0471 - 33 0.106 - 41 0.0618 - 42 0.00882 - 44 0.00294 - 45 0.0176 - 47 0.0147 - - 66 31 12 0 - 2 0.0645 - 7 0.0323 - 9 0.0645 - 13 0.226 - 14 0.0323 - 15 0.0645 - 18 0.0323 - 28 0.0323 - 29 0.0323 - 31 0.0968 - 41 0.0968 - 47 0.226 - - 68 2 2 0 - 8 0.5 - 47 0.5 - - 70 36 15 0 - 0 0.0278 - 2 0.0833 - 7 0.167 - 13 0.0278 - 19 0.0278 - 24 0.0278 - 28 0.111 - 29 0.0278 - 30 0.0278 - 31 0.0278 - 32 0.111 - 33 0.139 - 42 0.0278 - 45 0.0556 - 47 0.111 - - 71 1950 30 0 - 0 0.0272 - 2 0.04 - 3 0.0149 - 4 0.000513 - 7 0.0723 - 8 0.0215 - 9 0.00103 - 10 0.00205 - 13 0.169 - 14 0.0687 - 15 0.0272 - 18 0.000513 - 19 0.00974 - 21 0.0338 - 22 0.000513 - 24 0.00615 - 26 0.00308 - 28 0.0595 - 29 0.0185 - 30 0.0128 - 31 0.02 - 32 0.0118 - 33 0.0185 - 40 0.00103 - 41 0.202 - 42 0.0138 - 44 0.00154 - 45 0.0262 - 46 0.0113 - 47 0.105 - - 72 6757 36 0 - 0 0.00607 - 1 0.000148 - 2 0.0112 - 3 0.00651 - 4 0.0121 - 5 0.000296 - 6 0.000148 - 7 0.0323 - 8 0.00474 - 9 0.000148 - 10 0.000148 - 13 0.24 - 14 0.19 - 15 0.0222 - 16 0.00414 - 17 0.000148 - 19 0.00281 - 21 0.00503 - 22 0.000148 - 24 0.00266 - 26 0.00355 - 28 0.02 - 29 0.0034 - 30 0.00562 - 31 0.00355 - 32 0.00459 - 33 0.004 - 36 0.000148 - 37 0.000148 - 41 0.367 - 42 0.012 - 43 0.00133 - 44 0.00237 - 45 0.00755 - 46 0.0111 - 47 0.0126 - - 73 321 18 0 - 0 0.00312 - 2 0.0125 - 3 0.00935 - 4 0.00623 - 8 0.00623 - 13 0.424 - 14 0.137 - 15 0.0343 - 16 0.00312 - 28 0.0125 - 30 0.00623 - 31 0.00312 - 33 0.00623 - 41 0.277 - 42 0.0187 - 44 0.00312 - 45 0.00935 - 46 0.028 - - 74 14 5 0 - 7 0.286 - 41 0.143 - 42 0.143 - 45 0.143 - 47 0.286 - -65 683 22 14 - 0 0.00878 - 2 0.0293 - 7 0.00293 - 8 0.00586 - 9 0.00146 - 12 0.00146 - 13 0.0293 - 14 0.00732 - 15 0.00146 - 21 0.0351 - 28 0.00439 - 31 0.00146 - 34 0.00146 - 35 0.124 - 37 0.113 - 40 0.00586 - 41 0.0527 - 42 0.0366 - 44 0.00293 - 45 0.133 - 46 0.00293 - 47 0.398 - - 2 12 3 0 - 0 0.0833 - 44 0.0833 - 47 0.833 - - 21 11 3 0 - 0 0.0909 - 45 0.0909 - 47 0.818 - - 41 14 6 0 - 8 0.214 - 13 0.429 - 15 0.0714 - 21 0.143 - 31 0.0714 - 37 0.0714 - - 45 28 3 0 - 41 0.143 - 42 0.0357 - 47 0.821 - - 46 2 1 0 - 41 1 - - 47 198 10 1 - 0 0.00505 - 2 0.0202 - 7 0.00505 - 21 0.00505 - 28 0.00505 - 40 0.0101 - 41 0.0455 - 42 0.0606 - 45 0.157 - 47 0.687 - - 45 27 3 0 - 41 0.111 - 42 0.037 - 47 0.852 - - 58 5 3 0 - 13 0.2 - 28 0.2 - 37 0.6 - - 62 7 4 0 - 14 0.143 - 35 0.429 - 37 0.286 - 47 0.143 - - 64 12 4 0 - 0 0.0833 - 42 0.0833 - 45 0.25 - 47 0.583 - - 65 3 3 0 - 2 0.333 - 41 0.333 - 42 0.333 - - 67 184 13 0 - 0 0.00543 - 2 0.0109 - 8 0.00543 - 9 0.00543 - 12 0.00543 - 13 0.0652 - 14 0.0217 - 21 0.0489 - 34 0.00543 - 35 0.429 - 37 0.37 - 41 0.0217 - 45 0.00543 - - 69 1 1 0 - 0 1 - - 71 83 9 0 - 2 0.0843 - 21 0.0723 - 28 0.012 - 41 0.0723 - 42 0.0361 - 44 0.012 - 45 0.301 - 46 0.012 - 47 0.398 - - 72 108 9 0 - 2 0.0556 - 7 0.00926 - 21 0.0556 - 40 0.0185 - 41 0.0833 - 42 0.0648 - 45 0.278 - 46 0.00926 - 47 0.426 - -66 9695 38 20 - 0 0.00743 - 2 0.00918 - 3 0.0032 - 4 0.00196 - 5 0.000103 - 6 0.000103 - 7 0.0099 - 8 0.0141 - 9 0.00124 - 10 0.000103 - 12 0.00258 - 13 0.0709 - 14 0.033 - 15 0.00949 - 16 0.000413 - 18 0.000309 - 19 0.00825 - 21 0.0228 - 22 0.000825 - 24 0.00175 - 26 0.000413 - 28 0.00495 - 29 0.00155 - 30 0.00196 - 31 0.00495 - 32 0.00155 - 33 0.00134 - 34 0.000413 - 35 0.000722 - 37 0.000206 - 40 0.00144 - 41 0.158 - 42 0.0033 - 43 0.000619 - 44 0.000309 - 45 0.108 - 46 0.14 - 47 0.372 - - 0 88 14 2 - 2 0.227 - 3 0.0227 - 4 0.0114 - 7 0.227 - 9 0.0227 - 13 0.114 - 14 0.0227 - 18 0.0114 - 21 0.205 - 31 0.0341 - 35 0.0114 - 41 0.0227 - 42 0.0114 - 47 0.0568 - - 47 34 7 0 - 2 0.235 - 4 0.0294 - 7 0.559 - 13 0.0588 - 21 0.0588 - 35 0.0294 - 41 0.0294 - - 55 54 12 0 - 2 0.222 - 3 0.037 - 7 0.0185 - 9 0.037 - 13 0.148 - 14 0.037 - 18 0.0185 - 21 0.296 - 31 0.0556 - 41 0.0185 - 42 0.0185 - 47 0.0926 - - 2 31 3 0 - 41 0.0323 - 45 0.0323 - 47 0.935 - - 12 26 8 0 - 2 0.308 - 13 0.154 - 15 0.0769 - 21 0.231 - 35 0.0385 - 37 0.0385 - 41 0.0769 - 47 0.0769 - - 21 7 4 0 - 12 0.143 - 19 0.286 - 42 0.143 - 47 0.429 - - 33 4 2 0 - 21 0.75 - 47 0.25 - - 40 9 5 0 - 8 0.111 - 13 0.556 - 24 0.111 - 30 0.111 - 42 0.111 - - 41 1398 28 4 - 0 0.0122 - 2 0.000715 - 3 0.0179 - 4 0.00787 - 5 0.000715 - 6 0.000715 - 7 0.0114 - 8 0.0858 - 9 0.00572 - 10 0.000715 - 12 0.00143 - 13 0.408 - 14 0.192 - 15 0.0451 - 16 0.00286 - 19 0.0258 - 21 0.0672 - 22 0.00501 - 24 0.0114 - 26 0.00215 - 28 0.0315 - 29 0.00858 - 30 0.0107 - 31 0.0222 - 32 0.00858 - 33 0.00787 - 35 0.000715 - 43 0.00429 - - 46 1150 27 0 - 0 0.0139 - 3 0.0104 - 4 0.00957 - 5 0.00087 - 6 0.00087 - 7 0.013 - 8 0.0957 - 9 0.00522 - 10 0.00087 - 12 0.00174 - 13 0.415 - 14 0.17 - 15 0.0435 - 16 0.00348 - 19 0.0304 - 21 0.0661 - 22 0.00435 - 24 0.0139 - 26 0.00261 - 28 0.0322 - 29 0.0087 - 30 0.013 - 31 0.0235 - 32 0.00957 - 33 0.00609 - 35 0.00087 - 43 0.00435 - - 49 7 6 0 - 3 0.143 - 8 0.143 - 13 0.143 - 14 0.143 - 15 0.143 - 29 0.286 - - 57 6 3 0 - 13 0.333 - 14 0.167 - 21 0.5 - - 69 231 17 0 - 0 0.00433 - 2 0.00433 - 3 0.0519 - 7 0.00433 - 8 0.039 - 9 0.00866 - 13 0.385 - 14 0.303 - 15 0.0519 - 19 0.00433 - 21 0.0606 - 22 0.00866 - 28 0.0303 - 31 0.0173 - 32 0.00433 - 33 0.0173 - 43 0.00433 - - 45 1037 7 1 - 2 0.00193 - 34 0.000964 - 41 0.000964 - 42 0.00193 - 44 0.000964 - 46 0.000964 - 47 0.992 - - 69 1 1 0 - 46 1 - - 46 1179 3 0 - 40 0.0119 - 41 0.978 - 46 0.0102 - - 47 2027 21 10 - 2 0.0143 - 7 0.0192 - 9 0.000987 - 13 0.00345 - 14 0.000493 - 15 0.000987 - 18 0.000493 - 21 0.00691 - 28 0.000493 - 29 0.000493 - 31 0.00148 - 32 0.000493 - 34 0.000987 - 35 0.00148 - 37 0.000493 - 41 0.0276 - 42 0.0074 - 44 0.000493 - 45 0.00296 - 46 0.0183 - 47 0.89 - - 0 52 11 0 - 2 0.115 - 7 0.385 - 9 0.0385 - 13 0.0577 - 14 0.0192 - 18 0.0192 - 21 0.154 - 31 0.0577 - 35 0.0192 - 41 0.0385 - 47 0.0962 - - 2 30 2 0 - 45 0.0333 - 47 0.967 - - 12 20 8 0 - 2 0.25 - 13 0.2 - 15 0.1 - 21 0.15 - 35 0.05 - 37 0.05 - 41 0.1 - 47 0.1 - - 45 1033 4 0 - 2 0.000968 - 34 0.000968 - 42 0.00194 - 47 0.996 - - 49 86 6 0 - 2 0.151 - 28 0.0116 - 42 0.0116 - 44 0.0116 - 45 0.0116 - 47 0.802 - - 51 6 2 0 - 42 0.333 - 47 0.667 - - 55 11 3 0 - 2 0.182 - 42 0.364 - 47 0.455 - - 57 83 5 0 - 2 0.012 - 7 0.012 - 42 0.012 - 45 0.012 - 47 0.952 - - 62 456 3 0 - 34 0.00219 - 42 0.00439 - 47 0.993 - - 69 198 10 0 - 7 0.0909 - 21 0.0152 - 29 0.00505 - 32 0.00505 - 35 0.00505 - 41 0.253 - 42 0.00505 - 45 0.0101 - 46 0.187 - 47 0.424 - - 48 31 3 0 - 2 0.0323 - 21 0.129 - 47 0.839 - - 49 98 8 0 - 2 0.163 - 21 0.0204 - 28 0.0102 - 41 0.0714 - 42 0.0102 - 44 0.0102 - 45 0.0102 - 47 0.704 - - 51 14 3 0 - 42 0.143 - 45 0.571 - 47 0.286 - - 55 97 11 4 - 0 0.567 - 2 0.0309 - 8 0.0103 - 12 0.227 - 15 0.0103 - 21 0.0103 - 33 0.0103 - 42 0.0412 - 45 0.0309 - 46 0.0103 - 47 0.0515 - - 41 5 4 0 - 2 0.2 - 15 0.2 - 45 0.4 - 47 0.2 - - 47 5 2 0 - 2 0.2 - 42 0.8 - - 57 1 1 0 - 33 1 - - 69 83 8 0 - 0 0.639 - 2 0.012 - 8 0.012 - 12 0.265 - 21 0.012 - 45 0.012 - 46 0.012 - 47 0.0361 - - 57 99 10 3 - 2 0.0303 - 7 0.0101 - 8 0.0101 - 13 0.0202 - 14 0.0101 - 21 0.0404 - 41 0.0606 - 42 0.0101 - 45 0.0101 - 47 0.798 - - 0 9 3 0 - 21 0.333 - 42 0.111 - 47 0.556 - - 41 8 2 0 - 41 0.625 - 47 0.375 - - 69 77 7 0 - 2 0.026 - 7 0.013 - 13 0.013 - 14 0.013 - 21 0.013 - 45 0.013 - 47 0.909 - - 58 6 5 0 - 8 0.167 - 13 0.333 - 14 0.167 - 15 0.167 - 19 0.167 - - 62 1478 6 2 - 2 0.00271 - 34 0.000677 - 41 0.000677 - 42 0.00135 - 45 0.688 - 47 0.306 - - 41 1357 6 0 - 2 0.00295 - 34 0.000737 - 41 0.000737 - 42 0.00147 - 45 0.739 - 47 0.255 - - 69 111 2 0 - 45 0.036 - 47 0.964 - - 64 11 5 0 - 2 0.0909 - 13 0.0909 - 41 0.0909 - 45 0.0909 - 47 0.636 - - 65 9 3 0 - 42 0.111 - 45 0.667 - 47 0.222 - - 69 2030 25 4 - 2 0.000493 - 3 0.00197 - 4 0.00345 - 7 0.00985 - 8 0.0064 - 13 0.0404 - 14 0.0227 - 15 0.0113 - 18 0.000493 - 19 0.0202 - 21 0.036 - 22 0.000493 - 26 0.000493 - 28 0.000985 - 29 0.000985 - 30 0.00148 - 31 0.00542 - 32 0.000985 - 33 0.000493 - 35 0.000493 - 41 0.146 - 42 0.000493 - 45 0.00148 - 46 0.645 - 47 0.0414 - - 41 2 2 0 - 19 0.5 - 47 0.5 - - 47 1970 23 0 - 3 0.00203 - 4 0.00355 - 7 0.00964 - 8 0.0066 - 13 0.0416 - 14 0.0228 - 15 0.0117 - 18 0.000508 - 19 0.0203 - 21 0.0315 - 22 0.000508 - 26 0.000508 - 28 0.00102 - 29 0.000508 - 30 0.00152 - 31 0.00558 - 32 0.00102 - 33 0.000508 - 35 0.000508 - 41 0.151 - 45 0.00152 - 46 0.665 - 47 0.0208 - - 58 2 1 0 - 21 1 - - 69 54 6 0 - 2 0.0185 - 7 0.0185 - 21 0.167 - 29 0.0185 - 42 0.0185 - 47 0.759 - -67 759 24 13 - 0 0.00527 - 2 0.0527 - 4 0.00132 - 7 0.00395 - 8 0.00264 - 9 0.00264 - 12 0.00264 - 13 0.0395 - 14 0.0145 - 15 0.00922 - 19 0.00922 - 21 0.0329 - 31 0.00132 - 33 0.00132 - 34 0.00264 - 35 0.215 - 37 0.182 - 40 0.00395 - 41 0.0461 - 42 0.0237 - 44 0.00527 - 45 0.0777 - 46 0.00132 - 47 0.264 - - 0 167 13 0 - 0 0.00599 - 2 0.0778 - 8 0.00599 - 13 0.0359 - 14 0.012 - 21 0.0359 - 35 0.15 - 37 0.228 - 40 0.00599 - 41 0.0659 - 42 0.0359 - 45 0.0958 - 47 0.246 - - 2 15 2 0 - 46 0.0667 - 47 0.933 - - 12 94 11 0 - 2 0.117 - 9 0.0106 - 13 0.0319 - 14 0.0106 - 21 0.0319 - 35 0.128 - 37 0.245 - 41 0.106 - 42 0.0106 - 45 0.0532 - 47 0.255 - - 14 2 1 0 - 45 1 - - 41 17 9 1 - 4 0.0588 - 7 0.0588 - 13 0.235 - 14 0.118 - 15 0.118 - 19 0.0588 - 21 0.235 - 31 0.0588 - 33 0.0588 - - 12 7 5 0 - 4 0.143 - 13 0.286 - 14 0.286 - 19 0.143 - 31 0.143 - - 45 6 5 0 - 2 0.167 - 7 0.167 - 42 0.167 - 44 0.333 - 47 0.167 - - 46 1 1 0 - 40 1 - - 47 342 18 10 - 0 0.00585 - 2 0.038 - 7 0.00292 - 8 0.00292 - 9 0.00292 - 12 0.00292 - 13 0.0351 - 14 0.0117 - 21 0.0263 - 34 0.00292 - 35 0.237 - 37 0.202 - 40 0.00292 - 41 0.0263 - 42 0.0263 - 44 0.00585 - 45 0.076 - 47 0.292 - - 0 148 13 0 - 0 0.00676 - 2 0.0338 - 8 0.00676 - 13 0.0405 - 14 0.00676 - 21 0.0338 - 35 0.169 - 37 0.257 - 40 0.00676 - 41 0.027 - 42 0.0405 - 45 0.0946 - 47 0.277 - - 2 14 1 0 - 47 1 - - 12 82 11 0 - 2 0.0854 - 9 0.0122 - 13 0.0366 - 14 0.0122 - 21 0.0366 - 35 0.146 - 37 0.28 - 41 0.0366 - 42 0.0122 - 45 0.0488 - 47 0.293 - - 14 2 1 0 - 45 1 - - 45 5 4 0 - 7 0.2 - 42 0.2 - 44 0.4 - 47 0.2 - - 49 5 2 0 - 14 0.2 - 47 0.8 - - 55 7 6 0 - 0 0.143 - 2 0.143 - 12 0.143 - 21 0.143 - 35 0.143 - 45 0.286 - - 57 6 2 0 - 37 0.167 - 47 0.833 - - 64 6 3 0 - 41 0.333 - 45 0.167 - 47 0.5 - - 69 56 7 0 - 13 0.0536 - 14 0.0179 - 34 0.0179 - 35 0.768 - 37 0.0714 - 45 0.0357 - 47 0.0357 - - 49 5 2 0 - 14 0.2 - 47 0.8 - - 55 10 7 0 - 0 0.1 - 2 0.1 - 12 0.1 - 15 0.3 - 21 0.1 - 35 0.1 - 45 0.2 - - 57 6 2 0 - 37 0.167 - 47 0.833 - - 64 8 4 0 - 2 0.125 - 41 0.25 - 45 0.25 - 47 0.375 - - 69 67 10 0 - 13 0.0597 - 14 0.0149 - 15 0.0299 - 19 0.0896 - 21 0.0299 - 34 0.0149 - 35 0.642 - 37 0.0597 - 45 0.0299 - 47 0.0299 - -68 1958 35 27 - 0 0.0827 - 1 0.00102 - 2 0.111 - 3 0.0133 - 4 0.0511 - 7 0.072 - 8 0.116 - 9 0.00358 - 13 0.15 - 14 0.0572 - 15 0.0465 - 16 0.000511 - 18 0.00715 - 19 0.00511 - 20 0.00409 - 21 0.0235 - 22 0.00102 - 24 0.00306 - 26 0.00562 - 27 0.000511 - 28 0.0225 - 29 0.00562 - 30 0.0163 - 31 0.0235 - 32 0.00358 - 33 0.0097 - 37 0.00153 - 40 0.00153 - 41 0.0914 - 42 0.0184 - 43 0.00153 - 44 0.00102 - 45 0.00919 - 46 0.00613 - 47 0.0337 - - 2 466 18 9 - 0 0.00429 - 3 0.0343 - 7 0.0172 - 8 0.193 - 9 0.00858 - 13 0.369 - 14 0.0687 - 15 0.122 - 16 0.00215 - 19 0.00215 - 21 0.0343 - 22 0.00215 - 30 0.00429 - 31 0.00429 - 37 0.00644 - 41 0.109 - 43 0.00644 - 46 0.0107 - - 7 1 1 0 - 37 1 - - 8 110 4 0 - 8 0.109 - 13 0.682 - 14 0.0182 - 15 0.191 - - 13 55 4 0 - 8 0.545 - 13 0.345 - 14 0.0727 - 41 0.0364 - - 14 10 2 0 - 8 0.2 - 13 0.8 - - 15 19 3 0 - 8 0.474 - 14 0.0526 - 15 0.474 - - 30 3 1 0 - 8 1 - - 47 253 17 0 - 3 0.0593 - 7 0.0316 - 8 0.119 - 9 0.0158 - 13 0.265 - 14 0.0988 - 15 0.107 - 16 0.00395 - 19 0.00395 - 21 0.0593 - 22 0.00395 - 30 0.00791 - 31 0.00791 - 37 0.00791 - 41 0.182 - 43 0.0119 - 46 0.0158 - - 48 3 2 0 - 0 0.333 - 8 0.667 - - 57 1 1 0 - 0 1 - - 4 9 5 0 - 0 0.222 - 7 0.444 - 13 0.111 - 41 0.111 - 45 0.111 - - 7 4 4 0 - 2 0.25 - 8 0.25 - 21 0.25 - 41 0.25 - - 8 194 20 4 - 0 0.00515 - 2 0.572 - 3 0.0103 - 4 0.0722 - 7 0.0619 - 8 0.067 - 13 0.0155 - 15 0.0155 - 18 0.0206 - 20 0.00515 - 21 0.00515 - 26 0.0103 - 28 0.0206 - 29 0.00515 - 30 0.0155 - 31 0.00515 - 33 0.0155 - 41 0.0464 - 42 0.0103 - 47 0.0206 - - 2 58 17 0 - 0 0.0172 - 2 0.0172 - 3 0.0345 - 4 0.172 - 7 0.121 - 8 0.155 - 13 0.0517 - 15 0.0345 - 18 0.0345 - 21 0.0172 - 28 0.069 - 29 0.0172 - 30 0.0345 - 31 0.0172 - 33 0.0345 - 41 0.103 - 47 0.069 - - 13 3 3 0 - 8 0.333 - 18 0.333 - 26 0.333 - - 41 18 9 0 - 4 0.222 - 7 0.222 - 8 0.0556 - 18 0.0556 - 26 0.0556 - 30 0.0556 - 33 0.0556 - 41 0.167 - 42 0.111 - - 47 111 4 0 - 2 0.973 - 7 0.00901 - 8 0.00901 - 15 0.00901 - - 13 182 19 3 - 0 0.00549 - 2 0.308 - 3 0.00549 - 4 0.11 - 7 0.137 - 8 0.132 - 9 0.00549 - 13 0.022 - 15 0.022 - 18 0.0165 - 20 0.011 - 26 0.011 - 28 0.0165 - 30 0.022 - 31 0.00549 - 32 0.011 - 33 0.011 - 41 0.132 - 47 0.0165 - - 2 103 19 0 - 0 0.00971 - 2 0.00971 - 3 0.00971 - 4 0.136 - 7 0.204 - 8 0.214 - 9 0.00971 - 13 0.0291 - 15 0.0194 - 18 0.0194 - 20 0.00971 - 26 0.0194 - 28 0.0291 - 30 0.0291 - 31 0.00971 - 32 0.00971 - 33 0.00971 - 41 0.204 - 47 0.0194 - - 41 17 10 0 - 4 0.294 - 7 0.176 - 8 0.0588 - 15 0.0588 - 18 0.0588 - 30 0.0588 - 32 0.0588 - 33 0.0588 - 41 0.118 - 47 0.0588 - - 47 51 2 0 - 2 0.98 - 13 0.0196 - - 14 21 6 2 - 2 0.476 - 4 0.143 - 8 0.0952 - 13 0.0952 - 33 0.0476 - 41 0.143 - - 2 7 4 0 - 4 0.429 - 8 0.143 - 33 0.143 - 41 0.286 - - 47 13 3 0 - 2 0.769 - 8 0.0769 - 13 0.154 - - 15 60 9 2 - 2 0.317 - 4 0.15 - 7 0.117 - 8 0.15 - 13 0.0167 - 15 0.133 - 20 0.0167 - 41 0.0333 - 47 0.0667 - - 2 31 7 0 - 4 0.226 - 7 0.194 - 8 0.258 - 13 0.0323 - 15 0.129 - 20 0.0323 - 47 0.129 - - 47 18 2 0 - 2 0.833 - 15 0.167 - - 21 16 5 1 - 0 0.188 - 2 0.5 - 13 0.125 - 21 0.125 - 42 0.0625 - - 48 3 1 0 - 0 1 - - 30 5 3 0 - 2 0.6 - 7 0.2 - 13 0.2 - - 41 124 16 4 - 3 0.0403 - 4 0.00806 - 8 0.29 - 9 0.00806 - 13 0.387 - 14 0.0887 - 15 0.0242 - 19 0.00806 - 21 0.0403 - 22 0.00806 - 26 0.00806 - 29 0.00806 - 30 0.0323 - 31 0.0161 - 33 0.00806 - 40 0.0242 - - 2 50 12 0 - 3 0.08 - 8 0.16 - 13 0.36 - 14 0.12 - 15 0.02 - 19 0.02 - 21 0.1 - 22 0.02 - 29 0.02 - 30 0.04 - 31 0.04 - 33 0.02 - - 13 22 3 0 - 4 0.0455 - 8 0.591 - 13 0.364 - - 46 5 3 0 - 8 0.2 - 13 0.2 - 40 0.6 - - 48 9 4 0 - 3 0.111 - 8 0.667 - 9 0.111 - 30 0.111 - - 42 11 6 0 - 4 0.0909 - 7 0.0909 - 8 0.273 - 13 0.364 - 15 0.0909 - 47 0.0909 - - 45 10 7 0 - 0 0.1 - 2 0.1 - 7 0.2 - 19 0.1 - 24 0.1 - 42 0.1 - 46 0.3 - - 46 9 4 0 - 8 0.222 - 27 0.111 - 32 0.111 - 41 0.556 - - 47 494 29 16 - 0 0.164 - 1 0.00202 - 2 0.00405 - 3 0.00405 - 4 0.0911 - 7 0.132 - 8 0.0891 - 9 0.00202 - 13 0.0587 - 14 0.0688 - 15 0.0202 - 18 0.0142 - 19 0.0081 - 20 0.0081 - 21 0.0121 - 24 0.00607 - 26 0.0101 - 28 0.0445 - 29 0.0101 - 30 0.0263 - 31 0.0425 - 32 0.00607 - 33 0.0182 - 41 0.0547 - 42 0.0243 - 44 0.00202 - 45 0.0081 - 46 0.00202 - 47 0.0668 - - 4 8 4 0 - 0 0.25 - 7 0.5 - 41 0.125 - 45 0.125 - - 8 71 19 0 - 0 0.0141 - 2 0.0141 - 3 0.0282 - 4 0.197 - 7 0.155 - 8 0.155 - 13 0.0423 - 15 0.0282 - 18 0.0563 - 20 0.0141 - 21 0.0141 - 26 0.0282 - 28 0.0563 - 29 0.0141 - 30 0.0423 - 31 0.0141 - 33 0.0423 - 42 0.0282 - 47 0.0563 - - 13 93 17 0 - 0 0.0108 - 2 0.0108 - 4 0.172 - 7 0.269 - 8 0.226 - 9 0.0108 - 15 0.043 - 18 0.0323 - 20 0.0215 - 26 0.0215 - 28 0.0323 - 30 0.043 - 31 0.0108 - 32 0.0215 - 33 0.0215 - 41 0.0215 - 47 0.0323 - - 14 4 2 0 - 4 0.75 - 33 0.25 - - 15 30 5 0 - 4 0.3 - 7 0.233 - 8 0.3 - 20 0.0333 - 47 0.133 - - 21 5 3 0 - 0 0.6 - 13 0.2 - 42 0.2 - - 45 6 5 0 - 0 0.167 - 7 0.333 - 19 0.167 - 24 0.167 - 42 0.167 - - 48 60 12 0 - 0 0.533 - 1 0.0167 - 4 0.0333 - 7 0.0333 - 13 0.05 - 14 0.0667 - 28 0.0333 - 29 0.0167 - 41 0.0833 - 42 0.0333 - 45 0.0167 - 47 0.0833 - - 49 34 12 0 - 0 0.206 - 7 0.0882 - 13 0.0882 - 14 0.147 - 21 0.0294 - 28 0.118 - 29 0.0294 - 30 0.0294 - 31 0.0294 - 41 0.147 - 42 0.0294 - 47 0.0588 - - 50 2 1 0 - 41 1 - - 55 61 17 0 - 0 0.246 - 4 0.0164 - 7 0.148 - 13 0.0328 - 14 0.131 - 19 0.0328 - 21 0.0328 - 26 0.0164 - 28 0.0656 - 30 0.0328 - 31 0.0328 - 32 0.0164 - 33 0.0328 - 41 0.0656 - 42 0.0492 - 44 0.0164 - 47 0.0328 - - 57 68 17 0 - 0 0.147 - 8 0.0147 - 13 0.191 - 14 0.147 - 15 0.0588 - 19 0.0147 - 21 0.0147 - 24 0.0147 - 28 0.0294 - 29 0.0294 - 30 0.0441 - 31 0.162 - 33 0.0147 - 41 0.0441 - 42 0.0147 - 45 0.0147 - 47 0.0441 - - 62 13 6 0 - 7 0.0769 - 14 0.0769 - 31 0.154 - 41 0.0769 - 46 0.0769 - 47 0.538 - - 64 10 8 0 - 0 0.1 - 8 0.1 - 13 0.2 - 24 0.1 - 28 0.1 - 31 0.2 - 42 0.1 - 47 0.1 - - 65 1 1 0 - 45 1 - - 69 17 5 0 - 0 0.353 - 13 0.0588 - 14 0.353 - 21 0.0588 - 41 0.176 - - 48 82 14 3 - 0 0.39 - 1 0.0122 - 2 0.0366 - 4 0.0488 - 7 0.0244 - 13 0.0366 - 14 0.0488 - 21 0.0488 - 28 0.0244 - 29 0.0122 - 41 0.171 - 42 0.0366 - 45 0.0488 - 47 0.061 - - 41 24 7 0 - 0 0.333 - 14 0.0417 - 21 0.0833 - 28 0.0417 - 41 0.333 - 45 0.0417 - 47 0.125 - - 46 2 1 0 - 45 1 - - 47 2 2 0 - 14 0.5 - 42 0.5 - - 49 40 14 1 - 0 0.175 - 2 0.025 - 4 0.05 - 7 0.075 - 13 0.075 - 14 0.125 - 21 0.05 - 28 0.1 - 29 0.025 - 30 0.025 - 31 0.025 - 41 0.175 - 42 0.025 - 47 0.05 - - 41 7 4 0 - 13 0.286 - 21 0.143 - 29 0.143 - 41 0.429 - - 50 4 1 0 - 41 1 - - 51 2 2 0 - 28 0.5 - 42 0.5 - - 52 1 1 0 - 45 1 - - 55 85 19 3 - 0 0.176 - 4 0.0118 - 7 0.106 - 13 0.0235 - 14 0.106 - 19 0.0235 - 21 0.0471 - 26 0.0118 - 28 0.0471 - 30 0.0235 - 31 0.0235 - 32 0.0118 - 33 0.0235 - 41 0.176 - 42 0.118 - 44 0.0118 - 45 0.0118 - 46 0.0235 - 47 0.0235 - - 2 49 17 0 - 0 0.163 - 4 0.0204 - 7 0.143 - 13 0.0408 - 14 0.163 - 19 0.0204 - 21 0.0408 - 26 0.0204 - 28 0.0408 - 30 0.0408 - 31 0.0408 - 32 0.0204 - 33 0.0204 - 41 0.143 - 42 0.0204 - 45 0.0204 - 47 0.0408 - - 41 20 8 0 - 0 0.3 - 7 0.1 - 19 0.05 - 28 0.1 - 33 0.05 - 41 0.25 - 42 0.1 - 44 0.05 - - 47 15 5 0 - 14 0.0667 - 21 0.133 - 41 0.2 - 42 0.467 - 46 0.133 - - 57 75 19 2 - 0 0.133 - 2 0.0133 - 7 0.0133 - 8 0.0133 - 13 0.173 - 14 0.133 - 15 0.0533 - 19 0.0133 - 21 0.04 - 24 0.0133 - 28 0.0267 - 29 0.0267 - 30 0.04 - 31 0.147 - 33 0.0133 - 41 0.08 - 42 0.0133 - 45 0.0133 - 47 0.04 - - 2 53 15 0 - 0 0.113 - 2 0.0189 - 7 0.0189 - 8 0.0189 - 13 0.151 - 14 0.189 - 15 0.0566 - 21 0.0566 - 24 0.0189 - 28 0.0189 - 29 0.0377 - 30 0.0189 - 31 0.151 - 41 0.113 - 47 0.0189 - - 41 19 11 0 - 0 0.211 - 13 0.158 - 15 0.0526 - 19 0.0526 - 28 0.0526 - 30 0.105 - 31 0.158 - 33 0.0526 - 42 0.0526 - 45 0.0526 - 47 0.0526 - - 62 19 9 2 - 7 0.0526 - 14 0.0526 - 21 0.0526 - 31 0.105 - 41 0.158 - 42 0.105 - 45 0.0526 - 46 0.0526 - 47 0.368 - - 2 7 5 0 - 7 0.143 - 14 0.143 - 31 0.286 - 41 0.286 - 46 0.143 - - 42 5 1 0 - 47 1 - - 64 11 8 0 - 0 0.0909 - 8 0.0909 - 13 0.182 - 24 0.0909 - 28 0.0909 - 31 0.182 - 42 0.182 - 47 0.0909 - - 65 3 1 0 - 45 1 - - 67 2 1 0 - 45 1 - - 69 19 5 0 - 0 0.316 - 13 0.0526 - 14 0.316 - 21 0.0526 - 41 0.263 - - 71 2 2 0 - 31 0.5 - 47 0.5 - -69 294981 43 37 - 0 0.105 - 1 0.00265 - 2 0.0256 - 3 0.00552 - 4 0.00905 - 5 0.00567 - 6 9.49e-05 - 7 0.0229 - 8 0.00961 - 9 0.000532 - 10 0.000431 - 12 0.0558 - 13 0.14 - 14 0.108 - 15 0.0833 - 16 0.00388 - 18 0.000919 - 19 0.0976 - 20 9.49e-05 - 21 0.0678 - 22 0.000427 - 23 0.000122 - 24 0.00078 - 25 2.37e-05 - 26 0.0912 - 27 1.36e-05 - 28 0.00706 - 29 0.00917 - 30 0.00623 - 31 0.0111 - 32 0.00412 - 33 0.00631 - 34 0.0243 - 35 0.0121 - 37 0.000692 - 40 7.12e-05 - 41 0.0548 - 42 0.00322 - 43 0.00148 - 44 0.000363 - 45 0.00512 - 46 0.0116 - 47 0.00527 - - 0 33828 41 0 - 0 0.0459 - 1 0.000443 - 2 0.0164 - 3 0.00573 - 4 0.0196 - 5 0.0219 - 6 0.000118 - 7 0.00198 - 8 0.00399 - 9 0.000236 - 10 0.000709 - 12 0.0834 - 13 0.183 - 14 0.139 - 15 0.0942 - 16 0.00562 - 18 0.0013 - 19 0.154 - 20 8.87e-05 - 21 0.0574 - 22 0.000118 - 23 2.96e-05 - 24 0.000177 - 26 0.0434 - 28 0.00121 - 29 0.00127 - 30 0.00139 - 31 0.0018 - 32 0.00106 - 33 0.000709 - 34 0.0345 - 35 0.0178 - 37 5.91e-05 - 40 2.96e-05 - 41 0.0478 - 42 0.00328 - 43 0.00207 - 44 2.96e-05 - 45 0.00532 - 46 0.00316 - 47 0.000207 - - 1 555 24 0 - 0 0.342 - 2 0.018 - 4 0.0036 - 7 0.245 - 8 0.0018 - 13 0.0613 - 14 0.0721 - 15 0.00541 - 19 0.00541 - 20 0.0036 - 21 0.101 - 24 0.00541 - 26 0.0198 - 28 0.0126 - 29 0.0036 - 31 0.0036 - 32 0.0018 - 33 0.0036 - 41 0.0378 - 42 0.0036 - 43 0.0036 - 45 0.0144 - 46 0.0036 - 47 0.027 - - 2 411 19 14 - 0 0.00243 - 7 0.00487 - 8 0.00973 - 12 0.017 - 13 0.00973 - 14 0.0146 - 15 0.00487 - 28 0.338 - 29 0.0779 - 30 0.151 - 31 0.173 - 32 0.0779 - 33 0.09 - 34 0.00243 - 41 0.0146 - 42 0.00243 - 43 0.00243 - 44 0.00243 - 46 0.00487 - - 0 2 2 0 - 8 0.5 - 12 0.5 - - 8 2 1 0 - 8 1 - - 12 3 1 0 - 12 1 - - 13 2 1 0 - 13 1 - - 21 2 2 0 - 28 0.5 - 46 0.5 - - 28 142 4 0 - 28 0.972 - 41 0.0141 - 42 0.00704 - 43 0.00704 - - 29 33 2 0 - 29 0.97 - 41 0.0303 - - 30 64 3 0 - 7 0.0156 - 8 0.0156 - 30 0.969 - - 31 73 3 0 - 31 0.973 - 41 0.0137 - 44 0.0137 - - 32 34 3 0 - 0 0.0294 - 32 0.941 - 41 0.0294 - - 33 37 1 0 - 33 1 - - 45 1 1 0 - 46 1 - - 47 1 1 0 - 15 1 - - 69 13 6 0 - 7 0.0769 - 12 0.231 - 13 0.154 - 14 0.385 - 15 0.0769 - 34 0.0769 - - 4 9 6 0 - 0 0.111 - 7 0.111 - 13 0.111 - 19 0.111 - 26 0.222 - 41 0.333 - - 7 23 6 0 - 0 0.522 - 8 0.0435 - 13 0.087 - 14 0.0435 - 21 0.261 - 41 0.0435 - - 8 152 22 1 - 0 0.283 - 1 0.0132 - 2 0.0329 - 4 0.0197 - 7 0.0658 - 8 0.00658 - 13 0.0329 - 14 0.0724 - 15 0.0132 - 16 0.00658 - 19 0.00658 - 21 0.25 - 22 0.0197 - 23 0.00658 - 26 0.0526 - 28 0.0132 - 29 0.0132 - 32 0.00658 - 41 0.0395 - 45 0.0263 - 46 0.00658 - 47 0.0132 - - 2 3 2 0 - 4 0.667 - 22 0.333 - - 12 9669 37 0 - 0 0.000207 - 2 0.0233 - 3 0.00776 - 4 0.0185 - 5 0.00755 - 6 0.000207 - 7 0.00114 - 8 0.00259 - 9 0.00031 - 10 0.000207 - 12 0.000103 - 13 0.242 - 14 0.173 - 15 0.106 - 16 0.00641 - 18 0.00103 - 19 0.222 - 21 0.0332 - 22 0.00031 - 23 0.000103 - 24 0.000103 - 28 0.00124 - 29 0.00124 - 30 0.000931 - 31 0.00238 - 32 0.00207 - 33 0.00176 - 34 0.0602 - 35 0.0146 - 40 0.000103 - 41 0.0506 - 42 0.00434 - 43 0.00321 - 44 0.000103 - 45 0.00858 - 46 0.0031 - 47 0.000103 - - 13 318 31 3 - 0 0.0252 - 1 0.00943 - 2 0.0629 - 3 0.066 - 4 0.0377 - 7 0.145 - 8 0.0252 - 10 0.0126 - 12 0.00314 - 13 0.164 - 14 0.0283 - 15 0.0377 - 16 0.00943 - 18 0.00314 - 19 0.00314 - 21 0.066 - 24 0.00629 - 26 0.151 - 28 0.0252 - 29 0.0189 - 30 0.00943 - 31 0.0157 - 32 0.00629 - 34 0.00314 - 37 0.00314 - 41 0.0346 - 42 0.00314 - 43 0.00314 - 45 0.00943 - 46 0.00314 - 47 0.00943 - - 2 2 2 0 - 7 0.5 - 31 0.5 - - 28 3 3 0 - 7 0.333 - 12 0.333 - 45 0.333 - - 69 12 6 0 - 2 0.0833 - 3 0.0833 - 13 0.583 - 15 0.0833 - 18 0.0833 - 41 0.0833 - - 14 122 21 0 - 0 0.0656 - 2 0.123 - 3 0.0328 - 4 0.0082 - 7 0.041 - 8 0.0246 - 13 0.262 - 14 0.0164 - 15 0.254 - 18 0.0082 - 19 0.0164 - 21 0.0082 - 30 0.0082 - 34 0.0082 - 35 0.0164 - 41 0.0574 - 42 0.0082 - 43 0.0082 - 45 0.0164 - 46 0.0082 - 47 0.0082 - - 15 37 10 0 - 0 0.108 - 2 0.027 - 7 0.0541 - 15 0.297 - 18 0.027 - 26 0.0541 - 33 0.027 - 42 0.027 - 45 0.162 - 47 0.216 - - 18 30 6 0 - 4 0.1 - 5 0.367 - 7 0.0667 - 13 0.0667 - 19 0.367 - 34 0.0333 - - 21 80 22 8 - 0 0.1 - 1 0.0125 - 2 0.0875 - 7 0.112 - 8 0.025 - 10 0.0125 - 12 0.112 - 13 0.15 - 14 0.0625 - 16 0.0125 - 19 0.0875 - 21 0.0375 - 26 0.0375 - 28 0.0125 - 29 0.0125 - 31 0.0125 - 32 0.0125 - 35 0.0125 - 41 0.05 - 42 0.0125 - 45 0.0125 - 47 0.0125 - - 0 4 2 0 - 12 0.25 - 19 0.75 - - 26 4 3 0 - 2 0.25 - 13 0.5 - 31 0.25 - - 28 9 6 0 - 2 0.444 - 7 0.111 - 12 0.111 - 13 0.111 - 16 0.111 - 42 0.111 - - 30 12 7 0 - 0 0.0833 - 7 0.25 - 13 0.25 - 19 0.0833 - 26 0.0833 - 32 0.0833 - 41 0.167 - - 31 10 5 0 - 0 0.1 - 7 0.1 - 14 0.5 - 41 0.2 - 47 0.1 - - 47 15 10 0 - 0 0.267 - 1 0.0667 - 2 0.0667 - 7 0.0667 - 10 0.0667 - 13 0.0667 - 21 0.133 - 26 0.133 - 28 0.0667 - 29 0.0667 - - 49 7 6 0 - 0 0.143 - 7 0.143 - 8 0.143 - 13 0.286 - 19 0.143 - 45 0.143 - - 69 13 6 0 - 8 0.0769 - 12 0.538 - 13 0.0769 - 19 0.154 - 21 0.0769 - 35 0.0769 - - 22 3 1 0 - 0 1 - - 26 13048 39 0 - 0 0.0513 - 1 0.00107 - 2 0.0104 - 3 0.018 - 4 0.00107 - 5 7.66e-05 - 6 0.000153 - 7 0.00613 - 8 0.084 - 9 0.00429 - 10 0.00046 - 12 0.00245 - 13 0.2 - 14 0.114 - 15 0.0403 - 16 0.00215 - 18 0.000153 - 19 0.0154 - 21 0.0327 - 22 0.000996 - 23 0.000153 - 24 0.00452 - 26 7.66e-05 - 28 0.0401 - 29 0.073 - 30 0.0567 - 31 0.105 - 32 0.0336 - 33 0.0583 - 34 0.000307 - 35 0.00115 - 37 0.00452 - 41 0.0174 - 42 0.00268 - 43 0.00115 - 44 0.000383 - 45 0.00261 - 46 0.0049 - 47 0.00897 - - 28 21028 36 3 - 0 0.00471 - 1 4.76e-05 - 2 0.0342 - 3 4.76e-05 - 4 0.000856 - 7 0.00185 - 8 0.00019 - 10 0.00019 - 12 0.238 - 13 0.00623 - 14 0.00923 - 15 0.00385 - 16 4.76e-05 - 18 0.000143 - 19 0.00956 - 21 0.117 - 22 0.00105 - 23 9.51e-05 - 26 0.538 - 27 9.51e-05 - 28 0.00518 - 29 0.00271 - 30 0.000476 - 31 0.000618 - 32 0.000666 - 33 0.000808 - 34 0.00019 - 35 0.000428 - 40 0.000333 - 41 0.00704 - 42 0.00195 - 43 0.000333 - 44 0.000666 - 45 0.00818 - 46 0.000238 - 47 0.0049 - - 2 139 9 0 - 2 0.0144 - 12 0.137 - 13 0.00719 - 14 0.0144 - 15 0.00719 - 21 0.0719 - 26 0.669 - 41 0.0647 - 45 0.0144 - - 41 17 6 0 - 0 0.0588 - 12 0.294 - 21 0.0588 - 26 0.353 - 33 0.0588 - 41 0.176 - - 46 2 1 0 - 45 1 - - 29 21706 36 1 - 0 0.00438 - 1 0.00101 - 2 0.0333 - 3 0.00604 - 4 0.00392 - 7 0.00143 - 8 0.00207 - 9 0.000184 - 10 9.21e-05 - 12 0.000276 - 13 0.196 - 14 0.136 - 15 0.23 - 16 0.00792 - 18 0.0018 - 19 0.133 - 21 0.0658 - 22 0.000322 - 23 4.61e-05 - 26 0.000138 - 28 9.21e-05 - 29 0.000322 - 30 0.000461 - 31 0.000921 - 32 4.61e-05 - 33 0.000138 - 34 0.0313 - 35 0.0208 - 37 9.21e-05 - 41 0.0885 - 42 0.0024 - 43 0.00147 - 44 9.21e-05 - 45 0.00235 - 46 0.0266 - 47 0.000645 - - 2 32 10 0 - 2 0.0312 - 13 0.156 - 14 0.0625 - 15 0.156 - 19 0.188 - 21 0.188 - 22 0.0312 - 35 0.125 - 41 0.0312 - 45 0.0312 - - 30 11273 33 1 - 0 0.265 - 2 0.0353 - 3 0.00284 - 4 0.00213 - 7 0.227 - 8 0.00319 - 9 8.87e-05 - 10 0.000355 - 13 0.0685 - 14 0.0679 - 15 0.0108 - 16 0.000621 - 18 0.00115 - 19 0.00337 - 20 0.00071 - 21 0.0726 - 22 0.000355 - 24 0.00364 - 26 0.0114 - 28 0.0184 - 29 0.0169 - 30 0.00337 - 31 0.00523 - 32 0.00417 - 33 0.0047 - 37 0.0016 - 41 0.126 - 42 0.00523 - 43 0.000266 - 44 0.000532 - 45 0.00772 - 46 0.00408 - 47 0.0245 - - 2 62 14 0 - 0 0.0968 - 2 0.0161 - 3 0.0161 - 7 0.355 - 13 0.0323 - 14 0.0968 - 15 0.0161 - 19 0.0323 - 21 0.0806 - 22 0.0161 - 26 0.113 - 28 0.0323 - 33 0.0161 - 41 0.0806 - - 31 15631 38 1 - 0 0.586 - 1 0.0204 - 2 0.0168 - 3 0.00448 - 4 0.00435 - 6 6.4e-05 - 7 0.0117 - 8 0.00032 - 9 0.000128 - 10 0.000256 - 12 0.00032 - 13 0.0843 - 14 0.0769 - 15 0.00409 - 16 0.000384 - 18 0.000256 - 19 0.00186 - 21 0.11 - 22 0.000768 - 23 0.00109 - 26 0.000128 - 28 0.00211 - 29 0.00211 - 30 0.000768 - 31 0.00102 - 32 0.000768 - 33 0.00122 - 34 0.000256 - 35 0.000128 - 37 0.00109 - 40 6.4e-05 - 41 0.047 - 42 0.00237 - 43 0.000448 - 44 0.00147 - 45 0.00333 - 46 0.00224 - 47 0.0094 - - 2 71 8 0 - 0 0.69 - 1 0.0563 - 13 0.0141 - 14 0.0423 - 19 0.0141 - 21 0.0986 - 41 0.0704 - 45 0.0141 - - 32 5414 31 1 - 2 0.0296 - 3 0.00166 - 4 0.0133 - 7 0.00129 - 8 0.00332 - 9 0.000369 - 10 0.00222 - 12 0.000185 - 13 0.0334 - 14 0.401 - 15 0.0253 - 16 0.0105 - 18 0.000739 - 19 0.248 - 21 0.0876 - 22 0.000185 - 23 0.000185 - 29 0.000185 - 30 0.000369 - 31 0.00185 - 32 0.000369 - 33 0.000369 - 34 0.0567 - 35 0.0412 - 37 0.000185 - 41 0.0292 - 42 0.00332 - 43 0.00259 - 45 0.00314 - 46 0.00148 - 47 0.000185 - - 2 32 7 0 - 2 0.0312 - 14 0.406 - 19 0.219 - 21 0.0312 - 34 0.156 - 35 0.0625 - 41 0.0938 - - 33 9604 31 2 - 2 0.0311 - 3 0.00281 - 4 0.0167 - 5 0.000625 - 6 0.000416 - 7 0.00198 - 8 0.00167 - 9 0.000104 - 10 0.000104 - 13 0.207 - 14 0.0117 - 15 0.162 - 16 0.0025 - 18 0.000937 - 19 0.192 - 21 0.0798 - 22 0.000312 - 25 0.000312 - 28 0.000104 - 29 0.000625 - 30 0.000416 - 31 0.000521 - 32 0.000312 - 34 0.0715 - 35 0.0271 - 41 0.0868 - 42 0.00344 - 43 0.00281 - 45 0.00573 - 46 0.0842 - 47 0.00375 - - 2 37 10 0 - 8 0.027 - 13 0.189 - 15 0.189 - 16 0.027 - 18 0.027 - 19 0.0811 - 21 0.027 - 34 0.243 - 35 0.0541 - 41 0.135 - - 41 2 2 0 - 2 0.5 - 34 0.5 - - 41 83 16 15 - 0 0.012 - 2 0.0482 - 3 0.012 - 8 0.0241 - 12 0.012 - 13 0.205 - 14 0.012 - 15 0.0482 - 19 0.0361 - 21 0.145 - 28 0.205 - 29 0.0241 - 30 0.0361 - 31 0.0843 - 32 0.0723 - 33 0.0241 - - 0 5 3 0 - 13 0.6 - 14 0.2 - 21 0.2 - - 2 6 4 0 - 28 0.333 - 29 0.167 - 31 0.333 - 32 0.167 - - 12 4 2 0 - 13 0.5 - 19 0.5 - - 26 5 2 0 - 13 0.6 - 21 0.4 - - 28 14 2 0 - 21 0.0714 - 28 0.929 - - 29 7 4 0 - 13 0.286 - 15 0.429 - 21 0.143 - 29 0.143 - - 30 2 1 0 - 30 1 - - 31 6 2 0 - 21 0.167 - 31 0.833 - - 32 4 1 0 - 32 1 - - 33 2 1 0 - 33 1 - - 49 6 5 0 - 2 0.167 - 12 0.167 - 13 0.333 - 21 0.167 - 28 0.167 - - 55 5 3 0 - 3 0.2 - 13 0.6 - 19 0.2 - - 57 5 3 0 - 2 0.6 - 8 0.2 - 21 0.2 - - 64 3 2 0 - 8 0.333 - 21 0.667 - - 69 6 4 0 - 13 0.333 - 15 0.167 - 21 0.333 - 30 0.167 - - 42 7 3 0 - 25 0.143 - 28 0.143 - 47 0.714 - - 44 5 4 0 - 13 0.4 - 19 0.2 - 26 0.2 - 31 0.2 - - 45 119 15 9 - 0 0.193 - 2 0.0336 - 4 0.0168 - 6 0.0084 - 7 0.0336 - 12 0.0924 - 13 0.134 - 14 0.0588 - 15 0.0252 - 19 0.0672 - 21 0.0672 - 26 0.193 - 28 0.0168 - 35 0.0084 - 41 0.0504 - - 0 6 5 0 - 13 0.167 - 14 0.167 - 15 0.167 - 35 0.167 - 41 0.333 - - 28 35 5 0 - 0 0.0286 - 2 0.0286 - 12 0.2 - 21 0.114 - 26 0.629 - - 29 14 5 0 - 13 0.357 - 14 0.143 - 15 0.143 - 19 0.286 - 41 0.0714 - - 30 15 6 0 - 0 0.267 - 7 0.2 - 14 0.0667 - 21 0.2 - 28 0.133 - 41 0.133 - - 31 14 5 0 - 0 0.714 - 2 0.0714 - 13 0.0714 - 14 0.0714 - 21 0.0714 - - 32 4 3 0 - 2 0.25 - 14 0.25 - 19 0.5 - - 33 8 3 0 - 2 0.125 - 13 0.75 - 19 0.125 - - 49 10 7 0 - 0 0.3 - 4 0.1 - 12 0.2 - 13 0.1 - 14 0.1 - 26 0.1 - 41 0.1 - - 69 9 6 0 - 0 0.333 - 4 0.111 - 6 0.111 - 12 0.111 - 13 0.222 - 19 0.111 - - 46 4 3 0 - 0 0.25 - 21 0.25 - 28 0.5 - - 47 145999 43 35 - 0 0.106 - 1 0.00268 - 2 0.0245 - 3 0.00554 - 4 0.00909 - 5 0.00573 - 6 9.59e-05 - 7 0.023 - 8 0.00966 - 9 0.000527 - 10 0.000404 - 12 0.0564 - 13 0.141 - 14 0.109 - 15 0.0841 - 16 0.00392 - 18 0.000918 - 19 0.0986 - 20 9.59e-05 - 21 0.0628 - 22 0.000363 - 23 6.16e-05 - 24 0.000788 - 25 2.05e-05 - 26 0.0921 - 27 1.37e-05 - 28 0.00658 - 29 0.00915 - 30 0.00608 - 31 0.011 - 32 0.00403 - 33 0.00624 - 34 0.0245 - 35 0.0122 - 37 0.000699 - 40 6.85e-05 - 41 0.0551 - 42 0.00323 - 43 0.00149 - 44 0.000349 - 45 0.00476 - 46 0.0117 - 47 0.00533 - - 0 33747 40 0 - 0 0.046 - 1 0.000444 - 2 0.0164 - 3 0.00572 - 4 0.0196 - 5 0.022 - 6 0.000119 - 7 0.00199 - 8 0.004 - 9 0.000237 - 10 0.000711 - 12 0.0836 - 13 0.183 - 14 0.139 - 15 0.0945 - 16 0.00563 - 18 0.0013 - 19 0.155 - 20 8.89e-05 - 21 0.0558 - 22 0.000119 - 23 2.96e-05 - 24 0.000178 - 26 0.0435 - 28 0.00121 - 29 0.00127 - 30 0.00139 - 31 0.00181 - 32 0.00107 - 33 0.000711 - 34 0.0346 - 35 0.0179 - 37 5.93e-05 - 40 2.96e-05 - 41 0.0477 - 42 0.00329 - 43 0.00207 - 45 0.00516 - 46 0.00317 - 47 0.000207 - - 1 547 24 0 - 0 0.347 - 2 0.0183 - 4 0.00366 - 7 0.249 - 8 0.00183 - 13 0.0622 - 14 0.0731 - 15 0.00548 - 19 0.00548 - 20 0.00366 - 21 0.0878 - 24 0.00548 - 26 0.0201 - 28 0.0128 - 29 0.00366 - 31 0.00366 - 32 0.00183 - 33 0.00366 - 41 0.0384 - 42 0.00366 - 43 0.00366 - 45 0.0146 - 46 0.00366 - 47 0.0274 - - 2 16 6 0 - 7 0.125 - 12 0.25 - 13 0.125 - 14 0.312 - 15 0.125 - 34 0.0625 - - 4 9 6 0 - 0 0.111 - 7 0.111 - 13 0.111 - 19 0.111 - 26 0.222 - 41 0.333 - - 7 23 6 0 - 0 0.522 - 8 0.0435 - 13 0.087 - 14 0.0435 - 21 0.261 - 41 0.0435 - - 8 124 20 0 - 0 0.347 - 1 0.0161 - 2 0.0242 - 4 0.0161 - 7 0.0645 - 8 0.00806 - 13 0.0403 - 14 0.0887 - 15 0.0161 - 16 0.00806 - 19 0.00806 - 21 0.169 - 26 0.0645 - 28 0.0161 - 29 0.0161 - 32 0.00806 - 41 0.0484 - 45 0.0161 - 46 0.00806 - 47 0.0161 - - 12 9643 36 0 - 0 0.000207 - 2 0.023 - 3 0.00778 - 4 0.0186 - 5 0.00757 - 6 0.000207 - 7 0.00114 - 8 0.00259 - 9 0.000311 - 10 0.000207 - 12 0.000104 - 13 0.243 - 14 0.174 - 15 0.106 - 16 0.00643 - 18 0.00104 - 19 0.222 - 21 0.0317 - 22 0.000311 - 23 0.000104 - 24 0.000104 - 28 0.00124 - 29 0.00124 - 30 0.000933 - 31 0.00239 - 32 0.00207 - 33 0.00176 - 34 0.0604 - 35 0.0146 - 40 0.000104 - 41 0.0502 - 42 0.00436 - 43 0.00321 - 45 0.00861 - 46 0.00301 - 47 0.000104 - - 13 311 31 0 - 0 0.0257 - 1 0.00965 - 2 0.0579 - 3 0.0675 - 4 0.0386 - 7 0.148 - 8 0.0257 - 10 0.00643 - 12 0.00322 - 13 0.164 - 14 0.0289 - 15 0.0386 - 16 0.00965 - 18 0.00322 - 19 0.00322 - 21 0.0675 - 24 0.00643 - 26 0.154 - 28 0.0257 - 29 0.0193 - 30 0.00965 - 31 0.0161 - 32 0.00643 - 34 0.00322 - 37 0.00322 - 41 0.0354 - 42 0.00322 - 43 0.00322 - 45 0.00322 - 46 0.00322 - 47 0.00965 - - 14 121 21 0 - 0 0.0661 - 2 0.116 - 3 0.0331 - 4 0.00826 - 7 0.0413 - 8 0.0248 - 13 0.264 - 14 0.0165 - 15 0.256 - 18 0.00826 - 19 0.0165 - 21 0.00826 - 30 0.00826 - 34 0.00826 - 35 0.0165 - 41 0.0579 - 42 0.00826 - 43 0.00826 - 45 0.0165 - 46 0.00826 - 47 0.00826 - - 15 37 10 0 - 0 0.108 - 2 0.027 - 7 0.0541 - 15 0.297 - 18 0.027 - 26 0.0541 - 33 0.027 - 42 0.027 - 45 0.162 - 47 0.216 - - 18 30 6 0 - 4 0.1 - 5 0.367 - 7 0.0667 - 13 0.0667 - 19 0.367 - 34 0.0333 - - 21 72 21 0 - 0 0.0972 - 1 0.0139 - 2 0.0694 - 7 0.111 - 8 0.0278 - 12 0.125 - 13 0.153 - 14 0.0694 - 16 0.0139 - 19 0.0972 - 21 0.0139 - 26 0.0417 - 28 0.0139 - 29 0.0139 - 31 0.0139 - 32 0.0139 - 35 0.0139 - 41 0.0556 - 42 0.0139 - 45 0.0139 - 47 0.0139 - - 22 3 1 0 - 0 1 - - 26 13034 39 0 - 0 0.0514 - 1 0.00107 - 2 0.0104 - 3 0.018 - 4 0.000997 - 5 7.67e-05 - 6 0.000153 - 7 0.00606 - 8 0.0841 - 9 0.0043 - 10 0.00046 - 12 0.00246 - 13 0.2 - 14 0.114 - 15 0.0404 - 16 0.00215 - 18 0.000153 - 19 0.0154 - 21 0.0322 - 22 0.000997 - 23 0.000153 - 24 0.00453 - 26 7.67e-05 - 28 0.0401 - 29 0.0731 - 30 0.0568 - 31 0.105 - 32 0.0337 - 33 0.0584 - 34 0.000307 - 35 0.00115 - 37 0.00453 - 41 0.017 - 42 0.00269 - 43 0.00115 - 44 0.000384 - 45 0.00261 - 46 0.00491 - 47 0.00898 - - 28 20589 35 0 - 0 0.00481 - 1 4.86e-05 - 2 0.028 - 3 4.86e-05 - 4 0.000777 - 7 0.0016 - 8 0.000194 - 10 9.71e-05 - 12 0.243 - 13 0.00612 - 14 0.00937 - 15 0.00393 - 16 4.86e-05 - 18 0.000146 - 19 0.00976 - 21 0.109 - 22 0.000486 - 26 0.55 - 27 9.71e-05 - 28 0.00525 - 29 0.00277 - 30 0.000486 - 31 0.000631 - 32 0.00068 - 33 0.000826 - 34 0.000194 - 35 0.000437 - 40 0.000291 - 41 0.00641 - 42 0.00175 - 43 0.000291 - 44 0.000631 - 45 0.00665 - 46 0.000243 - 47 0.005 - - 29 21355 36 0 - 0 0.00445 - 1 0.00103 - 2 0.0322 - 3 0.00609 - 4 0.00393 - 7 0.00103 - 8 0.00206 - 9 0.000187 - 10 4.68e-05 - 12 0.000281 - 13 0.199 - 14 0.138 - 15 0.234 - 16 0.00805 - 18 0.00183 - 19 0.135 - 21 0.0543 - 22 0.000328 - 23 4.68e-05 - 26 0.00014 - 28 9.37e-05 - 29 0.000328 - 30 0.000468 - 31 0.000937 - 32 4.68e-05 - 33 0.00014 - 34 0.0318 - 35 0.0212 - 37 9.37e-05 - 41 0.0896 - 42 0.00244 - 43 0.0015 - 44 4.68e-05 - 45 0.00173 - 46 0.0271 - 47 0.000656 - - 30 10957 33 0 - 0 0.273 - 2 0.0305 - 3 0.00292 - 4 0.0021 - 7 0.234 - 8 0.00301 - 9 9.13e-05 - 10 0.000365 - 13 0.0703 - 14 0.0698 - 15 0.0111 - 16 0.000639 - 18 0.00119 - 19 0.00347 - 20 0.00073 - 21 0.0539 - 22 0.000365 - 24 0.00374 - 26 0.0118 - 28 0.0189 - 29 0.0174 - 30 0.00347 - 31 0.00538 - 32 0.00429 - 33 0.00484 - 37 0.00164 - 41 0.129 - 42 0.00538 - 43 0.000274 - 44 0.000548 - 45 0.00657 - 46 0.0042 - 47 0.0252 - - 31 14933 38 0 - 0 0.613 - 1 0.0214 - 2 0.0127 - 3 0.00469 - 4 0.00449 - 6 6.7e-05 - 7 0.0115 - 8 0.000335 - 9 0.000134 - 10 0.000134 - 12 0.000335 - 13 0.088 - 14 0.0805 - 15 0.00429 - 16 0.000402 - 18 0.000268 - 19 0.00194 - 21 0.0765 - 22 0.000603 - 23 0.000268 - 26 0.000134 - 28 0.00221 - 29 0.00221 - 30 0.000804 - 31 0.00107 - 32 0.000804 - 33 0.00127 - 34 0.000268 - 35 0.000134 - 37 0.00114 - 40 6.7e-05 - 41 0.0488 - 42 0.00248 - 43 0.000469 - 44 0.00154 - 45 0.00254 - 46 0.00234 - 47 0.00984 - - 32 5292 30 0 - 2 0.0238 - 3 0.0017 - 4 0.0136 - 7 0.000945 - 8 0.0034 - 9 0.000378 - 10 0.00227 - 12 0.000189 - 13 0.034 - 14 0.41 - 15 0.0259 - 16 0.0108 - 18 0.000756 - 19 0.254 - 21 0.0752 - 22 0.000189 - 29 0.000189 - 30 0.000378 - 31 0.00189 - 32 0.000378 - 33 0.000378 - 34 0.058 - 35 0.0421 - 37 0.000189 - 41 0.0291 - 42 0.0034 - 43 0.00265 - 45 0.00246 - 46 0.00151 - 47 0.000189 - - 33 9413 30 0 - 2 0.0278 - 3 0.00287 - 4 0.017 - 5 0.000637 - 6 0.000425 - 7 0.00181 - 8 0.0017 - 9 0.000106 - 13 0.212 - 14 0.0119 - 15 0.166 - 16 0.00255 - 18 0.000956 - 19 0.196 - 21 0.0667 - 22 0.000212 - 25 0.000319 - 28 0.000106 - 29 0.000637 - 30 0.000425 - 31 0.000531 - 32 0.000319 - 34 0.073 - 35 0.0276 - 41 0.0882 - 42 0.00351 - 43 0.00287 - 45 0.00499 - 46 0.0859 - 47 0.00382 - - 41 7 4 0 - 0 0.143 - 2 0.571 - 12 0.143 - 21 0.143 - - 42 5 1 0 - 47 1 - - 45 114 15 0 - 0 0.202 - 2 0.0263 - 4 0.00877 - 6 0.00877 - 7 0.0351 - 12 0.0965 - 13 0.14 - 14 0.0614 - 15 0.0263 - 19 0.0702 - 21 0.0439 - 26 0.202 - 28 0.0175 - 35 0.00877 - 41 0.0526 - - 48 40 3 0 - 2 0.925 - 21 0.025 - 41 0.05 - - 49 1672 33 0 - 0 0.197 - 1 0.00538 - 2 0.145 - 3 0.00359 - 4 0.00718 - 7 0.0317 - 8 0.0012 - 10 0.0012 - 12 0.0514 - 13 0.106 - 14 0.103 - 15 0.0532 - 16 0.00239 - 18 0.000598 - 19 0.0371 - 21 0.0568 - 26 0.0359 - 28 0.0012 - 29 0.00239 - 30 0.0012 - 31 0.0012 - 32 0.000598 - 33 0.000598 - 34 0.0179 - 35 0.0102 - 37 0.0012 - 41 0.101 - 42 0.00538 - 43 0.000598 - 44 0.00179 - 45 0.00478 - 46 0.00299 - 47 0.00897 - - 50 8 7 0 - 0 0.125 - 13 0.125 - 14 0.125 - 15 0.25 - 30 0.125 - 33 0.125 - 41 0.125 - - 53 1 1 0 - 42 1 - - 55 113 11 0 - 0 0.0619 - 2 0.708 - 7 0.0177 - 14 0.0177 - 15 0.00885 - 19 0.0177 - 21 0.00885 - 26 0.0177 - 40 0.00885 - 41 0.106 - 42 0.0265 - - 57 77 6 0 - 0 0.234 - 2 0.558 - 12 0.039 - 15 0.013 - 21 0.039 - 41 0.117 - - 58 8 4 0 - 2 0.625 - 12 0.125 - 41 0.125 - 42 0.125 - - 60 2 2 0 - 0 0.5 - 2 0.5 - - 62 5 2 0 - 2 0.8 - 15 0.2 - - 64 7 4 0 - 0 0.286 - 2 0.429 - 7 0.143 - 41 0.143 - - 69 3673 34 0 - 0 0.0792 - 1 0.00136 - 2 0.00327 - 3 0.00163 - 4 0.00517 - 5 0.000817 - 7 0.0343 - 8 0.00463 - 10 0.000545 - 12 0.0686 - 13 0.141 - 14 0.107 - 15 0.116 - 16 0.00436 - 18 0.000545 - 19 0.106 - 20 0.000272 - 21 0.0482 - 24 0.000817 - 26 0.1 - 28 0.00327 - 29 0.0049 - 30 0.00218 - 31 0.0049 - 32 0.00218 - 33 0.00272 - 34 0.0302 - 35 0.0166 - 41 0.0803 - 42 0.00762 - 43 0.00191 - 45 0.00871 - 46 0.00299 - 47 0.00681 - - 74 1 1 0 - 47 1 - - 48 42 4 0 - 2 0.881 - 9 0.0238 - 21 0.0476 - 41 0.0476 - - 49 1717 34 19 - 0 0.192 - 1 0.00524 - 2 0.142 - 3 0.00466 - 4 0.00699 - 7 0.0309 - 8 0.00116 - 10 0.00116 - 12 0.0501 - 13 0.104 - 14 0.102 - 15 0.0524 - 16 0.00233 - 18 0.000582 - 19 0.0361 - 21 0.0658 - 22 0.000582 - 26 0.0349 - 28 0.00116 - 29 0.00233 - 30 0.00116 - 31 0.00116 - 32 0.000582 - 33 0.000582 - 34 0.0175 - 35 0.0099 - 37 0.00116 - 41 0.103 - 42 0.00524 - 43 0.000582 - 44 0.00175 - 45 0.0105 - 46 0.00291 - 47 0.00874 - - 0 55 10 0 - 0 0.0364 - 2 0.491 - 7 0.0182 - 12 0.0545 - 13 0.0909 - 15 0.0909 - 19 0.0727 - 21 0.0727 - 35 0.0182 - 41 0.0545 - - 1 6 4 0 - 2 0.333 - 7 0.167 - 13 0.333 - 14 0.167 - - 8 23 9 0 - 0 0.478 - 2 0.0435 - 12 0.0435 - 13 0.0435 - 14 0.13 - 21 0.13 - 29 0.0435 - 41 0.0435 - 47 0.0435 - - 12 15 4 0 - 2 0.733 - 13 0.133 - 14 0.0667 - 21 0.0667 - - 21 3 3 0 - 13 0.333 - 26 0.333 - 41 0.333 - - 26 4 4 0 - 0 0.25 - 2 0.25 - 8 0.25 - 29 0.25 - - 28 218 14 0 - 2 0.156 - 7 0.00459 - 12 0.362 - 13 0.0183 - 14 0.0229 - 15 0.00917 - 19 0.0183 - 21 0.101 - 26 0.261 - 37 0.00459 - 41 0.0183 - 42 0.00459 - 45 0.0138 - 47 0.00459 - - 29 283 14 0 - 0 0.0247 - 2 0.194 - 13 0.184 - 14 0.0954 - 15 0.205 - 16 0.00707 - 19 0.0777 - 21 0.0565 - 34 0.0283 - 35 0.0212 - 41 0.0883 - 43 0.00353 - 45 0.0106 - 46 0.00353 - - 30 218 18 0 - 0 0.216 - 2 0.078 - 4 0.00459 - 7 0.188 - 13 0.0872 - 14 0.147 - 15 0.0138 - 19 0.0138 - 21 0.0459 - 26 0.00459 - 29 0.00459 - 30 0.00459 - 31 0.00917 - 32 0.00459 - 41 0.128 - 42 0.0183 - 45 0.00917 - 47 0.0229 - - 31 583 24 0 - 0 0.437 - 1 0.0154 - 2 0.048 - 3 0.0103 - 4 0.0103 - 7 0.00858 - 10 0.00343 - 12 0.00172 - 13 0.0978 - 14 0.11 - 15 0.00515 - 18 0.00172 - 19 0.00343 - 21 0.0703 - 28 0.00343 - 29 0.00172 - 34 0.00172 - 37 0.00172 - 41 0.132 - 42 0.00515 - 44 0.00515 - 45 0.0103 - 46 0.00343 - 47 0.012 - - 32 79 12 0 - 2 0.152 - 4 0.0253 - 13 0.0127 - 14 0.392 - 15 0.038 - 16 0.0127 - 19 0.19 - 21 0.0633 - 34 0.0506 - 35 0.038 - 41 0.0127 - 46 0.0127 - - 33 142 15 0 - 2 0.204 - 4 0.0141 - 7 0.0211 - 13 0.232 - 14 0.0141 - 15 0.106 - 16 0.00704 - 19 0.0704 - 21 0.0352 - 30 0.00704 - 34 0.12 - 35 0.0352 - 41 0.106 - 45 0.0211 - 46 0.00704 - - 41 10 2 0 - 2 0.1 - 41 0.9 - - 45 2 2 0 - 7 0.5 - 21 0.5 - - 46 1 1 0 - 4 1 - - 47 29 9 0 - 0 0.172 - 2 0.345 - 3 0.069 - 12 0.0345 - 14 0.103 - 15 0.0345 - 21 0.103 - 22 0.0345 - 41 0.103 - - 49 11 4 0 - 2 0.545 - 14 0.0909 - 35 0.0909 - 41 0.273 - - 55 6 3 0 - 2 0.5 - 41 0.333 - 42 0.167 - - 69 25 13 0 - 0 0.04 - 2 0.12 - 8 0.04 - 13 0.08 - 14 0.2 - 19 0.08 - 21 0.08 - 26 0.04 - 33 0.04 - 35 0.04 - 41 0.16 - 45 0.04 - 47 0.04 - - 50 13 9 0 - 0 0.0769 - 13 0.154 - 14 0.0769 - 15 0.154 - 30 0.0769 - 31 0.0769 - 32 0.0769 - 33 0.0769 - 41 0.231 - - 53 1 1 0 - 42 1 - - 55 130 17 5 - 0 0.0538 - 2 0.615 - 4 0.00769 - 7 0.0154 - 9 0.00769 - 13 0.00769 - 14 0.0231 - 15 0.00769 - 19 0.0154 - 21 0.0462 - 26 0.0154 - 28 0.00769 - 33 0.00769 - 40 0.00769 - 41 0.131 - 42 0.0231 - 46 0.00769 - - 31 6 2 0 - 0 0.833 - 40 0.167 - - 41 3 3 0 - 15 0.333 - 19 0.333 - 41 0.333 - - 47 89 12 0 - 0 0.0225 - 2 0.652 - 4 0.0112 - 9 0.0112 - 13 0.0112 - 21 0.0449 - 26 0.0112 - 28 0.0112 - 33 0.0112 - 41 0.169 - 42 0.0337 - 46 0.0112 - - 55 4 3 0 - 2 0.5 - 19 0.25 - 26 0.25 - - 62 10 4 0 - 2 0.6 - 7 0.2 - 14 0.1 - 41 0.1 - - 57 96 9 6 - 0 0.188 - 2 0.448 - 3 0.0104 - 8 0.0104 - 12 0.0312 - 13 0.115 - 15 0.0208 - 21 0.0312 - 41 0.146 - - 0 7 1 0 - 2 1 - - 29 7 1 0 - 2 1 - - 41 17 2 0 - 2 0.294 - 41 0.706 - - 47 36 8 0 - 0 0.472 - 2 0.167 - 3 0.0278 - 8 0.0278 - 12 0.0833 - 13 0.167 - 15 0.0278 - 21 0.0278 - - 64 3 2 0 - 13 0.667 - 21 0.333 - - 69 2 2 0 - 13 0.5 - 15 0.5 - - 58 10 6 0 - 2 0.5 - 8 0.1 - 12 0.1 - 28 0.1 - 41 0.1 - 42 0.1 - - 62 16 7 0 - 2 0.25 - 3 0.125 - 4 0.0625 - 13 0.25 - 14 0.188 - 15 0.0625 - 41 0.0625 - - 64 18 10 1 - 0 0.111 - 2 0.167 - 3 0.111 - 7 0.0556 - 8 0.0556 - 9 0.0556 - 13 0.111 - 14 0.0556 - 16 0.0556 - 41 0.222 - - 41 4 2 0 - 2 0.75 - 41 0.25 - - 69 3772 35 0 - 0 0.0771 - 1 0.00133 - 2 0.00663 - 3 0.00159 - 4 0.0061 - 5 0.000795 - 7 0.0334 - 8 0.00477 - 10 0.00053 - 12 0.0668 - 13 0.141 - 14 0.104 - 15 0.114 - 16 0.00424 - 18 0.00133 - 19 0.103 - 20 0.000265 - 21 0.0586 - 23 0.000265 - 24 0.000795 - 26 0.0978 - 28 0.00318 - 29 0.00477 - 30 0.00212 - 31 0.00477 - 32 0.00212 - 33 0.00265 - 34 0.0294 - 35 0.0162 - 41 0.0798 - 42 0.00769 - 43 0.00186 - 45 0.0109 - 46 0.00292 - 47 0.00663 - - 74 1 1 0 - 47 1 - -70 128 19 3 - 0 0.0156 - 2 0.0703 - 7 0.156 - 8 0.0234 - 13 0.0312 - 19 0.0156 - 21 0.0547 - 24 0.0312 - 28 0.172 - 29 0.0312 - 30 0.0312 - 31 0.0312 - 32 0.0781 - 33 0.109 - 37 0.00781 - 41 0.0156 - 42 0.0312 - 45 0.0312 - 47 0.0625 - - 8 3 3 0 - 2 0.333 - 21 0.333 - 37 0.333 - - 21 7 6 0 - 2 0.143 - 28 0.286 - 29 0.143 - 33 0.143 - 42 0.143 - 47 0.143 - - 47 59 17 1 - 0 0.0169 - 2 0.0678 - 7 0.169 - 8 0.0169 - 13 0.0339 - 19 0.0169 - 24 0.0339 - 28 0.186 - 29 0.0339 - 30 0.0339 - 31 0.0339 - 32 0.0847 - 33 0.119 - 41 0.0169 - 42 0.0339 - 45 0.0339 - 47 0.0678 - - 21 7 6 0 - 2 0.143 - 28 0.286 - 29 0.143 - 33 0.143 - 42 0.143 - 47 0.143 - -71 4170 32 7 - 0 0.0254 - 2 0.0451 - 3 0.0139 - 4 0.00048 - 7 0.0686 - 8 0.0206 - 9 0.000959 - 10 0.00192 - 13 0.158 - 14 0.0652 - 15 0.0254 - 18 0.00048 - 19 0.00959 - 21 0.0415 - 22 0.00048 - 24 0.00624 - 26 0.00288 - 28 0.058 - 29 0.0177 - 30 0.012 - 31 0.0197 - 32 0.011 - 33 0.0173 - 34 0.00024 - 37 0.00168 - 40 0.000959 - 41 0.194 - 42 0.0149 - 44 0.00192 - 45 0.0367 - 46 0.011 - 47 0.116 - - 2 6 1 0 - 37 1 - - 7 30 8 0 - 0 0.0333 - 3 0.0667 - 13 0.4 - 14 0.2 - 15 0.133 - 21 0.0667 - 41 0.0667 - 46 0.0333 - - 13 1 1 0 - 34 1 - - 21 24 14 0 - 0 0.0417 - 2 0.0833 - 7 0.0833 - 8 0.0833 - 13 0.0417 - 14 0.0833 - 24 0.0833 - 28 0.125 - 31 0.0833 - 40 0.0417 - 41 0.0417 - 42 0.0833 - 45 0.0417 - 47 0.0833 - - 37 2036 31 1 - 0 0.025 - 2 0.0462 - 3 0.0133 - 4 0.000491 - 7 0.0693 - 8 0.0192 - 9 0.000982 - 10 0.00196 - 13 0.155 - 14 0.0624 - 15 0.0241 - 18 0.000491 - 19 0.00982 - 21 0.0486 - 22 0.000491 - 24 0.0054 - 26 0.00295 - 28 0.057 - 29 0.0182 - 30 0.0123 - 31 0.0192 - 32 0.0113 - 33 0.0172 - 37 0.000491 - 40 0.000491 - 41 0.196 - 42 0.0142 - 44 0.00196 - 45 0.0373 - 46 0.0108 - 47 0.117 - - 2 6 3 0 - 21 0.333 - 28 0.167 - 30 0.5 - - 47 2063 30 3 - 0 0.0257 - 2 0.0441 - 3 0.0141 - 4 0.000485 - 7 0.0693 - 8 0.0208 - 9 0.000969 - 10 0.00194 - 13 0.16 - 14 0.0659 - 15 0.0257 - 18 0.000485 - 19 0.00969 - 21 0.0349 - 22 0.000485 - 24 0.0063 - 26 0.00291 - 28 0.0587 - 29 0.0179 - 30 0.0121 - 31 0.0199 - 32 0.0111 - 33 0.0175 - 40 0.000969 - 41 0.196 - 42 0.015 - 44 0.00194 - 45 0.0368 - 46 0.0111 - 47 0.117 - - 7 30 8 0 - 0 0.0333 - 3 0.0667 - 13 0.4 - 14 0.2 - 15 0.133 - 21 0.0667 - 41 0.0667 - 46 0.0333 - - 21 24 14 0 - 0 0.0417 - 2 0.0833 - 7 0.0833 - 8 0.0833 - 13 0.0417 - 14 0.0833 - 24 0.0833 - 28 0.125 - 31 0.0833 - 40 0.0417 - 41 0.0417 - 42 0.0833 - 45 0.0417 - 47 0.0833 - - 49 6 5 0 - 2 0.167 - 8 0.333 - 14 0.167 - 28 0.167 - 33 0.167 - - 49 6 5 0 - 2 0.167 - 8 0.333 - 14 0.167 - 28 0.167 - 33 0.167 - -72 14825 39 21 - 0 0.00567 - 1 0.000135 - 2 0.0114 - 3 0.00614 - 4 0.0123 - 5 0.00027 - 6 0.000135 - 7 0.0813 - 8 0.00668 - 9 0.000202 - 10 0.000337 - 13 0.22 - 14 0.173 - 15 0.0205 - 16 0.00378 - 17 0.000135 - 19 0.00256 - 21 0.00621 - 22 0.000135 - 23 0.000135 - 24 0.00243 - 26 0.0058 - 28 0.0188 - 29 0.00351 - 30 0.00513 - 31 0.00351 - 32 0.00445 - 33 0.00391 - 35 6.75e-05 - 36 0.000135 - 37 0.00256 - 40 0.000405 - 41 0.342 - 42 0.0121 - 43 0.00121 - 44 0.00216 - 45 0.0119 - 46 0.0103 - 47 0.0185 - - 3 7 1 0 - 41 1 - - 4 73 16 0 - 2 0.0411 - 3 0.0685 - 7 0.0274 - 13 0.315 - 14 0.0274 - 17 0.0137 - 21 0.0411 - 24 0.0274 - 28 0.0137 - 30 0.0137 - 31 0.0411 - 32 0.0137 - 33 0.0274 - 41 0.274 - 42 0.0274 - 45 0.0274 - - 7 358 17 0 - 2 0.00279 - 3 0.0168 - 4 0.00279 - 6 0.00279 - 8 0.0112 - 9 0.00279 - 10 0.00279 - 13 0.592 - 14 0.291 - 15 0.0223 - 19 0.00559 - 21 0.0112 - 22 0.00279 - 31 0.00279 - 41 0.014 - 42 0.0112 - 46 0.00559 - - 8 33 4 0 - 8 0.0303 - 23 0.0606 - 37 0.848 - 41 0.0606 - - 9 2 1 0 - 8 1 - - 10 5 1 0 - 41 1 - - 13 19 6 0 - 4 0.158 - 8 0.526 - 13 0.105 - 15 0.105 - 35 0.0526 - 41 0.0526 - - 14 19 5 0 - 8 0.789 - 9 0.0526 - 13 0.0526 - 15 0.0526 - 41 0.0526 - - 15 4 3 0 - 2 0.25 - 8 0.5 - 36 0.25 - - 21 17 9 2 - 0 0.0588 - 2 0.0588 - 13 0.0588 - 28 0.0588 - 29 0.0588 - 31 0.0588 - 32 0.118 - 33 0.0588 - 37 0.471 - - 35 5 4 0 - 0 0.2 - 29 0.2 - 32 0.4 - 33 0.2 - - 47 8 1 0 - 37 1 - - 23 2 1 0 - 4 1 - - 34 4214 26 0 - 0 0.00119 - 2 0.00498 - 3 0.00617 - 4 0.0038 - 7 0.0835 - 8 0.00166 - 13 0.245 - 14 0.173 - 15 0.0209 - 16 0.000237 - 19 0.00119 - 21 0.00119 - 26 0.00403 - 28 0.0038 - 29 0.000949 - 30 0.000475 - 31 0.00119 - 32 0.000475 - 33 0.000949 - 41 0.407 - 42 0.0135 - 43 0.00142 - 44 0.00237 - 45 0.00285 - 46 0.014 - 47 0.0038 - - 35 2343 31 0 - 0 0.0149 - 1 0.000427 - 2 0.0201 - 3 0.00299 - 4 0.0282 - 5 0.000854 - 7 0.0973 - 8 0.00683 - 13 0.141 - 14 0.178 - 15 0.023 - 16 0.0111 - 19 0.00469 - 21 0.0145 - 24 0.0064 - 26 0.0107 - 28 0.0405 - 29 0.00683 - 30 0.0141 - 31 0.00512 - 32 0.0102 - 33 0.00598 - 37 0.000427 - 40 0.000854 - 41 0.257 - 42 0.0102 - 43 0.00128 - 44 0.00256 - 45 0.0294 - 46 0.00555 - 47 0.0495 - - 36 159 11 0 - 2 0.0377 - 7 0.0126 - 13 0.145 - 14 0.157 - 16 0.00629 - 28 0.00629 - 32 0.00629 - 41 0.604 - 42 0.00629 - 46 0.0126 - 47 0.00629 - - 37 36 12 1 - 2 0.0556 - 7 0.222 - 8 0.0833 - 13 0.0278 - 19 0.0278 - 21 0.0833 - 28 0.333 - 33 0.0556 - 41 0.0278 - 42 0.0278 - 45 0.0278 - 47 0.0278 - - 21 8 6 0 - 7 0.125 - 8 0.25 - 21 0.125 - 28 0.125 - 33 0.25 - 42 0.125 - - 47 7352 37 14 - 0 0.00571 - 1 0.000136 - 2 0.0114 - 3 0.00598 - 4 0.0112 - 5 0.000272 - 6 0.000136 - 7 0.082 - 8 0.00449 - 9 0.000136 - 10 0.000136 - 13 0.222 - 14 0.174 - 15 0.0204 - 16 0.00381 - 17 0.000136 - 19 0.00258 - 21 0.00558 - 22 0.000136 - 24 0.00245 - 26 0.00585 - 28 0.0189 - 29 0.00354 - 30 0.00517 - 31 0.00354 - 32 0.00449 - 33 0.00394 - 36 0.000136 - 37 0.000136 - 40 0.000408 - 41 0.345 - 42 0.0122 - 43 0.00122 - 44 0.00218 - 45 0.012 - 46 0.0103 - 47 0.0186 - - 3 7 1 0 - 41 1 - - 4 73 16 0 - 2 0.0411 - 3 0.0685 - 7 0.0274 - 13 0.315 - 14 0.0274 - 17 0.0137 - 21 0.0411 - 24 0.0274 - 28 0.0137 - 30 0.0137 - 31 0.0411 - 32 0.0137 - 33 0.0274 - 41 0.274 - 42 0.0274 - 45 0.0274 - - 7 358 17 0 - 2 0.00279 - 3 0.0168 - 4 0.00279 - 6 0.00279 - 8 0.0112 - 9 0.00279 - 10 0.00279 - 13 0.592 - 14 0.291 - 15 0.0223 - 19 0.00559 - 21 0.0112 - 22 0.00279 - 31 0.00279 - 41 0.014 - 42 0.0112 - 46 0.00559 - - 10 5 1 0 - 41 1 - - 15 1 1 0 - 36 1 - - 21 9 8 0 - 0 0.111 - 2 0.111 - 13 0.111 - 28 0.111 - 29 0.111 - 31 0.111 - 32 0.222 - 33 0.111 - - 34 4211 26 0 - 0 0.00119 - 2 0.00499 - 3 0.00617 - 4 0.00356 - 7 0.0836 - 8 0.00166 - 13 0.246 - 14 0.174 - 15 0.0209 - 16 0.000237 - 19 0.00119 - 21 0.000712 - 26 0.00404 - 28 0.0038 - 29 0.00095 - 30 0.000475 - 31 0.00119 - 32 0.000475 - 33 0.00095 - 41 0.407 - 42 0.0135 - 43 0.00142 - 44 0.00237 - 45 0.00285 - 46 0.014 - 47 0.0038 - - 35 2336 31 0 - 0 0.015 - 1 0.000428 - 2 0.0201 - 3 0.003 - 4 0.0283 - 5 0.000856 - 7 0.0976 - 8 0.00642 - 13 0.141 - 14 0.178 - 15 0.0231 - 16 0.0111 - 19 0.00471 - 21 0.012 - 24 0.00642 - 26 0.0107 - 28 0.0407 - 29 0.00685 - 30 0.0141 - 31 0.00514 - 32 0.0103 - 33 0.00599 - 37 0.000428 - 40 0.000856 - 41 0.258 - 42 0.0103 - 43 0.00128 - 44 0.00257 - 45 0.0295 - 46 0.00557 - 47 0.0497 - - 36 159 11 0 - 2 0.0377 - 7 0.0126 - 13 0.145 - 14 0.157 - 16 0.00629 - 28 0.00629 - 32 0.00629 - 41 0.604 - 42 0.00629 - 46 0.0126 - 47 0.00629 - - 37 34 12 0 - 2 0.0588 - 7 0.235 - 8 0.0882 - 13 0.0294 - 19 0.0294 - 21 0.0294 - 28 0.353 - 33 0.0588 - 41 0.0294 - 42 0.0294 - 45 0.0294 - 47 0.0294 - - 55 43 9 0 - 8 0.0233 - 13 0.0233 - 14 0.0233 - 21 0.0233 - 28 0.0233 - 30 0.0233 - 33 0.0465 - 41 0.767 - 47 0.0465 - - 70 20 10 0 - 2 0.05 - 7 0.2 - 8 0.05 - 24 0.05 - 28 0.35 - 29 0.05 - 30 0.05 - 31 0.05 - 32 0.05 - 33 0.1 - - 71 7 6 0 - 7 0.143 - 8 0.143 - 14 0.143 - 28 0.286 - 29 0.143 - 31 0.143 - - 72 78 17 0 - 0 0.0128 - 2 0.0128 - 7 0.0769 - 8 0.0128 - 13 0.0513 - 21 0.0128 - 26 0.0128 - 28 0.0385 - 29 0.0385 - 31 0.0256 - 32 0.0256 - 33 0.0256 - 40 0.0128 - 41 0.564 - 42 0.0128 - 45 0.0513 - 47 0.0128 - - 55 44 9 1 - 8 0.0227 - 13 0.0227 - 14 0.0227 - 21 0.0227 - 28 0.0227 - 30 0.0227 - 33 0.0455 - 41 0.773 - 47 0.0455 - - 73 23 2 0 - 21 0.0435 - 41 0.957 - - 70 20 10 0 - 2 0.05 - 7 0.2 - 8 0.05 - 24 0.05 - 28 0.35 - 29 0.05 - 30 0.05 - 31 0.05 - 32 0.05 - 33 0.1 - - 71 7 6 0 - 7 0.143 - 8 0.143 - 14 0.143 - 28 0.286 - 29 0.143 - 31 0.143 - - 72 78 17 0 - 0 0.0128 - 2 0.0128 - 7 0.0769 - 8 0.0128 - 13 0.0513 - 21 0.0128 - 26 0.0128 - 28 0.0385 - 29 0.0385 - 31 0.0256 - 32 0.0256 - 33 0.0256 - 40 0.0128 - 41 0.564 - 42 0.0128 - 45 0.0513 - 47 0.0128 - - 73 23 5 0 - 3 0.13 - 4 0.522 - 8 0.087 - 10 0.13 - 13 0.13 - -73 782 20 2 - 0 0.00256 - 2 0.0128 - 3 0.0384 - 4 0.0767 - 8 0.0205 - 10 0.0205 - 13 0.371 - 14 0.115 - 15 0.0281 - 16 0.00256 - 28 0.0153 - 30 0.00512 - 31 0.00256 - 33 0.00512 - 41 0.23 - 42 0.0153 - 44 0.00256 - 45 0.00767 - 46 0.023 - 47 0.00512 - - 26 18 7 0 - 8 0.0556 - 13 0.444 - 14 0.0556 - 28 0.0556 - 31 0.0556 - 41 0.278 - 46 0.0556 - - 47 391 20 1 - 0 0.00256 - 2 0.0128 - 3 0.0384 - 4 0.0767 - 8 0.0205 - 10 0.0205 - 13 0.371 - 14 0.115 - 15 0.0281 - 16 0.00256 - 28 0.0153 - 30 0.00512 - 31 0.00256 - 33 0.00512 - 41 0.23 - 42 0.0153 - 44 0.00256 - 45 0.00767 - 46 0.023 - 47 0.00512 - - 26 18 7 0 - 8 0.0556 - 13 0.444 - 14 0.0556 - 28 0.0556 - 31 0.0556 - 41 0.278 - 46 0.0556 - -74 443 33 26 - 0 0.0113 - 2 0.0113 - 3 0.0361 - 4 0.0971 - 5 0.00451 - 6 0.00677 - 7 0.0474 - 8 0.00677 - 9 0.00677 - 12 0.00451 - 13 0.0564 - 14 0.0271 - 15 0.0113 - 16 0.00226 - 18 0.00451 - 19 0.00903 - 21 0.0113 - 22 0.00226 - 24 0.00451 - 25 0.00677 - 26 0.00226 - 28 0.00903 - 29 0.0226 - 30 0.00451 - 31 0.00903 - 32 0.00451 - 33 0.00226 - 40 0.00226 - 41 0.147 - 42 0.0271 - 44 0.00451 - 45 0.0406 - 47 0.357 - - 0 2 2 0 - 18 0.5 - 28 0.5 - - 2 5 3 0 - 13 0.2 - 14 0.4 - 47 0.4 - - 4 47 10 0 - 0 0.0426 - 2 0.0213 - 4 0.0213 - 7 0.149 - 13 0.0213 - 32 0.0213 - 41 0.447 - 42 0.0638 - 45 0.0851 - 47 0.128 - - 6 5 4 0 - 6 0.4 - 13 0.2 - 41 0.2 - 45 0.2 - - 7 11 9 0 - 2 0.0909 - 3 0.182 - 4 0.0909 - 13 0.0909 - 14 0.182 - 19 0.0909 - 28 0.0909 - 29 0.0909 - 41 0.0909 - - 8 4 4 0 - 14 0.25 - 22 0.25 - 26 0.25 - 44 0.25 - - 9 26 1 0 - 4 1 - - 12 1 1 0 - 12 1 - - 13 5 4 0 - 6 0.2 - 9 0.4 - 41 0.2 - 47 0.2 - - 14 4 3 0 - 2 0.25 - 8 0.5 - 9 0.25 - - 15 7 6 0 - 7 0.143 - 15 0.286 - 16 0.143 - 40 0.143 - 41 0.143 - 47 0.143 - - 21 3 3 0 - 4 0.333 - 7 0.333 - 13 0.333 - - 22 11 1 0 - 4 1 - - 25 39 4 0 - 3 0.0513 - 13 0.0513 - 14 0.0256 - 47 0.872 - - 26 6 5 0 - 3 0.333 - 7 0.167 - 13 0.167 - 14 0.167 - 29 0.167 - - 40 1 1 0 - 8 1 - - 41 9 4 0 - 0 0.111 - 13 0.333 - 21 0.444 - 33 0.111 - - 42 4 2 0 - 13 0.25 - 25 0.75 - - 47 174 22 15 - 0 0.0115 - 2 0.0115 - 3 0.046 - 4 0.0115 - 5 0.00575 - 7 0.0517 - 12 0.00575 - 13 0.0517 - 14 0.0287 - 18 0.00575 - 19 0.0115 - 24 0.00575 - 28 0.0115 - 29 0.0287 - 30 0.00575 - 31 0.0115 - 32 0.00575 - 41 0.161 - 42 0.023 - 44 0.00575 - 45 0.046 - 47 0.454 - - 0 2 2 0 - 18 0.5 - 28 0.5 - - 4 47 10 0 - 0 0.0426 - 2 0.0213 - 4 0.0213 - 7 0.149 - 13 0.0213 - 32 0.0213 - 41 0.447 - 42 0.0638 - 45 0.0851 - 47 0.128 - - 6 2 2 0 - 13 0.5 - 45 0.5 - - 7 10 9 0 - 2 0.1 - 3 0.2 - 4 0.1 - 13 0.1 - 14 0.1 - 19 0.1 - 28 0.1 - 29 0.1 - 41 0.1 - - 8 2 2 0 - 14 0.5 - 44 0.5 - - 12 1 1 0 - 12 1 - - 21 2 2 0 - 7 0.5 - 13 0.5 - - 25 39 4 0 - 3 0.0513 - 13 0.0513 - 14 0.0256 - 47 0.872 - - 26 5 4 0 - 3 0.4 - 13 0.2 - 14 0.2 - 29 0.2 - - 49 7 3 0 - 31 0.143 - 45 0.143 - 47 0.714 - - 55 15 7 0 - 3 0.0667 - 19 0.0667 - 29 0.133 - 31 0.0667 - 41 0.133 - 45 0.0667 - 47 0.467 - - 57 5 4 0 - 3 0.2 - 13 0.4 - 24 0.2 - 30 0.2 - - 64 2 2 0 - 7 0.5 - 42 0.5 - - 69 1 1 0 - 5 1 - - 74 19 3 0 - 41 0.0526 - 45 0.0526 - 47 0.895 - - 49 7 3 0 - 31 0.143 - 45 0.143 - 47 0.714 - - 55 25 12 0 - 3 0.04 - 7 0.04 - 13 0.04 - 15 0.08 - 19 0.04 - 21 0.04 - 29 0.08 - 31 0.04 - 41 0.2 - 42 0.04 - 45 0.08 - 47 0.28 - - 57 5 4 0 - 3 0.2 - 13 0.4 - 24 0.2 - 30 0.2 - - 62 3 3 0 - 29 0.333 - 42 0.333 - 47 0.333 - - 64 5 4 0 - 7 0.2 - 13 0.2 - 41 0.4 - 42 0.2 - - 69 2 2 0 - 5 0.5 - 42 0.5 - - 74 23 3 0 - 41 0.174 - 45 0.087 - 47 0.739 - diff --git a/samples/G-code/rm.g b/samples/G-code/rm.g deleted file mode 100644 index 89c5aa24..00000000 --- a/samples/G-code/rm.g +++ /dev/null @@ -1,29735 +0,0 @@ -48 34015 42 38 - 0 0.0085 - 2 0.0361 - 3 0.0052 - 4 0.00714 - 5 0.000206 - 6 0.000147 - 7 0.166 - 8 0.0349 - 9 0.00138 - 10 5.88e-05 - 12 0.00218 - 13 0.166 - 14 0.0529 - 15 0.0215 - 16 0.000529 - 17 0.000176 - 18 0.000118 - 19 0.00285 - 20 0.000353 - 21 0.0147 - 22 0.00171 - 23 0.000441 - 24 0.000353 - 26 0.0645 - 28 0.000147 - 29 0.0052 - 30 0.00409 - 31 0.003 - 32 0.00171 - 33 0.000823 - 34 0.0005 - 35 0.00047 - 37 0.00318 - 39 0.00173 - 40 0.223 - 41 0.136 - 42 0.0157 - 43 0.00247 - 44 0.00326 - 45 0.00173 - 46 0.00808 - 47 0.001 - - 0 6 4 0 - 21 0.167 - 30 0.167 - 40 0.333 - 41 0.333 - - 2 252 19 5 - 0 0.00397 - 3 0.0357 - 4 0.0238 - 7 0.0159 - 8 0.206 - 9 0.0437 - 10 0.00794 - 13 0.0556 - 14 0.00397 - 15 0.0119 - 21 0.341 - 22 0.0714 - 23 0.0516 - 29 0.0119 - 30 0.0238 - 31 0.0357 - 39 0.0159 - 41 0.0119 - 45 0.0278 - - 8 29 7 0 - 4 0.103 - 13 0.241 - 14 0.0345 - 21 0.138 - 29 0.0345 - 30 0.172 - 31 0.276 - - 41 42 10 0 - 3 0.0714 - 4 0.0238 - 7 0.0476 - 8 0.19 - 9 0.0476 - 10 0.0238 - 13 0.0238 - 21 0.452 - 29 0.0238 - 39 0.0952 - - 42 4 4 0 - 8 0.25 - 10 0.25 - 13 0.25 - 23 0.25 - - 46 4 1 0 - 45 1 - - 48 170 15 0 - 0 0.00588 - 3 0.0353 - 4 0.0118 - 7 0.0118 - 8 0.253 - 9 0.0529 - 13 0.0294 - 15 0.0176 - 21 0.365 - 22 0.106 - 23 0.0647 - 29 0.00588 - 31 0.00588 - 41 0.0176 - 45 0.0176 - - 3 192 10 5 - 3 0.00521 - 4 0.0104 - 7 0.0104 - 8 0.13 - 13 0.703 - 14 0.0573 - 15 0.0521 - 41 0.0156 - 43 0.0104 - 44 0.00521 - - 2 1 1 0 - 43 1 - - 3 19 5 0 - 8 0.105 - 13 0.421 - 14 0.105 - 15 0.263 - 41 0.105 - - 38 1 1 0 - 44 1 - - 39 155 8 0 - 3 0.00645 - 4 0.0129 - 8 0.142 - 13 0.748 - 14 0.0452 - 15 0.0323 - 41 0.00645 - 43 0.00645 - - 47 6 2 0 - 7 0.333 - 13 0.667 - - 4 32 7 1 - 8 0.312 - 13 0.438 - 14 0.0625 - 15 0.0312 - 39 0.0938 - 41 0.0312 - 42 0.0312 - - 47 5 3 0 - 39 0.6 - 41 0.2 - 42 0.2 - - 6 10 6 0 - 7 0.1 - 8 0.1 - 13 0.4 - 40 0.2 - 44 0.1 - 46 0.1 - - 7 50 13 2 - 2 0.04 - 3 0.02 - 7 0.32 - 8 0.02 - 9 0.02 - 13 0.04 - 14 0.04 - 21 0.18 - 26 0.1 - 30 0.02 - 31 0.02 - 40 0.14 - 41 0.04 - - 41 3 2 0 - 8 0.333 - 21 0.667 - - 47 36 10 0 - 2 0.0278 - 3 0.0278 - 7 0.389 - 9 0.0278 - 14 0.0556 - 21 0.111 - 26 0.139 - 30 0.0278 - 40 0.139 - 41 0.0556 - - 8 9595 38 23 - 0 0.00563 - 2 0.0308 - 3 0.0112 - 4 0.00834 - 5 0.000417 - 6 0.000104 - 7 0.235 - 8 0.0211 - 9 0.000208 - 12 0.00104 - 13 0.116 - 14 0.0552 - 15 0.0311 - 16 0.000521 - 19 0.00584 - 20 0.00073 - 21 0.0174 - 22 0.000521 - 24 0.000208 - 26 0.161 - 28 0.000104 - 29 0.000625 - 30 0.00396 - 31 0.00177 - 32 0.000208 - 33 0.000521 - 34 0.000625 - 35 0.000938 - 37 0.00427 - 39 0.00198 - 40 0.132 - 41 0.117 - 42 0.0148 - 43 0.00146 - 44 0.00208 - 45 0.00188 - 46 0.0127 - 47 0.000104 - - 2 518 18 0 - 0 0.00193 - 2 0.00965 - 7 0.0328 - 8 0.029 - 12 0.00193 - 13 0.342 - 14 0.322 - 15 0.00772 - 16 0.00386 - 19 0.00193 - 21 0.00579 - 26 0.0212 - 40 0.0927 - 41 0.0907 - 42 0.0116 - 43 0.00193 - 45 0.00579 - 46 0.0174 - - 3 34 6 0 - 8 0.0588 - 13 0.618 - 14 0.206 - 40 0.0294 - 41 0.0294 - 44 0.0588 - - 4 11 7 0 - 7 0.273 - 8 0.0909 - 13 0.182 - 14 0.0909 - 15 0.0909 - 21 0.0909 - 41 0.182 - - 7 20 7 0 - 7 0.15 - 8 0.05 - 13 0.1 - 14 0.35 - 15 0.05 - 40 0.2 - 41 0.1 - - 8 227 11 0 - 0 0.00441 - 2 0.0132 - 7 0.00441 - 8 0.0793 - 13 0.498 - 14 0.313 - 15 0.0529 - 30 0.00441 - 39 0.00441 - 40 0.00441 - 41 0.022 - - 9 15 3 0 - 2 0.0667 - 13 0.4 - 14 0.533 - - 10 29 4 0 - 8 0.069 - 13 0.621 - 14 0.276 - 41 0.0345 - - 13 23 7 0 - 2 0.13 - 7 0.304 - 8 0.174 - 13 0.087 - 14 0.087 - 40 0.087 - 41 0.13 - - 14 2 1 0 - 41 1 - - 15 54 8 0 - 8 0.111 - 13 0.259 - 14 0.037 - 15 0.519 - 16 0.0185 - 40 0.0185 - 41 0.0185 - 45 0.0185 - - 21 1945 28 0 - 0 0.00463 - 2 0.0221 - 3 0.0072 - 4 0.0118 - 7 0.217 - 8 0.0411 - 9 0.000514 - 13 0.202 - 14 0.074 - 15 0.0226 - 19 0.00308 - 21 0.00977 - 26 0.0833 - 28 0.000514 - 30 0.00463 - 31 0.000514 - 33 0.000514 - 34 0.000514 - 35 0.00103 - 37 0.00411 - 39 0.00103 - 40 0.128 - 41 0.116 - 42 0.0165 - 43 0.00206 - 44 0.00257 - 45 0.00206 - 46 0.0211 - - 22 423 21 0 - 0 0.00946 - 2 0.0402 - 3 0.00473 - 4 0.00946 - 7 0.229 - 8 0.0402 - 13 0.196 - 14 0.0757 - 15 0.00946 - 16 0.00236 - 19 0.00236 - 21 0.00473 - 26 0.13 - 30 0.00236 - 37 0.00709 - 39 0.00473 - 40 0.109 - 41 0.0969 - 42 0.0118 - 45 0.00236 - 46 0.0118 - - 23 263 15 0 - 0 0.0076 - 2 0.0114 - 7 0.076 - 8 0.0875 - 12 0.0038 - 13 0.441 - 14 0.205 - 15 0.0266 - 19 0.0038 - 26 0.0418 - 31 0.0114 - 40 0.0152 - 41 0.0532 - 42 0.0114 - 45 0.0038 - - 26 10 4 0 - 8 0.1 - 13 0.6 - 14 0.1 - 15 0.2 - - 37 1 1 0 - 19 1 - - 39 62 6 0 - 8 0.0968 - 13 0.742 - 14 0.0161 - 15 0.0161 - 31 0.0161 - 41 0.113 - - 41 59 8 0 - 2 0.0339 - 13 0.525 - 14 0.0678 - 15 0.288 - 16 0.0169 - 40 0.0169 - 41 0.0339 - 45 0.0169 - - 45 44 8 0 - 2 0.0227 - 7 0.0227 - 13 0.0455 - 21 0.0227 - 40 0.159 - 41 0.0455 - 42 0.0227 - 46 0.659 - - 47 5604 35 0 - 0 0.00625 - 2 0.0373 - 3 0.0162 - 4 0.00946 - 5 0.000714 - 7 0.294 - 8 0.00428 - 9 0.000178 - 12 0.00143 - 13 0.0121 - 14 0.00178 - 15 0.0316 - 19 0.00821 - 20 0.00125 - 21 0.0244 - 22 0.000892 - 24 0.000357 - 26 0.231 - 29 0.000892 - 30 0.00464 - 31 0.00214 - 32 0.000178 - 33 0.000714 - 34 0.000892 - 35 0.00125 - 37 0.00482 - 39 0.0025 - 40 0.155 - 41 0.118 - 42 0.0162 - 43 0.00161 - 44 0.00214 - 45 0.00125 - 46 0.00642 - 47 0.000178 - - 49 92 12 0 - 0 0.0109 - 2 0.0109 - 6 0.0109 - 7 0.25 - 8 0.0217 - 13 0.141 - 14 0.0761 - 26 0.141 - 40 0.152 - 41 0.141 - 42 0.0217 - 46 0.0217 - - 50 4 2 0 - 2 0.25 - 14 0.75 - - 55 141 13 0 - 0 0.00709 - 2 0.0496 - 7 0.0638 - 13 0.00709 - 21 0.0213 - 29 0.00709 - 30 0.00709 - 32 0.00709 - 37 0.0213 - 40 0.135 - 41 0.652 - 42 0.0142 - 44 0.00709 - - 60 4 2 0 - 13 0.75 - 40 0.25 - - 9 829 25 8 - 0 0.00362 - 2 0.0338 - 3 0.00362 - 4 0.00362 - 7 0.422 - 8 0.0169 - 12 0.00241 - 13 0.171 - 14 0.0627 - 15 0.0109 - 17 0.00121 - 21 0.00965 - 24 0.00483 - 26 0.0627 - 29 0.00241 - 30 0.00121 - 31 0.00121 - 32 0.00241 - 37 0.00241 - 40 0.0953 - 41 0.0724 - 42 0.00844 - 43 0.00121 - 46 0.00241 - 47 0.00121 - - 2 36 12 0 - 2 0.0278 - 7 0.111 - 8 0.0556 - 13 0.167 - 14 0.25 - 15 0.0556 - 21 0.0278 - 26 0.0556 - 40 0.111 - 41 0.0556 - 42 0.0556 - 46 0.0278 - - 4 5 2 0 - 13 0.6 - 14 0.4 - - 8 9 3 0 - 2 0.222 - 13 0.556 - 14 0.222 - - 21 279 14 0 - 2 0.00717 - 3 0.0108 - 4 0.0108 - 7 0.287 - 8 0.0358 - 13 0.348 - 14 0.0932 - 15 0.0179 - 26 0.0358 - 40 0.0824 - 41 0.0573 - 42 0.00717 - 43 0.00358 - 46 0.00358 - - 47 383 20 0 - 0 0.00261 - 2 0.0601 - 7 0.517 - 8 0.00261 - 12 0.00522 - 13 0.0261 - 14 0.00261 - 15 0.00261 - 17 0.00261 - 21 0.0183 - 24 0.0104 - 26 0.102 - 29 0.00522 - 30 0.00261 - 31 0.00261 - 32 0.00522 - 37 0.00522 - 40 0.123 - 41 0.0966 - 42 0.00783 - - 49 3 2 0 - 13 0.333 - 14 0.667 - - 55 96 9 0 - 0 0.0208 - 7 0.656 - 8 0.0104 - 13 0.156 - 14 0.0625 - 26 0.0104 - 40 0.0417 - 41 0.0312 - 47 0.0104 - - 60 7 6 0 - 7 0.143 - 13 0.143 - 14 0.286 - 15 0.143 - 40 0.143 - 41 0.143 - - 10 68 16 4 - 2 0.132 - 4 0.0294 - 7 0.103 - 8 0.0441 - 13 0.294 - 14 0.0147 - 15 0.0147 - 21 0.0147 - 30 0.0441 - 31 0.0294 - 37 0.0147 - 39 0.0147 - 40 0.0147 - 41 0.191 - 42 0.0294 - 46 0.0147 - - 4 2 2 0 - 2 0.5 - 14 0.5 - - 8 12 3 0 - 8 0.167 - 13 0.75 - 41 0.0833 - - 21 12 5 0 - 7 0.0833 - 8 0.0833 - 13 0.417 - 41 0.333 - 46 0.0833 - - 47 39 13 0 - 2 0.205 - 4 0.0513 - 7 0.154 - 13 0.0769 - 15 0.0256 - 21 0.0256 - 30 0.0769 - 31 0.0513 - 37 0.0256 - 39 0.0256 - 40 0.0256 - 41 0.205 - 42 0.0513 - - 13 1034 21 11 - 0 0.0029 - 2 0.00774 - 4 0.00193 - 7 0.0338 - 8 0.088 - 9 0.00677 - 12 0.000967 - 13 0.632 - 14 0.147 - 15 0.0126 - 21 0.000967 - 26 0.0106 - 29 0.000967 - 30 0.00387 - 31 0.00677 - 33 0.000967 - 40 0.0106 - 41 0.0155 - 42 0.000967 - 44 0.0087 - 46 0.00677 - - 2 23 5 0 - 7 0.0435 - 13 0.304 - 14 0.522 - 40 0.0435 - 41 0.087 - - 3 766 12 0 - 2 0.00392 - 8 0.0914 - 9 0.00261 - 13 0.77 - 14 0.106 - 15 0.0117 - 30 0.00392 - 31 0.00522 - 40 0.00131 - 41 0.00131 - 44 0.00131 - 46 0.00131 - - 8 37 10 0 - 0 0.0811 - 2 0.0811 - 7 0.108 - 8 0.027 - 13 0.27 - 14 0.0811 - 15 0.027 - 41 0.135 - 44 0.0811 - 46 0.108 - - 9 7 5 0 - 7 0.286 - 8 0.143 - 14 0.143 - 26 0.143 - 41 0.286 - - 10 2 2 0 - 7 0.5 - 8 0.5 - - 21 7 4 0 - 7 0.429 - 14 0.286 - 40 0.143 - 44 0.143 - - 45 2 1 0 - 46 1 - - 47 48 11 0 - 2 0.0208 - 4 0.0417 - 7 0.396 - 12 0.0208 - 15 0.0417 - 26 0.188 - 30 0.0208 - 31 0.0208 - 40 0.104 - 41 0.125 - 42 0.0208 - - 49 2 2 0 - 26 0.5 - 40 0.5 - - 55 1 1 0 - 40 1 - - 60 117 12 0 - 7 0.0171 - 8 0.154 - 9 0.0427 - 13 0.291 - 14 0.41 - 15 0.00855 - 21 0.00855 - 29 0.00855 - 31 0.0171 - 33 0.00855 - 40 0.00855 - 44 0.0256 - - 14 11 8 0 - 8 0.182 - 9 0.0909 - 13 0.0909 - 14 0.0909 - 15 0.0909 - 40 0.0909 - 41 0.182 - 44 0.182 - - 15 45 14 3 - 2 0.0444 - 7 0.178 - 8 0.0444 - 13 0.2 - 14 0.111 - 15 0.178 - 16 0.0444 - 21 0.0222 - 26 0.0444 - 40 0.0444 - 41 0.0222 - 42 0.0222 - 43 0.0222 - 47 0.0222 - - 2 5 3 0 - 14 0.4 - 15 0.4 - 40 0.2 - - 15 19 8 0 - 2 0.0526 - 8 0.105 - 13 0.368 - 14 0.105 - 15 0.211 - 26 0.0526 - 42 0.0526 - 47 0.0526 - - 47 15 8 0 - 2 0.0667 - 7 0.533 - 16 0.0667 - 21 0.0667 - 26 0.0667 - 40 0.0667 - 41 0.0667 - 43 0.0667 - - 21 402 29 7 - 0 0.0199 - 2 0.0199 - 3 0.0249 - 4 0.0896 - 6 0.00249 - 7 0.216 - 8 0.0224 - 9 0.00249 - 12 0.00249 - 13 0.0249 - 14 0.00249 - 15 0.00249 - 17 0.00249 - 18 0.00498 - 19 0.00249 - 20 0.00249 - 21 0.0373 - 22 0.0522 - 26 0.197 - 28 0.00249 - 29 0.00498 - 30 0.0796 - 31 0.00746 - 33 0.00249 - 40 0.097 - 41 0.0547 - 42 0.0174 - 46 0.00249 - 47 0.00249 - - 2 9 4 0 - 8 0.444 - 21 0.333 - 40 0.111 - 41 0.111 - - 8 48 10 0 - 2 0.0208 - 4 0.0208 - 7 0.229 - 13 0.0208 - 15 0.0208 - 21 0.0208 - 26 0.479 - 40 0.0833 - 41 0.0833 - 42 0.0208 - - 21 41 10 0 - 2 0.0244 - 4 0.0244 - 7 0.439 - 8 0.0732 - 13 0.0244 - 21 0.0244 - 26 0.22 - 40 0.0732 - 41 0.0732 - 42 0.0244 - - 23 2 2 0 - 28 0.5 - 40 0.5 - - 41 3 3 0 - 8 0.333 - 21 0.333 - 30 0.333 - - 47 282 27 0 - 0 0.0248 - 2 0.0142 - 3 0.0355 - 4 0.117 - 6 0.00355 - 7 0.188 - 8 0.00355 - 9 0.00355 - 12 0.00355 - 13 0.0248 - 14 0.00355 - 17 0.00355 - 18 0.00709 - 19 0.00355 - 20 0.00355 - 21 0.0284 - 22 0.0745 - 26 0.16 - 29 0.00709 - 30 0.11 - 31 0.00709 - 33 0.00355 - 40 0.0957 - 41 0.0496 - 42 0.0177 - 46 0.00355 - 47 0.00355 - - 55 6 5 0 - 0 0.167 - 2 0.167 - 4 0.167 - 31 0.167 - 40 0.333 - - 22 62 10 2 - 0 0.0161 - 2 0.0323 - 7 0.452 - 8 0.113 - 21 0.0161 - 22 0.0161 - 26 0.0806 - 31 0.0161 - 40 0.161 - 41 0.0968 - - 21 20 7 0 - 7 0.3 - 8 0.3 - 21 0.05 - 26 0.1 - 31 0.05 - 40 0.15 - 41 0.05 - - 47 34 7 0 - 0 0.0294 - 2 0.0588 - 7 0.5 - 22 0.0294 - 26 0.0882 - 40 0.176 - 41 0.118 - - 24 11 5 0 - 7 0.273 - 21 0.0909 - 30 0.0909 - 40 0.182 - 41 0.364 - - 26 2 2 0 - 13 0.5 - 21 0.5 - - 28 7 6 0 - 4 0.143 - 7 0.286 - 13 0.143 - 19 0.143 - 42 0.143 - 46 0.143 - - 29 12 5 1 - 7 0.167 - 8 0.417 - 13 0.25 - 26 0.0833 - 41 0.0833 - - 47 4 3 0 - 7 0.5 - 26 0.25 - 41 0.25 - - 30 83 12 4 - 0 0.0361 - 2 0.012 - 7 0.157 - 8 0.0482 - 13 0.277 - 14 0.0602 - 15 0.0482 - 26 0.0723 - 40 0.169 - 41 0.0964 - 43 0.012 - 46 0.012 - - 21 28 6 0 - 8 0.143 - 13 0.5 - 14 0.0714 - 15 0.107 - 26 0.107 - 41 0.0714 - - 45 1 1 0 - 46 1 - - 47 34 8 0 - 0 0.0588 - 2 0.0294 - 7 0.294 - 13 0.0294 - 26 0.0882 - 40 0.353 - 41 0.118 - 43 0.0294 - - 49 3 3 0 - 0 0.333 - 7 0.333 - 14 0.333 - - 31 741 29 9 - 0 0.0027 - 2 0.0243 - 3 0.0121 - 4 0.0081 - 7 0.192 - 8 0.0715 - 9 0.00135 - 12 0.00135 - 13 0.19 - 14 0.117 - 15 0.0526 - 16 0.00135 - 17 0.00135 - 19 0.0027 - 21 0.00675 - 24 0.0081 - 26 0.101 - 30 0.00135 - 31 0.00135 - 37 0.00135 - 39 0.0162 - 40 0.0931 - 41 0.0607 - 42 0.0054 - 43 0.0027 - 44 0.00135 - 45 0.00675 - 46 0.0135 - 47 0.00135 - - 2 18 7 0 - 0 0.0556 - 7 0.111 - 8 0.0556 - 13 0.222 - 14 0.389 - 40 0.111 - 46 0.0556 - - 7 1 1 0 - 46 1 - - 13 13 6 0 - 2 0.0769 - 8 0.538 - 13 0.154 - 14 0.0769 - 26 0.0769 - 40 0.0769 - - 21 379 22 0 - 2 0.0132 - 3 0.0132 - 7 0.0633 - 8 0.106 - 9 0.00264 - 13 0.322 - 14 0.201 - 15 0.095 - 16 0.00264 - 21 0.00528 - 24 0.00792 - 26 0.0343 - 30 0.00264 - 31 0.00264 - 37 0.00264 - 39 0.029 - 40 0.0475 - 41 0.0237 - 42 0.00528 - 43 0.00528 - 45 0.0106 - 46 0.00528 - - 22 17 7 0 - 2 0.118 - 7 0.471 - 13 0.0588 - 14 0.0588 - 40 0.118 - 41 0.118 - 46 0.0588 - - 23 8 6 0 - 2 0.25 - 13 0.25 - 14 0.125 - 24 0.125 - 40 0.125 - 41 0.125 - - 47 268 22 0 - 0 0.00373 - 2 0.0299 - 3 0.0112 - 4 0.0224 - 7 0.358 - 8 0.00373 - 12 0.00373 - 13 0.00746 - 15 0.00746 - 17 0.00373 - 19 0.00746 - 21 0.0112 - 24 0.00746 - 26 0.224 - 39 0.00373 - 40 0.153 - 41 0.112 - 42 0.00373 - 44 0.00373 - 45 0.00373 - 46 0.0149 - 47 0.00373 - - 49 27 11 0 - 3 0.037 - 7 0.333 - 8 0.148 - 13 0.148 - 14 0.037 - 15 0.037 - 26 0.037 - 40 0.0741 - 41 0.0741 - 42 0.037 - 46 0.037 - - 55 5 3 0 - 7 0.6 - 40 0.2 - 41 0.2 - - 39 2 1 0 - 3 1 - - 40 8 3 0 - 6 0.125 - 46 0.25 - 47 0.625 - - 41 149 17 7 - 0 0.0134 - 2 0.289 - 3 0.00671 - 7 0.101 - 8 0.134 - 9 0.0134 - 13 0.0805 - 14 0.0671 - 15 0.00671 - 19 0.0268 - 21 0.121 - 22 0.0403 - 23 0.00671 - 26 0.0403 - 31 0.0134 - 39 0.0134 - 46 0.0268 - - 8 19 10 0 - 2 0.105 - 7 0.0526 - 13 0.211 - 14 0.263 - 19 0.0526 - 21 0.105 - 26 0.0526 - 31 0.0526 - 39 0.0526 - 46 0.0526 - - 9 3 1 0 - 14 1 - - 10 1 1 0 - 23 1 - - 13 2 1 0 - 13 1 - - 48 105 16 0 - 0 0.00952 - 2 0.371 - 3 0.00952 - 7 0.0571 - 8 0.162 - 9 0.019 - 13 0.0476 - 14 0.019 - 15 0.00952 - 19 0.019 - 21 0.152 - 22 0.0571 - 26 0.019 - 31 0.00952 - 39 0.00952 - 46 0.0286 - - 55 6 2 0 - 7 0.667 - 26 0.333 - - 57 6 4 0 - 0 0.167 - 7 0.5 - 8 0.167 - 19 0.167 - - 42 16 7 0 - 2 0.375 - 7 0.125 - 14 0.125 - 21 0.188 - 26 0.0625 - 32 0.0625 - 34 0.0625 - - 44 1 1 0 - 39 1 - - 45 9 6 0 - 7 0.222 - 8 0.222 - 9 0.111 - 13 0.111 - 14 0.111 - 31 0.222 - - 46 73 14 5 - 2 0.11 - 4 0.0274 - 7 0.452 - 8 0.0274 - 13 0.0959 - 14 0.0274 - 19 0.0411 - 21 0.0548 - 26 0.0959 - 29 0.0137 - 30 0.0137 - 42 0.0137 - 44 0.0137 - 45 0.0137 - - 8 56 9 0 - 2 0.0893 - 4 0.0357 - 7 0.518 - 8 0.0179 - 13 0.107 - 14 0.0179 - 19 0.0536 - 21 0.0536 - 26 0.107 - - 13 3 3 0 - 8 0.333 - 14 0.333 - 44 0.333 - - 41 3 3 0 - 21 0.333 - 30 0.333 - 45 0.333 - - 48 5 3 0 - 2 0.6 - 7 0.2 - 42 0.2 - - 57 1 1 0 - 29 1 - - 47 14411 39 31 - 0 0.00992 - 2 0.0338 - 3 0.00222 - 4 0.00583 - 5 0.000139 - 6 0.000139 - 7 0.126 - 8 0.038 - 9 0.00104 - 12 0.00257 - 13 0.193 - 14 0.0622 - 15 0.0192 - 16 0.000625 - 17 0.000208 - 18 0.000139 - 19 0.0018 - 20 0.000278 - 21 0.00971 - 22 0.000416 - 26 0.0212 - 28 0.000139 - 29 0.00597 - 30 0.00285 - 31 0.00285 - 32 0.00201 - 33 0.000971 - 34 0.000555 - 35 0.000486 - 37 0.00347 - 39 0.00118 - 40 0.263 - 41 0.155 - 42 0.0176 - 43 0.00285 - 44 0.00298 - 45 0.00167 - 46 0.00701 - 47 0.00118 - - 0 5 3 0 - 30 0.2 - 40 0.4 - 41 0.4 - - 3 187 8 0 - 4 0.0107 - 8 0.134 - 13 0.711 - 14 0.0588 - 15 0.0535 - 41 0.016 - 43 0.0107 - 44 0.00535 - - 4 28 5 0 - 8 0.357 - 13 0.5 - 14 0.0714 - 15 0.0357 - 41 0.0357 - - 6 8 5 0 - 7 0.125 - 8 0.125 - 13 0.5 - 44 0.125 - 46 0.125 - - 7 20 7 0 - 2 0.1 - 7 0.2 - 13 0.05 - 14 0.1 - 21 0.1 - 40 0.35 - 41 0.1 - - 8 6530 37 0 - 0 0.00827 - 2 0.0409 - 3 0.00322 - 4 0.00796 - 5 0.000153 - 6 0.000153 - 7 0.169 - 8 0.0297 - 9 0.000153 - 12 0.00153 - 13 0.163 - 14 0.0809 - 15 0.0204 - 16 0.000766 - 19 0.00337 - 20 0.000613 - 21 0.0139 - 22 0.000613 - 26 0.0383 - 28 0.000153 - 29 0.000919 - 30 0.00383 - 31 0.00214 - 32 0.000306 - 33 0.000766 - 34 0.000919 - 35 0.00107 - 37 0.00551 - 39 0.000766 - 40 0.194 - 41 0.168 - 42 0.0208 - 43 0.00214 - 44 0.00306 - 45 0.00245 - 46 0.0101 - 47 0.000153 - - 9 730 23 0 - 0 0.00411 - 2 0.0384 - 3 0.00411 - 4 0.00411 - 7 0.403 - 8 0.0192 - 12 0.00274 - 13 0.185 - 14 0.0712 - 15 0.0123 - 17 0.00137 - 21 0.00959 - 26 0.037 - 29 0.00274 - 31 0.00137 - 32 0.00274 - 37 0.00274 - 40 0.108 - 41 0.0781 - 42 0.00822 - 43 0.00137 - 46 0.00137 - 47 0.00137 - - 10 56 14 0 - 2 0.143 - 4 0.0357 - 7 0.0714 - 8 0.0536 - 13 0.321 - 14 0.0179 - 15 0.0179 - 21 0.0179 - 37 0.0179 - 39 0.0179 - 40 0.0179 - 41 0.214 - 42 0.0357 - 46 0.0179 - - 13 1001 21 0 - 0 0.003 - 2 0.00799 - 4 0.002 - 7 0.021 - 8 0.0909 - 9 0.00699 - 12 0.000999 - 13 0.651 - 14 0.152 - 15 0.012 - 21 0.000999 - 26 0.000999 - 29 0.000999 - 30 0.003 - 31 0.00699 - 33 0.000999 - 40 0.011 - 41 0.014 - 42 0.000999 - 44 0.00799 - 46 0.004 - - 14 10 7 0 - 8 0.2 - 9 0.1 - 13 0.1 - 14 0.1 - 40 0.1 - 41 0.2 - 44 0.2 - - 15 39 13 0 - 2 0.0513 - 7 0.179 - 8 0.0513 - 13 0.231 - 14 0.128 - 15 0.128 - 16 0.0513 - 21 0.0256 - 40 0.0513 - 41 0.0256 - 42 0.0256 - 43 0.0256 - 47 0.0256 - - 21 161 21 0 - 0 0.0373 - 2 0.0435 - 4 0.0683 - 7 0.224 - 8 0.0373 - 9 0.00621 - 12 0.00621 - 13 0.0124 - 17 0.00621 - 18 0.0124 - 21 0.0559 - 22 0.00621 - 26 0.0248 - 30 0.00621 - 31 0.0186 - 33 0.00621 - 40 0.236 - 41 0.137 - 42 0.0435 - 46 0.00621 - 47 0.00621 - - 22 58 10 0 - 0 0.0172 - 2 0.0345 - 7 0.448 - 8 0.121 - 21 0.0172 - 22 0.0172 - 26 0.0517 - 31 0.0172 - 40 0.172 - 41 0.103 - - 24 9 4 0 - 7 0.222 - 21 0.111 - 40 0.222 - 41 0.444 - - 28 5 5 0 - 4 0.2 - 13 0.2 - 19 0.2 - 42 0.2 - 46 0.2 - - 29 10 4 0 - 7 0.1 - 8 0.5 - 13 0.3 - 41 0.1 - - 30 74 11 0 - 0 0.0405 - 2 0.0135 - 7 0.122 - 8 0.0541 - 13 0.311 - 14 0.0676 - 15 0.0541 - 26 0.027 - 40 0.189 - 41 0.108 - 43 0.0135 - - 31 530 25 0 - 0 0.00377 - 2 0.034 - 3 0.0113 - 7 0.0585 - 8 0.1 - 9 0.00189 - 12 0.00189 - 13 0.266 - 14 0.164 - 15 0.0717 - 16 0.00189 - 17 0.00189 - 21 0.00566 - 26 0.00189 - 30 0.00189 - 31 0.00189 - 37 0.00189 - 39 0.0208 - 40 0.13 - 41 0.083 - 42 0.00755 - 43 0.00377 - 45 0.00755 - 46 0.0151 - 47 0.00189 - - 40 8 3 0 - 6 0.125 - 46 0.25 - 47 0.625 - - 41 29 9 0 - 0 0.069 - 7 0.0345 - 8 0.0345 - 13 0.414 - 14 0.31 - 15 0.0345 - 26 0.0345 - 31 0.0345 - 46 0.0345 - - 42 5 4 0 - 2 0.2 - 7 0.2 - 14 0.4 - 32 0.2 - - 46 27 11 0 - 2 0.148 - 7 0.222 - 8 0.0741 - 13 0.259 - 14 0.0741 - 19 0.037 - 26 0.037 - 29 0.037 - 30 0.037 - 42 0.037 - 44 0.037 - - 48 221 17 0 - 0 0.00452 - 2 0.0136 - 7 0.0588 - 8 0.0452 - 12 0.00452 - 13 0.167 - 14 0.104 - 15 0.0226 - 16 0.00452 - 21 0.00452 - 26 0.0136 - 30 0.0136 - 40 0.385 - 41 0.109 - 42 0.0317 - 44 0.00452 - 46 0.0136 - - 49 12 4 0 - 2 0.0833 - 7 0.0833 - 40 0.5 - 41 0.333 - - 55 300 18 0 - 0 0.0467 - 2 0.0267 - 3 0.00333 - 7 0.03 - 8 0.00333 - 9 0.00333 - 12 0.0133 - 13 0.0233 - 21 0.01 - 26 0.01 - 29 0.0833 - 31 0.03 - 32 0.0133 - 37 0.00333 - 40 0.213 - 41 0.47 - 42 0.0133 - 46 0.00333 - - 57 2237 27 0 - 0 0.0152 - 2 0.0434 - 4 0.00358 - 7 0.0724 - 8 0.00134 - 12 0.00581 - 13 0.00179 - 14 0.00224 - 15 0.000447 - 19 0.000894 - 21 0.00492 - 26 0.00402 - 28 0.000447 - 29 0.0219 - 30 0.000894 - 32 0.00894 - 33 0.00268 - 34 0.000447 - 37 0.00268 - 40 0.553 - 41 0.219 - 42 0.0259 - 43 0.00134 - 44 0.000894 - 45 0.000894 - 46 0.00358 - 47 0.000894 - - 58 36 11 0 - 2 0.0556 - 7 0.0556 - 8 0.0278 - 13 0.528 - 14 0.0556 - 15 0.0278 - 26 0.0278 - 30 0.0278 - 40 0.0833 - 41 0.0833 - 47 0.0278 - - 59 7 5 0 - 3 0.143 - 7 0.286 - 8 0.286 - 21 0.143 - 40 0.143 - - 60 706 15 0 - 2 0.00142 - 4 0.00283 - 8 0.154 - 9 0.00425 - 13 0.687 - 14 0.00992 - 15 0.0793 - 21 0.00142 - 29 0.00142 - 30 0.00283 - 31 0.00567 - 41 0.0142 - 43 0.0241 - 44 0.0085 - 45 0.00283 - - 62 898 17 0 - 0 0.0189 - 2 0.0156 - 7 0.0746 - 12 0.00445 - 13 0.00111 - 21 0.00557 - 29 0.00111 - 30 0.00111 - 33 0.00111 - 34 0.00111 - 37 0.00334 - 40 0.653 - 41 0.199 - 42 0.0134 - 44 0.00111 - 46 0.00223 - 47 0.00334 - - 64 460 11 0 - 0 0.00652 - 2 0.0283 - 4 0.00217 - 5 0.00217 - 7 0.0326 - 21 0.00217 - 40 0.672 - 41 0.222 - 42 0.0283 - 46 0.00217 - 47 0.00217 - - 48 1047 22 10 - 0 0.000955 - 2 0.165 - 4 0.00573 - 7 0.449 - 8 0.0115 - 12 0.000955 - 13 0.0363 - 14 0.022 - 15 0.00478 - 16 0.000955 - 19 0.000955 - 21 0.00955 - 22 0.000955 - 26 0.0229 - 30 0.00287 - 31 0.000955 - 40 0.0812 - 41 0.129 - 42 0.0229 - 43 0.000955 - 44 0.0229 - 46 0.00764 - - 2 207 18 0 - 0 0.00483 - 2 0.0193 - 4 0.00483 - 7 0.0773 - 8 0.0435 - 12 0.00483 - 13 0.164 - 14 0.106 - 15 0.0145 - 16 0.00483 - 21 0.00966 - 26 0.00966 - 30 0.0145 - 40 0.319 - 41 0.135 - 42 0.0483 - 44 0.00966 - 46 0.00966 - - 4 3 1 0 - 2 1 - - 7 5 3 0 - 8 0.4 - 40 0.4 - 41 0.2 - - 21 10 4 0 - 2 0.1 - 15 0.1 - 40 0.4 - 41 0.4 - - 41 42 8 0 - 2 0.452 - 13 0.0238 - 15 0.0238 - 21 0.0476 - 40 0.119 - 41 0.286 - 44 0.0238 - 46 0.0238 - - 42 3 2 0 - 40 0.667 - 41 0.333 - - 44 1 1 0 - 43 1 - - 45 12 5 0 - 2 0.0833 - 7 0.167 - 40 0.167 - 41 0.167 - 46 0.417 - - 47 750 13 0 - 2 0.191 - 4 0.00667 - 7 0.603 - 8 0.00133 - 13 0.00133 - 19 0.00133 - 21 0.008 - 22 0.00133 - 26 0.028 - 31 0.00133 - 41 0.111 - 42 0.0187 - 44 0.028 - - 50 4 2 0 - 14 0.25 - 41 0.75 - - 49 35 9 3 - 2 0.0286 - 7 0.229 - 8 0.0571 - 13 0.0857 - 15 0.0857 - 21 0.0286 - 26 0.114 - 40 0.171 - 41 0.2 - - 8 16 8 0 - 2 0.0625 - 7 0.125 - 8 0.0625 - 13 0.188 - 15 0.188 - 21 0.0625 - 26 0.25 - 40 0.0625 - - 47 5 2 0 - 7 0.8 - 41 0.2 - - 48 7 3 0 - 7 0.143 - 40 0.571 - 41 0.286 - - 50 4 2 0 - 8 0.75 - 31 0.25 - - 55 335 19 8 - 0 0.0418 - 2 0.0239 - 3 0.00299 - 7 0.0478 - 8 0.00299 - 9 0.00299 - 12 0.0119 - 13 0.0209 - 21 0.00896 - 26 0.0716 - 29 0.0746 - 31 0.0269 - 32 0.0119 - 37 0.00299 - 40 0.191 - 41 0.439 - 42 0.0119 - 43 0.00299 - 46 0.00299 - - 7 4 1 0 - 40 1 - - 8 287 17 0 - 0 0.0418 - 2 0.0279 - 3 0.00348 - 7 0.0279 - 8 0.00348 - 12 0.00697 - 13 0.00697 - 21 0.00697 - 26 0.0836 - 29 0.0871 - 31 0.0314 - 32 0.0105 - 37 0.00348 - 40 0.199 - 41 0.446 - 42 0.0105 - 46 0.00348 - - 21 14 6 0 - 0 0.0714 - 7 0.357 - 12 0.0714 - 21 0.0714 - 32 0.0714 - 41 0.357 - - 31 3 3 0 - 0 0.333 - 12 0.333 - 40 0.333 - - 44 1 1 0 - 43 1 - - 47 1 1 0 - 9 1 - - 48 7 4 0 - 7 0.143 - 13 0.429 - 40 0.143 - 41 0.286 - - 49 8 4 0 - 7 0.125 - 40 0.125 - 41 0.625 - 42 0.125 - - 57 2329 28 15 - 0 0.0146 - 2 0.0416 - 4 0.00386 - 7 0.0932 - 8 0.00129 - 9 0.000429 - 12 0.00558 - 13 0.00215 - 14 0.00215 - 15 0.000859 - 19 0.000859 - 21 0.00558 - 26 0.0125 - 28 0.000429 - 29 0.021 - 30 0.000859 - 32 0.00859 - 33 0.00258 - 34 0.000429 - 37 0.00258 - 40 0.532 - 41 0.213 - 42 0.0258 - 43 0.00129 - 44 0.000859 - 45 0.000859 - 46 0.00386 - 47 0.000859 - - 2 1 1 0 - 9 1 - - 7 12 3 0 - 2 0.0833 - 7 0.333 - 40 0.583 - - 8 1515 26 0 - 0 0.0165 - 2 0.0436 - 4 0.00198 - 7 0.0904 - 8 0.00132 - 12 0.00726 - 13 0.00198 - 14 0.00198 - 15 0.00132 - 19 0.00132 - 21 0.00528 - 26 0.0112 - 28 0.00066 - 29 0.0277 - 30 0.00066 - 32 0.00858 - 33 0.00132 - 34 0.00066 - 37 0.00264 - 40 0.525 - 41 0.222 - 42 0.0205 - 43 0.00132 - 44 0.00066 - 46 0.0033 - 47 0.00066 - - 9 57 9 0 - 0 0.0351 - 2 0.0526 - 4 0.0526 - 7 0.228 - 8 0.0175 - 14 0.0175 - 40 0.421 - 41 0.14 - 42 0.0351 - - 13 19 7 0 - 0 0.0526 - 7 0.158 - 26 0.0526 - 37 0.0526 - 40 0.368 - 41 0.263 - 45 0.0526 - - 21 76 13 0 - 0 0.0132 - 2 0.0263 - 7 0.0658 - 21 0.0132 - 26 0.0658 - 29 0.0526 - 32 0.0526 - 33 0.0395 - 37 0.0132 - 40 0.408 - 41 0.224 - 42 0.0132 - 47 0.0132 - - 31 139 13 0 - 0 0.0144 - 2 0.0647 - 4 0.00719 - 7 0.0719 - 21 0.00719 - 29 0.00719 - 32 0.0144 - 33 0.00719 - 40 0.532 - 41 0.245 - 42 0.0144 - 43 0.00719 - 45 0.00719 - - 32 2 2 0 - 29 0.5 - 32 0.5 - - 42 2 2 0 - 40 0.5 - 46 0.5 - - 46 30 5 0 - 2 0.0667 - 7 0.0333 - 40 0.7 - 41 0.167 - 42 0.0333 - - 48 350 15 0 - 0 0.00571 - 2 0.0343 - 4 0.00571 - 7 0.114 - 12 0.00286 - 13 0.00286 - 14 0.00286 - 21 0.00857 - 26 0.0143 - 30 0.00286 - 40 0.569 - 41 0.186 - 42 0.0429 - 44 0.00286 - 46 0.00571 - - 55 27 3 0 - 40 0.815 - 41 0.0741 - 42 0.111 - - 57 54 7 0 - 2 0.0185 - 7 0.0185 - 12 0.0185 - 29 0.0185 - 40 0.685 - 41 0.222 - 42 0.0185 - - 58 1 1 0 - 46 1 - - 60 1 1 0 - 13 1 - - 58 55 15 3 - 2 0.0545 - 4 0.0182 - 7 0.164 - 8 0.0182 - 13 0.345 - 14 0.0364 - 15 0.0182 - 19 0.0182 - 21 0.0182 - 23 0.0182 - 26 0.0909 - 30 0.0182 - 40 0.0545 - 41 0.109 - 47 0.0182 - - 2 2 2 0 - 21 0.5 - 23 0.5 - - 8 10 5 0 - 4 0.1 - 7 0.3 - 13 0.1 - 19 0.1 - 26 0.4 - - 48 37 11 0 - 2 0.0811 - 7 0.108 - 8 0.027 - 13 0.459 - 14 0.027 - 15 0.027 - 26 0.027 - 30 0.027 - 40 0.0541 - 41 0.135 - 47 0.027 - - 59 11 6 0 - 3 0.0909 - 7 0.364 - 8 0.182 - 21 0.0909 - 26 0.182 - 40 0.0909 - - 60 708 16 1 - 2 0.00141 - 4 0.00282 - 7 0.00141 - 8 0.154 - 9 0.00424 - 13 0.685 - 14 0.00989 - 15 0.0791 - 21 0.00141 - 29 0.00141 - 30 0.00282 - 31 0.00565 - 41 0.0155 - 43 0.024 - 44 0.00847 - 45 0.00282 - - 8 1 1 0 - 29 1 - - 62 909 18 4 - 0 0.0187 - 2 0.0154 - 7 0.0781 - 12 0.0044 - 13 0.0011 - 21 0.0066 - 26 0.0011 - 29 0.0011 - 30 0.0011 - 33 0.0011 - 34 0.0011 - 37 0.0066 - 40 0.646 - 41 0.197 - 42 0.0132 - 44 0.0011 - 46 0.0033 - 47 0.0033 - - 9 6 2 0 - 7 0.5 - 40 0.5 - - 21 35 7 0 - 0 0.114 - 2 0.0286 - 33 0.0286 - 40 0.657 - 41 0.114 - 42 0.0286 - 47 0.0286 - - 31 30 2 0 - 40 0.867 - 41 0.133 - - 57 15 3 0 - 37 0.2 - 40 0.533 - 41 0.267 - - 64 463 12 2 - 0 0.00648 - 2 0.0281 - 4 0.00216 - 5 0.00216 - 7 0.0346 - 21 0.00216 - 26 0.00216 - 40 0.667 - 41 0.22 - 42 0.0302 - 46 0.00216 - 47 0.00216 - - 9 16 5 0 - 0 0.0625 - 2 0.0625 - 7 0.25 - 40 0.438 - 41 0.188 - - 58 8 2 0 - 40 0.875 - 47 0.125 - -49 42263 41 35 - 0 0.065 - 1 0.00182 - 2 0.0136 - 3 0.0157 - 4 0.0309 - 5 0.00128 - 7 0.159 - 8 0.0225 - 9 0.00199 - 10 0.000118 - 12 0.0152 - 13 0.00757 - 14 0.00327 - 15 0.00613 - 16 9.46e-05 - 17 7.1e-05 - 19 0.0103 - 20 0.00149 - 21 0.0208 - 22 0.00442 - 23 0.000189 - 24 0.00026 - 26 0.0331 - 28 0.0399 - 29 0.067 - 30 0.0304 - 31 0.063 - 32 0.0227 - 33 0.0363 - 34 0.000284 - 35 0.00133 - 37 0.00338 - 39 0.00251 - 40 0.131 - 41 0.171 - 42 0.00989 - 43 0.000875 - 44 0.000592 - 45 0.00163 - 46 0.00244 - 47 0.00128 - - 2 55 16 5 - 0 0.0182 - 3 0.109 - 4 0.0364 - 7 0.109 - 8 0.0545 - 9 0.0182 - 19 0.0182 - 21 0.236 - 22 0.109 - 26 0.0182 - 28 0.0182 - 29 0.0909 - 31 0.0727 - 39 0.0182 - 41 0.0545 - 45 0.0182 - - 4 9 4 0 - 8 0.111 - 28 0.111 - 29 0.444 - 31 0.333 - - 22 3 1 0 - 22 1 - - 41 7 4 0 - 3 0.286 - 7 0.143 - 21 0.429 - 39 0.143 - - 47 10 9 0 - 0 0.1 - 7 0.1 - 8 0.1 - 19 0.1 - 21 0.1 - 26 0.1 - 29 0.1 - 31 0.1 - 41 0.2 - - 49 23 7 0 - 3 0.174 - 4 0.087 - 7 0.174 - 8 0.0435 - 21 0.348 - 22 0.13 - 45 0.0435 - - 3 20 7 1 - 2 0.05 - 7 0.1 - 14 0.05 - 15 0.05 - 26 0.05 - 40 0.35 - 41 0.35 - - 47 8 4 0 - 2 0.125 - 15 0.125 - 26 0.125 - 41 0.625 - - 4 84 15 3 - 0 0.0357 - 4 0.0119 - 7 0.19 - 8 0.0595 - 13 0.0238 - 14 0.0238 - 26 0.0119 - 28 0.0119 - 29 0.0119 - 30 0.0119 - 31 0.0357 - 32 0.0476 - 40 0.333 - 41 0.179 - 42 0.0119 - - 7 52 8 0 - 0 0.0192 - 4 0.0192 - 7 0.115 - 8 0.0385 - 28 0.0192 - 31 0.0192 - 40 0.481 - 41 0.288 - - 21 4 2 0 - 8 0.5 - 13 0.5 - - 47 28 11 0 - 0 0.0714 - 7 0.357 - 8 0.0357 - 14 0.0714 - 26 0.0357 - 29 0.0357 - 30 0.0357 - 31 0.0714 - 32 0.143 - 40 0.107 - 42 0.0357 - - 5 2 2 0 - 0 0.5 - 35 0.5 - - 6 7 4 0 - 15 0.143 - 41 0.571 - 42 0.143 - 46 0.143 - - 7 697 30 8 - 0 0.0143 - 2 0.0201 - 3 0.187 - 4 0.0459 - 5 0.00143 - 7 0.244 - 8 0.0244 - 12 0.0043 - 13 0.01 - 14 0.00717 - 15 0.01 - 17 0.00143 - 19 0.00717 - 20 0.00574 - 21 0.0301 - 22 0.0043 - 26 0.0301 - 28 0.00717 - 29 0.0258 - 30 0.0115 - 31 0.0359 - 32 0.0043 - 33 0.00717 - 35 0.00143 - 39 0.0258 - 40 0.115 - 41 0.109 - 42 0.00287 - 45 0.00143 - 47 0.00574 - - 2 9 3 0 - 7 0.111 - 21 0.556 - 41 0.333 - - 4 7 5 0 - 0 0.143 - 4 0.143 - 19 0.143 - 40 0.286 - 41 0.286 - - 9 8 4 0 - 8 0.25 - 29 0.25 - 30 0.125 - 31 0.375 - - 13 12 10 0 - 2 0.0833 - 8 0.25 - 13 0.0833 - 29 0.0833 - 30 0.0833 - 31 0.0833 - 33 0.0833 - 40 0.0833 - 41 0.0833 - 42 0.0833 - - 21 28 11 0 - 3 0.0357 - 4 0.25 - 7 0.179 - 8 0.0714 - 13 0.107 - 15 0.0357 - 21 0.0357 - 26 0.0357 - 30 0.0714 - 40 0.107 - 41 0.0714 - - 22 33 8 0 - 8 0.182 - 21 0.0303 - 28 0.152 - 29 0.212 - 30 0.0303 - 31 0.273 - 32 0.0606 - 33 0.0606 - - 47 482 28 0 - 0 0.0145 - 2 0.0228 - 3 0.268 - 4 0.0436 - 7 0.332 - 8 0.00622 - 12 0.00207 - 13 0.00622 - 14 0.0104 - 15 0.0124 - 17 0.00207 - 19 0.0083 - 20 0.00622 - 21 0.0249 - 22 0.00622 - 26 0.0332 - 29 0.00622 - 30 0.00622 - 31 0.0207 - 32 0.00207 - 33 0.00207 - 35 0.00207 - 39 0.0373 - 40 0.0581 - 41 0.0539 - 42 0.00207 - 45 0.00207 - 47 0.0083 - - 55 114 14 0 - 0 0.0175 - 2 0.0175 - 4 0.0263 - 5 0.00877 - 7 0.0351 - 12 0.0175 - 20 0.00877 - 21 0.0175 - 26 0.0351 - 29 0.0439 - 31 0.00877 - 33 0.00877 - 40 0.404 - 41 0.351 - - 8 310 25 8 - 0 0.00323 - 2 0.00968 - 3 0.0129 - 4 0.0161 - 7 0.31 - 8 0.0161 - 9 0.00323 - 12 0.00323 - 13 0.0419 - 14 0.0226 - 15 0.029 - 19 0.00323 - 21 0.00968 - 26 0.142 - 29 0.00968 - 30 0.00645 - 32 0.00323 - 35 0.00645 - 37 0.00323 - 40 0.129 - 41 0.19 - 42 0.0129 - 43 0.00645 - 46 0.00645 - 47 0.00323 - - 2 5 3 0 - 4 0.2 - 7 0.2 - 41 0.6 - - 4 6 4 0 - 7 0.333 - 40 0.167 - 41 0.167 - 42 0.333 - - 7 5 4 0 - 13 0.2 - 29 0.2 - 40 0.4 - 41 0.2 - - 21 71 10 0 - 4 0.0423 - 7 0.451 - 13 0.0845 - 14 0.0141 - 15 0.0282 - 26 0.127 - 29 0.0141 - 35 0.0141 - 40 0.0845 - 41 0.141 - - 22 7 3 0 - 7 0.286 - 41 0.571 - 46 0.143 - - 23 4 4 0 - 9 0.25 - 14 0.25 - 26 0.25 - 41 0.25 - - 28 2 1 0 - 13 1 - - 47 204 24 0 - 0 0.0049 - 2 0.0147 - 3 0.0196 - 4 0.0049 - 7 0.275 - 8 0.0245 - 12 0.0049 - 13 0.0196 - 14 0.0245 - 15 0.0294 - 19 0.0049 - 21 0.0147 - 26 0.167 - 29 0.0049 - 30 0.0098 - 32 0.0049 - 35 0.0049 - 37 0.0049 - 40 0.142 - 41 0.191 - 42 0.0098 - 43 0.0098 - 46 0.0049 - 47 0.0049 - - 9 132 13 4 - 0 0.00758 - 2 0.0152 - 4 0.0303 - 7 0.508 - 8 0.0303 - 13 0.053 - 14 0.0152 - 15 0.0303 - 21 0.00758 - 26 0.053 - 33 0.00758 - 40 0.106 - 41 0.136 - - 4 4 3 0 - 13 0.25 - 15 0.25 - 41 0.5 - - 21 29 10 0 - 0 0.0345 - 4 0.103 - 7 0.379 - 8 0.103 - 13 0.103 - 15 0.069 - 26 0.0345 - 33 0.0345 - 40 0.103 - 41 0.0345 - - 47 55 9 0 - 2 0.0182 - 4 0.0182 - 7 0.473 - 13 0.0364 - 15 0.0182 - 21 0.0182 - 26 0.0545 - 40 0.164 - 41 0.2 - - 55 39 7 0 - 2 0.0256 - 7 0.692 - 13 0.0256 - 14 0.0256 - 26 0.0769 - 40 0.0513 - 41 0.103 - - 10 131 21 1 - 0 0.0229 - 3 0.0382 - 4 0.191 - 5 0.0153 - 7 0.183 - 8 0.0611 - 13 0.0534 - 15 0.0153 - 19 0.0458 - 20 0.00763 - 21 0.107 - 26 0.0153 - 28 0.0229 - 29 0.00763 - 30 0.0153 - 31 0.0229 - 33 0.00763 - 37 0.0153 - 40 0.0305 - 41 0.107 - 42 0.0153 - - 47 7 5 0 - 0 0.143 - 7 0.286 - 26 0.143 - 31 0.286 - 40 0.143 - - 11 6 1 0 - 41 1 - - 13 92 23 6 - 0 0.0217 - 2 0.0543 - 4 0.0326 - 7 0.293 - 8 0.0217 - 9 0.0109 - 13 0.0217 - 15 0.0109 - 19 0.0109 - 21 0.0217 - 26 0.109 - 28 0.0109 - 29 0.0326 - 30 0.0109 - 31 0.0217 - 32 0.0109 - 33 0.0109 - 34 0.0109 - 35 0.0217 - 37 0.0217 - 40 0.13 - 41 0.0978 - 42 0.0109 - - 2 3 2 0 - 7 0.667 - 42 0.333 - - 3 2 2 0 - 9 0.5 - 13 0.5 - - 4 11 9 0 - 0 0.0909 - 7 0.0909 - 13 0.0909 - 28 0.0909 - 30 0.0909 - 33 0.0909 - 35 0.182 - 37 0.182 - 40 0.0909 - - 7 6 5 0 - 7 0.167 - 8 0.167 - 26 0.167 - 40 0.333 - 41 0.167 - - 8 11 7 0 - 2 0.0909 - 7 0.182 - 8 0.0909 - 19 0.0909 - 26 0.273 - 32 0.0909 - 40 0.182 - - 47 50 12 0 - 0 0.02 - 2 0.04 - 4 0.06 - 7 0.34 - 15 0.02 - 21 0.02 - 26 0.12 - 29 0.06 - 31 0.04 - 34 0.02 - 40 0.12 - 41 0.14 - - 14 5 3 0 - 2 0.4 - 7 0.2 - 26 0.4 - - 15 26 4 0 - 4 0.0385 - 15 0.0769 - 40 0.0385 - 41 0.846 - - 19 6 4 0 - 0 0.333 - 7 0.167 - 40 0.167 - 41 0.333 - - 21 17337 41 14 - 0 0.0758 - 1 0.00225 - 2 0.01 - 3 0.0253 - 4 0.0318 - 5 0.00127 - 7 0.155 - 8 0.0237 - 9 0.00323 - 10 0.000173 - 12 0.018 - 13 0.00675 - 14 0.00271 - 15 0.00583 - 16 0.000115 - 17 5.77e-05 - 19 0.0114 - 20 0.00144 - 21 0.0224 - 22 0.00848 - 23 0.000231 - 24 0.000404 - 26 0.0337 - 28 0.0465 - 29 0.0786 - 30 0.0359 - 31 0.0731 - 32 0.0269 - 33 0.0436 - 34 0.000115 - 35 0.00121 - 37 0.00335 - 39 0.00438 - 40 0.0751 - 41 0.159 - 42 0.00594 - 43 0.000577 - 44 0.00075 - 45 0.00173 - 46 0.0026 - 47 0.000577 - - 2 80 22 0 - 0 0.0125 - 2 0.025 - 3 0.0125 - 4 0.0125 - 7 0.188 - 8 0.0125 - 10 0.0125 - 15 0.0125 - 19 0.0125 - 21 0.05 - 22 0.0125 - 26 0.025 - 28 0.0125 - 29 0.0125 - 30 0.025 - 31 0.0625 - 32 0.0125 - 40 0.175 - 41 0.262 - 42 0.025 - 44 0.0125 - 45 0.0125 - - 4 12 7 0 - 0 0.0833 - 4 0.0833 - 8 0.333 - 19 0.0833 - 22 0.0833 - 26 0.0833 - 40 0.25 - - 7 72 14 0 - 0 0.0417 - 2 0.0278 - 4 0.125 - 7 0.0556 - 8 0.0139 - 9 0.0278 - 15 0.0278 - 21 0.0139 - 26 0.0278 - 30 0.0278 - 31 0.0417 - 40 0.153 - 41 0.389 - 42 0.0278 - - 10 4 2 0 - 4 0.75 - 15 0.25 - - 19 1 1 0 - 13 1 - - 21 886 32 0 - 0 0.044 - 2 0.0135 - 3 0.00113 - 4 0.044 - 5 0.00339 - 7 0.31 - 8 0.0282 - 9 0.00226 - 10 0.00113 - 12 0.00903 - 13 0.00339 - 14 0.00339 - 15 0.00226 - 19 0.0113 - 21 0.0147 - 22 0.00564 - 26 0.035 - 28 0.0181 - 29 0.0169 - 30 0.00677 - 31 0.0406 - 32 0.00903 - 33 0.0169 - 35 0.00339 - 37 0.00564 - 40 0.159 - 41 0.172 - 42 0.0102 - 43 0.00226 - 44 0.00226 - 45 0.00113 - 46 0.00339 - - 22 117 12 0 - 2 0.00855 - 4 0.0171 - 7 0.342 - 8 0.0598 - 26 0.0427 - 28 0.0513 - 30 0.0171 - 31 0.0598 - 37 0.0171 - 40 0.094 - 41 0.274 - 42 0.0171 - - 23 34 13 0 - 0 0.0294 - 2 0.0294 - 7 0.0588 - 8 0.118 - 12 0.0882 - 14 0.0294 - 15 0.0882 - 19 0.0294 - 29 0.0294 - 31 0.235 - 32 0.0294 - 41 0.206 - 43 0.0294 - - 24 3 3 0 - 7 0.333 - 40 0.333 - 46 0.333 - - 41 2 2 0 - 3 0.5 - 4 0.5 - - 45 3 3 0 - 7 0.333 - 21 0.333 - 46 0.333 - - 47 15577 41 0 - 0 0.0812 - 1 0.0025 - 2 0.00905 - 3 0.0279 - 4 0.0315 - 5 0.00122 - 7 0.146 - 8 0.0237 - 9 0.00327 - 10 6.42e-05 - 12 0.0193 - 13 0.00719 - 14 0.00276 - 15 0.00578 - 16 0.000128 - 17 6.42e-05 - 19 0.0115 - 20 0.0016 - 21 0.0236 - 22 0.00899 - 23 0.000257 - 24 0.000449 - 26 0.0343 - 28 0.0503 - 29 0.0859 - 30 0.0391 - 31 0.0774 - 32 0.0293 - 33 0.0475 - 34 0.000128 - 35 0.00116 - 37 0.00308 - 39 0.00488 - 40 0.0583 - 41 0.149 - 42 0.00507 - 43 0.000449 - 44 0.000642 - 45 0.0018 - 46 0.0025 - 47 0.000642 - - 49 10 5 0 - 3 0.1 - 7 0.4 - 9 0.1 - 40 0.2 - 41 0.2 - - 55 526 17 0 - 0 0.0076 - 2 0.0285 - 4 0.00951 - 7 0.12 - 13 0.0019 - 15 0.0038 - 19 0.00951 - 26 0.0152 - 29 0.0152 - 30 0.0019 - 31 0.0019 - 33 0.0019 - 37 0.0057 - 40 0.395 - 41 0.363 - 42 0.0171 - 46 0.0019 - - 22 718 21 5 - 0 0.00418 - 2 0.0334 - 3 0.00139 - 4 0.0432 - 7 0.297 - 8 0.0752 - 12 0.00279 - 13 0.00279 - 21 0.00696 - 26 0.0306 - 28 0.0306 - 29 0.00696 - 30 0.00557 - 31 0.0153 - 32 0.00139 - 33 0.00418 - 40 0.298 - 41 0.127 - 42 0.0111 - 43 0.00139 - 45 0.00139 - - 2 11 5 0 - 7 0.364 - 8 0.0909 - 28 0.0909 - 40 0.0909 - 41 0.364 - - 4 13 6 0 - 7 0.231 - 8 0.385 - 13 0.0769 - 30 0.154 - 32 0.0769 - 42 0.0769 - - 21 114 13 0 - 2 0.0263 - 4 0.0263 - 7 0.289 - 8 0.325 - 12 0.00877 - 21 0.0351 - 26 0.0351 - 28 0.0439 - 30 0.0175 - 31 0.0263 - 33 0.0175 - 40 0.105 - 41 0.0439 - - 47 311 19 0 - 0 0.00322 - 2 0.0482 - 3 0.00322 - 4 0.0836 - 7 0.476 - 8 0.0161 - 12 0.00322 - 13 0.00322 - 21 0.00322 - 26 0.0482 - 28 0.0514 - 29 0.0161 - 31 0.0257 - 33 0.00322 - 40 0.109 - 41 0.09 - 42 0.00965 - 43 0.00322 - 45 0.00322 - - 55 266 9 0 - 0 0.00752 - 2 0.0226 - 4 0.00752 - 7 0.0827 - 8 0.0226 - 26 0.0113 - 40 0.628 - 41 0.203 - 42 0.015 - - 23 36 13 1 - 0 0.0278 - 4 0.0278 - 7 0.194 - 8 0.0278 - 12 0.0278 - 21 0.0278 - 26 0.0556 - 28 0.0556 - 31 0.389 - 32 0.0278 - 40 0.0556 - 41 0.0278 - 42 0.0556 - - 7 2 2 0 - 12 0.5 - 21 0.5 - - 24 95 19 2 - 0 0.0105 - 2 0.0105 - 3 0.0316 - 4 0.0421 - 7 0.232 - 8 0.0105 - 13 0.0211 - 14 0.0421 - 15 0.0105 - 20 0.0211 - 21 0.0421 - 26 0.0632 - 30 0.0316 - 39 0.0105 - 40 0.274 - 41 0.116 - 42 0.0105 - 46 0.0105 - 47 0.0105 - - 2 1 1 0 - 42 1 - - 8 1 1 0 - 0 1 - - 28 6 3 0 - 8 0.167 - 28 0.333 - 41 0.5 - - 29 1 1 0 - 42 1 - - 31 4 3 0 - 13 0.25 - 26 0.5 - 40 0.25 - - 37 3 2 0 - 4 0.333 - 41 0.667 - - 40 10 3 0 - 43 0.1 - 46 0.1 - 47 0.8 - - 41 32 10 2 - 2 0.219 - 3 0.0625 - 4 0.0312 - 7 0.219 - 8 0.0312 - 21 0.0625 - 26 0.0312 - 29 0.0625 - 31 0.0312 - 37 0.25 - - 21 2 1 0 - 29 1 - - 57 3 1 0 - 7 1 - - 42 3 3 0 - 2 0.333 - 7 0.333 - 22 0.333 - - 46 7 4 0 - 7 0.571 - 8 0.143 - 26 0.143 - 47 0.143 - - 47 19808 41 32 - 0 0.0693 - 1 0.00192 - 2 0.0136 - 3 0.00353 - 4 0.0311 - 5 0.00136 - 7 0.139 - 8 0.0218 - 9 0.00121 - 10 0.000101 - 12 0.0163 - 13 0.00777 - 14 0.00343 - 15 0.00631 - 16 0.000101 - 17 5.05e-05 - 19 0.0109 - 20 0.00157 - 21 0.0207 - 22 0.00151 - 23 0.000202 - 24 0.000202 - 26 0.0283 - 28 0.0426 - 29 0.0715 - 30 0.0323 - 31 0.0671 - 32 0.0242 - 33 0.0388 - 34 0.000303 - 35 0.00136 - 37 0.00323 - 39 0.000505 - 40 0.139 - 41 0.181 - 42 0.0104 - 43 0.000909 - 44 0.000606 - 45 0.00172 - 46 0.00242 - 47 0.00136 - - 2 21 10 0 - 0 0.0476 - 7 0.0476 - 8 0.0952 - 19 0.0476 - 21 0.0952 - 26 0.0476 - 28 0.0476 - 29 0.238 - 31 0.19 - 41 0.143 - - 3 20 7 0 - 2 0.05 - 7 0.1 - 14 0.05 - 15 0.05 - 26 0.05 - 40 0.35 - 41 0.35 - - 4 79 14 0 - 0 0.038 - 4 0.0127 - 7 0.19 - 8 0.038 - 14 0.0253 - 26 0.0127 - 28 0.0127 - 29 0.0127 - 30 0.0127 - 31 0.038 - 32 0.0506 - 40 0.354 - 41 0.19 - 42 0.0127 - - 5 2 2 0 - 0 0.5 - 35 0.5 - - 6 6 3 0 - 41 0.667 - 42 0.167 - 46 0.167 - - 7 377 27 0 - 0 0.0265 - 2 0.0371 - 3 0.00531 - 4 0.0398 - 5 0.00265 - 7 0.111 - 8 0.0371 - 12 0.00796 - 13 0.0159 - 14 0.0133 - 15 0.00531 - 19 0.0133 - 20 0.0106 - 21 0.0451 - 26 0.0292 - 28 0.0133 - 29 0.0477 - 30 0.0159 - 31 0.0663 - 32 0.00796 - 33 0.0133 - 35 0.00265 - 40 0.212 - 41 0.202 - 42 0.00531 - 45 0.00265 - 47 0.0106 - - 8 234 25 0 - 0 0.00427 - 2 0.0128 - 3 0.00427 - 4 0.0214 - 7 0.274 - 8 0.00427 - 9 0.00427 - 12 0.00427 - 13 0.047 - 14 0.0299 - 15 0.0342 - 19 0.00427 - 21 0.0128 - 26 0.0427 - 29 0.0128 - 30 0.00855 - 32 0.00427 - 35 0.00855 - 37 0.00427 - 40 0.171 - 41 0.252 - 42 0.0171 - 43 0.00855 - 46 0.00855 - 47 0.00427 - - 9 130 13 0 - 0 0.00769 - 2 0.0154 - 4 0.0308 - 7 0.508 - 8 0.0308 - 13 0.0538 - 14 0.0154 - 15 0.0308 - 21 0.00769 - 26 0.0462 - 33 0.00769 - 40 0.108 - 41 0.138 - - 10 129 21 0 - 0 0.0233 - 3 0.0388 - 4 0.194 - 5 0.0155 - 7 0.178 - 8 0.062 - 13 0.0543 - 15 0.0155 - 19 0.0465 - 20 0.00775 - 21 0.109 - 26 0.00775 - 28 0.0233 - 29 0.00775 - 30 0.0155 - 31 0.0233 - 33 0.00775 - 37 0.0155 - 40 0.031 - 41 0.109 - 42 0.0155 - - 11 6 1 0 - 41 1 - - 13 78 21 0 - 0 0.0256 - 2 0.0641 - 4 0.0385 - 7 0.269 - 8 0.0256 - 9 0.0128 - 13 0.0256 - 15 0.0128 - 19 0.0128 - 21 0.0256 - 26 0.0769 - 28 0.0128 - 29 0.0385 - 30 0.0128 - 31 0.0256 - 32 0.0128 - 33 0.0128 - 34 0.0128 - 40 0.154 - 41 0.115 - 42 0.0128 - - 14 2 1 0 - 2 1 - - 15 26 4 0 - 4 0.0385 - 15 0.0769 - 40 0.0385 - 41 0.846 - - 19 6 4 0 - 0 0.333 - 7 0.167 - 40 0.167 - 41 0.333 - - 21 15861 41 0 - 0 0.0829 - 1 0.0024 - 2 0.0109 - 3 0.00372 - 4 0.033 - 5 0.00139 - 7 0.134 - 8 0.0212 - 9 0.00132 - 10 0.000126 - 12 0.0197 - 13 0.00694 - 14 0.0029 - 15 0.00624 - 16 0.000126 - 17 6.3e-05 - 19 0.0122 - 20 0.00151 - 21 0.0221 - 22 0.00189 - 23 0.000252 - 24 0.000252 - 26 0.0281 - 28 0.0508 - 29 0.0859 - 30 0.039 - 31 0.0798 - 32 0.0294 - 33 0.0477 - 34 0.000126 - 35 0.00132 - 37 0.00347 - 39 0.000567 - 40 0.0816 - 41 0.174 - 42 0.00643 - 43 0.00063 - 44 0.000757 - 45 0.00189 - 46 0.00265 - 47 0.00063 - - 22 659 20 0 - 0 0.00455 - 2 0.0319 - 4 0.0212 - 7 0.284 - 8 0.0774 - 12 0.00303 - 13 0.00303 - 21 0.00759 - 26 0.0212 - 28 0.0334 - 29 0.00759 - 30 0.00607 - 31 0.0167 - 32 0.00152 - 33 0.00455 - 40 0.323 - 41 0.138 - 42 0.0121 - 43 0.00152 - 45 0.00152 - - 23 35 13 0 - 0 0.0286 - 4 0.0286 - 7 0.171 - 8 0.0286 - 12 0.0286 - 21 0.0286 - 26 0.0571 - 28 0.0571 - 31 0.4 - 32 0.0286 - 40 0.0571 - 41 0.0286 - 42 0.0571 - - 24 74 17 0 - 0 0.0135 - 2 0.0135 - 3 0.0135 - 4 0.0541 - 7 0.162 - 8 0.0135 - 13 0.027 - 14 0.0541 - 15 0.0135 - 20 0.027 - 21 0.0405 - 30 0.027 - 39 0.0135 - 40 0.351 - 41 0.149 - 42 0.0135 - 47 0.0135 - - 28 6 3 0 - 8 0.167 - 28 0.333 - 41 0.5 - - 29 1 1 0 - 42 1 - - 31 3 3 0 - 13 0.333 - 26 0.333 - 40 0.333 - - 37 3 2 0 - 4 0.333 - 41 0.667 - - 40 9 2 0 - 43 0.111 - 47 0.889 - - 41 5 4 0 - 7 0.2 - 26 0.2 - 29 0.4 - 31 0.2 - - 46 2 2 0 - 8 0.5 - 47 0.5 - - 49 42 5 0 - 7 0.119 - 12 0.0238 - 40 0.619 - 41 0.19 - 42 0.0476 - - 55 524 14 0 - 0 0.00573 - 2 0.0134 - 4 0.00763 - 7 0.143 - 13 0.00382 - 19 0.00191 - 21 0.00573 - 26 0.0687 - 29 0.00763 - 31 0.00191 - 40 0.458 - 41 0.191 - 42 0.0897 - 43 0.00191 - - 57 1267 29 0 - 0 0.0189 - 2 0.0316 - 3 0.00158 - 4 0.00947 - 5 0.00158 - 7 0.0805 - 8 0.00395 - 9 0.000789 - 12 0.00158 - 13 0.00316 - 15 0.00395 - 19 0.00395 - 21 0.00474 - 26 0.0166 - 29 0.00868 - 30 0.000789 - 31 0.000789 - 32 0.000789 - 33 0.000789 - 34 0.00237 - 35 0.000789 - 37 0.00474 - 40 0.514 - 41 0.257 - 42 0.0213 - 43 0.00158 - 45 0.00158 - 46 0.00158 - 47 0.00158 - - 58 3 2 0 - 30 0.333 - 40 0.667 - - 59 1 1 0 - 35 1 - - 62 30 5 0 - 0 0.0333 - 21 0.0333 - 40 0.7 - 41 0.133 - 42 0.1 - - 64 156 13 0 - 0 0.00641 - 2 0.00641 - 4 0.0128 - 7 0.00641 - 14 0.00641 - 19 0.00641 - 21 0.00641 - 26 0.0192 - 40 0.615 - 41 0.288 - 42 0.0128 - 43 0.00641 - 46 0.00641 - - 48 6 3 0 - 7 0.5 - 40 0.167 - 41 0.333 - - 49 384 14 4 - 2 0.0599 - 4 0.0234 - 7 0.695 - 8 0.00781 - 12 0.0026 - 14 0.0026 - 19 0.00521 - 21 0.0026 - 26 0.0104 - 37 0.00521 - 40 0.0703 - 41 0.0911 - 42 0.0182 - 46 0.00521 - - 2 27 5 0 - 7 0.111 - 12 0.037 - 40 0.556 - 41 0.259 - 42 0.037 - - 21 14 5 0 - 7 0.429 - 40 0.357 - 41 0.0714 - 42 0.0714 - 46 0.0714 - - 41 4 1 0 - 40 1 - - 47 327 12 0 - 2 0.0703 - 4 0.0275 - 7 0.771 - 8 0.00917 - 14 0.00306 - 19 0.00612 - 21 0.00306 - 26 0.0122 - 37 0.00612 - 41 0.0734 - 42 0.0153 - 46 0.00306 - - 55 740 14 5 - 0 0.00405 - 2 0.00946 - 4 0.00541 - 7 0.307 - 13 0.0027 - 19 0.00135 - 21 0.00541 - 26 0.132 - 29 0.00541 - 31 0.00135 - 40 0.324 - 41 0.136 - 42 0.0635 - 43 0.00135 - - 7 178 10 0 - 2 0.0112 - 7 0.275 - 13 0.0112 - 21 0.0112 - 26 0.0787 - 29 0.00562 - 31 0.00562 - 40 0.365 - 41 0.129 - 42 0.107 - - 21 514 10 0 - 2 0.00584 - 4 0.00778 - 7 0.323 - 21 0.00195 - 26 0.15 - 29 0.00195 - 40 0.321 - 41 0.132 - 42 0.0545 - 43 0.00195 - - 22 18 6 0 - 0 0.0556 - 7 0.222 - 26 0.111 - 29 0.111 - 40 0.222 - 41 0.278 - - 47 4 2 0 - 7 0.75 - 21 0.25 - - 49 10 6 0 - 0 0.2 - 2 0.1 - 7 0.1 - 19 0.1 - 26 0.2 - 41 0.3 - - 57 1294 29 10 - 0 0.0185 - 2 0.0309 - 3 0.00232 - 4 0.00927 - 5 0.00155 - 7 0.0927 - 8 0.00386 - 9 0.000773 - 12 0.00155 - 13 0.00309 - 15 0.00386 - 19 0.00386 - 21 0.00464 - 26 0.0185 - 29 0.0085 - 30 0.000773 - 31 0.000773 - 32 0.000773 - 33 0.000773 - 34 0.00232 - 35 0.000773 - 37 0.00464 - 40 0.503 - 41 0.254 - 42 0.0209 - 43 0.00232 - 45 0.00155 - 46 0.00155 - 47 0.00155 - - 7 133 14 0 - 0 0.0226 - 2 0.0226 - 3 0.00752 - 7 0.0602 - 8 0.015 - 12 0.00752 - 19 0.00752 - 26 0.0301 - 34 0.00752 - 40 0.466 - 41 0.323 - 42 0.015 - 43 0.00752 - 47 0.00752 - - 8 63 10 0 - 0 0.0159 - 2 0.0159 - 4 0.0159 - 7 0.127 - 13 0.0159 - 32 0.0159 - 33 0.0159 - 40 0.476 - 41 0.286 - 45 0.0159 - - 13 10 6 0 - 2 0.1 - 7 0.2 - 15 0.1 - 35 0.1 - 40 0.4 - 41 0.1 - - 21 614 22 0 - 0 0.0277 - 2 0.0326 - 3 0.00326 - 4 0.013 - 5 0.00163 - 7 0.0765 - 9 0.00163 - 12 0.00163 - 13 0.00326 - 15 0.00489 - 19 0.00651 - 21 0.00814 - 26 0.0212 - 29 0.013 - 30 0.00163 - 34 0.00326 - 37 0.00651 - 40 0.484 - 41 0.269 - 42 0.0163 - 45 0.00163 - 46 0.00326 - - 22 32 6 0 - 0 0.0625 - 7 0.188 - 29 0.0625 - 40 0.5 - 41 0.156 - 47 0.0312 - - 24 16 6 0 - 2 0.0625 - 7 0.188 - 8 0.0625 - 21 0.0625 - 40 0.25 - 41 0.375 - - 44 1 1 0 - 43 1 - - 49 164 12 0 - 2 0.0244 - 4 0.0122 - 7 0.183 - 8 0.0122 - 15 0.0061 - 26 0.0122 - 29 0.0061 - 37 0.0061 - 40 0.488 - 41 0.207 - 42 0.0366 - 43 0.0061 - - 55 215 9 0 - 0 0.00465 - 2 0.0465 - 5 0.00465 - 7 0.0605 - 26 0.0186 - 31 0.00465 - 40 0.6 - 41 0.223 - 42 0.0372 - - 57 20 6 0 - 7 0.05 - 13 0.05 - 37 0.05 - 40 0.65 - 41 0.15 - 42 0.05 - - 58 6 4 0 - 7 0.333 - 26 0.167 - 30 0.167 - 40 0.333 - - 59 1 1 0 - 35 1 - - 62 30 5 0 - 0 0.0333 - 21 0.0333 - 40 0.7 - 41 0.133 - 42 0.1 - - 64 159 13 2 - 0 0.00629 - 2 0.00629 - 4 0.0126 - 7 0.0126 - 14 0.00629 - 19 0.00629 - 21 0.00629 - 26 0.0189 - 40 0.61 - 41 0.289 - 42 0.0126 - 43 0.00629 - 46 0.00629 - - 21 35 6 0 - 4 0.0286 - 19 0.0286 - 21 0.0286 - 26 0.0286 - 40 0.486 - 41 0.4 - - 41 10 1 0 - 40 1 - -50 604 25 5 - 0 0.0364 - 1 0.00662 - 3 0.0166 - 4 0.212 - 7 0.166 - 8 0.113 - 9 0.00993 - 12 0.00993 - 13 0.0629 - 14 0.0662 - 15 0.0298 - 16 0.00662 - 20 0.0298 - 21 0.0298 - 22 0.00331 - 26 0.043 - 28 0.043 - 29 0.0132 - 30 0.0497 - 31 0.0232 - 32 0.00662 - 33 0.00993 - 35 0.00331 - 39 0.00331 - 45 0.00662 - - 7 209 21 0 - 0 0.00957 - 1 0.00957 - 3 0.0239 - 4 0.22 - 7 0.115 - 8 0.129 - 9 0.0144 - 13 0.0861 - 14 0.0766 - 15 0.0431 - 16 0.00478 - 20 0.0144 - 21 0.0335 - 26 0.0335 - 28 0.0622 - 30 0.0718 - 31 0.0287 - 32 0.00478 - 35 0.00478 - 39 0.00478 - 45 0.00957 - - 8 4 3 0 - 7 0.5 - 8 0.25 - 26 0.25 - - 21 83 15 3 - 0 0.108 - 4 0.181 - 7 0.289 - 8 0.0723 - 12 0.0361 - 14 0.0241 - 16 0.012 - 20 0.0723 - 21 0.0241 - 22 0.012 - 26 0.0602 - 29 0.0482 - 31 0.012 - 32 0.012 - 33 0.0361 - - 2 22 8 0 - 4 0.227 - 7 0.364 - 14 0.0909 - 20 0.0909 - 22 0.0455 - 26 0.0455 - 29 0.0909 - 31 0.0455 - - 7 11 5 0 - 4 0.364 - 7 0.0909 - 8 0.364 - 20 0.0909 - 21 0.0909 - - 21 50 12 0 - 0 0.18 - 4 0.12 - 7 0.3 - 8 0.04 - 12 0.06 - 16 0.02 - 20 0.06 - 21 0.02 - 26 0.08 - 29 0.04 - 32 0.02 - 33 0.06 - - 28 5 3 0 - 4 0.6 - 13 0.2 - 14 0.2 - - 47 302 25 4 - 0 0.0364 - 1 0.00662 - 3 0.0166 - 4 0.212 - 7 0.166 - 8 0.113 - 9 0.00993 - 12 0.00993 - 13 0.0629 - 14 0.0662 - 15 0.0298 - 16 0.00662 - 20 0.0298 - 21 0.0298 - 22 0.00331 - 26 0.043 - 28 0.043 - 29 0.0132 - 30 0.0497 - 31 0.0232 - 32 0.00662 - 33 0.00993 - 35 0.00331 - 39 0.00331 - 45 0.00662 - - 7 209 21 0 - 0 0.00957 - 1 0.00957 - 3 0.0239 - 4 0.22 - 7 0.115 - 8 0.129 - 9 0.0144 - 13 0.0861 - 14 0.0766 - 15 0.0431 - 16 0.00478 - 20 0.0144 - 21 0.0335 - 26 0.0335 - 28 0.0622 - 30 0.0718 - 31 0.0287 - 32 0.00478 - 35 0.00478 - 39 0.00478 - 45 0.00957 - - 8 4 3 0 - 7 0.5 - 8 0.25 - 26 0.25 - - 21 83 15 0 - 0 0.108 - 4 0.181 - 7 0.289 - 8 0.0723 - 12 0.0361 - 14 0.0241 - 16 0.012 - 20 0.0723 - 21 0.0241 - 22 0.012 - 26 0.0602 - 29 0.0482 - 31 0.012 - 32 0.012 - 33 0.0361 - - 28 5 3 0 - 4 0.6 - 13 0.2 - 14 0.2 - -51 1442 32 20 - 0 0.000693 - 2 0.00763 - 3 0.00139 - 4 0.0146 - 7 0.0444 - 8 0.00416 - 9 0.000693 - 12 0.000693 - 13 0.00347 - 14 0.00139 - 15 0.000693 - 19 0.00347 - 20 0.000693 - 21 0.0173 - 22 0.000693 - 26 0.00832 - 27 0.00208 - 28 0.00208 - 29 0.00277 - 30 0.00208 - 33 0.00139 - 34 0.000693 - 35 0.00139 - 37 0.00139 - 39 0.000693 - 40 0.279 - 41 0.164 - 42 0.025 - 43 0.0118 - 44 0.00139 - 46 0.0374 - 47 0.356 - - 2 42 15 1 - 3 0.0238 - 4 0.167 - 7 0.143 - 8 0.0238 - 9 0.0238 - 13 0.0238 - 14 0.0238 - 19 0.0238 - 21 0.333 - 26 0.0238 - 27 0.0238 - 28 0.0238 - 35 0.0476 - 37 0.0238 - 41 0.0714 - - 41 6 5 0 - 3 0.167 - 4 0.333 - 14 0.167 - 21 0.167 - 35 0.167 - - 4 2 2 0 - 27 0.5 - 41 0.5 - - 7 6 4 0 - 4 0.333 - 13 0.333 - 30 0.167 - 34 0.167 - - 21 42 15 5 - 3 0.0238 - 4 0.143 - 7 0.167 - 8 0.0476 - 13 0.0476 - 15 0.0238 - 19 0.0238 - 21 0.19 - 22 0.0238 - 26 0.0476 - 28 0.0476 - 37 0.0238 - 40 0.143 - 41 0.0238 - 42 0.0238 - - 2 9 4 0 - 7 0.333 - 15 0.111 - 21 0.444 - 41 0.111 - - 21 3 1 0 - 4 1 - - 47 19 10 0 - 3 0.0526 - 4 0.105 - 7 0.211 - 8 0.105 - 13 0.105 - 21 0.211 - 22 0.0526 - 26 0.0526 - 40 0.0526 - 42 0.0526 - - 49 3 2 0 - 26 0.333 - 40 0.667 - - 71 3 2 0 - 28 0.667 - 40 0.333 - - 40 210 3 0 - 43 0.00476 - 46 0.176 - 47 0.819 - - 41 31 12 2 - 2 0.0645 - 4 0.0323 - 7 0.548 - 14 0.0323 - 19 0.0323 - 20 0.0323 - 21 0.0323 - 27 0.0323 - 30 0.0645 - 39 0.0323 - 46 0.0645 - 47 0.0323 - - 51 4 3 0 - 2 0.5 - 19 0.25 - 39 0.25 - - 57 5 4 0 - 4 0.2 - 7 0.4 - 14 0.2 - 47 0.2 - - 42 16 4 0 - 7 0.125 - 8 0.0625 - 40 0.188 - 47 0.625 - - 46 38 4 0 - 7 0.0263 - 33 0.0263 - 43 0.0526 - 47 0.895 - - 47 495 14 13 - 2 0.00808 - 4 0.00202 - 7 0.00202 - 19 0.00202 - 26 0.00606 - 29 0.00404 - 33 0.00202 - 40 0.194 - 41 0.208 - 42 0.0202 - 43 0.0141 - 44 0.00202 - 46 0.0162 - 47 0.519 - - 21 5 3 0 - 19 0.2 - 40 0.6 - 41 0.2 - - 40 174 2 0 - 46 0.0115 - 47 0.989 - - 42 10 1 0 - 47 1 - - 46 36 3 0 - 33 0.0278 - 43 0.0278 - 47 0.944 - - 48 32 9 0 - 2 0.0312 - 7 0.0312 - 26 0.0625 - 40 0.188 - 41 0.531 - 42 0.0312 - 43 0.0625 - 46 0.0312 - 47 0.0312 - - 49 26 4 0 - 40 0.385 - 41 0.5 - 43 0.0769 - 47 0.0385 - - 51 4 1 0 - 40 1 - - 55 86 7 0 - 2 0.0116 - 29 0.0233 - 40 0.267 - 41 0.465 - 42 0.0465 - 46 0.0233 - 47 0.163 - - 57 51 6 0 - 26 0.0196 - 40 0.471 - 41 0.196 - 42 0.0588 - 43 0.0196 - 47 0.235 - - 62 13 4 0 - 40 0.385 - 41 0.462 - 46 0.0769 - 47 0.0769 - - 64 11 4 0 - 2 0.0909 - 40 0.455 - 41 0.0909 - 47 0.364 - - 69 17 5 0 - 4 0.0588 - 40 0.471 - 41 0.353 - 46 0.0588 - 47 0.0588 - - 71 9 6 0 - 2 0.111 - 40 0.333 - 41 0.222 - 43 0.111 - 44 0.111 - 47 0.111 - - 48 39 9 0 - 2 0.0256 - 7 0.0256 - 26 0.0513 - 40 0.308 - 41 0.436 - 42 0.0513 - 43 0.0513 - 46 0.0256 - 47 0.0256 - - 49 53 10 2 - 4 0.0377 - 7 0.132 - 8 0.0189 - 12 0.0189 - 21 0.0189 - 40 0.377 - 41 0.321 - 42 0.0189 - 43 0.0377 - 47 0.0189 - - 2 10 6 0 - 4 0.2 - 7 0.3 - 12 0.1 - 21 0.1 - 40 0.2 - 41 0.1 - - 47 21 5 0 - 7 0.0476 - 40 0.429 - 41 0.429 - 42 0.0476 - 47 0.0476 - - 51 16 5 1 - 2 0.0625 - 40 0.562 - 41 0.25 - 42 0.0625 - 46 0.0625 - - 47 5 3 0 - 2 0.2 - 41 0.6 - 42 0.2 - - 52 8 3 0 - 19 0.125 - 40 0.5 - 41 0.375 - - 55 193 13 8 - 0 0.00518 - 2 0.00518 - 7 0.0518 - 8 0.00518 - 21 0.00518 - 26 0.0155 - 29 0.0104 - 40 0.487 - 41 0.259 - 42 0.0622 - 43 0.00518 - 46 0.0155 - 47 0.0725 - - 2 9 3 0 - 0 0.111 - 40 0.778 - 41 0.111 - - 41 21 4 0 - 40 0.714 - 41 0.19 - 42 0.0476 - 46 0.0476 - - 42 17 5 0 - 40 0.706 - 41 0.0588 - 43 0.0588 - 46 0.0588 - 47 0.118 - - 45 17 2 0 - 40 0.941 - 42 0.0588 - - 47 77 9 0 - 7 0.104 - 21 0.013 - 26 0.039 - 29 0.026 - 40 0.221 - 41 0.429 - 42 0.039 - 46 0.013 - 47 0.117 - - 48 1 1 0 - 8 1 - - 52 1 1 0 - 2 1 - - 57 9 3 0 - 40 0.222 - 41 0.111 - 42 0.667 - - 57 89 8 3 - 4 0.0112 - 7 0.0562 - 26 0.0112 - 40 0.551 - 41 0.169 - 42 0.0562 - 43 0.0112 - 47 0.135 - - 47 26 5 0 - 26 0.0385 - 40 0.385 - 41 0.115 - 42 0.0385 - 47 0.423 - - 49 7 2 0 - 4 0.143 - 40 0.857 - - 55 15 4 0 - 7 0.2 - 40 0.467 - 41 0.267 - 43 0.0667 - - 62 54 5 1 - 40 0.815 - 41 0.111 - 42 0.037 - 46 0.0185 - 47 0.0185 - - 47 8 3 0 - 40 0.25 - 41 0.625 - 46 0.125 - - 64 40 4 0 - 2 0.025 - 40 0.8 - 41 0.075 - 47 0.1 - - 69 31 5 0 - 4 0.0323 - 40 0.71 - 41 0.194 - 46 0.0323 - 47 0.0323 - - 71 11 7 0 - 2 0.0909 - 7 0.0909 - 40 0.364 - 41 0.182 - 43 0.0909 - 44 0.0909 - 47 0.0909 - - 72 6 3 0 - 7 0.667 - 40 0.167 - 41 0.167 - -52 275 19 11 - 0 0.00727 - 2 0.0109 - 4 0.00727 - 7 0.0145 - 13 0.00727 - 19 0.0145 - 20 0.00727 - 21 0.00727 - 26 0.04 - 27 0.0109 - 28 0.0291 - 37 0.00727 - 40 0.142 - 41 0.52 - 42 0.00364 - 43 0.0291 - 45 0.00364 - 46 0.0364 - 47 0.102 - - 2 1 1 0 - 45 1 - - 13 5 2 0 - 40 0.8 - 46 0.2 - - 15 2 2 0 - 41 0.5 - 42 0.5 - - 21 18 5 0 - 4 0.0556 - 21 0.0556 - 37 0.0556 - 40 0.0556 - 41 0.778 - - 27 80 9 1 - 13 0.0125 - 19 0.0125 - 26 0.075 - 27 0.0125 - 28 0.025 - 40 0.225 - 41 0.538 - 43 0.0375 - 46 0.0625 - - 45 2 1 0 - 46 1 - - 28 11 4 0 - 0 0.0909 - 20 0.0909 - 28 0.182 - 41 0.636 - - 40 13 1 0 - 47 1 - - 41 1 1 0 - 27 1 - - 46 2 2 0 - 2 0.5 - 7 0.5 - - 47 127 17 7 - 0 0.00787 - 2 0.00787 - 4 0.00787 - 7 0.0157 - 13 0.00787 - 19 0.0157 - 20 0.00787 - 21 0.00787 - 26 0.0394 - 27 0.00787 - 28 0.0315 - 37 0.00787 - 40 0.102 - 41 0.559 - 43 0.0315 - 46 0.0315 - 47 0.11 - - 13 2 2 0 - 40 0.5 - 46 0.5 - - 21 17 4 0 - 4 0.0588 - 21 0.0588 - 37 0.0588 - 41 0.824 - - 27 70 9 0 - 13 0.0143 - 19 0.0143 - 26 0.0714 - 27 0.0143 - 28 0.0286 - 40 0.157 - 41 0.614 - 43 0.0429 - 46 0.0429 - - 28 11 4 0 - 0 0.0909 - 20 0.0909 - 28 0.182 - 41 0.636 - - 40 13 1 0 - 47 1 - - 46 2 2 0 - 2 0.5 - 7 0.5 - - 52 2 2 0 - 7 0.5 - 43 0.5 - - 52 4 4 0 - 2 0.25 - 7 0.25 - 41 0.25 - 43 0.25 - -53 99 14 6 - 4 0.0606 - 7 0.0808 - 8 0.0606 - 14 0.0202 - 15 0.0404 - 19 0.0404 - 21 0.0202 - 28 0.141 - 31 0.0202 - 37 0.0202 - 40 0.121 - 41 0.101 - 42 0.101 - 43 0.172 - - 8 3 1 0 - 41 1 - - 11 30 4 0 - 40 0.4 - 41 0.0667 - 42 0.167 - 43 0.367 - - 40 12 4 0 - 7 0.25 - 21 0.0833 - 28 0.583 - 37 0.0833 - - 42 2 1 0 - 15 1 - - 43 11 6 0 - 4 0.273 - 7 0.0909 - 8 0.273 - 14 0.0909 - 19 0.182 - 31 0.0909 - - 47 38 13 5 - 4 0.0789 - 7 0.105 - 8 0.0789 - 14 0.0263 - 15 0.0526 - 19 0.0526 - 21 0.0263 - 28 0.184 - 31 0.0263 - 37 0.0263 - 41 0.132 - 42 0.132 - 43 0.0789 - - 8 3 1 0 - 41 1 - - 11 10 3 0 - 41 0.2 - 42 0.5 - 43 0.3 - - 40 12 4 0 - 7 0.25 - 21 0.0833 - 28 0.583 - 37 0.0833 - - 42 2 1 0 - 15 1 - - 43 11 6 0 - 4 0.273 - 7 0.0909 - 8 0.273 - 14 0.0909 - 19 0.182 - 31 0.0909 - -54 1254 23 14 - 0 0.00159 - 2 0.00478 - 3 0.0271 - 4 0.00399 - 6 0.00159 - 7 0.112 - 8 0.0478 - 13 0.386 - 14 0.0447 - 15 0.121 - 18 0.00478 - 26 0.00638 - 29 0.00159 - 30 0.00319 - 31 0.00159 - 34 0.000797 - 40 0.00558 - 41 0.203 - 42 0.00159 - 43 0.00319 - 44 0.00239 - 45 0.00159 - 46 0.0136 - - 3 35 5 1 - 7 0.0286 - 13 0.257 - 15 0.0571 - 41 0.629 - 45 0.0286 - - 41 11 1 0 - 41 1 - - 4 4 1 0 - 8 1 - - 8 6 3 0 - 7 0.167 - 13 0.667 - 42 0.167 - - 13 18 4 0 - 7 0.722 - 26 0.167 - 40 0.0556 - 46 0.0556 - - 14 2 2 0 - 2 0.5 - 34 0.5 - - 15 371 10 3 - 3 0.062 - 4 0.0108 - 6 0.00539 - 7 0.299 - 8 0.0027 - 13 0.0108 - 26 0.0135 - 40 0.0027 - 41 0.59 - 43 0.0027 - - 15 29 4 0 - 7 0.897 - 13 0.0345 - 26 0.0345 - 41 0.0345 - - 41 232 4 0 - 3 0.0431 - 8 0.00431 - 13 0.0129 - 41 0.94 - - 47 105 7 0 - 3 0.124 - 4 0.0381 - 6 0.019 - 7 0.762 - 26 0.0381 - 40 0.00952 - 43 0.00952 - - 16 4 1 0 - 7 1 - - 40 1 1 0 - 43 1 - - 41 237 7 3 - 2 0.00844 - 3 0.0464 - 8 0.097 - 13 0.751 - 14 0.0717 - 15 0.0169 - 30 0.00844 - - 3 22 2 0 - 3 0.5 - 13 0.5 - - 15 213 6 0 - 2 0.00469 - 8 0.108 - 13 0.779 - 14 0.0798 - 15 0.0188 - 30 0.00939 - - 54 1 1 0 - 2 1 - - 47 411 18 8 - 0 0.00243 - 2 0.00487 - 7 0.0073 - 8 0.0681 - 13 0.589 - 14 0.0681 - 15 0.182 - 18 0.0073 - 29 0.00243 - 30 0.00487 - 31 0.00243 - 40 0.0073 - 41 0.0219 - 42 0.00243 - 43 0.00487 - 44 0.00243 - 45 0.00243 - 46 0.0195 - - 3 12 3 0 - 13 0.75 - 15 0.167 - 45 0.0833 - - 8 5 2 0 - 13 0.8 - 42 0.2 - - 13 1 1 0 - 40 1 - - 14 1 1 0 - 2 1 - - 15 15 5 0 - 7 0.2 - 8 0.0667 - 13 0.267 - 41 0.4 - 43 0.0667 - - 40 1 1 0 - 43 1 - - 41 225 6 0 - 2 0.00444 - 8 0.102 - 13 0.791 - 14 0.0756 - 15 0.0178 - 30 0.00889 - - 57 143 12 0 - 0 0.00699 - 8 0.021 - 13 0.294 - 14 0.0769 - 15 0.476 - 18 0.021 - 29 0.00699 - 31 0.00699 - 40 0.014 - 41 0.021 - 44 0.00699 - 46 0.049 - - 54 7 5 0 - 2 0.143 - 7 0.429 - 13 0.143 - 41 0.143 - 44 0.143 - - 55 8 5 0 - 4 0.125 - 7 0.375 - 13 0.25 - 15 0.125 - 41 0.125 - - 57 145 13 2 - 0 0.0069 - 7 0.0069 - 8 0.0207 - 13 0.29 - 14 0.0759 - 15 0.476 - 18 0.0207 - 29 0.0069 - 31 0.0069 - 40 0.0138 - 41 0.0207 - 44 0.0069 - 46 0.0483 - - 13 16 6 0 - 8 0.0625 - 13 0.312 - 14 0.0625 - 15 0.25 - 41 0.0625 - 46 0.25 - - 55 3 3 0 - 7 0.333 - 8 0.333 - 46 0.333 - - 64 1 1 0 - 46 1 - -55 743201 48 64 - 0 0.0725 - 1 0.000324 - 2 0.0381 - 3 0.0109 - 4 0.0192 - 5 9.28e-05 - 6 8.48e-05 - 7 0.218 - 8 0.0157 - 9 0.00101 - 10 0.000679 - 11 2.69e-06 - 12 0.0255 - 13 0.0155 - 14 0.00484 - 15 0.0115 - 16 0.000159 - 17 3.5e-05 - 18 0.000148 - 19 0.00383 - 20 0.000667 - 21 0.0224 - 22 0.00163 - 23 0.000167 - 24 0.000495 - 25 3.23e-05 - 26 0.0314 - 27 2.69e-06 - 28 0.00194 - 29 0.0528 - 30 0.00873 - 31 0.013 - 32 0.0128 - 33 0.0187 - 34 0.0103 - 35 0.00461 - 36 0.000354 - 37 0.00247 - 38 2.96e-05 - 39 0.00155 - 40 0.175 - 41 0.167 - 42 0.0181 - 43 0.00332 - 44 0.00367 - 45 0.00252 - 46 0.00333 - 47 0.00429 - - 0 57 13 3 - 0 0.0175 - 7 0.123 - 8 0.0877 - 13 0.0351 - 15 0.0175 - 21 0.246 - 23 0.175 - 29 0.105 - 30 0.0877 - 31 0.0526 - 41 0.0175 - 43 0.0175 - 45 0.0175 - - 13 25 7 0 - 7 0.08 - 8 0.16 - 13 0.04 - 21 0.2 - 23 0.4 - 30 0.08 - 45 0.04 - - 15 26 9 0 - 7 0.154 - 8 0.0385 - 13 0.0385 - 15 0.0385 - 21 0.346 - 29 0.231 - 30 0.0385 - 31 0.0769 - 41 0.0385 - - 19 3 3 0 - 0 0.333 - 7 0.333 - 30 0.333 - - 1 3 2 0 - 26 0.333 - 40 0.667 - - 2 6940 35 14 - 0 0.000144 - 2 0.000144 - 3 0.104 - 4 0.195 - 6 0.000144 - 7 0.0062 - 8 0.168 - 9 0.0107 - 10 0.00072 - 13 0.114 - 14 0.0501 - 15 0.186 - 16 0.00202 - 17 0.00101 - 19 0.00187 - 20 0.0399 - 21 0.0278 - 22 0.000576 - 23 0.000144 - 26 0.000432 - 28 0.000865 - 29 0.000576 - 30 0.0098 - 31 0.00548 - 33 0.00101 - 34 0.000144 - 35 0.00115 - 36 0.000144 - 37 0.000432 - 38 0.000288 - 39 0.0588 - 41 0.00346 - 42 0.000432 - 44 0.000576 - 45 0.00749 - - 3 18 3 0 - 3 0.889 - 7 0.0556 - 21 0.0556 - - 13 15 7 0 - 3 0.133 - 4 0.0667 - 8 0.2 - 21 0.267 - 28 0.133 - 30 0.133 - 33 0.0667 - - 14 6 2 0 - 30 0.167 - 33 0.833 - - 15 3 2 0 - 15 0.667 - 21 0.333 - - 41 1384 25 0 - 3 0.318 - 4 0.103 - 7 0.0224 - 8 0.0412 - 9 0.00939 - 10 0.00145 - 13 0.0549 - 14 0.0253 - 15 0.091 - 16 0.000723 - 19 0.000723 - 20 0.0065 - 21 0.0571 - 22 0.00145 - 23 0.000723 - 26 0.000723 - 28 0.000723 - 29 0.000723 - 30 0.00361 - 31 0.00289 - 34 0.000723 - 35 0.00217 - 39 0.249 - 41 0.00145 - 45 0.00434 - - 42 77 15 0 - 3 0.0649 - 4 0.156 - 8 0.0779 - 9 0.026 - 13 0.0649 - 14 0.0519 - 15 0.286 - 17 0.013 - 21 0.117 - 28 0.013 - 36 0.013 - 39 0.0519 - 41 0.039 - 44 0.013 - 45 0.013 - - 45 5 3 0 - 4 0.6 - 14 0.2 - 20 0.2 - - 46 35 7 0 - 4 0.143 - 8 0.143 - 13 0.0571 - 21 0.0286 - 22 0.0286 - 31 0.0286 - 45 0.571 - - 47 1 1 0 - 0 1 - - 55 5370 31 0 - 2 0.000186 - 3 0.0477 - 4 0.221 - 6 0.000186 - 7 0.00186 - 8 0.204 - 9 0.011 - 10 0.000559 - 13 0.131 - 14 0.0572 - 15 0.212 - 16 0.00242 - 17 0.00112 - 19 0.00223 - 20 0.0497 - 21 0.0177 - 22 0.000186 - 26 0.000372 - 28 0.000372 - 29 0.000559 - 30 0.0101 - 31 0.00615 - 33 0.000186 - 35 0.000931 - 37 0.000186 - 38 0.000372 - 39 0.0112 - 41 0.00354 - 42 0.000559 - 44 0.000559 - 45 0.00447 - - 57 4 3 0 - 7 0.25 - 13 0.5 - 21 0.25 - - 58 6 6 0 - 4 0.167 - 8 0.167 - 15 0.167 - 21 0.167 - 30 0.167 - 45 0.167 - - 62 6 2 0 - 4 0.167 - 30 0.833 - - 64 3 2 0 - 4 0.333 - 37 0.667 - - 3 8212 38 21 - 0 0.0178 - 2 0.0314 - 3 0.00499 - 4 0.0933 - 6 0.000122 - 7 0.167 - 8 0.00402 - 9 0.00244 - 10 0.000365 - 12 0.00706 - 13 0.00426 - 14 0.00146 - 15 0.00402 - 19 0.00231 - 20 0.000244 - 21 0.0108 - 22 0.000487 - 23 0.000122 - 25 0.000122 - 26 0.0899 - 28 0.000122 - 29 0.0141 - 30 0.00329 - 31 0.00548 - 32 0.0011 - 33 0.00329 - 34 0.00256 - 35 0.000852 - 37 0.00317 - 39 0.000122 - 40 0.2 - 41 0.278 - 42 0.0226 - 43 0.0167 - 44 0.0017 - 45 0.00134 - 46 0.000974 - 47 0.00195 - - 2 92 17 0 - 0 0.0326 - 2 0.0326 - 4 0.0109 - 7 0.0652 - 8 0.0109 - 12 0.0109 - 21 0.0109 - 26 0.0109 - 31 0.0109 - 33 0.0109 - 34 0.0109 - 40 0.304 - 41 0.391 - 42 0.0217 - 43 0.0217 - 44 0.0217 - 45 0.0217 - - 3 254 17 0 - 0 0.00787 - 2 0.0197 - 4 0.0276 - 7 0.217 - 8 0.00394 - 9 0.00394 - 12 0.0118 - 13 0.00787 - 14 0.00394 - 15 0.0354 - 26 0.287 - 32 0.00394 - 40 0.201 - 41 0.126 - 42 0.0236 - 43 0.0118 - 47 0.00787 - - 4 159 24 0 - 0 0.164 - 2 0.0377 - 4 0.00629 - 7 0.195 - 8 0.00629 - 10 0.0126 - 12 0.044 - 13 0.0126 - 14 0.00629 - 15 0.00629 - 19 0.00629 - 21 0.044 - 23 0.00629 - 26 0.0252 - 29 0.0314 - 31 0.0189 - 32 0.00629 - 33 0.00629 - 34 0.0126 - 35 0.0126 - 40 0.164 - 41 0.151 - 42 0.0126 - 45 0.0126 - - 7 12 7 0 - 3 0.0833 - 4 0.25 - 7 0.25 - 14 0.0833 - 21 0.0833 - 40 0.0833 - 41 0.167 - - 8 155 14 0 - 0 0.071 - 2 0.0516 - 7 0.116 - 12 0.00645 - 14 0.00645 - 19 0.0129 - 26 0.0323 - 31 0.0194 - 33 0.00645 - 34 0.00645 - 40 0.374 - 41 0.252 - 42 0.0387 - 47 0.00645 - - 9 3 2 0 - 33 0.667 - 34 0.333 - - 10 1 1 0 - 8 1 - - 13 164 20 0 - 0 0.0366 - 2 0.0549 - 4 0.0061 - 7 0.171 - 8 0.0061 - 12 0.0061 - 13 0.0061 - 14 0.0122 - 19 0.0061 - 26 0.0305 - 29 0.0061 - 30 0.0061 - 32 0.0122 - 33 0.0427 - 34 0.0061 - 40 0.14 - 41 0.378 - 42 0.0488 - 43 0.0122 - 46 0.0122 - - 14 12 7 0 - 2 0.167 - 3 0.167 - 7 0.0833 - 26 0.0833 - 30 0.0833 - 40 0.167 - 41 0.25 - - 15 1421 30 0 - 0 0.019 - 2 0.0394 - 3 0.000704 - 4 0.00281 - 7 0.0739 - 8 0.00141 - 9 0.000704 - 12 0.00563 - 13 0.00141 - 15 0.00422 - 19 0.00141 - 20 0.00141 - 21 0.00281 - 26 0.0387 - 28 0.000704 - 29 0.031 - 30 0.00211 - 31 0.00493 - 32 0.000704 - 33 0.00211 - 34 0.000704 - 37 0.00352 - 39 0.000704 - 40 0.251 - 41 0.481 - 42 0.00844 - 43 0.0169 - 44 0.00141 - 45 0.000704 - 47 0.000704 - - 20 1 1 0 - 30 1 - - 21 31 11 0 - 0 0.0323 - 2 0.0323 - 4 0.0323 - 7 0.484 - 14 0.0323 - 21 0.0323 - 26 0.0323 - 29 0.0645 - 37 0.0645 - 40 0.0968 - 41 0.0968 - - 29 1 1 0 - 14 1 - - 31 2 2 0 - 0 0.5 - 26 0.5 - - 38 13 6 0 - 4 0.0769 - 7 0.0769 - 40 0.231 - 41 0.154 - 42 0.0769 - 44 0.385 - - 39 1781 28 0 - 0 0.000561 - 2 0.0247 - 3 0.0202 - 4 0.396 - 6 0.000561 - 7 0.14 - 8 0.0101 - 9 0.000561 - 12 0.000561 - 13 0.0112 - 15 0.00225 - 19 0.00168 - 21 0.00786 - 22 0.00112 - 26 0.0415 - 29 0.000561 - 30 0.00168 - 31 0.00786 - 33 0.000561 - 34 0.00225 - 35 0.000561 - 37 0.00112 - 40 0.12 - 41 0.149 - 42 0.0118 - 43 0.0444 - 44 0.00112 - 47 0.000561 - - 41 320 10 0 - 2 0.025 - 7 0.00313 - 13 0.00313 - 25 0.00313 - 31 0.00313 - 40 0.172 - 41 0.669 - 42 0.0719 - 43 0.0188 - 47 0.0312 - - 45 3 1 0 - 46 1 - - 47 3753 32 0 - 0 0.0181 - 2 0.0306 - 3 0.000266 - 4 0.0107 - 7 0.227 - 8 0.00213 - 9 0.00453 - 10 0.000266 - 12 0.00959 - 13 0.00187 - 14 0.000799 - 15 0.00346 - 19 0.00266 - 21 0.016 - 22 0.000533 - 26 0.137 - 29 0.0168 - 30 0.0048 - 31 0.00426 - 32 0.00107 - 33 0.00293 - 34 0.00266 - 35 0.00107 - 37 0.00453 - 40 0.217 - 41 0.242 - 42 0.028 - 43 0.00533 - 44 0.000799 - 45 0.00133 - 46 0.000799 - 47 0.000266 - - 55 8 4 0 - 14 0.125 - 40 0.375 - 41 0.375 - 45 0.125 - - 60 6 5 0 - 2 0.167 - 21 0.167 - 26 0.167 - 40 0.333 - 41 0.167 - - 4 2568 37 12 - 0 0.247 - 1 0.000779 - 2 0.00857 - 3 0.00273 - 4 0.00584 - 7 0.274 - 8 0.00935 - 9 0.000389 - 10 0.000389 - 12 0.0666 - 13 0.00701 - 14 0.00117 - 15 0.00156 - 18 0.000779 - 19 0.00857 - 21 0.0238 - 22 0.000389 - 24 0.00195 - 26 0.00701 - 28 0.00389 - 29 0.0269 - 30 0.00701 - 31 0.0245 - 32 0.0218 - 33 0.0592 - 34 0.00584 - 35 0.0253 - 37 0.000389 - 38 0.000779 - 39 0.0343 - 40 0.0401 - 41 0.0666 - 42 0.0101 - 44 0.00117 - 45 0.00117 - 46 0.00117 - 47 0.00195 - - 2 6 1 0 - 7 1 - - 3 4 2 0 - 7 0.5 - 41 0.5 - - 4 9 6 0 - 0 0.111 - 7 0.111 - 12 0.111 - 33 0.222 - 35 0.111 - 41 0.333 - - 7 1 1 0 - 19 1 - - 8 9 4 0 - 7 0.556 - 12 0.111 - 26 0.111 - 29 0.222 - - 13 3 2 0 - 4 0.333 - 7 0.667 - - 15 3 2 0 - 8 0.667 - 42 0.333 - - 17 25 10 0 - 0 0.24 - 2 0.04 - 7 0.08 - 29 0.04 - 30 0.04 - 31 0.04 - 33 0.12 - 35 0.04 - 40 0.12 - 41 0.24 - - 19 8 7 0 - 12 0.125 - 24 0.125 - 29 0.25 - 32 0.125 - 33 0.125 - 40 0.125 - 41 0.125 - - 21 42 9 0 - 0 0.0476 - 7 0.571 - 29 0.0238 - 31 0.0714 - 35 0.0238 - 40 0.143 - 41 0.0238 - 42 0.0714 - 46 0.0238 - - 28 1 1 0 - 8 1 - - 60 3 3 0 - 7 0.333 - 38 0.333 - 40 0.333 - - 5 861 10 0 - 0 0.861 - 4 0.00232 - 12 0.0848 - 18 0.0128 - 19 0.00116 - 21 0.0244 - 26 0.00116 - 33 0.00697 - 35 0.00116 - 41 0.00465 - - 6 75 17 7 - 0 0.0533 - 2 0.0267 - 6 0.107 - 7 0.08 - 8 0.0133 - 12 0.0267 - 26 0.0533 - 31 0.0133 - 33 0.0533 - 39 0.0133 - 40 0.24 - 41 0.173 - 42 0.0267 - 43 0.0133 - 44 0.0267 - 45 0.0133 - 46 0.0667 - - 4 8 5 0 - 7 0.125 - 33 0.5 - 40 0.125 - 41 0.125 - 45 0.125 - - 6 17 6 0 - 6 0.176 - 7 0.235 - 40 0.118 - 41 0.235 - 43 0.0588 - 46 0.176 - - 8 5 4 0 - 0 0.2 - 6 0.4 - 26 0.2 - 44 0.2 - - 41 5 4 0 - 39 0.2 - 40 0.2 - 41 0.2 - 42 0.4 - - 43 1 1 0 - 8 1 - - 45 4 3 0 - 6 0.5 - 40 0.25 - 46 0.25 - - 47 31 9 0 - 0 0.0645 - 2 0.0645 - 12 0.0645 - 26 0.0968 - 31 0.0323 - 40 0.419 - 41 0.194 - 44 0.0323 - 46 0.0323 - - 7 103 24 7 - 0 0.117 - 2 0.00971 - 3 0.0194 - 4 0.117 - 5 0.00971 - 7 0.175 - 8 0.0291 - 12 0.0291 - 13 0.0583 - 14 0.00971 - 15 0.0194 - 18 0.0194 - 19 0.0291 - 21 0.0291 - 22 0.00971 - 24 0.00971 - 26 0.0194 - 29 0.00971 - 31 0.0485 - 33 0.0291 - 39 0.0194 - 40 0.0874 - 41 0.0874 - 47 0.00971 - - 8 2 2 0 - 7 0.5 - 15 0.5 - - 13 8 6 0 - 7 0.125 - 26 0.125 - 33 0.125 - 40 0.375 - 41 0.125 - 47 0.125 - - 21 9 4 0 - 4 0.444 - 8 0.222 - 13 0.222 - 14 0.111 - - 41 2 2 0 - 13 0.5 - 21 0.5 - - 47 62 20 0 - 0 0.177 - 2 0.0161 - 4 0.0484 - 5 0.0161 - 7 0.177 - 8 0.0161 - 12 0.0484 - 15 0.0161 - 18 0.0323 - 19 0.0484 - 21 0.0161 - 22 0.0161 - 24 0.0161 - 26 0.0161 - 29 0.0161 - 31 0.0806 - 33 0.0323 - 39 0.0323 - 40 0.0484 - 41 0.129 - - 55 10 4 0 - 3 0.1 - 4 0.5 - 13 0.3 - 40 0.1 - - 60 4 1 0 - 7 1 - - 8 1338 39 20 - 0 0.059 - 1 0.000747 - 2 0.0329 - 3 0.00673 - 4 0.0112 - 6 0.00374 - 7 0.361 - 8 0.00897 - 9 0.00747 - 10 0.00224 - 12 0.0112 - 13 0.0142 - 14 0.00673 - 15 0.00598 - 19 0.00299 - 21 0.0172 - 22 0.00299 - 24 0.000747 - 26 0.0471 - 27 0.000747 - 28 0.00374 - 29 0.0262 - 30 0.0172 - 31 0.00523 - 32 0.0105 - 33 0.00972 - 34 0.00224 - 35 0.00299 - 37 0.000747 - 38 0.00149 - 39 0.0493 - 40 0.116 - 41 0.116 - 42 0.0179 - 43 0.00448 - 44 0.00448 - 45 0.00374 - 46 0.00374 - 47 0.000747 - - 2 12 5 0 - 0 0.0833 - 7 0.25 - 14 0.167 - 40 0.333 - 41 0.167 - - 3 4 3 0 - 2 0.25 - 9 0.5 - 40 0.25 - - 4 482 34 0 - 0 0.0622 - 2 0.0456 - 3 0.0124 - 4 0.0187 - 6 0.00207 - 7 0.255 - 8 0.0104 - 9 0.0083 - 10 0.00622 - 12 0.0124 - 13 0.0104 - 14 0.00415 - 15 0.00415 - 19 0.00415 - 21 0.0187 - 22 0.00415 - 24 0.00207 - 26 0.0539 - 27 0.00207 - 28 0.00622 - 29 0.0104 - 30 0.0166 - 32 0.00622 - 33 0.0166 - 34 0.00207 - 35 0.00415 - 37 0.00207 - 38 0.00415 - 39 0.135 - 40 0.133 - 41 0.0996 - 42 0.0207 - 44 0.00207 - 45 0.00415 - - 7 4 4 0 - 7 0.25 - 12 0.25 - 21 0.25 - 26 0.25 - - 8 31 13 0 - 1 0.0323 - 7 0.226 - 14 0.0323 - 15 0.0323 - 21 0.0323 - 22 0.0323 - 26 0.0323 - 29 0.0645 - 33 0.0645 - 35 0.0323 - 40 0.161 - 41 0.226 - 44 0.0323 - - 13 49 12 0 - 0 0.0816 - 2 0.0408 - 4 0.0204 - 7 0.327 - 12 0.0612 - 14 0.0204 - 29 0.0204 - 30 0.0204 - 40 0.163 - 41 0.204 - 42 0.0204 - 46 0.0204 - - 14 11 5 0 - 2 0.0909 - 7 0.364 - 40 0.182 - 41 0.273 - 42 0.0909 - - 15 12 7 0 - 2 0.0833 - 7 0.25 - 22 0.0833 - 26 0.0833 - 29 0.333 - 40 0.0833 - 42 0.0833 - - 20 57 10 0 - 2 0.0526 - 7 0.14 - 13 0.0351 - 15 0.0175 - 21 0.0351 - 26 0.0351 - 29 0.0175 - 33 0.0175 - 40 0.368 - 41 0.281 - - 21 63 11 0 - 0 0.0635 - 2 0.0159 - 7 0.603 - 19 0.0159 - 21 0.0159 - 26 0.111 - 32 0.0159 - 40 0.0794 - 41 0.0476 - 44 0.0159 - 46 0.0159 - - 22 2 2 0 - 28 0.5 - 40 0.5 - - 23 10 4 0 - 0 0.1 - 7 0.5 - 40 0.3 - 46 0.1 - - 30 2 2 0 - 13 0.5 - 41 0.5 - - 42 2 2 0 - 14 0.5 - 26 0.5 - - 45 2 2 0 - 19 0.5 - 46 0.5 - - 47 537 30 0 - 0 0.0689 - 2 0.0149 - 3 0.00186 - 4 0.00745 - 6 0.00559 - 7 0.492 - 8 0.00745 - 9 0.00745 - 12 0.00745 - 13 0.0168 - 14 0.00372 - 15 0.00745 - 21 0.0168 - 26 0.0447 - 28 0.00186 - 29 0.0391 - 30 0.0205 - 31 0.00931 - 32 0.0168 - 33 0.00372 - 34 0.00372 - 35 0.00186 - 39 0.00186 - 40 0.0596 - 41 0.102 - 42 0.0186 - 43 0.00931 - 44 0.00559 - 46 0.00186 - 47 0.00186 - - 48 13 6 0 - 0 0.0769 - 2 0.0769 - 7 0.0769 - 31 0.0769 - 40 0.0769 - 41 0.615 - - 54 1 1 0 - 31 1 - - 55 27 14 0 - 0 0.037 - 2 0.0741 - 3 0.0741 - 4 0.037 - 7 0.185 - 8 0.111 - 13 0.0741 - 29 0.037 - 30 0.0741 - 32 0.037 - 40 0.0741 - 41 0.037 - 43 0.037 - 45 0.111 - - 60 8 6 0 - 2 0.25 - 6 0.125 - 7 0.125 - 12 0.125 - 40 0.25 - 41 0.125 - - 9 236 14 6 - 0 0.0212 - 2 0.00847 - 4 0.00847 - 7 0.619 - 12 0.00424 - 21 0.0254 - 26 0.0763 - 29 0.00424 - 30 0.00424 - 31 0.0127 - 40 0.114 - 41 0.089 - 42 0.00847 - 44 0.00424 - - 4 15 5 0 - 4 0.0667 - 7 0.6 - 31 0.0667 - 40 0.133 - 41 0.133 - - 13 7 5 0 - 0 0.143 - 7 0.429 - 12 0.143 - 40 0.143 - 41 0.143 - - 14 2 2 0 - 0 0.5 - 2 0.5 - - 21 19 4 0 - 7 0.737 - 40 0.158 - 41 0.0526 - 42 0.0526 - - 47 160 11 0 - 0 0.0125 - 2 0.00625 - 7 0.606 - 21 0.0375 - 26 0.106 - 29 0.00625 - 30 0.00625 - 40 0.112 - 41 0.0938 - 42 0.00625 - 44 0.00625 - - 55 9 4 0 - 4 0.111 - 7 0.667 - 31 0.111 - 41 0.111 - - 10 370 23 6 - 0 0.0568 - 2 0.0027 - 4 0.00811 - 5 0.0027 - 7 0.705 - 8 0.00541 - 12 0.00541 - 13 0.00811 - 19 0.00811 - 21 0.0162 - 26 0.0135 - 28 0.0027 - 29 0.0027 - 30 0.00811 - 31 0.0027 - 32 0.0324 - 37 0.0027 - 40 0.0459 - 41 0.0486 - 42 0.0135 - 44 0.0027 - 45 0.0027 - 46 0.0027 - - 2 2 2 0 - 26 0.5 - 46 0.5 - - 4 125 17 0 - 0 0.064 - 2 0.008 - 4 0.024 - 5 0.008 - 7 0.552 - 8 0.016 - 12 0.008 - 13 0.024 - 19 0.016 - 21 0.04 - 26 0.016 - 30 0.008 - 32 0.016 - 40 0.112 - 41 0.056 - 42 0.024 - 44 0.008 - - 20 10 6 0 - 7 0.3 - 26 0.2 - 37 0.1 - 40 0.1 - 41 0.2 - 45 0.1 - - 21 5 2 0 - 7 0.4 - 41 0.6 - - 47 216 12 0 - 0 0.0602 - 7 0.838 - 12 0.00463 - 19 0.00463 - 21 0.00463 - 28 0.00463 - 29 0.00463 - 30 0.00926 - 31 0.00463 - 32 0.0463 - 40 0.00926 - 41 0.00926 - - 55 6 3 0 - 7 0.333 - 41 0.5 - 42 0.167 - - 12 3 3 0 - 40 0.333 - 41 0.333 - 43 0.333 - - 13 98717 46 40 - 0 0.0625 - 1 0.000365 - 2 0.0342 - 3 0.00661 - 4 0.0085 - 5 0.000152 - 6 6.08e-05 - 7 0.33 - 8 0.00775 - 9 0.00124 - 10 5.06e-05 - 12 0.0236 - 13 0.004 - 14 0.000952 - 15 0.00478 - 16 3.04e-05 - 17 2.03e-05 - 18 2.03e-05 - 19 0.00561 - 20 0.000274 - 21 0.0242 - 22 0.00352 - 23 0.000111 - 24 0.000537 - 25 4.05e-05 - 26 0.051 - 28 0.00134 - 29 0.0429 - 30 0.00867 - 31 0.0138 - 32 0.00181 - 33 0.0202 - 34 0.0105 - 35 0.00329 - 36 0.000243 - 37 0.00321 - 38 3.04e-05 - 39 0.000263 - 40 0.146 - 41 0.15 - 42 0.015 - 43 0.00203 - 44 0.002 - 45 0.00284 - 46 0.00573 - 47 0.000669 - - 0 3 3 0 - 3 0.333 - 7 0.333 - 41 0.333 - - 2 783 25 0 - 0 0.0396 - 2 0.0179 - 4 0.00383 - 6 0.00128 - 7 0.298 - 8 0.00383 - 12 0.0204 - 21 0.0153 - 26 0.0383 - 29 0.014 - 30 0.00511 - 31 0.0153 - 32 0.014 - 33 0.0115 - 34 0.0102 - 35 0.00255 - 37 0.00383 - 40 0.25 - 41 0.183 - 42 0.0307 - 43 0.00383 - 44 0.00255 - 45 0.00511 - 46 0.00894 - 47 0.00128 - - 3 4034 35 0 - 0 0.0151 - 1 0.000496 - 2 0.0288 - 3 0.0654 - 4 0.0206 - 7 0.335 - 8 0.0107 - 9 0.00868 - 12 0.00645 - 13 0.00372 - 14 0.000496 - 15 0.00843 - 19 0.00347 - 20 0.000744 - 21 0.0121 - 22 0.00198 - 24 0.000496 - 26 0.128 - 28 0.000496 - 29 0.0129 - 30 0.00397 - 31 0.00744 - 32 0.000248 - 33 0.00645 - 34 0.00347 - 35 0.00198 - 37 0.00223 - 40 0.143 - 41 0.127 - 42 0.0273 - 43 0.00322 - 44 0.00545 - 45 0.00223 - 46 0.00149 - 47 0.000992 - - 4 30713 45 0 - 0 0.078 - 1 0.000456 - 2 0.022 - 3 0.00156 - 4 0.00834 - 5 0.000195 - 6 3.26e-05 - 7 0.359 - 8 0.00703 - 9 0.000977 - 10 9.77e-05 - 12 0.0316 - 13 0.00371 - 14 0.00107 - 15 0.00391 - 16 6.51e-05 - 18 6.51e-05 - 19 0.00834 - 20 0.000456 - 21 0.0346 - 22 0.00866 - 23 0.000195 - 24 0.000912 - 25 3.26e-05 - 26 0.0489 - 28 0.00166 - 29 0.0524 - 30 0.00853 - 31 0.0151 - 32 0.00147 - 33 0.0292 - 34 0.013 - 35 0.00293 - 36 0.000293 - 37 0.00414 - 38 3.26e-05 - 39 0.000521 - 40 0.108 - 41 0.125 - 42 0.00856 - 43 0.00143 - 44 0.000814 - 45 0.00378 - 46 0.00199 - 47 0.000358 - - 6 8 6 0 - 0 0.125 - 2 0.125 - 7 0.25 - 40 0.125 - 41 0.125 - 42 0.25 - - 7 79 12 0 - 0 0.0759 - 2 0.038 - 7 0.152 - 12 0.0253 - 15 0.0127 - 21 0.0253 - 26 0.0253 - 30 0.0253 - 31 0.0127 - 33 0.0127 - 40 0.392 - 41 0.203 - - 8 20150 43 0 - 0 0.0496 - 1 0.000397 - 2 0.0359 - 3 0.00179 - 4 0.00794 - 5 0.000199 - 6 4.96e-05 - 7 0.34 - 8 0.00591 - 9 0.000397 - 10 9.93e-05 - 12 0.0205 - 13 0.00437 - 14 0.000794 - 15 0.00536 - 16 4.96e-05 - 19 0.00541 - 20 0.000149 - 21 0.0172 - 22 0.000844 - 23 4.96e-05 - 24 0.000248 - 25 4.96e-05 - 26 0.0461 - 28 0.00124 - 29 0.032 - 30 0.0103 - 31 0.0154 - 32 0.000943 - 33 0.0144 - 34 0.00983 - 35 0.00407 - 36 0.000248 - 37 0.00323 - 39 9.93e-05 - 40 0.175 - 41 0.158 - 42 0.0168 - 43 0.00159 - 44 0.00199 - 45 0.00149 - 46 0.00928 - 47 0.000596 - - 9 517 25 0 - 0 0.0406 - 2 0.0426 - 4 0.00387 - 7 0.453 - 8 0.0058 - 12 0.0174 - 13 0.00193 - 15 0.00193 - 17 0.00193 - 19 0.00387 - 21 0.0193 - 26 0.0754 - 29 0.00774 - 30 0.0155 - 31 0.0058 - 32 0.0058 - 33 0.0193 - 34 0.00387 - 40 0.128 - 41 0.112 - 42 0.0251 - 43 0.00193 - 44 0.00193 - 45 0.00193 - 46 0.00387 - - 10 469 25 0 - 0 0.0768 - 2 0.0171 - 4 0.0149 - 7 0.36 - 8 0.0149 - 12 0.0213 - 13 0.00426 - 14 0.00426 - 15 0.0064 - 19 0.0107 - 21 0.032 - 26 0.0597 - 29 0.064 - 30 0.0107 - 31 0.00426 - 32 0.00426 - 33 0.0235 - 35 0.00426 - 37 0.00213 - 39 0.00213 - 40 0.109 - 41 0.134 - 42 0.0149 - 44 0.00213 - 46 0.00213 - - 13 12677 39 0 - 0 0.0652 - 1 0.000473 - 2 0.0461 - 3 0.00252 - 4 0.00529 - 7 0.248 - 8 0.00718 - 9 0.000631 - 12 0.0242 - 13 0.00363 - 14 0.000631 - 15 0.00552 - 17 7.89e-05 - 19 0.00387 - 20 0.000158 - 21 0.0204 - 22 0.000868 - 24 0.000158 - 26 0.0311 - 28 0.00142 - 29 0.0506 - 30 0.00812 - 31 0.0177 - 32 0.00252 - 33 0.02 - 34 0.0165 - 35 0.00371 - 36 0.000473 - 37 0.00331 - 38 7.89e-05 - 39 0.000237 - 40 0.189 - 41 0.186 - 42 0.0185 - 43 0.00174 - 44 0.00268 - 45 0.00316 - 46 0.00702 - 47 0.0011 - - 14 957 30 0 - 0 0.0742 - 1 0.00104 - 2 0.0366 - 3 0.0115 - 4 0.00522 - 7 0.222 - 8 0.00522 - 12 0.023 - 13 0.00209 - 14 0.00104 - 15 0.00522 - 19 0.00313 - 21 0.023 - 24 0.00104 - 26 0.0303 - 29 0.0815 - 30 0.00104 - 31 0.0219 - 32 0.00418 - 33 0.0136 - 34 0.0167 - 35 0.00209 - 37 0.00104 - 40 0.181 - 41 0.203 - 42 0.0167 - 43 0.00104 - 44 0.00522 - 45 0.00418 - 46 0.00313 - - 15 3706 37 0 - 0 0.0815 - 2 0.0364 - 3 0.0054 - 4 0.00729 - 7 0.181 - 8 0.00648 - 9 0.00108 - 12 0.0324 - 13 0.00863 - 14 0.00054 - 15 0.00405 - 19 0.00189 - 20 0.00027 - 21 0.0216 - 22 0.00189 - 23 0.000809 - 24 0.00027 - 26 0.0321 - 28 0.000809 - 29 0.11 - 30 0.00756 - 31 0.0165 - 32 0.0027 - 33 0.0262 - 34 0.0132 - 35 0.0108 - 36 0.000809 - 37 0.00162 - 39 0.00054 - 40 0.174 - 41 0.186 - 42 0.0135 - 43 0.0027 - 44 0.0027 - 45 0.00513 - 46 0.00243 - 47 0.00027 - - 16 73 10 0 - 0 0.0685 - 2 0.0411 - 7 0.219 - 13 0.0137 - 15 0.0411 - 21 0.0548 - 26 0.0822 - 29 0.123 - 40 0.178 - 41 0.178 - - 18 2 2 0 - 2 0.5 - 21 0.5 - - 19 13 2 0 - 7 0.231 - 41 0.769 - - 20 2788 31 0 - 0 0.0897 - 2 0.0308 - 3 0.000717 - 4 0.00825 - 5 0.00108 - 7 0.303 - 8 0.00933 - 12 0.0233 - 13 0.00287 - 14 0.000717 - 15 0.00323 - 19 0.00143 - 21 0.0326 - 22 0.00179 - 24 0.00251 - 26 0.0976 - 28 0.00395 - 29 0.0334 - 30 0.00825 - 31 0.00753 - 32 0.000717 - 33 0.0197 - 34 0.00108 - 37 0.0043 - 39 0.000359 - 40 0.145 - 41 0.142 - 42 0.0169 - 44 0.00215 - 45 0.00251 - 46 0.00359 - - 21 101 20 0 - 0 0.0693 - 2 0.0396 - 4 0.0297 - 7 0.297 - 8 0.0297 - 12 0.0396 - 14 0.0099 - 15 0.0099 - 19 0.0099 - 21 0.0297 - 26 0.0396 - 29 0.0198 - 33 0.0396 - 35 0.0099 - 40 0.0693 - 41 0.208 - 42 0.0099 - 43 0.0099 - 44 0.0198 - 46 0.0099 - - 22 4 3 0 - 7 0.25 - 8 0.25 - 41 0.5 - - 28 6 5 0 - 7 0.167 - 15 0.167 - 26 0.167 - 40 0.333 - 41 0.167 - - 29 9 3 0 - 0 0.111 - 7 0.667 - 40 0.222 - - 30 711 25 0 - 0 0.0394 - 1 0.00141 - 2 0.0338 - 4 0.00422 - 7 0.422 - 8 0.00844 - 9 0.00141 - 12 0.0197 - 13 0.00141 - 15 0.00281 - 19 0.00422 - 21 0.0127 - 26 0.0352 - 29 0.038 - 30 0.00985 - 31 0.0155 - 32 0.00422 - 33 0.0113 - 34 0.00844 - 35 0.00281 - 40 0.148 - 41 0.152 - 42 0.0197 - 45 0.00141 - 46 0.00281 - - 31 547 23 0 - 0 0.0622 - 2 0.0329 - 3 0.00183 - 4 0.00366 - 7 0.419 - 8 0.00183 - 12 0.0347 - 13 0.00183 - 14 0.00183 - 15 0.00183 - 19 0.00366 - 21 0.0165 - 26 0.0548 - 29 0.00548 - 30 0.00914 - 31 0.00548 - 33 0.0219 - 34 0.00366 - 35 0.00548 - 40 0.163 - 41 0.126 - 42 0.0201 - 44 0.00366 - - 34 4 4 0 - 2 0.25 - 7 0.25 - 40 0.25 - 44 0.25 - - 35 2 2 0 - 5 0.5 - 7 0.5 - - 40 6 5 0 - 0 0.167 - 40 0.333 - 42 0.167 - 43 0.167 - 47 0.167 - - 41 22 10 0 - 0 0.0455 - 2 0.0455 - 12 0.0455 - 26 0.0455 - 29 0.136 - 31 0.0455 - 34 0.0455 - 40 0.273 - 41 0.227 - 43 0.0909 - - 42 5 2 0 - 7 0.2 - 40 0.8 - - 43 16 9 0 - 0 0.25 - 7 0.125 - 8 0.0625 - 12 0.0625 - 29 0.0625 - 33 0.0625 - 35 0.0625 - 40 0.125 - 41 0.188 - - 44 11 2 0 - 7 0.182 - 43 0.818 - - 45 138 8 0 - 0 0.0145 - 7 0.188 - 8 0.00725 - 21 0.00725 - 26 0.029 - 40 0.116 - 41 0.0725 - 46 0.565 - - 46 169 21 0 - 0 0.0592 - 2 0.0296 - 4 0.0178 - 7 0.325 - 8 0.00592 - 12 0.0237 - 15 0.00592 - 19 0.0118 - 21 0.0118 - 26 0.0237 - 29 0.0355 - 30 0.0296 - 31 0.0118 - 33 0.0355 - 34 0.0473 - 37 0.00592 - 40 0.148 - 41 0.142 - 42 0.0178 - 44 0.00592 - 45 0.00592 - - 47 13978 39 0 - 0 0.0505 - 1 0.000215 - 2 0.0552 - 3 0.0124 - 4 0.0107 - 6 0.000215 - 7 0.343 - 8 0.0098 - 9 0.00114 - 12 0.0152 - 13 0.00501 - 14 0.00157 - 15 0.00558 - 19 0.00622 - 20 0.000215 - 21 0.022 - 22 0.00172 - 23 7.15e-05 - 24 0.000358 - 25 0.000143 - 26 0.0519 - 28 0.00143 - 29 0.028 - 30 0.00959 - 31 0.01 - 32 0.00272 - 33 0.0132 - 34 0.00637 - 35 0.00265 - 37 0.00286 - 38 7.15e-05 - 40 0.131 - 41 0.166 - 42 0.0189 - 43 0.00365 - 44 0.0015 - 45 0.0015 - 46 0.00651 - 47 0.00136 - - 48 2092 30 0 - 0 0.0344 - 2 0.0191 - 3 0.000956 - 4 0.0086 - 5 0.000478 - 7 0.497 - 8 0.0196 - 12 0.012 - 13 0.00287 - 14 0.000478 - 15 0.00191 - 19 0.00335 - 20 0.000478 - 21 0.00956 - 24 0.000478 - 26 0.0531 - 28 0.000478 - 29 0.0129 - 30 0.0139 - 31 0.0167 - 33 0.0163 - 34 0.00717 - 35 0.000956 - 37 0.00239 - 40 0.132 - 41 0.106 - 42 0.0201 - 44 0.000956 - 45 0.00143 - 46 0.00478 - - 49 17 5 0 - 7 0.529 - 21 0.0588 - 30 0.0588 - 40 0.176 - 41 0.176 - - 54 152 19 0 - 0 0.0658 - 2 0.0263 - 4 0.00658 - 7 0.289 - 12 0.0263 - 13 0.00658 - 14 0.00658 - 15 0.0132 - 19 0.00658 - 21 0.0132 - 26 0.0132 - 29 0.132 - 31 0.00658 - 33 0.0132 - 34 0.0461 - 35 0.0132 - 40 0.158 - 41 0.151 - 45 0.00658 - - 55 2721 34 0 - 0 0.0978 - 1 0.000368 - 2 0.0298 - 3 0.0011 - 4 0.00257 - 7 0.27 - 8 0.00551 - 12 0.0305 - 13 0.00147 - 14 0.000735 - 15 0.00368 - 19 0.000735 - 21 0.0243 - 22 0.0011 - 24 0.000368 - 26 0.0724 - 28 0.000368 - 29 0.0592 - 30 0.00515 - 31 0.00368 - 32 0.00147 - 33 0.0287 - 34 0.00331 - 35 0.00147 - 37 0.00184 - 39 0.000368 - 40 0.166 - 41 0.16 - 42 0.0103 - 43 0.00221 - 44 0.0011 - 45 0.00845 - 46 0.00257 - 47 0.0011 - - 57 1 1 0 - 31 1 - - 58 31 13 0 - 0 0.0968 - 2 0.0323 - 4 0.0323 - 7 0.194 - 13 0.0645 - 21 0.0323 - 26 0.0323 - 29 0.0323 - 31 0.0645 - 33 0.0645 - 40 0.194 - 41 0.129 - 46 0.0323 - - 60 950 25 0 - 0 0.0137 - 2 0.0179 - 3 0.0621 - 4 0.0189 - 7 0.479 - 8 0.0211 - 9 0.0211 - 12 0.00211 - 13 0.00105 - 15 0.00316 - 21 0.0189 - 22 0.00632 - 26 0.0653 - 29 0.0105 - 30 0.00211 - 31 0.0105 - 32 0.00526 - 33 0.00211 - 34 0.00211 - 40 0.132 - 41 0.0705 - 42 0.00947 - 43 0.00421 - 44 0.02 - 46 0.00105 - - 68 43 12 0 - 0 0.0465 - 2 0.0233 - 7 0.186 - 8 0.0233 - 12 0.0233 - 26 0.0233 - 29 0.0465 - 31 0.0465 - 36 0.0233 - 40 0.279 - 41 0.233 - 42 0.0465 - - 14 55733 44 33 - 0 0.0834 - 1 0.000718 - 2 0.044 - 3 0.0017 - 4 0.0176 - 5 8.97e-05 - 7 0.251 - 8 0.0175 - 9 0.001 - 10 3.59e-05 - 12 0.0299 - 13 0.00215 - 14 0.000807 - 15 0.0023 - 16 3.59e-05 - 17 5.38e-05 - 18 3.59e-05 - 19 0.00468 - 20 0.000161 - 21 0.0335 - 22 0.00206 - 23 0.000126 - 24 0.000646 - 25 1.79e-05 - 26 0.0419 - 28 0.00355 - 29 0.0527 - 30 0.0145 - 31 0.0224 - 32 0.0385 - 33 0.00206 - 34 0.0131 - 35 0.00736 - 36 0.000467 - 37 0.00224 - 39 0.000323 - 40 0.144 - 41 0.13 - 42 0.0201 - 43 0.00169 - 44 0.00452 - 45 0.00237 - 46 0.00397 - 47 0.00106 - - 2 903 28 0 - 0 0.0709 - 2 0.0244 - 4 0.00443 - 7 0.199 - 8 0.00443 - 9 0.00221 - 12 0.0321 - 19 0.00554 - 21 0.0377 - 22 0.00221 - 26 0.0255 - 28 0.00111 - 29 0.0532 - 30 0.0166 - 31 0.0233 - 32 0.041 - 33 0.00775 - 34 0.0177 - 35 0.00443 - 36 0.00111 - 37 0.00221 - 40 0.229 - 41 0.142 - 42 0.031 - 43 0.00554 - 45 0.00111 - 46 0.00554 - 47 0.00886 - - 3 4221 37 0 - 0 0.0315 - 2 0.0334 - 4 0.129 - 7 0.211 - 8 0.0339 - 9 0.00379 - 12 0.00782 - 13 0.00355 - 14 0.000237 - 15 0.00498 - 16 0.000237 - 19 0.00498 - 20 0.000237 - 21 0.0576 - 22 0.00426 - 23 0.000237 - 25 0.000237 - 26 0.0431 - 28 0.00118 - 29 0.0206 - 30 0.00805 - 31 0.0199 - 32 0.00877 - 33 0.00142 - 34 0.00332 - 35 0.00284 - 36 0.000474 - 37 0.00118 - 39 0.000711 - 40 0.154 - 41 0.137 - 42 0.0566 - 43 0.00237 - 44 0.00877 - 45 0.000474 - 46 0.00118 - 47 0.00166 - - 4 5302 37 0 - 0 0.151 - 1 0.00132 - 2 0.0228 - 3 0.000566 - 4 0.00622 - 7 0.247 - 8 0.0104 - 9 0.000377 - 12 0.0541 - 13 0.0017 - 14 0.00189 - 15 0.00302 - 17 0.000189 - 19 0.0164 - 20 0.000377 - 21 0.0353 - 22 0.00113 - 23 0.000189 - 24 0.00207 - 26 0.0313 - 28 0.00453 - 29 0.0621 - 30 0.00962 - 31 0.0226 - 32 0.0732 - 33 0.00245 - 34 0.0143 - 35 0.00905 - 36 0.000566 - 37 0.00226 - 40 0.101 - 41 0.0934 - 42 0.0106 - 43 0.000943 - 44 0.0017 - 45 0.00245 - 46 0.00264 - - 6 7 5 0 - 7 0.429 - 26 0.143 - 31 0.143 - 40 0.143 - 44 0.143 - - 8 12828 41 0 - 0 0.075 - 1 0.00039 - 2 0.0472 - 3 0.000468 - 4 0.00834 - 5 7.8e-05 - 7 0.251 - 8 0.0159 - 9 0.000312 - 12 0.0288 - 13 0.00195 - 14 0.00101 - 15 0.0014 - 16 7.8e-05 - 17 7.8e-05 - 18 7.8e-05 - 19 0.00366 - 21 0.0241 - 22 0.00148 - 23 7.8e-05 - 24 0.000156 - 26 0.0391 - 28 0.00226 - 29 0.0366 - 30 0.0132 - 31 0.0214 - 32 0.029 - 33 0.00187 - 34 0.0136 - 35 0.0067 - 36 0.000546 - 37 0.00249 - 39 0.000702 - 40 0.18 - 41 0.153 - 42 0.0216 - 43 0.00164 - 44 0.00639 - 45 0.00226 - 46 0.00514 - 47 0.00156 - - 9 459 25 0 - 0 0.0566 - 1 0.00218 - 2 0.0501 - 4 0.00436 - 7 0.322 - 8 0.00871 - 12 0.0392 - 13 0.00654 - 15 0.00218 - 19 0.00654 - 21 0.0349 - 26 0.0588 - 28 0.00436 - 29 0.0174 - 30 0.0174 - 31 0.0109 - 32 0.0196 - 34 0.0131 - 35 0.00654 - 37 0.00436 - 40 0.15 - 41 0.146 - 42 0.0131 - 44 0.00218 - 46 0.00218 - - 10 269 24 0 - 0 0.126 - 2 0.0112 - 4 0.00372 - 7 0.216 - 8 0.0149 - 12 0.0595 - 13 0.00372 - 19 0.0186 - 21 0.0297 - 24 0.00372 - 26 0.0335 - 28 0.00372 - 29 0.0335 - 30 0.0297 - 31 0.0112 - 32 0.1 - 33 0.00743 - 34 0.00372 - 35 0.00372 - 40 0.0818 - 41 0.167 - 42 0.0186 - 43 0.00372 - 45 0.0149 - - 13 9556 39 0 - 0 0.0876 - 1 0.00115 - 2 0.0643 - 3 0.000837 - 4 0.0068 - 5 0.000105 - 7 0.187 - 8 0.0139 - 9 0.000733 - 12 0.0274 - 13 0.00199 - 14 0.000105 - 15 0.00199 - 18 0.000105 - 19 0.00199 - 20 0.000314 - 21 0.0331 - 22 0.00167 - 23 0.000105 - 24 0.000523 - 26 0.0328 - 28 0.00262 - 29 0.0671 - 30 0.013 - 31 0.0202 - 32 0.0419 - 33 0.0023 - 34 0.0142 - 35 0.0045 - 36 0.000209 - 37 0.00188 - 40 0.173 - 41 0.167 - 42 0.0168 - 43 0.00188 - 44 0.0023 - 45 0.0023 - 46 0.00366 - 47 0.000942 - - 14 538 26 0 - 0 0.0874 - 2 0.0502 - 4 0.00929 - 7 0.18 - 8 0.00929 - 10 0.00186 - 12 0.0297 - 13 0.00558 - 15 0.00186 - 21 0.0335 - 26 0.0372 - 28 0.00186 - 29 0.0967 - 30 0.00558 - 31 0.00929 - 32 0.0409 - 33 0.00372 - 34 0.00929 - 35 0.00558 - 40 0.19 - 41 0.139 - 42 0.0353 - 44 0.00186 - 45 0.00743 - 46 0.00558 - 47 0.00186 - - 15 2001 34 0 - 0 0.125 - 1 0.001 - 2 0.037 - 3 0.006 - 4 0.005 - 7 0.147 - 8 0.013 - 12 0.0335 - 13 0.0005 - 14 0.0015 - 15 0.0045 - 19 0.003 - 21 0.026 - 22 0.003 - 23 0.0005 - 26 0.039 - 28 0.0025 - 29 0.141 - 30 0.0155 - 31 0.015 - 32 0.0465 - 33 0.004 - 34 0.0145 - 35 0.008 - 37 0.0025 - 39 0.0005 - 40 0.14 - 41 0.133 - 42 0.0145 - 43 0.0025 - 44 0.0045 - 45 0.004 - 46 0.003 - 47 0.0015 - - 16 26 9 0 - 0 0.115 - 7 0.0769 - 26 0.115 - 29 0.269 - 32 0.0385 - 40 0.231 - 41 0.0769 - 42 0.0385 - 44 0.0385 - - 19 6 5 0 - 12 0.167 - 21 0.333 - 29 0.167 - 35 0.167 - 40 0.167 - - 20 1519 34 0 - 0 0.107 - 1 0.000658 - 2 0.0434 - 3 0.00132 - 4 0.0105 - 5 0.000658 - 7 0.244 - 8 0.00658 - 9 0.00132 - 12 0.0217 - 13 0.00263 - 14 0.00197 - 15 0.000658 - 19 0.00132 - 21 0.0421 - 22 0.00263 - 23 0.000658 - 24 0.00329 - 26 0.0737 - 28 0.0118 - 29 0.029 - 30 0.00592 - 31 0.0151 - 32 0.0263 - 33 0.00197 - 35 0.00263 - 37 0.00395 - 39 0.000658 - 40 0.185 - 41 0.132 - 42 0.0132 - 43 0.000658 - 45 0.00395 - 46 0.00197 - - 21 38 15 0 - 0 0.0789 - 2 0.0263 - 7 0.316 - 12 0.0263 - 21 0.0263 - 26 0.105 - 29 0.0263 - 30 0.0526 - 31 0.0526 - 32 0.0526 - 35 0.0526 - 40 0.0263 - 41 0.105 - 42 0.0263 - 46 0.0263 - - 23 2 1 0 - 21 1 - - 28 16 6 0 - 7 0.562 - 12 0.125 - 26 0.0625 - 28 0.125 - 32 0.0625 - 41 0.0625 - - 29 9 5 0 - 7 0.444 - 12 0.222 - 15 0.111 - 21 0.111 - 40 0.111 - - 30 480 24 0 - 0 0.0562 - 2 0.0542 - 4 0.00417 - 7 0.296 - 8 0.0104 - 12 0.0229 - 13 0.00208 - 15 0.00417 - 19 0.00417 - 21 0.0208 - 22 0.00208 - 26 0.0312 - 29 0.0521 - 30 0.00625 - 31 0.0146 - 32 0.0229 - 33 0.00208 - 34 0.0104 - 35 0.00417 - 39 0.00208 - 40 0.2 - 41 0.169 - 42 0.00625 - 46 0.00208 - - 31 394 24 0 - 0 0.0558 - 2 0.0508 - 4 0.00761 - 5 0.00254 - 7 0.289 - 8 0.0228 - 12 0.0431 - 19 0.00761 - 21 0.0305 - 26 0.0431 - 29 0.0203 - 30 0.0178 - 31 0.0152 - 32 0.0279 - 33 0.00254 - 34 0.0178 - 35 0.00761 - 40 0.15 - 41 0.142 - 42 0.0127 - 43 0.00254 - 44 0.0203 - 45 0.00508 - 46 0.00508 - - 34 3 2 0 - 7 0.667 - 44 0.333 - - 41 4 4 0 - 7 0.25 - 12 0.25 - 26 0.25 - 41 0.25 - - 42 3 3 0 - 7 0.333 - 40 0.333 - 46 0.333 - - 43 15 7 0 - 0 0.0667 - 2 0.133 - 7 0.0667 - 12 0.133 - 21 0.0667 - 40 0.133 - 41 0.4 - - 44 4 1 0 - 43 1 - - 45 61 6 0 - 0 0.0492 - 7 0.115 - 26 0.0328 - 40 0.148 - 41 0.0984 - 46 0.557 - - 46 98 17 0 - 0 0.0408 - 2 0.051 - 4 0.0102 - 7 0.214 - 8 0.0306 - 21 0.0102 - 26 0.0918 - 29 0.0102 - 30 0.0102 - 31 0.0306 - 32 0.0306 - 34 0.0612 - 35 0.0102 - 36 0.0102 - 40 0.163 - 41 0.173 - 42 0.051 - - 47 13576 41 0 - 0 0.0748 - 1 0.000737 - 2 0.0447 - 3 0.00464 - 4 0.00722 - 5 7.37e-05 - 7 0.329 - 8 0.018 - 9 0.00147 - 10 7.37e-05 - 12 0.0322 - 13 0.0025 - 14 0.000958 - 15 0.00214 - 17 7.37e-05 - 19 0.00412 - 20 0.000221 - 21 0.0351 - 22 0.00258 - 23 7.37e-05 - 24 0.000737 - 26 0.0542 - 28 0.00567 - 29 0.0577 - 30 0.022 - 31 0.0306 - 32 0.0463 - 33 0.00147 - 34 0.0171 - 35 0.0127 - 36 0.000737 - 37 0.00302 - 39 0.000221 - 40 0.0806 - 41 0.0854 - 42 0.0123 - 43 0.00125 - 44 0.00133 - 45 0.00243 - 46 0.00258 - 47 0.00081 - - 48 813 27 0 - 0 0.0652 - 1 0.00123 - 2 0.0271 - 4 0.00738 - 7 0.26 - 8 0.0726 - 9 0.00123 - 12 0.0123 - 15 0.00123 - 19 0.00369 - 21 0.0308 - 26 0.0308 - 28 0.00369 - 29 0.0246 - 30 0.0271 - 31 0.0308 - 32 0.0185 - 33 0.00123 - 34 0.00984 - 35 0.00615 - 40 0.194 - 41 0.143 - 42 0.016 - 43 0.00123 - 44 0.00123 - 45 0.00123 - 46 0.00861 - - 54 11 8 0 - 2 0.0909 - 7 0.0909 - 21 0.0909 - 26 0.0909 - 29 0.182 - 32 0.273 - 34 0.0909 - 40 0.0909 - - 55 1044 28 0 - 0 0.136 - 1 0.000958 - 2 0.0345 - 3 0.000958 - 4 0.00287 - 7 0.221 - 8 0.0125 - 12 0.0354 - 13 0.00192 - 15 0.000958 - 21 0.0172 - 22 0.00287 - 24 0.00192 - 26 0.0489 - 28 0.00479 - 29 0.0766 - 30 0.00958 - 31 0.00287 - 32 0.0326 - 33 0.00287 - 34 0.000958 - 35 0.000958 - 37 0.00192 - 40 0.199 - 41 0.126 - 42 0.0153 - 45 0.0067 - 46 0.000958 - - 58 20 11 0 - 0 0.1 - 1 0.05 - 2 0.1 - 7 0.15 - 8 0.05 - 21 0.05 - 31 0.05 - 40 0.2 - 41 0.15 - 42 0.05 - 44 0.05 - - 60 1381 27 0 - 0 0.034 - 2 0.021 - 4 0.0587 - 7 0.254 - 8 0.0391 - 9 0.00145 - 12 0.0101 - 13 0.00217 - 14 0.000724 - 15 0.00579 - 19 0.00145 - 21 0.0434 - 22 0.00362 - 26 0.0268 - 29 0.0224 - 30 0.0101 - 31 0.0203 - 32 0.00507 - 33 0.000724 - 34 0.00434 - 35 0.00217 - 40 0.177 - 41 0.159 - 42 0.0485 - 43 0.00362 - 44 0.0434 - 46 0.000724 - - 68 113 16 0 - 0 0.0619 - 2 0.0265 - 4 0.00885 - 7 0.142 - 8 0.00885 - 12 0.0177 - 21 0.0531 - 26 0.00885 - 29 0.0442 - 31 0.00885 - 32 0.0177 - 33 0.00885 - 34 0.0354 - 40 0.363 - 41 0.177 - 42 0.0177 - - 15 38960 40 26 - 0 0.0826 - 1 7.7e-05 - 2 0.0494 - 3 0.039 - 4 0.00503 - 5 5.13e-05 - 6 2.57e-05 - 7 0.091 - 8 0.00395 - 9 0.000231 - 12 0.0263 - 13 0.00357 - 14 0.00113 - 15 0.00572 - 17 2.57e-05 - 18 0.000642 - 19 0.00167 - 20 0.000282 - 21 0.0216 - 22 0.000796 - 24 7.7e-05 - 26 0.0177 - 28 0.0021 - 29 0.128 - 30 0.00359 - 31 0.00182 - 32 0.00347 - 33 0.0401 - 34 0.00228 - 35 0.00139 - 37 0.00126 - 39 0.000616 - 40 0.125 - 41 0.3 - 42 0.016 - 43 0.00726 - 44 0.00667 - 45 0.00195 - 46 0.00385 - 47 0.00316 - - 2 1047 29 0 - 0 0.0965 - 2 0.0506 - 4 0.00573 - 7 0.085 - 8 0.00669 - 12 0.022 - 13 0.00382 - 14 0.000955 - 15 0.00287 - 18 0.000955 - 19 0.000955 - 21 0.0172 - 26 0.0086 - 28 0.00191 - 29 0.11 - 30 0.00382 - 32 0.0181 - 33 0.0162 - 34 0.00573 - 35 0.000955 - 37 0.000955 - 40 0.226 - 41 0.29 - 42 0.0162 - 43 0.000955 - 44 0.00191 - 45 0.000955 - 46 0.00287 - 47 0.000955 - - 3 26 9 0 - 2 0.0385 - 3 0.0385 - 7 0.154 - 12 0.0385 - 15 0.0385 - 29 0.192 - 40 0.0769 - 41 0.385 - 42 0.0385 - - 4 2090 35 0 - 0 0.116 - 2 0.0656 - 3 0.0172 - 4 0.0067 - 7 0.201 - 8 0.0067 - 9 0.000957 - 12 0.0536 - 13 0.00335 - 14 0.00431 - 15 0.011 - 19 0.00239 - 20 0.00144 - 21 0.0292 - 22 0.00191 - 24 0.000478 - 26 0.0316 - 28 0.00574 - 29 0.0914 - 30 0.00526 - 31 0.00526 - 32 0.00526 - 33 0.0421 - 34 0.00431 - 35 0.00335 - 37 0.000957 - 39 0.000478 - 40 0.106 - 41 0.15 - 42 0.011 - 43 0.00144 - 44 0.00383 - 45 0.00335 - 46 0.00383 - 47 0.00287 - - 6 28 8 0 - 0 0.0714 - 2 0.179 - 7 0.0357 - 29 0.107 - 40 0.0714 - 41 0.464 - 42 0.0357 - 44 0.0357 - - 7 37 9 0 - 2 0.0811 - 3 0.0811 - 12 0.027 - 26 0.027 - 29 0.0541 - 40 0.378 - 41 0.27 - 42 0.027 - 46 0.0541 - - 8 578 29 0 - 0 0.045 - 2 0.0346 - 3 0.0225 - 4 0.00865 - 7 0.133 - 8 0.00346 - 9 0.00173 - 12 0.026 - 13 0.00173 - 14 0.00346 - 15 0.00173 - 19 0.00519 - 21 0.00519 - 26 0.0242 - 28 0.00346 - 29 0.026 - 30 0.00692 - 31 0.00173 - 32 0.00692 - 33 0.0173 - 34 0.0104 - 35 0.00346 - 37 0.00519 - 40 0.253 - 41 0.325 - 42 0.0138 - 44 0.00346 - 46 0.00173 - 47 0.00519 - - 9 2 2 0 - 0 0.5 - 33 0.5 - - 13 164 20 0 - 0 0.0793 - 2 0.0244 - 3 0.0122 - 7 0.0976 - 12 0.0122 - 13 0.0122 - 15 0.0122 - 21 0.0183 - 26 0.0122 - 29 0.122 - 30 0.0061 - 31 0.0061 - 33 0.0427 - 34 0.0061 - 37 0.0122 - 40 0.122 - 41 0.317 - 42 0.0427 - 44 0.0305 - 46 0.0122 - - 15 19923 36 0 - 0 0.0786 - 2 0.0509 - 3 0.00181 - 4 0.00467 - 7 0.0876 - 8 0.00301 - 9 0.000151 - 12 0.0213 - 13 0.00221 - 14 0.000803 - 15 0.00427 - 18 0.000452 - 19 0.00136 - 20 0.000201 - 21 0.0202 - 22 0.000803 - 24 5.02e-05 - 26 0.013 - 28 0.00176 - 29 0.151 - 30 0.00351 - 31 0.00131 - 32 0.00296 - 33 0.0504 - 34 0.00171 - 35 0.00161 - 37 0.000653 - 39 0.000452 - 40 0.113 - 41 0.34 - 42 0.0163 - 43 0.00407 - 44 0.0102 - 45 0.00216 - 46 0.00371 - 47 0.00386 - - 16 534 23 0 - 0 0.0337 - 2 0.073 - 4 0.00375 - 7 0.0974 - 8 0.00187 - 12 0.015 - 13 0.00375 - 15 0.00187 - 21 0.00749 - 26 0.0169 - 28 0.00187 - 29 0.152 - 30 0.00562 - 32 0.00375 - 33 0.0169 - 34 0.00187 - 35 0.00375 - 39 0.00187 - 40 0.204 - 41 0.307 - 42 0.0393 - 44 0.00187 - 47 0.00562 - - 20 11 8 0 - 0 0.0909 - 2 0.0909 - 7 0.182 - 26 0.0909 - 31 0.0909 - 40 0.273 - 41 0.0909 - 44 0.0909 - - 21 37 10 0 - 0 0.0541 - 2 0.027 - 7 0.108 - 13 0.0541 - 15 0.0541 - 29 0.027 - 33 0.027 - 40 0.243 - 41 0.378 - 42 0.027 - - 30 7 3 0 - 0 0.143 - 40 0.571 - 41 0.286 - - 31 8 7 0 - 2 0.125 - 7 0.25 - 12 0.125 - 33 0.125 - 34 0.125 - 41 0.125 - 42 0.125 - - 40 23 10 0 - 2 0.13 - 6 0.0435 - 7 0.13 - 29 0.087 - 33 0.0435 - 40 0.0435 - 41 0.391 - 43 0.0435 - 44 0.0435 - 47 0.0435 - - 41 51 7 0 - 2 0.0392 - 3 0.098 - 7 0.0196 - 29 0.0588 - 40 0.275 - 41 0.471 - 42 0.0392 - - 43 10 4 0 - 0 0.3 - 2 0.2 - 29 0.1 - 41 0.4 - - 44 8 2 0 - 41 0.125 - 43 0.875 - - 45 19 5 0 - 3 0.0526 - 7 0.211 - 40 0.105 - 41 0.211 - 46 0.421 - - 46 22 9 0 - 0 0.0909 - 7 0.0455 - 26 0.0455 - 29 0.0455 - 33 0.0455 - 40 0.0909 - 41 0.545 - 42 0.0455 - 46 0.0455 - - 47 14081 39 0 - 0 0.0871 - 1 0.000213 - 2 0.0447 - 3 0.101 - 4 0.0054 - 5 0.000142 - 7 0.076 - 8 0.0049 - 9 0.000142 - 12 0.0304 - 13 0.0054 - 14 0.00107 - 15 0.00746 - 17 7.1e-05 - 18 0.00107 - 19 0.00206 - 20 0.000284 - 21 0.0248 - 22 0.000781 - 24 7.1e-05 - 26 0.0229 - 28 0.00213 - 29 0.108 - 30 0.0032 - 31 0.00206 - 32 0.00284 - 33 0.0295 - 34 0.0022 - 35 0.00071 - 37 0.00199 - 39 0.000923 - 40 0.127 - 41 0.266 - 42 0.0149 - 43 0.0135 - 44 0.00241 - 45 0.00178 - 46 0.00355 - 47 0.0022 - - 48 43 13 0 - 0 0.14 - 2 0.0698 - 3 0.0233 - 7 0.14 - 8 0.0233 - 12 0.0698 - 26 0.0465 - 29 0.0698 - 31 0.0233 - 33 0.0233 - 40 0.186 - 41 0.163 - 42 0.0233 - - 54 20 6 0 - 0 0.05 - 7 0.3 - 29 0.1 - 33 0.05 - 40 0.3 - 41 0.2 - - 55 144 17 0 - 0 0.0347 - 2 0.0347 - 3 0.0139 - 7 0.236 - 12 0.0208 - 13 0.00694 - 21 0.0139 - 26 0.0208 - 29 0.181 - 30 0.0139 - 33 0.0347 - 40 0.111 - 41 0.25 - 42 0.00694 - 44 0.00694 - 46 0.00694 - 47 0.00694 - - 58 27 6 0 - 7 0.037 - 12 0.037 - 31 0.037 - 33 0.0741 - 40 0.593 - 41 0.222 - - 60 6 5 0 - 0 0.167 - 3 0.167 - 7 0.333 - 9 0.167 - 14 0.167 - - 16 1553 34 14 - 0 0.122 - 2 0.0599 - 3 0.00129 - 4 0.00515 - 5 0.000644 - 7 0.109 - 8 0.00515 - 9 0.000644 - 12 0.0399 - 13 0.00515 - 14 0.00193 - 15 0.00451 - 19 0.00258 - 20 0.000644 - 21 0.0258 - 22 0.000644 - 26 0.0232 - 28 0.000644 - 29 0.111 - 30 0.0058 - 31 0.00386 - 32 0.0367 - 33 0.0155 - 34 0.000644 - 35 0.0167 - 36 0.000644 - 40 0.127 - 41 0.214 - 42 0.0328 - 43 0.00386 - 44 0.00386 - 45 0.00193 - 46 0.00386 - 47 0.0135 - - 2 42 15 0 - 0 0.0714 - 2 0.0238 - 7 0.0952 - 19 0.0238 - 21 0.0714 - 28 0.0238 - 29 0.0238 - 31 0.0238 - 33 0.0238 - 35 0.0238 - 40 0.143 - 41 0.31 - 42 0.0714 - 45 0.0238 - 47 0.0476 - - 3 16 9 0 - 0 0.125 - 2 0.125 - 7 0.25 - 8 0.0625 - 12 0.0625 - 30 0.0625 - 31 0.0625 - 35 0.0625 - 41 0.188 - - 4 295 23 0 - 0 0.183 - 2 0.0542 - 4 0.00339 - 5 0.00339 - 7 0.0881 - 8 0.0136 - 12 0.0746 - 13 0.0102 - 19 0.00339 - 20 0.00339 - 21 0.0475 - 26 0.0373 - 29 0.119 - 30 0.0102 - 31 0.00339 - 32 0.0847 - 33 0.00339 - 35 0.0102 - 40 0.0915 - 41 0.132 - 42 0.0169 - 43 0.00339 - 45 0.00339 - - 8 87 15 0 - 0 0.207 - 2 0.023 - 7 0.115 - 12 0.0345 - 21 0.0115 - 26 0.023 - 29 0.046 - 31 0.0115 - 32 0.0805 - 34 0.0115 - 35 0.069 - 36 0.0115 - 40 0.149 - 41 0.161 - 42 0.046 - - 13 6 5 0 - 0 0.167 - 12 0.167 - 26 0.167 - 30 0.167 - 41 0.333 - - 15 766 24 0 - 0 0.0888 - 2 0.0614 - 3 0.00261 - 4 0.00522 - 7 0.101 - 8 0.00131 - 12 0.017 - 13 0.00392 - 15 0.00261 - 21 0.0157 - 22 0.00131 - 26 0.0144 - 29 0.144 - 30 0.00131 - 32 0.00653 - 33 0.0261 - 35 0.00653 - 40 0.148 - 41 0.273 - 42 0.0405 - 43 0.00392 - 44 0.00783 - 46 0.00522 - 47 0.0235 - - 16 35 13 0 - 0 0.0857 - 2 0.0286 - 4 0.0286 - 7 0.0857 - 12 0.0571 - 21 0.0571 - 26 0.0286 - 29 0.0286 - 32 0.0286 - 33 0.0286 - 40 0.0857 - 41 0.343 - 42 0.114 - - 21 5 4 0 - 0 0.2 - 2 0.2 - 7 0.2 - 42 0.4 - - 30 2 2 0 - 2 0.5 - 32 0.5 - - 45 1 1 0 - 46 1 - - 47 257 24 0 - 0 0.128 - 2 0.0778 - 4 0.00389 - 7 0.152 - 8 0.00778 - 9 0.00389 - 12 0.0623 - 13 0.00778 - 14 0.0117 - 15 0.0195 - 19 0.00778 - 21 0.0272 - 26 0.0389 - 29 0.0739 - 30 0.00778 - 31 0.00778 - 32 0.0661 - 35 0.0311 - 40 0.105 - 41 0.136 - 42 0.00778 - 43 0.00778 - 45 0.00389 - 46 0.00389 - - 48 8 7 0 - 7 0.125 - 12 0.125 - 32 0.125 - 33 0.125 - 40 0.125 - 41 0.25 - 47 0.125 - - 55 10 7 0 - 4 0.1 - 7 0.2 - 12 0.1 - 21 0.1 - 29 0.1 - 40 0.3 - 41 0.1 - - 60 11 6 0 - 0 0.273 - 7 0.0909 - 30 0.0909 - 35 0.182 - 40 0.182 - 41 0.182 - - 17 3 1 0 - 4 1 - - 18 8656 34 12 - 0 0.00508 - 2 0.0067 - 3 0.0261 - 4 0.000231 - 6 0.000231 - 7 0.00208 - 8 0.207 - 9 0.00173 - 10 0.026 - 12 0.00104 - 13 0.417 - 14 0.13 - 15 0.104 - 16 0.00381 - 19 0.000116 - 21 0.00555 - 22 0.000347 - 23 0.00208 - 26 0.000231 - 28 0.000347 - 29 0.00439 - 30 0.0117 - 31 0.00739 - 32 0.000462 - 33 0.00104 - 38 0.000578 - 39 0.0101 - 40 0.00485 - 41 0.00601 - 42 0.000231 - 43 0.000924 - 44 0.000231 - 45 0.0117 - 46 0.000231 - - 3 25 6 0 - 3 0.04 - 8 0.36 - 13 0.36 - 14 0.12 - 40 0.08 - 41 0.04 - - 6 2 2 0 - 13 0.5 - 46 0.5 - - 8 12 4 0 - 13 0.417 - 14 0.417 - 15 0.0833 - 29 0.0833 - - 13 2900 22 0 - 2 0.00103 - 3 0.0238 - 6 0.00069 - 7 0.00103 - 8 0.236 - 9 0.00172 - 10 0.04 - 13 0.477 - 14 0.132 - 15 0.0441 - 16 0.00103 - 21 0.00483 - 22 0.000345 - 23 0.0031 - 30 0.00793 - 31 0.00655 - 39 0.00931 - 40 0.00207 - 41 0.000345 - 42 0.000345 - 43 0.00069 - 45 0.00724 - - 14 544 15 0 - 2 0.00368 - 3 0.011 - 7 0.00184 - 8 0.0974 - 9 0.00184 - 10 0.00184 - 13 0.417 - 14 0.415 - 15 0.0129 - 23 0.00184 - 26 0.00368 - 30 0.0147 - 31 0.00735 - 40 0.00184 - 45 0.00735 - - 15 5059 31 0 - 0 0.0083 - 2 0.0103 - 3 0.0289 - 4 0.000395 - 7 0.00277 - 8 0.205 - 9 0.00178 - 10 0.0213 - 12 0.00178 - 13 0.381 - 14 0.0996 - 15 0.147 - 16 0.00534 - 19 0.000198 - 21 0.00672 - 22 0.000395 - 23 0.00158 - 29 0.00731 - 30 0.0134 - 31 0.00791 - 32 0.000791 - 33 0.00178 - 38 0.000988 - 39 0.0117 - 40 0.00633 - 41 0.00988 - 42 0.000198 - 43 0.00119 - 44 0.000395 - 45 0.015 - 46 0.000198 - - 16 66 9 0 - 0 0.0152 - 3 0.0303 - 8 0.121 - 13 0.545 - 14 0.0455 - 15 0.167 - 16 0.0455 - 30 0.0152 - 31 0.0152 - - 21 3 2 0 - 13 0.667 - 40 0.333 - - 28 1 1 0 - 0 1 - - 47 4 2 0 - 15 0.25 - 28 0.75 - - 55 3 2 0 - 2 0.333 - 13 0.667 - - 57 19 6 0 - 3 0.0526 - 8 0.0526 - 13 0.421 - 15 0.368 - 30 0.0526 - 39 0.0526 - - 19 17366 41 5 - 0 0.301 - 1 0.000173 - 2 0.0076 - 3 0.000864 - 4 0.012 - 5 0.000115 - 6 5.76e-05 - 7 0.0348 - 8 0.00749 - 9 0.00132 - 10 0.000115 - 12 0.124 - 13 0.00202 - 14 0.000749 - 15 0.000576 - 17 0.000115 - 18 0.000633 - 19 0.00161 - 20 0.000115 - 21 0.0537 - 22 0.00155 - 23 0.000173 - 24 0.00455 - 26 0.0163 - 28 0.0117 - 29 0.166 - 30 0.00242 - 31 0.0019 - 32 0.0774 - 33 0.106 - 34 0.000288 - 35 0.000633 - 37 0.00121 - 39 0.000288 - 40 0.0313 - 41 0.021 - 42 0.00334 - 43 0.000461 - 44 0.000921 - 45 0.00346 - 46 0.000461 - - 4 12 6 0 - 0 0.417 - 7 0.0833 - 12 0.25 - 29 0.0833 - 33 0.0833 - 40 0.0833 - - 13 2 2 0 - 26 0.5 - 40 0.5 - - 15 4 4 0 - 0 0.25 - 29 0.25 - 33 0.25 - 37 0.25 - - 21 3 2 0 - 12 0.667 - 41 0.333 - - 44 2 1 0 - 43 1 - - 20 34 11 0 - 0 0.0882 - 1 0.0588 - 13 0.0882 - 15 0.0294 - 21 0.0294 - 30 0.235 - 39 0.324 - 40 0.0294 - 41 0.0588 - 42 0.0294 - 43 0.0294 - - 21 674 33 12 - 0 0.049 - 2 0.0208 - 3 0.0089 - 4 0.0831 - 6 0.00148 - 7 0.2 - 8 0.0386 - 9 0.0134 - 12 0.0119 - 13 0.0326 - 14 0.0208 - 15 0.0208 - 19 0.0163 - 20 0.00148 - 21 0.0371 - 22 0.0089 - 26 0.0252 - 28 0.00297 - 29 0.00445 - 30 0.00593 - 31 0.00742 - 32 0.00445 - 33 0.0104 - 34 0.00148 - 37 0.00148 - 39 0.0089 - 40 0.168 - 41 0.169 - 42 0.0178 - 43 0.00148 - 44 0.00297 - 46 0.00148 - 47 0.00148 - - 2 50 13 0 - 3 0.02 - 4 0.38 - 8 0.02 - 9 0.02 - 13 0.14 - 14 0.08 - 15 0.1 - 21 0.06 - 28 0.02 - 39 0.02 - 40 0.06 - 41 0.06 - 42 0.02 - - 3 49 11 0 - 2 0.0408 - 3 0.0204 - 7 0.0612 - 8 0.0204 - 13 0.0816 - 29 0.0204 - 37 0.0204 - 40 0.571 - 41 0.122 - 42 0.0204 - 47 0.0204 - - 4 39 12 0 - 0 0.0256 - 4 0.0256 - 6 0.0256 - 7 0.0513 - 8 0.359 - 9 0.179 - 21 0.0256 - 22 0.154 - 30 0.0256 - 33 0.0256 - 40 0.0769 - 41 0.0256 - - 13 84 16 0 - 0 0.0714 - 2 0.0476 - 7 0.202 - 12 0.0119 - 13 0.0119 - 14 0.0119 - 19 0.0238 - 21 0.0238 - 26 0.0476 - 31 0.0119 - 33 0.0357 - 40 0.19 - 41 0.226 - 42 0.0595 - 44 0.0119 - 46 0.0119 - - 14 20 6 0 - 7 0.1 - 15 0.05 - 32 0.05 - 40 0.45 - 41 0.3 - 42 0.05 - - 15 7 5 0 - 2 0.143 - 29 0.143 - 40 0.143 - 41 0.429 - 42 0.143 - - 21 46 11 0 - 4 0.0435 - 7 0.674 - 8 0.0217 - 15 0.0217 - 19 0.0435 - 21 0.0435 - 26 0.0217 - 30 0.0217 - 31 0.0217 - 40 0.0652 - 41 0.0217 - - 41 60 12 0 - 3 0.05 - 4 0.333 - 7 0.0167 - 8 0.1 - 9 0.0167 - 13 0.117 - 14 0.117 - 15 0.0833 - 20 0.0167 - 21 0.1 - 33 0.0167 - 41 0.0333 - - 42 7 2 0 - 4 0.857 - 15 0.143 - - 47 289 26 0 - 0 0.0865 - 2 0.0242 - 3 0.00346 - 4 0.0242 - 7 0.263 - 8 0.0104 - 12 0.0242 - 13 0.0104 - 14 0.00346 - 15 0.00346 - 19 0.0242 - 21 0.0138 - 26 0.0346 - 28 0.00346 - 29 0.00346 - 30 0.00692 - 31 0.0104 - 32 0.00692 - 33 0.00692 - 34 0.00346 - 39 0.0173 - 40 0.163 - 41 0.235 - 42 0.0104 - 43 0.00346 - 44 0.00346 - - 49 2 2 0 - 4 0.5 - 14 0.5 - - 55 10 4 0 - 21 0.5 - 26 0.1 - 40 0.1 - 41 0.3 - - 22 48 11 2 - 2 0.0625 - 7 0.521 - 8 0.0417 - 12 0.0208 - 21 0.0208 - 29 0.0208 - 31 0.0208 - 37 0.0208 - 40 0.0833 - 41 0.167 - 42 0.0208 - - 4 2 2 0 - 8 0.5 - 40 0.5 - - 14 2 2 0 - 29 0.5 - 40 0.5 - - 23 19 8 1 - 7 0.579 - 8 0.0526 - 19 0.0526 - 21 0.105 - 29 0.0526 - 31 0.0526 - 40 0.0526 - 41 0.0526 - - 4 4 4 0 - 8 0.25 - 31 0.25 - 40 0.25 - 41 0.25 - - 24 8 3 0 - 7 0.5 - 40 0.25 - 41 0.25 - - 25 13 2 0 - 3 0.0769 - 42 0.923 - - 26 52 5 0 - 3 0.808 - 14 0.0192 - 15 0.0192 - 28 0.0385 - 39 0.115 - - 27 6 4 0 - 40 0.333 - 41 0.167 - 42 0.333 - 46 0.167 - - 28 92 16 2 - 0 0.0109 - 2 0.0326 - 4 0.087 - 7 0.424 - 8 0.0326 - 13 0.0109 - 15 0.0109 - 21 0.0435 - 26 0.0761 - 29 0.0217 - 40 0.0978 - 41 0.087 - 42 0.0217 - 45 0.0109 - 46 0.0217 - 47 0.0109 - - 13 5 4 0 - 7 0.2 - 26 0.4 - 29 0.2 - 45 0.2 - - 21 3 3 0 - 4 0.333 - 7 0.333 - 47 0.333 - - 29 6 5 0 - 4 0.167 - 7 0.333 - 8 0.167 - 29 0.167 - 33 0.167 - - 30 261 26 5 - 0 0.069 - 2 0.0307 - 3 0.00383 - 4 0.00766 - 7 0.429 - 8 0.0192 - 12 0.0268 - 13 0.00383 - 14 0.00383 - 19 0.00383 - 21 0.0307 - 22 0.00383 - 26 0.0307 - 29 0.023 - 30 0.00383 - 31 0.00766 - 32 0.00383 - 33 0.0153 - 37 0.00383 - 39 0.0115 - 40 0.138 - 41 0.0958 - 42 0.0153 - 43 0.00383 - 44 0.00383 - 46 0.0115 - - 2 9 3 0 - 7 0.778 - 21 0.111 - 40 0.111 - - 4 47 12 0 - 0 0.191 - 2 0.0213 - 3 0.0213 - 7 0.277 - 12 0.106 - 21 0.0426 - 29 0.0426 - 33 0.0851 - 39 0.0638 - 40 0.0426 - 41 0.0638 - 42 0.0426 - - 8 17 8 0 - 7 0.353 - 12 0.0588 - 21 0.0588 - 26 0.0588 - 29 0.0588 - 31 0.0588 - 40 0.118 - 41 0.235 - - 13 28 11 0 - 0 0.0357 - 2 0.0714 - 4 0.0357 - 7 0.536 - 8 0.0357 - 13 0.0357 - 14 0.0357 - 22 0.0357 - 26 0.0714 - 41 0.0714 - 44 0.0357 - - 47 136 19 0 - 0 0.0588 - 2 0.0294 - 4 0.00735 - 7 0.397 - 8 0.0221 - 12 0.00735 - 19 0.00735 - 21 0.0294 - 26 0.0368 - 29 0.0147 - 30 0.00735 - 31 0.00735 - 32 0.00735 - 37 0.00735 - 40 0.206 - 41 0.11 - 42 0.0147 - 43 0.00735 - 46 0.0221 - - 31 60 15 7 - 0 0.0333 - 2 0.0333 - 3 0.0167 - 4 0.0167 - 7 0.0833 - 12 0.05 - 14 0.0167 - 24 0.0167 - 26 0.0333 - 29 0.0833 - 30 0.0167 - 39 0.483 - 40 0.0667 - 41 0.0333 - 45 0.0167 - - 3 2 2 0 - 2 0.5 - 14 0.5 - - 4 33 6 0 - 0 0.0303 - 2 0.0303 - 3 0.0303 - 12 0.0303 - 39 0.848 - 40 0.0303 - - 13 7 6 0 - 4 0.143 - 7 0.286 - 12 0.143 - 26 0.143 - 41 0.143 - 45 0.143 - - 15 2 1 0 - 29 1 - - 21 2 2 0 - 7 0.5 - 41 0.5 - - 47 8 5 0 - 0 0.125 - 12 0.125 - 24 0.125 - 29 0.375 - 40 0.25 - - 55 2 2 0 - 26 0.5 - 30 0.5 - - 32 3 3 0 - 0 0.333 - 32 0.333 - 33 0.333 - - 33 65 17 5 - 0 0.0154 - 3 0.0462 - 4 0.169 - 7 0.138 - 8 0.0923 - 10 0.0154 - 13 0.0154 - 14 0.0308 - 19 0.0615 - 21 0.0308 - 22 0.0154 - 26 0.108 - 30 0.0154 - 34 0.0154 - 40 0.0154 - 41 0.2 - 45 0.0154 - - 2 6 3 0 - 4 0.5 - 7 0.333 - 8 0.167 - - 13 24 10 0 - 4 0.125 - 7 0.125 - 8 0.0417 - 13 0.0417 - 14 0.0417 - 19 0.0833 - 21 0.0417 - 26 0.167 - 34 0.0417 - 41 0.292 - - 14 3 3 0 - 8 0.333 - 19 0.333 - 45 0.333 - - 15 8 6 0 - 0 0.125 - 3 0.25 - 4 0.125 - 7 0.125 - 8 0.25 - 41 0.125 - - 47 17 12 0 - 3 0.0588 - 4 0.0588 - 7 0.176 - 8 0.0588 - 10 0.0588 - 19 0.0588 - 21 0.0588 - 22 0.0588 - 26 0.0588 - 30 0.0588 - 40 0.0588 - 41 0.235 - - 34 58 6 0 - 0 0.259 - 4 0.0172 - 12 0.379 - 21 0.0345 - 29 0.19 - 33 0.121 - - 35 6 4 0 - 0 0.333 - 26 0.167 - 40 0.333 - 41 0.167 - - 39 1790 1 0 - 3 1 - - 40 1001 17 7 - 0 0.000999 - 3 0.002 - 4 0.000999 - 12 0.000999 - 13 0.000999 - 14 0.002 - 15 0.00599 - 21 0.000999 - 26 0.000999 - 31 0.000999 - 35 0.000999 - 42 0.004 - 43 0.0679 - 44 0.0509 - 45 0.000999 - 46 0.014 - 47 0.844 - - 3 10 3 0 - 21 0.1 - 26 0.1 - 47 0.8 - - 15 187 8 0 - 0 0.00535 - 12 0.00535 - 15 0.0321 - 43 0.337 - 44 0.267 - 45 0.00535 - 46 0.0214 - 47 0.326 - - 55 492 11 0 - 3 0.00407 - 4 0.00203 - 13 0.00203 - 14 0.00407 - 31 0.00203 - 35 0.00203 - 42 0.00813 - 43 0.00203 - 44 0.00203 - 46 0.0061 - 47 0.965 - - 57 129 3 0 - 43 0.00775 - 46 0.0233 - 47 0.969 - - 62 40 1 0 - 47 1 - - 67 1 1 0 - 46 1 - - 69 35 1 0 - 47 1 - - 41 20629 39 17 - 0 0.0576 - 1 0.000145 - 2 0.0758 - 3 0.0369 - 4 0.147 - 6 0.000436 - 7 0.0581 - 8 0.0435 - 9 0.00145 - 10 0.000436 - 12 0.0155 - 13 0.0636 - 14 0.0132 - 15 0.126 - 16 0.00097 - 17 4.85e-05 - 19 0.00102 - 20 0.00305 - 21 0.044 - 22 0.000291 - 23 0.000242 - 24 0.000145 - 26 0.01 - 27 4.85e-05 - 28 0.000436 - 29 0.0714 - 30 0.0248 - 31 0.0326 - 32 0.00315 - 33 0.0252 - 34 0.0794 - 35 0.028 - 36 0.00499 - 37 0.014 - 39 0.00155 - 42 0.000145 - 44 0.000339 - 45 0.00344 - 46 0.0109 - - 2 7 3 0 - 7 0.429 - 21 0.429 - 22 0.143 - - 3 358 9 0 - 0 0.0112 - 2 0.00559 - 3 0.888 - 4 0.00279 - 7 0.0447 - 26 0.0196 - 31 0.0196 - 32 0.00559 - 46 0.00279 - - 13 26 10 0 - 3 0.0385 - 4 0.0385 - 6 0.0385 - 7 0.269 - 21 0.0385 - 26 0.0385 - 29 0.0385 - 30 0.0385 - 34 0.0385 - 46 0.423 - - 14 11 6 0 - 0 0.0909 - 6 0.0909 - 7 0.0909 - 13 0.0909 - 21 0.273 - 46 0.364 - - 15 18 9 0 - 0 0.0556 - 2 0.0556 - 3 0.0556 - 4 0.0556 - 7 0.278 - 14 0.0556 - 21 0.111 - 29 0.278 - 33 0.0556 - - 27 1 1 0 - 46 1 - - 48 242 18 0 - 0 0.211 - 2 0.0165 - 4 0.0207 - 7 0.128 - 8 0.0165 - 12 0.0868 - 13 0.0165 - 15 0.00826 - 21 0.062 - 22 0.00413 - 26 0.0372 - 29 0.062 - 30 0.0207 - 31 0.215 - 32 0.0124 - 33 0.0579 - 34 0.0207 - 37 0.00413 - - 49 44 13 0 - 0 0.136 - 2 0.159 - 4 0.182 - 7 0.205 - 12 0.0227 - 13 0.0227 - 15 0.0682 - 21 0.0455 - 29 0.0227 - 30 0.0455 - 31 0.0455 - 32 0.0227 - 46 0.0227 - - 55 17277 39 0 - 0 0.0341 - 1 0.000116 - 2 0.0865 - 3 0.0252 - 4 0.17 - 6 0.000347 - 7 0.0512 - 8 0.0478 - 9 0.00145 - 10 0.000463 - 12 0.00666 - 13 0.0737 - 14 0.0153 - 15 0.148 - 16 0.00116 - 17 5.79e-05 - 19 0.000868 - 20 0.00359 - 21 0.0416 - 22 0.000232 - 23 0.000289 - 24 5.79e-05 - 26 0.007 - 27 5.79e-05 - 28 0.000405 - 29 0.0587 - 30 0.0212 - 31 0.0301 - 32 0.00127 - 33 0.0201 - 34 0.0843 - 35 0.0312 - 36 0.00561 - 37 0.0149 - 39 0.00185 - 42 0.000174 - 44 0.000347 - 45 0.00313 - 46 0.0102 - - 56 4 3 0 - 12 0.25 - 30 0.25 - 46 0.5 - - 57 1015 30 0 - 0 0.106 - 1 0.000985 - 2 0.0177 - 3 0.00394 - 4 0.0236 - 6 0.000985 - 7 0.164 - 8 0.0433 - 9 0.00394 - 12 0.0286 - 13 0.00591 - 14 0.00197 - 15 0.0197 - 20 0.000985 - 21 0.07 - 24 0.000985 - 26 0.0424 - 28 0.000985 - 29 0.0562 - 30 0.1 - 31 0.067 - 32 0.00788 - 33 0.0177 - 34 0.144 - 35 0.0256 - 36 0.00493 - 37 0.0246 - 44 0.000985 - 45 0.00296 - 46 0.0118 - - 58 63 17 0 - 0 0.0317 - 2 0.0317 - 3 0.0159 - 4 0.27 - 7 0.0794 - 8 0.0476 - 9 0.0159 - 13 0.159 - 15 0.0159 - 21 0.0317 - 29 0.0317 - 30 0.0317 - 33 0.0159 - 34 0.0317 - 35 0.127 - 37 0.0159 - 45 0.0476 - - 61 13 6 0 - 0 0.308 - 7 0.0769 - 12 0.231 - 29 0.231 - 31 0.0769 - 33 0.0769 - - 62 20 11 0 - 0 0.05 - 2 0.05 - 3 0.05 - 4 0.1 - 7 0.1 - 8 0.1 - 13 0.15 - 21 0.05 - 29 0.05 - 30 0.1 - 46 0.2 - - 64 1038 24 0 - 0 0.286 - 2 0.0231 - 4 0.0116 - 7 0.0222 - 8 0.0106 - 10 0.000963 - 12 0.0983 - 13 0.00771 - 14 0.00482 - 15 0.0154 - 19 0.00482 - 21 0.0626 - 26 0.0125 - 28 0.000963 - 29 0.283 - 30 0.0164 - 31 0.0135 - 32 0.0183 - 33 0.0877 - 34 0.00289 - 35 0.000963 - 37 0.000963 - 45 0.00867 - 46 0.00578 - - 68 2 2 0 - 0 0.5 - 33 0.5 - - 69 481 24 0 - 0 0.254 - 2 0.0187 - 4 0.0125 - 7 0.0915 - 8 0.0166 - 12 0.0977 - 13 0.00832 - 14 0.00208 - 15 0.00832 - 19 0.00208 - 21 0.0478 - 24 0.00208 - 26 0.027 - 29 0.166 - 30 0.0291 - 31 0.0187 - 32 0.0208 - 33 0.0956 - 34 0.0499 - 35 0.00624 - 36 0.00208 - 37 0.00416 - 45 0.00416 - 46 0.0146 - - 42 2040 38 16 - 0 0.0211 - 2 0.0422 - 3 0.259 - 4 0.102 - 5 0.00049 - 7 0.0284 - 8 0.0373 - 9 0.00294 - 10 0.00049 - 11 0.00098 - 12 0.00686 - 13 0.0422 - 14 0.0304 - 15 0.123 - 16 0.00098 - 19 0.00343 - 20 0.00392 - 21 0.0338 - 22 0.00049 - 25 0.00049 - 26 0.00833 - 28 0.00588 - 29 0.0137 - 30 0.0191 - 31 0.0132 - 32 0.00196 - 33 0.00392 - 34 0.0123 - 35 0.00539 - 37 0.00637 - 38 0.00098 - 39 0.0574 - 40 0.00441 - 42 0.00049 - 44 0.00049 - 45 0.0152 - 46 0.00098 - 47 0.0897 - - 3 11 1 0 - 47 1 - - 13 23 4 0 - 7 0.087 - 8 0.0435 - 26 0.13 - 47 0.739 - - 14 55 4 0 - 2 0.0182 - 7 0.0182 - 40 0.127 - 47 0.836 - - 15 54 1 0 - 47 1 - - 16 10 2 0 - 40 0.2 - 47 0.8 - - 40 3 2 0 - 15 0.333 - 39 0.667 - - 41 3 2 0 - 13 0.333 - 39 0.667 - - 46 11 7 0 - 4 0.364 - 7 0.0909 - 8 0.0909 - 12 0.0909 - 13 0.0909 - 14 0.182 - 15 0.0909 - - 48 5 5 0 - 0 0.2 - 2 0.2 - 7 0.2 - 12 0.2 - 21 0.2 - - 49 2 2 0 - 7 0.5 - 29 0.5 - - 55 1709 36 0 - 0 0.0164 - 2 0.0474 - 3 0.305 - 4 0.116 - 5 0.000585 - 7 0.0199 - 8 0.0392 - 9 0.00351 - 10 0.000585 - 11 0.00117 - 12 0.00293 - 13 0.0486 - 14 0.0339 - 15 0.143 - 16 0.00117 - 19 0.00351 - 20 0.00468 - 21 0.0363 - 22 0.000585 - 25 0.000585 - 26 0.00644 - 28 0.00702 - 29 0.00995 - 30 0.0164 - 31 0.0135 - 32 0.000585 - 33 0.0041 - 34 0.0117 - 35 0.00585 - 37 0.00702 - 38 0.00117 - 39 0.0655 - 42 0.000585 - 44 0.000585 - 45 0.0164 - 47 0.00819 - - 57 51 19 0 - 0 0.118 - 2 0.0196 - 4 0.0588 - 7 0.216 - 8 0.0588 - 12 0.0588 - 15 0.0392 - 19 0.0196 - 21 0.0392 - 26 0.0196 - 29 0.0392 - 30 0.0784 - 33 0.0196 - 34 0.0784 - 35 0.0196 - 37 0.0196 - 45 0.0196 - 46 0.0196 - 47 0.0588 - - 58 39 9 0 - 3 0.179 - 7 0.0256 - 8 0.0256 - 21 0.0256 - 29 0.0513 - 31 0.0513 - 34 0.0256 - 45 0.0256 - 47 0.59 - - 62 5 4 0 - 2 0.2 - 7 0.2 - 30 0.4 - 46 0.2 - - 64 34 15 0 - 0 0.176 - 2 0.0294 - 4 0.0882 - 7 0.0882 - 8 0.0588 - 12 0.118 - 13 0.0294 - 14 0.0588 - 21 0.0294 - 26 0.0294 - 29 0.118 - 30 0.0294 - 31 0.0588 - 32 0.0294 - 47 0.0588 - - 69 20 11 0 - 0 0.1 - 4 0.05 - 7 0.1 - 8 0.05 - 21 0.1 - 26 0.05 - 29 0.1 - 30 0.15 - 32 0.1 - 45 0.05 - 47 0.15 - - 43 97 22 8 - 0 0.0928 - 2 0.0825 - 4 0.0206 - 6 0.0103 - 7 0.144 - 12 0.0412 - 15 0.0103 - 19 0.0103 - 21 0.0206 - 26 0.0103 - 29 0.0103 - 30 0.0103 - 31 0.0103 - 32 0.0206 - 33 0.0619 - 34 0.0103 - 35 0.0103 - 40 0.134 - 41 0.113 - 42 0.103 - 44 0.0103 - 47 0.0619 - - 13 12 7 0 - 0 0.0833 - 2 0.0833 - 7 0.0833 - 33 0.333 - 40 0.0833 - 41 0.167 - 42 0.167 - - 14 8 7 0 - 0 0.25 - 7 0.125 - 12 0.125 - 31 0.125 - 32 0.125 - 34 0.125 - 35 0.125 - - 15 12 9 0 - 0 0.167 - 4 0.0833 - 7 0.0833 - 12 0.0833 - 26 0.0833 - 29 0.0833 - 40 0.0833 - 42 0.25 - 47 0.0833 - - 40 2 1 0 - 47 1 - - 55 37 13 0 - 0 0.027 - 2 0.135 - 4 0.027 - 6 0.027 - 7 0.189 - 15 0.027 - 19 0.027 - 33 0.027 - 40 0.216 - 41 0.135 - 42 0.108 - 44 0.027 - 47 0.027 - - 57 16 10 0 - 0 0.188 - 2 0.125 - 7 0.125 - 12 0.125 - 21 0.0625 - 30 0.0625 - 32 0.0625 - 40 0.0625 - 41 0.0625 - 47 0.125 - - 58 2 1 0 - 41 1 - - 69 2 2 0 - 21 0.5 - 40 0.5 - - 44 52 11 0 - 2 0.0769 - 3 0.0192 - 4 0.0577 - 7 0.25 - 8 0.0385 - 13 0.0385 - 15 0.25 - 21 0.0192 - 30 0.0385 - 35 0.0192 - 39 0.192 - - 45 238 22 10 - 0 0.0252 - 2 0.0252 - 3 0.0084 - 4 0.126 - 6 0.0168 - 7 0.0924 - 8 0.0798 - 9 0.0042 - 12 0.0042 - 13 0.0924 - 15 0.311 - 16 0.0084 - 19 0.0546 - 21 0.0294 - 26 0.0042 - 28 0.021 - 30 0.0168 - 31 0.0252 - 32 0.0042 - 34 0.0168 - 35 0.021 - 37 0.0126 - - 2 30 9 0 - 0 0.0333 - 3 0.0333 - 4 0.0667 - 8 0.133 - 9 0.0333 - 13 0.167 - 15 0.467 - 16 0.0333 - 37 0.0333 - - 8 5 4 0 - 6 0.2 - 8 0.2 - 15 0.4 - 21 0.2 - - 13 11 6 0 - 3 0.0909 - 4 0.0909 - 6 0.0909 - 7 0.0909 - 15 0.545 - 30 0.0909 - - 41 40 14 0 - 0 0.025 - 2 0.05 - 4 0.225 - 7 0.05 - 8 0.075 - 12 0.025 - 13 0.125 - 15 0.175 - 16 0.025 - 19 0.05 - 21 0.05 - 28 0.05 - 30 0.025 - 35 0.05 - - 42 21 8 0 - 0 0.143 - 4 0.143 - 7 0.0476 - 8 0.143 - 13 0.0476 - 19 0.381 - 31 0.0476 - 37 0.0476 - - 46 8 3 0 - 4 0.25 - 13 0.125 - 15 0.625 - - 55 107 16 0 - 2 0.00935 - 4 0.121 - 6 0.0187 - 7 0.15 - 8 0.0467 - 13 0.0935 - 15 0.355 - 19 0.028 - 21 0.0187 - 26 0.00935 - 28 0.028 - 30 0.00935 - 31 0.0467 - 34 0.028 - 35 0.028 - 37 0.00935 - - 57 5 4 0 - 2 0.2 - 7 0.4 - 8 0.2 - 34 0.2 - - 58 6 4 0 - 0 0.167 - 2 0.333 - 21 0.333 - 30 0.167 - - 69 1 1 0 - 32 1 - - 46 898 32 13 - 0 0.0635 - 1 0.00223 - 2 0.0668 - 3 0.00445 - 4 0.0568 - 7 0.345 - 8 0.0212 - 12 0.0167 - 13 0.00557 - 14 0.00223 - 15 0.0167 - 19 0.0078 - 20 0.00111 - 21 0.0323 - 26 0.0646 - 29 0.0212 - 30 0.0212 - 31 0.0345 - 32 0.00334 - 33 0.0167 - 34 0.0624 - 35 0.0111 - 36 0.00223 - 37 0.0122 - 40 0.00334 - 41 0.00668 - 42 0.0323 - 43 0.00334 - 44 0.0379 - 45 0.00891 - 46 0.00223 - 47 0.0134 - - 6 2 2 0 - 0 0.5 - 41 0.5 - - 8 3 3 0 - 7 0.333 - 33 0.333 - 42 0.333 - - 13 251 24 0 - 0 0.0598 - 1 0.00398 - 2 0.0478 - 4 0.00797 - 7 0.498 - 8 0.012 - 12 0.0398 - 19 0.00398 - 21 0.0279 - 26 0.0876 - 29 0.012 - 30 0.0159 - 31 0.0359 - 33 0.00797 - 34 0.0518 - 35 0.00797 - 37 0.012 - 40 0.00797 - 41 0.00398 - 42 0.0279 - 43 0.00398 - 44 0.0159 - 46 0.00398 - 47 0.00398 - - 14 66 15 0 - 0 0.0606 - 2 0.0606 - 7 0.333 - 8 0.0303 - 12 0.0152 - 19 0.0152 - 21 0.0455 - 26 0.152 - 29 0.0152 - 31 0.0455 - 32 0.0455 - 34 0.0455 - 35 0.0606 - 37 0.0152 - 42 0.0606 - - 15 21 11 0 - 2 0.0476 - 4 0.0476 - 7 0.286 - 12 0.0952 - 21 0.0952 - 26 0.0476 - 33 0.0952 - 34 0.0476 - 40 0.0476 - 41 0.143 - 46 0.0476 - - 40 11 3 0 - 15 0.182 - 21 0.0909 - 47 0.727 - - 41 222 23 0 - 0 0.0721 - 2 0.045 - 3 0.018 - 4 0.203 - 7 0.0856 - 8 0.0405 - 12 0.0045 - 13 0.018 - 14 0.00901 - 15 0.0541 - 19 0.00901 - 20 0.0045 - 21 0.0495 - 26 0.018 - 29 0.045 - 30 0.036 - 31 0.045 - 33 0.0225 - 34 0.144 - 35 0.018 - 36 0.00901 - 37 0.0135 - 45 0.036 - - 42 2 2 0 - 33 0.5 - 47 0.5 - - 55 241 21 0 - 0 0.0207 - 1 0.00415 - 2 0.12 - 4 0.0124 - 7 0.448 - 8 0.0166 - 15 0.00415 - 19 0.0083 - 21 0.0124 - 26 0.083 - 29 0.0083 - 30 0.0207 - 31 0.0332 - 33 0.0083 - 34 0.0249 - 37 0.0124 - 41 0.00415 - 42 0.0539 - 43 0.0083 - 44 0.0913 - 47 0.00415 - - 56 26 9 0 - 0 0.269 - 7 0.231 - 12 0.0385 - 19 0.0385 - 29 0.115 - 33 0.0385 - 34 0.0385 - 37 0.0385 - 44 0.192 - - 57 34 10 0 - 0 0.147 - 2 0.118 - 7 0.471 - 8 0.0294 - 13 0.0294 - 21 0.0294 - 26 0.0294 - 30 0.0588 - 31 0.0294 - 42 0.0588 - - 62 10 6 0 - 0 0.2 - 7 0.2 - 21 0.1 - 33 0.1 - 42 0.1 - 44 0.3 - - 65 1 1 0 - 47 1 - - 47 311752 46 59 - 0 0.0863 - 1 0.000289 - 2 0.0341 - 3 0.00328 - 4 0.0119 - 5 0.000103 - 6 4.49e-05 - 7 0.192 - 8 0.0132 - 9 0.000908 - 10 0.000763 - 12 0.0303 - 13 0.0146 - 14 0.00451 - 15 0.00615 - 16 0.000122 - 17 2.57e-05 - 18 0.000176 - 19 0.00338 - 20 0.000186 - 21 0.0233 - 22 0.00185 - 23 0.00017 - 24 0.000565 - 25 2.89e-05 - 26 0.031 - 28 0.00225 - 29 0.0626 - 30 0.00728 - 31 0.0105 - 32 0.0152 - 33 0.0222 - 34 0.00651 - 35 0.00307 - 36 0.00017 - 37 0.00209 - 38 1.92e-05 - 39 0.000504 - 40 0.207 - 41 0.166 - 42 0.0179 - 43 0.0038 - 44 0.00306 - 45 0.00251 - 46 0.00252 - 47 0.00512 - - 0 56 13 0 - 0 0.0179 - 7 0.125 - 8 0.0893 - 13 0.0357 - 15 0.0179 - 21 0.25 - 23 0.179 - 29 0.107 - 30 0.0714 - 31 0.0536 - 41 0.0179 - 43 0.0179 - 45 0.0179 - - 1 3 2 0 - 26 0.333 - 40 0.667 - - 2 3 2 0 - 0 0.333 - 21 0.667 - - 3 7697 38 0 - 0 0.019 - 2 0.0298 - 3 0.00065 - 4 0.099 - 6 0.00013 - 7 0.178 - 8 0.00429 - 9 0.00208 - 10 0.00013 - 12 0.00754 - 13 0.00455 - 14 0.00143 - 15 0.00429 - 19 0.00247 - 20 0.00026 - 21 0.0052 - 22 0.00026 - 23 0.00013 - 25 0.00013 - 26 0.0958 - 28 0.00013 - 29 0.0151 - 30 0.00338 - 31 0.00559 - 32 0.00117 - 33 0.00351 - 34 0.00273 - 35 0.000909 - 37 0.00338 - 39 0.00013 - 40 0.212 - 41 0.251 - 42 0.0227 - 43 0.0178 - 44 0.00182 - 45 0.0013 - 46 0.00065 - 47 0.00208 - - 4 2457 34 0 - 0 0.258 - 1 0.000814 - 2 0.00895 - 3 0.00204 - 4 0.00611 - 7 0.286 - 8 0.00773 - 9 0.000407 - 10 0.000407 - 12 0.0696 - 13 0.00692 - 14 0.00122 - 15 0.00122 - 18 0.000814 - 19 0.00895 - 21 0.0232 - 24 0.00204 - 26 0.00733 - 28 0.00407 - 29 0.0281 - 30 0.00692 - 31 0.0248 - 32 0.0228 - 33 0.0619 - 34 0.00611 - 35 0.0265 - 37 0.000407 - 40 0.0419 - 41 0.0696 - 42 0.0106 - 44 0.000407 - 45 0.00122 - 46 0.000814 - 47 0.00204 - - 5 861 10 0 - 0 0.861 - 4 0.00232 - 12 0.0848 - 18 0.0128 - 19 0.00116 - 21 0.0244 - 26 0.00116 - 33 0.00697 - 35 0.00116 - 41 0.00465 - - 6 59 14 0 - 0 0.0678 - 2 0.0339 - 7 0.102 - 12 0.0339 - 26 0.0678 - 31 0.0169 - 33 0.0678 - 40 0.254 - 41 0.203 - 42 0.0339 - 43 0.0169 - 44 0.0339 - 45 0.0169 - 46 0.0508 - - 7 79 19 0 - 0 0.152 - 2 0.0127 - 4 0.0506 - 5 0.0127 - 7 0.228 - 8 0.0127 - 12 0.038 - 18 0.0253 - 19 0.038 - 21 0.0253 - 22 0.0127 - 24 0.0127 - 26 0.0253 - 29 0.0127 - 31 0.0633 - 33 0.038 - 40 0.114 - 41 0.114 - 47 0.0127 - - 8 1187 34 0 - 0 0.0666 - 1 0.000842 - 2 0.0371 - 3 0.00253 - 4 0.00505 - 7 0.405 - 8 0.00758 - 9 0.00421 - 10 0.000842 - 12 0.0118 - 13 0.0143 - 14 0.00505 - 15 0.00421 - 19 0.00337 - 21 0.0177 - 22 0.00337 - 24 0.000842 - 26 0.0497 - 28 0.00168 - 29 0.0286 - 30 0.00505 - 31 0.00505 - 32 0.0118 - 33 0.00927 - 34 0.00253 - 35 0.00253 - 37 0.000842 - 40 0.131 - 41 0.131 - 42 0.0194 - 43 0.00505 - 44 0.00421 - 46 0.00168 - 47 0.000842 - - 9 235 13 0 - 0 0.0213 - 2 0.00851 - 4 0.00851 - 7 0.621 - 12 0.00426 - 21 0.0255 - 26 0.0766 - 29 0.00426 - 30 0.00426 - 31 0.0128 - 40 0.115 - 41 0.0894 - 42 0.00851 - - 10 367 21 0 - 0 0.0572 - 2 0.00272 - 4 0.00817 - 5 0.00272 - 7 0.711 - 8 0.00545 - 12 0.00545 - 13 0.00817 - 19 0.00817 - 21 0.0163 - 26 0.0109 - 28 0.00272 - 29 0.00272 - 30 0.00817 - 31 0.00272 - 32 0.0327 - 37 0.00272 - 40 0.0463 - 41 0.049 - 42 0.0136 - 45 0.00272 - - 12 3 3 0 - 40 0.333 - 41 0.333 - 43 0.333 - - 13 96406 46 0 - 0 0.0637 - 1 0.000353 - 2 0.0345 - 3 0.00505 - 4 0.00829 - 5 0.000145 - 6 5.19e-05 - 7 0.333 - 8 0.00742 - 9 0.00119 - 10 4.15e-05 - 12 0.0242 - 13 0.00407 - 14 0.000944 - 15 0.0048 - 16 3.11e-05 - 17 2.07e-05 - 18 2.07e-05 - 19 0.00561 - 20 0.00027 - 21 0.0238 - 22 0.0035 - 23 0.000114 - 24 0.000467 - 25 4.15e-05 - 26 0.0426 - 28 0.00132 - 29 0.0439 - 30 0.00859 - 31 0.0141 - 32 0.00186 - 33 0.0205 - 34 0.0107 - 35 0.00337 - 36 0.000249 - 37 0.00326 - 38 1.04e-05 - 39 0.000145 - 40 0.149 - 41 0.153 - 42 0.0151 - 43 0.00195 - 44 0.00201 - 45 0.00279 - 46 0.00327 - 47 0.000685 - - 14 55109 44 0 - 0 0.0843 - 1 0.000726 - 2 0.0441 - 3 0.00132 - 4 0.0177 - 5 9.07e-05 - 7 0.251 - 8 0.0175 - 9 0.00098 - 10 3.63e-05 - 12 0.0303 - 13 0.00218 - 14 0.000817 - 15 0.00212 - 16 3.63e-05 - 17 5.44e-05 - 18 3.63e-05 - 19 0.00468 - 20 0.000163 - 21 0.0335 - 22 0.00205 - 23 0.000127 - 24 0.000653 - 25 1.81e-05 - 26 0.0385 - 28 0.00356 - 29 0.0533 - 30 0.0147 - 31 0.0227 - 32 0.0389 - 33 0.00203 - 34 0.0132 - 35 0.00744 - 36 0.000472 - 37 0.00227 - 39 0.000327 - 40 0.146 - 41 0.131 - 42 0.0194 - 43 0.00156 - 44 0.00454 - 45 0.00238 - 46 0.00281 - 47 0.00107 - - 15 37150 40 0 - 0 0.0859 - 1 8.08e-05 - 2 0.0517 - 3 0.00261 - 4 0.0052 - 5 5.38e-05 - 6 2.69e-05 - 7 0.0953 - 8 0.00377 - 9 0.000242 - 12 0.0275 - 13 0.00353 - 14 0.00116 - 15 0.00571 - 17 2.69e-05 - 18 0.000673 - 19 0.00175 - 20 0.000296 - 21 0.0225 - 22 0.000834 - 24 8.08e-05 - 26 0.0186 - 28 0.00221 - 29 0.135 - 30 0.00363 - 31 0.00186 - 32 0.00363 - 33 0.0419 - 34 0.0024 - 35 0.00145 - 37 0.00132 - 39 0.000619 - 40 0.126 - 41 0.315 - 42 0.0153 - 43 0.00729 - 44 0.00686 - 45 0.00202 - 46 0.00347 - 47 0.00331 - - 16 1540 34 0 - 0 0.123 - 2 0.0604 - 3 0.0013 - 4 0.00519 - 5 0.000649 - 7 0.11 - 8 0.00519 - 9 0.000649 - 12 0.0403 - 13 0.00519 - 14 0.00195 - 15 0.00325 - 19 0.0026 - 20 0.000649 - 21 0.026 - 22 0.000649 - 26 0.0234 - 28 0.000649 - 29 0.112 - 30 0.00584 - 31 0.0039 - 32 0.037 - 33 0.0156 - 34 0.000649 - 35 0.0169 - 36 0.000649 - 40 0.128 - 41 0.216 - 42 0.0266 - 43 0.0039 - 44 0.0039 - 45 0.00195 - 46 0.00325 - 47 0.0136 - - 17 3 1 0 - 4 1 - - 18 8655 34 0 - 0 0.00508 - 2 0.00659 - 3 0.0261 - 4 0.000231 - 6 0.000231 - 7 0.00208 - 8 0.207 - 9 0.00173 - 10 0.026 - 12 0.00104 - 13 0.417 - 14 0.13 - 15 0.104 - 16 0.00381 - 19 0.000116 - 21 0.00555 - 22 0.000347 - 23 0.00208 - 26 0.000231 - 28 0.000347 - 29 0.00439 - 30 0.0117 - 31 0.00739 - 32 0.000462 - 33 0.00104 - 38 0.000578 - 39 0.0101 - 40 0.00485 - 41 0.00601 - 42 0.000231 - 43 0.000924 - 44 0.000231 - 45 0.0117 - 46 0.000231 - - 19 17347 41 0 - 0 0.301 - 1 0.000173 - 2 0.00761 - 3 0.000807 - 4 0.0115 - 5 0.000115 - 6 5.76e-05 - 7 0.0349 - 8 0.00738 - 9 0.00133 - 10 0.000115 - 12 0.124 - 13 0.00202 - 14 0.000749 - 15 0.000576 - 17 0.000115 - 18 0.000634 - 19 0.00161 - 20 0.000115 - 21 0.0537 - 22 0.00156 - 23 0.000173 - 24 0.00455 - 26 0.0163 - 28 0.0117 - 29 0.166 - 30 0.00242 - 31 0.0019 - 32 0.0775 - 33 0.106 - 34 0.000288 - 35 0.000634 - 37 0.00121 - 39 0.000288 - 40 0.0313 - 41 0.021 - 42 0.00334 - 43 0.000346 - 44 0.000865 - 45 0.00346 - 46 0.000461 - - 20 22 10 0 - 0 0.136 - 1 0.0909 - 13 0.0909 - 15 0.0455 - 21 0.0455 - 30 0.364 - 40 0.0455 - 41 0.0909 - 42 0.0455 - 43 0.0455 - - 21 515 31 0 - 0 0.0641 - 2 0.0272 - 3 0.00388 - 4 0.0155 - 6 0.00194 - 7 0.243 - 8 0.035 - 9 0.0136 - 12 0.0155 - 13 0.0136 - 14 0.00388 - 15 0.00388 - 19 0.0194 - 21 0.0214 - 22 0.0117 - 26 0.0311 - 28 0.00388 - 29 0.00583 - 30 0.00583 - 31 0.00971 - 32 0.00583 - 33 0.0117 - 34 0.00194 - 37 0.00194 - 40 0.181 - 41 0.217 - 42 0.0214 - 43 0.00194 - 44 0.00388 - 46 0.00194 - 47 0.00194 - - 22 48 11 0 - 2 0.0625 - 7 0.521 - 8 0.0417 - 12 0.0208 - 21 0.0208 - 29 0.0208 - 31 0.0208 - 37 0.0208 - 40 0.0833 - 41 0.167 - 42 0.0208 - - 23 19 8 0 - 7 0.579 - 8 0.0526 - 19 0.0526 - 21 0.105 - 29 0.0526 - 31 0.0526 - 40 0.0526 - 41 0.0526 - - 24 8 3 0 - 7 0.5 - 40 0.25 - 41 0.25 - - 25 13 2 0 - 3 0.0769 - 42 0.923 - - 26 1 1 0 - 28 1 - - 27 4 3 0 - 40 0.5 - 42 0.25 - 46 0.25 - - 28 87 15 0 - 0 0.0115 - 2 0.0345 - 4 0.0805 - 7 0.437 - 8 0.0345 - 13 0.0115 - 15 0.0115 - 21 0.046 - 26 0.069 - 29 0.023 - 40 0.103 - 41 0.092 - 42 0.0115 - 46 0.023 - 47 0.0115 - - 29 6 5 0 - 4 0.167 - 7 0.333 - 8 0.167 - 29 0.167 - 33 0.167 - - 30 255 24 0 - 0 0.0706 - 2 0.0314 - 4 0.00784 - 7 0.435 - 8 0.0196 - 12 0.0275 - 13 0.00392 - 14 0.00392 - 19 0.00392 - 21 0.0275 - 22 0.00392 - 26 0.0314 - 29 0.0235 - 30 0.00392 - 31 0.00784 - 32 0.00392 - 33 0.0157 - 37 0.00392 - 40 0.141 - 41 0.098 - 42 0.0157 - 43 0.00392 - 44 0.00392 - 46 0.0118 - - 31 27 11 0 - 0 0.0741 - 2 0.0741 - 4 0.037 - 7 0.185 - 12 0.111 - 14 0.037 - 24 0.037 - 26 0.037 - 29 0.185 - 40 0.148 - 41 0.0741 - - 32 3 3 0 - 0 0.333 - 32 0.333 - 33 0.333 - - 33 63 17 0 - 0 0.0159 - 3 0.0476 - 4 0.175 - 7 0.127 - 8 0.0952 - 10 0.0159 - 13 0.0159 - 14 0.0317 - 19 0.0635 - 21 0.0317 - 22 0.0159 - 26 0.0952 - 30 0.0159 - 34 0.0159 - 40 0.0159 - 41 0.206 - 45 0.0159 - - 34 58 6 0 - 0 0.259 - 4 0.0172 - 12 0.379 - 21 0.0345 - 29 0.19 - 33 0.121 - - 35 6 4 0 - 0 0.333 - 26 0.167 - 40 0.333 - 41 0.167 - - 40 975 10 0 - 0 0.00103 - 12 0.00103 - 15 0.00615 - 21 0.00103 - 26 0.00103 - 43 0.0677 - 44 0.0513 - 45 0.00103 - 46 0.00308 - 47 0.867 - - 41 4997 30 0 - 0 0.238 - 2 0.0332 - 3 0.0014 - 4 0.0254 - 7 0.0903 - 8 0.0054 - 9 0.0004 - 10 0.0002 - 12 0.064 - 13 0.00981 - 14 0.0036 - 15 0.00961 - 19 0.003 - 21 0.0476 - 22 0.0006 - 23 0.0002 - 26 0.0272 - 28 0.0012 - 29 0.288 - 30 0.00901 - 31 0.0124 - 32 0.013 - 33 0.104 - 34 0.0038 - 35 0.0012 - 36 0.0002 - 37 0.0026 - 39 0.0002 - 45 0.0042 - 46 0.0006 - - 42 330 23 0 - 0 0.115 - 2 0.0212 - 4 0.0152 - 7 0.0485 - 8 0.00303 - 12 0.0424 - 13 0.00303 - 14 0.00606 - 15 0.00606 - 19 0.00606 - 20 0.00303 - 21 0.0273 - 26 0.0121 - 28 0.00606 - 29 0.0758 - 30 0.00303 - 31 0.00606 - 32 0.0121 - 33 0.0212 - 34 0.00303 - 37 0.00606 - 45 0.00303 - 47 0.555 - - 43 92 18 0 - 0 0.0978 - 2 0.087 - 4 0.0217 - 7 0.152 - 12 0.0435 - 21 0.0217 - 26 0.0109 - 29 0.0109 - 30 0.0109 - 31 0.0109 - 32 0.0217 - 33 0.0652 - 34 0.0109 - 35 0.0109 - 40 0.13 - 41 0.12 - 42 0.109 - 47 0.0652 - - 45 4 4 0 - 0 0.25 - 2 0.25 - 7 0.25 - 32 0.25 - - 46 480 27 0 - 0 0.119 - 1 0.00208 - 2 0.0542 - 4 0.0208 - 7 0.365 - 8 0.0104 - 12 0.0292 - 13 0.00417 - 15 0.00833 - 19 0.00833 - 21 0.0396 - 26 0.0521 - 29 0.0396 - 30 0.00833 - 31 0.0292 - 32 0.00625 - 33 0.0292 - 34 0.0417 - 35 0.0125 - 37 0.0125 - 40 0.00625 - 41 0.0104 - 42 0.0333 - 43 0.00625 - 44 0.0229 - 46 0.00417 - 47 0.025 - - 48 1062 27 0 - 0 0.0546 - 2 0.032 - 4 0.000942 - 7 0.0706 - 8 0.000942 - 9 0.000942 - 12 0.0188 - 13 0.00471 - 15 0.000942 - 19 0.000942 - 21 0.00659 - 26 0.0141 - 28 0.000942 - 29 0.0753 - 30 0.000942 - 31 0.00377 - 32 0.0226 - 33 0.00847 - 34 0.000942 - 37 0.00282 - 40 0.469 - 41 0.171 - 42 0.032 - 43 0.000942 - 44 0.000942 - 45 0.00282 - 46 0.000942 - - 49 817 24 0 - 0 0.0673 - 2 0.0171 - 4 0.00367 - 7 0.0355 - 8 0.00245 - 12 0.00857 - 15 0.00122 - 21 0.00857 - 22 0.00122 - 26 0.0122 - 28 0.00245 - 29 0.0257 - 30 0.00367 - 31 0.00122 - 32 0.0147 - 33 0.00612 - 34 0.00122 - 40 0.518 - 41 0.179 - 42 0.071 - 44 0.00122 - 45 0.00367 - 46 0.00245 - 47 0.0122 - - 51 8 5 0 - 2 0.125 - 33 0.125 - 40 0.25 - 41 0.125 - 47 0.375 - - 54 7 4 0 - 0 0.143 - 13 0.143 - 40 0.429 - 41 0.286 - - 55 13149 39 0 - 0 0.0396 - 2 0.00867 - 3 0.00205 - 4 0.0054 - 5 7.61e-05 - 6 0.000152 - 7 0.0588 - 8 0.00342 - 9 0.000456 - 12 0.0129 - 13 0.000913 - 14 0.000152 - 15 0.000913 - 19 0.000532 - 20 0.000152 - 21 0.00829 - 22 0.000456 - 23 7.61e-05 - 24 0.000152 - 25 0.000152 - 26 0.013 - 28 0.000989 - 29 0.0295 - 30 0.00205 - 31 0.0035 - 32 0.0103 - 33 0.00464 - 34 0.00243 - 35 0.000913 - 36 7.61e-05 - 37 0.000608 - 40 0.508 - 41 0.208 - 42 0.0503 - 43 0.00973 - 44 0.00106 - 45 0.000913 - 46 0.00122 - 47 0.01 - - 56 409 24 0 - 0 0.0513 - 2 0.0122 - 3 0.00244 - 4 0.00978 - 7 0.174 - 8 0.00244 - 12 0.0269 - 14 0.00244 - 21 0.00489 - 26 0.0171 - 28 0.00244 - 29 0.0147 - 30 0.00733 - 31 0.00978 - 32 0.0269 - 33 0.00489 - 34 0.0122 - 35 0.00978 - 39 0.00244 - 40 0.35 - 41 0.237 - 42 0.0122 - 44 0.00244 - 46 0.00489 - - 57 38167 39 0 - 0 0.0755 - 1 0.000105 - 2 0.0403 - 3 0.00055 - 4 0.0043 - 5 0.000131 - 6 2.62e-05 - 7 0.0629 - 8 0.00333 - 9 0.000131 - 12 0.0243 - 13 0.0021 - 14 0.000812 - 15 0.0017 - 19 0.00102 - 20 2.62e-05 - 21 0.0137 - 22 0.000786 - 23 2.62e-05 - 24 7.86e-05 - 26 0.0196 - 28 0.000891 - 29 0.0437 - 30 0.00424 - 31 0.00383 - 32 0.0103 - 33 0.0117 - 34 0.00113 - 35 0.00055 - 37 0.00186 - 39 0.000131 - 40 0.432 - 41 0.205 - 42 0.0232 - 43 0.0022 - 44 0.00191 - 45 0.00176 - 46 0.0027 - 47 0.00144 - - 58 873 28 0 - 0 0.123 - 2 0.0767 - 3 0.0115 - 4 0.0275 - 7 0.139 - 8 0.00229 - 12 0.0401 - 13 0.00229 - 14 0.00344 - 15 0.00229 - 19 0.00458 - 20 0.00115 - 21 0.0229 - 26 0.0321 - 28 0.00229 - 29 0.0527 - 30 0.00344 - 31 0.00229 - 32 0.0275 - 33 0.0367 - 34 0.00458 - 35 0.00229 - 39 0.00115 - 40 0.181 - 41 0.136 - 42 0.0504 - 45 0.00115 - 47 0.0103 - - 60 5584 31 0 - 0 0.00985 - 2 0.0177 - 3 0.00681 - 4 0.0518 - 7 0.358 - 8 0.00734 - 9 0.00412 - 12 0.00304 - 13 0.00358 - 14 0.000179 - 15 0.00304 - 19 0.00125 - 20 0.000179 - 21 0.00591 - 22 0.000179 - 25 0.000179 - 26 0.0566 - 29 0.00304 - 30 0.00251 - 31 0.0077 - 34 0.000895 - 35 0.000537 - 37 0.000179 - 40 0.186 - 41 0.219 - 42 0.0136 - 43 0.0279 - 44 0.00663 - 45 0.000358 - 46 0.000179 - 47 0.00125 - - 61 29 6 0 - 0 0.0345 - 29 0.0345 - 33 0.0345 - 40 0.69 - 41 0.138 - 42 0.069 - - 62 1522 28 0 - 0 0.0453 - 2 0.0191 - 3 0.000657 - 4 0.00197 - 7 0.0315 - 8 0.000657 - 12 0.021 - 15 0.00131 - 19 0.000657 - 21 0.00788 - 22 0.00131 - 26 0.00197 - 28 0.000657 - 29 0.0177 - 30 0.000657 - 31 0.00131 - 32 0.00263 - 33 0.00986 - 34 0.000657 - 37 0.00131 - 40 0.633 - 41 0.171 - 42 0.0138 - 43 0.00329 - 44 0.000657 - 45 0.00197 - 46 0.00263 - 47 0.00526 - - 64 8611 29 0 - 0 0.046 - 2 0.0135 - 4 0.00105 - 7 0.0108 - 12 0.017 - 13 0.000465 - 14 0.000116 - 15 0.000232 - 19 0.000929 - 20 0.000116 - 21 0.0043 - 22 0.000348 - 26 0.00325 - 28 0.000697 - 29 0.00975 - 30 0.000813 - 31 0.000581 - 32 0.00499 - 33 0.00325 - 34 0.000116 - 37 0.000232 - 40 0.694 - 41 0.157 - 42 0.0238 - 43 0.00151 - 44 0.00151 - 45 0.00128 - 46 0.00116 - 47 0.00128 - - 65 8 3 0 - 40 0.5 - 46 0.125 - 47 0.375 - - 67 4 4 0 - 40 0.25 - 42 0.25 - 46 0.25 - 47 0.25 - - 68 65 9 0 - 0 0.0308 - 2 0.0308 - 7 0.0769 - 26 0.0308 - 29 0.0308 - 32 0.0462 - 40 0.631 - 41 0.0769 - 42 0.0462 - - 69 4185 30 0 - 0 0.0712 - 2 0.0229 - 3 0.000239 - 4 0.00191 - 7 0.0244 - 8 0.000478 - 12 0.0318 - 13 0.000478 - 15 0.000239 - 21 0.00956 - 22 0.000956 - 26 0.00789 - 28 0.00119 - 29 0.037 - 30 0.00119 - 31 0.0043 - 32 0.0148 - 33 0.0103 - 34 0.000478 - 35 0.000239 - 37 0.000478 - 39 0.000239 - 40 0.542 - 41 0.18 - 42 0.0277 - 43 0.00335 - 44 0.00119 - 45 0.000717 - 46 0.00119 - 47 0.00215 - - 73 3 3 0 - 0 0.333 - 32 0.333 - 41 0.333 - - 74 13 5 0 - 0 0.0769 - 26 0.0769 - 40 0.154 - 41 0.0769 - 47 0.615 - - 48 1396 29 9 - 0 0.0415 - 2 0.0244 - 4 0.00143 - 7 0.0752 - 8 0.00143 - 9 0.00645 - 12 0.0143 - 13 0.0043 - 15 0.000716 - 19 0.00143 - 21 0.00716 - 26 0.0186 - 28 0.00143 - 29 0.0573 - 30 0.00215 - 31 0.00716 - 32 0.0172 - 33 0.00716 - 34 0.00143 - 35 0.000716 - 37 0.00215 - 39 0.0043 - 40 0.362 - 41 0.304 - 42 0.0279 - 43 0.00143 - 44 0.00215 - 45 0.00287 - 46 0.00143 - - 0 1 1 0 - 44 1 - - 4 66 14 0 - 0 0.0455 - 2 0.0152 - 7 0.379 - 8 0.0152 - 12 0.0152 - 13 0.0152 - 19 0.0152 - 26 0.0455 - 29 0.0152 - 30 0.0152 - 39 0.0909 - 40 0.152 - 41 0.136 - 42 0.0455 - - 41 264 6 0 - 2 0.00379 - 7 0.00758 - 26 0.0114 - 40 0.261 - 41 0.705 - 42 0.0114 - - 42 18 3 0 - 40 0.667 - 41 0.0556 - 42 0.278 - - 44 1 1 0 - 43 1 - - 45 6 5 0 - 40 0.333 - 41 0.167 - 42 0.167 - 44 0.167 - 46 0.167 - - 47 19 8 0 - 2 0.0526 - 7 0.211 - 9 0.421 - 13 0.105 - 28 0.0526 - 30 0.0526 - 33 0.0526 - 40 0.0526 - - 55 951 28 0 - 0 0.0568 - 2 0.0326 - 4 0.0021 - 7 0.0747 - 8 0.00105 - 9 0.00105 - 12 0.0189 - 13 0.00315 - 15 0.00105 - 19 0.00105 - 21 0.0105 - 26 0.021 - 28 0.00105 - 29 0.0831 - 30 0.00105 - 31 0.0105 - 32 0.0252 - 33 0.00946 - 34 0.0021 - 35 0.00105 - 37 0.00315 - 40 0.396 - 41 0.209 - 42 0.0263 - 43 0.00105 - 44 0.00105 - 45 0.00421 - 46 0.00105 - - 57 51 5 0 - 7 0.0196 - 12 0.0196 - 40 0.471 - 41 0.451 - 42 0.0392 - - 49 1035 32 6 - 0 0.0531 - 1 0.000966 - 2 0.0145 - 3 0.00483 - 4 0.0386 - 7 0.0725 - 8 0.0145 - 9 0.00193 - 12 0.00676 - 13 0.0164 - 14 0.0116 - 15 0.0116 - 20 0.0029 - 21 0.00966 - 22 0.00193 - 26 0.0184 - 28 0.00193 - 29 0.0203 - 30 0.0029 - 31 0.00193 - 32 0.0116 - 33 0.00483 - 34 0.00386 - 35 0.00386 - 37 0.000966 - 40 0.411 - 41 0.184 - 42 0.058 - 44 0.000966 - 45 0.0029 - 46 0.00193 - 47 0.00966 - - 2 45 9 0 - 4 0.311 - 8 0.133 - 13 0.156 - 14 0.133 - 15 0.0667 - 20 0.0444 - 21 0.0222 - 40 0.0444 - 41 0.0889 - - 41 350 16 0 - 2 0.00286 - 3 0.0143 - 4 0.0629 - 7 0.00286 - 8 0.00857 - 9 0.00571 - 13 0.0229 - 14 0.0171 - 15 0.02 - 20 0.00286 - 21 0.00571 - 22 0.00286 - 40 0.506 - 41 0.166 - 42 0.131 - 47 0.0286 - - 42 10 5 0 - 8 0.2 - 13 0.1 - 40 0.4 - 41 0.1 - 42 0.2 - - 47 1 1 0 - 32 1 - - 55 548 26 0 - 0 0.0912 - 1 0.00182 - 2 0.0237 - 4 0.00547 - 7 0.128 - 8 0.0073 - 12 0.00912 - 13 0.00182 - 15 0.00365 - 21 0.0109 - 22 0.00182 - 26 0.031 - 28 0.00365 - 29 0.0328 - 30 0.00547 - 31 0.00365 - 32 0.0182 - 33 0.0073 - 34 0.00365 - 35 0.00547 - 37 0.00182 - 40 0.369 - 41 0.204 - 42 0.0201 - 45 0.00547 - 46 0.00365 - - 57 73 15 0 - 0 0.0685 - 2 0.0137 - 7 0.0411 - 12 0.0274 - 21 0.0137 - 26 0.0137 - 29 0.0411 - 32 0.0137 - 33 0.0137 - 34 0.0274 - 35 0.0137 - 40 0.534 - 41 0.151 - 42 0.0137 - 44 0.0137 - - 50 146 15 1 - 3 0.0342 - 4 0.384 - 8 0.144 - 9 0.0137 - 13 0.123 - 14 0.13 - 15 0.0548 - 16 0.00685 - 20 0.0411 - 21 0.0137 - 22 0.00685 - 30 0.0137 - 31 0.0137 - 39 0.00685 - 45 0.0137 - - 46 1 1 0 - 45 1 - - 51 8 5 0 - 2 0.125 - 33 0.125 - 40 0.25 - 41 0.125 - 47 0.375 - - 54 8 4 0 - 0 0.125 - 13 0.125 - 40 0.375 - 41 0.375 - - 55 92386 44 25 - 0 0.00569 - 1 0.000487 - 2 0.0599 - 3 0.0061 - 4 0.022 - 5 3.25e-05 - 6 7.58e-05 - 7 0.423 - 8 0.0122 - 9 0.000509 - 10 0.000108 - 12 0.00184 - 13 0.00187 - 14 0.000682 - 15 0.00441 - 16 3.25e-05 - 17 2.16e-05 - 19 0.00704 - 20 0.000216 - 21 0.011 - 22 0.000346 - 23 0.000152 - 24 7.58e-05 - 25 5.41e-05 - 26 0.0266 - 28 0.000162 - 29 0.0062 - 30 0.0132 - 31 0.0246 - 32 0.00149 - 33 0.000671 - 34 0.0181 - 35 0.00889 - 36 0.000563 - 37 0.00232 - 39 0.000433 - 40 0.0776 - 41 0.217 - 42 0.0281 - 43 0.00179 - 44 0.00812 - 45 0.0015 - 46 0.00279 - 47 0.00143 - - 2 6756 35 0 - 0 0.0628 - 2 0.0154 - 3 0.000148 - 4 0.00681 - 5 0.000148 - 7 0.0813 - 8 0.00488 - 9 0.000148 - 12 0.0207 - 13 0.00133 - 14 0.000888 - 15 0.000888 - 19 0.000592 - 21 0.0148 - 22 0.000444 - 23 0.000148 - 26 0.016 - 28 0.00192 - 29 0.0423 - 30 0.00355 - 31 0.00459 - 32 0.017 - 33 0.00266 - 34 0.00429 - 35 0.00148 - 36 0.000148 - 37 0.000888 - 40 0.412 - 41 0.25 - 42 0.0232 - 43 0.00192 - 44 0.00133 - 45 0.00148 - 46 0.00192 - 47 0.00178 - - 4 104 10 0 - 0 0.0192 - 2 0.865 - 3 0.00962 - 7 0.00962 - 9 0.00962 - 12 0.00962 - 21 0.00962 - 29 0.0192 - 40 0.0192 - 41 0.0288 - - 6 2 2 0 - 40 0.5 - 47 0.5 - - 7 24 7 0 - 0 0.0417 - 2 0.0417 - 29 0.0417 - 32 0.0417 - 40 0.5 - 41 0.25 - 42 0.0833 - - 8 5 4 0 - 7 0.2 - 29 0.2 - 40 0.4 - 42 0.2 - - 13 6 4 0 - 4 0.167 - 30 0.167 - 40 0.167 - 41 0.5 - - 15 8 5 0 - 2 0.125 - 7 0.125 - 29 0.125 - 41 0.5 - 42 0.125 - - 17 14 4 0 - 0 0.0714 - 2 0.714 - 40 0.143 - 41 0.0714 - - 20 4 3 0 - 12 0.25 - 40 0.5 - 41 0.25 - - 21 120 9 0 - 0 0.00833 - 2 0.0667 - 7 0.025 - 8 0.0167 - 26 0.00833 - 40 0.55 - 41 0.292 - 42 0.025 - 43 0.00833 - - 26 49 8 0 - 3 0.49 - 4 0.0408 - 7 0.102 - 8 0.0204 - 19 0.0204 - 40 0.224 - 41 0.0408 - 42 0.0612 - - 40 7 2 0 - 40 0.857 - 41 0.143 - - 41 8157 24 0 - 0 0.00356 - 2 0.114 - 4 0.000613 - 7 0.00282 - 12 0.000613 - 14 0.000245 - 20 0.000123 - 21 0.00049 - 22 0.000123 - 26 0.000613 - 29 0.00699 - 31 0.000368 - 32 0.000123 - 33 0.00331 - 34 0.000736 - 35 0.0011 - 40 0.303 - 41 0.527 - 42 0.0177 - 43 0.0116 - 44 0.00147 - 45 0.000123 - 46 0.000245 - 47 0.00368 - - 42 1360 18 0 - 0 0.00147 - 2 0.00588 - 3 0.00368 - 6 0.000735 - 7 0.00515 - 8 0.000735 - 9 0.000735 - 19 0.000735 - 25 0.00221 - 30 0.00147 - 32 0.000735 - 34 0.000735 - 40 0.561 - 41 0.0449 - 42 0.318 - 43 0.011 - 46 0.00441 - 47 0.036 - - 44 37 5 0 - 7 0.0811 - 40 0.027 - 41 0.027 - 42 0.0811 - 43 0.784 - - 45 324 10 0 - 2 0.0185 - 7 0.0494 - 21 0.00309 - 26 0.00309 - 30 0.00309 - 34 0.00309 - 40 0.133 - 41 0.327 - 42 0.00617 - 46 0.454 - - 46 65 5 0 - 7 0.0154 - 40 0.523 - 41 0.431 - 43 0.0154 - 46 0.0154 - - 47 72120 41 0 - 0 6.93e-05 - 1 0.000624 - 2 0.0597 - 3 0.00738 - 4 0.027 - 5 2.77e-05 - 6 6.93e-05 - 7 0.529 - 8 0.0149 - 9 0.000568 - 10 0.000139 - 13 0.0022 - 14 0.000749 - 15 0.00535 - 16 4.16e-05 - 17 2.77e-05 - 19 0.00892 - 20 0.00025 - 21 0.0123 - 22 0.000333 - 23 0.00018 - 24 6.93e-05 - 25 1.39e-05 - 26 0.0315 - 28 2.77e-05 - 29 0.00257 - 30 0.0164 - 31 0.0309 - 32 4.16e-05 - 33 1.39e-05 - 34 0.0226 - 35 0.0111 - 36 0.000707 - 37 0.00284 - 39 0.000527 - 40 0.000111 - 41 0.177 - 42 0.0204 - 44 0.0101 - 45 0.00176 - 46 0.00122 - - 48 4 4 0 - 0 0.25 - 2 0.25 - 12 0.25 - 40 0.25 - - 49 129 11 0 - 0 0.0155 - 2 0.093 - 4 0.00775 - 7 0.093 - 22 0.00775 - 26 0.0233 - 35 0.0155 - 37 0.00775 - 40 0.419 - 41 0.302 - 42 0.0155 - - 50 156 12 0 - 0 0.00641 - 2 0.0385 - 7 0.0449 - 12 0.00641 - 13 0.00641 - 14 0.00641 - 29 0.00641 - 31 0.00641 - 32 0.00641 - 40 0.66 - 41 0.192 - 42 0.0192 - - 55 2717 34 0 - 0 0.0184 - 2 0.0158 - 3 0.000368 - 4 0.00957 - 6 0.000368 - 7 0.119 - 8 0.00405 - 9 0.0011 - 12 0.00626 - 13 0.00147 - 15 0.00552 - 19 0.000368 - 20 0.000368 - 21 0.00589 - 22 0.0011 - 24 0.000736 - 25 0.000368 - 26 0.025 - 29 0.0118 - 30 0.00147 - 31 0.00405 - 32 0.00515 - 33 0.00552 - 34 0.00184 - 35 0.000368 - 37 0.000736 - 40 0.259 - 41 0.342 - 42 0.134 - 43 0.00331 - 44 0.000368 - 45 0.000368 - 46 0.000368 - 47 0.0144 - - 57 160 13 0 - 0 0.0375 - 2 0.0437 - 7 0.0812 - 12 0.025 - 26 0.025 - 29 0.0437 - 31 0.00625 - 32 0.0125 - 33 0.00625 - 35 0.00625 - 40 0.494 - 41 0.206 - 43 0.0125 - - 58 37 7 0 - 0 0.027 - 7 0.0811 - 40 0.541 - 41 0.216 - 42 0.0811 - 44 0.027 - 47 0.027 - - 60 8 5 0 - 2 0.125 - 7 0.125 - 21 0.125 - 39 0.25 - 40 0.375 - - 56 440 24 15 - 0 0.0477 - 2 0.0114 - 3 0.00227 - 4 0.00909 - 7 0.161 - 8 0.00227 - 12 0.025 - 14 0.00227 - 21 0.00455 - 26 0.0159 - 28 0.00227 - 29 0.0136 - 30 0.00909 - 31 0.00909 - 32 0.025 - 33 0.00455 - 34 0.0114 - 35 0.00909 - 39 0.00227 - 40 0.325 - 41 0.23 - 42 0.0114 - 44 0.00227 - 46 0.0636 - - 4 120 16 0 - 0 0.0583 - 2 0.0167 - 7 0.242 - 12 0.0667 - 14 0.00833 - 28 0.00833 - 31 0.025 - 32 0.025 - 33 0.00833 - 34 0.0167 - 35 0.00833 - 40 0.317 - 41 0.167 - 42 0.00833 - 44 0.00833 - 46 0.0167 - - 8 69 14 0 - 0 0.0725 - 3 0.0145 - 4 0.0145 - 7 0.217 - 8 0.0145 - 12 0.0145 - 21 0.0145 - 26 0.0435 - 30 0.0145 - 32 0.0145 - 34 0.0145 - 35 0.0145 - 40 0.333 - 41 0.203 - - 13 3 2 0 - 30 0.667 - 40 0.333 - - 14 11 7 0 - 2 0.0909 - 29 0.0909 - 32 0.0909 - 33 0.0909 - 40 0.364 - 41 0.182 - 46 0.0909 - - 15 14 4 0 - 0 0.143 - 7 0.0714 - 40 0.357 - 41 0.429 - - 20 36 9 0 - 0 0.0278 - 2 0.0278 - 7 0.25 - 26 0.0278 - 29 0.0556 - 32 0.0556 - 40 0.306 - 41 0.222 - 42 0.0278 - - 21 3 3 0 - 12 0.333 - 41 0.333 - 42 0.333 - - 30 2 2 0 - 0 0.5 - 34 0.5 - - 31 2 2 0 - 7 0.5 - 34 0.5 - - 34 1 1 0 - 4 1 - - 45 61 3 0 - 40 0.246 - 41 0.344 - 46 0.41 - - 48 10 6 0 - 4 0.1 - 7 0.2 - 21 0.1 - 32 0.1 - 40 0.4 - 41 0.1 - - 54 2 2 0 - 35 0.5 - 40 0.5 - - 55 75 12 0 - 0 0.0533 - 2 0.0133 - 4 0.0133 - 7 0.107 - 12 0.0133 - 26 0.0267 - 29 0.0267 - 32 0.0133 - 39 0.0133 - 40 0.347 - 41 0.36 - 42 0.0133 - - 60 14 6 0 - 7 0.214 - 30 0.0714 - 31 0.0714 - 32 0.0714 - 35 0.0714 - 40 0.5 - - 57 43057 41 14 - 0 0.0669 - 1 0.000279 - 2 0.0358 - 3 0.00065 - 4 0.00604 - 5 0.000139 - 6 4.65e-05 - 7 0.106 - 8 0.00476 - 9 0.000139 - 12 0.0216 - 13 0.00232 - 14 0.000836 - 15 0.00272 - 19 0.00183 - 20 2.32e-05 - 21 0.0136 - 22 0.000883 - 23 2.32e-05 - 24 6.97e-05 - 25 2.32e-05 - 26 0.0268 - 28 0.00079 - 29 0.039 - 30 0.00595 - 31 0.00711 - 32 0.00917 - 33 0.0104 - 34 0.0066 - 35 0.00249 - 36 2.32e-05 - 37 0.00221 - 39 0.000116 - 40 0.386 - 41 0.206 - 42 0.0223 - 43 0.00232 - 44 0.00221 - 45 0.00167 - 46 0.00318 - 47 0.00128 - - 2 4 4 0 - 4 0.25 - 15 0.25 - 40 0.25 - 41 0.25 - - 13 20 7 0 - 4 0.05 - 12 0.05 - 26 0.1 - 34 0.05 - 40 0.5 - 41 0.2 - 46 0.05 - - 41 1101 20 0 - 0 0.00363 - 2 0.00272 - 4 0.00182 - 7 0.0163 - 12 0.00182 - 15 0.000908 - 21 0.00182 - 26 0.00363 - 29 0.00636 - 31 0.00182 - 32 0.00182 - 33 0.00182 - 34 0.00182 - 40 0.554 - 41 0.378 - 42 0.0145 - 43 0.00182 - 44 0.000908 - 46 0.000908 - 47 0.00363 - - 42 51 5 0 - 7 0.0196 - 40 0.392 - 41 0.0784 - 42 0.471 - 46 0.0392 - - 44 14 2 0 - 0 0.0714 - 43 0.929 - - 45 21 5 0 - 7 0.0476 - 40 0.476 - 41 0.238 - 42 0.0952 - 46 0.143 - - 46 145 15 0 - 0 0.0345 - 2 0.0138 - 4 0.0069 - 7 0.0483 - 8 0.0069 - 21 0.0207 - 26 0.0207 - 29 0.0069 - 33 0.0069 - 34 0.0069 - 40 0.434 - 41 0.331 - 42 0.0345 - 44 0.0138 - 45 0.0138 - - 48 31 5 0 - 2 0.0323 - 7 0.226 - 40 0.419 - 41 0.29 - 42 0.0323 - - 49 43 8 0 - 0 0.0233 - 2 0.0233 - 7 0.0698 - 26 0.0465 - 29 0.0233 - 40 0.419 - 41 0.372 - 42 0.0233 - - 55 39258 41 0 - 0 0.0695 - 1 0.000306 - 2 0.0374 - 3 0.000662 - 4 0.00642 - 5 0.000153 - 6 5.09e-05 - 7 0.111 - 8 0.00497 - 9 0.000153 - 12 0.0224 - 13 0.00242 - 14 0.000917 - 15 0.00285 - 19 0.00199 - 20 2.55e-05 - 21 0.0143 - 22 0.000942 - 23 2.55e-05 - 24 7.64e-05 - 25 2.55e-05 - 26 0.0284 - 28 0.000841 - 29 0.0411 - 30 0.00629 - 31 0.00746 - 32 0.00978 - 33 0.0109 - 34 0.00693 - 35 0.0027 - 36 2.55e-05 - 37 0.00211 - 39 0.000127 - 40 0.374 - 41 0.202 - 42 0.0215 - 43 0.00201 - 44 0.00217 - 45 0.00163 - 46 0.00326 - 47 0.0012 - - 57 2232 30 0 - 0 0.06 - 2 0.0291 - 3 0.000896 - 4 0.00134 - 7 0.0824 - 8 0.00358 - 12 0.0206 - 13 0.00224 - 15 0.00134 - 19 0.000448 - 21 0.00806 - 22 0.000448 - 26 0.0116 - 28 0.000448 - 29 0.0233 - 30 0.00358 - 31 0.00448 - 32 0.00358 - 33 0.00851 - 34 0.00314 - 35 0.000448 - 37 0.00538 - 40 0.5 - 41 0.187 - 42 0.0269 - 43 0.00269 - 44 0.00314 - 45 0.00269 - 46 0.000896 - 47 0.00134 - - 58 51 12 0 - 0 0.0392 - 7 0.0784 - 21 0.0196 - 26 0.0196 - 29 0.0392 - 30 0.0196 - 31 0.0196 - 32 0.0196 - 40 0.431 - 41 0.235 - 42 0.0588 - 47 0.0196 - - 64 38 8 0 - 0 0.0789 - 8 0.0263 - 26 0.0526 - 29 0.0263 - 34 0.0263 - 40 0.474 - 41 0.237 - 42 0.0789 - - 69 41 6 0 - 0 0.0244 - 2 0.0732 - 29 0.0244 - 40 0.707 - 41 0.146 - 42 0.0244 - - 58 1135 32 9 - 0 0.0943 - 1 0.000881 - 2 0.0643 - 3 0.0106 - 4 0.037 - 7 0.157 - 8 0.00705 - 12 0.0308 - 13 0.00617 - 14 0.00352 - 15 0.00617 - 19 0.00352 - 20 0.00352 - 21 0.0194 - 26 0.0326 - 28 0.00176 - 29 0.0405 - 30 0.00529 - 31 0.00705 - 32 0.0211 - 33 0.0282 - 34 0.0167 - 35 0.00705 - 37 0.00176 - 39 0.000881 - 40 0.142 - 41 0.16 - 42 0.074 - 43 0.00176 - 44 0.000881 - 45 0.00617 - 47 0.00793 - - 2 23 9 0 - 4 0.304 - 8 0.087 - 13 0.174 - 14 0.0435 - 15 0.13 - 20 0.13 - 21 0.0435 - 30 0.0435 - 41 0.0435 - - 13 11 5 0 - 0 0.273 - 7 0.273 - 26 0.273 - 33 0.0909 - 40 0.0909 - - 15 4 4 0 - 2 0.25 - 21 0.25 - 26 0.25 - 41 0.25 - - 41 10 6 0 - 2 0.1 - 29 0.1 - 30 0.1 - 33 0.1 - 40 0.4 - 41 0.2 - - 46 32 7 0 - 0 0.125 - 4 0.0312 - 7 0.125 - 35 0.0312 - 40 0.188 - 41 0.469 - 42 0.0312 - - 55 969 32 0 - 0 0.0949 - 1 0.00103 - 2 0.066 - 3 0.00619 - 4 0.0341 - 7 0.161 - 8 0.00413 - 12 0.032 - 13 0.0031 - 14 0.0031 - 15 0.00413 - 19 0.0031 - 20 0.00103 - 21 0.0165 - 26 0.031 - 28 0.00206 - 29 0.0433 - 30 0.0031 - 31 0.00826 - 32 0.0248 - 33 0.0299 - 34 0.0186 - 35 0.00722 - 37 0.00206 - 39 0.00103 - 40 0.143 - 41 0.156 - 42 0.0826 - 43 0.00206 - 44 0.00103 - 45 0.00413 - 47 0.00929 - - 57 57 17 0 - 0 0.0877 - 2 0.0877 - 3 0.105 - 4 0.0175 - 7 0.105 - 8 0.0351 - 12 0.0351 - 21 0.0526 - 26 0.0175 - 29 0.0351 - 30 0.0175 - 33 0.0175 - 34 0.0175 - 40 0.158 - 41 0.123 - 42 0.0351 - 45 0.0526 - - 60 2 2 0 - 0 0.5 - 21 0.5 - - 64 5 4 0 - 0 0.2 - 2 0.4 - 19 0.2 - 41 0.2 - - 59 3 3 0 - 7 0.333 - 14 0.333 - 40 0.333 - - 60 5599 31 16 - 0 0.00982 - 2 0.0179 - 3 0.00679 - 4 0.0516 - 7 0.357 - 8 0.00732 - 9 0.00411 - 12 0.00304 - 13 0.00357 - 14 0.000179 - 15 0.00304 - 19 0.00125 - 20 0.000179 - 21 0.00589 - 22 0.000179 - 25 0.000179 - 26 0.0564 - 29 0.00304 - 30 0.0025 - 31 0.00768 - 34 0.000893 - 35 0.000536 - 37 0.000179 - 40 0.187 - 41 0.219 - 42 0.0136 - 43 0.0282 - 44 0.00679 - 45 0.000357 - 46 0.000179 - 47 0.00125 - - 3 11 8 0 - 0 0.182 - 2 0.0909 - 7 0.0909 - 14 0.0909 - 26 0.0909 - 29 0.0909 - 40 0.0909 - 41 0.273 - - 4 101 15 0 - 0 0.0396 - 2 0.0297 - 4 0.0891 - 7 0.564 - 8 0.0198 - 12 0.0099 - 15 0.0297 - 19 0.0198 - 21 0.0099 - 26 0.0297 - 29 0.0099 - 31 0.0891 - 40 0.0297 - 41 0.0198 - 44 0.0099 - - 8 72 10 0 - 0 0.0278 - 7 0.486 - 12 0.0139 - 13 0.0139 - 21 0.0278 - 26 0.0694 - 31 0.0139 - 40 0.125 - 41 0.208 - 44 0.0139 - - 13 49 7 0 - 4 0.0612 - 7 0.327 - 21 0.0204 - 34 0.0204 - 40 0.224 - 41 0.327 - 44 0.0204 - - 14 21 6 0 - 7 0.0476 - 19 0.0476 - 30 0.0476 - 40 0.714 - 41 0.0952 - 42 0.0476 - - 20 12 3 0 - 7 0.833 - 8 0.0833 - 40 0.0833 - - 21 8 4 0 - 4 0.125 - 7 0.5 - 40 0.25 - 42 0.125 - - 30 4 3 0 - 7 0.5 - 12 0.25 - 40 0.25 - - 31 30 8 0 - 0 0.1 - 4 0.0667 - 7 0.433 - 13 0.0333 - 26 0.0667 - 31 0.0667 - 40 0.133 - 41 0.1 - - 39 9 7 0 - 2 0.111 - 4 0.222 - 26 0.111 - 40 0.222 - 41 0.111 - 43 0.111 - 47 0.111 - - 42 1 1 0 - 47 1 - - 44 2 1 0 - 43 1 - - 47 5218 30 0 - 0 0.00824 - 2 0.0178 - 3 0.00728 - 4 0.0519 - 7 0.353 - 8 0.00709 - 9 0.00422 - 12 0.00268 - 13 0.00345 - 15 0.00268 - 19 0.000767 - 20 0.000192 - 21 0.00556 - 22 0.000192 - 25 0.000192 - 26 0.0583 - 29 0.00268 - 30 0.00249 - 31 0.00594 - 34 0.000767 - 35 0.000575 - 37 0.000192 - 40 0.186 - 41 0.226 - 42 0.0142 - 43 0.0295 - 44 0.00652 - 45 0.000383 - 46 0.000192 - 47 0.000958 - - 48 6 3 0 - 7 0.167 - 40 0.667 - 44 0.167 - - 55 34 8 0 - 0 0.0294 - 2 0.0588 - 7 0.441 - 8 0.0294 - 9 0.0294 - 29 0.0294 - 40 0.265 - 41 0.118 - - 60 16 4 0 - 4 0.0625 - 7 0.125 - 40 0.688 - 41 0.125 - - 61 43 6 0 - 0 0.0233 - 29 0.0233 - 33 0.0233 - 40 0.465 - 41 0.395 - 42 0.0698 - - 62 1601 28 11 - 0 0.0431 - 2 0.02 - 3 0.000625 - 4 0.00187 - 7 0.03 - 8 0.000625 - 12 0.02 - 15 0.00125 - 19 0.000625 - 21 0.0075 - 22 0.00125 - 26 0.00187 - 28 0.000625 - 29 0.0169 - 30 0.000625 - 31 0.00125 - 32 0.0025 - 33 0.00937 - 34 0.000625 - 37 0.00125 - 40 0.626 - 41 0.176 - 42 0.0162 - 43 0.00312 - 44 0.00125 - 45 0.00187 - 46 0.00874 - 47 0.005 - - 2 20 3 0 - 29 0.05 - 40 0.75 - 41 0.2 - - 4 2 2 0 - 40 0.5 - 43 0.5 - - 8 5 4 0 - 40 0.4 - 41 0.2 - 43 0.2 - 46 0.2 - - 13 936 26 0 - 0 0.0513 - 2 0.016 - 3 0.00107 - 4 0.00214 - 7 0.031 - 8 0.00107 - 12 0.0246 - 15 0.00107 - 19 0.00107 - 21 0.00962 - 22 0.00107 - 26 0.00321 - 28 0.00107 - 29 0.0214 - 31 0.00214 - 33 0.0118 - 34 0.00107 - 37 0.00214 - 40 0.607 - 41 0.185 - 42 0.0139 - 43 0.00107 - 44 0.00107 - 45 0.00321 - 46 0.00321 - 47 0.00321 - - 14 215 16 0 - 0 0.0698 - 2 0.0419 - 4 0.00465 - 7 0.0512 - 12 0.0279 - 15 0.00465 - 21 0.0093 - 22 0.00465 - 29 0.0233 - 30 0.00465 - 32 0.014 - 33 0.00465 - 40 0.581 - 41 0.144 - 42 0.00465 - 47 0.0093 - - 41 42 5 0 - 2 0.0714 - 40 0.548 - 41 0.333 - 42 0.0238 - 43 0.0238 - - 42 99 5 0 - 40 0.889 - 41 0.0303 - 42 0.0505 - 46 0.0101 - 47 0.0202 - - 45 38 4 0 - 40 0.553 - 41 0.184 - 42 0.0263 - 46 0.237 - - 47 8 4 0 - 12 0.25 - 33 0.125 - 40 0.5 - 47 0.125 - - 55 65 7 0 - 0 0.0154 - 2 0.0462 - 7 0.0615 - 40 0.569 - 41 0.246 - 42 0.0462 - 44 0.0154 - - 57 132 12 0 - 0 0.0303 - 2 0.00758 - 7 0.0227 - 12 0.00758 - 21 0.00758 - 29 0.00758 - 32 0.00758 - 33 0.0152 - 40 0.689 - 41 0.182 - 42 0.0152 - 43 0.00758 - - 64 9765 30 13 - 0 0.0406 - 2 0.012 - 4 0.00113 - 7 0.0138 - 8 0.000102 - 12 0.015 - 13 0.00041 - 14 0.000102 - 15 0.000307 - 19 0.000819 - 20 0.000102 - 21 0.00379 - 22 0.000307 - 26 0.00379 - 28 0.000614 - 29 0.0086 - 30 0.00102 - 31 0.000512 - 32 0.0044 - 33 0.00287 - 34 0.00041 - 37 0.000205 - 40 0.613 - 41 0.245 - 42 0.0247 - 43 0.00143 - 44 0.00164 - 45 0.00113 - 46 0.00113 - 47 0.00113 - - 2 12 3 0 - 40 0.75 - 41 0.0833 - 42 0.167 - - 8 2 2 0 - 40 0.5 - 44 0.5 - - 13 484 13 0 - 0 0.0331 - 2 0.00826 - 7 0.00413 - 12 0.0145 - 26 0.00207 - 29 0.0124 - 33 0.00826 - 40 0.731 - 41 0.157 - 42 0.0227 - 43 0.00207 - 45 0.00207 - 46 0.00207 - - 14 162 8 0 - 0 0.037 - 2 0.00617 - 12 0.00617 - 29 0.0123 - 32 0.00617 - 40 0.79 - 41 0.136 - 42 0.00617 - - 41 2797 15 0 - 0 0.00465 - 2 0.00107 - 4 0.000358 - 7 0.000358 - 12 0.000715 - 15 0.000358 - 21 0.000715 - 29 0.0025 - 33 0.000715 - 40 0.555 - 41 0.417 - 42 0.0136 - 43 0.000715 - 44 0.000358 - 47 0.00179 - - 42 55 4 0 - 40 0.545 - 41 0.0364 - 42 0.4 - 46 0.0182 - - 44 1 1 0 - 43 1 - - 46 78 5 0 - 2 0.0128 - 40 0.718 - 41 0.244 - 42 0.0128 - 44 0.0128 - - 49 18 3 0 - 22 0.0556 - 40 0.667 - 41 0.278 - - 55 5353 30 0 - 0 0.0616 - 2 0.0189 - 4 0.00187 - 7 0.023 - 8 0.000187 - 12 0.023 - 13 0.000747 - 14 0.000187 - 15 0.000374 - 19 0.00149 - 20 0.000187 - 21 0.00654 - 22 0.000187 - 26 0.00579 - 28 0.000934 - 29 0.0116 - 30 0.00187 - 31 0.000747 - 32 0.0071 - 33 0.00411 - 34 0.000747 - 37 0.000374 - 40 0.611 - 41 0.181 - 42 0.0275 - 43 0.00187 - 44 0.00205 - 45 0.00168 - 46 0.00168 - 47 0.00112 - - 57 678 15 0 - 0 0.0383 - 2 0.00885 - 7 0.0133 - 12 0.0192 - 22 0.00147 - 26 0.00737 - 28 0.00147 - 29 0.00885 - 31 0.00147 - 32 0.0059 - 40 0.715 - 41 0.15 - 42 0.0236 - 44 0.00295 - 45 0.00147 - - 58 36 4 0 - 0 0.0278 - 40 0.806 - 41 0.111 - 42 0.0556 - - 69 29 3 0 - 40 0.862 - 41 0.103 - 42 0.0345 - - 65 9 3 0 - 40 0.444 - 46 0.222 - 47 0.333 - - 67 5 4 0 - 40 0.4 - 42 0.2 - 46 0.2 - 47 0.2 - - 68 68 9 1 - 0 0.0294 - 2 0.0294 - 7 0.0882 - 26 0.0294 - 29 0.0294 - 32 0.0441 - 40 0.603 - 41 0.103 - 42 0.0441 - - 57 10 3 0 - 2 0.2 - 40 0.7 - 42 0.1 - - 69 4817 31 8 - 0 0.0619 - 2 0.0199 - 3 0.000415 - 4 0.00166 - 7 0.0309 - 8 0.00145 - 12 0.0276 - 13 0.000415 - 15 0.000208 - 21 0.0083 - 22 0.00083 - 25 0.000208 - 26 0.00851 - 28 0.00104 - 29 0.0324 - 30 0.00208 - 31 0.00415 - 32 0.0129 - 33 0.00893 - 34 0.00353 - 35 0.000623 - 37 0.000415 - 39 0.000208 - 40 0.478 - 41 0.256 - 42 0.0286 - 43 0.00332 - 44 0.00145 - 45 0.00083 - 46 0.00104 - 47 0.00187 - - 41 789 13 0 - 0 0.00634 - 2 0.00253 - 7 0.0152 - 12 0.00127 - 21 0.00127 - 26 0.00253 - 29 0.0139 - 32 0.00253 - 33 0.00634 - 40 0.326 - 41 0.597 - 42 0.0228 - 47 0.00253 - - 42 8 2 0 - 40 0.25 - 42 0.75 - - 44 2 1 0 - 43 1 - - 45 5 5 0 - 0 0.2 - 8 0.2 - 40 0.2 - 41 0.2 - 44 0.2 - - 46 31 6 0 - 0 0.0323 - 21 0.0323 - 32 0.0323 - 40 0.516 - 41 0.355 - 45 0.0323 - - 48 7 1 0 - 41 1 - - 55 3706 31 0 - 0 0.0739 - 2 0.0237 - 3 0.00054 - 4 0.00216 - 7 0.0351 - 8 0.00162 - 12 0.0351 - 13 0.00054 - 15 0.00027 - 21 0.00944 - 22 0.000809 - 25 0.00027 - 26 0.0105 - 28 0.00135 - 29 0.0364 - 30 0.0027 - 31 0.0054 - 32 0.0159 - 33 0.0103 - 34 0.00459 - 35 0.000809 - 37 0.00054 - 39 0.00027 - 40 0.502 - 41 0.188 - 42 0.0286 - 43 0.00324 - 44 0.00162 - 45 0.000809 - 46 0.00135 - 47 0.00189 - - 57 248 11 0 - 0 0.0645 - 2 0.0202 - 7 0.0282 - 12 0.00806 - 21 0.0121 - 22 0.00403 - 29 0.0403 - 40 0.597 - 41 0.185 - 42 0.0323 - 43 0.00806 - - 73 3 3 0 - 0 0.333 - 32 0.333 - 41 0.333 - - 74 16 7 0 - 0 0.0625 - 26 0.0625 - 35 0.0625 - 40 0.125 - 41 0.125 - 42 0.0625 - 47 0.5 - -56 3639 35 22 - 0 0.0231 - 2 0.288 - 3 0.00302 - 4 0.00769 - 6 0.000275 - 7 0.104 - 8 0.0445 - 9 0.0011 - 12 0.0115 - 13 0.0409 - 14 0.0168 - 15 0.0176 - 16 0.00055 - 18 0.000824 - 20 0.000275 - 21 0.0055 - 23 0.000275 - 26 0.00907 - 28 0.0011 - 29 0.00632 - 30 0.00467 - 31 0.0055 - 32 0.0121 - 33 0.00247 - 34 0.00632 - 35 0.00467 - 37 0.000275 - 39 0.0022 - 40 0.144 - 41 0.192 - 42 0.00714 - 43 0.00055 - 44 0.0118 - 45 0.0011 - 46 0.0231 - - 2 357 16 3 - 3 0.0224 - 4 0.0056 - 8 0.361 - 9 0.0112 - 13 0.325 - 14 0.0728 - 15 0.126 - 16 0.0028 - 20 0.0028 - 21 0.0196 - 23 0.0028 - 30 0.0084 - 31 0.014 - 33 0.0028 - 39 0.0112 - 45 0.0112 - - 41 17 7 0 - 8 0.118 - 13 0.412 - 14 0.0588 - 15 0.118 - 31 0.0588 - 39 0.176 - 45 0.0588 - - 46 3 1 0 - 45 1 - - 56 337 15 0 - 3 0.0237 - 4 0.00593 - 8 0.377 - 9 0.0119 - 13 0.323 - 14 0.0742 - 15 0.128 - 16 0.00297 - 20 0.00297 - 21 0.0208 - 23 0.00297 - 30 0.0089 - 31 0.0119 - 33 0.00297 - 39 0.00297 - - 3 7 5 0 - 2 0.286 - 4 0.286 - 40 0.143 - 41 0.143 - 46 0.143 - - 6 7 3 0 - 40 0.286 - 41 0.286 - 46 0.429 - - 13 392 19 8 - 0 0.0102 - 2 0.416 - 7 0.148 - 12 0.0102 - 14 0.0051 - 21 0.00255 - 26 0.0102 - 29 0.0051 - 30 0.00255 - 31 0.00255 - 32 0.0051 - 33 0.00255 - 34 0.0051 - 35 0.00255 - 39 0.00255 - 40 0.107 - 41 0.24 - 42 0.0051 - 46 0.0179 - - 3 7 5 0 - 2 0.429 - 7 0.143 - 14 0.143 - 31 0.143 - 40 0.143 - - 4 4 2 0 - 41 0.25 - 46 0.75 - - 8 107 13 0 - 0 0.00935 - 2 0.271 - 7 0.15 - 12 0.0187 - 21 0.00935 - 26 0.00935 - 29 0.00935 - 32 0.0187 - 34 0.0187 - 40 0.103 - 41 0.355 - 42 0.00935 - 46 0.0187 - - 9 1 1 0 - 42 1 - - 13 89 11 0 - 0 0.0337 - 2 0.371 - 7 0.169 - 12 0.0112 - 26 0.0112 - 29 0.0112 - 33 0.0112 - 39 0.0112 - 40 0.135 - 41 0.225 - 46 0.0112 - - 14 6 2 0 - 2 0.5 - 40 0.5 - - 30 8 3 0 - 7 0.125 - 40 0.5 - 41 0.375 - - 47 147 10 0 - 2 0.565 - 7 0.156 - 12 0.0068 - 14 0.0068 - 26 0.0136 - 30 0.0068 - 35 0.0068 - 40 0.0544 - 41 0.177 - 46 0.0068 - - 14 312 22 7 - 0 0.0353 - 2 0.385 - 4 0.00321 - 7 0.0994 - 8 0.016 - 12 0.00962 - 14 0.00321 - 21 0.00321 - 26 0.0192 - 28 0.00321 - 29 0.00641 - 30 0.00962 - 31 0.00641 - 32 0.0192 - 34 0.00962 - 35 0.00962 - 40 0.128 - 41 0.212 - 42 0.00321 - 43 0.00321 - 44 0.00641 - 46 0.00962 - - 8 75 12 0 - 0 0.0267 - 2 0.333 - 7 0.0933 - 8 0.0533 - 21 0.0133 - 26 0.04 - 28 0.0133 - 29 0.0133 - 35 0.0133 - 40 0.2 - 41 0.187 - 46 0.0133 - - 13 93 15 0 - 0 0.0753 - 2 0.312 - 4 0.0108 - 7 0.118 - 12 0.0215 - 30 0.0108 - 31 0.0215 - 32 0.0323 - 34 0.0108 - 35 0.0215 - 40 0.172 - 41 0.161 - 43 0.0108 - 44 0.0108 - 46 0.0108 - - 15 6 5 0 - 2 0.333 - 12 0.167 - 26 0.167 - 29 0.167 - 41 0.167 - - 21 3 3 0 - 2 0.333 - 7 0.333 - 14 0.333 - - 31 5 5 0 - 0 0.2 - 2 0.2 - 30 0.2 - 41 0.2 - 44 0.2 - - 45 1 1 0 - 46 1 - - 47 111 10 0 - 2 0.523 - 7 0.0721 - 8 0.00901 - 26 0.018 - 30 0.00901 - 32 0.027 - 34 0.018 - 40 0.0631 - 41 0.252 - 42 0.00901 - - 15 139 12 3 - 0 0.00719 - 2 0.266 - 7 0.0719 - 14 0.00719 - 18 0.0216 - 29 0.00719 - 32 0.0144 - 33 0.00719 - 40 0.194 - 41 0.223 - 44 0.0863 - 46 0.0935 - - 3 3 3 0 - 2 0.333 - 7 0.333 - 14 0.333 - - 15 83 9 0 - 2 0.265 - 7 0.012 - 29 0.012 - 32 0.0241 - 33 0.012 - 40 0.229 - 41 0.253 - 44 0.12 - 46 0.0723 - - 47 45 8 0 - 0 0.0222 - 2 0.244 - 7 0.178 - 18 0.0667 - 40 0.156 - 41 0.156 - 44 0.0444 - 46 0.133 - - 16 12 6 0 - 0 0.0833 - 2 0.417 - 7 0.0833 - 41 0.25 - 42 0.0833 - 46 0.0833 - - 18 3 3 0 - 0 0.333 - 7 0.333 - 12 0.333 - - 30 2 2 0 - 2 0.5 - 4 0.5 - - 33 1 1 0 - 4 1 - - 41 116 15 1 - 0 0.0172 - 2 0.155 - 3 0.00862 - 4 0.0259 - 6 0.00862 - 7 0.0172 - 8 0.138 - 13 0.267 - 14 0.19 - 15 0.103 - 16 0.00862 - 21 0.0172 - 31 0.00862 - 35 0.00862 - 46 0.0259 - - 57 3 3 0 - 0 0.333 - 21 0.333 - 46 0.333 - - 42 3 3 0 - 4 0.333 - 32 0.333 - 37 0.333 - - 45 3 1 0 - 15 1 - - 46 8 4 0 - 2 0.5 - 7 0.125 - 29 0.125 - 34 0.25 - - 47 1311 27 19 - 0 0.032 - 2 0.263 - 3 0.00153 - 4 0.00763 - 7 0.127 - 8 0.00458 - 12 0.016 - 13 0.000763 - 14 0.00381 - 15 0.00153 - 21 0.00381 - 26 0.0114 - 28 0.00153 - 29 0.00839 - 30 0.00534 - 31 0.00534 - 32 0.0168 - 33 0.00305 - 34 0.00763 - 35 0.0061 - 39 0.00153 - 40 0.2 - 41 0.222 - 42 0.00839 - 43 0.000763 - 44 0.0114 - 46 0.029 - - 2 2 2 0 - 3 0.5 - 30 0.5 - - 3 7 5 0 - 2 0.286 - 4 0.286 - 40 0.143 - 41 0.143 - 46 0.143 - - 6 7 3 0 - 40 0.286 - 41 0.286 - 46 0.429 - - 13 389 18 0 - 0 0.0103 - 2 0.419 - 7 0.147 - 12 0.0103 - 14 0.00514 - 21 0.00257 - 26 0.00771 - 29 0.00514 - 31 0.00257 - 32 0.00514 - 33 0.00257 - 34 0.00514 - 35 0.00257 - 39 0.00257 - 40 0.108 - 41 0.242 - 42 0.00514 - 46 0.018 - - 14 310 22 0 - 0 0.0355 - 2 0.387 - 4 0.00323 - 7 0.0968 - 8 0.0161 - 12 0.00968 - 14 0.00323 - 21 0.00323 - 26 0.0194 - 28 0.00323 - 29 0.00645 - 30 0.00968 - 31 0.00645 - 32 0.0194 - 34 0.00968 - 35 0.00968 - 40 0.129 - 41 0.213 - 42 0.00323 - 43 0.00323 - 44 0.00645 - 46 0.00645 - - 15 135 11 0 - 0 0.00741 - 2 0.274 - 7 0.0667 - 14 0.00741 - 29 0.00741 - 32 0.0148 - 33 0.00741 - 40 0.2 - 41 0.23 - 44 0.0889 - 46 0.0963 - - 16 12 6 0 - 0 0.0833 - 2 0.417 - 7 0.0833 - 41 0.25 - 42 0.0833 - 46 0.0833 - - 18 3 3 0 - 0 0.333 - 7 0.333 - 12 0.333 - - 30 2 2 0 - 2 0.5 - 4 0.5 - - 33 1 1 0 - 4 1 - - 41 7 5 0 - 0 0.286 - 2 0.143 - 3 0.143 - 7 0.286 - 31 0.143 - - 46 3 3 0 - 2 0.333 - 7 0.333 - 29 0.333 - - 48 4 1 0 - 40 1 - - 55 8 4 0 - 7 0.125 - 40 0.5 - 41 0.25 - 46 0.125 - - 56 346 23 0 - 0 0.0578 - 2 0.00867 - 4 0.0116 - 7 0.173 - 8 0.00289 - 12 0.0289 - 14 0.00289 - 21 0.00578 - 26 0.0173 - 28 0.00289 - 29 0.0145 - 30 0.00867 - 31 0.00867 - 32 0.0318 - 33 0.00578 - 34 0.0145 - 35 0.0116 - 39 0.00289 - 40 0.344 - 41 0.22 - 42 0.0116 - 44 0.00289 - 46 0.0116 - - 57 45 12 0 - 0 0.0222 - 2 0.0667 - 4 0.0222 - 7 0.0889 - 12 0.0667 - 13 0.0222 - 15 0.0444 - 21 0.0222 - 40 0.333 - 41 0.2 - 42 0.0222 - 46 0.0889 - - 58 13 4 0 - 2 0.308 - 40 0.308 - 41 0.231 - 42 0.154 - - 60 3 1 0 - 41 1 - - 64 5 4 0 - 0 0.2 - 40 0.4 - 41 0.2 - 46 0.2 - - 48 4 1 0 - 40 1 - - 55 20 9 1 - 2 0.05 - 7 0.35 - 29 0.05 - 31 0.05 - 34 0.05 - 40 0.2 - 41 0.1 - 42 0.1 - 46 0.05 - - 47 10 6 0 - 2 0.1 - 7 0.5 - 29 0.1 - 31 0.1 - 34 0.1 - 42 0.1 - - 56 860 23 4 - 0 0.0233 - 2 0.395 - 4 0.00698 - 7 0.11 - 8 0.00581 - 12 0.0116 - 14 0.00465 - 21 0.00349 - 26 0.0093 - 28 0.00116 - 29 0.00581 - 30 0.00349 - 31 0.00349 - 32 0.0128 - 33 0.00233 - 34 0.00581 - 35 0.00465 - 39 0.00116 - 40 0.138 - 41 0.217 - 42 0.00698 - 44 0.0163 - 46 0.0093 - - 2 351 23 0 - 0 0.057 - 2 0.0114 - 4 0.0114 - 7 0.177 - 8 0.00285 - 12 0.0285 - 14 0.0114 - 21 0.0057 - 26 0.0171 - 28 0.00285 - 29 0.0142 - 30 0.00855 - 31 0.00855 - 32 0.0313 - 33 0.0057 - 34 0.0142 - 35 0.0114 - 39 0.00285 - 40 0.328 - 41 0.225 - 42 0.0114 - 44 0.00285 - 46 0.0114 - - 41 83 2 0 - 2 0.675 - 41 0.325 - - 45 8 3 0 - 40 0.25 - 41 0.25 - 46 0.5 - - 47 414 9 0 - 2 0.676 - 4 0.00483 - 7 0.0773 - 8 0.00966 - 21 0.00242 - 26 0.00483 - 41 0.188 - 42 0.00483 - 44 0.0314 - - 57 50 12 0 - 0 0.02 - 2 0.06 - 4 0.02 - 7 0.12 - 12 0.06 - 13 0.02 - 15 0.04 - 21 0.02 - 40 0.3 - 41 0.24 - 42 0.02 - 46 0.08 - - 58 14 4 0 - 2 0.286 - 40 0.286 - 41 0.286 - 42 0.143 - - 60 3 1 0 - 41 1 - - 64 6 4 0 - 0 0.167 - 40 0.333 - 41 0.333 - 46 0.167 - -57 285122 47 41 - 0 0.025 - 1 0.000582 - 2 0.0249 - 3 0.0218 - 4 0.118 - 5 0.000179 - 6 8.77e-05 - 7 0.0779 - 8 0.0345 - 9 0.00187 - 10 0.000544 - 12 0.0081 - 13 0.0408 - 14 0.0204 - 15 0.0544 - 16 0.000593 - 17 0.000368 - 18 0.000154 - 19 0.00467 - 20 0.0129 - 21 0.012 - 22 0.000722 - 23 7.01e-05 - 24 2.1e-05 - 25 1.4e-05 - 26 0.018 - 27 7.01e-06 - 28 0.000656 - 29 0.0139 - 30 0.013 - 31 0.0035 - 32 0.00343 - 33 0.0038 - 34 0.00234 - 35 0.00156 - 36 1.05e-05 - 37 0.00221 - 38 0.000277 - 39 0.0111 - 40 0.28 - 41 0.164 - 42 0.0145 - 43 0.00169 - 44 0.00118 - 45 0.00235 - 46 0.00192 - 47 0.00108 - - 2 472 17 6 - 3 0.00847 - 4 0.0275 - 7 0.684 - 8 0.0424 - 9 0.00636 - 13 0.0169 - 14 0.0169 - 15 0.0106 - 20 0.00212 - 21 0.0826 - 22 0.00212 - 26 0.0742 - 30 0.00424 - 31 0.00424 - 39 0.00212 - 41 0.0127 - 45 0.00212 - - 3 1 1 0 - 3 1 - - 7 33 2 0 - 4 0.0606 - 7 0.939 - - 41 83 8 0 - 3 0.0241 - 4 0.012 - 7 0.602 - 21 0.253 - 22 0.012 - 26 0.0723 - 31 0.012 - 45 0.012 - - 47 56 10 0 - 3 0.0179 - 4 0.179 - 8 0.357 - 9 0.0357 - 13 0.125 - 14 0.143 - 15 0.0714 - 30 0.0357 - 31 0.0179 - 39 0.0179 - - 55 3 3 0 - 13 0.333 - 15 0.333 - 20 0.333 - - 57 280 5 0 - 7 0.807 - 9 0.00357 - 21 0.0643 - 26 0.104 - 41 0.0214 - - 6 13 5 0 - 4 0.154 - 8 0.231 - 14 0.0769 - 15 0.462 - 39 0.0769 - - 7 83957 45 12 - 0 0.000107 - 1 0.00155 - 2 0.00102 - 3 0.0553 - 4 0.345 - 5 3.57e-05 - 6 0.000226 - 7 0.0167 - 8 0.0969 - 9 0.00506 - 10 0.00163 - 12 4.76e-05 - 13 0.119 - 14 0.0601 - 15 0.16 - 16 0.00185 - 17 0.00114 - 19 0.00769 - 20 0.0394 - 21 0.0123 - 22 0.000643 - 23 0.000167 - 25 1.19e-05 - 26 0.000798 - 27 1.19e-05 - 28 0.000119 - 29 2.38e-05 - 30 0.0324 - 31 0.00273 - 32 1.19e-05 - 33 2.38e-05 - 34 0.000226 - 35 0.00219 - 36 1.19e-05 - 37 0.00157 - 38 0.000584 - 39 0.0269 - 40 0.000655 - 41 0.000691 - 42 0.000202 - 43 3.57e-05 - 44 0.00031 - 45 0.00479 - 46 0.000119 - 47 0.000191 - - 2 40 9 0 - 3 0.025 - 4 0.35 - 7 0.1 - 8 0.025 - 13 0.175 - 14 0.05 - 15 0.225 - 19 0.025 - 20 0.025 - - 4 18 7 0 - 2 0.167 - 4 0.278 - 13 0.0556 - 14 0.0556 - 15 0.278 - 20 0.111 - 40 0.0556 - - 7 356 14 0 - 3 0.00562 - 4 0.41 - 8 0.16 - 9 0.0281 - 13 0.129 - 14 0.0927 - 15 0.0365 - 20 0.0871 - 21 0.00281 - 30 0.014 - 31 0.014 - 35 0.00281 - 39 0.00281 - 45 0.014 - - 8 342 16 0 - 3 0.00292 - 4 0.146 - 7 0.00585 - 8 0.12 - 9 0.00585 - 13 0.184 - 14 0.0848 - 15 0.371 - 20 0.00292 - 21 0.00585 - 30 0.0263 - 31 0.00292 - 32 0.00292 - 37 0.00585 - 41 0.00585 - 45 0.0263 - - 21 289 21 0 - 1 0.0138 - 3 0.0346 - 4 0.301 - 7 0.0484 - 8 0.0934 - 9 0.00346 - 10 0.00346 - 13 0.111 - 14 0.0484 - 15 0.0727 - 19 0.00346 - 20 0.0381 - 21 0.0277 - 26 0.0104 - 28 0.00692 - 30 0.163 - 31 0.00346 - 35 0.00346 - 39 0.00346 - 41 0.00346 - 45 0.00692 - - 22 5 4 0 - 4 0.4 - 14 0.2 - 15 0.2 - 28 0.2 - - 44 1 1 0 - 43 1 - - 45 5 4 0 - 4 0.2 - 13 0.4 - 21 0.2 - 30 0.2 - - 47 82196 44 0 - 0 0.000109 - 1 0.0015 - 2 0.00101 - 3 0.0561 - 4 0.345 - 5 3.65e-05 - 6 0.000231 - 7 0.0161 - 8 0.0969 - 9 0.00495 - 10 0.00164 - 12 4.87e-05 - 13 0.118 - 14 0.0599 - 15 0.16 - 16 0.00189 - 17 0.00117 - 19 0.00779 - 20 0.0393 - 21 0.0123 - 22 0.000657 - 23 0.00017 - 25 1.22e-05 - 26 0.000766 - 27 1.22e-05 - 28 8.52e-05 - 29 2.43e-05 - 30 0.032 - 31 0.0027 - 33 1.22e-05 - 34 0.000231 - 35 0.0022 - 36 1.22e-05 - 37 0.00157 - 38 0.000596 - 39 0.0274 - 40 0.000657 - 41 0.000645 - 42 0.000207 - 43 2.43e-05 - 44 0.000316 - 45 0.00467 - 46 0.000109 - 47 0.000182 - - 49 561 20 0 - 1 0.00535 - 3 0.0232 - 4 0.385 - 7 0.0945 - 8 0.0731 - 9 0.00891 - 10 0.00178 - 13 0.171 - 14 0.0624 - 15 0.0838 - 19 0.00713 - 20 0.0285 - 21 0.00535 - 30 0.0357 - 33 0.00178 - 35 0.00178 - 39 0.00357 - 45 0.00357 - 46 0.00178 - 47 0.00178 - - 55 124 13 0 - 3 0.0242 - 4 0.54 - 8 0.0403 - 13 0.0968 - 14 0.00806 - 15 0.0645 - 20 0.105 - 21 0.0161 - 26 0.00806 - 30 0.0645 - 37 0.00806 - 39 0.00806 - 41 0.0161 - - 57 8 4 0 - 4 0.125 - 7 0.625 - 13 0.125 - 21 0.125 - - 8 27 13 0 - 3 0.0741 - 4 0.111 - 9 0.037 - 13 0.148 - 14 0.111 - 15 0.111 - 19 0.037 - 20 0.037 - 26 0.111 - 30 0.111 - 39 0.037 - 40 0.037 - 46 0.037 - - 13 8 4 0 - 3 0.125 - 15 0.375 - 40 0.25 - 41 0.25 - - 14 6 4 0 - 2 0.167 - 32 0.167 - 40 0.333 - 41 0.333 - - 15 12 4 0 - 4 0.25 - 14 0.0833 - 15 0.583 - 16 0.0833 - - 20 2 1 0 - 14 1 - - 21 132 17 5 - 2 0.00758 - 3 0.0227 - 4 0.0985 - 7 0.205 - 8 0.114 - 9 0.00758 - 13 0.0455 - 14 0.00758 - 15 0.0379 - 19 0.0303 - 20 0.0227 - 21 0.197 - 26 0.0455 - 30 0.053 - 31 0.0227 - 40 0.0455 - 41 0.0379 - - 2 14 2 0 - 7 0.714 - 26 0.286 - - 7 10 5 0 - 4 0.1 - 19 0.1 - 21 0.1 - 40 0.3 - 41 0.4 - - 41 14 4 0 - 7 0.786 - 21 0.0714 - 26 0.0714 - 30 0.0714 - - 47 80 15 0 - 2 0.0125 - 3 0.0375 - 4 0.138 - 7 0.05 - 8 0.162 - 9 0.0125 - 13 0.075 - 15 0.0125 - 19 0.025 - 20 0.0375 - 21 0.275 - 26 0.0125 - 30 0.075 - 31 0.0375 - 40 0.0375 - - 49 8 6 0 - 4 0.125 - 8 0.25 - 14 0.125 - 15 0.25 - 19 0.125 - 21 0.125 - - 22 2 2 0 - 8 0.5 - 14 0.5 - - 23 4 2 0 - 26 0.5 - 41 0.5 - - 24 55 14 0 - 0 0.0364 - 3 0.0545 - 4 0.145 - 7 0.182 - 8 0.0545 - 14 0.0364 - 15 0.0727 - 21 0.0364 - 26 0.145 - 30 0.0182 - 31 0.0182 - 40 0.145 - 41 0.0182 - 45 0.0364 - - 26 8661 37 4 - 0 0.000231 - 1 0.00115 - 2 0.00104 - 3 0.158 - 4 0.289 - 6 0.000231 - 7 0.00912 - 8 0.0774 - 9 0.00774 - 10 0.000577 - 13 0.0784 - 14 0.0602 - 15 0.116 - 16 0.00115 - 17 0.000808 - 19 0.0128 - 20 0.0344 - 21 0.0102 - 22 0.000693 - 23 0.000115 - 27 0.000115 - 28 0.00739 - 30 0.0172 - 31 0.00323 - 34 0.000346 - 35 0.00254 - 37 0.000693 - 38 0.00346 - 39 0.1 - 40 0.000462 - 41 0.00104 - 42 0.000115 - 43 0.000115 - 44 0.000346 - 45 0.00323 - 46 0.000115 - 47 0.000462 - - 8 12 6 0 - 4 0.417 - 8 0.0833 - 13 0.167 - 14 0.0833 - 15 0.0833 - 20 0.167 - - 21 8 4 0 - 4 0.625 - 8 0.125 - 14 0.125 - 31 0.125 - - 41 1 1 0 - 28 1 - - 49 36 8 0 - 3 0.0278 - 4 0.556 - 8 0.111 - 9 0.111 - 13 0.0833 - 14 0.0278 - 15 0.0278 - 20 0.0556 - - 28 2 2 0 - 4 0.5 - 37 0.5 - - 29 2 1 0 - 4 1 - - 30 613 21 0 - 3 0.0375 - 4 0.401 - 7 0.00489 - 8 0.106 - 9 0.00816 - 13 0.116 - 14 0.0571 - 15 0.166 - 16 0.00163 - 19 0.00163 - 20 0.0277 - 21 0.00326 - 22 0.00163 - 25 0.00163 - 30 0.0147 - 31 0.00816 - 37 0.00489 - 39 0.0245 - 41 0.00326 - 42 0.00163 - 45 0.00816 - - 31 57 10 0 - 4 0.526 - 7 0.123 - 8 0.0877 - 13 0.0175 - 15 0.0877 - 19 0.0351 - 20 0.0702 - 29 0.0175 - 30 0.0175 - 35 0.0175 - - 40 16 3 0 - 40 0.188 - 46 0.125 - 47 0.688 - - 41 284 20 7 - 0 0.0106 - 2 0.317 - 3 0.00704 - 4 0.173 - 5 0.00352 - 7 0.19 - 8 0.00704 - 13 0.00704 - 15 0.00352 - 19 0.00352 - 20 0.00352 - 21 0.148 - 22 0.00704 - 26 0.0634 - 28 0.00704 - 29 0.0106 - 34 0.00704 - 37 0.00352 - 45 0.0141 - 46 0.0141 - - 2 2 1 0 - 22 1 - - 7 7 3 0 - 21 0.286 - 28 0.286 - 45 0.429 - - 48 2 1 0 - 46 1 - - 49 6 4 0 - 2 0.167 - 4 0.167 - 7 0.5 - 34 0.167 - - 52 3 2 0 - 13 0.667 - 20 0.333 - - 55 71 12 0 - 0 0.0282 - 2 0.0423 - 4 0.62 - 5 0.0141 - 7 0.169 - 8 0.0282 - 15 0.0141 - 19 0.0141 - 21 0.0141 - 26 0.0141 - 29 0.0282 - 46 0.0141 - - 57 189 11 0 - 0 0.00529 - 2 0.45 - 3 0.0106 - 4 0.0212 - 7 0.206 - 21 0.196 - 26 0.0899 - 29 0.00529 - 34 0.00529 - 37 0.00529 - 45 0.00529 - - 42 32 10 3 - 2 0.219 - 4 0.0938 - 7 0.125 - 8 0.0312 - 13 0.0312 - 21 0.125 - 26 0.0312 - 30 0.0312 - 42 0.0312 - 47 0.281 - - 7 5 4 0 - 4 0.4 - 8 0.2 - 30 0.2 - 42 0.2 - - 55 10 2 0 - 13 0.1 - 47 0.9 - - 57 16 4 0 - 2 0.438 - 7 0.25 - 21 0.25 - 26 0.0625 - - 43 7 6 0 - 0 0.143 - 2 0.143 - 3 0.143 - 14 0.143 - 15 0.143 - 41 0.286 - - 44 4 3 0 - 4 0.25 - 15 0.5 - 21 0.25 - - 45 232 15 3 - 1 0.00862 - 3 0.00862 - 4 0.168 - 7 0.00431 - 8 0.22 - 10 0.00431 - 13 0.159 - 14 0.0517 - 15 0.241 - 19 0.00431 - 21 0.0431 - 28 0.0129 - 30 0.056 - 31 0.00431 - 35 0.0129 - - 26 17 8 0 - 3 0.0588 - 4 0.0588 - 8 0.176 - 13 0.235 - 15 0.294 - 21 0.0588 - 28 0.0588 - 30 0.0588 - - 41 2 2 0 - 10 0.5 - 15 0.5 - - 55 1 1 0 - 7 1 - - 46 72 19 4 - 0 0.0139 - 2 0.111 - 4 0.0972 - 7 0.208 - 8 0.0278 - 12 0.0278 - 13 0.0417 - 14 0.0417 - 15 0.0417 - 20 0.0139 - 21 0.0278 - 26 0.0833 - 29 0.0139 - 32 0.0139 - 33 0.0417 - 40 0.0278 - 42 0.0972 - 44 0.0139 - 47 0.0556 - - 7 10 4 0 - 4 0.4 - 14 0.3 - 15 0.2 - 20 0.1 - - 41 4 4 0 - 4 0.25 - 13 0.25 - 15 0.25 - 29 0.25 - - 55 44 14 0 - 0 0.0227 - 2 0.159 - 7 0.318 - 8 0.0455 - 12 0.0455 - 13 0.0227 - 21 0.0227 - 26 0.136 - 32 0.0227 - 33 0.0682 - 40 0.0455 - 42 0.0455 - 44 0.0227 - 47 0.0227 - - 62 2 1 0 - 42 1 - - 47 94690 45 25 - 0 0.0377 - 1 0.000127 - 2 0.0352 - 3 0.000898 - 4 0.00774 - 5 0.000253 - 6 2.11e-05 - 7 0.106 - 8 0.0044 - 9 0.000158 - 10 6.34e-05 - 12 0.0122 - 13 0.00432 - 14 0.000993 - 15 0.00449 - 16 1.06e-05 - 17 1.06e-05 - 18 0.000232 - 19 0.00299 - 20 0.00018 - 21 0.0112 - 22 0.00075 - 23 3.17e-05 - 24 3.17e-05 - 25 1.06e-05 - 26 0.0254 - 28 0.00057 - 29 0.0208 - 30 0.00416 - 31 0.00387 - 32 0.00516 - 33 0.00571 - 34 0.00339 - 35 0.00124 - 36 1.06e-05 - 37 0.00257 - 39 9.5e-05 - 40 0.421 - 41 0.245 - 42 0.0216 - 43 0.0025 - 44 0.00162 - 45 0.0012 - 46 0.00251 - 47 0.00163 - - 7 248 21 0 - 0 0.0282 - 2 0.121 - 4 0.0685 - 7 0.117 - 8 0.0242 - 12 0.0161 - 13 0.0121 - 14 0.0121 - 15 0.0121 - 20 0.00403 - 21 0.0323 - 22 0.00403 - 26 0.0323 - 29 0.00403 - 31 0.00806 - 37 0.00806 - 40 0.222 - 41 0.169 - 42 0.0363 - 43 0.00403 - 47 0.0645 - - 8 4 2 0 - 26 0.75 - 40 0.25 - - 14 6 4 0 - 2 0.167 - 32 0.167 - 40 0.333 - 41 0.333 - - 21 20 8 0 - 2 0.05 - 4 0.05 - 7 0.2 - 19 0.05 - 21 0.05 - 26 0.05 - 40 0.3 - 41 0.25 - - 23 4 2 0 - 26 0.5 - 41 0.5 - - 24 17 7 0 - 0 0.118 - 7 0.176 - 15 0.0588 - 21 0.0588 - 26 0.0588 - 40 0.471 - 41 0.0588 - - 26 38 12 0 - 0 0.0526 - 2 0.0789 - 4 0.0526 - 7 0.237 - 14 0.0263 - 15 0.0526 - 19 0.0263 - 21 0.0526 - 23 0.0263 - 40 0.105 - 41 0.184 - 47 0.105 - - 40 11 1 0 - 47 1 - - 41 27 12 0 - 0 0.111 - 2 0.0741 - 3 0.037 - 4 0.185 - 5 0.037 - 7 0.185 - 15 0.037 - 19 0.037 - 21 0.037 - 26 0.148 - 29 0.0741 - 45 0.037 - - 42 10 2 0 - 13 0.1 - 47 0.9 - - 43 4 3 0 - 0 0.25 - 2 0.25 - 41 0.5 - - 46 58 17 0 - 0 0.0172 - 2 0.138 - 4 0.0345 - 7 0.259 - 8 0.0345 - 12 0.0345 - 13 0.0172 - 15 0.0172 - 21 0.0172 - 26 0.103 - 29 0.0172 - 32 0.0172 - 33 0.0517 - 40 0.0345 - 42 0.121 - 44 0.0172 - 47 0.069 - - 48 254 23 0 - 0 0.0394 - 2 0.0394 - 4 0.0276 - 7 0.157 - 12 0.00787 - 13 0.00394 - 14 0.0157 - 15 0.00394 - 21 0.00787 - 22 0.00394 - 26 0.0394 - 29 0.00787 - 30 0.00394 - 31 0.00787 - 33 0.00394 - 37 0.00787 - 39 0.00394 - 40 0.26 - 41 0.291 - 42 0.0394 - 43 0.00394 - 45 0.0118 - 46 0.0118 - - 49 446 17 0 - 0 0.0112 - 2 0.0202 - 4 0.00897 - 7 0.0336 - 8 0.00224 - 13 0.00224 - 15 0.00673 - 19 0.00448 - 26 0.0224 - 29 0.00448 - 32 0.00224 - 33 0.00224 - 40 0.601 - 41 0.258 - 42 0.0157 - 43 0.00224 - 46 0.00224 - - 51 17 2 0 - 40 0.706 - 41 0.294 - - 55 87632 45 0 - 0 0.0392 - 1 0.000137 - 2 0.0359 - 3 0.000913 - 4 0.0077 - 5 0.000262 - 6 2.28e-05 - 7 0.111 - 8 0.0046 - 9 0.00016 - 10 6.85e-05 - 12 0.0127 - 13 0.00454 - 14 0.000959 - 15 0.00461 - 16 1.14e-05 - 17 1.14e-05 - 18 0.000251 - 19 0.00304 - 20 0.000183 - 21 0.0117 - 22 0.000742 - 23 2.28e-05 - 24 3.42e-05 - 25 1.14e-05 - 26 0.0265 - 28 0.000605 - 29 0.0222 - 30 0.00445 - 31 0.00404 - 32 0.00544 - 33 0.00598 - 34 0.00358 - 35 0.0013 - 36 1.14e-05 - 37 0.00261 - 39 9.13e-05 - 40 0.408 - 41 0.246 - 42 0.0216 - 43 0.00251 - 44 0.00163 - 45 0.00118 - 46 0.00252 - 47 0.00106 - - 57 2302 31 0 - 0 0.0122 - 2 0.0187 - 3 0.0013 - 4 0.00608 - 7 0.0478 - 8 0.0013 - 9 0.000434 - 12 0.00348 - 13 0.00174 - 14 0.000869 - 15 0.00348 - 19 0.00174 - 21 0.00608 - 22 0.0013 - 26 0.0113 - 29 0.00521 - 30 0.000434 - 31 0.00174 - 32 0.00217 - 33 0.000869 - 34 0.000434 - 35 0.0013 - 37 0.00217 - 40 0.595 - 41 0.241 - 42 0.0204 - 43 0.00304 - 44 0.00174 - 45 0.000869 - 46 0.00261 - 47 0.00304 - - 58 9 5 0 - 2 0.111 - 4 0.111 - 7 0.222 - 40 0.333 - 41 0.222 - - 62 3086 28 0 - 0 0.0198 - 2 0.0237 - 3 0.000324 - 4 0.00162 - 7 0.0256 - 8 0.000648 - 12 0.00713 - 15 0.000324 - 19 0.00259 - 21 0.00324 - 22 0.000324 - 26 0.00551 - 28 0.000324 - 29 0.00259 - 30 0.000648 - 31 0.0013 - 32 0.000972 - 33 0.00324 - 34 0.00162 - 37 0.0013 - 40 0.631 - 41 0.239 - 42 0.0185 - 43 0.00194 - 44 0.000972 - 45 0.00162 - 46 0.00162 - 47 0.00259 - - 64 448 14 0 - 0 0.0246 - 2 0.0134 - 7 0.0246 - 12 0.00893 - 21 0.00223 - 26 0.00223 - 32 0.00223 - 34 0.00223 - 40 0.696 - 41 0.192 - 42 0.0223 - 43 0.00223 - 44 0.00446 - 46 0.00223 - - 67 1 1 0 - 46 1 - - 68 17 2 0 - 40 0.765 - 41 0.235 - - 69 14 6 0 - 0 0.0714 - 2 0.0714 - 37 0.0714 - 40 0.571 - 41 0.143 - 42 0.0714 - - 72 5 2 0 - 0 0.6 - 29 0.4 - - 74 3 2 0 - 40 0.333 - 47 0.667 - - 48 259 23 3 - 0 0.0386 - 2 0.0386 - 4 0.027 - 7 0.154 - 12 0.00772 - 13 0.00386 - 14 0.0154 - 15 0.00386 - 21 0.00772 - 22 0.00386 - 26 0.0386 - 29 0.00772 - 30 0.00386 - 31 0.00772 - 33 0.00386 - 37 0.00772 - 39 0.00386 - 40 0.255 - 41 0.293 - 42 0.0386 - 43 0.00386 - 45 0.0116 - 46 0.0232 - - 21 14 5 0 - 4 0.0714 - 7 0.0714 - 40 0.5 - 41 0.214 - 46 0.143 - - 26 22 5 0 - 7 0.5 - 14 0.0455 - 40 0.182 - 41 0.182 - 42 0.0909 - - 45 14 3 0 - 40 0.5 - 41 0.286 - 46 0.214 - - 49 475 17 5 - 0 0.0105 - 2 0.0189 - 4 0.0168 - 7 0.0674 - 8 0.00211 - 13 0.00211 - 15 0.00842 - 19 0.00421 - 26 0.0232 - 29 0.00421 - 32 0.00211 - 33 0.00211 - 40 0.564 - 41 0.255 - 42 0.0147 - 43 0.00211 - 46 0.00211 - - 2 12 3 0 - 4 0.0833 - 7 0.833 - 26 0.0833 - - 7 209 16 0 - 0 0.0191 - 2 0.0287 - 4 0.0335 - 7 0.067 - 8 0.00478 - 15 0.0144 - 19 0.00957 - 26 0.0431 - 29 0.00957 - 32 0.00478 - 33 0.00478 - 40 0.364 - 41 0.368 - 42 0.0191 - 43 0.00478 - 46 0.00478 - - 21 6 5 0 - 0 0.167 - 7 0.167 - 13 0.167 - 40 0.333 - 41 0.167 - - 41 53 4 0 - 7 0.113 - 26 0.0189 - 40 0.755 - 41 0.113 - - 55 186 5 0 - 2 0.0161 - 7 0.00538 - 40 0.785 - 41 0.177 - 42 0.0161 - - 50 38 2 0 - 7 0.842 - 26 0.158 - - 51 18 3 0 - 40 0.667 - 41 0.278 - 46 0.0556 - - 52 3 1 0 - 41 1 - - 55 88258 45 19 - 0 0.0389 - 1 0.000136 - 2 0.0356 - 3 0.000974 - 4 0.00988 - 5 0.000261 - 6 2.27e-05 - 7 0.112 - 8 0.00509 - 9 0.000159 - 10 6.8e-05 - 12 0.0126 - 13 0.00455 - 14 0.000952 - 15 0.00487 - 16 1.13e-05 - 17 1.13e-05 - 18 0.000249 - 19 0.00301 - 20 0.000181 - 21 0.0119 - 22 0.000748 - 23 2.27e-05 - 24 3.4e-05 - 25 1.13e-05 - 26 0.0263 - 28 0.000601 - 29 0.022 - 30 0.00442 - 31 0.00401 - 32 0.0054 - 33 0.00594 - 34 0.00356 - 35 0.00129 - 36 1.13e-05 - 37 0.00261 - 39 9.06e-05 - 40 0.405 - 41 0.245 - 42 0.0216 - 43 0.00253 - 44 0.00162 - 45 0.00118 - 46 0.003 - 47 0.00105 - - 2 62 11 0 - 0 0.0323 - 2 0.0161 - 7 0.0806 - 13 0.0323 - 21 0.0161 - 26 0.0161 - 40 0.258 - 41 0.435 - 42 0.0806 - 43 0.0161 - 47 0.0161 - - 6 13 6 0 - 0 0.0769 - 13 0.0769 - 15 0.0769 - 40 0.385 - 43 0.231 - 47 0.154 - - 7 78674 44 0 - 0 0.0417 - 1 0.000153 - 2 0.0359 - 3 0.000953 - 4 0.01 - 5 0.000267 - 6 2.54e-05 - 7 0.102 - 8 0.0053 - 9 0.000165 - 10 7.63e-05 - 12 0.0136 - 13 0.00469 - 14 0.00103 - 15 0.00516 - 16 1.27e-05 - 17 1.27e-05 - 18 0.00028 - 19 0.00324 - 20 0.000178 - 21 0.0122 - 22 0.000775 - 23 2.54e-05 - 24 3.81e-05 - 26 0.0278 - 28 0.000636 - 29 0.0238 - 30 0.00456 - 31 0.0044 - 32 0.00578 - 33 0.0063 - 34 0.00385 - 35 0.0014 - 36 1.27e-05 - 37 0.00253 - 39 8.9e-05 - 40 0.401 - 41 0.25 - 42 0.0215 - 43 0.00247 - 44 0.00174 - 45 0.00114 - 46 0.00262 - 47 0.00105 - - 8 16 7 0 - 2 0.0625 - 7 0.188 - 21 0.125 - 25 0.0625 - 26 0.125 - 40 0.25 - 41 0.188 - - 13 4 3 0 - 7 0.25 - 29 0.25 - 41 0.5 - - 15 11 4 0 - 40 0.273 - 41 0.364 - 42 0.0909 - 46 0.273 - - 21 54 11 0 - 2 0.111 - 4 0.0185 - 7 0.111 - 8 0.0185 - 15 0.0185 - 19 0.0185 - 26 0.0185 - 32 0.0185 - 40 0.426 - 41 0.185 - 42 0.0556 - - 24 23 7 0 - 2 0.0435 - 4 0.0435 - 7 0.13 - 13 0.0435 - 40 0.435 - 41 0.261 - 43 0.0435 - - 26 8384 35 0 - 0 0.0173 - 2 0.0354 - 3 0.00131 - 4 0.00942 - 5 0.000239 - 7 0.22 - 8 0.0037 - 9 0.000119 - 12 0.00549 - 13 0.00334 - 14 0.000358 - 15 0.00262 - 19 0.00119 - 20 0.000239 - 21 0.0099 - 22 0.000596 - 26 0.0149 - 28 0.000358 - 29 0.00704 - 30 0.0037 - 31 0.000954 - 32 0.00239 - 33 0.00322 - 34 0.00131 - 35 0.000358 - 37 0.0037 - 39 0.000119 - 40 0.433 - 41 0.191 - 42 0.0198 - 43 0.00191 - 44 0.000716 - 45 0.00143 - 46 0.00155 - 47 0.000716 - - 30 598 14 0 - 0 0.00836 - 2 0.00836 - 4 0.00167 - 7 0.0134 - 13 0.00167 - 29 0.0134 - 32 0.00167 - 33 0.00167 - 40 0.562 - 41 0.319 - 42 0.0602 - 43 0.00502 - 45 0.00167 - 47 0.00167 - - 31 45 5 0 - 2 0.0222 - 40 0.267 - 41 0.644 - 42 0.0444 - 43 0.0222 - - 41 10 2 0 - 40 0.8 - 41 0.2 - - 42 5 1 0 - 40 1 - - 44 3 1 0 - 43 1 - - 45 185 5 0 - 2 0.00541 - 7 0.00541 - 40 0.497 - 41 0.259 - 46 0.232 - - 46 12 4 0 - 7 0.0833 - 40 0.583 - 41 0.25 - 45 0.0833 - - 55 121 7 0 - 2 0.0248 - 7 0.0496 - 21 0.00826 - 40 0.736 - 41 0.165 - 42 0.00826 - 43 0.00826 - - 57 10 6 0 - 0 0.2 - 7 0.2 - 21 0.1 - 35 0.1 - 40 0.2 - 41 0.2 - - 58 15 3 0 - 29 0.0667 - 40 0.667 - 41 0.267 - - 57 3084 31 15 - 0 0.00908 - 2 0.105 - 3 0.000973 - 4 0.00681 - 7 0.0516 - 8 0.0013 - 9 0.000324 - 12 0.00259 - 13 0.00162 - 14 0.0013 - 15 0.00292 - 19 0.00162 - 21 0.0123 - 22 0.000973 - 26 0.0717 - 29 0.00389 - 30 0.000324 - 31 0.0013 - 32 0.00162 - 33 0.000649 - 34 0.000324 - 35 0.000973 - 37 0.00195 - 40 0.445 - 41 0.243 - 42 0.0211 - 43 0.00259 - 44 0.00195 - 45 0.000649 - 46 0.00227 - 47 0.00227 - - 2 354 24 0 - 0 0.00847 - 2 0.0254 - 4 0.0169 - 7 0.0508 - 12 0.00282 - 13 0.00282 - 14 0.00282 - 15 0.00282 - 19 0.00282 - 21 0.00847 - 26 0.00847 - 29 0.0169 - 31 0.00282 - 32 0.00282 - 35 0.00282 - 37 0.00282 - 40 0.621 - 41 0.169 - 42 0.0282 - 43 0.00565 - 44 0.00282 - 45 0.00565 - 46 0.00282 - 47 0.00282 - - 4 11 2 0 - 2 0.818 - 41 0.182 - - 7 619 28 0 - 0 0.0226 - 2 0.0468 - 3 0.00162 - 4 0.0162 - 7 0.0565 - 8 0.00485 - 9 0.00162 - 12 0.00808 - 13 0.00485 - 14 0.00323 - 15 0.00646 - 19 0.00485 - 21 0.0162 - 22 0.00162 - 26 0.00808 - 29 0.00969 - 30 0.00162 - 31 0.00162 - 32 0.00485 - 33 0.00162 - 35 0.00323 - 37 0.00646 - 40 0.439 - 41 0.288 - 42 0.0242 - 43 0.00646 - 46 0.00646 - 47 0.00323 - - 8 10 3 0 - 0 0.1 - 40 0.7 - 41 0.2 - - 21 90 8 0 - 2 0.111 - 3 0.0111 - 7 0.0778 - 12 0.0111 - 21 0.0111 - 40 0.444 - 41 0.322 - 46 0.0111 - - 24 12 6 0 - 2 0.0833 - 7 0.167 - 22 0.0833 - 40 0.5 - 41 0.0833 - 42 0.0833 - - 30 448 11 0 - 0 0.00223 - 3 0.00223 - 4 0.00446 - 7 0.0067 - 12 0.00223 - 15 0.0067 - 33 0.00223 - 40 0.629 - 41 0.33 - 42 0.0112 - 44 0.00223 - - 31 302 10 0 - 4 0.00331 - 7 0.00993 - 13 0.00331 - 21 0.00331 - 22 0.00331 - 40 0.788 - 41 0.172 - 42 0.00331 - 44 0.00331 - 47 0.00993 - - 41 66 5 0 - 2 0.227 - 7 0.0152 - 40 0.348 - 41 0.379 - 42 0.0303 - - 44 1 1 0 - 43 1 - - 47 644 10 0 - 2 0.354 - 4 0.00155 - 7 0.0652 - 21 0.0326 - 26 0.289 - 37 0.00155 - 41 0.225 - 42 0.0264 - 44 0.00311 - 46 0.00155 - - 49 25 7 0 - 2 0.04 - 7 0.12 - 19 0.04 - 21 0.04 - 40 0.48 - 41 0.24 - 42 0.04 - - 50 54 5 0 - 2 0.204 - 14 0.0185 - 40 0.537 - 41 0.222 - 42 0.0185 - - 55 185 10 0 - 0 0.00541 - 2 0.0378 - 7 0.151 - 8 0.00541 - 26 0.0541 - 40 0.557 - 41 0.168 - 42 0.0108 - 44 0.00541 - 47 0.00541 - - 57 241 14 0 - 0 0.0332 - 2 0.0166 - 4 0.00415 - 7 0.0705 - 15 0.00415 - 21 0.00415 - 26 0.0705 - 31 0.0083 - 32 0.00415 - 34 0.00415 - 40 0.531 - 41 0.207 - 42 0.0373 - 43 0.00415 - - 58 32 12 3 - 2 0.156 - 3 0.0625 - 4 0.156 - 7 0.0938 - 8 0.125 - 14 0.0312 - 15 0.0938 - 26 0.0625 - 30 0.0312 - 39 0.0312 - 40 0.0938 - 41 0.0625 - - 2 3 2 0 - 7 0.333 - 26 0.667 - - 7 15 9 0 - 2 0.0667 - 3 0.133 - 4 0.0667 - 8 0.2 - 14 0.0667 - 15 0.2 - 30 0.0667 - 39 0.0667 - 41 0.133 - - 57 9 3 0 - 2 0.444 - 7 0.222 - 40 0.333 - - 62 3093 28 4 - 0 0.0197 - 2 0.0236 - 3 0.000323 - 4 0.00162 - 7 0.0259 - 8 0.000647 - 12 0.00711 - 15 0.000323 - 19 0.00259 - 21 0.00323 - 22 0.000323 - 26 0.0055 - 28 0.000323 - 29 0.00259 - 30 0.000647 - 31 0.00129 - 32 0.00097 - 33 0.00323 - 34 0.00162 - 37 0.00129 - 40 0.63 - 41 0.239 - 42 0.0188 - 43 0.00194 - 44 0.00097 - 45 0.00162 - 46 0.00226 - 47 0.00259 - - 26 148 11 0 - 0 0.0135 - 2 0.0135 - 7 0.0338 - 15 0.00676 - 26 0.00676 - 29 0.00676 - 33 0.00676 - 40 0.635 - 41 0.264 - 46 0.00676 - 47 0.00676 - - 41 1 1 0 - 45 1 - - 45 22 3 0 - 40 0.682 - 41 0.227 - 46 0.0909 - - 58 1 1 0 - 12 1 - - 64 449 14 1 - 0 0.0245 - 2 0.0134 - 7 0.0245 - 12 0.00891 - 21 0.00223 - 26 0.00223 - 32 0.00223 - 34 0.00223 - 40 0.695 - 41 0.192 - 42 0.0223 - 43 0.00223 - 44 0.00445 - 46 0.00445 - - 45 2 2 0 - 40 0.5 - 46 0.5 - - 65 2 2 0 - 40 0.5 - 46 0.5 - - 67 1 1 0 - 46 1 - - 68 17 2 0 - 40 0.765 - 41 0.235 - - 69 14 6 0 - 0 0.0714 - 2 0.0714 - 37 0.0714 - 40 0.571 - 41 0.143 - 42 0.0714 - - 72 5 2 0 - 0 0.6 - 29 0.4 - - 74 4 3 0 - 40 0.25 - 46 0.25 - 47 0.5 - -58 7315 39 31 - 0 0.063 - 1 0.000547 - 2 0.0418 - 3 0.00465 - 4 0.0407 - 5 0.000957 - 7 0.0861 - 8 0.0161 - 9 0.000684 - 10 0.00109 - 12 0.0257 - 13 0.0245 - 14 0.0164 - 15 0.0215 - 16 0.000547 - 19 0.0178 - 20 0.0026 - 21 0.0178 - 22 0.000273 - 23 0.000273 - 26 0.0161 - 28 0.00602 - 29 0.0187 - 30 0.00574 - 31 0.00437 - 32 0.00916 - 33 0.0145 - 34 0.00547 - 35 0.00273 - 37 0.00191 - 39 0.000547 - 40 0.0711 - 41 0.194 - 42 0.076 - 43 0.139 - 44 0.00041 - 45 0.0428 - 46 0.00342 - 47 0.00547 - - 2 85 22 4 - 0 0.0235 - 3 0.0353 - 4 0.0824 - 5 0.0118 - 7 0.0941 - 8 0.0353 - 9 0.0118 - 12 0.0235 - 13 0.0706 - 14 0.0471 - 15 0.0118 - 19 0.0353 - 21 0.341 - 22 0.0235 - 26 0.0118 - 29 0.0118 - 30 0.0118 - 31 0.0118 - 32 0.0118 - 33 0.0235 - 41 0.0588 - 45 0.0118 - - 41 20 9 0 - 0 0.05 - 3 0.05 - 7 0.1 - 13 0.1 - 15 0.05 - 21 0.45 - 22 0.1 - 33 0.05 - 45 0.05 - - 42 31 12 0 - 3 0.0323 - 4 0.161 - 5 0.0323 - 7 0.129 - 8 0.0323 - 12 0.0323 - 13 0.0645 - 14 0.0645 - 19 0.0968 - 21 0.29 - 26 0.0323 - 32 0.0323 - - 44 22 13 0 - 0 0.0455 - 4 0.0909 - 7 0.0455 - 8 0.0455 - 12 0.0455 - 13 0.0909 - 14 0.0909 - 21 0.182 - 29 0.0455 - 30 0.0455 - 31 0.0455 - 33 0.0455 - 41 0.182 - - 47 12 6 0 - 3 0.0833 - 7 0.0833 - 8 0.0833 - 9 0.0833 - 21 0.583 - 41 0.0833 - - 4 1 1 0 - 44 1 - - 7 5 4 0 - 9 0.2 - 21 0.2 - 26 0.2 - 43 0.4 - - 8 13 3 0 - 40 0.154 - 42 0.154 - 43 0.692 - - 13 17 3 0 - 41 0.0588 - 42 0.0588 - 43 0.882 - - 14 3 1 0 - 43 1 - - 15 30 4 1 - 40 0.233 - 41 0.1 - 43 0.633 - 46 0.0333 - - 2 2 1 0 - 41 1 - - 21 13 9 0 - 4 0.385 - 7 0.0769 - 8 0.0769 - 13 0.0769 - 20 0.0769 - 26 0.0769 - 31 0.0769 - 42 0.0769 - 43 0.0769 - - 28 3 1 0 - 43 1 - - 32 2 1 0 - 42 1 - - 40 16 3 0 - 4 0.0625 - 43 0.875 - 46 0.0625 - - 41 895 30 11 - 0 0.115 - 2 0.067 - 3 0.00447 - 4 0.0983 - 5 0.00335 - 7 0.124 - 8 0.038 - 9 0.00112 - 10 0.00447 - 12 0.0503 - 13 0.0313 - 14 0.0391 - 15 0.0402 - 16 0.00223 - 19 0.0391 - 20 0.0067 - 21 0.0291 - 23 0.00112 - 26 0.019 - 28 0.0145 - 29 0.0223 - 30 0.0145 - 31 0.00447 - 32 0.0134 - 33 0.019 - 34 0.00223 - 35 0.00559 - 37 0.00335 - 45 0.184 - 46 0.00223 - - 2 5 2 0 - 7 0.8 - 21 0.2 - - 15 3 2 0 - 13 0.667 - 14 0.333 - - 48 5 4 0 - 7 0.2 - 13 0.4 - 14 0.2 - 30 0.2 - - 49 33 14 0 - 0 0.0606 - 3 0.0303 - 4 0.121 - 7 0.273 - 8 0.182 - 13 0.0303 - 15 0.0303 - 19 0.0303 - 20 0.0606 - 21 0.0303 - 26 0.0303 - 28 0.0303 - 29 0.0606 - 35 0.0303 - - 52 7 6 0 - 2 0.143 - 4 0.143 - 7 0.143 - 15 0.286 - 26 0.143 - 30 0.143 - - 55 24 12 0 - 0 0.125 - 4 0.0417 - 7 0.417 - 13 0.0417 - 14 0.0417 - 30 0.0417 - 31 0.0417 - 32 0.0833 - 34 0.0417 - 35 0.0417 - 45 0.0417 - 46 0.0417 - - 57 83 23 0 - 0 0.0723 - 2 0.0723 - 3 0.012 - 4 0.157 - 7 0.157 - 8 0.0241 - 12 0.0241 - 13 0.0843 - 14 0.012 - 15 0.0361 - 19 0.012 - 20 0.012 - 21 0.0361 - 23 0.012 - 26 0.0602 - 28 0.0241 - 29 0.0723 - 30 0.012 - 32 0.012 - 33 0.0602 - 35 0.012 - 45 0.012 - 46 0.012 - - 62 585 28 0 - 0 0.126 - 2 0.0786 - 3 0.00342 - 4 0.101 - 5 0.00513 - 7 0.0906 - 8 0.0376 - 9 0.00171 - 10 0.00513 - 12 0.0632 - 13 0.0188 - 14 0.0393 - 15 0.041 - 16 0.00342 - 19 0.0479 - 20 0.00342 - 21 0.0291 - 26 0.0103 - 28 0.012 - 29 0.0171 - 30 0.0154 - 31 0.00513 - 32 0.012 - 33 0.0154 - 34 0.00171 - 35 0.00342 - 37 0.00513 - 45 0.207 - - 64 50 15 0 - 0 0.18 - 2 0.06 - 4 0.06 - 7 0.22 - 12 0.06 - 13 0.02 - 14 0.04 - 15 0.04 - 21 0.08 - 26 0.06 - 28 0.04 - 29 0.02 - 32 0.02 - 33 0.04 - 45 0.06 - - 66 71 15 0 - 0 0.0986 - 2 0.0423 - 7 0.0986 - 8 0.0141 - 10 0.0141 - 12 0.0423 - 13 0.0141 - 14 0.0704 - 15 0.0141 - 19 0.0141 - 28 0.0141 - 29 0.0141 - 32 0.0141 - 33 0.0141 - 45 0.521 - - 69 24 11 0 - 2 0.0417 - 4 0.292 - 7 0.0833 - 8 0.0833 - 13 0.0417 - 14 0.0417 - 15 0.125 - 19 0.167 - 20 0.0417 - 26 0.0417 - 45 0.0417 - - 42 358 24 11 - 0 0.182 - 2 0.0782 - 3 0.00559 - 4 0.0587 - 7 0.168 - 8 0.0196 - 12 0.0587 - 13 0.0279 - 14 0.0168 - 15 0.0251 - 19 0.0363 - 20 0.00838 - 21 0.0279 - 26 0.0503 - 28 0.014 - 29 0.0531 - 30 0.0168 - 31 0.0168 - 32 0.0307 - 33 0.0419 - 34 0.0363 - 35 0.00838 - 37 0.00559 - 45 0.014 - - 21 1 1 0 - 28 1 - - 32 2 1 0 - 4 1 - - 46 2 2 0 - 31 0.5 - 33 0.5 - - 48 14 10 0 - 0 0.143 - 2 0.0714 - 3 0.0714 - 4 0.0714 - 8 0.0714 - 13 0.143 - 14 0.0714 - 26 0.0714 - 30 0.0714 - 34 0.214 - - 49 11 6 0 - 0 0.0909 - 4 0.0909 - 7 0.455 - 12 0.0909 - 26 0.182 - 30 0.0909 - - 55 125 19 0 - 0 0.232 - 2 0.048 - 4 0.032 - 7 0.152 - 12 0.096 - 14 0.008 - 15 0.032 - 19 0.024 - 20 0.008 - 21 0.048 - 26 0.064 - 28 0.008 - 29 0.064 - 30 0.016 - 31 0.024 - 32 0.04 - 33 0.048 - 34 0.04 - 35 0.016 - - 57 68 22 0 - 0 0.206 - 2 0.0441 - 3 0.0147 - 4 0.0735 - 7 0.162 - 8 0.0294 - 12 0.0441 - 13 0.0441 - 14 0.0147 - 15 0.0294 - 19 0.0147 - 20 0.0147 - 21 0.0294 - 26 0.0294 - 28 0.0147 - 29 0.0735 - 30 0.0147 - 31 0.0294 - 32 0.0294 - 34 0.0441 - 37 0.0147 - 45 0.0294 - - 62 59 19 0 - 0 0.0678 - 2 0.169 - 4 0.0339 - 7 0.203 - 8 0.0508 - 12 0.0169 - 13 0.0678 - 14 0.0169 - 15 0.0339 - 19 0.0847 - 21 0.0169 - 26 0.0508 - 28 0.0169 - 29 0.0169 - 30 0.0169 - 32 0.0169 - 33 0.0678 - 34 0.0169 - 45 0.0339 - - 64 40 12 0 - 0 0.225 - 2 0.1 - 4 0.1 - 7 0.125 - 12 0.075 - 19 0.075 - 26 0.05 - 29 0.075 - 32 0.05 - 33 0.075 - 34 0.025 - 35 0.025 - - 67 1 1 0 - 45 1 - - 69 27 14 0 - 0 0.148 - 2 0.111 - 4 0.0741 - 7 0.259 - 8 0.037 - 12 0.037 - 15 0.037 - 20 0.037 - 21 0.037 - 28 0.037 - 29 0.0741 - 32 0.037 - 33 0.037 - 37 0.037 - - 43 1007 28 21 - 0 0.0487 - 1 0.00199 - 2 0.0616 - 3 0.00993 - 4 0.0248 - 7 0.132 - 8 0.0139 - 12 0.0199 - 13 0.0457 - 14 0.0159 - 15 0.0328 - 19 0.00497 - 21 0.0119 - 26 0.0218 - 28 0.00298 - 29 0.0278 - 30 0.000993 - 31 0.00497 - 32 0.00894 - 33 0.0189 - 34 0.00497 - 35 0.00199 - 39 0.000993 - 40 0.167 - 41 0.206 - 42 0.0894 - 45 0.000993 - 47 0.0189 - - 0 2 2 0 - 13 0.5 - 31 0.5 - - 7 2 2 0 - 7 0.5 - 19 0.5 - - 8 9 3 0 - 8 0.111 - 13 0.556 - 14 0.333 - - 13 15 6 0 - 7 0.267 - 13 0.333 - 14 0.2 - 15 0.0667 - 26 0.0667 - 42 0.0667 - - 14 3 3 0 - 8 0.333 - 21 0.333 - 29 0.333 - - 15 19 6 0 - 12 0.105 - 13 0.211 - 14 0.105 - 15 0.474 - 26 0.0526 - 42 0.0526 - - 20 1 1 0 - 8 1 - - 21 1 1 0 - 8 1 - - 28 3 3 0 - 2 0.333 - 4 0.333 - 13 0.333 - - 40 14 7 0 - 2 0.0714 - 7 0.0714 - 13 0.143 - 14 0.0714 - 15 0.429 - 19 0.0714 - 47 0.143 - - 46 20 8 0 - 0 0.05 - 2 0.15 - 8 0.05 - 12 0.1 - 15 0.05 - 40 0.3 - 41 0.2 - 42 0.1 - - 48 29 7 0 - 2 0.0345 - 8 0.138 - 13 0.552 - 14 0.069 - 15 0.0345 - 40 0.069 - 41 0.103 - - 49 6 5 0 - 1 0.167 - 2 0.167 - 28 0.333 - 40 0.167 - 47 0.167 - - 51 4 3 0 - 40 0.25 - 41 0.5 - 47 0.25 - - 52 3 1 0 - 40 1 - - 54 2 2 0 - 8 0.5 - 15 0.5 - - 55 691 24 0 - 0 0.0507 - 2 0.0651 - 3 0.00289 - 4 0.0304 - 7 0.161 - 8 0.00579 - 12 0.013 - 13 0.013 - 14 0.00434 - 15 0.0188 - 21 0.0116 - 26 0.0232 - 28 0.00145 - 29 0.0347 - 30 0.00145 - 31 0.00289 - 32 0.0101 - 33 0.0232 - 34 0.00579 - 35 0.00145 - 40 0.158 - 41 0.236 - 42 0.113 - 47 0.013 - - 57 52 15 0 - 0 0.173 - 2 0.0577 - 4 0.0385 - 7 0.154 - 12 0.115 - 13 0.0192 - 19 0.0385 - 26 0.0192 - 29 0.0192 - 32 0.0192 - 34 0.0192 - 39 0.0192 - 40 0.135 - 41 0.154 - 47 0.0192 - - 62 68 17 0 - 0 0.0147 - 1 0.0147 - 2 0.0441 - 4 0.0147 - 7 0.0441 - 13 0.0147 - 19 0.0147 - 21 0.0147 - 29 0.0147 - 31 0.0147 - 33 0.0147 - 35 0.0147 - 40 0.382 - 41 0.235 - 42 0.0588 - 45 0.0147 - 47 0.0735 - - 64 23 8 0 - 0 0.13 - 2 0.087 - 7 0.087 - 12 0.0435 - 26 0.0435 - 32 0.0435 - 40 0.261 - 41 0.304 - - 69 30 11 0 - 2 0.0667 - 3 0.267 - 7 0.1 - 21 0.0667 - 26 0.0667 - 29 0.0333 - 31 0.0333 - 33 0.0667 - 40 0.133 - 41 0.0667 - 42 0.1 - - 45 37 11 0 - 0 0.135 - 2 0.0811 - 4 0.135 - 7 0.108 - 8 0.027 - 12 0.135 - 14 0.027 - 19 0.216 - 21 0.0541 - 26 0.027 - 37 0.0541 - - 46 23 3 0 - 29 0.0435 - 42 0.087 - 43 0.87 - - 47 2420 38 14 - 0 0.0946 - 1 0.000826 - 2 0.0632 - 3 0.0062 - 4 0.0583 - 5 0.00124 - 7 0.124 - 8 0.0227 - 9 0.000413 - 10 0.00165 - 12 0.0384 - 13 0.0351 - 14 0.024 - 15 0.0322 - 16 0.000826 - 19 0.026 - 20 0.00372 - 21 0.0198 - 23 0.000413 - 26 0.0236 - 28 0.00909 - 29 0.0281 - 30 0.00785 - 31 0.0062 - 32 0.0136 - 33 0.0215 - 34 0.00826 - 35 0.00413 - 37 0.00289 - 39 0.000826 - 40 0.104 - 41 0.108 - 42 0.0409 - 43 0.00165 - 44 0.000413 - 45 0.057 - 46 0.000413 - 47 0.00826 - - 41 842 30 0 - 0 0.122 - 2 0.0713 - 3 0.00356 - 4 0.102 - 5 0.00356 - 7 0.121 - 8 0.0392 - 9 0.00119 - 10 0.00475 - 12 0.0534 - 13 0.0321 - 14 0.0416 - 15 0.0428 - 16 0.00238 - 19 0.0416 - 20 0.00713 - 21 0.0297 - 23 0.00119 - 26 0.019 - 28 0.0154 - 29 0.0238 - 30 0.0143 - 31 0.00475 - 32 0.0143 - 33 0.0202 - 34 0.00238 - 35 0.00594 - 37 0.00356 - 45 0.154 - 46 0.00119 - - 42 357 24 0 - 0 0.182 - 2 0.0784 - 3 0.0056 - 4 0.0588 - 7 0.168 - 8 0.0196 - 12 0.0588 - 13 0.028 - 14 0.0168 - 15 0.0252 - 19 0.0364 - 20 0.0084 - 21 0.028 - 26 0.0504 - 28 0.014 - 29 0.0532 - 30 0.0168 - 31 0.0168 - 32 0.0308 - 33 0.042 - 34 0.0364 - 35 0.0084 - 37 0.0056 - 45 0.0112 - - 43 1006 28 0 - 0 0.0487 - 1 0.00199 - 2 0.0616 - 3 0.00994 - 4 0.0249 - 7 0.131 - 8 0.0139 - 12 0.0199 - 13 0.0457 - 14 0.0159 - 15 0.0328 - 19 0.00497 - 21 0.0119 - 26 0.0219 - 28 0.00298 - 29 0.0278 - 30 0.000994 - 31 0.00497 - 32 0.00895 - 33 0.0189 - 34 0.00497 - 35 0.00199 - 39 0.000994 - 40 0.167 - 41 0.206 - 42 0.0895 - 45 0.000994 - 47 0.0189 - - 45 36 11 0 - 0 0.139 - 2 0.0833 - 4 0.139 - 7 0.111 - 8 0.0278 - 12 0.139 - 14 0.0278 - 19 0.222 - 21 0.0278 - 26 0.0278 - 37 0.0556 - - 48 7 4 0 - 13 0.143 - 32 0.143 - 40 0.571 - 41 0.143 - - 49 9 2 0 - 40 0.889 - 41 0.111 - - 51 2 2 0 - 41 0.5 - 43 0.5 - - 55 28 4 0 - 13 0.0357 - 40 0.857 - 41 0.0714 - 43 0.0357 - - 57 30 7 0 - 0 0.0333 - 4 0.0333 - 7 0.0333 - 40 0.733 - 41 0.1 - 42 0.0333 - 44 0.0333 - - 62 71 12 0 - 0 0.0423 - 4 0.0282 - 12 0.0282 - 28 0.0141 - 33 0.0141 - 39 0.0141 - 40 0.211 - 41 0.507 - 42 0.0704 - 43 0.0282 - 45 0.0282 - 47 0.0141 - - 64 6 3 0 - 40 0.667 - 41 0.167 - 42 0.167 - - 66 15 6 0 - 0 0.2 - 19 0.133 - 40 0.133 - 41 0.4 - 42 0.0667 - 45 0.0667 - - 68 2 1 0 - 40 1 - - 69 6 3 0 - 40 0.333 - 41 0.5 - 42 0.167 - - 48 57 7 4 - 13 0.0175 - 32 0.0175 - 40 0.0702 - 41 0.105 - 42 0.246 - 43 0.509 - 46 0.0351 - - 42 11 2 0 - 32 0.0909 - 42 0.909 - - 44 24 1 0 - 43 1 - - 45 2 1 0 - 46 1 - - 49 7 4 0 - 13 0.143 - 40 0.143 - 41 0.286 - 43 0.429 - - 49 78 10 5 - 0 0.0128 - 4 0.0256 - 7 0.141 - 8 0.0256 - 9 0.0128 - 21 0.0256 - 40 0.103 - 41 0.436 - 42 0.141 - 43 0.0769 - - 2 17 9 0 - 0 0.0588 - 4 0.118 - 7 0.176 - 8 0.118 - 9 0.0588 - 21 0.118 - 40 0.176 - 41 0.118 - 42 0.0588 - - 41 39 4 0 - 7 0.128 - 40 0.0256 - 41 0.744 - 42 0.103 - - 42 8 3 0 - 7 0.125 - 40 0.125 - 42 0.75 - - 44 6 1 0 - 43 1 - - 49 5 2 0 - 40 0.6 - 41 0.4 - - 51 9 4 0 - 40 0.111 - 41 0.222 - 42 0.111 - 43 0.556 - - 52 11 3 0 - 40 0.0909 - 41 0.636 - 43 0.273 - - 54 3 2 0 - 42 0.333 - 43 0.667 - - 55 884 7 8 - 7 0.00226 - 13 0.00113 - 40 0.0305 - 41 0.0294 - 42 0.141 - 43 0.783 - 46 0.0124 - - 2 18 4 0 - 40 0.167 - 41 0.167 - 42 0.444 - 43 0.222 - - 21 6 4 0 - 40 0.333 - 41 0.333 - 42 0.167 - 43 0.167 - - 41 106 6 0 - 7 0.00943 - 13 0.00943 - 40 0.0566 - 41 0.0472 - 42 0.0377 - 43 0.84 - - 42 115 4 0 - 40 0.0696 - 41 0.0261 - 42 0.878 - 43 0.0261 - - 44 585 2 0 - 41 0.00342 - 43 0.997 - - 45 13 2 0 - 41 0.154 - 46 0.846 - - 47 3 3 0 - 7 0.333 - 40 0.333 - 43 0.333 - - 49 28 4 0 - 40 0.25 - 41 0.25 - 42 0.357 - 43 0.143 - - 57 236 10 8 - 0 0.00424 - 4 0.00424 - 7 0.00424 - 19 0.00424 - 30 0.00847 - 40 0.0932 - 41 0.364 - 42 0.292 - 43 0.22 - 44 0.00424 - - 2 7 4 0 - 19 0.143 - 30 0.286 - 40 0.429 - 42 0.143 - - 21 2 1 0 - 40 1 - - 41 82 4 0 - 40 0.0488 - 41 0.878 - 42 0.0366 - 43 0.0366 - - 42 68 3 0 - 7 0.0147 - 40 0.0588 - 42 0.926 - - 43 1 1 0 - 0 1 - - 44 49 1 0 - 43 1 - - 47 9 4 0 - 4 0.111 - 40 0.222 - 41 0.556 - 44 0.111 - - 49 11 3 0 - 40 0.455 - 41 0.455 - 42 0.0909 - - 58 4 3 0 - 8 0.25 - 41 0.25 - 43 0.5 - - 62 789 13 7 - 0 0.0038 - 4 0.00253 - 12 0.00253 - 28 0.00127 - 33 0.00127 - 39 0.00127 - 40 0.0203 - 41 0.787 - 42 0.0811 - 43 0.0887 - 45 0.00253 - 46 0.00634 - 47 0.00127 - - 2 13 4 0 - 40 0.0769 - 41 0.0769 - 42 0.615 - 43 0.231 - - 41 507 6 0 - 0 0.00197 - 39 0.00197 - 40 0.00789 - 41 0.98 - 42 0.00592 - 43 0.00197 - - 42 62 5 0 - 4 0.0161 - 40 0.129 - 42 0.806 - 43 0.0323 - 47 0.0161 - - 44 64 2 0 - 40 0.0156 - 43 0.984 - - 45 6 2 0 - 41 0.167 - 46 0.833 - - 46 66 3 0 - 4 0.0152 - 41 0.97 - 45 0.0152 - - 47 69 9 0 - 0 0.029 - 12 0.029 - 28 0.0145 - 33 0.0145 - 40 0.0145 - 41 0.841 - 42 0.029 - 43 0.0145 - 45 0.0145 - - 64 119 4 3 - 40 0.0336 - 41 0.429 - 42 0.345 - 43 0.193 - - 41 51 3 0 - 40 0.0392 - 41 0.941 - 42 0.0196 - - 42 38 2 0 - 40 0.0263 - 42 0.974 - - 44 23 1 0 - 43 1 - - 66 86 6 1 - 0 0.0349 - 19 0.0233 - 40 0.0233 - 41 0.895 - 42 0.0116 - 45 0.0116 - - 47 12 4 0 - 0 0.0833 - 19 0.167 - 40 0.167 - 41 0.583 - - 67 7 4 0 - 40 0.286 - 42 0.143 - 43 0.286 - 46 0.286 - - 68 4 2 0 - 40 0.5 - 42 0.5 - - 69 87 4 3 - 40 0.023 - 41 0.31 - 42 0.322 - 43 0.345 - - 42 15 1 0 - 42 1 - - 44 25 1 0 - 43 1 - - 55 25 2 0 - 41 0.96 - 42 0.04 - -59 5284 34 6 - 0 0.00151 - 1 0.00114 - 2 0.0151 - 3 0.0178 - 4 0.211 - 7 0.239 - 8 0.0503 - 9 0.00492 - 10 0.00265 - 12 0.000379 - 13 0.0492 - 14 0.0462 - 15 0.0235 - 17 0.00114 - 19 0.000757 - 20 0.0526 - 21 0.0488 - 22 0.00454 - 24 0.00114 - 26 0.0462 - 30 0.0163 - 31 0.00189 - 35 0.00568 - 37 0.00492 - 38 0.000757 - 39 0.00871 - 40 0.0765 - 41 0.05 - 42 0.00568 - 43 0.000757 - 44 0.000379 - 45 0.00454 - 46 0.0053 - 47 0.000379 - - 7 65 7 0 - 2 0.0615 - 8 0.0154 - 21 0.0154 - 40 0.523 - 41 0.308 - 42 0.0615 - 43 0.0154 - - 8 6 3 0 - 3 0.167 - 7 0.667 - 14 0.167 - - 21 84 9 0 - 0 0.0119 - 2 0.143 - 7 0.0833 - 8 0.0119 - 26 0.0119 - 40 0.464 - 41 0.214 - 42 0.0476 - 47 0.0119 - - 22 1 1 0 - 24 1 - - 24 2481 33 0 - 0 0.00121 - 1 0.00121 - 2 0.00967 - 3 0.0185 - 4 0.225 - 7 0.25 - 8 0.0528 - 9 0.00524 - 10 0.00282 - 12 0.000403 - 13 0.052 - 14 0.0484 - 15 0.025 - 17 0.00121 - 19 0.000806 - 20 0.056 - 21 0.0512 - 22 0.00484 - 24 0.000806 - 26 0.0488 - 30 0.0173 - 31 0.00202 - 35 0.00605 - 37 0.00524 - 38 0.000806 - 39 0.00927 - 40 0.0516 - 41 0.0379 - 42 0.00282 - 43 0.000403 - 44 0.000403 - 45 0.00484 - 46 0.00564 - - 47 2642 34 5 - 0 0.00151 - 1 0.00114 - 2 0.0151 - 3 0.0178 - 4 0.211 - 7 0.239 - 8 0.0503 - 9 0.00492 - 10 0.00265 - 12 0.000379 - 13 0.0492 - 14 0.0462 - 15 0.0235 - 17 0.00114 - 19 0.000757 - 20 0.0526 - 21 0.0488 - 22 0.00454 - 24 0.00114 - 26 0.0462 - 30 0.0163 - 31 0.00189 - 35 0.00568 - 37 0.00492 - 38 0.000757 - 39 0.00871 - 40 0.0765 - 41 0.05 - 42 0.00568 - 43 0.000757 - 44 0.000379 - 45 0.00454 - 46 0.0053 - 47 0.000379 - - 7 65 7 0 - 2 0.0615 - 8 0.0154 - 21 0.0154 - 40 0.523 - 41 0.308 - 42 0.0615 - 43 0.0154 - - 8 6 3 0 - 3 0.167 - 7 0.667 - 14 0.167 - - 21 84 9 0 - 0 0.0119 - 2 0.143 - 7 0.0833 - 8 0.0119 - 26 0.0119 - 40 0.464 - 41 0.214 - 42 0.0476 - 47 0.0119 - - 22 1 1 0 - 24 1 - - 24 2481 33 0 - 0 0.00121 - 1 0.00121 - 2 0.00967 - 3 0.0185 - 4 0.225 - 7 0.25 - 8 0.0528 - 9 0.00524 - 10 0.00282 - 12 0.000403 - 13 0.052 - 14 0.0484 - 15 0.025 - 17 0.00121 - 19 0.000806 - 20 0.056 - 21 0.0512 - 22 0.00484 - 24 0.000806 - 26 0.0488 - 30 0.0173 - 31 0.00202 - 35 0.00605 - 37 0.00524 - 38 0.000806 - 39 0.00927 - 40 0.0516 - 41 0.0379 - 42 0.00282 - 43 0.000403 - 44 0.000403 - 45 0.00484 - 46 0.00564 - -60 29066 33 16 - 0 0.00378 - 2 0.00932 - 3 0.35 - 4 0.0253 - 6 6.88e-05 - 7 0.139 - 8 0.0319 - 9 0.00368 - 12 0.00117 - 13 0.114 - 14 0.0974 - 15 0.0103 - 16 0.000826 - 19 0.000482 - 20 0.00131 - 21 0.0032 - 22 0.000344 - 25 6.88e-05 - 26 0.0221 - 29 0.00131 - 30 0.00124 - 31 0.00365 - 34 0.000344 - 35 0.000482 - 37 6.88e-05 - 40 0.072 - 41 0.0853 - 42 0.00523 - 43 0.012 - 44 0.0031 - 45 0.000344 - 46 0.000172 - 47 0.000482 - - 2 37 4 0 - 3 0.108 - 9 0.73 - 13 0.027 - 21 0.135 - - 3 13760 32 11 - 0 0.00363 - 2 0.00996 - 3 0.356 - 4 0.0206 - 6 7.27e-05 - 7 0.136 - 8 0.0312 - 9 0.00203 - 12 0.00124 - 13 0.115 - 14 0.0988 - 15 0.0102 - 16 0.000872 - 19 0.000436 - 20 7.27e-05 - 21 0.0024 - 22 0.000145 - 25 7.27e-05 - 26 0.0225 - 29 0.00109 - 30 0.00124 - 31 0.00356 - 34 0.000363 - 37 7.27e-05 - 40 0.0715 - 41 0.0883 - 42 0.00516 - 43 0.0126 - 44 0.00327 - 45 0.000363 - 46 7.27e-05 - 47 0.000509 - - 2 62 12 0 - 3 0.0161 - 4 0.0161 - 7 0.113 - 8 0.0323 - 13 0.0323 - 14 0.548 - 21 0.0161 - 31 0.0161 - 34 0.0161 - 40 0.0806 - 41 0.0968 - 45 0.0161 - - 3 6824 31 0 - 0 0.00659 - 2 0.0182 - 3 0.000293 - 4 0.0262 - 6 0.000147 - 7 0.257 - 8 0.0478 - 9 0.00249 - 12 0.00205 - 13 0.119 - 14 0.0928 - 15 0.0147 - 16 0.000879 - 19 0.000879 - 20 0.000147 - 21 0.0041 - 22 0.000147 - 25 0.000147 - 26 0.0441 - 29 0.00147 - 30 0.0022 - 31 0.00659 - 34 0.000586 - 40 0.137 - 41 0.174 - 42 0.00996 - 43 0.0246 - 44 0.00601 - 45 0.00044 - 46 0.000147 - 47 0.00103 - - 4 70 7 0 - 7 0.0286 - 8 0.129 - 13 0.229 - 14 0.486 - 15 0.0857 - 16 0.0286 - 41 0.0143 - - 7 732 17 0 - 0 0.00273 - 2 0.00137 - 3 0.00137 - 4 0.0041 - 7 0.0232 - 8 0.056 - 9 0.00137 - 12 0.00137 - 13 0.493 - 14 0.373 - 15 0.0246 - 29 0.00273 - 31 0.00137 - 37 0.00137 - 40 0.0082 - 41 0.00273 - 44 0.00137 - - 8 27 4 0 - 7 0.037 - 13 0.37 - 14 0.556 - 15 0.037 - - 10 120 8 0 - 7 0.0333 - 8 0.175 - 9 0.0167 - 13 0.233 - 14 0.483 - 15 0.0333 - 30 0.0167 - 40 0.00833 - - 21 513 14 0 - 0 0.00195 - 2 0.00195 - 3 0.00195 - 7 0.0253 - 8 0.0507 - 9 0.00585 - 13 0.567 - 14 0.312 - 15 0.0156 - 16 0.0039 - 29 0.0039 - 31 0.00195 - 40 0.00585 - 41 0.00195 - - 26 226 16 0 - 0 0.00885 - 2 0.00442 - 3 0.00442 - 4 0.00885 - 7 0.0221 - 8 0.0133 - 9 0.00442 - 13 0.23 - 14 0.664 - 15 0.00885 - 16 0.00885 - 21 0.00442 - 22 0.00442 - 40 0.00442 - 41 0.00442 - 42 0.00442 - - 38 5 4 0 - 9 0.2 - 40 0.4 - 41 0.2 - 44 0.2 - - 39 5169 20 0 - 2 0.00193 - 3 0.946 - 4 0.0192 - 7 0.0135 - 8 0.000193 - 9 0.00058 - 12 0.000387 - 13 0.00271 - 14 0.000387 - 15 0.000193 - 21 0.00058 - 26 0.00174 - 29 0.000193 - 31 0.000193 - 40 0.00658 - 41 0.00368 - 42 0.000387 - 43 0.00116 - 44 0.000193 - 45 0.000193 - - 41 1 1 0 - 44 1 - - 4 42 8 0 - 0 0.0238 - 3 0.0238 - 4 0.0476 - 7 0.0952 - 13 0.738 - 15 0.0238 - 35 0.0238 - 42 0.0238 - - 7 10 6 0 - 3 0.4 - 4 0.2 - 8 0.1 - 13 0.1 - 20 0.1 - 40 0.1 - - 8 58 11 2 - 4 0.069 - 7 0.276 - 8 0.0862 - 13 0.103 - 14 0.328 - 15 0.0345 - 20 0.0345 - 29 0.0172 - 31 0.0172 - 35 0.0172 - 40 0.0172 - - 4 23 5 0 - 7 0.348 - 8 0.0435 - 13 0.0435 - 14 0.522 - 29 0.0435 - - 7 12 8 0 - 4 0.167 - 7 0.0833 - 8 0.167 - 13 0.167 - 14 0.167 - 15 0.0833 - 20 0.0833 - 31 0.0833 - - 9 98 14 3 - 0 0.0102 - 2 0.0102 - 4 0.0204 - 7 0.194 - 8 0.0714 - 13 0.112 - 14 0.102 - 15 0.0204 - 19 0.0102 - 26 0.0204 - 29 0.0102 - 40 0.337 - 41 0.0612 - 42 0.0204 - - 2 78 13 0 - 0 0.0128 - 2 0.0128 - 4 0.0256 - 7 0.244 - 8 0.0513 - 13 0.0256 - 14 0.0897 - 19 0.0128 - 26 0.0256 - 29 0.0128 - 40 0.41 - 41 0.0641 - 42 0.0128 - - 3 13 7 0 - 8 0.154 - 13 0.308 - 14 0.154 - 15 0.154 - 40 0.0769 - 41 0.0769 - 42 0.0769 - - 13 4 2 0 - 13 0.75 - 14 0.25 - - 13 248 19 6 - 0 0.00403 - 2 0.0605 - 3 0.153 - 4 0.0282 - 7 0.343 - 8 0.0242 - 9 0.0282 - 13 0.0605 - 14 0.0605 - 20 0.0161 - 21 0.00806 - 26 0.0605 - 31 0.00403 - 35 0.00806 - 40 0.0927 - 41 0.0323 - 42 0.00806 - 43 0.00403 - 46 0.00403 - - 3 165 15 0 - 2 0.0667 - 3 0.218 - 4 0.0242 - 7 0.255 - 8 0.0121 - 9 0.0242 - 13 0.0848 - 14 0.0303 - 21 0.00606 - 26 0.0788 - 31 0.00606 - 40 0.127 - 41 0.0485 - 42 0.0121 - 43 0.00606 - - 4 33 8 0 - 2 0.0606 - 3 0.0606 - 7 0.394 - 8 0.121 - 9 0.0303 - 14 0.273 - 21 0.0303 - 46 0.0303 - - 7 24 8 0 - 0 0.0417 - 4 0.0833 - 7 0.5 - 13 0.0417 - 14 0.0417 - 20 0.125 - 35 0.0833 - 40 0.0833 - - 8 4 2 0 - 7 0.75 - 9 0.25 - - 21 12 3 0 - 4 0.0833 - 7 0.833 - 20 0.0833 - - 47 5 4 0 - 2 0.2 - 7 0.2 - 9 0.2 - 26 0.4 - - 14 83 17 4 - 0 0.012 - 3 0.012 - 4 0.205 - 7 0.229 - 8 0.0843 - 9 0.0723 - 13 0.0361 - 14 0.0602 - 15 0.0602 - 20 0.0482 - 21 0.0602 - 22 0.0361 - 29 0.012 - 31 0.012 - 35 0.0361 - 41 0.012 - 46 0.012 - - 3 59 14 0 - 3 0.0169 - 4 0.288 - 7 0.0339 - 8 0.119 - 9 0.0847 - 13 0.0508 - 14 0.0847 - 15 0.0678 - 20 0.0508 - 21 0.0847 - 22 0.0339 - 29 0.0169 - 31 0.0169 - 35 0.0508 - - 7 16 5 0 - 0 0.0625 - 7 0.75 - 9 0.0625 - 15 0.0625 - 46 0.0625 - - 8 3 2 0 - 7 0.667 - 22 0.333 - - 21 4 2 0 - 7 0.75 - 41 0.25 - - 17 36 2 0 - 4 0.833 - 20 0.167 - - 21 56 10 3 - 0 0.0179 - 4 0.304 - 7 0.0893 - 8 0.143 - 14 0.125 - 20 0.0179 - 21 0.0536 - 31 0.0179 - 40 0.0714 - 41 0.161 - - 2 32 8 0 - 0 0.0312 - 4 0.0625 - 7 0.125 - 8 0.125 - 14 0.219 - 21 0.0312 - 40 0.125 - 41 0.281 - - 7 12 5 0 - 4 0.417 - 7 0.0833 - 8 0.333 - 20 0.0833 - 31 0.0833 - - 21 11 2 0 - 4 0.818 - 21 0.182 - - 22 6 6 0 - 8 0.167 - 9 0.167 - 13 0.167 - 29 0.167 - 30 0.167 - 40 0.167 - - 23 1 1 0 - 21 1 - - 26 12 1 0 - 3 1 - - 28 2 1 0 - 4 1 - - 39 5169 1 0 - 3 1 - - 47 9444 33 13 - 0 0.00582 - 2 0.0125 - 3 0.00498 - 4 0.0389 - 6 0.000106 - 7 0.213 - 8 0.049 - 9 0.00402 - 12 0.0018 - 13 0.175 - 14 0.15 - 15 0.0159 - 16 0.00127 - 19 0.000741 - 20 0.00201 - 21 0.00466 - 22 0.000529 - 25 0.000106 - 26 0.0335 - 29 0.00201 - 30 0.00191 - 31 0.00561 - 34 0.000529 - 35 0.000741 - 37 0.000106 - 40 0.111 - 41 0.131 - 42 0.00805 - 43 0.0185 - 44 0.00476 - 45 0.000529 - 46 0.000212 - 47 0.000741 - - 3 8844 32 0 - 0 0.00565 - 2 0.0131 - 3 0.000905 - 4 0.0321 - 6 0.000113 - 7 0.212 - 8 0.0485 - 9 0.00317 - 12 0.00192 - 13 0.179 - 14 0.154 - 15 0.0158 - 16 0.00136 - 19 0.000678 - 20 0.000113 - 21 0.00373 - 22 0.000226 - 25 0.000113 - 26 0.0351 - 29 0.0017 - 30 0.00192 - 31 0.00554 - 34 0.000565 - 37 0.000113 - 40 0.111 - 41 0.137 - 42 0.00803 - 43 0.0197 - 44 0.00509 - 45 0.000565 - 46 0.000113 - 47 0.000791 - - 4 41 7 0 - 0 0.0244 - 4 0.0488 - 7 0.0976 - 13 0.756 - 15 0.0244 - 35 0.0244 - 42 0.0244 - - 7 3 3 0 - 4 0.333 - 20 0.333 - 40 0.333 - - 8 58 11 0 - 4 0.069 - 7 0.276 - 8 0.0862 - 13 0.103 - 14 0.328 - 15 0.0345 - 20 0.0345 - 29 0.0172 - 31 0.0172 - 35 0.0172 - 40 0.0172 - - 9 98 14 0 - 0 0.0102 - 2 0.0102 - 4 0.0204 - 7 0.194 - 8 0.0714 - 13 0.112 - 14 0.102 - 15 0.0204 - 19 0.0102 - 26 0.0204 - 29 0.0102 - 40 0.337 - 41 0.0612 - 42 0.0204 - - 13 211 19 0 - 0 0.00474 - 2 0.00474 - 3 0.175 - 4 0.0332 - 7 0.37 - 8 0.0284 - 9 0.0142 - 13 0.0711 - 14 0.0711 - 20 0.019 - 21 0.00948 - 26 0.019 - 31 0.00474 - 35 0.00948 - 40 0.109 - 41 0.0379 - 42 0.00948 - 43 0.00474 - 46 0.00474 - - 14 82 16 0 - 0 0.0122 - 3 0.0122 - 4 0.207 - 7 0.232 - 8 0.0854 - 9 0.0732 - 13 0.0366 - 14 0.061 - 15 0.061 - 20 0.0488 - 21 0.061 - 22 0.0366 - 29 0.0122 - 31 0.0122 - 35 0.0366 - 41 0.0122 - - 17 36 2 0 - 4 0.833 - 20 0.167 - - 21 56 10 0 - 0 0.0179 - 4 0.304 - 7 0.0893 - 8 0.143 - 14 0.125 - 20 0.0179 - 21 0.0536 - 31 0.0179 - 40 0.0714 - 41 0.161 - - 22 6 6 0 - 8 0.167 - 9 0.167 - 13 0.167 - 29 0.167 - 30 0.167 - 40 0.167 - - 23 1 1 0 - 21 1 - - 26 1 1 0 - 3 1 - - 28 2 1 0 - 4 1 - -61 113 10 4 - 0 0.0177 - 2 0.0265 - 7 0.133 - 21 0.00885 - 29 0.0177 - 30 0.00885 - 33 0.0177 - 40 0.372 - 41 0.327 - 42 0.0708 - - 2 1 1 0 - 21 1 - - 47 47 7 0 - 0 0.0213 - 2 0.0213 - 29 0.0213 - 33 0.0213 - 40 0.447 - 41 0.383 - 42 0.0851 - - 49 14 4 0 - 7 0.786 - 30 0.0714 - 41 0.0714 - 42 0.0714 - - 57 19 3 0 - 40 0.579 - 41 0.316 - 42 0.105 - -62 239664 43 23 - 0 0.00769 - 1 8.35e-06 - 2 0.0246 - 3 0.000417 - 4 0.00451 - 5 0.000255 - 6 8.35e-06 - 7 0.0107 - 8 0.00105 - 9 7.09e-05 - 10 7.09e-05 - 11 8.35e-06 - 12 0.00318 - 13 0.00107 - 14 0.00113 - 15 0.00279 - 16 2.5e-05 - 17 2.09e-05 - 19 0.00431 - 20 0.000559 - 21 0.00236 - 22 9.6e-05 - 23 2.09e-05 - 26 0.00115 - 27 1.25e-05 - 28 0.000221 - 29 0.0016 - 30 0.000421 - 31 0.000184 - 32 0.00053 - 33 0.0016 - 34 0.0002 - 35 3.34e-05 - 37 0.000526 - 39 3.34e-05 - 40 0.438 - 41 0.154 - 42 0.0193 - 43 0.00174 - 44 0.000538 - 45 0.000726 - 46 0.0115 - 47 0.303 - - 0 1 1 0 - 21 1 - - 2 2635 38 8 - 0 0.00835 - 1 0.00038 - 2 0.00038 - 3 0.022 - 4 0.25 - 5 0.0121 - 7 0.049 - 8 0.0509 - 9 0.0038 - 10 0.00607 - 12 0.00417 - 13 0.055 - 14 0.0687 - 15 0.12 - 16 0.00152 - 17 0.00114 - 19 0.205 - 20 0.0364 - 21 0.0509 - 22 0.00114 - 23 0.00114 - 26 0.00569 - 27 0.00038 - 28 0.00342 - 29 0.00114 - 30 0.00873 - 31 0.00152 - 32 0.00038 - 33 0.00152 - 34 0.00114 - 35 0.000759 - 37 0.00569 - 39 0.00114 - 41 0.0114 - 42 0.00038 - 43 0.00038 - 44 0.00152 - 45 0.00645 - - 41 1755 33 0 - 0 0.00627 - 2 0.00057 - 3 0.0131 - 4 0.271 - 5 0.0114 - 7 0.0581 - 8 0.0541 - 9 0.00399 - 10 0.00513 - 12 0.00399 - 13 0.045 - 14 0.0638 - 15 0.113 - 16 0.00228 - 17 0.00114 - 19 0.226 - 20 0.0336 - 21 0.049 - 22 0.00114 - 23 0.00114 - 26 0.00285 - 28 0.00228 - 29 0.00057 - 30 0.0108 - 31 0.00171 - 34 0.00057 - 35 0.00057 - 37 0.00741 - 39 0.00114 - 41 0.00342 - 42 0.00057 - 44 0.00057 - 45 0.00399 - - 42 83 20 0 - 0 0.0241 - 1 0.012 - 3 0.0361 - 4 0.229 - 7 0.0602 - 8 0.0361 - 10 0.0241 - 12 0.012 - 13 0.0482 - 14 0.0241 - 15 0.108 - 19 0.157 - 20 0.012 - 21 0.0964 - 26 0.012 - 27 0.012 - 28 0.012 - 35 0.012 - 41 0.0602 - 44 0.012 - - 44 1 1 0 - 43 1 - - 45 16 5 0 - 4 0.188 - 13 0.125 - 14 0.0625 - 19 0.562 - 21 0.0625 - - 46 38 11 0 - 4 0.158 - 7 0.0263 - 13 0.0526 - 14 0.0526 - 15 0.0789 - 19 0.316 - 20 0.0526 - 21 0.0526 - 22 0.0263 - 37 0.0263 - 45 0.158 - - 58 43 14 0 - 3 0.0465 - 4 0.256 - 5 0.0465 - 7 0.0233 - 8 0.0698 - 12 0.0233 - 13 0.0698 - 14 0.093 - 15 0.0465 - 19 0.186 - 20 0.0698 - 21 0.0233 - 28 0.0233 - 45 0.0233 - - 62 696 30 0 - 0 0.0129 - 3 0.0388 - 4 0.208 - 5 0.0144 - 7 0.0287 - 8 0.0474 - 9 0.00431 - 10 0.00718 - 12 0.00287 - 13 0.079 - 14 0.0862 - 15 0.149 - 17 0.00144 - 19 0.147 - 20 0.0445 - 21 0.0517 - 23 0.00144 - 26 0.0129 - 28 0.00431 - 29 0.00287 - 30 0.00575 - 31 0.00144 - 32 0.00144 - 33 0.00575 - 34 0.00287 - 37 0.00144 - 39 0.00144 - 41 0.0273 - 44 0.00287 - 45 0.00431 - - 69 2 1 0 - 3 1 - - 7 42 8 1 - 3 0.0238 - 4 0.286 - 5 0.0238 - 7 0.0238 - 13 0.0476 - 14 0.167 - 15 0.0476 - 19 0.381 - - 62 4 3 0 - 3 0.25 - 4 0.25 - 14 0.5 - - 21 32 13 1 - 3 0.0312 - 4 0.156 - 7 0.0312 - 8 0.0312 - 9 0.0312 - 15 0.0625 - 19 0.312 - 20 0.0625 - 21 0.0938 - 26 0.0625 - 28 0.0312 - 37 0.0625 - 41 0.0312 - - 2 7 5 0 - 4 0.429 - 15 0.143 - 19 0.143 - 21 0.143 - 37 0.143 - - 40 35953 5 2 - 40 2.78e-05 - 43 0.00337 - 45 0.000278 - 46 0.06 - 47 0.936 - - 6 1 1 0 - 43 1 - - 62 2516 4 0 - 43 0.00556 - 45 0.000795 - 46 0.0823 - 47 0.911 - - 41 2397 27 8 - 0 0.00167 - 2 0.736 - 3 0.00292 - 4 0.0217 - 5 0.00375 - 6 0.000417 - 7 0.0321 - 8 0.000834 - 9 0.000417 - 12 0.000417 - 13 0.00709 - 14 0.00501 - 15 0.0375 - 19 0.0209 - 20 0.00167 - 21 0.0196 - 23 0.000417 - 26 0.00125 - 27 0.000417 - 28 0.00125 - 29 0.00125 - 30 0.00626 - 33 0.00292 - 34 0.000834 - 45 0.00501 - 46 0.0868 - 47 0.00209 - - 2 26 8 0 - 3 0.0385 - 4 0.0385 - 7 0.615 - 9 0.0385 - 19 0.0769 - 21 0.115 - 27 0.0385 - 30 0.0385 - - 6 1 1 0 - 26 1 - - 21 1 1 0 - 45 1 - - 49 4 3 0 - 2 0.25 - 7 0.5 - 21 0.25 - - 55 8 5 0 - 7 0.25 - 15 0.125 - 21 0.125 - 30 0.125 - 46 0.375 - - 58 7 3 0 - 2 0.143 - 14 0.143 - 45 0.714 - - 62 2139 22 0 - 2 0.813 - 3 0.00234 - 4 0.0229 - 5 0.00421 - 6 0.000468 - 7 0.022 - 8 0.000935 - 13 0.00748 - 14 0.00421 - 15 0.0411 - 19 0.0206 - 20 0.0014 - 21 0.0173 - 23 0.000468 - 26 0.000935 - 28 0.0014 - 29 0.000468 - 30 0.00468 - 33 0.000935 - 34 0.000468 - 45 0.00234 - 46 0.0299 - - 69 206 19 0 - 0 0.0194 - 2 0.0971 - 3 0.00485 - 4 0.00971 - 7 0.0388 - 12 0.00485 - 13 0.00485 - 14 0.00971 - 15 0.00485 - 19 0.0194 - 20 0.00485 - 21 0.0243 - 29 0.00971 - 30 0.0146 - 33 0.0243 - 34 0.00485 - 45 0.00485 - 46 0.675 - 47 0.0243 - - 42 977 35 6 - 0 0.00102 - 1 0.00102 - 2 0.088 - 3 0.0143 - 4 0.148 - 5 0.00614 - 7 0.0645 - 8 0.0287 - 9 0.00409 - 10 0.00102 - 11 0.00205 - 13 0.0409 - 14 0.0409 - 15 0.1 - 16 0.00205 - 17 0.00102 - 19 0.141 - 20 0.0194 - 21 0.0522 - 23 0.00102 - 26 0.00512 - 27 0.00102 - 28 0.00921 - 30 0.00614 - 31 0.00102 - 34 0.00205 - 35 0.00205 - 37 0.00512 - 39 0.00205 - 40 0.0747 - 41 0.00102 - 42 0.00205 - 45 0.0491 - 46 0.00409 - 47 0.0768 - - 42 2 1 0 - 45 1 - - 46 6 1 0 - 47 1 - - 58 4 3 0 - 7 0.25 - 21 0.25 - 45 0.5 - - 62 815 34 0 - 0 0.00123 - 1 0.00123 - 2 0.103 - 3 0.0172 - 4 0.178 - 5 0.00736 - 7 0.0736 - 8 0.0331 - 9 0.00491 - 10 0.00123 - 11 0.00245 - 13 0.0479 - 14 0.0491 - 15 0.119 - 16 0.00245 - 17 0.00123 - 19 0.168 - 20 0.0233 - 21 0.0577 - 23 0.00123 - 26 0.00613 - 27 0.00123 - 28 0.011 - 30 0.00736 - 31 0.00123 - 34 0.00245 - 35 0.00245 - 37 0.00491 - 39 0.00123 - 40 0.00859 - 42 0.00245 - 45 0.0528 - 46 0.00245 - 47 0.00245 - - 66 3 3 0 - 2 0.333 - 8 0.333 - 40 0.333 - - 69 144 13 0 - 2 0.00694 - 7 0.0139 - 13 0.00694 - 15 0.00694 - 19 0.00694 - 21 0.0208 - 37 0.00694 - 39 0.00694 - 40 0.444 - 41 0.00694 - 45 0.00694 - 46 0.0139 - 47 0.451 - - 43 125 4 3 - 20 0.008 - 40 0.032 - 42 0.008 - 47 0.952 - - 2 1 1 0 - 20 1 - - 40 115 2 0 - 42 0.0087 - 47 0.991 - - 69 4 1 0 - 40 1 - - 45 82 15 5 - 0 0.0244 - 2 0.22 - 4 0.134 - 5 0.0122 - 7 0.11 - 8 0.0122 - 13 0.0244 - 14 0.0122 - 15 0.0244 - 19 0.146 - 20 0.0366 - 21 0.0732 - 28 0.0366 - 37 0.0122 - 47 0.122 - - 2 15 7 0 - 0 0.0667 - 4 0.4 - 5 0.0667 - 7 0.133 - 19 0.0667 - 21 0.133 - 28 0.133 - - 40 10 1 0 - 47 1 - - 41 11 4 0 - 2 0.636 - 8 0.0909 - 19 0.182 - 21 0.0909 - - 42 31 11 0 - 0 0.0323 - 4 0.161 - 7 0.194 - 13 0.0645 - 14 0.0323 - 15 0.0645 - 19 0.258 - 20 0.0968 - 21 0.0323 - 28 0.0323 - 37 0.0323 - - 58 13 3 0 - 2 0.846 - 7 0.0769 - 19 0.0769 - - 46 2445 19 7 - 0 0.00164 - 2 0.0225 - 4 0.00204 - 6 0.000409 - 7 0.00573 - 15 0.00777 - 19 0.0151 - 21 0.00164 - 26 0.000818 - 28 0.000409 - 29 0.0139 - 30 0.000409 - 33 0.0278 - 40 0.00409 - 42 0.00327 - 43 0.00368 - 45 0.000409 - 46 0.00859 - 47 0.88 - - 40 2157 5 0 - 2 0.000464 - 42 0.00278 - 43 0.00278 - 46 0.00881 - 47 0.985 - - 41 201 13 0 - 0 0.00995 - 2 0.169 - 4 0.0249 - 6 0.00498 - 7 0.0149 - 15 0.0796 - 19 0.179 - 21 0.00498 - 29 0.169 - 30 0.00498 - 33 0.328 - 45 0.00498 - 46 0.00498 - - 42 4 3 0 - 28 0.25 - 40 0.25 - 47 0.5 - - 48 12 2 0 - 2 0.667 - 7 0.333 - - 55 11 6 0 - 2 0.182 - 7 0.364 - 21 0.0909 - 26 0.0909 - 33 0.0909 - 42 0.182 - - 62 7 4 0 - 2 0.571 - 15 0.143 - 19 0.143 - 47 0.143 - - 69 33 10 0 - 0 0.0606 - 2 0.182 - 7 0.0909 - 15 0.0606 - 21 0.0606 - 26 0.0303 - 40 0.273 - 43 0.0909 - 46 0.0303 - 47 0.121 - - 47 95402 34 17 - 0 0.00953 - 2 0.0171 - 3 8.39e-05 - 4 0.000954 - 5 6.29e-05 - 7 0.0109 - 8 0.000419 - 12 0.00393 - 13 0.000241 - 14 0.000157 - 15 0.000618 - 19 0.00136 - 20 5.24e-05 - 21 0.00164 - 22 0.000105 - 26 0.00125 - 28 0.000136 - 29 0.00199 - 30 0.000293 - 31 0.000199 - 32 0.00066 - 33 0.00197 - 34 0.00021 - 35 2.1e-05 - 37 0.000514 - 39 2.1e-05 - 40 0.361 - 41 0.181 - 42 0.0191 - 43 0.00153 - 44 0.000566 - 45 0.000356 - 46 0.00162 - 47 0.38 - - 40 33670 2 0 - 43 0.000178 - 47 1 - - 41 47 15 0 - 0 0.0851 - 2 0.17 - 4 0.0213 - 7 0.0213 - 12 0.0213 - 13 0.0213 - 14 0.0426 - 15 0.0213 - 19 0.0851 - 20 0.0213 - 29 0.0638 - 33 0.149 - 45 0.0213 - 46 0.149 - 47 0.106 - - 42 78 4 0 - 19 0.0128 - 39 0.0128 - 41 0.0128 - 47 0.962 - - 43 119 1 0 - 47 1 - - 45 10 1 0 - 47 1 - - 46 2350 15 0 - 0 0.0017 - 2 0.00723 - 4 0.00213 - 7 0.00383 - 15 0.00766 - 19 0.014 - 21 0.0017 - 26 0.000851 - 29 0.0145 - 33 0.0277 - 42 0.000851 - 43 0.0017 - 45 0.000426 - 46 0.000426 - 47 0.915 - - 48 773 21 0 - 0 0.0103 - 2 0.0414 - 4 0.00517 - 7 0.19 - 12 0.00517 - 14 0.00129 - 15 0.00129 - 19 0.00259 - 21 0.00517 - 26 0.00129 - 30 0.00129 - 31 0.00129 - 32 0.00129 - 33 0.00129 - 37 0.00259 - 40 0.446 - 41 0.254 - 42 0.0207 - 43 0.00259 - 46 0.00129 - 47 0.00388 - - 49 56 9 0 - 0 0.0357 - 2 0.0357 - 7 0.125 - 15 0.0179 - 40 0.393 - 41 0.304 - 42 0.0536 - 46 0.0179 - 47 0.0179 - - 55 709 22 0 - 0 0.00846 - 2 0.0367 - 4 0.00282 - 7 0.0339 - 8 0.00282 - 12 0.00705 - 15 0.00282 - 21 0.00564 - 22 0.00141 - 26 0.00423 - 29 0.00282 - 30 0.00423 - 32 0.00423 - 33 0.00141 - 34 0.00564 - 37 0.00282 - 40 0.54 - 41 0.288 - 42 0.0339 - 43 0.00282 - 46 0.00423 - 47 0.00423 - - 57 217 12 0 - 0 0.00461 - 2 0.023 - 7 0.0184 - 12 0.00461 - 19 0.00461 - 21 0.0138 - 26 0.0138 - 40 0.479 - 41 0.392 - 42 0.0369 - 46 0.00461 - 47 0.00461 - - 58 11 4 0 - 8 0.0909 - 28 0.0909 - 40 0.545 - 41 0.273 - - 62 880 12 0 - 2 0.00227 - 7 0.00114 - 12 0.00114 - 19 0.00227 - 28 0.00114 - 29 0.00227 - 40 0.512 - 41 0.441 - 42 0.017 - 43 0.00341 - 46 0.00568 - 47 0.0102 - - 64 87 4 0 - 7 0.0115 - 40 0.747 - 41 0.23 - 43 0.0115 - - 65 4 4 0 - 40 0.25 - 41 0.25 - 46 0.25 - 47 0.25 - - 67 7 2 0 - 46 0.143 - 47 0.857 - - 68 12 6 0 - 2 0.0833 - 15 0.0833 - 19 0.0833 - 40 0.417 - 41 0.25 - 42 0.0833 - - 69 56363 34 0 - 0 0.0157 - 2 0.0273 - 3 0.000142 - 4 0.0014 - 5 0.000106 - 7 0.015 - 8 0.000656 - 12 0.00644 - 13 0.00039 - 14 0.000213 - 15 0.000621 - 19 0.00153 - 20 7.1e-05 - 21 0.0025 - 22 0.00016 - 26 0.00195 - 28 0.000195 - 29 0.00264 - 30 0.000426 - 31 0.000319 - 32 0.00105 - 33 0.00202 - 34 0.000284 - 35 3.55e-05 - 37 0.000798 - 39 1.77e-05 - 40 0.587 - 41 0.29 - 42 0.031 - 43 0.00227 - 44 0.000958 - 45 0.000568 - 46 0.00238 - 47 0.00405 - - 48 811 21 4 - 0 0.00986 - 2 0.0395 - 4 0.00493 - 7 0.211 - 12 0.00493 - 14 0.00123 - 15 0.00123 - 19 0.00247 - 21 0.00493 - 26 0.00123 - 30 0.00123 - 31 0.00123 - 32 0.00123 - 33 0.00123 - 37 0.00247 - 40 0.428 - 41 0.242 - 42 0.0197 - 43 0.00247 - 46 0.016 - 47 0.0037 - - 45 54 4 0 - 7 0.037 - 40 0.556 - 41 0.204 - 46 0.204 - - 47 350 14 0 - 2 0.0229 - 4 0.0114 - 7 0.354 - 14 0.00286 - 19 0.00286 - 21 0.00857 - 26 0.00286 - 30 0.00286 - 31 0.00286 - 32 0.00286 - 33 0.00286 - 40 0.291 - 41 0.28 - 42 0.0114 - - 49 8 2 0 - 40 0.125 - 41 0.875 - - 55 393 14 0 - 0 0.0204 - 2 0.0611 - 7 0.115 - 12 0.0102 - 15 0.00254 - 19 0.00254 - 21 0.00254 - 37 0.00509 - 40 0.532 - 41 0.201 - 42 0.0305 - 43 0.00509 - 46 0.00509 - 47 0.00763 - - 49 97 22 6 - 0 0.0309 - 2 0.0206 - 3 0.0103 - 4 0.0515 - 7 0.144 - 8 0.0206 - 12 0.0103 - 13 0.0103 - 14 0.0309 - 15 0.0206 - 19 0.0515 - 21 0.0206 - 26 0.0309 - 28 0.0103 - 33 0.0103 - 37 0.0103 - 40 0.237 - 41 0.216 - 42 0.0309 - 45 0.0103 - 46 0.0103 - 47 0.0103 - - 2 20 13 0 - 0 0.05 - 4 0.1 - 7 0.05 - 8 0.05 - 12 0.05 - 13 0.05 - 14 0.1 - 19 0.2 - 26 0.1 - 33 0.05 - 40 0.05 - 41 0.1 - 45 0.05 - - 41 20 11 0 - 3 0.05 - 4 0.15 - 8 0.05 - 14 0.05 - 15 0.05 - 19 0.05 - 21 0.1 - 28 0.05 - 40 0.2 - 41 0.1 - 42 0.15 - - 47 18 6 0 - 0 0.0556 - 7 0.222 - 40 0.222 - 41 0.389 - 46 0.0556 - 47 0.0556 - - 48 5 2 0 - 40 0.8 - 41 0.2 - - 55 31 7 0 - 0 0.0323 - 2 0.0645 - 7 0.29 - 15 0.0323 - 26 0.0323 - 40 0.258 - 41 0.29 - - 69 2 2 0 - 37 0.5 - 40 0.5 - - 51 13 2 0 - 40 0.846 - 41 0.154 - - 55 895 23 6 - 0 0.0067 - 2 0.0291 - 4 0.00223 - 7 0.15 - 8 0.00223 - 12 0.00559 - 15 0.00223 - 21 0.00559 - 22 0.00112 - 26 0.0101 - 29 0.00223 - 30 0.00335 - 32 0.00335 - 33 0.00112 - 34 0.00447 - 37 0.00223 - 40 0.482 - 41 0.237 - 42 0.0268 - 43 0.00223 - 45 0.00223 - 46 0.0156 - 47 0.00335 - - 45 72 4 0 - 40 0.556 - 41 0.278 - 42 0.0139 - 46 0.153 - - 47 526 22 0 - 0 0.0076 - 2 0.0209 - 4 0.0019 - 7 0.228 - 8 0.0019 - 12 0.0076 - 15 0.0038 - 21 0.0076 - 22 0.0019 - 26 0.0152 - 29 0.0038 - 30 0.0057 - 32 0.0038 - 33 0.0019 - 34 0.0076 - 37 0.0019 - 40 0.376 - 41 0.27 - 42 0.0228 - 43 0.0038 - 45 0.0038 - 46 0.0019 - - 48 18 6 0 - 2 0.0556 - 7 0.167 - 26 0.0556 - 40 0.389 - 41 0.278 - 47 0.0556 - - 49 11 3 0 - 7 0.273 - 40 0.0909 - 41 0.636 - - 55 195 14 0 - 0 0.00513 - 2 0.0718 - 4 0.00513 - 7 0.041 - 8 0.00513 - 12 0.00513 - 21 0.00513 - 32 0.00513 - 37 0.00513 - 40 0.631 - 41 0.159 - 42 0.0462 - 46 0.00513 - 47 0.0103 - - 69 59 4 0 - 0 0.0169 - 40 0.915 - 41 0.0508 - 42 0.0169 - - 57 259 12 4 - 0 0.00386 - 2 0.0193 - 7 0.0502 - 12 0.00386 - 19 0.00386 - 21 0.0116 - 26 0.0154 - 40 0.517 - 41 0.332 - 42 0.0347 - 46 0.00386 - 47 0.00386 - - 41 24 4 0 - 7 0.0417 - 40 0.833 - 41 0.0833 - 42 0.0417 - - 47 26 4 0 - 21 0.0385 - 26 0.0385 - 40 0.269 - 41 0.654 - - 48 24 6 0 - 2 0.0417 - 7 0.167 - 40 0.333 - 41 0.333 - 42 0.0833 - 47 0.0417 - - 69 30 5 0 - 0 0.0333 - 26 0.0333 - 40 0.7 - 41 0.2 - 42 0.0333 - - 58 100 11 4 - 2 0.43 - 7 0.08 - 8 0.02 - 19 0.01 - 21 0.01 - 26 0.01 - 28 0.01 - 40 0.14 - 41 0.1 - 42 0.04 - 45 0.15 - - 2 3 3 0 - 8 0.333 - 19 0.333 - 26 0.333 - - 46 9 4 0 - 40 0.222 - 41 0.556 - 42 0.111 - 45 0.111 - - 62 73 9 0 - 2 0.562 - 7 0.0274 - 8 0.0137 - 21 0.0137 - 28 0.0137 - 40 0.11 - 41 0.0411 - 42 0.0411 - 45 0.178 - - 69 11 4 0 - 7 0.545 - 40 0.273 - 41 0.0909 - 45 0.0909 - - 62 7159 19 11 - 2 0.0976 - 4 0.00014 - 7 0.00279 - 8 0.000419 - 12 0.00014 - 15 0.00014 - 19 0.000419 - 21 0.000419 - 28 0.00014 - 29 0.000279 - 37 0.000279 - 40 0.414 - 41 0.361 - 42 0.116 - 43 0.000419 - 44 0.00182 - 45 0.00014 - 46 0.00168 - 47 0.00126 - - 2 2599 15 0 - 2 0.0104 - 7 0.00577 - 8 0.000385 - 12 0.000385 - 19 0.00077 - 28 0.000385 - 29 0.00077 - 37 0.000385 - 40 0.809 - 41 0.155 - 42 0.0119 - 43 0.00077 - 44 0.000385 - 46 0.00154 - 47 0.00192 - - 7 43 4 0 - 2 0.0233 - 40 0.86 - 41 0.093 - 44 0.0233 - - 21 30 5 0 - 2 0.0333 - 40 0.767 - 41 0.133 - 42 0.0333 - 46 0.0333 - - 41 488 5 0 - 2 0.248 - 40 0.184 - 41 0.514 - 42 0.0492 - 46 0.0041 - - 42 697 6 0 - 2 0.00717 - 40 0.859 - 41 0.0689 - 42 0.0588 - 46 0.00143 - 47 0.0043 - - 44 12 3 0 - 2 0.167 - 41 0.5 - 42 0.333 - - 45 222 7 0 - 2 0.113 - 7 0.0045 - 40 0.189 - 41 0.568 - 42 0.104 - 46 0.018 - 47 0.0045 - - 47 2942 13 0 - 2 0.171 - 4 0.00034 - 7 0.00102 - 8 0.00068 - 15 0.00034 - 19 0.00034 - 21 0.00102 - 37 0.00034 - 40 0.00034 - 41 0.582 - 42 0.238 - 44 0.00374 - 45 0.00034 - - 48 36 3 0 - 7 0.0278 - 40 0.833 - 41 0.139 - - 49 36 4 0 - 2 0.0556 - 40 0.75 - 41 0.167 - 43 0.0278 - - 57 12 3 0 - 2 0.5 - 40 0.167 - 41 0.333 - - 64 106 7 1 - 2 0.00943 - 7 0.00943 - 21 0.00943 - 40 0.755 - 41 0.198 - 42 0.00943 - 43 0.00943 - - 47 1 1 0 - 42 1 - - 66 32 3 0 - 40 0.781 - 41 0.125 - 42 0.0938 - - 67 9 3 0 - 40 0.222 - 46 0.111 - 47 0.667 - - 68 12 6 0 - 2 0.0833 - 15 0.0833 - 19 0.0833 - 40 0.417 - 41 0.25 - 42 0.0833 - - 69 90067 36 14 - 0 0.00981 - 2 0.0171 - 3 0.000111 - 4 0.000999 - 5 6.66e-05 - 7 0.00973 - 8 0.000411 - 9 1.11e-05 - 12 0.00403 - 13 0.000289 - 14 0.000133 - 15 0.000811 - 17 1.11e-05 - 19 0.000966 - 20 4.44e-05 - 21 0.0016 - 22 9.99e-05 - 26 0.00123 - 28 0.000122 - 29 0.00165 - 30 0.000266 - 31 0.000211 - 32 0.000655 - 33 0.00127 - 34 0.000189 - 35 2.22e-05 - 37 0.000522 - 39 1.11e-05 - 40 0.736 - 41 0.184 - 42 0.021 - 43 0.00147 - 44 0.000644 - 45 0.000366 - 46 0.00185 - 47 0.00253 - - 2 19 3 0 - 40 0.895 - 41 0.0526 - 44 0.0526 - - 4 32 4 0 - 7 0.0312 - 12 0.0312 - 40 0.844 - 41 0.0938 - - 21 122 8 0 - 0 0.0082 - 2 0.0082 - 7 0.0246 - 29 0.0164 - 40 0.631 - 41 0.27 - 42 0.0328 - 47 0.0082 - - 41 838 11 0 - 0 0.00119 - 2 0.00477 - 4 0.00119 - 15 0.0143 - 33 0.00119 - 37 0.00119 - 40 0.899 - 41 0.0513 - 42 0.0203 - 43 0.00239 - 47 0.00358 - - 43 28 3 0 - 0 0.0714 - 40 0.464 - 41 0.464 - - 45 334 7 0 - 2 0.00898 - 7 0.00299 - 40 0.557 - 41 0.38 - 42 0.018 - 46 0.0269 - 47 0.00599 - - 46 98 10 0 - 0 0.0102 - 2 0.0102 - 3 0.0102 - 4 0.0204 - 7 0.0102 - 15 0.255 - 40 0.531 - 41 0.122 - 42 0.0204 - 43 0.0102 - - 47 23686 34 0 - 0 0.0246 - 2 0.021 - 3 0.000253 - 4 0.00186 - 5 8.44e-05 - 7 0.0269 - 8 0.00118 - 12 0.0117 - 13 0.00076 - 14 0.000169 - 15 0.000844 - 17 4.22e-05 - 19 0.00101 - 20 4.22e-05 - 21 0.00422 - 22 0.000338 - 26 0.00355 - 28 0.000296 - 29 0.00469 - 30 0.000633 - 31 0.000633 - 32 0.00182 - 33 0.00338 - 34 0.000464 - 37 0.00148 - 39 4.22e-05 - 40 0.625 - 41 0.231 - 42 0.0221 - 43 0.00207 - 44 0.000929 - 45 0.000929 - 46 0.00312 - 47 0.00262 - - 49 3383 23 0 - 0 0.00532 - 2 0.00769 - 3 0.000296 - 4 0.000887 - 7 0.00236 - 9 0.000296 - 12 0.00236 - 13 0.000591 - 15 0.000591 - 19 0.000296 - 21 0.00118 - 26 0.000296 - 29 0.000887 - 30 0.000887 - 32 0.000887 - 33 0.000887 - 40 0.792 - 41 0.156 - 42 0.021 - 43 0.00118 - 44 0.000296 - 46 0.00148 - 47 0.00207 - - 55 60684 33 0 - 0 0.0046 - 2 0.0165 - 3 3.3e-05 - 4 0.000659 - 5 6.59e-05 - 7 0.00369 - 8 0.000148 - 12 0.00125 - 13 9.89e-05 - 14 0.000132 - 15 0.000214 - 19 0.00101 - 20 4.94e-05 - 21 0.000659 - 22 1.65e-05 - 26 0.000428 - 28 6.59e-05 - 29 0.000527 - 30 9.89e-05 - 31 6.59e-05 - 32 0.000214 - 33 0.000478 - 34 9.89e-05 - 35 3.3e-05 - 37 0.000181 - 40 0.774 - 41 0.168 - 42 0.0204 - 43 0.00125 - 44 0.00056 - 45 0.000165 - 46 0.00129 - 47 0.0025 - - 57 196 6 0 - 2 0.0153 - 29 0.0051 - 40 0.811 - 41 0.122 - 42 0.0408 - 45 0.0051 - - 58 207 4 0 - 2 0.00966 - 40 0.928 - 41 0.0338 - 42 0.029 - - 62 256 6 0 - 2 0.00781 - 15 0.00391 - 33 0.00391 - 40 0.793 - 41 0.148 - 42 0.043 - - 64 121 6 0 - 19 0.00826 - 40 0.785 - 41 0.132 - 42 0.0579 - 46 0.00826 - 47 0.00826 - -63 79666 1 0 - 47 1 - -64 76641 43 33 - 0 0.0391 - 1 9.13e-05 - 2 0.0169 - 3 0.00201 - 4 0.0542 - 5 0.0026 - 7 0.0151 - 8 0.011 - 9 0.000692 - 10 0.000665 - 11 1.3e-05 - 12 0.0139 - 13 0.0113 - 14 0.0129 - 15 0.0225 - 16 0.000209 - 17 0.000326 - 18 2.61e-05 - 19 0.0442 - 20 0.00497 - 21 0.00892 - 22 0.000248 - 23 1.3e-05 - 26 0.00343 - 28 0.000613 - 29 0.0176 - 30 0.00316 - 31 0.00274 - 32 0.00857 - 33 0.0137 - 34 0.000626 - 35 0.000535 - 36 5.22e-05 - 37 0.001 - 39 0.000183 - 40 0.488 - 41 0.175 - 42 0.0152 - 43 0.00151 - 44 0.000887 - 45 0.0024 - 46 0.00119 - 47 0.00198 - - 0 1 1 0 - 14 1 - - 2 337 19 7 - 0 0.00297 - 3 0.00297 - 4 0.0623 - 5 0.00297 - 7 0.623 - 8 0.00297 - 14 0.0119 - 15 0.00297 - 19 0.0089 - 20 0.00297 - 21 0.0415 - 22 0.00297 - 26 0.00297 - 34 0.0564 - 35 0.0712 - 36 0.0119 - 37 0.0742 - 41 0.0089 - 45 0.00593 - - 7 2 1 0 - 21 1 - - 41 107 11 0 - 4 0.0467 - 7 0.729 - 14 0.00935 - 19 0.00935 - 21 0.028 - 22 0.00935 - 34 0.0654 - 35 0.0374 - 37 0.0374 - 41 0.00935 - 45 0.0187 - - 42 9 4 0 - 7 0.444 - 34 0.111 - 37 0.333 - 41 0.111 - - 46 8 2 0 - 7 0.875 - 14 0.125 - - 47 10 7 0 - 4 0.2 - 5 0.1 - 8 0.1 - 14 0.2 - 19 0.2 - 20 0.1 - 26 0.1 - - 62 6 2 0 - 15 0.167 - 21 0.833 - - 64 194 10 0 - 0 0.00515 - 3 0.00515 - 4 0.0722 - 7 0.619 - 21 0.0206 - 34 0.0567 - 35 0.103 - 36 0.0206 - 37 0.0928 - 41 0.00515 - - 4 202 13 0 - 3 0.0149 - 7 0.0297 - 8 0.153 - 10 0.0149 - 13 0.411 - 15 0.158 - 20 0.173 - 21 0.0099 - 31 0.00495 - 33 0.00495 - 41 0.00495 - 42 0.0099 - 44 0.0099 - - 7 10169 37 8 - 0 0.00521 - 1 0.000492 - 2 0.00059 - 3 0.0103 - 4 0.305 - 5 0.0145 - 7 0.0308 - 8 0.061 - 9 0.00403 - 10 0.00334 - 11 9.83e-05 - 12 9.83e-05 - 13 0.0558 - 14 0.0677 - 15 0.116 - 16 0.00108 - 17 0.00187 - 19 0.217 - 20 0.0234 - 21 0.0175 - 22 0.000885 - 26 0.00413 - 28 0.000983 - 29 9.83e-05 - 30 0.0177 - 31 0.0146 - 32 0.000295 - 33 0.000492 - 34 0.000197 - 35 0.000787 - 37 0.00256 - 39 0.000787 - 41 0.006 - 42 0.000197 - 43 0.000197 - 44 0.000787 - 45 0.0137 - - 7 48 11 0 - 4 0.25 - 5 0.0208 - 10 0.0208 - 13 0.0625 - 14 0.0625 - 15 0.0208 - 19 0.458 - 20 0.0208 - 26 0.0417 - 30 0.0208 - 42 0.0208 - - 21 246 16 0 - 4 0.341 - 5 0.0163 - 7 0.0203 - 8 0.061 - 9 0.00407 - 13 0.061 - 14 0.0447 - 15 0.0813 - 19 0.285 - 20 0.0203 - 21 0.0163 - 26 0.00407 - 28 0.0244 - 30 0.0122 - 31 0.00407 - 45 0.00407 - - 35 5 2 0 - 4 0.8 - 13 0.2 - - 44 3 2 0 - 15 0.333 - 43 0.667 - - 47 9705 36 0 - 0 0.00546 - 1 0.000515 - 2 0.000618 - 3 0.0108 - 4 0.304 - 5 0.0145 - 7 0.0316 - 8 0.0613 - 9 0.00412 - 10 0.0034 - 11 0.000103 - 12 0.000103 - 13 0.0551 - 14 0.0687 - 15 0.117 - 16 0.00113 - 17 0.00196 - 19 0.214 - 20 0.0236 - 21 0.0177 - 22 0.000927 - 26 0.00402 - 28 0.000412 - 29 0.000103 - 30 0.018 - 31 0.015 - 32 0.000309 - 33 0.000515 - 34 0.000206 - 35 0.000824 - 37 0.00268 - 39 0.000824 - 41 0.00629 - 42 0.000103 - 44 0.000721 - 45 0.0141 - - 49 106 13 0 - 4 0.311 - 5 0.00943 - 7 0.00943 - 8 0.066 - 13 0.0943 - 14 0.066 - 15 0.123 - 19 0.255 - 20 0.0189 - 21 0.0189 - 30 0.00943 - 31 0.00943 - 44 0.00943 - - 55 47 6 0 - 4 0.383 - 8 0.0213 - 13 0.0638 - 15 0.298 - 19 0.213 - 20 0.0213 - - 57 5 3 0 - 4 0.4 - 8 0.4 - 45 0.2 - - 12 1 1 0 - 9 1 - - 13 52 10 2 - 4 0.0385 - 5 0.0192 - 7 0.0385 - 13 0.0192 - 14 0.0192 - 15 0.0192 - 19 0.0385 - 26 0.75 - 30 0.0385 - 41 0.0192 - - 7 45 5 0 - 4 0.0444 - 5 0.0222 - 14 0.0222 - 19 0.0444 - 26 0.867 - - 47 7 5 0 - 7 0.286 - 13 0.143 - 15 0.143 - 30 0.286 - 41 0.143 - - 15 14 3 0 - 4 0.0714 - 15 0.857 - 19 0.0714 - - 21 134 22 5 - 0 0.0224 - 3 0.0149 - 4 0.239 - 5 0.00746 - 7 0.0448 - 8 0.0896 - 9 0.0224 - 10 0.00746 - 13 0.0299 - 14 0.00746 - 15 0.0373 - 19 0.134 - 20 0.0224 - 21 0.112 - 26 0.0149 - 28 0.00746 - 30 0.0149 - 31 0.0821 - 40 0.0224 - 41 0.0373 - 44 0.0149 - 45 0.0149 - - 2 7 4 0 - 19 0.143 - 40 0.429 - 41 0.286 - 45 0.143 - - 7 7 5 0 - 4 0.143 - 7 0.143 - 8 0.143 - 19 0.429 - 26 0.143 - - 21 6 4 0 - 4 0.167 - 15 0.5 - 26 0.167 - 44 0.167 - - 37 1 1 0 - 28 1 - - 47 107 19 0 - 0 0.028 - 3 0.0187 - 4 0.252 - 5 0.00935 - 7 0.0374 - 8 0.103 - 9 0.028 - 10 0.00935 - 13 0.0374 - 14 0.00935 - 15 0.0187 - 19 0.121 - 20 0.028 - 21 0.14 - 30 0.0187 - 31 0.0935 - 41 0.028 - 44 0.00935 - 45 0.00935 - - 26 2 1 0 - 4 1 - - 28 1 1 0 - 26 1 - - 34 10 8 0 - 4 0.1 - 5 0.1 - 8 0.1 - 10 0.1 - 14 0.1 - 15 0.1 - 20 0.1 - 21 0.3 - - 37 1 1 0 - 21 1 - - 40 24 3 0 - 42 0.0417 - 46 0.292 - 47 0.667 - - 41 246 21 8 - 0 0.0122 - 2 0.423 - 3 0.00407 - 4 0.0203 - 7 0.301 - 8 0.0163 - 13 0.00813 - 15 0.00407 - 19 0.0122 - 20 0.00407 - 21 0.0569 - 26 0.00407 - 29 0.00407 - 30 0.0366 - 31 0.0122 - 33 0.00407 - 34 0.0163 - 35 0.00813 - 37 0.0203 - 45 0.00813 - 46 0.0244 - - 7 49 10 0 - 4 0.0204 - 7 0.673 - 8 0.0204 - 20 0.0204 - 21 0.0204 - 26 0.0204 - 30 0.102 - 31 0.0612 - 37 0.0204 - 45 0.0408 - - 49 2 2 0 - 34 0.5 - 37 0.5 - - 55 1 1 0 - 0 1 - - 57 2 1 0 - 19 1 - - 62 7 5 0 - 4 0.143 - 13 0.286 - 19 0.143 - 21 0.286 - 29 0.143 - - 64 136 10 0 - 0 0.0147 - 2 0.765 - 4 0.00735 - 7 0.0809 - 21 0.0221 - 30 0.00735 - 34 0.0221 - 35 0.0147 - 37 0.0221 - 46 0.0441 - - 71 11 5 0 - 4 0.0909 - 7 0.273 - 8 0.273 - 21 0.273 - 30 0.0909 - - 72 36 6 0 - 3 0.0278 - 7 0.75 - 15 0.0278 - 21 0.111 - 30 0.0556 - 33 0.0278 - - 42 22 7 1 - 1 0.0455 - 2 0.409 - 7 0.136 - 21 0.0455 - 37 0.227 - 45 0.0455 - 47 0.0909 - - 62 2 1 0 - 47 1 - - 43 4 4 0 - 4 0.25 - 9 0.25 - 12 0.25 - 29 0.25 - - 44 1 1 0 - 26 1 - - 45 112 19 3 - 0 0.0179 - 1 0.00893 - 3 0.0179 - 4 0.259 - 5 0.0536 - 7 0.0804 - 8 0.0536 - 10 0.0179 - 13 0.0536 - 14 0.0625 - 15 0.0179 - 17 0.00893 - 19 0.259 - 20 0.0268 - 21 0.0179 - 31 0.00893 - 33 0.00893 - 34 0.00893 - 37 0.0179 - - 41 2 2 0 - 15 0.5 - 31 0.5 - - 58 2 2 0 - 10 0.5 - 37 0.5 - - 72 2 2 0 - 0 0.5 - 33 0.5 - - 46 17 5 3 - 2 0.412 - 34 0.0588 - 42 0.0588 - 44 0.0588 - 47 0.412 - - 40 7 1 0 - 47 1 - - 41 6 2 0 - 2 0.833 - 34 0.167 - - 62 2 2 0 - 42 0.5 - 44 0.5 - - 47 27924 33 12 - 0 0.0193 - 2 0.0173 - 4 0.00147 - 5 0.000215 - 7 0.00806 - 8 0.000143 - 12 0.00623 - 13 0.00043 - 14 0.000215 - 15 0.00043 - 19 0.0024 - 20 0.000179 - 21 0.00208 - 22 0.000107 - 26 0.00161 - 28 0.000322 - 29 0.00326 - 30 0.00043 - 31 0.000215 - 32 0.00165 - 33 0.00154 - 34 0.000322 - 35 7.16e-05 - 37 0.000251 - 39 3.58e-05 - 40 0.669 - 41 0.235 - 42 0.0204 - 43 0.00201 - 44 0.000967 - 45 0.000466 - 46 0.00133 - 47 0.00272 - - 40 17 2 0 - 42 0.0588 - 47 0.941 - - 41 9 6 0 - 0 0.222 - 4 0.111 - 13 0.222 - 19 0.111 - 21 0.222 - 29 0.111 - - 42 2 1 0 - 47 1 - - 45 1 1 0 - 19 1 - - 46 9 3 0 - 42 0.111 - 44 0.111 - 47 0.778 - - 51 89 9 0 - 2 0.0112 - 4 0.0112 - 7 0.0112 - 26 0.0225 - 40 0.236 - 41 0.652 - 42 0.0337 - 46 0.0112 - 47 0.0112 - - 62 27364 33 0 - 0 0.0196 - 2 0.0175 - 4 0.00139 - 5 0.000219 - 7 0.00819 - 8 0.000146 - 12 0.00636 - 13 0.000365 - 14 0.000219 - 15 0.000439 - 19 0.00238 - 20 0.000183 - 21 0.00205 - 22 0.00011 - 26 0.00157 - 28 0.000329 - 29 0.00329 - 30 0.000439 - 31 0.000219 - 32 0.00168 - 33 0.00157 - 34 0.000292 - 35 7.31e-05 - 37 0.000256 - 39 3.65e-05 - 40 0.669 - 41 0.236 - 42 0.0203 - 43 0.00201 - 44 0.000914 - 45 0.000475 - 46 0.00132 - 47 0.00175 - - 64 335 5 0 - 40 0.887 - 41 0.0925 - 42 0.0149 - 43 0.00299 - 44 0.00299 - - 65 1 1 0 - 47 1 - - 66 76 6 0 - 2 0.0263 - 4 0.0132 - 34 0.0132 - 40 0.697 - 41 0.237 - 42 0.0132 - - 67 1 1 0 - 47 1 - - 72 3 2 0 - 40 0.333 - 42 0.667 - - 49 5 3 0 - 7 0.4 - 33 0.2 - 41 0.4 - - 50 2 2 0 - 0 0.5 - 7 0.5 - - 51 89 9 1 - 2 0.0112 - 4 0.0112 - 7 0.0112 - 26 0.0225 - 40 0.236 - 41 0.652 - 42 0.0337 - 46 0.0112 - 47 0.0112 - - 21 4 3 0 - 26 0.25 - 41 0.5 - 46 0.25 - - 58 20 13 2 - 0 0.1 - 2 0.05 - 4 0.15 - 7 0.05 - 15 0.1 - 19 0.1 - 20 0.05 - 32 0.05 - 33 0.05 - 35 0.05 - 40 0.05 - 41 0.1 - 45 0.1 - - 2 2 2 0 - 7 0.5 - 35 0.5 - - 72 5 4 0 - 0 0.4 - 4 0.2 - 15 0.2 - 33 0.2 - - 62 27403 33 15 - 0 0.0196 - 2 0.0177 - 4 0.00139 - 5 0.000219 - 7 0.00821 - 8 0.000146 - 12 0.00635 - 13 0.000365 - 14 0.000219 - 15 0.000438 - 19 0.00237 - 20 0.000182 - 21 0.00204 - 22 0.000109 - 26 0.00157 - 28 0.000328 - 29 0.00328 - 30 0.000438 - 31 0.000219 - 32 0.00168 - 33 0.00157 - 34 0.000292 - 35 7.3e-05 - 37 0.000255 - 39 3.65e-05 - 40 0.668 - 41 0.236 - 42 0.0204 - 43 0.00201 - 44 0.000912 - 45 0.000511 - 46 0.00139 - 47 0.00175 - - 4 201 8 0 - 0 0.00995 - 2 0.0498 - 7 0.00498 - 29 0.00498 - 30 0.00498 - 40 0.796 - 41 0.124 - 42 0.00498 - - 7 9838 29 0 - 0 0.00498 - 2 0.0176 - 4 0.00203 - 5 0.000305 - 7 0.00407 - 8 0.000102 - 12 0.00173 - 13 0.000203 - 14 0.000407 - 15 0.000813 - 19 0.00335 - 20 0.000203 - 21 0.00102 - 26 0.000712 - 28 0.000305 - 29 0.00122 - 32 0.000407 - 33 0.00152 - 34 0.000102 - 37 0.000203 - 39 0.000102 - 40 0.665 - 41 0.273 - 42 0.0147 - 43 0.00193 - 44 0.00061 - 45 0.000305 - 46 0.000813 - 47 0.00173 - - 13 50 6 0 - 2 0.02 - 7 0.02 - 40 0.68 - 41 0.22 - 42 0.04 - 46 0.02 - - 15 14 3 0 - 0 0.0714 - 33 0.0714 - 41 0.857 - - 21 118 6 0 - 2 0.00847 - 7 0.0169 - 40 0.525 - 41 0.432 - 42 0.00847 - 47 0.00847 - - 41 95 3 0 - 2 0.0105 - 40 0.905 - 41 0.0842 - - 45 132 6 0 - 35 0.00758 - 40 0.788 - 41 0.136 - 42 0.0303 - 46 0.0152 - 47 0.0227 - - 47 7896 30 0 - 0 0.0215 - 2 0.0193 - 4 0.000887 - 5 0.000127 - 7 0.0146 - 8 0.000253 - 12 0.0057 - 13 0.00038 - 15 0.000253 - 19 0.00127 - 21 0.00177 - 22 0.00038 - 26 0.00203 - 28 0.000253 - 29 0.0019 - 30 0.00076 - 31 0.000127 - 32 0.000633 - 33 0.00127 - 34 0.00038 - 35 0.000127 - 37 0.000633 - 40 0.769 - 41 0.135 - 42 0.0168 - 43 0.000633 - 44 0.00076 - 45 0.000253 - 46 0.00139 - 47 0.0019 - - 58 12 4 0 - 19 0.0833 - 40 0.667 - 41 0.167 - 43 0.0833 - - 68 2 2 0 - 19 0.5 - 46 0.5 - - 70 36 6 0 - 0 0.0278 - 12 0.0278 - 40 0.556 - 41 0.333 - 42 0.0278 - 44 0.0278 - - 71 1931 24 0 - 0 0.0109 - 2 0.0166 - 4 0.00311 - 5 0.000518 - 7 0.0088 - 12 0.00414 - 13 0.00104 - 14 0.00104 - 15 0.000518 - 19 0.00984 - 20 0.00104 - 21 0.00104 - 29 0.000518 - 31 0.000518 - 32 0.00104 - 34 0.000518 - 40 0.572 - 41 0.328 - 42 0.029 - 43 0.00363 - 44 0.00155 - 45 0.000518 - 46 0.00311 - 47 0.00104 - - 72 6697 28 0 - 0 0.0426 - 2 0.0166 - 4 0.000597 - 5 0.000149 - 7 0.00732 - 8 0.000149 - 12 0.0148 - 13 0.000448 - 15 0.000149 - 19 0.000149 - 20 0.000149 - 21 0.00433 - 26 0.00284 - 28 0.000597 - 29 0.00881 - 30 0.000747 - 31 0.000597 - 32 0.00523 - 33 0.00254 - 34 0.000448 - 40 0.579 - 41 0.274 - 42 0.03 - 43 0.00314 - 44 0.00119 - 45 0.00119 - 46 0.00134 - 47 0.00134 - - 73 320 12 0 - 0 0.025 - 2 0.0125 - 12 0.0125 - 21 0.00313 - 26 0.00313 - 29 0.00625 - 40 0.669 - 41 0.216 - 42 0.0406 - 43 0.00625 - 44 0.00313 - 47 0.00313 - - 74 14 2 0 - 4 0.0714 - 41 0.929 - - 64 690 9 3 - 2 0.281 - 7 0.00145 - 35 0.00145 - 40 0.432 - 41 0.243 - 42 0.0348 - 43 0.00145 - 44 0.00145 - 46 0.0029 - - 2 306 6 0 - 7 0.00327 - 40 0.892 - 41 0.0882 - 42 0.0098 - 43 0.00327 - 44 0.00327 - - 42 7 2 0 - 40 0.429 - 42 0.571 - - 47 337 5 0 - 2 0.561 - 35 0.00297 - 41 0.38 - 42 0.0504 - 46 0.00593 - - 65 1 1 0 - 47 1 - - 66 76 6 0 - 2 0.0263 - 4 0.0132 - 34 0.0132 - 40 0.697 - 41 0.237 - 42 0.0132 - - 67 2 2 0 - 40 0.5 - 47 0.5 - - 70 36 7 0 - 4 0.417 - 9 0.0278 - 14 0.0278 - 15 0.0278 - 19 0.444 - 20 0.0278 - 26 0.0278 - - 71 1951 27 2 - 0 0.000513 - 3 0.00718 - 4 0.281 - 5 0.0118 - 7 0.00923 - 8 0.0492 - 9 0.00154 - 10 0.00205 - 13 0.063 - 14 0.0866 - 15 0.121 - 16 0.00154 - 17 0.00205 - 19 0.255 - 20 0.0297 - 21 0.0128 - 26 0.0308 - 28 0.000513 - 29 0.00103 - 30 0.0118 - 31 0.00923 - 34 0.000513 - 35 0.000513 - 39 0.000513 - 40 0.000513 - 41 0.00871 - 45 0.00154 - - 2 1 1 0 - 28 1 - - 21 5 4 0 - 4 0.2 - 8 0.2 - 19 0.4 - 31 0.2 - - 72 6756 35 3 - 0 0.274 - 2 0.000296 - 3 0.00074 - 4 0.0333 - 5 0.000148 - 7 0.00873 - 8 0.00784 - 9 0.000444 - 10 0.000888 - 12 0.106 - 13 0.00562 - 14 0.00977 - 15 0.0255 - 16 0.000148 - 17 0.000148 - 18 0.000296 - 19 0.0598 - 20 0.0037 - 21 0.0465 - 22 0.000444 - 23 0.000148 - 26 0.00296 - 28 0.00252 - 29 0.172 - 30 0.000296 - 31 0.00237 - 32 0.083 - 33 0.141 - 34 0.000296 - 40 0.000148 - 41 0.00918 - 42 0.000296 - 43 0.000296 - 44 0.000296 - 45 0.000888 - - 44 2 1 0 - 43 1 - - 49 7 4 0 - 0 0.143 - 4 0.143 - 15 0.143 - 19 0.571 - - 60 3 2 0 - 4 0.667 - 8 0.333 - - 73 321 15 0 - 0 0.00623 - 3 0.0654 - 4 0.249 - 5 0.0187 - 8 0.0312 - 13 0.0623 - 14 0.112 - 15 0.159 - 16 0.00312 - 19 0.249 - 20 0.0125 - 21 0.00312 - 26 0.0156 - 39 0.00935 - 41 0.00312 - -65 580 13 7 - 2 0.00862 - 4 0.0069 - 19 0.00345 - 29 0.0069 - 30 0.00345 - 33 0.00345 - 37 0.00172 - 40 0.372 - 41 0.0069 - 42 0.0138 - 43 0.00172 - 46 0.0914 - 47 0.479 - - 2 1 1 0 - 37 1 - - 40 158 6 1 - 4 0.00633 - 41 0.00633 - 42 0.00633 - 43 0.00633 - 46 0.215 - 47 0.759 - - 72 1 1 0 - 42 1 - - 46 19 5 0 - 19 0.0526 - 29 0.105 - 33 0.0526 - 46 0.0526 - 47 0.737 - - 47 198 11 3 - 2 0.0101 - 4 0.0101 - 19 0.00505 - 29 0.0101 - 30 0.00505 - 33 0.00505 - 40 0.146 - 41 0.0101 - 42 0.0101 - 46 0.0859 - 47 0.702 - - 40 139 5 0 - 4 0.00719 - 41 0.00719 - 42 0.00719 - 46 0.115 - 47 0.863 - - 46 18 4 0 - 19 0.0556 - 29 0.111 - 33 0.0556 - 47 0.778 - - 67 32 7 0 - 2 0.0625 - 4 0.0312 - 30 0.0312 - 40 0.781 - 41 0.0312 - 42 0.0312 - 46 0.0312 - - 62 6 2 0 - 40 0.833 - 42 0.167 - - 65 2 2 0 - 2 0.5 - 40 0.5 - - 67 184 7 0 - 2 0.0109 - 4 0.00543 - 30 0.00543 - 40 0.946 - 41 0.00543 - 42 0.0217 - 46 0.00543 - -66 8140 31 21 - 0 0.00123 - 2 0.00147 - 3 0.00909 - 4 0.0339 - 5 0.000246 - 7 0.00823 - 8 0.0043 - 9 0.000246 - 13 0.00799 - 14 0.00381 - 15 0.177 - 16 0.000123 - 17 0.000123 - 19 0.00332 - 20 0.00209 - 21 0.00209 - 26 0.00135 - 30 0.00455 - 31 0.000369 - 34 0.000246 - 35 0.000369 - 37 0.000614 - 39 0.000123 - 40 0.239 - 41 0.0378 - 42 0.0108 - 43 0.000123 - 44 0.000123 - 45 0.00639 - 46 0.00541 - 47 0.438 - - 0 38 10 0 - 4 0.263 - 8 0.0789 - 13 0.0789 - 14 0.0526 - 15 0.316 - 17 0.0263 - 19 0.0789 - 20 0.0526 - 21 0.0263 - 31 0.0263 - - 2 4 4 0 - 0 0.25 - 20 0.25 - 21 0.25 - 30 0.25 - - 12 3 3 0 - 4 0.333 - 19 0.333 - 20 0.333 - - 28 1 1 0 - 3 1 - - 29 3 3 0 - 4 0.333 - 13 0.333 - 42 0.333 - - 32 1 1 0 - 13 1 - - 33 3 3 0 - 4 0.333 - 13 0.333 - 15 0.333 - - 40 1764 4 2 - 43 0.000567 - 45 0.0034 - 46 0.0227 - 47 0.973 - - 55 1602 4 0 - 43 0.000624 - 45 0.00375 - 46 0.00936 - 47 0.986 - - 62 82 2 0 - 46 0.293 - 47 0.707 - - 41 62 7 1 - 2 0.0484 - 4 0.0161 - 7 0.194 - 13 0.0161 - 21 0.0484 - 30 0.516 - 45 0.161 - - 64 2 1 0 - 21 1 - - 42 53 8 0 - 3 0.0189 - 4 0.0189 - 15 0.0189 - 21 0.0377 - 31 0.0189 - 40 0.0755 - 45 0.585 - 47 0.226 - - 45 45 9 2 - 4 0.178 - 5 0.0444 - 7 0.111 - 13 0.0444 - 19 0.378 - 35 0.0444 - 37 0.0444 - 44 0.0222 - 47 0.133 - - 40 6 1 0 - 47 1 - - 42 28 6 0 - 4 0.25 - 7 0.143 - 13 0.0357 - 19 0.464 - 35 0.0357 - 37 0.0714 - - 46 40 1 0 - 47 1 - - 47 2027 11 8 - 0 0.00148 - 2 0.00197 - 4 0.000493 - 19 0.000987 - 34 0.000493 - 40 0.0449 - 41 0.0607 - 42 0.00839 - 45 0.000493 - 46 0.000987 - 47 0.879 - - 40 1717 1 0 - 47 1 - - 46 40 1 0 - 47 1 - - 48 4 2 0 - 40 0.5 - 41 0.5 - - 55 174 9 0 - 0 0.0115 - 2 0.00575 - 19 0.0115 - 40 0.333 - 41 0.546 - 42 0.046 - 45 0.00575 - 46 0.0115 - 47 0.0287 - - 57 11 4 0 - 0 0.0909 - 40 0.182 - 41 0.364 - 42 0.364 - - 64 3 2 0 - 40 0.333 - 42 0.667 - - 66 1 1 0 - 42 1 - - 69 55 6 0 - 2 0.0545 - 4 0.0182 - 34 0.0182 - 40 0.491 - 41 0.382 - 42 0.0364 - - 48 6 3 0 - 7 0.167 - 40 0.5 - 41 0.333 - - 49 5 4 0 - 0 0.4 - 13 0.2 - 40 0.2 - 41 0.2 - - 55 1940 18 5 - 0 0.00103 - 2 0.000515 - 4 0.00258 - 7 0.017 - 8 0.00206 - 13 0.000515 - 14 0.000515 - 15 0.000515 - 19 0.00103 - 21 0.00206 - 26 0.00464 - 30 0.00103 - 40 0.856 - 41 0.0778 - 42 0.0278 - 45 0.00155 - 46 0.00103 - 47 0.00258 - - 0 38 7 0 - 2 0.0263 - 4 0.132 - 8 0.105 - 14 0.0263 - 21 0.0526 - 40 0.553 - 41 0.105 - - 12 3 3 0 - 21 0.333 - 40 0.333 - 41 0.333 - - 47 5 1 0 - 26 1 - - 55 8 3 0 - 7 0.25 - 40 0.625 - 41 0.125 - - 69 1873 14 0 - 0 0.00107 - 7 0.0166 - 13 0.000534 - 15 0.000534 - 19 0.00107 - 21 0.000534 - 26 0.0016 - 30 0.00107 - 40 0.868 - 41 0.0758 - 42 0.0278 - 45 0.0016 - 46 0.00107 - 47 0.00267 - - 57 52 9 3 - 0 0.0192 - 4 0.0385 - 7 0.154 - 8 0.0192 - 13 0.0192 - 21 0.0192 - 40 0.538 - 41 0.115 - 42 0.0769 - - 41 9 2 0 - 40 0.667 - 41 0.333 - - 55 34 8 0 - 0 0.0294 - 4 0.0588 - 7 0.235 - 8 0.0294 - 13 0.0294 - 21 0.0294 - 40 0.529 - 41 0.0588 - - 57 8 3 0 - 40 0.375 - 41 0.125 - 42 0.5 - - 62 85 2 0 - 40 0.976 - 42 0.0235 - - 64 28 3 1 - 40 0.786 - 41 0.0714 - 42 0.143 - - 47 3 2 0 - 41 0.667 - 42 0.333 - - 66 6 4 0 - 2 0.167 - 40 0.333 - 41 0.167 - 42 0.333 - - 69 1970 25 11 - 0 0.000508 - 2 0.00152 - 3 0.0365 - 4 0.124 - 7 0.00406 - 8 0.0137 - 9 0.00102 - 13 0.0269 - 14 0.0142 - 15 0.722 - 16 0.000508 - 19 0.00102 - 20 0.0066 - 21 0.00254 - 26 0.00102 - 30 0.00102 - 31 0.000508 - 34 0.000508 - 35 0.000508 - 37 0.00152 - 39 0.000508 - 40 0.0264 - 41 0.0107 - 42 0.00203 - 45 0.000508 - - 21 4 3 0 - 3 0.25 - 4 0.25 - 40 0.5 - - 41 231 7 0 - 3 0.0216 - 4 0.104 - 8 0.013 - 13 0.0346 - 14 0.0346 - 15 0.788 - 16 0.00433 - - 46 1168 6 0 - 3 0.0402 - 4 0.0753 - 8 0.00856 - 13 0.018 - 15 0.854 - 20 0.00342 - - 47 152 13 0 - 0 0.00658 - 3 0.0263 - 4 0.178 - 8 0.0197 - 13 0.0592 - 14 0.0197 - 15 0.605 - 19 0.0132 - 20 0.0395 - 21 0.00658 - 30 0.0132 - 31 0.00658 - 42 0.00658 - - 48 25 7 0 - 3 0.04 - 4 0.56 - 7 0.08 - 8 0.08 - 15 0.16 - 20 0.04 - 35 0.04 - - 49 54 9 0 - 3 0.037 - 4 0.463 - 8 0.037 - 9 0.0185 - 13 0.185 - 14 0.0741 - 15 0.0926 - 21 0.037 - 37 0.0556 - - 55 82 7 0 - 2 0.0366 - 4 0.0488 - 7 0.0122 - 34 0.0122 - 40 0.61 - 41 0.256 - 42 0.0244 - - 57 76 11 0 - 3 0.0526 - 4 0.382 - 7 0.0526 - 8 0.0132 - 13 0.0263 - 14 0.118 - 15 0.289 - 20 0.0132 - 21 0.0263 - 39 0.0132 - 45 0.0132 - - 58 6 4 0 - 4 0.333 - 7 0.167 - 15 0.167 - 26 0.333 - - 62 111 5 0 - 3 0.0541 - 4 0.045 - 8 0.00901 - 13 0.018 - 15 0.874 - - 69 54 9 0 - 3 0.0185 - 4 0.407 - 8 0.0926 - 9 0.0185 - 13 0.0185 - 14 0.0741 - 15 0.333 - 20 0.0185 - 42 0.0185 - -67 1431 33 20 - 0 0.0314 - 1 0.000699 - 2 0.00699 - 4 0.0664 - 5 0.0021 - 7 0.0175 - 8 0.0133 - 12 0.000699 - 13 0.0175 - 14 0.00559 - 15 0.0182 - 16 0.0014 - 17 0.000699 - 19 0.0783 - 20 0.000699 - 21 0.051 - 24 0.000699 - 26 0.0021 - 28 0.0783 - 29 0.0014 - 30 0.0168 - 31 0.00839 - 32 0.0028 - 34 0.000699 - 35 0.0028 - 37 0.0014 - 40 0.366 - 41 0.0175 - 42 0.00978 - 43 0.0028 - 45 0.0014 - 46 0.0266 - 47 0.148 - - 0 167 12 1 - 4 0.299 - 5 0.018 - 7 0.024 - 8 0.018 - 13 0.0599 - 14 0.018 - 15 0.108 - 16 0.00599 - 17 0.00599 - 19 0.311 - 21 0.108 - 30 0.024 - - 2 8 3 0 - 13 0.125 - 15 0.125 - 19 0.75 - - 2 5 4 0 - 0 0.4 - 12 0.2 - 13 0.2 - 35 0.2 - - 12 94 11 0 - 0 0.0426 - 4 0.202 - 8 0.0106 - 13 0.0319 - 14 0.0319 - 15 0.0532 - 19 0.447 - 20 0.0106 - 21 0.106 - 28 0.0532 - 45 0.0106 - - 14 2 1 0 - 4 1 - - 21 28 6 1 - 4 0.286 - 13 0.0714 - 15 0.0357 - 16 0.0357 - 19 0.536 - 30 0.0357 - - 55 2 2 0 - 15 0.5 - 30 0.5 - - 40 130 8 1 - 0 0.00769 - 4 0.00769 - 35 0.00769 - 40 0.0231 - 41 0.0154 - 42 0.0154 - 46 0.146 - 47 0.777 - - 40 3 2 0 - 40 0.667 - 47 0.333 - - 41 11 6 0 - 0 0.0909 - 2 0.273 - 4 0.0909 - 7 0.273 - 21 0.0909 - 28 0.182 - - 45 2 2 0 - 15 0.5 - 37 0.5 - - 46 8 4 0 - 7 0.125 - 28 0.125 - 43 0.125 - 47 0.625 - - 47 342 12 7 - 0 0.00292 - 2 0.00877 - 4 0.00292 - 7 0.00585 - 30 0.00292 - 35 0.00292 - 40 0.576 - 41 0.0175 - 42 0.0205 - 43 0.00585 - 46 0.0439 - 47 0.31 - - 40 120 7 0 - 0 0.00833 - 4 0.00833 - 35 0.00833 - 41 0.0167 - 42 0.0167 - 46 0.1 - 47 0.842 - - 46 7 3 0 - 7 0.143 - 43 0.143 - 47 0.714 - - 48 8 2 0 - 40 0.875 - 41 0.125 - - 55 14 3 0 - 40 0.786 - 42 0.0714 - 46 0.143 - - 57 8 2 0 - 7 0.125 - 40 0.875 - - 69 176 5 0 - 2 0.017 - 30 0.00568 - 40 0.943 - 41 0.017 - 42 0.017 - - 73 1 1 0 - 43 1 - - 48 23 5 0 - 7 0.13 - 21 0.0435 - 26 0.0435 - 40 0.739 - 41 0.0435 - - 49 29 11 0 - 0 0.138 - 4 0.069 - 7 0.0345 - 8 0.069 - 13 0.0345 - 21 0.0345 - 28 0.414 - 29 0.0345 - 30 0.0345 - 40 0.103 - 41 0.0345 - - 55 278 19 8 - 0 0.112 - 4 0.036 - 7 0.0324 - 8 0.0468 - 13 0.0288 - 14 0.00719 - 21 0.144 - 24 0.0036 - 26 0.00719 - 28 0.331 - 29 0.0036 - 30 0.0576 - 31 0.0432 - 32 0.0144 - 37 0.0036 - 40 0.0935 - 41 0.0216 - 42 0.0036 - 46 0.0108 - - 0 145 17 0 - 0 0.0621 - 4 0.0621 - 7 0.0414 - 8 0.0552 - 13 0.0414 - 21 0.193 - 24 0.0069 - 26 0.0138 - 28 0.248 - 29 0.0069 - 30 0.11 - 31 0.0828 - 32 0.0207 - 37 0.0069 - 40 0.0345 - 41 0.0069 - 42 0.0069 - - 12 75 6 0 - 0 0.253 - 21 0.107 - 28 0.587 - 32 0.0133 - 40 0.0133 - 41 0.0267 - - 14 2 1 0 - 13 1 - - 21 27 8 0 - 0 0.111 - 4 0.037 - 8 0.148 - 14 0.037 - 21 0.0741 - 28 0.444 - 40 0.111 - 41 0.037 - - 45 1 1 0 - 46 1 - - 49 4 3 0 - 21 0.25 - 40 0.5 - 41 0.25 - - 55 16 3 0 - 7 0.0625 - 40 0.812 - 46 0.125 - - 69 5 5 0 - 7 0.2 - 8 0.2 - 14 0.2 - 21 0.2 - 41 0.2 - - 57 11 3 0 - 7 0.0909 - 40 0.818 - 41 0.0909 - - 58 2 2 0 - 34 0.5 - 45 0.5 - - 62 6 3 0 - 4 0.167 - 40 0.667 - 41 0.167 - - 64 10 2 0 - 40 0.9 - 41 0.1 - - 67 13 7 1 - 0 0.0769 - 2 0.0769 - 7 0.0769 - 35 0.0769 - 40 0.385 - 41 0.231 - 46 0.0769 - - 47 5 3 0 - 0 0.2 - 2 0.2 - 41 0.6 - - 69 267 9 1 - 1 0.00375 - 2 0.0112 - 15 0.00375 - 19 0.0112 - 21 0.00749 - 30 0.00375 - 40 0.936 - 41 0.0112 - 42 0.0112 - - 47 56 8 0 - 1 0.0179 - 2 0.0179 - 15 0.0179 - 19 0.0357 - 21 0.0357 - 30 0.0179 - 40 0.821 - 42 0.0357 - - 73 1 1 0 - 43 1 - -68 1301 34 22 - 0 0.00692 - 2 0.00692 - 3 0.000769 - 4 0.0208 - 6 0.000769 - 7 0.0653 - 8 0.0507 - 9 0.00922 - 12 0.000769 - 13 0.119 - 14 0.175 - 15 0.00999 - 16 0.00154 - 19 0.00231 - 20 0.00154 - 21 0.0515 - 22 0.00384 - 23 0.000769 - 26 0.0146 - 29 0.00461 - 30 0.0123 - 31 0.0138 - 32 0.00461 - 34 0.000769 - 35 0.000769 - 36 0.000769 - 37 0.00461 - 40 0.271 - 41 0.0953 - 42 0.0238 - 44 0.000769 - 45 0.00231 - 46 0.00384 - 47 0.0184 - - 2 253 25 10 - 0 0.00395 - 3 0.00395 - 4 0.0553 - 6 0.00395 - 7 0.233 - 8 0.103 - 9 0.0474 - 12 0.00395 - 13 0.0356 - 15 0.00395 - 19 0.00395 - 20 0.00791 - 21 0.241 - 22 0.0198 - 23 0.00395 - 26 0.0474 - 29 0.00791 - 30 0.0593 - 31 0.0593 - 35 0.00395 - 36 0.00395 - 37 0.0237 - 41 0.00791 - 44 0.00395 - 45 0.0119 - - 15 2 1 0 - 8 1 - - 41 45 16 0 - 0 0.0222 - 3 0.0222 - 4 0.0667 - 6 0.0222 - 7 0.2 - 8 0.0889 - 9 0.0222 - 13 0.0444 - 21 0.2 - 22 0.0444 - 26 0.0667 - 29 0.0444 - 30 0.0222 - 31 0.0667 - 36 0.0222 - 37 0.0444 - - 46 3 2 0 - 8 0.333 - 45 0.667 - - 48 47 10 0 - 4 0.128 - 7 0.213 - 8 0.0426 - 12 0.0213 - 13 0.0426 - 21 0.234 - 30 0.128 - 31 0.149 - 41 0.0213 - 45 0.0213 - - 49 27 7 0 - 7 0.63 - 8 0.037 - 15 0.037 - 20 0.037 - 21 0.111 - 23 0.037 - 30 0.111 - - 55 47 14 0 - 4 0.0426 - 7 0.106 - 8 0.0851 - 9 0.213 - 13 0.0213 - 19 0.0213 - 21 0.298 - 22 0.0213 - 26 0.0638 - 30 0.0213 - 31 0.0426 - 35 0.0213 - 37 0.0213 - 41 0.0213 - - 57 51 12 0 - 4 0.0588 - 7 0.157 - 8 0.0196 - 9 0.0196 - 13 0.0588 - 21 0.373 - 22 0.0196 - 26 0.118 - 30 0.0784 - 31 0.0588 - 37 0.0196 - 44 0.0196 - - 62 7 2 0 - 7 0.857 - 21 0.143 - - 66 1 1 0 - 20 1 - - 69 15 5 0 - 7 0.0667 - 8 0.6 - 13 0.0667 - 21 0.2 - 22 0.0667 - - 8 111 5 0 - 8 0.117 - 13 0.306 - 14 0.559 - 16 0.00901 - 42 0.00901 - - 13 51 3 0 - 13 0.333 - 14 0.627 - 41 0.0392 - - 14 13 2 0 - 13 0.538 - 14 0.462 - - 15 18 4 0 - 8 0.167 - 13 0.222 - 14 0.389 - 15 0.222 - - 21 9 5 0 - 4 0.222 - 7 0.222 - 8 0.333 - 21 0.111 - 26 0.111 - - 30 4 1 0 - 13 1 - - 40 12 2 0 - 46 0.0833 - 47 0.917 - - 41 10 8 0 - 2 0.1 - 4 0.1 - 7 0.1 - 8 0.1 - 13 0.2 - 19 0.1 - 21 0.2 - 31 0.1 - - 42 2 2 0 - 34 0.5 - 47 0.5 - - 45 3 3 0 - 4 0.333 - 8 0.333 - 30 0.333 - - 46 1 1 0 - 46 1 - - 47 494 20 17 - 0 0.0081 - 2 0.0081 - 4 0.0081 - 7 0.0142 - 8 0.0344 - 13 0.148 - 14 0.231 - 15 0.0101 - 16 0.00202 - 19 0.00202 - 21 0.00202 - 26 0.00607 - 29 0.00405 - 31 0.00202 - 32 0.00607 - 40 0.344 - 41 0.113 - 42 0.0283 - 46 0.00405 - 47 0.0243 - - 7 1 1 0 - 4 1 - - 8 110 4 0 - 8 0.118 - 13 0.309 - 14 0.564 - 16 0.00909 - - 13 49 2 0 - 13 0.347 - 14 0.653 - - 14 13 2 0 - 13 0.538 - 14 0.462 - - 15 18 4 0 - 8 0.167 - 13 0.222 - 14 0.389 - 15 0.222 - - 30 4 1 0 - 13 1 - - 40 12 2 0 - 46 0.0833 - 47 0.917 - - 41 6 5 0 - 4 0.167 - 7 0.167 - 13 0.333 - 19 0.167 - 31 0.167 - - 46 1 1 0 - 46 1 - - 48 45 9 0 - 2 0.0444 - 7 0.0889 - 13 0.0444 - 14 0.0444 - 26 0.0222 - 32 0.0444 - 40 0.533 - 41 0.111 - 42 0.0667 - - 49 46 7 0 - 0 0.0435 - 2 0.0217 - 7 0.0435 - 26 0.0217 - 32 0.0217 - 40 0.63 - 41 0.217 - - 55 38 6 0 - 14 0.0526 - 15 0.0263 - 29 0.0263 - 40 0.605 - 41 0.211 - 42 0.0789 - - 57 69 7 0 - 0 0.0145 - 2 0.0145 - 21 0.0145 - 29 0.0145 - 40 0.652 - 41 0.232 - 42 0.058 - - 62 17 4 0 - 4 0.0588 - 40 0.647 - 41 0.235 - 42 0.0588 - - 64 21 3 0 - 40 0.714 - 41 0.238 - 42 0.0476 - - 69 34 6 0 - 0 0.0294 - 13 0.0588 - 26 0.0294 - 40 0.618 - 41 0.206 - 42 0.0588 - - 71 1 1 0 - 4 1 - - 48 50 10 0 - 2 0.04 - 4 0.02 - 7 0.1 - 13 0.04 - 14 0.04 - 26 0.02 - 32 0.04 - 40 0.48 - 41 0.16 - 42 0.06 - - 49 57 10 0 - 0 0.0351 - 2 0.0175 - 4 0.0175 - 7 0.14 - 8 0.0351 - 26 0.0175 - 31 0.0175 - 32 0.0175 - 40 0.509 - 41 0.193 - - 55 48 6 0 - 14 0.0417 - 15 0.0417 - 29 0.0208 - 40 0.583 - 41 0.229 - 42 0.0833 - - 57 70 7 0 - 0 0.0143 - 2 0.0143 - 21 0.0143 - 29 0.0143 - 40 0.643 - 41 0.243 - 42 0.0571 - - 58 3 2 0 - 7 0.667 - 14 0.333 - - 62 21 4 0 - 4 0.0476 - 40 0.714 - 41 0.19 - 42 0.0476 - - 64 23 4 0 - 7 0.0435 - 40 0.696 - 41 0.217 - 42 0.0435 - - 65 1 1 0 - 46 1 - - 69 35 7 0 - 0 0.0286 - 13 0.0571 - 15 0.0286 - 26 0.0286 - 40 0.6 - 41 0.2 - 42 0.0571 - -69 482293 48 46 - 0 0.0224 - 1 0.00057 - 2 0.0308 - 3 0.00808 - 4 0.0469 - 5 0.000257 - 6 4.15e-05 - 7 0.0864 - 8 0.0202 - 9 0.00219 - 10 0.000199 - 11 2.07e-06 - 12 0.00331 - 13 0.0122 - 14 0.00875 - 15 0.014 - 16 8.5e-05 - 17 0.000261 - 18 8.29e-06 - 19 0.00971 - 20 0.00668 - 21 0.0342 - 22 0.00161 - 23 0.000114 - 24 0.00542 - 25 4.15e-06 - 26 0.0285 - 27 5.81e-05 - 28 0.0407 - 29 0.00358 - 30 0.0133 - 31 0.0242 - 32 0.000977 - 33 0.0015 - 34 0.000506 - 35 0.000666 - 36 4.15e-06 - 37 0.00212 - 38 2.28e-05 - 39 0.00219 - 40 0.418 - 41 0.127 - 42 0.0138 - 43 0.00104 - 44 0.00067 - 45 0.00305 - 46 0.0022 - 47 0.00131 - - 0 33826 40 4 - 0 0.0458 - 1 0.00556 - 2 0.000887 - 3 0.0145 - 4 0.115 - 5 5.91e-05 - 7 0.0456 - 8 0.1 - 9 0.00955 - 10 0.000237 - 12 5.91e-05 - 13 0.021 - 14 0.00958 - 15 0.00695 - 16 0.000118 - 17 0.000562 - 19 0.00251 - 20 0.00364 - 21 0.192 - 22 0.00514 - 23 0.000828 - 24 0.000769 - 26 0.0203 - 27 2.96e-05 - 28 0.00304 - 29 0.00263 - 30 0.0892 - 31 0.274 - 33 8.87e-05 - 34 0.000148 - 35 0.00106 - 37 0.00154 - 39 0.00585 - 40 0.00411 - 41 0.00532 - 42 0.00101 - 43 0.000148 - 44 0.000384 - 45 0.0103 - 46 0.000148 - - 44 1 1 0 - 43 1 - - 45 6 4 0 - 4 0.167 - 8 0.167 - 21 0.5 - 26 0.167 - - 49 55 14 0 - 0 0.0364 - 3 0.0909 - 4 0.127 - 8 0.0727 - 9 0.0364 - 13 0.0545 - 14 0.0182 - 15 0.0182 - 21 0.164 - 26 0.0364 - 30 0.0909 - 31 0.218 - 41 0.0182 - 42 0.0182 - - 57 7 5 0 - 8 0.143 - 13 0.143 - 21 0.429 - 30 0.143 - 31 0.143 - - 1 555 21 1 - 0 0.027 - 3 0.00901 - 4 0.11 - 7 0.0126 - 8 0.0613 - 9 0.00721 - 13 0.0342 - 14 0.00901 - 15 0.00721 - 17 0.0018 - 19 0.0036 - 20 0.00541 - 21 0.0541 - 22 0.0018 - 26 0.0234 - 28 0.0018 - 29 0.0396 - 31 0.577 - 35 0.0018 - 40 0.0018 - 45 0.0108 - - 49 6 3 0 - 0 0.167 - 3 0.167 - 31 0.667 - - 2 3483 26 11 - 0 0.152 - 1 0.00258 - 3 0.00632 - 4 0.00718 - 7 0.0135 - 8 0.0126 - 9 0.00201 - 12 0.0617 - 13 0.00689 - 14 0.00402 - 15 0.00144 - 20 0.00172 - 21 0.0939 - 22 0.00172 - 23 0.000287 - 26 0.0284 - 28 0.159 - 29 0.194 - 30 0.0764 - 31 0.0485 - 32 0.0356 - 33 0.0744 - 39 0.00172 - 41 0.0089 - 42 0.000574 - 45 0.00488 - - 0 2 2 0 - 4 0.5 - 30 0.5 - - 28 1 1 0 - 13 1 - - 31 1 1 0 - 8 1 - - 41 654 21 0 - 0 0.19 - 1 0.00306 - 3 0.00765 - 4 0.00917 - 7 0.0291 - 8 0.00612 - 9 0.00153 - 12 0.0765 - 13 0.00306 - 14 0.00306 - 21 0.15 - 22 0.00459 - 26 0.0352 - 28 0.0703 - 29 0.226 - 30 0.052 - 31 0.0138 - 32 0.0291 - 33 0.081 - 41 0.00306 - 45 0.00612 - - 42 39 13 0 - 0 0.103 - 4 0.0256 - 7 0.0769 - 12 0.103 - 21 0.154 - 26 0.0256 - 28 0.128 - 29 0.154 - 30 0.0513 - 31 0.0513 - 32 0.0513 - 33 0.0256 - 41 0.0513 - - 46 38 9 0 - 0 0.132 - 12 0.0789 - 21 0.105 - 28 0.105 - 29 0.289 - 30 0.0263 - 31 0.0526 - 33 0.158 - 45 0.0526 - - 47 1 1 0 - 4 1 - - 55 4 4 0 - 8 0.25 - 21 0.25 - 29 0.25 - 30 0.25 - - 57 2 2 0 - 3 0.5 - 7 0.5 - - 58 5 5 0 - 12 0.2 - 21 0.2 - 28 0.2 - 30 0.2 - 45 0.2 - - 69 2736 26 0 - 0 0.144 - 1 0.00256 - 3 0.00585 - 4 0.00585 - 7 0.00877 - 8 0.0139 - 9 0.00219 - 12 0.0574 - 13 0.00768 - 14 0.00439 - 15 0.00183 - 20 0.00219 - 21 0.0793 - 22 0.0011 - 23 0.000365 - 26 0.0274 - 28 0.182 - 29 0.186 - 30 0.0826 - 31 0.057 - 32 0.0376 - 33 0.0727 - 39 0.00219 - 41 0.00987 - 42 0.000731 - 45 0.00365 - - 4 42 14 2 - 0 0.0238 - 4 0.0238 - 6 0.0238 - 7 0.143 - 8 0.0952 - 13 0.0238 - 16 0.0238 - 21 0.0952 - 28 0.0952 - 29 0.0952 - 30 0.0952 - 31 0.214 - 32 0.0238 - 45 0.0238 - - 0 34 12 0 - 0 0.0294 - 4 0.0294 - 6 0.0294 - 7 0.118 - 8 0.118 - 13 0.0294 - 16 0.0294 - 21 0.0882 - 29 0.118 - 30 0.118 - 31 0.265 - 45 0.0294 - - 12 4 2 0 - 28 0.75 - 32 0.25 - - 7 36 11 4 - 4 0.139 - 7 0.0556 - 8 0.0833 - 13 0.0278 - 14 0.0278 - 19 0.0278 - 20 0.0278 - 26 0.472 - 28 0.0556 - 37 0.0278 - 41 0.0556 - - 29 2 2 0 - 8 0.5 - 13 0.5 - - 30 3 3 0 - 4 0.333 - 7 0.333 - 41 0.333 - - 47 23 5 0 - 4 0.13 - 8 0.087 - 14 0.0435 - 19 0.0435 - 26 0.696 - - 69 3 2 0 - 28 0.667 - 37 0.333 - - 8 152 17 2 - 2 0.0329 - 3 0.0132 - 4 0.0329 - 7 0.395 - 8 0.0329 - 13 0.0658 - 14 0.0724 - 15 0.0197 - 20 0.0197 - 21 0.0395 - 22 0.00658 - 24 0.0132 - 26 0.0855 - 32 0.00658 - 40 0.125 - 41 0.0263 - 46 0.0132 - - 45 2 1 0 - 46 1 - - 49 22 7 0 - 4 0.0455 - 7 0.5 - 14 0.0455 - 21 0.0455 - 26 0.0909 - 40 0.227 - 41 0.0455 - - 12 9666 21 2 - 0 0.291 - 2 0.000724 - 4 0.000828 - 7 0.00197 - 12 0.000207 - 13 0.00031 - 21 0.171 - 22 0.00124 - 23 0.000207 - 26 0.00331 - 28 0.517 - 29 0.000621 - 31 0.000517 - 32 0.000103 - 40 0.00207 - 41 0.00331 - 42 0.000724 - 43 0.000103 - 44 0.000207 - 45 0.00455 - 46 0.000207 - - 41 4 1 0 - 0 1 - - 44 1 1 0 - 43 1 - - 13 297 26 2 - 0 0.0101 - 2 0.0168 - 3 0.0135 - 4 0.0976 - 7 0.256 - 8 0.0168 - 9 0.00337 - 12 0.0101 - 13 0.0404 - 14 0.111 - 15 0.0202 - 19 0.00673 - 20 0.0101 - 21 0.0438 - 22 0.00337 - 24 0.0707 - 26 0.0606 - 29 0.00337 - 30 0.0135 - 31 0.00337 - 39 0.00337 - 40 0.0707 - 41 0.0909 - 42 0.0135 - 45 0.00337 - 46 0.00673 - - 2 3 3 0 - 7 0.333 - 13 0.333 - 46 0.333 - - 45 1 1 0 - 46 1 - - 14 122 18 0 - 2 0.0164 - 4 0.082 - 7 0.197 - 8 0.0328 - 13 0.0246 - 14 0.082 - 15 0.0164 - 19 0.0082 - 21 0.0246 - 24 0.041 - 26 0.246 - 30 0.0246 - 31 0.0082 - 32 0.0082 - 34 0.0082 - 37 0.0164 - 40 0.0984 - 41 0.0656 - - 15 35 10 0 - 4 0.114 - 7 0.143 - 15 0.514 - 19 0.0286 - 21 0.0286 - 24 0.0286 - 26 0.0286 - 32 0.0286 - 42 0.0286 - 46 0.0571 - - 18 27 10 0 - 3 0.037 - 7 0.185 - 8 0.296 - 9 0.148 - 13 0.0741 - 14 0.0741 - 15 0.037 - 20 0.0741 - 37 0.037 - 45 0.037 - - 21 4005 31 12 - 0 0.146 - 1 0.0035 - 2 0.00025 - 3 0.0015 - 4 0.0442 - 7 0.0215 - 8 0.0662 - 9 0.00025 - 12 0.000749 - 13 0.0115 - 14 0.00175 - 15 0.00125 - 20 0.00225 - 21 0.0969 - 24 0.000499 - 26 0.00449 - 28 0.405 - 29 0.0135 - 30 0.04 - 31 0.118 - 32 0.000749 - 33 0.000749 - 35 0.000749 - 37 0.000749 - 40 0.00874 - 41 0.00524 - 42 0.00125 - 43 0.00025 - 45 0.002 - 46 0.00025 - 47 0.00025 - - 0 2915 27 0 - 0 0.0803 - 1 0.0048 - 2 0.000343 - 3 0.00172 - 4 0.0583 - 7 0.0274 - 8 0.0864 - 9 0.000343 - 13 0.0141 - 14 0.0024 - 15 0.00172 - 20 0.00309 - 21 0.113 - 24 0.000343 - 26 0.0024 - 28 0.352 - 29 0.0151 - 30 0.0528 - 31 0.162 - 32 0.000343 - 35 0.00103 - 37 0.00103 - 40 0.0103 - 41 0.00515 - 42 0.00137 - 43 0.000343 - 45 0.00172 - - 2 30 12 0 - 0 0.0333 - 4 0.0333 - 8 0.0333 - 12 0.1 - 21 0.0667 - 28 0.267 - 29 0.2 - 30 0.0667 - 31 0.0333 - 32 0.0333 - 33 0.0667 - 41 0.0667 - - 12 987 12 0 - 0 0.347 - 3 0.00101 - 4 0.00101 - 7 0.00304 - 21 0.0466 - 26 0.00101 - 28 0.588 - 40 0.00405 - 41 0.00405 - 42 0.00101 - 45 0.00304 - 46 0.00101 - - 21 3 2 0 - 8 0.667 - 28 0.333 - - 28 1 1 0 - 47 1 - - 32 7 6 0 - 4 0.143 - 13 0.286 - 26 0.143 - 29 0.143 - 30 0.143 - 40 0.143 - - 33 1 1 0 - 13 1 - - 41 20 9 0 - 0 0.05 - 7 0.05 - 13 0.05 - 21 0.15 - 26 0.2 - 28 0.25 - 29 0.15 - 30 0.05 - 33 0.05 - - 42 1 1 0 - 32 1 - - 45 4 2 0 - 8 0.5 - 21 0.5 - - 47 12 7 0 - 0 0.0833 - 4 0.167 - 7 0.0833 - 8 0.0833 - 13 0.0833 - 21 0.0833 - 26 0.417 - - 49 21 8 0 - 0 0.143 - 4 0.0952 - 7 0.0476 - 8 0.333 - 21 0.19 - 24 0.0476 - 30 0.0952 - 31 0.0476 - - 22 5 3 0 - 26 0.2 - 41 0.6 - 42 0.2 - - 25 2 1 0 - 6 1 - - 26 13048 19 0 - 0 0.112 - 1 7.66e-05 - 4 0.000307 - 7 0.000153 - 8 0.000613 - 13 0.0036 - 15 0.000153 - 21 0.0082 - 22 0.00107 - 28 0.867 - 29 0.00023 - 30 0.000153 - 31 0.000153 - 40 0.000996 - 41 0.000536 - 42 7.66e-05 - 44 0.000153 - 45 0.00429 - 46 0.000153 - - 28 20867 44 10 - 0 0.00192 - 1 0.000335 - 2 0.00441 - 3 0.0235 - 4 0.245 - 5 0.000671 - 6 9.58e-05 - 7 0.129 - 8 0.073 - 9 0.0104 - 10 0.000767 - 12 0.000575 - 13 0.0718 - 14 0.0604 - 15 0.0381 - 16 0.000575 - 17 0.00163 - 18 0.000192 - 19 0.0453 - 20 0.054 - 21 0.0454 - 22 0.00407 - 23 9.58e-05 - 24 0.0409 - 26 0.0441 - 27 0.000144 - 28 0.00565 - 30 0.0123 - 31 0.00398 - 33 4.79e-05 - 34 0.000863 - 35 0.0046 - 36 4.79e-05 - 37 0.00666 - 38 0.000144 - 39 0.0102 - 40 0.0288 - 41 0.0185 - 42 0.00259 - 43 0.000192 - 44 0.0012 - 45 0.00474 - 46 0.00264 - 47 0.000144 - - 2 142 19 0 - 3 0.0211 - 4 0.296 - 7 0.0493 - 8 0.0915 - 13 0.0704 - 14 0.12 - 15 0.0282 - 16 0.00704 - 19 0.0563 - 20 0.0423 - 21 0.0211 - 31 0.00704 - 35 0.00704 - 37 0.00704 - 40 0.0634 - 41 0.0704 - 42 0.0211 - 44 0.00704 - 45 0.0141 - - 13 3 2 0 - 4 0.667 - 46 0.333 - - 21 8 7 0 - 4 0.25 - 8 0.125 - 13 0.125 - 19 0.125 - 21 0.125 - 41 0.125 - 42 0.125 - - 42 5 3 0 - 4 0.6 - 14 0.2 - 24 0.2 - - 44 1 1 0 - 43 1 - - 45 34 10 0 - 2 0.0294 - 4 0.0882 - 7 0.0294 - 13 0.0294 - 17 0.0294 - 21 0.118 - 24 0.0294 - 35 0.0294 - 40 0.0294 - 46 0.588 - - 47 20444 44 0 - 0 0.00196 - 1 0.000342 - 2 0.0044 - 3 0.0238 - 4 0.243 - 5 0.000685 - 6 9.78e-05 - 7 0.131 - 8 0.0732 - 9 0.0105 - 10 0.000783 - 12 0.000587 - 13 0.072 - 14 0.0602 - 15 0.038 - 16 0.000538 - 17 0.00161 - 18 0.000196 - 19 0.0453 - 20 0.0539 - 21 0.0458 - 22 0.00406 - 23 9.78e-05 - 24 0.0412 - 26 0.0446 - 27 9.78e-05 - 28 0.00577 - 30 0.0125 - 31 0.00401 - 33 4.89e-05 - 34 0.00088 - 35 0.00445 - 36 4.89e-05 - 37 0.00675 - 38 0.000147 - 39 0.0103 - 40 0.0288 - 41 0.018 - 42 0.00235 - 43 0.000147 - 44 0.00113 - 45 0.0047 - 46 0.00157 - 47 0.000147 - - 49 216 24 0 - 2 0.00463 - 4 0.352 - 7 0.0694 - 8 0.0602 - 9 0.00463 - 13 0.0556 - 14 0.0509 - 15 0.0741 - 19 0.0463 - 20 0.088 - 21 0.0185 - 22 0.00926 - 24 0.0417 - 26 0.0417 - 27 0.00463 - 30 0.00926 - 35 0.0139 - 39 0.00463 - 40 0.00463 - 41 0.0185 - 42 0.00926 - 44 0.00463 - 45 0.00463 - 46 0.00926 - - 50 3 3 0 - 4 0.333 - 40 0.333 - 41 0.333 - - 57 3 3 0 - 3 0.333 - 4 0.333 - 8 0.333 - - 29 21672 44 8 - 0 0.00198 - 1 9.23e-05 - 2 0.0024 - 3 0.0832 - 4 0.195 - 5 0.00157 - 6 4.61e-05 - 7 0.138 - 8 0.0454 - 9 0.00655 - 10 0.00111 - 12 0.000554 - 13 0.0358 - 14 0.0287 - 15 0.0713 - 16 0.000138 - 17 0.000738 - 19 0.0812 - 20 0.0351 - 21 0.0391 - 22 0.00401 - 23 0.000231 - 24 0.0213 - 26 0.072 - 27 0.000138 - 28 0.00263 - 29 0.000277 - 30 0.00992 - 31 0.00291 - 32 4.61e-05 - 33 0.000231 - 34 0.000185 - 35 0.000738 - 37 0.00175 - 38 0.000138 - 39 0.0162 - 40 0.0611 - 41 0.0302 - 42 0.00392 - 43 0.000138 - 44 0.000138 - 45 0.00383 - 46 0.000461 - 47 4.61e-05 - - 2 33 13 0 - 3 0.0606 - 4 0.273 - 7 0.152 - 8 0.0909 - 13 0.0303 - 14 0.0303 - 19 0.0606 - 20 0.0606 - 24 0.0303 - 40 0.0303 - 41 0.121 - 42 0.0303 - 45 0.0303 - - 41 6 6 0 - 4 0.167 - 14 0.167 - 20 0.167 - 26 0.167 - 28 0.167 - 42 0.167 - - 44 1 1 0 - 43 1 - - 45 14 7 0 - 4 0.214 - 7 0.143 - 14 0.0714 - 19 0.0714 - 21 0.0714 - 27 0.0714 - 46 0.357 - - 47 21324 44 0 - 0 0.00202 - 1 9.38e-05 - 2 0.00234 - 3 0.0843 - 4 0.193 - 5 0.00159 - 6 4.69e-05 - 7 0.138 - 8 0.0455 - 9 0.00642 - 10 0.00113 - 12 0.000563 - 13 0.0356 - 14 0.0286 - 15 0.0715 - 16 0.000141 - 17 0.00075 - 19 0.0818 - 20 0.0347 - 21 0.039 - 22 0.00394 - 23 0.000234 - 24 0.0213 - 26 0.0718 - 27 9.38e-05 - 28 0.00263 - 29 0.000281 - 30 0.00994 - 31 0.00281 - 32 4.69e-05 - 33 0.000234 - 34 0.000141 - 35 0.000703 - 37 0.00169 - 38 0.000141 - 39 0.0164 - 40 0.0618 - 41 0.0303 - 42 0.00389 - 43 9.38e-05 - 44 0.000141 - 45 0.00385 - 46 0.000141 - 47 4.69e-05 - - 49 281 24 0 - 2 0.00712 - 3 0.0178 - 4 0.267 - 7 0.142 - 8 0.0356 - 9 0.0142 - 13 0.0463 - 14 0.0285 - 15 0.0783 - 19 0.0356 - 20 0.0498 - 21 0.0498 - 22 0.0107 - 24 0.0249 - 26 0.103 - 30 0.0107 - 31 0.0107 - 34 0.00356 - 35 0.00356 - 37 0.00712 - 39 0.00712 - 40 0.0214 - 41 0.0178 - 46 0.00712 - - 55 5 4 0 - 7 0.2 - 13 0.2 - 19 0.4 - 20 0.2 - - 57 7 5 0 - 4 0.429 - 9 0.143 - 14 0.143 - 19 0.143 - 20 0.143 - - 30 11209 39 4 - 0 0.00241 - 2 0.00419 - 3 0.0186 - 4 0.22 - 5 0.000357 - 7 0.173 - 8 0.078 - 9 0.0106 - 10 0.000892 - 12 0.000178 - 13 0.0741 - 14 0.0694 - 15 0.0376 - 16 0.000714 - 17 0.00143 - 19 0.0317 - 20 0.0388 - 21 0.0465 - 22 0.00607 - 23 8.92e-05 - 24 0.0352 - 26 0.0869 - 27 0.000268 - 28 0.00116 - 29 0.000357 - 30 0.00473 - 31 0.00419 - 32 8.92e-05 - 34 0.000268 - 35 0.00294 - 37 0.00205 - 39 0.00714 - 40 0.0168 - 41 0.0121 - 42 0.00223 - 43 0.000268 - 44 0.000446 - 45 0.00598 - 46 0.00223 - - 2 63 12 0 - 4 0.238 - 7 0.127 - 8 0.111 - 13 0.111 - 14 0.206 - 15 0.0317 - 19 0.0159 - 20 0.0635 - 21 0.0159 - 40 0.0317 - 41 0.0317 - 42 0.0159 - - 21 12 9 0 - 3 0.0833 - 4 0.167 - 7 0.25 - 14 0.0833 - 20 0.0833 - 26 0.0833 - 35 0.0833 - 37 0.0833 - 40 0.0833 - - 45 15 4 0 - 4 0.133 - 7 0.0667 - 14 0.0667 - 46 0.733 - - 49 214 24 0 - 2 0.00935 - 3 0.0187 - 4 0.28 - 7 0.136 - 8 0.0888 - 9 0.00467 - 13 0.0561 - 14 0.0654 - 15 0.0467 - 19 0.0234 - 20 0.0514 - 21 0.0374 - 24 0.0327 - 26 0.0794 - 27 0.00467 - 31 0.00935 - 35 0.00467 - 37 0.00935 - 39 0.00935 - 40 0.00935 - 41 0.00935 - 42 0.00467 - 45 0.00467 - 46 0.00467 - - 31 15551 42 7 - 0 0.00386 - 1 0.000129 - 2 0.0102 - 3 0.0112 - 4 0.0743 - 5 0.000129 - 7 0.434 - 8 0.0333 - 9 0.0027 - 10 0.000257 - 12 0.00122 - 13 0.0231 - 14 0.0143 - 15 0.0274 - 16 0.000129 - 17 0.000836 - 19 0.0116 - 20 0.0116 - 21 0.0532 - 22 0.00373 - 23 0.000257 - 24 0.0271 - 26 0.132 - 28 0.000836 - 29 0.000965 - 30 0.00514 - 31 0.00174 - 32 0.000643 - 33 0.000322 - 34 0.000322 - 35 0.000707 - 37 0.00257 - 38 6.43e-05 - 39 0.00367 - 40 0.0578 - 41 0.037 - 42 0.00424 - 43 0.00103 - 44 0.000386 - 45 0.00482 - 46 0.00167 - 47 0.000193 - - 2 72 17 0 - 4 0.0694 - 7 0.417 - 9 0.0139 - 14 0.0278 - 17 0.0139 - 19 0.0139 - 20 0.0139 - 21 0.0417 - 26 0.0278 - 29 0.0139 - 30 0.0278 - 39 0.0139 - 40 0.153 - 41 0.0972 - 42 0.0139 - 43 0.0139 - 46 0.0278 - - 21 9 4 0 - 0 0.111 - 7 0.667 - 12 0.111 - 47 0.111 - - 41 2 2 0 - 2 0.5 - 40 0.5 - - 45 13 6 0 - 7 0.231 - 8 0.0769 - 17 0.0769 - 21 0.0769 - 24 0.0769 - 46 0.462 - - 47 14860 42 0 - 0 0.0035 - 1 0.000135 - 2 0.00976 - 3 0.0116 - 4 0.0758 - 5 0.000135 - 7 0.43 - 8 0.0338 - 9 0.00276 - 10 0.000269 - 12 0.00108 - 13 0.0238 - 14 0.0147 - 15 0.028 - 16 0.000135 - 17 0.00074 - 19 0.0118 - 20 0.0114 - 21 0.0543 - 22 0.00384 - 23 0.000269 - 24 0.0281 - 26 0.134 - 28 0.000875 - 29 0.000875 - 30 0.00518 - 31 0.00182 - 32 0.000673 - 33 0.000336 - 34 0.000336 - 35 0.00074 - 37 0.00262 - 38 6.73e-05 - 39 0.00377 - 40 0.0559 - 41 0.0355 - 42 0.00397 - 43 0.000875 - 44 0.000404 - 45 0.00491 - 46 0.00101 - 47 0.000135 - - 49 583 25 0 - 0 0.012 - 2 0.0223 - 3 0.00172 - 4 0.0429 - 7 0.52 - 8 0.024 - 12 0.00343 - 13 0.0103 - 14 0.00515 - 15 0.0172 - 19 0.00515 - 20 0.0172 - 21 0.0274 - 22 0.00172 - 24 0.00686 - 26 0.0909 - 29 0.00172 - 30 0.00172 - 37 0.00172 - 40 0.0961 - 41 0.0686 - 42 0.0103 - 43 0.00343 - 45 0.00343 - 46 0.00515 - - 55 6 2 0 - 7 0.833 - 40 0.167 - - 32 5375 43 3 - 0 0.00651 - 1 0.000186 - 2 0.00335 - 3 0.0134 - 4 0.192 - 5 0.00447 - 6 0.000186 - 7 0.169 - 8 0.0662 - 9 0.0108 - 10 0.00093 - 12 0.00372 - 13 0.0506 - 14 0.0545 - 15 0.0344 - 16 0.000186 - 17 0.00093 - 19 0.0768 - 20 0.0218 - 21 0.0508 - 22 0.00409 - 23 0.000558 - 24 0.0203 - 26 0.0941 - 28 0.0026 - 29 0.000372 - 30 0.0104 - 31 0.00391 - 32 0.000186 - 33 0.000558 - 34 0.000558 - 35 0.00447 - 36 0.000186 - 37 0.00521 - 39 0.00428 - 40 0.0383 - 41 0.0387 - 42 0.00521 - 43 0.000558 - 44 0.000558 - 45 0.00316 - 46 0.000744 - 47 0.000186 - - 2 34 10 0 - 3 0.0294 - 4 0.0882 - 7 0.235 - 8 0.176 - 13 0.0588 - 14 0.206 - 20 0.0294 - 21 0.0294 - 40 0.0882 - 41 0.0588 - - 45 4 3 0 - 4 0.25 - 24 0.25 - 46 0.5 - - 49 79 19 0 - 3 0.0127 - 4 0.19 - 7 0.19 - 8 0.114 - 9 0.0127 - 12 0.0127 - 13 0.0886 - 14 0.0506 - 19 0.0506 - 20 0.0253 - 21 0.0253 - 24 0.0253 - 26 0.0759 - 30 0.0127 - 37 0.0127 - 40 0.0506 - 41 0.0253 - 42 0.0127 - 43 0.0127 - - 33 9565 42 3 - 0 0.0024 - 1 0.000209 - 2 0.00157 - 3 0.0238 - 4 0.181 - 5 0.00136 - 6 0.000105 - 7 0.141 - 8 0.0558 - 9 0.00659 - 10 0.00115 - 12 0.00178 - 13 0.0474 - 14 0.0311 - 15 0.124 - 16 0.000627 - 17 0.000732 - 19 0.0499 - 20 0.0226 - 21 0.0374 - 22 0.00355 - 23 0.000314 - 24 0.0154 - 26 0.0935 - 28 0.00178 - 29 0.000314 - 30 0.00711 - 31 0.0045 - 32 0.000209 - 34 0.000418 - 35 0.00157 - 37 0.0046 - 38 0.000105 - 39 0.0046 - 40 0.0667 - 41 0.0484 - 42 0.00815 - 43 0.000209 - 44 0.000418 - 45 0.00742 - 46 0.000209 - 47 0.000105 - - 2 37 10 0 - 4 0.243 - 7 0.135 - 8 0.162 - 9 0.027 - 12 0.027 - 13 0.135 - 14 0.135 - 15 0.027 - 21 0.027 - 40 0.0811 - - 45 8 7 0 - 7 0.125 - 8 0.125 - 13 0.125 - 21 0.125 - 24 0.125 - 26 0.25 - 46 0.125 - - 49 142 21 0 - 0 0.00704 - 3 0.0141 - 4 0.324 - 7 0.12 - 8 0.0634 - 10 0.00704 - 13 0.0634 - 14 0.00704 - 15 0.0352 - 17 0.0141 - 19 0.0845 - 20 0.0634 - 21 0.0211 - 24 0.0493 - 26 0.0423 - 30 0.0141 - 39 0.00704 - 40 0.0211 - 41 0.00704 - 42 0.0141 - 45 0.0211 - - 40 18 4 0 - 27 0.0556 - 43 0.0556 - 46 0.333 - 47 0.556 - - 41 6243 35 21 - 0 0.00416 - 1 0.0024 - 2 0.113 - 3 0.00432 - 4 0.0271 - 6 0.000641 - 7 0.276 - 8 0.0128 - 9 0.000481 - 10 0.000481 - 12 0.00176 - 13 0.00449 - 14 0.00384 - 15 0.00144 - 16 0.00016 - 19 0.00256 - 20 0.00176 - 21 0.149 - 22 0.00032 - 24 0.00016 - 26 0.0284 - 27 0.000961 - 28 0.0123 - 29 0.0111 - 30 0.222 - 31 0.0368 - 32 0.00352 - 33 0.00352 - 34 0.0103 - 35 0.00128 - 37 0.00657 - 39 0.000481 - 44 0.00016 - 45 0.0365 - 46 0.0189 - - 0 65 14 0 - 0 0.0154 - 4 0.0154 - 7 0.415 - 13 0.0462 - 15 0.0154 - 16 0.0154 - 19 0.0923 - 21 0.185 - 26 0.0154 - 27 0.0308 - 28 0.0154 - 30 0.0154 - 37 0.0615 - 45 0.0615 - - 2 14 4 0 - 4 0.0714 - 7 0.5 - 21 0.357 - 26 0.0714 - - 12 12 3 0 - 3 0.0833 - 7 0.75 - 21 0.167 - - 13 4 4 0 - 7 0.25 - 27 0.25 - 30 0.25 - 46 0.25 - - 28 63 13 0 - 2 0.0159 - 4 0.0159 - 6 0.0159 - 7 0.286 - 8 0.0476 - 12 0.0159 - 13 0.0159 - 14 0.0317 - 21 0.206 - 28 0.0159 - 30 0.0952 - 31 0.0159 - 45 0.222 - - 29 225 14 0 - 0 0.00444 - 7 0.107 - 13 0.00444 - 14 0.00444 - 15 0.00444 - 19 0.00444 - 20 0.00444 - 21 0.12 - 22 0.00444 - 26 0.0133 - 30 0.249 - 31 0.00444 - 45 0.471 - 46 0.00444 - - 30 30 5 0 - 2 0.0667 - 7 0.433 - 21 0.133 - 30 0.0333 - 45 0.333 - - 31 73 10 0 - 4 0.0274 - 7 0.411 - 8 0.0137 - 12 0.0137 - 14 0.0274 - 21 0.233 - 26 0.0137 - 30 0.205 - 31 0.0274 - 45 0.0274 - - 32 25 9 0 - 4 0.08 - 7 0.2 - 8 0.04 - 15 0.04 - 20 0.04 - 21 0.28 - 30 0.12 - 37 0.04 - 45 0.16 - - 33 92 8 0 - 7 0.152 - 14 0.0217 - 19 0.0109 - 21 0.0978 - 27 0.0109 - 28 0.0217 - 30 0.185 - 45 0.5 - - 48 218 13 0 - 1 0.00459 - 2 0.00459 - 3 0.00459 - 4 0.00917 - 7 0.44 - 8 0.0183 - 15 0.00459 - 21 0.234 - 26 0.00917 - 30 0.202 - 31 0.0275 - 45 0.00459 - 46 0.0367 - - 49 387 22 0 - 0 0.00258 - 1 0.00258 - 2 0.0155 - 3 0.00258 - 4 0.0284 - 7 0.488 - 8 0.0233 - 13 0.00775 - 14 0.00775 - 15 0.00258 - 19 0.00517 - 20 0.00258 - 21 0.106 - 26 0.0362 - 28 0.00775 - 30 0.178 - 31 0.0155 - 34 0.0129 - 35 0.00775 - 37 0.0129 - 45 0.0233 - 46 0.0103 - - 52 8 5 0 - 4 0.125 - 8 0.375 - 13 0.125 - 37 0.125 - 39 0.25 - - 55 1378 26 0 - 1 0.00145 - 2 0.0116 - 3 0.00508 - 4 0.0152 - 6 0.000726 - 7 0.319 - 8 0.00871 - 10 0.00145 - 12 0.000726 - 13 0.00218 - 14 0.0029 - 19 0.00145 - 20 0.000726 - 21 0.166 - 26 0.0689 - 27 0.00145 - 28 0.00145 - 29 0.000726 - 30 0.296 - 31 0.0537 - 33 0.000726 - 34 0.00581 - 35 0.00145 - 37 0.00871 - 45 0.00943 - 46 0.0145 - - 57 1875 30 0 - 0 0.00373 - 1 0.00427 - 2 0.0101 - 3 0.00427 - 4 0.0331 - 6 0.00107 - 7 0.341 - 8 0.0197 - 9 0.000533 - 10 0.000533 - 12 0.00107 - 13 0.00427 - 14 0.00267 - 15 0.00213 - 19 0.0016 - 20 0.00213 - 21 0.202 - 24 0.000533 - 26 0.0235 - 28 0.00267 - 29 0.0016 - 30 0.25 - 31 0.0485 - 32 0.00107 - 34 0.00853 - 35 0.00107 - 37 0.008 - 39 0.000533 - 45 0.00693 - 46 0.0133 - - 58 6 5 0 - 4 0.167 - 7 0.333 - 21 0.167 - 31 0.167 - 45 0.167 - - 59 16 8 0 - 2 0.0625 - 7 0.25 - 8 0.0625 - 13 0.0625 - 21 0.312 - 28 0.0625 - 30 0.125 - 46 0.0625 - - 62 353 19 0 - 0 0.00283 - 2 0.0113 - 3 0.00283 - 4 0.0085 - 7 0.34 - 8 0.0142 - 13 0.00283 - 14 0.00283 - 21 0.122 - 26 0.00567 - 29 0.00567 - 30 0.354 - 31 0.0567 - 34 0.00567 - 35 0.00283 - 37 0.0085 - 44 0.00283 - 45 0.00283 - 46 0.0482 - - 64 171 17 0 - 0 0.0117 - 1 0.00585 - 2 0.0234 - 4 0.0175 - 7 0.327 - 12 0.0117 - 13 0.00585 - 19 0.00585 - 21 0.117 - 26 0.0175 - 28 0.00585 - 29 0.00585 - 30 0.351 - 31 0.0234 - 34 0.0117 - 45 0.0117 - 46 0.0468 - - 68 7 6 0 - 7 0.143 - 21 0.143 - 26 0.143 - 30 0.286 - 45 0.143 - 46 0.143 - - 69 1214 24 0 - 0 0.0107 - 1 0.00165 - 2 0.537 - 3 0.00659 - 4 0.0478 - 7 0.0231 - 8 0.00329 - 9 0.00165 - 12 0.00329 - 13 0.00412 - 14 0.00329 - 20 0.00247 - 21 0.0527 - 22 0.000824 - 26 0.00824 - 28 0.0502 - 29 0.0511 - 30 0.0865 - 31 0.0198 - 32 0.0165 - 33 0.0173 - 34 0.0255 - 45 0.000824 - 46 0.0255 - - 42 485 30 16 - 0 0.00412 - 2 0.0866 - 3 0.0103 - 4 0.136 - 6 0.00206 - 7 0.144 - 8 0.0124 - 9 0.00206 - 11 0.00206 - 12 0.0103 - 13 0.0165 - 14 0.0124 - 15 0.0206 - 19 0.0103 - 21 0.101 - 22 0.00206 - 23 0.00206 - 26 0.00825 - 28 0.0103 - 29 0.00206 - 30 0.0474 - 31 0.0165 - 33 0.00412 - 34 0.00619 - 35 0.00619 - 37 0.00619 - 39 0.00206 - 42 0.00619 - 44 0.00206 - 45 0.307 - - 0 14 10 0 - 0 0.0714 - 2 0.0714 - 4 0.0714 - 7 0.143 - 15 0.143 - 28 0.143 - 30 0.0714 - 35 0.0714 - 42 0.0714 - 45 0.143 - - 12 2 2 0 - 0 0.5 - 11 0.5 - - 28 9 8 0 - 4 0.111 - 13 0.111 - 14 0.111 - 23 0.111 - 26 0.111 - 35 0.111 - 37 0.111 - 45 0.222 - - 29 63 4 0 - 3 0.0159 - 4 0.0317 - 7 0.0159 - 45 0.937 - - 30 12 3 0 - 4 0.0833 - 7 0.0833 - 45 0.833 - - 32 7 4 0 - 4 0.286 - 7 0.286 - 15 0.143 - 42 0.286 - - 33 49 4 0 - 3 0.0204 - 4 0.0204 - 14 0.0204 - 45 0.939 - - 42 3 2 0 - 4 0.333 - 13 0.667 - - 46 2 2 0 - 7 0.5 - 31 0.5 - - 48 16 7 0 - 4 0.125 - 7 0.25 - 21 0.25 - 26 0.0625 - 30 0.188 - 44 0.0625 - 45 0.0625 - - 49 20 8 0 - 4 0.05 - 7 0.3 - 8 0.1 - 12 0.05 - 13 0.05 - 21 0.25 - 37 0.05 - 45 0.15 - - 55 64 10 0 - 4 0.125 - 7 0.328 - 12 0.0156 - 13 0.0156 - 19 0.0312 - 21 0.25 - 28 0.0156 - 30 0.0938 - 35 0.0156 - 45 0.109 - - 57 82 17 0 - 3 0.0122 - 4 0.171 - 6 0.0122 - 7 0.232 - 8 0.0366 - 9 0.0122 - 12 0.0122 - 13 0.0122 - 14 0.0244 - 15 0.061 - 19 0.0122 - 21 0.146 - 26 0.0244 - 30 0.0366 - 31 0.0122 - 39 0.0122 - 45 0.171 - - 62 14 7 0 - 2 0.0714 - 3 0.0714 - 7 0.357 - 15 0.0714 - 19 0.0714 - 21 0.214 - 30 0.143 - - 64 16 7 0 - 4 0.25 - 7 0.25 - 8 0.0625 - 13 0.0625 - 19 0.0625 - 30 0.25 - 45 0.0625 - - 69 99 17 0 - 2 0.394 - 3 0.0101 - 4 0.242 - 7 0.0202 - 12 0.0202 - 13 0.0101 - 14 0.0202 - 21 0.0808 - 22 0.0101 - 28 0.0202 - 29 0.0101 - 30 0.0303 - 31 0.0505 - 33 0.0202 - 34 0.0303 - 37 0.0101 - 45 0.0202 - - 43 36 15 4 - 0 0.0278 - 2 0.0556 - 4 0.0556 - 7 0.167 - 12 0.0278 - 13 0.0278 - 19 0.0278 - 21 0.139 - 26 0.0556 - 28 0.0278 - 30 0.0278 - 31 0.0556 - 40 0.139 - 41 0.139 - 42 0.0278 - - 0 4 3 0 - 21 0.25 - 30 0.25 - 31 0.5 - - 28 2 2 0 - 13 0.5 - 19 0.5 - - 55 13 7 0 - 2 0.154 - 7 0.231 - 12 0.0769 - 21 0.308 - 26 0.0769 - 40 0.0769 - 41 0.0769 - - 57 9 5 0 - 7 0.222 - 26 0.111 - 40 0.222 - 41 0.333 - 42 0.111 - - 44 27 12 2 - 4 0.111 - 7 0.296 - 8 0.0741 - 13 0.111 - 14 0.037 - 15 0.148 - 26 0.037 - 28 0.037 - 31 0.037 - 34 0.037 - 37 0.037 - 45 0.037 - - 28 8 5 0 - 4 0.125 - 7 0.125 - 8 0.25 - 13 0.25 - 15 0.25 - - 55 5 3 0 - 7 0.6 - 13 0.2 - 26 0.2 - - 45 947 30 20 - 0 0.0169 - 1 0.00106 - 2 0.00211 - 3 0.00845 - 4 0.147 - 5 0.0116 - 6 0.00528 - 7 0.0993 - 8 0.119 - 9 0.00739 - 12 0.00845 - 13 0.0401 - 14 0.0201 - 15 0.0264 - 16 0.00211 - 17 0.00106 - 19 0.141 - 20 0.00422 - 21 0.116 - 22 0.00422 - 26 0.0211 - 27 0.0116 - 28 0.0919 - 29 0.00317 - 30 0.0348 - 31 0.0275 - 34 0.00211 - 35 0.0095 - 37 0.0127 - 42 0.00317 - - 0 241 18 0 - 1 0.00415 - 3 0.0083 - 4 0.149 - 7 0.0664 - 8 0.249 - 9 0.0083 - 12 0.00415 - 13 0.0207 - 14 0.0124 - 15 0.0124 - 21 0.224 - 22 0.0083 - 26 0.0124 - 28 0.0124 - 29 0.00415 - 30 0.104 - 31 0.0954 - 37 0.00415 - - 1 4 3 0 - 7 0.5 - 21 0.25 - 31 0.25 - - 2 14 4 0 - 0 0.286 - 12 0.357 - 28 0.214 - 29 0.143 - - 12 33 4 0 - 0 0.0909 - 21 0.0909 - 28 0.788 - 37 0.0303 - - 21 4 3 0 - 21 0.25 - 28 0.5 - 30 0.25 - - 26 33 2 0 - 21 0.0303 - 28 0.97 - - 28 57 16 0 - 3 0.0351 - 4 0.246 - 7 0.0351 - 8 0.228 - 9 0.0351 - 13 0.123 - 14 0.0351 - 15 0.0351 - 19 0.0175 - 20 0.0175 - 21 0.105 - 22 0.0175 - 26 0.0175 - 28 0.0175 - 30 0.0175 - 35 0.0175 - - 29 48 16 0 - 0 0.0208 - 4 0.25 - 5 0.0208 - 6 0.0417 - 7 0.104 - 8 0.125 - 13 0.0625 - 14 0.0208 - 15 0.0833 - 19 0.0417 - 21 0.0833 - 26 0.0417 - 28 0.0417 - 30 0.0208 - 34 0.0208 - 37 0.0208 - - 30 36 11 0 - 4 0.278 - 7 0.0278 - 8 0.194 - 9 0.0278 - 13 0.111 - 14 0.0278 - 15 0.0833 - 17 0.0278 - 21 0.167 - 26 0.0278 - 28 0.0278 - - 31 23 10 0 - 3 0.0435 - 4 0.13 - 6 0.087 - 7 0.087 - 8 0.087 - 13 0.0435 - 14 0.13 - 15 0.0435 - 21 0.304 - 28 0.0435 - - 32 12 7 0 - 4 0.0833 - 7 0.0833 - 8 0.333 - 13 0.0833 - 15 0.167 - 28 0.167 - 30 0.0833 - - 33 30 13 0 - 3 0.0667 - 4 0.167 - 5 0.0333 - 7 0.133 - 8 0.2 - 9 0.0333 - 13 0.0667 - 14 0.0667 - 15 0.0333 - 19 0.1 - 21 0.0333 - 22 0.0333 - 30 0.0333 - - 41 196 20 0 - 0 0.0306 - 2 0.0102 - 4 0.128 - 5 0.0153 - 7 0.0765 - 8 0.0255 - 13 0.0408 - 14 0.0102 - 15 0.0153 - 16 0.0051 - 19 0.398 - 20 0.0102 - 21 0.0714 - 27 0.0357 - 28 0.0459 - 30 0.0051 - 31 0.0051 - 35 0.0357 - 37 0.0255 - 42 0.0102 - - 42 126 18 0 - 4 0.183 - 5 0.0476 - 7 0.0714 - 8 0.0397 - 12 0.0159 - 13 0.0397 - 14 0.0238 - 15 0.0317 - 16 0.00794 - 19 0.381 - 20 0.00794 - 21 0.0397 - 27 0.0317 - 28 0.0317 - 34 0.00794 - 35 0.00794 - 37 0.0238 - 42 0.00794 - - 48 2 2 0 - 7 0.5 - 26 0.5 - - 49 13 9 0 - 0 0.0769 - 4 0.231 - 7 0.0769 - 8 0.154 - 21 0.154 - 28 0.0769 - 30 0.0769 - 31 0.0769 - 37 0.0769 - - 55 39 9 0 - 3 0.0256 - 4 0.103 - 7 0.487 - 8 0.0256 - 9 0.0256 - 13 0.0256 - 14 0.0256 - 21 0.0769 - 26 0.205 - - 57 18 7 0 - 4 0.111 - 7 0.556 - 8 0.0556 - 19 0.0556 - 21 0.0556 - 26 0.111 - 30 0.0556 - - 58 10 5 0 - 0 0.1 - 4 0.1 - 7 0.5 - 21 0.1 - 26 0.2 - - 59 8 7 0 - 6 0.125 - 7 0.125 - 8 0.125 - 13 0.125 - 14 0.125 - 15 0.25 - 19 0.125 - - 46 498 27 21 - 0 0.01 - 2 0.151 - 3 0.00402 - 4 0.0723 - 7 0.398 - 8 0.0161 - 12 0.00201 - 13 0.0161 - 14 0.01 - 15 0.0321 - 19 0.0141 - 20 0.00602 - 21 0.0221 - 26 0.0683 - 28 0.00402 - 29 0.00803 - 30 0.0743 - 31 0.00201 - 33 0.00602 - 35 0.00402 - 37 0.0201 - 40 0.00201 - 41 0.00201 - 42 0.0141 - 44 0.012 - 46 0.0141 - 47 0.0161 - - 13 2 2 0 - 8 0.5 - 15 0.5 - - 26 1 1 0 - 28 1 - - 28 48 12 0 - 3 0.0208 - 4 0.354 - 7 0.229 - 8 0.0625 - 13 0.0417 - 14 0.0417 - 15 0.0833 - 19 0.0417 - 20 0.0417 - 35 0.0208 - 37 0.0417 - 44 0.0208 - - 29 9 6 0 - 4 0.222 - 7 0.111 - 13 0.111 - 21 0.111 - 26 0.222 - 30 0.222 - - 30 21 7 0 - 3 0.0476 - 4 0.333 - 7 0.19 - 13 0.0476 - 14 0.0476 - 15 0.286 - 20 0.0476 - - 31 21 8 0 - 4 0.0952 - 7 0.429 - 13 0.0476 - 14 0.0476 - 15 0.0476 - 19 0.0476 - 26 0.238 - 37 0.0476 - - 40 5 2 0 - 46 0.2 - 47 0.8 - - 41 118 15 0 - 0 0.0169 - 2 0.246 - 4 0.0254 - 7 0.237 - 8 0.00847 - 13 0.00847 - 15 0.00847 - 19 0.0169 - 21 0.0593 - 26 0.0169 - 29 0.0254 - 30 0.28 - 31 0.00847 - 33 0.0254 - 46 0.0169 - - 48 39 7 0 - 0 0.0256 - 2 0.308 - 7 0.487 - 8 0.0256 - 26 0.0513 - 37 0.0513 - 44 0.0513 - - 49 34 11 0 - 0 0.0294 - 2 0.0294 - 4 0.0588 - 7 0.529 - 13 0.0294 - 26 0.176 - 28 0.0294 - 30 0.0294 - 35 0.0294 - 37 0.0294 - 42 0.0294 - - 51 1 1 0 - 44 1 - - 52 2 2 0 - 2 0.5 - 37 0.5 - - 55 98 11 0 - 0 0.0102 - 2 0.0918 - 7 0.724 - 12 0.0102 - 19 0.0102 - 26 0.0816 - 29 0.0102 - 30 0.0102 - 41 0.0102 - 42 0.0306 - 44 0.0102 - - 57 31 9 0 - 2 0.129 - 4 0.0323 - 7 0.516 - 8 0.0323 - 13 0.0323 - 21 0.0323 - 26 0.129 - 37 0.0645 - 40 0.0323 - - 59 13 5 0 - 4 0.0769 - 7 0.462 - 15 0.154 - 21 0.0769 - 26 0.231 - - 62 11 7 0 - 2 0.0909 - 7 0.364 - 26 0.0909 - 42 0.0909 - 44 0.0909 - 46 0.182 - 47 0.0909 - - 64 5 2 0 - 7 0.8 - 8 0.2 - - 65 6 4 0 - 2 0.167 - 15 0.167 - 46 0.333 - 47 0.333 - - 66 2 2 0 - 37 0.5 - 42 0.5 - - 67 3 3 0 - 4 0.333 - 19 0.333 - 47 0.333 - - 69 22 4 0 - 2 0.773 - 7 0.136 - 21 0.0455 - 42 0.0455 - - 47 145999 39 35 - 0 0.0116 - 1 6.85e-06 - 2 0.0386 - 3 0.000603 - 4 0.0028 - 5 6.16e-05 - 7 0.0116 - 8 0.000671 - 9 2.05e-05 - 12 0.00449 - 13 0.000678 - 14 0.000404 - 15 0.0104 - 16 6.85e-06 - 17 6.85e-06 - 19 0.000808 - 20 0.000178 - 21 0.00211 - 22 0.000137 - 25 6.85e-06 - 26 0.0016 - 28 0.000164 - 29 0.00262 - 30 0.000384 - 31 0.000349 - 32 0.00107 - 33 0.00145 - 34 0.000288 - 35 4.11e-05 - 37 0.000623 - 39 2.05e-05 - 40 0.691 - 41 0.188 - 42 0.0209 - 43 0.00159 - 44 0.000692 - 45 0.000336 - 46 0.00192 - 47 0.00216 - - 0 598 28 0 - 0 0.0485 - 1 0.00167 - 2 0.0318 - 3 0.0167 - 4 0.164 - 7 0.0518 - 8 0.0234 - 9 0.00502 - 12 0.00334 - 13 0.0284 - 14 0.0301 - 15 0.0853 - 19 0.00669 - 20 0.00836 - 21 0.0167 - 26 0.01 - 30 0.00502 - 31 0.00167 - 34 0.00167 - 35 0.00167 - 37 0.00836 - 39 0.00167 - 40 0.232 - 41 0.176 - 42 0.0301 - 43 0.00167 - 45 0.00334 - 46 0.00502 - - 2 1 1 0 - 30 1 - - 7 2 2 0 - 13 0.5 - 41 0.5 - - 8 34 7 0 - 2 0.147 - 7 0.118 - 20 0.0294 - 21 0.0294 - 32 0.0294 - 40 0.559 - 41 0.0882 - - 12 59 11 0 - 0 0.0508 - 2 0.0508 - 4 0.0169 - 7 0.0508 - 13 0.0169 - 21 0.0339 - 26 0.0339 - 40 0.339 - 41 0.288 - 42 0.0847 - 46 0.0339 - - 13 57 9 0 - 0 0.0351 - 2 0.0877 - 7 0.0351 - 12 0.0351 - 26 0.0175 - 30 0.0175 - 40 0.368 - 41 0.368 - 42 0.0351 - - 15 4 2 0 - 15 0.5 - 46 0.5 - - 21 60 9 0 - 0 0.0167 - 8 0.0167 - 21 0.0167 - 28 0.0333 - 40 0.583 - 41 0.233 - 42 0.0667 - 46 0.0167 - 47 0.0167 - - 22 3 1 0 - 41 1 - - 26 26 8 0 - 0 0.0385 - 7 0.0769 - 21 0.0385 - 28 0.0385 - 40 0.5 - 41 0.231 - 42 0.0385 - 46 0.0385 - - 28 1249 28 0 - 0 0.028 - 2 0.0697 - 4 0.00961 - 5 0.000801 - 7 0.0641 - 8 0.0032 - 12 0.00881 - 13 0.0056 - 15 0.0016 - 17 0.000801 - 19 0.004 - 20 0.0016 - 21 0.00881 - 26 0.004 - 30 0.000801 - 31 0.000801 - 33 0.000801 - 34 0.000801 - 37 0.0048 - 39 0.000801 - 40 0.481 - 41 0.254 - 42 0.0336 - 43 0.0016 - 44 0.0016 - 45 0.000801 - 46 0.0056 - 47 0.0024 - - 29 2544 28 0 - 0 0.00825 - 2 0.0197 - 3 0.0157 - 4 0.0204 - 7 0.00432 - 8 0.000786 - 12 0.000393 - 13 0.00314 - 14 0.000786 - 15 0.219 - 16 0.000393 - 19 0.000786 - 20 0.000786 - 21 0.00118 - 26 0.00118 - 28 0.000393 - 29 0.00197 - 30 0.000393 - 31 0.000786 - 32 0.000393 - 33 0.00118 - 40 0.521 - 41 0.167 - 42 0.00825 - 43 0.000786 - 45 0.000393 - 46 0.000393 - 47 0.000393 - - 30 440 24 0 - 0 0.0591 - 2 0.0977 - 3 0.00227 - 4 0.00227 - 7 0.0659 - 8 0.00909 - 12 0.00455 - 13 0.0114 - 14 0.00682 - 15 0.00227 - 19 0.00227 - 20 0.00227 - 21 0.00909 - 22 0.00227 - 26 0.00227 - 28 0.00227 - 32 0.00227 - 37 0.00227 - 40 0.427 - 41 0.239 - 42 0.0273 - 43 0.00682 - 44 0.00455 - 46 0.00909 - - 31 1808 30 0 - 0 0.0321 - 2 0.0857 - 3 0.000553 - 4 0.00332 - 7 0.0243 - 8 0.00111 - 12 0.0083 - 13 0.000553 - 14 0.000553 - 15 0.00111 - 19 0.00111 - 20 0.000553 - 21 0.00387 - 22 0.000553 - 26 0.00332 - 29 0.0083 - 30 0.000553 - 31 0.000553 - 32 0.00553 - 33 0.00277 - 35 0.000553 - 37 0.00221 - 40 0.497 - 41 0.269 - 42 0.0321 - 43 0.0083 - 44 0.00111 - 45 0.000553 - 46 0.00277 - 47 0.00166 - - 32 490 22 0 - 0 0.0286 - 2 0.0347 - 4 0.0184 - 7 0.0163 - 8 0.00612 - 12 0.0184 - 13 0.00408 - 14 0.0184 - 15 0.00204 - 19 0.00408 - 21 0.00816 - 26 0.00204 - 29 0.00204 - 32 0.00204 - 35 0.00204 - 40 0.42 - 41 0.361 - 42 0.0347 - 43 0.00612 - 44 0.00408 - 46 0.00408 - 47 0.00204 - - 33 2098 25 0 - 0 0.00763 - 2 0.0062 - 3 0.0114 - 4 0.0472 - 7 0.00477 - 8 0.00477 - 12 0.00191 - 13 0.0124 - 15 0.404 - 19 0.000477 - 20 0.00286 - 21 0.000477 - 26 0.000477 - 29 0.000477 - 30 0.000477 - 31 0.000477 - 32 0.000477 - 40 0.304 - 41 0.173 - 42 0.0129 - 43 0.000953 - 44 0.000953 - 45 0.000477 - 46 0.000477 - 47 0.000477 - - 40 11 2 0 - 46 0.0909 - 47 0.909 - - 41 55 17 0 - 0 0.0727 - 2 0.364 - 4 0.109 - 7 0.0545 - 8 0.0182 - 12 0.109 - 13 0.0182 - 14 0.0364 - 15 0.0182 - 19 0.0364 - 21 0.0364 - 29 0.0182 - 30 0.0182 - 31 0.0182 - 32 0.0182 - 37 0.0364 - 45 0.0182 - - 42 5 4 0 - 4 0.2 - 12 0.2 - 19 0.4 - 31 0.2 - - 43 14 5 0 - 2 0.143 - 12 0.0714 - 40 0.357 - 41 0.357 - 42 0.0714 - - 46 81 16 0 - 0 0.037 - 2 0.42 - 4 0.0247 - 7 0.0864 - 12 0.0123 - 15 0.0247 - 19 0.0494 - 21 0.0123 - 29 0.037 - 33 0.0247 - 40 0.0123 - 41 0.0123 - 42 0.0494 - 44 0.0123 - 46 0.0864 - 47 0.0988 - - 48 4185 23 0 - 0 0.0098 - 2 0.0437 - 5 0.000239 - 7 0.00621 - 8 0.000239 - 12 0.00119 - 19 0.00143 - 20 0.000239 - 21 0.000717 - 26 0.000717 - 29 0.000717 - 30 0.000717 - 32 0.000239 - 33 0.000478 - 34 0.000478 - 40 0.651 - 41 0.249 - 42 0.0284 - 43 0.000956 - 44 0.000478 - 45 0.000239 - 46 0.00143 - 47 0.00143 - - 49 3148 26 0 - 0 0.0156 - 2 0.0594 - 3 0.000318 - 4 0.000635 - 7 0.0133 - 8 0.000318 - 12 0.00762 - 13 0.000318 - 15 0.000318 - 19 0.000953 - 21 0.00254 - 26 0.00159 - 28 0.000318 - 29 0.00349 - 30 0.000635 - 32 0.00127 - 33 0.00222 - 34 0.000318 - 37 0.000635 - 40 0.619 - 41 0.234 - 42 0.027 - 43 0.00286 - 45 0.000318 - 46 0.00191 - 47 0.00222 - - 51 49 5 0 - 40 0.735 - 41 0.102 - 42 0.0204 - 43 0.0408 - 47 0.102 - - 55 29370 35 0 - 0 0.0136 - 2 0.0618 - 3 0.00017 - 4 0.00109 - 5 3.4e-05 - 7 0.0157 - 8 0.000613 - 12 0.00582 - 13 0.000204 - 14 0.000136 - 15 0.000477 - 19 0.000783 - 20 6.81e-05 - 21 0.00289 - 22 0.000238 - 25 3.4e-05 - 26 0.00221 - 28 0.000272 - 29 0.00371 - 30 0.000272 - 31 0.000477 - 32 0.00112 - 33 0.00197 - 34 0.000409 - 35 3.4e-05 - 37 0.000783 - 39 3.4e-05 - 40 0.65 - 41 0.205 - 42 0.0224 - 43 0.0018 - 44 0.000647 - 45 0.000409 - 46 0.00211 - 47 0.00218 - - 57 28760 33 0 - 0 0.0139 - 2 0.0438 - 3 6.95e-05 - 4 0.00104 - 5 6.95e-05 - 7 0.00883 - 8 0.000556 - 12 0.00619 - 13 0.000417 - 14 0.000104 - 15 0.000313 - 19 0.000626 - 20 0.000104 - 21 0.00209 - 22 0.000139 - 26 0.00205 - 28 0.000209 - 29 0.00466 - 30 0.000522 - 31 0.000591 - 32 0.00191 - 33 0.00209 - 34 0.000487 - 35 3.48e-05 - 37 0.000313 - 40 0.684 - 41 0.195 - 42 0.0239 - 43 0.00212 - 44 0.00101 - 45 0.000382 - 46 0.00125 - 47 0.00174 - - 58 125 18 0 - 0 0.04 - 2 0.112 - 4 0.016 - 7 0.008 - 12 0.032 - 15 0.04 - 19 0.04 - 20 0.008 - 21 0.008 - 26 0.008 - 29 0.016 - 33 0.008 - 35 0.008 - 40 0.512 - 41 0.112 - 42 0.016 - 45 0.008 - 47 0.008 - - 59 392 14 0 - 0 0.0102 - 2 0.0969 - 4 0.00765 - 7 0.0255 - 8 0.00255 - 12 0.00255 - 21 0.0051 - 26 0.0051 - 40 0.51 - 41 0.291 - 42 0.0332 - 43 0.0051 - 46 0.00255 - 47 0.00255 - - 62 12424 28 0 - 0 0.00789 - 2 0.0249 - 3 8.05e-05 - 4 0.000644 - 7 0.00539 - 8 0.000241 - 12 0.0037 - 13 8.05e-05 - 14 0.000402 - 15 8.05e-05 - 19 0.000644 - 21 0.00145 - 26 0.000644 - 29 0.00129 - 30 0.000241 - 31 8.05e-05 - 32 0.000805 - 33 0.00121 - 34 0.000402 - 37 0.000322 - 40 0.761 - 41 0.163 - 42 0.0182 - 43 0.000563 - 44 0.000724 - 45 0.000402 - 46 0.0025 - 47 0.00266 - - 64 13381 22 0 - 0 0.00239 - 2 0.0106 - 4 7.47e-05 - 5 7.47e-05 - 7 0.000374 - 8 7.47e-05 - 12 0.00105 - 13 7.47e-05 - 15 7.47e-05 - 19 0.000374 - 21 7.47e-05 - 29 0.000299 - 32 0.000149 - 33 0.000224 - 34 7.47e-05 - 40 0.86 - 41 0.106 - 42 0.0132 - 43 0.000972 - 44 0.000224 - 46 0.000972 - 47 0.00277 - - 65 17 2 0 - 40 0.765 - 47 0.235 - - 67 12 4 0 - 40 0.5 - 42 0.0833 - 46 0.25 - 47 0.167 - - 68 148 8 0 - 0 0.0135 - 2 0.00676 - 4 0.00676 - 31 0.00676 - 40 0.73 - 41 0.189 - 42 0.0405 - 46 0.00676 - - 69 44302 32 0 - 0 0.0102 - 2 0.0279 - 3 6.77e-05 - 4 0.000971 - 5 6.77e-05 - 7 0.0133 - 8 0.000361 - 12 0.00354 - 13 0.000203 - 14 0.000271 - 15 0.000406 - 19 0.000564 - 20 2.26e-05 - 21 0.00185 - 22 0.000158 - 26 0.00144 - 28 9.03e-05 - 29 0.00174 - 30 0.000339 - 31 0.000226 - 32 0.00079 - 33 0.00124 - 34 0.000113 - 37 0.00079 - 40 0.719 - 41 0.189 - 42 0.0194 - 43 0.0012 - 44 0.000632 - 45 0.000248 - 46 0.00192 - 47 0.00156 - - 74 15 3 0 - 40 0.4 - 41 0.0667 - 47 0.533 - - 48 5913 33 15 - 0 0.00727 - 2 0.0313 - 3 0.00101 - 4 0.00643 - 5 0.000169 - 7 0.163 - 8 0.00372 - 12 0.00101 - 13 0.00558 - 14 0.000338 - 15 0.00169 - 17 0.000507 - 19 0.00152 - 20 0.000169 - 21 0.0167 - 22 0.000507 - 26 0.0338 - 29 0.000507 - 30 0.00355 - 31 0.0022 - 32 0.000169 - 33 0.000338 - 34 0.00101 - 35 0.000676 - 37 0.00693 - 40 0.461 - 41 0.214 - 42 0.0237 - 43 0.000676 - 44 0.00152 - 45 0.000507 - 46 0.00761 - 47 0.00101 - - 0 4156 30 0 - 0 0.00794 - 2 0.0337 - 3 0.000722 - 4 0.00553 - 5 0.000241 - 7 0.149 - 8 0.00217 - 12 0.0012 - 13 0.00674 - 14 0.000241 - 15 0.000962 - 17 0.000481 - 19 0.00144 - 21 0.0156 - 26 0.038 - 29 0.000722 - 30 0.00337 - 31 0.00265 - 33 0.000481 - 34 0.0012 - 35 0.000481 - 37 0.00577 - 40 0.474 - 41 0.217 - 42 0.0231 - 43 0.000722 - 44 0.00192 - 45 0.000481 - 46 0.00217 - 47 0.00144 - - 1 36 8 0 - 0 0.0278 - 7 0.194 - 19 0.0278 - 21 0.0278 - 40 0.333 - 41 0.306 - 42 0.0556 - 46 0.0278 - - 21 356 17 0 - 0 0.00562 - 2 0.0169 - 4 0.00281 - 7 0.152 - 8 0.00281 - 19 0.00281 - 21 0.014 - 26 0.014 - 30 0.00281 - 32 0.00281 - 34 0.00281 - 35 0.00281 - 37 0.0225 - 40 0.458 - 41 0.256 - 42 0.0365 - 46 0.00562 - - 28 251 17 0 - 0 0.012 - 2 0.0239 - 4 0.0199 - 7 0.243 - 8 0.0199 - 12 0.00398 - 14 0.00398 - 15 0.00398 - 20 0.00398 - 21 0.0239 - 26 0.0438 - 30 0.00398 - 40 0.394 - 41 0.175 - 42 0.0159 - 43 0.00398 - 45 0.00398 - - 29 218 16 0 - 0 0.00459 - 2 0.0275 - 3 0.00917 - 4 0.0275 - 7 0.284 - 8 0.0229 - 13 0.00917 - 15 0.0138 - 21 0.0275 - 22 0.0138 - 26 0.0275 - 30 0.00917 - 37 0.0138 - 40 0.362 - 41 0.138 - 42 0.00917 - - 30 87 10 0 - 0 0.0115 - 2 0.0345 - 4 0.0115 - 7 0.184 - 15 0.0115 - 17 0.0115 - 21 0.0345 - 26 0.0115 - 40 0.517 - 41 0.172 - - 31 99 12 0 - 2 0.0202 - 4 0.0101 - 7 0.343 - 15 0.0101 - 21 0.0202 - 26 0.0303 - 30 0.0101 - 37 0.0101 - 40 0.374 - 41 0.141 - 42 0.0202 - 44 0.0101 - - 32 99 9 0 - 2 0.0303 - 4 0.0101 - 7 0.172 - 13 0.0101 - 26 0.0101 - 37 0.0101 - 40 0.475 - 41 0.253 - 42 0.0303 - - 33 166 10 0 - 2 0.0301 - 7 0.0904 - 13 0.00602 - 21 0.0361 - 26 0.0241 - 31 0.00602 - 37 0.00602 - 40 0.53 - 41 0.235 - 42 0.0361 - - 41 43 6 0 - 7 0.0698 - 21 0.0233 - 30 0.0233 - 40 0.651 - 41 0.186 - 42 0.0465 - - 45 96 7 0 - 2 0.0104 - 7 0.0312 - 30 0.0104 - 31 0.0104 - 40 0.354 - 41 0.25 - 46 0.333 - - 47 37 1 0 - 7 1 - - 49 232 14 0 - 0 0.00431 - 2 0.0517 - 7 0.142 - 8 0.00862 - 13 0.00431 - 19 0.00431 - 21 0.0172 - 26 0.0474 - 35 0.00431 - 37 0.0129 - 40 0.418 - 41 0.25 - 42 0.0302 - 46 0.00431 - - 59 3 3 0 - 3 0.333 - 40 0.333 - 42 0.333 - - 69 2 2 0 - 0 0.5 - 40 0.5 - - 49 8591 38 29 - 0 0.047 - 1 0.00291 - 2 0.0221 - 3 0.00466 - 4 0.0363 - 7 0.185 - 8 0.0282 - 9 0.00163 - 10 0.000116 - 12 0.00326 - 13 0.00873 - 14 0.00384 - 15 0.00349 - 17 0.000116 - 19 0.00105 - 20 0.00186 - 21 0.0312 - 22 0.00233 - 24 0.000466 - 26 0.0481 - 28 0.0638 - 29 0.00349 - 30 0.0345 - 31 0.076 - 32 0.000931 - 33 0.00128 - 34 0.000233 - 35 0.00151 - 37 0.00442 - 39 0.000698 - 40 0.227 - 41 0.132 - 42 0.0128 - 43 0.00105 - 44 0.000698 - 45 0.0021 - 46 0.00466 - 47 0.000815 - - 0 2149 33 0 - 0 0.0558 - 1 0.0116 - 2 0.00558 - 3 0.00651 - 4 0.0879 - 7 0.102 - 8 0.0814 - 9 0.00605 - 12 0.000465 - 13 0.0172 - 14 0.00745 - 15 0.00465 - 17 0.000465 - 20 0.000465 - 21 0.053 - 22 0.00279 - 24 0.0014 - 26 0.0219 - 28 0.00279 - 29 0.000465 - 30 0.117 - 31 0.276 - 32 0.000465 - 33 0.000465 - 35 0.00372 - 37 0.00233 - 39 0.000931 - 40 0.0749 - 41 0.0433 - 42 0.00465 - 45 0.00558 - 46 0.000465 - 47 0.000465 - - 1 9 3 0 - 0 0.111 - 31 0.778 - 47 0.111 - - 2 61 13 0 - 0 0.115 - 7 0.0328 - 8 0.0164 - 12 0.0492 - 21 0.0164 - 26 0.0656 - 28 0.18 - 29 0.213 - 30 0.0984 - 31 0.082 - 32 0.0492 - 33 0.0656 - 45 0.0164 - - 8 4 2 0 - 7 0.75 - 41 0.25 - - 12 581 7 0 - 0 0.31 - 21 0.0172 - 22 0.00172 - 28 0.664 - 29 0.00172 - 32 0.00172 - 41 0.00344 - - 13 14 7 0 - 7 0.357 - 14 0.143 - 26 0.143 - 30 0.0714 - 37 0.0714 - 40 0.143 - 41 0.0714 - - 21 224 16 0 - 0 0.196 - 3 0.00446 - 4 0.0491 - 7 0.0268 - 8 0.0714 - 13 0.0179 - 20 0.00446 - 21 0.0179 - 26 0.0179 - 28 0.366 - 30 0.0402 - 31 0.156 - 40 0.00893 - 41 0.00893 - 42 0.00893 - 46 0.00446 - - 26 59 4 0 - 0 0.0169 - 21 0.0169 - 28 0.932 - 45 0.0339 - - 28 735 26 0 - 0 0.00544 - 2 0.0667 - 3 0.00272 - 4 0.0517 - 7 0.291 - 8 0.015 - 12 0.00136 - 13 0.0068 - 14 0.00816 - 15 0.00544 - 20 0.0068 - 21 0.0381 - 22 0.00408 - 26 0.0803 - 29 0.00136 - 30 0.00952 - 31 0.00136 - 35 0.00408 - 37 0.0109 - 39 0.00272 - 40 0.215 - 41 0.144 - 42 0.00952 - 44 0.00136 - 46 0.015 - 47 0.00136 - - 29 723 27 0 - 0 0.00138 - 2 0.0277 - 3 0.0166 - 4 0.0194 - 7 0.383 - 8 0.0194 - 9 0.00138 - 12 0.00138 - 13 0.0138 - 14 0.00553 - 15 0.0152 - 19 0.00692 - 20 0.00692 - 21 0.0332 - 22 0.00277 - 26 0.116 - 30 0.00553 - 31 0.00138 - 32 0.00138 - 37 0.00415 - 40 0.169 - 41 0.129 - 42 0.0111 - 43 0.00138 - 44 0.00138 - 45 0.00138 - 46 0.00415 - - 30 476 29 0 - 0 0.0168 - 2 0.0147 - 3 0.0063 - 4 0.0315 - 7 0.332 - 8 0.0105 - 10 0.0021 - 12 0.0126 - 13 0.0126 - 14 0.0105 - 15 0.0021 - 20 0.0021 - 21 0.0441 - 22 0.0021 - 26 0.105 - 28 0.0021 - 29 0.0021 - 30 0.0084 - 31 0.0021 - 33 0.0084 - 34 0.0021 - 35 0.0021 - 37 0.0063 - 39 0.0042 - 40 0.197 - 41 0.139 - 42 0.0126 - 43 0.0042 - 46 0.0042 - - 31 679 25 0 - 0 0.0103 - 2 0.0353 - 3 0.00736 - 4 0.0177 - 7 0.384 - 8 0.00884 - 12 0.0103 - 13 0.00295 - 15 0.00147 - 19 0.00295 - 20 0.00147 - 21 0.0177 - 26 0.0854 - 29 0.0118 - 30 0.00442 - 35 0.00147 - 37 0.00295 - 40 0.225 - 41 0.137 - 42 0.0206 - 43 0.00147 - 44 0.00442 - 45 0.00147 - 46 0.00147 - 47 0.00147 - - 32 203 15 0 - 0 0.0197 - 2 0.0542 - 4 0.0345 - 7 0.31 - 8 0.00985 - 13 0.0148 - 21 0.0394 - 22 0.00493 - 26 0.0788 - 31 0.00493 - 32 0.00493 - 37 0.00493 - 40 0.241 - 41 0.163 - 42 0.0148 - - 33 209 19 0 - 2 0.0287 - 3 0.00957 - 4 0.0383 - 7 0.297 - 8 0.0239 - 13 0.00478 - 19 0.00478 - 20 0.00478 - 21 0.0383 - 22 0.00478 - 26 0.0718 - 34 0.00478 - 37 0.00957 - 40 0.254 - 41 0.167 - 42 0.0191 - 43 0.00478 - 46 0.00478 - 47 0.00957 - - 41 627 13 0 - 0 0.00159 - 2 0.00159 - 7 0.0223 - 20 0.00159 - 21 0.00159 - 26 0.00319 - 29 0.00638 - 30 0.00797 - 31 0.00159 - 40 0.619 - 41 0.313 - 42 0.0191 - 47 0.00159 - - 42 15 6 0 - 7 0.0667 - 26 0.0667 - 40 0.667 - 41 0.0667 - 42 0.0667 - 43 0.0667 - - 43 4 3 0 - 2 0.25 - 7 0.25 - 40 0.5 - - 45 38 7 0 - 7 0.105 - 21 0.105 - 28 0.0526 - 31 0.105 - 40 0.237 - 41 0.0789 - 46 0.316 - - 46 6 2 0 - 40 0.333 - 41 0.667 - - 47 19 5 0 - 2 0.0526 - 7 0.421 - 26 0.0526 - 40 0.263 - 41 0.211 - - 48 81 9 0 - 0 0.0123 - 2 0.0123 - 7 0.173 - 13 0.0123 - 15 0.0247 - 26 0.037 - 40 0.444 - 41 0.247 - 42 0.037 - - 49 150 16 0 - 0 0.0133 - 2 0.0133 - 4 0.02 - 7 0.147 - 8 0.0133 - 13 0.00667 - 21 0.02 - 22 0.0133 - 26 0.0533 - 28 0.0333 - 30 0.02 - 31 0.02 - 40 0.327 - 41 0.267 - 42 0.0133 - 46 0.02 - - 55 1082 27 0 - 0 0.012 - 2 0.0407 - 3 0.000924 - 4 0.0129 - 7 0.174 - 8 0.00277 - 12 0.00555 - 13 0.0037 - 15 0.000924 - 19 0.000924 - 21 0.0213 - 22 0.00185 - 24 0.000924 - 26 0.0434 - 29 0.000924 - 30 0.00277 - 31 0.000924 - 32 0.000924 - 33 0.000924 - 37 0.00555 - 40 0.418 - 41 0.216 - 42 0.0259 - 43 0.00185 - 44 0.000924 - 45 0.000924 - 46 0.00277 - - 57 294 15 0 - 0 0.034 - 2 0.0272 - 7 0.119 - 8 0.0034 - 12 0.0102 - 13 0.0034 - 21 0.0068 - 26 0.0136 - 33 0.0034 - 37 0.0102 - 40 0.497 - 41 0.248 - 42 0.0136 - 43 0.0034 - 46 0.0068 - - 59 95 10 0 - 2 0.0211 - 4 0.0105 - 7 0.242 - 21 0.0316 - 22 0.0105 - 26 0.0737 - 37 0.0316 - 40 0.326 - 41 0.221 - 42 0.0316 - - 62 38 6 0 - 7 0.158 - 21 0.0263 - 26 0.0263 - 40 0.5 - 41 0.237 - 42 0.0526 - - 64 6 3 0 - 2 0.167 - 7 0.333 - 40 0.5 - - 68 1 1 0 - 42 1 - - 69 3 3 0 - 37 0.333 - 40 0.333 - 41 0.333 - - 50 39 9 0 - 0 0.0513 - 1 0.0513 - 13 0.0256 - 21 0.103 - 26 0.0769 - 28 0.256 - 29 0.0513 - 30 0.308 - 31 0.0769 - - 51 53 8 1 - 26 0.0189 - 40 0.679 - 41 0.113 - 42 0.0189 - 43 0.0377 - 44 0.0189 - 46 0.0189 - 47 0.0943 - - 28 8 4 0 - 40 0.5 - 42 0.125 - 43 0.25 - 47 0.125 - - 52 22 6 1 - 7 0.0455 - 21 0.0455 - 26 0.182 - 40 0.273 - 41 0.364 - 46 0.0909 - - 41 9 2 0 - 40 0.111 - 41 0.889 - - 55 47284 43 31 - 0 0.00854 - 1 2.11e-05 - 2 0.0387 - 3 0.00247 - 4 0.0117 - 5 8.46e-05 - 6 4.23e-05 - 7 0.211 - 8 0.00544 - 9 0.000656 - 10 6.34e-05 - 12 0.00364 - 13 0.00398 - 14 0.000613 - 15 0.00271 - 17 0.000106 - 19 0.0018 - 20 0.000338 - 21 0.0256 - 22 0.00235 - 23 6.34e-05 - 24 0.00343 - 25 2.11e-05 - 26 0.0759 - 28 0.000486 - 29 0.00235 - 30 0.00334 - 31 0.00131 - 32 0.000698 - 33 0.00123 - 34 0.000761 - 35 0.000423 - 37 0.00419 - 38 2.11e-05 - 39 0.000952 - 40 0.404 - 41 0.157 - 42 0.0156 - 43 0.0014 - 44 0.000909 - 45 0.00123 - 46 0.00338 - 47 0.00135 - - 0 6750 33 0 - 0 0.00252 - 2 0.0296 - 3 0.000444 - 4 0.00504 - 7 0.114 - 8 0.00296 - 12 0.000889 - 13 0.00207 - 14 0.000148 - 15 0.000593 - 19 0.00119 - 20 0.000296 - 21 0.0169 - 22 0.000148 - 23 0.000148 - 24 0.000148 - 26 0.0105 - 29 0.000593 - 30 0.00222 - 31 0.00207 - 32 0.000296 - 33 0.000148 - 34 0.00207 - 35 0.00148 - 37 0.00252 - 40 0.549 - 41 0.221 - 42 0.0246 - 43 0.00119 - 44 0.00104 - 45 0.000741 - 46 0.00252 - 47 0.00119 - - 1 94 13 0 - 0 0.0426 - 2 0.0532 - 4 0.0319 - 7 0.117 - 12 0.0106 - 21 0.0213 - 26 0.0213 - 30 0.0426 - 31 0.0213 - 33 0.0213 - 40 0.34 - 41 0.255 - 42 0.0213 - - 2 4 4 0 - 2 0.25 - 4 0.25 - 7 0.25 - 40 0.25 - - 8 38 9 0 - 0 0.0526 - 2 0.0263 - 7 0.211 - 19 0.0526 - 21 0.0526 - 26 0.0263 - 40 0.342 - 41 0.184 - 42 0.0526 - - 12 4 3 0 - 0 0.25 - 26 0.25 - 28 0.5 - - 13 94 10 0 - 0 0.0426 - 2 0.0638 - 7 0.234 - 12 0.0213 - 13 0.0106 - 21 0.0106 - 26 0.0957 - 34 0.0106 - 40 0.362 - 41 0.149 - - 14 29 7 0 - 2 0.0345 - 7 0.448 - 21 0.0345 - 26 0.069 - 30 0.0345 - 40 0.276 - 41 0.103 - - 15 17 7 0 - 7 0.0588 - 26 0.0588 - 40 0.294 - 41 0.294 - 42 0.0588 - 46 0.176 - 47 0.0588 - - 18 17 5 0 - 7 0.0588 - 21 0.176 - 26 0.0588 - 40 0.588 - 41 0.118 - - 21 265 16 0 - 0 0.00377 - 2 0.0226 - 3 0.00377 - 7 0.117 - 19 0.00377 - 21 0.0113 - 26 0.0113 - 28 0.00755 - 31 0.00377 - 35 0.00755 - 40 0.494 - 41 0.245 - 42 0.0566 - 44 0.00377 - 46 0.00377 - 47 0.00377 - - 28 12476 38 0 - 0 0.00697 - 2 0.0437 - 3 0.00176 - 4 0.013 - 7 0.248 - 8 0.00601 - 9 0.0012 - 10 8.02e-05 - 12 0.00353 - 13 0.00449 - 14 0.000721 - 15 0.00208 - 17 8.02e-05 - 19 0.00168 - 20 0.000802 - 21 0.0374 - 22 0.00297 - 23 8.02e-05 - 24 0.00513 - 26 0.0612 - 28 0.000641 - 29 0.00224 - 30 0.00313 - 31 0.00104 - 32 0.000321 - 33 0.00128 - 34 0.000481 - 35 0.000321 - 37 0.00529 - 39 0.0016 - 40 0.389 - 41 0.134 - 42 0.0119 - 43 0.0012 - 44 0.000721 - 45 0.00136 - 46 0.00361 - 47 0.00112 - - 29 8581 37 0 - 0 0.00373 - 2 0.0332 - 3 0.00629 - 4 0.0124 - 5 0.000233 - 7 0.253 - 8 0.0107 - 9 0.000699 - 10 0.000117 - 12 0.00105 - 13 0.00594 - 14 0.000583 - 15 0.00886 - 19 0.00408 - 21 0.0198 - 22 0.00431 - 24 0.00408 - 26 0.19 - 28 0.000583 - 29 0.0021 - 30 0.00501 - 31 0.00163 - 32 0.000233 - 33 0.000233 - 34 0.000117 - 35 0.000117 - 37 0.00373 - 38 0.000117 - 39 0.0021 - 40 0.295 - 41 0.117 - 42 0.00979 - 43 0.000932 - 44 0.000233 - 45 0.00128 - 46 0.000583 - 47 0.000699 - - 30 6281 37 0 - 0 0.0275 - 2 0.0393 - 3 0.00271 - 4 0.0146 - 6 0.000159 - 7 0.217 - 8 0.00494 - 9 0.000478 - 12 0.0126 - 13 0.0035 - 14 0.000955 - 15 0.00191 - 17 0.000318 - 19 0.00127 - 20 0.000318 - 21 0.0318 - 22 0.00223 - 24 0.0043 - 26 0.0715 - 28 0.000159 - 29 0.00462 - 30 0.00239 - 31 0.00127 - 32 0.00223 - 33 0.00478 - 34 0.000955 - 35 0.000159 - 37 0.00478 - 39 0.000159 - 40 0.367 - 41 0.154 - 42 0.0135 - 43 0.000955 - 44 0.00127 - 45 0.00191 - 46 0.00191 - 47 0.000478 - - 31 2695 36 0 - 0 0.00631 - 2 0.0445 - 3 0.00223 - 4 0.0137 - 6 0.000371 - 7 0.277 - 8 0.00334 - 12 0.00186 - 13 0.00445 - 14 0.00148 - 15 0.000742 - 19 0.00148 - 20 0.000371 - 21 0.0249 - 22 0.00223 - 24 0.00223 - 25 0.000371 - 26 0.0716 - 28 0.000742 - 29 0.00519 - 30 0.00334 - 31 0.000742 - 32 0.000742 - 33 0.000371 - 34 0.000371 - 35 0.000371 - 37 0.00297 - 39 0.000742 - 40 0.35 - 41 0.157 - 42 0.0122 - 43 0.00223 - 44 0.000742 - 45 0.00148 - 46 0.00148 - 47 0.000742 - - 32 1863 32 0 - 0 0.00966 - 2 0.0446 - 3 0.00215 - 4 0.0193 - 5 0.000537 - 7 0.188 - 8 0.00376 - 9 0.00161 - 10 0.000537 - 12 0.00429 - 13 0.00429 - 15 0.00107 - 17 0.00107 - 19 0.000537 - 21 0.0327 - 22 0.00376 - 24 0.0059 - 26 0.0505 - 28 0.00107 - 29 0.00107 - 30 0.00322 - 32 0.00322 - 37 0.00751 - 39 0.000537 - 40 0.429 - 41 0.144 - 42 0.0247 - 43 0.000537 - 44 0.00161 - 45 0.00161 - 46 0.00215 - 47 0.00429 - - 33 3326 33 0 - 0 0.00301 - 2 0.0427 - 3 0.0018 - 4 0.018 - 7 0.196 - 8 0.00331 - 9 0.0012 - 12 0.0018 - 13 0.00481 - 14 0.000601 - 15 0.0012 - 19 0.000902 - 20 0.000301 - 21 0.0216 - 22 0.0021 - 23 0.000301 - 24 0.00541 - 26 0.0496 - 29 0.0015 - 30 0.0021 - 31 0.000601 - 33 0.000902 - 34 0.000301 - 37 0.00241 - 39 0.000902 - 40 0.442 - 41 0.164 - 42 0.0213 - 43 0.0015 - 44 0.0012 - 45 0.0012 - 46 0.0012 - 47 0.00361 - - 41 223 9 0 - 0 0.00448 - 2 0.00448 - 3 0.00448 - 30 0.00448 - 40 0.807 - 41 0.139 - 42 0.0269 - 43 0.00448 - 46 0.00448 - - 42 82 6 0 - 7 0.0122 - 13 0.0122 - 40 0.939 - 41 0.0122 - 42 0.0122 - 46 0.0122 - - 44 13 2 0 - 40 0.0769 - 43 0.923 - - 45 212 7 0 - 7 0.0425 - 21 0.00472 - 26 0.00943 - 40 0.448 - 41 0.241 - 42 0.0142 - 46 0.241 - - 46 73 8 0 - 0 0.0274 - 2 0.0137 - 7 0.247 - 21 0.0274 - 37 0.0137 - 40 0.479 - 41 0.178 - 42 0.0137 - - 47 75 7 0 - 7 0.693 - 26 0.213 - 31 0.0133 - 40 0.0267 - 41 0.0267 - 42 0.0133 - 46 0.0133 - - 48 97 10 0 - 0 0.0206 - 2 0.0825 - 4 0.0103 - 7 0.134 - 12 0.0103 - 26 0.0619 - 37 0.0103 - 40 0.433 - 41 0.206 - 42 0.0309 - - 49 604 21 0 - 0 0.00331 - 2 0.0348 - 3 0.00166 - 4 0.00828 - 7 0.118 - 8 0.00331 - 13 0.00331 - 21 0.00993 - 26 0.0281 - 29 0.00166 - 33 0.00166 - 34 0.00331 - 35 0.00166 - 37 0.00166 - 40 0.518 - 41 0.214 - 42 0.0315 - 43 0.00331 - 44 0.00166 - 46 0.00497 - 47 0.00662 - - 55 1276 24 0 - 0 0.00549 - 1 0.000784 - 2 0.0353 - 3 0.000784 - 4 0.00392 - 7 0.143 - 8 0.00157 - 12 0.000784 - 13 0.000784 - 21 0.00862 - 26 0.0533 - 28 0.000784 - 29 0.00313 - 30 0.00784 - 31 0.00157 - 32 0.00157 - 34 0.00235 - 37 0.00705 - 40 0.472 - 41 0.226 - 42 0.0188 - 43 0.000784 - 46 0.00157 - 47 0.00235 - - 57 656 22 0 - 0 0.0107 - 2 0.0366 - 4 0.00457 - 7 0.145 - 8 0.00152 - 12 0.00305 - 14 0.00152 - 15 0.00152 - 19 0.00152 - 26 0.0244 - 29 0.00152 - 30 0.00457 - 31 0.00152 - 32 0.00152 - 33 0.00152 - 34 0.00152 - 37 0.0061 - 40 0.486 - 41 0.248 - 42 0.0122 - 43 0.00152 - 44 0.00305 - - 58 23 4 0 - 7 0.087 - 29 0.0435 - 40 0.696 - 41 0.174 - - 59 1272 26 0 - 0 0.0118 - 2 0.0645 - 3 0.000786 - 4 0.0055 - 5 0.000786 - 7 0.21 - 8 0.0055 - 12 0.00629 - 13 0.00314 - 14 0.000786 - 15 0.000786 - 19 0.000786 - 21 0.0204 - 22 0.00157 - 26 0.0558 - 29 0.00314 - 30 0.00393 - 33 0.000786 - 37 0.00472 - 40 0.411 - 41 0.166 - 42 0.0118 - 44 0.00236 - 45 0.00157 - 46 0.00472 - 47 0.00157 - - 62 57 9 0 - 0 0.0351 - 4 0.0175 - 7 0.175 - 21 0.0175 - 31 0.0175 - 37 0.0175 - 40 0.368 - 41 0.316 - 42 0.0351 - - 69 56 6 0 - 2 0.0536 - 7 0.179 - 26 0.0536 - 40 0.5 - 41 0.196 - 44 0.0179 - - 74 2 2 0 - 31 0.5 - 40 0.5 - - 57 37637 38 30 - 0 0.0109 - 2 0.0336 - 3 0.00109 - 4 0.00717 - 5 5.31e-05 - 7 0.128 - 8 0.00438 - 9 2.66e-05 - 10 0.000106 - 12 0.00476 - 13 0.00404 - 14 0.000372 - 15 0.00215 - 17 2.66e-05 - 19 0.000797 - 20 0.000239 - 21 0.0102 - 22 0.000771 - 23 5.31e-05 - 26 0.0253 - 28 0.000345 - 29 0.00361 - 30 0.00321 - 31 0.00138 - 32 0.00149 - 33 0.00159 - 34 0.000824 - 35 0.000159 - 37 0.00343 - 39 7.97e-05 - 40 0.523 - 41 0.199 - 42 0.0209 - 43 0.00186 - 44 0.00104 - 45 0.000824 - 46 0.00178 - 47 0.00133 - - 0 1140 30 0 - 0 0.0105 - 2 0.0184 - 3 0.00175 - 4 0.0123 - 7 0.113 - 8 0.0114 - 10 0.000877 - 12 0.00351 - 13 0.00614 - 15 0.00175 - 19 0.00175 - 21 0.0281 - 22 0.000877 - 26 0.0211 - 28 0.000877 - 29 0.00175 - 30 0.00439 - 31 0.0123 - 32 0.00175 - 33 0.00351 - 34 0.000877 - 35 0.00175 - 37 0.00614 - 39 0.000877 - 40 0.482 - 41 0.218 - 42 0.0281 - 44 0.00351 - 45 0.00175 - 46 0.000877 - - 8 57 8 0 - 0 0.0175 - 2 0.0702 - 7 0.123 - 29 0.0175 - 37 0.0351 - 40 0.491 - 41 0.228 - 42 0.0175 - - 12 9 4 0 - 0 0.111 - 28 0.333 - 31 0.222 - 40 0.333 - - 13 73 10 0 - 0 0.0137 - 2 0.0548 - 7 0.164 - 8 0.0137 - 26 0.0274 - 29 0.0137 - 33 0.0274 - 40 0.534 - 41 0.137 - 42 0.0137 - - 14 26 7 0 - 0 0.0385 - 2 0.0385 - 7 0.192 - 8 0.0385 - 40 0.5 - 41 0.154 - 42 0.0385 - - 15 6 4 0 - 2 0.167 - 7 0.167 - 40 0.5 - 46 0.167 - - 21 68 10 0 - 0 0.0147 - 4 0.0147 - 7 0.0735 - 21 0.0735 - 28 0.0441 - 32 0.0147 - 40 0.471 - 41 0.221 - 42 0.0588 - 46 0.0147 - - 28 2496 32 0 - 0 0.012 - 2 0.0341 - 3 0.0028 - 4 0.018 - 7 0.156 - 8 0.00401 - 10 0.000401 - 12 0.00361 - 13 0.00561 - 14 0.0016 - 15 0.0028 - 19 0.000801 - 20 0.0016 - 21 0.0148 - 26 0.0268 - 29 0.002 - 30 0.002 - 31 0.000401 - 32 0.0016 - 33 0.0012 - 34 0.000401 - 35 0.000401 - 37 0.00801 - 39 0.000401 - 40 0.508 - 41 0.163 - 42 0.018 - 43 0.000801 - 44 0.0016 - 45 0.002 - 46 0.002 - 47 0.002 - - 29 2493 30 0 - 0 0.00682 - 2 0.0253 - 3 0.00201 - 4 0.014 - 7 0.271 - 8 0.0132 - 10 0.000401 - 12 0.00281 - 13 0.01 - 14 0.0012 - 15 0.00722 - 19 0.00361 - 21 0.016 - 22 0.000802 - 23 0.000401 - 26 0.0401 - 29 0.00321 - 30 0.00361 - 31 0.000401 - 32 0.0012 - 34 0.000401 - 37 0.00441 - 39 0.000401 - 40 0.361 - 41 0.192 - 42 0.0136 - 43 0.000802 - 44 0.0012 - 45 0.0012 - 46 0.0016 - - 30 1791 27 0 - 0 0.029 - 2 0.0374 - 3 0.00112 - 4 0.0207 - 7 0.13 - 8 0.00503 - 12 0.014 - 13 0.00838 - 15 0.00391 - 19 0.00168 - 20 0.000558 - 21 0.0151 - 22 0.00279 - 26 0.0352 - 28 0.000558 - 29 0.00335 - 30 0.00391 - 31 0.00168 - 32 0.00447 - 33 0.00558 - 37 0.00112 - 40 0.419 - 41 0.229 - 42 0.0218 - 44 0.00112 - 46 0.00168 - 47 0.00168 - - 31 7097 32 0 - 0 0.0194 - 2 0.0327 - 3 0.000986 - 4 0.00592 - 7 0.131 - 8 0.00535 - 10 0.000141 - 12 0.0069 - 13 0.0038 - 14 0.000564 - 15 0.00268 - 19 0.000423 - 21 0.00972 - 22 0.00127 - 26 0.034 - 28 0.000423 - 29 0.00986 - 30 0.00211 - 31 0.00211 - 32 0.00352 - 33 0.00352 - 34 0.00141 - 35 0.000282 - 37 0.00211 - 40 0.477 - 41 0.215 - 42 0.0201 - 43 0.00366 - 44 0.00113 - 45 0.000705 - 46 0.00155 - 47 0.00127 - - 32 565 24 0 - 0 0.0159 - 2 0.0425 - 3 0.00177 - 4 0.0106 - 7 0.113 - 8 0.00354 - 12 0.0124 - 13 0.00177 - 14 0.00177 - 15 0.00177 - 19 0.00354 - 21 0.0283 - 23 0.00177 - 26 0.023 - 29 0.00531 - 30 0.00354 - 31 0.00177 - 32 0.00177 - 37 0.00708 - 40 0.487 - 41 0.196 - 42 0.0301 - 43 0.00354 - 46 0.00177 - - 33 905 26 0 - 0 0.00663 - 2 0.0365 - 4 0.0133 - 5 0.0011 - 7 0.105 - 8 0.0011 - 9 0.0011 - 12 0.00552 - 13 0.00442 - 14 0.0011 - 15 0.00221 - 19 0.0011 - 20 0.0011 - 21 0.00884 - 26 0.0177 - 29 0.00221 - 30 0.00442 - 31 0.00331 - 37 0.00552 - 40 0.543 - 41 0.19 - 42 0.032 - 43 0.00331 - 44 0.00221 - 46 0.00331 - 47 0.00442 - - 41 1622 14 0 - 2 0.00185 - 7 0.0333 - 8 0.00123 - 13 0.00185 - 15 0.000617 - 19 0.000617 - 21 0.00185 - 26 0.00308 - 40 0.763 - 41 0.179 - 42 0.00863 - 43 0.000617 - 44 0.000617 - 47 0.00308 - - 42 61 6 0 - 4 0.0328 - 21 0.0164 - 40 0.721 - 41 0.082 - 42 0.131 - 46 0.0164 - - 43 6 4 0 - 0 0.167 - 40 0.5 - 41 0.167 - 42 0.167 - - 44 8 1 0 - 43 1 - - 45 65 9 0 - 7 0.0769 - 21 0.0154 - 26 0.0308 - 29 0.0154 - 31 0.0154 - 40 0.569 - 41 0.154 - 42 0.0154 - 46 0.108 - - 46 184 13 0 - 2 0.038 - 4 0.0109 - 7 0.0435 - 13 0.00543 - 21 0.00543 - 26 0.00543 - 30 0.00543 - 33 0.00543 - 40 0.543 - 41 0.304 - 42 0.0109 - 44 0.00543 - 45 0.0163 - - 47 27 4 0 - 0 0.037 - 40 0.815 - 41 0.111 - 42 0.037 - - 48 712 17 0 - 0 0.0014 - 2 0.0435 - 4 0.00281 - 7 0.0955 - 12 0.00421 - 13 0.00281 - 21 0.00843 - 26 0.00983 - 30 0.0014 - 31 0.00281 - 37 0.0014 - 40 0.552 - 41 0.256 - 42 0.0126 - 44 0.0014 - 46 0.00281 - 47 0.0014 - - 49 1600 26 0 - 0 0.00938 - 2 0.0425 - 4 0.00313 - 5 0.000625 - 7 0.109 - 8 0.00187 - 12 0.0025 - 13 0.005 - 15 0.00187 - 20 0.000625 - 21 0.01 - 26 0.0244 - 29 0.000625 - 30 0.0025 - 31 0.000625 - 32 0.000625 - 33 0.00125 - 37 0.00438 - 40 0.514 - 41 0.233 - 42 0.0269 - 43 0.00125 - 44 0.000625 - 45 0.000625 - 46 0.00187 - 47 0.00125 - - 55 11225 30 0 - 0 0.00775 - 2 0.0394 - 3 0.00098 - 4 0.00383 - 7 0.139 - 8 0.00276 - 12 0.00454 - 13 0.00249 - 15 0.00107 - 19 0.000356 - 21 0.00775 - 22 0.000713 - 26 0.0247 - 28 0.000178 - 29 0.00205 - 30 0.0049 - 31 0.000356 - 32 0.000535 - 33 0.000802 - 34 0.00125 - 35 8.91e-05 - 37 0.00365 - 40 0.533 - 41 0.192 - 42 0.0211 - 43 0.00125 - 44 0.000624 - 45 0.000713 - 46 0.00151 - 47 0.00134 - - 57 4244 30 0 - 0 0.00683 - 2 0.028 - 3 0.000943 - 4 0.00259 - 7 0.0738 - 8 0.00448 - 12 0.00212 - 13 0.00259 - 14 0.000236 - 15 0.00212 - 19 0.000707 - 20 0.000236 - 21 0.00448 - 22 0.000943 - 26 0.0179 - 29 0.00283 - 30 0.00259 - 31 0.000707 - 32 0.00118 - 33 0.000236 - 34 0.000943 - 37 0.00283 - 40 0.621 - 41 0.192 - 42 0.0229 - 43 0.00189 - 44 0.000707 - 45 0.000236 - 46 0.000943 - 47 0.00141 - - 58 46 6 0 - 2 0.0652 - 7 0.0217 - 40 0.804 - 41 0.0435 - 42 0.0435 - 44 0.0217 - - 59 626 24 0 - 0 0.00479 - 2 0.0399 - 3 0.00319 - 4 0.0208 - 7 0.128 - 8 0.00319 - 12 0.00799 - 13 0.00479 - 17 0.0016 - 20 0.0016 - 21 0.024 - 26 0.0272 - 29 0.0016 - 30 0.00319 - 31 0.0016 - 33 0.00319 - 37 0.0016 - 40 0.494 - 41 0.193 - 42 0.024 - 43 0.0016 - 44 0.0016 - 45 0.00479 - 46 0.00319 - - 62 377 12 0 - 0 0.00265 - 2 0.0796 - 7 0.0531 - 12 0.00265 - 13 0.00796 - 21 0.00265 - 26 0.00531 - 33 0.00265 - 40 0.637 - 41 0.191 - 42 0.0133 - 46 0.00265 - - 64 28 5 0 - 0 0.0357 - 26 0.0357 - 40 0.714 - 41 0.143 - 42 0.0714 - - 67 1 1 0 - 43 1 - - 69 45 7 0 - 0 0.0222 - 2 0.0222 - 26 0.0222 - 37 0.0222 - 40 0.756 - 41 0.0889 - 42 0.0667 - - 58 317 27 20 - 0 0.0252 - 1 0.00315 - 2 0.0631 - 4 0.0599 - 7 0.271 - 8 0.0126 - 9 0.00315 - 12 0.0126 - 13 0.0158 - 15 0.0158 - 19 0.0158 - 20 0.00631 - 21 0.041 - 26 0.0315 - 28 0.0315 - 29 0.0126 - 30 0.0284 - 31 0.0158 - 32 0.00315 - 33 0.00315 - 35 0.00315 - 37 0.0126 - 40 0.202 - 41 0.0631 - 42 0.00631 - 45 0.0379 - 47 0.00315 - - 0 16 10 0 - 0 0.0625 - 1 0.0625 - 4 0.188 - 7 0.0625 - 9 0.0625 - 13 0.0625 - 29 0.0625 - 31 0.0625 - 40 0.25 - 45 0.125 - - 2 10 7 0 - 0 0.2 - 21 0.1 - 28 0.3 - 29 0.1 - 30 0.1 - 32 0.1 - 45 0.1 - - 12 3 1 0 - 28 1 - - 13 3 3 0 - 7 0.333 - 8 0.333 - 45 0.333 - - 21 3 3 0 - 4 0.333 - 21 0.333 - 28 0.333 - - 28 13 7 0 - 0 0.0769 - 2 0.0769 - 4 0.308 - 7 0.231 - 13 0.154 - 21 0.0769 - 40 0.0769 - - 29 9 4 0 - 0 0.111 - 4 0.111 - 7 0.556 - 26 0.222 - - 30 3 2 0 - 4 0.667 - 40 0.333 - - 31 18 8 0 - 7 0.556 - 15 0.0556 - 20 0.0556 - 21 0.0556 - 30 0.0556 - 37 0.0556 - 40 0.0556 - 41 0.111 - - 32 9 6 0 - 2 0.111 - 4 0.222 - 7 0.222 - 8 0.111 - 21 0.222 - 45 0.111 - - 33 9 7 0 - 4 0.111 - 7 0.333 - 8 0.111 - 13 0.111 - 26 0.111 - 30 0.111 - 40 0.111 - - 41 15 3 0 - 40 0.733 - 41 0.133 - 42 0.133 - - 46 7 4 0 - 2 0.143 - 35 0.143 - 40 0.571 - 41 0.143 - - 48 19 8 0 - 2 0.0526 - 4 0.0526 - 7 0.263 - 12 0.158 - 37 0.0526 - 40 0.211 - 41 0.158 - 45 0.0526 - - 49 14 8 0 - 2 0.0714 - 7 0.357 - 12 0.0714 - 28 0.0714 - 37 0.0714 - 40 0.214 - 41 0.0714 - 45 0.0714 - - 55 63 13 0 - 0 0.0317 - 2 0.0794 - 4 0.0159 - 7 0.365 - 19 0.0159 - 21 0.0317 - 26 0.0794 - 30 0.0317 - 31 0.0159 - 40 0.19 - 41 0.0794 - 45 0.0476 - 47 0.0159 - - 57 50 12 0 - 2 0.08 - 4 0.02 - 7 0.3 - 15 0.02 - 19 0.06 - 29 0.02 - 30 0.06 - 31 0.06 - 37 0.02 - 40 0.26 - 41 0.08 - 45 0.02 - - 62 11 6 0 - 7 0.455 - 15 0.0909 - 21 0.182 - 26 0.0909 - 40 0.0909 - 45 0.0909 - - 64 4 3 0 - 30 0.25 - 40 0.5 - 41 0.25 - - 69 30 16 0 - 0 0.0333 - 2 0.2 - 4 0.0333 - 7 0.167 - 8 0.0333 - 13 0.0333 - 15 0.0667 - 19 0.0333 - 20 0.0333 - 21 0.0667 - 26 0.0333 - 28 0.0333 - 29 0.0333 - 33 0.0333 - 40 0.133 - 41 0.0333 - - 59 2627 34 12 - 0 0.00152 - 1 0.00114 - 2 0.0152 - 3 0.0175 - 4 0.212 - 7 0.239 - 8 0.0499 - 9 0.00495 - 10 0.00266 - 12 0.000381 - 13 0.0495 - 14 0.0461 - 15 0.0236 - 17 0.00114 - 19 0.000761 - 20 0.0529 - 21 0.0487 - 22 0.00457 - 24 0.00114 - 26 0.0457 - 30 0.0164 - 31 0.0019 - 35 0.00533 - 37 0.00495 - 38 0.000761 - 39 0.00876 - 40 0.0761 - 41 0.0502 - 42 0.00571 - 43 0.000761 - 44 0.000381 - 45 0.00457 - 46 0.00533 - 47 0.000381 - - 0 6 5 0 - 4 0.167 - 7 0.333 - 9 0.167 - 21 0.167 - 26 0.167 - - 8 2 2 0 - 13 0.5 - 26 0.5 - - 13 19 8 0 - 4 0.263 - 7 0.0526 - 8 0.0526 - 13 0.158 - 14 0.211 - 20 0.158 - 21 0.0526 - 40 0.0526 - - 14 7 6 0 - 4 0.286 - 7 0.143 - 8 0.143 - 13 0.143 - 14 0.143 - 20 0.143 - - 15 2 2 0 - 4 0.5 - 47 0.5 - - 28 861 27 0 - 1 0.00232 - 2 0.0105 - 3 0.0186 - 4 0.28 - 7 0.163 - 8 0.065 - 9 0.00581 - 10 0.00348 - 13 0.0674 - 14 0.0569 - 15 0.0267 - 17 0.00232 - 20 0.0767 - 21 0.0465 - 22 0.00116 - 24 0.00116 - 26 0.0279 - 30 0.0267 - 31 0.00116 - 35 0.0105 - 37 0.00813 - 38 0.00116 - 39 0.0105 - 40 0.0511 - 41 0.0267 - 45 0.00581 - 46 0.00348 - - 29 473 25 0 - 0 0.00634 - 2 0.0127 - 3 0.0381 - 4 0.22 - 7 0.271 - 8 0.0338 - 10 0.00211 - 13 0.0359 - 14 0.0486 - 15 0.0296 - 19 0.00423 - 20 0.0507 - 21 0.0381 - 22 0.00634 - 24 0.00211 - 26 0.0592 - 30 0.0148 - 31 0.00211 - 35 0.00211 - 39 0.0169 - 40 0.0592 - 41 0.0359 - 42 0.00423 - 45 0.00423 - 46 0.00211 - - 30 399 24 0 - 2 0.0125 - 3 0.01 - 4 0.236 - 7 0.188 - 8 0.0852 - 9 0.00752 - 10 0.00251 - 13 0.0677 - 14 0.0727 - 15 0.0276 - 20 0.0501 - 21 0.0351 - 22 0.00752 - 26 0.0376 - 30 0.015 - 31 0.00501 - 35 0.00752 - 37 0.00501 - 39 0.00752 - 40 0.0652 - 41 0.0376 - 42 0.01 - 45 0.00251 - 46 0.00501 - - 31 440 26 0 - 0 0.00227 - 2 0.0159 - 3 0.00455 - 4 0.132 - 7 0.398 - 8 0.0205 - 9 0.00682 - 12 0.00227 - 13 0.0341 - 14 0.0136 - 15 0.0227 - 17 0.00227 - 20 0.0318 - 21 0.0591 - 22 0.00682 - 26 0.0545 - 30 0.00227 - 31 0.00227 - 37 0.00227 - 39 0.00682 - 40 0.107 - 41 0.0477 - 42 0.00682 - 43 0.00227 - 45 0.00682 - 46 0.00909 - - 32 110 19 0 - 2 0.0273 - 3 0.0364 - 4 0.164 - 7 0.2 - 8 0.0818 - 9 0.00909 - 10 0.00909 - 13 0.0545 - 14 0.0545 - 15 0.0273 - 20 0.0364 - 21 0.0818 - 22 0.00909 - 26 0.00909 - 30 0.0364 - 38 0.00909 - 40 0.0636 - 41 0.0818 - 46 0.00909 - - 33 146 20 0 - 1 0.00685 - 2 0.00685 - 3 0.0137 - 4 0.199 - 7 0.24 - 8 0.0342 - 10 0.00685 - 13 0.0137 - 14 0.0205 - 15 0.00685 - 20 0.0479 - 21 0.0753 - 26 0.089 - 35 0.00685 - 37 0.00685 - 40 0.089 - 41 0.103 - 42 0.0205 - 45 0.00685 - 46 0.00685 - - 55 159 15 0 - 2 0.0566 - 4 0.0252 - 7 0.289 - 21 0.0503 - 22 0.00629 - 24 0.00629 - 26 0.0818 - 30 0.0126 - 37 0.0126 - 40 0.214 - 41 0.201 - 42 0.0189 - 43 0.00629 - 44 0.00629 - 46 0.0126 - - 62 13537 29 20 - 0 0.00731 - 2 0.0228 - 3 0.000443 - 4 0.0017 - 7 0.044 - 8 0.00185 - 12 0.00362 - 13 0.000517 - 14 0.000369 - 15 0.000813 - 19 0.000591 - 21 0.00451 - 22 0.000295 - 26 0.00399 - 29 0.00118 - 30 0.000886 - 31 0.000369 - 32 0.000739 - 33 0.00111 - 34 0.000369 - 37 0.00207 - 40 0.699 - 41 0.177 - 42 0.0179 - 43 0.000517 - 44 0.000739 - 45 0.000369 - 46 0.0031 - 47 0.00244 - - 0 792 16 0 - 0 0.00758 - 2 0.0177 - 4 0.00379 - 7 0.0366 - 8 0.00253 - 13 0.00126 - 19 0.00126 - 21 0.0114 - 26 0.0265 - 33 0.00253 - 37 0.00253 - 40 0.652 - 41 0.206 - 42 0.0215 - 46 0.00379 - 47 0.00379 - - 1 31 8 0 - 0 0.0645 - 2 0.0323 - 7 0.0645 - 12 0.0968 - 37 0.0323 - 40 0.419 - 41 0.258 - 42 0.0323 - - 12 37 3 0 - 40 0.784 - 41 0.189 - 46 0.027 - - 14 26 3 0 - 2 0.0769 - 40 0.885 - 46 0.0385 - - 28 1599 24 0 - 0 0.0075 - 2 0.0275 - 4 0.0025 - 7 0.0619 - 8 0.00375 - 12 0.00313 - 14 0.00125 - 15 0.00188 - 19 0.00125 - 21 0.00813 - 26 0.00375 - 29 0.00125 - 30 0.000625 - 31 0.000625 - 32 0.00125 - 33 0.0025 - 37 0.005 - 40 0.634 - 41 0.204 - 42 0.0219 - 43 0.00125 - 44 0.00125 - 46 0.00375 - 47 0.000625 - - 29 1679 23 0 - 0 0.00596 - 2 0.0381 - 3 0.00179 - 4 0.00357 - 7 0.0643 - 8 0.00596 - 12 0.00119 - 14 0.000596 - 15 0.00357 - 21 0.00357 - 22 0.00119 - 26 0.00238 - 29 0.00179 - 30 0.00179 - 31 0.000596 - 32 0.000596 - 37 0.00238 - 40 0.671 - 41 0.172 - 42 0.0125 - 44 0.000596 - 46 0.00238 - 47 0.00238 - - 30 1088 23 0 - 0 0.0165 - 2 0.0239 - 3 0.000919 - 4 0.00368 - 7 0.0469 - 8 0.000919 - 12 0.011 - 13 0.000919 - 14 0.000919 - 19 0.000919 - 21 0.00368 - 22 0.000919 - 26 0.00276 - 29 0.0046 - 30 0.000919 - 32 0.000919 - 33 0.00184 - 40 0.626 - 41 0.226 - 42 0.0184 - 45 0.00276 - 46 0.00368 - 47 0.000919 - - 31 2064 26 0 - 0 0.00678 - 2 0.0252 - 3 0.000484 - 4 0.000969 - 7 0.0766 - 8 0.000969 - 12 0.00436 - 14 0.000484 - 15 0.000484 - 19 0.000484 - 21 0.00775 - 22 0.000484 - 26 0.00388 - 29 0.00145 - 30 0.00242 - 31 0.000484 - 32 0.00194 - 33 0.00145 - 34 0.00194 - 37 0.00242 - 40 0.636 - 41 0.195 - 42 0.0233 - 43 0.00145 - 46 0.00145 - 47 0.00194 - - 32 768 19 0 - 0 0.0143 - 2 0.0273 - 4 0.0013 - 7 0.0352 - 12 0.00391 - 13 0.0026 - 19 0.0013 - 21 0.00781 - 26 0.00391 - 29 0.0026 - 30 0.0013 - 32 0.0013 - 34 0.0013 - 40 0.647 - 41 0.224 - 42 0.0156 - 44 0.0026 - 46 0.00391 - 47 0.0026 - - 33 1187 17 0 - 0 0.00758 - 2 0.027 - 7 0.0278 - 12 0.00421 - 13 0.000842 - 19 0.000842 - 21 0.00253 - 26 0.00505 - 30 0.000842 - 33 0.00168 - 37 0.00337 - 40 0.732 - 41 0.152 - 42 0.0236 - 44 0.00168 - 46 0.00337 - 47 0.00505 - - 41 1264 6 0 - 7 0.00158 - 40 0.902 - 41 0.087 - 42 0.00791 - 44 0.000791 - 46 0.000791 - - 42 63 5 0 - 7 0.0159 - 40 0.889 - 41 0.0635 - 42 0.0159 - 46 0.0159 - - 45 324 6 0 - 21 0.00309 - 40 0.873 - 41 0.0741 - 42 0.0216 - 46 0.0216 - 47 0.00617 - - 48 188 11 0 - 2 0.00532 - 4 0.00532 - 7 0.0851 - 21 0.00532 - 26 0.00532 - 31 0.00532 - 37 0.0106 - 40 0.574 - 41 0.293 - 42 0.00532 - 46 0.00532 - - 49 234 8 0 - 0 0.00427 - 2 0.0256 - 7 0.0342 - 12 0.00427 - 40 0.701 - 41 0.192 - 42 0.0342 - 46 0.00427 - - 55 1193 18 0 - 0 0.00922 - 2 0.0277 - 3 0.000838 - 4 0.000838 - 7 0.0285 - 8 0.00168 - 12 0.00503 - 26 0.000838 - 33 0.00168 - 37 0.000838 - 40 0.733 - 41 0.163 - 42 0.0142 - 43 0.00168 - 44 0.00168 - 45 0.000838 - 46 0.00168 - 47 0.00587 - - 57 699 16 0 - 0 0.00572 - 2 0.01 - 4 0.00143 - 7 0.0243 - 8 0.00286 - 12 0.00143 - 13 0.00286 - 15 0.00143 - 21 0.00286 - 29 0.00143 - 31 0.00143 - 32 0.00143 - 40 0.758 - 41 0.162 - 42 0.02 - 47 0.00286 - - 58 17 1 0 - 40 1 - - 59 102 11 0 - 0 0.0098 - 2 0.0196 - 7 0.049 - 12 0.0098 - 19 0.0098 - 26 0.0098 - 37 0.0098 - 40 0.667 - 41 0.196 - 42 0.0098 - 47 0.0098 - - 62 50 4 0 - 2 0.06 - 40 0.76 - 41 0.16 - 45 0.02 - - 64 13660 26 19 - 0 0.00234 - 2 0.0104 - 4 0.00022 - 5 7.32e-05 - 7 0.00425 - 8 0.000146 - 12 0.00102 - 13 0.000293 - 15 7.32e-05 - 19 0.000366 - 21 0.000659 - 26 0.00022 - 29 0.000293 - 30 0.000146 - 31 7.32e-05 - 32 0.000146 - 33 0.00022 - 34 0.000146 - 37 0.000366 - 40 0.842 - 41 0.117 - 42 0.0141 - 43 0.0011 - 44 0.000439 - 46 0.00132 - 47 0.00271 - - 0 384 11 0 - 2 0.0026 - 7 0.00781 - 12 0.0026 - 15 0.0026 - 21 0.0026 - 40 0.76 - 41 0.206 - 42 0.00781 - 43 0.0026 - 46 0.0026 - 47 0.0026 - - 21 14 3 0 - 7 0.0714 - 40 0.571 - 41 0.357 - - 28 886 15 0 - 0 0.00903 - 2 0.0158 - 5 0.00113 - 7 0.0147 - 8 0.00113 - 12 0.00226 - 21 0.00339 - 33 0.00113 - 37 0.00226 - 40 0.699 - 41 0.218 - 42 0.0237 - 43 0.00113 - 46 0.00451 - 47 0.00339 - - 29 4524 17 0 - 0 0.00133 - 2 0.0124 - 4 0.000221 - 7 0.00133 - 8 0.000221 - 13 0.000442 - 19 0.000442 - 21 0.000442 - 29 0.000663 - 30 0.000221 - 37 0.000663 - 40 0.914 - 41 0.0573 - 42 0.00685 - 43 0.000442 - 46 0.000663 - 47 0.00287 - - 30 513 12 0 - 0 0.0039 - 2 0.0117 - 7 0.00975 - 12 0.0039 - 21 0.00195 - 30 0.00195 - 32 0.00195 - 40 0.768 - 41 0.183 - 42 0.00585 - 44 0.0039 - 46 0.0039 - - 31 497 12 0 - 2 0.0121 - 7 0.00402 - 12 0.00201 - 26 0.00201 - 29 0.00201 - 40 0.779 - 41 0.171 - 42 0.0181 - 43 0.00201 - 44 0.00201 - 46 0.00201 - 47 0.00402 - - 32 1197 13 0 - 0 0.00251 - 2 0.0109 - 7 0.00334 - 12 0.00167 - 13 0.000835 - 19 0.000835 - 21 0.000835 - 32 0.000835 - 34 0.000835 - 40 0.785 - 41 0.17 - 42 0.0209 - 47 0.00167 - - 33 1314 12 0 - 0 0.00381 - 2 0.0122 - 7 0.00228 - 19 0.000761 - 31 0.000761 - 40 0.867 - 41 0.0883 - 42 0.0183 - 43 0.000761 - 44 0.000761 - 46 0.00152 - 47 0.00381 - - 41 1017 7 0 - 7 0.000983 - 21 0.000983 - 40 0.887 - 41 0.0895 - 42 0.0167 - 43 0.00295 - 47 0.00197 - - 42 45 4 0 - 40 0.844 - 41 0.0444 - 42 0.0889 - 47 0.0222 - - 44 3 2 0 - 40 0.333 - 43 0.667 - - 48 353 6 0 - 2 0.00567 - 7 0.0085 - 40 0.822 - 41 0.159 - 42 0.00283 - 47 0.00283 - - 49 245 9 0 - 0 0.00408 - 2 0.0163 - 7 0.00408 - 19 0.00408 - 26 0.00408 - 33 0.00408 - 40 0.784 - 41 0.167 - 42 0.0122 - - 55 1264 13 0 - 0 0.00158 - 2 0.00791 - 4 0.00158 - 7 0.00949 - 12 0.00316 - 13 0.000791 - 26 0.000791 - 40 0.803 - 41 0.147 - 42 0.019 - 44 0.000791 - 46 0.00237 - 47 0.00237 - - 57 868 12 0 - 0 0.00346 - 2 0.0104 - 7 0.00346 - 12 0.0023 - 33 0.00115 - 34 0.00115 - 40 0.829 - 41 0.121 - 42 0.0219 - 43 0.0023 - 46 0.0023 - 47 0.00115 - - 58 60 3 0 - 40 0.95 - 41 0.0333 - 47 0.0167 - - 59 89 5 0 - 0 0.0112 - 2 0.0225 - 40 0.73 - 41 0.191 - 42 0.0449 - - 62 197 7 0 - 7 0.00508 - 40 0.827 - 41 0.142 - 42 0.0102 - 43 0.00508 - 44 0.00508 - 47 0.00508 - - 64 36 4 0 - 40 0.778 - 41 0.139 - 42 0.0556 - 43 0.0278 - - 65 23 3 0 - 40 0.565 - 46 0.261 - 47 0.174 - - 66 5 2 0 - 40 0.6 - 46 0.4 - - 67 16 5 0 - 7 0.0625 - 40 0.375 - 42 0.0625 - 46 0.375 - 47 0.125 - - 68 161 12 4 - 0 0.0124 - 2 0.00621 - 4 0.00621 - 7 0.00621 - 13 0.0124 - 21 0.00621 - 26 0.00621 - 31 0.00621 - 40 0.671 - 41 0.217 - 42 0.0435 - 46 0.00621 - - 4 1 1 0 - 13 1 - - 29 4 3 0 - 7 0.25 - 26 0.25 - 40 0.5 - - 55 15 4 0 - 21 0.0667 - 40 0.733 - 41 0.0667 - 42 0.133 - - 57 1 1 0 - 31 1 - - 69 48590 32 19 - 0 0.00926 - 2 0.0818 - 3 8.23e-05 - 4 0.00134 - 5 6.17e-05 - 7 0.0134 - 8 0.000535 - 12 0.00323 - 13 0.000288 - 14 0.000391 - 15 0.000412 - 19 0.000535 - 20 0.000185 - 21 0.00241 - 22 0.000144 - 26 0.00161 - 28 0.000144 - 29 0.00158 - 30 0.000391 - 31 0.000206 - 32 0.00072 - 33 0.00113 - 34 0.000144 - 37 0.000782 - 40 0.656 - 41 0.198 - 42 0.02 - 43 0.00111 - 44 0.000741 - 45 0.000226 - 46 0.0022 - 47 0.00142 - - 0 14471 30 0 - 0 0.00947 - 2 0.0333 - 4 0.00104 - 5 6.91e-05 - 7 0.00442 - 8 6.91e-05 - 12 0.00228 - 13 0.000138 - 14 0.000346 - 15 0.000276 - 19 0.000691 - 20 6.91e-05 - 21 0.000829 - 22 6.91e-05 - 26 0.00076 - 28 0.000138 - 29 0.00131 - 30 0.000207 - 31 6.91e-05 - 32 0.00111 - 33 0.000967 - 37 0.000276 - 40 0.728 - 41 0.189 - 42 0.0207 - 43 0.00159 - 44 0.000622 - 45 6.91e-05 - 46 0.00111 - 47 0.00117 - - 1 372 15 0 - 0 0.0188 - 2 0.0457 - 7 0.00538 - 12 0.00538 - 15 0.00269 - 21 0.00538 - 26 0.00538 - 31 0.00269 - 32 0.00538 - 37 0.00269 - 40 0.645 - 41 0.228 - 42 0.0161 - 43 0.00538 - 46 0.00538 - - 2 3353 26 0 - 0 0.00328 - 2 0.00746 - 3 0.000298 - 4 0.00537 - 7 0.0197 - 8 0.00298 - 12 0.000895 - 13 0.00119 - 14 0.00209 - 15 0.000596 - 19 0.000298 - 20 0.00179 - 21 0.00358 - 26 0.00388 - 28 0.000895 - 29 0.000298 - 31 0.000298 - 32 0.000298 - 37 0.000298 - 40 0.775 - 41 0.15 - 42 0.0155 - 43 0.000895 - 45 0.000298 - 46 0.00239 - 47 0.000298 - - 4 29 3 0 - 2 0.172 - 40 0.759 - 41 0.069 - - 12 7932 26 0 - 0 0.00693 - 2 0.0241 - 4 0.000504 - 5 0.000126 - 7 0.00403 - 8 0.000504 - 12 0.00277 - 13 0.000126 - 14 0.000378 - 15 0.000252 - 19 0.000252 - 21 0.00063 - 26 0.000378 - 29 0.00126 - 30 0.000252 - 31 0.000126 - 32 0.000504 - 33 0.00151 - 37 0.000126 - 40 0.759 - 41 0.175 - 42 0.0173 - 43 0.00113 - 44 0.000756 - 46 0.000756 - 47 0.00151 - - 15 2 1 0 - 46 1 - - 21 2998 22 0 - 0 0.006 - 2 0.0317 - 4 0.000667 - 7 0.004 - 12 0.00167 - 14 0.000667 - 15 0.000334 - 19 0.001 - 21 0.000334 - 26 0.000334 - 28 0.000334 - 29 0.001 - 32 0.000334 - 33 0.000334 - 37 0.000334 - 40 0.662 - 41 0.255 - 42 0.027 - 43 0.000667 - 45 0.000334 - 46 0.00367 - 47 0.002 - - 26 12919 31 0 - 0 0.016 - 2 0.0296 - 3 0.000232 - 4 0.0017 - 5 7.74e-05 - 7 0.0358 - 8 0.000774 - 12 0.00658 - 13 0.000464 - 14 0.000155 - 15 0.000697 - 19 0.000774 - 21 0.00441 - 22 0.000464 - 26 0.00348 - 28 7.74e-05 - 29 0.00333 - 30 0.000774 - 31 0.000464 - 32 0.000774 - 33 0.00217 - 34 0.00031 - 37 0.00224 - 40 0.666 - 41 0.197 - 42 0.0184 - 43 0.000697 - 44 0.000851 - 45 0.000542 - 46 0.00279 - 47 0.00224 - - 28 80 8 0 - 0 0.0125 - 2 0.0375 - 7 0.0125 - 8 0.0125 - 40 0.712 - 41 0.188 - 42 0.0125 - 46 0.0125 - - 29 67 6 0 - 2 0.0597 - 7 0.0149 - 26 0.0149 - 40 0.597 - 41 0.254 - 42 0.0597 - - 41 356 8 0 - 2 0.419 - 26 0.00281 - 37 0.00281 - 40 0.242 - 41 0.312 - 42 0.0169 - 46 0.00281 - 47 0.00281 - - 42 25 4 0 - 2 0.04 - 40 0.36 - 41 0.12 - 42 0.48 - - 44 2 2 0 - 40 0.5 - 43 0.5 - - 45 144 6 0 - 2 0.0625 - 40 0.618 - 41 0.215 - 42 0.0139 - 46 0.0833 - 47 0.00694 - - 47 3672 10 0 - 2 0.69 - 4 0.000545 - 7 0.000817 - 21 0.00735 - 30 0.00109 - 34 0.000545 - 41 0.27 - 42 0.0248 - 44 0.00218 - 46 0.00245 - - 49 1916 19 0 - 0 0.00678 - 2 0.0339 - 7 0.00365 - 12 0.00365 - 13 0.000522 - 15 0.000522 - 20 0.000522 - 21 0.000522 - 26 0.000522 - 29 0.000522 - 34 0.000522 - 40 0.724 - 41 0.196 - 42 0.0209 - 43 0.00261 - 44 0.00104 - 45 0.000522 - 46 0.00157 - 47 0.00104 - - 50 47 7 0 - 2 0.0426 - 4 0.0426 - 7 0.0213 - 20 0.0213 - 40 0.574 - 41 0.277 - 42 0.0213 - - 57 48 3 0 - 2 0.0208 - 40 0.875 - 41 0.104 - - 58 21 3 0 - 32 0.0476 - 40 0.857 - 41 0.0952 - - 74 23 8 1 - 4 0.0435 - 7 0.13 - 8 0.0435 - 26 0.087 - 28 0.0435 - 40 0.261 - 41 0.0435 - 47 0.348 - - 29 5 4 0 - 4 0.2 - 8 0.2 - 26 0.2 - 40 0.4 - -70 183 17 7 - 0 0.0109 - 2 0.0109 - 4 0.164 - 6 0.00546 - 7 0.0109 - 8 0.317 - 9 0.0328 - 13 0.0874 - 14 0.109 - 15 0.0109 - 19 0.175 - 20 0.0109 - 21 0.0109 - 26 0.0109 - 41 0.0219 - 45 0.00546 - 46 0.00546 - - 8 58 11 0 - 2 0.0345 - 4 0.259 - 7 0.0345 - 8 0.0172 - 9 0.0517 - 13 0.121 - 14 0.172 - 15 0.0172 - 19 0.259 - 20 0.0172 - 41 0.0172 - - 21 2 2 0 - 0 0.5 - 8 0.5 - - 37 56 3 0 - 8 0.946 - 21 0.0357 - 45 0.0179 - - 45 1 1 0 - 6 1 - - 47 59 11 1 - 0 0.0169 - 4 0.254 - 8 0.0169 - 9 0.0508 - 13 0.136 - 14 0.169 - 15 0.0169 - 19 0.271 - 20 0.0169 - 26 0.0169 - 41 0.0339 - - 57 2 2 0 - 26 0.5 - 41 0.5 - - 48 1 1 0 - 46 1 - - 57 2 2 0 - 26 0.5 - 41 0.5 - -71 4205 34 8 - 0 0.0219 - 2 0.00166 - 3 0.00666 - 4 0.263 - 5 0.0109 - 7 0.00951 - 8 0.0533 - 9 0.00143 - 10 0.0019 - 12 0.0133 - 13 0.0604 - 14 0.0818 - 15 0.113 - 16 0.00143 - 17 0.0019 - 19 0.236 - 20 0.0276 - 21 0.0252 - 26 0.0285 - 28 0.000951 - 29 0.000951 - 30 0.0109 - 31 0.00856 - 32 0.000476 - 34 0.000476 - 35 0.000476 - 39 0.000476 - 40 0.00309 - 41 0.0109 - 43 0.000476 - 44 0.000476 - 45 0.00143 - 46 0.000238 - 47 0.000476 - - 7 30 7 0 - 4 0.3 - 8 0.0667 - 13 0.0333 - 14 0.0667 - 15 0.233 - 19 0.2 - 20 0.1 - - 8 23 7 0 - 4 0.217 - 8 0.087 - 13 0.348 - 14 0.13 - 15 0.13 - 19 0.0435 - 40 0.0435 - - 21 45 14 0 - 0 0.0667 - 2 0.0222 - 4 0.289 - 7 0.0222 - 8 0.0222 - 12 0.0222 - 13 0.0222 - 14 0.0444 - 15 0.133 - 19 0.222 - 20 0.0444 - 21 0.0222 - 28 0.0444 - 40 0.0222 - - 37 2029 31 3 - 0 0.0202 - 2 0.00148 - 3 0.0069 - 4 0.259 - 5 0.0113 - 7 0.00936 - 8 0.0591 - 9 0.00148 - 10 0.00197 - 12 0.0128 - 13 0.0586 - 14 0.0808 - 15 0.108 - 16 0.00148 - 17 0.00197 - 19 0.235 - 20 0.0261 - 21 0.036 - 26 0.0291 - 29 0.000986 - 30 0.0113 - 31 0.00887 - 32 0.000493 - 34 0.000493 - 35 0.000493 - 39 0.000493 - 40 0.00246 - 41 0.0113 - 43 0.000493 - 44 0.000493 - 45 0.00148 - - 2 6 2 0 - 4 0.833 - 26 0.167 - - 21 21 9 0 - 0 0.0476 - 4 0.19 - 8 0.19 - 13 0.0952 - 15 0.0476 - 19 0.238 - 20 0.0952 - 21 0.0476 - 31 0.0476 - - 49 6 3 0 - 4 0.167 - 5 0.333 - 19 0.5 - - 40 1 1 0 - 46 1 - - 46 1 1 0 - 47 1 - - 47 2063 33 5 - 0 0.0223 - 2 0.00145 - 3 0.00679 - 4 0.268 - 5 0.0111 - 7 0.00969 - 8 0.048 - 9 0.00145 - 10 0.00194 - 12 0.0136 - 13 0.0606 - 14 0.0834 - 15 0.115 - 16 0.00145 - 17 0.00194 - 19 0.241 - 20 0.0281 - 21 0.015 - 26 0.0291 - 28 0.000969 - 29 0.000969 - 30 0.0111 - 31 0.00873 - 32 0.000485 - 34 0.000485 - 35 0.000485 - 39 0.000485 - 40 0.00291 - 41 0.0111 - 43 0.000485 - 44 0.000485 - 45 0.00145 - 47 0.000485 - - 7 30 7 0 - 4 0.3 - 8 0.0667 - 13 0.0333 - 14 0.0667 - 15 0.233 - 19 0.2 - 20 0.1 - - 8 18 6 0 - 4 0.278 - 8 0.111 - 13 0.222 - 14 0.167 - 15 0.167 - 19 0.0556 - - 21 43 12 0 - 0 0.0698 - 4 0.302 - 7 0.0233 - 8 0.0233 - 12 0.0233 - 13 0.0233 - 14 0.0465 - 15 0.14 - 19 0.233 - 20 0.0465 - 28 0.0465 - 40 0.0233 - - 46 1 1 0 - 47 1 - - 55 4 3 0 - 0 0.5 - 4 0.25 - 12 0.25 - - 55 4 3 0 - 0 0.5 - 4 0.25 - 12 0.25 - -72 15188 37 29 - 0 0.257 - 2 0.000856 - 3 0.00356 - 4 0.0405 - 5 0.000922 - 7 0.0239 - 8 0.0117 - 9 0.000527 - 10 0.000856 - 12 0.0985 - 13 0.0189 - 14 0.0197 - 15 0.0309 - 16 0.000329 - 17 0.000132 - 18 0.000263 - 19 0.0643 - 20 0.00382 - 21 0.0426 - 22 0.000395 - 23 0.000132 - 26 0.00375 - 28 0.00224 - 29 0.155 - 30 0.000329 - 31 0.0023 - 32 0.0744 - 33 0.128 - 34 0.000263 - 39 0.000593 - 40 0.000658 - 41 0.00974 - 42 0.000263 - 43 0.000395 - 44 0.000461 - 45 0.000988 - 46 0.000132 - - 2 8 3 0 - 7 0.125 - 13 0.625 - 14 0.25 - - 3 9 3 0 - 7 0.778 - 8 0.111 - 14 0.111 - - 4 71 11 1 - 0 0.225 - 7 0.211 - 8 0.0282 - 12 0.0986 - 13 0.169 - 15 0.113 - 18 0.0141 - 21 0.0141 - 29 0.0141 - 32 0.0423 - 33 0.0704 - - 35 4 2 0 - 8 0.5 - 13 0.5 - - 7 358 24 0 - 0 0.00559 - 3 0.00279 - 4 0.154 - 7 0.014 - 8 0.0559 - 9 0.00279 - 10 0.00838 - 13 0.0223 - 14 0.0922 - 15 0.19 - 16 0.00279 - 19 0.237 - 20 0.0279 - 21 0.0447 - 22 0.00279 - 23 0.00279 - 28 0.00279 - 29 0.0279 - 30 0.00559 - 31 0.0251 - 32 0.00838 - 33 0.0168 - 41 0.0447 - 45 0.00279 - - 8 76 17 5 - 0 0.0263 - 4 0.0921 - 7 0.0789 - 8 0.0658 - 13 0.329 - 14 0.171 - 15 0.0395 - 17 0.0132 - 19 0.0658 - 20 0.0263 - 29 0.0132 - 31 0.0132 - 40 0.0132 - 41 0.0132 - 42 0.0132 - 45 0.0132 - 46 0.0132 - - 21 1 1 0 - 17 1 - - 23 2 1 0 - 7 1 - - 36 30 6 0 - 8 0.167 - 13 0.467 - 14 0.267 - 31 0.0333 - 41 0.0333 - 45 0.0333 - - 37 25 10 0 - 0 0.08 - 4 0.28 - 7 0.08 - 13 0.04 - 15 0.12 - 19 0.2 - 20 0.08 - 29 0.04 - 40 0.04 - 42 0.04 - - 47 2 1 0 - 7 1 - - 9 3 3 0 - 12 0.333 - 14 0.333 - 15 0.333 - - 10 6 2 0 - 7 0.833 - 13 0.167 - - 13 186 16 9 - 0 0.269 - 2 0.0108 - 4 0.0806 - 7 0.145 - 8 0.0108 - 12 0.0269 - 13 0.0645 - 14 0.0323 - 15 0.0323 - 19 0.0806 - 21 0.0215 - 26 0.0215 - 29 0.0753 - 33 0.086 - 41 0.0376 - 44 0.00538 - - 2 5 4 0 - 0 0.4 - 13 0.2 - 14 0.2 - 29 0.2 - - 4 5 3 0 - 0 0.2 - 7 0.6 - 19 0.2 - - 8 25 13 0 - 0 0.24 - 2 0.04 - 7 0.04 - 13 0.08 - 14 0.04 - 15 0.04 - 19 0.04 - 21 0.12 - 26 0.04 - 29 0.08 - 33 0.12 - 41 0.08 - 44 0.04 - - 13 13 8 0 - 0 0.231 - 7 0.231 - 8 0.0769 - 12 0.0769 - 19 0.154 - 21 0.0769 - 29 0.0769 - 33 0.0769 - - 34 39 13 0 - 0 0.103 - 2 0.0256 - 4 0.256 - 7 0.128 - 12 0.0256 - 13 0.0513 - 14 0.0256 - 15 0.0513 - 19 0.179 - 26 0.0256 - 29 0.0256 - 33 0.0256 - 41 0.0769 - - 35 14 8 0 - 0 0.286 - 4 0.0714 - 7 0.286 - 14 0.0714 - 19 0.0714 - 26 0.0714 - 29 0.0714 - 41 0.0714 - - 36 58 11 0 - 0 0.362 - 7 0.121 - 12 0.0172 - 13 0.121 - 14 0.0345 - 15 0.0172 - 19 0.0345 - 26 0.0172 - 29 0.103 - 33 0.155 - 41 0.0172 - - 70 7 4 0 - 0 0.286 - 4 0.286 - 8 0.143 - 15 0.286 - - 71 2 1 0 - 4 1 - - 14 114 16 6 - 0 0.307 - 2 0.0439 - 4 0.0263 - 7 0.0526 - 8 0.0175 - 12 0.0439 - 13 0.0175 - 15 0.00877 - 19 0.0965 - 21 0.0175 - 26 0.0351 - 29 0.105 - 32 0.202 - 34 0.00877 - 41 0.00877 - 45 0.00877 - - 8 15 8 0 - 0 0.2 - 12 0.0667 - 19 0.0667 - 21 0.0667 - 29 0.2 - 32 0.267 - 34 0.0667 - 45 0.0667 - - 15 2 2 0 - 4 0.5 - 29 0.5 - - 34 17 9 0 - 0 0.294 - 4 0.0588 - 7 0.176 - 12 0.0588 - 15 0.0588 - 19 0.0588 - 26 0.0588 - 29 0.0588 - 32 0.176 - - 35 5 4 0 - 0 0.2 - 4 0.2 - 12 0.2 - 26 0.4 - - 36 48 8 0 - 0 0.354 - 2 0.104 - 13 0.0417 - 19 0.0833 - 21 0.0208 - 29 0.0833 - 32 0.292 - 41 0.0208 - - 71 3 3 0 - 8 0.333 - 12 0.333 - 19 0.333 - - 15 18 6 0 - 7 0.0556 - 13 0.278 - 14 0.0556 - 15 0.5 - 16 0.0556 - 33 0.0556 - - 21 12 6 0 - 0 0.167 - 4 0.0833 - 7 0.333 - 8 0.0833 - 12 0.167 - 19 0.167 - - 31 2 2 0 - 13 0.5 - 14 0.5 - - 32 1 1 0 - 28 1 - - 34 4214 29 1 - 0 0.274 - 2 0.000475 - 3 0.00522 - 4 0.0282 - 5 0.00142 - 7 0.00878 - 8 0.00807 - 9 0.000475 - 10 0.000237 - 12 0.133 - 13 0.0157 - 14 0.0164 - 15 0.0216 - 16 0.000237 - 18 0.000237 - 19 0.0356 - 20 0.00119 - 21 0.046 - 26 0.000949 - 28 0.00119 - 29 0.159 - 31 0.000949 - 32 0.0729 - 33 0.161 - 39 0.000712 - 41 0.00617 - 42 0.000237 - 44 0.000237 - 45 0.000475 - - 21 2 1 0 - 13 1 - - 35 2343 27 2 - 0 0.268 - 3 0.00128 - 4 0.0448 - 7 0.0128 - 8 0.00512 - 9 0.000427 - 10 0.000854 - 12 0.0657 - 13 0.0111 - 14 0.00896 - 15 0.0188 - 19 0.0905 - 20 0.00512 - 21 0.0448 - 22 0.000854 - 26 0.0064 - 28 0.00427 - 29 0.193 - 31 0.000854 - 32 0.0952 - 33 0.111 - 34 0.000427 - 40 0.000854 - 41 0.00683 - 43 0.00128 - 44 0.000427 - 45 0.000854 - - 21 5 4 0 - 19 0.4 - 20 0.2 - 26 0.2 - 33 0.2 - - 49 1 1 0 - 28 1 - - 36 159 12 0 - 3 0.0126 - 8 0.201 - 9 0.00629 - 10 0.00629 - 13 0.371 - 14 0.302 - 15 0.0566 - 21 0.00629 - 30 0.00629 - 31 0.00629 - 39 0.0189 - 45 0.00629 - - 41 6 6 0 - 0 0.167 - 12 0.167 - 15 0.167 - 31 0.167 - 45 0.167 - 46 0.167 - - 45 2 1 0 - 8 1 - - 47 7352 36 19 - 0 0.266 - 2 0.000408 - 3 0.00354 - 4 0.0415 - 5 0.000952 - 7 0.0181 - 8 0.00871 - 9 0.000408 - 10 0.000816 - 12 0.102 - 13 0.00789 - 14 0.0139 - 15 0.0305 - 16 0.000272 - 17 0.000136 - 18 0.000272 - 19 0.0664 - 20 0.00394 - 21 0.0435 - 22 0.000408 - 23 0.000136 - 26 0.00367 - 28 0.00231 - 29 0.161 - 30 0.000272 - 31 0.00218 - 32 0.0768 - 33 0.132 - 34 0.000272 - 39 0.000408 - 40 0.00068 - 41 0.00952 - 42 0.000272 - 43 0.000408 - 44 0.000408 - 45 0.000816 - - 3 5 1 0 - 7 1 - - 4 61 10 0 - 0 0.262 - 7 0.148 - 12 0.115 - 13 0.164 - 15 0.131 - 18 0.0164 - 21 0.0164 - 29 0.0164 - 32 0.0492 - 33 0.082 - - 7 358 24 0 - 0 0.00559 - 3 0.00279 - 4 0.154 - 7 0.014 - 8 0.0559 - 9 0.00279 - 10 0.00838 - 13 0.0223 - 14 0.0922 - 15 0.19 - 16 0.00279 - 19 0.237 - 20 0.0279 - 21 0.0447 - 22 0.00279 - 23 0.00279 - 28 0.00279 - 29 0.0279 - 30 0.00559 - 31 0.0251 - 32 0.00838 - 33 0.0168 - 41 0.0447 - 45 0.00279 - - 8 31 12 0 - 0 0.0645 - 4 0.226 - 7 0.194 - 13 0.0323 - 15 0.0968 - 17 0.0323 - 19 0.161 - 20 0.0645 - 29 0.0323 - 40 0.0323 - 41 0.0323 - 42 0.0323 - - 9 2 2 0 - 12 0.5 - 15 0.5 - - 10 4 1 0 - 7 1 - - 13 163 13 0 - 0 0.307 - 4 0.092 - 7 0.147 - 8 0.0123 - 12 0.0307 - 15 0.0368 - 19 0.092 - 21 0.0245 - 26 0.0245 - 29 0.0859 - 33 0.0982 - 41 0.0429 - 44 0.00613 - - 14 107 14 0 - 0 0.327 - 4 0.028 - 7 0.0561 - 8 0.0187 - 12 0.0467 - 15 0.00935 - 19 0.103 - 21 0.0187 - 26 0.0374 - 29 0.112 - 32 0.215 - 34 0.00935 - 41 0.00935 - 45 0.00935 - - 15 2 2 0 - 7 0.5 - 33 0.5 - - 21 11 5 0 - 0 0.182 - 4 0.0909 - 7 0.364 - 12 0.182 - 19 0.182 - - 32 1 1 0 - 28 1 - - 34 4153 29 0 - 0 0.278 - 2 0.000482 - 3 0.0053 - 4 0.0287 - 5 0.00144 - 7 0.00891 - 8 0.00722 - 9 0.000482 - 10 0.000241 - 12 0.135 - 13 0.0065 - 14 0.0125 - 15 0.0219 - 16 0.000241 - 18 0.000241 - 19 0.0361 - 20 0.0012 - 21 0.0467 - 26 0.000963 - 28 0.0012 - 29 0.161 - 31 0.000963 - 32 0.0739 - 33 0.164 - 39 0.000722 - 41 0.00602 - 42 0.000241 - 44 0.000241 - 45 0.000482 - - 35 2312 26 0 - 0 0.271 - 3 0.0013 - 4 0.0433 - 7 0.013 - 8 0.00433 - 10 0.000865 - 12 0.0666 - 13 0.00519 - 14 0.00692 - 15 0.019 - 19 0.0917 - 20 0.00519 - 21 0.0437 - 22 0.000865 - 26 0.00649 - 28 0.00433 - 29 0.196 - 31 0.000865 - 32 0.0965 - 33 0.112 - 34 0.000433 - 40 0.000865 - 41 0.00692 - 43 0.0013 - 44 0.000433 - 45 0.000865 - - 49 2 2 0 - 15 0.5 - 19 0.5 - - 55 7 5 0 - 0 0.143 - 21 0.143 - 29 0.143 - 32 0.286 - 41 0.286 - - 57 59 14 0 - 0 0.407 - 4 0.0678 - 5 0.0169 - 12 0.0847 - 14 0.0169 - 15 0.0169 - 19 0.0508 - 21 0.0169 - 29 0.186 - 31 0.0169 - 32 0.0169 - 33 0.0508 - 40 0.0169 - 41 0.0339 - - 60 2 1 0 - 7 1 - - 62 1 1 0 - 40 1 - - 73 62 7 0 - 0 0.581 - 2 0.0161 - 12 0.129 - 19 0.0323 - 29 0.161 - 32 0.0484 - 33 0.0323 - - 48 4 2 0 - 13 0.75 - 19 0.25 - - 49 2 2 0 - 15 0.5 - 19 0.5 - - 55 28 8 4 - 0 0.0357 - 7 0.607 - 13 0.0357 - 21 0.0357 - 26 0.0357 - 29 0.0357 - 32 0.0714 - 41 0.143 - - 36 4 3 0 - 13 0.25 - 21 0.25 - 32 0.5 - - 41 3 1 0 - 41 1 - - 47 18 2 0 - 7 0.944 - 26 0.0556 - - 72 2 2 0 - 0 0.5 - 29 0.5 - - 57 60 15 1 - 0 0.4 - 4 0.0667 - 5 0.0167 - 7 0.0167 - 12 0.0833 - 14 0.0167 - 15 0.0167 - 19 0.05 - 21 0.0167 - 29 0.183 - 31 0.0167 - 32 0.0167 - 33 0.05 - 40 0.0167 - 41 0.0333 - - 55 18 6 0 - 0 0.444 - 4 0.0556 - 5 0.0556 - 12 0.111 - 21 0.0556 - 29 0.278 - - 58 4 4 0 - 0 0.25 - 4 0.25 - 13 0.25 - 19 0.25 - - 60 2 1 0 - 7 1 - - 62 1 1 0 - 40 1 - - 69 1 1 0 - 41 1 - - 72 78 8 0 - 7 0.846 - 8 0.0128 - 15 0.0128 - 19 0.0128 - 21 0.0256 - 26 0.0256 - 41 0.0513 - 44 0.0128 - - 73 62 7 0 - 0 0.581 - 2 0.0161 - 12 0.129 - 19 0.0323 - 29 0.161 - 32 0.0484 - 33 0.0323 - -73 1173 26 5 - 0 0.0682 - 2 0.00171 - 3 0.0358 - 4 0.137 - 5 0.0102 - 8 0.0171 - 12 0.0153 - 13 0.0341 - 14 0.0614 - 15 0.087 - 16 0.00171 - 19 0.14 - 20 0.00682 - 21 0.00171 - 26 0.00853 - 29 0.0171 - 32 0.00682 - 33 0.00341 - 34 0.299 - 35 0.0315 - 36 0.000853 - 37 0.000853 - 39 0.00512 - 40 0.00341 - 41 0.00341 - 43 0.00171 - - 7 373 5 0 - 4 0.00268 - 34 0.903 - 35 0.0885 - 36 0.00268 - 37 0.00268 - - 26 18 2 0 - 34 0.778 - 35 0.222 - - 47 391 22 1 - 0 0.102 - 2 0.00256 - 3 0.0537 - 4 0.205 - 5 0.0153 - 8 0.0256 - 12 0.023 - 13 0.0512 - 14 0.0921 - 15 0.13 - 16 0.00256 - 19 0.21 - 20 0.0102 - 21 0.00256 - 26 0.0128 - 29 0.0256 - 32 0.0102 - 33 0.00512 - 39 0.00767 - 40 0.00512 - 41 0.00512 - 43 0.00256 - - 64 1 1 0 - 41 1 - - 64 1 1 0 - 41 1 - - 72 389 22 1 - 0 0.1 - 2 0.00257 - 3 0.054 - 4 0.206 - 5 0.0154 - 8 0.0257 - 12 0.0231 - 13 0.0514 - 14 0.0925 - 15 0.131 - 16 0.00257 - 19 0.211 - 20 0.0103 - 21 0.00257 - 26 0.0129 - 29 0.0257 - 32 0.0103 - 33 0.00514 - 39 0.00771 - 40 0.00514 - 41 0.00257 - 43 0.00257 - - 26 18 8 0 - 4 0.389 - 13 0.0556 - 14 0.0556 - 15 0.0556 - 19 0.278 - 21 0.0556 - 40 0.0556 - 43 0.0556 - -74 426 24 23 - 0 0.00939 - 4 0.0986 - 7 0.0657 - 8 0.0188 - 10 0.00469 - 13 0.0329 - 14 0.0164 - 15 0.00939 - 19 0.0775 - 20 0.0164 - 21 0.0164 - 22 0.00939 - 26 0.0164 - 28 0.00469 - 31 0.00939 - 33 0.0141 - 34 0.00235 - 35 0.00469 - 40 0.124 - 41 0.0516 - 42 0.12 - 43 0.00469 - 46 0.00939 - 47 0.263 - - 2 4 4 0 - 7 0.25 - 14 0.25 - 19 0.25 - 26 0.25 - - 4 8 4 0 - 7 0.125 - 10 0.125 - 22 0.5 - 47 0.25 - - 6 2 2 0 - 8 0.5 - 40 0.5 - - 7 9 5 0 - 4 0.111 - 7 0.222 - 8 0.111 - 35 0.111 - 47 0.444 - - 9 23 6 0 - 4 0.348 - 7 0.0435 - 13 0.13 - 14 0.13 - 19 0.261 - 20 0.087 - - 12 1 1 0 - 28 1 - - 13 4 4 0 - 0 0.25 - 4 0.25 - 7 0.25 - 41 0.25 - - 14 2 2 0 - 8 0.5 - 40 0.5 - - 15 4 3 0 - 26 0.25 - 40 0.5 - 43 0.25 - - 21 3 3 0 - 20 0.333 - 40 0.333 - 41 0.333 - - 22 10 2 0 - 4 0.3 - 19 0.7 - - 25 39 9 0 - 7 0.0513 - 8 0.0256 - 13 0.0769 - 15 0.0256 - 21 0.0513 - 31 0.0256 - 33 0.0769 - 42 0.538 - 47 0.128 - - 26 5 2 0 - 26 0.4 - 47 0.6 - - 35 2 1 0 - 7 1 - - 40 23 2 0 - 46 0.087 - 47 0.913 - - 41 4 2 0 - 4 0.75 - 7 0.25 - - 42 9 5 0 - 7 0.444 - 13 0.111 - 21 0.111 - 31 0.111 - 47 0.222 - - 47 174 22 17 - 0 0.0115 - 4 0.092 - 7 0.0517 - 8 0.0172 - 10 0.00575 - 13 0.0345 - 14 0.0172 - 15 0.00575 - 19 0.092 - 20 0.0172 - 21 0.0115 - 26 0.0172 - 28 0.00575 - 31 0.00575 - 33 0.0172 - 35 0.00575 - 40 0.0862 - 41 0.0517 - 42 0.121 - 43 0.00575 - 46 0.00575 - 47 0.322 - - 4 4 3 0 - 7 0.25 - 10 0.25 - 47 0.5 - - 7 8 4 0 - 7 0.25 - 8 0.125 - 35 0.125 - 47 0.5 - - 9 22 5 0 - 4 0.364 - 13 0.136 - 14 0.136 - 19 0.273 - 20 0.0909 - - 12 1 1 0 - 28 1 - - 13 4 4 0 - 0 0.25 - 4 0.25 - 7 0.25 - 41 0.25 - - 14 2 2 0 - 8 0.5 - 40 0.5 - - 15 3 3 0 - 26 0.333 - 40 0.333 - 43 0.333 - - 21 3 3 0 - 20 0.333 - 40 0.333 - 41 0.333 - - 22 10 2 0 - 4 0.3 - 19 0.7 - - 25 39 9 0 - 7 0.0513 - 8 0.0256 - 13 0.0769 - 15 0.0256 - 21 0.0513 - 31 0.0256 - 33 0.0769 - 42 0.538 - 47 0.128 - - 26 5 2 0 - 26 0.4 - 47 0.6 - - 35 2 1 0 - 7 1 - - 40 21 1 0 - 47 1 - - 48 5 3 0 - 4 0.4 - 19 0.4 - 47 0.2 - - 55 19 5 0 - 4 0.0526 - 7 0.0526 - 40 0.368 - 41 0.316 - 47 0.211 - - 57 10 3 0 - 40 0.2 - 46 0.1 - 47 0.7 - - 69 1 1 0 - 0 1 - - 48 6 4 0 - 4 0.333 - 19 0.333 - 40 0.167 - 47 0.167 - - 55 33 8 0 - 4 0.0303 - 7 0.0606 - 15 0.0303 - 34 0.0303 - 40 0.485 - 41 0.212 - 42 0.0303 - 47 0.121 - - 57 15 4 0 - 40 0.333 - 42 0.133 - 46 0.0667 - 47 0.467 - - 69 4 2 0 - 0 0.25 - 40 0.75 - - 74 26 11 1 - 4 0.231 - 7 0.0769 - 8 0.0385 - 13 0.0385 - 15 0.0385 - 20 0.0385 - 21 0.0769 - 31 0.0385 - 40 0.0769 - 41 0.115 - 42 0.231 - - 41 6 4 0 - 4 0.333 - 13 0.167 - 20 0.167 - 40 0.333 - diff --git a/samples/Isabelle ROOT/filenames/ROOT b/samples/Isabelle ROOT/filenames/ROOT new file mode 100644 index 00000000..508fde01 --- /dev/null +++ b/samples/Isabelle ROOT/filenames/ROOT @@ -0,0 +1,1104 @@ +chapter HOL + +session HOL (main) = Pure + + description {* + Classical Higher-order Logic. + *} + options [document_graph] + global_theories + Main + Complex_Main + files + "Tools/Quickcheck/Narrowing_Engine.hs" + "Tools/Quickcheck/PNF_Narrowing_Engine.hs" + document_files + "root.bib" + "root.tex" + +session "HOL-Proofs" = Pure + + description {* + HOL-Main with explicit proof terms. + *} + options [document = false, quick_and_dirty = false] + theories Proofs (*sequential change of global flag!*) + theories "~~/src/HOL/Library/Old_Datatype" + files + "Tools/Quickcheck/Narrowing_Engine.hs" + "Tools/Quickcheck/PNF_Narrowing_Engine.hs" + +session "HOL-Library" (main) in Library = HOL + + description {* + Classical Higher-order Logic -- batteries included. + *} + theories + Library + (*conflicting type class instantiations*) + List_lexord + Sublist_Order + Product_Lexorder + Product_Order + Finite_Lattice + (*data refinements and dependent applications*) + AList_Mapping + Code_Binary_Nat + Code_Char + Code_Prolog + Code_Real_Approx_By_Float + Code_Target_Numeral + DAList + DAList_Multiset + RBT_Mapping + RBT_Set + (*legacy tools*) + Refute + Old_Datatype + Old_Recdef + Old_SMT + document_files "root.bib" "root.tex" + +session "HOL-Hahn_Banach" in Hahn_Banach = HOL + + description {* + Author: Gertrud Bauer, TU Munich + + The Hahn-Banach theorem for real vector spaces. + + This is the proof of the Hahn-Banach theorem for real vectorspaces, + following H. Heuser, Funktionalanalysis, p. 228 -232. The Hahn-Banach + theorem is one of the fundamental theorems of functional analysis. It is a + conclusion of Zorn's lemma. + + Two different formaulations of the theorem are presented, one for general + real vectorspaces and its application to normed vectorspaces. + + The theorem says, that every continous linearform, defined on arbitrary + subspaces (not only one-dimensional subspaces), can be extended to a + continous linearform on the whole vectorspace. + *} + options [document_graph] + theories Hahn_Banach + document_files "root.bib" "root.tex" + +session "HOL-Induct" in Induct = HOL + + description {* + Examples of (Co)Inductive Definitions. + + Comb proves the Church-Rosser theorem for combinators (see + http://www.cl.cam.ac.uk/ftp/papers/reports/TR396-lcp-generic-automatic-proof-tools.ps.gz). + + Mutil is the famous Mutilated Chess Board problem (see + http://www.cl.cam.ac.uk/ftp/papers/reports/TR394-lcp-mutilated-chess-board.dvi.gz). + + PropLog proves the completeness of a formalization of propositional logic + (see + http://www.cl.cam.ac.uk/Research/Reports/TR312-lcp-set-II.ps.gz). + + Exp demonstrates the use of iterated inductive definitions to reason about + mutually recursive relations. + *} + theories [document = false] + "~~/src/HOL/Library/Old_Datatype" + theories [quick_and_dirty] + Common_Patterns + theories + QuoDataType + QuoNestedDataType + Term + SList + ABexp + Tree + Ordinals + Sigma_Algebra + Comb + PropLog + Com + document_files "root.tex" + +session "HOL-IMP" in IMP = HOL + + options [document_graph, document_variants=document] + theories [document = false] + "~~/src/Tools/Permanent_Interpretation" + "~~/src/HOL/Library/While_Combinator" + "~~/src/HOL/Library/Char_ord" + "~~/src/HOL/Library/List_lexord" + "~~/src/HOL/Library/Quotient_List" + "~~/src/HOL/Library/Extended" + theories + BExp + ASM + Finite_Reachable + Denotational + Compiler2 + Poly_Types + Sec_Typing + Sec_TypingT + Def_Init_Big + Def_Init_Small + Fold + Live + Live_True + Hoare_Examples + VCG + Hoare_Total + Collecting1 + Collecting_Examples + Abs_Int_Tests + Abs_Int1_parity + Abs_Int1_const + Abs_Int3 + "Abs_Int_ITP/Abs_Int1_parity_ITP" + "Abs_Int_ITP/Abs_Int1_const_ITP" + "Abs_Int_ITP/Abs_Int3_ITP" + "Abs_Int_Den/Abs_Int_den2" + Procs_Dyn_Vars_Dyn + Procs_Stat_Vars_Dyn + Procs_Stat_Vars_Stat + C_like + OO + document_files "root.bib" "root.tex" + +session "HOL-IMPP" in IMPP = HOL + + description {* + Author: David von Oheimb + Copyright 1999 TUM + + IMPP -- An imperative language with procedures. + + This is an extension of IMP with local variables and mutually recursive + procedures. For documentation see "Hoare Logic for Mutual Recursion and + Local Variables" (http://isabelle.in.tum.de/Bali/papers/FSTTCS99.html). + *} + options [document = false] + theories EvenOdd + +session "HOL-Import" in Import = HOL + + options [document_graph] + theories HOL_Light_Maps + theories [condition = HOL_LIGHT_BUNDLE] HOL_Light_Import + +session "HOL-Number_Theory" in Number_Theory = HOL + + description {* + Fundamental Theorem of Arithmetic, Chinese Remainder Theorem, Fermat/Euler + Theorem, Wilson's Theorem, some lemmas for Quadratic Reciprocity. + *} + options [document_graph] + theories [document = false] + "~~/src/HOL/Library/FuncSet" + "~~/src/HOL/Library/Multiset" + "~~/src/HOL/Algebra/Ring" + "~~/src/HOL/Algebra/FiniteProduct" + theories + Pocklington + Gauss + Number_Theory + Euclidean_Algorithm + document_files + "root.tex" + +session "HOL-Old_Number_Theory" in Old_Number_Theory = HOL + + description {* + Fundamental Theorem of Arithmetic, Chinese Remainder Theorem, Fermat/Euler + Theorem, Wilson's Theorem, Quadratic Reciprocity. + *} + options [document_graph] + theories [document = false] + "~~/src/HOL/Library/Infinite_Set" + "~~/src/HOL/Library/Permutation" + theories + Fib + Factorization + Chinese + WilsonRuss + WilsonBij + Quadratic_Reciprocity + Primes + Pocklington + document_files + "root.bib" + "root.tex" + +session "HOL-Hoare" in Hoare = HOL + + description {* + Verification of imperative programs (verification conditions are generated + automatically from pre/post conditions and loop invariants). + *} + theories Hoare + document_files "root.bib" "root.tex" + +session "HOL-Hoare_Parallel" in Hoare_Parallel = HOL + + description {* + Verification of shared-variable imperative programs a la Owicki-Gries. + (verification conditions are generated automatically). + *} + options [document_graph] + theories Hoare_Parallel + document_files "root.bib" "root.tex" + +session "HOL-Codegenerator_Test" in Codegenerator_Test = "HOL-Library" + + options [document = false, document_graph = false, browser_info = false] + theories + Generate + Generate_Binary_Nat + Generate_Target_Nat + Generate_Efficient_Datastructures + Generate_Pretty_Char + theories [condition = ISABELLE_GHC] + Code_Test_GHC + theories [condition = ISABELLE_MLTON] + Code_Test_MLton + theories [condition = ISABELLE_OCAMLC] + Code_Test_OCaml + theories [condition = ISABELLE_POLYML] + Code_Test_PolyML + theories [condition = ISABELLE_SCALA] + Code_Test_Scala + theories [condition = ISABELLE_SMLNJ] + Code_Test_SMLNJ + +session "HOL-Metis_Examples" in Metis_Examples = HOL + + description {* + Author: Lawrence C Paulson, Cambridge University Computer Laboratory + Author: Jasmin Blanchette, TU Muenchen + + Testing Metis and Sledgehammer. + *} + options [document = false] + theories + Abstraction + Big_O + Binary_Tree + Clausification + Message + Proxies + Tarski + Trans_Closure + Sets + +session "HOL-Nitpick_Examples" in Nitpick_Examples = HOL + + description {* + Author: Jasmin Blanchette, TU Muenchen + Copyright 2009 + *} + options [document = false] + theories [quick_and_dirty] Nitpick_Examples + +session "HOL-Algebra" (main) in Algebra = HOL + + description {* + Author: Clemens Ballarin, started 24 September 1999 + + The Isabelle Algebraic Library. + *} + options [document_graph] + theories [document = false] + (* Preliminaries from set and number theory *) + "~~/src/HOL/Library/FuncSet" + "~~/src/HOL/Number_Theory/Primes" + "~~/src/HOL/Number_Theory/Binomial" + "~~/src/HOL/Library/Permutation" + theories + (*** New development, based on explicit structures ***) + (* Groups *) + FiniteProduct (* Product operator for commutative groups *) + Sylow (* Sylow's theorem *) + Bij (* Automorphism Groups *) + + (* Rings *) + Divisibility (* Rings *) + IntRing (* Ideals and residue classes *) + UnivPoly (* Polynomials *) + document_files "root.bib" "root.tex" + +session "HOL-Auth" in Auth = HOL + + description {* + A new approach to verifying authentication protocols. + *} + options [document_graph] + theories + Auth_Shared + Auth_Public + "Smartcard/Auth_Smartcard" + "Guard/Auth_Guard_Shared" + "Guard/Auth_Guard_Public" + document_files "root.tex" + +session "HOL-UNITY" in UNITY = "HOL-Auth" + + description {* + Author: Lawrence C Paulson, Cambridge University Computer Laboratory + Copyright 1998 University of Cambridge + + Verifying security protocols using Chandy and Misra's UNITY formalism. + *} + options [document_graph] + theories + (*Basic meta-theory*) + "UNITY_Main" + + (*Simple examples: no composition*) + "Simple/Deadlock" + "Simple/Common" + "Simple/Network" + "Simple/Token" + "Simple/Channel" + "Simple/Lift" + "Simple/Mutex" + "Simple/Reach" + "Simple/Reachability" + + (*Verifying security protocols using UNITY*) + "Simple/NSP_Bad" + + (*Example of composition*) + "Comp/Handshake" + + (*Universal properties examples*) + "Comp/Counter" + "Comp/Counterc" + "Comp/Priority" + + "Comp/TimerArray" + "Comp/Progress" + + "Comp/Alloc" + "Comp/AllocImpl" + "Comp/Client" + + (*obsolete*) + "ELT" + document_files "root.tex" + +session "HOL-Unix" in Unix = HOL + + options [print_mode = "no_brackets,no_type_brackets"] + theories Unix + document_files "root.bib" "root.tex" + +session "HOL-ZF" in ZF = HOL + + theories MainZF Games + document_files "root.tex" + +session "HOL-Imperative_HOL" in Imperative_HOL = HOL + + options [document_graph, print_mode = "iff,no_brackets"] + theories [document = false] + "~~/src/HOL/Library/Countable" + "~~/src/HOL/Library/Monad_Syntax" + "~~/src/HOL/Library/LaTeXsugar" + theories Imperative_HOL_ex + document_files "root.bib" "root.tex" + +session "HOL-Decision_Procs" in Decision_Procs = HOL + + description {* + Various decision procedures, typically involving reflection. + *} + options [condition = ML_SYSTEM_POLYML, document = false] + theories Decision_Procs + +session "HOL-Proofs-ex" in "Proofs/ex" = "HOL-Proofs" + + options [document = false, parallel_proofs = 0] + theories + Hilbert_Classical + XML_Data + +session "HOL-Proofs-Extraction" in "Proofs/Extraction" = "HOL-Proofs" + + description {* + Examples for program extraction in Higher-Order Logic. + *} + options [condition = ML_SYSTEM_POLYML, parallel_proofs = 0, quick_and_dirty = false] + theories [document = false] + "~~/src/HOL/Library/Code_Target_Numeral" + "~~/src/HOL/Library/Monad_Syntax" + "~~/src/HOL/Number_Theory/Primes" + "~~/src/HOL/Number_Theory/UniqueFactorization" + "~~/src/HOL/Library/State_Monad" + theories + Greatest_Common_Divisor + Warshall + Higman_Extraction + Pigeonhole + Euclid + document_files "root.bib" "root.tex" + +session "HOL-Proofs-Lambda" in "Proofs/Lambda" = "HOL-Proofs" + + description {* + Lambda Calculus in de Bruijn's Notation. + + This session defines lambda-calculus terms with de Bruijn indixes and + proves confluence of beta, eta and beta+eta. + + The paper "More Church-Rosser Proofs (in Isabelle/HOL)" describes the whole + theory (see http://www.in.tum.de/~nipkow/pubs/jar2001.html). + *} + options [document_graph, print_mode = "no_brackets", parallel_proofs = 0, + quick_and_dirty = false] + theories [document = false] + "~~/src/HOL/Library/Code_Target_Int" + theories + Eta + StrongNorm + Standardization + WeakNorm + document_files "root.bib" "root.tex" + +session "HOL-Prolog" in Prolog = HOL + + description {* + Author: David von Oheimb (based on a lecture on Lambda Prolog by Nadathur) + + A bare-bones implementation of Lambda-Prolog. + + This is a simple exploratory implementation of Lambda-Prolog in HOL, + including some minimal examples (in Test.thy) and a more typical example of + a little functional language and its type system. + *} + options [document = false] + theories Test Type + +session "HOL-MicroJava" in MicroJava = HOL + + description {* + Formalization of a fragment of Java, together with a corresponding virtual + machine and a specification of its bytecode verifier and a lightweight + bytecode verifier, including proofs of type-safety. + *} + options [document_graph] + theories [document = false] "~~/src/HOL/Library/While_Combinator" + theories MicroJava + document_files + "introduction.tex" + "root.bib" + "root.tex" + +session "HOL-NanoJava" in NanoJava = HOL + + description {* + Hoare Logic for a tiny fragment of Java. + *} + options [document_graph] + theories Example + document_files "root.bib" "root.tex" + +session "HOL-Bali" in Bali = HOL + + options [document_graph] + theories + AxExample + AxSound + AxCompl + Trans + document_files "root.tex" + +session "HOL-IOA" in IOA = HOL + + description {* + Author: Tobias Nipkow and Konrad Slind and Olaf Müller + Copyright 1994--1996 TU Muenchen + + The meta-theory of I/O-Automata in HOL. This formalization has been + significantly changed and extended, see HOLCF/IOA. There are also the + proofs of two communication protocols which formerly have been here. + + @inproceedings{Nipkow-Slind-IOA, + author={Tobias Nipkow and Konrad Slind}, + title={{I/O} Automata in {Isabelle/HOL}}, + booktitle={Proc.\ TYPES Workshop 1994}, + publisher=Springer, + series=LNCS, + note={To appear}} + ftp://ftp.informatik.tu-muenchen.de/local/lehrstuhl/nipkow/ioa.ps.gz + + and + + @inproceedings{Mueller-Nipkow, + author={Olaf M\"uller and Tobias Nipkow}, + title={Combining Model Checking and Deduction for {I/O}-Automata}, + booktitle={Proc.\ TACAS Workshop}, + organization={Aarhus University, BRICS report}, + year=1995} + ftp://ftp.informatik.tu-muenchen.de/local/lehrstuhl/nipkow/tacas.dvi.gz + *} + options [document = false] + theories Solve + +session "HOL-Lattice" in Lattice = HOL + + description {* + Author: Markus Wenzel, TU Muenchen + + Basic theory of lattices and orders. + *} + theories CompleteLattice + document_files "root.tex" + +session "HOL-ex" in ex = HOL + + description {* + Miscellaneous examples for Higher-Order Logic. + *} + options [condition = ML_SYSTEM_POLYML] + theories [document = false] + "~~/src/HOL/Library/State_Monad" + Code_Binary_Nat_examples + "~~/src/HOL/Library/FuncSet" + Eval_Examples + Normalization_by_Evaluation + Hebrew + Chinese + Serbian + "~~/src/HOL/Library/FinFun_Syntax" + "~~/src/HOL/Library/Refute" + "~~/src/HOL/Library/Transitive_Closure_Table" + Cartouche_Examples + theories + Adhoc_Overloading_Examples + Iff_Oracle + Coercion_Examples + Higher_Order_Logic + Abstract_NAT + Guess + Fundefs + Induction_Schema + LocaleTest2 + Records + While_Combinator_Example + MonoidGroup + BinEx + Hex_Bin_Examples + Antiquote + Multiquote + PER + NatSum + ThreeDivides + Intuitionistic + CTL + Arith_Examples + BT + Tree23 + Bubblesort + MergeSort + Lagrange + Groebner_Examples + MT + Unification + Primrec + Tarski + Classical + Set_Theory + Termination + Coherent + PresburgerEx + Reflection_Examples + Sqrt + Sqrt_Script + Transfer_Ex + Transfer_Int_Nat + Transitive_Closure_Table_Ex + HarmonicSeries + Refute_Examples + Execute_Choice + Gauge_Integration + Dedekind_Real + Quicksort + Birthday_Paradox + List_to_Set_Comprehension_Examples + Seq + Simproc_Tests + Executable_Relation + FinFunPred + Set_Comprehension_Pointfree_Examples + Parallel_Example + IArray_Examples + SVC_Oracle + Simps_Case_Conv_Examples + ML + SAT_Examples + SOS + SOS_Cert + theories [skip_proofs = false] + Meson_Test + theories [condition = SVC_HOME] + svc_test + theories [condition = ISABELLE_FULL_TEST] + Sudoku + document_files "root.bib" "root.tex" + +session "HOL-Isar_Examples" in Isar_Examples = HOL + + description {* + Miscellaneous Isabelle/Isar examples for Higher-Order Logic. + *} + theories [document = false] + "~~/src/HOL/Library/Lattice_Syntax" + "../Number_Theory/Primes" + theories + Basic_Logic + Cantor + Drinker + Expr_Compiler + Fibonacci + Group + Group_Context + Group_Notepad + Hoare_Ex + Knaster_Tarski + Mutilated_Checkerboard + Nested_Datatype + Peirce + Puzzle + Summation + document_files + "root.bib" + "root.tex" + "style.tex" + +session "HOL-SET_Protocol" in SET_Protocol = HOL + + description {* + Verification of the SET Protocol. + *} + options [document_graph] + theories [document = false] "~~/src/HOL/Library/Nat_Bijection" + theories SET_Protocol + document_files "root.tex" + +session "HOL-Matrix_LP" in Matrix_LP = HOL + + description {* + Two-dimensional matrices and linear programming. + *} + options [document_graph] + theories Cplex + document_files "root.tex" + +session "HOL-TLA" in TLA = HOL + + description {* + Lamport's Temporal Logic of Actions. + *} + options [document = false] + theories TLA + +session "HOL-TLA-Inc" in "TLA/Inc" = "HOL-TLA" + + options [document = false] + theories Inc + +session "HOL-TLA-Buffer" in "TLA/Buffer" = "HOL-TLA" + + options [document = false] + theories DBuffer + +session "HOL-TLA-Memory" in "TLA/Memory" = "HOL-TLA" + + options [document = false] + theories MemoryImplementation + +session "HOL-TPTP" in TPTP = HOL + + description {* + Author: Jasmin Blanchette, TU Muenchen + Author: Nik Sultana, University of Cambridge + Copyright 2011 + + TPTP-related extensions. + *} + options [document = false] + theories + ATP_Theory_Export + MaSh_Eval + TPTP_Interpret + THF_Arith + TPTP_Proof_Reconstruction + theories + ATP_Problem_Import + +session "HOL-Multivariate_Analysis" (main) in Multivariate_Analysis = HOL + + options [document_graph] + theories + Multivariate_Analysis + Determinants + PolyRoots + Complex_Analysis_Basics + document_files + "root.tex" + +session "HOL-Probability" in "Probability" = "HOL-Multivariate_Analysis" + + options [document_graph] + theories [document = false] + "~~/src/HOL/Library/Countable" + "~~/src/HOL/Library/Permutation" + "~~/src/HOL/Library/Order_Continuity" + "~~/src/HOL/Library/Diagonal_Subsequence" + theories + Probability + "ex/Dining_Cryptographers" + "ex/Koepf_Duermuth_Countermeasure" + document_files "root.tex" + +session "HOL-Nominal" (main) in Nominal = HOL + + options [document = false] + theories Nominal + +session "HOL-Nominal-Examples" in "Nominal/Examples" = "HOL-Nominal" + + options [condition = ML_SYSTEM_POLYML, document = false] + theories + Nominal_Examples_Base + theories [condition = ISABELLE_FULL_TEST] + Nominal_Examples + theories [quick_and_dirty] + VC_Condition + +session "HOL-Cardinals" in Cardinals = HOL + + description {* + Ordinals and Cardinals, Full Theories. + *} + options [document = false] + theories Cardinals + document_files + "intro.tex" + "root.tex" + "root.bib" + +session "HOL-Datatype_Examples" in Datatype_Examples = HOL + + description {* + (Co)datatype Examples, including large ones from John Harrison. + *} + options [document = false] + theories + "~~/src/HOL/Library/Old_Datatype" + Compat + Lambda_Term + Process + TreeFsetI + "Derivation_Trees/Gram_Lang" + "Derivation_Trees/Parallel" + Koenig + Stream_Processor + Misc_Codatatype + Misc_Datatype + Misc_Primcorec + Misc_Primrec + theories [condition = ISABELLE_FULL_TEST] + Brackin + IsaFoR + Misc_N2M + +session "HOL-Word" (main) in Word = HOL + + options [document_graph] + theories Word + document_files "root.bib" "root.tex" + +session "HOL-Word-Examples" in "Word/Examples" = "HOL-Word" + + options [document = false] + theories WordExamples + +session "HOL-Statespace" in Statespace = HOL + + theories [skip_proofs = false] + StateSpaceEx + document_files "root.tex" + +session "HOL-NSA" in NSA = HOL + + description {* + Nonstandard analysis. + *} + options [document_graph] + theories Hypercomplex + document_files "root.tex" + +session "HOL-NSA-Examples" in "NSA/Examples" = "HOL-NSA" + + options [document = false] + theories NSPrimes + +session "HOL-Mirabelle" in Mirabelle = HOL + + options [document = false] + theories Mirabelle_Test + +session "HOL-Mirabelle-ex" in "Mirabelle/ex" = "HOL-Mirabelle" + + options [document = false, timeout = 60] + theories Ex + +session "HOL-Word-SMT_Examples" in SMT_Examples = "HOL-Word" + + options [document = false, quick_and_dirty] + theories + Boogie + SMT_Examples + SMT_Word_Examples + theories [condition = ISABELLE_FULL_TEST] + SMT_Tests + files + "Boogie_Dijkstra.certs" + "Boogie_Max.certs" + "SMT_Examples.certs" + "SMT_Word_Examples.certs" + "VCC_Max.certs" + +session "HOL-SPARK" (main) in "SPARK" = "HOL-Word" + + options [document = false] + theories SPARK + +session "HOL-SPARK-Examples" in "SPARK/Examples" = "HOL-SPARK" + + options [document = false] + theories + "Gcd/Greatest_Common_Divisor" + + "Liseq/Longest_Increasing_Subsequence" + + "RIPEMD-160/F" + "RIPEMD-160/Hash" + "RIPEMD-160/K_L" + "RIPEMD-160/K_R" + "RIPEMD-160/R_L" + "RIPEMD-160/Round" + "RIPEMD-160/R_R" + "RIPEMD-160/S_L" + "RIPEMD-160/S_R" + + "Sqrt/Sqrt" + files + "Gcd/greatest_common_divisor/g_c_d.fdl" + "Gcd/greatest_common_divisor/g_c_d.rls" + "Gcd/greatest_common_divisor/g_c_d.siv" + "Liseq/liseq/liseq_length.fdl" + "Liseq/liseq/liseq_length.rls" + "Liseq/liseq/liseq_length.siv" + "RIPEMD-160/rmd/f.fdl" + "RIPEMD-160/rmd/f.rls" + "RIPEMD-160/rmd/f.siv" + "RIPEMD-160/rmd/hash.fdl" + "RIPEMD-160/rmd/hash.rls" + "RIPEMD-160/rmd/hash.siv" + "RIPEMD-160/rmd/k_l.fdl" + "RIPEMD-160/rmd/k_l.rls" + "RIPEMD-160/rmd/k_l.siv" + "RIPEMD-160/rmd/k_r.fdl" + "RIPEMD-160/rmd/k_r.rls" + "RIPEMD-160/rmd/k_r.siv" + "RIPEMD-160/rmd/r_l.fdl" + "RIPEMD-160/rmd/r_l.rls" + "RIPEMD-160/rmd/r_l.siv" + "RIPEMD-160/rmd/round.fdl" + "RIPEMD-160/rmd/round.rls" + "RIPEMD-160/rmd/round.siv" + "RIPEMD-160/rmd/r_r.fdl" + "RIPEMD-160/rmd/r_r.rls" + "RIPEMD-160/rmd/r_r.siv" + "RIPEMD-160/rmd/s_l.fdl" + "RIPEMD-160/rmd/s_l.rls" + "RIPEMD-160/rmd/s_l.siv" + "RIPEMD-160/rmd/s_r.fdl" + "RIPEMD-160/rmd/s_r.rls" + "RIPEMD-160/rmd/s_r.siv" + +session "HOL-SPARK-Manual" in "SPARK/Manual" = "HOL-SPARK" + + options [show_question_marks = false] + theories + Example_Verification + VC_Principles + Reference + Complex_Types + files + "complex_types_app/initialize.fdl" + "complex_types_app/initialize.rls" + "complex_types_app/initialize.siv" + "loop_invariant/proc1.fdl" + "loop_invariant/proc1.rls" + "loop_invariant/proc1.siv" + "loop_invariant/proc2.fdl" + "loop_invariant/proc2.rls" + "loop_invariant/proc2.siv" + "simple_greatest_common_divisor/g_c_d.fdl" + "simple_greatest_common_divisor/g_c_d.rls" + "simple_greatest_common_divisor/g_c_d.siv" + document_files + "complex_types.ads" + "complex_types_app.adb" + "complex_types_app.ads" + "Gcd.adb" + "Gcd.ads" + "intro.tex" + "loop_invariant.adb" + "loop_invariant.ads" + "root.bib" + "root.tex" + "Simple_Gcd.adb" + "Simple_Gcd.ads" + +session "HOL-Mutabelle" in Mutabelle = HOL + + options [document = false] + theories MutabelleExtra + +session "HOL-Quickcheck_Examples" in Quickcheck_Examples = HOL + + options [document = false] + theories + Quickcheck_Examples + Quickcheck_Lattice_Examples + Completeness + Quickcheck_Interfaces + theories [condition = ISABELLE_GHC] + Hotel_Example + Quickcheck_Narrowing_Examples + +session "HOL-Quickcheck_Benchmark" in Quickcheck_Benchmark = HOL + + theories [condition = ISABELLE_FULL_TEST, quick_and_dirty] + Find_Unused_Assms_Examples + Needham_Schroeder_No_Attacker_Example + Needham_Schroeder_Guided_Attacker_Example + Needham_Schroeder_Unguided_Attacker_Example + +session "HOL-Quotient_Examples" in Quotient_Examples = HOL + + description {* + Author: Cezary Kaliszyk and Christian Urban + *} + options [document = false] + theories + DList + FSet + Quotient_Int + Quotient_Message + Lift_FSet + Lift_Set + Lift_Fun + Quotient_Rat + Lift_DList + Int_Pow + +session "HOL-Predicate_Compile_Examples" in Predicate_Compile_Examples = HOL + + options [document = false] + theories + Examples + Predicate_Compile_Tests + (* FIXME + Predicate_Compile_Quickcheck_Examples -- should be added again soon (since 21-Oct-2010) *) + Specialisation_Examples + IMP_1 + IMP_2 + (* FIXME since 21-Jul-2011 + Hotel_Example_Small_Generator + IMP_3 + IMP_4 *) + theories [condition = "ISABELLE_SWIPL"] + Code_Prolog_Examples + Context_Free_Grammar_Example + Hotel_Example_Prolog + Lambda_Example + List_Examples + theories [condition = "ISABELLE_SWIPL", quick_and_dirty] + Reg_Exp_Example + +session HOLCF (main) in HOLCF = HOL + + description {* + Author: Franz Regensburger + Author: Brian Huffman + + HOLCF -- a semantic extension of HOL by the LCF logic. + *} + options [document_graph] + theories [document = false] + "~~/src/HOL/Library/Nat_Bijection" + "~~/src/HOL/Library/Countable" + theories + Plain_HOLCF + Fixrec + HOLCF + document_files "root.tex" + +session "HOLCF-Tutorial" in "HOLCF/Tutorial" = HOLCF + + theories + Domain_ex + Fixrec_ex + New_Domain + document_files "root.tex" + +session "HOLCF-Library" in "HOLCF/Library" = HOLCF + + options [document = false] + theories HOLCF_Library + +session "HOLCF-IMP" in "HOLCF/IMP" = HOLCF + + description {* + IMP -- A WHILE-language and its Semantics. + + This is the HOLCF-based denotational semantics of a simple WHILE-language. + *} + options [document = false] + theories HoareEx + document_files "root.tex" + +session "HOLCF-ex" in "HOLCF/ex" = HOLCF + + description {* + Miscellaneous examples for HOLCF. + *} + options [document = false] + theories + Dnat + Dagstuhl + Focus_ex + Fix2 + Hoare + Concurrency_Monad + Loop + Powerdomain_ex + Domain_Proofs + Letrec + Pattern_Match + +session "HOLCF-FOCUS" in "HOLCF/FOCUS" = HOLCF + + description {* + FOCUS: a theory of stream-processing functions Isabelle/HOLCF. + + For introductions to FOCUS, see + + "The Design of Distributed Systems - An Introduction to FOCUS" + http://www4.in.tum.de/publ/html.php?e=2 + + "Specification and Refinement of a Buffer of Length One" + http://www4.in.tum.de/publ/html.php?e=15 + + "Specification and Development of Interactive Systems: Focus on Streams, + Interfaces, and Refinement" http://www4.in.tum.de/publ/html.php?e=321 + *} + options [document = false] + theories + Fstreams + FOCUS + Buffer_adm + +session IOA in "HOLCF/IOA" = HOLCF + + description {* + Author: Olaf Mueller + Copyright 1997 TU München + + A formalization of I/O automata in HOLCF. + + The distribution contains simulation relations, temporal logic, and an + abstraction theory. Everything is based upon a domain-theoretic model of + finite and infinite sequences. + *} + options [document = false] + theories "meta_theory/Abstraction" + +session "IOA-ABP" in "HOLCF/IOA/ABP" = IOA + + description {* + Author: Olaf Mueller + + The Alternating Bit Protocol performed in I/O-Automata. + *} + options [document = false] + theories Correctness + +session "IOA-NTP" in "HOLCF/IOA/NTP" = IOA + + description {* + Author: Tobias Nipkow & Konrad Slind + + A network transmission protocol, performed in the + I/O automata formalization by Olaf Mueller. + *} + options [document = false] + theories Correctness + +session "IOA-Storage" in "HOLCF/IOA/Storage" = IOA + + description {* + Author: Olaf Mueller + + Memory storage case study. + *} + options [document = false] + theories Correctness + +session "IOA-ex" in "HOLCF/IOA/ex" = IOA + + description {* + Author: Olaf Mueller + *} + options [document = false] + theories + TrivEx + TrivEx2 + +session "HOL-Record_Benchmark" in Record_Benchmark = HOL + + description {* + Some benchmark on large record. + *} + options [document = false] + theories [condition = ISABELLE_FULL_TEST] + Record_Benchmark + diff --git a/samples/Linux Kernel Module/bcm4334x.mod b/samples/Linux Kernel Module/bcm4334x.mod new file mode 100644 index 00000000..8b35ba24 --- /dev/null +++ b/samples/Linux Kernel Module/bcm4334x.mod @@ -0,0 +1,2 @@ +/data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcm4334x.ko +/data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_pno.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_common.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_ip.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_custom_gpio.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_sched.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_cfg80211.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_wq.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/aiutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmevent.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmwifi_channels.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/hndpmu.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/linux_osl.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/sbutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/siutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_android.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfg80211.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfgp2p.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfg_btcoex.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wldev_common.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_linux_mon.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_platdev.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_sdmmc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_sdmmc_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_cdc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_wlfc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_sdio.o diff --git a/samples/Linux Kernel Module/mbcache.mod b/samples/Linux Kernel Module/mbcache.mod new file mode 100644 index 00000000..1478b3a1 --- /dev/null +++ b/samples/Linux Kernel Module/mbcache.mod @@ -0,0 +1,2 @@ +fs/mbcache.ko +fs/mbcache.o diff --git a/samples/Linux Kernel Module/md5.mod b/samples/Linux Kernel Module/md5.mod new file mode 100644 index 00000000..85778eb0 --- /dev/null +++ b/samples/Linux Kernel Module/md5.mod @@ -0,0 +1,2 @@ +crypto/md5.ko +crypto/md5.o diff --git a/samples/Modula-2/HuffChan.mod b/samples/Modula-2/HuffChan.mod new file mode 100644 index 00000000..14073609 --- /dev/null +++ b/samples/Modula-2/HuffChan.mod @@ -0,0 +1,329 @@ +IMPLEMENTATION MODULE HuffChan; + +(* + This module shows how to redefine standard IO file functions. It provides + functions for reading and writing packed files opened in Raw mode. +*) + +IMPORT IOChan, IOLink, ChanConsts, IOConsts, SYSTEM, Strings; +FROM Storage IMPORT ALLOCATE, DEALLOCATE; + +CONST + rbldFrq = 512; (* means: every 512 bytes rebuild table *) + +TYPE + charTap = POINTER TO ARRAY [0..MAX(INTEGER)-1] OF CHAR; + smbTp = POINTER TO smbT; + + smbT = RECORD (* Huffman's tree *) + ch : CHAR; + n : CARDINAL; (* frequncy of char ch *) + left,right,next : smbTp; + END; + + tblT = RECORD (* bit sequence for code *) + vl : CARDINAL; (* bit sequence *) + cnt : INTEGER; (* it length *) + END; + + lclDataT = RECORD (* channel's local data *) + tRoot : smbTp; + htbl : ARRAY [0..255] OF tblT; (* code -> bit sequence table *) + ftbl : ARRAY [0..255] OF CARDINAL; (* frequncey table *) + wBf,rb1,rb2 : CARDINAL; + wbc,rbc,smc : INTEGER; + chid : IOChan.ChanId; + END; + lclDataTp = POINTER TO lclDataT; + charp = POINTER TO CHAR; + +VAR + did : IOLink.DeviceId; + ldt : lclDataTp; + + +PROCEDURE Shf(a:CARDINAL; b : INTEGER) : CARDINAL; (* shl a,b (or shr) *) +BEGIN + RETURN SYSTEM.CAST(CARDINAL,SYSTEM.SHIFT(SYSTEM.CAST(BITSET,a),b)); +END Shf; + +PROCEDURE wrDword(a:CARDINAL); (* write 4 bytes to file *) +BEGIN + IOChan.RawWrite(ldt^.chid,SYSTEM.ADR(a),4); +END wrDword; + +PROCEDURE rdDword() : CARDINAL; (* read 4 bytes from file *) +VAR + a,z : CARDINAL; +BEGIN + a:=0; + IOChan.RawRead(ldt^.chid,SYSTEM.ADR(a),4,z); + RETURN a; +END rdDword; + +PROCEDURE wrSmb(ch : CHAR); (* write bit sequence for code ch *) +VAR + v,h : CARDINAL; + b,c : INTEGER; +BEGIN + WITH ldt^ DO + v:=htbl[ORD(ch)].vl; + c:=htbl[ORD(ch)].cnt; + IF c+wbc<=32 THEN + wBf:=Shf(wBf,c); + wBf:=wBf+v; + wbc:=wbc+c; + IF wbc=32 THEN + wrDword(wBf); + wBf:=0; wbc:=0; + END; + RETURN; + END; + b:=c+wbc-32; + h:=Shf(v,-b); + wBf:=Shf(wBf,32-wbc)+h; + wrDword(wBf); + wBf:=v-Shf(h,b); + wbc:=b; + END; +END wrSmb; + +PROCEDURE flush(); (* write data in buffer *) +BEGIN + WITH ldt^ DO + wBf:=Shf(wBf,32-wbc); + wrDword(wBf); + END; +END flush; + +PROCEDURE getSym() : CHAR; (* find code for first bit sequence in buffer *) +VAR + t,i : CARDINAL; + b : INTEGER; +BEGIN + WITH ldt^ DO + IF rbc<=32 THEN + rb2:=rdDword(); + t:=Shf(rb2,-rbc); + IF rbc=32 THEN t:=0; END; + rb1:=rb1+t; + rb2:=Shf(rb2,32-rbc); + IF rbc=0 THEN rb2:=0; END; + rbc:=rbc+32; + END; + FOR i:=0 TO 255 DO + t:=Shf(rb1,htbl[i].cnt-32); + IF t=htbl[i].vl THEN + rb1:=Shf(rb1,htbl[i].cnt); + b:=32-htbl[i].cnt; + t:=Shf(rb2,-b); + rb1:=rb1+t; + rb2:=Shf(rb2,32-b); + rbc:=rbc+b-32; + RETURN CHR(i); + END; + END; + END; +END getSym; + +PROCEDURE Insert(s : smbTp); (* insert new character in Huffman's tree *) +VAR + cr : smbTp; +BEGIN + WITH ldt^ DO + IF tRoot=NIL THEN + cr:=tRoot; + tRoot:=s; + s^.next:=cr; + RETURN; + ELSIF tRoot^.n<=s^.n THEN + cr:=tRoot; + tRoot:=s; + s^.next:=cr; + RETURN; + END; + cr:=tRoot; + WHILE (cr^.next<>NIL) & (cr^.next^.n>s^.n) DO + cr:=cr^.next; + END; + s^.next:=cr^.next; + cr^.next:=s; + END; +END Insert; + +PROCEDURE BuildTree(); (* build Huffman's tree *) +VAR + cr,ocr,ncr : smbTp; +BEGIN + WITH ldt^ DO + LOOP + ocr:=NIL; cr:=tRoot; + WHILE cr^.next^.next<>NIL DO + ocr:=cr; cr:=cr^.next; + END; + NEW(ncr); + ncr^.n:=cr^.n+cr^.next^.n; + ncr^.left:=cr; + ncr^.right:=cr^.next; + IF ocr<>NIL THEN + ocr^.next:=NIL; + Insert(ncr); + ELSE + tRoot:=NIL; + Insert(ncr); + EXIT; + END; + END; + END; +END BuildTree; + +PROCEDURE BuildTable(cr: smbTp; vl,n: CARDINAL); (* build table: code -> bit sequence *) +BEGIN + WITH ldt^ DO + IF cr^.left=NIL THEN + htbl[ORD(cr^.ch)].vl:=vl; + htbl[ORD(cr^.ch)].cnt:=n; + DISPOSE(cr); + RETURN; + END; + vl:=vl*2; + BuildTable(cr^.left,vl,n+1); + BuildTable(cr^.right,vl+1,n+1); + DISPOSE(cr); + END; +END BuildTable; + +PROCEDURE clcTab(); (* build code/bitseq. table from frequency table *) +VAR + i : CARDINAL; + s : smbTp; +BEGIN + WITH ldt^ DO + tRoot:=NIL; + FOR i:=0 TO 255 DO + NEW(s); + s^.ch:=CHR(i); + s^.n:=ftbl[i]; + s^.left:=NIL; s^.right:=NIL; s^.next:=NIL; + Insert(s); + END; + BuildTree(); + BuildTable(tRoot,0,0); + END; +END clcTab; + +PROCEDURE iniHuf(); +VAR + i : CARDINAL; +BEGIN + WITH ldt^ DO + FOR i:=0 TO 255 DO + ftbl[i]:=1; + END; + wBf:=0; wbc:=0; rb1:=0; rb2:=0; rbc:=0; + smc:=0; + clcTab(); + END; +END iniHuf; + + +PROCEDURE RawWrite(x: IOLink.DeviceTablePtr; buf: SYSTEM.ADDRESS; + len: CARDINAL); +VAR + i : CARDINAL; + ch : CHAR; + cht : charTap; +BEGIN + IF len = 0 THEN RETURN; END; + ldt:=SYSTEM.CAST(lclDataTp,x^.cd); + cht:=SYSTEM.CAST(charTap,buf); + WITH ldt^ DO + FOR i:=0 TO len-1 DO + ch:=cht^[i]; + wrSmb(ch); + IF ch = 377C THEN wrSmb(ch); END; + ftbl[ORD(ch)]:=ftbl[ORD(ch)]+1; smc:=smc+1; + IF smc=rbldFrq THEN + clcTab(); + smc:=0; + END; + END; + END; + x^.result:=IOChan.ReadResult(ldt^.chid); +END RawWrite; + +PROCEDURE RawRead(x: IOLink.DeviceTablePtr; buf: SYSTEM.ADDRESS; + blen: CARDINAL; VAR len: CARDINAL); +VAR + i : CARDINAL; + cht : charTap; + ch : CHAR; +BEGIN + ldt:=SYSTEM.CAST(lclDataTp,x^.cd); + cht:=SYSTEM.CAST(charTap,buf); + IF (blen=0) OR (x^.result<>IOConsts.allRight) THEN len:=0; RETURN; END; + WITH ldt^ DO + FOR i:=0 TO blen-1 DO + ch:=getSym(); + IF ch = 377C THEN + ch:=getSym(); + IF ch = 0C THEN + x^.result:=IOConsts.endOfInput; + len:=i; cht^[i]:=0C; + RETURN; + END; + END; + cht^[i]:=ch; + ftbl[ORD(ch)]:=ftbl[ORD(ch)]+1; smc:=smc+1; + IF smc=rbldFrq THEN + clcTab(); + smc:=0; + END; + END; + len:=blen; + END; +END RawRead; + +PROCEDURE CreateAlias(VAR cid: ChanId; io: ChanId; VAR res: OpenResults); +VAR + x : IOLink.DeviceTablePtr; +BEGIN + IOLink.MakeChan(did,cid); + IF cid = IOChan.InvalidChan() THEN + res:=ChanConsts.outOfChans + ELSE + NEW(ldt); + IF ldt=NIL THEN + IOLink.UnMakeChan(did,cid); + res:=ChanConsts.outOfChans; + RETURN; + END; + x:=IOLink.DeviceTablePtrValue(cid,did,IOChan.notAvailable,""); + ldt^.chid:=io; + x^.cd:=ldt; + x^.doRawWrite:=RawWrite; + x^.doRawRead:=RawRead; + res:=ChanConsts.opened; + iniHuf(); + x^.result:=IOConsts.allRight; + END; +END CreateAlias; + +PROCEDURE DeleteAlias(VAR cid: ChanId); +VAR + x : IOLink.DeviceTablePtr; +BEGIN + x:=IOLink.DeviceTablePtrValue(cid,did,IOChan.notAvailable,""); + ldt:=x^.cd; + IF ldt^.rbc=0 THEN + wrSmb(377C); + wrSmb(0C); + flush(); + END; + DISPOSE(ldt); + IOLink.UnMakeChan(did,cid); +END DeleteAlias; + +BEGIN + IOLink.AllocateDeviceId(did); +END HuffChan. diff --git a/samples/PHP/root.php b/samples/PHP/root.php new file mode 100644 index 00000000..8f8be563 --- /dev/null +++ b/samples/PHP/root.php @@ -0,0 +1,6 @@ + diff --git a/samples/Perl/strict.t b/samples/Perl/strict.t index 04cea2f8..a9d4ec8c 100644 --- a/samples/Perl/strict.t +++ b/samples/Perl/strict.t @@ -1,4 +1,5 @@ use Test::Base; +use Test::More; __DATA__ === Strict Test diff --git a/samples/Perl6/test.p6 b/samples/Perl6/test.p6 index 3d12b56c..65073eb9 100644 --- a/samples/Perl6/test.p6 +++ b/samples/Perl6/test.p6 @@ -73,26 +73,6 @@ Here's some POD! Wooo say('this is not!'); -=table - Of role things - -say('not in your table'); -#= A single line declarator "block" (with a keyword like role) -#| Another single line declarator "block" (with a keyword like role) -#={ - A declarator block (with a keyword like role) - } -#|{ - Another declarator block (with a keyword like role) - } -#= { A single line declarator "block" with a brace (with a keyword like role) -#=« - More declarator blocks! (with a keyword like role) - » -#|« - More declarator blocks! (with a keyword like role) - » - say 'Moar code!'; my $don't = 16; diff --git a/samples/SMT/bignum_lia1.smt2 b/samples/SMT/bignum_lia1.smt2 new file mode 100644 index 00000000..e8eb354a --- /dev/null +++ b/samples/SMT/bignum_lia1.smt2 @@ -0,0 +1,20 @@ +(set-logic QF_LIA) +(set-info :source | SMT-COMP'06 organizers |) +(set-info :smt-lib-version 2.0) +(set-info :category "check") +(set-info :status unsat) +(set-info :notes |This benchmark is designed to check if the DP supports bignumbers.|) +(declare-fun x1 () Int) +(declare-fun x2 () Int) +(declare-fun x3 () Int) +(declare-fun x4 () Int) +(declare-fun x5 () Int) +(declare-fun x6 () Int) +(assert (and (or (>= x1 1000) (>= x1 1002)) + (or (>= x2 (* 1230 x1)) (>= x2 (* 1003 x1))) + (or (>= x3 (* 1310 x2)) (>= x3 (* 1999 x2))) + (or (>= x4 (* 4000 x3)) (>= x4 (* 8000 x3))) + (or (<= x5 (* (- 4000) x4)) (<= x5 (* (- 8000) x4))) + (or (>= x6 (* (- 3) x5)) (>= x6 (* (- 2) x5))) (< x6 0))) +(check-sat) +(exit) diff --git a/samples/SMT/list4.smt2 b/samples/SMT/list4.smt2 new file mode 100644 index 00000000..f2c8e539 --- /dev/null +++ b/samples/SMT/list4.smt2 @@ -0,0 +1,20 @@ +(set-logic AUFLIRA) +(set-info :source | Buggy list theorem |) +(set-info :smt-lib-version 2.0) +(set-info :category "crafted") +(set-info :status sat) +(declare-sort List 0) +(declare-fun cons (Real List) List) +(declare-fun nil () List) +(declare-fun car (List) Real) +(declare-fun cdr (List) List) +(declare-fun len (List) Int) +(assert (forall ((?x Real) (?y List)) (= (car (cons ?x ?y)) ?x))) +(assert (forall ((?x Real) (?y List)) (= (cdr (cons ?x ?y)) ?y))) +(assert (= (len nil) 0)) +(assert (forall ((?x Real) (?y List)) (= (len (cons ?x ?y)) (+ (len ?y) 1)))) +(declare-fun append (List List) List) +(assert (forall ((?x Real) (?y1 List) (?y2 List)) (= (append (cons ?x ?y1) ?y2) (cons ?x (append ?y1 ?y2))))) +(assert (not (forall ((?x Real) (?y List)) (= (append (cons ?x nil) ?y) (cons ?x ?y))))) +(check-sat) +(exit) diff --git a/samples/SMT/queen10-1.smt2 b/samples/SMT/queen10-1.smt2 new file mode 100644 index 00000000..25c8bd82 --- /dev/null +++ b/samples/SMT/queen10-1.smt2 @@ -0,0 +1,123 @@ +(set-logic QF_IDL) +(set-info :source | +Queens benchmarks generated by Hyondeuk Kim in SMT-LIB format. +|) +(set-info :smt-lib-version 2.0) +(set-info :category "crafted") +(set-info :status sat) +(declare-fun x0 () Int) +(declare-fun x1 () Int) +(declare-fun x2 () Int) +(declare-fun x3 () Int) +(declare-fun x4 () Int) +(declare-fun x5 () Int) +(declare-fun x6 () Int) +(declare-fun x7 () Int) +(declare-fun x8 () Int) +(declare-fun x9 () Int) +(declare-fun x10 () Int) +(assert + (let + ((?v_0 (- x0 x10)) + (?v_1 (- x1 x10)) + (?v_2 (- x2 x10)) + (?v_3 (- x3 x10)) + (?v_4 (- x4 x10)) + (?v_5 (- x5 x10)) + (?v_6 (- x6 x10)) + (?v_7 (- x7 x10)) + (?v_8 (- x8 x10)) + (?v_9 (- x9 x10)) + (?v_10 (- x0 x1)) + (?v_11 (- x0 x2)) + (?v_12 (- x0 x3)) + (?v_13 (- x0 x4)) + (?v_14 (- x0 x5)) + (?v_15 (- x0 x6)) + (?v_16 (- x0 x7)) + (?v_17 (- x0 x8)) + (?v_18 (- x0 x9)) + (?v_19 (- x1 x2)) + (?v_20 (- x1 x3)) + (?v_21 (- x1 x4)) + (?v_22 (- x1 x5)) + (?v_23 (- x1 x6)) + (?v_24 (- x1 x7)) + (?v_25 (- x1 x8)) + (?v_26 (- x1 x9)) + (?v_27 (- x2 x3)) + (?v_28 (- x2 x4)) + (?v_29 (- x2 x5)) + (?v_30 (- x2 x6)) + (?v_31 (- x2 x7)) + (?v_32 (- x2 x8)) + (?v_33 (- x2 x9)) + (?v_34 (- x3 x4)) + (?v_35 (- x3 x5)) + (?v_36 (- x3 x6)) + (?v_37 (- x3 x7)) + (?v_38 (- x3 x8)) + (?v_39 (- x3 x9)) + (?v_40 (- x4 x5)) + (?v_41 (- x4 x6)) + (?v_42 (- x4 x7)) + (?v_43 (- x4 x8)) + (?v_44 (- x4 x9)) + (?v_45 (- x5 x6)) + (?v_46 (- x5 x7)) + (?v_47 (- x5 x8)) + (?v_48 (- x5 x9)) + (?v_49 (- x6 x7)) + (?v_50 (- x6 x8)) + (?v_51 (- x6 x9)) + (?v_52 (- x7 x8)) + (?v_53 (- x7 x9)) + (?v_54 (- x8 x9))) + (and (<= ?v_0 9) (>= ?v_0 0) (<= ?v_1 9) (>= ?v_1 0) (<= ?v_2 9) (>= ?v_2 0) + (<= ?v_3 9) (>= ?v_3 0) (<= ?v_4 9) (>= ?v_4 0) (<= ?v_5 9) (>= ?v_5 0) + (<= ?v_6 9) (>= ?v_6 0) (<= ?v_7 9) (>= ?v_7 0) (<= ?v_8 9) (>= ?v_8 0) + (<= ?v_9 9) (>= ?v_9 0) + (not (= x0 x1)) (not (= x0 x2)) (not (= x0 x3)) (not (= x0 x4)) + (not (= x0 x5)) (not (= x0 x6)) (not (= x0 x7)) (not (= x0 x8)) + (not (= x0 x9)) (not (= x1 x2)) (not (= x1 x3)) (not (= x1 x4)) + (not (= x1 x5)) (not (= x1 x6)) (not (= x1 x7)) (not (= x1 x8)) + (not (= x1 x9)) (not (= x2 x3)) (not (= x2 x4)) (not (= x2 x5)) + (not (= x2 x6)) (not (= x2 x7)) (not (= x2 x8)) (not (= x2 x9)) + (not (= x3 x4)) (not (= x3 x5)) (not (= x3 x6)) (not (= x3 x7)) + (not (= x3 x8)) (not (= x3 x9)) (not (= x4 x5)) (not (= x4 x6)) + (not (= x4 x7)) (not (= x4 x8)) (not (= x4 x9)) (not (= x5 x6)) + (not (= x5 x7)) (not (= x5 x8)) (not (= x5 x9)) (not (= x6 x7)) + (not (= x6 x8)) (not (= x6 x9)) (not (= x7 x8)) (not (= x7 x9)) + (not (= x8 x9)) + (not (= ?v_10 1)) (not (= ?v_10 (- 1))) (not (= ?v_11 2)) + (not (= ?v_11 (- 2))) (not (= ?v_12 3)) (not (= ?v_12 (- 3))) + (not (= ?v_13 4)) (not (= ?v_13 (- 4))) (not (= ?v_14 5)) + (not (= ?v_14 (- 5))) (not (= ?v_15 6)) (not (= ?v_15 (- 6))) + (not (= ?v_16 7)) (not (= ?v_16 (- 7))) (not (= ?v_17 8)) + (not (= ?v_17 (- 8))) (not (= ?v_18 9)) (not (= ?v_18 (- 9))) + (not (= ?v_19 1)) (not (= ?v_19 (- 1))) (not (= ?v_20 2)) + (not (= ?v_20 (- 2))) (not (= ?v_21 3)) (not (= ?v_21 (- 3))) + (not (= ?v_22 4)) (not (= ?v_22 (- 4))) (not (= ?v_23 5)) + (not (= ?v_23 (- 5))) (not (= ?v_24 6)) (not (= ?v_24 (- 6))) + (not (= ?v_25 7)) (not (= ?v_25 (- 7))) (not (= ?v_26 8)) + (not (= ?v_26 (- 8))) (not (= ?v_27 1)) (not (= ?v_27 (- 1))) + (not (= ?v_28 2)) (not (= ?v_28 (- 2))) (not (= ?v_29 3)) + (not (= ?v_29 (- 3))) (not (= ?v_30 4)) (not (= ?v_30 (- 4))) + (not (= ?v_31 5)) (not (= ?v_31 (- 5))) (not (= ?v_32 6)) + (not (= ?v_32 (- 6))) (not (= ?v_33 7)) (not (= ?v_33 (- 7))) + (not (= ?v_34 1)) (not (= ?v_34 (- 1))) (not (= ?v_35 2)) + (not (= ?v_35 (- 2))) (not (= ?v_36 3)) (not (= ?v_36 (- 3))) + (not (= ?v_37 4)) (not (= ?v_37 (- 4))) (not (= ?v_38 5)) + (not (= ?v_38 (- 5))) (not (= ?v_39 6)) (not (= ?v_39 (- 6))) + (not (= ?v_40 1)) (not (= ?v_40 (- 1))) (not (= ?v_41 2)) + (not (= ?v_41 (- 2))) (not (= ?v_42 3)) (not (= ?v_42 (- 3))) + (not (= ?v_43 4)) (not (= ?v_43 (- 4))) (not (= ?v_44 5)) + (not (= ?v_44 (- 5))) (not (= ?v_45 1)) (not (= ?v_45 (- 1))) + (not (= ?v_46 2)) (not (= ?v_46 (- 2))) (not (= ?v_47 3)) + (not (= ?v_47 (- 3))) (not (= ?v_48 4)) (not (= ?v_48 (- 4))) + (not (= ?v_49 1)) (not (= ?v_49 (- 1))) (not (= ?v_50 2)) + (not (= ?v_50 (- 2))) (not (= ?v_51 3)) (not (= ?v_51 (- 3))) + (not (= ?v_52 1)) (not (= ?v_52 (- 1))) (not (= ?v_53 2)) + (not (= ?v_53 (- 2))) (not (= ?v_54 1)) (not (= ?v_54 (- 1)))))) +(check-sat) +(exit) diff --git a/samples/SMT/shufflevector.smt b/samples/SMT/shufflevector.smt new file mode 100644 index 00000000..6bc79d3a --- /dev/null +++ b/samples/SMT/shufflevector.smt @@ -0,0 +1,2104 @@ +(set-logic QF_ABV) +(define-sort Address () (_ BitVec 64)) +(define-sort Byte () (_ BitVec 8)) +(define-sort Mem () (Array Address Byte)) + +(define-sort I8 () (_ BitVec 8)) +(define-sort I16 () (_ BitVec 16)) +(define-sort I32 () (_ BitVec 32)) +(define-sort I64 () (_ BitVec 64)) +(define-sort I128 () (_ BitVec 128)) + + +;; +;;constants +;; +(define-fun zero () Address (_ bv0 64)) +(define-fun one () Address (_ bv1 64)) +(define-fun two () Address (_ bv2 64)) +(define-fun three () Address (_ bv3 64)) +(define-fun four () Address (_ bv4 64)) +(define-fun five () Address (_ bv5 64)) +(define-fun six () Address (_ bv6 64)) +(define-fun seven () Address (_ bv7 64)) +(define-fun eight () Address (_ bv8 64)) + + +;; +;; Write a little endian 1 bit value (8 bit aligned) at address x in mem +;; +(define-fun write1 ((mem Mem) (x Address) (v Bool)) Mem + (store mem x (ite v #x01 #x00))) + +;; +;; Write a little endian 8bit value at address x in mem +;; +(define-fun write8 ((mem Mem) (x Address) (v I8)) Mem + (store mem x v)) + +;; +;; Write a little endian 16bit value at address x in mem +;; +(define-fun write16 ((mem Mem) (x Address) (v I16)) Mem + (let ((b0 ((_ extract 7 0) v)) + (b1 ((_ extract 15 8) v))) + (store (store mem x b0) (bvadd x one) b1))) + +;; +;; Write a little endian 32bit value at address x in mem +;; +(define-fun write32 ((mem Mem) (x Address) (v I32)) Mem + (let ((b0 ((_ extract 7 0) v)) + (b1 ((_ extract 15 8) v)) + (b2 ((_ extract 23 16) v)) + (b3 ((_ extract 31 24) v))) + (store (store (store (store mem x b0) (bvadd x one) b1) (bvadd x two) b2) (bvadd x three) b3))) + +;; +;; Write a little endian 64bit value at address x in mem +;; +(define-fun write64 ((mem Mem) (x Address) (v I64)) Mem + (let ((b0 ((_ extract 31 0) v)) + (b1 ((_ extract 63 32) v))) + (write32 (write32 mem x b0) (bvadd x four) b1))) + +;; +;; Write a little endian 128bit value at address x in mem +;; +(define-fun write128 ((mem Mem) (x Address) (v I128)) Mem + (let ((b0 ((_ extract 63 0) v)) + (b1 ((_ extract 127 64) v))) + (write64 (write64 mem x b0) (bvadd x eight) b1))) + + +;; +;; Read a little endian 1 bit value (8 bit aligned) at address x in mem +;; - returns a Boolean: true if what's stored at address x is non-zero +;; +(define-fun read1 ((mem Mem) (x Address)) Bool + (not (= (select mem x) #x00))) + +;; +;; Read a little endian 8bit value at address x in mem +;; +(define-fun read8 ((mem Mem) (x Address)) I8 + (select mem x)) + +;; +;; Read a little endian 16bit value at address x in mem +;; +(define-fun read16 ((mem Mem) (x Address)) I16 + (let ((b0 (select mem x)) + (b1 (select mem (bvadd x one)))) + (concat b1 b0))) + +;; +;; Read a little endian 32bit value at address x in mem +;; +(define-fun read32 ((mem Mem) (x Address)) I32 + (let ((b0 (select mem x)) + (b1 (select mem (bvadd x one))) + (b2 (select mem (bvadd x two))) + (b3 (select mem (bvadd x three)))) + (concat b3 (concat b2 (concat b1 b0))))) + +;; +;; Read a little endian 64bit value at address x in mem +;; +(define-fun read64 ((mem Mem) (x Address)) I64 + (let ((b0 (read32 mem x)) + (b1 (read32 mem (bvadd x four)))) + (concat b1 b0))) + +;; +;; Read a little endian 128bit value at address x in mem +;; +(define-fun read128 ((mem Mem) (x Address)) I128 + (let ((b0 (read64 mem x)) + (b1 (read64 mem (bvadd x eight)))) + (concat b1 b0))) + + +;; +;; Vectors of (2^1) int4 elements +;; +(define-sort vector_1_4 () (Array (_ BitVec 1) (_ BitVec 4))) + +(declare-fun vundef_1_4 () vector_1_4) + + +;; +;; Vectors of (2^1) int8 elements +;; +(define-sort vector_1_8 () (Array (_ BitVec 1) (_ BitVec 8))) + +(declare-fun vundef_1_8 () vector_1_8) + + +;; +;; Vectors of (2^1) int16 elements +;; +(define-sort vector_1_16 () (Array (_ BitVec 1) (_ BitVec 16))) + +(declare-fun vundef_1_16 () vector_1_16) + + +;; +;; Vectors of (2^1) int32 elements +;; +(define-sort vector_1_32 () (Array (_ BitVec 1) (_ BitVec 32))) + +(declare-fun vundef_1_32 () vector_1_32) + + +;; +;; Vectors of (2^1) int64 elements +;; +(define-sort vector_1_64 () (Array (_ BitVec 1) (_ BitVec 64))) + +(declare-fun vundef_1_64 () vector_1_64) + + +;; +;; Vectors of (2^2) int4 elements +;; +(define-sort vector_2_4 () (Array (_ BitVec 2) (_ BitVec 4))) + +(declare-fun vundef_2_4 () vector_2_4) + + +;; +;; Vectors of (2^2) int8 elements +;; +(define-sort vector_2_8 () (Array (_ BitVec 2) (_ BitVec 8))) + +(declare-fun vundef_2_8 () vector_2_8) + + +;; +;; Vectors of (2^2) int16 elements +;; +(define-sort vector_2_16 () (Array (_ BitVec 2) (_ BitVec 16))) + +(declare-fun vundef_2_16 () vector_2_16) + + +;; +;; Vectors of (2^2) int32 elements +;; +(define-sort vector_2_32 () (Array (_ BitVec 2) (_ BitVec 32))) + +(declare-fun vundef_2_32 () vector_2_32) + + +;; +;; Vectors of (2^2) int64 elements +;; +(define-sort vector_2_64 () (Array (_ BitVec 2) (_ BitVec 64))) + +(declare-fun vundef_2_64 () vector_2_64) + + +;; +;; Vectors of (2^3) int4 elements +;; +(define-sort vector_3_4 () (Array (_ BitVec 3) (_ BitVec 4))) + +(declare-fun vundef_3_4 () vector_3_4) + + +;; +;; Vectors of (2^3) int8 elements +;; +(define-sort vector_3_8 () (Array (_ BitVec 3) (_ BitVec 8))) + +(declare-fun vundef_3_8 () vector_3_8) + + +;; +;; Vectors of (2^3) int16 elements +;; +(define-sort vector_3_16 () (Array (_ BitVec 3) (_ BitVec 16))) + +(declare-fun vundef_3_16 () vector_3_16) + + +;; +;; Vectors of (2^3) int32 elements +;; +(define-sort vector_3_32 () (Array (_ BitVec 3) (_ BitVec 32))) + +(declare-fun vundef_3_32 () vector_3_32) + + +;; +;; Vectors of (2^3) int64 elements +;; +(define-sort vector_3_64 () (Array (_ BitVec 3) (_ BitVec 64))) + +(declare-fun vundef_3_64 () vector_3_64) + +;; Special case where we use Bool rather than bitvectors of size 1 + +(define-sort vector_1_1 () (Array (_ BitVec 1) Bool)) + +(declare-fun vundef_1_1 () vector_1_1) + +(define-fun vmake_1_1 ((x0 Bool) (x1 Bool)) vector_1_1 + (store (store vundef_1_1 #b0 x0) #b1 x1)) + +(define-sort vector_2_1 () (Array (_ BitVec 2) Bool)) + +(declare-fun vundef_2_1 () vector_2_1) + +(define-fun vmake_2_1 + ((x0 Bool) (x1 Bool) (x2 Bool) (x3 Bool)) vector_2_1 + (store (store (store (store vundef_2_1 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +(define-sort vector_3_1 () (Array (_ BitVec 3) Bool)) + +(declare-fun vundef_3_1 () vector_3_1) + +(define-fun vmake_3_1 + ((x0 Bool) (x1 Bool) (x2 Bool) (x3 Bool) (x4 Bool) (x5 Bool) (x6 Bool) (x7 Bool)) vector_3_1 + (store (store (store (store (store (store (store (store vundef_3_1 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; +;; Vectors of (2^1) i.e. two int4 elements +;; +(define-fun vmake_1_4 ((x0 (_ BitVec 4)) (x1 (_ BitVec 4))) vector_1_4 + (store (store vundef_1_4 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int4 elements +;; +(define-fun vmake_2_4 + ((x0 (_ BitVec 4)) (x1 (_ BitVec 4)) (x2 (_ BitVec 4)) (x3 (_ BitVec 4))) vector_2_4 + (store (store (store (store vundef_2_4 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int4 elements +;; +(define-fun vmake_3_4 + ((x0 (_ BitVec 4)) (x1 (_ BitVec 4)) (x2 (_ BitVec 4)) (x3 (_ BitVec 4))(x4 (_ BitVec 4)) (x5 (_ BitVec 4)) (x6 (_ BitVec 4)) (x7 (_ BitVec 4))) vector_3_4 + (store (store (store (store (store (store (store (store vundef_3_4 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int4 elements + + (define-fun vzero_1_4 () vector_1_4 (vmake_1_4 (_ bv0 4) (_ bv0 4))) + + (define-fun vzero_2_4 () vector_2_4 (vmake_2_4 (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4))) + + (define-fun vzero_3_4 () vector_3_4 (vmake_3_4 (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4))) + + +;; +;; Vectors of (2^1) i.e. two int8 elements +;; +(define-fun vmake_1_8 ((x0 (_ BitVec 8)) (x1 (_ BitVec 8))) vector_1_8 + (store (store vundef_1_8 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int8 elements +;; +(define-fun vmake_2_8 + ((x0 (_ BitVec 8)) (x1 (_ BitVec 8)) (x2 (_ BitVec 8)) (x3 (_ BitVec 8))) vector_2_8 + (store (store (store (store vundef_2_8 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int8 elements +;; +(define-fun vmake_3_8 + ((x0 (_ BitVec 8)) (x1 (_ BitVec 8)) (x2 (_ BitVec 8)) (x3 (_ BitVec 8))(x4 (_ BitVec 8)) (x5 (_ BitVec 8)) (x6 (_ BitVec 8)) (x7 (_ BitVec 8))) vector_3_8 + (store (store (store (store (store (store (store (store vundef_3_8 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int8 elements + + (define-fun vzero_1_8 () vector_1_8 (vmake_1_8 (_ bv0 8) (_ bv0 8))) + + (define-fun vzero_2_8 () vector_2_8 (vmake_2_8 (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8))) + + (define-fun vzero_3_8 () vector_3_8 (vmake_3_8 (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8))) + + +;; +;; Vectors of (2^1) i.e. two int16 elements +;; +(define-fun vmake_1_16 ((x0 (_ BitVec 16)) (x1 (_ BitVec 16))) vector_1_16 + (store (store vundef_1_16 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int16 elements +;; +(define-fun vmake_2_16 + ((x0 (_ BitVec 16)) (x1 (_ BitVec 16)) (x2 (_ BitVec 16)) (x3 (_ BitVec 16))) vector_2_16 + (store (store (store (store vundef_2_16 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int16 elements +;; +(define-fun vmake_3_16 + ((x0 (_ BitVec 16)) (x1 (_ BitVec 16)) (x2 (_ BitVec 16)) (x3 (_ BitVec 16))(x4 (_ BitVec 16)) (x5 (_ BitVec 16)) (x6 (_ BitVec 16)) (x7 (_ BitVec 16))) vector_3_16 + (store (store (store (store (store (store (store (store vundef_3_16 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int16 elements + + (define-fun vzero_1_16 () vector_1_16 (vmake_1_16 (_ bv0 16) (_ bv0 16))) + + (define-fun vzero_2_16 () vector_2_16 (vmake_2_16 (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16))) + + (define-fun vzero_3_16 () vector_3_16 (vmake_3_16 (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16))) + + +;; +;; Vectors of (2^1) i.e. two int32 elements +;; +(define-fun vmake_1_32 ((x0 (_ BitVec 32)) (x1 (_ BitVec 32))) vector_1_32 + (store (store vundef_1_32 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int32 elements +;; +(define-fun vmake_2_32 + ((x0 (_ BitVec 32)) (x1 (_ BitVec 32)) (x2 (_ BitVec 32)) (x3 (_ BitVec 32))) vector_2_32 + (store (store (store (store vundef_2_32 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int32 elements +;; +(define-fun vmake_3_32 + ((x0 (_ BitVec 32)) (x1 (_ BitVec 32)) (x2 (_ BitVec 32)) (x3 (_ BitVec 32))(x4 (_ BitVec 32)) (x5 (_ BitVec 32)) (x6 (_ BitVec 32)) (x7 (_ BitVec 32))) vector_3_32 + (store (store (store (store (store (store (store (store vundef_3_32 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int32 elements + + (define-fun vzero_1_32 () vector_1_32 (vmake_1_32 (_ bv0 32) (_ bv0 32))) + + (define-fun vzero_2_32 () vector_2_32 (vmake_2_32 (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32))) + + (define-fun vzero_3_32 () vector_3_32 (vmake_3_32 (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32))) + + +;; +;; Vectors of (2^1) i.e. two int64 elements +;; +(define-fun vmake_1_64 ((x0 (_ BitVec 64)) (x1 (_ BitVec 64))) vector_1_64 + (store (store vundef_1_64 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int64 elements +;; +(define-fun vmake_2_64 + ((x0 (_ BitVec 64)) (x1 (_ BitVec 64)) (x2 (_ BitVec 64)) (x3 (_ BitVec 64))) vector_2_64 + (store (store (store (store vundef_2_64 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int64 elements +;; +(define-fun vmake_3_64 + ((x0 (_ BitVec 64)) (x1 (_ BitVec 64)) (x2 (_ BitVec 64)) (x3 (_ BitVec 64))(x4 (_ BitVec 64)) (x5 (_ BitVec 64)) (x6 (_ BitVec 64)) (x7 (_ BitVec 64))) vector_3_64 + (store (store (store (store (store (store (store (store vundef_3_64 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int64 elements + + (define-fun vzero_1_64 () vector_1_64 (vmake_1_64 (_ bv0 64) (_ bv0 64))) + + (define-fun vzero_2_64 () vector_2_64 (vmake_2_64 (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64))) + + (define-fun vzero_3_64 () vector_3_64 (vmake_3_64 (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64))) + + +(define-fun vbvadd_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvadd (select x #b0) (select y #b0))) + (z1 (bvadd (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvadd_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvadd (select x #b0) (select y #b0))) + (z1 (bvadd (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvadd_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvadd (select x #b0) (select y #b0))) + (z1 (bvadd (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvadd_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvadd (select x #b0) (select y #b0))) + (z1 (bvadd (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvsub_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvsub (select x #b0) (select y #b0))) + (z1 (bvsub (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvsub_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvsub (select x #b0) (select y #b0))) + (z1 (bvsub (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvsub_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvsub (select x #b0) (select y #b0))) + (z1 (bvsub (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvsub_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvsub (select x #b0) (select y #b0))) + (z1 (bvsub (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvmul_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvmul (select x #b0) (select y #b0))) + (z1 (bvmul (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvmul_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvmul (select x #b0) (select y #b0))) + (z1 (bvmul (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvmul_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvmul (select x #b0) (select y #b0))) + (z1 (bvmul (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvmul_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvmul (select x #b0) (select y #b0))) + (z1 (bvmul (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvshl_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvshl (select x #b0) (select y #b0))) + (z1 (bvshl (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvshl_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvshl (select x #b0) (select y #b0))) + (z1 (bvshl (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvshl_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvshl (select x #b0) (select y #b0))) + (z1 (bvshl (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvshl_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvshl (select x #b0) (select y #b0))) + (z1 (bvshl (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvsdiv_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvsdiv (select x #b0) (select y #b0))) + (z1 (bvsdiv (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvsdiv_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvsdiv (select x #b0) (select y #b0))) + (z1 (bvsdiv (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvsdiv_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvsdiv (select x #b0) (select y #b0))) + (z1 (bvsdiv (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvsdiv_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvsdiv (select x #b0) (select y #b0))) + (z1 (bvsdiv (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvudiv_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvudiv (select x #b0) (select y #b0))) + (z1 (bvudiv (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvudiv_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvudiv (select x #b0) (select y #b0))) + (z1 (bvudiv (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvudiv_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvudiv (select x #b0) (select y #b0))) + (z1 (bvudiv (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvudiv_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvudiv (select x #b0) (select y #b0))) + (z1 (bvudiv (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvlshr_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvlshr (select x #b0) (select y #b0))) + (z1 (bvlshr (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvlshr_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvlshr (select x #b0) (select y #b0))) + (z1 (bvlshr (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvlshr_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvlshr (select x #b0) (select y #b0))) + (z1 (bvlshr (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvlshr_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvlshr (select x #b0) (select y #b0))) + (z1 (bvlshr (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvashr_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvashr (select x #b0) (select y #b0))) + (z1 (bvashr (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvashr_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvashr (select x #b0) (select y #b0))) + (z1 (bvashr (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvashr_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvashr (select x #b0) (select y #b0))) + (z1 (bvashr (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvashr_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvashr (select x #b0) (select y #b0))) + (z1 (bvashr (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvurem_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvurem (select x #b0) (select y #b0))) + (z1 (bvurem (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvurem_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvurem (select x #b0) (select y #b0))) + (z1 (bvurem (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvurem_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvurem (select x #b0) (select y #b0))) + (z1 (bvurem (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvurem_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvurem (select x #b0) (select y #b0))) + (z1 (bvurem (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvsrem_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvsrem (select x #b0) (select y #b0))) + (z1 (bvsrem (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvsrem_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvsrem (select x #b0) (select y #b0))) + (z1 (bvsrem (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvsrem_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvsrem (select x #b0) (select y #b0))) + (z1 (bvsrem (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvsrem_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvsrem (select x #b0) (select y #b0))) + (z1 (bvsrem (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvand_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvand (select x #b0) (select y #b0))) + (z1 (bvand (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvand_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvand (select x #b0) (select y #b0))) + (z1 (bvand (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvand_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvand (select x #b0) (select y #b0))) + (z1 (bvand (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvand_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvand (select x #b0) (select y #b0))) + (z1 (bvand (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvor_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvor (select x #b0) (select y #b0))) + (z1 (bvor (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvor_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvor (select x #b0) (select y #b0))) + (z1 (bvor (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvor_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvor (select x #b0) (select y #b0))) + (z1 (bvor (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvor_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvor (select x #b0) (select y #b0))) + (z1 (bvor (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvxor_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvxor (select x #b0) (select y #b0))) + (z1 (bvxor (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvxor_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvxor (select x #b0) (select y #b0))) + (z1 (bvxor (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvxor_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvxor (select x #b0) (select y #b0))) + (z1 (bvxor (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvxor_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvxor (select x #b0) (select y #b0))) + (z1 (bvxor (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + + (define-fun vbvadd_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvadd (select x #b00) (select y #b00))) + (z1 (bvadd (select x #b01) (select y #b01))) + (z2 (bvadd (select x #b10) (select y #b10))) + (z3 (bvadd (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvadd_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvadd (select x #b00) (select y #b00))) + (z1 (bvadd (select x #b01) (select y #b01))) + (z2 (bvadd (select x #b10) (select y #b10))) + (z3 (bvadd (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvadd_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvadd (select x #b00) (select y #b00))) + (z1 (bvadd (select x #b01) (select y #b01))) + (z2 (bvadd (select x #b10) (select y #b10))) + (z3 (bvadd (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvadd_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvadd (select x #b00) (select y #b00))) + (z1 (bvadd (select x #b01) (select y #b01))) + (z2 (bvadd (select x #b10) (select y #b10))) + (z3 (bvadd (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvsub_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvsub (select x #b00) (select y #b00))) + (z1 (bvsub (select x #b01) (select y #b01))) + (z2 (bvsub (select x #b10) (select y #b10))) + (z3 (bvsub (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvsub_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvsub (select x #b00) (select y #b00))) + (z1 (bvsub (select x #b01) (select y #b01))) + (z2 (bvsub (select x #b10) (select y #b10))) + (z3 (bvsub (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvsub_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvsub (select x #b00) (select y #b00))) + (z1 (bvsub (select x #b01) (select y #b01))) + (z2 (bvsub (select x #b10) (select y #b10))) + (z3 (bvsub (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvsub_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvsub (select x #b00) (select y #b00))) + (z1 (bvsub (select x #b01) (select y #b01))) + (z2 (bvsub (select x #b10) (select y #b10))) + (z3 (bvsub (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvmul_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvmul (select x #b00) (select y #b00))) + (z1 (bvmul (select x #b01) (select y #b01))) + (z2 (bvmul (select x #b10) (select y #b10))) + (z3 (bvmul (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvmul_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvmul (select x #b00) (select y #b00))) + (z1 (bvmul (select x #b01) (select y #b01))) + (z2 (bvmul (select x #b10) (select y #b10))) + (z3 (bvmul (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvmul_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvmul (select x #b00) (select y #b00))) + (z1 (bvmul (select x #b01) (select y #b01))) + (z2 (bvmul (select x #b10) (select y #b10))) + (z3 (bvmul (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvmul_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvmul (select x #b00) (select y #b00))) + (z1 (bvmul (select x #b01) (select y #b01))) + (z2 (bvmul (select x #b10) (select y #b10))) + (z3 (bvmul (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvshl_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvshl (select x #b00) (select y #b00))) + (z1 (bvshl (select x #b01) (select y #b01))) + (z2 (bvshl (select x #b10) (select y #b10))) + (z3 (bvshl (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvshl_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvshl (select x #b00) (select y #b00))) + (z1 (bvshl (select x #b01) (select y #b01))) + (z2 (bvshl (select x #b10) (select y #b10))) + (z3 (bvshl (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvshl_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvshl (select x #b00) (select y #b00))) + (z1 (bvshl (select x #b01) (select y #b01))) + (z2 (bvshl (select x #b10) (select y #b10))) + (z3 (bvshl (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvshl_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvshl (select x #b00) (select y #b00))) + (z1 (bvshl (select x #b01) (select y #b01))) + (z2 (bvshl (select x #b10) (select y #b10))) + (z3 (bvshl (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvsdiv_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvsdiv (select x #b00) (select y #b00))) + (z1 (bvsdiv (select x #b01) (select y #b01))) + (z2 (bvsdiv (select x #b10) (select y #b10))) + (z3 (bvsdiv (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvsdiv_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvsdiv (select x #b00) (select y #b00))) + (z1 (bvsdiv (select x #b01) (select y #b01))) + (z2 (bvsdiv (select x #b10) (select y #b10))) + (z3 (bvsdiv (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvsdiv_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvsdiv (select x #b00) (select y #b00))) + (z1 (bvsdiv (select x #b01) (select y #b01))) + (z2 (bvsdiv (select x #b10) (select y #b10))) + (z3 (bvsdiv (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvsdiv_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvsdiv (select x #b00) (select y #b00))) + (z1 (bvsdiv (select x #b01) (select y #b01))) + (z2 (bvsdiv (select x #b10) (select y #b10))) + (z3 (bvsdiv (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvudiv_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvudiv (select x #b00) (select y #b00))) + (z1 (bvudiv (select x #b01) (select y #b01))) + (z2 (bvudiv (select x #b10) (select y #b10))) + (z3 (bvudiv (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvudiv_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvudiv (select x #b00) (select y #b00))) + (z1 (bvudiv (select x #b01) (select y #b01))) + (z2 (bvudiv (select x #b10) (select y #b10))) + (z3 (bvudiv (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvudiv_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvudiv (select x #b00) (select y #b00))) + (z1 (bvudiv (select x #b01) (select y #b01))) + (z2 (bvudiv (select x #b10) (select y #b10))) + (z3 (bvudiv (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvudiv_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvudiv (select x #b00) (select y #b00))) + (z1 (bvudiv (select x #b01) (select y #b01))) + (z2 (bvudiv (select x #b10) (select y #b10))) + (z3 (bvudiv (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvlshr_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvlshr (select x #b00) (select y #b00))) + (z1 (bvlshr (select x #b01) (select y #b01))) + (z2 (bvlshr (select x #b10) (select y #b10))) + (z3 (bvlshr (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvlshr_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvlshr (select x #b00) (select y #b00))) + (z1 (bvlshr (select x #b01) (select y #b01))) + (z2 (bvlshr (select x #b10) (select y #b10))) + (z3 (bvlshr (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvlshr_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvlshr (select x #b00) (select y #b00))) + (z1 (bvlshr (select x #b01) (select y #b01))) + (z2 (bvlshr (select x #b10) (select y #b10))) + (z3 (bvlshr (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvlshr_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvlshr (select x #b00) (select y #b00))) + (z1 (bvlshr (select x #b01) (select y #b01))) + (z2 (bvlshr (select x #b10) (select y #b10))) + (z3 (bvlshr (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvashr_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvashr (select x #b00) (select y #b00))) + (z1 (bvashr (select x #b01) (select y #b01))) + (z2 (bvashr (select x #b10) (select y #b10))) + (z3 (bvashr (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvashr_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvashr (select x #b00) (select y #b00))) + (z1 (bvashr (select x #b01) (select y #b01))) + (z2 (bvashr (select x #b10) (select y #b10))) + (z3 (bvashr (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvashr_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvashr (select x #b00) (select y #b00))) + (z1 (bvashr (select x #b01) (select y #b01))) + (z2 (bvashr (select x #b10) (select y #b10))) + (z3 (bvashr (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvashr_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvashr (select x #b00) (select y #b00))) + (z1 (bvashr (select x #b01) (select y #b01))) + (z2 (bvashr (select x #b10) (select y #b10))) + (z3 (bvashr (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvurem_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvurem (select x #b00) (select y #b00))) + (z1 (bvurem (select x #b01) (select y #b01))) + (z2 (bvurem (select x #b10) (select y #b10))) + (z3 (bvurem (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvurem_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvurem (select x #b00) (select y #b00))) + (z1 (bvurem (select x #b01) (select y #b01))) + (z2 (bvurem (select x #b10) (select y #b10))) + (z3 (bvurem (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvurem_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvurem (select x #b00) (select y #b00))) + (z1 (bvurem (select x #b01) (select y #b01))) + (z2 (bvurem (select x #b10) (select y #b10))) + (z3 (bvurem (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvurem_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvurem (select x #b00) (select y #b00))) + (z1 (bvurem (select x #b01) (select y #b01))) + (z2 (bvurem (select x #b10) (select y #b10))) + (z3 (bvurem (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvsrem_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvsrem (select x #b00) (select y #b00))) + (z1 (bvsrem (select x #b01) (select y #b01))) + (z2 (bvsrem (select x #b10) (select y #b10))) + (z3 (bvsrem (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvsrem_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvsrem (select x #b00) (select y #b00))) + (z1 (bvsrem (select x #b01) (select y #b01))) + (z2 (bvsrem (select x #b10) (select y #b10))) + (z3 (bvsrem (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvsrem_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvsrem (select x #b00) (select y #b00))) + (z1 (bvsrem (select x #b01) (select y #b01))) + (z2 (bvsrem (select x #b10) (select y #b10))) + (z3 (bvsrem (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvsrem_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvsrem (select x #b00) (select y #b00))) + (z1 (bvsrem (select x #b01) (select y #b01))) + (z2 (bvsrem (select x #b10) (select y #b10))) + (z3 (bvsrem (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvand_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvand (select x #b00) (select y #b00))) + (z1 (bvand (select x #b01) (select y #b01))) + (z2 (bvand (select x #b10) (select y #b10))) + (z3 (bvand (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvand_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvand (select x #b00) (select y #b00))) + (z1 (bvand (select x #b01) (select y #b01))) + (z2 (bvand (select x #b10) (select y #b10))) + (z3 (bvand (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvand_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvand (select x #b00) (select y #b00))) + (z1 (bvand (select x #b01) (select y #b01))) + (z2 (bvand (select x #b10) (select y #b10))) + (z3 (bvand (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvand_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvand (select x #b00) (select y #b00))) + (z1 (bvand (select x #b01) (select y #b01))) + (z2 (bvand (select x #b10) (select y #b10))) + (z3 (bvand (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvor_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvor (select x #b00) (select y #b00))) + (z1 (bvor (select x #b01) (select y #b01))) + (z2 (bvor (select x #b10) (select y #b10))) + (z3 (bvor (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvor_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvor (select x #b00) (select y #b00))) + (z1 (bvor (select x #b01) (select y #b01))) + (z2 (bvor (select x #b10) (select y #b10))) + (z3 (bvor (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvor_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvor (select x #b00) (select y #b00))) + (z1 (bvor (select x #b01) (select y #b01))) + (z2 (bvor (select x #b10) (select y #b10))) + (z3 (bvor (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvor_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvor (select x #b00) (select y #b00))) + (z1 (bvor (select x #b01) (select y #b01))) + (z2 (bvor (select x #b10) (select y #b10))) + (z3 (bvor (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvxor_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvxor (select x #b00) (select y #b00))) + (z1 (bvxor (select x #b01) (select y #b01))) + (z2 (bvxor (select x #b10) (select y #b10))) + (z3 (bvxor (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvxor_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvxor (select x #b00) (select y #b00))) + (z1 (bvxor (select x #b01) (select y #b01))) + (z2 (bvxor (select x #b10) (select y #b10))) + (z3 (bvxor (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvxor_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvxor (select x #b00) (select y #b00))) + (z1 (bvxor (select x #b01) (select y #b01))) + (z2 (bvxor (select x #b10) (select y #b10))) + (z3 (bvxor (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvxor_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvxor (select x #b00) (select y #b00))) + (z1 (bvxor (select x #b01) (select y #b01))) + (z2 (bvxor (select x #b10) (select y #b10))) + (z3 (bvxor (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvadd_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvadd (select x #b000) (select y #b000))) + (z1 (bvadd (select x #b001) (select y #b001))) + (z2 (bvadd (select x #b010) (select y #b010))) + (z3 (bvadd (select x #b011) (select y #b011))) + (z4 (bvadd (select x #b100) (select y #b100))) + (z5 (bvadd (select x #b101) (select y #b101))) + (z6 (bvadd (select x #b110) (select y #b110))) + (z7 (bvadd (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvadd_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvadd (select x #b000) (select y #b000))) + (z1 (bvadd (select x #b001) (select y #b001))) + (z2 (bvadd (select x #b010) (select y #b010))) + (z3 (bvadd (select x #b011) (select y #b011))) + (z4 (bvadd (select x #b100) (select y #b100))) + (z5 (bvadd (select x #b101) (select y #b101))) + (z6 (bvadd (select x #b110) (select y #b110))) + (z7 (bvadd (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvadd_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvadd (select x #b000) (select y #b000))) + (z1 (bvadd (select x #b001) (select y #b001))) + (z2 (bvadd (select x #b010) (select y #b010))) + (z3 (bvadd (select x #b011) (select y #b011))) + (z4 (bvadd (select x #b100) (select y #b100))) + (z5 (bvadd (select x #b101) (select y #b101))) + (z6 (bvadd (select x #b110) (select y #b110))) + (z7 (bvadd (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvadd_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvadd (select x #b000) (select y #b000))) + (z1 (bvadd (select x #b001) (select y #b001))) + (z2 (bvadd (select x #b010) (select y #b010))) + (z3 (bvadd (select x #b011) (select y #b011))) + (z4 (bvadd (select x #b100) (select y #b100))) + (z5 (bvadd (select x #b101) (select y #b101))) + (z6 (bvadd (select x #b110) (select y #b110))) + (z7 (bvadd (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsub_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvsub (select x #b000) (select y #b000))) + (z1 (bvsub (select x #b001) (select y #b001))) + (z2 (bvsub (select x #b010) (select y #b010))) + (z3 (bvsub (select x #b011) (select y #b011))) + (z4 (bvsub (select x #b100) (select y #b100))) + (z5 (bvsub (select x #b101) (select y #b101))) + (z6 (bvsub (select x #b110) (select y #b110))) + (z7 (bvsub (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsub_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvsub (select x #b000) (select y #b000))) + (z1 (bvsub (select x #b001) (select y #b001))) + (z2 (bvsub (select x #b010) (select y #b010))) + (z3 (bvsub (select x #b011) (select y #b011))) + (z4 (bvsub (select x #b100) (select y #b100))) + (z5 (bvsub (select x #b101) (select y #b101))) + (z6 (bvsub (select x #b110) (select y #b110))) + (z7 (bvsub (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsub_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvsub (select x #b000) (select y #b000))) + (z1 (bvsub (select x #b001) (select y #b001))) + (z2 (bvsub (select x #b010) (select y #b010))) + (z3 (bvsub (select x #b011) (select y #b011))) + (z4 (bvsub (select x #b100) (select y #b100))) + (z5 (bvsub (select x #b101) (select y #b101))) + (z6 (bvsub (select x #b110) (select y #b110))) + (z7 (bvsub (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsub_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvsub (select x #b000) (select y #b000))) + (z1 (bvsub (select x #b001) (select y #b001))) + (z2 (bvsub (select x #b010) (select y #b010))) + (z3 (bvsub (select x #b011) (select y #b011))) + (z4 (bvsub (select x #b100) (select y #b100))) + (z5 (bvsub (select x #b101) (select y #b101))) + (z6 (bvsub (select x #b110) (select y #b110))) + (z7 (bvsub (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvmul_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvmul (select x #b000) (select y #b000))) + (z1 (bvmul (select x #b001) (select y #b001))) + (z2 (bvmul (select x #b010) (select y #b010))) + (z3 (bvmul (select x #b011) (select y #b011))) + (z4 (bvmul (select x #b100) (select y #b100))) + (z5 (bvmul (select x #b101) (select y #b101))) + (z6 (bvmul (select x #b110) (select y #b110))) + (z7 (bvmul (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvmul_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvmul (select x #b000) (select y #b000))) + (z1 (bvmul (select x #b001) (select y #b001))) + (z2 (bvmul (select x #b010) (select y #b010))) + (z3 (bvmul (select x #b011) (select y #b011))) + (z4 (bvmul (select x #b100) (select y #b100))) + (z5 (bvmul (select x #b101) (select y #b101))) + (z6 (bvmul (select x #b110) (select y #b110))) + (z7 (bvmul (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvmul_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvmul (select x #b000) (select y #b000))) + (z1 (bvmul (select x #b001) (select y #b001))) + (z2 (bvmul (select x #b010) (select y #b010))) + (z3 (bvmul (select x #b011) (select y #b011))) + (z4 (bvmul (select x #b100) (select y #b100))) + (z5 (bvmul (select x #b101) (select y #b101))) + (z6 (bvmul (select x #b110) (select y #b110))) + (z7 (bvmul (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvmul_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvmul (select x #b000) (select y #b000))) + (z1 (bvmul (select x #b001) (select y #b001))) + (z2 (bvmul (select x #b010) (select y #b010))) + (z3 (bvmul (select x #b011) (select y #b011))) + (z4 (bvmul (select x #b100) (select y #b100))) + (z5 (bvmul (select x #b101) (select y #b101))) + (z6 (bvmul (select x #b110) (select y #b110))) + (z7 (bvmul (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvshl_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvshl (select x #b000) (select y #b000))) + (z1 (bvshl (select x #b001) (select y #b001))) + (z2 (bvshl (select x #b010) (select y #b010))) + (z3 (bvshl (select x #b011) (select y #b011))) + (z4 (bvshl (select x #b100) (select y #b100))) + (z5 (bvshl (select x #b101) (select y #b101))) + (z6 (bvshl (select x #b110) (select y #b110))) + (z7 (bvshl (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvshl_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvshl (select x #b000) (select y #b000))) + (z1 (bvshl (select x #b001) (select y #b001))) + (z2 (bvshl (select x #b010) (select y #b010))) + (z3 (bvshl (select x #b011) (select y #b011))) + (z4 (bvshl (select x #b100) (select y #b100))) + (z5 (bvshl (select x #b101) (select y #b101))) + (z6 (bvshl (select x #b110) (select y #b110))) + (z7 (bvshl (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvshl_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvshl (select x #b000) (select y #b000))) + (z1 (bvshl (select x #b001) (select y #b001))) + (z2 (bvshl (select x #b010) (select y #b010))) + (z3 (bvshl (select x #b011) (select y #b011))) + (z4 (bvshl (select x #b100) (select y #b100))) + (z5 (bvshl (select x #b101) (select y #b101))) + (z6 (bvshl (select x #b110) (select y #b110))) + (z7 (bvshl (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvshl_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvshl (select x #b000) (select y #b000))) + (z1 (bvshl (select x #b001) (select y #b001))) + (z2 (bvshl (select x #b010) (select y #b010))) + (z3 (bvshl (select x #b011) (select y #b011))) + (z4 (bvshl (select x #b100) (select y #b100))) + (z5 (bvshl (select x #b101) (select y #b101))) + (z6 (bvshl (select x #b110) (select y #b110))) + (z7 (bvshl (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsdiv_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvsdiv (select x #b000) (select y #b000))) + (z1 (bvsdiv (select x #b001) (select y #b001))) + (z2 (bvsdiv (select x #b010) (select y #b010))) + (z3 (bvsdiv (select x #b011) (select y #b011))) + (z4 (bvsdiv (select x #b100) (select y #b100))) + (z5 (bvsdiv (select x #b101) (select y #b101))) + (z6 (bvsdiv (select x #b110) (select y #b110))) + (z7 (bvsdiv (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsdiv_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvsdiv (select x #b000) (select y #b000))) + (z1 (bvsdiv (select x #b001) (select y #b001))) + (z2 (bvsdiv (select x #b010) (select y #b010))) + (z3 (bvsdiv (select x #b011) (select y #b011))) + (z4 (bvsdiv (select x #b100) (select y #b100))) + (z5 (bvsdiv (select x #b101) (select y #b101))) + (z6 (bvsdiv (select x #b110) (select y #b110))) + (z7 (bvsdiv (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsdiv_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvsdiv (select x #b000) (select y #b000))) + (z1 (bvsdiv (select x #b001) (select y #b001))) + (z2 (bvsdiv (select x #b010) (select y #b010))) + (z3 (bvsdiv (select x #b011) (select y #b011))) + (z4 (bvsdiv (select x #b100) (select y #b100))) + (z5 (bvsdiv (select x #b101) (select y #b101))) + (z6 (bvsdiv (select x #b110) (select y #b110))) + (z7 (bvsdiv (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsdiv_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvsdiv (select x #b000) (select y #b000))) + (z1 (bvsdiv (select x #b001) (select y #b001))) + (z2 (bvsdiv (select x #b010) (select y #b010))) + (z3 (bvsdiv (select x #b011) (select y #b011))) + (z4 (bvsdiv (select x #b100) (select y #b100))) + (z5 (bvsdiv (select x #b101) (select y #b101))) + (z6 (bvsdiv (select x #b110) (select y #b110))) + (z7 (bvsdiv (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvudiv_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvudiv (select x #b000) (select y #b000))) + (z1 (bvudiv (select x #b001) (select y #b001))) + (z2 (bvudiv (select x #b010) (select y #b010))) + (z3 (bvudiv (select x #b011) (select y #b011))) + (z4 (bvudiv (select x #b100) (select y #b100))) + (z5 (bvudiv (select x #b101) (select y #b101))) + (z6 (bvudiv (select x #b110) (select y #b110))) + (z7 (bvudiv (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvudiv_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvudiv (select x #b000) (select y #b000))) + (z1 (bvudiv (select x #b001) (select y #b001))) + (z2 (bvudiv (select x #b010) (select y #b010))) + (z3 (bvudiv (select x #b011) (select y #b011))) + (z4 (bvudiv (select x #b100) (select y #b100))) + (z5 (bvudiv (select x #b101) (select y #b101))) + (z6 (bvudiv (select x #b110) (select y #b110))) + (z7 (bvudiv (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvudiv_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvudiv (select x #b000) (select y #b000))) + (z1 (bvudiv (select x #b001) (select y #b001))) + (z2 (bvudiv (select x #b010) (select y #b010))) + (z3 (bvudiv (select x #b011) (select y #b011))) + (z4 (bvudiv (select x #b100) (select y #b100))) + (z5 (bvudiv (select x #b101) (select y #b101))) + (z6 (bvudiv (select x #b110) (select y #b110))) + (z7 (bvudiv (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvudiv_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvudiv (select x #b000) (select y #b000))) + (z1 (bvudiv (select x #b001) (select y #b001))) + (z2 (bvudiv (select x #b010) (select y #b010))) + (z3 (bvudiv (select x #b011) (select y #b011))) + (z4 (bvudiv (select x #b100) (select y #b100))) + (z5 (bvudiv (select x #b101) (select y #b101))) + (z6 (bvudiv (select x #b110) (select y #b110))) + (z7 (bvudiv (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvlshr_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvlshr (select x #b000) (select y #b000))) + (z1 (bvlshr (select x #b001) (select y #b001))) + (z2 (bvlshr (select x #b010) (select y #b010))) + (z3 (bvlshr (select x #b011) (select y #b011))) + (z4 (bvlshr (select x #b100) (select y #b100))) + (z5 (bvlshr (select x #b101) (select y #b101))) + (z6 (bvlshr (select x #b110) (select y #b110))) + (z7 (bvlshr (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvlshr_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvlshr (select x #b000) (select y #b000))) + (z1 (bvlshr (select x #b001) (select y #b001))) + (z2 (bvlshr (select x #b010) (select y #b010))) + (z3 (bvlshr (select x #b011) (select y #b011))) + (z4 (bvlshr (select x #b100) (select y #b100))) + (z5 (bvlshr (select x #b101) (select y #b101))) + (z6 (bvlshr (select x #b110) (select y #b110))) + (z7 (bvlshr (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvlshr_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvlshr (select x #b000) (select y #b000))) + (z1 (bvlshr (select x #b001) (select y #b001))) + (z2 (bvlshr (select x #b010) (select y #b010))) + (z3 (bvlshr (select x #b011) (select y #b011))) + (z4 (bvlshr (select x #b100) (select y #b100))) + (z5 (bvlshr (select x #b101) (select y #b101))) + (z6 (bvlshr (select x #b110) (select y #b110))) + (z7 (bvlshr (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvlshr_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvlshr (select x #b000) (select y #b000))) + (z1 (bvlshr (select x #b001) (select y #b001))) + (z2 (bvlshr (select x #b010) (select y #b010))) + (z3 (bvlshr (select x #b011) (select y #b011))) + (z4 (bvlshr (select x #b100) (select y #b100))) + (z5 (bvlshr (select x #b101) (select y #b101))) + (z6 (bvlshr (select x #b110) (select y #b110))) + (z7 (bvlshr (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvashr_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvashr (select x #b000) (select y #b000))) + (z1 (bvashr (select x #b001) (select y #b001))) + (z2 (bvashr (select x #b010) (select y #b010))) + (z3 (bvashr (select x #b011) (select y #b011))) + (z4 (bvashr (select x #b100) (select y #b100))) + (z5 (bvashr (select x #b101) (select y #b101))) + (z6 (bvashr (select x #b110) (select y #b110))) + (z7 (bvashr (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvashr_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvashr (select x #b000) (select y #b000))) + (z1 (bvashr (select x #b001) (select y #b001))) + (z2 (bvashr (select x #b010) (select y #b010))) + (z3 (bvashr (select x #b011) (select y #b011))) + (z4 (bvashr (select x #b100) (select y #b100))) + (z5 (bvashr (select x #b101) (select y #b101))) + (z6 (bvashr (select x #b110) (select y #b110))) + (z7 (bvashr (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvashr_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvashr (select x #b000) (select y #b000))) + (z1 (bvashr (select x #b001) (select y #b001))) + (z2 (bvashr (select x #b010) (select y #b010))) + (z3 (bvashr (select x #b011) (select y #b011))) + (z4 (bvashr (select x #b100) (select y #b100))) + (z5 (bvashr (select x #b101) (select y #b101))) + (z6 (bvashr (select x #b110) (select y #b110))) + (z7 (bvashr (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvashr_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvashr (select x #b000) (select y #b000))) + (z1 (bvashr (select x #b001) (select y #b001))) + (z2 (bvashr (select x #b010) (select y #b010))) + (z3 (bvashr (select x #b011) (select y #b011))) + (z4 (bvashr (select x #b100) (select y #b100))) + (z5 (bvashr (select x #b101) (select y #b101))) + (z6 (bvashr (select x #b110) (select y #b110))) + (z7 (bvashr (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvurem_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvurem (select x #b000) (select y #b000))) + (z1 (bvurem (select x #b001) (select y #b001))) + (z2 (bvurem (select x #b010) (select y #b010))) + (z3 (bvurem (select x #b011) (select y #b011))) + (z4 (bvurem (select x #b100) (select y #b100))) + (z5 (bvurem (select x #b101) (select y #b101))) + (z6 (bvurem (select x #b110) (select y #b110))) + (z7 (bvurem (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvurem_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvurem (select x #b000) (select y #b000))) + (z1 (bvurem (select x #b001) (select y #b001))) + (z2 (bvurem (select x #b010) (select y #b010))) + (z3 (bvurem (select x #b011) (select y #b011))) + (z4 (bvurem (select x #b100) (select y #b100))) + (z5 (bvurem (select x #b101) (select y #b101))) + (z6 (bvurem (select x #b110) (select y #b110))) + (z7 (bvurem (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvurem_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvurem (select x #b000) (select y #b000))) + (z1 (bvurem (select x #b001) (select y #b001))) + (z2 (bvurem (select x #b010) (select y #b010))) + (z3 (bvurem (select x #b011) (select y #b011))) + (z4 (bvurem (select x #b100) (select y #b100))) + (z5 (bvurem (select x #b101) (select y #b101))) + (z6 (bvurem (select x #b110) (select y #b110))) + (z7 (bvurem (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvurem_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvurem (select x #b000) (select y #b000))) + (z1 (bvurem (select x #b001) (select y #b001))) + (z2 (bvurem (select x #b010) (select y #b010))) + (z3 (bvurem (select x #b011) (select y #b011))) + (z4 (bvurem (select x #b100) (select y #b100))) + (z5 (bvurem (select x #b101) (select y #b101))) + (z6 (bvurem (select x #b110) (select y #b110))) + (z7 (bvurem (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsrem_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvsrem (select x #b000) (select y #b000))) + (z1 (bvsrem (select x #b001) (select y #b001))) + (z2 (bvsrem (select x #b010) (select y #b010))) + (z3 (bvsrem (select x #b011) (select y #b011))) + (z4 (bvsrem (select x #b100) (select y #b100))) + (z5 (bvsrem (select x #b101) (select y #b101))) + (z6 (bvsrem (select x #b110) (select y #b110))) + (z7 (bvsrem (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsrem_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvsrem (select x #b000) (select y #b000))) + (z1 (bvsrem (select x #b001) (select y #b001))) + (z2 (bvsrem (select x #b010) (select y #b010))) + (z3 (bvsrem (select x #b011) (select y #b011))) + (z4 (bvsrem (select x #b100) (select y #b100))) + (z5 (bvsrem (select x #b101) (select y #b101))) + (z6 (bvsrem (select x #b110) (select y #b110))) + (z7 (bvsrem (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsrem_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvsrem (select x #b000) (select y #b000))) + (z1 (bvsrem (select x #b001) (select y #b001))) + (z2 (bvsrem (select x #b010) (select y #b010))) + (z3 (bvsrem (select x #b011) (select y #b011))) + (z4 (bvsrem (select x #b100) (select y #b100))) + (z5 (bvsrem (select x #b101) (select y #b101))) + (z6 (bvsrem (select x #b110) (select y #b110))) + (z7 (bvsrem (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsrem_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvsrem (select x #b000) (select y #b000))) + (z1 (bvsrem (select x #b001) (select y #b001))) + (z2 (bvsrem (select x #b010) (select y #b010))) + (z3 (bvsrem (select x #b011) (select y #b011))) + (z4 (bvsrem (select x #b100) (select y #b100))) + (z5 (bvsrem (select x #b101) (select y #b101))) + (z6 (bvsrem (select x #b110) (select y #b110))) + (z7 (bvsrem (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvand_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvand (select x #b000) (select y #b000))) + (z1 (bvand (select x #b001) (select y #b001))) + (z2 (bvand (select x #b010) (select y #b010))) + (z3 (bvand (select x #b011) (select y #b011))) + (z4 (bvand (select x #b100) (select y #b100))) + (z5 (bvand (select x #b101) (select y #b101))) + (z6 (bvand (select x #b110) (select y #b110))) + (z7 (bvand (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvand_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvand (select x #b000) (select y #b000))) + (z1 (bvand (select x #b001) (select y #b001))) + (z2 (bvand (select x #b010) (select y #b010))) + (z3 (bvand (select x #b011) (select y #b011))) + (z4 (bvand (select x #b100) (select y #b100))) + (z5 (bvand (select x #b101) (select y #b101))) + (z6 (bvand (select x #b110) (select y #b110))) + (z7 (bvand (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvand_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvand (select x #b000) (select y #b000))) + (z1 (bvand (select x #b001) (select y #b001))) + (z2 (bvand (select x #b010) (select y #b010))) + (z3 (bvand (select x #b011) (select y #b011))) + (z4 (bvand (select x #b100) (select y #b100))) + (z5 (bvand (select x #b101) (select y #b101))) + (z6 (bvand (select x #b110) (select y #b110))) + (z7 (bvand (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvand_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvand (select x #b000) (select y #b000))) + (z1 (bvand (select x #b001) (select y #b001))) + (z2 (bvand (select x #b010) (select y #b010))) + (z3 (bvand (select x #b011) (select y #b011))) + (z4 (bvand (select x #b100) (select y #b100))) + (z5 (bvand (select x #b101) (select y #b101))) + (z6 (bvand (select x #b110) (select y #b110))) + (z7 (bvand (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvor_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvor (select x #b000) (select y #b000))) + (z1 (bvor (select x #b001) (select y #b001))) + (z2 (bvor (select x #b010) (select y #b010))) + (z3 (bvor (select x #b011) (select y #b011))) + (z4 (bvor (select x #b100) (select y #b100))) + (z5 (bvor (select x #b101) (select y #b101))) + (z6 (bvor (select x #b110) (select y #b110))) + (z7 (bvor (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvor_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvor (select x #b000) (select y #b000))) + (z1 (bvor (select x #b001) (select y #b001))) + (z2 (bvor (select x #b010) (select y #b010))) + (z3 (bvor (select x #b011) (select y #b011))) + (z4 (bvor (select x #b100) (select y #b100))) + (z5 (bvor (select x #b101) (select y #b101))) + (z6 (bvor (select x #b110) (select y #b110))) + (z7 (bvor (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvor_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvor (select x #b000) (select y #b000))) + (z1 (bvor (select x #b001) (select y #b001))) + (z2 (bvor (select x #b010) (select y #b010))) + (z3 (bvor (select x #b011) (select y #b011))) + (z4 (bvor (select x #b100) (select y #b100))) + (z5 (bvor (select x #b101) (select y #b101))) + (z6 (bvor (select x #b110) (select y #b110))) + (z7 (bvor (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvor_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvor (select x #b000) (select y #b000))) + (z1 (bvor (select x #b001) (select y #b001))) + (z2 (bvor (select x #b010) (select y #b010))) + (z3 (bvor (select x #b011) (select y #b011))) + (z4 (bvor (select x #b100) (select y #b100))) + (z5 (bvor (select x #b101) (select y #b101))) + (z6 (bvor (select x #b110) (select y #b110))) + (z7 (bvor (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvxor_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvxor (select x #b000) (select y #b000))) + (z1 (bvxor (select x #b001) (select y #b001))) + (z2 (bvxor (select x #b010) (select y #b010))) + (z3 (bvxor (select x #b011) (select y #b011))) + (z4 (bvxor (select x #b100) (select y #b100))) + (z5 (bvxor (select x #b101) (select y #b101))) + (z6 (bvxor (select x #b110) (select y #b110))) + (z7 (bvxor (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvxor_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvxor (select x #b000) (select y #b000))) + (z1 (bvxor (select x #b001) (select y #b001))) + (z2 (bvxor (select x #b010) (select y #b010))) + (z3 (bvxor (select x #b011) (select y #b011))) + (z4 (bvxor (select x #b100) (select y #b100))) + (z5 (bvxor (select x #b101) (select y #b101))) + (z6 (bvxor (select x #b110) (select y #b110))) + (z7 (bvxor (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvxor_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvxor (select x #b000) (select y #b000))) + (z1 (bvxor (select x #b001) (select y #b001))) + (z2 (bvxor (select x #b010) (select y #b010))) + (z3 (bvxor (select x #b011) (select y #b011))) + (z4 (bvxor (select x #b100) (select y #b100))) + (z5 (bvxor (select x #b101) (select y #b101))) + (z6 (bvxor (select x #b110) (select y #b110))) + (z7 (bvxor (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvxor_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvxor (select x #b000) (select y #b000))) + (z1 (bvxor (select x #b001) (select y #b001))) + (z2 (bvxor (select x #b010) (select y #b010))) + (z3 (bvxor (select x #b011) (select y #b011))) + (z4 (bvxor (select x #b100) (select y #b100))) + (z5 (bvxor (select x #b101) (select y #b101))) + (z6 (bvxor (select x #b110) (select y #b110))) + (z7 (bvxor (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + + +;; conversion to and from (Bitvector 64) +;; this assumes little endian representation +(define-fun cast_vector_1_32_to_bits ((x vector_1_32)) (_ BitVec 64) + (concat (select x #b1) (select x #b0))) + +(define-fun cast_bits_to_vector_1_32 ((w (_ BitVec 64))) vector_1_32 + (let ((z0 ((_ extract 31 0) w)) + (z1 ((_ extract 63 32) w))) + (vmake_1_32 z0 z1))) + +;; conversion to and from (Bitvector 128) +;; this assumes little endian representation +(define-fun cast_vector_2_32_to_bits ((x vector_2_32)) (_ BitVec 128) + (concat (concat (concat (select x #b11) (select x #b10)) (select x #b01)) (select x #b00))) + +(define-fun cast_bits_to_vector_2_32 ((w (_ BitVec 128))) vector_2_32 + (let ((z0 ((_ extract 31 0) w)) + (z1 ((_ extract 63 32) w)) + (z2 ((_ extract 95 64) w)) + (z3 ((_ extract 127 96) w))) + (vmake_2_32 z0 z1 z2 z3))) + +;; conversion to and from (Bitvector 128) to vectors 2 x i64 +(define-fun cast_vector_1_64_to_bits ((x vector_1_64)) (_ BitVec 128) + (concat (select x #b1) (select x #b0))) + +(define-fun cast_bits_to_vector_1_64 ((w (_ BitVec 128))) vector_1_64 + (let ((z0 ((_ extract 63 0) w)) + (z1 ((_ extract 127 64) w))) + (vmake_1_64 z0 z1))) + + + + +;; end of prelude + + +;; @.str [16 x i8] = c"lhs == rhs: %d\0A\00" +(declare-fun |-@.str| () (_ BitVec 64)) +;; @.str1 [22 x i8] = c"lhs = %d != rhs = %d\0A\00" +(declare-fun |-@.str1| () (_ BitVec 64)) +(declare-fun -@lhs () (_ BitVec 64)) +(declare-fun -@rhs () (_ BitVec 64)) +(declare-fun -@main () (_ BitVec 64)) +(declare-fun -@atoi () (_ BitVec 64)) +(declare-fun -@printf () (_ BitVec 64)) + + +;; Function: |-@lhs| +;; (i32 %a, i32 %b) +(declare-fun memory1 () Mem) +(define-fun rsp1 () (_ BitVec 64) (_ bv0 64)) +(declare-fun |%a-@lhs| () (_ BitVec 32)) +(declare-fun |%b-@lhs| () (_ BitVec 32)) + +;; BLOCK %0 with index 0 and rank = 1 +;; Predecessors: +;; |-@lhs_block_0_entry_condition| +(define-fun |-@lhs_block_0_entry_condition| () Bool true) +;; %1 = insertelement <2 x i32> undef, i32 %a, i32 0 +(define-fun |%1-@lhs| () (Array (_ BitVec 1) (_ BitVec 32)) (store vzero_1_32 ((_ extract 0 0) (_ bv0 32)) |%a-@lhs|)) +;; %2 = insertelement <2 x i32> %1, i32 %b, i32 1 +(define-fun |%2-@lhs| () (Array (_ BitVec 1) (_ BitVec 32)) (store |%1-@lhs| ((_ extract 0 0) (_ bv1 32)) |%b-@lhs|)) +;; %3 = shufflevector <2 x i32> %2, <2 x i32> undef, <2 x i32> +(define-fun |%3-@lhs| () (Array (_ BitVec 1) (_ BitVec 32)) +(let ((x0 vundef_1_32)) +(let ((x1 (store x0 ((_ extract 0 0) (_ bv0 32)) (select |%2-@lhs| ((_ extract 0 0) (_ bv1 32)))))) + (let ((x2 (store x1 ((_ extract 0 0) (_ bv1 32)) (select |%2-@lhs| ((_ extract 0 0) (_ bv0 32)))))) + x2)))) +;; %4 = shufflevector <2 x i32> %3, <2 x i32> undef, <2 x i32> +(define-fun |%4-@lhs| () (Array (_ BitVec 1) (_ BitVec 32)) +(let ((x0 vundef_1_32)) +(let ((x1 (store x0 ((_ extract 0 0) (_ bv0 32)) (select |%3-@lhs| ((_ extract 0 0) (_ bv1 32)))))) + (let ((x2 (store x1 ((_ extract 0 0) (_ bv1 32)) (select |%3-@lhs| ((_ extract 0 0) (_ bv0 32)))))) + x2)))) +;; %5 = extractelement <2 x i32> %4, i32 0 +(define-fun |%5-@lhs| () (_ BitVec 32) (select |%4-@lhs| ((_ extract 0 0) (_ bv0 32)))) +;; ret i32 %5 +;; No backward arrows + + +(define-fun |-@lhs_result| () (_ BitVec 32) |%5-@lhs|) + +;; Function: |-@rhs| +;; (i32 %a, i32 %b) +(declare-fun memory2 () Mem) +(define-fun rsp2 () (_ BitVec 64) (_ bv0 64)) +(declare-fun |%a-@rhs| () (_ BitVec 32)) +(declare-fun |%b-@rhs| () (_ BitVec 32)) + +;; BLOCK %0 with index 0 and rank = 1 +;; Predecessors: +;; |-@rhs_block_0_entry_condition| +(define-fun |-@rhs_block_0_entry_condition| () Bool true) +;; %1 = insertelement <2 x i32> undef, i32 %a, i32 0 +(define-fun |%1-@rhs| () (Array (_ BitVec 1) (_ BitVec 32)) (store vzero_1_32 ((_ extract 0 0) (_ bv0 32)) |%a-@rhs|)) +;; %2 = insertelement <2 x i32> %1, i32 %b, i32 1 +(define-fun |%2-@rhs| () (Array (_ BitVec 1) (_ BitVec 32)) (store |%1-@rhs| ((_ extract 0 0) (_ bv1 32)) |%b-@rhs|)) +;; %3 = extractelement <2 x i32> %2, i32 0 +(define-fun |%3-@rhs| () (_ BitVec 32) (select |%2-@rhs| ((_ extract 0 0) (_ bv0 32)))) +;; ret i32 %3 +;; No backward arrows + + +(define-fun |-@rhs_result| () (_ BitVec 32) |%3-@rhs|) + +;; Function: |-@main| +;; (i32 %argc, i8** %argv) +(declare-fun memory3 () Mem) +(define-fun rsp3 () (_ BitVec 64) (_ bv0 64)) +(declare-fun |%argc-@main| () (_ BitVec 32)) +(declare-fun |%argv-@main| () (_ BitVec 64)) + +;; BLOCK %0 with index 0 and rank = 1 +;; Predecessors: +;; |-@main_block_0_entry_condition| +(define-fun |-@main_block_0_entry_condition| () Bool true) +;; %1 = alloca i32, align 4 +(define-fun rsp4 () Address (bvsub rsp3 (_ bv4 64))) +(define-fun |%1-@main| () (_ BitVec 64) rsp4) +;; %2 = alloca i32, align 4 +(define-fun rsp5 () Address (bvsub rsp4 (_ bv4 64))) +(define-fun |%2-@main| () (_ BitVec 64) rsp5) +;; %3 = alloca i8**, align 8 +(define-fun rsp6 () Address (bvsub rsp5 (_ bv8 64))) +(define-fun |%3-@main| () (_ BitVec 64) rsp6) +;; %a = alloca i32, align 4 +(define-fun rsp7 () Address (bvsub rsp6 (_ bv4 64))) +(define-fun |%a-@main| () (_ BitVec 64) rsp7) +;; %b = alloca i32, align 4 +(define-fun rsp8 () Address (bvsub rsp7 (_ bv4 64))) +(define-fun |%b-@main| () (_ BitVec 64) rsp8) +;; %lhs = alloca i32, align 4 +(define-fun rsp9 () Address (bvsub rsp8 (_ bv4 64))) +(define-fun |%lhs-@main| () (_ BitVec 64) rsp9) +;; %rhs = alloca i32, align 4 +(define-fun rsp10 () Address (bvsub rsp9 (_ bv4 64))) +(define-fun |%rhs-@main| () (_ BitVec 64) rsp10) +;; store i32 0, i32* %1 +(define-fun memory4 () Mem (write32 memory3 |%1-@main| (_ bv0 32))) +;; store i32 %argc, i32* %2, align 4 +(define-fun memory5 () Mem (write32 memory4 |%2-@main| |%argc-@main|)) +;; store i8** %argv, i8*** %3, align 8 +(define-fun memory6 () Mem (write64 memory5 |%3-@main| |%argv-@main|)) +;; %4 = load i32* %2, align 4 +(define-fun |%4-@main| () (_ BitVec 32) (read32 memory6 |%2-@main|)) +;; %5 = icmp eq i32 %4, 3 +(define-fun |%5-@main| () Bool (= |%4-@main| (_ bv3 32))) +;; br i1 %5, label %6, label %32 +;; No backward arrows + +;; BLOCK %6 with index 1 and rank = 2 +;; Predecessors: %0 +;; |-@main_block_1_entry_condition| +(define-fun |-@main_block_1_entry_condition| () Bool + (and |-@main_block_0_entry_condition| |%5-@main|) +) +;;Memory PHI +(define-fun memory7 () Mem memory6) +;; %7 = load i8*** %3, align 8 +(define-fun |%7-@main| () (_ BitVec 64) (read64 memory7 |%3-@main|)) +;; %8 = getelementptr inbounds i8** %7, i64 1 +(define-fun |%8-@main| () (_ BitVec 64) (bvadd |%7-@main| (_ bv8 64))) +;; %9 = load i8** %8, align 8 +(define-fun |%9-@main| () (_ BitVec 64) (read64 memory7 |%8-@main|)) +;; %10 = call i32 @atoi(i8* %9) +(declare-fun |%10-@main| () (_ BitVec 32)) +;; store i32 %10, i32* %a, align 4 +(define-fun memory8 () Mem (write32 memory7 |%a-@main| |%10-@main|)) +;; %11 = load i8*** %3, align 8 +(define-fun |%11-@main| () (_ BitVec 64) (read64 memory8 |%3-@main|)) +;; %12 = getelementptr inbounds i8** %11, i64 2 +(define-fun |%12-@main| () (_ BitVec 64) (bvadd |%11-@main| (_ bv16 64))) +;; %13 = load i8** %12, align 8 +(define-fun |%13-@main| () (_ BitVec 64) (read64 memory8 |%12-@main|)) +;; %14 = call i32 @atoi(i8* %13) +(declare-fun |%14-@main| () (_ BitVec 32)) +;; store i32 %14, i32* %b, align 4 +(define-fun memory9 () Mem (write32 memory8 |%b-@main| |%14-@main|)) +;; %15 = load i32* %a, align 4 +(define-fun |%15-@main| () (_ BitVec 32) (read32 memory9 |%a-@main|)) +;; %16 = load i32* %b, align 4 +(define-fun |%16-@main| () (_ BitVec 32) (read32 memory9 |%b-@main|)) +;; %17 = call i32 @lhs(i32 %15, i32 %16) +(declare-fun |%17-@main| () (_ BitVec 32)) +;; store i32 %17, i32* %lhs, align 4 +(define-fun memory10 () Mem (write32 memory9 |%lhs-@main| |%17-@main|)) +;; %18 = load i32* %a, align 4 +(define-fun |%18-@main| () (_ BitVec 32) (read32 memory10 |%a-@main|)) +;; %19 = load i32* %b, align 4 +(define-fun |%19-@main| () (_ BitVec 32) (read32 memory10 |%b-@main|)) +;; %20 = call i32 @rhs(i32 %18, i32 %19) +(declare-fun |%20-@main| () (_ BitVec 32)) +;; store i32 %20, i32* %rhs, align 4 +(define-fun memory11 () Mem (write32 memory10 |%rhs-@main| |%20-@main|)) +;; %21 = load i32* %lhs, align 4 +(define-fun |%21-@main| () (_ BitVec 32) (read32 memory11 |%lhs-@main|)) +;; %22 = load i32* %rhs, align 4 +(define-fun |%22-@main| () (_ BitVec 32) (read32 memory11 |%rhs-@main|)) +;; %23 = icmp eq i32 %21, %22 +(define-fun |%23-@main| () Bool (= |%21-@main| |%22-@main|)) +;; br i1 %23, label %24, label %27 +;; No backward arrows + +;; BLOCK %24 with index 2 and rank = 3 +;; Predecessors: %6 +;; |-@main_block_2_entry_condition| +(define-fun |-@main_block_2_entry_condition| () Bool + (and |-@main_block_1_entry_condition| |%23-@main|) +) +;;Memory PHI +(define-fun memory12 () Mem memory11) +;; %25 = load i32* %lhs, align 4 +(define-fun |%25-@main| () (_ BitVec 32) (read32 memory12 |%lhs-@main|)) +;; %26 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([16 x i8]* @.str, i32 0, i32 0), i32 %25) +(declare-fun |%26-@main| () (_ BitVec 32)) +;; br label %31 +;; No backward arrows + +;; BLOCK %27 with index 3 and rank = 3 +;; Predecessors: %6 +;; |-@main_block_3_entry_condition| +(define-fun |-@main_block_3_entry_condition| () Bool + (and |-@main_block_1_entry_condition| (not |%23-@main|)) +) +;;Memory PHI +(define-fun memory13 () Mem memory11) +;; %28 = load i32* %lhs, align 4 +(define-fun |%28-@main| () (_ BitVec 32) (read32 memory13 |%lhs-@main|)) +;; %29 = load i32* %rhs, align 4 +(define-fun |%29-@main| () (_ BitVec 32) (read32 memory13 |%rhs-@main|)) +;; %30 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([22 x i8]* @.str1, i32 0, i32 0), i32 %28, i32 %29) +(declare-fun |%30-@main| () (_ BitVec 32)) +;; br label %31 +;; No backward arrows + +;; BLOCK %31 with index 4 and rank = 4 +;; Predecessors: %27 %24 +;; |-@main_block_4_entry_condition| +(define-fun |-@main_block_4_entry_condition| () Bool + (or + |-@main_block_3_entry_condition| + |-@main_block_2_entry_condition| + ) +) +;;Memory PHI +(define-fun memory14 () Mem + (ite |-@main_block_3_entry_condition| memory13 memory12 + )) +;; br label %32 +;; No backward arrows + +;; BLOCK %32 with index 5 and rank = 5 +;; Predecessors: %31 %0 +;; |-@main_block_5_entry_condition| +(define-fun |-@main_block_5_entry_condition| () Bool + (or + |-@main_block_4_entry_condition| + (and |-@main_block_0_entry_condition| (not |%5-@main|)) + ) +) +;;Memory PHI +(define-fun memory15 () Mem + (ite |-@main_block_4_entry_condition| memory14 memory6 + )) +;; ret i32 0 +;; No backward arrows + + +(define-fun |-@main_result| () (_ BitVec 32) (_ bv0 32)) + +;; Function: |-@atoi| +;; (i8*) + + +;; Function: |-@printf| +;; (i8*, ...) + + +(assert (and (= |%a-@lhs| |%a-@rhs|) (= |%b-@lhs| |%b-@rhs|) (not (= |-@lhs_result| |-@rhs_result|)))) + +(check-sat) diff --git a/samples/XML/xhtml-struct-1.mod b/samples/XML/xhtml-struct-1.mod new file mode 100644 index 00000000..08c8b1d7 --- /dev/null +++ b/samples/XML/xhtml-struct-1.mod @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + + + + +]]> + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + + + + + +]]> + + diff --git a/test/fixtures/Generated/ABM8G.mod b/test/fixtures/Generated/ABM8G.mod new file mode 100644 index 00000000..15887130 --- /dev/null +++ b/test/fixtures/Generated/ABM8G.mod @@ -0,0 +1,50 @@ +PCBNEW-LibModule-V1 Wed 10 Aug 2011 05:57:27 PM COT +# encoding utf-8 +$INDEX +ABM8G +$EndINDEX +$MODULE ABM8G +Po 0 0 0 15 4E430CBD 4E430CC5 ~~ +Li ABM8G +Sc 4E430CC5 +AR +Op 0 0 0 +T0 591 -1378 354 354 0 39 N V 21 N "ABM8G" +T1 0 787 354 354 0 39 N V 21 N "VAL**" +DS -591 394 1299 394 79 21 +DS 1299 394 1299 -1063 79 21 +DS 1299 -1063 -472 -1063 79 21 +DS -472 -1063 -472 472 79 21 +DS -472 472 -472 551 79 21 +DS -472 551 -591 551 79 21 +DS -591 551 -591 433 79 21 +$PAD +Sh "1" R 551 472 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 0 0 +$EndPAD +$PAD +Sh "2" R 551 472 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 866 0 +$EndPAD +$PAD +Sh "3" R 551 472 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 866 -669 +$EndPAD +$PAD +Sh "4" R 551 472 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 0 -669 +$EndPAD +$EndMODULE ABM8G +$EndLIBRARY diff --git a/test/fixtures/Generated/ms2.mod b/test/fixtures/Generated/ms2.mod new file mode 100644 index 00000000..1866c8d6 --- /dev/null +++ b/test/fixtures/Generated/ms2.mod @@ -0,0 +1,19 @@ +GFORTRAN module version '0' created from ms2.f90 on Thu Sep 5 10:09:19 2013 +MD5:8a80cd5db1bc612a28603959302dbf37 -- If you edit this, you'll get what you deserve. + +(() () () () () () () () () () () () () () () () () () () () () () () () +() () ()) + +() + +() + +() + +() + +(2 'ms2' 'ms2' 'ms2' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN +UNKNOWN) (UNKNOWN 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0) +) + +('ms2' 0 2) diff --git a/test/fixtures/SVG/alg_schema.link.svg b/test/fixtures/SVG/alg_schema.link.svg new file mode 120000 index 00000000..2f2cb2e4 --- /dev/null +++ b/test/fixtures/SVG/alg_schema.link.svg @@ -0,0 +1 @@ +alg_schema.svg \ No newline at end of file diff --git a/test/fixtures/SVG/alg_schema.svg b/test/fixtures/SVG/alg_schema.svg new file mode 100644 index 00000000..cd709914 --- /dev/null +++ b/test/fixtures/SVG/alg_schema.svg @@ -0,0 +1,269 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + Sequence KEY256 bits + + + + + Salt96 bits Counter32 bits + + + + + AES Cipher + + + + + + + Secure random data128 bits + + + Division by alphabet lengthrepeated passcode-length times. + + + + Passcode2-16 characters + + + + diff --git a/test/test_blob.rb b/test/test_blob.rb index 3d35e263..51c0398a 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -279,6 +279,9 @@ class TestBlob < Minitest::Test # Rails vendor/ assert sample_blob("vendor/plugins/will_paginate/lib/will_paginate.rb").vendored? + # Vendor/ + assert sample_blob("Vendor/my_great_file.h").vendored? + # 'thirdparty' directory assert sample_blob("thirdparty/lib/main.c").vendored? @@ -480,6 +483,12 @@ class TestBlob < Minitest::Test # Vagrant assert sample_blob("puphpet/file.pp").vendored? + + # Fabric.io + assert sample_blob("Fabric.framework/Fabric.h").vendored? + + # Crashlytics + assert sample_blob("Crashlytics.framework/Crashlytics.h").vendored? end def test_documentation @@ -551,6 +560,8 @@ class TestBlob < Minitest::Test blob = fixture_blob(filepath) if language == 'Data' assert blob.language.nil?, "A language was found for #{filepath}" + elsif language == 'Generated' + assert blob.generated?, "#{filepath} is not a generated file" else assert blob.language, "No language for #{filepath}" assert_equal language, blob.language.name, blob.name diff --git a/vendor/grammars/Handlebars b/vendor/grammars/Handlebars index e331daf0..60532f35 160000 --- a/vendor/grammars/Handlebars +++ b/vendor/grammars/Handlebars @@ -1 +1 @@ -Subproject commit e331daf0597f9df978403520ee8583e08892e9eb +Subproject commit 60532f35cf89ce8d7e3354ed2f81cc131e80b614 diff --git a/vendor/grammars/NimLime b/vendor/grammars/NimLime index 4ab90608..4acce8b6 160000 --- a/vendor/grammars/NimLime +++ b/vendor/grammars/NimLime @@ -1 +1 @@ -Subproject commit 4ab90608c10745de2cacba7490082ba7871f01e1 +Subproject commit 4acce8b67be537df6e23e9aab92c0427c37437a5 diff --git a/vendor/grammars/SMT.tmbundle b/vendor/grammars/SMT.tmbundle new file mode 160000 index 00000000..5b8231f5 --- /dev/null +++ b/vendor/grammars/SMT.tmbundle @@ -0,0 +1 @@ +Subproject commit 5b8231f5165f0a2147445783705e99f468be7a84 diff --git a/vendor/grammars/Sublime-Modula-2 b/vendor/grammars/Sublime-Modula-2 new file mode 160000 index 00000000..f30f2fbe --- /dev/null +++ b/vendor/grammars/Sublime-Modula-2 @@ -0,0 +1 @@ +Subproject commit f30f2fbe3b103bef939b830261bcd595f8951c28 diff --git a/vendor/grammars/atom-fsharp b/vendor/grammars/atom-fsharp index 919a4d89..55785b6a 160000 --- a/vendor/grammars/atom-fsharp +++ b/vendor/grammars/atom-fsharp @@ -1 +1 @@ -Subproject commit 919a4d895a8be3d97a8dd6eb197350d97b8e1ed1 +Subproject commit 55785b6af0115aa49ed3fc2b3c3edb02a5305068 diff --git a/vendor/grammars/carto-atom b/vendor/grammars/carto-atom index 60c8774b..98959093 160000 --- a/vendor/grammars/carto-atom +++ b/vendor/grammars/carto-atom @@ -1 +1 @@ -Subproject commit 60c8774b025cf5baa2de7d1b31a965f05d01af51 +Subproject commit 989590932359d32462c4904c5a71180aeda409d2 diff --git a/vendor/grammars/css.tmbundle b/vendor/grammars/css.tmbundle index 2ce91736..94f7111c 160000 --- a/vendor/grammars/css.tmbundle +++ b/vendor/grammars/css.tmbundle @@ -1 +1 @@ -Subproject commit 2ce91736ca17bbf72ca13ef82ff23c90cc01bf8f +Subproject commit 94f7111c2953ac7b4cc42d313d9ad9b8701b8468 diff --git a/vendor/grammars/d.tmbundle b/vendor/grammars/d.tmbundle index ccb8b6ba..f7953e41 160000 --- a/vendor/grammars/d.tmbundle +++ b/vendor/grammars/d.tmbundle @@ -1 +1 @@ -Subproject commit ccb8b6ba11def16841d22852cb6e942cbcdd8974 +Subproject commit f7953e41fdf40e49113852b07146478783f08139 diff --git a/vendor/grammars/factor b/vendor/grammars/factor index 3705d6e3..0124e630 160000 --- a/vendor/grammars/factor +++ b/vendor/grammars/factor @@ -1 +1 @@ -Subproject commit 3705d6e387aea3f065581c76e0e0f32eaf1c51ef +Subproject commit 0124e630f014071a35bbea43db745e3aaa3491a6 diff --git a/vendor/grammars/haxe-sublime-bundle b/vendor/grammars/haxe-sublime-bundle index 7fb8855d..810b34b2 160000 --- a/vendor/grammars/haxe-sublime-bundle +++ b/vendor/grammars/haxe-sublime-bundle @@ -1 +1 @@ -Subproject commit 7fb8855dd62691b63aa4e6023780aeaaef7cb977 +Subproject commit 810b34b259f04e6dc30a03096d3cfe16b70f4ba9 diff --git a/vendor/grammars/jade-tmbundle b/vendor/grammars/jade-tmbundle index 4197de8b..9ad91309 160000 --- a/vendor/grammars/jade-tmbundle +++ b/vendor/grammars/jade-tmbundle @@ -1 +1 @@ -Subproject commit 4197de8b70bce0b58202d28f5f824b3ba1cec5a7 +Subproject commit 9ad91309a4e5bbe87fdc0e1e660a82aa94be1794 diff --git a/vendor/grammars/language-clojure b/vendor/grammars/language-clojure index 81e089cc..04e308ae 160000 --- a/vendor/grammars/language-clojure +++ b/vendor/grammars/language-clojure @@ -1 +1 @@ -Subproject commit 81e089cc55b6526aca10133372df83b13cd3f6bc +Subproject commit 04e308ae4c70d00eb38cb4d4211b5c27ae5bdce5 diff --git a/vendor/grammars/language-javascript b/vendor/grammars/language-javascript index 601cb6cb..e26b8c50 160000 --- a/vendor/grammars/language-javascript +++ b/vendor/grammars/language-javascript @@ -1 +1 @@ -Subproject commit 601cb6cb8f80e03e7eaa5695515d6366fb2b6d18 +Subproject commit e26b8c50a3ee02cb1d922d82ca66c9b75d06f052 diff --git a/vendor/grammars/language-jsoniq b/vendor/grammars/language-jsoniq index 20214d61..7a971acf 160000 --- a/vendor/grammars/language-jsoniq +++ b/vendor/grammars/language-jsoniq @@ -1 +1 @@ -Subproject commit 20214d61b412d53c2624f1a385ad27236f05a375 +Subproject commit 7a971acf1c2001e6b2e9afc7b69b6ff8a2ae39ce diff --git a/vendor/grammars/language-python b/vendor/grammars/language-python index db14372b..7271315c 160000 --- a/vendor/grammars/language-python +++ b/vendor/grammars/language-python @@ -1 +1 @@ -Subproject commit db14372b475bf41f0f01032076ba53b3940fb80a +Subproject commit 7271315c858451ad302ebce2c5db2eee528013cc diff --git a/vendor/grammars/perl.tmbundle b/vendor/grammars/perl.tmbundle index 4b768e2c..fd81fe58 160000 --- a/vendor/grammars/perl.tmbundle +++ b/vendor/grammars/perl.tmbundle @@ -1 +1 @@ -Subproject commit 4b768e2ce11adc7926fd31cf5c9a3b83e05d05ca +Subproject commit fd81fe586b928b4c2852b43472b37bdc45a6d074 diff --git a/vendor/grammars/sas.tmbundle b/vendor/grammars/sas.tmbundle index a9689f43..43a05b10 160000 --- a/vendor/grammars/sas.tmbundle +++ b/vendor/grammars/sas.tmbundle @@ -1 +1 @@ -Subproject commit a9689f436f49b1aa8f882119bdd8d77172af0501 +Subproject commit 43a05b10fc76b34946a1188fd2a9c2171dbf3fe4 diff --git a/vendor/grammars/sublime-mask b/vendor/grammars/sublime-mask index a7f3baac..bd37c4e7 160000 --- a/vendor/grammars/sublime-mask +++ b/vendor/grammars/sublime-mask @@ -1 +1 @@ -Subproject commit a7f3baacf61d168c59554ccea07e89df016dbfb9 +Subproject commit bd37c4e7537f0fae03d55c02891a5f2500562faf diff --git a/vendor/grammars/sublime-text-ox b/vendor/grammars/sublime-text-ox index 10ca8836..ed96fb6a 160000 --- a/vendor/grammars/sublime-text-ox +++ b/vendor/grammars/sublime-text-ox @@ -1 +1 @@ -Subproject commit 10ca88362c6e4853744fc6b17ed06cc45dc033fa +Subproject commit ed96fb6afc0321c7d3ce219d69b56c591f0938a0 From 8917f1a91a08ea9c05630519f721cec39ba8df9a Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Sun, 12 Jul 2015 20:28:42 +0200 Subject: [PATCH 032/356] MemoryBlob class: wrapper around the content of a file Makes it possible to detect the language of a snippet of code without having an actual file on disk Will allow github-markup to use Linguist without restricting its API --- lib/linguist/memory_blob.rb | 73 +++++++++ test/helper.rb | 21 ++- test/test_memory_blob.rb | 290 ++++++++++++++++++++++++++++++++++++ 3 files changed, 380 insertions(+), 4 deletions(-) create mode 100644 lib/linguist/memory_blob.rb create mode 100644 test/test_memory_blob.rb diff --git a/lib/linguist/memory_blob.rb b/lib/linguist/memory_blob.rb new file mode 100644 index 00000000..c17cf3e2 --- /dev/null +++ b/lib/linguist/memory_blob.rb @@ -0,0 +1,73 @@ +require 'linguist/blob_helper' + +module Linguist + # A MemoryBlob is a wrapper around the content of a file to make it quack + # like a Grit::Blob. It provides the basic interface: `name`, + # `data`, `path` and `size`. + class MemoryBlob + include BlobHelper + + # Public: Initialize a new MemoryBlob. + # + # path - A path String (does not necessarily exists on the file system). + # content - Content of the file. + # + # Returns a FileBlob. + def initialize(path, content) + @path = path + @content = content + end + + # Public: Filename + # + # Examples + # + # MemoryBlob.new("/path/to/linguist/lib/linguist.rb", "").path + # # => "/path/to/linguist/lib/linguist.rb" + # + # Returns a String + attr_reader :path + + # Public: File name + # + # Returns a String + def name + File.basename(@path) + end + + # Public: File contents. + # + # Returns a String. + def data + @content + end + + # Public: Get byte size + # + # Returns an Integer. + def size + @content.bytesize + end + + # Public: Get file extension. + # + # Returns a String. + def extension + extensions.last || "" + end + + # Public: Return an array of the file extensions + # + # >> Linguist::FileBlob.new("app/views/things/index.html.erb").extensions + # => [".html.erb", ".erb"] + # + # Returns an Array + def extensions + basename, *segments = name.downcase.split(".") + + segments.map.with_index do |segment, index| + "." + segments[index..-1].join(".") + end + end + end +end diff --git a/test/helper.rb b/test/helper.rb index ab3cc8fa..71594416 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -3,14 +3,21 @@ require "minitest/autorun" require "mocha/setup" require "linguist" require 'color-proximity' +require "linguist/memory_blob" def fixtures_path File.expand_path("../fixtures", __FILE__) end def fixture_blob(name) - name = File.join(fixtures_path, name) unless name =~ /^\// - Linguist::FileBlob.new(name, fixtures_path) + filepath = (name =~ /^\//)? name : File.join(fixtures_path, name) + Linguist::FileBlob.new(filepath, fixtures_path) +end + +def fixture_blob_memory(name) + filepath = (name =~ /^\//)? name : File.join(fixtures_path, name) + content = File.read(filepath) + Linguist::MemoryBlob.new(name, content) end def samples_path @@ -18,6 +25,12 @@ def samples_path end def sample_blob(name) - name = File.join(samples_path, name) unless name =~ /^\// - Linguist::FileBlob.new(name, samples_path) + filepath = (name =~ /^\//)? name : File.join(samples_path, name) + Linguist::FileBlob.new(filepath, samples_path) +end + +def sample_blob_memory(name) + filepath = (name =~ /^\//)? name : File.join(samples_path, name) + content = File.read(filepath) + Linguist::MemoryBlob.new(name, content) end diff --git a/test/test_memory_blob.rb b/test/test_memory_blob.rb new file mode 100644 index 00000000..1ba856de --- /dev/null +++ b/test/test_memory_blob.rb @@ -0,0 +1,290 @@ +require_relative "./helper" + +class TestBlob < Minitest::Test + include Linguist + + def setup + # git blobs are normally loaded as ASCII-8BIT since they may contain data + # with arbitrary encoding not known ahead of time + @original_external = Encoding.default_external + Encoding.default_external = Encoding.find("ASCII-8BIT") + end + + def teardown + Encoding.default_external = @original_external + end + + def script_blob(name) + blob = sample_blob_memory(name) + blob.instance_variable_set(:@name, 'script') + blob + end + + def test_name + assert_equal "foo.rb", sample_blob_memory("Ruby/foo.rb").name + end + + def test_mime_type + assert_equal "application/postscript", fixture_blob_memory("Binary/octocat.ai").mime_type + assert_equal "application/x-ruby", sample_blob_memory("Ruby/grit.rb").mime_type + assert_equal "application/x-sh", sample_blob_memory("Shell/script.sh").mime_type + assert_equal "text/plain", fixture_blob_memory("Data/README").mime_type + end + + def test_content_type + assert_equal "application/pdf", fixture_blob_memory("Binary/foo.pdf").content_type + assert_equal "image/png", fixture_blob_memory("Binary/foo.png").content_type + assert_equal "text/plain; charset=iso-8859-2", fixture_blob_memory("Data/README").content_type + end + + def test_disposition + assert_equal "attachment; filename=foo+bar.jar", fixture_blob_memory("Binary/foo bar.jar").disposition + assert_equal "attachment; filename=foo.bin", fixture_blob_memory("Binary/foo.bin").disposition + assert_equal "attachment; filename=linguist.gem", fixture_blob_memory("Binary/linguist.gem").disposition + assert_equal "attachment; filename=octocat.ai", fixture_blob_memory("Binary/octocat.ai").disposition + assert_equal "inline", fixture_blob_memory("Data/README").disposition + assert_equal "inline", sample_blob_memory("Text/foo.txt").disposition + assert_equal "inline", sample_blob_memory("Ruby/grit.rb").disposition + assert_equal "inline", fixture_blob_memory("Binary/octocat.png").disposition + end + + def test_data + assert_equal "module Foo\nend\n", sample_blob_memory("Ruby/foo.rb").data + end + + def test_lines + assert_equal ["module Foo", "end", ""], sample_blob_memory("Ruby/foo.rb").lines + assert_equal ["line 1", "line 2", ""], sample_blob_memory("Text/mac.txt").lines + assert_equal 475, sample_blob_memory("Emacs Lisp/ess-julia.el").lines.length + end + + def test_lines_maintains_original_encoding + # Even if the file's encoding is detected as something like UTF-16LE, + # earlier versions of the gem made implicit guarantees that the encoding of + # each `line` is in the same encoding as the file was originally read (in + # practice, UTF-8 or ASCII-8BIT) + assert_equal Encoding.default_external, fixture_blob_memory("Data/utf16le").lines.first.encoding + end + + def test_size + assert_equal 15, sample_blob_memory("Ruby/foo.rb").size + end + + def test_loc + assert_equal 3, sample_blob_memory("Ruby/foo.rb").loc + end + + def test_sloc + assert_equal 2, sample_blob_memory("Ruby/foo.rb").sloc + assert_equal 3, fixture_blob_memory("Data/utf16le-windows").sloc + assert_equal 1, fixture_blob_memory("Data/iso8859-8-i").sloc + end + + def test_encoding + assert_equal "ISO-8859-2", fixture_blob_memory("Data/README").encoding + assert_equal "ISO-8859-2", fixture_blob_memory("Data/README").ruby_encoding + assert_equal "UTF-8", sample_blob_memory("Text/foo.txt").encoding + assert_equal "UTF-8", sample_blob_memory("Text/foo.txt").ruby_encoding + assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le").encoding + assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le").ruby_encoding + assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le-windows").encoding + assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le-windows").ruby_encoding + assert_equal "ISO-2022-KR", sample_blob_memory("Text/ISO-2022-KR.txt").encoding + assert_equal "binary", sample_blob_memory("Text/ISO-2022-KR.txt").ruby_encoding + assert_nil fixture_blob_memory("Binary/dog.o").encoding + end + + def test_binary + assert fixture_blob_memory("Binary/git.deb").binary? + assert fixture_blob_memory("Binary/hello.pbc").binary? + assert fixture_blob_memory("Binary/linguist.gem").binary? + assert fixture_blob_memory("Binary/octocat.ai").binary? + assert fixture_blob_memory("Binary/octocat.png").binary? + assert fixture_blob_memory("Binary/zip").binary? + assert !fixture_blob_memory("Data/README").binary? + assert !sample_blob_memory("Ruby/foo.rb").binary? + assert !sample_blob_memory("Perl/script.pl").binary? + end + + def test_all_binary + Samples.each do |sample| + blob = sample_blob_memory(sample[:path]) + assert ! (blob.likely_binary? || blob.binary?), "#{sample[:path]} is a binary file" + end + end + + def test_text + assert fixture_blob_memory("Data/README").text? + assert fixture_blob_memory("Data/md").text? + assert sample_blob_memory("Shell/script.sh").text? + assert fixture_blob_memory("Data/txt").text? + end + + def test_image + assert fixture_blob_memory("Binary/octocat.png").image? + assert !fixture_blob_memory("Binary/octocat.ai").image? + assert !fixture_blob_memory("Binary/octocat.psd").image? + end + + def test_solid + assert fixture_blob_memory("Binary/cube.stl").solid? + assert fixture_blob_memory("Data/cube.stl").solid? + end + + def test_csv + assert fixture_blob_memory("Data/cars.csv").csv? + end + + def test_pdf + assert fixture_blob_memory("Binary/foo.pdf").pdf? + end + + def test_viewable + assert fixture_blob_memory("Data/README").viewable? + assert sample_blob_memory("Ruby/foo.rb").viewable? + assert sample_blob_memory("Perl/script.pl").viewable? + assert !fixture_blob_memory("Binary/linguist.gem").viewable? + assert !fixture_blob_memory("Binary/octocat.ai").viewable? + assert !fixture_blob_memory("Binary/octocat.png").viewable? + end + + def test_generated + assert !fixture_blob_memory("Data/README").generated? + + # Generated .NET Docfiles + assert sample_blob_memory("XML/net_docfile.xml").generated? + + # Long line + assert !sample_blob_memory("JavaScript/uglify.js").generated? + + # Inlined JS, but mostly code + assert !sample_blob_memory("JavaScript/json2_backbone.js").generated? + + # Minified JS + assert !sample_blob_memory("JavaScript/jquery-1.6.1.js").generated? + assert sample_blob_memory("JavaScript/jquery-1.6.1.min.js").generated? + assert sample_blob_memory("JavaScript/jquery-1.4.2.min.js").generated? + + # Composer generated composer.lock file + assert sample_blob_memory("JSON/composer.lock").generated? + + # PEG.js-generated parsers + assert sample_blob_memory("JavaScript/parser.js").generated? + + # Generated PostScript + assert !sample_blob_memory("PostScript/sierpinski.ps").generated? + + # These examples are too basic to tell + assert !sample_blob_memory("JavaScript/hello.js").generated? + + assert sample_blob_memory("JavaScript/intro-old.js").generated? + assert sample_blob_memory("JavaScript/classes-old.js").generated? + + assert sample_blob_memory("JavaScript/intro.js").generated? + assert sample_blob_memory("JavaScript/classes.js").generated? + + # Protocol Buffer generated code + assert sample_blob_memory("C++/protocol-buffer.pb.h").generated? + assert sample_blob_memory("C++/protocol-buffer.pb.cc").generated? + assert sample_blob_memory("Java/ProtocolBuffer.java").generated? + assert sample_blob_memory("Python/protocol_buffer_pb2.py").generated? + assert sample_blob_memory("Go/api.pb.go").generated? + assert sample_blob_memory("Go/embedded.go").generated? + + # Apache Thrift generated code + assert sample_blob_memory("Python/gen-py-linguist-thrift.py").generated? + assert sample_blob_memory("Go/gen-go-linguist-thrift.go").generated? + assert sample_blob_memory("Java/gen-java-linguist-thrift.java").generated? + assert sample_blob_memory("JavaScript/gen-js-linguist-thrift.js").generated? + assert sample_blob_memory("Ruby/gen-rb-linguist-thrift.rb").generated? + assert sample_blob_memory("Objective-C/gen-cocoa-linguist-thrift.m").generated? + + # Generated JNI + assert sample_blob_memory("C/jni_layer.h").generated? + + # Minified CSS + assert !sample_blob_memory("CSS/bootstrap.css").generated? + assert sample_blob_memory("CSS/bootstrap.min.css").generated? + + # Generated VCR + assert sample_blob_memory("YAML/vcr_cassette.yml").generated? + + # Generated by Zephir + assert !sample_blob_memory("Zephir/Router.zep").generated? + + # Cython-generated C/C++ + assert sample_blob_memory("C/sgd_fast.c").generated? + assert sample_blob_memory("C++/wrapper_inner.cpp").generated? + + # Unity3D-generated metadata + assert sample_blob_memory("Unity3D Asset/Tiles.meta").generated? + end + + def test_vendored + assert !fixture_blob_memory("Data/README").vendored? + end + + def test_language + Samples.each do |sample| + blob = sample_blob_memory(sample[:path]) + assert blob.language, "No language for #{sample[:path]}" + assert_equal sample[:language], blob.language.name, blob.name + end + + # Test language detection for files which shouldn't be used as samples + root = File.expand_path('../fixtures', __FILE__) + Dir.entries(root).each do |language| + next if language == '.' || language == '..' || language == 'Binary' || + File.basename(language) == 'ace_modes.json' + + # Each directory contains test files of a language + dirname = File.join(root, language) + Dir.entries(dirname).each do |filename| + # By default blob search the file in the samples; + # thus, we need to give it the absolute path + filepath = File.join(dirname, filename) + next unless File.file?(filepath) + + blob = fixture_blob_memory(filepath) + if language == 'Data' + assert blob.language.nil?, "A language was found for #{filepath}" + elsif language == 'Generated' + assert blob.generated?, "#{filepath} is not a generated file" + else + assert blob.language, "No language for #{filepath}" + assert_equal language, blob.language.name, blob.name + end + end + end + end + + def test_minified_files_not_safe_to_highlight + assert !sample_blob_memory("JavaScript/jquery-1.6.1.min.js").safe_to_colorize? + end + + def test_empty + blob = Struct.new(:data) { include Linguist::BlobHelper } + + assert blob.new("").empty? + assert blob.new(nil).empty? + refute blob.new(" ").empty? + refute blob.new("nope").empty? + end + + def test_include_in_language_stats + generated = sample_blob_memory("CSS/bootstrap.min.css") + assert_predicate generated, :generated? + refute_predicate generated, :include_in_language_stats? + + data = sample_blob_memory("Ant Build System/filenames/ant.xml") + assert_equal :data, data.language.type + refute_predicate data, :include_in_language_stats? + + prose = sample_blob_memory("Markdown/tender.md") + assert_equal :prose, prose.language.type + refute_predicate prose, :include_in_language_stats? + + included = sample_blob_memory("HTML/pages.html") + assert_predicate included, :include_in_language_stats? + end +end From 5a646384f6649474eb539d6c4c7734a244a98ec8 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Sun, 12 Jul 2015 20:56:51 +0200 Subject: [PATCH 033/356] FileBlob extends MemoryBlob --- lib/linguist/file_blob.rb | 45 ++------------------------------------- 1 file changed, 2 insertions(+), 43 deletions(-) diff --git a/lib/linguist/file_blob.rb b/lib/linguist/file_blob.rb index 20d87bb0..98ef3825 100644 --- a/lib/linguist/file_blob.rb +++ b/lib/linguist/file_blob.rb @@ -1,10 +1,11 @@ require 'linguist/blob_helper' +require 'linguist/memory_blob' module Linguist # A FileBlob is a wrapper around a File object to make it quack # like a Grit::Blob. It provides the basic interface: `name`, # `data`, `path` and `size`. - class FileBlob + class FileBlob < MemoryBlob include BlobHelper # Public: Initialize a new FileBlob from a path @@ -18,20 +19,6 @@ module Linguist @path = base_path ? path.sub("#{base_path}/", '') : path end - # Public: Filename - # - # Examples - # - # FileBlob.new("/path/to/linguist/lib/linguist.rb").path - # # => "/path/to/linguist/lib/linguist.rb" - # - # FileBlob.new("/path/to/linguist/lib/linguist.rb", - # "/path/to/linguist").path - # # => "lib/linguist.rb" - # - # Returns a String - attr_reader :path - # Public: Read file permissions # # Returns a String like '100644' @@ -39,13 +26,6 @@ module Linguist File.stat(@fullpath).mode.to_s(8) end - # Public: File name - # - # Returns a String - def name - File.basename(@fullpath) - end - # Public: Read file contents. # # Returns a String. @@ -59,26 +39,5 @@ module Linguist def size File.size(@fullpath) end - - # Public: Get file extension. - # - # Returns a String. - def extension - extensions.last || "" - end - - # Public: Return an array of the file extensions - # - # >> Linguist::FileBlob.new("app/views/things/index.html.erb").extensions - # => [".html.erb", ".erb"] - # - # Returns an Array - def extensions - basename, *segments = name.downcase.split(".") - - segments.map.with_index do |segment, index| - "." + segments[index..-1].join(".") - end - end end end From 4dcdb0c79c041e59b2f1d810816e0b823bb83f65 Mon Sep 17 00:00:00 2001 From: Viktor Szakats Date: Mon, 13 Jul 2015 10:32:08 +0200 Subject: [PATCH 034/356] xBase: add .ch extension + sample --- lib/linguist/languages.yml | 1 + samples/xBase/sample.ch | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 samples/xBase/sample.ch diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 03a6c6df..85261f69 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3783,5 +3783,6 @@ xBase: color: "#403a40" extensions: - .prg + - .ch tm_scope: none ace_mode: text diff --git a/samples/xBase/sample.ch b/samples/xBase/sample.ch new file mode 100644 index 00000000..308f1e1c --- /dev/null +++ b/samples/xBase/sample.ch @@ -0,0 +1,30 @@ +#ifndef __HARBOUR__ + #ifndef __XPP__ + #ifndef __CLIP__ + #ifndef FlagShip + #define __CLIPPER__ + #endif + #endif + #endif +#endif + +/* File create flags */ +#define FC_NORMAL 0 /* No file attributes are set */ +#define FC_READONLY 1 +#define FC_HIDDEN 2 +#define FC_SYSTEM 4 + +// New-style comment +#command SET DELETED => Set( _SET_DELETED, <(x)> ) +#command SET DELETED () => Set( _SET_DELETED, ) +#command @ , SAY [PICTURE ] [COLOR ] => ; + DevPos( , ) ; DevOutPict( , [, ] ) + +#command ENDIF <*x*> => endif + +#ifdef __CLIPPER__ + #xtranslate hb_MemoWrit( [] ) => MemoWrit( ) + #xtranslate hb_dbExists( ) => File( ) + #xtranslate hb_dbPack() => __dbPack() + #xtranslate hb_default( @, ) => iif( StrTran( ValType( ), "M", "C" ) == StrTran( ValType( ), "M", "C" ),, := , ) +#endif From 8742de9a88b881340fcfa23cc94b5886d5575a21 Mon Sep 17 00:00:00 2001 From: Eric McCormick Date: Mon, 13 Jul 2015 21:11:06 -0500 Subject: [PATCH 035/356] pulling .xsp, .form, .view from PR Per comment in [PR 2438](https://github.com/github/linguist/pull/2438#issuecomment-120588670), pulling all but .xsp-config and .xsp.metadata for uniqueness and non-overlapping assignment based on file extension. This should be set / overridden in the `.gitattributes` file, [as demonstrated here](https://github.com/edm00se/AnAppOfIceAndFire/blob/master/.gitattributes), to assign the XPages language to the project files. --- lib/linguist/languages.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 832e1e7e..23b85226 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3539,9 +3539,6 @@ XML: XPages: type: programming extensions: - - .form - - .view - - .xsp - .xsp-config - .xsp.metadata tm_scope: none From ce8cfed7ff36adcd97a6811d485deb4f6402485a Mon Sep 17 00:00:00 2001 From: Eric McCormick Date: Mon, 13 Jul 2015 21:22:54 -0500 Subject: [PATCH 036/356] removed samples --- lib/linguist/languages.yml | 3718 ------------------ samples/XPages/UnpMain.xsp | 83 - samples/XPages/demoServerRESTconsumption.xsp | 64 - samples/XPages/house.form | 65 - samples/XPages/house.xsp | 176 - samples/XPages/houses.view | 54 - samples/XPages/navbar.xsp | 53 - samples/XPages/xLogin.xsp | 38 - 8 files changed, 4251 deletions(-) delete mode 100644 lib/linguist/languages.yml delete mode 100644 samples/XPages/UnpMain.xsp delete mode 100644 samples/XPages/demoServerRESTconsumption.xsp delete mode 100644 samples/XPages/house.form delete mode 100644 samples/XPages/house.xsp delete mode 100644 samples/XPages/houses.view delete mode 100755 samples/XPages/navbar.xsp delete mode 100644 samples/XPages/xLogin.xsp diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml deleted file mode 100644 index 23b85226..00000000 --- a/lib/linguist/languages.yml +++ /dev/null @@ -1,3718 +0,0 @@ -# Defines all Languages known to GitHub. -# -# type - Either data, programming, markup, prose, or nil -# aliases - An Array of additional aliases (implicitly -# includes name.downcase) -# ace_mode - A String name of the Ace Mode used for highlighting whenever -# a file is edited. This must match one of the filenames in http://git.io/3XO_Cg. -# Use "text" if a mode does not exist. -# wrap - Boolean wrap to enable line wrapping (default: false) -# extensions - An Array of associated extensions (the first one is -# considered the primary extension) -# interpreters - An Array of associated interpreters -# searchable - Boolean flag to enable searching (defaults to true) -# search_term - Deprecated: Some languages maybe indexed under a -# different alias. Avoid defining new exceptions. -# color - CSS hex color to represent the language. -# tm_scope - The TextMate scope that represents this programming -# language. This should match one of the scopes listed in -# the grammars.yml file. Use "none" if there is no grammar -# for this language. -# group - Name of the parent language. Languages in a group are counted -# in the statistics as the parent language. -# -# Any additions or modifications (even trivial) should have corresponding -# test change in `test/test_blob.rb`. -# -# Please keep this list alphabetized. Capitalization comes before lower case. - -ABAP: - type: programming - color: "#E8274B" - extensions: - - .abap - ace_mode: abap - -AGS Script: - type: programming - color: "#B9D9FF" - aliases: - - ags - extensions: - - .asc - - .ash - tm_scope: source.c++ - ace_mode: c_cpp - -AMPL: - type: programming - color: "#E6EFBB" - extensions: - - .ampl - tm_scope: source.ampl - ace_mode: text - -ANTLR: - type: programming - color: "#9DC3FF" - extensions: - - .g4 - ace_mode: text - -API Blueprint: - type: markup - color: "#2ACCA8" - ace_mode: markdown - extensions: - - .apib - tm_scope: text.html.markdown.source.gfm.apib - -APL: - type: programming - color: "#5A8164" - extensions: - - .apl - - .dyalog - tm_scope: source.apl - ace_mode: text - -ASP: - type: programming - color: "#6a40fd" - search_term: aspx-vb - tm_scope: text.html.asp - aliases: - - aspx - - aspx-vb - extensions: - - .asp - - .asax - - .ascx - - .ashx - - .asmx - - .aspx - - .axd - ace_mode: text - -ATS: - type: programming - color: "#1ac620" - aliases: - - ats2 - extensions: - - .dats - - .hats - - .sats - tm_scope: source.ats - ace_mode: ocaml - -ActionScript: - type: programming - tm_scope: source.actionscript.3 - color: "#882B0F" - search_term: as3 - aliases: - - actionscript 3 - - actionscript3 - - as3 - extensions: - - .as - ace_mode: actionscript - -Ada: - type: programming - color: "#02f88c" - extensions: - - .adb - - .ada - - .ads - aliases: - - ada95 - - ada2005 - ace_mode: ada - -Agda: - type: programming - color: "#315665" - extensions: - - .agda - ace_mode: text - -Alloy: - type: programming # 'modeling' would be more appropiate - color: "#cc5c24" - extensions: - - .als - ace_mode: text - -Ant Build System: - type: data - tm_scope: text.xml.ant - filenames: - - ant.xml - - build.xml - ace_mode: xml - -ApacheConf: - type: markup - aliases: - - aconf - - apache - extensions: - - .apacheconf - - .vhost - tm_scope: source.apache-config - ace_mode: apache_conf - -Apex: - type: programming - extensions: - - .cls - tm_scope: source.java - ace_mode: java - -AppleScript: - type: programming - aliases: - - osascript - extensions: - - .applescript - - .scpt - interpreters: - - osascript - ace_mode: applescript - -Arc: - type: programming - color: "#aa2afe" - extensions: - - .arc - tm_scope: none - ace_mode: text - -Arduino: - type: programming - color: "#bd79d1" - extensions: - - .ino - tm_scope: source.c++ - ace_mode: c_cpp - -AsciiDoc: - type: prose - ace_mode: asciidoc - wrap: true - extensions: - - .asciidoc - - .adoc - - .asc - tm_scope: text.html.asciidoc - -AspectJ: - type: programming - color: "#a957b0" - extensions: - - .aj - tm_scope: none - ace_mode: text - -Assembly: - type: programming - color: "#6E4C13" - search_term: nasm - aliases: - - nasm - extensions: - - .asm - - .a51 - - .nasm - tm_scope: source.asm.x86 - ace_mode: assembly_x86 - -Augeas: - type: programming - extensions: - - .aug - tm_scope: none - ace_mode: text - -AutoHotkey: - type: programming - color: "#6594b9" - aliases: - - ahk - extensions: - - .ahk - - .ahkl - tm_scope: source.ahk - ace_mode: autohotkey - -AutoIt: - type: programming - color: "#1C3552" - aliases: - - au3 - - AutoIt3 - - AutoItScript - extensions: - - .au3 - tm_scope: source.autoit.3 - ace_mode: autohotkey - -Awk: - type: programming - extensions: - - .awk - - .auk - - .gawk - - .mawk - - .nawk - interpreters: - - awk - - gawk - - mawk - - nawk - ace_mode: text - -Batchfile: - type: programming - search_term: bat - aliases: - - bat - - batch - - dosbatch - - winbatch - extensions: - - .bat - - .cmd - tm_scope: source.dosbatch - ace_mode: batchfile - -Befunge: - type: programming - extensions: - - .befunge - ace_mode: text - -Bison: - type: programming - group: Yacc - tm_scope: source.bison - extensions: - - .bison - ace_mode: text - -BitBake: - type: programming - tm_scope: none - extensions: - - .bb - ace_mode: text - -BlitzBasic: - type: programming - aliases: - - b3d - - blitz3d - - blitzplus - - bplus - extensions: - - .bb - - .decls - tm_scope: source.blitzmax - ace_mode: text - -BlitzMax: - type: programming - color: "#cd6400" - extensions: - - .bmx - aliases: - - bmax - ace_mode: text - -Bluespec: - type: programming - extensions: - - .bsv - tm_scope: source.bsv - ace_mode: verilog - -Boo: - type: programming - color: "#d4bec1" - extensions: - - .boo - ace_mode: text - -Brainfuck: - type: programming - color: "#2F2530" - extensions: - - .b - - .bf - tm_scope: source.bf - ace_mode: text - -Brightscript: - type: programming - extensions: - - .brs - tm_scope: source.brightscript - ace_mode: text - -Bro: - type: programming - extensions: - - .bro - ace_mode: text - -C: - type: programming - color: "#555555" - extensions: - - .c - - .cats - - .h - - .idc - - .w - interpreters: - - tcc - ace_mode: c_cpp - -C#: - type: programming - ace_mode: csharp - tm_scope: source.cs - search_term: csharp - color: "#178600" - aliases: - - csharp - extensions: - - .cs - - .cshtml - - .csx - -C++: - type: programming - ace_mode: c_cpp - search_term: cpp - color: "#f34b7d" - aliases: - - cpp - extensions: - - .cpp - - .c++ - - .cc - - .cp - - .cxx - - .h - - .h++ - - .hh - - .hpp - - .hxx - - .inl - - .ipp - - .tcc - - .tpp - -C-ObjDump: - type: data - extensions: - - .c-objdump - tm_scope: objdump.x86asm - ace_mode: assembly_x86 - -C2hs Haskell: - type: programming - group: Haskell - aliases: - - c2hs - extensions: - - .chs - tm_scope: source.haskell - ace_mode: haskell - -CLIPS: - type: programming - extensions: - - .clp - tm_scope: source.clips - ace_mode: text - -CMake: - type: programming - extensions: - - .cmake - - .cmake.in - filenames: - - CMakeLists.txt - ace_mode: text - -COBOL: - type: programming - extensions: - - .cob - - .cbl - - .ccp - - .cobol - - .cpy - ace_mode: cobol - -CSS: - type: markup - tm_scope: source.css - ace_mode: css - color: "#563d7c" - extensions: - - .css - -Cap'n Proto: - type: programming - tm_scope: source.capnp - extensions: - - .capnp - ace_mode: text - -CartoCSS: - type: programming - aliases: - - Carto - extensions: - - .mss - ace_mode: text - tm_scope: source.css.mss - -Ceylon: - type: programming - extensions: - - .ceylon - ace_mode: text - -Chapel: - type: programming - color: "#8dc63f" - aliases: - - chpl - extensions: - - .chpl - ace_mode: text - -ChucK: - type: programming - extensions: - - .ck - tm_scope: source.java - ace_mode: java - -Cirru: - type: programming - color: "#ccccff" - ace_mode: cirru - extensions: - - .cirru - -Clarion: - type: programming - color: "#db901e" - ace_mode: text - extensions: - - .clw - tm_scope: source.clarion - -Clean: - type: programming - color: "#3F85AF" - extensions: - - .icl - - .dcl - tm_scope: none - ace_mode: text - -Clojure: - type: programming - ace_mode: clojure - color: "#db5855" - extensions: - - .clj - - .boot - - .cl2 - - .cljc - - .cljs - - .cljs.hl - - .cljscm - - .cljx - - .hic - filenames: - - riemann.config - -CoffeeScript: - type: programming - tm_scope: source.coffee - ace_mode: coffee - color: "#244776" - aliases: - - coffee - - coffee-script - extensions: - - .coffee - - ._coffee - - .cjsx - - .cson - - .iced - filenames: - - Cakefile - interpreters: - - coffee - -ColdFusion: - type: programming - group: ColdFusion - ace_mode: coldfusion - color: "#ed2cd6" - search_term: cfm - aliases: - - cfm - - cfml - - coldfusion html - extensions: - - .cfm - - .cfml - tm_scope: text.html.cfm - -ColdFusion CFC: - type: programming - group: ColdFusion - ace_mode: coldfusion - color: "#ed2cd6" - search_term: cfc - aliases: - - cfc - extensions: - - .cfc - tm_scope: source.cfscript - -Common Lisp: - type: programming - tm_scope: source.lisp - color: "#3fb68b" - aliases: - - lisp - extensions: - - .lisp - - .asd - - .cl - - .l - - .lsp - - .ny - - .podsl - interpreters: - - lisp - - sbcl - - ccl - - clisp - - ecl - ace_mode: lisp - -Component Pascal: - type: programming - color: "#b0ce4e" - extensions: - - .cp - - .cps - tm_scope: source.pascal - aliases: - - delphi - - objectpascal - ace_mode: pascal - -Cool: - type: programming - extensions: - - .cl - tm_scope: source.cool - ace_mode: text - -Coq: - type: programming - extensions: - - .coq - - .v - ace_mode: text - -Cpp-ObjDump: - type: data - extensions: - - .cppobjdump - - .c++-objdump - - .c++objdump - - .cpp-objdump - - .cxx-objdump - tm_scope: objdump.x86asm - aliases: - - c++-objdumb - ace_mode: assembly_x86 - -Creole: - type: prose - wrap: true - extensions: - - .creole - tm_scope: text.html.creole - ace_mode: text - -Crystal: - type: programming - color: "#776791" - extensions: - - .cr - ace_mode: ruby - tm_scope: source.ruby - interpreters: - - crystal - -Cucumber: - type: programming - extensions: - - .feature - tm_scope: text.gherkin.feature - aliases: - - gherkin - ace_mode: text - -Cuda: - type: programming - extensions: - - .cu - - .cuh - tm_scope: source.cuda-c++ - ace_mode: c_cpp - -Cycript: - type: programming - extensions: - - .cy - tm_scope: source.js - ace_mode: javascript - -Cython: - type: programming - group: Python - extensions: - - .pyx - - .pxd - - .pxi - aliases: - - pyrex - ace_mode: text - -D: - type: programming - color: "#fcd46d" - extensions: - - .d - - .di - ace_mode: d - -D-ObjDump: - type: data - extensions: - - .d-objdump - tm_scope: objdump.x86asm - ace_mode: assembly_x86 - -DIGITAL Command Language: - type: programming - aliases: - - dcl - extensions: - - .com - tm_scope: none - ace_mode: text - -DM: - type: programming - color: "#447265" - extensions: - - .dm - aliases: - - byond - tm_scope: source.c++ - ace_mode: c_cpp - -DTrace: - type: programming - aliases: - - dtrace-script - extensions: - - .d - interpreters: - - dtrace - tm_scope: source.c - ace_mode: c_cpp - -Darcs Patch: - type: data - search_term: dpatch - aliases: - - dpatch - extensions: - - .darcspatch - - .dpatch - tm_scope: none - ace_mode: text - -Dart: - type: programming - color: "#00B4AB" - extensions: - - .dart - ace_mode: dart - -Diff: - type: data - color: "#88dddd" - extensions: - - .diff - - .patch - aliases: - - udiff - tm_scope: source.diff - ace_mode: diff - -Dockerfile: - type: data - tm_scope: source.dockerfile - extensions: - - .dockerfile - filenames: - - Dockerfile - ace_mode: dockerfile - -Dogescript: - type: programming - color: "#cca760" - extensions: - - .djs - tm_scope: none - ace_mode: text - -Dylan: - type: programming - color: "#6c616e" - extensions: - - .dylan - - .dyl - - .intr - - .lid - ace_mode: text - -E: - type: programming - color: "#ccce35" - extensions: - - .E - tm_scope: none - ace_mode: text - -ECL: - type: programming - color: "#8a1267" - extensions: - - .ecl - - .eclxml - tm_scope: none - ace_mode: text - -Eagle: - type: markup - color: "#814C05" - extensions: - - .sch - - .brd - tm_scope: text.xml - ace_mode: xml - -Ecere Projects: - type: data - group: JavaScript - extensions: - - .epj - tm_scope: source.json - ace_mode: json - -Eiffel: - type: programming - color: "#946d57" - extensions: - - .e - ace_mode: eiffel - -Elixir: - type: programming - color: "#6e4a7e" - extensions: - - .ex - - .exs - ace_mode: elixir - filenames: - - mix.lock - -Elm: - type: programming - color: "#60B5CC" - extensions: - - .elm - tm_scope: source.elm - ace_mode: elm - -Emacs Lisp: - type: programming - tm_scope: source.lisp - color: "#c065db" - aliases: - - elisp - - emacs - filenames: - - .emacs - - .emacs.desktop - extensions: - - .el - - .emacs - - .emacs.desktop - ace_mode: lisp - -EmberScript: - type: programming - color: "#FFF4F3" - extensions: - - .em - - .emberscript - tm_scope: source.coffee - ace_mode: coffee - -Erlang: - type: programming - color: "#B83998" - extensions: - - .erl - - .es - - .escript - - .hrl - filenames: - - rebar.config - - rebar.config.lock - - rebar.lock - ace_mode: erlang - interpreters: - - escript - -F#: - type: programming - color: "#b845fc" - search_term: fsharp - aliases: - - fsharp - extensions: - - .fs - - .fsi - - .fsx - tm_scope: source.fsharp - ace_mode: text - -FLUX: - type: programming - color: "#88ccff" - extensions: - - .fx - - .flux - tm_scope: none - ace_mode: text - -FORTRAN: - type: programming - color: "#4d41b1" - extensions: - - .f90 - - .f - - .f03 - - .f08 - - .f77 - - .f95 - - .for - - .fpp - tm_scope: source.fortran.modern - ace_mode: text - -Factor: - type: programming - color: "#636746" - extensions: - - .factor - filenames: - - .factor-boot-rc - - .factor-rc - ace_mode: text - -Fancy: - type: programming - color: "#7b9db4" - extensions: - - .fy - - .fancypack - filenames: - - Fakefile - ace_mode: text - -Fantom: - type: programming - color: "#dbded5" - extensions: - - .fan - tm_scope: source.fan - ace_mode: text - -Filterscript: - type: programming - group: RenderScript - extensions: - - .fs - tm_scope: none - ace_mode: text - -Formatted: - type: data - extensions: - - .for - tm_scope: none - ace_mode: text - -Forth: - type: programming - color: "#341708" - extensions: - - .fth - - .4th - - .f - - .for - - .forth - - .fr - - .frt - - .fs - ace_mode: forth - -Frege: - type: programming - color: "#00cafe" - extensions: - - .fr - tm_scope: source.haskell - ace_mode: haskell - -G-code: - type: data - extensions: - - .g - - .gco - - .gcode - tm_scope: source.gcode - ace_mode: gcode - -GAMS: - type: programming - extensions: - - .gms - tm_scope: none - ace_mode: text - -GAP: - type: programming - extensions: - - .g - - .gap - - .gd - - .gi - - .tst - tm_scope: source.gap - ace_mode: text - -GAS: - type: programming - group: Assembly - extensions: - - .s - tm_scope: source.asm.x86 - ace_mode: assembly_x86 - -GDScript: - type: programming - extensions: - - .gd - tm_scope: source.gdscript - ace_mode: text - -GLSL: - type: programming - extensions: - - .glsl - - .fp - - .frag - - .frg - - .fs - - .fshader - - .geo - - .geom - - .glslv - - .gshader - - .shader - - .vert - - .vrx - - .vshader - ace_mode: glsl - -Game Maker Language: - type: programming - color: "#8fb200" - extensions: - - .gml - tm_scope: source.c++ - ace_mode: c_cpp - -Genshi: - type: programming - extensions: - - .kid - tm_scope: text.xml.genshi - aliases: - - xml+genshi - - xml+kid - ace_mode: xml - -Gentoo Ebuild: - type: programming - group: Shell - extensions: - - .ebuild - tm_scope: source.shell - ace_mode: sh - -Gentoo Eclass: - type: programming - group: Shell - extensions: - - .eclass - tm_scope: source.shell - ace_mode: sh - -Gettext Catalog: - type: prose - search_term: pot - searchable: false - aliases: - - pot - extensions: - - .po - - .pot - tm_scope: source.po - ace_mode: text - -Glyph: - type: programming - color: "#e4cc98" - extensions: - - .glf - tm_scope: source.tcl - ace_mode: tcl - -Gnuplot: - type: programming - color: "#f0a9f0" - extensions: - - .gp - - .gnu - - .gnuplot - - .plot - - .plt - interpreters: - - gnuplot - ace_mode: text - -Go: - type: programming - color: "#375eab" - extensions: - - .go - ace_mode: golang - -Golo: - type: programming - color: "#88562A" - extensions: - - .golo - tm_scope: source.golo - ace_mode: text - -Gosu: - type: programming - color: "#82937f" - extensions: - - .gs - - .gst - - .gsx - - .vark - tm_scope: source.gosu.2 - ace_mode: text - -Grace: - type: programming - extensions: - - .grace - tm_scope: source.grace - ace_mode: text - -Gradle: - type: data - extensions: - - .gradle - tm_scope: source.groovy.gradle - ace_mode: text - -Grammatical Framework: - type: programming - aliases: - - gf - wrap: false - extensions: - - .gf - searchable: true - color: "#79aa7a" - tm_scope: source.haskell - ace_mode: haskell - -Graph Modeling Language: - type: data - extensions: - - .gml - tm_scope: none - ace_mode: text - -Graphviz (DOT): - type: data - tm_scope: source.dot - extensions: - - .dot - - .gv - ace_mode: text - -Groff: - type: markup - extensions: - - .man - - '.1' - - '.2' - - '.3' - - '.4' - - '.5' - - '.6' - - '.7' - - .l - tm_scope: text.groff - aliases: - - nroff - ace_mode: text - -Groovy: - type: programming - ace_mode: groovy - color: "#e69f56" - extensions: - - .groovy - - .grt - - .gtpl - - .gvy - interpreters: - - groovy - -Groovy Server Pages: - type: programming - group: Groovy - aliases: - - gsp - - java server page - extensions: - - .gsp - tm_scope: text.html.jsp - ace_mode: jsp - -HTML: - type: markup - tm_scope: text.html.basic - ace_mode: html - color: "#e44b23" - aliases: - - xhtml - extensions: - - .html - - .htm - - .html.hl - - .st - - .xht - - .xhtml - -HTML+Django: - type: markup - tm_scope: text.html.django - group: HTML - extensions: - - .mustache - - .jinja - aliases: - - html+django/jinja - - html+jinja - - htmldjango - ace_mode: django - -HTML+ERB: - type: markup - tm_scope: text.html.erb - group: HTML - aliases: - - erb - extensions: - - .erb - - .erb.deface - ace_mode: html_ruby - -HTML+PHP: - type: markup - tm_scope: text.html.php - group: HTML - extensions: - - .phtml - ace_mode: php - -HTTP: - type: data - extensions: - - .http - tm_scope: source.httpspec - ace_mode: text - -Hack: - type: programming - ace_mode: php - extensions: - - .hh - - .php - tm_scope: text.html.php - -Haml: - group: HTML - type: markup - extensions: - - .haml - - .haml.deface - ace_mode: haml - -Handlebars: - type: markup - color: "#01a9d6" - aliases: - - hbs - - htmlbars - extensions: - - .handlebars - - .hbs - tm_scope: text.html.handlebars - ace_mode: handlebars - -Harbour: - type: programming - color: "#0e60e3" - extensions: - - .hb - tm_scope: none - ace_mode: text - -Haskell: - type: programming - color: "#29b544" - extensions: - - .hs - - .hsc - ace_mode: haskell - -Haxe: - type: programming - ace_mode: haxe - color: "#f7941e" - extensions: - - .hx - - .hxsl - tm_scope: source.haxe.2 - -Hy: - type: programming - ace_mode: text - color: "#7790B2" - extensions: - - .hy - aliases: - - hylang - tm_scope: source.hy - -HyPhy: - type: programming - ace_mode: text - extensions: - - .bf - tm_scope: none - -IDL: - type: programming - color: "#a3522f" - extensions: - - .pro - - .dlm - ace_mode: text - -IGOR Pro: - type: programming - extensions: - - .ipf - aliases: - - igor - - igorpro - tm_scope: none - ace_mode: text - -INI: - type: data - extensions: - - .ini - - .cfg - - .prefs - - .pro - - .properties - tm_scope: source.ini - aliases: - - dosini - ace_mode: ini - -IRC log: - type: data - search_term: irc - aliases: - - irc - - irc logs - extensions: - - .irclog - - .weechatlog - tm_scope: none - ace_mode: text - -Idris: - type: programming - extensions: - - .idr - - .lidr - ace_mode: text - -Inform 7: - type: programming - wrap: true - extensions: - - .ni - - .i7x - tm_scope: source.Inform7 - aliases: - - i7 - - inform7 - ace_mode: text - -Inno Setup: - type: programming - extensions: - - .iss - tm_scope: source.inno - ace_mode: text - -Io: - type: programming - color: "#a9188d" - extensions: - - .io - ace_mode: io - -Ioke: - type: programming - color: "#078193" - extensions: - - .ik - interpreters: - - ioke - ace_mode: text - -Isabelle: - type: programming - color: "#FEFE00" - extensions: - - .thy - tm_scope: source.isabelle.theory - ace_mode: text - -J: - type: programming - color: "#9EEDFF" - extensions: - - .ijs - tm_scope: source.j - ace_mode: text - -JFlex: - type: programming - color: "#DBCA00" - group: Lex - extensions: - - .flex - - .jflex - tm_scope: source.jflex - ace_mode: text - -JSON: - type: data - tm_scope: source.json - group: JavaScript - ace_mode: json - searchable: false - extensions: - - .json - - .lock - filenames: - - .jshintrc - - composer.lock - -JSON5: - type: data - extensions: - - .json5 - tm_scope: source.js - ace_mode: javascript - -JSONLD: - type: data - group: JavaScript - ace_mode: javascript - extensions: - - .jsonld - tm_scope: source.js - -JSONiq: - type: programming - ace_mode: jsoniq - extensions: - - .jq - tm_scope: source.xquery - -Jade: - group: HTML - type: markup - extensions: - - .jade - tm_scope: source.jade - ace_mode: jade - -Jasmin: - type: programming - ace_mode: java - extensions: - - .j - tm_scope: source.jasmin - -Java: - type: programming - ace_mode: java - color: "#b07219" - extensions: - - .java - -Java Server Pages: - type: programming - group: Java - search_term: jsp - aliases: - - jsp - extensions: - - .jsp - tm_scope: text.html.jsp - ace_mode: jsp - -JavaScript: - type: programming - tm_scope: source.js - ace_mode: javascript - color: "#f1e05a" - aliases: - - js - - node - extensions: - - .js - - ._js - - .bones - - .es6 - - .frag - - .gs - - .jake - - .jsb - - .jsfl - - .jsm - - .jss - - .jsx - - .njs - - .pac - - .sjs - - .ssjs - - .sublime-build - - .sublime-commands - - .sublime-completions - - .sublime-keymap - - .sublime-macro - - .sublime-menu - - .sublime-mousemap - - .sublime-project - - .sublime-settings - - .sublime-theme - - .sublime-workspace - - .sublime_metrics - - .sublime_session - - .xsjs - - .xsjslib - filenames: - - Jakefile - interpreters: - - node - -Julia: - type: programming - extensions: - - .jl - color: "#a270ba" - ace_mode: julia - -KRL: - type: programming - color: "#28431f" - extensions: - - .krl - tm_scope: none - ace_mode: text - -KiCad: - type: programming - extensions: - - .sch - tm_scope: none - ace_mode: text - -Kit: - type: markup - ace_mode: html - extensions: - - .kit - tm_scope: text.html.basic - -Kotlin: - type: programming - color: "#EA4DFA" - extensions: - - .kt - - .ktm - - .kts - tm_scope: source.Kotlin - ace_mode: text - -LFE: - type: programming - extensions: - - .lfe - color: "#004200" - group: Erlang - tm_scope: source.lisp - ace_mode: lisp - -LLVM: - type: programming - extensions: - - .ll - ace_mode: text - -LOLCODE: - type: programming - extensions: - - .lol - color: "#cc9900" - tm_scope: none - ace_mode: text - -LSL: - type: programming - ace_mode: lsl - extensions: - - .lsl - interpreters: - - lsl - color: '#3d9970' - -LabVIEW: - type: programming - extensions: - - .lvproj - tm_scope: none - ace_mode: text - -Lasso: - type: programming - color: "#999999" - extensions: - - .lasso - - .las - - .lasso8 - - .lasso9 - - .ldml - tm_scope: file.lasso - aliases: - - lassoscript - ace_mode: text - -Latte: - type: markup - color: "#A8FF97" - group: HTML - extensions: - - .latte - tm_scope: text.html.smarty - ace_mode: smarty - -Lean: - type: programming - extensions: - - .lean - - .hlean - ace_mode: lean - -Less: - type: markup - group: CSS - extensions: - - .less - tm_scope: source.css.less - ace_mode: less - -Lex: - type: programming - color: "#DBCA00" - aliases: - - flex - extensions: - - .l - - .lex - tm_scope: none - ace_mode: text - -LilyPond: - type: programming - extensions: - - .ly - - .ily - ace_mode: text - -Limbo: - type: programming - extensions: - - .b - - .m - tm_scope: none - ace_mode: text - -Linker Script: - type: data - extensions: - - .ld - - .lds - filenames: - - ld.script - tm_scope: none - ace_mode: text - -Liquid: - type: markup - extensions: - - .liquid - tm_scope: text.html.liquid - ace_mode: liquid - -Literate Agda: - type: programming - group: Agda - extensions: - - .lagda - tm_scope: none - ace_mode: text - -Literate CoffeeScript: - type: programming - tm_scope: source.litcoffee - group: CoffeeScript - ace_mode: markdown - wrap: true - search_term: litcoffee - aliases: - - litcoffee - extensions: - - .litcoffee - ace_mode: text - -Literate Haskell: - type: programming - group: Haskell - search_term: lhs - aliases: - - lhaskell - - lhs - extensions: - - .lhs - tm_scope: text.tex.latex.haskell - ace_mode: text - -LiveScript: - type: programming - color: "#499886" - aliases: - - live-script - - ls - extensions: - - .ls - - ._ls - filenames: - - Slakefile - ace_mode: livescript - -Logos: - type: programming - extensions: - - .xm - - .x - - .xi - ace_mode: text - -Logtalk: - type: programming - extensions: - - .lgt - - .logtalk - ace_mode: text - -LookML: - type: programming - ace_mode: yaml - color: "#652B81" - extensions: - - .lookml - tm_scope: source.yaml - -LoomScript: - type: programming - extensions: - - .ls - tm_scope: source.loomscript - ace_mode: text - -Lua: - type: programming - ace_mode: lua - color: "#000080" - extensions: - - .lua - - .fcgi - - .nse - - .pd_lua - - .rbxs - - .wlua - interpreters: - - lua - -M: - type: programming - aliases: - - mumps - extensions: - - .mumps - - .m - tm_scope: source.lisp - ace_mode: lisp - -MTML: - type: markup - color: "#b7e1f4" - extensions: - - .mtml - tm_scope: text.html.basic - ace_mode: html - -MUF: - type: programming - group: Forth - extensions: - - .muf - - .m - tm_scope: none - ace_mode: forth - -Makefile: - type: programming - color: "#427819" - aliases: - - bsdmake - - make - - mf - extensions: - - .mak - - .d - - .mk - filenames: - - GNUmakefile - - Kbuild - - Makefile - - makefile - interpreters: - - make - ace_mode: makefile - -Mako: - type: programming - extensions: - - .mako - - .mao - tm_scope: text.html.mako - ace_mode: text - -Markdown: - type: prose - ace_mode: markdown - wrap: true - extensions: - - .md - - .markdown - - .mkd - - .mkdn - - .mkdown - - .ron - tm_scope: source.gfm - -Mask: - type: markup - color: "#f97732" - ace_mode: mask - extensions: - - .mask - tm_scope: source.mask - -Mathematica: - type: programming - extensions: - - .mathematica - - .cdf - - .m - - .ma - - .nb - - .nbp - - .wl - - .wlt - aliases: - - mma - ace_mode: text - -Matlab: - type: programming - color: "#bb92ac" - extensions: - - .matlab - - .m - ace_mode: matlab - -Maven POM: - type: data - tm_scope: text.xml.pom - filenames: - - pom.xml - ace_mode: xml - -Max: - type: programming - color: "#c4a79c" - aliases: - - max/msp - - maxmsp - search_term: max/msp - extensions: - - .maxpat - - .maxhelp - - .maxproj - - .mxt - - .pat - tm_scope: source.json - ace_mode: json - -MediaWiki: - type: prose - wrap: true - extensions: - - .mediawiki - tm_scope: text.html.mediawiki - ace_mode: text - -Mercury: - type: programming - color: "#ff2b2b" - ace_mode: prolog - interpreters: - - mmi - extensions: - - .m - - .moo - tm_scope: source.mercury - ace_mode: prolog - -MiniD: # Legacy - type: programming - searchable: false - extensions: - - .minid # Dummy extension - tm_scope: none - ace_mode: text - -Mirah: - type: programming - search_term: mirah - color: "#c7a938" - extensions: - - .druby - - .duby - - .mir - - .mirah - tm_scope: source.ruby - ace_mode: ruby - -Modelica: - type: programming - extensions: - - .mo - tm_scope: source.modelica - ace_mode: text - -Module Management System: - type: programming - extensions: - - .mms - - .mmk - filenames: - - descrip.mmk - - descrip.mms - tm_scope: none - ace_mode: text - -Monkey: - type: programming - extensions: - - .monkey - ace_mode: text - -Moocode: - type: programming - extensions: - - .moo - tm_scope: none - ace_mode: text - -MoonScript: - type: programming - extensions: - - .moon - interpreters: - - moon - ace_mode: text - -Myghty: - type: programming - extensions: - - .myt - tm_scope: none - ace_mode: text - -NL: - type: data - extensions: - - .nl - tm_scope: none - ace_mode: text - -NSIS: - type: programming - extensions: - - .nsi - - .nsh - ace_mode: text - -Nemerle: - type: programming - color: "#3d3c6e" - extensions: - - .n - ace_mode: text - -NetLinx: - type: programming - color: "#0aa0ff" - extensions: - - .axs - - .axi - tm_scope: source.netlinx - ace_mode: text - -NetLinx+ERB: - type: programming - color: "#747faa" - extensions: - - .axs.erb - - .axi.erb - tm_scope: source.netlinx.erb - ace_mode: text - -NetLogo: - type: programming - color: "#ff6375" - extensions: - - .nlogo - tm_scope: source.lisp - ace_mode: lisp - -NewLisp: - type: programming - lexer: NewLisp - color: "#87AED7" - extensions: - - .nl - - .lisp - - .lsp - interpreters: - - newlisp - tm_scope: source.lisp - ace_mode: lisp - -Nginx: - type: markup - extensions: - - .nginxconf - - .vhost - filenames: - - nginx.conf - tm_scope: source.nginx - aliases: - - nginx configuration file - ace_mode: text - -Nimrod: - type: programming - color: "#37775b" - extensions: - - .nim - - .nimrod - ace_mode: text - tm_scope: source.nim - -Ninja: - type: data - tm_scope: source.ninja - extensions: - - .ninja - ace_mode: text - -Nit: - type: programming - color: "#009917" - extensions: - - .nit - tm_scope: source.nit - ace_mode: text - -Nix: - type: programming - color: "#7e7eff" - extensions: - - .nix - aliases: - - nixos - tm_scope: source.nix - ace_mode: nix - -Nu: - type: programming - color: "#c9df40" - aliases: - - nush - extensions: - - .nu - filenames: - - Nukefile - tm_scope: source.scheme - ace_mode: scheme - interpreters: - - nush - -NumPy: - type: programming - group: Python - extensions: - - .numpy - - .numpyw - - .numsc - tm_scope: none - ace_mode: text - -OCaml: - type: programming - ace_mode: ocaml - color: "#3be133" - extensions: - - .ml - - .eliom - - .eliomi - - .ml4 - - .mli - - .mll - - .mly - interpreters: - - ocaml - - ocamlrun - tm_scope: source.ocaml - -ObjDump: - type: data - extensions: - - .objdump - tm_scope: objdump.x86asm - ace_mode: assembly_x86 - -Objective-C: - type: programming - tm_scope: source.objc - color: "#438eff" - aliases: - - obj-c - - objc - - objectivec - extensions: - - .m - - .h - ace_mode: objectivec - -Objective-C++: - type: programming - tm_scope: source.objc++ - color: "#6866fb" - aliases: - - obj-c++ - - objc++ - - objectivec++ - extensions: - - .mm - ace_mode: objectivec - -Objective-J: - type: programming - color: "#ff0c5a" - aliases: - - obj-j - - objectivej - - objj - extensions: - - .j - - .sj - tm_scope: source.js.objj - ace_mode: text - -Omgrofl: - type: programming - extensions: - - .omgrofl - color: "#cabbff" - tm_scope: none - ace_mode: text - -Opa: - type: programming - extensions: - - .opa - ace_mode: text - -Opal: - type: programming - color: "#f7ede0" - extensions: - - .opal - tm_scope: source.opal - ace_mode: text - -OpenCL: - type: programming - group: C - extensions: - - .cl - - .opencl - tm_scope: source.c - ace_mode: c_cpp - -OpenEdge ABL: - type: programming - aliases: - - progress - - openedge - - abl - extensions: - - .p - - .cls - tm_scope: source.abl - ace_mode: text - -OpenSCAD: - type: programming - extensions: - - .scad - tm_scope: source.scad - ace_mode: scad - -Org: - type: prose - wrap: true - extensions: - - .org - tm_scope: none - ace_mode: text - -Ox: - type: programming - extensions: - - .ox - - .oxh - - .oxo - tm_scope: source.ox - ace_mode: text - -Oxygene: - type: programming - color: "#cdd0e3" - extensions: - - .oxygene - tm_scope: none - ace_mode: text - -Oz: - type: programming - color: "#fab738" - extensions: - - .oz - tm_scope: source.oz - ace_mode: text - -PAWN: - type: programming - color: "#dbb284" - extensions: - - .pwn - tm_scope: source.c++ - ace_mode: c_cpp - -PHP: - type: programming - tm_scope: text.html.php - ace_mode: php - color: "#4F5D95" - extensions: - - .php - - .aw - - .ctp - - .fcgi - - .php3 - - .php4 - - .php5 - - .phpt - filenames: - - Phakefile - interpreters: - - php - aliases: - - inc - -#Oracle -PLSQL: - type: programming - ace_mode: sql - tm_scope: source.plsql.oracle - extensions: - - .pls - - .pkb - - .pks - - .plb - - .plsql - - .sql - -#Postgres -PLpgSQL: - type: programming - ace_mode: pgsql - tm_scope: source.sql - extensions: - - .sql - -Pan: - type: programming - color: '#cc0000' - extensions: - - .pan - tm_scope: none - ace_mode: text - -Papyrus: - type: programming - color: "#6600cc" - extensions: - - .psc - tm_scope: source.papyrus - ace_mode: text - -Parrot: - type: programming - color: "#f3ca0a" - extensions: - - .parrot # Dummy extension - tm_scope: none - ace_mode: text - -Parrot Assembly: - group: Parrot - type: programming - aliases: - - pasm - extensions: - - .pasm - interpreters: - - parrot - tm_scope: none - ace_mode: text - -Parrot Internal Representation: - group: Parrot - tm_scope: source.parrot.pir - type: programming - aliases: - - pir - extensions: - - .pir - interpreters: - - parrot - ace_mode: text - -Pascal: - type: programming - color: "#b0ce4e" - extensions: - - .pas - - .dfm - - .dpr - - .lpr - - .pp - ace_mode: pascal - -Perl: - type: programming - tm_scope: source.perl - ace_mode: perl - color: "#0298c3" - extensions: - - .pl - - .al - - .cgi - - .fcgi - - .perl - - .ph - - .plx - - .pm - - .pod - - .psgi - - .t - interpreters: - - perl - -Perl6: - type: programming - color: "#0000fb" - extensions: - - .6pl - - .6pm - - .nqp - - .p6 - - .p6l - - .p6m - - .pl - - .pl6 - - .pm - - .pm6 - - .t - filenames: - - Rexfile - interpreters: - - perl6 - tm_scope: source.perl.6 - ace_mode: perl - -PigLatin: - type: programming - color: "#fcd7de" - extensions: - - .pig - tm_scope: source.pig_latin - ace_mode: text - -Pike: - type: programming - color: "#005390" - extensions: - - .pike - - .pmod - interpreters: - - pike - ace_mode: text - -Pod: - type: prose - ace_mode: perl - wrap: true - extensions: - - .pod - tm_scope: none - -PogoScript: - type: programming - color: "#d80074" - extensions: - - .pogo - tm_scope: source.pogoscript - ace_mode: text - -PostScript: - type: markup - extensions: - - .ps - - .eps - tm_scope: source.postscript - aliases: - - postscr - ace_mode: text - -PowerShell: - type: programming - ace_mode: powershell - aliases: - - posh - extensions: - - .ps1 - - .psd1 - - .psm1 - -Processing: - type: programming - color: "#0096D8" - extensions: - - .pde - ace_mode: text - -Prolog: - type: programming - color: "#74283c" - extensions: - - .pl - - .ecl - - .pro - - .prolog - interpreters: - - swipl - ace_mode: prolog - -Propeller Spin: - type: programming - color: "#7fa2a7" - extensions: - - .spin - tm_scope: source.spin - ace_mode: text - -Protocol Buffer: - type: markup - aliases: - - protobuf - - Protocol Buffers - extensions: - - .proto - tm_scope: source.protobuf - ace_mode: protobuf - -Public Key: - type: data - extensions: - - .asc - - .pub - tm_scope: none - ace_mode: text - -Puppet: - type: programming - color: "#332A77" - extensions: - - .pp - filenames: - - Modulefile - ace_mode: text - -Pure Data: - type: programming - color: "#91de79" - extensions: - - .pd - tm_scope: none - ace_mode: text - -PureBasic: - type: programming - color: "#5a6986" - extensions: - - .pb - - .pbi - tm_scope: none - ace_mode: text - -PureScript: - type: programming - color: "#1D222D" - extensions: - - .purs - tm_scope: source.haskell - ace_mode: haskell - -Python: - type: programming - ace_mode: python - color: "#3572A5" - extensions: - - .py - - .cgi - - .fcgi - - .gyp - - .lmi - - .pyde - - .pyp - - .pyt - - .pyw - - .tac - - .wsgi - - .xpy - filenames: - - BUILD - - SConscript - - SConstruct - - Snakefile - - wscript - interpreters: - - python - - python2 - - python3 - aliases: - - rusthon - -Python traceback: - type: data - group: Python - searchable: false - extensions: - - .pytb - tm_scope: text.python.traceback - ace_mode: text - -QML: - type: programming - color: "#44a51c" - extensions: - - .qml - - .qbs - tm_scope: source.qml - ace_mode: text - -QMake: - type: programming - extensions: - - .pro - - .pri - interpreters: - - qmake - ace_mode: text - -R: - type: programming - color: "#198ce7" - aliases: - - R - - Rscript - - splus - extensions: - - .r - - .rd - - .rsx - filenames: - - .Rprofile - interpreters: - - Rscript - ace_mode: r - -RAML: - type: data - ace_mode: yaml - tm_scope: source.yaml - color: "#77d9fb" - extensions: - - .raml - -RDoc: - type: prose - ace_mode: rdoc - wrap: true - extensions: - - .rdoc - tm_scope: text.rdoc - -REALbasic: - type: programming - extensions: - - .rbbas - - .rbfrm - - .rbmnu - - .rbres - - .rbtbar - - .rbuistate - tm_scope: source.vbnet - ace_mode: text - -RHTML: - type: markup - group: HTML - extensions: - - .rhtml - tm_scope: text.html.erb - aliases: - - html+ruby - ace_mode: rhtml - -RMarkdown: - type: prose - wrap: true - ace_mode: markdown - extensions: - - .rmd - tm_scope: none - -Racket: - type: programming - color: "#22228f" - extensions: - - .rkt - - .rktd - - .rktl - - .scrbl - interpreters: - - racket - tm_scope: source.racket - ace_mode: lisp - -Ragel in Ruby Host: - type: programming - color: "#e17600" - extensions: - - .rl - aliases: - - ragel-rb - - ragel-ruby - tm_scope: none - ace_mode: text - -Raw token data: - type: data - search_term: raw - aliases: - - raw - extensions: - - .raw - tm_scope: none - ace_mode: text - -Rebol: - type: programming - color: "#358a5b" - extensions: - - .reb - - .r - - .r2 - - .r3 - - .rebol - ace_mode: text - tm_scope: source.rebol - -Red: - type: programming - color: "#ee0000" - extensions: - - .red - - .reds - aliases: - - red/system - tm_scope: source.red - ace_mode: text - -Redcode: - type: programming - extensions: - - .cw - tm_scope: none - ace_mode: text - -RenderScript: - type: programming - extensions: - - .rs - - .rsh - tm_scope: none - ace_mode: text - -RobotFramework: - type: programming - extensions: - - .robot - # - .txt - tm_scope: text.robot - ace_mode: text - -Rouge: - type: programming - ace_mode: clojure - color: "#cc0088" - extensions: - - .rg - tm_scope: source.clojure - -Ruby: - type: programming - ace_mode: ruby - color: "#701516" - aliases: - - jruby - - macruby - - rake - - rb - - rbx - extensions: - - .rb - - .builder - - .fcgi - - .gemspec - - .god - - .irbrc - - .jbuilder - - .mspec - - .pluginspec - - .podspec - - .rabl - - .rake - - .rbuild - - .rbw - - .rbx - - .ru - - .ruby - - .thor - - .watchr - interpreters: - - ruby - - macruby - - rake - - jruby - - rbx - filenames: - - .pryrc - - Appraisals - - Berksfile - - Buildfile - - Deliverfile - - Fastfile - - Gemfile - - Gemfile.lock - - Guardfile - - Jarfile - - Mavenfile - - Podfile - - Puppetfile - - Snapfile - - Thorfile - - Vagrantfile - - buildfile - -Rust: - type: programming - color: "#dea584" - extensions: - - .rs - ace_mode: rust - -SAS: - type: programming - color: "#B34936" - extensions: - - .sas - tm_scope: source.sas - ace_mode: text - -SCSS: - type: markup - tm_scope: source.scss - group: CSS - ace_mode: scss - extensions: - - .scss - -SPARQL: - type: data - tm_scope: source.sparql - ace_mode: text - extensions: - - .sparql - - .rq - -SQF: - type: programming - color: "#3F3F3F" - extensions: - - .sqf - - .hqf - tm_scope: source.sqf - ace_mode: text - -SQL: - type: data - tm_scope: source.sql - ace_mode: sql - extensions: - - .sql - - .cql - - .ddl - - .prc - - .tab - - .udf - - .viw - -#IBM DB2 -SQLPL: - type: programming - ace_mode: sql - tm_scope: source.sql - extensions: - - .sql - - .db2 - -STON: - type: data - group: Smalltalk - extensions: - - .ston - tm_scope: source.smalltalk - ace_mode: text - -SVG: - type: data - extensions: - - .svg - tm_scope: text.xml - ace_mode: xml - -Sage: - type: programming - group: Python - extensions: - - .sage - - .sagews - tm_scope: source.python - ace_mode: python - -SaltStack: - type: programming - color: "#646464" - aliases: - - saltstate - - salt - extensions: - - .sls - tm_scope: source.yaml.salt - ace_mode: yaml - -Sass: - type: markup - tm_scope: source.sass - group: CSS - extensions: - - .sass - ace_mode: sass - -Scala: - type: programming - ace_mode: scala - color: "#7dd3b0" - extensions: - - .scala - - .sbt - - .sc - interpreters: - - scala - -Scaml: - group: HTML - type: markup - extensions: - - .scaml - tm_scope: source.scaml - ace_mode: text - -Scheme: - type: programming - color: "#1e4aec" - extensions: - - .scm - - .sld - - .sls - - .sps - - .ss - interpreters: - - guile - - bigloo - - chicken - ace_mode: scheme - -Scilab: - type: programming - extensions: - - .sci - - .sce - - .tst - ace_mode: text - -Self: - type: programming - color: "#0579aa" - extensions: - - .self - tm_scope: none - ace_mode: text - -Shell: - type: programming - search_term: bash - color: "#89e051" - aliases: - - sh - - bash - - zsh - extensions: - - .sh - - .bash - - .bats - - .cgi - - .command - - .fcgi - - .ksh - - .tmux - - .tool - - .zsh - interpreters: - - bash - - rc - - sh - - zsh - ace_mode: sh - -ShellSession: - type: programming - extensions: - - .sh-session - aliases: - - bash session - - console - tm_scope: text.shell-session - ace_mode: sh - -Shen: - type: programming - color: "#120F14" - extensions: - - .shen - tm_scope: none - ace_mode: text - -Slash: - type: programming - color: "#007eff" - extensions: - - .sl - tm_scope: text.html.slash - ace_mode: text - -Slim: - group: HTML - type: markup - color: "#ff8f77" - extensions: - - .slim - ace_mode: text - -Smali: - type: programming - extensions: - - .smali - ace_mode: text - tm_scope: source.smali - -Smalltalk: - type: programming - color: "#596706" - extensions: - - .st - - .cs - aliases: - - squeak - ace_mode: text - -Smarty: - type: programming - extensions: - - .tpl - ace_mode: smarty - tm_scope: text.html.smarty - -SourcePawn: - type: programming - color: "#5c7611" - aliases: - - sourcemod - extensions: - - .sp - - .sma - tm_scope: source.sp - ace_mode: text - -Squirrel: - type: programming - color: "#800000" - extensions: - - .nut - tm_scope: source.c++ - ace_mode: c_cpp - -Standard ML: - type: programming - color: "#dc566d" - aliases: - - sml - extensions: - - .ML - - .fun - - .sig - - .sml - tm_scope: source.ml - ace_mode: text - -Stata: - type: programming - extensions: - - .do - - .ado - - .doh - - .ihlp - - .mata - - .matah - - .sthlp - ace_mode: text - -Stylus: - type: markup - group: CSS - extensions: - - .styl - tm_scope: source.stylus - ace_mode: stylus - -SuperCollider: - type: programming - color: "#46390b" - extensions: - - .scd - - .sc - tm_scope: none - ace_mode: text - -Swift: - type: programming - color: "#ffac45" - extensions: - - .swift - ace_mode: text - -SystemVerilog: - type: programming - color: "#DAE1C2" - extensions: - - .sv - - .svh - - .vh - ace_mode: verilog - -TOML: - type: data - extensions: - - .toml - tm_scope: source.toml - ace_mode: toml - -TXL: - type: programming - extensions: - - .txl - tm_scope: source.txl - ace_mode: text - -Tcl: - type: programming - color: "#e4cc98" - extensions: - - .tcl - - .adp - - .tm - interpreters: - - tclsh - - wish - ace_mode: tcl - -Tcsh: - type: programming - group: Shell - extensions: - - .tcsh - - .csh - tm_scope: source.shell - ace_mode: sh - -TeX: - type: markup - color: "#3D6117" - ace_mode: tex - wrap: true - aliases: - - latex - extensions: - - .tex - - .aux - - .bbx - - .bib - - .cbx - - .cls - - .dtx - - .ins - - .lbx - - .ltx - - .mkii - - .mkiv - - .mkvi - - .sty - - .toc - -Tea: - type: markup - extensions: - - .tea - tm_scope: source.tea - ace_mode: text - -Text: - type: prose - wrap: true - aliases: - - fundamental - extensions: - - .txt - - .fr - tm_scope: none - ace_mode: text - -Textile: - type: prose - ace_mode: textile - wrap: true - extensions: - - .textile - tm_scope: none - -Thrift: - type: programming - tm_scope: source.thrift - extensions: - - .thrift - ace_mode: text - -Turing: - type: programming - color: "#45f715" - extensions: - - .t - - .tu - tm_scope: none - ace_mode: text - -Turtle: - type: data - extensions: - - .ttl - tm_scope: source.turtle - ace_mode: text - -Twig: - type: markup - group: HTML - extensions: - - .twig - tm_scope: text.html.twig - ace_mode: twig - -TypeScript: - type: programming - color: "#2b7489" - aliases: - - ts - extensions: - - .ts - tm_scope: source.ts - ace_mode: typescript - -Unified Parallel C: - type: programming - group: C - ace_mode: c_cpp - color: "#4e3617" - extensions: - - .upc - tm_scope: source.c - -Unity3D Asset: - type: data - ace_mode: yaml - color: "#ab69a1" - extensions: - - .anim - - .asset - - .mat - - .meta - - .prefab - - .unity - tm_scope: source.yaml - -UnrealScript: - type: programming - color: "#a54c4d" - extensions: - - .uc - tm_scope: source.java - ace_mode: java - -VCL: - group: Perl - type: programming - extensions: - - .vcl - tm_scope: source.varnish.vcl - ace_mode: text - -VHDL: - type: programming - color: "#adb2cb" - extensions: - - .vhdl - - .vhd - - .vhf - - .vhi - - .vho - - .vhs - - .vht - - .vhw - ace_mode: vhdl - -Vala: - type: programming - color: "#fbe5cd" - extensions: - - .vala - - .vapi - ace_mode: vala - -Verilog: - type: programming - color: "#b2b7f8" - extensions: - - .v - - .veo - ace_mode: verilog - -VimL: - type: programming - color: "#199f4b" - search_term: vim - aliases: - - vim - - nvim - extensions: - - .vim - filenames: - - .nvimrc - - .vimrc - - _vimrc - - gvimrc - - nvimrc - - vimrc - ace_mode: text - -Visual Basic: - type: programming - color: "#945db7" - extensions: - - .vb - - .bas - - .cls - - .frm - - .frx - - .vba - - .vbhtml - - .vbs - tm_scope: source.vbnet - aliases: - - vb.net - - vbnet - ace_mode: text - -Volt: - type: programming - color: "#1F1F1F" - extensions: - - .volt - tm_scope: source.d - ace_mode: d - -Web Ontology Language: - type: markup - color: "#9cc9dd" - extensions: - - .owl - tm_scope: text.xml - ace_mode: xml - -WebIDL: - type: programming - extensions: - - .webidl - tm_scope: source.webidl - ace_mode: text - -XC: - type: programming - color: "#99DA07" - extensions: - - .xc - tm_scope: source.xc - ace_mode: c_cpp - -XML: - type: data - ace_mode: xml - aliases: - - rss - - xsd - - wsdl - extensions: - - .xml - - .ant - - .axml - - .ccxml - - .clixml - - .cproject - - .csproj - - .ct - - .dita - - .ditamap - - .ditaval - - .dll.config - - .filters - - .fsproj - - .fxml - - .glade - - .gml - - .grxml - - .iml - - .ivy - - .jelly - - .kml - - .launch - - .mdpolicy - - .mm - - .mxml - - .nproj - - .nuspec - - .odd - - .osm - - .plist - - .pluginspec - - .ps1xml - - .psc1 - - .pt - - .rdf - - .rss - - .scxml - - .srdf - - .storyboard - - .stTheme - - .sublime-snippet - - .targets - - .tmCommand - - .tml - - .tmLanguage - - .tmPreferences - - .tmSnippet - - .tmTheme - - .ts - - .ui - - .urdf - - .vbproj - - .vcxproj - - .vxml - - .wsdl - - .wsf - - .wxi - - .wxl - - .wxs - - .x3d - - .xacro - - .xaml - - .xib - - .xlf - - .xliff - - .xmi - - .xml.dist - - .xsd - - .xul - - .zcml - filenames: - - .classpath - - .project - - Settings.StyleCop - - Web.Debug.config - - Web.Release.config - - Web.config - - packages.config - -XPages: - type: programming - extensions: - - .xsp-config - - .xsp.metadata - tm_scope: none - ace_mode: xml - -XProc: - type: programming - extensions: - - .xpl - - .xproc - tm_scope: text.xml - ace_mode: xml - -XQuery: - type: programming - color: "#5232e7" - extensions: - - .xquery - - .xq - - .xql - - .xqm - - .xqy - ace_mode: xquery - -XS: - type: programming - extensions: - - .xs - tm_scope: source.c - ace_mode: c_cpp - -XSLT: - type: programming - aliases: - - xsl - extensions: - - .xslt - - .xsl - tm_scope: text.xml.xsl - ace_mode: xml - -Xojo: - type: programming - extensions: - - .xojo_code - - .xojo_menu - - .xojo_report - - .xojo_script - - .xojo_toolbar - - .xojo_window - tm_scope: source.vbnet - ace_mode: text - -Xtend: - type: programming - extensions: - - .xtend - ace_mode: text - -YAML: - type: data - tm_scope: source.yaml - aliases: - - yml - extensions: - - .yml - - .reek - - .rviz - - .yaml - ace_mode: yaml - -Yacc: - type: programming - extensions: - - .y - - .yacc - - .yy - tm_scope: source.bison - ace_mode: text - -Zephir: - type: programming - color: "#118f9e" - extensions: - - .zep - tm_scope: source.php.zephir - ace_mode: php - -Zimpl: - type: programming - extensions: - - .zimpl - - .zmpl - - .zpl - tm_scope: none - ace_mode: text - -desktop: - type: data - extensions: - - .desktop - - .desktop.in - tm_scope: source.desktop - ace_mode: text - -eC: - type: programming - color: "#913960" - search_term: ec - extensions: - - .ec - - .eh - tm_scope: source.c.ec - ace_mode: text - -edn: - type: data - ace_mode: clojure - color: "#db5855" - extensions: - - .edn - tm_scope: source.clojure - -fish: - type: programming - group: Shell - extensions: - - .fish - tm_scope: source.fish - ace_mode: text - -mupad: - type: programming - extensions: - - .mu - ace_mode: text - -nesC: - type: programming - color: "#94B0C7" - extensions: - - .nc - ace_mode: text - -ooc: - type: programming - color: "#b0b77e" - extensions: - - .ooc - ace_mode: text - -reStructuredText: - type: prose - wrap: true - search_term: rst - aliases: - - rst - extensions: - - .rst - - .rest - ace_mode: text - -wisp: - type: programming - ace_mode: clojure - color: "#7582D1" - extensions: - - .wisp - tm_scope: source.clojure - -xBase: - type: programming - color: "#403a40" - extensions: - - .prg - tm_scope: none - ace_mode: text diff --git a/samples/XPages/UnpMain.xsp b/samples/XPages/UnpMain.xsp deleted file mode 100644 index e0eb6438..00000000 --- a/samples/XPages/UnpMain.xsp +++ /dev/null @@ -1,83 +0,0 @@ - - - -
-
- - -
- - - -
-
-
-
-

- Closed sales by team member - $000s - (December) -

-
-
-
-
-
- -
- -
- -
-
-
-
- - - - - -
\ No newline at end of file diff --git a/samples/XPages/demoServerRESTconsumption.xsp b/samples/XPages/demoServerRESTconsumption.xsp deleted file mode 100644 index 3334c777..00000000 --- a/samples/XPages/demoServerRESTconsumption.xsp +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/XPages/house.form b/samples/XPages/house.form deleted file mode 100644 index 7c47b41c..00000000 --- a/samples/XPages/house.form +++ /dev/null @@ -1,65 +0,0 @@ - -
- -20141225T155631,49-06 -20150306T091952,06-08 -20150306T091952,05-08 -20150306T091952,06-08 -20150305T162153,26-08 -CN=Eric McCormick/O=Eric McCormick -CN=Eric McCormick/O=Eric McCormick - - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - -house
diff --git a/samples/XPages/house.xsp b/samples/XPages/house.xsp deleted file mode 100644 index 3c5a6e13..00000000 --- a/samples/XPages/house.xsp +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - -
-
-
-
-

- -

-
-
- - - - -
- - -
-
- - - - - - - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
- - - - - - - - - - - - - - - - - -
-
-
-
-
-
-
\ No newline at end of file diff --git a/samples/XPages/houses.view b/samples/XPages/houses.view deleted file mode 100644 index 354c3aa0..00000000 --- a/samples/XPages/houses.view +++ /dev/null @@ -1,54 +0,0 @@ - - - -20141225T155658,43-06 -20150316T150218,60-07 -20150316T150218,59-07 -20150316T150218,60-07 -20150305T162151,76-08 -CN=Eric McCormick/O=Eric McCormick -CN=Eric McCormick/O=Eric McCormickSELECT Form = "house" - - - - - - - - - - - - - - - - - - - - - - - - -@Text(@DocumentUniqueID) diff --git a/samples/XPages/navbar.xsp b/samples/XPages/navbar.xsp deleted file mode 100755 index c7a5669e..00000000 --- a/samples/XPages/navbar.xsp +++ /dev/null @@ -1,53 +0,0 @@ - - - - \ No newline at end of file diff --git a/samples/XPages/xLogin.xsp b/samples/XPages/xLogin.xsp deleted file mode 100644 index 50afc329..00000000 --- a/samples/XPages/xLogin.xsp +++ /dev/null @@ -1,38 +0,0 @@ - - - - - UserID - Login - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 7563bf43e99828f5ef26e4623ae1902331f42da6 Mon Sep 17 00:00:00 2001 From: Eric McCormick Date: Mon, 13 Jul 2015 21:28:36 -0500 Subject: [PATCH 037/356] Revert "removed samples" This reverts commit ce8cfed7ff36adcd97a6811d485deb4f6402485a. --- lib/linguist/languages.yml | 3718 ++++++++++++++++++ samples/XPages/UnpMain.xsp | 83 + samples/XPages/demoServerRESTconsumption.xsp | 64 + samples/XPages/house.form | 65 + samples/XPages/house.xsp | 176 + samples/XPages/houses.view | 54 + samples/XPages/navbar.xsp | 53 + samples/XPages/xLogin.xsp | 38 + 8 files changed, 4251 insertions(+) create mode 100644 lib/linguist/languages.yml create mode 100644 samples/XPages/UnpMain.xsp create mode 100644 samples/XPages/demoServerRESTconsumption.xsp create mode 100644 samples/XPages/house.form create mode 100644 samples/XPages/house.xsp create mode 100644 samples/XPages/houses.view create mode 100755 samples/XPages/navbar.xsp create mode 100644 samples/XPages/xLogin.xsp diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml new file mode 100644 index 00000000..23b85226 --- /dev/null +++ b/lib/linguist/languages.yml @@ -0,0 +1,3718 @@ +# Defines all Languages known to GitHub. +# +# type - Either data, programming, markup, prose, or nil +# aliases - An Array of additional aliases (implicitly +# includes name.downcase) +# ace_mode - A String name of the Ace Mode used for highlighting whenever +# a file is edited. This must match one of the filenames in http://git.io/3XO_Cg. +# Use "text" if a mode does not exist. +# wrap - Boolean wrap to enable line wrapping (default: false) +# extensions - An Array of associated extensions (the first one is +# considered the primary extension) +# interpreters - An Array of associated interpreters +# searchable - Boolean flag to enable searching (defaults to true) +# search_term - Deprecated: Some languages maybe indexed under a +# different alias. Avoid defining new exceptions. +# color - CSS hex color to represent the language. +# tm_scope - The TextMate scope that represents this programming +# language. This should match one of the scopes listed in +# the grammars.yml file. Use "none" if there is no grammar +# for this language. +# group - Name of the parent language. Languages in a group are counted +# in the statistics as the parent language. +# +# Any additions or modifications (even trivial) should have corresponding +# test change in `test/test_blob.rb`. +# +# Please keep this list alphabetized. Capitalization comes before lower case. + +ABAP: + type: programming + color: "#E8274B" + extensions: + - .abap + ace_mode: abap + +AGS Script: + type: programming + color: "#B9D9FF" + aliases: + - ags + extensions: + - .asc + - .ash + tm_scope: source.c++ + ace_mode: c_cpp + +AMPL: + type: programming + color: "#E6EFBB" + extensions: + - .ampl + tm_scope: source.ampl + ace_mode: text + +ANTLR: + type: programming + color: "#9DC3FF" + extensions: + - .g4 + ace_mode: text + +API Blueprint: + type: markup + color: "#2ACCA8" + ace_mode: markdown + extensions: + - .apib + tm_scope: text.html.markdown.source.gfm.apib + +APL: + type: programming + color: "#5A8164" + extensions: + - .apl + - .dyalog + tm_scope: source.apl + ace_mode: text + +ASP: + type: programming + color: "#6a40fd" + search_term: aspx-vb + tm_scope: text.html.asp + aliases: + - aspx + - aspx-vb + extensions: + - .asp + - .asax + - .ascx + - .ashx + - .asmx + - .aspx + - .axd + ace_mode: text + +ATS: + type: programming + color: "#1ac620" + aliases: + - ats2 + extensions: + - .dats + - .hats + - .sats + tm_scope: source.ats + ace_mode: ocaml + +ActionScript: + type: programming + tm_scope: source.actionscript.3 + color: "#882B0F" + search_term: as3 + aliases: + - actionscript 3 + - actionscript3 + - as3 + extensions: + - .as + ace_mode: actionscript + +Ada: + type: programming + color: "#02f88c" + extensions: + - .adb + - .ada + - .ads + aliases: + - ada95 + - ada2005 + ace_mode: ada + +Agda: + type: programming + color: "#315665" + extensions: + - .agda + ace_mode: text + +Alloy: + type: programming # 'modeling' would be more appropiate + color: "#cc5c24" + extensions: + - .als + ace_mode: text + +Ant Build System: + type: data + tm_scope: text.xml.ant + filenames: + - ant.xml + - build.xml + ace_mode: xml + +ApacheConf: + type: markup + aliases: + - aconf + - apache + extensions: + - .apacheconf + - .vhost + tm_scope: source.apache-config + ace_mode: apache_conf + +Apex: + type: programming + extensions: + - .cls + tm_scope: source.java + ace_mode: java + +AppleScript: + type: programming + aliases: + - osascript + extensions: + - .applescript + - .scpt + interpreters: + - osascript + ace_mode: applescript + +Arc: + type: programming + color: "#aa2afe" + extensions: + - .arc + tm_scope: none + ace_mode: text + +Arduino: + type: programming + color: "#bd79d1" + extensions: + - .ino + tm_scope: source.c++ + ace_mode: c_cpp + +AsciiDoc: + type: prose + ace_mode: asciidoc + wrap: true + extensions: + - .asciidoc + - .adoc + - .asc + tm_scope: text.html.asciidoc + +AspectJ: + type: programming + color: "#a957b0" + extensions: + - .aj + tm_scope: none + ace_mode: text + +Assembly: + type: programming + color: "#6E4C13" + search_term: nasm + aliases: + - nasm + extensions: + - .asm + - .a51 + - .nasm + tm_scope: source.asm.x86 + ace_mode: assembly_x86 + +Augeas: + type: programming + extensions: + - .aug + tm_scope: none + ace_mode: text + +AutoHotkey: + type: programming + color: "#6594b9" + aliases: + - ahk + extensions: + - .ahk + - .ahkl + tm_scope: source.ahk + ace_mode: autohotkey + +AutoIt: + type: programming + color: "#1C3552" + aliases: + - au3 + - AutoIt3 + - AutoItScript + extensions: + - .au3 + tm_scope: source.autoit.3 + ace_mode: autohotkey + +Awk: + type: programming + extensions: + - .awk + - .auk + - .gawk + - .mawk + - .nawk + interpreters: + - awk + - gawk + - mawk + - nawk + ace_mode: text + +Batchfile: + type: programming + search_term: bat + aliases: + - bat + - batch + - dosbatch + - winbatch + extensions: + - .bat + - .cmd + tm_scope: source.dosbatch + ace_mode: batchfile + +Befunge: + type: programming + extensions: + - .befunge + ace_mode: text + +Bison: + type: programming + group: Yacc + tm_scope: source.bison + extensions: + - .bison + ace_mode: text + +BitBake: + type: programming + tm_scope: none + extensions: + - .bb + ace_mode: text + +BlitzBasic: + type: programming + aliases: + - b3d + - blitz3d + - blitzplus + - bplus + extensions: + - .bb + - .decls + tm_scope: source.blitzmax + ace_mode: text + +BlitzMax: + type: programming + color: "#cd6400" + extensions: + - .bmx + aliases: + - bmax + ace_mode: text + +Bluespec: + type: programming + extensions: + - .bsv + tm_scope: source.bsv + ace_mode: verilog + +Boo: + type: programming + color: "#d4bec1" + extensions: + - .boo + ace_mode: text + +Brainfuck: + type: programming + color: "#2F2530" + extensions: + - .b + - .bf + tm_scope: source.bf + ace_mode: text + +Brightscript: + type: programming + extensions: + - .brs + tm_scope: source.brightscript + ace_mode: text + +Bro: + type: programming + extensions: + - .bro + ace_mode: text + +C: + type: programming + color: "#555555" + extensions: + - .c + - .cats + - .h + - .idc + - .w + interpreters: + - tcc + ace_mode: c_cpp + +C#: + type: programming + ace_mode: csharp + tm_scope: source.cs + search_term: csharp + color: "#178600" + aliases: + - csharp + extensions: + - .cs + - .cshtml + - .csx + +C++: + type: programming + ace_mode: c_cpp + search_term: cpp + color: "#f34b7d" + aliases: + - cpp + extensions: + - .cpp + - .c++ + - .cc + - .cp + - .cxx + - .h + - .h++ + - .hh + - .hpp + - .hxx + - .inl + - .ipp + - .tcc + - .tpp + +C-ObjDump: + type: data + extensions: + - .c-objdump + tm_scope: objdump.x86asm + ace_mode: assembly_x86 + +C2hs Haskell: + type: programming + group: Haskell + aliases: + - c2hs + extensions: + - .chs + tm_scope: source.haskell + ace_mode: haskell + +CLIPS: + type: programming + extensions: + - .clp + tm_scope: source.clips + ace_mode: text + +CMake: + type: programming + extensions: + - .cmake + - .cmake.in + filenames: + - CMakeLists.txt + ace_mode: text + +COBOL: + type: programming + extensions: + - .cob + - .cbl + - .ccp + - .cobol + - .cpy + ace_mode: cobol + +CSS: + type: markup + tm_scope: source.css + ace_mode: css + color: "#563d7c" + extensions: + - .css + +Cap'n Proto: + type: programming + tm_scope: source.capnp + extensions: + - .capnp + ace_mode: text + +CartoCSS: + type: programming + aliases: + - Carto + extensions: + - .mss + ace_mode: text + tm_scope: source.css.mss + +Ceylon: + type: programming + extensions: + - .ceylon + ace_mode: text + +Chapel: + type: programming + color: "#8dc63f" + aliases: + - chpl + extensions: + - .chpl + ace_mode: text + +ChucK: + type: programming + extensions: + - .ck + tm_scope: source.java + ace_mode: java + +Cirru: + type: programming + color: "#ccccff" + ace_mode: cirru + extensions: + - .cirru + +Clarion: + type: programming + color: "#db901e" + ace_mode: text + extensions: + - .clw + tm_scope: source.clarion + +Clean: + type: programming + color: "#3F85AF" + extensions: + - .icl + - .dcl + tm_scope: none + ace_mode: text + +Clojure: + type: programming + ace_mode: clojure + color: "#db5855" + extensions: + - .clj + - .boot + - .cl2 + - .cljc + - .cljs + - .cljs.hl + - .cljscm + - .cljx + - .hic + filenames: + - riemann.config + +CoffeeScript: + type: programming + tm_scope: source.coffee + ace_mode: coffee + color: "#244776" + aliases: + - coffee + - coffee-script + extensions: + - .coffee + - ._coffee + - .cjsx + - .cson + - .iced + filenames: + - Cakefile + interpreters: + - coffee + +ColdFusion: + type: programming + group: ColdFusion + ace_mode: coldfusion + color: "#ed2cd6" + search_term: cfm + aliases: + - cfm + - cfml + - coldfusion html + extensions: + - .cfm + - .cfml + tm_scope: text.html.cfm + +ColdFusion CFC: + type: programming + group: ColdFusion + ace_mode: coldfusion + color: "#ed2cd6" + search_term: cfc + aliases: + - cfc + extensions: + - .cfc + tm_scope: source.cfscript + +Common Lisp: + type: programming + tm_scope: source.lisp + color: "#3fb68b" + aliases: + - lisp + extensions: + - .lisp + - .asd + - .cl + - .l + - .lsp + - .ny + - .podsl + interpreters: + - lisp + - sbcl + - ccl + - clisp + - ecl + ace_mode: lisp + +Component Pascal: + type: programming + color: "#b0ce4e" + extensions: + - .cp + - .cps + tm_scope: source.pascal + aliases: + - delphi + - objectpascal + ace_mode: pascal + +Cool: + type: programming + extensions: + - .cl + tm_scope: source.cool + ace_mode: text + +Coq: + type: programming + extensions: + - .coq + - .v + ace_mode: text + +Cpp-ObjDump: + type: data + extensions: + - .cppobjdump + - .c++-objdump + - .c++objdump + - .cpp-objdump + - .cxx-objdump + tm_scope: objdump.x86asm + aliases: + - c++-objdumb + ace_mode: assembly_x86 + +Creole: + type: prose + wrap: true + extensions: + - .creole + tm_scope: text.html.creole + ace_mode: text + +Crystal: + type: programming + color: "#776791" + extensions: + - .cr + ace_mode: ruby + tm_scope: source.ruby + interpreters: + - crystal + +Cucumber: + type: programming + extensions: + - .feature + tm_scope: text.gherkin.feature + aliases: + - gherkin + ace_mode: text + +Cuda: + type: programming + extensions: + - .cu + - .cuh + tm_scope: source.cuda-c++ + ace_mode: c_cpp + +Cycript: + type: programming + extensions: + - .cy + tm_scope: source.js + ace_mode: javascript + +Cython: + type: programming + group: Python + extensions: + - .pyx + - .pxd + - .pxi + aliases: + - pyrex + ace_mode: text + +D: + type: programming + color: "#fcd46d" + extensions: + - .d + - .di + ace_mode: d + +D-ObjDump: + type: data + extensions: + - .d-objdump + tm_scope: objdump.x86asm + ace_mode: assembly_x86 + +DIGITAL Command Language: + type: programming + aliases: + - dcl + extensions: + - .com + tm_scope: none + ace_mode: text + +DM: + type: programming + color: "#447265" + extensions: + - .dm + aliases: + - byond + tm_scope: source.c++ + ace_mode: c_cpp + +DTrace: + type: programming + aliases: + - dtrace-script + extensions: + - .d + interpreters: + - dtrace + tm_scope: source.c + ace_mode: c_cpp + +Darcs Patch: + type: data + search_term: dpatch + aliases: + - dpatch + extensions: + - .darcspatch + - .dpatch + tm_scope: none + ace_mode: text + +Dart: + type: programming + color: "#00B4AB" + extensions: + - .dart + ace_mode: dart + +Diff: + type: data + color: "#88dddd" + extensions: + - .diff + - .patch + aliases: + - udiff + tm_scope: source.diff + ace_mode: diff + +Dockerfile: + type: data + tm_scope: source.dockerfile + extensions: + - .dockerfile + filenames: + - Dockerfile + ace_mode: dockerfile + +Dogescript: + type: programming + color: "#cca760" + extensions: + - .djs + tm_scope: none + ace_mode: text + +Dylan: + type: programming + color: "#6c616e" + extensions: + - .dylan + - .dyl + - .intr + - .lid + ace_mode: text + +E: + type: programming + color: "#ccce35" + extensions: + - .E + tm_scope: none + ace_mode: text + +ECL: + type: programming + color: "#8a1267" + extensions: + - .ecl + - .eclxml + tm_scope: none + ace_mode: text + +Eagle: + type: markup + color: "#814C05" + extensions: + - .sch + - .brd + tm_scope: text.xml + ace_mode: xml + +Ecere Projects: + type: data + group: JavaScript + extensions: + - .epj + tm_scope: source.json + ace_mode: json + +Eiffel: + type: programming + color: "#946d57" + extensions: + - .e + ace_mode: eiffel + +Elixir: + type: programming + color: "#6e4a7e" + extensions: + - .ex + - .exs + ace_mode: elixir + filenames: + - mix.lock + +Elm: + type: programming + color: "#60B5CC" + extensions: + - .elm + tm_scope: source.elm + ace_mode: elm + +Emacs Lisp: + type: programming + tm_scope: source.lisp + color: "#c065db" + aliases: + - elisp + - emacs + filenames: + - .emacs + - .emacs.desktop + extensions: + - .el + - .emacs + - .emacs.desktop + ace_mode: lisp + +EmberScript: + type: programming + color: "#FFF4F3" + extensions: + - .em + - .emberscript + tm_scope: source.coffee + ace_mode: coffee + +Erlang: + type: programming + color: "#B83998" + extensions: + - .erl + - .es + - .escript + - .hrl + filenames: + - rebar.config + - rebar.config.lock + - rebar.lock + ace_mode: erlang + interpreters: + - escript + +F#: + type: programming + color: "#b845fc" + search_term: fsharp + aliases: + - fsharp + extensions: + - .fs + - .fsi + - .fsx + tm_scope: source.fsharp + ace_mode: text + +FLUX: + type: programming + color: "#88ccff" + extensions: + - .fx + - .flux + tm_scope: none + ace_mode: text + +FORTRAN: + type: programming + color: "#4d41b1" + extensions: + - .f90 + - .f + - .f03 + - .f08 + - .f77 + - .f95 + - .for + - .fpp + tm_scope: source.fortran.modern + ace_mode: text + +Factor: + type: programming + color: "#636746" + extensions: + - .factor + filenames: + - .factor-boot-rc + - .factor-rc + ace_mode: text + +Fancy: + type: programming + color: "#7b9db4" + extensions: + - .fy + - .fancypack + filenames: + - Fakefile + ace_mode: text + +Fantom: + type: programming + color: "#dbded5" + extensions: + - .fan + tm_scope: source.fan + ace_mode: text + +Filterscript: + type: programming + group: RenderScript + extensions: + - .fs + tm_scope: none + ace_mode: text + +Formatted: + type: data + extensions: + - .for + tm_scope: none + ace_mode: text + +Forth: + type: programming + color: "#341708" + extensions: + - .fth + - .4th + - .f + - .for + - .forth + - .fr + - .frt + - .fs + ace_mode: forth + +Frege: + type: programming + color: "#00cafe" + extensions: + - .fr + tm_scope: source.haskell + ace_mode: haskell + +G-code: + type: data + extensions: + - .g + - .gco + - .gcode + tm_scope: source.gcode + ace_mode: gcode + +GAMS: + type: programming + extensions: + - .gms + tm_scope: none + ace_mode: text + +GAP: + type: programming + extensions: + - .g + - .gap + - .gd + - .gi + - .tst + tm_scope: source.gap + ace_mode: text + +GAS: + type: programming + group: Assembly + extensions: + - .s + tm_scope: source.asm.x86 + ace_mode: assembly_x86 + +GDScript: + type: programming + extensions: + - .gd + tm_scope: source.gdscript + ace_mode: text + +GLSL: + type: programming + extensions: + - .glsl + - .fp + - .frag + - .frg + - .fs + - .fshader + - .geo + - .geom + - .glslv + - .gshader + - .shader + - .vert + - .vrx + - .vshader + ace_mode: glsl + +Game Maker Language: + type: programming + color: "#8fb200" + extensions: + - .gml + tm_scope: source.c++ + ace_mode: c_cpp + +Genshi: + type: programming + extensions: + - .kid + tm_scope: text.xml.genshi + aliases: + - xml+genshi + - xml+kid + ace_mode: xml + +Gentoo Ebuild: + type: programming + group: Shell + extensions: + - .ebuild + tm_scope: source.shell + ace_mode: sh + +Gentoo Eclass: + type: programming + group: Shell + extensions: + - .eclass + tm_scope: source.shell + ace_mode: sh + +Gettext Catalog: + type: prose + search_term: pot + searchable: false + aliases: + - pot + extensions: + - .po + - .pot + tm_scope: source.po + ace_mode: text + +Glyph: + type: programming + color: "#e4cc98" + extensions: + - .glf + tm_scope: source.tcl + ace_mode: tcl + +Gnuplot: + type: programming + color: "#f0a9f0" + extensions: + - .gp + - .gnu + - .gnuplot + - .plot + - .plt + interpreters: + - gnuplot + ace_mode: text + +Go: + type: programming + color: "#375eab" + extensions: + - .go + ace_mode: golang + +Golo: + type: programming + color: "#88562A" + extensions: + - .golo + tm_scope: source.golo + ace_mode: text + +Gosu: + type: programming + color: "#82937f" + extensions: + - .gs + - .gst + - .gsx + - .vark + tm_scope: source.gosu.2 + ace_mode: text + +Grace: + type: programming + extensions: + - .grace + tm_scope: source.grace + ace_mode: text + +Gradle: + type: data + extensions: + - .gradle + tm_scope: source.groovy.gradle + ace_mode: text + +Grammatical Framework: + type: programming + aliases: + - gf + wrap: false + extensions: + - .gf + searchable: true + color: "#79aa7a" + tm_scope: source.haskell + ace_mode: haskell + +Graph Modeling Language: + type: data + extensions: + - .gml + tm_scope: none + ace_mode: text + +Graphviz (DOT): + type: data + tm_scope: source.dot + extensions: + - .dot + - .gv + ace_mode: text + +Groff: + type: markup + extensions: + - .man + - '.1' + - '.2' + - '.3' + - '.4' + - '.5' + - '.6' + - '.7' + - .l + tm_scope: text.groff + aliases: + - nroff + ace_mode: text + +Groovy: + type: programming + ace_mode: groovy + color: "#e69f56" + extensions: + - .groovy + - .grt + - .gtpl + - .gvy + interpreters: + - groovy + +Groovy Server Pages: + type: programming + group: Groovy + aliases: + - gsp + - java server page + extensions: + - .gsp + tm_scope: text.html.jsp + ace_mode: jsp + +HTML: + type: markup + tm_scope: text.html.basic + ace_mode: html + color: "#e44b23" + aliases: + - xhtml + extensions: + - .html + - .htm + - .html.hl + - .st + - .xht + - .xhtml + +HTML+Django: + type: markup + tm_scope: text.html.django + group: HTML + extensions: + - .mustache + - .jinja + aliases: + - html+django/jinja + - html+jinja + - htmldjango + ace_mode: django + +HTML+ERB: + type: markup + tm_scope: text.html.erb + group: HTML + aliases: + - erb + extensions: + - .erb + - .erb.deface + ace_mode: html_ruby + +HTML+PHP: + type: markup + tm_scope: text.html.php + group: HTML + extensions: + - .phtml + ace_mode: php + +HTTP: + type: data + extensions: + - .http + tm_scope: source.httpspec + ace_mode: text + +Hack: + type: programming + ace_mode: php + extensions: + - .hh + - .php + tm_scope: text.html.php + +Haml: + group: HTML + type: markup + extensions: + - .haml + - .haml.deface + ace_mode: haml + +Handlebars: + type: markup + color: "#01a9d6" + aliases: + - hbs + - htmlbars + extensions: + - .handlebars + - .hbs + tm_scope: text.html.handlebars + ace_mode: handlebars + +Harbour: + type: programming + color: "#0e60e3" + extensions: + - .hb + tm_scope: none + ace_mode: text + +Haskell: + type: programming + color: "#29b544" + extensions: + - .hs + - .hsc + ace_mode: haskell + +Haxe: + type: programming + ace_mode: haxe + color: "#f7941e" + extensions: + - .hx + - .hxsl + tm_scope: source.haxe.2 + +Hy: + type: programming + ace_mode: text + color: "#7790B2" + extensions: + - .hy + aliases: + - hylang + tm_scope: source.hy + +HyPhy: + type: programming + ace_mode: text + extensions: + - .bf + tm_scope: none + +IDL: + type: programming + color: "#a3522f" + extensions: + - .pro + - .dlm + ace_mode: text + +IGOR Pro: + type: programming + extensions: + - .ipf + aliases: + - igor + - igorpro + tm_scope: none + ace_mode: text + +INI: + type: data + extensions: + - .ini + - .cfg + - .prefs + - .pro + - .properties + tm_scope: source.ini + aliases: + - dosini + ace_mode: ini + +IRC log: + type: data + search_term: irc + aliases: + - irc + - irc logs + extensions: + - .irclog + - .weechatlog + tm_scope: none + ace_mode: text + +Idris: + type: programming + extensions: + - .idr + - .lidr + ace_mode: text + +Inform 7: + type: programming + wrap: true + extensions: + - .ni + - .i7x + tm_scope: source.Inform7 + aliases: + - i7 + - inform7 + ace_mode: text + +Inno Setup: + type: programming + extensions: + - .iss + tm_scope: source.inno + ace_mode: text + +Io: + type: programming + color: "#a9188d" + extensions: + - .io + ace_mode: io + +Ioke: + type: programming + color: "#078193" + extensions: + - .ik + interpreters: + - ioke + ace_mode: text + +Isabelle: + type: programming + color: "#FEFE00" + extensions: + - .thy + tm_scope: source.isabelle.theory + ace_mode: text + +J: + type: programming + color: "#9EEDFF" + extensions: + - .ijs + tm_scope: source.j + ace_mode: text + +JFlex: + type: programming + color: "#DBCA00" + group: Lex + extensions: + - .flex + - .jflex + tm_scope: source.jflex + ace_mode: text + +JSON: + type: data + tm_scope: source.json + group: JavaScript + ace_mode: json + searchable: false + extensions: + - .json + - .lock + filenames: + - .jshintrc + - composer.lock + +JSON5: + type: data + extensions: + - .json5 + tm_scope: source.js + ace_mode: javascript + +JSONLD: + type: data + group: JavaScript + ace_mode: javascript + extensions: + - .jsonld + tm_scope: source.js + +JSONiq: + type: programming + ace_mode: jsoniq + extensions: + - .jq + tm_scope: source.xquery + +Jade: + group: HTML + type: markup + extensions: + - .jade + tm_scope: source.jade + ace_mode: jade + +Jasmin: + type: programming + ace_mode: java + extensions: + - .j + tm_scope: source.jasmin + +Java: + type: programming + ace_mode: java + color: "#b07219" + extensions: + - .java + +Java Server Pages: + type: programming + group: Java + search_term: jsp + aliases: + - jsp + extensions: + - .jsp + tm_scope: text.html.jsp + ace_mode: jsp + +JavaScript: + type: programming + tm_scope: source.js + ace_mode: javascript + color: "#f1e05a" + aliases: + - js + - node + extensions: + - .js + - ._js + - .bones + - .es6 + - .frag + - .gs + - .jake + - .jsb + - .jsfl + - .jsm + - .jss + - .jsx + - .njs + - .pac + - .sjs + - .ssjs + - .sublime-build + - .sublime-commands + - .sublime-completions + - .sublime-keymap + - .sublime-macro + - .sublime-menu + - .sublime-mousemap + - .sublime-project + - .sublime-settings + - .sublime-theme + - .sublime-workspace + - .sublime_metrics + - .sublime_session + - .xsjs + - .xsjslib + filenames: + - Jakefile + interpreters: + - node + +Julia: + type: programming + extensions: + - .jl + color: "#a270ba" + ace_mode: julia + +KRL: + type: programming + color: "#28431f" + extensions: + - .krl + tm_scope: none + ace_mode: text + +KiCad: + type: programming + extensions: + - .sch + tm_scope: none + ace_mode: text + +Kit: + type: markup + ace_mode: html + extensions: + - .kit + tm_scope: text.html.basic + +Kotlin: + type: programming + color: "#EA4DFA" + extensions: + - .kt + - .ktm + - .kts + tm_scope: source.Kotlin + ace_mode: text + +LFE: + type: programming + extensions: + - .lfe + color: "#004200" + group: Erlang + tm_scope: source.lisp + ace_mode: lisp + +LLVM: + type: programming + extensions: + - .ll + ace_mode: text + +LOLCODE: + type: programming + extensions: + - .lol + color: "#cc9900" + tm_scope: none + ace_mode: text + +LSL: + type: programming + ace_mode: lsl + extensions: + - .lsl + interpreters: + - lsl + color: '#3d9970' + +LabVIEW: + type: programming + extensions: + - .lvproj + tm_scope: none + ace_mode: text + +Lasso: + type: programming + color: "#999999" + extensions: + - .lasso + - .las + - .lasso8 + - .lasso9 + - .ldml + tm_scope: file.lasso + aliases: + - lassoscript + ace_mode: text + +Latte: + type: markup + color: "#A8FF97" + group: HTML + extensions: + - .latte + tm_scope: text.html.smarty + ace_mode: smarty + +Lean: + type: programming + extensions: + - .lean + - .hlean + ace_mode: lean + +Less: + type: markup + group: CSS + extensions: + - .less + tm_scope: source.css.less + ace_mode: less + +Lex: + type: programming + color: "#DBCA00" + aliases: + - flex + extensions: + - .l + - .lex + tm_scope: none + ace_mode: text + +LilyPond: + type: programming + extensions: + - .ly + - .ily + ace_mode: text + +Limbo: + type: programming + extensions: + - .b + - .m + tm_scope: none + ace_mode: text + +Linker Script: + type: data + extensions: + - .ld + - .lds + filenames: + - ld.script + tm_scope: none + ace_mode: text + +Liquid: + type: markup + extensions: + - .liquid + tm_scope: text.html.liquid + ace_mode: liquid + +Literate Agda: + type: programming + group: Agda + extensions: + - .lagda + tm_scope: none + ace_mode: text + +Literate CoffeeScript: + type: programming + tm_scope: source.litcoffee + group: CoffeeScript + ace_mode: markdown + wrap: true + search_term: litcoffee + aliases: + - litcoffee + extensions: + - .litcoffee + ace_mode: text + +Literate Haskell: + type: programming + group: Haskell + search_term: lhs + aliases: + - lhaskell + - lhs + extensions: + - .lhs + tm_scope: text.tex.latex.haskell + ace_mode: text + +LiveScript: + type: programming + color: "#499886" + aliases: + - live-script + - ls + extensions: + - .ls + - ._ls + filenames: + - Slakefile + ace_mode: livescript + +Logos: + type: programming + extensions: + - .xm + - .x + - .xi + ace_mode: text + +Logtalk: + type: programming + extensions: + - .lgt + - .logtalk + ace_mode: text + +LookML: + type: programming + ace_mode: yaml + color: "#652B81" + extensions: + - .lookml + tm_scope: source.yaml + +LoomScript: + type: programming + extensions: + - .ls + tm_scope: source.loomscript + ace_mode: text + +Lua: + type: programming + ace_mode: lua + color: "#000080" + extensions: + - .lua + - .fcgi + - .nse + - .pd_lua + - .rbxs + - .wlua + interpreters: + - lua + +M: + type: programming + aliases: + - mumps + extensions: + - .mumps + - .m + tm_scope: source.lisp + ace_mode: lisp + +MTML: + type: markup + color: "#b7e1f4" + extensions: + - .mtml + tm_scope: text.html.basic + ace_mode: html + +MUF: + type: programming + group: Forth + extensions: + - .muf + - .m + tm_scope: none + ace_mode: forth + +Makefile: + type: programming + color: "#427819" + aliases: + - bsdmake + - make + - mf + extensions: + - .mak + - .d + - .mk + filenames: + - GNUmakefile + - Kbuild + - Makefile + - makefile + interpreters: + - make + ace_mode: makefile + +Mako: + type: programming + extensions: + - .mako + - .mao + tm_scope: text.html.mako + ace_mode: text + +Markdown: + type: prose + ace_mode: markdown + wrap: true + extensions: + - .md + - .markdown + - .mkd + - .mkdn + - .mkdown + - .ron + tm_scope: source.gfm + +Mask: + type: markup + color: "#f97732" + ace_mode: mask + extensions: + - .mask + tm_scope: source.mask + +Mathematica: + type: programming + extensions: + - .mathematica + - .cdf + - .m + - .ma + - .nb + - .nbp + - .wl + - .wlt + aliases: + - mma + ace_mode: text + +Matlab: + type: programming + color: "#bb92ac" + extensions: + - .matlab + - .m + ace_mode: matlab + +Maven POM: + type: data + tm_scope: text.xml.pom + filenames: + - pom.xml + ace_mode: xml + +Max: + type: programming + color: "#c4a79c" + aliases: + - max/msp + - maxmsp + search_term: max/msp + extensions: + - .maxpat + - .maxhelp + - .maxproj + - .mxt + - .pat + tm_scope: source.json + ace_mode: json + +MediaWiki: + type: prose + wrap: true + extensions: + - .mediawiki + tm_scope: text.html.mediawiki + ace_mode: text + +Mercury: + type: programming + color: "#ff2b2b" + ace_mode: prolog + interpreters: + - mmi + extensions: + - .m + - .moo + tm_scope: source.mercury + ace_mode: prolog + +MiniD: # Legacy + type: programming + searchable: false + extensions: + - .minid # Dummy extension + tm_scope: none + ace_mode: text + +Mirah: + type: programming + search_term: mirah + color: "#c7a938" + extensions: + - .druby + - .duby + - .mir + - .mirah + tm_scope: source.ruby + ace_mode: ruby + +Modelica: + type: programming + extensions: + - .mo + tm_scope: source.modelica + ace_mode: text + +Module Management System: + type: programming + extensions: + - .mms + - .mmk + filenames: + - descrip.mmk + - descrip.mms + tm_scope: none + ace_mode: text + +Monkey: + type: programming + extensions: + - .monkey + ace_mode: text + +Moocode: + type: programming + extensions: + - .moo + tm_scope: none + ace_mode: text + +MoonScript: + type: programming + extensions: + - .moon + interpreters: + - moon + ace_mode: text + +Myghty: + type: programming + extensions: + - .myt + tm_scope: none + ace_mode: text + +NL: + type: data + extensions: + - .nl + tm_scope: none + ace_mode: text + +NSIS: + type: programming + extensions: + - .nsi + - .nsh + ace_mode: text + +Nemerle: + type: programming + color: "#3d3c6e" + extensions: + - .n + ace_mode: text + +NetLinx: + type: programming + color: "#0aa0ff" + extensions: + - .axs + - .axi + tm_scope: source.netlinx + ace_mode: text + +NetLinx+ERB: + type: programming + color: "#747faa" + extensions: + - .axs.erb + - .axi.erb + tm_scope: source.netlinx.erb + ace_mode: text + +NetLogo: + type: programming + color: "#ff6375" + extensions: + - .nlogo + tm_scope: source.lisp + ace_mode: lisp + +NewLisp: + type: programming + lexer: NewLisp + color: "#87AED7" + extensions: + - .nl + - .lisp + - .lsp + interpreters: + - newlisp + tm_scope: source.lisp + ace_mode: lisp + +Nginx: + type: markup + extensions: + - .nginxconf + - .vhost + filenames: + - nginx.conf + tm_scope: source.nginx + aliases: + - nginx configuration file + ace_mode: text + +Nimrod: + type: programming + color: "#37775b" + extensions: + - .nim + - .nimrod + ace_mode: text + tm_scope: source.nim + +Ninja: + type: data + tm_scope: source.ninja + extensions: + - .ninja + ace_mode: text + +Nit: + type: programming + color: "#009917" + extensions: + - .nit + tm_scope: source.nit + ace_mode: text + +Nix: + type: programming + color: "#7e7eff" + extensions: + - .nix + aliases: + - nixos + tm_scope: source.nix + ace_mode: nix + +Nu: + type: programming + color: "#c9df40" + aliases: + - nush + extensions: + - .nu + filenames: + - Nukefile + tm_scope: source.scheme + ace_mode: scheme + interpreters: + - nush + +NumPy: + type: programming + group: Python + extensions: + - .numpy + - .numpyw + - .numsc + tm_scope: none + ace_mode: text + +OCaml: + type: programming + ace_mode: ocaml + color: "#3be133" + extensions: + - .ml + - .eliom + - .eliomi + - .ml4 + - .mli + - .mll + - .mly + interpreters: + - ocaml + - ocamlrun + tm_scope: source.ocaml + +ObjDump: + type: data + extensions: + - .objdump + tm_scope: objdump.x86asm + ace_mode: assembly_x86 + +Objective-C: + type: programming + tm_scope: source.objc + color: "#438eff" + aliases: + - obj-c + - objc + - objectivec + extensions: + - .m + - .h + ace_mode: objectivec + +Objective-C++: + type: programming + tm_scope: source.objc++ + color: "#6866fb" + aliases: + - obj-c++ + - objc++ + - objectivec++ + extensions: + - .mm + ace_mode: objectivec + +Objective-J: + type: programming + color: "#ff0c5a" + aliases: + - obj-j + - objectivej + - objj + extensions: + - .j + - .sj + tm_scope: source.js.objj + ace_mode: text + +Omgrofl: + type: programming + extensions: + - .omgrofl + color: "#cabbff" + tm_scope: none + ace_mode: text + +Opa: + type: programming + extensions: + - .opa + ace_mode: text + +Opal: + type: programming + color: "#f7ede0" + extensions: + - .opal + tm_scope: source.opal + ace_mode: text + +OpenCL: + type: programming + group: C + extensions: + - .cl + - .opencl + tm_scope: source.c + ace_mode: c_cpp + +OpenEdge ABL: + type: programming + aliases: + - progress + - openedge + - abl + extensions: + - .p + - .cls + tm_scope: source.abl + ace_mode: text + +OpenSCAD: + type: programming + extensions: + - .scad + tm_scope: source.scad + ace_mode: scad + +Org: + type: prose + wrap: true + extensions: + - .org + tm_scope: none + ace_mode: text + +Ox: + type: programming + extensions: + - .ox + - .oxh + - .oxo + tm_scope: source.ox + ace_mode: text + +Oxygene: + type: programming + color: "#cdd0e3" + extensions: + - .oxygene + tm_scope: none + ace_mode: text + +Oz: + type: programming + color: "#fab738" + extensions: + - .oz + tm_scope: source.oz + ace_mode: text + +PAWN: + type: programming + color: "#dbb284" + extensions: + - .pwn + tm_scope: source.c++ + ace_mode: c_cpp + +PHP: + type: programming + tm_scope: text.html.php + ace_mode: php + color: "#4F5D95" + extensions: + - .php + - .aw + - .ctp + - .fcgi + - .php3 + - .php4 + - .php5 + - .phpt + filenames: + - Phakefile + interpreters: + - php + aliases: + - inc + +#Oracle +PLSQL: + type: programming + ace_mode: sql + tm_scope: source.plsql.oracle + extensions: + - .pls + - .pkb + - .pks + - .plb + - .plsql + - .sql + +#Postgres +PLpgSQL: + type: programming + ace_mode: pgsql + tm_scope: source.sql + extensions: + - .sql + +Pan: + type: programming + color: '#cc0000' + extensions: + - .pan + tm_scope: none + ace_mode: text + +Papyrus: + type: programming + color: "#6600cc" + extensions: + - .psc + tm_scope: source.papyrus + ace_mode: text + +Parrot: + type: programming + color: "#f3ca0a" + extensions: + - .parrot # Dummy extension + tm_scope: none + ace_mode: text + +Parrot Assembly: + group: Parrot + type: programming + aliases: + - pasm + extensions: + - .pasm + interpreters: + - parrot + tm_scope: none + ace_mode: text + +Parrot Internal Representation: + group: Parrot + tm_scope: source.parrot.pir + type: programming + aliases: + - pir + extensions: + - .pir + interpreters: + - parrot + ace_mode: text + +Pascal: + type: programming + color: "#b0ce4e" + extensions: + - .pas + - .dfm + - .dpr + - .lpr + - .pp + ace_mode: pascal + +Perl: + type: programming + tm_scope: source.perl + ace_mode: perl + color: "#0298c3" + extensions: + - .pl + - .al + - .cgi + - .fcgi + - .perl + - .ph + - .plx + - .pm + - .pod + - .psgi + - .t + interpreters: + - perl + +Perl6: + type: programming + color: "#0000fb" + extensions: + - .6pl + - .6pm + - .nqp + - .p6 + - .p6l + - .p6m + - .pl + - .pl6 + - .pm + - .pm6 + - .t + filenames: + - Rexfile + interpreters: + - perl6 + tm_scope: source.perl.6 + ace_mode: perl + +PigLatin: + type: programming + color: "#fcd7de" + extensions: + - .pig + tm_scope: source.pig_latin + ace_mode: text + +Pike: + type: programming + color: "#005390" + extensions: + - .pike + - .pmod + interpreters: + - pike + ace_mode: text + +Pod: + type: prose + ace_mode: perl + wrap: true + extensions: + - .pod + tm_scope: none + +PogoScript: + type: programming + color: "#d80074" + extensions: + - .pogo + tm_scope: source.pogoscript + ace_mode: text + +PostScript: + type: markup + extensions: + - .ps + - .eps + tm_scope: source.postscript + aliases: + - postscr + ace_mode: text + +PowerShell: + type: programming + ace_mode: powershell + aliases: + - posh + extensions: + - .ps1 + - .psd1 + - .psm1 + +Processing: + type: programming + color: "#0096D8" + extensions: + - .pde + ace_mode: text + +Prolog: + type: programming + color: "#74283c" + extensions: + - .pl + - .ecl + - .pro + - .prolog + interpreters: + - swipl + ace_mode: prolog + +Propeller Spin: + type: programming + color: "#7fa2a7" + extensions: + - .spin + tm_scope: source.spin + ace_mode: text + +Protocol Buffer: + type: markup + aliases: + - protobuf + - Protocol Buffers + extensions: + - .proto + tm_scope: source.protobuf + ace_mode: protobuf + +Public Key: + type: data + extensions: + - .asc + - .pub + tm_scope: none + ace_mode: text + +Puppet: + type: programming + color: "#332A77" + extensions: + - .pp + filenames: + - Modulefile + ace_mode: text + +Pure Data: + type: programming + color: "#91de79" + extensions: + - .pd + tm_scope: none + ace_mode: text + +PureBasic: + type: programming + color: "#5a6986" + extensions: + - .pb + - .pbi + tm_scope: none + ace_mode: text + +PureScript: + type: programming + color: "#1D222D" + extensions: + - .purs + tm_scope: source.haskell + ace_mode: haskell + +Python: + type: programming + ace_mode: python + color: "#3572A5" + extensions: + - .py + - .cgi + - .fcgi + - .gyp + - .lmi + - .pyde + - .pyp + - .pyt + - .pyw + - .tac + - .wsgi + - .xpy + filenames: + - BUILD + - SConscript + - SConstruct + - Snakefile + - wscript + interpreters: + - python + - python2 + - python3 + aliases: + - rusthon + +Python traceback: + type: data + group: Python + searchable: false + extensions: + - .pytb + tm_scope: text.python.traceback + ace_mode: text + +QML: + type: programming + color: "#44a51c" + extensions: + - .qml + - .qbs + tm_scope: source.qml + ace_mode: text + +QMake: + type: programming + extensions: + - .pro + - .pri + interpreters: + - qmake + ace_mode: text + +R: + type: programming + color: "#198ce7" + aliases: + - R + - Rscript + - splus + extensions: + - .r + - .rd + - .rsx + filenames: + - .Rprofile + interpreters: + - Rscript + ace_mode: r + +RAML: + type: data + ace_mode: yaml + tm_scope: source.yaml + color: "#77d9fb" + extensions: + - .raml + +RDoc: + type: prose + ace_mode: rdoc + wrap: true + extensions: + - .rdoc + tm_scope: text.rdoc + +REALbasic: + type: programming + extensions: + - .rbbas + - .rbfrm + - .rbmnu + - .rbres + - .rbtbar + - .rbuistate + tm_scope: source.vbnet + ace_mode: text + +RHTML: + type: markup + group: HTML + extensions: + - .rhtml + tm_scope: text.html.erb + aliases: + - html+ruby + ace_mode: rhtml + +RMarkdown: + type: prose + wrap: true + ace_mode: markdown + extensions: + - .rmd + tm_scope: none + +Racket: + type: programming + color: "#22228f" + extensions: + - .rkt + - .rktd + - .rktl + - .scrbl + interpreters: + - racket + tm_scope: source.racket + ace_mode: lisp + +Ragel in Ruby Host: + type: programming + color: "#e17600" + extensions: + - .rl + aliases: + - ragel-rb + - ragel-ruby + tm_scope: none + ace_mode: text + +Raw token data: + type: data + search_term: raw + aliases: + - raw + extensions: + - .raw + tm_scope: none + ace_mode: text + +Rebol: + type: programming + color: "#358a5b" + extensions: + - .reb + - .r + - .r2 + - .r3 + - .rebol + ace_mode: text + tm_scope: source.rebol + +Red: + type: programming + color: "#ee0000" + extensions: + - .red + - .reds + aliases: + - red/system + tm_scope: source.red + ace_mode: text + +Redcode: + type: programming + extensions: + - .cw + tm_scope: none + ace_mode: text + +RenderScript: + type: programming + extensions: + - .rs + - .rsh + tm_scope: none + ace_mode: text + +RobotFramework: + type: programming + extensions: + - .robot + # - .txt + tm_scope: text.robot + ace_mode: text + +Rouge: + type: programming + ace_mode: clojure + color: "#cc0088" + extensions: + - .rg + tm_scope: source.clojure + +Ruby: + type: programming + ace_mode: ruby + color: "#701516" + aliases: + - jruby + - macruby + - rake + - rb + - rbx + extensions: + - .rb + - .builder + - .fcgi + - .gemspec + - .god + - .irbrc + - .jbuilder + - .mspec + - .pluginspec + - .podspec + - .rabl + - .rake + - .rbuild + - .rbw + - .rbx + - .ru + - .ruby + - .thor + - .watchr + interpreters: + - ruby + - macruby + - rake + - jruby + - rbx + filenames: + - .pryrc + - Appraisals + - Berksfile + - Buildfile + - Deliverfile + - Fastfile + - Gemfile + - Gemfile.lock + - Guardfile + - Jarfile + - Mavenfile + - Podfile + - Puppetfile + - Snapfile + - Thorfile + - Vagrantfile + - buildfile + +Rust: + type: programming + color: "#dea584" + extensions: + - .rs + ace_mode: rust + +SAS: + type: programming + color: "#B34936" + extensions: + - .sas + tm_scope: source.sas + ace_mode: text + +SCSS: + type: markup + tm_scope: source.scss + group: CSS + ace_mode: scss + extensions: + - .scss + +SPARQL: + type: data + tm_scope: source.sparql + ace_mode: text + extensions: + - .sparql + - .rq + +SQF: + type: programming + color: "#3F3F3F" + extensions: + - .sqf + - .hqf + tm_scope: source.sqf + ace_mode: text + +SQL: + type: data + tm_scope: source.sql + ace_mode: sql + extensions: + - .sql + - .cql + - .ddl + - .prc + - .tab + - .udf + - .viw + +#IBM DB2 +SQLPL: + type: programming + ace_mode: sql + tm_scope: source.sql + extensions: + - .sql + - .db2 + +STON: + type: data + group: Smalltalk + extensions: + - .ston + tm_scope: source.smalltalk + ace_mode: text + +SVG: + type: data + extensions: + - .svg + tm_scope: text.xml + ace_mode: xml + +Sage: + type: programming + group: Python + extensions: + - .sage + - .sagews + tm_scope: source.python + ace_mode: python + +SaltStack: + type: programming + color: "#646464" + aliases: + - saltstate + - salt + extensions: + - .sls + tm_scope: source.yaml.salt + ace_mode: yaml + +Sass: + type: markup + tm_scope: source.sass + group: CSS + extensions: + - .sass + ace_mode: sass + +Scala: + type: programming + ace_mode: scala + color: "#7dd3b0" + extensions: + - .scala + - .sbt + - .sc + interpreters: + - scala + +Scaml: + group: HTML + type: markup + extensions: + - .scaml + tm_scope: source.scaml + ace_mode: text + +Scheme: + type: programming + color: "#1e4aec" + extensions: + - .scm + - .sld + - .sls + - .sps + - .ss + interpreters: + - guile + - bigloo + - chicken + ace_mode: scheme + +Scilab: + type: programming + extensions: + - .sci + - .sce + - .tst + ace_mode: text + +Self: + type: programming + color: "#0579aa" + extensions: + - .self + tm_scope: none + ace_mode: text + +Shell: + type: programming + search_term: bash + color: "#89e051" + aliases: + - sh + - bash + - zsh + extensions: + - .sh + - .bash + - .bats + - .cgi + - .command + - .fcgi + - .ksh + - .tmux + - .tool + - .zsh + interpreters: + - bash + - rc + - sh + - zsh + ace_mode: sh + +ShellSession: + type: programming + extensions: + - .sh-session + aliases: + - bash session + - console + tm_scope: text.shell-session + ace_mode: sh + +Shen: + type: programming + color: "#120F14" + extensions: + - .shen + tm_scope: none + ace_mode: text + +Slash: + type: programming + color: "#007eff" + extensions: + - .sl + tm_scope: text.html.slash + ace_mode: text + +Slim: + group: HTML + type: markup + color: "#ff8f77" + extensions: + - .slim + ace_mode: text + +Smali: + type: programming + extensions: + - .smali + ace_mode: text + tm_scope: source.smali + +Smalltalk: + type: programming + color: "#596706" + extensions: + - .st + - .cs + aliases: + - squeak + ace_mode: text + +Smarty: + type: programming + extensions: + - .tpl + ace_mode: smarty + tm_scope: text.html.smarty + +SourcePawn: + type: programming + color: "#5c7611" + aliases: + - sourcemod + extensions: + - .sp + - .sma + tm_scope: source.sp + ace_mode: text + +Squirrel: + type: programming + color: "#800000" + extensions: + - .nut + tm_scope: source.c++ + ace_mode: c_cpp + +Standard ML: + type: programming + color: "#dc566d" + aliases: + - sml + extensions: + - .ML + - .fun + - .sig + - .sml + tm_scope: source.ml + ace_mode: text + +Stata: + type: programming + extensions: + - .do + - .ado + - .doh + - .ihlp + - .mata + - .matah + - .sthlp + ace_mode: text + +Stylus: + type: markup + group: CSS + extensions: + - .styl + tm_scope: source.stylus + ace_mode: stylus + +SuperCollider: + type: programming + color: "#46390b" + extensions: + - .scd + - .sc + tm_scope: none + ace_mode: text + +Swift: + type: programming + color: "#ffac45" + extensions: + - .swift + ace_mode: text + +SystemVerilog: + type: programming + color: "#DAE1C2" + extensions: + - .sv + - .svh + - .vh + ace_mode: verilog + +TOML: + type: data + extensions: + - .toml + tm_scope: source.toml + ace_mode: toml + +TXL: + type: programming + extensions: + - .txl + tm_scope: source.txl + ace_mode: text + +Tcl: + type: programming + color: "#e4cc98" + extensions: + - .tcl + - .adp + - .tm + interpreters: + - tclsh + - wish + ace_mode: tcl + +Tcsh: + type: programming + group: Shell + extensions: + - .tcsh + - .csh + tm_scope: source.shell + ace_mode: sh + +TeX: + type: markup + color: "#3D6117" + ace_mode: tex + wrap: true + aliases: + - latex + extensions: + - .tex + - .aux + - .bbx + - .bib + - .cbx + - .cls + - .dtx + - .ins + - .lbx + - .ltx + - .mkii + - .mkiv + - .mkvi + - .sty + - .toc + +Tea: + type: markup + extensions: + - .tea + tm_scope: source.tea + ace_mode: text + +Text: + type: prose + wrap: true + aliases: + - fundamental + extensions: + - .txt + - .fr + tm_scope: none + ace_mode: text + +Textile: + type: prose + ace_mode: textile + wrap: true + extensions: + - .textile + tm_scope: none + +Thrift: + type: programming + tm_scope: source.thrift + extensions: + - .thrift + ace_mode: text + +Turing: + type: programming + color: "#45f715" + extensions: + - .t + - .tu + tm_scope: none + ace_mode: text + +Turtle: + type: data + extensions: + - .ttl + tm_scope: source.turtle + ace_mode: text + +Twig: + type: markup + group: HTML + extensions: + - .twig + tm_scope: text.html.twig + ace_mode: twig + +TypeScript: + type: programming + color: "#2b7489" + aliases: + - ts + extensions: + - .ts + tm_scope: source.ts + ace_mode: typescript + +Unified Parallel C: + type: programming + group: C + ace_mode: c_cpp + color: "#4e3617" + extensions: + - .upc + tm_scope: source.c + +Unity3D Asset: + type: data + ace_mode: yaml + color: "#ab69a1" + extensions: + - .anim + - .asset + - .mat + - .meta + - .prefab + - .unity + tm_scope: source.yaml + +UnrealScript: + type: programming + color: "#a54c4d" + extensions: + - .uc + tm_scope: source.java + ace_mode: java + +VCL: + group: Perl + type: programming + extensions: + - .vcl + tm_scope: source.varnish.vcl + ace_mode: text + +VHDL: + type: programming + color: "#adb2cb" + extensions: + - .vhdl + - .vhd + - .vhf + - .vhi + - .vho + - .vhs + - .vht + - .vhw + ace_mode: vhdl + +Vala: + type: programming + color: "#fbe5cd" + extensions: + - .vala + - .vapi + ace_mode: vala + +Verilog: + type: programming + color: "#b2b7f8" + extensions: + - .v + - .veo + ace_mode: verilog + +VimL: + type: programming + color: "#199f4b" + search_term: vim + aliases: + - vim + - nvim + extensions: + - .vim + filenames: + - .nvimrc + - .vimrc + - _vimrc + - gvimrc + - nvimrc + - vimrc + ace_mode: text + +Visual Basic: + type: programming + color: "#945db7" + extensions: + - .vb + - .bas + - .cls + - .frm + - .frx + - .vba + - .vbhtml + - .vbs + tm_scope: source.vbnet + aliases: + - vb.net + - vbnet + ace_mode: text + +Volt: + type: programming + color: "#1F1F1F" + extensions: + - .volt + tm_scope: source.d + ace_mode: d + +Web Ontology Language: + type: markup + color: "#9cc9dd" + extensions: + - .owl + tm_scope: text.xml + ace_mode: xml + +WebIDL: + type: programming + extensions: + - .webidl + tm_scope: source.webidl + ace_mode: text + +XC: + type: programming + color: "#99DA07" + extensions: + - .xc + tm_scope: source.xc + ace_mode: c_cpp + +XML: + type: data + ace_mode: xml + aliases: + - rss + - xsd + - wsdl + extensions: + - .xml + - .ant + - .axml + - .ccxml + - .clixml + - .cproject + - .csproj + - .ct + - .dita + - .ditamap + - .ditaval + - .dll.config + - .filters + - .fsproj + - .fxml + - .glade + - .gml + - .grxml + - .iml + - .ivy + - .jelly + - .kml + - .launch + - .mdpolicy + - .mm + - .mxml + - .nproj + - .nuspec + - .odd + - .osm + - .plist + - .pluginspec + - .ps1xml + - .psc1 + - .pt + - .rdf + - .rss + - .scxml + - .srdf + - .storyboard + - .stTheme + - .sublime-snippet + - .targets + - .tmCommand + - .tml + - .tmLanguage + - .tmPreferences + - .tmSnippet + - .tmTheme + - .ts + - .ui + - .urdf + - .vbproj + - .vcxproj + - .vxml + - .wsdl + - .wsf + - .wxi + - .wxl + - .wxs + - .x3d + - .xacro + - .xaml + - .xib + - .xlf + - .xliff + - .xmi + - .xml.dist + - .xsd + - .xul + - .zcml + filenames: + - .classpath + - .project + - Settings.StyleCop + - Web.Debug.config + - Web.Release.config + - Web.config + - packages.config + +XPages: + type: programming + extensions: + - .xsp-config + - .xsp.metadata + tm_scope: none + ace_mode: xml + +XProc: + type: programming + extensions: + - .xpl + - .xproc + tm_scope: text.xml + ace_mode: xml + +XQuery: + type: programming + color: "#5232e7" + extensions: + - .xquery + - .xq + - .xql + - .xqm + - .xqy + ace_mode: xquery + +XS: + type: programming + extensions: + - .xs + tm_scope: source.c + ace_mode: c_cpp + +XSLT: + type: programming + aliases: + - xsl + extensions: + - .xslt + - .xsl + tm_scope: text.xml.xsl + ace_mode: xml + +Xojo: + type: programming + extensions: + - .xojo_code + - .xojo_menu + - .xojo_report + - .xojo_script + - .xojo_toolbar + - .xojo_window + tm_scope: source.vbnet + ace_mode: text + +Xtend: + type: programming + extensions: + - .xtend + ace_mode: text + +YAML: + type: data + tm_scope: source.yaml + aliases: + - yml + extensions: + - .yml + - .reek + - .rviz + - .yaml + ace_mode: yaml + +Yacc: + type: programming + extensions: + - .y + - .yacc + - .yy + tm_scope: source.bison + ace_mode: text + +Zephir: + type: programming + color: "#118f9e" + extensions: + - .zep + tm_scope: source.php.zephir + ace_mode: php + +Zimpl: + type: programming + extensions: + - .zimpl + - .zmpl + - .zpl + tm_scope: none + ace_mode: text + +desktop: + type: data + extensions: + - .desktop + - .desktop.in + tm_scope: source.desktop + ace_mode: text + +eC: + type: programming + color: "#913960" + search_term: ec + extensions: + - .ec + - .eh + tm_scope: source.c.ec + ace_mode: text + +edn: + type: data + ace_mode: clojure + color: "#db5855" + extensions: + - .edn + tm_scope: source.clojure + +fish: + type: programming + group: Shell + extensions: + - .fish + tm_scope: source.fish + ace_mode: text + +mupad: + type: programming + extensions: + - .mu + ace_mode: text + +nesC: + type: programming + color: "#94B0C7" + extensions: + - .nc + ace_mode: text + +ooc: + type: programming + color: "#b0b77e" + extensions: + - .ooc + ace_mode: text + +reStructuredText: + type: prose + wrap: true + search_term: rst + aliases: + - rst + extensions: + - .rst + - .rest + ace_mode: text + +wisp: + type: programming + ace_mode: clojure + color: "#7582D1" + extensions: + - .wisp + tm_scope: source.clojure + +xBase: + type: programming + color: "#403a40" + extensions: + - .prg + tm_scope: none + ace_mode: text diff --git a/samples/XPages/UnpMain.xsp b/samples/XPages/UnpMain.xsp new file mode 100644 index 00000000..e0eb6438 --- /dev/null +++ b/samples/XPages/UnpMain.xsp @@ -0,0 +1,83 @@ + + + +
+
+ + +
+ + + +
+
+
+
+

+ Closed sales by team member - $000s + (December) +

+
+
+
+
+
+ +
+ +
+ +
+
+
+
+ + + + + +
\ No newline at end of file diff --git a/samples/XPages/demoServerRESTconsumption.xsp b/samples/XPages/demoServerRESTconsumption.xsp new file mode 100644 index 00000000..3334c777 --- /dev/null +++ b/samples/XPages/demoServerRESTconsumption.xsp @@ -0,0 +1,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/XPages/house.form b/samples/XPages/house.form new file mode 100644 index 00000000..7c47b41c --- /dev/null +++ b/samples/XPages/house.form @@ -0,0 +1,65 @@ + +
+ +20141225T155631,49-06 +20150306T091952,06-08 +20150306T091952,05-08 +20150306T091952,06-08 +20150305T162153,26-08 +CN=Eric McCormick/O=Eric McCormick +CN=Eric McCormick/O=Eric McCormick + + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + + +Yg4BAIQAAAAAAAAAAAA= + +house
diff --git a/samples/XPages/house.xsp b/samples/XPages/house.xsp new file mode 100644 index 00000000..3c5a6e13 --- /dev/null +++ b/samples/XPages/house.xsp @@ -0,0 +1,176 @@ + + + + + + + +
+
+
+
+

+ +

+
+
+ + + + +
+ + +
+
+ + + + + + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
\ No newline at end of file diff --git a/samples/XPages/houses.view b/samples/XPages/houses.view new file mode 100644 index 00000000..354c3aa0 --- /dev/null +++ b/samples/XPages/houses.view @@ -0,0 +1,54 @@ + + + +20141225T155658,43-06 +20150316T150218,60-07 +20150316T150218,59-07 +20150316T150218,60-07 +20150305T162151,76-08 +CN=Eric McCormick/O=Eric McCormick +CN=Eric McCormick/O=Eric McCormickSELECT Form = "house" + + + + + + + + + + + + + + + + + + + + + + + + +@Text(@DocumentUniqueID) diff --git a/samples/XPages/navbar.xsp b/samples/XPages/navbar.xsp new file mode 100755 index 00000000..c7a5669e --- /dev/null +++ b/samples/XPages/navbar.xsp @@ -0,0 +1,53 @@ + + + + \ No newline at end of file diff --git a/samples/XPages/xLogin.xsp b/samples/XPages/xLogin.xsp new file mode 100644 index 00000000..50afc329 --- /dev/null +++ b/samples/XPages/xLogin.xsp @@ -0,0 +1,38 @@ + + + + + UserID + Login + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 87eb4577ea4c6d7bf0f078b7f804a824a449f5b0 Mon Sep 17 00:00:00 2001 From: Eric McCormick Date: Mon, 13 Jul 2015 21:31:02 -0500 Subject: [PATCH 038/356] trying this again --- samples/XPages/UnpMain.xsp | 83 --------- samples/XPages/demoServerRESTconsumption.xsp | 64 ------- samples/XPages/house.form | 65 ------- samples/XPages/house.xsp | 176 ------------------- samples/XPages/houses.view | 54 ------ samples/XPages/navbar.xsp | 53 ------ samples/XPages/xLogin.xsp | 38 ---- 7 files changed, 533 deletions(-) delete mode 100644 samples/XPages/UnpMain.xsp delete mode 100644 samples/XPages/demoServerRESTconsumption.xsp delete mode 100644 samples/XPages/house.form delete mode 100644 samples/XPages/house.xsp delete mode 100644 samples/XPages/houses.view delete mode 100755 samples/XPages/navbar.xsp delete mode 100644 samples/XPages/xLogin.xsp diff --git a/samples/XPages/UnpMain.xsp b/samples/XPages/UnpMain.xsp deleted file mode 100644 index e0eb6438..00000000 --- a/samples/XPages/UnpMain.xsp +++ /dev/null @@ -1,83 +0,0 @@ - - - -
-
- - -
- - - -
-
-
-
-

- Closed sales by team member - $000s - (December) -

-
-
-
-
-
- -
- -
- -
-
-
-
- - - - - -
\ No newline at end of file diff --git a/samples/XPages/demoServerRESTconsumption.xsp b/samples/XPages/demoServerRESTconsumption.xsp deleted file mode 100644 index 3334c777..00000000 --- a/samples/XPages/demoServerRESTconsumption.xsp +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/samples/XPages/house.form b/samples/XPages/house.form deleted file mode 100644 index 7c47b41c..00000000 --- a/samples/XPages/house.form +++ /dev/null @@ -1,65 +0,0 @@ - -
- -20141225T155631,49-06 -20150306T091952,06-08 -20150306T091952,05-08 -20150306T091952,06-08 -20150305T162153,26-08 -CN=Eric McCormick/O=Eric McCormick -CN=Eric McCormick/O=Eric McCormick - - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - - -Yg4BAIQAAAAAAAAAAAA= - -house
diff --git a/samples/XPages/house.xsp b/samples/XPages/house.xsp deleted file mode 100644 index 3c5a6e13..00000000 --- a/samples/XPages/house.xsp +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - -
-
-
-
-

- -

-
-
- - - - -
- - -
-
- - - - - - - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
-
- - -
- - - - - - - - - - - - - - - - - -
-
-
-
-
-
-
\ No newline at end of file diff --git a/samples/XPages/houses.view b/samples/XPages/houses.view deleted file mode 100644 index 354c3aa0..00000000 --- a/samples/XPages/houses.view +++ /dev/null @@ -1,54 +0,0 @@ - - - -20141225T155658,43-06 -20150316T150218,60-07 -20150316T150218,59-07 -20150316T150218,60-07 -20150305T162151,76-08 -CN=Eric McCormick/O=Eric McCormick -CN=Eric McCormick/O=Eric McCormickSELECT Form = "house" - - - - - - - - - - - - - - - - - - - - - - - - -@Text(@DocumentUniqueID) diff --git a/samples/XPages/navbar.xsp b/samples/XPages/navbar.xsp deleted file mode 100755 index c7a5669e..00000000 --- a/samples/XPages/navbar.xsp +++ /dev/null @@ -1,53 +0,0 @@ - - - - \ No newline at end of file diff --git a/samples/XPages/xLogin.xsp b/samples/XPages/xLogin.xsp deleted file mode 100644 index 50afc329..00000000 --- a/samples/XPages/xLogin.xsp +++ /dev/null @@ -1,38 +0,0 @@ - - - - - UserID - Login - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file From 29197736c718802bc21e14780d7229911880e96b Mon Sep 17 00:00:00 2001 From: Harry Garrood Date: Sun, 19 Jul 2015 09:18:09 +0100 Subject: [PATCH 039/356] Use a different grammar for PureScript --- .gitmodules | 3 +++ grammars.yml | 2 ++ lib/linguist/languages.yml | 2 +- vendor/grammars/atom-language-purescript | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) create mode 160000 vendor/grammars/atom-language-purescript diff --git a/.gitmodules b/.gitmodules index fce31b57..dcd94622 100644 --- a/.gitmodules +++ b/.gitmodules @@ -662,3 +662,6 @@ [submodule "vendor/grammars/language-ncl"] path = vendor/grammars/language-ncl url = https://github.com/rpavlick/language-ncl.git +[submodule "vendor/grammars/atom-language-purescript"] + path = vendor/grammars/atom-language-purescript + url = https://github.com/freebroccolo/atom-language-purescript diff --git a/grammars.yml b/grammars.yml index 43507c92..d6d38438 100644 --- a/grammars.yml +++ b/grammars.yml @@ -176,6 +176,8 @@ vendor/grammars/assembly.tmbundle: - source.x86asm vendor/grammars/atom-fsharp/: - source.fsharp +vendor/grammars/atom-language-purescript/: +- source.purescript vendor/grammars/atom-salt: - source.python.salt - source.yaml.salt diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index d0930dab..9b48cc23 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2667,7 +2667,7 @@ PureScript: color: "#1D222D" extensions: - .purs - tm_scope: source.haskell + tm_scope: source.purescript ace_mode: haskell Python: diff --git a/vendor/grammars/atom-language-purescript b/vendor/grammars/atom-language-purescript new file mode 160000 index 00000000..5fd5b646 --- /dev/null +++ b/vendor/grammars/atom-language-purescript @@ -0,0 +1 @@ +Subproject commit 5fd5b6460e906045625fb5bbe7644425c73a3798 From 682cc2d82dd12665085e38e170b37b2d039b32c9 Mon Sep 17 00:00:00 2001 From: Joel Parker Henderson Date: Sun, 19 Jul 2015 19:36:12 -0600 Subject: [PATCH 040/356] Add documentation categorization for CHANGELOG et. al. --- lib/linguist/documentation.yml | 1 + test/test_blob.rb | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/lib/linguist/documentation.yml b/lib/linguist/documentation.yml index 6e06329f..f95a547d 100644 --- a/lib/linguist/documentation.yml +++ b/lib/linguist/documentation.yml @@ -16,6 +16,7 @@ ## Documentation files ## +- (^|/)CHANGE(S|LOG)?(\.|$) - (^|/)CONTRIBUTING(\.|$) - (^|/)COPYING(\.|$) - (^|/)INSTALL(\.|$) diff --git a/test/test_blob.rb b/test/test_blob.rb index 51c0398a..976c83ff 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -513,6 +513,21 @@ class TestBlob < Minitest::Test assert_predicate fixture_blob("README.txt"), :documentation? assert_predicate fixture_blob("foo/README"), :documentation? + assert_predicate fixture_blob("CHANGE"), :documentation? + assert_predicate fixture_blob("CHANGE.md"), :documentation? + assert_predicate fixture_blob("CHANGE.txt"), :documentation? + assert_predicate fixture_blob("foo/CHANGE"), :documentation? + + assert_predicate fixture_blob("CHANGELOG"), :documentation? + assert_predicate fixture_blob("CHANGELOG.md"), :documentation? + assert_predicate fixture_blob("CHANGELOG.txt"), :documentation? + assert_predicate fixture_blob("foo/CHANGELOG"), :documentation? + + assert_predicate fixture_blob("CHANGES"), :documentation? + assert_predicate fixture_blob("CHANGES.md"), :documentation? + assert_predicate fixture_blob("CHANGES.txt"), :documentation? + assert_predicate fixture_blob("foo/CHANGES"), :documentation? + assert_predicate fixture_blob("CONTRIBUTING"), :documentation? assert_predicate fixture_blob("CONTRIBUTING.md"), :documentation? assert_predicate fixture_blob("CONTRIBUTING.txt"), :documentation? From 6b747f7d65711dbc5816de644356c29450bc5d3a Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 21 Jul 2015 14:59:47 +0100 Subject: [PATCH 041/356] Adding Charity and heuristic for xBase .ch files --- lib/linguist/heuristics.rb | 6 ++++++ lib/linguist/languages.yml | 7 +++++++ samples/Charity/example.ch | 6 ++++++ test/test_heuristics.rb | 28 +++++++++++++++++----------- 4 files changed, 36 insertions(+), 11 deletions(-) create mode 100644 samples/Charity/example.ch diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 23de1b02..d5b92457 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -333,5 +333,11 @@ module Linguist Language["GAS"] end end + + disambiguate "xBase", "Charity" do |data| + if /^\s*#\s*(if|ifdef|ifndef|define|command|xcommand|translate|xtranslate|include|pragma|undef)\b/i.match(data) + Language["xBase"] + end + end end end diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 9b48cc23..a734d452 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -501,6 +501,13 @@ Chapel: - .chpl ace_mode: text +Charity: + type: programming + extensions: + - .ch + tm_scope: none + ace_mode: text + ChucK: type: programming extensions: diff --git a/samples/Charity/example.ch b/samples/Charity/example.ch new file mode 100644 index 00000000..d3ee289b --- /dev/null +++ b/samples/Charity/example.ch @@ -0,0 +1,6 @@ +% +% Some very badly written Charity +% + +data LA(A) -> D = ss: A -> D + | ff: -> D. diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index 010bf587..8914e4c2 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -22,6 +22,17 @@ class TestHeuristcs < Minitest::Test assert_equal [], results end + def assert_heuristics(hash) + candidates = hash.keys.map { |l| Language[l] } + + hash.each do |language, blobs| + Array(blobs).each do |blob| + result = Heuristics.call(file_blob(blob), candidates) + assert_equal [Language[language]], result, "Failed for #{blob}" + end + end + end + # Candidate languages = ["C++", "Objective-C"] def test_obj_c_by_heuristics # Only calling out '.h' filenames as these are the ones causing issues @@ -147,17 +158,6 @@ class TestHeuristcs < Minitest::Test }) end - def assert_heuristics(hash) - candidates = hash.keys.map { |l| Language[l] } - - hash.each do |language, blobs| - Array(blobs).each do |blob| - result = Heuristics.call(file_blob(blob), candidates) - assert_equal [Language[language]], result, "Failed for #{blob}" - end - end - end - def test_ls_by_heuristics assert_heuristics({ "LiveScript" => "LiveScript/hello.ls", @@ -171,4 +171,10 @@ class TestHeuristcs < Minitest::Test "XML" => all_fixtures("XML", "*.ts") }) end + + def test_ch_by_heuristics + assert_heuristics({ + "xBase" => all_fixtures("xBase") + }) + end end From 7b5d1c075d7539e8886df5b599edd434be26fa6a Mon Sep 17 00:00:00 2001 From: Evan You Date: Tue, 21 Jul 2015 18:51:55 -0400 Subject: [PATCH 042/356] add syntax highlight for *.vue component files --- .gitmodules | 3 +++ grammars.yml | 2 ++ lib/linguist/languages.yml | 8 +++++++ samples/Vue/basic.vue | 21 +++++++++++++++++++ samples/Vue/pre-processors.vue | 31 ++++++++++++++++++++++++++++ vendor/grammars/vue-syntax-highlight | 1 + 6 files changed, 66 insertions(+) create mode 100644 samples/Vue/basic.vue create mode 100644 samples/Vue/pre-processors.vue create mode 160000 vendor/grammars/vue-syntax-highlight diff --git a/.gitmodules b/.gitmodules index dcd94622..7f02b603 100644 --- a/.gitmodules +++ b/.gitmodules @@ -665,3 +665,6 @@ [submodule "vendor/grammars/atom-language-purescript"] path = vendor/grammars/atom-language-purescript url = https://github.com/freebroccolo/atom-language-purescript +[submodule "vendor/grammars/vue-syntax-highlight"] + path = vendor/grammars/vue-syntax-highlight + url = https://github.com/vuejs/vue-syntax-highlight diff --git a/grammars.yml b/grammars.yml index d6d38438..a1bd7069 100644 --- a/grammars.yml +++ b/grammars.yml @@ -544,6 +544,8 @@ vendor/grammars/turtle.tmbundle: - source.turtle vendor/grammars/verilog.tmbundle: - source.verilog +vendor/grammars/vue-syntax-highlight: +- text.html.vue vendor/grammars/x86-assembly-textmate-bundle: - source.asm.x86 vendor/grammars/xc.tmbundle/: diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index a734d452..03874eaa 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3516,6 +3516,14 @@ Volt: tm_scope: source.d ace_mode: d +Vue: + type: markup + color: "#2c3e50" + extensions: + - .vue + tm_scope: text.html.vue + ace_mode: html + Web Ontology Language: type: markup color: "#9cc9dd" diff --git a/samples/Vue/basic.vue b/samples/Vue/basic.vue new file mode 100644 index 00000000..e5918fe7 --- /dev/null +++ b/samples/Vue/basic.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/samples/Vue/pre-processors.vue b/samples/Vue/pre-processors.vue new file mode 100644 index 00000000..364a1a1c --- /dev/null +++ b/samples/Vue/pre-processors.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/vendor/grammars/vue-syntax-highlight b/vendor/grammars/vue-syntax-highlight new file mode 160000 index 00000000..6cd3ee17 --- /dev/null +++ b/vendor/grammars/vue-syntax-highlight @@ -0,0 +1 @@ +Subproject commit 6cd3ee1743df0cc2d49d66c55437d535dadd579f From 5b187d1f20252218d75660702e268c351c257fc1 Mon Sep 17 00:00:00 2001 From: Evan You Date: Fri, 24 Jul 2015 23:40:43 -0400 Subject: [PATCH 043/356] update vue-syntax-highlight version --- vendor/grammars/vue-syntax-highlight | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/grammars/vue-syntax-highlight b/vendor/grammars/vue-syntax-highlight index 6cd3ee17..b98484e7 160000 --- a/vendor/grammars/vue-syntax-highlight +++ b/vendor/grammars/vue-syntax-highlight @@ -1 +1 @@ -Subproject commit 6cd3ee1743df0cc2d49d66c55437d535dadd579f +Subproject commit b98484e787c8658c91832674dbd36c3c23277234 From 90a293727d28bd4d7d239efa667f1b9f37afe0f4 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Wed, 29 Jul 2015 13:54:51 +0100 Subject: [PATCH 044/356] Merge branch 'master' into more-encompassing-number-skips --- .gitmodules | 102 +- .travis.yml | 1 - CONTRIBUTING.md | 36 +- README.md | 14 +- Rakefile | 2 +- bin/linguist | 6 +- github-linguist.gemspec | 5 +- grammars.yml | 72 +- lib/linguist.rb | 12 + lib/linguist/blob_helper.rb | 8 +- lib/linguist/documentation.yml | 9 +- lib/linguist/file_blob.rb | 27 +- lib/linguist/generated.rb | 95 +- lib/linguist/heuristics.rb | 140 +- lib/linguist/language.rb | 44 +- lib/linguist/languages.yml | 620 +- lib/linguist/lazy_blob.rb | 10 +- lib/linguist/popular.yml | 12 +- lib/linguist/repository.rb | 5 +- lib/linguist/samples.rb | 7 +- lib/linguist/shebang.rb | 20 +- lib/linguist/strategy/filename.rb | 12 +- lib/linguist/strategy/modeline.rb | 4 +- lib/linguist/tokenizer.rb | 6 + lib/linguist/vendor.yml | 27 +- lib/linguist/version.rb | 2 +- samples/AMPL/CT2.mod | 58 + samples/AMPL/toy.ampl | 25 + samples/API Blueprint/actions.apib | 55 + samples/API Blueprint/attributes.apib | 39 + samples/API Blueprint/simple.apib | 18 + samples/ApacheConf/apache.vhost | 17 + samples/AsciiDoc/list.asc | 3 + samples/Assembly/fp_sqr32_160_comba.inc | 245 + samples/Assembly/lib.inc | 170 + samples/Assembly/macros.inc | 321 + samples/Brainfuck/factor.b | 195 + samples/Brainfuck/fib100.bf | 13 + samples/Brainfuck/hello.bf | 4 + samples/Brainfuck/helloworld.bf | 3 + samples/Brainfuck/rot13.bf | 30 + samples/C++/ClasspathVMSystemProperties.inc | 57 + samples/C++/initClasses.inc | 2764 ++ samples/C++/instances.inc | 34 + samples/C/filenames/script | 2310 ++ samples/C/pqiv.h | 166 + samples/Chapel/distributions.chpl | 90 +- samples/Chapel/lulesh.chpl | 59 +- samples/Charity/example.ch | 6 + samples/Clarion/CStringClass.clw | 172 + samples/Clarion/ConsoleSupport.clw | 68 + samples/Clarion/HelloWorld.clw | 10 + samples/Clarion/hello.clw | 12 + samples/Clojure/build.boot | 15 + samples/Common Lisp/array.l | 164 + samples/Common Lisp/common.l | 1201 + samples/Common Lisp/hello.lisp | 2 + samples/D/mpq.d | 318 + .../fis_gtm_kitinstal.com | 443 + .../ghostpdl_zlib_make_vms.com | 867 + .../libxslt_build.com | 342 + .../vmsbackup_build.com | 10 + samples/DTrace/counts.d | 23 + samples/DTrace/javascript-trace.d | 73 + samples/DTrace/probes.d | 93 + samples/Eiffel/application.e | 44 + samples/Eiffel/book_collection.e | 82 + samples/Eiffel/git_checkout_command.e | 41 + samples/Elixir/filenames/mix.lock | 10 + .../Erlang/{factorial.script! => factorial} | 0 samples/Erlang/filenames/rebar.config | 260 + samples/Erlang/filenames/rebar.config.lock | 158 + samples/Erlang/filenames/rebar.lock | 16 + samples/Erlang/{release.script! => release} | 0 samples/Filterscript/colormatrix.fs | 35 + samples/Filterscript/fs_kernel.fs | 18 + samples/Formatted/long_seq.for | 919 + samples/Formatted/wksst8110.for | 1317 + samples/G-code/lm.g | 25912 -------------- samples/G-code/rm.g | 29735 ---------------- samples/GAS/hello.ms | 91 + samples/Go/api.pb.go | 1157 + samples/Go/embedded.go | 852 + samples/Go/gen-go-linguist-thrift.go | 18 + samples/Groff/Tcl.n | 275 + samples/Groff/create_view.l | 135 + samples/Groff/fsinterface.ms | 1174 + samples/Groovy/{build.script! => build.gvy} | 0 samples/Groovy/{groovy.script! => groovy} | 0 samples/HTML/rpanel.inc | 31 + samples/HTML/tailDel.inc | 5 + samples/Haskell/HsColour.hs | 114 + samples/HyPhy/AAModelComparison.bf | 252 + samples/HyPhy/CodonModelCompare.bf | 1046 + samples/HyPhy/MFPositiveSelection.bf | 1113 + samples/HyPhy/MatrixIndexing.bf | 1 + samples/HyPhy/MolecularClock.bf | 147 + samples/HyPhy/dNdSDistributionComparison.bf | 1025 + samples/HyPhy/hyphy_cmds.bf | 11003 ++++++ samples/HyPhy/profile_test.bf | 1 + samples/INI/MouseKeyboard.pro | 71 + samples/Isabelle ROOT/filenames/ROOT | 1104 + samples/JFlex/LexScan.flex | 742 + samples/JFlex/java.jflex | 305 + samples/Java/gen-java-linguist-thrift.java | 396 + samples/JavaScript/gen-js-linguist-thrift.js | 60 + samples/JavaScript/{js.script! => js} | 0 samples/JavaScript/{js2.script! => js2} | 0 samples/KiCad/Volume.sch | 714 + samples/KiCad/nrf-bga.kicad_pcb | 928 + samples/KiCad/ultimate-temp-controller.sch | 69 + samples/Lean/binary.lean | 75 + samples/Lean/set.hlean | 70 + samples/Lex/zend_ini_scanner.l | 601 + samples/Limbo/cat.b | 48 + samples/Limbo/lock.b | 26 + samples/Limbo/lock.m | 13 + samples/Linker Script/filenames/ld.script | 50 + samples/Linker Script/link.ld | 12 + samples/Linker Script/vmlinux.lds | 373 + samples/Linux Kernel Module/bcm4334x.mod | 2 + samples/Linux Kernel Module/mbcache.mod | 2 + samples/Linux Kernel Module/md5.mod | 2 + samples/MUF/39.m | 278 + samples/MUF/cmd-say.muf | 275 + samples/Makefile/filenames/Kbuild | 23 + samples/Makefile/filenames/Makefile.boot | 159 + samples/Makefile/foo.o.d | 5 + .../Makefile/{makefile.script! => makefile} | 0 samples/Mathematica/Predicates.wl | 150 + samples/Mathematica/UnitTest.wlt | 17 + samples/Modelica/NestedPackages.mo | 26 + samples/Modelica/NewtonCooling.mo | 24 + samples/Modelica/Pendulum.mo | 47 + samples/Modelica/RLC.mo | 16 + samples/Modelica/SecondOrderSystem.mo | 29 + samples/Modelica/System.mo | 19 + samples/Modelica/package.mo | 4 + samples/Modelica/package2.mo | 3 + samples/Modelica/package3.mo | 3 + samples/Modelica/package4.mo | 3 + samples/Modula-2/HuffChan.mod | 329 + samples/Module Management System/descrip.mms | 1204 + samples/Module Management System/openvms.mmk | 563 + .../Module Management System/simh_descrip.mms | 1204 + .../spline_descrip.mms | 31 + .../Module Management System/xv_makefile.mms | 271 + samples/NCL/PrnOscPat_driver.ncl | 109 + samples/NCL/WRF_static_2.ncl | 115 + samples/NCL/WRF_track_1.ncl | 160 + samples/NCL/cru_8.ncl | 129 + .../NCL/gsn_csm_xy2_time_series_inputs.ncl | 20 + samples/NCL/hdf4sds_7.ncl | 128 + samples/NCL/mask_12.ncl | 125 + samples/NCL/mcsst_1.ncl | 115 + samples/NCL/primero.ncl | 3 + samples/NCL/topo_9.ncl | 172 + samples/NCL/traj_3.ncl | 120 + samples/NCL/tsdiagram_1.ncl | 167 + samples/NCL/unique_9.ncl | 141 + samples/NCL/viewport_4.ncl | 131 + samples/NCL/weather_sym_6.ncl | 120 + samples/NCL/xy_29.ncl | 151 + samples/NL/assign0.nl | 84 + samples/NL/balassign0.nl | 2284 ++ samples/NetLinx+ERB/sample.axi.erb | 78 + samples/NetLinx+ERB/sample.axs.erb | 78 + samples/NetLinx/projector.axi | 132 + samples/NetLinx/volume-array.axs | 158 + samples/NewLisp/queens.nl | 49 + samples/Nginx/example.com.vhost | 242 + samples/Nu/{nu.script! => nu} | 0 samples/OCaml/cmdliner.ml | 1344 + samples/OCaml/common.ml | 14 + samples/OCaml/date.ml | 40 + samples/OCaml/map.ml | 337 + samples/OCaml/mirage.ml | 2503 ++ samples/OCaml/reload.ml | 125 + samples/OCaml/sigset.ml | 70 + samples/OCaml/uutf.ml | 810 + .../Objective-C/gen-cocoa-linguist-thrift.m | 176 + samples/PHP/{drupal.script! => drupal.php} | 0 samples/PHP/file_display.inc | 142 + samples/PHP/{php.script! => php} | 0 .../PHP/{php-script.script! => php-script} | 0 samples/PHP/{php2.script! => php2} | 0 samples/PHP/root.php | 6 + samples/PLSQL/myobject.sql | 15 + samples/PLSQL/packagebody.pkb | 58 + samples/PLSQL/packageheader.pks | 28 + samples/PLSQL/prime#.plsql | 93 + samples/PLSQL/who_called_me.sql | 65 + samples/PLpgSQL/plpgsql_lint-8.4.sql | 165 + samples/PLpgSQL/plpgsql_lint-9.0.sql | 165 + samples/PLpgSQL/plpgsql_lint-9.1.sql | 179 + samples/PLpgSQL/plpgsql_lint-9.2.sql | 166 + samples/PLpgSQL/plpgsql_lint-9.3.sql | 166 + samples/Pascal/image_url.inc | 37 + samples/Pascal/libc.inc | 56 + samples/Pascal/vmops_impl.inc | 502 + samples/Perl/exception_handler.pl | 117 + samples/Perl/getchar.al | 13 + samples/Perl/{perl.script! => perl} | 0 samples/Perl/strict.t | 1 + samples/Perl6/test.p6 | 20 - samples/PicoLisp/simul.l | 165 + .../{dleak-report.script! => dleak-report} | 0 samples/Public Key/id_dsa.asc | 1 + samples/Public Key/id_rsa.asc | 1 + samples/Public Key/sshkey1.asc | 7 + samples/Puppet/apacheinit.pp | 378 + samples/Python/gen-py-linguist-thrift.py | 83 + samples/Python/{python.script! => python} | 0 samples/Python/{python2.script! => python2} | 0 samples/Python/{python3.script! => python3} | 0 samples/QML/common.qbs | 155 + samples/QMake/{qmake.script! => qmake} | 0 .../{git-punchcard.script! => git-punchcard} | 0 samples/RenderScript/convolve3x3.rs | 67 + samples/RenderScript/scenegraph_objects.rsh | 323 + samples/Ruby/filenames/Deliverfile | 50 + samples/Ruby/filenames/Fastfile | 115 + samples/Ruby/filenames/Podfile | 18 + samples/Ruby/filenames/Snapfile | 26 + samples/Ruby/gen-rb-linguist-thrift.rb | 9 + samples/Ruby/index.json.jbuilder | 4 + samples/Ruby/{macruby.script! => macruby} | 0 samples/Ruby/rexpl | 4 + samples/Ruby/{ruby.script! => ruby} | 0 samples/Ruby/{ruby2.script! => ruby2} | 0 samples/Ruby/shoes-swt | 11 + samples/SMT/bignum_lia1.smt2 | 20 + samples/SMT/list4.smt2 | 20 + samples/SMT/queen10-1.smt2 | 123 + samples/SMT/shufflevector.smt | 2104 ++ samples/SQL/create_stuff.sql | 21 + samples/SQL/drop_stuff.sql | 13 + samples/SQL/dual.sql | 3 + samples/SQL/hostcache_set_state.inc | 23 + samples/SQLPL/check_reorg.sql | 39 + samples/SQLPL/comm_amount.db2 | 30 + samples/SQLPL/drop_table.db2 | 13 + samples/SQLPL/runstats.sql | 18 + samples/SQLPL/sleep.sql | 9 + samples/SQLPL/trigger.sql | 9 + samples/SaltStack/gimp.sls | 7 + samples/SaltStack/gpg4win-light.sls | 13 + samples/SaltStack/openoffice.sls | 21 + samples/SaltStack/truecrypt.sls | 9 + ...les-of-beer.script! => 99-bottles-of-beer} | 0 samples/Scala/{scala.script! => scala} | 0 ...les-of-beer.script! => 99-bottles-of-beer} | 0 samples/Shell/{bash.script! => bash} | 0 samples/Shell/{plugin.script! => plugin} | 0 samples/Shell/{sbt.script! => sbt} | 0 samples/Shell/{sh.script! => sh} | 0 ...tring-chopping.script! => string-chopping} | 0 samples/Shell/valid-shebang.tool | 280 + samples/Shell/{zsh.script! => zsh} | 0 samples/Smali/ActionBarDrawerToggle.smali | 551 + samples/Smali/DoodleMobileAnaylise.smali | 4235 +++ samples/Smali/ModernAsyncTask.smali | 700 + samples/Smali/PenguinSprite.smali | 781 + samples/Smali/Subject.smali | 1179 + samples/Smali/ViewDragHelper.smali | 4382 +++ samples/Smali/WbxmlSerializer.smali | 1863 + samples/SourcePawn/Check.inc | 246 + samples/SourcePawn/fixed.inc | 91 + samples/SourcePawn/foo.sma | 272 + samples/SourcePawn/mfile.inc | 289 + samples/SourcePawn/y_testing.inc | 633 + samples/Text/01_top.ncl | 18 + samples/Text/LIDARLite.ncl | 34 + samples/Text/Site.local.ncl | 22 + samples/Text/main.ncl | 46 + samples/Text/min-help.ncl | 45 + samples/Text/receiver.ncl | 21 + samples/Text/rmMonAnnCycLLT-help.ncl | 40 + samples/Text/zonalAve-help.ncl | 35 + samples/Thrift/linguist.thrift | 5 + samples/Unity3D Asset/GapTile.mat | 28 + samples/Unity3D Asset/Hover.anim | 157 + samples/Unity3D Asset/Tiles.meta | 5 + samples/Unity3D Asset/TimeManager.asset | 8 + .../canvas_Fullscreen_Fader.prefab | 157 + samples/VimL/filenames/.nvimrc | 10 + samples/VimL/solarized.vim | 1117 + samples/WebIDL/AnimationEvent.webidl | 2 +- samples/WebIDL/Fetch.webidl | 2 +- samples/XML/Application.xib | 20 + samples/XML/Example.mdpolicy | 12 + samples/XML/Storyboard.storyboard | 7 + samples/XML/intellij.iml | 13 + samples/XML/point-3.1.gml | 4 + samples/XML/point-3.2.gml | 4 + samples/XML/tei-odd-sample.odd | 1304 + samples/XML/xhtml-struct-1.mod | 125 + samples/XPages/navbar.xsp-config | 17 + samples/XPages/navbar.xsp.metadata | 22 + samples/XS/CommonMark.xs | 466 + samples/wisp/intro.wisp | 2 +- samples/xBase/sample.ch | 30 + samples/xBase/sample.prg | 167 + script/convert-grammars | 10 +- script/travis/before_install | 5 + .../Data/Modelines/fundamentalEmacs.c | 6 + .../fixtures/Data/Modelines/seeplusplusEmacs1 | 2 + .../fixtures/Data/Modelines/seeplusplusEmacs2 | 2 + .../fixtures/Data/Modelines/seeplusplusEmacs3 | 2 + .../fixtures/Data/Modelines/seeplusplusEmacs4 | 2 + .../fixtures/Data/Modelines/seeplusplusEmacs5 | 2 + .../fixtures/Data/Modelines/seeplusplusEmacs6 | 2 + .../fixtures/Data/Modelines/seeplusplusEmacs7 | 2 + .../fixtures/Data/Modelines/seeplusplusEmacs8 | 2 + .../fixtures/Data/Modelines/seeplusplusEmacs9 | 2 + test/fixtures/Data/sourcemap.v1.map | 12 + test/fixtures/Data/sourcemap.v3.map | 1 + test/fixtures/Generated/ABM8G.mod | 50 + test/fixtures/Generated/ms2.mod | 19 + test/fixtures/SVG/alg_schema.link.svg | 1 + test/fixtures/SVG/alg_schema.svg | 269 + test/fixtures/Shell/_bashrc | 175 + test/helper.rb | 1 + test/test_blob.rb | 81 +- test/test_color_proximity.rb | 23 + test/test_generated.rb | 62 +- test/test_grammars.rb | 3 +- test/test_heuristics.rb | 47 +- test/test_instrumentation.rb | 50 + test/test_language.rb | 20 +- test/test_modelines.rb | 20 + test/test_pedantic.rb | 2 +- test/test_samples.rb | 17 +- test/test_shebang.rb | 3 +- test/test_tokenizer.rb | 22 +- vendor/grammars/AutoHotkey | 2 +- vendor/grammars/CLIPS-sublime | 2 +- vendor/grammars/ColdFusion | 2 +- vendor/grammars/Docker.tmbundle | 2 +- vendor/grammars/Elm.tmLanguage | 2 +- vendor/grammars/Handlebars | 2 +- vendor/grammars/IDL-Syntax | 2 +- vendor/grammars/InnoSetup | 2 +- vendor/grammars/Julia.tmbundle | 2 +- vendor/grammars/Lean.tmbundle | 1 + vendor/grammars/Modelica | 2 +- vendor/grammars/NimLime | 2 +- vendor/grammars/PHP-Twig.tmbundle | 2 +- vendor/grammars/SMT.tmbundle | 1 + vendor/grammars/Stylus | 2 +- vendor/grammars/Sublime-Coq | 2 +- vendor/grammars/Sublime-Logos | 2 +- vendor/grammars/Sublime-Modula-2 | 1 + vendor/grammars/Sublime-REBOL | 2 +- vendor/grammars/Sublime-Red | 1 + vendor/grammars/Sublime-SQF-Language | 2 +- vendor/grammars/Sublime-Text-2-OpenEdge-ABL | 2 +- vendor/grammars/Sublime-VimL | 2 +- vendor/grammars/SublimeClarion | 1 + vendor/grammars/SublimePapyrus | 2 +- vendor/grammars/abap.tmbundle | 2 +- vendor/grammars/ada.tmbundle | 2 +- vendor/grammars/ampl | 1 + vendor/grammars/api-blueprint-sublime-plugin | 1 + vendor/grammars/asciidoc.tmbundle | 2 +- vendor/grammars/atom-fsharp | 1 + vendor/grammars/atom-language-purescript | 1 + vendor/grammars/ats.sublime | 2 +- vendor/grammars/bro-sublime | 2 +- vendor/grammars/carto-atom | 2 +- vendor/grammars/ceylon-sublimetext | 2 +- vendor/grammars/chapel-tmbundle | 2 +- vendor/grammars/css.tmbundle | 2 +- vendor/grammars/d.tmbundle | 2 +- vendor/grammars/dart-sublime-bundle | 2 +- vendor/grammars/elixir-tmbundle | 2 +- vendor/grammars/factor | 2 +- vendor/grammars/fsharpbinding | 1 - vendor/grammars/gap-tmbundle | 2 +- vendor/grammars/grace-tmbundle | 2 +- vendor/grammars/graphviz.tmbundle | 2 +- vendor/grammars/haskell.tmbundle | 2 +- vendor/grammars/haxe-sublime-bundle | 2 +- vendor/grammars/html.tmbundle | 2 +- vendor/grammars/idl.tmbundle | 2 +- vendor/grammars/jade-tmbundle | 2 +- vendor/grammars/java.tmbundle | 2 +- vendor/grammars/javadoc.tmbundle | 1 - vendor/grammars/jflex.tmbundle | 1 + vendor/grammars/jquery-tmbundle | 1 - vendor/grammars/kotlin-sublime-package | 2 +- vendor/grammars/language-clojure | 2 +- vendor/grammars/language-coffee-script | 2 +- vendor/grammars/language-crystal | 1 + vendor/grammars/language-csharp | 2 +- vendor/grammars/language-gfm | 2 +- vendor/grammars/language-javascript | 2 +- vendor/grammars/language-jsoniq | 1 + vendor/grammars/language-ncl | 1 + vendor/grammars/language-python | 2 +- vendor/grammars/language-shellscript | 2 +- vendor/grammars/language-xbase | 1 + vendor/grammars/language-yaml | 2 +- vendor/grammars/latex.tmbundle | 2 +- vendor/grammars/lisp.tmbundle | 2 +- vendor/grammars/mercury-tmlanguage | 2 +- vendor/grammars/ocaml.tmbundle | 2 +- vendor/grammars/openscad.tmbundle | 1 + vendor/grammars/oracle.tmbundle | 1 + vendor/grammars/perl.tmbundle | 2 +- vendor/grammars/php-smarty.tmbundle | 2 +- vendor/grammars/php.tmbundle | 2 +- vendor/grammars/powershell | 2 +- vendor/grammars/r.tmbundle | 2 +- vendor/grammars/restructuredtext.tmbundle | 2 +- vendor/grammars/ruby-on-rails-tmbundle | 1 - vendor/grammars/sas.tmbundle | 2 +- vendor/grammars/sass-textmate-bundle | 2 +- vendor/grammars/smali-sublime | 1 + vendor/grammars/sublime-better-typescript | 2 +- vendor/grammars/sublime-idris | 2 +- vendor/grammars/sublime-mask | 2 +- vendor/grammars/sublime-netlinx | 1 + vendor/grammars/sublime-nginx | 2 +- vendor/grammars/sublime-rust | 2 +- vendor/grammars/sublime-tea | 2 +- vendor/grammars/sublime-text-ox | 2 +- vendor/grammars/sublime-varnish | 1 + vendor/grammars/sublime_cobol | 2 +- vendor/grammars/text.tmbundle | 1 - vendor/grammars/textile.tmbundle | 1 - vendor/grammars/textmate.tmbundle | 1 - vendor/grammars/toml.tmbundle | 2 +- vendor/grammars/xc.tmbundle | 1 + 434 files changed, 79876 insertions(+), 56121 deletions(-) create mode 100644 samples/AMPL/CT2.mod create mode 100644 samples/AMPL/toy.ampl create mode 100644 samples/API Blueprint/actions.apib create mode 100644 samples/API Blueprint/attributes.apib create mode 100644 samples/API Blueprint/simple.apib create mode 100644 samples/ApacheConf/apache.vhost create mode 100644 samples/Assembly/fp_sqr32_160_comba.inc create mode 100644 samples/Assembly/lib.inc create mode 100644 samples/Assembly/macros.inc create mode 100644 samples/Brainfuck/factor.b create mode 100644 samples/Brainfuck/fib100.bf create mode 100644 samples/Brainfuck/hello.bf create mode 100644 samples/Brainfuck/helloworld.bf create mode 100644 samples/Brainfuck/rot13.bf create mode 100644 samples/C++/ClasspathVMSystemProperties.inc create mode 100644 samples/C++/initClasses.inc create mode 100644 samples/C++/instances.inc create mode 100755 samples/C/filenames/script create mode 100644 samples/C/pqiv.h create mode 100644 samples/Charity/example.ch create mode 100644 samples/Clarion/CStringClass.clw create mode 100644 samples/Clarion/ConsoleSupport.clw create mode 100644 samples/Clarion/HelloWorld.clw create mode 100644 samples/Clarion/hello.clw create mode 100644 samples/Clojure/build.boot create mode 100644 samples/Common Lisp/array.l create mode 100644 samples/Common Lisp/common.l create mode 100644 samples/Common Lisp/hello.lisp create mode 100644 samples/D/mpq.d create mode 100644 samples/DIGITAL Command Language/fis_gtm_kitinstal.com create mode 100644 samples/DIGITAL Command Language/ghostpdl_zlib_make_vms.com create mode 100644 samples/DIGITAL Command Language/libxslt_build.com create mode 100644 samples/DIGITAL Command Language/vmsbackup_build.com create mode 100644 samples/DTrace/counts.d create mode 100644 samples/DTrace/javascript-trace.d create mode 100644 samples/DTrace/probes.d create mode 100644 samples/Eiffel/application.e create mode 100644 samples/Eiffel/book_collection.e create mode 100644 samples/Eiffel/git_checkout_command.e create mode 100644 samples/Elixir/filenames/mix.lock rename samples/Erlang/{factorial.script! => factorial} (100%) create mode 100644 samples/Erlang/filenames/rebar.config create mode 100644 samples/Erlang/filenames/rebar.config.lock create mode 100644 samples/Erlang/filenames/rebar.lock rename samples/Erlang/{release.script! => release} (100%) create mode 100644 samples/Filterscript/colormatrix.fs create mode 100644 samples/Filterscript/fs_kernel.fs create mode 100644 samples/Formatted/long_seq.for create mode 100644 samples/Formatted/wksst8110.for delete mode 100644 samples/G-code/lm.g delete mode 100644 samples/G-code/rm.g create mode 100644 samples/GAS/hello.ms create mode 100644 samples/Go/api.pb.go create mode 100644 samples/Go/embedded.go create mode 100644 samples/Go/gen-go-linguist-thrift.go create mode 100644 samples/Groff/Tcl.n create mode 100644 samples/Groff/create_view.l create mode 100644 samples/Groff/fsinterface.ms rename samples/Groovy/{build.script! => build.gvy} (100%) rename samples/Groovy/{groovy.script! => groovy} (100%) create mode 100644 samples/HTML/rpanel.inc create mode 100644 samples/HTML/tailDel.inc create mode 100644 samples/Haskell/HsColour.hs create mode 100644 samples/HyPhy/AAModelComparison.bf create mode 100644 samples/HyPhy/CodonModelCompare.bf create mode 100644 samples/HyPhy/MFPositiveSelection.bf create mode 100755 samples/HyPhy/MatrixIndexing.bf create mode 100644 samples/HyPhy/MolecularClock.bf create mode 100644 samples/HyPhy/dNdSDistributionComparison.bf create mode 100644 samples/HyPhy/hyphy_cmds.bf create mode 100755 samples/HyPhy/profile_test.bf create mode 100644 samples/INI/MouseKeyboard.pro create mode 100644 samples/Isabelle ROOT/filenames/ROOT create mode 100644 samples/JFlex/LexScan.flex create mode 100644 samples/JFlex/java.jflex create mode 100644 samples/Java/gen-java-linguist-thrift.java create mode 100644 samples/JavaScript/gen-js-linguist-thrift.js rename samples/JavaScript/{js.script! => js} (100%) rename samples/JavaScript/{js2.script! => js2} (100%) create mode 100644 samples/KiCad/Volume.sch create mode 100644 samples/KiCad/nrf-bga.kicad_pcb create mode 100644 samples/KiCad/ultimate-temp-controller.sch create mode 100644 samples/Lean/binary.lean create mode 100644 samples/Lean/set.hlean create mode 100644 samples/Lex/zend_ini_scanner.l create mode 100644 samples/Limbo/cat.b create mode 100644 samples/Limbo/lock.b create mode 100644 samples/Limbo/lock.m create mode 100644 samples/Linker Script/filenames/ld.script create mode 100644 samples/Linker Script/link.ld create mode 100644 samples/Linker Script/vmlinux.lds create mode 100644 samples/Linux Kernel Module/bcm4334x.mod create mode 100644 samples/Linux Kernel Module/mbcache.mod create mode 100644 samples/Linux Kernel Module/md5.mod create mode 100644 samples/MUF/39.m create mode 100644 samples/MUF/cmd-say.muf create mode 100644 samples/Makefile/filenames/Kbuild create mode 100644 samples/Makefile/filenames/Makefile.boot create mode 100644 samples/Makefile/foo.o.d rename samples/Makefile/{makefile.script! => makefile} (100%) create mode 100644 samples/Mathematica/Predicates.wl create mode 100644 samples/Mathematica/UnitTest.wlt create mode 100644 samples/Modelica/NestedPackages.mo create mode 100644 samples/Modelica/NewtonCooling.mo create mode 100644 samples/Modelica/Pendulum.mo create mode 100644 samples/Modelica/RLC.mo create mode 100644 samples/Modelica/SecondOrderSystem.mo create mode 100644 samples/Modelica/System.mo create mode 100644 samples/Modelica/package.mo create mode 100644 samples/Modelica/package2.mo create mode 100644 samples/Modelica/package3.mo create mode 100644 samples/Modelica/package4.mo create mode 100644 samples/Modula-2/HuffChan.mod create mode 100644 samples/Module Management System/descrip.mms create mode 100644 samples/Module Management System/openvms.mmk create mode 100755 samples/Module Management System/simh_descrip.mms create mode 100644 samples/Module Management System/spline_descrip.mms create mode 100644 samples/Module Management System/xv_makefile.mms create mode 100644 samples/NCL/PrnOscPat_driver.ncl create mode 100644 samples/NCL/WRF_static_2.ncl create mode 100644 samples/NCL/WRF_track_1.ncl create mode 100644 samples/NCL/cru_8.ncl create mode 100644 samples/NCL/gsn_csm_xy2_time_series_inputs.ncl create mode 100644 samples/NCL/hdf4sds_7.ncl create mode 100644 samples/NCL/mask_12.ncl create mode 100644 samples/NCL/mcsst_1.ncl create mode 100644 samples/NCL/primero.ncl create mode 100644 samples/NCL/topo_9.ncl create mode 100644 samples/NCL/traj_3.ncl create mode 100644 samples/NCL/tsdiagram_1.ncl create mode 100644 samples/NCL/unique_9.ncl create mode 100644 samples/NCL/viewport_4.ncl create mode 100644 samples/NCL/weather_sym_6.ncl create mode 100644 samples/NCL/xy_29.ncl create mode 100644 samples/NL/assign0.nl create mode 100644 samples/NL/balassign0.nl create mode 100644 samples/NetLinx+ERB/sample.axi.erb create mode 100644 samples/NetLinx+ERB/sample.axs.erb create mode 100644 samples/NetLinx/projector.axi create mode 100644 samples/NetLinx/volume-array.axs create mode 100644 samples/NewLisp/queens.nl create mode 100644 samples/Nginx/example.com.vhost rename samples/Nu/{nu.script! => nu} (100%) create mode 100644 samples/OCaml/cmdliner.ml create mode 100644 samples/OCaml/common.ml create mode 100644 samples/OCaml/date.ml create mode 100644 samples/OCaml/map.ml create mode 100644 samples/OCaml/mirage.ml create mode 100644 samples/OCaml/reload.ml create mode 100644 samples/OCaml/sigset.ml create mode 100644 samples/OCaml/uutf.ml create mode 100644 samples/Objective-C/gen-cocoa-linguist-thrift.m rename samples/PHP/{drupal.script! => drupal.php} (100%) create mode 100644 samples/PHP/file_display.inc rename samples/PHP/{php.script! => php} (100%) rename samples/PHP/{php-script.script! => php-script} (100%) rename samples/PHP/{php2.script! => php2} (100%) create mode 100644 samples/PHP/root.php create mode 100644 samples/PLSQL/myobject.sql create mode 100644 samples/PLSQL/packagebody.pkb create mode 100644 samples/PLSQL/packageheader.pks create mode 100644 samples/PLSQL/prime#.plsql create mode 100644 samples/PLSQL/who_called_me.sql create mode 100644 samples/PLpgSQL/plpgsql_lint-8.4.sql create mode 100644 samples/PLpgSQL/plpgsql_lint-9.0.sql create mode 100644 samples/PLpgSQL/plpgsql_lint-9.1.sql create mode 100644 samples/PLpgSQL/plpgsql_lint-9.2.sql create mode 100644 samples/PLpgSQL/plpgsql_lint-9.3.sql create mode 100644 samples/Pascal/image_url.inc create mode 100644 samples/Pascal/libc.inc create mode 100644 samples/Pascal/vmops_impl.inc create mode 100644 samples/Perl/exception_handler.pl create mode 100644 samples/Perl/getchar.al rename samples/Perl/{perl.script! => perl} (100%) create mode 100644 samples/PicoLisp/simul.l rename samples/Prolog/{dleak-report.script! => dleak-report} (100%) create mode 100644 samples/Public Key/id_dsa.asc create mode 100644 samples/Public Key/id_rsa.asc create mode 100644 samples/Public Key/sshkey1.asc create mode 100644 samples/Puppet/apacheinit.pp create mode 100644 samples/Python/gen-py-linguist-thrift.py rename samples/Python/{python.script! => python} (100%) rename samples/Python/{python2.script! => python2} (100%) rename samples/Python/{python3.script! => python3} (100%) create mode 100644 samples/QML/common.qbs rename samples/QMake/{qmake.script! => qmake} (100%) rename samples/R/{git-punchcard.script! => git-punchcard} (100%) create mode 100644 samples/RenderScript/convolve3x3.rs create mode 100644 samples/RenderScript/scenegraph_objects.rsh create mode 100644 samples/Ruby/filenames/Deliverfile create mode 100644 samples/Ruby/filenames/Fastfile create mode 100644 samples/Ruby/filenames/Podfile create mode 100644 samples/Ruby/filenames/Snapfile create mode 100644 samples/Ruby/gen-rb-linguist-thrift.rb create mode 100644 samples/Ruby/index.json.jbuilder rename samples/Ruby/{macruby.script! => macruby} (100%) create mode 100755 samples/Ruby/rexpl rename samples/Ruby/{ruby.script! => ruby} (100%) rename samples/Ruby/{ruby2.script! => ruby2} (100%) create mode 100755 samples/Ruby/shoes-swt create mode 100644 samples/SMT/bignum_lia1.smt2 create mode 100644 samples/SMT/list4.smt2 create mode 100644 samples/SMT/queen10-1.smt2 create mode 100644 samples/SMT/shufflevector.smt create mode 100644 samples/SQL/create_stuff.sql create mode 100644 samples/SQL/drop_stuff.sql create mode 100644 samples/SQL/dual.sql create mode 100644 samples/SQL/hostcache_set_state.inc create mode 100644 samples/SQLPL/check_reorg.sql create mode 100644 samples/SQLPL/comm_amount.db2 create mode 100644 samples/SQLPL/drop_table.db2 create mode 100644 samples/SQLPL/runstats.sql create mode 100644 samples/SQLPL/sleep.sql create mode 100644 samples/SQLPL/trigger.sql create mode 100644 samples/SaltStack/gimp.sls create mode 100644 samples/SaltStack/gpg4win-light.sls create mode 100644 samples/SaltStack/openoffice.sls create mode 100644 samples/SaltStack/truecrypt.sls rename samples/Scala/{99-bottles-of-beer.script! => 99-bottles-of-beer} (100%) rename samples/Scala/{scala.script! => scala} (100%) rename samples/Shell/{99-bottles-of-beer.script! => 99-bottles-of-beer} (100%) rename samples/Shell/{bash.script! => bash} (100%) rename samples/Shell/{plugin.script! => plugin} (100%) rename samples/Shell/{sbt.script! => sbt} (100%) rename samples/Shell/{sh.script! => sh} (100%) rename samples/Shell/{string-chopping.script! => string-chopping} (100%) create mode 100755 samples/Shell/valid-shebang.tool rename samples/Shell/{zsh.script! => zsh} (100%) create mode 100644 samples/Smali/ActionBarDrawerToggle.smali create mode 100644 samples/Smali/DoodleMobileAnaylise.smali create mode 100644 samples/Smali/ModernAsyncTask.smali create mode 100644 samples/Smali/PenguinSprite.smali create mode 100644 samples/Smali/Subject.smali create mode 100644 samples/Smali/ViewDragHelper.smali create mode 100644 samples/Smali/WbxmlSerializer.smali create mode 100644 samples/SourcePawn/Check.inc create mode 100644 samples/SourcePawn/fixed.inc create mode 100644 samples/SourcePawn/foo.sma create mode 100644 samples/SourcePawn/mfile.inc create mode 100644 samples/SourcePawn/y_testing.inc create mode 100644 samples/Text/01_top.ncl create mode 100644 samples/Text/LIDARLite.ncl create mode 100644 samples/Text/Site.local.ncl create mode 100644 samples/Text/main.ncl create mode 100644 samples/Text/min-help.ncl create mode 100644 samples/Text/receiver.ncl create mode 100644 samples/Text/rmMonAnnCycLLT-help.ncl create mode 100644 samples/Text/zonalAve-help.ncl create mode 100644 samples/Thrift/linguist.thrift create mode 100644 samples/Unity3D Asset/GapTile.mat create mode 100644 samples/Unity3D Asset/Hover.anim create mode 100644 samples/Unity3D Asset/Tiles.meta create mode 100644 samples/Unity3D Asset/TimeManager.asset create mode 100644 samples/Unity3D Asset/canvas_Fullscreen_Fader.prefab create mode 100644 samples/VimL/filenames/.nvimrc create mode 100644 samples/VimL/solarized.vim create mode 100644 samples/XML/Application.xib create mode 100644 samples/XML/Example.mdpolicy create mode 100644 samples/XML/Storyboard.storyboard create mode 100644 samples/XML/intellij.iml create mode 100644 samples/XML/point-3.1.gml create mode 100644 samples/XML/point-3.2.gml create mode 100644 samples/XML/tei-odd-sample.odd create mode 100644 samples/XML/xhtml-struct-1.mod create mode 100755 samples/XPages/navbar.xsp-config create mode 100755 samples/XPages/navbar.xsp.metadata create mode 100644 samples/XS/CommonMark.xs create mode 100644 samples/xBase/sample.ch create mode 100644 samples/xBase/sample.prg create mode 100644 test/fixtures/Data/Modelines/fundamentalEmacs.c create mode 100644 test/fixtures/Data/Modelines/seeplusplusEmacs1 create mode 100644 test/fixtures/Data/Modelines/seeplusplusEmacs2 create mode 100644 test/fixtures/Data/Modelines/seeplusplusEmacs3 create mode 100644 test/fixtures/Data/Modelines/seeplusplusEmacs4 create mode 100644 test/fixtures/Data/Modelines/seeplusplusEmacs5 create mode 100644 test/fixtures/Data/Modelines/seeplusplusEmacs6 create mode 100644 test/fixtures/Data/Modelines/seeplusplusEmacs7 create mode 100644 test/fixtures/Data/Modelines/seeplusplusEmacs8 create mode 100644 test/fixtures/Data/Modelines/seeplusplusEmacs9 create mode 100644 test/fixtures/Data/sourcemap.v1.map create mode 100644 test/fixtures/Data/sourcemap.v3.map create mode 100644 test/fixtures/Generated/ABM8G.mod create mode 100644 test/fixtures/Generated/ms2.mod create mode 120000 test/fixtures/SVG/alg_schema.link.svg create mode 100644 test/fixtures/SVG/alg_schema.svg create mode 100644 test/fixtures/Shell/_bashrc create mode 100644 test/test_color_proximity.rb create mode 100644 test/test_instrumentation.rb create mode 160000 vendor/grammars/Lean.tmbundle create mode 160000 vendor/grammars/SMT.tmbundle create mode 160000 vendor/grammars/Sublime-Modula-2 create mode 160000 vendor/grammars/Sublime-Red create mode 160000 vendor/grammars/SublimeClarion create mode 160000 vendor/grammars/ampl create mode 160000 vendor/grammars/api-blueprint-sublime-plugin create mode 160000 vendor/grammars/atom-fsharp create mode 160000 vendor/grammars/atom-language-purescript delete mode 160000 vendor/grammars/fsharpbinding delete mode 160000 vendor/grammars/javadoc.tmbundle create mode 160000 vendor/grammars/jflex.tmbundle delete mode 160000 vendor/grammars/jquery-tmbundle create mode 160000 vendor/grammars/language-crystal create mode 160000 vendor/grammars/language-jsoniq create mode 160000 vendor/grammars/language-ncl create mode 160000 vendor/grammars/language-xbase create mode 160000 vendor/grammars/openscad.tmbundle create mode 160000 vendor/grammars/oracle.tmbundle delete mode 160000 vendor/grammars/ruby-on-rails-tmbundle create mode 160000 vendor/grammars/smali-sublime create mode 160000 vendor/grammars/sublime-netlinx create mode 160000 vendor/grammars/sublime-varnish delete mode 160000 vendor/grammars/text.tmbundle delete mode 160000 vendor/grammars/textile.tmbundle delete mode 160000 vendor/grammars/textmate.tmbundle create mode 160000 vendor/grammars/xc.tmbundle diff --git a/.gitmodules b/.gitmodules index 9fefaa4c..dcd94622 100644 --- a/.gitmodules +++ b/.gitmodules @@ -96,7 +96,7 @@ url = https://github.com/bfad/Sublime-Lasso [submodule "vendor/grammars/chapel-tmbundle"] path = vendor/grammars/chapel-tmbundle - url = https://github.com/bholt/chapel-tmbundle + url = https://github.com/chapel-lang/chapel-tmbundle [submodule "vendor/grammars/sublime-nginx"] path = vendor/grammars/sublime-nginx url = https://github.com/brandonwamboldt/sublime-nginx @@ -118,9 +118,6 @@ [submodule "vendor/grammars/cucumber-tmbundle"] path = vendor/grammars/cucumber-tmbundle url = https://github.com/cucumber/cucumber-tmbundle -[submodule "vendor/grammars/Handlebars"] - path = vendor/grammars/Handlebars - url = https://github.com/daaain/Handlebars [submodule "vendor/grammars/powershell"] path = vendor/grammars/powershell url = https://github.com/SublimeText/PowerShell @@ -136,9 +133,6 @@ [submodule "vendor/grammars/fancy-tmbundle"] path = vendor/grammars/fancy-tmbundle url = https://github.com/fancy-lang/fancy-tmbundle -[submodule "vendor/grammars/fsharpbinding"] - path = vendor/grammars/fsharpbinding - url = https://github.com/fsharp/fsharpbinding [submodule "vendor/grammars/monkey.tmbundle"] path = vendor/grammars/monkey.tmbundle url = https://github.com/gingerbeardman/monkey.tmbundle @@ -169,9 +163,6 @@ [submodule "vendor/grammars/Textmate-Gosu-Bundle"] path = vendor/grammars/Textmate-Gosu-Bundle url = https://github.com/jpcamara/Textmate-Gosu-Bundle -[submodule "vendor/grammars/jquery-tmbundle"] - path = vendor/grammars/jquery-tmbundle - url = https://github.com/kswedberg/jquery-tmbundle [submodule "vendor/grammars/fish-tmbundle"] path = vendor/grammars/fish-tmbundle url = https://github.com/l15n/fish-tmbundle @@ -346,9 +337,6 @@ [submodule "vendor/grammars/java.tmbundle"] path = vendor/grammars/java.tmbundle url = https://github.com/textmate/java.tmbundle -[submodule "vendor/grammars/javadoc.tmbundle"] - path = vendor/grammars/javadoc.tmbundle - url = https://github.com/textmate/javadoc.tmbundle [submodule "vendor/grammars/javascript-objective-j.tmbundle"] path = vendor/grammars/javascript-objective-j.tmbundle url = https://github.com/textmate/javascript-objective-j.tmbundle @@ -397,9 +385,6 @@ [submodule "vendor/grammars/pascal.tmbundle"] path = vendor/grammars/pascal.tmbundle url = https://github.com/textmate/pascal.tmbundle -[submodule "vendor/grammars/perl.tmbundle"] - path = vendor/grammars/perl.tmbundle - url = https://github.com/textmate/perl.tmbundle [submodule "vendor/grammars/php-smarty.tmbundle"] path = vendor/grammars/php-smarty.tmbundle url = https://github.com/textmate/php-smarty.tmbundle @@ -427,9 +412,6 @@ [submodule "vendor/grammars/ruby-haml.tmbundle"] path = vendor/grammars/ruby-haml.tmbundle url = https://github.com/textmate/ruby-haml.tmbundle -[submodule "vendor/grammars/ruby-on-rails-tmbundle"] - path = vendor/grammars/ruby-on-rails-tmbundle - url = https://github.com/textmate/ruby-on-rails-tmbundle [submodule "vendor/grammars/scheme.tmbundle"] path = vendor/grammars/scheme.tmbundle url = https://github.com/textmate/scheme.tmbundle @@ -448,15 +430,6 @@ [submodule "vendor/grammars/tcl.tmbundle"] path = vendor/grammars/tcl.tmbundle url = https://github.com/textmate/tcl.tmbundle -[submodule "vendor/grammars/text.tmbundle"] - path = vendor/grammars/text.tmbundle - url = https://github.com/textmate/text.tmbundle -[submodule "vendor/grammars/textile.tmbundle"] - path = vendor/grammars/textile.tmbundle - url = https://github.com/textmate/textile.tmbundle -[submodule "vendor/grammars/textmate.tmbundle"] - path = vendor/grammars/textmate.tmbundle - url = https://github.com/textmate/textmate.tmbundle [submodule "vendor/grammars/thrift.tmbundle"] path = vendor/grammars/thrift.tmbundle url = https://github.com/textmate/thrift.tmbundle @@ -490,10 +463,6 @@ [submodule "vendor/grammars/sublime-nix"] path = vendor/grammars/sublime-nix url = https://github.com/wmertens/sublime-nix -[submodule "vendor/grammars/ada.tmbundle"] - path = vendor/grammars/ada.tmbundle - url = https://github.com/aroben/ada.tmbundle - branch = better-with-highlighting [submodule "vendor/grammars/oz-tmbundle"] path = vendor/grammars/oz-tmbundle url = https://github.com/eregon/oz-tmbundle @@ -615,6 +584,12 @@ [submodule "vendor/grammars/mediawiki.tmbundle"] path = vendor/grammars/mediawiki.tmbundle url = https://github.com/textmate/mediawiki.tmbundle +[submodule "vendor/grammars/SublimeClarion"] + path = vendor/grammars/SublimeClarion + url = https://github.com/fushnisoft/SublimeClarion +[submodule "vendor/grammars/oracle.tmbundle"] + path = vendor/grammars/oracle.tmbundle + url = https://github.com/mulander/oracle.tmbundle.git [submodule "vendor/grammars/BrightScript.tmbundle"] path = vendor/grammars/BrightScript.tmbundle url = https://github.com/cmink/BrightScript.tmbundle @@ -627,3 +602,66 @@ [submodule "vendor/grammars/sublime-text-pig-latin"] path = vendor/grammars/sublime-text-pig-latin url = https://github.com/goblindegook/sublime-text-pig-latin +[submodule "vendor/grammars/Lean.tmbundle"] + path = vendor/grammars/Lean.tmbundle + url = https://github.com/leanprover/Lean.tmbundle +[submodule "vendor/grammars/ampl"] + path = vendor/grammars/ampl + url = https://github.com/ampl/sublime-ampl +[submodule "vendor/grammars/openscad.tmbundle"] + path = vendor/grammars/openscad.tmbundle + url = https://github.com/tbuser/openscad.tmbundle +[submodule "vendor/grammars/sublime-varnish"] + path = vendor/grammars/sublime-varnish + url = https://github.com/brandonwamboldt/sublime-varnish +[submodule "vendor/grammars/xc.tmbundle"] + path = vendor/grammars/xc.tmbundle + url = https://github.com/graymalkin/xc.tmbundle +[submodule "vendor/grammars/perl.tmbundle"] + path = vendor/grammars/perl.tmbundle + url = https://github.com/textmate/perl.tmbundle +[submodule "vendor/grammars/sublime-netlinx"] + path = vendor/grammars/sublime-netlinx + url = https://github.com/amclain/sublime-netlinx +[submodule "vendor/grammars/Sublime-Red"] + path = vendor/grammars/Sublime-Red + url = https://github.com/Oldes/Sublime-Red +[submodule "vendor/grammars/jflex.tmbundle"] + path = vendor/grammars/jflex.tmbundle + url = https://github.com/jflex-de/jflex.tmbundle.git +[submodule "vendor/grammars/Sublime-Modula-2"] + path = vendor/grammars/Sublime-Modula-2 + url = https://github.com/harogaston/Sublime-Modula-2 +[submodule "vendor/grammars/ada.tmbundle"] + path = vendor/grammars/ada.tmbundle + url = https://github.com/textmate/ada.tmbundle +[submodule "vendor/grammars/api-blueprint-sublime-plugin"] + path = vendor/grammars/api-blueprint-sublime-plugin + url = https://github.com/apiaryio/api-blueprint-sublime-plugin +[submodule "vendor/grammars/Handlebars"] + path = vendor/grammars/Handlebars + url = https://github.com/daaain/Handlebars +[submodule "vendor/grammars/smali-sublime"] + path = vendor/grammars/smali-sublime + url = https://github.com/ShaneWilton/sublime-smali +[submodule "vendor/grammars/language-jsoniq"] + path = vendor/grammars/language-jsoniq + url = http://github.com/wcandillon/language-jsoniq +[submodule "vendor/grammars/atom-fsharp"] + path = vendor/grammars/atom-fsharp + url = https://github.com/fsprojects/atom-fsharp +[submodule "vendor/grammars/SMT.tmbundle"] + path = vendor/grammars/SMT.tmbundle + url = https://github.com/SRI-CSL/SMT.tmbundle.git +[submodule "vendor/grammars/language-crystal"] + path = vendor/grammars/language-crystal + url = https://github.com/k2b6s9j/language-crystal +[submodule "vendor/grammars/language-xbase"] + path = vendor/grammars/language-xbase + url = https://github.com/hernad/atom-language-harbour +[submodule "vendor/grammars/language-ncl"] + path = vendor/grammars/language-ncl + url = https://github.com/rpavlick/language-ncl.git +[submodule "vendor/grammars/atom-language-purescript"] + path = vendor/grammars/atom-language-purescript + url = https://github.com/freebroccolo/atom-language-purescript diff --git a/.travis.yml b/.travis.yml index 4d0c2351..52540b57 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,3 @@ -sudo: false before_install: script/travis/before_install rvm: - 1.9.3 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b1c8a09c..1d358957 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,10 +1,31 @@ # Contributing -Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. The majority of contributions won't need to touch any Ruby code at all. +[code-of-conduct]: http://todogroup.org/opencodeofconduct/#Linguist/opensource@github.com + +Hi there! We're thrilled that you'd like to contribute to this project. Your help is essential for keeping it great. This project adheres to the [Open Code of Conduct][code-of-conduct]. By participating, you are expected to uphold this code. + +The majority of contributions won't need to touch any Ruby code at all. + +## Adding an extension to a language + +We try only to add new extensions once they have some usage on GitHub. In most cases we prefer that extensions be in use in hundreds of repositories before supporting them in Linguist. + +To add support for a new extension: + +0. Add your extension to the language entry in [`languages.yml`][languages]. +0. Add at least one sample for your extension to the [samples directory][samples] in the correct subdirectory. +0. Open a pull request, linking to a [GitHub search result](https://github.com/search?utf8=%E2%9C%93&q=extension%3Aboot+NOT+nothack&type=Code&ref=searchresults) showing in-the-wild usage. + +In addition, if this extension is already listed in [`languages.yml`][languages] then sometimes a few more steps will need to be taken: + +0. Make sure that example `.yourextension` files are present in the [samples directory][samples] for each language that uses `.yourextension`. +0. Test the performance of the Bayesian classifier with a relatively large number (1000s) of sample `.yourextension` files. (ping @arfon or @bkeepers to help with this) to ensure we're not misclassifying files. +0. If the Bayesian classifier does a bad job with the sample `.yourextension` files then a [heuristic](https://github.com/github/linguist/blob/master/lib/linguist/heuristics.rb) may need to be written to help. + ## Adding a language -We try only to add languages once they have some usage on GitHub. In most cases we prefer that languages be in use in hundreds of repositories before supporting them in Linguist. +We try only to add languages once they have some usage on GitHub. In most cases we prefer that each new file extension be in use in hundreds of repositories before supporting them in Linguist. To add support for a new language: @@ -23,21 +44,23 @@ In addition, if your new language defines an extension that's already listed in Remember, the goal here is to try and avoid false positives! + ## Fixing a misclassified language Most languages are detected by their file extension defined in [languages.yml][languages]. For disambiguating between files with common extensions, linguist applies some [heuristics](/lib/linguist/heuristics.rb) and a [statistical classifier](lib/linguist/classifier.rb). This process can help differentiate between, for example, `.h` files which could be either C, C++, or Obj-C. Misclassifications can often be solved by either adding a new filename or extension for the language or adding more [samples][samples] to make the classifier smarter. + ## Fixing syntax highlighting Syntax highlighting in GitHub is performed using TextMate-compatible grammars. These are the same grammars that TextMate, Sublime Text and Atom use. Every language in [languages.yml][languages] is mapped to its corresponding TM `scope`. This scope will be used when picking up a grammar for highlighting. Assuming your code is being detected as the right language, in most cases this is due to a bug in the language grammar rather than a bug in Linguist. [`grammars.yml`][grammars] lists all the grammars we use for syntax highlighting on github.com. Find the one corresponding to your code's programming language and submit a bug report upstream. If you can, try to reproduce the highlighting problem in the text editor that the grammar is designed for (TextMate, Sublime Text, or Atom) and include that information in your bug report. -You can also try to fix the bug yourself and submit a Pull Request. [TextMate's documentation](http://manual.macromates.com/en/language_grammars) offers a good introduction on how to work with TextMate-compatible grammars. You can test grammars using [Lightshow](https://github-lightshow.herokuapp.com). +You can also try to fix the bug yourself and submit a Pull Request. [TextMate's documentation](https://manual.macromates.com/en/language_grammars) offers a good introduction on how to work with TextMate-compatible grammars. You can test grammars using [Lightshow](https://github-lightshow.herokuapp.com). -Once the bug has been fixed upstream, please let us know and we'll pick it up for GitHub. +Once the bug has been fixed upstream, we'll pick it up for GitHub in the next release of Linguist. ## Testing @@ -51,9 +74,10 @@ To run the tests: bundle exec rake test -Sometimes getting the tests running can be too much work, especially if you don't have much Ruby experience. It's okay: be lazy and let our build bot [Travis](http://travis-ci.org/#!/github/linguist) run the tests for you. Just open a pull request and the bot will start cranking away. +Sometimes getting the tests running can be too much work, especially if you don't have much Ruby experience. It's okay: be lazy and let our build bot [Travis](https://travis-ci.org/#!/github/linguist) run the tests for you. Just open a pull request and the bot will start cranking away. + +Here's our current build status: [![Build Status](https://api.travis-ci.org/github/linguist.svg?branch=master)](https://travis-ci.org/github/linguist) -Here's our current build status: [![Build Status](https://secure.travis-ci.org/github/linguist.png?branch=master)](http://travis-ci.org/github/linguist) ## Releasing diff --git a/README.md b/README.md index 6a2447a9..374851fb 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Linguist supports a number of different custom overrides strategies for language ### Using gitattributes -Add a `.gitattributes` file to your project and use standard git-style path matchers for the files you want to override to set `linguist-documentation`, `linguist-language`, and `linguist-vendored`. +Add a `.gitattributes` file to your project and use standard git-style path matchers for the files you want to override to set `linguist-documentation`, `linguist-language`, and `linguist-vendored`. `.gitattributes` will be used to determine language statistics, but will not be used to syntax highlight files. To manually set syntax highlighting, use [Vim or Emacs modelines](#using-emacs-or-vim-modelines). ``` $ cat .gitattributes @@ -35,7 +35,7 @@ $ cat .gitattributes Checking code you didn't write, such as JavaScript libraries, into your git repo is a common practice, but this often inflates your project's language stats and may even cause your project to be labeled as another language. By default, Linguist treats all of the paths defined in [lib/linguist/vendor.yml](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml) as vendored and therefore doesn't include them in the language statistics for a repository. Vendored files are also hidden by default in diffs on github.com. -Use the `linguist-vendored` attribute to vendor or un-vendor paths. +Use the `linguist-vendored` attribute to vendor or un-vendor paths. Please note, overriding the vendored (or un-vendored) status of a file only affects the language statistics for the repository and not the behavior in diffs on github.com. ``` $ cat .gitattributes @@ -53,16 +53,18 @@ project-docs/* linguist-documentation docs/formatter.rb linguist-documentation=false ``` -### Using Emacs and Vim modelines +### Using Emacs or Vim modelines -Alternatively, you can use Vim and Emacs style modelines to set the language for a single file. Modelines can be placed anywhere within a file and are respected when determining how to syntax-highlight a file on GitHub.com +Alternatively, you can use Vim or Emacs style modelines to set the language for a single file. Modelines can be placed anywhere within a file and are respected when determining how to syntax-highlight a file on GitHub.com +##### Vim ``` -Vim vim: set filetype=prolog: vim: set ft=cpp: +``` -Emacs +##### Emacs +``` -*- mode: php;-*- ``` diff --git a/Rakefile b/Rakefile index b38486c0..1936c5f0 100644 --- a/Rakefile +++ b/Rakefile @@ -62,7 +62,7 @@ namespace :benchmark do corpus = File.expand_path(ENV["CORPUS"] || "samples") - require 'linguist/language' + require 'linguist' results = Hash.new Dir.glob("#{corpus}/**/*").each do |file| diff --git a/bin/linguist b/bin/linguist index 6ac8f0a7..d1d9c306 100755 --- a/bin/linguist +++ b/bin/linguist @@ -2,10 +2,8 @@ # linguist — detect language type for a file, or, given a directory, determine language breakdown # usage: linguist [<--breakdown>] - -require 'linguist/file_blob' -require 'linguist/language' -require 'linguist/repository' +# +require 'linguist' require 'rugged' path = ARGV[0] || Dir.pwd diff --git a/github-linguist.gemspec b/github-linguist.gemspec index 983db982..ce2303bf 100644 --- a/github-linguist.gemspec +++ b/github-linguist.gemspec @@ -14,13 +14,14 @@ Gem::Specification.new do |s| s.executables << 'linguist' s.add_dependency 'charlock_holmes', '~> 0.7.3' - s.add_dependency 'escape_utils', '~> 1.0.1' + s.add_dependency 'escape_utils', '~> 1.1.0' s.add_dependency 'mime-types', '>= 1.19' - s.add_dependency 'rugged', '~> 0.22.0b4' + s.add_dependency 'rugged', '>= 0.23.0b' s.add_development_dependency 'minitest', '>= 5.0' s.add_development_dependency 'mocha' s.add_development_dependency 'pry' s.add_development_dependency 'rake' s.add_development_dependency 'yajl-ruby' + s.add_development_dependency 'color-proximity', '~> 0.2.1' end diff --git a/grammars.yml b/grammars.yml index 109f61cf..d6d38438 100644 --- a/grammars.yml +++ b/grammars.yml @@ -63,6 +63,8 @@ vendor/grammars/JSyntax/: - source.j vendor/grammars/Julia.tmbundle: - source.julia +vendor/grammars/Lean.tmbundle: +- source.lean vendor/grammars/LiveScript.tmbundle: - source.livescript vendor/grammars/Modelica/: @@ -83,6 +85,8 @@ vendor/grammars/Racket: - source.racket vendor/grammars/SCSS.tmbundle: - source.scss +vendor/grammars/SMT.tmbundle: +- source.smt vendor/grammars/Scalate.tmbundle: - source.scaml - text.html.ssp @@ -105,20 +109,27 @@ vendor/grammars/Sublime-Logos: - source.logos vendor/grammars/Sublime-Loom: - source.loomscript +vendor/grammars/Sublime-Modula-2/: +- source.modula2 vendor/grammars/Sublime-Nit: - source.nit vendor/grammars/Sublime-QML: - source.qml vendor/grammars/Sublime-REBOL: - source.rebol +vendor/grammars/Sublime-Red: +- source.red vendor/grammars/Sublime-SQF-Language: - source.sqf vendor/grammars/Sublime-Text-2-OpenEdge-ABL: - source.abl +- text.html.abl vendor/grammars/Sublime-VimL: - source.viml vendor/grammars/SublimeBrainfuck: - source.bf +vendor/grammars/SublimeClarion/: +- source.clarion vendor/grammars/SublimePapyrus/: - source.compiled-papyrus - source.papyrus @@ -141,6 +152,8 @@ vendor/grammars/actionscript3-tmbundle: - text.xml.flex-config vendor/grammars/ada.tmbundle: - source.ada +vendor/grammars/ampl: +- source.ampl vendor/grammars/ant.tmbundle: - text.xml.ant vendor/grammars/antlr.tmbundle: @@ -148,6 +161,9 @@ vendor/grammars/antlr.tmbundle: vendor/grammars/apache.tmbundle: - source.apache-config - source.apache-config.mod_perl +vendor/grammars/api-blueprint-sublime-plugin/: +- text.html.markdown.source.gfm.apib +- text.html.markdown.source.gfm.mson vendor/grammars/applescript.tmbundle: - source.applescript vendor/grammars/asciidoc.tmbundle/: @@ -158,6 +174,10 @@ vendor/grammars/asp.tmbundle: vendor/grammars/assembly.tmbundle: - objdump.x86asm - source.x86asm +vendor/grammars/atom-fsharp/: +- source.fsharp +vendor/grammars/atom-language-purescript/: +- source.purescript vendor/grammars/atom-salt: - source.python.salt - source.yaml.salt @@ -204,6 +224,7 @@ vendor/grammars/d.tmbundle: vendor/grammars/dart-sublime-bundle: - source.dart - source.pubspec +- text.dart-analysis-output - text.dart-doccomments vendor/grammars/desktop.tmbundle: - source.desktop @@ -236,8 +257,6 @@ vendor/grammars/fish-tmbundle: vendor/grammars/fortran.tmbundle: - source.fortran - source.fortran.modern -vendor/grammars/fsharpbinding: -- source.fsharp vendor/grammars/gap-tmbundle/: - source.gap vendor/grammars/gettext.tmbundle: @@ -285,12 +304,10 @@ vendor/grammars/java.tmbundle: - source.java-properties - text.html.jsp - text.junit-test-report -vendor/grammars/javadoc.tmbundle: -- text.html.javadoc vendor/grammars/javascript-objective-j.tmbundle: - source.js.objj -vendor/grammars/jquery-tmbundle: -- source.js.jquery +vendor/grammars/jflex.tmbundle: +- source.jflex vendor/grammars/json.tmbundle: - source.json vendor/grammars/kotlin-sublime-package: @@ -300,6 +317,8 @@ vendor/grammars/language-clojure: vendor/grammars/language-coffee-script: - source.coffee - source.litcoffee +vendor/grammars/language-crystal: +- source.crystal vendor/grammars/language-csharp: - source.cs - source.csx @@ -311,6 +330,11 @@ vendor/grammars/language-hy: vendor/grammars/language-javascript: - source.js - source.js.regexp +vendor/grammars/language-jsoniq/: +- source.jq +- source.xq +vendor/grammars/language-ncl: +- source.ncl vendor/grammars/language-python: - source.python - source.regexp.python @@ -319,6 +343,8 @@ vendor/grammars/language-python: vendor/grammars/language-shellscript: - source.shell - text.shell-session +vendor/grammars/language-xbase: +- source.harbour vendor/grammars/language-yaml: - source.yaml vendor/grammars/latex.tmbundle: @@ -381,14 +407,19 @@ vendor/grammars/ooc.tmbundle: - source.ooc vendor/grammars/opa.tmbundle: - source.opa +vendor/grammars/openscad.tmbundle/: +- source.scad +vendor/grammars/oracle.tmbundle: +- source.plsql.oracle vendor/grammars/oz-tmbundle/Syntaxes/Oz.tmLanguage: - source.oz vendor/grammars/pascal.tmbundle: - source.pascal -vendor/grammars/perl.tmbundle: +vendor/grammars/perl.tmbundle/: - source.perl +- source.perl.6 vendor/grammars/php-smarty.tmbundle: -- source.smarty +- text.html.smarty vendor/grammars/php.tmbundle: - text.html.php vendor/grammars/pike-textmate: @@ -415,20 +446,14 @@ vendor/grammars/restructuredtext.tmbundle: - text.restructuredtext vendor/grammars/ruby-haml.tmbundle: - text.haml -vendor/grammars/ruby-on-rails-tmbundle: -- source.js.erb.rails -- source.ruby.rails -- source.ruby.rails.rjs -- source.sql.ruby -- text.html.erb.rails vendor/grammars/ruby-slim.tmbundle: - text.slim vendor/grammars/ruby.tmbundle: - source.ruby - text.html.erb vendor/grammars/sas.tmbundle: -- source.SASLog - source.sas +- source.sas_log vendor/grammars/sass-textmate-bundle: - source.sass vendor/grammars/scala.tmbundle: @@ -438,6 +463,8 @@ vendor/grammars/scheme.tmbundle: - source.scheme vendor/grammars/scilab.tmbundle: - source.scilab +vendor/grammars/smali-sublime/smali.tmLanguage: +- source.smali vendor/grammars/smalltalk-tmbundle: - source.smalltalk vendor/grammars/sql.tmbundle: @@ -466,6 +493,9 @@ vendor/grammars/sublime-idris: - source.idris vendor/grammars/sublime-mask: - source.mask +vendor/grammars/sublime-netlinx: +- source.netlinx +- source.netlinx.erb vendor/grammars/sublime-nginx: - source.nginx vendor/grammars/sublime-nix: @@ -488,9 +518,12 @@ vendor/grammars/sublime-text-ox/: - source.ox vendor/grammars/sublime-text-pig-latin/: - source.pig_latin +vendor/grammars/sublime-varnish: +- source.varnish.vcl vendor/grammars/sublime_cobol: - source.acucobol - source.cobol +- source.jcl - source.opencobol vendor/grammars/sublime_man_page_support: - source.man @@ -502,13 +535,6 @@ vendor/grammars/swift.tmbundle: vendor/grammars/tcl.tmbundle: - source.tcl - text.html.tcl -vendor/grammars/text.tmbundle: -- text.plain -vendor/grammars/textile.tmbundle: -- text.html.textile -vendor/grammars/textmate.tmbundle: -- source.regexp.oniguruma -- source.tm-properties vendor/grammars/thrift.tmbundle: - source.thrift vendor/grammars/toml.tmbundle: @@ -520,6 +546,8 @@ vendor/grammars/verilog.tmbundle: - source.verilog vendor/grammars/x86-assembly-textmate-bundle: - source.asm.x86 +vendor/grammars/xc.tmbundle/: +- source.xc vendor/grammars/xml.tmbundle: - text.xml - text.xml.xsl diff --git a/lib/linguist.rb b/lib/linguist.rb index ff9fc3a2..3929efb9 100644 --- a/lib/linguist.rb +++ b/lib/linguist.rb @@ -6,3 +6,15 @@ require 'linguist/repository' require 'linguist/samples' require 'linguist/shebang' require 'linguist/version' + +class << Linguist + attr_accessor :instrumenter + + def instrument(*args, &bk) + if instrumenter + instrumenter.instrument(*args, &bk) + else + yield if block_given? + end + end +end diff --git a/lib/linguist/blob_helper.rb b/lib/linguist/blob_helper.rb index 56c15f02..01a567e0 100644 --- a/lib/linguist/blob_helper.rb +++ b/lib/linguist/blob_helper.rb @@ -99,7 +99,7 @@ module Linguist elsif name.nil? "attachment" else - "attachment; filename=#{EscapeUtils.escape_url(File.basename(name))}" + "attachment; filename=#{EscapeUtils.escape_url(name)}" end end @@ -233,7 +233,7 @@ module Linguist # # Return true or false def vendored? - name =~ VendoredRegexp ? true : false + path =~ VendoredRegexp ? true : false end documentation_paths = YAML.load_file(File.expand_path("../documentation.yml", __FILE__)) @@ -248,7 +248,7 @@ module Linguist # # Return true or false def documentation? - name =~ DocumentationRegexp ? true : false + path =~ DocumentationRegexp ? true : false end # Public: Get each line of data @@ -316,7 +316,7 @@ module Linguist # # Return true or false def generated? - @_generated ||= Generated.generated?(name, lambda { data }) + @_generated ||= Generated.generated?(path, lambda { data }) end # Public: Detects the Language of the blob. diff --git a/lib/linguist/documentation.yml b/lib/linguist/documentation.yml index b884cd35..f95a547d 100644 --- a/lib/linguist/documentation.yml +++ b/lib/linguist/documentation.yml @@ -7,11 +7,16 @@ # Please add additional test coverage to # `test/test_blob.rb#test_documentation` if you make any changes. -## Documentation Conventions ## +## Documentation directories ## - ^docs?/ -- ^Documentation/ +- (^|/)[Dd]ocumentation/ +- (^|/)javadoc/ +- ^man/ +## Documentation files ## + +- (^|/)CHANGE(S|LOG)?(\.|$) - (^|/)CONTRIBUTING(\.|$) - (^|/)COPYING(\.|$) - (^|/)INSTALL(\.|$) diff --git a/lib/linguist/file_blob.rb b/lib/linguist/file_blob.rb index 04441935..20d87bb0 100644 --- a/lib/linguist/file_blob.rb +++ b/lib/linguist/file_blob.rb @@ -3,7 +3,7 @@ require 'linguist/blob_helper' module Linguist # A FileBlob is a wrapper around a File object to make it quack # like a Grit::Blob. It provides the basic interface: `name`, - # `data`, and `size`. + # `data`, `path` and `size`. class FileBlob include BlobHelper @@ -14,43 +14,50 @@ module Linguist # # Returns a FileBlob. def initialize(path, base_path = nil) - @path = path - @name = base_path ? path.sub("#{base_path}/", '') : path + @fullpath = path + @path = base_path ? path.sub("#{base_path}/", '') : path end # Public: Filename # # Examples # - # FileBlob.new("/path/to/linguist/lib/linguist.rb").name + # FileBlob.new("/path/to/linguist/lib/linguist.rb").path # # => "/path/to/linguist/lib/linguist.rb" # # FileBlob.new("/path/to/linguist/lib/linguist.rb", - # "/path/to/linguist").name + # "/path/to/linguist").path # # => "lib/linguist.rb" # # Returns a String - attr_reader :name + attr_reader :path # Public: Read file permissions # # Returns a String like '100644' def mode - File.stat(@path).mode.to_s(8) + File.stat(@fullpath).mode.to_s(8) + end + + # Public: File name + # + # Returns a String + def name + File.basename(@fullpath) end # Public: Read file contents. # # Returns a String. def data - File.read(@path) + File.read(@fullpath) end # Public: Get byte size # # Returns an Integer. def size - File.size(@path) + File.size(@fullpath) end # Public: Get file extension. @@ -67,7 +74,7 @@ module Linguist # # Returns an Array def extensions - basename, *segments = File.basename(name).split(".") + basename, *segments = name.downcase.split(".") segments.map.with_index do |segment, index| "." + segments[index..-1].join(".") diff --git a/lib/linguist/generated.rb b/lib/linguist/generated.rb index 50dbc58d..f1fb2d19 100644 --- a/lib/linguist/generated.rb +++ b/lib/linguist/generated.rb @@ -53,18 +53,25 @@ module Linguist def generated? xcode_file? || generated_net_designer_file? || + generated_net_specflow_feature_file? || composer_lock? || node_modules? || godeps? || generated_by_zephir? || minified_files? || + source_map? || compiled_coffeescript? || generated_parser? || generated_net_docfile? || generated_postscript? || + compiled_cython_file? || + generated_go? || generated_protocol_buffer? || + generated_apache_thrift? || generated_jni_header? || - vcr_cassette? + vcr_cassette? || + generated_module? || + generated_unity3d_meta? end # Internal: Is the blob an Xcode file? @@ -94,6 +101,20 @@ module Linguist end end + # Internal: Is the blob a generated source map? + # + # Source Maps usually have .css.map or .js.map extensions. In case they + # are not following the name convention, detect them based on the content. + # + # Returns true or false. + def source_map? + return false unless extname.downcase == '.map' + + name =~ /(\.css|\.js)\.map$/i || # Name convention + lines[0] =~ /^{"version":\d+,/ || # Revision 2 and later begin with the version number + lines[0] =~ /^\/\*\* Begin line maps\. \*\*\/{/ # Revision 1 begins with a magic comment + end + # Internal: Is the blob of JS generated by CoffeeScript? # # CoffeeScript is meant to output JS that would be difficult to @@ -162,6 +183,17 @@ module Linguist name.downcase =~ /\.designer\.cs$/ end + # Internal: Is this a codegen file for Specflow feature file? + # + # Visual Studio's SpecFlow extension generates *.feature.cs files + # from *.feature files, they are not meant to be consumed by humans. + # Let's hide them. + # + # Returns true or false + def generated_net_specflow_feature_file? + name.downcase =~ /\.feature\.cs$/ + end + # Internal: Is the blob of JS a parser generated by PEG.js? # # PEG.js-generated parsers are not meant to be consumed by humans. @@ -202,6 +234,13 @@ module Linguist creator.include?("ImageMagick") end + def generated_go? + return false unless extname == '.go' + return false unless lines.count > 1 + + return lines[0].include?("Code generated by") + end + # Internal: Is the blob a C++, Java or Python source file generated by the # Protocol Buffer compiler? # @@ -213,6 +252,16 @@ module Linguist return lines[0].include?("Generated by the protocol buffer compiler. DO NOT EDIT!") end + # Internal: Is the blob generated by Apache Thrift compiler? + # + # Returns true or false + def generated_apache_thrift? + return false unless ['.rb', '.py', '.go', '.js', '.m', '.java', '.h', '.cc', '.cpp'].include?(extname) + return false unless lines.count > 1 + + return lines[0].include?("Autogenerated by Thrift Compiler") || lines[1].include?("Autogenerated by Thrift Compiler") + end + # Internal: Is the blob a C/C++ header generated by the Java JNI tool javah? # # Returns true of false. @@ -262,5 +311,49 @@ module Linguist # VCR Cassettes have "recorded_with: VCR" in the second last line. return lines[-2].include?("recorded_with: VCR") end + + # Internal: Is this a compiled C/C++ file from Cython? + # + # Cython-compiled C/C++ files typically contain: + # /* Generated by Cython x.x.x on ... */ + # on the first line. + # + # Return true or false + def compiled_cython_file? + return false unless ['.c', '.cpp'].include? extname + return false unless lines.count > 1 + return lines[0].include?("Generated by Cython") + end + + # Internal: Is it a KiCAD or GFortran module file? + # + # KiCAD module files contain: + # PCBNEW-LibModule-V1 yyyy-mm-dd h:mm:ss XM + # on the first line. + # + # GFortran module files contain: + # GFORTRAN module version 'x' created from + # on the first line. + # + # Return true of false + def generated_module? + return false unless extname == '.mod' + return false unless lines.count > 1 + return lines[0].include?("PCBNEW-LibModule-V") || + lines[0].include?("GFORTRAN module version '") + end + + # Internal: Is this a metadata file from Unity3D? + # + # Unity3D Meta files start with: + # fileFormatVersion: X + # guid: XXXXXXXXXXXXXXX + # + # Return true or false + def generated_unity3d_meta? + return false unless extname == '.meta' + return false unless lines.count > 1 + return lines[0].include?("fileFormatVersion: ") + end end end diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index b82a5de4..d5b92457 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -33,7 +33,7 @@ module Linguist # disambiguate "Perl", "Prolog" do |data| # if data.include?("use strict") # Language["Perl"] - # elsif data.include?(":-") + # elsif /^[^#]+:-/.match(data) # Language["Prolog"] # end # end @@ -94,23 +94,27 @@ module Linguist Language["Perl6"] elsif data.match(/use strict|use\s+v?5\./) Language["Perl"] - elsif data.include?(":-") + elsif /^[^#]+:-/.match(data) Language["Prolog"] end end disambiguate "ECL", "Prolog" do |data| - if data.include?(":-") + if /^[^#]+:-/.match(data) Language["Prolog"] elsif data.include?(":=") Language["ECL"] end end - disambiguate "IDL", "Prolog" do |data| - if data.include?(":-") + disambiguate "IDL", "Prolog", "INI", "QMake" do |data| + if /^[^#]+:-/.match(data) Language["Prolog"] - else + elsif data.include?("last_client=") + Language["INI"] + elsif data.include?("HEADERS") && data.include?("SOURCES") + Language["QMake"] + elsif /^\s*function[ \w,]+$/.match(data) Language["IDL"] end end @@ -125,7 +129,7 @@ module Linguist end disambiguate "Common Lisp", "OpenCL", "Cool" do |data| - if data.include?("(defun ") + if /^\s*\((defun|in-package|defpackage) /i.match(data) Language["Common Lisp"] elsif /^class/x.match(data) Language["Cool"] @@ -151,16 +155,16 @@ module Linguist end disambiguate "AsciiDoc", "AGS Script", "Public Key" do |data| - if /^[=-]+(\s|\n)|{{[A-Za-z]/.match(data) + if /^(----[- ]BEGIN|ssh-(rsa|dss)) /.match(data) + Language["Public Key"] + elsif /^[=-]+(\s|\n)|{{[A-Za-z]/.match(data) Language["AsciiDoc"] elsif /^(\/\/.+|((import|export)\s+)?(function|int|float|char)\s+((room|repeatedly|on|game)_)?([A-Za-z]+[A-Za-z_0-9]+)\s*[;\(])/.match(data) Language["AGS Script"] - elsif /^-----BEGIN/.match(data) - Language["Public Key"] end end - disambiguate "FORTRAN", "Forth" do |data| + disambiguate "FORTRAN", "Forth", "Formatted" do |data| if /^: /.match(data) Language["Forth"] elsif /^([c*][^a-z]| (subroutine|program)\s|\s*!)/i.match(data) @@ -168,27 +172,33 @@ module Linguist end end - disambiguate "F#", "Forth", "GLSL" do |data| + disambiguate "F#", "Forth", "GLSL", "Filterscript" do |data| if /^(: |new-device)/.match(data) Language["Forth"] elsif /^\s*(#light|import|let|module|namespace|open|type)/.match(data) Language["F#"] - elsif /^\s*(#include|#pragma|precision|uniform|varying|void)/.match(data) + elsif /^\s*(#version|precision|uniform|varying|vec[234])/.match(data) Language["GLSL"] + elsif /#include|#pragma\s+(rs|version)|__attribute__/.match(data) + Language["Filterscript"] end end - disambiguate "M", "Mathematica", "Matlab", "Mercury", "Objective-C" do |data| + disambiguate "Limbo", "M", "MUF", "Mathematica", "Matlab", "Mercury", "Objective-C" do |data| if ObjectiveCRegex.match(data) Language["Objective-C"] elsif data.include?(":- module") Language["Mercury"] + elsif /^: /.match(data) + Language["MUF"] elsif /^\s*;/.match(data) Language["M"] elsif /^\s*\(\*/.match(data) Language["Mathematica"] elsif /^\s*%/.match(data) Language["Matlab"] + elsif /^\w+\s*:\s*module\s*{/.match(data) + Language["Limbo"] end end @@ -205,7 +215,7 @@ module Linguist end disambiguate "Common Lisp", "NewLisp" do |data| - if /^\s*\((defun|in-package|defpackage) /.match(data) + if /^\s*\((defun|in-package|defpackage) /i.match(data) Language["Common Lisp"] elsif /^\s*\(define /.match(data) Language["NewLisp"] @@ -229,5 +239,105 @@ module Linguist Language["Text"] end end + + disambiguate "PLSQL", "SQLPL", "PLpgSQL", "SQL" do |data| + if /^\\i\b|AS \$\$|LANGUAGE '+plpgsql'+/i.match(data) || /SECURITY (DEFINER|INVOKER)/i.match(data) || /BEGIN( WORK| TRANSACTION)?;/i.match(data) + #Postgres + Language["PLpgSQL"] + elsif /(alter module)|(language sql)|(begin( NOT)+ atomic)/i.match(data) || /signal SQLSTATE '[0-9]+'/i.match(data) + #IBM db2 + Language["SQLPL"] + elsif /pragma|\$\$PLSQL_|XMLTYPE|sysdate|systimestamp|\.nextval|connect by|AUTHID (DEFINER|CURRENT_USER)/i.match(data) || /constructor\W+function/i.match(data) + #Oracle + Language["PLSQL"] + elsif ! /begin|boolean|package|exception/i.match(data) + #Generic SQL + Language["SQL"] + end + end + + disambiguate "D", "DTrace", "Makefile" do |data| + if /^module /.match(data) + Language["D"] + elsif /^((dtrace:::)?BEGIN|provider |#pragma (D (option|attributes)|ident)\s)/.match(data) + Language["DTrace"] + elsif /(\/.*:( .* \\)$| : \\$|^ : |: \\$)/.match(data) + Language["Makefile"] + end + end + + disambiguate "OCaml", "Standard ML" do |data| + if /(^\s*module)|let rec |match\s+(\S+\s)+with/.match(data) + Language["OCaml"] + elsif /=> |case\s+(\S+\s)+of/.match(data) + Language["Standard ML"] + end + end + + disambiguate "XML", "Modula-2", "Linux Kernel Module", "AMPL" do |data| + if data.include?(')/.match(data) + Language["Lex"] + elsif /^\.[a-z][a-z](\s|$)/i.match(data) + Language["Groff"] + elsif /^\((de|class|rel|code|data|must)\s/.match(data) + Language["PicoLisp"] + end + end + + disambiguate "Groff", "Nemerle" do |data| + if /^[.']/.match(data) + Language["Groff"] + elsif /^(module|namespace|using)\s/.match(data) + Language["Nemerle"] + end + end + + disambiguate "GAS", "Groff" do |data| + if /^[.'][a-z][a-z](\s|$)/i.match(data) + Language["Groff"] + elsif /((^|\s)move?[. ])|\.(include|globa?l)\s/.match(data) + Language["GAS"] + end + end + + disambiguate "xBase", "Charity" do |data| + if /^\s*#\s*(if|ifdef|ifndef|define|command|xcommand|translate|xtranslate|include|pragma|undef)\b/i.match(data) + Language["xBase"] + end + end end end diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index 2490a9f6..d2d44466 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -73,7 +73,7 @@ module Linguist raise ArgumentError, "Extension is missing a '.': #{extension.inspect}" end - @extension_index[extension] << language + @extension_index[extension.downcase] << language end language.interpreters.each do |interpreter| @@ -105,19 +105,31 @@ module Linguist # Bail early if the blob is binary or empty. return nil if blob.likely_binary? || blob.binary? || blob.empty? - # Call each strategy until one candidate is returned. - STRATEGIES.reduce([]) do |languages, strategy| - candidates = strategy.call(blob, languages) - if candidates.size == 1 - return candidates.first - elsif candidates.size > 1 - # More than one candidate was found, pass them to the next strategy. - candidates - else - # No candiates were found, pass on languages from the previous strategy. - languages + Linguist.instrument("linguist.detection", :blob => blob) do + # Call each strategy until one candidate is returned. + languages = [] + returning_strategy = nil + + STRATEGIES.each do |strategy| + returning_strategy = strategy + candidates = Linguist.instrument("linguist.strategy", :blob => blob, :strategy => strategy, :candidates => languages) do + strategy.call(blob, languages) + end + if candidates.size == 1 + languages = candidates + break + elsif candidates.size > 1 + # More than one candidate was found, pass them to the next strategy. + languages = candidates + else + # No candidates, try the next strategy + end end - end.first + + Linguist.instrument("linguist.detected", :blob => blob, :strategy => returning_strategy, :language => languages.first) + + languages.first + end end # Public: Get all Languages @@ -191,7 +203,7 @@ module Linguist # Returns all matching Languages or [] if none were found. def self.find_by_extension(extname) extname = ".#{extname}" unless extname.start_with?(".") - @extension_index[extname] + @extension_index[extname.downcase] end # DEPRECATED @@ -528,8 +540,8 @@ module Linguist if extnames = extensions[name] extnames.each do |extname| - if !options['extensions'].index { |x| x.end_with? extname } - warn "#{name} has a sample with extension (#{extname}) that isn't explicitly defined in languages.yml" unless extname == '.script!' + if !options['extensions'].index { |x| x.downcase.end_with? extname.downcase } + warn "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml" options['extensions'] << extname end end diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index bca601eb..5400e536 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -18,6 +18,8 @@ # language. This should match one of the scopes listed in # the grammars.yml file. Use "none" if there is no grammar # for this language. +# group - Name of the parent language. Languages in a group are counted +# in the statistics as the parent language. # # Any additions or modifications (even trivial) should have corresponding # test change in `test/test_blob.rb`. @@ -26,6 +28,7 @@ ABAP: type: programming + color: "#E8274B" extensions: - .abap ace_mode: abap @@ -41,6 +44,15 @@ AGS Script: tm_scope: source.c++ ace_mode: c_cpp +AMPL: + type: programming + color: "#E6EFBB" + extensions: + - .ampl + - .mod + tm_scope: source.ampl + ace_mode: text + ANTLR: type: programming color: "#9DC3FF" @@ -48,9 +60,17 @@ ANTLR: - .g4 ace_mode: text +API Blueprint: + type: markup + color: "#2ACCA8" + ace_mode: markdown + extensions: + - .apib + tm_scope: text.html.markdown.source.gfm.apib + APL: type: programming - color: "#8a0707" + color: "#5A8164" extensions: - .apl - .dyalog @@ -90,7 +110,7 @@ ATS: ActionScript: type: programming tm_scope: source.actionscript.3 - color: "#e3491a" + color: "#882B0F" search_term: as3 aliases: - actionscript 3 @@ -108,12 +128,13 @@ Ada: - .ada - .ads aliases: - - ada95ada2005 + - ada95 + - ada2005 ace_mode: ada Agda: type: programming - color: "#467C91" + color: "#315665" extensions: - .agda ace_mode: text @@ -140,7 +161,7 @@ ApacheConf: - apache extensions: - .apacheconf - - .conf + - .vhost tm_scope: source.apache-config ace_mode: apache_conf @@ -164,7 +185,7 @@ AppleScript: Arc: type: programming - color: "#ca2afe" + color: "#aa2afe" extensions: - .arc tm_scope: none @@ -190,7 +211,7 @@ AsciiDoc: AspectJ: type: programming - color: "#1957b0" + color: "#a957b0" extensions: - .aj tm_scope: none @@ -204,8 +225,8 @@ Assembly: - nasm extensions: - .asm - - .ASM - .a51 + - .inc - .nasm tm_scope: source.asm.x86 ace_mode: assembly_x86 @@ -230,7 +251,7 @@ AutoHotkey: AutoIt: type: programming - color: "#36699B" + color: "#1C3552" aliases: - au3 - AutoIt3 @@ -257,7 +278,6 @@ Awk: Batchfile: type: programming - group: Shell search_term: bat aliases: - bat @@ -271,15 +291,17 @@ Batchfile: ace_mode: batchfile Befunge: + type: programming extensions: - .befunge ace_mode: text Bison: type: programming + group: Yacc tm_scope: source.bison extensions: - - .y + - .bison ace_mode: text BitBake: @@ -326,6 +348,8 @@ Boo: ace_mode: text Brainfuck: + type: programming + color: "#2F2530" extensions: - .b - .bf @@ -347,15 +371,15 @@ Bro: C: type: programming - color: "#555" + color: "#555555" extensions: - .c - - .C - - .H - .cats - .h - .idc - .w + interpreters: + - tcc ace_mode: c_cpp C#: @@ -389,6 +413,7 @@ C++: - .hh - .hpp - .hxx + - .inc - .inl - .ipp - .tcc @@ -419,6 +444,7 @@ CLIPS: ace_mode: text CMake: + type: programming extensions: - .cmake - .cmake.in @@ -430,8 +456,6 @@ COBOL: type: programming extensions: - .cob - - .COB - - .CPY - .cbl - .ccp - .cobol @@ -477,7 +501,15 @@ Chapel: - .chpl ace_mode: text +Charity: + type: programming + extensions: + - .ch + tm_scope: none + ace_mode: text + ChucK: + type: programming extensions: - .ck tm_scope: source.java @@ -485,14 +517,22 @@ ChucK: Cirru: type: programming - color: "#aaaaff" + color: "#ccccff" ace_mode: cirru extensions: - .cirru +Clarion: + type: programming + color: "#db901e" + ace_mode: text + extensions: + - .clw + tm_scope: source.clarion + Clean: type: programming - color: "#3a81ad" + color: "#3F85AF" extensions: - .icl - .dcl @@ -505,6 +545,7 @@ Clojure: color: "#db5855" extensions: - .clj + - .boot - .cl2 - .cljc - .cljs @@ -571,6 +612,7 @@ Common Lisp: - .lisp - .asd - .cl + - .l - .lsp - .ny - .podsl @@ -631,14 +673,16 @@ Creole: Crystal: type: programming + color: "#776791" extensions: - .cr ace_mode: ruby - tm_scope: source.ruby + tm_scope: source.crystal interpreters: - crystal Cucumber: + type: programming extensions: - .feature tm_scope: text.gherkin.feature @@ -687,9 +731,18 @@ D-ObjDump: tm_scope: objdump.x86asm ace_mode: assembly_x86 +DIGITAL Command Language: + type: programming + aliases: + - dcl + extensions: + - .com + tm_scope: none + ace_mode: text + DM: type: programming - color: "#075ff1" + color: "#447265" extensions: - .dm aliases: @@ -697,7 +750,19 @@ DM: tm_scope: source.c++ ace_mode: c_cpp +DTrace: + type: programming + aliases: + - dtrace-script + extensions: + - .d + interpreters: + - dtrace + tm_scope: source.c + ace_mode: c_cpp + Darcs Patch: + type: data search_term: dpatch aliases: - dpatch @@ -709,17 +774,20 @@ Darcs Patch: Dart: type: programming - color: "#98BAD6" + color: "#00B4AB" extensions: - .dart ace_mode: dart Diff: + type: data + color: "#88dddd" extensions: - .diff - .patch aliases: - udiff + tm_scope: source.diff ace_mode: diff Dockerfile: @@ -741,7 +809,7 @@ Dogescript: Dylan: type: programming - color: "#3ebc27" + color: "#6c616e" extensions: - .dylan - .dyl @@ -768,7 +836,7 @@ ECL: Eagle: type: markup - color: "#3994bc" + color: "#814C05" extensions: - .sch - .brd @@ -797,6 +865,8 @@ Elixir: - .ex - .exs ace_mode: elixir + filenames: + - mix.lock Elm: type: programming @@ -824,7 +894,7 @@ Emacs Lisp: EmberScript: type: programming - color: "#f64e3e" + color: "#FFF4F3" extensions: - .em - .emberscript @@ -833,12 +903,16 @@ EmberScript: Erlang: type: programming - color: "#0faf8d" + color: "#B83998" extensions: - .erl - .es - .escript - .hrl + filenames: + - rebar.config + - rebar.config.lock + - rebar.lock ace_mode: erlang interpreters: - escript @@ -858,7 +932,7 @@ F#: FLUX: type: programming - color: "#33CCFF" + color: "#88ccff" extensions: - .fx - .flux @@ -870,14 +944,6 @@ FORTRAN: color: "#4d41b1" extensions: - .f90 - - .F - - .F03 - - .F08 - - .F77 - - .F90 - - .F95 - - .FOR - - .FPP - .f - .f03 - .f08 @@ -916,14 +982,27 @@ Fantom: tm_scope: source.fan ace_mode: text +Filterscript: + type: programming + group: RenderScript + extensions: + - .fs + tm_scope: none + ace_mode: text + +Formatted: + type: data + extensions: + - .for + tm_scope: none + ace_mode: text + Forth: type: programming color: "#341708" extensions: - .fth - - .4TH - .4th - - .F - .f - .for - .forth @@ -972,7 +1051,7 @@ GAS: group: Assembly extensions: - .s - - .S + - .ms tm_scope: source.asm.x86 ace_mode: assembly_x86 @@ -984,7 +1063,6 @@ GDScript: ace_mode: text GLSL: - group: C type: programming extensions: - .glsl @@ -1005,13 +1083,14 @@ GLSL: Game Maker Language: type: programming - color: "#8ad353" + color: "#8fb200" extensions: - .gml tm_scope: source.c++ ace_mode: c_cpp Genshi: + type: programming extensions: - .kid tm_scope: text.xml.genshi @@ -1021,6 +1100,7 @@ Genshi: ace_mode: xml Gentoo Ebuild: + type: programming group: Shell extensions: - .ebuild @@ -1028,6 +1108,7 @@ Gentoo Ebuild: ace_mode: sh Gentoo Eclass: + type: programming group: Shell extensions: - .eclass @@ -1035,6 +1116,7 @@ Gentoo Eclass: ace_mode: sh Gettext Catalog: + type: prose search_term: pot searchable: false aliases: @@ -1075,7 +1157,7 @@ Go: Golo: type: programming - color: "#f6a51f" + color: "#88562A" extensions: - .golo tm_scope: source.golo @@ -1114,7 +1196,7 @@ Grammatical Framework: extensions: - .gf searchable: true - color: "#ff0000" + color: "#79aa7a" tm_scope: source.haskell ace_mode: haskell @@ -1130,20 +1212,34 @@ Graphviz (DOT): tm_scope: source.dot extensions: - .dot - - .DOT - .gv ace_mode: text Groff: + type: markup extensions: - .man - '.1' + - .1in + - .1m + - .1x - '.2' - '.3' + - .3in + - .3m + - .3qt + - .3x - '.4' - '.5' - '.6' - '.7' + - '.8' + - '.9' + - .l + - .ms + - .n + - .rno + - .roff tm_scope: text.groff aliases: - nroff @@ -1162,6 +1258,7 @@ Groovy: - groovy Groovy Server Pages: + type: programming group: Groovy aliases: - gsp @@ -1182,6 +1279,7 @@ HTML: - .html - .htm - .html.hl + - .inc - .st - .xht - .xhtml @@ -1243,6 +1341,7 @@ Haml: Handlebars: type: markup + color: "#01a9d6" aliases: - hbs - htmlbars @@ -1257,7 +1356,7 @@ Harbour: color: "#0e60e3" extensions: - .hb - tm_scope: none + tm_scope: source.harbour ace_mode: text Haskell: @@ -1271,7 +1370,7 @@ Haskell: Haxe: type: programming ace_mode: haxe - color: "#f7941e" + color: "#df7900" extensions: - .hx - .hxsl @@ -1280,16 +1379,23 @@ Haxe: Hy: type: programming ace_mode: text - color: "#7891b1" + color: "#7790B2" extensions: - .hy aliases: - hylang tm_scope: source.hy +HyPhy: + type: programming + ace_mode: text + extensions: + - .bf + tm_scope: none + IDL: type: programming - color: "#e3592c" + color: "#a3522f" extensions: - .pro - .dlm @@ -1311,6 +1417,7 @@ INI: - .ini - .cfg - .prefs + - .pro - .properties tm_scope: source.ini aliases: @@ -1318,6 +1425,7 @@ INI: ace_mode: ini IRC log: + type: data search_term: irc aliases: - irc @@ -1348,6 +1456,7 @@ Inform 7: ace_mode: text Inno Setup: + type: programming extensions: - .iss tm_scope: source.inno @@ -1371,19 +1480,38 @@ Ioke: Isabelle: type: programming - color: "#fdcd00" + color: "#FEFE00" extensions: - .thy tm_scope: source.isabelle.theory ace_mode: text +Isabelle ROOT: + type: programming + group: Isabelle + filenames: + - ROOT + tm_scope: source.isabelle.root + ace_mode: text + J: type: programming + color: "#9EEDFF" extensions: - .ijs tm_scope: source.j ace_mode: text +JFlex: + type: programming + color: "#DBCA00" + group: Lex + extensions: + - .flex + - .jflex + tm_scope: source.jflex + ace_mode: text + JSON: type: data tm_scope: source.json @@ -1413,11 +1541,12 @@ JSONLD: tm_scope: source.js JSONiq: + color: "#40d47e" type: programming ace_mode: jsoniq extensions: - .jq - tm_scope: source.xquery + tm_scope: source.jq Jade: group: HTML @@ -1442,6 +1571,7 @@ Java: - .java Java Server Pages: + type: programming group: Java search_term: jsp aliases: @@ -1505,12 +1635,20 @@ Julia: KRL: type: programming - color: "#f5c800" + color: "#28431f" extensions: - .krl tm_scope: none ace_mode: text +KiCad: + type: programming + extensions: + - .sch + - .kicad_pcb + tm_scope: none + ace_mode: text + Kit: type: markup ace_mode: html @@ -1520,6 +1658,7 @@ Kit: Kotlin: type: programming + color: "#F18E33" extensions: - .kt - .ktm @@ -1537,6 +1676,7 @@ LFE: ace_mode: lisp LLVM: + type: programming extensions: - .ll ace_mode: text @@ -1567,7 +1707,7 @@ LabVIEW: Lasso: type: programming - color: "#2584c3" + color: "#999999" extensions: - .lasso - .las @@ -1585,9 +1725,16 @@ Latte: group: HTML extensions: - .latte - tm_scope: source.smarty + tm_scope: text.html.smarty ace_mode: smarty +Lean: + type: programming + extensions: + - .lean + - .hlean + ace_mode: lean + Less: type: markup group: CSS @@ -1596,12 +1743,49 @@ Less: tm_scope: source.css.less ace_mode: less +Lex: + type: programming + color: "#DBCA00" + aliases: + - flex + extensions: + - .l + - .lex + tm_scope: none + ace_mode: text + LilyPond: + type: programming extensions: - .ly - .ily ace_mode: text +Limbo: + type: programming + extensions: + - .b + - .m + tm_scope: none + ace_mode: text + +Linker Script: + type: data + extensions: + - .ld + - .lds + filenames: + - ld.script + tm_scope: none + ace_mode: text + +Linux Kernel Module: + type: data + extensions: + - .mod + tm_scope: none + ace_mode: text + Liquid: type: markup extensions: @@ -1688,7 +1872,7 @@ LoomScript: Lua: type: programming ace_mode: lua - color: "#fa1fa1" + color: "#000080" extensions: - .lua - .fcgi @@ -1711,23 +1895,35 @@ M: MTML: type: markup - color: "#0095d9" + color: "#b7e1f4" extensions: - .mtml tm_scope: text.html.basic ace_mode: html +MUF: + type: programming + group: Forth + extensions: + - .muf + - .m + tm_scope: none + ace_mode: forth + Makefile: type: programming + color: "#427819" aliases: - bsdmake - make - mf extensions: - .mak + - .d - .mk filenames: - GNUmakefile + - Kbuild - Makefile - makefile interpreters: @@ -1735,6 +1931,7 @@ Makefile: ace_mode: makefile Mako: + type: programming extensions: - .mako - .mao @@ -1771,6 +1968,8 @@ Mathematica: - .ma - .nb - .nbp + - .wl + - .wlt aliases: - mma ace_mode: text @@ -1792,7 +1991,7 @@ Maven POM: Max: type: programming - color: "#ce279c" + color: "#c4a79c" aliases: - max/msp - maxmsp @@ -1816,7 +2015,7 @@ MediaWiki: Mercury: type: programming - color: "#abcdef" + color: "#ff2b2b" ace_mode: prolog interpreters: - mmi @@ -1827,6 +2026,7 @@ Mercury: ace_mode: prolog MiniD: # Legacy + type: programming searchable: false extensions: - .minid # Dummy extension @@ -1852,6 +2052,24 @@ Modelica: tm_scope: source.modelica ace_mode: text +Modula-2: + type: programming + extensions: + - .mod + tm_scope: source.modula2 + ace_mode: text + +Module Management System: + type: programming + extensions: + - .mms + - .mmk + filenames: + - descrip.mmk + - descrip.mms + tm_scope: none + ace_mode: text + Monkey: type: programming extensions: @@ -1874,12 +2092,29 @@ MoonScript: ace_mode: text Myghty: + type: programming extensions: - .myt tm_scope: none ace_mode: text +NCL: + type: programming + color: #28431f + extensions: + - .ncl + tm_scope: source.ncl + ace_mode: text + +NL: + type: data + extensions: + - .nl + tm_scope: none + ace_mode: text + NSIS: + type: programming extensions: - .nsi - .nsh @@ -1887,14 +2122,32 @@ NSIS: Nemerle: type: programming - color: "#0d3c6e" + color: "#3d3c6e" extensions: - .n ace_mode: text +NetLinx: + type: programming + color: "#0aa0ff" + extensions: + - .axs + - .axi + tm_scope: source.netlinx + ace_mode: text + +NetLinx+ERB: + type: programming + color: "#747faa" + extensions: + - .axs.erb + - .axi.erb + tm_scope: source.netlinx.erb + ace_mode: text + NetLogo: type: programming - color: "#ff2b2b" + color: "#ff6375" extensions: - .nlogo tm_scope: source.lisp @@ -1903,7 +2156,7 @@ NetLogo: NewLisp: type: programming lexer: NewLisp - color: "#eedd66" + color: "#87AED7" extensions: - .nl - .lisp @@ -1917,6 +2170,9 @@ Nginx: type: markup extensions: - .nginxconf + - .vhost + filenames: + - nginx.conf tm_scope: source.nginx aliases: - nginx configuration file @@ -1940,7 +2196,7 @@ Ninja: Nit: type: programming - color: "#0d8921" + color: "#009917" extensions: - .nit tm_scope: source.nit @@ -1948,7 +2204,7 @@ Nit: Nix: type: programming - color: "#7070ff" + color: "#7e7eff" extensions: - .nix aliases: @@ -1971,6 +2227,7 @@ Nu: - nush NumPy: + type: programming group: Python extensions: - .numpy @@ -1991,6 +2248,10 @@ OCaml: - .mli - .mll - .mly + interpreters: + - ocaml + - ocamlrun + tm_scope: source.ocaml ObjDump: type: data @@ -2015,7 +2276,7 @@ Objective-C: Objective-C++: type: programming tm_scope: source.objc++ - color: "#4886FC" + color: "#6866fb" aliases: - obj-c++ - objc++ @@ -2084,7 +2345,7 @@ OpenSCAD: type: programming extensions: - .scad - tm_scope: none + tm_scope: source.scad ace_mode: scad Org: @@ -2106,7 +2367,7 @@ Ox: Oxygene: type: programming - color: "#5a63a3" + color: "#cdd0e3" extensions: - .oxygene tm_scope: none @@ -2114,7 +2375,7 @@ Oxygene: Oz: type: programming - color: "#fcaf3e" + color: "#fab738" extensions: - .oz tm_scope: source.oz @@ -2138,6 +2399,7 @@ PHP: - .aw - .ctp - .fcgi + - .inc - .php3 - .php4 - .php5 @@ -2149,6 +2411,27 @@ PHP: aliases: - inc +#Oracle +PLSQL: + type: programming + ace_mode: sql + tm_scope: source.plsql.oracle + extensions: + - .pls + - .pkb + - .pks + - .plb + - .plsql + - .sql + +#Postgres +PLpgSQL: + type: programming + ace_mode: pgsql + tm_scope: source.sql + extensions: + - .sql + Pan: type: programming color: '#cc0000' @@ -2204,17 +2487,19 @@ Pascal: - .pas - .dfm - .dpr + - .inc - .lpr - .pp ace_mode: pascal Perl: type: programming + tm_scope: source.perl ace_mode: perl color: "#0298c3" extensions: - .pl - - .PL + - .al - .cgi - .fcgi - .perl @@ -2229,7 +2514,7 @@ Perl: Perl6: type: programming - color: "#0298c3" + color: "#0000fb" extensions: - .6pl - .6pm @@ -2246,9 +2531,19 @@ Perl6: - Rexfile interpreters: - perl6 - tm_scope: none + tm_scope: source.perl.6 ace_mode: perl +PicoLisp: + type: programming + extensions: + - .l + interpreters: + - picolisp + - pil + tm_scope: source.lisp + ace_mode: lisp + PigLatin: type: programming color: "#fcd7de" @@ -2259,7 +2554,7 @@ PigLatin: Pike: type: programming - color: "#066ab2" + color: "#005390" extensions: - .pike - .pmod @@ -2305,7 +2600,7 @@ PowerShell: Processing: type: programming - color: "#2779ab" + color: "#0096D8" extensions: - .pde ace_mode: text @@ -2324,7 +2619,7 @@ Prolog: Propeller Spin: type: programming - color: "#2b446d" + color: "#7fa2a7" extensions: - .spin tm_scope: source.spin @@ -2350,7 +2645,7 @@ Public Key: Puppet: type: programming - color: "#cc5555" + color: "#332A77" extensions: - .pp filenames: @@ -2376,16 +2671,16 @@ PureBasic: PureScript: type: programming - color: "#bcdc53" + color: "#1D222D" extensions: - .purs - tm_scope: source.haskell + tm_scope: source.purescript ace_mode: haskell Python: type: programming ace_mode: python - color: "#3581ba" + color: "#3572A5" extensions: - .py - .cgi @@ -2422,14 +2717,16 @@ Python traceback: ace_mode: text QML: - type: markup + type: programming color: "#44a51c" extensions: - .qml + - .qbs tm_scope: source.qml ace_mode: text QMake: + type: programming extensions: - .pro - .pri @@ -2446,8 +2743,6 @@ R: - splus extensions: - .r - - .R - - .Rd - .rd - .rsx filenames: @@ -2500,23 +2795,24 @@ RMarkdown: ace_mode: markdown extensions: - .rmd - - .Rmd tm_scope: none Racket: type: programming - color: "#ae17ff" + color: "#22228f" extensions: - .rkt - .rktd - .rktl - .scrbl + interpreters: + - racket tm_scope: source.racket ace_mode: lisp Ragel in Ruby Host: type: programming - color: "#ff9c2e" + color: "#9d5200" extensions: - .rl aliases: @@ -2526,6 +2822,7 @@ Ragel in Ruby Host: ace_mode: text Raw token data: + type: data search_term: raw aliases: - raw @@ -2544,6 +2841,7 @@ Rebol: - .r3 - .rebol ace_mode: text + tm_scope: source.rebol Red: type: programming @@ -2553,15 +2851,24 @@ Red: - .reds aliases: - red/system - tm_scope: none + tm_scope: source.red ace_mode: text Redcode: + type: programming extensions: - .cw tm_scope: none ace_mode: text +RenderScript: + type: programming + extensions: + - .rs + - .rsh + tm_scope: none + ace_mode: text + RobotFramework: type: programming extensions: @@ -2595,6 +2902,7 @@ Ruby: - .gemspec - .god - .irbrc + - .jbuilder - .mspec - .pluginspec - .podspec @@ -2604,17 +2912,22 @@ Ruby: - .rbw - .rbx - .ru + - .ruby - .thor - .watchr interpreters: - ruby - macruby - rake + - jruby + - rbx filenames: - .pryrc - Appraisals - Berksfile - Buildfile + - Deliverfile + - Fastfile - Gemfile - Gemfile.lock - Guardfile @@ -2622,6 +2935,7 @@ Ruby: - Mavenfile - Podfile - Puppetfile + - Snapfile - Thorfile - Vagrantfile - buildfile @@ -2635,7 +2949,7 @@ Rust: SAS: type: programming - color: "#1E90FF" + color: "#B34936" extensions: - .sas tm_scope: source.sas @@ -2649,6 +2963,25 @@ SCSS: extensions: - .scss +SMT: + type: programming + extensions: + - .smt2 + - .smt + interpreters: + - boolector + - cvc4 + - mathsat5 + - opensmt + - smtinterpol + - smt-rat + - stp + - verit + - yices2 + - z3 + tm_scope: source.smt + ace_mode: text + SPARQL: type: data tm_scope: source.sparql @@ -2659,7 +2992,7 @@ SPARQL: SQF: type: programming - color: "#FFCB1F" + color: "#3F3F3F" extensions: - .sqf - .hqf @@ -2674,11 +3007,21 @@ SQL: - .sql - .cql - .ddl + - .inc - .prc - .tab - .udf - .viw +#IBM DB2 +SQLPL: + type: programming + ace_mode: sql + tm_scope: source.sql + extensions: + - .sql + - .db2 + STON: type: data group: Smalltalk @@ -2704,8 +3047,8 @@ Sage: ace_mode: python SaltStack: - type: data - group: YAML + type: programming + color: "#646464" aliases: - saltstate - salt @@ -2752,7 +3095,6 @@ Scheme: - .ss interpreters: - guile - - racket - bigloo - chicken ace_mode: scheme @@ -2790,6 +3132,7 @@ Shell: - .fcgi - .ksh - .tmux + - .tool - .zsh interpreters: - bash @@ -2827,11 +3170,18 @@ Slash: Slim: group: HTML type: markup - color: "#ff8877" + color: "#ff8f77" extensions: - .slim ace_mode: text +Smali: + type: programming + extensions: + - .smali + ace_mode: text + tm_scope: source.smali + Smalltalk: type: programming color: "#596706" @@ -2843,22 +3193,27 @@ Smalltalk: ace_mode: text Smarty: + type: programming extensions: - .tpl ace_mode: smarty + tm_scope: text.html.smarty SourcePawn: type: programming - color: "#f69e1d" + color: "#5c7611" aliases: - sourcemod extensions: - .sp + - .inc + - .sma tm_scope: source.sp ace_mode: text Squirrel: type: programming + color: "#800000" extensions: - .nut tm_scope: source.c++ @@ -2915,7 +3270,7 @@ Swift: SystemVerilog: type: programming - color: "#343761" + color: "#DAE1C2" extensions: - .sv - .svh @@ -2991,9 +3346,12 @@ Tea: Text: type: prose wrap: true + aliases: + - fundamental extensions: - .txt - .fr + - .ncl tm_scope: none ace_mode: text @@ -3030,7 +3388,7 @@ Turtle: Twig: type: markup - group: PHP + group: HTML extensions: - .twig tm_scope: text.html.twig @@ -3038,7 +3396,7 @@ Twig: TypeScript: type: programming - color: "#31859c" + color: "#2b7489" aliases: - ts extensions: @@ -3050,11 +3408,24 @@ Unified Parallel C: type: programming group: C ace_mode: c_cpp - color: "#755223" + color: "#4e3617" extensions: - .upc tm_scope: source.c +Unity3D Asset: + type: data + ace_mode: yaml + color: "#ab69a1" + extensions: + - .anim + - .asset + - .mat + - .meta + - .prefab + - .unity + tm_scope: source.yaml + UnrealScript: type: programming color: "#a54c4d" @@ -3064,16 +3435,16 @@ UnrealScript: ace_mode: java VCL: + group: Perl type: programming - ace_mode: perl - color: "#0298c3" extensions: - .vcl - tm_scope: source.perl + tm_scope: source.varnish.vcl + ace_mode: text VHDL: type: programming - color: "#543978" + color: "#adb2cb" extensions: - .vhdl - .vhd @@ -3087,7 +3458,7 @@ VHDL: Vala: type: programming - color: "#ee7d06" + color: "#fbe5cd" extensions: - .vala - .vapi @@ -3095,7 +3466,7 @@ Vala: Verilog: type: programming - color: "#848bf3" + color: "#b2b7f8" extensions: - .v - .veo @@ -3103,16 +3474,19 @@ Verilog: VimL: type: programming - color: "#199c4b" + color: "#199f4b" search_term: vim aliases: - vim + - nvim extensions: - .vim filenames: + - .nvimrc - .vimrc - _vimrc - gvimrc + - nvimrc - vimrc ace_mode: text @@ -3136,7 +3510,7 @@ Visual Basic: Volt: type: programming - color: "#0098db" + color: "#1F1F1F" extensions: - .volt tm_scope: source.d @@ -3144,7 +3518,7 @@ Volt: Web Ontology Language: type: markup - color: "#3994bc" + color: "#9cc9dd" extensions: - .owl tm_scope: text.xml @@ -3159,13 +3533,14 @@ WebIDL: XC: type: programming + color: "#99DA07" extensions: - .xc - tm_scope: source.c + tm_scope: source.xc ace_mode: c_cpp XML: - type: markup + type: data ace_mode: xml aliases: - rss @@ -3188,15 +3563,20 @@ XML: - .fsproj - .fxml - .glade + - .gml - .grxml + - .iml - .ivy - .jelly - .kml - .launch + - .mdpolicy - .mm + - .mod - .mxml - .nproj - .nuspec + - .odd - .osm - .plist - .pluginspec @@ -3207,15 +3587,16 @@ XML: - .rss - .scxml - .srdf + - .storyboard - .stTheme - .sublime-snippet - .targets - .tmCommand + - .tml - .tmLanguage - .tmPreferences - .tmSnippet - .tmTheme - - .tml - .ts - .ui - .urdf @@ -3230,6 +3611,7 @@ XML: - .x3d - .xacro - .xaml + - .xib - .xlf - .xliff - .xmi @@ -3246,6 +3628,14 @@ XML: - Web.config - packages.config +XPages: + type: programming + extensions: + - .xsp-config + - .xsp.metadata + tm_scope: none + ace_mode: xml + XProc: type: programming extensions: @@ -3256,7 +3646,7 @@ XProc: XQuery: type: programming - color: "#2700e2" + color: "#5232e7" extensions: - .xquery - .xq @@ -3264,8 +3654,10 @@ XQuery: - .xqm - .xqy ace_mode: xquery + tm_scope: source.xq XS: + type: programming extensions: - .xs tm_scope: source.c @@ -3311,6 +3703,15 @@ YAML: - .yaml ace_mode: yaml +Yacc: + type: programming + extensions: + - .y + - .yacc + - .yy + tm_scope: source.bison + ace_mode: text + Zephir: type: programming color: "#118f9e" @@ -3338,6 +3739,7 @@ desktop: eC: type: programming + color: "#913960" search_term: ec extensions: - .ec @@ -3362,13 +3764,14 @@ fish: ace_mode: text mupad: + type: programming extensions: - .mu ace_mode: text nesC: type: programming - color: "#ffce3b" + color: "#94B0C7" extensions: - .nc ace_mode: text @@ -3401,8 +3804,9 @@ wisp: xBase: type: programming - color: "#3a4040" + color: "#403a40" extensions: - .prg - tm_scope: none + - .ch + tm_scope: source.harbour ace_mode: text diff --git a/lib/linguist/lazy_blob.rb b/lib/linguist/lazy_blob.rb index 5465a71f..78f37b18 100644 --- a/lib/linguist/lazy_blob.rb +++ b/lib/linguist/lazy_blob.rb @@ -14,13 +14,15 @@ module Linguist attr_reader :repository attr_reader :oid - attr_reader :name + attr_reader :path attr_reader :mode - def initialize(repo, oid, name, mode = nil) + alias :name :path + + def initialize(repo, oid, path, mode = nil) @repository = repo @oid = oid - @name = name + @path = path @mode = mode end @@ -49,7 +51,7 @@ module Linguist return @language if defined?(@language) @language = if lang = git_attributes['linguist-language'] - Language.find_by_name(lang) + Language.find_by_alias(lang) else super end diff --git a/lib/linguist/popular.yml b/lib/linguist/popular.yml index 1a5cb750..afb68021 100644 --- a/lib/linguist/popular.yml +++ b/lib/linguist/popular.yml @@ -9,21 +9,21 @@ - CSS - Clojure - CoffeeScript -- Common Lisp -- Diff -- Emacs Lisp -- Erlang +- Go - HTML - Haskell - Java - JavaScript - Lua +- Matlab - Objective-C - PHP - Perl - Python +- R - Ruby -- SQL - Scala -- Scheme - Shell +- Swift +- TeX +- VimL diff --git a/lib/linguist/repository.rb b/lib/linguist/repository.rb index 895a3754..181ddf0e 100644 --- a/lib/linguist/repository.rb +++ b/lib/linguist/repository.rb @@ -150,9 +150,10 @@ module Linguist next if delta.binary if [:added, :modified].include? delta.status - # Skip submodules + # Skip submodules and symlinks mode = delta.new_file[:mode] - next if (mode & 040000) != 0 + mode_format = (mode & 0170000) + next if mode_format == 0120000 || mode_format == 040000 || mode_format == 0160000 blob = Linguist::LazyBlob.new(repository, delta.new_file[:oid], new, mode.to_s(8)) diff --git a/lib/linguist/samples.rb b/lib/linguist/samples.rb index efcba365..a7ecd1bd 100644 --- a/lib/linguist/samples.rb +++ b/lib/linguist/samples.rb @@ -50,16 +50,13 @@ module Linguist end else path = File.join(dirname, filename) - - if File.extname(filename) == "" - raise "#{path} is missing an extension, maybe it belongs in filenames/ subdir" - end + extname = File.extname(filename) yield({ :path => path, :language => category, :interpreter => Shebang.interpreter(File.read(path)), - :extname => File.extname(filename) + :extname => extname.empty? ? nil : extname }) end end diff --git a/lib/linguist/shebang.rb b/lib/linguist/shebang.rb index 6f04e866..5b27532a 100644 --- a/lib/linguist/shebang.rb +++ b/lib/linguist/shebang.rb @@ -23,17 +23,20 @@ module Linguist # First line must start with #! return unless shebang && shebang.start_with?("#!") - # Get the parts of the shebang without the #! - tokens = shebang.sub(/^#!\s*/, '').strip.split(' ') + s = StringScanner.new(shebang) # There was nothing after the #! - return if tokens.empty? + return unless path = s.scan(/^#!\s*\S+/) - # Get the name of the interpreter - script = File.basename(tokens.first) + # Keep going + script = path.split('/').last - # Get next argument if interpreter was /usr/bin/env - script = tokens[1] if script == 'env' + # if /usr/bin/env type shebang then walk the string + if script == 'env' + s.scan(/\s+/) + s.scan(/.*=[^\s]+\s+/) # skip over variable arguments e.g. foo=bar + script = s.scan(/\S+/) + end # Interpreter was /usr/bin/env with no arguments return unless script @@ -41,6 +44,9 @@ module Linguist # "python2.6" -> "python2" script.sub! /(\.\d+)$/, '' + # #! perl -> perl + script.sub! /^#!\s*/, '' + # Check for multiline shebang hacks that call `exec` if script == 'sh' && data.lines.first(5).any? { |l| l.match(/exec (\w+).+\$0.+\$@/) } diff --git a/lib/linguist/strategy/filename.rb b/lib/linguist/strategy/filename.rb index e682863b..b8c819eb 100644 --- a/lib/linguist/strategy/filename.rb +++ b/lib/linguist/strategy/filename.rb @@ -3,17 +3,7 @@ module Linguist # Detects language based on filename and/or extension class Filename def self.call(blob, _) - name = blob.name.to_s - - # A bit of an elegant hack. If the file is executable but extensionless, - # append a "magic" extension so it can be classified with other - # languages that have shebang scripts. - extensions = FileBlob.new(name).extensions - if extensions.empty? && blob.mode && (blob.mode.to_i(8) & 05) == 05 - name += ".script!" - end - - Language.find_by_filename(name) + Language.find_by_filename(blob.name.to_s) end end end diff --git a/lib/linguist/strategy/modeline.rb b/lib/linguist/strategy/modeline.rb index e77597f4..44155fc3 100644 --- a/lib/linguist/strategy/modeline.rb +++ b/lib/linguist/strategy/modeline.rb @@ -1,8 +1,8 @@ module Linguist module Strategy class Modeline - EmacsModeline = /-\*-\s*mode:\s*(\w+);?\s*-\*-/i - VimModeline = /\/\*\s*vim:\s*set\s*(?:ft|filetype)=(\w+):\s*\*\//i + EmacsModeline = /-\*-\s*(?:(?!mode)[\w-]+\s*:\s*(?:[\w+-]+)\s*;?\s*)*(?:mode\s*:)?\s*([\w+-]+)\s*(?:;\s*(?!mode)[\w-]+\s*:\s*[\w+-]+\s*)*;?\s*-\*-/i + VimModeline = /vim:\s*set\s*(?:ft|filetype)=(\w+):/i # Public: Detects language based on Vim and Emacs modelines # diff --git a/lib/linguist/tokenizer.rb b/lib/linguist/tokenizer.rb index dc9fc9da..64a82e67 100644 --- a/lib/linguist/tokenizer.rb +++ b/lib/linguist/tokenizer.rb @@ -22,8 +22,10 @@ module Linguist # Start state on token, ignore anything till the next newline SINGLE_LINE_COMMENTS = [ '//', # C + '--', # Ada, Haskell, AppleScript '#', # Ruby '%', # Tex + '"', # Vim ] # Start state on opening token, ignore anything until the closing @@ -130,6 +132,9 @@ module Linguist # extract_shebang("#!/usr/bin/env node") # # => "node" # + # extract_shebang("#!/usr/bin/env A=B foo=bar awk -f") + # # => "awk" + # # Returns String token or nil it couldn't be parsed. def extract_shebang(data) s = StringScanner.new(data) @@ -138,6 +143,7 @@ module Linguist script = path.split('/').last if script == 'env' s.scan(/\s+/) + s.scan(/.*=[^\s]+\s+/) script = s.scan(/\S+/) end script = script[/[^\d]+/, 0] if script diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml index 9f6b401b..e9af74e6 100644 --- a/lib/linguist/vendor.yml +++ b/lib/linguist/vendor.yml @@ -24,6 +24,9 @@ - (^|/)config.guess$ - (^|/)config.sub$ +# Linters +- cpplint.py + # Node dependencies - node_modules/ @@ -67,6 +70,7 @@ - 3rd[-_]?party/ - vendors?/ - extern(al)?/ +- (^|/)[Vv]+endor/ # Debian packaging - ^debian/ @@ -143,6 +147,9 @@ ## Python ## +# Sphinx +- (^|/)docs?/_?(build|themes?|templates?|static)/ + # django - (^|/)admin_media/ @@ -157,12 +164,22 @@ ## Obj-C ## +# Carthage +- ^Carthage/ + # Cocoapods - ^Pods/ # Sparkle - (^|/)Sparkle/ +# Crashlytics +- Crashlytics.framework/ + +# Fabric +- Fabric.framework/ + + ## Groovy ## # Gradle @@ -221,7 +238,7 @@ - ^readme$ # Test fixtures -- ^[Tt]est/fixtures/ +- ^[Tt]ests?/fixtures/ # PhoneGap/Cordova - (^|/)cordova([^.]*)\.js$ @@ -233,7 +250,7 @@ # Vagrant - ^Vagrantfile$ -# .DS_Store's +# .DS_Stores - .[Dd][Ss]_[Ss]tore$ # R packages @@ -251,3 +268,9 @@ # ProGuard - proguard.pro - proguard-rules.pro + +# PuPHPet +- ^puphpet/ + +# Android Google APIs +- (^|/)\.google_apis/ diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index 674a61b9..ef3f734c 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.4.0" + VERSION = "4.5.9" end diff --git a/samples/AMPL/CT2.mod b/samples/AMPL/CT2.mod new file mode 100644 index 00000000..eb936b77 --- /dev/null +++ b/samples/AMPL/CT2.mod @@ -0,0 +1,58 @@ +param num_beams; # number of beams + +param num_rows >= 1, integer; # number of rows +param num_cols >= 1, integer; # number of columns + +set BEAMS := 1 .. num_beams; # set of beams + +set ROWS := 1 .. num_rows; # set of rows +set COLUMNS := 1 .. num_cols; # set of columns + +# values for entries of each beam +param beam_values {BEAMS, ROWS, COLUMNS} >= 0; + +# values of tumor +param tumor_values {ROWS, COLUMNS} >= 0; + +# values of critical area +param critical_values {ROWS, COLUMNS} >= 0; + +# critical maximum dosage requirement +param critical_max; + +# tumor minimum dosage requirement +param tumor_min; + +# dosage scalar of each beam +var X {i in BEAMS} >= 0; + + +# define the tumor area which includes the locations where tumor exists +set tumor_area := {k in ROWS, h in COLUMNS: tumor_values[k,h] > 0}; + +# define critical area +set critical_area := {k in ROWS, h in COLUMNS: critical_values[k,h] > 0}; + +var S {(k,h) in tumor_area} >= 0; +var T {(k,h) in critical_area} >= 0; + +# maximize total dosage in tumor area +maximize total_tumor_dosage: sum {i in BEAMS} sum {(k,h) in tumor_area} X[i] * beam_values[i,k,h]; + +# minimize total dosage in critical area +minimize total_critical_dosage: sum {i in BEAMS} sum {(k,h) in critical_area} X[i] * beam_values[i,k,h]; + +# minimize total tumor slack +minimize total_tumor_slack: sum {(k,h) in tumor_area} S[k,h]; + +# minimize total critical area slack +minimize total_critical_slack: sum {(k,h) in critical_area} T[k,h]; + +# total dosage at each tumor location [k,h] should be >= min tumor dosage with slack variable +subject to tumor_limit {(k,h) in tumor_area} : sum {i in BEAMS} X[i] * beam_values[i,k,h] == tumor_min - S[k,h]; + +# total dosage at each critical location [k,h] should be = max critical dosage with slack variable +subject to critical_limit {(k,h) in critical_area} : sum {i in BEAMS} X[i] * beam_values[i,k,h] == critical_max + T[k,h]; + + + diff --git a/samples/AMPL/toy.ampl b/samples/AMPL/toy.ampl new file mode 100644 index 00000000..0ca0c7cf --- /dev/null +++ b/samples/AMPL/toy.ampl @@ -0,0 +1,25 @@ +# A toy knapsack problem from the LocalSolver docs written in AMPL. + +set I; +param Value{I}; +param Weight{I}; +param KnapsackBound; +var Take{I} binary; + +maximize TotalValue: sum{i in I} Take[i] * Value[i]; +s.t. WeightLimit: sum{i in I} Take[i] * Weight[i] <= KnapsackBound; + +data; + +param: +I: Weight Value := +0 10 1 +1 60 10 +2 30 15 +3 40 40 +4 30 60 +5 20 90 +6 20 100 +7 2 15; + +param KnapsackBound := 102; diff --git a/samples/API Blueprint/actions.apib b/samples/API Blueprint/actions.apib new file mode 100644 index 00000000..f94dc67a --- /dev/null +++ b/samples/API Blueprint/actions.apib @@ -0,0 +1,55 @@ +FORMAT: 1A + +# Advanced Action API +A resource action is – in fact – a state transition. This API example demonstrates an action - state transition - to another resource. + +## API Blueprint ++ [Previous: Resource Model](11.%20Resource%20Model.md) ++ [This: Raw API Blueprint](https://raw.github.com/apiaryio/api-blueprint/master/examples/11.%20Advanced%20Action.md) + +# Tasks [/tasks/tasks{?status,priority}] + ++ Parameters + + status (string) + + priority (number) + +## List All Tasks [GET] + ++ Response 200 (application/json) + + [ + { + "id": 123, + "name": "Exercise in gym", + "done": false, + "type": "task" + }, + { + "id": 124, + "name": "Shop for groceries", + "done": true, + "type": "task" + } + ] + +## Retrieve Task [GET /task/{id}] +This is a state transition to another resource + ++ Parameters + + id (string) + ++ Response 200 (application/json) + + { + "id": 123, + "name": "Go to gym", + "done": false, + "type": "task" + } + +## Delete Task [DELETE /task/{id}] + ++ Parameters + + id (string) + ++ Response 204 diff --git a/samples/API Blueprint/attributes.apib b/samples/API Blueprint/attributes.apib new file mode 100644 index 00000000..ce143f7b --- /dev/null +++ b/samples/API Blueprint/attributes.apib @@ -0,0 +1,39 @@ +FORMAT: 1A + +# Attributes API +This API example demonstrates how to describe body attributes of a request or response message. + +In this case, the description is complementary (and duplicate!) to the provided JSON example in the body section. The [Advanced Attributes](09.%20Advanced%20Attributes.md) API example will demonstrate how to avoid duplicates and how to reuse attributes descriptions. + +## API Blueprint ++ [Previous: Parameters](07.%20Parameters.md) ++ [This: Raw API Blueprint](https://raw.github.com/apiaryio/api-blueprint/master/examples/08.%20Attributes.md) ++ [Next: Advanced Attributes](09.%20Advanced%20Attributes.md) + +# Group Coupons + +## Coupon [/coupons/{id}] +A coupon contains information about a percent-off or amount-off discount you might want to apply to a customer. + +### Retrieve a Coupon [GET] +Retrieves the coupon with the given ID. + ++ Response 200 (application/json) + + + Attributes (object) + + id: 250FF (string) + + created: 1415203908 (number) - Time stamp + + percent_off: 25 (number) + + A positive integer between 1 and 100 that represents the discount the coupon will apply. + + + redeem_by (number) - Date after which the coupon can no longer be redeemed + + + Body + + { + "id": "250FF", + "created": 1415203908, + "percent_off": 25, + "redeem_by:" null + } diff --git a/samples/API Blueprint/simple.apib b/samples/API Blueprint/simple.apib new file mode 100644 index 00000000..ecee8481 --- /dev/null +++ b/samples/API Blueprint/simple.apib @@ -0,0 +1,18 @@ +FORMAT: 1A + +# The Simplest API +This is one of the simplest APIs written in the **API Blueprint**. +One plain resource combined with a method and that's it! We will explain what is going on in the next installment - [Resource and Actions](02.%20Resource%20and%20Actions.md). + +**Note:** As we progress through the examples, do not also forget to view the [Raw](https://raw.github.com/apiaryio/api-blueprint/master/examples/01.%20Simplest%20API.md) code to see what is really going on in the API Blueprint, as opposed to just seeing the output of the Github Markdown parser. + +Also please keep in mind that every single example in this course is a **real API Blueprint** and as such you can **parse** it with the [API Blueprint parser](https://github.com/apiaryio/drafter) or one of its [bindings](https://github.com/apiaryio/drafter#bindings). + +## API Blueprint ++ [This: Raw API Blueprint](https://raw.github.com/apiaryio/api-blueprint/master/examples/01.%20Simplest%20API.md) ++ [Next: Resource and Actions](02.%20Resource%20and%20Actions.md) + +# GET /message ++ Response 200 (text/plain) + + Hello World! diff --git a/samples/ApacheConf/apache.vhost b/samples/ApacheConf/apache.vhost new file mode 100644 index 00000000..eb602121 --- /dev/null +++ b/samples/ApacheConf/apache.vhost @@ -0,0 +1,17 @@ +####################### +# HOSTNAME +###################### + + + ServerAdmin patrick@heysparkbox.com + DocumentRoot "/var/www/HOSTNAME" + ServerName HOSTNAME + + + Options Indexes MultiViews FollowSymLinks + AllowOverride All + Order allow,deny + Allow from all + DirectoryIndex index.php + + diff --git a/samples/AsciiDoc/list.asc b/samples/AsciiDoc/list.asc index 066d14fc..3d93ade1 100644 --- a/samples/AsciiDoc/list.asc +++ b/samples/AsciiDoc/list.asc @@ -1,6 +1,9 @@ AsciiDoc Home Page ================== +Title +----- + Example Articles ~~~~~~~~~~~~~~~~ - Item 1 diff --git a/samples/Assembly/fp_sqr32_160_comba.inc b/samples/Assembly/fp_sqr32_160_comba.inc new file mode 100644 index 00000000..ce5a62b8 --- /dev/null +++ b/samples/Assembly/fp_sqr32_160_comba.inc @@ -0,0 +1,245 @@ + + push r2 + dint + nop + bis #MPYDLYWRTEN,&MPY32CTL0 + bic #MPYDLY32,&MPY32CTL0 + mov #SUMEXT,r13 + clr r12 + + mov @r15+,r4 + mov @r15+,r5 + + mov @r15+,r6 + mov @r15+,r7 + + mov @r15+,r8 + mov @r15+,r9 + + mov @r15+,r10 + mov @r15+,r11 + + sub #2*8,r15 + + /* SELF_STEP_FIRST */ + mov r4,&MPY32L + mov r5,&MPY32H + mov r4,&OP2L + mov r5,&OP2H + + /* COLUMN_END */ + mov &RES0,2*0(r14) + mov &RES1,2*(0+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + + /* STEP_1 */ + mov r4,&MAC32L + mov r5,&MAC32H + mov r6,&OP2L + mov r7,&OP2H + add &SUMEXT,r12 + mov r6,&OP2L + mov r7,&OP2H + + /* COLUMN_END */ + mov &RES0,2*2(r14) + add @r13,r12 + mov &RES1,2*(2+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + /* STEP_1 */ + mov r4,&MAC32L + mov r5,&MAC32H + mov r8,&OP2L + mov r9,&OP2H + add &SUMEXT,r12 + mov r8,&OP2L + mov r9,&OP2H + + /* SELF_STEP */ + mov r6,&MAC32L + mov r7,&MAC32H + add @r13,r12 + mov r6,&OP2L + mov r7,&OP2H + + /* COLUMN_END */ + mov &RES0,2*4(r14) + add @r13,r12 + mov &RES1,2*(4+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + /* STEP_1 */ + mov r4,&MAC32L + mov r5,&MAC32H + mov r10,&OP2L + mov r11,&OP2H + add &SUMEXT,r12 + mov r10,&OP2L + mov r11,&OP2H + + /* STEP_2MORE */ + mov r6,&MAC32L + mov r7,&MAC32H + add @r13,r12 + mov r8,&OP2L + mov r9,&OP2H + add &SUMEXT,r12 + mov r8,&OP2L + mov r9,&OP2H + + /* COLUMN_END */ + mov &RES0,2*6(r14) + add @r13,r12 + mov &RES1,2*(6+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + /* STEP_1 */ + mov r4,&MAC32L + mov r5,&MAC32H + mov 2*8(r15),&OP2L + mov 2*9(r15),&OP2H + add &SUMEXT,r12 + mov 2*8(r15),&OP2L + mov 2*9(r15),&OP2H + + /* STEP_2MORE */ + mov r6,&MAC32L + mov r7,&MAC32H + add @r13,r12 + mov r10,&OP2L + mov r11,&OP2H + add &SUMEXT,r12 + mov r10,&OP2L + mov r11,&OP2H + + /* SELF_STEP */ + mov r8,&MAC32L + mov r9,&MAC32H + add @r13,r12 + mov r8,&OP2L + mov r9,&OP2H + + /* COLUMN_END */ + mov &RES0,2*8(r14) + add @r13,r12 + mov &RES1,2*(8+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + mov 2*8(r15),r4 + mov 2*(8+1)(r15),r5 + + /* STEP_1 */ + mov r6,&MAC32L + mov r7,&MAC32H + mov r4,&OP2L + mov r5,&OP2H + add &SUMEXT,r12 + mov r4,&OP2L + mov r5,&OP2H + + /* STEP_2MORE */ + mov r8,&MAC32L + mov r9,&MAC32H + add @r13,r12 + mov r10,&OP2L + mov r11,&OP2H + add &SUMEXT,r12 + mov r10,&OP2L + mov r11,&OP2H + + /* COLUMN_END */ + mov &RES0,2*10(r14) + add @r13,r12 + mov &RES1,2*(10+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + /* STEP_1 */ + mov r8,&MAC32L + mov r9,&MAC32H + mov r4,&OP2L + mov r5,&OP2H + add &SUMEXT,r12 + mov r4,&OP2L + mov r5,&OP2H + + /* SELF_STEP */ + mov r10,&MAC32L + mov r11,&MAC32H + add @r13,r12 + mov r10,&OP2L + mov r11,&OP2H + + /* COLUMN_END */ + mov &RES0,2*12(r14) + add @r13,r12 + mov &RES1,2*(12+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + /* STEP_1 */ + mov r10,&MAC32L + mov r11,&MAC32H + mov r4,&OP2L + mov r5,&OP2H + add &SUMEXT,r12 + mov r4,&OP2L + mov r5,&OP2H + + /* COLUMN_END */ + mov &RES0,2*14(r14) + add @r13,r12 + mov &RES1,2*(14+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + /* SELF_STEP_1 */ + mov r4,&MAC32L + mov r5,&MAC32H + mov r4,&OP2L + mov r5,&OP2H + + /* COLUMN_END */ + mov &RES0,2*16(r14) + add @r13,r12 + mov &RES1,2*(16+1)(r14) + mov &RES2,&RES0 + mov &RES3,&RES1 + mov r12,&RES2 + clr &RES3 + clr r12 + + /* END */ + mov &RES0,2*18(r14) + mov &RES1,2*(18+1)(r14) + pop r2 + eint diff --git a/samples/Assembly/lib.inc b/samples/Assembly/lib.inc new file mode 100644 index 00000000..1faceead --- /dev/null +++ b/samples/Assembly/lib.inc @@ -0,0 +1,170 @@ + +; ------------------------------------------------------------------------ +; 显示 AL 中的数字 +; ------------------------------------------------------------------------ +DispAL: + push ecx + push edx + push edi + + mov edi, [dwDispPos] + + mov ah, 0Fh ; 0000b: 黑底 1111b: 白字 + mov dl, al + shr al, 4 + mov ecx, 2 +.begin: + and al, 01111b + cmp al, 9 + ja .1 + add al, '0' + jmp .2 +.1: + sub al, 0Ah + add al, 'A' +.2: + mov [gs:edi], ax + add edi, 2 + + mov al, dl + loop .begin + ;add edi, 2 + + mov [dwDispPos], edi + + pop edi + pop edx + pop ecx + + ret +; DispAL 结束------------------------------------------------------------- + + +; ------------------------------------------------------------------------ +; 显示一个整形数 +; ------------------------------------------------------------------------ +DispInt: + mov eax, [esp + 4] + shr eax, 24 + call DispAL + + mov eax, [esp + 4] + shr eax, 16 + call DispAL + + mov eax, [esp + 4] + shr eax, 8 + call DispAL + + mov eax, [esp + 4] + call DispAL + + mov ah, 07h ; 0000b: 黑底 0111b: 灰字 + mov al, 'h' + push edi + mov edi, [dwDispPos] + mov [gs:edi], ax + add edi, 4 + mov [dwDispPos], edi + pop edi + + ret +; DispInt 结束------------------------------------------------------------ + +; ------------------------------------------------------------------------ +; 显示一个字符串 +; ------------------------------------------------------------------------ +DispStr: + push ebp + mov ebp, esp + push ebx + push esi + push edi + + mov esi, [ebp + 8] ; pszInfo + mov edi, [dwDispPos] + mov ah, 0Fh +.1: + lodsb + test al, al + jz .2 + cmp al, 0Ah ; 是回车吗? + jnz .3 + push eax + mov eax, edi + mov bl, 160 + div bl + and eax, 0FFh + inc eax + mov bl, 160 + mul bl + mov edi, eax + pop eax + jmp .1 +.3: + mov [gs:edi], ax + add edi, 2 + jmp .1 + +.2: + mov [dwDispPos], edi + + pop edi + pop esi + pop ebx + pop ebp + ret +; DispStr 结束------------------------------------------------------------ + +; ------------------------------------------------------------------------ +; 换行 +; ------------------------------------------------------------------------ +DispReturn: + push szReturn + call DispStr ;printf("\n"); + add esp, 4 + + ret +; DispReturn 结束--------------------------------------------------------- + + +; ------------------------------------------------------------------------ +; 内存拷贝,仿 memcpy +; ------------------------------------------------------------------------ +; void* MemCpy(void* es:pDest, void* ds:pSrc, int iSize); +; ------------------------------------------------------------------------ +MemCpy: + push ebp + mov ebp, esp + + push esi + push edi + push ecx + + mov edi, [ebp + 8] ; Destination + mov esi, [ebp + 12] ; Source + mov ecx, [ebp + 16] ; Counter +.1: + cmp ecx, 0 ; 判断计数器 + jz .2 ; 计数器为零时跳出 + + mov al, [ds:esi] ; ┓ + inc esi ; ┃ + ; ┣ 逐字节移动 + mov byte [es:edi], al ; ┃ + inc edi ; ┛ + + dec ecx ; 计数器减一 + jmp .1 ; 循环 +.2: + mov eax, [ebp + 8] ; 返回值 + + pop ecx + pop edi + pop esi + mov esp, ebp + pop ebp + + ret ; 函数结束,返回 +; MemCpy 结束------------------------------------------------------------- + diff --git a/samples/Assembly/macros.inc b/samples/Assembly/macros.inc new file mode 100644 index 00000000..dc968ad9 --- /dev/null +++ b/samples/Assembly/macros.inc @@ -0,0 +1,321 @@ +BLARGG_MACROS_INCLUDED = 1 + +; Allows extra error checking with modified version +; of ca65. Otherwise acts like a constant of 0. +ADDR = 0 + +; Switches to Segment and places Line there. +; Line can be an .align directive, .res, .byte, etc. +; Examples: +; seg_data BSS, .align 256 +; seg_data RODATA, {message: .byte "Test",0} +.macro seg_data Segment, Line + .pushseg + .segment .string(Segment) + Line + .popseg +.endmacro + +; Reserves Size bytes in Segment for Name. +; If Size is omitted, reserves one byte. +.macro seg_res Segment, Name, Size + .ifblank Size + seg_data Segment, Name: .res 1 + .else + seg_data Segment, Name: .res Size + .endif +.endmacro + +; Shortcuts for zeropage, bss, and stack +.define zp_res seg_res ZEROPAGE, +.define nv_res seg_res NVRAM, +.define bss_res seg_res BSS, +.define sp_res seg_res STACK, +.define zp_byte zp_res + +; Copies byte from Src to Addr. If Src begins with #, +; it sets Addr to the immediate value. +; Out: A = byte copied +; Preserved: X, Y +.macro mov Addr, Src + lda Src + sta Addr +.endmacro + +; Copies word from Src to Addr. If Src begins with #, +; it sets Addr the immediate value. +; Out: A = high byte of word +; Preserved: X, Y +.macro movw Addr, Src + .if .match( .left( 1, {Src} ), # ) + lda #<(.right( .tcount( {Src} )-1, {Src} )) + sta Addr + lda #>(.right( .tcount( {Src} )-1, {Src} )) + sta 1+(Addr) + .else + lda Src + sta Addr + lda 1+(Src) + sta 1+(Addr) + .endif +.endmacro + +; Increments 16-bit value at Addr. +; Out: EQ/NE based on resulting 16-bit value +; Preserved: A, X, Y +.macro incw Addr + .local @Skip + inc Addr + bne @Skip + inc 1+(Addr) +@Skip: +.endmacro + +; Adds Src to word at Addr. +; Out: A = high byte of result, carry set appropriately +; Preserved: X, Y +.macro addw Addr, Src + .if .match( .left( 1, {Src} ), # ) + addw_ Addr,(.right( .tcount( {Src} )-1, {Src} )) + .else + lda Addr + clc + adc Src + sta Addr + + lda 1+(Addr) + adc 1+(Src) + sta 1+(Addr) + .endif +.endmacro +.macro addw_ Addr, Imm + lda Addr + clc + adc #> 8) <> 0 + lda 1+(Addr) + adc #>Imm + sta 1+(Addr) + ;.else + ; .local @Skip + ; bcc @Skip + ; inc 1+(Addr) + ;@Skip: + ;.endif +.endmacro + +; Splits list of words into tables of low and high bytes +; Example: split_words foo, {$1234, $5678} +; expands to: +; foo_l: $34, $78 +; foo_h: $12, $56 +; foo_count = 2 +.macro split_words Label, Words + .ident (.concat (.string(Label), "_l")): .lobytes Words + .ident (.concat (.string(Label), "_h")): .hibytes Words + .ident (.concat (.string(Label), "_count")) = * - .ident (.concat (.string(Label), "_h")) +.endmacro + +.macro SELECT Bool, True, False, Extra + .ifndef Bool + False Extra + .elseif Bool <> 0 + True Extra + .else + False Extra + .endif +.endmacro + +.macro DEFAULT Name, Value + .ifndef Name + Name = Value + .endif +.endmacro + +.ifp02 + ; 6502 doesn't define these alternate names + .define blt bcc + .define bge bcs +.endif +.define jlt jcc +.define jge jcs + +; Jxx Target = Bxx Target, except it can go farther than +; 128 bytes. Implemented via branch around a JMP. + +; Don't use ca65's longbranch, because they fail for @labels +;.macpack longbranch + +.macro jeq Target + bne *+5 + jmp Target +.endmacro + +.macro jne Target + beq *+5 + jmp Target +.endmacro + +.macro jmi Target + bpl *+5 + jmp Target +.endmacro + +.macro jpl Target + bmi *+5 + jmp Target +.endmacro + +.macro jcs Target + bcc *+5 + jmp Target +.endmacro + +.macro jcc Target + bcs *+5 + jmp Target +.endmacro + +.macro jvs Target + bvc *+5 + jmp Target +.endmacro + +.macro jvc Target + bvs *+5 + jmp Target +.endmacro + + +; Passes constant data to routine in addr +; Preserved: A, X, Y +.macro jsr_with_addr routine,data + .local Addr + pha + lda #Addr + sta addr+1 + pla + jsr routine + seg_data RODATA,{Addr: data} +.endmacro + +; Calls routine multiple times, with A having the +; value 'start' the first time, 'start+step' the +; second time, up to 'end' for the last time. +.macro for_loop routine,start,end,step + .local @for_loop + lda #start +@for_loop: + pha + jsr routine + pla + clc + adc #step + cmp #<((end)+(step)) + bne @for_loop +.endmacro + +; Calls routine n times. The value of A in the routine +; counts from 0 to n-1. +.macro loop_n_times routine,n + for_loop routine,0,n-1,+1 +.endmacro + +; Same as for_loop, except uses 16-bit value in YX. +; -256 <= step <= 255 +.macro for_loop16 routine,start,end,step +.if (step) < -256 || (step) > 255 + .error "Step must be within -256 to 255" +.endif + .local @for_loop_skip + .local @for_loop + ldy #>(start) + lda #<(start) +@for_loop: + tax + pha + tya + pha + jsr routine + pla + tay + pla + clc + adc #step +.if (step) > 0 + bcc @for_loop_skip + iny +.else + bcs @for_loop_skip + dey +.endif +@for_loop_skip: + cmp #<((end)+(step)) + bne @for_loop + cpy #>((end)+(step)) + bne @for_loop +.endmacro + +; Stores byte at addr +; Preserved: X, Y +.macro setb addr, byte + lda #byte + sta addr +.endmacro + +; Stores word at addr +; Preserved: X, Y +.macro setw addr, word + lda #<(word) + sta addr + lda #>(word) + sta addr+1 +.endmacro + +; Loads XY with 16-bit immediate or value at address +.macro ldxy Arg + .if .match( .left( 1, {Arg} ), # ) + ldy #<(.right( .tcount( {Arg} )-1, {Arg} )) + ldx #>(.right( .tcount( {Arg} )-1, {Arg} )) + .else + ldy (Arg) + ldx (Arg)+1 + .endif +.endmacro + +; Increments XY as 16-bit register, in CONSTANT time. +; Z flag set based on entire result. +; Preserved: A +; Time: 7 clocks +.macro inxy + iny ; 2 + beq *+4 ; 3 + ; -1 + bne *+3 ; 3 + ; -1 + inx ; 2 +.endmacro + +; Negates A and adds it to operand +.macro subaf Operand + eor #$FF + sec + adc Operand +.endmacro + +; Initializes CPU registers to reasonable values +; Preserved: A, Y +.macro init_cpu_regs + sei + cld ; unnecessary on NES, but might help on clone + ldx #$FF + txs + .ifndef BUILD_NSF + inx + stx PPUCTRL + .endif +.endmacro diff --git a/samples/Brainfuck/factor.b b/samples/Brainfuck/factor.b new file mode 100644 index 00000000..43f06ba2 --- /dev/null +++ b/samples/Brainfuck/factor.b @@ -0,0 +1,195 @@ +* factor an arbitrarily large positive integer +* +* Copyright (C) 1999 by Brian Raiter +* under the GNU General Public License + +>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>- + +* +* read in the number +* + +<<<<<<<<<+ +[-[>>>>>>>>>>][-]<<<<<<<<<<[[->>>>>>>>>>+<<<<<<<<<<]<<<<<<<<<<] + >>>>>>>>>>,----------] +>>>>>>>>>>[------------------------------------->>>>>>>>>->] +<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]- + +* +* display the number and initialize the loop variable to two +* + +[>++++++++++++++++++++++++++++++++++++++++++++++++. + ------------------------------------------------<<<<<<<<<<<] +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++. +--------------------------.[-] +>>>>>>>>>>>>++<<<<+ + +* +* the main loop +* + +[ [-]>> + + * + * make copies of the number and the loop variable + * + + [>>>>[-]>[-]>[-]>[-] + >[-]>[-] + <<<<<<<[->>>+>+<<<<]>>>>>>>>] + <<<<<<<<<<[>>>>>>[-<<<<+>>>>]<<<<<<<<<<<<<<<<]>>>>>>>>>> + [>[->>>+>>+<<<<<]>>>>>>>>>] + <<<<<<<<<<[>>>>>>[-<<<<<+>>>>>]<<<<<<<<<<<<<<<<]>>>>>>>>>> + + * + * divide the number by the loop variable + * + + [>>>[-]>>>[-]>[-]>>>] initialize + <<<<<<<<<<[<<<<<<<<<<] + >>>>>>>>>[-]>>>>>>>+<<<<<<<<[+]+ + [ ->> double divisor until above dividend + [>>>>>>[->++<]>>>>]<<<<<<<<<< + [>>>>>>>>[-]>[-] + <<<<[->>>++<<<]<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+< + [->--------->>>>>>>>>+<<<<<<<<<<[->+<]]]]]]]]]]]>>] + <<<<<<<<<<[>>>>>>>>>[-<+<<<+>>>>]<<<<<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+>[-<+> + [-<--------->>>>>>>>>>>+<<<<<<<<<<[-<+>]]]]]]]]]]]>>>] + <<<<<<<<<< + [>>>>[->>>+>>+<<<<<]<<<<<<<<<<<<<<] + >>>>>>>>>>[>>>>>>>[-<<<+>>>]>>>]<<<<<<<<<< + [>>>>>>>>[->-<]> + [<<<<<<<<<[<[-]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]<<<<<<<<<<<<<<<<<<<] + >>>>>>>>>>>>>>>>>>>] + <<<<<<<<<<<<<<<<<<<] + >>>>>>>>>[+[+[+[+[+[+[+[+[+[+[[-]<+>]]]]]]]]]]]< + ] + >>>>>>>> + [ subtract divisor from dividend + <<<<<< + [>>>>>>>>[-]>[-]<<<<<[->>>+>+<<<<]>>>>>>]<<<<<<<<<< + [>>>>>>>>[-<<<<+>>>>]<<<[->>>+>+<<<<]<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>>[-<<<<+>>>>]>]<<<<<<<<<< + [>>>>>>>>[-<->]<<<<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+<[->+< + [++++++++++[+>-<]>>>>>>>>>>-<<<<<<<<<<]]]]]]]]]]]>>>] + >>>>>>>+ + [ if difference is nonnegative then + [-]<<<<<<<<<<<<<<<<< replace dividend and increment quotient + [>>>>[-]>>>>[-<<<<+>>>>]<<[->>+<<]<<<<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>[->+<<<+>>]>>]<<<<<<<<<< + [>>>[->>>>>>+<<<<<<]<<<<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>>[-<<<<<<+>>>>>>[-<<<<<<+>>>>>> + [-<<<<<<+>>>>>>[-<<<<<<+>>>>>> + [-<<<<<<+>>>>>>[-<<<<<<+>>>>>> + [-<<<<<<+>>>>>>[-<<<<<<+>>>>>> + [-<<<<<<+>>>>>>[-<<<<<<--------->>>>>>>>>>>>>>>>+<<<<<<<<<< + [-<<<<<<+>>>>>>]]]]]]]]]]]>] + >>>>>>> + ] halve divisor and loop until zero + <<<<<<<<<<<<<<<<<[<<<<<<<<<<]>>>>>>>>>> + [>>>>>>>>[-]<<[->+<]<[->>>+<<<]>>>>>]<<<<<<<<<< + [+>>>>>>>[-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+> + [-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+> + [-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+> + [-<<<<<<<+>>>>>>>[-<<<<<<<->>>>>>+> + [-<<<<<<<+>>>>>>>]]]]]]]]]<<<<<<< + [->>>>>>>+<<<<<<<]-<<<<<<<<<<] + >>>>>>> + [-<<<<<<<<<<<+>>>>>>>>>>>] + >>>[>>>>>>>[-<<<<<<<<<<<+++++>>>>>>>>>>>]>>>]<<<<<<<<<< + [+>>>>>>>>[-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>> + [-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>> + [-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>> + [-<<<<<<<<+>>>>>>>>[-<<<<<<<<->>>>>+>>> + [-<<<<<<<<+>>>>>>>>]]]]]]]]]<<<<<<<< + [->>>>>>>>+<<<<<<<<]-<<<<<<<<<<] + >>>>>>>>[-<<<<<<<<<<<<<+>>>>>>>>>>>>>]>> + [>>>>>>>>[-<<<<<<<<<<<<<+++++>>>>>>>>>>>>>]>>]<<<<<<<<<< + [<<<<<<<<<<]>>>>>>>>>> + >>>>>> + ] + <<<<<< + + * + * make copies of the loop variable and the quotient + * + + [>>>[->>>>+>+<<<<<]>>>>>>>] + <<<<<<<<<< + [>>>>>>>[-<<<<+>>>>]<<<<<[->>>>>+>>+<<<<<<<]<<<<<<<<<<<<] + >>>>>>>>>>[>>>>>>>[-<<<<<+>>>>>]>>>]<<<<<<<<<< + + * + * break out of the loop if the quotient is larger than the loop variable + * + + [>>>>>>>>>[-<->]< + [<<<<<<<< + [<<[-]>>>>>>>>>>[-<<<<<<<<<<+>>>>>>>>>>]<<<<<<<<<<<<<<<<<<] + >>>>>>>>>>>>>>>>>>]<<<<<<<<<<<<<<<<<<] + >>>>>>>>[>-<[+[+[+[+[+[+[+[+[+[[-]>+<]]]]]]]]]]]>+ + + [ [-] + + * + * partially increment the loop variable + * + + <[-]+>>>>+>>>>>>>>[>>>>>>>>>>]<<<<<<<<<< + + * + * examine the remainder for nonzero digits + * + + [<<<<<<[<<<<[<<<<<<<<<<]>>>>+<<<<<<<<<<]<<<<] + >>>>>>>>>>>>>>>>>>>>[>>>>>>>>>>]<<<<<<<<<<[<<<<<<<<<<] + >>>>- + + [ [+] + + * + * decrement the loop variable and replace the number with the quotient + * + + >>>>>>>>-<<[>[-]>>[-<<+>>]>>>>>>>]<<<<<<<<<< + + * + * display the loop variable + * + + [+>>[>>>>>>>>+>>]<<-<<<<<<<<<<]- + [>>++++++++++++++++++++++++++++++++++++++++++++++++. + ------------------------------------------------<<<<<<<<<<<<] + ++++++++++++++++++++++++++++++++.[-]>>>> + + ] + + * + * normalize the loop variable + * + + >>>>>> + [>>[->>>>>+<<<<<[->>>>>+<<<<< + [->>>>>+<<<<<[->>>>>+<<<<< + [->>>>>+<<<<<[->>>>>+<<<<< + [->>>>>+<<<<<[->>>>>+<<<<< + [->>>>>+<<<<<[->>>>>--------->>>>>+<<<<<<<<<< + [->>>>>+<<<<<]]]]]]]]]]]>>>>>>>>] + <<<<<<<<<<[>>>>>>>[-<<<<<+>>>>>]<<<<<<<<<<<<<<<<<] + >>>>>>>>> + + ]< + +]>> + +* +* display the number and end +* + +[>>>>>>>>>>]<<<<<<<<<<[+>[>>>>>>>>>+>]<-<<<<<<<<<<]- +[>++++++++++++++++++++++++++++++++++++++++++++++++.<<<<<<<<<<<] +++++++++++. diff --git a/samples/Brainfuck/fib100.bf b/samples/Brainfuck/fib100.bf new file mode 100644 index 00000000..3359588a --- /dev/null +++ b/samples/Brainfuck/fib100.bf @@ -0,0 +1,13 @@ +# Calculate and output all fibonacci numbers under 100 + ++++++++++++ +>+>>>>++++++++++++++++++++++++++++++++++++++++++++ +>++++++++++++++++++++++++++++++++<<<<<<[>[>>>>>>+> ++<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<[>++++++++++[- +<-[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]]>[<<[>>>+<<< +-]>>[-]]<<]>>>[>>+>+<<<-]>>>[<<<+>>>-]+<[>[-]<[-]] +>[<<+>>[-]]<<<<<<<]>>>>>[+++++++++++++++++++++++++ ++++++++++++++++++++++++.[-]]++++++++++<[->-<]>++++ +++++++++++++++++++++++++++++++++++++++++++++.[-]<< +<<<<<<<<<<[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<-[>>.>.<<< +[-]]<<[>>+>+<<<-]>>>[<<<+>>>-]<<[<+>-]>[<+>-]<<<-] \ No newline at end of file diff --git a/samples/Brainfuck/hello.bf b/samples/Brainfuck/hello.bf new file mode 100644 index 00000000..6a93a155 --- /dev/null +++ b/samples/Brainfuck/hello.bf @@ -0,0 +1,4 @@ +// More complex version of hello world + +>++++++++[<+++++++++>-]<.>>+>+>++>[-]+<[>[->+<<++++>]<<]>.+++++++..+++.> +>+++++++.<<<[[-]<[-]>]<+++++++++++++++.>>.+++.------.--------.>>+.>++++. \ No newline at end of file diff --git a/samples/Brainfuck/helloworld.bf b/samples/Brainfuck/helloworld.bf new file mode 100644 index 00000000..c7bde23a --- /dev/null +++ b/samples/Brainfuck/helloworld.bf @@ -0,0 +1,3 @@ +// Hello World + +++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++. \ No newline at end of file diff --git a/samples/Brainfuck/rot13.bf b/samples/Brainfuck/rot13.bf new file mode 100644 index 00000000..3b9d8e7f --- /dev/null +++ b/samples/Brainfuck/rot13.bf @@ -0,0 +1,30 @@ +# ROT13 cipher + +-,+[ Read first character and start outer character reading loop + -[ Skip forward if character is 0 + >>++++[>++++++++<-] Set up divisor (32) for division loop + (MEMORY LAYOUT: dividend copy remainder divisor quotient zero zero) + <+<-[ Set up dividend (x minus 1) and enter division loop + >+>+>-[>>>] Increase copy and remainder / reduce divisor / Normal case: skip forward + <[[>+<-]>>+>] Special case: move remainder back to divisor and increase quotient + <<<<<- Decrement dividend + ] End division loop + ]>>>[-]+ End skip loop; zero former divisor and reuse space for a flag + >--[-[<->+++[-]]]<[ Zero that flag unless quotient was 2 or 3; zero quotient; check flag + ++++++++++++<[ If flag then set up divisor (13) for second division loop + (MEMORY LAYOUT: zero copy dividend divisor remainder quotient zero zero) + >-[>+>>] Reduce divisor; Normal case: increase remainder + >[+[<+>-]>+>>] Special case: increase remainder / move it back to divisor / increase quotient + <<<<<- Decrease dividend + ] End division loop + >>[<+>-] Add remainder back to divisor to get a useful 13 + >[ Skip forward if quotient was 0 + -[ Decrement quotient and skip forward if quotient was 1 + -<<[-]>> Zero quotient and divisor if quotient was 2 + ]<<[<<->>-]>> Zero divisor and subtract 13 from copy if quotient was 1 + ]<<[<<+>>-] Zero divisor and add 13 to copy if quotient was 0 + ] End outer skip loop (jump to here if ((character minus 1)/32) was not 2 or 3) + <[-] Clear remainder from first division if second division was skipped + <.[-] Output ROT13ed character from copy and clear it + <-,+ Read next character +] End character reading loop \ No newline at end of file diff --git a/samples/C++/ClasspathVMSystemProperties.inc b/samples/C++/ClasspathVMSystemProperties.inc new file mode 100644 index 00000000..714f19b9 --- /dev/null +++ b/samples/C++/ClasspathVMSystemProperties.inc @@ -0,0 +1,57 @@ +//===- ClasspathVMSystem/Properties.cpp -----------------------------------===// +//===--------------------- GNU classpath gnu/classpath/VMSystemProperties -===// +// +// The VMKit project +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include + +#include "types.h" + +#include "Classpath.h" +#include "JavaArray.h" +#include "JavaClass.h" +#include "JavaObject.h" +#include "JavaThread.h" +#include "JavaUpcalls.h" +#include "Jnjvm.h" + +#include "SetProperties.inc" + +using namespace j3; + +extern "C" { + + +JNIEXPORT void JNICALL Java_gnu_classpath_VMSystemProperties_preInit( +#ifdef NATIVE_JNI +JNIEnv *env, +jclass clazz, +#endif +JavaObject* prop) { + + llvm_gcroot(prop, 0); + + BEGIN_NATIVE_EXCEPTION(0) + + setProperties(prop); + + END_NATIVE_EXCEPTION +} + +extern "C" void Java_gnu_classpath_VMSystemProperties_postInit__Ljava_util_Properties_2(JavaObject* prop) { + + llvm_gcroot(prop, 0); + + BEGIN_NATIVE_EXCEPTION(0) + + setCommandLineProperties(prop); + + END_NATIVE_EXCEPTION +} + +} diff --git a/samples/C++/initClasses.inc b/samples/C++/initClasses.inc new file mode 100644 index 00000000..58439af1 --- /dev/null +++ b/samples/C++/initClasses.inc @@ -0,0 +1,2764 @@ +// start +// define cpp macros: SET_SYMBOL, CREATE_CLASS, SET_CLASS, DEFINE_BASE_CLASSES, DEFINE_CLASS_NAMES, EXPOSE_TO_CANDO +// define cpp macro: ALL_STAGES to get the effect of defining all of the macros above +// define cpp macro: EXPOSE_PYTHON to expose python +// Associating namespace(llvmo) with package(LlvmoPkg) + // class DebugLoc_O : public core::T_O + // class InsertPoint_O : public core::T_O + // class LLVMContext_O : public core::ExternalObject_O + // class Pass_O : public core::ExternalObject_O + // class FunctionPass_O : public Pass_O + // class ModulePass_O : public Pass_O + // class ImmutablePass_O : public ModulePass_O + // class PassManagerBase_O : public core::ExternalObject_O + // class Value_O : public core::ExternalObject_O + // class User_O : public Value_O + // class LLVMContext_O : public core::ExternalObject_O + // class Pass_O : public core::ExternalObject_O + // class FunctionPass_O : public Pass_O + // class ModulePass_O : public Pass_O + // class ImmutablePass_O : public ModulePass_O + // class PassManagerBase_O : public core::ExternalObject_O + // class Value_O : public core::ExternalObject_O + // class User_O : public Value_O + // class Attribute_O : public core::T_O + // class DataLayout_O : public ImmutablePass_O + // class Constant_O : public User_O + // class ConstantArray_O : public Constant_O + // class ConstantDataSequential_O : public Constant_O + // class ConstantDataArray_O : public ConstantDataSequential_O + // class ConstantExpr_O : public Constant_O + // class GlobalValue_O : public Constant_O + // class GlobalVariable_O : public GlobalValue_O + // class ExecutionEngine_O : public core::ExternalObject_O + // class Module_O : public core::ExternalObject_O + // class FunctionPassManager_O : public PassManagerBase_O + // class EngineBuilder_O : public core::ExternalObject_O + // class APFloat_O : public core::ExternalObject_O + // class APInt_O : public core::ExternalObject_O + // class IRBuilderBase_O : public core::ExternalObject_O + // class IRBuilder_O : public IRBuilderBase_O + // class Instruction_O : public User_O + // class StoreInst_O : public Instruction_O + // class FenceInst_O : public Instruction_O + // class AtomicCmpXchgInst_O : public Instruction_O + // class AtomicRMWInst_O : public Instruction_O + // class PHINode_O : public Instruction_O + // class CallInst_O : public Instruction_O + // class LandingPadInst_O : public Instruction_O + // class UnaryInstruction_O : public Instruction_O + // class AllocaInst_O : public UnaryInstruction_O + // class VAArgInst_O : public UnaryInstruction_O + // class LoadInst_O : public UnaryInstruction_O + // class TerminatorInst_O : public Instruction_O + // class BranchInst_O : public TerminatorInst_O + // class SwitchInst_O : public TerminatorInst_O + // class IndirectBrInst_O : public TerminatorInst_O + // class InvokeInst_O : public TerminatorInst_O + // class ResumeInst_O : public TerminatorInst_O + // class UnreachableInst_O : public TerminatorInst_O + // class ReturnInst_O : public TerminatorInst_O + // class ConstantFP_O : public Constant_O + // class ConstantInt_O : public Constant_O + // class UndefValue_O : public Constant_O + // class ConstantPointerNull_O : public Constant_O + // class MDNode_O : public Value_O + // class MDString_O : public Value_O + // class Function_O : public GlobalValue_O + // class BasicBlock_O : public Value_O + // class Argument_O : public Value_O + // class Type_O : public core::ExternalObject_O + // class FunctionType_O : public Type_O + // class IntegerType_O : public Type_O + // class CompositeType_O : public Type_O + // class StructType_O : public CompositeType_O + // class SequentialType_O : public CompositeType_O + // class PointerType_O : public SequentialType_O + // class ArrayType_O : public SequentialType_O + // class VectorType_O : public SequentialType_O + // class LLVMContext_O : public core::ExternalObject_O + // class Module_O : public core::ExternalObject_O + // class Builder_O : public core::ExternalObject_O + // class APFloat_O : public core::ExternalObject_O + // class Value_O : public core::ExternalObject_O + // class User_O : public Value_O + // class Constant_O : public User_O + // class ConstantFP_O : public Constant_O +// Associating namespace(llvmo) with package(LlvmoPkg) +#ifdef HEADER_INCLUDES +#include "llvmoExpose.h" +#include "llvmoExpose.scrape_inc.h" +#include "debugLoc.h" +#include "insertPoint.h" +#include "llvmoExpose.generated.h" +#endif // HEADER_INCLUDES +#undef HEADER_INCLUDES +#if defined(SET_SYMBOL) || defined(ALL_STAGES) +// requires LOOKUP_SYMBOL(pkg,symbolName) be defined +llvmo::APFloat_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::APFloat_O::static_packageName(),llvmo::APFloat_O::static_className())); +llvmo::APInt_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::APInt_O::static_packageName(),llvmo::APInt_O::static_className())); +llvmo::Attribute_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Attribute_O::static_packageName(),llvmo::Attribute_O::static_className())); +llvmo::Builder_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Builder_O::static_packageName(),llvmo::Builder_O::static_className())); +llvmo::DebugLoc_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::DebugLoc_O::static_packageName(),llvmo::DebugLoc_O::static_className())); +llvmo::EngineBuilder_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::EngineBuilder_O::static_packageName(),llvmo::EngineBuilder_O::static_className())); +llvmo::ExecutionEngine_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ExecutionEngine_O::static_packageName(),llvmo::ExecutionEngine_O::static_className())); +llvmo::IRBuilderBase_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::IRBuilderBase_O::static_packageName(),llvmo::IRBuilderBase_O::static_className())); +llvmo::InsertPoint_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::InsertPoint_O::static_packageName(),llvmo::InsertPoint_O::static_className())); +llvmo::LLVMContext_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::LLVMContext_O::static_packageName(),llvmo::LLVMContext_O::static_className())); +llvmo::Module_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Module_O::static_packageName(),llvmo::Module_O::static_className())); +llvmo::PassManagerBase_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::PassManagerBase_O::static_packageName(),llvmo::PassManagerBase_O::static_className())); +llvmo::Pass_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Pass_O::static_packageName(),llvmo::Pass_O::static_className())); +llvmo::Type_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Type_O::static_packageName(),llvmo::Type_O::static_className())); +llvmo::Value_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Value_O::static_packageName(),llvmo::Value_O::static_className())); +llvmo::Argument_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Argument_O::static_packageName(),llvmo::Argument_O::static_className())); +llvmo::BasicBlock_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::BasicBlock_O::static_packageName(),llvmo::BasicBlock_O::static_className())); +llvmo::CompositeType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::CompositeType_O::static_packageName(),llvmo::CompositeType_O::static_className())); +llvmo::FunctionPassManager_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::FunctionPassManager_O::static_packageName(),llvmo::FunctionPassManager_O::static_className())); +llvmo::FunctionPass_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::FunctionPass_O::static_packageName(),llvmo::FunctionPass_O::static_className())); +llvmo::FunctionType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::FunctionType_O::static_packageName(),llvmo::FunctionType_O::static_className())); +llvmo::IRBuilder_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::IRBuilder_O::static_packageName(),llvmo::IRBuilder_O::static_className())); +llvmo::IntegerType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::IntegerType_O::static_packageName(),llvmo::IntegerType_O::static_className())); +llvmo::MDNode_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::MDNode_O::static_packageName(),llvmo::MDNode_O::static_className())); +llvmo::MDString_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::MDString_O::static_packageName(),llvmo::MDString_O::static_className())); +llvmo::ModulePass_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ModulePass_O::static_packageName(),llvmo::ModulePass_O::static_className())); +llvmo::User_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::User_O::static_packageName(),llvmo::User_O::static_className())); +llvmo::Constant_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Constant_O::static_packageName(),llvmo::Constant_O::static_className())); +llvmo::ImmutablePass_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ImmutablePass_O::static_packageName(),llvmo::ImmutablePass_O::static_className())); +llvmo::Instruction_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Instruction_O::static_packageName(),llvmo::Instruction_O::static_className())); +llvmo::SequentialType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::SequentialType_O::static_packageName(),llvmo::SequentialType_O::static_className())); +llvmo::StructType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::StructType_O::static_packageName(),llvmo::StructType_O::static_className())); +llvmo::ArrayType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ArrayType_O::static_packageName(),llvmo::ArrayType_O::static_className())); +llvmo::AtomicCmpXchgInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::AtomicCmpXchgInst_O::static_packageName(),llvmo::AtomicCmpXchgInst_O::static_className())); +llvmo::AtomicRMWInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::AtomicRMWInst_O::static_packageName(),llvmo::AtomicRMWInst_O::static_className())); +llvmo::CallInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::CallInst_O::static_packageName(),llvmo::CallInst_O::static_className())); +llvmo::ConstantArray_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ConstantArray_O::static_packageName(),llvmo::ConstantArray_O::static_className())); +llvmo::ConstantDataSequential_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ConstantDataSequential_O::static_packageName(),llvmo::ConstantDataSequential_O::static_className())); +llvmo::ConstantExpr_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ConstantExpr_O::static_packageName(),llvmo::ConstantExpr_O::static_className())); +llvmo::ConstantFP_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ConstantFP_O::static_packageName(),llvmo::ConstantFP_O::static_className())); +llvmo::ConstantInt_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ConstantInt_O::static_packageName(),llvmo::ConstantInt_O::static_className())); +llvmo::ConstantPointerNull_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ConstantPointerNull_O::static_packageName(),llvmo::ConstantPointerNull_O::static_className())); +llvmo::DataLayout_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::DataLayout_O::static_packageName(),llvmo::DataLayout_O::static_className())); +llvmo::FenceInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::FenceInst_O::static_packageName(),llvmo::FenceInst_O::static_className())); +llvmo::GlobalValue_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::GlobalValue_O::static_packageName(),llvmo::GlobalValue_O::static_className())); +llvmo::LandingPadInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::LandingPadInst_O::static_packageName(),llvmo::LandingPadInst_O::static_className())); +llvmo::PHINode_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::PHINode_O::static_packageName(),llvmo::PHINode_O::static_className())); +llvmo::PointerType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::PointerType_O::static_packageName(),llvmo::PointerType_O::static_className())); +llvmo::StoreInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::StoreInst_O::static_packageName(),llvmo::StoreInst_O::static_className())); +llvmo::TerminatorInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::TerminatorInst_O::static_packageName(),llvmo::TerminatorInst_O::static_className())); +llvmo::UnaryInstruction_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::UnaryInstruction_O::static_packageName(),llvmo::UnaryInstruction_O::static_className())); +llvmo::UndefValue_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::UndefValue_O::static_packageName(),llvmo::UndefValue_O::static_className())); +llvmo::VectorType_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::VectorType_O::static_packageName(),llvmo::VectorType_O::static_className())); +llvmo::AllocaInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::AllocaInst_O::static_packageName(),llvmo::AllocaInst_O::static_className())); +llvmo::BranchInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::BranchInst_O::static_packageName(),llvmo::BranchInst_O::static_className())); +llvmo::ConstantDataArray_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ConstantDataArray_O::static_packageName(),llvmo::ConstantDataArray_O::static_className())); +llvmo::Function_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::Function_O::static_packageName(),llvmo::Function_O::static_className())); +llvmo::GlobalVariable_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::GlobalVariable_O::static_packageName(),llvmo::GlobalVariable_O::static_className())); +llvmo::IndirectBrInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::IndirectBrInst_O::static_packageName(),llvmo::IndirectBrInst_O::static_className())); +llvmo::InvokeInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::InvokeInst_O::static_packageName(),llvmo::InvokeInst_O::static_className())); +llvmo::LoadInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::LoadInst_O::static_packageName(),llvmo::LoadInst_O::static_className())); +llvmo::ResumeInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ResumeInst_O::static_packageName(),llvmo::ResumeInst_O::static_className())); +llvmo::ReturnInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::ReturnInst_O::static_packageName(),llvmo::ReturnInst_O::static_className())); +llvmo::SwitchInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::SwitchInst_O::static_packageName(),llvmo::SwitchInst_O::static_className())); +llvmo::UnreachableInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::UnreachableInst_O::static_packageName(),llvmo::UnreachableInst_O::static_className())); +llvmo::VAArgInst_O::___set_static_ClassSymbol(LOOKUP_SYMBOL(llvmo::VAArgInst_O::static_packageName(),llvmo::VAArgInst_O::static_className())); +#endif // SET_SYMBOL +#undef SET_SYMBOL +#if defined(CREATE_CLASS) || defined(ALL_STAGES) +// Depends on undefinedMetaClass + core::MetaClass_sp undefinedMetaClass; undefinedMetaClass.reset(); + + LOG(BF("Creating class[classllvmo__APFloat_Oval]")); + core::BuiltInClass_sp classllvmo__APFloat_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__APFloat_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__APFloat_Oval,_lisp,llvmo::APFloat_O::static_classSymbol()); + llvmo::APFloat_O::___staticMetaClass = classllvmo__APFloat_Oval; + _lisp->setf_findClass(llvmo::APFloat_O::static_classSymbol(),classllvmo__APFloat_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::APFloat_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::APFloat_O::static_className() % (void*)(llvmo::APFloat_O::static_newNil_callback()) ); + classllvmo__APFloat_Oval->setInstance_newNil_callback(llvmo::APFloat_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::APFloat_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::APFloat_O::static_className() ); + llvmo::APFloat_O::_nil = nil_for_class; + classllvmo__APFloat_Oval->setInstanceNil(nil_for_class); + } + classllvmo__APFloat_Oval->setSupportsSlots(llvmo::APFloat_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__APInt_Oval]")); + core::BuiltInClass_sp classllvmo__APInt_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__APInt_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__APInt_Oval,_lisp,llvmo::APInt_O::static_classSymbol()); + llvmo::APInt_O::___staticMetaClass = classllvmo__APInt_Oval; + _lisp->setf_findClass(llvmo::APInt_O::static_classSymbol(),classllvmo__APInt_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::APInt_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::APInt_O::static_className() % (void*)(llvmo::APInt_O::static_newNil_callback()) ); + classllvmo__APInt_Oval->setInstance_newNil_callback(llvmo::APInt_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::APInt_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::APInt_O::static_className() ); + llvmo::APInt_O::_nil = nil_for_class; + classllvmo__APInt_Oval->setInstanceNil(nil_for_class); + } + classllvmo__APInt_Oval->setSupportsSlots(llvmo::APInt_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Attribute_Oval]")); + core::BuiltInClass_sp classllvmo__Attribute_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Attribute_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Attribute_Oval,_lisp,llvmo::Attribute_O::static_classSymbol()); + llvmo::Attribute_O::___staticMetaClass = classllvmo__Attribute_Oval; + _lisp->setf_findClass(llvmo::Attribute_O::static_classSymbol(),classllvmo__Attribute_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Attribute_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Attribute_O::static_className() % (void*)(llvmo::Attribute_O::static_newNil_callback()) ); + classllvmo__Attribute_Oval->setInstance_newNil_callback(llvmo::Attribute_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Attribute_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Attribute_O::static_className() ); + llvmo::Attribute_O::_nil = nil_for_class; + classllvmo__Attribute_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Attribute_Oval->setSupportsSlots(llvmo::Attribute_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Builder_Oval]")); + core::BuiltInClass_sp classllvmo__Builder_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Builder_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Builder_Oval,_lisp,llvmo::Builder_O::static_classSymbol()); + llvmo::Builder_O::___staticMetaClass = classllvmo__Builder_Oval; + _lisp->setf_findClass(llvmo::Builder_O::static_classSymbol(),classllvmo__Builder_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Builder_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Builder_O::static_className() % (void*)(llvmo::Builder_O::static_newNil_callback()) ); + classllvmo__Builder_Oval->setInstance_newNil_callback(llvmo::Builder_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Builder_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Builder_O::static_className() ); + llvmo::Builder_O::_nil = nil_for_class; + classllvmo__Builder_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Builder_Oval->setSupportsSlots(llvmo::Builder_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__DebugLoc_Oval]")); + core::BuiltInClass_sp classllvmo__DebugLoc_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__DebugLoc_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__DebugLoc_Oval,_lisp,llvmo::DebugLoc_O::static_classSymbol()); + llvmo::DebugLoc_O::___staticMetaClass = classllvmo__DebugLoc_Oval; + _lisp->setf_findClass(llvmo::DebugLoc_O::static_classSymbol(),classllvmo__DebugLoc_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::DebugLoc_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::DebugLoc_O::static_className() % (void*)(llvmo::DebugLoc_O::static_newNil_callback()) ); + classllvmo__DebugLoc_Oval->setInstance_newNil_callback(llvmo::DebugLoc_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::DebugLoc_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::DebugLoc_O::static_className() ); + llvmo::DebugLoc_O::_nil = nil_for_class; + classllvmo__DebugLoc_Oval->setInstanceNil(nil_for_class); + } + classllvmo__DebugLoc_Oval->setSupportsSlots(llvmo::DebugLoc_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__EngineBuilder_Oval]")); + core::BuiltInClass_sp classllvmo__EngineBuilder_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__EngineBuilder_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__EngineBuilder_Oval,_lisp,llvmo::EngineBuilder_O::static_classSymbol()); + llvmo::EngineBuilder_O::___staticMetaClass = classllvmo__EngineBuilder_Oval; + _lisp->setf_findClass(llvmo::EngineBuilder_O::static_classSymbol(),classllvmo__EngineBuilder_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::EngineBuilder_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::EngineBuilder_O::static_className() % (void*)(llvmo::EngineBuilder_O::static_newNil_callback()) ); + classllvmo__EngineBuilder_Oval->setInstance_newNil_callback(llvmo::EngineBuilder_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::EngineBuilder_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::EngineBuilder_O::static_className() ); + llvmo::EngineBuilder_O::_nil = nil_for_class; + classllvmo__EngineBuilder_Oval->setInstanceNil(nil_for_class); + } + classllvmo__EngineBuilder_Oval->setSupportsSlots(llvmo::EngineBuilder_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ExecutionEngine_Oval]")); + core::BuiltInClass_sp classllvmo__ExecutionEngine_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ExecutionEngine_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ExecutionEngine_Oval,_lisp,llvmo::ExecutionEngine_O::static_classSymbol()); + llvmo::ExecutionEngine_O::___staticMetaClass = classllvmo__ExecutionEngine_Oval; + _lisp->setf_findClass(llvmo::ExecutionEngine_O::static_classSymbol(),classllvmo__ExecutionEngine_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ExecutionEngine_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ExecutionEngine_O::static_className() % (void*)(llvmo::ExecutionEngine_O::static_newNil_callback()) ); + classllvmo__ExecutionEngine_Oval->setInstance_newNil_callback(llvmo::ExecutionEngine_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ExecutionEngine_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ExecutionEngine_O::static_className() ); + llvmo::ExecutionEngine_O::_nil = nil_for_class; + classllvmo__ExecutionEngine_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ExecutionEngine_Oval->setSupportsSlots(llvmo::ExecutionEngine_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__IRBuilderBase_Oval]")); + core::BuiltInClass_sp classllvmo__IRBuilderBase_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__IRBuilderBase_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__IRBuilderBase_Oval,_lisp,llvmo::IRBuilderBase_O::static_classSymbol()); + llvmo::IRBuilderBase_O::___staticMetaClass = classllvmo__IRBuilderBase_Oval; + _lisp->setf_findClass(llvmo::IRBuilderBase_O::static_classSymbol(),classllvmo__IRBuilderBase_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::IRBuilderBase_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::IRBuilderBase_O::static_className() % (void*)(llvmo::IRBuilderBase_O::static_newNil_callback()) ); + classllvmo__IRBuilderBase_Oval->setInstance_newNil_callback(llvmo::IRBuilderBase_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::IRBuilderBase_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::IRBuilderBase_O::static_className() ); + llvmo::IRBuilderBase_O::_nil = nil_for_class; + classllvmo__IRBuilderBase_Oval->setInstanceNil(nil_for_class); + } + classllvmo__IRBuilderBase_Oval->setSupportsSlots(llvmo::IRBuilderBase_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__InsertPoint_Oval]")); + core::BuiltInClass_sp classllvmo__InsertPoint_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__InsertPoint_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__InsertPoint_Oval,_lisp,llvmo::InsertPoint_O::static_classSymbol()); + llvmo::InsertPoint_O::___staticMetaClass = classllvmo__InsertPoint_Oval; + _lisp->setf_findClass(llvmo::InsertPoint_O::static_classSymbol(),classllvmo__InsertPoint_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::InsertPoint_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::InsertPoint_O::static_className() % (void*)(llvmo::InsertPoint_O::static_newNil_callback()) ); + classllvmo__InsertPoint_Oval->setInstance_newNil_callback(llvmo::InsertPoint_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::InsertPoint_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::InsertPoint_O::static_className() ); + llvmo::InsertPoint_O::_nil = nil_for_class; + classllvmo__InsertPoint_Oval->setInstanceNil(nil_for_class); + } + classllvmo__InsertPoint_Oval->setSupportsSlots(llvmo::InsertPoint_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__LLVMContext_Oval]")); + core::BuiltInClass_sp classllvmo__LLVMContext_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__LLVMContext_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__LLVMContext_Oval,_lisp,llvmo::LLVMContext_O::static_classSymbol()); + llvmo::LLVMContext_O::___staticMetaClass = classllvmo__LLVMContext_Oval; + _lisp->setf_findClass(llvmo::LLVMContext_O::static_classSymbol(),classllvmo__LLVMContext_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::LLVMContext_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::LLVMContext_O::static_className() % (void*)(llvmo::LLVMContext_O::static_newNil_callback()) ); + classllvmo__LLVMContext_Oval->setInstance_newNil_callback(llvmo::LLVMContext_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::LLVMContext_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::LLVMContext_O::static_className() ); + llvmo::LLVMContext_O::_nil = nil_for_class; + classllvmo__LLVMContext_Oval->setInstanceNil(nil_for_class); + } + classllvmo__LLVMContext_Oval->setSupportsSlots(llvmo::LLVMContext_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Module_Oval]")); + core::BuiltInClass_sp classllvmo__Module_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Module_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Module_Oval,_lisp,llvmo::Module_O::static_classSymbol()); + llvmo::Module_O::___staticMetaClass = classllvmo__Module_Oval; + _lisp->setf_findClass(llvmo::Module_O::static_classSymbol(),classllvmo__Module_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Module_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Module_O::static_className() % (void*)(llvmo::Module_O::static_newNil_callback()) ); + classllvmo__Module_Oval->setInstance_newNil_callback(llvmo::Module_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Module_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Module_O::static_className() ); + llvmo::Module_O::_nil = nil_for_class; + classllvmo__Module_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Module_Oval->setSupportsSlots(llvmo::Module_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__PassManagerBase_Oval]")); + core::BuiltInClass_sp classllvmo__PassManagerBase_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__PassManagerBase_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__PassManagerBase_Oval,_lisp,llvmo::PassManagerBase_O::static_classSymbol()); + llvmo::PassManagerBase_O::___staticMetaClass = classllvmo__PassManagerBase_Oval; + _lisp->setf_findClass(llvmo::PassManagerBase_O::static_classSymbol(),classllvmo__PassManagerBase_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::PassManagerBase_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::PassManagerBase_O::static_className() % (void*)(llvmo::PassManagerBase_O::static_newNil_callback()) ); + classllvmo__PassManagerBase_Oval->setInstance_newNil_callback(llvmo::PassManagerBase_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::PassManagerBase_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::PassManagerBase_O::static_className() ); + llvmo::PassManagerBase_O::_nil = nil_for_class; + classllvmo__PassManagerBase_Oval->setInstanceNil(nil_for_class); + } + classllvmo__PassManagerBase_Oval->setSupportsSlots(llvmo::PassManagerBase_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Pass_Oval]")); + core::BuiltInClass_sp classllvmo__Pass_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Pass_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Pass_Oval,_lisp,llvmo::Pass_O::static_classSymbol()); + llvmo::Pass_O::___staticMetaClass = classllvmo__Pass_Oval; + _lisp->setf_findClass(llvmo::Pass_O::static_classSymbol(),classllvmo__Pass_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Pass_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Pass_O::static_className() % (void*)(llvmo::Pass_O::static_newNil_callback()) ); + classllvmo__Pass_Oval->setInstance_newNil_callback(llvmo::Pass_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Pass_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Pass_O::static_className() ); + llvmo::Pass_O::_nil = nil_for_class; + classllvmo__Pass_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Pass_Oval->setSupportsSlots(llvmo::Pass_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Type_Oval]")); + core::BuiltInClass_sp classllvmo__Type_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Type_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Type_Oval,_lisp,llvmo::Type_O::static_classSymbol()); + llvmo::Type_O::___staticMetaClass = classllvmo__Type_Oval; + _lisp->setf_findClass(llvmo::Type_O::static_classSymbol(),classllvmo__Type_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Type_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Type_O::static_className() % (void*)(llvmo::Type_O::static_newNil_callback()) ); + classllvmo__Type_Oval->setInstance_newNil_callback(llvmo::Type_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Type_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Type_O::static_className() ); + llvmo::Type_O::_nil = nil_for_class; + classllvmo__Type_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Type_Oval->setSupportsSlots(llvmo::Type_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Value_Oval]")); + core::BuiltInClass_sp classllvmo__Value_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Value_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Value_Oval,_lisp,llvmo::Value_O::static_classSymbol()); + llvmo::Value_O::___staticMetaClass = classllvmo__Value_Oval; + _lisp->setf_findClass(llvmo::Value_O::static_classSymbol(),classllvmo__Value_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Value_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Value_O::static_className() % (void*)(llvmo::Value_O::static_newNil_callback()) ); + classllvmo__Value_Oval->setInstance_newNil_callback(llvmo::Value_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Value_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Value_O::static_className() ); + llvmo::Value_O::_nil = nil_for_class; + classllvmo__Value_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Value_Oval->setSupportsSlots(llvmo::Value_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Argument_Oval]")); + core::BuiltInClass_sp classllvmo__Argument_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Argument_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Argument_Oval,_lisp,llvmo::Argument_O::static_classSymbol()); + llvmo::Argument_O::___staticMetaClass = classllvmo__Argument_Oval; + _lisp->setf_findClass(llvmo::Argument_O::static_classSymbol(),classllvmo__Argument_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Argument_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Argument_O::static_className() % (void*)(llvmo::Argument_O::static_newNil_callback()) ); + classllvmo__Argument_Oval->setInstance_newNil_callback(llvmo::Argument_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Argument_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Argument_O::static_className() ); + llvmo::Argument_O::_nil = nil_for_class; + classllvmo__Argument_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Argument_Oval->setSupportsSlots(llvmo::Argument_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__BasicBlock_Oval]")); + core::BuiltInClass_sp classllvmo__BasicBlock_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__BasicBlock_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__BasicBlock_Oval,_lisp,llvmo::BasicBlock_O::static_classSymbol()); + llvmo::BasicBlock_O::___staticMetaClass = classllvmo__BasicBlock_Oval; + _lisp->setf_findClass(llvmo::BasicBlock_O::static_classSymbol(),classllvmo__BasicBlock_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::BasicBlock_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::BasicBlock_O::static_className() % (void*)(llvmo::BasicBlock_O::static_newNil_callback()) ); + classllvmo__BasicBlock_Oval->setInstance_newNil_callback(llvmo::BasicBlock_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::BasicBlock_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::BasicBlock_O::static_className() ); + llvmo::BasicBlock_O::_nil = nil_for_class; + classllvmo__BasicBlock_Oval->setInstanceNil(nil_for_class); + } + classllvmo__BasicBlock_Oval->setSupportsSlots(llvmo::BasicBlock_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__CompositeType_Oval]")); + core::BuiltInClass_sp classllvmo__CompositeType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__CompositeType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__CompositeType_Oval,_lisp,llvmo::CompositeType_O::static_classSymbol()); + llvmo::CompositeType_O::___staticMetaClass = classllvmo__CompositeType_Oval; + _lisp->setf_findClass(llvmo::CompositeType_O::static_classSymbol(),classllvmo__CompositeType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::CompositeType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::CompositeType_O::static_className() % (void*)(llvmo::CompositeType_O::static_newNil_callback()) ); + classllvmo__CompositeType_Oval->setInstance_newNil_callback(llvmo::CompositeType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::CompositeType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::CompositeType_O::static_className() ); + llvmo::CompositeType_O::_nil = nil_for_class; + classllvmo__CompositeType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__CompositeType_Oval->setSupportsSlots(llvmo::CompositeType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__FunctionPassManager_Oval]")); + core::BuiltInClass_sp classllvmo__FunctionPassManager_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__FunctionPassManager_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__FunctionPassManager_Oval,_lisp,llvmo::FunctionPassManager_O::static_classSymbol()); + llvmo::FunctionPassManager_O::___staticMetaClass = classllvmo__FunctionPassManager_Oval; + _lisp->setf_findClass(llvmo::FunctionPassManager_O::static_classSymbol(),classllvmo__FunctionPassManager_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::FunctionPassManager_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::FunctionPassManager_O::static_className() % (void*)(llvmo::FunctionPassManager_O::static_newNil_callback()) ); + classllvmo__FunctionPassManager_Oval->setInstance_newNil_callback(llvmo::FunctionPassManager_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::FunctionPassManager_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::FunctionPassManager_O::static_className() ); + llvmo::FunctionPassManager_O::_nil = nil_for_class; + classllvmo__FunctionPassManager_Oval->setInstanceNil(nil_for_class); + } + classllvmo__FunctionPassManager_Oval->setSupportsSlots(llvmo::FunctionPassManager_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__FunctionPass_Oval]")); + core::BuiltInClass_sp classllvmo__FunctionPass_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__FunctionPass_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__FunctionPass_Oval,_lisp,llvmo::FunctionPass_O::static_classSymbol()); + llvmo::FunctionPass_O::___staticMetaClass = classllvmo__FunctionPass_Oval; + _lisp->setf_findClass(llvmo::FunctionPass_O::static_classSymbol(),classllvmo__FunctionPass_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::FunctionPass_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::FunctionPass_O::static_className() % (void*)(llvmo::FunctionPass_O::static_newNil_callback()) ); + classllvmo__FunctionPass_Oval->setInstance_newNil_callback(llvmo::FunctionPass_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::FunctionPass_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::FunctionPass_O::static_className() ); + llvmo::FunctionPass_O::_nil = nil_for_class; + classllvmo__FunctionPass_Oval->setInstanceNil(nil_for_class); + } + classllvmo__FunctionPass_Oval->setSupportsSlots(llvmo::FunctionPass_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__FunctionType_Oval]")); + core::BuiltInClass_sp classllvmo__FunctionType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__FunctionType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__FunctionType_Oval,_lisp,llvmo::FunctionType_O::static_classSymbol()); + llvmo::FunctionType_O::___staticMetaClass = classllvmo__FunctionType_Oval; + _lisp->setf_findClass(llvmo::FunctionType_O::static_classSymbol(),classllvmo__FunctionType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::FunctionType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::FunctionType_O::static_className() % (void*)(llvmo::FunctionType_O::static_newNil_callback()) ); + classllvmo__FunctionType_Oval->setInstance_newNil_callback(llvmo::FunctionType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::FunctionType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::FunctionType_O::static_className() ); + llvmo::FunctionType_O::_nil = nil_for_class; + classllvmo__FunctionType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__FunctionType_Oval->setSupportsSlots(llvmo::FunctionType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__IRBuilder_Oval]")); + core::BuiltInClass_sp classllvmo__IRBuilder_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__IRBuilder_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__IRBuilder_Oval,_lisp,llvmo::IRBuilder_O::static_classSymbol()); + llvmo::IRBuilder_O::___staticMetaClass = classllvmo__IRBuilder_Oval; + _lisp->setf_findClass(llvmo::IRBuilder_O::static_classSymbol(),classllvmo__IRBuilder_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::IRBuilder_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::IRBuilder_O::static_className() % (void*)(llvmo::IRBuilder_O::static_newNil_callback()) ); + classllvmo__IRBuilder_Oval->setInstance_newNil_callback(llvmo::IRBuilder_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::IRBuilder_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::IRBuilder_O::static_className() ); + llvmo::IRBuilder_O::_nil = nil_for_class; + classllvmo__IRBuilder_Oval->setInstanceNil(nil_for_class); + } + classllvmo__IRBuilder_Oval->setSupportsSlots(llvmo::IRBuilder_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__IntegerType_Oval]")); + core::BuiltInClass_sp classllvmo__IntegerType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__IntegerType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__IntegerType_Oval,_lisp,llvmo::IntegerType_O::static_classSymbol()); + llvmo::IntegerType_O::___staticMetaClass = classllvmo__IntegerType_Oval; + _lisp->setf_findClass(llvmo::IntegerType_O::static_classSymbol(),classllvmo__IntegerType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::IntegerType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::IntegerType_O::static_className() % (void*)(llvmo::IntegerType_O::static_newNil_callback()) ); + classllvmo__IntegerType_Oval->setInstance_newNil_callback(llvmo::IntegerType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::IntegerType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::IntegerType_O::static_className() ); + llvmo::IntegerType_O::_nil = nil_for_class; + classllvmo__IntegerType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__IntegerType_Oval->setSupportsSlots(llvmo::IntegerType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__MDNode_Oval]")); + core::BuiltInClass_sp classllvmo__MDNode_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__MDNode_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__MDNode_Oval,_lisp,llvmo::MDNode_O::static_classSymbol()); + llvmo::MDNode_O::___staticMetaClass = classllvmo__MDNode_Oval; + _lisp->setf_findClass(llvmo::MDNode_O::static_classSymbol(),classllvmo__MDNode_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::MDNode_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::MDNode_O::static_className() % (void*)(llvmo::MDNode_O::static_newNil_callback()) ); + classllvmo__MDNode_Oval->setInstance_newNil_callback(llvmo::MDNode_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::MDNode_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::MDNode_O::static_className() ); + llvmo::MDNode_O::_nil = nil_for_class; + classllvmo__MDNode_Oval->setInstanceNil(nil_for_class); + } + classllvmo__MDNode_Oval->setSupportsSlots(llvmo::MDNode_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__MDString_Oval]")); + core::BuiltInClass_sp classllvmo__MDString_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__MDString_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__MDString_Oval,_lisp,llvmo::MDString_O::static_classSymbol()); + llvmo::MDString_O::___staticMetaClass = classllvmo__MDString_Oval; + _lisp->setf_findClass(llvmo::MDString_O::static_classSymbol(),classllvmo__MDString_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::MDString_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::MDString_O::static_className() % (void*)(llvmo::MDString_O::static_newNil_callback()) ); + classllvmo__MDString_Oval->setInstance_newNil_callback(llvmo::MDString_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::MDString_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::MDString_O::static_className() ); + llvmo::MDString_O::_nil = nil_for_class; + classllvmo__MDString_Oval->setInstanceNil(nil_for_class); + } + classllvmo__MDString_Oval->setSupportsSlots(llvmo::MDString_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ModulePass_Oval]")); + core::BuiltInClass_sp classllvmo__ModulePass_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ModulePass_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ModulePass_Oval,_lisp,llvmo::ModulePass_O::static_classSymbol()); + llvmo::ModulePass_O::___staticMetaClass = classllvmo__ModulePass_Oval; + _lisp->setf_findClass(llvmo::ModulePass_O::static_classSymbol(),classllvmo__ModulePass_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ModulePass_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ModulePass_O::static_className() % (void*)(llvmo::ModulePass_O::static_newNil_callback()) ); + classllvmo__ModulePass_Oval->setInstance_newNil_callback(llvmo::ModulePass_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ModulePass_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ModulePass_O::static_className() ); + llvmo::ModulePass_O::_nil = nil_for_class; + classllvmo__ModulePass_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ModulePass_Oval->setSupportsSlots(llvmo::ModulePass_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__User_Oval]")); + core::BuiltInClass_sp classllvmo__User_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__User_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__User_Oval,_lisp,llvmo::User_O::static_classSymbol()); + llvmo::User_O::___staticMetaClass = classllvmo__User_Oval; + _lisp->setf_findClass(llvmo::User_O::static_classSymbol(),classllvmo__User_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::User_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::User_O::static_className() % (void*)(llvmo::User_O::static_newNil_callback()) ); + classllvmo__User_Oval->setInstance_newNil_callback(llvmo::User_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::User_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::User_O::static_className() ); + llvmo::User_O::_nil = nil_for_class; + classllvmo__User_Oval->setInstanceNil(nil_for_class); + } + classllvmo__User_Oval->setSupportsSlots(llvmo::User_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Constant_Oval]")); + core::BuiltInClass_sp classllvmo__Constant_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Constant_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Constant_Oval,_lisp,llvmo::Constant_O::static_classSymbol()); + llvmo::Constant_O::___staticMetaClass = classllvmo__Constant_Oval; + _lisp->setf_findClass(llvmo::Constant_O::static_classSymbol(),classllvmo__Constant_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Constant_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Constant_O::static_className() % (void*)(llvmo::Constant_O::static_newNil_callback()) ); + classllvmo__Constant_Oval->setInstance_newNil_callback(llvmo::Constant_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Constant_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Constant_O::static_className() ); + llvmo::Constant_O::_nil = nil_for_class; + classllvmo__Constant_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Constant_Oval->setSupportsSlots(llvmo::Constant_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ImmutablePass_Oval]")); + core::BuiltInClass_sp classllvmo__ImmutablePass_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ImmutablePass_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ImmutablePass_Oval,_lisp,llvmo::ImmutablePass_O::static_classSymbol()); + llvmo::ImmutablePass_O::___staticMetaClass = classllvmo__ImmutablePass_Oval; + _lisp->setf_findClass(llvmo::ImmutablePass_O::static_classSymbol(),classllvmo__ImmutablePass_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ImmutablePass_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ImmutablePass_O::static_className() % (void*)(llvmo::ImmutablePass_O::static_newNil_callback()) ); + classllvmo__ImmutablePass_Oval->setInstance_newNil_callback(llvmo::ImmutablePass_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ImmutablePass_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ImmutablePass_O::static_className() ); + llvmo::ImmutablePass_O::_nil = nil_for_class; + classllvmo__ImmutablePass_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ImmutablePass_Oval->setSupportsSlots(llvmo::ImmutablePass_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Instruction_Oval]")); + core::BuiltInClass_sp classllvmo__Instruction_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Instruction_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Instruction_Oval,_lisp,llvmo::Instruction_O::static_classSymbol()); + llvmo::Instruction_O::___staticMetaClass = classllvmo__Instruction_Oval; + _lisp->setf_findClass(llvmo::Instruction_O::static_classSymbol(),classllvmo__Instruction_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Instruction_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Instruction_O::static_className() % (void*)(llvmo::Instruction_O::static_newNil_callback()) ); + classllvmo__Instruction_Oval->setInstance_newNil_callback(llvmo::Instruction_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Instruction_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Instruction_O::static_className() ); + llvmo::Instruction_O::_nil = nil_for_class; + classllvmo__Instruction_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Instruction_Oval->setSupportsSlots(llvmo::Instruction_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__SequentialType_Oval]")); + core::BuiltInClass_sp classllvmo__SequentialType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__SequentialType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__SequentialType_Oval,_lisp,llvmo::SequentialType_O::static_classSymbol()); + llvmo::SequentialType_O::___staticMetaClass = classllvmo__SequentialType_Oval; + _lisp->setf_findClass(llvmo::SequentialType_O::static_classSymbol(),classllvmo__SequentialType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::SequentialType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::SequentialType_O::static_className() % (void*)(llvmo::SequentialType_O::static_newNil_callback()) ); + classllvmo__SequentialType_Oval->setInstance_newNil_callback(llvmo::SequentialType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::SequentialType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::SequentialType_O::static_className() ); + llvmo::SequentialType_O::_nil = nil_for_class; + classllvmo__SequentialType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__SequentialType_Oval->setSupportsSlots(llvmo::SequentialType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__StructType_Oval]")); + core::BuiltInClass_sp classllvmo__StructType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__StructType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__StructType_Oval,_lisp,llvmo::StructType_O::static_classSymbol()); + llvmo::StructType_O::___staticMetaClass = classllvmo__StructType_Oval; + _lisp->setf_findClass(llvmo::StructType_O::static_classSymbol(),classllvmo__StructType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::StructType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::StructType_O::static_className() % (void*)(llvmo::StructType_O::static_newNil_callback()) ); + classllvmo__StructType_Oval->setInstance_newNil_callback(llvmo::StructType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::StructType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::StructType_O::static_className() ); + llvmo::StructType_O::_nil = nil_for_class; + classllvmo__StructType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__StructType_Oval->setSupportsSlots(llvmo::StructType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ArrayType_Oval]")); + core::BuiltInClass_sp classllvmo__ArrayType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ArrayType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ArrayType_Oval,_lisp,llvmo::ArrayType_O::static_classSymbol()); + llvmo::ArrayType_O::___staticMetaClass = classllvmo__ArrayType_Oval; + _lisp->setf_findClass(llvmo::ArrayType_O::static_classSymbol(),classllvmo__ArrayType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ArrayType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ArrayType_O::static_className() % (void*)(llvmo::ArrayType_O::static_newNil_callback()) ); + classllvmo__ArrayType_Oval->setInstance_newNil_callback(llvmo::ArrayType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ArrayType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ArrayType_O::static_className() ); + llvmo::ArrayType_O::_nil = nil_for_class; + classllvmo__ArrayType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ArrayType_Oval->setSupportsSlots(llvmo::ArrayType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__AtomicCmpXchgInst_Oval]")); + core::BuiltInClass_sp classllvmo__AtomicCmpXchgInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__AtomicCmpXchgInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__AtomicCmpXchgInst_Oval,_lisp,llvmo::AtomicCmpXchgInst_O::static_classSymbol()); + llvmo::AtomicCmpXchgInst_O::___staticMetaClass = classllvmo__AtomicCmpXchgInst_Oval; + _lisp->setf_findClass(llvmo::AtomicCmpXchgInst_O::static_classSymbol(),classllvmo__AtomicCmpXchgInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::AtomicCmpXchgInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::AtomicCmpXchgInst_O::static_className() % (void*)(llvmo::AtomicCmpXchgInst_O::static_newNil_callback()) ); + classllvmo__AtomicCmpXchgInst_Oval->setInstance_newNil_callback(llvmo::AtomicCmpXchgInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::AtomicCmpXchgInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::AtomicCmpXchgInst_O::static_className() ); + llvmo::AtomicCmpXchgInst_O::_nil = nil_for_class; + classllvmo__AtomicCmpXchgInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__AtomicCmpXchgInst_Oval->setSupportsSlots(llvmo::AtomicCmpXchgInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__AtomicRMWInst_Oval]")); + core::BuiltInClass_sp classllvmo__AtomicRMWInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__AtomicRMWInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__AtomicRMWInst_Oval,_lisp,llvmo::AtomicRMWInst_O::static_classSymbol()); + llvmo::AtomicRMWInst_O::___staticMetaClass = classllvmo__AtomicRMWInst_Oval; + _lisp->setf_findClass(llvmo::AtomicRMWInst_O::static_classSymbol(),classllvmo__AtomicRMWInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::AtomicRMWInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::AtomicRMWInst_O::static_className() % (void*)(llvmo::AtomicRMWInst_O::static_newNil_callback()) ); + classllvmo__AtomicRMWInst_Oval->setInstance_newNil_callback(llvmo::AtomicRMWInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::AtomicRMWInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::AtomicRMWInst_O::static_className() ); + llvmo::AtomicRMWInst_O::_nil = nil_for_class; + classllvmo__AtomicRMWInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__AtomicRMWInst_Oval->setSupportsSlots(llvmo::AtomicRMWInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__CallInst_Oval]")); + core::BuiltInClass_sp classllvmo__CallInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__CallInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__CallInst_Oval,_lisp,llvmo::CallInst_O::static_classSymbol()); + llvmo::CallInst_O::___staticMetaClass = classllvmo__CallInst_Oval; + _lisp->setf_findClass(llvmo::CallInst_O::static_classSymbol(),classllvmo__CallInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::CallInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::CallInst_O::static_className() % (void*)(llvmo::CallInst_O::static_newNil_callback()) ); + classllvmo__CallInst_Oval->setInstance_newNil_callback(llvmo::CallInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::CallInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::CallInst_O::static_className() ); + llvmo::CallInst_O::_nil = nil_for_class; + classllvmo__CallInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__CallInst_Oval->setSupportsSlots(llvmo::CallInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ConstantArray_Oval]")); + core::BuiltInClass_sp classllvmo__ConstantArray_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ConstantArray_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ConstantArray_Oval,_lisp,llvmo::ConstantArray_O::static_classSymbol()); + llvmo::ConstantArray_O::___staticMetaClass = classllvmo__ConstantArray_Oval; + _lisp->setf_findClass(llvmo::ConstantArray_O::static_classSymbol(),classllvmo__ConstantArray_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ConstantArray_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ConstantArray_O::static_className() % (void*)(llvmo::ConstantArray_O::static_newNil_callback()) ); + classllvmo__ConstantArray_Oval->setInstance_newNil_callback(llvmo::ConstantArray_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ConstantArray_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ConstantArray_O::static_className() ); + llvmo::ConstantArray_O::_nil = nil_for_class; + classllvmo__ConstantArray_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ConstantArray_Oval->setSupportsSlots(llvmo::ConstantArray_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ConstantDataSequential_Oval]")); + core::BuiltInClass_sp classllvmo__ConstantDataSequential_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ConstantDataSequential_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ConstantDataSequential_Oval,_lisp,llvmo::ConstantDataSequential_O::static_classSymbol()); + llvmo::ConstantDataSequential_O::___staticMetaClass = classllvmo__ConstantDataSequential_Oval; + _lisp->setf_findClass(llvmo::ConstantDataSequential_O::static_classSymbol(),classllvmo__ConstantDataSequential_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ConstantDataSequential_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ConstantDataSequential_O::static_className() % (void*)(llvmo::ConstantDataSequential_O::static_newNil_callback()) ); + classllvmo__ConstantDataSequential_Oval->setInstance_newNil_callback(llvmo::ConstantDataSequential_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ConstantDataSequential_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ConstantDataSequential_O::static_className() ); + llvmo::ConstantDataSequential_O::_nil = nil_for_class; + classllvmo__ConstantDataSequential_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ConstantDataSequential_Oval->setSupportsSlots(llvmo::ConstantDataSequential_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ConstantExpr_Oval]")); + core::BuiltInClass_sp classllvmo__ConstantExpr_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ConstantExpr_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ConstantExpr_Oval,_lisp,llvmo::ConstantExpr_O::static_classSymbol()); + llvmo::ConstantExpr_O::___staticMetaClass = classllvmo__ConstantExpr_Oval; + _lisp->setf_findClass(llvmo::ConstantExpr_O::static_classSymbol(),classllvmo__ConstantExpr_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ConstantExpr_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ConstantExpr_O::static_className() % (void*)(llvmo::ConstantExpr_O::static_newNil_callback()) ); + classllvmo__ConstantExpr_Oval->setInstance_newNil_callback(llvmo::ConstantExpr_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ConstantExpr_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ConstantExpr_O::static_className() ); + llvmo::ConstantExpr_O::_nil = nil_for_class; + classllvmo__ConstantExpr_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ConstantExpr_Oval->setSupportsSlots(llvmo::ConstantExpr_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ConstantFP_Oval]")); + core::BuiltInClass_sp classllvmo__ConstantFP_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ConstantFP_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ConstantFP_Oval,_lisp,llvmo::ConstantFP_O::static_classSymbol()); + llvmo::ConstantFP_O::___staticMetaClass = classllvmo__ConstantFP_Oval; + _lisp->setf_findClass(llvmo::ConstantFP_O::static_classSymbol(),classllvmo__ConstantFP_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ConstantFP_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ConstantFP_O::static_className() % (void*)(llvmo::ConstantFP_O::static_newNil_callback()) ); + classllvmo__ConstantFP_Oval->setInstance_newNil_callback(llvmo::ConstantFP_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ConstantFP_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ConstantFP_O::static_className() ); + llvmo::ConstantFP_O::_nil = nil_for_class; + classllvmo__ConstantFP_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ConstantFP_Oval->setSupportsSlots(llvmo::ConstantFP_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ConstantInt_Oval]")); + core::BuiltInClass_sp classllvmo__ConstantInt_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ConstantInt_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ConstantInt_Oval,_lisp,llvmo::ConstantInt_O::static_classSymbol()); + llvmo::ConstantInt_O::___staticMetaClass = classllvmo__ConstantInt_Oval; + _lisp->setf_findClass(llvmo::ConstantInt_O::static_classSymbol(),classllvmo__ConstantInt_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ConstantInt_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ConstantInt_O::static_className() % (void*)(llvmo::ConstantInt_O::static_newNil_callback()) ); + classllvmo__ConstantInt_Oval->setInstance_newNil_callback(llvmo::ConstantInt_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ConstantInt_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ConstantInt_O::static_className() ); + llvmo::ConstantInt_O::_nil = nil_for_class; + classllvmo__ConstantInt_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ConstantInt_Oval->setSupportsSlots(llvmo::ConstantInt_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ConstantPointerNull_Oval]")); + core::BuiltInClass_sp classllvmo__ConstantPointerNull_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ConstantPointerNull_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ConstantPointerNull_Oval,_lisp,llvmo::ConstantPointerNull_O::static_classSymbol()); + llvmo::ConstantPointerNull_O::___staticMetaClass = classllvmo__ConstantPointerNull_Oval; + _lisp->setf_findClass(llvmo::ConstantPointerNull_O::static_classSymbol(),classllvmo__ConstantPointerNull_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ConstantPointerNull_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ConstantPointerNull_O::static_className() % (void*)(llvmo::ConstantPointerNull_O::static_newNil_callback()) ); + classllvmo__ConstantPointerNull_Oval->setInstance_newNil_callback(llvmo::ConstantPointerNull_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ConstantPointerNull_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ConstantPointerNull_O::static_className() ); + llvmo::ConstantPointerNull_O::_nil = nil_for_class; + classllvmo__ConstantPointerNull_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ConstantPointerNull_Oval->setSupportsSlots(llvmo::ConstantPointerNull_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__DataLayout_Oval]")); + core::BuiltInClass_sp classllvmo__DataLayout_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__DataLayout_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__DataLayout_Oval,_lisp,llvmo::DataLayout_O::static_classSymbol()); + llvmo::DataLayout_O::___staticMetaClass = classllvmo__DataLayout_Oval; + _lisp->setf_findClass(llvmo::DataLayout_O::static_classSymbol(),classllvmo__DataLayout_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::DataLayout_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::DataLayout_O::static_className() % (void*)(llvmo::DataLayout_O::static_newNil_callback()) ); + classllvmo__DataLayout_Oval->setInstance_newNil_callback(llvmo::DataLayout_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::DataLayout_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::DataLayout_O::static_className() ); + llvmo::DataLayout_O::_nil = nil_for_class; + classllvmo__DataLayout_Oval->setInstanceNil(nil_for_class); + } + classllvmo__DataLayout_Oval->setSupportsSlots(llvmo::DataLayout_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__FenceInst_Oval]")); + core::BuiltInClass_sp classllvmo__FenceInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__FenceInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__FenceInst_Oval,_lisp,llvmo::FenceInst_O::static_classSymbol()); + llvmo::FenceInst_O::___staticMetaClass = classllvmo__FenceInst_Oval; + _lisp->setf_findClass(llvmo::FenceInst_O::static_classSymbol(),classllvmo__FenceInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::FenceInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::FenceInst_O::static_className() % (void*)(llvmo::FenceInst_O::static_newNil_callback()) ); + classllvmo__FenceInst_Oval->setInstance_newNil_callback(llvmo::FenceInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::FenceInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::FenceInst_O::static_className() ); + llvmo::FenceInst_O::_nil = nil_for_class; + classllvmo__FenceInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__FenceInst_Oval->setSupportsSlots(llvmo::FenceInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__GlobalValue_Oval]")); + core::BuiltInClass_sp classllvmo__GlobalValue_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__GlobalValue_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__GlobalValue_Oval,_lisp,llvmo::GlobalValue_O::static_classSymbol()); + llvmo::GlobalValue_O::___staticMetaClass = classllvmo__GlobalValue_Oval; + _lisp->setf_findClass(llvmo::GlobalValue_O::static_classSymbol(),classllvmo__GlobalValue_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::GlobalValue_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::GlobalValue_O::static_className() % (void*)(llvmo::GlobalValue_O::static_newNil_callback()) ); + classllvmo__GlobalValue_Oval->setInstance_newNil_callback(llvmo::GlobalValue_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::GlobalValue_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::GlobalValue_O::static_className() ); + llvmo::GlobalValue_O::_nil = nil_for_class; + classllvmo__GlobalValue_Oval->setInstanceNil(nil_for_class); + } + classllvmo__GlobalValue_Oval->setSupportsSlots(llvmo::GlobalValue_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__LandingPadInst_Oval]")); + core::BuiltInClass_sp classllvmo__LandingPadInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__LandingPadInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__LandingPadInst_Oval,_lisp,llvmo::LandingPadInst_O::static_classSymbol()); + llvmo::LandingPadInst_O::___staticMetaClass = classllvmo__LandingPadInst_Oval; + _lisp->setf_findClass(llvmo::LandingPadInst_O::static_classSymbol(),classllvmo__LandingPadInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::LandingPadInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::LandingPadInst_O::static_className() % (void*)(llvmo::LandingPadInst_O::static_newNil_callback()) ); + classllvmo__LandingPadInst_Oval->setInstance_newNil_callback(llvmo::LandingPadInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::LandingPadInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::LandingPadInst_O::static_className() ); + llvmo::LandingPadInst_O::_nil = nil_for_class; + classllvmo__LandingPadInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__LandingPadInst_Oval->setSupportsSlots(llvmo::LandingPadInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__PHINode_Oval]")); + core::BuiltInClass_sp classllvmo__PHINode_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__PHINode_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__PHINode_Oval,_lisp,llvmo::PHINode_O::static_classSymbol()); + llvmo::PHINode_O::___staticMetaClass = classllvmo__PHINode_Oval; + _lisp->setf_findClass(llvmo::PHINode_O::static_classSymbol(),classllvmo__PHINode_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::PHINode_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::PHINode_O::static_className() % (void*)(llvmo::PHINode_O::static_newNil_callback()) ); + classllvmo__PHINode_Oval->setInstance_newNil_callback(llvmo::PHINode_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::PHINode_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::PHINode_O::static_className() ); + llvmo::PHINode_O::_nil = nil_for_class; + classllvmo__PHINode_Oval->setInstanceNil(nil_for_class); + } + classllvmo__PHINode_Oval->setSupportsSlots(llvmo::PHINode_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__PointerType_Oval]")); + core::BuiltInClass_sp classllvmo__PointerType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__PointerType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__PointerType_Oval,_lisp,llvmo::PointerType_O::static_classSymbol()); + llvmo::PointerType_O::___staticMetaClass = classllvmo__PointerType_Oval; + _lisp->setf_findClass(llvmo::PointerType_O::static_classSymbol(),classllvmo__PointerType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::PointerType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::PointerType_O::static_className() % (void*)(llvmo::PointerType_O::static_newNil_callback()) ); + classllvmo__PointerType_Oval->setInstance_newNil_callback(llvmo::PointerType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::PointerType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::PointerType_O::static_className() ); + llvmo::PointerType_O::_nil = nil_for_class; + classllvmo__PointerType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__PointerType_Oval->setSupportsSlots(llvmo::PointerType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__StoreInst_Oval]")); + core::BuiltInClass_sp classllvmo__StoreInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__StoreInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__StoreInst_Oval,_lisp,llvmo::StoreInst_O::static_classSymbol()); + llvmo::StoreInst_O::___staticMetaClass = classllvmo__StoreInst_Oval; + _lisp->setf_findClass(llvmo::StoreInst_O::static_classSymbol(),classllvmo__StoreInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::StoreInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::StoreInst_O::static_className() % (void*)(llvmo::StoreInst_O::static_newNil_callback()) ); + classllvmo__StoreInst_Oval->setInstance_newNil_callback(llvmo::StoreInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::StoreInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::StoreInst_O::static_className() ); + llvmo::StoreInst_O::_nil = nil_for_class; + classllvmo__StoreInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__StoreInst_Oval->setSupportsSlots(llvmo::StoreInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__TerminatorInst_Oval]")); + core::BuiltInClass_sp classllvmo__TerminatorInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__TerminatorInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__TerminatorInst_Oval,_lisp,llvmo::TerminatorInst_O::static_classSymbol()); + llvmo::TerminatorInst_O::___staticMetaClass = classllvmo__TerminatorInst_Oval; + _lisp->setf_findClass(llvmo::TerminatorInst_O::static_classSymbol(),classllvmo__TerminatorInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::TerminatorInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::TerminatorInst_O::static_className() % (void*)(llvmo::TerminatorInst_O::static_newNil_callback()) ); + classllvmo__TerminatorInst_Oval->setInstance_newNil_callback(llvmo::TerminatorInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::TerminatorInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::TerminatorInst_O::static_className() ); + llvmo::TerminatorInst_O::_nil = nil_for_class; + classllvmo__TerminatorInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__TerminatorInst_Oval->setSupportsSlots(llvmo::TerminatorInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__UnaryInstruction_Oval]")); + core::BuiltInClass_sp classllvmo__UnaryInstruction_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__UnaryInstruction_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__UnaryInstruction_Oval,_lisp,llvmo::UnaryInstruction_O::static_classSymbol()); + llvmo::UnaryInstruction_O::___staticMetaClass = classllvmo__UnaryInstruction_Oval; + _lisp->setf_findClass(llvmo::UnaryInstruction_O::static_classSymbol(),classllvmo__UnaryInstruction_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::UnaryInstruction_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::UnaryInstruction_O::static_className() % (void*)(llvmo::UnaryInstruction_O::static_newNil_callback()) ); + classllvmo__UnaryInstruction_Oval->setInstance_newNil_callback(llvmo::UnaryInstruction_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::UnaryInstruction_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::UnaryInstruction_O::static_className() ); + llvmo::UnaryInstruction_O::_nil = nil_for_class; + classllvmo__UnaryInstruction_Oval->setInstanceNil(nil_for_class); + } + classllvmo__UnaryInstruction_Oval->setSupportsSlots(llvmo::UnaryInstruction_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__UndefValue_Oval]")); + core::BuiltInClass_sp classllvmo__UndefValue_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__UndefValue_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__UndefValue_Oval,_lisp,llvmo::UndefValue_O::static_classSymbol()); + llvmo::UndefValue_O::___staticMetaClass = classllvmo__UndefValue_Oval; + _lisp->setf_findClass(llvmo::UndefValue_O::static_classSymbol(),classllvmo__UndefValue_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::UndefValue_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::UndefValue_O::static_className() % (void*)(llvmo::UndefValue_O::static_newNil_callback()) ); + classllvmo__UndefValue_Oval->setInstance_newNil_callback(llvmo::UndefValue_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::UndefValue_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::UndefValue_O::static_className() ); + llvmo::UndefValue_O::_nil = nil_for_class; + classllvmo__UndefValue_Oval->setInstanceNil(nil_for_class); + } + classllvmo__UndefValue_Oval->setSupportsSlots(llvmo::UndefValue_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__VectorType_Oval]")); + core::BuiltInClass_sp classllvmo__VectorType_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__VectorType_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__VectorType_Oval,_lisp,llvmo::VectorType_O::static_classSymbol()); + llvmo::VectorType_O::___staticMetaClass = classllvmo__VectorType_Oval; + _lisp->setf_findClass(llvmo::VectorType_O::static_classSymbol(),classllvmo__VectorType_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::VectorType_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::VectorType_O::static_className() % (void*)(llvmo::VectorType_O::static_newNil_callback()) ); + classllvmo__VectorType_Oval->setInstance_newNil_callback(llvmo::VectorType_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::VectorType_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::VectorType_O::static_className() ); + llvmo::VectorType_O::_nil = nil_for_class; + classllvmo__VectorType_Oval->setInstanceNil(nil_for_class); + } + classllvmo__VectorType_Oval->setSupportsSlots(llvmo::VectorType_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__AllocaInst_Oval]")); + core::BuiltInClass_sp classllvmo__AllocaInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__AllocaInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__AllocaInst_Oval,_lisp,llvmo::AllocaInst_O::static_classSymbol()); + llvmo::AllocaInst_O::___staticMetaClass = classllvmo__AllocaInst_Oval; + _lisp->setf_findClass(llvmo::AllocaInst_O::static_classSymbol(),classllvmo__AllocaInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::AllocaInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::AllocaInst_O::static_className() % (void*)(llvmo::AllocaInst_O::static_newNil_callback()) ); + classllvmo__AllocaInst_Oval->setInstance_newNil_callback(llvmo::AllocaInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::AllocaInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::AllocaInst_O::static_className() ); + llvmo::AllocaInst_O::_nil = nil_for_class; + classllvmo__AllocaInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__AllocaInst_Oval->setSupportsSlots(llvmo::AllocaInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__BranchInst_Oval]")); + core::BuiltInClass_sp classllvmo__BranchInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__BranchInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__BranchInst_Oval,_lisp,llvmo::BranchInst_O::static_classSymbol()); + llvmo::BranchInst_O::___staticMetaClass = classllvmo__BranchInst_Oval; + _lisp->setf_findClass(llvmo::BranchInst_O::static_classSymbol(),classllvmo__BranchInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::BranchInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::BranchInst_O::static_className() % (void*)(llvmo::BranchInst_O::static_newNil_callback()) ); + classllvmo__BranchInst_Oval->setInstance_newNil_callback(llvmo::BranchInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::BranchInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::BranchInst_O::static_className() ); + llvmo::BranchInst_O::_nil = nil_for_class; + classllvmo__BranchInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__BranchInst_Oval->setSupportsSlots(llvmo::BranchInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ConstantDataArray_Oval]")); + core::BuiltInClass_sp classllvmo__ConstantDataArray_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ConstantDataArray_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ConstantDataArray_Oval,_lisp,llvmo::ConstantDataArray_O::static_classSymbol()); + llvmo::ConstantDataArray_O::___staticMetaClass = classllvmo__ConstantDataArray_Oval; + _lisp->setf_findClass(llvmo::ConstantDataArray_O::static_classSymbol(),classllvmo__ConstantDataArray_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ConstantDataArray_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ConstantDataArray_O::static_className() % (void*)(llvmo::ConstantDataArray_O::static_newNil_callback()) ); + classllvmo__ConstantDataArray_Oval->setInstance_newNil_callback(llvmo::ConstantDataArray_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ConstantDataArray_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ConstantDataArray_O::static_className() ); + llvmo::ConstantDataArray_O::_nil = nil_for_class; + classllvmo__ConstantDataArray_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ConstantDataArray_Oval->setSupportsSlots(llvmo::ConstantDataArray_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__Function_Oval]")); + core::BuiltInClass_sp classllvmo__Function_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__Function_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__Function_Oval,_lisp,llvmo::Function_O::static_classSymbol()); + llvmo::Function_O::___staticMetaClass = classllvmo__Function_Oval; + _lisp->setf_findClass(llvmo::Function_O::static_classSymbol(),classllvmo__Function_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::Function_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::Function_O::static_className() % (void*)(llvmo::Function_O::static_newNil_callback()) ); + classllvmo__Function_Oval->setInstance_newNil_callback(llvmo::Function_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::Function_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::Function_O::static_className() ); + llvmo::Function_O::_nil = nil_for_class; + classllvmo__Function_Oval->setInstanceNil(nil_for_class); + } + classllvmo__Function_Oval->setSupportsSlots(llvmo::Function_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__GlobalVariable_Oval]")); + core::BuiltInClass_sp classllvmo__GlobalVariable_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__GlobalVariable_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__GlobalVariable_Oval,_lisp,llvmo::GlobalVariable_O::static_classSymbol()); + llvmo::GlobalVariable_O::___staticMetaClass = classllvmo__GlobalVariable_Oval; + _lisp->setf_findClass(llvmo::GlobalVariable_O::static_classSymbol(),classllvmo__GlobalVariable_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::GlobalVariable_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::GlobalVariable_O::static_className() % (void*)(llvmo::GlobalVariable_O::static_newNil_callback()) ); + classllvmo__GlobalVariable_Oval->setInstance_newNil_callback(llvmo::GlobalVariable_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::GlobalVariable_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::GlobalVariable_O::static_className() ); + llvmo::GlobalVariable_O::_nil = nil_for_class; + classllvmo__GlobalVariable_Oval->setInstanceNil(nil_for_class); + } + classllvmo__GlobalVariable_Oval->setSupportsSlots(llvmo::GlobalVariable_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__IndirectBrInst_Oval]")); + core::BuiltInClass_sp classllvmo__IndirectBrInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__IndirectBrInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__IndirectBrInst_Oval,_lisp,llvmo::IndirectBrInst_O::static_classSymbol()); + llvmo::IndirectBrInst_O::___staticMetaClass = classllvmo__IndirectBrInst_Oval; + _lisp->setf_findClass(llvmo::IndirectBrInst_O::static_classSymbol(),classllvmo__IndirectBrInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::IndirectBrInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::IndirectBrInst_O::static_className() % (void*)(llvmo::IndirectBrInst_O::static_newNil_callback()) ); + classllvmo__IndirectBrInst_Oval->setInstance_newNil_callback(llvmo::IndirectBrInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::IndirectBrInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::IndirectBrInst_O::static_className() ); + llvmo::IndirectBrInst_O::_nil = nil_for_class; + classllvmo__IndirectBrInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__IndirectBrInst_Oval->setSupportsSlots(llvmo::IndirectBrInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__InvokeInst_Oval]")); + core::BuiltInClass_sp classllvmo__InvokeInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__InvokeInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__InvokeInst_Oval,_lisp,llvmo::InvokeInst_O::static_classSymbol()); + llvmo::InvokeInst_O::___staticMetaClass = classllvmo__InvokeInst_Oval; + _lisp->setf_findClass(llvmo::InvokeInst_O::static_classSymbol(),classllvmo__InvokeInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::InvokeInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::InvokeInst_O::static_className() % (void*)(llvmo::InvokeInst_O::static_newNil_callback()) ); + classllvmo__InvokeInst_Oval->setInstance_newNil_callback(llvmo::InvokeInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::InvokeInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::InvokeInst_O::static_className() ); + llvmo::InvokeInst_O::_nil = nil_for_class; + classllvmo__InvokeInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__InvokeInst_Oval->setSupportsSlots(llvmo::InvokeInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__LoadInst_Oval]")); + core::BuiltInClass_sp classllvmo__LoadInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__LoadInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__LoadInst_Oval,_lisp,llvmo::LoadInst_O::static_classSymbol()); + llvmo::LoadInst_O::___staticMetaClass = classllvmo__LoadInst_Oval; + _lisp->setf_findClass(llvmo::LoadInst_O::static_classSymbol(),classllvmo__LoadInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::LoadInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::LoadInst_O::static_className() % (void*)(llvmo::LoadInst_O::static_newNil_callback()) ); + classllvmo__LoadInst_Oval->setInstance_newNil_callback(llvmo::LoadInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::LoadInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::LoadInst_O::static_className() ); + llvmo::LoadInst_O::_nil = nil_for_class; + classllvmo__LoadInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__LoadInst_Oval->setSupportsSlots(llvmo::LoadInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ResumeInst_Oval]")); + core::BuiltInClass_sp classllvmo__ResumeInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ResumeInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ResumeInst_Oval,_lisp,llvmo::ResumeInst_O::static_classSymbol()); + llvmo::ResumeInst_O::___staticMetaClass = classllvmo__ResumeInst_Oval; + _lisp->setf_findClass(llvmo::ResumeInst_O::static_classSymbol(),classllvmo__ResumeInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ResumeInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ResumeInst_O::static_className() % (void*)(llvmo::ResumeInst_O::static_newNil_callback()) ); + classllvmo__ResumeInst_Oval->setInstance_newNil_callback(llvmo::ResumeInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ResumeInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ResumeInst_O::static_className() ); + llvmo::ResumeInst_O::_nil = nil_for_class; + classllvmo__ResumeInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ResumeInst_Oval->setSupportsSlots(llvmo::ResumeInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__ReturnInst_Oval]")); + core::BuiltInClass_sp classllvmo__ReturnInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__ReturnInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__ReturnInst_Oval,_lisp,llvmo::ReturnInst_O::static_classSymbol()); + llvmo::ReturnInst_O::___staticMetaClass = classllvmo__ReturnInst_Oval; + _lisp->setf_findClass(llvmo::ReturnInst_O::static_classSymbol(),classllvmo__ReturnInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::ReturnInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::ReturnInst_O::static_className() % (void*)(llvmo::ReturnInst_O::static_newNil_callback()) ); + classllvmo__ReturnInst_Oval->setInstance_newNil_callback(llvmo::ReturnInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::ReturnInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::ReturnInst_O::static_className() ); + llvmo::ReturnInst_O::_nil = nil_for_class; + classllvmo__ReturnInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__ReturnInst_Oval->setSupportsSlots(llvmo::ReturnInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__SwitchInst_Oval]")); + core::BuiltInClass_sp classllvmo__SwitchInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__SwitchInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__SwitchInst_Oval,_lisp,llvmo::SwitchInst_O::static_classSymbol()); + llvmo::SwitchInst_O::___staticMetaClass = classllvmo__SwitchInst_Oval; + _lisp->setf_findClass(llvmo::SwitchInst_O::static_classSymbol(),classllvmo__SwitchInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::SwitchInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::SwitchInst_O::static_className() % (void*)(llvmo::SwitchInst_O::static_newNil_callback()) ); + classllvmo__SwitchInst_Oval->setInstance_newNil_callback(llvmo::SwitchInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::SwitchInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::SwitchInst_O::static_className() ); + llvmo::SwitchInst_O::_nil = nil_for_class; + classllvmo__SwitchInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__SwitchInst_Oval->setSupportsSlots(llvmo::SwitchInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__UnreachableInst_Oval]")); + core::BuiltInClass_sp classllvmo__UnreachableInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__UnreachableInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__UnreachableInst_Oval,_lisp,llvmo::UnreachableInst_O::static_classSymbol()); + llvmo::UnreachableInst_O::___staticMetaClass = classllvmo__UnreachableInst_Oval; + _lisp->setf_findClass(llvmo::UnreachableInst_O::static_classSymbol(),classllvmo__UnreachableInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::UnreachableInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::UnreachableInst_O::static_className() % (void*)(llvmo::UnreachableInst_O::static_newNil_callback()) ); + classllvmo__UnreachableInst_Oval->setInstance_newNil_callback(llvmo::UnreachableInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::UnreachableInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::UnreachableInst_O::static_className() ); + llvmo::UnreachableInst_O::_nil = nil_for_class; + classllvmo__UnreachableInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__UnreachableInst_Oval->setSupportsSlots(llvmo::UnreachableInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ + + LOG(BF("Creating class[classllvmo__VAArgInst_Oval]")); + core::BuiltInClass_sp classllvmo__VAArgInst_Oval = core::BuiltInClass_O::create(undefinedMetaClass); + classllvmo__VAArgInst_Oval->__setup_stage1_with_sharedPtr_lisp_sid(classllvmo__VAArgInst_Oval,_lisp,llvmo::VAArgInst_O::static_classSymbol()); + llvmo::VAArgInst_O::___staticMetaClass = classllvmo__VAArgInst_Oval; + _lisp->setf_findClass(llvmo::VAArgInst_O::static_classSymbol(),classllvmo__VAArgInst_Oval); + { + AllocatorCallback cb = &new_Nil; + llvmo::VAArgInst_O::___set_static_newNil_callback(cb); + } + LOG(BF("Set _newNil_callback for class(%s) to %X")% llvmo::VAArgInst_O::static_className() % (void*)(llvmo::VAArgInst_O::static_newNil_callback()) ); + classllvmo__VAArgInst_Oval->setInstance_newNil_callback(llvmo::VAArgInst_O::static_newNil_callback()); + { + boost::shared_ptr nil_for_class(new llvmo::VAArgInst_O(undefinedMetaClass)); + nil_for_class->__setWeakThis(nil_for_class); + LOG(BF("Created nil for class[%s]") % llvmo::VAArgInst_O::static_className() ); + llvmo::VAArgInst_O::_nil = nil_for_class; + classllvmo__VAArgInst_Oval->setInstanceNil(nil_for_class); + } + classllvmo__VAArgInst_Oval->setSupportsSlots(llvmo::VAArgInst_O::static_supportsSlots()); + /* ----- the class and its nil are now defined but the _class of these objects is undefined - set in next stage ----- */ +#endif // CREATE_CLASS +#undef CREATE_CLASS +#ifdef DUMP_INFO_CLASS // { +// Depends on nothing + + LOG(BF("--- dump_info --- className: llvmo::APFloat_O @ %X") % classllvmo__APFloat_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::APFloat_O::static_className() % llvmo::APFloat_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::APInt_O @ %X") % classllvmo__APInt_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::APInt_O::static_className() % llvmo::APInt_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Attribute_O @ %X") % classllvmo__Attribute_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Attribute_O::static_className() % llvmo::Attribute_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Builder_O @ %X") % classllvmo__Builder_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Builder_O::static_className() % llvmo::Builder_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::DebugLoc_O @ %X") % classllvmo__DebugLoc_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::DebugLoc_O::static_className() % llvmo::DebugLoc_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::EngineBuilder_O @ %X") % classllvmo__EngineBuilder_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::EngineBuilder_O::static_className() % llvmo::EngineBuilder_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ExecutionEngine_O @ %X") % classllvmo__ExecutionEngine_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ExecutionEngine_O::static_className() % llvmo::ExecutionEngine_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::IRBuilderBase_O @ %X") % classllvmo__IRBuilderBase_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::IRBuilderBase_O::static_className() % llvmo::IRBuilderBase_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::InsertPoint_O @ %X") % classllvmo__InsertPoint_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::InsertPoint_O::static_className() % llvmo::InsertPoint_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::LLVMContext_O @ %X") % classllvmo__LLVMContext_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::LLVMContext_O::static_className() % llvmo::LLVMContext_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Module_O @ %X") % classllvmo__Module_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Module_O::static_className() % llvmo::Module_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::PassManagerBase_O @ %X") % classllvmo__PassManagerBase_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::PassManagerBase_O::static_className() % llvmo::PassManagerBase_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Pass_O @ %X") % classllvmo__Pass_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Pass_O::static_className() % llvmo::Pass_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Type_O @ %X") % classllvmo__Type_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Type_O::static_className() % llvmo::Type_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Value_O @ %X") % classllvmo__Value_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Value_O::static_className() % llvmo::Value_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Argument_O @ %X") % classllvmo__Argument_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Argument_O::static_className() % llvmo::Argument_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::BasicBlock_O @ %X") % classllvmo__BasicBlock_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::BasicBlock_O::static_className() % llvmo::BasicBlock_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::CompositeType_O @ %X") % classllvmo__CompositeType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::CompositeType_O::static_className() % llvmo::CompositeType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::FunctionPassManager_O @ %X") % classllvmo__FunctionPassManager_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::FunctionPassManager_O::static_className() % llvmo::FunctionPassManager_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::FunctionPass_O @ %X") % classllvmo__FunctionPass_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::FunctionPass_O::static_className() % llvmo::FunctionPass_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::FunctionType_O @ %X") % classllvmo__FunctionType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::FunctionType_O::static_className() % llvmo::FunctionType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::IRBuilder_O @ %X") % classllvmo__IRBuilder_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::IRBuilder_O::static_className() % llvmo::IRBuilder_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::IntegerType_O @ %X") % classllvmo__IntegerType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::IntegerType_O::static_className() % llvmo::IntegerType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::MDNode_O @ %X") % classllvmo__MDNode_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::MDNode_O::static_className() % llvmo::MDNode_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::MDString_O @ %X") % classllvmo__MDString_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::MDString_O::static_className() % llvmo::MDString_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ModulePass_O @ %X") % classllvmo__ModulePass_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ModulePass_O::static_className() % llvmo::ModulePass_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::User_O @ %X") % classllvmo__User_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::User_O::static_className() % llvmo::User_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Constant_O @ %X") % classllvmo__Constant_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Constant_O::static_className() % llvmo::Constant_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ImmutablePass_O @ %X") % classllvmo__ImmutablePass_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ImmutablePass_O::static_className() % llvmo::ImmutablePass_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Instruction_O @ %X") % classllvmo__Instruction_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Instruction_O::static_className() % llvmo::Instruction_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::SequentialType_O @ %X") % classllvmo__SequentialType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::SequentialType_O::static_className() % llvmo::SequentialType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::StructType_O @ %X") % classllvmo__StructType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::StructType_O::static_className() % llvmo::StructType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ArrayType_O @ %X") % classllvmo__ArrayType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ArrayType_O::static_className() % llvmo::ArrayType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::AtomicCmpXchgInst_O @ %X") % classllvmo__AtomicCmpXchgInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::AtomicCmpXchgInst_O::static_className() % llvmo::AtomicCmpXchgInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::AtomicRMWInst_O @ %X") % classllvmo__AtomicRMWInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::AtomicRMWInst_O::static_className() % llvmo::AtomicRMWInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::CallInst_O @ %X") % classllvmo__CallInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::CallInst_O::static_className() % llvmo::CallInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ConstantArray_O @ %X") % classllvmo__ConstantArray_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ConstantArray_O::static_className() % llvmo::ConstantArray_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ConstantDataSequential_O @ %X") % classllvmo__ConstantDataSequential_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ConstantDataSequential_O::static_className() % llvmo::ConstantDataSequential_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ConstantExpr_O @ %X") % classllvmo__ConstantExpr_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ConstantExpr_O::static_className() % llvmo::ConstantExpr_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ConstantFP_O @ %X") % classllvmo__ConstantFP_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ConstantFP_O::static_className() % llvmo::ConstantFP_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ConstantInt_O @ %X") % classllvmo__ConstantInt_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ConstantInt_O::static_className() % llvmo::ConstantInt_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ConstantPointerNull_O @ %X") % classllvmo__ConstantPointerNull_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ConstantPointerNull_O::static_className() % llvmo::ConstantPointerNull_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::DataLayout_O @ %X") % classllvmo__DataLayout_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::DataLayout_O::static_className() % llvmo::DataLayout_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::FenceInst_O @ %X") % classllvmo__FenceInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::FenceInst_O::static_className() % llvmo::FenceInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::GlobalValue_O @ %X") % classllvmo__GlobalValue_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::GlobalValue_O::static_className() % llvmo::GlobalValue_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::LandingPadInst_O @ %X") % classllvmo__LandingPadInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::LandingPadInst_O::static_className() % llvmo::LandingPadInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::PHINode_O @ %X") % classllvmo__PHINode_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::PHINode_O::static_className() % llvmo::PHINode_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::PointerType_O @ %X") % classllvmo__PointerType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::PointerType_O::static_className() % llvmo::PointerType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::StoreInst_O @ %X") % classllvmo__StoreInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::StoreInst_O::static_className() % llvmo::StoreInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::TerminatorInst_O @ %X") % classllvmo__TerminatorInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::TerminatorInst_O::static_className() % llvmo::TerminatorInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::UnaryInstruction_O @ %X") % classllvmo__UnaryInstruction_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::UnaryInstruction_O::static_className() % llvmo::UnaryInstruction_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::UndefValue_O @ %X") % classllvmo__UndefValue_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::UndefValue_O::static_className() % llvmo::UndefValue_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::VectorType_O @ %X") % classllvmo__VectorType_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::VectorType_O::static_className() % llvmo::VectorType_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::AllocaInst_O @ %X") % classllvmo__AllocaInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::AllocaInst_O::static_className() % llvmo::AllocaInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::BranchInst_O @ %X") % classllvmo__BranchInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::BranchInst_O::static_className() % llvmo::BranchInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ConstantDataArray_O @ %X") % classllvmo__ConstantDataArray_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ConstantDataArray_O::static_className() % llvmo::ConstantDataArray_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::Function_O @ %X") % classllvmo__Function_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::Function_O::static_className() % llvmo::Function_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::GlobalVariable_O @ %X") % classllvmo__GlobalVariable_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::GlobalVariable_O::static_className() % llvmo::GlobalVariable_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::IndirectBrInst_O @ %X") % classllvmo__IndirectBrInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::IndirectBrInst_O::static_className() % llvmo::IndirectBrInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::InvokeInst_O @ %X") % classllvmo__InvokeInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::InvokeInst_O::static_className() % llvmo::InvokeInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::LoadInst_O @ %X") % classllvmo__LoadInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::LoadInst_O::static_className() % llvmo::LoadInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ResumeInst_O @ %X") % classllvmo__ResumeInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ResumeInst_O::static_className() % llvmo::ResumeInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::ReturnInst_O @ %X") % classllvmo__ReturnInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::ReturnInst_O::static_className() % llvmo::ReturnInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::SwitchInst_O @ %X") % classllvmo__SwitchInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::SwitchInst_O::static_className() % llvmo::SwitchInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::UnreachableInst_O @ %X") % classllvmo__UnreachableInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::UnreachableInst_O::static_className() % llvmo::UnreachableInst_O::static_classSymbol() ); + + LOG(BF("--- dump_info --- className: llvmo::VAArgInst_O @ %X") % classllvmo__VAArgInst_Oval.get()); + LOG(BF("%s::static_classSymbol() = %d") % llvmo::VAArgInst_O::static_className() % llvmo::VAArgInst_O::static_classSymbol() ); +#endif // } DUMP_INFO_CLASS +#undef DUMP_INFO_CLASS +#if defined(DEFINE_BASE_CLASSES) || defined(ALL_STAGES) // { +// Depends on nothing +classllvmo__APFloat_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__APInt_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__Attribute_Oval->addInstanceBaseClass(core::T_O::static_classSymbol()); +classllvmo__Builder_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__DebugLoc_Oval->addInstanceBaseClass(core::T_O::static_classSymbol()); +classllvmo__EngineBuilder_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__ExecutionEngine_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__IRBuilderBase_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__InsertPoint_Oval->addInstanceBaseClass(core::T_O::static_classSymbol()); +classllvmo__LLVMContext_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__Module_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__PassManagerBase_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__Pass_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__Type_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__Value_Oval->addInstanceBaseClass(core::ExternalObject_O::static_classSymbol()); +classllvmo__Argument_Oval->addInstanceBaseClass(llvmo::Value_O::static_classSymbol()); +classllvmo__BasicBlock_Oval->addInstanceBaseClass(llvmo::Value_O::static_classSymbol()); +classllvmo__CompositeType_Oval->addInstanceBaseClass(llvmo::Type_O::static_classSymbol()); +classllvmo__FunctionPassManager_Oval->addInstanceBaseClass(llvmo::PassManagerBase_O::static_classSymbol()); +classllvmo__FunctionPass_Oval->addInstanceBaseClass(llvmo::Pass_O::static_classSymbol()); +classllvmo__FunctionType_Oval->addInstanceBaseClass(llvmo::Type_O::static_classSymbol()); +classllvmo__IRBuilder_Oval->addInstanceBaseClass(llvmo::IRBuilderBase_O::static_classSymbol()); +classllvmo__IntegerType_Oval->addInstanceBaseClass(llvmo::Type_O::static_classSymbol()); +classllvmo__MDNode_Oval->addInstanceBaseClass(llvmo::Value_O::static_classSymbol()); +classllvmo__MDString_Oval->addInstanceBaseClass(llvmo::Value_O::static_classSymbol()); +classllvmo__ModulePass_Oval->addInstanceBaseClass(llvmo::Pass_O::static_classSymbol()); +classllvmo__User_Oval->addInstanceBaseClass(llvmo::Value_O::static_classSymbol()); +classllvmo__Constant_Oval->addInstanceBaseClass(llvmo::User_O::static_classSymbol()); +classllvmo__ImmutablePass_Oval->addInstanceBaseClass(llvmo::ModulePass_O::static_classSymbol()); +classllvmo__Instruction_Oval->addInstanceBaseClass(llvmo::User_O::static_classSymbol()); +classllvmo__SequentialType_Oval->addInstanceBaseClass(llvmo::CompositeType_O::static_classSymbol()); +classllvmo__StructType_Oval->addInstanceBaseClass(llvmo::CompositeType_O::static_classSymbol()); +classllvmo__ArrayType_Oval->addInstanceBaseClass(llvmo::SequentialType_O::static_classSymbol()); +classllvmo__AtomicCmpXchgInst_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__AtomicRMWInst_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__CallInst_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__ConstantArray_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__ConstantDataSequential_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__ConstantExpr_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__ConstantFP_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__ConstantInt_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__ConstantPointerNull_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__DataLayout_Oval->addInstanceBaseClass(llvmo::ImmutablePass_O::static_classSymbol()); +classllvmo__FenceInst_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__GlobalValue_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__LandingPadInst_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__PHINode_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__PointerType_Oval->addInstanceBaseClass(llvmo::SequentialType_O::static_classSymbol()); +classllvmo__StoreInst_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__TerminatorInst_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__UnaryInstruction_Oval->addInstanceBaseClass(llvmo::Instruction_O::static_classSymbol()); +classllvmo__UndefValue_Oval->addInstanceBaseClass(llvmo::Constant_O::static_classSymbol()); +classllvmo__VectorType_Oval->addInstanceBaseClass(llvmo::SequentialType_O::static_classSymbol()); +classllvmo__AllocaInst_Oval->addInstanceBaseClass(llvmo::UnaryInstruction_O::static_classSymbol()); +classllvmo__BranchInst_Oval->addInstanceBaseClass(llvmo::TerminatorInst_O::static_classSymbol()); +classllvmo__ConstantDataArray_Oval->addInstanceBaseClass(llvmo::ConstantDataSequential_O::static_classSymbol()); +classllvmo__Function_Oval->addInstanceBaseClass(llvmo::GlobalValue_O::static_classSymbol()); +classllvmo__GlobalVariable_Oval->addInstanceBaseClass(llvmo::GlobalValue_O::static_classSymbol()); +classllvmo__IndirectBrInst_Oval->addInstanceBaseClass(llvmo::TerminatorInst_O::static_classSymbol()); +classllvmo__InvokeInst_Oval->addInstanceBaseClass(llvmo::TerminatorInst_O::static_classSymbol()); +classllvmo__LoadInst_Oval->addInstanceBaseClass(llvmo::UnaryInstruction_O::static_classSymbol()); +classllvmo__ResumeInst_Oval->addInstanceBaseClass(llvmo::TerminatorInst_O::static_classSymbol()); +classllvmo__ReturnInst_Oval->addInstanceBaseClass(llvmo::TerminatorInst_O::static_classSymbol()); +classllvmo__SwitchInst_Oval->addInstanceBaseClass(llvmo::TerminatorInst_O::static_classSymbol()); +classllvmo__UnreachableInst_Oval->addInstanceBaseClass(llvmo::TerminatorInst_O::static_classSymbol()); +classllvmo__VAArgInst_Oval->addInstanceBaseClass(llvmo::UnaryInstruction_O::static_classSymbol()); +#endif // } DEFINE_BASE_CLASSES +#undef DEFINE_BASE_CLASSES +#if defined(DEFINE_CLASS_NAMES) || defined(ALL_STAGES) // { + core::Package_sp _curPkg = _lisp->findPackage(CurrentPkg); +// Depends on nothing + + classllvmo__APFloat_Oval->__setup_stage3_name(llvmo::APFloat_O::static_classSymbol()); + + classllvmo__APInt_Oval->__setup_stage3_name(llvmo::APInt_O::static_classSymbol()); + + classllvmo__Attribute_Oval->__setup_stage3_name(llvmo::Attribute_O::static_classSymbol()); + + classllvmo__Builder_Oval->__setup_stage3_name(llvmo::Builder_O::static_classSymbol()); + + classllvmo__DebugLoc_Oval->__setup_stage3_name(llvmo::DebugLoc_O::static_classSymbol()); + + classllvmo__EngineBuilder_Oval->__setup_stage3_name(llvmo::EngineBuilder_O::static_classSymbol()); + + classllvmo__ExecutionEngine_Oval->__setup_stage3_name(llvmo::ExecutionEngine_O::static_classSymbol()); + + classllvmo__IRBuilderBase_Oval->__setup_stage3_name(llvmo::IRBuilderBase_O::static_classSymbol()); + + classllvmo__InsertPoint_Oval->__setup_stage3_name(llvmo::InsertPoint_O::static_classSymbol()); + + classllvmo__LLVMContext_Oval->__setup_stage3_name(llvmo::LLVMContext_O::static_classSymbol()); + + classllvmo__Module_Oval->__setup_stage3_name(llvmo::Module_O::static_classSymbol()); + + classllvmo__PassManagerBase_Oval->__setup_stage3_name(llvmo::PassManagerBase_O::static_classSymbol()); + + classllvmo__Pass_Oval->__setup_stage3_name(llvmo::Pass_O::static_classSymbol()); + + classllvmo__Type_Oval->__setup_stage3_name(llvmo::Type_O::static_classSymbol()); + + classllvmo__Value_Oval->__setup_stage3_name(llvmo::Value_O::static_classSymbol()); + + classllvmo__Argument_Oval->__setup_stage3_name(llvmo::Argument_O::static_classSymbol()); + + classllvmo__BasicBlock_Oval->__setup_stage3_name(llvmo::BasicBlock_O::static_classSymbol()); + + classllvmo__CompositeType_Oval->__setup_stage3_name(llvmo::CompositeType_O::static_classSymbol()); + + classllvmo__FunctionPassManager_Oval->__setup_stage3_name(llvmo::FunctionPassManager_O::static_classSymbol()); + + classllvmo__FunctionPass_Oval->__setup_stage3_name(llvmo::FunctionPass_O::static_classSymbol()); + + classllvmo__FunctionType_Oval->__setup_stage3_name(llvmo::FunctionType_O::static_classSymbol()); + + classllvmo__IRBuilder_Oval->__setup_stage3_name(llvmo::IRBuilder_O::static_classSymbol()); + + classllvmo__IntegerType_Oval->__setup_stage3_name(llvmo::IntegerType_O::static_classSymbol()); + + classllvmo__MDNode_Oval->__setup_stage3_name(llvmo::MDNode_O::static_classSymbol()); + + classllvmo__MDString_Oval->__setup_stage3_name(llvmo::MDString_O::static_classSymbol()); + + classllvmo__ModulePass_Oval->__setup_stage3_name(llvmo::ModulePass_O::static_classSymbol()); + + classllvmo__User_Oval->__setup_stage3_name(llvmo::User_O::static_classSymbol()); + + classllvmo__Constant_Oval->__setup_stage3_name(llvmo::Constant_O::static_classSymbol()); + + classllvmo__ImmutablePass_Oval->__setup_stage3_name(llvmo::ImmutablePass_O::static_classSymbol()); + + classllvmo__Instruction_Oval->__setup_stage3_name(llvmo::Instruction_O::static_classSymbol()); + + classllvmo__SequentialType_Oval->__setup_stage3_name(llvmo::SequentialType_O::static_classSymbol()); + + classllvmo__StructType_Oval->__setup_stage3_name(llvmo::StructType_O::static_classSymbol()); + + classllvmo__ArrayType_Oval->__setup_stage3_name(llvmo::ArrayType_O::static_classSymbol()); + + classllvmo__AtomicCmpXchgInst_Oval->__setup_stage3_name(llvmo::AtomicCmpXchgInst_O::static_classSymbol()); + + classllvmo__AtomicRMWInst_Oval->__setup_stage3_name(llvmo::AtomicRMWInst_O::static_classSymbol()); + + classllvmo__CallInst_Oval->__setup_stage3_name(llvmo::CallInst_O::static_classSymbol()); + + classllvmo__ConstantArray_Oval->__setup_stage3_name(llvmo::ConstantArray_O::static_classSymbol()); + + classllvmo__ConstantDataSequential_Oval->__setup_stage3_name(llvmo::ConstantDataSequential_O::static_classSymbol()); + + classllvmo__ConstantExpr_Oval->__setup_stage3_name(llvmo::ConstantExpr_O::static_classSymbol()); + + classllvmo__ConstantFP_Oval->__setup_stage3_name(llvmo::ConstantFP_O::static_classSymbol()); + + classllvmo__ConstantInt_Oval->__setup_stage3_name(llvmo::ConstantInt_O::static_classSymbol()); + + classllvmo__ConstantPointerNull_Oval->__setup_stage3_name(llvmo::ConstantPointerNull_O::static_classSymbol()); + + classllvmo__DataLayout_Oval->__setup_stage3_name(llvmo::DataLayout_O::static_classSymbol()); + + classllvmo__FenceInst_Oval->__setup_stage3_name(llvmo::FenceInst_O::static_classSymbol()); + + classllvmo__GlobalValue_Oval->__setup_stage3_name(llvmo::GlobalValue_O::static_classSymbol()); + + classllvmo__LandingPadInst_Oval->__setup_stage3_name(llvmo::LandingPadInst_O::static_classSymbol()); + + classllvmo__PHINode_Oval->__setup_stage3_name(llvmo::PHINode_O::static_classSymbol()); + + classllvmo__PointerType_Oval->__setup_stage3_name(llvmo::PointerType_O::static_classSymbol()); + + classllvmo__StoreInst_Oval->__setup_stage3_name(llvmo::StoreInst_O::static_classSymbol()); + + classllvmo__TerminatorInst_Oval->__setup_stage3_name(llvmo::TerminatorInst_O::static_classSymbol()); + + classllvmo__UnaryInstruction_Oval->__setup_stage3_name(llvmo::UnaryInstruction_O::static_classSymbol()); + + classllvmo__UndefValue_Oval->__setup_stage3_name(llvmo::UndefValue_O::static_classSymbol()); + + classllvmo__VectorType_Oval->__setup_stage3_name(llvmo::VectorType_O::static_classSymbol()); + + classllvmo__AllocaInst_Oval->__setup_stage3_name(llvmo::AllocaInst_O::static_classSymbol()); + + classllvmo__BranchInst_Oval->__setup_stage3_name(llvmo::BranchInst_O::static_classSymbol()); + + classllvmo__ConstantDataArray_Oval->__setup_stage3_name(llvmo::ConstantDataArray_O::static_classSymbol()); + + classllvmo__Function_Oval->__setup_stage3_name(llvmo::Function_O::static_classSymbol()); + + classllvmo__GlobalVariable_Oval->__setup_stage3_name(llvmo::GlobalVariable_O::static_classSymbol()); + + classllvmo__IndirectBrInst_Oval->__setup_stage3_name(llvmo::IndirectBrInst_O::static_classSymbol()); + + classllvmo__InvokeInst_Oval->__setup_stage3_name(llvmo::InvokeInst_O::static_classSymbol()); + + classllvmo__LoadInst_Oval->__setup_stage3_name(llvmo::LoadInst_O::static_classSymbol()); + + classllvmo__ResumeInst_Oval->__setup_stage3_name(llvmo::ResumeInst_O::static_classSymbol()); + + classllvmo__ReturnInst_Oval->__setup_stage3_name(llvmo::ReturnInst_O::static_classSymbol()); + + classllvmo__SwitchInst_Oval->__setup_stage3_name(llvmo::SwitchInst_O::static_classSymbol()); + + classllvmo__UnreachableInst_Oval->__setup_stage3_name(llvmo::UnreachableInst_O::static_classSymbol()); + + classllvmo__VAArgInst_Oval->__setup_stage3_name(llvmo::VAArgInst_O::static_classSymbol()); +#endif // } DEFINE_CLASS_NAMES +#undef DEFINE_CLASS_NAMES +#if defined(EXPOSE_TO_CANDO) || defined(ALL_STAGES) +#ifdef Use_LlvmoPkg +extern void Register_llvmo__APFloat_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__APFloat_O"); + Register_llvmo__APFloat_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__APInt_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__APInt_O"); + Register_llvmo__APInt_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Attribute_O(core::Lisp_sp); // base(s): set(['core::T_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Attribute_O"); + Register_llvmo__Attribute_O(_lisp); // base(s): set(['core::T_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Builder_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Builder_O"); + Register_llvmo__Builder_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__DebugLoc_O(core::Lisp_sp); // base(s): set(['core::T_O']) +{_BLOCK_TRACE("initializing Register_llvmo__DebugLoc_O"); + Register_llvmo__DebugLoc_O(_lisp); // base(s): set(['core::T_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__EngineBuilder_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__EngineBuilder_O"); + Register_llvmo__EngineBuilder_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ExecutionEngine_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ExecutionEngine_O"); + Register_llvmo__ExecutionEngine_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__IRBuilderBase_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__IRBuilderBase_O"); + Register_llvmo__IRBuilderBase_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__InsertPoint_O(core::Lisp_sp); // base(s): set(['core::T_O']) +{_BLOCK_TRACE("initializing Register_llvmo__InsertPoint_O"); + Register_llvmo__InsertPoint_O(_lisp); // base(s): set(['core::T_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__LLVMContext_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__LLVMContext_O"); + Register_llvmo__LLVMContext_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Module_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Module_O"); + Register_llvmo__Module_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__PassManagerBase_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__PassManagerBase_O"); + Register_llvmo__PassManagerBase_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Pass_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Pass_O"); + Register_llvmo__Pass_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Type_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Type_O"); + Register_llvmo__Type_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Value_O(core::Lisp_sp); // base(s): set(['core::ExternalObject_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Value_O"); + Register_llvmo__Value_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Argument_O(core::Lisp_sp); // base(s): set(['llvmo::Value_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Argument_O"); + Register_llvmo__Argument_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__BasicBlock_O(core::Lisp_sp); // base(s): set(['llvmo::Value_O']) +{_BLOCK_TRACE("initializing Register_llvmo__BasicBlock_O"); + Register_llvmo__BasicBlock_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__CompositeType_O(core::Lisp_sp); // base(s): set(['llvmo::Type_O']) +{_BLOCK_TRACE("initializing Register_llvmo__CompositeType_O"); + Register_llvmo__CompositeType_O(_lisp); // base(s): set(['llvmo::Type_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__FunctionPassManager_O(core::Lisp_sp); // base(s): set(['llvmo::PassManagerBase_O']) +{_BLOCK_TRACE("initializing Register_llvmo__FunctionPassManager_O"); + Register_llvmo__FunctionPassManager_O(_lisp); // base(s): set(['llvmo::PassManagerBase_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__FunctionPass_O(core::Lisp_sp); // base(s): set(['llvmo::Pass_O']) +{_BLOCK_TRACE("initializing Register_llvmo__FunctionPass_O"); + Register_llvmo__FunctionPass_O(_lisp); // base(s): set(['llvmo::Pass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__FunctionType_O(core::Lisp_sp); // base(s): set(['llvmo::Type_O']) +{_BLOCK_TRACE("initializing Register_llvmo__FunctionType_O"); + Register_llvmo__FunctionType_O(_lisp); // base(s): set(['llvmo::Type_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__IRBuilder_O(core::Lisp_sp); // base(s): set(['llvmo::IRBuilderBase_O']) +{_BLOCK_TRACE("initializing Register_llvmo__IRBuilder_O"); + Register_llvmo__IRBuilder_O(_lisp); // base(s): set(['llvmo::IRBuilderBase_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__IntegerType_O(core::Lisp_sp); // base(s): set(['llvmo::Type_O']) +{_BLOCK_TRACE("initializing Register_llvmo__IntegerType_O"); + Register_llvmo__IntegerType_O(_lisp); // base(s): set(['llvmo::Type_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__MDNode_O(core::Lisp_sp); // base(s): set(['llvmo::Value_O']) +{_BLOCK_TRACE("initializing Register_llvmo__MDNode_O"); + Register_llvmo__MDNode_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__MDString_O(core::Lisp_sp); // base(s): set(['llvmo::Value_O']) +{_BLOCK_TRACE("initializing Register_llvmo__MDString_O"); + Register_llvmo__MDString_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ModulePass_O(core::Lisp_sp); // base(s): set(['llvmo::Pass_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ModulePass_O"); + Register_llvmo__ModulePass_O(_lisp); // base(s): set(['llvmo::Pass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__User_O(core::Lisp_sp); // base(s): set(['llvmo::Value_O']) +{_BLOCK_TRACE("initializing Register_llvmo__User_O"); + Register_llvmo__User_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Constant_O(core::Lisp_sp); // base(s): set(['llvmo::User_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Constant_O"); + Register_llvmo__Constant_O(_lisp); // base(s): set(['llvmo::User_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ImmutablePass_O(core::Lisp_sp); // base(s): set(['llvmo::ModulePass_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ImmutablePass_O"); + Register_llvmo__ImmutablePass_O(_lisp); // base(s): set(['llvmo::ModulePass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Instruction_O(core::Lisp_sp); // base(s): set(['llvmo::User_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Instruction_O"); + Register_llvmo__Instruction_O(_lisp); // base(s): set(['llvmo::User_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__SequentialType_O(core::Lisp_sp); // base(s): set(['llvmo::CompositeType_O']) +{_BLOCK_TRACE("initializing Register_llvmo__SequentialType_O"); + Register_llvmo__SequentialType_O(_lisp); // base(s): set(['llvmo::CompositeType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__StructType_O(core::Lisp_sp); // base(s): set(['llvmo::CompositeType_O']) +{_BLOCK_TRACE("initializing Register_llvmo__StructType_O"); + Register_llvmo__StructType_O(_lisp); // base(s): set(['llvmo::CompositeType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ArrayType_O(core::Lisp_sp); // base(s): set(['llvmo::SequentialType_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ArrayType_O"); + Register_llvmo__ArrayType_O(_lisp); // base(s): set(['llvmo::SequentialType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__AtomicCmpXchgInst_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__AtomicCmpXchgInst_O"); + Register_llvmo__AtomicCmpXchgInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__AtomicRMWInst_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__AtomicRMWInst_O"); + Register_llvmo__AtomicRMWInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__CallInst_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__CallInst_O"); + Register_llvmo__CallInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ConstantArray_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ConstantArray_O"); + Register_llvmo__ConstantArray_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ConstantDataSequential_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ConstantDataSequential_O"); + Register_llvmo__ConstantDataSequential_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ConstantExpr_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ConstantExpr_O"); + Register_llvmo__ConstantExpr_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ConstantFP_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ConstantFP_O"); + Register_llvmo__ConstantFP_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ConstantInt_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ConstantInt_O"); + Register_llvmo__ConstantInt_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ConstantPointerNull_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ConstantPointerNull_O"); + Register_llvmo__ConstantPointerNull_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__DataLayout_O(core::Lisp_sp); // base(s): set(['llvmo::ImmutablePass_O']) +{_BLOCK_TRACE("initializing Register_llvmo__DataLayout_O"); + Register_llvmo__DataLayout_O(_lisp); // base(s): set(['llvmo::ImmutablePass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__FenceInst_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__FenceInst_O"); + Register_llvmo__FenceInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__GlobalValue_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__GlobalValue_O"); + Register_llvmo__GlobalValue_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__LandingPadInst_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__LandingPadInst_O"); + Register_llvmo__LandingPadInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__PHINode_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__PHINode_O"); + Register_llvmo__PHINode_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__PointerType_O(core::Lisp_sp); // base(s): set(['llvmo::SequentialType_O']) +{_BLOCK_TRACE("initializing Register_llvmo__PointerType_O"); + Register_llvmo__PointerType_O(_lisp); // base(s): set(['llvmo::SequentialType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__StoreInst_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__StoreInst_O"); + Register_llvmo__StoreInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__TerminatorInst_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__TerminatorInst_O"); + Register_llvmo__TerminatorInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__UnaryInstruction_O(core::Lisp_sp); // base(s): set(['llvmo::Instruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__UnaryInstruction_O"); + Register_llvmo__UnaryInstruction_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__UndefValue_O(core::Lisp_sp); // base(s): set(['llvmo::Constant_O']) +{_BLOCK_TRACE("initializing Register_llvmo__UndefValue_O"); + Register_llvmo__UndefValue_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__VectorType_O(core::Lisp_sp); // base(s): set(['llvmo::SequentialType_O']) +{_BLOCK_TRACE("initializing Register_llvmo__VectorType_O"); + Register_llvmo__VectorType_O(_lisp); // base(s): set(['llvmo::SequentialType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__AllocaInst_O(core::Lisp_sp); // base(s): set(['llvmo::UnaryInstruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__AllocaInst_O"); + Register_llvmo__AllocaInst_O(_lisp); // base(s): set(['llvmo::UnaryInstruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__BranchInst_O(core::Lisp_sp); // base(s): set(['llvmo::TerminatorInst_O']) +{_BLOCK_TRACE("initializing Register_llvmo__BranchInst_O"); + Register_llvmo__BranchInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ConstantDataArray_O(core::Lisp_sp); // base(s): set(['llvmo::ConstantDataSequential_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ConstantDataArray_O"); + Register_llvmo__ConstantDataArray_O(_lisp); // base(s): set(['llvmo::ConstantDataSequential_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__Function_O(core::Lisp_sp); // base(s): set(['llvmo::GlobalValue_O']) +{_BLOCK_TRACE("initializing Register_llvmo__Function_O"); + Register_llvmo__Function_O(_lisp); // base(s): set(['llvmo::GlobalValue_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__GlobalVariable_O(core::Lisp_sp); // base(s): set(['llvmo::GlobalValue_O']) +{_BLOCK_TRACE("initializing Register_llvmo__GlobalVariable_O"); + Register_llvmo__GlobalVariable_O(_lisp); // base(s): set(['llvmo::GlobalValue_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__IndirectBrInst_O(core::Lisp_sp); // base(s): set(['llvmo::TerminatorInst_O']) +{_BLOCK_TRACE("initializing Register_llvmo__IndirectBrInst_O"); + Register_llvmo__IndirectBrInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__InvokeInst_O(core::Lisp_sp); // base(s): set(['llvmo::TerminatorInst_O']) +{_BLOCK_TRACE("initializing Register_llvmo__InvokeInst_O"); + Register_llvmo__InvokeInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__LoadInst_O(core::Lisp_sp); // base(s): set(['llvmo::UnaryInstruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__LoadInst_O"); + Register_llvmo__LoadInst_O(_lisp); // base(s): set(['llvmo::UnaryInstruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ResumeInst_O(core::Lisp_sp); // base(s): set(['llvmo::TerminatorInst_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ResumeInst_O"); + Register_llvmo__ResumeInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__ReturnInst_O(core::Lisp_sp); // base(s): set(['llvmo::TerminatorInst_O']) +{_BLOCK_TRACE("initializing Register_llvmo__ReturnInst_O"); + Register_llvmo__ReturnInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__SwitchInst_O(core::Lisp_sp); // base(s): set(['llvmo::TerminatorInst_O']) +{_BLOCK_TRACE("initializing Register_llvmo__SwitchInst_O"); + Register_llvmo__SwitchInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__UnreachableInst_O(core::Lisp_sp); // base(s): set(['llvmo::TerminatorInst_O']) +{_BLOCK_TRACE("initializing Register_llvmo__UnreachableInst_O"); + Register_llvmo__UnreachableInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Register_llvmo__VAArgInst_O(core::Lisp_sp); // base(s): set(['llvmo::UnaryInstruction_O']) +{_BLOCK_TRACE("initializing Register_llvmo__VAArgInst_O"); + Register_llvmo__VAArgInst_O(_lisp); // base(s): set(['llvmo::UnaryInstruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#endif // EXPOSE_TO_CANDO +#undef EXPOSE_TO_CANDO +#ifdef EXPOSE_TO_PYTHON +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__APFloat_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__APFloat_O"); + Call_exposePython_llvmo__APFloat_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__APInt_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__APInt_O"); + Call_exposePython_llvmo__APInt_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Attribute_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Attribute_O"); + Call_exposePython_llvmo__Attribute_O(_lisp); // base(s): set(['core::T_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Builder_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Builder_O"); + Call_exposePython_llvmo__Builder_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__DebugLoc_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__DebugLoc_O"); + Call_exposePython_llvmo__DebugLoc_O(_lisp); // base(s): set(['core::T_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__EngineBuilder_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__EngineBuilder_O"); + Call_exposePython_llvmo__EngineBuilder_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ExecutionEngine_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ExecutionEngine_O"); + Call_exposePython_llvmo__ExecutionEngine_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__IRBuilderBase_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__IRBuilderBase_O"); + Call_exposePython_llvmo__IRBuilderBase_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__InsertPoint_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__InsertPoint_O"); + Call_exposePython_llvmo__InsertPoint_O(_lisp); // base(s): set(['core::T_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__LLVMContext_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__LLVMContext_O"); + Call_exposePython_llvmo__LLVMContext_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Module_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Module_O"); + Call_exposePython_llvmo__Module_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__PassManagerBase_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__PassManagerBase_O"); + Call_exposePython_llvmo__PassManagerBase_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Pass_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Pass_O"); + Call_exposePython_llvmo__Pass_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Type_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Type_O"); + Call_exposePython_llvmo__Type_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Value_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Value_O"); + Call_exposePython_llvmo__Value_O(_lisp); // base(s): set(['core::ExternalObject_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Argument_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Argument_O"); + Call_exposePython_llvmo__Argument_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__BasicBlock_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__BasicBlock_O"); + Call_exposePython_llvmo__BasicBlock_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__CompositeType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__CompositeType_O"); + Call_exposePython_llvmo__CompositeType_O(_lisp); // base(s): set(['llvmo::Type_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__FunctionPassManager_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__FunctionPassManager_O"); + Call_exposePython_llvmo__FunctionPassManager_O(_lisp); // base(s): set(['llvmo::PassManagerBase_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__FunctionPass_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__FunctionPass_O"); + Call_exposePython_llvmo__FunctionPass_O(_lisp); // base(s): set(['llvmo::Pass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__FunctionType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__FunctionType_O"); + Call_exposePython_llvmo__FunctionType_O(_lisp); // base(s): set(['llvmo::Type_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__IRBuilder_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__IRBuilder_O"); + Call_exposePython_llvmo__IRBuilder_O(_lisp); // base(s): set(['llvmo::IRBuilderBase_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__IntegerType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__IntegerType_O"); + Call_exposePython_llvmo__IntegerType_O(_lisp); // base(s): set(['llvmo::Type_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__MDNode_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__MDNode_O"); + Call_exposePython_llvmo__MDNode_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__MDString_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__MDString_O"); + Call_exposePython_llvmo__MDString_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ModulePass_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ModulePass_O"); + Call_exposePython_llvmo__ModulePass_O(_lisp); // base(s): set(['llvmo::Pass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__User_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__User_O"); + Call_exposePython_llvmo__User_O(_lisp); // base(s): set(['llvmo::Value_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Constant_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Constant_O"); + Call_exposePython_llvmo__Constant_O(_lisp); // base(s): set(['llvmo::User_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ImmutablePass_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ImmutablePass_O"); + Call_exposePython_llvmo__ImmutablePass_O(_lisp); // base(s): set(['llvmo::ModulePass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Instruction_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Instruction_O"); + Call_exposePython_llvmo__Instruction_O(_lisp); // base(s): set(['llvmo::User_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__SequentialType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__SequentialType_O"); + Call_exposePython_llvmo__SequentialType_O(_lisp); // base(s): set(['llvmo::CompositeType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__StructType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__StructType_O"); + Call_exposePython_llvmo__StructType_O(_lisp); // base(s): set(['llvmo::CompositeType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ArrayType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ArrayType_O"); + Call_exposePython_llvmo__ArrayType_O(_lisp); // base(s): set(['llvmo::SequentialType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__AtomicCmpXchgInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__AtomicCmpXchgInst_O"); + Call_exposePython_llvmo__AtomicCmpXchgInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__AtomicRMWInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__AtomicRMWInst_O"); + Call_exposePython_llvmo__AtomicRMWInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__CallInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__CallInst_O"); + Call_exposePython_llvmo__CallInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ConstantArray_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ConstantArray_O"); + Call_exposePython_llvmo__ConstantArray_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ConstantDataSequential_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ConstantDataSequential_O"); + Call_exposePython_llvmo__ConstantDataSequential_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ConstantExpr_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ConstantExpr_O"); + Call_exposePython_llvmo__ConstantExpr_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ConstantFP_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ConstantFP_O"); + Call_exposePython_llvmo__ConstantFP_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ConstantInt_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ConstantInt_O"); + Call_exposePython_llvmo__ConstantInt_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ConstantPointerNull_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ConstantPointerNull_O"); + Call_exposePython_llvmo__ConstantPointerNull_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__DataLayout_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__DataLayout_O"); + Call_exposePython_llvmo__DataLayout_O(_lisp); // base(s): set(['llvmo::ImmutablePass_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__FenceInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__FenceInst_O"); + Call_exposePython_llvmo__FenceInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__GlobalValue_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__GlobalValue_O"); + Call_exposePython_llvmo__GlobalValue_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__LandingPadInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__LandingPadInst_O"); + Call_exposePython_llvmo__LandingPadInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__PHINode_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__PHINode_O"); + Call_exposePython_llvmo__PHINode_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__PointerType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__PointerType_O"); + Call_exposePython_llvmo__PointerType_O(_lisp); // base(s): set(['llvmo::SequentialType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__StoreInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__StoreInst_O"); + Call_exposePython_llvmo__StoreInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__TerminatorInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__TerminatorInst_O"); + Call_exposePython_llvmo__TerminatorInst_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__UnaryInstruction_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__UnaryInstruction_O"); + Call_exposePython_llvmo__UnaryInstruction_O(_lisp); // base(s): set(['llvmo::Instruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__UndefValue_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__UndefValue_O"); + Call_exposePython_llvmo__UndefValue_O(_lisp); // base(s): set(['llvmo::Constant_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__VectorType_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__VectorType_O"); + Call_exposePython_llvmo__VectorType_O(_lisp); // base(s): set(['llvmo::SequentialType_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__AllocaInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__AllocaInst_O"); + Call_exposePython_llvmo__AllocaInst_O(_lisp); // base(s): set(['llvmo::UnaryInstruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__BranchInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__BranchInst_O"); + Call_exposePython_llvmo__BranchInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ConstantDataArray_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ConstantDataArray_O"); + Call_exposePython_llvmo__ConstantDataArray_O(_lisp); // base(s): set(['llvmo::ConstantDataSequential_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__Function_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__Function_O"); + Call_exposePython_llvmo__Function_O(_lisp); // base(s): set(['llvmo::GlobalValue_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__GlobalVariable_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__GlobalVariable_O"); + Call_exposePython_llvmo__GlobalVariable_O(_lisp); // base(s): set(['llvmo::GlobalValue_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__IndirectBrInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__IndirectBrInst_O"); + Call_exposePython_llvmo__IndirectBrInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__InvokeInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__InvokeInst_O"); + Call_exposePython_llvmo__InvokeInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__LoadInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__LoadInst_O"); + Call_exposePython_llvmo__LoadInst_O(_lisp); // base(s): set(['llvmo::UnaryInstruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ResumeInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ResumeInst_O"); + Call_exposePython_llvmo__ResumeInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__ReturnInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__ReturnInst_O"); + Call_exposePython_llvmo__ReturnInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__SwitchInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__SwitchInst_O"); + Call_exposePython_llvmo__SwitchInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__UnreachableInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__UnreachableInst_O"); + Call_exposePython_llvmo__UnreachableInst_O(_lisp); // base(s): set(['llvmo::TerminatorInst_O']) +} +#endif // ifdef Use_LlvmoPkg +#ifdef Use_LlvmoPkg +extern void Call_exposePython_llvmo__VAArgInst_O(::core::Lisp_sp lisp); +{_DBG("exposing to python: llvmo__VAArgInst_O"); + Call_exposePython_llvmo__VAArgInst_O(_lisp); // base(s): set(['llvmo::UnaryInstruction_O']) +} +#endif // ifdef Use_LlvmoPkg +#endif // EXPOSE_TO_PYTHON +#undef EXPOSE_TO_PYTHON +#undef ALL_STAGES diff --git a/samples/C++/instances.inc b/samples/C++/instances.inc new file mode 100644 index 00000000..37591cb5 --- /dev/null +++ b/samples/C++/instances.inc @@ -0,0 +1,34 @@ +#include "QPBO.h" + +#ifdef _MSC_VER +#pragma warning(disable: 4661) +#endif + +// Instantiations + +template class QPBO; +template class QPBO; +template class QPBO; + +template <> + inline void QPBO::get_type_information(char*& type_name, char*& type_format) +{ + type_name = "int"; + type_format = "d"; +} + +template <> + inline void QPBO::get_type_information(char*& type_name, char*& type_format) +{ + type_name = "float"; + type_format = "f"; +} + +template <> + inline void QPBO::get_type_information(char*& type_name, char*& type_format) +{ + type_name = "double"; + type_format = "Lf"; +} + + diff --git a/samples/C/filenames/script b/samples/C/filenames/script new file mode 100755 index 00000000..53006397 --- /dev/null +++ b/samples/C/filenames/script @@ -0,0 +1,2310 @@ +#!/usr/bin/tcc -run -lm +// +// ZyklonB scripting plugin, using a custom stack-based language +// +// Copyright 2014 Přemysl Janouch. All rights reserved. +// See the file LICENSE for licensing information. +// +// Just compile this file as usual (sans #!) if you don't feel like using TCC. +// It is a very basic and portable C99 application. It's not supposed to be +// very sophisticated, for it'd get extremely big. +// +// The main influences of the language were Factor and Joy, stripped of all +// even barely complex stuff. In its current state, it's only really useful as +// a calculator but it's got great potential for extending. +// +// If you don't like something, just change it; this is just an experiment. +// +// NOTE: it is relatively easy to abuse. Be careful. +// + +#define _XOPEN_SOURCE 500 + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define ADDRESS_SPACE_LIMIT (100 * 1024 * 1024) +#include + +#if defined __GNUC__ +#define ATTRIBUTE_PRINTF(x, y) __attribute__ ((format (printf, x, y))) +#else // ! __GNUC__ +#define ATTRIBUTE_PRINTF(x, y) +#endif // ! __GNUC__ + +#define N_ELEMENTS(a) (sizeof (a) / sizeof ((a)[0])) + +// --- Utilities --------------------------------------------------------------- + +static char *strdup_printf (const char *format, ...) ATTRIBUTE_PRINTF (1, 2); + +static char * +strdup_vprintf (const char *format, va_list ap) +{ + va_list aq; + va_copy (aq, ap); + int size = vsnprintf (NULL, 0, format, aq); + va_end (aq); + if (size < 0) + return NULL; + + char buf[size + 1]; + size = vsnprintf (buf, sizeof buf, format, ap); + if (size < 0) + return NULL; + + return strdup (buf); +} + +static char * +strdup_printf (const char *format, ...) +{ + va_list ap; + va_start (ap, format); + char *result = strdup_vprintf (format, ap); + va_end (ap); + return result; +} + +// --- Generic buffer ---------------------------------------------------------- + +struct buffer +{ + char *s; ///< Buffer data + size_t alloc; ///< Number of bytes allocated + size_t len; ///< Number of bytes used + bool memory_failure; ///< Memory allocation failed +}; + +#define BUFFER_INITIALIZER { NULL, 0, 0, false } + +static bool +buffer_append (struct buffer *self, const void *s, size_t n) +{ + if (self->memory_failure) + return false; + + if (!self->s) + self->s = malloc (self->alloc = 8); + while (self->len + n > self->alloc) + self->s = realloc (self->s, self->alloc <<= 1); + + if (!self->s) + { + self->memory_failure = true; + return false; + } + + memcpy (self->s + self->len, s, n); + self->len += n; + return true; +} + +inline static bool +buffer_append_c (struct buffer *self, char c) +{ + return buffer_append (self, &c, 1); +} + +// --- Data types -------------------------------------------------------------- + +enum item_type +{ + ITEM_STRING, + ITEM_WORD, + ITEM_INTEGER, + ITEM_FLOAT, + ITEM_LIST +}; + +struct item +{ +#define ITEM_HEADER \ + enum item_type type; /**< The type of this object */ \ + struct item *next; /**< Next item on the list/stack */ + + ITEM_HEADER +}; + +struct item_string +{ + ITEM_HEADER + size_t len; ///< Length of the string (sans '\0') + char value[]; ///< The null-terminated string value +}; + +#define get_string(item) \ + (assert ((item)->type == ITEM_STRING), \ + ((struct item_string *)(item))->value) + +/// It looks like a string but it doesn't quack like a string +#define item_word item_string + +#define get_word(item) \ + (assert ((item)->type == ITEM_WORD), \ + ((struct item_word *)(item))->value) + +struct item_integer +{ + ITEM_HEADER + long long value; ///< The integer value +}; + +#define get_integer(item) \ + (assert ((item)->type == ITEM_INTEGER), \ + ((struct item_integer *)(item))->value) + +struct item_float +{ + ITEM_HEADER + long double value; ///< The floating point value +}; + +#define get_float(item) \ + (assert ((item)->type == ITEM_FLOAT), \ + ((struct item_float *)(item))->value) + +struct item_list +{ + ITEM_HEADER + struct item *head; ///< The head of the list +}; + +#define get_list(item) \ + (assert ((item)->type == ITEM_LIST), \ + ((struct item_list *)(item))->head) + +#define set_list(item, head_) \ + (assert ((item)->type == ITEM_LIST), \ + item_free_list (((struct item_list *)(item))->head), \ + ((struct item_list *)(item))->head = (head_)) + +const char * +item_type_to_str (enum item_type type) +{ + switch (type) + { + case ITEM_STRING: return "string"; + case ITEM_WORD: return "word"; + case ITEM_INTEGER: return "integer"; + case ITEM_FLOAT: return "float"; + case ITEM_LIST: return "list"; + } + abort (); +} + +// --- Item management --------------------------------------------------------- + +static void item_free_list (struct item *); +static struct item *new_clone_list (const struct item *); + +static void +item_free (struct item *item) +{ + if (item->type == ITEM_LIST) + item_free_list (get_list (item)); + free (item); +} + +static void +item_free_list (struct item *item) +{ + while (item) + { + struct item *link = item; + item = item->next; + item_free (link); + } +} + +static struct item * +new_clone (const struct item *item) +{ + size_t size; + switch (item->type) + { + case ITEM_STRING: + case ITEM_WORD: + { + const struct item_string *x = (const struct item_string *) item; + size = sizeof *x + x->len + 1; + break; + } + case ITEM_INTEGER: size = sizeof (struct item_integer); break; + case ITEM_FLOAT: size = sizeof (struct item_float); break; + case ITEM_LIST: size = sizeof (struct item_list); break; + } + + struct item *clone = malloc (size); + if (!clone) + return NULL; + + memcpy (clone, item, size); + if (item->type == ITEM_LIST) + { + struct item_list *x = (struct item_list *) clone; + if (x->head && !(x->head = new_clone_list (x->head))) + { + free (clone); + return NULL; + } + } + clone->next = NULL; + return clone; +} + +static struct item * +new_clone_list (const struct item *item) +{ + struct item *head = NULL, *clone; + for (struct item **out = &head; item; item = item->next) + { + if (!(clone = *out = new_clone (item))) + { + item_free_list (head); + return NULL; + } + clone->next = NULL; + out = &clone->next; + } + return head; +} + +static struct item * +new_string (const char *s, ssize_t len) +{ + if (len < 0) + len = strlen (s); + + struct item_string *item = calloc (1, sizeof *item + len + 1); + if (!item) + return NULL; + + item->type = ITEM_STRING; + item->len = len; + memcpy (item->value, s, len); + item->value[len] = '\0'; + return (struct item *) item; +} + +static struct item * +new_word (const char *s, ssize_t len) +{ + struct item *item = new_string (s, len); + if (!item) + return NULL; + + item->type = ITEM_WORD; + return item; +} + +static struct item * +new_integer (long long value) +{ + struct item_integer *item = calloc (1, sizeof *item); + if (!item) + return NULL; + + item->type = ITEM_INTEGER; + item->value = value; + return (struct item *) item; +} + +static struct item * +new_float (long double value) +{ + struct item_float *item = calloc (1, sizeof *item); + if (!item) + return NULL; + + item->type = ITEM_FLOAT; + item->value = value; + return (struct item *) item; +} + +static struct item * +new_list (struct item *head) +{ + struct item_list *item = calloc (1, sizeof *item); + if (!item) + return NULL; + + item->type = ITEM_LIST; + item->head = head; + return (struct item *) item; +} + +// --- Parsing ----------------------------------------------------------------- + +#define PARSE_ERROR_TABLE(XX) \ + XX( OK, NULL ) \ + XX( EOF, "unexpected end of input" ) \ + XX( INVALID_HEXA_ESCAPE, "invalid hexadecimal escape sequence" ) \ + XX( INVALID_ESCAPE, "unrecognized escape sequence" ) \ + XX( MEMORY, "memory allocation failure" ) \ + XX( FLOAT_RANGE, "floating point value out of range" ) \ + XX( INTEGER_RANGE, "integer out of range" ) \ + XX( INVALID_INPUT, "invalid input" ) \ + XX( UNEXPECTED_INPUT, "unexpected input" ) + +enum tokenizer_error +{ +#define XX(x, y) PARSE_ERROR_ ## x, + PARSE_ERROR_TABLE (XX) +#undef XX + PARSE_ERROR_COUNT +}; + +struct tokenizer +{ + const char *cursor; + enum tokenizer_error error; +}; + +static bool +decode_hexa_escape (struct tokenizer *self, struct buffer *buf) +{ + int i; + char c, code = 0; + + for (i = 0; i < 2; i++) + { + c = tolower (*self->cursor); + if (c >= '0' && c <= '9') + code = (code << 4) | (c - '0'); + else if (c >= 'a' && c <= 'f') + code = (code << 4) | (c - 'a' + 10); + else + break; + + self->cursor++; + } + + if (!i) + return false; + + buffer_append_c (buf, code); + return true; +} + +static bool +decode_octal_escape (struct tokenizer *self, struct buffer *buf) +{ + int i; + char c, code = 0; + + for (i = 0; i < 3; i++) + { + c = *self->cursor; + if (c < '0' || c > '7') + break; + + code = (code << 3) | (c - '0'); + self->cursor++; + } + + if (!i) + return false; + + buffer_append_c (buf, code); + return true; +} + +static bool +decode_escape_sequence (struct tokenizer *self, struct buffer *buf) +{ + // Support some basic escape sequences from the C language + char c; + switch ((c = *self->cursor)) + { + case '\0': + self->error = PARSE_ERROR_EOF; + return false; + case 'x': + case 'X': + self->cursor++; + if (decode_hexa_escape (self, buf)) + return true; + + self->error = PARSE_ERROR_INVALID_HEXA_ESCAPE; + return false; + default: + if (decode_octal_escape (self, buf)) + return true; + + self->cursor++; + const char *from = "abfnrtv\"\\", *to = "\a\b\f\n\r\t\v\"\\", *x; + if ((x = strchr (from, c))) + { + buffer_append_c (buf, to[x - from]); + return true; + } + + self->error = PARSE_ERROR_INVALID_ESCAPE; + return false; + } +} + +static struct item * +parse_string (struct tokenizer *self) +{ + struct buffer buf = BUFFER_INITIALIZER; + struct item *item = NULL; + char c; + + while (true) + switch ((c = *self->cursor++)) + { + case '\0': + self->cursor--; + self->error = PARSE_ERROR_EOF; + goto end; + case '"': + if (buf.memory_failure + || !(item = new_string (buf.s, buf.len))) + self->error = PARSE_ERROR_MEMORY; + goto end; + case '\\': + if (decode_escape_sequence (self, &buf)) + break; + goto end; + default: + buffer_append_c (&buf, c); + } + +end: + free (buf.s); + return item; +} + +static struct item * +try_parse_number (struct tokenizer *self) +{ + // These two standard library functions can digest a lot of various inputs, + // including NaN and +/- infinity. That may get a bit confusing. + char *float_end; + errno = 0; + long double float_value = strtold (self->cursor, &float_end); + int float_errno = errno; + + char *int_end; + errno = 0; + long long int_value = strtoll (self->cursor, &int_end, 10); + int int_errno = errno; + + // If they both fail, then this is most probably not a number. + if (float_end == int_end && float_end == self->cursor) + return NULL; + + // Only use the floating point result if it parses more characters: + struct item *item; + if (float_end > int_end) + { + if (float_errno == ERANGE) + { + self->error = PARSE_ERROR_FLOAT_RANGE; + return NULL; + } + self->cursor = float_end; + if (!(item = new_float (float_value))) + self->error = PARSE_ERROR_MEMORY; + return item; + } + else + { + if (int_errno == ERANGE) + { + self->error = PARSE_ERROR_INTEGER_RANGE; + return NULL; + } + self->cursor = int_end; + if (!(item = new_integer (int_value))) + self->error = PARSE_ERROR_MEMORY; + return item; + } +} + +static struct item * +parse_word (struct tokenizer *self) +{ + struct buffer buf = BUFFER_INITIALIZER; + struct item *item = NULL; + char c; + + // Here we accept almost anything that doesn't break the grammar + while (!strchr (" []\"", (c = *self->cursor++)) && (unsigned char) c > ' ') + buffer_append_c (&buf, c); + self->cursor--; + + if (buf.memory_failure) + self->error = PARSE_ERROR_MEMORY; + else if (!buf.len) + self->error = PARSE_ERROR_INVALID_INPUT; + else if (!(item = new_word (buf.s, buf.len))) + self->error = PARSE_ERROR_MEMORY; + + free (buf.s); + return item; +} + +static struct item *parse_item_list (struct tokenizer *); + +static struct item * +parse_list (struct tokenizer *self) +{ + struct item *list = parse_item_list (self); + if (self->error) + { + assert (list == NULL); + return NULL; + } + if (!*self->cursor) + { + self->error = PARSE_ERROR_EOF; + item_free_list (list); + return NULL; + } + assert (*self->cursor == ']'); + self->cursor++; + return new_list (list); +} + +static struct item * +parse_item (struct tokenizer *self) +{ + char c; + switch ((c = *self->cursor++)) + { + case '[': return parse_list (self); + case '"': return parse_string (self); + default:; + } + + self->cursor--; + struct item *item = try_parse_number (self); + if (!item && !self->error) + item = parse_word (self); + return item; +} + +static struct item * +parse_item_list (struct tokenizer *self) +{ + struct item *head = NULL; + struct item **tail = &head; + + char c; + bool expected = true; + while ((c = *self->cursor) && c != ']') + { + if (isspace (c)) + { + self->cursor++; + expected = true; + continue; + } + else if (!expected) + { + self->error = PARSE_ERROR_UNEXPECTED_INPUT; + goto fail; + } + + if (!(*tail = parse_item (self))) + goto fail; + tail = &(*tail)->next; + expected = false; + } + return head; + +fail: + item_free_list (head); + return NULL; +} + +static struct item * +parse (const char *s, const char **error) +{ + struct tokenizer self = { .cursor = s, .error = PARSE_ERROR_OK }; + struct item *list = parse_item_list (&self); + if (!self.error && *self.cursor != '\0') + { + self.error = PARSE_ERROR_UNEXPECTED_INPUT; + item_free_list (list); + list = NULL; + } + +#define XX(x, y) y, + static const char *strings[PARSE_ERROR_COUNT] = + { PARSE_ERROR_TABLE (XX) }; +#undef XX + + static char error_buf[128]; + if (self.error && error) + { + snprintf (error_buf, sizeof error_buf, "at character %d: %s", + (int) (self.cursor - s) + 1, strings[self.error]); + *error = error_buf; + } + return list; +} + +// --- Runtime ----------------------------------------------------------------- + +// TODO: try to think of a _simple_ way to do preemptive multitasking + +struct context +{ + struct item *stack; ///< The current top of the stack + size_t stack_size; ///< Number of items on the stack + + size_t reduction_count; ///< # of function calls so far + size_t reduction_limit; ///< The hard limit on function calls + + char *error; ///< Error information + bool error_is_fatal; ///< Whether the error can be catched + bool memory_failure; ///< Memory allocation failure + + void *user_data; ///< User data +}; + +/// Internal handler for a function +typedef bool (*handler_fn) (struct context *); + +struct fn +{ + struct fn *next; ///< The next link in the chain + + handler_fn handler; ///< Internal C handler, or NULL + struct item *script; ///< Alternatively runtime code + char name[]; ///< The name of the function +}; + +struct fn *g_functions; ///< Maps words to functions + +static void +context_init (struct context *ctx) +{ + ctx->stack = NULL; + ctx->stack_size = 0; + + ctx->reduction_count = 0; + ctx->reduction_limit = 2000; + + ctx->error = NULL; + ctx->error_is_fatal = false; + ctx->memory_failure = false; + + ctx->user_data = NULL; +} + +static void +context_free (struct context *ctx) +{ + item_free_list (ctx->stack); + ctx->stack = NULL; + + free (ctx->error); + ctx->error = NULL; +} + +static bool +set_error (struct context *ctx, const char *format, ...) +{ + free (ctx->error); + + va_list ap; + va_start (ap, format); + ctx->error = strdup_vprintf (format, ap); + va_end (ap); + + if (!ctx->error) + ctx->memory_failure = true; + return false; +} + +static bool +push (struct context *ctx, struct item *item) +{ + // The `item' is typically a result from new_(), thus when it is null, + // that function must have failed. This is a shortcut for convenience. + if (!item) + { + ctx->memory_failure = true; + return false; + } + + assert (item->next == NULL); + item->next = ctx->stack; + ctx->stack = item; + ctx->stack_size++; + return true; +} + +static bool +bump_reductions (struct context *ctx) +{ + if (++ctx->reduction_count >= ctx->reduction_limit) + { + ctx->error_is_fatal = true; + return set_error (ctx, "reduction limit reached"); + } + return true; +} + +static bool execute (struct context *, struct item *); + +static bool +call_function (struct context *ctx, const char *name) +{ + struct fn *iter; + for (iter = g_functions; iter; iter = iter->next) + if (!strcmp (name, iter->name)) + goto found; + return set_error (ctx, "unknown function: %s", name); + +found: + if (!bump_reductions (ctx)) + return false; + + if (iter->handler + ? iter->handler (ctx) + : execute (ctx, iter->script)) + return true; + + // In this case, `error' is NULL + if (ctx->memory_failure) + return false; + + // This creates some form of a stack trace + char *tmp = ctx->error; + ctx->error = NULL; + set_error (ctx, "%s -> %s", name, tmp); + free (tmp); + return false; +} + +static void +free_function (struct fn *fn) +{ + item_free_list (fn->script); + free (fn); +} + +static void +unregister_function (const char *name) +{ + for (struct fn **iter = &g_functions; *iter; iter = &(*iter)->next) + if (!strcmp ((*iter)->name, name)) + { + struct fn *tmp = *iter; + *iter = tmp->next; + free_function (tmp); + break; + } +} + +static struct fn * +prepend_new_fn (const char *name) +{ + struct fn *fn = calloc (1, sizeof *fn + strlen (name) + 1); + if (!fn) + return NULL; + + strcpy (fn->name, name); + fn->next = g_functions; + return g_functions = fn; +} + +static bool +register_handler (const char *name, handler_fn handler) +{ + unregister_function (name); + struct fn *fn = prepend_new_fn (name); + if (!fn) + return false; + fn->handler = handler; + return true; +} + +static bool +register_script (const char *name, struct item *script) +{ + unregister_function (name); + struct fn *fn = prepend_new_fn (name); + if (!fn) + return false; + fn->script = script; + return true; +} + +static bool +execute (struct context *ctx, struct item *script) +{ + for (; script; script = script->next) + { + if (script->type != ITEM_WORD) + { + if (!bump_reductions (ctx) + || !push (ctx, new_clone (script))) + return false; + } + else if (!call_function (ctx, get_word (script))) + return false; + } + return true; +} + +// --- Runtime library --------------------------------------------------------- + +#define defn(name) static bool name (struct context *ctx) + +#define check_stack(n) \ + if (ctx->stack_size < n) { \ + set_error (ctx, "stack underflow"); \ + return 0; \ + } + +inline static bool +check_stack_safe (struct context *ctx, size_t n) +{ + check_stack (n); + return true; +} + +static bool +check_type (struct context *ctx, const void *item_, enum item_type type) +{ + const struct item *item = item_; + if (item->type == type) + return true; + + return set_error (ctx, "invalid type: expected `%s', got `%s'", + item_type_to_str (type), item_type_to_str (item->type)); +} + +static struct item * +pop (struct context *ctx) +{ + check_stack (1); + struct item *top = ctx->stack; + ctx->stack = top->next; + top->next = NULL; + ctx->stack_size--; + return top; +} + +// - - Types - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +#define defn_is_type(name, item_type) \ + defn (fn_is_##name) { \ + check_stack (1); \ + struct item *top = pop (ctx); \ + push (ctx, new_integer (top->type == (item_type))); \ + item_free (top); \ + return true; \ + } + +defn_is_type (string, ITEM_STRING) +defn_is_type (word, ITEM_WORD) +defn_is_type (integer, ITEM_INTEGER) +defn_is_type (float, ITEM_FLOAT) +defn_is_type (list, ITEM_LIST) + +defn (fn_to_string) +{ + check_stack (1); + struct item *item = pop (ctx); + char *value; + + switch (item->type) + { + case ITEM_WORD: + item->type = ITEM_STRING; + case ITEM_STRING: + return push (ctx, item); + + case ITEM_FLOAT: + value = strdup_printf ("%Lf", get_float (item)); + break; + case ITEM_INTEGER: + value = strdup_printf ("%lld", get_integer (item)); + break; + + default: + set_error (ctx, "cannot convert `%s' to `%s'", + item_type_to_str (item->type), item_type_to_str (ITEM_STRING)); + item_free (item); + return false; + } + + item_free (item); + if (!value) + { + ctx->memory_failure = true; + return false; + } + + item = new_string (value, -1); + free (value); + return push (ctx, item); +} + +defn (fn_to_integer) +{ + check_stack (1); + struct item *item = pop (ctx); + long long value; + + switch (item->type) + { + case ITEM_INTEGER: + return push (ctx, item); + case ITEM_FLOAT: + value = get_float (item); + break; + + case ITEM_STRING: + { + char *end; + const char *s = get_string (item); + value = strtoll (s, &end, 10); + if (end != s && *s == '\0') + break; + + item_free (item); + return set_error (ctx, "integer conversion error"); + } + + default: + set_error (ctx, "cannot convert `%s' to `%s'", + item_type_to_str (item->type), item_type_to_str (ITEM_INTEGER)); + item_free (item); + return false; + } + + item_free (item); + return push (ctx, new_integer (value)); +} + +defn (fn_to_float) +{ + check_stack (1); + struct item *item = pop (ctx); + long double value; + + switch (item->type) + { + case ITEM_FLOAT: + return push (ctx, item); + case ITEM_INTEGER: + value = get_integer (item); + break; + + case ITEM_STRING: + { + char *end; + const char *s = get_string (item); + value = strtold (s, &end); + if (end != s && *s == '\0') + break; + + item_free (item); + return set_error (ctx, "float conversion error"); + } + + default: + set_error (ctx, "cannot convert `%s' to `%s'", + item_type_to_str (item->type), item_type_to_str (ITEM_FLOAT)); + item_free (item); + return false; + } + + item_free (item); + return push (ctx, new_float (value)); +} + +// - - Miscellaneous - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +defn (fn_length) +{ + check_stack (1); + struct item *item = pop (ctx); + bool success = true; + switch (item->type) + { + case ITEM_STRING: + success = push (ctx, new_integer (((struct item_string *) item)->len)); + break; + case ITEM_LIST: + { + long long length = 0; + struct item *iter; + for (iter = get_list (item); iter; iter = iter->next) + length++; + success = push (ctx, new_integer (length)); + break; + } + default: + success = set_error (ctx, "invalid type"); + } + item_free (item); + return success; +} + +// - - Stack operations - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +defn (fn_dup) +{ + check_stack (1); + return push (ctx, new_clone (ctx->stack)); +} + +defn (fn_drop) +{ + check_stack (1); + item_free (pop (ctx)); + return true; +} + +defn (fn_swap) +{ + check_stack (2); + struct item *second = pop (ctx), *first = pop (ctx); + return push (ctx, second) && push (ctx, first); +} + +defn (fn_call) +{ + check_stack (1); + struct item *script = pop (ctx); + bool success = check_type (ctx, script, ITEM_LIST) + && execute (ctx, get_list (script)); + item_free (script); + return success; +} + +defn (fn_dip) +{ + check_stack (2); + struct item *script = pop (ctx); + struct item *item = pop (ctx); + bool success = check_type (ctx, script, ITEM_LIST) + && execute (ctx, get_list (script)); + item_free (script); + if (!success) + { + item_free (item); + return false; + } + return push (ctx, item); +} + +defn (fn_unit) +{ + check_stack (1); + struct item *item = pop (ctx); + return push (ctx, new_list (item)); +} + +defn (fn_cons) +{ + check_stack (2); + struct item *list = pop (ctx); + struct item *item = pop (ctx); + if (!check_type (ctx, list, ITEM_LIST)) + { + item_free (list); + item_free (item); + return false; + } + item->next = get_list (list); + ((struct item_list *) list)->head = item; + return push (ctx, list); +} + +defn (fn_cat) +{ + check_stack (2); + struct item *scnd = pop (ctx); + struct item *frst = pop (ctx); + if (!check_type (ctx, frst, ITEM_LIST) + || !check_type (ctx, scnd, ITEM_LIST)) + { + item_free (frst); + item_free (scnd); + return false; + } + + // XXX: we shouldn't have to do this in O(n) + struct item **tail = &((struct item_list *) frst)->head; + while (*tail) + tail = &(*tail)->next; + *tail = get_list (scnd); + + ((struct item_list *) scnd)->head = NULL; + item_free (scnd); + return push (ctx, frst); +} + +defn (fn_uncons) +{ + check_stack (1); + struct item *list = pop (ctx); + if (!check_type (ctx, list, ITEM_LIST)) + goto fail; + struct item *first = get_list (list); + if (!first) + { + set_error (ctx, "list is empty"); + goto fail; + } + ((struct item_list *) list)->head = first->next; + first->next = NULL; + return push (ctx, first) && push (ctx, list); +fail: + item_free (list); + return false; +} + +// - - Logical - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +static bool +to_boolean (struct context *ctx, struct item *item, bool *ok) +{ + switch (item->type) + { + case ITEM_STRING: + return *get_string (item) != '\0'; + case ITEM_INTEGER: + return get_integer (item) != 0; + case ITEM_FLOAT: + return get_float (item) != 0.; + default: + return (*ok = set_error (ctx, "cannot convert `%s' to boolean", + item_type_to_str (item->type))); + } +} + +defn (fn_not) +{ + check_stack (1); + struct item *item = pop (ctx); + bool ok = true; + bool result = !to_boolean (ctx, item, &ok); + item_free (item); + return ok && push (ctx, new_integer (result)); +} + +defn (fn_and) +{ + check_stack (2); + struct item *op1 = pop (ctx); + struct item *op2 = pop (ctx); + bool ok = true; + bool result = to_boolean (ctx, op1, &ok) && to_boolean (ctx, op2, &ok); + item_free (op1); + item_free (op2); + return ok && push (ctx, new_integer (result)); +} + +defn (fn_or) +{ + check_stack (2); + struct item *op1 = pop (ctx); + struct item *op2 = pop (ctx); + bool ok = true; + bool result = to_boolean (ctx, op1, &ok) + || !ok || to_boolean (ctx, op2, &ok); + item_free (op1); + item_free (op2); + return ok && push (ctx, new_integer (result)); +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +defn (fn_if) +{ + check_stack (3); + struct item *else_ = pop (ctx); + struct item *then_ = pop (ctx); + struct item *cond_ = pop (ctx); + + bool ok = true; + bool condition = to_boolean (ctx, cond_, &ok); + item_free (cond_); + + bool success = false; + if (ok + && check_type (ctx, then_, ITEM_LIST) + && check_type (ctx, else_, ITEM_LIST)) + success = execute (ctx, condition + ? get_list (then_) + : get_list (else_)); + + item_free (then_); + item_free (else_); + return success; +} + +defn (fn_try) +{ + check_stack (2); + struct item *catch = pop (ctx); + struct item *try = pop (ctx); + bool success = false; + if (!check_type (ctx, try, ITEM_LIST) + || !check_type (ctx, catch, ITEM_LIST)) + goto fail; + + if (!execute (ctx, get_list (try))) + { + if (ctx->memory_failure || ctx->error_is_fatal) + goto fail; + + success = push (ctx, new_string (ctx->error, -1)); + free (ctx->error); + ctx->error = NULL; + + if (success) + success = execute (ctx, get_list (catch)); + } + +fail: + item_free (try); + item_free (catch); + return success; +} + +defn (fn_map) +{ + check_stack (2); + struct item *fn = pop (ctx); + struct item *list = pop (ctx); + if (!check_type (ctx, fn, ITEM_LIST) + || !check_type (ctx, list, ITEM_LIST)) + { + item_free (fn); + item_free (list); + return false; + } + + bool success = false; + struct item *result = NULL, **tail = &result; + for (struct item *iter = get_list (list); iter; iter = iter->next) + { + if (!push (ctx, new_clone (iter)) + || !execute (ctx, get_list (fn)) + || !check_stack_safe (ctx, 1)) + goto fail; + + struct item *item = pop (ctx); + *tail = item; + tail = &item->next; + } + success = true; + +fail: + set_list (list, result); + item_free (fn); + if (!success) + { + item_free (list); + return false; + } + return push (ctx, list); +} + +defn (fn_filter) +{ + check_stack (2); + struct item *fn = pop (ctx); + struct item *list = pop (ctx); + if (!check_type (ctx, fn, ITEM_LIST) + || !check_type (ctx, list, ITEM_LIST)) + { + item_free (fn); + item_free (list); + return false; + } + + bool success = false; + bool ok = true; + struct item *result = NULL, **tail = &result; + for (struct item *iter = get_list (list); iter; iter = iter->next) + { + if (!push (ctx, new_clone (iter)) + || !execute (ctx, get_list (fn)) + || !check_stack_safe (ctx, 1)) + goto fail; + + struct item *item = pop (ctx); + bool survived = to_boolean (ctx, item, &ok); + item_free (item); + if (!ok) + goto fail; + if (!survived) + continue; + + if (!(item = new_clone (iter))) + goto fail; + *tail = item; + tail = &item->next; + } + success = true; + +fail: + set_list (list, result); + item_free (fn); + if (!success) + { + item_free (list); + return false; + } + return push (ctx, list); +} + +defn (fn_fold) +{ + check_stack (3); + struct item *op = pop (ctx); + struct item *null = pop (ctx); + struct item *list = pop (ctx); + bool success = false; + if (!check_type (ctx, op, ITEM_LIST) + || !check_type (ctx, list, ITEM_LIST)) + { + item_free (null); + goto fail; + } + + push (ctx, null); + for (struct item *iter = get_list (list); iter; iter = iter->next) + if (!push (ctx, new_clone (iter)) + || !execute (ctx, get_list (op))) + goto fail; + success = true; + +fail: + item_free (op); + item_free (list); + return success; +} + +defn (fn_each) +{ + check_stack (2); + struct item *op = pop (ctx); + struct item *list = pop (ctx); + bool success = false; + if (!check_type (ctx, op, ITEM_LIST) + || !check_type (ctx, list, ITEM_LIST)) + goto fail; + + for (struct item *iter = get_list (list); iter; iter = iter->next) + if (!push (ctx, new_clone (iter)) + || !execute (ctx, get_list (op))) + goto fail; + success = true; + +fail: + item_free (op); + item_free (list); + return success; +} + +// - - Arithmetic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// XXX: why not a `struct item_string *` argument? +static bool +push_repeated_string (struct context *ctx, struct item *op1, struct item *op2) +{ + struct item_string *string = (struct item_string *) op1; + struct item_integer *repeat = (struct item_integer *) op2; + assert (string->type == ITEM_STRING); + assert (repeat->type == ITEM_INTEGER); + + if (repeat->value < 0) + return set_error (ctx, "cannot multiply a string by a negative value"); + + char *buf = NULL; + size_t len = string->len * repeat->value; + if (len < string->len && repeat->value != 0) + goto allocation_fail; + + buf = malloc (len); + if (!buf) + goto allocation_fail; + + for (size_t i = 0; i < len; i += string->len) + memcpy (buf + i, string->value, string->len); + struct item *item = new_string (buf, len); + free (buf); + return push (ctx, item); + +allocation_fail: + ctx->memory_failure = true; + return false; +} + +defn (fn_times) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + ok = push (ctx, new_integer (get_integer (op1) * get_integer (op2))); + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_integer (op1) * get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_float (op1) * get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_float (get_float (op1) * get_integer (op2))); + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_STRING) + ok = push_repeated_string (ctx, op2, op1); + else if (op1->type == ITEM_STRING && op2->type == ITEM_INTEGER) + ok = push_repeated_string (ctx, op1, op2); + else + ok = set_error (ctx, "cannot multiply `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +defn (fn_pow) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + // TODO: implement this properly, outputting an integer + ok = push (ctx, new_float (powl (get_integer (op1), get_integer (op2)))); + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (powl (get_integer (op1), get_float (op2)))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (powl (get_float (op1), get_float (op2)))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_float (powl (get_float (op1), get_integer (op2)))); + else + ok = set_error (ctx, "cannot exponentiate `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +defn (fn_div) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + { + if (get_integer (op2) == 0) + ok = set_error (ctx, "division by zero"); + else + ok = push (ctx, new_integer (get_integer (op1) / get_integer (op2))); + } + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_integer (op1) / get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_float (op1) / get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_float (get_float (op1) / get_integer (op2))); + else + ok = set_error (ctx, "cannot divide `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +defn (fn_mod) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + { + if (get_integer (op2) == 0) + ok = set_error (ctx, "division by zero"); + else + ok = push (ctx, new_integer (get_integer (op1) % get_integer (op2))); + } + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (fmodl (get_integer (op1), get_float (op2)))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (fmodl (get_float (op1), get_float (op2)))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_float (fmodl (get_float (op1), get_integer (op2)))); + else + ok = set_error (ctx, "cannot divide `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +static bool +push_concatenated_string (struct context *ctx, + struct item *op1, struct item *op2) +{ + struct item_string *s1 = (struct item_string *) op1; + struct item_string *s2 = (struct item_string *) op2; + assert (s1->type == ITEM_STRING); + assert (s2->type == ITEM_STRING); + + char *buf = NULL; + size_t len = s1->len + s2->len; + if (len < s1->len || len < s2->len) + goto allocation_fail; + + buf = malloc (len); + if (!buf) + goto allocation_fail; + + memcpy (buf, s1->value, s1->len); + memcpy (buf + s1->len, s2->value, s2->len); + struct item *item = new_string (buf, len); + free (buf); + return push (ctx, item); + +allocation_fail: + ctx->memory_failure = true; + return false; + +} + +defn (fn_plus) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + ok = push (ctx, new_integer (get_integer (op1) + get_integer (op2))); + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_integer (op1) + get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_float (op1) + get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_float (get_float (op1) + get_integer (op2))); + else if (op1->type == ITEM_STRING && op2->type == ITEM_STRING) + ok = push_concatenated_string (ctx, op1, op2); + else + ok = set_error (ctx, "cannot add `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +defn (fn_minus) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + ok = push (ctx, new_integer (get_integer (op1) - get_integer (op2))); + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_integer (op1) - get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_float (get_float (op1) - get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_float (get_float (op1) - get_integer (op2))); + else + ok = set_error (ctx, "cannot subtract `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +// - - Comparison - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +static int +compare_strings (struct item_string *s1, struct item_string *s2) +{ + // XXX: not entirely correct wrt. null bytes + size_t len = (s1->len < s2->len ? s1->len : s2->len) + 1; + return memcmp (s1->value, s2->value, len); +} + +static bool compare_lists (struct item *, struct item *); + +static bool +compare_list_items (struct item *op1, struct item *op2) +{ + if (op1->type != op2->type) + return false; + + switch (op1->type) + { + case ITEM_STRING: + case ITEM_WORD: + return !compare_strings ((struct item_string *) op1, + (struct item_string *) op2); + case ITEM_FLOAT: + return get_float (op1) == get_float (op2); + case ITEM_INTEGER: + return get_integer (op1) == get_integer (op2); + case ITEM_LIST: + return compare_lists (get_list (op1), get_list (op2)); + } + abort (); +} + +static bool +compare_lists (struct item *op1, struct item *op2) +{ + while (op1 && op2) + { + if (!compare_list_items (op1, op2)) + return false; + + op1 = op1->next; + op2 = op2->next; + } + return !op1 && !op2; +} + +defn (fn_eq) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + ok = push (ctx, new_integer (get_integer (op1) == get_integer (op2))); + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_integer (get_integer (op1) == get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_integer (get_float (op1) == get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_integer (get_float (op1) == get_integer (op2))); + else if (op1->type == ITEM_LIST && op2->type == ITEM_LIST) + ok = push (ctx, new_integer (compare_lists + (get_list (op1), get_list (op2)))); + else if (op1->type == ITEM_STRING && op2->type == ITEM_STRING) + ok = push (ctx, new_integer (compare_strings + ((struct item_string *)(op1), (struct item_string *)(op2)) == 0)); + else + ok = set_error (ctx, "cannot compare `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +defn (fn_lt) +{ + check_stack (2); + struct item *op2 = pop (ctx); + struct item *op1 = pop (ctx); + + bool ok; + if (op1->type == ITEM_INTEGER && op2->type == ITEM_INTEGER) + ok = push (ctx, new_integer (get_integer (op1) < get_integer (op2))); + else if (op1->type == ITEM_INTEGER && op2->type == ITEM_FLOAT) + ok = push (ctx, new_integer (get_integer (op1) < get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_FLOAT) + ok = push (ctx, new_integer (get_float (op1) < get_float (op2))); + else if (op1->type == ITEM_FLOAT && op2->type == ITEM_INTEGER) + ok = push (ctx, new_integer (get_float (op1) < get_integer (op2))); + else if (op1->type == ITEM_STRING && op2->type == ITEM_STRING) + ok = push (ctx, new_integer (compare_strings + ((struct item_string *)(op1), (struct item_string *)(op2)) < 0)); + else + ok = set_error (ctx, "cannot compare `%s' and `%s'", + item_type_to_str (op1->type), item_type_to_str (op2->type)); + + item_free (op1); + item_free (op2); + return ok; +} + +// - - Utilities - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +defn (fn_rand) +{ + return push (ctx, new_float ((long double) rand () + / ((long double) RAND_MAX + 1))); +} + +defn (fn_time) +{ + return push (ctx, new_integer (time (NULL))); +} + +// XXX: this is a bit too constrained; combines strftime() with gmtime() +defn (fn_strftime) +{ + check_stack (2); + struct item *format = pop (ctx); + struct item *time_ = pop (ctx); + bool success = false; + if (!check_type (ctx, time_, ITEM_INTEGER) + || !check_type (ctx, format, ITEM_STRING)) + goto fail; + + if (get_integer (time_) < 0) + { + set_error (ctx, "invalid time value"); + goto fail; + } + + char buf[128]; + time_t time__ = get_integer (time_); + struct tm tm; + gmtime_r (&time__, &tm); + buf[strftime (buf, sizeof buf, get_string (format), &tm)] = '\0'; + success = push (ctx, new_string (buf, -1)); + +fail: + item_free (time_); + item_free (format); + return success; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +static void item_list_to_str (const struct item *, struct buffer *); + +static void +string_to_str (const struct item_string *string, struct buffer *buf) +{ + buffer_append_c (buf, '"'); + for (size_t i = 0; i < string->len; i++) + { + char c = string->value[i]; + if (c == '\n') buffer_append (buf, "\\n", 2); + else if (c == '\r') buffer_append (buf, "\\r", 2); + else if (c == '\t') buffer_append (buf, "\\t", 2); + else if (!isprint (c)) + { + char tmp[8]; + snprintf (tmp, sizeof tmp, "\\x%02x", (unsigned char) c); + buffer_append (buf, tmp, strlen (tmp)); + } + else if (c == '\\') buffer_append (buf, "\\\\", 2); + else if (c == '"') buffer_append (buf, "\\\"", 2); + else buffer_append_c (buf, c); + } + buffer_append_c (buf, '"'); +} + +static void +item_to_str (const struct item *item, struct buffer *buf) +{ + switch (item->type) + { + char *x; + case ITEM_STRING: + string_to_str ((struct item_string *) item, buf); + break; + case ITEM_WORD: + { + struct item_word *word = (struct item_word *) item; + buffer_append (buf, word->value, word->len); + break; + } + case ITEM_INTEGER: + if (!(x = strdup_printf ("%lld", get_integer (item)))) + goto alloc_failure; + buffer_append (buf, x, strlen (x)); + free (x); + break; + case ITEM_FLOAT: + if (!(x = strdup_printf ("%Lf", get_float (item)))) + goto alloc_failure; + buffer_append (buf, x, strlen (x)); + free (x); + break; + case ITEM_LIST: + buffer_append_c (buf, '['); + item_list_to_str (get_list (item), buf); + buffer_append_c (buf, ']'); + break; + } + return; + +alloc_failure: + // This is a bit hackish but it simplifies stuff + buf->memory_failure = true; + free (buf->s); + buf->s = NULL; +} + +static void +item_list_to_str (const struct item *script, struct buffer *buf) +{ + if (!script) + return; + + item_to_str (script, buf); + while ((script = script->next)) + { + buffer_append_c (buf, ' '); + item_to_str (script, buf); + } +} + +// --- IRC protocol ------------------------------------------------------------ + +struct message +{ + char *prefix; ///< Message prefix + char *command; ///< IRC command + char *params[16]; ///< Command parameters (0-terminated) + size_t n_params; ///< Number of parameters present +}; + +inline static char * +cut_word (char **s) +{ + char *start = *s, *end = *s + strcspn (*s, " "); + *s = end + strspn (end, " "); + *end = '\0'; + return start; +} + +static bool +parse_message (char *s, struct message *msg) +{ + memset (msg, 0, sizeof *msg); + + // Ignore IRC 3.2 message tags, if present + if (*s == '@') + { + s += strcspn (s, " "); + s += strspn (s, " "); + } + + // Prefix + if (*s == ':') + msg->prefix = cut_word (&s) + 1; + + // Command + if (!*(msg->command = cut_word (&s))) + return false; + + // Parameters + while (*s) + { + size_t n = msg->n_params++; + if (msg->n_params >= N_ELEMENTS (msg->params)) + return false; + if (*s == ':') + { + msg->params[n] = ++s; + break; + } + msg->params[n] = cut_word (&s); + } + return true; +} + +static struct message * +read_message (void) +{ + static bool discard = false; + static char buf[1025]; + static struct message msg; + + bool discard_this; + do + { + if (!fgets (buf, sizeof buf, stdin)) + return NULL; + size_t len = strlen (buf); + + // Just to be on the safe side, if the line overflows our buffer, + // ignore everything up until the next line. + discard_this = discard; + if (len >= 2 && !strcmp (buf + len - 2, "\r\n")) + { + buf[len -= 2] = '\0'; + discard = false; + } + else + discard = true; + } + // Invalid messages are silently ignored + while (discard_this || !parse_message (buf, &msg)); + return &msg; +} + +// --- Interfacing with the bot ------------------------------------------------ + +#define BOT_PRINT "ZYKLONB print :script: " + +static const char * +get_config (const char *key) +{ + printf ("ZYKLONB get_config :%s\r\n", key); + struct message *msg = read_message (); + if (!msg || msg->n_params <= 0) + exit (EXIT_FAILURE); + return msg->params[0]; +} + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +// TODO: implement more functions; try to avoid writing them in C + +static bool +init_runtime_library_scripts (void) +{ + bool ok = true; + + // It's much cheaper (and more fun) to define functions in terms of other + // ones. The "unit tests" serve a secondary purpose of showing the usage. + struct script + { + const char *name; ///< Name of the function + const char *definition; ///< The defining script + const char *unit_test; ///< Trivial unit test, must return 1 + } + scripts[] = + { + { "nip", "swap drop", "1 2 nip 2 =" }, + { "over", "[dup] dip swap", "1 2 over nip nip 1 =" }, + { "swons", "swap cons", "[2] 1 swons [1 2] =" }, + { "first", "uncons drop", "[1 2 3] first 1 =" }, + { "rest", "uncons swap drop", "[1 2 3] rest [2 3] =" }, + { "reverse", "[] swap [swap cons] each", "[1 2] reverse [2 1] =" }, + { "curry", "cons", "1 2 [+] curry call 3 =" }, + + { "xor", "not swap not + 1 =", "1 1 xor 0 =" }, + { "min", "over over < [drop] [nip] if", "1 2 min 1 =" }, + { "max", "over over > [drop] [nip] if", "1 2 max 2 =" }, + + { "all?", "[and] cat 1 swap fold", "[3 4 5] [> 3] all? 0 =" }, + { "any?", "[or] cat 0 swap fold", "[3 4 5] [> 3] any? 1 =" }, + + { ">", "swap <", "1 2 > 0 =" }, + { "!=", "= not", "1 2 != 1 =" }, + { "<=", "> not", "1 2 <= 1 =" }, + { ">=", "< not", "1 2 >= 0 =" }, + + // XXX: this is a bit crazy and does not work with an empty list + { "join", "[uncons] dip swap [[dup] dip swap [+ +] dip] each drop", + "[1 2 3] [>string] map \" -> \" join \"1 -> 2 -> 3\" =" }, + }; + + for (size_t i = 0; i < N_ELEMENTS (scripts); i++) + { + const char *error = NULL; + struct item *script = parse (scripts[i].definition, &error); + if (error) + { + printf (BOT_PRINT "error parsing internal script `%s': %s\r\n", + scripts[i].definition, error); + ok = false; + } + else + ok &= register_script (scripts[i].name, script); + } + + struct context ctx; + for (size_t i = 0; i < N_ELEMENTS (scripts); i++) + { + const char *error = NULL; + struct item *script = parse (scripts[i].unit_test, &error); + if (error) + { + printf (BOT_PRINT "error parsing unit test for `%s': %s\r\n", + scripts[i].name, error); + ok = false; + continue; + } + context_init (&ctx); + execute (&ctx, script); + item_free_list (script); + + const char *failure = NULL; + if (ctx.memory_failure) + failure = "memory allocation failure"; + else if (ctx.error) + failure = ctx.error; + else if (ctx.stack_size != 1) + failure = "too many results on the stack"; + else if (ctx.stack->type != ITEM_INTEGER) + failure = "result is not an integer"; + else if (get_integer (ctx.stack) != 1) + failure = "wrong test result"; + if (failure) + { + printf (BOT_PRINT "error executing unit test for `%s': %s\r\n", + scripts[i].name, failure); + ok = false; + } + context_free (&ctx); + } + return ok; +} + +static bool +init_runtime_library (void) +{ + bool ok = true; + + // Type detection + ok &= register_handler ("string?", fn_is_string); + ok &= register_handler ("word?", fn_is_word); + ok &= register_handler ("integer?", fn_is_integer); + ok &= register_handler ("float?", fn_is_float); + ok &= register_handler ("list?", fn_is_list); + + // Type conversion + ok &= register_handler (">string", fn_to_string); + ok &= register_handler (">integer", fn_to_integer); + ok &= register_handler (">float", fn_to_float); + + // Miscellaneous + ok &= register_handler ("length", fn_length); + + // Basic stack manipulation + ok &= register_handler ("dup", fn_dup); + ok &= register_handler ("drop", fn_drop); + ok &= register_handler ("swap", fn_swap); + + // Calling stuff + ok &= register_handler ("call", fn_call); + ok &= register_handler ("dip", fn_dip); + + // Control flow + ok &= register_handler ("if", fn_if); + ok &= register_handler ("try", fn_try); + + // List processing + ok &= register_handler ("map", fn_map); + ok &= register_handler ("filter", fn_filter); + ok &= register_handler ("fold", fn_fold); + ok &= register_handler ("each", fn_each); + + // List manipulation + ok &= register_handler ("unit", fn_unit); + ok &= register_handler ("cons", fn_cons); + ok &= register_handler ("cat", fn_cat); + ok &= register_handler ("uncons", fn_uncons); + + // Arithmetic operations + ok &= register_handler ("+", fn_plus); + ok &= register_handler ("-", fn_minus); + ok &= register_handler ("*", fn_times); + ok &= register_handler ("^", fn_pow); + ok &= register_handler ("/", fn_div); + ok &= register_handler ("%", fn_mod); + + // Comparison + ok &= register_handler ("=", fn_eq); + ok &= register_handler ("<", fn_lt); + + // Logical operations + ok &= register_handler ("not", fn_not); + ok &= register_handler ("and", fn_and); + ok &= register_handler ("or", fn_or); + + // Utilities + ok &= register_handler ("rand", fn_rand); + ok &= register_handler ("time", fn_time); + ok &= register_handler ("strftime", fn_strftime); + + ok &= init_runtime_library_scripts (); + return ok; +} + +static void +free_runtime_library (void) +{ + struct fn *next, *iter; + for (iter = g_functions; iter; iter = next) + { + next = iter->next; + free_function (iter); + } +} + +// --- Function database ------------------------------------------------------- + +// TODO: a global variable storing the various procedures (db) +// XXX: defining procedures would ideally need some kind of an ACL + +static void +read_db (void) +{ + // TODO +} + +static void +write_db (void) +{ + // TODO +} + +// --- Main -------------------------------------------------------------------- + +static char *g_prefix; + +struct user_info +{ + char *ctx; ///< Context: channel or user + char *ctx_quote; ///< Reply quotation +}; + +defn (fn_dot) +{ + check_stack (1); + struct item *item = pop (ctx); + struct user_info *info = ctx->user_data; + + struct buffer buf = BUFFER_INITIALIZER; + item_to_str (item, &buf); + item_free (item); + buffer_append_c (&buf, '\0'); + if (buf.memory_failure) + { + ctx->memory_failure = true; + return false; + } + + if (buf.len > 255) + buf.s[255] = '\0'; + + printf ("PRIVMSG %s :%s%s\r\n", info->ctx, info->ctx_quote, buf.s); + free (buf.s); + return true; +} + +static void +process_message (struct message *msg) +{ + if (!msg->prefix + || strcasecmp (msg->command, "PRIVMSG") + || msg->n_params < 2) + return; + char *line = msg->params[1]; + + // Filter out only our commands + size_t prefix_len = strlen (g_prefix); + if (strncmp (line, g_prefix, prefix_len)) + return; + line += prefix_len; + + char *command = cut_word (&line); + if (strcasecmp (command, "script")) + return; + + // Retrieve information on how to respond back + char *msg_ctx = msg->prefix, *x; + if ((x = strchr (msg_ctx, '!'))) + *x = '\0'; + + char *msg_ctx_quote; + if (strchr ("#+&!", *msg->params[0])) + { + msg_ctx_quote = strdup_printf ("%s: ", msg_ctx); + msg_ctx = msg->params[0]; + } + else + msg_ctx_quote = strdup (""); + + if (!msg_ctx_quote) + { + printf (BOT_PRINT "%s\r\n", "memory allocation failure"); + return; + } + + struct user_info info; + info.ctx = msg_ctx; + info.ctx_quote = msg_ctx_quote; + + // Finally parse and execute the macro + const char *error = NULL; + struct item *script = parse (line, &error); + if (error) + { + printf ("PRIVMSG %s :%s%s: %s\r\n", + msg_ctx, msg_ctx_quote, "parse error", error); + goto end; + } + + struct context ctx; + context_init (&ctx); + ctx.user_data = &info; + execute (&ctx, script); + item_free_list (script); + + const char *failure = NULL; + if (ctx.memory_failure) + failure = "memory allocation failure"; + else if (ctx.error) + failure = ctx.error; + if (failure) + printf ("PRIVMSG %s :%s%s: %s\r\n", + msg_ctx, msg_ctx_quote, "runtime error", failure); + context_free (&ctx); +end: + free (msg_ctx_quote); +} + +int +main (int argc, char *argv[]) +{ + freopen (NULL, "rb", stdin); setvbuf (stdin, NULL, _IOLBF, BUFSIZ); + freopen (NULL, "wb", stdout); setvbuf (stdout, NULL, _IOLBF, BUFSIZ); + + struct rlimit limit = + { + .rlim_cur = ADDRESS_SPACE_LIMIT, + .rlim_max = ADDRESS_SPACE_LIMIT + }; + + // Lower the memory limits to something sensible to prevent abuse + (void) setrlimit (RLIMIT_AS, &limit); + + read_db (); + if (!init_runtime_library () + || !register_handler (".", fn_dot)) + printf (BOT_PRINT "%s\r\n", "runtime library initialization failed"); + + g_prefix = strdup (get_config ("prefix")); + printf ("ZYKLONB register\r\n"); + struct message *msg; + while ((msg = read_message ())) + process_message (msg); + + free_runtime_library (); + free (g_prefix); + return 0; +} + diff --git a/samples/C/pqiv.h b/samples/C/pqiv.h new file mode 100644 index 00000000..ea535125 --- /dev/null +++ b/samples/C/pqiv.h @@ -0,0 +1,166 @@ +/** + * pqiv + * + * Copyright (c) 2013-2014, Phillip Berndt + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + */ + +// This file contains the definition of files, image types and +// the plugin infrastructure. It should be included in file type +// handlers. + +#ifndef _PQIV_H_INCLUDED +#define _PQIV_H_INCLUDED + +#include +#include +#include +#include "lib/bostree.h" + +#ifndef PQIV_VERSION +#define PQIV_VERSION "2.3" +#endif + +#define FILE_FLAGS_ANIMATION (guint)(1) +#define FILE_FLAGS_MEMORY_IMAGE (guint)(1<<1) + +// The structure for images {{{ +typedef struct file_type_handler_struct_t file_type_handler_t; +typedef struct { + // File type + const file_type_handler_t *file_type; + + // Special flags + // FILE_FLAGS_ANIMATION -> Animation functions are invoked + // Set by file type handlers + // FILE_FLAGS_MEMORY_IMAGE -> File lives in memory + guint file_flags; + + // The file name to display and to sort by + gchar *display_name; + + // The URI or file name of the file + gchar *file_name; + + // If the file is a memory image, the actual image data + GBytes *file_data; + + // The file monitor structure is used for inotify-watching of + // the files + GFileMonitor *file_monitor; + + // This flag stores whether this image is currently loaded + // and valid. i.e. if it is set, you can assume that + // private_data contains a representation of the image; + // if not, you can NOT assume that it does not. + gboolean is_loaded; + + // Cached image size + guint width; + guint height; + + // File-type specific data, allocated and freed by the file type handlers + void *private; +} file_t; +// }}} +// Definition of the built-in file types {{{ + +// If you want to implement your own file type, you'll have to implement the +// following functions and a non-static initialization function named +// file_type_NAME_initializer that fills a file_type_handler_t with pointers to +// the functions. Store the file in backends/NAME.c and adjust the Makefile to +// add the required libraries if your backend is listed in the $(BACKENDS) +// variable. + +typedef enum { PARAMETER, RECURSION, INOTIFY, BROWSE_ORIGINAL_PARAMETER, FILTER_OUTPUT } load_images_state_t; +// Allocation function: Allocate the ->private structure within a file and add the +// image(s) to the list of available images via load_images_handle_parameter_add_file() +// If an image is not to be loaded for any reason, the file structure should be +// deallocated using file_free() +// Returns a pointer to the first added image +// Optional, you can also set the pointer to this function to NULL. +typedef BOSNode *(*file_type_alloc_fn_t)(load_images_state_t state, file_t *file); + +// Deallocation, if a file is removed from the images list. Free the ->private structure. +// Only called if ->private is non-NULL. +typedef void (*file_type_free_fn_t)(file_t *file); + +// Actually load a file into memory +typedef void (*file_type_load_fn_t)(file_t *file, GInputStream *data, GError **error_pointer); + +// Unload a file +typedef void (*file_type_unload_fn_t)(file_t *file); + +// Animation support: Initialize memory for animations, return ms until first frame +// Optional, you can also set the pointer to this function to NULL. +typedef double (*file_type_animation_initialize_fn_t)(file_t *file); + +// Animation support: Advance to the next frame, return ms until next frame +// Optional, you can also set the pointer to this function to NULL. +typedef double (*file_type_animation_next_frame_fn_t)(file_t *file); + +// Draw the current view to a cairo context +typedef void (*file_type_draw_fn_t)(file_t *file, cairo_t *cr); + +struct file_type_handler_struct_t { + // All files will be filtered with this filter. If it lets it pass, + // a handler is assigned to a file. If none do, the file is + // discarded if it was found during directory traversal or + // loaded using the first image backend if it was an explicit + // parameter. + GtkFileFilter *file_types_handled; + + // Pointers to the functions defined above + file_type_alloc_fn_t alloc_fn; + file_type_free_fn_t free_fn; + file_type_load_fn_t load_fn; + file_type_unload_fn_t unload_fn; + file_type_animation_initialize_fn_t animation_initialize_fn; + file_type_animation_next_frame_fn_t animation_next_frame_fn; + file_type_draw_fn_t draw_fn; +}; + +// Initialization function: Tell pqiv about a backend +typedef void (*file_type_initializer_fn_t)(file_type_handler_t *info); + +// pqiv symbols available to plugins {{{ + +// Global cancellable that should be used for every i/o operation +extern GCancellable *image_loader_cancellable; + +// Current scale level. For backends that don't support cairo natively. +extern gdouble current_scale_level; + +// Load a file from disc/memory/network +GInputStream *image_loader_stream_file(file_t *file, GError **error_pointer); + +// Add a file to the list of loaded files +// Should be called at least once in a file_type_alloc_fn_t, with the state being +// forwarded unaltered. +BOSNode *load_images_handle_parameter_add_file(load_images_state_t state, file_t *file); + +// Load all data from an input stream into memory, conveinience function +GBytes *g_input_stream_read_completely(GInputStream *input_stream, GCancellable *cancellable, GError **error_pointer); + +// Free a file +void file_free(file_t *file); + +// }}} + +// File type handlers, used in the initializer and file type guessing +extern file_type_handler_t file_type_handlers[]; + +/* }}} */ + +#endif diff --git a/samples/Chapel/distributions.chpl b/samples/Chapel/distributions.chpl index a3e5f81d..31040c92 100644 --- a/samples/Chapel/distributions.chpl +++ b/samples/Chapel/distributions.chpl @@ -58,6 +58,34 @@ var BA: [BlockSpace] int; forall ba in BA do ba = here.id; +// +// The 'hasSingleLocalSubdomain' method on arrays will return true if the +// index set for a locale can be represented by a single domain. +// +if !BA.hasSingleLocalSubdomain() then + halt("For a Block distribution, the index set per locale should be \ + represented by a single domain"); + +// +// If the distribution's subdomains can be represented as single subdomain, +// we can use the 'localSubdomain' method to get the index set for the +// current locale. +// +// Below, we'll use the index set to confirm that the array elements have the +// correct locale id. +// + +for L in Locales { + on L { + const indices = BA.localSubdomain(); + for i in indices { + if BA[i] != L.id then + halt("Error: incorrect locale id"); + } + } +} + + // // Output the Block-distributed array to visually see how the elements // are partitioned across the locales. @@ -104,6 +132,14 @@ writeln("Block Array Index Map"); writeln(BA2); writeln(); +// +// We can use the 'targetLocales' method available on an array to get the +// locales array used as targets. +// +for (L, ML) in zip(BA2.targetLocales(), MyLocales) do + if L != ML then + halt("Error: BA2.targetLocales() should equal MyLocales"); + // @@ -126,6 +162,18 @@ writeln("Cyclic Array Index Map"); writeln(CA); writeln(); +// +// The domain returned by 'localSubdomain' need not be a dense block, as is +// the case for the Cyclic Distribution. +// +on Locales[0] { + const indices = CA.localSubdomain(); + for i in indices { + if CA[i] != 0 then + halt("Error: Cyclic array values on Locale 0 should be zero"); + } +} + // // Next, we'll declare a Block-Cyclic distribution. These @@ -134,7 +182,7 @@ writeln(); // of indices. Thus, the BlockCyclic distribution is parameterized // by a starting index (as with Cyclic) and a block size (per // dimension) specifying how large the chunks to be dealt out are. -// +// const BlkCycSpace = Space dmapped BlockCyclic(startIdx=Space.low, blocksize=(2, 3)); var BCA: [BlkCycSpace] int; @@ -146,6 +194,46 @@ writeln("Block-Cyclic Array Index Map"); writeln(BCA); writeln(); +// +// A locale's index set for a Block-Cyclic distribution cannot be represented +// by a single subdomain. +// +if BCA.hasSingleLocalSubdomain() then + halt("A Block-Cyclic index set cannot be represented by a single subdomain"); + +// +// If the local index set cannot be represented by a single subdomain, +// we can use the 'localSubdomains' iterator to yield a number of domains +// that represent the whole index set. +// +// Let's write a function that will use 'localSubdomains' to verify the +// correctness of the array values. +// + +proc verifyID(Data: []) { + for L in Locales { + on L { + for indices in Data.localSubdomains() { + for i in indices { + if Data[i] != L.id then + halt("Error: incorrect locale id"); + } + } + } + } +} +verifyID(BCA); + +// +// The 'localSubdomains' iterator is also available on distributions that +// can represent a locale's index set with a single domain. This allows us to +// write more general code that will work for all distributions. +// +// This means that we can call the 'verifyID' function on any array, like the +// 'BA' array from earlier. +// +verifyID(BA); + // // The ReplicatedDist distribution is different: each of the diff --git a/samples/Chapel/lulesh.chpl b/samples/Chapel/lulesh.chpl index d6480d26..78dab00d 100644 --- a/samples/Chapel/lulesh.chpl +++ b/samples/Chapel/lulesh.chpl @@ -292,14 +292,14 @@ proc main() { LagrangeLeapFrog(); if debug { - // deprint("[[ Forces ]]", fx, fy, fz); + deprintatomic("[[ Forces ]]", fx, fy, fz); deprint("[[ Positions ]]", x, y, z); deprint("[[ p, e, q ]]", p, e, q); } if showProgress then - writeln("time = ", format("%e", time), ", dt=", format("%e", deltatime), - if doTiming then ", elapsed = " + (getCurrentTime()-iterTime) - else ""); + writef("time = %er, dt=%er, %s", time, deltatime, + if doTiming then ", elapsed = " + (getCurrentTime()-iterTime) +"\n" + else "\n"); } if (cycle == maxcycles) { writeln("Stopped early due to reaching maxnumsteps"); @@ -314,12 +314,10 @@ proc main() { if printCoords { var outfile = open("coords.out", iomode.cw); var writer = outfile.writer(); - var fmtstr = if debug then "%1.9e" else "%1.4e"; - for i in Nodes { - writer.writeln(format(fmtstr, x[i]), " ", - format(fmtstr, y[i]), " ", - format(fmtstr, z[i])); - } + var fmtstr = if debug then "%1.9re %1.9er %1.9er\n" + else "%1.4er %1.4er %1.4er\n"; + for i in Nodes do + writer.writef(fmtstr, x[i], y[i], z[i]); writer.close(); outfile.close(); } @@ -479,7 +477,7 @@ inline proc localizeNeighborNodes(eli: index(Elems), y: [] real, ref y_local: 8*real, z: [] real, ref z_local: 8*real) { - for param i in 1..nodesPerElem { + for i in 1..nodesPerElem { const noi = elemToNode[eli][i]; x_local[i] = x[noi]; @@ -670,7 +668,7 @@ proc SumElemStressesToNodeForces(b_x: 8*real, b_y: 8*real, b_z: 8*real, ref fx: 8*real, ref fy: 8*real, ref fz: 8*real) { - for param i in 1..8 { + for i in 1..8 { fx[i] = -(stress_xx * b_x[i]); fy[i] = -(stress_yy * b_y[i]); fz[i] = -(stress_zz * b_z[i]); @@ -725,17 +723,17 @@ inline proc CalcElemFBHourglassForce(xd: 8*real, yd: 8*real, zd: 8*real, var hx, hy, hz: 4*real; // reduction - for param i in 1..4 { - for param j in 1..8 { + for i in 1..4 { + for j in 1..8 { hx[i] += hourgam[j][i] * xd[j]; hy[i] += hourgam[j][i] * yd[j]; hz[i] += hourgam[j][i] * zd[j]; } } - for param i in 1..8 { + for i in 1..8 { var shx, shy, shz: real; - for param j in 1..4 { + for j in 1..4 { shx += hourgam[i][j] * hx[j]; shy += hourgam[i][j] * hy[j]; shz += hourgam[i][j] * hz[j]; @@ -1088,16 +1086,16 @@ proc CalcFBHourglassForceForElems(determ, x8n, y8n, z8n, dvdx, dvdy, dvdz) { /* TODO: Can we enable this local block? */ // local { - for param i in 1..4 { + for i in 1..4 { var hourmodx, hourmody, hourmodz: real; // reduction - for param j in 1..8 { + for j in 1..8 { hourmodx += x8n[eli][j] * gammaCoef[i][j]; hourmody += y8n[eli][j] * gammaCoef[i][j]; hourmodz += z8n[eli][j] * gammaCoef[i][j]; } - for param j in 1..8 { + for j in 1..8 { hourgam[j][i] = gammaCoef[i][j] - volinv * (dvdx[eli][j] * hourmodx + dvdy[eli][j] * hourmody + @@ -1221,7 +1219,7 @@ proc CalcKinematicsForElems(dxx, dyy, dzz, const dt: real) { arealg[k] = CalcElemCharacteristicLength(x_local, y_local, z_local, volume); - for param i in 1..8 { + for i in 1..8 { x_local[i] -= dt2 * xd_local[i]; y_local[i] -= dt2 * yd_local[i]; z_local[i] -= dt2 * zd_local[i]; @@ -1669,7 +1667,7 @@ proc CalcSoundSpeedForElems(vnewc, rho0:real, enewc, pnewc, pbvc, bvc) { iter elemToNodes(elem) { - for param i in 1..nodesPerElem do + for i in 1..nodesPerElem do yield elemToNode[elem][i]; } @@ -1679,14 +1677,19 @@ iter elemToNodesTuple(e) { } -proc deprint(title:string, x:[?D] real, y:[D]real, z:[D]real) { +proc deprint(title:string, x:[?D] real, y:[D] real, z:[D] real) { writeln(title); - for i in D { - writeln(format("%3d", i), ": ", - format("%3.4e", x[i]), " ", - format("%3.4e", y[i]), " ", - format("%3.4e", z[i])); - } + for i in D do + writef("%3i: %3.4er %3.4er %3.4er\n", + if use3DRepresentation then idx3DTo1D(i, D.dim(1).size) else i, + x[i], y[i], z[i]); } +proc deprintatomic(title:string, x:[?D] atomic real, y:[] atomic real, z:[] atomic real) { + writeln(title); + for i in D do + writef("%3i: %3.4er %3.4er %3.4er\n", + if use3DRepresentation then idx3DTo1D(i, D.dim(1).size) else i, + x[i].peek(), y[i].peek(), z[i].peek()); +} diff --git a/samples/Charity/example.ch b/samples/Charity/example.ch new file mode 100644 index 00000000..d3ee289b --- /dev/null +++ b/samples/Charity/example.ch @@ -0,0 +1,6 @@ +% +% Some very badly written Charity +% + +data LA(A) -> D = ss: A -> D + | ff: -> D. diff --git a/samples/Clarion/CStringClass.clw b/samples/Clarion/CStringClass.clw new file mode 100644 index 00000000..7fa3ba98 --- /dev/null +++ b/samples/Clarion/CStringClass.clw @@ -0,0 +1,172 @@ + Member() + omit('***$***',_VER_C55) +_ABCDllMode_ EQUATE(0) +_ABCLinkMode_ EQUATE(1) + ***$*** + Include('Equates.CLW'),ONCE + Include('Keycodes.CLW'),ONCE + Include('Errors.CLW'),ONCE + Map + End ! map + Include('CStringClass.inc'),ONCE +CStringClass.Construct PROCEDURE ! Declare Procedure + CODE + SELF.bufferSize = DEFAULT_CS_BUFFER_SIZE + SELF.CS &= New(CSTRING(SELF.bufferSize)) +CStringClass.Destruct PROCEDURE ! Declare Procedure + CODE + Dispose(SELF.cs) +CStringClass.Cat PROCEDURE (STRING pStr) !,*CSTRING,PROC ! Declare Procedure +newLen LONG,AUTO +oldCS &CSTRING + CODE + newLen = Len(pStr) + IF (newLen+SELF.strLength+2) > SELF.newStrSize + ! Only grow the internal string if the result of the cat will be larger than the string currently is. + ! The reason for the "+2" is because this is used in the string slicing outside this IF. Without this matching +2 there is potential for an out of bounds slice which would be bad! + + ! Save a temporary copy of the old string so we can us it in the concatination after we have grown it! + oldCS &= New(CSTRING(SELF.strLength+1)) + oldCS = SELF.CS + Dispose(SELF.CS) + + SELF.newStrSize = newLen + SELF.strLength + 1 + SELF.bufferSize + SELF.CS &= New(CSTRING(SELF.newStrSize)) + SELF.CS = oldCS + Dispose(oldCS) + END + + ! Append the new string directly to the end of the old one. + SELF.CS[SELF.strLength+1 : SELF.strLength+newLen] = pStr + ! And terminate the CSTRING manually + SELF.CS[SELF.strLength+newLen+1] = '<0>' + + ! This is the same as doing "SELF.strLength = Len(SELF.CS)" but the Len() is _really_ slow on large strings. This is much faster! + SELF.strLength += newLen + + ! This is what it used to be: + ! SELF.Str(SELF.Str() & s) + ! It is a nice and neat solution but performance, especially on large strings was terrible! + + RETURN SELF.Str() +CStringClass.Str PROCEDURE (STRING pStr) !,*CSTRING, PROC ! Declare Procedure + CODE + IF Len(pStr) > SELF.newStrSize + ! Only Dispose/New the internal string if the new one requires it. + ! This might be slightly innefficient in terms of memory usage when the string gets smaller + ! But it is _vasty_ better for performance when the string gets added to a lot. + Dispose(SELF.CS) + SELF.newStrSize = Len(pStr) + 1 + SELF.bufferSize + SELF.CS &= New(CSTRING(SELF.newStrSize)) + END + + SELF.CS = pStr + SELF.strLength = Len(SELF.CS) + + RETURN SELF.CS +CStringClass.Len PROCEDURE !,LONG ! Declare Procedure + CODE + RETURN SELF.strLength +CStringClass.Replace PROCEDURE (STRING pFind, STRING pReplace) !,*CSTRING,PROC ! Declare Procedure +! FindString , ReplaceWith +locate LONG,AUTO +lastLocate LONG + CODE + LOOP + locate = InString(Upper(pFind), Upper(SELF.Str()), 1, lastLocate+1) + IF ~locate + BREAK + END + + ! So we dont end up having recursive replacement. + lastLocate = locate + Len(pReplace)-1 + + SELF.Str(Sub(SELF.Str(), 1, locate-1) & | + pReplace & | + Sub(SELF.Str(), locate+Len(pFind), SELF.Len()) | + ) + END + + RETURN SELF.Str() +CStringClass.Str PROCEDURE () !,*CSTRING ! Declare Procedure 3 + CODE + RETURN SELF.CS +!------------------------------------------------------------------------------ +CStringClass.Contains PROCEDURE (STRING pFind, BYTE pCaseSensitive=TRUE) !,BYTE ! Declare Procedure +! Returns a value (TRUE) indicating whether the specified String occurs within this string. +! Second parameter defaults to a case sensitive search. + CODE + IF pCaseSensitive = TRUE + IF InString(pFind, SELF.Str(), 1 , 1) > 0 + RETURN TRUE + END + ELSE + IF InString(Lower(pFind), SELF.Lower(), 1 , 1) > 0 + RETURN TRUE + END + END + + RETURN FALSE +CStringClass.Lower PROCEDURE () !,STRING ! Declare Procedure +! Returns a "Lowered" version of the self.cs doesnt change the self.cs + CODE + RETURN Lower(SELF.CS) +CStringClass.SubString PROCEDURE (LONG pPosition, LONG pLength) !,STRING,PROC ! Declare Procedure + CODE + RETURN Sub(SELF.Str(), pPosition, pLength) +CStringClass.ToLower PROCEDURE () !,*CSTRING,PROC ! Declare Procedure +! Converts this string to lowercase and returns the converted string + + CODE + RETURN SELF.Str(SELF.Lower()) +CStringClass.ToUpper PROCEDURE () !,*CSTRING,PROC ! Declare Procedure +! Converts this string to uppercase and returns the converted string + + CODE + RETURN SELF.Str(SELF.Upper()) +CStringClass.Trim PROCEDURE () !,*CSTRING,PROC ! Declare Procedure + CODE + SELF.Str(Left(SELF.Str())) + SELF.Str(Clip(SELF.Str())) + RETURN SELF.Str() +CStringClass.Upper PROCEDURE () !,STRING ! Declare Procedure + CODE + RETURN Upper(SELF.Str()) +CStringClass.IndexOf PROCEDURE (STRING pLookIn, BYTE pCaseSensitive=TRUE) !,LONG ! Declare Procedure +! Returns the index of the first parameter (pLookIn) is found within the SELF.CS +! zero if it is not found + CODE + IF pCaseSensitive = TRUE + RETURN InString(SELF.Str(), pLookIn, 1 , 1) + ELSE + RETURN InString(SELF.Lower(), Lower(pLookIn), 1 , 1) + END +CStringClass.FoundIn PROCEDURE (STRING pLookIn, BYTE pCaseSensitive=TRUE) !,BYTE ! Declare Procedure +! Returns TRUE if the first parameter (pLookIn) is found within the SELF.CS +! FALSE if it is no + CODE + IF SELF.IndexOf(pLookIn, pCaseSensitive) > 0 + RETURN TRUE + ELSE + RETURN FALSE + END +CStringClass.SetBuffer PROCEDURE (LONG pNewBuffer) ! Declare Procedure + CODE + SELF.bufferSize = pNewBuffer +CStringClass.EscapeXml PROCEDURE () !,STRING ! Declare Procedure +CS CStringClass + CODE + IF Omitted(pStr)=FALSE + CS.Str(pStr) + ELSE + ! Make a copy so we don't alter the original + CS.Str(SELF.Str()) + END + CS.Replace('&', '&') + CS.Replace('<', '<') + CS.Replace('>', '>') + CS.Replace('"', '"') + CS.Replace('''', ''') + + RETURN CS.Str() + diff --git a/samples/Clarion/ConsoleSupport.clw b/samples/Clarion/ConsoleSupport.clw new file mode 100644 index 00000000..c7eac1e1 --- /dev/null +++ b/samples/Clarion/ConsoleSupport.clw @@ -0,0 +1,68 @@ + Member() + Include('ConsoleSupport.inc'),ONCE + Map + MODULE('32-bit Windows API') + ! General functions + GetLastError(),DWORD,PASCAL + + ! Console functions + GetStdHandle(DWORD),HANDLE,PASCAL,PROC,RAW + WriteConsole(Handle,Long,Dword,long,long),bool,Raw,Pascal,name('WriteConsoleA') + ReadConsole(Handle,Long,Dword,long,long),bool,Raw,Pascal,name('ReadConsoleA') + SetConsoleTitle(Long),Bool,Raw,Pascal,name('SetConsoleTitleA') + GetConsoleTitle(Long,dword),Bool,Raw,Pascal,name('GetConsoleTitleA') + SetConsoleMode(Handle,dWord),BOOL,RAW,PASCAL + GetConsoleMode(Handle,Long),BOOL,RAW,PASCAL + End + End + +ConsoleSupport.Construct PROCEDURE + + CODE + +ConsoleSupport.Destruct PROCEDURE + + CODE + +ConsoleSupport.Init PROCEDURE () !,BYTE,VIRTUAL + CODE + + SELF.OutputHandle = GetStdHandle(STD_OUTPUT_HANDLE) + If SELF.OutputHandle = INVALID_HANDLE_VALUE + Halt(1,'Unable to get output handle (' & GetLastError() & ')') + RETURN INVALID_HANDLE_VALUE + End + + SELF.InputHandle = GetStdHandle(STD_INPUT_HANDLE) + if SELF.InputHandle = INVALID_HANDLE_VALUE + Halt(2,'Unable to get console input handle (' & GetLastError() & ')') + RETURN INVALID_HANDLE_VALUE + End + + If ~SetConsoleMode(SELF.InputHandle,ENABLE_PROCESSED_INPUT ) + Halt(3,'Unable to set console mode (' & GetLastError() & ')') + RETURN INVALID_OTHER + End + + RETURN FALSE + +ConsoleSupport.WriteLine PROCEDURE (STRING pText) !,BYTE,PROC,VIRTUAL + CODE + SELF.TextBuffer = SELF.Prefix & pText & '<13,10>' + If WriteConsole(SELF.OutputHandle, ADDRESS(SELF.TextBuffer), LEN(SELF.TextBuffer),ADDRESS(SELF.BytesWritten), NULL) = 0 + Halt(4,'WriteConsoleError (' & GetLastError() & ')') + RETURN -1 + End + RETURN FALSE + +Consolesupport.ReadKey PROCEDURE () !,STRING,PROC,VIRTUAL + CODE + SELF.WriteLine('Press any key to continue...') + Clear(SELF.InBuffer) + Loop + IF ReadConsole(SELF.InputHandle,Address(SELF.InBuffer),100,Address(SELF.BytesRead),NULL) = 0 THEN + Halt(5,'Error on read console (' & GetLastError() & ')') + Break + End + Until SELF.BytesRead > 0 + RETURN SELF.InBuffer \ No newline at end of file diff --git a/samples/Clarion/HelloWorld.clw b/samples/Clarion/HelloWorld.clw new file mode 100644 index 00000000..8cad46dc --- /dev/null +++ b/samples/Clarion/HelloWorld.clw @@ -0,0 +1,10 @@ + PROGRAM + + MAP + END + + CODE + + MESSAGE('Hello World!') + + RETURN \ No newline at end of file diff --git a/samples/Clarion/hello.clw b/samples/Clarion/hello.clw new file mode 100644 index 00000000..14328c84 --- /dev/null +++ b/samples/Clarion/hello.clw @@ -0,0 +1,12 @@ + MEMBER() + INCLUDE('HelloClass.inc'),ONCE + MAP + END + +HelloClass.Construct PROCEDURE + CODE +HelloClass.Destruct PROCEDURE() !,VIRTUAL + CODE +HelloClass.SayHello PROCEDURE + CODE + MESSAGE('Hello World!') diff --git a/samples/Clojure/build.boot b/samples/Clojure/build.boot new file mode 100644 index 00000000..6de0bfca --- /dev/null +++ b/samples/Clojure/build.boot @@ -0,0 +1,15 @@ +;; from: https://github.com/boot-clj/boot#configure-task-options + +(set-env! + :source-paths #{"src"} + :dependencies '[[me.raynes/conch "0.8.0"]]) + +(task-options! + pom {:project 'my-project + :version "0.1.0"} + jar {:manifest {"Foo" "bar"}}) + +(deftask build + "Build my project." + [] + (comp (pom) (jar) (install))) diff --git a/samples/Common Lisp/array.l b/samples/Common Lisp/array.l new file mode 100644 index 00000000..a64ac178 --- /dev/null +++ b/samples/Common Lisp/array.l @@ -0,0 +1,164 @@ +;;; -*- Mode: Lisp; Package: LISP -*- +;;; +;;; This file is part of xyzzy. +;;; + +(provide "array") + +(in-package "lisp") + +(export '(make-vector make-array vector array-dimensions array-in-bounds-p + upgraded-array-element-type adjust-array)) + +(defun upgraded-array-element-type (type) + (cond ((or (eq type 't) + (null type)) + 't) + ((member type '(character base-character standard-char + extended-character) :test #'eq) + 'character) + (t + (setq type (car (si:canonicalize-type type))) + (cond ((or (eq type 't) + (null type)) + 't) + ((member type '(character base-character standard-char + extended-character) :test #'eq) + 'character) + (t 't))))) + +(defun check-array-initialize-option (ies-p ics-p displaced-to) + (let ((x 0)) + (and ies-p (incf x)) + (and ics-p (incf x)) + (and displaced-to (incf x)) + (when (> x 1) + (error ":initial-element, :initial-contents, :displaced-to")))) + +(defun make-vector (length &key + (element-type t) + (initial-element nil ies-p) + (initial-contents nil ics-p) + fill-pointer + adjustable + displaced-to + (displaced-index-offset 0)) + (setq element-type (upgraded-array-element-type element-type)) + (check-array-initialize-option ies-p ics-p displaced-to) + (let ((vector (si:*make-vector length element-type initial-element adjustable + fill-pointer displaced-to displaced-index-offset))) + (when ics-p + (si:*copy-into-seq vector initial-contents)) + vector)) + +(defun make-array (dimensions &rest rest + &key + (element-type t) + (initial-element nil ies-p) + (initial-contents nil ics-p) + fill-pointer + adjustable + displaced-to + (displaced-index-offset 0)) + (cond ((integerp dimensions) + (apply #'make-vector dimensions rest)) + ((= (length dimensions) 1) + (apply #'make-vector (car dimensions) rest)) + (t + (setq element-type (upgraded-array-element-type element-type)) + (check-array-initialize-option ies-p ics-p displaced-to) + (when fill-pointer + (error ":fill-pointer")) + (let ((array (si:*make-array dimensions element-type + initial-element adjustable + displaced-to displaced-index-offset))) + (when ics-p + (let ((dims (make-list (array-rank array) + :initial-element 0)) + (stack (list initial-contents)) + (rank (1- (array-rank array)))) + (dolist (x dims) + (push (elt (car stack) 0) stack)) + (dotimes (i (array-total-size array)) + (setf (row-major-aref array i) (car stack)) + (do ((x dims (cdr x)) + (j rank (1- j))) + ((null x)) + (pop stack) + (incf (car x)) + (when (< (car x) (array-dimension array j)) + (do ((r (- rank j) (1- r))) + ((< r 0)) + (push (elt (car stack) (nth r dims)) stack)) + (return)) + (setf (car x) 0))))) + array)))) + +(defun vector (&rest list) + (make-vector (length list) :element-type t :initial-contents list)) + +(defun array-dimensions (array) + (do ((i (1- (array-rank array)) (1- i)) + (dims '())) + ((minusp i) dims) + (push (array-dimension array i) dims))) + +(defun array-in-bounds-p (array &rest subscripts) + (let ((r (array-rank array))) + (when (/= r (length subscripts)) + (error "subscripts: ~S" subscripts)) + (do ((i 0 (1+ i)) + (s subscripts (cdr s))) + ((= i r) t) + (unless (<= 0 (car s) (1- (array-dimension array i))) + (return nil))))) + +(defun adjust-array (old-array + dimensions + &rest rest + &key + (element-type nil ets-p) + initial-element + (initial-contents nil ics-p) + (fill-pointer nil fps-p) + displaced-to + displaced-index-offset) + (when (/= (length dimensions) (array-rank old-array)) + (error "?")) + (unless ets-p + (push (array-element-type old-array) rest) + (push :element-type rest)) + (when (adjustable-array-p old-array) + (push t rest) + (push :adjustable rest)) + (cond (fps-p + (unless (array-has-fill-pointer-p old-array) + (error "?"))) + (t + (when (array-has-fill-pointer-p old-array) + (push (fill-pointer old-array) rest) + (push :fill-pointer rest)))) + (when (eq old-array displaced-to) + (error "?")) + (let ((new-array (apply #'make-array dimensions rest))) + (or ics-p displaced-to + (copy-array-partially old-array new-array)) + (cond ((adjustable-array-p old-array) + (si:*replace-array old-array new-array) + old-array) + (t + new-array)))) + +(defun copy-array-partially (src dst) + (let* ((dims (mapcar #'min (array-dimensions src) (array-dimensions dst))) + (r (array-rank src)) + (s (make-list r :initial-element 0))) + (setq r (1- r)) + (dotimes (x (apply #'* dims)) + (setf (apply #'aref dst s) (apply #'aref src s)) + (do ((i r (1- i))) + ((minusp i)) + (incf (nth i s)) + (when (< (nth i s) (nth i dims)) + (return)) + (setf (nth i s) 0))))) diff --git a/samples/Common Lisp/common.l b/samples/Common Lisp/common.l new file mode 100644 index 00000000..d2c8fa35 --- /dev/null +++ b/samples/Common Lisp/common.l @@ -0,0 +1,1201 @@ +;;; common.l +;;; commonLisp features for eus +;;; +;;; Copyright(c)1988, Toshihiro MATSUI, Electrotechnical Laboratory +;;; 1986-Aug +;;; 1987-Feb +;;; 1988-Jun defclass, setf + +(in-package "LISP") + +(list "@(#)$Id: common.l,v 1.1.1.1 2003/11/20 07:46:30 eus Exp $") + +(export '(lisp-implementation-type lisp-implementation-version)) + +(export '(macroexpand prog1 loop unless until + pop push pushnew inc dec incf decf)) + +(export '(defvar defparameter defconstant deflocal + dotimes dolist + do-symbols do-external-symbols do-all-symbols + psetq do do* prog prog* + case classcase otherwise + string alias + caaar caadr cadar cdaar cdadr cddar cdddr + fourth fifth sixth seventh eighth + cadddr cddddr cadddr caaddr cdaddr caddddr + flatten list-insert list-delete adjoin union intersection + set-difference set-exclusive-or rotate-list last copy-tree + copy-list nreconc rassoc acons member assoc subsetp maplist mapcon)) + +(export '(find find-if find-if-not position position-if position-if-not + count count-if count-if-not member-if member-if-not + pairlis make-list make-sequence fill replace + transpose-list + remove remove-if remove-if-not delete delete-if delete-if-not + substitute substitute-if substitute-if-not + nsubstitute nsubstitute-if nsubstitute-if-not + unique remove-duplicates extream + send-super-lexpr send-lexpr send-super send-all resend + send-super* send* + instance instance* + make-instance defclassmethod delete-method + make-class defstruct defclass readtablep copy-readtable + set-syntax-from-char + collect-if collect-instances +)) + +(export '(keywordp constantp functionp vector-class-p + compiled-function-p input-stream-p output-stream-p io-stream-p + special-form-p macro-function)) + +(export '(zerop plusp minusp oddp evenp /= logandc1 logandc2 + ecase every some reduce merge-list merge expt signum + defsetf define-setf-method + setf multiple-value-bind multiple-value-setq pop push)) +(export '(get-internal-run-time list-length values + first second third bye)) + +(export '(rad2deg deg2rad )) + +;; version +(defun lisp-implementation-type () "EusLisp") +(defun lisp-implementation-version () + (format nil + "EusLisp ~A~A for ~A created on ~A(~A)" + (car lisp-implementation-version) + (cdddr lisp-implementation-version) + *OS-VERSION* + (cadr lisp-implementation-version) + (caddr lisp-implementation-version) + )) +(setq euserror nil) +;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; basic macros +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(eval-when (load eval) + +(defun macroexpand (form) + (let ((r (macroexpand2 form))) + (while (and (listp r) (macro-function (car r))) + (setq r (macroexpand2 r))) + r)) + +;(defmacro defun (fname &rest fdef) +; `(progn +; (setq (',fname . function) (cons 'lambda ',fdef)) +; (remprop ',fname 'builtin-function-entry) +; ',fname)) + +(defmacro prog1 (&rest args) + (let ((first (gensym "PROG1"))) + `(let ((,first ,(car args))) + (progn . ,(cdr args)) ,first))) + +(defmacro loop (&rest forms) + (let ((tag (gensym "LOOP"))) + `(block nil (tagbody ,tag ,@forms (go ,tag))))) +(defmacro unless (pred &rest form) + `(when (not ,pred) . ,form)) +(defmacro until (condition &rest forms) + `(while (not ,condition) ,@forms)) +(defmacro pop (s) `(prog1 (car ,s) (setf ,s (cdr ,s)))) +(defmacro push (item place) `(setf ,place (cons ,item ,place))) +(defmacro pushnew (item place &key test test-not key) + `(progn (if (not (member ,item ,place :test ,test :test-not ,test-not + :key ,key)) + (setf ,place (cons ,item ,place))) + nil)) +(defmacro inc (var &optional h) + (if h (setq h (list '+ var h)) (setq h (list '1+ var))) + (list 'setq var h)) +(defmacro dec (var &optional h) + (if h (setq h (list '- var h)) (setq h (list '1- var))) + (list 'setq var h)) +(defmacro incf (var &optional h) + (if h (setq h (list '+ var h)) (setq h (list '1+ var))) + (list 'setf var h)) +(defmacro decf (var &optional h) + (if h (setq h (list '- var h)) (setq h (list '1- var))) + (list 'setf var h)) + +(defmacro defvar (var &optional (init nil) (doc nil)) + (unless (symbolp var) (error 20)) + `(when (eql (send ',var :vtype) 1) + (send ',var :vtype 2) + (if (not (boundp ',var)) + (send ',var :global ,init ,doc )) + ',var)) + +(defmacro deflocal (var &optional (init nil) (doc nil)) + (unless (symbolp var) (error 20)) + `(progn + (send ',var :special ,init ,doc) + ',var)) + +(defmacro defparameter (var init &optional (doc nil)) + (unless (symbolp var) (error 20)) + `(send ',var :global ,init ,doc)) + +(defmacro defconstant (sym val &optional doc) + (unless (symbolp sym) (error 20)) + `(send ',sym :constant ,val ,doc) ) + + +(defmacro dotimes (vars &rest forms) + (let ((endvar (gensym "DOTIMES"))) + `(let ((,(car vars) 0) (,endvar ,(cadr vars))) + (declare (integer ,(car vars) ,endvar)) + (while (< ,(car vars) ,endvar) + ,@forms + (setq ,(car vars) (1+ ,(car vars)))) + ,(caddr vars)))) + +(defmacro dolist (vars &rest forms) + (let ((lists (gensym "DOLIST")) (decl (car forms))) + (if (and (consp decl) (eq (car decl) 'declare)) + (setq forms (cdr forms)) + (setq decl nil)) + `(let ((,(car vars) nil) (,lists ,(cadr vars))) + ,decl + (while ,lists + (setq ,(car vars) (pop ,lists)) + ,@forms) + ,(caddr vars)))) + +(defmacro do-symbols (vars &rest forms) + (let* ((symbols (gensym "DOSYM")) + (v (car vars)) + (pkg (if (cadr vars) (cadr vars) '*package*)) + (pkgv (gensym)) + (i (gensym)) + (size (gensym)) + (svec (gensym)) + ) + `(let* ((,v nil) + (,pkgv (find-package ,pkg)) + (,i 0) + (,svec (,pkgv . intsymvector)) + (,size (length ,svec))) + (while (< ,i ,size) + (setq ,v (elt ,svec ,i)) + (inc ,i) + (when (symbolp ,v) . ,forms)) + ,(caddr vars)))) + +(defmacro do-external-symbols (vars &rest forms) + (let* ((symbols (gensym "DOEXTSYM")) + (v (car vars)) + (pkg (if (cadr vars) (cadr vars) '*package*)) + (pkgv (gensym)) + (i (gensym)) + (size (gensym)) + (svec (gensym)) + ) + `(let* ((,v nil) + (,pkgv (find-package ,pkg)) + (,i 0) + (,svec (,pkgv . symvector)) + (,size (length ,svec))) + (while (< ,i ,size) + (setq ,v (elt ,svec ,i)) + (inc ,i) + (when (symbolp ,v) . ,forms)) + ,(caddr vars)))) + +(defmacro do-all-symbols (var &rest forms) + (let ((apackage (gensym "DOALLSYM"))) + `(dolist (,apackage (list-all-packages) ,(cadr var)) + (do-symbols (,(car var) ,apackage) . ,forms) ) + )) + +(defmacro psetq (&rest varvals) + (let* (vars vals gvars) + (while varvals + (push (pop varvals) vars) + (push (pop varvals) vals) + (push (gensym "PSETQ") gvars)) + (setq vars (nreverse vars) vals (nreverse vals) gvars (nreverse gvars)) + `(let* ,(mapcar #'list gvars vals) + (setq . ,(mapcan #'list vars gvars)) + nil))) + +(defmacro do (vars endtest &rest body) + (let ((decl (car body)) (tag (gensym "DO"))) + (if (and (consp decl) (eq (car decl) 'declare)) + (setq body (cdr body)) + (setq decl nil)) + `(block nil + (let + ,(mapcar + #'(lambda (v) (list (car v) (cadr v))) + vars) + ,decl + (tagbody + ,tag + (if ,(car endtest) (return (progn . ,(cdr endtest)))) + ,@body + (psetq . ,(mapcan #'(lambda (v) (if (cddr v) (list (car v) (caddr v)))) + vars)) + (go ,tag))) ))) + +(defmacro do* (vars endtest &rest body) + (let ((decl (car body)) (tag (gensym "DO*"))) + (if (and (consp decl) (eq (car decl) 'declare)) + (setq body (cdr body)) + (setq decl nil)) + `(block nil + (let* + ,(mapcar + #'(lambda (v) (list (car v) (cadr v))) + vars) + ,decl + (tagbody + ,tag + (if ,(car endtest) (return (progn . ,(cdr endtest)))) + ,@body + (setq . ,(mapcan #'(lambda (v) (if (cddr v) (list (car v) (caddr v)))) + vars)) + (go ,tag))) ))) + + +(defmacro prog (vars &rest body) + `(block nil + (let ,vars + (tagbody ,@body)))) +(defmacro prog* (vars &rest body) + `(block nil + (let* ,vars + (tagbody ,@body)))) + +) +;; +;; case +;; +(eval-when (load eval) +(defun casebody (body) (if (cdr body) (cons 'progn body) (car body))) + +(defun casehead (keyvar head) + (if (atom head) + (if (memq head '(t otherwise)) + t + (list 'eq keyvar (list 'quote head))) + (list 'memq keyvar (list 'quote head)) )) + +(defun case1 (keyvar clauses) + (if (atom clauses) + nil + (list 'if + (casehead keyvar (caar clauses)) + (casebody (cdar clauses)) + (case1 keyvar (cdr clauses)) nil))) + +(defmacro case (key &rest clauses) + (let ((keyvar (gensym "CASE")) (result nil)) + (list 'let (list (list keyvar key)) (case1 keyvar clauses)) + )) + +(defun classcasehead (keyvar head) + (if (memq head '(t otherwise)) + t + (if (atom head) + `(derivedp ,keyvar ,head) + `(or . ,(mapcar #'(lambda (x) `(derivedp ,keyvar ,x)) head))))) + +(defun classcase1 (keyvar clauses) + (if (atom clauses) + nil + (list 'if + (classcasehead keyvar (caar clauses)) + (casebody (cdar clauses)) + (classcase1 keyvar (cdr clauses)) nil))) + +(defmacro classcase (key &rest clauses) + (let ((kv (gensym "CCASE"))) + `(let ((,kv ,key)) ,(classcase1 kv clauses)))) +) + +;; string + +(defun string (x) + (if (stringp x) x + (if (symbolp x) (copy-seq (x . pname)) + (if (numberp x) (format nil "~d" x) + (error x))))) + +; +; more list functions +; +(eval-when (load eval) + (defun alias (new old) (setslot new symbol 'function + (symbol-function old))) + (alias 'list-length 'length) + (alias 'values 'list) + ) + +(eval-when (load eval) +(defun caaar (x) (car (caar x))) +(defun caadr (x) (car (cadr x))) +(defun cadar (x) (car (cdar x))) +(defun cdaar (x) (cdr (caar x))) +(defun cdadr (x) (cdr (cadr x))) +(defun cddar (x) (cdr (cdar x))) +(defun cdddr (x) (cdr (cddr x))) +(alias 'first 'car) +(alias 'second 'cadr) +(alias 'third 'caddr) +(defun fourth (x) (cadr (cddr x))) +(defun fifth (x) (caddr (cddr x))) +(defun sixth (x) (caddr (cdddr x))) +(defun seventh (x) (caddr (cddddr x))) +(defun eighth (x) (cadddr (cddddr x))) +#| +(defun cadddr (x) (car (cdddr x))) +|# +(defun cddddr (x) (cddr (cddr x))) +(defun cadddr (x) (cadr (cddr x))) +(defun caaddr (x) (caar (cddr x))) +(defun cdaddr (x) (cdar (cddr x))) +(defun caddddr (x) (cadr (cdddr x))) +(defun flatten (l &optional accumulator) + (cond + ((null l) accumulator) + ((atom l) (cons l accumulator)) + (t (flatten (car l) + (flatten (cdr l) accumulator)))) ) + +(defun list-insert (item pos list) + "insert item as the pos'th element in list. +if pos is bigger than the length of list, item is nconc'ed at the tail" + (cond ((null list) (list item)) + ((>= pos (length list)) (nconc list (list item))) + ((= pos 0) (cons item list)) + (t (let ((tail (cons item (nthcdr pos list)))) + (rplacd (nthcdr (1- pos) list) tail) + list)))) + +(defun list-delete (lst n) "(lst n) delete nth element of lst" + (if (= n 0) + (setq lst (cdr lst)) + (rplacd (nthcdr (1- n) lst) (nthcdr (1+ n) lst)) ) + lst) + +(defun adjoin (item list &key (test #'eq) (test-not) (key #'identity)) + (if (member item list :test test :test-not test-not :key key) + list + (cons item list))) + +(defun union (list1 list2 &key (test #'eq) (test-not) (key #'identity)) + (let (result) + (dolist (item list1) + (unless (member (funcall key item) result + :test test :test-not test-not :key key) + (setq result (cons item result)))) + (dolist (item list2) + (unless (member (funcall key item) result + :test test :test-not test-not :key key) + (setq result (cons item result)))) + (reverse result))) + +(defun intersection (list1 list2 &key (test #'eq) (test-not) (key #'identity)) + (let (r) + (dolist (item list1) + (if (member (funcall key item) list2 + :test test :test-not test-not :key key) + (setq r (cons item r)))) + r)) + +(defun set-difference (list1 list2 &key (test #'eq) (test-not) + (key #'identity)) + (let (result) + (dolist (l1 list1) + (unless (member (funcall key l1) list2 + :test test :test-not test-not :key key) + (push l1 result))) + (nreverse result))) + +(defun set-exclusive-or (list1 list2 &key (test #'eq) (test-not) + (key #'identity)) + (let (result1 result2) + (dolist (l1 list1) + (setq l1 (funcall key l1)) + (unless (member l1 list2 :test test :test-not test-not :key key) + (push l1 result1))) + (dolist (l2 list2) + (setq l2 (funcall key l2)) + (unless (member l2 list1 :test test :test-not test-not :key key) + (push l2 result2))) + (nconc result1 result2))) + +(defun rotate-list (l) (append (cdr l) (list (car l)))) +(defun last (x) + (while (consp (cdr x)) (setq x (cdr x))) + x) +(defun copy-tree (x) (subst t t x)) +(defun copy-list (x) (nreverse (reverse x))) +(defun nreconc (x y) (nconc (nreverse x) y)) +(defun rassoc (item alist) + (dolist (a alist) + (if (equal item (cdr a)) (return-from rassoc a)))) +(defun acons (key datum alist) (cons (cons key datum) alist)) +(defun member (item list &key key test test-not) + (supermember item list key test test-not)) +(defun assoc (item alist &key key test test-not) + (superassoc item alist key test test-not)) +(defun subsetp (sub super &key key test test-not) + (every #'(lambda (s) (member s super :key key :test test :test-not test-not)) + sub)) +(defun maplist (func arg &rest more-args &aux result) + (if more-args + (let (arglist margs) + (while arg + (setq arglist nil) + (push arg arglist) + (setq arg (cdr arg)) + (setq margs more-args) + (while margs + (push (car margs) arglist) + (setf (car margs) (cdar margs)) + (setq margs (cdr margs)) ) + (push (apply func (nreverse arglist)) result) )) + (while arg + (push (funcall func arg) result) + (setq arg (cdr arg)))) + (nreverse result)) + +(defun mapcon (func arg &rest more-args &aux result) + (if more-args + (let (arglist margs) + (while arg + (setq arglist nil) + (push arg arglist) + (setq arg (cdr arg)) + (setq margs more-args) + (while margs + (push (car margs) arglist) + (setf (car margs) (cdar margs)) + (setq margs (cdr margs)) ) + (setq result (nconc (apply func (nreverse arglist)) result) )) ) + (while arg + (setq result (nconc (funcall func arg) result)) + (setq arg (cdr arg)))) + (nreverse result)) + +(defun find (item seq &key (start 0) (end (length seq)) + (test #'eq) (test-not nil) (key #'identity)) + (system::raw-find item seq test test-not key nil nil start end)) +(defun find-if (pred seq &key (start 0) (end (length seq)) (key #'identity)) + (system::raw-find nil seq nil nil key pred nil start end)) +(defun find-if-not (pred seq &key (start 0) (end (length seq)) (key #'identity)) + (system::raw-find nil seq nil nil key nil pred start end)) + +(defun position (item seq &key (start 0) (end (length seq)) (count 1) + (test #'eq) (test-not nil) (key #'identity)) + (system::raw-position item seq test test-not key nil nil start end count)) +(defun position-if (pred seq &key (start 0) (end (length seq)) (count 1) (key #'identity)) + (system::raw-position nil seq nil nil key pred nil start end count)) +(defun position-if-not (pred seq &key (start 0) (end (length seq)) (count 1) (key #'identity)) + (system::raw-position nil seq nil nil key nil pred start end count)) + +(defun count (item seq &key (start 0) (end (length seq)) + (test #'eq) (test-not nil) (key #'identity)) + (system::raw-count item seq test test-not key nil nil start end)) +(defun count-if (pred seq &key (start 0) (end (length seq)) (key #'identity)) + (system::raw-count nil seq nil nil key pred nil start end)) +(defun count-if-not (pred seq &key (start 0) (end (length seq)) (key #'identity)) + (system::raw-count nil seq nil nil key nil pred start end)) +(defun member-if (test list &key (key #'identity)) + (while list + (if (funcall test (funcall key (car list))) + (return-from member-if list) + (setq list (cdr list))))) +(defun member-if-not (test list &key (key #'identity)) + (while list + (if (not (funcall test (funcall key (car list))) ) + (return-from member-if-not list) + (setq list (cdr list))))) +(defun collect-if (func seq &aux r) + (dolist (s seq) + (if (funcall func s) (push s r)) ) + (nreverse r) ) +(defun collect-instances (klass list) + (collect-if #'(lambda (i) (derivedp i klass)) (flatten list))) + +(defun pairlis (l1 l2 &optional alist) + (if l1 + (cons (cons (car l1) (car l2)) (pairlis (cdr l1) (cdr l2) alist)) + alist)) + +(defun transpose-list (dlist) + (let (r) + (dotimes (i (length (car dlist))) + (push (mapcar #'(lambda (x) (nth i x)) dlist) r)) + (nreverse r))) + +(defun make-list (leng &key initial-element) + (let (r) + (unless (integerp leng) (error "integer required for length of make-list")) + (dotimes (i leng r) + (push initial-element r)))) + +(defun make-sequence (type size &key initial-element) + (if (or (memq type '(cons list)) (eq type cons)) + (make-list size :initial-element initial-element) + (make-array size :element-type type :initial-element initial-element))) + +(defun fill (seq item &key (start 0) (end (length seq))) + (system::raw-fill seq item start end)) + +(defun replace (dest src &key (start1 0) (end1 (length dest)) + (start2 0) (end2 (length src))) + (let ((result dest) (count (min (- end1 start1) (- end2 start2)))) + (cond ((listp dest) + (setq dest (nthcdr start1 dest)) + (cond ((listp src) + (setq src (nthcdr start2 src)) + (dotimes (c count) + (setq (dest . car) (pop src)) + (pop dest))) + (t + (dotimes (c count) + (setq (dest . car) (aref src start2)) + (inc start2) (pop dest))))) + ((listp src) ; list --> vector + (setq src (nthcdr start2 src)) + (dotimes (c count) + (aset dest start1 (pop src)) + (inc start1))) + (t (system::vector-replace dest src start1 end1 start2 end2))) + result)) + +(defun remove (item seq &key (start 0) (end (length seq)) + (test #'eq) (test-not nil) + (count 1000000) (key #'identity)) + (system::universal-remove item seq test test-not key nil nil start end count)) +(defun remove-if (pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::universal-remove nil seq nil nil key pred nil start end count)) +(defun remove-if-not (pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::universal-remove nil seq nil nil key nil pred start end count)) + +(defun delete (item seq &key (start 0) (end (length seq)) + (test #'eq) (test-not nil) + (count 1000000) (key #'identity)) + (system::raw-delete item seq test test-not key nil nil start end count)) +(defun delete-if (pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::raw-delete nil seq nil nil key pred nil start end count)) +(defun delete-if-not (pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::raw-delete nil seq nil nil key nil pred start end count)) + +(defun substitute (newitem olditem seq &key (start 0) (end (length seq)) + (test #'eq) (test-not nil) + (count 1000000) (key #'identity)) + (system::raw-substitute newitem olditem seq test test-not key nil nil start end count)) +(defun substitute-if (newitem pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::raw-substitute newitem nil seq nil nil key pred nil start end count)) +(defun substitute-if-not (newitem pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::raw-substitute newitem nil seq nil nil key nil pred start end count)) + +(defun nsubstitute (newitem olditem seq &key (start 0) (end (length seq)) + (test #'eq) (test-not nil) + (count 1000000) (key #'identity)) + (system::raw-nsubstitute newitem olditem seq test test-not key nil nil start end count)) +(defun nsubstitute-if (newitem pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::raw-nsubstitute newitem nil seq nil nil key pred nil start end count)) +(defun nsubstitute-if-not (newitem pred seq &key (start 0) (end (length seq)) + (count 1000000) (key #'identity)) + (system::raw-nsubstitute newitem nil seq nil nil key nil pred start end count)) + +(defun unique (l) + (cond + ((atom (cdr l)) l) + ((memq (car l) (cdr l)) (unique (cdr l))) + (t (cons (car l) (unique (cdr l)))))) + +(defun remove-duplicates (seq &key (test #'eq) (test-not) (key #'identity) + (start 0) (end 1000000)) + (system::raw-remove-duplicates seq test test-not key start end)) + +(defun extream (seq test &optional (key #'identity)) + (if (null seq) + nil + (let* ((ext (elt seq 0)) (p (funcall key ext)) x) + (if (consp seq) + (dolist (v (cdr seq)) + (when (funcall test (funcall key v) p) + (setq ext v + p (funcall key ext))) ) + (dotimes (i (length seq)) + (when (funcall test + (funcall key (setq x (aref seq i))) + p) + (setq ext x + p (funcall key ext)))) ) + ext)) ) +) ;eval-when + + +;;; +;;; equivalent pairs from WINSTON +;;; + +#| +(eval-when (load eval) +(defun coalesce (pairs) (coalesce-aux pairs nil)) +(defun coalesce-aux (pairs classes) + (cond ((null pairs) classes) + (t (coalesce-aux (cdr pairs) + (absorb (car pairs) classes))))) +(defun stick-in (new classes) + (cond ((member new (car classes)) classes) + (t (cons (cons new (car classes)) + (cdr classes))))) +(defun absorb (pair classes) + (cond ((null classes) (list pair)) + ((member (car pair) (car classes)) + (stick-in (cadr pair) classes)) + ((member (cadr pair) (car classes)) + (stick-in (car pair) classes)) + (t (cons (car classes) + (absorb pair (cdr classes)))))) +) ;eval-when ; end of more list functions +|# + + +;;; +;;; LEO functions +;;; +(eval-when (load eval) +(defmacro send-super-lexpr (selector &rest msgs) + (declare (type metaclass class)) + `(apply #'send-message self (class . super) ,selector . ,msgs) + ) +(defmacro send-super* (&rest msgs) + (declare (type metaclass class)) + `(apply #'send-message self (class . super) . ,msgs) + ) +(defmacro send-lexpr (target selector &rest msgs) + `(apply #'send ,target ,selector . ,msgs) + ) +(defmacro send* (&rest msgs) + `(apply #'send . ,msgs) + ) +(defmacro send-super (selector &rest msgs) + (declare (type metaclass class)) + `(send-message self (class . super) ,selector ,@msgs)) + +(defun send-all (receivers &rest mesg) + (mapcar #'(lambda (r) (apply 'send r mesg)) receivers)) + +(defun resend (obj mesg) + (eval (cons 'send (cons obj mesg)))) + +(defmacro instance (cls &rest message) + (if message + (let ((v (gensym "INST"))) + `(let ((,v (instantiate ,cls))) (send ,v ,@message) ,v)) + `(instantiate ,cls))) + +(defmacro instance* (cls &rest message) + (if message + (let ((v (gensym "INST"))) + `(let ((,v (instantiate ,cls))) (send* ,v ,@message) ,v)) + `(instantiate ,cls))) + +(defun make-instance (klass &rest args) + (let ((inst (instantiate klass))) + (while args + (setslot inst klass (string (pop args)) (pop args))) + inst)) + +(defmacro defclassmethod (classname &rest methods) + `(defmethod ,(metaclass-name (class (symbol-value classname))) + . ,methods)) +(defun delete-method (classobj methodname) + (setf (metaclass-methods classobj) + (delete methodname (metaclass-methods classobj) :key #'car)) + (system::method-cache t)) + +;;; +;;; defclass macro (T.Matsui 1988-Jun) +;;; + +(defun make-class (name &key + (super object) + (include object) + (printer nil) + (constructor nil) + (predicate nil) + (copier nil) + ((:metaclass metaklass) nil) + (element-type nil) + (size -1) + ((:slots varlist) nil) + (documentation nil)) + (if (symbolp super) (setq super (symbol-value super))) + (let ((classobj (if (boundp name) (symbol-value name))) + (variables) (types) (forwards) + (etype) (index 0) (accessor) (p)) + (cond ((null (classp classobj)) + (cond + (metaklass) + ((classp metaklass)) + (super (setq metaklass (class super))) + (t (setq metaklass (symbol-value 'metaclass)))) + (setq classobj (instantiate metaklass))) + (t (setq metaklass (class classobj)))) + (setq variables (nreverse (coerce (super . vars) cons)) + types (nreverse (coerce (super . types) cons)) + forwards (nreverse (coerce (super . forwards) cons))) + (dolist (v varlist) + (cond ((consp v) + (if (member (car v) variables) + (error "duplicated object variable name")) + (push (car v) variables) + (setq p (position :type v)) + (push (if p (elt v (1+ p)) t) types) + (setq p (position :forward v)) + (push (if p (elt v (1+ p)) nil) forwards)) + ((symbolp v) + (if (member v variables) + (error "duplicated object variable name")) + (push v variables) + (push t types) + (push nil forwards)) + (t (error "variable name expected for :slots")))) + (setq variables (coerce (nreverse variables) vector) + types (coerce (nreverse types) vector) + forwards (coerce (nreverse forwards) vector)) + (setq etype (cdr (assq element-type + '((:BIT . 1) (:CHAR . 2) (:BYTE . 3) + (:INTEGER . 4) (:FLOAT . 5) (:FOREIGN . 6))))) + (if (null etype) + (setq etype (if (subclassp metaklass vectorclass) + (vectorclass-element-type super) + 0))) + (setq (classobj . name) name + (classobj . vars) variables + (classobj . types) types + (classobj . forwards) forwards + (classobj . super) super) + (if (subclassp metaklass vectorclass) + (setq (classobj . element-type) etype + (classobj . size) size)) + (if (null (classobj . cix)) (enter-class classobj)) +;;;??? +;;; (proclaim (list 'special name)) +;; (set name classobj) +;; (send name :global classobj) + (putprop name documentation :class-documentation) +;; define slot access functions and setf methods for all variables + (setq variables (coerce variables cons)) + (dolist (v variables) + (setq accessor (intern (concatenate string + (string name) "-" (string v)))) + (setf (symbol-function accessor) + `(macro (obj) (list 'slot obj ',name ,index))) + (incf index)) + classobj )) + + +(defmacro defstruct (name &rest slots) + `(progn + (send ',name :global + (make-class ',name :slots ',slots)) + ',name)) + + +(defmacro defclass (name &key slots + (super 'object) + (size -1) + ((:metaclass metaklass) nil) + element-type + documentation + (doc documentation)) + `(progn + (send ',name :global + (make-class ',name + :super ,super + :slots ',slots + :metaclass ,metaklass + :element-type ,element-type + :size ,size + :documentation ,doc) ) + ',name)) + + +;;; +;;; READTABLES +;;; +(eval-when (load eval) +(defun readtablep (x) (derivedp x readtable)) +(defun copy-readtable (&optional (from *readtable*) (to nil)) + (when (null from) (setq from *default-readtable*)) + (when (null to) + (setq to (instantiate readtable)) + (setf (readtable-syntax to) (instantiate string 256) + (readtable-macro to) (instantiate vector 256) + (readtable-dispatch-macro to) (instantiate vector 256))) + (if (or (null (readtablep from)) (null (readtablep to))) + (error "readtable expected")) + (replace (readtable-syntax to) (readtable-syntax from)) + (replace (readtable-macro to) (readtable-macro from)) + (replace (readtable-dispatch-macro to) (readtable-dispatch-macro from)) + (setf (readtable-case to) (readtable-case from)) + to) + +(defun set-syntax-from-char + (to-char from-char &optional (to-readtable *readtable*) + (from-readtable *default-readtable*)) + (let (syn) + (setq syn (aref (readtable-syntax from-readtable) from-char)) + (aset (readtable-syntax to-readtable) to-char syn) + (if (or (eq syn 7) (eq syn 8)) + (aset (readtable-macro to-readtable) to-char + (aref (readtable-macro from-readtable) from-char))) + syn)) +) + + +;; +;; predicates +;; +(eval-when (load eval) +(defun keywordp (sym) + (declare (type symbol sym)) + (and (symbolp sym) (eq (sym . homepkg) *keyword-package*))) + +(defun constantp (obj) + (declare (type symbol obj)) + (if (symbolp obj) + (if (or (keywordp obj) (eq (obj . vtype) 0)) t nil) + (if (listp obj) + (if (eq (car obj) 'quote) t nil) + (if (atom obj) t nil)))) + +(defun functionp (obj) + (cond ((numberp obj) nil) + ((listp obj) + (if (or (memq (car obj) '(lambda lambda-closure))) t nil)) + ((derivedp obj compiled-code) + (eq (compiled-code-type obj) 0)) + ((and (symbolp obj) (fboundp obj)) + (functionp (symbol-function obj))) + (t nil))) + +(defun vector-class-p (p) (derivedp p vectorclass)) +(defun compiled-function-p (x) (derivedp x compiled-code)) +(defun input-stream-p (obj) + (declare (stream obj)) + (or (and (derivedp obj stream) (eq (obj . direction) :input)) + (derivedp obj io-stream))) +(defun output-stream-p (obj) + (declare (stream obj)) + (or (and (derivedp obj stream) (eq (obj . direction) :output)) + (derivedp obj io-stream))) +(defun io-stream-p (obj) (derivedp obj io-stream)) + +(defun special-form-p (s) + (and (symbolp s) + (fboundp s) + (setq s (symbol-function s)) + (compiled-function-p s) + (eq (s . type) 2))) + +(defun macro-function (s) + (and (symbolp s) + (fboundp s) + (setq s (symbol-function s)) + (if (and (compiled-function-p s) + (eq (s . type) 1)) + s + (if (and (listp s) (eq (car s) 'macro)) s nil) + ))) + +(defun zerop (n) (= n 0)) +(defun plusp (n) (> n 0)) +(defun minusp (n) (< n 0)) +(defun oddp (n) (logbitp 0 n)) +(defun evenp (n) (not (logbitp 0 n))) +(defun /= (n1 n2) (not (= n1 n2))) +(defun logandc1 (x y) (logand (lognot x) y)) +(defun logandc2 (x y) (logand x (lognot y))) +(defmacro ecase (&rest x) (cons 'case x)) + +(defun every (pred arg &rest more-args) + (cond ((and (null more-args) (listp arg)) + (while arg (unless (funcall pred (pop arg)) (return-from every nil)))) + (t + (setq arg (cons arg more-args)) + (dotimes (i (length (car arg))) + (unless (apply pred (mapcar #'(lambda (x) (elt x i)) arg)) + (return-from every nil))))) + t) + +(defun some (pred arg &rest more-args &aux result) + (setq arg (cons arg more-args)) + (dotimes (i (length (car arg))) + (if (setq result (apply pred (mapcar #'(lambda (x) (elt x i)) arg))) + (return-from some result))) + nil) +) + +(eval-when (load eval) +(defun reduce (func seq &key (start 0) (end (length seq)) + from-end initial-value) + (let ((length (- end start))) + (when from-end (setq seq (reverse seq))) + (cond + ((and (= length 1) (null initial-value)) (elt seq start)) + ((= length 0) + (if initial-value initial-value (funcall func))) + (t + (unless initial-value + (setq initial-value + (funcall func (elt seq start) (elt seq (inc start)))) + (dec length 2) (inc start)) + (dotimes (i length) + (setq initial-value + (funcall func initial-value (elt seq (+ start i))))) + initial-value)))) + +(defun merge-list (list1 list2 pred key &aux result p1 e1 e2 pp1 pp2) + (while (and list2 (not (funcall pred (funcall key (car list1)) + (funcall key (car list2))))) + (push (pop list2) result)) + (setq result (nreverse result)) + (setq p1 list1) + (while (and list2 (cdr p1)) + (setq e2 (funcall key (car list2))) + (while (and p1 (funcall pred (funcall key (cadr p1)) e2)) (pop p1)) + (when p1 + (setf pp1 (cdr p1) + pp2 (cdr list2) + (cdr p1) list2 + (cdr list2) pp1 + p1 list2 + list2 pp2)) ) + (nconc result list1 list2)) + +(defun merge (result-class seq1 seq2 pred &key (key #'identity)) + (if (and (eq result-class cons) (listp seq1) (listp seq2)) + (merge-list seq1 seq2 pred key) + (let* ((l1 (length seq1)) (l2 (length seq2)) (l (+ l1 l2)) + (result (make-sequence result-class l)) + (i1 0) (i2 0) (j 0) (e1) (e2) (e)) + (while (< j l) + (cond ((>= i1 l1) (setq e (elt seq2 i2)) (inc i2)) + ((>= i2 l2) (setq e (elt seq1 i1)) (inc i1)) + (t (setq e1 (elt seq1 i1) + e2 (elt seq2 i2)) + (if (funcall pred (funcall key e1) (funcall key e2)) + (progn (inc i1) (setq e e1)) + (progn (inc i2) (setq e e2))))) + (setf (elt result j) e) + (inc j)) + result))) +) + + +;; +;; arithmetics aux +;; + +(defun expt (a x) + (cond ((and (integerp x) (>= x 0)) + (if (zerop x) + 1 + (let ((b a) (y 1) (ix (1- x))) + (declare (integer y ix)) + (while (> ix 0) + (cond ((> ix y) + (setq b (* b b) + ix (- ix y) + y (ash y 1))) + (t (setq b (* b a) ix (1- ix))))) + b))) + (t (exp (* x (log a)))))) +(defun signum (x) (if (zerop x) x (/ x (abs x)))) +(defun rad2deg (rad) (/ (* 360.0 rad) 2pi)) +(defun deg2rad (deg) (/ (* 2pi deg) 360.0)) +) + +;;;; (C) Copyright Taiichi Yuasa and Masami Hagiya, 1984. All rights reserved. +;;;; +;;;; setf routines +;;;; Modified by T.Matsui to be run on euslisp +;;;; 1988-Jun-27 + +;;; DEFSETF macro. +(defmacro defsetf (access-fn &rest rest) + (cond ((and (car rest) (or (symbolp (car rest)) (functionp (car rest)))) + `(progn (putprop ',access-fn ',(car rest) 'setf-update-fn) + (remprop ',access-fn 'setf-lambda) + (remprop ',access-fn 'setf-method) + (putprop ',access-fn + ,(when (not (endp (cdr rest))) + (unless (stringp (cadr rest)) + (error "A doc-string expected.")) + (unless (endp (cddr rest)) + (error "Extra arguments.")) + (cadr rest)) + 'setf-documentation) + ',access-fn)) + (t + (unless (= (list-length (cadr rest)) 1) + (error "(store-variable) expected.")) + `(progn (putprop ',access-fn ',rest 'setf-lambda) + (remprop ',access-fn 'setf-update-fn) + (remprop ',access-fn 'setf-method) +; (putprop ',access-fn +; ,(find-documentation (cddr rest)) +; 'setf-documentation) + ',access-fn)))) + + +;;; DEFINE-SETF-METHOD macro. +(defmacro define-setf-method (access-fn &rest rest) + `(progn (putprop ',access-fn #'(lambda ,@rest) 'setf-method) + (remprop ',access-fn 'setf-lambda) + (remprop ',access-fn 'setf-update-fn) +; (putprop ',access-fn +; ,(find-documentation (cdr rest)) +; 'setf-documentation) + ',access-fn)) + +;;; The expansion function for SETF. +(defun setf-expand-1 (place newvalue) + (let (g) + (setq place (macroexpand place)) + (cond ((and (consp place) (eq (car place) 'the)) + (setf-expand-1 (caddr place) `(the ,(cadr place) ,newvalue))) + ((symbolp place) `(setq ,place ,newvalue)) + ((and (symbolp (car place)) (setq g (get (car place) 'setf-update-fn))) + `(,g ,@(cdr place) ,newvalue)) + ((and (symbolp (car place)) + (setq g (get (car place) 'structure-access)) + (get (car place) 'setf-lambda) + (not (eq (car g) 'list)) + (not (eq (car g) 'vector))) + `(system::structure-set ,(cadr place) ',(car g) ,(cdr g) ,newvalue)) + ((macro-function (car place)) + (setf-expand-1 (macroexpand place) newvalue)) + ((setq g (get (car place) 'setf-lambda)) + (apply (append '(lambda) (list (append (cadr g) (car g))) (cddr g)) + newvalue (cdr place))) +; ((get (car place) 'setf-method) +; (apply (get (car form) 'setf-method) (cdr place))) + (t (error "SETF?"))))) + +(defun setf-expand (l) + (cond ((endp l) nil) + ((endp (cdr l)) (error "~S is an illegal SETF form." l)) + (t + (cons (setf-expand-1 (car l) (cadr l)) + (setf-expand (cddr l)))))) + + +;;; SETF macro. +(defmacro setf (&rest rest) + (cond ((endp rest) nil) + ((endp (cdr rest)) (error "~S is an illegal SETF form." rest)) + ((endp (cddr rest)) (setf-expand-1 (car rest) (cadr rest))) + (t (cons 'progn (setf-expand rest))))) + +;(defmacro incf (form &optional (d 1)) +; `(setf ,form (+ ,form ,d))) +;(defmacro decf (form &optional (d 1)) +; `(setf ,form (- ,form ,d))) + +;;; +;;; MULTI-VALUE simulation macros +;;; +(defmacro multiple-value-bind (vlist init &rest forms) + (let* ((inits (gensym "MULT")) (vilist) (count 0)) + (dolist (v vlist) + (push (list v `(elt ,inits ,count)) vilist) + (inc count)) + `(let* ((,inits ,init) . ,vilist) . ,forms))) + +(defmacro multiple-value-setq (vlist form) + (let ((i 0) (tempvar (gensym "MULT")) setq-forms) + (dolist (v vlist) + (push (list + (second + (assoc i + '((0 first) (1 second) (2 third) + (3 fourth)(4 fifth) (5 sixth) (6 seventh)))) + tempvar) + setq-forms) + (push v setq-forms) + (incf i)) + `(let ((,tempvar ,form)) + (setq . ,setq-forms)))) + +(alias 'values 'list) + +#| +(defun quick-sort (sequence start end predicate key &aux (j 0) (k 0) exch) + (declare (fixnum start end j k)) + (when (<= end (the fixnum (1+ start))) + (return-from quick-sort sequence)) + (setq j start) + (setq k (1- end)) + (do ((d (aref sequence start))) + ((> j k)) + (do () + ((or (> j k) + (funcall predicate + (funcall key (aref sequence k)) + (funcall key d)))) + (decf k)) + (when (< k start) + (quick-sort sequence (1+ start) end predicate key) + (return-from quick-sort sequence)) + (do () + ((or (> j k) + (not (funcall predicate + (funcall key (aref sequence j)) + (funcall key d))))) + (incf j)) + (when (> j k) (return)) + (setf exch (aref sequence k) + (aref sequence k) (aref sequence j) + (aref sequence j) exch) + (incf j) + (decf k)) + (quick-sort sequence start j predicate key) + (quick-sort sequence j end predicate key) + sequence) + +(defun qsort (seq test &optional (key #'identity) &aux (vec nil) (s nil)) + (cond ((null seq) nil) + ((listp seq) + (setq vec (coerce seq vector)) + (quick-sort vec 0 (length seq) test key) + (setq s seq) + (dotimes (i (length vec)) + (rplaca s (aref vec i)) + (setq s (cdr s))) + seq) + ((vectorp seq) + (quick-sort seq 0 (length seq) test key) + seq) )) +|# + +#| +(eval-when (load eval) + (defmacro pop (s) `(prog1 (car ,s) (setf ,s (cdr ,s)))) + (defmacro push (item place) `(setf ,place (cons ,item ,place))) + ) +|# + + diff --git a/samples/Common Lisp/hello.lisp b/samples/Common Lisp/hello.lisp new file mode 100644 index 00000000..642cdd29 --- /dev/null +++ b/samples/Common Lisp/hello.lisp @@ -0,0 +1,2 @@ +(DEFUN HELLO () + (PRINT 'HELLO)) diff --git a/samples/D/mpq.d b/samples/D/mpq.d new file mode 100644 index 00000000..d72c2d2a --- /dev/null +++ b/samples/D/mpq.d @@ -0,0 +1,318 @@ +/* + * mpq.d -- D programming language module for libmpq + * + * Copyright (c) 2008 Georg Lukas + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * This module is written to support Phobos. Patches to allow binding to + * Tango are welcome. + */ + +module mpq; + +/* the following pragma does not work on DMD/Linux, generates a warning on + * GDC/Linux and has not been tested on Windows. Commented out for now. */ +// pragma(lib, "libmpq"); + +import std.string; // for format() and toStringz() +import std.traits; // for ParameterTypeTuple!() + +/* XXX: this assumes that libmpq is compiled with Large File Support on */ +alias long off_t; + +/* libmpq error return values */ +const LIBMPQ_ERROR_OPEN = -1; /* open error on file. */ +const LIBMPQ_ERROR_CLOSE = -2; /* close error on file. */ +const LIBMPQ_ERROR_SEEK = -3; /* lseek error on file. */ +const LIBMPQ_ERROR_READ = -4; /* read error on file. */ +const LIBMPQ_ERROR_WRITE = -5; /* write error on file. */ +const LIBMPQ_ERROR_MALLOC = -6; /* memory allocation error. */ +const LIBMPQ_ERROR_FORMAT = -7; /* format errror. */ +const LIBMPQ_ERROR_NOT_INITIALIZED = -8; /* init() wasn't called. */ +const LIBMPQ_ERROR_SIZE = -9; /* buffer size is to small. */ +const LIBMPQ_ERROR_EXIST = -10; /* file or block does not exist in archive. */ +const LIBMPQ_ERROR_DECRYPT = -11; /* we don't know the decryption seed. */ +const LIBMPQ_ERROR_UNPACK = -12; /* error on unpacking file. */ + +/** libmpq internal meta-data for an archive */ +extern struct mpq_archive_s; + +extern(C) { + +/* libmpq__generic information about library. */ +char *libmpq__version(); + +/* libmpq__generic mpq archive information. */ +int libmpq__archive_open(mpq_archive_s **mpq_archive, char *mpq_filename, off_t archive_offset); +int libmpq__archive_close(mpq_archive_s *mpq_archive); +int libmpq__archive_packed_size(mpq_archive_s *mpq_archive, off_t *packed_size); +int libmpq__archive_unpacked_size(mpq_archive_s *mpq_archive, off_t *unpacked_size); +int libmpq__archive_offset(mpq_archive_s *mpq_archive, off_t *offset); +int libmpq__archive_version(mpq_archive_s *mpq_archive, uint *version_); +int libmpq__archive_files(mpq_archive_s *mpq_archive, uint *files); + +/* libmpq__generic file processing functions. */ +int libmpq__file_packed_size(mpq_archive_s *mpq_archive, uint file_number, off_t *packed_size); +int libmpq__file_unpacked_size(mpq_archive_s *mpq_archive, uint file_number, off_t *unpacked_size); +int libmpq__file_offset(mpq_archive_s *mpq_archive, uint file_number, off_t *offset); +int libmpq__file_blocks(mpq_archive_s *mpq_archive, uint file_number, uint *blocks); +int libmpq__file_encrypted(mpq_archive_s *mpq_archive, uint file_number, uint *encrypted); +int libmpq__file_compressed(mpq_archive_s *mpq_archive, uint file_number, uint *compressed); +int libmpq__file_imploded(mpq_archive_s *mpq_archive, uint file_number, uint *imploded); +int libmpq__file_number(mpq_archive_s *mpq_archive, char *filename, uint *number); +int libmpq__file_read(mpq_archive_s *mpq_archive, uint file_number, ubyte *out_buf, off_t out_size, off_t *transferred); + +/* libmpq__generic block processing functions. */ +int libmpq__block_open_offset(mpq_archive_s *mpq_archive, uint file_number); +int libmpq__block_close_offset(mpq_archive_s *mpq_archive, uint file_number); +int libmpq__block_unpacked_size(mpq_archive_s *mpq_archive, uint file_number, uint block_number, off_t *unpacked_size); +int libmpq__block_read(mpq_archive_s *mpq_archive, uint file_number, uint block_number, ubyte *out_buf, off_t out_size, off_t *transferred); + +} + + +/** exception class for failed libmpq calls */ +class MPQException : Exception { + const string[] Errors = [ + "unknown error", + "open error on file", + "close error on file", + "lseek error on file", + "read error on file", + "write error on file", + "memory allocation error", + "format errror", + "init() wasn't called", + "buffer size is to small", + "file or block does not exist in archive", + "we don't know the decryption seed", + "error on unpacking file"]; + + public int errno; + this(char[] fnname = "unknown_function", int errno = 0) { + + this.errno = errno; + if (-errno >= Errors.length) + errno = 0; + super(std.string.format("Error in %s(): %s (%d)", + fnname, Errors[-errno], errno)); + } +} + + +/** template to wrap function calls and throw exceptions in case of error + * + * thanks for the idea to while(nan) blog, + * http://while-nan.blogspot.com/2007/06/wrapping-functions-for-fun-and-profit.html + * + * use: MPQ_CHECKERR(libmpq__archive_open)(&m, "foo.mpq", -1); + * returns the retval of archive_open on success; + * throws an MPQException on failure. + * + * @param Fn libmpq__function reference + * @param args libmpq__function parameters + * @return return value of libmpq__function on success + * @throw MPQException on error + */ +int MPQ_CHECKERR(alias Fn)(ParameterTypeTuple!(Fn) args) +{ + int result = Fn(args); + if (result < 0) { + /* XXX: relying on non-specified stringof() behaviour */ + throw new MPQException((&Fn).stringof[2..$], result); + } + return result; +} + + +/** mixin alias to wrap library functions into MPQ_CHECKERR. + * + * alias mpq.func_name(...) to MPQ_CHECKERR(libmpq__func_name)(...) + * @param func_name name of the function to be wrapped + */ +template MPQ_FUNC(char[] func_name) { + const char[] MPQ_FUNC = "alias MPQ_CHECKERR!(libmpq__" ~ func_name ~ ") " ~ func_name ~ ";"; +} + +alias libmpq__version libversion; /* must be direct alias because it returns char*, not error int */ +mixin(MPQ_FUNC!("archive_open")); +mixin(MPQ_FUNC!("archive_close")); +mixin(MPQ_FUNC!("archive_packed_size")); +mixin(MPQ_FUNC!("archive_unpacked_size")); +mixin(MPQ_FUNC!("archive_offset")); +mixin(MPQ_FUNC!("archive_version")); +mixin(MPQ_FUNC!("archive_files")); +mixin(MPQ_FUNC!("file_packed_size")); +mixin(MPQ_FUNC!("file_unpacked_size")); +mixin(MPQ_FUNC!("file_offset")); +mixin(MPQ_FUNC!("file_blocks")); +mixin(MPQ_FUNC!("file_encrypted")); +mixin(MPQ_FUNC!("file_compressed")); +mixin(MPQ_FUNC!("file_imploded")); +mixin(MPQ_FUNC!("file_number")); +mixin(MPQ_FUNC!("file_read")); +mixin(MPQ_FUNC!("block_open_offset")); +mixin(MPQ_FUNC!("block_close_offset")); +mixin(MPQ_FUNC!("block_unpacked_size")); +mixin(MPQ_FUNC!("block_read")); + +/** getter function named name for returning archive_* single values: + * + * Archive.() { return libmpq__archive_() } + * + * @param type return type for the original function reference + * @param name name of the original function + * @param name2 name for the prototype (defaults to name, used for "version") + * @return getter function mixin + */ +template MPQ_A_GET(char[] type, char[] name, char[] name2 = name) { + const char[] MPQ_A_GET = type ~ " " ~ name2 ~ "() { " ~ + type ~ " ret; " ~ + "archive_" ~ name ~ "(m, &ret); return ret;" ~ + "}"; +} + +/** wrapper class for an MPQ Archive + * + * syntax: auto a = new mpq.Archive("somefile.mpq"); + */ +class Archive { + mpq_archive_s *m; + File listfile; + char[][] listfiledata; + + this(char[] archivename, off_t offset = -1) { + archive_open(&m, toStringz(archivename), offset); + } + + mixin(MPQ_A_GET!("off_t", "packed_size")); + mixin(MPQ_A_GET!("off_t", "unpacked_size")); + mixin(MPQ_A_GET!("off_t", "offset")); + mixin(MPQ_A_GET!("uint", "version", "version_")); + mixin(MPQ_A_GET!("uint", "files")); + + ~this() { + archive_close(m); + } + + mpq_archive_s* archive() { + return m; + } + + File opIndex(char[] fname) { + return new File(this, fname); + } + File opIndex(int fno) { + return new File(this, fno); + } + + char[][] filelist() { + try { + if (!listfile) { + listfile = this["(listfile)"]; + listfiledata = (cast(char[])listfile.read()).splitlines(); + } + return listfiledata; + } catch (MPQException e) { + return []; + } + } + + /+uint filenumber(char[] filename) { + try { + if (!listfile) { + listfile = this["(listfile)"]; + listfiledata = (cast(char[])listfile.read()).splitlines(); + } + return listfiledata; + } catch (MPQException e) { + return []; + } + }+/ + +} + + +/** getter function named name for returning file_* single values: + * + * File.() { return libmpq__file_() } + * + * @param type return type for the original function reference + * @param name name of the original function + * @param name2 name for the prototype (defaults to name, used for "version") + * @return getter function mixin + */ +template MPQ_F_GET(char[] type, char[] name, char[] name2 = name) { + const char[] MPQ_F_GET = type ~ " " ~ name2 ~ "() { " ~ + type ~ " ret; " ~ + "file_" ~ name ~ "(am, fileno, &ret); " ~ + "return ret;" ~ + "}"; +} + +/** wrapper class for a single file in an MPQ Archive + * + * syntax: + * auto a = new mpq.Archive("somefile.mpq"); + * auto f = a["(listfile)"]; + * auto f2 = a[0]; + * auto f3 = new File(a, "(listfile)"); + */ +class File { + Archive a; + mpq_archive_s* am; + char[] filename; + uint fileno; + + this(Archive a, int fileno) { + this.a = a; + this.am = a.archive(); + if (fileno >= a.files) { + throw new MPQException(format("File(%d)", fileno), + LIBMPQ_ERROR_EXIST); + } + this.filename = format("file%04d.xxx", fileno); + this.fileno = fileno; + } + + this(Archive a, char[] filename) { + this.a = a; + this.am = a.archive(); + this.filename = filename; + /* this line will throw an exception when the file is not there */ + mpq.file_number(am, toStringz(filename), &this.fileno); + } + + mixin(MPQ_F_GET!("off_t", "packed_size")); + mixin(MPQ_F_GET!("off_t", "unpacked_size")); + mixin(MPQ_F_GET!("off_t", "offset")); + mixin(MPQ_F_GET!("uint", "blocks")); + mixin(MPQ_F_GET!("uint", "encrypted")); + mixin(MPQ_F_GET!("uint", "compressed")); + mixin(MPQ_F_GET!("uint", "imploded")); + + uint no() { return fileno; } + char[] name() { return filename; } + + ubyte[] read() { + ubyte[] content; + content.length = this.unpacked_size(); + off_t trans; + mpq.file_read(am, fileno, content.ptr, content.length, &trans); + content.length = trans; + return content; + } +} diff --git a/samples/DIGITAL Command Language/fis_gtm_kitinstal.com b/samples/DIGITAL Command Language/fis_gtm_kitinstal.com new file mode 100644 index 00000000..b4701ff9 --- /dev/null +++ b/samples/DIGITAL Command Language/fis_gtm_kitinstal.com @@ -0,0 +1,443 @@ +$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +$! ! +$! Copyright 2001, 2011 Fidelity Information Services, Inc ! +$! ! +$! This source code contains the intellectual property ! +$! of its copyright holder(s), and is made available ! +$! under a license. If you do not know the terms of ! +$! the license, please stop and do not read further. ! +$! ! +$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! +$! +$! +$! KITINSTAL.COM PROCEDURE FOR THE GT.M PRODUCT +$! +$ ON CONTROL_Y THEN VMI$CALLBACK CONTROL_Y +$! ON WARNING THEN EXIT $STATUS !! allow warning errors for INSTALL REPLACE +$ IF P1 .EQS. "VMI$_INSTALL" THEN GOTO INSTALL +$ IF P1 .EQS. "VMI$_POSTINSTALL" THEN GOTO POSTINSTALL +$ IF P1 .EQS. "VMI$_IVP" THEN GOTO IVP +$ EXIT VMI$_UNSUPPORTED +$! +$INSTALL: +$ TYPE SYS$INPUT + + GT.M (c) COPYRIGHT 1985 - 2000 by Sanchez Computer Associates + ALL RIGHTS RESERVED + +$! the following 2 lines must be maintained +$ GTM$VMS_VERSION :== 072 ! Minimum VMS version required +$ ALPHA = (f$getsyi("arch_name") .eqs. "Alpha") +$ IF ALPHA +$ THEN +$ GTM$DISK_SPACE == 28000 ! Minumum disk space on system disk required +$ ELSE +$ GTM$DISK_SPACE == 16000 ! Minumum disk space on system disk required +$ ENDIF +$ IF F$ELEMENT(0,",",VMI$VMS_VERSION) .EQS. "RELEASED" +$ THEN +$ GTM$VMS_IS == F$ELEMENT(1,",",VMI$VMS_VERSION) +$ IF GTM$VMS_IS .LTS. GTM$VMS_VERSION +$ THEN +$ VMI$CALLBACK MESSAGE E VMSMISMATCH "This GT.M kit requires an existing VMS''GTM$VMS_VERSION' system." +$ EXIT VMI$_FAILURE +$ ENDIF +$ ELSE +$ GTM$VMS_IS :== +$ WRITE SYS$OUTPUT " No VMS version checking performed for field test versions." +$ ENDIF +$ IF (GTM$VMS_IS .GES. "052") THEN T1 = F$VERIFY(VMI$KIT_DEBUG) +$ VMI$CALLBACK CHECK_NET_UTILIZATION GTM$ROOM 'GTM$DISK_SPACE' +$ IF .NOT. GTM$ROOM +$ THEN +$ VMI$CALLBACK MESSAGE E NOSPACE "There is not enough disk space -- GT.M needs ''GTM$DISK_SPACE' blocks." +$ EXIT VMI$_FAILURE +$ ENDIF +$! setup default answers +$ GTM$DOPURGE :== YES +$ GTM$RUN_IVP :== YES +$ GTM$STD_CNF :== YES +$ GTM$DST_OWN :== SYSTEM +$ IF F$IDENTIFIER(GTM$DST_OWN,"NAME_TO_NUMBER") .EQ. 0 THEN GTM$DST_OWN :== 1,4 +$ GTM$SYS_DST :== YES +$ GTM$DST_DIR :== GTM_DIST +$ GTM$DST_CRE == GTM$DST_DIR +$ GTM$DST_DEV :== +$ GTM$STARTDB :== YES +$ GTM$MGR_COM :== YES +$ GTM$HLP_DIR :== NO +$ GTM$DEF_DCL :== YES +$ GTM$DEF_SYS :== YES +$ GTM$LNK_LOG :== YES +$ GTM$INSTALL :== YES +$ GTM$DEF_GLD :== YES +$ GTM$GBL_DIR :== MUMPS.GLD +$ GTM$DEF_RTN :== YES +$ GTM$RTN_DIR :== [],GTM$DIST: +$ GTM$PCT_RTN :== YES +$ VMI$CALLBACK ASK GTM$DOPURGE "Do you want to purge files replaced by this installation" 'GTM$DOPURGE' B - + "@VMI$KWD:GTMKITHLP HELP_PURGE" +$ IF .NOT. GTM$DOPURGE THEN VMI$CALLBACK SET PURGE NO +$ VMI$CALLBACK ASK GTM$STD_CNF "Do you want the standard GT.M configuration (performs INSTALL)" 'GTM$STD_CNF' B - + "@VMI$KWD:GTMKITHLP HELP_STD_CNF" +$ IF GTM$STD_CNF +$ THEN +$ GTM$SYS_DST == 1 +$ GTM$STARTDB == 1 +$ GTM$MGR_COM == 1 +$ GTM$HLP_DIR == 0 +$ GTM$DEF_DCL == 1 +$ GTM$DEF_SYS == 1 +$ GTM$INSTALL == 1 +$ GTM$LNK_LOG == 1 +$ GTM$INSTALL == 1 +$ GTM$DEF_GLD == 1 +$ GTM$DEF_RTN == 1 +$ GTM$PCT_RTN == 1 +$ GTM$DST_LOG :== SYS$COMMON:['GTM$DST_DIR'] +$ GTM$DIR_TYPE :== COMMON +$ ELSE ! Not standard configuration +$ VMI$CALLBACK ASK GTM$DST_OWN "What UIC should own the GT.M distribution" 'GTM$DST_OWN' S "@VMI$KWD:GTMKITHLP HELP_DST_OWN" +$ GTM$DST_OWN == GTM$DST_OWN - "[" - "]" +$ VMI$CALLBACK ASK GTM$SYS_DST "Do you want the GT.M distribution to go into a System Directory" 'GTM$SYS_DST' B - + "@VMI$KWD:GTMKITHLP HELP_SYS_DST" +$ IF GTM$SYS_DST +$ THEN +$ VMI$CALLBACK ASK GTM$DST_DIR "In what System Directory do you want to place GT.M" 'GTM$DST_DIR' S - + "@VMI$KWD:GTMKITHLP HELP_SYS_DIR" +$ GTM$DST_DIR == GTM$DST_DIR - "[" - "]" +$ GTM$DST_CRE == GTM$DST_DIR +$ GTM$DST_LOG :== SYS$COMMON:['GTM$DST_DIR'] +$ GTM$DIR_TYPE :== COMMON +$ ELSE ! Not system disk +$ VMI$CALLBACK ASK GTM$DST_DEV "On which device do you want to place GT.M" "''GTM$DST_DEV'" S "@VMI$KWD:GTMKITHLP HELP_DST_DEV" +$ VMI$CALLBACK ASK GTM$DST_DIR "In what directory on that device do you want to place GT.M" 'GTM$DST_DIR' S - + "@VMI$KWD:GTMKITHLP HELP_DST_DIR" +$ GTM$DST_DEV == GTM$DST_DEV - ":" +$ GTM$DST_DIR == GTM$DST_DIR - "[" - "]" +$ GTM$DST_LOG :== 'GTM$DST_DEV':['GTM$DST_DIR'] +$ GTM$DST_CRE == GTM$DST_LOG +$ GTM$DIR_TYPE :== USER +$ ENDIF ! system disk +$ VMI$CALLBACK ASK GTM$STARTDB "Do you want GTMSTART.COM in the startup database" 'GTM$STARTDB' B - + "@VMI$KWD:GTMKITHLP HELP_STARTDB" +$ IF .NOT. GTM$STARTDB +$ THEN +$ VMI$CALLBACK ASK GTM$MGR_COM "Do you want the GT.M .COM files in SYS$MANAGER" 'GTM$MGR_COM' B - + "@VMI$KWD:GTMKITHLP HELP_MGR_COM" +$ ENDIF +$ VMI$CALLBACK ASK GTM$HLP_DIR "Do you want the GT.M help files in SYS$HELP" 'GTM$HLP_DIR' B "@VMI$KWD:GTMKITHLP HELP_HLP_DIR" +$ VMI$CALLBACK ASK GTM$DEF_DCL "Do you want to define GT.M commands to the system" 'GTM$DEF_DCL' B - + "@VMI$KWD:GTMKITHLP HELP_DEF_DCL" +$ VMI$CALLBACK ASK GTM$DEF_SYS "Do you want to define GT.M logical names in the System Table" 'GTM$DEF_SYS' B - + "@VMI$KWD:GTMKITHLP HELP_DEF_SYS" +$ VMI$CALLBACK ASK GTM$LNK_LOG "Do you want to define the LNK$LIBRARY logical names" 'GTM$LNK_LOG' B - + "@VMI$KWD:GTMKITHLP HELP_LNK_LOG" +$ VMI$CALLBACK ASK GTM$RUN_IVP "Do you want to run the IVP (performs INSTALL)" 'GTM$RUN_IVP' B - + "@VMI$KWD:GTMKITHLP HELP_RUN_IVP" +$ IF GTM$RUN_IVP +$ THEN +$ GTM$PCT_RTN == 1 +$ ELSE +$ VMI$CALLBACK ASK GTM$PCT_RTN "Do you want to compile the GT.M percent routines (performs INSTALL)" 'GTM$PCT_RTN' B - + "@VMI$KWD:GTMKITHLP HELP_PCT_RTN" +$ ENDIF +$ IF (GTM$RUN_IVP .OR. GTM$PCT_RTN) +$ THEN +$ GTM$INSTALL == 1 +$ ELSE +$ VMI$CALLBACK ASK GTM$INSTALL "Do you want to INSTALL the GT.M shareable images now" 'GTM$INSTALL' B - + "@VMI$KWD:GTMKITHLP HELP_INSTALL" +$ ENDIF +$ VMI$CALLBACK ASK GTM$DEF_RTN "Do you want to have a default definition for GTM$ROUTINES" 'GTM$DEF_RTN' B - + "@VMI$KWD:GTMKITHLP HELP_DEF_RTN" +$ IF GTM$DEF_RTN +$ THEN +$ VMI$CALLBACK ASK GTM$RTN_DIR "What is the search specification for GTM$ROUTINES" 'GTM$RTN_DIR' S - + "@VMI$KWD:GTMKITHLP HELP_RTN_DIR" +$ ENDIF +$ VMI$CALLBACK ASK GTM$DEF_GLD "Do you want to have a default definition for GTM$GBLDIR" 'GTM$DEF_GLD' B - + "@VMI$KWD:GTMKITHLP HELP_DEF_GLD" +$ IF GTM$DEF_GLD +$ THEN +$ VMI$CALLBACK ASK GTM$GBL_DIR "What is the file specification for GTM$GBLDIR" 'GTM$GBL_DIR' S - + "@VMI$KWD:GTMKITHLP HELP_GBL_DIR" +$ ENDIF +$ ENDIF ! standard configuration +$! tell them what's happening +$ IF GTM$MGR_COM +$ THEN +$ WRITE SYS$OUTPUT " The following command files are created and copied to SYS$MANAGER:" +$ ELSE +$ WRITE SYS$OUTPUT " The following command files are created:" +$ ENDIF +$ TYPE SYS$INPUT + + GTMINSTALL.COM + GTMLOGICALS.COM + GTMLOGIN.COM + GTMSTART.COM + GTMSTOP.COM + + Each file contains its own user documentation. + + All the questions have been asked. Installation now proceeds without your + manual intervention for about 10-15 minutes. +$ IF GTM$RUN_IVP THEN WRITE SYS$OUTPUT " Finally the Installation Verification Procedure tests the installation." +$ WRITE SYS$OUTPUT "" +$ VMI$CALLBACK CREATE_DIRECTORY 'GTM$DIR_TYPE' 'GTM$DST_CRE' "/OWNER_UIC=[''GTM$DST_OWN'] /PROTECTION=(WO:RE)" +$ VMI$CALLBACK RESTORE_SAVESET B +$ VMI$CALLBACK RESTORE_SAVESET C +$ WRITE SYS$OUTPUT "" +$ VMI$CALLBACK MESSAGE I CRECOM "Creating command files." +$! Create GTMINSTALL.COM +$ OPEN /WRITE OUFILE VMI$KWD:GTMINSTALL.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMINSTALL.COM installs GTMSECSHR and other GT.M images." +$ WRITE OUFILE "$! GTMSECSHR is a small protected image and must be installed." +$ WRITE OUFILE "$! GTMSHR is the run-time library and is installed for performance." +$ WRITE OUFILE "$! GTM$DMOD and MCOMPILE are small images frequently used in development." +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$ INSTALL" +$ WRITE OUFILE "REPLACE /OPEN/SHARED/HEADER/PROTECTED GTMSECSHR" +$ WRITE OUFILE "REPLACE /OPEN/SHARED/HEADER GTMSHR" +$ WRITE OUFILE "REPLACE /OPEN/SHARED/HEADER GTM$DMOD" +$ WRITE OUFILE "REPLACE /OPEN/SHARED/HEADER MCOMPILE" +$ WRITE OUFILE "$ EXIT" +$ CLOSE OUFILE +$! Create GTMLOGICALS.COM +$ GTM$HLP_LOG :== GTM$DIST +$ IF GTM$HLP_DIR THEN GTM$HLP_LOG :== SYS$HELP +$ OPEN /WRITE OUFILE VMI$KWD:GTMLOGICALS.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMLOGICALS.COM defines the logical names required to use GT.M." +$ WRITE OUFILE "$! By default the definitions are placed in the PROCESS table." +$ WRITE OUFILE "$! Parameter 1, if supplied should be the name of a logical name table" +$ WRITE OUFILE "$! and/or the mode of definition." +$ WRITE OUFILE "$! Assignments in a ""permanent"" table reduce GT.M activation time." +$ WRITE OUFILE "$!" +$ IF GTM$LNK_LOG THEN WRITE OUFILE "$! The LNK$LIBRARY names many require adjustment to your environment." +$ IF GTM$DEF_GLD THEN WRITE OUFILE "$! GTM$GBLDIR is defined to provide default access to a global directory." +$ IF GTM$DEF_RTN THEN WRITE OUFILE "$! GTM$ROUTINES is defined to provide access to the GT.M utilities." +$ IF GTM$DEF_RTN THEN WRITE OUFILE "$! You may wish to define a different structure for $ZROUTINES." +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$ IF (P1 .NES. """") .AND. (F$EXTRACT(0,1,P1) .NES. ""/"") THEN P1 := /'P1" +$ WRITE OUFILE "$ DEFINE 'P1' GTM$DIST ''GTM$DST_LOG'" +$ IF GTM$DEF_GLD THEN WRITE OUFILE "$ DEFINE 'P1' GTM$GBLDIR ''GTM$GBL_DIR'" +$ IF GTM$DEF_RTN THEN WRITE OUFILE "$ DEFINE 'P1' GTM$ROUTINES ""''GTM$RTN_DIR'""" +$ WRITE OUFILE "$ DEFINE 'P1' GTM$HELP ''GTM$HLP_LOG'" +$ WRITE OUFILE "$ DEFINE 'P1' GTMSHR GTM$DIST:GTMSHR.EXE" +$ WRITE OUFILE "$ DEFINE 'P1' GTMSECSHR GTM$DIST:GTMSECSHR.EXE" +$ WRITE OUFILE "$ DEFINE 'P1' GTM$DMOD GTM$DIST:GTM$DMOD.EXE" +$ WRITE OUFILE "$ DEFINE 'P1' MCOMPILE GTM$DIST:MCOMPILE.EXE" +$ IF GTM$LNK_LOG +$ THEN +$ N1 = 0 +$ DN = 0 +$ T1 = F$TRNLNM("LNK$LIBRARY") +$ IF (T1 .EQS. "") .OR. (F$LOCATE("GTMLIB",T1) .NE. F$LENGTH(T1)) .OR. (F$LOCATE("GTMSHR",T1) .NE. F$LENGTH(T1)) +$ THEN +$ WRITE OUFILE "$ DEFINE 'P1' LNK$LIBRARY GTM$DIST:GTMLIB.OLB" +$ DN = 1 +$ ELSE ! lnk$library is in use +$LNK_LOOP: +$ N1 = N1 + 1 +$ T1 = F$TRNLNM("LNK$LIBRARY_''N1'") +$ IF (T1 .EQS. "") .OR. (F$LOCATE("GTMLIB",T1) .NE. F$LENGTH(T1)) .OR. (F$LOCATE("GTMSHR",T1) .NE. F$LENGTH(T1)) +$ THEN +$ WRITE OUFILE "$ DEFINE 'P1' LNK$LIBRARY_''N1' GTM$DIST:GTMLIB.OLB" +$ DN = 1 +$ ENDIF +$ IF (.NOT. DN) .AND. (N1 .LT. 998) THEN GOTO LNK_LOOP +$ ENDIF ! gtmlib handling +$ IF DN ! placed gtmlib +$ THEN +$ N1 = N1 + 1 +$ WRITE OUFILE "$ DEFINE 'P1' LNK$LIBRARY_''N1' GTM$DIST:GTMSHR.OLB" +$ ELSE +$ VMI$CALLBACK MESSAGE I NOLNKLOG "No LNK$LIBRARY logical names available" +$ ENDIF +$ ENDIF ! setting up LNK$LIBRARYs +$ WRITE OUFILE "$ EXIT" +$ CLOSE OUFILE +$! Create GTMLOGIN.COM +$ OPEN /WRITE OUFILE VMI$KWD:GTMLOGIN.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMLOGIN.COM performs process specific setup for GT.M." +$ WRITE OUFILE "$! It calls GTMLOGICALS.COM if the logical names are not" +$ WRITE OUFILE "$! in the SYSTEM table." +$ WRITE OUFILE "$! It defines symbols to access GT.M images." +$ WRITE OUFILE "$! It defines GT.M commands locally if they are not defined to the system." +$ WRITE OUFILE "$! When the command and logical names are not defined on a process level," +$ WRITE OUFILE "$! a production user may save start-up time by not using GTMLOGIN." +$ WRITE OUFILE "$! CCE is infrequently used, but may be defined as a foreign command." +$ WRITE OUFILE "$!" +$ IF .NOT. GTM$DEF_SYS +$ THEN +$ WRITE OUFILE "$ dir = F$ENVIRONMENT(""PROCEDURE"")" +$ WRITE OUFILE "$ dir = F$PARSE(dir,,,""DEVICE"") + F$PARSE(dir,,,""DIRECTORY"")" +$ WRITE OUFILE "$ @'dir'GTMLOGICALS.COM" +$ ENDIF +$ IF .NOT. GTM$DEF_DCL THEN WRITE OUFILE "$ SET COMMAND GTM$DIST:GTMCOMMANDS.CLD" +$ WRITE OUFILE "$ DSE :== $GTM$DIST:DSE.EXE ! Database System Editor" +$ WRITE OUFILE "$ GDE :== $GTM$DIST:GDE.EXE ! Global Directory Editor" +$ WRITE OUFILE "$ GTM :== MUMPS/DIRECT ! Direct Mode MUMPS" +$ WRITE OUFILE "$ LKE :== $GTM$DIST:LKE.EXE ! Lock Editor" +$ WRITE OUFILE "$ MUPI*P :== $GTM$DIST:MUPIP.EXE ! MUMPS Peripheral Interchange Program" +$ WRITE OUFILE "$ EXIT" +$ WRITE OUFILE "$ CCE :== $GTM$DIST:CCE.EXE ! GT.CX Operator Interface Program" +$ WRITE OUFILE "$ EXIT" +$ CLOSE OUFILE +$! Create GTMSTART.COM +$ OPEN /WRITE OUFILE VMI$KWD:GTMSTART.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMSTART.COM should be placed in the VMS startup database." +$ WRITE OUFILE "$! It invokes GTMLOGICALS.COM and GTMINSTALL.COM." +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$ dir = F$ENVIRONMENT(""PROCEDURE"")" +$ WRITE OUFILE "$ dir = F$PARSE(dir,,,""DEVICE"") + F$PARSE(dir,,,""DIRECTORY"")" +$ IF GTM$DEF_SYS THEN WRITE OUFILE "$ IF P1 .EQS. """" .OR. (P1 .EQS. ""FULL"") THEN P1 := SYSTEM/EXEC" +$ WRITE OUFILE "$ @'dir'GTMLOGICALS 'P1'" +$ WRITE OUFILE "$ @'dir'GTMINSTALL" +$ WRITE OUFILE "$ EXIT" +$ CLOSE OUFILE +$! Create GTMSTOP.COM +$ OPEN /WRITE OUFILE VMI$KWD:GTMSTOP.COM +$ WRITE OUFILE "$!" +$ WRITE OUFILE "$! GTMSTOP.COM stops all the active GT.M processes and does a RUNDOWN." +$ WRITE OUFILE "$! Place an invocation or copy of this procedure in the site specific" +$ WRITE OUFILE "$! shutdown: SYS$MANAGER:SYSHUTDWN to ensure all GT.M databases are" +$ WRITE OUFILE "$! properly closed before VMS terminates. GTMSTOP should follow" +$ WRITE OUFILE "$! GTCMSTOP and precede GTCXSTOP, if they are used." +$ WRITE OUFILE "$! If GTMSTOP is not intended to disable subsequent use of GT.M," +$ WRITE OUFILE "$! add a comment (!) before the INSTALL REMOVE GTMSECSHR." +$ WRITE OUFILE "$!" +$ IF .NOT. GTM$DEF_SYS +$ THEN +$ WRITE OUFILE "$ dir = F$ENVIRONMENT(""PROCEDURE"")" +$ WRITE OUFILE "$ dir = F$PARSE(dir,,,""DEVICE"") + F$PARSE(dir,,,""DIRECTORY"")" +$ WRITE OUFILE "$ @'dir'GTMLOGICALS.COM" +$ ENDIF +$ WRITE OUFILE "$ MUPIP := $GTM$DIST:MUPIP.EXE" +$ WRITE OUFILE "$ STOP := $GTM$DIST:GTM$STOP" +$ WRITE OUFILE "$ STOP 'P1'" +$ WRITE OUFILE "$ MUPIP RUNDOWN" +$ WRITE OUFILE "$ INSTALL REMOVE GTMSECSHR" +$ WRITE OUFILE "$ EXIT" +$ IF GTM$DEF_SYS THEN WRITE OUFILE "$ IF P2 .EQS. """" THEN P2 := /SYSTEM/EXEC" +$ WRITE OUFILE "$ DEASSIGN 'P2' GTMSECSHR" +$ CLOSE OUFILE +$ VMI$CALLBACK MESSAGE I PREINS "Preparing files for installation." +$! GTMFILES.KIT must be maintained as kit contents change +$ GTM$HLP_LOG == GTM$DST_LOG +$ IF GTM$HLP_DIR THEN GTM$HLP_LOG :== VMI$ROOT:[SYSHLP] +$ OPEN /WRITE OUFILE VMI$KWD:GTMFILES.KIT +$ IF GTM$MGR_COM +$ THEN +$ WRITE OUFILE "GTM$ GTMINSTALL.COM VMI$ROOT:[SYSMGR] C" +$ WRITE OUFILE "GTM$ GTMLOGICALS.COM VMI$ROOT:[SYSMGR] C" +$ WRITE OUFILE "GTM$ GTMLOGIN.COM VMI$ROOT:[SYSMGR] C" +$ WRITE OUFILE "GTM$ GTMSTART.COM VMI$ROOT:[SYSMGR] C" +$ WRITE OUFILE "GTM$ GTMSTOP.COM VMI$ROOT:[SYSMGR] C" +$ ENDIF +$ WRITE OUFILE "GTM$ GTMINSTALL.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMLOGICALS.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMLOGIN.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMSTART.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMSTOP.COM ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ DSE.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ GDE.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ LKE.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ MUMPS.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ MUPIP.HLB ''GTM$HLP_LOG'" +$ WRITE OUFILE "GTM$ GTMLIB.OLB ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMSHR.OLB ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMZCALL.MLB ''GTM$DST_LOG'" +$ IF ALPHA +$ THEN +$ WRITE OUFILE "GTM$ GTM$DEFAULTS.M64 ''GTM$DST_LOG'" +$ ELSE +$ WRITE OUFILE "GTM$ GTM$DEFAULTS.MAR ''GTM$DST_LOG'" +$ ENDIF +$ WRITE OUFILE "GTM$ GTM$CE.H ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMCOLLECT.OPT ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMCOMMANDS.CLD ''GTM$DST_LOG' C" +$ WRITE OUFILE "GTM$ *.M ''GTM$DST_LOG'" +$ CLOSE OUFILE +$! GTMIMAGES.KIT must be maintained as kit contents change +$ OPEN /WRITE OUFILE VMI$KWD:GTMIMAGES.KIT +$ WRITE OUFILE "GTM$ GTMSECSHR.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTMSHR.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ DSE.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GDE.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTM$DMOD.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ LKE.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ MCOMPILE.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ MUPIP.EXE ''GTM$DST_LOG'" +$ WRITE OUFILE "GTM$ GTM$STOP.EXE ''GTM$DST_LOG'" +$ CLOSE OUFILE +$! Provide with file.KITs +$ VMI$CALLBACK PROVIDE_FILE "" VMI$KWD:GTMFILES.KIT "" T +$ VMI$CALLBACK PROVIDE_IMAGE "" VMI$KWD:GTMIMAGES.KIT "" T +$ VMI$CALLBACK MESSAGE I FININS "Finalizing the installation." +$ IF GTM$DEF_DCL THEN VMI$CALLBACK PROVIDE_DCL_COMMAND GTMCOMMANDS.CLD +$ IF GTM$STARTDB THEN VMI$CALLBACK MODIFY_STARTUP_DB ADD GTMSTART.COM LPMAIN +$! GTM$INSTALL is TRUE if GTM$RUN_IVP or GTM$PCT_RTN +$ IF GTM$INSTALL THEN VMI$CALLBACK SET POSTINSTALL YES +$ IF GTM$RUN_IVP THEN VMI$CALLBACK SET IVP YES +$ EXIT VMI$_SUCCESS +$! +$POSTINSTALL: +$ ON CONTROL_Y THEN EXIT VMI$_FAILURE +$! remove MUPIP from command tables for change from V2.4 to V2.5 +$ SET NOON +$ DEFINE /USER_MODE SYS$OUTPUT NL: +$ DEFINE /USER_MODE SYS$ERROR NL: +$ SET COMMAND /TABLE=SYS$COMMON:[SYSLIB]DCLTABLES /OUTPUT=SYS$COMMON:[SYSLIB]DCLTABLES /DELETE=MUPIP +$ DEFINE /USER_MODE SYS$OUTPUT NL: +$ DEFINE /USER_MODE SYS$ERROR NL: +$ SET COMMAND /DELETE=MUPIP +$ SET ON +$ IF GTM$MGR_COM +$ THEN +$ T1 := SYS$MANAGER: +$ ELSE +$ T1 = GTM$DST_LOG +$ ENDIF +$ @'T1'GTMSTART +$ @'T1'GTMLOGIN +$ ON CONTROL_Y THEN EXIT VMI$_FAILURE +$ SET DEFAULT GTM$DIST +$ T2 = F$ENVIRONMENT("PROTECTION") +$ SET PROTECTION=(S=REWD,O=REWD,G=REWD,W=RE)/DEFAULT +$ MUMPS GTM$DMOD.M +$ IF GTM$LNK_LOG +$ THEN +$ T1 := +$ ELSE +$ T1 :=,GTMLIB.OLB/LIB,GTMSHR.OLB/LIB +$ ENDIF +$ LINK GTM$DMOD.OBJ/NOTRACE'T1 +$ IF GTM$PCT_RTN +$ THEN +$ TYPE SYS$INPUT + + Compiling the GT.M percent (%) routines. +$ MUMPS * +$ IF GTM$DOPURGE THEN PURGE *.* +$ SET DEFAULT VMI$KWD +$ ENDIF ! percent routines +$ SET PROTECTION=('T2')/DEFAULT +$ EXIT VMI$_SUCCESS +$! +$IVP: +$! The real Installation Verification Procedure. +$ TYPE SYS$INPUT + + GT.M Installation Verification Procedure + +$! Extract the IVP .COM file from the text library. +$ LIBRARIAN /EXTRACT=GTM$IVP /OUTPUT=GTM$IVP.COM GTM$IVP.TLB +$ @GTM$IVP +$ EXIT $STATUS +$! diff --git a/samples/DIGITAL Command Language/ghostpdl_zlib_make_vms.com b/samples/DIGITAL Command Language/ghostpdl_zlib_make_vms.com new file mode 100644 index 00000000..65e9d0cb --- /dev/null +++ b/samples/DIGITAL Command Language/ghostpdl_zlib_make_vms.com @@ -0,0 +1,867 @@ +$! make libz under VMS written by +$! Martin P.J. Zinser +$! +$! In case of problems with the install you might contact me at +$! zinser@zinser.no-ip.info(preferred) or +$! martin.zinser@eurexchange.com (work) +$! +$! Make procedure history for Zlib +$! +$!------------------------------------------------------------------------------ +$! Version history +$! 0.01 20060120 First version to receive a number +$! 0.02 20061008 Adapt to new Makefile.in +$! 0.03 20091224 Add support for large file check +$! 0.04 20100110 Add new gzclose, gzlib, gzread, gzwrite +$! 0.05 20100221 Exchange zlibdefs.h by zconf.h.in +$! 0.06 20120111 Fix missing amiss_err, update zconf_h.in, fix new exmples +$! subdir path, update module search in makefile.in +$! 0.07 20120115 Triggered by work done by Alexey Chupahin completly redesigned +$! shared image creation +$! 0.08 20120219 Make it work on VAX again, pre-load missing symbols to shared +$! image +$! 0.09 20120305 SMS. P1 sets builder ("MMK", "MMS", " " (built-in)). +$! "" -> automatic, preference: MMK, MMS, built-in. +$! +$ on error then goto err_exit +$! +$ true = 1 +$ false = 0 +$ tmpnam = "temp_" + f$getjpi("","pid") +$ tt = tmpnam + ".txt" +$ tc = tmpnam + ".c" +$ th = tmpnam + ".h" +$ define/nolog tconfig 'th' +$ its_decc = false +$ its_vaxc = false +$ its_gnuc = false +$ s_case = False +$! +$! Setup variables holding "config" information +$! +$ Make = "''p1'" +$ name = "Zlib" +$ version = "?.?.?" +$ v_string = "ZLIB_VERSION" +$ v_file = "zlib.h" +$ ccopt = "/include = []" +$ lopts = "" +$ dnsrl = "" +$ aconf_in_file = "zconf.h.in#zconf.h_in#zconf_h.in" +$ conf_check_string = "" +$ linkonly = false +$ optfile = name + ".opt" +$ mapfile = name + ".map" +$ libdefs = "" +$ vax = f$getsyi("HW_MODEL").lt.1024 +$ axp = f$getsyi("HW_MODEL").ge.1024 .and. f$getsyi("HW_MODEL").lt.4096 +$ ia64 = f$getsyi("HW_MODEL").ge.4096 +$! +$! 2012-03-05 SMS. +$! Why is this needed? And if it is needed, why not simply ".not. vax"? +$! +$!!! if axp .or. ia64 then set proc/parse=extended +$! +$ whoami = f$parse(f$environment("Procedure"),,,,"NO_CONCEAL") +$ mydef = F$parse(whoami,,,"DEVICE") +$ mydir = f$parse(whoami,,,"DIRECTORY") - "][" +$ myproc = f$parse(whoami,,,"Name") + f$parse(whoami,,,"type") +$! +$! Check for MMK/MMS +$! +$ if (Make .eqs. "") +$ then +$ If F$Search ("Sys$System:MMS.EXE") .nes. "" Then Make = "MMS" +$ If F$Type (MMK) .eqs. "STRING" Then Make = "MMK" +$ else +$ Make = f$edit( Make, "trim") +$ endif +$! +$ gosub find_version +$! +$ open/write topt tmp.opt +$ open/write optf 'optfile' +$! +$ gosub check_opts +$! +$! Look for the compiler used +$! +$ gosub check_compiler +$ close topt +$ close optf +$! +$ if its_decc +$ then +$ ccopt = "/prefix=all" + ccopt +$ if f$trnlnm("SYS") .eqs. "" +$ then +$ if axp +$ then +$ define sys sys$library: +$ else +$ ccopt = "/decc" + ccopt +$ define sys decc$library_include: +$ endif +$ endif +$! +$! 2012-03-05 SMS. +$! Why /NAMES = AS_IS? Why not simply ".not. vax"? And why not on VAX? +$! +$ if axp .or. ia64 +$ then +$ ccopt = ccopt + "/name=as_is/opt=(inline=speed)" +$ s_case = true +$ endif +$ endif +$ if its_vaxc .or. its_gnuc +$ then +$ if f$trnlnm("SYS").eqs."" then define sys sys$library: +$ endif +$! +$! Build a fake configure input header +$! +$ open/write conf_hin config.hin +$ write conf_hin "#undef _LARGEFILE64_SOURCE" +$ close conf_hin +$! +$! +$ i = 0 +$FIND_ACONF: +$ fname = f$element(i,"#",aconf_in_file) +$ if fname .eqs. "#" then goto AMISS_ERR +$ if f$search(fname) .eqs. "" +$ then +$ i = i + 1 +$ goto find_aconf +$ endif +$ open/read/err=aconf_err aconf_in 'fname' +$ open/write aconf zconf.h +$ACONF_LOOP: +$ read/end_of_file=aconf_exit aconf_in line +$ work = f$edit(line, "compress,trim") +$ if f$extract(0,6,work) .nes. "#undef" +$ then +$ if f$extract(0,12,work) .nes. "#cmakedefine" +$ then +$ write aconf line +$ endif +$ else +$ cdef = f$element(1," ",work) +$ gosub check_config +$ endif +$ goto aconf_loop +$ACONF_EXIT: +$ write aconf "" +$ write aconf "/* VMS specifics added by make_vms.com: */" +$ write aconf "#define VMS 1" +$ write aconf "#include " +$ write aconf "#include " +$ write aconf "#ifdef _LARGEFILE" +$ write aconf "# define off64_t __off64_t" +$ write aconf "# define fopen64 fopen" +$ write aconf "# define fseeko64 fseeko" +$ write aconf "# define lseek64 lseek" +$ write aconf "# define ftello64 ftell" +$ write aconf "#endif" +$ write aconf "#if !defined( __VAX) && (__CRTL_VER >= 70312000)" +$ write aconf "# define HAVE_VSNPRINTF" +$ write aconf "#endif" +$ close aconf_in +$ close aconf +$ if f$search("''th'") .nes. "" then delete 'th';* +$! Build the thing plain or with mms +$! +$ write sys$output "Compiling Zlib sources ..." +$ if make.eqs."" +$ then +$ if (f$search( "example.obj;*") .nes. "") then delete example.obj;* +$ if (f$search( "minigzip.obj;*") .nes. "") then delete minigzip.obj;* +$ CALL MAKE adler32.OBJ "CC ''CCOPT' adler32" - + adler32.c zlib.h zconf.h +$ CALL MAKE compress.OBJ "CC ''CCOPT' compress" - + compress.c zlib.h zconf.h +$ CALL MAKE crc32.OBJ "CC ''CCOPT' crc32" - + crc32.c zlib.h zconf.h +$ CALL MAKE deflate.OBJ "CC ''CCOPT' deflate" - + deflate.c deflate.h zutil.h zlib.h zconf.h +$ CALL MAKE gzclose.OBJ "CC ''CCOPT' gzclose" - + gzclose.c zutil.h zlib.h zconf.h +$ CALL MAKE gzlib.OBJ "CC ''CCOPT' gzlib" - + gzlib.c zutil.h zlib.h zconf.h +$ CALL MAKE gzread.OBJ "CC ''CCOPT' gzread" - + gzread.c zutil.h zlib.h zconf.h +$ CALL MAKE gzwrite.OBJ "CC ''CCOPT' gzwrite" - + gzwrite.c zutil.h zlib.h zconf.h +$ CALL MAKE infback.OBJ "CC ''CCOPT' infback" - + infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h +$ CALL MAKE inffast.OBJ "CC ''CCOPT' inffast" - + inffast.c zutil.h zlib.h zconf.h inffast.h +$ CALL MAKE inflate.OBJ "CC ''CCOPT' inflate" - + inflate.c zutil.h zlib.h zconf.h infblock.h +$ CALL MAKE inftrees.OBJ "CC ''CCOPT' inftrees" - + inftrees.c zutil.h zlib.h zconf.h inftrees.h +$ CALL MAKE trees.OBJ "CC ''CCOPT' trees" - + trees.c deflate.h zutil.h zlib.h zconf.h +$ CALL MAKE uncompr.OBJ "CC ''CCOPT' uncompr" - + uncompr.c zlib.h zconf.h +$ CALL MAKE zutil.OBJ "CC ''CCOPT' zutil" - + zutil.c zutil.h zlib.h zconf.h +$ write sys$output "Building Zlib ..." +$ CALL MAKE libz.OLB "lib/crea libz.olb *.obj" *.OBJ +$ write sys$output "Building example..." +$ CALL MAKE example.OBJ "CC ''CCOPT' [.test]example" - + [.test]example.c zlib.h zconf.h +$ call make example.exe "LINK example,libz.olb/lib" example.obj libz.olb +$ write sys$output "Building minigzip..." +$ CALL MAKE minigzip.OBJ "CC ''CCOPT' [.test]minigzip" - + [.test]minigzip.c zlib.h zconf.h +$ call make minigzip.exe - + "LINK minigzip,libz.olb/lib" - + minigzip.obj libz.olb +$ else +$ gosub crea_mms +$ write sys$output "Make ''name' ''version' with ''Make' " +$ 'make' +$ endif +$! +$! Create shareable image +$! +$ gosub crea_olist +$ write sys$output "Creating libzshr.exe" +$ call map_2_shopt 'mapfile' 'optfile' +$ LINK_'lopts'/SHARE=libzshr.exe modules.opt/opt,'optfile'/opt +$ write sys$output "Zlib build completed" +$ delete/nolog tmp.opt;* +$ exit +$AMISS_ERR: +$ write sys$output "No source for config.hin found." +$ write sys$output "Tried any of ''aconf_in_file'" +$ goto err_exit +$CC_ERR: +$ write sys$output "C compiler required to build ''name'" +$ goto err_exit +$ERR_EXIT: +$ set message/facil/ident/sever/text +$ close/nolog optf +$ close/nolog topt +$ close/nolog aconf_in +$ close/nolog aconf +$ close/nolog out +$ close/nolog min +$ close/nolog mod +$ close/nolog h_in +$ write sys$output "Exiting..." +$ exit 2 +$! +$! +$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES +$ V = 'F$Verify(0) +$! P1 = What we are trying to make +$! P2 = Command to make it +$! P3 - P8 What it depends on +$ +$ If F$Search(P1) .Eqs. "" Then Goto Makeit +$ Time = F$CvTime(F$File(P1,"RDT")) +$arg=3 +$Loop: +$ Argument = P'arg +$ If Argument .Eqs. "" Then Goto Exit +$ El=0 +$Loop2: +$ File = F$Element(El," ",Argument) +$ If File .Eqs. " " Then Goto Endl +$ AFile = "" +$Loop3: +$ OFile = AFile +$ AFile = F$Search(File) +$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl +$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit +$ Goto Loop3 +$NextEL: +$ El = El + 1 +$ Goto Loop2 +$EndL: +$ arg=arg+1 +$ If arg .Le. 8 Then Goto Loop +$ Goto Exit +$ +$Makeit: +$ VV=F$VERIFY(0) +$ write sys$output P2 +$ 'P2 +$ VV='F$Verify(VV) +$Exit: +$ If V Then Set Verify +$ENDSUBROUTINE +$!------------------------------------------------------------------------------ +$! +$! Check command line options and set symbols accordingly +$! +$!------------------------------------------------------------------------------ +$! Version history +$! 0.01 20041206 First version to receive a number +$! 0.02 20060126 Add new "HELP" target +$ CHECK_OPTS: +$ i = 1 +$ OPT_LOOP: +$ if i .lt. 9 +$ then +$ cparm = f$edit(p'i',"upcase") +$! +$! Check if parameter actually contains something +$! +$ if f$edit(cparm,"trim") .nes. "" +$ then +$ if cparm .eqs. "DEBUG" +$ then +$ ccopt = ccopt + "/noopt/deb" +$ lopts = lopts + "/deb" +$ endif +$ if f$locate("CCOPT=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ ccopt = ccopt + f$extract(start,len,cparm) +$ if f$locate("AS_IS",f$edit(ccopt,"UPCASE")) .lt. f$length(ccopt) - + then s_case = true +$ endif +$ if cparm .eqs. "LINK" then linkonly = true +$ if f$locate("LOPTS=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ lopts = lopts + f$extract(start,len,cparm) +$ endif +$ if f$locate("CC=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ cc_com = f$extract(start,len,cparm) + if (cc_com .nes. "DECC") .and. - + (cc_com .nes. "VAXC") .and. - + (cc_com .nes. "GNUC") +$ then +$ write sys$output "Unsupported compiler choice ''cc_com' ignored" +$ write sys$output "Use DECC, VAXC, or GNUC instead" +$ else +$ if cc_com .eqs. "DECC" then its_decc = true +$ if cc_com .eqs. "VAXC" then its_vaxc = true +$ if cc_com .eqs. "GNUC" then its_gnuc = true +$ endif +$ endif +$ if f$locate("MAKE=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ mmks = f$extract(start,len,cparm) +$ if (mmks .eqs. "MMK") .or. (mmks .eqs. "MMS") +$ then +$ make = mmks +$ else +$ write sys$output "Unsupported make choice ''mmks' ignored" +$ write sys$output "Use MMK or MMS instead" +$ endif +$ endif +$ if cparm .eqs. "HELP" then gosub bhelp +$ endif +$ i = i + 1 +$ goto opt_loop +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Look for the compiler used +$! +$! Version history +$! 0.01 20040223 First version to receive a number +$! 0.02 20040229 Save/set value of decc$no_rooted_search_lists +$! 0.03 20060202 Extend handling of GNU C +$! 0.04 20090402 Compaq -> hp +$CHECK_COMPILER: +$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc)) +$ then +$ its_decc = (f$search("SYS$SYSTEM:DECC$COMPILER.EXE") .nes. "") +$ its_vaxc = .not. its_decc .and. (F$Search("SYS$System:VAXC.Exe") .nes. "") +$ its_gnuc = .not. (its_decc .or. its_vaxc) .and. (f$trnlnm("gnu_cc") .nes. "") +$ endif +$! +$! Exit if no compiler available +$! +$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc)) +$ then goto CC_ERR +$ else +$ if its_decc +$ then +$ write sys$output "CC compiler check ... hp C" +$ if f$trnlnm("decc$no_rooted_search_lists") .nes. "" +$ then +$ dnrsl = f$trnlnm("decc$no_rooted_search_lists") +$ endif +$ define/nolog decc$no_rooted_search_lists 1 +$ else +$ if its_vaxc then write sys$output "CC compiler check ... VAX C" +$ if its_gnuc +$ then +$ write sys$output "CC compiler check ... GNU C" +$ if f$trnlnm(topt) then write topt "gnu_cc:[000000]gcclib.olb/lib" +$ if f$trnlnm(optf) then write optf "gnu_cc:[000000]gcclib.olb/lib" +$ cc = "gcc" +$ endif +$ if f$trnlnm(topt) then write topt "sys$share:vaxcrtl.exe/share" +$ if f$trnlnm(optf) then write optf "sys$share:vaxcrtl.exe/share" +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! If MMS/MMK are available dump out the descrip.mms if required +$! +$CREA_MMS: +$ write sys$output "Creating descrip.mms..." +$ create descrip.mms +$ open/append out descrip.mms +$ copy sys$input: out +$ deck +# descrip.mms: MMS description file for building zlib on VMS +# written by Martin P.J. Zinser +# + +OBJS = adler32.obj, compress.obj, crc32.obj, gzclose.obj, gzlib.obj\ + gzread.obj, gzwrite.obj, uncompr.obj, infback.obj\ + deflate.obj, trees.obj, zutil.obj, inflate.obj, \ + inftrees.obj, inffast.obj + +$ eod +$ write out "CFLAGS=", ccopt +$ write out "LOPTS=", lopts +$ write out "all : example.exe minigzip.exe libz.olb" +$ copy sys$input: out +$ deck + @ write sys$output " Example applications available" + +libz.olb : libz.olb($(OBJS)) + @ write sys$output " libz available" + +example.exe : example.obj libz.olb + link $(LOPTS) example,libz.olb/lib + +minigzip.exe : minigzip.obj libz.olb + link $(LOPTS) minigzip,libz.olb/lib + +clean : + delete *.obj;*,libz.olb;*,*.opt;*,*.exe;* + + +# Other dependencies. +adler32.obj : adler32.c zutil.h zlib.h zconf.h +compress.obj : compress.c zlib.h zconf.h +crc32.obj : crc32.c zutil.h zlib.h zconf.h +deflate.obj : deflate.c deflate.h zutil.h zlib.h zconf.h +example.obj : [.test]example.c zlib.h zconf.h +gzclose.obj : gzclose.c zutil.h zlib.h zconf.h +gzlib.obj : gzlib.c zutil.h zlib.h zconf.h +gzread.obj : gzread.c zutil.h zlib.h zconf.h +gzwrite.obj : gzwrite.c zutil.h zlib.h zconf.h +inffast.obj : inffast.c zutil.h zlib.h zconf.h inftrees.h inffast.h +inflate.obj : inflate.c zutil.h zlib.h zconf.h +inftrees.obj : inftrees.c zutil.h zlib.h zconf.h inftrees.h +minigzip.obj : [.test]minigzip.c zlib.h zconf.h +trees.obj : trees.c deflate.h zutil.h zlib.h zconf.h +uncompr.obj : uncompr.c zlib.h zconf.h +zutil.obj : zutil.c zutil.h zlib.h zconf.h +infback.obj : infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h +$ eod +$ close out +$ return +$!------------------------------------------------------------------------------ +$! +$! Read list of core library sources from makefile.in and create options +$! needed to build shareable image +$! +$CREA_OLIST: +$ open/read min makefile.in +$ open/write mod modules.opt +$ src_check_list = "OBJZ =#OBJG =" +$MRLOOP: +$ read/end=mrdone min rec +$ i = 0 +$SRC_CHECK_LOOP: +$ src_check = f$element(i, "#", src_check_list) +$ i = i+1 +$ if src_check .eqs. "#" then goto mrloop +$ if (f$extract(0,6,rec) .nes. src_check) then goto src_check_loop +$ rec = rec - src_check +$ gosub extra_filnam +$ if (f$element(1,"\",rec) .eqs. "\") then goto mrloop +$MRSLOOP: +$ read/end=mrdone min rec +$ gosub extra_filnam +$ if (f$element(1,"\",rec) .nes. "\") then goto mrsloop +$MRDONE: +$ close min +$ close mod +$ return +$!------------------------------------------------------------------------------ +$! +$! Take record extracted in crea_olist and split it into single filenames +$! +$EXTRA_FILNAM: +$ myrec = f$edit(rec - "\", "trim,compress") +$ i = 0 +$FELOOP: +$ srcfil = f$element(i," ", myrec) +$ if (srcfil .nes. " ") +$ then +$ write mod f$parse(srcfil,,,"NAME"), ".obj" +$ i = i + 1 +$ goto feloop +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Find current Zlib version number +$! +$FIND_VERSION: +$ open/read h_in 'v_file' +$hloop: +$ read/end=hdone h_in rec +$ rec = f$edit(rec,"TRIM") +$ if (f$extract(0,1,rec) .nes. "#") then goto hloop +$ rec = f$edit(rec - "#", "TRIM") +$ if f$element(0," ",rec) .nes. "define" then goto hloop +$ if f$element(1," ",rec) .eqs. v_string +$ then +$ version = 'f$element(2," ",rec)' +$ goto hdone +$ endif +$ goto hloop +$hdone: +$ close h_in +$ return +$!------------------------------------------------------------------------------ +$! +$CHECK_CONFIG: +$! +$ in_ldef = f$locate(cdef,libdefs) +$ if (in_ldef .lt. f$length(libdefs)) +$ then +$ write aconf "#define ''cdef' 1" +$ libdefs = f$extract(0,in_ldef,libdefs) + - + f$extract(in_ldef + f$length(cdef) + 1, - + f$length(libdefs) - in_ldef - f$length(cdef) - 1, - + libdefs) +$ else +$ if (f$type('cdef') .eqs. "INTEGER") +$ then +$ write aconf "#define ''cdef' ", 'cdef' +$ else +$ if (f$type('cdef') .eqs. "STRING") +$ then +$ write aconf "#define ''cdef' ", """", '''cdef'', """" +$ else +$ gosub check_cc_def +$ endif +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Check if this is a define relating to the properties of the C/C++ +$! compiler +$! +$ CHECK_CC_DEF: +$ if (cdef .eqs. "_LARGEFILE64_SOURCE") +$ then +$ copy sys$input: 'tc' +$ deck +#include "tconfig" +#define _LARGEFILE +#include + +int main(){ +FILE *fp; + fp = fopen("temp.txt","r"); + fseeko(fp,1,SEEK_SET); + fclose(fp); +} + +$ eod +$ test_inv = false +$ comm_h = false +$ gosub cc_prop_check +$ return +$ endif +$ write aconf "/* ", line, " */" +$ return +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler +$! +$! Version history +$! 0.01 20031020 First version to receive a number +$! 0.02 20031022 Added logic for defines with value +$! 0.03 20040309 Make sure local config file gets not deleted +$! 0.04 20041230 Also write include for configure run +$! 0.05 20050103 Add processing of "comment defines" +$CC_PROP_CHECK: +$ cc_prop = true +$ is_need = false +$ is_need = (f$extract(0,4,cdef) .eqs. "NEED") .or. (test_inv .eq. true) +$ if f$search(th) .eqs. "" then create 'th' +$ set message/nofac/noident/nosever/notext +$ on error then continue +$ cc 'tmpnam' +$ if .not. ($status) then cc_prop = false +$ on error then continue +$! The headers might lie about the capabilities of the RTL +$ link 'tmpnam',tmp.opt/opt +$ if .not. ($status) then cc_prop = false +$ set message/fac/ident/sever/text +$ on error then goto err_exit +$ delete/nolog 'tmpnam'.*;*/exclude='th' +$ if (cc_prop .and. .not. is_need) .or. - + (.not. cc_prop .and. is_need) +$ then +$ write sys$output "Checking for ''cdef'... yes" +$ if f$type('cdef_val'_yes) .nes. "" +$ then +$ if f$type('cdef_val'_yes) .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_yes) +$ if f$type('cdef_val'_yes) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_yes) +$ else +$ call write_config f$fao("#define !AS 1",cdef) +$ endif +$ if (cdef .eqs. "HAVE_FSEEKO") .or. (cdef .eqs. "_LARGE_FILES") .or. - + (cdef .eqs. "_LARGEFILE64_SOURCE") then - + call write_config f$string("#define _LARGEFILE 1") +$ else +$ write sys$output "Checking for ''cdef'... no" +$ if (comm_h) +$ then + call write_config f$fao("/* !AS */",line) +$ else +$ if f$type('cdef_val'_no) .nes. "" +$ then +$ if f$type('cdef_val'_no) .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_no) +$ if f$type('cdef_val'_no) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_no) +$ else +$ call write_config f$fao("#undef !AS",cdef) +$ endif +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler with multiple result values +$! +$! Version history +$! 0.01 20040127 First version +$! 0.02 20050103 Reconcile changes from cc_prop up to version 0.05 +$CC_MPROP_CHECK: +$ cc_prop = true +$ i = 1 +$ idel = 1 +$ MT_LOOP: +$ if f$type(result_'i') .eqs. "STRING" +$ then +$ set message/nofac/noident/nosever/notext +$ on error then continue +$ cc 'tmpnam'_'i' +$ if .not. ($status) then cc_prop = false +$ on error then continue +$! The headers might lie about the capabilities of the RTL +$ link 'tmpnam'_'i',tmp.opt/opt +$ if .not. ($status) then cc_prop = false +$ set message/fac/ident/sever/text +$ on error then goto err_exit +$ delete/nolog 'tmpnam'_'i'.*;* +$ if (cc_prop) +$ then +$ write sys$output "Checking for ''cdef'... ", mdef_'i' +$ if f$type(mdef_'i') .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,mdef_'i') +$ if f$type('cdef_val'_yes) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,mdef_'i') +$ goto msym_clean +$ else +$ i = i + 1 +$ goto mt_loop +$ endif +$ endif +$ write sys$output "Checking for ''cdef'... no" +$ call write_config f$fao("#undef !AS",cdef) +$ MSYM_CLEAN: +$ if (idel .le. msym_max) +$ then +$ delete/sym mdef_'idel' +$ idel = idel + 1 +$ goto msym_clean +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Write configuration to both permanent and temporary config file +$! +$! Version history +$! 0.01 20031029 First version to receive a number +$! +$WRITE_CONFIG: SUBROUTINE +$ write aconf 'p1' +$ open/append confh 'th' +$ write confh 'p1' +$ close confh +$ENDSUBROUTINE +$!------------------------------------------------------------------------------ +$! +$! Analyze the project map file and create the symbol vector for a shareable +$! image from it +$! +$! Version history +$! 0.01 20120128 First version +$! 0.02 20120226 Add pre-load logic +$! +$ MAP_2_SHOPT: Subroutine +$! +$ SAY := "WRITE_ SYS$OUTPUT" +$! +$ IF F$SEARCH("''P1'") .EQS. "" +$ THEN +$ SAY "MAP_2_SHOPT-E-NOSUCHFILE: Error, inputfile ''p1' not available" +$ goto exit_m2s +$ ENDIF +$ IF "''P2'" .EQS. "" +$ THEN +$ SAY "MAP_2_SHOPT: Error, no output file provided" +$ goto exit_m2s +$ ENDIF +$! +$ module1 = "deflate#deflateEnd#deflateInit_#deflateParams#deflateSetDictionary" +$ module2 = "gzclose#gzerror#gzgetc#gzgets#gzopen#gzprintf#gzputc#gzputs#gzread" +$ module3 = "gzseek#gztell#inflate#inflateEnd#inflateInit_#inflateSetDictionary" +$ module4 = "inflateSync#uncompress#zlibVersion#compress" +$ open/read map 'p1 +$ if axp .or. ia64 +$ then +$ open/write aopt a.opt +$ open/write bopt b.opt +$ write aopt " CASE_SENSITIVE=YES" +$ write bopt "SYMBOL_VECTOR= (-" +$ mod_sym_num = 1 +$ MOD_SYM_LOOP: +$ if f$type(module'mod_sym_num') .nes. "" +$ then +$ mod_in = 0 +$ MOD_SYM_IN: +$ shared_proc = f$element(mod_in, "#", module'mod_sym_num') +$ if shared_proc .nes. "#" +$ then +$ write aopt f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)",- + f$edit(shared_proc,"upcase"),shared_proc) +$ write bopt f$fao("!AS=PROCEDURE,-",shared_proc) +$ mod_in = mod_in + 1 +$ goto mod_sym_in +$ endif +$ mod_sym_num = mod_sym_num + 1 +$ goto mod_sym_loop +$ endif +$MAP_LOOP: +$ read/end=map_end map line +$ if (f$locate("{",line).lt. f$length(line)) .or. - + (f$locate("global:", line) .lt. f$length(line)) +$ then +$ proc = true +$ goto map_loop +$ endif +$ if f$locate("}",line).lt. f$length(line) then proc = false +$ if f$locate("local:", line) .lt. f$length(line) then proc = false +$ if proc +$ then +$ shared_proc = f$edit(line,"collapse") +$ chop_semi = f$locate(";", shared_proc) +$ if chop_semi .lt. f$length(shared_proc) then - + shared_proc = f$extract(0, chop_semi, shared_proc) +$ write aopt f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)",- + f$edit(shared_proc,"upcase"),shared_proc) +$ write bopt f$fao("!AS=PROCEDURE,-",shared_proc) +$ endif +$ goto map_loop +$MAP_END: +$ close/nolog aopt +$ close/nolog bopt +$ open/append libopt 'p2' +$ open/read aopt a.opt +$ open/read bopt b.opt +$ALOOP: +$ read/end=aloop_end aopt line +$ write libopt line +$ goto aloop +$ALOOP_END: +$ close/nolog aopt +$ sv = "" +$BLOOP: +$ read/end=bloop_end bopt svn +$ if (svn.nes."") +$ then +$ if (sv.nes."") then write libopt sv +$ sv = svn +$ endif +$ goto bloop +$BLOOP_END: +$ write libopt f$extract(0,f$length(sv)-2,sv), "-" +$ write libopt ")" +$ close/nolog bopt +$ delete/nolog/noconf a.opt;*,b.opt;* +$ else +$ if vax +$ then +$ open/append libopt 'p2' +$ mod_sym_num = 1 +$ VMOD_SYM_LOOP: +$ if f$type(module'mod_sym_num') .nes. "" +$ then +$ mod_in = 0 +$ VMOD_SYM_IN: +$ shared_proc = f$element(mod_in, "#", module'mod_sym_num') +$ if shared_proc .nes. "#" +$ then +$ write libopt f$fao("UNIVERSAL=!AS",- + f$edit(shared_proc,"upcase")) +$ mod_in = mod_in + 1 +$ goto vmod_sym_in +$ endif +$ mod_sym_num = mod_sym_num + 1 +$ goto vmod_sym_loop +$ endif +$VMAP_LOOP: +$ read/end=vmap_end map line +$ if (f$locate("{",line).lt. f$length(line)) .or. - + (f$locate("global:", line) .lt. f$length(line)) +$ then +$ proc = true +$ goto vmap_loop +$ endif +$ if f$locate("}",line).lt. f$length(line) then proc = false +$ if f$locate("local:", line) .lt. f$length(line) then proc = false +$ if proc +$ then +$ shared_proc = f$edit(line,"collapse") +$ chop_semi = f$locate(";", shared_proc) +$ if chop_semi .lt. f$length(shared_proc) then - + shared_proc = f$extract(0, chop_semi, shared_proc) +$ write libopt f$fao("UNIVERSAL=!AS",- + f$edit(shared_proc,"upcase")) +$ endif +$ goto vmap_loop +$VMAP_END: +$ else +$ write sys$output "Unknown Architecture (Not VAX, AXP, or IA64)" +$ write sys$output "No options file created" +$ endif +$ endif +$ EXIT_M2S: +$ close/nolog map +$ close/nolog libopt +$ endsubroutine diff --git a/samples/DIGITAL Command Language/libxslt_build.com b/samples/DIGITAL Command Language/libxslt_build.com new file mode 100644 index 00000000..89371f01 --- /dev/null +++ b/samples/DIGITAL Command Language/libxslt_build.com @@ -0,0 +1,342 @@ +$! BUILD_XSLT.COM +$! +$! Build the XSLT library +$! +$! Arguments: +$! +$! p1 - "DEBUG" is you want to build with debug +$! +$! This package requires libxml to have already been installed. You need +$! to ensure that the logical name LIBXML is defined and points to the +$! directory containing libxml's .h files +$! +$! This procedure creates the object libraries +$! +$! XML_LIBDIR:LIBXSLT.OLB +$! XML_LIBDIR:LIBEXSLT.OLB +$! +$! and the program +$! +$! XSLTPROC +$! +$! After the library is built, you can link these routines into +$! your code with the command +$! +$! LINK your_modules,XML_LIBDIR:LIBEXSLT/LIB,LIBXSLT/LIBRARY,LIBXML/LIB +$! +$! Change History +$! -------------- +$! Command file author : John A Fotheringham (jaf@jafsoft.com) +$! Last update : 2 Nov 2001 +$! +$!- configuration ------------------------------------------------------------- +$! +$!- compile command. +$! +$ cc_opts = "/INCLUDE=([],XML_SRCDIR:,[-.libxslt])/NAMES=(SHORTENED)/FLOAT=IEEE/IEEE_MODE=DENORM_RESULTS" +$! +$ if p1.eqs."DEBUG" +$ then +$ debug = "Y" +$ cc_command = "CC''cc_opts'/DEBUG/NOOPTIMIZE/LIST/SHOW=ALL" +$ else +$ debug = "N" +$ cc_command = "CC''cc_opts'" +$ endif +$! +$!- configure multiple build passes for each library. ------------------------- +$! +$! For each pass: +$! +$! "libname" is the name of the library or module being created +$! +$! "progname" is the name of the program being created +$! +$! "src" is the list of sources to be built into the library or program +$! - This should be compared to the definition of +$! "_la_SOURCES" in the MAKEFILE.IN file in +$! corresponding directory. +$! +$ num_passes = 3 ! two libraries and a program +$! +$!- pass 1 - library LIBXSLT +$! +$ libname_1 = "LIBXSLT" +$ h_file_1 = "xslt.h" +$ progname_1 = "" +$! +$ ! see "libxslt_la_SOURCES" in [.libxslt]makefile.in +$ src_1 = "xslt.c xsltutils.c pattern.c templates.c variables.c keys.c" +$ src_1 = src_1 + " numbers.c extensions.c extra.c functions.c" +$ src_1 = src_1 + " namespaces.c imports.c attributes.c documents.c" +$ src_1 = src_1 + " preproc.c transform.c security.c" +$! +$!- pass 2 - library LIBEXSLT +$! +$ libname_2 = "LIBEXSLT" +$ h_file_2 = "exslt.h" +$ progname_2 = "" +$! +$ ! see "libexslt_la_SOURCES" in [.libexslt]makefile.in +$ src_2 = "exslt.c common.c math.c sets.c functions.c strings.c date.c saxon.c dynamic.c" +$! +$!- pass 3 - program XSLTPROC +$! +$ libname_3 = "" +$ h_file_3 = "" +$ progname_3 = "XSLTPROC" +$! +$ ! see "xsltproc_SOURCES" in [.xsltproc]makefile.in +$ src_3 = "xsltproc.c" +$! +$!- set up and check logicals ----------------------------------------------- +$! +$! XML_LIBDIR - object library directory +$! XML_SRCDIR - top-level build directory of libxml package -- needed for config.h and trio.h +$! LIBXML - source directory containing .h files for libxml package +$! +$ if f$trnlnm("XML_LIBDIR").eqs."" +$ then +$ on error then continue +$ globfile = f$search("[--...]libxml.olb") +$ if globfile.eqs."" +$ then +$ write sys$output "" +$ write sys$output " You need to define the XML_LIBDIR logical name to" +$ write sys$output " point to the directory containing your object" +$ write sys$output " libraries. This should already contain LIBXML.OLB" +$ write sys$output " from the libxml package, and will be the directory" +$ write sys$output " the new LIBXSLT.OLB library will be placed in" +$ write sys$output "" +$ exit +$ else +$ srcdir = f$parse(globfile,,,"DEVICE") + f$parse(globfile,,,"DIRECTORY") +$ define/process XML_LIBDIR "''srcdir'" +$ write sys$output "Defining XML_LIBDIR as ""''srcdir'""" +$ endif +$ endif +$! +$ if f$trnlnm("libxml").eqs."" +$ then +$ ! look for globals.h in a directory installed paralle to this one +$ on error then continue +$ globfile = f$search("[--...]globals.h") +$ if globfile.eqs."" +$ then +$ write sys$output "" +$ write sys$output " You need to define a LIBXML logical directory to" +$ write sys$output " point to the directory containing the .h files" +$ write sys$output " for the libxml package" +$ write sys$output "" +$ exit +$ else +$ srcdir = f$element(0,"]",globfile)+ "]" +$ define/process LIBXML "''srcdir'" +$ write sys$output "Defining LIBXML as ""''srcdir'""" +$ endif +$ endif +$! +$ if f$trnlnm("XML_SRCDIR").eqs."" +$ then +$ globfile = f$search("[--...]globals.c") +$ if globfile.eqs."" +$ then +$ write sys$output "Can't locate globals.c. You need to manually define a XML_SRCDIR logical" +$ exit +$ else +$ srcdir = f$parse(globfile,,,"DEVICE") + f$parse(globfile,,,"DIRECTORY") +$ define/process XML_SRCDIR "''srcdir'" +$ write sys$output "Defining XML_SRCDIR as ""''srcdir'""" +$ endif +$ endif +$! +$!- set up some working logicals ------------------- +$! +$ pass_no = 1 +$ set_pass_logical: +$! +$ if pass_no.le.num_passes +$ then +$! +$ Libname = libname_'pass_no' +$ progname = progname_'pass_no' +$ if libname.nes."" +$ then +$ logname = "''libname'_SRCDIR" +$ else +$ logname = "''progname'_SRCDIR" +$ endif +$ findfile = f$element(0," ",src_'pass_no') +$! +$!--- set up a source directory logical +$! +$ if f$trnlnm("''logname'").eqs."" +$ then +$ ! look for the target file in a parallel subdirectory +$ globfile = f$search("[-...]''findfile'") +$ if globfile.eqs."" +$ then +$ write sys$output "Can't locate ''findfile'. You need to manually define a ''logname' logical" +$ exit +$ else +$ srcdir = f$element(0,"]",globfile)+ "]" +$ define/process 'logname' "''srcdir'" +$ write sys$output "Defining ''logname' as ""''srcdir'""" +$ endif +$ endif +$! +$!--- if it's a library, set up a logical pointing to the .h files +$! +$ if libname.nes."" +$ then +$ if f$trnlnm("''libname'").eqs."" +$ then +$ ! look for the target .h file in a parallel subdirectory +$ h_file = h_file_'pass_no' +$ globfile = f$search("[-...]''h_file'") +$ if globfile.eqs."" +$ then +$ write sys$output "Can't locate ''h_file'. You need to manually define a ''libname' logical" +$ exit +$ else +$ includedir = f$element(0,"]",globfile)+ "]" +$ define/process 'libname' "''includedir'" +$ write sys$output "Defining ''libname' as ""''includedir'""" +$ endif +$ endif +$ endif +$! +$ pass_no = pass_no +1 +$ goto set_pass_logical +$! +$ endif ! for each pass +$! +$!- set up error handling (such as it is) ------------------------------------- +$! +$ exit_status = 1 +$ saved_default = f$environment("default") +$ on error then goto ERROR_OUT +$ on control_y then goto ERROR_OUT +$! +$ goto start_here +$ start_here: ! move this line to debug/rerun parts of this command file +$! +$!- compile modules into the library ------------------------------------------ +$! +$! +$ pass_no = 1 ! make three passes, one for each library, one for XSLTPROC +$ pass_loop: +$! +$ if pass_no.le.num_passes +$ then +$ Libname = libname_'pass_no' +$ progname = progname_'pass_no' +$ if libname.nes."" +$ then +$ logname = "''libname'_SRCDIR" +$ pass_description = "the XML_LIBDIR:''libname'.OLB object library" +$ else +$ logname = "''progname'_SRCDIR" +$ pass_description = "the programs in ''progname'" +$ endif +$ src = src_'pass_no' +$! +$!- create the library if need +$! +$ if libname.nes."" +$ then +$ if f$search("XML_LIBDIR:''libname'.OLB").eqs."" +$ then +$ write sys$output "Creating new object library XML_LIBDIR:''libname'.OLB..." +$ library/create XML_LIBDIR:'libname'.OLB +$ endif +$ endif +$! +$!- move to the source directory +$! +$ set def 'logname' +$! +$!- define the library and link commands (link command not used as is) +$! +$ if libname.nes."" +$ then +$ lib_command = "LIBRARY/REPLACE XML_LIBDIR:''libname'.OLB" +$ link_command = "" +$ else +$ lib_command = "" +$ link_command = "LINK" +$ endif +$! +$ write sys$output "" +$ write sys$output "Building ''pass_description' +$ write sys$output "" +$! +$ s_no = 0 +$ src = f$edit(src,"COMPRESS") +$! +$ source_loop: +$! +$ next_source = f$element (S_no," ",src) +$ if next_source.nes."" .and. next_source.nes." " +$ then +$ call build 'next_source' +$ s_no = s_no + 1 +$ goto source_loop +$ endif +$! +$ pass_no = pass_no + 1 +$ goto pass_loop +$! +$ endif ! for each pass +$! +$!- Th-th-th-th-th-that's all folks! ------------------------------------------ +$! +$EXIT_OUT: +$! +$ set def 'saved_default +$ exit 'exit_status +$! +$ +$ERROR_OUT: +$ exit_status = $status +$ write sys$output "''f$message(exit_status)'" +$ goto EXIT_OUT +$! +$!- the BUILD subroutine. Compile then insert into library or link as required +$! +$BUILD: subroutine +$ on warning then goto EXIT_BUILD +$ source_file = p1 +$ name = f$element(0,".",source_file) +$ object_file = f$fao("XML_LIBDIR:!AS.OBJ",name) +$! +$!- compile +$ write sys$output "Compiling ",p1,p2,"..." +$ cc_command /object='object_file 'source_file' 'p2' +$! +$!- insert into library if command defined +$! +$ if lib_command.nes."" +$ then +$ lib_command 'object_file' +$ delete/nolog 'object_file';* +$ endif +$! +$!- link module if command defined +$! +$ if link_command.nes."" +$ then +$ text = f$element(0,".",p1) ! lose the ".c" +$ write sys$output "Linking ",text,"..." +$ dbgopts = "" +$ if debug then dbgopts = "/DEBUG" +$ link_command'dbgopts' 'object_file',- + XML_LIBDIR:libexslt/lib,- + XML_LIBDIR:libxslt/lib,- + XML_LIBDIR:libxml/library +$ endif +$! +$EXIT_BUILD: +$ exit $status +$! +$endsubroutine diff --git a/samples/DIGITAL Command Language/vmsbackup_build.com b/samples/DIGITAL Command Language/vmsbackup_build.com new file mode 100644 index 00000000..c6cb4cab --- /dev/null +++ b/samples/DIGITAL Command Language/vmsbackup_build.com @@ -0,0 +1,10 @@ +$! Compiling with VAXC is said to work, but it requires the usual cruft +$! (vaxcrtl and all), and to avoid hair we don't supply said cruft here. +$ CC/DECC/PREFIX=all VMSBACKUP.C/DEFINE=(HAVE_MT_IOCTLS=0,HAVE_UNIXIO_H=1) +$ CC/DECC/PREFIX=all DCLMAIN.C +$! Probably we don't want match as it probably doesn't implement VMS-style +$! matching, but I haven't looking into the issues yet. +$ CC/DECC/PREFIX=all match +$ LINK/exe=VMSBACKUP.EXE - +vmsbackup.obj,dclmain.obj,match.obj,sys$input/opt +identification="VMSBACKUP4.1.1" diff --git a/samples/DTrace/counts.d b/samples/DTrace/counts.d new file mode 100644 index 00000000..13725d99 --- /dev/null +++ b/samples/DTrace/counts.d @@ -0,0 +1,23 @@ +/* + * This software is in the public domain. + * + * $Id: counts.d 10510 2005-08-15 01:46:19Z kateturner $ + */ + +#pragma D option quiet + +self int tottime; +BEGIN { + tottime = timestamp; +} + +php$target:::function-entry + @counts[copyinstr(arg0)] = count(); +} + +END { + printf("Total time: %dus\n", (timestamp - tottime) / 1000); + printf("# calls by function:\n"); + printa("%-40s %@d\n", @counts); +} + diff --git a/samples/DTrace/javascript-trace.d b/samples/DTrace/javascript-trace.d new file mode 100644 index 00000000..0acbaa97 --- /dev/null +++ b/samples/DTrace/javascript-trace.d @@ -0,0 +1,73 @@ +/* -*- Mode: dtrace-script; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* ***** BEGIN LICENSE BLOCK ***** + * Version: MPL 1.1/GPL 2.0/LGPL 2.1 + * + * The contents of this file are subject to the Mozilla Public License Version + * 1.1 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * Copyright (C) 2007 Sun Microsystems, Inc. All Rights Reserved. + * + * Alternatively, the contents of this file may be used under the terms of + * either the GNU General Public License Version 2 or later (the "GPL"), or + * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), + * in which case the provisions of the GPL or the LGPL are applicable instead + * of those above. If you wish to allow use of your version of this file only + * under the terms of either the GPL or the LGPL, and not to allow others to + * use your version of this file under the terms of the MPL, indicate your + * decision by deleting the provisions above and replace them with the notice + * and other provisions required by the GPL or the LGPL. If you do not delete + * the provisions above, a recipient may use your version of this file under + * the terms of any one of the MPL, the GPL or the LGPL. + * + * ***** END LICENSE BLOCK ***** */ + +/* + * javascript provider probes + * + * function-entry (filename, classname, funcname) + * function-info (filename, classname, funcname, lineno, + * runfilename, runlineno) + * function-args (filename, classname, funcname, argc, argv, argv0, + * argv1, argv2, argv3, argv4) + * function-rval (filename, classname, funcname, lineno, rval, rval0) + * function-return (filename, classname, funcname) + * object-create-start (filename, classname) + * object-create (filename, classname, *object, rlineno) + * object-create-done (filename, classname) + * object-finalize (NULL, classname, *object) + * execute-start (filename, lineno) + * execute-done (filename, lineno) + */ + +provider javascript { + probe function__entry(char *, char *, char *); + probe function__info(char *, char *, char *, int, char *, int); + probe function__args(char *, char *, char *, int, void *, void *, void *, + void *, void *, void *); + probe function__rval(char *, char *, char *, int, void *, void *); + probe function__return(char *, char *, char *); + probe object__create__start(char *, char *); + probe object__create__done(char *, char *); + /* XXX must use unsigned longs here instead of uintptr_t for OS X + (Apple radar: 5194316 & 5565198) */ + probe object__create(char *, char *, unsigned long, int); + probe object__finalize(char *, char *, unsigned long); + probe execute__start(char *, int); + probe execute__done(char *, int); +}; + +/* +#pragma D attributes Unstable/Unstable/Common provider mozilla provider +#pragma D attributes Private/Private/Unknown provider mozilla module +#pragma D attributes Private/Private/Unknown provider mozilla function +#pragma D attributes Unstable/Unstable/Common provider mozilla name +#pragma D attributes Unstable/Unstable/Common provider mozilla args +*/ + diff --git a/samples/DTrace/probes.d b/samples/DTrace/probes.d new file mode 100644 index 00000000..483f174d --- /dev/null +++ b/samples/DTrace/probes.d @@ -0,0 +1,93 @@ +/* ---------- + * DTrace probes for PostgreSQL backend + * + * Copyright (c) 2006-2009, PostgreSQL Global Development Group + * + * $PostgreSQL: pgsql/src/backend/utils/probes.d,v 1.11 2009/04/02 20:59:10 momjian Exp $ + * ---------- + */ + + +/* + * Typedefs used in PostgreSQL. + * + * NOTE: Do not use system-provided typedefs (e.g. uintptr_t, uint32_t, etc) + * in probe definitions, as they cause compilation errors on Mac OS X 10.5. + */ +#define LocalTransactionId unsigned int +#define LWLockId int +#define LWLockMode int +#define LOCKMODE int +#define BlockNumber unsigned int +#define Oid unsigned int +#define ForkNumber int +#define bool char + +provider postgresql { + + probe transaction__start(LocalTransactionId); + probe transaction__commit(LocalTransactionId); + probe transaction__abort(LocalTransactionId); + + probe lwlock__acquire(LWLockId, LWLockMode); + probe lwlock__release(LWLockId); + probe lwlock__wait__start(LWLockId, LWLockMode); + probe lwlock__wait__done(LWLockId, LWLockMode); + probe lwlock__condacquire(LWLockId, LWLockMode); + probe lwlock__condacquire__fail(LWLockId, LWLockMode); + + probe lock__wait__start(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, LOCKMODE); + probe lock__wait__done(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, LOCKMODE); + + probe query__parse__start(const char *); + probe query__parse__done(const char *); + probe query__rewrite__start(const char *); + probe query__rewrite__done(const char *); + probe query__plan__start(); + probe query__plan__done(); + probe query__execute__start(); + probe query__execute__done(); + probe query__start(const char *); + probe query__done(const char *); + probe statement__status(const char *); + + probe sort__start(int, bool, int, int, bool); + probe sort__done(bool, long); + + probe buffer__read__start(ForkNumber, BlockNumber, Oid, Oid, Oid, bool, bool); + probe buffer__read__done(ForkNumber, BlockNumber, Oid, Oid, Oid, bool, bool, bool); + probe buffer__flush__start(ForkNumber, BlockNumber, Oid, Oid, Oid); + probe buffer__flush__done(ForkNumber, BlockNumber, Oid, Oid, Oid); + + probe buffer__checkpoint__start(int); + probe buffer__checkpoint__sync__start(); + probe buffer__checkpoint__done(); + probe buffer__sync__start(int, int); + probe buffer__sync__written(int); + probe buffer__sync__done(int, int, int); + probe buffer__write__dirty__start(ForkNumber, BlockNumber, Oid, Oid, Oid); + probe buffer__write__dirty__done(ForkNumber, BlockNumber, Oid, Oid, Oid); + + probe deadlock__found(); + + probe checkpoint__start(int); + probe checkpoint__done(int, int, int, int, int); + probe clog__checkpoint__start(bool); + probe clog__checkpoint__done(bool); + probe subtrans__checkpoint__start(bool); + probe subtrans__checkpoint__done(bool); + probe multixact__checkpoint__start(bool); + probe multixact__checkpoint__done(bool); + probe twophase__checkpoint__start(); + probe twophase__checkpoint__done(); + + probe smgr__md__read__start(ForkNumber, BlockNumber, Oid, Oid, Oid); + probe smgr__md__read__done(ForkNumber, BlockNumber, Oid, Oid, Oid, int, int); + probe smgr__md__write__start(ForkNumber, BlockNumber, Oid, Oid, Oid); + probe smgr__md__write__done(ForkNumber, BlockNumber, Oid, Oid, Oid, int, int); + + probe xlog__insert(unsigned char, unsigned char); + probe xlog__switch(); + probe wal__buffer__write__dirty__start(); + probe wal__buffer__write__dirty__done(); +}; diff --git a/samples/Eiffel/application.e b/samples/Eiffel/application.e new file mode 100644 index 00000000..16426905 --- /dev/null +++ b/samples/Eiffel/application.e @@ -0,0 +1,44 @@ +note + description : "nino application root class" + date : "$Date$" + revision : "$Revision$" + +class + APPLICATION + +inherit + ARGUMENTS + + HTTP_SERVER_SHARED_CONFIGURATION + +create + make + +feature {NONE} -- Initialization + + make + -- Run application. + local + l_server : HTTP_SERVER + l_cfg: HTTP_SERVER_CONFIGURATION + l_http_handler : HTTP_HANDLER + do + create l_cfg.make + l_cfg.http_server_port := 9_000 + l_cfg.document_root := default_document_root + set_server_configuration (l_cfg) + debug ("nino") + l_cfg.set_is_verbose (True) + end + + create l_server.make (l_cfg) + create {APPLICATION_CONNECTION_HANDLER} l_http_handler.make (l_server) + l_server.setup (l_http_handler) + end + +feature -- Access + + default_document_root: STRING = "webroot" + +end + diff --git a/samples/Eiffel/book_collection.e b/samples/Eiffel/book_collection.e new file mode 100644 index 00000000..8959455a --- /dev/null +++ b/samples/Eiffel/book_collection.e @@ -0,0 +1,82 @@ +class + BOOK_COLLECTION + +create + make + +feature {NONE} -- Initialization + + make (a_name: STRING_32) + -- Create a book collection with `a_name' as `name'. + do + set_name (a_name) + create book_index.make (10) + ensure + name_set: name = a_name + end + +feature -- Access + + name: STRING_32 + -- Name. + + books: LIST [BOOK] + -- collection of book. + do + create {LINKED_LIST [BOOK]} Result.make + across + book_index as it + loop + Result.append (it.item) + end + end + + books_by_author (a_author: STRING_32): LIST [BOOK] + -- Books wrote by `a_author' in this collection. + do + if attached book_index [a_author] as l_result then + Result := l_result + else + create {LINKED_LIST [BOOK]} Result.make + end + end + +feature -- Change + + set_name (a_name: STRING_32) + -- Set `name' with `a_name'. + do + name := a_name + ensure + name_set: name = a_name + end + + add_book (a_book: BOOK) + -- Extend collection with `a_book'. + local + l: detachable LIST [BOOK] + do + l := book_index.at (a_book.author.name) + if l = Void then + create {LINKED_LIST [BOOK]} l.make + book_index.put (l, a_book.author.name) + end + l.force (a_book) + end + + add_books (book_list: like books) + -- Append collection with `book_list'. + do + across + book_list as it + loop + add_book (it.item) + end + end + +feature {NONE} -- Implementation + + book_index: HASH_TABLE [LIST [BOOK], STRING_32] + -- Association of author name and its books. + +end -- class BOOK_COLLECTION diff --git a/samples/Eiffel/git_checkout_command.e b/samples/Eiffel/git_checkout_command.e new file mode 100644 index 00000000..f78747d2 --- /dev/null +++ b/samples/Eiffel/git_checkout_command.e @@ -0,0 +1,41 @@ +note + description: "Git checkout command." + author: "Olivier Ligot" + +class + GIT_CHECKOUT_COMMAND + +inherit + GIT_COMMAND + +create + make, + make_master + +feature {NONE} -- Initialization + + make (a_branch: STRING) + -- Checkout the branch `a_branch'. + do + initialize + arguments.force_last (a_branch) + branch := a_branch + ensure + branch_set: branch = a_branch + end + + make_master + -- Checkout the master branch. + do + make ("master") + end + +feature -- Access + + branch: STRING + -- Branch to checkout + + name: STRING = "checkout" + -- Git subcommand name + +end diff --git a/samples/Elixir/filenames/mix.lock b/samples/Elixir/filenames/mix.lock new file mode 100644 index 00000000..830b074c --- /dev/null +++ b/samples/Elixir/filenames/mix.lock @@ -0,0 +1,10 @@ +%{"cowboy": {:hex, :cowboy, "1.0.0"}, + "cowlib": {:hex, :cowlib, "1.0.1"}, + "hackney": {:hex, :hackney, "0.14.3"}, + "hound": {:hex, :hound, "0.6.0"}, + "httpoison": {:hex, :httpoison, "0.5.0"}, + "idna": {:hex, :idna, "1.0.1"}, + "phoenix": {:hex, :phoenix, "0.10.0"}, + "plug": {:hex, :plug, "0.11.1"}, + "poison": {:hex, :poison, "1.3.1"}, + "ranch": {:hex, :ranch, "1.0.0"}} diff --git a/samples/Erlang/factorial.script! b/samples/Erlang/factorial similarity index 100% rename from samples/Erlang/factorial.script! rename to samples/Erlang/factorial diff --git a/samples/Erlang/filenames/rebar.config b/samples/Erlang/filenames/rebar.config new file mode 100644 index 00000000..91d3dff4 --- /dev/null +++ b/samples/Erlang/filenames/rebar.config @@ -0,0 +1,260 @@ +%% -*- mode: erlang;erlang-indent-level: 4;indent-tabs-mode: nil -*- +%% ex: ts=4 sw=4 ft=erlang et +%% This is a sample rebar.conf file that shows examples of some of rebar's +%% options. + +%% == Core == + +%% Extend list of always recursive commands +{recursive_cmds, []}. + +%% Check required ERTS or OTP release version +{require_erts_vsn, ".*"}. +{require_otp_vsn, ".*"}. +{require_min_otp_vsn, ".*"}. + +%% Additional library directories to add to the code path +{lib_dirs, []}. + +%% == Erlang Compiler == + +%% Erlang files to compile before the rest. Rebar automatically compiles +%% parse_transforms and custom behaviours before anything other than the files +%% in this list. +{erl_first_files, ["src/mymib1.erl", "src/mymib2.erl"]}. + +%% Erlang compiler options +{erl_opts, [no_debug_info, + {i, "myinclude"}, + {src_dirs, ["src", "src2", "src3"]}, + {platform_define, + "(linux|solaris|freebsd|darwin)", 'HAVE_SENDFILE'}, + {platform_define, "(linux|freebsd)", 'BACKLOG', 128}, + {platform_define, "R13", 'old_inets'}]}. + +%% MIB Options? +{mib_opts, []}. + +%% SNMP mibs to compile first? +{mib_first_files, []}. + +%% leex options +{xrl_opts, []}. + +%% leex files to compile first +{xrl_first_files, []}. + +%% yecc options +{yrl_opts, []}. + +%% yecc files to compile first +{yrl_first_files, []}. + +%% == EDoc == + +%% EDoc options +{edoc_opts, []}. + +%% == Port Compiler == + +%% Port compilation environment variables. See rebar_port_compiler.erl for +%% more info. Default is `[]' +{port_env, [{"CFLAGS", "$CFLAGS -Ifoo"}, + {"freebsd", "LDFLAGS", "$LDFLAGS -lfoo"}]}. + +%% port_specs +%% List of filenames or wildcards to be compiled. May also contain a tuple +%% consisting of a regular expression to be applied against the system +%% architecture as a filter. +{port_specs, [{"priv/so_name.so", ["c_src/*.c"]}, + {"linux", "priv/hello_linux", ["c_src/hello_linux.c"]}, + {"linux", "priv/hello_linux", ["c_src/*.c"], [{env, []}]}]}. + +%% == escriptize == +{escript_name, "application"}. +{escript_incl_apps, []}. +{escript_shebang, "#!/usr/bin/env escript\n"}. +{escript_comment, "%%\n"}. +{escript_emu_args, "%%! -pa application/application/ebin\n"}. + +%% == LFE Compiler == + +%% LFE files to compile before the rest +{lfe_first_files, []}. + +%% Options for the LFE compiler: reuse {erl_opts, []} + +%% == ErlyDTL Compiler == + +%% Options for the ErlyDTL compiler +{erlydtl_opts, []}. + +%% == Proto compiler == +{proto_opts, [ + {compiler, protobuffs}, + {src_dirs, ["src"]} +]}. +%% Available compilers for protocol buffer files (*.proto): +%% protobuffs (default) +%% gpb +%% Optional src_dirs which is a list of directories where +%% to look for .proto files, default is src + +%% Options for the gpb protocol buffer compiler, +%% if selected by the proto_compiler option +{gpb_opts, []}. + +%% == EUnit == + +%% Options for eunit:test() +{eunit_opts, []}. + +%% Additional compile options for eunit. erl_opts is also used +{eunit_compile_opts, []}. + +%% Same as erl_first_files, but used only when running 'eunit' +{eunit_first_files, []}. + +%% == Cover == + +%% Whether to enable coverage reporting. Default is `false' +{cover_enabled, false}. + +%% Whether to print coverage report to console. Default is `false' +{cover_print_enabled, false}. + +%% Whether to export coverage report to file. Default is `false' +{cover_export_enabled, false}. + +%% == Common Test == + +%% Override the default "test" directory in which SUITEs are located +{ct_dir, "itest"}. + +%% Override the default "logs" directory in which SUITEs are logged +{ct_log_dir, "test/logs"}. + +%% Option to pass extra parameters when launching Common Test +{ct_extra_params, "-boot start_sasl -s myapp"}. + +%% Option to use short names (i.e., -sname test) when starting ct +{ct_use_short_names, true}. + +%% == QuickCheck == + +%% If qc_mod is unspecified, rebar tries to detect Triq or EQC +{qc_opts, [{qc_mod, module()}, Options]}. + +%% Additional compile options for qc. erl_opts is also used +{qc_compile_opts, []}. + +%% Same as erl_first_files, but used only when running 'qc' +{qc_first_files, []}. + +%% == Cleanup == + +%% Which files to cleanup +{clean_files, ["file", "file2"]}. + +%% == OTP Applications == + +%% Enable validation of the OTP app module list. Default is 'true' +{validate_app_modules, true}. + +%% == Dependencies == + +%% Where to put any downloaded dependencies. Default is "deps" +{deps_dir, "deps"}. + +%% What dependencies we have, dependencies can be of 3 forms, an application +%% name as an atom, eg. mochiweb, a name and a version (from the .app file), or +%% an application name, a version and the SCM details on how to fetch it (SCM +%% type, location and revision). +%% Rebar currently supports git, hg, bzr, svn, rsync, fossil, and p4. +{deps, [app_name, + {rebar, "1.0.*"}, + {rebar, ".*", + {git, "git://github.com/rebar/rebar.git"}}, + {rebar, ".*", + {git, "git://github.com/rebar/rebar.git", "Rev"}}, + {rebar, "1.0.*", + {git, "git://github.com/rebar/rebar.git", {branch, "master"}}}, + {rebar, "1.0.0", + {git, "git://github.com/rebar/rebar.git", {tag, "1.0.0"}}}, + %% Dependencies can be marked as 'raw'. Rebar does not require + %% such dependencies to have a standard Erlang/OTP layout + %% which assumes the presence of either + %% "src/dependency_name.app.src" or "ebin/dependency_name.app" + %% files. + %% + %% 'raw' dependencies can still contain 'rebar.config' and + %% even can have the proper OTP directory layout, but they + %% won't be compiled. + %% + %% Only a subset of rebar commands will be executed on the + %% 'raw' subdirectories: get-deps, update-deps, check-deps, + %% list-deps and delete-deps. + {rebar, "", + {git, "git://github.com/rebar/rebar.git", {branch, "master"}}, + [raw]}, + {app_name, ".*", {hg, "https://www.example.org/url"}}, + {app_name, ".*", {rsync, "Url"}}, + {app_name, ".*", {svn, "https://www.example.org/url"}}, + {app_name, ".*", {svn, "svn://svn.example.org/url"}}, + {app_name, ".*", {bzr, "https://www.example.org/url", "Rev"}}, + {app_name, ".*", {fossil, "https://www.example.org/url"}}, + {app_name, ".*", {fossil, "https://www.example.org/url", "Vsn"}}, + {app_name, ".*", {p4, "//depot/subdir/app_dir"}}]}. + +%% == Subdirectories == + +%% Subdirectories? +{sub_dirs, ["dir1", "dir2"]}. + +%% == Plugins == + +%% Plugins you wish to include. +%% These can include any module on the code path, including deps. +%% Alternatively, plugins can be placed as source files in the plugin_dir, in +%% which case they will be compiled and loaded dynamically at runtime. +{plugins, [plugin1, plugin2]}. + +%% Override the directory in which plugin sources can be found. +%% Defaults to ./plugins +{plugin_dir, "some_other_directory"}. + + +%% == Pre/Post Command Hooks == + +{pre_hooks, [{clean, "./prepare_package_files.sh"}, + {"linux", compile, "c_src/build_linux.sh"}, + {compile, "escript generate_headers"}, + {compile, "escript check_headers"}]}. + +{post_hooks, [{clean, "touch file1.out"}, + {"freebsd", compile, "c_src/freebsd_tweaks.sh"}, + {eunit, "touch file2.out"}, + {compile, "touch postcompile.out"}]}. + +%% == xref == + +{xref_warnings, false}. + +%% optional extra paths to include in xref:set_library_path/2. +%% specified relative location of rebar.config. +%% e.g. {xref_extra_paths,["../gtknode/src"]} +{xref_extra_paths,[]}. + +%% xref checks to run +{xref_checks, [undefined_function_calls, undefined_functions, + locals_not_used, exports_not_used, + deprecated_function_calls, deprecated_functions]}. + +%% Optional custom xref queries (xref manual has details) specified as +%% {xref_queries, [{query_string(), expected_query_result()},...]} +%% The following for example removes all references to mod:*foo/4 +%% functions from undefined external function calls as those are in a +%% generated module +{xref_queries, + [{"(XC - UC) || (XU - X - B" + " - (\"mod\":\".*foo\"/\"4\"))",[]}]}. diff --git a/samples/Erlang/filenames/rebar.config.lock b/samples/Erlang/filenames/rebar.config.lock new file mode 100644 index 00000000..1627a9b1 --- /dev/null +++ b/samples/Erlang/filenames/rebar.config.lock @@ -0,0 +1,158 @@ +%% THIS FILE IS GENERATED. DO NOT EDIT IT MANUALLY %% + +{sub_dirs,["rel","apps/riak"]}. +{require_otp_vsn,"R16|17"}. +{cover_enabled,true}. +{lib_dirs,["apps/riak"]}. +{erl_opts,[debug_info,fail_on_warning]}. +{eunit_opts,[verbose]}. +{erlydtl_opts,[{compiler_options,[report,return,debug_info]}]}. +{deps,[{rebar_lock_deps_plugin,".*", + {git,"git://github.com/seth/rebar_lock_deps_plugin.git", + "7a5835029c42b8138325405237ea7e8516a84800"}}, + {node_package,".*", + {git,"git://github.com/basho/node_package.git", + "a829631eccebe3c1d7657a0075584f55bf342977"}}, + {goldrush,".*", + {git,"git://github.com/DeadZen/goldrush.git", + "71e63212f12c25827e0c1b4198d37d5d018a7fec"}}, + {lager,".*", + {git,"git://github.com/basho/lager.git", + "b6b6cebcb27ccff8acc59ae775acebc2f52e4926"}}, + {syslog,".*", + {git,"git://github.com/Vagabond/erlang-syslog.git", + "918c9b453e0811b24f2c99b35b712b0ef9f29c7e"}}, + {lager_syslog,".*", + {git,"git://github.com/basho/lager_syslog.git", + "fa2e7e3daee0d0a59dadb820fd3381eac4a65770"}}, + {cluster_info,".*", + {git,"git://github.com/basho/cluster_info.git", + "e231144ca32dc83317be3360a4a259c73826b08a"}}, + {sidejob,".*", + {git,"git://github.com/basho/sidejob.git", + "c5aabba2d7daa80c340e110902bbcfcb552ccdcf"}}, + {erlang_js,".*", + {git,"git://github.com/basho/erlang_js.git", + "07467d899ab90a2b719ad19ab0be0048c1c8d873"}}, + {meck,".*", + {git,"git://github.com/basho/meck.git", + "dde759050eff19a1a80fd854d7375174b191665d"}}, + {getopt,".*", + {git,"git://github.com/jcomellas/getopt.git", + "659a28f4145bc9843598972854299dc4ea77e4cb"}}, + {neotoma,".*", + {git,"git://github.com/seancribbs/neotoma.git", + "760928ec8870da02eb11bccb501e2700925d06c6"}}, + {cuttlefish,".*", + {git,"git://github.com/basho/cuttlefish.git", + "c92c8325aeaea6b6ba7516bbd434f8e408f87d60"}}, + {bitcask,".*", + {git,"git://github.com/basho/bitcask.git", + "c74d0c43fdefdd435f7621ddf1fc2995b5bd123c"}}, + {eper,".*", + {git,"git://github.com/basho/eper.git", + "7222ecaebceb5422e74a9c1503043bbc6036f6b7"}}, + {edown,".*", + {git,"git://github.com/uwiger/edown.git", + "d62ec85281e451a46ba30045917c119d65b72a84"}}, + {sext,".*", + {git,"git://github.com/basho/sext.git", + "846b9cc22456287a572efd4c924203d77778670f"}}, + {poolboy,".*", + {git,"git://github.com/basho/poolboy.git", + "8bb45fbc715c5f493642a1cc572ec7017d0d5fa3"}}, + {basho_stats,".*", + {git,"git://github.com/basho/basho_stats.git", + "19c532af235ae675439d491b329c55c2f9b02deb"}}, + {riak_sysmon,".*", + {git,"git://github.com/basho/riak_sysmon.git", + "26a58bcaba96d07df885f7b3db4d4306f995ce14"}}, + {eleveldb,".*", + {git,"git://github.com/basho/eleveldb.git", + "0e4e4e7cf3ddc26523a77f853ea9409c1707b26c"}}, + {riak_ensemble,".*", + {git,"git://github.com/basho/riak_ensemble", + "78dc8f623353a212ca3cf12236d1e9ac824bde16"}}, + {pbkdf2,".*", + {git,"git://github.com/basho/erlang-pbkdf2.git", + "7076584f5377e98600a7e2cb81980b2992fb2f71"}}, + {parse_trans,".*", + {git,"git://github.com/uwiger/parse_trans.git", + "82cc00264aa1bad8fc5c0739b7541feb4a843432"}}, + {bear,".*", + {git,"git://github.com/basho/bear.git", + "da820a13c607c3f816ee8b83c587266da5389761"}}, + {folsom,".*", + {git,"git://github.com/basho/folsom.git", + "72944523b6467c9f7add5f1c96dd5020424a2681"}}, + {setup,".*", + {git,"git://github.com/uwiger/setup.git", + "51ee7c9f64d2bbe9dcbb58c278e8fbfd4d0ca5e2"}}, + {exometer_core,".*", + {git,"git://github.com/basho/exometer_core.git", + "b47a5d65d9500c2b8f6ccc50e34005503589ef77"}}, + {clique,".*", + {git,"git://github.com/basho/clique.git", + "3af4db8ea0f74aca42f6713446dcd5915c795a74"}}, + {riak_core,".*", + {git,"git://github.com/basho/riak_core.git", + "044c4e7f8dbfe8c49c45f2f7090adff4cd5aba50"}}, + {riak_pipe,".*", + {git,"git://github.com/basho/riak_pipe.git", + "3c0abc7ba301d57940c5a9c5de368b70429c28ff"}}, + {protobuffs,".*", + {git,"git://github.com/basho/erlang_protobuffs.git", + "f88fc3c6881687432ddd5546b3c7b08009dfb26f"}}, + {riak_pb,".*", + {git,"git://github.com/basho/riak_pb.git", + "78c50efa698f33f7d6ab1c7f5fa4666ec03b46b4"}}, + {mochiweb,".*", + {git,"git://github.com/basho/mochiweb.git", + "ade2a9b29a11034eb550c1d79b4f991bf5ca05ba"}}, + {webmachine,".*", + {git,"git://github.com/basho/webmachine.git", + "7677c240f4a7ed020f4bab48278224966bb42311"}}, + {riak_api,".*", + {git,"git://github.com/basho/riak_api.git", + "2781e66796903bc6847bffcf71a6ba7a05d69275"}}, + {riak_dt,".*", + {git,"git://github.com/basho/riak_dt.git", + "f7981d4ad7407ddc085f133f204dd71bf9d50c56"}}, + {eunit_formatters,".*", + {git,"git://github.com/seancribbs/eunit_formatters", + "96b6ced4d45ba641cbf2c8a8ae9b350dd300bc10"}}, + {riak_kv,".*", + {git,"git://github.com/basho/riak_kv.git", + "404619cb57574cd43e2dc0dc0453884ec6732a99"}}, + {merge_index,".*", + {git,"git://github.com/basho/merge_index.git", + "b701dde5c28956c3b629411e5ff7e50cbb5cb4b3"}}, + {riak_search,".*", + {git,"git://github.com/basho/riak_search.git", + "8fe4a8c020a74c52ee877bf6dd410824b4f79f8b"}}, + {erlydtl,".*", + {git,"git://github.com/evanmiller/erlydtl.git", + "d20b53f04837a1053ed18987f645cb60eae82453"}}, + {riak_control,".*", + {git,"git://github.com/basho/riak_control.git", + "09073ce672260e1ec0ba3999fabed7f319624ba1"}}, + {riaknostic,".*", + {git,"git://github.com/basho/riaknostic.git", + "101d95bddff4b70afcd1dd5442b8c6651887e0a4"}}, + {kvc,".*", + {git,"git://github.com/etrepum/kvc.git", + "5565fe51857747662410cc3c06362ebcf48a2f04"}}, + {ibrowse,".*", + {git,"git://github.com/cmullaparthi/ibrowse.git", + "e8ae353c16d4f0897abb9f80025b52925b974dd1"}}, + {yokozuna,".*", + {git,"git://github.com/basho/yokozuna.git", + "5868266b11f131d14c85495e50f899f3fe8158ba"}}, + {canola,".*", + {git,"git://github.com/basho/canola.git", + "9bdfee88fce20b3a01b7003696b53eb21913d6fb"}}, + {riak_auth_mods,".*", + {git,"git://github.com/basho/riak_auth_mods.git", + "31b8b30e6c215418522eaa615264ae9769a87410"}}]}. +{plugins,[rebar_lock_deps_plugin]}. + diff --git a/samples/Erlang/filenames/rebar.lock b/samples/Erlang/filenames/rebar.lock new file mode 100644 index 00000000..1d3a3982 --- /dev/null +++ b/samples/Erlang/filenames/rebar.lock @@ -0,0 +1,16 @@ +[{<<"goldrush">>, + {git,"git://github.com/DeadZen/goldrush.git", + {ref,"71e63212f12c25827e0c1b4198d37d5d018a7fec"}}, + 1}, + {<<"riak_dt">>, + {git,"git://github.com/helium/riak_dt.git", + {ref,"15d66cb26c2028c1ad1271c359b1d5da213825c3"}}, + 0}, + {<<"lager">>, + {git,"git://github.com/basho/lager.git", + {ref,"d33ccf3b69de09a628fe38b4d7981bb8671b8a4f"}}, + 0}, + {<<"eleveldb">>, + {git,"git://github.com/helium/eleveldb.git", + {ref,"29a5360dc0365b3330dd0cd45b0b8166f3b854be"}}, + 0}]. diff --git a/samples/Erlang/release.script! b/samples/Erlang/release similarity index 100% rename from samples/Erlang/release.script! rename to samples/Erlang/release diff --git a/samples/Filterscript/colormatrix.fs b/samples/Filterscript/colormatrix.fs new file mode 100644 index 00000000..86fb2482 --- /dev/null +++ b/samples/Filterscript/colormatrix.fs @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "ip.rsh" + +static rs_matrix4x4 Mat; + +void init() { + rsMatrixLoadIdentity(&Mat); +} + +void setMatrix(rs_matrix4x4 m) { + Mat = m; +} + +uchar4 __attribute__((kernel)) root(uchar4 in) { + float4 f = convert_float4(in); + f = rsMatrixMultiply(&Mat, f); + f = clamp(f, 0.f, 255.f); + return convert_uchar4(f); +} + diff --git a/samples/Filterscript/fs_kernel.fs b/samples/Filterscript/fs_kernel.fs new file mode 100644 index 00000000..d8f0c4d6 --- /dev/null +++ b/samples/Filterscript/fs_kernel.fs @@ -0,0 +1,18 @@ +#pragma version(1) +#pragma rs java_package_name(foo) + +int __attribute__((kernel)) root(uint32_t ain) { + return 0; +} + +void __attribute__((kernel)) in_only(uint32_t ain) { +} + +int __attribute__((kernel)) out_only() { + return 0; +} + +int __attribute__((kernel)) everything(uint32_t ain, uint32_t x, uint32_t y) { + return 0; +} + diff --git a/samples/Formatted/long_seq.for b/samples/Formatted/long_seq.for new file mode 100644 index 00000000..eadf8036 --- /dev/null +++ b/samples/Formatted/long_seq.for @@ -0,0 +1,919 @@ +ACCEPTABLE LEFT PRIMERS + 1-based # self self hair- qual- + # sequence start ln N GC% Tm any_th end_th pin lity + 0 tgctagctaggcgatgctag 411 20 0 55.00 60.028 23.16 23.16 38.59 0.028 + 1 actgatacgcgatgctagct 476 20 0 50.00 59.957 17.69 1.35 0.00 0.043 + 2 gatcgatgctagctaggcga 405 20 0 55.00 60.100 16.30 16.30 0.00 0.100 + 3 tcgatcgatgctagctaggc 403 20 0 55.00 60.100 18.63 8.45 0.00 0.100 + 4 tagctgatcgatcgtagcgg 565 20 0 55.00 60.101 25.02 17.36 0.00 0.101 + 5 gctgactgatcgatcgatgc 113 20 0 55.00 59.826 24.08 17.09 35.21 0.174 + 6 tatcatctctgcgcgatcga 361 20 0 50.00 59.747 22.07 1.72 38.48 0.253 + 7 agctaggcgatgctagctag 415 20 0 55.00 59.742 17.46 17.46 41.54 0.258 + 8 ctagctaggcgatgctagct 413 20 0 55.00 59.742 18.68 17.35 43.53 0.258 + 9 ggcgatctagctagctgact 583 20 0 55.00 59.671 17.44 7.44 37.58 0.329 + 10 tcgatgctagctaggcgatg 407 20 0 55.00 60.382 14.03 0.00 0.00 0.382 + 11 gctgatcgatcgatgctagc 398 20 0 55.00 59.618 25.97 24.79 35.21 0.382 + 12 gctagctgatcgatcgatgc 394 20 0 55.00 59.618 24.08 21.09 35.21 0.382 + 13 atcatctctgcgcgatcgat 362 20 0 50.00 60.382 22.07 5.02 38.48 0.382 + 14 gactgatacgcgatgctagc 475 20 0 55.00 59.551 8.61 8.61 0.00 0.449 + 15 atcgatgctagctaggcgat 406 20 0 50.00 59.452 18.43 18.43 0.00 0.548 + 16 gctagctgactgatacgcga 468 20 0 55.00 60.589 16.29 0.00 0.00 0.589 + 17 agctagctgactgatacgcg 467 20 0 55.00 60.590 17.99 3.89 0.00 0.590 + 18 atgctagctaggcgatgcta 410 20 0 50.00 59.375 10.59 8.91 0.00 0.625 + 19 ctatcatctctgcgcgatcg 360 20 0 55.00 59.347 12.19 12.19 39.07 0.653 + 20 gatgctagctaggcgatgct 409 20 0 55.00 60.668 7.01 7.53 0.00 0.668 + 21 gctactatcatctctgcgcg 356 20 0 55.00 59.273 0.00 0.00 0.00 0.727 + 22 cgtagcggcgatctagctag 577 20 0 60.00 60.791 15.64 15.64 37.58 0.791 + 23 cggcgatctagctagctgac 582 20 0 60.00 61.003 14.84 7.25 38.70 1.003 + 24 gctagctgatcgatcgtagc 563 20 0 55.00 58.995 23.70 23.70 0.00 1.005 + 25 gatcgatcgatgtgcggcta 81 20 0 55.00 61.006 19.16 0.00 41.65 1.006 + 26 atcgatcgatgtgcggctag 82 20 0 55.00 61.008 29.65 0.00 41.65 1.008 + 27 gctgactgatacgcgatgc 472 19 0 57.89 60.025 0.00 0.00 0.00 1.025 + 28 agctagctgatcatcgatgct 190 21 0 47.62 60.035 17.99 11.09 0.00 1.035 + 29 gctagctagctgactgatcga 105 21 0 52.38 60.037 34.38 0.00 46.11 1.037 + 30 tcatctctgcgcgatcgat 363 19 0 52.63 59.946 22.07 0.12 38.48 1.054 + 31 atcatctctgcgcgatcga 362 19 0 52.63 59.946 22.07 1.72 38.48 1.054 + 32 atcgatcgatgtgcggcta 82 19 0 52.63 59.945 29.65 0.00 41.65 1.055 + 33 gtagcggcgatctagctagc 578 20 0 60.00 61.071 16.97 7.15 39.86 1.071 + 34 gctagctgactgatcgatcg 109 20 0 55.00 58.924 16.84 13.89 0.00 1.076 + 35 gctgatcgatcgatgtgcg 78 19 0 57.89 60.097 29.87 18.15 42.69 1.097 + 36 tatcatctctgcgcgatcgat 361 21 0 47.62 60.172 22.07 11.47 38.48 1.172 + 37 gctagctagctgatcgatcga 390 21 0 52.38 60.172 34.38 22.52 46.11 1.172 + 38 gctagctagctgatcgatcga 70 21 0 52.38 60.172 34.38 22.52 46.11 1.172 + 39 catctctgcgcgatcgatg 364 19 0 57.89 59.810 13.74 13.74 38.48 1.190 + 40 tcgtagcggcgatctagcta 576 20 0 55.00 61.231 11.55 9.27 36.40 1.231 + 41 actgatacgcgatgctagcta 476 21 0 47.62 59.765 17.69 3.08 0.00 1.235 + 42 actgatcgatcgatgctagct 117 21 0 47.62 59.763 23.29 11.70 35.21 1.237 + 43 agctagctgatcgatcgatgt 73 21 0 47.62 59.763 17.99 2.62 35.21 1.237 + 44 tagcggcgatctagctagct 579 20 0 55.00 61.243 23.74 23.74 46.60 1.243 + 45 cgtagcggcgatctagcta 577 19 0 57.89 59.729 11.55 9.27 37.58 1.271 + 46 ctagctgatcgatcgtagcg 564 20 0 55.00 58.727 25.02 15.05 0.00 1.273 + 47 tagcggcgatctagctagc 579 19 0 57.89 59.725 16.97 9.14 39.86 1.275 + 48 catcgatcgatgcatgcatg 442 20 0 50.00 58.722 37.80 23.31 44.93 1.278 + 49 tcatctctgcgcgatcgatg 363 20 0 55.00 61.279 18.01 18.01 38.48 1.279 + 50 gctagctagctgatcgatcg 559 20 0 55.00 58.714 34.38 11.90 46.11 1.286 + 51 gctagctagctgatcgatcg 390 20 0 55.00 58.714 34.38 11.90 46.11 1.286 + 52 gctagctagctgatcgatcg 70 20 0 55.00 58.714 34.38 11.90 46.11 1.286 + 53 agcatcggattagctagctga 3 21 0 47.62 59.689 28.29 20.88 0.00 1.311 + 54 agctgatcgatcgtagcgg 566 19 0 57.89 60.315 25.02 17.36 0.00 1.315 + 55 cggcgatctagctagctga 582 19 0 57.89 59.650 21.57 16.66 38.70 1.350 + 56 ctagctgatcgatcgatgtgc 75 21 0 52.38 59.643 31.83 30.04 35.21 1.357 + 57 gctagctgatcgatcgatgtg 74 21 0 52.38 59.643 12.06 6.93 35.21 1.357 + 58 gctagctaggcgatgctagc 412 20 0 60.00 61.357 30.41 30.41 46.19 1.357 + 59 tagctagctgactgatacgcg 466 21 0 52.38 60.373 28.29 3.89 0.00 1.373 + 60 gctagctgactgatcgatcga 109 21 0 52.38 60.374 22.52 22.52 0.00 1.374 + 61 agctagctgactgatcgatcg 108 21 0 52.38 60.374 17.99 13.89 0.00 1.374 + 62 cgatcgatgctagctaggcg 404 20 0 60.00 61.409 15.59 9.14 0.00 1.409 + 63 gctagctagctgactgatcg 105 20 0 55.00 58.563 34.38 1.84 46.11 1.437 + 64 atgctagctaggcgatgct 410 19 0 52.63 59.561 10.59 7.53 0.00 1.439 + 65 agctagctgatcgatcgtagc 562 21 0 52.38 60.441 26.87 26.87 0.00 1.441 + 66 gctagctagctgatcgatcgt 559 21 0 52.38 60.441 34.38 2.65 46.11 1.441 + 67 tagctaggcgatgctagctag 414 21 0 52.38 59.559 18.42 17.46 42.44 1.441 + 68 ctagctaggcgatgctagcta 413 21 0 52.38 59.559 18.69 17.64 42.44 1.441 + 69 tagctgatcgatcgatgtgc 76 20 0 50.00 58.558 31.83 30.04 35.21 1.442 + 70 gatgctagctaggcgatgcta 409 21 0 52.38 60.444 9.82 8.91 0.00 1.444 + 71 atgctagctaggcgatgctag 410 21 0 52.38 60.444 23.16 23.16 38.59 1.444 + 72 gctagctgatcatcgatgct 191 20 0 50.00 58.539 16.29 12.14 0.00 1.461 + 73 agctagctgatcatcgatgc 190 20 0 50.00 58.539 21.42 9.22 0.00 1.461 + 74 gctgactgatacgcgatgct 472 20 0 55.00 61.494 2.33 0.00 0.00 1.494 + 75 agctgactgatacgcgatgc 471 20 0 55.00 61.494 3.47 0.00 0.00 1.494 + 76 ggcgatctagctagctgacta 583 21 0 52.38 59.491 17.44 5.40 37.58 1.509 + 77 gatcgatgctagctaggcgat 405 21 0 52.38 60.510 21.61 21.61 0.00 1.510 + 78 atcgatcgatgctagctaggc 402 21 0 52.38 60.510 29.65 8.45 33.56 1.510 + 79 ctgatcgatcgatgtgcgg 79 19 0 57.89 59.447 15.54 5.83 41.65 1.553 + 80 agctgatcgatcgatgtgcg 77 20 0 55.00 61.556 31.92 20.26 42.69 1.556 + 81 cgatcatcgatgctagctagc 548 21 0 52.38 59.444 34.89 34.89 46.99 1.556 + 82 tagctaggcgatgctagcta 414 20 0 50.00 58.433 19.37 17.81 42.44 1.567 + 83 agctagctactgatcgatgct 303 21 0 47.62 59.415 17.56 11.51 0.00 1.585 + 84 tcgatcgatgtgcggctag 83 19 0 57.89 60.606 18.63 0.00 41.65 1.606 + 85 gactgatcgatcgatgctagc 116 21 0 52.38 59.378 15.86 8.45 35.21 1.622 + 86 agctagctgactgatcgatca 260 21 0 47.62 59.347 26.99 26.99 35.44 1.653 + 87 ctgactgatacgcgatgctag 473 21 0 52.38 59.312 1.70 0.00 0.00 1.688 + 88 ctagctgactgatacgcgatg 469 21 0 52.38 59.312 0.00 0.00 0.00 1.688 + 89 gctactatcatctctgcgcga 356 21 0 52.38 60.707 2.71 2.71 0.00 1.707 + 90 agctactatcatctctgcgcg 355 21 0 52.38 60.709 0.00 0.00 0.00 1.709 + 91 actatcatctctgcgcgatc 359 20 0 50.00 58.270 4.99 0.00 0.00 1.730 + 92 actgatcgatcgatgctagc 117 20 0 50.00 58.270 23.29 13.61 35.21 1.730 + 93 gctagctgatcgatcgatgt 74 20 0 50.00 58.270 14.29 2.62 35.21 1.730 + 94 ctatcatctctgcgcgatcga 360 21 0 52.38 60.771 22.07 1.72 38.48 1.771 + 95 atcgatgctagctaggcgatg 406 21 0 52.38 60.779 21.16 4.37 0.00 1.779 + 96 tgactgatacgcgatgctag 474 20 0 50.00 58.207 1.70 0.00 0.00 1.793 + 97 ctgactgatacgcgatgcta 473 20 0 50.00 58.207 2.33 0.00 0.00 1.793 + 98 tagctgactgatacgcgatg 470 20 0 50.00 58.207 0.00 0.00 0.00 1.793 + 99 ctgactgatcgatcgatgct 114 20 0 50.00 58.197 26.44 12.40 35.21 1.803 + 100 agctgactgatcgatcgatg 112 20 0 50.00 58.197 23.05 13.21 35.21 1.803 + 101 tcggattagctagctgatgc 7 20 0 50.00 58.176 17.46 17.46 40.05 1.824 + 102 gcatcggattagctagctga 4 20 0 50.00 58.176 28.29 20.88 0.00 1.824 + 103 agcatcggattagctagctg 3 20 0 50.00 58.171 28.29 10.80 0.00 1.829 + 104 gatgctagctaggcgatgc 409 19 0 57.89 59.141 4.18 0.00 0.00 1.859 + 105 ctgatacgcgatgctagctag 477 21 0 52.38 59.113 17.46 17.46 0.00 1.887 + 106 gctagctgactgatacgcg 468 19 0 57.89 59.086 8.21 3.89 0.00 1.914 + 107 ctctgcgcgatcgatgctag 367 20 0 60.00 61.946 21.94 18.16 38.48 1.946 + 108 tctgcgcgatcgatgctag 368 19 0 57.89 60.966 21.94 18.16 38.48 1.966 + 109 ctctgcgcgatcgatgcta 367 19 0 57.89 60.966 26.61 17.10 38.48 1.966 + 110 cgatgctagctaggcgatgc 408 20 0 60.00 61.968 11.09 0.00 0.00 1.968 + 111 gactgatacgcgatgctagct 475 21 0 52.38 60.975 17.69 1.35 0.00 1.975 + 112 gctagctgactgatacgcgat 468 21 0 52.38 60.975 8.21 0.00 0.00 1.975 + 113 tgatacgcgatgctagctag 478 20 0 50.00 57.994 17.46 17.46 0.00 2.006 + 114 ctgatacgcgatgctagcta 477 20 0 50.00 57.994 17.69 3.08 0.00 2.006 + 115 cgcgatcgatgctagctagc 372 20 0 60.00 62.011 34.89 34.89 43.67 2.011 + 116 gcgcgatcgatgctagctag 371 20 0 60.00 62.011 21.66 17.46 38.48 2.011 + 117 ctgatcgatcgatgctagct 399 20 0 50.00 57.983 19.70 2.01 35.21 2.017 + 118 agctgatcgatcgatgctag 397 20 0 50.00 57.983 27.33 18.05 34.69 2.017 + 119 ctagctgatcgatcgatgct 395 20 0 50.00 57.983 33.87 33.38 38.16 2.017 + 120 agctagctgatcgatcgatg 393 20 0 50.00 57.983 21.99 11.03 35.21 2.017 + 121 ctgatcgatcgatgctagct 118 20 0 50.00 57.983 19.70 2.01 35.21 2.017 + 122 agctagctgatcgatcgatg 73 20 0 50.00 57.983 21.99 11.03 35.21 2.017 + 123 catcggattagctagctgatgc 5 22 0 50.00 59.982 24.41 24.41 40.05 2.018 + 124 gcatcggattagctagctgatg 4 22 0 50.00 59.982 27.81 27.81 33.28 2.018 + 125 tcgatgctagctaggcgat 407 19 0 52.63 58.964 14.03 3.01 0.00 2.036 + 126 atcgatgctagctaggcga 406 19 0 52.63 58.964 16.30 16.30 0.00 2.036 + 127 actatcatctctgcgcgatcg 359 21 0 52.38 61.037 12.19 12.19 39.07 2.037 + 128 gcgcgatcgatgctagcta 371 19 0 57.89 61.037 21.66 3.08 38.48 2.037 + 129 gctgatcgatcgatgctagct 398 21 0 52.38 61.044 27.88 12.70 35.21 2.044 + 130 agctgatcgatcgatgctagc 397 21 0 52.38 61.044 27.33 27.90 34.69 2.044 + 131 gctagctgatcgatcgatgct 394 21 0 52.38 61.044 33.87 33.38 38.16 2.044 + 132 agctagctgatcgatcgatgc 393 21 0 52.38 61.044 24.08 21.09 35.21 2.044 + 133 cgcgatcgatgctagctag 372 19 0 57.89 58.947 22.07 17.46 38.48 2.053 + 134 tcgtagcggcgatctagc 576 18 0 61.11 59.936 4.70 0.00 36.40 2.064 + 135 cgtagcggcgatctagct 577 18 0 61.11 59.935 11.03 11.03 37.58 2.065 + 136 gcggcgatctagctagct 581 18 0 61.11 59.933 23.74 23.74 38.05 2.067 + 137 agcggcgatctagctagc 580 18 0 61.11 59.933 16.97 7.15 39.86 2.067 + 138 ctagctgactgatacgcgat 469 20 0 50.00 57.918 1.43 0.00 0.00 2.082 + 139 ctagctgatcgatcgtagcgg 564 21 0 57.14 61.096 20.31 16.15 0.00 2.096 + 140 agctactatcatctctgcgc 355 20 0 50.00 57.898 0.00 0.00 0.00 2.102 + 141 gctagctactgatcgatgct 304 20 0 50.00 57.898 11.51 11.51 0.00 2.102 + 142 agctagctactgatcgatgc 303 20 0 50.00 57.898 17.56 1.76 0.00 2.102 + 143 agcatcggattagctagctgat 3 22 0 45.45 60.108 17.84 15.13 0.00 2.108 + 144 tgctagctaggcgatgcta 411 19 0 52.63 58.881 17.69 8.91 0.00 2.119 + 145 aagcatcggattagctagctg 2 21 0 47.62 58.879 28.29 10.80 0.00 2.121 + 146 tctgcgcgatcgatgcta 368 18 0 55.56 59.857 26.61 16.13 38.48 2.143 + 147 cgatgctagctaggcgatg 408 19 0 57.89 58.856 11.09 0.00 0.00 2.144 + 148 agctagctgatcatcgatgcta 190 22 0 45.45 59.845 17.99 13.09 0.00 2.155 + 149 tagctagctgatcatcgatgct 189 22 0 45.45 59.845 16.29 15.30 0.00 2.155 + 150 atcgatcgatgtgcggct 82 18 0 55.56 60.166 29.65 4.36 41.65 2.166 + 151 gctagctgactgatcgatca 261 20 0 50.00 57.829 26.99 26.99 35.44 2.171 + 152 tagctagctgactgatcgatcg 107 22 0 50.00 60.174 28.29 13.89 0.00 2.174 + 153 agctgatcatcatcgatgct 515 20 0 45.00 57.788 11.25 0.72 40.32 2.212 + 154 agctagctgactgatcgatcat 260 22 0 45.45 59.778 26.67 18.02 36.62 2.222 + 155 tgactgatacgcgatgctagc 474 21 0 52.38 61.238 8.61 8.61 0.00 2.238 + 156 gctgactgatacgcgatgcta 472 21 0 52.38 61.238 2.33 0.00 0.00 2.238 + 157 tagctgactgatacgcgatgc 470 21 0 52.38 61.238 3.47 0.00 0.00 2.238 + 158 tagctagctgatcgatcgtagc 561 22 0 50.00 60.238 26.87 26.87 0.00 2.238 + 159 gctagctagctgatcgatcgta 559 22 0 50.00 60.238 34.38 3.07 46.11 2.238 + 160 tgatcgatcgatgctagctagg 400 22 0 50.00 60.239 26.44 6.29 35.21 2.239 + 161 gctgactgatcgatcgatgct 113 21 0 52.38 61.244 26.44 12.40 35.21 2.244 + 162 agctgactgatcgatcgatgc 112 21 0 52.38 61.244 24.08 19.43 35.21 2.244 + 163 gatcgatcgatgtgcggct 81 19 0 57.89 61.263 19.16 0.00 41.65 2.263 + 164 gctgatcatcgatgctactagc 195 22 0 50.00 59.727 18.08 16.44 45.61 2.273 + 165 gctagctgatcatcgatgctac 191 22 0 50.00 59.727 9.57 5.47 0.00 2.273 + 166 gatcgatcgatgtgcggc 81 18 0 61.11 59.714 18.10 0.95 41.65 2.286 + 167 ctagctagctgactgatacgc 465 21 0 52.38 58.703 14.90 0.00 0.00 2.297 + 168 tagctgatcgatcgatgtgcg 76 21 0 52.38 61.299 31.92 20.26 42.69 2.299 + 169 agctgatcgatcgatgtgc 77 19 0 52.63 58.698 31.83 30.04 35.21 2.302 + 170 gctgatcatcatcgatgctagc 516 22 0 50.00 60.302 10.80 10.34 40.32 2.302 + 171 gctagctgatcatcatcgatgc 512 22 0 50.00 60.302 21.42 7.40 40.32 2.302 + 172 aagcatcggattagctagctga 2 22 0 45.45 60.306 28.29 20.88 0.00 2.306 + 173 gatcgatcgtagcggcga 570 18 0 61.11 60.318 13.01 8.51 45.59 2.318 + 174 atcggattagctagctgatgc 6 21 0 47.62 58.673 17.46 17.46 40.05 2.327 + 175 gcatcggattagctagctgat 4 21 0 47.62 58.673 17.84 15.13 0.00 2.327 + 176 gcggcgatctagctagctg 581 19 0 63.16 61.329 17.07 8.17 38.05 2.329 + 177 tgctagtgatgcatgctagt 24 20 0 45.00 57.636 24.96 11.17 35.89 2.364 + 178 ctactatcatctctgcgcga 357 20 0 50.00 57.636 2.71 2.71 0.00 2.364 + 179 actagctagctgactgatacgc 464 22 0 50.00 60.368 21.52 0.00 0.00 2.368 + 180 gctagctagctgatcatcga 187 20 0 50.00 57.613 34.38 0.24 46.11 2.387 + 181 tctctgcgcgatcgatgcta 366 20 0 55.00 62.413 26.61 17.10 38.48 2.413 + 182 tgatcgatcgatgctagctagt 119 22 0 45.45 59.586 26.44 5.69 35.21 2.414 + 183 actgatcgatcgatgctagcta 117 22 0 45.45 59.586 23.29 7.65 35.21 2.414 + 184 tagctagctgatcgatcgatgt 72 22 0 45.45 59.586 14.29 2.62 35.21 2.414 + 185 agctaggcgatgctagcta 415 19 0 52.63 58.572 17.69 3.08 41.54 2.428 + 186 tagctaggcgatgctagct 414 19 0 52.63 58.572 17.35 17.35 43.53 2.428 + 187 gatcgatcgatgctagctagg 401 21 0 52.38 58.567 23.89 6.29 35.21 2.433 + 188 gctagctagctgactgatcgat 105 22 0 50.00 60.434 34.38 0.00 46.11 2.434 + 189 gatcgatgctagctaggcg 405 19 0 57.89 58.563 15.59 9.02 0.00 2.437 + 190 cgatcgatgctagctaggc 404 19 0 57.89 58.563 14.87 8.45 0.00 2.437 + 191 tagctagctgactgatacgc 466 20 0 50.00 57.549 28.29 0.00 0.00 2.451 + 192 agctagctgactgatcgatc 260 20 0 50.00 57.536 19.32 19.32 0.00 2.464 + 193 agctagctgactgatcgatc 108 20 0 50.00 57.536 19.32 19.32 0.00 2.464 + 194 aaagcatcggattagctagctg 1 22 0 45.45 59.524 28.29 10.80 0.00 2.476 + 195 gctgactgatcgatcatcatgc 265 22 0 50.00 60.493 25.66 25.12 41.77 2.493 + 196 tagctactatcatctctgcgcg 354 22 0 50.00 60.495 0.00 0.00 0.00 2.495 + 197 ctgatcgatcgatgtgcggc 79 20 0 60.00 62.497 15.54 4.15 41.65 2.497 + 198 gctgatcgatcgatgtgcgg 78 20 0 60.00 62.497 29.87 22.23 41.65 2.497 + 199 tcgtagcggcgatctagct 576 19 0 57.89 61.503 11.03 11.03 36.40 2.503 + 200 agcggcgatctagctagct 580 19 0 57.89 61.519 23.74 23.74 42.96 2.519 + 201 ctagctagctgatcatcgatgc 188 22 0 50.00 59.470 21.42 9.22 0.00 2.530 + 202 gctagctagctgatcatcgatg 187 22 0 50.00 59.470 34.38 20.23 46.11 2.530 + 203 tcatctctgcgcgatcga 363 18 0 55.56 59.468 22.07 0.00 38.48 2.532 + 204 tcgatcgatgtgcggcta 83 18 0 55.56 59.465 18.63 0.00 41.65 2.535 + 205 tgatcgatcgatgtgcggc 80 19 0 57.89 61.549 21.27 8.44 41.65 2.549 + 206 ctagctaggcgatgctagctag 413 22 0 54.55 60.561 22.99 22.99 46.84 2.561 + 207 gctagctagctgatcgatcgat 390 22 0 50.00 60.561 34.38 30.53 46.11 2.561 + 208 gctagctagctgatcgatcgat 70 22 0 50.00 60.561 34.38 30.53 46.11 2.561 + 209 ctgcgcgatcgatgctag 369 18 0 61.11 59.415 19.79 13.97 38.48 2.585 + 210 aagcatcggattagctagct 2 20 0 45.00 57.413 23.74 23.74 0.00 2.587 + 211 gctagctgatcatcgatgcta 191 21 0 47.62 58.410 16.61 13.09 0.00 2.590 + 212 tagctagctgatcatcgatgc 189 21 0 47.62 58.410 21.42 9.22 0.00 2.590 + 213 actgatacgcgatgctagc 476 19 0 52.63 58.407 8.61 8.61 0.00 2.593 + 214 gctagctgactgatcgatcatc 261 22 0 50.00 59.406 23.93 21.92 36.62 2.594 + 215 atcgatcgatgctagctagg 402 20 0 50.00 57.396 29.65 6.29 33.56 2.604 + 216 atctctgcgcgatcgatgc 365 19 0 57.89 61.618 22.01 22.01 38.48 2.618 + 217 tgatcgatcgtagcggcg 569 18 0 61.11 60.621 20.58 0.86 0.00 2.621 + 218 atcatctctgcgcgatcgatg 362 21 0 52.38 61.633 18.01 18.01 38.48 2.633 + 219 agctagctgatcgatcgtag 562 20 0 50.00 57.344 17.99 16.86 0.00 2.656 + 220 ctagctagctgatcgatcgt 560 20 0 50.00 57.344 16.40 2.65 0.00 2.656 + 221 gctagctgactgatcgatcat 261 21 0 47.62 58.339 26.67 18.02 36.62 2.661 + 222 ctgatcgatcgtagcggcg 568 19 0 63.16 61.664 14.21 0.86 0.00 2.664 + 223 ctgactgatacgcgatgct 473 19 0 52.63 58.330 2.33 0.00 0.00 2.670 + 224 agctgactgatacgcgatg 471 19 0 52.63 58.330 0.00 0.00 0.00 2.670 + 225 gctagctgatcgatcgtagcg 563 21 0 57.14 61.676 24.18 16.49 0.00 2.676 + 226 ctagctgactgatcgatcga 110 20 0 50.00 57.276 22.52 22.52 0.00 2.724 + 227 agctagctactgatcgatgcta 303 22 0 45.45 59.252 17.56 12.23 0.00 2.748 + 228 tagctagctactgatcgatgct 302 22 0 45.45 59.252 27.80 11.51 0.00 2.748 + 229 gactgatacgcgatgctagcta 475 22 0 50.00 60.751 17.69 3.08 0.00 2.751 + 230 actgatacgcgatgctagctag 476 22 0 50.00 60.752 17.46 17.46 0.00 2.752 + 231 gactgatcgatcgatgctagct 116 22 0 50.00 60.753 18.04 9.56 35.21 2.753 + 232 gctagctgactgatcgatcgat 109 22 0 50.00 60.753 30.53 30.53 37.90 2.753 + 233 tgcgcgatcgatgctagcta 370 20 0 55.00 62.756 26.61 9.85 38.48 2.756 + 234 gcggcgatctagctagctga 581 20 0 60.00 62.765 21.57 16.66 38.70 2.765 + 235 agcggcgatctagctagctg 580 20 0 60.00 62.771 17.07 8.17 44.87 2.771 + 236 ctactatcatctctgcgcgatc 357 22 0 50.00 59.220 4.99 0.00 0.00 2.780 + 237 tatcatctctgcgcgatcg 361 19 0 52.63 58.199 12.19 12.19 39.07 2.801 + 238 tactatcatctctgcgcgatcg 358 22 0 50.00 60.811 12.19 12.19 39.07 2.811 + 239 tagctagctgactgatcgatca 259 22 0 45.45 59.187 28.29 26.99 35.44 2.813 + 240 gctgatcgatcgatgctagcta 398 22 0 50.00 60.816 27.88 12.57 35.21 2.816 + 241 tagctgatcgatcgatgctagc 396 22 0 50.00 60.816 30.84 27.90 36.80 2.816 + 242 gctagctgatcgatcgatgcta 394 22 0 50.00 60.816 34.11 32.56 36.80 2.816 + 243 tagctagctgatcgatcgatgc 392 22 0 50.00 60.816 24.08 21.09 35.21 2.816 + 244 gctaggcgatgctagctag 416 19 0 57.89 58.179 17.46 17.46 35.42 2.821 + 245 ctagctaggcgatgctagc 413 19 0 57.89 58.179 18.68 9.44 36.95 2.821 + 246 gctagctaggcgatgctag 412 19 0 57.89 58.179 23.16 23.16 38.59 2.821 + 247 catctctgcgcgatcgatgc 364 20 0 60.00 62.823 22.01 22.01 38.48 2.823 + 248 aaagcatcggattagctagct 1 21 0 42.86 58.168 23.74 23.74 0.00 2.832 + 249 ctgactgatcgatcgatgctag 114 22 0 50.00 59.155 22.81 19.44 35.21 2.845 + 250 ctagctgactgatcgatcgatg 110 22 0 50.00 59.155 23.05 13.21 35.21 2.845 + 251 tactatcatctctgcgcgatc 358 21 0 47.62 58.155 4.99 0.00 0.00 2.845 + 252 gctagctactgatcgatgctac 304 22 0 50.00 59.151 8.57 4.26 0.00 2.849 + 253 ctactatcatctctgcgcgat 357 21 0 47.62 58.150 4.99 2.52 0.00 2.850 + 254 agctgatcatcgatgctact 194 20 0 45.00 57.134 17.14 8.95 0.00 2.866 + 255 gctagctagctgatcatcgat 187 21 0 47.62 58.132 34.38 0.00 46.11 2.868 + 256 ctgatacgcgatgctagct 477 19 0 52.63 58.107 17.69 1.35 0.00 2.893 + 257 ggcgatctagctagctgac 583 19 0 57.89 58.106 14.84 7.25 37.58 2.894 + 258 tgactgatcgatcgatgctag 115 21 0 47.62 58.084 22.81 19.44 35.21 2.916 + 259 ctgactgatcgatcgatgcta 114 21 0 47.62 58.084 26.44 14.64 35.21 2.916 + 260 tagctgactgatcgatcgatg 111 21 0 47.62 58.084 23.05 13.21 35.21 2.916 + 261 actgatcgatcatcatgctagc 269 22 0 45.45 59.071 26.67 8.61 41.77 2.929 + 262 agctgactgatcgatcatca 264 20 0 45.00 57.064 26.49 26.49 39.98 2.936 + 263 ctagctagctgatcgatcga 391 20 0 50.00 57.060 22.52 22.52 0.00 2.940 + 264 ctagctagctgatcgatcga 71 20 0 50.00 57.060 22.52 22.52 0.00 2.940 + 265 gatcgatcgatgtgcggctag 81 21 0 57.14 61.947 19.16 0.00 41.65 2.947 + 266 tgctagctaggcgatgct 411 18 0 55.56 59.050 17.69 7.53 0.00 2.950 + 267 gctgatcgatcgtagcggc 567 19 0 63.16 61.960 20.49 19.38 0.00 2.960 + 268 cgatcgatgtgcggctag 84 18 0 61.11 59.032 10.82 0.00 41.65 2.968 + 269 tgatcgatcgatgtgcggct 80 20 0 55.00 62.987 22.21 0.00 41.65 2.987 + 270 ctgactgatcgatcatcatgct 266 22 0 45.45 59.004 20.99 6.82 41.77 2.996 + 271 agctgactgatcgatcatcatg 264 22 0 45.45 59.004 22.70 19.51 41.77 2.996 + 272 agctagctgactgatacgcga 467 21 0 52.38 62.000 17.99 0.00 0.00 3.000 + 273 tgactgatcgatcgatgctagc 115 22 0 50.00 61.008 18.17 12.52 35.21 3.008 + 274 gctgactgatcgatcgatgcta 113 22 0 50.00 61.008 26.44 14.64 35.21 3.008 + 275 tagctgactgatcgatcgatgc 111 22 0 50.00 61.008 24.08 19.43 35.21 3.008 + 276 agctagctgatcgatcgatgtg 73 22 0 50.00 61.010 17.99 6.93 35.21 3.010 + 277 ctgatcgatcgatgctagctag 399 22 0 50.00 58.963 19.70 17.46 35.21 3.037 + 278 ctagctgatcgatcgatgctag 395 22 0 50.00 58.963 37.86 37.86 43.17 3.037 + 279 ctagctagctgatcgatcgatg 391 22 0 50.00 58.963 21.99 11.03 35.21 3.037 + 280 ctgatcgatcgatgctagctag 118 22 0 50.00 58.963 19.70 17.46 35.21 3.037 + 281 ctagctagctgatcgatcgatg 71 22 0 50.00 58.963 21.99 11.03 35.21 3.037 + 282 gactgatcgatcatcatgctagc 268 23 0 47.83 60.053 24.51 9.03 41.77 3.053 + 283 gctagtgatgcatgctagtagtg 25 23 0 47.83 59.929 24.96 10.54 0.00 3.071 + 284 gctactatcatctctgcgcgat 356 22 0 50.00 61.073 4.99 2.52 0.00 3.073 + 285 gtagcggcgatctagctag 578 19 0 57.89 57.903 15.64 15.64 37.58 3.097 + 286 tgactgatcgatcatcatgct 267 21 0 42.86 57.900 26.79 12.28 41.77 3.100 + 287 ctagctactatcatctctgcgc 353 22 0 50.00 58.892 0.00 0.00 0.00 3.108 + 288 gctagctactatcatctctgcg 352 22 0 50.00 58.892 8.21 0.00 0.00 3.108 + 289 ctagctagctactgatcgatgc 301 22 0 50.00 58.892 14.00 1.76 0.00 3.108 + 290 gctagctagctactgatcgatg 300 22 0 50.00 58.892 34.38 7.78 46.11 3.108 + 291 catcgatcgatgctagtatgct 325 22 0 45.45 58.885 37.80 10.02 44.93 3.115 + 292 tgatcgatcgatgctagctag 400 21 0 47.62 57.879 26.44 17.46 35.21 3.121 + 293 ctgatcgatcgatgctagcta 399 21 0 47.62 57.879 19.70 3.77 35.21 3.121 + 294 tagctgatcgatcgatgctag 396 21 0 47.62 57.879 34.03 27.12 36.80 3.121 + 295 ctagctgatcgatcgatgcta 395 21 0 47.62 57.879 34.11 32.56 36.80 3.121 + 296 tagctagctgatcgatcgatg 392 21 0 47.62 57.879 21.99 11.03 35.21 3.121 + 297 tgatcgatcgatgctagctag 119 21 0 47.62 57.879 26.44 17.46 35.21 3.121 + 298 ctgatcgatcgatgctagcta 118 21 0 47.62 57.879 19.70 3.77 35.21 3.121 + 299 tagctagctgatcgatcgatg 72 21 0 47.62 57.879 21.99 11.03 35.21 3.121 + 300 gatcgatcgatgctagctagt 120 21 0 47.62 57.878 23.89 3.56 35.21 3.122 + 301 ctatcatctctgcgcgatcgat 360 22 0 50.00 61.132 22.07 11.47 38.48 3.132 + 302 tgatcgatcgtagcggcga 569 19 0 57.89 62.144 20.58 8.51 45.59 3.144 + 303 tcgtagcggcgatctagctag 576 21 0 57.14 62.173 15.64 15.64 36.40 3.173 + 304 tactagctagctgactgatacgc 463 23 0 47.83 60.176 13.17 0.00 0.00 3.176 + 305 ctgatcatcatcgatgctagct 517 22 0 45.45 58.807 17.69 1.76 40.32 3.193 + 306 agctgatcatcatcgatgctag 515 22 0 45.45 58.807 5.93 2.76 40.32 3.193 + 307 ctagctgatcatcatcgatgct 513 22 0 45.45 58.807 14.14 8.34 40.32 3.193 + 308 agctagctgatcatcatcgatg 511 22 0 45.45 58.807 20.23 20.23 41.48 3.193 + 309 ctgatcgatcatcatgctagct 270 22 0 45.45 58.807 26.67 0.00 41.77 3.193 + 310 ctagctgactgatcgatcgat 110 21 0 47.62 57.806 30.53 30.53 37.90 3.194 + 311 ttagctagctgactgatcgatca 258 23 0 43.48 59.798 28.29 26.99 35.44 3.202 + 312 tagctactatcatctctgcgc 354 21 0 47.62 57.798 0.00 0.00 0.00 3.202 + 313 gctagctactgatcgatgcta 304 21 0 47.62 57.798 12.99 12.23 0.00 3.202 + 314 tagctagctactgatcgatgc 302 21 0 47.62 57.798 27.80 1.76 0.00 3.202 + 315 tctctgcgcgatcgatgc 366 18 0 61.11 61.229 22.01 22.01 38.48 3.229 + 316 ctctgcgcgatcgatgct 367 18 0 61.11 61.232 26.61 0.00 38.48 3.232 + 317 agctagctactatcatctctgcg 351 23 0 47.83 60.238 17.56 0.00 0.00 3.238 + 318 ctagctagctactgatcgatgct 301 23 0 47.83 60.238 14.00 11.51 0.00 3.238 + 319 ctgatcgatcgtagcggc 568 18 0 61.11 58.727 14.21 0.00 0.00 3.273 + 320 gctgatcgatcgtagcgg 567 18 0 61.11 58.727 20.49 15.03 0.00 3.273 + 321 agctaggcgatgctagct 415 18 0 55.56 58.725 17.69 13.00 39.84 3.275 + 322 tgctagtgatgcatgctagtagt 24 23 0 43.48 60.302 24.96 12.98 35.89 3.302 + 323 gcgcgatcgatgctagct 371 18 0 61.11 61.306 21.66 1.35 38.48 3.306 + 324 tgatcatcatcgatgctagct 518 21 0 42.86 57.691 17.69 1.76 40.32 3.309 + 325 agctgatcatcatcgatgcta 515 21 0 42.86 57.691 0.24 0.00 40.32 3.309 + 326 tagctgatcatcatcgatgct 514 21 0 42.86 57.691 14.14 8.34 40.32 3.309 + 327 tgatcgatcatcatgctagct 271 21 0 42.86 57.691 27.48 0.00 37.38 3.309 + 328 ctagctagctgactgatacgcg 465 22 0 54.55 61.313 14.90 3.89 0.00 3.313 + 329 tgctagtgatgcatgctagtag 24 22 0 45.45 58.673 24.96 19.76 35.89 3.327 + 330 gctagtgatgcatgctagtagt 25 22 0 45.45 58.672 24.96 12.98 0.00 3.328 + 331 tagctagctgatcatcgatgcta 189 23 0 43.48 59.671 17.82 15.89 0.00 3.329 + 332 agctagctgactgatacgc 467 19 0 52.63 57.642 17.99 0.00 0.00 3.358 + 333 tatcatctctgcgcgatcgatg 361 22 0 50.00 61.383 18.01 18.01 38.48 3.383 + 334 agctgactgatcgatcatcat 264 21 0 42.86 57.616 26.31 18.90 41.77 3.384 + 335 actagctagctgatcatcatcga 508 23 0 43.48 59.607 22.43 0.00 0.00 3.393 + 336 tagctagctgactgatcgatcat 259 23 0 43.48 59.607 28.29 18.02 36.62 3.393 + 337 gatgctagctaggcgatgctag 409 22 0 54.55 61.393 23.16 23.16 38.59 3.393 + 338 cggcgatctagctagctgact 582 21 0 57.14 62.394 17.44 7.44 38.70 3.394 + 339 ctagctagctgatcgatcgat 391 21 0 47.62 57.600 30.53 30.53 37.90 3.400 + 340 ctagctagctgatcgatcgat 71 21 0 47.62 57.600 30.53 30.53 37.90 3.400 + 341 actgatcgatcatcatgctagct 269 23 0 43.48 60.428 26.67 4.70 41.77 3.428 + 342 ctagctagctgactgatcgatc 106 22 0 50.00 58.567 19.32 19.32 0.00 3.433 + 343 ctgactgatcgatcatcatgc 266 21 0 47.62 57.562 20.99 12.19 41.77 3.438 + 344 gctgactgatcgatcatcatg 265 21 0 47.62 57.562 22.70 19.51 41.77 3.438 + 345 gatcgatcgatgctagctaggc 401 22 0 54.55 61.448 23.89 8.45 35.21 3.448 + 346 gtgatgcatgctagtagtgatgt 29 23 0 43.48 59.551 11.60 0.00 0.00 3.449 + 347 tgctagtgatgcatgctagta 24 21 0 42.86 57.546 24.96 21.25 35.89 3.454 + 348 tagcggcgatctagctagctg 579 21 0 57.14 62.457 18.98 9.30 45.57 3.457 + 349 gtagcggcgatctagctagct 578 21 0 57.14 62.458 23.74 23.74 46.60 3.458 + 350 tagctgatcgatcgtagcg 565 19 0 52.63 57.539 25.02 11.96 0.00 3.461 + 351 gctagctagctactgatcgat 300 21 0 47.62 57.517 34.38 0.00 46.11 3.483 + 352 agctagctactgatcgatgctac 303 23 0 47.83 60.487 17.56 7.81 0.00 3.487 + 353 atcgatcgatgctagtatgct 326 21 0 42.86 57.502 29.65 2.17 33.56 3.498 + 354 agctactgatcgatgctacatc 307 22 0 45.45 58.484 7.41 0.00 37.97 3.516 + 355 agtgatgcatgctagtagtga 28 21 0 42.86 57.471 0.00 0.00 0.00 3.529 + 356 gactgatcgatcgatgctagcta 116 23 0 47.83 60.546 18.04 4.19 35.21 3.546 + 357 ctgatcgatcgatgctagctagt 118 23 0 47.83 60.547 22.18 3.56 35.21 3.547 + 358 actgatcgatcgatgctagctag 117 23 0 47.83 60.547 23.29 17.46 35.21 3.547 + 359 ctagctagctgatcgatcgatgt 71 23 0 47.83 60.547 14.29 2.62 35.21 3.547 + 360 catcgatcgatgctagtatgc 325 21 0 47.62 57.452 37.80 0.00 44.93 3.548 + 361 tagctagctgactgatcgatc 259 21 0 47.62 57.451 28.29 19.32 0.00 3.549 + 362 tagctagctgactgatcgatc 107 21 0 47.62 57.451 28.29 19.32 0.00 3.549 + 363 ctagctagctgactgatcgat 106 21 0 47.62 57.445 14.90 0.00 0.00 3.555 + 364 tcgatgctagctaggcga 407 18 0 55.56 58.427 15.59 13.52 0.00 3.573 + 365 tgatcgatcgatgctagctagta 119 23 0 43.48 59.424 26.44 18.77 35.21 3.576 + 366 ctgcgcgatcgatgctagc 369 19 0 63.16 62.586 20.26 12.12 38.48 3.586 + 367 agctagctgatcatcatcgat 511 21 0 42.86 57.405 17.99 0.00 0.00 3.595 + 368 tgcgcgatcgatgctagc 370 18 0 61.11 61.605 26.61 17.77 38.48 3.605 + 369 ctagctagctgatcgatcgtag 560 22 0 50.00 58.387 16.86 16.86 0.00 3.613 + 370 actagctagctgactgatacg 464 21 0 47.62 57.384 21.52 2.77 0.00 3.616 + 371 ctagctgactgatacgcga 469 19 0 52.63 57.370 16.29 0.00 0.00 3.630 + 372 gctactagctagctgactgat 461 21 0 47.62 57.360 15.96 3.00 44.92 3.640 + 373 ctgatcatcatcgatgctagc 517 21 0 47.62 57.358 8.61 8.61 40.32 3.642 + 374 gctgatcatcatcgatgctag 516 21 0 47.62 57.358 5.93 2.76 40.32 3.642 + 375 ctagctgatcatcatcgatgc 513 21 0 47.62 57.358 21.42 7.40 40.32 3.642 + 376 gctagctgatcatcatcgatg 512 21 0 47.62 57.358 20.23 20.23 41.48 3.642 + 377 ctgatcgatcatcatgctagc 270 21 0 47.62 57.358 26.67 8.61 41.77 3.642 + 378 agctactgatcgatgctacat 307 21 0 42.86 57.344 7.41 0.00 0.00 3.656 + 379 tgatcgatcgatgtgcggcta 80 21 0 52.38 62.663 22.21 0.24 41.65 3.663 + 380 atctctgcgcgatcgatg 365 18 0 55.56 58.327 12.03 4.19 38.48 3.673 + 381 catctctgcgcgatcgat 364 18 0 55.56 58.327 22.07 1.26 38.48 3.673 + 382 atcatctctgcgcgatcg 362 18 0 55.56 58.327 12.19 12.19 39.07 3.673 + 383 aagcatcggattagctagctgat 2 23 0 43.48 60.682 17.84 15.13 0.00 3.682 + 384 agtgatgcatgctagtagtgatg 28 23 0 43.48 59.299 7.49 7.49 0.00 3.701 + 385 gatcgatgctagctaggcgatg 405 22 0 54.55 61.702 24.26 6.24 0.00 3.702 + 386 atctctgcgcgatcgatgcta 365 21 0 52.38 62.723 26.61 17.10 38.48 3.723 + 387 tagctagctgactgatacgcga 466 22 0 50.00 61.730 28.29 0.00 0.00 3.730 + 388 tagctagctgatcgatcgtag 561 21 0 47.62 57.269 16.86 16.86 0.00 3.731 + 389 ctagctagctgatcgatcgta 560 21 0 47.62 57.269 11.68 3.07 0.00 3.731 + 390 tcgatcgatgctagctagtag 122 21 0 47.62 57.269 18.63 2.63 0.00 3.731 + 391 gctagctactgatcgatgctaca 304 23 0 47.83 60.734 11.21 0.06 0.00 3.734 + 392 agctagctgactgatcgatcatc 260 23 0 47.83 60.736 23.93 21.92 36.62 3.736 + 393 agctagctgactgatcgatcga 108 22 0 50.00 61.737 22.52 22.52 0.00 3.737 + 394 tctctgcgcgatcgatgct 366 19 0 57.89 62.740 26.61 0.00 38.48 3.740 + 395 tgatgcatgctagtagtgatgt 30 22 0 40.91 58.256 11.60 0.00 0.00 3.744 + 396 tgatcgatcgatgtgcgg 80 18 0 55.56 58.244 21.27 0.00 41.65 3.756 + 397 cgatcgatgctagctaggcga 404 21 0 57.14 62.770 16.30 16.30 0.00 3.770 + 398 tcgatcgatgctagctaggcg 403 21 0 57.14 62.770 18.63 11.67 0.00 3.770 + 399 atcgatcgatgcatgcatg 443 19 0 47.37 57.226 29.65 23.31 37.30 3.774 + 400 catcgatcgatgcatgcat 442 19 0 47.37 57.226 37.80 33.45 44.93 3.774 + 401 actagctagctgatcatcatcg 508 22 0 45.45 58.219 22.43 3.40 0.00 3.781 + 402 ctgatcatcgatgctactagct 196 22 0 45.45 58.219 10.86 0.00 45.92 3.781 + 403 agctgatcatcgatgctactag 194 22 0 45.45 58.219 13.67 9.68 0.00 3.781 + 404 ctagctgatcatcgatgctact 192 22 0 45.45 58.219 14.85 7.80 0.00 3.781 + 405 tttagctagctgactgatcga 257 21 0 42.86 57.216 0.38 0.00 0.00 3.784 + 406 tagctagctgatcgatcgatgtg 72 23 0 47.83 60.793 10.14 4.94 35.21 3.793 + 407 gctagctagctgatcatcatct 146 22 0 45.45 58.203 34.38 0.00 46.11 3.797 + 408 ctagctagctgatcatcgatgct 188 23 0 47.83 60.799 16.29 15.30 0.00 3.799 + 409 agctagctactatcatcgatcga 429 23 0 43.48 59.170 22.52 22.52 0.00 3.830 + 410 ttagctagctgactgatcgatc 258 22 0 45.45 58.159 28.29 19.32 0.00 3.841 + 411 ctagctgactgatcgatcatca 262 22 0 45.45 58.155 26.49 26.49 39.98 3.845 + 412 aaagcatcggattagctagctga 1 23 0 43.48 60.870 28.29 20.88 0.00 3.870 + 413 agctgactgatacgcgatgct 471 21 0 52.38 62.876 7.57 2.13 0.00 3.876 + 414 tagctagctactgatcgatgcta 302 23 0 43.48 59.102 27.80 12.23 0.00 3.898 + 415 tcatcatcgatgctagctagt 521 21 0 42.86 57.067 22.18 3.56 40.32 3.933 + 416 tcgatcatcatgctagctact 274 21 0 42.86 57.067 0.00 0.00 0.00 3.933 + 417 tgatcatcgatgctactagct 197 21 0 42.86 57.067 17.14 0.00 45.92 3.933 + 418 agctgatcatcgatgctacta 194 21 0 42.86 57.067 17.14 4.89 0.00 3.933 + 419 tagctgatcatcgatgctact 193 21 0 42.86 57.067 14.85 7.80 0.00 3.933 + 420 tcgatcgatgctagtatgctag 327 22 0 45.45 58.044 18.63 13.77 46.09 3.956 + 421 gcgatctagctagctgact 584 19 0 52.63 57.034 17.44 7.44 0.00 3.966 + 422 gctactgatcgatgctacatc 308 21 0 47.62 57.028 2.44 0.00 37.97 3.972 + 423 cggcgatctagctagctg 582 18 0 61.11 58.018 17.07 8.17 37.58 3.982 + 424 gctagctgactgatcgatcatca 261 23 0 47.83 60.983 26.49 26.49 39.98 3.983 + 425 actatcatctctgcgcgat 359 19 0 47.37 57.015 4.99 2.52 0.00 3.985 + 426 catcggattagctagctgatg 5 21 0 47.62 57.003 23.69 23.29 0.00 3.997 + 427 tagctgactgatcgatcatca 263 21 0 42.86 57.000 26.49 26.49 39.98 4.000 + 428 actagctagctgatcatcatcgat 508 24 0 41.67 59.995 22.43 0.00 0.00 4.005 + 429 agtgatgcatgctagtagtgat 28 22 0 40.91 57.984 0.00 0.00 0.00 4.016 + 430 ctagctagctgatcatcatcga 509 22 0 45.45 57.958 11.68 0.00 0.00 4.042 + 431 gctgatcatcgatgctactagct 195 23 0 47.83 61.046 20.91 5.24 45.92 4.046 + 432 agctgatcatcgatgctactagc 194 23 0 47.83 61.046 20.78 20.78 45.61 4.046 + 433 gctagctgatcatcgatgctact 191 23 0 47.83 61.046 12.59 8.92 0.00 4.046 + 434 agctagctgatcatcgatgctac 190 23 0 47.83 61.046 17.99 7.99 0.00 4.046 + 435 tagctagctactatcatctctgcg 350 24 0 45.83 60.058 27.80 0.00 0.00 4.058 + 436 ctagctagctactgatcgatgcta 301 24 0 45.83 60.058 14.00 12.23 0.00 4.058 + 437 agctactatcatctctgcgcga 355 22 0 50.00 62.058 2.71 2.71 0.00 4.058 + 438 gctatttagctagctgactgatcg 253 24 0 45.83 60.060 7.27 0.00 46.11 4.060 + 439 tgatcgatcatcatgctagctac 271 23 0 43.48 58.931 27.48 0.00 37.38 4.069 + 440 gtgatgcatgctagtagtgatg 29 22 0 45.45 57.921 7.49 7.49 0.00 4.079 + 441 ctagctagctgactgatcgatcg 106 23 0 52.17 61.091 16.84 13.89 0.00 4.091 + 442 ctagctactgatcgatgctaca 305 22 0 45.45 57.898 13.79 1.61 0.00 4.102 + 443 cggcgatctagctagctgacta 582 22 0 54.55 62.109 17.44 5.40 38.70 4.109 + 444 atgctagctaggcgatgc 410 18 0 55.56 57.890 10.59 0.00 0.00 4.110 + 445 ctgatcgatcatcatgctagctac 270 24 0 45.83 59.882 26.67 0.00 41.77 4.118 + 446 gctactagctagctgatcatca 505 22 0 45.45 57.879 14.37 0.00 44.92 4.121 + 447 gctactagctagctgatcatca 208 22 0 45.45 57.879 14.37 0.00 44.92 4.121 + 448 ctgactgatacgcgatgctagc 473 22 0 54.55 62.128 8.61 8.61 0.00 4.128 + 449 gctgactgatacgcgatgctag 472 22 0 54.55 62.128 1.70 0.00 0.00 4.128 + 450 ctagctgactgatacgcgatgc 469 22 0 54.55 62.128 3.47 0.00 0.00 4.128 + 451 gctagctgactgatacgcgatg 468 22 0 54.55 62.128 8.21 0.00 0.00 4.128 + 452 tgactgatcgatcatcatgctag 267 23 0 43.48 58.866 26.79 18.40 41.77 4.134 + 453 ctgactgatcgatcatcatgcta 266 23 0 43.48 58.866 20.99 8.89 41.77 4.134 + 454 tagctgactgatcgatcatcatg 263 23 0 43.48 58.866 22.70 19.51 41.77 4.134 + 455 ctagctagctgatcgatcgtagc 560 23 0 52.17 61.151 26.87 26.87 0.00 4.151 + 456 gctagctagctgatcgatcgtag 559 23 0 52.17 61.151 34.38 16.86 46.11 4.151 + 457 ctgatcgatcgatgctagctagg 399 23 0 52.17 61.158 22.67 6.29 35.21 4.158 + 458 gatcgatcgatgctagctagtag 120 23 0 47.83 58.829 23.89 2.63 35.21 4.171 + 459 ttagctagctgactgatcgatcat 258 24 0 41.67 60.177 28.29 18.02 36.62 4.177 + 460 ctgactgatcgatcatcatgctag 266 24 0 45.83 59.822 20.99 12.80 41.77 4.178 + 461 ctagctgactgatcgatcatcatg 262 24 0 45.83 59.822 22.70 19.51 41.77 4.178 + 462 ctagctgatcgatcgatgtgcg 75 22 0 54.55 62.180 31.92 20.85 42.69 4.180 + 463 tttagctagctgactgatcgatc 257 23 0 43.48 58.807 19.32 19.32 0.00 4.193 + 464 tgactgatcgatcatcatgcta 267 22 0 40.91 57.803 26.79 13.11 41.77 4.197 + 465 gctagctactatcatcgatcga 430 22 0 45.45 57.783 22.52 22.52 0.00 4.217 + 466 gatcgatcgatgctagctagta 120 22 0 45.45 57.783 23.89 18.77 35.21 4.217 + 467 agctagctactatcatcgatcg 429 22 0 45.45 57.777 17.56 9.87 0.00 4.223 + 468 atcgatcgatgctagctagtag 121 22 0 45.45 57.777 29.65 2.63 33.56 4.223 + 469 tgatcatcatcgatgctagctagt 518 24 0 41.67 60.238 22.18 3.56 40.32 4.238 + 470 tgatcgatcatcatgctagctact 271 24 0 41.67 60.238 27.48 0.00 37.38 4.238 + 471 actgatcgatcatcatgctagcta 269 24 0 41.67 60.238 26.67 2.76 41.77 4.238 + 472 catcgatcgatgctagtatgcta 325 23 0 43.48 58.753 37.80 6.23 44.93 4.247 + 473 tttagctagctgactgatcgat 257 22 0 40.91 57.736 0.38 0.00 0.00 4.264 + 474 atttagctagctgactgatcga 256 22 0 40.91 57.736 4.16 0.00 0.00 4.264 + 475 cgcgatcgatgctagcta 372 18 0 55.56 57.717 22.07 3.08 38.48 4.283 + 476 catcgatcgatgctagtatgctag 325 24 0 45.83 59.708 37.80 16.01 44.93 4.292 + 477 tagctagctactgatcgatgctac 302 24 0 45.83 60.297 27.80 7.81 0.00 4.297 + 478 agcatcggattagctagctgatg 3 23 0 47.83 61.299 27.81 27.81 33.28 4.299 + 479 agctagctgactgatacgcgat 467 22 0 50.00 62.317 17.99 0.00 0.00 4.317 + 480 tgatcatcatcgatgctagctag 518 23 0 43.48 58.678 17.46 17.46 40.32 4.322 + 481 ctgatcatcatcgatgctagcta 517 23 0 43.48 58.678 17.69 2.41 40.32 4.322 + 482 tagctgatcatcatcgatgctag 514 23 0 43.48 58.678 9.90 2.76 40.32 4.322 + 483 ctagctgatcatcatcgatgcta 513 23 0 43.48 58.678 14.58 9.63 40.32 4.322 + 484 tagctagctgatcatcatcgatg 510 23 0 43.48 58.678 20.23 20.23 41.48 4.322 + 485 ctgatcgatcatcatgctagcta 270 23 0 43.48 58.678 26.67 2.76 41.77 4.322 + 486 gatcatcatcgatgctagctagt 519 23 0 43.48 58.677 22.18 3.56 40.32 4.323 + 487 gatcgatcatcatgctagctact 272 23 0 43.48 58.677 21.11 0.00 0.00 4.323 + 488 gctagctagctgactgatcgatc 105 23 0 52.17 61.341 34.38 19.32 46.11 4.341 + 489 tgatcgatcgatgctagctagtag 119 24 0 45.83 60.356 26.44 2.63 35.21 4.356 + 490 ctgatcgatcgatgctagctagta 118 24 0 45.83 60.356 22.18 18.77 35.21 4.356 + 491 ctgatcatcatcgatgctagctag 517 24 0 45.83 59.644 17.46 17.46 40.32 4.356 + 492 ctagctgatcatcatcgatgctag 513 24 0 45.83 59.644 19.54 18.30 42.07 4.356 + 493 ctagctagctgatcatcatcgatg 509 24 0 45.83 59.644 20.23 20.23 41.48 4.356 + 494 tttagctagctgactgatcgatca 257 24 0 41.67 60.358 26.99 26.99 35.44 4.358 + 495 actatcatctctgcgcgatcga 359 22 0 50.00 62.365 22.07 1.72 38.48 4.365 + 496 agctgatcgatcgtagcg 566 18 0 55.56 57.634 25.02 11.96 0.00 4.366 + 497 gctactagctagctgactgatac 461 23 0 47.83 58.626 15.96 1.42 44.92 4.374 + 498 agctgatcgatcgatgctagct 397 22 0 50.00 62.388 30.32 30.32 38.42 4.388 + 499 agctagctgatcgatcgatgct 393 22 0 50.00 62.388 33.87 33.38 38.16 4.388 + 500 ctagctgactgatcgatcatcat 262 23 0 43.48 58.612 26.31 20.43 41.77 4.388 + 501 agctagctactatcatctctgc 351 22 0 45.45 57.608 17.56 0.00 0.00 4.392 + 502 ctagctactatcatctctgcgcg 353 23 0 52.17 61.393 0.00 0.00 0.00 4.393 + 503 tgatcatcatcgatgctagcta 518 22 0 40.91 57.602 17.69 3.08 40.32 4.398 + 504 tagctgatcatcatcgatgcta 514 22 0 40.91 57.602 15.95 9.16 40.32 4.398 + 505 tgatcgatcatcatgctagcta 271 22 0 40.91 57.602 27.48 3.08 37.38 4.398 + 506 atcatcatcgatgctagctagt 520 22 0 40.91 57.595 22.18 3.56 40.32 4.405 + 507 atcgatcatcatgctagctact 273 22 0 40.91 57.595 0.00 0.00 0.00 4.405 + 508 agctagctactatcatcgatcgat 429 24 0 41.67 59.573 25.37 25.37 35.13 4.427 + 509 gctagctgatcgatcgatgtgc 74 22 0 54.55 62.443 31.83 30.04 35.21 4.443 + 510 tagctgactgatcgatcatcat 263 22 0 40.91 57.531 26.31 20.43 41.77 4.469 + 511 tagctagctgactgatcgatcga 107 23 0 47.83 61.487 28.29 22.52 0.00 4.487 + 512 atcgatcgatgctagtatgctag 326 23 0 43.48 58.501 29.65 13.77 46.09 4.499 + 513 ctagtgatgcatgctagtagtga 26 23 0 43.48 58.483 20.00 1.46 0.00 4.517 + 514 tagctagctgactgatcgatcatc 259 24 0 45.83 60.536 28.29 21.92 36.62 4.536 + 515 tactagctagctgatcatcatcga 507 24 0 41.67 59.449 0.00 0.00 0.00 4.551 + 516 gctagctagctactatcatcga 426 22 0 45.45 57.437 34.38 0.00 46.11 4.563 + 517 tgactgatacgcgatgctagct 474 22 0 50.00 62.569 17.69 1.35 0.00 4.569 + 518 agctgactgatacgcgatgcta 471 22 0 50.00 62.569 7.57 0.00 0.00 4.569 + 519 tagctgactgatacgcgatgct 470 22 0 50.00 62.569 10.87 8.44 0.00 4.569 + 520 atcgatcgatgctagtatgcta 326 22 0 40.91 57.423 29.65 0.00 33.56 4.577 + 521 ctagctagctgatcatcatcgat 509 23 0 43.48 58.422 11.68 0.00 0.00 4.578 + 522 agctgactgatcgatcgatgct 112 22 0 50.00 62.580 26.44 23.13 35.21 4.580 + 523 ctagctagctgatcatcgatgcta 188 24 0 45.83 60.596 16.78 15.81 0.00 4.596 + 524 gtgatgcatgctagtagtgatgta 29 24 0 41.67 59.398 11.60 8.84 0.00 4.602 + 525 gctgatcatcatcgatgctagct 516 23 0 47.83 61.603 20.15 8.14 40.32 4.603 + 526 agctgatcatcatcgatgctagc 515 23 0 47.83 61.603 20.04 19.26 40.32 4.603 + 527 gctagctgatcatcatcgatgct 512 23 0 47.83 61.603 14.14 8.34 40.32 4.603 + 528 agctagctgatcatcatcgatgc 511 23 0 47.83 61.603 21.42 7.40 40.32 4.603 + 529 tagtgatgcatgctagtagtga 27 22 0 40.91 57.391 0.01 0.00 0.00 4.609 + 530 ctactagctagctgactgatacg 462 23 0 47.83 58.387 3.12 0.00 0.00 4.613 + 531 tagctactgatcgatgctacatc 306 23 0 43.48 58.368 13.79 0.00 37.97 4.632 + 532 gactgatacgcgatgctagctag 475 23 0 52.17 61.633 17.46 17.46 0.00 4.633 + 533 ctagctactgatcgatgctacat 305 23 0 43.48 58.364 13.79 0.09 0.00 4.636 + 534 gctagctactatcatctctgcgc 352 23 0 52.17 61.644 8.21 0.00 0.00 4.644 + 535 gctagctagctactgatcgatgc 300 23 0 52.17 61.644 34.38 12.71 46.11 4.644 + 536 gctactagctagctgatcatcat 505 23 0 43.48 58.350 14.37 0.00 44.92 4.650 + 537 gctactagctagctgatcatcat 208 23 0 43.48 58.350 14.37 0.00 44.92 4.650 + 538 ctagctactgatcgatgctacatc 305 24 0 45.83 59.349 13.79 0.00 37.97 4.651 + 539 gctactagctagctgatcatcatc 505 24 0 45.83 59.343 14.37 0.00 44.92 4.657 + 540 gctactagctagctgatcatcatc 208 24 0 45.83 59.343 14.37 0.00 44.92 4.657 + 541 gctgatcatcatctagctagtagc 154 24 0 45.83 59.343 15.25 15.25 45.79 4.657 + 542 tagctagctgatcatcatcgat 510 22 0 40.91 57.329 10.14 0.00 0.00 4.671 + 543 ctactatcatctctgcgcgatcg 357 23 0 52.17 61.686 12.19 12.19 39.07 4.686 + 544 tactagctagctgactgatacg 463 22 0 45.45 57.310 13.17 0.00 0.00 4.690 + 545 gctgatcgatcgatgctagctag 398 23 0 52.17 61.697 27.88 18.22 35.21 4.697 + 546 ctagctgatcgatcgatgctagc 395 23 0 52.17 61.697 38.64 35.38 43.05 4.697 + 547 gctagctgatcgatcgatgctag 394 23 0 52.17 61.697 41.07 41.07 46.89 4.697 + 548 ctagctagctgatcgatcgatgc 391 23 0 52.17 61.697 24.08 21.09 35.21 4.697 + 549 gctagctagctgatcgatcgatg 390 23 0 52.17 61.697 34.38 11.03 46.11 4.697 + 550 gctagctagctgatcgatcgatg 70 23 0 52.17 61.697 34.38 11.03 46.11 4.697 + 551 gctactagctagctgactgata 461 22 0 45.45 57.286 15.96 3.69 44.92 4.714 + 552 gatcgatcatcatgctagctac 272 22 0 45.45 57.284 21.11 0.00 0.00 4.716 + 553 cgatgctagctaggcgat 408 18 0 55.56 57.277 10.81 3.01 0.00 4.723 + 554 atcgatgctagctaggcg 406 18 0 55.56 57.277 15.59 9.02 0.00 4.723 + 555 tagctactgatcgatgctacat 306 22 0 40.91 57.270 13.79 0.09 0.00 4.730 + 556 gctagctactatcatcgatcgat 430 23 0 43.48 58.251 25.37 25.37 35.13 4.749 + 557 tgcatgctagtagtgatgtatacg 33 24 0 41.67 59.224 20.79 0.00 0.00 4.776 + 558 gcatgctagtagtgatgtatacgt 34 24 0 41.67 59.223 11.60 0.00 0.00 4.777 + 559 atttagctagctgactgatcgatc 256 24 0 41.67 59.219 19.32 19.32 0.00 4.781 + 560 gactgatcgatcatcatgctag 268 22 0 45.45 57.215 24.51 15.87 41.77 4.785 + 561 atttagctagctgactgatcgat 256 23 0 39.13 58.215 4.16 0.00 0.00 4.785 + 562 gctgactgatcgatcatcatgct 265 23 0 47.83 61.788 27.72 15.10 41.77 4.788 + 563 agctgactgatcgatcatcatgc 264 23 0 47.83 61.788 27.74 27.74 41.77 4.788 + 564 tagctactatcatctctgcgcga 354 23 0 47.83 61.796 2.71 2.71 0.00 4.796 + 565 gctgatcatcgatgctactagcta 195 24 0 45.83 60.834 20.91 7.37 45.92 4.834 + 566 tagctgatcatcgatgctactagc 193 24 0 45.83 60.834 20.78 20.78 45.61 4.834 + 567 gctagctgatcatcgatgctacta 191 24 0 45.83 60.834 11.65 8.83 0.00 4.834 + 568 tagctagctgatcatcgatgctac 189 24 0 45.83 60.834 17.82 12.06 0.00 4.834 + 569 tagtgatgcatgctagtagtgatg 27 24 0 41.67 59.155 11.56 7.49 0.00 4.845 + 570 agtgatgcatgctagtagtgatgt 28 24 0 41.67 60.846 11.60 0.00 0.00 4.846 + 571 tgatgcatgctagtagtgatgta 30 23 0 39.13 58.147 11.60 8.84 0.00 4.853 + 572 ctgactgatcgatcgatgctagc 114 23 0 52.17 61.878 18.17 12.52 35.21 4.878 + 573 gctgactgatcgatcgatgctag 113 23 0 52.17 61.878 22.81 19.44 35.21 4.878 + 574 ctagctgactgatcgatcgatgc 110 23 0 52.17 61.878 24.08 19.43 35.21 4.878 + 575 gctagctgactgatcgatcgatg 109 23 0 52.17 61.878 23.05 13.21 35.21 4.878 + 576 tcatcatcgatgctagctagtag 521 23 0 43.48 58.114 2.81 0.00 40.32 4.886 + 577 tactagctagctgatcatcatcg 507 23 0 43.48 58.114 0.00 0.00 0.00 4.886 + 578 tcgatcatcatgctagctactag 274 23 0 43.48 58.114 0.00 0.00 37.62 4.886 + 579 tgatcatcgatgctactagctag 197 23 0 43.48 58.114 20.04 20.04 45.92 4.886 + 580 ctgatcatcgatgctactagcta 196 23 0 43.48 58.114 10.86 0.00 45.92 4.886 + 581 tagctgatcatcgatgctactag 193 23 0 43.48 58.114 13.67 9.68 0.00 4.886 + 582 ctagctgatcatcgatgctacta 192 23 0 43.48 58.114 11.65 8.83 0.00 4.886 + 583 ctactagctagctgatcatcatcg 506 24 0 45.83 59.110 1.08 0.00 0.00 4.890 + 584 ctgatcatcgatgctactagctag 196 24 0 45.83 59.110 20.04 20.04 45.92 4.890 + 585 ctagctgatcatcgatgctactag 192 24 0 45.83 59.110 15.68 15.68 0.00 4.890 + 586 gctagctagctgatcatcatctag 146 24 0 45.83 59.102 34.38 13.13 44.71 4.898 + 587 gctagctagctgatcatcatcta 146 23 0 43.48 58.097 34.38 0.00 46.11 4.903 + 588 ctagtgatgcatgctagtagtg 26 22 0 45.45 57.072 20.00 3.96 0.00 4.928 + 589 gctactatcatctctgcgcgatc 356 23 0 52.17 61.936 4.99 0.00 0.00 4.936 + 590 gctgatcgatcgatgtgc 78 18 0 55.56 57.052 29.71 26.38 35.21 4.948 + 591 tagctagctactatcatcgatcga 428 24 0 41.67 59.031 27.80 22.52 0.00 4.969 + 592 agctagctgatcgatcgtagcg 562 22 0 54.55 62.971 27.20 18.31 0.00 4.971 + 593 tgactgatacgcgatgct 474 18 0 50.00 57.028 2.33 0.00 0.00 4.972 + 594 gatcatcatcgatgctagctag 519 22 0 45.45 57.019 17.46 17.46 40.32 4.981 + 595 tcatcatcgatgctagctagta 521 22 0 40.91 57.005 22.18 18.77 40.32 4.995 + 596 tcgatcatcatgctagctacta 274 22 0 40.91 57.005 0.00 0.00 0.00 4.995 + 597 tgatcatcgatgctactagcta 197 22 0 40.91 57.005 17.14 1.01 45.92 4.995 + 598 tagctgatcatcgatgctacta 193 22 0 40.91 57.005 12.62 8.42 0.00 4.995 + 599 tagctagctgactgatacgcgat 466 23 0 47.83 62.044 28.29 0.00 0.00 5.044 + 600 ctagctagctactatcatcgatcga 427 25 0 44.00 59.949 27.80 22.52 0.00 5.051 + 601 agctagctgactgatcgatcgat 108 23 0 47.83 62.053 30.53 30.53 37.90 5.053 + 602 ctactagctagctgactgatacgc 462 24 0 50.00 61.062 3.61 0.00 0.00 5.062 + 603 gctactagctagctgactgatacg 461 24 0 50.00 61.062 14.37 0.00 44.92 5.062 + 604 tgatcatcatcgatgctagctagta 518 25 0 40.00 60.062 22.18 18.77 40.32 5.062 + 605 tgatcgatcatcatgctagctacta 271 25 0 40.00 60.062 27.48 0.00 37.38 5.062 + 606 ctagtgatgcatgctagtagtgatg 26 25 0 44.00 60.064 20.00 7.49 0.00 5.064 + 607 gctagctagctactatcatcgatc 426 24 0 45.83 58.932 34.38 4.20 46.11 5.068 + 608 gctagctactgatcgatgctacat 304 24 0 45.83 61.072 11.21 0.00 0.00 5.072 + 609 gctagctagctactatcatcgat 426 23 0 43.48 57.922 34.38 0.00 46.11 5.078 + 610 ctagtgatgcatgctagtagtgat 26 24 0 41.67 58.911 20.00 4.64 0.00 5.089 + 611 tactatcatctctgcgcgatcga 358 23 0 47.83 62.092 22.07 1.72 38.48 5.092 + 612 agctgatcgatcgatgctagcta 397 23 0 47.83 62.111 31.26 14.51 40.03 5.111 + 613 tagctgatcgatcgatgctagct 396 23 0 47.83 62.111 33.22 33.22 42.08 5.111 + 614 agctagctgatcgatcgatgcta 393 23 0 47.83 62.111 34.11 32.56 36.80 5.111 + 615 tagctagctgatcgatcgatgct 392 23 0 47.83 62.111 33.87 33.38 38.16 5.111 + 616 tagtgatgcatgctagtagtgat 27 23 0 39.13 57.886 11.56 0.00 0.00 5.114 + 617 tactagctagctgatcatcatcgat 507 25 0 40.00 59.828 0.00 0.00 0.00 5.172 + 618 gctagctagctgatcatcgatgc 187 23 0 52.17 62.193 34.38 9.22 46.11 5.193 + 619 gctagtgatgcatgctagtagtga 25 24 0 45.83 61.195 24.96 4.57 0.00 5.195 + 620 aaagcatcggattagctagctgat 1 24 0 41.67 61.209 17.84 15.13 0.00 5.209 + 621 gtgatgcatgctagtagtgatgtat 29 25 0 40.00 59.774 1.07 1.07 0.00 5.226 + 622 ctatcatctctgcgcgatcgatg 360 23 0 52.17 62.227 18.01 18.01 38.48 5.227 + 623 tgactgatacgcgatgctagcta 474 23 0 47.83 62.287 17.69 3.08 0.00 5.287 + 624 tagctgactgatacgcgatgcta 470 23 0 47.83 62.287 12.64 9.09 0.00 5.287 + 625 tgctagtagtgatgtatacgtagct 37 25 0 40.00 59.713 9.37 8.73 0.00 5.287 + 626 tgactgatcgatcgatgctagct 115 23 0 47.83 62.296 20.19 11.59 35.21 5.296 + 627 agctgactgatcgatcgatgcta 112 23 0 47.83 62.296 26.44 14.64 35.21 5.296 + 628 tagctgactgatcgatcgatgct 111 23 0 47.83 62.296 31.98 30.27 35.21 5.296 + 629 ctagctagctactatcatcgatcg 427 24 0 45.83 58.703 12.49 9.87 0.00 5.297 + 630 tagctagctactatcatcgatcg 428 23 0 43.48 57.691 27.80 9.87 0.00 5.309 + 631 gactgatcgatcatcatgctagct 268 24 0 45.83 61.313 24.51 7.81 41.77 5.313 + 632 gctagctgactgatcgatcatcat 261 24 0 45.83 61.313 26.31 20.43 41.77 5.313 + 633 ctatttagctagctgactgatcga 254 24 0 41.67 58.679 0.00 0.00 0.00 5.321 + 634 gcatgctagtagtgatgtatacg 34 23 0 43.48 57.659 11.60 0.00 0.00 5.341 + 635 tatttagctagctgactgatcga 255 23 0 39.13 57.650 0.00 0.00 0.00 5.350 + 636 ctactagctagctgatcatcatcga 506 25 0 44.00 60.352 1.08 0.00 0.00 5.352 + 637 agctactatcatctctgcgcgat 355 23 0 47.83 62.360 4.99 2.52 0.00 5.360 + 638 gctgatcatcatcgatgctagcta 516 24 0 45.83 61.370 20.15 8.49 40.32 5.370 + 639 tagctgatcatcatcgatgctagc 514 24 0 45.83 61.370 20.04 19.26 40.32 5.370 + 640 gctagctgatcatcatcgatgcta 512 24 0 45.83 61.370 14.58 9.63 40.32 5.370 + 641 tagctagctgatcatcatcgatgc 510 24 0 45.83 61.370 21.42 7.40 40.32 5.370 + 642 atgcatgctagtagtgatgtatacg 32 25 0 40.00 59.604 11.70 0.00 0.00 5.396 + 643 tgatgcatgctagtagtgatgtat 30 24 0 37.50 58.592 12.66 12.66 0.00 5.408 + 644 gactgatcgatcgatgctagctag 116 24 0 50.00 61.409 18.04 17.46 35.21 5.409 + 645 gctatttagctagctgactgatc 253 23 0 43.48 57.572 7.27 0.00 46.11 5.428 + 646 tgctagtgatgcatgctagtagtg 24 24 0 45.83 61.434 24.96 10.54 35.89 5.434 + 647 ctagctagctactatcatctctgc 349 24 0 45.83 58.562 27.80 0.00 0.00 5.438 + 648 gctagctagctactatcatctctg 348 24 0 45.83 58.562 34.38 6.79 46.11 5.438 + 649 gatcatcatcgatgctagctagta 519 24 0 41.67 58.557 22.18 18.77 40.32 5.443 + 650 gatcgatcatcatgctagctacta 272 24 0 41.67 58.557 21.11 0.00 0.00 5.443 + 651 atcatcatcgatgctagctagtag 520 24 0 41.67 58.554 2.13 0.00 40.32 5.446 + 652 atcgatcatcatgctagctactag 273 24 0 41.67 58.554 0.00 0.00 37.62 5.446 + 653 tagctagctactatcatctctgc 350 23 0 43.48 57.527 27.80 0.00 0.00 5.473 + 654 atcatcatcgatgctagctagta 520 23 0 39.13 57.514 22.18 18.77 40.32 5.486 + 655 atcgatcatcatgctagctacta 273 23 0 39.13 57.514 0.00 0.00 0.00 5.486 + 656 gatcatcatcgatgctagctagtag 519 25 0 44.00 59.494 0.21 0.00 40.32 5.506 + 657 gatcgatcatcatgctagctactag 272 25 0 44.00 59.494 21.11 0.00 37.62 5.506 + 658 actagctagctgatcatcatctact 211 25 0 40.00 59.471 22.43 6.99 0.00 5.529 + 659 tgactgatcgatcatcatgctagc 267 24 0 45.83 61.547 26.79 14.13 41.77 5.547 + 660 gctgactgatcgatcatcatgcta 265 24 0 45.83 61.547 27.72 16.42 41.77 5.547 + 661 tagctgactgatcgatcatcatgc 263 24 0 45.83 61.547 27.74 27.74 41.77 5.547 + 662 tgctagtagtgatgtatacgtagc 37 24 0 41.67 58.446 4.93 4.93 0.00 5.554 + 663 ctagctagctgactgatacgcga 465 23 0 52.17 62.571 14.90 0.00 0.00 5.571 + 664 tagctagctactatcatcgatcgat 428 25 0 40.00 59.423 27.80 25.37 35.13 5.577 + 665 gctactagctagctgatcatcatct 208 25 0 44.00 60.585 14.37 0.00 44.92 5.585 + 666 agctgatcatcatctagctagtagc 153 25 0 44.00 60.585 15.25 15.25 40.45 5.585 + 667 ctagctagctgatcgatcgatgtg 71 24 0 50.00 61.642 11.68 4.94 35.21 5.642 + 668 agtgatgcatgctagtagtgatgta 28 25 0 40.00 60.646 11.60 8.84 0.00 5.646 + 669 tagtgatgcatgctagtagtgatgt 27 25 0 40.00 60.646 11.60 0.00 0.00 5.646 + 670 actatcatctctgcgcgatcgat 359 23 0 47.83 62.652 22.07 11.47 38.48 5.652 + 671 ctatttagctagctgactgatcg 254 23 0 43.48 57.339 0.00 0.00 0.00 5.661 + 672 tagctagctgatcgatcgtagcg 561 23 0 52.17 62.677 27.20 18.31 0.00 5.677 + 673 gcatcggattagctagctgatgc 4 23 0 52.17 62.687 34.10 34.10 41.15 5.687 + 674 tgcatgctagtagtgatgtatacgt 33 25 0 40.00 60.700 20.79 0.00 0.00 5.700 + 675 tttagctagctgactgatcgatcat 257 25 0 40.00 60.702 26.67 18.02 36.62 5.702 + 676 atttagctagctgactgatcgatca 256 25 0 40.00 60.702 26.99 26.99 35.44 5.702 + 677 gctagctagctactatcatctct 348 23 0 43.48 57.266 34.38 0.00 46.11 5.734 + 678 aagcatcggattagctagctgatg 2 24 0 45.83 61.794 27.81 27.81 33.28 5.794 + 679 agtgatgtatacgtagctagtagc 44 24 0 41.67 58.201 15.25 15.25 45.79 5.799 + 680 gctagtagtgatgtatacgtagct 38 24 0 41.67 58.201 5.92 5.92 0.00 5.799 + 681 tagctagctgactgatcgatcgat 107 24 0 45.83 61.800 30.53 30.53 37.90 5.800 + 682 actagctagctgactgatacgcg 464 23 0 52.17 62.816 21.52 3.89 0.00 5.816 + 683 actagctagctgatcatcatctac 211 24 0 41.67 58.178 22.43 0.00 0.00 5.822 + 684 tagctgatcgatcgatgctagcta 396 24 0 45.83 61.857 34.98 33.55 41.05 5.857 + 685 tagctagctgatcgatcgatgcta 392 24 0 45.83 61.857 34.11 32.56 36.80 5.857 + 686 tatttagctagctgactgatcgat 255 24 0 37.50 58.112 1.68 0.00 0.00 5.888 + 687 gcatgctagtagtgatgtatacgta 34 25 0 40.00 59.089 11.60 0.00 0.00 5.911 + 688 tatttagctagctgactgatcgatc 255 25 0 40.00 59.084 19.32 19.32 0.00 5.916 + 689 ctatttagctagctgactgatcgat 254 25 0 40.00 59.082 0.00 0.00 0.00 5.918 + 690 ctagctagctactatcatctctgcg 349 25 0 48.00 60.920 27.80 5.75 0.00 5.920 + 691 tgatcgatcgatgctagctaggc 400 23 0 52.17 62.955 26.44 12.49 35.21 5.955 + 692 agctagctactgatcgatgctaca 303 24 0 45.83 61.988 17.56 3.03 0.00 5.988 + 693 tgactgatcgatcgatgctagcta 115 24 0 45.83 62.034 20.19 11.16 35.21 6.034 + 694 tagctgactgatcgatcgatgcta 111 24 0 45.83 62.034 33.43 30.74 35.21 6.034 + 695 catgctagtagtgatgtatacgtagc 35 26 0 42.31 59.961 4.93 4.93 0.00 6.039 + 696 gcatgctagtagtgatgtatacgtag 34 26 0 42.31 59.961 11.60 0.00 0.00 6.039 + 697 actgatcgatcgatgctagctagt 117 24 0 45.83 62.039 23.29 15.07 35.21 6.039 + 698 ctatttagctagctgactgatcgatc 254 26 0 42.31 59.960 19.32 19.32 0.00 6.040 + 699 ttagctagctgactgatcgatcatc 258 25 0 44.00 61.041 28.29 21.92 36.62 6.041 + 700 atgctagtagtgatgtatacgtagct 36 26 0 38.46 60.068 9.37 8.73 0.00 6.068 + 701 ctagctagctgatcatcatctact 212 24 0 41.67 57.930 11.68 6.99 0.00 6.070 + 702 ctactagctagctgatcatcatct 209 24 0 41.67 57.930 1.08 0.00 0.00 6.070 + 703 agctgatcatcatctagctagtag 153 24 0 41.67 57.930 7.49 3.73 40.45 6.070 + 704 ctagctgatcatcatctagctagt 151 24 0 41.67 57.930 21.70 5.56 46.15 6.070 + 705 tagctactatcatctctgcgcgat 354 24 0 45.83 62.096 4.99 2.52 0.00 6.096 + 706 gactgatcgatcatcatgctagcta 268 25 0 44.00 61.099 24.51 4.57 41.77 6.099 + 707 ctgatcatcatcgatgctagctagt 517 25 0 44.00 61.101 22.18 3.56 40.32 6.101 + 708 actagctagctgatcatcatcgatg 508 25 0 44.00 61.101 22.43 20.23 41.48 6.101 + 709 ctgatcgatcatcatgctagctact 270 25 0 44.00 61.101 26.67 0.00 41.77 6.101 + 710 atgctagtagtgatgtatacgtagc 36 25 0 40.00 58.855 4.93 4.93 0.00 6.145 + 711 ctagctagctactgatcgatgctac 301 25 0 48.00 61.145 14.00 7.81 0.00 6.145 + 712 gctagctagctactatcatctctgc 348 25 0 48.00 61.152 34.38 11.74 46.11 6.152 + 713 agctagctgatcatcatctactatca 214 26 0 38.46 59.840 17.99 0.00 0.00 6.160 + 714 ctgatcgatcgatgctagctagtag 118 25 0 48.00 61.197 19.70 5.49 35.21 6.197 + 715 agctagctgactgatcgatcatca 260 24 0 45.83 62.232 26.49 26.49 39.98 6.232 + 716 gctagctagctactatcatcgatcg 426 25 0 48.00 61.252 34.38 9.87 46.11 6.252 + 717 gctatttagctagctgactgatcga 253 25 0 44.00 61.268 7.27 0.00 46.11 6.268 + 718 ctagctagctactatcatcgatcgat 427 26 0 42.31 60.291 27.80 25.37 35.13 6.291 + 719 agctgatcatcgatgctactagct 194 24 0 45.83 62.294 24.11 23.60 45.92 6.294 + 720 agctagctgatcatcgatgctact 190 24 0 45.83 62.294 17.99 10.88 0.00 6.294 + 721 ctagctagctgactgatcgatcga 106 24 0 50.00 62.312 22.52 22.52 0.00 6.312 + 722 actgatcgatcatcatgctagctac 269 25 0 44.00 61.328 26.67 0.00 41.77 6.328 + 723 tgatgcatgctagtagtgatgtatac 30 26 0 38.46 59.623 9.19 6.43 0.00 6.377 + 724 gtgatgcatgctagtagtgatgtata 29 26 0 38.46 59.623 4.23 0.00 0.00 6.377 + 725 tactatcatctctgcgcgatcgat 358 24 0 45.83 62.379 22.07 11.47 38.48 6.379 + 726 gctagctgatcatcatctactatca 215 25 0 40.00 58.607 8.21 0.00 0.00 6.393 + 727 gctactagctagctgatcatcatcta 208 26 0 42.31 60.404 14.37 0.00 44.92 6.404 + 728 tagctgatcatcatctagctagtagc 152 26 0 42.31 60.404 15.25 15.25 41.48 6.404 + 729 tgctagtagtgatgtatacgtagcta 37 26 0 38.46 59.564 10.00 8.05 0.00 6.436 + 730 gatgcatgctagtagtgatgtatacg 31 26 0 42.31 60.453 7.40 0.00 0.00 6.453 + 731 tagtgatgcatgctagtagtgatgta 27 26 0 38.46 60.461 11.60 8.84 0.00 6.461 + 732 gctagtgatgcatgctagtagtgat 25 25 0 44.00 61.506 24.96 8.51 0.00 6.506 + 733 tgcatgctagtagtgatgtatacgta 33 26 0 38.46 60.515 20.79 0.00 0.00 6.515 + 734 tatttagctagctgactgatcgatca 255 26 0 38.46 60.516 26.99 26.99 35.44 6.516 + 735 tgatgcatgctagtagtgatgtata 30 25 0 36.00 58.479 4.13 0.00 0.00 6.521 + 736 tactagctagctgactgatacgcg 463 24 0 50.00 62.538 13.17 3.89 0.00 6.538 + 737 ctagctactatcatctctgcgcga 353 24 0 50.00 62.603 2.71 2.71 0.00 6.603 + 738 agctagctgatcatcatctactatc 214 25 0 40.00 58.369 17.99 0.00 0.00 6.631 + 739 agctagctgatcatcatctactat 214 24 0 37.50 57.345 17.99 0.00 0.00 6.655 + 740 gctactagctagctgatcatcatcg 505 25 0 48.00 61.656 14.37 0.00 44.92 6.656 + 741 gctgatcatcgatgctactagctag 195 25 0 48.00 61.656 20.91 20.04 45.92 6.656 + 742 ctagctgatcatcgatgctactagc 192 25 0 48.00 61.656 20.78 20.78 45.61 6.656 + 743 gctagctgatcatcgatgctactag 191 25 0 48.00 61.656 20.13 20.13 0.00 6.656 + 744 ctagctagctgatcatcgatgctac 188 25 0 48.00 61.656 17.82 12.06 0.00 6.656 + 745 actagctagctgatcatcatctacta 211 26 0 38.46 59.328 22.43 8.11 0.00 6.672 + 746 tactagctagctgatcatcatctact 210 26 0 38.46 59.328 6.99 6.99 0.00 6.672 + 747 ctactagctagctgatcatcatcgat 506 26 0 42.31 60.681 1.08 0.00 0.00 6.681 + 748 tagctagctactgatcgatgctaca 302 25 0 44.00 61.746 27.80 5.02 0.00 6.746 + 749 gtagtgatgtatacgtagctagtagc 42 26 0 42.31 59.249 15.25 15.25 45.79 6.751 + 750 actgatcgatcgatgctagctagta 117 25 0 44.00 61.797 23.29 18.77 35.21 6.797 + 751 gatgcatgctagtagtgatgtatac 31 25 0 40.00 58.175 20.79 1.70 0.00 6.825 + 752 agctgatcatcatcgatgctagct 515 24 0 45.83 62.835 23.00 22.41 41.74 6.835 + 753 agctagctgatcatcatcgatgct 511 24 0 45.83 62.835 17.99 8.34 40.32 6.835 + 754 ctagctagctgactgatacgcgat 465 24 0 50.00 62.838 14.90 0.00 0.00 6.838 + 755 atgcatgctagtagtgatgtatac 32 24 0 37.50 57.161 11.70 0.53 0.00 6.839 + 756 agctagctactatcatctctgcgc 351 24 0 50.00 62.858 17.56 0.00 0.00 6.858 + 757 gctagctagctactgatcgatgct 300 24 0 50.00 62.858 34.38 11.51 46.11 6.858 + 758 ctactatcatctctgcgcgatcga 357 24 0 50.00 62.878 22.07 1.72 38.48 6.878 + 759 gctagctactgatcgatgctacatc 304 25 0 48.00 61.879 11.21 4.40 37.97 6.879 + 760 tagtgatgtatacgtagctagtagc 43 25 0 40.00 58.104 15.25 15.25 45.79 6.896 + 761 gctagtagtgatgtatacgtagcta 38 25 0 40.00 58.104 7.24 5.34 0.00 6.896 + 762 tgatcatcatcgatgctagctagtag 518 26 0 42.31 60.902 14.93 0.00 40.32 6.902 + 763 ctgatcatcatcgatgctagctagta 517 26 0 42.31 60.902 22.18 18.77 40.32 6.902 + 764 tactagctagctgatcatcatcgatg 507 26 0 42.31 60.902 20.23 20.23 41.48 6.902 + 765 tgatcgatcatcatgctagctactag 271 26 0 42.31 60.902 27.48 0.00 37.38 6.902 + 766 ctgatcgatcatcatgctagctacta 270 26 0 42.31 60.902 26.67 1.37 41.77 6.902 + 767 agctgatcgatcgatgctagctag 397 24 0 50.00 62.904 31.26 19.90 40.03 6.904 + 768 ctagctgatcgatcgatgctagct 395 24 0 50.00 62.904 35.51 33.22 43.05 6.904 + 769 agctagctgatcgatcgatgctag 393 24 0 50.00 62.904 41.07 41.07 46.89 6.904 + 770 ctagctagctgatcgatcgatgct 391 24 0 50.00 62.904 33.87 33.38 38.16 6.904 + 771 tactagctagctgatcatcatctac 210 25 0 40.00 58.081 0.00 0.00 0.00 6.919 + 772 gctagctgatcatcatctactatc 215 24 0 41.67 57.062 8.21 0.00 0.00 6.938 + 773 agtgatgcatgctagtagtgatgtat 28 26 0 38.46 60.969 1.07 1.07 0.00 6.969 + 774 gctagtagtgatgtatacgtagctag 38 26 0 42.31 59.027 8.99 8.99 0.00 6.973 + 775 tagctagctgactgatcgatcatca 259 25 0 44.00 61.981 28.29 26.49 39.98 6.981 + 776 ctactagctagctgatcatcatctac 209 26 0 42.31 59.015 1.08 0.00 0.00 6.985 + 777 agtagtgatgtatacgtagctagt 41 24 0 37.50 57.012 8.68 8.68 0.00 6.988 + 778 gctagctgatcatcatctactatcat 215 26 0 38.46 59.001 8.21 0.00 0.00 6.999 + 779 agctgatcatcatctactatcatca 218 25 0 36.00 57.993 0.00 0.00 0.00 7.007 + 780 atgcatgctagtagtgatgtatacgt 32 26 0 38.46 61.018 11.70 0.00 0.00 7.018 + 781 atttagctagctgactgatcgatcat 256 26 0 38.46 61.022 26.67 18.02 36.62 7.022 + 782 agctgatcatcgatgctactagcta 194 25 0 44.00 62.040 24.59 9.79 45.92 7.040 + 783 tagctgatcatcgatgctactagct 193 25 0 44.00 62.040 27.00 27.00 45.92 7.040 + 784 agctagctgatcatcgatgctacta 190 25 0 44.00 62.040 17.99 11.59 0.00 7.040 + 785 tagctagctgatcatcgatgctact 189 25 0 44.00 62.040 17.55 15.53 0.00 7.040 + 786 atgctagtagtgatgtatacgtagcta 36 27 0 37.04 59.911 10.00 8.05 0.00 7.089 + 787 gctagctgatcatcatctactatcatc 215 27 0 40.74 59.861 8.21 0.00 0.00 7.139 + 788 ctagctagctgatcatcatctacta 212 25 0 40.00 57.842 11.68 8.11 0.00 7.158 + 789 ctactagctagctgatcatcatcta 209 25 0 40.00 57.842 1.08 0.00 0.00 7.158 + 790 tagctgatcatcatctagctagtag 152 25 0 40.00 57.842 13.40 3.73 41.48 7.158 + 791 ctagctgatcatcatctagctagta 151 25 0 40.00 57.842 21.70 7.13 46.15 7.158 + 792 gctgatcatcatcgatgctagctag 516 25 0 48.00 62.165 20.15 17.46 40.32 7.165 + 793 ctagctgatcatcatcgatgctagc 513 25 0 48.00 62.165 19.27 19.26 41.96 7.165 + 794 gctagctgatcatcatcgatgctag 512 25 0 48.00 62.165 23.70 23.70 45.51 7.165 + 795 ctagctagctgatcatcatcgatgc 509 25 0 48.00 62.165 21.42 7.40 40.32 7.165 + 796 agctagctgatcatcatctactatcat 214 27 0 37.04 60.181 17.99 0.00 0.00 7.181 + 797 ctactagctagctgatcatcatctact 209 27 0 40.74 60.181 6.99 6.99 0.00 7.181 + 798 ctagctgatcatcatctagctagtag 151 26 0 42.31 58.789 21.70 10.73 46.15 7.211 + 799 aaagcatcggattagctagctgatg 1 25 0 44.00 62.249 27.81 27.81 33.28 7.249 + 800 agctagctactgatcgatgctacat 303 25 0 44.00 62.272 17.56 6.16 0.00 7.272 + 801 tagctagctgatcatcatctactatca 213 27 0 37.04 59.689 8.31 0.00 0.00 7.311 + 802 actagctagctgatcatcatctactat 211 27 0 37.04 59.688 22.43 2.36 0.00 7.312 + 803 ctgactgatcgatcatcatgctagc 266 25 0 48.00 62.333 20.99 8.86 41.77 7.333 + 804 gctgactgatcgatcatcatgctag 265 25 0 48.00 62.333 27.72 21.73 41.77 7.333 + 805 ctagctgactgatcgatcatcatgc 262 25 0 48.00 62.333 27.74 27.74 41.77 7.333 + 806 gctagctgactgatcgatcatcatg 261 25 0 48.00 62.333 22.70 19.51 41.77 7.333 + 807 tgctagtagtgatgtatacgtagctag 37 27 0 40.74 60.395 8.99 8.99 0.00 7.395 + 808 agtagtgatgtatacgtagctagtagc 41 27 0 40.74 60.395 15.25 15.25 45.79 7.395 + 809 gctagtagtgatgtatacgtagctagt 38 27 0 40.74 60.395 15.55 15.55 0.00 7.395 + 810 ctagtgatgcatgctagtagtgatgt 26 26 0 42.31 61.460 20.00 0.00 0.00 7.460 + 811 gctgatcatcatctactatcatcatca 219 27 0 37.04 59.533 0.00 0.00 0.00 7.467 + 812 agctagctgactgatcgatcatcat 260 25 0 44.00 62.507 26.31 20.43 41.77 7.507 + 813 tttagctagctgactgatcgatcatc 257 26 0 42.31 61.507 23.93 21.92 36.62 7.507 + 814 catgctagtagtgatgtatacgtag 35 25 0 40.00 57.441 4.74 0.00 0.00 7.559 + 815 agctgatcatcatcgatgctagcta 515 25 0 44.00 62.561 23.50 10.90 43.19 7.561 + 816 tagctgatcatcatcgatgctagct 514 25 0 44.00 62.561 26.21 26.21 44.79 7.561 + 817 agctagctgatcatcatcgatgcta 511 25 0 44.00 62.561 17.99 9.63 40.32 7.561 + 818 tagctagctgatcatcatcgatgct 510 25 0 44.00 62.561 14.14 10.38 40.32 7.561 + 819 gctatttagctagctgactgatcgat 253 26 0 42.31 61.564 7.27 0.00 46.11 7.564 + 820 ctagctagctgactgatcgatcgat 106 25 0 48.00 62.579 30.53 30.53 37.90 7.579 + 821 agctgatcatcatctactatcatcat 218 26 0 34.62 58.415 0.00 0.00 0.00 7.585 + 822 tagctagctactatcatctctgcgc 350 25 0 48.00 62.587 27.80 0.00 0.00 7.587 + 823 gctagctagctactgatcgatgcta 300 25 0 48.00 62.587 34.38 12.23 46.11 7.587 + 824 tgctagtgatgcatgctagtagtga 24 25 0 44.00 62.622 24.96 13.57 35.89 7.622 + 825 tagctgatcgatcgatgctagctag 396 25 0 48.00 62.632 33.71 21.46 41.05 7.632 + 826 ctagctgatcgatcgatgctagcta 395 25 0 48.00 62.632 35.51 32.61 43.05 7.632 + 827 tagctagctgatcgatcgatgctag 392 25 0 48.00 62.632 41.07 41.07 46.89 7.632 + 828 ctagctagctgatcgatcgatgcta 391 25 0 48.00 62.632 34.11 32.56 36.80 7.632 + 829 gtgatgcatgctagtagtgatgtatac 29 27 0 40.74 60.659 9.56 7.17 0.00 7.659 + 830 agctgatcatcatctactatcatcatc 218 27 0 37.04 59.314 0.00 0.00 0.00 7.686 + 831 tagctagctgatcatcatctactat 213 25 0 36.00 57.279 8.31 0.00 0.00 7.721 + 832 tagctagctgatcatcatctactatc 213 26 0 38.46 58.269 8.31 0.00 0.00 7.731 + 833 tgactgatcgatcatcatgctagct 267 25 0 44.00 62.733 26.79 10.55 41.77 7.733 + 834 agctgactgatcgatcatcatgcta 264 25 0 44.00 62.733 30.60 18.10 41.77 7.733 + 835 tagctgactgatcgatcatcatgct 263 25 0 44.00 62.733 32.31 32.31 41.77 7.733 + 836 ctagctagctgatcatcatctactat 212 26 0 38.46 58.265 9.41 0.00 0.00 7.735 + 837 agtgatgcatgctagtagtgatgtata 28 27 0 37.04 60.779 4.23 0.00 0.00 7.779 + 838 tagtgatgcatgctagtagtgatgtat 27 27 0 37.04 60.779 11.56 0.00 0.00 7.779 + 839 tgactgatcgatcgatgctagctag 115 25 0 48.00 62.800 20.19 17.46 35.21 7.800 + 840 ctgactgatcgatcgatgctagcta 114 25 0 48.00 62.800 20.19 11.97 35.21 7.800 + 841 tagctgactgatcgatcgatgctag 111 25 0 48.00 62.800 31.45 26.34 35.21 7.800 + 842 ctagctgactgatcgatcgatgcta 110 25 0 48.00 62.800 31.54 29.68 35.21 7.800 + 843 tagctagctgactgatcgatcgatg 107 25 0 48.00 62.800 28.29 13.21 35.21 7.800 + 844 gactgatcgatcgatgctagctagt 116 25 0 48.00 62.802 22.18 12.64 35.21 7.802 + 845 tactagctagctgatcatcatctacta 210 27 0 37.04 59.196 8.79 8.11 0.00 7.804 + 846 tagctgatcatcgatgctactagcta 193 26 0 42.31 61.805 28.86 27.39 45.92 7.805 + 847 tagctagctgatcatcgatgctacta 189 26 0 42.31 61.805 18.93 16.03 0.00 7.805 + 848 atgcatgctagtagtgatgtatacgta 32 27 0 37.04 60.828 11.70 0.00 0.00 7.828 + 849 tatttagctagctgactgatcgatcat 255 27 0 37.04 60.831 26.67 18.02 36.62 7.831 + 850 ctagctagctgatcatcatctactatc 212 27 0 40.74 59.162 9.41 0.06 0.00 7.838 + 851 tagctactatcatctctgcgcgatc 354 25 0 48.00 62.854 0.00 0.00 0.00 7.854 + 852 gctgatcatcatctactatcatcat 219 25 0 36.00 57.142 0.00 0.00 0.00 7.858 + 853 ctagctactatcatctctgcgcgat 353 25 0 48.00 62.859 4.99 2.52 0.00 7.859 + 854 gctgatcatcatctactatcatcatc 219 26 0 38.46 58.126 0.00 0.00 0.00 7.874 + 855 tagctagctactgatcgatgctacat 302 26 0 42.31 62.028 27.80 3.08 0.00 8.028 + 856 agtagtgatgtatacgtagctagtag 41 26 0 38.46 57.950 9.92 1.30 0.00 8.050 + 857 ctagtagtgatgtatacgtagctagt 39 26 0 38.46 57.950 15.52 15.52 0.00 8.050 + 858 catgctagtagtgatgtatacgtagct 35 27 0 40.74 61.089 9.37 8.73 0.00 8.089 + 859 gactgatcgatcatcatgctagctac 268 26 0 46.15 62.094 24.51 8.36 41.77 8.094 + 860 tagctgatcatcatctactatcatca 217 26 0 34.62 57.906 0.00 0.00 0.00 8.094 + 861 ctagctgatcatcatctactatcatca 216 27 0 37.04 58.826 0.00 0.00 0.00 8.174 + 862 ctagctgatcatcatctagctagtagc 151 27 0 44.44 61.196 21.70 15.25 46.15 8.196 + 863 tagctagctgactgatcgatcatcat 259 26 0 42.31 62.255 28.29 20.43 41.77 8.255 + 864 ctagtgatgcatgctagtagtgatgta 26 27 0 40.74 61.255 20.00 8.84 0.00 8.255 + 865 tgcatgctagtagtgatgtatacgtag 33 27 0 40.74 61.300 20.79 0.00 0.00 8.300 + 866 ctatttagctagctgactgatcgatca 254 27 0 40.74 61.304 26.99 26.99 35.44 8.304 + 867 tagctgatcatcatcgatgctagcta 514 26 0 42.31 62.307 28.23 26.63 43.19 8.307 + 868 tagctagctgatcatcatcgatgcta 510 26 0 42.31 62.307 14.58 11.03 40.32 8.307 + 869 gctagctagctactatcatcgatcga 426 26 0 46.15 62.381 34.38 22.52 46.11 8.381 + 870 gctactagctagctgatcatcatctac 208 27 0 44.44 61.407 14.37 0.00 44.92 8.407 + 871 ttagctagctgactgatcgatcatca 258 26 0 42.31 62.416 28.29 26.49 39.98 8.416 + 872 tgactgatcgatcatcatgctagcta 267 26 0 42.31 62.472 26.79 11.24 41.77 8.472 + 873 tagctgactgatcgatcatcatgcta 263 26 0 42.31 62.472 33.83 32.61 41.77 8.472 + 874 actgatcgatcatcatgctagctact 269 26 0 42.31 62.478 26.67 0.00 41.77 8.478 + 875 gctagtgatgcatgctagtagtgatg 25 26 0 46.15 62.484 24.96 9.07 0.00 8.484 + 876 ctagctagctactgatcgatgctaca 301 26 0 46.15 62.503 14.00 5.87 0.00 8.503 + 877 gactgatcgatcgatgctagctagta 116 26 0 46.15 62.543 22.18 18.77 35.21 8.543 + 878 actgatcgatcgatgctagctagtag 117 26 0 46.15 62.548 23.29 12.42 35.21 8.548 + 879 ctagctgatcatcatctactatcatc 216 26 0 38.46 57.395 0.00 0.00 0.00 8.605 + 880 ctgatcatcatcgatgctagctagtag 517 27 0 44.44 61.665 10.30 1.36 40.32 8.665 + 881 ctactagctagctgatcatcatcgatg 506 27 0 44.44 61.665 20.23 20.23 41.48 8.665 + 882 ctgatcgatcatcatgctagctactag 270 27 0 44.44 61.665 26.67 8.14 41.77 8.665 + 883 tagctgatcatcatctactatcatcat 217 27 0 33.33 58.315 0.00 0.00 0.00 8.685 + 884 tgatgcatgctagtagtgatgtatacg 30 27 0 40.74 61.778 9.81 0.00 0.00 8.778 + 885 gatgcatgctagtagtgatgtatacgt 31 27 0 40.74 61.779 7.40 0.00 0.00 8.779 + 886 gctactagctagctgatcatcatcga 505 26 0 46.15 62.779 14.37 0.00 44.92 8.779 + 887 agctgatcatcgatgctactagctag 194 26 0 46.15 62.784 24.59 20.04 45.92 8.784 + 888 ctagctgatcatcgatgctactagct 192 26 0 46.15 62.784 27.00 27.00 45.92 8.784 + 889 agctagctgatcatcgatgctactag 190 26 0 46.15 62.784 20.13 20.13 0.00 8.784 + 890 ctagctagctgatcatcgatgctact 188 26 0 46.15 62.784 17.55 15.53 0.00 8.784 + 891 atttagctagctgactgatcgatcatc 256 27 0 40.74 61.785 23.93 21.92 36.62 8.785 + 892 tctactatcatcatcatctactagct 230 26 0 34.62 57.155 0.00 0.00 0.00 8.845 + 893 tgctagtgatgcatgctagtagtgat 24 26 0 42.31 62.874 24.96 8.51 35.89 8.874 + 894 ctgatcatcatctactatcatcatca 220 26 0 34.62 57.026 0.00 0.00 0.00 8.974 + 895 agctagctactgatcgatgctacatc 303 26 0 46.15 62.999 17.56 7.89 37.97 8.999 + 896 tagtagtgatgtatacgtagctagtag 40 27 0 37.04 57.869 16.78 1.30 0.00 9.131 + 897 ctagtagtgatgtatacgtagctagta 39 27 0 37.04 57.869 16.85 15.97 0.00 9.131 + 898 actgatcgatcatcatgctagctacta 269 27 0 40.74 62.236 26.67 1.37 41.77 9.236 + 899 gcatgctagtagtgatgtatacgtagc 34 27 0 44.44 62.283 11.60 4.93 0.00 9.283 + 900 gctatttagctagctgactgatcgatc 253 27 0 44.44 62.291 19.32 19.32 46.11 9.291 + 901 atctactatcatcatcatctactagct 229 27 0 33.33 57.592 0.00 0.00 0.00 9.408 + 902 catctactatcatcatcatctactagc 228 27 0 37.04 57.549 0.00 0.00 0.00 9.451 + 903 tgatcatcatctactatcatcatcatc 221 27 0 33.33 57.467 0.00 0.00 0.00 9.533 + 904 tagctgatcatcgatgctactagctag 193 27 0 44.44 62.534 27.70 20.04 45.92 9.534 + 905 ctagctgatcatcgatgctactagcta 192 27 0 44.44 62.534 27.76 26.73 45.92 9.534 + 906 tagctagctgatcatcgatgctactag 189 27 0 44.44 62.534 20.13 20.13 0.00 9.534 + 907 ctagctagctgatcatcgatgctacta 188 27 0 44.44 62.534 17.74 15.95 0.00 9.534 + 908 ctgatcatcatctactatcatcatcat 220 27 0 33.33 57.462 0.00 0.00 0.00 9.538 + 909 gctagctagctactatcatcgatcgat 426 27 0 44.44 62.627 34.38 25.37 46.11 9.627 + 910 ttagctagctgactgatcgatcatcat 258 27 0 40.74 62.665 28.29 20.43 41.77 9.665 + 911 tagctagctactgatcgatgctacatc 302 27 0 44.44 62.742 27.80 7.89 37.97 9.742 + 912 ctagctagctactgatcgatgctacat 301 27 0 44.44 62.747 14.00 2.51 0.00 9.747 + 913 gatcatcatctactatcatcatcatct 222 27 0 33.33 57.242 0.00 0.00 0.00 9.758 + 914 tttagctagctgactgatcgatcatca 257 27 0 40.74 62.820 26.49 26.49 39.98 9.820 + 915 tctactatcatcatcatctactagcta 230 27 0 33.33 57.100 0.00 0.00 0.00 9.900 diff --git a/samples/Formatted/wksst8110.for b/samples/Formatted/wksst8110.for new file mode 100644 index 00000000..1ee1a489 --- /dev/null +++ b/samples/Formatted/wksst8110.for @@ -0,0 +1,1317 @@ + Weekly SST data starts week centered on 3Jan1990 + + Nino1+2 Nino3 Nino34 Nino4 + Week SST SSTA SST SSTA SST SSTA SST SSTA + 03JAN1990 23.4-0.4 25.1-0.3 26.6 0.0 28.6 0.3 + 10JAN1990 23.4-0.8 25.2-0.3 26.6 0.1 28.6 0.3 + 17JAN1990 24.2-0.3 25.3-0.3 26.5-0.1 28.6 0.3 + 24JAN1990 24.4-0.5 25.5-0.4 26.5-0.1 28.4 0.2 + 31JAN1990 25.1-0.2 25.8-0.2 26.7 0.1 28.4 0.2 + 07FEB1990 25.8 0.2 26.1-0.1 26.8 0.1 28.4 0.3 + 14FEB1990 25.9-0.1 26.4 0.0 26.9 0.2 28.5 0.4 + 21FEB1990 26.1-0.1 26.7 0.2 27.1 0.3 28.9 0.8 + 28FEB1990 26.1-0.2 26.7-0.1 27.2 0.3 29.0 0.8 + 07MAR1990 26.7 0.3 26.7-0.2 27.3 0.2 28.9 0.7 + 14MAR1990 26.1-0.4 26.9-0.2 27.3 0.1 28.6 0.4 + 21MAR1990 26.1-0.2 27.2 0.0 27.6 0.3 28.7 0.5 + 28MAR1990 25.7-0.4 27.5 0.2 27.8 0.3 28.8 0.5 + 04APR1990 25.6-0.3 27.6 0.3 27.9 0.4 28.8 0.4 + 11APR1990 25.1-0.6 27.6 0.2 27.9 0.2 28.8 0.3 + 18APR1990 25.3 0.0 27.7 0.2 28.0 0.2 28.9 0.4 + 25APR1990 25.1 0.0 27.7 0.4 28.2 0.4 29.2 0.6 + 02MAY1990 24.6-0.2 27.6 0.3 28.1 0.3 29.0 0.4 + 09MAY1990 24.2-0.2 27.5 0.3 28.1 0.3 28.9 0.2 + 16MAY1990 24.3 0.1 27.4 0.3 28.0 0.2 28.8 0.1 + 23MAY1990 23.7-0.2 27.2 0.2 28.1 0.3 29.0 0.2 + 30MAY1990 23.4-0.1 27.1 0.3 27.9 0.2 28.9 0.1 + 06JUN1990 23.2 0.0 26.7 0.1 27.7 0.0 28.9 0.1 + 13JUN1990 22.8-0.2 26.6 0.1 27.7 0.0 29.0 0.1 + 20JUN1990 22.5-0.1 26.4 0.0 27.5-0.1 29.0 0.1 + 27JUN1990 22.1-0.3 26.0-0.1 27.3-0.2 28.9 0.1 + 04JUL1990 21.7-0.4 25.8-0.2 27.3-0.1 28.9 0.1 + 11JUL1990 21.3-0.5 25.4-0.3 27.2-0.1 28.8 0.0 + 18JUL1990 21.0-0.5 25.7 0.1 27.4 0.2 29.1 0.3 + 25JUL1990 20.2-1.1 25.1-0.4 27.3 0.1 29.1 0.3 + 01AUG1990 20.6-0.6 25.1-0.2 27.1 0.1 29.0 0.3 + 08AUG1990 20.4-0.5 25.2 0.1 27.2 0.3 29.3 0.6 + 15AUG1990 20.4-0.3 25.1 0.1 27.0 0.2 29.2 0.5 + 22AUG1990 19.8-0.7 24.9 0.0 27.0 0.2 29.2 0.5 + 29AUG1990 20.2-0.3 25.0 0.1 26.9 0.2 29.0 0.4 + 05SEP1990 19.7-0.8 24.9 0.0 26.7 0.0 28.9 0.3 + 12SEP1990 20.1-0.3 24.7-0.2 26.7 0.0 29.1 0.4 + 19SEP1990 20.3-0.1 24.9 0.1 26.8 0.0 29.1 0.4 + 26SEP1990 20.3-0.2 24.8-0.1 26.7 0.0 29.0 0.3 + 03OCT1990 20.8 0.1 25.1 0.2 26.9 0.2 29.2 0.5 + 10OCT1990 20.1-0.6 24.9 0.0 27.0 0.3 29.1 0.5 + 17OCT1990 20.3-0.6 24.9 0.0 27.0 0.3 29.3 0.6 + 24OCT1990 20.1-0.9 24.9-0.1 27.0 0.4 29.3 0.6 + 31OCT1990 20.2-1.0 24.7-0.2 26.9 0.2 29.2 0.6 + 07NOV1990 20.5-0.8 25.0 0.1 26.9 0.3 29.1 0.5 + 14NOV1990 20.8-0.8 24.8-0.1 26.7 0.0 29.0 0.4 + 21NOV1990 20.9-0.9 24.6-0.4 26.6 0.0 29.0 0.4 + 28NOV1990 21.5-0.6 24.8-0.3 26.5-0.1 28.9 0.4 + 05DEC1990 22.2-0.2 25.2 0.1 26.9 0.3 29.2 0.7 + 12DEC1990 22.1-0.5 25.0-0.1 26.8 0.3 29.3 0.8 + 19DEC1990 22.2-0.8 24.9-0.3 26.9 0.4 29.2 0.7 + 26DEC1990 23.3 0.0 25.3 0.0 27.0 0.4 29.0 0.6 + 02JAN1991 23.2-0.5 25.3-0.1 26.9 0.4 28.9 0.5 + 09JAN1991 23.5-0.6 25.4-0.1 27.0 0.4 29.1 0.8 + 16JAN1991 23.7-0.7 25.7 0.1 27.0 0.5 29.0 0.8 + 23JAN1991 24.2-0.6 25.8 0.0 27.1 0.5 29.0 0.8 + 30JAN1991 24.7-0.5 26.0 0.0 27.0 0.3 28.9 0.7 + 06FEB1991 25.4-0.2 26.1 0.0 27.0 0.3 28.8 0.6 + 13FEB1991 26.0 0.0 26.3 0.0 27.0 0.3 28.8 0.7 + 20FEB1991 26.5 0.3 26.3-0.2 26.9 0.1 28.7 0.6 + 27FEB1991 26.5 0.2 26.5-0.2 26.8-0.1 28.5 0.4 + 06MAR1991 26.5 0.2 26.6-0.3 26.8-0.2 28.5 0.3 + 13MAR1991 26.8 0.4 27.0-0.1 27.1-0.1 28.5 0.3 + 20MAR1991 26.6 0.2 27.1-0.1 27.4 0.1 28.6 0.4 + 27MAR1991 26.2 0.1 27.4 0.1 27.7 0.3 28.9 0.6 + 03APR1991 25.8-0.1 27.3 0.0 27.8 0.2 28.9 0.5 + 10APR1991 25.2-0.5 27.0-0.4 27.8 0.1 29.1 0.7 + 17APR1991 24.9-0.5 27.5 0.0 28.2 0.4 29.2 0.7 + 24APR1991 24.3-0.8 27.4 0.0 28.1 0.3 29.2 0.6 + 01MAY1991 24.6-0.2 27.6 0.4 28.1 0.3 29.1 0.4 + 08MAY1991 24.4-0.2 27.5 0.3 28.3 0.5 29.3 0.6 + 15MAY1991 24.5 0.2 27.5 0.4 28.4 0.5 29.5 0.7 + 22MAY1991 24.3 0.4 27.7 0.7 28.5 0.7 29.5 0.7 + 29MAY1991 24.2 0.5 27.6 0.8 28.5 0.7 29.5 0.7 + 05JUN1991 23.7 0.4 27.5 0.8 28.3 0.6 29.3 0.5 + 12JUN1991 23.2 0.2 27.4 0.9 28.3 0.6 29.3 0.5 + 19JUN1991 23.0 0.3 27.2 0.9 28.4 0.8 29.4 0.5 + 26JUN1991 22.2-0.2 27.3 1.1 28.4 0.9 29.4 0.6 + 03JUL1991 22.8 0.7 27.0 1.0 28.1 0.7 29.2 0.4 + 10JUL1991 22.3 0.4 26.8 1.0 28.1 0.8 29.2 0.4 + 17JUL1991 21.9 0.3 26.6 1.0 27.9 0.7 29.3 0.5 + 24JUL1991 21.6 0.3 26.2 0.7 27.7 0.5 29.2 0.5 + 31JUL1991 21.6 0.5 26.1 0.8 27.9 0.9 29.5 0.7 + 07AUG1991 21.2 0.3 25.6 0.4 27.5 0.6 29.3 0.6 + 14AUG1991 21.3 0.5 25.4 0.4 27.6 0.7 29.3 0.6 + 21AUG1991 20.9 0.3 25.4 0.5 27.4 0.6 29.3 0.6 + 28AUG1991 20.7 0.2 25.2 0.3 27.0 0.3 29.0 0.3 + 04SEP1991 20.9 0.4 25.1 0.2 27.1 0.3 29.1 0.5 + 11SEP1991 20.7 0.3 24.7-0.1 26.9 0.1 29.0 0.4 + 18SEP1991 20.7 0.3 25.1 0.2 27.2 0.5 29.4 0.7 + 25SEP1991 20.8 0.3 25.2 0.3 27.1 0.4 29.2 0.5 + 02OCT1991 20.8 0.2 25.3 0.4 27.2 0.5 29.3 0.6 + 09OCT1991 21.1 0.4 25.6 0.7 27.7 1.0 29.5 0.8 + 16OCT1991 20.7-0.1 25.5 0.6 27.8 1.1 29.6 1.0 + 23OCT1991 21.2 0.2 25.7 0.8 27.6 0.9 29.4 0.7 + 30OCT1991 21.9 0.7 25.9 1.0 27.8 1.1 29.4 0.8 + 06NOV1991 22.0 0.7 25.8 0.9 27.8 1.1 29.5 0.8 + 13NOV1991 21.9 0.4 25.9 1.0 27.8 1.1 29.5 0.9 + 20NOV1991 22.5 0.7 26.1 1.1 27.9 1.3 29.4 0.8 + 27NOV1991 22.3 0.3 26.1 1.1 28.0 1.4 29.4 0.9 + 04DEC1991 22.8 0.5 26.2 1.1 28.1 1.5 29.4 0.9 + 11DEC1991 23.4 0.8 26.5 1.4 28.3 1.7 29.4 0.9 + 18DEC1991 23.7 0.8 26.6 1.5 28.5 2.0 29.5 1.0 + 25DEC1991 23.6 0.3 26.7 1.4 28.5 1.9 29.6 1.2 + 01JAN1992 24.0 0.3 26.7 1.3 28.5 1.9 29.3 1.0 + 08JAN1992 24.2 0.2 26.8 1.3 28.5 1.9 29.2 0.9 + 15JAN1992 24.6 0.2 26.9 1.3 28.4 1.9 29.1 0.8 + 22JAN1992 25.3 0.5 27.1 1.3 28.4 1.8 29.0 0.7 + 29JAN1992 25.9 0.7 27.4 1.4 28.3 1.7 28.7 0.6 + 05FEB1992 26.3 0.8 27.5 1.3 28.4 1.7 28.8 0.7 + 12FEB1992 26.4 0.5 27.6 1.3 28.6 1.9 29.0 0.9 + 19FEB1992 26.8 0.6 27.8 1.3 28.8 2.0 29.2 1.1 + 26FEB1992 27.3 1.1 27.9 1.2 28.8 1.9 29.1 1.0 + 04MAR1992 27.3 1.0 27.9 1.1 28.6 1.6 29.1 0.9 + 11MAR1992 27.7 1.2 28.1 1.0 28.7 1.6 29.2 1.0 + 18MAR1992 27.9 1.4 28.5 1.3 28.8 1.6 28.9 0.7 + 25MAR1992 28.1 1.9 28.7 1.4 29.0 1.6 29.1 0.8 + 01APR1992 27.9 1.9 28.7 1.3 29.1 1.6 29.4 1.0 + 08APR1992 28.3 2.6 28.8 1.4 29.3 1.6 29.6 1.2 + 15APR1992 28.0 2.5 28.8 1.3 29.2 1.4 29.5 1.0 + 22APR1992 27.1 1.9 28.6 1.2 29.0 1.2 29.3 0.8 + 29APR1992 27.0 2.1 28.8 1.5 29.1 1.2 29.2 0.6 + 06MAY1992 27.0 2.4 28.8 1.6 29.2 1.3 29.4 0.7 + 13MAY1992 26.6 2.3 28.6 1.5 29.1 1.2 29.5 0.8 + 20MAY1992 25.8 1.8 28.2 1.2 29.0 1.1 29.5 0.8 + 27MAY1992 25.9 2.2 28.1 1.3 28.8 1.1 29.5 0.7 + 03JUN1992 24.2 0.9 27.5 0.8 28.6 0.9 29.4 0.6 + 10JUN1992 24.2 1.2 26.8 0.3 28.3 0.6 29.4 0.6 + 17JUN1992 23.9 1.1 26.6 0.2 27.8 0.2 29.2 0.4 + 24JUN1992 23.5 1.0 26.2 0.0 27.6 0.1 29.2 0.4 + 01JUL1992 22.3 0.1 25.8-0.2 27.6 0.1 29.2 0.4 + 08JUL1992 23.0 1.1 26.2 0.4 28.0 0.7 29.5 0.7 + 15JUL1992 21.4-0.3 25.7 0.0 27.7 0.5 29.5 0.7 + 22JUL1992 21.6 0.2 25.1-0.4 27.2 0.0 29.2 0.5 + 29JUL1992 21.5 0.3 24.9-0.5 27.1 0.1 29.2 0.5 + 05AUG1992 20.8-0.2 24.6-0.6 26.7-0.2 29.1 0.4 + 12AUG1992 20.8 0.0 24.9-0.2 26.6-0.3 28.8 0.1 + 19AUG1992 20.3-0.4 24.6-0.4 26.6-0.3 28.8 0.2 + 26AUG1992 20.3-0.3 24.8-0.2 26.7-0.1 28.9 0.3 + 02SEP1992 20.3-0.2 24.4-0.5 26.3-0.4 28.6 0.0 + 09SEP1992 19.7-0.8 24.4-0.5 26.4-0.3 28.7 0.1 + 16SEP1992 20.1-0.2 24.5-0.3 26.5-0.2 28.9 0.2 + 23SEP1992 20.1-0.3 24.6-0.3 26.5-0.2 28.9 0.2 + 30SEP1992 20.2-0.4 24.7-0.2 26.6-0.1 28.7 0.0 + 07OCT1992 20.5-0.2 24.5-0.4 26.4-0.3 28.8 0.1 + 14OCT1992 20.7 0.0 24.6-0.3 26.4-0.3 28.6-0.1 + 21OCT1992 20.9 0.0 24.6-0.4 26.2-0.5 28.8 0.1 + 28OCT1992 21.5 0.4 24.8-0.1 26.2-0.4 28.5-0.1 + 04NOV1992 21.2-0.1 24.7-0.2 26.3-0.4 28.6 0.0 + 11NOV1992 21.2-0.3 24.8-0.1 26.6-0.1 28.8 0.2 + 18NOV1992 21.2-0.5 24.7-0.3 26.4-0.2 28.5-0.1 + 25NOV1992 22.1 0.2 24.9-0.2 26.7 0.0 28.8 0.2 + 02DEC1992 22.2 0.0 24.9-0.2 26.7 0.1 28.9 0.4 + 09DEC1992 22.2-0.3 25.1 0.0 26.8 0.2 28.7 0.2 + 16DEC1992 22.3-0.5 24.9-0.3 26.7 0.1 28.7 0.3 + 23DEC1992 22.5-0.7 25.1-0.2 26.8 0.2 28.9 0.4 + 30DEC1992 23.3-0.2 25.1-0.3 26.6 0.0 28.6 0.2 + 06JAN1993 23.6-0.3 25.4-0.1 26.7 0.1 28.5 0.2 + 13JAN1993 24.4 0.1 25.6 0.0 26.8 0.2 28.7 0.4 + 20JAN1993 24.5-0.2 25.5-0.2 26.6 0.0 28.6 0.3 + 27JAN1993 25.2 0.1 25.8-0.2 26.7 0.0 28.6 0.4 + 03FEB1993 26.2 0.8 26.3 0.2 26.9 0.3 28.5 0.3 + 10FEB1993 26.6 0.7 26.4 0.2 26.8 0.1 28.3 0.2 + 17FEB1993 26.6 0.4 26.9 0.5 27.0 0.2 28.3 0.2 + 24FEB1993 26.6 0.4 26.7 0.1 27.1 0.2 28.5 0.4 + 03MAR1993 26.9 0.6 26.9 0.1 27.2 0.2 28.4 0.3 + 10MAR1993 27.2 0.7 27.3 0.3 27.4 0.3 28.4 0.3 + 17MAR1993 27.1 0.6 27.5 0.3 27.7 0.4 28.6 0.4 + 24MAR1993 27.2 1.0 28.0 0.7 28.0 0.7 28.8 0.5 + 31MAR1993 27.7 1.7 28.3 1.0 28.2 0.7 28.9 0.6 + 07APR1993 26.6 0.9 28.4 1.0 28.3 0.6 28.7 0.3 + 14APR1993 26.3 0.7 28.5 1.0 28.8 1.1 29.0 0.5 + 21APR1993 26.3 1.0 28.4 1.0 28.7 0.9 29.0 0.5 + 28APR1993 26.0 1.1 28.5 1.2 28.8 1.0 29.0 0.4 + 05MAY1993 25.9 1.2 28.5 1.2 28.8 1.0 28.9 0.3 + 12MAY1993 25.6 1.2 28.3 1.2 28.9 1.0 29.1 0.4 + 19MAY1993 24.9 0.8 28.1 1.1 28.8 1.0 29.2 0.4 + 26MAY1993 24.3 0.6 27.9 1.0 28.9 1.1 29.2 0.4 + 02JUN1993 24.5 1.1 27.7 0.9 28.6 0.9 29.2 0.4 + 09JUN1993 23.9 0.7 27.2 0.6 28.3 0.6 29.1 0.2 + 16JUN1993 23.6 0.8 27.1 0.6 28.2 0.6 29.1 0.2 + 23JUN1993 23.8 1.3 26.9 0.7 28.2 0.7 29.3 0.5 + 30JUN1993 23.0 0.7 26.7 0.6 28.1 0.6 29.3 0.5 + 07JUL1993 22.4 0.4 26.1 0.3 27.9 0.6 29.3 0.5 + 14JUL1993 22.2 0.5 25.8 0.1 27.4 0.2 29.2 0.4 + 21JUL1993 22.0 0.6 25.6 0.1 27.5 0.4 29.2 0.4 + 28JUL1993 21.3 0.0 25.3-0.1 27.2 0.1 29.1 0.4 + 04AUG1993 21.2 0.2 25.0-0.3 26.8-0.2 28.9 0.2 + 11AUG1993 20.8 0.0 25.0-0.1 26.9 0.0 29.0 0.3 + 18AUG1993 21.1 0.5 24.8-0.1 26.8 0.0 28.7 0.1 + 25AUG1993 21.2 0.6 24.9 0.0 26.9 0.1 29.1 0.4 + 01SEP1993 20.9 0.4 24.9 0.0 26.9 0.2 29.1 0.4 + 08SEP1993 20.8 0.3 25.0 0.1 26.8 0.1 29.0 0.4 + 15SEP1993 20.8 0.4 24.9 0.0 26.9 0.2 29.1 0.5 + 22SEP1993 21.0 0.5 25.0 0.2 27.0 0.3 29.1 0.4 + 29SEP1993 20.7 0.2 25.1 0.2 27.0 0.3 29.0 0.3 + 06OCT1993 20.6-0.1 25.2 0.3 26.9 0.2 28.8 0.1 + 13OCT1993 20.8 0.0 25.3 0.4 27.0 0.3 29.0 0.3 + 20OCT1993 21.2 0.3 25.0 0.1 26.6 0.0 28.9 0.2 + 27OCT1993 21.3 0.2 25.3 0.4 27.1 0.4 29.0 0.3 + 03NOV1993 22.0 0.8 25.4 0.4 27.2 0.5 29.0 0.3 + 10NOV1993 21.4 0.0 25.1 0.1 26.9 0.2 28.8 0.2 + 17NOV1993 21.7 0.0 25.1 0.2 26.9 0.2 28.9 0.3 + 24NOV1993 21.4-0.5 25.1 0.0 26.7 0.1 29.0 0.5 + 01DEC1993 21.8-0.4 25.3 0.2 26.9 0.3 29.2 0.6 + 08DEC1993 22.1-0.3 25.3 0.2 26.9 0.4 29.0 0.5 + 15DEC1993 23.1 0.4 25.3 0.2 26.8 0.3 28.9 0.4 + 22DEC1993 23.0-0.2 25.3 0.1 26.6 0.1 28.9 0.4 + 29DEC1993 23.3-0.2 25.4 0.0 26.5-0.1 28.6 0.2 + 05JAN1994 23.8 0.0 25.7 0.2 26.7 0.1 28.7 0.3 + 12JAN1994 23.9-0.3 25.7 0.1 26.7 0.2 28.5 0.2 + 19JAN1994 24.6 0.0 25.7-0.1 26.5-0.1 28.5 0.2 + 26JAN1994 24.8-0.2 25.8-0.1 26.5-0.2 28.2 0.0 + 02FEB1994 25.4 0.0 25.9-0.1 26.6 0.0 28.2 0.0 + 09FEB1994 25.9 0.1 26.2 0.0 26.7 0.0 28.1 0.0 + 16FEB1994 25.6-0.5 26.1-0.3 26.6-0.1 28.0 0.0 + 23FEB1994 26.1-0.1 25.9-0.7 26.4-0.5 27.9-0.2 + 02MAR1994 26.2-0.1 26.6-0.2 26.6-0.3 27.9-0.2 + 09MAR1994 25.5-0.9 27.0 0.1 27.2 0.1 28.2 0.1 + 16MAR1994 25.7-0.9 27.0-0.1 27.4 0.2 28.4 0.2 + 23MAR1994 25.0-1.2 26.8-0.4 27.3-0.1 28.3 0.0 + 30MAR1994 24.8-1.3 27.0-0.3 27.7 0.2 28.3 0.0 + 06APR1994 24.9-0.9 27.0-0.4 27.6 0.0 28.5 0.1 + 13APR1994 24.7-0.9 27.2-0.3 28.0 0.2 28.6 0.2 + 20APR1994 24.2-1.1 27.0-0.4 28.0 0.2 28.6 0.1 + 27APR1994 23.4-1.6 27.1-0.2 28.1 0.3 28.7 0.2 + 04MAY1994 23.4-1.3 27.0-0.3 27.9 0.1 28.8 0.1 + 11MAY1994 23.6-0.8 26.8-0.3 27.8 0.0 28.9 0.2 + 18MAY1994 23.0-1.1 27.2 0.1 28.2 0.4 29.0 0.2 + 25MAY1994 23.0-0.8 26.9 0.0 28.1 0.3 29.1 0.3 + 01JUN1994 22.8-0.7 26.9 0.1 28.3 0.5 29.3 0.5 + 08JUN1994 22.7-0.5 26.7 0.1 28.0 0.3 29.1 0.3 + 15JUN1994 22.7-0.1 26.8 0.4 28.2 0.6 29.1 0.3 + 22JUN1994 22.2-0.4 26.2-0.1 27.9 0.3 29.2 0.4 + 29JUN1994 21.7-0.6 25.9-0.2 27.6 0.1 29.2 0.4 + 06JUL1994 21.9-0.1 25.6-0.3 27.4 0.1 29.3 0.5 + 13JUL1994 21.3-0.4 25.2-0.5 27.3 0.1 29.4 0.6 + 20JUL1994 20.9-0.6 25.1-0.4 27.4 0.2 29.5 0.8 + 27JUL1994 20.8-0.5 24.8-0.6 27.2 0.1 29.4 0.6 + 03AUG1994 20.1-1.0 24.5-0.8 27.3 0.3 29.4 0.7 + 10AUG1994 19.2-1.6 24.8-0.3 27.6 0.7 29.5 0.8 + 17AUG1994 19.6-1.1 24.8-0.2 27.4 0.6 29.5 0.9 + 24AUG1994 20.0-0.5 24.8-0.2 27.3 0.5 29.5 0.8 + 31AUG1994 19.6-0.9 24.7-0.2 27.1 0.3 29.4 0.7 + 07SEP1994 20.1-0.4 24.6-0.3 26.9 0.2 29.3 0.6 + 14SEP1994 20.0-0.3 24.6-0.2 26.9 0.1 29.2 0.5 + 21SEP1994 20.5 0.1 24.9 0.0 27.0 0.2 29.2 0.5 + 28SEP1994 20.2-0.3 25.2 0.3 27.2 0.5 29.2 0.6 + 05OCT1994 21.0 0.3 25.4 0.5 27.3 0.6 29.4 0.8 + 12OCT1994 21.7 0.9 25.6 0.7 27.5 0.8 29.4 0.8 + 19OCT1994 21.8 0.9 25.6 0.6 27.5 0.8 29.4 0.8 + 26OCT1994 21.7 0.7 25.6 0.6 27.6 1.0 29.5 0.9 + 02NOV1994 22.1 0.9 25.7 0.7 27.8 1.1 29.6 1.0 + 09NOV1994 22.1 0.7 26.0 1.0 27.9 1.3 29.5 0.9 + 16NOV1994 22.3 0.7 25.8 0.8 27.8 1.1 29.6 1.0 + 23NOV1994 22.8 0.9 25.9 0.9 27.9 1.2 29.7 1.1 + 30NOV1994 22.9 0.7 26.0 0.9 28.0 1.4 29.8 1.3 + 07DEC1994 23.3 0.9 26.0 0.9 27.9 1.3 29.6 1.1 + 14DEC1994 23.4 0.7 25.9 0.8 27.9 1.3 29.5 1.1 + 21DEC1994 23.7 0.6 26.2 1.0 27.9 1.3 29.3 0.9 + 28DEC1994 24.3 0.9 26.3 0.9 27.8 1.3 29.3 0.9 + 04JAN1995 24.7 0.8 26.1 0.7 27.6 1.1 29.3 0.9 + 11JAN1995 25.1 0.9 26.2 0.7 27.6 1.0 29.2 0.9 + 18JAN1995 25.3 0.8 26.4 0.7 27.6 1.0 29.3 1.0 + 25JAN1995 25.9 0.9 26.5 0.6 27.5 0.8 29.1 0.8 + 01FEB1995 26.2 0.9 26.7 0.7 27.4 0.8 29.0 0.9 + 08FEB1995 26.7 0.9 26.9 0.7 27.4 0.7 29.1 1.0 + 15FEB1995 26.5 0.4 26.8 0.4 27.3 0.5 28.9 0.8 + 22FEB1995 26.4 0.2 26.9 0.3 27.5 0.7 29.0 0.9 + 01MAR1995 26.0-0.2 26.9 0.2 27.7 0.7 29.0 0.9 + 08MAR1995 26.0-0.4 26.7-0.2 27.4 0.4 28.9 0.7 + 15MAR1995 26.6 0.1 27.1 0.0 27.7 0.5 29.0 0.9 + 22MAR1995 26.4 0.1 27.2-0.1 27.7 0.3 29.0 0.8 + 29MAR1995 25.4-0.6 27.4 0.1 27.7 0.2 28.8 0.5 + 05APR1995 24.9-1.0 27.2-0.2 27.9 0.3 28.8 0.5 + 12APR1995 24.9-0.7 27.3-0.2 27.8 0.1 28.8 0.4 + 19APR1995 24.6-0.7 27.3-0.2 28.2 0.4 28.9 0.3 + 26APR1995 23.5-1.5 26.6-0.7 27.9 0.1 28.9 0.3 + 03MAY1995 23.3-1.4 26.6-0.6 28.0 0.2 29.2 0.6 + 10MAY1995 23.0-1.4 26.3-0.8 27.7-0.1 29.1 0.4 + 17MAY1995 23.0-1.2 26.2-0.8 27.7-0.2 29.2 0.4 + 24MAY1995 23.2-0.6 26.4-0.5 27.6-0.2 29.1 0.3 + 31MAY1995 22.8-0.7 26.4-0.3 27.7 0.0 29.0 0.2 + 07JUN1995 22.9-0.3 26.4-0.2 27.7 0.0 29.1 0.3 + 14JUN1995 22.9 0.0 26.4-0.1 27.7 0.1 29.1 0.3 + 21JUN1995 21.9-0.7 26.0-0.3 27.5 0.0 28.9 0.1 + 28JUN1995 21.8-0.5 25.8-0.3 27.3-0.1 28.8 0.0 + 05JUL1995 22.0 0.0 25.7-0.2 27.3-0.1 29.0 0.2 + 12JUL1995 21.2-0.5 25.6-0.1 27.1-0.2 28.8 0.0 + 19JUL1995 21.0-0.5 25.3-0.2 26.9-0.3 28.7-0.1 + 26JUL1995 20.8-0.5 25.1-0.3 26.8-0.3 28.6-0.1 + 02AUG1995 20.3-0.8 24.8-0.5 26.7-0.3 28.5-0.2 + 09AUG1995 19.9-1.0 24.3-0.8 26.3-0.6 28.3-0.4 + 16AUG1995 20.0-0.7 24.3-0.7 26.4-0.4 28.5-0.2 + 23AUG1995 19.9-0.7 24.3-0.7 26.3-0.5 28.4-0.2 + 30AUG1995 20.1-0.5 24.0-0.9 25.9-0.8 28.2-0.5 + 06SEP1995 20.4 0.0 24.1-0.8 26.0-0.8 28.2-0.5 + 13SEP1995 19.9-0.5 24.1-0.8 26.0-0.7 28.0-0.6 + 20SEP1995 20.2-0.2 24.0-0.9 26.1-0.7 28.4-0.3 + 27SEP1995 20.2-0.3 23.9-1.0 25.9-0.8 28.4-0.3 + 04OCT1995 19.6-1.0 23.9-1.0 25.6-1.1 28.1-0.5 + 11OCT1995 20.2-0.5 24.1-0.8 25.6-1.1 28.0-0.6 + 18OCT1995 20.0-0.8 24.1-0.9 25.8-0.9 28.2-0.5 + 25OCT1995 20.3-0.7 24.0-0.9 25.6-1.1 27.9-0.8 + 01NOV1995 21.0-0.2 24.1-0.8 25.6-1.0 28.0-0.7 + 08NOV1995 20.6-0.8 23.9-1.1 25.8-0.9 28.1-0.5 + 15NOV1995 21.3-0.2 24.1-0.9 25.7-1.0 27.8-0.8 + 22NOV1995 21.4-0.4 24.1-0.9 25.5-1.1 27.7-0.9 + 29NOV1995 21.6-0.5 24.1-1.0 25.7-0.9 28.1-0.5 + 06DEC1995 21.5-0.9 24.1-1.0 25.6-1.0 27.9-0.6 + 13DEC1995 21.7-1.0 24.0-1.1 25.4-1.2 27.9-0.5 + 20DEC1995 22.0-1.0 24.1-1.1 25.6-1.0 28.1-0.3 + 27DEC1995 22.8-0.6 24.5-0.8 25.7-0.9 28.1-0.3 + 03JAN1996 23.4-0.4 24.6-0.8 25.6-1.0 28.1-0.3 + 10JAN1996 23.6-0.6 24.9-0.6 25.6-1.0 27.9-0.4 + 17JAN1996 24.0-0.5 25.2-0.5 25.9-0.7 27.8-0.5 + 24JAN1996 23.9-1.0 25.0-0.8 25.9-0.7 27.9-0.4 + 31JAN1996 24.6-0.7 25.2-0.8 25.8-0.9 27.8-0.4 + 07FEB1996 25.4-0.3 25.4-0.8 25.6-1.1 27.5-0.6 + 14FEB1996 25.9-0.1 25.7-0.6 25.8-0.9 27.5-0.5 + 21FEB1996 26.0-0.2 25.9-0.6 25.8-1.0 27.4-0.7 + 28FEB1996 26.1-0.2 26.3-0.5 26.3-0.6 27.5-0.6 + 06MAR1996 26.6 0.2 26.5-0.4 26.2-0.8 27.5-0.6 + 13MAR1996 26.1-0.3 26.9-0.2 26.6-0.6 27.7-0.5 + 20MAR1996 26.3-0.1 27.0-0.2 26.8-0.5 27.7-0.5 + 27MAR1996 25.7-0.4 26.7-0.6 26.8-0.6 27.8-0.4 + 03APR1996 24.4-1.5 26.5-0.9 27.0-0.6 27.9-0.5 + 10APR1996 23.9-1.7 27.0-0.4 27.4-0.3 27.9-0.5 + 17APR1996 23.8-1.6 26.8-0.7 27.3-0.4 28.0-0.5 + 24APR1996 23.6-1.5 26.7-0.7 27.6-0.1 28.2-0.3 + 01MAY1996 23.0-1.9 26.4-0.9 27.4-0.4 28.2-0.4 + 08MAY1996 23.0-1.6 26.5-0.7 27.6-0.2 28.4-0.3 + 15MAY1996 23.0-1.3 26.3-0.8 27.3-0.5 28.3-0.4 + 22MAY1996 23.0-0.9 26.2-0.7 27.2-0.6 28.5-0.3 + 29MAY1996 22.6-1.1 26.2-0.6 27.3-0.4 28.6-0.2 + 05JUN1996 22.3-1.0 26.0-0.6 27.3-0.4 28.6-0.3 + 12JUN1996 21.9-1.0 26.0-0.5 27.3-0.4 28.5-0.4 + 19JUN1996 21.4-1.3 25.8-0.6 27.3-0.3 28.4-0.4 + 26JUN1996 20.6-1.8 25.7-0.5 27.3-0.2 28.6-0.2 + 03JUL1996 20.4-1.7 25.9 0.0 27.6 0.2 28.6-0.2 + 10JUL1996 20.1-1.8 25.4-0.3 27.1-0.2 28.5-0.3 + 17JUL1996 20.0-1.6 25.4-0.2 27.1-0.1 28.3-0.5 + 24JUL1996 20.2-1.2 25.1-0.4 26.9-0.2 28.5-0.3 + 31JUL1996 19.2-1.9 24.7-0.6 26.6-0.4 28.4-0.3 + 07AUG1996 19.2-1.7 24.8-0.4 26.7-0.3 28.5-0.2 + 14AUG1996 20.0-0.8 24.6-0.5 26.5-0.4 28.6 0.0 + 21AUG1996 20.1-0.5 24.6-0.3 26.5-0.3 28.6-0.1 + 28AUG1996 18.9-1.6 24.4-0.6 26.5-0.2 28.4-0.3 + 04SEP1996 19.1-1.3 24.3-0.6 26.4-0.4 28.5-0.2 + 11SEP1996 19.4-1.0 24.4-0.5 26.2-0.5 28.3-0.4 + 18SEP1996 19.1-1.3 24.3-0.5 26.4-0.3 28.5-0.2 + 25SEP1996 19.3-1.2 24.4-0.4 26.3-0.4 28.4-0.3 + 02OCT1996 19.5-1.2 24.5-0.4 26.2-0.5 28.3-0.4 + 09OCT1996 19.5-1.3 24.3-0.6 26.2-0.5 28.5-0.2 + 16OCT1996 20.2-0.6 24.4-0.5 26.3-0.3 28.5-0.1 + 23OCT1996 20.5-0.5 24.4-0.6 26.2-0.5 28.3-0.3 + 30OCT1996 20.0-1.1 24.3-0.7 26.1-0.5 28.3-0.3 + 06NOV1996 20.2-1.2 24.4-0.6 26.1-0.5 28.1-0.5 + 13NOV1996 20.1-1.4 24.4-0.6 26.2-0.5 28.3-0.3 + 20NOV1996 20.3-1.5 24.4-0.6 26.3-0.3 28.4-0.1 + 27NOV1996 20.4-1.6 24.3-0.7 26.2-0.4 28.3-0.2 + 04DEC1996 20.8-1.5 24.4-0.7 26.3-0.3 28.5 0.0 + 11DEC1996 21.6-1.0 24.1-1.0 26.1-0.5 28.6 0.1 + 18DEC1996 21.6-1.3 24.2-1.0 25.9-0.6 28.3-0.1 + 25DEC1996 22.1-1.1 24.1-1.1 25.9-0.7 28.3-0.1 + 01JAN1997 22.5-1.2 24.3-1.1 25.8-0.8 28.2-0.2 + 08JAN1997 23.0-1.0 24.5-1.0 25.9-0.6 28.4 0.1 + 15JAN1997 23.6-0.8 24.6-1.0 25.8-0.7 28.4 0.1 + 22JAN1997 24.3-0.5 24.8-1.0 25.9-0.7 28.4 0.2 + 29JAN1997 24.6-0.6 25.1-0.8 26.3-0.4 28.4 0.2 + 05FEB1997 25.3-0.2 25.2-0.9 26.2-0.5 28.4 0.2 + 12FEB1997 25.4-0.6 25.8-0.5 26.4-0.3 28.3 0.2 + 19FEB1997 26.3 0.1 25.9-0.6 26.4-0.4 28.2 0.1 + 26FEB1997 26.2-0.1 26.2-0.4 26.5-0.4 28.2 0.1 + 05MAR1997 26.8 0.5 26.6-0.3 26.6-0.4 28.1 0.0 + 12MAR1997 26.9 0.5 26.8-0.3 26.8-0.4 28.3 0.1 + 19MAR1997 27.0 0.6 27.3 0.1 27.4 0.1 28.5 0.3 + 26MAR1997 27.2 1.0 27.4 0.1 27.3-0.1 28.9 0.7 + 02APR1997 27.0 1.1 27.3-0.1 27.5 0.0 29.2 0.8 + 09APR1997 26.4 0.7 27.3-0.1 27.8 0.2 29.2 0.8 + 16APR1997 26.5 1.1 27.6 0.1 28.0 0.3 29.3 0.8 + 23APR1997 26.6 1.4 27.8 0.4 28.4 0.6 29.5 0.9 + 30APR1997 26.8 1.9 28.0 0.7 28.4 0.6 29.5 0.8 + 07MAY1997 26.8 2.2 28.2 1.0 28.6 0.8 29.4 0.8 + 14MAY1997 26.7 2.4 28.0 0.9 28.5 0.6 29.3 0.6 + 21MAY1997 26.6 2.6 27.9 1.0 28.6 0.8 29.5 0.7 + 28MAY1997 26.8 3.1 28.1 1.3 28.8 1.0 29.5 0.7 + 04JUN1997 26.4 3.1 28.0 1.3 28.8 1.1 29.4 0.6 + 11JUN1997 26.5 3.5 28.1 1.6 28.9 1.2 29.3 0.5 + 18JUN1997 26.0 3.3 28.2 1.8 29.0 1.4 29.4 0.6 + 25JUN1997 26.2 3.7 28.2 2.0 29.1 1.6 29.5 0.7 + 02JUL1997 25.9 3.7 28.1 2.1 29.0 1.5 29.4 0.6 + 09JUL1997 25.7 3.8 28.0 2.2 28.9 1.6 29.5 0.7 + 16JUL1997 25.7 4.1 28.1 2.5 29.0 1.8 29.5 0.7 + 23JUL1997 25.5 4.1 27.9 2.4 28.8 1.7 29.5 0.8 + 30JUL1997 25.2 4.0 27.9 2.6 28.9 1.9 29.5 0.8 + 06AUG1997 25.3 4.3 27.8 2.6 28.8 1.8 29.4 0.7 + 13AUG1997 25.4 4.6 27.9 2.9 28.9 2.0 29.3 0.6 + 20AUG1997 24.2 3.6 27.9 2.9 28.9 2.1 29.2 0.5 + 27AUG1997 24.3 3.7 27.7 2.7 28.8 2.0 29.2 0.5 + 03SEP1997 24.6 4.2 27.8 2.9 28.9 2.1 29.2 0.6 + 10SEP1997 24.6 4.2 27.8 2.9 28.9 2.2 29.3 0.6 + 17SEP1997 24.2 3.8 27.8 2.9 28.9 2.2 29.3 0.6 + 24SEP1997 24.4 3.9 27.9 3.0 28.9 2.2 29.5 0.8 + 01OCT1997 24.1 3.5 28.0 3.1 29.1 2.4 29.4 0.7 + 08OCT1997 24.5 3.8 28.1 3.2 29.2 2.6 29.3 0.6 + 15OCT1997 24.5 3.7 28.1 3.2 29.2 2.5 29.3 0.7 + 22OCT1997 24.9 3.9 28.2 3.3 29.3 2.6 29.5 0.8 + 29OCT1997 24.7 3.6 28.3 3.4 29.2 2.6 29.2 0.6 + 05NOV1997 25.0 3.7 28.4 3.4 29.2 2.6 29.2 0.6 + 12NOV1997 25.8 4.3 28.5 3.6 29.3 2.7 29.5 0.8 + 19NOV1997 25.8 4.1 28.6 3.6 29.3 2.7 29.7 1.1 + 26NOV1997 25.9 3.9 28.7 3.7 29.4 2.8 29.7 1.1 + 03DEC1997 26.2 3.9 28.6 3.6 29.2 2.6 29.4 0.9 + 10DEC1997 26.7 4.2 28.7 3.6 29.2 2.7 29.4 0.9 + 17DEC1997 27.0 4.1 28.8 3.6 29.3 2.7 29.3 0.8 + 24DEC1997 27.2 4.0 28.8 3.5 29.3 2.7 29.3 0.9 + 31DEC1997 27.7 4.1 28.9 3.5 29.2 2.7 29.2 0.8 + 07JAN1998 28.0 4.0 28.9 3.4 29.2 2.6 29.1 0.8 + 14JAN1998 28.4 4.0 28.9 3.3 29.1 2.5 29.0 0.7 + 21JAN1998 28.4 3.7 28.9 3.2 29.0 2.4 28.9 0.7 + 28JAN1998 28.3 3.2 29.1 3.1 29.1 2.4 28.9 0.7 + 04FEB1998 28.9 3.4 29.1 3.0 29.2 2.5 29.0 0.9 + 11FEB1998 28.9 3.0 29.0 2.7 29.0 2.3 29.0 0.9 + 18FEB1998 29.1 3.0 28.8 2.3 28.7 1.9 28.8 0.7 + 25FEB1998 29.1 2.9 28.9 2.2 28.6 1.7 28.8 0.7 + 04MAR1998 29.2 2.8 29.0 2.2 28.5 1.5 28.6 0.4 + 11MAR1998 29.2 2.8 29.1 2.1 28.7 1.6 28.8 0.7 + 18MAR1998 29.2 2.7 29.1 2.0 28.6 1.4 28.6 0.4 + 25MAR1998 29.1 2.8 29.2 2.0 28.8 1.5 28.6 0.4 + 01APR1998 29.1 3.1 29.3 1.9 28.7 1.2 28.6 0.2 + 08APR1998 28.8 3.0 29.2 1.8 28.6 1.0 28.5 0.0 + 15APR1998 28.6 3.1 29.1 1.6 28.4 0.6 28.5 0.0 + 22APR1998 28.4 3.2 29.0 1.6 28.5 0.7 28.5-0.1 + 29APR1998 28.3 3.4 28.9 1.6 28.7 0.8 28.7 0.1 + 06MAY1998 27.8 3.2 29.4 2.1 29.1 1.3 28.7 0.1 + 13MAY1998 28.1 3.8 28.7 1.6 28.8 0.9 28.7-0.1 + 20MAY1998 27.9 3.9 27.6 0.7 28.3 0.5 28.6-0.2 + 27MAY1998 27.0 3.3 27.1 0.2 27.9 0.1 28.8 0.0 + 03JUN1998 26.2 2.8 26.1-0.6 27.1-0.6 28.7-0.1 + 10JUN1998 26.1 3.0 26.2-0.3 26.9-0.8 28.6-0.2 + 17JUN1998 24.6 1.8 25.8-0.6 26.7-1.0 28.7-0.1 + 24JUN1998 24.5 2.0 26.0-0.2 26.4-1.1 28.5-0.3 + 01JUL1998 24.1 1.9 25.7-0.3 26.4-1.1 28.3-0.5 + 08JUL1998 23.6 1.7 25.6-0.2 26.2-1.2 28.2-0.6 + 15JUL1998 23.6 2.0 25.3-0.4 25.9-1.4 28.1-0.7 + 22JUL1998 23.0 1.5 24.9-0.6 25.7-1.4 28.0-0.8 + 29JUL1998 23.2 2.0 24.9-0.5 25.7-1.4 27.8-1.0 + 05AUG1998 22.6 1.7 24.8-0.4 25.6-1.4 27.9-0.8 + 12AUG1998 21.8 1.1 24.6-0.5 25.5-1.4 27.8-0.9 + 19AUG1998 21.3 0.7 24.4-0.6 25.2-1.6 27.6-1.0 + 26AUG1998 21.2 0.7 24.7-0.3 25.6-1.2 27.6-1.0 + 02SEP1998 21.1 0.6 24.5-0.4 25.6-1.2 27.8-0.8 + 09SEP1998 20.9 0.5 24.3-0.6 25.9-0.8 28.3-0.4 + 16SEP1998 21.0 0.7 24.2-0.7 25.7-1.0 28.0-0.7 + 23SEP1998 20.5 0.1 24.1-0.7 25.5-1.2 27.6-1.1 + 30SEP1998 20.9 0.3 23.7-1.2 25.1-1.6 27.2-1.4 + 07OCT1998 20.9 0.2 23.9-1.0 25.3-1.4 27.5-1.2 + 14OCT1998 21.2 0.4 24.1-0.8 25.4-1.3 27.3-1.4 + 21OCT1998 21.1 0.1 24.1-0.8 25.3-1.4 27.2-1.5 + 28OCT1998 21.6 0.5 24.2-0.7 25.5-1.2 27.3-1.3 + 04NOV1998 21.4 0.1 24.4-0.6 25.2-1.5 27.2-1.4 + 11NOV1998 21.0-0.4 24.0-0.9 25.2-1.5 27.2-1.4 + 18NOV1998 21.7 0.0 24.1-0.9 25.2-1.4 27.1-1.5 + 25NOV1998 21.5-0.5 24.0-1.0 25.1-1.5 27.2-1.4 + 02DEC1998 21.7-0.5 23.9-1.2 25.1-1.5 27.3-1.2 + 09DEC1998 22.0-0.5 23.8-1.3 24.8-1.8 27.2-1.2 + 16DEC1998 22.5-0.3 23.9-1.3 24.7-1.8 27.1-1.4 + 23DEC1998 23.3 0.2 23.8-1.4 24.6-1.9 27.0-1.4 + 30DEC1998 23.2-0.4 23.9-1.5 24.7-1.9 26.7-1.7 + 06JAN1999 23.4-0.5 24.1-1.4 24.7-1.9 26.7-1.7 + 13JAN1999 23.7-0.6 24.2-1.4 25.0-1.6 26.8-1.5 + 20JAN1999 23.3-1.4 24.5-1.3 25.0-1.6 26.4-1.8 + 27JAN1999 24.5-0.6 24.9-1.0 25.0-1.6 26.2-2.0 + 03FEB1999 24.8-0.6 25.1-1.0 25.2-1.5 26.6-1.6 + 10FEB1999 25.1-0.7 25.0-1.2 25.2-1.5 26.5-1.6 + 17FEB1999 25.5-0.6 25.5-0.9 25.5-1.3 26.3-1.7 + 24FEB1999 26.8 0.6 26.4-0.2 25.7-1.2 26.4-1.7 + 03MAR1999 27.4 1.1 26.7-0.1 26.1-0.9 26.8-1.3 + 10MAR1999 27.0 0.6 26.6-0.4 26.1-1.0 26.7-1.5 + 17MAR1999 26.4 0.0 26.7-0.4 26.2-1.0 26.9-1.2 + 24MAR1999 26.3 0.0 26.7-0.6 26.5-0.9 27.0-1.2 + 31MAR1999 25.8-0.3 26.6-0.7 26.5-1.0 27.0-1.3 + 07APR1999 24.4-1.3 26.7-0.7 26.7-0.9 27.1-1.3 + 14APR1999 24.6-0.9 26.5-0.9 26.8-0.9 27.3-1.1 + 21APR1999 23.8-1.4 26.7-0.7 27.0-0.8 27.4-1.1 + 28APR1999 23.7-1.3 26.8-0.6 27.0-0.8 27.5-1.1 + 05MAY1999 23.6-1.1 26.6-0.6 27.0-0.8 27.8-0.9 + 12MAY1999 23.7-0.7 26.7-0.4 27.1-0.7 27.9-0.8 + 19MAY1999 23.7-0.4 26.5-0.5 26.9-0.9 27.8-0.9 + 26MAY1999 23.2-0.6 26.1-0.8 26.9-0.9 27.9-0.9 + 02JUN1999 22.5-0.9 25.8-0.9 26.7-1.1 28.0-0.8 + 09JUN1999 22.4-0.8 25.8-0.7 26.6-1.1 27.9-0.9 + 16JUN1999 21.6-1.2 25.6-0.9 26.6-1.1 28.0-0.9 + 23JUN1999 21.3-1.2 25.4-0.8 26.5-1.0 28.0-0.8 + 30JUN1999 21.3-1.0 25.3-0.8 26.6-0.8 28.1-0.7 + 07JUL1999 20.4-1.5 25.2-0.7 26.6-0.7 28.1-0.7 + 14JUL1999 20.4-1.3 24.9-0.7 26.4-0.8 27.8-1.0 + 21JUL1999 20.3-1.1 24.8-0.7 26.2-0.9 27.8-1.0 + 28JUL1999 20.2-1.0 24.4-1.0 26.0-1.0 27.8-0.9 + 04AUG1999 20.2-0.8 24.3-0.9 26.0-1.0 27.8-0.9 + 11AUG1999 19.7-1.1 24.1-1.0 25.6-1.3 27.7-1.0 + 18AUG1999 19.5-1.1 23.9-1.1 25.4-1.4 27.8-0.9 + 25AUG1999 19.7-0.9 24.0-1.0 25.5-1.3 27.6-1.1 + 01SEP1999 19.5-1.0 23.6-1.3 25.4-1.4 27.6-1.0 + 08SEP1999 19.2-1.2 23.7-1.2 25.7-1.1 27.7-0.9 + 15SEP1999 18.9-1.5 23.6-1.3 25.7-1.0 27.7-0.9 + 22SEP1999 19.3-1.2 23.8-1.1 25.8-0.9 27.9-0.7 + 29SEP1999 19.5-1.1 24.0-0.8 25.9-0.8 27.8-0.8 + 06OCT1999 19.7-0.9 23.6-1.3 25.7-1.0 27.9-0.8 + 13OCT1999 20.1-0.7 23.7-1.2 25.8-0.9 28.0-0.6 + 20OCT1999 20.0-1.0 23.7-1.2 25.6-1.0 27.8-0.9 + 27OCT1999 20.6-0.5 23.8-1.1 25.4-1.3 27.7-1.0 + 03NOV1999 20.1-1.2 23.6-1.3 25.4-1.3 27.6-1.0 + 10NOV1999 20.1-1.3 23.7-1.2 25.4-1.3 27.5-1.1 + 17NOV1999 20.6-1.0 23.5-1.5 25.2-1.5 27.6-1.0 + 24NOV1999 20.9-1.1 23.1-1.9 24.7-1.9 27.4-1.1 + 01DEC1999 21.0-1.2 23.1-1.9 24.9-1.7 27.3-1.2 + 08DEC1999 21.1-1.4 23.6-1.5 25.1-1.4 27.3-1.2 + 15DEC1999 21.3-1.4 23.4-1.7 24.9-1.7 27.1-1.4 + 22DEC1999 22.0-1.1 23.8-1.4 24.9-1.6 27.1-1.3 + 29DEC1999 23.0-0.5 23.6-1.8 24.6-1.9 27.2-1.2 + 05JAN2000 23.2-0.6 23.4-2.1 24.5-2.0 27.0-1.3 + 12JAN2000 23.8-0.4 23.9-1.7 24.7-1.9 26.9-1.4 + 19JAN2000 23.7-0.9 24.0-1.7 24.8-1.8 26.9-1.4 + 26JAN2000 24.0-1.0 24.0-1.8 24.6-2.0 26.9-1.3 + 02FEB2000 25.0-0.4 24.7-1.3 24.8-1.9 26.7-1.5 + 09FEB2000 25.1-0.7 25.3-0.9 25.1-1.6 26.6-1.5 + 16FEB2000 25.6-0.5 25.5-0.9 25.4-1.4 26.7-1.4 + 23FEB2000 26.2 0.0 25.4-1.2 25.2-1.6 26.6-1.5 + 01MAR2000 26.4 0.1 25.7-1.0 25.5-1.5 26.5-1.6 + 08MAR2000 26.6 0.2 26.2-0.8 25.7-1.4 26.6-1.5 + 15MAR2000 26.2-0.3 26.5-0.6 26.0-1.2 26.7-1.5 + 22MAR2000 25.3-1.0 26.9-0.3 26.3-1.1 26.7-1.5 + 29MAR2000 25.6-0.5 27.5 0.2 26.8-0.7 27.0-1.3 + 05APR2000 25.7-0.1 27.6 0.2 27.0-0.6 27.2-1.2 + 12APR2000 26.1 0.5 27.4-0.1 26.9-0.8 27.3-1.2 + 19APR2000 25.6 0.3 27.5 0.0 27.0-0.8 27.4-1.1 + 26APR2000 25.3 0.3 27.5 0.1 27.1-0.7 27.5-1.0 + 03MAY2000 24.9 0.2 27.3 0.0 27.1-0.7 27.5-1.1 + 10MAY2000 24.3-0.1 27.2 0.0 27.1-0.7 27.7-1.0 + 17MAY2000 23.9-0.3 26.6-0.4 27.1-0.8 27.8-1.0 + 24MAY2000 23.2-0.6 26.4-0.5 27.1-0.7 28.0-0.8 + 31MAY2000 23.2-0.3 26.3-0.4 27.2-0.5 28.1-0.7 + 07JUN2000 22.6-0.6 26.0-0.7 27.0-0.7 28.0-0.8 + 14JUN2000 22.4-0.5 25.9-0.6 27.1-0.6 28.1-0.7 + 21JUN2000 21.7-0.9 25.8-0.5 27.0-0.6 28.2-0.7 + 28JUN2000 21.4-0.9 25.5-0.6 26.9-0.6 28.0-0.8 + 05JUL2000 21.0-1.0 25.6-0.3 26.9-0.5 28.0-0.8 + 12JUL2000 20.6-1.2 25.2-0.5 26.8-0.5 28.1-0.7 + 19JUL2000 20.3-1.2 24.9-0.6 26.7-0.5 28.2-0.5 + 26JUL2000 20.2-1.1 24.9-0.5 26.5-0.6 28.3-0.4 + 02AUG2000 20.2-0.8 24.7-0.5 26.6-0.4 28.4-0.3 + 09AUG2000 20.1-0.8 24.5-0.6 26.6-0.3 28.4-0.3 + 16AUG2000 20.5-0.2 24.4-0.6 26.4-0.4 28.3-0.3 + 23AUG2000 20.1-0.5 24.3-0.7 26.3-0.5 28.1-0.5 + 30AUG2000 19.3-1.2 24.5-0.4 26.4-0.4 28.2-0.4 + 06SEP2000 20.2-0.3 24.4-0.4 26.3-0.5 28.4-0.2 + 13SEP2000 19.7-0.7 24.3-0.6 26.1-0.6 28.4-0.2 + 20SEP2000 20.1-0.3 24.2-0.6 26.1-0.6 28.5-0.2 + 27SEP2000 19.9-0.6 24.4-0.5 26.3-0.4 28.4-0.3 + 04OCT2000 20.2-0.5 24.7-0.2 26.1-0.6 28.1-0.5 + 11OCT2000 20.2-0.5 24.4-0.5 26.0-0.6 28.2-0.4 + 18OCT2000 20.5-0.3 24.3-0.6 25.9-0.8 28.1-0.5 + 25OCT2000 20.7-0.4 24.3-0.6 25.9-0.8 28.1-0.6 + 01NOV2000 20.6-0.6 24.2-0.8 25.6-1.1 28.0-0.6 + 08NOV2000 20.6-0.8 24.0-1.0 25.6-1.1 28.1-0.6 + 15NOV2000 20.3-1.3 24.2-0.7 25.9-0.7 28.2-0.4 + 22NOV2000 20.2-1.7 24.1-0.9 25.9-0.7 28.1-0.5 + 29NOV2000 21.4-0.7 24.4-0.6 25.9-0.7 27.8-0.7 + 06DEC2000 21.8-0.6 24.4-0.7 25.6-1.0 27.5-1.1 + 13DEC2000 22.4-0.2 24.5-0.6 25.6-1.0 27.6-0.9 + 20DEC2000 22.4-0.6 24.4-0.8 25.6-1.0 27.6-0.8 + 27DEC2000 22.2-1.2 24.4-1.0 25.5-1.0 27.5-0.9 + 03JAN2001 22.8-0.9 24.5-0.9 25.6-1.0 27.5-0.8 + 10JAN2001 23.3-0.8 24.7-0.8 25.6-1.0 27.5-0.9 + 17JAN2001 23.7-0.8 25.1-0.6 25.8-0.8 27.5-0.8 + 24JAN2001 24.6-0.3 25.3-0.5 25.9-0.8 27.4-0.8 + 31JAN2001 25.2 0.0 25.4-0.6 26.0-0.7 27.3-0.9 + 07FEB2001 25.6-0.1 25.8-0.4 25.9-0.8 27.1-1.0 + 14FEB2001 25.6-0.4 25.9-0.5 26.0-0.7 27.2-0.9 + 21FEB2001 26.0-0.2 26.4-0.1 26.3-0.6 27.3-0.8 + 28FEB2001 26.7 0.4 26.7 0.0 26.4-0.5 27.4-0.8 + 07MAR2001 27.2 0.8 27.1 0.2 26.6-0.5 27.4-0.7 + 14MAR2001 27.3 0.8 27.2 0.1 26.8-0.4 27.6-0.6 + 21MAR2001 27.6 1.3 27.4 0.2 27.1-0.2 27.7-0.6 + 28MAR2001 27.7 1.6 27.4 0.2 27.0-0.4 27.8-0.5 + 04APR2001 27.3 1.5 27.6 0.2 27.3-0.3 27.9-0.4 + 11APR2001 27.2 1.6 27.7 0.3 27.6-0.1 28.1-0.3 + 18APR2001 26.2 0.8 27.7 0.2 27.7-0.1 28.3-0.2 + 25APR2001 25.9 0.8 27.2-0.1 27.6-0.2 28.2-0.3 + 02MAY2001 24.2-0.6 27.1-0.2 27.5-0.3 28.3-0.3 + 09MAY2001 23.9-0.6 27.0-0.1 27.6-0.2 28.6-0.1 + 16MAY2001 23.6-0.6 26.7-0.4 27.5-0.3 28.6-0.1 + 23MAY2001 23.3-0.6 26.9-0.1 27.7-0.1 28.8 0.0 + 30MAY2001 23.1-0.5 26.7 0.0 27.7-0.1 28.8 0.0 + 06JUN2001 22.1-1.2 26.7 0.1 27.8 0.1 28.8 0.0 + 13JUN2001 21.7-1.3 26.3-0.1 27.7 0.0 28.8 0.0 + 20JUN2001 21.5-1.2 26.3 0.0 27.7 0.1 28.8-0.1 + 27JUN2001 20.7-1.6 25.9-0.2 27.6 0.1 28.9 0.1 + 04JUL2001 20.7-1.4 25.6-0.3 27.5 0.1 29.0 0.2 + 11JUL2001 21.2-0.6 25.5-0.2 27.4 0.1 29.0 0.2 + 18JUL2001 20.9-0.7 25.5-0.1 27.3 0.1 29.1 0.3 + 25JUL2001 20.7-0.6 25.2-0.2 27.2 0.1 29.1 0.3 + 01AUG2001 20.3-0.8 25.0-0.3 27.2 0.1 29.1 0.4 + 08AUG2001 20.1-0.8 25.0-0.1 27.0 0.1 28.9 0.2 + 15AUG2001 19.8-0.9 24.7-0.3 26.8 0.0 28.9 0.2 + 22AUG2001 19.8-0.8 24.6-0.3 26.8 0.0 28.9 0.2 + 29AUG2001 19.7-0.9 24.3-0.6 26.6-0.2 29.0 0.4 + 05SEP2001 19.6-0.8 24.4-0.5 26.6-0.1 29.2 0.5 + 12SEP2001 19.1-1.3 24.2-0.7 26.6-0.2 29.1 0.4 + 19SEP2001 19.4-1.0 24.2-0.6 26.5-0.2 29.2 0.5 + 26SEP2001 19.6-0.9 24.3-0.6 26.5-0.2 29.1 0.4 + 03OCT2001 19.2-1.4 24.4-0.5 26.5-0.2 28.9 0.3 + 10OCT2001 19.6-1.1 24.4-0.5 26.5-0.2 29.0 0.4 + 17OCT2001 19.4-1.4 24.5-0.4 26.6 0.0 29.0 0.3 + 24OCT2001 19.6-1.4 24.5-0.4 26.6 0.0 29.1 0.4 + 31OCT2001 19.9-1.3 24.5-0.5 26.6 0.0 28.9 0.3 + 07NOV2001 20.3-1.1 24.3-0.7 26.6-0.1 29.1 0.5 + 14NOV2001 20.1-1.5 24.3-0.7 26.5-0.1 29.0 0.4 + 21NOV2001 20.6-1.2 24.3-0.7 26.3-0.3 28.8 0.2 + 28NOV2001 21.4-0.7 24.4-0.6 26.3-0.3 28.7 0.2 + 05DEC2001 21.4-1.0 24.5-0.6 26.1-0.5 28.6 0.1 + 12DEC2001 21.6-1.1 24.5-0.7 26.1-0.4 28.6 0.1 + 19DEC2001 22.0-0.9 24.6-0.5 26.2-0.4 28.5 0.0 + 26DEC2001 22.5-0.8 24.8-0.5 26.2-0.3 28.6 0.2 + 02JAN2002 23.2-0.5 24.8-0.7 26.2-0.4 28.6 0.2 + 09JAN2002 23.3-0.8 25.0-0.5 26.5-0.1 28.8 0.5 + 16JAN2002 23.5-1.0 25.0-0.7 26.4-0.1 28.9 0.6 + 23JAN2002 23.8-1.1 25.3-0.5 26.6 0.0 28.9 0.6 + 30JAN2002 24.3-0.9 25.5-0.5 26.7 0.1 28.7 0.6 + 06FEB2002 25.4-0.2 26.0-0.2 26.9 0.3 28.8 0.7 + 13FEB2002 25.9-0.1 26.2-0.2 27.0 0.3 28.9 0.8 + 20FEB2002 26.3 0.1 26.4-0.1 26.8 0.0 28.6 0.5 + 27FEB2002 27.4 1.1 26.7 0.0 27.1 0.1 28.6 0.5 + 06MAR2002 27.1 0.8 27.1 0.2 27.2 0.1 28.5 0.4 + 13MAR2002 27.6 1.2 27.2 0.1 27.3 0.1 28.6 0.4 + 20MAR2002 27.8 1.4 27.3 0.1 27.4 0.1 28.8 0.6 + 27MAR2002 27.4 1.3 27.4 0.2 27.4 0.0 28.7 0.5 + 03APR2002 27.1 1.2 27.6 0.2 27.7 0.2 28.8 0.5 + 10APR2002 27.1 1.5 27.8 0.4 28.0 0.3 29.0 0.6 + 17APR2002 26.3 0.9 27.6 0.1 27.9 0.2 29.1 0.6 + 24APR2002 25.4 0.3 27.3 0.0 28.0 0.2 29.3 0.7 + 01MAY2002 25.4 0.6 27.4 0.1 28.0 0.2 29.2 0.6 + 08MAY2002 25.0 0.5 27.3 0.1 28.0 0.2 29.2 0.5 + 15MAY2002 24.5 0.2 27.2 0.1 28.0 0.1 29.4 0.6 + 22MAY2002 24.4 0.5 27.1 0.2 28.3 0.4 29.6 0.8 + 29MAY2002 24.5 0.9 27.4 0.5 28.4 0.7 29.7 0.9 + 05JUN2002 23.5 0.2 27.3 0.6 28.6 0.9 29.8 1.0 + 12JUN2002 22.7-0.3 27.1 0.6 28.6 0.9 29.7 0.9 + 19JUN2002 22.1-0.6 27.0 0.6 28.4 0.8 29.6 0.8 + 26JUN2002 22.0-0.4 26.9 0.8 28.2 0.7 29.4 0.6 + 03JUL2002 21.8-0.3 26.6 0.6 28.0 0.6 29.4 0.6 + 10JUL2002 21.1-0.8 26.3 0.5 28.0 0.7 29.4 0.6 + 17JUL2002 21.2-0.4 26.0 0.4 28.0 0.8 29.5 0.7 + 24JUL2002 20.5-0.8 25.7 0.2 27.9 0.8 29.5 0.8 + 31JUL2002 20.3-0.8 25.5 0.2 27.9 0.9 29.6 0.9 + 07AUG2002 20.0-0.9 25.3 0.1 27.8 0.9 29.4 0.7 + 14AUG2002 20.3-0.4 25.5 0.5 27.8 0.9 29.4 0.7 + 21AUG2002 19.8-0.8 25.5 0.5 27.8 1.0 29.3 0.7 + 28AUG2002 19.8-0.7 25.6 0.7 27.8 1.0 29.4 0.7 + 04SEP2002 19.3-1.2 25.4 0.5 27.7 0.9 29.3 0.7 + 11SEP2002 20.2-0.2 25.5 0.6 27.8 1.0 29.4 0.7 + 18SEP2002 20.1-0.3 25.5 0.7 27.9 1.2 29.5 0.9 + 25SEP2002 20.1-0.4 25.7 0.8 27.9 1.2 29.5 0.8 + 02OCT2002 20.1-0.5 25.7 0.8 28.0 1.3 29.5 0.8 + 09OCT2002 20.7 0.0 25.6 0.7 27.9 1.2 29.4 0.7 + 16OCT2002 21.7 0.9 25.7 0.8 27.9 1.2 29.4 0.7 + 23OCT2002 21.6 0.6 26.0 1.1 28.2 1.6 29.8 1.2 + 30OCT2002 21.9 0.7 26.3 1.4 28.3 1.7 29.9 1.2 + 06NOV2002 22.0 0.6 26.2 1.3 28.2 1.6 29.8 1.2 + 13NOV2002 21.9 0.4 26.3 1.4 28.3 1.7 29.9 1.3 + 20NOV2002 22.5 0.7 26.5 1.5 28.3 1.7 29.9 1.3 + 27NOV2002 22.6 0.6 26.4 1.4 28.2 1.6 29.7 1.2 + 04DEC2002 23.0 0.7 26.6 1.6 28.2 1.6 29.6 1.0 + 11DEC2002 23.5 0.9 26.5 1.4 28.1 1.5 29.4 1.0 + 18DEC2002 23.3 0.4 26.5 1.3 28.1 1.5 29.4 1.0 + 25DEC2002 23.5 0.2 26.3 1.0 28.0 1.4 29.5 1.1 + 01JAN2003 24.2 0.6 26.6 1.2 28.1 1.5 29.4 1.1 + 08JAN2003 23.9-0.1 26.3 0.8 27.9 1.3 29.2 0.9 + 15JAN2003 24.1-0.3 26.3 0.7 27.7 1.2 29.3 1.0 + 22JAN2003 24.4-0.4 26.5 0.7 27.7 1.1 29.3 1.0 + 29JAN2003 24.9-0.3 26.3 0.3 27.5 0.8 29.1 0.9 + 05FEB2003 25.3-0.3 26.4 0.3 27.3 0.6 28.9 0.7 + 12FEB2003 25.7-0.3 26.6 0.3 27.4 0.7 28.9 0.9 + 19FEB2003 26.2 0.0 27.0 0.6 27.7 0.9 29.1 1.0 + 26FEB2003 26.0-0.3 26.8 0.1 27.6 0.7 29.2 1.1 + 05MAR2003 25.7-0.7 27.0 0.2 27.6 0.6 29.0 0.9 + 12MAR2003 25.7-0.8 27.2 0.1 27.7 0.6 29.0 0.8 + 19MAR2003 26.5 0.1 27.6 0.4 28.0 0.8 29.1 0.9 + 26MAR2003 25.5-0.7 27.4 0.2 27.9 0.5 29.0 0.7 + 02APR2003 25.7-0.3 27.2-0.1 27.8 0.3 28.9 0.6 + 09APR2003 24.8-0.9 27.3-0.1 27.8 0.2 29.0 0.6 + 16APR2003 24.3-1.1 27.3-0.2 27.9 0.1 28.9 0.5 + 23APR2003 23.6-1.6 27.2-0.2 27.8 0.0 28.9 0.4 + 30APR2003 23.2-1.6 26.5-0.8 27.7-0.1 28.9 0.3 + 07MAY2003 23.0-1.6 26.3-0.9 27.4-0.4 28.9 0.2 + 14MAY2003 22.5-1.8 26.2-0.9 27.3-0.5 28.8 0.1 + 21MAY2003 22.3-1.7 26.0-1.0 27.3-0.6 28.8 0.1 + 28MAY2003 22.0-1.6 26.0-0.9 27.4-0.4 29.0 0.2 + 04JUN2003 21.9-1.4 25.7-0.9 27.4-0.3 29.0 0.2 + 11JUN2003 21.6-1.5 25.7-0.8 27.4-0.2 29.1 0.2 + 18JUN2003 21.1-1.6 25.9-0.5 27.5-0.1 29.1 0.3 + 25JUN2003 21.6-0.8 25.9-0.2 27.6 0.0 29.1 0.3 + 02JUL2003 21.4-0.7 25.9-0.1 27.5 0.1 29.2 0.4 + 09JUL2003 21.1-0.8 25.9 0.0 27.6 0.3 29.2 0.4 + 16JUL2003 20.8-0.8 25.8 0.1 27.5 0.3 29.1 0.3 + 23JUL2003 20.2-1.2 25.7 0.2 27.3 0.2 29.1 0.3 + 30JUL2003 20.3-0.9 25.5 0.2 27.1 0.1 29.0 0.3 + 06AUG2003 20.2-0.8 25.3 0.1 27.0 0.0 29.0 0.3 + 13AUG2003 20.0-0.8 25.0 0.0 26.9 0.1 29.1 0.5 + 20AUG2003 20.6 0.0 24.9-0.1 26.7-0.1 29.0 0.4 + 27AUG2003 20.0-0.5 24.8-0.2 26.7-0.1 29.0 0.3 + 03SEP2003 20.4-0.1 25.0 0.1 26.9 0.1 29.0 0.3 + 10SEP2003 19.9-0.5 24.8-0.1 26.8 0.0 28.9 0.2 + 17SEP2003 19.5-0.8 25.0 0.1 26.9 0.2 28.9 0.3 + 24SEP2003 20.5 0.0 25.0 0.2 27.1 0.4 29.1 0.5 + 01OCT2003 20.1-0.5 25.3 0.4 27.3 0.6 29.1 0.4 + 08OCT2003 20.9 0.2 25.5 0.6 27.4 0.7 29.1 0.5 + 15OCT2003 20.9 0.1 25.2 0.3 27.1 0.4 29.1 0.5 + 22OCT2003 21.5 0.6 25.3 0.3 27.1 0.4 29.3 0.6 + 29OCT2003 21.4 0.3 25.4 0.4 27.2 0.5 29.3 0.7 + 05NOV2003 21.6 0.3 25.3 0.4 27.0 0.4 29.4 0.7 + 12NOV2003 21.8 0.3 25.3 0.4 26.9 0.3 29.3 0.7 + 19NOV2003 22.0 0.3 25.4 0.4 27.1 0.4 29.3 0.7 + 26NOV2003 22.3 0.3 25.5 0.5 27.2 0.5 29.2 0.6 + 03DEC2003 22.5 0.2 25.6 0.5 27.1 0.5 29.2 0.6 + 10DEC2003 22.9 0.3 25.5 0.4 27.0 0.4 29.1 0.6 + 17DEC2003 23.0 0.1 25.4 0.3 26.8 0.3 29.0 0.5 + 24DEC2003 23.0-0.2 25.6 0.3 26.8 0.2 28.9 0.4 + 31DEC2003 23.8 0.2 25.7 0.4 26.7 0.1 28.7 0.4 + 07JAN2004 24.2 0.2 25.7 0.2 26.6 0.0 28.7 0.3 + 14JAN2004 24.6 0.2 25.9 0.3 26.6 0.0 28.9 0.6 + 21JAN2004 24.8 0.0 26.0 0.3 27.0 0.4 28.9 0.7 + 28JAN2004 24.7-0.4 26.1 0.1 26.9 0.2 28.8 0.6 + 04FEB2004 25.0-0.5 26.0-0.1 26.8 0.1 28.7 0.6 + 11FEB2004 25.4-0.5 26.4 0.1 26.8 0.1 28.5 0.4 + 18FEB2004 26.1 0.0 26.7 0.2 26.9 0.1 28.5 0.4 + 25FEB2004 26.3 0.1 26.7 0.1 27.0 0.1 28.5 0.4 + 03MAR2004 25.8-0.6 26.7-0.1 26.9-0.1 28.5 0.4 + 10MAR2004 25.4-1.0 27.1 0.1 26.9-0.2 28.3 0.1 + 17MAR2004 25.6-0.8 27.4 0.2 27.1-0.1 28.3 0.1 + 24MAR2004 26.0-0.3 27.4 0.1 27.3-0.1 28.4 0.2 + 31MAR2004 26.1 0.1 27.4 0.1 27.5 0.0 28.5 0.2 + 07APR2004 26.0 0.2 27.4 0.0 27.7 0.1 28.6 0.2 + 14APR2004 25.2-0.3 27.4 0.0 27.8 0.1 28.7 0.2 + 21APR2004 24.8-0.4 27.4 0.0 28.0 0.2 28.8 0.3 + 28APR2004 24.1-0.9 27.2-0.1 28.1 0.3 28.9 0.3 + 05MAY2004 23.6-1.0 26.7-0.5 27.9 0.1 29.0 0.3 + 12MAY2004 23.1-1.3 26.6-0.6 28.0 0.1 29.0 0.3 + 19MAY2004 22.8-1.3 26.8-0.3 28.2 0.4 29.2 0.4 + 26MAY2004 22.7-1.0 26.7-0.2 28.1 0.3 29.4 0.6 + 02JUN2004 22.1-1.4 26.7 0.0 28.1 0.3 29.2 0.4 + 09JUN2004 21.7-1.4 26.6 0.0 28.0 0.3 29.2 0.4 + 16JUN2004 21.5-1.3 26.4-0.1 27.8 0.1 29.2 0.4 + 23JUN2004 21.3-1.2 26.0-0.3 27.5 0.0 29.1 0.2 + 30JUN2004 21.0-1.2 25.6-0.4 27.3-0.1 29.1 0.3 + 07JUL2004 20.8-1.2 25.4-0.4 27.6 0.3 29.4 0.6 + 14JUL2004 20.9-0.8 25.5-0.2 27.7 0.4 29.4 0.6 + 21JUL2004 20.7-0.7 25.2-0.3 27.7 0.6 29.4 0.7 + 28JUL2004 20.3-0.9 25.4 0.0 27.9 0.8 29.4 0.6 + 04AUG2004 19.9-1.1 25.2 0.0 27.8 0.8 29.4 0.7 + 11AUG2004 19.7-1.1 25.1 0.0 27.6 0.7 29.2 0.6 + 18AUG2004 19.6-1.0 24.9 0.0 27.4 0.6 29.2 0.5 + 25AUG2004 19.2-1.4 24.9 0.0 27.4 0.7 29.3 0.7 + 01SEP2004 20.1-0.4 25.0 0.1 27.4 0.7 29.6 0.9 + 08SEP2004 19.8-0.6 25.0 0.1 27.4 0.6 29.6 0.9 + 15SEP2004 19.8-0.5 25.1 0.3 27.5 0.7 29.6 0.9 + 22SEP2004 20.4-0.1 25.3 0.4 27.6 0.9 29.6 0.9 + 29SEP2004 20.5-0.1 25.4 0.5 27.5 0.8 29.5 0.8 + 06OCT2004 20.8 0.1 25.2 0.4 27.4 0.7 29.5 0.8 + 13OCT2004 20.5-0.2 25.2 0.3 27.3 0.6 29.4 0.8 + 20OCT2004 21.4 0.5 25.4 0.5 27.4 0.7 29.6 1.0 + 27OCT2004 21.3 0.2 25.4 0.5 27.4 0.7 29.7 1.0 + 03NOV2004 21.5 0.3 25.4 0.5 27.3 0.6 29.6 1.0 + 10NOV2004 22.0 0.5 25.5 0.5 27.3 0.6 29.5 0.9 + 17NOV2004 22.2 0.5 25.5 0.5 27.3 0.7 29.6 1.0 + 24NOV2004 21.9 0.0 25.4 0.4 27.3 0.7 29.5 1.0 + 01DEC2004 22.4 0.2 25.6 0.6 27.4 0.8 29.4 0.9 + 08DEC2004 22.3-0.2 25.7 0.6 27.4 0.8 29.4 0.8 + 15DEC2004 22.9 0.2 25.8 0.6 27.3 0.7 29.2 0.8 + 22DEC2004 22.9-0.2 25.9 0.6 27.3 0.7 29.5 1.1 + 29DEC2004 23.6 0.2 25.8 0.5 27.2 0.6 29.5 1.1 + 05JAN2005 23.7-0.2 25.7 0.3 27.1 0.5 29.3 0.9 + 12JAN2005 24.2 0.0 25.9 0.3 27.1 0.5 29.2 0.9 + 19JAN2005 25.0 0.3 26.0 0.3 27.1 0.5 29.2 0.9 + 26JAN2005 24.9-0.1 26.0 0.1 27.1 0.5 29.2 1.0 + 02FEB2005 24.6-0.8 25.9-0.2 26.9 0.2 29.0 0.8 + 09FEB2005 25.1-0.6 26.2-0.1 27.0 0.3 28.8 0.7 + 16FEB2005 25.8-0.3 26.4 0.0 27.0 0.3 28.8 0.7 + 23FEB2005 25.7-0.5 26.3-0.3 27.0 0.1 28.7 0.6 + 02MAR2005 25.2-1.1 26.2-0.6 27.0 0.0 28.8 0.6 + 09MAR2005 25.9-0.5 26.7-0.2 27.2 0.1 28.8 0.6 + 16MAR2005 25.9-0.6 27.3 0.2 27.6 0.4 29.0 0.8 + 23MAR2005 25.0-1.3 27.3 0.0 27.9 0.5 28.9 0.7 + 30MAR2005 24.9-1.1 27.4 0.1 28.0 0.5 29.0 0.7 + 06APR2005 24.8-1.0 27.4 0.0 28.0 0.4 28.9 0.5 + 13APR2005 24.6-0.9 27.7 0.2 27.9 0.1 28.8 0.3 + 20APR2005 24.8-0.5 27.9 0.5 28.2 0.4 28.9 0.4 + 27APR2005 25.4 0.4 28.1 0.8 28.3 0.5 29.1 0.5 + 04MAY2005 25.2 0.5 28.1 0.9 28.3 0.4 29.1 0.4 + 11MAY2005 24.6 0.2 27.6 0.5 28.2 0.4 29.1 0.3 + 18MAY2005 24.5 0.4 27.4 0.3 28.2 0.4 29.3 0.5 + 25MAY2005 23.5-0.3 27.1 0.2 28.2 0.4 29.2 0.4 + 01JUN2005 23.0-0.5 26.8 0.0 28.1 0.3 29.2 0.4 + 08JUN2005 22.6-0.5 26.9 0.3 28.1 0.4 29.2 0.4 + 15JUN2005 22.3-0.5 26.8 0.3 28.1 0.4 29.2 0.4 + 22JUN2005 22.2-0.3 26.9 0.6 28.0 0.5 29.1 0.3 + 29JUN2005 21.6-0.7 26.7 0.6 28.0 0.5 29.1 0.3 + 06JUL2005 21.5-0.5 26.3 0.4 27.8 0.4 29.2 0.4 + 13JUL2005 21.5-0.3 26.2 0.5 27.6 0.3 29.1 0.3 + 20JUL2005 20.7-0.8 25.8 0.2 27.3 0.2 29.0 0.2 + 27JUL2005 20.8-0.5 25.4 0.0 27.1 0.1 28.9 0.1 + 03AUG2005 20.8-0.2 25.2-0.1 26.9-0.1 28.8 0.1 + 10AUG2005 20.6-0.2 25.2 0.1 26.9 0.0 28.7 0.0 + 17AUG2005 20.4-0.2 25.4 0.4 27.0 0.2 28.9 0.2 + 24AUG2005 20.8 0.3 25.2 0.3 26.9 0.1 28.9 0.3 + 31AUG2005 20.4-0.1 24.8-0.1 26.7-0.1 28.9 0.2 + 07SEP2005 20.0-0.5 24.5-0.3 26.5-0.3 28.7 0.1 + 14SEP2005 19.7-0.7 24.5-0.4 26.4-0.3 28.7 0.0 + 21SEP2005 19.6-0.9 24.7-0.2 26.8 0.1 28.9 0.3 + 28SEP2005 19.6-0.9 24.5-0.4 26.7 0.0 28.9 0.3 + 05OCT2005 19.4-1.2 24.6-0.3 26.9 0.2 29.0 0.3 + 12OCT2005 20.0-0.8 24.9 0.0 26.9 0.2 28.9 0.3 + 19OCT2005 19.8-1.1 24.7-0.2 26.7 0.0 28.8 0.2 + 26OCT2005 19.9-1.2 24.7-0.2 26.6-0.1 28.8 0.1 + 02NOV2005 19.8-1.4 24.3-0.7 26.5-0.2 28.7 0.1 + 09NOV2005 20.2-1.2 24.2-0.7 26.3-0.4 28.6 0.0 + 16NOV2005 21.0-0.6 24.3-0.7 26.5-0.2 28.6 0.0 + 23NOV2005 21.2-0.7 24.3-0.7 26.3-0.3 28.7 0.1 + 30NOV2005 21.2-0.9 24.2-0.9 26.1-0.5 28.6 0.1 + 07DEC2005 21.4-1.1 24.1-1.0 26.0-0.6 28.6 0.0 + 14DEC2005 21.8-0.9 24.0-1.1 25.8-0.7 28.5 0.0 + 21DEC2005 23.1 0.1 24.3-0.9 25.8-0.8 28.1-0.3 + 28DEC2005 23.3-0.2 24.7-0.6 25.9-0.7 28.0-0.4 + 04JAN2006 23.4-0.4 25.0-0.5 25.8-0.7 27.9-0.5 + 11JAN2006 24.2 0.0 25.0-0.6 25.7-0.9 27.8-0.5 + 18JAN2006 24.3-0.2 24.8-0.9 25.5-1.1 27.6-0.7 + 25JAN2006 24.8-0.1 25.1-0.8 25.5-1.1 27.4-0.8 + 01FEB2006 25.0-0.3 25.5-0.6 25.8-0.9 27.4-0.7 + 08FEB2006 25.9 0.2 25.8-0.4 26.0-0.7 27.3-0.9 + 15FEB2006 27.1 1.0 26.3 0.0 26.1-0.6 27.3-0.8 + 22FEB2006 26.8 0.6 26.4-0.2 26.3-0.5 27.4-0.7 + 01MAR2006 27.0 0.7 26.2-0.6 26.1-0.9 27.4-0.7 + 08MAR2006 26.9 0.5 26.5-0.4 26.4-0.7 27.6-0.6 + 15MAR2006 26.7 0.2 26.5-0.6 26.5-0.7 27.7-0.5 + 22MAR2006 26.6 0.3 26.6-0.6 26.7-0.6 28.0-0.3 + 29MAR2006 26.0-0.1 26.8-0.5 27.0-0.5 28.1-0.2 + 05APR2006 24.9-0.9 27.1-0.3 27.3-0.3 28.1-0.2 + 12APR2006 24.0-1.5 27.6 0.1 27.7 0.0 28.3-0.1 + 19APR2006 23.4-2.0 27.2-0.2 27.7-0.1 28.4-0.1 + 26APR2006 23.1-1.9 27.2-0.2 27.7-0.1 28.5 0.0 + 03MAY2006 23.9-0.8 27.2-0.1 27.7-0.1 28.6-0.1 + 10MAY2006 24.1-0.4 27.1 0.0 27.8 0.0 28.8 0.1 + 17MAY2006 23.8-0.3 27.1 0.0 28.1 0.2 29.1 0.3 + 24MAY2006 23.5-0.3 26.9 0.0 28.0 0.2 29.0 0.2 + 31MAY2006 23.4-0.1 26.8 0.0 28.0 0.3 29.2 0.4 + 07JUN2006 22.6-0.6 26.6 0.0 28.0 0.3 29.2 0.4 + 14JUN2006 22.8-0.1 26.5 0.1 27.9 0.3 29.2 0.3 + 21JUN2006 22.5-0.1 26.3 0.0 27.8 0.2 29.2 0.3 + 28JUN2006 22.4 0.0 26.1 0.0 27.6 0.1 29.0 0.2 + 05JUL2006 22.2 0.1 26.0 0.1 27.5 0.1 29.0 0.1 + 12JUL2006 22.0 0.2 25.8 0.0 27.3 0.0 29.0 0.2 + 19JUL2006 22.3 0.8 25.8 0.2 27.3 0.1 29.1 0.3 + 26JUL2006 22.0 0.7 25.7 0.3 27.3 0.2 29.2 0.4 + 02AUG2006 21.9 0.8 25.5 0.3 27.2 0.2 29.2 0.5 + 09AUG2006 21.7 0.8 25.3 0.2 27.1 0.2 29.1 0.4 + 16AUG2006 21.6 0.9 25.4 0.4 27.2 0.4 29.2 0.6 + 23AUG2006 21.5 1.0 25.5 0.5 27.3 0.5 29.3 0.6 + 30AUG2006 21.1 0.6 25.6 0.6 27.3 0.5 29.3 0.7 + 06SEP2006 21.6 1.2 25.6 0.7 27.4 0.6 29.4 0.8 + 13SEP2006 21.3 0.9 25.8 0.9 27.3 0.6 29.4 0.7 + 20SEP2006 21.2 0.8 25.9 1.1 27.4 0.7 29.4 0.8 + 27SEP2006 21.7 1.1 25.7 0.8 27.2 0.5 29.3 0.7 + 04OCT2006 21.7 1.0 25.7 0.8 27.2 0.5 29.2 0.6 + 11OCT2006 22.2 1.4 26.1 1.2 27.5 0.8 29.4 0.8 + 18OCT2006 22.4 1.5 26.0 1.1 27.5 0.8 29.5 0.8 + 25OCT2006 22.7 1.6 26.1 1.1 27.6 0.9 29.6 1.0 + 01NOV2006 22.4 1.2 25.9 1.0 27.6 0.9 29.5 0.9 + 08NOV2006 22.5 1.1 25.9 0.9 27.6 0.9 29.6 1.0 + 15NOV2006 22.6 1.0 26.1 1.1 27.8 1.2 29.7 1.1 + 22NOV2006 22.7 0.8 26.3 1.2 27.8 1.2 29.6 1.1 + 29NOV2006 23.0 0.9 26.1 1.1 27.8 1.2 29.6 1.0 + 06DEC2006 22.9 0.5 26.1 1.1 27.9 1.3 29.6 1.1 + 13DEC2006 22.9 0.2 26.3 1.2 27.8 1.2 29.5 1.0 + 20DEC2006 23.7 0.6 26.5 1.3 27.7 1.2 29.4 1.0 + 27DEC2006 24.0 0.6 26.6 1.3 27.7 1.1 29.4 1.0 + 03JAN2007 24.3 0.5 26.4 0.9 27.5 0.9 29.2 0.8 + 10JAN2007 24.9 0.7 26.7 1.1 27.5 0.9 29.1 0.8 + 17JAN2007 25.0 0.4 26.4 0.7 27.2 0.6 28.8 0.6 + 24JAN2007 25.2 0.3 26.5 0.7 27.1 0.5 28.7 0.5 + 31JAN2007 25.6 0.3 26.6 0.6 27.0 0.3 28.7 0.5 + 07FEB2007 26.0 0.4 26.6 0.4 26.9 0.2 28.6 0.4 + 14FEB2007 26.3 0.3 26.3-0.1 26.7 0.0 28.6 0.6 + 21FEB2007 26.4 0.3 26.4-0.1 26.8-0.1 28.6 0.5 + 28FEB2007 25.7-0.6 26.4-0.3 26.9 0.0 28.5 0.4 + 07MAR2007 25.8-0.5 26.6-0.3 26.9-0.2 28.5 0.4 + 14MAR2007 26.0-0.5 27.3 0.2 27.3 0.1 28.6 0.4 + 21MAR2007 25.6-0.8 26.8-0.4 27.2-0.1 28.5 0.3 + 28MAR2007 25.1-1.0 26.6-0.7 27.4 0.0 28.5 0.2 + 04APR2007 24.5-1.4 26.7-0.7 27.5 0.0 28.7 0.3 + 11APR2007 24.4-1.2 27.2-0.2 27.8 0.1 28.7 0.3 + 18APR2007 23.9-1.4 27.4-0.1 27.9 0.2 28.7 0.2 + 25APR2007 24.1-1.0 27.3-0.1 27.8 0.0 28.7 0.1 + 02MAY2007 23.6-1.2 26.9-0.4 27.7-0.1 28.6 0.0 + 09MAY2007 23.0-1.5 26.3-0.9 27.4-0.4 28.7 0.0 + 16MAY2007 22.9-1.3 26.3-0.8 27.5-0.4 28.8 0.1 + 23MAY2007 22.3-1.6 26.3-0.6 27.7-0.1 29.0 0.2 + 30MAY2007 21.8-1.8 26.1-0.7 27.6-0.2 29.0 0.2 + 06JUN2007 21.6-1.6 25.8-0.9 27.6-0.1 29.0 0.2 + 13JUN2007 22.2-0.7 26.1-0.4 27.7 0.1 29.1 0.3 + 20JUN2007 21.8-0.8 25.9-0.5 27.6 0.0 28.9 0.1 + 27JUN2007 20.7-1.7 25.5-0.6 27.3-0.1 28.8 0.0 + 04JUL2007 21.2-0.9 25.3-0.6 27.0-0.4 28.7-0.1 + 11JUL2007 20.1-1.7 24.9-0.9 26.8-0.5 28.8 0.0 + 18JUL2007 19.9-1.7 24.8-0.8 26.9-0.3 28.9 0.1 + 25JUL2007 20.3-1.0 24.5-1.0 26.6-0.5 28.9 0.1 + 01AUG2007 19.6-1.5 24.1-1.2 26.4-0.6 28.7 0.0 + 08AUG2007 19.3-1.6 23.8-1.3 26.2-0.7 28.6-0.1 + 15AUG2007 19.7-1.0 24.0-1.0 26.3-0.6 28.6-0.1 + 22AUG2007 19.2-1.4 23.8-1.2 26.1-0.7 28.5-0.1 + 29AUG2007 18.4-2.1 23.7-1.3 26.1-0.7 28.4-0.2 + 05SEP2007 19.4-1.1 23.7-1.2 26.0-0.8 28.3-0.4 + 12SEP2007 18.6-1.8 23.6-1.3 25.8-1.0 28.0-0.6 + 19SEP2007 18.5-2.0 23.6-1.2 25.8-0.9 28.0-0.7 + 26SEP2007 18.4-2.1 23.2-1.7 25.6-1.1 28.0-0.7 + 03OCT2007 18.3-2.3 23.2-1.7 25.4-1.3 27.9-0.7 + 10OCT2007 18.8-1.9 23.3-1.6 24.9-1.8 27.7-1.0 + 17OCT2007 18.6-2.2 23.5-1.4 25.3-1.4 27.9-0.7 + 24OCT2007 19.2-1.8 23.5-1.4 25.3-1.4 27.8-0.8 + 31OCT2007 19.7-1.5 23.2-1.8 25.2-1.5 27.8-0.8 + 07NOV2007 19.3-2.1 23.0-2.0 25.0-1.6 27.5-1.1 + 14NOV2007 19.2-2.3 23.2-1.7 25.2-1.5 27.3-1.3 + 21NOV2007 19.8-2.0 23.2-1.8 24.9-1.7 27.1-1.5 + 28NOV2007 19.8-2.2 23.3-1.8 25.1-1.6 27.4-1.1 + 05DEC2007 20.6-1.8 23.5-1.5 25.1-1.5 27.5-1.0 + 12DEC2007 20.3-2.4 23.3-1.8 24.9-1.7 27.5-1.0 + 19DEC2007 21.3-1.6 23.7-1.5 25.0-1.6 27.2-1.3 + 26DEC2007 21.9-1.4 23.7-1.6 24.9-1.6 27.0-1.4 + 02JAN2008 22.6-1.1 23.9-1.5 25.0-1.6 26.8-1.6 + 09JAN2008 23.3-0.8 24.0-1.5 24.8-1.8 26.6-1.7 + 16JAN2008 24.1-0.4 24.0-1.6 24.6-2.0 26.6-1.7 + 23JAN2008 24.1-0.7 24.1-1.7 24.4-2.2 26.4-1.8 + 30JAN2008 25.1-0.1 24.7-1.3 24.9-1.7 26.5-1.7 + 06FEB2008 25.9 0.3 24.8-1.4 24.6-2.1 26.4-1.8 + 13FEB2008 25.9-0.1 24.7-1.7 24.5-2.2 26.4-1.7 + 20FEB2008 26.7 0.6 25.1-1.4 24.9-2.0 26.4-1.7 + 27FEB2008 27.2 0.9 25.8-0.9 25.3-1.6 26.3-1.8 + 05MAR2008 27.3 1.0 26.3-0.6 25.7-1.3 26.6-1.5 + 12MAR2008 27.2 0.7 26.5-0.5 26.0-1.1 26.7-1.4 + 19MAR2008 27.3 0.9 26.7-0.5 26.2-1.1 26.8-1.4 + 26MAR2008 27.1 0.9 26.8-0.5 26.3-1.0 27.0-1.2 + 02APR2008 27.2 1.2 26.9-0.4 26.5-1.0 27.2-1.2 + 09APR2008 25.9 0.2 27.3-0.2 26.7-1.0 27.3-1.1 + 16APR2008 25.5 0.0 27.3-0.2 26.9-0.9 27.4-1.1 + 23APR2008 25.5 0.4 27.1-0.3 26.9-0.9 27.5-1.1 + 30APR2008 24.5-0.3 27.3 0.0 27.1-0.7 27.7-0.9 + 07MAY2008 24.1-0.5 26.8-0.4 27.0-0.9 27.7-1.0 + 14MAY2008 24.5 0.2 27.1-0.1 27.1-0.7 27.8-0.9 + 21MAY2008 24.1 0.1 27.2 0.2 27.3-0.5 28.0-0.7 + 28MAY2008 24.1 0.5 27.2 0.4 27.3-0.5 28.0-0.8 + 04JUN2008 24.0 0.7 27.0 0.3 27.3-0.4 28.0-0.8 + 11JUN2008 23.7 0.7 26.7 0.2 27.2-0.5 28.0-0.8 + 18JUN2008 23.3 0.6 26.3-0.1 27.1-0.5 28.1-0.8 + 25JUN2008 23.0 0.6 26.2 0.0 27.1-0.4 28.1-0.7 + 02JUL2008 22.7 0.5 26.3 0.4 27.2-0.2 28.2-0.6 + 09JUL2008 22.7 0.8 26.3 0.5 27.3-0.1 28.3-0.5 + 16JUL2008 22.7 1.1 26.2 0.5 27.3 0.0 28.3-0.5 + 23JUL2008 22.6 1.2 25.9 0.5 27.1 0.0 28.2-0.6 + 30JUL2008 22.2 1.1 25.9 0.5 27.1 0.0 28.2-0.5 + 06AUG2008 22.0 1.1 25.9 0.7 27.0 0.1 28.2-0.5 + 13AUG2008 22.5 1.8 25.8 0.8 27.0 0.2 28.2-0.5 + 20AUG2008 21.1 0.5 25.5 0.5 26.7-0.1 28.1-0.6 + 27AUG2008 21.3 0.8 25.3 0.4 26.6-0.2 28.1-0.6 + 03SEP2008 21.3 0.8 25.3 0.4 26.6-0.2 28.1-0.6 + 10SEP2008 21.0 0.6 25.2 0.3 26.6-0.2 28.1-0.6 + 17SEP2008 21.1 0.8 24.9 0.1 26.4-0.4 28.1-0.6 + 24SEP2008 21.3 0.8 25.1 0.2 26.4-0.4 28.1-0.6 + 01OCT2008 21.0 0.4 24.7-0.2 26.2-0.5 28.3-0.4 + 08OCT2008 20.6-0.1 24.9 0.0 26.3-0.4 28.3-0.4 + 15OCT2008 20.7-0.1 24.9-0.1 26.4-0.3 28.3-0.4 + 22OCT2008 21.0 0.0 24.8-0.2 26.3-0.4 28.2-0.4 + 29OCT2008 20.5-0.7 24.6-0.3 26.4-0.2 28.2-0.4 + 05NOV2008 21.3 0.0 24.6-0.3 26.3-0.3 28.2-0.4 + 12NOV2008 21.8 0.3 24.9-0.1 26.5-0.2 28.1-0.5 + 19NOV2008 21.5-0.2 24.9-0.1 26.3-0.3 28.0-0.6 + 26NOV2008 21.2-0.8 24.6-0.4 26.1-0.5 27.9-0.6 + 03DEC2008 21.4-0.9 24.8-0.3 26.0-0.6 27.9-0.6 + 10DEC2008 22.1-0.4 24.6-0.5 25.8-0.8 27.7-0.7 + 17DEC2008 22.6-0.3 24.6-0.6 25.8-0.8 27.7-0.8 + 24DEC2008 22.8-0.5 24.5-0.8 25.6-1.0 27.5-0.9 + 31DEC2008 23.3-0.3 24.4-1.0 25.4-1.2 27.5-0.9 + 07JAN2009 23.4-0.6 24.5-0.9 25.4-1.2 27.4-1.0 + 14JAN2009 24.0-0.3 24.8-0.8 25.4-1.1 27.4-0.9 + 21JAN2009 25.3 0.5 25.5-0.2 25.8-0.8 27.4-0.8 + 28JAN2009 25.3 0.2 25.5-0.4 25.7-1.0 27.3-0.9 + 04FEB2009 25.1-0.4 25.4-0.7 25.7-0.9 27.2-0.9 + 11FEB2009 25.8 0.0 25.6-0.6 25.9-0.8 27.3-0.8 + 18FEB2009 26.3 0.2 26.1-0.4 26.2-0.6 27.4-0.7 + 25FEB2009 26.5 0.2 26.4-0.3 26.3-0.6 27.4-0.7 + 04MAR2009 26.5 0.2 26.1-0.7 26.4-0.7 27.5-0.6 + 11MAR2009 26.1-0.3 26.1-0.9 26.7-0.5 27.7-0.4 + 18MAR2009 26.0-0.4 26.4-0.7 26.7-0.6 27.8-0.4 + 25MAR2009 26.3 0.1 26.7-0.5 26.8-0.6 27.9-0.4 + 01APR2009 26.4 0.5 27.2-0.1 27.1-0.4 28.1-0.2 + 08APR2009 25.7 0.0 27.4 0.0 27.4-0.2 28.3-0.1 + 15APR2009 26.1 0.7 27.5 0.0 27.5-0.2 28.3-0.2 + 22APR2009 25.4 0.2 27.3-0.1 27.6-0.2 28.4-0.2 + 29APR2009 25.3 0.4 27.5 0.2 27.7-0.1 28.6 0.0 + 06MAY2009 25.3 0.7 27.6 0.4 27.9 0.1 28.8 0.1 + 13MAY2009 24.8 0.5 27.4 0.3 28.0 0.2 29.0 0.2 + 20MAY2009 24.4 0.4 27.4 0.4 28.2 0.4 29.1 0.3 + 27MAY2009 24.3 0.6 27.2 0.4 28.1 0.3 29.1 0.3 + 03JUN2009 23.7 0.4 27.1 0.4 27.9 0.2 29.0 0.2 + 10JUN2009 23.7 0.6 27.2 0.6 28.1 0.4 29.1 0.3 + 17JUN2009 23.9 1.1 27.2 0.8 28.2 0.5 29.2 0.4 + 24JUN2009 23.5 1.0 27.1 0.9 28.2 0.7 29.3 0.5 + 01JUL2009 22.9 0.7 26.9 0.9 28.2 0.7 29.3 0.5 + 08JUL2009 23.0 1.1 26.7 0.9 28.0 0.7 29.2 0.4 + 15JUL2009 22.7 1.0 26.6 1.0 28.0 0.7 29.2 0.4 + 22JUL2009 22.2 0.8 26.5 1.0 27.9 0.8 29.2 0.4 + 29JUL2009 22.1 0.9 26.2 0.8 27.7 0.6 29.1 0.4 + 05AUG2009 22.2 1.2 26.0 0.8 27.6 0.6 29.1 0.4 + 12AUG2009 21.4 0.6 25.9 0.8 27.4 0.6 29.1 0.4 + 19AUG2009 21.6 0.9 25.8 0.9 27.4 0.6 29.2 0.6 + 26AUG2009 21.5 1.0 25.9 1.0 27.6 0.8 29.3 0.7 + 02SEP2009 21.4 0.9 25.9 1.0 27.6 0.8 29.3 0.6 + 09SEP2009 21.1 0.6 25.7 0.8 27.5 0.8 29.3 0.6 + 16SEP2009 20.8 0.4 25.6 0.8 27.5 0.8 29.3 0.6 + 23SEP2009 20.5 0.0 25.6 0.7 27.4 0.7 29.2 0.6 + 30SEP2009 20.4-0.2 25.4 0.6 27.3 0.6 29.2 0.6 + 07OCT2009 20.1-0.5 25.5 0.6 27.3 0.6 29.4 0.7 + 14OCT2009 21.0 0.2 25.6 0.7 27.5 0.8 29.6 1.0 + 21OCT2009 21.2 0.3 25.8 0.8 27.7 1.0 29.8 1.2 + 28OCT2009 21.6 0.5 26.1 1.2 28.1 1.4 30.0 1.3 + 04NOV2009 21.8 0.5 26.2 1.3 28.2 1.6 29.9 1.3 + 11NOV2009 22.1 0.6 26.2 1.2 28.2 1.5 29.9 1.3 + 18NOV2009 22.2 0.5 26.2 1.2 28.2 1.6 29.8 1.2 + 25NOV2009 22.2 0.3 26.3 1.2 28.2 1.6 29.9 1.3 + 02DEC2009 22.7 0.4 26.5 1.4 28.2 1.6 29.7 1.2 + 09DEC2009 22.7 0.2 26.6 1.5 28.2 1.7 29.6 1.1 + 16DEC2009 22.6-0.2 26.7 1.5 28.3 1.8 29.7 1.2 + 23DEC2009 23.7 0.5 26.8 1.5 28.4 1.9 29.7 1.3 + 30DEC2009 24.3 0.7 26.7 1.4 28.3 1.7 29.6 1.2 + 06JAN2010 24.3 0.4 26.7 1.2 28.3 1.7 29.7 1.3 + 13JAN2010 24.6 0.3 26.7 1.1 28.2 1.6 29.6 1.3 + 20JAN2010 24.7 0.1 26.5 0.8 28.0 1.4 29.5 1.2 + 27JAN2010 25.5 0.4 26.6 0.7 27.8 1.2 29.3 1.1 + 03FEB2010 25.4 0.0 26.7 0.6 27.8 1.2 29.1 1.0 + 10FEB2010 25.7-0.2 27.0 0.7 27.9 1.2 29.0 0.9 + 17FEB2010 26.4 0.3 27.2 0.8 27.9 1.2 29.0 1.0 + 24FEB2010 26.5 0.3 27.4 0.8 28.0 1.1 29.2 1.1 + 03MAR2010 26.3-0.1 27.5 0.7 28.1 1.1 29.2 1.0 + 10MAR2010 26.0-0.4 27.5 0.5 28.3 1.2 29.3 1.1 + 17MAR2010 26.2-0.3 27.8 0.7 28.4 1.1 29.2 1.1 + 24MAR2010 26.3 0.0 27.9 0.7 28.4 1.0 29.2 0.9 + 31MAR2010 25.9-0.1 28.1 0.8 28.4 0.9 29.2 0.8 + 07APR2010 26.0 0.3 28.1 0.7 28.4 0.8 29.3 0.9 + 14APR2010 26.6 1.0 28.2 0.8 28.5 0.7 29.2 0.7 + 21APR2010 26.0 0.8 28.0 0.6 28.4 0.6 29.2 0.7 + 28APR2010 25.2 0.3 27.8 0.4 28.2 0.4 29.3 0.7 + 05MAY2010 24.8 0.2 27.7 0.5 28.0 0.2 29.1 0.4 + 12MAY2010 24.8 0.5 27.1 0.0 27.7-0.2 29.0 0.3 + 19MAY2010 24.0 0.0 26.8-0.3 27.5-0.3 29.0 0.2 + 26MAY2010 23.2-0.5 26.4-0.4 27.5-0.3 29.0 0.2 + 02JUN2010 23.4 0.0 26.1-0.6 27.3-0.5 28.8 0.0 + 09JUN2010 23.1 0.0 26.0-0.6 27.1-0.6 28.7-0.1 + 16JUN2010 22.3-0.5 25.8-0.6 27.0-0.7 28.6-0.2 + 23JUN2010 22.4-0.2 25.5-0.8 26.9-0.7 28.5-0.3 + 30JUN2010 21.6-0.7 25.3-0.8 26.7-0.8 28.3-0.5 + 07JUL2010 20.9-1.1 24.8-1.0 26.4-0.9 28.2-0.6 + 14JUL2010 20.0-1.6 24.6-1.1 26.1-1.1 28.2-0.6 + 21JUL2010 19.6-1.9 24.4-1.1 26.0-1.2 28.0-0.8 + 28JUL2010 19.5-1.7 24.0-1.4 25.6-1.4 27.8-1.0 + 04AUG2010 19.5-1.5 24.0-1.3 25.8-1.2 27.7-1.0 + 11AUG2010 19.6-1.2 24.1-1.0 25.7-1.2 27.5-1.2 + 18AUG2010 19.2-1.4 23.8-1.1 25.6-1.2 27.5-1.1 + 25AUG2010 19.2-1.4 23.7-1.3 25.2-1.6 27.1-1.5 + 01SEP2010 18.8-1.7 23.4-1.5 25.1-1.7 27.2-1.5 + 08SEP2010 19.1-1.3 23.5-1.4 25.2-1.6 27.1-1.6 + 15SEP2010 18.6-1.8 23.4-1.5 25.1-1.6 27.1-1.6 + 22SEP2010 19.3-1.2 24.0-0.8 25.1-1.6 27.1-1.6 + 29SEP2010 19.2-1.4 23.5-1.3 24.8-1.9 27.1-1.6 + 06OCT2010 18.7-1.9 23.2-1.7 24.8-1.9 27.1-1.6 + 13OCT2010 18.9-1.9 23.0-2.0 25.1-1.6 27.1-1.6 + 20OCT2010 19.1-1.8 23.2-1.7 25.1-1.6 27.0-1.7 + 27OCT2010 19.8-1.3 23.6-1.4 25.2-1.5 27.0-1.6 + 03NOV2010 19.7-1.6 23.4-1.6 25.2-1.4 27.0-1.6 + 10NOV2010 19.5-1.9 23.5-1.5 25.2-1.4 27.2-1.5 + 17NOV2010 20.2-1.5 23.5-1.5 25.0-1.6 27.1-1.5 + 24NOV2010 20.6-1.3 23.3-1.7 24.9-1.7 26.9-1.7 + 01DEC2010 20.5-1.7 23.3-1.7 25.0-1.7 27.0-1.5 + 08DEC2010 20.9-1.5 23.4-1.7 25.0-1.6 26.9-1.6 + 15DEC2010 21.1-1.7 23.5-1.7 25.0-1.5 26.9-1.6 + 22DEC2010 21.7-1.4 23.4-1.8 24.8-1.8 26.8-1.6 + 29DEC2010 22.9-0.6 23.8-1.5 25.0-1.5 26.7-1.7 + 05JAN2011 23.1-0.7 24.1-1.3 25.0-1.5 26.7-1.7 + 12JAN2011 23.6-0.7 24.1-1.5 24.7-1.8 26.6-1.7 + 19JAN2011 24.2-0.5 24.4-1.3 25.0-1.6 26.7-1.6 + 26JAN2011 25.0 0.0 24.5-1.4 24.9-1.7 26.8-1.4 + 02FEB2011 25.3-0.1 24.9-1.1 25.1-1.5 26.6-1.5 + 09FEB2011 25.9 0.2 25.5-0.8 25.5-1.2 26.8-1.3 + 16FEB2011 26.8 0.7 25.6-0.8 25.4-1.3 27.0-1.1 + 23FEB2011 26.4 0.2 25.9-0.7 25.6-1.3 27.0-1.1 + 02MAR2011 25.7-0.6 26.0-0.8 25.7-1.3 27.1-1.1 + 09MAR2011 26.3-0.2 26.2-0.8 26.0-1.1 27.3-0.9 + 16MAR2011 26.6 0.1 26.3-0.8 26.4-0.9 27.5-0.7 + 23MAR2011 25.8-0.5 26.6-0.6 26.4-0.9 27.5-0.7 + 30MAR2011 25.6-0.4 26.9-0.4 26.6-0.9 27.5-0.8 + 06APR2011 25.4-0.4 27.1-0.2 26.9-0.7 27.7-0.6 + 13APR2011 25.8 0.3 27.3-0.2 27.1-0.7 27.9-0.6 + 20APR2011 25.4 0.1 27.2-0.3 27.1-0.7 27.8-0.7 + 27APR2011 25.8 0.8 27.2-0.1 27.1-0.7 27.9-0.7 + 04MAY2011 25.1 0.4 27.0-0.3 27.2-0.6 28.0-0.7 + 11MAY2011 25.3 0.9 27.0-0.2 27.4-0.5 28.3-0.5 + 18MAY2011 24.6 0.5 27.0-0.1 27.6-0.3 28.4-0.4 + 25MAY2011 24.0 0.3 26.8 0.0 27.5-0.3 28.3-0.5 + 01JUN2011 24.3 0.8 26.8 0.1 27.5-0.2 28.4-0.4 + 08JUN2011 24.2 1.1 26.7 0.1 27.5-0.2 28.4-0.4 + 15JUN2011 23.8 1.0 26.6 0.1 27.4-0.2 28.4-0.4 + 22JUN2011 23.2 0.6 26.5 0.2 27.4-0.1 28.4-0.4 + 29JUN2011 22.9 0.6 26.1 0.1 27.4-0.1 28.6-0.2 + 06JUL2011 22.2 0.2 25.8-0.1 27.1-0.3 28.5-0.3 + 13JUL2011 21.9 0.2 25.7 0.0 27.1-0.2 28.5-0.3 + 20JUL2011 22.1 0.6 25.6 0.0 26.9-0.3 28.4-0.4 + 27JUL2011 21.9 0.7 25.3-0.1 26.8-0.3 28.4-0.4 + 03AUG2011 21.5 0.4 25.0-0.3 26.4-0.6 28.3-0.4 + 10AUG2011 20.9 0.0 24.6-0.5 26.3-0.6 28.4-0.3 + 17AUG2011 20.5-0.1 24.5-0.5 26.0-0.8 28.2-0.4 + 24AUG2011 20.2-0.4 24.3-0.6 26.1-0.7 28.3-0.4 + 31AUG2011 20.0-0.5 24.4-0.5 26.1-0.7 28.3-0.4 + 07SEP2011 19.7-0.7 24.2-0.7 26.1-0.7 28.2-0.5 + 14SEP2011 19.6-0.8 24.1-0.7 26.0-0.8 28.0-0.7 + 21SEP2011 19.8-0.6 24.3-0.6 25.9-0.9 27.8-0.9 + 28SEP2011 19.9-0.6 24.1-0.7 26.0-0.7 28.0-0.7 + 05OCT2011 19.8-0.8 24.1-0.8 25.7-1.0 27.7-0.9 + 12OCT2011 19.7-1.0 24.1-0.8 25.8-0.9 27.9-0.8 + 19OCT2011 20.0-0.9 23.9-1.1 25.8-0.8 28.1-0.6 + 26OCT2011 21.2 0.2 23.8-1.1 25.4-1.2 28.0-0.7 + 02NOV2011 20.5-0.8 23.9-1.1 25.6-1.0 27.9-0.8 + 09NOV2011 20.5-0.9 23.9-1.1 25.7-0.9 27.9-0.7 + 16NOV2011 20.5-1.1 23.8-1.1 25.6-1.0 27.9-0.7 + 23NOV2011 21.4-0.5 24.0-1.0 25.6-1.0 27.8-0.8 + 30NOV2011 21.0-1.2 23.8-1.3 25.4-1.2 27.7-0.9 + 07DEC2011 21.4-1.0 23.9-1.2 25.5-1.1 27.5-1.0 + 14DEC2011 21.5-1.2 24.1-1.0 25.6-1.0 27.4-1.1 + 21DEC2011 22.1-1.0 24.5-0.7 25.6-1.0 27.2-1.3 + 28DEC2011 22.6-0.9 24.4-0.9 25.5-1.1 27.1-1.3 + 04JAN2012 22.7-1.1 24.6-0.8 25.5-1.0 27.2-1.2 + 11JAN2012 23.7-0.5 24.8-0.7 25.6-1.0 27.1-1.2 + 18JAN2012 24.0-0.6 24.9-0.8 25.4-1.2 27.1-1.2 + 25JAN2012 24.6-0.4 25.2-0.7 25.5-1.2 26.9-1.3 + 01FEB2012 24.6-0.8 25.2-0.8 25.5-1.2 27.0-1.2 + 08FEB2012 25.2-0.5 25.6-0.6 25.7-1.0 27.1-1.0 + 15FEB2012 26.9 0.8 26.3-0.1 26.1-0.7 27.1-1.0 + 22FEB2012 26.9 0.8 26.8 0.2 26.5-0.4 27.4-0.7 + 29FEB2012 27.3 1.0 27.1 0.4 26.4-0.6 27.2-0.9 + 07MAR2012 26.6 0.2 26.7-0.2 26.4-0.7 27.3-0.9 + 14MAR2012 26.6 0.2 26.6-0.4 26.6-0.6 27.5-0.7 + 21MAR2012 26.7 0.4 27.0-0.2 26.7-0.6 27.8-0.5 + 28MAR2012 26.9 0.8 27.5 0.3 27.1-0.3 27.7-0.6 + 04APR2012 26.2 0.3 27.6 0.3 27.2-0.3 27.9-0.5 + 11APR2012 27.4 1.8 27.8 0.4 27.3-0.4 28.1-0.3 + 18APR2012 26.8 1.4 27.5 0.0 27.3-0.5 28.1-0.4 + 25APR2012 26.6 1.5 27.5 0.1 27.6-0.2 28.4-0.2 + 02MAY2012 26.3 1.6 27.4 0.1 27.7-0.1 28.4-0.2 + 09MAY2012 25.7 1.2 27.3 0.1 27.8 0.0 28.4-0.3 + 16MAY2012 25.2 1.0 27.2 0.1 27.8 0.0 28.5-0.3 + 23MAY2012 24.8 0.9 27.1 0.2 27.8 0.0 28.6-0.2 + 30MAY2012 24.5 0.9 27.2 0.4 27.9 0.2 28.7-0.1 + 06JUN2012 24.7 1.5 27.1 0.4 27.8 0.1 28.6-0.2 + 13JUN2012 24.4 1.5 27.1 0.6 27.9 0.3 28.6-0.2 + 20JUN2012 24.3 1.7 27.1 0.8 28.0 0.4 28.8 0.0 + 27JUN2012 23.8 1.5 27.1 0.9 28.1 0.6 28.9 0.0 + 04JUL2012 23.2 1.1 26.8 0.8 27.9 0.5 28.8 0.0 + 11JUL2012 22.6 0.8 26.6 0.8 27.7 0.4 28.8 0.0 + 18JUL2012 22.6 1.1 26.5 0.9 27.7 0.5 28.8 0.0 + 25JUL2012 22.0 0.7 26.4 1.0 27.7 0.6 28.9 0.1 + 01AUG2012 21.6 0.5 26.1 0.9 27.6 0.6 29.0 0.3 + 08AUG2012 20.9 0.0 25.9 0.8 27.7 0.8 29.1 0.4 + 15AUG2012 20.8 0.1 25.6 0.6 27.4 0.6 29.1 0.4 + 22AUG2012 21.0 0.4 25.5 0.5 27.4 0.6 29.1 0.4 + 29AUG2012 20.3-0.2 25.6 0.7 27.7 0.9 29.1 0.5 + 05SEP2012 20.7 0.3 25.5 0.6 27.5 0.8 29.2 0.5 + 12SEP2012 20.9 0.5 25.3 0.4 27.3 0.5 29.1 0.4 + 19SEP2012 21.0 0.5 25.2 0.3 27.0 0.3 29.0 0.4 + 26SEP2012 21.0 0.5 25.1 0.2 26.9 0.2 29.1 0.4 + 03OCT2012 20.5-0.1 24.8-0.1 26.8 0.1 29.0 0.3 + 10OCT2012 20.2-0.6 24.7-0.2 26.8 0.1 29.1 0.4 + 17OCT2012 20.5-0.4 25.0 0.1 27.0 0.3 29.1 0.5 + 24OCT2012 21.0 0.0 25.0 0.1 27.2 0.5 29.3 0.7 + 31OCT2012 21.5 0.3 25.2 0.2 27.1 0.4 29.2 0.6 + 07NOV2012 21.5 0.2 25.1 0.1 27.0 0.4 29.2 0.6 + 14NOV2012 21.0-0.5 25.2 0.2 27.2 0.5 29.3 0.7 + 21NOV2012 21.1-0.7 25.1 0.1 26.9 0.3 29.1 0.5 + 28NOV2012 20.7-1.4 24.9-0.1 26.8 0.2 28.9 0.4 + 05DEC2012 21.5-0.9 24.9-0.2 26.5-0.1 28.6 0.1 + 12DEC2012 21.8-0.8 24.8-0.3 26.5-0.1 28.8 0.4 + 19DEC2012 22.4-0.6 24.9-0.3 26.4-0.2 28.6 0.2 + 26DEC2012 22.7-0.6 25.0-0.3 26.4-0.1 28.6 0.2 + 02JAN2013 23.3-0.4 25.0-0.4 26.3-0.3 28.4 0.1 + 09JAN2013 23.7-0.4 24.8-0.7 26.0-0.6 28.3 0.0 + 16JAN2013 24.1-0.4 25.0-0.6 26.0-0.6 28.1-0.2 + 23JAN2013 24.2-0.6 25.3-0.5 26.4-0.2 28.2 0.0 + 30JAN2013 24.8-0.5 25.1-0.9 26.1-0.5 28.1 0.0 + 06FEB2013 25.4-0.2 25.5-0.7 26.2-0.5 28.1-0.1 + 13FEB2013 25.9-0.1 25.9-0.4 26.4-0.3 28.1 0.0 + 20FEB2013 25.6-0.6 26.2-0.3 26.3-0.5 27.9-0.1 + 27FEB2013 25.8-0.4 26.5-0.2 26.6-0.3 27.9-0.2 + 06MAR2013 26.7 0.4 27.0 0.1 26.9-0.1 27.9-0.2 + 13MAR2013 27.0 0.5 27.1 0.0 26.8-0.3 27.7-0.4 + 20MAR2013 26.6 0.2 27.6 0.4 27.1-0.1 28.0-0.2 + 27MAR2013 25.6-0.5 27.6 0.3 27.3-0.1 28.1-0.2 + 03APR2013 25.0-0.9 27.3 0.0 27.6 0.1 28.3 0.0 + 10APR2013 24.8-0.9 27.5 0.0 27.7 0.0 28.5 0.1 + 17APR2013 24.6-0.8 27.5 0.0 27.7-0.1 28.5 0.0 + 24APR2013 24.5-0.6 27.3-0.1 27.7-0.1 28.4-0.1 + 01MAY2013 23.6-1.2 26.9-0.4 27.8 0.0 28.7 0.0 + 08MAY2013 22.9-1.6 26.7-0.5 27.7-0.1 28.7 0.0 + 15MAY2013 23.2-1.1 26.5-0.6 27.5-0.4 28.6-0.2 + 22MAY2013 22.3-1.6 25.9-1.0 27.4-0.4 28.7-0.1 + 29MAY2013 21.5-2.1 25.9-0.9 27.5-0.2 28.8 0.0 + 05JUN2013 22.0-1.3 25.9-0.8 27.5-0.2 28.8 0.0 + 12JUN2013 21.9-1.1 25.9-0.6 27.5-0.2 28.8-0.1 + 19JUN2013 21.1-1.6 25.7-0.7 27.3-0.3 28.6-0.2 + 26JUN2013 20.5-1.9 25.6-0.6 27.4-0.1 28.8 0.0 + 03JUL2013 20.6-1.5 25.4-0.5 27.2-0.2 28.8 0.0 + 10JUL2013 20.5-1.3 25.0-0.8 26.9-0.4 28.8 0.0 + 17JUL2013 20.1-1.5 24.8-0.8 26.8-0.4 28.7-0.1 + 24JUL2013 20.3-1.1 24.9-0.6 26.8-0.3 28.7-0.1 + 31JUL2013 19.8-1.3 24.6-0.8 26.8-0.2 28.7 0.0 + 07AUG2013 19.8-1.1 24.5-0.7 26.7-0.3 28.6-0.1 + 14AUG2013 19.6-1.1 24.4-0.7 26.4-0.4 28.7 0.0 + 21AUG2013 19.9-0.8 24.4-0.6 26.4-0.4 28.7 0.0 + 28AUG2013 19.4-1.1 24.5-0.5 26.7-0.1 28.8 0.2 + 04SEP2013 19.6-0.9 24.6-0.3 26.8 0.0 28.8 0.1 + 11SEP2013 20.0-0.4 24.7-0.2 26.8 0.0 28.7 0.0 + 18SEP2013 19.9-0.5 24.9 0.1 26.7-0.1 28.6-0.1 + 25SEP2013 20.1-0.4 24.7-0.2 26.5-0.2 28.5-0.1 + 02OCT2013 19.7-0.9 24.6-0.2 26.4-0.3 28.7 0.0 + 09OCT2013 20.1-0.7 24.6-0.3 26.3-0.3 28.6 0.0 + 16OCT2013 20.3-0.5 24.8-0.1 26.3-0.4 28.6-0.1 + 23OCT2013 20.5-0.4 24.7-0.2 26.3-0.4 28.7 0.1 + 30OCT2013 20.5-0.7 24.8-0.1 26.5-0.2 28.8 0.2 + 06NOV2013 21.0-0.4 24.8-0.1 26.6 0.0 28.9 0.3 + 13NOV2013 21.1-0.4 24.7-0.2 26.6 0.0 28.9 0.3 + 20NOV2013 21.3-0.5 24.8-0.2 26.7 0.1 28.9 0.3 + 27NOV2013 21.7-0.4 24.9-0.1 26.7 0.1 28.8 0.2 + 04DEC2013 22.0-0.3 24.9-0.2 26.8 0.2 28.8 0.3 + 11DEC2013 22.4-0.2 25.1 0.0 26.6 0.0 28.7 0.2 + 18DEC2013 22.4-0.5 25.2 0.0 26.5-0.1 28.6 0.1 + 25DEC2013 22.8-0.4 25.2-0.1 26.4-0.2 28.5 0.1 + 01JAN2014 23.7 0.0 25.2-0.2 26.3-0.3 28.2-0.2 + 08JAN2014 24.2 0.1 25.1-0.5 26.0-0.5 28.2-0.2 + 15JAN2014 25.0 0.6 25.2-0.4 25.9-0.7 28.0-0.3 + 22JAN2014 25.4 0.6 25.6-0.2 26.2-0.4 28.1-0.1 + 29JAN2014 25.4 0.2 25.3-0.7 25.9-0.7 27.9-0.2 + 05FEB2014 25.1-0.4 25.3-0.8 25.9-0.7 28.1 0.0 + 12FEB2014 25.4-0.6 25.4-0.9 26.2-0.5 28.5 0.4 + 19FEB2014 25.1-1.1 25.7-0.7 26.4-0.4 28.5 0.4 + 26FEB2014 25.5-0.7 26.0-0.6 26.3-0.6 28.2 0.1 + 05MAR2014 26.1-0.3 26.4-0.5 26.6-0.4 28.5 0.3 + 12MAR2014 25.8-0.6 26.8-0.3 26.8-0.4 28.7 0.6 + 19MAR2014 25.2-1.2 27.3 0.1 27.4 0.1 28.8 0.6 + 26MAR2014 25.4-0.7 27.6 0.4 27.6 0.2 29.0 0.7 + 02APR2014 25.2-0.7 27.8 0.5 27.8 0.3 29.0 0.7 + 09APR2014 24.9-0.8 27.6 0.1 27.9 0.2 29.1 0.7 + 16APR2014 24.8-0.7 27.7 0.2 28.0 0.2 29.1 0.6 + 23APR2014 25.3 0.1 27.8 0.4 28.2 0.4 29.2 0.6 + 30APR2014 25.7 0.8 27.8 0.5 28.2 0.4 29.3 0.7 + 07MAY2014 25.8 1.2 27.8 0.6 28.3 0.5 29.5 0.8 + 14MAY2014 25.5 1.3 27.7 0.6 28.3 0.4 29.5 0.8 + 21MAY2014 25.4 1.5 27.6 0.7 28.3 0.5 29.6 0.8 + 28MAY2014 25.3 1.6 27.6 0.7 28.4 0.6 29.7 0.9 + 04JUN2014 24.8 1.4 27.5 0.8 28.3 0.5 29.6 0.8 + 11JUN2014 24.6 1.6 27.3 0.8 28.1 0.4 29.5 0.6 + 18JUN2014 24.8 2.1 27.4 1.0 28.1 0.5 29.4 0.5 + 25JUN2014 24.0 1.6 27.2 1.0 28.0 0.5 29.3 0.5 + 02JUL2014 23.6 1.4 27.0 1.0 27.8 0.4 29.1 0.3 + 09JUL2014 23.0 1.1 26.5 0.6 27.6 0.3 29.1 0.3 + 16JUL2014 23.1 1.5 26.2 0.6 27.4 0.2 29.1 0.4 + 23JUL2014 22.9 1.6 26.0 0.5 27.1-0.1 28.9 0.2 + 30JUL2014 21.8 0.6 25.5 0.2 26.9-0.1 29.0 0.3 + 06AUG2014 22.2 1.2 25.6 0.4 27.0 0.0 29.2 0.5 + 13AUG2014 21.9 1.2 25.5 0.5 26.9 0.0 29.0 0.4 + 20AUG2014 22.1 1.4 25.5 0.5 27.1 0.3 29.1 0.4 + 27AUG2014 21.3 0.8 25.4 0.4 27.2 0.4 29.2 0.5 + 03SEP2014 21.7 1.2 25.3 0.4 27.1 0.4 29.2 0.5 + 10SEP2014 21.1 0.7 25.3 0.4 27.3 0.5 29.4 0.7 + 17SEP2014 21.0 0.7 25.2 0.4 27.2 0.5 29.4 0.8 + 24SEP2014 21.2 0.8 25.4 0.5 27.1 0.4 29.3 0.6 + 01OCT2014 21.7 1.1 25.4 0.5 27.1 0.3 29.2 0.5 + 08OCT2014 21.3 0.6 25.5 0.6 27.1 0.4 29.1 0.5 + 15OCT2014 21.5 0.7 25.5 0.5 27.2 0.5 29.4 0.7 + 22OCT2014 21.8 0.8 25.8 0.8 27.2 0.5 29.4 0.7 + 29OCT2014 21.8 0.6 25.8 0.9 27.3 0.6 29.4 0.8 + 05NOV2014 21.9 0.5 25.8 0.9 27.4 0.8 29.5 0.9 + 12NOV2014 22.4 0.9 25.8 0.9 27.5 0.8 29.5 0.9 + 19NOV2014 22.6 0.8 26.0 1.0 27.5 0.9 29.5 0.9 + 26NOV2014 22.4 0.4 25.9 0.9 27.6 1.0 29.5 0.9 + 03DEC2014 22.3 0.0 25.8 0.7 27.4 0.8 29.4 0.9 + 10DEC2014 22.8 0.2 26.0 0.9 27.5 0.9 29.4 0.9 + 17DEC2014 22.9 0.1 26.0 0.8 27.4 0.8 29.4 1.0 + 24DEC2014 23.1-0.2 26.0 0.7 27.3 0.7 29.3 0.9 + 31DEC2014 23.6 0.0 25.9 0.6 27.1 0.5 29.2 0.8 + 07JAN2015 23.7-0.2 25.9 0.4 27.0 0.4 29.1 0.7 + 14JAN2015 24.0-0.4 25.9 0.3 27.1 0.5 29.1 0.9 + 21JAN2015 24.3-0.4 26.1 0.3 27.2 0.6 29.2 1.0 + 28JAN2015 24.8-0.3 26.2 0.3 27.2 0.5 29.1 0.9 + 04FEB2015 25.0-0.5 26.2 0.1 27.2 0.5 29.1 0.9 + 11FEB2015 25.1-0.8 26.6 0.3 27.2 0.5 29.0 0.9 + 18FEB2015 26.1-0.1 26.7 0.3 27.3 0.5 29.0 1.0 + 25FEB2015 26.1-0.1 26.8 0.1 27.5 0.6 29.3 1.2 diff --git a/samples/G-code/lm.g b/samples/G-code/lm.g deleted file mode 100644 index 4b60a136..00000000 --- a/samples/G-code/lm.g +++ /dev/null @@ -1,25912 +0,0 @@ -48 36266 43 38 - 0 0.259 - 1 0.00232 - 2 0.0392 - 3 0.0317 - 4 0.141 - 6 0.000138 - 7 0.0468 - 8 0.036 - 9 0.0021 - 10 0.00146 - 13 0.0395 - 14 0.0443 - 15 0.00874 - 16 0.000331 - 18 0.013 - 19 0.0104 - 20 0.0106 - 21 0.121 - 22 0.0148 - 23 0.00816 - 24 0.000772 - 25 0.000165 - 26 0.004 - 28 0.0217 - 29 0.0184 - 30 0.00976 - 31 0.0173 - 32 0.00767 - 33 0.0122 - 34 5.51e-05 - 35 5.51e-05 - 36 0.000276 - 37 0.000551 - 38 2.76e-05 - 39 0.00645 - 40 0.000138 - 41 0.0352 - 42 0.00447 - 43 0.000221 - 44 0.00149 - 45 0.0171 - 46 0.00105 - 47 0.0106 - - 0 4 3 0 - 2 0.25 - 13 0.5 - 19 0.25 - - 2 619 18 15 - 0 0.00323 - 3 0.00808 - 4 0.00808 - 7 0.00162 - 8 0.784 - 9 0.042 - 10 0.00646 - 13 0.0517 - 14 0.00323 - 15 0.00969 - 20 0.00162 - 28 0.00162 - 29 0.00162 - 30 0.00485 - 31 0.0307 - 41 0.0178 - 42 0.00969 - 46 0.0145 - - 3 1 1 0 - 3 1 - - 4 1 1 0 - 4 1 - - 8 526 12 0 - 4 0.0076 - 7 0.0019 - 8 0.901 - 10 0.0019 - 13 0.0342 - 15 0.0019 - 29 0.0019 - 30 0.0057 - 31 0.019 - 41 0.0114 - 42 0.00951 - 46 0.0038 - - 9 37 5 0 - 3 0.027 - 8 0.162 - 9 0.703 - 41 0.0811 - 42 0.027 - - 10 3 1 0 - 10 1 - - 13 15 4 0 - 3 0.0667 - 13 0.8 - 14 0.0667 - 41 0.0667 - - 14 1 1 0 - 14 1 - - 15 5 1 0 - 15 1 - - 20 1 1 0 - 20 1 - - 21 5 3 0 - 0 0.2 - 8 0.6 - 41 0.2 - - 28 1 1 0 - 28 1 - - 31 10 2 0 - 13 0.1 - 31 0.9 - - 39 1 1 0 - 3 1 - - 45 7 1 0 - 46 1 - - 48 2 2 0 - 0 0.5 - 3 0.5 - - 3 1036 24 8 - 0 0.00869 - 2 0.00965 - 3 0.0425 - 4 0.496 - 7 0.0734 - 8 0.0502 - 9 0.000965 - 13 0.00579 - 14 0.000965 - 15 0.029 - 18 0.0463 - 20 0.0299 - 24 0.000965 - 26 0.000965 - 28 0.00579 - 30 0.00483 - 31 0.0029 - 32 0.00193 - 33 0.0029 - 38 0.000965 - 39 0.166 - 41 0.0154 - 42 0.0029 - 45 0.000965 - - 2 4 4 0 - 7 0.25 - 13 0.25 - 28 0.25 - 39 0.25 - - 3 39 6 0 - 4 0.128 - 7 0.385 - 8 0.0256 - 18 0.0769 - 32 0.0256 - 39 0.359 - - 8 34 10 0 - 0 0.0294 - 2 0.0882 - 3 0.0294 - 4 0.5 - 8 0.0882 - 18 0.0294 - 20 0.0882 - 28 0.0294 - 32 0.0294 - 39 0.0882 - - 9 2 2 0 - 0 0.5 - 13 0.5 - - 13 769 21 0 - 0 0.0065 - 2 0.0065 - 3 0.0325 - 4 0.635 - 7 0.078 - 8 0.0611 - 9 0.0013 - 13 0.0026 - 14 0.0013 - 15 0.0351 - 18 0.0572 - 20 0.0364 - 24 0.0013 - 26 0.0013 - 28 0.0052 - 30 0.0065 - 31 0.0039 - 33 0.0039 - 41 0.0195 - 42 0.0039 - 45 0.0013 - - 14 2 2 0 - 2 0.5 - 41 0.5 - - 41 1 1 0 - 13 1 - - 47 184 9 0 - 0 0.0109 - 2 0.00543 - 3 0.0978 - 4 0.0163 - 8 0.00543 - 13 0.00543 - 15 0.0163 - 38 0.00543 - 39 0.837 - - 4 59 13 4 - 0 0.305 - 2 0.0847 - 7 0.186 - 10 0.0169 - 13 0.0678 - 21 0.0339 - 28 0.0678 - 29 0.0678 - 30 0.0169 - 31 0.0339 - 41 0.0508 - 42 0.0169 - 47 0.0508 - - 2 5 2 0 - 0 0.2 - 7 0.8 - - 21 4 2 0 - 0 0.75 - 31 0.25 - - 47 8 5 0 - 2 0.375 - 7 0.25 - 10 0.125 - 29 0.125 - 47 0.125 - - 48 3 3 0 - 0 0.333 - 41 0.333 - 42 0.333 - - 6 14 7 1 - 4 0.143 - 6 0.357 - 7 0.143 - 13 0.0714 - 20 0.0714 - 40 0.0714 - 45 0.143 - - 6 5 3 0 - 4 0.4 - 7 0.4 - 20 0.2 - - 7 72 19 3 - 0 0.222 - 2 0.0139 - 3 0.0278 - 7 0.0278 - 8 0.0278 - 9 0.0139 - 13 0.0694 - 14 0.0833 - 15 0.0278 - 21 0.153 - 22 0.0139 - 28 0.0278 - 29 0.0417 - 30 0.0139 - 31 0.0833 - 33 0.0278 - 41 0.0694 - 42 0.0278 - 47 0.0278 - - 8 21 10 0 - 0 0.0952 - 9 0.0476 - 13 0.0476 - 14 0.0476 - 21 0.286 - 22 0.0476 - 28 0.0476 - 31 0.19 - 33 0.0476 - 41 0.143 - - 13 5 5 0 - 3 0.2 - 7 0.2 - 13 0.2 - 42 0.2 - 47 0.2 - - 21 6 5 0 - 0 0.333 - 8 0.167 - 14 0.167 - 29 0.167 - 41 0.167 - - 8 10450 37 10 - 0 0.257 - 1 0.0022 - 2 0.0624 - 3 0.00545 - 4 0.0268 - 7 0.0371 - 8 0.0275 - 9 0.00191 - 10 0.00383 - 13 0.0362 - 14 0.0615 - 15 0.00766 - 16 0.000287 - 18 0.00287 - 19 0.00957 - 20 0.00268 - 21 0.235 - 22 0.0462 - 23 0.0262 - 24 0.000287 - 26 0.00373 - 28 0.0187 - 29 0.0162 - 30 0.00612 - 31 0.0156 - 32 0.00689 - 33 0.0111 - 37 0.000574 - 39 0.00593 - 40 0.000191 - 41 0.0333 - 42 0.00201 - 43 9.57e-05 - 44 0.000383 - 45 0.0185 - 46 0.000957 - 47 0.00785 - - 2 485 30 0 - 0 0.103 - 2 0.0206 - 3 0.00412 - 4 0.181 - 7 0.146 - 8 0.0701 - 9 0.00412 - 13 0.00619 - 14 0.00206 - 15 0.00825 - 18 0.0247 - 19 0.00206 - 20 0.0309 - 21 0.0577 - 22 0.0186 - 23 0.0144 - 24 0.00206 - 26 0.0165 - 28 0.0227 - 29 0.0124 - 30 0.0206 - 31 0.00619 - 32 0.00412 - 33 0.0144 - 40 0.00206 - 41 0.126 - 42 0.00825 - 45 0.0454 - 46 0.00206 - 47 0.0227 - - 8 227 22 0 - 0 0.0308 - 2 0.0837 - 3 0.0176 - 4 0.348 - 7 0.185 - 8 0.0617 - 10 0.00881 - 18 0.0176 - 19 0.00441 - 20 0.0352 - 23 0.00441 - 26 0.022 - 28 0.00441 - 29 0.0264 - 30 0.0132 - 31 0.00441 - 32 0.00441 - 33 0.00441 - 41 0.0264 - 42 0.00441 - 46 0.00441 - 47 0.0881 - - 9 9 5 0 - 0 0.222 - 2 0.111 - 4 0.444 - 20 0.111 - 28 0.111 - - 10 12 2 0 - 4 0.5 - 18 0.5 - - 23 4 1 0 - 4 1 - - 26 11 6 0 - 0 0.0909 - 4 0.273 - 7 0.364 - 29 0.0909 - 41 0.0909 - 45 0.0909 - - 41 91 20 0 - 0 0.0879 - 2 0.022 - 3 0.011 - 4 0.187 - 7 0.231 - 8 0.022 - 15 0.011 - 18 0.011 - 20 0.011 - 21 0.033 - 22 0.022 - 23 0.022 - 28 0.011 - 29 0.011 - 30 0.011 - 31 0.011 - 41 0.143 - 42 0.022 - 45 0.0879 - 47 0.033 - - 42 4 3 0 - 4 0.5 - 7 0.25 - 21 0.25 - - 46 9 1 0 - 45 1 - - 47 9595 37 0 - 0 0.272 - 1 0.0024 - 2 0.0646 - 3 0.00521 - 4 0.00803 - 7 0.0258 - 8 0.0247 - 9 0.00188 - 10 0.00396 - 13 0.0391 - 14 0.0669 - 15 0.00782 - 16 0.000313 - 18 0.00073 - 19 0.0102 - 20 0.000313 - 21 0.252 - 22 0.0492 - 23 0.0275 - 24 0.000208 - 26 0.00271 - 28 0.0189 - 29 0.0162 - 30 0.00521 - 31 0.0165 - 32 0.00719 - 33 0.0113 - 37 0.000625 - 39 0.00646 - 40 0.000104 - 41 0.0278 - 42 0.00146 - 43 0.000104 - 44 0.000417 - 45 0.0158 - 46 0.000834 - 47 0.005 - - 9 882 28 4 - 0 0.22 - 1 0.00227 - 2 0.0737 - 3 0.0317 - 4 0.0249 - 7 0.0181 - 8 0.0159 - 13 0.0964 - 14 0.0351 - 15 0.00227 - 18 0.00113 - 19 0.0204 - 20 0.00113 - 21 0.339 - 22 0.00113 - 24 0.00113 - 26 0.00227 - 28 0.0147 - 29 0.0238 - 30 0.017 - 31 0.0068 - 32 0.00907 - 33 0.0102 - 34 0.00113 - 41 0.017 - 42 0.00113 - 45 0.00794 - 47 0.00454 - - 2 26 16 0 - 0 0.0769 - 1 0.0385 - 4 0.0385 - 7 0.0385 - 13 0.0385 - 14 0.115 - 19 0.0385 - 21 0.0385 - 28 0.115 - 29 0.0385 - 30 0.0769 - 32 0.0385 - 33 0.0385 - 41 0.154 - 45 0.0769 - 47 0.0385 - - 8 15 7 0 - 4 0.2 - 7 0.4 - 8 0.0667 - 13 0.0667 - 20 0.0667 - 28 0.0667 - 30 0.133 - - 41 7 7 0 - 0 0.143 - 2 0.143 - 4 0.143 - 7 0.143 - 14 0.143 - 28 0.143 - 32 0.143 - - 47 829 27 0 - 0 0.23 - 1 0.00121 - 2 0.0772 - 3 0.0338 - 4 0.0169 - 7 0.00965 - 8 0.0157 - 13 0.1 - 14 0.0326 - 15 0.00241 - 18 0.00121 - 19 0.0193 - 21 0.359 - 22 0.00121 - 24 0.00121 - 26 0.00241 - 28 0.00844 - 29 0.0241 - 30 0.0133 - 31 0.00724 - 32 0.00724 - 33 0.00965 - 34 0.00121 - 41 0.0133 - 42 0.00121 - 45 0.00603 - 47 0.00362 - - 10 101 11 2 - 0 0.0495 - 2 0.0495 - 4 0.277 - 7 0.119 - 8 0.119 - 18 0.158 - 20 0.0792 - 21 0.119 - 29 0.0099 - 42 0.0099 - 46 0.0099 - - 8 29 4 0 - 2 0.0345 - 4 0.552 - 18 0.241 - 20 0.172 - - 47 68 11 0 - 0 0.0735 - 2 0.0588 - 4 0.162 - 7 0.176 - 8 0.176 - 18 0.103 - 20 0.0294 - 21 0.176 - 29 0.0147 - 42 0.0147 - 46 0.0147 - - 13 1069 25 11 - 0 0.0131 - 2 0.0215 - 3 0.836 - 4 0.0187 - 7 0.0159 - 8 0.00935 - 9 0.00187 - 10 0.000935 - 13 0.0337 - 14 0.00281 - 15 0.00468 - 18 0.00281 - 20 0.00468 - 21 0.00468 - 22 0.000935 - 25 0.000935 - 26 0.00187 - 28 0.00374 - 29 0.00187 - 30 0.00281 - 31 0.00468 - 33 0.000935 - 41 0.00655 - 45 0.00281 - 47 0.00187 - - 2 32 12 0 - 2 0.0938 - 4 0.219 - 7 0.125 - 8 0.0938 - 15 0.0625 - 18 0.0312 - 20 0.0938 - 28 0.0312 - 30 0.0625 - 31 0.0625 - 33 0.0312 - 41 0.0938 - - 3 3 3 0 - 4 0.333 - 26 0.333 - 41 0.333 - - 8 23 10 0 - 0 0.304 - 2 0.13 - 3 0.0435 - 4 0.087 - 8 0.0435 - 13 0.13 - 21 0.13 - 41 0.0435 - 45 0.0435 - 47 0.0435 - - 9 4 2 0 - 0 0.25 - 4 0.75 - - 13 11 5 0 - 3 0.364 - 4 0.0909 - 7 0.182 - 8 0.273 - 26 0.0909 - - 21 1 1 0 - 25 1 - - 29 5 3 0 - 3 0.4 - 4 0.2 - 13 0.4 - - 31 13 6 0 - 0 0.154 - 3 0.308 - 4 0.154 - 7 0.0769 - 13 0.231 - 21 0.0769 - - 41 5 3 0 - 7 0.4 - 8 0.2 - 20 0.4 - - 42 2 2 0 - 18 0.5 - 47 0.5 - - 47 967 20 0 - 0 0.00414 - 2 0.0165 - 3 0.913 - 4 0.00207 - 7 0.00724 - 8 0.00207 - 9 0.00207 - 10 0.00103 - 13 0.029 - 14 0.0031 - 15 0.0031 - 18 0.00103 - 21 0.00103 - 22 0.00103 - 28 0.0031 - 29 0.00207 - 30 0.00103 - 31 0.0031 - 41 0.00207 - 45 0.00207 - - 14 13 7 0 - 2 0.0769 - 3 0.538 - 4 0.0769 - 14 0.0769 - 33 0.0769 - 42 0.0769 - 47 0.0769 - - 15 172 19 7 - 0 0.0174 - 2 0.064 - 3 0.0116 - 4 0.279 - 7 0.157 - 8 0.0291 - 15 0.198 - 18 0.0174 - 20 0.0116 - 26 0.00581 - 28 0.0116 - 31 0.0174 - 33 0.0116 - 41 0.0465 - 42 0.00581 - 43 0.00581 - 44 0.00581 - 45 0.0116 - 47 0.093 - - 2 6 4 0 - 4 0.5 - 7 0.167 - 8 0.167 - 41 0.167 - - 3 4 2 0 - 4 0.5 - 20 0.5 - - 8 54 11 0 - 0 0.0185 - 4 0.37 - 7 0.278 - 8 0.037 - 15 0.0185 - 18 0.037 - 26 0.0185 - 33 0.0185 - 41 0.0556 - 45 0.0185 - 47 0.13 - - 13 3 3 0 - 3 0.333 - 8 0.333 - 15 0.333 - - 15 30 10 0 - 2 0.1 - 3 0.0333 - 4 0.433 - 7 0.133 - 8 0.0333 - 15 0.0667 - 28 0.0333 - 33 0.0333 - 45 0.0333 - 47 0.1 - - 41 35 8 0 - 2 0.0286 - 4 0.286 - 7 0.143 - 15 0.286 - 18 0.0286 - 28 0.0286 - 41 0.0857 - 47 0.114 - - 47 39 10 0 - 0 0.0513 - 2 0.179 - 7 0.0513 - 15 0.487 - 31 0.0769 - 41 0.0256 - 42 0.0256 - 43 0.0256 - 44 0.0256 - 47 0.0513 - - 20 2 2 0 - 2 0.5 - 7 0.5 - - 21 3162 36 12 - 0 0.285 - 1 0.00316 - 2 0.038 - 3 0.00506 - 4 0.189 - 7 0.0664 - 8 0.00538 - 9 0.000633 - 13 0.0417 - 14 0.0237 - 15 0.00253 - 16 0.000316 - 18 0.0104 - 19 0.012 - 20 0.012 - 21 0.0904 - 22 0.00285 - 23 0.0038 - 24 0.00158 - 25 0.000316 - 26 0.00633 - 28 0.0266 - 29 0.0256 - 30 0.0139 - 31 0.0202 - 32 0.013 - 33 0.0164 - 35 0.000316 - 37 0.00158 - 41 0.0332 - 42 0.00506 - 43 0.000633 - 44 0.00127 - 45 0.031 - 46 0.000316 - 47 0.0104 - - 7 3 3 0 - 2 0.333 - 13 0.333 - 24 0.333 - - 8 1970 32 0 - 0 0.342 - 1 0.00305 - 2 0.0396 - 3 0.00457 - 4 0.177 - 7 0.0503 - 8 0.00508 - 9 0.000508 - 13 0.0315 - 14 0.0107 - 15 0.00152 - 18 0.00812 - 19 0.0142 - 20 0.00914 - 21 0.0985 - 22 0.00254 - 23 0.00254 - 24 0.00152 - 26 0.00558 - 28 0.0223 - 29 0.0198 - 30 0.0117 - 31 0.0173 - 32 0.0107 - 33 0.0183 - 37 0.00254 - 41 0.0294 - 42 0.00508 - 43 0.00102 - 44 0.00152 - 45 0.0421 - 47 0.0102 - - 9 279 22 0 - 0 0.305 - 1 0.00358 - 2 0.0287 - 3 0.00358 - 4 0.219 - 7 0.0645 - 13 0.0287 - 14 0.0179 - 19 0.00717 - 21 0.0358 - 26 0.0108 - 28 0.0538 - 29 0.0538 - 30 0.0323 - 31 0.0215 - 32 0.0251 - 33 0.0179 - 41 0.0394 - 42 0.0108 - 45 0.00717 - 46 0.00358 - 47 0.0108 - - 10 12 3 0 - 2 0.0833 - 4 0.667 - 18 0.25 - - 13 2 1 0 - 21 1 - - 21 123 19 0 - 0 0.358 - 1 0.00813 - 2 0.0732 - 4 0.0244 - 7 0.0325 - 13 0.0407 - 14 0.0976 - 15 0.00813 - 20 0.00813 - 21 0.0732 - 28 0.0244 - 29 0.0163 - 31 0.0488 - 32 0.0244 - 35 0.00813 - 41 0.0732 - 42 0.0244 - 45 0.0407 - 47 0.0163 - - 22 35 12 0 - 0 0.4 - 2 0.114 - 4 0.143 - 7 0.0286 - 13 0.0571 - 19 0.0286 - 21 0.0286 - 28 0.0571 - 29 0.0286 - 30 0.0286 - 32 0.0286 - 41 0.0571 - - 23 2 1 0 - 47 1 - - 31 380 26 0 - 0 0.1 - 2 0.0316 - 3 0.0158 - 4 0.395 - 7 0.168 - 8 0.0105 - 9 0.00263 - 13 0.0132 - 14 0.00263 - 18 0.0289 - 20 0.05 - 21 0.0368 - 22 0.00526 - 23 0.0132 - 25 0.00263 - 26 0.0132 - 28 0.0184 - 29 0.0184 - 30 0.00526 - 31 0.00526 - 32 0.00526 - 33 0.0105 - 41 0.0211 - 44 0.00263 - 45 0.0105 - 47 0.0132 - - 41 5 4 0 - 0 0.4 - 4 0.2 - 31 0.2 - 45 0.2 - - 45 6 5 0 - 0 0.167 - 4 0.167 - 7 0.333 - 19 0.167 - 45 0.167 - - 47 339 26 0 - 0 0.112 - 1 0.0059 - 2 0.0206 - 4 0.056 - 7 0.0649 - 8 0.00885 - 13 0.145 - 14 0.106 - 15 0.0118 - 16 0.00295 - 18 0.00885 - 19 0.0177 - 21 0.165 - 22 0.0059 - 23 0.0059 - 24 0.00295 - 26 0.00295 - 28 0.0383 - 29 0.0501 - 30 0.0265 - 31 0.0442 - 32 0.0206 - 33 0.0206 - 41 0.0472 - 45 0.0059 - 47 0.00295 - - 22 504 23 6 - 0 0.246 - 2 0.0417 - 3 0.00198 - 4 0.188 - 7 0.0258 - 13 0.0516 - 14 0.0675 - 15 0.00992 - 18 0.00397 - 19 0.0298 - 20 0.00198 - 21 0.101 - 24 0.00198 - 26 0.00595 - 28 0.0417 - 29 0.0218 - 30 0.0357 - 31 0.0198 - 32 0.00397 - 33 0.0159 - 41 0.0397 - 45 0.0179 - 47 0.0258 - - 8 431 21 0 - 0 0.262 - 2 0.0464 - 4 0.213 - 7 0.0255 - 13 0.0441 - 14 0.0534 - 15 0.00464 - 18 0.00464 - 19 0.0255 - 21 0.111 - 24 0.00232 - 26 0.00696 - 28 0.0394 - 29 0.0116 - 30 0.0302 - 31 0.0186 - 32 0.00464 - 33 0.0139 - 41 0.0418 - 45 0.0162 - 47 0.0232 - - 21 5 5 0 - 2 0.2 - 7 0.2 - 14 0.2 - 30 0.2 - 41 0.2 - - 30 3 2 0 - 0 0.667 - 7 0.333 - - 31 18 8 0 - 0 0.389 - 14 0.111 - 15 0.167 - 20 0.0556 - 29 0.111 - 33 0.0556 - 41 0.0556 - 45 0.0556 - - 45 3 2 0 - 4 0.667 - 30 0.333 - - 47 42 13 0 - 0 0.0476 - 3 0.0238 - 13 0.167 - 14 0.19 - 19 0.0952 - 21 0.0714 - 28 0.0714 - 29 0.0952 - 30 0.0714 - 31 0.0476 - 33 0.0238 - 45 0.0238 - 47 0.0714 - - 23 292 18 1 - 0 0.0651 - 2 0.0514 - 3 0.0274 - 4 0.634 - 8 0.0171 - 13 0.0103 - 14 0.00342 - 15 0.00342 - 18 0.0548 - 19 0.00342 - 20 0.0548 - 21 0.0171 - 28 0.00342 - 31 0.00342 - 32 0.00342 - 41 0.0205 - 42 0.00342 - 47 0.024 - - 21 11 4 0 - 2 0.0909 - 4 0.727 - 31 0.0909 - 41 0.0909 - - 24 7 2 0 - 0 0.857 - 21 0.143 - - 26 11 1 0 - 8 1 - - 28 10 7 0 - 2 0.1 - 15 0.1 - 19 0.1 - 21 0.1 - 26 0.3 - 28 0.2 - 45 0.1 - - 29 10 4 0 - 2 0.2 - 13 0.6 - 21 0.1 - 32 0.1 - - 30 47 15 1 - 0 0.447 - 2 0.0213 - 4 0.0426 - 7 0.0213 - 10 0.0213 - 13 0.0426 - 14 0.0213 - 21 0.106 - 22 0.0638 - 28 0.0213 - 31 0.0426 - 32 0.0213 - 41 0.0426 - 45 0.0426 - 47 0.0426 - - 2 3 2 0 - 4 0.667 - 7 0.333 - - 31 750 26 3 - 0 0.145 - 1 0.00133 - 2 0.0187 - 3 0.00267 - 4 0.0187 - 7 0.00933 - 8 0.00267 - 9 0.00133 - 13 0.0373 - 14 0.04 - 15 0.00133 - 19 0.00533 - 20 0.00133 - 21 0.583 - 22 0.028 - 23 0.0107 - 25 0.00133 - 28 0.0187 - 29 0.016 - 30 0.004 - 31 0.004 - 32 0.004 - 33 0.0147 - 41 0.00667 - 45 0.00933 - 47 0.0147 - - 2 19 10 0 - 2 0.0526 - 4 0.211 - 7 0.0526 - 8 0.105 - 14 0.0526 - 15 0.0526 - 21 0.105 - 22 0.0526 - 41 0.0526 - 47 0.263 - - 41 2 2 0 - 4 0.5 - 41 0.5 - - 47 728 24 0 - 0 0.15 - 1 0.00137 - 2 0.0179 - 3 0.00275 - 4 0.0124 - 7 0.00824 - 9 0.00137 - 13 0.0385 - 14 0.0398 - 19 0.00549 - 20 0.00137 - 21 0.598 - 22 0.0275 - 23 0.011 - 25 0.00137 - 28 0.0192 - 29 0.0151 - 30 0.00412 - 31 0.00412 - 32 0.00412 - 33 0.0151 - 41 0.00412 - 45 0.00962 - 47 0.00824 - - 32 2 1 0 - 14 1 - - 37 1 1 0 - 47 1 - - 39 235 16 2 - 2 0.017 - 4 0.66 - 7 0.034 - 8 0.0809 - 9 0.0128 - 13 0.00426 - 18 0.0468 - 20 0.0426 - 28 0.017 - 29 0.00851 - 30 0.00426 - 31 0.0128 - 36 0.0128 - 41 0.034 - 42 0.00851 - 44 0.00426 - - 3 172 15 0 - 2 0.0233 - 4 0.721 - 7 0.0291 - 8 0.0698 - 9 0.00581 - 13 0.00581 - 18 0.0407 - 20 0.0233 - 28 0.0233 - 29 0.0116 - 30 0.00581 - 31 0.0174 - 41 0.00581 - 42 0.0116 - 44 0.00581 - - 8 62 8 0 - 4 0.484 - 7 0.0484 - 8 0.113 - 9 0.0323 - 18 0.0645 - 20 0.0968 - 36 0.0484 - 41 0.113 - - 41 151 10 6 - 2 0.00662 - 3 0.00662 - 8 0.603 - 9 0.0464 - 13 0.0331 - 14 0.00662 - 15 0.232 - 21 0.0464 - 31 0.0132 - 42 0.00662 - - 2 11 4 0 - 8 0.545 - 9 0.273 - 13 0.0909 - 31 0.0909 - - 8 109 4 0 - 8 0.642 - 13 0.0183 - 15 0.321 - 21 0.0183 - - 9 2 1 0 - 9 1 - - 13 4 3 0 - 3 0.25 - 8 0.25 - 13 0.5 - - 21 13 4 0 - 8 0.385 - 9 0.154 - 14 0.0769 - 21 0.385 - - 49 1 1 0 - 2 1 - - 42 10 6 0 - 7 0.1 - 8 0.4 - 9 0.1 - 13 0.2 - 15 0.1 - 46 0.1 - - 45 91 17 2 - 0 0.473 - 1 0.011 - 2 0.0989 - 3 0.011 - 4 0.044 - 7 0.0879 - 8 0.033 - 9 0.011 - 13 0.0549 - 14 0.011 - 18 0.011 - 19 0.011 - 21 0.0769 - 22 0.033 - 28 0.011 - 30 0.011 - 31 0.011 - - 21 18 5 0 - 0 0.722 - 2 0.0556 - 4 0.0556 - 7 0.0556 - 21 0.111 - - 48 7 3 0 - 0 0.429 - 7 0.143 - 13 0.429 - - 46 13 3 0 - 8 0.692 - 9 0.0769 - 41 0.231 - - 47 14411 40 29 - 0 0.326 - 1 0.00291 - 2 0.0278 - 3 0.005 - 4 0.176 - 7 0.0572 - 8 0.0154 - 9 0.000555 - 10 0.000416 - 13 0.043 - 14 0.0509 - 15 0.00638 - 16 0.000416 - 18 0.0164 - 19 0.0131 - 20 0.0133 - 21 0.0505 - 22 0.000833 - 23 0.000139 - 24 0.000971 - 25 0.000208 - 26 0.00465 - 28 0.0271 - 29 0.0232 - 30 0.0121 - 31 0.021 - 32 0.00965 - 33 0.0153 - 34 6.94e-05 - 35 6.94e-05 - 36 0.000347 - 37 0.000625 - 40 0.000139 - 41 0.0389 - 42 0.00527 - 43 0.000208 - 44 0.0018 - 45 0.0184 - 46 0.000833 - 47 0.0134 - - 0 4 3 0 - 2 0.25 - 13 0.5 - 19 0.25 - - 2 4 3 0 - 0 0.5 - 7 0.25 - 29 0.25 - - 3 814 22 0 - 0 0.0111 - 2 0.0111 - 3 0.00614 - 4 0.63 - 7 0.0934 - 8 0.0639 - 9 0.00123 - 13 0.00369 - 14 0.00123 - 15 0.0319 - 18 0.059 - 20 0.0381 - 24 0.00123 - 26 0.00123 - 28 0.00614 - 30 0.00614 - 31 0.00369 - 32 0.00246 - 33 0.00369 - 41 0.0197 - 42 0.00369 - 45 0.00123 - - 4 55 12 0 - 0 0.327 - 2 0.0727 - 7 0.164 - 13 0.0727 - 21 0.0364 - 28 0.0727 - 29 0.0727 - 30 0.0182 - 31 0.0364 - 41 0.0545 - 42 0.0182 - 47 0.0545 - - 6 8 5 0 - 4 0.25 - 7 0.25 - 20 0.125 - 40 0.125 - 45 0.25 - - 7 60 17 0 - 0 0.267 - 2 0.0167 - 3 0.0333 - 7 0.0333 - 8 0.0333 - 13 0.0833 - 14 0.0833 - 15 0.0333 - 21 0.117 - 28 0.0333 - 29 0.0333 - 30 0.0167 - 31 0.1 - 33 0.0333 - 41 0.0167 - 42 0.0333 - 47 0.0333 - - 8 6320 35 0 - 0 0.424 - 1 0.00364 - 2 0.0198 - 3 0.00301 - 4 0.0399 - 7 0.0562 - 8 0.00918 - 9 0.000316 - 10 0.000949 - 13 0.0546 - 14 0.0835 - 15 0.00411 - 16 0.000475 - 18 0.00475 - 19 0.0158 - 20 0.00443 - 21 0.0685 - 22 0.00127 - 23 0.000158 - 24 0.000475 - 26 0.00459 - 28 0.0309 - 29 0.0267 - 30 0.0101 - 31 0.0258 - 32 0.0114 - 33 0.0184 - 37 0.000633 - 40 0.000158 - 41 0.0375 - 42 0.00301 - 44 0.000475 - 45 0.0209 - 46 0.00111 - 47 0.013 - - 9 432 27 0 - 0 0.449 - 1 0.00463 - 2 0.0648 - 3 0.00926 - 4 0.0394 - 7 0.0347 - 8 0.00231 - 13 0.0509 - 14 0.0417 - 15 0.00463 - 18 0.00231 - 19 0.0417 - 20 0.00231 - 21 0.0255 - 24 0.00231 - 26 0.00231 - 28 0.0278 - 29 0.0486 - 30 0.0347 - 31 0.0139 - 32 0.0185 - 33 0.0208 - 34 0.00231 - 41 0.0301 - 42 0.00231 - 45 0.0139 - 47 0.00926 - - 10 72 9 0 - 0 0.0694 - 2 0.0278 - 4 0.361 - 7 0.167 - 18 0.222 - 20 0.111 - 29 0.0139 - 42 0.0139 - 46 0.0139 - - 13 133 22 0 - 0 0.105 - 2 0.0602 - 3 0.0602 - 4 0.128 - 7 0.0902 - 8 0.0752 - 13 0.18 - 14 0.0226 - 15 0.015 - 18 0.0226 - 20 0.0376 - 21 0.0226 - 25 0.00752 - 26 0.015 - 28 0.0226 - 29 0.015 - 30 0.0226 - 31 0.0376 - 33 0.00752 - 41 0.0226 - 45 0.015 - 47 0.015 - - 14 5 5 0 - 4 0.2 - 14 0.2 - 33 0.2 - 42 0.2 - 47 0.2 - - 15 130 17 0 - 0 0.0231 - 2 0.0462 - 4 0.369 - 7 0.2 - 8 0.0385 - 15 0.0308 - 18 0.0231 - 20 0.0154 - 26 0.00769 - 28 0.0154 - 31 0.0231 - 33 0.0154 - 41 0.0385 - 43 0.00769 - 44 0.00769 - 45 0.0154 - 47 0.123 - - 21 2958 36 0 - 0 0.305 - 1 0.00338 - 2 0.0389 - 3 0.00507 - 4 0.2 - 7 0.069 - 8 0.00541 - 9 0.000338 - 13 0.0433 - 14 0.0237 - 15 0.0027 - 16 0.000338 - 18 0.0112 - 19 0.0128 - 20 0.0128 - 21 0.0541 - 22 0.00101 - 23 0.000338 - 24 0.00169 - 25 0.000338 - 26 0.00676 - 28 0.0284 - 29 0.0274 - 30 0.0145 - 31 0.0213 - 32 0.0139 - 33 0.0176 - 35 0.000338 - 37 0.00169 - 41 0.0311 - 42 0.00541 - 43 0.000338 - 44 0.00135 - 45 0.027 - 46 0.000338 - 47 0.0112 - - 22 451 23 0 - 0 0.275 - 2 0.0466 - 3 0.00222 - 4 0.208 - 7 0.0288 - 13 0.0355 - 14 0.071 - 15 0.0111 - 18 0.00443 - 19 0.0333 - 20 0.00222 - 21 0.0244 - 24 0.00222 - 26 0.00665 - 28 0.0466 - 29 0.0244 - 30 0.0399 - 31 0.0222 - 32 0.00443 - 33 0.0177 - 41 0.0443 - 45 0.02 - 47 0.0288 - - 23 286 18 0 - 0 0.0664 - 2 0.0524 - 3 0.028 - 4 0.647 - 8 0.0035 - 13 0.0105 - 14 0.0035 - 15 0.0035 - 18 0.0559 - 19 0.0035 - 20 0.0559 - 21 0.0105 - 28 0.0035 - 31 0.0035 - 32 0.0035 - 41 0.021 - 42 0.0035 - 47 0.0245 - - 24 7 2 0 - 0 0.857 - 21 0.143 - - 28 9 6 0 - 15 0.111 - 19 0.111 - 21 0.111 - 26 0.333 - 28 0.222 - 45 0.111 - - 29 5 4 0 - 2 0.4 - 13 0.2 - 21 0.2 - 32 0.2 - - 30 38 12 0 - 0 0.553 - 4 0.0526 - 7 0.0263 - 13 0.0263 - 14 0.0263 - 21 0.0789 - 28 0.0263 - 31 0.0526 - 32 0.0263 - 41 0.0526 - 45 0.0263 - 47 0.0526 - - 31 286 25 0 - 0 0.381 - 1 0.0035 - 2 0.0105 - 3 0.00699 - 4 0.042 - 7 0.0245 - 8 0.0035 - 9 0.0035 - 13 0.0385 - 14 0.105 - 15 0.0035 - 19 0.014 - 20 0.0035 - 21 0.119 - 22 0.0035 - 25 0.0035 - 28 0.049 - 29 0.042 - 30 0.0105 - 31 0.0105 - 32 0.0105 - 33 0.0385 - 41 0.014 - 45 0.021 - 47 0.0385 - - 32 2 1 0 - 14 1 - - 39 234 16 0 - 2 0.0128 - 4 0.662 - 7 0.0342 - 8 0.0812 - 9 0.0128 - 13 0.00427 - 18 0.047 - 20 0.0427 - 28 0.0171 - 29 0.00855 - 30 0.00427 - 31 0.0128 - 36 0.0128 - 41 0.0342 - 42 0.00855 - 44 0.00427 - - 44 1 1 0 - 3 1 - - 45 74 15 0 - 0 0.581 - 1 0.0135 - 2 0.027 - 3 0.0135 - 4 0.0541 - 7 0.108 - 8 0.0405 - 13 0.0676 - 14 0.0135 - 18 0.0135 - 19 0.0135 - 21 0.0135 - 28 0.0135 - 30 0.0135 - 31 0.0135 - - 48 753 27 0 - 0 0.493 - 1 0.00531 - 2 0.0372 - 3 0.00133 - 4 0.089 - 7 0.0266 - 8 0.00266 - 13 0.0505 - 14 0.0398 - 15 0.00133 - 18 0.0186 - 19 0.00797 - 20 0.00797 - 21 0.0544 - 24 0.00266 - 26 0.00266 - 28 0.0133 - 29 0.0133 - 30 0.0093 - 31 0.00664 - 32 0.00531 - 33 0.0146 - 41 0.0452 - 42 0.0186 - 45 0.0212 - 46 0.00266 - 47 0.0093 - - 49 148 24 0 - 0 0.412 - 1 0.00676 - 2 0.0405 - 3 0.00676 - 4 0.142 - 7 0.027 - 13 0.00676 - 14 0.0203 - 15 0.0135 - 18 0.0135 - 19 0.00676 - 21 0.0405 - 26 0.00676 - 28 0.0608 - 29 0.0135 - 30 0.00676 - 31 0.0405 - 32 0.0135 - 33 0.0135 - 41 0.0473 - 42 0.00676 - 45 0.0203 - 46 0.00676 - 47 0.027 - - 55 268 22 0 - 0 0.31 - 2 0.0373 - 3 0.00373 - 4 0.00746 - 7 0.0187 - 13 0.0224 - 14 0.0261 - 16 0.00373 - 18 0.00373 - 19 0.00746 - 21 0.0299 - 24 0.00373 - 26 0.0149 - 28 0.0299 - 29 0.056 - 30 0.0261 - 31 0.00746 - 33 0.00746 - 41 0.347 - 42 0.0187 - 45 0.00746 - 47 0.0112 - - 57 3 3 0 - 2 0.333 - 13 0.333 - 41 0.333 - - 60 843 26 0 - 0 0.0119 - 2 0.00949 - 3 0.00356 - 4 0.619 - 7 0.051 - 8 0.0605 - 13 0.00356 - 15 0.013 - 16 0.00119 - 18 0.0652 - 19 0.00119 - 20 0.0522 - 21 0.00237 - 28 0.0142 - 29 0.00119 - 30 0.00593 - 31 0.0225 - 32 0.00237 - 33 0.00119 - 36 0.00237 - 41 0.019 - 42 0.0107 - 43 0.00119 - 44 0.0202 - 45 0.00237 - 47 0.00237 - - 48 771 28 1 - 0 0.481 - 1 0.00519 - 2 0.0389 - 3 0.00259 - 4 0.0908 - 7 0.0259 - 8 0.00259 - 13 0.0493 - 14 0.0389 - 15 0.0013 - 18 0.0182 - 19 0.00778 - 20 0.00778 - 21 0.0584 - 22 0.0013 - 24 0.00259 - 26 0.00259 - 28 0.013 - 29 0.013 - 30 0.00908 - 31 0.00649 - 32 0.00519 - 33 0.0143 - 41 0.0441 - 42 0.0182 - 45 0.0298 - 46 0.00259 - 47 0.00908 - - 8 2 2 0 - 14 0.5 - 29 0.5 - - 49 153 24 9 - 0 0.399 - 1 0.00654 - 2 0.0392 - 3 0.00654 - 4 0.137 - 7 0.0261 - 13 0.00654 - 14 0.0196 - 15 0.0131 - 18 0.0131 - 19 0.00654 - 21 0.0588 - 26 0.00654 - 28 0.0588 - 29 0.0131 - 30 0.00654 - 31 0.0392 - 32 0.0131 - 33 0.0131 - 41 0.0523 - 42 0.00654 - 45 0.0261 - 46 0.00654 - 47 0.0261 - - 4 2 2 0 - 7 0.5 - 47 0.5 - - 8 94 19 0 - 0 0.457 - 1 0.0106 - 2 0.0319 - 4 0.17 - 7 0.0106 - 14 0.0106 - 19 0.0106 - 21 0.0532 - 26 0.0106 - 28 0.0638 - 29 0.0213 - 30 0.0106 - 31 0.0319 - 32 0.0213 - 33 0.0106 - 41 0.0319 - 45 0.0213 - 46 0.0106 - 47 0.0106 - - 9 3 1 0 - 28 1 - - 22 4 4 0 - 2 0.25 - 13 0.25 - 31 0.25 - 47 0.25 - - 30 3 3 0 - 14 0.333 - 18 0.333 - 41 0.333 - - 31 27 11 0 - 0 0.37 - 2 0.037 - 3 0.037 - 4 0.185 - 7 0.0741 - 18 0.037 - 21 0.0741 - 31 0.037 - 33 0.037 - 45 0.0741 - 47 0.037 - - 47 5 5 0 - 0 0.2 - 15 0.2 - 21 0.2 - 31 0.2 - 42 0.2 - - 48 3 3 0 - 0 0.333 - 14 0.333 - 15 0.333 - - 55 2 1 0 - 41 1 - - 50 5 4 0 - 8 0.4 - 13 0.2 - 28 0.2 - 46 0.2 - - 55 276 23 7 - 0 0.301 - 2 0.0362 - 3 0.0109 - 4 0.00725 - 7 0.0181 - 13 0.0217 - 14 0.029 - 16 0.00362 - 18 0.00362 - 19 0.00725 - 21 0.0435 - 24 0.00362 - 26 0.0145 - 28 0.029 - 29 0.0543 - 30 0.0254 - 31 0.00725 - 33 0.00725 - 41 0.337 - 42 0.0181 - 44 0.00362 - 45 0.00725 - 47 0.0109 - - 8 141 15 0 - 0 0.206 - 2 0.0355 - 4 0.00709 - 7 0.0213 - 13 0.0142 - 14 0.00709 - 16 0.00709 - 19 0.0142 - 21 0.0567 - 29 0.00709 - 30 0.0142 - 33 0.00709 - 41 0.582 - 45 0.00709 - 47 0.0142 - - 9 97 15 0 - 0 0.423 - 2 0.0309 - 7 0.0206 - 13 0.0309 - 14 0.0309 - 21 0.0309 - 24 0.0103 - 26 0.0412 - 28 0.0515 - 29 0.144 - 30 0.0412 - 33 0.0103 - 41 0.0722 - 42 0.0515 - 47 0.0103 - - 21 8 6 0 - 0 0.25 - 3 0.125 - 13 0.125 - 14 0.25 - 30 0.125 - 45 0.125 - - 22 12 6 0 - 0 0.333 - 2 0.0833 - 21 0.0833 - 28 0.25 - 31 0.167 - 41 0.0833 - - 47 5 4 0 - 0 0.2 - 3 0.4 - 14 0.2 - 44 0.2 - - 48 1 1 0 - 18 1 - - 55 2 2 0 - 2 0.5 - 4 0.5 - - 57 5 5 0 - 2 0.2 - 9 0.2 - 13 0.2 - 31 0.2 - 41 0.2 - - 58 4 3 0 - 0 0.25 - 2 0.5 - 21 0.25 - - 60 843 26 5 - 0 0.0119 - 2 0.00949 - 3 0.00356 - 4 0.619 - 7 0.051 - 8 0.0605 - 13 0.00356 - 15 0.013 - 16 0.00119 - 18 0.0652 - 19 0.00119 - 20 0.0522 - 21 0.00237 - 28 0.0142 - 29 0.00119 - 30 0.00593 - 31 0.0225 - 32 0.00237 - 33 0.00119 - 36 0.00237 - 41 0.019 - 42 0.0107 - 43 0.00119 - 44 0.0202 - 45 0.00237 - 47 0.00237 - - 9 7 5 0 - 0 0.286 - 15 0.143 - 28 0.286 - 41 0.143 - 45 0.143 - - 13 117 18 0 - 0 0.0256 - 2 0.00855 - 4 0.282 - 7 0.308 - 8 0.00855 - 13 0.00855 - 15 0.0855 - 16 0.00855 - 18 0.0427 - 20 0.0598 - 21 0.00855 - 28 0.0256 - 29 0.00855 - 31 0.0171 - 32 0.00855 - 36 0.00855 - 41 0.0342 - 42 0.0513 - - 14 5 4 0 - 4 0.4 - 18 0.2 - 30 0.2 - 43 0.2 - - 21 4 3 0 - 0 0.5 - 21 0.25 - 28 0.25 - - 47 702 21 0 - 0 0.00285 - 2 0.00997 - 3 0.00427 - 4 0.689 - 7 0.00997 - 8 0.0712 - 13 0.00285 - 18 0.0698 - 19 0.00142 - 20 0.0513 - 28 0.00712 - 30 0.0057 - 31 0.0242 - 32 0.00142 - 33 0.00142 - 36 0.00142 - 41 0.0128 - 42 0.00427 - 44 0.0242 - 45 0.00142 - 47 0.00285 - - 64 4 2 0 - 9 0.25 - 13 0.75 - -49 42427 42 32 - 0 0.124 - 1 0.000896 - 2 0.0365 - 3 0.00983 - 4 0.00596 - 5 0.00099 - 6 0.000165 - 7 0.0272 - 8 0.00695 - 9 0.00104 - 10 0.000754 - 12 0.0316 - 13 0.111 - 14 0.0815 - 15 0.04 - 16 0.00189 - 17 9.43e-05 - 18 0.000707 - 19 0.0424 - 20 4.71e-05 - 21 0.054 - 22 0.00429 - 23 0.00099 - 24 0.00568 - 26 0.00653 - 28 0.0383 - 29 0.0368 - 30 0.025 - 31 0.0372 - 32 0.0107 - 33 0.0115 - 34 0.00938 - 35 0.00481 - 37 0.00033 - 40 9.43e-05 - 41 0.112 - 42 0.0079 - 43 0.000754 - 44 0.00113 - 45 0.00988 - 46 0.00189 - 47 0.0968 - - 2 138 19 10 - 2 0.0145 - 3 0.0145 - 4 0.0725 - 7 0.087 - 8 0.029 - 9 0.0145 - 10 0.00725 - 13 0.029 - 14 0.00725 - 19 0.00725 - 21 0.536 - 22 0.0725 - 24 0.00725 - 26 0.00725 - 31 0.00725 - 41 0.0435 - 45 0.00725 - 46 0.00725 - 47 0.029 - - 2 2 2 0 - 2 0.5 - 3 0.5 - - 7 9 1 0 - 7 1 - - 8 5 2 0 - 7 0.6 - 8 0.4 - - 9 2 1 0 - 9 1 - - 10 1 1 0 - 10 1 - - 13 3 2 0 - 4 0.333 - 13 0.667 - - 21 82 7 0 - 8 0.0122 - 13 0.0122 - 21 0.878 - 22 0.0122 - 26 0.0122 - 41 0.061 - 47 0.0122 - - 22 10 2 0 - 14 0.1 - 22 0.9 - - 24 1 1 0 - 24 1 - - 47 20 10 0 - 2 0.05 - 4 0.45 - 8 0.05 - 13 0.05 - 19 0.05 - 21 0.05 - 31 0.05 - 45 0.05 - 46 0.05 - 47 0.15 - - 3 35 11 3 - 2 0.0286 - 4 0.0286 - 7 0.0286 - 14 0.114 - 16 0.0286 - 26 0.371 - 28 0.0286 - 29 0.114 - 30 0.0286 - 31 0.0286 - 41 0.2 - - 13 3 3 0 - 4 0.333 - 26 0.333 - 28 0.333 - - 26 10 4 0 - 7 0.1 - 14 0.1 - 29 0.1 - 41 0.7 - - 47 20 6 0 - 2 0.05 - 14 0.15 - 26 0.55 - 29 0.15 - 30 0.05 - 31 0.05 - - 4 146 26 8 - 0 0.151 - 1 0.00685 - 2 0.00685 - 3 0.0274 - 4 0.00685 - 7 0.349 - 8 0.0205 - 12 0.00685 - 13 0.0342 - 14 0.0616 - 15 0.0137 - 17 0.0274 - 19 0.0205 - 21 0.0479 - 26 0.00685 - 28 0.0342 - 29 0.0137 - 30 0.0205 - 31 0.0342 - 33 0.00685 - 34 0.00685 - 41 0.0274 - 42 0.0137 - 44 0.00685 - 45 0.0274 - 47 0.0205 - - 2 10 6 0 - 0 0.5 - 1 0.1 - 15 0.1 - 21 0.1 - 26 0.1 - 31 0.1 - - 7 9 8 0 - 8 0.111 - 13 0.222 - 15 0.111 - 21 0.111 - 29 0.111 - 31 0.111 - 45 0.111 - 47 0.111 - - 8 4 3 0 - 8 0.25 - 17 0.5 - 45 0.25 - - 9 4 3 0 - 0 0.5 - 13 0.25 - 31 0.25 - - 13 9 7 0 - 3 0.111 - 7 0.111 - 8 0.111 - 12 0.111 - 19 0.222 - 41 0.222 - 45 0.111 - - 21 17 10 0 - 0 0.294 - 7 0.0588 - 13 0.0588 - 14 0.0588 - 21 0.176 - 29 0.0588 - 30 0.0588 - 41 0.0588 - 42 0.118 - 45 0.0588 - - 22 14 6 0 - 0 0.429 - 17 0.143 - 28 0.214 - 31 0.0714 - 33 0.0714 - 47 0.0714 - - 47 77 16 0 - 0 0.0519 - 2 0.013 - 3 0.039 - 4 0.013 - 7 0.636 - 13 0.013 - 14 0.0909 - 19 0.013 - 21 0.026 - 28 0.013 - 30 0.026 - 31 0.013 - 34 0.013 - 41 0.013 - 44 0.013 - 47 0.013 - - 5 2 2 0 - 7 0.5 - 14 0.5 - - 6 14 7 2 - 2 0.0714 - 6 0.5 - 13 0.0714 - 21 0.0714 - 41 0.143 - 42 0.0714 - 45 0.0714 - - 6 7 6 0 - 2 0.143 - 13 0.143 - 21 0.143 - 41 0.286 - 42 0.143 - 45 0.143 - - 47 7 1 0 - 6 1 - - 7 947 30 7 - 0 0.103 - 2 0.0454 - 3 0.00528 - 4 0.0127 - 7 0.0275 - 8 0.0158 - 9 0.0116 - 12 0.00422 - 13 0.13 - 14 0.106 - 15 0.0106 - 19 0.0106 - 21 0.0232 - 22 0.0422 - 23 0.00106 - 24 0.00528 - 28 0.0465 - 29 0.0232 - 30 0.0338 - 31 0.038 - 32 0.0106 - 33 0.0095 - 34 0.00106 - 35 0.00106 - 41 0.229 - 42 0.0106 - 44 0.00106 - 45 0.00317 - 46 0.00317 - 47 0.0348 - - 2 12 7 0 - 2 0.0833 - 21 0.0833 - 28 0.167 - 30 0.25 - 32 0.0833 - 33 0.167 - 47 0.167 - - 4 49 14 0 - 4 0.0408 - 7 0.0204 - 8 0.0612 - 12 0.0204 - 13 0.286 - 14 0.102 - 15 0.0408 - 19 0.0408 - 21 0.0816 - 24 0.0408 - 28 0.102 - 31 0.102 - 41 0.0408 - 47 0.0204 - - 8 3 3 0 - 9 0.333 - 14 0.333 - 47 0.333 - - 10 127 17 0 - 0 0.0551 - 2 0.134 - 3 0.00787 - 7 0.165 - 8 0.0157 - 12 0.0157 - 13 0.00787 - 14 0.0394 - 15 0.00787 - 21 0.0315 - 28 0.0709 - 30 0.0236 - 31 0.0157 - 34 0.00787 - 41 0.299 - 42 0.0394 - 47 0.063 - - 13 5 3 0 - 0 0.4 - 13 0.2 - 31 0.4 - - 21 75 20 0 - 0 0.107 - 2 0.0133 - 4 0.0267 - 7 0.0133 - 8 0.08 - 13 0.12 - 14 0.0667 - 15 0.0133 - 21 0.0533 - 22 0.107 - 24 0.04 - 28 0.0267 - 29 0.0133 - 31 0.0133 - 32 0.0133 - 35 0.0133 - 41 0.0933 - 42 0.0133 - 46 0.0133 - 47 0.16 - - 47 667 27 0 - 0 0.12 - 2 0.0345 - 3 0.006 - 4 0.012 - 7 0.003 - 8 0.006 - 9 0.015 - 12 0.0015 - 13 0.145 - 14 0.124 - 15 0.009 - 19 0.012 - 21 0.0135 - 22 0.048 - 23 0.0015 - 28 0.0375 - 29 0.0315 - 30 0.039 - 31 0.039 - 32 0.012 - 33 0.0105 - 41 0.25 - 42 0.006 - 44 0.0015 - 45 0.0045 - 46 0.003 - 47 0.0135 - - 8 249 26 3 - 0 0.0723 - 2 0.0723 - 3 0.012 - 4 0.0201 - 7 0.0482 - 8 0.0161 - 13 0.12 - 14 0.108 - 15 0.0281 - 19 0.0161 - 21 0.0281 - 22 0.0201 - 23 0.0161 - 24 0.00803 - 28 0.0683 - 29 0.0482 - 30 0.0442 - 31 0.0281 - 32 0.0161 - 33 0.0161 - 41 0.0643 - 42 0.00402 - 44 0.00402 - 45 0.00803 - 46 0.00402 - 47 0.108 - - 2 3 2 0 - 30 0.333 - 41 0.667 - - 13 11 8 0 - 2 0.0909 - 7 0.0909 - 13 0.273 - 28 0.0909 - 29 0.182 - 31 0.0909 - 41 0.0909 - 47 0.0909 - - 21 2 2 0 - 4 0.5 - 28 0.5 - - 9 115 18 1 - 0 0.0696 - 2 0.0348 - 3 0.0783 - 4 0.0435 - 8 0.0087 - 13 0.2 - 14 0.139 - 15 0.0087 - 21 0.0261 - 28 0.0522 - 29 0.191 - 30 0.0174 - 31 0.0087 - 32 0.0261 - 33 0.0174 - 41 0.0087 - 45 0.0174 - 47 0.0522 - - 7 9 6 0 - 0 0.222 - 4 0.111 - 13 0.111 - 14 0.333 - 28 0.111 - 45 0.111 - - 10 136 9 1 - 2 0.00735 - 4 0.00735 - 7 0.934 - 13 0.00735 - 14 0.00735 - 18 0.00735 - 19 0.00735 - 33 0.00735 - 41 0.0147 - - 2 1 1 0 - 18 1 - - 11 6 1 0 - 47 1 - - 13 104 21 2 - 0 0.0577 - 2 0.0481 - 3 0.0481 - 4 0.0865 - 7 0.0577 - 8 0.135 - 13 0.0865 - 14 0.0385 - 18 0.00962 - 19 0.0192 - 21 0.00962 - 26 0.0288 - 28 0.0577 - 29 0.0385 - 30 0.125 - 31 0.0577 - 32 0.00962 - 33 0.00962 - 34 0.00962 - 41 0.0577 - 42 0.00962 - - 7 12 8 0 - 0 0.25 - 2 0.0833 - 8 0.0833 - 19 0.0833 - 21 0.0833 - 29 0.0833 - 41 0.25 - 42 0.0833 - - 26 3 3 0 - 14 0.333 - 28 0.333 - 30 0.333 - - 14 6 3 0 - 3 0.333 - 13 0.5 - 41 0.167 - - 15 28 4 0 - 15 0.0714 - 18 0.0357 - 45 0.0714 - 47 0.821 - - 17 5 4 0 - 0 0.2 - 7 0.2 - 31 0.2 - 47 0.4 - - 19 7 4 0 - 3 0.143 - 14 0.571 - 34 0.143 - 45 0.143 - - 21 18349 40 5 - 0 0.129 - 1 0.000872 - 2 0.038 - 3 0.00283 - 4 0.00474 - 5 0.00114 - 7 0.0186 - 8 0.0055 - 9 0.000708 - 10 0.00125 - 12 0.0355 - 13 0.106 - 14 0.0861 - 15 0.0422 - 16 0.00202 - 18 0.00049 - 19 0.0463 - 20 5.45e-05 - 21 0.0809 - 22 0.00665 - 23 0.00196 - 24 0.00501 - 26 0.00605 - 28 0.0338 - 29 0.0305 - 30 0.0215 - 31 0.0337 - 32 0.00948 - 33 0.0101 - 34 0.0104 - 35 0.00534 - 37 0.000381 - 40 0.000109 - 41 0.105 - 42 0.00741 - 43 0.000708 - 44 0.00109 - 45 0.00981 - 46 0.00191 - 47 0.0966 - - 2 72 20 0 - 0 0.125 - 2 0.0417 - 4 0.0417 - 8 0.0139 - 13 0.125 - 14 0.111 - 15 0.0139 - 19 0.0556 - 21 0.0694 - 22 0.0278 - 23 0.0139 - 28 0.0556 - 30 0.0556 - 31 0.0556 - 33 0.0139 - 40 0.0139 - 41 0.0694 - 42 0.0278 - 45 0.0278 - 47 0.0417 - - 21 918 33 0 - 0 0.0915 - 2 0.0447 - 3 0.00109 - 4 0.00871 - 7 0.0229 - 8 0.012 - 9 0.00109 - 10 0.00763 - 12 0.0272 - 13 0.127 - 14 0.0915 - 15 0.0196 - 16 0.00218 - 18 0.00109 - 19 0.0272 - 21 0.0664 - 24 0.0185 - 26 0.00218 - 28 0.0566 - 29 0.037 - 30 0.0403 - 31 0.0632 - 32 0.0174 - 33 0.0153 - 34 0.00436 - 35 0.00109 - 41 0.0436 - 42 0.00871 - 43 0.00327 - 44 0.00218 - 45 0.0251 - 46 0.00436 - 47 0.105 - - 22 11 7 0 - 2 0.182 - 13 0.0909 - 19 0.0909 - 24 0.0909 - 28 0.273 - 31 0.182 - 47 0.0909 - - 26 2 2 0 - 2 0.5 - 29 0.5 - - 47 17337 40 0 - 0 0.131 - 1 0.000923 - 2 0.0375 - 3 0.00294 - 4 0.00438 - 5 0.00121 - 7 0.0185 - 8 0.00513 - 9 0.000692 - 10 0.000923 - 12 0.0362 - 13 0.105 - 14 0.0858 - 15 0.0435 - 16 0.00202 - 18 0.000461 - 19 0.0473 - 20 5.77e-05 - 21 0.0817 - 22 0.00692 - 23 0.00202 - 24 0.00427 - 26 0.00629 - 28 0.0322 - 29 0.0302 - 30 0.0204 - 31 0.032 - 32 0.00911 - 33 0.00981 - 34 0.0108 - 35 0.00559 - 37 0.000404 - 40 5.77e-05 - 41 0.109 - 42 0.00727 - 43 0.000577 - 44 0.00104 - 45 0.00894 - 46 0.00179 - 47 0.0964 - - 22 773 27 5 - 0 0.0414 - 1 0.00129 - 2 0.0388 - 3 0.00259 - 4 0.0233 - 7 0.0103 - 8 0.00647 - 12 0.0155 - 13 0.364 - 14 0.0893 - 15 0.0168 - 18 0.00129 - 19 0.0142 - 21 0.0349 - 24 0.00776 - 26 0.0194 - 28 0.0699 - 29 0.066 - 30 0.0401 - 31 0.0375 - 32 0.0233 - 33 0.022 - 35 0.00259 - 41 0.00906 - 42 0.00388 - 45 0.00259 - 47 0.0362 - - 2 10 6 0 - 2 0.2 - 14 0.1 - 26 0.2 - 32 0.2 - 33 0.1 - 41 0.2 - - 7 39 17 0 - 0 0.282 - 2 0.0513 - 4 0.0256 - 7 0.0256 - 8 0.0256 - 12 0.0769 - 13 0.128 - 14 0.0513 - 15 0.0513 - 19 0.0513 - 26 0.0769 - 28 0.0256 - 29 0.0256 - 32 0.0256 - 41 0.0256 - 42 0.0256 - 47 0.0256 - - 8 4 3 0 - 28 0.25 - 41 0.25 - 47 0.5 - - 21 119 22 0 - 0 0.0504 - 1 0.0084 - 2 0.0756 - 4 0.0336 - 7 0.0336 - 12 0.0168 - 13 0.0672 - 14 0.0672 - 15 0.0252 - 19 0.0168 - 21 0.134 - 24 0.0168 - 26 0.0252 - 28 0.109 - 29 0.0084 - 30 0.0588 - 31 0.0588 - 32 0.0252 - 41 0.0168 - 42 0.0168 - 45 0.0168 - 47 0.118 - - 47 601 24 0 - 0 0.025 - 2 0.0283 - 3 0.00333 - 4 0.0216 - 7 0.00499 - 8 0.00666 - 12 0.0116 - 13 0.446 - 14 0.0965 - 15 0.0133 - 18 0.00166 - 19 0.0116 - 21 0.0183 - 24 0.00666 - 26 0.0116 - 28 0.0649 - 29 0.0815 - 30 0.0399 - 31 0.0366 - 32 0.02 - 33 0.0266 - 35 0.00333 - 41 0.00166 - 47 0.0183 - - 23 76 21 2 - 0 0.184 - 2 0.0263 - 3 0.0132 - 4 0.0921 - 7 0.0395 - 12 0.0263 - 13 0.0789 - 14 0.0658 - 18 0.0132 - 19 0.0395 - 21 0.0132 - 26 0.0132 - 28 0.0132 - 29 0.0526 - 30 0.0132 - 31 0.0395 - 32 0.0132 - 33 0.0263 - 41 0.105 - 42 0.0395 - 47 0.0921 - - 21 35 14 0 - 0 0.0571 - 2 0.0571 - 3 0.0286 - 4 0.143 - 13 0.0857 - 14 0.0571 - 18 0.0286 - 19 0.0571 - 21 0.0286 - 29 0.0571 - 30 0.0286 - 41 0.143 - 42 0.0857 - 47 0.143 - - 47 36 15 0 - 0 0.306 - 4 0.0278 - 7 0.0556 - 12 0.0556 - 13 0.0833 - 14 0.0833 - 19 0.0278 - 26 0.0278 - 28 0.0278 - 29 0.0556 - 31 0.0833 - 32 0.0278 - 33 0.0556 - 41 0.0278 - 47 0.0556 - - 24 97 16 1 - 0 0.144 - 2 0.0103 - 4 0.0206 - 8 0.0206 - 9 0.0103 - 13 0.134 - 14 0.0928 - 19 0.0309 - 21 0.0412 - 28 0.155 - 29 0.134 - 30 0.0722 - 31 0.0309 - 32 0.0206 - 33 0.0515 - 41 0.0309 - - 21 3 3 0 - 21 0.333 - 30 0.333 - 33 0.333 - - 26 19 7 2 - 3 0.526 - 8 0.0526 - 13 0.158 - 14 0.0526 - 21 0.105 - 30 0.0526 - 31 0.0526 - - 3 11 2 0 - 3 0.909 - 14 0.0909 - - 13 3 1 0 - 13 1 - - 28 9 5 0 - 2 0.111 - 21 0.111 - 26 0.111 - 41 0.556 - 42 0.111 - - 31 2 2 0 - 28 0.5 - 30 0.5 - - 37 3 2 0 - 28 0.333 - 47 0.667 - - 41 6 3 0 - 7 0.167 - 13 0.167 - 21 0.667 - - 42 2 2 0 - 21 0.5 - 31 0.5 - - 45 5 4 0 - 0 0.4 - 13 0.2 - 14 0.2 - 42 0.2 - - 47 19808 40 27 - 0 0.133 - 1 0.000959 - 2 0.0361 - 3 0.00979 - 4 0.00464 - 5 0.00106 - 7 0.022 - 8 0.00687 - 9 0.000808 - 10 0.000353 - 12 0.0339 - 13 0.105 - 14 0.0777 - 15 0.0428 - 16 0.00202 - 18 0.000757 - 19 0.0454 - 20 5.05e-05 - 21 0.0318 - 22 0.000252 - 23 5.05e-05 - 24 0.00596 - 26 0.00651 - 28 0.0409 - 29 0.0394 - 30 0.0268 - 31 0.0399 - 32 0.0114 - 33 0.0123 - 34 0.01 - 35 0.00515 - 37 0.000353 - 40 0.000101 - 41 0.12 - 42 0.00838 - 43 0.000808 - 44 0.00121 - 45 0.0105 - 46 0.00202 - 47 0.104 - - 2 16 11 0 - 3 0.0625 - 8 0.0625 - 13 0.0625 - 14 0.0625 - 19 0.0625 - 21 0.125 - 31 0.0625 - 41 0.125 - 45 0.0625 - 46 0.0625 - 47 0.25 - - 3 23 10 0 - 4 0.0435 - 7 0.0435 - 14 0.174 - 16 0.0435 - 26 0.087 - 28 0.0435 - 29 0.174 - 30 0.0435 - 31 0.0435 - 41 0.304 - - 4 91 25 0 - 0 0.242 - 1 0.011 - 2 0.011 - 3 0.044 - 4 0.011 - 7 0.022 - 8 0.033 - 12 0.011 - 13 0.0549 - 14 0.0989 - 15 0.022 - 19 0.033 - 21 0.0549 - 26 0.011 - 28 0.0549 - 29 0.022 - 30 0.033 - 31 0.0549 - 33 0.011 - 34 0.011 - 41 0.044 - 42 0.022 - 44 0.011 - 45 0.044 - 47 0.033 - - 6 6 5 0 - 2 0.167 - 13 0.167 - 41 0.333 - 42 0.167 - 45 0.167 - - 7 750 29 0 - 0 0.131 - 2 0.0453 - 3 0.00667 - 4 0.004 - 7 0.0347 - 8 0.0187 - 9 0.00267 - 12 0.00533 - 13 0.0747 - 14 0.056 - 15 0.0133 - 19 0.0133 - 21 0.024 - 22 0.00133 - 24 0.00667 - 28 0.0587 - 29 0.0293 - 30 0.0427 - 31 0.048 - 32 0.0133 - 33 0.012 - 34 0.00133 - 35 0.00133 - 41 0.289 - 42 0.0133 - 44 0.00133 - 45 0.004 - 46 0.004 - 47 0.044 - - 8 223 25 0 - 0 0.0807 - 2 0.0583 - 3 0.0135 - 4 0.00448 - 7 0.0404 - 8 0.0179 - 13 0.13 - 14 0.112 - 15 0.0269 - 19 0.0179 - 21 0.0314 - 22 0.00448 - 24 0.00897 - 28 0.0673 - 29 0.0538 - 30 0.0493 - 31 0.0314 - 32 0.0179 - 33 0.0179 - 41 0.0717 - 42 0.00448 - 44 0.00448 - 45 0.00897 - 46 0.00448 - 47 0.121 - - 9 67 16 0 - 0 0.119 - 2 0.0299 - 4 0.0149 - 13 0.0597 - 14 0.0746 - 15 0.0149 - 21 0.0299 - 28 0.0896 - 29 0.328 - 30 0.0299 - 31 0.0149 - 32 0.0448 - 33 0.0299 - 41 0.0149 - 45 0.0149 - 47 0.0896 - - 10 8 7 0 - 4 0.125 - 13 0.125 - 14 0.125 - 18 0.125 - 19 0.125 - 33 0.125 - 41 0.25 - - 11 6 1 0 - 47 1 - - 13 69 19 0 - 0 0.087 - 2 0.029 - 3 0.029 - 7 0.0145 - 8 0.0435 - 13 0.116 - 14 0.058 - 18 0.0145 - 19 0.029 - 21 0.0145 - 28 0.087 - 29 0.058 - 30 0.188 - 31 0.087 - 32 0.0145 - 33 0.0145 - 34 0.0145 - 41 0.087 - 42 0.0145 - - 14 4 2 0 - 13 0.75 - 41 0.25 - - 15 27 4 0 - 15 0.037 - 18 0.037 - 45 0.0741 - 47 0.852 - - 17 4 3 0 - 0 0.25 - 31 0.25 - 47 0.5 - - 19 7 4 0 - 3 0.143 - 14 0.571 - 34 0.143 - 45 0.143 - - 21 16535 40 0 - 0 0.143 - 1 0.000968 - 2 0.0372 - 3 0.00302 - 4 0.00423 - 5 0.00127 - 7 0.0161 - 8 0.00593 - 9 0.000786 - 10 0.000363 - 12 0.0394 - 13 0.102 - 14 0.0788 - 15 0.0469 - 16 0.00224 - 18 0.000544 - 19 0.0513 - 20 6.05e-05 - 21 0.0339 - 22 0.000181 - 23 6.05e-05 - 24 0.00538 - 26 0.00659 - 28 0.0374 - 29 0.0337 - 30 0.0238 - 31 0.0374 - 32 0.0105 - 33 0.0112 - 34 0.0116 - 35 0.00593 - 37 0.000423 - 40 0.000121 - 41 0.117 - 42 0.00816 - 43 0.000786 - 44 0.00121 - 45 0.0107 - 46 0.00212 - 47 0.107 - - 22 466 26 0 - 0 0.0687 - 1 0.00215 - 2 0.0429 - 4 0.00858 - 7 0.0172 - 8 0.00644 - 12 0.0258 - 13 0.0987 - 14 0.088 - 15 0.0279 - 18 0.00215 - 19 0.0236 - 21 0.0236 - 24 0.0129 - 26 0.0322 - 28 0.116 - 29 0.109 - 30 0.0665 - 31 0.0622 - 32 0.0386 - 33 0.0365 - 35 0.00429 - 41 0.015 - 42 0.00644 - 45 0.00429 - 47 0.0601 - - 23 72 20 0 - 0 0.194 - 2 0.0278 - 3 0.0139 - 4 0.0833 - 12 0.0278 - 13 0.0833 - 14 0.0694 - 18 0.0139 - 19 0.0417 - 21 0.0139 - 26 0.0139 - 28 0.0139 - 29 0.0556 - 30 0.0139 - 31 0.0417 - 32 0.0139 - 33 0.0278 - 41 0.111 - 42 0.0417 - 47 0.0972 - - 24 90 14 0 - 0 0.156 - 4 0.0111 - 8 0.0111 - 13 0.133 - 14 0.1 - 19 0.0333 - 21 0.0333 - 28 0.156 - 29 0.144 - 30 0.0778 - 31 0.0333 - 32 0.0222 - 33 0.0556 - 41 0.0333 - - 26 2 2 0 - 30 0.5 - 31 0.5 - - 28 8 4 0 - 2 0.125 - 21 0.125 - 41 0.625 - 42 0.125 - - 31 2 2 0 - 28 0.5 - 30 0.5 - - 37 3 2 0 - 28 0.333 - 47 0.667 - - 45 4 3 0 - 0 0.5 - 13 0.25 - 14 0.25 - - 48 5 4 0 - 0 0.2 - 13 0.4 - 14 0.2 - 30 0.2 - - 49 347 26 0 - 0 0.0519 - 2 0.0202 - 4 0.00288 - 7 0.0202 - 8 0.0144 - 10 0.00288 - 13 0.15 - 14 0.098 - 15 0.0144 - 16 0.00288 - 18 0.00288 - 19 0.0173 - 21 0.0288 - 24 0.0231 - 28 0.0778 - 29 0.0605 - 30 0.0663 - 31 0.107 - 32 0.0288 - 33 0.0403 - 34 0.00288 - 41 0.0951 - 42 0.0173 - 44 0.00288 - 45 0.0115 - 47 0.0403 - - 55 960 29 0 - 0 0.026 - 1 0.00104 - 2 0.0177 - 3 0.132 - 4 0.00208 - 7 0.12 - 8 0.00417 - 9 0.00104 - 13 0.155 - 14 0.0521 - 15 0.0354 - 16 0.00104 - 19 0.00729 - 21 0.00833 - 24 0.00833 - 26 0.00104 - 28 0.0156 - 29 0.0667 - 30 0.00938 - 31 0.0406 - 32 0.00313 - 33 0.00208 - 34 0.00313 - 35 0.00104 - 41 0.142 - 42 0.00313 - 43 0.00313 - 45 0.00938 - 47 0.128 - - 60 5 4 0 - 0 0.2 - 28 0.2 - 29 0.4 - 33 0.2 - - 48 5 4 0 - 0 0.2 - 13 0.4 - 14 0.2 - 30 0.2 - - 49 357 27 2 - 0 0.0504 - 2 0.0224 - 4 0.0028 - 7 0.028 - 8 0.014 - 10 0.0028 - 13 0.148 - 14 0.098 - 15 0.014 - 16 0.0028 - 18 0.0028 - 19 0.0168 - 21 0.028 - 24 0.0252 - 26 0.0028 - 28 0.0756 - 29 0.0588 - 30 0.0644 - 31 0.104 - 32 0.028 - 33 0.0392 - 34 0.0028 - 41 0.0924 - 42 0.0196 - 44 0.0028 - 45 0.014 - 47 0.0392 - - 21 15 6 0 - 2 0.133 - 14 0.0667 - 21 0.0667 - 28 0.0667 - 31 0.0667 - 41 0.6 - - 41 3 3 0 - 13 0.333 - 14 0.333 - 42 0.333 - - 55 962 29 6 - 0 0.026 - 1 0.00104 - 2 0.0177 - 3 0.132 - 4 0.00208 - 7 0.121 - 8 0.00416 - 9 0.00104 - 13 0.156 - 14 0.052 - 15 0.0353 - 16 0.00104 - 19 0.00728 - 21 0.00832 - 24 0.00832 - 26 0.00104 - 28 0.0156 - 29 0.0665 - 30 0.00936 - 31 0.0405 - 32 0.00312 - 33 0.00208 - 34 0.00312 - 35 0.00104 - 41 0.141 - 42 0.00312 - 43 0.00312 - 45 0.00936 - 47 0.128 - - 6 1 1 0 - 30 1 - - 7 114 18 0 - 0 0.0263 - 2 0.00877 - 3 0.14 - 7 0.184 - 9 0.00877 - 13 0.132 - 14 0.0439 - 15 0.0614 - 21 0.0175 - 26 0.00877 - 29 0.0351 - 30 0.00877 - 31 0.0439 - 34 0.00877 - 35 0.00877 - 41 0.132 - 45 0.0263 - 47 0.105 - - 9 39 13 0 - 0 0.0769 - 2 0.0256 - 7 0.0769 - 13 0.0513 - 15 0.0256 - 24 0.0256 - 28 0.103 - 29 0.41 - 30 0.0256 - 31 0.0769 - 33 0.0256 - 41 0.0513 - 47 0.0256 - - 21 527 25 0 - 0 0.0266 - 2 0.0152 - 3 0.108 - 4 0.0038 - 7 0.0892 - 8 0.00759 - 13 0.186 - 14 0.0455 - 15 0.0493 - 16 0.0019 - 19 0.00759 - 21 0.0114 - 24 0.0133 - 28 0.00759 - 29 0.0531 - 30 0.00569 - 31 0.055 - 32 0.0038 - 33 0.0019 - 34 0.0038 - 41 0.108 - 42 0.0019 - 43 0.0038 - 45 0.0114 - 47 0.178 - - 22 269 17 0 - 0 0.0186 - 1 0.00372 - 2 0.0112 - 3 0.201 - 7 0.16 - 13 0.123 - 14 0.0743 - 19 0.0112 - 28 0.026 - 29 0.052 - 30 0.0112 - 31 0.00743 - 32 0.00372 - 41 0.227 - 42 0.00743 - 43 0.00372 - 47 0.0595 - - 47 5 3 0 - 2 0.6 - 13 0.2 - 14 0.2 - - 57 3 3 0 - 7 0.333 - 21 0.333 - 47 0.333 - - 60 5 4 0 - 0 0.2 - 28 0.2 - 29 0.4 - 33 0.2 - -50 1035 26 5 - 0 0.0058 - 2 0.0213 - 7 0.0174 - 8 0.0232 - 13 0.111 - 14 0.0889 - 15 0.0193 - 16 0.00193 - 19 0.00193 - 21 0.382 - 22 0.00193 - 24 0.00193 - 26 0.00483 - 28 0.00773 - 29 0.0058 - 30 0.00966 - 31 0.00773 - 32 0.00386 - 33 0.00773 - 41 0.222 - 42 0.0174 - 43 0.00193 - 44 0.00193 - 45 0.00193 - 46 0.00966 - 47 0.0213 - - 2 22 4 0 - 13 0.227 - 14 0.0455 - 22 0.0455 - 41 0.682 - - 7 223 5 3 - 7 0.00897 - 13 0.00897 - 14 0.00448 - 21 0.928 - 41 0.0493 - - 7 2 2 0 - 14 0.5 - 41 0.5 - - 21 11 2 0 - 13 0.182 - 41 0.818 - - 47 209 2 0 - 7 0.00957 - 21 0.99 - - 21 472 24 5 - 0 0.00636 - 2 0.0466 - 7 0.0275 - 8 0.0254 - 13 0.106 - 14 0.0932 - 15 0.0212 - 16 0.00212 - 19 0.00212 - 21 0.373 - 24 0.00212 - 28 0.00847 - 29 0.00636 - 30 0.0106 - 31 0.00847 - 32 0.00424 - 33 0.00847 - 41 0.189 - 42 0.0191 - 43 0.00212 - 44 0.00212 - 45 0.00212 - 46 0.0106 - 47 0.0233 - - 7 206 14 0 - 7 0.00485 - 8 0.0146 - 13 0.117 - 14 0.0922 - 15 0.00971 - 21 0.612 - 28 0.00485 - 29 0.00485 - 30 0.00485 - 31 0.00485 - 32 0.00971 - 41 0.0874 - 42 0.0243 - 46 0.00971 - - 8 4 3 0 - 0 0.25 - 8 0.5 - 33 0.25 - - 21 174 21 0 - 0 0.0115 - 7 0.00575 - 8 0.0402 - 13 0.149 - 14 0.144 - 15 0.046 - 16 0.00575 - 19 0.00575 - 24 0.00575 - 28 0.0172 - 29 0.0115 - 30 0.023 - 31 0.0172 - 33 0.0172 - 41 0.391 - 42 0.0172 - 43 0.00575 - 44 0.00575 - 45 0.00575 - 46 0.0172 - 47 0.0575 - - 26 5 3 0 - 41 0.6 - 42 0.2 - 47 0.2 - - 47 83 3 0 - 2 0.265 - 7 0.133 - 21 0.602 - - 28 5 1 0 - 26 1 - - 47 302 24 2 - 0 0.00993 - 7 0.00662 - 8 0.0397 - 13 0.189 - 14 0.152 - 15 0.0331 - 16 0.00331 - 19 0.00331 - 21 0.00993 - 22 0.00331 - 24 0.00331 - 28 0.0132 - 29 0.00993 - 30 0.0166 - 31 0.0132 - 32 0.00662 - 33 0.0132 - 41 0.381 - 42 0.0298 - 43 0.00331 - 44 0.00331 - 45 0.00331 - 46 0.0166 - 47 0.0364 - - 2 22 4 0 - 13 0.227 - 14 0.0455 - 22 0.0455 - 41 0.682 - - 7 15 4 0 - 13 0.133 - 14 0.0667 - 21 0.0667 - 41 0.733 - -51 1504 36 26 - 0 0.00399 - 2 0.0259 - 3 0.0153 - 4 0.000665 - 6 0.000665 - 7 0.118 - 8 0.00798 - 9 0.00266 - 10 0.000665 - 13 0.0465 - 14 0.0226 - 15 0.0426 - 16 0.00199 - 19 0.00266 - 21 0.0326 - 22 0.000665 - 24 0.00133 - 25 0.00864 - 27 0.00332 - 28 0.0166 - 29 0.00399 - 30 0.000665 - 31 0.00399 - 32 0.00332 - 33 0.00199 - 34 0.00798 - 35 0.00665 - 37 0.00798 - 40 0.00532 - 41 0.0951 - 42 0.0864 - 43 0.00465 - 44 0.00598 - 45 0.0598 - 46 0.00332 - 47 0.347 - - 2 50 6 0 - 13 0.14 - 14 0.02 - 41 0.24 - 42 0.04 - 45 0.02 - 47 0.54 - - 4 3 2 0 - 7 0.667 - 28 0.333 - - 7 7 5 0 - 2 0.143 - 35 0.286 - 41 0.143 - 45 0.143 - 47 0.286 - - 8 5 4 0 - 4 0.2 - 7 0.4 - 21 0.2 - 47 0.2 - - 21 48 11 0 - 2 0.229 - 7 0.167 - 10 0.0208 - 21 0.146 - 28 0.0208 - 35 0.0208 - 37 0.0833 - 41 0.0417 - 42 0.0208 - 45 0.0417 - 47 0.208 - - 35 4 4 0 - 2 0.25 - 21 0.25 - 42 0.25 - 43 0.25 - - 40 3 2 0 - 15 0.667 - 27 0.333 - - 41 96 15 8 - 0 0.0104 - 3 0.167 - 6 0.0104 - 8 0.0521 - 13 0.156 - 14 0.0417 - 15 0.323 - 16 0.0312 - 19 0.0312 - 21 0.0938 - 27 0.0417 - 28 0.0104 - 29 0.0104 - 30 0.0104 - 43 0.0104 - - 2 4 2 0 - 13 0.75 - 28 0.25 - - 45 2 2 0 - 19 0.5 - 29 0.5 - - 49 7 6 0 - 8 0.143 - 13 0.143 - 19 0.143 - 21 0.286 - 27 0.143 - 43 0.143 - - 55 48 9 0 - 3 0.312 - 8 0.0208 - 13 0.146 - 14 0.0208 - 15 0.292 - 16 0.0417 - 19 0.0208 - 21 0.0833 - 27 0.0625 - - 57 16 2 0 - 8 0.0625 - 15 0.938 - - 64 6 4 0 - 0 0.167 - 8 0.167 - 13 0.5 - 30 0.167 - - 69 2 2 0 - 3 0.5 - 6 0.5 - - 71 3 2 0 - 8 0.333 - 21 0.667 - - 42 78 15 4 - 3 0.0128 - 8 0.0128 - 13 0.218 - 14 0.167 - 15 0.269 - 21 0.0385 - 25 0.103 - 28 0.0128 - 29 0.0128 - 31 0.0385 - 32 0.0128 - 33 0.0128 - 43 0.0513 - 46 0.0128 - 47 0.0256 - - 45 24 6 0 - 13 0.125 - 14 0.125 - 15 0.5 - 21 0.0417 - 33 0.0417 - 43 0.167 - - 55 20 10 0 - 3 0.05 - 8 0.05 - 13 0.05 - 14 0.1 - 15 0.15 - 25 0.3 - 28 0.05 - 29 0.05 - 31 0.15 - 46 0.05 - - 62 19 3 0 - 13 0.632 - 14 0.211 - 15 0.158 - - 69 5 3 0 - 14 0.2 - 25 0.4 - 47 0.4 - - 45 37 5 0 - 41 0.0811 - 42 0.649 - 43 0.027 - 44 0.0541 - 47 0.189 - - 47 495 24 19 - 0 0.00404 - 2 0.0283 - 3 0.00202 - 7 0.178 - 13 0.0242 - 14 0.00606 - 15 0.00202 - 21 0.0121 - 24 0.00202 - 28 0.0202 - 29 0.00404 - 31 0.00202 - 32 0.00404 - 33 0.00202 - 34 0.0121 - 35 0.00202 - 37 0.00606 - 40 0.00404 - 41 0.0444 - 42 0.0525 - 44 0.00606 - 45 0.0525 - 46 0.00202 - 47 0.527 - - 2 42 5 0 - 13 0.119 - 41 0.19 - 42 0.0238 - 45 0.0238 - 47 0.643 - - 4 3 2 0 - 7 0.667 - 28 0.333 - - 21 24 7 0 - 2 0.0833 - 7 0.292 - 21 0.0417 - 28 0.0417 - 41 0.0417 - 45 0.0833 - 47 0.417 - - 41 2 2 0 - 13 0.5 - 21 0.5 - - 42 4 3 0 - 13 0.25 - 32 0.25 - 47 0.5 - - 45 8 2 0 - 44 0.125 - 47 0.875 - - 48 41 8 0 - 0 0.0244 - 7 0.439 - 21 0.0488 - 28 0.0244 - 37 0.0488 - 42 0.0244 - 45 0.0488 - 47 0.341 - - 49 47 8 0 - 2 0.0851 - 7 0.255 - 28 0.0213 - 37 0.0213 - 41 0.0638 - 42 0.0213 - 45 0.0213 - 47 0.511 - - 51 5 3 0 - 7 0.2 - 42 0.6 - 47 0.2 - - 52 7 3 0 - 40 0.143 - 45 0.429 - 47 0.429 - - 55 145 12 0 - 2 0.0138 - 7 0.166 - 14 0.0069 - 29 0.0069 - 33 0.0069 - 34 0.0414 - 35 0.0069 - 41 0.0276 - 42 0.0828 - 44 0.0069 - 45 0.0483 - 47 0.586 - - 57 55 15 0 - 0 0.0182 - 3 0.0182 - 7 0.127 - 13 0.0909 - 14 0.0182 - 15 0.0182 - 21 0.0182 - 28 0.0182 - 31 0.0182 - 41 0.0182 - 42 0.0364 - 44 0.0182 - 45 0.0364 - 46 0.0182 - 47 0.527 - - 64 18 4 0 - 2 0.0556 - 7 0.111 - 45 0.111 - 47 0.722 - - 65 1 1 0 - 40 1 - - 69 15 6 0 - 7 0.533 - 21 0.0667 - 29 0.0667 - 41 0.0667 - 42 0.0667 - 47 0.2 - - 71 13 7 0 - 2 0.231 - 14 0.0769 - 24 0.0769 - 28 0.154 - 41 0.0769 - 42 0.0769 - 47 0.308 - - 72 11 5 0 - 2 0.0909 - 28 0.0909 - 42 0.0909 - 45 0.273 - 47 0.455 - - 73 2 1 0 - 28 1 - - 74 17 4 0 - 7 0.0588 - 32 0.0588 - 41 0.0588 - 47 0.824 - - 48 49 12 3 - 0 0.0204 - 7 0.367 - 13 0.0408 - 15 0.0408 - 21 0.0612 - 28 0.0204 - 37 0.0408 - 40 0.0204 - 41 0.0204 - 42 0.0204 - 45 0.0612 - 47 0.286 - - 41 5 2 0 - 42 0.2 - 47 0.8 - - 42 2 2 0 - 15 0.5 - 21 0.5 - - 47 34 10 0 - 0 0.0294 - 7 0.529 - 13 0.0588 - 21 0.0588 - 28 0.0294 - 37 0.0588 - 40 0.0294 - 41 0.0294 - 45 0.0588 - 47 0.118 - - 49 64 14 3 - 2 0.0625 - 7 0.188 - 8 0.0156 - 13 0.0312 - 14 0.0156 - 19 0.0156 - 21 0.0312 - 28 0.0156 - 35 0.0156 - 37 0.0156 - 41 0.156 - 42 0.0469 - 45 0.0156 - 47 0.375 - - 41 8 2 0 - 41 0.125 - 47 0.875 - - 47 35 11 0 - 2 0.0286 - 7 0.314 - 8 0.0286 - 13 0.0571 - 14 0.0286 - 21 0.0571 - 35 0.0286 - 37 0.0286 - 41 0.2 - 42 0.0286 - 47 0.2 - - 49 3 3 0 - 2 0.333 - 7 0.333 - 28 0.333 - - 51 11 5 0 - 7 0.0909 - 41 0.0909 - 42 0.636 - 45 0.0909 - 47 0.0909 - - 52 11 4 0 - 40 0.0909 - 41 0.182 - 45 0.455 - 47 0.273 - - 55 273 23 6 - 2 0.00733 - 7 0.0879 - 8 0.00366 - 9 0.011 - 13 0.0183 - 14 0.0293 - 15 0.00733 - 21 0.033 - 25 0.00733 - 28 0.00366 - 29 0.00366 - 31 0.00366 - 33 0.00366 - 34 0.022 - 35 0.00366 - 37 0.00733 - 40 0.00733 - 41 0.194 - 42 0.117 - 44 0.011 - 45 0.103 - 46 0.00366 - 47 0.311 - - 2 2 2 0 - 33 0.5 - 47 0.5 - - 40 2 2 0 - 40 0.5 - 45 0.5 - - 41 57 7 0 - 2 0.0175 - 13 0.0175 - 21 0.0175 - 41 0.526 - 42 0.0351 - 45 0.0526 - 47 0.333 - - 42 26 3 0 - 42 0.0385 - 44 0.0769 - 47 0.885 - - 47 162 22 0 - 2 0.00617 - 7 0.13 - 8 0.00617 - 9 0.0185 - 13 0.0185 - 14 0.0432 - 15 0.0123 - 21 0.0494 - 25 0.0123 - 28 0.00617 - 29 0.00617 - 31 0.00617 - 34 0.037 - 35 0.00617 - 37 0.0123 - 40 0.00617 - 41 0.13 - 42 0.167 - 44 0.00617 - 45 0.142 - 46 0.00617 - 47 0.173 - - 62 5 2 0 - 7 0.6 - 47 0.4 - - 57 74 16 5 - 0 0.0135 - 3 0.0135 - 7 0.0946 - 8 0.0135 - 13 0.0676 - 14 0.0135 - 15 0.0135 - 21 0.0135 - 28 0.027 - 31 0.0135 - 41 0.243 - 42 0.027 - 44 0.0135 - 45 0.027 - 46 0.0135 - 47 0.392 - - 41 7 5 0 - 41 0.143 - 42 0.143 - 44 0.143 - 45 0.143 - 47 0.429 - - 42 24 3 0 - 41 0.458 - 45 0.0417 - 47 0.5 - - 47 26 12 0 - 0 0.0385 - 3 0.0385 - 7 0.192 - 13 0.192 - 14 0.0385 - 15 0.0385 - 21 0.0385 - 28 0.0385 - 31 0.0385 - 41 0.0385 - 46 0.0385 - 47 0.269 - - 55 9 3 0 - 7 0.222 - 42 0.111 - 47 0.667 - - 58 4 1 0 - 41 1 - - 58 8 5 0 - 13 0.125 - 15 0.5 - 32 0.125 - 46 0.125 - 47 0.125 - - 62 55 11 1 - 3 0.0727 - 7 0.0909 - 8 0.0182 - 9 0.0182 - 13 0.0182 - 14 0.0182 - 22 0.0182 - 35 0.0182 - 42 0.345 - 45 0.236 - 47 0.145 - - 42 3 1 0 - 47 1 - - 64 37 10 1 - 2 0.027 - 7 0.0541 - 8 0.0541 - 13 0.0541 - 21 0.108 - 35 0.0811 - 41 0.162 - 42 0.027 - 45 0.0811 - 47 0.351 - - 41 8 4 0 - 2 0.125 - 7 0.125 - 45 0.125 - 47 0.625 - - 65 1 1 0 - 40 1 - - 69 29 9 1 - 7 0.276 - 14 0.0345 - 21 0.103 - 25 0.103 - 29 0.0345 - 40 0.0345 - 41 0.103 - 42 0.207 - 47 0.103 - - 42 3 1 0 - 47 1 - - 71 17 7 0 - 2 0.235 - 14 0.0588 - 24 0.0588 - 28 0.118 - 41 0.235 - 42 0.0588 - 47 0.235 - - 72 11 5 0 - 2 0.0909 - 28 0.0909 - 42 0.0909 - 45 0.273 - 47 0.455 - - 73 2 1 0 - 28 1 - - 74 19 6 0 - 0 0.0526 - 7 0.0526 - 28 0.0526 - 32 0.0526 - 41 0.0526 - 47 0.737 - -52 280 19 10 - 2 0.0214 - 4 0.0179 - 7 0.00714 - 8 0.0107 - 13 0.00357 - 15 0.00357 - 20 0.00357 - 27 0.0286 - 28 0.05 - 29 0.0143 - 30 0.0143 - 33 0.00714 - 40 0.0107 - 41 0.225 - 42 0.0214 - 44 0.05 - 45 0.175 - 46 0.00714 - 47 0.329 - - 0 3 1 0 - 4 1 - - 13 6 4 0 - 8 0.5 - 41 0.167 - 44 0.167 - 47 0.167 - - 15 3 3 0 - 15 0.333 - 20 0.333 - 47 0.333 - - 21 18 5 0 - 28 0.0556 - 33 0.0556 - 41 0.111 - 42 0.0556 - 47 0.722 - - 27 86 13 0 - 2 0.0233 - 4 0.0116 - 7 0.0116 - 27 0.0349 - 28 0.0349 - 29 0.0233 - 30 0.0233 - 40 0.0233 - 41 0.221 - 42 0.0116 - 44 0.0581 - 45 0.267 - 47 0.256 - - 28 13 4 0 - 41 0.769 - 45 0.0769 - 46 0.0769 - 47 0.0769 - - 41 5 3 0 - 13 0.2 - 27 0.4 - 28 0.4 - - 45 3 3 0 - 2 0.333 - 28 0.333 - 47 0.333 - - 47 127 15 3 - 2 0.0236 - 4 0.00787 - 7 0.00787 - 27 0.00787 - 28 0.0472 - 29 0.0157 - 30 0.0157 - 33 0.00787 - 40 0.00787 - 41 0.228 - 42 0.0236 - 44 0.0551 - 45 0.181 - 46 0.00787 - 47 0.362 - - 21 17 5 0 - 28 0.0588 - 33 0.0588 - 41 0.0588 - 42 0.0588 - 47 0.765 - - 28 11 4 0 - 41 0.727 - 45 0.0909 - 46 0.0909 - 47 0.0909 - - 52 2 2 0 - 28 0.5 - 44 0.5 - - 52 2 2 0 - 28 0.5 - 44 0.5 - -53 81 5 3 - 2 0.0494 - 7 0.0494 - 42 0.173 - 44 0.0617 - 47 0.667 - - 13 2 1 0 - 44 1 - - 44 5 3 0 - 2 0.4 - 7 0.2 - 42 0.4 - - 47 38 4 1 - 2 0.0526 - 7 0.0526 - 42 0.184 - 47 0.711 - - 44 5 3 0 - 2 0.4 - 7 0.2 - 42 0.4 - -54 1410 26 10 - 0 0.00142 - 2 0.0128 - 3 0.0163 - 4 0.351 - 7 0.044 - 8 0.0326 - 13 0.00355 - 14 0.000709 - 15 0.241 - 16 0.00213 - 18 0.0184 - 20 0.0348 - 21 0.00142 - 26 0.00426 - 28 0.00284 - 29 0.00284 - 30 0.00142 - 31 0.000709 - 33 0.00426 - 34 0.00142 - 39 0.000709 - 41 0.178 - 44 0.00284 - 45 0.0163 - 46 0.00142 - 47 0.0227 - - 3 2 2 0 - 4 0.5 - 39 0.5 - - 4 5 4 0 - 7 0.4 - 21 0.2 - 33 0.2 - 41 0.2 - - 8 11 9 0 - 4 0.0909 - 7 0.0909 - 8 0.0909 - 18 0.0909 - 20 0.0909 - 29 0.0909 - 41 0.0909 - 45 0.182 - 47 0.182 - - 13 19 9 0 - 2 0.0526 - 3 0.158 - 4 0.105 - 7 0.0526 - 8 0.211 - 15 0.158 - 30 0.0526 - 31 0.0526 - 45 0.158 - - 15 697 20 3 - 0 0.00143 - 2 0.0115 - 3 0.01 - 4 0.34 - 7 0.0373 - 8 0.0301 - 13 0.0043 - 15 0.135 - 18 0.0158 - 20 0.0316 - 26 0.0043 - 28 0.00287 - 29 0.00143 - 33 0.00143 - 34 0.00143 - 41 0.344 - 44 0.00287 - 45 0.00574 - 46 0.00143 - 47 0.0172 - - 15 89 12 0 - 2 0.0112 - 3 0.0337 - 4 0.629 - 7 0.0787 - 8 0.0449 - 13 0.0112 - 15 0.0674 - 20 0.0674 - 26 0.0112 - 34 0.0112 - 41 0.0225 - 45 0.0112 - - 41 231 8 0 - 2 0.013 - 4 0.61 - 7 0.0216 - 8 0.026 - 15 0.238 - 18 0.0346 - 20 0.0519 - 33 0.00433 - - 47 371 18 0 - 0 0.0027 - 2 0.0108 - 3 0.0108 - 4 0.097 - 7 0.0377 - 8 0.027 - 13 0.00539 - 15 0.0889 - 18 0.00809 - 20 0.0108 - 26 0.00539 - 28 0.00539 - 29 0.0027 - 41 0.639 - 44 0.00539 - 45 0.00809 - 46 0.0027 - 47 0.0323 - - 16 7 2 0 - 3 0.286 - 15 0.714 - - 41 235 2 0 - 15 0.987 - 16 0.0128 - - 47 411 22 5 - 0 0.00243 - 2 0.0219 - 3 0.0268 - 4 0.596 - 7 0.0754 - 8 0.0438 - 13 0.00487 - 15 0.0146 - 18 0.0316 - 20 0.0584 - 21 0.00243 - 26 0.0073 - 28 0.00487 - 29 0.00487 - 30 0.00243 - 33 0.0073 - 34 0.00243 - 41 0.0195 - 44 0.00487 - 45 0.0268 - 46 0.00243 - 47 0.0389 - - 4 5 4 0 - 7 0.4 - 21 0.2 - 33 0.2 - 41 0.2 - - 8 8 6 0 - 7 0.125 - 18 0.125 - 29 0.125 - 41 0.125 - 45 0.25 - 47 0.25 - - 13 11 7 0 - 2 0.0909 - 3 0.182 - 4 0.182 - 7 0.0909 - 15 0.0909 - 30 0.0909 - 45 0.273 - - 15 365 20 0 - 0 0.00274 - 2 0.0219 - 3 0.0192 - 4 0.638 - 7 0.0712 - 8 0.0466 - 13 0.00548 - 15 0.0137 - 18 0.0301 - 20 0.0603 - 26 0.00822 - 28 0.00548 - 29 0.00274 - 33 0.00274 - 34 0.00274 - 41 0.0164 - 44 0.00548 - 45 0.011 - 46 0.00274 - 47 0.0329 - - 16 2 1 0 - 3 1 - - 54 6 4 0 - 4 0.5 - 7 0.167 - 20 0.167 - 33 0.167 - - 55 10 8 0 - 4 0.3 - 8 0.1 - 14 0.1 - 18 0.1 - 20 0.1 - 41 0.1 - 45 0.1 - 47 0.1 - -55 887998 48 60 - 0 0.0273 - 1 0.000351 - 2 0.0385 - 3 0.0187 - 4 0.0895 - 5 1.13e-05 - 6 0.00017 - 7 0.269 - 8 0.0578 - 9 0.00198 - 10 0.00144 - 11 4.5e-06 - 12 0.000276 - 13 0.0448 - 14 0.00865 - 15 0.0601 - 16 0.00132 - 17 0.000474 - 18 0.00933 - 19 0.00118 - 20 0.00947 - 21 0.00895 - 22 0.00032 - 23 7.09e-05 - 24 0.0044 - 25 2.93e-05 - 26 0.0257 - 27 9.01e-06 - 28 0.0421 - 29 0.0397 - 30 0.0252 - 31 0.0126 - 32 0.00881 - 33 0.0183 - 34 0.0013 - 35 0.000993 - 36 2.14e-05 - 37 0.00439 - 38 1.46e-05 - 39 9.01e-06 - 40 0.000164 - 41 0.0609 - 42 0.00956 - 43 0.000404 - 44 0.0025 - 45 0.0118 - 46 0.00365 - 47 0.078 - - 0 15 6 0 - 7 0.0667 - 13 0.133 - 14 0.0667 - 15 0.6 - 19 0.0667 - 44 0.0667 - - 2 4952 33 24 - 0 0.00101 - 2 0.000404 - 3 0.0186 - 4 0.00323 - 6 0.000202 - 7 0.00424 - 8 0.0307 - 9 0.000808 - 10 0.000404 - 13 0.33 - 14 0.202 - 15 0.361 - 16 0.0224 - 18 0.000404 - 19 0.00141 - 20 0.000808 - 21 0.00101 - 26 0.000202 - 28 0.00121 - 29 0.000202 - 30 0.00363 - 31 0.000808 - 32 0.000202 - 33 0.000404 - 34 0.000202 - 40 0.000202 - 41 0.00687 - 42 0.00182 - 43 0.000202 - 44 0.000202 - 45 0.000202 - 46 0.00283 - 47 0.00263 - - 3 95 6 0 - 3 0.884 - 7 0.0105 - 8 0.0105 - 13 0.0632 - 21 0.0105 - 41 0.0211 - - 4 22 10 0 - 0 0.0909 - 3 0.0455 - 4 0.273 - 7 0.227 - 8 0.0455 - 13 0.0909 - 15 0.0909 - 21 0.0455 - 32 0.0455 - 47 0.0455 - - 6 1 1 0 - 6 1 - - 8 278 11 0 - 3 0.0036 - 4 0.0216 - 8 0.432 - 9 0.00719 - 13 0.439 - 14 0.0396 - 15 0.036 - 31 0.00719 - 40 0.0036 - 41 0.0036 - 42 0.00719 - - 9 4 2 0 - 3 0.5 - 9 0.5 - - 10 2 1 0 - 10 1 - - 13 1555 11 0 - 4 0.00257 - 8 0.0167 - 13 0.826 - 14 0.134 - 15 0.00257 - 16 0.000643 - 30 0.0045 - 41 0.00836 - 42 0.00129 - 46 0.00193 - 47 0.00129 - - 14 982 10 0 - 3 0.00102 - 7 0.00102 - 8 0.00204 - 13 0.196 - 14 0.785 - 15 0.0102 - 16 0.00102 - 19 0.00204 - 33 0.00102 - 41 0.00102 - - 15 1822 10 0 - 8 0.0011 - 13 0.00549 - 14 0.000549 - 15 0.945 - 16 0.0406 - 18 0.0011 - 19 0.0011 - 30 0.000549 - 41 0.00384 - 43 0.000549 - - 16 66 3 0 - 14 0.0152 - 15 0.455 - 16 0.53 - - 19 5 3 0 - 7 0.2 - 15 0.2 - 19 0.6 - - 20 5 2 0 - 7 0.2 - 20 0.8 - - 21 4 2 0 - 13 0.5 - 21 0.5 - - 28 4 1 0 - 28 1 - - 30 15 3 0 - 13 0.333 - 14 0.0667 - 30 0.6 - - 31 4 2 0 - 13 0.75 - 31 0.25 - - 45 12 3 0 - 15 0.0833 - 42 0.167 - 46 0.75 - - 47 9 8 0 - 0 0.111 - 3 0.111 - 13 0.222 - 14 0.111 - 28 0.111 - 41 0.111 - 45 0.111 - 46 0.111 - - 48 3 2 0 - 13 0.667 - 31 0.333 - - 49 1 1 0 - 41 1 - - 54 2 2 0 - 15 0.5 - 41 0.5 - - 55 57 18 0 - 0 0.0351 - 2 0.0351 - 3 0.0351 - 7 0.193 - 13 0.0877 - 14 0.0526 - 15 0.0877 - 21 0.0175 - 26 0.0175 - 28 0.0175 - 29 0.0175 - 30 0.0175 - 33 0.0175 - 34 0.0175 - 41 0.105 - 42 0.0526 - 46 0.0175 - 47 0.175 - - 56 1 1 0 - 7 1 - - 57 2 2 0 - 41 0.5 - 44 0.5 - - 3 14951 40 22 - 0 0.0276 - 1 0.000334 - 2 0.0587 - 3 0.0198 - 4 0.0795 - 7 0.288 - 8 0.0544 - 9 0.000401 - 10 0.00114 - 12 0.000134 - 13 0.0364 - 14 0.00408 - 15 0.0177 - 16 6.69e-05 - 18 0.0093 - 19 0.001 - 20 0.00816 - 21 0.0375 - 24 0.00294 - 25 6.69e-05 - 26 0.066 - 28 0.0289 - 29 0.106 - 30 0.0142 - 31 0.0122 - 32 0.00375 - 33 0.0142 - 34 0.00127 - 35 0.000201 - 37 0.000936 - 38 0.00087 - 39 0.000535 - 40 0.000334 - 41 0.0413 - 42 0.026 - 43 0.000669 - 44 0.00261 - 45 0.00348 - 46 0.00107 - 47 0.0286 - - 2 89 12 0 - 0 0.0337 - 2 0.0112 - 4 0.124 - 7 0.461 - 8 0.0449 - 13 0.0225 - 20 0.0225 - 21 0.0337 - 28 0.0112 - 41 0.213 - 45 0.0112 - 46 0.0112 - - 3 284 22 0 - 0 0.00704 - 2 0.0141 - 3 0.00352 - 4 0.0141 - 7 0.387 - 8 0.0176 - 13 0.00352 - 14 0.0106 - 15 0.00352 - 21 0.0176 - 26 0.268 - 28 0.0141 - 29 0.13 - 30 0.00352 - 31 0.0211 - 33 0.0106 - 34 0.00704 - 39 0.00704 - 41 0.0141 - 42 0.0352 - 45 0.00352 - 47 0.00704 - - 7 3 1 0 - 4 1 - - 8 787 30 0 - 0 0.0419 - 1 0.00127 - 2 0.0801 - 3 0.0102 - 4 0.131 - 7 0.26 - 8 0.0305 - 13 0.00635 - 14 0.00254 - 15 0.0152 - 18 0.0343 - 20 0.0267 - 21 0.0178 - 24 0.0127 - 26 0.0165 - 28 0.0394 - 29 0.0496 - 30 0.0267 - 31 0.0114 - 32 0.00508 - 33 0.033 - 34 0.00127 - 35 0.00127 - 37 0.00254 - 39 0.00127 - 41 0.0343 - 42 0.0114 - 44 0.00127 - 45 0.00381 - 47 0.0902 - - 9 19 8 0 - 0 0.158 - 7 0.263 - 13 0.0526 - 28 0.0526 - 29 0.158 - 30 0.0526 - 41 0.0526 - 47 0.211 - - 10 28 4 0 - 4 0.643 - 7 0.0357 - 18 0.25 - 20 0.0714 - - 13 4530 37 0 - 0 0.0232 - 1 0.000442 - 2 0.0433 - 3 0.00596 - 4 0.0656 - 7 0.201 - 8 0.0272 - 9 0.000221 - 10 0.000662 - 12 0.000221 - 13 0.0347 - 14 0.00177 - 15 0.034 - 18 0.0102 - 20 0.00927 - 21 0.0408 - 24 0.00419 - 25 0.000221 - 26 0.0682 - 28 0.0563 - 29 0.179 - 30 0.0143 - 31 0.015 - 32 0.00574 - 33 0.0232 - 34 0.000442 - 35 0.000442 - 37 0.0011 - 39 0.000442 - 40 0.0011 - 41 0.0219 - 42 0.07 - 43 0.00177 - 44 0.00287 - 45 0.00419 - 46 0.0011 - 47 0.0302 - - 14 4275 34 0 - 0 0.0262 - 2 0.106 - 3 0.00819 - 4 0.116 - 7 0.244 - 8 0.0952 - 9 0.000234 - 10 0.00257 - 13 0.0732 - 14 0.00444 - 15 0.0133 - 16 0.000234 - 18 0.0101 - 19 0.00211 - 20 0.00959 - 21 0.0428 - 24 0.00281 - 26 0.0414 - 28 0.018 - 29 0.0648 - 30 0.0131 - 31 0.0159 - 32 0.00327 - 33 0.00912 - 34 0.00211 - 37 0.000468 - 39 0.000468 - 41 0.0409 - 42 0.00795 - 43 0.000234 - 44 0.00234 - 45 0.00234 - 46 0.000234 - 47 0.0201 - - 15 275 26 0 - 0 0.0182 - 2 0.0291 - 3 0.00364 - 4 0.2 - 7 0.153 - 8 0.0327 - 13 0.0436 - 15 0.08 - 18 0.04 - 19 0.00364 - 20 0.0291 - 21 0.00727 - 26 0.0182 - 28 0.0473 - 29 0.0509 - 30 0.0109 - 31 0.0145 - 32 0.00364 - 33 0.0545 - 34 0.0109 - 41 0.0582 - 42 0.00727 - 44 0.00727 - 45 0.00364 - 46 0.00364 - 47 0.0691 - - 16 24 11 0 - 0 0.0417 - 2 0.0417 - 4 0.375 - 7 0.167 - 8 0.0417 - 28 0.0417 - 29 0.0833 - 30 0.0833 - 33 0.0417 - 46 0.0417 - 47 0.0417 - - 18 25 6 0 - 4 0.04 - 7 0.64 - 15 0.2 - 26 0.04 - 28 0.04 - 29 0.04 - - 21 20 6 0 - 2 0.05 - 4 0.1 - 7 0.7 - 20 0.05 - 41 0.05 - 44 0.05 - - 30 15 6 0 - 4 0.267 - 7 0.333 - 18 0.0667 - 20 0.0667 - 28 0.133 - 47 0.133 - - 31 22 12 0 - 0 0.0909 - 2 0.0455 - 4 0.0909 - 7 0.273 - 8 0.0455 - 13 0.136 - 20 0.0455 - 29 0.0909 - 30 0.0455 - 39 0.0455 - 41 0.0455 - 47 0.0455 - - 41 29 8 0 - 2 0.0345 - 3 0.0345 - 4 0.069 - 7 0.172 - 8 0.241 - 21 0.069 - 28 0.0345 - 41 0.345 - - 43 1 1 0 - 44 1 - - 45 9 6 0 - 2 0.222 - 4 0.222 - 7 0.222 - 15 0.111 - 20 0.111 - 28 0.111 - - 46 4 3 0 - 8 0.25 - 13 0.25 - 45 0.5 - - 47 4447 34 0 - 0 0.0324 - 1 0.00045 - 2 0.0322 - 3 0.0501 - 4 0.0369 - 7 0.422 - 8 0.0515 - 9 0.000899 - 10 0.000675 - 12 0.000225 - 13 0.0103 - 14 0.00652 - 15 0.00225 - 19 0.00112 - 20 0.000225 - 21 0.0376 - 24 0.000675 - 26 0.0911 - 28 0.00967 - 29 0.0902 - 30 0.0139 - 31 0.00607 - 32 0.00225 - 33 0.00472 - 34 0.00045 - 37 0.000899 - 38 0.00292 - 41 0.0573 - 42 0.00382 - 43 0.000225 - 44 0.00247 - 45 0.00337 - 46 0.00135 - 47 0.0232 - - 48 43 14 0 - 0 0.0233 - 4 0.233 - 7 0.163 - 8 0.0233 - 13 0.0698 - 15 0.0233 - 18 0.093 - 28 0.0233 - 29 0.0233 - 33 0.0233 - 37 0.0233 - 41 0.209 - 46 0.0233 - 47 0.0465 - - 54 7 4 0 - 2 0.143 - 4 0.429 - 7 0.286 - 8 0.143 - - 55 9 8 0 - 2 0.111 - 4 0.222 - 7 0.111 - 8 0.111 - 15 0.111 - 20 0.111 - 32 0.111 - 33 0.111 - - 4 80857 41 32 - 0 0.0477 - 1 0.000742 - 2 0.0329 - 3 0.0128 - 4 0.00155 - 5 2.47e-05 - 6 2.47e-05 - 7 0.398 - 8 0.00234 - 9 0.000247 - 10 0.000371 - 12 0.000408 - 13 0.0102 - 14 0.0123 - 15 0.00247 - 16 9.89e-05 - 17 0.00409 - 18 2.47e-05 - 19 0.00233 - 21 0.0171 - 22 0.002 - 23 1.24e-05 - 24 0.00694 - 26 0.0309 - 28 0.0629 - 29 0.0511 - 30 0.0334 - 31 0.0145 - 32 0.0125 - 33 0.0213 - 34 0.00146 - 35 0.00124 - 37 0.00651 - 40 4.95e-05 - 41 0.0794 - 42 0.0066 - 43 0.00042 - 44 0.00117 - 45 0.0123 - 46 0.0031 - 47 0.107 - - 2 16 6 0 - 7 0.312 - 26 0.0625 - 28 0.25 - 30 0.188 - 32 0.0625 - 47 0.125 - - 3 1180 26 0 - 0 0.0127 - 2 0.0314 - 3 0.00169 - 7 0.618 - 8 0.00169 - 13 0.00678 - 14 0.00254 - 15 0.000847 - 17 0.00169 - 21 0.00763 - 24 0.00254 - 26 0.0178 - 28 0.0356 - 29 0.0322 - 30 0.0322 - 31 0.00847 - 32 0.00339 - 33 0.00763 - 34 0.000847 - 37 0.00508 - 41 0.05 - 42 0.00763 - 44 0.00169 - 45 0.00254 - 46 0.00254 - 47 0.105 - - 4 71 16 0 - 0 0.0423 - 7 0.394 - 8 0.0141 - 13 0.0141 - 21 0.0423 - 24 0.0141 - 28 0.0845 - 29 0.0141 - 30 0.0563 - 31 0.0282 - 32 0.0423 - 33 0.0282 - 41 0.0282 - 42 0.0141 - 45 0.0563 - 47 0.127 - - 6 18 9 0 - 0 0.0556 - 2 0.111 - 7 0.389 - 8 0.0556 - 28 0.111 - 31 0.0556 - 35 0.0556 - 41 0.0556 - 47 0.111 - - 7 1 1 0 - 15 1 - - 8 17405 38 0 - 0 0.078 - 1 0.00109 - 2 0.0307 - 3 0.00167 - 4 0.000862 - 5 0.000115 - 7 0.426 - 8 0.00184 - 9 5.75e-05 - 10 0.000632 - 12 0.000402 - 13 0.00718 - 14 0.00431 - 15 0.00218 - 16 5.75e-05 - 17 0.00287 - 19 0.00247 - 21 0.0196 - 22 5.75e-05 - 24 0.00678 - 26 0.0298 - 28 0.0666 - 29 0.0525 - 30 0.0357 - 31 0.0159 - 32 0.0133 - 33 0.0219 - 34 0.000804 - 35 0.000919 - 37 0.00368 - 40 5.75e-05 - 41 0.0705 - 42 0.00672 - 43 0.000172 - 44 0.000689 - 45 0.0106 - 46 0.00195 - 47 0.0812 - - 9 397 24 0 - 0 0.0907 - 2 0.063 - 7 0.378 - 13 0.00504 - 14 0.00756 - 15 0.00756 - 16 0.00252 - 17 0.00252 - 19 0.0101 - 21 0.0126 - 24 0.00252 - 26 0.0327 - 28 0.0932 - 29 0.0403 - 30 0.0529 - 31 0.0126 - 32 0.0277 - 33 0.0428 - 37 0.00252 - 41 0.0479 - 42 0.00756 - 44 0.00252 - 45 0.00252 - 47 0.0529 - - 10 727 22 0 - 0 0.144 - 1 0.00275 - 2 0.0151 - 7 0.38 - 13 0.00275 - 17 0.00138 - 19 0.00138 - 21 0.0578 - 24 0.00138 - 26 0.0289 - 28 0.0385 - 29 0.0399 - 30 0.00825 - 31 0.0165 - 32 0.0206 - 33 0.0179 - 37 0.00138 - 41 0.0894 - 42 0.011 - 44 0.00275 - 45 0.0179 - 47 0.1 - - 12 2 2 0 - 0 0.5 - 2 0.5 - - 13 38560 39 0 - 0 0.0431 - 1 0.000726 - 2 0.0281 - 3 0.0249 - 4 0.00114 - 6 2.59e-05 - 7 0.377 - 8 0.00319 - 9 0.000441 - 10 0.000363 - 12 0.000441 - 13 0.0138 - 14 0.0218 - 15 0.00265 - 16 7.78e-05 - 17 0.00423 - 18 5.19e-05 - 19 0.00202 - 21 0.0182 - 22 0.00412 - 24 0.00747 - 26 0.0309 - 28 0.0659 - 29 0.0534 - 30 0.0347 - 31 0.0155 - 32 0.0119 - 33 0.0219 - 34 0.00187 - 35 0.00119 - 37 0.00778 - 40 2.59e-05 - 41 0.0783 - 42 0.00578 - 43 0.000622 - 44 0.00137 - 45 0.0108 - 46 0.00371 - 47 0.101 - - 14 5945 33 0 - 0 0.0192 - 2 0.0441 - 4 0.00404 - 7 0.376 - 8 0.00202 - 10 0.000336 - 12 0.000168 - 13 0.00673 - 14 0.00471 - 15 0.000505 - 16 0.000168 - 17 0.0116 - 19 0.000505 - 21 0.0104 - 23 0.000168 - 24 0.00976 - 26 0.031 - 28 0.0833 - 29 0.0474 - 30 0.0368 - 31 0.00908 - 32 0.0172 - 33 0.02 - 34 0.00118 - 35 0.0032 - 37 0.00622 - 41 0.076 - 42 0.00706 - 43 0.000168 - 44 0.00135 - 45 0.0163 - 46 0.00219 - 47 0.152 - - 15 8602 35 0 - 0 0.0117 - 1 0.000465 - 2 0.0398 - 3 0.000581 - 4 0.00221 - 7 0.483 - 8 0.000581 - 12 0.000698 - 13 0.00581 - 14 0.00174 - 15 0.00267 - 16 0.000116 - 17 0.00093 - 19 0.00105 - 21 0.00523 - 22 0.000116 - 24 0.00302 - 26 0.038 - 28 0.0367 - 29 0.031 - 30 0.0208 - 31 0.0086 - 32 0.00732 - 33 0.0166 - 34 0.00221 - 35 0.00105 - 37 0.0086 - 40 0.000116 - 41 0.114 - 42 0.00546 - 43 0.000116 - 44 0.000814 - 45 0.00802 - 46 0.0057 - 47 0.135 - - 16 411 25 0 - 0 0.00243 - 2 0.0706 - 4 0.00243 - 7 0.406 - 13 0.0243 - 14 0.00487 - 17 0.00243 - 21 0.0219 - 24 0.00973 - 26 0.0487 - 28 0.0535 - 29 0.0316 - 30 0.0219 - 31 0.0073 - 32 0.00487 - 33 0.0073 - 34 0.00487 - 35 0.00243 - 37 0.0292 - 40 0.00243 - 41 0.0925 - 42 0.00487 - 44 0.00243 - 45 0.0122 - 47 0.129 - - 19 14 8 0 - 2 0.143 - 7 0.214 - 21 0.0714 - 26 0.143 - 29 0.0714 - 41 0.0714 - 45 0.143 - 47 0.143 - - 20 23 9 0 - 7 0.304 - 21 0.087 - 24 0.087 - 28 0.174 - 30 0.0435 - 31 0.0435 - 32 0.13 - 35 0.0435 - 45 0.087 - - 21 134 19 0 - 0 0.231 - 2 0.0149 - 4 0.00746 - 7 0.291 - 14 0.0224 - 15 0.00746 - 19 0.0224 - 21 0.0448 - 24 0.0149 - 26 0.0224 - 28 0.0522 - 29 0.0299 - 30 0.0522 - 33 0.0299 - 37 0.00746 - 41 0.0746 - 42 0.0149 - 45 0.0373 - 47 0.0224 - - 22 13 7 0 - 0 0.0769 - 4 0.0769 - 7 0.462 - 28 0.0769 - 29 0.0769 - 30 0.154 - 33 0.0769 - - 23 34 11 0 - 0 0.206 - 2 0.0294 - 7 0.235 - 21 0.0294 - 26 0.0294 - 28 0.0294 - 29 0.0588 - 31 0.0882 - 42 0.0294 - 45 0.0588 - 47 0.206 - - 30 600 27 0 - 0 0.0817 - 1 0.00333 - 2 0.0267 - 7 0.398 - 8 0.00167 - 13 0.005 - 14 0.00167 - 15 0.00333 - 17 0.005 - 19 0.00167 - 21 0.015 - 24 0.01 - 26 0.0333 - 28 0.055 - 29 0.0433 - 30 0.0367 - 31 0.00833 - 32 0.0217 - 33 0.045 - 34 0.00167 - 37 0.00667 - 41 0.0767 - 42 0.00833 - 43 0.00167 - 45 0.00833 - 46 0.00167 - 47 0.0983 - - 31 594 25 0 - 0 0.0303 - 2 0.0354 - 4 0.00673 - 7 0.468 - 8 0.00168 - 9 0.00168 - 13 0.00842 - 14 0.00337 - 17 0.00337 - 19 0.00168 - 21 0.00673 - 22 0.00168 - 24 0.0118 - 26 0.0286 - 28 0.0724 - 29 0.0825 - 30 0.0488 - 31 0.0152 - 32 0.0168 - 33 0.0118 - 37 0.00673 - 41 0.0488 - 42 0.00842 - 45 0.00168 - 47 0.0774 - - 39 26 10 0 - 2 0.0769 - 7 0.5 - 13 0.0385 - 14 0.0385 - 21 0.0385 - 26 0.115 - 29 0.0769 - 30 0.0385 - 41 0.0385 - 47 0.0385 - - 44 28 10 0 - 0 0.0714 - 2 0.107 - 7 0.393 - 19 0.0357 - 21 0.0357 - 28 0.0357 - 30 0.0357 - 35 0.0357 - 41 0.0357 - 45 0.214 - - 45 444 26 0 - 0 0.0968 - 1 0.00901 - 2 0.0203 - 7 0.358 - 9 0.00225 - 13 0.027 - 14 0.0045 - 15 0.0113 - 16 0.00225 - 17 0.00676 - 19 0.0113 - 21 0.0158 - 24 0.0045 - 26 0.027 - 28 0.0676 - 29 0.0968 - 30 0.0495 - 31 0.045 - 32 0.00676 - 33 0.0518 - 37 0.00225 - 41 0.0293 - 42 0.0135 - 45 0.00225 - 46 0.00225 - 47 0.036 - - 47 2538 32 0 - 0 0.0303 - 2 0.0693 - 3 0.0146 - 4 0.00473 - 7 0.265 - 8 0.00197 - 10 0.000394 - 12 0.000394 - 13 0.00709 - 14 0.00512 - 15 0.00197 - 17 0.0106 - 19 0.0118 - 21 0.0296 - 24 0.00591 - 26 0.0209 - 28 0.0571 - 29 0.0201 - 30 0.0197 - 31 0.00906 - 32 0.0197 - 33 0.015 - 34 0.000394 - 35 0.00236 - 37 0.00591 - 41 0.0563 - 42 0.0146 - 43 0.00118 - 44 0.00355 - 45 0.0583 - 46 0.00197 - 47 0.235 - - 48 2419 31 0 - 0 0.0864 - 1 0.000413 - 2 0.0364 - 3 0.00165 - 4 0.000827 - 6 0.000413 - 7 0.329 - 8 0.00248 - 10 0.000827 - 12 0.000413 - 13 0.00537 - 14 0.000827 - 15 0.00661 - 17 0.000413 - 19 0.00331 - 21 0.0215 - 24 0.0103 - 26 0.0302 - 28 0.0566 - 29 0.127 - 30 0.0463 - 31 0.0265 - 32 0.012 - 33 0.0294 - 37 0.00248 - 41 0.0744 - 42 0.00951 - 43 0.000413 - 45 0.0112 - 46 0.000827 - 47 0.0661 - - 49 8 4 0 - 0 0.375 - 7 0.375 - 29 0.125 - 32 0.125 - - 54 240 13 0 - 0 0.0125 - 2 0.0125 - 7 0.292 - 13 0.00417 - 26 0.00833 - 28 0.00833 - 29 0.0208 - 30 0.0208 - 31 0.0167 - 33 0.0208 - 41 0.383 - 42 0.00417 - 47 0.196 - - 55 157 17 0 - 0 0.0318 - 2 0.00637 - 7 0.395 - 13 0.00637 - 19 0.00637 - 21 0.00637 - 24 0.0127 - 26 0.0318 - 28 0.0446 - 29 0.0637 - 30 0.0318 - 31 0.0318 - 32 0.00637 - 33 0.0318 - 34 0.00637 - 41 0.146 - 47 0.14 - - 56 123 14 0 - 0 0.065 - 2 0.0325 - 7 0.463 - 21 0.0244 - 26 0.0325 - 28 0.0732 - 30 0.0244 - 31 0.00813 - 32 0.0325 - 33 0.0244 - 41 0.114 - 42 0.0163 - 45 0.00813 - 47 0.0813 - - 58 10 6 0 - 0 0.1 - 7 0.4 - 28 0.1 - 29 0.1 - 45 0.2 - 47 0.1 - - 60 63 9 0 - 0 0.0476 - 2 0.0317 - 7 0.714 - 21 0.0159 - 26 0.0476 - 28 0.0952 - 29 0.0159 - 30 0.0159 - 41 0.0159 - - 68 43 11 0 - 0 0.0465 - 2 0.0233 - 4 0.0465 - 7 0.628 - 26 0.0465 - 28 0.0233 - 29 0.0233 - 30 0.0465 - 33 0.0465 - 41 0.0233 - 47 0.0465 - - 5 861 24 0 - 0 0.00581 - 2 0.0918 - 7 0.18 - 8 0.00465 - 10 0.00348 - 13 0.0186 - 14 0.00465 - 15 0.00232 - 16 0.00116 - 19 0.00232 - 21 0.029 - 28 0.0163 - 29 0.0395 - 30 0.00465 - 31 0.00232 - 32 0.0279 - 33 0.0151 - 34 0.00813 - 37 0.0267 - 41 0.143 - 42 0.00813 - 44 0.00232 - 45 0.167 - 47 0.195 - - 6 150 19 6 - 2 0.0133 - 3 0.00667 - 4 0.127 - 6 0.193 - 7 0.12 - 8 0.02 - 15 0.28 - 18 0.0133 - 19 0.00667 - 20 0.0133 - 25 0.0133 - 26 0.0133 - 28 0.0133 - 29 0.00667 - 32 0.00667 - 33 0.00667 - 41 0.0333 - 45 0.0667 - 47 0.0467 - - 6 29 12 0 - 2 0.0345 - 4 0.241 - 6 0.172 - 7 0.138 - 8 0.0345 - 15 0.0345 - 18 0.069 - 28 0.0345 - 29 0.0345 - 41 0.0345 - 45 0.069 - 47 0.103 - - 13 12 4 0 - 4 0.25 - 6 0.583 - 8 0.0833 - 15 0.0833 - - 14 7 3 0 - 3 0.143 - 6 0.714 - 7 0.143 - - 15 42 2 0 - 6 0.0476 - 15 0.952 - - 46 2 1 0 - 45 1 - - 47 53 14 0 - 2 0.0189 - 4 0.151 - 6 0.17 - 7 0.226 - 19 0.0189 - 20 0.0377 - 25 0.0377 - 26 0.0377 - 28 0.0189 - 32 0.0189 - 33 0.0189 - 41 0.0755 - 45 0.0943 - 47 0.0755 - - 7 318 24 10 - 0 0.044 - 2 0.0314 - 3 0.0157 - 4 0.00314 - 7 0.151 - 8 0.0126 - 10 0.00314 - 13 0.132 - 14 0.0975 - 15 0.0943 - 18 0.00314 - 21 0.0535 - 26 0.0283 - 28 0.0566 - 29 0.0409 - 30 0.022 - 31 0.022 - 32 0.00943 - 33 0.0252 - 35 0.00314 - 41 0.0472 - 42 0.00943 - 45 0.00943 - 47 0.0849 - - 3 47 13 0 - 0 0.0851 - 3 0.0638 - 7 0.468 - 13 0.0426 - 15 0.0213 - 21 0.0213 - 26 0.106 - 29 0.0213 - 30 0.0426 - 31 0.0213 - 41 0.0638 - 42 0.0213 - 47 0.0213 - - 4 30 11 0 - 0 0.167 - 7 0.233 - 15 0.1 - 21 0.1 - 26 0.0667 - 28 0.0333 - 31 0.0333 - 33 0.0667 - 41 0.1 - 45 0.0333 - 47 0.0667 - - 8 19 11 0 - 0 0.0526 - 4 0.0526 - 7 0.0526 - 8 0.0526 - 14 0.0526 - 21 0.105 - 26 0.0526 - 28 0.316 - 29 0.105 - 31 0.105 - 41 0.0526 - - 13 86 17 0 - 0 0.0116 - 2 0.0116 - 3 0.0116 - 7 0.0581 - 8 0.0233 - 10 0.0116 - 13 0.337 - 14 0.267 - 18 0.0116 - 21 0.0698 - 28 0.0116 - 29 0.0349 - 30 0.0116 - 32 0.0116 - 33 0.0233 - 41 0.0581 - 47 0.0349 - - 14 2 2 0 - 45 0.5 - 47 0.5 - - 15 49 8 0 - 7 0.0204 - 13 0.184 - 14 0.102 - 15 0.531 - 28 0.0204 - 30 0.0408 - 31 0.0612 - 47 0.0408 - - 21 3 2 0 - 2 0.333 - 28 0.667 - - 39 2 2 0 - 21 0.5 - 26 0.5 - - 47 67 17 0 - 0 0.0448 - 2 0.119 - 7 0.149 - 8 0.0149 - 13 0.0149 - 14 0.0149 - 21 0.0597 - 28 0.104 - 29 0.0746 - 30 0.0149 - 32 0.0299 - 33 0.0448 - 35 0.0149 - 41 0.0299 - 42 0.0149 - 45 0.0149 - 47 0.239 - - 55 6 5 0 - 7 0.333 - 13 0.167 - 14 0.167 - 41 0.167 - 42 0.167 - - 8 48850 43 29 - 0 0.0133 - 1 0.000184 - 2 0.0351 - 3 0.0255 - 4 0.357 - 6 0.000143 - 7 0.172 - 8 0.0864 - 9 0.00254 - 10 0.00328 - 12 6.14e-05 - 13 0.0137 - 14 0.00282 - 15 0.0132 - 16 0.000246 - 17 2.05e-05 - 18 0.0354 - 19 0.000676 - 20 0.0406 - 21 0.00948 - 22 0.00086 - 23 0.00102 - 24 0.00264 - 25 2.05e-05 - 26 0.0131 - 28 0.0268 - 29 0.0167 - 30 0.0198 - 31 0.0105 - 32 0.00571 - 33 0.0085 - 34 0.000655 - 35 0.000205 - 36 6.14e-05 - 37 0.00192 - 40 4.09e-05 - 41 0.0306 - 42 0.00268 - 43 0.000368 - 44 0.00086 - 45 0.0123 - 46 0.000512 - 47 0.0316 - - 2 152 23 0 - 0 0.00658 - 2 0.0132 - 3 0.0263 - 4 0.289 - 7 0.23 - 8 0.0395 - 9 0.00658 - 13 0.0132 - 15 0.0263 - 18 0.0263 - 20 0.0197 - 21 0.0132 - 24 0.00658 - 26 0.0263 - 28 0.0263 - 30 0.0197 - 32 0.0132 - 33 0.0197 - 41 0.0855 - 42 0.00658 - 44 0.00658 - 45 0.0526 - 47 0.0263 - - 3 710 19 0 - 0 0.00282 - 2 0.00282 - 3 0.00845 - 4 0.785 - 7 0.141 - 8 0.00282 - 14 0.00282 - 18 0.0183 - 20 0.0127 - 21 0.00141 - 26 0.00141 - 28 0.00282 - 29 0.00563 - 30 0.00282 - 32 0.00141 - 33 0.00141 - 41 0.00141 - 42 0.00282 - 45 0.00282 - - 4 67 13 0 - 0 0.134 - 2 0.0299 - 7 0.328 - 21 0.0597 - 24 0.0149 - 26 0.0149 - 28 0.164 - 29 0.0149 - 30 0.0597 - 37 0.0149 - 41 0.0299 - 45 0.0149 - 47 0.119 - - 6 2 2 0 - 3 0.5 - 8 0.5 - - 8 3996 36 0 - 0 0.0133 - 1 0.000501 - 2 0.0511 - 3 0.0198 - 4 0.362 - 7 0.183 - 8 0.0568 - 9 0.00025 - 10 0.0015 - 13 0.00701 - 14 0.000501 - 15 0.00475 - 18 0.0455 - 19 0.001 - 20 0.048 - 21 0.00551 - 22 0.000751 - 23 0.00025 - 24 0.00375 - 26 0.00976 - 28 0.0263 - 29 0.0235 - 30 0.0205 - 31 0.00826 - 32 0.00676 - 33 0.00826 - 35 0.000501 - 37 0.00225 - 40 0.00025 - 41 0.04 - 42 0.00601 - 43 0.000501 - 44 0.000501 - 45 0.01 - 46 0.00025 - 47 0.0313 - - 9 12 8 0 - 0 0.0833 - 2 0.0833 - 4 0.417 - 7 0.0833 - 18 0.0833 - 31 0.0833 - 45 0.0833 - 47 0.0833 - - 10 7 3 0 - 4 0.429 - 7 0.143 - 18 0.429 - - 13 26070 40 0 - 0 0.011 - 1 0.000153 - 2 0.024 - 3 0.0157 - 4 0.465 - 6 0.000192 - 7 0.112 - 8 0.0908 - 9 0.00226 - 10 0.00315 - 13 0.0171 - 14 0.00345 - 15 0.0185 - 16 0.000345 - 18 0.043 - 19 0.000575 - 20 0.0436 - 21 0.00832 - 22 0.000921 - 23 0.000806 - 24 0.00146 - 25 3.84e-05 - 26 0.00809 - 28 0.0181 - 29 0.0136 - 30 0.0134 - 31 0.00951 - 32 0.00326 - 33 0.0061 - 34 0.000614 - 35 0.000115 - 36 7.67e-05 - 37 0.00119 - 41 0.0252 - 42 0.00153 - 43 0.000422 - 44 0.000959 - 45 0.0114 - 46 0.00046 - 47 0.0233 - - 14 13431 41 0 - 0 0.0187 - 1 0.000223 - 2 0.0561 - 3 0.0497 - 4 0.12 - 6 0.000149 - 7 0.281 - 8 0.11 - 9 0.00439 - 10 0.00499 - 12 0.000223 - 13 0.00864 - 14 0.00127 - 15 0.00849 - 16 0.000149 - 18 0.0237 - 19 0.00067 - 20 0.0344 - 21 0.00834 - 22 0.000968 - 23 0.00119 - 24 0.00499 - 26 0.0237 - 28 0.0472 - 29 0.0201 - 30 0.0331 - 31 0.0135 - 32 0.0108 - 33 0.0134 - 34 0.000968 - 35 0.000298 - 36 7.45e-05 - 37 0.00328 - 40 7.45e-05 - 41 0.0369 - 42 0.00335 - 43 0.000298 - 44 0.00067 - 45 0.00752 - 46 0.000819 - 47 0.0462 - - 15 1891 29 0 - 0 0.00635 - 2 0.0212 - 3 0.028 - 4 0.366 - 7 0.24 - 8 0.0317 - 9 0.00159 - 10 0.000529 - 13 0.027 - 14 0.0111 - 15 0.01 - 18 0.0296 - 19 0.000529 - 20 0.0317 - 21 0.00687 - 24 0.000529 - 26 0.0169 - 28 0.0164 - 29 0.0196 - 30 0.0206 - 31 0.0169 - 32 0.00212 - 33 0.0074 - 37 0.00106 - 41 0.0365 - 42 0.0037 - 45 0.0037 - 46 0.000529 - 47 0.0418 - - 16 101 21 0 - 2 0.0594 - 3 0.0396 - 4 0.168 - 7 0.277 - 8 0.0396 - 10 0.0099 - 13 0.0297 - 15 0.0198 - 20 0.0396 - 21 0.0099 - 26 0.0297 - 28 0.0198 - 29 0.0099 - 30 0.0297 - 31 0.0198 - 32 0.0099 - 33 0.0198 - 41 0.0495 - 42 0.0198 - 45 0.0099 - 47 0.0891 - - 18 12 5 0 - 4 0.583 - 7 0.0833 - 8 0.0833 - 13 0.167 - 47 0.0833 - - 21 3 3 0 - 2 0.333 - 4 0.333 - 15 0.333 - - 30 120 24 0 - 0 0.00833 - 2 0.158 - 3 0.0333 - 4 0.267 - 7 0.15 - 8 0.0333 - 10 0.00833 - 13 0.00833 - 14 0.00833 - 15 0.00833 - 18 0.05 - 20 0.05 - 21 0.0167 - 24 0.00833 - 26 0.0167 - 28 0.0333 - 29 0.00833 - 30 0.0333 - 31 0.00833 - 32 0.00833 - 33 0.025 - 41 0.025 - 45 0.00833 - 47 0.025 - - 31 89 15 0 - 0 0.0225 - 2 0.0112 - 3 0.0112 - 4 0.258 - 7 0.247 - 8 0.124 - 13 0.0674 - 15 0.0337 - 18 0.0562 - 20 0.0337 - 21 0.0112 - 28 0.0225 - 29 0.0449 - 30 0.0337 - 47 0.0225 - - 39 13 2 0 - 4 0.923 - 19 0.0769 - - 41 312 24 0 - 0 0.0128 - 2 0.00962 - 3 0.00641 - 4 0.471 - 7 0.17 - 8 0.0417 - 15 0.00321 - 18 0.00641 - 20 0.0577 - 21 0.00641 - 23 0.00321 - 24 0.00321 - 26 0.0128 - 28 0.0128 - 29 0.00641 - 30 0.00962 - 31 0.00321 - 32 0.00962 - 33 0.016 - 34 0.00321 - 41 0.0641 - 42 0.00641 - 45 0.0192 - 47 0.0449 - - 43 3 3 0 - 2 0.333 - 4 0.333 - 44 0.333 - - 44 7 5 0 - 2 0.143 - 4 0.286 - 7 0.286 - 21 0.143 - 29 0.143 - - 45 95 14 0 - 0 0.0105 - 2 0.0211 - 3 0.0105 - 4 0.537 - 7 0.147 - 8 0.0526 - 13 0.0105 - 18 0.0316 - 20 0.0421 - 28 0.0421 - 30 0.0211 - 31 0.0105 - 41 0.0526 - 47 0.0105 - - 46 136 9 0 - 2 0.00735 - 4 0.00735 - 8 0.0221 - 16 0.00735 - 19 0.00735 - 20 0.00735 - 21 0.0147 - 41 0.0147 - 45 0.912 - - 47 1224 33 0 - 0 0.018 - 2 0.0359 - 3 0.0098 - 4 0.393 - 7 0.151 - 8 0.0237 - 9 0.000817 - 10 0.00163 - 13 0.0106 - 14 0.00408 - 18 0.000817 - 19 0.00163 - 20 0.0474 - 21 0.0637 - 22 0.00163 - 23 0.00817 - 24 0.00163 - 26 0.0147 - 28 0.0221 - 29 0.0327 - 30 0.0163 - 31 0.00817 - 32 0.00654 - 33 0.0106 - 34 0.00163 - 35 0.000817 - 37 0.0049 - 41 0.0408 - 42 0.00572 - 43 0.000817 - 44 0.00327 - 45 0.00654 - 47 0.0507 - - 48 199 22 0 - 0 0.0101 - 2 0.0201 - 3 0.00503 - 4 0.533 - 7 0.121 - 8 0.0452 - 17 0.00503 - 18 0.0653 - 20 0.0704 - 21 0.0151 - 23 0.00503 - 24 0.00503 - 26 0.00503 - 28 0.0101 - 30 0.0151 - 31 0.00503 - 32 0.0101 - 33 0.00503 - 41 0.0201 - 42 0.00503 - 45 0.00503 - 47 0.0201 - - 54 13 5 0 - 4 0.385 - 7 0.308 - 8 0.154 - 20 0.0769 - 29 0.0769 - - 55 22 9 0 - 2 0.0455 - 3 0.0455 - 4 0.455 - 7 0.0909 - 8 0.0455 - 18 0.0909 - 20 0.0909 - 21 0.0909 - 30 0.0455 - - 56 68 12 0 - 2 0.0147 - 3 0.0294 - 4 0.309 - 7 0.221 - 8 0.0441 - 20 0.0882 - 26 0.0441 - 28 0.0735 - 29 0.0294 - 30 0.0441 - 31 0.0294 - 41 0.0735 - - 58 17 5 0 - 0 0.118 - 4 0.588 - 7 0.176 - 24 0.0588 - 33 0.0588 - - 60 30 3 0 - 4 0.9 - 7 0.0333 - 20 0.0667 - - 68 40 12 0 - 2 0.025 - 4 0.475 - 7 0.15 - 8 0.025 - 20 0.025 - 26 0.05 - 28 0.075 - 29 0.025 - 30 0.025 - 37 0.025 - 41 0.05 - 47 0.05 - - 9 1597 31 14 - 0 0.0601 - 1 0.00125 - 2 0.0507 - 3 0.015 - 4 0.249 - 7 0.193 - 8 0.0106 - 12 0.000626 - 13 0.0025 - 14 0.00689 - 15 0.0025 - 16 0.000626 - 18 0.0113 - 19 0.0025 - 20 0.0144 - 21 0.0244 - 24 0.00626 - 26 0.0288 - 28 0.102 - 29 0.0394 - 30 0.0557 - 31 0.01 - 32 0.0276 - 33 0.0244 - 34 0.000626 - 37 0.000626 - 41 0.025 - 42 0.00313 - 43 0.000626 - 45 0.01 - 47 0.02 - - 2 4 4 0 - 0 0.25 - 7 0.25 - 28 0.25 - 41 0.25 - - 3 5 1 0 - 4 1 - - 8 103 16 0 - 0 0.0291 - 2 0.117 - 4 0.214 - 7 0.243 - 21 0.0194 - 24 0.00971 - 26 0.0777 - 28 0.0485 - 29 0.0583 - 30 0.0485 - 31 0.0194 - 32 0.0291 - 33 0.0194 - 41 0.0291 - 45 0.0194 - 47 0.0194 - - 13 734 28 0 - 0 0.0436 - 1 0.00136 - 2 0.0354 - 3 0.0109 - 4 0.384 - 7 0.147 - 8 0.00954 - 12 0.00136 - 13 0.00136 - 14 0.00817 - 15 0.00545 - 16 0.00136 - 18 0.0177 - 19 0.00545 - 20 0.0123 - 21 0.0123 - 24 0.0109 - 26 0.03 - 28 0.0858 - 29 0.0245 - 30 0.045 - 31 0.00545 - 32 0.0232 - 33 0.0204 - 41 0.0327 - 42 0.00545 - 45 0.00545 - 47 0.0136 - - 14 473 26 0 - 0 0.0402 - 2 0.0465 - 3 0.0275 - 4 0.0867 - 7 0.296 - 8 0.0148 - 13 0.00211 - 14 0.00423 - 18 0.0106 - 20 0.0169 - 21 0.0127 - 24 0.00211 - 26 0.0317 - 28 0.123 - 29 0.0613 - 30 0.0677 - 31 0.00846 - 32 0.0317 - 33 0.0296 - 34 0.00211 - 37 0.00211 - 41 0.0233 - 42 0.00211 - 43 0.00211 - 45 0.0148 - 47 0.0402 - - 15 39 8 0 - 2 0.0513 - 4 0.513 - 7 0.154 - 20 0.0513 - 28 0.103 - 29 0.0256 - 30 0.0769 - 41 0.0256 - - 16 2 2 0 - 8 0.5 - 29 0.5 - - 30 2 2 0 - 2 0.5 - 26 0.5 - - 41 17 7 0 - 4 0.471 - 7 0.235 - 20 0.0588 - 30 0.0588 - 31 0.0588 - 32 0.0588 - 33 0.0588 - - 45 3 3 0 - 0 0.333 - 4 0.333 - 33 0.333 - - 46 1 1 0 - 45 1 - - 47 201 18 0 - 0 0.194 - 1 0.00498 - 2 0.0896 - 3 0.0149 - 4 0.0746 - 7 0.109 - 8 0.00995 - 13 0.00995 - 14 0.0149 - 20 0.00498 - 21 0.109 - 28 0.154 - 29 0.0398 - 30 0.0647 - 31 0.0249 - 32 0.0398 - 33 0.0299 - 45 0.00995 - - 48 4 3 0 - 4 0.25 - 7 0.25 - 20 0.5 - - 56 5 4 0 - 7 0.2 - 28 0.2 - 30 0.4 - 47 0.2 - - 10 1526 27 9 - 0 0.00197 - 2 0.0262 - 3 0.019 - 4 0.479 - 7 0.106 - 8 0.00524 - 13 0.00262 - 14 0.000655 - 18 0.132 - 19 0.000655 - 20 0.0511 - 21 0.0059 - 24 0.00459 - 26 0.00328 - 28 0.0105 - 29 0.0151 - 30 0.00655 - 31 0.00262 - 32 0.00328 - 33 0.00721 - 34 0.00131 - 35 0.00131 - 37 0.00262 - 41 0.0256 - 42 0.00262 - 45 0.0177 - 47 0.0655 - - 3 13 2 0 - 4 0.923 - 7 0.0769 - - 8 156 15 0 - 2 0.0128 - 3 0.0449 - 4 0.429 - 7 0.147 - 8 0.00641 - 18 0.154 - 20 0.0897 - 21 0.00641 - 28 0.00641 - 29 0.00641 - 35 0.00641 - 41 0.0192 - 42 0.00641 - 45 0.0321 - 47 0.0321 - - 13 661 14 0 - 2 0.00756 - 3 0.0121 - 4 0.632 - 7 0.0242 - 8 0.00756 - 13 0.00151 - 18 0.219 - 19 0.00151 - 20 0.059 - 28 0.00151 - 33 0.00151 - 37 0.00151 - 41 0.00756 - 47 0.0227 - - 14 291 20 0 - 2 0.0447 - 3 0.0412 - 4 0.316 - 7 0.22 - 8 0.00687 - 13 0.00344 - 14 0.00344 - 18 0.0962 - 20 0.0481 - 21 0.00687 - 26 0.00687 - 29 0.00687 - 33 0.0103 - 34 0.00344 - 35 0.00344 - 37 0.00344 - 41 0.055 - 42 0.00344 - 45 0.0447 - 47 0.0756 - - 15 19 9 0 - 2 0.0526 - 3 0.0526 - 4 0.211 - 7 0.263 - 26 0.0526 - 28 0.0526 - 33 0.105 - 41 0.0526 - 47 0.158 - - 16 3 3 0 - 4 0.333 - 7 0.333 - 32 0.333 - - 31 3 3 0 - 3 0.333 - 18 0.333 - 20 0.333 - - 47 359 21 0 - 0 0.00836 - 2 0.0501 - 4 0.351 - 7 0.139 - 13 0.00557 - 20 0.0279 - 21 0.0167 - 24 0.0195 - 26 0.00557 - 28 0.0362 - 29 0.0557 - 30 0.0279 - 31 0.00836 - 32 0.0111 - 33 0.0139 - 34 0.00279 - 37 0.00279 - 41 0.039 - 42 0.00557 - 45 0.0195 - 47 0.153 - - 56 3 3 0 - 4 0.333 - 31 0.333 - 37 0.333 - - 12 5 4 0 - 4 0.4 - 15 0.2 - 45 0.2 - 46 0.2 - - 13 129892 43 24 - 0 0.0054 - 1 0.000123 - 2 0.0201 - 3 0.0473 - 4 0.298 - 6 0.000123 - 7 0.0813 - 8 0.21 - 9 0.00684 - 10 0.00527 - 12 3.85e-05 - 13 0.123 - 14 0.0094 - 15 0.0406 - 16 0.000762 - 18 0.0276 - 19 0.000362 - 20 0.0287 - 21 0.00234 - 22 5.39e-05 - 23 7.7e-06 - 24 0.000993 - 25 1.54e-05 - 26 0.0052 - 27 1.54e-05 - 28 0.0115 - 29 0.00598 - 30 0.0138 - 31 0.00949 - 32 0.00208 - 33 0.00347 - 34 0.000223 - 35 0.000108 - 36 1.54e-05 - 37 0.000908 - 40 0.0001 - 41 0.0179 - 42 0.00142 - 43 0.000508 - 44 0.000608 - 45 0.00449 - 46 0.00184 - 47 0.0122 - - 2 1627 31 0 - 0 0.0086 - 2 0.0172 - 3 0.00738 - 4 0.189 - 7 0.205 - 8 0.144 - 9 0.00553 - 10 0.00246 - 13 0.0688 - 14 0.00738 - 15 0.0277 - 16 0.00123 - 18 0.0332 - 20 0.0424 - 21 0.00307 - 24 0.00123 - 26 0.0117 - 28 0.0203 - 29 0.0086 - 30 0.0178 - 31 0.0135 - 32 0.00246 - 33 0.00676 - 37 0.000615 - 41 0.119 - 42 0.0043 - 43 0.00123 - 44 0.00123 - 45 0.00615 - 46 0.000615 - 47 0.0209 - - 3 92 11 0 - 3 0.0217 - 4 0.478 - 7 0.174 - 8 0.0435 - 13 0.0217 - 15 0.0109 - 18 0.163 - 20 0.0217 - 30 0.0109 - 41 0.0435 - 45 0.0109 - - 4 1 1 0 - 31 1 - - 8 268 24 0 - 0 0.00373 - 2 0.123 - 3 0.0336 - 4 0.243 - 7 0.127 - 8 0.097 - 9 0.00373 - 10 0.0112 - 13 0.104 - 14 0.00373 - 15 0.0373 - 18 0.0672 - 20 0.0299 - 26 0.00746 - 28 0.0187 - 29 0.0149 - 30 0.0149 - 31 0.00373 - 33 0.00373 - 37 0.00373 - 41 0.0261 - 42 0.00373 - 45 0.00746 - 47 0.0112 - - 10 1 1 0 - 45 1 - - 13 15006 38 0 - 0 0.004 - 1 0.0002 - 2 0.0364 - 3 0.0287 - 4 0.304 - 6 0.000267 - 7 0.0826 - 8 0.211 - 9 0.00553 - 10 0.0072 - 13 0.0804 - 14 0.00653 - 15 0.0508 - 16 0.0004 - 18 0.0394 - 19 0.0002 - 20 0.0337 - 21 0.00187 - 22 6.66e-05 - 24 0.0008 - 25 0.000133 - 26 0.00433 - 28 0.0114 - 29 0.00513 - 30 0.0114 - 31 0.011 - 32 0.0022 - 33 0.0046 - 35 0.0002 - 37 0.001 - 40 0.0004 - 41 0.028 - 42 0.00233 - 43 0.0006 - 44 0.000666 - 45 0.0076 - 46 0.0016 - 47 0.0133 - - 14 9907 35 0 - 0 0.00757 - 2 0.0784 - 3 0.0262 - 4 0.0705 - 7 0.178 - 8 0.229 - 9 0.0139 - 10 0.00737 - 13 0.0728 - 14 0.00262 - 15 0.0373 - 16 0.000101 - 18 0.0196 - 19 0.000303 - 20 0.0263 - 21 0.00313 - 23 0.000101 - 24 0.00444 - 26 0.0146 - 28 0.0333 - 29 0.013 - 30 0.028 - 31 0.0133 - 32 0.00616 - 33 0.0125 - 34 0.000808 - 35 0.000202 - 37 0.00384 - 41 0.0365 - 42 0.00303 - 43 0.000202 - 44 0.000505 - 45 0.00757 - 46 0.00212 - 47 0.0461 - - 15 788 27 0 - 0 0.00635 - 2 0.0127 - 3 0.0178 - 4 0.0787 - 7 0.085 - 8 0.184 - 13 0.221 - 14 0.0127 - 15 0.225 - 16 0.0152 - 18 0.0127 - 20 0.019 - 24 0.00127 - 26 0.00888 - 28 0.00381 - 29 0.0114 - 30 0.00888 - 31 0.00381 - 33 0.014 - 35 0.00127 - 37 0.00254 - 41 0.0292 - 42 0.00127 - 44 0.00254 - 45 0.00381 - 46 0.00254 - 47 0.0152 - - 16 9 7 0 - 2 0.222 - 4 0.222 - 7 0.111 - 13 0.111 - 14 0.111 - 15 0.111 - 20 0.111 - - 18 2901 26 0 - 0 0.00103 - 2 0.00483 - 3 0.00345 - 4 0.694 - 7 0.0476 - 8 0.0958 - 9 0.00276 - 10 0.00207 - 13 0.0589 - 14 0.00414 - 15 0.0269 - 19 0.000345 - 20 0.0203 - 21 0.000689 - 26 0.00483 - 28 0.00172 - 29 0.0031 - 30 0.00552 - 31 0.00172 - 32 0.00138 - 33 0.00138 - 41 0.00276 - 42 0.000345 - 44 0.000345 - 45 0.000689 - 47 0.0138 - - 20 2 2 0 - 7 0.5 - 26 0.5 - - 21 3 3 0 - 2 0.333 - 7 0.333 - 21 0.333 - - 26 2 2 0 - 3 0.5 - 29 0.5 - - 29 11 5 0 - 3 0.273 - 4 0.0909 - 7 0.0909 - 8 0.273 - 13 0.273 - - 30 102 12 0 - 2 0.186 - 4 0.412 - 7 0.0392 - 8 0.118 - 10 0.0294 - 13 0.0588 - 15 0.0392 - 18 0.0392 - 20 0.0196 - 31 0.0196 - 41 0.0294 - 45 0.0098 - - 31 13 5 0 - 7 0.538 - 8 0.154 - 13 0.0769 - 15 0.154 - 41 0.0769 - - 41 247 24 0 - 0 0.00405 - 2 0.0162 - 4 0.19 - 7 0.243 - 8 0.0729 - 9 0.00405 - 10 0.00405 - 13 0.0567 - 15 0.00405 - 18 0.0162 - 20 0.0364 - 21 0.00405 - 26 0.0162 - 28 0.0121 - 29 0.0121 - 30 0.0202 - 31 0.0162 - 32 0.00405 - 33 0.0202 - 41 0.174 - 42 0.0162 - 44 0.00405 - 45 0.0202 - 47 0.0324 - - 42 4 2 0 - 4 0.5 - 7 0.5 - - 43 15 3 0 - 2 0.0667 - 8 0.2 - 44 0.733 - - 45 36 10 0 - 2 0.0556 - 3 0.0556 - 4 0.389 - 7 0.25 - 8 0.111 - 15 0.0278 - 26 0.0278 - 30 0.0278 - 42 0.0278 - 47 0.0278 - - 46 101 7 0 - 4 0.0198 - 7 0.0099 - 8 0.307 - 13 0.119 - 15 0.0099 - 20 0.0198 - 45 0.515 - - 47 98717 41 0 - 0 0.0055 - 1 0.000132 - 2 0.0119 - 3 0.0547 - 4 0.312 - 6 0.000122 - 7 0.0697 - 8 0.213 - 9 0.00656 - 10 0.00492 - 12 5.06e-05 - 13 0.137 - 14 0.0107 - 15 0.0387 - 16 0.00079 - 18 0.0272 - 19 0.000405 - 20 0.0283 - 21 0.00239 - 22 6.08e-05 - 24 0.000709 - 26 0.00422 - 27 2.03e-05 - 28 0.00951 - 29 0.00538 - 30 0.013 - 31 0.0091 - 32 0.00169 - 33 0.00229 - 34 0.000213 - 35 8.1e-05 - 36 2.03e-05 - 37 0.000618 - 40 7.09e-05 - 41 0.0127 - 42 0.00106 - 43 0.000537 - 44 0.000476 - 45 0.00321 - 46 0.00193 - 47 0.00844 - - 48 12 4 0 - 4 0.667 - 7 0.0833 - 18 0.167 - 47 0.0833 - - 58 9 5 0 - 2 0.111 - 8 0.222 - 13 0.333 - 14 0.222 - 20 0.111 - - 14 59133 41 12 - 0 0.00551 - 1 8.46e-05 - 2 0.028 - 3 0.0954 - 4 0.101 - 6 0.000135 - 7 0.098 - 8 0.238 - 9 0.00913 - 10 0.00495 - 12 6.76e-05 - 13 0.172 - 14 0.0106 - 15 0.0368 - 16 0.000507 - 18 0.019 - 19 0.000287 - 20 0.0275 - 21 0.00211 - 22 1.69e-05 - 23 3.38e-05 - 24 0.00215 - 26 0.00883 - 28 0.0216 - 29 0.0107 - 30 0.0221 - 31 0.0124 - 32 0.00499 - 33 0.00504 - 34 0.00093 - 35 0.000237 - 36 3.38e-05 - 37 0.00277 - 40 6.76e-05 - 41 0.0213 - 42 0.00235 - 43 0.000541 - 44 0.000321 - 45 0.00424 - 46 0.00194 - 47 0.0282 - - 2 995 29 0 - 0 0.00603 - 2 0.0101 - 3 0.0141 - 4 0.112 - 7 0.22 - 8 0.166 - 9 0.0111 - 10 0.00503 - 13 0.112 - 14 0.00101 - 15 0.0211 - 18 0.0221 - 19 0.00101 - 20 0.0332 - 21 0.00402 - 24 0.00302 - 26 0.0121 - 28 0.0322 - 29 0.00503 - 30 0.0251 - 31 0.0121 - 32 0.00704 - 33 0.00603 - 35 0.00101 - 37 0.00201 - 41 0.109 - 42 0.00201 - 46 0.00201 - 47 0.0442 - - 7 1 1 0 - 21 1 - - 8 4 4 0 - 10 0.25 - 15 0.25 - 31 0.25 - 47 0.25 - - 13 1104 26 0 - 0 0.000906 - 2 0.0435 - 3 0.0154 - 4 0.302 - 7 0.0462 - 8 0.232 - 9 0.00181 - 10 0.00543 - 13 0.137 - 14 0.00996 - 15 0.067 - 18 0.0362 - 20 0.0272 - 21 0.000906 - 26 0.00181 - 28 0.00634 - 29 0.00181 - 30 0.00453 - 31 0.0127 - 33 0.00362 - 40 0.000906 - 41 0.0317 - 42 0.00181 - 44 0.000906 - 45 0.00272 - 47 0.00634 - - 14 561 28 0 - 0 0.00891 - 1 0.00178 - 2 0.082 - 3 0.0321 - 4 0.0731 - 7 0.152 - 8 0.225 - 9 0.00535 - 10 0.0125 - 13 0.0927 - 14 0.00891 - 15 0.0392 - 16 0.00178 - 18 0.0232 - 20 0.0214 - 21 0.00178 - 26 0.016 - 28 0.0107 - 29 0.0214 - 30 0.025 - 31 0.016 - 32 0.0125 - 33 0.00713 - 37 0.00535 - 41 0.0232 - 42 0.00891 - 45 0.00535 - 47 0.0677 - - 15 46 14 0 - 2 0.087 - 4 0.0652 - 7 0.174 - 8 0.0652 - 13 0.152 - 14 0.0217 - 15 0.217 - 24 0.0217 - 26 0.0217 - 30 0.0217 - 34 0.0217 - 37 0.0217 - 41 0.0435 - 47 0.0652 - - 18 545 28 0 - 0 0.00183 - 2 0.0183 - 3 0.0312 - 4 0.27 - 7 0.196 - 8 0.128 - 10 0.00734 - 13 0.0569 - 14 0.00917 - 15 0.0404 - 18 0.00734 - 20 0.0514 - 21 0.00183 - 24 0.00183 - 26 0.0202 - 28 0.0422 - 29 0.0183 - 30 0.0239 - 31 0.0147 - 32 0.00183 - 33 0.011 - 34 0.00183 - 37 0.0055 - 41 0.011 - 42 0.0055 - 45 0.00734 - 46 0.00183 - 47 0.0128 - - 21 2 2 0 - 7 0.5 - 45 0.5 - - 30 5 3 0 - 3 0.2 - 13 0.4 - 28 0.4 - - 41 126 20 0 - 3 0.00794 - 4 0.0794 - 7 0.23 - 8 0.0714 - 13 0.0952 - 14 0.00794 - 15 0.0159 - 18 0.0317 - 20 0.0397 - 21 0.00794 - 26 0.0159 - 28 0.0159 - 29 0.0159 - 30 0.0397 - 32 0.0159 - 33 0.00794 - 41 0.238 - 42 0.0317 - 45 0.0159 - 47 0.0159 - - 46 7 3 0 - 8 0.286 - 14 0.143 - 45 0.571 - - 47 55733 41 0 - 0 0.00562 - 1 7.18e-05 - 2 0.0276 - 3 0.1 - 4 0.0954 - 6 0.000144 - 7 0.095 - 8 0.241 - 9 0.0094 - 10 0.00484 - 12 7.18e-05 - 13 0.176 - 14 0.0108 - 15 0.0363 - 16 0.00052 - 18 0.0186 - 19 0.000287 - 20 0.0273 - 21 0.00208 - 22 1.79e-05 - 23 3.59e-05 - 24 0.00219 - 26 0.0087 - 28 0.0216 - 29 0.0108 - 30 0.0223 - 31 0.0124 - 32 0.00499 - 33 0.00497 - 34 0.000951 - 35 0.000233 - 36 3.59e-05 - 37 0.00278 - 40 5.38e-05 - 41 0.0191 - 42 0.00221 - 43 0.000574 - 44 0.000323 - 45 0.0042 - 46 0.00201 - 47 0.0281 - - 15 90066 40 28 - 0 0.00298 - 1 4.44e-05 - 2 0.0414 - 3 0.00516 - 4 0.0969 - 6 0.000544 - 7 0.163 - 8 0.0247 - 9 0.000611 - 10 0.000244 - 12 7.77e-05 - 13 0.0143 - 14 0.00192 - 15 0.379 - 16 0.00816 - 18 0.00975 - 19 0.000155 - 20 0.0042 - 21 0.00236 - 24 0.000744 - 25 2.22e-05 - 26 0.0111 - 28 0.00883 - 29 0.0172 - 30 0.00653 - 31 0.0057 - 32 0.00205 - 33 0.0132 - 34 0.00101 - 35 0.000489 - 36 2.22e-05 - 37 0.00244 - 40 0.000644 - 41 0.0659 - 42 0.00489 - 43 0.000533 - 44 0.00461 - 45 0.00521 - 46 0.00472 - 47 0.0883 - - 0 7 5 0 - 4 0.143 - 7 0.429 - 8 0.143 - 41 0.143 - 47 0.143 - - 2 1783 31 0 - 0 0.00112 - 2 0.0202 - 3 0.00449 - 4 0.0892 - 6 0.000561 - 7 0.192 - 8 0.0135 - 13 0.00953 - 14 0.0101 - 15 0.306 - 16 0.0107 - 18 0.0129 - 20 0.00449 - 21 0.00112 - 24 0.00224 - 26 0.0107 - 28 0.00729 - 29 0.00897 - 30 0.00897 - 31 0.00168 - 32 0.000561 - 33 0.0028 - 34 0.000561 - 37 0.00112 - 40 0.00449 - 41 0.183 - 42 0.00449 - 44 0.0028 - 45 0.00393 - 46 0.000561 - 47 0.0802 - - 3 170 13 0 - 2 0.0118 - 3 0.0235 - 4 0.494 - 7 0.118 - 8 0.0471 - 15 0.0529 - 18 0.0706 - 20 0.129 - 28 0.0118 - 33 0.00588 - 41 0.0176 - 45 0.00588 - 47 0.0118 - - 4 9 5 0 - 0 0.111 - 2 0.111 - 7 0.222 - 15 0.444 - 45 0.111 - - 6 42 14 0 - 0 0.0238 - 2 0.0238 - 4 0.0476 - 6 0.0714 - 7 0.0952 - 8 0.0476 - 13 0.0238 - 15 0.357 - 26 0.0238 - 30 0.0238 - 33 0.0476 - 40 0.0476 - 41 0.0476 - 47 0.119 - - 7 26 10 0 - 4 0.0769 - 7 0.0769 - 13 0.0385 - 14 0.0385 - 15 0.385 - 18 0.0385 - 26 0.0385 - 41 0.154 - 45 0.115 - 47 0.0385 - - 8 530 25 0 - 0 0.00189 - 2 0.0226 - 3 0.0245 - 4 0.219 - 7 0.117 - 8 0.0528 - 9 0.00377 - 10 0.00377 - 13 0.017 - 15 0.408 - 18 0.00566 - 20 0.0151 - 26 0.00189 - 28 0.00377 - 29 0.00755 - 30 0.00755 - 31 0.00566 - 32 0.00189 - 33 0.00566 - 34 0.00189 - 37 0.00189 - 41 0.0283 - 44 0.00189 - 45 0.00189 - 47 0.0396 - - 13 5143 34 0 - 0 0.00136 - 2 0.0212 - 3 0.0148 - 4 0.396 - 6 0.000194 - 7 0.0609 - 8 0.0791 - 9 0.00331 - 10 0.000972 - 13 0.00719 - 14 0.000778 - 15 0.278 - 16 0.00486 - 18 0.0282 - 19 0.000583 - 20 0.0249 - 21 0.00156 - 24 0.000583 - 26 0.0035 - 28 0.00681 - 29 0.00506 - 30 0.00817 - 31 0.00564 - 32 0.00156 - 33 0.00506 - 37 0.00117 - 40 0.000583 - 41 0.0124 - 42 0.00117 - 43 0.000194 - 44 0.00117 - 45 0.00136 - 46 0.000194 - 47 0.021 - - 14 2150 33 0 - 0 0.00465 - 2 0.0488 - 3 0.0512 - 4 0.107 - 7 0.158 - 8 0.0963 - 9 0.00884 - 10 0.00279 - 13 0.00186 - 14 0.00093 - 15 0.25 - 16 0.00186 - 18 0.00837 - 20 0.0163 - 21 0.00279 - 24 0.00186 - 26 0.0223 - 28 0.0219 - 29 0.0107 - 30 0.0163 - 31 0.00744 - 32 0.00279 - 33 0.00651 - 34 0.00093 - 36 0.000465 - 37 0.0014 - 41 0.047 - 42 0.00279 - 43 0.00093 - 44 0.0014 - 45 0.00233 - 46 0.00093 - 47 0.093 - - 15 33917 38 0 - 0 0.00433 - 1 2.95e-05 - 2 0.0472 - 3 0.00448 - 4 0.102 - 6 0.000383 - 7 0.168 - 8 0.0195 - 9 0.000206 - 10 0.000236 - 12 5.9e-05 - 13 0.0196 - 14 0.00162 - 15 0.265 - 16 0.00363 - 18 0.0144 - 19 0.000147 - 20 0.00419 - 21 0.00242 - 24 0.000885 - 26 0.0134 - 28 0.00867 - 29 0.0286 - 30 0.00678 - 31 0.00436 - 32 0.00236 - 33 0.0287 - 34 0.00115 - 35 0.000649 - 37 0.00327 - 40 0.000472 - 41 0.0754 - 42 0.00669 - 43 0.000118 - 44 0.00313 - 45 0.00566 - 46 0.0108 - 47 0.142 - - 16 1508 30 0 - 0 0.00265 - 2 0.059 - 3 0.0106 - 4 0.115 - 7 0.208 - 8 0.0232 - 13 0.00464 - 14 0.00133 - 15 0.273 - 16 0.00133 - 18 0.0199 - 20 0.00862 - 21 0.000663 - 24 0.00133 - 25 0.000663 - 26 0.00995 - 28 0.00597 - 29 0.00995 - 30 0.00862 - 31 0.00464 - 33 0.00597 - 34 0.000663 - 35 0.000663 - 37 0.00133 - 41 0.0603 - 42 0.0179 - 43 0.000663 - 44 0.000663 - 45 0.00663 - 47 0.137 - - 18 5065 34 0 - 0 0.0101 - 2 0.0369 - 3 0.00118 - 4 0.0539 - 7 0.243 - 8 0.00967 - 9 0.000197 - 13 0.00296 - 14 0.00079 - 15 0.351 - 16 0.00415 - 18 0.00079 - 19 0.000197 - 20 0.000592 - 21 0.00494 - 24 0.00257 - 26 0.017 - 28 0.0265 - 29 0.0186 - 30 0.0128 - 31 0.00731 - 32 0.00592 - 33 0.0113 - 34 0.000592 - 35 0.000395 - 36 0.000197 - 37 0.00138 - 41 0.0661 - 42 0.00415 - 43 0.000197 - 44 0.00118 - 45 0.00395 - 46 0.00237 - 47 0.0971 - - 19 6 3 0 - 7 0.333 - 15 0.5 - 45 0.167 - - 21 4 1 0 - 47 1 - - 29 4 3 0 - 4 0.5 - 15 0.25 - 20 0.25 - - 30 22 6 0 - 2 0.0455 - 4 0.273 - 8 0.0909 - 15 0.5 - 18 0.0455 - 29 0.0455 - - 40 80 12 0 - 2 0.0625 - 4 0.0625 - 7 0.15 - 13 0.0125 - 15 0.463 - 16 0.0375 - 18 0.0125 - 31 0.0125 - 41 0.075 - 44 0.05 - 45 0.0125 - 47 0.05 - - 41 441 25 0 - 0 0.00454 - 2 0.0635 - 3 0.00227 - 4 0.0385 - 7 0.413 - 8 0.00907 - 13 0.0204 - 14 0.00454 - 15 0.0794 - 16 0.00454 - 18 0.00907 - 20 0.00454 - 21 0.00454 - 26 0.0181 - 28 0.00907 - 29 0.00454 - 30 0.00907 - 31 0.00454 - 37 0.00227 - 40 0.00227 - 41 0.204 - 42 0.0136 - 44 0.00227 - 45 0.0068 - 47 0.0658 - - 43 18 4 0 - 4 0.0556 - 13 0.0556 - 15 0.5 - 44 0.389 - - 44 6 5 0 - 2 0.167 - 4 0.167 - 15 0.333 - 26 0.167 - 32 0.167 - - 45 26 8 0 - 3 0.0385 - 4 0.192 - 7 0.154 - 8 0.0385 - 15 0.423 - 33 0.0385 - 41 0.0769 - 45 0.0385 - - 46 51 8 0 - 4 0.0196 - 7 0.0196 - 8 0.0196 - 15 0.333 - 18 0.0196 - 28 0.0196 - 45 0.49 - 47 0.0784 - - 47 38960 39 0 - 0 0.00108 - 1 7.7e-05 - 2 0.0398 - 3 0.00198 - 4 0.0551 - 6 0.000796 - 7 0.158 - 8 0.0203 - 9 0.000231 - 10 2.57e-05 - 12 0.000128 - 13 0.0134 - 14 0.00218 - 15 0.515 - 16 0.0138 - 18 0.0037 - 19 0.000128 - 20 0.000385 - 21 0.00223 - 24 0.000282 - 25 2.57e-05 - 26 0.00893 - 28 0.00649 - 29 0.0102 - 30 0.00454 - 31 0.00685 - 32 0.00149 - 33 0.00249 - 34 0.00113 - 35 0.000488 - 37 0.00223 - 40 0.000719 - 41 0.0599 - 42 0.00357 - 43 0.001 - 44 0.00706 - 45 0.0049 - 46 0.0011 - 47 0.0488 - - 48 41 7 0 - 4 0.146 - 7 0.0488 - 8 0.0244 - 15 0.707 - 18 0.0244 - 28 0.0244 - 47 0.0244 - - 54 5 3 0 - 4 0.6 - 7 0.2 - 47 0.2 - - 55 2 2 0 - 3 0.5 - 8 0.5 - - 58 35 7 0 - 2 0.0571 - 4 0.0857 - 7 0.0857 - 8 0.0857 - 15 0.629 - 20 0.0286 - 30 0.0286 - - 68 6 2 0 - 4 0.5 - 7 0.5 - - 16 2650 32 9 - 0 0.00189 - 2 0.0325 - 3 0.0136 - 4 0.156 - 7 0.0634 - 8 0.0408 - 9 0.000755 - 10 0.00113 - 13 0.00453 - 14 0.000755 - 15 0.57 - 16 0.0158 - 18 0.0125 - 19 0.000377 - 20 0.00189 - 21 0.0034 - 26 0.00377 - 28 0.00453 - 29 0.00113 - 30 0.00415 - 31 0.00151 - 32 0.000377 - 33 0.00226 - 34 0.000377 - 37 0.00113 - 40 0.00189 - 41 0.0208 - 42 0.00189 - 44 0.00113 - 45 0.00528 - 46 0.000377 - 47 0.0298 - - 2 111 10 0 - 3 0.00901 - 4 0.468 - 7 0.0631 - 8 0.018 - 15 0.288 - 18 0.00901 - 26 0.018 - 41 0.0541 - 45 0.018 - 47 0.0541 - - 8 8 3 0 - 3 0.125 - 15 0.75 - 45 0.125 - - 13 94 10 0 - 2 0.0426 - 3 0.0106 - 4 0.0638 - 7 0.0106 - 8 0.0426 - 13 0.0106 - 15 0.787 - 16 0.0106 - 20 0.0106 - 41 0.0106 - - 14 27 7 0 - 2 0.111 - 4 0.111 - 7 0.0741 - 15 0.593 - 16 0.037 - 28 0.037 - 47 0.037 - - 15 731 19 0 - 0 0.00137 - 2 0.0369 - 4 0.0301 - 7 0.0451 - 8 0.00274 - 13 0.0041 - 15 0.774 - 16 0.00684 - 18 0.0301 - 20 0.00274 - 21 0.00274 - 26 0.00137 - 29 0.00137 - 30 0.00137 - 33 0.00274 - 40 0.00547 - 41 0.0219 - 45 0.00137 - 47 0.0274 - - 16 42 11 0 - 3 0.143 - 4 0.119 - 7 0.119 - 8 0.119 - 15 0.167 - 26 0.0238 - 28 0.0238 - 41 0.0714 - 42 0.0238 - 45 0.0238 - 47 0.167 - - 18 66 8 0 - 2 0.0152 - 4 0.439 - 7 0.0303 - 8 0.0303 - 15 0.439 - 20 0.0152 - 26 0.0152 - 47 0.0152 - - 41 8 4 0 - 7 0.125 - 15 0.25 - 41 0.5 - 42 0.125 - - 47 1553 32 0 - 0 0.00258 - 2 0.0328 - 3 0.0174 - 4 0.191 - 7 0.0753 - 8 0.0599 - 9 0.00129 - 10 0.00193 - 13 0.00515 - 14 0.00129 - 15 0.495 - 16 0.0225 - 18 0.00644 - 19 0.000644 - 20 0.000644 - 21 0.00451 - 26 0.00322 - 28 0.00644 - 29 0.00129 - 30 0.00644 - 31 0.00258 - 32 0.000644 - 33 0.00258 - 34 0.000644 - 37 0.00193 - 40 0.000644 - 41 0.0161 - 42 0.00193 - 44 0.00193 - 45 0.0058 - 46 0.000644 - 47 0.0283 - - 17 321 24 2 - 0 0.0592 - 1 0.00312 - 2 0.0436 - 7 0.364 - 8 0.00312 - 9 0.00312 - 13 0.00623 - 14 0.00623 - 15 0.00312 - 19 0.00623 - 21 0.0343 - 24 0.00935 - 26 0.0218 - 28 0.103 - 29 0.0498 - 30 0.0498 - 31 0.0374 - 32 0.0156 - 33 0.0218 - 37 0.0125 - 41 0.0405 - 42 0.00312 - 45 0.0187 - 47 0.0841 - - 20 19 9 0 - 0 0.0526 - 7 0.316 - 26 0.0526 - 28 0.158 - 29 0.105 - 30 0.158 - 32 0.0526 - 42 0.0526 - 47 0.0526 - - 55 18 11 0 - 0 0.0556 - 2 0.0556 - 7 0.333 - 21 0.0556 - 26 0.111 - 28 0.0556 - 30 0.0556 - 31 0.0556 - 37 0.111 - 41 0.0556 - 47 0.0556 - - 18 8667 14 1 - 0 0.000115 - 3 0.00288 - 6 0.000231 - 8 0.00138 - 13 0.335 - 14 0.0631 - 15 0.587 - 16 0.00762 - 19 0.000808 - 21 0.000692 - 28 0.000577 - 30 0.000115 - 31 0.000346 - 32 0.000115 - - 13 4 4 0 - 13 0.25 - 14 0.25 - 15 0.25 - 21 0.25 - - 19 17428 40 9 - 0 0.00947 - 1 0.000115 - 2 0.0516 - 3 0.00138 - 4 0.0023 - 5 5.74e-05 - 7 0.171 - 8 0.00482 - 9 0.000402 - 10 0.000574 - 12 0.00304 - 13 0.0332 - 14 0.0155 - 15 0.00419 - 16 0.00023 - 18 5.74e-05 - 19 0.00161 - 21 0.0168 - 22 0.000402 - 23 5.74e-05 - 24 0.000115 - 26 0.00637 - 27 5.74e-05 - 28 0.0543 - 29 0.101 - 30 0.0205 - 31 0.0106 - 32 0.0237 - 33 0.0276 - 34 0.00861 - 35 0.0122 - 37 0.0274 - 40 5.74e-05 - 41 0.12 - 42 0.011 - 43 0.000516 - 44 0.00161 - 45 0.0876 - 46 0.0315 - 47 0.139 - - 2 7 5 0 - 2 0.286 - 7 0.286 - 26 0.143 - 34 0.143 - 41 0.143 - - 8 10 7 0 - 7 0.1 - 21 0.1 - 28 0.1 - 29 0.2 - 30 0.3 - 33 0.1 - 45 0.1 - - 13 15 7 0 - 2 0.0667 - 7 0.267 - 28 0.133 - 29 0.333 - 32 0.0667 - 33 0.0667 - 47 0.0667 - - 14 6 5 0 - 4 0.167 - 7 0.333 - 41 0.167 - 45 0.167 - 47 0.167 - - 15 4 4 0 - 4 0.25 - 15 0.25 - 18 0.25 - 47 0.25 - - 18 7 5 0 - 26 0.143 - 28 0.143 - 30 0.286 - 41 0.286 - 42 0.143 - - 41 1 1 0 - 15 1 - - 46 1 1 0 - 8 1 - - 48 4 3 0 - 7 0.5 - 33 0.25 - 41 0.25 - - 20 8397 36 20 - 0 0.0151 - 1 0.000357 - 2 0.0497 - 3 0.000357 - 4 0.00691 - 7 0.425 - 8 0.00214 - 9 0.000238 - 10 0.000119 - 12 0.000238 - 13 0.00429 - 14 0.00155 - 15 0.00131 - 16 0.000119 - 17 0.0031 - 18 0.000238 - 19 0.000238 - 21 0.00893 - 24 0.0168 - 26 0.0355 - 28 0.134 - 29 0.0905 - 30 0.0537 - 31 0.022 - 32 0.0139 - 33 0.0257 - 34 0.000834 - 35 0.00143 - 37 0.00631 - 41 0.025 - 42 0.00441 - 43 0.000119 - 44 0.000715 - 45 0.00965 - 46 0.00131 - 47 0.0381 - - 3 122 14 0 - 0 0.0164 - 2 0.0902 - 7 0.549 - 13 0.0082 - 15 0.0082 - 26 0.041 - 28 0.082 - 29 0.107 - 30 0.0246 - 31 0.0082 - 32 0.0082 - 33 0.0082 - 45 0.0082 - 47 0.041 - - 8 1980 30 0 - 0 0.0232 - 2 0.0399 - 3 0.000505 - 4 0.00253 - 7 0.483 - 8 0.00202 - 9 0.000505 - 13 0.00253 - 14 0.00101 - 15 0.00202 - 16 0.000505 - 17 0.00101 - 19 0.000505 - 21 0.00808 - 24 0.0121 - 26 0.0348 - 28 0.122 - 29 0.0884 - 30 0.05 - 31 0.0197 - 32 0.0136 - 33 0.0242 - 35 0.000505 - 37 0.00354 - 41 0.0217 - 42 0.00707 - 44 0.00101 - 45 0.00707 - 46 0.00101 - 47 0.0258 - - 9 23 6 0 - 2 0.0435 - 7 0.696 - 28 0.0435 - 29 0.087 - 41 0.0435 - 47 0.087 - - 10 78 15 0 - 0 0.0641 - 2 0.0256 - 7 0.449 - 8 0.0128 - 14 0.0128 - 26 0.0897 - 28 0.0256 - 29 0.0513 - 30 0.0256 - 31 0.0256 - 32 0.0128 - 37 0.0256 - 41 0.115 - 42 0.0128 - 47 0.0513 - - 13 3723 32 0 - 0 0.0142 - 2 0.047 - 4 0.00967 - 7 0.385 - 8 0.00161 - 9 0.000269 - 12 0.000537 - 13 0.00537 - 14 0.00161 - 15 0.00161 - 17 0.00322 - 18 0.000537 - 19 0.000269 - 21 0.0094 - 24 0.0172 - 26 0.033 - 28 0.132 - 29 0.107 - 30 0.0543 - 31 0.0277 - 32 0.0126 - 33 0.0312 - 34 0.00134 - 35 0.00134 - 37 0.00779 - 41 0.0263 - 42 0.00349 - 43 0.000269 - 44 0.000806 - 45 0.0145 - 46 0.00134 - 47 0.0486 - - 14 1627 27 0 - 0 0.00922 - 1 0.00184 - 2 0.0719 - 4 0.00676 - 7 0.406 - 8 0.00369 - 10 0.000615 - 13 0.00307 - 14 0.00246 - 17 0.00676 - 21 0.0117 - 24 0.0252 - 26 0.0363 - 28 0.154 - 29 0.0615 - 30 0.0639 - 31 0.0191 - 32 0.024 - 33 0.0234 - 34 0.000615 - 35 0.00307 - 37 0.00553 - 41 0.024 - 42 0.00492 - 45 0.00492 - 46 0.00123 - 47 0.0252 - - 15 368 17 0 - 0 0.00272 - 2 0.0272 - 4 0.00815 - 7 0.478 - 13 0.00272 - 24 0.0136 - 26 0.0408 - 28 0.163 - 29 0.111 - 30 0.0489 - 31 0.00815 - 33 0.0163 - 35 0.00272 - 37 0.0109 - 41 0.0109 - 45 0.00272 - 47 0.0516 - - 21 5 4 0 - 0 0.4 - 7 0.2 - 30 0.2 - 41 0.2 - - 29 1 1 0 - 42 1 - - 30 55 11 0 - 2 0.0727 - 7 0.436 - 8 0.0182 - 21 0.0182 - 24 0.0727 - 26 0.0364 - 28 0.218 - 29 0.0182 - 30 0.0545 - 33 0.0182 - 41 0.0364 - - 31 52 13 0 - 0 0.0192 - 2 0.0385 - 7 0.442 - 24 0.0192 - 26 0.0577 - 28 0.173 - 29 0.0962 - 30 0.0385 - 31 0.0192 - 37 0.0192 - 41 0.0192 - 46 0.0192 - 47 0.0385 - - 43 1 1 0 - 44 1 - - 44 5 3 0 - 7 0.6 - 32 0.2 - 45 0.2 - - 45 40 10 0 - 2 0.05 - 7 0.4 - 26 0.1 - 28 0.1 - 29 0.075 - 30 0.125 - 31 0.025 - 33 0.05 - 41 0.025 - 47 0.05 - - 47 34 12 0 - 0 0.0294 - 2 0.0588 - 3 0.0588 - 7 0.5 - 26 0.0294 - 28 0.0294 - 29 0.0294 - 30 0.0588 - 31 0.0294 - 33 0.0294 - 41 0.0294 - 47 0.118 - - 48 185 19 0 - 0 0.00541 - 2 0.027 - 4 0.00541 - 7 0.465 - 13 0.0162 - 17 0.00541 - 21 0.0216 - 24 0.0108 - 26 0.0216 - 28 0.195 - 29 0.0811 - 30 0.0486 - 31 0.0108 - 32 0.00541 - 33 0.0108 - 41 0.0378 - 45 0.00541 - 46 0.00541 - 47 0.0216 - - 54 23 6 0 - 2 0.13 - 7 0.522 - 13 0.0435 - 26 0.087 - 28 0.087 - 47 0.13 - - 56 36 12 0 - 2 0.0278 - 4 0.0278 - 7 0.5 - 26 0.0556 - 28 0.167 - 29 0.0278 - 31 0.0278 - 33 0.0278 - 34 0.0278 - 37 0.0278 - 41 0.0278 - 47 0.0556 - - 60 7 4 0 - 2 0.143 - 7 0.571 - 26 0.143 - 30 0.143 - - 68 4 3 0 - 4 0.25 - 7 0.5 - 28 0.25 - - 21 1703 33 27 - 0 0.102 - 1 0.00176 - 2 0.0552 - 3 0.0182 - 4 0.0804 - 7 0.203 - 8 0.00411 - 10 0.00117 - 12 0.000587 - 13 0.0393 - 14 0.0252 - 15 0.0153 - 18 0.00117 - 19 0.00294 - 20 0.00294 - 21 0.0687 - 23 0.000587 - 24 0.00646 - 26 0.00763 - 28 0.0399 - 29 0.0341 - 30 0.0164 - 31 0.0188 - 32 0.00881 - 33 0.0241 - 34 0.00411 - 37 0.00528 - 41 0.0781 - 42 0.017 - 44 0.00294 - 45 0.0153 - 46 0.00117 - 47 0.0981 - - 2 4 2 0 - 0 0.25 - 7 0.75 - - 3 108 17 0 - 0 0.13 - 1 0.00926 - 2 0.0648 - 7 0.296 - 13 0.0185 - 15 0.037 - 21 0.0463 - 24 0.00926 - 26 0.00926 - 28 0.0463 - 29 0.13 - 32 0.00926 - 33 0.0278 - 37 0.00926 - 41 0.0648 - 44 0.00926 - 47 0.0833 - - 4 458 23 0 - 0 0.138 - 1 0.00437 - 2 0.0852 - 3 0.00437 - 7 0.17 - 13 0.0524 - 14 0.0306 - 15 0.0131 - 21 0.048 - 24 0.00873 - 28 0.0218 - 29 0.0349 - 30 0.024 - 31 0.0284 - 32 0.00873 - 33 0.0328 - 34 0.00437 - 37 0.00218 - 41 0.105 - 42 0.024 - 45 0.0197 - 46 0.00218 - 47 0.138 - - 7 11 7 0 - 0 0.0909 - 7 0.182 - 14 0.364 - 21 0.0909 - 24 0.0909 - 30 0.0909 - 42 0.0909 - - 8 298 28 0 - 0 0.094 - 2 0.0235 - 3 0.0101 - 4 0.225 - 7 0.124 - 8 0.00671 - 10 0.00336 - 13 0.0268 - 14 0.0168 - 15 0.0134 - 18 0.00671 - 19 0.00336 - 20 0.0168 - 21 0.057 - 24 0.0101 - 26 0.0168 - 28 0.057 - 29 0.0436 - 30 0.0268 - 31 0.0101 - 32 0.0201 - 33 0.0302 - 37 0.0101 - 41 0.047 - 42 0.0101 - 45 0.0268 - 46 0.00336 - 47 0.0604 - - 9 27 12 0 - 0 0.148 - 4 0.0741 - 7 0.259 - 8 0.037 - 15 0.037 - 21 0.037 - 26 0.0741 - 28 0.0741 - 29 0.037 - 30 0.0741 - 33 0.037 - 41 0.111 - - 10 5 1 0 - 4 1 - - 13 130 21 0 - 0 0.115 - 2 0.0231 - 3 0.0231 - 4 0.0615 - 7 0.192 - 8 0.00769 - 13 0.0308 - 14 0.0154 - 15 0.0231 - 21 0.0538 - 26 0.00769 - 28 0.0231 - 29 0.0154 - 30 0.00769 - 31 0.0231 - 33 0.0154 - 37 0.0154 - 41 0.154 - 42 0.0231 - 44 0.00769 - 47 0.162 - - 14 42 13 0 - 0 0.0714 - 2 0.119 - 7 0.0952 - 13 0.0238 - 15 0.0476 - 19 0.0238 - 21 0.0476 - 33 0.0238 - 34 0.0238 - 41 0.262 - 42 0.0238 - 45 0.0476 - 47 0.19 - - 15 57 11 0 - 2 0.0351 - 3 0.263 - 7 0.0526 - 13 0.105 - 14 0.0702 - 28 0.0175 - 31 0.0175 - 32 0.0351 - 41 0.193 - 42 0.0175 - 47 0.193 - - 16 5 3 0 - 2 0.4 - 15 0.4 - 21 0.2 - - 17 8 5 0 - 7 0.25 - 21 0.125 - 29 0.125 - 33 0.125 - 47 0.375 - - 18 4 1 0 - 13 1 - - 19 3 3 0 - 7 0.333 - 41 0.333 - 45 0.333 - - 20 17 8 0 - 0 0.0588 - 2 0.118 - 7 0.235 - 21 0.118 - 28 0.176 - 41 0.118 - 44 0.0588 - 47 0.118 - - 21 57 20 0 - 0 0.0702 - 2 0.0877 - 4 0.0175 - 7 0.123 - 8 0.0175 - 13 0.0175 - 14 0.0526 - 15 0.0351 - 21 0.0351 - 28 0.158 - 29 0.0351 - 30 0.0175 - 31 0.0702 - 32 0.0351 - 33 0.0351 - 34 0.0175 - 41 0.0175 - 42 0.0351 - 44 0.0175 - 47 0.105 - - 22 8 6 0 - 0 0.25 - 4 0.125 - 7 0.125 - 19 0.25 - 41 0.125 - 47 0.125 - - 28 3 3 0 - 0 0.333 - 45 0.333 - 47 0.333 - - 30 5 4 0 - 0 0.2 - 2 0.4 - 4 0.2 - 28 0.2 - - 31 26 9 0 - 0 0.115 - 3 0.0385 - 4 0.423 - 7 0.192 - 8 0.0385 - 30 0.0385 - 37 0.0385 - 41 0.0385 - 47 0.0769 - - 39 2 2 0 - 2 0.5 - 28 0.5 - - 40 2 1 0 - 3 1 - - 47 369 26 0 - 0 0.0623 - 2 0.0379 - 3 0.0108 - 4 0.106 - 7 0.347 - 8 0.00271 - 10 0.00271 - 12 0.00271 - 13 0.0461 - 14 0.0244 - 15 0.00542 - 19 0.00271 - 21 0.144 - 23 0.00271 - 24 0.00542 - 26 0.0108 - 28 0.0379 - 29 0.0244 - 30 0.00542 - 31 0.0217 - 33 0.0108 - 34 0.00542 - 37 0.00271 - 41 0.019 - 45 0.00813 - 47 0.0515 - - 48 7 5 0 - 0 0.286 - 4 0.143 - 41 0.143 - 42 0.143 - 45 0.286 - - 49 2 2 0 - 33 0.5 - 42 0.5 - - 55 30 12 0 - 0 0.167 - 2 0.0667 - 7 0.1 - 14 0.0333 - 21 0.1 - 28 0.0333 - 30 0.0333 - 33 0.0333 - 41 0.133 - 42 0.167 - 44 0.0333 - 47 0.1 - - 56 3 3 0 - 0 0.333 - 4 0.333 - 34 0.333 - - 22 205 23 5 - 0 0.039 - 2 0.0195 - 3 0.00488 - 4 0.0634 - 7 0.0585 - 8 0.0146 - 13 0.146 - 14 0.0585 - 15 0.0634 - 16 0.00488 - 19 0.00488 - 21 0.0683 - 24 0.0146 - 26 0.00488 - 28 0.0293 - 29 0.0634 - 30 0.0293 - 31 0.0634 - 32 0.00976 - 33 0.0244 - 41 0.0195 - 45 0.0146 - 47 0.18 - - 4 128 16 0 - 0 0.00781 - 2 0.0156 - 3 0.00781 - 7 0.0156 - 8 0.0234 - 13 0.234 - 14 0.0859 - 15 0.102 - 16 0.00781 - 19 0.00781 - 21 0.0391 - 24 0.00781 - 29 0.0859 - 31 0.0781 - 41 0.0156 - 47 0.266 - - 8 34 14 0 - 0 0.0588 - 2 0.0588 - 4 0.265 - 7 0.147 - 14 0.0294 - 21 0.0294 - 24 0.0294 - 28 0.0294 - 30 0.118 - 31 0.0294 - 33 0.0294 - 41 0.0588 - 45 0.0588 - 47 0.0588 - - 13 4 4 0 - 0 0.25 - 4 0.25 - 26 0.25 - 47 0.25 - - 47 34 12 0 - 0 0.118 - 4 0.0588 - 7 0.118 - 21 0.235 - 24 0.0294 - 28 0.0882 - 29 0.0588 - 30 0.0294 - 31 0.0588 - 32 0.0588 - 33 0.118 - 45 0.0294 - - 48 3 3 0 - 4 0.333 - 7 0.333 - 28 0.333 - - 23 73 13 2 - 0 0.0411 - 2 0.0685 - 4 0.466 - 7 0.151 - 8 0.0137 - 13 0.0274 - 18 0.0137 - 20 0.0137 - 29 0.0137 - 32 0.0137 - 33 0.0137 - 41 0.0548 - 47 0.11 - - 8 50 11 0 - 0 0.06 - 2 0.04 - 4 0.6 - 7 0.1 - 8 0.02 - 13 0.02 - 18 0.02 - 20 0.02 - 32 0.02 - 41 0.02 - 47 0.08 - - 47 19 8 0 - 2 0.105 - 4 0.211 - 7 0.263 - 13 0.0526 - 29 0.0526 - 33 0.0526 - 41 0.105 - 47 0.158 - - 24 4 3 0 - 22 0.25 - 24 0.25 - 30 0.5 - - 25 14 3 0 - 15 0.0714 - 42 0.0714 - 47 0.857 - - 26 6 4 0 - 3 0.333 - 13 0.333 - 21 0.167 - 47 0.167 - - 27 8 5 0 - 0 0.125 - 4 0.125 - 26 0.125 - 30 0.125 - 45 0.5 - - 28 126 20 5 - 0 0.0317 - 2 0.0952 - 4 0.0159 - 7 0.0159 - 12 0.00794 - 13 0.00794 - 14 0.00794 - 19 0.00794 - 21 0.0317 - 26 0.46 - 28 0.0952 - 30 0.0238 - 32 0.00794 - 34 0.00794 - 35 0.00794 - 41 0.00794 - 42 0.0238 - 44 0.0238 - 45 0.0556 - 47 0.0635 - - 2 4 3 0 - 26 0.25 - 28 0.25 - 44 0.5 - - 3 4 3 0 - 2 0.25 - 14 0.25 - 26 0.5 - - 13 10 6 0 - 0 0.1 - 2 0.2 - 26 0.2 - 41 0.1 - 42 0.1 - 47 0.3 - - 14 16 7 0 - 2 0.312 - 4 0.0625 - 12 0.0625 - 13 0.0625 - 26 0.312 - 35 0.0625 - 42 0.125 - - 47 80 13 0 - 0 0.0375 - 2 0.0375 - 4 0.0125 - 7 0.025 - 19 0.0125 - 21 0.05 - 26 0.538 - 28 0.125 - 30 0.025 - 32 0.0125 - 34 0.0125 - 45 0.0625 - 47 0.05 - - 29 40 11 2 - 2 0.125 - 4 0.025 - 7 0.025 - 13 0.325 - 14 0.025 - 15 0.15 - 20 0.025 - 21 0.025 - 31 0.025 - 41 0.2 - 42 0.05 - - 8 11 3 0 - 13 0.545 - 31 0.0909 - 41 0.364 - - 14 10 5 0 - 7 0.1 - 13 0.4 - 14 0.1 - 15 0.2 - 42 0.2 - - 30 1783 33 10 - 0 0.00673 - 2 0.0432 - 3 0.0107 - 4 0.337 - 7 0.204 - 8 0.0707 - 9 0.00112 - 10 0.00112 - 13 0.06 - 14 0.00393 - 15 0.0123 - 16 0.00112 - 18 0.0488 - 19 0.000561 - 20 0.0308 - 21 0.00393 - 22 0.000561 - 24 0.00393 - 26 0.0123 - 28 0.0275 - 29 0.0123 - 30 0.0157 - 31 0.00617 - 32 0.00449 - 33 0.00897 - 36 0.000561 - 37 0.0028 - 41 0.0314 - 42 0.0028 - 43 0.000561 - 45 0.00505 - 46 0.000561 - 47 0.0286 - - 2 15 6 0 - 4 0.2 - 7 0.467 - 22 0.0667 - 28 0.0667 - 41 0.133 - 47 0.0667 - - 3 8 1 0 - 4 1 - - 8 96 15 0 - 0 0.0104 - 2 0.0312 - 3 0.0104 - 4 0.417 - 7 0.25 - 8 0.0104 - 13 0.0104 - 15 0.0104 - 18 0.0938 - 20 0.0312 - 26 0.0104 - 28 0.0312 - 29 0.0312 - 30 0.0208 - 47 0.0312 - - 13 884 28 0 - 0 0.00226 - 2 0.0351 - 3 0.00792 - 4 0.436 - 7 0.0995 - 8 0.0735 - 13 0.106 - 14 0.00339 - 15 0.0181 - 16 0.00226 - 18 0.0622 - 20 0.0328 - 21 0.00226 - 24 0.00452 - 26 0.00452 - 28 0.0158 - 29 0.0102 - 30 0.00905 - 31 0.00566 - 32 0.00113 - 33 0.00679 - 36 0.00113 - 37 0.00113 - 41 0.0317 - 42 0.00113 - 43 0.00113 - 45 0.00566 - 47 0.0192 - - 14 489 28 0 - 0 0.0123 - 2 0.0654 - 3 0.0204 - 4 0.131 - 7 0.299 - 8 0.115 - 9 0.00409 - 10 0.00409 - 13 0.0245 - 14 0.00613 - 15 0.0102 - 18 0.0389 - 19 0.00204 - 20 0.0389 - 21 0.00204 - 24 0.00409 - 26 0.0204 - 28 0.0389 - 29 0.00818 - 30 0.0307 - 31 0.00409 - 32 0.0143 - 33 0.0102 - 37 0.00613 - 41 0.0327 - 42 0.00613 - 46 0.00204 - 47 0.0491 - - 15 59 12 0 - 2 0.0339 - 3 0.0169 - 4 0.593 - 7 0.136 - 8 0.0169 - 18 0.0508 - 20 0.0339 - 26 0.0339 - 31 0.0169 - 33 0.0169 - 41 0.0339 - 47 0.0169 - - 30 4 4 0 - 4 0.25 - 7 0.25 - 29 0.25 - 41 0.25 - - 46 3 1 0 - 45 1 - - 47 198 20 0 - 0 0.0152 - 2 0.0455 - 4 0.237 - 7 0.439 - 8 0.00505 - 14 0.00505 - 20 0.00505 - 21 0.0202 - 24 0.00505 - 26 0.0202 - 28 0.0606 - 29 0.0253 - 30 0.0101 - 31 0.0152 - 33 0.0202 - 37 0.00505 - 41 0.0354 - 42 0.00505 - 45 0.00505 - 47 0.0202 - - 48 8 5 0 - 4 0.5 - 8 0.125 - 18 0.125 - 20 0.125 - 26 0.125 - - 31 1447 30 13 - 0 0.0104 - 2 0.0297 - 3 0.02 - 4 0.411 - 7 0.157 - 8 0.0643 - 9 0.00138 - 10 0.00207 - 13 0.0145 - 14 0.00138 - 15 0.00484 - 16 0.000691 - 18 0.0408 - 19 0.000691 - 20 0.0359 - 21 0.0221 - 24 0.00415 - 26 0.0194 - 28 0.0235 - 29 0.0111 - 30 0.027 - 31 0.00484 - 32 0.00346 - 33 0.00898 - 37 0.000691 - 41 0.0235 - 42 0.0152 - 43 0.00138 - 45 0.00829 - 47 0.0318 - - 2 4 2 0 - 4 0.5 - 47 0.5 - - 3 16 4 0 - 4 0.75 - 7 0.125 - 13 0.0625 - 14 0.0625 - - 8 111 18 0 - 0 0.00901 - 2 0.045 - 4 0.342 - 7 0.252 - 8 0.0811 - 9 0.00901 - 18 0.018 - 20 0.027 - 21 0.018 - 26 0.027 - 28 0.027 - 29 0.00901 - 30 0.00901 - 31 0.00901 - 33 0.00901 - 41 0.027 - 45 0.00901 - 47 0.0721 - - 13 747 27 0 - 0 0.00803 - 2 0.0241 - 3 0.0161 - 4 0.483 - 7 0.123 - 8 0.0589 - 9 0.00134 - 10 0.00268 - 13 0.00803 - 14 0.00134 - 15 0.00535 - 18 0.0589 - 19 0.00134 - 20 0.0455 - 21 0.0201 - 24 0.00402 - 26 0.012 - 28 0.0187 - 29 0.012 - 30 0.0228 - 31 0.00268 - 32 0.00402 - 33 0.00669 - 41 0.0214 - 42 0.00669 - 45 0.00669 - 47 0.0241 - - 14 423 27 0 - 0 0.0165 - 2 0.0473 - 3 0.0402 - 4 0.199 - 7 0.215 - 8 0.0922 - 10 0.00236 - 13 0.0331 - 15 0.00709 - 16 0.00236 - 18 0.0284 - 20 0.0213 - 21 0.026 - 24 0.00709 - 26 0.0355 - 28 0.0402 - 29 0.0142 - 30 0.0473 - 31 0.00946 - 32 0.00473 - 33 0.0165 - 37 0.00236 - 41 0.0165 - 42 0.0355 - 43 0.00473 - 45 0.00709 - 47 0.0284 - - 15 45 6 0 - 4 0.711 - 7 0.178 - 20 0.0222 - 21 0.0444 - 30 0.0222 - 41 0.0222 - - 18 3 2 0 - 4 0.333 - 41 0.667 - - 30 4 3 0 - 0 0.25 - 7 0.25 - 41 0.5 - - 41 7 2 0 - 4 0.714 - 41 0.286 - - 46 3 1 0 - 45 1 - - 47 45 6 0 - 4 0.733 - 7 0.0222 - 20 0.0444 - 21 0.0444 - 42 0.0444 - 47 0.111 - - 48 19 4 0 - 4 0.737 - 18 0.0526 - 20 0.158 - 26 0.0526 - - 60 8 1 0 - 4 1 - - 32 7 4 0 - 7 0.571 - 15 0.143 - 16 0.143 - 41 0.143 - - 33 22 11 0 - 0 0.136 - 2 0.227 - 4 0.0909 - 7 0.0909 - 13 0.0455 - 19 0.0909 - 21 0.0909 - 32 0.0455 - 41 0.0909 - 42 0.0455 - 44 0.0455 - - 34 68 18 2 - 2 0.0441 - 7 0.103 - 8 0.0294 - 13 0.0147 - 14 0.0294 - 15 0.0147 - 21 0.0147 - 28 0.0147 - 30 0.0147 - 32 0.0147 - 33 0.0147 - 35 0.0147 - 37 0.0147 - 41 0.397 - 42 0.0441 - 45 0.0147 - 46 0.0147 - 47 0.191 - - 13 4 3 0 - 7 0.5 - 8 0.25 - 28 0.25 - - 14 3 2 0 - 30 0.333 - 47 0.667 - - 35 8 6 0 - 0 0.125 - 2 0.125 - 26 0.125 - 28 0.125 - 33 0.125 - 47 0.375 - - 36 7 3 0 - 13 0.143 - 14 0.143 - 41 0.714 - - 37 5 4 0 - 7 0.2 - 21 0.2 - 28 0.4 - 33 0.2 - - 38 13 6 0 - 7 0.308 - 24 0.0769 - 26 0.385 - 28 0.0769 - 29 0.0769 - 33 0.0769 - - 39 1798 26 1 - 0 0.0289 - 2 0.191 - 4 0.015 - 6 0.00111 - 7 0.391 - 8 0.0106 - 13 0.00334 - 14 0.00167 - 15 0.00278 - 18 0.00222 - 19 0.00167 - 20 0.00222 - 21 0.0384 - 24 0.00222 - 26 0.12 - 28 0.0211 - 29 0.0651 - 30 0.0117 - 31 0.0117 - 32 0.00222 - 33 0.00612 - 41 0.0184 - 42 0.0139 - 43 0.000556 - 44 0.035 - 47 0.00222 - - 3 8 5 0 - 2 0.25 - 4 0.25 - 20 0.25 - 33 0.125 - 41 0.125 - - 40 83 3 0 - 15 0.964 - 16 0.012 - 21 0.0241 - - 41 1289 21 18 - 0 0.000776 - 2 0.000776 - 3 0.0279 - 7 0.00155 - 8 0.26 - 9 0.014 - 10 0.00388 - 11 0.00155 - 13 0.206 - 14 0.102 - 15 0.353 - 16 0.00698 - 19 0.00233 - 21 0.00233 - 22 0.000776 - 24 0.000776 - 29 0.000776 - 30 0.00465 - 31 0.00853 - 33 0.000776 - 43 0.000776 - - 2 27 6 0 - 3 0.0741 - 8 0.037 - 13 0.481 - 14 0.111 - 15 0.259 - 33 0.037 - - 3 25 1 0 - 3 1 - - 8 318 11 0 - 0 0.00314 - 3 0.0252 - 8 0.836 - 9 0.0252 - 13 0.0597 - 14 0.00314 - 15 0.00629 - 16 0.00314 - 24 0.00314 - 30 0.0126 - 31 0.022 - - 9 9 3 0 - 8 0.556 - 9 0.333 - 13 0.111 - - 10 1 1 0 - 10 1 - - 13 240 5 0 - 8 0.05 - 13 0.729 - 14 0.162 - 15 0.0542 - 31 0.00417 - - 14 117 4 0 - 8 0.0256 - 13 0.248 - 14 0.718 - 21 0.00855 - - 15 430 6 0 - 8 0.00233 - 9 0.00233 - 13 0.0093 - 15 0.981 - 19 0.00233 - 43 0.00233 - - 16 9 2 0 - 15 0.222 - 16 0.778 - - 21 9 4 0 - 2 0.111 - 8 0.444 - 13 0.222 - 15 0.222 - - 31 4 3 0 - 8 0.5 - 13 0.25 - 31 0.25 - - 46 11 2 0 - 13 0.727 - 15 0.273 - - 48 53 7 0 - 8 0.698 - 9 0.0943 - 10 0.0755 - 13 0.0566 - 14 0.0189 - 30 0.0189 - 31 0.0377 - - 49 1 1 0 - 21 1 - - 50 1 1 0 - 22 1 - - 55 16 8 0 - 3 0.0625 - 11 0.0625 - 13 0.25 - 14 0.188 - 15 0.188 - 19 0.125 - 29 0.0625 - 30 0.0625 - - 61 1 1 0 - 16 1 - - 64 6 5 0 - 7 0.333 - 11 0.167 - 13 0.167 - 14 0.167 - 21 0.167 - - 42 86 19 4 - 0 0.0116 - 4 0.0233 - 7 0.0233 - 8 0.0581 - 11 0.0233 - 13 0.0698 - 14 0.0233 - 15 0.0116 - 19 0.0116 - 21 0.0116 - 25 0.0116 - 27 0.0233 - 28 0.0116 - 29 0.0116 - 30 0.0116 - 40 0.0116 - 42 0.0116 - 46 0.0116 - 47 0.628 - - 2 6 3 0 - 8 0.333 - 13 0.333 - 27 0.333 - - 15 31 2 0 - 15 0.0323 - 47 0.968 - - 55 24 14 0 - 7 0.0833 - 8 0.0417 - 11 0.0833 - 13 0.0833 - 14 0.0833 - 21 0.0417 - 25 0.0417 - 28 0.0417 - 29 0.0417 - 30 0.0417 - 40 0.0417 - 42 0.0417 - 46 0.0417 - 47 0.292 - - 62 2 2 0 - 0 0.5 - 19 0.5 - - 43 48 9 1 - 3 0.0208 - 4 0.0208 - 8 0.0625 - 13 0.312 - 15 0.396 - 18 0.0625 - 20 0.0208 - 28 0.0208 - 40 0.0833 - - 15 13 4 0 - 4 0.0769 - 13 0.0769 - 15 0.769 - 40 0.0769 - - 44 91 19 7 - 0 0.011 - 2 0.033 - 3 0.011 - 4 0.319 - 7 0.121 - 8 0.0769 - 13 0.033 - 14 0.022 - 15 0.0879 - 20 0.0549 - 23 0.011 - 26 0.033 - 28 0.044 - 30 0.011 - 34 0.011 - 40 0.044 - 41 0.011 - 42 0.011 - 47 0.0549 - - 4 2 2 0 - 0 0.5 - 26 0.5 - - 8 10 5 0 - 4 0.4 - 7 0.2 - 8 0.2 - 26 0.1 - 40 0.1 - - 13 25 9 0 - 3 0.04 - 4 0.44 - 7 0.08 - 8 0.12 - 13 0.04 - 15 0.08 - 20 0.12 - 23 0.04 - 28 0.04 - - 15 33 12 0 - 2 0.0606 - 4 0.303 - 7 0.152 - 8 0.0303 - 13 0.0303 - 15 0.182 - 20 0.0303 - 28 0.0303 - 30 0.0303 - 34 0.0303 - 40 0.0909 - 41 0.0303 - - 19 2 2 0 - 2 0.5 - 13 0.5 - - 55 10 5 0 - 4 0.1 - 7 0.2 - 28 0.1 - 42 0.1 - 47 0.5 - - 60 2 1 0 - 14 1 - - 45 1242 32 20 - 0 0.0266 - 1 0.000805 - 2 0.0282 - 3 0.0121 - 4 0.357 - 7 0.153 - 8 0.0837 - 9 0.00242 - 10 0.00161 - 13 0.0346 - 14 0.00322 - 15 0.0225 - 18 0.0548 - 19 0.00161 - 20 0.0322 - 21 0.00483 - 22 0.000805 - 24 0.00322 - 26 0.00886 - 28 0.0242 - 29 0.0169 - 30 0.0298 - 31 0.0185 - 32 0.00242 - 33 0.0137 - 40 0.000805 - 41 0.0145 - 42 0.00805 - 44 0.00564 - 45 0.000805 - 46 0.00242 - 47 0.0298 - - 3 11 6 0 - 0 0.0909 - 2 0.0909 - 4 0.545 - 7 0.0909 - 8 0.0909 - 33 0.0909 - - 4 35 13 0 - 0 0.143 - 2 0.0286 - 4 0.0286 - 7 0.229 - 13 0.0571 - 21 0.0571 - 28 0.0857 - 29 0.0286 - 30 0.0286 - 33 0.0571 - 41 0.0857 - 42 0.0571 - 47 0.114 - - 6 4 3 0 - 2 0.25 - 4 0.5 - 42 0.25 - - 8 363 25 0 - 0 0.00826 - 2 0.00551 - 3 0.0165 - 4 0.551 - 7 0.107 - 8 0.0606 - 9 0.00275 - 10 0.00275 - 13 0.00826 - 15 0.00275 - 18 0.0468 - 19 0.00275 - 20 0.0358 - 21 0.00551 - 22 0.00275 - 24 0.00551 - 26 0.00826 - 28 0.0275 - 29 0.0193 - 30 0.0303 - 31 0.0193 - 33 0.00551 - 41 0.0138 - 42 0.00275 - 47 0.00826 - - 10 6 2 0 - 4 0.833 - 20 0.167 - - 13 292 19 0 - 2 0.0445 - 3 0.00685 - 4 0.5 - 7 0.0616 - 8 0.12 - 9 0.00342 - 13 0.0753 - 14 0.00685 - 15 0.0103 - 18 0.0651 - 20 0.0342 - 26 0.00685 - 28 0.00685 - 29 0.00342 - 30 0.0103 - 31 0.0205 - 41 0.00342 - 46 0.0103 - 47 0.0103 - - 14 68 17 0 - 0 0.0147 - 2 0.0294 - 3 0.0147 - 4 0.103 - 7 0.0588 - 8 0.338 - 9 0.0147 - 10 0.0147 - 13 0.162 - 15 0.0147 - 18 0.118 - 19 0.0147 - 20 0.0294 - 28 0.0294 - 30 0.0147 - 31 0.0147 - 33 0.0147 - - 15 97 14 0 - 2 0.0103 - 3 0.0103 - 4 0.34 - 7 0.0412 - 8 0.0928 - 13 0.0309 - 15 0.196 - 18 0.134 - 20 0.0412 - 31 0.0103 - 33 0.0103 - 40 0.0103 - 44 0.0103 - 47 0.0619 - - 16 3 3 0 - 8 0.333 - 20 0.333 - 29 0.333 - - 20 6 5 0 - 4 0.167 - 7 0.333 - 8 0.167 - 18 0.167 - 33 0.167 - - 21 5 5 0 - 4 0.2 - 7 0.2 - 24 0.2 - 29 0.2 - 33 0.2 - - 22 2 2 0 - 20 0.5 - 26 0.5 - - 27 4 3 0 - 2 0.5 - 30 0.25 - 32 0.25 - - 30 6 3 0 - 4 0.667 - 7 0.167 - 31 0.167 - - 31 8 6 0 - 0 0.125 - 8 0.25 - 18 0.25 - 20 0.125 - 29 0.125 - 31 0.125 - - 48 28 9 0 - 0 0.0714 - 4 0.5 - 7 0.179 - 8 0.0357 - 13 0.0357 - 18 0.0357 - 29 0.0357 - 30 0.0714 - 31 0.0357 - - 54 10 7 0 - 0 0.1 - 2 0.1 - 3 0.1 - 4 0.2 - 15 0.2 - 18 0.2 - 20 0.1 - - 55 237 25 0 - 0 0.0717 - 1 0.00422 - 2 0.0422 - 3 0.00844 - 4 0.00844 - 7 0.409 - 8 0.00422 - 13 0.00422 - 14 0.00422 - 15 0.00844 - 18 0.00422 - 21 0.00422 - 24 0.00422 - 26 0.0211 - 28 0.0549 - 29 0.0338 - 30 0.0759 - 31 0.0211 - 32 0.00844 - 33 0.0338 - 41 0.038 - 42 0.0211 - 44 0.0211 - 45 0.00422 - 47 0.0886 - - 56 22 6 0 - 3 0.0455 - 4 0.364 - 8 0.318 - 18 0.0909 - 20 0.136 - 21 0.0455 - - 62 21 8 0 - 0 0.0952 - 3 0.0476 - 4 0.286 - 7 0.333 - 14 0.0476 - 20 0.0952 - 42 0.0476 - 44 0.0476 - - 46 382 21 10 - 3 0.0105 - 6 0.00524 - 8 0.387 - 9 0.00262 - 10 0.00524 - 13 0.304 - 14 0.0183 - 15 0.162 - 16 0.0105 - 18 0.00524 - 19 0.00524 - 21 0.00262 - 27 0.00262 - 28 0.00785 - 29 0.00262 - 30 0.0131 - 31 0.0157 - 40 0.00524 - 41 0.0288 - 46 0.00262 - 47 0.00262 - - 2 14 5 0 - 13 0.643 - 14 0.143 - 15 0.0714 - 41 0.0714 - 47 0.0714 - - 3 2 2 0 - 9 0.5 - 15 0.5 - - 8 15 5 0 - 6 0.0667 - 8 0.467 - 13 0.333 - 28 0.0667 - 31 0.0667 - - 13 206 14 0 - 3 0.00971 - 8 0.422 - 10 0.00485 - 13 0.325 - 14 0.0146 - 15 0.136 - 16 0.0146 - 18 0.00971 - 19 0.00971 - 27 0.00485 - 28 0.00971 - 30 0.0194 - 31 0.0146 - 46 0.00485 - - 14 99 11 0 - 3 0.0202 - 6 0.0101 - 8 0.495 - 10 0.0101 - 13 0.333 - 14 0.0202 - 15 0.0606 - 16 0.0101 - 21 0.0101 - 29 0.0101 - 31 0.0202 - - 15 30 5 0 - 8 0.1 - 13 0.0667 - 15 0.767 - 30 0.0333 - 40 0.0333 - - 45 3 1 0 - 41 1 - - 48 1 1 0 - 40 1 - - 55 6 1 0 - 41 1 - - 58 3 1 0 - 15 1 - - 47 311752 45 53 - 0 0.0388 - 1 0.0005 - 2 0.0469 - 3 0.00405 - 4 0.00179 - 5 1.6e-05 - 6 7.7e-05 - 7 0.382 - 8 0.00254 - 9 0.000189 - 10 9.3e-05 - 12 0.000388 - 13 0.0121 - 14 0.00672 - 15 0.00325 - 16 0.000112 - 17 0.000106 - 18 0.000202 - 19 0.00157 - 20 7.7e-05 - 21 0.0104 - 22 0.00016 - 23 1.28e-05 - 24 0.00627 - 25 3.85e-05 - 26 0.0366 - 27 6.42e-06 - 28 0.0599 - 29 0.0565 - 30 0.0332 - 31 0.0151 - 32 0.0125 - 33 0.026 - 34 0.00184 - 35 0.00141 - 36 1.92e-05 - 37 0.00624 - 40 9.94e-05 - 41 0.0842 - 42 0.0135 - 43 0.00033 - 44 0.00341 - 45 0.0148 - 46 0.00455 - 47 0.111 - - 0 3 3 0 - 7 0.333 - 14 0.333 - 44 0.333 - - 2 61 15 0 - 0 0.0656 - 2 0.0328 - 7 0.344 - 21 0.0164 - 26 0.0164 - 29 0.0164 - 30 0.0492 - 32 0.0164 - 33 0.0328 - 34 0.0164 - 41 0.0984 - 42 0.0492 - 44 0.0164 - 45 0.0164 - 47 0.213 - - 3 11856 34 0 - 0 0.0347 - 1 0.000422 - 2 0.066 - 3 0.000506 - 4 0.000759 - 7 0.359 - 8 0.00793 - 13 0.038 - 14 0.00506 - 15 0.00793 - 16 8.43e-05 - 18 0.000169 - 19 0.0011 - 21 0.038 - 24 0.00371 - 25 8.43e-05 - 26 0.083 - 28 0.0361 - 29 0.134 - 30 0.0172 - 31 0.0135 - 32 0.00472 - 33 0.0179 - 34 0.0016 - 35 0.000253 - 37 0.00118 - 40 0.000253 - 41 0.0499 - 42 0.0328 - 43 0.000843 - 44 0.00321 - 45 0.00346 - 46 0.00118 - 47 0.0361 - - 4 79613 41 0 - 0 0.0484 - 1 0.000754 - 2 0.0331 - 3 0.013 - 4 0.000666 - 5 2.51e-05 - 6 2.51e-05 - 7 0.404 - 8 0.00131 - 9 0.000214 - 10 7.54e-05 - 12 0.000415 - 13 0.0103 - 14 0.0123 - 15 0.0024 - 16 0.0001 - 17 0.000301 - 18 1.26e-05 - 19 0.00236 - 21 0.0111 - 22 0.000377 - 23 1.26e-05 - 24 0.00705 - 26 0.0314 - 28 0.0638 - 29 0.0519 - 30 0.0339 - 31 0.0147 - 32 0.0126 - 33 0.0216 - 34 0.00148 - 35 0.00126 - 37 0.00661 - 40 5.02e-05 - 41 0.0806 - 42 0.00671 - 43 0.000427 - 44 0.00117 - 45 0.0121 - 46 0.00315 - 47 0.108 - - 5 861 24 0 - 0 0.00581 - 2 0.0918 - 7 0.18 - 8 0.00465 - 10 0.00348 - 13 0.0186 - 14 0.00465 - 15 0.00232 - 16 0.00116 - 19 0.00232 - 21 0.029 - 28 0.0163 - 29 0.0395 - 30 0.00465 - 31 0.00232 - 32 0.0279 - 33 0.0151 - 34 0.00813 - 37 0.0267 - 41 0.143 - 42 0.00813 - 44 0.00232 - 45 0.167 - 47 0.195 - - 6 48 13 0 - 2 0.0208 - 4 0.0208 - 7 0.375 - 19 0.0208 - 25 0.0417 - 26 0.0417 - 28 0.0417 - 29 0.0208 - 32 0.0208 - 33 0.0208 - 41 0.104 - 45 0.125 - 47 0.146 - - 7 266 22 0 - 0 0.0526 - 2 0.0376 - 3 0.00376 - 7 0.18 - 8 0.0113 - 10 0.00376 - 13 0.147 - 14 0.105 - 15 0.015 - 21 0.0188 - 26 0.0338 - 28 0.0639 - 29 0.0489 - 30 0.0263 - 31 0.0263 - 32 0.0113 - 33 0.0301 - 35 0.00376 - 41 0.0564 - 42 0.0113 - 45 0.0113 - 47 0.102 - - 8 19385 39 0 - 0 0.0334 - 1 0.000464 - 2 0.0742 - 3 0.00284 - 4 0.00212 - 6 0.000258 - 7 0.434 - 8 0.00175 - 9 5.16e-05 - 12 0.000155 - 13 0.0156 - 14 0.00655 - 15 0.00542 - 16 0.000206 - 18 0.000516 - 19 0.00119 - 20 5.16e-05 - 21 0.00774 - 22 0.000155 - 24 0.00665 - 25 5.16e-05 - 26 0.0329 - 28 0.0675 - 29 0.0412 - 30 0.0447 - 31 0.0181 - 32 0.0144 - 33 0.0214 - 34 0.0016 - 35 0.000516 - 36 0.000103 - 37 0.00464 - 41 0.0594 - 42 0.00645 - 43 0.000258 - 44 0.00165 - 45 0.0122 - 46 0.000413 - 47 0.0797 - - 9 1078 30 0 - 0 0.0891 - 1 0.00186 - 2 0.0714 - 3 0.000928 - 4 0.000928 - 7 0.286 - 8 0.00371 - 12 0.000928 - 13 0.00278 - 14 0.00742 - 15 0.00371 - 16 0.000928 - 18 0.00278 - 19 0.00371 - 21 0.0111 - 24 0.00928 - 26 0.0427 - 28 0.151 - 29 0.0584 - 30 0.0826 - 31 0.0139 - 32 0.0408 - 33 0.0362 - 34 0.000928 - 37 0.000928 - 41 0.0288 - 42 0.00464 - 43 0.000928 - 45 0.0121 - 47 0.0297 - - 10 467 25 0 - 0 0.00642 - 2 0.0814 - 3 0.00214 - 4 0.00642 - 7 0.343 - 8 0.00214 - 13 0.00642 - 14 0.00214 - 19 0.00214 - 21 0.00857 - 24 0.015 - 26 0.0107 - 28 0.0343 - 29 0.0493 - 30 0.0214 - 31 0.00857 - 32 0.0107 - 33 0.0236 - 34 0.00428 - 35 0.00428 - 37 0.00857 - 41 0.0814 - 42 0.00857 - 45 0.045 - 47 0.214 - - 12 2 2 0 - 45 0.5 - 46 0.5 - - 13 22292 40 0 - 0 0.0312 - 1 0.000718 - 2 0.0474 - 3 0.000942 - 4 0.00493 - 7 0.47 - 8 0.00287 - 9 0.000449 - 10 8.97e-05 - 12 0.000224 - 13 0.0139 - 14 0.00453 - 15 0.00359 - 16 0.000135 - 18 0.000224 - 19 0.00144 - 20 4.49e-05 - 21 0.00763 - 22 8.97e-05 - 24 0.00574 - 25 8.97e-05 - 26 0.0302 - 27 4.49e-05 - 28 0.0663 - 29 0.0343 - 30 0.0394 - 31 0.0156 - 32 0.012 - 33 0.0202 - 34 0.00112 - 35 0.000538 - 37 0.00529 - 40 4.49e-05 - 41 0.0834 - 42 0.00745 - 43 0.000179 - 44 0.00242 - 45 0.0131 - 46 0.00112 - 47 0.0713 - - 14 14611 37 0 - 0 0.0223 - 1 0.000342 - 2 0.0463 - 3 0.000137 - 4 0.0011 - 6 6.84e-05 - 7 0.397 - 8 0.0024 - 9 0.000274 - 10 6.84e-05 - 12 0.000274 - 13 0.00609 - 14 0.00342 - 15 0.000342 - 18 0.000274 - 19 0.000753 - 21 0.00527 - 22 6.84e-05 - 24 0.00862 - 26 0.0357 - 28 0.0862 - 29 0.0426 - 30 0.0557 - 31 0.0153 - 32 0.0201 - 33 0.0203 - 34 0.00356 - 35 0.000958 - 37 0.0112 - 40 0.000137 - 41 0.0757 - 42 0.00897 - 43 0.000205 - 44 0.00103 - 45 0.0125 - 46 0.000958 - 47 0.114 - - 15 39318 40 0 - 0 0.00677 - 1 0.000102 - 2 0.0486 - 3 0.00145 - 4 0.00305 - 6 0.000178 - 7 0.372 - 8 0.00542 - 9 0.000203 - 10 7.63e-05 - 12 0.000153 - 13 0.0124 - 14 0.0032 - 15 0.0044 - 16 5.09e-05 - 18 0.000382 - 19 0.000254 - 20 0.000254 - 21 0.00387 - 24 0.0017 - 25 2.54e-05 - 26 0.0255 - 28 0.0202 - 29 0.0393 - 30 0.0134 - 31 0.011 - 32 0.00471 - 33 0.0302 - 34 0.00231 - 35 0.00112 - 36 5.09e-05 - 37 0.0056 - 40 0.000203 - 41 0.14 - 42 0.0104 - 43 0.000102 - 44 0.00972 - 45 0.00946 - 46 0.01 - 47 0.202 - - 16 399 24 0 - 0 0.0125 - 2 0.0501 - 4 0.00752 - 7 0.421 - 8 0.00251 - 13 0.00752 - 14 0.00501 - 15 0.00251 - 20 0.00251 - 21 0.01 - 26 0.0251 - 28 0.0301 - 29 0.00752 - 30 0.0226 - 31 0.00501 - 32 0.00251 - 33 0.015 - 34 0.00251 - 37 0.00752 - 41 0.115 - 42 0.0125 - 44 0.00752 - 45 0.0276 - 47 0.198 - - 17 312 24 0 - 0 0.0609 - 1 0.00321 - 2 0.0449 - 7 0.372 - 8 0.00321 - 9 0.00321 - 13 0.00641 - 14 0.00641 - 15 0.00321 - 19 0.00641 - 21 0.00962 - 24 0.00962 - 26 0.0224 - 28 0.106 - 29 0.0513 - 30 0.0513 - 31 0.0385 - 32 0.016 - 33 0.0224 - 37 0.0128 - 41 0.0417 - 42 0.00321 - 45 0.0192 - 47 0.0865 - - 18 4 1 0 - 28 1 - - 19 17392 39 0 - 0 0.00949 - 1 0.000115 - 2 0.0515 - 3 0.00138 - 4 0.00149 - 5 5.75e-05 - 7 0.171 - 8 0.00477 - 9 0.000402 - 10 0.000575 - 12 0.00305 - 13 0.0331 - 14 0.0155 - 15 0.00385 - 16 0.00023 - 19 0.00161 - 21 0.0166 - 22 0.000402 - 23 5.75e-05 - 24 0.000115 - 26 0.00638 - 27 5.75e-05 - 28 0.0544 - 29 0.101 - 30 0.0205 - 31 0.0106 - 32 0.0237 - 33 0.0277 - 34 0.00862 - 35 0.0122 - 37 0.0274 - 40 5.75e-05 - 41 0.12 - 42 0.011 - 43 0.000517 - 44 0.00149 - 45 0.0877 - 46 0.0316 - 47 0.14 - - 20 8301 36 0 - 0 0.0153 - 1 0.000361 - 2 0.0496 - 3 0.000361 - 4 0.00422 - 7 0.429 - 8 0.00169 - 9 0.000241 - 10 0.00012 - 12 0.000241 - 13 0.00361 - 14 0.00108 - 15 0.00133 - 16 0.00012 - 17 0.00012 - 18 0.000241 - 19 0.000241 - 21 0.00675 - 24 0.017 - 26 0.0359 - 28 0.136 - 29 0.0916 - 30 0.0543 - 31 0.0223 - 32 0.0141 - 33 0.026 - 34 0.000723 - 35 0.00145 - 37 0.00638 - 41 0.0253 - 42 0.00446 - 43 0.00012 - 44 0.000602 - 45 0.00904 - 46 0.00133 - 47 0.0385 - - 21 1441 29 0 - 0 0.12 - 1 0.00208 - 2 0.0625 - 3 0.00625 - 4 0.00208 - 7 0.237 - 8 0.00278 - 12 0.000694 - 13 0.0437 - 14 0.0278 - 15 0.0153 - 19 0.00278 - 21 0.0396 - 24 0.00763 - 26 0.00902 - 28 0.0472 - 29 0.0402 - 30 0.0194 - 31 0.0222 - 32 0.0104 - 33 0.0285 - 34 0.00486 - 37 0.00625 - 41 0.0861 - 42 0.0201 - 44 0.00347 - 45 0.0146 - 46 0.00139 - 47 0.116 - - 22 181 22 0 - 0 0.0442 - 2 0.0221 - 3 0.00552 - 7 0.0663 - 8 0.0166 - 13 0.166 - 14 0.0663 - 15 0.0718 - 16 0.00552 - 19 0.00552 - 21 0.0331 - 24 0.0166 - 26 0.00552 - 28 0.0331 - 29 0.0718 - 30 0.0331 - 31 0.0718 - 32 0.011 - 33 0.0276 - 41 0.0166 - 45 0.00552 - 47 0.204 - - 23 35 9 0 - 0 0.0571 - 2 0.143 - 7 0.314 - 13 0.0571 - 29 0.0286 - 32 0.0286 - 33 0.0286 - 41 0.114 - 47 0.229 - - 24 2 2 0 - 22 0.5 - 24 0.5 - - 25 13 2 0 - 42 0.0769 - 47 0.923 - - 27 3 3 0 - 0 0.333 - 26 0.333 - 30 0.333 - - 28 113 18 0 - 0 0.0354 - 2 0.0708 - 7 0.0177 - 12 0.00885 - 14 0.00885 - 19 0.00885 - 21 0.00885 - 26 0.513 - 28 0.106 - 30 0.0265 - 32 0.00885 - 34 0.00885 - 35 0.00885 - 41 0.00885 - 42 0.0265 - 44 0.0177 - 45 0.0442 - 47 0.0708 - - 29 19 7 0 - 2 0.263 - 7 0.0526 - 13 0.0526 - 15 0.0526 - 31 0.0526 - 41 0.421 - 42 0.105 - - 30 714 22 0 - 0 0.0154 - 2 0.0868 - 7 0.51 - 8 0.0014 - 13 0.0028 - 14 0.0028 - 19 0.0014 - 21 0.0028 - 24 0.0098 - 26 0.0308 - 28 0.0672 - 29 0.0308 - 30 0.0336 - 31 0.0084 - 32 0.0112 - 33 0.0224 - 37 0.007 - 41 0.0714 - 42 0.007 - 43 0.0014 - 45 0.0042 - 47 0.0714 - - 31 540 22 0 - 0 0.0278 - 2 0.0722 - 4 0.00185 - 7 0.419 - 13 0.0037 - 14 0.00185 - 15 0.00556 - 21 0.0111 - 24 0.0111 - 26 0.0519 - 28 0.063 - 29 0.0296 - 30 0.0685 - 31 0.00556 - 32 0.00926 - 33 0.0241 - 37 0.00185 - 41 0.0556 - 42 0.0407 - 43 0.0037 - 45 0.00741 - 47 0.0852 - - 32 6 3 0 - 7 0.667 - 15 0.167 - 41 0.167 - - 33 18 9 0 - 0 0.167 - 2 0.278 - 7 0.111 - 19 0.111 - 21 0.0556 - 32 0.0556 - 41 0.111 - 42 0.0556 - 44 0.0556 - - 34 67 17 0 - 2 0.0448 - 7 0.104 - 8 0.0299 - 13 0.0149 - 14 0.0299 - 15 0.0149 - 28 0.0149 - 30 0.0149 - 32 0.0149 - 33 0.0149 - 35 0.0149 - 37 0.0149 - 41 0.403 - 42 0.0448 - 45 0.0149 - 46 0.0149 - 47 0.194 - - 35 8 6 0 - 0 0.125 - 2 0.125 - 26 0.125 - 28 0.125 - 33 0.125 - 47 0.375 - - 36 7 3 0 - 13 0.143 - 14 0.143 - 41 0.714 - - 37 4 3 0 - 7 0.25 - 28 0.5 - 33 0.25 - - 38 13 6 0 - 7 0.308 - 24 0.0769 - 26 0.385 - 28 0.0769 - 29 0.0769 - 33 0.0769 - - 39 1743 25 0 - 0 0.0298 - 2 0.197 - 4 0.000574 - 6 0.00115 - 7 0.402 - 8 0.00344 - 13 0.00229 - 14 0.00172 - 15 0.00287 - 19 0.00172 - 20 0.000574 - 21 0.0384 - 24 0.00229 - 26 0.124 - 28 0.0218 - 29 0.0671 - 30 0.012 - 31 0.0103 - 32 0.00229 - 33 0.00631 - 41 0.0189 - 42 0.0143 - 43 0.000574 - 44 0.0361 - 47 0.00229 - - 41 2 2 0 - 0 0.5 - 3 0.5 - - 42 57 4 0 - 14 0.0175 - 40 0.0175 - 42 0.0175 - 47 0.947 - - 44 39 13 0 - 0 0.0256 - 2 0.0769 - 4 0.0256 - 7 0.282 - 14 0.0513 - 15 0.0513 - 26 0.0769 - 28 0.103 - 34 0.0256 - 40 0.103 - 41 0.0256 - 42 0.0256 - 47 0.128 - - 45 468 24 0 - 0 0.0662 - 1 0.00214 - 2 0.0491 - 3 0.00427 - 7 0.404 - 13 0.0128 - 14 0.00427 - 15 0.00427 - 18 0.00427 - 19 0.00214 - 21 0.00427 - 24 0.00855 - 26 0.0235 - 28 0.0641 - 29 0.0449 - 30 0.0726 - 31 0.0406 - 32 0.00641 - 33 0.0363 - 41 0.0299 - 42 0.0192 - 44 0.015 - 45 0.00214 - 47 0.0791 - - 48 1258 29 0 - 0 0.0819 - 1 0.000795 - 2 0.0429 - 4 0.00238 - 7 0.431 - 13 0.00477 - 14 0.00159 - 15 0.00238 - 18 0.000795 - 19 0.00238 - 21 0.0127 - 23 0.000795 - 24 0.00477 - 25 0.00159 - 26 0.0334 - 28 0.0787 - 29 0.0437 - 30 0.0437 - 31 0.0151 - 32 0.0207 - 33 0.0231 - 35 0.000795 - 36 0.000795 - 37 0.00397 - 41 0.0453 - 42 0.0167 - 45 0.0175 - 46 0.000795 - 47 0.0652 - - 49 116 18 0 - 0 0.0776 - 2 0.0776 - 3 0.0172 - 7 0.241 - 13 0.0517 - 14 0.00862 - 21 0.00862 - 26 0.00862 - 28 0.0517 - 29 0.0431 - 30 0.0345 - 31 0.0345 - 32 0.00862 - 34 0.00862 - 41 0.284 - 42 0.0259 - 46 0.00862 - 47 0.00862 - - 50 10 7 0 - 0 0.2 - 14 0.1 - 28 0.1 - 29 0.1 - 30 0.2 - 33 0.2 - 42 0.1 - - 53 7 4 0 - 2 0.143 - 7 0.143 - 42 0.429 - 47 0.286 - - 54 72 13 0 - 0 0.0139 - 2 0.0556 - 4 0.0139 - 7 0.417 - 26 0.0417 - 28 0.0278 - 29 0.0278 - 30 0.0139 - 33 0.0278 - 34 0.0139 - 41 0.111 - 46 0.0139 - 47 0.222 - - 55 80263 43 0 - 0 0.0575 - 1 0.000536 - 2 0.0458 - 3 0.000461 - 4 0.00156 - 5 2.49e-05 - 6 8.72e-05 - 7 0.377 - 8 0.00127 - 9 9.97e-05 - 10 2.49e-05 - 12 0.00015 - 13 0.00471 - 14 0.00257 - 15 0.00239 - 16 9.97e-05 - 17 9.97e-05 - 18 0.000174 - 19 0.00179 - 20 0.000125 - 21 0.00893 - 22 6.23e-05 - 24 0.00776 - 25 3.74e-05 - 26 0.0369 - 28 0.0637 - 29 0.0564 - 30 0.0373 - 31 0.0168 - 32 0.0133 - 33 0.0337 - 34 0.000648 - 35 0.000336 - 36 1.25e-05 - 37 0.00262 - 40 8.72e-05 - 41 0.0805 - 42 0.0217 - 43 0.000336 - 44 0.00209 - 45 0.00795 - 46 0.00182 - 47 0.111 - - 57 11 7 0 - 2 0.273 - 24 0.0909 - 28 0.182 - 33 0.182 - 41 0.0909 - 42 0.0909 - 44 0.0909 - - 58 14 6 0 - 0 0.0714 - 2 0.0714 - 7 0.643 - 28 0.0714 - 31 0.0714 - 41 0.0714 - - 60 8061 34 0 - 0 0.0514 - 1 0.000124 - 2 0.0294 - 3 0.000496 - 4 0.00062 - 7 0.386 - 8 0.00248 - 9 0.000124 - 13 0.016 - 14 0.00657 - 15 0.00385 - 16 0.000124 - 18 0.000496 - 19 0.00124 - 21 0.0112 - 22 0.000124 - 23 0.000124 - 24 0.00844 - 26 0.154 - 28 0.0624 - 29 0.08 - 30 0.0249 - 31 0.02 - 32 0.00893 - 33 0.0238 - 34 0.000744 - 37 0.00211 - 41 0.0215 - 42 0.0383 - 43 0.000124 - 44 0.0203 - 45 0.00136 - 46 0.000248 - 47 0.0226 - - 62 34 6 0 - 7 0.647 - 26 0.0882 - 30 0.0294 - 42 0.0294 - 45 0.0588 - 47 0.147 - - 64 40 15 0 - 0 0.1 - 2 0.025 - 7 0.2 - 13 0.025 - 19 0.05 - 24 0.025 - 26 0.05 - 28 0.1 - 29 0.05 - 30 0.025 - 31 0.075 - 33 0.075 - 41 0.1 - 45 0.075 - 47 0.025 - - 68 95 14 0 - 0 0.0105 - 2 0.0211 - 7 0.516 - 21 0.0105 - 26 0.0421 - 28 0.0737 - 29 0.0105 - 30 0.0632 - 31 0.0105 - 32 0.0211 - 33 0.0632 - 41 0.0211 - 42 0.0211 - 47 0.116 - - 48 4567 37 18 - 0 0.0274 - 1 0.000219 - 2 0.0125 - 3 0.0103 - 4 0.53 - 7 0.119 - 8 0.0458 - 9 0.00153 - 10 0.000438 - 13 0.00613 - 14 0.000438 - 15 0.0101 - 16 0.000219 - 18 0.0469 - 19 0.00153 - 20 0.0405 - 21 0.00504 - 22 0.000876 - 23 0.000219 - 24 0.00131 - 25 0.000438 - 26 0.0092 - 28 0.0217 - 29 0.0123 - 30 0.0138 - 31 0.00963 - 32 0.00569 - 33 0.00635 - 35 0.000219 - 36 0.000438 - 37 0.00109 - 40 0.000219 - 41 0.0243 - 42 0.0046 - 45 0.0109 - 46 0.000438 - 47 0.018 - - 3 17 2 0 - 4 0.941 - 18 0.0588 - - 4 16 7 0 - 0 0.375 - 7 0.125 - 21 0.188 - 28 0.0625 - 32 0.125 - 37 0.0625 - 45 0.0625 - - 8 500 23 0 - 0 0.03 - 2 0.016 - 3 0.024 - 4 0.448 - 7 0.148 - 8 0.034 - 13 0.014 - 15 0.006 - 18 0.058 - 20 0.064 - 22 0.002 - 26 0.008 - 28 0.012 - 29 0.016 - 30 0.012 - 31 0.02 - 32 0.004 - 33 0.016 - 35 0.002 - 41 0.036 - 42 0.014 - 45 0.004 - 47 0.012 - - 9 5 4 0 - 2 0.2 - 4 0.4 - 7 0.2 - 30 0.2 - - 13 2669 34 0 - 0 0.0217 - 1 0.000375 - 2 0.00712 - 3 0.0045 - 4 0.651 - 7 0.0573 - 8 0.0476 - 9 0.00225 - 10 0.000375 - 13 0.00525 - 14 0.000749 - 15 0.00599 - 18 0.0555 - 19 0.00187 - 20 0.0412 - 21 0.00337 - 22 0.000749 - 23 0.000375 - 24 0.00112 - 25 0.000375 - 26 0.00599 - 28 0.0139 - 29 0.0109 - 30 0.0105 - 31 0.00974 - 32 0.003 - 33 0.003 - 36 0.000749 - 40 0.000375 - 41 0.0161 - 42 0.00187 - 45 0.00599 - 46 0.000749 - 47 0.00862 - - 14 854 30 0 - 0 0.0457 - 2 0.0269 - 3 0.0234 - 4 0.196 - 7 0.292 - 8 0.0679 - 9 0.00117 - 10 0.00117 - 13 0.00468 - 15 0.0304 - 16 0.00117 - 18 0.0222 - 19 0.00117 - 20 0.0293 - 21 0.0082 - 22 0.00117 - 24 0.00351 - 25 0.00117 - 26 0.0152 - 28 0.0504 - 29 0.0222 - 30 0.0258 - 31 0.0082 - 32 0.0129 - 33 0.0141 - 37 0.00351 - 41 0.0293 - 42 0.0082 - 45 0.0152 - 47 0.0386 - - 15 246 19 0 - 0 0.0122 - 2 0.0203 - 3 0.00813 - 4 0.537 - 7 0.142 - 8 0.0122 - 13 0.00407 - 15 0.00407 - 18 0.0407 - 20 0.0325 - 21 0.00407 - 26 0.0285 - 28 0.0163 - 30 0.0163 - 32 0.00813 - 33 0.00407 - 37 0.00407 - 41 0.0407 - 47 0.065 - - 16 8 5 0 - 4 0.25 - 7 0.375 - 26 0.125 - 41 0.125 - 47 0.125 - - 18 2 1 0 - 13 1 - - 30 11 5 0 - 4 0.545 - 7 0.0909 - 20 0.182 - 28 0.0909 - 45 0.0909 - - 31 14 5 0 - 4 0.429 - 7 0.214 - 18 0.143 - 20 0.143 - 42 0.0714 - - 41 40 10 0 - 2 0.025 - 3 0.025 - 4 0.55 - 7 0.075 - 18 0.05 - 20 0.075 - 21 0.025 - 30 0.025 - 41 0.125 - 47 0.025 - - 46 19 2 0 - 4 0.158 - 45 0.842 - - 47 89 12 0 - 0 0.0225 - 4 0.753 - 7 0.0674 - 8 0.0112 - 19 0.0112 - 20 0.0112 - 21 0.0225 - 28 0.0562 - 30 0.0112 - 31 0.0112 - 32 0.0112 - 41 0.0112 - - 48 29 9 0 - 0 0.069 - 4 0.414 - 7 0.069 - 18 0.0345 - 20 0.0345 - 26 0.0345 - 28 0.0345 - 41 0.276 - 45 0.0345 - - 55 7 5 0 - 4 0.286 - 7 0.286 - 20 0.143 - 28 0.143 - 47 0.143 - - 56 9 4 0 - 4 0.444 - 7 0.333 - 8 0.111 - 47 0.111 - - 58 6 4 0 - 4 0.333 - 7 0.333 - 8 0.167 - 42 0.167 - - 49 130 21 9 - 0 0.0692 - 2 0.0769 - 3 0.0154 - 4 0.0615 - 7 0.215 - 13 0.0462 - 14 0.00769 - 18 0.00769 - 21 0.0231 - 26 0.00769 - 28 0.0462 - 29 0.0385 - 30 0.0308 - 31 0.0308 - 32 0.00769 - 34 0.00769 - 41 0.262 - 42 0.0231 - 45 0.00769 - 46 0.00769 - 47 0.00769 - - 3 7 3 0 - 7 0.429 - 30 0.143 - 41 0.429 - - 4 51 12 0 - 0 0.0588 - 2 0.118 - 7 0.294 - 13 0.118 - 28 0.0588 - 29 0.0392 - 30 0.0392 - 31 0.0588 - 32 0.0196 - 41 0.157 - 42 0.0196 - 47 0.0196 - - 8 6 4 0 - 7 0.5 - 28 0.167 - 29 0.167 - 31 0.167 - - 13 19 10 0 - 0 0.0526 - 4 0.368 - 7 0.158 - 14 0.0526 - 28 0.0526 - 29 0.0526 - 30 0.0526 - 41 0.105 - 42 0.0526 - 45 0.0526 - - 14 4 4 0 - 4 0.25 - 7 0.25 - 26 0.25 - 29 0.25 - - 15 5 3 0 - 18 0.2 - 41 0.6 - 42 0.2 - - 41 3 2 0 - 3 0.667 - 7 0.333 - - 47 1 1 0 - 34 1 - - 55 29 7 0 - 0 0.138 - 2 0.138 - 7 0.069 - 21 0.069 - 28 0.0345 - 41 0.517 - 46 0.0345 - - 50 14 10 0 - 0 0.143 - 14 0.143 - 15 0.0714 - 28 0.0714 - 29 0.0714 - 30 0.143 - 32 0.0714 - 33 0.143 - 41 0.0714 - 42 0.0714 - - 53 7 4 0 - 2 0.143 - 7 0.143 - 42 0.429 - 47 0.286 - - 54 390 20 6 - 0 0.00256 - 2 0.0154 - 3 0.0282 - 4 0.618 - 7 0.0769 - 8 0.0359 - 13 0.00256 - 15 0.0128 - 18 0.0308 - 20 0.059 - 26 0.00769 - 28 0.00513 - 29 0.00513 - 30 0.00256 - 33 0.00513 - 34 0.00256 - 41 0.0205 - 45 0.0256 - 46 0.00256 - 47 0.041 - - 8 28 2 0 - 3 0.0714 - 4 0.929 - - 13 239 11 0 - 2 0.00418 - 3 0.0167 - 4 0.762 - 7 0.0251 - 8 0.0418 - 15 0.00837 - 18 0.046 - 20 0.0753 - 33 0.00837 - 41 0.00837 - 47 0.00418 - - 14 26 8 0 - 2 0.0769 - 3 0.115 - 4 0.462 - 18 0.0385 - 20 0.115 - 28 0.0385 - 41 0.0385 - 47 0.115 - - 15 74 17 0 - 0 0.0135 - 2 0.0405 - 3 0.027 - 4 0.189 - 7 0.27 - 8 0.0541 - 13 0.0135 - 15 0.0405 - 26 0.027 - 28 0.0135 - 29 0.027 - 30 0.0135 - 34 0.0135 - 41 0.0676 - 45 0.027 - 46 0.0135 - 47 0.149 - - 18 3 2 0 - 7 0.667 - 26 0.333 - - 46 8 1 0 - 45 1 - - 55 80957 43 26 - 0 0.057 - 1 0.000531 - 2 0.0461 - 3 0.000581 - 4 0.00351 - 5 2.47e-05 - 6 8.65e-05 - 7 0.374 - 8 0.00166 - 9 9.88e-05 - 10 4.94e-05 - 12 0.000148 - 13 0.00473 - 14 0.00267 - 15 0.00241 - 16 9.88e-05 - 17 0.000371 - 18 0.000259 - 19 0.00178 - 20 0.000259 - 21 0.00965 - 22 7.41e-05 - 24 0.0077 - 25 3.71e-05 - 26 0.0366 - 28 0.0632 - 29 0.0559 - 30 0.037 - 31 0.0167 - 32 0.0131 - 33 0.0334 - 34 0.000642 - 35 0.000334 - 36 1.24e-05 - 37 0.00259 - 40 8.65e-05 - 41 0.0801 - 42 0.0218 - 43 0.000371 - 44 0.0022 - 45 0.0108 - 46 0.00188 - 47 0.11 - - 0 4 4 0 - 7 0.25 - 29 0.25 - 30 0.25 - 32 0.25 - - 2 4 3 0 - 4 0.25 - 7 0.5 - 47 0.25 - - 3 137 16 0 - 0 0.0073 - 2 0.0146 - 7 0.577 - 13 0.0073 - 14 0.0146 - 24 0.0146 - 26 0.0292 - 28 0.0438 - 29 0.0365 - 30 0.0073 - 31 0.0073 - 32 0.0438 - 33 0.0365 - 34 0.0073 - 41 0.0803 - 47 0.073 - - 4 2 2 0 - 13 0.5 - 26 0.5 - - 8 1730 27 0 - 0 0.0254 - 2 0.0353 - 3 0.00116 - 4 0.00578 - 7 0.478 - 8 0.000578 - 9 0.000578 - 13 0.00347 - 18 0.00116 - 21 0.00925 - 24 0.00925 - 26 0.0364 - 28 0.0572 - 29 0.041 - 30 0.0272 - 31 0.00925 - 32 0.00578 - 33 0.0168 - 34 0.00116 - 35 0.00173 - 37 0.00173 - 41 0.102 - 42 0.00694 - 44 0.000578 - 45 0.00347 - 46 0.00347 - 47 0.115 - - 9 15 7 0 - 7 0.467 - 26 0.0667 - 28 0.0667 - 29 0.0667 - 31 0.0667 - 33 0.0667 - 41 0.2 - - 10 202 18 0 - 0 0.114 - 2 0.0248 - 3 0.00495 - 7 0.347 - 15 0.00495 - 20 0.00495 - 21 0.0248 - 24 0.00495 - 26 0.00495 - 28 0.0248 - 29 0.0198 - 30 0.0347 - 31 0.0198 - 32 0.00495 - 33 0.00495 - 41 0.262 - 42 0.0099 - 47 0.0842 - - 13 3620 33 0 - 0 0.0177 - 2 0.0282 - 3 0.0011 - 4 0.0113 - 7 0.41 - 8 0.00414 - 10 0.000276 - 13 0.00249 - 14 0.00166 - 15 0.00138 - 17 0.0011 - 18 0.000276 - 19 0.000552 - 20 0.0011 - 21 0.00912 - 24 0.00691 - 26 0.0373 - 28 0.0715 - 29 0.0561 - 30 0.0331 - 31 0.0133 - 32 0.0127 - 33 0.0218 - 34 0.000552 - 35 0.000276 - 37 0.00331 - 41 0.0956 - 42 0.00635 - 43 0.000552 - 44 0.00138 - 45 0.0047 - 46 0.00221 - 47 0.142 - - 14 1127 28 0 - 0 0.00532 - 2 0.024 - 3 0.00177 - 4 0.0071 - 7 0.482 - 8 0.0071 - 13 0.00532 - 14 0.00177 - 15 0.000887 - 17 0.00177 - 21 0.00266 - 24 0.00621 - 26 0.0417 - 28 0.0816 - 29 0.0488 - 30 0.039 - 31 0.0177 - 32 0.0115 - 33 0.0195 - 34 0.00266 - 35 0.00177 - 37 0.00799 - 41 0.0532 - 42 0.00444 - 44 0.00177 - 45 0.00444 - 46 0.000887 - 47 0.117 - - 15 868 28 0 - 0 0.0104 - 2 0.0657 - 3 0.0023 - 4 0.00806 - 7 0.468 - 8 0.00691 - 13 0.0023 - 14 0.00115 - 15 0.00115 - 18 0.00461 - 20 0.00115 - 21 0.0023 - 24 0.00115 - 26 0.0415 - 28 0.0173 - 29 0.0242 - 30 0.0161 - 31 0.00461 - 32 0.00346 - 33 0.0242 - 34 0.0023 - 37 0.00115 - 41 0.0668 - 42 0.0127 - 44 0.00115 - 45 0.00806 - 46 0.0023 - 47 0.199 - - 16 33 9 0 - 2 0.0303 - 7 0.455 - 20 0.0606 - 28 0.0909 - 30 0.0303 - 32 0.0303 - 41 0.0606 - 45 0.0303 - 47 0.212 - - 18 5 4 0 - 2 0.4 - 7 0.2 - 26 0.2 - 45 0.2 - - 23 2 2 0 - 2 0.5 - 33 0.5 - - 30 87 11 0 - 2 0.023 - 7 0.575 - 26 0.046 - 28 0.103 - 29 0.0345 - 30 0.0345 - 31 0.023 - 33 0.023 - 41 0.092 - 42 0.0115 - 47 0.0345 - - 31 59 13 0 - 2 0.0339 - 4 0.0339 - 7 0.475 - 14 0.0169 - 24 0.0169 - 26 0.0339 - 28 0.0508 - 29 0.102 - 30 0.0508 - 31 0.0169 - 41 0.0169 - 46 0.0169 - 47 0.136 - - 41 5 5 0 - 2 0.2 - 4 0.2 - 7 0.2 - 28 0.2 - 41 0.2 - - 43 4 2 0 - 7 0.25 - 44 0.75 - - 45 68 11 0 - 0 0.0441 - 2 0.0147 - 7 0.426 - 15 0.0147 - 26 0.0735 - 28 0.0735 - 29 0.132 - 30 0.0294 - 33 0.0441 - 41 0.0294 - 47 0.118 - - 46 6 2 0 - 19 0.167 - 45 0.833 - - 47 72658 43 0 - 0 0.0614 - 1 0.000592 - 2 0.0476 - 3 0.000495 - 4 0.0029 - 5 2.75e-05 - 6 9.63e-05 - 7 0.366 - 8 0.00143 - 9 9.63e-05 - 10 4.13e-05 - 12 0.000165 - 13 0.00491 - 14 0.00278 - 15 0.00256 - 16 0.00011 - 17 0.00033 - 18 0.000193 - 19 0.00193 - 20 0.000179 - 21 0.00988 - 22 8.26e-05 - 24 0.0078 - 25 4.13e-05 - 26 0.0365 - 28 0.0633 - 29 0.0569 - 30 0.0378 - 31 0.0172 - 32 0.0135 - 33 0.0349 - 34 0.000578 - 35 0.000289 - 36 1.38e-05 - 37 0.00255 - 40 9.63e-05 - 41 0.0789 - 42 0.0236 - 43 0.000385 - 44 0.00228 - 45 0.0115 - 46 0.00183 - 47 0.107 - - 48 235 20 0 - 0 0.0255 - 2 0.0255 - 4 0.00851 - 7 0.417 - 14 0.00851 - 19 0.00426 - 21 0.0128 - 24 0.0128 - 26 0.034 - 28 0.0638 - 29 0.0213 - 30 0.0255 - 31 0.017 - 32 0.00851 - 33 0.0213 - 41 0.0979 - 42 0.00851 - 45 0.00426 - 46 0.00426 - 47 0.179 - - 54 12 2 0 - 7 0.833 - 28 0.167 - - 55 7 6 0 - 7 0.286 - 13 0.143 - 26 0.143 - 28 0.143 - 29 0.143 - 47 0.143 - - 57 19 7 0 - 4 0.0526 - 7 0.526 - 26 0.0526 - 29 0.105 - 30 0.0526 - 33 0.0526 - 41 0.158 - - 60 22 6 0 - 7 0.682 - 21 0.0455 - 28 0.0455 - 30 0.0455 - 41 0.0909 - 47 0.0909 - - 68 8 5 0 - 7 0.375 - 28 0.25 - 30 0.125 - 32 0.125 - 47 0.125 - - 56 295 15 2 - 2 0.00678 - 3 0.0542 - 4 0.42 - 7 0.00339 - 8 0.251 - 9 0.0169 - 10 0.0102 - 15 0.00339 - 20 0.122 - 21 0.0102 - 30 0.00678 - 31 0.0102 - 34 0.00339 - 41 0.00678 - 45 0.0746 - - 15 2 2 0 - 7 0.5 - 8 0.5 - - 46 2 1 0 - 45 1 - - 57 38 11 4 - 2 0.132 - 13 0.0526 - 14 0.0263 - 15 0.5 - 24 0.0263 - 28 0.0526 - 33 0.0526 - 41 0.0526 - 42 0.0263 - 44 0.0263 - 45 0.0526 - - 18 19 2 0 - 13 0.0526 - 15 0.947 - - 41 4 4 0 - 2 0.25 - 24 0.25 - 41 0.25 - 45 0.25 - - 47 4 4 0 - 13 0.25 - 14 0.25 - 28 0.25 - 33 0.25 - - 55 5 4 0 - 2 0.4 - 28 0.2 - 41 0.2 - 44 0.2 - - 58 108 17 5 - 0 0.00926 - 2 0.00926 - 3 0.037 - 4 0.0926 - 6 0.0185 - 7 0.0833 - 8 0.167 - 13 0.102 - 15 0.333 - 16 0.00926 - 18 0.0185 - 20 0.0278 - 28 0.00926 - 31 0.00926 - 40 0.0185 - 41 0.0185 - 46 0.037 - - 8 10 7 0 - 0 0.1 - 2 0.1 - 4 0.1 - 7 0.2 - 8 0.3 - 18 0.1 - 20 0.1 - - 13 37 10 0 - 3 0.0811 - 4 0.216 - 6 0.027 - 7 0.0811 - 8 0.216 - 13 0.135 - 15 0.162 - 18 0.027 - 20 0.027 - 46 0.027 - - 14 21 10 0 - 4 0.0476 - 6 0.0476 - 7 0.0952 - 8 0.238 - 13 0.19 - 15 0.19 - 20 0.0476 - 28 0.0476 - 31 0.0476 - 46 0.0476 - - 15 31 5 0 - 7 0.0645 - 8 0.0323 - 15 0.806 - 16 0.0323 - 40 0.0645 - - 47 5 4 0 - 3 0.2 - 13 0.2 - 41 0.2 - 46 0.4 - - 60 8217 36 21 - 0 0.0504 - 1 0.000122 - 2 0.0288 - 3 0.00231 - 4 0.00828 - 7 0.378 - 8 0.00633 - 9 0.000122 - 10 0.000122 - 13 0.0158 - 14 0.00645 - 15 0.00377 - 16 0.000122 - 18 0.00316 - 19 0.00122 - 20 0.000852 - 21 0.0113 - 22 0.000122 - 23 0.000122 - 24 0.00828 - 26 0.151 - 28 0.0612 - 29 0.0785 - 30 0.0245 - 31 0.0207 - 32 0.00876 - 33 0.0234 - 34 0.00073 - 37 0.00207 - 41 0.0211 - 42 0.0376 - 43 0.000122 - 44 0.0202 - 45 0.00146 - 46 0.000243 - 47 0.0221 - - 2 2 2 0 - 31 0.5 - 41 0.5 - - 3 8 4 0 - 0 0.25 - 26 0.375 - 28 0.125 - 29 0.25 - - 4 63 16 0 - 0 0.143 - 2 0.111 - 7 0.143 - 13 0.0317 - 14 0.0317 - 15 0.0159 - 24 0.0317 - 26 0.0317 - 28 0.0317 - 29 0.0476 - 31 0.0159 - 32 0.0159 - 33 0.0317 - 41 0.206 - 42 0.0159 - 47 0.0952 - - 7 7 5 0 - 0 0.429 - 2 0.143 - 7 0.143 - 13 0.143 - 45 0.143 - - 8 300 22 0 - 0 0.0933 - 2 0.0467 - 4 0.0267 - 7 0.31 - 8 0.00333 - 13 0.01 - 15 0.00667 - 18 0.03 - 20 0.00333 - 21 0.0133 - 24 0.0133 - 26 0.02 - 28 0.0867 - 29 0.05 - 30 0.0367 - 31 0.0267 - 32 0.00667 - 33 0.0333 - 37 0.00333 - 41 0.04 - 42 0.09 - 47 0.05 - - 9 5 5 0 - 2 0.2 - 28 0.2 - 29 0.2 - 32 0.2 - 41 0.2 - - 13 1033 27 0 - 0 0.0552 - 1 0.000968 - 2 0.0387 - 3 0.000968 - 4 0.0155 - 7 0.284 - 8 0.0029 - 13 0.00581 - 14 0.0106 - 15 0.00194 - 18 0.0029 - 19 0.00194 - 21 0.0271 - 24 0.00678 - 26 0.0736 - 28 0.0697 - 29 0.0794 - 30 0.0368 - 31 0.0281 - 32 0.0126 - 33 0.0523 - 37 0.000968 - 41 0.0542 - 42 0.092 - 44 0.00678 - 45 0.00194 - 47 0.0368 - - 14 1393 31 0 - 0 0.0682 - 2 0.0223 - 3 0.00144 - 4 0.0215 - 7 0.363 - 8 0.0223 - 9 0.000718 - 13 0.0625 - 14 0.00718 - 15 0.00287 - 16 0.000718 - 18 0.00718 - 19 0.00287 - 20 0.00359 - 21 0.0122 - 24 0.00861 - 26 0.0818 - 28 0.0653 - 29 0.0639 - 30 0.023 - 31 0.0294 - 32 0.0108 - 33 0.0294 - 34 0.000718 - 37 0.0101 - 41 0.0251 - 42 0.0101 - 43 0.000718 - 44 0.00144 - 45 0.00287 - 47 0.038 - - 15 70 16 0 - 0 0.0143 - 2 0.0286 - 4 0.0857 - 7 0.386 - 8 0.0143 - 18 0.0143 - 20 0.0143 - 28 0.0857 - 29 0.0571 - 30 0.0286 - 31 0.0143 - 33 0.0571 - 41 0.0286 - 42 0.0429 - 46 0.0143 - 47 0.114 - - 16 12 5 0 - 0 0.0833 - 4 0.333 - 7 0.25 - 28 0.167 - 47 0.167 - - 20 18 11 0 - 0 0.111 - 2 0.111 - 7 0.167 - 26 0.0556 - 28 0.0556 - 29 0.111 - 30 0.0556 - 32 0.0556 - 33 0.111 - 41 0.111 - 42 0.0556 - - 21 4 3 0 - 18 0.25 - 31 0.5 - 42 0.25 - - 31 5 3 0 - 0 0.4 - 7 0.4 - 33 0.2 - - 45 1 1 0 - 32 1 - - 46 1 1 0 - 45 1 - - 47 5237 31 0 - 0 0.0405 - 2 0.0258 - 3 0.00306 - 4 0.000573 - 7 0.409 - 8 0.00286 - 10 0.000191 - 13 0.00592 - 14 0.00573 - 15 0.0042 - 18 0.000382 - 19 0.000764 - 21 0.0084 - 22 0.000191 - 23 0.000191 - 24 0.00802 - 26 0.198 - 28 0.0571 - 29 0.0852 - 30 0.0223 - 31 0.0164 - 32 0.00726 - 33 0.0145 - 34 0.000955 - 37 0.000191 - 41 0.00955 - 42 0.0315 - 44 0.03 - 45 0.000382 - 46 0.000191 - 47 0.0107 - - 48 4 4 0 - 7 0.25 - 28 0.25 - 41 0.25 - 47 0.25 - - 55 19 8 0 - 0 0.105 - 2 0.158 - 7 0.368 - 26 0.105 - 28 0.0526 - 42 0.105 - 45 0.0526 - 47 0.0526 - - 56 14 6 0 - 4 0.0714 - 7 0.571 - 24 0.0714 - 29 0.0714 - 33 0.143 - 47 0.0714 - - 58 1 1 0 - 45 1 - - 60 15 4 0 - 7 0.8 - 8 0.0667 - 26 0.0667 - 31 0.0667 - - 62 60 9 3 - 7 0.367 - 18 0.0167 - 26 0.05 - 30 0.0167 - 34 0.0167 - 41 0.0167 - 42 0.05 - 45 0.383 - 47 0.0833 - - 2 10 3 0 - 7 0.7 - 26 0.2 - 30 0.1 - - 46 14 1 0 - 45 1 - - 47 13 6 0 - 7 0.308 - 34 0.0769 - 41 0.0769 - 42 0.154 - 45 0.154 - 47 0.231 - - 64 48 16 4 - 0 0.0833 - 2 0.0208 - 7 0.188 - 13 0.0208 - 19 0.0417 - 24 0.0208 - 26 0.0417 - 28 0.0833 - 29 0.0417 - 30 0.0208 - 31 0.0625 - 33 0.0625 - 41 0.208 - 45 0.0625 - 46 0.0208 - 47 0.0208 - - 2 5 4 0 - 7 0.4 - 28 0.2 - 29 0.2 - 45 0.2 - - 41 9 7 0 - 0 0.222 - 2 0.111 - 7 0.222 - 19 0.111 - 24 0.111 - 26 0.111 - 47 0.111 - - 42 11 8 0 - 0 0.0909 - 7 0.364 - 13 0.0909 - 26 0.0909 - 28 0.0909 - 29 0.0909 - 30 0.0909 - 33 0.0909 - - 47 22 9 0 - 0 0.0455 - 7 0.0455 - 19 0.0455 - 28 0.0455 - 31 0.136 - 33 0.0909 - 41 0.455 - 45 0.0909 - 46 0.0455 - - 68 206 22 3 - 0 0.00971 - 2 0.00971 - 3 0.00971 - 4 0.209 - 7 0.238 - 8 0.194 - 9 0.00485 - 13 0.0146 - 15 0.0291 - 18 0.034 - 20 0.0194 - 21 0.00485 - 26 0.0194 - 28 0.034 - 29 0.00485 - 30 0.0388 - 31 0.0146 - 32 0.00971 - 33 0.0291 - 41 0.00971 - 42 0.00971 - 47 0.0534 - - 8 17 5 0 - 7 0.294 - 8 0.529 - 15 0.0588 - 32 0.0588 - 47 0.0588 - - 13 71 12 0 - 2 0.0282 - 4 0.465 - 7 0.127 - 8 0.183 - 9 0.0141 - 13 0.0423 - 15 0.0423 - 26 0.0141 - 30 0.0141 - 33 0.0282 - 41 0.0141 - 47 0.0282 - - 14 113 19 0 - 0 0.0177 - 3 0.0177 - 4 0.0796 - 7 0.274 - 8 0.159 - 15 0.0177 - 18 0.0619 - 20 0.0354 - 21 0.00885 - 26 0.0265 - 28 0.0619 - 29 0.00885 - 30 0.0619 - 31 0.0265 - 32 0.00885 - 33 0.0354 - 41 0.00885 - 42 0.0177 - 47 0.0708 - - 69 5 3 0 - 4 0.2 - 18 0.4 - 45 0.4 - -56 3353 24 19 - 2 0.24 - 3 0.0289 - 4 0.15 - 6 0.000596 - 7 0.00209 - 8 0.17 - 9 0.00716 - 10 0.00388 - 13 0.0674 - 14 0.0155 - 15 0.0692 - 16 0.00418 - 18 0.0746 - 20 0.0435 - 21 0.00507 - 30 0.00537 - 31 0.00775 - 34 0.00119 - 36 0.00119 - 39 0.000596 - 40 0.000298 - 41 0.0537 - 42 0.000596 - 45 0.0474 - - 2 8 4 0 - 13 0.375 - 14 0.125 - 15 0.375 - 16 0.125 - - 3 22 9 1 - 2 0.318 - 4 0.136 - 8 0.182 - 15 0.0455 - 18 0.0909 - 20 0.0455 - 21 0.0455 - 39 0.0909 - 45 0.0455 - - 47 7 4 0 - 8 0.429 - 21 0.143 - 39 0.286 - 45 0.143 - - 4 10 4 0 - 2 0.1 - 21 0.1 - 41 0.1 - 45 0.7 - - 6 8 2 0 - 6 0.25 - 45 0.75 - - 7 3 1 0 - 15 1 - - 8 253 14 4 - 2 0.506 - 3 0.0356 - 4 0.107 - 7 0.00395 - 8 0.119 - 9 0.0119 - 13 0.00395 - 15 0.00791 - 18 0.0711 - 20 0.0395 - 30 0.00395 - 31 0.00395 - 41 0.0632 - 45 0.0237 - - 8 21 4 0 - 2 0.857 - 18 0.0476 - 41 0.0476 - 45 0.0476 - - 13 140 14 0 - 2 0.464 - 3 0.00714 - 4 0.15 - 7 0.00714 - 8 0.157 - 9 0.00714 - 13 0.00714 - 15 0.00714 - 18 0.0786 - 20 0.0357 - 30 0.00714 - 31 0.00714 - 41 0.0357 - 45 0.0286 - - 14 76 10 0 - 2 0.5 - 3 0.0526 - 4 0.0263 - 8 0.105 - 9 0.0263 - 15 0.0132 - 18 0.0789 - 20 0.0526 - 41 0.132 - 45 0.0132 - - 47 3 1 0 - 3 1 - - 13 596 17 4 - 2 0.201 - 3 0.0185 - 4 0.0839 - 8 0.309 - 9 0.00503 - 10 0.00336 - 13 0.173 - 14 0.0101 - 15 0.0436 - 18 0.0453 - 20 0.0185 - 30 0.0134 - 31 0.0101 - 34 0.00168 - 36 0.00168 - 41 0.052 - 45 0.0101 - - 13 101 12 0 - 2 0.337 - 3 0.0198 - 4 0.129 - 8 0.248 - 9 0.0099 - 10 0.0099 - 13 0.0891 - 15 0.0297 - 20 0.0198 - 31 0.0099 - 41 0.0891 - 45 0.0099 - - 14 94 9 0 - 2 0.479 - 4 0.0638 - 8 0.266 - 9 0.0106 - 13 0.0319 - 15 0.0106 - 20 0.0319 - 31 0.0213 - 41 0.0851 - - 30 4 1 0 - 2 1 - - 47 392 17 0 - 2 0.0893 - 3 0.023 - 4 0.0791 - 8 0.339 - 9 0.00255 - 10 0.00255 - 13 0.23 - 14 0.0153 - 15 0.0536 - 18 0.0689 - 20 0.0153 - 30 0.0204 - 31 0.00765 - 34 0.00255 - 36 0.00255 - 41 0.0357 - 45 0.0128 - - 14 320 16 1 - 2 0.0781 - 3 0.0375 - 4 0.0531 - 8 0.312 - 9 0.00625 - 10 0.00625 - 13 0.306 - 14 0.00313 - 15 0.0281 - 18 0.0188 - 20 0.0281 - 21 0.00938 - 30 0.00938 - 31 0.0281 - 41 0.0719 - 45 0.00313 - - 13 6 4 0 - 2 0.333 - 13 0.167 - 20 0.167 - 41 0.333 - - 15 301 16 6 - 2 0.159 - 3 0.0133 - 4 0.0897 - 7 0.0133 - 8 0.0399 - 9 0.00332 - 13 0.00664 - 14 0.0332 - 15 0.412 - 16 0.00997 - 18 0.0365 - 20 0.0133 - 21 0.00332 - 40 0.00332 - 41 0.0399 - 45 0.123 - - 7 3 3 0 - 2 0.333 - 15 0.333 - 40 0.333 - - 13 17 9 0 - 2 0.0588 - 4 0.294 - 8 0.235 - 14 0.0588 - 15 0.118 - 18 0.0588 - 20 0.0588 - 41 0.0588 - 45 0.0588 - - 14 6 6 0 - 2 0.167 - 3 0.167 - 4 0.167 - 8 0.167 - 9 0.167 - 15 0.167 - - 15 119 11 0 - 2 0.261 - 4 0.118 - 7 0.0084 - 8 0.0336 - 14 0.0672 - 15 0.252 - 16 0.0084 - 18 0.042 - 20 0.0084 - 41 0.0672 - 45 0.134 - - 16 9 5 0 - 2 0.222 - 15 0.222 - 18 0.111 - 20 0.222 - 45 0.222 - - 47 139 13 0 - 2 0.0719 - 3 0.0216 - 4 0.0432 - 7 0.0216 - 8 0.0216 - 13 0.0144 - 14 0.00719 - 15 0.612 - 16 0.0144 - 18 0.0216 - 21 0.00719 - 41 0.0216 - 45 0.122 - - 16 14 4 0 - 2 0.143 - 4 0.143 - 15 0.643 - 41 0.0714 - - 21 5 2 0 - 2 0.8 - 41 0.2 - - 30 11 4 0 - 2 0.273 - 8 0.273 - 13 0.364 - 20 0.0909 - - 31 9 3 0 - 2 0.556 - 4 0.222 - 21 0.222 - - 45 9 6 0 - 2 0.111 - 3 0.111 - 13 0.222 - 14 0.111 - 18 0.333 - 20 0.111 - - 47 1311 20 13 - 2 0.304 - 3 0.0297 - 4 0.188 - 7 0.00153 - 8 0.12 - 9 0.00763 - 10 0.00458 - 13 0.00763 - 14 0.0168 - 15 0.0259 - 16 0.00458 - 18 0.0931 - 20 0.0549 - 21 0.00458 - 30 0.00305 - 31 0.00534 - 34 0.00153 - 36 0.00153 - 41 0.0686 - 45 0.0572 - - 4 9 3 0 - 2 0.111 - 41 0.111 - 45 0.778 - - 6 6 1 0 - 45 1 - - 8 224 12 0 - 2 0.571 - 3 0.0268 - 4 0.116 - 7 0.00446 - 8 0.0402 - 9 0.00893 - 15 0.00446 - 18 0.0804 - 20 0.0446 - 30 0.00446 - 41 0.0714 - 45 0.0268 - - 13 298 15 0 - 2 0.396 - 3 0.00671 - 4 0.154 - 8 0.134 - 9 0.00671 - 10 0.00336 - 13 0.00336 - 15 0.0302 - 18 0.0906 - 20 0.0369 - 31 0.00671 - 34 0.00336 - 36 0.00336 - 41 0.104 - 45 0.0201 - - 14 117 13 0 - 2 0.197 - 3 0.0855 - 4 0.12 - 8 0.197 - 9 0.00855 - 10 0.0171 - 13 0.0342 - 15 0.0256 - 18 0.0342 - 20 0.0598 - 30 0.00855 - 31 0.0171 - 41 0.197 - - 15 154 13 0 - 2 0.292 - 4 0.162 - 7 0.00649 - 8 0.039 - 13 0.00649 - 14 0.0649 - 15 0.026 - 16 0.013 - 18 0.0455 - 20 0.026 - 21 0.00649 - 41 0.0779 - 45 0.234 - - 21 5 2 0 - 2 0.8 - 41 0.2 - - 31 9 3 0 - 2 0.556 - 4 0.222 - 21 0.222 - - 45 9 6 0 - 2 0.111 - 3 0.111 - 13 0.222 - 14 0.111 - 18 0.333 - 20 0.111 - - 48 10 4 0 - 2 0.6 - 4 0.2 - 18 0.1 - 20 0.1 - - 55 17 5 0 - 2 0.412 - 3 0.0588 - 4 0.0588 - 18 0.0588 - 45 0.412 - - 56 414 19 0 - 2 0.101 - 3 0.0459 - 4 0.297 - 8 0.181 - 9 0.0121 - 10 0.00725 - 13 0.00483 - 14 0.0266 - 15 0.0411 - 16 0.00966 - 18 0.14 - 20 0.087 - 21 0.00725 - 30 0.00483 - 31 0.00725 - 34 0.00242 - 36 0.00242 - 41 0.0121 - 45 0.00966 - - 62 2 1 0 - 45 1 - - 48 11 5 0 - 2 0.545 - 4 0.182 - 8 0.0909 - 18 0.0909 - 20 0.0909 - - 55 22 6 0 - 2 0.318 - 3 0.0909 - 4 0.0455 - 18 0.0455 - 42 0.0909 - 45 0.409 - - 56 419 19 0 - 2 0.1 - 3 0.0453 - 4 0.294 - 8 0.179 - 9 0.0119 - 10 0.00716 - 13 0.00477 - 14 0.0263 - 15 0.0406 - 16 0.00955 - 18 0.138 - 20 0.0859 - 21 0.00716 - 30 0.00477 - 31 0.00716 - 34 0.00239 - 36 0.00239 - 41 0.0119 - 45 0.0215 - - 62 2 1 0 - 45 1 - -57 191766 42 26 - 0 0.0127 - 1 6.26e-05 - 2 0.00876 - 3 0.0413 - 4 0.00784 - 6 9.91e-05 - 7 0.0115 - 8 0.0343 - 9 0.00545 - 10 0.00283 - 12 0.000167 - 13 0.352 - 14 0.15 - 15 0.0378 - 16 0.00175 - 18 0.000245 - 19 0.00638 - 20 5.21e-06 - 21 0.0315 - 22 0.00242 - 23 0.000209 - 24 0.00711 - 25 3.65e-05 - 26 0.000136 - 27 7.3e-05 - 28 0.0277 - 29 0.0264 - 30 0.0277 - 31 0.0819 - 32 0.00613 - 33 0.00986 - 34 0.000375 - 35 0.000261 - 37 9.39e-05 - 40 4.17e-05 - 41 0.0447 - 42 0.00376 - 43 0.00162 - 44 0.00109 - 45 0.00293 - 46 0.00618 - 47 0.0445 - - 2 77 17 3 - 0 0.013 - 3 0.0519 - 4 0.0519 - 8 0.013 - 9 0.013 - 13 0.338 - 14 0.0779 - 15 0.026 - 18 0.013 - 19 0.013 - 21 0.0519 - 24 0.026 - 28 0.026 - 31 0.013 - 41 0.221 - 42 0.026 - 46 0.026 - - 7 4 3 0 - 24 0.25 - 31 0.25 - 41 0.5 - - 47 57 10 0 - 3 0.0702 - 4 0.0702 - 8 0.0175 - 13 0.439 - 14 0.0702 - 15 0.0351 - 18 0.0175 - 21 0.0702 - 41 0.193 - 42 0.0175 - - 57 14 10 0 - 0 0.0714 - 9 0.0714 - 13 0.0714 - 14 0.143 - 19 0.0714 - 24 0.0714 - 28 0.0714 - 41 0.286 - 42 0.0714 - 46 0.0714 - - 4 29 13 2 - 0 0.103 - 7 0.069 - 8 0.103 - 13 0.0345 - 14 0.103 - 24 0.069 - 28 0.0345 - 29 0.0345 - 32 0.069 - 33 0.103 - 41 0.207 - 46 0.0345 - 47 0.0345 - - 7 18 9 0 - 0 0.111 - 7 0.111 - 14 0.0556 - 24 0.111 - 29 0.0556 - 32 0.0556 - 33 0.167 - 41 0.278 - 47 0.0556 - - 57 11 8 0 - 0 0.0909 - 8 0.273 - 13 0.0909 - 14 0.182 - 28 0.0909 - 32 0.0909 - 41 0.0909 - 46 0.0909 - - 6 16 6 1 - 3 0.0625 - 6 0.188 - 13 0.188 - 15 0.188 - 41 0.188 - 44 0.188 - - 6 3 1 0 - 44 1 - - 7 83565 41 0 - 0 0.0129 - 1 7.18e-05 - 2 0.00859 - 3 0.0374 - 4 0.00881 - 6 7.18e-05 - 7 0.0117 - 8 0.0334 - 9 0.00596 - 10 0.00335 - 12 0.000168 - 13 0.369 - 14 0.156 - 15 0.0407 - 16 0.00188 - 18 0.000239 - 19 0.006 - 21 0.0348 - 22 0.00268 - 23 0.000215 - 24 0.00704 - 25 2.39e-05 - 26 0.000132 - 27 1.2e-05 - 28 0.0257 - 29 0.0221 - 30 0.0204 - 31 0.0807 - 32 0.00594 - 33 0.00902 - 34 0.000419 - 35 0.000299 - 37 8.38e-05 - 40 3.59e-05 - 41 0.0318 - 42 0.00281 - 43 0.0017 - 44 0.00107 - 45 0.00294 - 46 0.0061 - 47 0.0473 - - 8 392 18 5 - 0 0.0281 - 2 0.00255 - 3 0.00255 - 8 0.0051 - 13 0.0765 - 14 0.436 - 20 0.00255 - 21 0.0179 - 24 0.00255 - 29 0.00255 - 30 0.00255 - 31 0.00255 - 41 0.342 - 42 0.0281 - 44 0.0051 - 45 0.0051 - 46 0.0332 - 47 0.0051 - - 7 342 7 0 - 8 0.00292 - 13 0.0614 - 14 0.488 - 41 0.377 - 42 0.0322 - 44 0.00585 - 46 0.0322 - - 14 1 1 0 - 20 1 - - 26 12 8 0 - 3 0.0833 - 13 0.167 - 14 0.0833 - 21 0.0833 - 31 0.0833 - 41 0.25 - 45 0.167 - 47 0.0833 - - 47 25 9 0 - 0 0.44 - 2 0.04 - 8 0.04 - 13 0.12 - 14 0.12 - 21 0.12 - 24 0.04 - 29 0.04 - 30 0.04 - - 57 10 5 0 - 13 0.3 - 21 0.3 - 41 0.2 - 46 0.1 - 47 0.1 - - 9 2 2 0 - 0 0.5 - 33 0.5 - - 13 8 5 0 - 3 0.125 - 8 0.125 - 13 0.5 - 28 0.125 - 41 0.125 - - 15 11 5 0 - 15 0.455 - 16 0.0909 - 42 0.0909 - 45 0.273 - 47 0.0909 - - 21 467 30 5 - 0 0.0428 - 2 0.0428 - 3 0.00214 - 4 0.00214 - 7 0.0171 - 8 0.03 - 10 0.00214 - 13 0.107 - 14 0.122 - 15 0.0107 - 18 0.00428 - 19 0.0214 - 21 0.0685 - 22 0.00214 - 24 0.00214 - 28 0.0364 - 29 0.0321 - 30 0.0193 - 31 0.0664 - 32 0.00642 - 33 0.0236 - 34 0.00214 - 37 0.00214 - 41 0.165 - 42 0.0257 - 43 0.00428 - 44 0.00857 - 45 0.0193 - 46 0.00642 - 47 0.105 - - 7 289 25 0 - 0 0.0346 - 2 0.0554 - 3 0.00346 - 7 0.0138 - 8 0.0381 - 10 0.00346 - 13 0.111 - 14 0.135 - 15 0.0138 - 19 0.00692 - 21 0.0554 - 22 0.00346 - 28 0.0208 - 29 0.0138 - 31 0.0727 - 32 0.00692 - 33 0.00346 - 37 0.00346 - 41 0.221 - 42 0.0311 - 43 0.00692 - 44 0.00346 - 45 0.0138 - 46 0.00692 - 47 0.121 - - 21 10 7 0 - 0 0.1 - 13 0.1 - 14 0.2 - 29 0.1 - 41 0.3 - 44 0.1 - 47 0.1 - - 30 4 3 0 - 41 0.5 - 44 0.25 - 47 0.25 - - 47 90 23 0 - 0 0.0556 - 2 0.0333 - 7 0.0444 - 8 0.0111 - 13 0.133 - 14 0.1 - 15 0.0111 - 18 0.0111 - 19 0.0667 - 21 0.144 - 24 0.0111 - 28 0.0444 - 29 0.0444 - 30 0.0556 - 31 0.0667 - 32 0.0111 - 33 0.0667 - 34 0.0111 - 41 0.0111 - 42 0.0111 - 45 0.0111 - 46 0.0111 - 47 0.0333 - - 57 62 18 0 - 0 0.0645 - 4 0.0161 - 8 0.0323 - 13 0.0484 - 14 0.0968 - 18 0.0161 - 19 0.0323 - 21 0.0323 - 28 0.0968 - 29 0.0968 - 30 0.0645 - 31 0.0645 - 33 0.0645 - 41 0.0645 - 42 0.0323 - 44 0.0161 - 45 0.0323 - 47 0.129 - - 22 7 7 0 - 0 0.143 - 21 0.143 - 22 0.143 - 30 0.143 - 33 0.143 - 41 0.143 - 47 0.143 - - 24 55 11 0 - 0 0.0182 - 13 0.0909 - 14 0.0545 - 19 0.0545 - 28 0.2 - 29 0.109 - 30 0.145 - 31 0.236 - 32 0.0182 - 33 0.0545 - 41 0.0182 - - 26 8661 35 0 - 0 0.00185 - 2 0.00496 - 3 0.0928 - 4 0.00127 - 6 0.000231 - 7 0.00947 - 8 0.068 - 9 0.00266 - 10 0.000115 - 13 0.286 - 14 0.103 - 15 0.02 - 16 0.000924 - 19 0.00935 - 21 0.0461 - 22 0.00173 - 23 0.000231 - 24 0.00877 - 26 0.000115 - 27 0.000693 - 28 0.0462 - 29 0.0701 - 30 0.076 - 31 0.0876 - 32 0.00774 - 33 0.0162 - 35 0.000115 - 40 0.000115 - 41 0.0264 - 42 0.00196 - 43 0.00127 - 44 0.000231 - 45 0.000462 - 46 0.00531 - 47 0.00231 - - 28 3 3 0 - 2 0.333 - 14 0.333 - 41 0.333 - - 29 2 1 0 - 41 1 - - 30 1062 21 2 - 2 0.00847 - 3 0.00659 - 7 0.00282 - 8 0.00282 - 13 0.0574 - 14 0.0433 - 15 0.0122 - 16 0.00188 - 19 0.00282 - 21 0.0104 - 22 0.000942 - 28 0.000942 - 29 0.00188 - 30 0.000942 - 31 0.0132 - 41 0.65 - 42 0.0377 - 44 0.00188 - 45 0.00282 - 46 0.0113 - 47 0.13 - - 47 613 20 0 - 2 0.00326 - 3 0.00979 - 7 0.00326 - 8 0.00489 - 13 0.0897 - 14 0.0669 - 15 0.0212 - 16 0.00326 - 19 0.00326 - 21 0.0179 - 22 0.00163 - 28 0.00163 - 29 0.00326 - 31 0.0179 - 41 0.622 - 42 0.0636 - 44 0.00326 - 45 0.00163 - 46 0.00653 - 47 0.0555 - - 57 448 12 0 - 2 0.0156 - 3 0.00223 - 7 0.00223 - 13 0.0134 - 14 0.0112 - 19 0.00223 - 30 0.00223 - 31 0.0067 - 41 0.69 - 45 0.00446 - 46 0.0179 - 47 0.232 - - 31 361 21 3 - 2 0.0166 - 3 0.036 - 4 0.00554 - 7 0.0166 - 8 0.036 - 9 0.00277 - 13 0.108 - 14 0.0526 - 15 0.00277 - 21 0.0139 - 28 0.00277 - 30 0.00277 - 31 0.0139 - 32 0.00277 - 41 0.593 - 42 0.00554 - 43 0.00277 - 44 0.00277 - 45 0.0111 - 46 0.00277 - 47 0.0693 - - 7 2 1 0 - 14 1 - - 47 57 12 0 - 2 0.105 - 4 0.0175 - 7 0.0351 - 8 0.0702 - 13 0.0351 - 21 0.0351 - 28 0.0175 - 41 0.404 - 42 0.0175 - 44 0.0175 - 45 0.0526 - 47 0.193 - - 57 302 18 0 - 3 0.043 - 4 0.00331 - 7 0.0132 - 8 0.0298 - 9 0.00331 - 13 0.123 - 14 0.0563 - 15 0.00331 - 21 0.00993 - 30 0.00331 - 31 0.0166 - 32 0.00331 - 41 0.632 - 42 0.00331 - 43 0.00331 - 45 0.00331 - 46 0.00331 - 47 0.0464 - - 41 8 6 0 - 2 0.125 - 13 0.125 - 14 0.125 - 15 0.125 - 18 0.25 - 21 0.25 - - 42 3 1 0 - 25 1 - - 45 10 7 0 - 0 0.2 - 3 0.1 - 13 0.2 - 14 0.1 - 19 0.1 - 21 0.2 - 47 0.1 - - 46 2 1 0 - 21 1 - - 47 94690 41 22 - 0 0.0128 - 1 6.34e-05 - 2 0.00877 - 3 0.0418 - 4 0.00773 - 6 8.45e-05 - 7 0.0116 - 8 0.0327 - 9 0.00546 - 10 0.00276 - 12 0.000169 - 13 0.357 - 14 0.151 - 15 0.0383 - 16 0.00177 - 18 0.000232 - 19 0.00646 - 21 0.0268 - 22 0.00233 - 23 0.000211 - 24 0.0072 - 25 2.11e-05 - 26 0.000137 - 27 7.39e-05 - 28 0.0281 - 29 0.0267 - 30 0.0257 - 31 0.0814 - 32 0.00621 - 33 0.00998 - 34 0.00038 - 35 0.000253 - 37 9.5e-05 - 40 4.22e-05 - 41 0.0452 - 42 0.00379 - 43 0.00163 - 44 0.0011 - 45 0.00291 - 46 0.00625 - 47 0.045 - - 2 75 16 0 - 0 0.0133 - 3 0.0533 - 4 0.0533 - 8 0.0133 - 9 0.0133 - 13 0.347 - 14 0.08 - 15 0.0267 - 19 0.0133 - 21 0.0533 - 24 0.0267 - 28 0.0133 - 31 0.0133 - 41 0.227 - 42 0.0267 - 46 0.0267 - - 4 29 13 0 - 0 0.103 - 7 0.069 - 8 0.103 - 13 0.0345 - 14 0.103 - 24 0.069 - 28 0.0345 - 29 0.0345 - 32 0.069 - 33 0.103 - 41 0.207 - 46 0.0345 - 47 0.0345 - - 6 13 5 0 - 3 0.0769 - 13 0.231 - 15 0.231 - 41 0.231 - 44 0.231 - - 7 82196 41 0 - 0 0.0132 - 1 7.3e-05 - 2 0.00869 - 3 0.0379 - 4 0.00861 - 6 7.3e-05 - 7 0.0119 - 8 0.0297 - 9 0.00592 - 10 0.00316 - 12 0.00017 - 13 0.375 - 14 0.158 - 15 0.0413 - 16 0.00191 - 18 0.000243 - 19 0.0061 - 21 0.0258 - 22 0.00248 - 23 0.000219 - 24 0.00715 - 25 2.43e-05 - 26 0.000134 - 27 1.22e-05 - 28 0.0261 - 29 0.0225 - 30 0.0207 - 31 0.082 - 32 0.00603 - 33 0.00917 - 34 0.000426 - 35 0.00028 - 37 8.52e-05 - 40 3.65e-05 - 41 0.0323 - 42 0.00286 - 43 0.0017 - 44 0.00107 - 45 0.00293 - 46 0.00618 - 47 0.0481 - - 8 387 17 0 - 0 0.0284 - 2 0.00258 - 3 0.00258 - 8 0.00258 - 13 0.0775 - 14 0.442 - 21 0.0103 - 24 0.00258 - 29 0.00258 - 30 0.00258 - 31 0.00258 - 41 0.346 - 42 0.0284 - 44 0.00517 - 45 0.00517 - 46 0.0336 - 47 0.00517 - - 9 2 2 0 - 0 0.5 - 33 0.5 - - 13 7 5 0 - 3 0.143 - 8 0.143 - 13 0.429 - 28 0.143 - 41 0.143 - - 15 11 5 0 - 15 0.455 - 16 0.0909 - 42 0.0909 - 45 0.273 - 47 0.0909 - - 21 439 28 0 - 0 0.0456 - 2 0.0456 - 3 0.00228 - 4 0.00228 - 7 0.0182 - 8 0.0296 - 13 0.114 - 14 0.125 - 15 0.0114 - 18 0.00456 - 19 0.0228 - 21 0.0296 - 24 0.00228 - 28 0.0387 - 29 0.0342 - 30 0.0205 - 31 0.0706 - 32 0.00683 - 33 0.0251 - 34 0.00228 - 37 0.00228 - 41 0.173 - 42 0.0273 - 43 0.00456 - 44 0.00911 - 45 0.0137 - 46 0.00683 - 47 0.112 - - 22 7 7 0 - 0 0.143 - 21 0.143 - 22 0.143 - 30 0.143 - 33 0.143 - 41 0.143 - 47 0.143 - - 24 55 11 0 - 0 0.0182 - 13 0.0909 - 14 0.0545 - 19 0.0545 - 28 0.2 - 29 0.109 - 30 0.145 - 31 0.236 - 32 0.0182 - 33 0.0545 - 41 0.0182 - - 26 8601 35 0 - 0 0.00186 - 2 0.00488 - 3 0.0935 - 4 0.00128 - 6 0.000233 - 7 0.00953 - 8 0.0671 - 9 0.00267 - 10 0.000116 - 13 0.288 - 14 0.103 - 15 0.0201 - 16 0.00093 - 19 0.00942 - 21 0.0414 - 22 0.00163 - 23 0.000233 - 24 0.00884 - 26 0.000116 - 27 0.000698 - 28 0.0465 - 29 0.0706 - 30 0.0765 - 31 0.0882 - 32 0.00779 - 33 0.0163 - 35 0.000116 - 40 0.000116 - 41 0.0265 - 42 0.00198 - 43 0.00128 - 44 0.000233 - 45 0.000465 - 46 0.00535 - 47 0.00233 - - 29 2 1 0 - 41 1 - - 30 1055 21 0 - 2 0.00853 - 3 0.00664 - 7 0.00284 - 8 0.00284 - 13 0.0578 - 14 0.0436 - 15 0.0123 - 16 0.0019 - 19 0.00284 - 21 0.00379 - 22 0.000948 - 28 0.000948 - 29 0.0019 - 30 0.000948 - 31 0.0133 - 41 0.654 - 42 0.0379 - 44 0.0019 - 45 0.00284 - 46 0.0114 - 47 0.131 - - 31 358 21 0 - 2 0.0168 - 3 0.0363 - 4 0.00559 - 7 0.0168 - 8 0.0363 - 9 0.00279 - 13 0.109 - 14 0.0531 - 15 0.00279 - 21 0.00559 - 28 0.00279 - 30 0.00279 - 31 0.014 - 32 0.00279 - 41 0.598 - 42 0.00559 - 43 0.00279 - 44 0.00279 - 45 0.0112 - 46 0.00279 - 47 0.0698 - - 41 2 2 0 - 2 0.5 - 15 0.5 - - 45 9 7 0 - 0 0.222 - 3 0.111 - 13 0.222 - 14 0.111 - 19 0.111 - 21 0.111 - 47 0.111 - - 49 623 28 0 - 0 0.0674 - 2 0.0369 - 3 0.00321 - 4 0.00642 - 7 0.00482 - 8 0.0161 - 9 0.00161 - 12 0.00161 - 13 0.114 - 14 0.0867 - 15 0.0112 - 19 0.00963 - 21 0.0321 - 22 0.00161 - 24 0.00963 - 28 0.0161 - 29 0.0289 - 30 0.0144 - 31 0.0754 - 32 0.00482 - 33 0.0144 - 37 0.00161 - 41 0.319 - 42 0.0385 - 44 0.00321 - 45 0.0161 - 46 0.00482 - 47 0.0594 - - 50 17 10 0 - 8 0.176 - 13 0.118 - 14 0.0588 - 24 0.0588 - 28 0.0588 - 30 0.0588 - 31 0.118 - 33 0.0588 - 41 0.235 - 45 0.0588 - - 55 135 19 0 - 0 0.141 - 2 0.0593 - 7 0.133 - 8 0.0148 - 13 0.0815 - 14 0.0519 - 15 0.00741 - 21 0.037 - 24 0.00741 - 26 0.00741 - 28 0.0444 - 29 0.0444 - 31 0.0741 - 32 0.00741 - 33 0.0296 - 41 0.156 - 42 0.037 - 46 0.00741 - 47 0.0593 - - 57 656 25 0 - 0 0.0244 - 2 0.00915 - 3 0.00457 - 4 0.00305 - 7 0.00457 - 8 0.0457 - 9 0.0061 - 12 0.00152 - 13 0.245 - 14 0.148 - 15 0.0259 - 19 0.00915 - 21 0.0152 - 24 0.0061 - 28 0.0884 - 29 0.0381 - 30 0.061 - 31 0.123 - 32 0.0213 - 33 0.0274 - 41 0.0396 - 42 0.0152 - 45 0.00305 - 46 0.00305 - 47 0.0305 - - 74 5 2 0 - 41 0.2 - 47 0.8 - - 49 628 28 4 - 0 0.0669 - 2 0.0366 - 3 0.00318 - 4 0.00637 - 7 0.00478 - 8 0.0175 - 9 0.00159 - 12 0.00159 - 13 0.113 - 14 0.086 - 15 0.0111 - 19 0.00955 - 21 0.035 - 22 0.00159 - 24 0.00955 - 28 0.0159 - 29 0.0287 - 30 0.0143 - 31 0.0748 - 32 0.00478 - 33 0.0143 - 37 0.00159 - 41 0.318 - 42 0.0382 - 44 0.00318 - 45 0.0175 - 46 0.00478 - 47 0.0589 - - 21 11 6 0 - 0 0.273 - 2 0.0909 - 13 0.0909 - 14 0.182 - 21 0.0909 - 41 0.273 - - 26 36 15 0 - 0 0.0278 - 2 0.0833 - 8 0.0833 - 13 0.306 - 14 0.0833 - 15 0.0278 - 19 0.0278 - 21 0.0556 - 28 0.0278 - 29 0.0556 - 30 0.0278 - 31 0.0833 - 33 0.0278 - 41 0.0556 - 44 0.0278 - - 48 1 1 0 - 7 1 - - 57 6 3 0 - 21 0.333 - 33 0.167 - 42 0.5 - - 50 17 10 0 - 8 0.176 - 13 0.118 - 14 0.0588 - 24 0.0588 - 28 0.0588 - 30 0.0588 - 31 0.118 - 33 0.0588 - 41 0.235 - 45 0.0588 - - 55 142 21 4 - 0 0.134 - 2 0.0563 - 3 0.00704 - 7 0.141 - 8 0.0141 - 13 0.0775 - 14 0.0493 - 15 0.00704 - 21 0.0423 - 24 0.00704 - 26 0.00704 - 28 0.0423 - 29 0.0423 - 30 0.00704 - 31 0.0704 - 32 0.00704 - 33 0.0282 - 41 0.162 - 42 0.0352 - 46 0.00704 - 47 0.0563 - - 41 2 2 0 - 30 0.5 - 41 0.5 - - 47 5 3 0 - 2 0.2 - 3 0.2 - 7 0.6 - - 55 3 2 0 - 8 0.333 - 41 0.667 - - 57 5 4 0 - 2 0.2 - 13 0.2 - 26 0.2 - 41 0.4 - - 57 1537 25 1 - 0 0.0104 - 2 0.013 - 3 0.00195 - 4 0.00846 - 7 0.00195 - 8 0.028 - 9 0.0026 - 12 0.000651 - 13 0.108 - 14 0.0638 - 15 0.0111 - 19 0.0039 - 21 0.0592 - 24 0.0026 - 28 0.0377 - 29 0.0163 - 30 0.318 - 31 0.249 - 32 0.00911 - 33 0.0117 - 41 0.0176 - 42 0.00846 - 45 0.00195 - 46 0.0013 - 47 0.013 - - 7 8 4 0 - 0 0.125 - 4 0.125 - 31 0.125 - 41 0.625 - - 74 5 2 0 - 41 0.2 - 47 0.8 - -58 7648 40 29 - 0 0.00628 - 2 0.0209 - 3 0.0234 - 4 0.0068 - 6 0.00157 - 7 0.0111 - 8 0.028 - 9 0.00144 - 10 0.00105 - 11 0.000262 - 12 0.00144 - 13 0.168 - 14 0.125 - 15 0.117 - 16 0.00405 - 18 0.00131 - 19 0.00902 - 20 0.000785 - 21 0.0369 - 22 0.00105 - 23 0.000262 - 24 0.00105 - 26 0.000785 - 28 0.00732 - 29 0.0034 - 30 0.00288 - 31 0.011 - 32 0.00366 - 33 0.00484 - 34 0.00209 - 35 0.000523 - 37 0.00235 - 40 0.0123 - 41 0.151 - 42 0.0554 - 43 0.000523 - 44 0.132 - 45 0.00392 - 46 0.036 - 47 0.00314 - - 0 2 1 0 - 2 1 - - 2 101 4 0 - 15 0.0099 - 41 0.327 - 42 0.406 - 44 0.257 - - 4 1 1 0 - 28 1 - - 7 6 3 0 - 41 0.333 - 42 0.167 - 44 0.5 - - 8 16 2 0 - 2 0.125 - 44 0.875 - - 13 22 5 0 - 2 0.0909 - 8 0.136 - 13 0.182 - 15 0.0455 - 44 0.545 - - 15 36 5 0 - 2 0.0556 - 15 0.139 - 41 0.0278 - 44 0.75 - 45 0.0278 - - 21 14 6 0 - 2 0.214 - 7 0.143 - 12 0.0714 - 41 0.143 - 42 0.286 - 44 0.143 - - 28 3 2 0 - 2 0.333 - 44 0.667 - - 32 2 1 0 - 2 1 - - 41 1008 32 9 - 0 0.0129 - 2 0.0595 - 3 0.0188 - 4 0.0109 - 6 0.00198 - 7 0.0218 - 8 0.0506 - 9 0.00298 - 10 0.000992 - 11 0.000992 - 12 0.00198 - 13 0.309 - 14 0.143 - 15 0.143 - 16 0.00397 - 18 0.00198 - 19 0.0139 - 21 0.101 - 22 0.00397 - 23 0.000992 - 24 0.00397 - 26 0.00198 - 28 0.0109 - 29 0.00893 - 30 0.00496 - 31 0.0268 - 32 0.00794 - 33 0.0129 - 34 0.00694 - 35 0.00198 - 37 0.00794 - 43 0.000992 - - 2 23 12 0 - 0 0.0435 - 3 0.0435 - 4 0.0435 - 6 0.0435 - 8 0.087 - 13 0.261 - 14 0.087 - 15 0.087 - 21 0.087 - 31 0.087 - 32 0.0435 - 33 0.087 - - 46 99 15 0 - 0 0.0202 - 4 0.0202 - 7 0.0202 - 8 0.121 - 13 0.424 - 14 0.152 - 15 0.0606 - 16 0.0101 - 19 0.0303 - 21 0.0505 - 24 0.0101 - 28 0.0303 - 31 0.0202 - 32 0.0202 - 43 0.0101 - - 49 51 12 0 - 0 0.0196 - 2 0.294 - 3 0.0196 - 7 0.0588 - 8 0.0784 - 13 0.216 - 14 0.118 - 15 0.0588 - 21 0.0588 - 28 0.0196 - 29 0.0196 - 31 0.0392 - - 52 6 3 0 - 7 0.5 - 13 0.333 - 30 0.167 - - 55 139 10 0 - 0 0.0144 - 3 0.0216 - 8 0.0144 - 10 0.00719 - 13 0.122 - 14 0.129 - 15 0.619 - 21 0.0576 - 31 0.00719 - 33 0.00719 - - 57 77 19 0 - 0 0.013 - 2 0.26 - 7 0.0649 - 8 0.039 - 13 0.221 - 14 0.104 - 15 0.0779 - 16 0.039 - 21 0.026 - 22 0.013 - 26 0.013 - 28 0.013 - 29 0.013 - 30 0.013 - 31 0.013 - 33 0.026 - 34 0.013 - 35 0.013 - 37 0.026 - - 62 507 29 0 - 0 0.00789 - 2 0.0375 - 3 0.0256 - 4 0.0158 - 6 0.00197 - 7 0.00986 - 8 0.0375 - 9 0.00592 - 11 0.00197 - 12 0.00197 - 13 0.349 - 14 0.168 - 15 0.0671 - 18 0.00394 - 19 0.0158 - 21 0.142 - 22 0.00592 - 23 0.00197 - 24 0.00592 - 26 0.00197 - 28 0.00789 - 29 0.00986 - 30 0.00394 - 31 0.0355 - 32 0.00789 - 33 0.00986 - 34 0.00592 - 35 0.00197 - 37 0.00986 - - 64 50 16 0 - 0 0.02 - 2 0.08 - 7 0.04 - 8 0.12 - 12 0.02 - 13 0.32 - 14 0.06 - 15 0.04 - 19 0.02 - 21 0.06 - 28 0.04 - 29 0.02 - 32 0.02 - 33 0.06 - 34 0.06 - 37 0.02 - - 66 45 12 0 - 2 0.0444 - 3 0.0222 - 7 0.0444 - 8 0.0222 - 13 0.378 - 14 0.156 - 15 0.0889 - 19 0.0444 - 21 0.133 - 29 0.0222 - 30 0.0222 - 31 0.0222 - - 42 412 25 9 - 0 0.00971 - 2 0.0146 - 3 0.034 - 4 0.00485 - 7 0.0121 - 8 0.0558 - 9 0.00243 - 10 0.00243 - 12 0.00243 - 13 0.354 - 14 0.26 - 15 0.102 - 16 0.00971 - 18 0.00243 - 19 0.00485 - 21 0.034 - 26 0.00243 - 28 0.017 - 29 0.00485 - 30 0.00485 - 31 0.0243 - 32 0.00971 - 33 0.00728 - 43 0.00243 - 46 0.0218 - - 2 40 13 0 - 3 0.05 - 4 0.025 - 8 0.125 - 13 0.325 - 14 0.025 - 15 0.075 - 21 0.1 - 28 0.025 - 29 0.05 - 30 0.05 - 31 0.05 - 32 0.075 - 46 0.025 - - 48 11 7 0 - 2 0.0909 - 3 0.0909 - 7 0.0909 - 8 0.0909 - 13 0.182 - 14 0.364 - 15 0.0909 - - 49 27 10 0 - 0 0.037 - 3 0.037 - 8 0.0741 - 12 0.037 - 13 0.481 - 14 0.148 - 15 0.0741 - 18 0.037 - 21 0.037 - 31 0.037 - - 51 3 3 0 - 13 0.333 - 15 0.333 - 26 0.333 - - 55 119 16 0 - 0 0.0168 - 2 0.0084 - 3 0.042 - 7 0.0084 - 8 0.0168 - 9 0.0084 - 13 0.345 - 14 0.319 - 15 0.118 - 16 0.0168 - 19 0.0084 - 21 0.0336 - 28 0.0168 - 31 0.0084 - 43 0.0084 - 46 0.0252 - - 57 81 15 0 - 0 0.0123 - 2 0.037 - 3 0.0617 - 4 0.0123 - 7 0.0247 - 8 0.0247 - 10 0.0123 - 13 0.309 - 14 0.321 - 15 0.037 - 21 0.0494 - 28 0.0123 - 31 0.037 - 33 0.0123 - 46 0.037 - - 62 65 12 0 - 2 0.0154 - 7 0.0154 - 8 0.138 - 13 0.385 - 14 0.277 - 15 0.0308 - 19 0.0154 - 21 0.0154 - 28 0.0154 - 31 0.0462 - 33 0.0308 - 46 0.0154 - - 64 38 8 0 - 8 0.0263 - 13 0.368 - 14 0.158 - 15 0.316 - 16 0.0526 - 28 0.0263 - 32 0.0263 - 46 0.0263 - - 69 15 3 0 - 13 0.467 - 14 0.333 - 15 0.2 - - 44 1007 29 18 - 0 0.00794 - 2 0.000993 - 3 0.0566 - 4 0.0119 - 6 0.00397 - 7 0.0129 - 8 0.0298 - 9 0.000993 - 10 0.000993 - 12 0.00199 - 13 0.183 - 14 0.229 - 15 0.291 - 16 0.00695 - 18 0.00199 - 19 0.0139 - 20 0.00298 - 21 0.00894 - 28 0.00894 - 29 0.00199 - 30 0.00397 - 31 0.00497 - 32 0.00199 - 33 0.00199 - 37 0.000993 - 40 0.0467 - 41 0.00993 - 46 0.0437 - 47 0.00894 - - 2 26 9 0 - 0 0.0769 - 6 0.0385 - 13 0.423 - 14 0.192 - 15 0.0769 - 16 0.0385 - 28 0.0385 - 30 0.0769 - 31 0.0385 - - 8 14 7 0 - 4 0.214 - 7 0.214 - 8 0.214 - 9 0.0714 - 13 0.143 - 15 0.0714 - 40 0.0714 - - 9 1 1 0 - 20 1 - - 13 12 7 0 - 3 0.167 - 4 0.333 - 7 0.167 - 10 0.0833 - 13 0.0833 - 15 0.0833 - 31 0.0833 - - 14 2 2 0 - 8 0.5 - 41 0.5 - - 15 27 6 0 - 4 0.111 - 15 0.667 - 16 0.037 - 19 0.0741 - 28 0.037 - 40 0.0741 - - 21 2 2 0 - 0 0.5 - 14 0.5 - - 28 2 1 0 - 28 1 - - 45 24 5 0 - 13 0.375 - 14 0.0417 - 15 0.458 - 18 0.0417 - 46 0.0833 - - 48 24 10 0 - 0 0.0417 - 2 0.0417 - 3 0.25 - 4 0.0417 - 8 0.125 - 13 0.333 - 14 0.0417 - 15 0.0417 - 16 0.0417 - 40 0.0417 - - 49 12 7 0 - 0 0.0833 - 8 0.25 - 12 0.167 - 13 0.25 - 15 0.0833 - 33 0.0833 - 47 0.0833 - - 51 3 3 0 - 8 0.333 - 15 0.333 - 47 0.333 - - 52 5 2 0 - 13 0.8 - 21 0.2 - - 55 676 20 0 - 3 0.0621 - 4 0.00148 - 6 0.00444 - 7 0.00888 - 8 0.00888 - 13 0.129 - 14 0.266 - 15 0.354 - 16 0.00592 - 18 0.00148 - 19 0.0163 - 20 0.00296 - 21 0.00296 - 28 0.00296 - 29 0.00148 - 31 0.00148 - 40 0.0636 - 41 0.00888 - 46 0.0562 - 47 0.00148 - - 57 52 14 0 - 0 0.0192 - 3 0.0192 - 8 0.0962 - 13 0.385 - 14 0.25 - 15 0.0385 - 19 0.0192 - 21 0.0385 - 28 0.0192 - 29 0.0192 - 30 0.0192 - 31 0.0385 - 41 0.0192 - 46 0.0192 - - 62 63 14 0 - 0 0.0317 - 3 0.0476 - 7 0.0159 - 8 0.0794 - 13 0.302 - 14 0.159 - 15 0.111 - 21 0.0635 - 28 0.0159 - 32 0.0317 - 33 0.0159 - 37 0.0159 - 46 0.0159 - 47 0.0952 - - 64 23 7 0 - 3 0.087 - 8 0.0435 - 13 0.565 - 14 0.174 - 28 0.0435 - 41 0.0435 - 46 0.0435 - - 69 25 5 0 - 3 0.04 - 13 0.16 - 14 0.56 - 15 0.2 - 30 0.04 - - 45 30 4 0 - 41 0.0667 - 42 0.1 - 44 0.8 - 46 0.0333 - - 46 105 4 1 - 13 0.00952 - 33 0.00952 - 41 0.962 - 46 0.019 - - 42 1 1 0 - 13 1 - - 47 2420 38 11 - 0 0.00909 - 2 0.0298 - 3 0.0364 - 4 0.0107 - 6 0.00248 - 7 0.0165 - 8 0.0434 - 9 0.00207 - 10 0.00124 - 11 0.000413 - 12 0.00207 - 13 0.26 - 14 0.194 - 15 0.163 - 16 0.0062 - 18 0.00207 - 19 0.012 - 20 0.00124 - 21 0.0496 - 22 0.00165 - 23 0.000413 - 24 0.00165 - 26 0.00124 - 28 0.0116 - 29 0.00537 - 30 0.00455 - 31 0.0174 - 32 0.00579 - 33 0.00744 - 34 0.00331 - 35 0.000826 - 37 0.00372 - 40 0.0194 - 41 0.0306 - 42 0.00248 - 43 0.000826 - 46 0.0351 - 47 0.00496 - - 2 12 3 0 - 15 0.0833 - 41 0.833 - 42 0.0833 - - 41 884 32 0 - 0 0.0113 - 2 0.0679 - 3 0.0192 - 4 0.0124 - 6 0.00226 - 7 0.0249 - 8 0.0577 - 9 0.00339 - 10 0.00113 - 11 0.00113 - 12 0.00226 - 13 0.337 - 14 0.145 - 15 0.0679 - 16 0.00339 - 18 0.00226 - 19 0.0158 - 21 0.11 - 22 0.00452 - 23 0.00113 - 24 0.00452 - 26 0.00226 - 28 0.0124 - 29 0.0102 - 30 0.00566 - 31 0.0305 - 32 0.00905 - 33 0.0147 - 34 0.00792 - 35 0.00226 - 37 0.00905 - 43 0.00113 - - 42 407 25 0 - 0 0.00983 - 2 0.0147 - 3 0.0344 - 4 0.00491 - 7 0.0123 - 8 0.0565 - 9 0.00246 - 10 0.00246 - 12 0.00246 - 13 0.359 - 14 0.263 - 15 0.0958 - 16 0.00983 - 18 0.00246 - 19 0.00246 - 21 0.0344 - 26 0.00246 - 28 0.0172 - 29 0.00491 - 30 0.00491 - 31 0.0246 - 32 0.00983 - 33 0.00737 - 43 0.00246 - 46 0.0197 - - 44 1007 29 0 - 0 0.00794 - 2 0.000993 - 3 0.0566 - 4 0.0119 - 6 0.00397 - 7 0.0129 - 8 0.0298 - 9 0.000993 - 10 0.000993 - 12 0.00199 - 13 0.183 - 14 0.229 - 15 0.291 - 16 0.00695 - 18 0.00199 - 19 0.0139 - 20 0.00298 - 21 0.00894 - 28 0.00894 - 29 0.00199 - 30 0.00397 - 31 0.00497 - 32 0.00199 - 33 0.00199 - 37 0.000993 - 40 0.0467 - 41 0.00993 - 46 0.0437 - 47 0.00894 - - 49 6 3 0 - 41 0.667 - 42 0.167 - 46 0.167 - - 51 1 1 0 - 42 1 - - 55 5 3 0 - 41 0.4 - 46 0.4 - 47 0.2 - - 57 9 5 0 - 2 0.333 - 14 0.111 - 15 0.111 - 41 0.333 - 42 0.111 - - 62 70 9 0 - 4 0.0143 - 8 0.0143 - 14 0.0286 - 16 0.0143 - 34 0.0143 - 41 0.557 - 42 0.0286 - 46 0.3 - 47 0.0286 - - 64 3 2 0 - 2 0.667 - 46 0.333 - - 66 12 2 0 - 41 0.333 - 46 0.667 - - 48 48 7 0 - 0 0.0208 - 13 0.0417 - 21 0.146 - 41 0.0208 - 42 0.229 - 44 0.5 - 45 0.0417 - - 49 102 7 3 - 7 0.0098 - 14 0.0098 - 21 0.0392 - 41 0.539 - 42 0.275 - 44 0.118 - 46 0.0098 - - 41 4 1 0 - 42 1 - - 47 57 5 0 - 14 0.0175 - 21 0.0526 - 41 0.684 - 42 0.14 - 44 0.105 - - 48 6 3 0 - 21 0.167 - 41 0.333 - 44 0.5 - - 51 8 3 0 - 41 0.125 - 42 0.5 - 44 0.375 - - 52 12 3 0 - 41 0.5 - 42 0.0833 - 44 0.417 - - 55 985 13 2 - 3 0.00102 - 7 0.00203 - 8 0.00102 - 9 0.00102 - 13 0.00102 - 19 0.00203 - 21 0.0223 - 41 0.143 - 42 0.121 - 44 0.686 - 45 0.0122 - 46 0.00609 - 47 0.00102 - - 41 101 4 0 - 41 0.109 - 42 0.0297 - 44 0.851 - 46 0.0099 - - 69 25 2 0 - 41 0.96 - 46 0.04 - - 57 225 9 1 - 2 0.0178 - 13 0.00889 - 14 0.00889 - 15 0.00444 - 41 0.356 - 42 0.364 - 44 0.231 - 45 0.00444 - 46 0.00444 - - 41 12 2 0 - 42 0.917 - 44 0.0833 - - 58 4 3 0 - 13 0.5 - 21 0.25 - 46 0.25 - - 62 781 11 2 - 4 0.00128 - 8 0.00128 - 14 0.00256 - 16 0.00128 - 34 0.00128 - 41 0.699 - 42 0.0858 - 44 0.0807 - 45 0.0128 - 46 0.111 - 47 0.00256 - - 41 5 3 0 - 41 0.2 - 42 0.4 - 45 0.4 - - 46 2 1 0 - 45 1 - - 64 117 8 0 - 2 0.0171 - 10 0.00855 - 15 0.00855 - 21 0.00855 - 41 0.427 - 42 0.325 - 44 0.197 - 46 0.00855 - - 66 86 2 0 - 41 0.57 - 46 0.43 - - 67 6 3 0 - 41 0.167 - 44 0.167 - 45 0.667 - - 68 4 3 0 - 21 0.25 - 42 0.5 - 44 0.25 - - 69 68 9 0 - 10 0.0147 - 13 0.0294 - 14 0.0441 - 15 0.176 - 19 0.118 - 21 0.0147 - 41 0.0147 - 42 0.221 - 44 0.368 - -59 5288 19 7 - 0 0.00265 - 2 0.000378 - 3 0.000378 - 4 0.00151 - 7 0.000378 - 8 0.00227 - 9 0.000378 - 13 0.0223 - 14 0.0129 - 15 0.00227 - 19 0.0318 - 21 0.000756 - 24 0.000756 - 28 0.326 - 29 0.179 - 30 0.151 - 31 0.169 - 32 0.0416 - 33 0.0552 - - 2 2 1 0 - 24 1 - - 7 65 11 0 - 8 0.0154 - 13 0.0308 - 14 0.0154 - 15 0.0154 - 19 0.0769 - 28 0.154 - 29 0.277 - 30 0.108 - 31 0.215 - 32 0.0308 - 33 0.0615 - - 8 6 4 0 - 8 0.167 - 14 0.167 - 28 0.5 - 31 0.167 - - 21 84 12 0 - 0 0.0119 - 3 0.0119 - 13 0.0833 - 14 0.0238 - 15 0.0119 - 19 0.0714 - 28 0.238 - 29 0.107 - 30 0.155 - 31 0.226 - 32 0.0238 - 33 0.0357 - - 23 1 1 0 - 0 1 - - 24 2483 18 1 - 0 0.00201 - 2 0.000805 - 4 0.00161 - 7 0.000403 - 8 0.00161 - 9 0.000403 - 13 0.0201 - 14 0.0117 - 15 0.00161 - 19 0.0294 - 21 0.000805 - 24 0.000403 - 28 0.333 - 29 0.178 - 30 0.153 - 31 0.166 - 32 0.0427 - 33 0.056 - - 2 2 1 0 - 13 1 - - 47 2642 18 4 - 0 0.00265 - 3 0.000379 - 4 0.00151 - 7 0.000379 - 8 0.00227 - 9 0.000379 - 13 0.0223 - 14 0.0129 - 15 0.00227 - 19 0.0318 - 21 0.000757 - 24 0.000379 - 28 0.326 - 29 0.179 - 30 0.151 - 31 0.169 - 32 0.0416 - 33 0.0553 - - 7 65 11 0 - 8 0.0154 - 13 0.0308 - 14 0.0154 - 15 0.0154 - 19 0.0769 - 28 0.154 - 29 0.277 - 30 0.108 - 31 0.215 - 32 0.0308 - 33 0.0615 - - 8 6 4 0 - 8 0.167 - 14 0.167 - 28 0.5 - 31 0.167 - - 21 84 12 0 - 0 0.0119 - 3 0.0119 - 13 0.0833 - 14 0.0238 - 15 0.0119 - 19 0.0714 - 28 0.238 - 29 0.107 - 30 0.155 - 31 0.226 - 32 0.0238 - 33 0.0357 - - 23 1 1 0 - 0 1 - -60 27233 41 25 - 0 0.0313 - 1 7.34e-05 - 2 0.0264 - 3 0.111 - 4 0.0584 - 7 0.296 - 8 0.0205 - 9 0.0164 - 10 0.0061 - 13 0.0187 - 14 0.00639 - 15 0.00323 - 16 0.000147 - 17 0.000257 - 18 0.00804 - 19 0.000808 - 20 0.00463 - 21 0.0559 - 22 0.00382 - 23 7.34e-05 - 24 0.0051 - 25 0.00011 - 26 0.11 - 28 0.038 - 29 0.0476 - 30 0.0154 - 31 0.0166 - 32 0.00543 - 33 0.0142 - 34 0.000441 - 36 0.000147 - 37 0.00125 - 38 0.0047 - 39 0.00683 - 41 0.0143 - 42 0.0234 - 43 0.000184 - 44 0.0134 - 45 0.00114 - 46 0.00022 - 47 0.0135 - - 2 230 9 4 - 3 0.626 - 4 0.0304 - 7 0.00435 - 8 0.00435 - 13 0.265 - 14 0.0565 - 31 0.00435 - 41 0.00435 - 43 0.00435 - - 3 94 4 0 - 3 0.543 - 4 0.0426 - 13 0.404 - 31 0.0106 - - 7 4 3 0 - 3 0.25 - 4 0.5 - 7 0.25 - - 9 51 3 0 - 3 0.627 - 13 0.176 - 14 0.196 - - 39 43 5 0 - 3 0.907 - 4 0.0233 - 14 0.0233 - 41 0.0233 - 43 0.0233 - - 3 6618 35 9 - 0 0.011 - 2 0.0193 - 3 0.317 - 4 0.0252 - 7 0.221 - 8 0.0113 - 9 0.000151 - 10 0.0192 - 13 0.0119 - 14 0.00287 - 15 0.00181 - 16 0.000151 - 18 0.00468 - 19 0.000302 - 20 0.00181 - 21 0.0979 - 22 0.000151 - 24 0.00121 - 25 0.000453 - 26 0.116 - 28 0.00861 - 29 0.0323 - 30 0.00378 - 31 0.00423 - 32 0.00212 - 33 0.00242 - 34 0.000453 - 38 0.0192 - 39 0.0264 - 41 0.0068 - 42 0.0258 - 43 0.000151 - 44 0.000453 - 45 0.000907 - 47 0.00181 - - 2 115 19 0 - 0 0.0261 - 2 0.0435 - 3 0.209 - 4 0.0609 - 7 0.243 - 8 0.0435 - 13 0.0174 - 14 0.0087 - 19 0.0087 - 21 0.0261 - 26 0.0087 - 28 0.0261 - 29 0.0174 - 31 0.0261 - 32 0.0087 - 33 0.0087 - 38 0.0087 - 39 0.191 - 45 0.0174 - - 3 2100 30 0 - 0 0.0229 - 2 0.0143 - 4 0.0305 - 7 0.277 - 8 0.0162 - 10 0.00143 - 13 0.00286 - 14 0.00667 - 15 0.00524 - 16 0.000476 - 18 0.0138 - 20 0.00571 - 21 0.0419 - 22 0.000476 - 24 0.00238 - 25 0.00143 - 26 0.224 - 28 0.0181 - 29 0.0929 - 30 0.00857 - 31 0.00905 - 32 0.000952 - 33 0.00476 - 34 0.00143 - 38 0.0576 - 39 0.0376 - 41 0.0171 - 42 0.0786 - 44 0.000476 - 47 0.00571 - - 7 33 11 0 - 0 0.0303 - 2 0.0606 - 3 0.0303 - 7 0.303 - 13 0.0303 - 21 0.303 - 31 0.0303 - 32 0.0606 - 33 0.0303 - 41 0.0909 - 42 0.0303 - - 8 4 2 0 - 3 0.5 - 4 0.5 - - 9 13 8 0 - 0 0.154 - 2 0.0769 - 10 0.0769 - 28 0.0769 - 29 0.231 - 30 0.0769 - 32 0.0769 - 41 0.231 - - 13 293 22 0 - 0 0.0205 - 2 0.0751 - 3 0.294 - 4 0.0546 - 7 0.171 - 8 0.0102 - 10 0.00341 - 13 0.0102 - 14 0.00683 - 15 0.00341 - 18 0.00341 - 21 0.041 - 26 0.232 - 28 0.0137 - 29 0.00683 - 30 0.00683 - 31 0.0102 - 32 0.0137 - 33 0.00683 - 39 0.00683 - 42 0.00341 - 45 0.00683 - - 14 71 14 0 - 0 0.0986 - 2 0.127 - 3 0.0423 - 4 0.0141 - 7 0.254 - 14 0.0141 - 21 0.127 - 26 0.169 - 28 0.0563 - 29 0.0141 - 41 0.0282 - 42 0.0282 - 44 0.0141 - 45 0.0141 - - 26 310 22 0 - 0 0.0194 - 3 0.171 - 4 0.0258 - 7 0.155 - 8 0.0194 - 9 0.00323 - 10 0.00323 - 13 0.216 - 19 0.00323 - 21 0.0419 - 24 0.00645 - 28 0.0226 - 29 0.0323 - 30 0.0129 - 31 0.00323 - 32 0.0129 - 33 0.00645 - 39 0.232 - 42 0.00323 - 43 0.00323 - 44 0.00323 - 45 0.00323 - - 47 3678 16 0 - 2 0.016 - 3 0.525 - 4 0.0188 - 7 0.198 - 8 0.00734 - 10 0.0329 - 14 0.000272 - 18 0.000272 - 21 0.139 - 24 0.000272 - 26 0.0593 - 29 0.000272 - 31 0.000272 - 38 0.00136 - 41 0.000272 - 42 0.000272 - - 4 242 23 7 - 0 0.0124 - 2 0.0248 - 3 0.00413 - 4 0.00413 - 7 0.343 - 10 0.0289 - 13 0.0207 - 14 0.00413 - 17 0.0289 - 21 0.165 - 24 0.0165 - 26 0.0331 - 28 0.0702 - 29 0.0702 - 30 0.0165 - 31 0.0248 - 32 0.00413 - 33 0.0289 - 41 0.00826 - 42 0.00826 - 44 0.00413 - 46 0.00413 - 47 0.0744 - - 2 7 5 0 - 7 0.286 - 29 0.286 - 31 0.143 - 32 0.143 - 47 0.143 - - 3 79 19 0 - 0 0.0253 - 2 0.038 - 3 0.0127 - 7 0.278 - 10 0.0253 - 13 0.0506 - 17 0.0127 - 21 0.0127 - 24 0.0127 - 26 0.0253 - 28 0.0633 - 29 0.127 - 30 0.0253 - 33 0.038 - 41 0.0253 - 42 0.0253 - 44 0.0127 - 46 0.0127 - 47 0.177 - - 8 39 9 0 - 7 0.154 - 10 0.0769 - 13 0.0256 - 14 0.0256 - 21 0.513 - 26 0.0769 - 28 0.0769 - 29 0.0256 - 30 0.0256 - - 9 7 3 0 - 7 0.429 - 26 0.429 - 28 0.143 - - 13 35 12 0 - 0 0.0286 - 2 0.0571 - 4 0.0286 - 7 0.429 - 17 0.114 - 21 0.143 - 24 0.0286 - 28 0.0286 - 29 0.0286 - 31 0.0286 - 33 0.0571 - 47 0.0286 - - 39 24 9 0 - 7 0.208 - 17 0.0417 - 21 0.0833 - 28 0.25 - 29 0.0833 - 30 0.0417 - 31 0.167 - 33 0.0833 - 47 0.0417 - - 47 41 6 0 - 7 0.634 - 10 0.0488 - 17 0.0244 - 21 0.244 - 24 0.0244 - 47 0.0244 - - 7 1759 31 14 - 0 0.0352 - 1 0.000569 - 2 0.0222 - 3 0.0188 - 4 0.00227 - 7 0.204 - 8 0.0824 - 9 0.252 - 10 0.00114 - 13 0.00569 - 14 0.0131 - 15 0.00114 - 16 0.000569 - 19 0.00114 - 21 0.0495 - 22 0.0563 - 24 0.00682 - 26 0.0324 - 28 0.0591 - 29 0.0233 - 30 0.021 - 31 0.0171 - 32 0.00625 - 33 0.0347 - 37 0.00625 - 41 0.0148 - 42 0.00455 - 44 0.00284 - 45 0.00227 - 46 0.00114 - 47 0.0222 - - 3 910 26 0 - 0 0.0297 - 2 0.0176 - 3 0.0275 - 4 0.0022 - 7 0.137 - 8 0.112 - 9 0.289 - 13 0.0011 - 14 0.0044 - 15 0.0011 - 16 0.0011 - 21 0.0593 - 22 0.0725 - 24 0.0022 - 26 0.0396 - 28 0.0418 - 29 0.0286 - 30 0.0231 - 31 0.0154 - 32 0.0044 - 33 0.0396 - 37 0.0011 - 41 0.0187 - 42 0.00549 - 45 0.0011 - 47 0.0242 - - 4 45 17 0 - 0 0.0222 - 3 0.0444 - 4 0.0222 - 7 0.0889 - 8 0.0222 - 9 0.333 - 10 0.0222 - 13 0.0222 - 14 0.0444 - 21 0.0444 - 22 0.156 - 24 0.0222 - 29 0.0222 - 31 0.0444 - 33 0.0222 - 41 0.0222 - 42 0.0444 - - 7 5 2 0 - 3 0.8 - 9 0.2 - - 8 11 4 0 - 8 0.0909 - 14 0.364 - 21 0.273 - 22 0.273 - - 10 161 20 0 - 0 0.0435 - 1 0.00621 - 2 0.0497 - 7 0.404 - 8 0.00621 - 13 0.00621 - 14 0.00621 - 21 0.00621 - 24 0.0248 - 26 0.0248 - 28 0.137 - 29 0.0248 - 30 0.0435 - 31 0.0248 - 32 0.00621 - 33 0.0186 - 37 0.0621 - 41 0.0248 - 45 0.00621 - 47 0.0745 - - 13 26 13 0 - 0 0.115 - 4 0.0385 - 9 0.346 - 13 0.0385 - 21 0.0769 - 22 0.0769 - 26 0.0385 - 30 0.0385 - 31 0.0385 - 33 0.0769 - 42 0.0385 - 45 0.0385 - 47 0.0385 - - 14 16 5 0 - 2 0.125 - 7 0.0625 - 9 0.375 - 14 0.375 - 46 0.0625 - - 17 27 10 0 - 0 0.0741 - 7 0.111 - 9 0.481 - 21 0.0741 - 22 0.0741 - 26 0.037 - 28 0.037 - 30 0.037 - 32 0.037 - 45 0.037 - - 21 16 8 0 - 0 0.125 - 3 0.0625 - 8 0.0625 - 9 0.438 - 13 0.0625 - 21 0.0625 - 22 0.0625 - 41 0.125 - - 26 53 12 0 - 7 0.472 - 13 0.0377 - 14 0.0566 - 19 0.0189 - 21 0.0189 - 24 0.0189 - 28 0.226 - 31 0.0189 - 32 0.0377 - 33 0.0377 - 41 0.0377 - 47 0.0189 - - 28 2 1 0 - 22 1 - - 38 10 8 0 - 2 0.2 - 8 0.1 - 9 0.1 - 21 0.1 - 26 0.1 - 28 0.2 - 29 0.1 - 33 0.1 - - 39 470 23 0 - 0 0.0404 - 2 0.0213 - 7 0.287 - 8 0.0809 - 9 0.27 - 10 0.00213 - 13 0.00638 - 14 0.00638 - 15 0.00213 - 19 0.00213 - 21 0.0404 - 22 0.034 - 24 0.00851 - 26 0.0298 - 28 0.0596 - 29 0.0191 - 30 0.0149 - 31 0.0149 - 32 0.00638 - 33 0.034 - 44 0.0106 - 46 0.00213 - 47 0.00638 - - 47 3 3 0 - 2 0.333 - 9 0.333 - 21 0.333 - - 8 256 17 9 - 0 0.0117 - 2 0.00391 - 3 0.0156 - 4 0.195 - 7 0.117 - 10 0.00781 - 15 0.00391 - 21 0.594 - 22 0.00391 - 26 0.00781 - 28 0.00391 - 29 0.00391 - 30 0.00781 - 31 0.00781 - 33 0.00781 - 39 0.00391 - 41 0.00391 - - 3 37 9 0 - 0 0.0541 - 4 0.459 - 7 0.297 - 26 0.027 - 28 0.027 - 29 0.027 - 30 0.027 - 31 0.0541 - 33 0.027 - - 7 140 4 0 - 0 0.00714 - 4 0.00714 - 7 0.00714 - 21 0.979 - - 13 4 3 0 - 4 0.5 - 7 0.25 - 41 0.25 - - 14 3 3 0 - 2 0.333 - 7 0.333 - 33 0.333 - - 21 1 1 0 - 30 1 - - 26 4 3 0 - 4 0.25 - 7 0.5 - 15 0.25 - - 39 8 3 0 - 4 0.625 - 7 0.25 - 21 0.125 - - 41 1 1 0 - 39 1 - - 47 56 7 0 - 3 0.0714 - 4 0.411 - 7 0.196 - 10 0.0357 - 21 0.25 - 22 0.0179 - 26 0.0179 - - 9 511 25 2 - 0 0.0509 - 2 0.133 - 3 0.0254 - 4 0.0274 - 7 0.29 - 8 0.00196 - 13 0.0157 - 14 0.00783 - 15 0.00391 - 19 0.00196 - 20 0.00196 - 21 0.047 - 24 0.00391 - 26 0.0391 - 28 0.0685 - 29 0.0705 - 30 0.0352 - 31 0.0391 - 32 0.00587 - 33 0.0235 - 37 0.00391 - 41 0.0509 - 42 0.0157 - 45 0.00196 - 47 0.0352 - - 7 443 23 0 - 0 0.0587 - 2 0.0384 - 4 0.0316 - 7 0.334 - 13 0.0158 - 14 0.00677 - 15 0.00451 - 19 0.00226 - 20 0.00226 - 21 0.0519 - 24 0.00451 - 26 0.0451 - 28 0.079 - 29 0.0813 - 30 0.0406 - 31 0.0451 - 32 0.00677 - 33 0.0271 - 37 0.00451 - 41 0.0587 - 42 0.0181 - 45 0.00226 - 47 0.0406 - - 47 67 5 0 - 2 0.761 - 3 0.194 - 8 0.0149 - 14 0.0149 - 21 0.0149 - - 10 163 2 0 - 2 0.00613 - 7 0.994 - - 13 383 11 5 - 3 0.765 - 4 0.094 - 7 0.0731 - 8 0.0104 - 10 0.00522 - 20 0.00261 - 21 0.0339 - 24 0.00261 - 26 0.00783 - 33 0.00261 - 42 0.00261 - - 2 23 1 0 - 3 1 - - 7 3 2 0 - 4 0.667 - 7 0.333 - - 26 108 3 0 - 3 0.972 - 7 0.0185 - 21 0.00926 - - 39 1 1 0 - 20 1 - - 47 248 10 0 - 3 0.665 - 4 0.137 - 7 0.101 - 8 0.0161 - 10 0.00806 - 21 0.0484 - 24 0.00403 - 26 0.0121 - 33 0.00403 - 42 0.00403 - - 14 104 11 4 - 2 0.00962 - 3 0.683 - 4 0.00962 - 7 0.173 - 8 0.0288 - 15 0.00962 - 21 0.0385 - 26 0.00962 - 28 0.0192 - 41 0.00962 - 45 0.00962 - - 3 1 1 0 - 4 1 - - 7 10 6 0 - 2 0.1 - 3 0.4 - 7 0.1 - 28 0.2 - 41 0.1 - 45 0.1 - - 47 82 4 0 - 3 0.707 - 7 0.207 - 8 0.0366 - 21 0.0488 - - 58 1 1 0 - 15 1 - - 15 2 2 0 - 3 0.5 - 15 0.5 - - 17 43 7 0 - 4 0.0233 - 7 0.628 - 10 0.0698 - 14 0.0233 - 21 0.209 - 28 0.0233 - 31 0.0233 - - 21 1368 30 13 - 0 0.0775 - 2 0.0702 - 3 0.00146 - 4 0.0139 - 7 0.284 - 8 0.00439 - 13 0.0168 - 14 0.0102 - 15 0.00512 - 18 0.00146 - 19 0.00292 - 20 0.00146 - 21 0.0694 - 23 0.000731 - 24 0.0146 - 26 0.0373 - 28 0.0877 - 29 0.0687 - 30 0.0234 - 31 0.0307 - 32 0.0183 - 33 0.0424 - 36 0.000731 - 37 0.00219 - 41 0.0387 - 42 0.0175 - 43 0.000731 - 44 0.00512 - 45 0.00219 - 47 0.0497 - - 3 628 30 0 - 0 0.0955 - 2 0.0446 - 3 0.00318 - 4 0.00796 - 7 0.247 - 8 0.00159 - 13 0.0175 - 14 0.00478 - 15 0.00955 - 18 0.00159 - 19 0.00318 - 20 0.00318 - 21 0.0525 - 23 0.00159 - 24 0.00637 - 26 0.0318 - 28 0.0732 - 29 0.0971 - 30 0.0271 - 31 0.035 - 32 0.0223 - 33 0.0589 - 36 0.00159 - 37 0.00318 - 41 0.0478 - 42 0.0159 - 43 0.00159 - 44 0.00796 - 45 0.00318 - 47 0.0732 - - 4 38 10 0 - 2 0.0526 - 7 0.263 - 14 0.0263 - 21 0.0789 - 28 0.0263 - 29 0.0789 - 31 0.0526 - 33 0.105 - 41 0.132 - 47 0.184 - - 7 71 14 0 - 0 0.0845 - 2 0.0423 - 7 0.183 - 8 0.0423 - 21 0.394 - 24 0.0423 - 26 0.0141 - 28 0.0282 - 29 0.0282 - 32 0.0141 - 33 0.0563 - 41 0.0141 - 42 0.0282 - 47 0.0282 - - 8 152 20 0 - 0 0.0461 - 2 0.0592 - 4 0.00658 - 7 0.375 - 8 0.00658 - 13 0.0132 - 14 0.0263 - 21 0.0461 - 24 0.0329 - 26 0.0526 - 28 0.164 - 29 0.0526 - 30 0.0197 - 31 0.0197 - 32 0.0132 - 33 0.0132 - 37 0.00658 - 41 0.0132 - 42 0.0132 - 47 0.0197 - - 9 15 9 0 - 0 0.0667 - 4 0.133 - 7 0.267 - 21 0.0667 - 26 0.0667 - 28 0.0667 - 32 0.133 - 41 0.133 - 45 0.0667 - - 13 12 8 0 - 2 0.25 - 21 0.0833 - 24 0.0833 - 28 0.0833 - 29 0.0833 - 32 0.0833 - 41 0.0833 - 47 0.25 - - 14 4 3 0 - 7 0.5 - 24 0.25 - 29 0.25 - - 17 9 6 0 - 2 0.111 - 7 0.222 - 24 0.111 - 29 0.222 - 33 0.111 - 47 0.222 - - 21 59 17 0 - 0 0.0508 - 2 0.0169 - 7 0.102 - 13 0.0508 - 14 0.0847 - 19 0.0339 - 21 0.0169 - 24 0.0169 - 26 0.0169 - 28 0.288 - 29 0.0508 - 31 0.0678 - 32 0.0339 - 33 0.0508 - 41 0.0847 - 42 0.0169 - 47 0.0169 - - 26 21 10 0 - 0 0.19 - 2 0.0952 - 7 0.19 - 14 0.0476 - 15 0.0476 - 28 0.19 - 30 0.0952 - 33 0.0476 - 41 0.0476 - 42 0.0476 - - 38 11 8 0 - 7 0.182 - 21 0.0909 - 24 0.0909 - 26 0.182 - 28 0.182 - 29 0.0909 - 31 0.0909 - 42 0.0909 - - 39 296 20 0 - 0 0.0811 - 2 0.0676 - 4 0.0372 - 7 0.409 - 8 0.00338 - 13 0.0236 - 18 0.00338 - 21 0.0304 - 24 0.0101 - 26 0.0608 - 28 0.0709 - 29 0.0405 - 30 0.0338 - 31 0.0338 - 32 0.0101 - 33 0.0203 - 41 0.0203 - 42 0.0236 - 44 0.00676 - 47 0.0135 - - 47 51 3 0 - 2 0.529 - 7 0.255 - 21 0.216 - - 22 108 17 2 - 0 0.0556 - 2 0.0648 - 4 0.037 - 7 0.333 - 8 0.0185 - 13 0.00926 - 14 0.00926 - 21 0.0278 - 24 0.0185 - 26 0.00926 - 28 0.0185 - 29 0.0926 - 30 0.13 - 31 0.0556 - 33 0.037 - 41 0.0463 - 47 0.037 - - 26 2 2 0 - 0 0.5 - 28 0.5 - - 47 6 3 0 - 2 0.667 - 13 0.167 - 14 0.167 - - 24 3 3 0 - 21 0.333 - 28 0.333 - 41 0.333 - - 25 3 2 0 - 7 0.667 - 30 0.333 - - 26 510 10 4 - 3 0.608 - 7 0.104 - 8 0.00784 - 13 0.212 - 14 0.0118 - 21 0.0412 - 22 0.00392 - 24 0.00196 - 28 0.00784 - 32 0.00196 - - 3 345 9 0 - 3 0.539 - 7 0.0957 - 13 0.304 - 14 0.0145 - 21 0.0261 - 22 0.0029 - 24 0.0029 - 28 0.0116 - 32 0.0029 - - 8 1 1 0 - 8 1 - - 39 157 7 0 - 3 0.783 - 7 0.115 - 8 0.0127 - 13 0.00637 - 14 0.00637 - 21 0.0701 - 22 0.00637 - - 47 1 1 0 - 8 1 - - 31 6 2 0 - 4 0.833 - 20 0.167 - - 38 128 14 0 - 2 0.0312 - 4 0.102 - 7 0.43 - 8 0.0312 - 13 0.0156 - 18 0.0391 - 21 0.0859 - 24 0.00781 - 26 0.195 - 28 0.0156 - 29 0.0156 - 31 0.00781 - 42 0.0156 - 47 0.00781 - - 39 5335 31 2 - 0 0.0274 - 2 0.0231 - 3 0.00075 - 4 0.108 - 7 0.384 - 8 0.0249 - 10 0.00394 - 13 0.00506 - 14 0.00281 - 15 0.00356 - 18 0.0135 - 19 0.000375 - 20 0.00862 - 21 0.0583 - 24 0.00375 - 26 0.153 - 28 0.0319 - 29 0.0437 - 30 0.0144 - 31 0.0172 - 32 0.00356 - 33 0.00619 - 34 0.000562 - 36 0.000187 - 37 0.000187 - 41 0.00656 - 42 0.0191 - 44 0.0313 - 45 0.000187 - 46 0.000187 - 47 0.0045 - - 3 165 16 0 - 0 0.0182 - 2 0.0242 - 4 0.103 - 7 0.582 - 8 0.0242 - 15 0.00606 - 18 0.0121 - 20 0.00606 - 21 0.0727 - 26 0.0121 - 28 0.0485 - 29 0.0182 - 31 0.0364 - 33 0.00606 - 42 0.0121 - 44 0.0182 - - 8 1 1 0 - 20 1 - - 41 2 2 0 - 8 0.5 - 38 0.5 - - 45 3 3 0 - 0 0.333 - 21 0.333 - 28 0.333 - - 46 2 2 0 - 9 0.5 - 10 0.5 - - 47 9444 38 17 - 0 0.0451 - 1 0.000106 - 2 0.026 - 3 0.00381 - 4 0.0736 - 7 0.334 - 8 0.019 - 9 0.000106 - 10 0.000106 - 13 0.0197 - 14 0.00805 - 15 0.00455 - 16 0.000212 - 18 0.0115 - 19 0.00116 - 20 0.00667 - 21 0.0109 - 22 0.000106 - 23 0.000106 - 24 0.0072 - 26 0.132 - 28 0.0547 - 29 0.0686 - 30 0.0222 - 31 0.0236 - 32 0.00784 - 33 0.0205 - 34 0.000635 - 36 0.000212 - 37 0.0018 - 39 0.00106 - 41 0.0205 - 42 0.0338 - 43 0.000212 - 44 0.0194 - 45 0.00148 - 46 0.000212 - 47 0.0195 - - 2 79 4 0 - 3 0.367 - 13 0.468 - 14 0.152 - 31 0.0127 - - 3 1998 31 0 - 0 0.0365 - 2 0.017 - 4 0.044 - 7 0.278 - 8 0.019 - 9 0.000501 - 13 0.0395 - 14 0.00901 - 15 0.00601 - 16 0.000501 - 18 0.015 - 19 0.001 - 20 0.00601 - 21 0.01 - 22 0.000501 - 24 0.0035 - 26 0.212 - 28 0.0285 - 29 0.107 - 30 0.0125 - 31 0.0135 - 32 0.00701 - 33 0.00801 - 34 0.0015 - 39 0.00501 - 41 0.022 - 42 0.0856 - 43 0.000501 - 44 0.0015 - 45 0.003 - 47 0.00601 - - 4 139 20 0 - 0 0.0216 - 2 0.0288 - 3 0.00719 - 7 0.273 - 13 0.036 - 14 0.00719 - 21 0.0144 - 24 0.0216 - 26 0.0432 - 28 0.122 - 29 0.122 - 30 0.0288 - 31 0.0432 - 32 0.00719 - 33 0.0504 - 41 0.0144 - 42 0.0144 - 44 0.00719 - 46 0.00719 - 47 0.129 - - 7 944 27 0 - 0 0.0657 - 1 0.00106 - 2 0.0371 - 4 0.00212 - 7 0.374 - 8 0.0053 - 13 0.00636 - 14 0.0138 - 15 0.00212 - 16 0.00106 - 19 0.00212 - 21 0.0169 - 24 0.0127 - 26 0.0604 - 28 0.11 - 29 0.0434 - 30 0.0392 - 31 0.0318 - 32 0.0117 - 33 0.0646 - 37 0.0117 - 41 0.0275 - 42 0.00847 - 44 0.0053 - 45 0.00318 - 46 0.00106 - 47 0.0413 - - 8 45 12 0 - 0 0.0667 - 2 0.0222 - 4 0.244 - 7 0.422 - 15 0.0222 - 26 0.0222 - 28 0.0222 - 29 0.0222 - 30 0.0444 - 31 0.0444 - 33 0.0444 - 41 0.0222 - - 9 422 23 0 - 0 0.0616 - 2 0.0403 - 4 0.0166 - 7 0.351 - 13 0.0166 - 14 0.00711 - 15 0.00474 - 19 0.00237 - 20 0.00237 - 21 0.0213 - 24 0.00474 - 26 0.0474 - 28 0.0829 - 29 0.0853 - 30 0.0427 - 31 0.0474 - 32 0.00711 - 33 0.0284 - 37 0.00474 - 41 0.0616 - 42 0.019 - 45 0.00237 - 47 0.0427 - - 13 8 7 0 - 4 0.125 - 7 0.25 - 20 0.125 - 21 0.125 - 24 0.125 - 33 0.125 - 42 0.125 - - 14 8 6 0 - 2 0.125 - 4 0.125 - 7 0.25 - 26 0.125 - 28 0.25 - 41 0.125 - - 17 3 3 0 - 14 0.333 - 28 0.333 - 31 0.333 - - 21 1259 30 0 - 0 0.0842 - 2 0.054 - 3 0.00159 - 4 0.0127 - 7 0.296 - 8 0.00397 - 13 0.0183 - 14 0.0103 - 15 0.00556 - 18 0.00159 - 19 0.00318 - 20 0.00159 - 21 0.0286 - 23 0.000794 - 24 0.0159 - 26 0.0397 - 28 0.0953 - 29 0.0747 - 30 0.0254 - 31 0.0334 - 32 0.0199 - 33 0.0461 - 36 0.000794 - 37 0.00238 - 41 0.0421 - 42 0.0191 - 43 0.000794 - 44 0.00556 - 45 0.00238 - 47 0.054 - - 22 100 16 0 - 0 0.06 - 2 0.03 - 4 0.01 - 7 0.36 - 8 0.02 - 13 0.01 - 21 0.03 - 24 0.02 - 26 0.01 - 28 0.02 - 29 0.1 - 30 0.14 - 31 0.06 - 33 0.04 - 41 0.05 - 47 0.04 - - 24 2 2 0 - 28 0.5 - 41 0.5 - - 26 5 2 0 - 28 0.8 - 32 0.2 - - 31 6 2 0 - 4 0.833 - 20 0.167 - - 38 105 13 0 - 2 0.019 - 4 0.124 - 7 0.429 - 8 0.0381 - 13 0.019 - 18 0.0476 - 24 0.00952 - 26 0.238 - 28 0.019 - 29 0.019 - 31 0.00952 - 42 0.019 - 47 0.00952 - - 39 4310 30 0 - 0 0.0339 - 2 0.0186 - 3 0.000928 - 4 0.128 - 7 0.366 - 8 0.029 - 10 0.000232 - 13 0.00603 - 14 0.00348 - 15 0.00441 - 18 0.0167 - 19 0.000464 - 20 0.0107 - 21 0.00348 - 24 0.00464 - 26 0.152 - 28 0.0394 - 29 0.0541 - 30 0.0179 - 31 0.0202 - 32 0.00441 - 33 0.00766 - 34 0.000696 - 36 0.000232 - 37 0.000232 - 41 0.00812 - 42 0.0237 - 44 0.0387 - 45 0.000232 - 47 0.00557 - - 45 3 3 0 - 0 0.333 - 21 0.333 - 28 0.333 - - 55 4 3 0 - 7 0.5 - 42 0.25 - 45 0.25 - - 58 1 1 0 - 14 1 - -61 127 13 5 - 2 0.0315 - 3 0.00787 - 4 0.0315 - 8 0.0157 - 13 0.189 - 14 0.0709 - 15 0.00787 - 21 0.15 - 24 0.00787 - 28 0.0157 - 41 0.441 - 42 0.0157 - 46 0.0157 - - 47 47 8 0 - 2 0.0426 - 4 0.0426 - 13 0.191 - 14 0.0851 - 28 0.0213 - 41 0.574 - 42 0.0213 - 46 0.0213 - - 49 32 6 0 - 2 0.0625 - 4 0.0625 - 13 0.0938 - 14 0.0625 - 24 0.0312 - 41 0.688 - - 55 24 7 0 - 8 0.0833 - 13 0.0833 - 14 0.0417 - 15 0.0417 - 21 0.667 - 41 0.0417 - 46 0.0417 - - 57 11 4 0 - 13 0.455 - 14 0.0909 - 28 0.0909 - 41 0.364 - - 64 1 1 0 - 3 1 - -62 295300 46 32 - 0 0.00594 - 1 0.000213 - 2 0.0265 - 3 0.00539 - 4 0.00642 - 5 0.0029 - 6 5.08e-05 - 7 0.092 - 8 0.0115 - 9 0.000735 - 10 0.000362 - 11 4.06e-05 - 12 0.000328 - 13 0.0983 - 14 0.0637 - 15 0.0501 - 16 0.00223 - 17 1.35e-05 - 18 0.000511 - 19 0.0512 - 20 4.74e-05 - 21 0.0258 - 22 0.00043 - 23 4.74e-05 - 24 0.000969 - 25 2.37e-05 - 26 0.00111 - 27 0.000102 - 28 0.0131 - 29 0.035 - 30 0.00893 - 31 0.0163 - 32 0.0106 - 33 0.0136 - 34 0.0284 - 35 0.0149 - 36 6.77e-06 - 37 0.0127 - 40 0.000139 - 41 0.079 - 42 0.0087 - 43 0.000972 - 44 0.00109 - 45 0.0288 - 46 0.00572 - 47 0.275 - - 0 8 5 0 - 2 0.125 - 13 0.375 - 14 0.25 - 15 0.125 - 37 0.125 - - 2 2293 7 5 - 9 0.000436 - 13 0.000436 - 41 0.00741 - 42 0.00174 - 45 0.044 - 46 0.000436 - 47 0.945 - - 55 1575 4 0 - 41 0.0019 - 45 0.047 - 46 0.000635 - 47 0.95 - - 57 241 3 0 - 42 0.0083 - 45 0.0124 - 47 0.979 - - 62 101 4 0 - 41 0.109 - 42 0.0099 - 45 0.0594 - 47 0.822 - - 66 1 1 0 - 41 1 - - 69 19 5 0 - 9 0.0526 - 13 0.0526 - 41 0.0526 - 45 0.105 - 47 0.737 - - 4 32 9 0 - 4 0.0312 - 8 0.0312 - 14 0.156 - 15 0.312 - 19 0.25 - 34 0.0625 - 35 0.0312 - 41 0.0938 - 42 0.0312 - - 7 39 2 0 - 45 0.0256 - 47 0.974 - - 12 4 3 0 - 14 0.25 - 19 0.5 - 37 0.25 - - 21 199 25 5 - 0 0.0101 - 2 0.0201 - 7 0.101 - 8 0.0201 - 12 0.0201 - 13 0.0704 - 14 0.0452 - 15 0.0201 - 19 0.0452 - 21 0.0151 - 23 0.00503 - 24 0.00503 - 25 0.00503 - 28 0.00503 - 29 0.106 - 31 0.0302 - 32 0.00503 - 33 0.00503 - 35 0.00503 - 37 0.00503 - 41 0.0704 - 42 0.0151 - 45 0.0251 - 46 0.0101 - 47 0.337 - - 41 7 2 0 - 45 0.143 - 47 0.857 - - 55 44 5 0 - 2 0.0682 - 37 0.0227 - 41 0.114 - 45 0.0455 - 47 0.75 - - 57 7 1 0 - 47 1 - - 64 5 1 0 - 47 1 - - 69 122 24 0 - 0 0.0164 - 2 0.0082 - 7 0.148 - 8 0.0328 - 12 0.0328 - 13 0.107 - 14 0.0738 - 15 0.0328 - 19 0.0738 - 21 0.0164 - 23 0.0082 - 24 0.0082 - 25 0.0082 - 28 0.0082 - 29 0.172 - 31 0.0492 - 32 0.0082 - 33 0.0082 - 35 0.0082 - 41 0.0656 - 42 0.0246 - 45 0.0164 - 46 0.0164 - 47 0.0574 - - 26 5 3 0 - 8 0.6 - 13 0.2 - 19 0.2 - - 40 10 6 0 - 8 0.1 - 13 0.4 - 14 0.2 - 19 0.1 - 21 0.1 - 27 0.1 - - 41 12917 37 14 - 0 0.00356 - 2 0.00434 - 3 0.0433 - 4 0.0079 - 5 0.000155 - 6 7.74e-05 - 7 0.00596 - 8 0.0321 - 9 0.00341 - 10 0.00147 - 11 0.000387 - 12 0.000774 - 13 0.376 - 14 0.157 - 15 0.124 - 16 0.00426 - 18 0.000387 - 19 0.0109 - 20 7.74e-05 - 21 0.16 - 22 0.00395 - 23 0.000232 - 24 0.00348 - 26 0.000155 - 27 0.00194 - 28 0.00898 - 29 0.00681 - 30 0.00457 - 31 0.0181 - 32 0.00341 - 33 0.00735 - 34 0.000542 - 35 0.000232 - 37 0.000387 - 42 0.000155 - 43 0.00333 - 46 0.000232 - - 2 15 7 0 - 8 0.133 - 13 0.267 - 14 0.133 - 15 0.267 - 18 0.0667 - 19 0.0667 - 27 0.0667 - - 21 6 3 0 - 13 0.667 - 19 0.167 - 28 0.167 - - 45 125 16 0 - 0 0.008 - 2 0.016 - 3 0.016 - 4 0.008 - 8 0.024 - 13 0.256 - 14 0.216 - 15 0.12 - 16 0.008 - 19 0.04 - 21 0.112 - 28 0.008 - 29 0.024 - 30 0.016 - 31 0.032 - 33 0.096 - - 46 950 26 0 - 0 0.0158 - 2 0.00105 - 3 0.0158 - 4 0.0179 - 7 0.00947 - 8 0.0884 - 9 0.00737 - 10 0.00105 - 12 0.00632 - 13 0.379 - 14 0.154 - 15 0.0674 - 16 0.00526 - 19 0.0442 - 21 0.0695 - 22 0.00105 - 24 0.0126 - 26 0.00105 - 28 0.0316 - 29 0.0147 - 30 0.00947 - 31 0.0337 - 32 0.00421 - 33 0.00632 - 42 0.00211 - 43 0.00105 - - 48 3 3 0 - 0 0.333 - 13 0.333 - 14 0.333 - - 49 375 22 0 - 2 0.016 - 3 0.032 - 4 0.008 - 7 0.0107 - 8 0.008 - 9 0.00267 - 10 0.00267 - 13 0.339 - 14 0.216 - 15 0.171 - 16 0.00533 - 18 0.00533 - 19 0.0347 - 21 0.112 - 24 0.008 - 27 0.00267 - 30 0.00267 - 31 0.00533 - 32 0.00533 - 33 0.00533 - 34 0.00267 - 43 0.00533 - - 55 9312 33 0 - 0 0.00268 - 2 0.00129 - 3 0.0493 - 4 0.00709 - 5 0.000215 - 7 0.00473 - 8 0.0306 - 9 0.00365 - 10 0.00183 - 11 0.000537 - 12 0.00043 - 13 0.39 - 14 0.156 - 15 0.113 - 16 0.00397 - 18 0.000107 - 19 0.00655 - 20 0.000107 - 21 0.165 - 22 0.00515 - 23 0.000322 - 24 0.00279 - 26 0.000107 - 27 0.00215 - 28 0.00805 - 29 0.00677 - 30 0.00451 - 31 0.0183 - 32 0.00333 - 33 0.00698 - 37 0.00043 - 43 0.00365 - 46 0.000322 - - 57 600 21 0 - 2 0.0383 - 3 0.035 - 4 0.01 - 7 0.0183 - 8 0.00167 - 13 0.258 - 14 0.132 - 15 0.275 - 16 0.00667 - 19 0.0117 - 21 0.182 - 22 0.00167 - 27 0.00167 - 29 0.00167 - 30 0.00167 - 31 0.00333 - 32 0.00333 - 34 0.00833 - 35 0.005 - 37 0.00167 - 43 0.00333 - - 58 38 9 0 - 2 0.0263 - 8 0.0263 - 9 0.0263 - 13 0.474 - 14 0.132 - 15 0.105 - 21 0.158 - 32 0.0263 - 33 0.0263 - - 62 430 21 0 - 0 0.00465 - 2 0.00233 - 3 0.0256 - 4 0.00233 - 7 0.0093 - 8 0.0209 - 9 0.00233 - 13 0.302 - 14 0.184 - 15 0.258 - 16 0.00233 - 19 0.0093 - 21 0.135 - 24 0.00698 - 28 0.00698 - 29 0.00698 - 30 0.00233 - 31 0.00465 - 32 0.00233 - 33 0.00698 - 43 0.00465 - - 64 201 16 0 - 0 0.00498 - 2 0.0448 - 3 0.0846 - 4 0.00498 - 7 0.0199 - 8 0.0149 - 13 0.269 - 14 0.114 - 15 0.124 - 16 0.0149 - 21 0.269 - 22 0.00498 - 28 0.00995 - 31 0.00995 - 33 0.00498 - 34 0.00498 - - 66 1 1 0 - 2 1 - - 69 839 21 0 - 0 0.00119 - 3 0.0262 - 4 0.00834 - 7 0.00119 - 8 0.0274 - 13 0.398 - 14 0.16 - 15 0.113 - 16 0.00238 - 18 0.00119 - 19 0.00715 - 21 0.205 - 24 0.00119 - 27 0.00238 - 28 0.00477 - 29 0.00358 - 30 0.00358 - 31 0.0238 - 32 0.00238 - 33 0.00477 - 43 0.00238 - - 74 11 7 0 - 6 0.0909 - 13 0.364 - 14 0.182 - 19 0.0909 - 29 0.0909 - 32 0.0909 - 33 0.0909 - - 42 133 20 7 - 3 0.00752 - 4 0.015 - 8 0.0602 - 11 0.0226 - 13 0.233 - 14 0.143 - 15 0.0677 - 19 0.0226 - 21 0.0226 - 24 0.00752 - 25 0.0301 - 28 0.00752 - 29 0.015 - 40 0.00752 - 41 0.015 - 42 0.00752 - 43 0.00752 - 45 0.00752 - 46 0.015 - 47 0.286 - - 45 19 6 0 - 13 0.0526 - 15 0.158 - 19 0.158 - 24 0.0526 - 29 0.0526 - 47 0.526 - - 49 4 4 0 - 8 0.25 - 14 0.25 - 15 0.25 - 28 0.25 - - 55 51 14 0 - 8 0.0392 - 11 0.0392 - 13 0.255 - 14 0.118 - 15 0.0588 - 21 0.0196 - 25 0.0196 - 29 0.0196 - 40 0.0196 - 41 0.0196 - 42 0.0196 - 43 0.0196 - 46 0.0392 - 47 0.314 - - 57 6 3 0 - 4 0.167 - 13 0.167 - 47 0.667 - - 62 17 6 0 - 13 0.353 - 14 0.176 - 15 0.0588 - 21 0.118 - 45 0.0588 - 47 0.235 - - 66 6 3 0 - 4 0.167 - 8 0.667 - 13 0.167 - - 69 22 8 0 - 3 0.0455 - 8 0.0455 - 11 0.0455 - 13 0.227 - 14 0.409 - 15 0.0455 - 25 0.136 - 41 0.0455 - - 43 32 6 0 - 11 0.0938 - 13 0.344 - 14 0.125 - 15 0.281 - 18 0.0312 - 19 0.125 - - 44 156 17 1 - 0 0.00641 - 2 0.0128 - 4 0.00641 - 7 0.0385 - 8 0.00641 - 13 0.0128 - 14 0.0128 - 21 0.0192 - 28 0.0256 - 29 0.00641 - 32 0.00641 - 33 0.00641 - 35 0.00641 - 41 0.0192 - 45 0.0128 - 46 0.00641 - 47 0.795 - - 57 22 1 0 - 47 1 - - 45 2718 26 8 - 0 0.0011 - 2 0.00478 - 3 0.00258 - 4 0.0011 - 7 0.0118 - 8 0.000736 - 13 0.0545 - 14 0.0309 - 15 0.0213 - 16 0.000736 - 18 0.000736 - 19 0.0169 - 21 0.00331 - 28 0.00184 - 29 0.00258 - 31 0.0118 - 32 0.000736 - 33 0.00736 - 37 0.000368 - 40 0.000368 - 41 0.0982 - 42 0.0232 - 44 0.00221 - 45 0.000736 - 46 0.000736 - 47 0.699 - - 2 87 1 0 - 47 1 - - 48 56 9 0 - 2 0.0179 - 4 0.0179 - 13 0.5 - 14 0.25 - 15 0.0179 - 19 0.125 - 31 0.0357 - 33 0.0179 - 42 0.0179 - - 49 64 7 0 - 13 0.0625 - 14 0.0312 - 15 0.0312 - 19 0.0156 - 41 0.0781 - 42 0.0625 - 47 0.719 - - 55 1037 20 0 - 0 0.00193 - 2 0.00964 - 7 0.0251 - 13 0.0135 - 14 0.000964 - 15 0.00193 - 19 0.0116 - 21 0.00482 - 28 0.00386 - 29 0.00482 - 31 0.026 - 32 0.00193 - 33 0.0145 - 37 0.000964 - 40 0.000964 - 41 0.165 - 42 0.0328 - 44 0.00482 - 46 0.00193 - 47 0.673 - - 57 75 6 0 - 2 0.0133 - 7 0.04 - 31 0.0133 - 41 0.0533 - 42 0.0133 - 47 0.867 - - 62 945 9 0 - 7 0.00317 - 29 0.00106 - 31 0.00106 - 33 0.00106 - 41 0.0254 - 42 0.0159 - 44 0.00106 - 45 0.00212 - 47 0.949 - - 64 96 4 0 - 2 0.0104 - 41 0.104 - 42 0.0417 - 47 0.844 - - 69 334 18 0 - 0 0.00299 - 3 0.021 - 4 0.00599 - 8 0.00599 - 13 0.305 - 14 0.198 - 15 0.159 - 16 0.00599 - 18 0.00599 - 19 0.0778 - 21 0.012 - 28 0.00299 - 29 0.00299 - 31 0.00299 - 33 0.00898 - 41 0.15 - 42 0.00599 - 47 0.0269 - - 46 1060 13 6 - 3 0.000943 - 8 0.00283 - 13 0.0236 - 14 0.0123 - 15 0.0236 - 16 0.00189 - 19 0.000943 - 21 0.000943 - 30 0.000943 - 40 0.0151 - 41 0.899 - 46 0.00472 - 47 0.0132 - - 49 3 3 0 - 13 0.333 - 15 0.333 - 47 0.333 - - 55 921 6 0 - 13 0.00217 - 14 0.00217 - 40 0.0163 - 41 0.967 - 46 0.00434 - 47 0.0076 - - 57 3 2 0 - 41 0.333 - 47 0.667 - - 62 10 2 0 - 41 0.7 - 47 0.3 - - 64 3 2 0 - 8 0.667 - 41 0.333 - - 69 99 12 0 - 3 0.0101 - 8 0.0101 - 13 0.222 - 14 0.111 - 15 0.242 - 16 0.0202 - 19 0.0101 - 21 0.0101 - 30 0.0101 - 40 0.0101 - 41 0.333 - 46 0.0101 - - 47 95402 42 25 - 0 0.00867 - 1 0.000325 - 2 0.0289 - 3 0.0027 - 4 0.00311 - 6 1.05e-05 - 7 0.141 - 8 0.0136 - 9 0.00066 - 10 0.000136 - 12 0.000419 - 13 0.0355 - 14 0.0168 - 15 0.00423 - 16 0.000199 - 17 2.1e-05 - 18 3.14e-05 - 19 0.00112 - 21 0.00595 - 22 0.00022 - 23 2.1e-05 - 24 0.00122 - 25 1.05e-05 - 26 0.00167 - 28 0.0194 - 29 0.0534 - 30 0.0131 - 31 0.0233 - 32 0.016 - 33 0.0203 - 34 0.0436 - 35 0.023 - 36 1.05e-05 - 37 0.0196 - 40 2.1e-05 - 41 0.0307 - 42 0.0112 - 43 0.000199 - 44 0.00087 - 45 0.0302 - 46 0.00213 - 47 0.426 - - 2 2188 5 0 - 41 0.000457 - 42 0.00183 - 45 0.0064 - 46 0.000457 - 47 0.991 - - 4 5 4 0 - 8 0.2 - 34 0.4 - 35 0.2 - 41 0.2 - - 7 38 1 0 - 47 1 - - 21 173 25 0 - 0 0.0116 - 2 0.00578 - 7 0.116 - 8 0.0231 - 12 0.0173 - 13 0.0636 - 14 0.0405 - 15 0.0173 - 19 0.0289 - 21 0.00578 - 23 0.00578 - 24 0.00578 - 25 0.00578 - 28 0.00578 - 29 0.121 - 31 0.0347 - 32 0.00578 - 33 0.00578 - 35 0.00578 - 37 0.00578 - 41 0.0462 - 42 0.0173 - 45 0.00578 - 46 0.0116 - 47 0.387 - - 26 5 3 0 - 8 0.6 - 13 0.2 - 19 0.2 - - 41 29 9 0 - 2 0.069 - 4 0.0345 - 7 0.379 - 15 0.0345 - 21 0.0345 - 31 0.069 - 34 0.241 - 35 0.103 - 37 0.0345 - - 42 40 3 0 - 4 0.025 - 45 0.025 - 47 0.95 - - 44 146 14 0 - 0 0.00685 - 2 0.0137 - 4 0.00685 - 7 0.0411 - 8 0.00685 - 14 0.00685 - 21 0.00685 - 28 0.0274 - 29 0.00685 - 32 0.00685 - 33 0.00685 - 35 0.00685 - 45 0.00685 - 47 0.849 - - 45 2081 17 0 - 0 0.00144 - 2 0.000481 - 7 0.0154 - 13 0.000961 - 14 0.000481 - 21 0.000481 - 28 0.0024 - 29 0.00288 - 31 0.0149 - 32 0.000961 - 33 0.00865 - 37 0.000481 - 41 0.0139 - 42 0.0207 - 44 0.00192 - 45 0.000481 - 47 0.914 - - 46 14 1 0 - 47 1 - - 48 401 21 0 - 0 0.00249 - 2 0.0125 - 7 0.0499 - 13 0.0125 - 14 0.00249 - 15 0.00748 - 16 0.00249 - 21 0.00748 - 24 0.00499 - 28 0.0698 - 29 0.122 - 30 0.0374 - 31 0.387 - 32 0.0249 - 33 0.0249 - 34 0.00249 - 37 0.00249 - 41 0.0823 - 42 0.00249 - 45 0.00998 - 47 0.132 - - 49 2499 23 0 - 0 0.0016 - 2 0.0272 - 7 0.0344 - 8 0.0004 - 12 0.0004 - 13 0.0068 - 14 0.0024 - 15 0.0016 - 21 0.006 - 24 0.0008 - 28 0.0012 - 29 0.0012 - 30 0.0012 - 31 0.0016 - 32 0.002 - 33 0.0016 - 34 0.0656 - 35 0.0324 - 37 0.0012 - 41 0.0312 - 42 0.0156 - 45 0.0228 - 47 0.741 - - 50 6 1 0 - 47 1 - - 51 15 6 0 - 2 0.0667 - 7 0.0667 - 32 0.0667 - 33 0.0667 - 45 0.2 - 47 0.533 - - 52 43 8 0 - 2 0.0233 - 28 0.0233 - 41 0.0233 - 42 0.0233 - 44 0.0233 - 45 0.209 - 46 0.0233 - 47 0.651 - - 53 30 4 0 - 2 0.0333 - 7 0.0333 - 42 0.1 - 47 0.833 - - 55 52582 38 0 - 0 0.00203 - 1 0.000342 - 2 0.0449 - 3 0.00038 - 4 0.00443 - 7 0.183 - 8 0.00304 - 9 0.000133 - 10 0.000133 - 12 1.9e-05 - 13 0.0151 - 14 0.00688 - 15 0.000856 - 16 3.8e-05 - 17 3.8e-05 - 18 1.9e-05 - 19 0.000513 - 21 0.00382 - 22 0.000114 - 24 0.000114 - 26 0.000228 - 28 0.0187 - 29 0.071 - 30 0.00837 - 31 0.0106 - 32 0.018 - 33 0.0195 - 34 0.0097 - 35 0.00778 - 36 1.9e-05 - 37 0.0328 - 41 0.0205 - 42 0.0131 - 43 0.000114 - 44 0.00103 - 45 0.0401 - 46 0.00202 - 47 0.461 - - 57 4707 21 0 - 2 0.0191 - 4 0.00085 - 7 0.0416 - 8 0.000212 - 13 0.000637 - 14 0.000212 - 21 0.00085 - 28 0.000637 - 29 0.000212 - 31 0.00106 - 32 0.000212 - 33 0.000425 - 34 0.00722 - 35 0.00297 - 37 0.00149 - 40 0.000212 - 41 0.0161 - 42 0.0117 - 44 0.00085 - 45 0.021 - 47 0.872 - - 58 17 7 0 - 4 0.0588 - 7 0.294 - 34 0.235 - 35 0.118 - 37 0.118 - 42 0.0588 - 47 0.118 - - 62 4872 24 0 - 0 0.00144 - 2 0.00944 - 4 0.00123 - 7 0.0515 - 8 0.000205 - 13 0.00205 - 14 0.000411 - 15 0.000205 - 19 0.000205 - 21 0.00164 - 28 0.00164 - 29 0.0133 - 30 0.00144 - 31 0.00103 - 32 0.00226 - 33 0.00431 - 34 0.00554 - 35 0.00144 - 37 0.00513 - 41 0.00513 - 42 0.016 - 44 0.000821 - 45 0.0525 - 47 0.821 - - 64 1775 16 0 - 0 0.00113 - 2 0.0293 - 4 0.00169 - 7 0.0958 - 21 0.00225 - 29 0.00451 - 30 0.000563 - 32 0.00282 - 33 0.00169 - 34 0.000563 - 35 0.000563 - 37 0.00113 - 41 0.0169 - 42 0.0135 - 45 0.093 - 47 0.735 - - 66 16 3 0 - 2 0.0625 - 42 0.0625 - 47 0.875 - - 68 15 7 0 - 7 0.0667 - 13 0.0667 - 28 0.0667 - 31 0.0667 - 42 0.0667 - 45 0.0667 - 47 0.6 - - 69 23688 39 0 - 0 0.0296 - 1 0.000549 - 2 0.0054 - 3 0.01 - 4 0.00198 - 6 4.22e-05 - 7 0.13 - 8 0.0475 - 9 0.00236 - 10 0.000253 - 12 0.00148 - 13 0.107 - 14 0.0514 - 15 0.0146 - 16 0.000675 - 18 8.44e-05 - 19 0.00308 - 21 0.0139 - 22 0.000633 - 23 4.22e-05 - 24 0.00443 - 26 0.00621 - 28 0.0343 - 29 0.0511 - 30 0.0331 - 31 0.0616 - 32 0.0226 - 33 0.0358 - 34 0.144 - 35 0.0708 - 37 0.00414 - 40 4.22e-05 - 41 0.0661 - 42 0.00515 - 43 0.000549 - 44 0.000675 - 45 0.0068 - 46 0.00393 - 47 0.0277 - - 74 7 5 0 - 2 0.286 - 41 0.143 - 42 0.143 - 45 0.143 - 47 0.286 - - 48 954 28 7 - 0 0.00105 - 2 0.00629 - 3 0.00314 - 4 0.00524 - 7 0.021 - 8 0.00314 - 13 0.155 - 14 0.142 - 15 0.0304 - 16 0.00314 - 18 0.00105 - 19 0.169 - 21 0.0136 - 22 0.00105 - 24 0.0021 - 28 0.0294 - 29 0.0514 - 30 0.0157 - 31 0.162 - 32 0.0105 - 33 0.0115 - 34 0.00105 - 37 0.00105 - 41 0.0388 - 42 0.0021 - 45 0.0629 - 46 0.00105 - 47 0.0556 - - 41 16 6 0 - 2 0.125 - 21 0.0625 - 41 0.0625 - 42 0.0625 - 45 0.125 - 47 0.562 - - 47 806 26 0 - 0 0.00124 - 2 0.00372 - 3 0.00372 - 4 0.0062 - 7 0.0223 - 8 0.00372 - 13 0.176 - 14 0.164 - 15 0.036 - 16 0.00372 - 19 0.102 - 21 0.0149 - 22 0.00124 - 24 0.00248 - 28 0.0211 - 29 0.0521 - 30 0.0136 - 31 0.185 - 32 0.0124 - 33 0.00993 - 37 0.00124 - 41 0.0397 - 42 0.00124 - 45 0.0682 - 46 0.00124 - 47 0.0533 - - 49 5 4 0 - 2 0.2 - 13 0.4 - 14 0.2 - 18 0.2 - - 55 19 8 0 - 13 0.0526 - 28 0.211 - 29 0.263 - 30 0.105 - 31 0.158 - 33 0.0526 - 41 0.105 - 47 0.0526 - - 62 36 5 0 - 7 0.0278 - 13 0.0278 - 14 0.0278 - 19 0.889 - 45 0.0278 - - 64 63 9 0 - 13 0.0317 - 14 0.0159 - 19 0.683 - 28 0.111 - 29 0.0317 - 30 0.0317 - 31 0.0476 - 33 0.0317 - 41 0.0159 - - 69 2 2 0 - 34 0.5 - 41 0.5 - - 49 6007 36 13 - 0 0.00117 - 2 0.0255 - 3 0.00117 - 4 0.00383 - 5 0.00333 - 7 0.0146 - 8 0.00133 - 9 0.000333 - 10 0.000166 - 12 0.000166 - 13 0.122 - 14 0.107 - 15 0.101 - 16 0.00449 - 18 0.00117 - 19 0.108 - 21 0.0103 - 23 0.000166 - 24 0.000333 - 28 0.000499 - 29 0.000666 - 30 0.000832 - 31 0.000832 - 32 0.000999 - 33 0.000999 - 34 0.0276 - 35 0.0135 - 37 0.000499 - 40 0.000333 - 41 0.106 - 42 0.00916 - 43 0.000832 - 44 0.000666 - 45 0.0201 - 46 0.0025 - 47 0.308 - - 41 1889 16 0 - 2 0.0238 - 4 0.000529 - 7 0.00106 - 13 0.00318 - 14 0.00159 - 15 0.00106 - 19 0.000529 - 21 0.00424 - 32 0.000529 - 40 0.00106 - 41 0.157 - 42 0.00794 - 44 0.00159 - 45 0.0312 - 46 0.000529 - 47 0.764 - - 44 2 2 0 - 2 0.5 - 45 0.5 - - 45 7 4 0 - 7 0.143 - 14 0.286 - 15 0.286 - 47 0.286 - - 47 59 15 0 - 4 0.0169 - 8 0.0339 - 13 0.237 - 14 0.22 - 15 0.102 - 19 0.0169 - 21 0.0339 - 28 0.0169 - 29 0.0339 - 30 0.0339 - 31 0.0339 - 32 0.0169 - 33 0.0169 - 41 0.119 - 47 0.0678 - - 48 9 4 0 - 14 0.111 - 21 0.111 - 41 0.222 - 47 0.556 - - 49 30 9 0 - 2 0.0333 - 7 0.0333 - 13 0.0667 - 14 0.133 - 15 0.2 - 19 0.233 - 41 0.1 - 42 0.0333 - 47 0.167 - - 55 493 13 0 - 2 0.178 - 7 0.0365 - 9 0.00203 - 13 0.00203 - 14 0.00609 - 21 0.0183 - 32 0.00203 - 34 0.00203 - 37 0.00406 - 41 0.0953 - 42 0.0325 - 45 0.069 - 47 0.552 - - 57 31 7 0 - 2 0.161 - 14 0.0323 - 41 0.0645 - 42 0.0323 - 44 0.0323 - 45 0.0645 - 47 0.613 - - 58 78 5 0 - 2 0.0641 - 41 0.0128 - 42 0.0256 - 45 0.0641 - 47 0.833 - - 62 11 4 0 - 2 0.182 - 42 0.0909 - 45 0.182 - 47 0.545 - - 64 6 3 0 - 2 0.167 - 45 0.5 - 47 0.333 - - 66 3 2 0 - 21 0.667 - 47 0.333 - - 69 3383 34 0 - 0 0.00207 - 2 0.00118 - 3 0.00207 - 4 0.00621 - 5 0.00591 - 7 0.0195 - 8 0.00177 - 9 0.000296 - 10 0.000296 - 12 0.000296 - 13 0.21 - 14 0.181 - 15 0.175 - 16 0.00798 - 18 0.00207 - 19 0.189 - 21 0.0118 - 23 0.000296 - 24 0.000591 - 28 0.000591 - 29 0.000591 - 30 0.000887 - 31 0.000887 - 32 0.000887 - 33 0.00148 - 34 0.0488 - 35 0.0239 - 37 0.000296 - 41 0.0822 - 42 0.00562 - 43 0.00148 - 45 0.00414 - 46 0.00414 - 47 0.00739 - - 50 8 3 0 - 14 0.125 - 19 0.125 - 47 0.75 - - 51 20 7 0 - 2 0.05 - 7 0.05 - 32 0.05 - 33 0.05 - 41 0.05 - 45 0.35 - 47 0.4 - - 52 51 9 1 - 2 0.0196 - 27 0.0196 - 28 0.0196 - 41 0.098 - 42 0.0196 - 44 0.0196 - 45 0.235 - 46 0.0196 - 47 0.549 - - 55 4 3 0 - 28 0.25 - 45 0.5 - 46 0.25 - - 53 30 4 0 - 2 0.0333 - 7 0.0333 - 42 0.1 - 47 0.833 - - 55 67719 43 18 - 0 0.00162 - 1 0.000266 - 2 0.0581 - 3 0.000753 - 4 0.0036 - 5 1.48e-05 - 7 0.143 - 8 0.00282 - 9 0.000266 - 10 0.00034 - 12 2.95e-05 - 13 0.019 - 14 0.00755 - 15 0.00347 - 16 8.86e-05 - 17 2.95e-05 - 18 4.43e-05 - 19 0.00157 - 21 0.0104 - 22 0.000192 - 23 1.48e-05 - 24 8.86e-05 - 25 1.48e-05 - 26 0.000177 - 27 1.48e-05 - 28 0.0146 - 29 0.0552 - 30 0.00653 - 31 0.00828 - 32 0.0141 - 33 0.0153 - 34 0.00755 - 35 0.00604 - 36 1.48e-05 - 37 0.0255 - 40 4.43e-05 - 41 0.159 - 42 0.0118 - 43 0.000295 - 44 0.00233 - 45 0.0466 - 46 0.0162 - 47 0.358 - - 4 27 11 0 - 7 0.037 - 8 0.037 - 13 0.037 - 14 0.037 - 28 0.037 - 29 0.0741 - 32 0.037 - 41 0.0741 - 45 0.037 - 46 0.037 - 47 0.556 - - 12 3 3 0 - 2 0.333 - 33 0.333 - 42 0.333 - - 21 9 5 0 - 7 0.111 - 13 0.111 - 28 0.333 - 29 0.222 - 31 0.222 - - 41 1402 27 0 - 0 0.000713 - 2 0.0464 - 4 0.000713 - 7 0.0464 - 8 0.000713 - 10 0.000713 - 13 0.0728 - 14 0.00499 - 15 0.0278 - 19 0.000713 - 21 0.0107 - 27 0.000713 - 28 0.000713 - 29 0.0157 - 30 0.000713 - 31 0.00143 - 32 0.00713 - 33 0.00214 - 34 0.00214 - 37 0.00285 - 41 0.0449 - 42 0.0157 - 43 0.000713 - 44 0.00357 - 45 0.0271 - 46 0.00143 - 47 0.66 - - 42 27 7 0 - 2 0.111 - 7 0.148 - 21 0.037 - 29 0.0741 - 41 0.111 - 45 0.185 - 47 0.333 - - 43 29 2 0 - 7 0.069 - 44 0.931 - - 45 366 17 0 - 2 0.0273 - 7 0.167 - 13 0.0109 - 14 0.00273 - 21 0.00273 - 22 0.00273 - 28 0.0328 - 29 0.29 - 30 0.0355 - 31 0.0082 - 32 0.0109 - 33 0.082 - 34 0.00273 - 37 0.00273 - 41 0.0765 - 42 0.00273 - 47 0.243 - - 46 63 7 0 - 2 0.0159 - 7 0.0159 - 28 0.0317 - 29 0.0159 - 34 0.0159 - 41 0.0159 - 45 0.889 - - 47 833 26 0 - 0 0.0072 - 2 0.0336 - 3 0.0012 - 4 0.0096 - 7 0.0204 - 8 0.0192 - 9 0.0012 - 13 0.0636 - 14 0.0156 - 15 0.048 - 16 0.0012 - 18 0.0024 - 19 0.0876 - 21 0.0168 - 28 0.0396 - 29 0.0564 - 30 0.0072 - 31 0.376 - 32 0.0072 - 33 0.0264 - 34 0.0048 - 41 0.0264 - 42 0.0108 - 43 0.0024 - 45 0.0888 - 47 0.0264 - - 48 482 15 0 - 0 0.00622 - 2 0.027 - 7 0.0373 - 14 0.00207 - 28 0.344 - 29 0.0996 - 30 0.168 - 31 0.0705 - 32 0.0975 - 33 0.104 - 41 0.0228 - 42 0.00415 - 44 0.00415 - 45 0.00207 - 47 0.0104 - - 49 2900 25 0 - 0 0.00069 - 2 0.0714 - 3 0.000345 - 4 0.00103 - 7 0.108 - 8 0.00069 - 13 0.0121 - 14 0.00448 - 15 0.000345 - 21 0.0031 - 28 0.00586 - 29 0.0366 - 30 0.00138 - 31 0.00276 - 32 0.00931 - 33 0.00931 - 34 0.00586 - 35 0.00655 - 37 0.0169 - 41 0.128 - 42 0.0134 - 44 0.0031 - 45 0.0345 - 46 0.0031 - 47 0.521 - - 55 480 19 0 - 2 0.0854 - 4 0.00417 - 7 0.0437 - 13 0.0104 - 15 0.00208 - 21 0.00833 - 28 0.0896 - 29 0.0854 - 30 0.0479 - 31 0.0146 - 32 0.05 - 33 0.0646 - 35 0.00208 - 37 0.0125 - 41 0.102 - 42 0.0333 - 45 0.0167 - 46 0.00208 - 47 0.325 - - 57 150 18 0 - 0 0.0133 - 1 0.00667 - 2 0.0467 - 4 0.00667 - 7 0.06 - 13 0.0467 - 14 0.02 - 29 0.0333 - 30 0.0133 - 32 0.0267 - 33 0.00667 - 34 0.00667 - 37 0.02 - 41 0.187 - 42 0.0133 - 44 0.02 - 45 0.0267 - 47 0.447 - - 58 218 11 0 - 2 0.0505 - 7 0.0275 - 14 0.00459 - 21 0.00459 - 28 0.00459 - 34 0.00459 - 35 0.00459 - 41 0.0367 - 42 0.0183 - 45 0.0826 - 47 0.761 - - 62 10 5 0 - 2 0.1 - 14 0.1 - 19 0.2 - 37 0.1 - 47 0.5 - - 64 14 5 0 - 2 0.143 - 19 0.0714 - 32 0.0714 - 45 0.0714 - 47 0.643 - - 68 3 3 0 - 30 0.333 - 31 0.333 - 32 0.333 - - 69 60692 42 0 - 0 0.00158 - 1 0.00028 - 2 0.0584 - 3 0.000807 - 4 0.00377 - 5 1.65e-05 - 7 0.151 - 8 0.00282 - 9 0.00028 - 10 0.000362 - 12 3.3e-05 - 13 0.0177 - 14 0.00774 - 15 0.00254 - 16 8.24e-05 - 17 3.3e-05 - 18 1.65e-05 - 19 0.000478 - 21 0.0109 - 22 0.000198 - 23 1.65e-05 - 24 9.89e-05 - 25 1.65e-05 - 26 0.000198 - 28 0.0117 - 29 0.0552 - 30 0.00512 - 31 0.00315 - 32 0.0136 - 33 0.0144 - 34 0.00796 - 35 0.00639 - 36 1.65e-05 - 37 0.0274 - 40 4.94e-05 - 41 0.167 - 42 0.0115 - 43 0.00028 - 44 0.00185 - 45 0.047 - 46 0.0179 - 47 0.35 - - 57 5900 27 12 - 2 0.0561 - 3 0.000339 - 4 0.00102 - 7 0.0334 - 8 0.000508 - 9 0.000169 - 13 0.0149 - 14 0.00797 - 15 0.00831 - 16 0.000169 - 19 0.000339 - 21 0.00746 - 28 0.000508 - 29 0.000169 - 31 0.000847 - 32 0.000169 - 33 0.000339 - 34 0.00576 - 35 0.00237 - 37 0.00119 - 40 0.000678 - 41 0.117 - 42 0.0103 - 44 0.00441 - 45 0.0295 - 46 0.000508 - 47 0.696 - - 41 4850 19 0 - 2 0.0485 - 3 0.000206 - 4 0.000412 - 7 0.0221 - 13 0.00536 - 14 0.00103 - 15 0.00227 - 21 0.00515 - 28 0.000206 - 29 0.000206 - 34 0.000206 - 37 0.000412 - 40 0.000619 - 41 0.132 - 42 0.00928 - 44 0.00536 - 45 0.0262 - 46 0.000412 - 47 0.74 - - 42 18 3 0 - 42 0.111 - 45 0.0556 - 47 0.833 - - 44 2 1 0 - 45 1 - - 46 2 1 0 - 45 1 - - 47 28 11 0 - 7 0.107 - 8 0.0357 - 13 0.107 - 14 0.0357 - 31 0.179 - 32 0.0357 - 37 0.0357 - 41 0.0714 - 42 0.0357 - 45 0.0714 - 47 0.286 - - 49 12 5 0 - 2 0.167 - 13 0.167 - 35 0.0833 - 41 0.0833 - 47 0.5 - - 55 612 13 0 - 2 0.126 - 4 0.00327 - 7 0.127 - 13 0.031 - 21 0.0261 - 28 0.00327 - 33 0.00163 - 37 0.00654 - 40 0.00163 - 41 0.0392 - 42 0.018 - 45 0.049 - 47 0.567 - - 57 50 8 0 - 2 0.02 - 7 0.02 - 14 0.02 - 15 0.02 - 41 0.08 - 42 0.02 - 45 0.02 - 47 0.8 - - 58 106 7 0 - 2 0.0755 - 13 0.00943 - 41 0.00943 - 42 0.00943 - 45 0.066 - 46 0.00943 - 47 0.821 - - 62 14 4 0 - 2 0.286 - 9 0.0714 - 21 0.0714 - 47 0.571 - - 64 6 4 0 - 8 0.167 - 19 0.167 - 45 0.167 - 47 0.5 - - 69 196 17 0 - 2 0.0153 - 3 0.0051 - 4 0.0102 - 7 0.0408 - 8 0.0051 - 13 0.189 - 14 0.204 - 15 0.189 - 16 0.0051 - 19 0.0051 - 21 0.0102 - 33 0.0051 - 34 0.168 - 35 0.0663 - 41 0.0714 - 45 0.0051 - 47 0.0051 - - 58 579 32 8 - 0 0.00173 - 2 0.0311 - 3 0.00864 - 4 0.0155 - 7 0.0138 - 8 0.019 - 9 0.00345 - 10 0.00173 - 11 0.00173 - 13 0.337 - 14 0.162 - 15 0.0725 - 16 0.00345 - 18 0.00345 - 19 0.0104 - 21 0.154 - 22 0.00518 - 23 0.00173 - 24 0.00173 - 28 0.00345 - 29 0.00345 - 30 0.00345 - 31 0.0173 - 32 0.00345 - 33 0.00864 - 34 0.00691 - 35 0.00345 - 37 0.00345 - 41 0.0691 - 42 0.00173 - 46 0.0242 - 47 0.00345 - - 41 32 9 0 - 2 0.0312 - 3 0.0312 - 13 0.25 - 14 0.0312 - 21 0.0625 - 32 0.0312 - 41 0.156 - 46 0.375 - 47 0.0312 - - 42 3 3 0 - 21 0.333 - 41 0.333 - 47 0.333 - - 45 95 13 0 - 2 0.0421 - 4 0.0316 - 7 0.0211 - 8 0.0211 - 13 0.368 - 14 0.158 - 15 0.0526 - 19 0.0105 - 21 0.168 - 31 0.0316 - 33 0.0105 - 37 0.0105 - 41 0.0737 - - 55 212 26 0 - 0 0.00472 - 2 0.0425 - 3 0.0142 - 4 0.00943 - 7 0.00943 - 8 0.0236 - 9 0.00472 - 10 0.00472 - 11 0.00472 - 13 0.259 - 14 0.118 - 15 0.0283 - 19 0.0142 - 21 0.278 - 22 0.00943 - 23 0.00472 - 24 0.00472 - 28 0.00472 - 29 0.00943 - 30 0.00472 - 31 0.0236 - 32 0.00472 - 33 0.0189 - 37 0.00472 - 41 0.0849 - 46 0.00943 - - 57 3 3 0 - 2 0.333 - 21 0.333 - 42 0.333 - - 62 13 9 0 - 3 0.0769 - 7 0.0769 - 8 0.0769 - 9 0.0769 - 13 0.308 - 14 0.0769 - 21 0.154 - 31 0.0769 - 41 0.0769 - - 64 6 3 0 - 2 0.5 - 13 0.167 - 21 0.333 - - 69 207 17 0 - 4 0.0193 - 7 0.0145 - 8 0.0145 - 13 0.435 - 14 0.237 - 15 0.14 - 16 0.00966 - 18 0.00966 - 19 0.00966 - 21 0.029 - 22 0.00483 - 28 0.00483 - 30 0.00483 - 31 0.00483 - 34 0.0193 - 35 0.00966 - 41 0.0338 - - 62 6481 29 9 - 0 0.00108 - 2 0.0227 - 4 0.000926 - 7 0.0389 - 8 0.00463 - 9 0.00108 - 13 0.00339 - 14 0.000463 - 15 0.000309 - 19 0.000309 - 21 0.00355 - 22 0.000154 - 28 0.00123 - 29 0.01 - 30 0.00108 - 31 0.000771 - 32 0.0017 - 33 0.00324 - 34 0.00417 - 35 0.00108 - 37 0.00386 - 40 0.000154 - 41 0.0728 - 42 0.0151 - 43 0.000154 - 44 0.00278 - 45 0.186 - 46 0.00154 - 47 0.617 - - 41 2566 9 0 - 2 0.00857 - 7 0.000779 - 21 0.000779 - 41 0.0744 - 42 0.00468 - 44 0.00039 - 45 0.295 - 46 0.00234 - 47 0.613 - - 42 4 2 0 - 42 0.75 - 45 0.25 - - 45 3 1 0 - 7 1 - - 46 10 1 0 - 45 1 - - 47 3515 29 0 - 0 0.00199 - 2 0.0259 - 4 0.00171 - 7 0.0512 - 8 0.00853 - 9 0.00199 - 13 0.00597 - 14 0.000853 - 15 0.000569 - 19 0.000569 - 21 0.00455 - 22 0.000284 - 28 0.00228 - 29 0.0182 - 30 0.00199 - 31 0.00142 - 32 0.00199 - 33 0.00569 - 34 0.00768 - 35 0.00199 - 37 0.00683 - 40 0.000284 - 41 0.0688 - 42 0.0216 - 43 0.000284 - 44 0.00427 - 45 0.118 - 46 0.00114 - 47 0.634 - - 49 6 4 0 - 2 0.167 - 7 0.333 - 41 0.333 - 47 0.167 - - 55 102 6 0 - 2 0.049 - 13 0.0098 - 41 0.0098 - 42 0.0196 - 45 0.0098 - 47 0.902 - - 58 17 3 0 - 2 0.118 - 45 0.0588 - 47 0.824 - - 69 256 12 0 - 2 0.102 - 7 0.254 - 21 0.0195 - 29 0.00391 - 32 0.0156 - 33 0.00391 - 37 0.00391 - 41 0.141 - 42 0.0195 - 44 0.00781 - 45 0.0664 - 47 0.363 - - 64 2370 27 7 - 0 0.000844 - 2 0.0992 - 4 0.00127 - 7 0.0726 - 8 0.0207 - 9 0.00127 - 10 0.000422 - 13 0.00464 - 14 0.00338 - 19 0.000422 - 21 0.00759 - 22 0.00169 - 29 0.00338 - 30 0.000422 - 32 0.00211 - 33 0.00127 - 34 0.000422 - 35 0.000422 - 37 0.000844 - 40 0.000844 - 41 0.101 - 42 0.0122 - 43 0.000422 - 44 0.00127 - 45 0.11 - 46 0.00127 - 47 0.55 - - 41 1979 21 0 - 0 0.000505 - 2 0.099 - 4 0.00152 - 7 0.0753 - 10 0.000505 - 13 0.00152 - 14 0.000505 - 21 0.00707 - 29 0.00303 - 32 0.00202 - 33 0.00101 - 35 0.000505 - 37 0.000505 - 40 0.000505 - 41 0.111 - 42 0.0116 - 43 0.000505 - 44 0.00152 - 45 0.106 - 46 0.000505 - 47 0.576 - - 47 74 10 0 - 8 0.662 - 9 0.0405 - 13 0.0811 - 14 0.0541 - 19 0.0135 - 21 0.0405 - 22 0.0541 - 41 0.0135 - 46 0.027 - 47 0.0135 - - 49 6 4 0 - 32 0.167 - 41 0.333 - 45 0.333 - 47 0.167 - - 55 100 11 0 - 2 0.12 - 7 0.13 - 13 0.01 - 14 0.01 - 21 0.01 - 29 0.02 - 40 0.01 - 41 0.11 - 42 0.03 - 45 0.08 - 47 0.47 - - 58 68 6 0 - 2 0.132 - 7 0.0147 - 41 0.0441 - 42 0.0147 - 45 0.118 - 47 0.676 - - 62 3 2 0 - 2 0.333 - 45 0.667 - - 69 121 13 0 - 0 0.00826 - 2 0.116 - 7 0.0496 - 13 0.00826 - 14 0.0165 - 30 0.00826 - 33 0.00826 - 34 0.00826 - 37 0.00826 - 41 0.00826 - 42 0.00826 - 45 0.231 - 47 0.521 - - 65 8 2 0 - 45 0.5 - 47 0.5 - - 66 35 6 1 - 2 0.0571 - 21 0.286 - 41 0.0286 - 42 0.2 - 44 0.0286 - 47 0.4 - - 47 3 2 0 - 2 0.667 - 42 0.333 - - 67 6 2 0 - 45 0.667 - 47 0.333 - - 68 21 11 0 - 7 0.0476 - 13 0.0476 - 14 0.0476 - 19 0.0952 - 21 0.0476 - 28 0.0476 - 31 0.0476 - 41 0.0476 - 42 0.0476 - 45 0.0952 - 47 0.429 - - 69 90079 42 2 - 0 0.00829 - 1 0.000155 - 2 0.00168 - 3 0.00775 - 4 0.0133 - 5 0.00924 - 6 0.000144 - 7 0.0348 - 8 0.0152 - 9 0.000844 - 10 0.000544 - 12 0.000444 - 13 0.201 - 14 0.151 - 15 0.13 - 16 0.00602 - 18 0.0014 - 19 0.154 - 20 0.000144 - 21 0.0443 - 22 0.000366 - 23 5.55e-05 - 24 0.00124 - 26 0.00173 - 27 2.22e-05 - 28 0.00959 - 29 0.0139 - 30 0.00948 - 31 0.0174 - 32 0.00625 - 33 0.00968 - 34 0.0385 - 35 0.0187 - 37 0.00109 - 40 9.99e-05 - 41 0.0694 - 42 0.00417 - 43 0.00219 - 44 0.000244 - 45 0.00562 - 46 0.0036 - 47 0.00728 - - 41 4 2 0 - 13 0.75 - 15 0.25 - - 69 6 5 0 - 13 0.167 - 14 0.333 - 34 0.167 - 41 0.167 - 46 0.167 - - 74 22 8 0 - 2 0.0909 - 5 0.0455 - 13 0.0455 - 18 0.0455 - 41 0.545 - 42 0.0455 - 45 0.0909 - 47 0.0909 - -63 79666 1 0 - 47 1 - -64 56433 41 26 - 0 0.0151 - 1 3.54e-05 - 2 0.021 - 3 0.00828 - 4 0.00434 - 5 7.09e-05 - 6 3.54e-05 - 7 0.0226 - 8 0.0251 - 9 0.00383 - 10 0.000656 - 12 3.54e-05 - 13 0.178 - 14 0.1 - 15 0.0189 - 16 0.00159 - 17 0.000106 - 18 0.000213 - 19 0.00564 - 21 0.0233 - 22 0.00184 - 24 0.00365 - 26 0.00124 - 28 0.0339 - 29 0.164 - 30 0.0194 - 31 0.0203 - 32 0.0433 - 33 0.0486 - 34 3.54e-05 - 35 0.000284 - 36 1.77e-05 - 37 8.86e-05 - 40 7.09e-05 - 41 0.155 - 42 0.0084 - 43 0.000939 - 44 0.00119 - 45 0.0125 - 46 0.0073 - 47 0.0483 - - 2 17 8 0 - 7 0.176 - 13 0.0588 - 22 0.0588 - 28 0.176 - 30 0.0588 - 41 0.294 - 46 0.0588 - 47 0.118 - - 4 202 17 0 - 0 0.0891 - 2 0.0594 - 3 0.0149 - 8 0.00495 - 13 0.144 - 14 0.00495 - 21 0.0149 - 24 0.0099 - 28 0.0743 - 29 0.342 - 30 0.0396 - 31 0.0347 - 32 0.099 - 33 0.0446 - 41 0.0149 - 42 0.00495 - 45 0.00495 - - 7 10218 35 1 - 0 0.0262 - 2 0.0361 - 3 0.00861 - 4 0.000587 - 7 0.0236 - 8 0.0418 - 9 0.00803 - 10 0.000685 - 12 9.79e-05 - 13 0.141 - 14 0.0686 - 15 0.0234 - 16 0.00147 - 18 0.000294 - 19 0.00832 - 21 0.065 - 22 0.00431 - 24 0.00528 - 26 0.000391 - 28 0.0397 - 29 0.102 - 30 0.0302 - 31 0.0349 - 32 0.0379 - 33 0.0506 - 34 9.79e-05 - 35 0.00108 - 37 9.79e-05 - 41 0.11 - 42 0.00851 - 43 0.00127 - 44 0.00137 - 45 0.019 - 46 0.00617 - 47 0.0931 - - 7 48 15 0 - 0 0.0208 - 8 0.0208 - 13 0.125 - 14 0.125 - 18 0.0208 - 21 0.104 - 28 0.0625 - 29 0.0208 - 30 0.0417 - 32 0.0208 - 33 0.0625 - 41 0.229 - 42 0.0417 - 46 0.0208 - 47 0.0833 - - 12 1 1 0 - 42 1 - - 13 8 7 0 - 2 0.125 - 7 0.125 - 8 0.125 - 13 0.25 - 14 0.125 - 21 0.125 - 30 0.125 - - 15 14 1 0 - 47 1 - - 21 385 23 4 - 0 0.0182 - 2 0.0779 - 3 0.0104 - 4 0.0026 - 7 0.0545 - 8 0.0234 - 13 0.0909 - 14 0.0649 - 15 0.013 - 19 0.0104 - 21 0.0571 - 24 0.013 - 28 0.0234 - 29 0.013 - 30 0.0156 - 31 0.0312 - 32 0.0026 - 33 0.0026 - 41 0.249 - 42 0.026 - 45 0.0416 - 46 0.013 - 47 0.145 - - 7 246 21 0 - 2 0.0813 - 3 0.0122 - 7 0.061 - 8 0.0325 - 13 0.0854 - 14 0.061 - 15 0.0163 - 19 0.0122 - 21 0.0285 - 24 0.00407 - 28 0.00813 - 29 0.0122 - 30 0.0122 - 31 0.0163 - 32 0.00407 - 33 0.00407 - 41 0.297 - 42 0.0407 - 45 0.0407 - 46 0.0203 - 47 0.15 - - 21 13 8 0 - 2 0.0769 - 7 0.0769 - 8 0.0769 - 13 0.231 - 14 0.154 - 21 0.231 - 29 0.0769 - 41 0.0769 - - 47 118 18 0 - 0 0.0508 - 2 0.0678 - 3 0.00847 - 4 0.00847 - 7 0.0424 - 13 0.0932 - 14 0.0593 - 15 0.00847 - 19 0.00847 - 21 0.102 - 24 0.0339 - 28 0.0508 - 29 0.00847 - 30 0.0254 - 31 0.0678 - 41 0.178 - 45 0.0424 - 47 0.144 - - 71 5 5 0 - 2 0.2 - 14 0.2 - 28 0.2 - 45 0.2 - 47 0.2 - - 26 2 1 0 - 30 1 - - 34 10 5 0 - 2 0.1 - 13 0.4 - 14 0.1 - 41 0.2 - 47 0.2 - - 35 5 2 0 - 2 0.4 - 47 0.6 - - 41 8 5 0 - 8 0.25 - 13 0.375 - 14 0.125 - 28 0.125 - 33 0.125 - - 44 5 4 0 - 2 0.2 - 8 0.4 - 14 0.2 - 30 0.2 - - 45 26 7 0 - 2 0.0385 - 13 0.0769 - 14 0.0769 - 28 0.0769 - 29 0.269 - 33 0.192 - 41 0.269 - - 47 27924 40 25 - 0 0.0152 - 1 3.58e-05 - 2 0.0212 - 3 0.00834 - 4 0.00437 - 5 7.16e-05 - 6 3.58e-05 - 7 0.0219 - 8 0.0252 - 9 0.0038 - 10 0.000573 - 12 3.58e-05 - 13 0.18 - 14 0.1 - 15 0.0191 - 16 0.00161 - 17 0.000107 - 18 0.000215 - 19 0.00569 - 21 0.0165 - 22 0.00175 - 24 0.00369 - 26 0.00125 - 28 0.0342 - 29 0.166 - 30 0.0196 - 31 0.0206 - 32 0.0438 - 33 0.0491 - 34 3.58e-05 - 35 0.000179 - 37 7.16e-05 - 40 7.16e-05 - 41 0.156 - 42 0.00849 - 43 0.000931 - 44 0.00111 - 45 0.0122 - 46 0.00734 - 47 0.0488 - - 2 12 7 0 - 7 0.25 - 13 0.0833 - 22 0.0833 - 28 0.25 - 30 0.0833 - 41 0.0833 - 47 0.167 - - 4 201 17 0 - 0 0.0896 - 2 0.0597 - 3 0.0149 - 8 0.00498 - 13 0.144 - 14 0.00498 - 21 0.00995 - 24 0.00995 - 28 0.0746 - 29 0.343 - 30 0.0398 - 31 0.0348 - 32 0.0995 - 33 0.0448 - 41 0.0149 - 42 0.00498 - 45 0.00498 - - 7 9753 35 0 - 0 0.0275 - 2 0.0378 - 3 0.00892 - 4 0.000615 - 7 0.0198 - 8 0.0437 - 9 0.00841 - 10 0.000513 - 12 0.000103 - 13 0.146 - 14 0.0687 - 15 0.0245 - 16 0.00154 - 18 0.000308 - 19 0.00872 - 21 0.0321 - 22 0.00451 - 24 0.00554 - 26 0.00041 - 28 0.0416 - 29 0.107 - 30 0.0317 - 31 0.0366 - 32 0.0397 - 33 0.053 - 34 0.000103 - 35 0.000513 - 37 0.000103 - 41 0.115 - 42 0.00892 - 43 0.00133 - 44 0.00113 - 45 0.0199 - 46 0.00646 - 47 0.0975 - - 12 1 1 0 - 42 1 - - 13 7 6 0 - 2 0.143 - 8 0.143 - 13 0.286 - 14 0.143 - 21 0.143 - 30 0.143 - - 15 14 1 0 - 47 1 - - 21 367 23 0 - 0 0.0191 - 2 0.0817 - 3 0.0109 - 4 0.00272 - 7 0.0572 - 8 0.0245 - 13 0.0899 - 14 0.0654 - 15 0.0136 - 19 0.0109 - 21 0.0191 - 24 0.0136 - 28 0.0245 - 29 0.0136 - 30 0.0163 - 31 0.0327 - 32 0.00272 - 33 0.00272 - 41 0.262 - 42 0.0272 - 45 0.0436 - 46 0.0136 - 47 0.153 - - 26 2 1 0 - 30 1 - - 34 10 5 0 - 2 0.1 - 13 0.4 - 14 0.1 - 41 0.2 - 47 0.2 - - 35 4 2 0 - 2 0.25 - 47 0.75 - - 41 2 2 0 - 28 0.5 - 33 0.5 - - 44 5 4 0 - 2 0.2 - 8 0.4 - 14 0.2 - 30 0.2 - - 45 24 7 0 - 2 0.0417 - 13 0.0833 - 14 0.0833 - 28 0.0833 - 29 0.292 - 33 0.208 - 41 0.208 - - 49 130 21 0 - 0 0.0385 - 2 0.0385 - 7 0.00769 - 8 0.0308 - 13 0.0923 - 14 0.0385 - 15 0.00769 - 19 0.00769 - 21 0.0385 - 24 0.00769 - 28 0.00769 - 29 0.0154 - 30 0.00769 - 31 0.0231 - 33 0.00769 - 41 0.369 - 42 0.0615 - 44 0.00769 - 45 0.0308 - 46 0.0154 - 47 0.146 - - 55 50 13 0 - 2 0.02 - 7 0.04 - 13 0.14 - 14 0.08 - 15 0.06 - 21 0.04 - 29 0.1 - 30 0.02 - 31 0.04 - 33 0.12 - 41 0.2 - 42 0.02 - 47 0.12 - - 57 13 9 0 - 8 0.0769 - 13 0.231 - 14 0.154 - 29 0.0769 - 31 0.0769 - 41 0.154 - 42 0.0769 - 46 0.0769 - 47 0.0769 - - 62 7901 29 0 - 0 0.00253 - 2 0.000506 - 3 0.00797 - 4 0.00367 - 7 0.00101 - 8 0.0221 - 9 0.0024 - 10 0.00101 - 13 0.172 - 14 0.078 - 15 0.00848 - 16 0.000127 - 17 0.000253 - 18 0.000127 - 19 0.00329 - 21 0.00633 - 22 0.000127 - 24 0.000759 - 28 0.0291 - 29 0.424 - 30 0.0182 - 31 0.0151 - 32 0.0938 - 33 0.0919 - 41 0.0103 - 42 0.00101 - 43 0.000506 - 45 0.00165 - 46 0.00354 - - 64 337 24 0 - 0 0.0326 - 2 0.0089 - 4 0.00593 - 7 0.0386 - 8 0.0326 - 13 0.131 - 14 0.0504 - 15 0.0089 - 19 0.0119 - 21 0.00297 - 22 0.00297 - 24 0.0119 - 26 0.00297 - 28 0.0801 - 29 0.285 - 30 0.0178 - 31 0.0148 - 32 0.0475 - 33 0.107 - 41 0.0623 - 42 0.0089 - 44 0.00297 - 45 0.0178 - 47 0.0148 - - 66 31 12 0 - 2 0.0645 - 7 0.0323 - 9 0.0645 - 13 0.226 - 14 0.0323 - 15 0.0645 - 18 0.0323 - 28 0.0323 - 29 0.0323 - 31 0.0968 - 41 0.0968 - 47 0.226 - - 68 2 2 0 - 8 0.5 - 47 0.5 - - 70 36 15 0 - 0 0.0278 - 2 0.0833 - 7 0.167 - 13 0.0278 - 19 0.0278 - 24 0.0278 - 28 0.111 - 29 0.0278 - 30 0.0278 - 31 0.0278 - 32 0.111 - 33 0.139 - 42 0.0278 - 45 0.0556 - 47 0.111 - - 71 1934 30 0 - 0 0.0274 - 2 0.0398 - 3 0.015 - 4 0.000517 - 7 0.0729 - 8 0.0217 - 9 0.00103 - 10 0.00103 - 13 0.171 - 14 0.0693 - 15 0.0274 - 18 0.000517 - 19 0.00982 - 21 0.0274 - 22 0.000517 - 24 0.0062 - 26 0.0031 - 28 0.06 - 29 0.0186 - 30 0.0129 - 31 0.0202 - 32 0.0119 - 33 0.0186 - 40 0.00103 - 41 0.204 - 42 0.014 - 44 0.00155 - 45 0.0264 - 46 0.0114 - 47 0.105 - - 72 6740 35 0 - 0 0.00608 - 1 0.000148 - 2 0.0113 - 3 0.00653 - 4 0.012 - 5 0.000297 - 6 0.000148 - 7 0.0323 - 8 0.00445 - 9 0.000148 - 10 0.000148 - 13 0.241 - 14 0.19 - 15 0.0223 - 16 0.00415 - 17 0.000148 - 19 0.00282 - 21 0.00415 - 22 0.000148 - 24 0.00267 - 26 0.00356 - 28 0.02 - 29 0.00341 - 30 0.00564 - 31 0.00356 - 32 0.0046 - 33 0.00401 - 37 0.000148 - 41 0.368 - 42 0.012 - 43 0.00134 - 44 0.00208 - 45 0.00712 - 46 0.0111 - 47 0.0126 - - 73 321 18 0 - 0 0.00312 - 2 0.0125 - 3 0.00935 - 4 0.00623 - 8 0.00623 - 13 0.424 - 14 0.137 - 15 0.0343 - 16 0.00312 - 28 0.0125 - 30 0.00623 - 31 0.00312 - 33 0.00623 - 41 0.277 - 42 0.0187 - 44 0.00312 - 45 0.00935 - 46 0.028 - - 74 14 5 0 - 7 0.286 - 41 0.143 - 42 0.143 - 45 0.143 - 47 0.286 - - 49 130 21 3 - 0 0.0385 - 2 0.0385 - 7 0.00769 - 8 0.0308 - 13 0.0923 - 14 0.0385 - 15 0.00769 - 19 0.00769 - 21 0.0385 - 24 0.00769 - 28 0.00769 - 29 0.0154 - 30 0.00769 - 31 0.0231 - 33 0.00769 - 41 0.369 - 42 0.0615 - 44 0.00769 - 45 0.0308 - 46 0.0154 - 47 0.146 - - 21 2 2 0 - 30 0.5 - 31 0.5 - - 71 10 6 0 - 8 0.1 - 14 0.1 - 41 0.3 - 42 0.2 - 46 0.1 - 47 0.2 - - 72 7 5 0 - 0 0.429 - 21 0.143 - 33 0.143 - 41 0.143 - 47 0.143 - - 55 50 13 0 - 2 0.02 - 7 0.04 - 13 0.14 - 14 0.08 - 15 0.06 - 21 0.04 - 29 0.1 - 30 0.02 - 31 0.04 - 33 0.12 - 41 0.2 - 42 0.02 - 47 0.12 - - 57 13 9 0 - 8 0.0769 - 13 0.231 - 14 0.154 - 29 0.0769 - 31 0.0769 - 41 0.154 - 42 0.0769 - 46 0.0769 - 47 0.0769 - - 62 7950 30 0 - 0 0.00252 - 2 0.000503 - 3 0.00792 - 4 0.00365 - 7 0.00126 - 8 0.022 - 9 0.00289 - 10 0.00113 - 13 0.172 - 14 0.0776 - 15 0.00843 - 16 0.000126 - 17 0.000252 - 18 0.000126 - 19 0.00327 - 21 0.00654 - 22 0.000881 - 24 0.000755 - 28 0.0289 - 29 0.421 - 30 0.0181 - 31 0.015 - 32 0.0932 - 33 0.0913 - 37 0.000126 - 41 0.0102 - 42 0.00101 - 43 0.000629 - 45 0.00453 - 46 0.00365 - - 64 340 24 0 - 0 0.0324 - 2 0.00882 - 4 0.00588 - 7 0.0382 - 8 0.0324 - 13 0.129 - 14 0.05 - 15 0.00882 - 19 0.0118 - 21 0.0118 - 22 0.00294 - 24 0.0118 - 26 0.00294 - 28 0.0794 - 29 0.282 - 30 0.0176 - 31 0.0147 - 32 0.0471 - 33 0.106 - 41 0.0618 - 42 0.00882 - 44 0.00294 - 45 0.0176 - 47 0.0147 - - 66 31 12 0 - 2 0.0645 - 7 0.0323 - 9 0.0645 - 13 0.226 - 14 0.0323 - 15 0.0645 - 18 0.0323 - 28 0.0323 - 29 0.0323 - 31 0.0968 - 41 0.0968 - 47 0.226 - - 68 2 2 0 - 8 0.5 - 47 0.5 - - 70 36 15 0 - 0 0.0278 - 2 0.0833 - 7 0.167 - 13 0.0278 - 19 0.0278 - 24 0.0278 - 28 0.111 - 29 0.0278 - 30 0.0278 - 31 0.0278 - 32 0.111 - 33 0.139 - 42 0.0278 - 45 0.0556 - 47 0.111 - - 71 1950 30 0 - 0 0.0272 - 2 0.04 - 3 0.0149 - 4 0.000513 - 7 0.0723 - 8 0.0215 - 9 0.00103 - 10 0.00205 - 13 0.169 - 14 0.0687 - 15 0.0272 - 18 0.000513 - 19 0.00974 - 21 0.0338 - 22 0.000513 - 24 0.00615 - 26 0.00308 - 28 0.0595 - 29 0.0185 - 30 0.0128 - 31 0.02 - 32 0.0118 - 33 0.0185 - 40 0.00103 - 41 0.202 - 42 0.0138 - 44 0.00154 - 45 0.0262 - 46 0.0113 - 47 0.105 - - 72 6757 36 0 - 0 0.00607 - 1 0.000148 - 2 0.0112 - 3 0.00651 - 4 0.0121 - 5 0.000296 - 6 0.000148 - 7 0.0323 - 8 0.00474 - 9 0.000148 - 10 0.000148 - 13 0.24 - 14 0.19 - 15 0.0222 - 16 0.00414 - 17 0.000148 - 19 0.00281 - 21 0.00503 - 22 0.000148 - 24 0.00266 - 26 0.00355 - 28 0.02 - 29 0.0034 - 30 0.00562 - 31 0.00355 - 32 0.00459 - 33 0.004 - 36 0.000148 - 37 0.000148 - 41 0.367 - 42 0.012 - 43 0.00133 - 44 0.00237 - 45 0.00755 - 46 0.0111 - 47 0.0126 - - 73 321 18 0 - 0 0.00312 - 2 0.0125 - 3 0.00935 - 4 0.00623 - 8 0.00623 - 13 0.424 - 14 0.137 - 15 0.0343 - 16 0.00312 - 28 0.0125 - 30 0.00623 - 31 0.00312 - 33 0.00623 - 41 0.277 - 42 0.0187 - 44 0.00312 - 45 0.00935 - 46 0.028 - - 74 14 5 0 - 7 0.286 - 41 0.143 - 42 0.143 - 45 0.143 - 47 0.286 - -65 683 22 14 - 0 0.00878 - 2 0.0293 - 7 0.00293 - 8 0.00586 - 9 0.00146 - 12 0.00146 - 13 0.0293 - 14 0.00732 - 15 0.00146 - 21 0.0351 - 28 0.00439 - 31 0.00146 - 34 0.00146 - 35 0.124 - 37 0.113 - 40 0.00586 - 41 0.0527 - 42 0.0366 - 44 0.00293 - 45 0.133 - 46 0.00293 - 47 0.398 - - 2 12 3 0 - 0 0.0833 - 44 0.0833 - 47 0.833 - - 21 11 3 0 - 0 0.0909 - 45 0.0909 - 47 0.818 - - 41 14 6 0 - 8 0.214 - 13 0.429 - 15 0.0714 - 21 0.143 - 31 0.0714 - 37 0.0714 - - 45 28 3 0 - 41 0.143 - 42 0.0357 - 47 0.821 - - 46 2 1 0 - 41 1 - - 47 198 10 1 - 0 0.00505 - 2 0.0202 - 7 0.00505 - 21 0.00505 - 28 0.00505 - 40 0.0101 - 41 0.0455 - 42 0.0606 - 45 0.157 - 47 0.687 - - 45 27 3 0 - 41 0.111 - 42 0.037 - 47 0.852 - - 58 5 3 0 - 13 0.2 - 28 0.2 - 37 0.6 - - 62 7 4 0 - 14 0.143 - 35 0.429 - 37 0.286 - 47 0.143 - - 64 12 4 0 - 0 0.0833 - 42 0.0833 - 45 0.25 - 47 0.583 - - 65 3 3 0 - 2 0.333 - 41 0.333 - 42 0.333 - - 67 184 13 0 - 0 0.00543 - 2 0.0109 - 8 0.00543 - 9 0.00543 - 12 0.00543 - 13 0.0652 - 14 0.0217 - 21 0.0489 - 34 0.00543 - 35 0.429 - 37 0.37 - 41 0.0217 - 45 0.00543 - - 69 1 1 0 - 0 1 - - 71 83 9 0 - 2 0.0843 - 21 0.0723 - 28 0.012 - 41 0.0723 - 42 0.0361 - 44 0.012 - 45 0.301 - 46 0.012 - 47 0.398 - - 72 108 9 0 - 2 0.0556 - 7 0.00926 - 21 0.0556 - 40 0.0185 - 41 0.0833 - 42 0.0648 - 45 0.278 - 46 0.00926 - 47 0.426 - -66 9695 38 20 - 0 0.00743 - 2 0.00918 - 3 0.0032 - 4 0.00196 - 5 0.000103 - 6 0.000103 - 7 0.0099 - 8 0.0141 - 9 0.00124 - 10 0.000103 - 12 0.00258 - 13 0.0709 - 14 0.033 - 15 0.00949 - 16 0.000413 - 18 0.000309 - 19 0.00825 - 21 0.0228 - 22 0.000825 - 24 0.00175 - 26 0.000413 - 28 0.00495 - 29 0.00155 - 30 0.00196 - 31 0.00495 - 32 0.00155 - 33 0.00134 - 34 0.000413 - 35 0.000722 - 37 0.000206 - 40 0.00144 - 41 0.158 - 42 0.0033 - 43 0.000619 - 44 0.000309 - 45 0.108 - 46 0.14 - 47 0.372 - - 0 88 14 2 - 2 0.227 - 3 0.0227 - 4 0.0114 - 7 0.227 - 9 0.0227 - 13 0.114 - 14 0.0227 - 18 0.0114 - 21 0.205 - 31 0.0341 - 35 0.0114 - 41 0.0227 - 42 0.0114 - 47 0.0568 - - 47 34 7 0 - 2 0.235 - 4 0.0294 - 7 0.559 - 13 0.0588 - 21 0.0588 - 35 0.0294 - 41 0.0294 - - 55 54 12 0 - 2 0.222 - 3 0.037 - 7 0.0185 - 9 0.037 - 13 0.148 - 14 0.037 - 18 0.0185 - 21 0.296 - 31 0.0556 - 41 0.0185 - 42 0.0185 - 47 0.0926 - - 2 31 3 0 - 41 0.0323 - 45 0.0323 - 47 0.935 - - 12 26 8 0 - 2 0.308 - 13 0.154 - 15 0.0769 - 21 0.231 - 35 0.0385 - 37 0.0385 - 41 0.0769 - 47 0.0769 - - 21 7 4 0 - 12 0.143 - 19 0.286 - 42 0.143 - 47 0.429 - - 33 4 2 0 - 21 0.75 - 47 0.25 - - 40 9 5 0 - 8 0.111 - 13 0.556 - 24 0.111 - 30 0.111 - 42 0.111 - - 41 1398 28 4 - 0 0.0122 - 2 0.000715 - 3 0.0179 - 4 0.00787 - 5 0.000715 - 6 0.000715 - 7 0.0114 - 8 0.0858 - 9 0.00572 - 10 0.000715 - 12 0.00143 - 13 0.408 - 14 0.192 - 15 0.0451 - 16 0.00286 - 19 0.0258 - 21 0.0672 - 22 0.00501 - 24 0.0114 - 26 0.00215 - 28 0.0315 - 29 0.00858 - 30 0.0107 - 31 0.0222 - 32 0.00858 - 33 0.00787 - 35 0.000715 - 43 0.00429 - - 46 1150 27 0 - 0 0.0139 - 3 0.0104 - 4 0.00957 - 5 0.00087 - 6 0.00087 - 7 0.013 - 8 0.0957 - 9 0.00522 - 10 0.00087 - 12 0.00174 - 13 0.415 - 14 0.17 - 15 0.0435 - 16 0.00348 - 19 0.0304 - 21 0.0661 - 22 0.00435 - 24 0.0139 - 26 0.00261 - 28 0.0322 - 29 0.0087 - 30 0.013 - 31 0.0235 - 32 0.00957 - 33 0.00609 - 35 0.00087 - 43 0.00435 - - 49 7 6 0 - 3 0.143 - 8 0.143 - 13 0.143 - 14 0.143 - 15 0.143 - 29 0.286 - - 57 6 3 0 - 13 0.333 - 14 0.167 - 21 0.5 - - 69 231 17 0 - 0 0.00433 - 2 0.00433 - 3 0.0519 - 7 0.00433 - 8 0.039 - 9 0.00866 - 13 0.385 - 14 0.303 - 15 0.0519 - 19 0.00433 - 21 0.0606 - 22 0.00866 - 28 0.0303 - 31 0.0173 - 32 0.00433 - 33 0.0173 - 43 0.00433 - - 45 1037 7 1 - 2 0.00193 - 34 0.000964 - 41 0.000964 - 42 0.00193 - 44 0.000964 - 46 0.000964 - 47 0.992 - - 69 1 1 0 - 46 1 - - 46 1179 3 0 - 40 0.0119 - 41 0.978 - 46 0.0102 - - 47 2027 21 10 - 2 0.0143 - 7 0.0192 - 9 0.000987 - 13 0.00345 - 14 0.000493 - 15 0.000987 - 18 0.000493 - 21 0.00691 - 28 0.000493 - 29 0.000493 - 31 0.00148 - 32 0.000493 - 34 0.000987 - 35 0.00148 - 37 0.000493 - 41 0.0276 - 42 0.0074 - 44 0.000493 - 45 0.00296 - 46 0.0183 - 47 0.89 - - 0 52 11 0 - 2 0.115 - 7 0.385 - 9 0.0385 - 13 0.0577 - 14 0.0192 - 18 0.0192 - 21 0.154 - 31 0.0577 - 35 0.0192 - 41 0.0385 - 47 0.0962 - - 2 30 2 0 - 45 0.0333 - 47 0.967 - - 12 20 8 0 - 2 0.25 - 13 0.2 - 15 0.1 - 21 0.15 - 35 0.05 - 37 0.05 - 41 0.1 - 47 0.1 - - 45 1033 4 0 - 2 0.000968 - 34 0.000968 - 42 0.00194 - 47 0.996 - - 49 86 6 0 - 2 0.151 - 28 0.0116 - 42 0.0116 - 44 0.0116 - 45 0.0116 - 47 0.802 - - 51 6 2 0 - 42 0.333 - 47 0.667 - - 55 11 3 0 - 2 0.182 - 42 0.364 - 47 0.455 - - 57 83 5 0 - 2 0.012 - 7 0.012 - 42 0.012 - 45 0.012 - 47 0.952 - - 62 456 3 0 - 34 0.00219 - 42 0.00439 - 47 0.993 - - 69 198 10 0 - 7 0.0909 - 21 0.0152 - 29 0.00505 - 32 0.00505 - 35 0.00505 - 41 0.253 - 42 0.00505 - 45 0.0101 - 46 0.187 - 47 0.424 - - 48 31 3 0 - 2 0.0323 - 21 0.129 - 47 0.839 - - 49 98 8 0 - 2 0.163 - 21 0.0204 - 28 0.0102 - 41 0.0714 - 42 0.0102 - 44 0.0102 - 45 0.0102 - 47 0.704 - - 51 14 3 0 - 42 0.143 - 45 0.571 - 47 0.286 - - 55 97 11 4 - 0 0.567 - 2 0.0309 - 8 0.0103 - 12 0.227 - 15 0.0103 - 21 0.0103 - 33 0.0103 - 42 0.0412 - 45 0.0309 - 46 0.0103 - 47 0.0515 - - 41 5 4 0 - 2 0.2 - 15 0.2 - 45 0.4 - 47 0.2 - - 47 5 2 0 - 2 0.2 - 42 0.8 - - 57 1 1 0 - 33 1 - - 69 83 8 0 - 0 0.639 - 2 0.012 - 8 0.012 - 12 0.265 - 21 0.012 - 45 0.012 - 46 0.012 - 47 0.0361 - - 57 99 10 3 - 2 0.0303 - 7 0.0101 - 8 0.0101 - 13 0.0202 - 14 0.0101 - 21 0.0404 - 41 0.0606 - 42 0.0101 - 45 0.0101 - 47 0.798 - - 0 9 3 0 - 21 0.333 - 42 0.111 - 47 0.556 - - 41 8 2 0 - 41 0.625 - 47 0.375 - - 69 77 7 0 - 2 0.026 - 7 0.013 - 13 0.013 - 14 0.013 - 21 0.013 - 45 0.013 - 47 0.909 - - 58 6 5 0 - 8 0.167 - 13 0.333 - 14 0.167 - 15 0.167 - 19 0.167 - - 62 1478 6 2 - 2 0.00271 - 34 0.000677 - 41 0.000677 - 42 0.00135 - 45 0.688 - 47 0.306 - - 41 1357 6 0 - 2 0.00295 - 34 0.000737 - 41 0.000737 - 42 0.00147 - 45 0.739 - 47 0.255 - - 69 111 2 0 - 45 0.036 - 47 0.964 - - 64 11 5 0 - 2 0.0909 - 13 0.0909 - 41 0.0909 - 45 0.0909 - 47 0.636 - - 65 9 3 0 - 42 0.111 - 45 0.667 - 47 0.222 - - 69 2030 25 4 - 2 0.000493 - 3 0.00197 - 4 0.00345 - 7 0.00985 - 8 0.0064 - 13 0.0404 - 14 0.0227 - 15 0.0113 - 18 0.000493 - 19 0.0202 - 21 0.036 - 22 0.000493 - 26 0.000493 - 28 0.000985 - 29 0.000985 - 30 0.00148 - 31 0.00542 - 32 0.000985 - 33 0.000493 - 35 0.000493 - 41 0.146 - 42 0.000493 - 45 0.00148 - 46 0.645 - 47 0.0414 - - 41 2 2 0 - 19 0.5 - 47 0.5 - - 47 1970 23 0 - 3 0.00203 - 4 0.00355 - 7 0.00964 - 8 0.0066 - 13 0.0416 - 14 0.0228 - 15 0.0117 - 18 0.000508 - 19 0.0203 - 21 0.0315 - 22 0.000508 - 26 0.000508 - 28 0.00102 - 29 0.000508 - 30 0.00152 - 31 0.00558 - 32 0.00102 - 33 0.000508 - 35 0.000508 - 41 0.151 - 45 0.00152 - 46 0.665 - 47 0.0208 - - 58 2 1 0 - 21 1 - - 69 54 6 0 - 2 0.0185 - 7 0.0185 - 21 0.167 - 29 0.0185 - 42 0.0185 - 47 0.759 - -67 759 24 13 - 0 0.00527 - 2 0.0527 - 4 0.00132 - 7 0.00395 - 8 0.00264 - 9 0.00264 - 12 0.00264 - 13 0.0395 - 14 0.0145 - 15 0.00922 - 19 0.00922 - 21 0.0329 - 31 0.00132 - 33 0.00132 - 34 0.00264 - 35 0.215 - 37 0.182 - 40 0.00395 - 41 0.0461 - 42 0.0237 - 44 0.00527 - 45 0.0777 - 46 0.00132 - 47 0.264 - - 0 167 13 0 - 0 0.00599 - 2 0.0778 - 8 0.00599 - 13 0.0359 - 14 0.012 - 21 0.0359 - 35 0.15 - 37 0.228 - 40 0.00599 - 41 0.0659 - 42 0.0359 - 45 0.0958 - 47 0.246 - - 2 15 2 0 - 46 0.0667 - 47 0.933 - - 12 94 11 0 - 2 0.117 - 9 0.0106 - 13 0.0319 - 14 0.0106 - 21 0.0319 - 35 0.128 - 37 0.245 - 41 0.106 - 42 0.0106 - 45 0.0532 - 47 0.255 - - 14 2 1 0 - 45 1 - - 41 17 9 1 - 4 0.0588 - 7 0.0588 - 13 0.235 - 14 0.118 - 15 0.118 - 19 0.0588 - 21 0.235 - 31 0.0588 - 33 0.0588 - - 12 7 5 0 - 4 0.143 - 13 0.286 - 14 0.286 - 19 0.143 - 31 0.143 - - 45 6 5 0 - 2 0.167 - 7 0.167 - 42 0.167 - 44 0.333 - 47 0.167 - - 46 1 1 0 - 40 1 - - 47 342 18 10 - 0 0.00585 - 2 0.038 - 7 0.00292 - 8 0.00292 - 9 0.00292 - 12 0.00292 - 13 0.0351 - 14 0.0117 - 21 0.0263 - 34 0.00292 - 35 0.237 - 37 0.202 - 40 0.00292 - 41 0.0263 - 42 0.0263 - 44 0.00585 - 45 0.076 - 47 0.292 - - 0 148 13 0 - 0 0.00676 - 2 0.0338 - 8 0.00676 - 13 0.0405 - 14 0.00676 - 21 0.0338 - 35 0.169 - 37 0.257 - 40 0.00676 - 41 0.027 - 42 0.0405 - 45 0.0946 - 47 0.277 - - 2 14 1 0 - 47 1 - - 12 82 11 0 - 2 0.0854 - 9 0.0122 - 13 0.0366 - 14 0.0122 - 21 0.0366 - 35 0.146 - 37 0.28 - 41 0.0366 - 42 0.0122 - 45 0.0488 - 47 0.293 - - 14 2 1 0 - 45 1 - - 45 5 4 0 - 7 0.2 - 42 0.2 - 44 0.4 - 47 0.2 - - 49 5 2 0 - 14 0.2 - 47 0.8 - - 55 7 6 0 - 0 0.143 - 2 0.143 - 12 0.143 - 21 0.143 - 35 0.143 - 45 0.286 - - 57 6 2 0 - 37 0.167 - 47 0.833 - - 64 6 3 0 - 41 0.333 - 45 0.167 - 47 0.5 - - 69 56 7 0 - 13 0.0536 - 14 0.0179 - 34 0.0179 - 35 0.768 - 37 0.0714 - 45 0.0357 - 47 0.0357 - - 49 5 2 0 - 14 0.2 - 47 0.8 - - 55 10 7 0 - 0 0.1 - 2 0.1 - 12 0.1 - 15 0.3 - 21 0.1 - 35 0.1 - 45 0.2 - - 57 6 2 0 - 37 0.167 - 47 0.833 - - 64 8 4 0 - 2 0.125 - 41 0.25 - 45 0.25 - 47 0.375 - - 69 67 10 0 - 13 0.0597 - 14 0.0149 - 15 0.0299 - 19 0.0896 - 21 0.0299 - 34 0.0149 - 35 0.642 - 37 0.0597 - 45 0.0299 - 47 0.0299 - -68 1958 35 27 - 0 0.0827 - 1 0.00102 - 2 0.111 - 3 0.0133 - 4 0.0511 - 7 0.072 - 8 0.116 - 9 0.00358 - 13 0.15 - 14 0.0572 - 15 0.0465 - 16 0.000511 - 18 0.00715 - 19 0.00511 - 20 0.00409 - 21 0.0235 - 22 0.00102 - 24 0.00306 - 26 0.00562 - 27 0.000511 - 28 0.0225 - 29 0.00562 - 30 0.0163 - 31 0.0235 - 32 0.00358 - 33 0.0097 - 37 0.00153 - 40 0.00153 - 41 0.0914 - 42 0.0184 - 43 0.00153 - 44 0.00102 - 45 0.00919 - 46 0.00613 - 47 0.0337 - - 2 466 18 9 - 0 0.00429 - 3 0.0343 - 7 0.0172 - 8 0.193 - 9 0.00858 - 13 0.369 - 14 0.0687 - 15 0.122 - 16 0.00215 - 19 0.00215 - 21 0.0343 - 22 0.00215 - 30 0.00429 - 31 0.00429 - 37 0.00644 - 41 0.109 - 43 0.00644 - 46 0.0107 - - 7 1 1 0 - 37 1 - - 8 110 4 0 - 8 0.109 - 13 0.682 - 14 0.0182 - 15 0.191 - - 13 55 4 0 - 8 0.545 - 13 0.345 - 14 0.0727 - 41 0.0364 - - 14 10 2 0 - 8 0.2 - 13 0.8 - - 15 19 3 0 - 8 0.474 - 14 0.0526 - 15 0.474 - - 30 3 1 0 - 8 1 - - 47 253 17 0 - 3 0.0593 - 7 0.0316 - 8 0.119 - 9 0.0158 - 13 0.265 - 14 0.0988 - 15 0.107 - 16 0.00395 - 19 0.00395 - 21 0.0593 - 22 0.00395 - 30 0.00791 - 31 0.00791 - 37 0.00791 - 41 0.182 - 43 0.0119 - 46 0.0158 - - 48 3 2 0 - 0 0.333 - 8 0.667 - - 57 1 1 0 - 0 1 - - 4 9 5 0 - 0 0.222 - 7 0.444 - 13 0.111 - 41 0.111 - 45 0.111 - - 7 4 4 0 - 2 0.25 - 8 0.25 - 21 0.25 - 41 0.25 - - 8 194 20 4 - 0 0.00515 - 2 0.572 - 3 0.0103 - 4 0.0722 - 7 0.0619 - 8 0.067 - 13 0.0155 - 15 0.0155 - 18 0.0206 - 20 0.00515 - 21 0.00515 - 26 0.0103 - 28 0.0206 - 29 0.00515 - 30 0.0155 - 31 0.00515 - 33 0.0155 - 41 0.0464 - 42 0.0103 - 47 0.0206 - - 2 58 17 0 - 0 0.0172 - 2 0.0172 - 3 0.0345 - 4 0.172 - 7 0.121 - 8 0.155 - 13 0.0517 - 15 0.0345 - 18 0.0345 - 21 0.0172 - 28 0.069 - 29 0.0172 - 30 0.0345 - 31 0.0172 - 33 0.0345 - 41 0.103 - 47 0.069 - - 13 3 3 0 - 8 0.333 - 18 0.333 - 26 0.333 - - 41 18 9 0 - 4 0.222 - 7 0.222 - 8 0.0556 - 18 0.0556 - 26 0.0556 - 30 0.0556 - 33 0.0556 - 41 0.167 - 42 0.111 - - 47 111 4 0 - 2 0.973 - 7 0.00901 - 8 0.00901 - 15 0.00901 - - 13 182 19 3 - 0 0.00549 - 2 0.308 - 3 0.00549 - 4 0.11 - 7 0.137 - 8 0.132 - 9 0.00549 - 13 0.022 - 15 0.022 - 18 0.0165 - 20 0.011 - 26 0.011 - 28 0.0165 - 30 0.022 - 31 0.00549 - 32 0.011 - 33 0.011 - 41 0.132 - 47 0.0165 - - 2 103 19 0 - 0 0.00971 - 2 0.00971 - 3 0.00971 - 4 0.136 - 7 0.204 - 8 0.214 - 9 0.00971 - 13 0.0291 - 15 0.0194 - 18 0.0194 - 20 0.00971 - 26 0.0194 - 28 0.0291 - 30 0.0291 - 31 0.00971 - 32 0.00971 - 33 0.00971 - 41 0.204 - 47 0.0194 - - 41 17 10 0 - 4 0.294 - 7 0.176 - 8 0.0588 - 15 0.0588 - 18 0.0588 - 30 0.0588 - 32 0.0588 - 33 0.0588 - 41 0.118 - 47 0.0588 - - 47 51 2 0 - 2 0.98 - 13 0.0196 - - 14 21 6 2 - 2 0.476 - 4 0.143 - 8 0.0952 - 13 0.0952 - 33 0.0476 - 41 0.143 - - 2 7 4 0 - 4 0.429 - 8 0.143 - 33 0.143 - 41 0.286 - - 47 13 3 0 - 2 0.769 - 8 0.0769 - 13 0.154 - - 15 60 9 2 - 2 0.317 - 4 0.15 - 7 0.117 - 8 0.15 - 13 0.0167 - 15 0.133 - 20 0.0167 - 41 0.0333 - 47 0.0667 - - 2 31 7 0 - 4 0.226 - 7 0.194 - 8 0.258 - 13 0.0323 - 15 0.129 - 20 0.0323 - 47 0.129 - - 47 18 2 0 - 2 0.833 - 15 0.167 - - 21 16 5 1 - 0 0.188 - 2 0.5 - 13 0.125 - 21 0.125 - 42 0.0625 - - 48 3 1 0 - 0 1 - - 30 5 3 0 - 2 0.6 - 7 0.2 - 13 0.2 - - 41 124 16 4 - 3 0.0403 - 4 0.00806 - 8 0.29 - 9 0.00806 - 13 0.387 - 14 0.0887 - 15 0.0242 - 19 0.00806 - 21 0.0403 - 22 0.00806 - 26 0.00806 - 29 0.00806 - 30 0.0323 - 31 0.0161 - 33 0.00806 - 40 0.0242 - - 2 50 12 0 - 3 0.08 - 8 0.16 - 13 0.36 - 14 0.12 - 15 0.02 - 19 0.02 - 21 0.1 - 22 0.02 - 29 0.02 - 30 0.04 - 31 0.04 - 33 0.02 - - 13 22 3 0 - 4 0.0455 - 8 0.591 - 13 0.364 - - 46 5 3 0 - 8 0.2 - 13 0.2 - 40 0.6 - - 48 9 4 0 - 3 0.111 - 8 0.667 - 9 0.111 - 30 0.111 - - 42 11 6 0 - 4 0.0909 - 7 0.0909 - 8 0.273 - 13 0.364 - 15 0.0909 - 47 0.0909 - - 45 10 7 0 - 0 0.1 - 2 0.1 - 7 0.2 - 19 0.1 - 24 0.1 - 42 0.1 - 46 0.3 - - 46 9 4 0 - 8 0.222 - 27 0.111 - 32 0.111 - 41 0.556 - - 47 494 29 16 - 0 0.164 - 1 0.00202 - 2 0.00405 - 3 0.00405 - 4 0.0911 - 7 0.132 - 8 0.0891 - 9 0.00202 - 13 0.0587 - 14 0.0688 - 15 0.0202 - 18 0.0142 - 19 0.0081 - 20 0.0081 - 21 0.0121 - 24 0.00607 - 26 0.0101 - 28 0.0445 - 29 0.0101 - 30 0.0263 - 31 0.0425 - 32 0.00607 - 33 0.0182 - 41 0.0547 - 42 0.0243 - 44 0.00202 - 45 0.0081 - 46 0.00202 - 47 0.0668 - - 4 8 4 0 - 0 0.25 - 7 0.5 - 41 0.125 - 45 0.125 - - 8 71 19 0 - 0 0.0141 - 2 0.0141 - 3 0.0282 - 4 0.197 - 7 0.155 - 8 0.155 - 13 0.0423 - 15 0.0282 - 18 0.0563 - 20 0.0141 - 21 0.0141 - 26 0.0282 - 28 0.0563 - 29 0.0141 - 30 0.0423 - 31 0.0141 - 33 0.0423 - 42 0.0282 - 47 0.0563 - - 13 93 17 0 - 0 0.0108 - 2 0.0108 - 4 0.172 - 7 0.269 - 8 0.226 - 9 0.0108 - 15 0.043 - 18 0.0323 - 20 0.0215 - 26 0.0215 - 28 0.0323 - 30 0.043 - 31 0.0108 - 32 0.0215 - 33 0.0215 - 41 0.0215 - 47 0.0323 - - 14 4 2 0 - 4 0.75 - 33 0.25 - - 15 30 5 0 - 4 0.3 - 7 0.233 - 8 0.3 - 20 0.0333 - 47 0.133 - - 21 5 3 0 - 0 0.6 - 13 0.2 - 42 0.2 - - 45 6 5 0 - 0 0.167 - 7 0.333 - 19 0.167 - 24 0.167 - 42 0.167 - - 48 60 12 0 - 0 0.533 - 1 0.0167 - 4 0.0333 - 7 0.0333 - 13 0.05 - 14 0.0667 - 28 0.0333 - 29 0.0167 - 41 0.0833 - 42 0.0333 - 45 0.0167 - 47 0.0833 - - 49 34 12 0 - 0 0.206 - 7 0.0882 - 13 0.0882 - 14 0.147 - 21 0.0294 - 28 0.118 - 29 0.0294 - 30 0.0294 - 31 0.0294 - 41 0.147 - 42 0.0294 - 47 0.0588 - - 50 2 1 0 - 41 1 - - 55 61 17 0 - 0 0.246 - 4 0.0164 - 7 0.148 - 13 0.0328 - 14 0.131 - 19 0.0328 - 21 0.0328 - 26 0.0164 - 28 0.0656 - 30 0.0328 - 31 0.0328 - 32 0.0164 - 33 0.0328 - 41 0.0656 - 42 0.0492 - 44 0.0164 - 47 0.0328 - - 57 68 17 0 - 0 0.147 - 8 0.0147 - 13 0.191 - 14 0.147 - 15 0.0588 - 19 0.0147 - 21 0.0147 - 24 0.0147 - 28 0.0294 - 29 0.0294 - 30 0.0441 - 31 0.162 - 33 0.0147 - 41 0.0441 - 42 0.0147 - 45 0.0147 - 47 0.0441 - - 62 13 6 0 - 7 0.0769 - 14 0.0769 - 31 0.154 - 41 0.0769 - 46 0.0769 - 47 0.538 - - 64 10 8 0 - 0 0.1 - 8 0.1 - 13 0.2 - 24 0.1 - 28 0.1 - 31 0.2 - 42 0.1 - 47 0.1 - - 65 1 1 0 - 45 1 - - 69 17 5 0 - 0 0.353 - 13 0.0588 - 14 0.353 - 21 0.0588 - 41 0.176 - - 48 82 14 3 - 0 0.39 - 1 0.0122 - 2 0.0366 - 4 0.0488 - 7 0.0244 - 13 0.0366 - 14 0.0488 - 21 0.0488 - 28 0.0244 - 29 0.0122 - 41 0.171 - 42 0.0366 - 45 0.0488 - 47 0.061 - - 41 24 7 0 - 0 0.333 - 14 0.0417 - 21 0.0833 - 28 0.0417 - 41 0.333 - 45 0.0417 - 47 0.125 - - 46 2 1 0 - 45 1 - - 47 2 2 0 - 14 0.5 - 42 0.5 - - 49 40 14 1 - 0 0.175 - 2 0.025 - 4 0.05 - 7 0.075 - 13 0.075 - 14 0.125 - 21 0.05 - 28 0.1 - 29 0.025 - 30 0.025 - 31 0.025 - 41 0.175 - 42 0.025 - 47 0.05 - - 41 7 4 0 - 13 0.286 - 21 0.143 - 29 0.143 - 41 0.429 - - 50 4 1 0 - 41 1 - - 51 2 2 0 - 28 0.5 - 42 0.5 - - 52 1 1 0 - 45 1 - - 55 85 19 3 - 0 0.176 - 4 0.0118 - 7 0.106 - 13 0.0235 - 14 0.106 - 19 0.0235 - 21 0.0471 - 26 0.0118 - 28 0.0471 - 30 0.0235 - 31 0.0235 - 32 0.0118 - 33 0.0235 - 41 0.176 - 42 0.118 - 44 0.0118 - 45 0.0118 - 46 0.0235 - 47 0.0235 - - 2 49 17 0 - 0 0.163 - 4 0.0204 - 7 0.143 - 13 0.0408 - 14 0.163 - 19 0.0204 - 21 0.0408 - 26 0.0204 - 28 0.0408 - 30 0.0408 - 31 0.0408 - 32 0.0204 - 33 0.0204 - 41 0.143 - 42 0.0204 - 45 0.0204 - 47 0.0408 - - 41 20 8 0 - 0 0.3 - 7 0.1 - 19 0.05 - 28 0.1 - 33 0.05 - 41 0.25 - 42 0.1 - 44 0.05 - - 47 15 5 0 - 14 0.0667 - 21 0.133 - 41 0.2 - 42 0.467 - 46 0.133 - - 57 75 19 2 - 0 0.133 - 2 0.0133 - 7 0.0133 - 8 0.0133 - 13 0.173 - 14 0.133 - 15 0.0533 - 19 0.0133 - 21 0.04 - 24 0.0133 - 28 0.0267 - 29 0.0267 - 30 0.04 - 31 0.147 - 33 0.0133 - 41 0.08 - 42 0.0133 - 45 0.0133 - 47 0.04 - - 2 53 15 0 - 0 0.113 - 2 0.0189 - 7 0.0189 - 8 0.0189 - 13 0.151 - 14 0.189 - 15 0.0566 - 21 0.0566 - 24 0.0189 - 28 0.0189 - 29 0.0377 - 30 0.0189 - 31 0.151 - 41 0.113 - 47 0.0189 - - 41 19 11 0 - 0 0.211 - 13 0.158 - 15 0.0526 - 19 0.0526 - 28 0.0526 - 30 0.105 - 31 0.158 - 33 0.0526 - 42 0.0526 - 45 0.0526 - 47 0.0526 - - 62 19 9 2 - 7 0.0526 - 14 0.0526 - 21 0.0526 - 31 0.105 - 41 0.158 - 42 0.105 - 45 0.0526 - 46 0.0526 - 47 0.368 - - 2 7 5 0 - 7 0.143 - 14 0.143 - 31 0.286 - 41 0.286 - 46 0.143 - - 42 5 1 0 - 47 1 - - 64 11 8 0 - 0 0.0909 - 8 0.0909 - 13 0.182 - 24 0.0909 - 28 0.0909 - 31 0.182 - 42 0.182 - 47 0.0909 - - 65 3 1 0 - 45 1 - - 67 2 1 0 - 45 1 - - 69 19 5 0 - 0 0.316 - 13 0.0526 - 14 0.316 - 21 0.0526 - 41 0.263 - - 71 2 2 0 - 31 0.5 - 47 0.5 - -69 294981 43 37 - 0 0.105 - 1 0.00265 - 2 0.0256 - 3 0.00552 - 4 0.00905 - 5 0.00567 - 6 9.49e-05 - 7 0.0229 - 8 0.00961 - 9 0.000532 - 10 0.000431 - 12 0.0558 - 13 0.14 - 14 0.108 - 15 0.0833 - 16 0.00388 - 18 0.000919 - 19 0.0976 - 20 9.49e-05 - 21 0.0678 - 22 0.000427 - 23 0.000122 - 24 0.00078 - 25 2.37e-05 - 26 0.0912 - 27 1.36e-05 - 28 0.00706 - 29 0.00917 - 30 0.00623 - 31 0.0111 - 32 0.00412 - 33 0.00631 - 34 0.0243 - 35 0.0121 - 37 0.000692 - 40 7.12e-05 - 41 0.0548 - 42 0.00322 - 43 0.00148 - 44 0.000363 - 45 0.00512 - 46 0.0116 - 47 0.00527 - - 0 33828 41 0 - 0 0.0459 - 1 0.000443 - 2 0.0164 - 3 0.00573 - 4 0.0196 - 5 0.0219 - 6 0.000118 - 7 0.00198 - 8 0.00399 - 9 0.000236 - 10 0.000709 - 12 0.0834 - 13 0.183 - 14 0.139 - 15 0.0942 - 16 0.00562 - 18 0.0013 - 19 0.154 - 20 8.87e-05 - 21 0.0574 - 22 0.000118 - 23 2.96e-05 - 24 0.000177 - 26 0.0434 - 28 0.00121 - 29 0.00127 - 30 0.00139 - 31 0.0018 - 32 0.00106 - 33 0.000709 - 34 0.0345 - 35 0.0178 - 37 5.91e-05 - 40 2.96e-05 - 41 0.0478 - 42 0.00328 - 43 0.00207 - 44 2.96e-05 - 45 0.00532 - 46 0.00316 - 47 0.000207 - - 1 555 24 0 - 0 0.342 - 2 0.018 - 4 0.0036 - 7 0.245 - 8 0.0018 - 13 0.0613 - 14 0.0721 - 15 0.00541 - 19 0.00541 - 20 0.0036 - 21 0.101 - 24 0.00541 - 26 0.0198 - 28 0.0126 - 29 0.0036 - 31 0.0036 - 32 0.0018 - 33 0.0036 - 41 0.0378 - 42 0.0036 - 43 0.0036 - 45 0.0144 - 46 0.0036 - 47 0.027 - - 2 411 19 14 - 0 0.00243 - 7 0.00487 - 8 0.00973 - 12 0.017 - 13 0.00973 - 14 0.0146 - 15 0.00487 - 28 0.338 - 29 0.0779 - 30 0.151 - 31 0.173 - 32 0.0779 - 33 0.09 - 34 0.00243 - 41 0.0146 - 42 0.00243 - 43 0.00243 - 44 0.00243 - 46 0.00487 - - 0 2 2 0 - 8 0.5 - 12 0.5 - - 8 2 1 0 - 8 1 - - 12 3 1 0 - 12 1 - - 13 2 1 0 - 13 1 - - 21 2 2 0 - 28 0.5 - 46 0.5 - - 28 142 4 0 - 28 0.972 - 41 0.0141 - 42 0.00704 - 43 0.00704 - - 29 33 2 0 - 29 0.97 - 41 0.0303 - - 30 64 3 0 - 7 0.0156 - 8 0.0156 - 30 0.969 - - 31 73 3 0 - 31 0.973 - 41 0.0137 - 44 0.0137 - - 32 34 3 0 - 0 0.0294 - 32 0.941 - 41 0.0294 - - 33 37 1 0 - 33 1 - - 45 1 1 0 - 46 1 - - 47 1 1 0 - 15 1 - - 69 13 6 0 - 7 0.0769 - 12 0.231 - 13 0.154 - 14 0.385 - 15 0.0769 - 34 0.0769 - - 4 9 6 0 - 0 0.111 - 7 0.111 - 13 0.111 - 19 0.111 - 26 0.222 - 41 0.333 - - 7 23 6 0 - 0 0.522 - 8 0.0435 - 13 0.087 - 14 0.0435 - 21 0.261 - 41 0.0435 - - 8 152 22 1 - 0 0.283 - 1 0.0132 - 2 0.0329 - 4 0.0197 - 7 0.0658 - 8 0.00658 - 13 0.0329 - 14 0.0724 - 15 0.0132 - 16 0.00658 - 19 0.00658 - 21 0.25 - 22 0.0197 - 23 0.00658 - 26 0.0526 - 28 0.0132 - 29 0.0132 - 32 0.00658 - 41 0.0395 - 45 0.0263 - 46 0.00658 - 47 0.0132 - - 2 3 2 0 - 4 0.667 - 22 0.333 - - 12 9669 37 0 - 0 0.000207 - 2 0.0233 - 3 0.00776 - 4 0.0185 - 5 0.00755 - 6 0.000207 - 7 0.00114 - 8 0.00259 - 9 0.00031 - 10 0.000207 - 12 0.000103 - 13 0.242 - 14 0.173 - 15 0.106 - 16 0.00641 - 18 0.00103 - 19 0.222 - 21 0.0332 - 22 0.00031 - 23 0.000103 - 24 0.000103 - 28 0.00124 - 29 0.00124 - 30 0.000931 - 31 0.00238 - 32 0.00207 - 33 0.00176 - 34 0.0602 - 35 0.0146 - 40 0.000103 - 41 0.0506 - 42 0.00434 - 43 0.00321 - 44 0.000103 - 45 0.00858 - 46 0.0031 - 47 0.000103 - - 13 318 31 3 - 0 0.0252 - 1 0.00943 - 2 0.0629 - 3 0.066 - 4 0.0377 - 7 0.145 - 8 0.0252 - 10 0.0126 - 12 0.00314 - 13 0.164 - 14 0.0283 - 15 0.0377 - 16 0.00943 - 18 0.00314 - 19 0.00314 - 21 0.066 - 24 0.00629 - 26 0.151 - 28 0.0252 - 29 0.0189 - 30 0.00943 - 31 0.0157 - 32 0.00629 - 34 0.00314 - 37 0.00314 - 41 0.0346 - 42 0.00314 - 43 0.00314 - 45 0.00943 - 46 0.00314 - 47 0.00943 - - 2 2 2 0 - 7 0.5 - 31 0.5 - - 28 3 3 0 - 7 0.333 - 12 0.333 - 45 0.333 - - 69 12 6 0 - 2 0.0833 - 3 0.0833 - 13 0.583 - 15 0.0833 - 18 0.0833 - 41 0.0833 - - 14 122 21 0 - 0 0.0656 - 2 0.123 - 3 0.0328 - 4 0.0082 - 7 0.041 - 8 0.0246 - 13 0.262 - 14 0.0164 - 15 0.254 - 18 0.0082 - 19 0.0164 - 21 0.0082 - 30 0.0082 - 34 0.0082 - 35 0.0164 - 41 0.0574 - 42 0.0082 - 43 0.0082 - 45 0.0164 - 46 0.0082 - 47 0.0082 - - 15 37 10 0 - 0 0.108 - 2 0.027 - 7 0.0541 - 15 0.297 - 18 0.027 - 26 0.0541 - 33 0.027 - 42 0.027 - 45 0.162 - 47 0.216 - - 18 30 6 0 - 4 0.1 - 5 0.367 - 7 0.0667 - 13 0.0667 - 19 0.367 - 34 0.0333 - - 21 80 22 8 - 0 0.1 - 1 0.0125 - 2 0.0875 - 7 0.112 - 8 0.025 - 10 0.0125 - 12 0.112 - 13 0.15 - 14 0.0625 - 16 0.0125 - 19 0.0875 - 21 0.0375 - 26 0.0375 - 28 0.0125 - 29 0.0125 - 31 0.0125 - 32 0.0125 - 35 0.0125 - 41 0.05 - 42 0.0125 - 45 0.0125 - 47 0.0125 - - 0 4 2 0 - 12 0.25 - 19 0.75 - - 26 4 3 0 - 2 0.25 - 13 0.5 - 31 0.25 - - 28 9 6 0 - 2 0.444 - 7 0.111 - 12 0.111 - 13 0.111 - 16 0.111 - 42 0.111 - - 30 12 7 0 - 0 0.0833 - 7 0.25 - 13 0.25 - 19 0.0833 - 26 0.0833 - 32 0.0833 - 41 0.167 - - 31 10 5 0 - 0 0.1 - 7 0.1 - 14 0.5 - 41 0.2 - 47 0.1 - - 47 15 10 0 - 0 0.267 - 1 0.0667 - 2 0.0667 - 7 0.0667 - 10 0.0667 - 13 0.0667 - 21 0.133 - 26 0.133 - 28 0.0667 - 29 0.0667 - - 49 7 6 0 - 0 0.143 - 7 0.143 - 8 0.143 - 13 0.286 - 19 0.143 - 45 0.143 - - 69 13 6 0 - 8 0.0769 - 12 0.538 - 13 0.0769 - 19 0.154 - 21 0.0769 - 35 0.0769 - - 22 3 1 0 - 0 1 - - 26 13048 39 0 - 0 0.0513 - 1 0.00107 - 2 0.0104 - 3 0.018 - 4 0.00107 - 5 7.66e-05 - 6 0.000153 - 7 0.00613 - 8 0.084 - 9 0.00429 - 10 0.00046 - 12 0.00245 - 13 0.2 - 14 0.114 - 15 0.0403 - 16 0.00215 - 18 0.000153 - 19 0.0154 - 21 0.0327 - 22 0.000996 - 23 0.000153 - 24 0.00452 - 26 7.66e-05 - 28 0.0401 - 29 0.073 - 30 0.0567 - 31 0.105 - 32 0.0336 - 33 0.0583 - 34 0.000307 - 35 0.00115 - 37 0.00452 - 41 0.0174 - 42 0.00268 - 43 0.00115 - 44 0.000383 - 45 0.00261 - 46 0.0049 - 47 0.00897 - - 28 21028 36 3 - 0 0.00471 - 1 4.76e-05 - 2 0.0342 - 3 4.76e-05 - 4 0.000856 - 7 0.00185 - 8 0.00019 - 10 0.00019 - 12 0.238 - 13 0.00623 - 14 0.00923 - 15 0.00385 - 16 4.76e-05 - 18 0.000143 - 19 0.00956 - 21 0.117 - 22 0.00105 - 23 9.51e-05 - 26 0.538 - 27 9.51e-05 - 28 0.00518 - 29 0.00271 - 30 0.000476 - 31 0.000618 - 32 0.000666 - 33 0.000808 - 34 0.00019 - 35 0.000428 - 40 0.000333 - 41 0.00704 - 42 0.00195 - 43 0.000333 - 44 0.000666 - 45 0.00818 - 46 0.000238 - 47 0.0049 - - 2 139 9 0 - 2 0.0144 - 12 0.137 - 13 0.00719 - 14 0.0144 - 15 0.00719 - 21 0.0719 - 26 0.669 - 41 0.0647 - 45 0.0144 - - 41 17 6 0 - 0 0.0588 - 12 0.294 - 21 0.0588 - 26 0.353 - 33 0.0588 - 41 0.176 - - 46 2 1 0 - 45 1 - - 29 21706 36 1 - 0 0.00438 - 1 0.00101 - 2 0.0333 - 3 0.00604 - 4 0.00392 - 7 0.00143 - 8 0.00207 - 9 0.000184 - 10 9.21e-05 - 12 0.000276 - 13 0.196 - 14 0.136 - 15 0.23 - 16 0.00792 - 18 0.0018 - 19 0.133 - 21 0.0658 - 22 0.000322 - 23 4.61e-05 - 26 0.000138 - 28 9.21e-05 - 29 0.000322 - 30 0.000461 - 31 0.000921 - 32 4.61e-05 - 33 0.000138 - 34 0.0313 - 35 0.0208 - 37 9.21e-05 - 41 0.0885 - 42 0.0024 - 43 0.00147 - 44 9.21e-05 - 45 0.00235 - 46 0.0266 - 47 0.000645 - - 2 32 10 0 - 2 0.0312 - 13 0.156 - 14 0.0625 - 15 0.156 - 19 0.188 - 21 0.188 - 22 0.0312 - 35 0.125 - 41 0.0312 - 45 0.0312 - - 30 11273 33 1 - 0 0.265 - 2 0.0353 - 3 0.00284 - 4 0.00213 - 7 0.227 - 8 0.00319 - 9 8.87e-05 - 10 0.000355 - 13 0.0685 - 14 0.0679 - 15 0.0108 - 16 0.000621 - 18 0.00115 - 19 0.00337 - 20 0.00071 - 21 0.0726 - 22 0.000355 - 24 0.00364 - 26 0.0114 - 28 0.0184 - 29 0.0169 - 30 0.00337 - 31 0.00523 - 32 0.00417 - 33 0.0047 - 37 0.0016 - 41 0.126 - 42 0.00523 - 43 0.000266 - 44 0.000532 - 45 0.00772 - 46 0.00408 - 47 0.0245 - - 2 62 14 0 - 0 0.0968 - 2 0.0161 - 3 0.0161 - 7 0.355 - 13 0.0323 - 14 0.0968 - 15 0.0161 - 19 0.0323 - 21 0.0806 - 22 0.0161 - 26 0.113 - 28 0.0323 - 33 0.0161 - 41 0.0806 - - 31 15631 38 1 - 0 0.586 - 1 0.0204 - 2 0.0168 - 3 0.00448 - 4 0.00435 - 6 6.4e-05 - 7 0.0117 - 8 0.00032 - 9 0.000128 - 10 0.000256 - 12 0.00032 - 13 0.0843 - 14 0.0769 - 15 0.00409 - 16 0.000384 - 18 0.000256 - 19 0.00186 - 21 0.11 - 22 0.000768 - 23 0.00109 - 26 0.000128 - 28 0.00211 - 29 0.00211 - 30 0.000768 - 31 0.00102 - 32 0.000768 - 33 0.00122 - 34 0.000256 - 35 0.000128 - 37 0.00109 - 40 6.4e-05 - 41 0.047 - 42 0.00237 - 43 0.000448 - 44 0.00147 - 45 0.00333 - 46 0.00224 - 47 0.0094 - - 2 71 8 0 - 0 0.69 - 1 0.0563 - 13 0.0141 - 14 0.0423 - 19 0.0141 - 21 0.0986 - 41 0.0704 - 45 0.0141 - - 32 5414 31 1 - 2 0.0296 - 3 0.00166 - 4 0.0133 - 7 0.00129 - 8 0.00332 - 9 0.000369 - 10 0.00222 - 12 0.000185 - 13 0.0334 - 14 0.401 - 15 0.0253 - 16 0.0105 - 18 0.000739 - 19 0.248 - 21 0.0876 - 22 0.000185 - 23 0.000185 - 29 0.000185 - 30 0.000369 - 31 0.00185 - 32 0.000369 - 33 0.000369 - 34 0.0567 - 35 0.0412 - 37 0.000185 - 41 0.0292 - 42 0.00332 - 43 0.00259 - 45 0.00314 - 46 0.00148 - 47 0.000185 - - 2 32 7 0 - 2 0.0312 - 14 0.406 - 19 0.219 - 21 0.0312 - 34 0.156 - 35 0.0625 - 41 0.0938 - - 33 9604 31 2 - 2 0.0311 - 3 0.00281 - 4 0.0167 - 5 0.000625 - 6 0.000416 - 7 0.00198 - 8 0.00167 - 9 0.000104 - 10 0.000104 - 13 0.207 - 14 0.0117 - 15 0.162 - 16 0.0025 - 18 0.000937 - 19 0.192 - 21 0.0798 - 22 0.000312 - 25 0.000312 - 28 0.000104 - 29 0.000625 - 30 0.000416 - 31 0.000521 - 32 0.000312 - 34 0.0715 - 35 0.0271 - 41 0.0868 - 42 0.00344 - 43 0.00281 - 45 0.00573 - 46 0.0842 - 47 0.00375 - - 2 37 10 0 - 8 0.027 - 13 0.189 - 15 0.189 - 16 0.027 - 18 0.027 - 19 0.0811 - 21 0.027 - 34 0.243 - 35 0.0541 - 41 0.135 - - 41 2 2 0 - 2 0.5 - 34 0.5 - - 41 83 16 15 - 0 0.012 - 2 0.0482 - 3 0.012 - 8 0.0241 - 12 0.012 - 13 0.205 - 14 0.012 - 15 0.0482 - 19 0.0361 - 21 0.145 - 28 0.205 - 29 0.0241 - 30 0.0361 - 31 0.0843 - 32 0.0723 - 33 0.0241 - - 0 5 3 0 - 13 0.6 - 14 0.2 - 21 0.2 - - 2 6 4 0 - 28 0.333 - 29 0.167 - 31 0.333 - 32 0.167 - - 12 4 2 0 - 13 0.5 - 19 0.5 - - 26 5 2 0 - 13 0.6 - 21 0.4 - - 28 14 2 0 - 21 0.0714 - 28 0.929 - - 29 7 4 0 - 13 0.286 - 15 0.429 - 21 0.143 - 29 0.143 - - 30 2 1 0 - 30 1 - - 31 6 2 0 - 21 0.167 - 31 0.833 - - 32 4 1 0 - 32 1 - - 33 2 1 0 - 33 1 - - 49 6 5 0 - 2 0.167 - 12 0.167 - 13 0.333 - 21 0.167 - 28 0.167 - - 55 5 3 0 - 3 0.2 - 13 0.6 - 19 0.2 - - 57 5 3 0 - 2 0.6 - 8 0.2 - 21 0.2 - - 64 3 2 0 - 8 0.333 - 21 0.667 - - 69 6 4 0 - 13 0.333 - 15 0.167 - 21 0.333 - 30 0.167 - - 42 7 3 0 - 25 0.143 - 28 0.143 - 47 0.714 - - 44 5 4 0 - 13 0.4 - 19 0.2 - 26 0.2 - 31 0.2 - - 45 119 15 9 - 0 0.193 - 2 0.0336 - 4 0.0168 - 6 0.0084 - 7 0.0336 - 12 0.0924 - 13 0.134 - 14 0.0588 - 15 0.0252 - 19 0.0672 - 21 0.0672 - 26 0.193 - 28 0.0168 - 35 0.0084 - 41 0.0504 - - 0 6 5 0 - 13 0.167 - 14 0.167 - 15 0.167 - 35 0.167 - 41 0.333 - - 28 35 5 0 - 0 0.0286 - 2 0.0286 - 12 0.2 - 21 0.114 - 26 0.629 - - 29 14 5 0 - 13 0.357 - 14 0.143 - 15 0.143 - 19 0.286 - 41 0.0714 - - 30 15 6 0 - 0 0.267 - 7 0.2 - 14 0.0667 - 21 0.2 - 28 0.133 - 41 0.133 - - 31 14 5 0 - 0 0.714 - 2 0.0714 - 13 0.0714 - 14 0.0714 - 21 0.0714 - - 32 4 3 0 - 2 0.25 - 14 0.25 - 19 0.5 - - 33 8 3 0 - 2 0.125 - 13 0.75 - 19 0.125 - - 49 10 7 0 - 0 0.3 - 4 0.1 - 12 0.2 - 13 0.1 - 14 0.1 - 26 0.1 - 41 0.1 - - 69 9 6 0 - 0 0.333 - 4 0.111 - 6 0.111 - 12 0.111 - 13 0.222 - 19 0.111 - - 46 4 3 0 - 0 0.25 - 21 0.25 - 28 0.5 - - 47 145999 43 35 - 0 0.106 - 1 0.00268 - 2 0.0245 - 3 0.00554 - 4 0.00909 - 5 0.00573 - 6 9.59e-05 - 7 0.023 - 8 0.00966 - 9 0.000527 - 10 0.000404 - 12 0.0564 - 13 0.141 - 14 0.109 - 15 0.0841 - 16 0.00392 - 18 0.000918 - 19 0.0986 - 20 9.59e-05 - 21 0.0628 - 22 0.000363 - 23 6.16e-05 - 24 0.000788 - 25 2.05e-05 - 26 0.0921 - 27 1.37e-05 - 28 0.00658 - 29 0.00915 - 30 0.00608 - 31 0.011 - 32 0.00403 - 33 0.00624 - 34 0.0245 - 35 0.0122 - 37 0.000699 - 40 6.85e-05 - 41 0.0551 - 42 0.00323 - 43 0.00149 - 44 0.000349 - 45 0.00476 - 46 0.0117 - 47 0.00533 - - 0 33747 40 0 - 0 0.046 - 1 0.000444 - 2 0.0164 - 3 0.00572 - 4 0.0196 - 5 0.022 - 6 0.000119 - 7 0.00199 - 8 0.004 - 9 0.000237 - 10 0.000711 - 12 0.0836 - 13 0.183 - 14 0.139 - 15 0.0945 - 16 0.00563 - 18 0.0013 - 19 0.155 - 20 8.89e-05 - 21 0.0558 - 22 0.000119 - 23 2.96e-05 - 24 0.000178 - 26 0.0435 - 28 0.00121 - 29 0.00127 - 30 0.00139 - 31 0.00181 - 32 0.00107 - 33 0.000711 - 34 0.0346 - 35 0.0179 - 37 5.93e-05 - 40 2.96e-05 - 41 0.0477 - 42 0.00329 - 43 0.00207 - 45 0.00516 - 46 0.00317 - 47 0.000207 - - 1 547 24 0 - 0 0.347 - 2 0.0183 - 4 0.00366 - 7 0.249 - 8 0.00183 - 13 0.0622 - 14 0.0731 - 15 0.00548 - 19 0.00548 - 20 0.00366 - 21 0.0878 - 24 0.00548 - 26 0.0201 - 28 0.0128 - 29 0.00366 - 31 0.00366 - 32 0.00183 - 33 0.00366 - 41 0.0384 - 42 0.00366 - 43 0.00366 - 45 0.0146 - 46 0.00366 - 47 0.0274 - - 2 16 6 0 - 7 0.125 - 12 0.25 - 13 0.125 - 14 0.312 - 15 0.125 - 34 0.0625 - - 4 9 6 0 - 0 0.111 - 7 0.111 - 13 0.111 - 19 0.111 - 26 0.222 - 41 0.333 - - 7 23 6 0 - 0 0.522 - 8 0.0435 - 13 0.087 - 14 0.0435 - 21 0.261 - 41 0.0435 - - 8 124 20 0 - 0 0.347 - 1 0.0161 - 2 0.0242 - 4 0.0161 - 7 0.0645 - 8 0.00806 - 13 0.0403 - 14 0.0887 - 15 0.0161 - 16 0.00806 - 19 0.00806 - 21 0.169 - 26 0.0645 - 28 0.0161 - 29 0.0161 - 32 0.00806 - 41 0.0484 - 45 0.0161 - 46 0.00806 - 47 0.0161 - - 12 9643 36 0 - 0 0.000207 - 2 0.023 - 3 0.00778 - 4 0.0186 - 5 0.00757 - 6 0.000207 - 7 0.00114 - 8 0.00259 - 9 0.000311 - 10 0.000207 - 12 0.000104 - 13 0.243 - 14 0.174 - 15 0.106 - 16 0.00643 - 18 0.00104 - 19 0.222 - 21 0.0317 - 22 0.000311 - 23 0.000104 - 24 0.000104 - 28 0.00124 - 29 0.00124 - 30 0.000933 - 31 0.00239 - 32 0.00207 - 33 0.00176 - 34 0.0604 - 35 0.0146 - 40 0.000104 - 41 0.0502 - 42 0.00436 - 43 0.00321 - 45 0.00861 - 46 0.00301 - 47 0.000104 - - 13 311 31 0 - 0 0.0257 - 1 0.00965 - 2 0.0579 - 3 0.0675 - 4 0.0386 - 7 0.148 - 8 0.0257 - 10 0.00643 - 12 0.00322 - 13 0.164 - 14 0.0289 - 15 0.0386 - 16 0.00965 - 18 0.00322 - 19 0.00322 - 21 0.0675 - 24 0.00643 - 26 0.154 - 28 0.0257 - 29 0.0193 - 30 0.00965 - 31 0.0161 - 32 0.00643 - 34 0.00322 - 37 0.00322 - 41 0.0354 - 42 0.00322 - 43 0.00322 - 45 0.00322 - 46 0.00322 - 47 0.00965 - - 14 121 21 0 - 0 0.0661 - 2 0.116 - 3 0.0331 - 4 0.00826 - 7 0.0413 - 8 0.0248 - 13 0.264 - 14 0.0165 - 15 0.256 - 18 0.00826 - 19 0.0165 - 21 0.00826 - 30 0.00826 - 34 0.00826 - 35 0.0165 - 41 0.0579 - 42 0.00826 - 43 0.00826 - 45 0.0165 - 46 0.00826 - 47 0.00826 - - 15 37 10 0 - 0 0.108 - 2 0.027 - 7 0.0541 - 15 0.297 - 18 0.027 - 26 0.0541 - 33 0.027 - 42 0.027 - 45 0.162 - 47 0.216 - - 18 30 6 0 - 4 0.1 - 5 0.367 - 7 0.0667 - 13 0.0667 - 19 0.367 - 34 0.0333 - - 21 72 21 0 - 0 0.0972 - 1 0.0139 - 2 0.0694 - 7 0.111 - 8 0.0278 - 12 0.125 - 13 0.153 - 14 0.0694 - 16 0.0139 - 19 0.0972 - 21 0.0139 - 26 0.0417 - 28 0.0139 - 29 0.0139 - 31 0.0139 - 32 0.0139 - 35 0.0139 - 41 0.0556 - 42 0.0139 - 45 0.0139 - 47 0.0139 - - 22 3 1 0 - 0 1 - - 26 13034 39 0 - 0 0.0514 - 1 0.00107 - 2 0.0104 - 3 0.018 - 4 0.000997 - 5 7.67e-05 - 6 0.000153 - 7 0.00606 - 8 0.0841 - 9 0.0043 - 10 0.00046 - 12 0.00246 - 13 0.2 - 14 0.114 - 15 0.0404 - 16 0.00215 - 18 0.000153 - 19 0.0154 - 21 0.0322 - 22 0.000997 - 23 0.000153 - 24 0.00453 - 26 7.67e-05 - 28 0.0401 - 29 0.0731 - 30 0.0568 - 31 0.105 - 32 0.0337 - 33 0.0584 - 34 0.000307 - 35 0.00115 - 37 0.00453 - 41 0.017 - 42 0.00269 - 43 0.00115 - 44 0.000384 - 45 0.00261 - 46 0.00491 - 47 0.00898 - - 28 20589 35 0 - 0 0.00481 - 1 4.86e-05 - 2 0.028 - 3 4.86e-05 - 4 0.000777 - 7 0.0016 - 8 0.000194 - 10 9.71e-05 - 12 0.243 - 13 0.00612 - 14 0.00937 - 15 0.00393 - 16 4.86e-05 - 18 0.000146 - 19 0.00976 - 21 0.109 - 22 0.000486 - 26 0.55 - 27 9.71e-05 - 28 0.00525 - 29 0.00277 - 30 0.000486 - 31 0.000631 - 32 0.00068 - 33 0.000826 - 34 0.000194 - 35 0.000437 - 40 0.000291 - 41 0.00641 - 42 0.00175 - 43 0.000291 - 44 0.000631 - 45 0.00665 - 46 0.000243 - 47 0.005 - - 29 21355 36 0 - 0 0.00445 - 1 0.00103 - 2 0.0322 - 3 0.00609 - 4 0.00393 - 7 0.00103 - 8 0.00206 - 9 0.000187 - 10 4.68e-05 - 12 0.000281 - 13 0.199 - 14 0.138 - 15 0.234 - 16 0.00805 - 18 0.00183 - 19 0.135 - 21 0.0543 - 22 0.000328 - 23 4.68e-05 - 26 0.00014 - 28 9.37e-05 - 29 0.000328 - 30 0.000468 - 31 0.000937 - 32 4.68e-05 - 33 0.00014 - 34 0.0318 - 35 0.0212 - 37 9.37e-05 - 41 0.0896 - 42 0.00244 - 43 0.0015 - 44 4.68e-05 - 45 0.00173 - 46 0.0271 - 47 0.000656 - - 30 10957 33 0 - 0 0.273 - 2 0.0305 - 3 0.00292 - 4 0.0021 - 7 0.234 - 8 0.00301 - 9 9.13e-05 - 10 0.000365 - 13 0.0703 - 14 0.0698 - 15 0.0111 - 16 0.000639 - 18 0.00119 - 19 0.00347 - 20 0.00073 - 21 0.0539 - 22 0.000365 - 24 0.00374 - 26 0.0118 - 28 0.0189 - 29 0.0174 - 30 0.00347 - 31 0.00538 - 32 0.00429 - 33 0.00484 - 37 0.00164 - 41 0.129 - 42 0.00538 - 43 0.000274 - 44 0.000548 - 45 0.00657 - 46 0.0042 - 47 0.0252 - - 31 14933 38 0 - 0 0.613 - 1 0.0214 - 2 0.0127 - 3 0.00469 - 4 0.00449 - 6 6.7e-05 - 7 0.0115 - 8 0.000335 - 9 0.000134 - 10 0.000134 - 12 0.000335 - 13 0.088 - 14 0.0805 - 15 0.00429 - 16 0.000402 - 18 0.000268 - 19 0.00194 - 21 0.0765 - 22 0.000603 - 23 0.000268 - 26 0.000134 - 28 0.00221 - 29 0.00221 - 30 0.000804 - 31 0.00107 - 32 0.000804 - 33 0.00127 - 34 0.000268 - 35 0.000134 - 37 0.00114 - 40 6.7e-05 - 41 0.0488 - 42 0.00248 - 43 0.000469 - 44 0.00154 - 45 0.00254 - 46 0.00234 - 47 0.00984 - - 32 5292 30 0 - 2 0.0238 - 3 0.0017 - 4 0.0136 - 7 0.000945 - 8 0.0034 - 9 0.000378 - 10 0.00227 - 12 0.000189 - 13 0.034 - 14 0.41 - 15 0.0259 - 16 0.0108 - 18 0.000756 - 19 0.254 - 21 0.0752 - 22 0.000189 - 29 0.000189 - 30 0.000378 - 31 0.00189 - 32 0.000378 - 33 0.000378 - 34 0.058 - 35 0.0421 - 37 0.000189 - 41 0.0291 - 42 0.0034 - 43 0.00265 - 45 0.00246 - 46 0.00151 - 47 0.000189 - - 33 9413 30 0 - 2 0.0278 - 3 0.00287 - 4 0.017 - 5 0.000637 - 6 0.000425 - 7 0.00181 - 8 0.0017 - 9 0.000106 - 13 0.212 - 14 0.0119 - 15 0.166 - 16 0.00255 - 18 0.000956 - 19 0.196 - 21 0.0667 - 22 0.000212 - 25 0.000319 - 28 0.000106 - 29 0.000637 - 30 0.000425 - 31 0.000531 - 32 0.000319 - 34 0.073 - 35 0.0276 - 41 0.0882 - 42 0.00351 - 43 0.00287 - 45 0.00499 - 46 0.0859 - 47 0.00382 - - 41 7 4 0 - 0 0.143 - 2 0.571 - 12 0.143 - 21 0.143 - - 42 5 1 0 - 47 1 - - 45 114 15 0 - 0 0.202 - 2 0.0263 - 4 0.00877 - 6 0.00877 - 7 0.0351 - 12 0.0965 - 13 0.14 - 14 0.0614 - 15 0.0263 - 19 0.0702 - 21 0.0439 - 26 0.202 - 28 0.0175 - 35 0.00877 - 41 0.0526 - - 48 40 3 0 - 2 0.925 - 21 0.025 - 41 0.05 - - 49 1672 33 0 - 0 0.197 - 1 0.00538 - 2 0.145 - 3 0.00359 - 4 0.00718 - 7 0.0317 - 8 0.0012 - 10 0.0012 - 12 0.0514 - 13 0.106 - 14 0.103 - 15 0.0532 - 16 0.00239 - 18 0.000598 - 19 0.0371 - 21 0.0568 - 26 0.0359 - 28 0.0012 - 29 0.00239 - 30 0.0012 - 31 0.0012 - 32 0.000598 - 33 0.000598 - 34 0.0179 - 35 0.0102 - 37 0.0012 - 41 0.101 - 42 0.00538 - 43 0.000598 - 44 0.00179 - 45 0.00478 - 46 0.00299 - 47 0.00897 - - 50 8 7 0 - 0 0.125 - 13 0.125 - 14 0.125 - 15 0.25 - 30 0.125 - 33 0.125 - 41 0.125 - - 53 1 1 0 - 42 1 - - 55 113 11 0 - 0 0.0619 - 2 0.708 - 7 0.0177 - 14 0.0177 - 15 0.00885 - 19 0.0177 - 21 0.00885 - 26 0.0177 - 40 0.00885 - 41 0.106 - 42 0.0265 - - 57 77 6 0 - 0 0.234 - 2 0.558 - 12 0.039 - 15 0.013 - 21 0.039 - 41 0.117 - - 58 8 4 0 - 2 0.625 - 12 0.125 - 41 0.125 - 42 0.125 - - 60 2 2 0 - 0 0.5 - 2 0.5 - - 62 5 2 0 - 2 0.8 - 15 0.2 - - 64 7 4 0 - 0 0.286 - 2 0.429 - 7 0.143 - 41 0.143 - - 69 3673 34 0 - 0 0.0792 - 1 0.00136 - 2 0.00327 - 3 0.00163 - 4 0.00517 - 5 0.000817 - 7 0.0343 - 8 0.00463 - 10 0.000545 - 12 0.0686 - 13 0.141 - 14 0.107 - 15 0.116 - 16 0.00436 - 18 0.000545 - 19 0.106 - 20 0.000272 - 21 0.0482 - 24 0.000817 - 26 0.1 - 28 0.00327 - 29 0.0049 - 30 0.00218 - 31 0.0049 - 32 0.00218 - 33 0.00272 - 34 0.0302 - 35 0.0166 - 41 0.0803 - 42 0.00762 - 43 0.00191 - 45 0.00871 - 46 0.00299 - 47 0.00681 - - 74 1 1 0 - 47 1 - - 48 42 4 0 - 2 0.881 - 9 0.0238 - 21 0.0476 - 41 0.0476 - - 49 1717 34 19 - 0 0.192 - 1 0.00524 - 2 0.142 - 3 0.00466 - 4 0.00699 - 7 0.0309 - 8 0.00116 - 10 0.00116 - 12 0.0501 - 13 0.104 - 14 0.102 - 15 0.0524 - 16 0.00233 - 18 0.000582 - 19 0.0361 - 21 0.0658 - 22 0.000582 - 26 0.0349 - 28 0.00116 - 29 0.00233 - 30 0.00116 - 31 0.00116 - 32 0.000582 - 33 0.000582 - 34 0.0175 - 35 0.0099 - 37 0.00116 - 41 0.103 - 42 0.00524 - 43 0.000582 - 44 0.00175 - 45 0.0105 - 46 0.00291 - 47 0.00874 - - 0 55 10 0 - 0 0.0364 - 2 0.491 - 7 0.0182 - 12 0.0545 - 13 0.0909 - 15 0.0909 - 19 0.0727 - 21 0.0727 - 35 0.0182 - 41 0.0545 - - 1 6 4 0 - 2 0.333 - 7 0.167 - 13 0.333 - 14 0.167 - - 8 23 9 0 - 0 0.478 - 2 0.0435 - 12 0.0435 - 13 0.0435 - 14 0.13 - 21 0.13 - 29 0.0435 - 41 0.0435 - 47 0.0435 - - 12 15 4 0 - 2 0.733 - 13 0.133 - 14 0.0667 - 21 0.0667 - - 21 3 3 0 - 13 0.333 - 26 0.333 - 41 0.333 - - 26 4 4 0 - 0 0.25 - 2 0.25 - 8 0.25 - 29 0.25 - - 28 218 14 0 - 2 0.156 - 7 0.00459 - 12 0.362 - 13 0.0183 - 14 0.0229 - 15 0.00917 - 19 0.0183 - 21 0.101 - 26 0.261 - 37 0.00459 - 41 0.0183 - 42 0.00459 - 45 0.0138 - 47 0.00459 - - 29 283 14 0 - 0 0.0247 - 2 0.194 - 13 0.184 - 14 0.0954 - 15 0.205 - 16 0.00707 - 19 0.0777 - 21 0.0565 - 34 0.0283 - 35 0.0212 - 41 0.0883 - 43 0.00353 - 45 0.0106 - 46 0.00353 - - 30 218 18 0 - 0 0.216 - 2 0.078 - 4 0.00459 - 7 0.188 - 13 0.0872 - 14 0.147 - 15 0.0138 - 19 0.0138 - 21 0.0459 - 26 0.00459 - 29 0.00459 - 30 0.00459 - 31 0.00917 - 32 0.00459 - 41 0.128 - 42 0.0183 - 45 0.00917 - 47 0.0229 - - 31 583 24 0 - 0 0.437 - 1 0.0154 - 2 0.048 - 3 0.0103 - 4 0.0103 - 7 0.00858 - 10 0.00343 - 12 0.00172 - 13 0.0978 - 14 0.11 - 15 0.00515 - 18 0.00172 - 19 0.00343 - 21 0.0703 - 28 0.00343 - 29 0.00172 - 34 0.00172 - 37 0.00172 - 41 0.132 - 42 0.00515 - 44 0.00515 - 45 0.0103 - 46 0.00343 - 47 0.012 - - 32 79 12 0 - 2 0.152 - 4 0.0253 - 13 0.0127 - 14 0.392 - 15 0.038 - 16 0.0127 - 19 0.19 - 21 0.0633 - 34 0.0506 - 35 0.038 - 41 0.0127 - 46 0.0127 - - 33 142 15 0 - 2 0.204 - 4 0.0141 - 7 0.0211 - 13 0.232 - 14 0.0141 - 15 0.106 - 16 0.00704 - 19 0.0704 - 21 0.0352 - 30 0.00704 - 34 0.12 - 35 0.0352 - 41 0.106 - 45 0.0211 - 46 0.00704 - - 41 10 2 0 - 2 0.1 - 41 0.9 - - 45 2 2 0 - 7 0.5 - 21 0.5 - - 46 1 1 0 - 4 1 - - 47 29 9 0 - 0 0.172 - 2 0.345 - 3 0.069 - 12 0.0345 - 14 0.103 - 15 0.0345 - 21 0.103 - 22 0.0345 - 41 0.103 - - 49 11 4 0 - 2 0.545 - 14 0.0909 - 35 0.0909 - 41 0.273 - - 55 6 3 0 - 2 0.5 - 41 0.333 - 42 0.167 - - 69 25 13 0 - 0 0.04 - 2 0.12 - 8 0.04 - 13 0.08 - 14 0.2 - 19 0.08 - 21 0.08 - 26 0.04 - 33 0.04 - 35 0.04 - 41 0.16 - 45 0.04 - 47 0.04 - - 50 13 9 0 - 0 0.0769 - 13 0.154 - 14 0.0769 - 15 0.154 - 30 0.0769 - 31 0.0769 - 32 0.0769 - 33 0.0769 - 41 0.231 - - 53 1 1 0 - 42 1 - - 55 130 17 5 - 0 0.0538 - 2 0.615 - 4 0.00769 - 7 0.0154 - 9 0.00769 - 13 0.00769 - 14 0.0231 - 15 0.00769 - 19 0.0154 - 21 0.0462 - 26 0.0154 - 28 0.00769 - 33 0.00769 - 40 0.00769 - 41 0.131 - 42 0.0231 - 46 0.00769 - - 31 6 2 0 - 0 0.833 - 40 0.167 - - 41 3 3 0 - 15 0.333 - 19 0.333 - 41 0.333 - - 47 89 12 0 - 0 0.0225 - 2 0.652 - 4 0.0112 - 9 0.0112 - 13 0.0112 - 21 0.0449 - 26 0.0112 - 28 0.0112 - 33 0.0112 - 41 0.169 - 42 0.0337 - 46 0.0112 - - 55 4 3 0 - 2 0.5 - 19 0.25 - 26 0.25 - - 62 10 4 0 - 2 0.6 - 7 0.2 - 14 0.1 - 41 0.1 - - 57 96 9 6 - 0 0.188 - 2 0.448 - 3 0.0104 - 8 0.0104 - 12 0.0312 - 13 0.115 - 15 0.0208 - 21 0.0312 - 41 0.146 - - 0 7 1 0 - 2 1 - - 29 7 1 0 - 2 1 - - 41 17 2 0 - 2 0.294 - 41 0.706 - - 47 36 8 0 - 0 0.472 - 2 0.167 - 3 0.0278 - 8 0.0278 - 12 0.0833 - 13 0.167 - 15 0.0278 - 21 0.0278 - - 64 3 2 0 - 13 0.667 - 21 0.333 - - 69 2 2 0 - 13 0.5 - 15 0.5 - - 58 10 6 0 - 2 0.5 - 8 0.1 - 12 0.1 - 28 0.1 - 41 0.1 - 42 0.1 - - 62 16 7 0 - 2 0.25 - 3 0.125 - 4 0.0625 - 13 0.25 - 14 0.188 - 15 0.0625 - 41 0.0625 - - 64 18 10 1 - 0 0.111 - 2 0.167 - 3 0.111 - 7 0.0556 - 8 0.0556 - 9 0.0556 - 13 0.111 - 14 0.0556 - 16 0.0556 - 41 0.222 - - 41 4 2 0 - 2 0.75 - 41 0.25 - - 69 3772 35 0 - 0 0.0771 - 1 0.00133 - 2 0.00663 - 3 0.00159 - 4 0.0061 - 5 0.000795 - 7 0.0334 - 8 0.00477 - 10 0.00053 - 12 0.0668 - 13 0.141 - 14 0.104 - 15 0.114 - 16 0.00424 - 18 0.00133 - 19 0.103 - 20 0.000265 - 21 0.0586 - 23 0.000265 - 24 0.000795 - 26 0.0978 - 28 0.00318 - 29 0.00477 - 30 0.00212 - 31 0.00477 - 32 0.00212 - 33 0.00265 - 34 0.0294 - 35 0.0162 - 41 0.0798 - 42 0.00769 - 43 0.00186 - 45 0.0109 - 46 0.00292 - 47 0.00663 - - 74 1 1 0 - 47 1 - -70 128 19 3 - 0 0.0156 - 2 0.0703 - 7 0.156 - 8 0.0234 - 13 0.0312 - 19 0.0156 - 21 0.0547 - 24 0.0312 - 28 0.172 - 29 0.0312 - 30 0.0312 - 31 0.0312 - 32 0.0781 - 33 0.109 - 37 0.00781 - 41 0.0156 - 42 0.0312 - 45 0.0312 - 47 0.0625 - - 8 3 3 0 - 2 0.333 - 21 0.333 - 37 0.333 - - 21 7 6 0 - 2 0.143 - 28 0.286 - 29 0.143 - 33 0.143 - 42 0.143 - 47 0.143 - - 47 59 17 1 - 0 0.0169 - 2 0.0678 - 7 0.169 - 8 0.0169 - 13 0.0339 - 19 0.0169 - 24 0.0339 - 28 0.186 - 29 0.0339 - 30 0.0339 - 31 0.0339 - 32 0.0847 - 33 0.119 - 41 0.0169 - 42 0.0339 - 45 0.0339 - 47 0.0678 - - 21 7 6 0 - 2 0.143 - 28 0.286 - 29 0.143 - 33 0.143 - 42 0.143 - 47 0.143 - -71 4170 32 7 - 0 0.0254 - 2 0.0451 - 3 0.0139 - 4 0.00048 - 7 0.0686 - 8 0.0206 - 9 0.000959 - 10 0.00192 - 13 0.158 - 14 0.0652 - 15 0.0254 - 18 0.00048 - 19 0.00959 - 21 0.0415 - 22 0.00048 - 24 0.00624 - 26 0.00288 - 28 0.058 - 29 0.0177 - 30 0.012 - 31 0.0197 - 32 0.011 - 33 0.0173 - 34 0.00024 - 37 0.00168 - 40 0.000959 - 41 0.194 - 42 0.0149 - 44 0.00192 - 45 0.0367 - 46 0.011 - 47 0.116 - - 2 6 1 0 - 37 1 - - 7 30 8 0 - 0 0.0333 - 3 0.0667 - 13 0.4 - 14 0.2 - 15 0.133 - 21 0.0667 - 41 0.0667 - 46 0.0333 - - 13 1 1 0 - 34 1 - - 21 24 14 0 - 0 0.0417 - 2 0.0833 - 7 0.0833 - 8 0.0833 - 13 0.0417 - 14 0.0833 - 24 0.0833 - 28 0.125 - 31 0.0833 - 40 0.0417 - 41 0.0417 - 42 0.0833 - 45 0.0417 - 47 0.0833 - - 37 2036 31 1 - 0 0.025 - 2 0.0462 - 3 0.0133 - 4 0.000491 - 7 0.0693 - 8 0.0192 - 9 0.000982 - 10 0.00196 - 13 0.155 - 14 0.0624 - 15 0.0241 - 18 0.000491 - 19 0.00982 - 21 0.0486 - 22 0.000491 - 24 0.0054 - 26 0.00295 - 28 0.057 - 29 0.0182 - 30 0.0123 - 31 0.0192 - 32 0.0113 - 33 0.0172 - 37 0.000491 - 40 0.000491 - 41 0.196 - 42 0.0142 - 44 0.00196 - 45 0.0373 - 46 0.0108 - 47 0.117 - - 2 6 3 0 - 21 0.333 - 28 0.167 - 30 0.5 - - 47 2063 30 3 - 0 0.0257 - 2 0.0441 - 3 0.0141 - 4 0.000485 - 7 0.0693 - 8 0.0208 - 9 0.000969 - 10 0.00194 - 13 0.16 - 14 0.0659 - 15 0.0257 - 18 0.000485 - 19 0.00969 - 21 0.0349 - 22 0.000485 - 24 0.0063 - 26 0.00291 - 28 0.0587 - 29 0.0179 - 30 0.0121 - 31 0.0199 - 32 0.0111 - 33 0.0175 - 40 0.000969 - 41 0.196 - 42 0.015 - 44 0.00194 - 45 0.0368 - 46 0.0111 - 47 0.117 - - 7 30 8 0 - 0 0.0333 - 3 0.0667 - 13 0.4 - 14 0.2 - 15 0.133 - 21 0.0667 - 41 0.0667 - 46 0.0333 - - 21 24 14 0 - 0 0.0417 - 2 0.0833 - 7 0.0833 - 8 0.0833 - 13 0.0417 - 14 0.0833 - 24 0.0833 - 28 0.125 - 31 0.0833 - 40 0.0417 - 41 0.0417 - 42 0.0833 - 45 0.0417 - 47 0.0833 - - 49 6 5 0 - 2 0.167 - 8 0.333 - 14 0.167 - 28 0.167 - 33 0.167 - - 49 6 5 0 - 2 0.167 - 8 0.333 - 14 0.167 - 28 0.167 - 33 0.167 - -72 14825 39 21 - 0 0.00567 - 1 0.000135 - 2 0.0114 - 3 0.00614 - 4 0.0123 - 5 0.00027 - 6 0.000135 - 7 0.0813 - 8 0.00668 - 9 0.000202 - 10 0.000337 - 13 0.22 - 14 0.173 - 15 0.0205 - 16 0.00378 - 17 0.000135 - 19 0.00256 - 21 0.00621 - 22 0.000135 - 23 0.000135 - 24 0.00243 - 26 0.0058 - 28 0.0188 - 29 0.00351 - 30 0.00513 - 31 0.00351 - 32 0.00445 - 33 0.00391 - 35 6.75e-05 - 36 0.000135 - 37 0.00256 - 40 0.000405 - 41 0.342 - 42 0.0121 - 43 0.00121 - 44 0.00216 - 45 0.0119 - 46 0.0103 - 47 0.0185 - - 3 7 1 0 - 41 1 - - 4 73 16 0 - 2 0.0411 - 3 0.0685 - 7 0.0274 - 13 0.315 - 14 0.0274 - 17 0.0137 - 21 0.0411 - 24 0.0274 - 28 0.0137 - 30 0.0137 - 31 0.0411 - 32 0.0137 - 33 0.0274 - 41 0.274 - 42 0.0274 - 45 0.0274 - - 7 358 17 0 - 2 0.00279 - 3 0.0168 - 4 0.00279 - 6 0.00279 - 8 0.0112 - 9 0.00279 - 10 0.00279 - 13 0.592 - 14 0.291 - 15 0.0223 - 19 0.00559 - 21 0.0112 - 22 0.00279 - 31 0.00279 - 41 0.014 - 42 0.0112 - 46 0.00559 - - 8 33 4 0 - 8 0.0303 - 23 0.0606 - 37 0.848 - 41 0.0606 - - 9 2 1 0 - 8 1 - - 10 5 1 0 - 41 1 - - 13 19 6 0 - 4 0.158 - 8 0.526 - 13 0.105 - 15 0.105 - 35 0.0526 - 41 0.0526 - - 14 19 5 0 - 8 0.789 - 9 0.0526 - 13 0.0526 - 15 0.0526 - 41 0.0526 - - 15 4 3 0 - 2 0.25 - 8 0.5 - 36 0.25 - - 21 17 9 2 - 0 0.0588 - 2 0.0588 - 13 0.0588 - 28 0.0588 - 29 0.0588 - 31 0.0588 - 32 0.118 - 33 0.0588 - 37 0.471 - - 35 5 4 0 - 0 0.2 - 29 0.2 - 32 0.4 - 33 0.2 - - 47 8 1 0 - 37 1 - - 23 2 1 0 - 4 1 - - 34 4214 26 0 - 0 0.00119 - 2 0.00498 - 3 0.00617 - 4 0.0038 - 7 0.0835 - 8 0.00166 - 13 0.245 - 14 0.173 - 15 0.0209 - 16 0.000237 - 19 0.00119 - 21 0.00119 - 26 0.00403 - 28 0.0038 - 29 0.000949 - 30 0.000475 - 31 0.00119 - 32 0.000475 - 33 0.000949 - 41 0.407 - 42 0.0135 - 43 0.00142 - 44 0.00237 - 45 0.00285 - 46 0.014 - 47 0.0038 - - 35 2343 31 0 - 0 0.0149 - 1 0.000427 - 2 0.0201 - 3 0.00299 - 4 0.0282 - 5 0.000854 - 7 0.0973 - 8 0.00683 - 13 0.141 - 14 0.178 - 15 0.023 - 16 0.0111 - 19 0.00469 - 21 0.0145 - 24 0.0064 - 26 0.0107 - 28 0.0405 - 29 0.00683 - 30 0.0141 - 31 0.00512 - 32 0.0102 - 33 0.00598 - 37 0.000427 - 40 0.000854 - 41 0.257 - 42 0.0102 - 43 0.00128 - 44 0.00256 - 45 0.0294 - 46 0.00555 - 47 0.0495 - - 36 159 11 0 - 2 0.0377 - 7 0.0126 - 13 0.145 - 14 0.157 - 16 0.00629 - 28 0.00629 - 32 0.00629 - 41 0.604 - 42 0.00629 - 46 0.0126 - 47 0.00629 - - 37 36 12 1 - 2 0.0556 - 7 0.222 - 8 0.0833 - 13 0.0278 - 19 0.0278 - 21 0.0833 - 28 0.333 - 33 0.0556 - 41 0.0278 - 42 0.0278 - 45 0.0278 - 47 0.0278 - - 21 8 6 0 - 7 0.125 - 8 0.25 - 21 0.125 - 28 0.125 - 33 0.25 - 42 0.125 - - 47 7352 37 14 - 0 0.00571 - 1 0.000136 - 2 0.0114 - 3 0.00598 - 4 0.0112 - 5 0.000272 - 6 0.000136 - 7 0.082 - 8 0.00449 - 9 0.000136 - 10 0.000136 - 13 0.222 - 14 0.174 - 15 0.0204 - 16 0.00381 - 17 0.000136 - 19 0.00258 - 21 0.00558 - 22 0.000136 - 24 0.00245 - 26 0.00585 - 28 0.0189 - 29 0.00354 - 30 0.00517 - 31 0.00354 - 32 0.00449 - 33 0.00394 - 36 0.000136 - 37 0.000136 - 40 0.000408 - 41 0.345 - 42 0.0122 - 43 0.00122 - 44 0.00218 - 45 0.012 - 46 0.0103 - 47 0.0186 - - 3 7 1 0 - 41 1 - - 4 73 16 0 - 2 0.0411 - 3 0.0685 - 7 0.0274 - 13 0.315 - 14 0.0274 - 17 0.0137 - 21 0.0411 - 24 0.0274 - 28 0.0137 - 30 0.0137 - 31 0.0411 - 32 0.0137 - 33 0.0274 - 41 0.274 - 42 0.0274 - 45 0.0274 - - 7 358 17 0 - 2 0.00279 - 3 0.0168 - 4 0.00279 - 6 0.00279 - 8 0.0112 - 9 0.00279 - 10 0.00279 - 13 0.592 - 14 0.291 - 15 0.0223 - 19 0.00559 - 21 0.0112 - 22 0.00279 - 31 0.00279 - 41 0.014 - 42 0.0112 - 46 0.00559 - - 10 5 1 0 - 41 1 - - 15 1 1 0 - 36 1 - - 21 9 8 0 - 0 0.111 - 2 0.111 - 13 0.111 - 28 0.111 - 29 0.111 - 31 0.111 - 32 0.222 - 33 0.111 - - 34 4211 26 0 - 0 0.00119 - 2 0.00499 - 3 0.00617 - 4 0.00356 - 7 0.0836 - 8 0.00166 - 13 0.246 - 14 0.174 - 15 0.0209 - 16 0.000237 - 19 0.00119 - 21 0.000712 - 26 0.00404 - 28 0.0038 - 29 0.00095 - 30 0.000475 - 31 0.00119 - 32 0.000475 - 33 0.00095 - 41 0.407 - 42 0.0135 - 43 0.00142 - 44 0.00237 - 45 0.00285 - 46 0.014 - 47 0.0038 - - 35 2336 31 0 - 0 0.015 - 1 0.000428 - 2 0.0201 - 3 0.003 - 4 0.0283 - 5 0.000856 - 7 0.0976 - 8 0.00642 - 13 0.141 - 14 0.178 - 15 0.0231 - 16 0.0111 - 19 0.00471 - 21 0.012 - 24 0.00642 - 26 0.0107 - 28 0.0407 - 29 0.00685 - 30 0.0141 - 31 0.00514 - 32 0.0103 - 33 0.00599 - 37 0.000428 - 40 0.000856 - 41 0.258 - 42 0.0103 - 43 0.00128 - 44 0.00257 - 45 0.0295 - 46 0.00557 - 47 0.0497 - - 36 159 11 0 - 2 0.0377 - 7 0.0126 - 13 0.145 - 14 0.157 - 16 0.00629 - 28 0.00629 - 32 0.00629 - 41 0.604 - 42 0.00629 - 46 0.0126 - 47 0.00629 - - 37 34 12 0 - 2 0.0588 - 7 0.235 - 8 0.0882 - 13 0.0294 - 19 0.0294 - 21 0.0294 - 28 0.353 - 33 0.0588 - 41 0.0294 - 42 0.0294 - 45 0.0294 - 47 0.0294 - - 55 43 9 0 - 8 0.0233 - 13 0.0233 - 14 0.0233 - 21 0.0233 - 28 0.0233 - 30 0.0233 - 33 0.0465 - 41 0.767 - 47 0.0465 - - 70 20 10 0 - 2 0.05 - 7 0.2 - 8 0.05 - 24 0.05 - 28 0.35 - 29 0.05 - 30 0.05 - 31 0.05 - 32 0.05 - 33 0.1 - - 71 7 6 0 - 7 0.143 - 8 0.143 - 14 0.143 - 28 0.286 - 29 0.143 - 31 0.143 - - 72 78 17 0 - 0 0.0128 - 2 0.0128 - 7 0.0769 - 8 0.0128 - 13 0.0513 - 21 0.0128 - 26 0.0128 - 28 0.0385 - 29 0.0385 - 31 0.0256 - 32 0.0256 - 33 0.0256 - 40 0.0128 - 41 0.564 - 42 0.0128 - 45 0.0513 - 47 0.0128 - - 55 44 9 1 - 8 0.0227 - 13 0.0227 - 14 0.0227 - 21 0.0227 - 28 0.0227 - 30 0.0227 - 33 0.0455 - 41 0.773 - 47 0.0455 - - 73 23 2 0 - 21 0.0435 - 41 0.957 - - 70 20 10 0 - 2 0.05 - 7 0.2 - 8 0.05 - 24 0.05 - 28 0.35 - 29 0.05 - 30 0.05 - 31 0.05 - 32 0.05 - 33 0.1 - - 71 7 6 0 - 7 0.143 - 8 0.143 - 14 0.143 - 28 0.286 - 29 0.143 - 31 0.143 - - 72 78 17 0 - 0 0.0128 - 2 0.0128 - 7 0.0769 - 8 0.0128 - 13 0.0513 - 21 0.0128 - 26 0.0128 - 28 0.0385 - 29 0.0385 - 31 0.0256 - 32 0.0256 - 33 0.0256 - 40 0.0128 - 41 0.564 - 42 0.0128 - 45 0.0513 - 47 0.0128 - - 73 23 5 0 - 3 0.13 - 4 0.522 - 8 0.087 - 10 0.13 - 13 0.13 - -73 782 20 2 - 0 0.00256 - 2 0.0128 - 3 0.0384 - 4 0.0767 - 8 0.0205 - 10 0.0205 - 13 0.371 - 14 0.115 - 15 0.0281 - 16 0.00256 - 28 0.0153 - 30 0.00512 - 31 0.00256 - 33 0.00512 - 41 0.23 - 42 0.0153 - 44 0.00256 - 45 0.00767 - 46 0.023 - 47 0.00512 - - 26 18 7 0 - 8 0.0556 - 13 0.444 - 14 0.0556 - 28 0.0556 - 31 0.0556 - 41 0.278 - 46 0.0556 - - 47 391 20 1 - 0 0.00256 - 2 0.0128 - 3 0.0384 - 4 0.0767 - 8 0.0205 - 10 0.0205 - 13 0.371 - 14 0.115 - 15 0.0281 - 16 0.00256 - 28 0.0153 - 30 0.00512 - 31 0.00256 - 33 0.00512 - 41 0.23 - 42 0.0153 - 44 0.00256 - 45 0.00767 - 46 0.023 - 47 0.00512 - - 26 18 7 0 - 8 0.0556 - 13 0.444 - 14 0.0556 - 28 0.0556 - 31 0.0556 - 41 0.278 - 46 0.0556 - -74 443 33 26 - 0 0.0113 - 2 0.0113 - 3 0.0361 - 4 0.0971 - 5 0.00451 - 6 0.00677 - 7 0.0474 - 8 0.00677 - 9 0.00677 - 12 0.00451 - 13 0.0564 - 14 0.0271 - 15 0.0113 - 16 0.00226 - 18 0.00451 - 19 0.00903 - 21 0.0113 - 22 0.00226 - 24 0.00451 - 25 0.00677 - 26 0.00226 - 28 0.00903 - 29 0.0226 - 30 0.00451 - 31 0.00903 - 32 0.00451 - 33 0.00226 - 40 0.00226 - 41 0.147 - 42 0.0271 - 44 0.00451 - 45 0.0406 - 47 0.357 - - 0 2 2 0 - 18 0.5 - 28 0.5 - - 2 5 3 0 - 13 0.2 - 14 0.4 - 47 0.4 - - 4 47 10 0 - 0 0.0426 - 2 0.0213 - 4 0.0213 - 7 0.149 - 13 0.0213 - 32 0.0213 - 41 0.447 - 42 0.0638 - 45 0.0851 - 47 0.128 - - 6 5 4 0 - 6 0.4 - 13 0.2 - 41 0.2 - 45 0.2 - - 7 11 9 0 - 2 0.0909 - 3 0.182 - 4 0.0909 - 13 0.0909 - 14 0.182 - 19 0.0909 - 28 0.0909 - 29 0.0909 - 41 0.0909 - - 8 4 4 0 - 14 0.25 - 22 0.25 - 26 0.25 - 44 0.25 - - 9 26 1 0 - 4 1 - - 12 1 1 0 - 12 1 - - 13 5 4 0 - 6 0.2 - 9 0.4 - 41 0.2 - 47 0.2 - - 14 4 3 0 - 2 0.25 - 8 0.5 - 9 0.25 - - 15 7 6 0 - 7 0.143 - 15 0.286 - 16 0.143 - 40 0.143 - 41 0.143 - 47 0.143 - - 21 3 3 0 - 4 0.333 - 7 0.333 - 13 0.333 - - 22 11 1 0 - 4 1 - - 25 39 4 0 - 3 0.0513 - 13 0.0513 - 14 0.0256 - 47 0.872 - - 26 6 5 0 - 3 0.333 - 7 0.167 - 13 0.167 - 14 0.167 - 29 0.167 - - 40 1 1 0 - 8 1 - - 41 9 4 0 - 0 0.111 - 13 0.333 - 21 0.444 - 33 0.111 - - 42 4 2 0 - 13 0.25 - 25 0.75 - - 47 174 22 15 - 0 0.0115 - 2 0.0115 - 3 0.046 - 4 0.0115 - 5 0.00575 - 7 0.0517 - 12 0.00575 - 13 0.0517 - 14 0.0287 - 18 0.00575 - 19 0.0115 - 24 0.00575 - 28 0.0115 - 29 0.0287 - 30 0.00575 - 31 0.0115 - 32 0.00575 - 41 0.161 - 42 0.023 - 44 0.00575 - 45 0.046 - 47 0.454 - - 0 2 2 0 - 18 0.5 - 28 0.5 - - 4 47 10 0 - 0 0.0426 - 2 0.0213 - 4 0.0213 - 7 0.149 - 13 0.0213 - 32 0.0213 - 41 0.447 - 42 0.0638 - 45 0.0851 - 47 0.128 - - 6 2 2 0 - 13 0.5 - 45 0.5 - - 7 10 9 0 - 2 0.1 - 3 0.2 - 4 0.1 - 13 0.1 - 14 0.1 - 19 0.1 - 28 0.1 - 29 0.1 - 41 0.1 - - 8 2 2 0 - 14 0.5 - 44 0.5 - - 12 1 1 0 - 12 1 - - 21 2 2 0 - 7 0.5 - 13 0.5 - - 25 39 4 0 - 3 0.0513 - 13 0.0513 - 14 0.0256 - 47 0.872 - - 26 5 4 0 - 3 0.4 - 13 0.2 - 14 0.2 - 29 0.2 - - 49 7 3 0 - 31 0.143 - 45 0.143 - 47 0.714 - - 55 15 7 0 - 3 0.0667 - 19 0.0667 - 29 0.133 - 31 0.0667 - 41 0.133 - 45 0.0667 - 47 0.467 - - 57 5 4 0 - 3 0.2 - 13 0.4 - 24 0.2 - 30 0.2 - - 64 2 2 0 - 7 0.5 - 42 0.5 - - 69 1 1 0 - 5 1 - - 74 19 3 0 - 41 0.0526 - 45 0.0526 - 47 0.895 - - 49 7 3 0 - 31 0.143 - 45 0.143 - 47 0.714 - - 55 25 12 0 - 3 0.04 - 7 0.04 - 13 0.04 - 15 0.08 - 19 0.04 - 21 0.04 - 29 0.08 - 31 0.04 - 41 0.2 - 42 0.04 - 45 0.08 - 47 0.28 - - 57 5 4 0 - 3 0.2 - 13 0.4 - 24 0.2 - 30 0.2 - - 62 3 3 0 - 29 0.333 - 42 0.333 - 47 0.333 - - 64 5 4 0 - 7 0.2 - 13 0.2 - 41 0.4 - 42 0.2 - - 69 2 2 0 - 5 0.5 - 42 0.5 - - 74 23 3 0 - 41 0.174 - 45 0.087 - 47 0.739 - diff --git a/samples/G-code/rm.g b/samples/G-code/rm.g deleted file mode 100644 index 89c5aa24..00000000 --- a/samples/G-code/rm.g +++ /dev/null @@ -1,29735 +0,0 @@ -48 34015 42 38 - 0 0.0085 - 2 0.0361 - 3 0.0052 - 4 0.00714 - 5 0.000206 - 6 0.000147 - 7 0.166 - 8 0.0349 - 9 0.00138 - 10 5.88e-05 - 12 0.00218 - 13 0.166 - 14 0.0529 - 15 0.0215 - 16 0.000529 - 17 0.000176 - 18 0.000118 - 19 0.00285 - 20 0.000353 - 21 0.0147 - 22 0.00171 - 23 0.000441 - 24 0.000353 - 26 0.0645 - 28 0.000147 - 29 0.0052 - 30 0.00409 - 31 0.003 - 32 0.00171 - 33 0.000823 - 34 0.0005 - 35 0.00047 - 37 0.00318 - 39 0.00173 - 40 0.223 - 41 0.136 - 42 0.0157 - 43 0.00247 - 44 0.00326 - 45 0.00173 - 46 0.00808 - 47 0.001 - - 0 6 4 0 - 21 0.167 - 30 0.167 - 40 0.333 - 41 0.333 - - 2 252 19 5 - 0 0.00397 - 3 0.0357 - 4 0.0238 - 7 0.0159 - 8 0.206 - 9 0.0437 - 10 0.00794 - 13 0.0556 - 14 0.00397 - 15 0.0119 - 21 0.341 - 22 0.0714 - 23 0.0516 - 29 0.0119 - 30 0.0238 - 31 0.0357 - 39 0.0159 - 41 0.0119 - 45 0.0278 - - 8 29 7 0 - 4 0.103 - 13 0.241 - 14 0.0345 - 21 0.138 - 29 0.0345 - 30 0.172 - 31 0.276 - - 41 42 10 0 - 3 0.0714 - 4 0.0238 - 7 0.0476 - 8 0.19 - 9 0.0476 - 10 0.0238 - 13 0.0238 - 21 0.452 - 29 0.0238 - 39 0.0952 - - 42 4 4 0 - 8 0.25 - 10 0.25 - 13 0.25 - 23 0.25 - - 46 4 1 0 - 45 1 - - 48 170 15 0 - 0 0.00588 - 3 0.0353 - 4 0.0118 - 7 0.0118 - 8 0.253 - 9 0.0529 - 13 0.0294 - 15 0.0176 - 21 0.365 - 22 0.106 - 23 0.0647 - 29 0.00588 - 31 0.00588 - 41 0.0176 - 45 0.0176 - - 3 192 10 5 - 3 0.00521 - 4 0.0104 - 7 0.0104 - 8 0.13 - 13 0.703 - 14 0.0573 - 15 0.0521 - 41 0.0156 - 43 0.0104 - 44 0.00521 - - 2 1 1 0 - 43 1 - - 3 19 5 0 - 8 0.105 - 13 0.421 - 14 0.105 - 15 0.263 - 41 0.105 - - 38 1 1 0 - 44 1 - - 39 155 8 0 - 3 0.00645 - 4 0.0129 - 8 0.142 - 13 0.748 - 14 0.0452 - 15 0.0323 - 41 0.00645 - 43 0.00645 - - 47 6 2 0 - 7 0.333 - 13 0.667 - - 4 32 7 1 - 8 0.312 - 13 0.438 - 14 0.0625 - 15 0.0312 - 39 0.0938 - 41 0.0312 - 42 0.0312 - - 47 5 3 0 - 39 0.6 - 41 0.2 - 42 0.2 - - 6 10 6 0 - 7 0.1 - 8 0.1 - 13 0.4 - 40 0.2 - 44 0.1 - 46 0.1 - - 7 50 13 2 - 2 0.04 - 3 0.02 - 7 0.32 - 8 0.02 - 9 0.02 - 13 0.04 - 14 0.04 - 21 0.18 - 26 0.1 - 30 0.02 - 31 0.02 - 40 0.14 - 41 0.04 - - 41 3 2 0 - 8 0.333 - 21 0.667 - - 47 36 10 0 - 2 0.0278 - 3 0.0278 - 7 0.389 - 9 0.0278 - 14 0.0556 - 21 0.111 - 26 0.139 - 30 0.0278 - 40 0.139 - 41 0.0556 - - 8 9595 38 23 - 0 0.00563 - 2 0.0308 - 3 0.0112 - 4 0.00834 - 5 0.000417 - 6 0.000104 - 7 0.235 - 8 0.0211 - 9 0.000208 - 12 0.00104 - 13 0.116 - 14 0.0552 - 15 0.0311 - 16 0.000521 - 19 0.00584 - 20 0.00073 - 21 0.0174 - 22 0.000521 - 24 0.000208 - 26 0.161 - 28 0.000104 - 29 0.000625 - 30 0.00396 - 31 0.00177 - 32 0.000208 - 33 0.000521 - 34 0.000625 - 35 0.000938 - 37 0.00427 - 39 0.00198 - 40 0.132 - 41 0.117 - 42 0.0148 - 43 0.00146 - 44 0.00208 - 45 0.00188 - 46 0.0127 - 47 0.000104 - - 2 518 18 0 - 0 0.00193 - 2 0.00965 - 7 0.0328 - 8 0.029 - 12 0.00193 - 13 0.342 - 14 0.322 - 15 0.00772 - 16 0.00386 - 19 0.00193 - 21 0.00579 - 26 0.0212 - 40 0.0927 - 41 0.0907 - 42 0.0116 - 43 0.00193 - 45 0.00579 - 46 0.0174 - - 3 34 6 0 - 8 0.0588 - 13 0.618 - 14 0.206 - 40 0.0294 - 41 0.0294 - 44 0.0588 - - 4 11 7 0 - 7 0.273 - 8 0.0909 - 13 0.182 - 14 0.0909 - 15 0.0909 - 21 0.0909 - 41 0.182 - - 7 20 7 0 - 7 0.15 - 8 0.05 - 13 0.1 - 14 0.35 - 15 0.05 - 40 0.2 - 41 0.1 - - 8 227 11 0 - 0 0.00441 - 2 0.0132 - 7 0.00441 - 8 0.0793 - 13 0.498 - 14 0.313 - 15 0.0529 - 30 0.00441 - 39 0.00441 - 40 0.00441 - 41 0.022 - - 9 15 3 0 - 2 0.0667 - 13 0.4 - 14 0.533 - - 10 29 4 0 - 8 0.069 - 13 0.621 - 14 0.276 - 41 0.0345 - - 13 23 7 0 - 2 0.13 - 7 0.304 - 8 0.174 - 13 0.087 - 14 0.087 - 40 0.087 - 41 0.13 - - 14 2 1 0 - 41 1 - - 15 54 8 0 - 8 0.111 - 13 0.259 - 14 0.037 - 15 0.519 - 16 0.0185 - 40 0.0185 - 41 0.0185 - 45 0.0185 - - 21 1945 28 0 - 0 0.00463 - 2 0.0221 - 3 0.0072 - 4 0.0118 - 7 0.217 - 8 0.0411 - 9 0.000514 - 13 0.202 - 14 0.074 - 15 0.0226 - 19 0.00308 - 21 0.00977 - 26 0.0833 - 28 0.000514 - 30 0.00463 - 31 0.000514 - 33 0.000514 - 34 0.000514 - 35 0.00103 - 37 0.00411 - 39 0.00103 - 40 0.128 - 41 0.116 - 42 0.0165 - 43 0.00206 - 44 0.00257 - 45 0.00206 - 46 0.0211 - - 22 423 21 0 - 0 0.00946 - 2 0.0402 - 3 0.00473 - 4 0.00946 - 7 0.229 - 8 0.0402 - 13 0.196 - 14 0.0757 - 15 0.00946 - 16 0.00236 - 19 0.00236 - 21 0.00473 - 26 0.13 - 30 0.00236 - 37 0.00709 - 39 0.00473 - 40 0.109 - 41 0.0969 - 42 0.0118 - 45 0.00236 - 46 0.0118 - - 23 263 15 0 - 0 0.0076 - 2 0.0114 - 7 0.076 - 8 0.0875 - 12 0.0038 - 13 0.441 - 14 0.205 - 15 0.0266 - 19 0.0038 - 26 0.0418 - 31 0.0114 - 40 0.0152 - 41 0.0532 - 42 0.0114 - 45 0.0038 - - 26 10 4 0 - 8 0.1 - 13 0.6 - 14 0.1 - 15 0.2 - - 37 1 1 0 - 19 1 - - 39 62 6 0 - 8 0.0968 - 13 0.742 - 14 0.0161 - 15 0.0161 - 31 0.0161 - 41 0.113 - - 41 59 8 0 - 2 0.0339 - 13 0.525 - 14 0.0678 - 15 0.288 - 16 0.0169 - 40 0.0169 - 41 0.0339 - 45 0.0169 - - 45 44 8 0 - 2 0.0227 - 7 0.0227 - 13 0.0455 - 21 0.0227 - 40 0.159 - 41 0.0455 - 42 0.0227 - 46 0.659 - - 47 5604 35 0 - 0 0.00625 - 2 0.0373 - 3 0.0162 - 4 0.00946 - 5 0.000714 - 7 0.294 - 8 0.00428 - 9 0.000178 - 12 0.00143 - 13 0.0121 - 14 0.00178 - 15 0.0316 - 19 0.00821 - 20 0.00125 - 21 0.0244 - 22 0.000892 - 24 0.000357 - 26 0.231 - 29 0.000892 - 30 0.00464 - 31 0.00214 - 32 0.000178 - 33 0.000714 - 34 0.000892 - 35 0.00125 - 37 0.00482 - 39 0.0025 - 40 0.155 - 41 0.118 - 42 0.0162 - 43 0.00161 - 44 0.00214 - 45 0.00125 - 46 0.00642 - 47 0.000178 - - 49 92 12 0 - 0 0.0109 - 2 0.0109 - 6 0.0109 - 7 0.25 - 8 0.0217 - 13 0.141 - 14 0.0761 - 26 0.141 - 40 0.152 - 41 0.141 - 42 0.0217 - 46 0.0217 - - 50 4 2 0 - 2 0.25 - 14 0.75 - - 55 141 13 0 - 0 0.00709 - 2 0.0496 - 7 0.0638 - 13 0.00709 - 21 0.0213 - 29 0.00709 - 30 0.00709 - 32 0.00709 - 37 0.0213 - 40 0.135 - 41 0.652 - 42 0.0142 - 44 0.00709 - - 60 4 2 0 - 13 0.75 - 40 0.25 - - 9 829 25 8 - 0 0.00362 - 2 0.0338 - 3 0.00362 - 4 0.00362 - 7 0.422 - 8 0.0169 - 12 0.00241 - 13 0.171 - 14 0.0627 - 15 0.0109 - 17 0.00121 - 21 0.00965 - 24 0.00483 - 26 0.0627 - 29 0.00241 - 30 0.00121 - 31 0.00121 - 32 0.00241 - 37 0.00241 - 40 0.0953 - 41 0.0724 - 42 0.00844 - 43 0.00121 - 46 0.00241 - 47 0.00121 - - 2 36 12 0 - 2 0.0278 - 7 0.111 - 8 0.0556 - 13 0.167 - 14 0.25 - 15 0.0556 - 21 0.0278 - 26 0.0556 - 40 0.111 - 41 0.0556 - 42 0.0556 - 46 0.0278 - - 4 5 2 0 - 13 0.6 - 14 0.4 - - 8 9 3 0 - 2 0.222 - 13 0.556 - 14 0.222 - - 21 279 14 0 - 2 0.00717 - 3 0.0108 - 4 0.0108 - 7 0.287 - 8 0.0358 - 13 0.348 - 14 0.0932 - 15 0.0179 - 26 0.0358 - 40 0.0824 - 41 0.0573 - 42 0.00717 - 43 0.00358 - 46 0.00358 - - 47 383 20 0 - 0 0.00261 - 2 0.0601 - 7 0.517 - 8 0.00261 - 12 0.00522 - 13 0.0261 - 14 0.00261 - 15 0.00261 - 17 0.00261 - 21 0.0183 - 24 0.0104 - 26 0.102 - 29 0.00522 - 30 0.00261 - 31 0.00261 - 32 0.00522 - 37 0.00522 - 40 0.123 - 41 0.0966 - 42 0.00783 - - 49 3 2 0 - 13 0.333 - 14 0.667 - - 55 96 9 0 - 0 0.0208 - 7 0.656 - 8 0.0104 - 13 0.156 - 14 0.0625 - 26 0.0104 - 40 0.0417 - 41 0.0312 - 47 0.0104 - - 60 7 6 0 - 7 0.143 - 13 0.143 - 14 0.286 - 15 0.143 - 40 0.143 - 41 0.143 - - 10 68 16 4 - 2 0.132 - 4 0.0294 - 7 0.103 - 8 0.0441 - 13 0.294 - 14 0.0147 - 15 0.0147 - 21 0.0147 - 30 0.0441 - 31 0.0294 - 37 0.0147 - 39 0.0147 - 40 0.0147 - 41 0.191 - 42 0.0294 - 46 0.0147 - - 4 2 2 0 - 2 0.5 - 14 0.5 - - 8 12 3 0 - 8 0.167 - 13 0.75 - 41 0.0833 - - 21 12 5 0 - 7 0.0833 - 8 0.0833 - 13 0.417 - 41 0.333 - 46 0.0833 - - 47 39 13 0 - 2 0.205 - 4 0.0513 - 7 0.154 - 13 0.0769 - 15 0.0256 - 21 0.0256 - 30 0.0769 - 31 0.0513 - 37 0.0256 - 39 0.0256 - 40 0.0256 - 41 0.205 - 42 0.0513 - - 13 1034 21 11 - 0 0.0029 - 2 0.00774 - 4 0.00193 - 7 0.0338 - 8 0.088 - 9 0.00677 - 12 0.000967 - 13 0.632 - 14 0.147 - 15 0.0126 - 21 0.000967 - 26 0.0106 - 29 0.000967 - 30 0.00387 - 31 0.00677 - 33 0.000967 - 40 0.0106 - 41 0.0155 - 42 0.000967 - 44 0.0087 - 46 0.00677 - - 2 23 5 0 - 7 0.0435 - 13 0.304 - 14 0.522 - 40 0.0435 - 41 0.087 - - 3 766 12 0 - 2 0.00392 - 8 0.0914 - 9 0.00261 - 13 0.77 - 14 0.106 - 15 0.0117 - 30 0.00392 - 31 0.00522 - 40 0.00131 - 41 0.00131 - 44 0.00131 - 46 0.00131 - - 8 37 10 0 - 0 0.0811 - 2 0.0811 - 7 0.108 - 8 0.027 - 13 0.27 - 14 0.0811 - 15 0.027 - 41 0.135 - 44 0.0811 - 46 0.108 - - 9 7 5 0 - 7 0.286 - 8 0.143 - 14 0.143 - 26 0.143 - 41 0.286 - - 10 2 2 0 - 7 0.5 - 8 0.5 - - 21 7 4 0 - 7 0.429 - 14 0.286 - 40 0.143 - 44 0.143 - - 45 2 1 0 - 46 1 - - 47 48 11 0 - 2 0.0208 - 4 0.0417 - 7 0.396 - 12 0.0208 - 15 0.0417 - 26 0.188 - 30 0.0208 - 31 0.0208 - 40 0.104 - 41 0.125 - 42 0.0208 - - 49 2 2 0 - 26 0.5 - 40 0.5 - - 55 1 1 0 - 40 1 - - 60 117 12 0 - 7 0.0171 - 8 0.154 - 9 0.0427 - 13 0.291 - 14 0.41 - 15 0.00855 - 21 0.00855 - 29 0.00855 - 31 0.0171 - 33 0.00855 - 40 0.00855 - 44 0.0256 - - 14 11 8 0 - 8 0.182 - 9 0.0909 - 13 0.0909 - 14 0.0909 - 15 0.0909 - 40 0.0909 - 41 0.182 - 44 0.182 - - 15 45 14 3 - 2 0.0444 - 7 0.178 - 8 0.0444 - 13 0.2 - 14 0.111 - 15 0.178 - 16 0.0444 - 21 0.0222 - 26 0.0444 - 40 0.0444 - 41 0.0222 - 42 0.0222 - 43 0.0222 - 47 0.0222 - - 2 5 3 0 - 14 0.4 - 15 0.4 - 40 0.2 - - 15 19 8 0 - 2 0.0526 - 8 0.105 - 13 0.368 - 14 0.105 - 15 0.211 - 26 0.0526 - 42 0.0526 - 47 0.0526 - - 47 15 8 0 - 2 0.0667 - 7 0.533 - 16 0.0667 - 21 0.0667 - 26 0.0667 - 40 0.0667 - 41 0.0667 - 43 0.0667 - - 21 402 29 7 - 0 0.0199 - 2 0.0199 - 3 0.0249 - 4 0.0896 - 6 0.00249 - 7 0.216 - 8 0.0224 - 9 0.00249 - 12 0.00249 - 13 0.0249 - 14 0.00249 - 15 0.00249 - 17 0.00249 - 18 0.00498 - 19 0.00249 - 20 0.00249 - 21 0.0373 - 22 0.0522 - 26 0.197 - 28 0.00249 - 29 0.00498 - 30 0.0796 - 31 0.00746 - 33 0.00249 - 40 0.097 - 41 0.0547 - 42 0.0174 - 46 0.00249 - 47 0.00249 - - 2 9 4 0 - 8 0.444 - 21 0.333 - 40 0.111 - 41 0.111 - - 8 48 10 0 - 2 0.0208 - 4 0.0208 - 7 0.229 - 13 0.0208 - 15 0.0208 - 21 0.0208 - 26 0.479 - 40 0.0833 - 41 0.0833 - 42 0.0208 - - 21 41 10 0 - 2 0.0244 - 4 0.0244 - 7 0.439 - 8 0.0732 - 13 0.0244 - 21 0.0244 - 26 0.22 - 40 0.0732 - 41 0.0732 - 42 0.0244 - - 23 2 2 0 - 28 0.5 - 40 0.5 - - 41 3 3 0 - 8 0.333 - 21 0.333 - 30 0.333 - - 47 282 27 0 - 0 0.0248 - 2 0.0142 - 3 0.0355 - 4 0.117 - 6 0.00355 - 7 0.188 - 8 0.00355 - 9 0.00355 - 12 0.00355 - 13 0.0248 - 14 0.00355 - 17 0.00355 - 18 0.00709 - 19 0.00355 - 20 0.00355 - 21 0.0284 - 22 0.0745 - 26 0.16 - 29 0.00709 - 30 0.11 - 31 0.00709 - 33 0.00355 - 40 0.0957 - 41 0.0496 - 42 0.0177 - 46 0.00355 - 47 0.00355 - - 55 6 5 0 - 0 0.167 - 2 0.167 - 4 0.167 - 31 0.167 - 40 0.333 - - 22 62 10 2 - 0 0.0161 - 2 0.0323 - 7 0.452 - 8 0.113 - 21 0.0161 - 22 0.0161 - 26 0.0806 - 31 0.0161 - 40 0.161 - 41 0.0968 - - 21 20 7 0 - 7 0.3 - 8 0.3 - 21 0.05 - 26 0.1 - 31 0.05 - 40 0.15 - 41 0.05 - - 47 34 7 0 - 0 0.0294 - 2 0.0588 - 7 0.5 - 22 0.0294 - 26 0.0882 - 40 0.176 - 41 0.118 - - 24 11 5 0 - 7 0.273 - 21 0.0909 - 30 0.0909 - 40 0.182 - 41 0.364 - - 26 2 2 0 - 13 0.5 - 21 0.5 - - 28 7 6 0 - 4 0.143 - 7 0.286 - 13 0.143 - 19 0.143 - 42 0.143 - 46 0.143 - - 29 12 5 1 - 7 0.167 - 8 0.417 - 13 0.25 - 26 0.0833 - 41 0.0833 - - 47 4 3 0 - 7 0.5 - 26 0.25 - 41 0.25 - - 30 83 12 4 - 0 0.0361 - 2 0.012 - 7 0.157 - 8 0.0482 - 13 0.277 - 14 0.0602 - 15 0.0482 - 26 0.0723 - 40 0.169 - 41 0.0964 - 43 0.012 - 46 0.012 - - 21 28 6 0 - 8 0.143 - 13 0.5 - 14 0.0714 - 15 0.107 - 26 0.107 - 41 0.0714 - - 45 1 1 0 - 46 1 - - 47 34 8 0 - 0 0.0588 - 2 0.0294 - 7 0.294 - 13 0.0294 - 26 0.0882 - 40 0.353 - 41 0.118 - 43 0.0294 - - 49 3 3 0 - 0 0.333 - 7 0.333 - 14 0.333 - - 31 741 29 9 - 0 0.0027 - 2 0.0243 - 3 0.0121 - 4 0.0081 - 7 0.192 - 8 0.0715 - 9 0.00135 - 12 0.00135 - 13 0.19 - 14 0.117 - 15 0.0526 - 16 0.00135 - 17 0.00135 - 19 0.0027 - 21 0.00675 - 24 0.0081 - 26 0.101 - 30 0.00135 - 31 0.00135 - 37 0.00135 - 39 0.0162 - 40 0.0931 - 41 0.0607 - 42 0.0054 - 43 0.0027 - 44 0.00135 - 45 0.00675 - 46 0.0135 - 47 0.00135 - - 2 18 7 0 - 0 0.0556 - 7 0.111 - 8 0.0556 - 13 0.222 - 14 0.389 - 40 0.111 - 46 0.0556 - - 7 1 1 0 - 46 1 - - 13 13 6 0 - 2 0.0769 - 8 0.538 - 13 0.154 - 14 0.0769 - 26 0.0769 - 40 0.0769 - - 21 379 22 0 - 2 0.0132 - 3 0.0132 - 7 0.0633 - 8 0.106 - 9 0.00264 - 13 0.322 - 14 0.201 - 15 0.095 - 16 0.00264 - 21 0.00528 - 24 0.00792 - 26 0.0343 - 30 0.00264 - 31 0.00264 - 37 0.00264 - 39 0.029 - 40 0.0475 - 41 0.0237 - 42 0.00528 - 43 0.00528 - 45 0.0106 - 46 0.00528 - - 22 17 7 0 - 2 0.118 - 7 0.471 - 13 0.0588 - 14 0.0588 - 40 0.118 - 41 0.118 - 46 0.0588 - - 23 8 6 0 - 2 0.25 - 13 0.25 - 14 0.125 - 24 0.125 - 40 0.125 - 41 0.125 - - 47 268 22 0 - 0 0.00373 - 2 0.0299 - 3 0.0112 - 4 0.0224 - 7 0.358 - 8 0.00373 - 12 0.00373 - 13 0.00746 - 15 0.00746 - 17 0.00373 - 19 0.00746 - 21 0.0112 - 24 0.00746 - 26 0.224 - 39 0.00373 - 40 0.153 - 41 0.112 - 42 0.00373 - 44 0.00373 - 45 0.00373 - 46 0.0149 - 47 0.00373 - - 49 27 11 0 - 3 0.037 - 7 0.333 - 8 0.148 - 13 0.148 - 14 0.037 - 15 0.037 - 26 0.037 - 40 0.0741 - 41 0.0741 - 42 0.037 - 46 0.037 - - 55 5 3 0 - 7 0.6 - 40 0.2 - 41 0.2 - - 39 2 1 0 - 3 1 - - 40 8 3 0 - 6 0.125 - 46 0.25 - 47 0.625 - - 41 149 17 7 - 0 0.0134 - 2 0.289 - 3 0.00671 - 7 0.101 - 8 0.134 - 9 0.0134 - 13 0.0805 - 14 0.0671 - 15 0.00671 - 19 0.0268 - 21 0.121 - 22 0.0403 - 23 0.00671 - 26 0.0403 - 31 0.0134 - 39 0.0134 - 46 0.0268 - - 8 19 10 0 - 2 0.105 - 7 0.0526 - 13 0.211 - 14 0.263 - 19 0.0526 - 21 0.105 - 26 0.0526 - 31 0.0526 - 39 0.0526 - 46 0.0526 - - 9 3 1 0 - 14 1 - - 10 1 1 0 - 23 1 - - 13 2 1 0 - 13 1 - - 48 105 16 0 - 0 0.00952 - 2 0.371 - 3 0.00952 - 7 0.0571 - 8 0.162 - 9 0.019 - 13 0.0476 - 14 0.019 - 15 0.00952 - 19 0.019 - 21 0.152 - 22 0.0571 - 26 0.019 - 31 0.00952 - 39 0.00952 - 46 0.0286 - - 55 6 2 0 - 7 0.667 - 26 0.333 - - 57 6 4 0 - 0 0.167 - 7 0.5 - 8 0.167 - 19 0.167 - - 42 16 7 0 - 2 0.375 - 7 0.125 - 14 0.125 - 21 0.188 - 26 0.0625 - 32 0.0625 - 34 0.0625 - - 44 1 1 0 - 39 1 - - 45 9 6 0 - 7 0.222 - 8 0.222 - 9 0.111 - 13 0.111 - 14 0.111 - 31 0.222 - - 46 73 14 5 - 2 0.11 - 4 0.0274 - 7 0.452 - 8 0.0274 - 13 0.0959 - 14 0.0274 - 19 0.0411 - 21 0.0548 - 26 0.0959 - 29 0.0137 - 30 0.0137 - 42 0.0137 - 44 0.0137 - 45 0.0137 - - 8 56 9 0 - 2 0.0893 - 4 0.0357 - 7 0.518 - 8 0.0179 - 13 0.107 - 14 0.0179 - 19 0.0536 - 21 0.0536 - 26 0.107 - - 13 3 3 0 - 8 0.333 - 14 0.333 - 44 0.333 - - 41 3 3 0 - 21 0.333 - 30 0.333 - 45 0.333 - - 48 5 3 0 - 2 0.6 - 7 0.2 - 42 0.2 - - 57 1 1 0 - 29 1 - - 47 14411 39 31 - 0 0.00992 - 2 0.0338 - 3 0.00222 - 4 0.00583 - 5 0.000139 - 6 0.000139 - 7 0.126 - 8 0.038 - 9 0.00104 - 12 0.00257 - 13 0.193 - 14 0.0622 - 15 0.0192 - 16 0.000625 - 17 0.000208 - 18 0.000139 - 19 0.0018 - 20 0.000278 - 21 0.00971 - 22 0.000416 - 26 0.0212 - 28 0.000139 - 29 0.00597 - 30 0.00285 - 31 0.00285 - 32 0.00201 - 33 0.000971 - 34 0.000555 - 35 0.000486 - 37 0.00347 - 39 0.00118 - 40 0.263 - 41 0.155 - 42 0.0176 - 43 0.00285 - 44 0.00298 - 45 0.00167 - 46 0.00701 - 47 0.00118 - - 0 5 3 0 - 30 0.2 - 40 0.4 - 41 0.4 - - 3 187 8 0 - 4 0.0107 - 8 0.134 - 13 0.711 - 14 0.0588 - 15 0.0535 - 41 0.016 - 43 0.0107 - 44 0.00535 - - 4 28 5 0 - 8 0.357 - 13 0.5 - 14 0.0714 - 15 0.0357 - 41 0.0357 - - 6 8 5 0 - 7 0.125 - 8 0.125 - 13 0.5 - 44 0.125 - 46 0.125 - - 7 20 7 0 - 2 0.1 - 7 0.2 - 13 0.05 - 14 0.1 - 21 0.1 - 40 0.35 - 41 0.1 - - 8 6530 37 0 - 0 0.00827 - 2 0.0409 - 3 0.00322 - 4 0.00796 - 5 0.000153 - 6 0.000153 - 7 0.169 - 8 0.0297 - 9 0.000153 - 12 0.00153 - 13 0.163 - 14 0.0809 - 15 0.0204 - 16 0.000766 - 19 0.00337 - 20 0.000613 - 21 0.0139 - 22 0.000613 - 26 0.0383 - 28 0.000153 - 29 0.000919 - 30 0.00383 - 31 0.00214 - 32 0.000306 - 33 0.000766 - 34 0.000919 - 35 0.00107 - 37 0.00551 - 39 0.000766 - 40 0.194 - 41 0.168 - 42 0.0208 - 43 0.00214 - 44 0.00306 - 45 0.00245 - 46 0.0101 - 47 0.000153 - - 9 730 23 0 - 0 0.00411 - 2 0.0384 - 3 0.00411 - 4 0.00411 - 7 0.403 - 8 0.0192 - 12 0.00274 - 13 0.185 - 14 0.0712 - 15 0.0123 - 17 0.00137 - 21 0.00959 - 26 0.037 - 29 0.00274 - 31 0.00137 - 32 0.00274 - 37 0.00274 - 40 0.108 - 41 0.0781 - 42 0.00822 - 43 0.00137 - 46 0.00137 - 47 0.00137 - - 10 56 14 0 - 2 0.143 - 4 0.0357 - 7 0.0714 - 8 0.0536 - 13 0.321 - 14 0.0179 - 15 0.0179 - 21 0.0179 - 37 0.0179 - 39 0.0179 - 40 0.0179 - 41 0.214 - 42 0.0357 - 46 0.0179 - - 13 1001 21 0 - 0 0.003 - 2 0.00799 - 4 0.002 - 7 0.021 - 8 0.0909 - 9 0.00699 - 12 0.000999 - 13 0.651 - 14 0.152 - 15 0.012 - 21 0.000999 - 26 0.000999 - 29 0.000999 - 30 0.003 - 31 0.00699 - 33 0.000999 - 40 0.011 - 41 0.014 - 42 0.000999 - 44 0.00799 - 46 0.004 - - 14 10 7 0 - 8 0.2 - 9 0.1 - 13 0.1 - 14 0.1 - 40 0.1 - 41 0.2 - 44 0.2 - - 15 39 13 0 - 2 0.0513 - 7 0.179 - 8 0.0513 - 13 0.231 - 14 0.128 - 15 0.128 - 16 0.0513 - 21 0.0256 - 40 0.0513 - 41 0.0256 - 42 0.0256 - 43 0.0256 - 47 0.0256 - - 21 161 21 0 - 0 0.0373 - 2 0.0435 - 4 0.0683 - 7 0.224 - 8 0.0373 - 9 0.00621 - 12 0.00621 - 13 0.0124 - 17 0.00621 - 18 0.0124 - 21 0.0559 - 22 0.00621 - 26 0.0248 - 30 0.00621 - 31 0.0186 - 33 0.00621 - 40 0.236 - 41 0.137 - 42 0.0435 - 46 0.00621 - 47 0.00621 - - 22 58 10 0 - 0 0.0172 - 2 0.0345 - 7 0.448 - 8 0.121 - 21 0.0172 - 22 0.0172 - 26 0.0517 - 31 0.0172 - 40 0.172 - 41 0.103 - - 24 9 4 0 - 7 0.222 - 21 0.111 - 40 0.222 - 41 0.444 - - 28 5 5 0 - 4 0.2 - 13 0.2 - 19 0.2 - 42 0.2 - 46 0.2 - - 29 10 4 0 - 7 0.1 - 8 0.5 - 13 0.3 - 41 0.1 - - 30 74 11 0 - 0 0.0405 - 2 0.0135 - 7 0.122 - 8 0.0541 - 13 0.311 - 14 0.0676 - 15 0.0541 - 26 0.027 - 40 0.189 - 41 0.108 - 43 0.0135 - - 31 530 25 0 - 0 0.00377 - 2 0.034 - 3 0.0113 - 7 0.0585 - 8 0.1 - 9 0.00189 - 12 0.00189 - 13 0.266 - 14 0.164 - 15 0.0717 - 16 0.00189 - 17 0.00189 - 21 0.00566 - 26 0.00189 - 30 0.00189 - 31 0.00189 - 37 0.00189 - 39 0.0208 - 40 0.13 - 41 0.083 - 42 0.00755 - 43 0.00377 - 45 0.00755 - 46 0.0151 - 47 0.00189 - - 40 8 3 0 - 6 0.125 - 46 0.25 - 47 0.625 - - 41 29 9 0 - 0 0.069 - 7 0.0345 - 8 0.0345 - 13 0.414 - 14 0.31 - 15 0.0345 - 26 0.0345 - 31 0.0345 - 46 0.0345 - - 42 5 4 0 - 2 0.2 - 7 0.2 - 14 0.4 - 32 0.2 - - 46 27 11 0 - 2 0.148 - 7 0.222 - 8 0.0741 - 13 0.259 - 14 0.0741 - 19 0.037 - 26 0.037 - 29 0.037 - 30 0.037 - 42 0.037 - 44 0.037 - - 48 221 17 0 - 0 0.00452 - 2 0.0136 - 7 0.0588 - 8 0.0452 - 12 0.00452 - 13 0.167 - 14 0.104 - 15 0.0226 - 16 0.00452 - 21 0.00452 - 26 0.0136 - 30 0.0136 - 40 0.385 - 41 0.109 - 42 0.0317 - 44 0.00452 - 46 0.0136 - - 49 12 4 0 - 2 0.0833 - 7 0.0833 - 40 0.5 - 41 0.333 - - 55 300 18 0 - 0 0.0467 - 2 0.0267 - 3 0.00333 - 7 0.03 - 8 0.00333 - 9 0.00333 - 12 0.0133 - 13 0.0233 - 21 0.01 - 26 0.01 - 29 0.0833 - 31 0.03 - 32 0.0133 - 37 0.00333 - 40 0.213 - 41 0.47 - 42 0.0133 - 46 0.00333 - - 57 2237 27 0 - 0 0.0152 - 2 0.0434 - 4 0.00358 - 7 0.0724 - 8 0.00134 - 12 0.00581 - 13 0.00179 - 14 0.00224 - 15 0.000447 - 19 0.000894 - 21 0.00492 - 26 0.00402 - 28 0.000447 - 29 0.0219 - 30 0.000894 - 32 0.00894 - 33 0.00268 - 34 0.000447 - 37 0.00268 - 40 0.553 - 41 0.219 - 42 0.0259 - 43 0.00134 - 44 0.000894 - 45 0.000894 - 46 0.00358 - 47 0.000894 - - 58 36 11 0 - 2 0.0556 - 7 0.0556 - 8 0.0278 - 13 0.528 - 14 0.0556 - 15 0.0278 - 26 0.0278 - 30 0.0278 - 40 0.0833 - 41 0.0833 - 47 0.0278 - - 59 7 5 0 - 3 0.143 - 7 0.286 - 8 0.286 - 21 0.143 - 40 0.143 - - 60 706 15 0 - 2 0.00142 - 4 0.00283 - 8 0.154 - 9 0.00425 - 13 0.687 - 14 0.00992 - 15 0.0793 - 21 0.00142 - 29 0.00142 - 30 0.00283 - 31 0.00567 - 41 0.0142 - 43 0.0241 - 44 0.0085 - 45 0.00283 - - 62 898 17 0 - 0 0.0189 - 2 0.0156 - 7 0.0746 - 12 0.00445 - 13 0.00111 - 21 0.00557 - 29 0.00111 - 30 0.00111 - 33 0.00111 - 34 0.00111 - 37 0.00334 - 40 0.653 - 41 0.199 - 42 0.0134 - 44 0.00111 - 46 0.00223 - 47 0.00334 - - 64 460 11 0 - 0 0.00652 - 2 0.0283 - 4 0.00217 - 5 0.00217 - 7 0.0326 - 21 0.00217 - 40 0.672 - 41 0.222 - 42 0.0283 - 46 0.00217 - 47 0.00217 - - 48 1047 22 10 - 0 0.000955 - 2 0.165 - 4 0.00573 - 7 0.449 - 8 0.0115 - 12 0.000955 - 13 0.0363 - 14 0.022 - 15 0.00478 - 16 0.000955 - 19 0.000955 - 21 0.00955 - 22 0.000955 - 26 0.0229 - 30 0.00287 - 31 0.000955 - 40 0.0812 - 41 0.129 - 42 0.0229 - 43 0.000955 - 44 0.0229 - 46 0.00764 - - 2 207 18 0 - 0 0.00483 - 2 0.0193 - 4 0.00483 - 7 0.0773 - 8 0.0435 - 12 0.00483 - 13 0.164 - 14 0.106 - 15 0.0145 - 16 0.00483 - 21 0.00966 - 26 0.00966 - 30 0.0145 - 40 0.319 - 41 0.135 - 42 0.0483 - 44 0.00966 - 46 0.00966 - - 4 3 1 0 - 2 1 - - 7 5 3 0 - 8 0.4 - 40 0.4 - 41 0.2 - - 21 10 4 0 - 2 0.1 - 15 0.1 - 40 0.4 - 41 0.4 - - 41 42 8 0 - 2 0.452 - 13 0.0238 - 15 0.0238 - 21 0.0476 - 40 0.119 - 41 0.286 - 44 0.0238 - 46 0.0238 - - 42 3 2 0 - 40 0.667 - 41 0.333 - - 44 1 1 0 - 43 1 - - 45 12 5 0 - 2 0.0833 - 7 0.167 - 40 0.167 - 41 0.167 - 46 0.417 - - 47 750 13 0 - 2 0.191 - 4 0.00667 - 7 0.603 - 8 0.00133 - 13 0.00133 - 19 0.00133 - 21 0.008 - 22 0.00133 - 26 0.028 - 31 0.00133 - 41 0.111 - 42 0.0187 - 44 0.028 - - 50 4 2 0 - 14 0.25 - 41 0.75 - - 49 35 9 3 - 2 0.0286 - 7 0.229 - 8 0.0571 - 13 0.0857 - 15 0.0857 - 21 0.0286 - 26 0.114 - 40 0.171 - 41 0.2 - - 8 16 8 0 - 2 0.0625 - 7 0.125 - 8 0.0625 - 13 0.188 - 15 0.188 - 21 0.0625 - 26 0.25 - 40 0.0625 - - 47 5 2 0 - 7 0.8 - 41 0.2 - - 48 7 3 0 - 7 0.143 - 40 0.571 - 41 0.286 - - 50 4 2 0 - 8 0.75 - 31 0.25 - - 55 335 19 8 - 0 0.0418 - 2 0.0239 - 3 0.00299 - 7 0.0478 - 8 0.00299 - 9 0.00299 - 12 0.0119 - 13 0.0209 - 21 0.00896 - 26 0.0716 - 29 0.0746 - 31 0.0269 - 32 0.0119 - 37 0.00299 - 40 0.191 - 41 0.439 - 42 0.0119 - 43 0.00299 - 46 0.00299 - - 7 4 1 0 - 40 1 - - 8 287 17 0 - 0 0.0418 - 2 0.0279 - 3 0.00348 - 7 0.0279 - 8 0.00348 - 12 0.00697 - 13 0.00697 - 21 0.00697 - 26 0.0836 - 29 0.0871 - 31 0.0314 - 32 0.0105 - 37 0.00348 - 40 0.199 - 41 0.446 - 42 0.0105 - 46 0.00348 - - 21 14 6 0 - 0 0.0714 - 7 0.357 - 12 0.0714 - 21 0.0714 - 32 0.0714 - 41 0.357 - - 31 3 3 0 - 0 0.333 - 12 0.333 - 40 0.333 - - 44 1 1 0 - 43 1 - - 47 1 1 0 - 9 1 - - 48 7 4 0 - 7 0.143 - 13 0.429 - 40 0.143 - 41 0.286 - - 49 8 4 0 - 7 0.125 - 40 0.125 - 41 0.625 - 42 0.125 - - 57 2329 28 15 - 0 0.0146 - 2 0.0416 - 4 0.00386 - 7 0.0932 - 8 0.00129 - 9 0.000429 - 12 0.00558 - 13 0.00215 - 14 0.00215 - 15 0.000859 - 19 0.000859 - 21 0.00558 - 26 0.0125 - 28 0.000429 - 29 0.021 - 30 0.000859 - 32 0.00859 - 33 0.00258 - 34 0.000429 - 37 0.00258 - 40 0.532 - 41 0.213 - 42 0.0258 - 43 0.00129 - 44 0.000859 - 45 0.000859 - 46 0.00386 - 47 0.000859 - - 2 1 1 0 - 9 1 - - 7 12 3 0 - 2 0.0833 - 7 0.333 - 40 0.583 - - 8 1515 26 0 - 0 0.0165 - 2 0.0436 - 4 0.00198 - 7 0.0904 - 8 0.00132 - 12 0.00726 - 13 0.00198 - 14 0.00198 - 15 0.00132 - 19 0.00132 - 21 0.00528 - 26 0.0112 - 28 0.00066 - 29 0.0277 - 30 0.00066 - 32 0.00858 - 33 0.00132 - 34 0.00066 - 37 0.00264 - 40 0.525 - 41 0.222 - 42 0.0205 - 43 0.00132 - 44 0.00066 - 46 0.0033 - 47 0.00066 - - 9 57 9 0 - 0 0.0351 - 2 0.0526 - 4 0.0526 - 7 0.228 - 8 0.0175 - 14 0.0175 - 40 0.421 - 41 0.14 - 42 0.0351 - - 13 19 7 0 - 0 0.0526 - 7 0.158 - 26 0.0526 - 37 0.0526 - 40 0.368 - 41 0.263 - 45 0.0526 - - 21 76 13 0 - 0 0.0132 - 2 0.0263 - 7 0.0658 - 21 0.0132 - 26 0.0658 - 29 0.0526 - 32 0.0526 - 33 0.0395 - 37 0.0132 - 40 0.408 - 41 0.224 - 42 0.0132 - 47 0.0132 - - 31 139 13 0 - 0 0.0144 - 2 0.0647 - 4 0.00719 - 7 0.0719 - 21 0.00719 - 29 0.00719 - 32 0.0144 - 33 0.00719 - 40 0.532 - 41 0.245 - 42 0.0144 - 43 0.00719 - 45 0.00719 - - 32 2 2 0 - 29 0.5 - 32 0.5 - - 42 2 2 0 - 40 0.5 - 46 0.5 - - 46 30 5 0 - 2 0.0667 - 7 0.0333 - 40 0.7 - 41 0.167 - 42 0.0333 - - 48 350 15 0 - 0 0.00571 - 2 0.0343 - 4 0.00571 - 7 0.114 - 12 0.00286 - 13 0.00286 - 14 0.00286 - 21 0.00857 - 26 0.0143 - 30 0.00286 - 40 0.569 - 41 0.186 - 42 0.0429 - 44 0.00286 - 46 0.00571 - - 55 27 3 0 - 40 0.815 - 41 0.0741 - 42 0.111 - - 57 54 7 0 - 2 0.0185 - 7 0.0185 - 12 0.0185 - 29 0.0185 - 40 0.685 - 41 0.222 - 42 0.0185 - - 58 1 1 0 - 46 1 - - 60 1 1 0 - 13 1 - - 58 55 15 3 - 2 0.0545 - 4 0.0182 - 7 0.164 - 8 0.0182 - 13 0.345 - 14 0.0364 - 15 0.0182 - 19 0.0182 - 21 0.0182 - 23 0.0182 - 26 0.0909 - 30 0.0182 - 40 0.0545 - 41 0.109 - 47 0.0182 - - 2 2 2 0 - 21 0.5 - 23 0.5 - - 8 10 5 0 - 4 0.1 - 7 0.3 - 13 0.1 - 19 0.1 - 26 0.4 - - 48 37 11 0 - 2 0.0811 - 7 0.108 - 8 0.027 - 13 0.459 - 14 0.027 - 15 0.027 - 26 0.027 - 30 0.027 - 40 0.0541 - 41 0.135 - 47 0.027 - - 59 11 6 0 - 3 0.0909 - 7 0.364 - 8 0.182 - 21 0.0909 - 26 0.182 - 40 0.0909 - - 60 708 16 1 - 2 0.00141 - 4 0.00282 - 7 0.00141 - 8 0.154 - 9 0.00424 - 13 0.685 - 14 0.00989 - 15 0.0791 - 21 0.00141 - 29 0.00141 - 30 0.00282 - 31 0.00565 - 41 0.0155 - 43 0.024 - 44 0.00847 - 45 0.00282 - - 8 1 1 0 - 29 1 - - 62 909 18 4 - 0 0.0187 - 2 0.0154 - 7 0.0781 - 12 0.0044 - 13 0.0011 - 21 0.0066 - 26 0.0011 - 29 0.0011 - 30 0.0011 - 33 0.0011 - 34 0.0011 - 37 0.0066 - 40 0.646 - 41 0.197 - 42 0.0132 - 44 0.0011 - 46 0.0033 - 47 0.0033 - - 9 6 2 0 - 7 0.5 - 40 0.5 - - 21 35 7 0 - 0 0.114 - 2 0.0286 - 33 0.0286 - 40 0.657 - 41 0.114 - 42 0.0286 - 47 0.0286 - - 31 30 2 0 - 40 0.867 - 41 0.133 - - 57 15 3 0 - 37 0.2 - 40 0.533 - 41 0.267 - - 64 463 12 2 - 0 0.00648 - 2 0.0281 - 4 0.00216 - 5 0.00216 - 7 0.0346 - 21 0.00216 - 26 0.00216 - 40 0.667 - 41 0.22 - 42 0.0302 - 46 0.00216 - 47 0.00216 - - 9 16 5 0 - 0 0.0625 - 2 0.0625 - 7 0.25 - 40 0.438 - 41 0.188 - - 58 8 2 0 - 40 0.875 - 47 0.125 - -49 42263 41 35 - 0 0.065 - 1 0.00182 - 2 0.0136 - 3 0.0157 - 4 0.0309 - 5 0.00128 - 7 0.159 - 8 0.0225 - 9 0.00199 - 10 0.000118 - 12 0.0152 - 13 0.00757 - 14 0.00327 - 15 0.00613 - 16 9.46e-05 - 17 7.1e-05 - 19 0.0103 - 20 0.00149 - 21 0.0208 - 22 0.00442 - 23 0.000189 - 24 0.00026 - 26 0.0331 - 28 0.0399 - 29 0.067 - 30 0.0304 - 31 0.063 - 32 0.0227 - 33 0.0363 - 34 0.000284 - 35 0.00133 - 37 0.00338 - 39 0.00251 - 40 0.131 - 41 0.171 - 42 0.00989 - 43 0.000875 - 44 0.000592 - 45 0.00163 - 46 0.00244 - 47 0.00128 - - 2 55 16 5 - 0 0.0182 - 3 0.109 - 4 0.0364 - 7 0.109 - 8 0.0545 - 9 0.0182 - 19 0.0182 - 21 0.236 - 22 0.109 - 26 0.0182 - 28 0.0182 - 29 0.0909 - 31 0.0727 - 39 0.0182 - 41 0.0545 - 45 0.0182 - - 4 9 4 0 - 8 0.111 - 28 0.111 - 29 0.444 - 31 0.333 - - 22 3 1 0 - 22 1 - - 41 7 4 0 - 3 0.286 - 7 0.143 - 21 0.429 - 39 0.143 - - 47 10 9 0 - 0 0.1 - 7 0.1 - 8 0.1 - 19 0.1 - 21 0.1 - 26 0.1 - 29 0.1 - 31 0.1 - 41 0.2 - - 49 23 7 0 - 3 0.174 - 4 0.087 - 7 0.174 - 8 0.0435 - 21 0.348 - 22 0.13 - 45 0.0435 - - 3 20 7 1 - 2 0.05 - 7 0.1 - 14 0.05 - 15 0.05 - 26 0.05 - 40 0.35 - 41 0.35 - - 47 8 4 0 - 2 0.125 - 15 0.125 - 26 0.125 - 41 0.625 - - 4 84 15 3 - 0 0.0357 - 4 0.0119 - 7 0.19 - 8 0.0595 - 13 0.0238 - 14 0.0238 - 26 0.0119 - 28 0.0119 - 29 0.0119 - 30 0.0119 - 31 0.0357 - 32 0.0476 - 40 0.333 - 41 0.179 - 42 0.0119 - - 7 52 8 0 - 0 0.0192 - 4 0.0192 - 7 0.115 - 8 0.0385 - 28 0.0192 - 31 0.0192 - 40 0.481 - 41 0.288 - - 21 4 2 0 - 8 0.5 - 13 0.5 - - 47 28 11 0 - 0 0.0714 - 7 0.357 - 8 0.0357 - 14 0.0714 - 26 0.0357 - 29 0.0357 - 30 0.0357 - 31 0.0714 - 32 0.143 - 40 0.107 - 42 0.0357 - - 5 2 2 0 - 0 0.5 - 35 0.5 - - 6 7 4 0 - 15 0.143 - 41 0.571 - 42 0.143 - 46 0.143 - - 7 697 30 8 - 0 0.0143 - 2 0.0201 - 3 0.187 - 4 0.0459 - 5 0.00143 - 7 0.244 - 8 0.0244 - 12 0.0043 - 13 0.01 - 14 0.00717 - 15 0.01 - 17 0.00143 - 19 0.00717 - 20 0.00574 - 21 0.0301 - 22 0.0043 - 26 0.0301 - 28 0.00717 - 29 0.0258 - 30 0.0115 - 31 0.0359 - 32 0.0043 - 33 0.00717 - 35 0.00143 - 39 0.0258 - 40 0.115 - 41 0.109 - 42 0.00287 - 45 0.00143 - 47 0.00574 - - 2 9 3 0 - 7 0.111 - 21 0.556 - 41 0.333 - - 4 7 5 0 - 0 0.143 - 4 0.143 - 19 0.143 - 40 0.286 - 41 0.286 - - 9 8 4 0 - 8 0.25 - 29 0.25 - 30 0.125 - 31 0.375 - - 13 12 10 0 - 2 0.0833 - 8 0.25 - 13 0.0833 - 29 0.0833 - 30 0.0833 - 31 0.0833 - 33 0.0833 - 40 0.0833 - 41 0.0833 - 42 0.0833 - - 21 28 11 0 - 3 0.0357 - 4 0.25 - 7 0.179 - 8 0.0714 - 13 0.107 - 15 0.0357 - 21 0.0357 - 26 0.0357 - 30 0.0714 - 40 0.107 - 41 0.0714 - - 22 33 8 0 - 8 0.182 - 21 0.0303 - 28 0.152 - 29 0.212 - 30 0.0303 - 31 0.273 - 32 0.0606 - 33 0.0606 - - 47 482 28 0 - 0 0.0145 - 2 0.0228 - 3 0.268 - 4 0.0436 - 7 0.332 - 8 0.00622 - 12 0.00207 - 13 0.00622 - 14 0.0104 - 15 0.0124 - 17 0.00207 - 19 0.0083 - 20 0.00622 - 21 0.0249 - 22 0.00622 - 26 0.0332 - 29 0.00622 - 30 0.00622 - 31 0.0207 - 32 0.00207 - 33 0.00207 - 35 0.00207 - 39 0.0373 - 40 0.0581 - 41 0.0539 - 42 0.00207 - 45 0.00207 - 47 0.0083 - - 55 114 14 0 - 0 0.0175 - 2 0.0175 - 4 0.0263 - 5 0.00877 - 7 0.0351 - 12 0.0175 - 20 0.00877 - 21 0.0175 - 26 0.0351 - 29 0.0439 - 31 0.00877 - 33 0.00877 - 40 0.404 - 41 0.351 - - 8 310 25 8 - 0 0.00323 - 2 0.00968 - 3 0.0129 - 4 0.0161 - 7 0.31 - 8 0.0161 - 9 0.00323 - 12 0.00323 - 13 0.0419 - 14 0.0226 - 15 0.029 - 19 0.00323 - 21 0.00968 - 26 0.142 - 29 0.00968 - 30 0.00645 - 32 0.00323 - 35 0.00645 - 37 0.00323 - 40 0.129 - 41 0.19 - 42 0.0129 - 43 0.00645 - 46 0.00645 - 47 0.00323 - - 2 5 3 0 - 4 0.2 - 7 0.2 - 41 0.6 - - 4 6 4 0 - 7 0.333 - 40 0.167 - 41 0.167 - 42 0.333 - - 7 5 4 0 - 13 0.2 - 29 0.2 - 40 0.4 - 41 0.2 - - 21 71 10 0 - 4 0.0423 - 7 0.451 - 13 0.0845 - 14 0.0141 - 15 0.0282 - 26 0.127 - 29 0.0141 - 35 0.0141 - 40 0.0845 - 41 0.141 - - 22 7 3 0 - 7 0.286 - 41 0.571 - 46 0.143 - - 23 4 4 0 - 9 0.25 - 14 0.25 - 26 0.25 - 41 0.25 - - 28 2 1 0 - 13 1 - - 47 204 24 0 - 0 0.0049 - 2 0.0147 - 3 0.0196 - 4 0.0049 - 7 0.275 - 8 0.0245 - 12 0.0049 - 13 0.0196 - 14 0.0245 - 15 0.0294 - 19 0.0049 - 21 0.0147 - 26 0.167 - 29 0.0049 - 30 0.0098 - 32 0.0049 - 35 0.0049 - 37 0.0049 - 40 0.142 - 41 0.191 - 42 0.0098 - 43 0.0098 - 46 0.0049 - 47 0.0049 - - 9 132 13 4 - 0 0.00758 - 2 0.0152 - 4 0.0303 - 7 0.508 - 8 0.0303 - 13 0.053 - 14 0.0152 - 15 0.0303 - 21 0.00758 - 26 0.053 - 33 0.00758 - 40 0.106 - 41 0.136 - - 4 4 3 0 - 13 0.25 - 15 0.25 - 41 0.5 - - 21 29 10 0 - 0 0.0345 - 4 0.103 - 7 0.379 - 8 0.103 - 13 0.103 - 15 0.069 - 26 0.0345 - 33 0.0345 - 40 0.103 - 41 0.0345 - - 47 55 9 0 - 2 0.0182 - 4 0.0182 - 7 0.473 - 13 0.0364 - 15 0.0182 - 21 0.0182 - 26 0.0545 - 40 0.164 - 41 0.2 - - 55 39 7 0 - 2 0.0256 - 7 0.692 - 13 0.0256 - 14 0.0256 - 26 0.0769 - 40 0.0513 - 41 0.103 - - 10 131 21 1 - 0 0.0229 - 3 0.0382 - 4 0.191 - 5 0.0153 - 7 0.183 - 8 0.0611 - 13 0.0534 - 15 0.0153 - 19 0.0458 - 20 0.00763 - 21 0.107 - 26 0.0153 - 28 0.0229 - 29 0.00763 - 30 0.0153 - 31 0.0229 - 33 0.00763 - 37 0.0153 - 40 0.0305 - 41 0.107 - 42 0.0153 - - 47 7 5 0 - 0 0.143 - 7 0.286 - 26 0.143 - 31 0.286 - 40 0.143 - - 11 6 1 0 - 41 1 - - 13 92 23 6 - 0 0.0217 - 2 0.0543 - 4 0.0326 - 7 0.293 - 8 0.0217 - 9 0.0109 - 13 0.0217 - 15 0.0109 - 19 0.0109 - 21 0.0217 - 26 0.109 - 28 0.0109 - 29 0.0326 - 30 0.0109 - 31 0.0217 - 32 0.0109 - 33 0.0109 - 34 0.0109 - 35 0.0217 - 37 0.0217 - 40 0.13 - 41 0.0978 - 42 0.0109 - - 2 3 2 0 - 7 0.667 - 42 0.333 - - 3 2 2 0 - 9 0.5 - 13 0.5 - - 4 11 9 0 - 0 0.0909 - 7 0.0909 - 13 0.0909 - 28 0.0909 - 30 0.0909 - 33 0.0909 - 35 0.182 - 37 0.182 - 40 0.0909 - - 7 6 5 0 - 7 0.167 - 8 0.167 - 26 0.167 - 40 0.333 - 41 0.167 - - 8 11 7 0 - 2 0.0909 - 7 0.182 - 8 0.0909 - 19 0.0909 - 26 0.273 - 32 0.0909 - 40 0.182 - - 47 50 12 0 - 0 0.02 - 2 0.04 - 4 0.06 - 7 0.34 - 15 0.02 - 21 0.02 - 26 0.12 - 29 0.06 - 31 0.04 - 34 0.02 - 40 0.12 - 41 0.14 - - 14 5 3 0 - 2 0.4 - 7 0.2 - 26 0.4 - - 15 26 4 0 - 4 0.0385 - 15 0.0769 - 40 0.0385 - 41 0.846 - - 19 6 4 0 - 0 0.333 - 7 0.167 - 40 0.167 - 41 0.333 - - 21 17337 41 14 - 0 0.0758 - 1 0.00225 - 2 0.01 - 3 0.0253 - 4 0.0318 - 5 0.00127 - 7 0.155 - 8 0.0237 - 9 0.00323 - 10 0.000173 - 12 0.018 - 13 0.00675 - 14 0.00271 - 15 0.00583 - 16 0.000115 - 17 5.77e-05 - 19 0.0114 - 20 0.00144 - 21 0.0224 - 22 0.00848 - 23 0.000231 - 24 0.000404 - 26 0.0337 - 28 0.0465 - 29 0.0786 - 30 0.0359 - 31 0.0731 - 32 0.0269 - 33 0.0436 - 34 0.000115 - 35 0.00121 - 37 0.00335 - 39 0.00438 - 40 0.0751 - 41 0.159 - 42 0.00594 - 43 0.000577 - 44 0.00075 - 45 0.00173 - 46 0.0026 - 47 0.000577 - - 2 80 22 0 - 0 0.0125 - 2 0.025 - 3 0.0125 - 4 0.0125 - 7 0.188 - 8 0.0125 - 10 0.0125 - 15 0.0125 - 19 0.0125 - 21 0.05 - 22 0.0125 - 26 0.025 - 28 0.0125 - 29 0.0125 - 30 0.025 - 31 0.0625 - 32 0.0125 - 40 0.175 - 41 0.262 - 42 0.025 - 44 0.0125 - 45 0.0125 - - 4 12 7 0 - 0 0.0833 - 4 0.0833 - 8 0.333 - 19 0.0833 - 22 0.0833 - 26 0.0833 - 40 0.25 - - 7 72 14 0 - 0 0.0417 - 2 0.0278 - 4 0.125 - 7 0.0556 - 8 0.0139 - 9 0.0278 - 15 0.0278 - 21 0.0139 - 26 0.0278 - 30 0.0278 - 31 0.0417 - 40 0.153 - 41 0.389 - 42 0.0278 - - 10 4 2 0 - 4 0.75 - 15 0.25 - - 19 1 1 0 - 13 1 - - 21 886 32 0 - 0 0.044 - 2 0.0135 - 3 0.00113 - 4 0.044 - 5 0.00339 - 7 0.31 - 8 0.0282 - 9 0.00226 - 10 0.00113 - 12 0.00903 - 13 0.00339 - 14 0.00339 - 15 0.00226 - 19 0.0113 - 21 0.0147 - 22 0.00564 - 26 0.035 - 28 0.0181 - 29 0.0169 - 30 0.00677 - 31 0.0406 - 32 0.00903 - 33 0.0169 - 35 0.00339 - 37 0.00564 - 40 0.159 - 41 0.172 - 42 0.0102 - 43 0.00226 - 44 0.00226 - 45 0.00113 - 46 0.00339 - - 22 117 12 0 - 2 0.00855 - 4 0.0171 - 7 0.342 - 8 0.0598 - 26 0.0427 - 28 0.0513 - 30 0.0171 - 31 0.0598 - 37 0.0171 - 40 0.094 - 41 0.274 - 42 0.0171 - - 23 34 13 0 - 0 0.0294 - 2 0.0294 - 7 0.0588 - 8 0.118 - 12 0.0882 - 14 0.0294 - 15 0.0882 - 19 0.0294 - 29 0.0294 - 31 0.235 - 32 0.0294 - 41 0.206 - 43 0.0294 - - 24 3 3 0 - 7 0.333 - 40 0.333 - 46 0.333 - - 41 2 2 0 - 3 0.5 - 4 0.5 - - 45 3 3 0 - 7 0.333 - 21 0.333 - 46 0.333 - - 47 15577 41 0 - 0 0.0812 - 1 0.0025 - 2 0.00905 - 3 0.0279 - 4 0.0315 - 5 0.00122 - 7 0.146 - 8 0.0237 - 9 0.00327 - 10 6.42e-05 - 12 0.0193 - 13 0.00719 - 14 0.00276 - 15 0.00578 - 16 0.000128 - 17 6.42e-05 - 19 0.0115 - 20 0.0016 - 21 0.0236 - 22 0.00899 - 23 0.000257 - 24 0.000449 - 26 0.0343 - 28 0.0503 - 29 0.0859 - 30 0.0391 - 31 0.0774 - 32 0.0293 - 33 0.0475 - 34 0.000128 - 35 0.00116 - 37 0.00308 - 39 0.00488 - 40 0.0583 - 41 0.149 - 42 0.00507 - 43 0.000449 - 44 0.000642 - 45 0.0018 - 46 0.0025 - 47 0.000642 - - 49 10 5 0 - 3 0.1 - 7 0.4 - 9 0.1 - 40 0.2 - 41 0.2 - - 55 526 17 0 - 0 0.0076 - 2 0.0285 - 4 0.00951 - 7 0.12 - 13 0.0019 - 15 0.0038 - 19 0.00951 - 26 0.0152 - 29 0.0152 - 30 0.0019 - 31 0.0019 - 33 0.0019 - 37 0.0057 - 40 0.395 - 41 0.363 - 42 0.0171 - 46 0.0019 - - 22 718 21 5 - 0 0.00418 - 2 0.0334 - 3 0.00139 - 4 0.0432 - 7 0.297 - 8 0.0752 - 12 0.00279 - 13 0.00279 - 21 0.00696 - 26 0.0306 - 28 0.0306 - 29 0.00696 - 30 0.00557 - 31 0.0153 - 32 0.00139 - 33 0.00418 - 40 0.298 - 41 0.127 - 42 0.0111 - 43 0.00139 - 45 0.00139 - - 2 11 5 0 - 7 0.364 - 8 0.0909 - 28 0.0909 - 40 0.0909 - 41 0.364 - - 4 13 6 0 - 7 0.231 - 8 0.385 - 13 0.0769 - 30 0.154 - 32 0.0769 - 42 0.0769 - - 21 114 13 0 - 2 0.0263 - 4 0.0263 - 7 0.289 - 8 0.325 - 12 0.00877 - 21 0.0351 - 26 0.0351 - 28 0.0439 - 30 0.0175 - 31 0.0263 - 33 0.0175 - 40 0.105 - 41 0.0439 - - 47 311 19 0 - 0 0.00322 - 2 0.0482 - 3 0.00322 - 4 0.0836 - 7 0.476 - 8 0.0161 - 12 0.00322 - 13 0.00322 - 21 0.00322 - 26 0.0482 - 28 0.0514 - 29 0.0161 - 31 0.0257 - 33 0.00322 - 40 0.109 - 41 0.09 - 42 0.00965 - 43 0.00322 - 45 0.00322 - - 55 266 9 0 - 0 0.00752 - 2 0.0226 - 4 0.00752 - 7 0.0827 - 8 0.0226 - 26 0.0113 - 40 0.628 - 41 0.203 - 42 0.015 - - 23 36 13 1 - 0 0.0278 - 4 0.0278 - 7 0.194 - 8 0.0278 - 12 0.0278 - 21 0.0278 - 26 0.0556 - 28 0.0556 - 31 0.389 - 32 0.0278 - 40 0.0556 - 41 0.0278 - 42 0.0556 - - 7 2 2 0 - 12 0.5 - 21 0.5 - - 24 95 19 2 - 0 0.0105 - 2 0.0105 - 3 0.0316 - 4 0.0421 - 7 0.232 - 8 0.0105 - 13 0.0211 - 14 0.0421 - 15 0.0105 - 20 0.0211 - 21 0.0421 - 26 0.0632 - 30 0.0316 - 39 0.0105 - 40 0.274 - 41 0.116 - 42 0.0105 - 46 0.0105 - 47 0.0105 - - 2 1 1 0 - 42 1 - - 8 1 1 0 - 0 1 - - 28 6 3 0 - 8 0.167 - 28 0.333 - 41 0.5 - - 29 1 1 0 - 42 1 - - 31 4 3 0 - 13 0.25 - 26 0.5 - 40 0.25 - - 37 3 2 0 - 4 0.333 - 41 0.667 - - 40 10 3 0 - 43 0.1 - 46 0.1 - 47 0.8 - - 41 32 10 2 - 2 0.219 - 3 0.0625 - 4 0.0312 - 7 0.219 - 8 0.0312 - 21 0.0625 - 26 0.0312 - 29 0.0625 - 31 0.0312 - 37 0.25 - - 21 2 1 0 - 29 1 - - 57 3 1 0 - 7 1 - - 42 3 3 0 - 2 0.333 - 7 0.333 - 22 0.333 - - 46 7 4 0 - 7 0.571 - 8 0.143 - 26 0.143 - 47 0.143 - - 47 19808 41 32 - 0 0.0693 - 1 0.00192 - 2 0.0136 - 3 0.00353 - 4 0.0311 - 5 0.00136 - 7 0.139 - 8 0.0218 - 9 0.00121 - 10 0.000101 - 12 0.0163 - 13 0.00777 - 14 0.00343 - 15 0.00631 - 16 0.000101 - 17 5.05e-05 - 19 0.0109 - 20 0.00157 - 21 0.0207 - 22 0.00151 - 23 0.000202 - 24 0.000202 - 26 0.0283 - 28 0.0426 - 29 0.0715 - 30 0.0323 - 31 0.0671 - 32 0.0242 - 33 0.0388 - 34 0.000303 - 35 0.00136 - 37 0.00323 - 39 0.000505 - 40 0.139 - 41 0.181 - 42 0.0104 - 43 0.000909 - 44 0.000606 - 45 0.00172 - 46 0.00242 - 47 0.00136 - - 2 21 10 0 - 0 0.0476 - 7 0.0476 - 8 0.0952 - 19 0.0476 - 21 0.0952 - 26 0.0476 - 28 0.0476 - 29 0.238 - 31 0.19 - 41 0.143 - - 3 20 7 0 - 2 0.05 - 7 0.1 - 14 0.05 - 15 0.05 - 26 0.05 - 40 0.35 - 41 0.35 - - 4 79 14 0 - 0 0.038 - 4 0.0127 - 7 0.19 - 8 0.038 - 14 0.0253 - 26 0.0127 - 28 0.0127 - 29 0.0127 - 30 0.0127 - 31 0.038 - 32 0.0506 - 40 0.354 - 41 0.19 - 42 0.0127 - - 5 2 2 0 - 0 0.5 - 35 0.5 - - 6 6 3 0 - 41 0.667 - 42 0.167 - 46 0.167 - - 7 377 27 0 - 0 0.0265 - 2 0.0371 - 3 0.00531 - 4 0.0398 - 5 0.00265 - 7 0.111 - 8 0.0371 - 12 0.00796 - 13 0.0159 - 14 0.0133 - 15 0.00531 - 19 0.0133 - 20 0.0106 - 21 0.0451 - 26 0.0292 - 28 0.0133 - 29 0.0477 - 30 0.0159 - 31 0.0663 - 32 0.00796 - 33 0.0133 - 35 0.00265 - 40 0.212 - 41 0.202 - 42 0.00531 - 45 0.00265 - 47 0.0106 - - 8 234 25 0 - 0 0.00427 - 2 0.0128 - 3 0.00427 - 4 0.0214 - 7 0.274 - 8 0.00427 - 9 0.00427 - 12 0.00427 - 13 0.047 - 14 0.0299 - 15 0.0342 - 19 0.00427 - 21 0.0128 - 26 0.0427 - 29 0.0128 - 30 0.00855 - 32 0.00427 - 35 0.00855 - 37 0.00427 - 40 0.171 - 41 0.252 - 42 0.0171 - 43 0.00855 - 46 0.00855 - 47 0.00427 - - 9 130 13 0 - 0 0.00769 - 2 0.0154 - 4 0.0308 - 7 0.508 - 8 0.0308 - 13 0.0538 - 14 0.0154 - 15 0.0308 - 21 0.00769 - 26 0.0462 - 33 0.00769 - 40 0.108 - 41 0.138 - - 10 129 21 0 - 0 0.0233 - 3 0.0388 - 4 0.194 - 5 0.0155 - 7 0.178 - 8 0.062 - 13 0.0543 - 15 0.0155 - 19 0.0465 - 20 0.00775 - 21 0.109 - 26 0.00775 - 28 0.0233 - 29 0.00775 - 30 0.0155 - 31 0.0233 - 33 0.00775 - 37 0.0155 - 40 0.031 - 41 0.109 - 42 0.0155 - - 11 6 1 0 - 41 1 - - 13 78 21 0 - 0 0.0256 - 2 0.0641 - 4 0.0385 - 7 0.269 - 8 0.0256 - 9 0.0128 - 13 0.0256 - 15 0.0128 - 19 0.0128 - 21 0.0256 - 26 0.0769 - 28 0.0128 - 29 0.0385 - 30 0.0128 - 31 0.0256 - 32 0.0128 - 33 0.0128 - 34 0.0128 - 40 0.154 - 41 0.115 - 42 0.0128 - - 14 2 1 0 - 2 1 - - 15 26 4 0 - 4 0.0385 - 15 0.0769 - 40 0.0385 - 41 0.846 - - 19 6 4 0 - 0 0.333 - 7 0.167 - 40 0.167 - 41 0.333 - - 21 15861 41 0 - 0 0.0829 - 1 0.0024 - 2 0.0109 - 3 0.00372 - 4 0.033 - 5 0.00139 - 7 0.134 - 8 0.0212 - 9 0.00132 - 10 0.000126 - 12 0.0197 - 13 0.00694 - 14 0.0029 - 15 0.00624 - 16 0.000126 - 17 6.3e-05 - 19 0.0122 - 20 0.00151 - 21 0.0221 - 22 0.00189 - 23 0.000252 - 24 0.000252 - 26 0.0281 - 28 0.0508 - 29 0.0859 - 30 0.039 - 31 0.0798 - 32 0.0294 - 33 0.0477 - 34 0.000126 - 35 0.00132 - 37 0.00347 - 39 0.000567 - 40 0.0816 - 41 0.174 - 42 0.00643 - 43 0.00063 - 44 0.000757 - 45 0.00189 - 46 0.00265 - 47 0.00063 - - 22 659 20 0 - 0 0.00455 - 2 0.0319 - 4 0.0212 - 7 0.284 - 8 0.0774 - 12 0.00303 - 13 0.00303 - 21 0.00759 - 26 0.0212 - 28 0.0334 - 29 0.00759 - 30 0.00607 - 31 0.0167 - 32 0.00152 - 33 0.00455 - 40 0.323 - 41 0.138 - 42 0.0121 - 43 0.00152 - 45 0.00152 - - 23 35 13 0 - 0 0.0286 - 4 0.0286 - 7 0.171 - 8 0.0286 - 12 0.0286 - 21 0.0286 - 26 0.0571 - 28 0.0571 - 31 0.4 - 32 0.0286 - 40 0.0571 - 41 0.0286 - 42 0.0571 - - 24 74 17 0 - 0 0.0135 - 2 0.0135 - 3 0.0135 - 4 0.0541 - 7 0.162 - 8 0.0135 - 13 0.027 - 14 0.0541 - 15 0.0135 - 20 0.027 - 21 0.0405 - 30 0.027 - 39 0.0135 - 40 0.351 - 41 0.149 - 42 0.0135 - 47 0.0135 - - 28 6 3 0 - 8 0.167 - 28 0.333 - 41 0.5 - - 29 1 1 0 - 42 1 - - 31 3 3 0 - 13 0.333 - 26 0.333 - 40 0.333 - - 37 3 2 0 - 4 0.333 - 41 0.667 - - 40 9 2 0 - 43 0.111 - 47 0.889 - - 41 5 4 0 - 7 0.2 - 26 0.2 - 29 0.4 - 31 0.2 - - 46 2 2 0 - 8 0.5 - 47 0.5 - - 49 42 5 0 - 7 0.119 - 12 0.0238 - 40 0.619 - 41 0.19 - 42 0.0476 - - 55 524 14 0 - 0 0.00573 - 2 0.0134 - 4 0.00763 - 7 0.143 - 13 0.00382 - 19 0.00191 - 21 0.00573 - 26 0.0687 - 29 0.00763 - 31 0.00191 - 40 0.458 - 41 0.191 - 42 0.0897 - 43 0.00191 - - 57 1267 29 0 - 0 0.0189 - 2 0.0316 - 3 0.00158 - 4 0.00947 - 5 0.00158 - 7 0.0805 - 8 0.00395 - 9 0.000789 - 12 0.00158 - 13 0.00316 - 15 0.00395 - 19 0.00395 - 21 0.00474 - 26 0.0166 - 29 0.00868 - 30 0.000789 - 31 0.000789 - 32 0.000789 - 33 0.000789 - 34 0.00237 - 35 0.000789 - 37 0.00474 - 40 0.514 - 41 0.257 - 42 0.0213 - 43 0.00158 - 45 0.00158 - 46 0.00158 - 47 0.00158 - - 58 3 2 0 - 30 0.333 - 40 0.667 - - 59 1 1 0 - 35 1 - - 62 30 5 0 - 0 0.0333 - 21 0.0333 - 40 0.7 - 41 0.133 - 42 0.1 - - 64 156 13 0 - 0 0.00641 - 2 0.00641 - 4 0.0128 - 7 0.00641 - 14 0.00641 - 19 0.00641 - 21 0.00641 - 26 0.0192 - 40 0.615 - 41 0.288 - 42 0.0128 - 43 0.00641 - 46 0.00641 - - 48 6 3 0 - 7 0.5 - 40 0.167 - 41 0.333 - - 49 384 14 4 - 2 0.0599 - 4 0.0234 - 7 0.695 - 8 0.00781 - 12 0.0026 - 14 0.0026 - 19 0.00521 - 21 0.0026 - 26 0.0104 - 37 0.00521 - 40 0.0703 - 41 0.0911 - 42 0.0182 - 46 0.00521 - - 2 27 5 0 - 7 0.111 - 12 0.037 - 40 0.556 - 41 0.259 - 42 0.037 - - 21 14 5 0 - 7 0.429 - 40 0.357 - 41 0.0714 - 42 0.0714 - 46 0.0714 - - 41 4 1 0 - 40 1 - - 47 327 12 0 - 2 0.0703 - 4 0.0275 - 7 0.771 - 8 0.00917 - 14 0.00306 - 19 0.00612 - 21 0.00306 - 26 0.0122 - 37 0.00612 - 41 0.0734 - 42 0.0153 - 46 0.00306 - - 55 740 14 5 - 0 0.00405 - 2 0.00946 - 4 0.00541 - 7 0.307 - 13 0.0027 - 19 0.00135 - 21 0.00541 - 26 0.132 - 29 0.00541 - 31 0.00135 - 40 0.324 - 41 0.136 - 42 0.0635 - 43 0.00135 - - 7 178 10 0 - 2 0.0112 - 7 0.275 - 13 0.0112 - 21 0.0112 - 26 0.0787 - 29 0.00562 - 31 0.00562 - 40 0.365 - 41 0.129 - 42 0.107 - - 21 514 10 0 - 2 0.00584 - 4 0.00778 - 7 0.323 - 21 0.00195 - 26 0.15 - 29 0.00195 - 40 0.321 - 41 0.132 - 42 0.0545 - 43 0.00195 - - 22 18 6 0 - 0 0.0556 - 7 0.222 - 26 0.111 - 29 0.111 - 40 0.222 - 41 0.278 - - 47 4 2 0 - 7 0.75 - 21 0.25 - - 49 10 6 0 - 0 0.2 - 2 0.1 - 7 0.1 - 19 0.1 - 26 0.2 - 41 0.3 - - 57 1294 29 10 - 0 0.0185 - 2 0.0309 - 3 0.00232 - 4 0.00927 - 5 0.00155 - 7 0.0927 - 8 0.00386 - 9 0.000773 - 12 0.00155 - 13 0.00309 - 15 0.00386 - 19 0.00386 - 21 0.00464 - 26 0.0185 - 29 0.0085 - 30 0.000773 - 31 0.000773 - 32 0.000773 - 33 0.000773 - 34 0.00232 - 35 0.000773 - 37 0.00464 - 40 0.503 - 41 0.254 - 42 0.0209 - 43 0.00232 - 45 0.00155 - 46 0.00155 - 47 0.00155 - - 7 133 14 0 - 0 0.0226 - 2 0.0226 - 3 0.00752 - 7 0.0602 - 8 0.015 - 12 0.00752 - 19 0.00752 - 26 0.0301 - 34 0.00752 - 40 0.466 - 41 0.323 - 42 0.015 - 43 0.00752 - 47 0.00752 - - 8 63 10 0 - 0 0.0159 - 2 0.0159 - 4 0.0159 - 7 0.127 - 13 0.0159 - 32 0.0159 - 33 0.0159 - 40 0.476 - 41 0.286 - 45 0.0159 - - 13 10 6 0 - 2 0.1 - 7 0.2 - 15 0.1 - 35 0.1 - 40 0.4 - 41 0.1 - - 21 614 22 0 - 0 0.0277 - 2 0.0326 - 3 0.00326 - 4 0.013 - 5 0.00163 - 7 0.0765 - 9 0.00163 - 12 0.00163 - 13 0.00326 - 15 0.00489 - 19 0.00651 - 21 0.00814 - 26 0.0212 - 29 0.013 - 30 0.00163 - 34 0.00326 - 37 0.00651 - 40 0.484 - 41 0.269 - 42 0.0163 - 45 0.00163 - 46 0.00326 - - 22 32 6 0 - 0 0.0625 - 7 0.188 - 29 0.0625 - 40 0.5 - 41 0.156 - 47 0.0312 - - 24 16 6 0 - 2 0.0625 - 7 0.188 - 8 0.0625 - 21 0.0625 - 40 0.25 - 41 0.375 - - 44 1 1 0 - 43 1 - - 49 164 12 0 - 2 0.0244 - 4 0.0122 - 7 0.183 - 8 0.0122 - 15 0.0061 - 26 0.0122 - 29 0.0061 - 37 0.0061 - 40 0.488 - 41 0.207 - 42 0.0366 - 43 0.0061 - - 55 215 9 0 - 0 0.00465 - 2 0.0465 - 5 0.00465 - 7 0.0605 - 26 0.0186 - 31 0.00465 - 40 0.6 - 41 0.223 - 42 0.0372 - - 57 20 6 0 - 7 0.05 - 13 0.05 - 37 0.05 - 40 0.65 - 41 0.15 - 42 0.05 - - 58 6 4 0 - 7 0.333 - 26 0.167 - 30 0.167 - 40 0.333 - - 59 1 1 0 - 35 1 - - 62 30 5 0 - 0 0.0333 - 21 0.0333 - 40 0.7 - 41 0.133 - 42 0.1 - - 64 159 13 2 - 0 0.00629 - 2 0.00629 - 4 0.0126 - 7 0.0126 - 14 0.00629 - 19 0.00629 - 21 0.00629 - 26 0.0189 - 40 0.61 - 41 0.289 - 42 0.0126 - 43 0.00629 - 46 0.00629 - - 21 35 6 0 - 4 0.0286 - 19 0.0286 - 21 0.0286 - 26 0.0286 - 40 0.486 - 41 0.4 - - 41 10 1 0 - 40 1 - -50 604 25 5 - 0 0.0364 - 1 0.00662 - 3 0.0166 - 4 0.212 - 7 0.166 - 8 0.113 - 9 0.00993 - 12 0.00993 - 13 0.0629 - 14 0.0662 - 15 0.0298 - 16 0.00662 - 20 0.0298 - 21 0.0298 - 22 0.00331 - 26 0.043 - 28 0.043 - 29 0.0132 - 30 0.0497 - 31 0.0232 - 32 0.00662 - 33 0.00993 - 35 0.00331 - 39 0.00331 - 45 0.00662 - - 7 209 21 0 - 0 0.00957 - 1 0.00957 - 3 0.0239 - 4 0.22 - 7 0.115 - 8 0.129 - 9 0.0144 - 13 0.0861 - 14 0.0766 - 15 0.0431 - 16 0.00478 - 20 0.0144 - 21 0.0335 - 26 0.0335 - 28 0.0622 - 30 0.0718 - 31 0.0287 - 32 0.00478 - 35 0.00478 - 39 0.00478 - 45 0.00957 - - 8 4 3 0 - 7 0.5 - 8 0.25 - 26 0.25 - - 21 83 15 3 - 0 0.108 - 4 0.181 - 7 0.289 - 8 0.0723 - 12 0.0361 - 14 0.0241 - 16 0.012 - 20 0.0723 - 21 0.0241 - 22 0.012 - 26 0.0602 - 29 0.0482 - 31 0.012 - 32 0.012 - 33 0.0361 - - 2 22 8 0 - 4 0.227 - 7 0.364 - 14 0.0909 - 20 0.0909 - 22 0.0455 - 26 0.0455 - 29 0.0909 - 31 0.0455 - - 7 11 5 0 - 4 0.364 - 7 0.0909 - 8 0.364 - 20 0.0909 - 21 0.0909 - - 21 50 12 0 - 0 0.18 - 4 0.12 - 7 0.3 - 8 0.04 - 12 0.06 - 16 0.02 - 20 0.06 - 21 0.02 - 26 0.08 - 29 0.04 - 32 0.02 - 33 0.06 - - 28 5 3 0 - 4 0.6 - 13 0.2 - 14 0.2 - - 47 302 25 4 - 0 0.0364 - 1 0.00662 - 3 0.0166 - 4 0.212 - 7 0.166 - 8 0.113 - 9 0.00993 - 12 0.00993 - 13 0.0629 - 14 0.0662 - 15 0.0298 - 16 0.00662 - 20 0.0298 - 21 0.0298 - 22 0.00331 - 26 0.043 - 28 0.043 - 29 0.0132 - 30 0.0497 - 31 0.0232 - 32 0.00662 - 33 0.00993 - 35 0.00331 - 39 0.00331 - 45 0.00662 - - 7 209 21 0 - 0 0.00957 - 1 0.00957 - 3 0.0239 - 4 0.22 - 7 0.115 - 8 0.129 - 9 0.0144 - 13 0.0861 - 14 0.0766 - 15 0.0431 - 16 0.00478 - 20 0.0144 - 21 0.0335 - 26 0.0335 - 28 0.0622 - 30 0.0718 - 31 0.0287 - 32 0.00478 - 35 0.00478 - 39 0.00478 - 45 0.00957 - - 8 4 3 0 - 7 0.5 - 8 0.25 - 26 0.25 - - 21 83 15 0 - 0 0.108 - 4 0.181 - 7 0.289 - 8 0.0723 - 12 0.0361 - 14 0.0241 - 16 0.012 - 20 0.0723 - 21 0.0241 - 22 0.012 - 26 0.0602 - 29 0.0482 - 31 0.012 - 32 0.012 - 33 0.0361 - - 28 5 3 0 - 4 0.6 - 13 0.2 - 14 0.2 - -51 1442 32 20 - 0 0.000693 - 2 0.00763 - 3 0.00139 - 4 0.0146 - 7 0.0444 - 8 0.00416 - 9 0.000693 - 12 0.000693 - 13 0.00347 - 14 0.00139 - 15 0.000693 - 19 0.00347 - 20 0.000693 - 21 0.0173 - 22 0.000693 - 26 0.00832 - 27 0.00208 - 28 0.00208 - 29 0.00277 - 30 0.00208 - 33 0.00139 - 34 0.000693 - 35 0.00139 - 37 0.00139 - 39 0.000693 - 40 0.279 - 41 0.164 - 42 0.025 - 43 0.0118 - 44 0.00139 - 46 0.0374 - 47 0.356 - - 2 42 15 1 - 3 0.0238 - 4 0.167 - 7 0.143 - 8 0.0238 - 9 0.0238 - 13 0.0238 - 14 0.0238 - 19 0.0238 - 21 0.333 - 26 0.0238 - 27 0.0238 - 28 0.0238 - 35 0.0476 - 37 0.0238 - 41 0.0714 - - 41 6 5 0 - 3 0.167 - 4 0.333 - 14 0.167 - 21 0.167 - 35 0.167 - - 4 2 2 0 - 27 0.5 - 41 0.5 - - 7 6 4 0 - 4 0.333 - 13 0.333 - 30 0.167 - 34 0.167 - - 21 42 15 5 - 3 0.0238 - 4 0.143 - 7 0.167 - 8 0.0476 - 13 0.0476 - 15 0.0238 - 19 0.0238 - 21 0.19 - 22 0.0238 - 26 0.0476 - 28 0.0476 - 37 0.0238 - 40 0.143 - 41 0.0238 - 42 0.0238 - - 2 9 4 0 - 7 0.333 - 15 0.111 - 21 0.444 - 41 0.111 - - 21 3 1 0 - 4 1 - - 47 19 10 0 - 3 0.0526 - 4 0.105 - 7 0.211 - 8 0.105 - 13 0.105 - 21 0.211 - 22 0.0526 - 26 0.0526 - 40 0.0526 - 42 0.0526 - - 49 3 2 0 - 26 0.333 - 40 0.667 - - 71 3 2 0 - 28 0.667 - 40 0.333 - - 40 210 3 0 - 43 0.00476 - 46 0.176 - 47 0.819 - - 41 31 12 2 - 2 0.0645 - 4 0.0323 - 7 0.548 - 14 0.0323 - 19 0.0323 - 20 0.0323 - 21 0.0323 - 27 0.0323 - 30 0.0645 - 39 0.0323 - 46 0.0645 - 47 0.0323 - - 51 4 3 0 - 2 0.5 - 19 0.25 - 39 0.25 - - 57 5 4 0 - 4 0.2 - 7 0.4 - 14 0.2 - 47 0.2 - - 42 16 4 0 - 7 0.125 - 8 0.0625 - 40 0.188 - 47 0.625 - - 46 38 4 0 - 7 0.0263 - 33 0.0263 - 43 0.0526 - 47 0.895 - - 47 495 14 13 - 2 0.00808 - 4 0.00202 - 7 0.00202 - 19 0.00202 - 26 0.00606 - 29 0.00404 - 33 0.00202 - 40 0.194 - 41 0.208 - 42 0.0202 - 43 0.0141 - 44 0.00202 - 46 0.0162 - 47 0.519 - - 21 5 3 0 - 19 0.2 - 40 0.6 - 41 0.2 - - 40 174 2 0 - 46 0.0115 - 47 0.989 - - 42 10 1 0 - 47 1 - - 46 36 3 0 - 33 0.0278 - 43 0.0278 - 47 0.944 - - 48 32 9 0 - 2 0.0312 - 7 0.0312 - 26 0.0625 - 40 0.188 - 41 0.531 - 42 0.0312 - 43 0.0625 - 46 0.0312 - 47 0.0312 - - 49 26 4 0 - 40 0.385 - 41 0.5 - 43 0.0769 - 47 0.0385 - - 51 4 1 0 - 40 1 - - 55 86 7 0 - 2 0.0116 - 29 0.0233 - 40 0.267 - 41 0.465 - 42 0.0465 - 46 0.0233 - 47 0.163 - - 57 51 6 0 - 26 0.0196 - 40 0.471 - 41 0.196 - 42 0.0588 - 43 0.0196 - 47 0.235 - - 62 13 4 0 - 40 0.385 - 41 0.462 - 46 0.0769 - 47 0.0769 - - 64 11 4 0 - 2 0.0909 - 40 0.455 - 41 0.0909 - 47 0.364 - - 69 17 5 0 - 4 0.0588 - 40 0.471 - 41 0.353 - 46 0.0588 - 47 0.0588 - - 71 9 6 0 - 2 0.111 - 40 0.333 - 41 0.222 - 43 0.111 - 44 0.111 - 47 0.111 - - 48 39 9 0 - 2 0.0256 - 7 0.0256 - 26 0.0513 - 40 0.308 - 41 0.436 - 42 0.0513 - 43 0.0513 - 46 0.0256 - 47 0.0256 - - 49 53 10 2 - 4 0.0377 - 7 0.132 - 8 0.0189 - 12 0.0189 - 21 0.0189 - 40 0.377 - 41 0.321 - 42 0.0189 - 43 0.0377 - 47 0.0189 - - 2 10 6 0 - 4 0.2 - 7 0.3 - 12 0.1 - 21 0.1 - 40 0.2 - 41 0.1 - - 47 21 5 0 - 7 0.0476 - 40 0.429 - 41 0.429 - 42 0.0476 - 47 0.0476 - - 51 16 5 1 - 2 0.0625 - 40 0.562 - 41 0.25 - 42 0.0625 - 46 0.0625 - - 47 5 3 0 - 2 0.2 - 41 0.6 - 42 0.2 - - 52 8 3 0 - 19 0.125 - 40 0.5 - 41 0.375 - - 55 193 13 8 - 0 0.00518 - 2 0.00518 - 7 0.0518 - 8 0.00518 - 21 0.00518 - 26 0.0155 - 29 0.0104 - 40 0.487 - 41 0.259 - 42 0.0622 - 43 0.00518 - 46 0.0155 - 47 0.0725 - - 2 9 3 0 - 0 0.111 - 40 0.778 - 41 0.111 - - 41 21 4 0 - 40 0.714 - 41 0.19 - 42 0.0476 - 46 0.0476 - - 42 17 5 0 - 40 0.706 - 41 0.0588 - 43 0.0588 - 46 0.0588 - 47 0.118 - - 45 17 2 0 - 40 0.941 - 42 0.0588 - - 47 77 9 0 - 7 0.104 - 21 0.013 - 26 0.039 - 29 0.026 - 40 0.221 - 41 0.429 - 42 0.039 - 46 0.013 - 47 0.117 - - 48 1 1 0 - 8 1 - - 52 1 1 0 - 2 1 - - 57 9 3 0 - 40 0.222 - 41 0.111 - 42 0.667 - - 57 89 8 3 - 4 0.0112 - 7 0.0562 - 26 0.0112 - 40 0.551 - 41 0.169 - 42 0.0562 - 43 0.0112 - 47 0.135 - - 47 26 5 0 - 26 0.0385 - 40 0.385 - 41 0.115 - 42 0.0385 - 47 0.423 - - 49 7 2 0 - 4 0.143 - 40 0.857 - - 55 15 4 0 - 7 0.2 - 40 0.467 - 41 0.267 - 43 0.0667 - - 62 54 5 1 - 40 0.815 - 41 0.111 - 42 0.037 - 46 0.0185 - 47 0.0185 - - 47 8 3 0 - 40 0.25 - 41 0.625 - 46 0.125 - - 64 40 4 0 - 2 0.025 - 40 0.8 - 41 0.075 - 47 0.1 - - 69 31 5 0 - 4 0.0323 - 40 0.71 - 41 0.194 - 46 0.0323 - 47 0.0323 - - 71 11 7 0 - 2 0.0909 - 7 0.0909 - 40 0.364 - 41 0.182 - 43 0.0909 - 44 0.0909 - 47 0.0909 - - 72 6 3 0 - 7 0.667 - 40 0.167 - 41 0.167 - -52 275 19 11 - 0 0.00727 - 2 0.0109 - 4 0.00727 - 7 0.0145 - 13 0.00727 - 19 0.0145 - 20 0.00727 - 21 0.00727 - 26 0.04 - 27 0.0109 - 28 0.0291 - 37 0.00727 - 40 0.142 - 41 0.52 - 42 0.00364 - 43 0.0291 - 45 0.00364 - 46 0.0364 - 47 0.102 - - 2 1 1 0 - 45 1 - - 13 5 2 0 - 40 0.8 - 46 0.2 - - 15 2 2 0 - 41 0.5 - 42 0.5 - - 21 18 5 0 - 4 0.0556 - 21 0.0556 - 37 0.0556 - 40 0.0556 - 41 0.778 - - 27 80 9 1 - 13 0.0125 - 19 0.0125 - 26 0.075 - 27 0.0125 - 28 0.025 - 40 0.225 - 41 0.538 - 43 0.0375 - 46 0.0625 - - 45 2 1 0 - 46 1 - - 28 11 4 0 - 0 0.0909 - 20 0.0909 - 28 0.182 - 41 0.636 - - 40 13 1 0 - 47 1 - - 41 1 1 0 - 27 1 - - 46 2 2 0 - 2 0.5 - 7 0.5 - - 47 127 17 7 - 0 0.00787 - 2 0.00787 - 4 0.00787 - 7 0.0157 - 13 0.00787 - 19 0.0157 - 20 0.00787 - 21 0.00787 - 26 0.0394 - 27 0.00787 - 28 0.0315 - 37 0.00787 - 40 0.102 - 41 0.559 - 43 0.0315 - 46 0.0315 - 47 0.11 - - 13 2 2 0 - 40 0.5 - 46 0.5 - - 21 17 4 0 - 4 0.0588 - 21 0.0588 - 37 0.0588 - 41 0.824 - - 27 70 9 0 - 13 0.0143 - 19 0.0143 - 26 0.0714 - 27 0.0143 - 28 0.0286 - 40 0.157 - 41 0.614 - 43 0.0429 - 46 0.0429 - - 28 11 4 0 - 0 0.0909 - 20 0.0909 - 28 0.182 - 41 0.636 - - 40 13 1 0 - 47 1 - - 46 2 2 0 - 2 0.5 - 7 0.5 - - 52 2 2 0 - 7 0.5 - 43 0.5 - - 52 4 4 0 - 2 0.25 - 7 0.25 - 41 0.25 - 43 0.25 - -53 99 14 6 - 4 0.0606 - 7 0.0808 - 8 0.0606 - 14 0.0202 - 15 0.0404 - 19 0.0404 - 21 0.0202 - 28 0.141 - 31 0.0202 - 37 0.0202 - 40 0.121 - 41 0.101 - 42 0.101 - 43 0.172 - - 8 3 1 0 - 41 1 - - 11 30 4 0 - 40 0.4 - 41 0.0667 - 42 0.167 - 43 0.367 - - 40 12 4 0 - 7 0.25 - 21 0.0833 - 28 0.583 - 37 0.0833 - - 42 2 1 0 - 15 1 - - 43 11 6 0 - 4 0.273 - 7 0.0909 - 8 0.273 - 14 0.0909 - 19 0.182 - 31 0.0909 - - 47 38 13 5 - 4 0.0789 - 7 0.105 - 8 0.0789 - 14 0.0263 - 15 0.0526 - 19 0.0526 - 21 0.0263 - 28 0.184 - 31 0.0263 - 37 0.0263 - 41 0.132 - 42 0.132 - 43 0.0789 - - 8 3 1 0 - 41 1 - - 11 10 3 0 - 41 0.2 - 42 0.5 - 43 0.3 - - 40 12 4 0 - 7 0.25 - 21 0.0833 - 28 0.583 - 37 0.0833 - - 42 2 1 0 - 15 1 - - 43 11 6 0 - 4 0.273 - 7 0.0909 - 8 0.273 - 14 0.0909 - 19 0.182 - 31 0.0909 - -54 1254 23 14 - 0 0.00159 - 2 0.00478 - 3 0.0271 - 4 0.00399 - 6 0.00159 - 7 0.112 - 8 0.0478 - 13 0.386 - 14 0.0447 - 15 0.121 - 18 0.00478 - 26 0.00638 - 29 0.00159 - 30 0.00319 - 31 0.00159 - 34 0.000797 - 40 0.00558 - 41 0.203 - 42 0.00159 - 43 0.00319 - 44 0.00239 - 45 0.00159 - 46 0.0136 - - 3 35 5 1 - 7 0.0286 - 13 0.257 - 15 0.0571 - 41 0.629 - 45 0.0286 - - 41 11 1 0 - 41 1 - - 4 4 1 0 - 8 1 - - 8 6 3 0 - 7 0.167 - 13 0.667 - 42 0.167 - - 13 18 4 0 - 7 0.722 - 26 0.167 - 40 0.0556 - 46 0.0556 - - 14 2 2 0 - 2 0.5 - 34 0.5 - - 15 371 10 3 - 3 0.062 - 4 0.0108 - 6 0.00539 - 7 0.299 - 8 0.0027 - 13 0.0108 - 26 0.0135 - 40 0.0027 - 41 0.59 - 43 0.0027 - - 15 29 4 0 - 7 0.897 - 13 0.0345 - 26 0.0345 - 41 0.0345 - - 41 232 4 0 - 3 0.0431 - 8 0.00431 - 13 0.0129 - 41 0.94 - - 47 105 7 0 - 3 0.124 - 4 0.0381 - 6 0.019 - 7 0.762 - 26 0.0381 - 40 0.00952 - 43 0.00952 - - 16 4 1 0 - 7 1 - - 40 1 1 0 - 43 1 - - 41 237 7 3 - 2 0.00844 - 3 0.0464 - 8 0.097 - 13 0.751 - 14 0.0717 - 15 0.0169 - 30 0.00844 - - 3 22 2 0 - 3 0.5 - 13 0.5 - - 15 213 6 0 - 2 0.00469 - 8 0.108 - 13 0.779 - 14 0.0798 - 15 0.0188 - 30 0.00939 - - 54 1 1 0 - 2 1 - - 47 411 18 8 - 0 0.00243 - 2 0.00487 - 7 0.0073 - 8 0.0681 - 13 0.589 - 14 0.0681 - 15 0.182 - 18 0.0073 - 29 0.00243 - 30 0.00487 - 31 0.00243 - 40 0.0073 - 41 0.0219 - 42 0.00243 - 43 0.00487 - 44 0.00243 - 45 0.00243 - 46 0.0195 - - 3 12 3 0 - 13 0.75 - 15 0.167 - 45 0.0833 - - 8 5 2 0 - 13 0.8 - 42 0.2 - - 13 1 1 0 - 40 1 - - 14 1 1 0 - 2 1 - - 15 15 5 0 - 7 0.2 - 8 0.0667 - 13 0.267 - 41 0.4 - 43 0.0667 - - 40 1 1 0 - 43 1 - - 41 225 6 0 - 2 0.00444 - 8 0.102 - 13 0.791 - 14 0.0756 - 15 0.0178 - 30 0.00889 - - 57 143 12 0 - 0 0.00699 - 8 0.021 - 13 0.294 - 14 0.0769 - 15 0.476 - 18 0.021 - 29 0.00699 - 31 0.00699 - 40 0.014 - 41 0.021 - 44 0.00699 - 46 0.049 - - 54 7 5 0 - 2 0.143 - 7 0.429 - 13 0.143 - 41 0.143 - 44 0.143 - - 55 8 5 0 - 4 0.125 - 7 0.375 - 13 0.25 - 15 0.125 - 41 0.125 - - 57 145 13 2 - 0 0.0069 - 7 0.0069 - 8 0.0207 - 13 0.29 - 14 0.0759 - 15 0.476 - 18 0.0207 - 29 0.0069 - 31 0.0069 - 40 0.0138 - 41 0.0207 - 44 0.0069 - 46 0.0483 - - 13 16 6 0 - 8 0.0625 - 13 0.312 - 14 0.0625 - 15 0.25 - 41 0.0625 - 46 0.25 - - 55 3 3 0 - 7 0.333 - 8 0.333 - 46 0.333 - - 64 1 1 0 - 46 1 - -55 743201 48 64 - 0 0.0725 - 1 0.000324 - 2 0.0381 - 3 0.0109 - 4 0.0192 - 5 9.28e-05 - 6 8.48e-05 - 7 0.218 - 8 0.0157 - 9 0.00101 - 10 0.000679 - 11 2.69e-06 - 12 0.0255 - 13 0.0155 - 14 0.00484 - 15 0.0115 - 16 0.000159 - 17 3.5e-05 - 18 0.000148 - 19 0.00383 - 20 0.000667 - 21 0.0224 - 22 0.00163 - 23 0.000167 - 24 0.000495 - 25 3.23e-05 - 26 0.0314 - 27 2.69e-06 - 28 0.00194 - 29 0.0528 - 30 0.00873 - 31 0.013 - 32 0.0128 - 33 0.0187 - 34 0.0103 - 35 0.00461 - 36 0.000354 - 37 0.00247 - 38 2.96e-05 - 39 0.00155 - 40 0.175 - 41 0.167 - 42 0.0181 - 43 0.00332 - 44 0.00367 - 45 0.00252 - 46 0.00333 - 47 0.00429 - - 0 57 13 3 - 0 0.0175 - 7 0.123 - 8 0.0877 - 13 0.0351 - 15 0.0175 - 21 0.246 - 23 0.175 - 29 0.105 - 30 0.0877 - 31 0.0526 - 41 0.0175 - 43 0.0175 - 45 0.0175 - - 13 25 7 0 - 7 0.08 - 8 0.16 - 13 0.04 - 21 0.2 - 23 0.4 - 30 0.08 - 45 0.04 - - 15 26 9 0 - 7 0.154 - 8 0.0385 - 13 0.0385 - 15 0.0385 - 21 0.346 - 29 0.231 - 30 0.0385 - 31 0.0769 - 41 0.0385 - - 19 3 3 0 - 0 0.333 - 7 0.333 - 30 0.333 - - 1 3 2 0 - 26 0.333 - 40 0.667 - - 2 6940 35 14 - 0 0.000144 - 2 0.000144 - 3 0.104 - 4 0.195 - 6 0.000144 - 7 0.0062 - 8 0.168 - 9 0.0107 - 10 0.00072 - 13 0.114 - 14 0.0501 - 15 0.186 - 16 0.00202 - 17 0.00101 - 19 0.00187 - 20 0.0399 - 21 0.0278 - 22 0.000576 - 23 0.000144 - 26 0.000432 - 28 0.000865 - 29 0.000576 - 30 0.0098 - 31 0.00548 - 33 0.00101 - 34 0.000144 - 35 0.00115 - 36 0.000144 - 37 0.000432 - 38 0.000288 - 39 0.0588 - 41 0.00346 - 42 0.000432 - 44 0.000576 - 45 0.00749 - - 3 18 3 0 - 3 0.889 - 7 0.0556 - 21 0.0556 - - 13 15 7 0 - 3 0.133 - 4 0.0667 - 8 0.2 - 21 0.267 - 28 0.133 - 30 0.133 - 33 0.0667 - - 14 6 2 0 - 30 0.167 - 33 0.833 - - 15 3 2 0 - 15 0.667 - 21 0.333 - - 41 1384 25 0 - 3 0.318 - 4 0.103 - 7 0.0224 - 8 0.0412 - 9 0.00939 - 10 0.00145 - 13 0.0549 - 14 0.0253 - 15 0.091 - 16 0.000723 - 19 0.000723 - 20 0.0065 - 21 0.0571 - 22 0.00145 - 23 0.000723 - 26 0.000723 - 28 0.000723 - 29 0.000723 - 30 0.00361 - 31 0.00289 - 34 0.000723 - 35 0.00217 - 39 0.249 - 41 0.00145 - 45 0.00434 - - 42 77 15 0 - 3 0.0649 - 4 0.156 - 8 0.0779 - 9 0.026 - 13 0.0649 - 14 0.0519 - 15 0.286 - 17 0.013 - 21 0.117 - 28 0.013 - 36 0.013 - 39 0.0519 - 41 0.039 - 44 0.013 - 45 0.013 - - 45 5 3 0 - 4 0.6 - 14 0.2 - 20 0.2 - - 46 35 7 0 - 4 0.143 - 8 0.143 - 13 0.0571 - 21 0.0286 - 22 0.0286 - 31 0.0286 - 45 0.571 - - 47 1 1 0 - 0 1 - - 55 5370 31 0 - 2 0.000186 - 3 0.0477 - 4 0.221 - 6 0.000186 - 7 0.00186 - 8 0.204 - 9 0.011 - 10 0.000559 - 13 0.131 - 14 0.0572 - 15 0.212 - 16 0.00242 - 17 0.00112 - 19 0.00223 - 20 0.0497 - 21 0.0177 - 22 0.000186 - 26 0.000372 - 28 0.000372 - 29 0.000559 - 30 0.0101 - 31 0.00615 - 33 0.000186 - 35 0.000931 - 37 0.000186 - 38 0.000372 - 39 0.0112 - 41 0.00354 - 42 0.000559 - 44 0.000559 - 45 0.00447 - - 57 4 3 0 - 7 0.25 - 13 0.5 - 21 0.25 - - 58 6 6 0 - 4 0.167 - 8 0.167 - 15 0.167 - 21 0.167 - 30 0.167 - 45 0.167 - - 62 6 2 0 - 4 0.167 - 30 0.833 - - 64 3 2 0 - 4 0.333 - 37 0.667 - - 3 8212 38 21 - 0 0.0178 - 2 0.0314 - 3 0.00499 - 4 0.0933 - 6 0.000122 - 7 0.167 - 8 0.00402 - 9 0.00244 - 10 0.000365 - 12 0.00706 - 13 0.00426 - 14 0.00146 - 15 0.00402 - 19 0.00231 - 20 0.000244 - 21 0.0108 - 22 0.000487 - 23 0.000122 - 25 0.000122 - 26 0.0899 - 28 0.000122 - 29 0.0141 - 30 0.00329 - 31 0.00548 - 32 0.0011 - 33 0.00329 - 34 0.00256 - 35 0.000852 - 37 0.00317 - 39 0.000122 - 40 0.2 - 41 0.278 - 42 0.0226 - 43 0.0167 - 44 0.0017 - 45 0.00134 - 46 0.000974 - 47 0.00195 - - 2 92 17 0 - 0 0.0326 - 2 0.0326 - 4 0.0109 - 7 0.0652 - 8 0.0109 - 12 0.0109 - 21 0.0109 - 26 0.0109 - 31 0.0109 - 33 0.0109 - 34 0.0109 - 40 0.304 - 41 0.391 - 42 0.0217 - 43 0.0217 - 44 0.0217 - 45 0.0217 - - 3 254 17 0 - 0 0.00787 - 2 0.0197 - 4 0.0276 - 7 0.217 - 8 0.00394 - 9 0.00394 - 12 0.0118 - 13 0.00787 - 14 0.00394 - 15 0.0354 - 26 0.287 - 32 0.00394 - 40 0.201 - 41 0.126 - 42 0.0236 - 43 0.0118 - 47 0.00787 - - 4 159 24 0 - 0 0.164 - 2 0.0377 - 4 0.00629 - 7 0.195 - 8 0.00629 - 10 0.0126 - 12 0.044 - 13 0.0126 - 14 0.00629 - 15 0.00629 - 19 0.00629 - 21 0.044 - 23 0.00629 - 26 0.0252 - 29 0.0314 - 31 0.0189 - 32 0.00629 - 33 0.00629 - 34 0.0126 - 35 0.0126 - 40 0.164 - 41 0.151 - 42 0.0126 - 45 0.0126 - - 7 12 7 0 - 3 0.0833 - 4 0.25 - 7 0.25 - 14 0.0833 - 21 0.0833 - 40 0.0833 - 41 0.167 - - 8 155 14 0 - 0 0.071 - 2 0.0516 - 7 0.116 - 12 0.00645 - 14 0.00645 - 19 0.0129 - 26 0.0323 - 31 0.0194 - 33 0.00645 - 34 0.00645 - 40 0.374 - 41 0.252 - 42 0.0387 - 47 0.00645 - - 9 3 2 0 - 33 0.667 - 34 0.333 - - 10 1 1 0 - 8 1 - - 13 164 20 0 - 0 0.0366 - 2 0.0549 - 4 0.0061 - 7 0.171 - 8 0.0061 - 12 0.0061 - 13 0.0061 - 14 0.0122 - 19 0.0061 - 26 0.0305 - 29 0.0061 - 30 0.0061 - 32 0.0122 - 33 0.0427 - 34 0.0061 - 40 0.14 - 41 0.378 - 42 0.0488 - 43 0.0122 - 46 0.0122 - - 14 12 7 0 - 2 0.167 - 3 0.167 - 7 0.0833 - 26 0.0833 - 30 0.0833 - 40 0.167 - 41 0.25 - - 15 1421 30 0 - 0 0.019 - 2 0.0394 - 3 0.000704 - 4 0.00281 - 7 0.0739 - 8 0.00141 - 9 0.000704 - 12 0.00563 - 13 0.00141 - 15 0.00422 - 19 0.00141 - 20 0.00141 - 21 0.00281 - 26 0.0387 - 28 0.000704 - 29 0.031 - 30 0.00211 - 31 0.00493 - 32 0.000704 - 33 0.00211 - 34 0.000704 - 37 0.00352 - 39 0.000704 - 40 0.251 - 41 0.481 - 42 0.00844 - 43 0.0169 - 44 0.00141 - 45 0.000704 - 47 0.000704 - - 20 1 1 0 - 30 1 - - 21 31 11 0 - 0 0.0323 - 2 0.0323 - 4 0.0323 - 7 0.484 - 14 0.0323 - 21 0.0323 - 26 0.0323 - 29 0.0645 - 37 0.0645 - 40 0.0968 - 41 0.0968 - - 29 1 1 0 - 14 1 - - 31 2 2 0 - 0 0.5 - 26 0.5 - - 38 13 6 0 - 4 0.0769 - 7 0.0769 - 40 0.231 - 41 0.154 - 42 0.0769 - 44 0.385 - - 39 1781 28 0 - 0 0.000561 - 2 0.0247 - 3 0.0202 - 4 0.396 - 6 0.000561 - 7 0.14 - 8 0.0101 - 9 0.000561 - 12 0.000561 - 13 0.0112 - 15 0.00225 - 19 0.00168 - 21 0.00786 - 22 0.00112 - 26 0.0415 - 29 0.000561 - 30 0.00168 - 31 0.00786 - 33 0.000561 - 34 0.00225 - 35 0.000561 - 37 0.00112 - 40 0.12 - 41 0.149 - 42 0.0118 - 43 0.0444 - 44 0.00112 - 47 0.000561 - - 41 320 10 0 - 2 0.025 - 7 0.00313 - 13 0.00313 - 25 0.00313 - 31 0.00313 - 40 0.172 - 41 0.669 - 42 0.0719 - 43 0.0188 - 47 0.0312 - - 45 3 1 0 - 46 1 - - 47 3753 32 0 - 0 0.0181 - 2 0.0306 - 3 0.000266 - 4 0.0107 - 7 0.227 - 8 0.00213 - 9 0.00453 - 10 0.000266 - 12 0.00959 - 13 0.00187 - 14 0.000799 - 15 0.00346 - 19 0.00266 - 21 0.016 - 22 0.000533 - 26 0.137 - 29 0.0168 - 30 0.0048 - 31 0.00426 - 32 0.00107 - 33 0.00293 - 34 0.00266 - 35 0.00107 - 37 0.00453 - 40 0.217 - 41 0.242 - 42 0.028 - 43 0.00533 - 44 0.000799 - 45 0.00133 - 46 0.000799 - 47 0.000266 - - 55 8 4 0 - 14 0.125 - 40 0.375 - 41 0.375 - 45 0.125 - - 60 6 5 0 - 2 0.167 - 21 0.167 - 26 0.167 - 40 0.333 - 41 0.167 - - 4 2568 37 12 - 0 0.247 - 1 0.000779 - 2 0.00857 - 3 0.00273 - 4 0.00584 - 7 0.274 - 8 0.00935 - 9 0.000389 - 10 0.000389 - 12 0.0666 - 13 0.00701 - 14 0.00117 - 15 0.00156 - 18 0.000779 - 19 0.00857 - 21 0.0238 - 22 0.000389 - 24 0.00195 - 26 0.00701 - 28 0.00389 - 29 0.0269 - 30 0.00701 - 31 0.0245 - 32 0.0218 - 33 0.0592 - 34 0.00584 - 35 0.0253 - 37 0.000389 - 38 0.000779 - 39 0.0343 - 40 0.0401 - 41 0.0666 - 42 0.0101 - 44 0.00117 - 45 0.00117 - 46 0.00117 - 47 0.00195 - - 2 6 1 0 - 7 1 - - 3 4 2 0 - 7 0.5 - 41 0.5 - - 4 9 6 0 - 0 0.111 - 7 0.111 - 12 0.111 - 33 0.222 - 35 0.111 - 41 0.333 - - 7 1 1 0 - 19 1 - - 8 9 4 0 - 7 0.556 - 12 0.111 - 26 0.111 - 29 0.222 - - 13 3 2 0 - 4 0.333 - 7 0.667 - - 15 3 2 0 - 8 0.667 - 42 0.333 - - 17 25 10 0 - 0 0.24 - 2 0.04 - 7 0.08 - 29 0.04 - 30 0.04 - 31 0.04 - 33 0.12 - 35 0.04 - 40 0.12 - 41 0.24 - - 19 8 7 0 - 12 0.125 - 24 0.125 - 29 0.25 - 32 0.125 - 33 0.125 - 40 0.125 - 41 0.125 - - 21 42 9 0 - 0 0.0476 - 7 0.571 - 29 0.0238 - 31 0.0714 - 35 0.0238 - 40 0.143 - 41 0.0238 - 42 0.0714 - 46 0.0238 - - 28 1 1 0 - 8 1 - - 60 3 3 0 - 7 0.333 - 38 0.333 - 40 0.333 - - 5 861 10 0 - 0 0.861 - 4 0.00232 - 12 0.0848 - 18 0.0128 - 19 0.00116 - 21 0.0244 - 26 0.00116 - 33 0.00697 - 35 0.00116 - 41 0.00465 - - 6 75 17 7 - 0 0.0533 - 2 0.0267 - 6 0.107 - 7 0.08 - 8 0.0133 - 12 0.0267 - 26 0.0533 - 31 0.0133 - 33 0.0533 - 39 0.0133 - 40 0.24 - 41 0.173 - 42 0.0267 - 43 0.0133 - 44 0.0267 - 45 0.0133 - 46 0.0667 - - 4 8 5 0 - 7 0.125 - 33 0.5 - 40 0.125 - 41 0.125 - 45 0.125 - - 6 17 6 0 - 6 0.176 - 7 0.235 - 40 0.118 - 41 0.235 - 43 0.0588 - 46 0.176 - - 8 5 4 0 - 0 0.2 - 6 0.4 - 26 0.2 - 44 0.2 - - 41 5 4 0 - 39 0.2 - 40 0.2 - 41 0.2 - 42 0.4 - - 43 1 1 0 - 8 1 - - 45 4 3 0 - 6 0.5 - 40 0.25 - 46 0.25 - - 47 31 9 0 - 0 0.0645 - 2 0.0645 - 12 0.0645 - 26 0.0968 - 31 0.0323 - 40 0.419 - 41 0.194 - 44 0.0323 - 46 0.0323 - - 7 103 24 7 - 0 0.117 - 2 0.00971 - 3 0.0194 - 4 0.117 - 5 0.00971 - 7 0.175 - 8 0.0291 - 12 0.0291 - 13 0.0583 - 14 0.00971 - 15 0.0194 - 18 0.0194 - 19 0.0291 - 21 0.0291 - 22 0.00971 - 24 0.00971 - 26 0.0194 - 29 0.00971 - 31 0.0485 - 33 0.0291 - 39 0.0194 - 40 0.0874 - 41 0.0874 - 47 0.00971 - - 8 2 2 0 - 7 0.5 - 15 0.5 - - 13 8 6 0 - 7 0.125 - 26 0.125 - 33 0.125 - 40 0.375 - 41 0.125 - 47 0.125 - - 21 9 4 0 - 4 0.444 - 8 0.222 - 13 0.222 - 14 0.111 - - 41 2 2 0 - 13 0.5 - 21 0.5 - - 47 62 20 0 - 0 0.177 - 2 0.0161 - 4 0.0484 - 5 0.0161 - 7 0.177 - 8 0.0161 - 12 0.0484 - 15 0.0161 - 18 0.0323 - 19 0.0484 - 21 0.0161 - 22 0.0161 - 24 0.0161 - 26 0.0161 - 29 0.0161 - 31 0.0806 - 33 0.0323 - 39 0.0323 - 40 0.0484 - 41 0.129 - - 55 10 4 0 - 3 0.1 - 4 0.5 - 13 0.3 - 40 0.1 - - 60 4 1 0 - 7 1 - - 8 1338 39 20 - 0 0.059 - 1 0.000747 - 2 0.0329 - 3 0.00673 - 4 0.0112 - 6 0.00374 - 7 0.361 - 8 0.00897 - 9 0.00747 - 10 0.00224 - 12 0.0112 - 13 0.0142 - 14 0.00673 - 15 0.00598 - 19 0.00299 - 21 0.0172 - 22 0.00299 - 24 0.000747 - 26 0.0471 - 27 0.000747 - 28 0.00374 - 29 0.0262 - 30 0.0172 - 31 0.00523 - 32 0.0105 - 33 0.00972 - 34 0.00224 - 35 0.00299 - 37 0.000747 - 38 0.00149 - 39 0.0493 - 40 0.116 - 41 0.116 - 42 0.0179 - 43 0.00448 - 44 0.00448 - 45 0.00374 - 46 0.00374 - 47 0.000747 - - 2 12 5 0 - 0 0.0833 - 7 0.25 - 14 0.167 - 40 0.333 - 41 0.167 - - 3 4 3 0 - 2 0.25 - 9 0.5 - 40 0.25 - - 4 482 34 0 - 0 0.0622 - 2 0.0456 - 3 0.0124 - 4 0.0187 - 6 0.00207 - 7 0.255 - 8 0.0104 - 9 0.0083 - 10 0.00622 - 12 0.0124 - 13 0.0104 - 14 0.00415 - 15 0.00415 - 19 0.00415 - 21 0.0187 - 22 0.00415 - 24 0.00207 - 26 0.0539 - 27 0.00207 - 28 0.00622 - 29 0.0104 - 30 0.0166 - 32 0.00622 - 33 0.0166 - 34 0.00207 - 35 0.00415 - 37 0.00207 - 38 0.00415 - 39 0.135 - 40 0.133 - 41 0.0996 - 42 0.0207 - 44 0.00207 - 45 0.00415 - - 7 4 4 0 - 7 0.25 - 12 0.25 - 21 0.25 - 26 0.25 - - 8 31 13 0 - 1 0.0323 - 7 0.226 - 14 0.0323 - 15 0.0323 - 21 0.0323 - 22 0.0323 - 26 0.0323 - 29 0.0645 - 33 0.0645 - 35 0.0323 - 40 0.161 - 41 0.226 - 44 0.0323 - - 13 49 12 0 - 0 0.0816 - 2 0.0408 - 4 0.0204 - 7 0.327 - 12 0.0612 - 14 0.0204 - 29 0.0204 - 30 0.0204 - 40 0.163 - 41 0.204 - 42 0.0204 - 46 0.0204 - - 14 11 5 0 - 2 0.0909 - 7 0.364 - 40 0.182 - 41 0.273 - 42 0.0909 - - 15 12 7 0 - 2 0.0833 - 7 0.25 - 22 0.0833 - 26 0.0833 - 29 0.333 - 40 0.0833 - 42 0.0833 - - 20 57 10 0 - 2 0.0526 - 7 0.14 - 13 0.0351 - 15 0.0175 - 21 0.0351 - 26 0.0351 - 29 0.0175 - 33 0.0175 - 40 0.368 - 41 0.281 - - 21 63 11 0 - 0 0.0635 - 2 0.0159 - 7 0.603 - 19 0.0159 - 21 0.0159 - 26 0.111 - 32 0.0159 - 40 0.0794 - 41 0.0476 - 44 0.0159 - 46 0.0159 - - 22 2 2 0 - 28 0.5 - 40 0.5 - - 23 10 4 0 - 0 0.1 - 7 0.5 - 40 0.3 - 46 0.1 - - 30 2 2 0 - 13 0.5 - 41 0.5 - - 42 2 2 0 - 14 0.5 - 26 0.5 - - 45 2 2 0 - 19 0.5 - 46 0.5 - - 47 537 30 0 - 0 0.0689 - 2 0.0149 - 3 0.00186 - 4 0.00745 - 6 0.00559 - 7 0.492 - 8 0.00745 - 9 0.00745 - 12 0.00745 - 13 0.0168 - 14 0.00372 - 15 0.00745 - 21 0.0168 - 26 0.0447 - 28 0.00186 - 29 0.0391 - 30 0.0205 - 31 0.00931 - 32 0.0168 - 33 0.00372 - 34 0.00372 - 35 0.00186 - 39 0.00186 - 40 0.0596 - 41 0.102 - 42 0.0186 - 43 0.00931 - 44 0.00559 - 46 0.00186 - 47 0.00186 - - 48 13 6 0 - 0 0.0769 - 2 0.0769 - 7 0.0769 - 31 0.0769 - 40 0.0769 - 41 0.615 - - 54 1 1 0 - 31 1 - - 55 27 14 0 - 0 0.037 - 2 0.0741 - 3 0.0741 - 4 0.037 - 7 0.185 - 8 0.111 - 13 0.0741 - 29 0.037 - 30 0.0741 - 32 0.037 - 40 0.0741 - 41 0.037 - 43 0.037 - 45 0.111 - - 60 8 6 0 - 2 0.25 - 6 0.125 - 7 0.125 - 12 0.125 - 40 0.25 - 41 0.125 - - 9 236 14 6 - 0 0.0212 - 2 0.00847 - 4 0.00847 - 7 0.619 - 12 0.00424 - 21 0.0254 - 26 0.0763 - 29 0.00424 - 30 0.00424 - 31 0.0127 - 40 0.114 - 41 0.089 - 42 0.00847 - 44 0.00424 - - 4 15 5 0 - 4 0.0667 - 7 0.6 - 31 0.0667 - 40 0.133 - 41 0.133 - - 13 7 5 0 - 0 0.143 - 7 0.429 - 12 0.143 - 40 0.143 - 41 0.143 - - 14 2 2 0 - 0 0.5 - 2 0.5 - - 21 19 4 0 - 7 0.737 - 40 0.158 - 41 0.0526 - 42 0.0526 - - 47 160 11 0 - 0 0.0125 - 2 0.00625 - 7 0.606 - 21 0.0375 - 26 0.106 - 29 0.00625 - 30 0.00625 - 40 0.112 - 41 0.0938 - 42 0.00625 - 44 0.00625 - - 55 9 4 0 - 4 0.111 - 7 0.667 - 31 0.111 - 41 0.111 - - 10 370 23 6 - 0 0.0568 - 2 0.0027 - 4 0.00811 - 5 0.0027 - 7 0.705 - 8 0.00541 - 12 0.00541 - 13 0.00811 - 19 0.00811 - 21 0.0162 - 26 0.0135 - 28 0.0027 - 29 0.0027 - 30 0.00811 - 31 0.0027 - 32 0.0324 - 37 0.0027 - 40 0.0459 - 41 0.0486 - 42 0.0135 - 44 0.0027 - 45 0.0027 - 46 0.0027 - - 2 2 2 0 - 26 0.5 - 46 0.5 - - 4 125 17 0 - 0 0.064 - 2 0.008 - 4 0.024 - 5 0.008 - 7 0.552 - 8 0.016 - 12 0.008 - 13 0.024 - 19 0.016 - 21 0.04 - 26 0.016 - 30 0.008 - 32 0.016 - 40 0.112 - 41 0.056 - 42 0.024 - 44 0.008 - - 20 10 6 0 - 7 0.3 - 26 0.2 - 37 0.1 - 40 0.1 - 41 0.2 - 45 0.1 - - 21 5 2 0 - 7 0.4 - 41 0.6 - - 47 216 12 0 - 0 0.0602 - 7 0.838 - 12 0.00463 - 19 0.00463 - 21 0.00463 - 28 0.00463 - 29 0.00463 - 30 0.00926 - 31 0.00463 - 32 0.0463 - 40 0.00926 - 41 0.00926 - - 55 6 3 0 - 7 0.333 - 41 0.5 - 42 0.167 - - 12 3 3 0 - 40 0.333 - 41 0.333 - 43 0.333 - - 13 98717 46 40 - 0 0.0625 - 1 0.000365 - 2 0.0342 - 3 0.00661 - 4 0.0085 - 5 0.000152 - 6 6.08e-05 - 7 0.33 - 8 0.00775 - 9 0.00124 - 10 5.06e-05 - 12 0.0236 - 13 0.004 - 14 0.000952 - 15 0.00478 - 16 3.04e-05 - 17 2.03e-05 - 18 2.03e-05 - 19 0.00561 - 20 0.000274 - 21 0.0242 - 22 0.00352 - 23 0.000111 - 24 0.000537 - 25 4.05e-05 - 26 0.051 - 28 0.00134 - 29 0.0429 - 30 0.00867 - 31 0.0138 - 32 0.00181 - 33 0.0202 - 34 0.0105 - 35 0.00329 - 36 0.000243 - 37 0.00321 - 38 3.04e-05 - 39 0.000263 - 40 0.146 - 41 0.15 - 42 0.015 - 43 0.00203 - 44 0.002 - 45 0.00284 - 46 0.00573 - 47 0.000669 - - 0 3 3 0 - 3 0.333 - 7 0.333 - 41 0.333 - - 2 783 25 0 - 0 0.0396 - 2 0.0179 - 4 0.00383 - 6 0.00128 - 7 0.298 - 8 0.00383 - 12 0.0204 - 21 0.0153 - 26 0.0383 - 29 0.014 - 30 0.00511 - 31 0.0153 - 32 0.014 - 33 0.0115 - 34 0.0102 - 35 0.00255 - 37 0.00383 - 40 0.25 - 41 0.183 - 42 0.0307 - 43 0.00383 - 44 0.00255 - 45 0.00511 - 46 0.00894 - 47 0.00128 - - 3 4034 35 0 - 0 0.0151 - 1 0.000496 - 2 0.0288 - 3 0.0654 - 4 0.0206 - 7 0.335 - 8 0.0107 - 9 0.00868 - 12 0.00645 - 13 0.00372 - 14 0.000496 - 15 0.00843 - 19 0.00347 - 20 0.000744 - 21 0.0121 - 22 0.00198 - 24 0.000496 - 26 0.128 - 28 0.000496 - 29 0.0129 - 30 0.00397 - 31 0.00744 - 32 0.000248 - 33 0.00645 - 34 0.00347 - 35 0.00198 - 37 0.00223 - 40 0.143 - 41 0.127 - 42 0.0273 - 43 0.00322 - 44 0.00545 - 45 0.00223 - 46 0.00149 - 47 0.000992 - - 4 30713 45 0 - 0 0.078 - 1 0.000456 - 2 0.022 - 3 0.00156 - 4 0.00834 - 5 0.000195 - 6 3.26e-05 - 7 0.359 - 8 0.00703 - 9 0.000977 - 10 9.77e-05 - 12 0.0316 - 13 0.00371 - 14 0.00107 - 15 0.00391 - 16 6.51e-05 - 18 6.51e-05 - 19 0.00834 - 20 0.000456 - 21 0.0346 - 22 0.00866 - 23 0.000195 - 24 0.000912 - 25 3.26e-05 - 26 0.0489 - 28 0.00166 - 29 0.0524 - 30 0.00853 - 31 0.0151 - 32 0.00147 - 33 0.0292 - 34 0.013 - 35 0.00293 - 36 0.000293 - 37 0.00414 - 38 3.26e-05 - 39 0.000521 - 40 0.108 - 41 0.125 - 42 0.00856 - 43 0.00143 - 44 0.000814 - 45 0.00378 - 46 0.00199 - 47 0.000358 - - 6 8 6 0 - 0 0.125 - 2 0.125 - 7 0.25 - 40 0.125 - 41 0.125 - 42 0.25 - - 7 79 12 0 - 0 0.0759 - 2 0.038 - 7 0.152 - 12 0.0253 - 15 0.0127 - 21 0.0253 - 26 0.0253 - 30 0.0253 - 31 0.0127 - 33 0.0127 - 40 0.392 - 41 0.203 - - 8 20150 43 0 - 0 0.0496 - 1 0.000397 - 2 0.0359 - 3 0.00179 - 4 0.00794 - 5 0.000199 - 6 4.96e-05 - 7 0.34 - 8 0.00591 - 9 0.000397 - 10 9.93e-05 - 12 0.0205 - 13 0.00437 - 14 0.000794 - 15 0.00536 - 16 4.96e-05 - 19 0.00541 - 20 0.000149 - 21 0.0172 - 22 0.000844 - 23 4.96e-05 - 24 0.000248 - 25 4.96e-05 - 26 0.0461 - 28 0.00124 - 29 0.032 - 30 0.0103 - 31 0.0154 - 32 0.000943 - 33 0.0144 - 34 0.00983 - 35 0.00407 - 36 0.000248 - 37 0.00323 - 39 9.93e-05 - 40 0.175 - 41 0.158 - 42 0.0168 - 43 0.00159 - 44 0.00199 - 45 0.00149 - 46 0.00928 - 47 0.000596 - - 9 517 25 0 - 0 0.0406 - 2 0.0426 - 4 0.00387 - 7 0.453 - 8 0.0058 - 12 0.0174 - 13 0.00193 - 15 0.00193 - 17 0.00193 - 19 0.00387 - 21 0.0193 - 26 0.0754 - 29 0.00774 - 30 0.0155 - 31 0.0058 - 32 0.0058 - 33 0.0193 - 34 0.00387 - 40 0.128 - 41 0.112 - 42 0.0251 - 43 0.00193 - 44 0.00193 - 45 0.00193 - 46 0.00387 - - 10 469 25 0 - 0 0.0768 - 2 0.0171 - 4 0.0149 - 7 0.36 - 8 0.0149 - 12 0.0213 - 13 0.00426 - 14 0.00426 - 15 0.0064 - 19 0.0107 - 21 0.032 - 26 0.0597 - 29 0.064 - 30 0.0107 - 31 0.00426 - 32 0.00426 - 33 0.0235 - 35 0.00426 - 37 0.00213 - 39 0.00213 - 40 0.109 - 41 0.134 - 42 0.0149 - 44 0.00213 - 46 0.00213 - - 13 12677 39 0 - 0 0.0652 - 1 0.000473 - 2 0.0461 - 3 0.00252 - 4 0.00529 - 7 0.248 - 8 0.00718 - 9 0.000631 - 12 0.0242 - 13 0.00363 - 14 0.000631 - 15 0.00552 - 17 7.89e-05 - 19 0.00387 - 20 0.000158 - 21 0.0204 - 22 0.000868 - 24 0.000158 - 26 0.0311 - 28 0.00142 - 29 0.0506 - 30 0.00812 - 31 0.0177 - 32 0.00252 - 33 0.02 - 34 0.0165 - 35 0.00371 - 36 0.000473 - 37 0.00331 - 38 7.89e-05 - 39 0.000237 - 40 0.189 - 41 0.186 - 42 0.0185 - 43 0.00174 - 44 0.00268 - 45 0.00316 - 46 0.00702 - 47 0.0011 - - 14 957 30 0 - 0 0.0742 - 1 0.00104 - 2 0.0366 - 3 0.0115 - 4 0.00522 - 7 0.222 - 8 0.00522 - 12 0.023 - 13 0.00209 - 14 0.00104 - 15 0.00522 - 19 0.00313 - 21 0.023 - 24 0.00104 - 26 0.0303 - 29 0.0815 - 30 0.00104 - 31 0.0219 - 32 0.00418 - 33 0.0136 - 34 0.0167 - 35 0.00209 - 37 0.00104 - 40 0.181 - 41 0.203 - 42 0.0167 - 43 0.00104 - 44 0.00522 - 45 0.00418 - 46 0.00313 - - 15 3706 37 0 - 0 0.0815 - 2 0.0364 - 3 0.0054 - 4 0.00729 - 7 0.181 - 8 0.00648 - 9 0.00108 - 12 0.0324 - 13 0.00863 - 14 0.00054 - 15 0.00405 - 19 0.00189 - 20 0.00027 - 21 0.0216 - 22 0.00189 - 23 0.000809 - 24 0.00027 - 26 0.0321 - 28 0.000809 - 29 0.11 - 30 0.00756 - 31 0.0165 - 32 0.0027 - 33 0.0262 - 34 0.0132 - 35 0.0108 - 36 0.000809 - 37 0.00162 - 39 0.00054 - 40 0.174 - 41 0.186 - 42 0.0135 - 43 0.0027 - 44 0.0027 - 45 0.00513 - 46 0.00243 - 47 0.00027 - - 16 73 10 0 - 0 0.0685 - 2 0.0411 - 7 0.219 - 13 0.0137 - 15 0.0411 - 21 0.0548 - 26 0.0822 - 29 0.123 - 40 0.178 - 41 0.178 - - 18 2 2 0 - 2 0.5 - 21 0.5 - - 19 13 2 0 - 7 0.231 - 41 0.769 - - 20 2788 31 0 - 0 0.0897 - 2 0.0308 - 3 0.000717 - 4 0.00825 - 5 0.00108 - 7 0.303 - 8 0.00933 - 12 0.0233 - 13 0.00287 - 14 0.000717 - 15 0.00323 - 19 0.00143 - 21 0.0326 - 22 0.00179 - 24 0.00251 - 26 0.0976 - 28 0.00395 - 29 0.0334 - 30 0.00825 - 31 0.00753 - 32 0.000717 - 33 0.0197 - 34 0.00108 - 37 0.0043 - 39 0.000359 - 40 0.145 - 41 0.142 - 42 0.0169 - 44 0.00215 - 45 0.00251 - 46 0.00359 - - 21 101 20 0 - 0 0.0693 - 2 0.0396 - 4 0.0297 - 7 0.297 - 8 0.0297 - 12 0.0396 - 14 0.0099 - 15 0.0099 - 19 0.0099 - 21 0.0297 - 26 0.0396 - 29 0.0198 - 33 0.0396 - 35 0.0099 - 40 0.0693 - 41 0.208 - 42 0.0099 - 43 0.0099 - 44 0.0198 - 46 0.0099 - - 22 4 3 0 - 7 0.25 - 8 0.25 - 41 0.5 - - 28 6 5 0 - 7 0.167 - 15 0.167 - 26 0.167 - 40 0.333 - 41 0.167 - - 29 9 3 0 - 0 0.111 - 7 0.667 - 40 0.222 - - 30 711 25 0 - 0 0.0394 - 1 0.00141 - 2 0.0338 - 4 0.00422 - 7 0.422 - 8 0.00844 - 9 0.00141 - 12 0.0197 - 13 0.00141 - 15 0.00281 - 19 0.00422 - 21 0.0127 - 26 0.0352 - 29 0.038 - 30 0.00985 - 31 0.0155 - 32 0.00422 - 33 0.0113 - 34 0.00844 - 35 0.00281 - 40 0.148 - 41 0.152 - 42 0.0197 - 45 0.00141 - 46 0.00281 - - 31 547 23 0 - 0 0.0622 - 2 0.0329 - 3 0.00183 - 4 0.00366 - 7 0.419 - 8 0.00183 - 12 0.0347 - 13 0.00183 - 14 0.00183 - 15 0.00183 - 19 0.00366 - 21 0.0165 - 26 0.0548 - 29 0.00548 - 30 0.00914 - 31 0.00548 - 33 0.0219 - 34 0.00366 - 35 0.00548 - 40 0.163 - 41 0.126 - 42 0.0201 - 44 0.00366 - - 34 4 4 0 - 2 0.25 - 7 0.25 - 40 0.25 - 44 0.25 - - 35 2 2 0 - 5 0.5 - 7 0.5 - - 40 6 5 0 - 0 0.167 - 40 0.333 - 42 0.167 - 43 0.167 - 47 0.167 - - 41 22 10 0 - 0 0.0455 - 2 0.0455 - 12 0.0455 - 26 0.0455 - 29 0.136 - 31 0.0455 - 34 0.0455 - 40 0.273 - 41 0.227 - 43 0.0909 - - 42 5 2 0 - 7 0.2 - 40 0.8 - - 43 16 9 0 - 0 0.25 - 7 0.125 - 8 0.0625 - 12 0.0625 - 29 0.0625 - 33 0.0625 - 35 0.0625 - 40 0.125 - 41 0.188 - - 44 11 2 0 - 7 0.182 - 43 0.818 - - 45 138 8 0 - 0 0.0145 - 7 0.188 - 8 0.00725 - 21 0.00725 - 26 0.029 - 40 0.116 - 41 0.0725 - 46 0.565 - - 46 169 21 0 - 0 0.0592 - 2 0.0296 - 4 0.0178 - 7 0.325 - 8 0.00592 - 12 0.0237 - 15 0.00592 - 19 0.0118 - 21 0.0118 - 26 0.0237 - 29 0.0355 - 30 0.0296 - 31 0.0118 - 33 0.0355 - 34 0.0473 - 37 0.00592 - 40 0.148 - 41 0.142 - 42 0.0178 - 44 0.00592 - 45 0.00592 - - 47 13978 39 0 - 0 0.0505 - 1 0.000215 - 2 0.0552 - 3 0.0124 - 4 0.0107 - 6 0.000215 - 7 0.343 - 8 0.0098 - 9 0.00114 - 12 0.0152 - 13 0.00501 - 14 0.00157 - 15 0.00558 - 19 0.00622 - 20 0.000215 - 21 0.022 - 22 0.00172 - 23 7.15e-05 - 24 0.000358 - 25 0.000143 - 26 0.0519 - 28 0.00143 - 29 0.028 - 30 0.00959 - 31 0.01 - 32 0.00272 - 33 0.0132 - 34 0.00637 - 35 0.00265 - 37 0.00286 - 38 7.15e-05 - 40 0.131 - 41 0.166 - 42 0.0189 - 43 0.00365 - 44 0.0015 - 45 0.0015 - 46 0.00651 - 47 0.00136 - - 48 2092 30 0 - 0 0.0344 - 2 0.0191 - 3 0.000956 - 4 0.0086 - 5 0.000478 - 7 0.497 - 8 0.0196 - 12 0.012 - 13 0.00287 - 14 0.000478 - 15 0.00191 - 19 0.00335 - 20 0.000478 - 21 0.00956 - 24 0.000478 - 26 0.0531 - 28 0.000478 - 29 0.0129 - 30 0.0139 - 31 0.0167 - 33 0.0163 - 34 0.00717 - 35 0.000956 - 37 0.00239 - 40 0.132 - 41 0.106 - 42 0.0201 - 44 0.000956 - 45 0.00143 - 46 0.00478 - - 49 17 5 0 - 7 0.529 - 21 0.0588 - 30 0.0588 - 40 0.176 - 41 0.176 - - 54 152 19 0 - 0 0.0658 - 2 0.0263 - 4 0.00658 - 7 0.289 - 12 0.0263 - 13 0.00658 - 14 0.00658 - 15 0.0132 - 19 0.00658 - 21 0.0132 - 26 0.0132 - 29 0.132 - 31 0.00658 - 33 0.0132 - 34 0.0461 - 35 0.0132 - 40 0.158 - 41 0.151 - 45 0.00658 - - 55 2721 34 0 - 0 0.0978 - 1 0.000368 - 2 0.0298 - 3 0.0011 - 4 0.00257 - 7 0.27 - 8 0.00551 - 12 0.0305 - 13 0.00147 - 14 0.000735 - 15 0.00368 - 19 0.000735 - 21 0.0243 - 22 0.0011 - 24 0.000368 - 26 0.0724 - 28 0.000368 - 29 0.0592 - 30 0.00515 - 31 0.00368 - 32 0.00147 - 33 0.0287 - 34 0.00331 - 35 0.00147 - 37 0.00184 - 39 0.000368 - 40 0.166 - 41 0.16 - 42 0.0103 - 43 0.00221 - 44 0.0011 - 45 0.00845 - 46 0.00257 - 47 0.0011 - - 57 1 1 0 - 31 1 - - 58 31 13 0 - 0 0.0968 - 2 0.0323 - 4 0.0323 - 7 0.194 - 13 0.0645 - 21 0.0323 - 26 0.0323 - 29 0.0323 - 31 0.0645 - 33 0.0645 - 40 0.194 - 41 0.129 - 46 0.0323 - - 60 950 25 0 - 0 0.0137 - 2 0.0179 - 3 0.0621 - 4 0.0189 - 7 0.479 - 8 0.0211 - 9 0.0211 - 12 0.00211 - 13 0.00105 - 15 0.00316 - 21 0.0189 - 22 0.00632 - 26 0.0653 - 29 0.0105 - 30 0.00211 - 31 0.0105 - 32 0.00526 - 33 0.00211 - 34 0.00211 - 40 0.132 - 41 0.0705 - 42 0.00947 - 43 0.00421 - 44 0.02 - 46 0.00105 - - 68 43 12 0 - 0 0.0465 - 2 0.0233 - 7 0.186 - 8 0.0233 - 12 0.0233 - 26 0.0233 - 29 0.0465 - 31 0.0465 - 36 0.0233 - 40 0.279 - 41 0.233 - 42 0.0465 - - 14 55733 44 33 - 0 0.0834 - 1 0.000718 - 2 0.044 - 3 0.0017 - 4 0.0176 - 5 8.97e-05 - 7 0.251 - 8 0.0175 - 9 0.001 - 10 3.59e-05 - 12 0.0299 - 13 0.00215 - 14 0.000807 - 15 0.0023 - 16 3.59e-05 - 17 5.38e-05 - 18 3.59e-05 - 19 0.00468 - 20 0.000161 - 21 0.0335 - 22 0.00206 - 23 0.000126 - 24 0.000646 - 25 1.79e-05 - 26 0.0419 - 28 0.00355 - 29 0.0527 - 30 0.0145 - 31 0.0224 - 32 0.0385 - 33 0.00206 - 34 0.0131 - 35 0.00736 - 36 0.000467 - 37 0.00224 - 39 0.000323 - 40 0.144 - 41 0.13 - 42 0.0201 - 43 0.00169 - 44 0.00452 - 45 0.00237 - 46 0.00397 - 47 0.00106 - - 2 903 28 0 - 0 0.0709 - 2 0.0244 - 4 0.00443 - 7 0.199 - 8 0.00443 - 9 0.00221 - 12 0.0321 - 19 0.00554 - 21 0.0377 - 22 0.00221 - 26 0.0255 - 28 0.00111 - 29 0.0532 - 30 0.0166 - 31 0.0233 - 32 0.041 - 33 0.00775 - 34 0.0177 - 35 0.00443 - 36 0.00111 - 37 0.00221 - 40 0.229 - 41 0.142 - 42 0.031 - 43 0.00554 - 45 0.00111 - 46 0.00554 - 47 0.00886 - - 3 4221 37 0 - 0 0.0315 - 2 0.0334 - 4 0.129 - 7 0.211 - 8 0.0339 - 9 0.00379 - 12 0.00782 - 13 0.00355 - 14 0.000237 - 15 0.00498 - 16 0.000237 - 19 0.00498 - 20 0.000237 - 21 0.0576 - 22 0.00426 - 23 0.000237 - 25 0.000237 - 26 0.0431 - 28 0.00118 - 29 0.0206 - 30 0.00805 - 31 0.0199 - 32 0.00877 - 33 0.00142 - 34 0.00332 - 35 0.00284 - 36 0.000474 - 37 0.00118 - 39 0.000711 - 40 0.154 - 41 0.137 - 42 0.0566 - 43 0.00237 - 44 0.00877 - 45 0.000474 - 46 0.00118 - 47 0.00166 - - 4 5302 37 0 - 0 0.151 - 1 0.00132 - 2 0.0228 - 3 0.000566 - 4 0.00622 - 7 0.247 - 8 0.0104 - 9 0.000377 - 12 0.0541 - 13 0.0017 - 14 0.00189 - 15 0.00302 - 17 0.000189 - 19 0.0164 - 20 0.000377 - 21 0.0353 - 22 0.00113 - 23 0.000189 - 24 0.00207 - 26 0.0313 - 28 0.00453 - 29 0.0621 - 30 0.00962 - 31 0.0226 - 32 0.0732 - 33 0.00245 - 34 0.0143 - 35 0.00905 - 36 0.000566 - 37 0.00226 - 40 0.101 - 41 0.0934 - 42 0.0106 - 43 0.000943 - 44 0.0017 - 45 0.00245 - 46 0.00264 - - 6 7 5 0 - 7 0.429 - 26 0.143 - 31 0.143 - 40 0.143 - 44 0.143 - - 8 12828 41 0 - 0 0.075 - 1 0.00039 - 2 0.0472 - 3 0.000468 - 4 0.00834 - 5 7.8e-05 - 7 0.251 - 8 0.0159 - 9 0.000312 - 12 0.0288 - 13 0.00195 - 14 0.00101 - 15 0.0014 - 16 7.8e-05 - 17 7.8e-05 - 18 7.8e-05 - 19 0.00366 - 21 0.0241 - 22 0.00148 - 23 7.8e-05 - 24 0.000156 - 26 0.0391 - 28 0.00226 - 29 0.0366 - 30 0.0132 - 31 0.0214 - 32 0.029 - 33 0.00187 - 34 0.0136 - 35 0.0067 - 36 0.000546 - 37 0.00249 - 39 0.000702 - 40 0.18 - 41 0.153 - 42 0.0216 - 43 0.00164 - 44 0.00639 - 45 0.00226 - 46 0.00514 - 47 0.00156 - - 9 459 25 0 - 0 0.0566 - 1 0.00218 - 2 0.0501 - 4 0.00436 - 7 0.322 - 8 0.00871 - 12 0.0392 - 13 0.00654 - 15 0.00218 - 19 0.00654 - 21 0.0349 - 26 0.0588 - 28 0.00436 - 29 0.0174 - 30 0.0174 - 31 0.0109 - 32 0.0196 - 34 0.0131 - 35 0.00654 - 37 0.00436 - 40 0.15 - 41 0.146 - 42 0.0131 - 44 0.00218 - 46 0.00218 - - 10 269 24 0 - 0 0.126 - 2 0.0112 - 4 0.00372 - 7 0.216 - 8 0.0149 - 12 0.0595 - 13 0.00372 - 19 0.0186 - 21 0.0297 - 24 0.00372 - 26 0.0335 - 28 0.00372 - 29 0.0335 - 30 0.0297 - 31 0.0112 - 32 0.1 - 33 0.00743 - 34 0.00372 - 35 0.00372 - 40 0.0818 - 41 0.167 - 42 0.0186 - 43 0.00372 - 45 0.0149 - - 13 9556 39 0 - 0 0.0876 - 1 0.00115 - 2 0.0643 - 3 0.000837 - 4 0.0068 - 5 0.000105 - 7 0.187 - 8 0.0139 - 9 0.000733 - 12 0.0274 - 13 0.00199 - 14 0.000105 - 15 0.00199 - 18 0.000105 - 19 0.00199 - 20 0.000314 - 21 0.0331 - 22 0.00167 - 23 0.000105 - 24 0.000523 - 26 0.0328 - 28 0.00262 - 29 0.0671 - 30 0.013 - 31 0.0202 - 32 0.0419 - 33 0.0023 - 34 0.0142 - 35 0.0045 - 36 0.000209 - 37 0.00188 - 40 0.173 - 41 0.167 - 42 0.0168 - 43 0.00188 - 44 0.0023 - 45 0.0023 - 46 0.00366 - 47 0.000942 - - 14 538 26 0 - 0 0.0874 - 2 0.0502 - 4 0.00929 - 7 0.18 - 8 0.00929 - 10 0.00186 - 12 0.0297 - 13 0.00558 - 15 0.00186 - 21 0.0335 - 26 0.0372 - 28 0.00186 - 29 0.0967 - 30 0.00558 - 31 0.00929 - 32 0.0409 - 33 0.00372 - 34 0.00929 - 35 0.00558 - 40 0.19 - 41 0.139 - 42 0.0353 - 44 0.00186 - 45 0.00743 - 46 0.00558 - 47 0.00186 - - 15 2001 34 0 - 0 0.125 - 1 0.001 - 2 0.037 - 3 0.006 - 4 0.005 - 7 0.147 - 8 0.013 - 12 0.0335 - 13 0.0005 - 14 0.0015 - 15 0.0045 - 19 0.003 - 21 0.026 - 22 0.003 - 23 0.0005 - 26 0.039 - 28 0.0025 - 29 0.141 - 30 0.0155 - 31 0.015 - 32 0.0465 - 33 0.004 - 34 0.0145 - 35 0.008 - 37 0.0025 - 39 0.0005 - 40 0.14 - 41 0.133 - 42 0.0145 - 43 0.0025 - 44 0.0045 - 45 0.004 - 46 0.003 - 47 0.0015 - - 16 26 9 0 - 0 0.115 - 7 0.0769 - 26 0.115 - 29 0.269 - 32 0.0385 - 40 0.231 - 41 0.0769 - 42 0.0385 - 44 0.0385 - - 19 6 5 0 - 12 0.167 - 21 0.333 - 29 0.167 - 35 0.167 - 40 0.167 - - 20 1519 34 0 - 0 0.107 - 1 0.000658 - 2 0.0434 - 3 0.00132 - 4 0.0105 - 5 0.000658 - 7 0.244 - 8 0.00658 - 9 0.00132 - 12 0.0217 - 13 0.00263 - 14 0.00197 - 15 0.000658 - 19 0.00132 - 21 0.0421 - 22 0.00263 - 23 0.000658 - 24 0.00329 - 26 0.0737 - 28 0.0118 - 29 0.029 - 30 0.00592 - 31 0.0151 - 32 0.0263 - 33 0.00197 - 35 0.00263 - 37 0.00395 - 39 0.000658 - 40 0.185 - 41 0.132 - 42 0.0132 - 43 0.000658 - 45 0.00395 - 46 0.00197 - - 21 38 15 0 - 0 0.0789 - 2 0.0263 - 7 0.316 - 12 0.0263 - 21 0.0263 - 26 0.105 - 29 0.0263 - 30 0.0526 - 31 0.0526 - 32 0.0526 - 35 0.0526 - 40 0.0263 - 41 0.105 - 42 0.0263 - 46 0.0263 - - 23 2 1 0 - 21 1 - - 28 16 6 0 - 7 0.562 - 12 0.125 - 26 0.0625 - 28 0.125 - 32 0.0625 - 41 0.0625 - - 29 9 5 0 - 7 0.444 - 12 0.222 - 15 0.111 - 21 0.111 - 40 0.111 - - 30 480 24 0 - 0 0.0562 - 2 0.0542 - 4 0.00417 - 7 0.296 - 8 0.0104 - 12 0.0229 - 13 0.00208 - 15 0.00417 - 19 0.00417 - 21 0.0208 - 22 0.00208 - 26 0.0312 - 29 0.0521 - 30 0.00625 - 31 0.0146 - 32 0.0229 - 33 0.00208 - 34 0.0104 - 35 0.00417 - 39 0.00208 - 40 0.2 - 41 0.169 - 42 0.00625 - 46 0.00208 - - 31 394 24 0 - 0 0.0558 - 2 0.0508 - 4 0.00761 - 5 0.00254 - 7 0.289 - 8 0.0228 - 12 0.0431 - 19 0.00761 - 21 0.0305 - 26 0.0431 - 29 0.0203 - 30 0.0178 - 31 0.0152 - 32 0.0279 - 33 0.00254 - 34 0.0178 - 35 0.00761 - 40 0.15 - 41 0.142 - 42 0.0127 - 43 0.00254 - 44 0.0203 - 45 0.00508 - 46 0.00508 - - 34 3 2 0 - 7 0.667 - 44 0.333 - - 41 4 4 0 - 7 0.25 - 12 0.25 - 26 0.25 - 41 0.25 - - 42 3 3 0 - 7 0.333 - 40 0.333 - 46 0.333 - - 43 15 7 0 - 0 0.0667 - 2 0.133 - 7 0.0667 - 12 0.133 - 21 0.0667 - 40 0.133 - 41 0.4 - - 44 4 1 0 - 43 1 - - 45 61 6 0 - 0 0.0492 - 7 0.115 - 26 0.0328 - 40 0.148 - 41 0.0984 - 46 0.557 - - 46 98 17 0 - 0 0.0408 - 2 0.051 - 4 0.0102 - 7 0.214 - 8 0.0306 - 21 0.0102 - 26 0.0918 - 29 0.0102 - 30 0.0102 - 31 0.0306 - 32 0.0306 - 34 0.0612 - 35 0.0102 - 36 0.0102 - 40 0.163 - 41 0.173 - 42 0.051 - - 47 13576 41 0 - 0 0.0748 - 1 0.000737 - 2 0.0447 - 3 0.00464 - 4 0.00722 - 5 7.37e-05 - 7 0.329 - 8 0.018 - 9 0.00147 - 10 7.37e-05 - 12 0.0322 - 13 0.0025 - 14 0.000958 - 15 0.00214 - 17 7.37e-05 - 19 0.00412 - 20 0.000221 - 21 0.0351 - 22 0.00258 - 23 7.37e-05 - 24 0.000737 - 26 0.0542 - 28 0.00567 - 29 0.0577 - 30 0.022 - 31 0.0306 - 32 0.0463 - 33 0.00147 - 34 0.0171 - 35 0.0127 - 36 0.000737 - 37 0.00302 - 39 0.000221 - 40 0.0806 - 41 0.0854 - 42 0.0123 - 43 0.00125 - 44 0.00133 - 45 0.00243 - 46 0.00258 - 47 0.00081 - - 48 813 27 0 - 0 0.0652 - 1 0.00123 - 2 0.0271 - 4 0.00738 - 7 0.26 - 8 0.0726 - 9 0.00123 - 12 0.0123 - 15 0.00123 - 19 0.00369 - 21 0.0308 - 26 0.0308 - 28 0.00369 - 29 0.0246 - 30 0.0271 - 31 0.0308 - 32 0.0185 - 33 0.00123 - 34 0.00984 - 35 0.00615 - 40 0.194 - 41 0.143 - 42 0.016 - 43 0.00123 - 44 0.00123 - 45 0.00123 - 46 0.00861 - - 54 11 8 0 - 2 0.0909 - 7 0.0909 - 21 0.0909 - 26 0.0909 - 29 0.182 - 32 0.273 - 34 0.0909 - 40 0.0909 - - 55 1044 28 0 - 0 0.136 - 1 0.000958 - 2 0.0345 - 3 0.000958 - 4 0.00287 - 7 0.221 - 8 0.0125 - 12 0.0354 - 13 0.00192 - 15 0.000958 - 21 0.0172 - 22 0.00287 - 24 0.00192 - 26 0.0489 - 28 0.00479 - 29 0.0766 - 30 0.00958 - 31 0.00287 - 32 0.0326 - 33 0.00287 - 34 0.000958 - 35 0.000958 - 37 0.00192 - 40 0.199 - 41 0.126 - 42 0.0153 - 45 0.0067 - 46 0.000958 - - 58 20 11 0 - 0 0.1 - 1 0.05 - 2 0.1 - 7 0.15 - 8 0.05 - 21 0.05 - 31 0.05 - 40 0.2 - 41 0.15 - 42 0.05 - 44 0.05 - - 60 1381 27 0 - 0 0.034 - 2 0.021 - 4 0.0587 - 7 0.254 - 8 0.0391 - 9 0.00145 - 12 0.0101 - 13 0.00217 - 14 0.000724 - 15 0.00579 - 19 0.00145 - 21 0.0434 - 22 0.00362 - 26 0.0268 - 29 0.0224 - 30 0.0101 - 31 0.0203 - 32 0.00507 - 33 0.000724 - 34 0.00434 - 35 0.00217 - 40 0.177 - 41 0.159 - 42 0.0485 - 43 0.00362 - 44 0.0434 - 46 0.000724 - - 68 113 16 0 - 0 0.0619 - 2 0.0265 - 4 0.00885 - 7 0.142 - 8 0.00885 - 12 0.0177 - 21 0.0531 - 26 0.00885 - 29 0.0442 - 31 0.00885 - 32 0.0177 - 33 0.00885 - 34 0.0354 - 40 0.363 - 41 0.177 - 42 0.0177 - - 15 38960 40 26 - 0 0.0826 - 1 7.7e-05 - 2 0.0494 - 3 0.039 - 4 0.00503 - 5 5.13e-05 - 6 2.57e-05 - 7 0.091 - 8 0.00395 - 9 0.000231 - 12 0.0263 - 13 0.00357 - 14 0.00113 - 15 0.00572 - 17 2.57e-05 - 18 0.000642 - 19 0.00167 - 20 0.000282 - 21 0.0216 - 22 0.000796 - 24 7.7e-05 - 26 0.0177 - 28 0.0021 - 29 0.128 - 30 0.00359 - 31 0.00182 - 32 0.00347 - 33 0.0401 - 34 0.00228 - 35 0.00139 - 37 0.00126 - 39 0.000616 - 40 0.125 - 41 0.3 - 42 0.016 - 43 0.00726 - 44 0.00667 - 45 0.00195 - 46 0.00385 - 47 0.00316 - - 2 1047 29 0 - 0 0.0965 - 2 0.0506 - 4 0.00573 - 7 0.085 - 8 0.00669 - 12 0.022 - 13 0.00382 - 14 0.000955 - 15 0.00287 - 18 0.000955 - 19 0.000955 - 21 0.0172 - 26 0.0086 - 28 0.00191 - 29 0.11 - 30 0.00382 - 32 0.0181 - 33 0.0162 - 34 0.00573 - 35 0.000955 - 37 0.000955 - 40 0.226 - 41 0.29 - 42 0.0162 - 43 0.000955 - 44 0.00191 - 45 0.000955 - 46 0.00287 - 47 0.000955 - - 3 26 9 0 - 2 0.0385 - 3 0.0385 - 7 0.154 - 12 0.0385 - 15 0.0385 - 29 0.192 - 40 0.0769 - 41 0.385 - 42 0.0385 - - 4 2090 35 0 - 0 0.116 - 2 0.0656 - 3 0.0172 - 4 0.0067 - 7 0.201 - 8 0.0067 - 9 0.000957 - 12 0.0536 - 13 0.00335 - 14 0.00431 - 15 0.011 - 19 0.00239 - 20 0.00144 - 21 0.0292 - 22 0.00191 - 24 0.000478 - 26 0.0316 - 28 0.00574 - 29 0.0914 - 30 0.00526 - 31 0.00526 - 32 0.00526 - 33 0.0421 - 34 0.00431 - 35 0.00335 - 37 0.000957 - 39 0.000478 - 40 0.106 - 41 0.15 - 42 0.011 - 43 0.00144 - 44 0.00383 - 45 0.00335 - 46 0.00383 - 47 0.00287 - - 6 28 8 0 - 0 0.0714 - 2 0.179 - 7 0.0357 - 29 0.107 - 40 0.0714 - 41 0.464 - 42 0.0357 - 44 0.0357 - - 7 37 9 0 - 2 0.0811 - 3 0.0811 - 12 0.027 - 26 0.027 - 29 0.0541 - 40 0.378 - 41 0.27 - 42 0.027 - 46 0.0541 - - 8 578 29 0 - 0 0.045 - 2 0.0346 - 3 0.0225 - 4 0.00865 - 7 0.133 - 8 0.00346 - 9 0.00173 - 12 0.026 - 13 0.00173 - 14 0.00346 - 15 0.00173 - 19 0.00519 - 21 0.00519 - 26 0.0242 - 28 0.00346 - 29 0.026 - 30 0.00692 - 31 0.00173 - 32 0.00692 - 33 0.0173 - 34 0.0104 - 35 0.00346 - 37 0.00519 - 40 0.253 - 41 0.325 - 42 0.0138 - 44 0.00346 - 46 0.00173 - 47 0.00519 - - 9 2 2 0 - 0 0.5 - 33 0.5 - - 13 164 20 0 - 0 0.0793 - 2 0.0244 - 3 0.0122 - 7 0.0976 - 12 0.0122 - 13 0.0122 - 15 0.0122 - 21 0.0183 - 26 0.0122 - 29 0.122 - 30 0.0061 - 31 0.0061 - 33 0.0427 - 34 0.0061 - 37 0.0122 - 40 0.122 - 41 0.317 - 42 0.0427 - 44 0.0305 - 46 0.0122 - - 15 19923 36 0 - 0 0.0786 - 2 0.0509 - 3 0.00181 - 4 0.00467 - 7 0.0876 - 8 0.00301 - 9 0.000151 - 12 0.0213 - 13 0.00221 - 14 0.000803 - 15 0.00427 - 18 0.000452 - 19 0.00136 - 20 0.000201 - 21 0.0202 - 22 0.000803 - 24 5.02e-05 - 26 0.013 - 28 0.00176 - 29 0.151 - 30 0.00351 - 31 0.00131 - 32 0.00296 - 33 0.0504 - 34 0.00171 - 35 0.00161 - 37 0.000653 - 39 0.000452 - 40 0.113 - 41 0.34 - 42 0.0163 - 43 0.00407 - 44 0.0102 - 45 0.00216 - 46 0.00371 - 47 0.00386 - - 16 534 23 0 - 0 0.0337 - 2 0.073 - 4 0.00375 - 7 0.0974 - 8 0.00187 - 12 0.015 - 13 0.00375 - 15 0.00187 - 21 0.00749 - 26 0.0169 - 28 0.00187 - 29 0.152 - 30 0.00562 - 32 0.00375 - 33 0.0169 - 34 0.00187 - 35 0.00375 - 39 0.00187 - 40 0.204 - 41 0.307 - 42 0.0393 - 44 0.00187 - 47 0.00562 - - 20 11 8 0 - 0 0.0909 - 2 0.0909 - 7 0.182 - 26 0.0909 - 31 0.0909 - 40 0.273 - 41 0.0909 - 44 0.0909 - - 21 37 10 0 - 0 0.0541 - 2 0.027 - 7 0.108 - 13 0.0541 - 15 0.0541 - 29 0.027 - 33 0.027 - 40 0.243 - 41 0.378 - 42 0.027 - - 30 7 3 0 - 0 0.143 - 40 0.571 - 41 0.286 - - 31 8 7 0 - 2 0.125 - 7 0.25 - 12 0.125 - 33 0.125 - 34 0.125 - 41 0.125 - 42 0.125 - - 40 23 10 0 - 2 0.13 - 6 0.0435 - 7 0.13 - 29 0.087 - 33 0.0435 - 40 0.0435 - 41 0.391 - 43 0.0435 - 44 0.0435 - 47 0.0435 - - 41 51 7 0 - 2 0.0392 - 3 0.098 - 7 0.0196 - 29 0.0588 - 40 0.275 - 41 0.471 - 42 0.0392 - - 43 10 4 0 - 0 0.3 - 2 0.2 - 29 0.1 - 41 0.4 - - 44 8 2 0 - 41 0.125 - 43 0.875 - - 45 19 5 0 - 3 0.0526 - 7 0.211 - 40 0.105 - 41 0.211 - 46 0.421 - - 46 22 9 0 - 0 0.0909 - 7 0.0455 - 26 0.0455 - 29 0.0455 - 33 0.0455 - 40 0.0909 - 41 0.545 - 42 0.0455 - 46 0.0455 - - 47 14081 39 0 - 0 0.0871 - 1 0.000213 - 2 0.0447 - 3 0.101 - 4 0.0054 - 5 0.000142 - 7 0.076 - 8 0.0049 - 9 0.000142 - 12 0.0304 - 13 0.0054 - 14 0.00107 - 15 0.00746 - 17 7.1e-05 - 18 0.00107 - 19 0.00206 - 20 0.000284 - 21 0.0248 - 22 0.000781 - 24 7.1e-05 - 26 0.0229 - 28 0.00213 - 29 0.108 - 30 0.0032 - 31 0.00206 - 32 0.00284 - 33 0.0295 - 34 0.0022 - 35 0.00071 - 37 0.00199 - 39 0.000923 - 40 0.127 - 41 0.266 - 42 0.0149 - 43 0.0135 - 44 0.00241 - 45 0.00178 - 46 0.00355 - 47 0.0022 - - 48 43 13 0 - 0 0.14 - 2 0.0698 - 3 0.0233 - 7 0.14 - 8 0.0233 - 12 0.0698 - 26 0.0465 - 29 0.0698 - 31 0.0233 - 33 0.0233 - 40 0.186 - 41 0.163 - 42 0.0233 - - 54 20 6 0 - 0 0.05 - 7 0.3 - 29 0.1 - 33 0.05 - 40 0.3 - 41 0.2 - - 55 144 17 0 - 0 0.0347 - 2 0.0347 - 3 0.0139 - 7 0.236 - 12 0.0208 - 13 0.00694 - 21 0.0139 - 26 0.0208 - 29 0.181 - 30 0.0139 - 33 0.0347 - 40 0.111 - 41 0.25 - 42 0.00694 - 44 0.00694 - 46 0.00694 - 47 0.00694 - - 58 27 6 0 - 7 0.037 - 12 0.037 - 31 0.037 - 33 0.0741 - 40 0.593 - 41 0.222 - - 60 6 5 0 - 0 0.167 - 3 0.167 - 7 0.333 - 9 0.167 - 14 0.167 - - 16 1553 34 14 - 0 0.122 - 2 0.0599 - 3 0.00129 - 4 0.00515 - 5 0.000644 - 7 0.109 - 8 0.00515 - 9 0.000644 - 12 0.0399 - 13 0.00515 - 14 0.00193 - 15 0.00451 - 19 0.00258 - 20 0.000644 - 21 0.0258 - 22 0.000644 - 26 0.0232 - 28 0.000644 - 29 0.111 - 30 0.0058 - 31 0.00386 - 32 0.0367 - 33 0.0155 - 34 0.000644 - 35 0.0167 - 36 0.000644 - 40 0.127 - 41 0.214 - 42 0.0328 - 43 0.00386 - 44 0.00386 - 45 0.00193 - 46 0.00386 - 47 0.0135 - - 2 42 15 0 - 0 0.0714 - 2 0.0238 - 7 0.0952 - 19 0.0238 - 21 0.0714 - 28 0.0238 - 29 0.0238 - 31 0.0238 - 33 0.0238 - 35 0.0238 - 40 0.143 - 41 0.31 - 42 0.0714 - 45 0.0238 - 47 0.0476 - - 3 16 9 0 - 0 0.125 - 2 0.125 - 7 0.25 - 8 0.0625 - 12 0.0625 - 30 0.0625 - 31 0.0625 - 35 0.0625 - 41 0.188 - - 4 295 23 0 - 0 0.183 - 2 0.0542 - 4 0.00339 - 5 0.00339 - 7 0.0881 - 8 0.0136 - 12 0.0746 - 13 0.0102 - 19 0.00339 - 20 0.00339 - 21 0.0475 - 26 0.0373 - 29 0.119 - 30 0.0102 - 31 0.00339 - 32 0.0847 - 33 0.00339 - 35 0.0102 - 40 0.0915 - 41 0.132 - 42 0.0169 - 43 0.00339 - 45 0.00339 - - 8 87 15 0 - 0 0.207 - 2 0.023 - 7 0.115 - 12 0.0345 - 21 0.0115 - 26 0.023 - 29 0.046 - 31 0.0115 - 32 0.0805 - 34 0.0115 - 35 0.069 - 36 0.0115 - 40 0.149 - 41 0.161 - 42 0.046 - - 13 6 5 0 - 0 0.167 - 12 0.167 - 26 0.167 - 30 0.167 - 41 0.333 - - 15 766 24 0 - 0 0.0888 - 2 0.0614 - 3 0.00261 - 4 0.00522 - 7 0.101 - 8 0.00131 - 12 0.017 - 13 0.00392 - 15 0.00261 - 21 0.0157 - 22 0.00131 - 26 0.0144 - 29 0.144 - 30 0.00131 - 32 0.00653 - 33 0.0261 - 35 0.00653 - 40 0.148 - 41 0.273 - 42 0.0405 - 43 0.00392 - 44 0.00783 - 46 0.00522 - 47 0.0235 - - 16 35 13 0 - 0 0.0857 - 2 0.0286 - 4 0.0286 - 7 0.0857 - 12 0.0571 - 21 0.0571 - 26 0.0286 - 29 0.0286 - 32 0.0286 - 33 0.0286 - 40 0.0857 - 41 0.343 - 42 0.114 - - 21 5 4 0 - 0 0.2 - 2 0.2 - 7 0.2 - 42 0.4 - - 30 2 2 0 - 2 0.5 - 32 0.5 - - 45 1 1 0 - 46 1 - - 47 257 24 0 - 0 0.128 - 2 0.0778 - 4 0.00389 - 7 0.152 - 8 0.00778 - 9 0.00389 - 12 0.0623 - 13 0.00778 - 14 0.0117 - 15 0.0195 - 19 0.00778 - 21 0.0272 - 26 0.0389 - 29 0.0739 - 30 0.00778 - 31 0.00778 - 32 0.0661 - 35 0.0311 - 40 0.105 - 41 0.136 - 42 0.00778 - 43 0.00778 - 45 0.00389 - 46 0.00389 - - 48 8 7 0 - 7 0.125 - 12 0.125 - 32 0.125 - 33 0.125 - 40 0.125 - 41 0.25 - 47 0.125 - - 55 10 7 0 - 4 0.1 - 7 0.2 - 12 0.1 - 21 0.1 - 29 0.1 - 40 0.3 - 41 0.1 - - 60 11 6 0 - 0 0.273 - 7 0.0909 - 30 0.0909 - 35 0.182 - 40 0.182 - 41 0.182 - - 17 3 1 0 - 4 1 - - 18 8656 34 12 - 0 0.00508 - 2 0.0067 - 3 0.0261 - 4 0.000231 - 6 0.000231 - 7 0.00208 - 8 0.207 - 9 0.00173 - 10 0.026 - 12 0.00104 - 13 0.417 - 14 0.13 - 15 0.104 - 16 0.00381 - 19 0.000116 - 21 0.00555 - 22 0.000347 - 23 0.00208 - 26 0.000231 - 28 0.000347 - 29 0.00439 - 30 0.0117 - 31 0.00739 - 32 0.000462 - 33 0.00104 - 38 0.000578 - 39 0.0101 - 40 0.00485 - 41 0.00601 - 42 0.000231 - 43 0.000924 - 44 0.000231 - 45 0.0117 - 46 0.000231 - - 3 25 6 0 - 3 0.04 - 8 0.36 - 13 0.36 - 14 0.12 - 40 0.08 - 41 0.04 - - 6 2 2 0 - 13 0.5 - 46 0.5 - - 8 12 4 0 - 13 0.417 - 14 0.417 - 15 0.0833 - 29 0.0833 - - 13 2900 22 0 - 2 0.00103 - 3 0.0238 - 6 0.00069 - 7 0.00103 - 8 0.236 - 9 0.00172 - 10 0.04 - 13 0.477 - 14 0.132 - 15 0.0441 - 16 0.00103 - 21 0.00483 - 22 0.000345 - 23 0.0031 - 30 0.00793 - 31 0.00655 - 39 0.00931 - 40 0.00207 - 41 0.000345 - 42 0.000345 - 43 0.00069 - 45 0.00724 - - 14 544 15 0 - 2 0.00368 - 3 0.011 - 7 0.00184 - 8 0.0974 - 9 0.00184 - 10 0.00184 - 13 0.417 - 14 0.415 - 15 0.0129 - 23 0.00184 - 26 0.00368 - 30 0.0147 - 31 0.00735 - 40 0.00184 - 45 0.00735 - - 15 5059 31 0 - 0 0.0083 - 2 0.0103 - 3 0.0289 - 4 0.000395 - 7 0.00277 - 8 0.205 - 9 0.00178 - 10 0.0213 - 12 0.00178 - 13 0.381 - 14 0.0996 - 15 0.147 - 16 0.00534 - 19 0.000198 - 21 0.00672 - 22 0.000395 - 23 0.00158 - 29 0.00731 - 30 0.0134 - 31 0.00791 - 32 0.000791 - 33 0.00178 - 38 0.000988 - 39 0.0117 - 40 0.00633 - 41 0.00988 - 42 0.000198 - 43 0.00119 - 44 0.000395 - 45 0.015 - 46 0.000198 - - 16 66 9 0 - 0 0.0152 - 3 0.0303 - 8 0.121 - 13 0.545 - 14 0.0455 - 15 0.167 - 16 0.0455 - 30 0.0152 - 31 0.0152 - - 21 3 2 0 - 13 0.667 - 40 0.333 - - 28 1 1 0 - 0 1 - - 47 4 2 0 - 15 0.25 - 28 0.75 - - 55 3 2 0 - 2 0.333 - 13 0.667 - - 57 19 6 0 - 3 0.0526 - 8 0.0526 - 13 0.421 - 15 0.368 - 30 0.0526 - 39 0.0526 - - 19 17366 41 5 - 0 0.301 - 1 0.000173 - 2 0.0076 - 3 0.000864 - 4 0.012 - 5 0.000115 - 6 5.76e-05 - 7 0.0348 - 8 0.00749 - 9 0.00132 - 10 0.000115 - 12 0.124 - 13 0.00202 - 14 0.000749 - 15 0.000576 - 17 0.000115 - 18 0.000633 - 19 0.00161 - 20 0.000115 - 21 0.0537 - 22 0.00155 - 23 0.000173 - 24 0.00455 - 26 0.0163 - 28 0.0117 - 29 0.166 - 30 0.00242 - 31 0.0019 - 32 0.0774 - 33 0.106 - 34 0.000288 - 35 0.000633 - 37 0.00121 - 39 0.000288 - 40 0.0313 - 41 0.021 - 42 0.00334 - 43 0.000461 - 44 0.000921 - 45 0.00346 - 46 0.000461 - - 4 12 6 0 - 0 0.417 - 7 0.0833 - 12 0.25 - 29 0.0833 - 33 0.0833 - 40 0.0833 - - 13 2 2 0 - 26 0.5 - 40 0.5 - - 15 4 4 0 - 0 0.25 - 29 0.25 - 33 0.25 - 37 0.25 - - 21 3 2 0 - 12 0.667 - 41 0.333 - - 44 2 1 0 - 43 1 - - 20 34 11 0 - 0 0.0882 - 1 0.0588 - 13 0.0882 - 15 0.0294 - 21 0.0294 - 30 0.235 - 39 0.324 - 40 0.0294 - 41 0.0588 - 42 0.0294 - 43 0.0294 - - 21 674 33 12 - 0 0.049 - 2 0.0208 - 3 0.0089 - 4 0.0831 - 6 0.00148 - 7 0.2 - 8 0.0386 - 9 0.0134 - 12 0.0119 - 13 0.0326 - 14 0.0208 - 15 0.0208 - 19 0.0163 - 20 0.00148 - 21 0.0371 - 22 0.0089 - 26 0.0252 - 28 0.00297 - 29 0.00445 - 30 0.00593 - 31 0.00742 - 32 0.00445 - 33 0.0104 - 34 0.00148 - 37 0.00148 - 39 0.0089 - 40 0.168 - 41 0.169 - 42 0.0178 - 43 0.00148 - 44 0.00297 - 46 0.00148 - 47 0.00148 - - 2 50 13 0 - 3 0.02 - 4 0.38 - 8 0.02 - 9 0.02 - 13 0.14 - 14 0.08 - 15 0.1 - 21 0.06 - 28 0.02 - 39 0.02 - 40 0.06 - 41 0.06 - 42 0.02 - - 3 49 11 0 - 2 0.0408 - 3 0.0204 - 7 0.0612 - 8 0.0204 - 13 0.0816 - 29 0.0204 - 37 0.0204 - 40 0.571 - 41 0.122 - 42 0.0204 - 47 0.0204 - - 4 39 12 0 - 0 0.0256 - 4 0.0256 - 6 0.0256 - 7 0.0513 - 8 0.359 - 9 0.179 - 21 0.0256 - 22 0.154 - 30 0.0256 - 33 0.0256 - 40 0.0769 - 41 0.0256 - - 13 84 16 0 - 0 0.0714 - 2 0.0476 - 7 0.202 - 12 0.0119 - 13 0.0119 - 14 0.0119 - 19 0.0238 - 21 0.0238 - 26 0.0476 - 31 0.0119 - 33 0.0357 - 40 0.19 - 41 0.226 - 42 0.0595 - 44 0.0119 - 46 0.0119 - - 14 20 6 0 - 7 0.1 - 15 0.05 - 32 0.05 - 40 0.45 - 41 0.3 - 42 0.05 - - 15 7 5 0 - 2 0.143 - 29 0.143 - 40 0.143 - 41 0.429 - 42 0.143 - - 21 46 11 0 - 4 0.0435 - 7 0.674 - 8 0.0217 - 15 0.0217 - 19 0.0435 - 21 0.0435 - 26 0.0217 - 30 0.0217 - 31 0.0217 - 40 0.0652 - 41 0.0217 - - 41 60 12 0 - 3 0.05 - 4 0.333 - 7 0.0167 - 8 0.1 - 9 0.0167 - 13 0.117 - 14 0.117 - 15 0.0833 - 20 0.0167 - 21 0.1 - 33 0.0167 - 41 0.0333 - - 42 7 2 0 - 4 0.857 - 15 0.143 - - 47 289 26 0 - 0 0.0865 - 2 0.0242 - 3 0.00346 - 4 0.0242 - 7 0.263 - 8 0.0104 - 12 0.0242 - 13 0.0104 - 14 0.00346 - 15 0.00346 - 19 0.0242 - 21 0.0138 - 26 0.0346 - 28 0.00346 - 29 0.00346 - 30 0.00692 - 31 0.0104 - 32 0.00692 - 33 0.00692 - 34 0.00346 - 39 0.0173 - 40 0.163 - 41 0.235 - 42 0.0104 - 43 0.00346 - 44 0.00346 - - 49 2 2 0 - 4 0.5 - 14 0.5 - - 55 10 4 0 - 21 0.5 - 26 0.1 - 40 0.1 - 41 0.3 - - 22 48 11 2 - 2 0.0625 - 7 0.521 - 8 0.0417 - 12 0.0208 - 21 0.0208 - 29 0.0208 - 31 0.0208 - 37 0.0208 - 40 0.0833 - 41 0.167 - 42 0.0208 - - 4 2 2 0 - 8 0.5 - 40 0.5 - - 14 2 2 0 - 29 0.5 - 40 0.5 - - 23 19 8 1 - 7 0.579 - 8 0.0526 - 19 0.0526 - 21 0.105 - 29 0.0526 - 31 0.0526 - 40 0.0526 - 41 0.0526 - - 4 4 4 0 - 8 0.25 - 31 0.25 - 40 0.25 - 41 0.25 - - 24 8 3 0 - 7 0.5 - 40 0.25 - 41 0.25 - - 25 13 2 0 - 3 0.0769 - 42 0.923 - - 26 52 5 0 - 3 0.808 - 14 0.0192 - 15 0.0192 - 28 0.0385 - 39 0.115 - - 27 6 4 0 - 40 0.333 - 41 0.167 - 42 0.333 - 46 0.167 - - 28 92 16 2 - 0 0.0109 - 2 0.0326 - 4 0.087 - 7 0.424 - 8 0.0326 - 13 0.0109 - 15 0.0109 - 21 0.0435 - 26 0.0761 - 29 0.0217 - 40 0.0978 - 41 0.087 - 42 0.0217 - 45 0.0109 - 46 0.0217 - 47 0.0109 - - 13 5 4 0 - 7 0.2 - 26 0.4 - 29 0.2 - 45 0.2 - - 21 3 3 0 - 4 0.333 - 7 0.333 - 47 0.333 - - 29 6 5 0 - 4 0.167 - 7 0.333 - 8 0.167 - 29 0.167 - 33 0.167 - - 30 261 26 5 - 0 0.069 - 2 0.0307 - 3 0.00383 - 4 0.00766 - 7 0.429 - 8 0.0192 - 12 0.0268 - 13 0.00383 - 14 0.00383 - 19 0.00383 - 21 0.0307 - 22 0.00383 - 26 0.0307 - 29 0.023 - 30 0.00383 - 31 0.00766 - 32 0.00383 - 33 0.0153 - 37 0.00383 - 39 0.0115 - 40 0.138 - 41 0.0958 - 42 0.0153 - 43 0.00383 - 44 0.00383 - 46 0.0115 - - 2 9 3 0 - 7 0.778 - 21 0.111 - 40 0.111 - - 4 47 12 0 - 0 0.191 - 2 0.0213 - 3 0.0213 - 7 0.277 - 12 0.106 - 21 0.0426 - 29 0.0426 - 33 0.0851 - 39 0.0638 - 40 0.0426 - 41 0.0638 - 42 0.0426 - - 8 17 8 0 - 7 0.353 - 12 0.0588 - 21 0.0588 - 26 0.0588 - 29 0.0588 - 31 0.0588 - 40 0.118 - 41 0.235 - - 13 28 11 0 - 0 0.0357 - 2 0.0714 - 4 0.0357 - 7 0.536 - 8 0.0357 - 13 0.0357 - 14 0.0357 - 22 0.0357 - 26 0.0714 - 41 0.0714 - 44 0.0357 - - 47 136 19 0 - 0 0.0588 - 2 0.0294 - 4 0.00735 - 7 0.397 - 8 0.0221 - 12 0.00735 - 19 0.00735 - 21 0.0294 - 26 0.0368 - 29 0.0147 - 30 0.00735 - 31 0.00735 - 32 0.00735 - 37 0.00735 - 40 0.206 - 41 0.11 - 42 0.0147 - 43 0.00735 - 46 0.0221 - - 31 60 15 7 - 0 0.0333 - 2 0.0333 - 3 0.0167 - 4 0.0167 - 7 0.0833 - 12 0.05 - 14 0.0167 - 24 0.0167 - 26 0.0333 - 29 0.0833 - 30 0.0167 - 39 0.483 - 40 0.0667 - 41 0.0333 - 45 0.0167 - - 3 2 2 0 - 2 0.5 - 14 0.5 - - 4 33 6 0 - 0 0.0303 - 2 0.0303 - 3 0.0303 - 12 0.0303 - 39 0.848 - 40 0.0303 - - 13 7 6 0 - 4 0.143 - 7 0.286 - 12 0.143 - 26 0.143 - 41 0.143 - 45 0.143 - - 15 2 1 0 - 29 1 - - 21 2 2 0 - 7 0.5 - 41 0.5 - - 47 8 5 0 - 0 0.125 - 12 0.125 - 24 0.125 - 29 0.375 - 40 0.25 - - 55 2 2 0 - 26 0.5 - 30 0.5 - - 32 3 3 0 - 0 0.333 - 32 0.333 - 33 0.333 - - 33 65 17 5 - 0 0.0154 - 3 0.0462 - 4 0.169 - 7 0.138 - 8 0.0923 - 10 0.0154 - 13 0.0154 - 14 0.0308 - 19 0.0615 - 21 0.0308 - 22 0.0154 - 26 0.108 - 30 0.0154 - 34 0.0154 - 40 0.0154 - 41 0.2 - 45 0.0154 - - 2 6 3 0 - 4 0.5 - 7 0.333 - 8 0.167 - - 13 24 10 0 - 4 0.125 - 7 0.125 - 8 0.0417 - 13 0.0417 - 14 0.0417 - 19 0.0833 - 21 0.0417 - 26 0.167 - 34 0.0417 - 41 0.292 - - 14 3 3 0 - 8 0.333 - 19 0.333 - 45 0.333 - - 15 8 6 0 - 0 0.125 - 3 0.25 - 4 0.125 - 7 0.125 - 8 0.25 - 41 0.125 - - 47 17 12 0 - 3 0.0588 - 4 0.0588 - 7 0.176 - 8 0.0588 - 10 0.0588 - 19 0.0588 - 21 0.0588 - 22 0.0588 - 26 0.0588 - 30 0.0588 - 40 0.0588 - 41 0.235 - - 34 58 6 0 - 0 0.259 - 4 0.0172 - 12 0.379 - 21 0.0345 - 29 0.19 - 33 0.121 - - 35 6 4 0 - 0 0.333 - 26 0.167 - 40 0.333 - 41 0.167 - - 39 1790 1 0 - 3 1 - - 40 1001 17 7 - 0 0.000999 - 3 0.002 - 4 0.000999 - 12 0.000999 - 13 0.000999 - 14 0.002 - 15 0.00599 - 21 0.000999 - 26 0.000999 - 31 0.000999 - 35 0.000999 - 42 0.004 - 43 0.0679 - 44 0.0509 - 45 0.000999 - 46 0.014 - 47 0.844 - - 3 10 3 0 - 21 0.1 - 26 0.1 - 47 0.8 - - 15 187 8 0 - 0 0.00535 - 12 0.00535 - 15 0.0321 - 43 0.337 - 44 0.267 - 45 0.00535 - 46 0.0214 - 47 0.326 - - 55 492 11 0 - 3 0.00407 - 4 0.00203 - 13 0.00203 - 14 0.00407 - 31 0.00203 - 35 0.00203 - 42 0.00813 - 43 0.00203 - 44 0.00203 - 46 0.0061 - 47 0.965 - - 57 129 3 0 - 43 0.00775 - 46 0.0233 - 47 0.969 - - 62 40 1 0 - 47 1 - - 67 1 1 0 - 46 1 - - 69 35 1 0 - 47 1 - - 41 20629 39 17 - 0 0.0576 - 1 0.000145 - 2 0.0758 - 3 0.0369 - 4 0.147 - 6 0.000436 - 7 0.0581 - 8 0.0435 - 9 0.00145 - 10 0.000436 - 12 0.0155 - 13 0.0636 - 14 0.0132 - 15 0.126 - 16 0.00097 - 17 4.85e-05 - 19 0.00102 - 20 0.00305 - 21 0.044 - 22 0.000291 - 23 0.000242 - 24 0.000145 - 26 0.01 - 27 4.85e-05 - 28 0.000436 - 29 0.0714 - 30 0.0248 - 31 0.0326 - 32 0.00315 - 33 0.0252 - 34 0.0794 - 35 0.028 - 36 0.00499 - 37 0.014 - 39 0.00155 - 42 0.000145 - 44 0.000339 - 45 0.00344 - 46 0.0109 - - 2 7 3 0 - 7 0.429 - 21 0.429 - 22 0.143 - - 3 358 9 0 - 0 0.0112 - 2 0.00559 - 3 0.888 - 4 0.00279 - 7 0.0447 - 26 0.0196 - 31 0.0196 - 32 0.00559 - 46 0.00279 - - 13 26 10 0 - 3 0.0385 - 4 0.0385 - 6 0.0385 - 7 0.269 - 21 0.0385 - 26 0.0385 - 29 0.0385 - 30 0.0385 - 34 0.0385 - 46 0.423 - - 14 11 6 0 - 0 0.0909 - 6 0.0909 - 7 0.0909 - 13 0.0909 - 21 0.273 - 46 0.364 - - 15 18 9 0 - 0 0.0556 - 2 0.0556 - 3 0.0556 - 4 0.0556 - 7 0.278 - 14 0.0556 - 21 0.111 - 29 0.278 - 33 0.0556 - - 27 1 1 0 - 46 1 - - 48 242 18 0 - 0 0.211 - 2 0.0165 - 4 0.0207 - 7 0.128 - 8 0.0165 - 12 0.0868 - 13 0.0165 - 15 0.00826 - 21 0.062 - 22 0.00413 - 26 0.0372 - 29 0.062 - 30 0.0207 - 31 0.215 - 32 0.0124 - 33 0.0579 - 34 0.0207 - 37 0.00413 - - 49 44 13 0 - 0 0.136 - 2 0.159 - 4 0.182 - 7 0.205 - 12 0.0227 - 13 0.0227 - 15 0.0682 - 21 0.0455 - 29 0.0227 - 30 0.0455 - 31 0.0455 - 32 0.0227 - 46 0.0227 - - 55 17277 39 0 - 0 0.0341 - 1 0.000116 - 2 0.0865 - 3 0.0252 - 4 0.17 - 6 0.000347 - 7 0.0512 - 8 0.0478 - 9 0.00145 - 10 0.000463 - 12 0.00666 - 13 0.0737 - 14 0.0153 - 15 0.148 - 16 0.00116 - 17 5.79e-05 - 19 0.000868 - 20 0.00359 - 21 0.0416 - 22 0.000232 - 23 0.000289 - 24 5.79e-05 - 26 0.007 - 27 5.79e-05 - 28 0.000405 - 29 0.0587 - 30 0.0212 - 31 0.0301 - 32 0.00127 - 33 0.0201 - 34 0.0843 - 35 0.0312 - 36 0.00561 - 37 0.0149 - 39 0.00185 - 42 0.000174 - 44 0.000347 - 45 0.00313 - 46 0.0102 - - 56 4 3 0 - 12 0.25 - 30 0.25 - 46 0.5 - - 57 1015 30 0 - 0 0.106 - 1 0.000985 - 2 0.0177 - 3 0.00394 - 4 0.0236 - 6 0.000985 - 7 0.164 - 8 0.0433 - 9 0.00394 - 12 0.0286 - 13 0.00591 - 14 0.00197 - 15 0.0197 - 20 0.000985 - 21 0.07 - 24 0.000985 - 26 0.0424 - 28 0.000985 - 29 0.0562 - 30 0.1 - 31 0.067 - 32 0.00788 - 33 0.0177 - 34 0.144 - 35 0.0256 - 36 0.00493 - 37 0.0246 - 44 0.000985 - 45 0.00296 - 46 0.0118 - - 58 63 17 0 - 0 0.0317 - 2 0.0317 - 3 0.0159 - 4 0.27 - 7 0.0794 - 8 0.0476 - 9 0.0159 - 13 0.159 - 15 0.0159 - 21 0.0317 - 29 0.0317 - 30 0.0317 - 33 0.0159 - 34 0.0317 - 35 0.127 - 37 0.0159 - 45 0.0476 - - 61 13 6 0 - 0 0.308 - 7 0.0769 - 12 0.231 - 29 0.231 - 31 0.0769 - 33 0.0769 - - 62 20 11 0 - 0 0.05 - 2 0.05 - 3 0.05 - 4 0.1 - 7 0.1 - 8 0.1 - 13 0.15 - 21 0.05 - 29 0.05 - 30 0.1 - 46 0.2 - - 64 1038 24 0 - 0 0.286 - 2 0.0231 - 4 0.0116 - 7 0.0222 - 8 0.0106 - 10 0.000963 - 12 0.0983 - 13 0.00771 - 14 0.00482 - 15 0.0154 - 19 0.00482 - 21 0.0626 - 26 0.0125 - 28 0.000963 - 29 0.283 - 30 0.0164 - 31 0.0135 - 32 0.0183 - 33 0.0877 - 34 0.00289 - 35 0.000963 - 37 0.000963 - 45 0.00867 - 46 0.00578 - - 68 2 2 0 - 0 0.5 - 33 0.5 - - 69 481 24 0 - 0 0.254 - 2 0.0187 - 4 0.0125 - 7 0.0915 - 8 0.0166 - 12 0.0977 - 13 0.00832 - 14 0.00208 - 15 0.00832 - 19 0.00208 - 21 0.0478 - 24 0.00208 - 26 0.027 - 29 0.166 - 30 0.0291 - 31 0.0187 - 32 0.0208 - 33 0.0956 - 34 0.0499 - 35 0.00624 - 36 0.00208 - 37 0.00416 - 45 0.00416 - 46 0.0146 - - 42 2040 38 16 - 0 0.0211 - 2 0.0422 - 3 0.259 - 4 0.102 - 5 0.00049 - 7 0.0284 - 8 0.0373 - 9 0.00294 - 10 0.00049 - 11 0.00098 - 12 0.00686 - 13 0.0422 - 14 0.0304 - 15 0.123 - 16 0.00098 - 19 0.00343 - 20 0.00392 - 21 0.0338 - 22 0.00049 - 25 0.00049 - 26 0.00833 - 28 0.00588 - 29 0.0137 - 30 0.0191 - 31 0.0132 - 32 0.00196 - 33 0.00392 - 34 0.0123 - 35 0.00539 - 37 0.00637 - 38 0.00098 - 39 0.0574 - 40 0.00441 - 42 0.00049 - 44 0.00049 - 45 0.0152 - 46 0.00098 - 47 0.0897 - - 3 11 1 0 - 47 1 - - 13 23 4 0 - 7 0.087 - 8 0.0435 - 26 0.13 - 47 0.739 - - 14 55 4 0 - 2 0.0182 - 7 0.0182 - 40 0.127 - 47 0.836 - - 15 54 1 0 - 47 1 - - 16 10 2 0 - 40 0.2 - 47 0.8 - - 40 3 2 0 - 15 0.333 - 39 0.667 - - 41 3 2 0 - 13 0.333 - 39 0.667 - - 46 11 7 0 - 4 0.364 - 7 0.0909 - 8 0.0909 - 12 0.0909 - 13 0.0909 - 14 0.182 - 15 0.0909 - - 48 5 5 0 - 0 0.2 - 2 0.2 - 7 0.2 - 12 0.2 - 21 0.2 - - 49 2 2 0 - 7 0.5 - 29 0.5 - - 55 1709 36 0 - 0 0.0164 - 2 0.0474 - 3 0.305 - 4 0.116 - 5 0.000585 - 7 0.0199 - 8 0.0392 - 9 0.00351 - 10 0.000585 - 11 0.00117 - 12 0.00293 - 13 0.0486 - 14 0.0339 - 15 0.143 - 16 0.00117 - 19 0.00351 - 20 0.00468 - 21 0.0363 - 22 0.000585 - 25 0.000585 - 26 0.00644 - 28 0.00702 - 29 0.00995 - 30 0.0164 - 31 0.0135 - 32 0.000585 - 33 0.0041 - 34 0.0117 - 35 0.00585 - 37 0.00702 - 38 0.00117 - 39 0.0655 - 42 0.000585 - 44 0.000585 - 45 0.0164 - 47 0.00819 - - 57 51 19 0 - 0 0.118 - 2 0.0196 - 4 0.0588 - 7 0.216 - 8 0.0588 - 12 0.0588 - 15 0.0392 - 19 0.0196 - 21 0.0392 - 26 0.0196 - 29 0.0392 - 30 0.0784 - 33 0.0196 - 34 0.0784 - 35 0.0196 - 37 0.0196 - 45 0.0196 - 46 0.0196 - 47 0.0588 - - 58 39 9 0 - 3 0.179 - 7 0.0256 - 8 0.0256 - 21 0.0256 - 29 0.0513 - 31 0.0513 - 34 0.0256 - 45 0.0256 - 47 0.59 - - 62 5 4 0 - 2 0.2 - 7 0.2 - 30 0.4 - 46 0.2 - - 64 34 15 0 - 0 0.176 - 2 0.0294 - 4 0.0882 - 7 0.0882 - 8 0.0588 - 12 0.118 - 13 0.0294 - 14 0.0588 - 21 0.0294 - 26 0.0294 - 29 0.118 - 30 0.0294 - 31 0.0588 - 32 0.0294 - 47 0.0588 - - 69 20 11 0 - 0 0.1 - 4 0.05 - 7 0.1 - 8 0.05 - 21 0.1 - 26 0.05 - 29 0.1 - 30 0.15 - 32 0.1 - 45 0.05 - 47 0.15 - - 43 97 22 8 - 0 0.0928 - 2 0.0825 - 4 0.0206 - 6 0.0103 - 7 0.144 - 12 0.0412 - 15 0.0103 - 19 0.0103 - 21 0.0206 - 26 0.0103 - 29 0.0103 - 30 0.0103 - 31 0.0103 - 32 0.0206 - 33 0.0619 - 34 0.0103 - 35 0.0103 - 40 0.134 - 41 0.113 - 42 0.103 - 44 0.0103 - 47 0.0619 - - 13 12 7 0 - 0 0.0833 - 2 0.0833 - 7 0.0833 - 33 0.333 - 40 0.0833 - 41 0.167 - 42 0.167 - - 14 8 7 0 - 0 0.25 - 7 0.125 - 12 0.125 - 31 0.125 - 32 0.125 - 34 0.125 - 35 0.125 - - 15 12 9 0 - 0 0.167 - 4 0.0833 - 7 0.0833 - 12 0.0833 - 26 0.0833 - 29 0.0833 - 40 0.0833 - 42 0.25 - 47 0.0833 - - 40 2 1 0 - 47 1 - - 55 37 13 0 - 0 0.027 - 2 0.135 - 4 0.027 - 6 0.027 - 7 0.189 - 15 0.027 - 19 0.027 - 33 0.027 - 40 0.216 - 41 0.135 - 42 0.108 - 44 0.027 - 47 0.027 - - 57 16 10 0 - 0 0.188 - 2 0.125 - 7 0.125 - 12 0.125 - 21 0.0625 - 30 0.0625 - 32 0.0625 - 40 0.0625 - 41 0.0625 - 47 0.125 - - 58 2 1 0 - 41 1 - - 69 2 2 0 - 21 0.5 - 40 0.5 - - 44 52 11 0 - 2 0.0769 - 3 0.0192 - 4 0.0577 - 7 0.25 - 8 0.0385 - 13 0.0385 - 15 0.25 - 21 0.0192 - 30 0.0385 - 35 0.0192 - 39 0.192 - - 45 238 22 10 - 0 0.0252 - 2 0.0252 - 3 0.0084 - 4 0.126 - 6 0.0168 - 7 0.0924 - 8 0.0798 - 9 0.0042 - 12 0.0042 - 13 0.0924 - 15 0.311 - 16 0.0084 - 19 0.0546 - 21 0.0294 - 26 0.0042 - 28 0.021 - 30 0.0168 - 31 0.0252 - 32 0.0042 - 34 0.0168 - 35 0.021 - 37 0.0126 - - 2 30 9 0 - 0 0.0333 - 3 0.0333 - 4 0.0667 - 8 0.133 - 9 0.0333 - 13 0.167 - 15 0.467 - 16 0.0333 - 37 0.0333 - - 8 5 4 0 - 6 0.2 - 8 0.2 - 15 0.4 - 21 0.2 - - 13 11 6 0 - 3 0.0909 - 4 0.0909 - 6 0.0909 - 7 0.0909 - 15 0.545 - 30 0.0909 - - 41 40 14 0 - 0 0.025 - 2 0.05 - 4 0.225 - 7 0.05 - 8 0.075 - 12 0.025 - 13 0.125 - 15 0.175 - 16 0.025 - 19 0.05 - 21 0.05 - 28 0.05 - 30 0.025 - 35 0.05 - - 42 21 8 0 - 0 0.143 - 4 0.143 - 7 0.0476 - 8 0.143 - 13 0.0476 - 19 0.381 - 31 0.0476 - 37 0.0476 - - 46 8 3 0 - 4 0.25 - 13 0.125 - 15 0.625 - - 55 107 16 0 - 2 0.00935 - 4 0.121 - 6 0.0187 - 7 0.15 - 8 0.0467 - 13 0.0935 - 15 0.355 - 19 0.028 - 21 0.0187 - 26 0.00935 - 28 0.028 - 30 0.00935 - 31 0.0467 - 34 0.028 - 35 0.028 - 37 0.00935 - - 57 5 4 0 - 2 0.2 - 7 0.4 - 8 0.2 - 34 0.2 - - 58 6 4 0 - 0 0.167 - 2 0.333 - 21 0.333 - 30 0.167 - - 69 1 1 0 - 32 1 - - 46 898 32 13 - 0 0.0635 - 1 0.00223 - 2 0.0668 - 3 0.00445 - 4 0.0568 - 7 0.345 - 8 0.0212 - 12 0.0167 - 13 0.00557 - 14 0.00223 - 15 0.0167 - 19 0.0078 - 20 0.00111 - 21 0.0323 - 26 0.0646 - 29 0.0212 - 30 0.0212 - 31 0.0345 - 32 0.00334 - 33 0.0167 - 34 0.0624 - 35 0.0111 - 36 0.00223 - 37 0.0122 - 40 0.00334 - 41 0.00668 - 42 0.0323 - 43 0.00334 - 44 0.0379 - 45 0.00891 - 46 0.00223 - 47 0.0134 - - 6 2 2 0 - 0 0.5 - 41 0.5 - - 8 3 3 0 - 7 0.333 - 33 0.333 - 42 0.333 - - 13 251 24 0 - 0 0.0598 - 1 0.00398 - 2 0.0478 - 4 0.00797 - 7 0.498 - 8 0.012 - 12 0.0398 - 19 0.00398 - 21 0.0279 - 26 0.0876 - 29 0.012 - 30 0.0159 - 31 0.0359 - 33 0.00797 - 34 0.0518 - 35 0.00797 - 37 0.012 - 40 0.00797 - 41 0.00398 - 42 0.0279 - 43 0.00398 - 44 0.0159 - 46 0.00398 - 47 0.00398 - - 14 66 15 0 - 0 0.0606 - 2 0.0606 - 7 0.333 - 8 0.0303 - 12 0.0152 - 19 0.0152 - 21 0.0455 - 26 0.152 - 29 0.0152 - 31 0.0455 - 32 0.0455 - 34 0.0455 - 35 0.0606 - 37 0.0152 - 42 0.0606 - - 15 21 11 0 - 2 0.0476 - 4 0.0476 - 7 0.286 - 12 0.0952 - 21 0.0952 - 26 0.0476 - 33 0.0952 - 34 0.0476 - 40 0.0476 - 41 0.143 - 46 0.0476 - - 40 11 3 0 - 15 0.182 - 21 0.0909 - 47 0.727 - - 41 222 23 0 - 0 0.0721 - 2 0.045 - 3 0.018 - 4 0.203 - 7 0.0856 - 8 0.0405 - 12 0.0045 - 13 0.018 - 14 0.00901 - 15 0.0541 - 19 0.00901 - 20 0.0045 - 21 0.0495 - 26 0.018 - 29 0.045 - 30 0.036 - 31 0.045 - 33 0.0225 - 34 0.144 - 35 0.018 - 36 0.00901 - 37 0.0135 - 45 0.036 - - 42 2 2 0 - 33 0.5 - 47 0.5 - - 55 241 21 0 - 0 0.0207 - 1 0.00415 - 2 0.12 - 4 0.0124 - 7 0.448 - 8 0.0166 - 15 0.00415 - 19 0.0083 - 21 0.0124 - 26 0.083 - 29 0.0083 - 30 0.0207 - 31 0.0332 - 33 0.0083 - 34 0.0249 - 37 0.0124 - 41 0.00415 - 42 0.0539 - 43 0.0083 - 44 0.0913 - 47 0.00415 - - 56 26 9 0 - 0 0.269 - 7 0.231 - 12 0.0385 - 19 0.0385 - 29 0.115 - 33 0.0385 - 34 0.0385 - 37 0.0385 - 44 0.192 - - 57 34 10 0 - 0 0.147 - 2 0.118 - 7 0.471 - 8 0.0294 - 13 0.0294 - 21 0.0294 - 26 0.0294 - 30 0.0588 - 31 0.0294 - 42 0.0588 - - 62 10 6 0 - 0 0.2 - 7 0.2 - 21 0.1 - 33 0.1 - 42 0.1 - 44 0.3 - - 65 1 1 0 - 47 1 - - 47 311752 46 59 - 0 0.0863 - 1 0.000289 - 2 0.0341 - 3 0.00328 - 4 0.0119 - 5 0.000103 - 6 4.49e-05 - 7 0.192 - 8 0.0132 - 9 0.000908 - 10 0.000763 - 12 0.0303 - 13 0.0146 - 14 0.00451 - 15 0.00615 - 16 0.000122 - 17 2.57e-05 - 18 0.000176 - 19 0.00338 - 20 0.000186 - 21 0.0233 - 22 0.00185 - 23 0.00017 - 24 0.000565 - 25 2.89e-05 - 26 0.031 - 28 0.00225 - 29 0.0626 - 30 0.00728 - 31 0.0105 - 32 0.0152 - 33 0.0222 - 34 0.00651 - 35 0.00307 - 36 0.00017 - 37 0.00209 - 38 1.92e-05 - 39 0.000504 - 40 0.207 - 41 0.166 - 42 0.0179 - 43 0.0038 - 44 0.00306 - 45 0.00251 - 46 0.00252 - 47 0.00512 - - 0 56 13 0 - 0 0.0179 - 7 0.125 - 8 0.0893 - 13 0.0357 - 15 0.0179 - 21 0.25 - 23 0.179 - 29 0.107 - 30 0.0714 - 31 0.0536 - 41 0.0179 - 43 0.0179 - 45 0.0179 - - 1 3 2 0 - 26 0.333 - 40 0.667 - - 2 3 2 0 - 0 0.333 - 21 0.667 - - 3 7697 38 0 - 0 0.019 - 2 0.0298 - 3 0.00065 - 4 0.099 - 6 0.00013 - 7 0.178 - 8 0.00429 - 9 0.00208 - 10 0.00013 - 12 0.00754 - 13 0.00455 - 14 0.00143 - 15 0.00429 - 19 0.00247 - 20 0.00026 - 21 0.0052 - 22 0.00026 - 23 0.00013 - 25 0.00013 - 26 0.0958 - 28 0.00013 - 29 0.0151 - 30 0.00338 - 31 0.00559 - 32 0.00117 - 33 0.00351 - 34 0.00273 - 35 0.000909 - 37 0.00338 - 39 0.00013 - 40 0.212 - 41 0.251 - 42 0.0227 - 43 0.0178 - 44 0.00182 - 45 0.0013 - 46 0.00065 - 47 0.00208 - - 4 2457 34 0 - 0 0.258 - 1 0.000814 - 2 0.00895 - 3 0.00204 - 4 0.00611 - 7 0.286 - 8 0.00773 - 9 0.000407 - 10 0.000407 - 12 0.0696 - 13 0.00692 - 14 0.00122 - 15 0.00122 - 18 0.000814 - 19 0.00895 - 21 0.0232 - 24 0.00204 - 26 0.00733 - 28 0.00407 - 29 0.0281 - 30 0.00692 - 31 0.0248 - 32 0.0228 - 33 0.0619 - 34 0.00611 - 35 0.0265 - 37 0.000407 - 40 0.0419 - 41 0.0696 - 42 0.0106 - 44 0.000407 - 45 0.00122 - 46 0.000814 - 47 0.00204 - - 5 861 10 0 - 0 0.861 - 4 0.00232 - 12 0.0848 - 18 0.0128 - 19 0.00116 - 21 0.0244 - 26 0.00116 - 33 0.00697 - 35 0.00116 - 41 0.00465 - - 6 59 14 0 - 0 0.0678 - 2 0.0339 - 7 0.102 - 12 0.0339 - 26 0.0678 - 31 0.0169 - 33 0.0678 - 40 0.254 - 41 0.203 - 42 0.0339 - 43 0.0169 - 44 0.0339 - 45 0.0169 - 46 0.0508 - - 7 79 19 0 - 0 0.152 - 2 0.0127 - 4 0.0506 - 5 0.0127 - 7 0.228 - 8 0.0127 - 12 0.038 - 18 0.0253 - 19 0.038 - 21 0.0253 - 22 0.0127 - 24 0.0127 - 26 0.0253 - 29 0.0127 - 31 0.0633 - 33 0.038 - 40 0.114 - 41 0.114 - 47 0.0127 - - 8 1187 34 0 - 0 0.0666 - 1 0.000842 - 2 0.0371 - 3 0.00253 - 4 0.00505 - 7 0.405 - 8 0.00758 - 9 0.00421 - 10 0.000842 - 12 0.0118 - 13 0.0143 - 14 0.00505 - 15 0.00421 - 19 0.00337 - 21 0.0177 - 22 0.00337 - 24 0.000842 - 26 0.0497 - 28 0.00168 - 29 0.0286 - 30 0.00505 - 31 0.00505 - 32 0.0118 - 33 0.00927 - 34 0.00253 - 35 0.00253 - 37 0.000842 - 40 0.131 - 41 0.131 - 42 0.0194 - 43 0.00505 - 44 0.00421 - 46 0.00168 - 47 0.000842 - - 9 235 13 0 - 0 0.0213 - 2 0.00851 - 4 0.00851 - 7 0.621 - 12 0.00426 - 21 0.0255 - 26 0.0766 - 29 0.00426 - 30 0.00426 - 31 0.0128 - 40 0.115 - 41 0.0894 - 42 0.00851 - - 10 367 21 0 - 0 0.0572 - 2 0.00272 - 4 0.00817 - 5 0.00272 - 7 0.711 - 8 0.00545 - 12 0.00545 - 13 0.00817 - 19 0.00817 - 21 0.0163 - 26 0.0109 - 28 0.00272 - 29 0.00272 - 30 0.00817 - 31 0.00272 - 32 0.0327 - 37 0.00272 - 40 0.0463 - 41 0.049 - 42 0.0136 - 45 0.00272 - - 12 3 3 0 - 40 0.333 - 41 0.333 - 43 0.333 - - 13 96406 46 0 - 0 0.0637 - 1 0.000353 - 2 0.0345 - 3 0.00505 - 4 0.00829 - 5 0.000145 - 6 5.19e-05 - 7 0.333 - 8 0.00742 - 9 0.00119 - 10 4.15e-05 - 12 0.0242 - 13 0.00407 - 14 0.000944 - 15 0.0048 - 16 3.11e-05 - 17 2.07e-05 - 18 2.07e-05 - 19 0.00561 - 20 0.00027 - 21 0.0238 - 22 0.0035 - 23 0.000114 - 24 0.000467 - 25 4.15e-05 - 26 0.0426 - 28 0.00132 - 29 0.0439 - 30 0.00859 - 31 0.0141 - 32 0.00186 - 33 0.0205 - 34 0.0107 - 35 0.00337 - 36 0.000249 - 37 0.00326 - 38 1.04e-05 - 39 0.000145 - 40 0.149 - 41 0.153 - 42 0.0151 - 43 0.00195 - 44 0.00201 - 45 0.00279 - 46 0.00327 - 47 0.000685 - - 14 55109 44 0 - 0 0.0843 - 1 0.000726 - 2 0.0441 - 3 0.00132 - 4 0.0177 - 5 9.07e-05 - 7 0.251 - 8 0.0175 - 9 0.00098 - 10 3.63e-05 - 12 0.0303 - 13 0.00218 - 14 0.000817 - 15 0.00212 - 16 3.63e-05 - 17 5.44e-05 - 18 3.63e-05 - 19 0.00468 - 20 0.000163 - 21 0.0335 - 22 0.00205 - 23 0.000127 - 24 0.000653 - 25 1.81e-05 - 26 0.0385 - 28 0.00356 - 29 0.0533 - 30 0.0147 - 31 0.0227 - 32 0.0389 - 33 0.00203 - 34 0.0132 - 35 0.00744 - 36 0.000472 - 37 0.00227 - 39 0.000327 - 40 0.146 - 41 0.131 - 42 0.0194 - 43 0.00156 - 44 0.00454 - 45 0.00238 - 46 0.00281 - 47 0.00107 - - 15 37150 40 0 - 0 0.0859 - 1 8.08e-05 - 2 0.0517 - 3 0.00261 - 4 0.0052 - 5 5.38e-05 - 6 2.69e-05 - 7 0.0953 - 8 0.00377 - 9 0.000242 - 12 0.0275 - 13 0.00353 - 14 0.00116 - 15 0.00571 - 17 2.69e-05 - 18 0.000673 - 19 0.00175 - 20 0.000296 - 21 0.0225 - 22 0.000834 - 24 8.08e-05 - 26 0.0186 - 28 0.00221 - 29 0.135 - 30 0.00363 - 31 0.00186 - 32 0.00363 - 33 0.0419 - 34 0.0024 - 35 0.00145 - 37 0.00132 - 39 0.000619 - 40 0.126 - 41 0.315 - 42 0.0153 - 43 0.00729 - 44 0.00686 - 45 0.00202 - 46 0.00347 - 47 0.00331 - - 16 1540 34 0 - 0 0.123 - 2 0.0604 - 3 0.0013 - 4 0.00519 - 5 0.000649 - 7 0.11 - 8 0.00519 - 9 0.000649 - 12 0.0403 - 13 0.00519 - 14 0.00195 - 15 0.00325 - 19 0.0026 - 20 0.000649 - 21 0.026 - 22 0.000649 - 26 0.0234 - 28 0.000649 - 29 0.112 - 30 0.00584 - 31 0.0039 - 32 0.037 - 33 0.0156 - 34 0.000649 - 35 0.0169 - 36 0.000649 - 40 0.128 - 41 0.216 - 42 0.0266 - 43 0.0039 - 44 0.0039 - 45 0.00195 - 46 0.00325 - 47 0.0136 - - 17 3 1 0 - 4 1 - - 18 8655 34 0 - 0 0.00508 - 2 0.00659 - 3 0.0261 - 4 0.000231 - 6 0.000231 - 7 0.00208 - 8 0.207 - 9 0.00173 - 10 0.026 - 12 0.00104 - 13 0.417 - 14 0.13 - 15 0.104 - 16 0.00381 - 19 0.000116 - 21 0.00555 - 22 0.000347 - 23 0.00208 - 26 0.000231 - 28 0.000347 - 29 0.00439 - 30 0.0117 - 31 0.00739 - 32 0.000462 - 33 0.00104 - 38 0.000578 - 39 0.0101 - 40 0.00485 - 41 0.00601 - 42 0.000231 - 43 0.000924 - 44 0.000231 - 45 0.0117 - 46 0.000231 - - 19 17347 41 0 - 0 0.301 - 1 0.000173 - 2 0.00761 - 3 0.000807 - 4 0.0115 - 5 0.000115 - 6 5.76e-05 - 7 0.0349 - 8 0.00738 - 9 0.00133 - 10 0.000115 - 12 0.124 - 13 0.00202 - 14 0.000749 - 15 0.000576 - 17 0.000115 - 18 0.000634 - 19 0.00161 - 20 0.000115 - 21 0.0537 - 22 0.00156 - 23 0.000173 - 24 0.00455 - 26 0.0163 - 28 0.0117 - 29 0.166 - 30 0.00242 - 31 0.0019 - 32 0.0775 - 33 0.106 - 34 0.000288 - 35 0.000634 - 37 0.00121 - 39 0.000288 - 40 0.0313 - 41 0.021 - 42 0.00334 - 43 0.000346 - 44 0.000865 - 45 0.00346 - 46 0.000461 - - 20 22 10 0 - 0 0.136 - 1 0.0909 - 13 0.0909 - 15 0.0455 - 21 0.0455 - 30 0.364 - 40 0.0455 - 41 0.0909 - 42 0.0455 - 43 0.0455 - - 21 515 31 0 - 0 0.0641 - 2 0.0272 - 3 0.00388 - 4 0.0155 - 6 0.00194 - 7 0.243 - 8 0.035 - 9 0.0136 - 12 0.0155 - 13 0.0136 - 14 0.00388 - 15 0.00388 - 19 0.0194 - 21 0.0214 - 22 0.0117 - 26 0.0311 - 28 0.00388 - 29 0.00583 - 30 0.00583 - 31 0.00971 - 32 0.00583 - 33 0.0117 - 34 0.00194 - 37 0.00194 - 40 0.181 - 41 0.217 - 42 0.0214 - 43 0.00194 - 44 0.00388 - 46 0.00194 - 47 0.00194 - - 22 48 11 0 - 2 0.0625 - 7 0.521 - 8 0.0417 - 12 0.0208 - 21 0.0208 - 29 0.0208 - 31 0.0208 - 37 0.0208 - 40 0.0833 - 41 0.167 - 42 0.0208 - - 23 19 8 0 - 7 0.579 - 8 0.0526 - 19 0.0526 - 21 0.105 - 29 0.0526 - 31 0.0526 - 40 0.0526 - 41 0.0526 - - 24 8 3 0 - 7 0.5 - 40 0.25 - 41 0.25 - - 25 13 2 0 - 3 0.0769 - 42 0.923 - - 26 1 1 0 - 28 1 - - 27 4 3 0 - 40 0.5 - 42 0.25 - 46 0.25 - - 28 87 15 0 - 0 0.0115 - 2 0.0345 - 4 0.0805 - 7 0.437 - 8 0.0345 - 13 0.0115 - 15 0.0115 - 21 0.046 - 26 0.069 - 29 0.023 - 40 0.103 - 41 0.092 - 42 0.0115 - 46 0.023 - 47 0.0115 - - 29 6 5 0 - 4 0.167 - 7 0.333 - 8 0.167 - 29 0.167 - 33 0.167 - - 30 255 24 0 - 0 0.0706 - 2 0.0314 - 4 0.00784 - 7 0.435 - 8 0.0196 - 12 0.0275 - 13 0.00392 - 14 0.00392 - 19 0.00392 - 21 0.0275 - 22 0.00392 - 26 0.0314 - 29 0.0235 - 30 0.00392 - 31 0.00784 - 32 0.00392 - 33 0.0157 - 37 0.00392 - 40 0.141 - 41 0.098 - 42 0.0157 - 43 0.00392 - 44 0.00392 - 46 0.0118 - - 31 27 11 0 - 0 0.0741 - 2 0.0741 - 4 0.037 - 7 0.185 - 12 0.111 - 14 0.037 - 24 0.037 - 26 0.037 - 29 0.185 - 40 0.148 - 41 0.0741 - - 32 3 3 0 - 0 0.333 - 32 0.333 - 33 0.333 - - 33 63 17 0 - 0 0.0159 - 3 0.0476 - 4 0.175 - 7 0.127 - 8 0.0952 - 10 0.0159 - 13 0.0159 - 14 0.0317 - 19 0.0635 - 21 0.0317 - 22 0.0159 - 26 0.0952 - 30 0.0159 - 34 0.0159 - 40 0.0159 - 41 0.206 - 45 0.0159 - - 34 58 6 0 - 0 0.259 - 4 0.0172 - 12 0.379 - 21 0.0345 - 29 0.19 - 33 0.121 - - 35 6 4 0 - 0 0.333 - 26 0.167 - 40 0.333 - 41 0.167 - - 40 975 10 0 - 0 0.00103 - 12 0.00103 - 15 0.00615 - 21 0.00103 - 26 0.00103 - 43 0.0677 - 44 0.0513 - 45 0.00103 - 46 0.00308 - 47 0.867 - - 41 4997 30 0 - 0 0.238 - 2 0.0332 - 3 0.0014 - 4 0.0254 - 7 0.0903 - 8 0.0054 - 9 0.0004 - 10 0.0002 - 12 0.064 - 13 0.00981 - 14 0.0036 - 15 0.00961 - 19 0.003 - 21 0.0476 - 22 0.0006 - 23 0.0002 - 26 0.0272 - 28 0.0012 - 29 0.288 - 30 0.00901 - 31 0.0124 - 32 0.013 - 33 0.104 - 34 0.0038 - 35 0.0012 - 36 0.0002 - 37 0.0026 - 39 0.0002 - 45 0.0042 - 46 0.0006 - - 42 330 23 0 - 0 0.115 - 2 0.0212 - 4 0.0152 - 7 0.0485 - 8 0.00303 - 12 0.0424 - 13 0.00303 - 14 0.00606 - 15 0.00606 - 19 0.00606 - 20 0.00303 - 21 0.0273 - 26 0.0121 - 28 0.00606 - 29 0.0758 - 30 0.00303 - 31 0.00606 - 32 0.0121 - 33 0.0212 - 34 0.00303 - 37 0.00606 - 45 0.00303 - 47 0.555 - - 43 92 18 0 - 0 0.0978 - 2 0.087 - 4 0.0217 - 7 0.152 - 12 0.0435 - 21 0.0217 - 26 0.0109 - 29 0.0109 - 30 0.0109 - 31 0.0109 - 32 0.0217 - 33 0.0652 - 34 0.0109 - 35 0.0109 - 40 0.13 - 41 0.12 - 42 0.109 - 47 0.0652 - - 45 4 4 0 - 0 0.25 - 2 0.25 - 7 0.25 - 32 0.25 - - 46 480 27 0 - 0 0.119 - 1 0.00208 - 2 0.0542 - 4 0.0208 - 7 0.365 - 8 0.0104 - 12 0.0292 - 13 0.00417 - 15 0.00833 - 19 0.00833 - 21 0.0396 - 26 0.0521 - 29 0.0396 - 30 0.00833 - 31 0.0292 - 32 0.00625 - 33 0.0292 - 34 0.0417 - 35 0.0125 - 37 0.0125 - 40 0.00625 - 41 0.0104 - 42 0.0333 - 43 0.00625 - 44 0.0229 - 46 0.00417 - 47 0.025 - - 48 1062 27 0 - 0 0.0546 - 2 0.032 - 4 0.000942 - 7 0.0706 - 8 0.000942 - 9 0.000942 - 12 0.0188 - 13 0.00471 - 15 0.000942 - 19 0.000942 - 21 0.00659 - 26 0.0141 - 28 0.000942 - 29 0.0753 - 30 0.000942 - 31 0.00377 - 32 0.0226 - 33 0.00847 - 34 0.000942 - 37 0.00282 - 40 0.469 - 41 0.171 - 42 0.032 - 43 0.000942 - 44 0.000942 - 45 0.00282 - 46 0.000942 - - 49 817 24 0 - 0 0.0673 - 2 0.0171 - 4 0.00367 - 7 0.0355 - 8 0.00245 - 12 0.00857 - 15 0.00122 - 21 0.00857 - 22 0.00122 - 26 0.0122 - 28 0.00245 - 29 0.0257 - 30 0.00367 - 31 0.00122 - 32 0.0147 - 33 0.00612 - 34 0.00122 - 40 0.518 - 41 0.179 - 42 0.071 - 44 0.00122 - 45 0.00367 - 46 0.00245 - 47 0.0122 - - 51 8 5 0 - 2 0.125 - 33 0.125 - 40 0.25 - 41 0.125 - 47 0.375 - - 54 7 4 0 - 0 0.143 - 13 0.143 - 40 0.429 - 41 0.286 - - 55 13149 39 0 - 0 0.0396 - 2 0.00867 - 3 0.00205 - 4 0.0054 - 5 7.61e-05 - 6 0.000152 - 7 0.0588 - 8 0.00342 - 9 0.000456 - 12 0.0129 - 13 0.000913 - 14 0.000152 - 15 0.000913 - 19 0.000532 - 20 0.000152 - 21 0.00829 - 22 0.000456 - 23 7.61e-05 - 24 0.000152 - 25 0.000152 - 26 0.013 - 28 0.000989 - 29 0.0295 - 30 0.00205 - 31 0.0035 - 32 0.0103 - 33 0.00464 - 34 0.00243 - 35 0.000913 - 36 7.61e-05 - 37 0.000608 - 40 0.508 - 41 0.208 - 42 0.0503 - 43 0.00973 - 44 0.00106 - 45 0.000913 - 46 0.00122 - 47 0.01 - - 56 409 24 0 - 0 0.0513 - 2 0.0122 - 3 0.00244 - 4 0.00978 - 7 0.174 - 8 0.00244 - 12 0.0269 - 14 0.00244 - 21 0.00489 - 26 0.0171 - 28 0.00244 - 29 0.0147 - 30 0.00733 - 31 0.00978 - 32 0.0269 - 33 0.00489 - 34 0.0122 - 35 0.00978 - 39 0.00244 - 40 0.35 - 41 0.237 - 42 0.0122 - 44 0.00244 - 46 0.00489 - - 57 38167 39 0 - 0 0.0755 - 1 0.000105 - 2 0.0403 - 3 0.00055 - 4 0.0043 - 5 0.000131 - 6 2.62e-05 - 7 0.0629 - 8 0.00333 - 9 0.000131 - 12 0.0243 - 13 0.0021 - 14 0.000812 - 15 0.0017 - 19 0.00102 - 20 2.62e-05 - 21 0.0137 - 22 0.000786 - 23 2.62e-05 - 24 7.86e-05 - 26 0.0196 - 28 0.000891 - 29 0.0437 - 30 0.00424 - 31 0.00383 - 32 0.0103 - 33 0.0117 - 34 0.00113 - 35 0.00055 - 37 0.00186 - 39 0.000131 - 40 0.432 - 41 0.205 - 42 0.0232 - 43 0.0022 - 44 0.00191 - 45 0.00176 - 46 0.0027 - 47 0.00144 - - 58 873 28 0 - 0 0.123 - 2 0.0767 - 3 0.0115 - 4 0.0275 - 7 0.139 - 8 0.00229 - 12 0.0401 - 13 0.00229 - 14 0.00344 - 15 0.00229 - 19 0.00458 - 20 0.00115 - 21 0.0229 - 26 0.0321 - 28 0.00229 - 29 0.0527 - 30 0.00344 - 31 0.00229 - 32 0.0275 - 33 0.0367 - 34 0.00458 - 35 0.00229 - 39 0.00115 - 40 0.181 - 41 0.136 - 42 0.0504 - 45 0.00115 - 47 0.0103 - - 60 5584 31 0 - 0 0.00985 - 2 0.0177 - 3 0.00681 - 4 0.0518 - 7 0.358 - 8 0.00734 - 9 0.00412 - 12 0.00304 - 13 0.00358 - 14 0.000179 - 15 0.00304 - 19 0.00125 - 20 0.000179 - 21 0.00591 - 22 0.000179 - 25 0.000179 - 26 0.0566 - 29 0.00304 - 30 0.00251 - 31 0.0077 - 34 0.000895 - 35 0.000537 - 37 0.000179 - 40 0.186 - 41 0.219 - 42 0.0136 - 43 0.0279 - 44 0.00663 - 45 0.000358 - 46 0.000179 - 47 0.00125 - - 61 29 6 0 - 0 0.0345 - 29 0.0345 - 33 0.0345 - 40 0.69 - 41 0.138 - 42 0.069 - - 62 1522 28 0 - 0 0.0453 - 2 0.0191 - 3 0.000657 - 4 0.00197 - 7 0.0315 - 8 0.000657 - 12 0.021 - 15 0.00131 - 19 0.000657 - 21 0.00788 - 22 0.00131 - 26 0.00197 - 28 0.000657 - 29 0.0177 - 30 0.000657 - 31 0.00131 - 32 0.00263 - 33 0.00986 - 34 0.000657 - 37 0.00131 - 40 0.633 - 41 0.171 - 42 0.0138 - 43 0.00329 - 44 0.000657 - 45 0.00197 - 46 0.00263 - 47 0.00526 - - 64 8611 29 0 - 0 0.046 - 2 0.0135 - 4 0.00105 - 7 0.0108 - 12 0.017 - 13 0.000465 - 14 0.000116 - 15 0.000232 - 19 0.000929 - 20 0.000116 - 21 0.0043 - 22 0.000348 - 26 0.00325 - 28 0.000697 - 29 0.00975 - 30 0.000813 - 31 0.000581 - 32 0.00499 - 33 0.00325 - 34 0.000116 - 37 0.000232 - 40 0.694 - 41 0.157 - 42 0.0238 - 43 0.00151 - 44 0.00151 - 45 0.00128 - 46 0.00116 - 47 0.00128 - - 65 8 3 0 - 40 0.5 - 46 0.125 - 47 0.375 - - 67 4 4 0 - 40 0.25 - 42 0.25 - 46 0.25 - 47 0.25 - - 68 65 9 0 - 0 0.0308 - 2 0.0308 - 7 0.0769 - 26 0.0308 - 29 0.0308 - 32 0.0462 - 40 0.631 - 41 0.0769 - 42 0.0462 - - 69 4185 30 0 - 0 0.0712 - 2 0.0229 - 3 0.000239 - 4 0.00191 - 7 0.0244 - 8 0.000478 - 12 0.0318 - 13 0.000478 - 15 0.000239 - 21 0.00956 - 22 0.000956 - 26 0.00789 - 28 0.00119 - 29 0.037 - 30 0.00119 - 31 0.0043 - 32 0.0148 - 33 0.0103 - 34 0.000478 - 35 0.000239 - 37 0.000478 - 39 0.000239 - 40 0.542 - 41 0.18 - 42 0.0277 - 43 0.00335 - 44 0.00119 - 45 0.000717 - 46 0.00119 - 47 0.00215 - - 73 3 3 0 - 0 0.333 - 32 0.333 - 41 0.333 - - 74 13 5 0 - 0 0.0769 - 26 0.0769 - 40 0.154 - 41 0.0769 - 47 0.615 - - 48 1396 29 9 - 0 0.0415 - 2 0.0244 - 4 0.00143 - 7 0.0752 - 8 0.00143 - 9 0.00645 - 12 0.0143 - 13 0.0043 - 15 0.000716 - 19 0.00143 - 21 0.00716 - 26 0.0186 - 28 0.00143 - 29 0.0573 - 30 0.00215 - 31 0.00716 - 32 0.0172 - 33 0.00716 - 34 0.00143 - 35 0.000716 - 37 0.00215 - 39 0.0043 - 40 0.362 - 41 0.304 - 42 0.0279 - 43 0.00143 - 44 0.00215 - 45 0.00287 - 46 0.00143 - - 0 1 1 0 - 44 1 - - 4 66 14 0 - 0 0.0455 - 2 0.0152 - 7 0.379 - 8 0.0152 - 12 0.0152 - 13 0.0152 - 19 0.0152 - 26 0.0455 - 29 0.0152 - 30 0.0152 - 39 0.0909 - 40 0.152 - 41 0.136 - 42 0.0455 - - 41 264 6 0 - 2 0.00379 - 7 0.00758 - 26 0.0114 - 40 0.261 - 41 0.705 - 42 0.0114 - - 42 18 3 0 - 40 0.667 - 41 0.0556 - 42 0.278 - - 44 1 1 0 - 43 1 - - 45 6 5 0 - 40 0.333 - 41 0.167 - 42 0.167 - 44 0.167 - 46 0.167 - - 47 19 8 0 - 2 0.0526 - 7 0.211 - 9 0.421 - 13 0.105 - 28 0.0526 - 30 0.0526 - 33 0.0526 - 40 0.0526 - - 55 951 28 0 - 0 0.0568 - 2 0.0326 - 4 0.0021 - 7 0.0747 - 8 0.00105 - 9 0.00105 - 12 0.0189 - 13 0.00315 - 15 0.00105 - 19 0.00105 - 21 0.0105 - 26 0.021 - 28 0.00105 - 29 0.0831 - 30 0.00105 - 31 0.0105 - 32 0.0252 - 33 0.00946 - 34 0.0021 - 35 0.00105 - 37 0.00315 - 40 0.396 - 41 0.209 - 42 0.0263 - 43 0.00105 - 44 0.00105 - 45 0.00421 - 46 0.00105 - - 57 51 5 0 - 7 0.0196 - 12 0.0196 - 40 0.471 - 41 0.451 - 42 0.0392 - - 49 1035 32 6 - 0 0.0531 - 1 0.000966 - 2 0.0145 - 3 0.00483 - 4 0.0386 - 7 0.0725 - 8 0.0145 - 9 0.00193 - 12 0.00676 - 13 0.0164 - 14 0.0116 - 15 0.0116 - 20 0.0029 - 21 0.00966 - 22 0.00193 - 26 0.0184 - 28 0.00193 - 29 0.0203 - 30 0.0029 - 31 0.00193 - 32 0.0116 - 33 0.00483 - 34 0.00386 - 35 0.00386 - 37 0.000966 - 40 0.411 - 41 0.184 - 42 0.058 - 44 0.000966 - 45 0.0029 - 46 0.00193 - 47 0.00966 - - 2 45 9 0 - 4 0.311 - 8 0.133 - 13 0.156 - 14 0.133 - 15 0.0667 - 20 0.0444 - 21 0.0222 - 40 0.0444 - 41 0.0889 - - 41 350 16 0 - 2 0.00286 - 3 0.0143 - 4 0.0629 - 7 0.00286 - 8 0.00857 - 9 0.00571 - 13 0.0229 - 14 0.0171 - 15 0.02 - 20 0.00286 - 21 0.00571 - 22 0.00286 - 40 0.506 - 41 0.166 - 42 0.131 - 47 0.0286 - - 42 10 5 0 - 8 0.2 - 13 0.1 - 40 0.4 - 41 0.1 - 42 0.2 - - 47 1 1 0 - 32 1 - - 55 548 26 0 - 0 0.0912 - 1 0.00182 - 2 0.0237 - 4 0.00547 - 7 0.128 - 8 0.0073 - 12 0.00912 - 13 0.00182 - 15 0.00365 - 21 0.0109 - 22 0.00182 - 26 0.031 - 28 0.00365 - 29 0.0328 - 30 0.00547 - 31 0.00365 - 32 0.0182 - 33 0.0073 - 34 0.00365 - 35 0.00547 - 37 0.00182 - 40 0.369 - 41 0.204 - 42 0.0201 - 45 0.00547 - 46 0.00365 - - 57 73 15 0 - 0 0.0685 - 2 0.0137 - 7 0.0411 - 12 0.0274 - 21 0.0137 - 26 0.0137 - 29 0.0411 - 32 0.0137 - 33 0.0137 - 34 0.0274 - 35 0.0137 - 40 0.534 - 41 0.151 - 42 0.0137 - 44 0.0137 - - 50 146 15 1 - 3 0.0342 - 4 0.384 - 8 0.144 - 9 0.0137 - 13 0.123 - 14 0.13 - 15 0.0548 - 16 0.00685 - 20 0.0411 - 21 0.0137 - 22 0.00685 - 30 0.0137 - 31 0.0137 - 39 0.00685 - 45 0.0137 - - 46 1 1 0 - 45 1 - - 51 8 5 0 - 2 0.125 - 33 0.125 - 40 0.25 - 41 0.125 - 47 0.375 - - 54 8 4 0 - 0 0.125 - 13 0.125 - 40 0.375 - 41 0.375 - - 55 92386 44 25 - 0 0.00569 - 1 0.000487 - 2 0.0599 - 3 0.0061 - 4 0.022 - 5 3.25e-05 - 6 7.58e-05 - 7 0.423 - 8 0.0122 - 9 0.000509 - 10 0.000108 - 12 0.00184 - 13 0.00187 - 14 0.000682 - 15 0.00441 - 16 3.25e-05 - 17 2.16e-05 - 19 0.00704 - 20 0.000216 - 21 0.011 - 22 0.000346 - 23 0.000152 - 24 7.58e-05 - 25 5.41e-05 - 26 0.0266 - 28 0.000162 - 29 0.0062 - 30 0.0132 - 31 0.0246 - 32 0.00149 - 33 0.000671 - 34 0.0181 - 35 0.00889 - 36 0.000563 - 37 0.00232 - 39 0.000433 - 40 0.0776 - 41 0.217 - 42 0.0281 - 43 0.00179 - 44 0.00812 - 45 0.0015 - 46 0.00279 - 47 0.00143 - - 2 6756 35 0 - 0 0.0628 - 2 0.0154 - 3 0.000148 - 4 0.00681 - 5 0.000148 - 7 0.0813 - 8 0.00488 - 9 0.000148 - 12 0.0207 - 13 0.00133 - 14 0.000888 - 15 0.000888 - 19 0.000592 - 21 0.0148 - 22 0.000444 - 23 0.000148 - 26 0.016 - 28 0.00192 - 29 0.0423 - 30 0.00355 - 31 0.00459 - 32 0.017 - 33 0.00266 - 34 0.00429 - 35 0.00148 - 36 0.000148 - 37 0.000888 - 40 0.412 - 41 0.25 - 42 0.0232 - 43 0.00192 - 44 0.00133 - 45 0.00148 - 46 0.00192 - 47 0.00178 - - 4 104 10 0 - 0 0.0192 - 2 0.865 - 3 0.00962 - 7 0.00962 - 9 0.00962 - 12 0.00962 - 21 0.00962 - 29 0.0192 - 40 0.0192 - 41 0.0288 - - 6 2 2 0 - 40 0.5 - 47 0.5 - - 7 24 7 0 - 0 0.0417 - 2 0.0417 - 29 0.0417 - 32 0.0417 - 40 0.5 - 41 0.25 - 42 0.0833 - - 8 5 4 0 - 7 0.2 - 29 0.2 - 40 0.4 - 42 0.2 - - 13 6 4 0 - 4 0.167 - 30 0.167 - 40 0.167 - 41 0.5 - - 15 8 5 0 - 2 0.125 - 7 0.125 - 29 0.125 - 41 0.5 - 42 0.125 - - 17 14 4 0 - 0 0.0714 - 2 0.714 - 40 0.143 - 41 0.0714 - - 20 4 3 0 - 12 0.25 - 40 0.5 - 41 0.25 - - 21 120 9 0 - 0 0.00833 - 2 0.0667 - 7 0.025 - 8 0.0167 - 26 0.00833 - 40 0.55 - 41 0.292 - 42 0.025 - 43 0.00833 - - 26 49 8 0 - 3 0.49 - 4 0.0408 - 7 0.102 - 8 0.0204 - 19 0.0204 - 40 0.224 - 41 0.0408 - 42 0.0612 - - 40 7 2 0 - 40 0.857 - 41 0.143 - - 41 8157 24 0 - 0 0.00356 - 2 0.114 - 4 0.000613 - 7 0.00282 - 12 0.000613 - 14 0.000245 - 20 0.000123 - 21 0.00049 - 22 0.000123 - 26 0.000613 - 29 0.00699 - 31 0.000368 - 32 0.000123 - 33 0.00331 - 34 0.000736 - 35 0.0011 - 40 0.303 - 41 0.527 - 42 0.0177 - 43 0.0116 - 44 0.00147 - 45 0.000123 - 46 0.000245 - 47 0.00368 - - 42 1360 18 0 - 0 0.00147 - 2 0.00588 - 3 0.00368 - 6 0.000735 - 7 0.00515 - 8 0.000735 - 9 0.000735 - 19 0.000735 - 25 0.00221 - 30 0.00147 - 32 0.000735 - 34 0.000735 - 40 0.561 - 41 0.0449 - 42 0.318 - 43 0.011 - 46 0.00441 - 47 0.036 - - 44 37 5 0 - 7 0.0811 - 40 0.027 - 41 0.027 - 42 0.0811 - 43 0.784 - - 45 324 10 0 - 2 0.0185 - 7 0.0494 - 21 0.00309 - 26 0.00309 - 30 0.00309 - 34 0.00309 - 40 0.133 - 41 0.327 - 42 0.00617 - 46 0.454 - - 46 65 5 0 - 7 0.0154 - 40 0.523 - 41 0.431 - 43 0.0154 - 46 0.0154 - - 47 72120 41 0 - 0 6.93e-05 - 1 0.000624 - 2 0.0597 - 3 0.00738 - 4 0.027 - 5 2.77e-05 - 6 6.93e-05 - 7 0.529 - 8 0.0149 - 9 0.000568 - 10 0.000139 - 13 0.0022 - 14 0.000749 - 15 0.00535 - 16 4.16e-05 - 17 2.77e-05 - 19 0.00892 - 20 0.00025 - 21 0.0123 - 22 0.000333 - 23 0.00018 - 24 6.93e-05 - 25 1.39e-05 - 26 0.0315 - 28 2.77e-05 - 29 0.00257 - 30 0.0164 - 31 0.0309 - 32 4.16e-05 - 33 1.39e-05 - 34 0.0226 - 35 0.0111 - 36 0.000707 - 37 0.00284 - 39 0.000527 - 40 0.000111 - 41 0.177 - 42 0.0204 - 44 0.0101 - 45 0.00176 - 46 0.00122 - - 48 4 4 0 - 0 0.25 - 2 0.25 - 12 0.25 - 40 0.25 - - 49 129 11 0 - 0 0.0155 - 2 0.093 - 4 0.00775 - 7 0.093 - 22 0.00775 - 26 0.0233 - 35 0.0155 - 37 0.00775 - 40 0.419 - 41 0.302 - 42 0.0155 - - 50 156 12 0 - 0 0.00641 - 2 0.0385 - 7 0.0449 - 12 0.00641 - 13 0.00641 - 14 0.00641 - 29 0.00641 - 31 0.00641 - 32 0.00641 - 40 0.66 - 41 0.192 - 42 0.0192 - - 55 2717 34 0 - 0 0.0184 - 2 0.0158 - 3 0.000368 - 4 0.00957 - 6 0.000368 - 7 0.119 - 8 0.00405 - 9 0.0011 - 12 0.00626 - 13 0.00147 - 15 0.00552 - 19 0.000368 - 20 0.000368 - 21 0.00589 - 22 0.0011 - 24 0.000736 - 25 0.000368 - 26 0.025 - 29 0.0118 - 30 0.00147 - 31 0.00405 - 32 0.00515 - 33 0.00552 - 34 0.00184 - 35 0.000368 - 37 0.000736 - 40 0.259 - 41 0.342 - 42 0.134 - 43 0.00331 - 44 0.000368 - 45 0.000368 - 46 0.000368 - 47 0.0144 - - 57 160 13 0 - 0 0.0375 - 2 0.0437 - 7 0.0812 - 12 0.025 - 26 0.025 - 29 0.0437 - 31 0.00625 - 32 0.0125 - 33 0.00625 - 35 0.00625 - 40 0.494 - 41 0.206 - 43 0.0125 - - 58 37 7 0 - 0 0.027 - 7 0.0811 - 40 0.541 - 41 0.216 - 42 0.0811 - 44 0.027 - 47 0.027 - - 60 8 5 0 - 2 0.125 - 7 0.125 - 21 0.125 - 39 0.25 - 40 0.375 - - 56 440 24 15 - 0 0.0477 - 2 0.0114 - 3 0.00227 - 4 0.00909 - 7 0.161 - 8 0.00227 - 12 0.025 - 14 0.00227 - 21 0.00455 - 26 0.0159 - 28 0.00227 - 29 0.0136 - 30 0.00909 - 31 0.00909 - 32 0.025 - 33 0.00455 - 34 0.0114 - 35 0.00909 - 39 0.00227 - 40 0.325 - 41 0.23 - 42 0.0114 - 44 0.00227 - 46 0.0636 - - 4 120 16 0 - 0 0.0583 - 2 0.0167 - 7 0.242 - 12 0.0667 - 14 0.00833 - 28 0.00833 - 31 0.025 - 32 0.025 - 33 0.00833 - 34 0.0167 - 35 0.00833 - 40 0.317 - 41 0.167 - 42 0.00833 - 44 0.00833 - 46 0.0167 - - 8 69 14 0 - 0 0.0725 - 3 0.0145 - 4 0.0145 - 7 0.217 - 8 0.0145 - 12 0.0145 - 21 0.0145 - 26 0.0435 - 30 0.0145 - 32 0.0145 - 34 0.0145 - 35 0.0145 - 40 0.333 - 41 0.203 - - 13 3 2 0 - 30 0.667 - 40 0.333 - - 14 11 7 0 - 2 0.0909 - 29 0.0909 - 32 0.0909 - 33 0.0909 - 40 0.364 - 41 0.182 - 46 0.0909 - - 15 14 4 0 - 0 0.143 - 7 0.0714 - 40 0.357 - 41 0.429 - - 20 36 9 0 - 0 0.0278 - 2 0.0278 - 7 0.25 - 26 0.0278 - 29 0.0556 - 32 0.0556 - 40 0.306 - 41 0.222 - 42 0.0278 - - 21 3 3 0 - 12 0.333 - 41 0.333 - 42 0.333 - - 30 2 2 0 - 0 0.5 - 34 0.5 - - 31 2 2 0 - 7 0.5 - 34 0.5 - - 34 1 1 0 - 4 1 - - 45 61 3 0 - 40 0.246 - 41 0.344 - 46 0.41 - - 48 10 6 0 - 4 0.1 - 7 0.2 - 21 0.1 - 32 0.1 - 40 0.4 - 41 0.1 - - 54 2 2 0 - 35 0.5 - 40 0.5 - - 55 75 12 0 - 0 0.0533 - 2 0.0133 - 4 0.0133 - 7 0.107 - 12 0.0133 - 26 0.0267 - 29 0.0267 - 32 0.0133 - 39 0.0133 - 40 0.347 - 41 0.36 - 42 0.0133 - - 60 14 6 0 - 7 0.214 - 30 0.0714 - 31 0.0714 - 32 0.0714 - 35 0.0714 - 40 0.5 - - 57 43057 41 14 - 0 0.0669 - 1 0.000279 - 2 0.0358 - 3 0.00065 - 4 0.00604 - 5 0.000139 - 6 4.65e-05 - 7 0.106 - 8 0.00476 - 9 0.000139 - 12 0.0216 - 13 0.00232 - 14 0.000836 - 15 0.00272 - 19 0.00183 - 20 2.32e-05 - 21 0.0136 - 22 0.000883 - 23 2.32e-05 - 24 6.97e-05 - 25 2.32e-05 - 26 0.0268 - 28 0.00079 - 29 0.039 - 30 0.00595 - 31 0.00711 - 32 0.00917 - 33 0.0104 - 34 0.0066 - 35 0.00249 - 36 2.32e-05 - 37 0.00221 - 39 0.000116 - 40 0.386 - 41 0.206 - 42 0.0223 - 43 0.00232 - 44 0.00221 - 45 0.00167 - 46 0.00318 - 47 0.00128 - - 2 4 4 0 - 4 0.25 - 15 0.25 - 40 0.25 - 41 0.25 - - 13 20 7 0 - 4 0.05 - 12 0.05 - 26 0.1 - 34 0.05 - 40 0.5 - 41 0.2 - 46 0.05 - - 41 1101 20 0 - 0 0.00363 - 2 0.00272 - 4 0.00182 - 7 0.0163 - 12 0.00182 - 15 0.000908 - 21 0.00182 - 26 0.00363 - 29 0.00636 - 31 0.00182 - 32 0.00182 - 33 0.00182 - 34 0.00182 - 40 0.554 - 41 0.378 - 42 0.0145 - 43 0.00182 - 44 0.000908 - 46 0.000908 - 47 0.00363 - - 42 51 5 0 - 7 0.0196 - 40 0.392 - 41 0.0784 - 42 0.471 - 46 0.0392 - - 44 14 2 0 - 0 0.0714 - 43 0.929 - - 45 21 5 0 - 7 0.0476 - 40 0.476 - 41 0.238 - 42 0.0952 - 46 0.143 - - 46 145 15 0 - 0 0.0345 - 2 0.0138 - 4 0.0069 - 7 0.0483 - 8 0.0069 - 21 0.0207 - 26 0.0207 - 29 0.0069 - 33 0.0069 - 34 0.0069 - 40 0.434 - 41 0.331 - 42 0.0345 - 44 0.0138 - 45 0.0138 - - 48 31 5 0 - 2 0.0323 - 7 0.226 - 40 0.419 - 41 0.29 - 42 0.0323 - - 49 43 8 0 - 0 0.0233 - 2 0.0233 - 7 0.0698 - 26 0.0465 - 29 0.0233 - 40 0.419 - 41 0.372 - 42 0.0233 - - 55 39258 41 0 - 0 0.0695 - 1 0.000306 - 2 0.0374 - 3 0.000662 - 4 0.00642 - 5 0.000153 - 6 5.09e-05 - 7 0.111 - 8 0.00497 - 9 0.000153 - 12 0.0224 - 13 0.00242 - 14 0.000917 - 15 0.00285 - 19 0.00199 - 20 2.55e-05 - 21 0.0143 - 22 0.000942 - 23 2.55e-05 - 24 7.64e-05 - 25 2.55e-05 - 26 0.0284 - 28 0.000841 - 29 0.0411 - 30 0.00629 - 31 0.00746 - 32 0.00978 - 33 0.0109 - 34 0.00693 - 35 0.0027 - 36 2.55e-05 - 37 0.00211 - 39 0.000127 - 40 0.374 - 41 0.202 - 42 0.0215 - 43 0.00201 - 44 0.00217 - 45 0.00163 - 46 0.00326 - 47 0.0012 - - 57 2232 30 0 - 0 0.06 - 2 0.0291 - 3 0.000896 - 4 0.00134 - 7 0.0824 - 8 0.00358 - 12 0.0206 - 13 0.00224 - 15 0.00134 - 19 0.000448 - 21 0.00806 - 22 0.000448 - 26 0.0116 - 28 0.000448 - 29 0.0233 - 30 0.00358 - 31 0.00448 - 32 0.00358 - 33 0.00851 - 34 0.00314 - 35 0.000448 - 37 0.00538 - 40 0.5 - 41 0.187 - 42 0.0269 - 43 0.00269 - 44 0.00314 - 45 0.00269 - 46 0.000896 - 47 0.00134 - - 58 51 12 0 - 0 0.0392 - 7 0.0784 - 21 0.0196 - 26 0.0196 - 29 0.0392 - 30 0.0196 - 31 0.0196 - 32 0.0196 - 40 0.431 - 41 0.235 - 42 0.0588 - 47 0.0196 - - 64 38 8 0 - 0 0.0789 - 8 0.0263 - 26 0.0526 - 29 0.0263 - 34 0.0263 - 40 0.474 - 41 0.237 - 42 0.0789 - - 69 41 6 0 - 0 0.0244 - 2 0.0732 - 29 0.0244 - 40 0.707 - 41 0.146 - 42 0.0244 - - 58 1135 32 9 - 0 0.0943 - 1 0.000881 - 2 0.0643 - 3 0.0106 - 4 0.037 - 7 0.157 - 8 0.00705 - 12 0.0308 - 13 0.00617 - 14 0.00352 - 15 0.00617 - 19 0.00352 - 20 0.00352 - 21 0.0194 - 26 0.0326 - 28 0.00176 - 29 0.0405 - 30 0.00529 - 31 0.00705 - 32 0.0211 - 33 0.0282 - 34 0.0167 - 35 0.00705 - 37 0.00176 - 39 0.000881 - 40 0.142 - 41 0.16 - 42 0.074 - 43 0.00176 - 44 0.000881 - 45 0.00617 - 47 0.00793 - - 2 23 9 0 - 4 0.304 - 8 0.087 - 13 0.174 - 14 0.0435 - 15 0.13 - 20 0.13 - 21 0.0435 - 30 0.0435 - 41 0.0435 - - 13 11 5 0 - 0 0.273 - 7 0.273 - 26 0.273 - 33 0.0909 - 40 0.0909 - - 15 4 4 0 - 2 0.25 - 21 0.25 - 26 0.25 - 41 0.25 - - 41 10 6 0 - 2 0.1 - 29 0.1 - 30 0.1 - 33 0.1 - 40 0.4 - 41 0.2 - - 46 32 7 0 - 0 0.125 - 4 0.0312 - 7 0.125 - 35 0.0312 - 40 0.188 - 41 0.469 - 42 0.0312 - - 55 969 32 0 - 0 0.0949 - 1 0.00103 - 2 0.066 - 3 0.00619 - 4 0.0341 - 7 0.161 - 8 0.00413 - 12 0.032 - 13 0.0031 - 14 0.0031 - 15 0.00413 - 19 0.0031 - 20 0.00103 - 21 0.0165 - 26 0.031 - 28 0.00206 - 29 0.0433 - 30 0.0031 - 31 0.00826 - 32 0.0248 - 33 0.0299 - 34 0.0186 - 35 0.00722 - 37 0.00206 - 39 0.00103 - 40 0.143 - 41 0.156 - 42 0.0826 - 43 0.00206 - 44 0.00103 - 45 0.00413 - 47 0.00929 - - 57 57 17 0 - 0 0.0877 - 2 0.0877 - 3 0.105 - 4 0.0175 - 7 0.105 - 8 0.0351 - 12 0.0351 - 21 0.0526 - 26 0.0175 - 29 0.0351 - 30 0.0175 - 33 0.0175 - 34 0.0175 - 40 0.158 - 41 0.123 - 42 0.0351 - 45 0.0526 - - 60 2 2 0 - 0 0.5 - 21 0.5 - - 64 5 4 0 - 0 0.2 - 2 0.4 - 19 0.2 - 41 0.2 - - 59 3 3 0 - 7 0.333 - 14 0.333 - 40 0.333 - - 60 5599 31 16 - 0 0.00982 - 2 0.0179 - 3 0.00679 - 4 0.0516 - 7 0.357 - 8 0.00732 - 9 0.00411 - 12 0.00304 - 13 0.00357 - 14 0.000179 - 15 0.00304 - 19 0.00125 - 20 0.000179 - 21 0.00589 - 22 0.000179 - 25 0.000179 - 26 0.0564 - 29 0.00304 - 30 0.0025 - 31 0.00768 - 34 0.000893 - 35 0.000536 - 37 0.000179 - 40 0.187 - 41 0.219 - 42 0.0136 - 43 0.0282 - 44 0.00679 - 45 0.000357 - 46 0.000179 - 47 0.00125 - - 3 11 8 0 - 0 0.182 - 2 0.0909 - 7 0.0909 - 14 0.0909 - 26 0.0909 - 29 0.0909 - 40 0.0909 - 41 0.273 - - 4 101 15 0 - 0 0.0396 - 2 0.0297 - 4 0.0891 - 7 0.564 - 8 0.0198 - 12 0.0099 - 15 0.0297 - 19 0.0198 - 21 0.0099 - 26 0.0297 - 29 0.0099 - 31 0.0891 - 40 0.0297 - 41 0.0198 - 44 0.0099 - - 8 72 10 0 - 0 0.0278 - 7 0.486 - 12 0.0139 - 13 0.0139 - 21 0.0278 - 26 0.0694 - 31 0.0139 - 40 0.125 - 41 0.208 - 44 0.0139 - - 13 49 7 0 - 4 0.0612 - 7 0.327 - 21 0.0204 - 34 0.0204 - 40 0.224 - 41 0.327 - 44 0.0204 - - 14 21 6 0 - 7 0.0476 - 19 0.0476 - 30 0.0476 - 40 0.714 - 41 0.0952 - 42 0.0476 - - 20 12 3 0 - 7 0.833 - 8 0.0833 - 40 0.0833 - - 21 8 4 0 - 4 0.125 - 7 0.5 - 40 0.25 - 42 0.125 - - 30 4 3 0 - 7 0.5 - 12 0.25 - 40 0.25 - - 31 30 8 0 - 0 0.1 - 4 0.0667 - 7 0.433 - 13 0.0333 - 26 0.0667 - 31 0.0667 - 40 0.133 - 41 0.1 - - 39 9 7 0 - 2 0.111 - 4 0.222 - 26 0.111 - 40 0.222 - 41 0.111 - 43 0.111 - 47 0.111 - - 42 1 1 0 - 47 1 - - 44 2 1 0 - 43 1 - - 47 5218 30 0 - 0 0.00824 - 2 0.0178 - 3 0.00728 - 4 0.0519 - 7 0.353 - 8 0.00709 - 9 0.00422 - 12 0.00268 - 13 0.00345 - 15 0.00268 - 19 0.000767 - 20 0.000192 - 21 0.00556 - 22 0.000192 - 25 0.000192 - 26 0.0583 - 29 0.00268 - 30 0.00249 - 31 0.00594 - 34 0.000767 - 35 0.000575 - 37 0.000192 - 40 0.186 - 41 0.226 - 42 0.0142 - 43 0.0295 - 44 0.00652 - 45 0.000383 - 46 0.000192 - 47 0.000958 - - 48 6 3 0 - 7 0.167 - 40 0.667 - 44 0.167 - - 55 34 8 0 - 0 0.0294 - 2 0.0588 - 7 0.441 - 8 0.0294 - 9 0.0294 - 29 0.0294 - 40 0.265 - 41 0.118 - - 60 16 4 0 - 4 0.0625 - 7 0.125 - 40 0.688 - 41 0.125 - - 61 43 6 0 - 0 0.0233 - 29 0.0233 - 33 0.0233 - 40 0.465 - 41 0.395 - 42 0.0698 - - 62 1601 28 11 - 0 0.0431 - 2 0.02 - 3 0.000625 - 4 0.00187 - 7 0.03 - 8 0.000625 - 12 0.02 - 15 0.00125 - 19 0.000625 - 21 0.0075 - 22 0.00125 - 26 0.00187 - 28 0.000625 - 29 0.0169 - 30 0.000625 - 31 0.00125 - 32 0.0025 - 33 0.00937 - 34 0.000625 - 37 0.00125 - 40 0.626 - 41 0.176 - 42 0.0162 - 43 0.00312 - 44 0.00125 - 45 0.00187 - 46 0.00874 - 47 0.005 - - 2 20 3 0 - 29 0.05 - 40 0.75 - 41 0.2 - - 4 2 2 0 - 40 0.5 - 43 0.5 - - 8 5 4 0 - 40 0.4 - 41 0.2 - 43 0.2 - 46 0.2 - - 13 936 26 0 - 0 0.0513 - 2 0.016 - 3 0.00107 - 4 0.00214 - 7 0.031 - 8 0.00107 - 12 0.0246 - 15 0.00107 - 19 0.00107 - 21 0.00962 - 22 0.00107 - 26 0.00321 - 28 0.00107 - 29 0.0214 - 31 0.00214 - 33 0.0118 - 34 0.00107 - 37 0.00214 - 40 0.607 - 41 0.185 - 42 0.0139 - 43 0.00107 - 44 0.00107 - 45 0.00321 - 46 0.00321 - 47 0.00321 - - 14 215 16 0 - 0 0.0698 - 2 0.0419 - 4 0.00465 - 7 0.0512 - 12 0.0279 - 15 0.00465 - 21 0.0093 - 22 0.00465 - 29 0.0233 - 30 0.00465 - 32 0.014 - 33 0.00465 - 40 0.581 - 41 0.144 - 42 0.00465 - 47 0.0093 - - 41 42 5 0 - 2 0.0714 - 40 0.548 - 41 0.333 - 42 0.0238 - 43 0.0238 - - 42 99 5 0 - 40 0.889 - 41 0.0303 - 42 0.0505 - 46 0.0101 - 47 0.0202 - - 45 38 4 0 - 40 0.553 - 41 0.184 - 42 0.0263 - 46 0.237 - - 47 8 4 0 - 12 0.25 - 33 0.125 - 40 0.5 - 47 0.125 - - 55 65 7 0 - 0 0.0154 - 2 0.0462 - 7 0.0615 - 40 0.569 - 41 0.246 - 42 0.0462 - 44 0.0154 - - 57 132 12 0 - 0 0.0303 - 2 0.00758 - 7 0.0227 - 12 0.00758 - 21 0.00758 - 29 0.00758 - 32 0.00758 - 33 0.0152 - 40 0.689 - 41 0.182 - 42 0.0152 - 43 0.00758 - - 64 9765 30 13 - 0 0.0406 - 2 0.012 - 4 0.00113 - 7 0.0138 - 8 0.000102 - 12 0.015 - 13 0.00041 - 14 0.000102 - 15 0.000307 - 19 0.000819 - 20 0.000102 - 21 0.00379 - 22 0.000307 - 26 0.00379 - 28 0.000614 - 29 0.0086 - 30 0.00102 - 31 0.000512 - 32 0.0044 - 33 0.00287 - 34 0.00041 - 37 0.000205 - 40 0.613 - 41 0.245 - 42 0.0247 - 43 0.00143 - 44 0.00164 - 45 0.00113 - 46 0.00113 - 47 0.00113 - - 2 12 3 0 - 40 0.75 - 41 0.0833 - 42 0.167 - - 8 2 2 0 - 40 0.5 - 44 0.5 - - 13 484 13 0 - 0 0.0331 - 2 0.00826 - 7 0.00413 - 12 0.0145 - 26 0.00207 - 29 0.0124 - 33 0.00826 - 40 0.731 - 41 0.157 - 42 0.0227 - 43 0.00207 - 45 0.00207 - 46 0.00207 - - 14 162 8 0 - 0 0.037 - 2 0.00617 - 12 0.00617 - 29 0.0123 - 32 0.00617 - 40 0.79 - 41 0.136 - 42 0.00617 - - 41 2797 15 0 - 0 0.00465 - 2 0.00107 - 4 0.000358 - 7 0.000358 - 12 0.000715 - 15 0.000358 - 21 0.000715 - 29 0.0025 - 33 0.000715 - 40 0.555 - 41 0.417 - 42 0.0136 - 43 0.000715 - 44 0.000358 - 47 0.00179 - - 42 55 4 0 - 40 0.545 - 41 0.0364 - 42 0.4 - 46 0.0182 - - 44 1 1 0 - 43 1 - - 46 78 5 0 - 2 0.0128 - 40 0.718 - 41 0.244 - 42 0.0128 - 44 0.0128 - - 49 18 3 0 - 22 0.0556 - 40 0.667 - 41 0.278 - - 55 5353 30 0 - 0 0.0616 - 2 0.0189 - 4 0.00187 - 7 0.023 - 8 0.000187 - 12 0.023 - 13 0.000747 - 14 0.000187 - 15 0.000374 - 19 0.00149 - 20 0.000187 - 21 0.00654 - 22 0.000187 - 26 0.00579 - 28 0.000934 - 29 0.0116 - 30 0.00187 - 31 0.000747 - 32 0.0071 - 33 0.00411 - 34 0.000747 - 37 0.000374 - 40 0.611 - 41 0.181 - 42 0.0275 - 43 0.00187 - 44 0.00205 - 45 0.00168 - 46 0.00168 - 47 0.00112 - - 57 678 15 0 - 0 0.0383 - 2 0.00885 - 7 0.0133 - 12 0.0192 - 22 0.00147 - 26 0.00737 - 28 0.00147 - 29 0.00885 - 31 0.00147 - 32 0.0059 - 40 0.715 - 41 0.15 - 42 0.0236 - 44 0.00295 - 45 0.00147 - - 58 36 4 0 - 0 0.0278 - 40 0.806 - 41 0.111 - 42 0.0556 - - 69 29 3 0 - 40 0.862 - 41 0.103 - 42 0.0345 - - 65 9 3 0 - 40 0.444 - 46 0.222 - 47 0.333 - - 67 5 4 0 - 40 0.4 - 42 0.2 - 46 0.2 - 47 0.2 - - 68 68 9 1 - 0 0.0294 - 2 0.0294 - 7 0.0882 - 26 0.0294 - 29 0.0294 - 32 0.0441 - 40 0.603 - 41 0.103 - 42 0.0441 - - 57 10 3 0 - 2 0.2 - 40 0.7 - 42 0.1 - - 69 4817 31 8 - 0 0.0619 - 2 0.0199 - 3 0.000415 - 4 0.00166 - 7 0.0309 - 8 0.00145 - 12 0.0276 - 13 0.000415 - 15 0.000208 - 21 0.0083 - 22 0.00083 - 25 0.000208 - 26 0.00851 - 28 0.00104 - 29 0.0324 - 30 0.00208 - 31 0.00415 - 32 0.0129 - 33 0.00893 - 34 0.00353 - 35 0.000623 - 37 0.000415 - 39 0.000208 - 40 0.478 - 41 0.256 - 42 0.0286 - 43 0.00332 - 44 0.00145 - 45 0.00083 - 46 0.00104 - 47 0.00187 - - 41 789 13 0 - 0 0.00634 - 2 0.00253 - 7 0.0152 - 12 0.00127 - 21 0.00127 - 26 0.00253 - 29 0.0139 - 32 0.00253 - 33 0.00634 - 40 0.326 - 41 0.597 - 42 0.0228 - 47 0.00253 - - 42 8 2 0 - 40 0.25 - 42 0.75 - - 44 2 1 0 - 43 1 - - 45 5 5 0 - 0 0.2 - 8 0.2 - 40 0.2 - 41 0.2 - 44 0.2 - - 46 31 6 0 - 0 0.0323 - 21 0.0323 - 32 0.0323 - 40 0.516 - 41 0.355 - 45 0.0323 - - 48 7 1 0 - 41 1 - - 55 3706 31 0 - 0 0.0739 - 2 0.0237 - 3 0.00054 - 4 0.00216 - 7 0.0351 - 8 0.00162 - 12 0.0351 - 13 0.00054 - 15 0.00027 - 21 0.00944 - 22 0.000809 - 25 0.00027 - 26 0.0105 - 28 0.00135 - 29 0.0364 - 30 0.0027 - 31 0.0054 - 32 0.0159 - 33 0.0103 - 34 0.00459 - 35 0.000809 - 37 0.00054 - 39 0.00027 - 40 0.502 - 41 0.188 - 42 0.0286 - 43 0.00324 - 44 0.00162 - 45 0.000809 - 46 0.00135 - 47 0.00189 - - 57 248 11 0 - 0 0.0645 - 2 0.0202 - 7 0.0282 - 12 0.00806 - 21 0.0121 - 22 0.00403 - 29 0.0403 - 40 0.597 - 41 0.185 - 42 0.0323 - 43 0.00806 - - 73 3 3 0 - 0 0.333 - 32 0.333 - 41 0.333 - - 74 16 7 0 - 0 0.0625 - 26 0.0625 - 35 0.0625 - 40 0.125 - 41 0.125 - 42 0.0625 - 47 0.5 - -56 3639 35 22 - 0 0.0231 - 2 0.288 - 3 0.00302 - 4 0.00769 - 6 0.000275 - 7 0.104 - 8 0.0445 - 9 0.0011 - 12 0.0115 - 13 0.0409 - 14 0.0168 - 15 0.0176 - 16 0.00055 - 18 0.000824 - 20 0.000275 - 21 0.0055 - 23 0.000275 - 26 0.00907 - 28 0.0011 - 29 0.00632 - 30 0.00467 - 31 0.0055 - 32 0.0121 - 33 0.00247 - 34 0.00632 - 35 0.00467 - 37 0.000275 - 39 0.0022 - 40 0.144 - 41 0.192 - 42 0.00714 - 43 0.00055 - 44 0.0118 - 45 0.0011 - 46 0.0231 - - 2 357 16 3 - 3 0.0224 - 4 0.0056 - 8 0.361 - 9 0.0112 - 13 0.325 - 14 0.0728 - 15 0.126 - 16 0.0028 - 20 0.0028 - 21 0.0196 - 23 0.0028 - 30 0.0084 - 31 0.014 - 33 0.0028 - 39 0.0112 - 45 0.0112 - - 41 17 7 0 - 8 0.118 - 13 0.412 - 14 0.0588 - 15 0.118 - 31 0.0588 - 39 0.176 - 45 0.0588 - - 46 3 1 0 - 45 1 - - 56 337 15 0 - 3 0.0237 - 4 0.00593 - 8 0.377 - 9 0.0119 - 13 0.323 - 14 0.0742 - 15 0.128 - 16 0.00297 - 20 0.00297 - 21 0.0208 - 23 0.00297 - 30 0.0089 - 31 0.0119 - 33 0.00297 - 39 0.00297 - - 3 7 5 0 - 2 0.286 - 4 0.286 - 40 0.143 - 41 0.143 - 46 0.143 - - 6 7 3 0 - 40 0.286 - 41 0.286 - 46 0.429 - - 13 392 19 8 - 0 0.0102 - 2 0.416 - 7 0.148 - 12 0.0102 - 14 0.0051 - 21 0.00255 - 26 0.0102 - 29 0.0051 - 30 0.00255 - 31 0.00255 - 32 0.0051 - 33 0.00255 - 34 0.0051 - 35 0.00255 - 39 0.00255 - 40 0.107 - 41 0.24 - 42 0.0051 - 46 0.0179 - - 3 7 5 0 - 2 0.429 - 7 0.143 - 14 0.143 - 31 0.143 - 40 0.143 - - 4 4 2 0 - 41 0.25 - 46 0.75 - - 8 107 13 0 - 0 0.00935 - 2 0.271 - 7 0.15 - 12 0.0187 - 21 0.00935 - 26 0.00935 - 29 0.00935 - 32 0.0187 - 34 0.0187 - 40 0.103 - 41 0.355 - 42 0.00935 - 46 0.0187 - - 9 1 1 0 - 42 1 - - 13 89 11 0 - 0 0.0337 - 2 0.371 - 7 0.169 - 12 0.0112 - 26 0.0112 - 29 0.0112 - 33 0.0112 - 39 0.0112 - 40 0.135 - 41 0.225 - 46 0.0112 - - 14 6 2 0 - 2 0.5 - 40 0.5 - - 30 8 3 0 - 7 0.125 - 40 0.5 - 41 0.375 - - 47 147 10 0 - 2 0.565 - 7 0.156 - 12 0.0068 - 14 0.0068 - 26 0.0136 - 30 0.0068 - 35 0.0068 - 40 0.0544 - 41 0.177 - 46 0.0068 - - 14 312 22 7 - 0 0.0353 - 2 0.385 - 4 0.00321 - 7 0.0994 - 8 0.016 - 12 0.00962 - 14 0.00321 - 21 0.00321 - 26 0.0192 - 28 0.00321 - 29 0.00641 - 30 0.00962 - 31 0.00641 - 32 0.0192 - 34 0.00962 - 35 0.00962 - 40 0.128 - 41 0.212 - 42 0.00321 - 43 0.00321 - 44 0.00641 - 46 0.00962 - - 8 75 12 0 - 0 0.0267 - 2 0.333 - 7 0.0933 - 8 0.0533 - 21 0.0133 - 26 0.04 - 28 0.0133 - 29 0.0133 - 35 0.0133 - 40 0.2 - 41 0.187 - 46 0.0133 - - 13 93 15 0 - 0 0.0753 - 2 0.312 - 4 0.0108 - 7 0.118 - 12 0.0215 - 30 0.0108 - 31 0.0215 - 32 0.0323 - 34 0.0108 - 35 0.0215 - 40 0.172 - 41 0.161 - 43 0.0108 - 44 0.0108 - 46 0.0108 - - 15 6 5 0 - 2 0.333 - 12 0.167 - 26 0.167 - 29 0.167 - 41 0.167 - - 21 3 3 0 - 2 0.333 - 7 0.333 - 14 0.333 - - 31 5 5 0 - 0 0.2 - 2 0.2 - 30 0.2 - 41 0.2 - 44 0.2 - - 45 1 1 0 - 46 1 - - 47 111 10 0 - 2 0.523 - 7 0.0721 - 8 0.00901 - 26 0.018 - 30 0.00901 - 32 0.027 - 34 0.018 - 40 0.0631 - 41 0.252 - 42 0.00901 - - 15 139 12 3 - 0 0.00719 - 2 0.266 - 7 0.0719 - 14 0.00719 - 18 0.0216 - 29 0.00719 - 32 0.0144 - 33 0.00719 - 40 0.194 - 41 0.223 - 44 0.0863 - 46 0.0935 - - 3 3 3 0 - 2 0.333 - 7 0.333 - 14 0.333 - - 15 83 9 0 - 2 0.265 - 7 0.012 - 29 0.012 - 32 0.0241 - 33 0.012 - 40 0.229 - 41 0.253 - 44 0.12 - 46 0.0723 - - 47 45 8 0 - 0 0.0222 - 2 0.244 - 7 0.178 - 18 0.0667 - 40 0.156 - 41 0.156 - 44 0.0444 - 46 0.133 - - 16 12 6 0 - 0 0.0833 - 2 0.417 - 7 0.0833 - 41 0.25 - 42 0.0833 - 46 0.0833 - - 18 3 3 0 - 0 0.333 - 7 0.333 - 12 0.333 - - 30 2 2 0 - 2 0.5 - 4 0.5 - - 33 1 1 0 - 4 1 - - 41 116 15 1 - 0 0.0172 - 2 0.155 - 3 0.00862 - 4 0.0259 - 6 0.00862 - 7 0.0172 - 8 0.138 - 13 0.267 - 14 0.19 - 15 0.103 - 16 0.00862 - 21 0.0172 - 31 0.00862 - 35 0.00862 - 46 0.0259 - - 57 3 3 0 - 0 0.333 - 21 0.333 - 46 0.333 - - 42 3 3 0 - 4 0.333 - 32 0.333 - 37 0.333 - - 45 3 1 0 - 15 1 - - 46 8 4 0 - 2 0.5 - 7 0.125 - 29 0.125 - 34 0.25 - - 47 1311 27 19 - 0 0.032 - 2 0.263 - 3 0.00153 - 4 0.00763 - 7 0.127 - 8 0.00458 - 12 0.016 - 13 0.000763 - 14 0.00381 - 15 0.00153 - 21 0.00381 - 26 0.0114 - 28 0.00153 - 29 0.00839 - 30 0.00534 - 31 0.00534 - 32 0.0168 - 33 0.00305 - 34 0.00763 - 35 0.0061 - 39 0.00153 - 40 0.2 - 41 0.222 - 42 0.00839 - 43 0.000763 - 44 0.0114 - 46 0.029 - - 2 2 2 0 - 3 0.5 - 30 0.5 - - 3 7 5 0 - 2 0.286 - 4 0.286 - 40 0.143 - 41 0.143 - 46 0.143 - - 6 7 3 0 - 40 0.286 - 41 0.286 - 46 0.429 - - 13 389 18 0 - 0 0.0103 - 2 0.419 - 7 0.147 - 12 0.0103 - 14 0.00514 - 21 0.00257 - 26 0.00771 - 29 0.00514 - 31 0.00257 - 32 0.00514 - 33 0.00257 - 34 0.00514 - 35 0.00257 - 39 0.00257 - 40 0.108 - 41 0.242 - 42 0.00514 - 46 0.018 - - 14 310 22 0 - 0 0.0355 - 2 0.387 - 4 0.00323 - 7 0.0968 - 8 0.0161 - 12 0.00968 - 14 0.00323 - 21 0.00323 - 26 0.0194 - 28 0.00323 - 29 0.00645 - 30 0.00968 - 31 0.00645 - 32 0.0194 - 34 0.00968 - 35 0.00968 - 40 0.129 - 41 0.213 - 42 0.00323 - 43 0.00323 - 44 0.00645 - 46 0.00645 - - 15 135 11 0 - 0 0.00741 - 2 0.274 - 7 0.0667 - 14 0.00741 - 29 0.00741 - 32 0.0148 - 33 0.00741 - 40 0.2 - 41 0.23 - 44 0.0889 - 46 0.0963 - - 16 12 6 0 - 0 0.0833 - 2 0.417 - 7 0.0833 - 41 0.25 - 42 0.0833 - 46 0.0833 - - 18 3 3 0 - 0 0.333 - 7 0.333 - 12 0.333 - - 30 2 2 0 - 2 0.5 - 4 0.5 - - 33 1 1 0 - 4 1 - - 41 7 5 0 - 0 0.286 - 2 0.143 - 3 0.143 - 7 0.286 - 31 0.143 - - 46 3 3 0 - 2 0.333 - 7 0.333 - 29 0.333 - - 48 4 1 0 - 40 1 - - 55 8 4 0 - 7 0.125 - 40 0.5 - 41 0.25 - 46 0.125 - - 56 346 23 0 - 0 0.0578 - 2 0.00867 - 4 0.0116 - 7 0.173 - 8 0.00289 - 12 0.0289 - 14 0.00289 - 21 0.00578 - 26 0.0173 - 28 0.00289 - 29 0.0145 - 30 0.00867 - 31 0.00867 - 32 0.0318 - 33 0.00578 - 34 0.0145 - 35 0.0116 - 39 0.00289 - 40 0.344 - 41 0.22 - 42 0.0116 - 44 0.00289 - 46 0.0116 - - 57 45 12 0 - 0 0.0222 - 2 0.0667 - 4 0.0222 - 7 0.0889 - 12 0.0667 - 13 0.0222 - 15 0.0444 - 21 0.0222 - 40 0.333 - 41 0.2 - 42 0.0222 - 46 0.0889 - - 58 13 4 0 - 2 0.308 - 40 0.308 - 41 0.231 - 42 0.154 - - 60 3 1 0 - 41 1 - - 64 5 4 0 - 0 0.2 - 40 0.4 - 41 0.2 - 46 0.2 - - 48 4 1 0 - 40 1 - - 55 20 9 1 - 2 0.05 - 7 0.35 - 29 0.05 - 31 0.05 - 34 0.05 - 40 0.2 - 41 0.1 - 42 0.1 - 46 0.05 - - 47 10 6 0 - 2 0.1 - 7 0.5 - 29 0.1 - 31 0.1 - 34 0.1 - 42 0.1 - - 56 860 23 4 - 0 0.0233 - 2 0.395 - 4 0.00698 - 7 0.11 - 8 0.00581 - 12 0.0116 - 14 0.00465 - 21 0.00349 - 26 0.0093 - 28 0.00116 - 29 0.00581 - 30 0.00349 - 31 0.00349 - 32 0.0128 - 33 0.00233 - 34 0.00581 - 35 0.00465 - 39 0.00116 - 40 0.138 - 41 0.217 - 42 0.00698 - 44 0.0163 - 46 0.0093 - - 2 351 23 0 - 0 0.057 - 2 0.0114 - 4 0.0114 - 7 0.177 - 8 0.00285 - 12 0.0285 - 14 0.0114 - 21 0.0057 - 26 0.0171 - 28 0.00285 - 29 0.0142 - 30 0.00855 - 31 0.00855 - 32 0.0313 - 33 0.0057 - 34 0.0142 - 35 0.0114 - 39 0.00285 - 40 0.328 - 41 0.225 - 42 0.0114 - 44 0.00285 - 46 0.0114 - - 41 83 2 0 - 2 0.675 - 41 0.325 - - 45 8 3 0 - 40 0.25 - 41 0.25 - 46 0.5 - - 47 414 9 0 - 2 0.676 - 4 0.00483 - 7 0.0773 - 8 0.00966 - 21 0.00242 - 26 0.00483 - 41 0.188 - 42 0.00483 - 44 0.0314 - - 57 50 12 0 - 0 0.02 - 2 0.06 - 4 0.02 - 7 0.12 - 12 0.06 - 13 0.02 - 15 0.04 - 21 0.02 - 40 0.3 - 41 0.24 - 42 0.02 - 46 0.08 - - 58 14 4 0 - 2 0.286 - 40 0.286 - 41 0.286 - 42 0.143 - - 60 3 1 0 - 41 1 - - 64 6 4 0 - 0 0.167 - 40 0.333 - 41 0.333 - 46 0.167 - -57 285122 47 41 - 0 0.025 - 1 0.000582 - 2 0.0249 - 3 0.0218 - 4 0.118 - 5 0.000179 - 6 8.77e-05 - 7 0.0779 - 8 0.0345 - 9 0.00187 - 10 0.000544 - 12 0.0081 - 13 0.0408 - 14 0.0204 - 15 0.0544 - 16 0.000593 - 17 0.000368 - 18 0.000154 - 19 0.00467 - 20 0.0129 - 21 0.012 - 22 0.000722 - 23 7.01e-05 - 24 2.1e-05 - 25 1.4e-05 - 26 0.018 - 27 7.01e-06 - 28 0.000656 - 29 0.0139 - 30 0.013 - 31 0.0035 - 32 0.00343 - 33 0.0038 - 34 0.00234 - 35 0.00156 - 36 1.05e-05 - 37 0.00221 - 38 0.000277 - 39 0.0111 - 40 0.28 - 41 0.164 - 42 0.0145 - 43 0.00169 - 44 0.00118 - 45 0.00235 - 46 0.00192 - 47 0.00108 - - 2 472 17 6 - 3 0.00847 - 4 0.0275 - 7 0.684 - 8 0.0424 - 9 0.00636 - 13 0.0169 - 14 0.0169 - 15 0.0106 - 20 0.00212 - 21 0.0826 - 22 0.00212 - 26 0.0742 - 30 0.00424 - 31 0.00424 - 39 0.00212 - 41 0.0127 - 45 0.00212 - - 3 1 1 0 - 3 1 - - 7 33 2 0 - 4 0.0606 - 7 0.939 - - 41 83 8 0 - 3 0.0241 - 4 0.012 - 7 0.602 - 21 0.253 - 22 0.012 - 26 0.0723 - 31 0.012 - 45 0.012 - - 47 56 10 0 - 3 0.0179 - 4 0.179 - 8 0.357 - 9 0.0357 - 13 0.125 - 14 0.143 - 15 0.0714 - 30 0.0357 - 31 0.0179 - 39 0.0179 - - 55 3 3 0 - 13 0.333 - 15 0.333 - 20 0.333 - - 57 280 5 0 - 7 0.807 - 9 0.00357 - 21 0.0643 - 26 0.104 - 41 0.0214 - - 6 13 5 0 - 4 0.154 - 8 0.231 - 14 0.0769 - 15 0.462 - 39 0.0769 - - 7 83957 45 12 - 0 0.000107 - 1 0.00155 - 2 0.00102 - 3 0.0553 - 4 0.345 - 5 3.57e-05 - 6 0.000226 - 7 0.0167 - 8 0.0969 - 9 0.00506 - 10 0.00163 - 12 4.76e-05 - 13 0.119 - 14 0.0601 - 15 0.16 - 16 0.00185 - 17 0.00114 - 19 0.00769 - 20 0.0394 - 21 0.0123 - 22 0.000643 - 23 0.000167 - 25 1.19e-05 - 26 0.000798 - 27 1.19e-05 - 28 0.000119 - 29 2.38e-05 - 30 0.0324 - 31 0.00273 - 32 1.19e-05 - 33 2.38e-05 - 34 0.000226 - 35 0.00219 - 36 1.19e-05 - 37 0.00157 - 38 0.000584 - 39 0.0269 - 40 0.000655 - 41 0.000691 - 42 0.000202 - 43 3.57e-05 - 44 0.00031 - 45 0.00479 - 46 0.000119 - 47 0.000191 - - 2 40 9 0 - 3 0.025 - 4 0.35 - 7 0.1 - 8 0.025 - 13 0.175 - 14 0.05 - 15 0.225 - 19 0.025 - 20 0.025 - - 4 18 7 0 - 2 0.167 - 4 0.278 - 13 0.0556 - 14 0.0556 - 15 0.278 - 20 0.111 - 40 0.0556 - - 7 356 14 0 - 3 0.00562 - 4 0.41 - 8 0.16 - 9 0.0281 - 13 0.129 - 14 0.0927 - 15 0.0365 - 20 0.0871 - 21 0.00281 - 30 0.014 - 31 0.014 - 35 0.00281 - 39 0.00281 - 45 0.014 - - 8 342 16 0 - 3 0.00292 - 4 0.146 - 7 0.00585 - 8 0.12 - 9 0.00585 - 13 0.184 - 14 0.0848 - 15 0.371 - 20 0.00292 - 21 0.00585 - 30 0.0263 - 31 0.00292 - 32 0.00292 - 37 0.00585 - 41 0.00585 - 45 0.0263 - - 21 289 21 0 - 1 0.0138 - 3 0.0346 - 4 0.301 - 7 0.0484 - 8 0.0934 - 9 0.00346 - 10 0.00346 - 13 0.111 - 14 0.0484 - 15 0.0727 - 19 0.00346 - 20 0.0381 - 21 0.0277 - 26 0.0104 - 28 0.00692 - 30 0.163 - 31 0.00346 - 35 0.00346 - 39 0.00346 - 41 0.00346 - 45 0.00692 - - 22 5 4 0 - 4 0.4 - 14 0.2 - 15 0.2 - 28 0.2 - - 44 1 1 0 - 43 1 - - 45 5 4 0 - 4 0.2 - 13 0.4 - 21 0.2 - 30 0.2 - - 47 82196 44 0 - 0 0.000109 - 1 0.0015 - 2 0.00101 - 3 0.0561 - 4 0.345 - 5 3.65e-05 - 6 0.000231 - 7 0.0161 - 8 0.0969 - 9 0.00495 - 10 0.00164 - 12 4.87e-05 - 13 0.118 - 14 0.0599 - 15 0.16 - 16 0.00189 - 17 0.00117 - 19 0.00779 - 20 0.0393 - 21 0.0123 - 22 0.000657 - 23 0.00017 - 25 1.22e-05 - 26 0.000766 - 27 1.22e-05 - 28 8.52e-05 - 29 2.43e-05 - 30 0.032 - 31 0.0027 - 33 1.22e-05 - 34 0.000231 - 35 0.0022 - 36 1.22e-05 - 37 0.00157 - 38 0.000596 - 39 0.0274 - 40 0.000657 - 41 0.000645 - 42 0.000207 - 43 2.43e-05 - 44 0.000316 - 45 0.00467 - 46 0.000109 - 47 0.000182 - - 49 561 20 0 - 1 0.00535 - 3 0.0232 - 4 0.385 - 7 0.0945 - 8 0.0731 - 9 0.00891 - 10 0.00178 - 13 0.171 - 14 0.0624 - 15 0.0838 - 19 0.00713 - 20 0.0285 - 21 0.00535 - 30 0.0357 - 33 0.00178 - 35 0.00178 - 39 0.00357 - 45 0.00357 - 46 0.00178 - 47 0.00178 - - 55 124 13 0 - 3 0.0242 - 4 0.54 - 8 0.0403 - 13 0.0968 - 14 0.00806 - 15 0.0645 - 20 0.105 - 21 0.0161 - 26 0.00806 - 30 0.0645 - 37 0.00806 - 39 0.00806 - 41 0.0161 - - 57 8 4 0 - 4 0.125 - 7 0.625 - 13 0.125 - 21 0.125 - - 8 27 13 0 - 3 0.0741 - 4 0.111 - 9 0.037 - 13 0.148 - 14 0.111 - 15 0.111 - 19 0.037 - 20 0.037 - 26 0.111 - 30 0.111 - 39 0.037 - 40 0.037 - 46 0.037 - - 13 8 4 0 - 3 0.125 - 15 0.375 - 40 0.25 - 41 0.25 - - 14 6 4 0 - 2 0.167 - 32 0.167 - 40 0.333 - 41 0.333 - - 15 12 4 0 - 4 0.25 - 14 0.0833 - 15 0.583 - 16 0.0833 - - 20 2 1 0 - 14 1 - - 21 132 17 5 - 2 0.00758 - 3 0.0227 - 4 0.0985 - 7 0.205 - 8 0.114 - 9 0.00758 - 13 0.0455 - 14 0.00758 - 15 0.0379 - 19 0.0303 - 20 0.0227 - 21 0.197 - 26 0.0455 - 30 0.053 - 31 0.0227 - 40 0.0455 - 41 0.0379 - - 2 14 2 0 - 7 0.714 - 26 0.286 - - 7 10 5 0 - 4 0.1 - 19 0.1 - 21 0.1 - 40 0.3 - 41 0.4 - - 41 14 4 0 - 7 0.786 - 21 0.0714 - 26 0.0714 - 30 0.0714 - - 47 80 15 0 - 2 0.0125 - 3 0.0375 - 4 0.138 - 7 0.05 - 8 0.162 - 9 0.0125 - 13 0.075 - 15 0.0125 - 19 0.025 - 20 0.0375 - 21 0.275 - 26 0.0125 - 30 0.075 - 31 0.0375 - 40 0.0375 - - 49 8 6 0 - 4 0.125 - 8 0.25 - 14 0.125 - 15 0.25 - 19 0.125 - 21 0.125 - - 22 2 2 0 - 8 0.5 - 14 0.5 - - 23 4 2 0 - 26 0.5 - 41 0.5 - - 24 55 14 0 - 0 0.0364 - 3 0.0545 - 4 0.145 - 7 0.182 - 8 0.0545 - 14 0.0364 - 15 0.0727 - 21 0.0364 - 26 0.145 - 30 0.0182 - 31 0.0182 - 40 0.145 - 41 0.0182 - 45 0.0364 - - 26 8661 37 4 - 0 0.000231 - 1 0.00115 - 2 0.00104 - 3 0.158 - 4 0.289 - 6 0.000231 - 7 0.00912 - 8 0.0774 - 9 0.00774 - 10 0.000577 - 13 0.0784 - 14 0.0602 - 15 0.116 - 16 0.00115 - 17 0.000808 - 19 0.0128 - 20 0.0344 - 21 0.0102 - 22 0.000693 - 23 0.000115 - 27 0.000115 - 28 0.00739 - 30 0.0172 - 31 0.00323 - 34 0.000346 - 35 0.00254 - 37 0.000693 - 38 0.00346 - 39 0.1 - 40 0.000462 - 41 0.00104 - 42 0.000115 - 43 0.000115 - 44 0.000346 - 45 0.00323 - 46 0.000115 - 47 0.000462 - - 8 12 6 0 - 4 0.417 - 8 0.0833 - 13 0.167 - 14 0.0833 - 15 0.0833 - 20 0.167 - - 21 8 4 0 - 4 0.625 - 8 0.125 - 14 0.125 - 31 0.125 - - 41 1 1 0 - 28 1 - - 49 36 8 0 - 3 0.0278 - 4 0.556 - 8 0.111 - 9 0.111 - 13 0.0833 - 14 0.0278 - 15 0.0278 - 20 0.0556 - - 28 2 2 0 - 4 0.5 - 37 0.5 - - 29 2 1 0 - 4 1 - - 30 613 21 0 - 3 0.0375 - 4 0.401 - 7 0.00489 - 8 0.106 - 9 0.00816 - 13 0.116 - 14 0.0571 - 15 0.166 - 16 0.00163 - 19 0.00163 - 20 0.0277 - 21 0.00326 - 22 0.00163 - 25 0.00163 - 30 0.0147 - 31 0.00816 - 37 0.00489 - 39 0.0245 - 41 0.00326 - 42 0.00163 - 45 0.00816 - - 31 57 10 0 - 4 0.526 - 7 0.123 - 8 0.0877 - 13 0.0175 - 15 0.0877 - 19 0.0351 - 20 0.0702 - 29 0.0175 - 30 0.0175 - 35 0.0175 - - 40 16 3 0 - 40 0.188 - 46 0.125 - 47 0.688 - - 41 284 20 7 - 0 0.0106 - 2 0.317 - 3 0.00704 - 4 0.173 - 5 0.00352 - 7 0.19 - 8 0.00704 - 13 0.00704 - 15 0.00352 - 19 0.00352 - 20 0.00352 - 21 0.148 - 22 0.00704 - 26 0.0634 - 28 0.00704 - 29 0.0106 - 34 0.00704 - 37 0.00352 - 45 0.0141 - 46 0.0141 - - 2 2 1 0 - 22 1 - - 7 7 3 0 - 21 0.286 - 28 0.286 - 45 0.429 - - 48 2 1 0 - 46 1 - - 49 6 4 0 - 2 0.167 - 4 0.167 - 7 0.5 - 34 0.167 - - 52 3 2 0 - 13 0.667 - 20 0.333 - - 55 71 12 0 - 0 0.0282 - 2 0.0423 - 4 0.62 - 5 0.0141 - 7 0.169 - 8 0.0282 - 15 0.0141 - 19 0.0141 - 21 0.0141 - 26 0.0141 - 29 0.0282 - 46 0.0141 - - 57 189 11 0 - 0 0.00529 - 2 0.45 - 3 0.0106 - 4 0.0212 - 7 0.206 - 21 0.196 - 26 0.0899 - 29 0.00529 - 34 0.00529 - 37 0.00529 - 45 0.00529 - - 42 32 10 3 - 2 0.219 - 4 0.0938 - 7 0.125 - 8 0.0312 - 13 0.0312 - 21 0.125 - 26 0.0312 - 30 0.0312 - 42 0.0312 - 47 0.281 - - 7 5 4 0 - 4 0.4 - 8 0.2 - 30 0.2 - 42 0.2 - - 55 10 2 0 - 13 0.1 - 47 0.9 - - 57 16 4 0 - 2 0.438 - 7 0.25 - 21 0.25 - 26 0.0625 - - 43 7 6 0 - 0 0.143 - 2 0.143 - 3 0.143 - 14 0.143 - 15 0.143 - 41 0.286 - - 44 4 3 0 - 4 0.25 - 15 0.5 - 21 0.25 - - 45 232 15 3 - 1 0.00862 - 3 0.00862 - 4 0.168 - 7 0.00431 - 8 0.22 - 10 0.00431 - 13 0.159 - 14 0.0517 - 15 0.241 - 19 0.00431 - 21 0.0431 - 28 0.0129 - 30 0.056 - 31 0.00431 - 35 0.0129 - - 26 17 8 0 - 3 0.0588 - 4 0.0588 - 8 0.176 - 13 0.235 - 15 0.294 - 21 0.0588 - 28 0.0588 - 30 0.0588 - - 41 2 2 0 - 10 0.5 - 15 0.5 - - 55 1 1 0 - 7 1 - - 46 72 19 4 - 0 0.0139 - 2 0.111 - 4 0.0972 - 7 0.208 - 8 0.0278 - 12 0.0278 - 13 0.0417 - 14 0.0417 - 15 0.0417 - 20 0.0139 - 21 0.0278 - 26 0.0833 - 29 0.0139 - 32 0.0139 - 33 0.0417 - 40 0.0278 - 42 0.0972 - 44 0.0139 - 47 0.0556 - - 7 10 4 0 - 4 0.4 - 14 0.3 - 15 0.2 - 20 0.1 - - 41 4 4 0 - 4 0.25 - 13 0.25 - 15 0.25 - 29 0.25 - - 55 44 14 0 - 0 0.0227 - 2 0.159 - 7 0.318 - 8 0.0455 - 12 0.0455 - 13 0.0227 - 21 0.0227 - 26 0.136 - 32 0.0227 - 33 0.0682 - 40 0.0455 - 42 0.0455 - 44 0.0227 - 47 0.0227 - - 62 2 1 0 - 42 1 - - 47 94690 45 25 - 0 0.0377 - 1 0.000127 - 2 0.0352 - 3 0.000898 - 4 0.00774 - 5 0.000253 - 6 2.11e-05 - 7 0.106 - 8 0.0044 - 9 0.000158 - 10 6.34e-05 - 12 0.0122 - 13 0.00432 - 14 0.000993 - 15 0.00449 - 16 1.06e-05 - 17 1.06e-05 - 18 0.000232 - 19 0.00299 - 20 0.00018 - 21 0.0112 - 22 0.00075 - 23 3.17e-05 - 24 3.17e-05 - 25 1.06e-05 - 26 0.0254 - 28 0.00057 - 29 0.0208 - 30 0.00416 - 31 0.00387 - 32 0.00516 - 33 0.00571 - 34 0.00339 - 35 0.00124 - 36 1.06e-05 - 37 0.00257 - 39 9.5e-05 - 40 0.421 - 41 0.245 - 42 0.0216 - 43 0.0025 - 44 0.00162 - 45 0.0012 - 46 0.00251 - 47 0.00163 - - 7 248 21 0 - 0 0.0282 - 2 0.121 - 4 0.0685 - 7 0.117 - 8 0.0242 - 12 0.0161 - 13 0.0121 - 14 0.0121 - 15 0.0121 - 20 0.00403 - 21 0.0323 - 22 0.00403 - 26 0.0323 - 29 0.00403 - 31 0.00806 - 37 0.00806 - 40 0.222 - 41 0.169 - 42 0.0363 - 43 0.00403 - 47 0.0645 - - 8 4 2 0 - 26 0.75 - 40 0.25 - - 14 6 4 0 - 2 0.167 - 32 0.167 - 40 0.333 - 41 0.333 - - 21 20 8 0 - 2 0.05 - 4 0.05 - 7 0.2 - 19 0.05 - 21 0.05 - 26 0.05 - 40 0.3 - 41 0.25 - - 23 4 2 0 - 26 0.5 - 41 0.5 - - 24 17 7 0 - 0 0.118 - 7 0.176 - 15 0.0588 - 21 0.0588 - 26 0.0588 - 40 0.471 - 41 0.0588 - - 26 38 12 0 - 0 0.0526 - 2 0.0789 - 4 0.0526 - 7 0.237 - 14 0.0263 - 15 0.0526 - 19 0.0263 - 21 0.0526 - 23 0.0263 - 40 0.105 - 41 0.184 - 47 0.105 - - 40 11 1 0 - 47 1 - - 41 27 12 0 - 0 0.111 - 2 0.0741 - 3 0.037 - 4 0.185 - 5 0.037 - 7 0.185 - 15 0.037 - 19 0.037 - 21 0.037 - 26 0.148 - 29 0.0741 - 45 0.037 - - 42 10 2 0 - 13 0.1 - 47 0.9 - - 43 4 3 0 - 0 0.25 - 2 0.25 - 41 0.5 - - 46 58 17 0 - 0 0.0172 - 2 0.138 - 4 0.0345 - 7 0.259 - 8 0.0345 - 12 0.0345 - 13 0.0172 - 15 0.0172 - 21 0.0172 - 26 0.103 - 29 0.0172 - 32 0.0172 - 33 0.0517 - 40 0.0345 - 42 0.121 - 44 0.0172 - 47 0.069 - - 48 254 23 0 - 0 0.0394 - 2 0.0394 - 4 0.0276 - 7 0.157 - 12 0.00787 - 13 0.00394 - 14 0.0157 - 15 0.00394 - 21 0.00787 - 22 0.00394 - 26 0.0394 - 29 0.00787 - 30 0.00394 - 31 0.00787 - 33 0.00394 - 37 0.00787 - 39 0.00394 - 40 0.26 - 41 0.291 - 42 0.0394 - 43 0.00394 - 45 0.0118 - 46 0.0118 - - 49 446 17 0 - 0 0.0112 - 2 0.0202 - 4 0.00897 - 7 0.0336 - 8 0.00224 - 13 0.00224 - 15 0.00673 - 19 0.00448 - 26 0.0224 - 29 0.00448 - 32 0.00224 - 33 0.00224 - 40 0.601 - 41 0.258 - 42 0.0157 - 43 0.00224 - 46 0.00224 - - 51 17 2 0 - 40 0.706 - 41 0.294 - - 55 87632 45 0 - 0 0.0392 - 1 0.000137 - 2 0.0359 - 3 0.000913 - 4 0.0077 - 5 0.000262 - 6 2.28e-05 - 7 0.111 - 8 0.0046 - 9 0.00016 - 10 6.85e-05 - 12 0.0127 - 13 0.00454 - 14 0.000959 - 15 0.00461 - 16 1.14e-05 - 17 1.14e-05 - 18 0.000251 - 19 0.00304 - 20 0.000183 - 21 0.0117 - 22 0.000742 - 23 2.28e-05 - 24 3.42e-05 - 25 1.14e-05 - 26 0.0265 - 28 0.000605 - 29 0.0222 - 30 0.00445 - 31 0.00404 - 32 0.00544 - 33 0.00598 - 34 0.00358 - 35 0.0013 - 36 1.14e-05 - 37 0.00261 - 39 9.13e-05 - 40 0.408 - 41 0.246 - 42 0.0216 - 43 0.00251 - 44 0.00163 - 45 0.00118 - 46 0.00252 - 47 0.00106 - - 57 2302 31 0 - 0 0.0122 - 2 0.0187 - 3 0.0013 - 4 0.00608 - 7 0.0478 - 8 0.0013 - 9 0.000434 - 12 0.00348 - 13 0.00174 - 14 0.000869 - 15 0.00348 - 19 0.00174 - 21 0.00608 - 22 0.0013 - 26 0.0113 - 29 0.00521 - 30 0.000434 - 31 0.00174 - 32 0.00217 - 33 0.000869 - 34 0.000434 - 35 0.0013 - 37 0.00217 - 40 0.595 - 41 0.241 - 42 0.0204 - 43 0.00304 - 44 0.00174 - 45 0.000869 - 46 0.00261 - 47 0.00304 - - 58 9 5 0 - 2 0.111 - 4 0.111 - 7 0.222 - 40 0.333 - 41 0.222 - - 62 3086 28 0 - 0 0.0198 - 2 0.0237 - 3 0.000324 - 4 0.00162 - 7 0.0256 - 8 0.000648 - 12 0.00713 - 15 0.000324 - 19 0.00259 - 21 0.00324 - 22 0.000324 - 26 0.00551 - 28 0.000324 - 29 0.00259 - 30 0.000648 - 31 0.0013 - 32 0.000972 - 33 0.00324 - 34 0.00162 - 37 0.0013 - 40 0.631 - 41 0.239 - 42 0.0185 - 43 0.00194 - 44 0.000972 - 45 0.00162 - 46 0.00162 - 47 0.00259 - - 64 448 14 0 - 0 0.0246 - 2 0.0134 - 7 0.0246 - 12 0.00893 - 21 0.00223 - 26 0.00223 - 32 0.00223 - 34 0.00223 - 40 0.696 - 41 0.192 - 42 0.0223 - 43 0.00223 - 44 0.00446 - 46 0.00223 - - 67 1 1 0 - 46 1 - - 68 17 2 0 - 40 0.765 - 41 0.235 - - 69 14 6 0 - 0 0.0714 - 2 0.0714 - 37 0.0714 - 40 0.571 - 41 0.143 - 42 0.0714 - - 72 5 2 0 - 0 0.6 - 29 0.4 - - 74 3 2 0 - 40 0.333 - 47 0.667 - - 48 259 23 3 - 0 0.0386 - 2 0.0386 - 4 0.027 - 7 0.154 - 12 0.00772 - 13 0.00386 - 14 0.0154 - 15 0.00386 - 21 0.00772 - 22 0.00386 - 26 0.0386 - 29 0.00772 - 30 0.00386 - 31 0.00772 - 33 0.00386 - 37 0.00772 - 39 0.00386 - 40 0.255 - 41 0.293 - 42 0.0386 - 43 0.00386 - 45 0.0116 - 46 0.0232 - - 21 14 5 0 - 4 0.0714 - 7 0.0714 - 40 0.5 - 41 0.214 - 46 0.143 - - 26 22 5 0 - 7 0.5 - 14 0.0455 - 40 0.182 - 41 0.182 - 42 0.0909 - - 45 14 3 0 - 40 0.5 - 41 0.286 - 46 0.214 - - 49 475 17 5 - 0 0.0105 - 2 0.0189 - 4 0.0168 - 7 0.0674 - 8 0.00211 - 13 0.00211 - 15 0.00842 - 19 0.00421 - 26 0.0232 - 29 0.00421 - 32 0.00211 - 33 0.00211 - 40 0.564 - 41 0.255 - 42 0.0147 - 43 0.00211 - 46 0.00211 - - 2 12 3 0 - 4 0.0833 - 7 0.833 - 26 0.0833 - - 7 209 16 0 - 0 0.0191 - 2 0.0287 - 4 0.0335 - 7 0.067 - 8 0.00478 - 15 0.0144 - 19 0.00957 - 26 0.0431 - 29 0.00957 - 32 0.00478 - 33 0.00478 - 40 0.364 - 41 0.368 - 42 0.0191 - 43 0.00478 - 46 0.00478 - - 21 6 5 0 - 0 0.167 - 7 0.167 - 13 0.167 - 40 0.333 - 41 0.167 - - 41 53 4 0 - 7 0.113 - 26 0.0189 - 40 0.755 - 41 0.113 - - 55 186 5 0 - 2 0.0161 - 7 0.00538 - 40 0.785 - 41 0.177 - 42 0.0161 - - 50 38 2 0 - 7 0.842 - 26 0.158 - - 51 18 3 0 - 40 0.667 - 41 0.278 - 46 0.0556 - - 52 3 1 0 - 41 1 - - 55 88258 45 19 - 0 0.0389 - 1 0.000136 - 2 0.0356 - 3 0.000974 - 4 0.00988 - 5 0.000261 - 6 2.27e-05 - 7 0.112 - 8 0.00509 - 9 0.000159 - 10 6.8e-05 - 12 0.0126 - 13 0.00455 - 14 0.000952 - 15 0.00487 - 16 1.13e-05 - 17 1.13e-05 - 18 0.000249 - 19 0.00301 - 20 0.000181 - 21 0.0119 - 22 0.000748 - 23 2.27e-05 - 24 3.4e-05 - 25 1.13e-05 - 26 0.0263 - 28 0.000601 - 29 0.022 - 30 0.00442 - 31 0.00401 - 32 0.0054 - 33 0.00594 - 34 0.00356 - 35 0.00129 - 36 1.13e-05 - 37 0.00261 - 39 9.06e-05 - 40 0.405 - 41 0.245 - 42 0.0216 - 43 0.00253 - 44 0.00162 - 45 0.00118 - 46 0.003 - 47 0.00105 - - 2 62 11 0 - 0 0.0323 - 2 0.0161 - 7 0.0806 - 13 0.0323 - 21 0.0161 - 26 0.0161 - 40 0.258 - 41 0.435 - 42 0.0806 - 43 0.0161 - 47 0.0161 - - 6 13 6 0 - 0 0.0769 - 13 0.0769 - 15 0.0769 - 40 0.385 - 43 0.231 - 47 0.154 - - 7 78674 44 0 - 0 0.0417 - 1 0.000153 - 2 0.0359 - 3 0.000953 - 4 0.01 - 5 0.000267 - 6 2.54e-05 - 7 0.102 - 8 0.0053 - 9 0.000165 - 10 7.63e-05 - 12 0.0136 - 13 0.00469 - 14 0.00103 - 15 0.00516 - 16 1.27e-05 - 17 1.27e-05 - 18 0.00028 - 19 0.00324 - 20 0.000178 - 21 0.0122 - 22 0.000775 - 23 2.54e-05 - 24 3.81e-05 - 26 0.0278 - 28 0.000636 - 29 0.0238 - 30 0.00456 - 31 0.0044 - 32 0.00578 - 33 0.0063 - 34 0.00385 - 35 0.0014 - 36 1.27e-05 - 37 0.00253 - 39 8.9e-05 - 40 0.401 - 41 0.25 - 42 0.0215 - 43 0.00247 - 44 0.00174 - 45 0.00114 - 46 0.00262 - 47 0.00105 - - 8 16 7 0 - 2 0.0625 - 7 0.188 - 21 0.125 - 25 0.0625 - 26 0.125 - 40 0.25 - 41 0.188 - - 13 4 3 0 - 7 0.25 - 29 0.25 - 41 0.5 - - 15 11 4 0 - 40 0.273 - 41 0.364 - 42 0.0909 - 46 0.273 - - 21 54 11 0 - 2 0.111 - 4 0.0185 - 7 0.111 - 8 0.0185 - 15 0.0185 - 19 0.0185 - 26 0.0185 - 32 0.0185 - 40 0.426 - 41 0.185 - 42 0.0556 - - 24 23 7 0 - 2 0.0435 - 4 0.0435 - 7 0.13 - 13 0.0435 - 40 0.435 - 41 0.261 - 43 0.0435 - - 26 8384 35 0 - 0 0.0173 - 2 0.0354 - 3 0.00131 - 4 0.00942 - 5 0.000239 - 7 0.22 - 8 0.0037 - 9 0.000119 - 12 0.00549 - 13 0.00334 - 14 0.000358 - 15 0.00262 - 19 0.00119 - 20 0.000239 - 21 0.0099 - 22 0.000596 - 26 0.0149 - 28 0.000358 - 29 0.00704 - 30 0.0037 - 31 0.000954 - 32 0.00239 - 33 0.00322 - 34 0.00131 - 35 0.000358 - 37 0.0037 - 39 0.000119 - 40 0.433 - 41 0.191 - 42 0.0198 - 43 0.00191 - 44 0.000716 - 45 0.00143 - 46 0.00155 - 47 0.000716 - - 30 598 14 0 - 0 0.00836 - 2 0.00836 - 4 0.00167 - 7 0.0134 - 13 0.00167 - 29 0.0134 - 32 0.00167 - 33 0.00167 - 40 0.562 - 41 0.319 - 42 0.0602 - 43 0.00502 - 45 0.00167 - 47 0.00167 - - 31 45 5 0 - 2 0.0222 - 40 0.267 - 41 0.644 - 42 0.0444 - 43 0.0222 - - 41 10 2 0 - 40 0.8 - 41 0.2 - - 42 5 1 0 - 40 1 - - 44 3 1 0 - 43 1 - - 45 185 5 0 - 2 0.00541 - 7 0.00541 - 40 0.497 - 41 0.259 - 46 0.232 - - 46 12 4 0 - 7 0.0833 - 40 0.583 - 41 0.25 - 45 0.0833 - - 55 121 7 0 - 2 0.0248 - 7 0.0496 - 21 0.00826 - 40 0.736 - 41 0.165 - 42 0.00826 - 43 0.00826 - - 57 10 6 0 - 0 0.2 - 7 0.2 - 21 0.1 - 35 0.1 - 40 0.2 - 41 0.2 - - 58 15 3 0 - 29 0.0667 - 40 0.667 - 41 0.267 - - 57 3084 31 15 - 0 0.00908 - 2 0.105 - 3 0.000973 - 4 0.00681 - 7 0.0516 - 8 0.0013 - 9 0.000324 - 12 0.00259 - 13 0.00162 - 14 0.0013 - 15 0.00292 - 19 0.00162 - 21 0.0123 - 22 0.000973 - 26 0.0717 - 29 0.00389 - 30 0.000324 - 31 0.0013 - 32 0.00162 - 33 0.000649 - 34 0.000324 - 35 0.000973 - 37 0.00195 - 40 0.445 - 41 0.243 - 42 0.0211 - 43 0.00259 - 44 0.00195 - 45 0.000649 - 46 0.00227 - 47 0.00227 - - 2 354 24 0 - 0 0.00847 - 2 0.0254 - 4 0.0169 - 7 0.0508 - 12 0.00282 - 13 0.00282 - 14 0.00282 - 15 0.00282 - 19 0.00282 - 21 0.00847 - 26 0.00847 - 29 0.0169 - 31 0.00282 - 32 0.00282 - 35 0.00282 - 37 0.00282 - 40 0.621 - 41 0.169 - 42 0.0282 - 43 0.00565 - 44 0.00282 - 45 0.00565 - 46 0.00282 - 47 0.00282 - - 4 11 2 0 - 2 0.818 - 41 0.182 - - 7 619 28 0 - 0 0.0226 - 2 0.0468 - 3 0.00162 - 4 0.0162 - 7 0.0565 - 8 0.00485 - 9 0.00162 - 12 0.00808 - 13 0.00485 - 14 0.00323 - 15 0.00646 - 19 0.00485 - 21 0.0162 - 22 0.00162 - 26 0.00808 - 29 0.00969 - 30 0.00162 - 31 0.00162 - 32 0.00485 - 33 0.00162 - 35 0.00323 - 37 0.00646 - 40 0.439 - 41 0.288 - 42 0.0242 - 43 0.00646 - 46 0.00646 - 47 0.00323 - - 8 10 3 0 - 0 0.1 - 40 0.7 - 41 0.2 - - 21 90 8 0 - 2 0.111 - 3 0.0111 - 7 0.0778 - 12 0.0111 - 21 0.0111 - 40 0.444 - 41 0.322 - 46 0.0111 - - 24 12 6 0 - 2 0.0833 - 7 0.167 - 22 0.0833 - 40 0.5 - 41 0.0833 - 42 0.0833 - - 30 448 11 0 - 0 0.00223 - 3 0.00223 - 4 0.00446 - 7 0.0067 - 12 0.00223 - 15 0.0067 - 33 0.00223 - 40 0.629 - 41 0.33 - 42 0.0112 - 44 0.00223 - - 31 302 10 0 - 4 0.00331 - 7 0.00993 - 13 0.00331 - 21 0.00331 - 22 0.00331 - 40 0.788 - 41 0.172 - 42 0.00331 - 44 0.00331 - 47 0.00993 - - 41 66 5 0 - 2 0.227 - 7 0.0152 - 40 0.348 - 41 0.379 - 42 0.0303 - - 44 1 1 0 - 43 1 - - 47 644 10 0 - 2 0.354 - 4 0.00155 - 7 0.0652 - 21 0.0326 - 26 0.289 - 37 0.00155 - 41 0.225 - 42 0.0264 - 44 0.00311 - 46 0.00155 - - 49 25 7 0 - 2 0.04 - 7 0.12 - 19 0.04 - 21 0.04 - 40 0.48 - 41 0.24 - 42 0.04 - - 50 54 5 0 - 2 0.204 - 14 0.0185 - 40 0.537 - 41 0.222 - 42 0.0185 - - 55 185 10 0 - 0 0.00541 - 2 0.0378 - 7 0.151 - 8 0.00541 - 26 0.0541 - 40 0.557 - 41 0.168 - 42 0.0108 - 44 0.00541 - 47 0.00541 - - 57 241 14 0 - 0 0.0332 - 2 0.0166 - 4 0.00415 - 7 0.0705 - 15 0.00415 - 21 0.00415 - 26 0.0705 - 31 0.0083 - 32 0.00415 - 34 0.00415 - 40 0.531 - 41 0.207 - 42 0.0373 - 43 0.00415 - - 58 32 12 3 - 2 0.156 - 3 0.0625 - 4 0.156 - 7 0.0938 - 8 0.125 - 14 0.0312 - 15 0.0938 - 26 0.0625 - 30 0.0312 - 39 0.0312 - 40 0.0938 - 41 0.0625 - - 2 3 2 0 - 7 0.333 - 26 0.667 - - 7 15 9 0 - 2 0.0667 - 3 0.133 - 4 0.0667 - 8 0.2 - 14 0.0667 - 15 0.2 - 30 0.0667 - 39 0.0667 - 41 0.133 - - 57 9 3 0 - 2 0.444 - 7 0.222 - 40 0.333 - - 62 3093 28 4 - 0 0.0197 - 2 0.0236 - 3 0.000323 - 4 0.00162 - 7 0.0259 - 8 0.000647 - 12 0.00711 - 15 0.000323 - 19 0.00259 - 21 0.00323 - 22 0.000323 - 26 0.0055 - 28 0.000323 - 29 0.00259 - 30 0.000647 - 31 0.00129 - 32 0.00097 - 33 0.00323 - 34 0.00162 - 37 0.00129 - 40 0.63 - 41 0.239 - 42 0.0188 - 43 0.00194 - 44 0.00097 - 45 0.00162 - 46 0.00226 - 47 0.00259 - - 26 148 11 0 - 0 0.0135 - 2 0.0135 - 7 0.0338 - 15 0.00676 - 26 0.00676 - 29 0.00676 - 33 0.00676 - 40 0.635 - 41 0.264 - 46 0.00676 - 47 0.00676 - - 41 1 1 0 - 45 1 - - 45 22 3 0 - 40 0.682 - 41 0.227 - 46 0.0909 - - 58 1 1 0 - 12 1 - - 64 449 14 1 - 0 0.0245 - 2 0.0134 - 7 0.0245 - 12 0.00891 - 21 0.00223 - 26 0.00223 - 32 0.00223 - 34 0.00223 - 40 0.695 - 41 0.192 - 42 0.0223 - 43 0.00223 - 44 0.00445 - 46 0.00445 - - 45 2 2 0 - 40 0.5 - 46 0.5 - - 65 2 2 0 - 40 0.5 - 46 0.5 - - 67 1 1 0 - 46 1 - - 68 17 2 0 - 40 0.765 - 41 0.235 - - 69 14 6 0 - 0 0.0714 - 2 0.0714 - 37 0.0714 - 40 0.571 - 41 0.143 - 42 0.0714 - - 72 5 2 0 - 0 0.6 - 29 0.4 - - 74 4 3 0 - 40 0.25 - 46 0.25 - 47 0.5 - -58 7315 39 31 - 0 0.063 - 1 0.000547 - 2 0.0418 - 3 0.00465 - 4 0.0407 - 5 0.000957 - 7 0.0861 - 8 0.0161 - 9 0.000684 - 10 0.00109 - 12 0.0257 - 13 0.0245 - 14 0.0164 - 15 0.0215 - 16 0.000547 - 19 0.0178 - 20 0.0026 - 21 0.0178 - 22 0.000273 - 23 0.000273 - 26 0.0161 - 28 0.00602 - 29 0.0187 - 30 0.00574 - 31 0.00437 - 32 0.00916 - 33 0.0145 - 34 0.00547 - 35 0.00273 - 37 0.00191 - 39 0.000547 - 40 0.0711 - 41 0.194 - 42 0.076 - 43 0.139 - 44 0.00041 - 45 0.0428 - 46 0.00342 - 47 0.00547 - - 2 85 22 4 - 0 0.0235 - 3 0.0353 - 4 0.0824 - 5 0.0118 - 7 0.0941 - 8 0.0353 - 9 0.0118 - 12 0.0235 - 13 0.0706 - 14 0.0471 - 15 0.0118 - 19 0.0353 - 21 0.341 - 22 0.0235 - 26 0.0118 - 29 0.0118 - 30 0.0118 - 31 0.0118 - 32 0.0118 - 33 0.0235 - 41 0.0588 - 45 0.0118 - - 41 20 9 0 - 0 0.05 - 3 0.05 - 7 0.1 - 13 0.1 - 15 0.05 - 21 0.45 - 22 0.1 - 33 0.05 - 45 0.05 - - 42 31 12 0 - 3 0.0323 - 4 0.161 - 5 0.0323 - 7 0.129 - 8 0.0323 - 12 0.0323 - 13 0.0645 - 14 0.0645 - 19 0.0968 - 21 0.29 - 26 0.0323 - 32 0.0323 - - 44 22 13 0 - 0 0.0455 - 4 0.0909 - 7 0.0455 - 8 0.0455 - 12 0.0455 - 13 0.0909 - 14 0.0909 - 21 0.182 - 29 0.0455 - 30 0.0455 - 31 0.0455 - 33 0.0455 - 41 0.182 - - 47 12 6 0 - 3 0.0833 - 7 0.0833 - 8 0.0833 - 9 0.0833 - 21 0.583 - 41 0.0833 - - 4 1 1 0 - 44 1 - - 7 5 4 0 - 9 0.2 - 21 0.2 - 26 0.2 - 43 0.4 - - 8 13 3 0 - 40 0.154 - 42 0.154 - 43 0.692 - - 13 17 3 0 - 41 0.0588 - 42 0.0588 - 43 0.882 - - 14 3 1 0 - 43 1 - - 15 30 4 1 - 40 0.233 - 41 0.1 - 43 0.633 - 46 0.0333 - - 2 2 1 0 - 41 1 - - 21 13 9 0 - 4 0.385 - 7 0.0769 - 8 0.0769 - 13 0.0769 - 20 0.0769 - 26 0.0769 - 31 0.0769 - 42 0.0769 - 43 0.0769 - - 28 3 1 0 - 43 1 - - 32 2 1 0 - 42 1 - - 40 16 3 0 - 4 0.0625 - 43 0.875 - 46 0.0625 - - 41 895 30 11 - 0 0.115 - 2 0.067 - 3 0.00447 - 4 0.0983 - 5 0.00335 - 7 0.124 - 8 0.038 - 9 0.00112 - 10 0.00447 - 12 0.0503 - 13 0.0313 - 14 0.0391 - 15 0.0402 - 16 0.00223 - 19 0.0391 - 20 0.0067 - 21 0.0291 - 23 0.00112 - 26 0.019 - 28 0.0145 - 29 0.0223 - 30 0.0145 - 31 0.00447 - 32 0.0134 - 33 0.019 - 34 0.00223 - 35 0.00559 - 37 0.00335 - 45 0.184 - 46 0.00223 - - 2 5 2 0 - 7 0.8 - 21 0.2 - - 15 3 2 0 - 13 0.667 - 14 0.333 - - 48 5 4 0 - 7 0.2 - 13 0.4 - 14 0.2 - 30 0.2 - - 49 33 14 0 - 0 0.0606 - 3 0.0303 - 4 0.121 - 7 0.273 - 8 0.182 - 13 0.0303 - 15 0.0303 - 19 0.0303 - 20 0.0606 - 21 0.0303 - 26 0.0303 - 28 0.0303 - 29 0.0606 - 35 0.0303 - - 52 7 6 0 - 2 0.143 - 4 0.143 - 7 0.143 - 15 0.286 - 26 0.143 - 30 0.143 - - 55 24 12 0 - 0 0.125 - 4 0.0417 - 7 0.417 - 13 0.0417 - 14 0.0417 - 30 0.0417 - 31 0.0417 - 32 0.0833 - 34 0.0417 - 35 0.0417 - 45 0.0417 - 46 0.0417 - - 57 83 23 0 - 0 0.0723 - 2 0.0723 - 3 0.012 - 4 0.157 - 7 0.157 - 8 0.0241 - 12 0.0241 - 13 0.0843 - 14 0.012 - 15 0.0361 - 19 0.012 - 20 0.012 - 21 0.0361 - 23 0.012 - 26 0.0602 - 28 0.0241 - 29 0.0723 - 30 0.012 - 32 0.012 - 33 0.0602 - 35 0.012 - 45 0.012 - 46 0.012 - - 62 585 28 0 - 0 0.126 - 2 0.0786 - 3 0.00342 - 4 0.101 - 5 0.00513 - 7 0.0906 - 8 0.0376 - 9 0.00171 - 10 0.00513 - 12 0.0632 - 13 0.0188 - 14 0.0393 - 15 0.041 - 16 0.00342 - 19 0.0479 - 20 0.00342 - 21 0.0291 - 26 0.0103 - 28 0.012 - 29 0.0171 - 30 0.0154 - 31 0.00513 - 32 0.012 - 33 0.0154 - 34 0.00171 - 35 0.00342 - 37 0.00513 - 45 0.207 - - 64 50 15 0 - 0 0.18 - 2 0.06 - 4 0.06 - 7 0.22 - 12 0.06 - 13 0.02 - 14 0.04 - 15 0.04 - 21 0.08 - 26 0.06 - 28 0.04 - 29 0.02 - 32 0.02 - 33 0.04 - 45 0.06 - - 66 71 15 0 - 0 0.0986 - 2 0.0423 - 7 0.0986 - 8 0.0141 - 10 0.0141 - 12 0.0423 - 13 0.0141 - 14 0.0704 - 15 0.0141 - 19 0.0141 - 28 0.0141 - 29 0.0141 - 32 0.0141 - 33 0.0141 - 45 0.521 - - 69 24 11 0 - 2 0.0417 - 4 0.292 - 7 0.0833 - 8 0.0833 - 13 0.0417 - 14 0.0417 - 15 0.125 - 19 0.167 - 20 0.0417 - 26 0.0417 - 45 0.0417 - - 42 358 24 11 - 0 0.182 - 2 0.0782 - 3 0.00559 - 4 0.0587 - 7 0.168 - 8 0.0196 - 12 0.0587 - 13 0.0279 - 14 0.0168 - 15 0.0251 - 19 0.0363 - 20 0.00838 - 21 0.0279 - 26 0.0503 - 28 0.014 - 29 0.0531 - 30 0.0168 - 31 0.0168 - 32 0.0307 - 33 0.0419 - 34 0.0363 - 35 0.00838 - 37 0.00559 - 45 0.014 - - 21 1 1 0 - 28 1 - - 32 2 1 0 - 4 1 - - 46 2 2 0 - 31 0.5 - 33 0.5 - - 48 14 10 0 - 0 0.143 - 2 0.0714 - 3 0.0714 - 4 0.0714 - 8 0.0714 - 13 0.143 - 14 0.0714 - 26 0.0714 - 30 0.0714 - 34 0.214 - - 49 11 6 0 - 0 0.0909 - 4 0.0909 - 7 0.455 - 12 0.0909 - 26 0.182 - 30 0.0909 - - 55 125 19 0 - 0 0.232 - 2 0.048 - 4 0.032 - 7 0.152 - 12 0.096 - 14 0.008 - 15 0.032 - 19 0.024 - 20 0.008 - 21 0.048 - 26 0.064 - 28 0.008 - 29 0.064 - 30 0.016 - 31 0.024 - 32 0.04 - 33 0.048 - 34 0.04 - 35 0.016 - - 57 68 22 0 - 0 0.206 - 2 0.0441 - 3 0.0147 - 4 0.0735 - 7 0.162 - 8 0.0294 - 12 0.0441 - 13 0.0441 - 14 0.0147 - 15 0.0294 - 19 0.0147 - 20 0.0147 - 21 0.0294 - 26 0.0294 - 28 0.0147 - 29 0.0735 - 30 0.0147 - 31 0.0294 - 32 0.0294 - 34 0.0441 - 37 0.0147 - 45 0.0294 - - 62 59 19 0 - 0 0.0678 - 2 0.169 - 4 0.0339 - 7 0.203 - 8 0.0508 - 12 0.0169 - 13 0.0678 - 14 0.0169 - 15 0.0339 - 19 0.0847 - 21 0.0169 - 26 0.0508 - 28 0.0169 - 29 0.0169 - 30 0.0169 - 32 0.0169 - 33 0.0678 - 34 0.0169 - 45 0.0339 - - 64 40 12 0 - 0 0.225 - 2 0.1 - 4 0.1 - 7 0.125 - 12 0.075 - 19 0.075 - 26 0.05 - 29 0.075 - 32 0.05 - 33 0.075 - 34 0.025 - 35 0.025 - - 67 1 1 0 - 45 1 - - 69 27 14 0 - 0 0.148 - 2 0.111 - 4 0.0741 - 7 0.259 - 8 0.037 - 12 0.037 - 15 0.037 - 20 0.037 - 21 0.037 - 28 0.037 - 29 0.0741 - 32 0.037 - 33 0.037 - 37 0.037 - - 43 1007 28 21 - 0 0.0487 - 1 0.00199 - 2 0.0616 - 3 0.00993 - 4 0.0248 - 7 0.132 - 8 0.0139 - 12 0.0199 - 13 0.0457 - 14 0.0159 - 15 0.0328 - 19 0.00497 - 21 0.0119 - 26 0.0218 - 28 0.00298 - 29 0.0278 - 30 0.000993 - 31 0.00497 - 32 0.00894 - 33 0.0189 - 34 0.00497 - 35 0.00199 - 39 0.000993 - 40 0.167 - 41 0.206 - 42 0.0894 - 45 0.000993 - 47 0.0189 - - 0 2 2 0 - 13 0.5 - 31 0.5 - - 7 2 2 0 - 7 0.5 - 19 0.5 - - 8 9 3 0 - 8 0.111 - 13 0.556 - 14 0.333 - - 13 15 6 0 - 7 0.267 - 13 0.333 - 14 0.2 - 15 0.0667 - 26 0.0667 - 42 0.0667 - - 14 3 3 0 - 8 0.333 - 21 0.333 - 29 0.333 - - 15 19 6 0 - 12 0.105 - 13 0.211 - 14 0.105 - 15 0.474 - 26 0.0526 - 42 0.0526 - - 20 1 1 0 - 8 1 - - 21 1 1 0 - 8 1 - - 28 3 3 0 - 2 0.333 - 4 0.333 - 13 0.333 - - 40 14 7 0 - 2 0.0714 - 7 0.0714 - 13 0.143 - 14 0.0714 - 15 0.429 - 19 0.0714 - 47 0.143 - - 46 20 8 0 - 0 0.05 - 2 0.15 - 8 0.05 - 12 0.1 - 15 0.05 - 40 0.3 - 41 0.2 - 42 0.1 - - 48 29 7 0 - 2 0.0345 - 8 0.138 - 13 0.552 - 14 0.069 - 15 0.0345 - 40 0.069 - 41 0.103 - - 49 6 5 0 - 1 0.167 - 2 0.167 - 28 0.333 - 40 0.167 - 47 0.167 - - 51 4 3 0 - 40 0.25 - 41 0.5 - 47 0.25 - - 52 3 1 0 - 40 1 - - 54 2 2 0 - 8 0.5 - 15 0.5 - - 55 691 24 0 - 0 0.0507 - 2 0.0651 - 3 0.00289 - 4 0.0304 - 7 0.161 - 8 0.00579 - 12 0.013 - 13 0.013 - 14 0.00434 - 15 0.0188 - 21 0.0116 - 26 0.0232 - 28 0.00145 - 29 0.0347 - 30 0.00145 - 31 0.00289 - 32 0.0101 - 33 0.0232 - 34 0.00579 - 35 0.00145 - 40 0.158 - 41 0.236 - 42 0.113 - 47 0.013 - - 57 52 15 0 - 0 0.173 - 2 0.0577 - 4 0.0385 - 7 0.154 - 12 0.115 - 13 0.0192 - 19 0.0385 - 26 0.0192 - 29 0.0192 - 32 0.0192 - 34 0.0192 - 39 0.0192 - 40 0.135 - 41 0.154 - 47 0.0192 - - 62 68 17 0 - 0 0.0147 - 1 0.0147 - 2 0.0441 - 4 0.0147 - 7 0.0441 - 13 0.0147 - 19 0.0147 - 21 0.0147 - 29 0.0147 - 31 0.0147 - 33 0.0147 - 35 0.0147 - 40 0.382 - 41 0.235 - 42 0.0588 - 45 0.0147 - 47 0.0735 - - 64 23 8 0 - 0 0.13 - 2 0.087 - 7 0.087 - 12 0.0435 - 26 0.0435 - 32 0.0435 - 40 0.261 - 41 0.304 - - 69 30 11 0 - 2 0.0667 - 3 0.267 - 7 0.1 - 21 0.0667 - 26 0.0667 - 29 0.0333 - 31 0.0333 - 33 0.0667 - 40 0.133 - 41 0.0667 - 42 0.1 - - 45 37 11 0 - 0 0.135 - 2 0.0811 - 4 0.135 - 7 0.108 - 8 0.027 - 12 0.135 - 14 0.027 - 19 0.216 - 21 0.0541 - 26 0.027 - 37 0.0541 - - 46 23 3 0 - 29 0.0435 - 42 0.087 - 43 0.87 - - 47 2420 38 14 - 0 0.0946 - 1 0.000826 - 2 0.0632 - 3 0.0062 - 4 0.0583 - 5 0.00124 - 7 0.124 - 8 0.0227 - 9 0.000413 - 10 0.00165 - 12 0.0384 - 13 0.0351 - 14 0.024 - 15 0.0322 - 16 0.000826 - 19 0.026 - 20 0.00372 - 21 0.0198 - 23 0.000413 - 26 0.0236 - 28 0.00909 - 29 0.0281 - 30 0.00785 - 31 0.0062 - 32 0.0136 - 33 0.0215 - 34 0.00826 - 35 0.00413 - 37 0.00289 - 39 0.000826 - 40 0.104 - 41 0.108 - 42 0.0409 - 43 0.00165 - 44 0.000413 - 45 0.057 - 46 0.000413 - 47 0.00826 - - 41 842 30 0 - 0 0.122 - 2 0.0713 - 3 0.00356 - 4 0.102 - 5 0.00356 - 7 0.121 - 8 0.0392 - 9 0.00119 - 10 0.00475 - 12 0.0534 - 13 0.0321 - 14 0.0416 - 15 0.0428 - 16 0.00238 - 19 0.0416 - 20 0.00713 - 21 0.0297 - 23 0.00119 - 26 0.019 - 28 0.0154 - 29 0.0238 - 30 0.0143 - 31 0.00475 - 32 0.0143 - 33 0.0202 - 34 0.00238 - 35 0.00594 - 37 0.00356 - 45 0.154 - 46 0.00119 - - 42 357 24 0 - 0 0.182 - 2 0.0784 - 3 0.0056 - 4 0.0588 - 7 0.168 - 8 0.0196 - 12 0.0588 - 13 0.028 - 14 0.0168 - 15 0.0252 - 19 0.0364 - 20 0.0084 - 21 0.028 - 26 0.0504 - 28 0.014 - 29 0.0532 - 30 0.0168 - 31 0.0168 - 32 0.0308 - 33 0.042 - 34 0.0364 - 35 0.0084 - 37 0.0056 - 45 0.0112 - - 43 1006 28 0 - 0 0.0487 - 1 0.00199 - 2 0.0616 - 3 0.00994 - 4 0.0249 - 7 0.131 - 8 0.0139 - 12 0.0199 - 13 0.0457 - 14 0.0159 - 15 0.0328 - 19 0.00497 - 21 0.0119 - 26 0.0219 - 28 0.00298 - 29 0.0278 - 30 0.000994 - 31 0.00497 - 32 0.00895 - 33 0.0189 - 34 0.00497 - 35 0.00199 - 39 0.000994 - 40 0.167 - 41 0.206 - 42 0.0895 - 45 0.000994 - 47 0.0189 - - 45 36 11 0 - 0 0.139 - 2 0.0833 - 4 0.139 - 7 0.111 - 8 0.0278 - 12 0.139 - 14 0.0278 - 19 0.222 - 21 0.0278 - 26 0.0278 - 37 0.0556 - - 48 7 4 0 - 13 0.143 - 32 0.143 - 40 0.571 - 41 0.143 - - 49 9 2 0 - 40 0.889 - 41 0.111 - - 51 2 2 0 - 41 0.5 - 43 0.5 - - 55 28 4 0 - 13 0.0357 - 40 0.857 - 41 0.0714 - 43 0.0357 - - 57 30 7 0 - 0 0.0333 - 4 0.0333 - 7 0.0333 - 40 0.733 - 41 0.1 - 42 0.0333 - 44 0.0333 - - 62 71 12 0 - 0 0.0423 - 4 0.0282 - 12 0.0282 - 28 0.0141 - 33 0.0141 - 39 0.0141 - 40 0.211 - 41 0.507 - 42 0.0704 - 43 0.0282 - 45 0.0282 - 47 0.0141 - - 64 6 3 0 - 40 0.667 - 41 0.167 - 42 0.167 - - 66 15 6 0 - 0 0.2 - 19 0.133 - 40 0.133 - 41 0.4 - 42 0.0667 - 45 0.0667 - - 68 2 1 0 - 40 1 - - 69 6 3 0 - 40 0.333 - 41 0.5 - 42 0.167 - - 48 57 7 4 - 13 0.0175 - 32 0.0175 - 40 0.0702 - 41 0.105 - 42 0.246 - 43 0.509 - 46 0.0351 - - 42 11 2 0 - 32 0.0909 - 42 0.909 - - 44 24 1 0 - 43 1 - - 45 2 1 0 - 46 1 - - 49 7 4 0 - 13 0.143 - 40 0.143 - 41 0.286 - 43 0.429 - - 49 78 10 5 - 0 0.0128 - 4 0.0256 - 7 0.141 - 8 0.0256 - 9 0.0128 - 21 0.0256 - 40 0.103 - 41 0.436 - 42 0.141 - 43 0.0769 - - 2 17 9 0 - 0 0.0588 - 4 0.118 - 7 0.176 - 8 0.118 - 9 0.0588 - 21 0.118 - 40 0.176 - 41 0.118 - 42 0.0588 - - 41 39 4 0 - 7 0.128 - 40 0.0256 - 41 0.744 - 42 0.103 - - 42 8 3 0 - 7 0.125 - 40 0.125 - 42 0.75 - - 44 6 1 0 - 43 1 - - 49 5 2 0 - 40 0.6 - 41 0.4 - - 51 9 4 0 - 40 0.111 - 41 0.222 - 42 0.111 - 43 0.556 - - 52 11 3 0 - 40 0.0909 - 41 0.636 - 43 0.273 - - 54 3 2 0 - 42 0.333 - 43 0.667 - - 55 884 7 8 - 7 0.00226 - 13 0.00113 - 40 0.0305 - 41 0.0294 - 42 0.141 - 43 0.783 - 46 0.0124 - - 2 18 4 0 - 40 0.167 - 41 0.167 - 42 0.444 - 43 0.222 - - 21 6 4 0 - 40 0.333 - 41 0.333 - 42 0.167 - 43 0.167 - - 41 106 6 0 - 7 0.00943 - 13 0.00943 - 40 0.0566 - 41 0.0472 - 42 0.0377 - 43 0.84 - - 42 115 4 0 - 40 0.0696 - 41 0.0261 - 42 0.878 - 43 0.0261 - - 44 585 2 0 - 41 0.00342 - 43 0.997 - - 45 13 2 0 - 41 0.154 - 46 0.846 - - 47 3 3 0 - 7 0.333 - 40 0.333 - 43 0.333 - - 49 28 4 0 - 40 0.25 - 41 0.25 - 42 0.357 - 43 0.143 - - 57 236 10 8 - 0 0.00424 - 4 0.00424 - 7 0.00424 - 19 0.00424 - 30 0.00847 - 40 0.0932 - 41 0.364 - 42 0.292 - 43 0.22 - 44 0.00424 - - 2 7 4 0 - 19 0.143 - 30 0.286 - 40 0.429 - 42 0.143 - - 21 2 1 0 - 40 1 - - 41 82 4 0 - 40 0.0488 - 41 0.878 - 42 0.0366 - 43 0.0366 - - 42 68 3 0 - 7 0.0147 - 40 0.0588 - 42 0.926 - - 43 1 1 0 - 0 1 - - 44 49 1 0 - 43 1 - - 47 9 4 0 - 4 0.111 - 40 0.222 - 41 0.556 - 44 0.111 - - 49 11 3 0 - 40 0.455 - 41 0.455 - 42 0.0909 - - 58 4 3 0 - 8 0.25 - 41 0.25 - 43 0.5 - - 62 789 13 7 - 0 0.0038 - 4 0.00253 - 12 0.00253 - 28 0.00127 - 33 0.00127 - 39 0.00127 - 40 0.0203 - 41 0.787 - 42 0.0811 - 43 0.0887 - 45 0.00253 - 46 0.00634 - 47 0.00127 - - 2 13 4 0 - 40 0.0769 - 41 0.0769 - 42 0.615 - 43 0.231 - - 41 507 6 0 - 0 0.00197 - 39 0.00197 - 40 0.00789 - 41 0.98 - 42 0.00592 - 43 0.00197 - - 42 62 5 0 - 4 0.0161 - 40 0.129 - 42 0.806 - 43 0.0323 - 47 0.0161 - - 44 64 2 0 - 40 0.0156 - 43 0.984 - - 45 6 2 0 - 41 0.167 - 46 0.833 - - 46 66 3 0 - 4 0.0152 - 41 0.97 - 45 0.0152 - - 47 69 9 0 - 0 0.029 - 12 0.029 - 28 0.0145 - 33 0.0145 - 40 0.0145 - 41 0.841 - 42 0.029 - 43 0.0145 - 45 0.0145 - - 64 119 4 3 - 40 0.0336 - 41 0.429 - 42 0.345 - 43 0.193 - - 41 51 3 0 - 40 0.0392 - 41 0.941 - 42 0.0196 - - 42 38 2 0 - 40 0.0263 - 42 0.974 - - 44 23 1 0 - 43 1 - - 66 86 6 1 - 0 0.0349 - 19 0.0233 - 40 0.0233 - 41 0.895 - 42 0.0116 - 45 0.0116 - - 47 12 4 0 - 0 0.0833 - 19 0.167 - 40 0.167 - 41 0.583 - - 67 7 4 0 - 40 0.286 - 42 0.143 - 43 0.286 - 46 0.286 - - 68 4 2 0 - 40 0.5 - 42 0.5 - - 69 87 4 3 - 40 0.023 - 41 0.31 - 42 0.322 - 43 0.345 - - 42 15 1 0 - 42 1 - - 44 25 1 0 - 43 1 - - 55 25 2 0 - 41 0.96 - 42 0.04 - -59 5284 34 6 - 0 0.00151 - 1 0.00114 - 2 0.0151 - 3 0.0178 - 4 0.211 - 7 0.239 - 8 0.0503 - 9 0.00492 - 10 0.00265 - 12 0.000379 - 13 0.0492 - 14 0.0462 - 15 0.0235 - 17 0.00114 - 19 0.000757 - 20 0.0526 - 21 0.0488 - 22 0.00454 - 24 0.00114 - 26 0.0462 - 30 0.0163 - 31 0.00189 - 35 0.00568 - 37 0.00492 - 38 0.000757 - 39 0.00871 - 40 0.0765 - 41 0.05 - 42 0.00568 - 43 0.000757 - 44 0.000379 - 45 0.00454 - 46 0.0053 - 47 0.000379 - - 7 65 7 0 - 2 0.0615 - 8 0.0154 - 21 0.0154 - 40 0.523 - 41 0.308 - 42 0.0615 - 43 0.0154 - - 8 6 3 0 - 3 0.167 - 7 0.667 - 14 0.167 - - 21 84 9 0 - 0 0.0119 - 2 0.143 - 7 0.0833 - 8 0.0119 - 26 0.0119 - 40 0.464 - 41 0.214 - 42 0.0476 - 47 0.0119 - - 22 1 1 0 - 24 1 - - 24 2481 33 0 - 0 0.00121 - 1 0.00121 - 2 0.00967 - 3 0.0185 - 4 0.225 - 7 0.25 - 8 0.0528 - 9 0.00524 - 10 0.00282 - 12 0.000403 - 13 0.052 - 14 0.0484 - 15 0.025 - 17 0.00121 - 19 0.000806 - 20 0.056 - 21 0.0512 - 22 0.00484 - 24 0.000806 - 26 0.0488 - 30 0.0173 - 31 0.00202 - 35 0.00605 - 37 0.00524 - 38 0.000806 - 39 0.00927 - 40 0.0516 - 41 0.0379 - 42 0.00282 - 43 0.000403 - 44 0.000403 - 45 0.00484 - 46 0.00564 - - 47 2642 34 5 - 0 0.00151 - 1 0.00114 - 2 0.0151 - 3 0.0178 - 4 0.211 - 7 0.239 - 8 0.0503 - 9 0.00492 - 10 0.00265 - 12 0.000379 - 13 0.0492 - 14 0.0462 - 15 0.0235 - 17 0.00114 - 19 0.000757 - 20 0.0526 - 21 0.0488 - 22 0.00454 - 24 0.00114 - 26 0.0462 - 30 0.0163 - 31 0.00189 - 35 0.00568 - 37 0.00492 - 38 0.000757 - 39 0.00871 - 40 0.0765 - 41 0.05 - 42 0.00568 - 43 0.000757 - 44 0.000379 - 45 0.00454 - 46 0.0053 - 47 0.000379 - - 7 65 7 0 - 2 0.0615 - 8 0.0154 - 21 0.0154 - 40 0.523 - 41 0.308 - 42 0.0615 - 43 0.0154 - - 8 6 3 0 - 3 0.167 - 7 0.667 - 14 0.167 - - 21 84 9 0 - 0 0.0119 - 2 0.143 - 7 0.0833 - 8 0.0119 - 26 0.0119 - 40 0.464 - 41 0.214 - 42 0.0476 - 47 0.0119 - - 22 1 1 0 - 24 1 - - 24 2481 33 0 - 0 0.00121 - 1 0.00121 - 2 0.00967 - 3 0.0185 - 4 0.225 - 7 0.25 - 8 0.0528 - 9 0.00524 - 10 0.00282 - 12 0.000403 - 13 0.052 - 14 0.0484 - 15 0.025 - 17 0.00121 - 19 0.000806 - 20 0.056 - 21 0.0512 - 22 0.00484 - 24 0.000806 - 26 0.0488 - 30 0.0173 - 31 0.00202 - 35 0.00605 - 37 0.00524 - 38 0.000806 - 39 0.00927 - 40 0.0516 - 41 0.0379 - 42 0.00282 - 43 0.000403 - 44 0.000403 - 45 0.00484 - 46 0.00564 - -60 29066 33 16 - 0 0.00378 - 2 0.00932 - 3 0.35 - 4 0.0253 - 6 6.88e-05 - 7 0.139 - 8 0.0319 - 9 0.00368 - 12 0.00117 - 13 0.114 - 14 0.0974 - 15 0.0103 - 16 0.000826 - 19 0.000482 - 20 0.00131 - 21 0.0032 - 22 0.000344 - 25 6.88e-05 - 26 0.0221 - 29 0.00131 - 30 0.00124 - 31 0.00365 - 34 0.000344 - 35 0.000482 - 37 6.88e-05 - 40 0.072 - 41 0.0853 - 42 0.00523 - 43 0.012 - 44 0.0031 - 45 0.000344 - 46 0.000172 - 47 0.000482 - - 2 37 4 0 - 3 0.108 - 9 0.73 - 13 0.027 - 21 0.135 - - 3 13760 32 11 - 0 0.00363 - 2 0.00996 - 3 0.356 - 4 0.0206 - 6 7.27e-05 - 7 0.136 - 8 0.0312 - 9 0.00203 - 12 0.00124 - 13 0.115 - 14 0.0988 - 15 0.0102 - 16 0.000872 - 19 0.000436 - 20 7.27e-05 - 21 0.0024 - 22 0.000145 - 25 7.27e-05 - 26 0.0225 - 29 0.00109 - 30 0.00124 - 31 0.00356 - 34 0.000363 - 37 7.27e-05 - 40 0.0715 - 41 0.0883 - 42 0.00516 - 43 0.0126 - 44 0.00327 - 45 0.000363 - 46 7.27e-05 - 47 0.000509 - - 2 62 12 0 - 3 0.0161 - 4 0.0161 - 7 0.113 - 8 0.0323 - 13 0.0323 - 14 0.548 - 21 0.0161 - 31 0.0161 - 34 0.0161 - 40 0.0806 - 41 0.0968 - 45 0.0161 - - 3 6824 31 0 - 0 0.00659 - 2 0.0182 - 3 0.000293 - 4 0.0262 - 6 0.000147 - 7 0.257 - 8 0.0478 - 9 0.00249 - 12 0.00205 - 13 0.119 - 14 0.0928 - 15 0.0147 - 16 0.000879 - 19 0.000879 - 20 0.000147 - 21 0.0041 - 22 0.000147 - 25 0.000147 - 26 0.0441 - 29 0.00147 - 30 0.0022 - 31 0.00659 - 34 0.000586 - 40 0.137 - 41 0.174 - 42 0.00996 - 43 0.0246 - 44 0.00601 - 45 0.00044 - 46 0.000147 - 47 0.00103 - - 4 70 7 0 - 7 0.0286 - 8 0.129 - 13 0.229 - 14 0.486 - 15 0.0857 - 16 0.0286 - 41 0.0143 - - 7 732 17 0 - 0 0.00273 - 2 0.00137 - 3 0.00137 - 4 0.0041 - 7 0.0232 - 8 0.056 - 9 0.00137 - 12 0.00137 - 13 0.493 - 14 0.373 - 15 0.0246 - 29 0.00273 - 31 0.00137 - 37 0.00137 - 40 0.0082 - 41 0.00273 - 44 0.00137 - - 8 27 4 0 - 7 0.037 - 13 0.37 - 14 0.556 - 15 0.037 - - 10 120 8 0 - 7 0.0333 - 8 0.175 - 9 0.0167 - 13 0.233 - 14 0.483 - 15 0.0333 - 30 0.0167 - 40 0.00833 - - 21 513 14 0 - 0 0.00195 - 2 0.00195 - 3 0.00195 - 7 0.0253 - 8 0.0507 - 9 0.00585 - 13 0.567 - 14 0.312 - 15 0.0156 - 16 0.0039 - 29 0.0039 - 31 0.00195 - 40 0.00585 - 41 0.00195 - - 26 226 16 0 - 0 0.00885 - 2 0.00442 - 3 0.00442 - 4 0.00885 - 7 0.0221 - 8 0.0133 - 9 0.00442 - 13 0.23 - 14 0.664 - 15 0.00885 - 16 0.00885 - 21 0.00442 - 22 0.00442 - 40 0.00442 - 41 0.00442 - 42 0.00442 - - 38 5 4 0 - 9 0.2 - 40 0.4 - 41 0.2 - 44 0.2 - - 39 5169 20 0 - 2 0.00193 - 3 0.946 - 4 0.0192 - 7 0.0135 - 8 0.000193 - 9 0.00058 - 12 0.000387 - 13 0.00271 - 14 0.000387 - 15 0.000193 - 21 0.00058 - 26 0.00174 - 29 0.000193 - 31 0.000193 - 40 0.00658 - 41 0.00368 - 42 0.000387 - 43 0.00116 - 44 0.000193 - 45 0.000193 - - 41 1 1 0 - 44 1 - - 4 42 8 0 - 0 0.0238 - 3 0.0238 - 4 0.0476 - 7 0.0952 - 13 0.738 - 15 0.0238 - 35 0.0238 - 42 0.0238 - - 7 10 6 0 - 3 0.4 - 4 0.2 - 8 0.1 - 13 0.1 - 20 0.1 - 40 0.1 - - 8 58 11 2 - 4 0.069 - 7 0.276 - 8 0.0862 - 13 0.103 - 14 0.328 - 15 0.0345 - 20 0.0345 - 29 0.0172 - 31 0.0172 - 35 0.0172 - 40 0.0172 - - 4 23 5 0 - 7 0.348 - 8 0.0435 - 13 0.0435 - 14 0.522 - 29 0.0435 - - 7 12 8 0 - 4 0.167 - 7 0.0833 - 8 0.167 - 13 0.167 - 14 0.167 - 15 0.0833 - 20 0.0833 - 31 0.0833 - - 9 98 14 3 - 0 0.0102 - 2 0.0102 - 4 0.0204 - 7 0.194 - 8 0.0714 - 13 0.112 - 14 0.102 - 15 0.0204 - 19 0.0102 - 26 0.0204 - 29 0.0102 - 40 0.337 - 41 0.0612 - 42 0.0204 - - 2 78 13 0 - 0 0.0128 - 2 0.0128 - 4 0.0256 - 7 0.244 - 8 0.0513 - 13 0.0256 - 14 0.0897 - 19 0.0128 - 26 0.0256 - 29 0.0128 - 40 0.41 - 41 0.0641 - 42 0.0128 - - 3 13 7 0 - 8 0.154 - 13 0.308 - 14 0.154 - 15 0.154 - 40 0.0769 - 41 0.0769 - 42 0.0769 - - 13 4 2 0 - 13 0.75 - 14 0.25 - - 13 248 19 6 - 0 0.00403 - 2 0.0605 - 3 0.153 - 4 0.0282 - 7 0.343 - 8 0.0242 - 9 0.0282 - 13 0.0605 - 14 0.0605 - 20 0.0161 - 21 0.00806 - 26 0.0605 - 31 0.00403 - 35 0.00806 - 40 0.0927 - 41 0.0323 - 42 0.00806 - 43 0.00403 - 46 0.00403 - - 3 165 15 0 - 2 0.0667 - 3 0.218 - 4 0.0242 - 7 0.255 - 8 0.0121 - 9 0.0242 - 13 0.0848 - 14 0.0303 - 21 0.00606 - 26 0.0788 - 31 0.00606 - 40 0.127 - 41 0.0485 - 42 0.0121 - 43 0.00606 - - 4 33 8 0 - 2 0.0606 - 3 0.0606 - 7 0.394 - 8 0.121 - 9 0.0303 - 14 0.273 - 21 0.0303 - 46 0.0303 - - 7 24 8 0 - 0 0.0417 - 4 0.0833 - 7 0.5 - 13 0.0417 - 14 0.0417 - 20 0.125 - 35 0.0833 - 40 0.0833 - - 8 4 2 0 - 7 0.75 - 9 0.25 - - 21 12 3 0 - 4 0.0833 - 7 0.833 - 20 0.0833 - - 47 5 4 0 - 2 0.2 - 7 0.2 - 9 0.2 - 26 0.4 - - 14 83 17 4 - 0 0.012 - 3 0.012 - 4 0.205 - 7 0.229 - 8 0.0843 - 9 0.0723 - 13 0.0361 - 14 0.0602 - 15 0.0602 - 20 0.0482 - 21 0.0602 - 22 0.0361 - 29 0.012 - 31 0.012 - 35 0.0361 - 41 0.012 - 46 0.012 - - 3 59 14 0 - 3 0.0169 - 4 0.288 - 7 0.0339 - 8 0.119 - 9 0.0847 - 13 0.0508 - 14 0.0847 - 15 0.0678 - 20 0.0508 - 21 0.0847 - 22 0.0339 - 29 0.0169 - 31 0.0169 - 35 0.0508 - - 7 16 5 0 - 0 0.0625 - 7 0.75 - 9 0.0625 - 15 0.0625 - 46 0.0625 - - 8 3 2 0 - 7 0.667 - 22 0.333 - - 21 4 2 0 - 7 0.75 - 41 0.25 - - 17 36 2 0 - 4 0.833 - 20 0.167 - - 21 56 10 3 - 0 0.0179 - 4 0.304 - 7 0.0893 - 8 0.143 - 14 0.125 - 20 0.0179 - 21 0.0536 - 31 0.0179 - 40 0.0714 - 41 0.161 - - 2 32 8 0 - 0 0.0312 - 4 0.0625 - 7 0.125 - 8 0.125 - 14 0.219 - 21 0.0312 - 40 0.125 - 41 0.281 - - 7 12 5 0 - 4 0.417 - 7 0.0833 - 8 0.333 - 20 0.0833 - 31 0.0833 - - 21 11 2 0 - 4 0.818 - 21 0.182 - - 22 6 6 0 - 8 0.167 - 9 0.167 - 13 0.167 - 29 0.167 - 30 0.167 - 40 0.167 - - 23 1 1 0 - 21 1 - - 26 12 1 0 - 3 1 - - 28 2 1 0 - 4 1 - - 39 5169 1 0 - 3 1 - - 47 9444 33 13 - 0 0.00582 - 2 0.0125 - 3 0.00498 - 4 0.0389 - 6 0.000106 - 7 0.213 - 8 0.049 - 9 0.00402 - 12 0.0018 - 13 0.175 - 14 0.15 - 15 0.0159 - 16 0.00127 - 19 0.000741 - 20 0.00201 - 21 0.00466 - 22 0.000529 - 25 0.000106 - 26 0.0335 - 29 0.00201 - 30 0.00191 - 31 0.00561 - 34 0.000529 - 35 0.000741 - 37 0.000106 - 40 0.111 - 41 0.131 - 42 0.00805 - 43 0.0185 - 44 0.00476 - 45 0.000529 - 46 0.000212 - 47 0.000741 - - 3 8844 32 0 - 0 0.00565 - 2 0.0131 - 3 0.000905 - 4 0.0321 - 6 0.000113 - 7 0.212 - 8 0.0485 - 9 0.00317 - 12 0.00192 - 13 0.179 - 14 0.154 - 15 0.0158 - 16 0.00136 - 19 0.000678 - 20 0.000113 - 21 0.00373 - 22 0.000226 - 25 0.000113 - 26 0.0351 - 29 0.0017 - 30 0.00192 - 31 0.00554 - 34 0.000565 - 37 0.000113 - 40 0.111 - 41 0.137 - 42 0.00803 - 43 0.0197 - 44 0.00509 - 45 0.000565 - 46 0.000113 - 47 0.000791 - - 4 41 7 0 - 0 0.0244 - 4 0.0488 - 7 0.0976 - 13 0.756 - 15 0.0244 - 35 0.0244 - 42 0.0244 - - 7 3 3 0 - 4 0.333 - 20 0.333 - 40 0.333 - - 8 58 11 0 - 4 0.069 - 7 0.276 - 8 0.0862 - 13 0.103 - 14 0.328 - 15 0.0345 - 20 0.0345 - 29 0.0172 - 31 0.0172 - 35 0.0172 - 40 0.0172 - - 9 98 14 0 - 0 0.0102 - 2 0.0102 - 4 0.0204 - 7 0.194 - 8 0.0714 - 13 0.112 - 14 0.102 - 15 0.0204 - 19 0.0102 - 26 0.0204 - 29 0.0102 - 40 0.337 - 41 0.0612 - 42 0.0204 - - 13 211 19 0 - 0 0.00474 - 2 0.00474 - 3 0.175 - 4 0.0332 - 7 0.37 - 8 0.0284 - 9 0.0142 - 13 0.0711 - 14 0.0711 - 20 0.019 - 21 0.00948 - 26 0.019 - 31 0.00474 - 35 0.00948 - 40 0.109 - 41 0.0379 - 42 0.00948 - 43 0.00474 - 46 0.00474 - - 14 82 16 0 - 0 0.0122 - 3 0.0122 - 4 0.207 - 7 0.232 - 8 0.0854 - 9 0.0732 - 13 0.0366 - 14 0.061 - 15 0.061 - 20 0.0488 - 21 0.061 - 22 0.0366 - 29 0.0122 - 31 0.0122 - 35 0.0366 - 41 0.0122 - - 17 36 2 0 - 4 0.833 - 20 0.167 - - 21 56 10 0 - 0 0.0179 - 4 0.304 - 7 0.0893 - 8 0.143 - 14 0.125 - 20 0.0179 - 21 0.0536 - 31 0.0179 - 40 0.0714 - 41 0.161 - - 22 6 6 0 - 8 0.167 - 9 0.167 - 13 0.167 - 29 0.167 - 30 0.167 - 40 0.167 - - 23 1 1 0 - 21 1 - - 26 1 1 0 - 3 1 - - 28 2 1 0 - 4 1 - -61 113 10 4 - 0 0.0177 - 2 0.0265 - 7 0.133 - 21 0.00885 - 29 0.0177 - 30 0.00885 - 33 0.0177 - 40 0.372 - 41 0.327 - 42 0.0708 - - 2 1 1 0 - 21 1 - - 47 47 7 0 - 0 0.0213 - 2 0.0213 - 29 0.0213 - 33 0.0213 - 40 0.447 - 41 0.383 - 42 0.0851 - - 49 14 4 0 - 7 0.786 - 30 0.0714 - 41 0.0714 - 42 0.0714 - - 57 19 3 0 - 40 0.579 - 41 0.316 - 42 0.105 - -62 239664 43 23 - 0 0.00769 - 1 8.35e-06 - 2 0.0246 - 3 0.000417 - 4 0.00451 - 5 0.000255 - 6 8.35e-06 - 7 0.0107 - 8 0.00105 - 9 7.09e-05 - 10 7.09e-05 - 11 8.35e-06 - 12 0.00318 - 13 0.00107 - 14 0.00113 - 15 0.00279 - 16 2.5e-05 - 17 2.09e-05 - 19 0.00431 - 20 0.000559 - 21 0.00236 - 22 9.6e-05 - 23 2.09e-05 - 26 0.00115 - 27 1.25e-05 - 28 0.000221 - 29 0.0016 - 30 0.000421 - 31 0.000184 - 32 0.00053 - 33 0.0016 - 34 0.0002 - 35 3.34e-05 - 37 0.000526 - 39 3.34e-05 - 40 0.438 - 41 0.154 - 42 0.0193 - 43 0.00174 - 44 0.000538 - 45 0.000726 - 46 0.0115 - 47 0.303 - - 0 1 1 0 - 21 1 - - 2 2635 38 8 - 0 0.00835 - 1 0.00038 - 2 0.00038 - 3 0.022 - 4 0.25 - 5 0.0121 - 7 0.049 - 8 0.0509 - 9 0.0038 - 10 0.00607 - 12 0.00417 - 13 0.055 - 14 0.0687 - 15 0.12 - 16 0.00152 - 17 0.00114 - 19 0.205 - 20 0.0364 - 21 0.0509 - 22 0.00114 - 23 0.00114 - 26 0.00569 - 27 0.00038 - 28 0.00342 - 29 0.00114 - 30 0.00873 - 31 0.00152 - 32 0.00038 - 33 0.00152 - 34 0.00114 - 35 0.000759 - 37 0.00569 - 39 0.00114 - 41 0.0114 - 42 0.00038 - 43 0.00038 - 44 0.00152 - 45 0.00645 - - 41 1755 33 0 - 0 0.00627 - 2 0.00057 - 3 0.0131 - 4 0.271 - 5 0.0114 - 7 0.0581 - 8 0.0541 - 9 0.00399 - 10 0.00513 - 12 0.00399 - 13 0.045 - 14 0.0638 - 15 0.113 - 16 0.00228 - 17 0.00114 - 19 0.226 - 20 0.0336 - 21 0.049 - 22 0.00114 - 23 0.00114 - 26 0.00285 - 28 0.00228 - 29 0.00057 - 30 0.0108 - 31 0.00171 - 34 0.00057 - 35 0.00057 - 37 0.00741 - 39 0.00114 - 41 0.00342 - 42 0.00057 - 44 0.00057 - 45 0.00399 - - 42 83 20 0 - 0 0.0241 - 1 0.012 - 3 0.0361 - 4 0.229 - 7 0.0602 - 8 0.0361 - 10 0.0241 - 12 0.012 - 13 0.0482 - 14 0.0241 - 15 0.108 - 19 0.157 - 20 0.012 - 21 0.0964 - 26 0.012 - 27 0.012 - 28 0.012 - 35 0.012 - 41 0.0602 - 44 0.012 - - 44 1 1 0 - 43 1 - - 45 16 5 0 - 4 0.188 - 13 0.125 - 14 0.0625 - 19 0.562 - 21 0.0625 - - 46 38 11 0 - 4 0.158 - 7 0.0263 - 13 0.0526 - 14 0.0526 - 15 0.0789 - 19 0.316 - 20 0.0526 - 21 0.0526 - 22 0.0263 - 37 0.0263 - 45 0.158 - - 58 43 14 0 - 3 0.0465 - 4 0.256 - 5 0.0465 - 7 0.0233 - 8 0.0698 - 12 0.0233 - 13 0.0698 - 14 0.093 - 15 0.0465 - 19 0.186 - 20 0.0698 - 21 0.0233 - 28 0.0233 - 45 0.0233 - - 62 696 30 0 - 0 0.0129 - 3 0.0388 - 4 0.208 - 5 0.0144 - 7 0.0287 - 8 0.0474 - 9 0.00431 - 10 0.00718 - 12 0.00287 - 13 0.079 - 14 0.0862 - 15 0.149 - 17 0.00144 - 19 0.147 - 20 0.0445 - 21 0.0517 - 23 0.00144 - 26 0.0129 - 28 0.00431 - 29 0.00287 - 30 0.00575 - 31 0.00144 - 32 0.00144 - 33 0.00575 - 34 0.00287 - 37 0.00144 - 39 0.00144 - 41 0.0273 - 44 0.00287 - 45 0.00431 - - 69 2 1 0 - 3 1 - - 7 42 8 1 - 3 0.0238 - 4 0.286 - 5 0.0238 - 7 0.0238 - 13 0.0476 - 14 0.167 - 15 0.0476 - 19 0.381 - - 62 4 3 0 - 3 0.25 - 4 0.25 - 14 0.5 - - 21 32 13 1 - 3 0.0312 - 4 0.156 - 7 0.0312 - 8 0.0312 - 9 0.0312 - 15 0.0625 - 19 0.312 - 20 0.0625 - 21 0.0938 - 26 0.0625 - 28 0.0312 - 37 0.0625 - 41 0.0312 - - 2 7 5 0 - 4 0.429 - 15 0.143 - 19 0.143 - 21 0.143 - 37 0.143 - - 40 35953 5 2 - 40 2.78e-05 - 43 0.00337 - 45 0.000278 - 46 0.06 - 47 0.936 - - 6 1 1 0 - 43 1 - - 62 2516 4 0 - 43 0.00556 - 45 0.000795 - 46 0.0823 - 47 0.911 - - 41 2397 27 8 - 0 0.00167 - 2 0.736 - 3 0.00292 - 4 0.0217 - 5 0.00375 - 6 0.000417 - 7 0.0321 - 8 0.000834 - 9 0.000417 - 12 0.000417 - 13 0.00709 - 14 0.00501 - 15 0.0375 - 19 0.0209 - 20 0.00167 - 21 0.0196 - 23 0.000417 - 26 0.00125 - 27 0.000417 - 28 0.00125 - 29 0.00125 - 30 0.00626 - 33 0.00292 - 34 0.000834 - 45 0.00501 - 46 0.0868 - 47 0.00209 - - 2 26 8 0 - 3 0.0385 - 4 0.0385 - 7 0.615 - 9 0.0385 - 19 0.0769 - 21 0.115 - 27 0.0385 - 30 0.0385 - - 6 1 1 0 - 26 1 - - 21 1 1 0 - 45 1 - - 49 4 3 0 - 2 0.25 - 7 0.5 - 21 0.25 - - 55 8 5 0 - 7 0.25 - 15 0.125 - 21 0.125 - 30 0.125 - 46 0.375 - - 58 7 3 0 - 2 0.143 - 14 0.143 - 45 0.714 - - 62 2139 22 0 - 2 0.813 - 3 0.00234 - 4 0.0229 - 5 0.00421 - 6 0.000468 - 7 0.022 - 8 0.000935 - 13 0.00748 - 14 0.00421 - 15 0.0411 - 19 0.0206 - 20 0.0014 - 21 0.0173 - 23 0.000468 - 26 0.000935 - 28 0.0014 - 29 0.000468 - 30 0.00468 - 33 0.000935 - 34 0.000468 - 45 0.00234 - 46 0.0299 - - 69 206 19 0 - 0 0.0194 - 2 0.0971 - 3 0.00485 - 4 0.00971 - 7 0.0388 - 12 0.00485 - 13 0.00485 - 14 0.00971 - 15 0.00485 - 19 0.0194 - 20 0.00485 - 21 0.0243 - 29 0.00971 - 30 0.0146 - 33 0.0243 - 34 0.00485 - 45 0.00485 - 46 0.675 - 47 0.0243 - - 42 977 35 6 - 0 0.00102 - 1 0.00102 - 2 0.088 - 3 0.0143 - 4 0.148 - 5 0.00614 - 7 0.0645 - 8 0.0287 - 9 0.00409 - 10 0.00102 - 11 0.00205 - 13 0.0409 - 14 0.0409 - 15 0.1 - 16 0.00205 - 17 0.00102 - 19 0.141 - 20 0.0194 - 21 0.0522 - 23 0.00102 - 26 0.00512 - 27 0.00102 - 28 0.00921 - 30 0.00614 - 31 0.00102 - 34 0.00205 - 35 0.00205 - 37 0.00512 - 39 0.00205 - 40 0.0747 - 41 0.00102 - 42 0.00205 - 45 0.0491 - 46 0.00409 - 47 0.0768 - - 42 2 1 0 - 45 1 - - 46 6 1 0 - 47 1 - - 58 4 3 0 - 7 0.25 - 21 0.25 - 45 0.5 - - 62 815 34 0 - 0 0.00123 - 1 0.00123 - 2 0.103 - 3 0.0172 - 4 0.178 - 5 0.00736 - 7 0.0736 - 8 0.0331 - 9 0.00491 - 10 0.00123 - 11 0.00245 - 13 0.0479 - 14 0.0491 - 15 0.119 - 16 0.00245 - 17 0.00123 - 19 0.168 - 20 0.0233 - 21 0.0577 - 23 0.00123 - 26 0.00613 - 27 0.00123 - 28 0.011 - 30 0.00736 - 31 0.00123 - 34 0.00245 - 35 0.00245 - 37 0.00491 - 39 0.00123 - 40 0.00859 - 42 0.00245 - 45 0.0528 - 46 0.00245 - 47 0.00245 - - 66 3 3 0 - 2 0.333 - 8 0.333 - 40 0.333 - - 69 144 13 0 - 2 0.00694 - 7 0.0139 - 13 0.00694 - 15 0.00694 - 19 0.00694 - 21 0.0208 - 37 0.00694 - 39 0.00694 - 40 0.444 - 41 0.00694 - 45 0.00694 - 46 0.0139 - 47 0.451 - - 43 125 4 3 - 20 0.008 - 40 0.032 - 42 0.008 - 47 0.952 - - 2 1 1 0 - 20 1 - - 40 115 2 0 - 42 0.0087 - 47 0.991 - - 69 4 1 0 - 40 1 - - 45 82 15 5 - 0 0.0244 - 2 0.22 - 4 0.134 - 5 0.0122 - 7 0.11 - 8 0.0122 - 13 0.0244 - 14 0.0122 - 15 0.0244 - 19 0.146 - 20 0.0366 - 21 0.0732 - 28 0.0366 - 37 0.0122 - 47 0.122 - - 2 15 7 0 - 0 0.0667 - 4 0.4 - 5 0.0667 - 7 0.133 - 19 0.0667 - 21 0.133 - 28 0.133 - - 40 10 1 0 - 47 1 - - 41 11 4 0 - 2 0.636 - 8 0.0909 - 19 0.182 - 21 0.0909 - - 42 31 11 0 - 0 0.0323 - 4 0.161 - 7 0.194 - 13 0.0645 - 14 0.0323 - 15 0.0645 - 19 0.258 - 20 0.0968 - 21 0.0323 - 28 0.0323 - 37 0.0323 - - 58 13 3 0 - 2 0.846 - 7 0.0769 - 19 0.0769 - - 46 2445 19 7 - 0 0.00164 - 2 0.0225 - 4 0.00204 - 6 0.000409 - 7 0.00573 - 15 0.00777 - 19 0.0151 - 21 0.00164 - 26 0.000818 - 28 0.000409 - 29 0.0139 - 30 0.000409 - 33 0.0278 - 40 0.00409 - 42 0.00327 - 43 0.00368 - 45 0.000409 - 46 0.00859 - 47 0.88 - - 40 2157 5 0 - 2 0.000464 - 42 0.00278 - 43 0.00278 - 46 0.00881 - 47 0.985 - - 41 201 13 0 - 0 0.00995 - 2 0.169 - 4 0.0249 - 6 0.00498 - 7 0.0149 - 15 0.0796 - 19 0.179 - 21 0.00498 - 29 0.169 - 30 0.00498 - 33 0.328 - 45 0.00498 - 46 0.00498 - - 42 4 3 0 - 28 0.25 - 40 0.25 - 47 0.5 - - 48 12 2 0 - 2 0.667 - 7 0.333 - - 55 11 6 0 - 2 0.182 - 7 0.364 - 21 0.0909 - 26 0.0909 - 33 0.0909 - 42 0.182 - - 62 7 4 0 - 2 0.571 - 15 0.143 - 19 0.143 - 47 0.143 - - 69 33 10 0 - 0 0.0606 - 2 0.182 - 7 0.0909 - 15 0.0606 - 21 0.0606 - 26 0.0303 - 40 0.273 - 43 0.0909 - 46 0.0303 - 47 0.121 - - 47 95402 34 17 - 0 0.00953 - 2 0.0171 - 3 8.39e-05 - 4 0.000954 - 5 6.29e-05 - 7 0.0109 - 8 0.000419 - 12 0.00393 - 13 0.000241 - 14 0.000157 - 15 0.000618 - 19 0.00136 - 20 5.24e-05 - 21 0.00164 - 22 0.000105 - 26 0.00125 - 28 0.000136 - 29 0.00199 - 30 0.000293 - 31 0.000199 - 32 0.00066 - 33 0.00197 - 34 0.00021 - 35 2.1e-05 - 37 0.000514 - 39 2.1e-05 - 40 0.361 - 41 0.181 - 42 0.0191 - 43 0.00153 - 44 0.000566 - 45 0.000356 - 46 0.00162 - 47 0.38 - - 40 33670 2 0 - 43 0.000178 - 47 1 - - 41 47 15 0 - 0 0.0851 - 2 0.17 - 4 0.0213 - 7 0.0213 - 12 0.0213 - 13 0.0213 - 14 0.0426 - 15 0.0213 - 19 0.0851 - 20 0.0213 - 29 0.0638 - 33 0.149 - 45 0.0213 - 46 0.149 - 47 0.106 - - 42 78 4 0 - 19 0.0128 - 39 0.0128 - 41 0.0128 - 47 0.962 - - 43 119 1 0 - 47 1 - - 45 10 1 0 - 47 1 - - 46 2350 15 0 - 0 0.0017 - 2 0.00723 - 4 0.00213 - 7 0.00383 - 15 0.00766 - 19 0.014 - 21 0.0017 - 26 0.000851 - 29 0.0145 - 33 0.0277 - 42 0.000851 - 43 0.0017 - 45 0.000426 - 46 0.000426 - 47 0.915 - - 48 773 21 0 - 0 0.0103 - 2 0.0414 - 4 0.00517 - 7 0.19 - 12 0.00517 - 14 0.00129 - 15 0.00129 - 19 0.00259 - 21 0.00517 - 26 0.00129 - 30 0.00129 - 31 0.00129 - 32 0.00129 - 33 0.00129 - 37 0.00259 - 40 0.446 - 41 0.254 - 42 0.0207 - 43 0.00259 - 46 0.00129 - 47 0.00388 - - 49 56 9 0 - 0 0.0357 - 2 0.0357 - 7 0.125 - 15 0.0179 - 40 0.393 - 41 0.304 - 42 0.0536 - 46 0.0179 - 47 0.0179 - - 55 709 22 0 - 0 0.00846 - 2 0.0367 - 4 0.00282 - 7 0.0339 - 8 0.00282 - 12 0.00705 - 15 0.00282 - 21 0.00564 - 22 0.00141 - 26 0.00423 - 29 0.00282 - 30 0.00423 - 32 0.00423 - 33 0.00141 - 34 0.00564 - 37 0.00282 - 40 0.54 - 41 0.288 - 42 0.0339 - 43 0.00282 - 46 0.00423 - 47 0.00423 - - 57 217 12 0 - 0 0.00461 - 2 0.023 - 7 0.0184 - 12 0.00461 - 19 0.00461 - 21 0.0138 - 26 0.0138 - 40 0.479 - 41 0.392 - 42 0.0369 - 46 0.00461 - 47 0.00461 - - 58 11 4 0 - 8 0.0909 - 28 0.0909 - 40 0.545 - 41 0.273 - - 62 880 12 0 - 2 0.00227 - 7 0.00114 - 12 0.00114 - 19 0.00227 - 28 0.00114 - 29 0.00227 - 40 0.512 - 41 0.441 - 42 0.017 - 43 0.00341 - 46 0.00568 - 47 0.0102 - - 64 87 4 0 - 7 0.0115 - 40 0.747 - 41 0.23 - 43 0.0115 - - 65 4 4 0 - 40 0.25 - 41 0.25 - 46 0.25 - 47 0.25 - - 67 7 2 0 - 46 0.143 - 47 0.857 - - 68 12 6 0 - 2 0.0833 - 15 0.0833 - 19 0.0833 - 40 0.417 - 41 0.25 - 42 0.0833 - - 69 56363 34 0 - 0 0.0157 - 2 0.0273 - 3 0.000142 - 4 0.0014 - 5 0.000106 - 7 0.015 - 8 0.000656 - 12 0.00644 - 13 0.00039 - 14 0.000213 - 15 0.000621 - 19 0.00153 - 20 7.1e-05 - 21 0.0025 - 22 0.00016 - 26 0.00195 - 28 0.000195 - 29 0.00264 - 30 0.000426 - 31 0.000319 - 32 0.00105 - 33 0.00202 - 34 0.000284 - 35 3.55e-05 - 37 0.000798 - 39 1.77e-05 - 40 0.587 - 41 0.29 - 42 0.031 - 43 0.00227 - 44 0.000958 - 45 0.000568 - 46 0.00238 - 47 0.00405 - - 48 811 21 4 - 0 0.00986 - 2 0.0395 - 4 0.00493 - 7 0.211 - 12 0.00493 - 14 0.00123 - 15 0.00123 - 19 0.00247 - 21 0.00493 - 26 0.00123 - 30 0.00123 - 31 0.00123 - 32 0.00123 - 33 0.00123 - 37 0.00247 - 40 0.428 - 41 0.242 - 42 0.0197 - 43 0.00247 - 46 0.016 - 47 0.0037 - - 45 54 4 0 - 7 0.037 - 40 0.556 - 41 0.204 - 46 0.204 - - 47 350 14 0 - 2 0.0229 - 4 0.0114 - 7 0.354 - 14 0.00286 - 19 0.00286 - 21 0.00857 - 26 0.00286 - 30 0.00286 - 31 0.00286 - 32 0.00286 - 33 0.00286 - 40 0.291 - 41 0.28 - 42 0.0114 - - 49 8 2 0 - 40 0.125 - 41 0.875 - - 55 393 14 0 - 0 0.0204 - 2 0.0611 - 7 0.115 - 12 0.0102 - 15 0.00254 - 19 0.00254 - 21 0.00254 - 37 0.00509 - 40 0.532 - 41 0.201 - 42 0.0305 - 43 0.00509 - 46 0.00509 - 47 0.00763 - - 49 97 22 6 - 0 0.0309 - 2 0.0206 - 3 0.0103 - 4 0.0515 - 7 0.144 - 8 0.0206 - 12 0.0103 - 13 0.0103 - 14 0.0309 - 15 0.0206 - 19 0.0515 - 21 0.0206 - 26 0.0309 - 28 0.0103 - 33 0.0103 - 37 0.0103 - 40 0.237 - 41 0.216 - 42 0.0309 - 45 0.0103 - 46 0.0103 - 47 0.0103 - - 2 20 13 0 - 0 0.05 - 4 0.1 - 7 0.05 - 8 0.05 - 12 0.05 - 13 0.05 - 14 0.1 - 19 0.2 - 26 0.1 - 33 0.05 - 40 0.05 - 41 0.1 - 45 0.05 - - 41 20 11 0 - 3 0.05 - 4 0.15 - 8 0.05 - 14 0.05 - 15 0.05 - 19 0.05 - 21 0.1 - 28 0.05 - 40 0.2 - 41 0.1 - 42 0.15 - - 47 18 6 0 - 0 0.0556 - 7 0.222 - 40 0.222 - 41 0.389 - 46 0.0556 - 47 0.0556 - - 48 5 2 0 - 40 0.8 - 41 0.2 - - 55 31 7 0 - 0 0.0323 - 2 0.0645 - 7 0.29 - 15 0.0323 - 26 0.0323 - 40 0.258 - 41 0.29 - - 69 2 2 0 - 37 0.5 - 40 0.5 - - 51 13 2 0 - 40 0.846 - 41 0.154 - - 55 895 23 6 - 0 0.0067 - 2 0.0291 - 4 0.00223 - 7 0.15 - 8 0.00223 - 12 0.00559 - 15 0.00223 - 21 0.00559 - 22 0.00112 - 26 0.0101 - 29 0.00223 - 30 0.00335 - 32 0.00335 - 33 0.00112 - 34 0.00447 - 37 0.00223 - 40 0.482 - 41 0.237 - 42 0.0268 - 43 0.00223 - 45 0.00223 - 46 0.0156 - 47 0.00335 - - 45 72 4 0 - 40 0.556 - 41 0.278 - 42 0.0139 - 46 0.153 - - 47 526 22 0 - 0 0.0076 - 2 0.0209 - 4 0.0019 - 7 0.228 - 8 0.0019 - 12 0.0076 - 15 0.0038 - 21 0.0076 - 22 0.0019 - 26 0.0152 - 29 0.0038 - 30 0.0057 - 32 0.0038 - 33 0.0019 - 34 0.0076 - 37 0.0019 - 40 0.376 - 41 0.27 - 42 0.0228 - 43 0.0038 - 45 0.0038 - 46 0.0019 - - 48 18 6 0 - 2 0.0556 - 7 0.167 - 26 0.0556 - 40 0.389 - 41 0.278 - 47 0.0556 - - 49 11 3 0 - 7 0.273 - 40 0.0909 - 41 0.636 - - 55 195 14 0 - 0 0.00513 - 2 0.0718 - 4 0.00513 - 7 0.041 - 8 0.00513 - 12 0.00513 - 21 0.00513 - 32 0.00513 - 37 0.00513 - 40 0.631 - 41 0.159 - 42 0.0462 - 46 0.00513 - 47 0.0103 - - 69 59 4 0 - 0 0.0169 - 40 0.915 - 41 0.0508 - 42 0.0169 - - 57 259 12 4 - 0 0.00386 - 2 0.0193 - 7 0.0502 - 12 0.00386 - 19 0.00386 - 21 0.0116 - 26 0.0154 - 40 0.517 - 41 0.332 - 42 0.0347 - 46 0.00386 - 47 0.00386 - - 41 24 4 0 - 7 0.0417 - 40 0.833 - 41 0.0833 - 42 0.0417 - - 47 26 4 0 - 21 0.0385 - 26 0.0385 - 40 0.269 - 41 0.654 - - 48 24 6 0 - 2 0.0417 - 7 0.167 - 40 0.333 - 41 0.333 - 42 0.0833 - 47 0.0417 - - 69 30 5 0 - 0 0.0333 - 26 0.0333 - 40 0.7 - 41 0.2 - 42 0.0333 - - 58 100 11 4 - 2 0.43 - 7 0.08 - 8 0.02 - 19 0.01 - 21 0.01 - 26 0.01 - 28 0.01 - 40 0.14 - 41 0.1 - 42 0.04 - 45 0.15 - - 2 3 3 0 - 8 0.333 - 19 0.333 - 26 0.333 - - 46 9 4 0 - 40 0.222 - 41 0.556 - 42 0.111 - 45 0.111 - - 62 73 9 0 - 2 0.562 - 7 0.0274 - 8 0.0137 - 21 0.0137 - 28 0.0137 - 40 0.11 - 41 0.0411 - 42 0.0411 - 45 0.178 - - 69 11 4 0 - 7 0.545 - 40 0.273 - 41 0.0909 - 45 0.0909 - - 62 7159 19 11 - 2 0.0976 - 4 0.00014 - 7 0.00279 - 8 0.000419 - 12 0.00014 - 15 0.00014 - 19 0.000419 - 21 0.000419 - 28 0.00014 - 29 0.000279 - 37 0.000279 - 40 0.414 - 41 0.361 - 42 0.116 - 43 0.000419 - 44 0.00182 - 45 0.00014 - 46 0.00168 - 47 0.00126 - - 2 2599 15 0 - 2 0.0104 - 7 0.00577 - 8 0.000385 - 12 0.000385 - 19 0.00077 - 28 0.000385 - 29 0.00077 - 37 0.000385 - 40 0.809 - 41 0.155 - 42 0.0119 - 43 0.00077 - 44 0.000385 - 46 0.00154 - 47 0.00192 - - 7 43 4 0 - 2 0.0233 - 40 0.86 - 41 0.093 - 44 0.0233 - - 21 30 5 0 - 2 0.0333 - 40 0.767 - 41 0.133 - 42 0.0333 - 46 0.0333 - - 41 488 5 0 - 2 0.248 - 40 0.184 - 41 0.514 - 42 0.0492 - 46 0.0041 - - 42 697 6 0 - 2 0.00717 - 40 0.859 - 41 0.0689 - 42 0.0588 - 46 0.00143 - 47 0.0043 - - 44 12 3 0 - 2 0.167 - 41 0.5 - 42 0.333 - - 45 222 7 0 - 2 0.113 - 7 0.0045 - 40 0.189 - 41 0.568 - 42 0.104 - 46 0.018 - 47 0.0045 - - 47 2942 13 0 - 2 0.171 - 4 0.00034 - 7 0.00102 - 8 0.00068 - 15 0.00034 - 19 0.00034 - 21 0.00102 - 37 0.00034 - 40 0.00034 - 41 0.582 - 42 0.238 - 44 0.00374 - 45 0.00034 - - 48 36 3 0 - 7 0.0278 - 40 0.833 - 41 0.139 - - 49 36 4 0 - 2 0.0556 - 40 0.75 - 41 0.167 - 43 0.0278 - - 57 12 3 0 - 2 0.5 - 40 0.167 - 41 0.333 - - 64 106 7 1 - 2 0.00943 - 7 0.00943 - 21 0.00943 - 40 0.755 - 41 0.198 - 42 0.00943 - 43 0.00943 - - 47 1 1 0 - 42 1 - - 66 32 3 0 - 40 0.781 - 41 0.125 - 42 0.0938 - - 67 9 3 0 - 40 0.222 - 46 0.111 - 47 0.667 - - 68 12 6 0 - 2 0.0833 - 15 0.0833 - 19 0.0833 - 40 0.417 - 41 0.25 - 42 0.0833 - - 69 90067 36 14 - 0 0.00981 - 2 0.0171 - 3 0.000111 - 4 0.000999 - 5 6.66e-05 - 7 0.00973 - 8 0.000411 - 9 1.11e-05 - 12 0.00403 - 13 0.000289 - 14 0.000133 - 15 0.000811 - 17 1.11e-05 - 19 0.000966 - 20 4.44e-05 - 21 0.0016 - 22 9.99e-05 - 26 0.00123 - 28 0.000122 - 29 0.00165 - 30 0.000266 - 31 0.000211 - 32 0.000655 - 33 0.00127 - 34 0.000189 - 35 2.22e-05 - 37 0.000522 - 39 1.11e-05 - 40 0.736 - 41 0.184 - 42 0.021 - 43 0.00147 - 44 0.000644 - 45 0.000366 - 46 0.00185 - 47 0.00253 - - 2 19 3 0 - 40 0.895 - 41 0.0526 - 44 0.0526 - - 4 32 4 0 - 7 0.0312 - 12 0.0312 - 40 0.844 - 41 0.0938 - - 21 122 8 0 - 0 0.0082 - 2 0.0082 - 7 0.0246 - 29 0.0164 - 40 0.631 - 41 0.27 - 42 0.0328 - 47 0.0082 - - 41 838 11 0 - 0 0.00119 - 2 0.00477 - 4 0.00119 - 15 0.0143 - 33 0.00119 - 37 0.00119 - 40 0.899 - 41 0.0513 - 42 0.0203 - 43 0.00239 - 47 0.00358 - - 43 28 3 0 - 0 0.0714 - 40 0.464 - 41 0.464 - - 45 334 7 0 - 2 0.00898 - 7 0.00299 - 40 0.557 - 41 0.38 - 42 0.018 - 46 0.0269 - 47 0.00599 - - 46 98 10 0 - 0 0.0102 - 2 0.0102 - 3 0.0102 - 4 0.0204 - 7 0.0102 - 15 0.255 - 40 0.531 - 41 0.122 - 42 0.0204 - 43 0.0102 - - 47 23686 34 0 - 0 0.0246 - 2 0.021 - 3 0.000253 - 4 0.00186 - 5 8.44e-05 - 7 0.0269 - 8 0.00118 - 12 0.0117 - 13 0.00076 - 14 0.000169 - 15 0.000844 - 17 4.22e-05 - 19 0.00101 - 20 4.22e-05 - 21 0.00422 - 22 0.000338 - 26 0.00355 - 28 0.000296 - 29 0.00469 - 30 0.000633 - 31 0.000633 - 32 0.00182 - 33 0.00338 - 34 0.000464 - 37 0.00148 - 39 4.22e-05 - 40 0.625 - 41 0.231 - 42 0.0221 - 43 0.00207 - 44 0.000929 - 45 0.000929 - 46 0.00312 - 47 0.00262 - - 49 3383 23 0 - 0 0.00532 - 2 0.00769 - 3 0.000296 - 4 0.000887 - 7 0.00236 - 9 0.000296 - 12 0.00236 - 13 0.000591 - 15 0.000591 - 19 0.000296 - 21 0.00118 - 26 0.000296 - 29 0.000887 - 30 0.000887 - 32 0.000887 - 33 0.000887 - 40 0.792 - 41 0.156 - 42 0.021 - 43 0.00118 - 44 0.000296 - 46 0.00148 - 47 0.00207 - - 55 60684 33 0 - 0 0.0046 - 2 0.0165 - 3 3.3e-05 - 4 0.000659 - 5 6.59e-05 - 7 0.00369 - 8 0.000148 - 12 0.00125 - 13 9.89e-05 - 14 0.000132 - 15 0.000214 - 19 0.00101 - 20 4.94e-05 - 21 0.000659 - 22 1.65e-05 - 26 0.000428 - 28 6.59e-05 - 29 0.000527 - 30 9.89e-05 - 31 6.59e-05 - 32 0.000214 - 33 0.000478 - 34 9.89e-05 - 35 3.3e-05 - 37 0.000181 - 40 0.774 - 41 0.168 - 42 0.0204 - 43 0.00125 - 44 0.00056 - 45 0.000165 - 46 0.00129 - 47 0.0025 - - 57 196 6 0 - 2 0.0153 - 29 0.0051 - 40 0.811 - 41 0.122 - 42 0.0408 - 45 0.0051 - - 58 207 4 0 - 2 0.00966 - 40 0.928 - 41 0.0338 - 42 0.029 - - 62 256 6 0 - 2 0.00781 - 15 0.00391 - 33 0.00391 - 40 0.793 - 41 0.148 - 42 0.043 - - 64 121 6 0 - 19 0.00826 - 40 0.785 - 41 0.132 - 42 0.0579 - 46 0.00826 - 47 0.00826 - -63 79666 1 0 - 47 1 - -64 76641 43 33 - 0 0.0391 - 1 9.13e-05 - 2 0.0169 - 3 0.00201 - 4 0.0542 - 5 0.0026 - 7 0.0151 - 8 0.011 - 9 0.000692 - 10 0.000665 - 11 1.3e-05 - 12 0.0139 - 13 0.0113 - 14 0.0129 - 15 0.0225 - 16 0.000209 - 17 0.000326 - 18 2.61e-05 - 19 0.0442 - 20 0.00497 - 21 0.00892 - 22 0.000248 - 23 1.3e-05 - 26 0.00343 - 28 0.000613 - 29 0.0176 - 30 0.00316 - 31 0.00274 - 32 0.00857 - 33 0.0137 - 34 0.000626 - 35 0.000535 - 36 5.22e-05 - 37 0.001 - 39 0.000183 - 40 0.488 - 41 0.175 - 42 0.0152 - 43 0.00151 - 44 0.000887 - 45 0.0024 - 46 0.00119 - 47 0.00198 - - 0 1 1 0 - 14 1 - - 2 337 19 7 - 0 0.00297 - 3 0.00297 - 4 0.0623 - 5 0.00297 - 7 0.623 - 8 0.00297 - 14 0.0119 - 15 0.00297 - 19 0.0089 - 20 0.00297 - 21 0.0415 - 22 0.00297 - 26 0.00297 - 34 0.0564 - 35 0.0712 - 36 0.0119 - 37 0.0742 - 41 0.0089 - 45 0.00593 - - 7 2 1 0 - 21 1 - - 41 107 11 0 - 4 0.0467 - 7 0.729 - 14 0.00935 - 19 0.00935 - 21 0.028 - 22 0.00935 - 34 0.0654 - 35 0.0374 - 37 0.0374 - 41 0.00935 - 45 0.0187 - - 42 9 4 0 - 7 0.444 - 34 0.111 - 37 0.333 - 41 0.111 - - 46 8 2 0 - 7 0.875 - 14 0.125 - - 47 10 7 0 - 4 0.2 - 5 0.1 - 8 0.1 - 14 0.2 - 19 0.2 - 20 0.1 - 26 0.1 - - 62 6 2 0 - 15 0.167 - 21 0.833 - - 64 194 10 0 - 0 0.00515 - 3 0.00515 - 4 0.0722 - 7 0.619 - 21 0.0206 - 34 0.0567 - 35 0.103 - 36 0.0206 - 37 0.0928 - 41 0.00515 - - 4 202 13 0 - 3 0.0149 - 7 0.0297 - 8 0.153 - 10 0.0149 - 13 0.411 - 15 0.158 - 20 0.173 - 21 0.0099 - 31 0.00495 - 33 0.00495 - 41 0.00495 - 42 0.0099 - 44 0.0099 - - 7 10169 37 8 - 0 0.00521 - 1 0.000492 - 2 0.00059 - 3 0.0103 - 4 0.305 - 5 0.0145 - 7 0.0308 - 8 0.061 - 9 0.00403 - 10 0.00334 - 11 9.83e-05 - 12 9.83e-05 - 13 0.0558 - 14 0.0677 - 15 0.116 - 16 0.00108 - 17 0.00187 - 19 0.217 - 20 0.0234 - 21 0.0175 - 22 0.000885 - 26 0.00413 - 28 0.000983 - 29 9.83e-05 - 30 0.0177 - 31 0.0146 - 32 0.000295 - 33 0.000492 - 34 0.000197 - 35 0.000787 - 37 0.00256 - 39 0.000787 - 41 0.006 - 42 0.000197 - 43 0.000197 - 44 0.000787 - 45 0.0137 - - 7 48 11 0 - 4 0.25 - 5 0.0208 - 10 0.0208 - 13 0.0625 - 14 0.0625 - 15 0.0208 - 19 0.458 - 20 0.0208 - 26 0.0417 - 30 0.0208 - 42 0.0208 - - 21 246 16 0 - 4 0.341 - 5 0.0163 - 7 0.0203 - 8 0.061 - 9 0.00407 - 13 0.061 - 14 0.0447 - 15 0.0813 - 19 0.285 - 20 0.0203 - 21 0.0163 - 26 0.00407 - 28 0.0244 - 30 0.0122 - 31 0.00407 - 45 0.00407 - - 35 5 2 0 - 4 0.8 - 13 0.2 - - 44 3 2 0 - 15 0.333 - 43 0.667 - - 47 9705 36 0 - 0 0.00546 - 1 0.000515 - 2 0.000618 - 3 0.0108 - 4 0.304 - 5 0.0145 - 7 0.0316 - 8 0.0613 - 9 0.00412 - 10 0.0034 - 11 0.000103 - 12 0.000103 - 13 0.0551 - 14 0.0687 - 15 0.117 - 16 0.00113 - 17 0.00196 - 19 0.214 - 20 0.0236 - 21 0.0177 - 22 0.000927 - 26 0.00402 - 28 0.000412 - 29 0.000103 - 30 0.018 - 31 0.015 - 32 0.000309 - 33 0.000515 - 34 0.000206 - 35 0.000824 - 37 0.00268 - 39 0.000824 - 41 0.00629 - 42 0.000103 - 44 0.000721 - 45 0.0141 - - 49 106 13 0 - 4 0.311 - 5 0.00943 - 7 0.00943 - 8 0.066 - 13 0.0943 - 14 0.066 - 15 0.123 - 19 0.255 - 20 0.0189 - 21 0.0189 - 30 0.00943 - 31 0.00943 - 44 0.00943 - - 55 47 6 0 - 4 0.383 - 8 0.0213 - 13 0.0638 - 15 0.298 - 19 0.213 - 20 0.0213 - - 57 5 3 0 - 4 0.4 - 8 0.4 - 45 0.2 - - 12 1 1 0 - 9 1 - - 13 52 10 2 - 4 0.0385 - 5 0.0192 - 7 0.0385 - 13 0.0192 - 14 0.0192 - 15 0.0192 - 19 0.0385 - 26 0.75 - 30 0.0385 - 41 0.0192 - - 7 45 5 0 - 4 0.0444 - 5 0.0222 - 14 0.0222 - 19 0.0444 - 26 0.867 - - 47 7 5 0 - 7 0.286 - 13 0.143 - 15 0.143 - 30 0.286 - 41 0.143 - - 15 14 3 0 - 4 0.0714 - 15 0.857 - 19 0.0714 - - 21 134 22 5 - 0 0.0224 - 3 0.0149 - 4 0.239 - 5 0.00746 - 7 0.0448 - 8 0.0896 - 9 0.0224 - 10 0.00746 - 13 0.0299 - 14 0.00746 - 15 0.0373 - 19 0.134 - 20 0.0224 - 21 0.112 - 26 0.0149 - 28 0.00746 - 30 0.0149 - 31 0.0821 - 40 0.0224 - 41 0.0373 - 44 0.0149 - 45 0.0149 - - 2 7 4 0 - 19 0.143 - 40 0.429 - 41 0.286 - 45 0.143 - - 7 7 5 0 - 4 0.143 - 7 0.143 - 8 0.143 - 19 0.429 - 26 0.143 - - 21 6 4 0 - 4 0.167 - 15 0.5 - 26 0.167 - 44 0.167 - - 37 1 1 0 - 28 1 - - 47 107 19 0 - 0 0.028 - 3 0.0187 - 4 0.252 - 5 0.00935 - 7 0.0374 - 8 0.103 - 9 0.028 - 10 0.00935 - 13 0.0374 - 14 0.00935 - 15 0.0187 - 19 0.121 - 20 0.028 - 21 0.14 - 30 0.0187 - 31 0.0935 - 41 0.028 - 44 0.00935 - 45 0.00935 - - 26 2 1 0 - 4 1 - - 28 1 1 0 - 26 1 - - 34 10 8 0 - 4 0.1 - 5 0.1 - 8 0.1 - 10 0.1 - 14 0.1 - 15 0.1 - 20 0.1 - 21 0.3 - - 37 1 1 0 - 21 1 - - 40 24 3 0 - 42 0.0417 - 46 0.292 - 47 0.667 - - 41 246 21 8 - 0 0.0122 - 2 0.423 - 3 0.00407 - 4 0.0203 - 7 0.301 - 8 0.0163 - 13 0.00813 - 15 0.00407 - 19 0.0122 - 20 0.00407 - 21 0.0569 - 26 0.00407 - 29 0.00407 - 30 0.0366 - 31 0.0122 - 33 0.00407 - 34 0.0163 - 35 0.00813 - 37 0.0203 - 45 0.00813 - 46 0.0244 - - 7 49 10 0 - 4 0.0204 - 7 0.673 - 8 0.0204 - 20 0.0204 - 21 0.0204 - 26 0.0204 - 30 0.102 - 31 0.0612 - 37 0.0204 - 45 0.0408 - - 49 2 2 0 - 34 0.5 - 37 0.5 - - 55 1 1 0 - 0 1 - - 57 2 1 0 - 19 1 - - 62 7 5 0 - 4 0.143 - 13 0.286 - 19 0.143 - 21 0.286 - 29 0.143 - - 64 136 10 0 - 0 0.0147 - 2 0.765 - 4 0.00735 - 7 0.0809 - 21 0.0221 - 30 0.00735 - 34 0.0221 - 35 0.0147 - 37 0.0221 - 46 0.0441 - - 71 11 5 0 - 4 0.0909 - 7 0.273 - 8 0.273 - 21 0.273 - 30 0.0909 - - 72 36 6 0 - 3 0.0278 - 7 0.75 - 15 0.0278 - 21 0.111 - 30 0.0556 - 33 0.0278 - - 42 22 7 1 - 1 0.0455 - 2 0.409 - 7 0.136 - 21 0.0455 - 37 0.227 - 45 0.0455 - 47 0.0909 - - 62 2 1 0 - 47 1 - - 43 4 4 0 - 4 0.25 - 9 0.25 - 12 0.25 - 29 0.25 - - 44 1 1 0 - 26 1 - - 45 112 19 3 - 0 0.0179 - 1 0.00893 - 3 0.0179 - 4 0.259 - 5 0.0536 - 7 0.0804 - 8 0.0536 - 10 0.0179 - 13 0.0536 - 14 0.0625 - 15 0.0179 - 17 0.00893 - 19 0.259 - 20 0.0268 - 21 0.0179 - 31 0.00893 - 33 0.00893 - 34 0.00893 - 37 0.0179 - - 41 2 2 0 - 15 0.5 - 31 0.5 - - 58 2 2 0 - 10 0.5 - 37 0.5 - - 72 2 2 0 - 0 0.5 - 33 0.5 - - 46 17 5 3 - 2 0.412 - 34 0.0588 - 42 0.0588 - 44 0.0588 - 47 0.412 - - 40 7 1 0 - 47 1 - - 41 6 2 0 - 2 0.833 - 34 0.167 - - 62 2 2 0 - 42 0.5 - 44 0.5 - - 47 27924 33 12 - 0 0.0193 - 2 0.0173 - 4 0.00147 - 5 0.000215 - 7 0.00806 - 8 0.000143 - 12 0.00623 - 13 0.00043 - 14 0.000215 - 15 0.00043 - 19 0.0024 - 20 0.000179 - 21 0.00208 - 22 0.000107 - 26 0.00161 - 28 0.000322 - 29 0.00326 - 30 0.00043 - 31 0.000215 - 32 0.00165 - 33 0.00154 - 34 0.000322 - 35 7.16e-05 - 37 0.000251 - 39 3.58e-05 - 40 0.669 - 41 0.235 - 42 0.0204 - 43 0.00201 - 44 0.000967 - 45 0.000466 - 46 0.00133 - 47 0.00272 - - 40 17 2 0 - 42 0.0588 - 47 0.941 - - 41 9 6 0 - 0 0.222 - 4 0.111 - 13 0.222 - 19 0.111 - 21 0.222 - 29 0.111 - - 42 2 1 0 - 47 1 - - 45 1 1 0 - 19 1 - - 46 9 3 0 - 42 0.111 - 44 0.111 - 47 0.778 - - 51 89 9 0 - 2 0.0112 - 4 0.0112 - 7 0.0112 - 26 0.0225 - 40 0.236 - 41 0.652 - 42 0.0337 - 46 0.0112 - 47 0.0112 - - 62 27364 33 0 - 0 0.0196 - 2 0.0175 - 4 0.00139 - 5 0.000219 - 7 0.00819 - 8 0.000146 - 12 0.00636 - 13 0.000365 - 14 0.000219 - 15 0.000439 - 19 0.00238 - 20 0.000183 - 21 0.00205 - 22 0.00011 - 26 0.00157 - 28 0.000329 - 29 0.00329 - 30 0.000439 - 31 0.000219 - 32 0.00168 - 33 0.00157 - 34 0.000292 - 35 7.31e-05 - 37 0.000256 - 39 3.65e-05 - 40 0.669 - 41 0.236 - 42 0.0203 - 43 0.00201 - 44 0.000914 - 45 0.000475 - 46 0.00132 - 47 0.00175 - - 64 335 5 0 - 40 0.887 - 41 0.0925 - 42 0.0149 - 43 0.00299 - 44 0.00299 - - 65 1 1 0 - 47 1 - - 66 76 6 0 - 2 0.0263 - 4 0.0132 - 34 0.0132 - 40 0.697 - 41 0.237 - 42 0.0132 - - 67 1 1 0 - 47 1 - - 72 3 2 0 - 40 0.333 - 42 0.667 - - 49 5 3 0 - 7 0.4 - 33 0.2 - 41 0.4 - - 50 2 2 0 - 0 0.5 - 7 0.5 - - 51 89 9 1 - 2 0.0112 - 4 0.0112 - 7 0.0112 - 26 0.0225 - 40 0.236 - 41 0.652 - 42 0.0337 - 46 0.0112 - 47 0.0112 - - 21 4 3 0 - 26 0.25 - 41 0.5 - 46 0.25 - - 58 20 13 2 - 0 0.1 - 2 0.05 - 4 0.15 - 7 0.05 - 15 0.1 - 19 0.1 - 20 0.05 - 32 0.05 - 33 0.05 - 35 0.05 - 40 0.05 - 41 0.1 - 45 0.1 - - 2 2 2 0 - 7 0.5 - 35 0.5 - - 72 5 4 0 - 0 0.4 - 4 0.2 - 15 0.2 - 33 0.2 - - 62 27403 33 15 - 0 0.0196 - 2 0.0177 - 4 0.00139 - 5 0.000219 - 7 0.00821 - 8 0.000146 - 12 0.00635 - 13 0.000365 - 14 0.000219 - 15 0.000438 - 19 0.00237 - 20 0.000182 - 21 0.00204 - 22 0.000109 - 26 0.00157 - 28 0.000328 - 29 0.00328 - 30 0.000438 - 31 0.000219 - 32 0.00168 - 33 0.00157 - 34 0.000292 - 35 7.3e-05 - 37 0.000255 - 39 3.65e-05 - 40 0.668 - 41 0.236 - 42 0.0204 - 43 0.00201 - 44 0.000912 - 45 0.000511 - 46 0.00139 - 47 0.00175 - - 4 201 8 0 - 0 0.00995 - 2 0.0498 - 7 0.00498 - 29 0.00498 - 30 0.00498 - 40 0.796 - 41 0.124 - 42 0.00498 - - 7 9838 29 0 - 0 0.00498 - 2 0.0176 - 4 0.00203 - 5 0.000305 - 7 0.00407 - 8 0.000102 - 12 0.00173 - 13 0.000203 - 14 0.000407 - 15 0.000813 - 19 0.00335 - 20 0.000203 - 21 0.00102 - 26 0.000712 - 28 0.000305 - 29 0.00122 - 32 0.000407 - 33 0.00152 - 34 0.000102 - 37 0.000203 - 39 0.000102 - 40 0.665 - 41 0.273 - 42 0.0147 - 43 0.00193 - 44 0.00061 - 45 0.000305 - 46 0.000813 - 47 0.00173 - - 13 50 6 0 - 2 0.02 - 7 0.02 - 40 0.68 - 41 0.22 - 42 0.04 - 46 0.02 - - 15 14 3 0 - 0 0.0714 - 33 0.0714 - 41 0.857 - - 21 118 6 0 - 2 0.00847 - 7 0.0169 - 40 0.525 - 41 0.432 - 42 0.00847 - 47 0.00847 - - 41 95 3 0 - 2 0.0105 - 40 0.905 - 41 0.0842 - - 45 132 6 0 - 35 0.00758 - 40 0.788 - 41 0.136 - 42 0.0303 - 46 0.0152 - 47 0.0227 - - 47 7896 30 0 - 0 0.0215 - 2 0.0193 - 4 0.000887 - 5 0.000127 - 7 0.0146 - 8 0.000253 - 12 0.0057 - 13 0.00038 - 15 0.000253 - 19 0.00127 - 21 0.00177 - 22 0.00038 - 26 0.00203 - 28 0.000253 - 29 0.0019 - 30 0.00076 - 31 0.000127 - 32 0.000633 - 33 0.00127 - 34 0.00038 - 35 0.000127 - 37 0.000633 - 40 0.769 - 41 0.135 - 42 0.0168 - 43 0.000633 - 44 0.00076 - 45 0.000253 - 46 0.00139 - 47 0.0019 - - 58 12 4 0 - 19 0.0833 - 40 0.667 - 41 0.167 - 43 0.0833 - - 68 2 2 0 - 19 0.5 - 46 0.5 - - 70 36 6 0 - 0 0.0278 - 12 0.0278 - 40 0.556 - 41 0.333 - 42 0.0278 - 44 0.0278 - - 71 1931 24 0 - 0 0.0109 - 2 0.0166 - 4 0.00311 - 5 0.000518 - 7 0.0088 - 12 0.00414 - 13 0.00104 - 14 0.00104 - 15 0.000518 - 19 0.00984 - 20 0.00104 - 21 0.00104 - 29 0.000518 - 31 0.000518 - 32 0.00104 - 34 0.000518 - 40 0.572 - 41 0.328 - 42 0.029 - 43 0.00363 - 44 0.00155 - 45 0.000518 - 46 0.00311 - 47 0.00104 - - 72 6697 28 0 - 0 0.0426 - 2 0.0166 - 4 0.000597 - 5 0.000149 - 7 0.00732 - 8 0.000149 - 12 0.0148 - 13 0.000448 - 15 0.000149 - 19 0.000149 - 20 0.000149 - 21 0.00433 - 26 0.00284 - 28 0.000597 - 29 0.00881 - 30 0.000747 - 31 0.000597 - 32 0.00523 - 33 0.00254 - 34 0.000448 - 40 0.579 - 41 0.274 - 42 0.03 - 43 0.00314 - 44 0.00119 - 45 0.00119 - 46 0.00134 - 47 0.00134 - - 73 320 12 0 - 0 0.025 - 2 0.0125 - 12 0.0125 - 21 0.00313 - 26 0.00313 - 29 0.00625 - 40 0.669 - 41 0.216 - 42 0.0406 - 43 0.00625 - 44 0.00313 - 47 0.00313 - - 74 14 2 0 - 4 0.0714 - 41 0.929 - - 64 690 9 3 - 2 0.281 - 7 0.00145 - 35 0.00145 - 40 0.432 - 41 0.243 - 42 0.0348 - 43 0.00145 - 44 0.00145 - 46 0.0029 - - 2 306 6 0 - 7 0.00327 - 40 0.892 - 41 0.0882 - 42 0.0098 - 43 0.00327 - 44 0.00327 - - 42 7 2 0 - 40 0.429 - 42 0.571 - - 47 337 5 0 - 2 0.561 - 35 0.00297 - 41 0.38 - 42 0.0504 - 46 0.00593 - - 65 1 1 0 - 47 1 - - 66 76 6 0 - 2 0.0263 - 4 0.0132 - 34 0.0132 - 40 0.697 - 41 0.237 - 42 0.0132 - - 67 2 2 0 - 40 0.5 - 47 0.5 - - 70 36 7 0 - 4 0.417 - 9 0.0278 - 14 0.0278 - 15 0.0278 - 19 0.444 - 20 0.0278 - 26 0.0278 - - 71 1951 27 2 - 0 0.000513 - 3 0.00718 - 4 0.281 - 5 0.0118 - 7 0.00923 - 8 0.0492 - 9 0.00154 - 10 0.00205 - 13 0.063 - 14 0.0866 - 15 0.121 - 16 0.00154 - 17 0.00205 - 19 0.255 - 20 0.0297 - 21 0.0128 - 26 0.0308 - 28 0.000513 - 29 0.00103 - 30 0.0118 - 31 0.00923 - 34 0.000513 - 35 0.000513 - 39 0.000513 - 40 0.000513 - 41 0.00871 - 45 0.00154 - - 2 1 1 0 - 28 1 - - 21 5 4 0 - 4 0.2 - 8 0.2 - 19 0.4 - 31 0.2 - - 72 6756 35 3 - 0 0.274 - 2 0.000296 - 3 0.00074 - 4 0.0333 - 5 0.000148 - 7 0.00873 - 8 0.00784 - 9 0.000444 - 10 0.000888 - 12 0.106 - 13 0.00562 - 14 0.00977 - 15 0.0255 - 16 0.000148 - 17 0.000148 - 18 0.000296 - 19 0.0598 - 20 0.0037 - 21 0.0465 - 22 0.000444 - 23 0.000148 - 26 0.00296 - 28 0.00252 - 29 0.172 - 30 0.000296 - 31 0.00237 - 32 0.083 - 33 0.141 - 34 0.000296 - 40 0.000148 - 41 0.00918 - 42 0.000296 - 43 0.000296 - 44 0.000296 - 45 0.000888 - - 44 2 1 0 - 43 1 - - 49 7 4 0 - 0 0.143 - 4 0.143 - 15 0.143 - 19 0.571 - - 60 3 2 0 - 4 0.667 - 8 0.333 - - 73 321 15 0 - 0 0.00623 - 3 0.0654 - 4 0.249 - 5 0.0187 - 8 0.0312 - 13 0.0623 - 14 0.112 - 15 0.159 - 16 0.00312 - 19 0.249 - 20 0.0125 - 21 0.00312 - 26 0.0156 - 39 0.00935 - 41 0.00312 - -65 580 13 7 - 2 0.00862 - 4 0.0069 - 19 0.00345 - 29 0.0069 - 30 0.00345 - 33 0.00345 - 37 0.00172 - 40 0.372 - 41 0.0069 - 42 0.0138 - 43 0.00172 - 46 0.0914 - 47 0.479 - - 2 1 1 0 - 37 1 - - 40 158 6 1 - 4 0.00633 - 41 0.00633 - 42 0.00633 - 43 0.00633 - 46 0.215 - 47 0.759 - - 72 1 1 0 - 42 1 - - 46 19 5 0 - 19 0.0526 - 29 0.105 - 33 0.0526 - 46 0.0526 - 47 0.737 - - 47 198 11 3 - 2 0.0101 - 4 0.0101 - 19 0.00505 - 29 0.0101 - 30 0.00505 - 33 0.00505 - 40 0.146 - 41 0.0101 - 42 0.0101 - 46 0.0859 - 47 0.702 - - 40 139 5 0 - 4 0.00719 - 41 0.00719 - 42 0.00719 - 46 0.115 - 47 0.863 - - 46 18 4 0 - 19 0.0556 - 29 0.111 - 33 0.0556 - 47 0.778 - - 67 32 7 0 - 2 0.0625 - 4 0.0312 - 30 0.0312 - 40 0.781 - 41 0.0312 - 42 0.0312 - 46 0.0312 - - 62 6 2 0 - 40 0.833 - 42 0.167 - - 65 2 2 0 - 2 0.5 - 40 0.5 - - 67 184 7 0 - 2 0.0109 - 4 0.00543 - 30 0.00543 - 40 0.946 - 41 0.00543 - 42 0.0217 - 46 0.00543 - -66 8140 31 21 - 0 0.00123 - 2 0.00147 - 3 0.00909 - 4 0.0339 - 5 0.000246 - 7 0.00823 - 8 0.0043 - 9 0.000246 - 13 0.00799 - 14 0.00381 - 15 0.177 - 16 0.000123 - 17 0.000123 - 19 0.00332 - 20 0.00209 - 21 0.00209 - 26 0.00135 - 30 0.00455 - 31 0.000369 - 34 0.000246 - 35 0.000369 - 37 0.000614 - 39 0.000123 - 40 0.239 - 41 0.0378 - 42 0.0108 - 43 0.000123 - 44 0.000123 - 45 0.00639 - 46 0.00541 - 47 0.438 - - 0 38 10 0 - 4 0.263 - 8 0.0789 - 13 0.0789 - 14 0.0526 - 15 0.316 - 17 0.0263 - 19 0.0789 - 20 0.0526 - 21 0.0263 - 31 0.0263 - - 2 4 4 0 - 0 0.25 - 20 0.25 - 21 0.25 - 30 0.25 - - 12 3 3 0 - 4 0.333 - 19 0.333 - 20 0.333 - - 28 1 1 0 - 3 1 - - 29 3 3 0 - 4 0.333 - 13 0.333 - 42 0.333 - - 32 1 1 0 - 13 1 - - 33 3 3 0 - 4 0.333 - 13 0.333 - 15 0.333 - - 40 1764 4 2 - 43 0.000567 - 45 0.0034 - 46 0.0227 - 47 0.973 - - 55 1602 4 0 - 43 0.000624 - 45 0.00375 - 46 0.00936 - 47 0.986 - - 62 82 2 0 - 46 0.293 - 47 0.707 - - 41 62 7 1 - 2 0.0484 - 4 0.0161 - 7 0.194 - 13 0.0161 - 21 0.0484 - 30 0.516 - 45 0.161 - - 64 2 1 0 - 21 1 - - 42 53 8 0 - 3 0.0189 - 4 0.0189 - 15 0.0189 - 21 0.0377 - 31 0.0189 - 40 0.0755 - 45 0.585 - 47 0.226 - - 45 45 9 2 - 4 0.178 - 5 0.0444 - 7 0.111 - 13 0.0444 - 19 0.378 - 35 0.0444 - 37 0.0444 - 44 0.0222 - 47 0.133 - - 40 6 1 0 - 47 1 - - 42 28 6 0 - 4 0.25 - 7 0.143 - 13 0.0357 - 19 0.464 - 35 0.0357 - 37 0.0714 - - 46 40 1 0 - 47 1 - - 47 2027 11 8 - 0 0.00148 - 2 0.00197 - 4 0.000493 - 19 0.000987 - 34 0.000493 - 40 0.0449 - 41 0.0607 - 42 0.00839 - 45 0.000493 - 46 0.000987 - 47 0.879 - - 40 1717 1 0 - 47 1 - - 46 40 1 0 - 47 1 - - 48 4 2 0 - 40 0.5 - 41 0.5 - - 55 174 9 0 - 0 0.0115 - 2 0.00575 - 19 0.0115 - 40 0.333 - 41 0.546 - 42 0.046 - 45 0.00575 - 46 0.0115 - 47 0.0287 - - 57 11 4 0 - 0 0.0909 - 40 0.182 - 41 0.364 - 42 0.364 - - 64 3 2 0 - 40 0.333 - 42 0.667 - - 66 1 1 0 - 42 1 - - 69 55 6 0 - 2 0.0545 - 4 0.0182 - 34 0.0182 - 40 0.491 - 41 0.382 - 42 0.0364 - - 48 6 3 0 - 7 0.167 - 40 0.5 - 41 0.333 - - 49 5 4 0 - 0 0.4 - 13 0.2 - 40 0.2 - 41 0.2 - - 55 1940 18 5 - 0 0.00103 - 2 0.000515 - 4 0.00258 - 7 0.017 - 8 0.00206 - 13 0.000515 - 14 0.000515 - 15 0.000515 - 19 0.00103 - 21 0.00206 - 26 0.00464 - 30 0.00103 - 40 0.856 - 41 0.0778 - 42 0.0278 - 45 0.00155 - 46 0.00103 - 47 0.00258 - - 0 38 7 0 - 2 0.0263 - 4 0.132 - 8 0.105 - 14 0.0263 - 21 0.0526 - 40 0.553 - 41 0.105 - - 12 3 3 0 - 21 0.333 - 40 0.333 - 41 0.333 - - 47 5 1 0 - 26 1 - - 55 8 3 0 - 7 0.25 - 40 0.625 - 41 0.125 - - 69 1873 14 0 - 0 0.00107 - 7 0.0166 - 13 0.000534 - 15 0.000534 - 19 0.00107 - 21 0.000534 - 26 0.0016 - 30 0.00107 - 40 0.868 - 41 0.0758 - 42 0.0278 - 45 0.0016 - 46 0.00107 - 47 0.00267 - - 57 52 9 3 - 0 0.0192 - 4 0.0385 - 7 0.154 - 8 0.0192 - 13 0.0192 - 21 0.0192 - 40 0.538 - 41 0.115 - 42 0.0769 - - 41 9 2 0 - 40 0.667 - 41 0.333 - - 55 34 8 0 - 0 0.0294 - 4 0.0588 - 7 0.235 - 8 0.0294 - 13 0.0294 - 21 0.0294 - 40 0.529 - 41 0.0588 - - 57 8 3 0 - 40 0.375 - 41 0.125 - 42 0.5 - - 62 85 2 0 - 40 0.976 - 42 0.0235 - - 64 28 3 1 - 40 0.786 - 41 0.0714 - 42 0.143 - - 47 3 2 0 - 41 0.667 - 42 0.333 - - 66 6 4 0 - 2 0.167 - 40 0.333 - 41 0.167 - 42 0.333 - - 69 1970 25 11 - 0 0.000508 - 2 0.00152 - 3 0.0365 - 4 0.124 - 7 0.00406 - 8 0.0137 - 9 0.00102 - 13 0.0269 - 14 0.0142 - 15 0.722 - 16 0.000508 - 19 0.00102 - 20 0.0066 - 21 0.00254 - 26 0.00102 - 30 0.00102 - 31 0.000508 - 34 0.000508 - 35 0.000508 - 37 0.00152 - 39 0.000508 - 40 0.0264 - 41 0.0107 - 42 0.00203 - 45 0.000508 - - 21 4 3 0 - 3 0.25 - 4 0.25 - 40 0.5 - - 41 231 7 0 - 3 0.0216 - 4 0.104 - 8 0.013 - 13 0.0346 - 14 0.0346 - 15 0.788 - 16 0.00433 - - 46 1168 6 0 - 3 0.0402 - 4 0.0753 - 8 0.00856 - 13 0.018 - 15 0.854 - 20 0.00342 - - 47 152 13 0 - 0 0.00658 - 3 0.0263 - 4 0.178 - 8 0.0197 - 13 0.0592 - 14 0.0197 - 15 0.605 - 19 0.0132 - 20 0.0395 - 21 0.00658 - 30 0.0132 - 31 0.00658 - 42 0.00658 - - 48 25 7 0 - 3 0.04 - 4 0.56 - 7 0.08 - 8 0.08 - 15 0.16 - 20 0.04 - 35 0.04 - - 49 54 9 0 - 3 0.037 - 4 0.463 - 8 0.037 - 9 0.0185 - 13 0.185 - 14 0.0741 - 15 0.0926 - 21 0.037 - 37 0.0556 - - 55 82 7 0 - 2 0.0366 - 4 0.0488 - 7 0.0122 - 34 0.0122 - 40 0.61 - 41 0.256 - 42 0.0244 - - 57 76 11 0 - 3 0.0526 - 4 0.382 - 7 0.0526 - 8 0.0132 - 13 0.0263 - 14 0.118 - 15 0.289 - 20 0.0132 - 21 0.0263 - 39 0.0132 - 45 0.0132 - - 58 6 4 0 - 4 0.333 - 7 0.167 - 15 0.167 - 26 0.333 - - 62 111 5 0 - 3 0.0541 - 4 0.045 - 8 0.00901 - 13 0.018 - 15 0.874 - - 69 54 9 0 - 3 0.0185 - 4 0.407 - 8 0.0926 - 9 0.0185 - 13 0.0185 - 14 0.0741 - 15 0.333 - 20 0.0185 - 42 0.0185 - -67 1431 33 20 - 0 0.0314 - 1 0.000699 - 2 0.00699 - 4 0.0664 - 5 0.0021 - 7 0.0175 - 8 0.0133 - 12 0.000699 - 13 0.0175 - 14 0.00559 - 15 0.0182 - 16 0.0014 - 17 0.000699 - 19 0.0783 - 20 0.000699 - 21 0.051 - 24 0.000699 - 26 0.0021 - 28 0.0783 - 29 0.0014 - 30 0.0168 - 31 0.00839 - 32 0.0028 - 34 0.000699 - 35 0.0028 - 37 0.0014 - 40 0.366 - 41 0.0175 - 42 0.00978 - 43 0.0028 - 45 0.0014 - 46 0.0266 - 47 0.148 - - 0 167 12 1 - 4 0.299 - 5 0.018 - 7 0.024 - 8 0.018 - 13 0.0599 - 14 0.018 - 15 0.108 - 16 0.00599 - 17 0.00599 - 19 0.311 - 21 0.108 - 30 0.024 - - 2 8 3 0 - 13 0.125 - 15 0.125 - 19 0.75 - - 2 5 4 0 - 0 0.4 - 12 0.2 - 13 0.2 - 35 0.2 - - 12 94 11 0 - 0 0.0426 - 4 0.202 - 8 0.0106 - 13 0.0319 - 14 0.0319 - 15 0.0532 - 19 0.447 - 20 0.0106 - 21 0.106 - 28 0.0532 - 45 0.0106 - - 14 2 1 0 - 4 1 - - 21 28 6 1 - 4 0.286 - 13 0.0714 - 15 0.0357 - 16 0.0357 - 19 0.536 - 30 0.0357 - - 55 2 2 0 - 15 0.5 - 30 0.5 - - 40 130 8 1 - 0 0.00769 - 4 0.00769 - 35 0.00769 - 40 0.0231 - 41 0.0154 - 42 0.0154 - 46 0.146 - 47 0.777 - - 40 3 2 0 - 40 0.667 - 47 0.333 - - 41 11 6 0 - 0 0.0909 - 2 0.273 - 4 0.0909 - 7 0.273 - 21 0.0909 - 28 0.182 - - 45 2 2 0 - 15 0.5 - 37 0.5 - - 46 8 4 0 - 7 0.125 - 28 0.125 - 43 0.125 - 47 0.625 - - 47 342 12 7 - 0 0.00292 - 2 0.00877 - 4 0.00292 - 7 0.00585 - 30 0.00292 - 35 0.00292 - 40 0.576 - 41 0.0175 - 42 0.0205 - 43 0.00585 - 46 0.0439 - 47 0.31 - - 40 120 7 0 - 0 0.00833 - 4 0.00833 - 35 0.00833 - 41 0.0167 - 42 0.0167 - 46 0.1 - 47 0.842 - - 46 7 3 0 - 7 0.143 - 43 0.143 - 47 0.714 - - 48 8 2 0 - 40 0.875 - 41 0.125 - - 55 14 3 0 - 40 0.786 - 42 0.0714 - 46 0.143 - - 57 8 2 0 - 7 0.125 - 40 0.875 - - 69 176 5 0 - 2 0.017 - 30 0.00568 - 40 0.943 - 41 0.017 - 42 0.017 - - 73 1 1 0 - 43 1 - - 48 23 5 0 - 7 0.13 - 21 0.0435 - 26 0.0435 - 40 0.739 - 41 0.0435 - - 49 29 11 0 - 0 0.138 - 4 0.069 - 7 0.0345 - 8 0.069 - 13 0.0345 - 21 0.0345 - 28 0.414 - 29 0.0345 - 30 0.0345 - 40 0.103 - 41 0.0345 - - 55 278 19 8 - 0 0.112 - 4 0.036 - 7 0.0324 - 8 0.0468 - 13 0.0288 - 14 0.00719 - 21 0.144 - 24 0.0036 - 26 0.00719 - 28 0.331 - 29 0.0036 - 30 0.0576 - 31 0.0432 - 32 0.0144 - 37 0.0036 - 40 0.0935 - 41 0.0216 - 42 0.0036 - 46 0.0108 - - 0 145 17 0 - 0 0.0621 - 4 0.0621 - 7 0.0414 - 8 0.0552 - 13 0.0414 - 21 0.193 - 24 0.0069 - 26 0.0138 - 28 0.248 - 29 0.0069 - 30 0.11 - 31 0.0828 - 32 0.0207 - 37 0.0069 - 40 0.0345 - 41 0.0069 - 42 0.0069 - - 12 75 6 0 - 0 0.253 - 21 0.107 - 28 0.587 - 32 0.0133 - 40 0.0133 - 41 0.0267 - - 14 2 1 0 - 13 1 - - 21 27 8 0 - 0 0.111 - 4 0.037 - 8 0.148 - 14 0.037 - 21 0.0741 - 28 0.444 - 40 0.111 - 41 0.037 - - 45 1 1 0 - 46 1 - - 49 4 3 0 - 21 0.25 - 40 0.5 - 41 0.25 - - 55 16 3 0 - 7 0.0625 - 40 0.812 - 46 0.125 - - 69 5 5 0 - 7 0.2 - 8 0.2 - 14 0.2 - 21 0.2 - 41 0.2 - - 57 11 3 0 - 7 0.0909 - 40 0.818 - 41 0.0909 - - 58 2 2 0 - 34 0.5 - 45 0.5 - - 62 6 3 0 - 4 0.167 - 40 0.667 - 41 0.167 - - 64 10 2 0 - 40 0.9 - 41 0.1 - - 67 13 7 1 - 0 0.0769 - 2 0.0769 - 7 0.0769 - 35 0.0769 - 40 0.385 - 41 0.231 - 46 0.0769 - - 47 5 3 0 - 0 0.2 - 2 0.2 - 41 0.6 - - 69 267 9 1 - 1 0.00375 - 2 0.0112 - 15 0.00375 - 19 0.0112 - 21 0.00749 - 30 0.00375 - 40 0.936 - 41 0.0112 - 42 0.0112 - - 47 56 8 0 - 1 0.0179 - 2 0.0179 - 15 0.0179 - 19 0.0357 - 21 0.0357 - 30 0.0179 - 40 0.821 - 42 0.0357 - - 73 1 1 0 - 43 1 - -68 1301 34 22 - 0 0.00692 - 2 0.00692 - 3 0.000769 - 4 0.0208 - 6 0.000769 - 7 0.0653 - 8 0.0507 - 9 0.00922 - 12 0.000769 - 13 0.119 - 14 0.175 - 15 0.00999 - 16 0.00154 - 19 0.00231 - 20 0.00154 - 21 0.0515 - 22 0.00384 - 23 0.000769 - 26 0.0146 - 29 0.00461 - 30 0.0123 - 31 0.0138 - 32 0.00461 - 34 0.000769 - 35 0.000769 - 36 0.000769 - 37 0.00461 - 40 0.271 - 41 0.0953 - 42 0.0238 - 44 0.000769 - 45 0.00231 - 46 0.00384 - 47 0.0184 - - 2 253 25 10 - 0 0.00395 - 3 0.00395 - 4 0.0553 - 6 0.00395 - 7 0.233 - 8 0.103 - 9 0.0474 - 12 0.00395 - 13 0.0356 - 15 0.00395 - 19 0.00395 - 20 0.00791 - 21 0.241 - 22 0.0198 - 23 0.00395 - 26 0.0474 - 29 0.00791 - 30 0.0593 - 31 0.0593 - 35 0.00395 - 36 0.00395 - 37 0.0237 - 41 0.00791 - 44 0.00395 - 45 0.0119 - - 15 2 1 0 - 8 1 - - 41 45 16 0 - 0 0.0222 - 3 0.0222 - 4 0.0667 - 6 0.0222 - 7 0.2 - 8 0.0889 - 9 0.0222 - 13 0.0444 - 21 0.2 - 22 0.0444 - 26 0.0667 - 29 0.0444 - 30 0.0222 - 31 0.0667 - 36 0.0222 - 37 0.0444 - - 46 3 2 0 - 8 0.333 - 45 0.667 - - 48 47 10 0 - 4 0.128 - 7 0.213 - 8 0.0426 - 12 0.0213 - 13 0.0426 - 21 0.234 - 30 0.128 - 31 0.149 - 41 0.0213 - 45 0.0213 - - 49 27 7 0 - 7 0.63 - 8 0.037 - 15 0.037 - 20 0.037 - 21 0.111 - 23 0.037 - 30 0.111 - - 55 47 14 0 - 4 0.0426 - 7 0.106 - 8 0.0851 - 9 0.213 - 13 0.0213 - 19 0.0213 - 21 0.298 - 22 0.0213 - 26 0.0638 - 30 0.0213 - 31 0.0426 - 35 0.0213 - 37 0.0213 - 41 0.0213 - - 57 51 12 0 - 4 0.0588 - 7 0.157 - 8 0.0196 - 9 0.0196 - 13 0.0588 - 21 0.373 - 22 0.0196 - 26 0.118 - 30 0.0784 - 31 0.0588 - 37 0.0196 - 44 0.0196 - - 62 7 2 0 - 7 0.857 - 21 0.143 - - 66 1 1 0 - 20 1 - - 69 15 5 0 - 7 0.0667 - 8 0.6 - 13 0.0667 - 21 0.2 - 22 0.0667 - - 8 111 5 0 - 8 0.117 - 13 0.306 - 14 0.559 - 16 0.00901 - 42 0.00901 - - 13 51 3 0 - 13 0.333 - 14 0.627 - 41 0.0392 - - 14 13 2 0 - 13 0.538 - 14 0.462 - - 15 18 4 0 - 8 0.167 - 13 0.222 - 14 0.389 - 15 0.222 - - 21 9 5 0 - 4 0.222 - 7 0.222 - 8 0.333 - 21 0.111 - 26 0.111 - - 30 4 1 0 - 13 1 - - 40 12 2 0 - 46 0.0833 - 47 0.917 - - 41 10 8 0 - 2 0.1 - 4 0.1 - 7 0.1 - 8 0.1 - 13 0.2 - 19 0.1 - 21 0.2 - 31 0.1 - - 42 2 2 0 - 34 0.5 - 47 0.5 - - 45 3 3 0 - 4 0.333 - 8 0.333 - 30 0.333 - - 46 1 1 0 - 46 1 - - 47 494 20 17 - 0 0.0081 - 2 0.0081 - 4 0.0081 - 7 0.0142 - 8 0.0344 - 13 0.148 - 14 0.231 - 15 0.0101 - 16 0.00202 - 19 0.00202 - 21 0.00202 - 26 0.00607 - 29 0.00405 - 31 0.00202 - 32 0.00607 - 40 0.344 - 41 0.113 - 42 0.0283 - 46 0.00405 - 47 0.0243 - - 7 1 1 0 - 4 1 - - 8 110 4 0 - 8 0.118 - 13 0.309 - 14 0.564 - 16 0.00909 - - 13 49 2 0 - 13 0.347 - 14 0.653 - - 14 13 2 0 - 13 0.538 - 14 0.462 - - 15 18 4 0 - 8 0.167 - 13 0.222 - 14 0.389 - 15 0.222 - - 30 4 1 0 - 13 1 - - 40 12 2 0 - 46 0.0833 - 47 0.917 - - 41 6 5 0 - 4 0.167 - 7 0.167 - 13 0.333 - 19 0.167 - 31 0.167 - - 46 1 1 0 - 46 1 - - 48 45 9 0 - 2 0.0444 - 7 0.0889 - 13 0.0444 - 14 0.0444 - 26 0.0222 - 32 0.0444 - 40 0.533 - 41 0.111 - 42 0.0667 - - 49 46 7 0 - 0 0.0435 - 2 0.0217 - 7 0.0435 - 26 0.0217 - 32 0.0217 - 40 0.63 - 41 0.217 - - 55 38 6 0 - 14 0.0526 - 15 0.0263 - 29 0.0263 - 40 0.605 - 41 0.211 - 42 0.0789 - - 57 69 7 0 - 0 0.0145 - 2 0.0145 - 21 0.0145 - 29 0.0145 - 40 0.652 - 41 0.232 - 42 0.058 - - 62 17 4 0 - 4 0.0588 - 40 0.647 - 41 0.235 - 42 0.0588 - - 64 21 3 0 - 40 0.714 - 41 0.238 - 42 0.0476 - - 69 34 6 0 - 0 0.0294 - 13 0.0588 - 26 0.0294 - 40 0.618 - 41 0.206 - 42 0.0588 - - 71 1 1 0 - 4 1 - - 48 50 10 0 - 2 0.04 - 4 0.02 - 7 0.1 - 13 0.04 - 14 0.04 - 26 0.02 - 32 0.04 - 40 0.48 - 41 0.16 - 42 0.06 - - 49 57 10 0 - 0 0.0351 - 2 0.0175 - 4 0.0175 - 7 0.14 - 8 0.0351 - 26 0.0175 - 31 0.0175 - 32 0.0175 - 40 0.509 - 41 0.193 - - 55 48 6 0 - 14 0.0417 - 15 0.0417 - 29 0.0208 - 40 0.583 - 41 0.229 - 42 0.0833 - - 57 70 7 0 - 0 0.0143 - 2 0.0143 - 21 0.0143 - 29 0.0143 - 40 0.643 - 41 0.243 - 42 0.0571 - - 58 3 2 0 - 7 0.667 - 14 0.333 - - 62 21 4 0 - 4 0.0476 - 40 0.714 - 41 0.19 - 42 0.0476 - - 64 23 4 0 - 7 0.0435 - 40 0.696 - 41 0.217 - 42 0.0435 - - 65 1 1 0 - 46 1 - - 69 35 7 0 - 0 0.0286 - 13 0.0571 - 15 0.0286 - 26 0.0286 - 40 0.6 - 41 0.2 - 42 0.0571 - -69 482293 48 46 - 0 0.0224 - 1 0.00057 - 2 0.0308 - 3 0.00808 - 4 0.0469 - 5 0.000257 - 6 4.15e-05 - 7 0.0864 - 8 0.0202 - 9 0.00219 - 10 0.000199 - 11 2.07e-06 - 12 0.00331 - 13 0.0122 - 14 0.00875 - 15 0.014 - 16 8.5e-05 - 17 0.000261 - 18 8.29e-06 - 19 0.00971 - 20 0.00668 - 21 0.0342 - 22 0.00161 - 23 0.000114 - 24 0.00542 - 25 4.15e-06 - 26 0.0285 - 27 5.81e-05 - 28 0.0407 - 29 0.00358 - 30 0.0133 - 31 0.0242 - 32 0.000977 - 33 0.0015 - 34 0.000506 - 35 0.000666 - 36 4.15e-06 - 37 0.00212 - 38 2.28e-05 - 39 0.00219 - 40 0.418 - 41 0.127 - 42 0.0138 - 43 0.00104 - 44 0.00067 - 45 0.00305 - 46 0.0022 - 47 0.00131 - - 0 33826 40 4 - 0 0.0458 - 1 0.00556 - 2 0.000887 - 3 0.0145 - 4 0.115 - 5 5.91e-05 - 7 0.0456 - 8 0.1 - 9 0.00955 - 10 0.000237 - 12 5.91e-05 - 13 0.021 - 14 0.00958 - 15 0.00695 - 16 0.000118 - 17 0.000562 - 19 0.00251 - 20 0.00364 - 21 0.192 - 22 0.00514 - 23 0.000828 - 24 0.000769 - 26 0.0203 - 27 2.96e-05 - 28 0.00304 - 29 0.00263 - 30 0.0892 - 31 0.274 - 33 8.87e-05 - 34 0.000148 - 35 0.00106 - 37 0.00154 - 39 0.00585 - 40 0.00411 - 41 0.00532 - 42 0.00101 - 43 0.000148 - 44 0.000384 - 45 0.0103 - 46 0.000148 - - 44 1 1 0 - 43 1 - - 45 6 4 0 - 4 0.167 - 8 0.167 - 21 0.5 - 26 0.167 - - 49 55 14 0 - 0 0.0364 - 3 0.0909 - 4 0.127 - 8 0.0727 - 9 0.0364 - 13 0.0545 - 14 0.0182 - 15 0.0182 - 21 0.164 - 26 0.0364 - 30 0.0909 - 31 0.218 - 41 0.0182 - 42 0.0182 - - 57 7 5 0 - 8 0.143 - 13 0.143 - 21 0.429 - 30 0.143 - 31 0.143 - - 1 555 21 1 - 0 0.027 - 3 0.00901 - 4 0.11 - 7 0.0126 - 8 0.0613 - 9 0.00721 - 13 0.0342 - 14 0.00901 - 15 0.00721 - 17 0.0018 - 19 0.0036 - 20 0.00541 - 21 0.0541 - 22 0.0018 - 26 0.0234 - 28 0.0018 - 29 0.0396 - 31 0.577 - 35 0.0018 - 40 0.0018 - 45 0.0108 - - 49 6 3 0 - 0 0.167 - 3 0.167 - 31 0.667 - - 2 3483 26 11 - 0 0.152 - 1 0.00258 - 3 0.00632 - 4 0.00718 - 7 0.0135 - 8 0.0126 - 9 0.00201 - 12 0.0617 - 13 0.00689 - 14 0.00402 - 15 0.00144 - 20 0.00172 - 21 0.0939 - 22 0.00172 - 23 0.000287 - 26 0.0284 - 28 0.159 - 29 0.194 - 30 0.0764 - 31 0.0485 - 32 0.0356 - 33 0.0744 - 39 0.00172 - 41 0.0089 - 42 0.000574 - 45 0.00488 - - 0 2 2 0 - 4 0.5 - 30 0.5 - - 28 1 1 0 - 13 1 - - 31 1 1 0 - 8 1 - - 41 654 21 0 - 0 0.19 - 1 0.00306 - 3 0.00765 - 4 0.00917 - 7 0.0291 - 8 0.00612 - 9 0.00153 - 12 0.0765 - 13 0.00306 - 14 0.00306 - 21 0.15 - 22 0.00459 - 26 0.0352 - 28 0.0703 - 29 0.226 - 30 0.052 - 31 0.0138 - 32 0.0291 - 33 0.081 - 41 0.00306 - 45 0.00612 - - 42 39 13 0 - 0 0.103 - 4 0.0256 - 7 0.0769 - 12 0.103 - 21 0.154 - 26 0.0256 - 28 0.128 - 29 0.154 - 30 0.0513 - 31 0.0513 - 32 0.0513 - 33 0.0256 - 41 0.0513 - - 46 38 9 0 - 0 0.132 - 12 0.0789 - 21 0.105 - 28 0.105 - 29 0.289 - 30 0.0263 - 31 0.0526 - 33 0.158 - 45 0.0526 - - 47 1 1 0 - 4 1 - - 55 4 4 0 - 8 0.25 - 21 0.25 - 29 0.25 - 30 0.25 - - 57 2 2 0 - 3 0.5 - 7 0.5 - - 58 5 5 0 - 12 0.2 - 21 0.2 - 28 0.2 - 30 0.2 - 45 0.2 - - 69 2736 26 0 - 0 0.144 - 1 0.00256 - 3 0.00585 - 4 0.00585 - 7 0.00877 - 8 0.0139 - 9 0.00219 - 12 0.0574 - 13 0.00768 - 14 0.00439 - 15 0.00183 - 20 0.00219 - 21 0.0793 - 22 0.0011 - 23 0.000365 - 26 0.0274 - 28 0.182 - 29 0.186 - 30 0.0826 - 31 0.057 - 32 0.0376 - 33 0.0727 - 39 0.00219 - 41 0.00987 - 42 0.000731 - 45 0.00365 - - 4 42 14 2 - 0 0.0238 - 4 0.0238 - 6 0.0238 - 7 0.143 - 8 0.0952 - 13 0.0238 - 16 0.0238 - 21 0.0952 - 28 0.0952 - 29 0.0952 - 30 0.0952 - 31 0.214 - 32 0.0238 - 45 0.0238 - - 0 34 12 0 - 0 0.0294 - 4 0.0294 - 6 0.0294 - 7 0.118 - 8 0.118 - 13 0.0294 - 16 0.0294 - 21 0.0882 - 29 0.118 - 30 0.118 - 31 0.265 - 45 0.0294 - - 12 4 2 0 - 28 0.75 - 32 0.25 - - 7 36 11 4 - 4 0.139 - 7 0.0556 - 8 0.0833 - 13 0.0278 - 14 0.0278 - 19 0.0278 - 20 0.0278 - 26 0.472 - 28 0.0556 - 37 0.0278 - 41 0.0556 - - 29 2 2 0 - 8 0.5 - 13 0.5 - - 30 3 3 0 - 4 0.333 - 7 0.333 - 41 0.333 - - 47 23 5 0 - 4 0.13 - 8 0.087 - 14 0.0435 - 19 0.0435 - 26 0.696 - - 69 3 2 0 - 28 0.667 - 37 0.333 - - 8 152 17 2 - 2 0.0329 - 3 0.0132 - 4 0.0329 - 7 0.395 - 8 0.0329 - 13 0.0658 - 14 0.0724 - 15 0.0197 - 20 0.0197 - 21 0.0395 - 22 0.00658 - 24 0.0132 - 26 0.0855 - 32 0.00658 - 40 0.125 - 41 0.0263 - 46 0.0132 - - 45 2 1 0 - 46 1 - - 49 22 7 0 - 4 0.0455 - 7 0.5 - 14 0.0455 - 21 0.0455 - 26 0.0909 - 40 0.227 - 41 0.0455 - - 12 9666 21 2 - 0 0.291 - 2 0.000724 - 4 0.000828 - 7 0.00197 - 12 0.000207 - 13 0.00031 - 21 0.171 - 22 0.00124 - 23 0.000207 - 26 0.00331 - 28 0.517 - 29 0.000621 - 31 0.000517 - 32 0.000103 - 40 0.00207 - 41 0.00331 - 42 0.000724 - 43 0.000103 - 44 0.000207 - 45 0.00455 - 46 0.000207 - - 41 4 1 0 - 0 1 - - 44 1 1 0 - 43 1 - - 13 297 26 2 - 0 0.0101 - 2 0.0168 - 3 0.0135 - 4 0.0976 - 7 0.256 - 8 0.0168 - 9 0.00337 - 12 0.0101 - 13 0.0404 - 14 0.111 - 15 0.0202 - 19 0.00673 - 20 0.0101 - 21 0.0438 - 22 0.00337 - 24 0.0707 - 26 0.0606 - 29 0.00337 - 30 0.0135 - 31 0.00337 - 39 0.00337 - 40 0.0707 - 41 0.0909 - 42 0.0135 - 45 0.00337 - 46 0.00673 - - 2 3 3 0 - 7 0.333 - 13 0.333 - 46 0.333 - - 45 1 1 0 - 46 1 - - 14 122 18 0 - 2 0.0164 - 4 0.082 - 7 0.197 - 8 0.0328 - 13 0.0246 - 14 0.082 - 15 0.0164 - 19 0.0082 - 21 0.0246 - 24 0.041 - 26 0.246 - 30 0.0246 - 31 0.0082 - 32 0.0082 - 34 0.0082 - 37 0.0164 - 40 0.0984 - 41 0.0656 - - 15 35 10 0 - 4 0.114 - 7 0.143 - 15 0.514 - 19 0.0286 - 21 0.0286 - 24 0.0286 - 26 0.0286 - 32 0.0286 - 42 0.0286 - 46 0.0571 - - 18 27 10 0 - 3 0.037 - 7 0.185 - 8 0.296 - 9 0.148 - 13 0.0741 - 14 0.0741 - 15 0.037 - 20 0.0741 - 37 0.037 - 45 0.037 - - 21 4005 31 12 - 0 0.146 - 1 0.0035 - 2 0.00025 - 3 0.0015 - 4 0.0442 - 7 0.0215 - 8 0.0662 - 9 0.00025 - 12 0.000749 - 13 0.0115 - 14 0.00175 - 15 0.00125 - 20 0.00225 - 21 0.0969 - 24 0.000499 - 26 0.00449 - 28 0.405 - 29 0.0135 - 30 0.04 - 31 0.118 - 32 0.000749 - 33 0.000749 - 35 0.000749 - 37 0.000749 - 40 0.00874 - 41 0.00524 - 42 0.00125 - 43 0.00025 - 45 0.002 - 46 0.00025 - 47 0.00025 - - 0 2915 27 0 - 0 0.0803 - 1 0.0048 - 2 0.000343 - 3 0.00172 - 4 0.0583 - 7 0.0274 - 8 0.0864 - 9 0.000343 - 13 0.0141 - 14 0.0024 - 15 0.00172 - 20 0.00309 - 21 0.113 - 24 0.000343 - 26 0.0024 - 28 0.352 - 29 0.0151 - 30 0.0528 - 31 0.162 - 32 0.000343 - 35 0.00103 - 37 0.00103 - 40 0.0103 - 41 0.00515 - 42 0.00137 - 43 0.000343 - 45 0.00172 - - 2 30 12 0 - 0 0.0333 - 4 0.0333 - 8 0.0333 - 12 0.1 - 21 0.0667 - 28 0.267 - 29 0.2 - 30 0.0667 - 31 0.0333 - 32 0.0333 - 33 0.0667 - 41 0.0667 - - 12 987 12 0 - 0 0.347 - 3 0.00101 - 4 0.00101 - 7 0.00304 - 21 0.0466 - 26 0.00101 - 28 0.588 - 40 0.00405 - 41 0.00405 - 42 0.00101 - 45 0.00304 - 46 0.00101 - - 21 3 2 0 - 8 0.667 - 28 0.333 - - 28 1 1 0 - 47 1 - - 32 7 6 0 - 4 0.143 - 13 0.286 - 26 0.143 - 29 0.143 - 30 0.143 - 40 0.143 - - 33 1 1 0 - 13 1 - - 41 20 9 0 - 0 0.05 - 7 0.05 - 13 0.05 - 21 0.15 - 26 0.2 - 28 0.25 - 29 0.15 - 30 0.05 - 33 0.05 - - 42 1 1 0 - 32 1 - - 45 4 2 0 - 8 0.5 - 21 0.5 - - 47 12 7 0 - 0 0.0833 - 4 0.167 - 7 0.0833 - 8 0.0833 - 13 0.0833 - 21 0.0833 - 26 0.417 - - 49 21 8 0 - 0 0.143 - 4 0.0952 - 7 0.0476 - 8 0.333 - 21 0.19 - 24 0.0476 - 30 0.0952 - 31 0.0476 - - 22 5 3 0 - 26 0.2 - 41 0.6 - 42 0.2 - - 25 2 1 0 - 6 1 - - 26 13048 19 0 - 0 0.112 - 1 7.66e-05 - 4 0.000307 - 7 0.000153 - 8 0.000613 - 13 0.0036 - 15 0.000153 - 21 0.0082 - 22 0.00107 - 28 0.867 - 29 0.00023 - 30 0.000153 - 31 0.000153 - 40 0.000996 - 41 0.000536 - 42 7.66e-05 - 44 0.000153 - 45 0.00429 - 46 0.000153 - - 28 20867 44 10 - 0 0.00192 - 1 0.000335 - 2 0.00441 - 3 0.0235 - 4 0.245 - 5 0.000671 - 6 9.58e-05 - 7 0.129 - 8 0.073 - 9 0.0104 - 10 0.000767 - 12 0.000575 - 13 0.0718 - 14 0.0604 - 15 0.0381 - 16 0.000575 - 17 0.00163 - 18 0.000192 - 19 0.0453 - 20 0.054 - 21 0.0454 - 22 0.00407 - 23 9.58e-05 - 24 0.0409 - 26 0.0441 - 27 0.000144 - 28 0.00565 - 30 0.0123 - 31 0.00398 - 33 4.79e-05 - 34 0.000863 - 35 0.0046 - 36 4.79e-05 - 37 0.00666 - 38 0.000144 - 39 0.0102 - 40 0.0288 - 41 0.0185 - 42 0.00259 - 43 0.000192 - 44 0.0012 - 45 0.00474 - 46 0.00264 - 47 0.000144 - - 2 142 19 0 - 3 0.0211 - 4 0.296 - 7 0.0493 - 8 0.0915 - 13 0.0704 - 14 0.12 - 15 0.0282 - 16 0.00704 - 19 0.0563 - 20 0.0423 - 21 0.0211 - 31 0.00704 - 35 0.00704 - 37 0.00704 - 40 0.0634 - 41 0.0704 - 42 0.0211 - 44 0.00704 - 45 0.0141 - - 13 3 2 0 - 4 0.667 - 46 0.333 - - 21 8 7 0 - 4 0.25 - 8 0.125 - 13 0.125 - 19 0.125 - 21 0.125 - 41 0.125 - 42 0.125 - - 42 5 3 0 - 4 0.6 - 14 0.2 - 24 0.2 - - 44 1 1 0 - 43 1 - - 45 34 10 0 - 2 0.0294 - 4 0.0882 - 7 0.0294 - 13 0.0294 - 17 0.0294 - 21 0.118 - 24 0.0294 - 35 0.0294 - 40 0.0294 - 46 0.588 - - 47 20444 44 0 - 0 0.00196 - 1 0.000342 - 2 0.0044 - 3 0.0238 - 4 0.243 - 5 0.000685 - 6 9.78e-05 - 7 0.131 - 8 0.0732 - 9 0.0105 - 10 0.000783 - 12 0.000587 - 13 0.072 - 14 0.0602 - 15 0.038 - 16 0.000538 - 17 0.00161 - 18 0.000196 - 19 0.0453 - 20 0.0539 - 21 0.0458 - 22 0.00406 - 23 9.78e-05 - 24 0.0412 - 26 0.0446 - 27 9.78e-05 - 28 0.00577 - 30 0.0125 - 31 0.00401 - 33 4.89e-05 - 34 0.00088 - 35 0.00445 - 36 4.89e-05 - 37 0.00675 - 38 0.000147 - 39 0.0103 - 40 0.0288 - 41 0.018 - 42 0.00235 - 43 0.000147 - 44 0.00113 - 45 0.0047 - 46 0.00157 - 47 0.000147 - - 49 216 24 0 - 2 0.00463 - 4 0.352 - 7 0.0694 - 8 0.0602 - 9 0.00463 - 13 0.0556 - 14 0.0509 - 15 0.0741 - 19 0.0463 - 20 0.088 - 21 0.0185 - 22 0.00926 - 24 0.0417 - 26 0.0417 - 27 0.00463 - 30 0.00926 - 35 0.0139 - 39 0.00463 - 40 0.00463 - 41 0.0185 - 42 0.00926 - 44 0.00463 - 45 0.00463 - 46 0.00926 - - 50 3 3 0 - 4 0.333 - 40 0.333 - 41 0.333 - - 57 3 3 0 - 3 0.333 - 4 0.333 - 8 0.333 - - 29 21672 44 8 - 0 0.00198 - 1 9.23e-05 - 2 0.0024 - 3 0.0832 - 4 0.195 - 5 0.00157 - 6 4.61e-05 - 7 0.138 - 8 0.0454 - 9 0.00655 - 10 0.00111 - 12 0.000554 - 13 0.0358 - 14 0.0287 - 15 0.0713 - 16 0.000138 - 17 0.000738 - 19 0.0812 - 20 0.0351 - 21 0.0391 - 22 0.00401 - 23 0.000231 - 24 0.0213 - 26 0.072 - 27 0.000138 - 28 0.00263 - 29 0.000277 - 30 0.00992 - 31 0.00291 - 32 4.61e-05 - 33 0.000231 - 34 0.000185 - 35 0.000738 - 37 0.00175 - 38 0.000138 - 39 0.0162 - 40 0.0611 - 41 0.0302 - 42 0.00392 - 43 0.000138 - 44 0.000138 - 45 0.00383 - 46 0.000461 - 47 4.61e-05 - - 2 33 13 0 - 3 0.0606 - 4 0.273 - 7 0.152 - 8 0.0909 - 13 0.0303 - 14 0.0303 - 19 0.0606 - 20 0.0606 - 24 0.0303 - 40 0.0303 - 41 0.121 - 42 0.0303 - 45 0.0303 - - 41 6 6 0 - 4 0.167 - 14 0.167 - 20 0.167 - 26 0.167 - 28 0.167 - 42 0.167 - - 44 1 1 0 - 43 1 - - 45 14 7 0 - 4 0.214 - 7 0.143 - 14 0.0714 - 19 0.0714 - 21 0.0714 - 27 0.0714 - 46 0.357 - - 47 21324 44 0 - 0 0.00202 - 1 9.38e-05 - 2 0.00234 - 3 0.0843 - 4 0.193 - 5 0.00159 - 6 4.69e-05 - 7 0.138 - 8 0.0455 - 9 0.00642 - 10 0.00113 - 12 0.000563 - 13 0.0356 - 14 0.0286 - 15 0.0715 - 16 0.000141 - 17 0.00075 - 19 0.0818 - 20 0.0347 - 21 0.039 - 22 0.00394 - 23 0.000234 - 24 0.0213 - 26 0.0718 - 27 9.38e-05 - 28 0.00263 - 29 0.000281 - 30 0.00994 - 31 0.00281 - 32 4.69e-05 - 33 0.000234 - 34 0.000141 - 35 0.000703 - 37 0.00169 - 38 0.000141 - 39 0.0164 - 40 0.0618 - 41 0.0303 - 42 0.00389 - 43 9.38e-05 - 44 0.000141 - 45 0.00385 - 46 0.000141 - 47 4.69e-05 - - 49 281 24 0 - 2 0.00712 - 3 0.0178 - 4 0.267 - 7 0.142 - 8 0.0356 - 9 0.0142 - 13 0.0463 - 14 0.0285 - 15 0.0783 - 19 0.0356 - 20 0.0498 - 21 0.0498 - 22 0.0107 - 24 0.0249 - 26 0.103 - 30 0.0107 - 31 0.0107 - 34 0.00356 - 35 0.00356 - 37 0.00712 - 39 0.00712 - 40 0.0214 - 41 0.0178 - 46 0.00712 - - 55 5 4 0 - 7 0.2 - 13 0.2 - 19 0.4 - 20 0.2 - - 57 7 5 0 - 4 0.429 - 9 0.143 - 14 0.143 - 19 0.143 - 20 0.143 - - 30 11209 39 4 - 0 0.00241 - 2 0.00419 - 3 0.0186 - 4 0.22 - 5 0.000357 - 7 0.173 - 8 0.078 - 9 0.0106 - 10 0.000892 - 12 0.000178 - 13 0.0741 - 14 0.0694 - 15 0.0376 - 16 0.000714 - 17 0.00143 - 19 0.0317 - 20 0.0388 - 21 0.0465 - 22 0.00607 - 23 8.92e-05 - 24 0.0352 - 26 0.0869 - 27 0.000268 - 28 0.00116 - 29 0.000357 - 30 0.00473 - 31 0.00419 - 32 8.92e-05 - 34 0.000268 - 35 0.00294 - 37 0.00205 - 39 0.00714 - 40 0.0168 - 41 0.0121 - 42 0.00223 - 43 0.000268 - 44 0.000446 - 45 0.00598 - 46 0.00223 - - 2 63 12 0 - 4 0.238 - 7 0.127 - 8 0.111 - 13 0.111 - 14 0.206 - 15 0.0317 - 19 0.0159 - 20 0.0635 - 21 0.0159 - 40 0.0317 - 41 0.0317 - 42 0.0159 - - 21 12 9 0 - 3 0.0833 - 4 0.167 - 7 0.25 - 14 0.0833 - 20 0.0833 - 26 0.0833 - 35 0.0833 - 37 0.0833 - 40 0.0833 - - 45 15 4 0 - 4 0.133 - 7 0.0667 - 14 0.0667 - 46 0.733 - - 49 214 24 0 - 2 0.00935 - 3 0.0187 - 4 0.28 - 7 0.136 - 8 0.0888 - 9 0.00467 - 13 0.0561 - 14 0.0654 - 15 0.0467 - 19 0.0234 - 20 0.0514 - 21 0.0374 - 24 0.0327 - 26 0.0794 - 27 0.00467 - 31 0.00935 - 35 0.00467 - 37 0.00935 - 39 0.00935 - 40 0.00935 - 41 0.00935 - 42 0.00467 - 45 0.00467 - 46 0.00467 - - 31 15551 42 7 - 0 0.00386 - 1 0.000129 - 2 0.0102 - 3 0.0112 - 4 0.0743 - 5 0.000129 - 7 0.434 - 8 0.0333 - 9 0.0027 - 10 0.000257 - 12 0.00122 - 13 0.0231 - 14 0.0143 - 15 0.0274 - 16 0.000129 - 17 0.000836 - 19 0.0116 - 20 0.0116 - 21 0.0532 - 22 0.00373 - 23 0.000257 - 24 0.0271 - 26 0.132 - 28 0.000836 - 29 0.000965 - 30 0.00514 - 31 0.00174 - 32 0.000643 - 33 0.000322 - 34 0.000322 - 35 0.000707 - 37 0.00257 - 38 6.43e-05 - 39 0.00367 - 40 0.0578 - 41 0.037 - 42 0.00424 - 43 0.00103 - 44 0.000386 - 45 0.00482 - 46 0.00167 - 47 0.000193 - - 2 72 17 0 - 4 0.0694 - 7 0.417 - 9 0.0139 - 14 0.0278 - 17 0.0139 - 19 0.0139 - 20 0.0139 - 21 0.0417 - 26 0.0278 - 29 0.0139 - 30 0.0278 - 39 0.0139 - 40 0.153 - 41 0.0972 - 42 0.0139 - 43 0.0139 - 46 0.0278 - - 21 9 4 0 - 0 0.111 - 7 0.667 - 12 0.111 - 47 0.111 - - 41 2 2 0 - 2 0.5 - 40 0.5 - - 45 13 6 0 - 7 0.231 - 8 0.0769 - 17 0.0769 - 21 0.0769 - 24 0.0769 - 46 0.462 - - 47 14860 42 0 - 0 0.0035 - 1 0.000135 - 2 0.00976 - 3 0.0116 - 4 0.0758 - 5 0.000135 - 7 0.43 - 8 0.0338 - 9 0.00276 - 10 0.000269 - 12 0.00108 - 13 0.0238 - 14 0.0147 - 15 0.028 - 16 0.000135 - 17 0.00074 - 19 0.0118 - 20 0.0114 - 21 0.0543 - 22 0.00384 - 23 0.000269 - 24 0.0281 - 26 0.134 - 28 0.000875 - 29 0.000875 - 30 0.00518 - 31 0.00182 - 32 0.000673 - 33 0.000336 - 34 0.000336 - 35 0.00074 - 37 0.00262 - 38 6.73e-05 - 39 0.00377 - 40 0.0559 - 41 0.0355 - 42 0.00397 - 43 0.000875 - 44 0.000404 - 45 0.00491 - 46 0.00101 - 47 0.000135 - - 49 583 25 0 - 0 0.012 - 2 0.0223 - 3 0.00172 - 4 0.0429 - 7 0.52 - 8 0.024 - 12 0.00343 - 13 0.0103 - 14 0.00515 - 15 0.0172 - 19 0.00515 - 20 0.0172 - 21 0.0274 - 22 0.00172 - 24 0.00686 - 26 0.0909 - 29 0.00172 - 30 0.00172 - 37 0.00172 - 40 0.0961 - 41 0.0686 - 42 0.0103 - 43 0.00343 - 45 0.00343 - 46 0.00515 - - 55 6 2 0 - 7 0.833 - 40 0.167 - - 32 5375 43 3 - 0 0.00651 - 1 0.000186 - 2 0.00335 - 3 0.0134 - 4 0.192 - 5 0.00447 - 6 0.000186 - 7 0.169 - 8 0.0662 - 9 0.0108 - 10 0.00093 - 12 0.00372 - 13 0.0506 - 14 0.0545 - 15 0.0344 - 16 0.000186 - 17 0.00093 - 19 0.0768 - 20 0.0218 - 21 0.0508 - 22 0.00409 - 23 0.000558 - 24 0.0203 - 26 0.0941 - 28 0.0026 - 29 0.000372 - 30 0.0104 - 31 0.00391 - 32 0.000186 - 33 0.000558 - 34 0.000558 - 35 0.00447 - 36 0.000186 - 37 0.00521 - 39 0.00428 - 40 0.0383 - 41 0.0387 - 42 0.00521 - 43 0.000558 - 44 0.000558 - 45 0.00316 - 46 0.000744 - 47 0.000186 - - 2 34 10 0 - 3 0.0294 - 4 0.0882 - 7 0.235 - 8 0.176 - 13 0.0588 - 14 0.206 - 20 0.0294 - 21 0.0294 - 40 0.0882 - 41 0.0588 - - 45 4 3 0 - 4 0.25 - 24 0.25 - 46 0.5 - - 49 79 19 0 - 3 0.0127 - 4 0.19 - 7 0.19 - 8 0.114 - 9 0.0127 - 12 0.0127 - 13 0.0886 - 14 0.0506 - 19 0.0506 - 20 0.0253 - 21 0.0253 - 24 0.0253 - 26 0.0759 - 30 0.0127 - 37 0.0127 - 40 0.0506 - 41 0.0253 - 42 0.0127 - 43 0.0127 - - 33 9565 42 3 - 0 0.0024 - 1 0.000209 - 2 0.00157 - 3 0.0238 - 4 0.181 - 5 0.00136 - 6 0.000105 - 7 0.141 - 8 0.0558 - 9 0.00659 - 10 0.00115 - 12 0.00178 - 13 0.0474 - 14 0.0311 - 15 0.124 - 16 0.000627 - 17 0.000732 - 19 0.0499 - 20 0.0226 - 21 0.0374 - 22 0.00355 - 23 0.000314 - 24 0.0154 - 26 0.0935 - 28 0.00178 - 29 0.000314 - 30 0.00711 - 31 0.0045 - 32 0.000209 - 34 0.000418 - 35 0.00157 - 37 0.0046 - 38 0.000105 - 39 0.0046 - 40 0.0667 - 41 0.0484 - 42 0.00815 - 43 0.000209 - 44 0.000418 - 45 0.00742 - 46 0.000209 - 47 0.000105 - - 2 37 10 0 - 4 0.243 - 7 0.135 - 8 0.162 - 9 0.027 - 12 0.027 - 13 0.135 - 14 0.135 - 15 0.027 - 21 0.027 - 40 0.0811 - - 45 8 7 0 - 7 0.125 - 8 0.125 - 13 0.125 - 21 0.125 - 24 0.125 - 26 0.25 - 46 0.125 - - 49 142 21 0 - 0 0.00704 - 3 0.0141 - 4 0.324 - 7 0.12 - 8 0.0634 - 10 0.00704 - 13 0.0634 - 14 0.00704 - 15 0.0352 - 17 0.0141 - 19 0.0845 - 20 0.0634 - 21 0.0211 - 24 0.0493 - 26 0.0423 - 30 0.0141 - 39 0.00704 - 40 0.0211 - 41 0.00704 - 42 0.0141 - 45 0.0211 - - 40 18 4 0 - 27 0.0556 - 43 0.0556 - 46 0.333 - 47 0.556 - - 41 6243 35 21 - 0 0.00416 - 1 0.0024 - 2 0.113 - 3 0.00432 - 4 0.0271 - 6 0.000641 - 7 0.276 - 8 0.0128 - 9 0.000481 - 10 0.000481 - 12 0.00176 - 13 0.00449 - 14 0.00384 - 15 0.00144 - 16 0.00016 - 19 0.00256 - 20 0.00176 - 21 0.149 - 22 0.00032 - 24 0.00016 - 26 0.0284 - 27 0.000961 - 28 0.0123 - 29 0.0111 - 30 0.222 - 31 0.0368 - 32 0.00352 - 33 0.00352 - 34 0.0103 - 35 0.00128 - 37 0.00657 - 39 0.000481 - 44 0.00016 - 45 0.0365 - 46 0.0189 - - 0 65 14 0 - 0 0.0154 - 4 0.0154 - 7 0.415 - 13 0.0462 - 15 0.0154 - 16 0.0154 - 19 0.0923 - 21 0.185 - 26 0.0154 - 27 0.0308 - 28 0.0154 - 30 0.0154 - 37 0.0615 - 45 0.0615 - - 2 14 4 0 - 4 0.0714 - 7 0.5 - 21 0.357 - 26 0.0714 - - 12 12 3 0 - 3 0.0833 - 7 0.75 - 21 0.167 - - 13 4 4 0 - 7 0.25 - 27 0.25 - 30 0.25 - 46 0.25 - - 28 63 13 0 - 2 0.0159 - 4 0.0159 - 6 0.0159 - 7 0.286 - 8 0.0476 - 12 0.0159 - 13 0.0159 - 14 0.0317 - 21 0.206 - 28 0.0159 - 30 0.0952 - 31 0.0159 - 45 0.222 - - 29 225 14 0 - 0 0.00444 - 7 0.107 - 13 0.00444 - 14 0.00444 - 15 0.00444 - 19 0.00444 - 20 0.00444 - 21 0.12 - 22 0.00444 - 26 0.0133 - 30 0.249 - 31 0.00444 - 45 0.471 - 46 0.00444 - - 30 30 5 0 - 2 0.0667 - 7 0.433 - 21 0.133 - 30 0.0333 - 45 0.333 - - 31 73 10 0 - 4 0.0274 - 7 0.411 - 8 0.0137 - 12 0.0137 - 14 0.0274 - 21 0.233 - 26 0.0137 - 30 0.205 - 31 0.0274 - 45 0.0274 - - 32 25 9 0 - 4 0.08 - 7 0.2 - 8 0.04 - 15 0.04 - 20 0.04 - 21 0.28 - 30 0.12 - 37 0.04 - 45 0.16 - - 33 92 8 0 - 7 0.152 - 14 0.0217 - 19 0.0109 - 21 0.0978 - 27 0.0109 - 28 0.0217 - 30 0.185 - 45 0.5 - - 48 218 13 0 - 1 0.00459 - 2 0.00459 - 3 0.00459 - 4 0.00917 - 7 0.44 - 8 0.0183 - 15 0.00459 - 21 0.234 - 26 0.00917 - 30 0.202 - 31 0.0275 - 45 0.00459 - 46 0.0367 - - 49 387 22 0 - 0 0.00258 - 1 0.00258 - 2 0.0155 - 3 0.00258 - 4 0.0284 - 7 0.488 - 8 0.0233 - 13 0.00775 - 14 0.00775 - 15 0.00258 - 19 0.00517 - 20 0.00258 - 21 0.106 - 26 0.0362 - 28 0.00775 - 30 0.178 - 31 0.0155 - 34 0.0129 - 35 0.00775 - 37 0.0129 - 45 0.0233 - 46 0.0103 - - 52 8 5 0 - 4 0.125 - 8 0.375 - 13 0.125 - 37 0.125 - 39 0.25 - - 55 1378 26 0 - 1 0.00145 - 2 0.0116 - 3 0.00508 - 4 0.0152 - 6 0.000726 - 7 0.319 - 8 0.00871 - 10 0.00145 - 12 0.000726 - 13 0.00218 - 14 0.0029 - 19 0.00145 - 20 0.000726 - 21 0.166 - 26 0.0689 - 27 0.00145 - 28 0.00145 - 29 0.000726 - 30 0.296 - 31 0.0537 - 33 0.000726 - 34 0.00581 - 35 0.00145 - 37 0.00871 - 45 0.00943 - 46 0.0145 - - 57 1875 30 0 - 0 0.00373 - 1 0.00427 - 2 0.0101 - 3 0.00427 - 4 0.0331 - 6 0.00107 - 7 0.341 - 8 0.0197 - 9 0.000533 - 10 0.000533 - 12 0.00107 - 13 0.00427 - 14 0.00267 - 15 0.00213 - 19 0.0016 - 20 0.00213 - 21 0.202 - 24 0.000533 - 26 0.0235 - 28 0.00267 - 29 0.0016 - 30 0.25 - 31 0.0485 - 32 0.00107 - 34 0.00853 - 35 0.00107 - 37 0.008 - 39 0.000533 - 45 0.00693 - 46 0.0133 - - 58 6 5 0 - 4 0.167 - 7 0.333 - 21 0.167 - 31 0.167 - 45 0.167 - - 59 16 8 0 - 2 0.0625 - 7 0.25 - 8 0.0625 - 13 0.0625 - 21 0.312 - 28 0.0625 - 30 0.125 - 46 0.0625 - - 62 353 19 0 - 0 0.00283 - 2 0.0113 - 3 0.00283 - 4 0.0085 - 7 0.34 - 8 0.0142 - 13 0.00283 - 14 0.00283 - 21 0.122 - 26 0.00567 - 29 0.00567 - 30 0.354 - 31 0.0567 - 34 0.00567 - 35 0.00283 - 37 0.0085 - 44 0.00283 - 45 0.00283 - 46 0.0482 - - 64 171 17 0 - 0 0.0117 - 1 0.00585 - 2 0.0234 - 4 0.0175 - 7 0.327 - 12 0.0117 - 13 0.00585 - 19 0.00585 - 21 0.117 - 26 0.0175 - 28 0.00585 - 29 0.00585 - 30 0.351 - 31 0.0234 - 34 0.0117 - 45 0.0117 - 46 0.0468 - - 68 7 6 0 - 7 0.143 - 21 0.143 - 26 0.143 - 30 0.286 - 45 0.143 - 46 0.143 - - 69 1214 24 0 - 0 0.0107 - 1 0.00165 - 2 0.537 - 3 0.00659 - 4 0.0478 - 7 0.0231 - 8 0.00329 - 9 0.00165 - 12 0.00329 - 13 0.00412 - 14 0.00329 - 20 0.00247 - 21 0.0527 - 22 0.000824 - 26 0.00824 - 28 0.0502 - 29 0.0511 - 30 0.0865 - 31 0.0198 - 32 0.0165 - 33 0.0173 - 34 0.0255 - 45 0.000824 - 46 0.0255 - - 42 485 30 16 - 0 0.00412 - 2 0.0866 - 3 0.0103 - 4 0.136 - 6 0.00206 - 7 0.144 - 8 0.0124 - 9 0.00206 - 11 0.00206 - 12 0.0103 - 13 0.0165 - 14 0.0124 - 15 0.0206 - 19 0.0103 - 21 0.101 - 22 0.00206 - 23 0.00206 - 26 0.00825 - 28 0.0103 - 29 0.00206 - 30 0.0474 - 31 0.0165 - 33 0.00412 - 34 0.00619 - 35 0.00619 - 37 0.00619 - 39 0.00206 - 42 0.00619 - 44 0.00206 - 45 0.307 - - 0 14 10 0 - 0 0.0714 - 2 0.0714 - 4 0.0714 - 7 0.143 - 15 0.143 - 28 0.143 - 30 0.0714 - 35 0.0714 - 42 0.0714 - 45 0.143 - - 12 2 2 0 - 0 0.5 - 11 0.5 - - 28 9 8 0 - 4 0.111 - 13 0.111 - 14 0.111 - 23 0.111 - 26 0.111 - 35 0.111 - 37 0.111 - 45 0.222 - - 29 63 4 0 - 3 0.0159 - 4 0.0317 - 7 0.0159 - 45 0.937 - - 30 12 3 0 - 4 0.0833 - 7 0.0833 - 45 0.833 - - 32 7 4 0 - 4 0.286 - 7 0.286 - 15 0.143 - 42 0.286 - - 33 49 4 0 - 3 0.0204 - 4 0.0204 - 14 0.0204 - 45 0.939 - - 42 3 2 0 - 4 0.333 - 13 0.667 - - 46 2 2 0 - 7 0.5 - 31 0.5 - - 48 16 7 0 - 4 0.125 - 7 0.25 - 21 0.25 - 26 0.0625 - 30 0.188 - 44 0.0625 - 45 0.0625 - - 49 20 8 0 - 4 0.05 - 7 0.3 - 8 0.1 - 12 0.05 - 13 0.05 - 21 0.25 - 37 0.05 - 45 0.15 - - 55 64 10 0 - 4 0.125 - 7 0.328 - 12 0.0156 - 13 0.0156 - 19 0.0312 - 21 0.25 - 28 0.0156 - 30 0.0938 - 35 0.0156 - 45 0.109 - - 57 82 17 0 - 3 0.0122 - 4 0.171 - 6 0.0122 - 7 0.232 - 8 0.0366 - 9 0.0122 - 12 0.0122 - 13 0.0122 - 14 0.0244 - 15 0.061 - 19 0.0122 - 21 0.146 - 26 0.0244 - 30 0.0366 - 31 0.0122 - 39 0.0122 - 45 0.171 - - 62 14 7 0 - 2 0.0714 - 3 0.0714 - 7 0.357 - 15 0.0714 - 19 0.0714 - 21 0.214 - 30 0.143 - - 64 16 7 0 - 4 0.25 - 7 0.25 - 8 0.0625 - 13 0.0625 - 19 0.0625 - 30 0.25 - 45 0.0625 - - 69 99 17 0 - 2 0.394 - 3 0.0101 - 4 0.242 - 7 0.0202 - 12 0.0202 - 13 0.0101 - 14 0.0202 - 21 0.0808 - 22 0.0101 - 28 0.0202 - 29 0.0101 - 30 0.0303 - 31 0.0505 - 33 0.0202 - 34 0.0303 - 37 0.0101 - 45 0.0202 - - 43 36 15 4 - 0 0.0278 - 2 0.0556 - 4 0.0556 - 7 0.167 - 12 0.0278 - 13 0.0278 - 19 0.0278 - 21 0.139 - 26 0.0556 - 28 0.0278 - 30 0.0278 - 31 0.0556 - 40 0.139 - 41 0.139 - 42 0.0278 - - 0 4 3 0 - 21 0.25 - 30 0.25 - 31 0.5 - - 28 2 2 0 - 13 0.5 - 19 0.5 - - 55 13 7 0 - 2 0.154 - 7 0.231 - 12 0.0769 - 21 0.308 - 26 0.0769 - 40 0.0769 - 41 0.0769 - - 57 9 5 0 - 7 0.222 - 26 0.111 - 40 0.222 - 41 0.333 - 42 0.111 - - 44 27 12 2 - 4 0.111 - 7 0.296 - 8 0.0741 - 13 0.111 - 14 0.037 - 15 0.148 - 26 0.037 - 28 0.037 - 31 0.037 - 34 0.037 - 37 0.037 - 45 0.037 - - 28 8 5 0 - 4 0.125 - 7 0.125 - 8 0.25 - 13 0.25 - 15 0.25 - - 55 5 3 0 - 7 0.6 - 13 0.2 - 26 0.2 - - 45 947 30 20 - 0 0.0169 - 1 0.00106 - 2 0.00211 - 3 0.00845 - 4 0.147 - 5 0.0116 - 6 0.00528 - 7 0.0993 - 8 0.119 - 9 0.00739 - 12 0.00845 - 13 0.0401 - 14 0.0201 - 15 0.0264 - 16 0.00211 - 17 0.00106 - 19 0.141 - 20 0.00422 - 21 0.116 - 22 0.00422 - 26 0.0211 - 27 0.0116 - 28 0.0919 - 29 0.00317 - 30 0.0348 - 31 0.0275 - 34 0.00211 - 35 0.0095 - 37 0.0127 - 42 0.00317 - - 0 241 18 0 - 1 0.00415 - 3 0.0083 - 4 0.149 - 7 0.0664 - 8 0.249 - 9 0.0083 - 12 0.00415 - 13 0.0207 - 14 0.0124 - 15 0.0124 - 21 0.224 - 22 0.0083 - 26 0.0124 - 28 0.0124 - 29 0.00415 - 30 0.104 - 31 0.0954 - 37 0.00415 - - 1 4 3 0 - 7 0.5 - 21 0.25 - 31 0.25 - - 2 14 4 0 - 0 0.286 - 12 0.357 - 28 0.214 - 29 0.143 - - 12 33 4 0 - 0 0.0909 - 21 0.0909 - 28 0.788 - 37 0.0303 - - 21 4 3 0 - 21 0.25 - 28 0.5 - 30 0.25 - - 26 33 2 0 - 21 0.0303 - 28 0.97 - - 28 57 16 0 - 3 0.0351 - 4 0.246 - 7 0.0351 - 8 0.228 - 9 0.0351 - 13 0.123 - 14 0.0351 - 15 0.0351 - 19 0.0175 - 20 0.0175 - 21 0.105 - 22 0.0175 - 26 0.0175 - 28 0.0175 - 30 0.0175 - 35 0.0175 - - 29 48 16 0 - 0 0.0208 - 4 0.25 - 5 0.0208 - 6 0.0417 - 7 0.104 - 8 0.125 - 13 0.0625 - 14 0.0208 - 15 0.0833 - 19 0.0417 - 21 0.0833 - 26 0.0417 - 28 0.0417 - 30 0.0208 - 34 0.0208 - 37 0.0208 - - 30 36 11 0 - 4 0.278 - 7 0.0278 - 8 0.194 - 9 0.0278 - 13 0.111 - 14 0.0278 - 15 0.0833 - 17 0.0278 - 21 0.167 - 26 0.0278 - 28 0.0278 - - 31 23 10 0 - 3 0.0435 - 4 0.13 - 6 0.087 - 7 0.087 - 8 0.087 - 13 0.0435 - 14 0.13 - 15 0.0435 - 21 0.304 - 28 0.0435 - - 32 12 7 0 - 4 0.0833 - 7 0.0833 - 8 0.333 - 13 0.0833 - 15 0.167 - 28 0.167 - 30 0.0833 - - 33 30 13 0 - 3 0.0667 - 4 0.167 - 5 0.0333 - 7 0.133 - 8 0.2 - 9 0.0333 - 13 0.0667 - 14 0.0667 - 15 0.0333 - 19 0.1 - 21 0.0333 - 22 0.0333 - 30 0.0333 - - 41 196 20 0 - 0 0.0306 - 2 0.0102 - 4 0.128 - 5 0.0153 - 7 0.0765 - 8 0.0255 - 13 0.0408 - 14 0.0102 - 15 0.0153 - 16 0.0051 - 19 0.398 - 20 0.0102 - 21 0.0714 - 27 0.0357 - 28 0.0459 - 30 0.0051 - 31 0.0051 - 35 0.0357 - 37 0.0255 - 42 0.0102 - - 42 126 18 0 - 4 0.183 - 5 0.0476 - 7 0.0714 - 8 0.0397 - 12 0.0159 - 13 0.0397 - 14 0.0238 - 15 0.0317 - 16 0.00794 - 19 0.381 - 20 0.00794 - 21 0.0397 - 27 0.0317 - 28 0.0317 - 34 0.00794 - 35 0.00794 - 37 0.0238 - 42 0.00794 - - 48 2 2 0 - 7 0.5 - 26 0.5 - - 49 13 9 0 - 0 0.0769 - 4 0.231 - 7 0.0769 - 8 0.154 - 21 0.154 - 28 0.0769 - 30 0.0769 - 31 0.0769 - 37 0.0769 - - 55 39 9 0 - 3 0.0256 - 4 0.103 - 7 0.487 - 8 0.0256 - 9 0.0256 - 13 0.0256 - 14 0.0256 - 21 0.0769 - 26 0.205 - - 57 18 7 0 - 4 0.111 - 7 0.556 - 8 0.0556 - 19 0.0556 - 21 0.0556 - 26 0.111 - 30 0.0556 - - 58 10 5 0 - 0 0.1 - 4 0.1 - 7 0.5 - 21 0.1 - 26 0.2 - - 59 8 7 0 - 6 0.125 - 7 0.125 - 8 0.125 - 13 0.125 - 14 0.125 - 15 0.25 - 19 0.125 - - 46 498 27 21 - 0 0.01 - 2 0.151 - 3 0.00402 - 4 0.0723 - 7 0.398 - 8 0.0161 - 12 0.00201 - 13 0.0161 - 14 0.01 - 15 0.0321 - 19 0.0141 - 20 0.00602 - 21 0.0221 - 26 0.0683 - 28 0.00402 - 29 0.00803 - 30 0.0743 - 31 0.00201 - 33 0.00602 - 35 0.00402 - 37 0.0201 - 40 0.00201 - 41 0.00201 - 42 0.0141 - 44 0.012 - 46 0.0141 - 47 0.0161 - - 13 2 2 0 - 8 0.5 - 15 0.5 - - 26 1 1 0 - 28 1 - - 28 48 12 0 - 3 0.0208 - 4 0.354 - 7 0.229 - 8 0.0625 - 13 0.0417 - 14 0.0417 - 15 0.0833 - 19 0.0417 - 20 0.0417 - 35 0.0208 - 37 0.0417 - 44 0.0208 - - 29 9 6 0 - 4 0.222 - 7 0.111 - 13 0.111 - 21 0.111 - 26 0.222 - 30 0.222 - - 30 21 7 0 - 3 0.0476 - 4 0.333 - 7 0.19 - 13 0.0476 - 14 0.0476 - 15 0.286 - 20 0.0476 - - 31 21 8 0 - 4 0.0952 - 7 0.429 - 13 0.0476 - 14 0.0476 - 15 0.0476 - 19 0.0476 - 26 0.238 - 37 0.0476 - - 40 5 2 0 - 46 0.2 - 47 0.8 - - 41 118 15 0 - 0 0.0169 - 2 0.246 - 4 0.0254 - 7 0.237 - 8 0.00847 - 13 0.00847 - 15 0.00847 - 19 0.0169 - 21 0.0593 - 26 0.0169 - 29 0.0254 - 30 0.28 - 31 0.00847 - 33 0.0254 - 46 0.0169 - - 48 39 7 0 - 0 0.0256 - 2 0.308 - 7 0.487 - 8 0.0256 - 26 0.0513 - 37 0.0513 - 44 0.0513 - - 49 34 11 0 - 0 0.0294 - 2 0.0294 - 4 0.0588 - 7 0.529 - 13 0.0294 - 26 0.176 - 28 0.0294 - 30 0.0294 - 35 0.0294 - 37 0.0294 - 42 0.0294 - - 51 1 1 0 - 44 1 - - 52 2 2 0 - 2 0.5 - 37 0.5 - - 55 98 11 0 - 0 0.0102 - 2 0.0918 - 7 0.724 - 12 0.0102 - 19 0.0102 - 26 0.0816 - 29 0.0102 - 30 0.0102 - 41 0.0102 - 42 0.0306 - 44 0.0102 - - 57 31 9 0 - 2 0.129 - 4 0.0323 - 7 0.516 - 8 0.0323 - 13 0.0323 - 21 0.0323 - 26 0.129 - 37 0.0645 - 40 0.0323 - - 59 13 5 0 - 4 0.0769 - 7 0.462 - 15 0.154 - 21 0.0769 - 26 0.231 - - 62 11 7 0 - 2 0.0909 - 7 0.364 - 26 0.0909 - 42 0.0909 - 44 0.0909 - 46 0.182 - 47 0.0909 - - 64 5 2 0 - 7 0.8 - 8 0.2 - - 65 6 4 0 - 2 0.167 - 15 0.167 - 46 0.333 - 47 0.333 - - 66 2 2 0 - 37 0.5 - 42 0.5 - - 67 3 3 0 - 4 0.333 - 19 0.333 - 47 0.333 - - 69 22 4 0 - 2 0.773 - 7 0.136 - 21 0.0455 - 42 0.0455 - - 47 145999 39 35 - 0 0.0116 - 1 6.85e-06 - 2 0.0386 - 3 0.000603 - 4 0.0028 - 5 6.16e-05 - 7 0.0116 - 8 0.000671 - 9 2.05e-05 - 12 0.00449 - 13 0.000678 - 14 0.000404 - 15 0.0104 - 16 6.85e-06 - 17 6.85e-06 - 19 0.000808 - 20 0.000178 - 21 0.00211 - 22 0.000137 - 25 6.85e-06 - 26 0.0016 - 28 0.000164 - 29 0.00262 - 30 0.000384 - 31 0.000349 - 32 0.00107 - 33 0.00145 - 34 0.000288 - 35 4.11e-05 - 37 0.000623 - 39 2.05e-05 - 40 0.691 - 41 0.188 - 42 0.0209 - 43 0.00159 - 44 0.000692 - 45 0.000336 - 46 0.00192 - 47 0.00216 - - 0 598 28 0 - 0 0.0485 - 1 0.00167 - 2 0.0318 - 3 0.0167 - 4 0.164 - 7 0.0518 - 8 0.0234 - 9 0.00502 - 12 0.00334 - 13 0.0284 - 14 0.0301 - 15 0.0853 - 19 0.00669 - 20 0.00836 - 21 0.0167 - 26 0.01 - 30 0.00502 - 31 0.00167 - 34 0.00167 - 35 0.00167 - 37 0.00836 - 39 0.00167 - 40 0.232 - 41 0.176 - 42 0.0301 - 43 0.00167 - 45 0.00334 - 46 0.00502 - - 2 1 1 0 - 30 1 - - 7 2 2 0 - 13 0.5 - 41 0.5 - - 8 34 7 0 - 2 0.147 - 7 0.118 - 20 0.0294 - 21 0.0294 - 32 0.0294 - 40 0.559 - 41 0.0882 - - 12 59 11 0 - 0 0.0508 - 2 0.0508 - 4 0.0169 - 7 0.0508 - 13 0.0169 - 21 0.0339 - 26 0.0339 - 40 0.339 - 41 0.288 - 42 0.0847 - 46 0.0339 - - 13 57 9 0 - 0 0.0351 - 2 0.0877 - 7 0.0351 - 12 0.0351 - 26 0.0175 - 30 0.0175 - 40 0.368 - 41 0.368 - 42 0.0351 - - 15 4 2 0 - 15 0.5 - 46 0.5 - - 21 60 9 0 - 0 0.0167 - 8 0.0167 - 21 0.0167 - 28 0.0333 - 40 0.583 - 41 0.233 - 42 0.0667 - 46 0.0167 - 47 0.0167 - - 22 3 1 0 - 41 1 - - 26 26 8 0 - 0 0.0385 - 7 0.0769 - 21 0.0385 - 28 0.0385 - 40 0.5 - 41 0.231 - 42 0.0385 - 46 0.0385 - - 28 1249 28 0 - 0 0.028 - 2 0.0697 - 4 0.00961 - 5 0.000801 - 7 0.0641 - 8 0.0032 - 12 0.00881 - 13 0.0056 - 15 0.0016 - 17 0.000801 - 19 0.004 - 20 0.0016 - 21 0.00881 - 26 0.004 - 30 0.000801 - 31 0.000801 - 33 0.000801 - 34 0.000801 - 37 0.0048 - 39 0.000801 - 40 0.481 - 41 0.254 - 42 0.0336 - 43 0.0016 - 44 0.0016 - 45 0.000801 - 46 0.0056 - 47 0.0024 - - 29 2544 28 0 - 0 0.00825 - 2 0.0197 - 3 0.0157 - 4 0.0204 - 7 0.00432 - 8 0.000786 - 12 0.000393 - 13 0.00314 - 14 0.000786 - 15 0.219 - 16 0.000393 - 19 0.000786 - 20 0.000786 - 21 0.00118 - 26 0.00118 - 28 0.000393 - 29 0.00197 - 30 0.000393 - 31 0.000786 - 32 0.000393 - 33 0.00118 - 40 0.521 - 41 0.167 - 42 0.00825 - 43 0.000786 - 45 0.000393 - 46 0.000393 - 47 0.000393 - - 30 440 24 0 - 0 0.0591 - 2 0.0977 - 3 0.00227 - 4 0.00227 - 7 0.0659 - 8 0.00909 - 12 0.00455 - 13 0.0114 - 14 0.00682 - 15 0.00227 - 19 0.00227 - 20 0.00227 - 21 0.00909 - 22 0.00227 - 26 0.00227 - 28 0.00227 - 32 0.00227 - 37 0.00227 - 40 0.427 - 41 0.239 - 42 0.0273 - 43 0.00682 - 44 0.00455 - 46 0.00909 - - 31 1808 30 0 - 0 0.0321 - 2 0.0857 - 3 0.000553 - 4 0.00332 - 7 0.0243 - 8 0.00111 - 12 0.0083 - 13 0.000553 - 14 0.000553 - 15 0.00111 - 19 0.00111 - 20 0.000553 - 21 0.00387 - 22 0.000553 - 26 0.00332 - 29 0.0083 - 30 0.000553 - 31 0.000553 - 32 0.00553 - 33 0.00277 - 35 0.000553 - 37 0.00221 - 40 0.497 - 41 0.269 - 42 0.0321 - 43 0.0083 - 44 0.00111 - 45 0.000553 - 46 0.00277 - 47 0.00166 - - 32 490 22 0 - 0 0.0286 - 2 0.0347 - 4 0.0184 - 7 0.0163 - 8 0.00612 - 12 0.0184 - 13 0.00408 - 14 0.0184 - 15 0.00204 - 19 0.00408 - 21 0.00816 - 26 0.00204 - 29 0.00204 - 32 0.00204 - 35 0.00204 - 40 0.42 - 41 0.361 - 42 0.0347 - 43 0.00612 - 44 0.00408 - 46 0.00408 - 47 0.00204 - - 33 2098 25 0 - 0 0.00763 - 2 0.0062 - 3 0.0114 - 4 0.0472 - 7 0.00477 - 8 0.00477 - 12 0.00191 - 13 0.0124 - 15 0.404 - 19 0.000477 - 20 0.00286 - 21 0.000477 - 26 0.000477 - 29 0.000477 - 30 0.000477 - 31 0.000477 - 32 0.000477 - 40 0.304 - 41 0.173 - 42 0.0129 - 43 0.000953 - 44 0.000953 - 45 0.000477 - 46 0.000477 - 47 0.000477 - - 40 11 2 0 - 46 0.0909 - 47 0.909 - - 41 55 17 0 - 0 0.0727 - 2 0.364 - 4 0.109 - 7 0.0545 - 8 0.0182 - 12 0.109 - 13 0.0182 - 14 0.0364 - 15 0.0182 - 19 0.0364 - 21 0.0364 - 29 0.0182 - 30 0.0182 - 31 0.0182 - 32 0.0182 - 37 0.0364 - 45 0.0182 - - 42 5 4 0 - 4 0.2 - 12 0.2 - 19 0.4 - 31 0.2 - - 43 14 5 0 - 2 0.143 - 12 0.0714 - 40 0.357 - 41 0.357 - 42 0.0714 - - 46 81 16 0 - 0 0.037 - 2 0.42 - 4 0.0247 - 7 0.0864 - 12 0.0123 - 15 0.0247 - 19 0.0494 - 21 0.0123 - 29 0.037 - 33 0.0247 - 40 0.0123 - 41 0.0123 - 42 0.0494 - 44 0.0123 - 46 0.0864 - 47 0.0988 - - 48 4185 23 0 - 0 0.0098 - 2 0.0437 - 5 0.000239 - 7 0.00621 - 8 0.000239 - 12 0.00119 - 19 0.00143 - 20 0.000239 - 21 0.000717 - 26 0.000717 - 29 0.000717 - 30 0.000717 - 32 0.000239 - 33 0.000478 - 34 0.000478 - 40 0.651 - 41 0.249 - 42 0.0284 - 43 0.000956 - 44 0.000478 - 45 0.000239 - 46 0.00143 - 47 0.00143 - - 49 3148 26 0 - 0 0.0156 - 2 0.0594 - 3 0.000318 - 4 0.000635 - 7 0.0133 - 8 0.000318 - 12 0.00762 - 13 0.000318 - 15 0.000318 - 19 0.000953 - 21 0.00254 - 26 0.00159 - 28 0.000318 - 29 0.00349 - 30 0.000635 - 32 0.00127 - 33 0.00222 - 34 0.000318 - 37 0.000635 - 40 0.619 - 41 0.234 - 42 0.027 - 43 0.00286 - 45 0.000318 - 46 0.00191 - 47 0.00222 - - 51 49 5 0 - 40 0.735 - 41 0.102 - 42 0.0204 - 43 0.0408 - 47 0.102 - - 55 29370 35 0 - 0 0.0136 - 2 0.0618 - 3 0.00017 - 4 0.00109 - 5 3.4e-05 - 7 0.0157 - 8 0.000613 - 12 0.00582 - 13 0.000204 - 14 0.000136 - 15 0.000477 - 19 0.000783 - 20 6.81e-05 - 21 0.00289 - 22 0.000238 - 25 3.4e-05 - 26 0.00221 - 28 0.000272 - 29 0.00371 - 30 0.000272 - 31 0.000477 - 32 0.00112 - 33 0.00197 - 34 0.000409 - 35 3.4e-05 - 37 0.000783 - 39 3.4e-05 - 40 0.65 - 41 0.205 - 42 0.0224 - 43 0.0018 - 44 0.000647 - 45 0.000409 - 46 0.00211 - 47 0.00218 - - 57 28760 33 0 - 0 0.0139 - 2 0.0438 - 3 6.95e-05 - 4 0.00104 - 5 6.95e-05 - 7 0.00883 - 8 0.000556 - 12 0.00619 - 13 0.000417 - 14 0.000104 - 15 0.000313 - 19 0.000626 - 20 0.000104 - 21 0.00209 - 22 0.000139 - 26 0.00205 - 28 0.000209 - 29 0.00466 - 30 0.000522 - 31 0.000591 - 32 0.00191 - 33 0.00209 - 34 0.000487 - 35 3.48e-05 - 37 0.000313 - 40 0.684 - 41 0.195 - 42 0.0239 - 43 0.00212 - 44 0.00101 - 45 0.000382 - 46 0.00125 - 47 0.00174 - - 58 125 18 0 - 0 0.04 - 2 0.112 - 4 0.016 - 7 0.008 - 12 0.032 - 15 0.04 - 19 0.04 - 20 0.008 - 21 0.008 - 26 0.008 - 29 0.016 - 33 0.008 - 35 0.008 - 40 0.512 - 41 0.112 - 42 0.016 - 45 0.008 - 47 0.008 - - 59 392 14 0 - 0 0.0102 - 2 0.0969 - 4 0.00765 - 7 0.0255 - 8 0.00255 - 12 0.00255 - 21 0.0051 - 26 0.0051 - 40 0.51 - 41 0.291 - 42 0.0332 - 43 0.0051 - 46 0.00255 - 47 0.00255 - - 62 12424 28 0 - 0 0.00789 - 2 0.0249 - 3 8.05e-05 - 4 0.000644 - 7 0.00539 - 8 0.000241 - 12 0.0037 - 13 8.05e-05 - 14 0.000402 - 15 8.05e-05 - 19 0.000644 - 21 0.00145 - 26 0.000644 - 29 0.00129 - 30 0.000241 - 31 8.05e-05 - 32 0.000805 - 33 0.00121 - 34 0.000402 - 37 0.000322 - 40 0.761 - 41 0.163 - 42 0.0182 - 43 0.000563 - 44 0.000724 - 45 0.000402 - 46 0.0025 - 47 0.00266 - - 64 13381 22 0 - 0 0.00239 - 2 0.0106 - 4 7.47e-05 - 5 7.47e-05 - 7 0.000374 - 8 7.47e-05 - 12 0.00105 - 13 7.47e-05 - 15 7.47e-05 - 19 0.000374 - 21 7.47e-05 - 29 0.000299 - 32 0.000149 - 33 0.000224 - 34 7.47e-05 - 40 0.86 - 41 0.106 - 42 0.0132 - 43 0.000972 - 44 0.000224 - 46 0.000972 - 47 0.00277 - - 65 17 2 0 - 40 0.765 - 47 0.235 - - 67 12 4 0 - 40 0.5 - 42 0.0833 - 46 0.25 - 47 0.167 - - 68 148 8 0 - 0 0.0135 - 2 0.00676 - 4 0.00676 - 31 0.00676 - 40 0.73 - 41 0.189 - 42 0.0405 - 46 0.00676 - - 69 44302 32 0 - 0 0.0102 - 2 0.0279 - 3 6.77e-05 - 4 0.000971 - 5 6.77e-05 - 7 0.0133 - 8 0.000361 - 12 0.00354 - 13 0.000203 - 14 0.000271 - 15 0.000406 - 19 0.000564 - 20 2.26e-05 - 21 0.00185 - 22 0.000158 - 26 0.00144 - 28 9.03e-05 - 29 0.00174 - 30 0.000339 - 31 0.000226 - 32 0.00079 - 33 0.00124 - 34 0.000113 - 37 0.00079 - 40 0.719 - 41 0.189 - 42 0.0194 - 43 0.0012 - 44 0.000632 - 45 0.000248 - 46 0.00192 - 47 0.00156 - - 74 15 3 0 - 40 0.4 - 41 0.0667 - 47 0.533 - - 48 5913 33 15 - 0 0.00727 - 2 0.0313 - 3 0.00101 - 4 0.00643 - 5 0.000169 - 7 0.163 - 8 0.00372 - 12 0.00101 - 13 0.00558 - 14 0.000338 - 15 0.00169 - 17 0.000507 - 19 0.00152 - 20 0.000169 - 21 0.0167 - 22 0.000507 - 26 0.0338 - 29 0.000507 - 30 0.00355 - 31 0.0022 - 32 0.000169 - 33 0.000338 - 34 0.00101 - 35 0.000676 - 37 0.00693 - 40 0.461 - 41 0.214 - 42 0.0237 - 43 0.000676 - 44 0.00152 - 45 0.000507 - 46 0.00761 - 47 0.00101 - - 0 4156 30 0 - 0 0.00794 - 2 0.0337 - 3 0.000722 - 4 0.00553 - 5 0.000241 - 7 0.149 - 8 0.00217 - 12 0.0012 - 13 0.00674 - 14 0.000241 - 15 0.000962 - 17 0.000481 - 19 0.00144 - 21 0.0156 - 26 0.038 - 29 0.000722 - 30 0.00337 - 31 0.00265 - 33 0.000481 - 34 0.0012 - 35 0.000481 - 37 0.00577 - 40 0.474 - 41 0.217 - 42 0.0231 - 43 0.000722 - 44 0.00192 - 45 0.000481 - 46 0.00217 - 47 0.00144 - - 1 36 8 0 - 0 0.0278 - 7 0.194 - 19 0.0278 - 21 0.0278 - 40 0.333 - 41 0.306 - 42 0.0556 - 46 0.0278 - - 21 356 17 0 - 0 0.00562 - 2 0.0169 - 4 0.00281 - 7 0.152 - 8 0.00281 - 19 0.00281 - 21 0.014 - 26 0.014 - 30 0.00281 - 32 0.00281 - 34 0.00281 - 35 0.00281 - 37 0.0225 - 40 0.458 - 41 0.256 - 42 0.0365 - 46 0.00562 - - 28 251 17 0 - 0 0.012 - 2 0.0239 - 4 0.0199 - 7 0.243 - 8 0.0199 - 12 0.00398 - 14 0.00398 - 15 0.00398 - 20 0.00398 - 21 0.0239 - 26 0.0438 - 30 0.00398 - 40 0.394 - 41 0.175 - 42 0.0159 - 43 0.00398 - 45 0.00398 - - 29 218 16 0 - 0 0.00459 - 2 0.0275 - 3 0.00917 - 4 0.0275 - 7 0.284 - 8 0.0229 - 13 0.00917 - 15 0.0138 - 21 0.0275 - 22 0.0138 - 26 0.0275 - 30 0.00917 - 37 0.0138 - 40 0.362 - 41 0.138 - 42 0.00917 - - 30 87 10 0 - 0 0.0115 - 2 0.0345 - 4 0.0115 - 7 0.184 - 15 0.0115 - 17 0.0115 - 21 0.0345 - 26 0.0115 - 40 0.517 - 41 0.172 - - 31 99 12 0 - 2 0.0202 - 4 0.0101 - 7 0.343 - 15 0.0101 - 21 0.0202 - 26 0.0303 - 30 0.0101 - 37 0.0101 - 40 0.374 - 41 0.141 - 42 0.0202 - 44 0.0101 - - 32 99 9 0 - 2 0.0303 - 4 0.0101 - 7 0.172 - 13 0.0101 - 26 0.0101 - 37 0.0101 - 40 0.475 - 41 0.253 - 42 0.0303 - - 33 166 10 0 - 2 0.0301 - 7 0.0904 - 13 0.00602 - 21 0.0361 - 26 0.0241 - 31 0.00602 - 37 0.00602 - 40 0.53 - 41 0.235 - 42 0.0361 - - 41 43 6 0 - 7 0.0698 - 21 0.0233 - 30 0.0233 - 40 0.651 - 41 0.186 - 42 0.0465 - - 45 96 7 0 - 2 0.0104 - 7 0.0312 - 30 0.0104 - 31 0.0104 - 40 0.354 - 41 0.25 - 46 0.333 - - 47 37 1 0 - 7 1 - - 49 232 14 0 - 0 0.00431 - 2 0.0517 - 7 0.142 - 8 0.00862 - 13 0.00431 - 19 0.00431 - 21 0.0172 - 26 0.0474 - 35 0.00431 - 37 0.0129 - 40 0.418 - 41 0.25 - 42 0.0302 - 46 0.00431 - - 59 3 3 0 - 3 0.333 - 40 0.333 - 42 0.333 - - 69 2 2 0 - 0 0.5 - 40 0.5 - - 49 8591 38 29 - 0 0.047 - 1 0.00291 - 2 0.0221 - 3 0.00466 - 4 0.0363 - 7 0.185 - 8 0.0282 - 9 0.00163 - 10 0.000116 - 12 0.00326 - 13 0.00873 - 14 0.00384 - 15 0.00349 - 17 0.000116 - 19 0.00105 - 20 0.00186 - 21 0.0312 - 22 0.00233 - 24 0.000466 - 26 0.0481 - 28 0.0638 - 29 0.00349 - 30 0.0345 - 31 0.076 - 32 0.000931 - 33 0.00128 - 34 0.000233 - 35 0.00151 - 37 0.00442 - 39 0.000698 - 40 0.227 - 41 0.132 - 42 0.0128 - 43 0.00105 - 44 0.000698 - 45 0.0021 - 46 0.00466 - 47 0.000815 - - 0 2149 33 0 - 0 0.0558 - 1 0.0116 - 2 0.00558 - 3 0.00651 - 4 0.0879 - 7 0.102 - 8 0.0814 - 9 0.00605 - 12 0.000465 - 13 0.0172 - 14 0.00745 - 15 0.00465 - 17 0.000465 - 20 0.000465 - 21 0.053 - 22 0.00279 - 24 0.0014 - 26 0.0219 - 28 0.00279 - 29 0.000465 - 30 0.117 - 31 0.276 - 32 0.000465 - 33 0.000465 - 35 0.00372 - 37 0.00233 - 39 0.000931 - 40 0.0749 - 41 0.0433 - 42 0.00465 - 45 0.00558 - 46 0.000465 - 47 0.000465 - - 1 9 3 0 - 0 0.111 - 31 0.778 - 47 0.111 - - 2 61 13 0 - 0 0.115 - 7 0.0328 - 8 0.0164 - 12 0.0492 - 21 0.0164 - 26 0.0656 - 28 0.18 - 29 0.213 - 30 0.0984 - 31 0.082 - 32 0.0492 - 33 0.0656 - 45 0.0164 - - 8 4 2 0 - 7 0.75 - 41 0.25 - - 12 581 7 0 - 0 0.31 - 21 0.0172 - 22 0.00172 - 28 0.664 - 29 0.00172 - 32 0.00172 - 41 0.00344 - - 13 14 7 0 - 7 0.357 - 14 0.143 - 26 0.143 - 30 0.0714 - 37 0.0714 - 40 0.143 - 41 0.0714 - - 21 224 16 0 - 0 0.196 - 3 0.00446 - 4 0.0491 - 7 0.0268 - 8 0.0714 - 13 0.0179 - 20 0.00446 - 21 0.0179 - 26 0.0179 - 28 0.366 - 30 0.0402 - 31 0.156 - 40 0.00893 - 41 0.00893 - 42 0.00893 - 46 0.00446 - - 26 59 4 0 - 0 0.0169 - 21 0.0169 - 28 0.932 - 45 0.0339 - - 28 735 26 0 - 0 0.00544 - 2 0.0667 - 3 0.00272 - 4 0.0517 - 7 0.291 - 8 0.015 - 12 0.00136 - 13 0.0068 - 14 0.00816 - 15 0.00544 - 20 0.0068 - 21 0.0381 - 22 0.00408 - 26 0.0803 - 29 0.00136 - 30 0.00952 - 31 0.00136 - 35 0.00408 - 37 0.0109 - 39 0.00272 - 40 0.215 - 41 0.144 - 42 0.00952 - 44 0.00136 - 46 0.015 - 47 0.00136 - - 29 723 27 0 - 0 0.00138 - 2 0.0277 - 3 0.0166 - 4 0.0194 - 7 0.383 - 8 0.0194 - 9 0.00138 - 12 0.00138 - 13 0.0138 - 14 0.00553 - 15 0.0152 - 19 0.00692 - 20 0.00692 - 21 0.0332 - 22 0.00277 - 26 0.116 - 30 0.00553 - 31 0.00138 - 32 0.00138 - 37 0.00415 - 40 0.169 - 41 0.129 - 42 0.0111 - 43 0.00138 - 44 0.00138 - 45 0.00138 - 46 0.00415 - - 30 476 29 0 - 0 0.0168 - 2 0.0147 - 3 0.0063 - 4 0.0315 - 7 0.332 - 8 0.0105 - 10 0.0021 - 12 0.0126 - 13 0.0126 - 14 0.0105 - 15 0.0021 - 20 0.0021 - 21 0.0441 - 22 0.0021 - 26 0.105 - 28 0.0021 - 29 0.0021 - 30 0.0084 - 31 0.0021 - 33 0.0084 - 34 0.0021 - 35 0.0021 - 37 0.0063 - 39 0.0042 - 40 0.197 - 41 0.139 - 42 0.0126 - 43 0.0042 - 46 0.0042 - - 31 679 25 0 - 0 0.0103 - 2 0.0353 - 3 0.00736 - 4 0.0177 - 7 0.384 - 8 0.00884 - 12 0.0103 - 13 0.00295 - 15 0.00147 - 19 0.00295 - 20 0.00147 - 21 0.0177 - 26 0.0854 - 29 0.0118 - 30 0.00442 - 35 0.00147 - 37 0.00295 - 40 0.225 - 41 0.137 - 42 0.0206 - 43 0.00147 - 44 0.00442 - 45 0.00147 - 46 0.00147 - 47 0.00147 - - 32 203 15 0 - 0 0.0197 - 2 0.0542 - 4 0.0345 - 7 0.31 - 8 0.00985 - 13 0.0148 - 21 0.0394 - 22 0.00493 - 26 0.0788 - 31 0.00493 - 32 0.00493 - 37 0.00493 - 40 0.241 - 41 0.163 - 42 0.0148 - - 33 209 19 0 - 2 0.0287 - 3 0.00957 - 4 0.0383 - 7 0.297 - 8 0.0239 - 13 0.00478 - 19 0.00478 - 20 0.00478 - 21 0.0383 - 22 0.00478 - 26 0.0718 - 34 0.00478 - 37 0.00957 - 40 0.254 - 41 0.167 - 42 0.0191 - 43 0.00478 - 46 0.00478 - 47 0.00957 - - 41 627 13 0 - 0 0.00159 - 2 0.00159 - 7 0.0223 - 20 0.00159 - 21 0.00159 - 26 0.00319 - 29 0.00638 - 30 0.00797 - 31 0.00159 - 40 0.619 - 41 0.313 - 42 0.0191 - 47 0.00159 - - 42 15 6 0 - 7 0.0667 - 26 0.0667 - 40 0.667 - 41 0.0667 - 42 0.0667 - 43 0.0667 - - 43 4 3 0 - 2 0.25 - 7 0.25 - 40 0.5 - - 45 38 7 0 - 7 0.105 - 21 0.105 - 28 0.0526 - 31 0.105 - 40 0.237 - 41 0.0789 - 46 0.316 - - 46 6 2 0 - 40 0.333 - 41 0.667 - - 47 19 5 0 - 2 0.0526 - 7 0.421 - 26 0.0526 - 40 0.263 - 41 0.211 - - 48 81 9 0 - 0 0.0123 - 2 0.0123 - 7 0.173 - 13 0.0123 - 15 0.0247 - 26 0.037 - 40 0.444 - 41 0.247 - 42 0.037 - - 49 150 16 0 - 0 0.0133 - 2 0.0133 - 4 0.02 - 7 0.147 - 8 0.0133 - 13 0.00667 - 21 0.02 - 22 0.0133 - 26 0.0533 - 28 0.0333 - 30 0.02 - 31 0.02 - 40 0.327 - 41 0.267 - 42 0.0133 - 46 0.02 - - 55 1082 27 0 - 0 0.012 - 2 0.0407 - 3 0.000924 - 4 0.0129 - 7 0.174 - 8 0.00277 - 12 0.00555 - 13 0.0037 - 15 0.000924 - 19 0.000924 - 21 0.0213 - 22 0.00185 - 24 0.000924 - 26 0.0434 - 29 0.000924 - 30 0.00277 - 31 0.000924 - 32 0.000924 - 33 0.000924 - 37 0.00555 - 40 0.418 - 41 0.216 - 42 0.0259 - 43 0.00185 - 44 0.000924 - 45 0.000924 - 46 0.00277 - - 57 294 15 0 - 0 0.034 - 2 0.0272 - 7 0.119 - 8 0.0034 - 12 0.0102 - 13 0.0034 - 21 0.0068 - 26 0.0136 - 33 0.0034 - 37 0.0102 - 40 0.497 - 41 0.248 - 42 0.0136 - 43 0.0034 - 46 0.0068 - - 59 95 10 0 - 2 0.0211 - 4 0.0105 - 7 0.242 - 21 0.0316 - 22 0.0105 - 26 0.0737 - 37 0.0316 - 40 0.326 - 41 0.221 - 42 0.0316 - - 62 38 6 0 - 7 0.158 - 21 0.0263 - 26 0.0263 - 40 0.5 - 41 0.237 - 42 0.0526 - - 64 6 3 0 - 2 0.167 - 7 0.333 - 40 0.5 - - 68 1 1 0 - 42 1 - - 69 3 3 0 - 37 0.333 - 40 0.333 - 41 0.333 - - 50 39 9 0 - 0 0.0513 - 1 0.0513 - 13 0.0256 - 21 0.103 - 26 0.0769 - 28 0.256 - 29 0.0513 - 30 0.308 - 31 0.0769 - - 51 53 8 1 - 26 0.0189 - 40 0.679 - 41 0.113 - 42 0.0189 - 43 0.0377 - 44 0.0189 - 46 0.0189 - 47 0.0943 - - 28 8 4 0 - 40 0.5 - 42 0.125 - 43 0.25 - 47 0.125 - - 52 22 6 1 - 7 0.0455 - 21 0.0455 - 26 0.182 - 40 0.273 - 41 0.364 - 46 0.0909 - - 41 9 2 0 - 40 0.111 - 41 0.889 - - 55 47284 43 31 - 0 0.00854 - 1 2.11e-05 - 2 0.0387 - 3 0.00247 - 4 0.0117 - 5 8.46e-05 - 6 4.23e-05 - 7 0.211 - 8 0.00544 - 9 0.000656 - 10 6.34e-05 - 12 0.00364 - 13 0.00398 - 14 0.000613 - 15 0.00271 - 17 0.000106 - 19 0.0018 - 20 0.000338 - 21 0.0256 - 22 0.00235 - 23 6.34e-05 - 24 0.00343 - 25 2.11e-05 - 26 0.0759 - 28 0.000486 - 29 0.00235 - 30 0.00334 - 31 0.00131 - 32 0.000698 - 33 0.00123 - 34 0.000761 - 35 0.000423 - 37 0.00419 - 38 2.11e-05 - 39 0.000952 - 40 0.404 - 41 0.157 - 42 0.0156 - 43 0.0014 - 44 0.000909 - 45 0.00123 - 46 0.00338 - 47 0.00135 - - 0 6750 33 0 - 0 0.00252 - 2 0.0296 - 3 0.000444 - 4 0.00504 - 7 0.114 - 8 0.00296 - 12 0.000889 - 13 0.00207 - 14 0.000148 - 15 0.000593 - 19 0.00119 - 20 0.000296 - 21 0.0169 - 22 0.000148 - 23 0.000148 - 24 0.000148 - 26 0.0105 - 29 0.000593 - 30 0.00222 - 31 0.00207 - 32 0.000296 - 33 0.000148 - 34 0.00207 - 35 0.00148 - 37 0.00252 - 40 0.549 - 41 0.221 - 42 0.0246 - 43 0.00119 - 44 0.00104 - 45 0.000741 - 46 0.00252 - 47 0.00119 - - 1 94 13 0 - 0 0.0426 - 2 0.0532 - 4 0.0319 - 7 0.117 - 12 0.0106 - 21 0.0213 - 26 0.0213 - 30 0.0426 - 31 0.0213 - 33 0.0213 - 40 0.34 - 41 0.255 - 42 0.0213 - - 2 4 4 0 - 2 0.25 - 4 0.25 - 7 0.25 - 40 0.25 - - 8 38 9 0 - 0 0.0526 - 2 0.0263 - 7 0.211 - 19 0.0526 - 21 0.0526 - 26 0.0263 - 40 0.342 - 41 0.184 - 42 0.0526 - - 12 4 3 0 - 0 0.25 - 26 0.25 - 28 0.5 - - 13 94 10 0 - 0 0.0426 - 2 0.0638 - 7 0.234 - 12 0.0213 - 13 0.0106 - 21 0.0106 - 26 0.0957 - 34 0.0106 - 40 0.362 - 41 0.149 - - 14 29 7 0 - 2 0.0345 - 7 0.448 - 21 0.0345 - 26 0.069 - 30 0.0345 - 40 0.276 - 41 0.103 - - 15 17 7 0 - 7 0.0588 - 26 0.0588 - 40 0.294 - 41 0.294 - 42 0.0588 - 46 0.176 - 47 0.0588 - - 18 17 5 0 - 7 0.0588 - 21 0.176 - 26 0.0588 - 40 0.588 - 41 0.118 - - 21 265 16 0 - 0 0.00377 - 2 0.0226 - 3 0.00377 - 7 0.117 - 19 0.00377 - 21 0.0113 - 26 0.0113 - 28 0.00755 - 31 0.00377 - 35 0.00755 - 40 0.494 - 41 0.245 - 42 0.0566 - 44 0.00377 - 46 0.00377 - 47 0.00377 - - 28 12476 38 0 - 0 0.00697 - 2 0.0437 - 3 0.00176 - 4 0.013 - 7 0.248 - 8 0.00601 - 9 0.0012 - 10 8.02e-05 - 12 0.00353 - 13 0.00449 - 14 0.000721 - 15 0.00208 - 17 8.02e-05 - 19 0.00168 - 20 0.000802 - 21 0.0374 - 22 0.00297 - 23 8.02e-05 - 24 0.00513 - 26 0.0612 - 28 0.000641 - 29 0.00224 - 30 0.00313 - 31 0.00104 - 32 0.000321 - 33 0.00128 - 34 0.000481 - 35 0.000321 - 37 0.00529 - 39 0.0016 - 40 0.389 - 41 0.134 - 42 0.0119 - 43 0.0012 - 44 0.000721 - 45 0.00136 - 46 0.00361 - 47 0.00112 - - 29 8581 37 0 - 0 0.00373 - 2 0.0332 - 3 0.00629 - 4 0.0124 - 5 0.000233 - 7 0.253 - 8 0.0107 - 9 0.000699 - 10 0.000117 - 12 0.00105 - 13 0.00594 - 14 0.000583 - 15 0.00886 - 19 0.00408 - 21 0.0198 - 22 0.00431 - 24 0.00408 - 26 0.19 - 28 0.000583 - 29 0.0021 - 30 0.00501 - 31 0.00163 - 32 0.000233 - 33 0.000233 - 34 0.000117 - 35 0.000117 - 37 0.00373 - 38 0.000117 - 39 0.0021 - 40 0.295 - 41 0.117 - 42 0.00979 - 43 0.000932 - 44 0.000233 - 45 0.00128 - 46 0.000583 - 47 0.000699 - - 30 6281 37 0 - 0 0.0275 - 2 0.0393 - 3 0.00271 - 4 0.0146 - 6 0.000159 - 7 0.217 - 8 0.00494 - 9 0.000478 - 12 0.0126 - 13 0.0035 - 14 0.000955 - 15 0.00191 - 17 0.000318 - 19 0.00127 - 20 0.000318 - 21 0.0318 - 22 0.00223 - 24 0.0043 - 26 0.0715 - 28 0.000159 - 29 0.00462 - 30 0.00239 - 31 0.00127 - 32 0.00223 - 33 0.00478 - 34 0.000955 - 35 0.000159 - 37 0.00478 - 39 0.000159 - 40 0.367 - 41 0.154 - 42 0.0135 - 43 0.000955 - 44 0.00127 - 45 0.00191 - 46 0.00191 - 47 0.000478 - - 31 2695 36 0 - 0 0.00631 - 2 0.0445 - 3 0.00223 - 4 0.0137 - 6 0.000371 - 7 0.277 - 8 0.00334 - 12 0.00186 - 13 0.00445 - 14 0.00148 - 15 0.000742 - 19 0.00148 - 20 0.000371 - 21 0.0249 - 22 0.00223 - 24 0.00223 - 25 0.000371 - 26 0.0716 - 28 0.000742 - 29 0.00519 - 30 0.00334 - 31 0.000742 - 32 0.000742 - 33 0.000371 - 34 0.000371 - 35 0.000371 - 37 0.00297 - 39 0.000742 - 40 0.35 - 41 0.157 - 42 0.0122 - 43 0.00223 - 44 0.000742 - 45 0.00148 - 46 0.00148 - 47 0.000742 - - 32 1863 32 0 - 0 0.00966 - 2 0.0446 - 3 0.00215 - 4 0.0193 - 5 0.000537 - 7 0.188 - 8 0.00376 - 9 0.00161 - 10 0.000537 - 12 0.00429 - 13 0.00429 - 15 0.00107 - 17 0.00107 - 19 0.000537 - 21 0.0327 - 22 0.00376 - 24 0.0059 - 26 0.0505 - 28 0.00107 - 29 0.00107 - 30 0.00322 - 32 0.00322 - 37 0.00751 - 39 0.000537 - 40 0.429 - 41 0.144 - 42 0.0247 - 43 0.000537 - 44 0.00161 - 45 0.00161 - 46 0.00215 - 47 0.00429 - - 33 3326 33 0 - 0 0.00301 - 2 0.0427 - 3 0.0018 - 4 0.018 - 7 0.196 - 8 0.00331 - 9 0.0012 - 12 0.0018 - 13 0.00481 - 14 0.000601 - 15 0.0012 - 19 0.000902 - 20 0.000301 - 21 0.0216 - 22 0.0021 - 23 0.000301 - 24 0.00541 - 26 0.0496 - 29 0.0015 - 30 0.0021 - 31 0.000601 - 33 0.000902 - 34 0.000301 - 37 0.00241 - 39 0.000902 - 40 0.442 - 41 0.164 - 42 0.0213 - 43 0.0015 - 44 0.0012 - 45 0.0012 - 46 0.0012 - 47 0.00361 - - 41 223 9 0 - 0 0.00448 - 2 0.00448 - 3 0.00448 - 30 0.00448 - 40 0.807 - 41 0.139 - 42 0.0269 - 43 0.00448 - 46 0.00448 - - 42 82 6 0 - 7 0.0122 - 13 0.0122 - 40 0.939 - 41 0.0122 - 42 0.0122 - 46 0.0122 - - 44 13 2 0 - 40 0.0769 - 43 0.923 - - 45 212 7 0 - 7 0.0425 - 21 0.00472 - 26 0.00943 - 40 0.448 - 41 0.241 - 42 0.0142 - 46 0.241 - - 46 73 8 0 - 0 0.0274 - 2 0.0137 - 7 0.247 - 21 0.0274 - 37 0.0137 - 40 0.479 - 41 0.178 - 42 0.0137 - - 47 75 7 0 - 7 0.693 - 26 0.213 - 31 0.0133 - 40 0.0267 - 41 0.0267 - 42 0.0133 - 46 0.0133 - - 48 97 10 0 - 0 0.0206 - 2 0.0825 - 4 0.0103 - 7 0.134 - 12 0.0103 - 26 0.0619 - 37 0.0103 - 40 0.433 - 41 0.206 - 42 0.0309 - - 49 604 21 0 - 0 0.00331 - 2 0.0348 - 3 0.00166 - 4 0.00828 - 7 0.118 - 8 0.00331 - 13 0.00331 - 21 0.00993 - 26 0.0281 - 29 0.00166 - 33 0.00166 - 34 0.00331 - 35 0.00166 - 37 0.00166 - 40 0.518 - 41 0.214 - 42 0.0315 - 43 0.00331 - 44 0.00166 - 46 0.00497 - 47 0.00662 - - 55 1276 24 0 - 0 0.00549 - 1 0.000784 - 2 0.0353 - 3 0.000784 - 4 0.00392 - 7 0.143 - 8 0.00157 - 12 0.000784 - 13 0.000784 - 21 0.00862 - 26 0.0533 - 28 0.000784 - 29 0.00313 - 30 0.00784 - 31 0.00157 - 32 0.00157 - 34 0.00235 - 37 0.00705 - 40 0.472 - 41 0.226 - 42 0.0188 - 43 0.000784 - 46 0.00157 - 47 0.00235 - - 57 656 22 0 - 0 0.0107 - 2 0.0366 - 4 0.00457 - 7 0.145 - 8 0.00152 - 12 0.00305 - 14 0.00152 - 15 0.00152 - 19 0.00152 - 26 0.0244 - 29 0.00152 - 30 0.00457 - 31 0.00152 - 32 0.00152 - 33 0.00152 - 34 0.00152 - 37 0.0061 - 40 0.486 - 41 0.248 - 42 0.0122 - 43 0.00152 - 44 0.00305 - - 58 23 4 0 - 7 0.087 - 29 0.0435 - 40 0.696 - 41 0.174 - - 59 1272 26 0 - 0 0.0118 - 2 0.0645 - 3 0.000786 - 4 0.0055 - 5 0.000786 - 7 0.21 - 8 0.0055 - 12 0.00629 - 13 0.00314 - 14 0.000786 - 15 0.000786 - 19 0.000786 - 21 0.0204 - 22 0.00157 - 26 0.0558 - 29 0.00314 - 30 0.00393 - 33 0.000786 - 37 0.00472 - 40 0.411 - 41 0.166 - 42 0.0118 - 44 0.00236 - 45 0.00157 - 46 0.00472 - 47 0.00157 - - 62 57 9 0 - 0 0.0351 - 4 0.0175 - 7 0.175 - 21 0.0175 - 31 0.0175 - 37 0.0175 - 40 0.368 - 41 0.316 - 42 0.0351 - - 69 56 6 0 - 2 0.0536 - 7 0.179 - 26 0.0536 - 40 0.5 - 41 0.196 - 44 0.0179 - - 74 2 2 0 - 31 0.5 - 40 0.5 - - 57 37637 38 30 - 0 0.0109 - 2 0.0336 - 3 0.00109 - 4 0.00717 - 5 5.31e-05 - 7 0.128 - 8 0.00438 - 9 2.66e-05 - 10 0.000106 - 12 0.00476 - 13 0.00404 - 14 0.000372 - 15 0.00215 - 17 2.66e-05 - 19 0.000797 - 20 0.000239 - 21 0.0102 - 22 0.000771 - 23 5.31e-05 - 26 0.0253 - 28 0.000345 - 29 0.00361 - 30 0.00321 - 31 0.00138 - 32 0.00149 - 33 0.00159 - 34 0.000824 - 35 0.000159 - 37 0.00343 - 39 7.97e-05 - 40 0.523 - 41 0.199 - 42 0.0209 - 43 0.00186 - 44 0.00104 - 45 0.000824 - 46 0.00178 - 47 0.00133 - - 0 1140 30 0 - 0 0.0105 - 2 0.0184 - 3 0.00175 - 4 0.0123 - 7 0.113 - 8 0.0114 - 10 0.000877 - 12 0.00351 - 13 0.00614 - 15 0.00175 - 19 0.00175 - 21 0.0281 - 22 0.000877 - 26 0.0211 - 28 0.000877 - 29 0.00175 - 30 0.00439 - 31 0.0123 - 32 0.00175 - 33 0.00351 - 34 0.000877 - 35 0.00175 - 37 0.00614 - 39 0.000877 - 40 0.482 - 41 0.218 - 42 0.0281 - 44 0.00351 - 45 0.00175 - 46 0.000877 - - 8 57 8 0 - 0 0.0175 - 2 0.0702 - 7 0.123 - 29 0.0175 - 37 0.0351 - 40 0.491 - 41 0.228 - 42 0.0175 - - 12 9 4 0 - 0 0.111 - 28 0.333 - 31 0.222 - 40 0.333 - - 13 73 10 0 - 0 0.0137 - 2 0.0548 - 7 0.164 - 8 0.0137 - 26 0.0274 - 29 0.0137 - 33 0.0274 - 40 0.534 - 41 0.137 - 42 0.0137 - - 14 26 7 0 - 0 0.0385 - 2 0.0385 - 7 0.192 - 8 0.0385 - 40 0.5 - 41 0.154 - 42 0.0385 - - 15 6 4 0 - 2 0.167 - 7 0.167 - 40 0.5 - 46 0.167 - - 21 68 10 0 - 0 0.0147 - 4 0.0147 - 7 0.0735 - 21 0.0735 - 28 0.0441 - 32 0.0147 - 40 0.471 - 41 0.221 - 42 0.0588 - 46 0.0147 - - 28 2496 32 0 - 0 0.012 - 2 0.0341 - 3 0.0028 - 4 0.018 - 7 0.156 - 8 0.00401 - 10 0.000401 - 12 0.00361 - 13 0.00561 - 14 0.0016 - 15 0.0028 - 19 0.000801 - 20 0.0016 - 21 0.0148 - 26 0.0268 - 29 0.002 - 30 0.002 - 31 0.000401 - 32 0.0016 - 33 0.0012 - 34 0.000401 - 35 0.000401 - 37 0.00801 - 39 0.000401 - 40 0.508 - 41 0.163 - 42 0.018 - 43 0.000801 - 44 0.0016 - 45 0.002 - 46 0.002 - 47 0.002 - - 29 2493 30 0 - 0 0.00682 - 2 0.0253 - 3 0.00201 - 4 0.014 - 7 0.271 - 8 0.0132 - 10 0.000401 - 12 0.00281 - 13 0.01 - 14 0.0012 - 15 0.00722 - 19 0.00361 - 21 0.016 - 22 0.000802 - 23 0.000401 - 26 0.0401 - 29 0.00321 - 30 0.00361 - 31 0.000401 - 32 0.0012 - 34 0.000401 - 37 0.00441 - 39 0.000401 - 40 0.361 - 41 0.192 - 42 0.0136 - 43 0.000802 - 44 0.0012 - 45 0.0012 - 46 0.0016 - - 30 1791 27 0 - 0 0.029 - 2 0.0374 - 3 0.00112 - 4 0.0207 - 7 0.13 - 8 0.00503 - 12 0.014 - 13 0.00838 - 15 0.00391 - 19 0.00168 - 20 0.000558 - 21 0.0151 - 22 0.00279 - 26 0.0352 - 28 0.000558 - 29 0.00335 - 30 0.00391 - 31 0.00168 - 32 0.00447 - 33 0.00558 - 37 0.00112 - 40 0.419 - 41 0.229 - 42 0.0218 - 44 0.00112 - 46 0.00168 - 47 0.00168 - - 31 7097 32 0 - 0 0.0194 - 2 0.0327 - 3 0.000986 - 4 0.00592 - 7 0.131 - 8 0.00535 - 10 0.000141 - 12 0.0069 - 13 0.0038 - 14 0.000564 - 15 0.00268 - 19 0.000423 - 21 0.00972 - 22 0.00127 - 26 0.034 - 28 0.000423 - 29 0.00986 - 30 0.00211 - 31 0.00211 - 32 0.00352 - 33 0.00352 - 34 0.00141 - 35 0.000282 - 37 0.00211 - 40 0.477 - 41 0.215 - 42 0.0201 - 43 0.00366 - 44 0.00113 - 45 0.000705 - 46 0.00155 - 47 0.00127 - - 32 565 24 0 - 0 0.0159 - 2 0.0425 - 3 0.00177 - 4 0.0106 - 7 0.113 - 8 0.00354 - 12 0.0124 - 13 0.00177 - 14 0.00177 - 15 0.00177 - 19 0.00354 - 21 0.0283 - 23 0.00177 - 26 0.023 - 29 0.00531 - 30 0.00354 - 31 0.00177 - 32 0.00177 - 37 0.00708 - 40 0.487 - 41 0.196 - 42 0.0301 - 43 0.00354 - 46 0.00177 - - 33 905 26 0 - 0 0.00663 - 2 0.0365 - 4 0.0133 - 5 0.0011 - 7 0.105 - 8 0.0011 - 9 0.0011 - 12 0.00552 - 13 0.00442 - 14 0.0011 - 15 0.00221 - 19 0.0011 - 20 0.0011 - 21 0.00884 - 26 0.0177 - 29 0.00221 - 30 0.00442 - 31 0.00331 - 37 0.00552 - 40 0.543 - 41 0.19 - 42 0.032 - 43 0.00331 - 44 0.00221 - 46 0.00331 - 47 0.00442 - - 41 1622 14 0 - 2 0.00185 - 7 0.0333 - 8 0.00123 - 13 0.00185 - 15 0.000617 - 19 0.000617 - 21 0.00185 - 26 0.00308 - 40 0.763 - 41 0.179 - 42 0.00863 - 43 0.000617 - 44 0.000617 - 47 0.00308 - - 42 61 6 0 - 4 0.0328 - 21 0.0164 - 40 0.721 - 41 0.082 - 42 0.131 - 46 0.0164 - - 43 6 4 0 - 0 0.167 - 40 0.5 - 41 0.167 - 42 0.167 - - 44 8 1 0 - 43 1 - - 45 65 9 0 - 7 0.0769 - 21 0.0154 - 26 0.0308 - 29 0.0154 - 31 0.0154 - 40 0.569 - 41 0.154 - 42 0.0154 - 46 0.108 - - 46 184 13 0 - 2 0.038 - 4 0.0109 - 7 0.0435 - 13 0.00543 - 21 0.00543 - 26 0.00543 - 30 0.00543 - 33 0.00543 - 40 0.543 - 41 0.304 - 42 0.0109 - 44 0.00543 - 45 0.0163 - - 47 27 4 0 - 0 0.037 - 40 0.815 - 41 0.111 - 42 0.037 - - 48 712 17 0 - 0 0.0014 - 2 0.0435 - 4 0.00281 - 7 0.0955 - 12 0.00421 - 13 0.00281 - 21 0.00843 - 26 0.00983 - 30 0.0014 - 31 0.00281 - 37 0.0014 - 40 0.552 - 41 0.256 - 42 0.0126 - 44 0.0014 - 46 0.00281 - 47 0.0014 - - 49 1600 26 0 - 0 0.00938 - 2 0.0425 - 4 0.00313 - 5 0.000625 - 7 0.109 - 8 0.00187 - 12 0.0025 - 13 0.005 - 15 0.00187 - 20 0.000625 - 21 0.01 - 26 0.0244 - 29 0.000625 - 30 0.0025 - 31 0.000625 - 32 0.000625 - 33 0.00125 - 37 0.00438 - 40 0.514 - 41 0.233 - 42 0.0269 - 43 0.00125 - 44 0.000625 - 45 0.000625 - 46 0.00187 - 47 0.00125 - - 55 11225 30 0 - 0 0.00775 - 2 0.0394 - 3 0.00098 - 4 0.00383 - 7 0.139 - 8 0.00276 - 12 0.00454 - 13 0.00249 - 15 0.00107 - 19 0.000356 - 21 0.00775 - 22 0.000713 - 26 0.0247 - 28 0.000178 - 29 0.00205 - 30 0.0049 - 31 0.000356 - 32 0.000535 - 33 0.000802 - 34 0.00125 - 35 8.91e-05 - 37 0.00365 - 40 0.533 - 41 0.192 - 42 0.0211 - 43 0.00125 - 44 0.000624 - 45 0.000713 - 46 0.00151 - 47 0.00134 - - 57 4244 30 0 - 0 0.00683 - 2 0.028 - 3 0.000943 - 4 0.00259 - 7 0.0738 - 8 0.00448 - 12 0.00212 - 13 0.00259 - 14 0.000236 - 15 0.00212 - 19 0.000707 - 20 0.000236 - 21 0.00448 - 22 0.000943 - 26 0.0179 - 29 0.00283 - 30 0.00259 - 31 0.000707 - 32 0.00118 - 33 0.000236 - 34 0.000943 - 37 0.00283 - 40 0.621 - 41 0.192 - 42 0.0229 - 43 0.00189 - 44 0.000707 - 45 0.000236 - 46 0.000943 - 47 0.00141 - - 58 46 6 0 - 2 0.0652 - 7 0.0217 - 40 0.804 - 41 0.0435 - 42 0.0435 - 44 0.0217 - - 59 626 24 0 - 0 0.00479 - 2 0.0399 - 3 0.00319 - 4 0.0208 - 7 0.128 - 8 0.00319 - 12 0.00799 - 13 0.00479 - 17 0.0016 - 20 0.0016 - 21 0.024 - 26 0.0272 - 29 0.0016 - 30 0.00319 - 31 0.0016 - 33 0.00319 - 37 0.0016 - 40 0.494 - 41 0.193 - 42 0.024 - 43 0.0016 - 44 0.0016 - 45 0.00479 - 46 0.00319 - - 62 377 12 0 - 0 0.00265 - 2 0.0796 - 7 0.0531 - 12 0.00265 - 13 0.00796 - 21 0.00265 - 26 0.00531 - 33 0.00265 - 40 0.637 - 41 0.191 - 42 0.0133 - 46 0.00265 - - 64 28 5 0 - 0 0.0357 - 26 0.0357 - 40 0.714 - 41 0.143 - 42 0.0714 - - 67 1 1 0 - 43 1 - - 69 45 7 0 - 0 0.0222 - 2 0.0222 - 26 0.0222 - 37 0.0222 - 40 0.756 - 41 0.0889 - 42 0.0667 - - 58 317 27 20 - 0 0.0252 - 1 0.00315 - 2 0.0631 - 4 0.0599 - 7 0.271 - 8 0.0126 - 9 0.00315 - 12 0.0126 - 13 0.0158 - 15 0.0158 - 19 0.0158 - 20 0.00631 - 21 0.041 - 26 0.0315 - 28 0.0315 - 29 0.0126 - 30 0.0284 - 31 0.0158 - 32 0.00315 - 33 0.00315 - 35 0.00315 - 37 0.0126 - 40 0.202 - 41 0.0631 - 42 0.00631 - 45 0.0379 - 47 0.00315 - - 0 16 10 0 - 0 0.0625 - 1 0.0625 - 4 0.188 - 7 0.0625 - 9 0.0625 - 13 0.0625 - 29 0.0625 - 31 0.0625 - 40 0.25 - 45 0.125 - - 2 10 7 0 - 0 0.2 - 21 0.1 - 28 0.3 - 29 0.1 - 30 0.1 - 32 0.1 - 45 0.1 - - 12 3 1 0 - 28 1 - - 13 3 3 0 - 7 0.333 - 8 0.333 - 45 0.333 - - 21 3 3 0 - 4 0.333 - 21 0.333 - 28 0.333 - - 28 13 7 0 - 0 0.0769 - 2 0.0769 - 4 0.308 - 7 0.231 - 13 0.154 - 21 0.0769 - 40 0.0769 - - 29 9 4 0 - 0 0.111 - 4 0.111 - 7 0.556 - 26 0.222 - - 30 3 2 0 - 4 0.667 - 40 0.333 - - 31 18 8 0 - 7 0.556 - 15 0.0556 - 20 0.0556 - 21 0.0556 - 30 0.0556 - 37 0.0556 - 40 0.0556 - 41 0.111 - - 32 9 6 0 - 2 0.111 - 4 0.222 - 7 0.222 - 8 0.111 - 21 0.222 - 45 0.111 - - 33 9 7 0 - 4 0.111 - 7 0.333 - 8 0.111 - 13 0.111 - 26 0.111 - 30 0.111 - 40 0.111 - - 41 15 3 0 - 40 0.733 - 41 0.133 - 42 0.133 - - 46 7 4 0 - 2 0.143 - 35 0.143 - 40 0.571 - 41 0.143 - - 48 19 8 0 - 2 0.0526 - 4 0.0526 - 7 0.263 - 12 0.158 - 37 0.0526 - 40 0.211 - 41 0.158 - 45 0.0526 - - 49 14 8 0 - 2 0.0714 - 7 0.357 - 12 0.0714 - 28 0.0714 - 37 0.0714 - 40 0.214 - 41 0.0714 - 45 0.0714 - - 55 63 13 0 - 0 0.0317 - 2 0.0794 - 4 0.0159 - 7 0.365 - 19 0.0159 - 21 0.0317 - 26 0.0794 - 30 0.0317 - 31 0.0159 - 40 0.19 - 41 0.0794 - 45 0.0476 - 47 0.0159 - - 57 50 12 0 - 2 0.08 - 4 0.02 - 7 0.3 - 15 0.02 - 19 0.06 - 29 0.02 - 30 0.06 - 31 0.06 - 37 0.02 - 40 0.26 - 41 0.08 - 45 0.02 - - 62 11 6 0 - 7 0.455 - 15 0.0909 - 21 0.182 - 26 0.0909 - 40 0.0909 - 45 0.0909 - - 64 4 3 0 - 30 0.25 - 40 0.5 - 41 0.25 - - 69 30 16 0 - 0 0.0333 - 2 0.2 - 4 0.0333 - 7 0.167 - 8 0.0333 - 13 0.0333 - 15 0.0667 - 19 0.0333 - 20 0.0333 - 21 0.0667 - 26 0.0333 - 28 0.0333 - 29 0.0333 - 33 0.0333 - 40 0.133 - 41 0.0333 - - 59 2627 34 12 - 0 0.00152 - 1 0.00114 - 2 0.0152 - 3 0.0175 - 4 0.212 - 7 0.239 - 8 0.0499 - 9 0.00495 - 10 0.00266 - 12 0.000381 - 13 0.0495 - 14 0.0461 - 15 0.0236 - 17 0.00114 - 19 0.000761 - 20 0.0529 - 21 0.0487 - 22 0.00457 - 24 0.00114 - 26 0.0457 - 30 0.0164 - 31 0.0019 - 35 0.00533 - 37 0.00495 - 38 0.000761 - 39 0.00876 - 40 0.0761 - 41 0.0502 - 42 0.00571 - 43 0.000761 - 44 0.000381 - 45 0.00457 - 46 0.00533 - 47 0.000381 - - 0 6 5 0 - 4 0.167 - 7 0.333 - 9 0.167 - 21 0.167 - 26 0.167 - - 8 2 2 0 - 13 0.5 - 26 0.5 - - 13 19 8 0 - 4 0.263 - 7 0.0526 - 8 0.0526 - 13 0.158 - 14 0.211 - 20 0.158 - 21 0.0526 - 40 0.0526 - - 14 7 6 0 - 4 0.286 - 7 0.143 - 8 0.143 - 13 0.143 - 14 0.143 - 20 0.143 - - 15 2 2 0 - 4 0.5 - 47 0.5 - - 28 861 27 0 - 1 0.00232 - 2 0.0105 - 3 0.0186 - 4 0.28 - 7 0.163 - 8 0.065 - 9 0.00581 - 10 0.00348 - 13 0.0674 - 14 0.0569 - 15 0.0267 - 17 0.00232 - 20 0.0767 - 21 0.0465 - 22 0.00116 - 24 0.00116 - 26 0.0279 - 30 0.0267 - 31 0.00116 - 35 0.0105 - 37 0.00813 - 38 0.00116 - 39 0.0105 - 40 0.0511 - 41 0.0267 - 45 0.00581 - 46 0.00348 - - 29 473 25 0 - 0 0.00634 - 2 0.0127 - 3 0.0381 - 4 0.22 - 7 0.271 - 8 0.0338 - 10 0.00211 - 13 0.0359 - 14 0.0486 - 15 0.0296 - 19 0.00423 - 20 0.0507 - 21 0.0381 - 22 0.00634 - 24 0.00211 - 26 0.0592 - 30 0.0148 - 31 0.00211 - 35 0.00211 - 39 0.0169 - 40 0.0592 - 41 0.0359 - 42 0.00423 - 45 0.00423 - 46 0.00211 - - 30 399 24 0 - 2 0.0125 - 3 0.01 - 4 0.236 - 7 0.188 - 8 0.0852 - 9 0.00752 - 10 0.00251 - 13 0.0677 - 14 0.0727 - 15 0.0276 - 20 0.0501 - 21 0.0351 - 22 0.00752 - 26 0.0376 - 30 0.015 - 31 0.00501 - 35 0.00752 - 37 0.00501 - 39 0.00752 - 40 0.0652 - 41 0.0376 - 42 0.01 - 45 0.00251 - 46 0.00501 - - 31 440 26 0 - 0 0.00227 - 2 0.0159 - 3 0.00455 - 4 0.132 - 7 0.398 - 8 0.0205 - 9 0.00682 - 12 0.00227 - 13 0.0341 - 14 0.0136 - 15 0.0227 - 17 0.00227 - 20 0.0318 - 21 0.0591 - 22 0.00682 - 26 0.0545 - 30 0.00227 - 31 0.00227 - 37 0.00227 - 39 0.00682 - 40 0.107 - 41 0.0477 - 42 0.00682 - 43 0.00227 - 45 0.00682 - 46 0.00909 - - 32 110 19 0 - 2 0.0273 - 3 0.0364 - 4 0.164 - 7 0.2 - 8 0.0818 - 9 0.00909 - 10 0.00909 - 13 0.0545 - 14 0.0545 - 15 0.0273 - 20 0.0364 - 21 0.0818 - 22 0.00909 - 26 0.00909 - 30 0.0364 - 38 0.00909 - 40 0.0636 - 41 0.0818 - 46 0.00909 - - 33 146 20 0 - 1 0.00685 - 2 0.00685 - 3 0.0137 - 4 0.199 - 7 0.24 - 8 0.0342 - 10 0.00685 - 13 0.0137 - 14 0.0205 - 15 0.00685 - 20 0.0479 - 21 0.0753 - 26 0.089 - 35 0.00685 - 37 0.00685 - 40 0.089 - 41 0.103 - 42 0.0205 - 45 0.00685 - 46 0.00685 - - 55 159 15 0 - 2 0.0566 - 4 0.0252 - 7 0.289 - 21 0.0503 - 22 0.00629 - 24 0.00629 - 26 0.0818 - 30 0.0126 - 37 0.0126 - 40 0.214 - 41 0.201 - 42 0.0189 - 43 0.00629 - 44 0.00629 - 46 0.0126 - - 62 13537 29 20 - 0 0.00731 - 2 0.0228 - 3 0.000443 - 4 0.0017 - 7 0.044 - 8 0.00185 - 12 0.00362 - 13 0.000517 - 14 0.000369 - 15 0.000813 - 19 0.000591 - 21 0.00451 - 22 0.000295 - 26 0.00399 - 29 0.00118 - 30 0.000886 - 31 0.000369 - 32 0.000739 - 33 0.00111 - 34 0.000369 - 37 0.00207 - 40 0.699 - 41 0.177 - 42 0.0179 - 43 0.000517 - 44 0.000739 - 45 0.000369 - 46 0.0031 - 47 0.00244 - - 0 792 16 0 - 0 0.00758 - 2 0.0177 - 4 0.00379 - 7 0.0366 - 8 0.00253 - 13 0.00126 - 19 0.00126 - 21 0.0114 - 26 0.0265 - 33 0.00253 - 37 0.00253 - 40 0.652 - 41 0.206 - 42 0.0215 - 46 0.00379 - 47 0.00379 - - 1 31 8 0 - 0 0.0645 - 2 0.0323 - 7 0.0645 - 12 0.0968 - 37 0.0323 - 40 0.419 - 41 0.258 - 42 0.0323 - - 12 37 3 0 - 40 0.784 - 41 0.189 - 46 0.027 - - 14 26 3 0 - 2 0.0769 - 40 0.885 - 46 0.0385 - - 28 1599 24 0 - 0 0.0075 - 2 0.0275 - 4 0.0025 - 7 0.0619 - 8 0.00375 - 12 0.00313 - 14 0.00125 - 15 0.00188 - 19 0.00125 - 21 0.00813 - 26 0.00375 - 29 0.00125 - 30 0.000625 - 31 0.000625 - 32 0.00125 - 33 0.0025 - 37 0.005 - 40 0.634 - 41 0.204 - 42 0.0219 - 43 0.00125 - 44 0.00125 - 46 0.00375 - 47 0.000625 - - 29 1679 23 0 - 0 0.00596 - 2 0.0381 - 3 0.00179 - 4 0.00357 - 7 0.0643 - 8 0.00596 - 12 0.00119 - 14 0.000596 - 15 0.00357 - 21 0.00357 - 22 0.00119 - 26 0.00238 - 29 0.00179 - 30 0.00179 - 31 0.000596 - 32 0.000596 - 37 0.00238 - 40 0.671 - 41 0.172 - 42 0.0125 - 44 0.000596 - 46 0.00238 - 47 0.00238 - - 30 1088 23 0 - 0 0.0165 - 2 0.0239 - 3 0.000919 - 4 0.00368 - 7 0.0469 - 8 0.000919 - 12 0.011 - 13 0.000919 - 14 0.000919 - 19 0.000919 - 21 0.00368 - 22 0.000919 - 26 0.00276 - 29 0.0046 - 30 0.000919 - 32 0.000919 - 33 0.00184 - 40 0.626 - 41 0.226 - 42 0.0184 - 45 0.00276 - 46 0.00368 - 47 0.000919 - - 31 2064 26 0 - 0 0.00678 - 2 0.0252 - 3 0.000484 - 4 0.000969 - 7 0.0766 - 8 0.000969 - 12 0.00436 - 14 0.000484 - 15 0.000484 - 19 0.000484 - 21 0.00775 - 22 0.000484 - 26 0.00388 - 29 0.00145 - 30 0.00242 - 31 0.000484 - 32 0.00194 - 33 0.00145 - 34 0.00194 - 37 0.00242 - 40 0.636 - 41 0.195 - 42 0.0233 - 43 0.00145 - 46 0.00145 - 47 0.00194 - - 32 768 19 0 - 0 0.0143 - 2 0.0273 - 4 0.0013 - 7 0.0352 - 12 0.00391 - 13 0.0026 - 19 0.0013 - 21 0.00781 - 26 0.00391 - 29 0.0026 - 30 0.0013 - 32 0.0013 - 34 0.0013 - 40 0.647 - 41 0.224 - 42 0.0156 - 44 0.0026 - 46 0.00391 - 47 0.0026 - - 33 1187 17 0 - 0 0.00758 - 2 0.027 - 7 0.0278 - 12 0.00421 - 13 0.000842 - 19 0.000842 - 21 0.00253 - 26 0.00505 - 30 0.000842 - 33 0.00168 - 37 0.00337 - 40 0.732 - 41 0.152 - 42 0.0236 - 44 0.00168 - 46 0.00337 - 47 0.00505 - - 41 1264 6 0 - 7 0.00158 - 40 0.902 - 41 0.087 - 42 0.00791 - 44 0.000791 - 46 0.000791 - - 42 63 5 0 - 7 0.0159 - 40 0.889 - 41 0.0635 - 42 0.0159 - 46 0.0159 - - 45 324 6 0 - 21 0.00309 - 40 0.873 - 41 0.0741 - 42 0.0216 - 46 0.0216 - 47 0.00617 - - 48 188 11 0 - 2 0.00532 - 4 0.00532 - 7 0.0851 - 21 0.00532 - 26 0.00532 - 31 0.00532 - 37 0.0106 - 40 0.574 - 41 0.293 - 42 0.00532 - 46 0.00532 - - 49 234 8 0 - 0 0.00427 - 2 0.0256 - 7 0.0342 - 12 0.00427 - 40 0.701 - 41 0.192 - 42 0.0342 - 46 0.00427 - - 55 1193 18 0 - 0 0.00922 - 2 0.0277 - 3 0.000838 - 4 0.000838 - 7 0.0285 - 8 0.00168 - 12 0.00503 - 26 0.000838 - 33 0.00168 - 37 0.000838 - 40 0.733 - 41 0.163 - 42 0.0142 - 43 0.00168 - 44 0.00168 - 45 0.000838 - 46 0.00168 - 47 0.00587 - - 57 699 16 0 - 0 0.00572 - 2 0.01 - 4 0.00143 - 7 0.0243 - 8 0.00286 - 12 0.00143 - 13 0.00286 - 15 0.00143 - 21 0.00286 - 29 0.00143 - 31 0.00143 - 32 0.00143 - 40 0.758 - 41 0.162 - 42 0.02 - 47 0.00286 - - 58 17 1 0 - 40 1 - - 59 102 11 0 - 0 0.0098 - 2 0.0196 - 7 0.049 - 12 0.0098 - 19 0.0098 - 26 0.0098 - 37 0.0098 - 40 0.667 - 41 0.196 - 42 0.0098 - 47 0.0098 - - 62 50 4 0 - 2 0.06 - 40 0.76 - 41 0.16 - 45 0.02 - - 64 13660 26 19 - 0 0.00234 - 2 0.0104 - 4 0.00022 - 5 7.32e-05 - 7 0.00425 - 8 0.000146 - 12 0.00102 - 13 0.000293 - 15 7.32e-05 - 19 0.000366 - 21 0.000659 - 26 0.00022 - 29 0.000293 - 30 0.000146 - 31 7.32e-05 - 32 0.000146 - 33 0.00022 - 34 0.000146 - 37 0.000366 - 40 0.842 - 41 0.117 - 42 0.0141 - 43 0.0011 - 44 0.000439 - 46 0.00132 - 47 0.00271 - - 0 384 11 0 - 2 0.0026 - 7 0.00781 - 12 0.0026 - 15 0.0026 - 21 0.0026 - 40 0.76 - 41 0.206 - 42 0.00781 - 43 0.0026 - 46 0.0026 - 47 0.0026 - - 21 14 3 0 - 7 0.0714 - 40 0.571 - 41 0.357 - - 28 886 15 0 - 0 0.00903 - 2 0.0158 - 5 0.00113 - 7 0.0147 - 8 0.00113 - 12 0.00226 - 21 0.00339 - 33 0.00113 - 37 0.00226 - 40 0.699 - 41 0.218 - 42 0.0237 - 43 0.00113 - 46 0.00451 - 47 0.00339 - - 29 4524 17 0 - 0 0.00133 - 2 0.0124 - 4 0.000221 - 7 0.00133 - 8 0.000221 - 13 0.000442 - 19 0.000442 - 21 0.000442 - 29 0.000663 - 30 0.000221 - 37 0.000663 - 40 0.914 - 41 0.0573 - 42 0.00685 - 43 0.000442 - 46 0.000663 - 47 0.00287 - - 30 513 12 0 - 0 0.0039 - 2 0.0117 - 7 0.00975 - 12 0.0039 - 21 0.00195 - 30 0.00195 - 32 0.00195 - 40 0.768 - 41 0.183 - 42 0.00585 - 44 0.0039 - 46 0.0039 - - 31 497 12 0 - 2 0.0121 - 7 0.00402 - 12 0.00201 - 26 0.00201 - 29 0.00201 - 40 0.779 - 41 0.171 - 42 0.0181 - 43 0.00201 - 44 0.00201 - 46 0.00201 - 47 0.00402 - - 32 1197 13 0 - 0 0.00251 - 2 0.0109 - 7 0.00334 - 12 0.00167 - 13 0.000835 - 19 0.000835 - 21 0.000835 - 32 0.000835 - 34 0.000835 - 40 0.785 - 41 0.17 - 42 0.0209 - 47 0.00167 - - 33 1314 12 0 - 0 0.00381 - 2 0.0122 - 7 0.00228 - 19 0.000761 - 31 0.000761 - 40 0.867 - 41 0.0883 - 42 0.0183 - 43 0.000761 - 44 0.000761 - 46 0.00152 - 47 0.00381 - - 41 1017 7 0 - 7 0.000983 - 21 0.000983 - 40 0.887 - 41 0.0895 - 42 0.0167 - 43 0.00295 - 47 0.00197 - - 42 45 4 0 - 40 0.844 - 41 0.0444 - 42 0.0889 - 47 0.0222 - - 44 3 2 0 - 40 0.333 - 43 0.667 - - 48 353 6 0 - 2 0.00567 - 7 0.0085 - 40 0.822 - 41 0.159 - 42 0.00283 - 47 0.00283 - - 49 245 9 0 - 0 0.00408 - 2 0.0163 - 7 0.00408 - 19 0.00408 - 26 0.00408 - 33 0.00408 - 40 0.784 - 41 0.167 - 42 0.0122 - - 55 1264 13 0 - 0 0.00158 - 2 0.00791 - 4 0.00158 - 7 0.00949 - 12 0.00316 - 13 0.000791 - 26 0.000791 - 40 0.803 - 41 0.147 - 42 0.019 - 44 0.000791 - 46 0.00237 - 47 0.00237 - - 57 868 12 0 - 0 0.00346 - 2 0.0104 - 7 0.00346 - 12 0.0023 - 33 0.00115 - 34 0.00115 - 40 0.829 - 41 0.121 - 42 0.0219 - 43 0.0023 - 46 0.0023 - 47 0.00115 - - 58 60 3 0 - 40 0.95 - 41 0.0333 - 47 0.0167 - - 59 89 5 0 - 0 0.0112 - 2 0.0225 - 40 0.73 - 41 0.191 - 42 0.0449 - - 62 197 7 0 - 7 0.00508 - 40 0.827 - 41 0.142 - 42 0.0102 - 43 0.00508 - 44 0.00508 - 47 0.00508 - - 64 36 4 0 - 40 0.778 - 41 0.139 - 42 0.0556 - 43 0.0278 - - 65 23 3 0 - 40 0.565 - 46 0.261 - 47 0.174 - - 66 5 2 0 - 40 0.6 - 46 0.4 - - 67 16 5 0 - 7 0.0625 - 40 0.375 - 42 0.0625 - 46 0.375 - 47 0.125 - - 68 161 12 4 - 0 0.0124 - 2 0.00621 - 4 0.00621 - 7 0.00621 - 13 0.0124 - 21 0.00621 - 26 0.00621 - 31 0.00621 - 40 0.671 - 41 0.217 - 42 0.0435 - 46 0.00621 - - 4 1 1 0 - 13 1 - - 29 4 3 0 - 7 0.25 - 26 0.25 - 40 0.5 - - 55 15 4 0 - 21 0.0667 - 40 0.733 - 41 0.0667 - 42 0.133 - - 57 1 1 0 - 31 1 - - 69 48590 32 19 - 0 0.00926 - 2 0.0818 - 3 8.23e-05 - 4 0.00134 - 5 6.17e-05 - 7 0.0134 - 8 0.000535 - 12 0.00323 - 13 0.000288 - 14 0.000391 - 15 0.000412 - 19 0.000535 - 20 0.000185 - 21 0.00241 - 22 0.000144 - 26 0.00161 - 28 0.000144 - 29 0.00158 - 30 0.000391 - 31 0.000206 - 32 0.00072 - 33 0.00113 - 34 0.000144 - 37 0.000782 - 40 0.656 - 41 0.198 - 42 0.02 - 43 0.00111 - 44 0.000741 - 45 0.000226 - 46 0.0022 - 47 0.00142 - - 0 14471 30 0 - 0 0.00947 - 2 0.0333 - 4 0.00104 - 5 6.91e-05 - 7 0.00442 - 8 6.91e-05 - 12 0.00228 - 13 0.000138 - 14 0.000346 - 15 0.000276 - 19 0.000691 - 20 6.91e-05 - 21 0.000829 - 22 6.91e-05 - 26 0.00076 - 28 0.000138 - 29 0.00131 - 30 0.000207 - 31 6.91e-05 - 32 0.00111 - 33 0.000967 - 37 0.000276 - 40 0.728 - 41 0.189 - 42 0.0207 - 43 0.00159 - 44 0.000622 - 45 6.91e-05 - 46 0.00111 - 47 0.00117 - - 1 372 15 0 - 0 0.0188 - 2 0.0457 - 7 0.00538 - 12 0.00538 - 15 0.00269 - 21 0.00538 - 26 0.00538 - 31 0.00269 - 32 0.00538 - 37 0.00269 - 40 0.645 - 41 0.228 - 42 0.0161 - 43 0.00538 - 46 0.00538 - - 2 3353 26 0 - 0 0.00328 - 2 0.00746 - 3 0.000298 - 4 0.00537 - 7 0.0197 - 8 0.00298 - 12 0.000895 - 13 0.00119 - 14 0.00209 - 15 0.000596 - 19 0.000298 - 20 0.00179 - 21 0.00358 - 26 0.00388 - 28 0.000895 - 29 0.000298 - 31 0.000298 - 32 0.000298 - 37 0.000298 - 40 0.775 - 41 0.15 - 42 0.0155 - 43 0.000895 - 45 0.000298 - 46 0.00239 - 47 0.000298 - - 4 29 3 0 - 2 0.172 - 40 0.759 - 41 0.069 - - 12 7932 26 0 - 0 0.00693 - 2 0.0241 - 4 0.000504 - 5 0.000126 - 7 0.00403 - 8 0.000504 - 12 0.00277 - 13 0.000126 - 14 0.000378 - 15 0.000252 - 19 0.000252 - 21 0.00063 - 26 0.000378 - 29 0.00126 - 30 0.000252 - 31 0.000126 - 32 0.000504 - 33 0.00151 - 37 0.000126 - 40 0.759 - 41 0.175 - 42 0.0173 - 43 0.00113 - 44 0.000756 - 46 0.000756 - 47 0.00151 - - 15 2 1 0 - 46 1 - - 21 2998 22 0 - 0 0.006 - 2 0.0317 - 4 0.000667 - 7 0.004 - 12 0.00167 - 14 0.000667 - 15 0.000334 - 19 0.001 - 21 0.000334 - 26 0.000334 - 28 0.000334 - 29 0.001 - 32 0.000334 - 33 0.000334 - 37 0.000334 - 40 0.662 - 41 0.255 - 42 0.027 - 43 0.000667 - 45 0.000334 - 46 0.00367 - 47 0.002 - - 26 12919 31 0 - 0 0.016 - 2 0.0296 - 3 0.000232 - 4 0.0017 - 5 7.74e-05 - 7 0.0358 - 8 0.000774 - 12 0.00658 - 13 0.000464 - 14 0.000155 - 15 0.000697 - 19 0.000774 - 21 0.00441 - 22 0.000464 - 26 0.00348 - 28 7.74e-05 - 29 0.00333 - 30 0.000774 - 31 0.000464 - 32 0.000774 - 33 0.00217 - 34 0.00031 - 37 0.00224 - 40 0.666 - 41 0.197 - 42 0.0184 - 43 0.000697 - 44 0.000851 - 45 0.000542 - 46 0.00279 - 47 0.00224 - - 28 80 8 0 - 0 0.0125 - 2 0.0375 - 7 0.0125 - 8 0.0125 - 40 0.712 - 41 0.188 - 42 0.0125 - 46 0.0125 - - 29 67 6 0 - 2 0.0597 - 7 0.0149 - 26 0.0149 - 40 0.597 - 41 0.254 - 42 0.0597 - - 41 356 8 0 - 2 0.419 - 26 0.00281 - 37 0.00281 - 40 0.242 - 41 0.312 - 42 0.0169 - 46 0.00281 - 47 0.00281 - - 42 25 4 0 - 2 0.04 - 40 0.36 - 41 0.12 - 42 0.48 - - 44 2 2 0 - 40 0.5 - 43 0.5 - - 45 144 6 0 - 2 0.0625 - 40 0.618 - 41 0.215 - 42 0.0139 - 46 0.0833 - 47 0.00694 - - 47 3672 10 0 - 2 0.69 - 4 0.000545 - 7 0.000817 - 21 0.00735 - 30 0.00109 - 34 0.000545 - 41 0.27 - 42 0.0248 - 44 0.00218 - 46 0.00245 - - 49 1916 19 0 - 0 0.00678 - 2 0.0339 - 7 0.00365 - 12 0.00365 - 13 0.000522 - 15 0.000522 - 20 0.000522 - 21 0.000522 - 26 0.000522 - 29 0.000522 - 34 0.000522 - 40 0.724 - 41 0.196 - 42 0.0209 - 43 0.00261 - 44 0.00104 - 45 0.000522 - 46 0.00157 - 47 0.00104 - - 50 47 7 0 - 2 0.0426 - 4 0.0426 - 7 0.0213 - 20 0.0213 - 40 0.574 - 41 0.277 - 42 0.0213 - - 57 48 3 0 - 2 0.0208 - 40 0.875 - 41 0.104 - - 58 21 3 0 - 32 0.0476 - 40 0.857 - 41 0.0952 - - 74 23 8 1 - 4 0.0435 - 7 0.13 - 8 0.0435 - 26 0.087 - 28 0.0435 - 40 0.261 - 41 0.0435 - 47 0.348 - - 29 5 4 0 - 4 0.2 - 8 0.2 - 26 0.2 - 40 0.4 - -70 183 17 7 - 0 0.0109 - 2 0.0109 - 4 0.164 - 6 0.00546 - 7 0.0109 - 8 0.317 - 9 0.0328 - 13 0.0874 - 14 0.109 - 15 0.0109 - 19 0.175 - 20 0.0109 - 21 0.0109 - 26 0.0109 - 41 0.0219 - 45 0.00546 - 46 0.00546 - - 8 58 11 0 - 2 0.0345 - 4 0.259 - 7 0.0345 - 8 0.0172 - 9 0.0517 - 13 0.121 - 14 0.172 - 15 0.0172 - 19 0.259 - 20 0.0172 - 41 0.0172 - - 21 2 2 0 - 0 0.5 - 8 0.5 - - 37 56 3 0 - 8 0.946 - 21 0.0357 - 45 0.0179 - - 45 1 1 0 - 6 1 - - 47 59 11 1 - 0 0.0169 - 4 0.254 - 8 0.0169 - 9 0.0508 - 13 0.136 - 14 0.169 - 15 0.0169 - 19 0.271 - 20 0.0169 - 26 0.0169 - 41 0.0339 - - 57 2 2 0 - 26 0.5 - 41 0.5 - - 48 1 1 0 - 46 1 - - 57 2 2 0 - 26 0.5 - 41 0.5 - -71 4205 34 8 - 0 0.0219 - 2 0.00166 - 3 0.00666 - 4 0.263 - 5 0.0109 - 7 0.00951 - 8 0.0533 - 9 0.00143 - 10 0.0019 - 12 0.0133 - 13 0.0604 - 14 0.0818 - 15 0.113 - 16 0.00143 - 17 0.0019 - 19 0.236 - 20 0.0276 - 21 0.0252 - 26 0.0285 - 28 0.000951 - 29 0.000951 - 30 0.0109 - 31 0.00856 - 32 0.000476 - 34 0.000476 - 35 0.000476 - 39 0.000476 - 40 0.00309 - 41 0.0109 - 43 0.000476 - 44 0.000476 - 45 0.00143 - 46 0.000238 - 47 0.000476 - - 7 30 7 0 - 4 0.3 - 8 0.0667 - 13 0.0333 - 14 0.0667 - 15 0.233 - 19 0.2 - 20 0.1 - - 8 23 7 0 - 4 0.217 - 8 0.087 - 13 0.348 - 14 0.13 - 15 0.13 - 19 0.0435 - 40 0.0435 - - 21 45 14 0 - 0 0.0667 - 2 0.0222 - 4 0.289 - 7 0.0222 - 8 0.0222 - 12 0.0222 - 13 0.0222 - 14 0.0444 - 15 0.133 - 19 0.222 - 20 0.0444 - 21 0.0222 - 28 0.0444 - 40 0.0222 - - 37 2029 31 3 - 0 0.0202 - 2 0.00148 - 3 0.0069 - 4 0.259 - 5 0.0113 - 7 0.00936 - 8 0.0591 - 9 0.00148 - 10 0.00197 - 12 0.0128 - 13 0.0586 - 14 0.0808 - 15 0.108 - 16 0.00148 - 17 0.00197 - 19 0.235 - 20 0.0261 - 21 0.036 - 26 0.0291 - 29 0.000986 - 30 0.0113 - 31 0.00887 - 32 0.000493 - 34 0.000493 - 35 0.000493 - 39 0.000493 - 40 0.00246 - 41 0.0113 - 43 0.000493 - 44 0.000493 - 45 0.00148 - - 2 6 2 0 - 4 0.833 - 26 0.167 - - 21 21 9 0 - 0 0.0476 - 4 0.19 - 8 0.19 - 13 0.0952 - 15 0.0476 - 19 0.238 - 20 0.0952 - 21 0.0476 - 31 0.0476 - - 49 6 3 0 - 4 0.167 - 5 0.333 - 19 0.5 - - 40 1 1 0 - 46 1 - - 46 1 1 0 - 47 1 - - 47 2063 33 5 - 0 0.0223 - 2 0.00145 - 3 0.00679 - 4 0.268 - 5 0.0111 - 7 0.00969 - 8 0.048 - 9 0.00145 - 10 0.00194 - 12 0.0136 - 13 0.0606 - 14 0.0834 - 15 0.115 - 16 0.00145 - 17 0.00194 - 19 0.241 - 20 0.0281 - 21 0.015 - 26 0.0291 - 28 0.000969 - 29 0.000969 - 30 0.0111 - 31 0.00873 - 32 0.000485 - 34 0.000485 - 35 0.000485 - 39 0.000485 - 40 0.00291 - 41 0.0111 - 43 0.000485 - 44 0.000485 - 45 0.00145 - 47 0.000485 - - 7 30 7 0 - 4 0.3 - 8 0.0667 - 13 0.0333 - 14 0.0667 - 15 0.233 - 19 0.2 - 20 0.1 - - 8 18 6 0 - 4 0.278 - 8 0.111 - 13 0.222 - 14 0.167 - 15 0.167 - 19 0.0556 - - 21 43 12 0 - 0 0.0698 - 4 0.302 - 7 0.0233 - 8 0.0233 - 12 0.0233 - 13 0.0233 - 14 0.0465 - 15 0.14 - 19 0.233 - 20 0.0465 - 28 0.0465 - 40 0.0233 - - 46 1 1 0 - 47 1 - - 55 4 3 0 - 0 0.5 - 4 0.25 - 12 0.25 - - 55 4 3 0 - 0 0.5 - 4 0.25 - 12 0.25 - -72 15188 37 29 - 0 0.257 - 2 0.000856 - 3 0.00356 - 4 0.0405 - 5 0.000922 - 7 0.0239 - 8 0.0117 - 9 0.000527 - 10 0.000856 - 12 0.0985 - 13 0.0189 - 14 0.0197 - 15 0.0309 - 16 0.000329 - 17 0.000132 - 18 0.000263 - 19 0.0643 - 20 0.00382 - 21 0.0426 - 22 0.000395 - 23 0.000132 - 26 0.00375 - 28 0.00224 - 29 0.155 - 30 0.000329 - 31 0.0023 - 32 0.0744 - 33 0.128 - 34 0.000263 - 39 0.000593 - 40 0.000658 - 41 0.00974 - 42 0.000263 - 43 0.000395 - 44 0.000461 - 45 0.000988 - 46 0.000132 - - 2 8 3 0 - 7 0.125 - 13 0.625 - 14 0.25 - - 3 9 3 0 - 7 0.778 - 8 0.111 - 14 0.111 - - 4 71 11 1 - 0 0.225 - 7 0.211 - 8 0.0282 - 12 0.0986 - 13 0.169 - 15 0.113 - 18 0.0141 - 21 0.0141 - 29 0.0141 - 32 0.0423 - 33 0.0704 - - 35 4 2 0 - 8 0.5 - 13 0.5 - - 7 358 24 0 - 0 0.00559 - 3 0.00279 - 4 0.154 - 7 0.014 - 8 0.0559 - 9 0.00279 - 10 0.00838 - 13 0.0223 - 14 0.0922 - 15 0.19 - 16 0.00279 - 19 0.237 - 20 0.0279 - 21 0.0447 - 22 0.00279 - 23 0.00279 - 28 0.00279 - 29 0.0279 - 30 0.00559 - 31 0.0251 - 32 0.00838 - 33 0.0168 - 41 0.0447 - 45 0.00279 - - 8 76 17 5 - 0 0.0263 - 4 0.0921 - 7 0.0789 - 8 0.0658 - 13 0.329 - 14 0.171 - 15 0.0395 - 17 0.0132 - 19 0.0658 - 20 0.0263 - 29 0.0132 - 31 0.0132 - 40 0.0132 - 41 0.0132 - 42 0.0132 - 45 0.0132 - 46 0.0132 - - 21 1 1 0 - 17 1 - - 23 2 1 0 - 7 1 - - 36 30 6 0 - 8 0.167 - 13 0.467 - 14 0.267 - 31 0.0333 - 41 0.0333 - 45 0.0333 - - 37 25 10 0 - 0 0.08 - 4 0.28 - 7 0.08 - 13 0.04 - 15 0.12 - 19 0.2 - 20 0.08 - 29 0.04 - 40 0.04 - 42 0.04 - - 47 2 1 0 - 7 1 - - 9 3 3 0 - 12 0.333 - 14 0.333 - 15 0.333 - - 10 6 2 0 - 7 0.833 - 13 0.167 - - 13 186 16 9 - 0 0.269 - 2 0.0108 - 4 0.0806 - 7 0.145 - 8 0.0108 - 12 0.0269 - 13 0.0645 - 14 0.0323 - 15 0.0323 - 19 0.0806 - 21 0.0215 - 26 0.0215 - 29 0.0753 - 33 0.086 - 41 0.0376 - 44 0.00538 - - 2 5 4 0 - 0 0.4 - 13 0.2 - 14 0.2 - 29 0.2 - - 4 5 3 0 - 0 0.2 - 7 0.6 - 19 0.2 - - 8 25 13 0 - 0 0.24 - 2 0.04 - 7 0.04 - 13 0.08 - 14 0.04 - 15 0.04 - 19 0.04 - 21 0.12 - 26 0.04 - 29 0.08 - 33 0.12 - 41 0.08 - 44 0.04 - - 13 13 8 0 - 0 0.231 - 7 0.231 - 8 0.0769 - 12 0.0769 - 19 0.154 - 21 0.0769 - 29 0.0769 - 33 0.0769 - - 34 39 13 0 - 0 0.103 - 2 0.0256 - 4 0.256 - 7 0.128 - 12 0.0256 - 13 0.0513 - 14 0.0256 - 15 0.0513 - 19 0.179 - 26 0.0256 - 29 0.0256 - 33 0.0256 - 41 0.0769 - - 35 14 8 0 - 0 0.286 - 4 0.0714 - 7 0.286 - 14 0.0714 - 19 0.0714 - 26 0.0714 - 29 0.0714 - 41 0.0714 - - 36 58 11 0 - 0 0.362 - 7 0.121 - 12 0.0172 - 13 0.121 - 14 0.0345 - 15 0.0172 - 19 0.0345 - 26 0.0172 - 29 0.103 - 33 0.155 - 41 0.0172 - - 70 7 4 0 - 0 0.286 - 4 0.286 - 8 0.143 - 15 0.286 - - 71 2 1 0 - 4 1 - - 14 114 16 6 - 0 0.307 - 2 0.0439 - 4 0.0263 - 7 0.0526 - 8 0.0175 - 12 0.0439 - 13 0.0175 - 15 0.00877 - 19 0.0965 - 21 0.0175 - 26 0.0351 - 29 0.105 - 32 0.202 - 34 0.00877 - 41 0.00877 - 45 0.00877 - - 8 15 8 0 - 0 0.2 - 12 0.0667 - 19 0.0667 - 21 0.0667 - 29 0.2 - 32 0.267 - 34 0.0667 - 45 0.0667 - - 15 2 2 0 - 4 0.5 - 29 0.5 - - 34 17 9 0 - 0 0.294 - 4 0.0588 - 7 0.176 - 12 0.0588 - 15 0.0588 - 19 0.0588 - 26 0.0588 - 29 0.0588 - 32 0.176 - - 35 5 4 0 - 0 0.2 - 4 0.2 - 12 0.2 - 26 0.4 - - 36 48 8 0 - 0 0.354 - 2 0.104 - 13 0.0417 - 19 0.0833 - 21 0.0208 - 29 0.0833 - 32 0.292 - 41 0.0208 - - 71 3 3 0 - 8 0.333 - 12 0.333 - 19 0.333 - - 15 18 6 0 - 7 0.0556 - 13 0.278 - 14 0.0556 - 15 0.5 - 16 0.0556 - 33 0.0556 - - 21 12 6 0 - 0 0.167 - 4 0.0833 - 7 0.333 - 8 0.0833 - 12 0.167 - 19 0.167 - - 31 2 2 0 - 13 0.5 - 14 0.5 - - 32 1 1 0 - 28 1 - - 34 4214 29 1 - 0 0.274 - 2 0.000475 - 3 0.00522 - 4 0.0282 - 5 0.00142 - 7 0.00878 - 8 0.00807 - 9 0.000475 - 10 0.000237 - 12 0.133 - 13 0.0157 - 14 0.0164 - 15 0.0216 - 16 0.000237 - 18 0.000237 - 19 0.0356 - 20 0.00119 - 21 0.046 - 26 0.000949 - 28 0.00119 - 29 0.159 - 31 0.000949 - 32 0.0729 - 33 0.161 - 39 0.000712 - 41 0.00617 - 42 0.000237 - 44 0.000237 - 45 0.000475 - - 21 2 1 0 - 13 1 - - 35 2343 27 2 - 0 0.268 - 3 0.00128 - 4 0.0448 - 7 0.0128 - 8 0.00512 - 9 0.000427 - 10 0.000854 - 12 0.0657 - 13 0.0111 - 14 0.00896 - 15 0.0188 - 19 0.0905 - 20 0.00512 - 21 0.0448 - 22 0.000854 - 26 0.0064 - 28 0.00427 - 29 0.193 - 31 0.000854 - 32 0.0952 - 33 0.111 - 34 0.000427 - 40 0.000854 - 41 0.00683 - 43 0.00128 - 44 0.000427 - 45 0.000854 - - 21 5 4 0 - 19 0.4 - 20 0.2 - 26 0.2 - 33 0.2 - - 49 1 1 0 - 28 1 - - 36 159 12 0 - 3 0.0126 - 8 0.201 - 9 0.00629 - 10 0.00629 - 13 0.371 - 14 0.302 - 15 0.0566 - 21 0.00629 - 30 0.00629 - 31 0.00629 - 39 0.0189 - 45 0.00629 - - 41 6 6 0 - 0 0.167 - 12 0.167 - 15 0.167 - 31 0.167 - 45 0.167 - 46 0.167 - - 45 2 1 0 - 8 1 - - 47 7352 36 19 - 0 0.266 - 2 0.000408 - 3 0.00354 - 4 0.0415 - 5 0.000952 - 7 0.0181 - 8 0.00871 - 9 0.000408 - 10 0.000816 - 12 0.102 - 13 0.00789 - 14 0.0139 - 15 0.0305 - 16 0.000272 - 17 0.000136 - 18 0.000272 - 19 0.0664 - 20 0.00394 - 21 0.0435 - 22 0.000408 - 23 0.000136 - 26 0.00367 - 28 0.00231 - 29 0.161 - 30 0.000272 - 31 0.00218 - 32 0.0768 - 33 0.132 - 34 0.000272 - 39 0.000408 - 40 0.00068 - 41 0.00952 - 42 0.000272 - 43 0.000408 - 44 0.000408 - 45 0.000816 - - 3 5 1 0 - 7 1 - - 4 61 10 0 - 0 0.262 - 7 0.148 - 12 0.115 - 13 0.164 - 15 0.131 - 18 0.0164 - 21 0.0164 - 29 0.0164 - 32 0.0492 - 33 0.082 - - 7 358 24 0 - 0 0.00559 - 3 0.00279 - 4 0.154 - 7 0.014 - 8 0.0559 - 9 0.00279 - 10 0.00838 - 13 0.0223 - 14 0.0922 - 15 0.19 - 16 0.00279 - 19 0.237 - 20 0.0279 - 21 0.0447 - 22 0.00279 - 23 0.00279 - 28 0.00279 - 29 0.0279 - 30 0.00559 - 31 0.0251 - 32 0.00838 - 33 0.0168 - 41 0.0447 - 45 0.00279 - - 8 31 12 0 - 0 0.0645 - 4 0.226 - 7 0.194 - 13 0.0323 - 15 0.0968 - 17 0.0323 - 19 0.161 - 20 0.0645 - 29 0.0323 - 40 0.0323 - 41 0.0323 - 42 0.0323 - - 9 2 2 0 - 12 0.5 - 15 0.5 - - 10 4 1 0 - 7 1 - - 13 163 13 0 - 0 0.307 - 4 0.092 - 7 0.147 - 8 0.0123 - 12 0.0307 - 15 0.0368 - 19 0.092 - 21 0.0245 - 26 0.0245 - 29 0.0859 - 33 0.0982 - 41 0.0429 - 44 0.00613 - - 14 107 14 0 - 0 0.327 - 4 0.028 - 7 0.0561 - 8 0.0187 - 12 0.0467 - 15 0.00935 - 19 0.103 - 21 0.0187 - 26 0.0374 - 29 0.112 - 32 0.215 - 34 0.00935 - 41 0.00935 - 45 0.00935 - - 15 2 2 0 - 7 0.5 - 33 0.5 - - 21 11 5 0 - 0 0.182 - 4 0.0909 - 7 0.364 - 12 0.182 - 19 0.182 - - 32 1 1 0 - 28 1 - - 34 4153 29 0 - 0 0.278 - 2 0.000482 - 3 0.0053 - 4 0.0287 - 5 0.00144 - 7 0.00891 - 8 0.00722 - 9 0.000482 - 10 0.000241 - 12 0.135 - 13 0.0065 - 14 0.0125 - 15 0.0219 - 16 0.000241 - 18 0.000241 - 19 0.0361 - 20 0.0012 - 21 0.0467 - 26 0.000963 - 28 0.0012 - 29 0.161 - 31 0.000963 - 32 0.0739 - 33 0.164 - 39 0.000722 - 41 0.00602 - 42 0.000241 - 44 0.000241 - 45 0.000482 - - 35 2312 26 0 - 0 0.271 - 3 0.0013 - 4 0.0433 - 7 0.013 - 8 0.00433 - 10 0.000865 - 12 0.0666 - 13 0.00519 - 14 0.00692 - 15 0.019 - 19 0.0917 - 20 0.00519 - 21 0.0437 - 22 0.000865 - 26 0.00649 - 28 0.00433 - 29 0.196 - 31 0.000865 - 32 0.0965 - 33 0.112 - 34 0.000433 - 40 0.000865 - 41 0.00692 - 43 0.0013 - 44 0.000433 - 45 0.000865 - - 49 2 2 0 - 15 0.5 - 19 0.5 - - 55 7 5 0 - 0 0.143 - 21 0.143 - 29 0.143 - 32 0.286 - 41 0.286 - - 57 59 14 0 - 0 0.407 - 4 0.0678 - 5 0.0169 - 12 0.0847 - 14 0.0169 - 15 0.0169 - 19 0.0508 - 21 0.0169 - 29 0.186 - 31 0.0169 - 32 0.0169 - 33 0.0508 - 40 0.0169 - 41 0.0339 - - 60 2 1 0 - 7 1 - - 62 1 1 0 - 40 1 - - 73 62 7 0 - 0 0.581 - 2 0.0161 - 12 0.129 - 19 0.0323 - 29 0.161 - 32 0.0484 - 33 0.0323 - - 48 4 2 0 - 13 0.75 - 19 0.25 - - 49 2 2 0 - 15 0.5 - 19 0.5 - - 55 28 8 4 - 0 0.0357 - 7 0.607 - 13 0.0357 - 21 0.0357 - 26 0.0357 - 29 0.0357 - 32 0.0714 - 41 0.143 - - 36 4 3 0 - 13 0.25 - 21 0.25 - 32 0.5 - - 41 3 1 0 - 41 1 - - 47 18 2 0 - 7 0.944 - 26 0.0556 - - 72 2 2 0 - 0 0.5 - 29 0.5 - - 57 60 15 1 - 0 0.4 - 4 0.0667 - 5 0.0167 - 7 0.0167 - 12 0.0833 - 14 0.0167 - 15 0.0167 - 19 0.05 - 21 0.0167 - 29 0.183 - 31 0.0167 - 32 0.0167 - 33 0.05 - 40 0.0167 - 41 0.0333 - - 55 18 6 0 - 0 0.444 - 4 0.0556 - 5 0.0556 - 12 0.111 - 21 0.0556 - 29 0.278 - - 58 4 4 0 - 0 0.25 - 4 0.25 - 13 0.25 - 19 0.25 - - 60 2 1 0 - 7 1 - - 62 1 1 0 - 40 1 - - 69 1 1 0 - 41 1 - - 72 78 8 0 - 7 0.846 - 8 0.0128 - 15 0.0128 - 19 0.0128 - 21 0.0256 - 26 0.0256 - 41 0.0513 - 44 0.0128 - - 73 62 7 0 - 0 0.581 - 2 0.0161 - 12 0.129 - 19 0.0323 - 29 0.161 - 32 0.0484 - 33 0.0323 - -73 1173 26 5 - 0 0.0682 - 2 0.00171 - 3 0.0358 - 4 0.137 - 5 0.0102 - 8 0.0171 - 12 0.0153 - 13 0.0341 - 14 0.0614 - 15 0.087 - 16 0.00171 - 19 0.14 - 20 0.00682 - 21 0.00171 - 26 0.00853 - 29 0.0171 - 32 0.00682 - 33 0.00341 - 34 0.299 - 35 0.0315 - 36 0.000853 - 37 0.000853 - 39 0.00512 - 40 0.00341 - 41 0.00341 - 43 0.00171 - - 7 373 5 0 - 4 0.00268 - 34 0.903 - 35 0.0885 - 36 0.00268 - 37 0.00268 - - 26 18 2 0 - 34 0.778 - 35 0.222 - - 47 391 22 1 - 0 0.102 - 2 0.00256 - 3 0.0537 - 4 0.205 - 5 0.0153 - 8 0.0256 - 12 0.023 - 13 0.0512 - 14 0.0921 - 15 0.13 - 16 0.00256 - 19 0.21 - 20 0.0102 - 21 0.00256 - 26 0.0128 - 29 0.0256 - 32 0.0102 - 33 0.00512 - 39 0.00767 - 40 0.00512 - 41 0.00512 - 43 0.00256 - - 64 1 1 0 - 41 1 - - 64 1 1 0 - 41 1 - - 72 389 22 1 - 0 0.1 - 2 0.00257 - 3 0.054 - 4 0.206 - 5 0.0154 - 8 0.0257 - 12 0.0231 - 13 0.0514 - 14 0.0925 - 15 0.131 - 16 0.00257 - 19 0.211 - 20 0.0103 - 21 0.00257 - 26 0.0129 - 29 0.0257 - 32 0.0103 - 33 0.00514 - 39 0.00771 - 40 0.00514 - 41 0.00257 - 43 0.00257 - - 26 18 8 0 - 4 0.389 - 13 0.0556 - 14 0.0556 - 15 0.0556 - 19 0.278 - 21 0.0556 - 40 0.0556 - 43 0.0556 - -74 426 24 23 - 0 0.00939 - 4 0.0986 - 7 0.0657 - 8 0.0188 - 10 0.00469 - 13 0.0329 - 14 0.0164 - 15 0.00939 - 19 0.0775 - 20 0.0164 - 21 0.0164 - 22 0.00939 - 26 0.0164 - 28 0.00469 - 31 0.00939 - 33 0.0141 - 34 0.00235 - 35 0.00469 - 40 0.124 - 41 0.0516 - 42 0.12 - 43 0.00469 - 46 0.00939 - 47 0.263 - - 2 4 4 0 - 7 0.25 - 14 0.25 - 19 0.25 - 26 0.25 - - 4 8 4 0 - 7 0.125 - 10 0.125 - 22 0.5 - 47 0.25 - - 6 2 2 0 - 8 0.5 - 40 0.5 - - 7 9 5 0 - 4 0.111 - 7 0.222 - 8 0.111 - 35 0.111 - 47 0.444 - - 9 23 6 0 - 4 0.348 - 7 0.0435 - 13 0.13 - 14 0.13 - 19 0.261 - 20 0.087 - - 12 1 1 0 - 28 1 - - 13 4 4 0 - 0 0.25 - 4 0.25 - 7 0.25 - 41 0.25 - - 14 2 2 0 - 8 0.5 - 40 0.5 - - 15 4 3 0 - 26 0.25 - 40 0.5 - 43 0.25 - - 21 3 3 0 - 20 0.333 - 40 0.333 - 41 0.333 - - 22 10 2 0 - 4 0.3 - 19 0.7 - - 25 39 9 0 - 7 0.0513 - 8 0.0256 - 13 0.0769 - 15 0.0256 - 21 0.0513 - 31 0.0256 - 33 0.0769 - 42 0.538 - 47 0.128 - - 26 5 2 0 - 26 0.4 - 47 0.6 - - 35 2 1 0 - 7 1 - - 40 23 2 0 - 46 0.087 - 47 0.913 - - 41 4 2 0 - 4 0.75 - 7 0.25 - - 42 9 5 0 - 7 0.444 - 13 0.111 - 21 0.111 - 31 0.111 - 47 0.222 - - 47 174 22 17 - 0 0.0115 - 4 0.092 - 7 0.0517 - 8 0.0172 - 10 0.00575 - 13 0.0345 - 14 0.0172 - 15 0.00575 - 19 0.092 - 20 0.0172 - 21 0.0115 - 26 0.0172 - 28 0.00575 - 31 0.00575 - 33 0.0172 - 35 0.00575 - 40 0.0862 - 41 0.0517 - 42 0.121 - 43 0.00575 - 46 0.00575 - 47 0.322 - - 4 4 3 0 - 7 0.25 - 10 0.25 - 47 0.5 - - 7 8 4 0 - 7 0.25 - 8 0.125 - 35 0.125 - 47 0.5 - - 9 22 5 0 - 4 0.364 - 13 0.136 - 14 0.136 - 19 0.273 - 20 0.0909 - - 12 1 1 0 - 28 1 - - 13 4 4 0 - 0 0.25 - 4 0.25 - 7 0.25 - 41 0.25 - - 14 2 2 0 - 8 0.5 - 40 0.5 - - 15 3 3 0 - 26 0.333 - 40 0.333 - 43 0.333 - - 21 3 3 0 - 20 0.333 - 40 0.333 - 41 0.333 - - 22 10 2 0 - 4 0.3 - 19 0.7 - - 25 39 9 0 - 7 0.0513 - 8 0.0256 - 13 0.0769 - 15 0.0256 - 21 0.0513 - 31 0.0256 - 33 0.0769 - 42 0.538 - 47 0.128 - - 26 5 2 0 - 26 0.4 - 47 0.6 - - 35 2 1 0 - 7 1 - - 40 21 1 0 - 47 1 - - 48 5 3 0 - 4 0.4 - 19 0.4 - 47 0.2 - - 55 19 5 0 - 4 0.0526 - 7 0.0526 - 40 0.368 - 41 0.316 - 47 0.211 - - 57 10 3 0 - 40 0.2 - 46 0.1 - 47 0.7 - - 69 1 1 0 - 0 1 - - 48 6 4 0 - 4 0.333 - 19 0.333 - 40 0.167 - 47 0.167 - - 55 33 8 0 - 4 0.0303 - 7 0.0606 - 15 0.0303 - 34 0.0303 - 40 0.485 - 41 0.212 - 42 0.0303 - 47 0.121 - - 57 15 4 0 - 40 0.333 - 42 0.133 - 46 0.0667 - 47 0.467 - - 69 4 2 0 - 0 0.25 - 40 0.75 - - 74 26 11 1 - 4 0.231 - 7 0.0769 - 8 0.0385 - 13 0.0385 - 15 0.0385 - 20 0.0385 - 21 0.0769 - 31 0.0385 - 40 0.0769 - 41 0.115 - 42 0.231 - - 41 6 4 0 - 4 0.333 - 13 0.167 - 20 0.167 - 40 0.333 - diff --git a/samples/GAS/hello.ms b/samples/GAS/hello.ms new file mode 100644 index 00000000..b063c296 --- /dev/null +++ b/samples/GAS/hello.ms @@ -0,0 +1,91 @@ +# output(): Hello, world.\n +# mach(): all + +# Emit hello world while switching back and forth between arm/thumb. +# ??? Unfinished + + .macro invalid +# This is "undefined" but it's not properly decoded yet. + .word 0x07ffffff +# This is stc which isn't recognized yet. + stc 0,cr0,[r0] + .endm + + .global _start +_start: +# Run some simple insns to confirm the engine is at least working. + nop + +# Skip over output text. + + bl skip_output + +hello_text: + .asciz "Hello, world.\n" + + .p2align 2 +skip_output: + +# Prime loop. + + mov r4, r14 + +output_next: + +# Switch arm->thumb to output next chacter. +# At this point r4 must point to the next character to output. + + adr r0, into_thumb + 1 + bx r0 + +into_thumb: + .thumb + +# Output a character. + + mov r0,#3 @ writec angel call + mov r1,r4 + swi 0xab @ ??? Confirm number. + +# Switch thumb->arm. + + adr r5, back_to_arm + bx r5 + + .p2align 2 +back_to_arm: + .arm + +# Load next character, see if done. + + add r4,r4,#1 + sub r3,r3,r3 + ldrb r5,[r4,r3] + teq r5,#0 + beq done + +# Output a character (in arm mode). + + mov r0,#3 + mov r1,r4 + swi #0x123456 + +# Load next character, see if done. + + add r4,r4,#1 + sub r3,r3,r3 + ldrb r5,[r4,r3] + teq r5,#0 + bne output_next + +done: + mov r0,#0x18 + ldr r1,exit_code + swi #0x123456 + +# If that fails, try to die with an invalid insn. + + invalid + +exit_code: + .word 0x20026 diff --git a/samples/Go/api.pb.go b/samples/Go/api.pb.go new file mode 100644 index 00000000..a4fe4921 --- /dev/null +++ b/samples/Go/api.pb.go @@ -0,0 +1,1157 @@ +// Code generated by protoc-gen-gogo. +// source: api.proto +// DO NOT EDIT! + +/* + Package proto is a generated protocol buffer package. + + It is generated from these files: + api.proto + config.proto + data.proto + errors.proto + gossip.proto + heartbeat.proto + internal.proto + + It has these top-level messages: + ClientCmdID + RequestHeader + ResponseHeader + ContainsRequest + ContainsResponse + GetRequest + GetResponse + PutRequest + PutResponse + ConditionalPutRequest + ConditionalPutResponse + IncrementRequest + IncrementResponse + DeleteRequest + DeleteResponse + DeleteRangeRequest + DeleteRangeResponse + ScanRequest + ScanResponse + EndTransactionRequest + EndTransactionResponse + ReapQueueRequest + ReapQueueResponse + EnqueueUpdateRequest + EnqueueUpdateResponse + EnqueueMessageRequest + EnqueueMessageResponse + RequestUnion + ResponseUnion + BatchRequest + BatchResponse + AdminSplitRequest + AdminSplitResponse + AdminMergeRequest + AdminMergeResponse +*/ +package proto + +import proto1 "github.com/gogo/protobuf/proto" +import math "math" + +// discarding unused import gogoproto "github.com/gogo/protobuf/gogoproto/gogo.pb" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto1.Marshal +var _ = math.Inf + +// ClientCmdID provides a unique ID for client commands. Clients which +// provide ClientCmdID gain operation idempotence. In other words, +// clients can submit the same command multiple times and always +// receive the same response. This is common on retries over flaky +// networks. However, the system imposes a limit on how long +// idempotence is provided. Retries over an hour old are not +// guaranteed idempotence and may be executed more than once with +// potentially different results. +// +// ClientCmdID contains the client's timestamp and a client-generated +// random number. The client Timestamp is specified in unix +// nanoseconds and is used for some uniqueness but also to provide a +// rough ordering of requests, useful for data locality on the +// server. The Random is specified for additional uniqueness. +// NOTE: An accurate time signal IS NOT required for correctness. +type ClientCmdID struct { + // Nanoseconds since Unix epoch. + WallTime int64 `protobuf:"varint,1,opt,name=wall_time" json:"wall_time"` + Random int64 `protobuf:"varint,2,opt,name=random" json:"random"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ClientCmdID) Reset() { *m = ClientCmdID{} } +func (m *ClientCmdID) String() string { return proto1.CompactTextString(m) } +func (*ClientCmdID) ProtoMessage() {} + +func (m *ClientCmdID) GetWallTime() int64 { + if m != nil { + return m.WallTime + } + return 0 +} + +func (m *ClientCmdID) GetRandom() int64 { + if m != nil { + return m.Random + } + return 0 +} + +// RequestHeader is supplied with every storage node request. +type RequestHeader struct { + // Timestamp specifies time at which read or writes should be + // performed. If the timestamp is set to zero value, its value + // is initialized to the wall time of the receiving node. + Timestamp Timestamp `protobuf:"bytes,1,opt,name=timestamp" json:"timestamp"` + // CmdID is optionally specified for request idempotence + // (i.e. replay protection). + CmdID ClientCmdID `protobuf:"bytes,2,opt,name=cmd_id" json:"cmd_id"` + // The key for request. If the request operates on a range, this + // represents the starting key for the range. + Key Key `protobuf:"bytes,3,opt,name=key,customtype=Key" json:"key"` + // End key is empty if request spans only a single key. + EndKey Key `protobuf:"bytes,4,opt,name=end_key,customtype=Key" json:"end_key"` + // User is the originating user. Used to lookup priority when + // scheduling queued operations at target node. + User string `protobuf:"bytes,5,opt,name=user" json:"user"` + // Replica specifies the destination for the request. This is a specific + // instance of the available replicas belonging to RangeID. + Replica Replica `protobuf:"bytes,6,opt,name=replica" json:"replica"` + // RaftID specifies the ID of the Raft consensus group which the key + // range belongs to. This is used by the receiving node to route the + // request to the correct range. + RaftID int64 `protobuf:"varint,7,opt,name=raft_id" json:"raft_id"` + // UserPriority specifies priority multiple for non-transactional + // commands. This value should be a positive integer [1, 2^31-1). + // It's properly viewed as a multiple for how likely this + // transaction will be to prevail if a write conflict occurs. + // Commands with UserPriority=100 will be 100x less likely to be + // aborted as conflicting transactions or non-transactional commands + // with UserPriority=1. This value is ignored if Txn is + // specified. If neither this value nor Txn is specified, the value + // defaults to 1. + UserPriority *int32 `protobuf:"varint,8,opt,name=user_priority,def=1" json:"user_priority,omitempty"` + // Txn is set non-nil if a transaction is underway. To start a txn, + // the first request should set this field to non-nil with name and + // isolation level set as desired. The response will contain the + // fully-initialized transaction with txn ID, priority, initial + // timestamp, and maximum timestamp. + Txn *Transaction `protobuf:"bytes,9,opt,name=txn" json:"txn,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *RequestHeader) Reset() { *m = RequestHeader{} } +func (m *RequestHeader) String() string { return proto1.CompactTextString(m) } +func (*RequestHeader) ProtoMessage() {} + +const Default_RequestHeader_UserPriority int32 = 1 + +func (m *RequestHeader) GetTimestamp() Timestamp { + if m != nil { + return m.Timestamp + } + return Timestamp{} +} + +func (m *RequestHeader) GetCmdID() ClientCmdID { + if m != nil { + return m.CmdID + } + return ClientCmdID{} +} + +func (m *RequestHeader) GetUser() string { + if m != nil { + return m.User + } + return "" +} + +func (m *RequestHeader) GetReplica() Replica { + if m != nil { + return m.Replica + } + return Replica{} +} + +func (m *RequestHeader) GetRaftID() int64 { + if m != nil { + return m.RaftID + } + return 0 +} + +func (m *RequestHeader) GetUserPriority() int32 { + if m != nil && m.UserPriority != nil { + return *m.UserPriority + } + return Default_RequestHeader_UserPriority +} + +func (m *RequestHeader) GetTxn() *Transaction { + if m != nil { + return m.Txn + } + return nil +} + +// ResponseHeader is returned with every storage node response. +type ResponseHeader struct { + // Error is non-nil if an error occurred. + Error *Error `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` + // Timestamp specifies time at which read or write actually was + // performed. In the case of both reads and writes, if the timestamp + // supplied to the request was 0, the wall time of the node + // servicing the request will be set here. Additionally, in the case + // of writes, this value may be increased from the timestamp passed + // with the RequestHeader if the key being written was either read + // or written more recently. + Timestamp Timestamp `protobuf:"bytes,2,opt,name=timestamp" json:"timestamp"` + // Transaction is non-nil if the request specified a non-nil + // transaction. The transaction timestamp and/or priority may have + // been updated, depending on the outcome of the request. + Txn *Transaction `protobuf:"bytes,3,opt,name=txn" json:"txn,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ResponseHeader) Reset() { *m = ResponseHeader{} } +func (m *ResponseHeader) String() string { return proto1.CompactTextString(m) } +func (*ResponseHeader) ProtoMessage() {} + +func (m *ResponseHeader) GetError() *Error { + if m != nil { + return m.Error + } + return nil +} + +func (m *ResponseHeader) GetTimestamp() Timestamp { + if m != nil { + return m.Timestamp + } + return Timestamp{} +} + +func (m *ResponseHeader) GetTxn() *Transaction { + if m != nil { + return m.Txn + } + return nil +} + +// A ContainsRequest is arguments to the Contains() method. +type ContainsRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ContainsRequest) Reset() { *m = ContainsRequest{} } +func (m *ContainsRequest) String() string { return proto1.CompactTextString(m) } +func (*ContainsRequest) ProtoMessage() {} + +// A ContainsResponse is the return value of the Contains() method. +type ContainsResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + Exists bool `protobuf:"varint,2,opt,name=exists" json:"exists"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ContainsResponse) Reset() { *m = ContainsResponse{} } +func (m *ContainsResponse) String() string { return proto1.CompactTextString(m) } +func (*ContainsResponse) ProtoMessage() {} + +func (m *ContainsResponse) GetExists() bool { + if m != nil { + return m.Exists + } + return false +} + +// A GetRequest is arguments to the Get() method. +type GetRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GetRequest) Reset() { *m = GetRequest{} } +func (m *GetRequest) String() string { return proto1.CompactTextString(m) } +func (*GetRequest) ProtoMessage() {} + +// A GetResponse is the return value from the Get() method. +// If the key doesn't exist, returns nil for Value.Bytes. +type GetResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + Value *Value `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *GetResponse) Reset() { *m = GetResponse{} } +func (m *GetResponse) String() string { return proto1.CompactTextString(m) } +func (*GetResponse) ProtoMessage() {} + +func (m *GetResponse) GetValue() *Value { + if m != nil { + return m.Value + } + return nil +} + +// A PutRequest is arguments to the Put() method. Note that to write +// an empty value, the value parameter is still specified, but both +// Bytes and Integer are set to nil. +type PutRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + Value Value `protobuf:"bytes,2,opt,name=value" json:"value"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *PutRequest) Reset() { *m = PutRequest{} } +func (m *PutRequest) String() string { return proto1.CompactTextString(m) } +func (*PutRequest) ProtoMessage() {} + +func (m *PutRequest) GetValue() Value { + if m != nil { + return m.Value + } + return Value{} +} + +// A PutResponse is the return value from the Put() method. +type PutResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *PutResponse) Reset() { *m = PutResponse{} } +func (m *PutResponse) String() string { return proto1.CompactTextString(m) } +func (*PutResponse) ProtoMessage() {} + +// A ConditionalPutRequest is arguments to the ConditionalPut() method. +// +// - Returns true and sets value if ExpValue equals existing value. +// - If key doesn't exist and ExpValue is nil, sets value. +// - If key exists, but value is empty and ExpValue is not nil but empty, sets value. +// - Otherwise, returns error and the actual value of the key in the response. +type ConditionalPutRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // The value to put. + Value Value `protobuf:"bytes,2,opt,name=value" json:"value"` + // ExpValue.Bytes empty to test for non-existence. Specify as nil + // to indicate there should be no existing entry. This is different + // from the expectation that the value exists but is empty. + ExpValue *Value `protobuf:"bytes,3,opt,name=exp_value" json:"exp_value,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ConditionalPutRequest) Reset() { *m = ConditionalPutRequest{} } +func (m *ConditionalPutRequest) String() string { return proto1.CompactTextString(m) } +func (*ConditionalPutRequest) ProtoMessage() {} + +func (m *ConditionalPutRequest) GetValue() Value { + if m != nil { + return m.Value + } + return Value{} +} + +func (m *ConditionalPutRequest) GetExpValue() *Value { + if m != nil { + return m.ExpValue + } + return nil +} + +// A ConditionalPutResponse is the return value from the +// ConditionalPut() method. +type ConditionalPutResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ConditionalPutResponse) Reset() { *m = ConditionalPutResponse{} } +func (m *ConditionalPutResponse) String() string { return proto1.CompactTextString(m) } +func (*ConditionalPutResponse) ProtoMessage() {} + +// An IncrementRequest is arguments to the Increment() method. It +// increments the value for key, and returns the new value. If no +// value exists for a key, incrementing by 0 is not a noop, but will +// create a zero value. IncrementRequest cannot be called on a key set +// by Put() or ConditionalPut(). Similarly, Get(), Put() and +// ConditionalPut() cannot be invoked on an incremented key. +type IncrementRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + Increment int64 `protobuf:"varint,2,opt,name=increment" json:"increment"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *IncrementRequest) Reset() { *m = IncrementRequest{} } +func (m *IncrementRequest) String() string { return proto1.CompactTextString(m) } +func (*IncrementRequest) ProtoMessage() {} + +func (m *IncrementRequest) GetIncrement() int64 { + if m != nil { + return m.Increment + } + return 0 +} + +// An IncrementResponse is the return value from the Increment +// method. The new value after increment is specified in NewValue. If +// the value could not be decoded as specified, Error will be set. +type IncrementResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + NewValue int64 `protobuf:"varint,2,opt,name=new_value" json:"new_value"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *IncrementResponse) Reset() { *m = IncrementResponse{} } +func (m *IncrementResponse) String() string { return proto1.CompactTextString(m) } +func (*IncrementResponse) ProtoMessage() {} + +func (m *IncrementResponse) GetNewValue() int64 { + if m != nil { + return m.NewValue + } + return 0 +} + +// A DeleteRequest is arguments to the Delete() method. +type DeleteRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DeleteRequest) Reset() { *m = DeleteRequest{} } +func (m *DeleteRequest) String() string { return proto1.CompactTextString(m) } +func (*DeleteRequest) ProtoMessage() {} + +// A DeleteResponse is the return value from the Delete() method. +type DeleteResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DeleteResponse) Reset() { *m = DeleteResponse{} } +func (m *DeleteResponse) String() string { return proto1.CompactTextString(m) } +func (*DeleteResponse) ProtoMessage() {} + +// A DeleteRangeRequest is arguments to the DeleteRange method. It +// specifies the range of keys to delete. +type DeleteRangeRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // If 0, *all* entries between Key (inclusive) and EndKey + // (exclusive) are deleted. Must be >= 0 + MaxEntriesToDelete int64 `protobuf:"varint,2,opt,name=max_entries_to_delete" json:"max_entries_to_delete"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DeleteRangeRequest) Reset() { *m = DeleteRangeRequest{} } +func (m *DeleteRangeRequest) String() string { return proto1.CompactTextString(m) } +func (*DeleteRangeRequest) ProtoMessage() {} + +func (m *DeleteRangeRequest) GetMaxEntriesToDelete() int64 { + if m != nil { + return m.MaxEntriesToDelete + } + return 0 +} + +// A DeleteRangeResponse is the return value from the DeleteRange() +// method. +type DeleteRangeResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // Number of entries removed. + NumDeleted int64 `protobuf:"varint,2,opt,name=num_deleted" json:"num_deleted"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *DeleteRangeResponse) Reset() { *m = DeleteRangeResponse{} } +func (m *DeleteRangeResponse) String() string { return proto1.CompactTextString(m) } +func (*DeleteRangeResponse) ProtoMessage() {} + +func (m *DeleteRangeResponse) GetNumDeleted() int64 { + if m != nil { + return m.NumDeleted + } + return 0 +} + +// A ScanRequest is arguments to the Scan() method. It specifies the +// start and end keys for the scan and the maximum number of results. +type ScanRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // Must be > 0. + MaxResults int64 `protobuf:"varint,2,opt,name=max_results" json:"max_results"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ScanRequest) Reset() { *m = ScanRequest{} } +func (m *ScanRequest) String() string { return proto1.CompactTextString(m) } +func (*ScanRequest) ProtoMessage() {} + +func (m *ScanRequest) GetMaxResults() int64 { + if m != nil { + return m.MaxResults + } + return 0 +} + +// A ScanResponse is the return value from the Scan() method. +type ScanResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // Empty if no rows were scanned. + Rows []KeyValue `protobuf:"bytes,2,rep,name=rows" json:"rows"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ScanResponse) Reset() { *m = ScanResponse{} } +func (m *ScanResponse) String() string { return proto1.CompactTextString(m) } +func (*ScanResponse) ProtoMessage() {} + +func (m *ScanResponse) GetRows() []KeyValue { + if m != nil { + return m.Rows + } + return nil +} + +// An EndTransactionRequest is arguments to the EndTransaction() method. +// It specifies whether to commit or roll back an extant transaction. +type EndTransactionRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // False to abort and rollback. + Commit bool `protobuf:"varint,2,opt,name=commit" json:"commit"` + // Optional commit triggers. Note that commit triggers are for + // internal use only and will be ignored if requested through the + // public-facing KV API. + SplitTrigger *SplitTrigger `protobuf:"bytes,3,opt,name=split_trigger" json:"split_trigger,omitempty"` + MergeTrigger *MergeTrigger `protobuf:"bytes,4,opt,name=merge_trigger" json:"merge_trigger,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EndTransactionRequest) Reset() { *m = EndTransactionRequest{} } +func (m *EndTransactionRequest) String() string { return proto1.CompactTextString(m) } +func (*EndTransactionRequest) ProtoMessage() {} + +func (m *EndTransactionRequest) GetCommit() bool { + if m != nil { + return m.Commit + } + return false +} + +func (m *EndTransactionRequest) GetSplitTrigger() *SplitTrigger { + if m != nil { + return m.SplitTrigger + } + return nil +} + +func (m *EndTransactionRequest) GetMergeTrigger() *MergeTrigger { + if m != nil { + return m.MergeTrigger + } + return nil +} + +// An EndTransactionResponse is the return value from the +// EndTransaction() method. The final transaction record is returned +// as part of the response header. In particular, transaction status +// and timestamp will be updated to reflect final committed +// values. Clients may propagate the transaction timestamp as the +// final txn commit timestamp in order to preserve causal ordering +// between subsequent transactions. CommitWait specifies the commit +// wait, which is the remaining time the client MUST wait before +// signalling completion of the transaction to another distributed +// node to maintain consistency. +type EndTransactionResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // Remaining time (ns). + CommitWait int64 `protobuf:"varint,2,opt,name=commit_wait" json:"commit_wait"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EndTransactionResponse) Reset() { *m = EndTransactionResponse{} } +func (m *EndTransactionResponse) String() string { return proto1.CompactTextString(m) } +func (*EndTransactionResponse) ProtoMessage() {} + +func (m *EndTransactionResponse) GetCommitWait() int64 { + if m != nil { + return m.CommitWait + } + return 0 +} + +// A ReapQueueRequest is arguments to the ReapQueue() method. It +// specifies the recipient inbox key to which messages are waiting +// to be reapted and also the maximum number of results to return. +type ReapQueueRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // Maximum results to return; must be > 0. + MaxResults int64 `protobuf:"varint,2,opt,name=max_results" json:"max_results"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ReapQueueRequest) Reset() { *m = ReapQueueRequest{} } +func (m *ReapQueueRequest) String() string { return proto1.CompactTextString(m) } +func (*ReapQueueRequest) ProtoMessage() {} + +func (m *ReapQueueRequest) GetMaxResults() int64 { + if m != nil { + return m.MaxResults + } + return 0 +} + +// A ReapQueueResponse is the return value from the ReapQueue() method. +type ReapQueueResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + Messages []Value `protobuf:"bytes,2,rep,name=messages" json:"messages"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ReapQueueResponse) Reset() { *m = ReapQueueResponse{} } +func (m *ReapQueueResponse) String() string { return proto1.CompactTextString(m) } +func (*ReapQueueResponse) ProtoMessage() {} + +func (m *ReapQueueResponse) GetMessages() []Value { + if m != nil { + return m.Messages + } + return nil +} + +// An EnqueueUpdateRequest is arguments to the EnqueueUpdate() method. +// It specifies the update to enqueue for asynchronous execution. +// Update is an instance of one of the following messages: PutRequest, +// IncrementRequest, DeleteRequest, DeleteRangeRequest, or +// AccountingRequest. +type EnqueueUpdateRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnqueueUpdateRequest) Reset() { *m = EnqueueUpdateRequest{} } +func (m *EnqueueUpdateRequest) String() string { return proto1.CompactTextString(m) } +func (*EnqueueUpdateRequest) ProtoMessage() {} + +// An EnqueueUpdateResponse is the return value from the +// EnqueueUpdate() method. +type EnqueueUpdateResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnqueueUpdateResponse) Reset() { *m = EnqueueUpdateResponse{} } +func (m *EnqueueUpdateResponse) String() string { return proto1.CompactTextString(m) } +func (*EnqueueUpdateResponse) ProtoMessage() {} + +// An EnqueueMessageRequest is arguments to the EnqueueMessage() method. +// It specifies the recipient inbox key and the message (an arbitrary +// byte slice value). +type EnqueueMessageRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + // Message value to delivery to inbox. + Msg Value `protobuf:"bytes,2,opt,name=msg" json:"msg"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnqueueMessageRequest) Reset() { *m = EnqueueMessageRequest{} } +func (m *EnqueueMessageRequest) String() string { return proto1.CompactTextString(m) } +func (*EnqueueMessageRequest) ProtoMessage() {} + +func (m *EnqueueMessageRequest) GetMsg() Value { + if m != nil { + return m.Msg + } + return Value{} +} + +// An EnqueueMessageResponse is the return value from the +// EnqueueMessage() method. +type EnqueueMessageResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *EnqueueMessageResponse) Reset() { *m = EnqueueMessageResponse{} } +func (m *EnqueueMessageResponse) String() string { return proto1.CompactTextString(m) } +func (*EnqueueMessageResponse) ProtoMessage() {} + +// A RequestUnion contains exactly one of the optional requests. +type RequestUnion struct { + Contains *ContainsRequest `protobuf:"bytes,1,opt,name=contains" json:"contains,omitempty"` + Get *GetRequest `protobuf:"bytes,2,opt,name=get" json:"get,omitempty"` + Put *PutRequest `protobuf:"bytes,3,opt,name=put" json:"put,omitempty"` + ConditionalPut *ConditionalPutRequest `protobuf:"bytes,4,opt,name=conditional_put" json:"conditional_put,omitempty"` + Increment *IncrementRequest `protobuf:"bytes,5,opt,name=increment" json:"increment,omitempty"` + Delete *DeleteRequest `protobuf:"bytes,6,opt,name=delete" json:"delete,omitempty"` + DeleteRange *DeleteRangeRequest `protobuf:"bytes,7,opt,name=delete_range" json:"delete_range,omitempty"` + Scan *ScanRequest `protobuf:"bytes,8,opt,name=scan" json:"scan,omitempty"` + EndTransaction *EndTransactionRequest `protobuf:"bytes,9,opt,name=end_transaction" json:"end_transaction,omitempty"` + ReapQueue *ReapQueueRequest `protobuf:"bytes,10,opt,name=reap_queue" json:"reap_queue,omitempty"` + EnqueueUpdate *EnqueueUpdateRequest `protobuf:"bytes,11,opt,name=enqueue_update" json:"enqueue_update,omitempty"` + EnqueueMessage *EnqueueMessageRequest `protobuf:"bytes,12,opt,name=enqueue_message" json:"enqueue_message,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *RequestUnion) Reset() { *m = RequestUnion{} } +func (m *RequestUnion) String() string { return proto1.CompactTextString(m) } +func (*RequestUnion) ProtoMessage() {} + +func (m *RequestUnion) GetContains() *ContainsRequest { + if m != nil { + return m.Contains + } + return nil +} + +func (m *RequestUnion) GetGet() *GetRequest { + if m != nil { + return m.Get + } + return nil +} + +func (m *RequestUnion) GetPut() *PutRequest { + if m != nil { + return m.Put + } + return nil +} + +func (m *RequestUnion) GetConditionalPut() *ConditionalPutRequest { + if m != nil { + return m.ConditionalPut + } + return nil +} + +func (m *RequestUnion) GetIncrement() *IncrementRequest { + if m != nil { + return m.Increment + } + return nil +} + +func (m *RequestUnion) GetDelete() *DeleteRequest { + if m != nil { + return m.Delete + } + return nil +} + +func (m *RequestUnion) GetDeleteRange() *DeleteRangeRequest { + if m != nil { + return m.DeleteRange + } + return nil +} + +func (m *RequestUnion) GetScan() *ScanRequest { + if m != nil { + return m.Scan + } + return nil +} + +func (m *RequestUnion) GetEndTransaction() *EndTransactionRequest { + if m != nil { + return m.EndTransaction + } + return nil +} + +func (m *RequestUnion) GetReapQueue() *ReapQueueRequest { + if m != nil { + return m.ReapQueue + } + return nil +} + +func (m *RequestUnion) GetEnqueueUpdate() *EnqueueUpdateRequest { + if m != nil { + return m.EnqueueUpdate + } + return nil +} + +func (m *RequestUnion) GetEnqueueMessage() *EnqueueMessageRequest { + if m != nil { + return m.EnqueueMessage + } + return nil +} + +// A ResponseUnion contains exactly one of the optional responses. +type ResponseUnion struct { + Contains *ContainsResponse `protobuf:"bytes,1,opt,name=contains" json:"contains,omitempty"` + Get *GetResponse `protobuf:"bytes,2,opt,name=get" json:"get,omitempty"` + Put *PutResponse `protobuf:"bytes,3,opt,name=put" json:"put,omitempty"` + ConditionalPut *ConditionalPutResponse `protobuf:"bytes,4,opt,name=conditional_put" json:"conditional_put,omitempty"` + Increment *IncrementResponse `protobuf:"bytes,5,opt,name=increment" json:"increment,omitempty"` + Delete *DeleteResponse `protobuf:"bytes,6,opt,name=delete" json:"delete,omitempty"` + DeleteRange *DeleteRangeResponse `protobuf:"bytes,7,opt,name=delete_range" json:"delete_range,omitempty"` + Scan *ScanResponse `protobuf:"bytes,8,opt,name=scan" json:"scan,omitempty"` + EndTransaction *EndTransactionResponse `protobuf:"bytes,9,opt,name=end_transaction" json:"end_transaction,omitempty"` + ReapQueue *ReapQueueResponse `protobuf:"bytes,10,opt,name=reap_queue" json:"reap_queue,omitempty"` + EnqueueUpdate *EnqueueUpdateResponse `protobuf:"bytes,11,opt,name=enqueue_update" json:"enqueue_update,omitempty"` + EnqueueMessage *EnqueueMessageResponse `protobuf:"bytes,12,opt,name=enqueue_message" json:"enqueue_message,omitempty"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *ResponseUnion) Reset() { *m = ResponseUnion{} } +func (m *ResponseUnion) String() string { return proto1.CompactTextString(m) } +func (*ResponseUnion) ProtoMessage() {} + +func (m *ResponseUnion) GetContains() *ContainsResponse { + if m != nil { + return m.Contains + } + return nil +} + +func (m *ResponseUnion) GetGet() *GetResponse { + if m != nil { + return m.Get + } + return nil +} + +func (m *ResponseUnion) GetPut() *PutResponse { + if m != nil { + return m.Put + } + return nil +} + +func (m *ResponseUnion) GetConditionalPut() *ConditionalPutResponse { + if m != nil { + return m.ConditionalPut + } + return nil +} + +func (m *ResponseUnion) GetIncrement() *IncrementResponse { + if m != nil { + return m.Increment + } + return nil +} + +func (m *ResponseUnion) GetDelete() *DeleteResponse { + if m != nil { + return m.Delete + } + return nil +} + +func (m *ResponseUnion) GetDeleteRange() *DeleteRangeResponse { + if m != nil { + return m.DeleteRange + } + return nil +} + +func (m *ResponseUnion) GetScan() *ScanResponse { + if m != nil { + return m.Scan + } + return nil +} + +func (m *ResponseUnion) GetEndTransaction() *EndTransactionResponse { + if m != nil { + return m.EndTransaction + } + return nil +} + +func (m *ResponseUnion) GetReapQueue() *ReapQueueResponse { + if m != nil { + return m.ReapQueue + } + return nil +} + +func (m *ResponseUnion) GetEnqueueUpdate() *EnqueueUpdateResponse { + if m != nil { + return m.EnqueueUpdate + } + return nil +} + +func (m *ResponseUnion) GetEnqueueMessage() *EnqueueMessageResponse { + if m != nil { + return m.EnqueueMessage + } + return nil +} + +// A BatchRequest contains one or more requests to be executed in +// parallel, or if applicable (based on write-only commands and +// range-locality), as a single update. +type BatchRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + Requests []RequestUnion `protobuf:"bytes,2,rep,name=requests" json:"requests"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *BatchRequest) Reset() { *m = BatchRequest{} } +func (m *BatchRequest) String() string { return proto1.CompactTextString(m) } +func (*BatchRequest) ProtoMessage() {} + +func (m *BatchRequest) GetRequests() []RequestUnion { + if m != nil { + return m.Requests + } + return nil +} + +// A BatchResponse contains one or more responses, one per request +// corresponding to the requests in the matching BatchRequest. The +// error in the response header is set to the first error from the +// slice of responses, if applicable. +type BatchResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + Responses []ResponseUnion `protobuf:"bytes,2,rep,name=responses" json:"responses"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *BatchResponse) Reset() { *m = BatchResponse{} } +func (m *BatchResponse) String() string { return proto1.CompactTextString(m) } +func (*BatchResponse) ProtoMessage() {} + +func (m *BatchResponse) GetResponses() []ResponseUnion { + if m != nil { + return m.Responses + } + return nil +} + +// An AdminSplitRequest is arguments to the AdminSplit() method. The +// existing range which contains RequestHeader.Key is split by +// split_key. If split_key is not specified, then this method will +// determine a split key that is roughly halfway through the +// range. The existing range is resized to cover only its start key to +// the split key. The new range created by the split starts at the +// split key and extends to the original range's end key. If split_key +// is known, header.key should also be set to split_key. +// +// New range IDs for each of the split range's replica and a new Raft +// ID are generated by the operation. Split requests are done in the +// context of a distributed transaction which updates range addressing +// records, range metadata and finally, provides a commit trigger to +// update bookkeeping and instantiate the new range on commit. +// +// The new range contains range replicas located on the same stores; +// no range data is moved during this operation. The split can be +// thought of as a mostly logical operation, though some other +// metadata (e.g. response cache and range stats must be copied or +// recomputed). +type AdminSplitRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + SplitKey Key `protobuf:"bytes,2,opt,name=split_key,customtype=Key" json:"split_key"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *AdminSplitRequest) Reset() { *m = AdminSplitRequest{} } +func (m *AdminSplitRequest) String() string { return proto1.CompactTextString(m) } +func (*AdminSplitRequest) ProtoMessage() {} + +// An AdminSplitResponse is the return value from the AdminSplit() +// method. +type AdminSplitResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *AdminSplitResponse) Reset() { *m = AdminSplitResponse{} } +func (m *AdminSplitResponse) String() string { return proto1.CompactTextString(m) } +func (*AdminSplitResponse) ProtoMessage() {} + +// An AdminMergeRequest is arguments to the AdminMerge() method. A +// merge is always performed by calling AdminMerge on the range +// that is subsuming the passed in subsumed_range. The ranges must +// be consecutive in the key space, such that the end_key of the +// subsuming range must match the start_key of the range being subsumed. +// After the merge operation, the subsumed_range will no longer exist and +// the subsuming range will now encompass all keys from its original +// start_key to the end_key of the subsumed_range. +type AdminMergeRequest struct { + RequestHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + SubsumedRange RangeDescriptor `protobuf:"bytes,2,opt,name=subsumed_range" json:"subsumed_range"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *AdminMergeRequest) Reset() { *m = AdminMergeRequest{} } +func (m *AdminMergeRequest) String() string { return proto1.CompactTextString(m) } +func (*AdminMergeRequest) ProtoMessage() {} + +func (m *AdminMergeRequest) GetSubsumedRange() RangeDescriptor { + if m != nil { + return m.SubsumedRange + } + return RangeDescriptor{} +} + +// An AdminMergeResponse is the return value from the AdminMerge() +// method. +type AdminMergeResponse struct { + ResponseHeader `protobuf:"bytes,1,opt,name=header,embedded=header" json:"header"` + XXX_unrecognized []byte `json:"-"` +} + +func (m *AdminMergeResponse) Reset() { *m = AdminMergeResponse{} } +func (m *AdminMergeResponse) String() string { return proto1.CompactTextString(m) } +func (*AdminMergeResponse) ProtoMessage() {} + +func init() { +} +func (this *RequestUnion) GetValue() interface{} { + if this.Contains != nil { + return this.Contains + } + if this.Get != nil { + return this.Get + } + if this.Put != nil { + return this.Put + } + if this.ConditionalPut != nil { + return this.ConditionalPut + } + if this.Increment != nil { + return this.Increment + } + if this.Delete != nil { + return this.Delete + } + if this.DeleteRange != nil { + return this.DeleteRange + } + if this.Scan != nil { + return this.Scan + } + if this.EndTransaction != nil { + return this.EndTransaction + } + if this.ReapQueue != nil { + return this.ReapQueue + } + if this.EnqueueUpdate != nil { + return this.EnqueueUpdate + } + if this.EnqueueMessage != nil { + return this.EnqueueMessage + } + return nil +} + +func (this *RequestUnion) SetValue(value interface{}) bool { + switch vt := value.(type) { + case *ContainsRequest: + this.Contains = vt + case *GetRequest: + this.Get = vt + case *PutRequest: + this.Put = vt + case *ConditionalPutRequest: + this.ConditionalPut = vt + case *IncrementRequest: + this.Increment = vt + case *DeleteRequest: + this.Delete = vt + case *DeleteRangeRequest: + this.DeleteRange = vt + case *ScanRequest: + this.Scan = vt + case *EndTransactionRequest: + this.EndTransaction = vt + case *ReapQueueRequest: + this.ReapQueue = vt + case *EnqueueUpdateRequest: + this.EnqueueUpdate = vt + case *EnqueueMessageRequest: + this.EnqueueMessage = vt + default: + return false + } + return true +} +func (this *ResponseUnion) GetValue() interface{} { + if this.Contains != nil { + return this.Contains + } + if this.Get != nil { + return this.Get + } + if this.Put != nil { + return this.Put + } + if this.ConditionalPut != nil { + return this.ConditionalPut + } + if this.Increment != nil { + return this.Increment + } + if this.Delete != nil { + return this.Delete + } + if this.DeleteRange != nil { + return this.DeleteRange + } + if this.Scan != nil { + return this.Scan + } + if this.EndTransaction != nil { + return this.EndTransaction + } + if this.ReapQueue != nil { + return this.ReapQueue + } + if this.EnqueueUpdate != nil { + return this.EnqueueUpdate + } + if this.EnqueueMessage != nil { + return this.EnqueueMessage + } + return nil +} + +func (this *ResponseUnion) SetValue(value interface{}) bool { + switch vt := value.(type) { + case *ContainsResponse: + this.Contains = vt + case *GetResponse: + this.Get = vt + case *PutResponse: + this.Put = vt + case *ConditionalPutResponse: + this.ConditionalPut = vt + case *IncrementResponse: + this.Increment = vt + case *DeleteResponse: + this.Delete = vt + case *DeleteRangeResponse: + this.DeleteRange = vt + case *ScanResponse: + this.Scan = vt + case *EndTransactionResponse: + this.EndTransaction = vt + case *ReapQueueResponse: + this.ReapQueue = vt + case *EnqueueUpdateResponse: + this.EnqueueUpdate = vt + case *EnqueueMessageResponse: + this.EnqueueMessage = vt + default: + return false + } + return true +} diff --git a/samples/Go/embedded.go b/samples/Go/embedded.go new file mode 100644 index 00000000..6d6dba8a --- /dev/null +++ b/samples/Go/embedded.go @@ -0,0 +1,852 @@ +// Code generated by go-bindata. +// sources: +// ui/css/app.css +// ui/css/graph.css +// ui/css/libs/nvd3/1.7.1/nv.d3.min.css +// ui/css/rest_explorer.css +// ui/index.html +// ui/js/app.js +// ui/js/libs/d3/3.3.5/d3.min.js +// ui/js/libs/mithriljs/0.2.0/mithril.min.js +// ui/js/libs/mithriljs/0.2.0/mithril.min.js.map +// ui/js/libs/nvd3/1.7.1/nv.d3.min.js +// ui/ts/app.ts +// ui/ts/components/metrics.ts +// ui/ts/header.ts +// ui/ts/models/node_status.ts +// ui/ts/models/stats.ts +// ui/ts/models/store_status.ts +// ui/ts/models/timeseries.ts +// ui/ts/pages/graph.ts +// ui/ts/pages/monitor.ts +// ui/ts/pages/nodes.ts +// ui/ts/pages/rest_explorer.ts +// ui/ts/pages/stores.ts +// ui/ts/tsconfig.json +// ui/ts/typings/d3/d3.d.ts +// ui/ts/typings/jquery/jquery.d.ts +// ui/ts/typings/mithriljs/mithril.d.ts +// DO NOT EDIT! +package resource + +import ( + "bytes" + "compress/gzip" + "fmt" + "io" + "io/ioutil" + "os" + "path" + "path/filepath" + "strings" + "time" +) + +func bindataRead(data []byte, name string) ([]byte, error) { + gz, err := gzip.NewReader(bytes.NewBuffer(data)) + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + + var buf bytes.Buffer + _, err = io.Copy(&buf, gz) + clErr := gz.Close() + + if err != nil { + return nil, fmt.Errorf("Read %q: %v", name, err) + } + if clErr != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +type asset struct { + bytes []byte + info os.FileInfo +} + +type bindataFileInfo struct { + name string + size int64 + mode os.FileMode + modTime time.Time +} + +func (fi bindataFileInfo) Name() string { + return fi.name +} +func (fi bindataFileInfo) Size() int64 { + return fi.size +} +func (fi bindataFileInfo) Mode() os.FileMode { + return fi.mode +} +func (fi bindataFileInfo) ModTime() time.Time { + return fi.modTime +} +func (fi bindataFileInfo) IsDir() bool { + return false +} +func (fi bindataFileInfo) Sys() interface{} { + return nil +} + +var _uiCssAppCss = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x7c\x54\xdb\x6e\xdb\x38\x10\x7d\xe7\x57\x0c\x52\x2c\x72\x81\x65\x3b\x4e\x16\x58\xd8\x2f\xab\xba\x59\xc4\x68\xa1\x2c\x22\x67\x8b\x3e\x52\xd2\x48\x22\x42\x91\x5c\x92\xb2\xec\x2e\xfa\xef\x3b\x94\xe4\x34\xee\xcd\x0f\x86\x67\xe6\x78\xe6\x9c\xb9\x70\x76\x75\xc5\xd6\xda\x1c\xac\xa8\x6a\x0f\x8b\xf9\xf5\x2d\x6c\x6b\x84\xb5\xce\x9f\xad\xe6\x79\x0d\x71\xeb\x6b\x6d\xdd\x94\xb1\x0f\x22\x47\xe5\xb0\x80\x56\x15\x68\xc1\x13\x2c\x36\x04\x41\x18\x23\x13\xf8\x07\xad\x13\x5a\xc1\x62\x3a\x87\x8b\x00\x38\x1b\x43\x67\x97\x2b\x76\xd0\x2d\x34\xfc\x00\x4a\x7b\x68\x1d\x52\x02\xe1\xa0\x14\x12\x01\xf7\x39\x1a\x0f\x42\x41\xae\x1b\x23\x05\x57\x39\x42\x27\x7c\xdd\x17\x19\x53\x4c\xd9\xa7\x31\x81\xce\x3c\x27\x2c\x27\xb4\x21\xab\x7c\x8d\x02\xee\x19\x03\xfa\xd4\xde\x9b\xe5\x6c\xd6\x75\xdd\x94\xf7\x2c\xa7\xda\x56\x33\x39\xa0\xdc\xec\xc3\x66\x7d\x97\xa4\x77\x11\x31\x65\xec\x49\x49\x74\x0e\x2c\xfe\xdb\x0a\x4b\x02\xb3\x03\x70\x43\x3c\x72\x9e\x11\x3b\xc9\x3b\xd0\x16\x78\x65\x91\x62\x5e\x07\x9e\x9d\x15\x5e\xa8\x6a\x02\x4e\x97\xbe\xe3\x16\x59\x21\x9c\xb7\x22\x6b\xfd\x49\x83\x8e\xac\x48\xe9\x6b\x00\xb5\x88\x2b\x38\x8b\x53\xd8\xa4\x67\xf0\x36\x4e\x37\xe9\x84\x7d\xdc\x6c\xef\x1f\x9e\xb6\xf0\x31\x7e\x7c\x8c\x93\xed\xe6\x2e\x85\x87\x47\x58\x3f\x24\xef\x36\xdb\xcd\x43\x42\xd6\x5f\x10\x27\x9f\xe0\xfd\x26\x79\x37\x01\xa4\xf6\x50\x11\xdc\x1b\x1b\xb8\x6b\xcb\x44\x68\x1d\x16\x53\x48\x11\x4f\x8a\x97\x7a\x20\xe3\x0c\xe6\xa2\x14\x39\x29\x52\x55\xcb\x2b\x84\x4a\xef\xd0\x2a\x12\xc2\x0c\xda\x46\xb8\x30\x3c\x47\xd4\x0a\x90\xa2\x11\x9e\xfb\xde\xfe\x4e\xce\xd7\x12\xf1\x13\x71\x7e\x4c\xfb\x31\xb2\x50\x47\xf1\x06\x5d\x98\x49\xae\xd5\x20\x77\x58\x9e\x61\x8d\x96\x10\xab\xc2\x62\x07\x6f\xb5\xda\x21\x01\x10\x2e\xa8\xda\x21\xa3\x32\x7f\x56\x0d\x17\x72\x4a\x1b\x70\xc9\xae\x66\xec\x0a\xfe\xa3\x39\x36\xdc\x56\x42\x2d\x61\xbe\x22\xc3\xf0\xa2\x20\xae\xa3\x15\x35\xfa\x73\x94\xe9\x7d\xe4\xc4\xe7\xde\x9b\x69\x4b\x3c\x83\xab\x0f\x77\x98\x3d\x0b\xff\x0b\xc4\xcf\x22\x5f\x58\xed\x1b\x39\x61\x99\x2e\x0e\x3d\x89\x1a\xc3\x71\x2c\xe1\x7a\x3e\xff\xed\x5b\x1e\x5f\xbe\xc2\x32\x9e\x3f\x57\x56\x53\xb7\xa2\x5c\xcb\x20\xf6\x4d\x79\x5d\x2e\xca\x9b\xf0\x9f\xa3\xe7\xe6\xa6\x37\x4b\xea\x4e\x54\xf2\x46\xc8\xc3\x12\xce\x53\xdd\x5a\xda\xf8\x94\x53\xb3\xff\xb6\xfa\x7c\x02\xe7\xf7\x28\x77\xe8\x69\x03\x21\xc1\x16\xc9\xf3\xe2\xa0\x9d\x23\x5c\xe4\xd0\x8a\xf2\x25\x55\x37\x52\xbc\x9d\xcf\x5f\x7c\xa4\x0d\x89\xf4\xad\xe9\x35\x4d\xcb\x56\xca\xfb\x1e\xb6\xa6\x28\x1d\x10\xcd\xf4\xb5\xba\x9c\xcb\xfc\x22\x48\x84\x08\x7e\x9f\x9b\xfd\xe5\x0a\x66\x57\xf0\x1e\xd1\x84\x85\x97\x84\x1f\x4e\x72\xc0\x87\x11\xd3\x61\x99\x84\xef\x80\xa6\x45\xf9\x47\xe3\x75\xca\x90\x66\xf5\x93\xce\x94\xe5\x30\x83\xb1\xef\xde\xeb\x86\xc8\x9a\x3d\x5d\x94\x14\x05\xbc\x29\x8a\xe2\xa4\xd7\xd7\x94\x8b\xde\xa7\x51\xcc\x50\x2c\x22\x56\xcf\xcb\xf0\x35\x39\x75\xed\x84\x13\xe1\xce\x02\x19\x8f\x7b\x1f\x15\x98\x6b\xdb\xaf\xf3\x92\xde\x1f\x85\xab\x63\xc0\x5b\x6a\x26\x2d\x2e\x15\x6f\x0d\x1d\x41\xce\x1d\xfe\x60\x5e\x74\xbc\x46\x72\x9a\x95\x50\xa1\x13\x51\x26\xe9\x81\x5c\xbd\x2c\x68\x64\x07\xc1\x3f\xe2\x77\xfc\x5d\xeb\x06\x13\xba\x8e\x9e\xd4\xc9\xd0\xfe\xf8\x6e\x68\x8b\xc5\xd0\xb8\x6f\x29\x1e\xa9\xd3\xd5\x86\x55\x90\x11\x97\xa2\x22\x49\xd1\x62\xa8\xfb\x7f\x00\x00\x00\xff\xff\x4c\xec\x61\x77\xce\x05\x00\x00") + +func uiCssAppCssBytes() ([]byte, error) { + return bindataRead( + _uiCssAppCss, + "ui/css/app.css", + ) +} + +func uiCssAppCss() (*asset, error) { + bytes, err := uiCssAppCssBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/css/app.css", size: 1486, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiCssGraphCss = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x7c\x8d\x31\x0e\xc2\x30\x0c\x45\xf7\x9c\xc2\x12\x2b\xad\xd2\x81\x25\x9d\x39\x48\x20\x9f\xc6\x22\x72\x23\x27\x88\x4a\x88\xbb\x03\x29\x12\x4c\xdd\xfc\xf4\x9e\xed\x3e\xb1\x80\x1e\x86\xe8\xc2\x29\x39\x92\x59\x30\xbe\xa9\x54\x9d\xaf\xe8\xee\x1c\x6a\x74\x34\xf4\x87\xbc\x8c\xe6\x69\x4c\xeb\x6d\x5b\x58\x13\xa7\x08\x3f\x33\xfc\x9b\x53\xba\x61\x55\x7e\xe1\x42\xd9\xd7\xb8\xff\xce\x9b\x5f\x1d\xed\xac\xb5\x8d\xa3\xcf\xe8\x14\x12\xa0\x2c\x93\xa3\xb3\x72\xc9\xc7\x30\xa1\x7c\x0e\xbf\x02\x00\x00\xff\xff\xd9\x8a\x57\x81\xbd\x00\x00\x00") + +func uiCssGraphCssBytes() ([]byte, error) { + return bindataRead( + _uiCssGraphCss, + "ui/css/graph.css", + ) +} + +func uiCssGraphCss() (*asset, error) { + bytes, err := uiCssGraphCssBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/css/graph.css", size: 189, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiCssLibsNvd3171NvD3MinCss = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xcc\x5a\x4f\x6f\xe3\xba\x11\xff\x2a\x2a\x16\x05\x1a\x40\x12\x24\xc5\x4e\x62\xe9\xf4\x5e\x1b\xb4\x87\x3e\xa0\x87\xa2\x77\x5a\xa2\x6d\xc2\x94\x28\x50\x74\x6c\xc7\xd8\xef\x5e\xfe\x11\x25\x52\xa4\x64\x67\x91\xc3\x83\x91\x0d\x43\xfe\x66\x38\x1c\xce\x5f\x7a\xe3\xe6\xa3\x7a\x0e\xf8\xbf\x11\xb8\xa0\xee\xd6\x12\xd4\x30\x48\x23\xf8\x01\x1b\xd6\xe5\x0d\x69\x60\x41\x5a\x50\x22\x76\xcd\xd3\x9f\x36\x38\x68\x01\x3b\xdc\x76\x08\x63\x85\xeb\x18\x25\x47\x98\xff\x48\x92\xa4\x1f\x47\x9a\x34\x7e\x5d\x17\xdd\x01\xb4\x30\xa2\xb0\xa9\x20\x45\xcd\x3e\x2f\x29\xea\xda\xf7\x6a\x0f\x3b\x1f\xdf\xb8\x22\x35\x40\xcd\xcd\x65\x34\x41\x8b\xdf\x97\x25\x92\x64\xca\x1e\xa3\x06\x7a\xc4\x86\x6b\xf1\xf9\x82\x98\xf1\x27\xa4\x44\x72\x0b\x3d\x3b\xc8\xd5\xfb\xe2\x0f\x83\x3f\xc0\xe5\x0f\xd4\x04\x0c\x5e\xd8\x6d\x47\x1a\x16\x9d\x21\xda\x1f\x58\xfe\x9a\x0c\x07\xb8\x2c\x52\x69\x21\x2e\xd9\x63\xb0\x3b\x32\x88\x7f\x22\xd0\x94\x07\x42\xf3\x1a\x55\x15\x86\x1e\xc5\x57\xa8\x03\x5b\x0c\xab\x9b\x4f\xd9\x5b\x40\xbb\x80\xc2\x92\x49\x65\x5b\xb6\xc0\x28\x68\x3a\xc4\x10\x69\x72\x73\x2d\xc8\xd6\x49\xad\xd4\x07\x68\x11\xd5\xe4\x33\x7a\x0c\x79\x86\xdb\x23\x62\x0f\x81\x7d\x02\xc6\x07\xf2\x01\xa9\x2d\x66\x3a\x05\x2a\xd0\x78\xa0\xfc\x07\xa8\xaa\x37\xf8\x32\xc5\xa9\x1b\x14\x00\xba\xdf\x82\xbf\x25\xa1\xfc\x3c\xcd\xb0\xf3\xa2\x53\x13\x5d\x9f\x30\x43\x9c\x44\xfe\xb1\xa7\xe4\xd4\x2a\xa1\x43\x17\xf2\x2f\x42\xd1\x27\xb7\x1d\x80\x17\xc0\xfc\xce\x4a\x0a\x19\xf4\xb0\x74\x5c\xe7\x4f\x72\x51\x73\x2a\xc8\xa5\x0e\xbf\xa4\x08\x87\x64\x41\x1d\xf9\x1d\xb3\x98\x21\x35\xbd\xec\xae\x4c\x3e\x7f\x2f\x5c\x7b\xd0\x51\xca\x63\x52\xd2\xa2\x4e\x18\x43\xc5\x27\x4f\x93\xf6\x12\x74\x5c\xbf\x51\xc7\x23\xd8\x6e\x0a\x52\x32\x41\xd0\x9d\x28\x9c\x38\xe6\xdb\x12\x76\x41\x19\x53\x02\x40\x8f\x1c\xe9\x49\x07\x67\x54\xb1\x43\x9e\xb5\x97\x05\xba\xff\x52\x04\x9a\x3d\x86\x16\xbd\xf2\xb7\xdd\x6e\x67\x73\x4a\xe3\xf5\x0c\x2f\x86\xca\xa3\x0a\xf4\x9a\xcd\xcb\xcb\x8b\x4d\x3c\x4b\xcb\x6d\x73\x0f\xc5\xa0\x4b\x7a\x47\x87\x10\xde\x41\xa6\x3d\xb2\xaa\xaa\x3b\xc8\xac\x47\x96\x65\x39\x23\x39\xe3\x87\x97\x16\xd1\xa1\x4f\x98\xa7\xab\xf6\x52\x78\x13\xc2\x84\xb0\x3b\x6d\x7b\x5a\xc9\x7f\xb3\xd9\xcc\x4b\xd2\x63\xb6\x40\x7c\x0a\xdb\x0a\x56\xf3\x64\x3e\x1b\x88\x5f\x47\xbc\x50\xf8\x7f\xf0\xa9\xfb\xbd\x77\x08\xe1\x18\xde\x04\x70\x9f\xe4\x9e\xef\xf5\xee\x23\xf3\x7e\xcf\x66\xcc\xe9\xf3\x38\x40\x21\xd0\x26\x31\x22\x35\x87\x60\xf8\xab\x2b\x01\xe3\x75\x90\xc9\x42\x0c\x65\x79\x64\x0b\xe5\xd4\x3a\xc6\xed\xf4\x5c\xe4\x10\x09\xa3\x56\x0c\x1e\xe0\x1a\xaf\xff\x82\xea\x96\x50\x06\x1a\xe6\x14\x53\xc6\xda\xcf\xf8\x8c\xd8\xc1\x88\xa7\x5d\xe0\x9c\x7d\xdc\xc2\x08\xbb\xa6\x2b\x58\x61\x37\xb4\x77\x5b\x8e\xf4\xbf\xc8\xc5\xcd\x02\xbf\xc4\xc8\x51\xb4\xf7\xd4\xf1\x34\xe2\xfb\x01\x37\x2b\x38\xbc\x0a\xa7\xb3\x2e\x64\xb3\x74\x23\x1b\xeb\x4a\x86\x9d\x24\xfb\x48\xd8\x5e\x5f\x2c\xeb\x60\x04\x00\x70\xcc\xa6\x18\x62\x8d\xbd\xb3\x59\x52\x21\x5e\x95\x5e\xfe\x2d\x6c\xbd\x3c\xd1\x8e\x57\x66\xf0\xcc\x4b\x55\x11\x27\x7e\x76\x1f\x7b\x89\x8b\xf8\xe0\x36\x68\x98\x9c\xca\x43\x54\x02\x8c\xc9\x89\xa9\x72\x57\x2f\x9d\x78\x76\xe0\x19\x02\x0b\x5f\x53\x0b\xc7\x03\xab\xb1\x67\xbe\xee\x7c\x93\xdc\x10\x9c\x59\x67\x82\x67\xc8\x16\x83\x6b\xbe\xc5\xa4\x3c\x16\x7d\xd0\x4e\x92\xbf\x16\x07\x15\xcb\xc4\x58\x1c\x8f\x11\xc2\x93\x64\xab\x8c\xf9\xb9\x8a\x78\x11\x5e\x91\x73\x38\xf9\x3b\x18\x91\x37\x29\xc0\x96\x5c\xfa\xa5\x3c\x09\x78\x38\x0f\x64\xee\x33\x72\x64\x9c\x3d\x0d\x07\x7e\x08\xfc\x45\x8e\x94\x37\x09\x3c\x34\x56\xe8\xd4\xe5\x1c\x5d\xf4\x52\x4d\xa7\x9d\x99\xfe\x4a\x87\xe4\x9f\xaf\x92\x24\x48\x79\x62\x0c\x7e\xe3\xe9\x0f\xeb\x1b\x1f\x73\x81\x88\xfa\x81\x48\x05\x36\x40\x06\xcc\xf2\x28\x2c\xba\xa9\x6e\x63\x96\xf4\x19\x90\x00\x37\xe4\x1f\x80\x01\x33\xbb\xbc\xf9\xb3\x4b\xb4\xa5\xa7\xee\x10\xc4\x5c\x40\xe8\xc4\xa6\x34\xbb\xd7\x26\x69\x72\x65\x9b\x46\xa3\x28\xcd\xdb\x48\xc9\xc6\x41\x30\xdc\x73\x6e\x2a\x95\x71\x9e\xb0\xd3\x36\xde\xf7\xa4\x7e\xa8\xee\x40\x82\x12\xd1\x12\x4f\x2a\x1a\xab\x1b\x99\x3f\x50\xe2\x75\x5e\x49\xf0\xfb\xa0\x5d\xb3\x40\xf6\x14\x35\xf1\xaa\x98\x51\xbf\x99\x20\xc9\x01\x97\x3a\xd3\x89\x12\xa5\x1b\x46\x76\xf8\x49\xcd\xd2\x64\x9e\xc8\x17\xb9\xb2\x07\x49\x5b\x22\x42\xef\xc7\x58\x20\x65\x25\x48\xb2\xf2\x21\xda\x06\xee\x81\x45\x5b\xbd\x64\xaf\xd9\x9b\x56\xde\x68\x92\x73\x4f\x04\xef\xef\xef\x4e\x0c\x5d\x3d\xd0\x7a\xef\x08\x85\x4b\x9c\x1d\xa5\xab\x30\x0c\x28\x8f\x80\x10\xff\x9d\x70\x3f\x44\x0d\x60\xb0\xf3\x98\x83\xef\xea\x74\xc9\x98\xef\x29\xb8\x3e\xf6\x34\xe0\xd9\x2c\xf0\xf6\x97\xb6\xfd\x3c\x0f\x41\x21\xae\x51\x27\xaa\x85\xff\x01\x7c\x82\x9d\x2c\x4b\x66\x5e\x2c\x1c\x23\x4c\xa7\x6a\x18\x26\x2a\xc0\x85\xa7\xfc\x10\xf9\x3a\x34\xaa\xaf\x16\x41\x33\x31\x7d\xb1\xf1\x0b\xbf\xa7\x88\xf8\x76\xfe\x5f\x68\x32\x7f\x6d\x0b\x5b\x81\xfd\x6f\xa7\x72\xcf\x56\x7d\x11\xa1\xba\xb6\x74\x13\xa6\x9b\x97\x30\x5b\x6d\xc2\x78\xbd\x79\x72\x79\xf0\xbb\x2e\xa1\xca\x09\xb3\x37\x9c\xcc\xde\x9d\xaf\x3d\xe2\xfb\x4f\x0d\x62\xb2\xad\x7a\x84\x18\x7c\xc9\x1b\xb4\xb4\x7c\x18\x6c\x21\xf6\xbd\x10\xce\x40\x3d\xa5\xff\x5c\xb1\xfc\x70\x5d\x96\x25\xee\x99\x62\xf3\x4d\xcd\xac\x04\x4d\x2e\x6e\x23\xc1\x93\x61\x23\x8f\x02\x4a\x19\xcb\x66\x0e\x26\x32\x0c\xbb\x84\x7a\x74\x5d\x56\x40\xc7\xdd\xff\x28\x7d\xd6\x8e\x4f\x1e\x44\xcb\xbb\x9e\x40\xd4\x6c\x91\x94\x50\xba\xfb\x83\xcc\x25\xa9\x4d\x69\x37\xbb\xcf\xcf\xcf\x8b\x9d\xb2\xc5\x29\x9c\x93\x6d\x2a\x0d\x8f\x6b\x86\xa6\xe5\xde\xbf\x89\x7e\xea\xf1\x7e\xc8\x39\xc0\x45\x0a\x3f\x27\x81\x98\xb9\x2a\xc5\xd8\x5e\x50\x8c\x5e\x16\x6f\x60\x6d\x55\x30\xab\x64\x71\x47\x8b\x1f\x77\x1a\x5d\x83\xf8\xd1\x35\xb8\xd8\x78\x95\x25\xfb\x5c\x3f\x4d\x99\x1e\x7a\xd4\xd8\xf4\x2a\x53\xf6\xf4\x66\xda\xf4\xd3\xf3\x12\x88\xe7\x1b\xa6\x78\x38\xcf\x44\x63\x19\x17\xa7\xb0\x36\xf8\x30\x9e\x81\x61\x25\x9a\x5d\xbb\xf3\x9d\xf8\xb8\xdb\x83\x7c\x25\x66\x7e\x4f\x70\xff\xb6\x10\x7e\xa7\x43\x9c\x51\x89\x2f\x3c\xc4\x1b\x3f\x9d\xb7\xa7\xf6\xb6\x71\xb6\xf1\xeb\x9e\x45\x95\x5c\xfc\x2c\x60\xdb\x11\x7c\x62\xb0\x18\x2b\xa5\xa8\x24\x98\xd7\xba\x32\x53\x64\xeb\x75\xa8\x7f\xd2\xa7\xc2\x58\x19\x9e\x03\x5b\x50\x55\xa2\x04\x49\x87\xee\x42\x0c\x03\xce\x16\x55\xd3\x76\xe5\x53\xb5\x8d\xa2\xd9\xe2\x46\x63\xb7\x64\xd2\x84\x76\xa0\x46\xf8\x9a\xcb\xce\xc2\x34\x2a\x5e\x93\x14\xea\x6b\x00\x8c\xf6\x4d\x8e\xe1\x8e\x15\xbe\x2f\x88\xce\x07\xc4\xa0\x30\xde\x52\x3c\xaa\x9c\x29\x68\x8b\xef\x6d\x40\x7d\xbd\xa6\xb7\x2d\x9d\x4e\x98\xda\x1f\x75\xed\x6a\x39\x7e\x7b\x5a\x56\xe3\xfa\x69\xd2\xc4\xad\x54\x38\xb5\x1a\x57\xe3\x15\x26\xf4\xbe\xcb\x68\x51\x0c\xb3\xd6\x56\xbb\xe4\x43\x5e\x8c\xeb\x21\x3e\xd8\xb8\x1c\x55\x50\x5c\x7b\x96\xf0\xd5\xe9\x0e\xf6\x9a\xc3\xd9\x5c\x36\x0f\x7d\x89\x86\x71\x68\x4c\x5f\x23\xc3\xe4\x7b\x3b\x7d\xb3\xd4\x15\x1c\x9e\x6f\x35\xa0\x7b\xd4\x70\x7f\xd1\x10\xd1\xdc\xca\xc7\x4e\x21\x7a\xa4\x1f\x08\xa6\xfd\x29\x8f\xee\x73\x5e\xb3\x7a\x0d\xf5\x4f\xfc\xba\xf6\xfb\x8d\x61\xce\x25\x14\x86\xac\xaf\x75\x4b\x18\x23\xb5\x71\xfb\x3f\xe0\x56\x7c\xe6\x9b\x7d\xf9\x3c\x90\x04\xc9\x4c\xd3\x3f\x2c\xdb\x2b\xe9\xb8\x62\x2a\xa4\x75\xf5\xb1\xd6\xfa\x70\x64\x36\x09\xb9\xd7\x35\x37\xed\xd3\xa8\x91\xba\x53\xae\xdd\x33\x14\x8f\x0a\xd6\x56\x4c\xf4\xcb\x7a\xbb\x97\xf1\x75\x42\xf8\xaf\xd8\xd7\x05\x07\xac\x1a\x2e\x52\xb0\xdb\xf0\x1f\xc9\xb6\xe0\xa1\x93\x37\x84\x00\xf7\xe2\x8d\xdf\x13\x4e\xe9\xe3\x23\xbc\xde\x3c\x59\xda\xc1\x7d\xc8\x4c\x67\x1c\x99\x0a\xb8\xef\x89\x62\x42\x4a\xe3\x03\x5f\xc5\x02\x61\xca\x9b\xf6\xf2\xa6\x52\x5e\xeb\xb2\x79\x6c\xbf\x62\x98\xcb\xeb\x9e\xac\x8c\xf5\x73\x3f\xcf\x48\xeb\x83\x8b\x69\xab\x63\x77\xce\xa3\x9e\x2a\x94\x9d\x46\xfb\x13\xaa\x60\x50\xa1\x8f\x9b\x22\x12\xc6\xdd\x1b\xba\x18\x3e\xae\xcd\x45\xae\xe2\x1d\x69\x78\x60\xcb\x7c\x09\x42\x7f\x39\xa0\xf9\xf2\xbe\x9a\x70\xbb\x1a\x94\xf6\x7c\xc7\xea\xa2\x96\xef\xce\x81\xbc\x17\xae\x09\xbf\x31\xef\x7f\x1b\xd0\x46\x39\x79\x90\x37\x4a\xee\x7f\x0a\xc1\xe5\x6b\xe6\x6c\xd9\xab\xbe\x4a\x17\x79\x57\x60\xad\x1a\x57\x7c\x81\xf2\xff\x00\x00\x00\xff\xff\x04\x28\x3d\x62\xbe\x20\x00\x00") + +func uiCssLibsNvd3171NvD3MinCssBytes() ([]byte, error) { + return bindataRead( + _uiCssLibsNvd3171NvD3MinCss, + "ui/css/libs/nvd3/1.7.1/nv.d3.min.css", + ) +} + +func uiCssLibsNvd3171NvD3MinCss() (*asset, error) { + bytes, err := uiCssLibsNvd3171NvD3MinCssBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/css/libs/nvd3/1.7.1/nv.d3.min.css", size: 8382, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiCssRest_explorerCss = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x94\x54\xdd\x6f\xdb\x36\x10\x7f\xe7\x5f\x71\xc8\x30\xa4\x0d\xfc\x91\xb6\xdb\x8b\x02\x0c\x53\xdc\x0c\x13\x16\x38\x83\xe5\xac\xe8\x23\x45\x9d\x24\xa2\x14\x8f\x23\xa9\xc8\xc6\xb0\xff\x7d\x47\xc9\xd9\x9a\x64\x5f\xf5\x93\x8f\xbc\xbb\xdf\xc7\x1d\xb5\xbe\xb8\x10\x1b\x72\x47\xaf\xdb\x2e\xc2\xdb\xcb\x37\xdf\xc0\xbe\x43\xd8\x90\xfa\xe4\x49\xaa\x0e\xf2\x21\x76\xe4\xc3\x4a\x88\x5b\xad\xd0\x06\xac\x61\xb0\x35\x7a\x88\x9c\x96\x3b\x4e\x41\x38\xdd\x2c\xe0\x17\xf4\x41\x93\x85\xb7\xab\x4b\x78\x95\x12\xce\x4e\x57\x67\xaf\xaf\xc4\x91\x06\xe8\xe5\x11\x2c\x45\x18\x02\x72\x03\x1d\xa0\xd1\x06\x01\x0f\x0a\x5d\x04\x6d\x41\x51\xef\x8c\x96\x56\x21\x8c\x3a\x76\x13\xc8\xa9\xc5\x4a\x7c\x3c\x35\xa0\x2a\x4a\xce\x95\x9c\xed\x38\x6a\x3e\xcf\x02\x19\x85\x00\xfe\x75\x31\xba\x6c\xbd\x1e\xc7\x71\x25\x27\x96\x2b\xf2\xed\xda\xcc\x59\x61\x7d\x5b\x6c\x6e\xb6\xe5\xcd\x92\x99\x0a\x71\x6f\x0d\x86\x00\x1e\x7f\x1d\xb4\x67\x81\xd5\x11\xa4\x63\x1e\x4a\x56\xcc\xce\xc8\x11\xc8\x83\x6c\x3d\xf2\x5d\xa4\xc4\x73\xf4\x3a\x6a\xdb\x2e\x20\x50\x13\x47\xe9\x51\xd4\x3a\x44\xaf\xab\x21\x3e\x31\xe8\x91\x15\x2b\xfd\x3c\x81\x2d\x92\x16\xce\xf2\x12\x8a\xf2\x0c\xae\xf3\xb2\x28\x17\xe2\x43\xb1\xff\xf1\xee\x7e\x0f\x1f\xf2\xdd\x2e\xdf\xee\x8b\x9b\x12\xee\x76\xb0\xb9\xdb\xbe\x2f\xf6\xc5\xdd\x96\xa3\x1f\x20\xdf\x7e\x84\x9f\x8a\xed\xfb\x05\x20\xdb\xc3\x20\x78\x70\x3e\x71\x27\x2f\x74\xb2\x0e\xeb\x15\x94\x88\x4f\xc0\x1b\x9a\xc9\x04\x87\x4a\x37\x5a\xb1\x22\xdb\x0e\xb2\x45\x68\xe9\x01\xbd\x65\x21\xc2\xa1\xef\x75\x48\xc3\x0b\x4c\xad\x06\xa3\x7b\x1d\x65\x9c\xe2\x17\x72\xfe\x82\xc8\xef\x99\xf3\xae\x9c\xc6\x28\x12\x8e\x95\x3d\x86\x34\x13\x45\x76\x96\x3b\x2f\xcf\xbc\x46\x19\xe4\xb6\xf6\x38\xc2\x35\xd9\x07\xe4\x04\x84\x57\x8c\x76\xac\x18\xe6\xfb\xb6\x97\xda\xac\x78\x03\x5e\x8b\x8b\xb5\x58\xb1\xac\x78\x73\x70\x86\x3c\xfa\xc5\xd3\x70\x93\x7a\x93\x09\xcf\x8e\x6f\xa9\x85\xdf\x78\xf8\x1d\xa6\x65\xce\xe0\xcd\xe5\xe5\xd7\x57\xe2\xf7\x2f\xaa\x6d\x0c\x49\x2e\x35\xd8\xc4\x2b\x0e\x9d\xac\x6b\xb6\x27\xf5\x72\x07\x7e\x1e\xee\x90\x4e\x47\x5d\xc7\x2e\x83\x6f\xff\xa5\xfd\xd4\xac\x92\xea\x53\xeb\x89\xfd\x5b\x2a\x32\x49\xfe\x57\x4d\xd3\xfc\x63\xcd\x52\xcd\x7f\xa6\xda\x5e\xfa\x56\xdb\x65\x45\x31\x52\x9f\x9d\xa0\xff\xab\xf0\x3b\xe8\xde\xcd\x32\xf8\x60\x39\x9e\x7c\xb0\xe4\x7b\x69\x12\xf1\x88\x87\xb8\x8c\x5e\xda\xc0\xb3\xe2\xae\x83\xe3\xb9\x2b\x19\xf0\xea\x25\xe2\xbb\xff\x03\xa8\xad\x1b\xe2\x9f\x88\x19\xc7\xbc\x94\x3a\xbe\x28\x7c\xb4\xd7\x51\xd0\x69\xa9\x32\x7e\x6c\x86\xd7\xeb\x61\x42\x9e\xd8\x36\xb2\xd7\xe6\x98\xc1\x79\x49\x83\x57\xe9\x13\x54\x23\xfc\xec\xe9\x7c\x01\xe7\x1b\x3e\xd2\xbc\x83\x5b\x1c\x39\x3c\x45\x0b\xe8\xc9\x52\xe0\xc7\x8d\x7f\x87\xb7\x54\x06\xa5\xbf\x1e\x58\x8d\x7d\x86\x2d\xab\x40\x86\x1f\x62\xc2\xf6\xb3\x47\x8f\xa3\x8d\xe4\xe6\x61\xa7\x96\x7f\x04\x00\x00\xff\xff\x29\xec\xd5\x5f\x1d\x05\x00\x00") + +func uiCssRest_explorerCssBytes() ([]byte, error) { + return bindataRead( + _uiCssRest_explorerCss, + "ui/css/rest_explorer.css", + ) +} + +func uiCssRest_explorerCss() (*asset, error) { + bytes, err := uiCssRest_explorerCssBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/css/rest_explorer.css", size: 1309, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiIndexHtml = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x94\x55\x51\x93\x9b\x36\x10\x7e\xe7\x57\x6c\xe8\x83\x93\x89\x0d\xbe\x5c\x3a\x6d\xaf\xf6\xb5\xc4\x71\x1b\x4f\x53\xae\x63\x7c\xcd\xe4\xa9\x23\xc3\x02\x4a\x84\x44\x25\x61\x1f\x33\xfd\xf1\x5d\x01\xbe\xf8\x5a\x2e\x93\xf8\xc5\x48\xfb\xed\xee\xb7\xbb\xdf\xc2\xe2\xc9\x6c\xe6\xad\x54\xdd\x6a\x5e\x94\x16\x5e\xcc\x2f\x5e\xc2\xae\x44\x58\xa9\xf4\xa3\x56\x2c\x2d\x21\x6a\x6c\xa9\xb4\x09\x3c\xef\x2d\x4f\x51\x1a\xcc\xa0\x91\x19\x6a\xb0\x04\x8b\x6a\x82\x20\x0c\x96\x29\xfc\x89\xda\x70\x25\xe1\x45\x30\x87\xa7\x0e\xe0\x0f\x26\xff\xd9\x8f\x5e\xab\x1a\xa8\x58\x0b\x52\x59\x68\x0c\x52\x00\x6e\x20\xe7\x02\x01\xef\x52\xac\x2d\x70\x09\xa9\xaa\x6a\xc1\x99\x4c\x11\x8e\xdc\x96\x5d\x92\x21\x44\xe0\xbd\x1f\x02\xa8\xbd\x65\x84\x65\x84\xae\xe9\x94\x9f\xa3\x80\x59\xcf\x03\xfa\x95\xd6\xd6\x57\x61\x78\x3c\x1e\x03\xd6\xb1\x0c\x94\x2e\x42\xd1\xa3\x4c\xf8\x76\xb3\x5a\xc7\xc9\x7a\x46\x4c\x3d\xef\x56\x0a\x34\x06\x34\xfe\xdd\x70\x4d\x05\xee\x5b\x60\x35\xf1\x48\xd9\x9e\xd8\x09\x76\x04\xa5\x81\x15\x1a\xc9\x66\x95\xe3\x79\xd4\xdc\x72\x59\x4c\xc1\xa8\xdc\x1e\x99\x46\x2f\xe3\xc6\x6a\xbe\x6f\xec\x83\x06\x9d\x58\x51\xa5\xe7\x00\x6a\x11\x93\xe0\x47\x09\x6c\x12\x1f\x5e\x45\xc9\x26\x99\x7a\xef\x36\xbb\x37\x37\xb7\x3b\x78\x17\x6d\xb7\x51\xbc\xdb\xac\x13\xb8\xd9\xc2\xea\x26\x7e\xbd\xd9\x6d\x6e\x62\x3a\xfd\x02\x51\xfc\x1e\x7e\xdb\xc4\xaf\xa7\x80\xd4\x1e\x4a\x82\x77\xb5\x76\xdc\x95\xf6\xb8\x6b\x1d\x66\x01\x24\x88\x0f\x92\xe7\xaa\x27\x63\x6a\x4c\x79\xce\x53\xaa\x48\x16\x0d\x2b\x10\x0a\x75\x40\x2d\xa9\x10\xaf\x46\x5d\x71\xe3\x86\x67\x88\x5a\x06\x82\x57\xdc\x32\xdb\x9d\xff\x57\xce\xa7\x14\xd1\x2d\x71\xde\x26\xdd\x18\x3d\x97\x47\xb2\x0a\x8d\x9b\x49\xaa\x64\x5f\x6e\x2f\x9e\x5e\x46\x57\x10\xc9\x4c\xe3\x11\x5e\x29\x79\x40\x02\x20\x3c\xa5\x6c\xed\x9e\xd2\xfc\x5c\x54\x8c\x8b\x80\x14\xf0\xcc\x9b\xcd\xae\xbd\xc5\x93\x4c\xa5\xb6\xad\x91\x46\x59\x09\x3a\xf7\x7f\x00\x8b\x12\x59\x76\xdd\x0d\x79\x51\xa1\x25\x19\x94\x4c\x1b\xb4\x4b\xbf\xb1\xf9\xec\x7b\x7f\x30\x09\x2e\x3f\x42\xa9\x31\x5f\x4e\x9c\x16\x0c\x89\x21\x27\x4e\x26\x28\x94\x2a\x04\xb2\x9a\x1b\x97\x2c\x4c\x8d\xf9\x29\x67\x15\x17\xed\x32\x51\x8d\x4e\xf1\x79\xc2\xa4\x79\xfe\x87\x56\x57\x2f\xe7\xf3\xe9\x0f\xf3\xf9\x3f\xc3\xfd\x4a\x65\xe8\xee\x27\xa4\x14\xb1\x9c\x18\xdb\x92\x6c\x4a\x44\x3b\x01\xc7\x73\x39\xb1\x78\x67\x5d\xbc\xc9\x39\x05\x87\xf5\x3f\x61\xfd\x9e\x93\xef\x70\x24\xc7\xbd\x09\xe5\x21\xbb\x0c\x2f\x82\xef\x82\x0b\x7a\x0c\xb2\xcb\xa0\xe2\x32\x20\xab\xff\xa5\x51\x48\xab\x5f\x85\x27\xc1\xd8\xbf\x48\x38\x42\x69\xd4\x5f\xe5\x59\x68\x56\x97\xe7\x1e\x26\xd5\x9c\x36\xd7\xe8\x94\x10\x1f\x86\x82\xa8\x9c\xcb\xe0\x32\xf8\x36\x1c\x6a\xf9\x40\xf0\x45\xd8\x43\x3f\xe7\x37\xda\x88\x2f\x75\x26\xb9\x96\x9a\x0b\x3a\xce\x03\x5a\xea\xd3\xf9\xb1\x18\x96\x5b\x81\xd7\xf7\xaf\xb9\x45\xd8\x5f\x38\x79\x85\x27\x7d\x2d\xf6\x2a\x6b\x07\xbc\xbb\xa3\x25\x48\x05\x33\x66\xe9\x53\xc7\x63\x76\x18\x9a\x40\x56\x36\x34\xe9\x9b\xd0\x7f\x08\x99\x75\x2d\x1d\x9e\x4b\x55\x61\x4c\xfb\xe1\x9f\xe7\x65\x23\x41\x2a\x25\x39\xed\xcd\x58\x2c\xff\xfa\xf7\xde\x38\xee\xe9\x46\x3b\x3b\x8d\x76\xdc\x7f\xbb\x4e\x76\xb0\x1e\x20\xe3\x51\x24\x09\xdd\x8c\x7b\xc7\xce\x34\xee\x65\x88\xd5\x63\x6e\x49\x67\x1b\xf7\xeb\x44\x35\xee\xf6\xab\x33\xdd\x7b\xf5\x93\x41\x3d\x9c\x32\x7e\x00\x9e\x2d\x7d\xad\x94\xbd\x77\xcf\x1b\x21\xde\xa0\xfb\x98\xad\x68\xd9\xe9\x33\x41\x6d\xa0\xd9\x13\xf6\x11\xf1\xb8\xe5\xf9\xaf\x3e\x16\x61\x3f\x79\x4a\xd8\xbd\x73\xfe\x0d\x00\x00\xff\xff\xee\xd4\x3d\x5f\x26\x07\x00\x00") + +func uiIndexHtmlBytes() ([]byte, error) { + return bindataRead( + _uiIndexHtml, + "ui/index.html", + ) +} + +func uiIndexHtml() (*asset, error) { + bytes, err := uiIndexHtmlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/index.html", size: 1830, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiJsAppJs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\x3d\x7f\x73\xdb\x36\xb2\x7f\x5f\x3f\x05\xaa\x99\x9c\xa9\x8b\x4c\xd9\xed\xdc\xcd\x7b\xf2\xb9\x77\x6e\xec\xa6\xbe\x4b\xec\x3c\xdb\xc9\xbd\x8e\xc7\xe3\xa1\x45\x58\x62\x4b\x91\x2a\x49\xf9\xc7\xf5\xfc\xdd\xdf\x2e\x7e\x90\x00\x08\x90\x94\x6c\x39\x69\x5e\x38\x99\x48\x02\x17\x8b\xc5\x62\xb1\xd8\x5d\x00\xeb\xe1\x90\xbc\xa6\x09\xcd\x82\x82\x86\xe4\xea\x9e\x14\xf9\xd8\xff\x0a\x0a\xf3\x74\x91\x8d\xe9\x88\x8c\xd3\xf1\x2f\x59\x1a\x8c\xa7\xc3\x8c\xf2\xb2\xe1\x22\x1f\x16\xf9\xd0\xf7\x19\xdc\xfe\x31\x39\x3a\x3e\x23\x07\xfb\x87\x67\x5f\xc3\x6f\x2c\x7a\x95\xce\xef\xb3\x68\x32\x2d\xc8\x37\x5b\xdb\x7f\x26\x67\x53\x0a\x45\x02\x0b\xd9\x5b\x14\xd3\x34\xcb\x7d\x01\xfb\x26\x1a\xd3\x24\x87\xa6\x17\x49\x48\x33\x52\x00\xec\xde\x1c\xe0\xa8\x7c\x33\x20\x1f\x68\x96\x47\x69\x42\xbe\xf1\xb7\x88\x87\x00\x3d\xf1\xaa\xd7\xdf\x41\x14\xf7\xe9\x82\xcc\x82\x7b\x92\xa4\x05\x59\xe4\x14\x70\x44\x39\xb9\x8e\x62\x4a\xe8\xdd\x98\xce\x0b\x12\x25\xd0\x8b\xd9\x3c\x8e\x82\x64\x4c\xc9\x6d\x54\x4c\x59\x3b\x02\x0b\xeb\xc5\x4f\x02\x47\x7a\x55\x04\x00\x1e\x40\x85\x39\xfc\xba\x56\x01\x49\x50\x08\xa2\xf1\x99\x16\xc5\x7c\x34\x1c\xde\xde\xde\xfa\x01\x23\xd8\x4f\xb3\xc9\x30\xe6\xa0\xf9\xf0\xcd\xe1\xab\x83\xa3\xd3\x83\x4d\x20\x5a\x54\x7a\x9f\xc4\x34\xcf\x49\x46\x7f\x5d\x44\x19\xe7\x75\x30\x07\xa2\xc6\xc1\x15\x90\x1a\x07\xb7\x24\xcd\x48\x30\xc9\x28\xbc\x2b\x52\x24\xfa\x36\x8b\x8a\x28\x99\x0c\x60\x2c\xae\x8b\xdb\x20\xa3\x88\x26\x8c\xf2\x22\x8b\xae\x16\x85\xc6\x33\x49\x22\xf4\x5c\x05\x00\xae\x05\x09\xe9\xed\x9d\x92\xc3\xd3\x1e\xf9\x7e\xef\xf4\xf0\x74\x80\x48\xfe\x75\x78\xf6\xe3\xf1\xfb\x33\xf2\xaf\xbd\x93\x93\xbd\xa3\xb3\xc3\x83\x53\x72\x7c\x42\x5e\x1d\x1f\xc1\x28\x1e\x1e\x1f\xc1\xaf\x1f\xc8\xde\xd1\x4f\xe4\x9f\x87\x47\xfb\x03\x42\x81\x63\xd0\x0e\xbd\x9b\x67\xd8\x83\x34\x43\x14\x11\x32\x94\x86\x3e\x39\xa5\x54\x23\xe1\x3a\xe5\x24\xe5\x73\x3a\x8e\xae\xa3\x31\x74\x2d\x99\x2c\x82\x09\x25\x93\xf4\x86\x66\x09\xf4\x08\xeb\xcf\x69\x36\x8b\x72\x1c\xd8\x1c\x68\x0c\x49\x1c\xcd\xa2\x22\x28\xd8\xef\x5a\xbf\xaa\x56\xf6\xde\x03\xe5\x27\xa7\x6c\x7c\x11\x0d\xb6\x96\x04\x33\x9a\xe3\x60\x8d\xd3\x84\x77\x5d\x11\x30\x21\x6f\x23\xf2\x7d\x16\xcc\xc8\xeb\x6c\x91\xd0\x28\x23\xde\x15\xfc\xf2\x27\xfc\xd7\xdf\x27\xb3\x20\x8a\x7d\x90\x91\x3e\xd4\xf8\xc3\x1f\x70\x78\xf7\x92\x30\xa3\xb7\xe4\xfb\x34\xb9\xa1\x80\x94\x12\x0f\x88\xbc\xbf\x02\xea\x6c\xd0\x6f\x83\xa2\x20\x67\x59\x30\xbe\x27\xde\x0c\xbe\xff\xbd\x9c\x35\x71\x70\x95\x4b\xd8\xaf\x6e\x82\x8c\x4c\x69\x00\x9d\xdb\xa7\xf9\x38\x8b\xe6\xd8\x5d\xb2\x4b\x36\xce\x4a\x91\xc5\x01\xa4\x79\x34\x49\xb8\x14\x04\x61\xc8\xba\xcd\x6b\x61\x09\xfe\x2a\xd2\xb9\x94\x4d\x40\x7d\x15\x21\xf0\xcf\x1c\x81\xbf\xb1\xa3\xce\xde\x59\x1a\xd2\x18\xa6\x6b\x04\x1c\xa2\x59\x44\x73\xbf\xc8\xe1\xfd\x90\xfc\x35\xa3\xd7\x34\xa3\x38\x21\xe6\x41\x31\xdd\xed\xf9\xfe\xb0\xb8\x9f\xc3\xe0\xe4\x43\x18\x88\x69\x16\xc5\x3f\x97\xdf\xfc\x10\xaa\xf5\xc8\xf0\xbb\x8a\xa1\xa3\x4e\x7d\xc6\x0e\xbf\x65\x24\xec\x7c\xe5\x5d\x2f\x92\x31\xeb\xb0\xc7\x8b\xfa\xe4\xb7\xaf\x90\x79\x0c\x88\xc2\xc0\x8d\x01\x0a\x0b\x54\x48\x5e\x2e\x41\x8d\xb7\xff\xb3\xa0\xd9\xfd\xde\x04\xe6\xcc\x24\x80\x31\x57\xa1\xf0\x31\x5e\x9f\x9b\xbf\x7b\x7b\x1f\x5e\xf7\x2e\x80\xff\xdb\xf8\x1f\xfb\xb5\xb3\x34\x82\xcb\x93\xbd\xb3\x03\x86\xe5\x1b\x89\x85\x17\x55\xa8\x1e\xfa\xb2\x1f\xbe\x81\x81\xfc\xe7\x3f\xc4\xf9\x6e\x97\xfc\xf6\xd0\xef\x57\x68\x90\x4f\x75\x18\x47\xed\xaa\x5a\xc9\xae\x5f\x11\xc2\xcb\x8b\x20\x2b\x60\x4e\x27\xe1\x00\xb4\x0d\x2a\x17\x26\x17\x26\xef\xb0\xb1\x45\x16\x63\x8f\x50\xd9\xb3\xba\x06\x77\x10\x24\x0c\x8a\x00\x09\xd5\x5e\xe0\xc3\x9a\xb9\x4c\x82\x24\x85\xa9\xc7\x7e\xf8\x13\x5a\x9c\x81\x1c\x7a\x7d\xf2\x27\xb2\xed\x6f\xd1\xbf\x0c\x6a\xb5\x80\x2a\x59\x07\xbe\x76\xa9\x81\x84\x01\xf9\x23\xd1\x0d\x7f\x16\xcc\x15\x01\xa9\x89\x84\x7c\x32\x5a\x2c\xb2\xc4\xf1\x12\x1f\xd4\x29\x23\x92\xd5\x1b\x94\x4f\x50\xb2\x7a\xc4\xf8\x68\x05\x7c\xd8\xa9\x15\x3f\xf4\x75\x50\x03\x44\x10\x36\xf3\x71\x9d\xa0\x79\xe1\xfd\x86\xc3\x30\xc2\xff\x06\x64\x46\x61\xea\x85\x23\xd2\x7b\x77\x7c\x7a\xd6\x83\x41\xbc\x2b\x60\xfe\x15\x23\x58\xfa\x92\x7f\xe4\x69\x72\x90\x65\xa0\xea\x06\x6c\x54\x46\x7c\x6c\x1e\xfa\x35\x0a\x7c\xd0\x1b\x89\xc2\xa4\xd0\xc6\xa4\xe8\x9a\x78\x5f\x87\x40\x45\xbe\x88\x8b\x9a\x74\xc8\xa7\x04\x00\x19\x38\xbf\xb0\x74\xb6\x56\x52\xd6\xf0\x41\x73\x1f\x80\xb2\xe8\x32\x5a\x8c\x98\xcc\xc7\x0e\xcd\xd3\x28\x71\xd3\xc3\x38\xa8\xc0\x39\xc8\xb2\x93\xf6\xd0\xaf\x43\x8a\xe1\x08\xf5\x37\x2a\xe4\x83\x36\x3f\x4f\x28\xac\x57\x05\x9b\x8b\xd0\xb6\xd2\x37\x93\xe2\xf2\x8d\x52\xc3\xbb\x8d\x92\x30\xbd\xdd\x5f\x64\x6c\x1d\x1c\x90\x4b\x10\x2c\x5b\x57\xb1\x25\x2e\xef\x8e\x0e\xe2\xaa\xe8\x21\xd4\x65\x84\x8a\x69\x07\x3f\xff\x4a\x82\x6c\xb2\x98\x41\x63\xb9\x1f\xd3\x64\x52\x4c\xb1\xf8\xe5\x4b\x17\x2f\x79\x03\xe7\x50\x73\x93\xab\xb6\xb2\x3a\x94\x75\x1a\x6b\x34\xc4\x7c\xbd\x4f\x80\x46\x2f\xa8\xe3\x61\xb5\xb0\xe7\x00\x8b\x1f\x2e\x88\x92\x01\xfc\x8b\x31\x42\xda\x2f\x85\xc7\xfe\x3c\x4b\x8b\x14\x56\x3a\xea\xff\x2a\x46\xc9\x3d\x48\x92\xd7\xa0\x8b\x50\x0f\x01\x6c\x02\x36\xc1\x3e\x98\xca\x9e\x45\x56\xd8\xa8\xa0\xa6\x33\x61\x45\x75\x45\x9d\x6d\xda\x78\xe3\x16\x3f\x45\x73\x23\x82\x81\x24\x68\x50\x31\x6b\xa0\x71\xc5\x40\x65\xd7\x31\x0a\x57\xb4\xb5\x4a\xa9\x2c\x17\x17\x5d\xac\xad\x15\xcb\xd5\xe9\x6d\x90\x80\xb1\x97\x75\x14\x7f\xb5\x8a\x77\xc9\x3a\x6a\x1b\x05\xde\x39\x39\x62\xfc\x8b\x4b\x30\xb8\x82\xc1\x01\x58\xc4\xb1\x0b\x88\xa2\xaa\x6c\x81\xe1\x88\x0e\xe6\x29\xb8\x2d\xbb\x64\xcb\x05\x96\x2e\x0a\x18\x9a\x24\x04\xdb\xc9\x8a\xf0\xa1\x6e\x53\x88\x0e\x2b\xc2\x08\xdf\xc6\x60\x5c\x1f\x6b\xb8\x9a\x25\x13\xb5\x62\x8d\x02\xd7\x6c\xc6\xe1\x61\x4e\x10\x45\xbf\x60\xd7\x52\xd3\x67\x2c\x81\x96\xbe\xe6\x9d\x40\xdb\xa4\x0e\xc4\x79\x52\x41\x59\x84\x56\xd2\x56\x36\xd7\xa4\xad\x8d\x21\x73\x37\x68\x6f\xa7\x42\x21\x07\xd4\xd9\xaf\x36\x04\x6d\xc3\xe8\xa2\x9a\xc9\xc7\xcb\x97\x9d\x57\x99\xa6\x99\xe9\x10\x8e\x9c\x96\x73\xaf\x12\x89\x5f\xdb\xe7\xc9\xaf\x8d\x6a\xc0\xd1\x58\x39\x16\xcd\xd2\xc7\x5a\xaa\x4b\xad\x8d\xcf\x42\xdf\xa8\x4c\x5b\x85\x30\x2a\x26\xe2\x3a\xe9\x62\x83\xb9\x12\x71\x42\xfc\xd6\x43\x1c\xc3\xbe\xda\x60\x5e\x43\xc7\x3a\x72\xcd\x3d\xd5\x98\x01\xd6\x59\xd7\xd8\xe6\x53\x83\xbd\xc6\x5a\x1d\xa9\xa2\xcb\x97\x66\xaf\xef\xb6\xbe\x19\x43\xc0\xbd\xc5\xae\xce\x3d\xa6\x88\x3a\x5b\xe0\x56\x12\x45\xe7\xb9\x6d\x8c\xf8\x06\x2e\x4d\x62\x61\x4f\x7d\x96\x6b\xa3\x57\x6f\xa6\xcb\xf2\xac\x8e\x68\xdb\xfa\x6c\x2c\xbc\xf6\xaa\xa5\x04\x68\xde\x82\x77\x37\xcd\x06\x24\x9d\xd7\x8d\x6a\x41\x07\xbc\xf7\x81\xfc\x62\x91\x93\xef\xc8\x37\x5b\x5b\xe4\x6f\xe4\x1f\xa7\xc7\x47\x3e\x46\x99\x92\x49\x74\x7d\x8f\x18\xb0\x5f\xf3\x34\xc9\xe9\x19\xf8\x24\x7d\x32\x22\x66\x99\x69\x30\x57\x3e\x31\xfa\xb0\x2c\x1e\xe0\xcb\x02\xe6\x14\xeb\x45\xd2\x17\xc6\x6a\xec\x8d\x02\x54\xbe\xd4\xa2\x96\x33\x68\x1a\x8d\xd5\xe1\x4c\xf0\xe8\xb1\x81\x8f\xe6\xaa\xe1\xb7\xf0\xaf\x1d\xdc\x16\x8f\x61\x15\x70\x7d\x7e\x55\x12\xad\x45\x4b\xaa\xe2\x15\x23\x26\x08\xfe\x26\x4a\xe8\xeb\x2c\x98\x2b\xca\x4d\xa9\x54\xbe\xb5\x85\x01\x5e\x61\x54\x2d\x8d\xe3\x36\x9b\x4e\x93\xb1\xaa\x92\x77\x33\x6b\x32\x4a\x2e\x59\xb8\x96\xaf\xdb\x0d\x73\xf5\x66\x06\x30\x37\xb3\x06\x88\xf1\x14\xcc\x63\x5c\xb9\x6f\x7c\xce\x65\x3f\x86\x5e\xbd\xc2\x52\xaf\xee\x04\xcb\xc7\xbf\x33\x3c\x61\x29\xf6\xa5\xf5\x0e\x63\x8a\xa3\x55\x04\xb3\x39\x8f\x4d\x90\x21\x0f\x46\xf4\x77\x6c\xde\x75\x89\xf8\xde\x81\x38\xf4\x6f\x82\x78\x41\x9b\x2b\x2f\x72\x7a\x98\x14\x14\xbd\xfb\xe8\x86\xbe\x5e\x44\xd0\x21\xe8\x8d\x57\x64\x0b\xda\x50\x2d\x9f\xa6\xb7\x6f\xe8\x04\xdc\x83\x2e\x90\x3f\xed\xdd\x45\x79\x17\xc0\xff\xed\x02\x78\x77\x3a\x0e\x62\x60\xd7\xb7\x8c\x5f\x7e\xce\x7e\xf5\x1d\x66\x17\x1b\xb1\x30\x0b\x6e\x99\xd4\x69\xcb\x13\x8d\x29\x7a\x99\x03\x12\xe5\x87\x49\x54\x44\x41\x1c\xfd\x9b\x86\x03\x16\xdc\x65\xca\xc5\xbd\x94\xb0\x65\x4a\xab\xd6\x04\x8d\x0f\x08\x4b\x10\x86\x8c\x08\xef\xb2\x12\xa3\x06\x63\xb1\xae\xeb\xd5\xd6\x39\x0e\xe0\xd9\x22\x0e\x4f\x28\x86\xb1\x41\x86\x02\x60\x43\x0b\x1d\x38\x13\xc0\x69\xc7\x38\x2a\x0d\xf7\x79\x50\xcd\x15\xb9\xa8\xb7\x77\x33\xe3\x2b\x66\xb9\x82\xb7\x35\x87\x8f\xd9\x9c\x03\x55\x19\xaf\xd1\x23\x6b\xad\x9c\x95\x4f\x6b\xa4\xad\xce\x0a\x98\x1d\xf9\x08\xe6\x49\x15\xc7\x71\x1b\x02\xe6\xf3\x0b\xbd\xc7\xaa\x18\xbe\xeb\x5e\x69\x9c\xc6\x68\x4d\x54\x3a\xcb\x67\x25\xb9\xc7\x11\x35\xd8\x21\xe6\x13\x64\x34\x00\x53\x06\x66\x4a\xf7\x3a\xd7\x51\x1c\x1f\xcf\x83\x71\x54\x00\xe9\xfe\x76\xb7\x8a\x0e\xbb\x46\x03\x69\x90\x62\xf6\xbe\xf1\x2d\xcc\xe3\x1c\xa6\xe2\xb8\x90\x13\xd2\x3d\xf5\xe5\x83\x03\xb6\x98\x79\x9a\x60\x75\xa8\x55\x64\x41\x92\x47\x28\x56\x20\x6d\xa1\x08\x86\x78\x7f\xde\xda\xea\x50\x17\x94\x4c\xfc\xa8\x89\xdb\x64\x1f\x32\x8c\xfe\x1d\x2a\x3f\xb7\xda\x2b\xa2\xf1\x2f\x3f\xb0\x1e\x97\xaa\x8f\x33\xc0\xdb\x78\x71\x38\x7a\xf1\x76\xf4\xe2\x74\xa3\xdf\xa2\x5f\xdf\x06\x77\x6f\xa3\xc4\xbb\x0e\xe2\x9c\x76\x32\x2f\x15\x49\x55\xbc\x44\x43\xeb\xb4\x1a\xfd\xf8\xb0\xf0\x96\x70\xac\x74\x05\xc0\x4a\x5d\x6e\x33\xea\x1e\x5e\xed\xbb\xb2\x5a\x1c\xe4\xdc\x7f\x6a\xf5\xf7\x55\x60\x68\x97\xd6\x9d\x2e\xf5\x91\xb6\x34\x4c\xaa\xae\x4e\xb6\x52\x8d\x31\xd5\xc2\xd3\x7a\x91\x95\xa9\xd3\x20\xef\xcc\x4b\xd5\xe8\x37\xd9\x08\x7c\xb2\x04\x90\x9a\xa9\xe0\x4a\x08\x9a\xc6\xb9\x88\xcb\x29\x88\x7b\x41\x27\x69\x76\xbf\xbd\xd5\xe0\x32\x56\x18\xcc\xa8\xb5\x59\xa9\xec\xd2\xb8\xb2\xd6\x98\xed\x64\xeb\xa1\x62\x17\xbd\x32\xc1\x9b\x02\x5e\xa5\x6d\xe9\x8f\x55\x43\x72\xec\xa0\xb2\xa4\xe9\x26\xa2\xb7\xde\xb8\xc8\xac\xc4\xb0\xf8\x12\xbc\x93\xe3\xe3\x5e\xf2\xe4\x86\x8a\xd7\x63\xf6\xe0\x04\x29\xe9\x0d\xc0\x1c\xcb\x8b\xfb\x18\x3c\x85\xde\x6d\x14\x16\xd3\x11\xa8\x9b\xf9\xdd\xce\x94\xe2\xb1\x85\xd1\xb7\xec\x47\x8f\x3c\x0c\xb0\x5e\x7e\x33\xf1\xab\x6a\x40\xf7\x75\x34\x01\x0f\x03\x5b\xaf\x2c\x98\x07\x9b\xa5\x53\x17\x4c\x30\x4b\x69\x2b\xa1\xd0\x4e\x2f\x4e\x03\xe6\x2f\xfa\x7e\xaf\x15\xb1\x8b\xdf\xc8\x41\xb4\x9a\xe1\xc3\x35\xee\xb0\x5c\x81\x89\xcb\x24\x75\x80\x6b\xa7\x2b\x02\xce\xcc\xef\xdf\x48\x39\x6b\x47\x64\x6b\xc0\xc3\xd2\x23\xfe\x61\x13\x65\x1c\x24\x07\x4e\x86\x77\xe6\xc3\x5b\xc0\x0b\xff\x2f\xe1\x53\xcf\xfc\xd2\xb9\xab\xfc\x96\x01\x60\xeb\x2a\x85\xac\xcf\x28\x81\xec\x8b\xe6\x5a\x97\x50\xca\xc6\x6a\x55\xa6\x6e\xd6\xaa\x90\xd5\x36\xad\xe6\xd5\x56\x7e\x9b\xe6\xd9\x5a\x8a\x15\xef\xb6\x7a\x6b\x00\xdb\xbc\xdc\x39\x38\xf8\xf9\x90\xc9\xe6\x27\xee\xde\xba\x2a\x58\xfd\xf4\xd2\x21\xde\x0b\x67\x51\xf2\x01\xc4\x57\x77\x88\xab\x62\xd5\x21\x56\xbc\x5b\x05\xb6\xe6\xd5\x22\xe8\x3b\xe0\x9b\xd5\x0f\xc6\x17\xeb\x70\x81\x9f\xc0\x01\xce\x17\x33\x19\xd6\x45\x15\xac\xc7\x47\xd4\x0d\x1a\x6f\x7b\x8b\xfc\x89\xfc\x05\xff\xdb\xde\xda\x82\x69\x6a\x80\x1a\x07\x05\xfc\xbd\x0f\xaf\x41\xdf\x8c\x33\x3f\x01\x38\x66\x50\x61\x63\x63\x0c\x51\xfa\xdb\x36\xe5\x53\x92\x84\x67\xc6\xd6\x46\x13\x3b\x44\xb1\x22\x61\x45\x3a\x99\xc4\xb4\xee\x5a\x36\x19\x26\xa5\xe7\x76\x7b\x02\xdd\xc2\x01\xf9\xda\x28\x72\x5b\x28\x9a\xe7\xc7\x81\xdb\xdc\x23\x0e\x3e\x13\x01\x5b\x19\xe0\x17\x58\x4a\xc6\xae\xe4\x87\x36\xac\x31\x9d\x5a\x97\x92\xb6\x52\xe3\x3a\x66\x11\x7e\x76\x59\x91\x4d\xc6\xf7\xac\x8c\x66\x5a\x44\x4b\xdb\x35\xec\x42\xf4\x32\x54\x31\xd8\x08\xa3\x2f\xe0\x8a\xb2\xfd\xe5\xe2\x50\xfc\xd2\xa7\xbe\x5c\x91\x5c\x7d\x46\xfb\x01\xc5\x7d\x6b\x75\x9b\x3e\x4d\x16\x09\x9a\x02\x9d\xc4\x78\x1c\xd3\x20\x2b\x49\xd5\xba\x61\xa3\x60\x4d\x06\x64\x77\xdb\xb1\x71\xc1\x46\x55\xfc\x94\x16\x23\xaa\xda\xab\x45\x51\xa4\x89\x1e\x8e\x96\x4f\x69\x51\xb6\x4e\xe1\x0a\x0b\x9e\x8e\x3a\x05\x70\x72\x96\x16\xe0\x66\xf4\x1e\x69\x01\x5a\x10\x33\x42\x3a\xe1\x55\xec\x5c\x66\x10\x20\xff\xc0\x90\x3c\xb7\xb6\x04\x50\x3f\x7e\x8b\x66\x26\xd7\x91\xfb\x74\x96\xf6\x1c\x51\x8e\xba\xb9\xe2\x9b\xb6\x14\xe7\x9b\x90\xff\xf5\xa2\xe1\xd6\x31\xfc\x1f\x25\xf3\x45\x71\x8e\x73\x64\x97\xb3\xed\x02\xad\x73\xa7\x5a\x62\x41\xa5\x91\xc2\x61\x77\x94\x25\x4d\xc6\x31\xf8\xf4\xc2\xc2\x57\x96\x12\xc7\x06\x53\xdf\x42\xea\x45\xbb\x68\x5b\x8d\x73\x98\x61\xf8\x12\xca\x39\x63\xd8\x0f\xb4\x03\x95\x9f\x86\xbd\x29\x57\xb9\xca\x28\xf2\x2b\x6b\xb5\x56\xa8\x58\x9a\xd5\x3b\x03\xd4\x6d\x69\xce\xd2\x24\xc2\xe5\xf9\x71\xb6\xe6\xd2\x96\xdd\x5b\xde\x6c\x7d\xab\x83\x97\x3f\xca\xba\x73\x68\xb0\x27\x52\x46\x0d\xba\x10\x64\x78\xca\xa6\xa0\xe8\x05\x79\x17\x07\x63\x3a\x4d\xe3\x90\x66\xa6\x71\xb3\xbc\xf8\x08\xa4\x95\x00\x69\x05\xa6\xcb\x22\x28\xd0\x84\x48\x16\x1a\x62\x54\xc1\xae\x26\x48\xc2\x43\xc0\x0d\xc5\x27\x3c\x8b\xdc\xf5\x6c\xb7\x49\x06\x5a\x96\x97\x7c\x73\x73\x1d\x0e\x94\xec\xe5\x6a\xe4\x76\x3e\x3c\x7d\x04\x25\xa7\xac\x13\xb5\x29\x52\xbd\x32\x67\x09\xbe\xc9\x3b\x1e\xd2\x62\xb0\xee\x73\x03\x97\xe2\x14\xb0\xd8\x8d\xff\xcd\x16\x78\xe6\x1b\x3e\x34\x1f\x77\x81\xe3\x23\xc2\xc8\x73\xc1\xea\x53\x82\x11\xa8\x98\x4d\xf5\xd3\x32\x2e\x93\xa0\xd9\xfb\x52\x4f\x41\x0b\x39\x61\x32\x93\x0f\x2d\x6b\x72\xb7\xa3\xbb\xaf\x0f\xdc\x27\x77\x5d\x5b\x82\xe6\x89\xdd\x96\x53\xb9\x72\xc7\x26\xb4\x9c\xb1\xcd\x6b\xc2\x60\xeb\x33\xf6\xf1\x10\x8d\x4e\x31\x37\x70\xe0\x98\x1b\x76\x19\x85\x5d\xdc\x20\x26\x11\x5e\xff\x9c\xe3\xb9\x20\xbb\xe2\xb0\x58\x27\xb7\xa4\x56\xb9\x71\x27\xcc\xed\x8a\x88\xf3\x98\x40\xff\x9b\x28\x2f\xca\x1d\x2e\x03\x7d\x73\x77\xbc\x0a\x81\x38\x34\x8b\x7d\xd9\xea\x83\xa6\x6b\xec\x89\x52\xef\xbc\x8e\x62\x93\x6c\x5f\xf8\x8b\x79\x88\x77\xae\x2e\x83\x82\xfc\x55\xf2\xb9\x2a\x6b\xdd\xc2\xb3\x76\xc6\x9f\x2f\xc0\xf3\x10\x63\xdc\xbc\xfb\x73\xa9\xcd\x34\x8d\xdd\xb9\xa2\x4b\x6c\x8f\x63\x27\xc5\xd1\xa0\x20\x74\x8e\x0a\xee\x38\x0e\x0f\xf0\x8a\x0e\x36\xd8\x08\xcd\x19\xa1\xdc\x92\x71\x56\x10\xb3\x4e\xc8\xbc\xc5\x52\x6e\x3e\x0b\x6b\x6a\x0e\x4b\xcb\xdd\x0e\x4f\xe1\x14\xb1\xab\xb4\x6a\x42\xd5\xdf\xb1\x83\xda\x62\xb6\x45\x09\x51\xc7\xb4\xf1\x74\x15\x6b\x4d\x1d\x33\x9b\x34\x9c\x5b\x45\x44\x95\x41\x44\xd3\x1a\x5d\x6e\x61\x98\x31\xb0\x9d\xb4\xee\x13\xb2\xa3\x9a\xe5\x0e\x2e\xb8\x37\xb0\xc4\xa4\x13\x0c\xf9\x4e\x74\x8d\x55\x7f\x83\xb7\xd1\x9a\xa6\x60\xd9\xa4\x40\x92\xa3\xd3\x40\x0d\x94\x9b\x2a\xca\x77\xc8\xa7\xf0\x34\xfa\x37\x1d\x10\x13\x6c\xdb\x15\x20\x79\xe4\xd8\x04\x37\x60\x4d\x04\x57\x51\x1c\x15\xfa\x72\xc8\x79\xd3\x34\x3c\x92\x9b\x75\x0d\x61\xf7\x9d\x59\x90\x2e\x66\xd7\xd4\x2e\xb3\x20\x99\xd0\xcb\x71\xba\x48\x0a\xa1\x2e\x1b\xb7\x3c\x7a\xdb\x5b\x5b\x2f\x96\x71\x72\x79\x63\xa2\x73\x31\xd5\xda\x1b\x12\x17\x25\x2c\xf6\xd8\x07\x8f\xee\x94\x9d\x5c\x03\xe1\x7c\x49\x7a\x66\xbb\x6d\x1c\xcd\x28\xbb\xb2\xc9\x0f\x51\x7f\x5e\xfc\xac\xba\xb6\x76\x86\x5e\xf2\x2d\xf2\x7d\xbe\x11\xa3\xb0\x11\xcf\x57\xb9\xb8\x88\x7a\xb9\x30\xae\x56\x18\x07\xb2\x5c\x1d\xac\xa6\x21\xc3\xc0\xf7\xeb\xc1\xd3\x93\x05\xcb\xad\x11\xfb\xb4\x00\xc9\xcb\x9f\x41\x00\xda\x0c\xa7\xca\x97\x0c\xa3\x1b\x74\x26\x8f\x52\x7e\xed\x0b\x6f\xea\x52\x18\xa2\x7b\x5a\x74\xd8\x40\xb4\xa1\x72\x06\x8e\x0a\x9c\x72\x4e\x00\x09\x94\x21\x04\x7e\x09\x91\xac\x53\x70\x19\x61\x69\xf0\x7a\x20\x21\x4c\x9a\x72\x2c\x00\x63\xb2\xd4\x81\x20\x39\xfd\x91\x2b\x06\xa5\x22\x46\x7c\xe7\x06\x0e\xfd\x68\x12\x2b\xb7\x8f\x45\x17\x1e\xba\xfb\x65\x21\x27\x38\x9f\x82\xd3\xb7\x3b\x64\x6d\x82\x57\x00\xfd\x10\xcd\x63\x8f\x2e\xb4\x1d\x63\x70\x0c\xd2\x05\x08\xfc\xc3\x40\xc2\x2c\x71\xb0\xa8\x07\xd8\x5a\x2c\x3a\x7c\x1e\xfa\x17\xee\xb3\x26\x17\x0d\xed\xd5\xc7\xec\x88\x16\xb7\x69\xf6\x0b\x0e\x4a\xc9\x78\xc6\x77\xe6\x0c\x04\x61\x88\x97\xc1\xfd\x84\x43\xf5\x97\xc3\xbd\xc7\x6b\xb7\xe0\x16\x9f\x4b\xe2\x3e\xc5\x6b\x52\xa0\x9e\x83\x42\x43\x5f\x53\x3c\x9e\x10\x22\x06\xcd\x2c\xee\xe5\xda\x79\xcf\x6d\xf5\x8e\xed\xa8\x96\xfd\x72\xed\x9c\xa0\xc6\xb5\xb0\x4a\xd1\xc4\x4b\x62\x7c\xc3\x2f\x93\xbb\x10\xd7\x35\xfd\xb2\xa3\x2b\x17\x66\x67\x13\xd6\xa5\x7b\xc5\x56\x98\x71\xa3\x35\x21\x2e\xc5\x29\xb6\x8f\x54\xcf\xcb\x0e\x31\x1e\xa5\xda\x3c\xa9\x96\xfc\xee\x2c\x03\xa3\xae\x61\x51\x5d\x92\x8e\x1f\x60\x09\xb8\x27\x15\x1d\x96\xde\x56\xed\x28\x7d\xb5\x36\x61\x29\xae\x85\xab\xad\x6b\x76\x69\x17\xe3\x8d\x79\xdc\xd6\xda\x72\x82\x55\xb6\x2e\xc0\xfe\x77\x13\xa8\xb6\x1e\xf3\xa3\x4e\xea\x19\xba\xde\x8b\x9f\x36\x5f\xcc\x36\x5f\x84\xe4\xc5\x8f\xfc\x30\x9d\xb9\x9a\xa9\x2b\xbc\x16\x09\x55\xe0\xaa\x28\x98\x2f\xc3\x5e\x06\xfc\xa7\x76\x37\xa2\xa2\xb8\xba\x1e\xa1\x94\x29\x37\x24\x34\xc8\xe5\x2e\x49\xf0\xa0\x3e\x8b\x67\xad\xe9\xf8\x88\x35\xcc\xba\xda\x26\x80\x32\x60\x46\x7c\x53\x1b\x1c\x2e\x59\x49\xc9\x14\x36\xd8\xca\x0e\xb2\x29\x0a\x9e\x91\x60\xa1\xeb\x49\x8f\xae\xa7\x3c\xea\xf4\xf0\xe0\xa4\x2d\x9c\xc1\x67\xf2\x32\x3b\xcf\x0d\xd8\xd1\xcc\x50\xb6\x94\xf9\xc5\xaa\x83\x1b\xdc\x37\x3f\x6d\x8c\xa5\x3e\x6e\x1f\xda\xb2\x07\x7d\xe9\xd8\x84\x36\xb4\x8c\x8b\x58\xa9\x6d\xac\xd3\xde\xb6\x55\x5d\x9f\xfb\xb9\xaf\x0d\xab\xad\x52\x29\x62\xce\xdd\xa3\xf2\x6d\xc7\x2d\x24\x97\x85\xbd\xcc\x26\x78\xd9\xe6\xd3\x6f\x3e\xb5\x58\xf9\xd3\x6f\xb8\x3b\x81\xda\x12\x43\x97\x2e\xd3\x1c\x40\x17\x71\xa3\xd5\x7c\x7c\xf5\x33\x1d\x17\x78\xd4\x2f\xf7\x2c\xf2\xca\x23\x59\x7d\x3f\x4f\xf1\x9e\x8e\x61\xca\xbb\xbd\x2a\xf5\x61\xce\x21\xdf\x5a\x70\x36\xd0\x1e\xee\xd5\xd9\x13\x47\xcc\x76\xe7\xd7\x09\x94\xe8\xb7\x38\x13\xda\xd5\x55\x98\xf9\x45\xb6\xc8\x61\x1d\xfb\x63\x72\x95\xcf\x77\xfe\x78\x85\xd7\x8a\xf9\xf7\x36\x67\x87\x55\xaf\x3c\x0c\xb1\xed\x00\x6e\x85\x46\x4e\x93\x97\xc1\x86\x6f\x64\x56\xe9\xd0\x6c\x8f\x27\xc9\x2a\xad\x74\x89\xc1\x30\xfa\xb1\xf1\xcd\xda\x4b\xf1\xd9\xd8\xc8\x85\xeb\x5e\x10\x3e\x66\x86\x94\xaa\xd2\xb2\x1b\xed\xd5\xf4\x71\x6d\x97\x96\x10\xa5\xec\x54\x25\xb8\x78\x9a\x65\xb6\x9c\x3c\xf8\xb6\x51\x6b\x7c\x04\xa5\xf1\x94\x3a\x43\xdb\x10\x12\xe2\xe5\xcf\x83\x2c\x00\xe9\x14\x32\x65\x0b\x31\xac\xa0\x6a\x08\x9f\xb4\x0d\xba\xa6\x6d\xde\x95\xbb\xea\x4c\xf4\x89\x8c\x37\x34\xba\xda\x16\x9d\x21\x22\x3c\x52\xff\xac\x6c\x47\xdb\xc7\xa5\x49\x18\x6b\xb2\x68\x11\x45\xdb\x1e\xbe\xb4\x6b\x95\xad\x7a\x5e\x64\xec\xdf\x4b\xb8\xc7\x1c\x03\x81\xe9\x5d\x5c\xd2\xbb\x79\x9c\x66\xf4\xd9\x0f\x83\x9c\x40\xe3\x07\xa2\xed\x9a\x39\xa8\xbe\x34\x37\xbc\x99\x01\x68\x9d\xa3\xec\x8d\x29\xf9\xac\xd0\xcf\x81\xfe\x98\xfe\x93\x1d\x53\x17\x5b\xd1\x3d\x53\xd8\x55\xc8\x0f\x78\xce\xa8\x23\xec\x2b\xf4\x04\xd9\xdc\x14\xd0\xe6\x39\x41\x0e\xcc\xdc\x46\x16\xd4\x68\xc5\xcb\x40\x0f\x92\xb0\x1d\x50\x78\x1f\x6f\xd2\x49\x05\x7b\x6e\x8a\x6f\xc9\xa1\x38\x9d\x9c\x88\x1a\x6e\x97\x48\xf2\x19\xfd\x3f\x7b\x44\x53\xf3\x7b\xc0\xaa\x24\xbb\xbb\xbb\xa4\xf7\x33\xb8\x5b\x3d\x67\x82\x29\x7e\xb2\xa0\xc1\xa9\x7a\xec\xb5\x0b\xd1\x82\xdb\x27\x73\x63\x15\x55\xf1\xa3\xda\x44\x42\x1f\x90\xbd\x00\xed\x03\xfa\x83\x48\xa4\xe4\x2a\x0d\xef\xfb\x96\xa8\xbc\xc0\x72\xbe\x71\xbe\xc1\x19\xeb\xf3\xb3\x02\x03\xb2\x71\x41\xa0\xa8\xf2\x31\xa1\x84\x48\x18\x76\xa8\x60\x63\x84\xbf\x11\xc1\x85\xff\x73\x1a\x25\xde\xc6\x86\x85\x1d\xb5\x21\x07\x33\x8b\xed\x13\x63\x45\xb7\xe2\x36\x78\x6e\x01\x7e\xb0\x4b\x4b\x3e\x0e\x12\x8f\xf7\xa1\x21\xa1\x12\xbb\xd8\xc9\x0e\x56\xfc\x72\xc3\x34\xca\x90\x49\xef\xdf\x58\x40\x6e\x17\x15\x37\xe8\x12\xa0\xfc\xfd\xc9\x61\x79\x76\xd0\x33\x67\x84\xf5\x7e\x31\xbb\x05\xfc\xb5\x3e\x23\xdc\xfb\x87\x25\x29\x2f\x77\xc9\xc6\x1f\xe1\xd7\xee\x46\x6b\xdb\x1c\xe1\x32\x51\xf5\xea\x4c\x88\x7d\x65\x13\xa7\x43\xc4\xc8\x5b\x61\xd8\x59\x12\x49\xad\x1d\xa4\x3c\x55\xa2\x4c\xd8\x3a\x64\xf3\x51\x1a\xa1\xa1\x60\x0c\xd1\x01\x85\x0f\x87\x4e\xc0\xac\x98\xf7\xab\x0c\x33\xab\xc8\x0c\x59\x43\xc5\xba\x72\x6a\x09\xd6\x39\x93\x88\x3c\x2b\xf3\xf0\xc1\xab\x2d\xec\x7a\xf9\x48\x71\x86\xd9\xfc\x50\x6e\xf9\xa3\x16\x04\x23\xbc\xce\x7d\xbb\xc0\x72\xe2\xb9\x46\x64\xd9\xfd\xdc\x5b\x3e\x8c\x1b\x3e\xb7\xf7\x35\x7f\xbc\x51\x35\xcb\x87\xa9\x13\x5a\x9c\x70\x34\x3f\xb2\xc0\xa5\xd7\x43\xdb\x12\x06\x66\x13\xd5\x32\x9a\x4f\x78\xd3\x7e\x38\x8f\x83\x28\xd9\x21\x78\x0d\x16\x6a\xec\xbe\x3f\xfb\x61\xf3\xbf\x5c\xf7\x2e\x38\x69\x32\x28\xe6\xd8\xcd\xb6\x17\xcb\x1e\x09\x45\x58\x5b\x4e\x6d\x72\xd1\x61\xa6\x89\xcf\x0e\xc2\xce\x24\x12\xef\xa1\xe2\xa7\x43\xdc\xc7\x7c\xb1\x5e\x45\xe0\x45\xd5\x2f\x22\xaf\x3c\x9f\xa0\xc8\x8b\x64\xcc\x88\x77\x78\xb7\x79\x7b\x7b\xbb\x89\x31\xe8\x4d\x60\x23\x5f\x0c\xc2\x8f\x3a\x13\x84\xb1\xb8\xf6\xb9\x30\x2e\x8d\x52\xf1\xcd\x35\x1f\x30\xce\xc7\x6c\x09\x0b\xe3\xeb\x16\x47\xcd\xb6\xb4\xb6\x2d\x70\x62\xe3\xe2\xab\x5e\x49\xf3\x96\x58\x9d\x2a\xc2\x5d\x73\xcd\x4b\x52\xf9\xa1\x7f\x0f\x55\xda\x40\x9e\xee\x1f\x60\x9a\x6c\xdc\x80\xaa\x4d\xe5\xca\x6d\xed\x78\xc5\x40\x5c\x2d\x28\xac\x97\x0a\x64\x2b\xa3\xf2\x9b\x2d\xab\x55\x79\xe5\x40\x52\xa7\xb3\xca\x9a\x6d\xb4\xec\xde\x75\x44\xe3\x50\xf4\x8e\xd1\xb2\x64\xdf\xb0\xa6\xbd\x67\xf3\xea\x44\xfa\xe3\xfa\x27\x58\x74\xc3\xb5\xb9\xb5\xff\x53\xb4\xab\x30\x7a\x85\x91\xa7\xbd\xa2\x80\x09\xca\xc0\x7b\xa2\x53\x66\xd6\x5c\x67\x06\x56\x3c\x86\x76\x5f\x5a\x6d\x56\x7f\x4f\x07\xf9\x44\xef\x7b\xca\xd9\xf3\x8e\xca\x14\x6a\xc2\x4d\x73\x65\x89\x28\x6b\xf2\x4b\xd5\xc6\x4a\xd3\x00\xcf\xf7\x1a\x6a\xcb\x6e\x43\x0d\x99\xd9\xd1\xdc\x0d\xd0\x2f\xc4\x19\x3d\x90\x84\x37\xde\xfa\x9b\xd0\x5a\xe6\x41\x13\x29\xd7\x68\xec\x1c\x75\x0b\xb2\x79\x9a\x77\xc5\xc6\xd7\x9f\x66\x74\x98\x83\xbd\x23\xba\x1f\x0f\xf6\xf6\xdb\xd0\x01\xbb\x3b\xb0\x50\x20\xdc\x3f\x78\x73\x70\x76\xe0\x40\xd9\xf1\x2e\x61\x65\x54\x54\x2d\xba\xcd\x99\x92\x4e\x73\x18\x59\x1a\x28\x7b\xbf\x14\x73\x4a\x62\xe6\x47\xd7\x35\xa9\x19\xe8\x42\xf4\xfb\xbb\x9a\xa8\xeb\x8f\xa7\xbc\xa4\x58\x29\xe8\x9c\x32\x70\xe4\x7e\x19\xd1\x12\xf4\xe5\x9b\xa2\x91\xc6\xa0\x2a\x8b\x82\xfe\x73\xf8\x81\xbc\x0b\xa2\xac\x21\xa2\x8a\x46\x4e\x63\x48\x95\xaf\x2f\x3d\xd0\x21\x00\xc6\xee\xc4\x81\x82\x11\xdf\x0c\xd9\x68\x3a\xd4\x50\x6e\x84\x64\x41\x96\x35\x6e\x7e\x88\x06\x3f\x08\xf5\xcf\x1a\x02\x1d\xb5\x74\x93\x62\xdd\xef\xbd\xa6\x85\x44\x03\xea\x65\x65\x34\x68\x37\x4a\x3c\xa8\x0a\x56\x46\xf4\x6e\x51\xd2\x83\x1a\x6a\x65\x3c\xfb\x4c\x81\x48\x54\x5c\x9d\x2c\x85\x6c\xe9\x08\xb6\x21\xf8\xae\x38\xb6\x0e\xc6\x4c\x34\xa3\xc8\xb6\x8d\xc2\xce\xd6\x34\x2f\xdc\x3a\xc8\x67\xb7\x70\x6b\x91\x5e\x33\xd4\xd5\x56\x8f\x87\x7d\xf5\x20\xd5\xef\x7f\x09\xff\x6c\x17\x49\x35\x48\xfa\x39\xae\x91\xfa\x54\xfd\x94\xd7\x48\x46\xe9\x13\x2c\x90\x6c\x96\x4a\x6d\x5c\xcd\xdb\x67\x58\x29\x61\xa6\x6b\xed\x1e\x24\xab\x2f\x4e\x4f\xb4\x58\x3e\xff\xda\x64\x08\x9c\x6b\x6d\xd2\xc1\xd8\xda\x64\x14\xd9\xd6\x26\x11\x7d\x69\x5e\x9d\x4c\xa0\xcf\x6e\x7d\x7a\xbc\x63\xf9\xca\x16\x53\xd2\xea\xfc\x4e\xd6\xa5\x2f\xae\xe5\x47\x59\x35\x8d\x28\xfc\xe7\xb8\x70\x9a\x5a\xe4\x53\x5e\x3a\x05\xad\x5f\xbc\xcb\x2f\xde\x65\xfd\x59\x7a\x05\xaf\x49\xbe\x6b\x0d\x37\x01\x45\xa6\x44\xa3\xd0\xb6\x8e\xbf\x49\x27\xcd\x6b\xb8\x0a\xf0\xc8\x23\x7b\x76\xbd\x17\xa7\x93\x51\x7d\x7f\xc4\xce\x41\xb6\x09\x32\x32\x36\x47\x5a\xb7\xd7\x8c\xbc\x97\x4a\x87\xd6\xa3\x4a\x34\x1d\x02\xcd\x75\x51\x1b\x49\x9e\xc6\x4e\x9b\x5b\x4a\xe0\x2b\xec\xb1\x14\x40\xd6\xfd\x81\x7d\x41\xe3\x29\x7e\x9d\xe7\x46\x59\xfd\x98\x1d\x7b\x31\x2f\x0a\x3a\xff\xe2\x9c\xde\xc5\x1e\xde\xd8\xb3\xfd\xe1\x0f\xc6\xef\x65\xe5\x5c\x1b\x12\x97\x8c\xab\x40\x4c\xbe\xb5\x02\x9b\x6c\xff\x6e\xd2\x1e\x69\x02\xd3\x24\x2d\xd6\xd5\xa9\x71\x35\xd1\xc3\x4c\x6e\x25\xa7\x9b\xfc\x6e\x38\x53\xa9\x74\x3f\x98\x8c\x8f\x3a\x64\xeb\xc8\x11\xa6\x9e\x76\xac\x32\x3d\xd5\x4b\x8d\xa3\xa2\x2a\x80\x7e\x62\x54\x7b\x63\x1c\x1c\x35\x6a\x3d\x32\xfb\x13\xde\xdc\x5d\x5f\xde\xa5\x25\x13\xd7\x5a\xae\x27\x7d\xcc\x74\x4e\xec\xb2\xb4\x23\x9f\x93\xf2\xce\x3c\xdf\x2a\xee\x58\x77\xbb\xb5\xc4\x81\x3f\xe5\x94\x4e\x9c\xc2\x67\xca\xe9\x24\xaf\x6f\x3b\x5d\x83\xcf\x21\xa9\x93\xbc\x98\xae\x67\x75\x92\xb7\xe8\xed\x8b\x1b\x3e\xf5\xb4\x4e\x02\xd3\x8a\x79\x9d\xaa\xda\xeb\x49\xec\x24\xf1\x37\xf7\xe8\xf7\x92\xd9\x49\xf6\xe6\x31\xa9\x9d\x14\x8e\xff\x7f\xca\xed\x54\x53\x21\x5f\x92\x3b\xb5\x24\x10\xaa\x73\xec\xf3\xc9\xee\x24\xfa\xf6\xa4\xe9\x9d\x54\x9c\xcf\x90\xdf\xa9\x3e\x3c\xce\x04\x4f\x0d\x49\x50\xca\xb5\xc0\x92\x91\xc6\xad\x3b\x39\x4b\xe1\xed\xb3\x25\x25\xe2\xad\xb9\xb2\x3c\x39\x69\x59\x25\x2b\x51\x9d\xb1\x8e\x3c\x4f\x9f\x0d\x5b\x9d\xc9\x9e\xd6\xc1\xd7\xe7\x4e\xf7\xa4\x4c\xcb\x55\xf2\x3d\xd5\xa4\xc1\x96\xf0\x69\x7d\x92\xf0\xb9\x24\x7d\x62\x37\x3a\x0f\xf5\x64\x25\xd6\x0b\xcd\x5c\xe4\xca\x3b\xca\x9d\xee\x36\x3b\xea\x2c\x9b\xe1\x85\xd1\x68\xcb\x74\x64\xe2\x7f\x5c\xbe\x23\xd6\x8c\x2d\xe9\x91\xab\x99\x27\x4d\x7d\x54\x9f\x85\x42\x09\x3c\x79\xf2\x23\x67\x4b\x4f\x9a\xfe\x48\x68\xb0\x35\xe4\x3f\x72\x29\xbf\xa7\x4c\x80\xd4\xb0\xac\xad\x33\x03\x92\xd4\x57\x6b\x48\x81\xe4\x5c\x32\x36\x49\xd3\x62\xb3\xd6\x24\x48\x4a\x77\x57\xde\x9d\xb0\xaf\x65\x6d\x69\x90\xec\x36\xa1\x3d\x0f\x92\x6b\xa1\x7a\x44\x22\x24\x8e\x52\x0b\x17\x2a\x80\x4a\xfc\xc8\x2f\x03\x46\x66\x95\x4f\x2d\x19\x92\x42\x74\x95\x0d\x49\x2d\x54\xd2\x21\xe9\xb0\xab\xe4\x43\xe2\xb1\xa0\xf5\x26\x44\x32\x02\xa0\xab\xdd\x84\x57\x87\xcd\x0c\x11\x6a\x63\x24\xa4\x2c\xaf\x58\x63\x66\x45\xaa\x8b\xc5\xba\xf3\x22\xd9\x68\x7a\xca\xcc\x48\x8d\xf8\xbf\xe4\x46\xd2\x06\xa1\x53\x72\x24\x0e\xeb\xdc\x64\xaa\x5e\x3f\x63\xa6\x93\xaa\xd1\x8f\x94\x1f\x49\xa8\xd0\xa7\x4b\x90\x64\x15\xdb\xc6\x14\x49\x1d\xb3\x9d\x2a\x39\x92\x1a\xda\xe8\x10\x3b\xd5\xb9\x54\x4b\x93\x24\xc3\xc9\x1f\x2d\x4f\xd2\x92\x99\x58\xf9\x10\x8e\x14\xf0\x4e\xf9\x91\x80\xf3\xbd\xc7\xa6\x6f\x5a\x35\x87\xd3\x13\x24\x72\xb2\xb9\x34\x7a\x36\x27\x9b\x37\xd2\xd8\xdc\x33\xa5\x74\x52\xa6\xbc\x6b\x77\xb4\x02\xa9\x84\x5d\x29\x43\x1b\xa0\x5e\x6a\xdb\x51\x67\xaf\x9b\x35\xde\xc7\x50\x78\x4f\x9d\xdb\xa9\xda\x17\x32\x92\x3b\xc9\xb9\xfc\x04\xd9\x9d\x18\xe1\x4f\x98\xde\x89\xcf\x5a\xd2\x6d\xda\x5a\x15\x9e\x4c\xf1\x24\xab\xaf\xec\x25\x38\x06\xa8\x51\x3a\x2d\xc2\x69\x95\x4d\xdb\xf6\x7d\x69\xb6\x2b\x9b\xf3\xa2\xcc\xd8\xb2\x2f\x21\x57\xdb\xac\x0f\xe6\x73\xa7\x15\xbc\xaa\x09\xac\xff\xc5\xda\x36\xb8\xea\xef\x8d\xb5\x41\xca\x24\xa6\x6d\x70\x66\xea\xaa\x36\xf8\xd2\x19\x60\x80\x72\x7e\xa0\x15\x8f\xfb\xc7\xd3\x20\x9f\xf6\x76\x64\xb1\x17\xa6\xe3\x05\xfe\xa5\x7c\x3c\x08\x78\xc0\xff\x68\xfe\xf7\xf7\x87\xa1\xd7\xcb\xd2\x14\xed\x03\xd2\x63\xed\x6f\xd2\xea\xec\x0b\x9f\x91\x3d\xce\x91\xde\xa8\xf6\x57\xdc\xd8\x01\x8e\x81\x00\x12\xec\xd0\xc1\xd4\x3f\xec\x25\x01\x91\x1b\x3a\x94\x91\xc7\x4e\x05\xcc\x3b\x43\x0e\x47\x32\xdd\x9b\xa3\x46\x0d\xf5\x52\x35\x74\xde\x8c\x5c\x07\x53\xb4\x9e\xb2\xf1\xd1\x61\xcd\xf9\xa3\x81\xe6\x6e\xd8\xbc\x06\x3c\x1c\x95\x1a\x70\x89\x16\xba\xd6\xfa\x0a\xb7\x13\xff\x2f\x00\x00\xff\xff\x1f\x41\x30\x6b\x7e\x9d\x00\x00") + +func uiJsAppJsBytes() ([]byte, error) { + return bindataRead( + _uiJsAppJs, + "ui/js/app.js", + ) +} + +func uiJsAppJs() (*asset, error) { + bytes, err := uiJsAppJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/js/app.js", size: 40318, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiJsLibsD3335D3MinJs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xbc\xbd\x69\x77\xdb\x46\xd2\x28\xfc\xfd\xfd\x15\x16\x6f\xa2\x83\xa5\xc1\x4d\xde\x02\xaa\xc9\xe3\x38\xce\x32\xb1\x1c\xc7\xca\xce\x61\x74\x20\xb0\x49\x22\x06\x01\x1a\x8b\x44\xda\xd2\xf3\xdb\xdf\xaa\xea\x6e\xa0\x01\x52\xb2\x3d\xf3\xdc\x3b\x19\x8b\x00\x7a\xdf\x6a\xaf\xea\xa3\x45\x99\x84\x45\x94\x26\x96\xfd\x41\x3f\x3e\x48\xac\xc4\xfe\x90\x89\xa2\xcc\xe0\xf9\xf8\xd8\x4a\xba\xe9\x75\x22\xb2\x6f\xd2\xb0\x5c\x8b\xa4\xb8\xb9\x49\xba\xf3\xfa\xd9\xae\x5e\x5e\xc4\x02\x7f\x6e\xab\x8a\x8a\xfb\x2b\x3a\x3e\x6e\x7d\xe8\xce\xc5\x22\x28\xe3\xe2\xb7\x48\x5c\x9b\xad\x40\x46\x7a\xad\x53\xed\xba\x11\x61\x25\xac\xa8\x9a\x29\xc6\xc9\xc4\x1b\xf8\xc9\xb8\x98\xe0\x5f\x5e\x4c\xfa\x7e\xbf\xd7\xaf\xb3\x67\x66\x9f\xca\x38\xe6\x9c\x27\x13\xc8\xe1\xbb\x49\x9d\xa9\xac\x33\x1d\x45\xf9\xab\xe0\x15\xbc\xd7\xa9\x51\x9d\xfa\x21\x16\x8b\xc2\xaf\x26\xb1\x60\x82\x65\xac\x84\xb9\x4c\x33\x2b\xc8\x96\xd4\xfb\xbc\x1b\x8b\x64\x59\xac\x4e\x4f\x60\x0a\x32\xde\xb7\xd9\x5e\xca\x43\x48\x29\x79\xa1\x5e\xed\x51\x39\xce\x46\xf6\x87\xab\x20\x7b\x10\xf1\xcc\x2d\xc7\xe3\xf1\x60\x04\xb5\x4f\xa3\x19\x13\xf6\x69\x7f\x92\xf1\xc8\x1d\xf8\x25\x8f\x6e\xd5\x48\xb2\x5b\x96\x45\xcb\xd5\xff\xeb\xae\x8c\xfb\x13\xe8\x84\x4f\xdd\xa9\xbb\x72\x5b\x4f\x55\x6a\xce\xb6\xaa\xb3\x4e\x0d\x30\x15\xfb\x87\xd5\x17\x1c\x2a\x76\x8a\x2f\x07\x23\xbb\x70\xf8\xa0\x3f\xd2\x2b\x5a\xe7\x0f\xe5\x52\xeb\x12\xe2\x41\x04\xc9\xf6\x4f\x97\xff\x88\x90\xf6\x4e\x94\x88\xd7\x59\xba\x11\x59\xb1\x83\xbd\xb6\xc9\xd2\x22\x2d\x76\x1b\x01\x33\x01\x03\x88\x4b\xe1\x17\x53\x01\xdd\x4e\x60\xc4\x59\x70\x19\x0b\xff\x68\x70\x6b\xac\x6b\x0c\x87\xa0\x58\x45\x79\xf7\x82\xab\x3a\xc3\x4c\x04\x05\x6c\x30\xd8\x27\x46\xbe\xbc\x1e\x94\x95\xb8\xbc\xd3\xb1\x61\x13\x6d\x02\xd8\xa2\xd3\xfe\x0c\x1e\xaf\x82\xc9\x55\xe0\x26\xbe\xb1\xa1\x16\x7b\x45\xaa\xac\x49\x37\x8f\xa3\x50\x58\x03\xdb\x2c\xb0\x32\x26\x0e\xdb\xc3\x91\x52\xd7\xea\x2c\x4b\xb3\x4e\x8e\x99\xea\x5c\xc7\xc7\x73\x11\x8b\x42\xa8\xd7\x69\x32\xab\xcb\x6d\x2c\xb9\x9e\x09\x9f\xce\x46\xd5\xec\x3f\xa8\xca\xda\x30\x75\x65\xbe\xb2\x16\x56\x61\xdb\x7a\x15\x8c\xae\x5d\x55\xe5\xfb\x07\x8b\xbb\x6e\x72\xa0\xd4\xdc\xaa\x17\x2e\x31\x72\xab\x53\x36\x50\x45\x8e\x8c\xa3\xba\xfe\xc4\xf5\xd8\x99\x9b\xac\xfe\x7c\x86\xbb\x05\x36\xa9\x4e\x32\x40\x1d\x76\x22\xe3\xa2\x1b\x6c\x36\xf1\x0e\x8e\x4a\x75\x0a\xaa\xf1\x66\xb0\x38\xc5\x24\xf1\x33\x63\x33\x6f\xe5\xf6\x8b\x60\x62\x70\x00\x89\xad\x77\xe8\xa8\x80\x03\x13\xae\x82\xec\x59\x61\xf5\xed\x6e\x91\xfe\xba\x81\x4d\xf8\x3c\xc8\x85\x65\xbb\x45\xb5\xbe\xd5\x6c\x09\xde\x67\x19\x9f\x07\xea\x40\x8c\xb2\xb1\x18\xb9\xae\x90\xfd\x2a\x21\x01\xb6\xa9\x5b\x8c\xa0\xa1\xb2\xd1\x50\x69\x74\xe6\x12\x86\x51\xbf\x5d\x34\xde\xae\xe9\x5c\xd5\x50\xd8\x38\x64\xd0\xae\x60\x25\xf7\x06\x0c\x8e\xb3\x6e\xdf\x75\xcb\xd3\x68\x64\x5b\x05\xcf\xa6\xe5\xac\x9b\x26\xf6\xf1\x71\xa1\x27\x07\x16\xe0\xc0\xfc\x24\xb7\x72\x20\xd3\x19\xd4\x98\x88\xeb\x07\x71\x75\x5e\xa1\x3c\x37\xc0\x50\xa9\xa0\x07\x4b\xa1\xc1\xa5\x28\x60\x57\xe9\xac\x7b\xc0\x67\x38\x49\x8f\x8f\x53\xa8\xc0\xb7\xe0\xc1\xc2\x27\x8e\x8b\xcd\x04\x2c\x96\x9c\xc6\x3e\x74\x5c\x74\xa3\x64\x2e\xb6\x3f\x2d\xac\xd4\xb6\xbb\x61\x9a\x84\x41\x61\xe9\x0c\x00\x8a\x6c\x9b\x65\xdd\x4c\xac\xd3\x2b\x81\x7b\x98\x95\xc7\xc7\x42\xee\xe9\xac\x9b\x63\x0f\xd8\x07\x68\xa2\xbc\x85\x24\x80\xeb\xcc\x80\x30\xe7\xb8\xe5\x82\xae\xb8\x42\x6c\xb4\xc9\xe8\xf7\x1b\x89\x76\x2c\x63\xc7\xbd\x35\x37\x33\x83\xd5\x57\x45\x46\x09\x6c\x84\x3c\x2d\xb3\x50\xbc\xa0\x77\xbb\xe0\xc9\x01\x40\xf6\xa2\x09\xf8\x70\xfe\x2e\x98\xdc\x15\xed\x39\xc1\x8d\x71\x0a\x20\xb8\x98\x56\x29\xb0\x3b\x66\xfc\xda\x98\x47\x98\xf2\x45\x3d\xe5\x00\xf7\xf7\xf7\x3c\xac\x42\x91\xed\x14\x1c\x2f\xcd\x3e\xd6\x9d\x2f\xbb\x05\xb4\x21\xa0\x3f\x4c\x7f\xe3\x25\x2b\xa6\xf0\x1d\xa0\xe8\x4c\x6d\x08\xac\xfe\x16\x40\x6d\x10\xc7\xbb\x6a\xae\x00\x13\xdd\x36\x26\xf2\x99\x71\x26\x77\x00\xe7\xd9\x45\x00\x93\x5d\xa7\xbf\xaa\xd3\x3b\xfa\x63\x07\x8e\x1c\x34\x94\x2e\x1e\x24\x70\xf2\x8c\xe3\xaa\xea\x39\xc3\x7a\x70\x3f\xda\xc6\x39\x78\xfe\x1f\x54\xb4\x3d\x54\xd1\x7b\x85\x5c\x6a\xba\x42\x41\x1f\xb9\x91\x9e\x15\x45\x16\x5d\x96\x08\x7d\x6c\x93\x9a\x38\x9c\xe9\xd5\x39\x20\xa0\x7c\x13\x84\x82\x01\xda\x4b\xc3\xc0\x84\x57\xa5\x2e\x04\x7b\xd1\xa8\x16\x5a\x37\x69\x8c\x03\x79\xf6\x6b\x6d\x94\x49\x15\x64\x13\xfc\xae\xc3\x2b\x09\x1e\x31\xb9\x63\x5c\xfe\xa1\x5e\x09\xdb\x44\xd8\xff\x4d\x0b\x07\x26\x65\xbf\xc5\x03\x63\x84\x1e\x68\xa8\x83\x9b\x35\xc9\xbb\xef\xca\x20\x8e\x16\x08\xf7\x99\x6c\x10\x40\xb5\xcc\x3c\xc9\x7c\xe1\x1f\xd8\x08\x75\x86\xc0\x4f\x7d\xfd\x1c\x01\x10\xa8\x06\xf7\xae\x41\xab\x40\x77\x00\xff\xc0\x10\x36\x31\xf4\xc5\xea\xfd\x3b\x77\x7b\x4b\xd6\x79\xd0\x31\xa6\xe3\xa5\x59\x02\xce\xf0\x1b\xb1\x7c\xb1\xdd\x58\x1d\x6b\xe2\xff\x7d\xf3\x6f\x28\x61\x77\x5c\xe8\x70\x26\xde\x95\x29\x4d\xb0\x8b\x49\x98\x70\xf3\x85\xdd\x61\x9d\xa5\x59\xd9\x2f\x0d\x12\x01\x28\x04\xdd\x85\x7c\x13\x47\x85\xd5\x83\x1a\xa1\x0b\x46\x81\x37\x07\x36\x6c\x8d\x61\xbc\x01\x41\x8e\x72\x64\x27\x00\x2f\xe4\x3a\x15\xad\x9d\x6b\xe6\x06\xd0\x73\xd7\x9a\xee\xd5\x03\x00\x20\xe1\xd8\xdf\xee\x3a\xd8\x58\xdf\xd8\x23\x89\xb7\x92\x0a\x9f\xdd\x75\x1c\x0b\x5c\x9e\xba\x0f\xdf\xe0\x90\x25\x08\xc4\xa9\x1c\xb5\x81\x16\x41\x32\xc4\x82\x00\xf1\xc3\x38\xc8\xf3\x97\x51\x5e\x68\x64\x98\x4d\xca\x6e\x30\x9f\xe3\xb6\x2d\x35\xb0\x4f\x74\x57\x04\x62\x9a\x7a\x17\x77\xa8\x74\xc7\xbe\xb9\xe9\x74\x46\xd9\xc4\x02\xf2\x36\xc8\x8b\x1f\x10\x89\x00\xd0\x2d\xba\x85\xc8\x0b\x00\x91\x37\x37\xa2\xb9\xfb\x55\x39\xf6\xce\x2a\x5d\x58\x7a\x17\x48\x2c\xdb\xbf\x3b\x4f\xb5\x5b\x0a\xda\x28\xb6\x09\x5e\x5e\x6b\x6a\x64\x1f\x76\xe4\xc5\x2e\x16\x6a\x08\x35\xfd\x7a\x10\x60\x50\x4e\x68\xbe\xce\x46\x95\x36\xe1\x86\xa4\x6e\xee\x3f\xa1\xd9\xe4\xbe\xa6\xfd\x3b\x5b\xcb\xcc\xd3\xa8\x8e\x5e\x76\xf8\xc0\x35\x0e\xd7\xaf\x07\x36\xab\x41\xa2\x36\x08\x54\x3d\x31\xf0\x91\x17\xcd\x59\xf8\x34\xe0\xd3\xac\xd8\xd7\x75\x89\x76\xc7\xef\x80\x14\x25\x50\x7d\x55\xab\xff\xec\xd1\x52\x72\xc3\xd2\x0c\x35\xb8\x57\x40\xe0\xf4\x31\x09\xd6\x82\x00\xd8\xaf\x6f\x7e\xd0\x5b\x1a\x00\xa2\x22\x5e\x15\x93\x0c\x60\x0e\x00\x1c\x4c\x74\xf3\x73\x63\xd9\x45\x8d\xb1\xf6\x5b\xdb\xab\x6e\x0f\xdf\xdc\x8b\x14\xad\x7d\x50\x6a\x2b\xa0\x08\x6c\x52\xdd\x87\x6f\x2b\x62\x9f\xba\xb0\x09\x32\x6c\x2d\x9d\x8b\x51\x82\xec\xbb\xdc\x39\xcf\x57\x51\x3c\xb7\x24\x42\xad\x4a\x7e\x6f\x70\xc9\x17\x17\xf3\xa0\x08\x2e\x2e\x80\xc3\xa9\x33\xfc\x64\x40\xcf\x7d\x1c\x7d\x19\xc8\xe5\x4d\xcc\x43\xf4\x83\x51\xa4\x4d\x28\xdd\xdc\xc0\x98\x84\xcd\x4c\x0e\xb8\x9e\x3f\xa0\x00\x27\xf0\xa9\xab\x7b\xc2\x44\xf5\x68\xfb\x47\x85\x77\x24\x8c\x66\xfe\x6c\xf1\x99\x44\x98\x25\x26\xb5\x2e\x5c\xd7\xd6\xc9\x25\x50\xa4\x08\x1b\x81\xc0\xed\xb3\x80\x47\x3a\x5f\x30\x4e\x47\x29\xe4\x03\xf0\x15\x4d\xd3\x19\xd2\xd4\x56\xc9\x52\xe8\xd5\x01\xf6\xe8\xaf\x36\xbd\x74\xde\xa4\x97\x7e\xab\x40\x25\x13\x7b\x70\x12\xf8\x7c\x16\xc9\xe4\x14\x7a\x90\x00\x73\xde\x2d\x37\x30\x3a\xc1\x42\x5e\x71\x19\xd8\xdf\xe8\x88\x0b\x20\xac\x05\x8f\x80\x6a\x05\xf6\xbf\x1c\x73\x98\x1a\x20\xfc\x4b\xa0\x9a\x47\x47\x56\xca\x83\x69\x81\x5d\x75\xdd\xe2\x34\x1c\x55\x3d\x4d\x8d\xd9\xf9\xe3\x20\x24\xab\x4f\x05\x8c\x75\x44\x95\xd6\x24\x00\x11\x9a\x08\xbc\x05\xec\x60\x2a\x5e\x74\xbf\xb0\x99\x79\x4e\x61\x82\xf6\x8f\x7a\xc9\x43\x58\xc6\x2c\xa8\x05\x18\xc8\x91\x76\x61\x97\xc6\x72\xbb\x11\x15\x87\x68\x60\xaf\x05\x59\x27\xd0\xaf\x65\xf7\x0b\xdc\x16\x25\x70\x91\xc5\x3e\x9c\xc4\x53\x6b\xa2\xee\xbf\x2f\x2e\x60\x42\xa7\x7f\x77\x67\x07\x90\xf7\x17\x9d\x9a\x87\xcb\x34\x0f\x6b\x23\x3f\x08\xac\xcd\x3a\x28\xc2\x95\x25\x6c\xdd\x73\xea\x41\x06\x53\x71\xd7\x34\x14\xd3\xc1\x8c\x51\xff\x9a\x33\x91\xcd\x6e\x89\xb9\x4a\x79\x07\x3b\x03\x58\x07\xd7\xb4\x62\x79\x3a\xdd\x8e\x0d\xcb\xfa\x05\xec\xaf\x3e\xca\xd4\x78\x52\x71\x46\x81\x2d\xf1\x5f\xcc\xdf\x06\xc4\x6a\xd5\x38\x35\xa6\xac\x31\x14\xfc\xda\x66\xc1\x84\x80\x9c\x5f\x4c\x2e\xfd\xa8\x9e\x93\x2f\x1a\x92\xb4\x1a\x0b\x57\x18\x45\x33\x0a\x15\xd5\x2f\x80\x3b\xe8\xcf\x24\x68\xd0\xc7\x69\x84\x7c\x46\x62\x42\xe8\xe2\x00\xbf\xd0\x90\x12\x7d\x2d\x1b\x96\x67\x4d\xf6\x62\x6f\x8f\x27\xe6\x16\xa3\xe3\x98\x89\x18\x76\xf8\xfc\x17\xe2\x59\x46\x19\x49\xb4\x00\xc6\xdd\xdc\x3c\x3d\x86\x2d\x92\xae\x11\x56\x69\x68\xf9\x3a\xcd\x23\x09\x14\x6c\xc2\xf2\x72\x07\x35\x81\xcb\xef\xf5\x48\x3b\xdd\x79\x16\x2c\xf3\x72\x03\x2c\x60\x9e\x7b\x1d\xf7\x81\xeb\x3e\x0b\x80\x6f\x06\x64\x1f\x85\x6f\x3b\x6e\x06\x67\x1e\xc6\x92\xc3\xb2\x85\xc0\x4f\xe2\xb2\x03\xaf\x6a\x75\x8a\xb4\x0c\x57\xb8\xd4\x98\xe5\x5c\x7e\xa3\xaa\x80\xb3\x2a\x8c\x6f\xb2\xa0\xf1\x15\x99\x7d\x89\x96\x5e\x04\x30\x92\x17\x01\xef\xa4\x89\x99\x2b\x42\x24\x72\x34\xf0\xb7\xc8\xe8\x22\x62\x66\x9d\x32\x17\xd9\x39\x65\x01\x5a\x83\xbd\x08\x14\x04\xe0\xb8\x64\x2a\x4f\xc0\xd3\xe9\x8b\x60\x36\xa2\xbf\xbc\x93\xa4\x89\xe8\xdc\x1e\x98\x5a\x68\x3d\xea\x12\x24\x21\xd9\x0a\xa3\x4e\xc8\x42\x08\x87\xf4\xdc\x1b\x60\x9a\xb2\x97\x32\xfb\xed\x48\xbd\x19\xe9\xc0\x49\x33\xe4\x99\xd9\x11\x80\x19\xa0\x21\x7e\x89\xd6\x22\x2d\x91\xf7\xee\xdb\xe6\xda\xff\x8b\x58\x8c\x0f\x02\xe5\x27\xc9\x12\x96\x13\x67\x50\xe4\x04\xa4\xda\x1f\x61\xaf\xc9\x0d\x8e\xcb\x4f\xd8\xf0\xfc\xb7\xef\x14\x06\xbc\xb9\x49\x70\x0e\x33\x85\x17\x21\xe1\x75\x1a\x25\x85\x3e\x8d\xed\xef\x16\xcd\x78\x7f\xfc\x2a\xd0\xc2\x4d\x3a\x2d\x34\x0f\x79\x98\xa5\x71\xfc\xc7\xcd\x8d\x7e\xfc\x13\x0e\x85\xb1\xdc\x9d\xcb\x74\xbe\x03\xfa\x1c\xb6\xb8\x48\xe6\xb0\x98\x57\x40\xc8\xcb\x09\xb7\x3e\x6c\xd4\x4e\xf3\x3b\xc1\x65\x9e\xc6\x40\x21\x76\x58\x91\x6e\xfc\x3e\x23\x51\x71\x9f\xad\x61\xbf\x46\x09\x3c\x6c\x00\x6c\x45\xc9\x12\x9e\x2e\xd3\x6c\x2e\x80\x8a\x92\xcb\xc3\x3a\xd1\x7a\x93\x66\x45\x90\xc0\xba\x8e\xe4\x92\x66\x30\x74\xf8\x3f\x1e\xea\x73\x18\x88\x48\x9e\xff\x72\x06\x43\x78\x15\x70\x80\xd9\xdd\xc5\xcd\x4d\xda\x15\x86\xd0\x03\x66\x58\x2d\xf2\xab\x60\x02\x74\xe9\x16\xa6\x72\x13\x2c\xc5\x1f\x00\x6d\x76\xea\xf9\x4f\xdb\x57\x29\xb0\xa7\x61\x02\x75\x9a\x7c\xfb\x13\x20\x26\x2f\x11\xa8\x65\xd1\xf6\x97\x2c\x48\x72\x00\x7c\x6b\x20\x32\x9a\x3d\x00\xa8\x74\x25\x32\x94\x73\xd9\x6c\x0a\xb5\x61\x1d\x33\x82\x5e\x08\xb2\x20\xef\xd7\x69\x99\xe0\x28\x9f\x53\xad\x6f\x70\xfa\xf4\xd9\x9e\x56\x2d\x7b\x88\xa3\x16\x85\x97\xa8\x0f\x2f\xe1\x85\x55\x3d\x81\x54\x98\xc0\x2a\xf1\x97\x74\x63\xd0\x8a\xdf\x19\x34\x92\x96\xdb\xec\x6d\x9a\x6e\x34\x87\xef\xd1\x22\x12\x06\x61\xf7\xa3\xc9\xbc\x8d\xfb\x93\x81\xdf\x97\xba\x03\x43\x02\xf9\x73\x53\x84\x68\x21\xb4\xf3\x50\xca\x6b\x3b\x96\x00\xf0\x0d\xcf\x83\x99\xed\x11\x28\x97\xcf\xf8\x5d\xe7\xa9\xeb\x49\x1a\x9a\x90\xf1\x60\xd2\xf7\xbd\x01\xb4\xf6\x2e\xf0\xcf\x82\x62\xd5\x0d\xc2\x34\x6f\x90\x7e\x45\xbb\xc0\x9b\x40\x96\xf0\xde\xe8\x22\x79\x94\x34\xa9\x45\xa3\x88\x05\xb0\x9e\x72\x09\xc0\x69\x40\xd9\x79\x83\x5e\x62\xf7\x86\x06\x89\x7d\x4f\x66\xb7\x9d\xb9\xbc\x2b\xf3\xd0\xa1\xba\xed\x1e\x30\xac\x03\x93\x09\x29\x1a\xa2\x69\xca\x4f\xdd\xed\x0d\x6d\xdb\x31\xa8\x9a\xb4\x68\xc8\x2d\x83\xa2\x25\xb2\x45\x58\x0f\x78\x16\x20\x60\x12\x22\xe5\x1a\x14\x13\x49\x56\xac\xb8\x2b\x71\x7c\x37\xe7\x6e\xc1\xae\xd2\x48\xd2\x9f\xdd\x98\xbb\x00\x8b\xfd\x03\x92\xc5\xa4\x55\x11\x62\x7d\x6c\xb0\xbb\x02\x92\x39\x47\xb2\xd9\xf6\x2f\xe1\x70\x23\xbe\xbd\x28\x58\x50\xd8\xbe\xce\xd2\xe2\xb1\xc2\xe2\x00\x05\x64\x2e\xd7\xc9\xe3\xfe\x24\xf1\x38\xfc\xe0\x9e\x42\xcc\xeb\xe2\x8b\xcd\x1e\xe3\x16\x8b\x5c\x2b\xf5\x22\x98\x87\x1e\xa4\x0f\x9e\xe2\xa7\xd4\x1f\x3e\x34\x93\x2c\x78\xf5\x60\x11\x20\x43\x74\x50\x2b\xf5\x80\xe6\x34\xc3\xc3\x65\x0d\x1f\x3d\x72\xb0\x7d\xfb\x56\xc9\x59\x2b\xf2\x92\x6b\xdd\x15\xec\x37\x2b\xf9\x92\xfa\x70\x0a\x5d\x73\xb1\x67\x28\xb7\x94\xe9\x05\xa6\xf7\xc7\xa8\x2a\x2b\x60\xab\x0d\x7c\x24\x8a\xfa\x63\x01\xef\x82\xde\x05\x90\xb6\xdd\x47\x63\xe0\xac\x84\x63\x0d\x5c\x98\x19\xe1\x16\x9e\x70\x0a\xc0\x82\x43\x47\x78\x29\xc3\x99\x5a\x03\x79\x8b\x1b\x61\x88\x74\x25\x8a\x66\xe0\x8f\x87\x6f\xa6\x8a\xe5\x63\x2b\x1c\xef\xaf\x70\xf8\x1f\xad\x70\x2c\x57\x38\xd6\x2b\x1c\xca\x15\x6e\xe4\x59\x14\x93\x25\xa6\xc7\x90\x16\xc0\xbf\x4b\xdb\x87\x77\xd8\xb1\xd7\xf4\x17\xa9\xbf\xe5\x25\x71\x46\x80\x17\xbb\x4b\xca\x61\x9b\xb9\x75\x0b\xad\x0d\x92\xb7\x47\xa9\xd7\x81\x88\x30\x98\x1e\x3d\xef\x44\x7a\xc3\x3b\xd6\xb3\x00\x2a\x82\xd1\xb2\x12\x30\x70\xf8\x37\x81\x0d\x33\x5c\x1f\x1e\x78\x33\xda\x58\x7c\x6c\x26\x17\x7a\x26\xe3\x6a\x26\x83\xe6\x4c\x5e\x7e\xda\x4c\x2e\xe4\x4c\x2e\x5a\x33\xd5\x9e\xed\xbc\x35\xd3\x72\x0e\xd7\x45\x6b\xfe\x7c\x5d\x57\x6b\xce\x56\xd5\x78\x24\x82\xc7\x9d\xf4\xd8\xee\x0d\x06\x8f\x01\x11\x65\x6e\xd1\x7b\xd4\x47\xd1\x7f\xe6\x89\xde\xb0\x5f\x29\x07\x4b\xbe\x41\xc1\x8d\xf3\x47\x00\x24\x21\x3c\x66\xb6\xf3\x45\x00\xd9\xe0\x11\x8e\xd1\xd7\x81\xde\x98\xf3\xc2\x3a\xe9\xc2\xa1\x7a\xf8\xe8\xe1\xd0\x29\xbd\x41\xf7\xd1\xc9\x93\xc1\xc9\x53\x38\x38\x5e\xf7\xe1\x57\x4f\x1f\x9d\x0c\x1e\x3a\x11\x90\xe1\x85\xe5\x75\xbf\x7a\xfc\xd5\xf0\xf1\x63\x07\x38\xa2\xee\xd3\x27\x8f\xfb\x83\xfe\x53\x27\x73\xbb\xfd\x87\x83\x47\x8f\x1e\xab\x4c\xdd\x3e\x3c\x3f\x3c\x79\x08\x55\x75\x87\xfd\x87\xfd\xe1\xa3\xaf\x20\xcf\x00\x3e\x3f\x19\x0e\x1f\x0d\x21\x97\x31\xb2\x65\x7b\xa5\x10\xdb\xa8\x9d\x23\x41\x39\xcc\xe2\x10\x16\xbf\xb0\x9d\xd7\x81\x5a\xf0\x77\x00\xa1\x0b\xa7\x70\x85\x23\x90\xfe\xd2\x3b\xad\xdf\xeb\x33\xfc\x67\x02\xfe\x4d\x13\x57\x40\x87\x1e\x3f\xfd\xea\xa4\x7f\xf2\x70\x92\x38\xf0\x1f\x9c\x7c\xef\x61\x6f\xf8\x95\xdd\x7b\xd2\x7d\xf2\xf4\x49\xff\xe4\x89\xa1\xca\x6b\x15\xed\xf7\x9f\x3e\x7d\xf4\x78\x42\x5d\xd8\xa4\xd7\xd0\xef\x41\xef\xc4\xf6\x75\x41\x27\x71\xb1\x26\x43\xa9\x57\xdc\x0d\x92\x60\x92\xfa\x27\xfd\x87\x63\x9e\x4c\x06\xc3\xee\x57\x80\x2b\x7c\x9c\xa0\x47\x4e\xa3\xf6\x61\xf7\xa1\xed\xe1\x67\x73\xc6\xd6\x1f\xdb\xdb\x6b\xbd\xb7\x33\xfe\x3f\xff\xa3\x36\xf7\x12\x1e\x9b\xbb\xfb\x7f\xfe\xe7\x53\xb6\xf7\x5a\x6e\x6f\x6c\xd3\xdc\xa6\x1a\x15\xac\x0b\x16\x2a\x54\xb0\xde\xdf\xb5\xbb\xa2\x25\x02\xc6\x3c\xe3\x31\x6c\x5a\xf8\xfb\xf4\x18\xe6\x81\xc1\xbf\x63\x73\xb9\xce\xcc\x22\x54\xde\xed\x74\x0c\x25\xa3\x99\x3c\x78\x0c\x48\xa1\xd3\xef\xb8\x34\x67\xeb\x60\x6b\xe1\xd2\x03\x39\x74\x0e\x64\x59\xb2\xb4\xe0\x84\x48\x6a\x60\x0d\x00\x02\x1b\x6b\x25\x1a\xea\xc2\xe6\xf1\x42\x81\x81\x92\x57\xf4\x81\x27\xec\x13\xe9\xcc\x7b\xd6\x34\xf0\xde\x03\xe7\xfb\x6f\xcb\xea\x3a\xf6\xbf\xed\x5e\x04\x78\x5e\x84\x78\x84\xf3\xeb\x08\xf9\x5b\x38\x8b\xd3\xe1\x4c\xc9\xa4\x3b\x0c\x58\xd1\x0c\xc9\x9e\x0f\x61\x90\x8b\xce\x2a\x8f\x3b\xbe\x96\x78\x59\xc0\x7f\xe5\xe2\xdb\x38\x05\x0c\x5a\x22\x39\xc4\x1a\x1f\xa0\x50\x6f\xd0\xef\x37\x3f\x0e\xe5\x47\x7b\x44\xd5\x01\xf0\xad\xaa\x2b\xac\xb7\xba\x9a\xb7\xaa\xb8\x7c\x80\x22\x5a\xd4\x65\x45\xfc\x3b\xc5\xf7\xc2\x2c\xbc\x4c\xaf\xb5\x0e\xd6\xb6\x27\x00\x0f\x60\x75\x23\x58\xdd\x08\x57\x57\xf1\x5a\xc9\xcd\x4d\xe7\xff\x74\x8e\xe0\xa1\x56\xdf\x02\xd9\x4f\xd0\x19\x80\x08\x76\xed\x07\xa4\xdd\x2a\x15\x2e\x83\x49\x85\x1c\xd6\x43\x34\x1b\x51\x1b\x6a\x62\xa5\xdc\x3a\x79\xfa\xb0\x7f\x1c\xd9\xe3\xf1\x43\x98\xd6\x14\x7e\x6e\x50\x12\x33\xc4\x8f\xf0\x1b\xe0\x87\x00\x26\x7a\xf0\x08\xde\x43\x1e\x9e\x9e\x3e\xbc\x09\xe1\x60\x19\xd5\x20\xc3\xc5\x61\xd1\x9e\x00\xc8\x7b\x2a\xeb\x82\x6d\x14\x70\xeb\xf1\xa3\xa1\x7a\x7f\x0a\x45\x71\x3b\x01\x78\x01\xde\x0a\x1a\x60\xa1\x79\x6c\x2e\xf6\xd7\x98\x57\xbb\x23\xe9\x61\x51\x56\xc8\x1f\x41\x3f\x36\xf4\xb5\xda\x59\xb2\x28\x72\x8c\x1e\x76\xd1\x4a\xdd\x08\xa8\xc0\x4a\x55\x0b\x6c\x04\xd2\x00\xe1\x24\xe8\x51\x92\x0f\xbf\x43\x0f\xa9\x15\x64\xc6\x39\x4f\xe1\x44\x7a\xc2\xee\x05\xae\x25\x80\x94\x78\xec\xf7\x6d\xbf\xa0\xcf\x02\x29\x99\xc0\x1d\x22\x20\x2a\xf0\xe9\x21\xcb\x1c\x0e\xa4\x88\x8f\x26\x28\x00\xcc\x4a\x1e\xa2\x28\x63\x00\x95\xf7\xfd\x4c\x62\x43\xd8\x0e\x38\x80\xd0\x18\xde\x75\x35\xbc\x84\x9f\xe3\x29\x01\x02\xe6\x1c\xd5\xc9\x40\xad\x9c\x23\x0b\xae\x58\x43\x00\x6a\x56\xf7\xe1\x60\xf8\x10\x40\x34\x40\xac\xee\xc9\xa3\x27\x8f\x9e\x3c\x1e\x00\x30\xed\x02\xb5\xf5\xf0\xe4\xc9\x23\x80\xa9\xbd\x3f\x02\xe4\x70\x28\xef\x70\x30\x7c\xfc\x64\xf8\x15\xe6\x7d\x32\x78\x34\x78\x34\x1c\x62\xde\xfe\x93\xe1\x40\x66\xfd\x02\xb2\x46\x32\x6b\x7f\xf0\xd5\xc9\xc9\x09\x65\x1d\x0c\xbe\x1a\x7c\x45\x39\xbf\x7a\x84\x80\x6e\x80\x59\xbf\x0e\x6a\xc9\x45\x61\xc1\x4a\x22\xb2\x79\xcc\x00\x77\x39\x56\xe6\x95\x36\x1b\xe2\x53\xe9\x35\x10\xc4\x79\x83\x5c\x96\x2b\x73\xca\x01\xe3\x00\xba\x9a\x24\x3d\x82\x9e\x7e\x05\x35\x01\x31\x12\xbc\xec\x11\x34\x65\x08\x40\x0d\xc5\x74\x51\x0b\x4a\x8c\x93\x55\xc9\x81\x3a\x5f\x76\xb8\xb1\xdb\xf5\xde\x03\x1a\x7e\x62\x82\xef\x2e\x80\x69\x00\x7a\xa6\xc6\xba\xf8\x0f\xf4\xac\xa6\xb4\xf7\x59\x71\x48\xdc\x4b\x56\x4a\xd5\xe7\x21\xf4\xad\x0d\xae\x8f\x8f\x0f\x34\x27\x48\xd8\x23\x50\x76\x47\xe2\x8a\x57\x05\xd5\x94\xa0\x66\xca\xd0\x31\xab\x0d\x83\x2d\xec\x89\x16\x91\xfc\x0d\x81\x69\x0f\x8a\x32\x47\xe8\x77\x54\x1c\x1f\xbf\x2f\xac\x10\x4e\x77\x31\xe6\xb0\x4c\xc7\xc7\x27\x7d\x20\x8a\x6f\x6e\x60\x6d\x51\xae\x24\x15\xe8\x09\x57\xc2\xa3\x08\xf7\x66\x48\x32\xbf\x7a\x00\x88\x7d\x1e\x00\x2b\x9e\x65\x69\xa6\xb3\x41\x97\xd2\x2e\xac\xc2\x5c\x7f\x00\x64\x20\xe2\x5c\xb4\xf3\x85\x8a\x7e\xe7\x1f\x6e\xe1\x58\x02\xed\x39\x8f\xf2\x0d\xd5\xdf\xb9\x14\xc0\x7c\x8b\x5c\x24\x73\x80\xb8\x9b\x2c\x5d\xa2\x54\x0a\x1e\xb1\x56\xf8\xa1\x6a\x3a\x78\x74\xa1\x68\x48\xe2\xcc\x3f\xce\x5e\x7e\x5f\x14\x9b\x37\xe2\x5d\x29\xf2\x82\xc5\x34\x4f\xda\xc4\x86\xd0\xe3\x1f\xdf\xa4\xeb\x20\x4a\x54\x0e\x80\x83\x00\xdf\x57\xcf\x33\x41\x9c\x72\x10\xe7\x28\x70\x0a\x6f\x6e\x8e\x7a\x7f\x5b\x2b\xa8\xc9\xca\xed\x89\x6f\x4f\xfe\xdd\xfb\x77\xaf\x27\xd5\x65\x09\xc2\x41\xd5\x5a\xa3\x2e\x9b\x75\xd2\x84\xba\x86\x55\x4c\xc2\xae\x7c\xe3\xf8\x40\x5d\xe5\xa5\x8f\xcf\x99\x08\xe6\x3b\x5c\x00\x21\x19\x76\x53\xba\x14\x76\x29\xf5\x1c\x53\xc7\x27\xc7\xc7\x25\x4a\x92\xb0\x90\x1e\x3d\x3f\x20\x18\xdc\x13\x4f\x26\x24\x8b\x4c\xbb\xba\x90\x31\xd5\x7b\x02\xc9\xe2\xf6\x16\x50\xc3\x0a\x5a\x15\x99\x51\xb9\x21\x10\x4d\xb8\xd6\xcb\x9a\xb8\x65\xdf\x82\x6e\x38\x09\x50\xeb\x64\x69\x2d\x93\x92\xed\xd2\xc7\x80\x74\x5a\x50\x0b\x8b\x6c\x6c\x6f\x1d\xad\xc5\x2f\xb0\xa7\x1b\xc3\xb9\x43\xc1\x01\x00\x96\x2b\xb4\x35\xc1\x5f\x3f\x91\xf5\xc0\x31\x85\x9a\x60\x7c\x1b\x94\x18\x7e\x7a\x6d\xb0\x29\xb0\x74\x6c\x96\x3e\x54\x52\x60\xbe\x5b\x36\xed\x00\x66\xc5\xfd\x97\xe6\x45\x67\xd6\x85\x1d\xf9\x22\x80\xcd\xd9\x90\x22\xe2\xe8\xf6\xc1\x40\xd4\xc5\xad\xab\x24\xc2\x11\x83\x4c\xda\x66\xa7\x29\xd9\x87\xb3\x0b\x80\x96\x32\x37\xac\x59\xd0\x84\x08\x4e\xe8\x27\x43\x87\x8c\x4c\x18\x33\xc4\x4b\x04\x1d\x60\xdf\x6c\x04\xd6\x94\x90\x30\x52\xad\x0b\x6c\xf9\x20\x0c\xc5\x86\x44\xab\x01\xec\xe5\xa0\x2b\xdf\x71\x7d\x98\xd3\x73\x50\xcc\x8e\xda\x4f\xb5\xad\xbf\xa7\xad\x51\x69\x7d\x90\x1e\x7d\x10\xd8\xfb\x39\xac\x9c\x05\xd3\x7c\x56\x2b\x79\xa0\xb9\x23\xd4\xb2\x40\x37\xae\x60\xff\x47\x73\x71\xa6\x56\xfd\xd0\x37\xc4\x67\xb2\x08\x8a\xec\xc3\xe6\xba\xc6\x3a\xad\x3c\x3e\x26\x91\xab\x3a\xfb\x30\x43\xf4\x26\x01\x82\xb9\x24\x25\x6d\x43\x84\x39\x80\xec\xbb\x35\x20\xa9\x8f\x02\x0d\x12\x80\xbe\xd6\x0b\xd3\xd6\x02\x2c\x1c\xe1\xbe\x08\x2e\xd3\xac\x38\xb0\xa4\xa1\x4c\xb1\x28\x1b\x69\x49\x2e\x23\xa8\x03\x68\x4a\x3c\xfc\x1d\x3d\xc9\xd9\x24\xf2\x23\xa2\xc8\x9e\x23\x6f\x66\x20\xaa\xe7\x0d\x32\xd7\xa4\xa6\x9a\xfa\xbb\xc4\xaa\x95\xb5\x52\xd6\x6c\x5a\x49\xbe\x37\xd0\x5d\xd2\x98\xaa\x51\xad\xf8\xeb\x14\x62\x5b\x20\x91\x87\x36\x20\x3a\x8f\x6f\x64\x87\x64\xc3\x0a\xa4\xa8\x34\x9e\x2f\x71\x7c\x05\xff\x05\x7e\x3c\x00\x25\xe3\xe1\xc3\x89\x15\xe5\xdf\x46\x49\x54\x08\xc9\xbc\x87\xb1\x08\xb2\x4a\xb2\x0d\x73\x59\x84\xdc\x90\x75\xbf\x2b\x18\x9a\x9f\x25\x40\x60\x23\xc9\x09\xe4\x1f\xcb\x42\xf8\x6a\x4e\xc4\xcb\xba\xbd\x6f\x00\xd8\x75\x13\x40\xf1\x52\xcb\x24\x42\xfe\x63\x30\x12\xe1\xc8\x4e\xc6\x5c\x84\x5d\xd4\xa9\xc1\xcf\x02\x9f\x81\x24\xf7\xf0\x13\xd4\x0e\xd9\xe0\xe9\x90\xc9\xe5\x2f\x45\xcb\x4c\xed\xc7\x00\x30\xe6\xa0\xd7\x1f\xa1\x61\x5a\x77\x31\x29\x10\x92\x74\xd1\x66\x2d\xf1\x7f\x0c\xe8\xc7\x2a\xba\xc5\xa9\x54\x11\xc2\x13\x0e\x1f\x05\x21\x76\xb7\xd6\x24\xfd\x1c\x00\x3c\x30\x8c\x38\xde\x14\x4d\x03\x6c\xcf\x4a\x24\x2d\x11\x8a\x28\x96\x0c\x6e\x9c\xa2\xad\x6a\x8f\x9e\x5f\xbe\x1a\xc0\x64\x98\xd2\xc2\x6f\x0a\x53\xfd\x53\xd1\x39\x83\x3e\x3b\x71\x96\x81\xf5\xd4\xab\xcd\x50\x3f\xe4\xb0\x6d\x85\x5f\x8c\x9f\x4e\x0e\x00\xaa\xa4\x27\x6e\xfd\x43\xdf\x1d\x71\xcb\xf2\xdd\xfa\x32\x8d\x1b\x0a\xe8\xd7\x8d\xdd\x33\x17\x61\xb4\x46\x6b\x23\x78\x2e\x56\x69\x99\x07\xc9\x5c\x2a\x9a\x96\x40\x15\x6d\x80\xa3\x62\x68\xe2\x12\x96\x59\x26\x92\x70\x87\xb2\x08\x54\x2a\x37\x51\x45\xa5\x13\xae\xf6\x33\xe4\x9b\x6a\xd5\x30\x4a\xf1\x89\xdb\x2a\x91\xde\x95\xfa\xbb\xd0\x0d\xdc\xc1\x18\xd7\x36\xa8\x69\xf1\x01\x2b\x3c\x20\xed\xe1\x00\x92\xd5\x22\xf0\x1f\xe5\x65\x2e\xb9\xba\xd2\xe3\x01\x2b\xdd\x00\x52\x8f\x2c\x28\xcd\xa1\xb8\x3d\xc6\x29\xb2\xb1\x81\x14\x09\xf7\x81\xfd\xa5\xb6\xed\x9c\x8d\x2a\x20\x8c\xd6\x8c\x24\xaa\xef\xfe\x93\x46\xa8\x23\xba\xf5\x77\x77\xa9\xd9\x04\x8f\x42\xcd\xfa\xa1\xc9\x28\xf0\x5b\x00\x2f\x1f\x74\x60\x20\x02\x58\x2e\x78\x1e\x77\x60\x40\x62\x7a\x82\xcf\x5e\x07\x46\x25\xa6\x0f\xf1\xb9\x03\xc4\x86\x98\x3e\x9a\xb1\x9c\xbb\x62\xfa\x78\xc6\x60\xbf\x4e\x9f\xcc\xd8\x0a\x7e\x9e\xce\xd8\x12\x7e\xbe\x9a\xb1\x0d\x1c\x85\x2b\x0e\x99\xe7\xf8\x67\xcd\x8f\x06\x6c\xc7\x8f\xfa\x23\xc5\x65\x22\x33\xb4\xe2\xee\xca\x18\x37\x1a\x75\x5a\x31\x34\xd0\x47\x0a\x16\xa6\xbe\xc3\xf1\x21\xc5\x63\x18\xf3\x8c\xc3\x77\xe8\x1c\x7c\xb4\xd9\x52\xb1\xa3\x49\xc7\x5f\x40\xa5\xd0\x66\x67\xd9\x19\x5d\x02\x45\xf1\x56\x32\x96\x5f\x76\x7c\xe8\x00\x30\x9f\xd0\xfa\x97\x1d\x4c\x5f\x34\xd2\x37\x7b\xe9\x59\x23\x1d\xd8\x52\xfa\x4d\xd5\xef\x56\xfd\xfe\xd1\xf1\x81\x9d\x84\x5e\x85\xd0\xa9\x2b\xec\x92\xbb\x6c\x71\xa2\xb2\x82\xb0\xe3\xc3\x70\x07\xf2\x65\xde\xf1\xd7\xd8\xcd\x15\x6c\x0c\xa3\x91\x1c\x3b\xe1\x0d\x64\xeb\xb7\x9d\x2f\xea\x7a\x91\x0d\x86\xae\x49\x26\x18\x12\x8f\xf8\xf2\xe6\x06\xed\x1f\x68\xa0\x1a\x45\xe0\x1c\xc2\x2b\xe7\xcb\xc9\xca\xdc\x59\xb5\xbc\x60\xc0\x56\x36\xc0\xa5\x8e\xc0\x4c\x30\xb3\x0b\xfc\xb5\x69\xea\x0d\x79\x43\x9d\xbf\x8f\xf9\x61\x19\x96\x3c\x0d\x09\xa8\x2f\x81\x04\xfc\xb5\x20\xb6\xeb\x0c\xd1\xd5\xe2\xee\xed\x34\x47\x1a\x7b\x7d\x7c\x9c\x7c\x39\x50\x06\x5c\x9d\x8e\xb2\xd5\xea\x8f\x81\x0d\xef\x23\x0a\x38\x3e\xee\x8f\x07\xbd\x64\x02\x20\xc7\x4b\x18\x6c\x2b\xdb\x87\x3f\x88\xf6\x27\x9d\x8e\x1f\x48\x8d\xdd\x46\x56\x19\x22\xbd\x87\x3a\xa9\xa0\x78\x9d\x89\x45\x84\x0c\xec\xca\x1e\x25\x48\xd4\x23\x90\xc0\x8d\x2b\xf0\x85\xce\xbd\x3b\x97\x34\x77\xe2\xf0\x0d\xe4\x59\xca\xcc\x58\xcf\x96\x5d\xb2\x0b\x3c\xad\xda\x20\x4c\xa9\xd8\x65\x63\x17\xb2\xb1\x6b\xbe\x9b\xb4\xb2\x08\xe8\x9c\x37\x18\xf5\xc7\xd7\x13\x6b\x0b\x10\xf1\x12\x8d\xfa\x7d\x7c\x34\x36\x6d\x9f\x5d\xdb\x90\x62\x7e\xba\xb6\x15\xf9\xdf\xce\x79\x81\x39\x0b\xd7\xfc\x78\x41\x46\x19\x38\xb1\xb0\x28\x5b\x1e\x59\x5b\x06\xd0\x5b\x29\xf9\xcf\xf9\x95\x3a\xe3\xee\x56\x3f\x5c\xea\x07\xeb\x0c\x58\xe9\x52\x3b\x71\xb0\xb7\x3c\x1f\x9f\x93\x98\xeb\x59\x96\x05\x3b\xeb\x9c\xe7\xde\x39\x54\x2e\x21\x41\x06\xd3\xdc\xd1\x4b\x77\xa6\x9a\x7a\xeb\x6e\xd9\x5b\x8d\x93\x73\x4f\xd7\xec\x53\x07\x00\x00\xf1\x2b\x96\xf0\xad\x7b\xc9\xac\xce\x29\x1d\xc4\x49\xe9\x26\xee\x5b\x1f\x00\x03\xbd\xbd\x75\xe1\xdd\xef\xfc\xad\xde\x1a\x43\x3d\x1f\x8f\xf9\xc0\x76\xa9\x80\x91\x70\x6e\xfb\x25\xf6\x3c\xf1\xdf\xa2\xa5\x9d\x2b\x4c\x3d\xf1\xaf\x0d\x49\x5b\x43\x64\xf6\x4f\x51\x3b\x0a\xe0\x18\x11\x8f\xee\xb9\xbc\x8c\x07\x13\xc2\xaf\xbf\xfe\xf2\xfc\xb0\xf5\x58\x2d\x28\x6c\xea\xee\xbe\x3d\xa4\xed\xa9\xd0\x15\x5a\x14\x00\x80\x8c\x80\xba\x1c\xd4\xce\x03\x5e\x31\x2e\x3c\x01\x24\x4b\x66\x6a\x6f\x0c\x79\xa6\x85\x25\xb1\xaf\x61\x68\x09\x0f\x61\xdb\xc0\x36\x91\x6a\x24\xb5\xe2\x55\xf6\x84\xab\xcc\x2e\x6e\xeb\x86\x65\x50\x4a\x56\x79\xda\xfc\x87\x93\xe6\x25\x40\xd7\x0e\xd4\x65\x8f\x07\x44\xb0\x8e\xb2\x71\x3a\xb2\x85\x95\xda\x5f\x46\x37\x37\x81\xc2\x2a\x7a\xaa\xdc\x54\xc9\x93\x60\x04\xb4\x35\xeb\x22\xf7\x65\xd5\x8c\x45\xc3\x9f\x47\xce\x14\xb2\x5d\x61\xc8\xff\x29\xb4\xb6\x1e\xca\xc3\x8b\x9e\x1e\x5c\x27\x96\x5a\x99\x12\xa6\x2a\x56\x0c\x0a\x60\x1b\xb7\xb7\x49\x77\x11\xa7\xc0\x26\x26\x2c\x91\x02\x09\x8e\x72\x59\x24\x27\x78\x09\x0f\xe9\x62\x01\x34\x16\x8f\x30\x95\xf8\xc6\x74\x24\x01\x42\xd2\x2d\x81\xfe\xfa\xde\x34\x7b\x09\x55\x55\x21\x50\xb9\xb2\xaa\xef\x91\x10\x85\x37\xaa\xee\x7b\x54\x1e\x20\x7f\x20\xab\xfc\x1e\xb5\x06\x98\x93\xaa\x0d\xcc\x59\xfe\xfe\x2e\xf1\xc5\xa7\x0c\xb6\x60\x68\x59\x21\x6c\xf4\xde\x69\x0f\xd6\xb0\x87\x2b\x5a\xa6\x86\xcd\x37\xd3\x20\x4d\x89\x6f\x81\xb0\x08\x10\x45\x20\x49\xe1\xba\x01\xba\x09\x9c\x3c\xa9\xe4\x3b\xcf\xd3\xb9\x78\x56\x58\x81\x4d\x9e\x14\x9a\x90\x20\x41\x66\x88\xa6\x42\x0a\x4f\x00\xab\x94\x87\x53\x51\x0b\x85\xa0\x26\x1b\x4d\xc0\xac\xd6\x37\xc0\xbf\x11\x7f\x35\x15\x2a\x2d\x42\xfb\x19\xa2\xcd\xcb\x09\xa1\x10\x2e\x26\x40\x21\xf8\x80\xf5\xfc\xd2\x46\x6e\x83\x9a\x14\x68\xac\x84\x34\x4a\x65\x4a\x76\xa8\x2b\xa9\x84\x44\x00\x42\x6f\xb5\x7d\x47\xc3\x96\xf8\x41\xd1\x25\x71\x96\xe1\x58\xa2\x15\x45\x1f\x76\xfe\xe0\x2b\xc0\xd5\x6b\x1f\xf0\xb5\x3f\x60\xdf\xc3\xef\x19\xfc\x3b\x87\x7f\x2f\xe1\xdf\x5f\xc4\x37\xdc\x02\xf1\x26\xd0\xbc\x85\xa1\x01\x0a\xb9\xd6\x1c\xd5\x5e\x6e\x06\xab\x36\x02\xec\x0f\x9c\x1d\x99\x13\x75\xbf\xe7\xf0\xef\xcb\xc1\xd0\x1d\x0c\x9d\xac\xbb\x91\x80\x37\xe2\x72\xe2\xb2\xee\x5f\xc0\xc0\x85\xc0\x58\xfc\x53\xc0\x62\xc0\xb2\x5b\xd1\xe4\x9f\xc2\x0f\xc3\x4a\xda\xf6\x0f\x55\x35\x49\x91\x49\xfc\x16\x0a\xfd\x09\xec\x02\x54\xbb\x63\x7d\x96\x75\xff\x01\xb0\x7b\xad\xdb\xea\xfc\x4e\x4f\x80\x85\x7f\xa5\x07\x7b\x62\x1d\x2a\x35\xc0\xa9\xda\xff\xac\x4a\x4f\xe0\xf5\xda\x7d\x6c\x7f\xf9\xc4\x7d\x02\xfd\xfd\xdd\x83\x3a\x00\x4f\x7f\x03\x10\xdf\x76\x1f\xc1\x67\x1f\xd3\x31\xe9\xd7\x46\x12\x96\x00\x4a\x60\xbf\xe6\xac\xbb\x86\x7f\x73\xd5\xe8\xf7\x69\x99\xe5\x38\x2b\x2e\xfc\xf9\x0b\x05\xf5\x37\x7d\x34\x3a\x39\x73\xe1\xf5\x4b\xa4\x97\xb2\xee\x39\xfc\x7b\x09\x84\x2b\x8c\xf9\xc2\x4f\x6f\xd1\xb6\x5a\xe9\x23\x0e\x70\x91\x49\xc3\x65\x44\x18\xd2\xba\xda\xb4\x92\xa5\x4a\x47\xa1\x17\x0b\xe9\x4b\xbd\x39\xc2\x71\x30\x22\xd9\x40\x36\x06\xde\x58\xd6\x0a\x48\x99\x4c\xc6\x8b\xc6\x21\x70\x5d\x9b\xd1\xd9\x90\xb2\x84\xb4\x76\xd8\xa2\xa4\x88\x3f\x9f\xa6\xc8\xd1\xe7\xe1\xa4\x91\xe2\xa7\x33\x76\x04\x30\xd3\x42\x18\x9f\x50\xef\xec\xd3\x7e\xd5\x94\x44\xe5\x72\x37\x09\xb3\xc1\x0c\xca\xd6\xb9\x34\x2c\x68\xb8\xa1\x4a\x50\x79\x61\x9a\xa2\x2b\x08\x72\x21\x49\x6f\xed\x39\x26\x6a\x37\x3c\x58\xe2\xa4\x7b\xcd\xaf\x89\xfc\x42\x76\xa2\x45\x5e\x32\xe1\xd2\x57\xb5\xaf\x81\x42\x69\x98\x0f\xc8\x26\xb7\x07\x9a\xdc\x7e\xac\xc9\xcb\xff\xa4\xc9\x48\x37\xf9\xe2\x40\x93\x2f\xee\x6f\x72\xcd\x9f\xfd\x27\x4d\xa6\xba\xc9\xf3\x03\x4d\x9e\x7f\xac\xc9\xb7\xff\x49\x93\x12\xed\xd5\x52\x60\xdc\xc8\xaf\xba\x61\xad\x89\xb3\x29\xb9\xe5\xc7\xba\x57\x60\x7b\x77\x81\xf8\x60\x81\x3f\xee\x2e\x90\x37\x95\xe9\x67\xd2\xf1\x4e\x0f\x1b\x06\xc3\x87\x76\x9b\x33\x69\x18\xc7\x67\x68\x09\x85\x4e\xb4\x9c\x2c\xfe\xb1\x9a\x05\x32\xc9\x80\xb3\x50\xba\x01\xcc\x8a\x7c\x01\x66\x00\xd8\x65\xfc\xb2\x81\x87\x8d\xc8\xa2\x14\xb8\xe6\x2b\x4a\xdd\xe5\xc0\xa5\x00\x9c\x5f\xa5\x19\x02\x9a\x1c\xf8\x3c\x98\xe3\x34\x29\x56\x39\x70\x7b\x2a\xe1\x8c\xde\x47\x05\xe1\x6e\x93\x6f\x30\xe1\x42\x1b\xc9\x16\x8a\x1c\xaa\xb1\x03\x52\x14\x48\x96\xed\x23\x58\x65\xbb\x6a\x10\x05\xa2\x8d\x4b\x0e\xd4\x9f\xc9\x3c\x46\xa9\x02\x7d\x22\x0f\x20\x70\x26\x6a\x10\x97\x55\x8f\x40\xcc\x01\xec\x5b\x97\x71\x11\x71\x1a\x9b\x7a\x0e\x84\x62\x97\x80\x7b\x41\xe7\x19\x9b\x6d\xf9\x9f\x85\x75\x85\xc4\xff\x5f\xf4\x7b\x81\xef\x00\x72\xaf\xf1\x1d\x7e\xcf\xf1\x7d\x8d\x34\xfc\x5f\xf4\xfb\x02\xdf\x77\x36\x7b\x86\xef\x3b\x7b\xb4\x39\x20\x8a\x45\x51\xc4\x19\xb9\x3a\xb6\x34\xa1\x68\x8b\x2b\xb1\xd8\x2b\xfe\x21\x38\x24\x2c\x99\x4f\x93\x0a\x31\xcc\x6e\xd9\xb3\x43\x79\xae\x9a\x79\x2e\x0f\xe5\xd9\xc9\x3c\xb4\xbc\x94\xeb\xeb\x43\xb9\xd6\xed\x5c\xa1\x5f\x58\x0b\x1b\x10\xf9\x41\x11\xfc\x0f\x85\xa5\x5a\x2e\x68\x30\x6c\x68\xc3\xfc\x7f\x46\xde\xef\xef\xcf\x2b\x31\x9c\xce\xfc\xc3\x27\x65\x06\xf2\xe0\xe6\x66\x30\x54\x65\xfe\xb9\xb3\xcc\xc0\x0d\x42\x3c\x14\x3f\x2d\x08\xbd\xa2\xfa\x92\x9d\x40\x89\x97\xf7\xb7\x72\x16\xc5\x71\x94\x8b\x30\x4d\xe6\xb2\x67\x58\x66\xfd\x91\x32\x72\x3a\xdd\x81\xea\xd4\xd9\xc7\x9a\x48\xca\x42\xd4\xe3\xde\x1c\x5a\xa9\xcd\xd4\x6d\x0c\x1b\x38\xb8\x21\x2e\xd8\xf9\xfd\x75\x9f\x1b\x3d\xc7\xba\x7f\xbd\x33\x3b\xcc\x4e\x0e\x04\x7a\x73\x82\xb0\xc8\xf5\x41\x99\x5e\xb5\x01\x6f\xd9\xef\xf7\xd5\x09\xf0\xe6\x40\x9d\x5b\xd8\x66\xc0\x17\xff\xe1\xa3\x10\x83\xed\xee\x1f\x43\x45\x12\xd9\x44\xe4\xc8\x1a\xfe\xfc\xf4\x32\xe2\x21\x94\x79\x08\x65\xfe\xf2\x23\xc1\x50\xfa\xb4\x47\x0a\xc1\x47\x80\x24\xcf\xf1\x4c\x66\x70\xe6\x4a\x38\x53\x11\x9c\x98\x14\xce\x43\x00\x87\xe1\x67\x80\xe5\xf8\xe7\x7b\x1f\x20\xee\x0f\xf8\xe7\x1f\x3f\x11\xb0\x75\x4a\x01\x7b\xe1\xc7\x02\x56\x58\x00\x04\xf6\x73\x58\x8e\x4c\xc0\x24\xff\x51\xc0\xb4\xfd\x56\xc0\xd4\x7c\x51\xc0\x60\x43\x18\x69\x0c\xc3\xfc\xbd\x80\x7e\x7f\x5d\x40\x47\xfe\x55\x50\x47\x52\x71\x7b\xc0\x3d\xf9\x87\x96\x2d\x16\x9a\x26\x76\x3c\x20\xed\x3b\x40\x45\x5b\x80\x1a\x12\x9f\xac\x56\x18\xba\x12\x37\xe9\xf4\x0c\xd5\xff\x91\x21\x6a\x10\x5e\x54\x09\x1a\x0a\xe0\xf9\x81\x37\x30\x1c\x6d\xda\xe6\x33\x95\x1b\x86\x35\xf1\x3b\x6e\x42\x20\xb2\x76\xc2\x50\xd5\x74\x6e\x3a\xd0\x3a\x3a\x50\x46\xa6\x03\xe5\x5f\xc5\xbe\x57\x35\x8a\x73\xc9\xb7\x31\x69\xbb\x53\x4b\xe8\x08\xdc\x4c\x0b\x40\xd6\xde\x39\xc6\x84\xfc\x56\xcb\x00\xc2\x03\x64\xc5\x22\x6c\xd1\x15\x80\x60\x07\x7b\x14\x14\x11\x10\xf7\xd1\x11\x7f\x7c\x66\x2b\xad\x16\x7e\xfd\x78\x0b\x5f\xfc\x77\x2d\xfc\xfe\xf1\x16\xbe\xfe\xfc\x99\x7a\xd8\x6a\x65\xf7\xf1\x56\x7e\xff\xfc\x56\x86\x7b\xad\x7c\x07\x6c\x6d\x46\x16\x45\xf7\xb4\xf4\xaf\x96\x29\x5a\xef\xef\xa9\xeb\xcd\xfe\x3d\xff\xf0\xf0\xf6\x0b\xa5\x08\xc7\xe0\x0f\x75\x3b\x8f\x6c\x1b\xab\xff\x8b\x7b\x05\xbd\x35\x6a\xfb\xae\x29\xc4\xb2\x92\xf1\xe3\xa7\x13\xe4\x5e\xfd\xa1\x38\x31\xb6\xf2\x8f\xff\xfd\xf8\xd6\xa4\x6d\x80\xbd\x7f\xcf\xe0\x7e\xfe\xef\x9b\x99\x7f\x7c\xb1\x12\xf1\xd9\xad\x9c\xb4\x5a\xf9\xe7\xe3\xad\x14\x9f\xdf\x4a\x7b\x2c\xdf\x7f\xbc\x15\xf1\xdf\xb7\x72\xf6\xf1\x56\xb2\xff\xbe\x95\xf3\x8f\xb7\x52\xfe\xf7\xeb\xf2\xf2\xe3\xad\x44\xc2\x54\xb2\x2d\xa5\x72\xf4\x7d\x9a\x88\x9f\x48\xe6\x86\x10\x97\x17\xe3\xbe\xc4\x2f\x6e\x07\x40\xf5\x32\x00\x44\xd1\x7b\xdc\xbf\x41\xcb\x30\x7a\xf9\xf2\x71\x65\xf0\x2b\xdc\x1f\xd0\x32\x0c\xb5\x3d\x43\x1b\x9f\x4b\xf5\x6c\x70\x80\xd5\xb8\x56\x87\xc6\xb5\xfa\x18\xb0\x6e\x0c\xa6\xc9\xe8\x89\x16\x86\xd1\x22\x89\xca\xdd\xbe\x90\x6e\xf2\xda\x29\xce\x52\x2f\xfb\xee\x6c\xfb\xee\xa5\x90\x73\x74\x84\xc6\x94\x18\xd8\xc3\xc6\x0f\x50\x61\xa5\xbe\xc3\x2e\x21\x7b\x63\x30\x91\xa2\xe1\x3b\x11\x8b\x26\xce\x16\xdd\x9c\x27\x6e\x81\xc6\xd3\x5e\x42\x86\xd3\xe5\x08\x38\x15\x9e\x00\x3e\xb6\x0a\xcf\xc4\xc2\xb9\x0a\xa1\x95\x1c\x1f\xcf\xc3\xee\x2a\xc8\x7f\xba\x4e\x8c\x38\x4a\x68\x55\x61\x63\xd2\x54\x3e\xcf\x5a\xa1\x2a\x16\xa2\x65\x76\x28\xa3\xcb\x54\xb6\x65\x82\xb4\xd9\x45\x37\x8e\x12\x71\x8e\xbe\x6c\x96\xad\x23\xce\xe0\x28\xcb\x19\x30\x4a\x1b\xf2\xc9\xa2\xbd\x84\x53\xc0\xd0\xc8\xd4\x1e\xc9\x32\x2f\x92\xb9\x19\x7b\x65\x25\x4c\x75\x71\x13\xb9\xcb\x86\x36\x69\xbc\x5b\xa6\x49\xdd\x16\x61\x7c\xec\x26\x7a\xe9\x16\x28\xbb\xae\x32\xb5\x2a\x5f\x8a\x56\x20\x34\x9a\x17\xb4\xc5\xc7\x28\x2f\xce\x37\x41\x6f\xe8\xbe\x0b\x7a\x0f\x47\x4a\xfa\xef\x65\xa8\x11\x1d\x73\x74\x1f\x82\xae\x04\x3c\x75\xd0\xe7\xb6\x32\xe3\x2f\x6c\x16\xd7\xfe\x2f\xf0\x96\xf3\xc8\x89\xd9\x82\x97\x4e\xe8\xe6\x4e\x95\x2f\xb0\x81\xa3\xce\x9d\xd4\xa9\xf2\x06\xf6\x68\x17\x52\x80\x03\xc3\x46\x7c\xc5\x16\x36\xd9\x5b\xa2\xcd\x24\xcc\x71\x7c\xab\x7c\x58\x19\x59\x7b\x8e\xce\x42\x39\x93\x35\x6b\x9b\xb2\x00\x58\x41\xfd\x19\x78\x64\x0e\xf8\x2a\xb5\x61\x24\x50\x45\xdd\x3c\xb7\x04\x0f\xec\x7a\x7c\xb6\x36\x1d\x95\x5d\x01\x16\x22\xd4\x6b\x61\xca\xf1\xa4\x04\xdc\xd8\x94\x1b\xf3\xb4\x13\x64\xe0\x09\xad\x67\xdd\x56\x45\x60\x4d\x33\xc7\x9c\xa7\xcc\x31\xe7\xa9\x7a\x16\xb6\xe1\xed\x75\xd5\x0c\xf6\x86\x2d\x38\xe8\x93\xe5\x62\x23\x0e\x7a\x61\xc1\xd3\x10\x9f\x86\x46\xa9\x79\xa3\xd4\x54\xe5\x1d\xa2\x97\xd6\x50\x96\x62\xea\x49\x79\x6e\x51\x2a\x53\x4f\xca\xb3\x8b\x52\x8d\x4a\xd7\xfa\xd0\x60\xf3\x1c\x13\x19\x66\xc3\x47\x55\x1f\x3e\x9a\xdd\xd8\xb5\xbb\x81\xd5\x33\x59\xb7\xea\x80\x91\xfb\xcc\x98\xc9\xda\x25\x80\x0a\x25\xd5\x88\x93\x6a\xc4\x09\x1d\x18\x4c\xe9\x71\x59\xa9\xfc\x1d\xe2\xaf\x61\x5d\x2e\x6a\x02\x64\x6a\x6c\xac\x44\x76\x1a\x89\x21\x74\x3d\xc3\xca\x8c\xbe\x5c\x36\xa7\x1d\x60\x32\x66\xf5\x70\xd0\xf6\xe9\xf3\xe0\xf8\x98\xbe\x0c\xf0\xcb\x80\xbe\x18\x36\xc9\xc2\x38\x43\x23\xc3\xc4\x83\x56\x9d\x9c\x5c\x46\xd7\x00\x84\xeb\xad\x80\x0a\x2e\xc7\xf0\x7a\x61\xc6\xb6\x30\xad\x81\x2b\xa8\xe3\xba\xdb\x90\x5d\x84\x2e\xb7\x12\xef\x22\xb4\x7b\xf0\x76\x8d\x6f\x85\x77\x2d\xdf\xce\xf1\x4d\x78\xe7\xf4\x66\x98\xdd\xee\x9d\xf5\xd2\xec\x67\x54\xf7\xb3\xa4\x7e\xc2\x49\x8f\x1a\xdd\x0c\xf4\xbb\xea\x68\x58\x1f\x99\xb2\x3a\xf7\x72\x7e\xeb\x15\xb4\x62\x2e\x9c\xd0\xcb\x1c\x38\x6e\xb1\x8b\xa6\x0b\x4e\xea\x15\x4e\xa8\xde\x0a\x27\xf0\x84\x03\x07\x34\x86\x95\x70\x52\x57\x38\x81\x9b\x41\xea\xe8\x12\x06\x11\xb3\xb7\xf8\xd7\xb1\x0a\x97\x4e\xb1\xcd\x5e\xc8\x77\xe1\xd2\xf9\xb5\xd9\x33\xf9\x0e\x5c\x58\xc6\xd1\x80\xe4\x5a\x28\x13\xdb\x1a\x50\x8c\xde\xed\x01\x09\x8a\x1e\x50\x56\x23\x4f\xeb\x91\x47\x72\x85\xa0\xb1\x7a\xe4\x25\xa2\x6c\x03\x52\x95\xb6\x3e\xde\xf8\x16\xd9\xec\x5d\x0d\x6e\xea\xf6\x0d\x1b\x65\x9c\xf7\x2a\xcf\x85\xa1\xf5\x7c\x71\x27\xf4\x3d\xbc\x73\x10\xf6\xb6\x56\x44\xdc\xb5\x22\x04\x89\x01\xea\x7a\x91\x13\x10\x14\x4e\x61\x0d\x42\x80\xc4\xb0\x12\x5e\xe9\xa4\x6c\x65\x1c\xb3\x18\x16\x23\x77\x72\x77\xe1\x2c\xd0\xdc\x01\x96\xc8\x2d\x61\x21\x22\x28\xb0\x41\xc3\x0a\x2f\x41\xb9\x41\x6f\xc5\xae\x78\x03\x3a\x2f\xed\xd1\x2b\x58\x81\x0d\x80\xf8\xe7\xf4\x9b\xb3\xf7\xf4\xbb\x60\xb8\x7e\x57\xb4\x7e\x57\x6a\x7d\xf4\xfa\xc1\x7b\xe9\x5a\x65\xb5\x7e\xf0\x0e\x28\x3a\xd2\xeb\x27\x83\x3b\xb4\x00\xfd\xfe\x1a\x12\xa0\x87\x75\x62\xa8\xb8\x34\x56\x20\xad\xa6\xcf\x40\x4b\x81\x5c\x56\xd8\x23\xf5\xf4\xa5\x68\x0f\x1f\xd6\xd3\x97\xb6\x70\x80\xd1\x17\xac\xff\x4e\x6c\x60\x26\xbe\x15\xcc\x5c\x68\xc3\x1a\x5c\xec\xc5\x83\x31\x0d\xc1\x51\x3b\x8e\xef\xac\x20\x77\x5a\x86\xf6\x47\x75\xd8\x19\xe9\x74\x4c\xf2\x58\xfd\x64\x09\xf5\xd8\x30\x1c\x35\xea\xd3\x59\x65\xb5\x02\x63\x97\xe8\x0f\x75\x03\x0d\x15\xfc\xab\x3a\xfc\x8a\x19\x94\xf0\x79\xa5\xa6\xaa\x22\xdb\x49\x03\x2f\xa9\x71\x4f\x0e\x1b\xc6\x2e\xac\x23\xcb\xaa\x09\x46\x6f\x60\x9f\xf2\xbe\x6d\x84\xa0\x20\xca\x07\x7e\x0a\xaa\xe5\x52\x4e\x07\x1c\xca\x06\xd5\xa4\x29\xc6\x00\x88\xd9\x62\x1c\xa0\xce\xd7\x2e\x15\xed\x84\xda\xda\x69\x30\xb3\xab\xd1\x8c\x4c\x9b\xf4\xd2\xa0\xa4\x94\xb2\x5c\x5c\x3f\x78\x27\xc8\x28\x96\x2c\x44\xd1\x32\x36\x36\xbe\xe2\xb7\x90\x1d\x01\xad\x14\x76\x53\x80\x3c\xca\x14\x2d\xac\x14\xbb\x68\x58\xab\xf3\x67\x55\x2d\x03\xa3\x96\xac\xaa\xa5\x4f\x4a\xf6\xc3\xb5\xdc\x92\x65\x6a\x8e\xd6\xa4\x70\x46\xdf\x0b\x84\x20\xef\x05\x6d\x3f\xcd\x50\x7c\x30\x06\x8e\x96\x66\xd0\x44\xaa\x49\xbe\x58\xcd\x43\x0a\x83\xef\x0a\x1e\xf2\xa3\xb0\x9a\xa7\x9c\x2d\xe0\x58\x47\x30\x25\xa3\x51\x5d\xc9\x92\xaf\xe0\x14\x1f\xf5\x47\xcb\xee\xd5\x08\xa3\x77\x58\x4b\xbe\xec\x26\x18\xc4\x53\x6b\x82\x47\x39\x7c\x79\xcf\x9a\xb3\x3f\x4f\x71\x1d\xa1\x10\xa4\xa5\xf0\x17\x2d\xcb\xba\x82\x16\x77\x63\x9b\x3d\x8c\x79\xde\xee\x5d\xb5\x4a\x0b\x9e\xeb\x55\x5a\xd0\x2a\x91\x02\x31\x83\x6a\xb7\x50\x5b\x02\x7f\x07\xb0\xaf\x46\xd4\x23\x52\x2e\xca\xea\x3f\x60\x87\x36\xdd\xf7\xc6\x16\xc8\xab\xbd\x34\x0a\x80\x00\x1d\x79\xde\x3d\xcd\xdc\x36\x9a\xd9\xc0\x5f\xaf\x6a\x67\x73\x8b\x7f\x53\x26\xc7\x0c\x33\xb3\xb9\xbd\x5e\x45\xc0\x4f\x1c\xc1\x58\xed\x91\xb9\x75\xcc\x70\x79\x42\x6d\xec\x7a\x57\x9b\x61\x26\x61\xfb\x72\xe4\xdf\x70\x63\xc3\x0c\x64\xc8\x19\x95\xdd\x84\xe3\x2e\xcd\x60\x87\x76\x37\x18\x9a\x85\x8b\x91\xfe\xd8\x57\x1f\x8d\x26\xde\x19\x1a\x61\x32\xef\x41\x3b\x2b\x7a\x78\x0f\xb4\x8d\x0c\x89\x84\x21\x48\xf0\x41\xf0\x4c\x3e\x5c\xa1\x2d\xa1\x8c\xc3\xa4\x42\x16\x91\xba\xde\x30\xb8\x35\x6a\x6d\x73\x65\x84\x08\x0d\x55\xa2\xc1\x4f\x95\xf4\x82\xa1\x6f\xa5\x19\x27\x34\x88\x13\x8b\x76\xd8\x72\xce\x8b\x56\xa4\x3c\x83\x49\x29\x65\x48\x93\xb9\xca\x69\x40\x1c\x43\x25\x68\x7f\xd8\x29\x48\x19\xb0\xb9\xb9\xf1\x4c\x35\x60\x9d\x29\x55\x99\x5a\x0c\x4c\xae\xda\x95\xa7\x6b\x0a\x2f\x2a\x64\x46\xd5\x8b\xed\x3d\xbd\x58\x58\xa4\x1d\xae\xdb\x06\x04\x37\x35\x08\xc1\x15\xa4\xe7\xd6\x95\x0c\x46\xc1\xe8\x17\x6d\x10\xb7\x75\x4f\x46\xda\xd6\x78\xdb\x45\xe3\xe8\x84\xf8\xfb\xb3\xee\x65\xb9\x58\x88\xcc\x22\x5b\x52\x7d\x36\x60\xef\x40\x37\x53\xd4\x81\x6d\x64\x77\xaf\xb0\x3d\x82\x19\x19\x9e\xcb\xc1\x31\xa2\x7f\x8e\x1d\x95\xa6\x82\x06\xab\x07\xdb\x37\xe5\x52\xd5\x9f\x8d\xfb\x72\xe7\x5d\xde\xdc\x58\x51\x8b\xfb\x63\x97\x1c\xa1\x4f\xd4\xe2\x3e\x53\xe4\x08\xf5\xca\x59\xb8\x4d\x53\x79\x5a\xc8\xa8\x72\x14\x99\x7b\x5e\x1e\x9d\xf1\xe0\xf8\x78\x78\x5c\x54\x91\x44\x85\xec\xba\x11\x7d\x74\x15\x2d\x0a\x8b\xec\x23\x75\x8e\x45\x14\x17\x30\xea\x5f\x84\xf2\xcd\x5f\xb2\x0d\xbb\x62\x73\x4e\x66\x46\x6b\x5e\x6a\x14\x54\xf1\xbd\x36\xdb\xf1\x0f\xd4\x29\x3f\x65\x55\x8f\xfd\x90\xa9\xee\xf8\x31\x33\x87\x67\xea\x11\xf4\xbe\xc8\xd9\xae\x1e\x2b\x5f\xa8\x37\x44\xc6\x40\x9e\x20\xa6\xda\xe0\x8a\xb2\x9a\xfd\x3d\x54\x49\xda\xa8\x24\x34\x2a\x89\xa1\x12\x54\x5d\x8a\x0c\x58\xe5\xa5\x5a\x6e\xfe\xad\xb0\xd6\x6c\x03\xe0\xa4\x72\x2e\xb9\x67\x2d\x00\x83\x2e\xd9\x37\x88\x78\x04\x1c\x37\xdb\xc7\x00\x09\x9f\xba\x74\x4c\x28\x7f\x06\xfc\x33\x80\xe2\xcc\x58\x2a\x28\x01\x55\x45\x0d\xd6\x1e\x2b\x19\x20\x0d\xa7\xc0\x00\xcb\x37\x2b\x91\x09\x73\xd0\x7b\xed\x7e\x7a\x8b\xac\xd9\xd8\x2d\xf0\xc9\xfc\x8d\x20\xa5\x6e\x61\x9d\xc9\xc6\x35\x1e\xde\x19\x90\xed\x17\x71\x20\x2e\xf6\xd8\x90\x34\x61\x25\x95\x9b\xda\x54\x4b\x81\x3e\xd4\x5b\xc2\xe8\x7f\xa1\x0c\xaa\x20\x1f\x2a\xef\x68\xf7\x34\x2d\xd4\x54\x40\xe7\x29\xbc\x60\x16\xbd\x99\x2e\x99\x3c\x96\x66\x65\x2a\xc0\x5e\xa5\x03\xc1\x1d\xa3\x63\xf0\xde\xb2\x4c\xa0\x02\xa6\xd9\xb8\xee\x3c\x92\x63\xd4\x4c\xd1\x3c\x19\x45\x7d\x32\x4c\xfc\xf1\x4d\x83\xa7\xb4\x28\x8e\xd5\x16\x8f\x20\x06\xa8\x40\x5e\xf2\x4d\xe0\x3d\x0f\x7c\xf8\xab\x62\xac\x90\x9c\x5d\xe7\x28\x1a\x39\x8a\x26\x14\x7b\x2d\x8c\x60\x69\xe4\x61\xaa\xfd\x4c\xe1\xef\xbd\x53\x99\x34\x56\xbe\xe0\x83\xbd\xf9\x8c\x58\x2a\xab\x06\xe6\x6f\xdc\xc7\x00\x2e\xde\x3b\x74\xec\x05\x0e\x38\xf2\x00\x3f\xc0\x6f\x08\x5f\x90\x09\x46\x01\xa9\x02\xb5\x28\x76\xc9\xdc\xd4\xee\x0d\xa1\x0c\x86\x72\x79\x83\x51\x95\x54\x6a\x89\x14\x69\x62\x6c\xaa\x66\x2f\x74\xb6\x40\x66\x93\x2f\x11\x11\xc7\xe8\x56\x52\x1e\x71\x0e\x1c\x78\x38\xe6\xef\x30\x66\x13\xb4\x2f\xbc\x52\x72\xe5\xf0\x04\x1c\xcf\x73\x68\x8a\x7a\x17\xa8\xaf\x91\xc7\x03\xfa\x9a\xf1\x5f\x89\xce\x44\x23\xab\xff\xac\x3b\x32\x78\x85\x1e\x25\x87\x5e\x71\x62\x23\x82\x7a\x93\xed\xcd\xae\xac\x14\xd0\x27\xae\xc6\x2d\x23\x2c\x71\xc0\x77\x74\xe8\x15\x0d\xf3\x5f\x03\x6b\x57\x96\x61\x46\x64\x19\xaf\xd6\xdb\xc1\x60\x53\x7b\x0c\xf3\x5f\xb1\x66\x96\x65\xb0\x81\xc0\x5d\xd5\x8c\x10\xd0\xd8\x8e\x21\x6a\xf2\xaa\xe7\x0c\xf2\x95\xa6\x1c\xcf\x36\x19\x4b\xbb\x67\x95\x0e\xb0\x90\x68\x3e\x5f\xb8\x59\x23\x5a\xce\x3f\xed\x9e\xd6\xa1\xbd\x12\x1b\x28\x1e\xe7\x0d\x4c\x9d\x9a\x32\xdc\x3b\xc8\x3e\xab\xd7\xbe\xf9\xd2\x4c\x82\xb7\x7e\xe3\xcd\x6b\x94\x33\xdf\xbc\x56\xaa\xd7\x2c\x2b\xdb\x1c\x69\xc3\xb5\x86\x30\x07\x66\x4d\xf3\x34\xf8\xf1\x14\x3f\xaa\x3d\x3e\xc2\xae\x47\xbd\x61\x5d\x4f\x74\x67\xd7\x31\x45\xa1\x4d\x4d\x1c\x21\x86\x6b\x1d\xd3\x6f\x1b\x82\xdc\x8a\x03\xc2\xa0\x78\x7c\x6a\x2c\x0a\xf3\x0c\xd9\x21\x83\x5c\x11\x50\x96\x29\x50\xbc\x3b\xf2\x8e\x13\x2d\xce\xc8\x30\x15\x24\xfb\x40\x24\xbf\x3f\xc8\xa8\x78\x05\xd0\xc4\x40\xe6\xc6\x06\x05\x92\x57\x94\xfb\x82\xc7\xd8\x85\x15\x5f\xe0\xcf\x92\x23\xdd\xac\xa4\xa1\x80\x33\xab\xfe\x2c\x6d\xcd\xf4\x63\x87\xe0\x6d\xce\x07\xc8\x5d\xcc\x81\x7d\xc0\xa8\x65\x73\x3a\x12\x50\xd7\x5c\x12\x2d\x6b\x39\xb2\x1d\x8d\x4c\xd7\x77\x56\xd7\xb7\x43\x64\x51\xd5\xb7\x43\x9c\xb1\xf6\x56\xec\x82\x5f\x56\x52\xe5\x6b\x7e\xe1\x5c\xb2\x73\x7e\x3d\x86\xa5\x7b\xcb\x37\xce\x19\xf6\x7c\x5f\x3a\xfc\xd6\xb9\xa8\x37\xe9\x35\xf4\xd3\xd9\xba\x6f\x6b\x06\xff\x1a\x69\x93\xc8\xe5\xe7\x93\x4b\xf7\xc2\x79\x19\x00\xfc\x3f\xff\x7b\x35\xe6\xe2\xef\x35\xfc\x91\x73\xf4\x82\xcf\x85\xb5\x11\x68\x82\x43\xa2\x5c\x7b\x74\x26\xac\x17\x12\xcd\x3f\xc3\xb4\x92\xbd\xa0\x6f\xcf\xb4\x15\x91\x75\xfe\x37\xf5\xd4\x1b\xf8\x03\xdb\x29\x0a\xeb\x19\x49\x22\x81\x2a\x7b\x75\x73\x83\x01\xf9\x5e\x61\x38\x3b\x98\x82\x9b\x9b\x17\xb8\xfe\x64\x8d\x0c\x9d\xf8\xbb\x1a\x9f\x7d\x8b\xec\xf1\xdc\x75\x6d\xe9\xfd\xb2\xe2\x6b\x9c\x70\x98\xe6\x2d\x5b\xf0\x44\x87\x32\xb3\x00\xd8\x8f\xa3\x9b\x1b\xfc\x8b\x8e\x22\xbb\xd0\xfe\x7b\x70\x9c\x1a\x26\xda\xa2\x6d\x3f\x6d\xc8\x2c\x0d\x29\x91\x29\x75\x1e\x47\xb7\x4d\x3b\x33\x69\x5e\x1d\x01\xd3\x1a\xb3\xfc\x5e\x5c\x11\x23\xaf\x39\x80\xed\xb4\x8f\x24\x80\xeb\x94\x35\x2d\x91\xda\x82\x37\xa0\x95\x81\x20\xc0\xcf\xb0\x5d\xd2\xc9\x15\x3a\x67\xd0\xab\x7f\x35\x81\x07\xd7\xea\x8f\x17\xea\x9c\xd9\xf8\x95\xe2\x71\x1c\x09\x72\x6d\x0a\xf9\x95\x8d\xe2\x8a\x06\x55\x7e\x24\x7d\x81\x96\x3c\x03\x00\xbe\xb1\x99\x94\x18\xa0\x3f\x0e\x3c\x6c\xe0\x01\xa7\x79\x43\xa2\xe9\xe7\x01\xdb\x90\x60\x1a\x1e\xb0\x17\xf8\x95\xbe\xe0\x76\xa0\x8a\xec\x1c\x4e\xcd\x15\xa2\x2b\xb3\x0d\xac\x7b\x43\xbe\x06\xea\x0c\x2f\xe9\x5c\x50\x41\xbf\x6e\x79\x3f\xd5\x44\x1e\x08\xe8\x97\x15\xac\x01\xec\x03\x63\x4a\xff\xbe\x92\xb3\xb3\x1e\xcd\x8f\x61\x41\x8f\xac\xb5\x6c\x0a\xe5\x04\xe8\x54\x8e\xdd\x49\xdb\xdd\xd1\xed\xac\x15\xf3\xb1\xd6\xcc\x47\x9d\x30\x50\x09\x83\xd9\x5e\x37\x7c\xeb\x53\xb2\xdd\x81\xea\xda\x4d\x02\x21\x73\x74\x75\x73\x03\x43\xa1\x59\xdf\xd8\x78\x39\x8d\xcc\x5a\x4f\x2e\x0c\x7c\x03\xa0\xe8\x0a\xa0\xd5\xfc\x20\x36\x0c\xf5\xa2\x6a\x84\x28\xe9\xd3\xbb\xf0\x61\x7e\x63\xc5\x80\xe6\xed\xd3\xd3\x81\x89\x17\xb3\xa6\xd6\x8f\x0e\x2d\xc0\x4f\xe9\x47\x9c\xf2\xe9\x80\xf5\x11\x64\x06\x78\x76\x51\x62\x85\x5d\x12\x80\xbc\x03\x94\xd3\x04\xd8\xdb\x9c\x87\x5e\xec\xc4\xb4\xe3\x72\x7d\x1d\x07\x0a\xc8\x46\x12\x2a\x46\x4e\xd8\xcb\x01\x2c\x7a\x91\x13\xc3\xc3\x12\x6b\x42\x61\x23\x6c\xed\x1d\x3e\x2d\x10\x20\xee\xb0\xce\x95\x3d\x5a\xe3\xee\xbb\x92\xb0\x61\xce\x97\xc0\xe4\x5c\xe1\x97\x39\x32\x36\xf0\x34\xc7\xa7\x33\xbe\x76\xd6\xde\xce\xb1\x28\x69\x83\x01\xe4\xa8\x71\x38\x04\x67\x4a\x24\xb6\x35\x64\xb1\x44\x46\xef\xb0\xac\xe5\xad\xbd\xad\xdd\xdb\x51\x76\x68\xe9\x12\xf7\xdf\x25\xdf\xc2\x93\xcd\x8e\x84\xb6\xe2\xbf\xa4\xd6\x2f\x00\x6c\x12\xe4\x3d\x97\xca\x99\xb7\x12\xb5\xbc\x20\xfd\xcc\xe8\x7a\x7c\x0e\x07\xe4\x82\x5f\x43\xae\x73\xc8\x72\xa1\x41\xdc\xb9\x77\xcd\x5e\x21\x35\xf7\x4c\x51\x71\xec\x39\x7f\x45\x40\xe7\x19\x75\x12\xa0\xd9\xdb\xf1\x0b\x2a\xfb\x16\xea\x7c\x01\x15\x5e\x00\x4b\x33\x79\x35\x79\xeb\xbe\x18\xf7\xff\xbe\x84\xda\x4f\x11\xa9\x5e\x22\x52\xbd\x26\x3a\xf0\xad\xff\xc2\xf6\xdf\x9e\x72\x4c\x83\x3d\x83\x39\xf8\x0b\xff\x19\x40\xf3\xbf\xad\x6b\xfc\xdc\xa7\xcf\x80\x6f\xf9\xb9\x9a\x80\xf7\xd5\x88\x5d\x39\x62\x6d\x2f\x29\xac\xf7\x38\xea\xe9\x25\x83\x61\xbf\xb7\x67\xe6\x5e\x28\x4d\x79\x45\x3a\x49\xfc\x77\x40\x3c\x23\xd5\xab\x4a\x7b\xd9\xb8\x98\x94\x37\x7c\xe0\x17\x63\xf2\x91\xbf\xe1\x43\xc0\xae\xd9\x58\xe0\xd7\x87\xbe\xd0\x5f\x9f\xc2\x16\xba\x6d\xe9\x40\x12\xd2\x7f\x8c\xd1\x8d\x15\xa9\x49\x24\x15\x90\xec\xc5\xfd\xf7\xd8\xf9\xa6\x0e\x7b\xf2\x52\x4a\xfc\x43\x38\xc1\x53\xa0\x4b\x92\x99\x3f\x45\x8a\x23\x81\x3f\x26\xf2\xff\xe9\x3e\x29\x4c\x7d\x63\x48\xd9\x85\xad\x0a\x7f\x2f\xa1\xad\xb4\xbb\x25\xc1\xdf\x0e\xb6\x6c\xd0\x45\xdc\x10\xc0\xf3\x8a\xa3\x83\xe7\x00\x76\x63\xee\x85\xb0\x13\x17\x1e\x6d\x65\x20\x60\xe0\x75\x83\xd0\x05\x3a\x6d\xcb\x08\xa7\x3d\x38\x92\xe4\x40\x08\x2f\xab\x71\xa4\x85\x7d\x4b\x44\x28\x00\xd1\x22\xbb\x32\xe7\xdf\xa0\x4c\x81\x1c\xa8\x96\x3a\x57\x34\x96\x5e\xa9\x11\xe1\xab\x88\x0b\x5d\x7f\x1f\x6a\xda\xaf\xff\x70\xc9\x76\xfd\x87\x7b\x41\xf5\x17\x5e\xcc\xae\xda\xfd\xbf\x82\xfa\xaf\x3e\xa1\xff\x57\x1f\xef\x7f\xa6\xeb\x37\xfb\x5f\xd7\x7f\x7f\xff\xaf\xee\xed\xbf\x5a\xd0\x15\x39\x38\xc3\x12\xf2\x0f\x5b\x3f\x74\x57\xce\x86\xed\xfc\x18\x7e\xaf\x6e\x6d\x36\x18\x2f\x29\xf1\x52\x26\x2e\x55\xe2\x92\x12\xcb\x5b\xfa\x5f\x6d\x90\x28\x0e\x46\x72\x21\x11\x7c\x4d\xf5\x93\xc1\x53\x42\x47\xae\x04\x3e\xab\xef\x9f\xf8\xfa\xab\xa8\xbe\x0e\xfd\x81\xfc\x8a\xea\xca\xea\xeb\xc0\x07\x8c\x0c\xbf\x27\xfe\xb0\xe5\xbd\x50\x35\x90\x5a\x28\x9d\x45\x16\xb4\xe5\x6c\x60\x4a\xf9\x06\xc8\x55\xe1\x39\xac\xfd\x9d\xc4\x11\x5a\xd3\x0b\x2f\xf3\xfb\xe4\x23\x55\x69\x94\xfd\x01\xbd\x57\xd4\xb7\x3f\x54\xef\x4a\x91\xea\x57\xfa\xe8\xbd\x88\xbd\x81\x31\x0d\x61\xd3\x26\xa5\x0f\x98\x64\xae\xed\x52\x2a\x7a\xba\x3f\x12\xe3\x12\xad\x2e\x2a\x72\x17\x4f\x17\x1a\x2c\xcc\xd1\x00\xa3\x8e\x12\xae\xb0\x02\x50\xce\x29\x8a\xc9\xec\x08\x5e\xd3\x19\x8b\x09\x68\x65\x93\x08\x7e\x11\x4a\xfc\x6c\xc5\x0c\x23\xd9\xe0\x0a\xbb\x6e\xe1\x47\x32\xbd\x4e\x38\x85\x04\xcf\xc3\xc8\x33\x91\x9e\x88\x3e\x86\x60\x30\x85\x99\x11\x06\xb0\x62\xb1\x9c\x3f\x44\xfa\x0b\x19\x88\x4c\x32\x4b\x11\x51\x02\x25\xc5\xa8\xb0\xa1\xa8\xb5\x80\x17\x8a\x78\x75\x73\x93\x62\x59\x68\xe3\xef\x10\xf7\xe1\x3c\x7d\x10\x6b\x36\x04\xa9\xf0\x9b\x9b\x13\xfc\x01\x00\x28\x58\x3e\x1e\x4c\x32\xbf\xb0\x47\x52\xa4\x0d\x35\x5a\xb9\x1b\xba\x0f\xed\x2f\x1f\x62\xa5\x0b\xb5\xa5\x75\x79\xc2\x88\x41\x93\x4f\xc9\xa5\x58\x58\x8d\xa2\x1c\xa3\x9f\xb2\x18\x53\x08\x0e\x8a\x9e\x9e\x8d\x79\x64\x8a\x50\x69\x4b\x48\x39\xec\xf1\x71\xa0\x2a\x6e\x9a\xcc\xa0\x1c\xf5\xb9\x92\xb5\x01\x76\x3c\x3e\x9e\x4b\xd1\xc9\x1a\x65\x38\x80\x8e\x8e\xfa\x80\x97\x80\xb8\xbc\xe4\x17\xbc\x71\x7b\xdd\x12\x45\x34\x48\xda\x59\x3b\x06\x88\x71\x7b\x7c\x7c\x7d\x7c\xfc\xac\x2b\xe5\x32\x48\x18\xca\x7a\x9e\x55\x02\x57\xa0\xc0\x74\x43\x0b\x76\x8d\xfd\x39\x20\x34\xde\x28\x4d\x6b\xed\xf6\xed\xfd\x12\xd6\x8e\xdf\xf0\x9c\xa0\xdb\xe7\xdd\xc9\x85\xad\x85\xcc\x72\xdc\xb8\x8a\x30\xaa\xb5\x29\x85\x66\xe7\x36\x30\x41\x80\xfd\x0b\x60\x78\x04\x0e\x72\x80\x7a\x38\x2b\x68\xd0\x5c\xe6\x7c\xd5\x4c\x2a\xe4\xbb\xb6\xcd\x24\x4a\xd1\x0e\x80\x81\x0f\x20\xe4\x12\xc0\xc7\x05\xfa\x22\xc0\x73\x02\xcf\xc5\xed\xed\xe8\x95\x85\x7e\x74\xd7\x14\xdb\xe5\x50\x23\x59\x17\xf1\x08\xfe\xdd\xd9\xe6\xd7\x4b\xfa\x7a\x09\x5f\x99\x40\x77\xd9\x9a\x4a\x7b\x8b\xd2\x44\xff\xfe\x6e\xcb\x4c\xb7\x97\x30\x58\x74\xfd\xbc\xe6\x82\x70\xe9\x15\x9b\xb3\x35\x83\x65\x63\xe4\x72\xce\xae\xd9\x39\x7b\x0b\xe4\x43\xc0\x9e\x49\x99\xe1\x2b\x6e\x20\x45\xb4\x05\x57\x5c\x85\x21\x08\x5e\x55\x84\xe4\xf2\x4e\x41\x70\xc0\x9f\x91\xd4\x1e\x38\x8d\x29\x92\x3d\x47\xfd\xbb\xa4\xbd\x01\x90\x2f\x57\xb5\x34\x57\x91\x6d\x05\x0f\x71\xc5\x32\x22\x61\xdf\x1e\x1f\xa3\x09\x99\xf6\x34\x1f\x59\x30\x1f\xa5\x4d\xc3\x6f\x09\x4d\xf7\xe7\x24\x6e\x08\x4e\x03\x9c\x24\x83\x2f\x80\xe3\xf3\x1c\xda\x04\x60\x01\x40\x42\xa6\x9a\xa2\x54\x24\x2a\xe7\x7c\x2d\x89\xe2\xca\x46\xfd\xb9\x79\x49\x83\x61\x20\x83\x40\x0f\x18\xeb\x13\xf4\xc4\xce\x24\x05\x9c\x49\x7d\x8d\x3e\xb5\xe8\xce\x13\xc4\x31\x6c\x9b\x4f\x0a\x8e\x94\x59\xd2\x7e\xc9\x81\x5a\x07\x4f\xfb\xca\x8c\x49\xbd\xd9\xfe\xb4\xe8\xbd\x0b\x1c\x4a\x50\x0f\xb3\x5b\x66\xdc\x76\xf2\xd7\xbe\x7a\xbb\x1d\xe2\x84\x68\xdb\xc8\x1b\x3a\xa5\x69\xf7\x64\xf7\x4a\x6d\x1d\x65\x5a\x32\x38\x1c\x28\xf7\xd4\x6b\x18\x3b\xcc\x94\x67\x93\x69\xef\x80\xd6\xf9\x6e\xa3\xba\x21\xf0\x1f\x03\x37\x73\x2c\x0c\x7b\x9a\x55\x01\xff\x64\xeb\x75\x6b\x0f\xf6\xf5\xe7\x46\x87\x53\x4f\x0b\x84\x1b\x36\x43\x30\xbf\xbd\x12\xed\x85\x60\x1c\xd0\xc7\x84\x82\x95\xc2\x78\x4a\xbb\x87\xcd\xd9\xe8\x1e\x62\x28\xd4\x7f\x3b\x64\xdd\xf1\x4d\xe8\xf2\xd2\x01\xd2\xd4\x29\x94\x5d\x5b\x61\x9a\x3a\x8c\xbe\xdf\x33\x74\x20\x09\xec\xf7\xb5\x81\x43\xc1\x61\xd1\x61\x81\x4a\x9e\xde\xb2\xef\x3f\xcd\x4c\xed\x0f\xb5\x1e\xaf\x43\x0a\xcf\xfc\x3a\xe4\x78\x93\xd4\xf8\x1f\xe4\xa9\xff\xa1\x97\x5f\x43\x8a\xc9\xf2\x6b\xc8\x31\x08\xce\xf8\x5b\x4c\xf9\x16\x5f\x0c\x63\xfa\x43\xe3\x51\x6a\xed\xce\x59\x87\x25\xac\x03\xff\x15\x68\x30\xd1\x16\x4a\xec\xe7\xaa\x40\x08\x17\xb7\xed\x5d\xa3\x73\xbf\xac\x73\x9b\x0c\x20\x1c\x64\x3d\x19\x26\x2f\x50\x97\xfb\xab\xa3\x43\xcb\x7d\x2d\xac\x87\x5d\x0a\xfb\x48\xae\xe3\x0a\xc2\x24\xec\xa0\x80\x43\xd7\x5a\xd4\xec\x6b\x76\x37\xd4\xa9\xe6\xbd\xbc\x13\xdc\x54\x59\x32\x56\xf7\x58\xca\x4e\xde\x04\xf3\xa8\xcc\x0f\x39\xfa\x50\xa7\xd1\xb4\x07\xb5\x0f\x79\x19\x37\x5a\x45\x4f\xde\x4a\xf9\x2c\x55\x51\xb5\x27\x79\xe5\x70\x4e\x3a\x8c\xdb\x1a\x8a\x18\xe6\x69\x5f\x1b\x8a\x98\xce\xba\xcf\x3a\x6e\xe2\x76\x02\xfa\x2b\x9f\x1f\xf4\x1f\x0c\xd8\xe0\x01\xa6\xc0\x59\xbd\x3b\x91\xd2\xde\x1b\x41\x29\x7e\x57\x8b\x87\x86\x69\x09\x19\xa4\x15\xcc\x75\xcf\x0d\xfb\xb3\x7f\xed\xed\x1f\x2d\x31\x06\xde\xa5\x90\xb1\x8e\x1b\xe7\x15\x4e\x96\x1b\x39\x91\x3d\x42\x2b\xa2\x14\xad\xc0\x30\x4e\x3b\xd9\x10\xa5\x68\x03\x86\x72\x68\xb2\x20\x4a\x19\xb4\x8e\x67\x43\xf0\xda\xf2\x6b\xf4\xc3\xde\x51\x22\xfa\xf9\x87\xfa\x28\x51\xa9\x0c\xcf\x92\x79\x58\xbe\xc3\x7e\x56\xb9\x7e\x37\xf6\xe7\x8f\x87\x4e\x40\x6d\x19\x8b\x3c\x4c\xd9\x18\x01\x00\x88\xc6\x08\xb2\xc6\x08\x4a\xb7\xa8\x47\x90\x56\x60\xe1\x55\x9d\x97\xac\xaa\x54\x4e\xb2\xac\x3a\x71\x68\xac\x0a\x72\x34\xac\xa4\x0e\x8c\x97\x40\xc7\xde\x78\x35\xf4\x40\x8f\xbf\x4f\x03\x1f\x3f\xb7\x25\x8d\x4a\xcb\x86\x77\x2f\xfc\x92\xc2\xba\xa4\x52\x6e\x16\x64\x21\x31\xc3\x29\xeb\xb3\x97\x41\xe3\x66\xa7\x56\x09\x8a\xbc\xaa\xfa\xd5\xf0\x12\x57\xf9\xb0\x57\x2a\x5f\xf3\x8c\xd7\x87\xd4\x60\x5b\xb0\x44\x18\xa7\xb9\x78\x1d\xa0\x1f\xa0\xba\x4d\x06\x4e\x7e\x7d\xe6\x8b\xfb\xcf\xbc\xa8\xcf\x7c\xf9\x09\x67\x3e\xfa\xf8\x99\x2f\x99\x01\x4f\x3e\x72\xe6\x53\x58\x9b\xfa\xbc\x5f\x1e\x3a\xb8\x49\xb6\x1f\x2c\x43\xc9\x89\x03\xbc\x64\xce\x6e\xdd\xa4\x55\xf3\x71\x19\x4e\x6a\xd3\x4a\xac\x36\x37\xdb\xb7\x8d\x68\x80\xda\x03\x16\x6b\xf7\x95\x6d\x00\xe9\x33\xd2\x41\x9e\xab\x49\x00\xb2\xe7\xb0\x8d\x47\x64\x55\x9a\xa3\x08\xc5\x78\x53\x41\xa4\x58\xaa\x9a\x19\x95\x16\x12\x90\x3b\x45\x42\x9e\xf1\x14\x9b\xdb\xc2\xcf\x00\x95\x0c\x02\x58\x06\xb4\x77\x02\xca\x13\x59\x32\x20\x3e\x23\x34\x65\x0e\x10\xc1\xe8\x0e\x42\xf9\xd6\xa5\x91\xba\x53\x82\x1d\xb4\xb8\x47\xdb\x14\xb4\xdd\xd0\xd9\x62\x78\xd2\xcb\x9a\xb7\x9c\xd4\x01\x26\x03\xa3\x96\xb0\x15\xe2\xcd\x25\x3f\x63\x1b\xbe\x05\x52\xee\x12\xa8\xd1\x0b\xb6\xe6\xd7\xf5\x04\x98\x0c\x16\xc6\x29\x34\x87\x85\x86\x12\x0b\x26\x29\x66\xea\x7b\xdd\x20\x40\x06\xb5\xa3\x17\x6c\xc5\x94\x45\x45\x9b\xb0\xd6\xbb\x5c\x18\xbb\x3c\xab\x76\x74\x7a\xe7\x8e\x6e\xfb\x0e\xa8\x76\x95\x19\xc4\xff\x77\xd7\x2e\x6f\x7a\x13\x34\x0a\x65\x35\xda\x39\x6f\x49\xea\x00\x48\x05\x52\xcf\xc0\x1a\x43\x91\x8b\xbf\xe3\x39\x20\x81\x33\xbe\x00\x24\xb0\xe5\x3b\x67\xe7\x9e\x49\xbd\xcf\x76\xfc\xd0\x89\x80\x63\xf4\x3c\x99\xf1\x92\x07\xee\x12\xd6\x3b\x74\x37\xb0\xdc\xb1\x7b\x05\xc3\xaf\x21\xee\xa5\x83\xca\x9e\x0b\xf7\xda\xb9\x46\xc6\xa4\xbe\x3a\xe4\xba\xc7\xcf\xd1\x99\x7c\x19\xa0\xb4\xf2\x1a\xa5\xb0\xa7\xcf\x83\x9b\x1b\x94\x8d\x78\x2b\xa9\xbf\xce\xdc\x15\x00\x64\xdf\xa0\xf9\x2e\xd8\x25\x7a\x9e\x27\xd6\x0b\xf6\x16\x39\x96\x67\xb8\xd7\x9e\xc3\x0f\xec\xb5\xf7\xfc\x15\xf4\xf8\x1d\x7f\x0e\x3d\x7e\xc9\xcf\x9c\xf7\xde\xce\x79\x37\xb2\x5e\x3a\x2f\x7b\x5b\x54\xdc\x40\xcd\xd6\xce\x79\x0f\xe3\x78\x67\xf7\xb6\x1e\xd0\x21\xe3\xee\x09\xf0\xf2\xe3\xc0\x59\xba\xa1\xb3\x71\x63\x07\x35\x1d\x56\x73\x72\x5e\xb1\xe7\xec\x05\xbb\x84\xde\xb2\x0b\xfc\x73\x4d\x53\xc4\xd6\x6a\x33\x43\x32\x5e\x34\xa1\x72\xd1\xea\xb7\xa7\xd3\xbe\x55\xd4\x0f\xc0\x3f\xc3\xb4\xf9\xa4\x8f\x62\x4b\x80\x88\x83\xc7\x46\x90\x99\x4c\x84\x51\x1e\x99\x37\x18\xdf\x17\x42\x35\xe0\x28\x68\x74\xa4\x1c\x64\xf0\x18\x76\xaa\x6f\x92\xd7\x8d\xf0\x26\x45\x66\xb8\x46\x64\x56\xd3\x42\x43\x9b\x82\x58\xd3\x02\xef\x00\x10\xf0\x07\x61\xcf\xa1\x78\x6a\x1a\x46\x02\x34\xa2\x4b\x3f\x0c\x28\x47\x2d\xa8\xab\x1b\x33\x11\xac\x4d\x82\x30\xcb\x4c\x69\x56\x85\x05\xf6\xcd\x61\xf0\x1e\x41\xfc\x66\x29\x4b\x91\xfb\x8d\x24\x3e\xa6\xe8\xbf\xbd\xf3\xac\x25\xad\xb3\x76\xd7\xe1\x4a\x5a\x26\x36\xc6\x29\x32\x6f\x5d\x89\x8c\x29\x35\x02\xcc\xd8\x0d\xd8\x7a\x27\xd2\x00\xc2\x51\xea\xc1\xd1\x31\x86\x58\x3d\xdc\x1b\xd2\x47\x63\xe5\xc2\x3e\x94\x3e\x20\xab\x59\x4b\x5d\x58\x97\xd6\xb6\x5c\x52\x9b\x1e\xa2\x71\xb8\x25\x4b\xc1\x23\x10\x03\xc7\xc7\xb2\xb6\xd7\xaa\x7e\x58\xe0\x16\x11\xcf\x9f\x09\x2b\xe5\x71\x66\xad\x11\x94\xd9\xc0\x37\x28\xeb\xaa\x08\xd8\xe4\x79\x1d\xd2\x8a\x2f\xa5\x93\x0a\xca\xea\x36\xd2\x0f\x64\xc5\x4a\xab\x45\x18\x68\xb5\x11\x1c\xa8\xbc\x7b\x15\xc4\xd1\x5c\x6a\x2b\x65\x48\xdc\x42\xdf\x15\x53\x83\xa0\xc6\xa6\x6c\xc6\x3d\x96\x82\xd0\x83\xd3\x81\x7e\x4b\x83\x47\x28\x82\x7f\x08\xdc\xf0\x86\x0f\xe1\xf9\x8a\x63\xe4\xc4\x3e\x80\xfb\x3e\x00\xb0\x3e\xc3\x3b\x56\x2f\xf9\xcb\x10\x80\xd4\x0e\xb5\x32\x28\x10\x38\x37\x23\x52\xc3\xc1\x53\x1b\xf6\xc0\x46\x6f\x8e\x00\x3d\xa8\xd0\xd4\x0f\x15\x4f\xd6\x05\x1e\x00\x1b\x3e\xe9\xe4\x3e\xcb\x31\xec\x46\x18\x47\x9b\x67\xc9\x32\xfe\xc4\x40\xc8\x97\x55\x58\x65\x0b\x7a\xc7\x5e\x86\xb6\xff\xbd\xb0\xe0\x19\x28\x4e\xda\x07\x25\x6a\x10\xaf\x75\xcd\x2f\xb6\x85\x30\xa9\xca\xfb\xaa\x3e\x27\x21\x50\x32\x41\x01\xb6\xd2\x22\x26\x52\x8b\x48\xbb\x40\x7b\x0d\xe1\x2e\xf1\x77\xb2\x9d\x73\x6c\x87\x42\x18\x7e\x5a\x13\x74\x51\x0e\x4a\xfa\xfc\x15\x85\x5b\xc2\xbb\xba\xf0\x62\xbc\x4f\x2b\xbd\x84\xd2\xa4\xb3\xe4\xae\x74\xd4\xc2\x8a\xa6\x00\x3c\x67\x34\x5c\xc8\xdb\x08\x87\x7d\x4f\x4d\x57\x24\x30\xf9\xf2\xe4\x31\xc2\x55\x0c\xfc\x02\xd5\xe9\x37\x59\xeb\x15\x6e\xfe\x39\xed\x7c\xa8\x3b\x4b\x8b\x4f\xee\xe5\xba\x51\xf7\x59\xa3\xee\x6d\x65\x13\x3a\x1e\x4e\xd0\x73\x49\x25\xf8\x7d\xd5\xec\x9a\x6e\x55\xc1\x3f\x5b\xd5\x76\x15\xaf\x18\x08\x41\x0c\xa8\xae\x60\x7e\xc7\x66\xfb\x20\x04\x1d\x19\x0f\xc6\x0b\x64\xda\xa5\x80\x47\x95\x1b\x82\xc0\x26\x0d\x08\x95\x9a\x10\x8a\x20\xf0\x9e\x61\x9e\x34\x8f\xc1\x81\x08\xdc\x6b\x26\xbd\x19\x64\x4d\x87\x31\x66\xfa\x87\x85\xad\xc4\xf1\xbb\x60\x92\x78\x2f\xc9\x86\x60\x9c\x4c\x12\x17\x1e\x9b\x25\xe2\xac\x7d\x0f\xcd\xa4\xb8\xb9\x11\x13\x00\x3b\x0b\x12\x9a\xad\x24\xbb\x61\xfb\xf4\xea\x53\xa2\xfa\xe6\x87\x06\x57\x92\x67\x77\xc6\xc2\xd3\xe7\x19\x79\xde\x69\x81\x7d\x2a\x74\x9f\x8a\x49\x81\x7d\x42\x1b\x44\x63\x86\x16\x06\x56\xa4\x7a\x6b\x90\xa0\x66\x17\xbe\x7a\x18\xb7\xc3\x90\x9e\x67\x1f\x95\xae\x29\x9f\xc2\xc0\xd4\x5f\xd6\x9e\x99\xea\x3a\x25\xb1\xe7\x9b\x19\x3b\x99\x1b\x38\xe5\x01\x61\x57\xe8\x44\x5e\x0e\xcc\x66\xe0\x64\x5e\xec\x94\xe4\x26\x97\x3b\x11\xd0\x2d\x69\x53\x12\xa7\x74\xa5\x65\x43\x2e\x17\x35\x7a\x95\x9a\xad\x7e\x92\x00\xee\xbf\x1b\x53\xe4\x41\x2f\x0f\x8f\x09\x68\x2e\x1a\x93\x9b\x57\x63\xca\x3c\x98\x81\x96\xe8\x6e\x99\x1d\xec\x4d\xd2\xf0\xfc\x3a\x70\x81\xb7\x8a\xdf\xa6\x23\xb6\xa6\x4e\x31\x52\xf1\xcb\xf1\x3a\x91\x0d\x9a\x90\x94\x38\x3b\xf4\x14\xd9\xcc\x4a\xc7\xfd\x49\x34\x2e\xfd\x72\x1c\x11\x29\x88\xdc\x3e\x70\xce\x78\x55\x21\x4f\x5c\x7c\x46\xcf\x62\xa0\x1d\xd1\x25\x4e\xab\xb2\x00\x7d\xf1\x72\x84\x45\xf3\x71\xe4\x47\xe3\x7c\x94\x7b\x3c\xac\xf4\x05\x56\x8c\x26\x02\xc0\x47\x79\x86\xc3\x69\x6e\x57\xaf\xd8\xf7\xdc\x9e\xd9\x64\xff\x1d\x13\xe3\x66\xa8\x46\x1a\x23\x27\xb3\x8a\x11\xdd\xf0\x87\xaa\x0c\x51\x5f\x3a\x82\x06\x71\xa6\xdb\x8d\x85\xaf\x43\x34\x55\xf5\x32\x3f\xb3\xdd\xa1\x6c\xeb\xf5\x0f\xde\xf3\xc0\xfe\xd2\xaa\x5e\x8d\xe3\x7e\xd5\xb2\xe5\x40\x30\x85\x81\x28\xf1\x2b\x94\xc2\xf8\x91\xda\xa4\xf6\x3e\xc2\x30\xa3\xa0\x29\xf5\xb1\x6c\xc2\x0f\x73\x6c\xf3\xff\xcb\x0d\x16\x2c\x69\x36\xb8\x6e\x5c\x93\xd7\xcd\xd3\x32\x0b\x8d\x5d\xb6\x6b\x26\x17\x74\xb1\xab\xe1\x11\x9b\xb5\x0c\x2b\x1b\xc7\x22\x6a\x6c\xfb\xd4\x34\xf1\xd4\x47\x46\xda\x75\xc2\x81\x29\x1b\x4e\x83\x31\x2f\x1b\x4e\x83\xb9\xe9\xec\x88\x17\x4a\x9b\xce\x8e\x02\x09\x1e\xb5\x7a\xc4\x47\x19\xf4\x7e\x01\x9c\x13\x86\xb8\x71\x52\x07\x9e\xf1\xda\x1b\x0a\x96\x3c\xe8\x55\xa5\x57\x68\x35\xb3\x6a\xc4\x2e\x37\x3d\x7c\xa5\xa8\x7f\x65\x3b\x4b\x26\xea\x4f\x2b\xa8\x08\xbe\x64\xe8\x37\xea\x16\x4e\x8e\x6e\x33\x4e\x0c\x4f\x0b\xf2\x7f\x8c\xe0\x29\x38\x70\xba\xd1\x8e\xb7\xba\x4f\x4c\x7e\x4a\x8d\xcb\xc5\x32\x38\xf4\x28\xaa\xb7\x09\x27\xee\x1b\x1c\x4d\x13\x2c\x5c\x50\xaa\x5e\xfc\x0d\xde\x49\x42\xf7\x66\xa1\x0b\x95\xe1\x55\x9c\x1d\xf0\xa4\x35\xec\x47\xc8\x4b\x54\x7b\x6c\x9a\x7e\xa4\x64\x4b\xa2\xee\xba\x83\xa9\x33\x3d\xe7\x03\x7b\xf4\x67\xe8\xde\xe1\x43\x1b\xf0\x86\xa7\xbc\xed\x04\x2e\x7c\xcb\x00\xd2\x09\x98\xfc\x10\xde\xd1\x89\x38\x72\x33\x7a\x63\x52\x14\x4a\xd6\xc9\x86\x1f\xec\x5f\x87\xfd\x60\x0b\xd8\x0e\x88\x8d\x0d\x97\x56\xd9\x75\x03\xc0\x03\xa8\xaa\x4a\x27\xb7\xf8\x7c\x40\x6c\x58\xe5\x30\x92\x2f\x8d\xd3\x70\xb9\x8f\xc6\xcc\x90\x7d\xc6\xde\x2e\x4d\xef\x79\x04\x80\xb0\x7a\x65\xe5\x46\x1f\x35\x55\x48\x2c\x72\x1a\xce\xf3\xf7\xe0\x97\x66\x63\xd2\xc1\x5c\xa9\x71\x50\x9c\x8a\x87\x25\x6a\xf8\x34\x37\x56\xef\x90\x4a\xc8\x81\x49\x06\x8c\xc8\xea\xf3\x81\x41\xf2\x9d\xa8\x97\xb5\x30\xca\xc5\x1d\x38\x1c\xa1\xb8\xf7\x26\x70\x9f\x07\x63\x79\x31\xb9\x7c\x01\x6a\x64\x4c\xe6\xfe\xf4\x8d\x9e\xb4\xc6\x39\x95\xc7\x0b\xaf\x0c\x28\x69\xf8\xf6\x01\x0d\x5a\xe4\x24\x2d\x05\x1a\x7e\x39\x8c\xb8\x0f\x80\x38\xca\x80\x86\xe4\x68\xbd\xeb\xe2\x35\xa6\xb7\xb8\x0c\x78\x2d\xd0\xc4\x00\x1d\x92\xf9\xc7\xdb\x0e\xb2\x9e\x69\x3a\xde\xab\xbe\x63\x0f\x7b\x18\xa2\x19\xe7\x32\x73\x8c\x9e\x23\x95\x60\xf7\x2a\x63\x89\x68\x72\xc0\xa5\xb5\xa9\x92\x83\x0d\xf9\x23\xde\x72\xb8\xbf\x78\x77\x29\xeb\x22\xa6\x21\x17\x8e\xa5\x6a\x3c\xed\x65\x6c\xd0\x8b\x6c\x1b\xe6\x1a\x57\x09\x78\x10\x83\xda\xbb\xbe\x97\xda\x8a\x6a\xd5\xa0\x31\xdd\x25\x4e\x77\x64\x4e\x77\x79\xe7\x74\xef\xcf\x22\x80\xd1\xc6\xec\x59\x85\x47\x34\x54\xd6\x2b\xdd\xc4\xb0\xf2\x27\x37\x87\x49\x90\xf9\xf7\x4f\x55\x74\x9f\xf6\x32\xf2\x7e\xc4\xfb\x23\xf7\xe7\x90\x26\xc2\x08\x16\xd0\xa6\xc5\xab\x25\x6d\xee\x8d\x02\xaf\xb8\x35\x88\xee\xb7\x99\xe9\x8b\x42\x12\x0b\xf2\x81\x23\x06\x0f\x21\x79\xcd\xb0\xc1\x08\x85\xc1\x60\xd6\x84\x61\x8b\x19\xd4\x9a\xae\x4c\xf1\x25\xc2\x60\x4a\x46\x15\xcf\x4e\xa6\x46\x13\xb3\x42\x52\xc7\xdb\xbe\xf0\x13\x8a\x59\xb9\xcf\x27\xea\x8a\xcb\xff\xaa\xe2\x3b\x58\x64\xa9\x83\x88\x0e\x55\x4d\xf1\x78\x39\x17\xda\x9d\x54\xf9\x4a\x28\x37\x9b\x77\x40\x9e\x5a\x84\xb5\xf1\xce\x6e\x6b\x3a\x0d\x91\xfc\x0a\x58\x88\x76\x52\xc1\x8c\xd1\xbb\x2b\xdf\xdd\x60\x36\xd3\x1e\x7b\x05\x5d\xa8\x47\x5d\xab\x34\x81\xcd\xfe\xc9\x7e\x1b\xe1\x07\x9a\x6b\x7c\xdf\x0a\xa3\x61\xa3\xe1\xcd\xde\x20\x5c\xd0\x60\xab\x4a\x7a\xd5\x4c\x1a\x18\x49\xcf\xb3\x3b\xa3\x09\x4d\xfb\x8c\x82\xa6\x0c\x61\x87\x0c\x47\xc5\xb8\x1c\x95\xae\x2b\xf3\x8e\xc8\x13\xf1\x67\x8c\x65\x33\xcd\xbc\xe1\x0c\x05\x08\xf8\x34\xa0\xa7\x72\x86\x8e\xe5\x23\xdb\xf3\x32\x20\x53\x33\xd7\x9d\xf1\xb2\xc6\x00\x32\xe0\x51\xbf\x11\x29\xf6\x7d\xb6\x17\x52\x85\xac\xd1\x6e\x6e\x2a\x43\x34\xc3\x23\xb7\xc5\x42\xca\xcb\xae\xc9\x75\xc4\x31\x23\x80\xc8\xcb\xb1\x0b\x79\x21\x76\xed\x5e\x62\x38\xe1\xee\xd1\x72\x24\x85\x88\xc8\xd9\x13\xaf\x3f\xc3\x32\xa5\xba\x32\x85\xee\x23\x24\xe9\x44\x4c\x37\x91\x00\x85\x46\x46\x74\x14\xbd\x01\x1f\x62\xa0\xc9\xac\xc0\xb1\x42\x2f\xb6\xbd\x85\xba\x5f\xaf\x67\x2d\x9c\x14\x78\x99\x6a\xef\x4e\x4b\x77\x05\xdc\x0e\x1a\x22\xe6\xc6\x98\x7e\xc9\x0e\x84\xac\xa9\xdd\x4c\xb5\xef\xdd\x91\xbc\xfc\x5b\xd0\xd4\x50\xf3\x2d\x1d\xcf\x1b\x24\x82\x8a\x92\xc4\x04\xb6\x72\x4a\x9e\x2f\x85\x74\x42\xce\xa3\x42\x3d\x85\x51\x16\xc6\xa2\xe5\x93\xfc\x8d\xd1\x07\x11\x4b\xff\x39\x58\x00\x0c\x88\x98\x19\x32\x32\xac\x24\x31\x39\xe1\xd7\x54\xee\x0f\x82\x2a\x3f\x87\xfa\xf6\x77\x8c\xa0\x12\x2b\xa7\x40\xe8\x49\xd9\x50\x85\xfd\x6a\x0e\x57\xf5\x06\x43\x70\xa1\xc9\x13\x06\xc5\xde\xc1\x96\xfb\xb0\xf5\x05\xdb\xf9\x19\x21\xb9\xee\x6b\x54\x3e\x75\x5f\xe1\xa5\x02\xc9\x6c\x44\x4d\x56\xac\x57\xc8\xa3\x51\xa8\x6a\xa1\x30\x30\xc2\xd3\xaf\xdd\x6d\x15\x1b\x26\xab\x3f\x86\x3b\xfc\x3a\xb2\x23\x1e\x42\xc5\x41\xb7\x4c\xa4\x77\x20\x50\x69\x50\x33\xde\x46\x05\x35\x36\x3e\xff\x81\x9f\x6b\x5e\x8f\xa7\xa3\xb8\xd9\x60\x7c\xa8\xc1\xb8\xdd\x60\xca\x63\x1c\x43\x15\xbb\x00\x5a\x8b\x91\xf6\x4f\x47\xf5\xb7\x3f\xf0\xdb\x48\x45\x0e\xa8\x4c\x22\xa9\xed\x9c\x0f\x46\x0b\xe0\x2c\x5d\x37\xb7\xd1\x44\x32\x27\xa3\xc9\x69\x0e\x1b\x84\xfd\x08\xc5\x68\xad\xf1\x2a\x2d\x58\x23\x16\xcb\x1f\x20\x91\x42\x69\x63\x8f\x25\x16\x98\x55\xe6\xe3\xff\x82\x31\x35\xb2\x92\x4c\x14\x08\xac\xdf\x68\x0e\x7e\xc3\x7e\x18\x1e\x65\x4d\x40\xa1\x83\x80\xa0\xc3\x24\x2d\xcd\x0e\x96\x06\x56\xff\x62\x14\x50\x38\x83\x8c\x7f\x9b\x59\x01\x4b\x6d\x38\x37\x19\x7a\x74\x05\x30\x94\x97\x23\x1d\x4c\xa0\x04\x84\xf8\xbd\xcc\xc0\x8e\xac\x12\x33\xc0\x71\x1e\x7b\xa8\xf0\x29\x20\xe7\x6b\x8c\x20\x62\x03\x07\xae\xbf\xe0\x7b\xf7\x15\xde\xe6\x09\x0f\xf2\x86\x1a\xf2\xd8\x09\xba\x6f\x90\x5a\xd6\x9f\xb0\x95\x37\x2a\xb8\x04\xed\x67\x84\xeb\xd0\xad\x28\xc9\x51\x2e\x5e\xe0\x55\x63\x28\x52\x52\x50\x1e\xe1\xbd\xda\xd9\x7f\x64\xf2\x12\xcf\x6f\x30\x78\x17\x4e\x07\x6d\x66\x55\x2e\x44\xd5\x78\x28\xa7\x4d\x54\xb3\x27\xf3\xa9\xf9\xa6\x09\x83\x1a\x28\xd2\x05\x3c\x0a\xe9\x4f\x50\xd5\x4f\x77\x02\x87\x77\x94\xb5\x47\xb2\xf9\x3f\x32\xcd\xcc\xc7\x5c\xe5\x40\x4f\x31\x34\x33\x8f\xc9\xcc\x1c\x66\xdb\xcb\x29\xdc\xf5\xce\x5b\x00\x1b\x27\x64\xa6\x2b\xbe\xa1\x84\x39\xfc\x62\xc2\x1a\xb8\x43\x6b\xe5\xcc\xbd\xa5\x73\x85\x5e\x0f\x2b\x67\xe5\x2e\x81\x7d\x3b\xe3\x57\xce\x95\x3b\x77\xe6\x6c\x8b\xe7\xcb\x9a\x3b\x3b\xc8\x72\x66\xf7\xd6\x6e\x0e\x67\x0d\x8a\x9c\x79\x57\xce\x0e\xdf\x17\xb7\x23\xd8\x52\x72\xb0\x2c\x66\x1b\x54\x06\xd4\xdd\x8f\x75\xac\x0d\xf8\x5a\x4f\x48\x02\xd9\xf4\x57\x39\x1b\x34\x11\x06\xbb\xf1\x6d\x43\x92\x91\xc8\xde\x23\x29\xb2\x25\x32\x04\x2f\xb4\x2a\x81\x52\xc2\x99\xd3\x36\xdd\x0f\x32\x15\x0f\x08\x80\x00\x25\xa4\x55\x48\xfb\x5e\x7f\x04\x44\x28\x55\x32\x92\x78\x1a\x2b\x0a\xa9\xa2\x98\x87\xaa\x22\x1d\x93\xff\x81\x8c\x40\x93\xf3\xc0\xcb\x60\x42\x81\xd8\x84\x1a\x10\x6a\xe7\xbd\x4a\x07\xb0\x98\x58\xde\xca\xad\x09\x31\x98\x38\x6f\xe8\x00\x34\xcf\x9d\xbc\x67\xc1\x23\xc0\xf6\xd0\x8d\x7b\x43\x17\xc0\x3b\xe2\x60\xbb\xb7\x70\x81\xf6\xcb\xdc\xa0\xe1\x7f\xf9\x7d\x6b\x9c\xaf\xb0\x27\xd5\x5e\xf8\x36\xa3\x8b\xb6\xb5\xd4\x46\x0e\xa0\x12\x64\xec\x88\x16\xcd\xba\x5b\xbc\xe6\xc6\x70\x56\x30\x14\x6b\x0a\x06\x6b\xf0\x9e\x37\xe2\x23\xfc\x70\xf8\xa4\x36\xd5\x2c\x4a\x0f\xb0\xe2\x5a\x03\xb0\xe4\x5a\x27\xb0\xe1\x4a\x1b\x00\xdb\xea\xc7\x10\xf6\x54\x65\x78\x39\xf7\x3c\x3a\xdc\x11\xbf\x9a\xce\x01\x51\x52\xdc\x89\x4c\x6c\x02\x54\xd4\x91\x51\x77\x00\xc4\x15\xf5\xc8\xb4\xe6\x46\x37\x49\x34\xe5\xb6\x73\xb2\xe3\xee\x0a\x52\x50\x67\x3c\xa7\x55\xcf\x69\xb1\x82\xa9\xeb\xa6\x5f\x86\x33\xbc\x0c\x55\xf9\x3d\xe3\xbe\x17\xb4\xef\x2d\x82\xa6\x05\xba\x7b\x90\x06\xb7\xf4\x04\x79\x89\x92\xb5\x27\xde\x02\x1d\xa2\x0f\x50\x9f\xee\xec\xfd\x39\xb3\xbe\xcb\xac\x48\x1d\x1e\x46\x25\x17\x12\x26\x6f\x3c\x04\x34\x13\xd8\xf8\x0b\xd8\xec\x18\xd4\x51\xa6\x4c\x84\xbf\xb9\xf5\xa9\xde\x8d\xcc\xb9\xf2\x32\x95\x93\x80\x3b\x7d\x9d\xa0\xe5\xeb\x4e\xe5\x54\xda\xe9\xe3\xe3\xd2\x5b\xaa\x9c\x2b\x5d\xe7\x4a\xd5\xb9\x54\x75\x2e\x65\x4e\xe8\x86\x59\xe7\x52\xd5\x49\x5d\xb9\x95\xd7\x0a\xb2\xa8\x06\xc4\x40\xde\xb9\xae\x79\xf3\xf0\x9f\x4d\x1a\xa9\xe8\x06\xa8\x5c\xf2\x12\xf9\x6b\x98\x7d\xee\x93\x00\x5b\x89\xf5\x77\xf2\x27\xc8\xc2\x3d\x7a\x60\xd7\xa2\x05\x7e\x6b\x20\xe8\xd7\xac\xda\xc3\xa8\x5f\xa8\x44\x75\x0a\xc3\xe8\x73\x1c\x29\x70\x44\xf1\x30\x8e\x38\xaf\xaf\x03\x82\x95\x44\x07\x9a\x1d\xec\x0a\xd8\xd7\x5e\x0a\x0b\x0e\xfb\xdc\xa3\x18\x58\xf4\xbe\x80\x5f\x7c\x47\xb1\x96\x15\x3a\x0b\x2f\x76\x72\xe5\x90\xb5\x1a\x73\xef\x7d\xa0\x5c\x92\x96\x3c\x74\xe0\xfc\x39\x31\xba\xda\xc8\xd8\x58\xb0\x4b\x81\xc8\x5a\x42\x89\x0d\xea\x3b\xe7\x1c\xca\x6f\xbc\xdc\xa1\xd0\x58\x0b\x3e\x07\xaa\x7c\xcd\xb3\x06\x3d\xf3\x57\x36\x5a\xd3\x34\x24\x6c\x2d\x67\xa1\x84\x87\x2d\xbf\x72\x53\xf8\xdd\xf1\x85\x01\x01\x14\xc0\x44\x65\x3f\xcc\xd2\x82\x69\x72\x85\xaf\x2b\x72\x40\x4e\x1e\x1a\x95\xc7\x80\xff\xce\xe8\x88\x40\x35\xa7\x67\xdd\xdd\xcd\xcd\x9a\xce\x33\x3c\xa2\x25\xfa\xf6\x14\x9e\xb6\x32\x14\xd3\x59\xf7\xa5\xfd\x61\x07\xef\xaf\x15\xee\x3a\x83\xe7\x97\x55\xb8\x1d\x48\x7f\x43\xe9\x46\xea\x9b\x5b\x68\x41\xa1\xa4\x1d\x1a\x20\x40\xfd\x56\x12\xf3\xb5\xdd\x70\x54\xf9\xe3\x00\x75\x35\x22\x41\x46\xf7\xb5\x2c\x50\x00\x2a\x65\x50\x97\xa2\xd5\x30\xf0\xa1\xa2\xd5\x0a\xa2\xd5\xf0\xfa\x4f\x93\x48\x34\x0d\x4e\xdb\xd0\x85\x7f\x17\xc2\x59\xfe\xe9\xe3\xba\x45\x82\xf0\x0a\x92\x94\x08\x49\x00\x97\xa3\xdf\x87\x75\xf4\x35\xea\x77\xf0\x2a\xdf\x23\x44\x1a\x74\xc4\x0b\xb4\x8a\xf7\x0a\xb4\x82\xaf\x08\x2a\xfc\xb6\xa3\x6f\x44\x4e\xd9\x34\x22\xbc\x31\xf2\x52\xc5\x86\xd0\xb0\xa0\x64\x03\x33\x4a\xdf\xd7\x2d\x60\x7c\x69\x02\xe3\x23\x15\x92\x55\x11\x33\x81\xa2\xfb\xc9\x05\x83\x28\xfc\x29\x5d\x97\x58\xa8\x41\xc5\xf2\x1b\xd1\xff\x40\x9f\x23\x28\xed\x66\x88\x43\x30\xa6\x11\xc1\xb2\x0d\x5f\x74\xd1\xda\x68\x01\xcf\xb0\x19\x57\xee\x06\xed\x09\xd7\xdc\x5a\xba\x57\x78\x97\x39\x3a\x2e\x71\xbc\xe3\x8e\x0c\x47\xc7\xf3\x9b\x9b\xf9\x18\x68\x1d\xed\xe6\x84\xee\x4c\xca\x79\x4b\xfe\xed\xee\xea\x6b\x65\x94\xeb\x13\xe2\xee\x39\xc0\x8d\xf0\x16\xf0\x9f\x7a\x8e\x6f\xab\xad\x53\x15\x3c\x0d\x0f\x97\x8b\x8d\x72\xe1\xed\x6d\xe5\x50\x95\x41\x77\x01\xd8\xf5\xac\x2b\x00\x4f\xb0\x5c\x6b\x2f\x03\x52\xc1\x1b\x8c\xb3\x9b\x1b\xe0\xf8\xec\x4f\xee\x1c\x30\x41\xa5\xdd\xcb\x8c\x2e\x5a\xb1\xfe\xf2\xa9\x1d\x35\x4b\xa8\x3a\x8c\x5a\x0d\x27\xb0\x65\xa3\x43\xdb\x7a\x32\x8d\xca\x52\xe4\x24\x30\x80\x9e\xaa\x2a\xa0\xf7\x00\xde\xf7\x3a\xb3\x3d\x4d\xf7\xcb\xd7\xf9\x65\xf9\xba\xbe\x3a\x20\x5c\x40\xb7\x81\x5d\x72\x74\x21\x36\x4c\x70\xd5\xe6\x23\x38\x1b\x6b\xac\x9d\xe9\xd8\x51\x81\x04\xc0\x97\x2d\xf8\xfb\xaf\x7d\xd6\x14\xe0\x96\xaa\x4b\x93\x0a\xdf\x85\xf2\xcc\x96\xe4\xf8\x00\xd4\x5a\xc9\x24\x63\xcc\x32\xf5\x5a\xd0\x6d\xe4\xec\x47\x8c\x9a\x1b\xcd\x24\x66\xae\x2f\x53\xfb\x59\x95\xb0\x29\x47\x71\x57\x8e\x82\x1c\x6f\x0c\xc7\x82\xef\x5a\x2a\x9b\xaa\x6b\x0d\x39\x47\x86\x63\x43\x0f\x16\x98\x10\xdd\x53\xe8\x8b\x21\xd4\xfb\xd1\x18\x24\x4c\x1f\x3a\x30\x5f\xe2\x0d\x87\xd2\x03\x0d\x0a\x66\x3e\xce\x6a\x86\x7e\xd3\x01\x5d\xbf\x16\x63\x38\x51\x98\x3c\x53\x28\xf6\x73\xbb\x37\xdd\x80\x50\xd2\xe5\xa8\x66\x7f\xd5\xac\x4b\x84\xa7\x26\x9e\x4c\x33\xc4\xc4\x90\xc6\x09\x82\x2e\x3b\x80\x23\x08\x79\xb6\xb6\x2f\xfb\x52\x98\x79\x00\x95\x79\x19\x79\xe6\xec\x3c\x40\x68\xb6\x69\x97\x86\xa8\x0d\x51\x1d\x7c\x87\x3c\x3b\xa3\x8f\x49\x69\x5c\x0e\xd8\x58\x68\x62\x8c\x3f\x60\xdc\xfc\xa4\xfb\x9c\x63\x30\xeb\xa4\xfb\x06\x51\x2e\x22\xdc\x56\x5e\x51\x9a\x70\xac\x20\x56\xf9\x0d\x41\xd5\x5f\x47\xe5\xa4\x84\xb2\x38\x71\xf8\x9b\xf9\x25\xd4\x82\xd3\x77\x81\x57\x50\x43\xed\x25\x8c\xea\x57\x34\xab\xc6\xef\xdd\x97\xf8\x4b\x01\x0b\xdf\xc0\x57\xdc\x30\x50\xc8\xa0\x21\xb2\x03\x2d\xbd\xfc\xec\x96\x20\x15\xfa\x07\xbf\xd4\xd2\x4b\xdd\xd2\x1b\xb3\xa5\xb2\xd4\xe8\x64\x04\x83\x1f\xd9\x18\x81\xe7\x65\x25\xe7\x33\xac\xa6\xcc\x1e\x55\xac\x27\x05\xec\x4b\x4b\x5b\x22\x77\x42\xc8\xdf\x85\x68\x69\xff\xa3\x8c\x0a\x28\x6f\x7f\xa8\x42\xc3\x01\x47\x47\x9f\x13\xd8\xd4\xb1\x7a\x1a\x11\xba\x86\x0d\x13\x23\x3d\x6b\x1d\x95\x37\x37\x08\x90\x4a\xc4\xdd\x11\xe1\xee\x12\x71\x37\xc2\x05\x58\x5b\xdb\x46\x08\x01\xb4\x8d\xa0\x54\xf4\xaa\x44\x34\x04\xc7\x27\x82\xe3\x43\x55\x02\x9d\x1e\xd9\xec\x1f\xfa\x2b\x90\xbc\x41\x7f\x20\xf4\xe2\xc2\x0e\xcb\x7e\x56\x38\xbe\x54\xd1\x26\x7e\xcd\xd0\x43\x35\x03\x72\x0f\xd1\xf4\x17\xc4\x3a\xfd\x80\x7f\x6d\xc5\xfb\x7c\x08\x45\x1c\xe7\x3e\x90\xe3\x74\x42\xfd\xef\xc2\x4a\x1f\x06\x63\x82\xc1\xc0\xb0\x71\xcc\x88\x06\x8d\x68\x14\x69\xd9\xa2\x19\x77\x40\x2f\xc2\xc0\x60\x77\xc3\xc3\xd6\xb0\xf2\x28\x5b\x32\x35\x64\x34\x51\x98\xe1\x58\xaa\x90\xed\xd1\xb7\x82\xbe\x09\xf5\xcd\xb0\x04\x29\x1b\x6a\x53\xa3\xea\xb8\x99\xb2\x33\x4c\x38\x6a\x13\xb1\x0f\xb1\x08\x16\xfe\x11\x90\xf0\xe9\x1c\x86\x87\x11\xc2\xa4\x57\x08\x71\x93\xf2\x67\x27\xef\xd0\x33\xcc\x36\xca\x3a\x0a\x26\x93\xe0\xfb\x28\xb1\xea\x0f\x9a\xfc\xec\x3e\x42\xc7\x04\xd2\xf4\xe1\x63\xe6\xe2\xfd\x8a\x78\xd1\x34\xb6\x35\x0a\xc9\xf3\x9d\xea\x0a\x49\xf2\x06\xa5\x29\xb4\x40\x48\x9e\xf2\x2a\x01\x10\x7e\x4a\xd5\x52\xc2\xb0\x4e\x18\x62\x09\xa0\x1a\xd0\x72\x20\x9c\x9e\xd4\x09\x27\x33\xe2\xb8\x28\x56\xa9\x61\x36\xd2\xe8\x73\x15\xc7\x09\xfa\x33\xa8\xc2\x42\x3d\x68\x58\x33\x2b\x4b\x52\x15\xbf\x33\x47\x23\xd6\xc5\x38\x45\x84\xbc\xba\xb9\x29\x01\xfb\xc9\xe0\x8f\x5c\x99\xf1\xc8\x0a\x37\xe8\x53\x87\x4b\x0c\x24\x08\xf2\x08\x3b\x0c\x82\x20\x29\x59\x24\x31\xc2\x71\x65\xe0\x5b\x53\xba\x21\xd0\x91\x23\x38\xe9\x1e\x4a\xdf\x84\x87\xbc\x78\xe1\xee\x50\xbd\xeb\xa2\x70\x67\x03\xa3\x50\x54\xdf\x19\x34\x46\x93\xc7\xb6\x34\xa3\xb9\xbb\xc2\x18\x08\xf8\xb8\x70\x97\x78\x7b\x54\x31\xe6\x5b\x74\x3a\x1c\x73\x8a\x19\x73\x7a\x3a\xb8\xb9\x60\x6f\xf9\xb9\xfb\x70\xf4\x76\x7c\x3e\x72\xdd\x73\x3c\x75\x09\x3f\x9b\x9e\x1c\x9f\xcf\x6c\x75\xe3\x32\x3c\xcb\x5b\x93\x1f\xf4\x7d\x3d\xf4\x2d\xbb\xb4\x8d\x1b\x89\x1f\x0c\x28\x65\x4b\x93\xd2\x4c\x19\xaa\x32\x97\x90\xba\x6c\xa4\x9c\xa8\x32\x97\x34\x91\x40\xf0\xa0\x9b\x8b\x9a\x7f\x66\xd8\xf3\x2f\x4b\xed\x83\x8a\x56\x08\xcb\x4b\x92\x5c\xea\xe7\x42\xeb\xfa\x90\xe0\xa3\x1b\xb9\x25\x9a\xc1\x69\xea\x4a\x2f\x99\xa2\xbb\xf4\x32\x46\x14\xa9\x57\xde\x6d\xac\xd0\xf9\x3f\x1d\x77\x5b\x48\x89\x3e\xdd\x07\x6a\xa1\x43\x0a\x5e\x36\xdb\xfc\x9a\xb9\xe9\x81\xaf\xa5\x1b\x38\x4d\x93\xdb\x4d\x13\x36\xf2\x0f\x78\xcf\xe4\x87\x5b\x79\x7f\x3b\xde\x27\x98\xd8\xf4\x53\x4c\xb2\xa9\x98\xf1\x75\xa9\x62\xd0\xe3\x2d\x9a\x7e\x89\x9f\x28\xee\x7f\x95\xbd\x90\xd9\x13\xe0\x15\x28\x95\x32\x1e\x1a\x4e\x55\x22\xb3\x29\x23\x56\x6f\x58\xe0\x98\x61\x34\xaf\xca\x96\x39\xa7\x8b\x4e\x73\xae\xe9\x04\x61\x5c\x95\x6e\x0d\x80\xc3\x77\x0b\xc7\x8c\xd6\x3b\x3f\x80\x01\xa2\xd8\xb8\x5b\x21\x35\x5f\xfa\x14\x99\x91\xee\xa0\x65\x88\x11\x68\x74\x89\x8b\x17\x7d\x17\xf8\x77\x84\x91\xc2\x62\x7d\xbb\x38\xc2\xf0\x0c\x2b\x90\x97\x32\xe0\x3d\xe6\x80\x12\x32\xe0\xb5\xa0\x2e\x9b\x62\x0a\x94\xd5\x05\x2b\x14\x72\x0a\x05\x19\x13\xfc\xe3\xf2\xd2\x27\xe1\xc5\x0c\xdd\x23\xa1\x56\x14\xce\x63\x18\x57\xa8\x90\x2e\x76\x99\x18\x59\x33\x9d\x15\x68\x1a\xf5\x24\xa3\xd3\x4a\xf2\xe8\x43\x04\x84\xe5\xd6\x87\xb9\xa2\x68\xd5\x18\x29\xa9\x31\xaa\x4a\x2f\x7b\xaa\x83\x4b\x35\x3b\x76\x67\xb7\xb4\x28\xe6\x74\x38\x41\x18\x87\x12\x55\xfc\x45\xc1\xe2\xbe\x9e\x19\x2d\x92\xf1\x6a\x63\xfb\x40\x00\x98\xe2\xd6\xc7\xb2\x5a\xb2\xd3\xde\x0c\x7a\x07\x62\x64\xe0\x0c\x23\xae\xda\xc1\x14\xa6\x24\x9c\x66\x33\x1b\xf1\x23\x60\x14\x63\x7f\x04\xf5\x7d\xab\x06\x26\x59\xab\x75\x36\xeb\x2b\xd0\xb2\xb9\x10\xd9\x26\x8d\x83\x22\xcd\xaa\xc8\xb6\x9e\x97\x8d\x79\xff\xf8\xf8\x08\x1a\x69\xe7\x81\x36\x95\x03\x77\x6d\xde\x66\x98\xf9\xb4\xce\xcc\x94\x02\x7e\xcd\x8c\x2b\x23\xe8\x3c\xab\x47\x7d\x2b\x3e\xaa\x86\xf5\xb7\xea\xde\x56\x79\x70\x60\xcc\xc1\x58\xe0\x3d\x0f\x76\xa6\xfc\xe8\xcd\x73\x26\x73\x8d\x22\x95\xa5\x79\xea\x46\xa9\xf9\x19\xf3\xdf\x79\xda\x8c\x66\x3e\x76\xe4\xce\xca\x83\x16\x92\xd5\xa7\xfe\x18\x48\xdb\xbe\x0f\xa0\x7a\x30\x19\xf8\x49\xf3\x62\x8f\xed\x47\x0a\x0f\xbc\x04\x0e\x69\xa3\xc8\xe5\xfd\x45\x10\x3b\x74\x1f\x8d\x8b\x49\x62\x0d\x9d\xc2\xf6\x87\x50\xc3\xd0\xc3\x47\xb3\x92\x8b\x06\xb5\xe0\x18\x14\xe0\x75\x2b\xc5\x4c\x3b\x2f\x55\x1c\x60\x18\x53\xa2\xa5\xac\x32\x8c\x03\x5e\xf2\xad\xfb\xac\x5c\xcb\xa1\x28\x2a\x9b\x9c\x4a\x8d\xff\x90\x7a\x96\x4c\x84\x7f\xe2\x58\x09\x9a\x4f\x09\xaf\xfb\xe4\x91\xb1\x29\xdf\x7e\x64\x3a\x2a\x33\x06\x64\x96\x8c\xe1\xbc\x30\xcb\x0d\x6a\x8b\x82\xc4\x79\x63\xba\xe2\x3d\x2b\xdb\x76\x1e\x58\xd7\x90\x0d\xfa\xd8\x9f\x86\x30\xe3\xd5\x81\x1a\x09\x7d\xc3\x8a\x38\xa6\x8e\xed\xb9\xb9\xc3\x47\x77\x58\x35\x9f\x0e\xc9\x96\xa5\xfb\xf0\x91\xcd\xf6\x2c\x9e\x61\x8e\x7a\x2f\x03\xc3\xcc\x6c\xd0\x43\xc3\x88\x84\x0f\x70\xfa\xf0\x7e\x8e\x6a\x26\xea\x00\x3a\x03\x37\x71\x8c\x11\x78\x30\x84\xcc\x08\x5b\x68\x01\xa6\xb4\x9d\x97\x41\xaf\xb1\x75\xde\x37\xd6\x16\x65\x54\x7c\xd0\x7d\xd2\x1f\x3c\x7a\x6a\xb4\x61\xd0\xb1\x4e\xe1\x58\x00\xcd\x31\xd6\x9b\xd7\x98\xef\x77\x8d\xd9\xe9\x0d\x61\x15\x61\x5d\x9f\x74\x1f\x3d\x1e\x3e\xc2\x2d\xe3\x0f\x5b\xdf\x60\x7a\xa1\xa9\x47\xf4\xd5\x76\x12\x17\x7e\xfc\xa1\x7a\x6f\xe6\x1a\x76\x87\x46\xb6\xaf\x4e\x20\x63\x23\xf5\x71\x23\xf9\xe9\x43\xc8\x60\xa8\x9a\x4d\xca\x62\x15\xc6\x15\x65\x81\xcf\x06\x65\x41\xd1\x52\xba\x21\x51\x16\x31\x51\x16\x2b\x45\x59\x84\x8a\xb2\x88\x6b\xca\x22\xca\x5f\x05\xaf\xac\x94\x82\xd9\xd1\xf5\x3d\xf2\x43\x66\xe3\xed\xc1\x3e\xda\x4d\xd1\x7b\x64\x4f\xac\x88\xa2\x13\xc8\x77\x81\xe9\x2b\x5f\xd8\x7e\x34\x1e\x3c\xed\x4f\x22\x8f\x9f\x3c\xee\xfb\x1e\x3c\x13\xa6\x8b\x5c\x7c\xb7\x0f\xa1\x86\xbc\x90\xa4\x0a\x23\xd2\x84\x49\x52\x04\x71\x85\xa1\xc9\x6e\x8c\x34\x37\x46\x9a\x1f\x18\x69\x7e\x60\xa4\xf9\xe7\x8d\x34\xff\xbf\x32\xd2\xf0\xe3\x23\x7d\x63\x8e\x34\x0e\x6a\x6a\x11\x9f\x8d\x91\xc6\xcc\x10\x4a\xd0\x48\x63\x35\xd2\xe0\x53\xa8\xc5\x07\xab\x8f\x77\xe5\x9b\x16\x9f\x87\x86\xc1\x07\x08\x2b\x83\x8a\x4c\x90\xba\x32\x4f\xce\xeb\xb2\x16\x1a\x4f\xb1\xbb\xd0\x59\x34\x43\x98\xe2\x76\x4c\xba\x73\xb4\x04\xf9\xa7\x94\x86\x80\xbf\xca\x20\x5f\x30\x16\xf8\xf2\x2d\x52\x2b\x05\x06\xfb\xb4\x6f\x6e\x00\xf1\xa3\x7b\x0e\x5a\x25\x9c\x0a\x7d\x75\x0d\x82\x18\x7c\x46\x82\x0c\xdf\xe9\x21\xa3\xbf\x25\xfe\x55\x5a\x0a\xe5\x8b\x61\x65\xa6\xbc\x85\x2e\xb2\x21\xbb\x0d\x53\xd2\xe2\xd5\xfe\xad\x64\x5e\x4a\xe5\x6b\x63\x22\xe8\xb3\x80\x3e\x2f\x66\x4a\xec\x43\xa6\x4b\xd3\x8c\x45\xfa\xc3\x5b\x71\xcd\xa3\x86\x58\x07\xb8\x34\xa8\xc8\x37\x04\x77\xbf\x96\x1f\xbb\xe6\xc7\x50\x8e\x97\x6d\x2b\x5a\x84\xc8\x54\x43\x62\x9b\x97\xf7\x5a\xad\xcb\x71\x1a\x2e\x05\xdf\x96\x6d\xdf\x08\x8a\x9d\x28\x1c\xe3\x62\x1f\xa1\xae\x0a\x32\x54\x8d\x77\x52\x32\xb0\x15\x69\x4e\x80\x70\x58\xcb\xd0\x69\x8d\x2f\x64\xc6\x1f\x19\xa6\x5f\x18\xdd\xac\x7e\x8b\x21\x4d\x2e\x09\x1a\x23\xeb\x47\x54\xd4\xe0\xf4\xb1\x15\x2a\x5e\xf1\x61\x89\x5f\xc8\x90\x6c\x83\x9f\xf0\xa9\xc2\x36\xd0\xef\x23\xa2\x34\x6f\x6e\x30\x9e\x11\x3e\x0f\x66\x78\x41\xbc\x8c\x09\x51\x35\x66\x75\xa4\xde\x18\xe3\x4a\xc8\x07\xbb\x03\x1b\xad\xa2\x8a\x07\x92\x2a\x26\x33\x86\x90\x8c\x78\x18\x7c\x3d\xd1\x5f\x07\x33\xe2\xd0\x91\x62\xf6\x55\xdd\xb2\x51\x6a\xce\x6c\xc6\x0d\xf1\xce\x4e\x1f\x48\x4e\x16\x1f\xf1\x7c\x62\xc5\x5e\x4e\xa0\x21\x27\x50\xe0\xe7\x5e\x8c\xaf\x18\xf3\x52\xc1\x86\xba\x13\xaa\xe6\x4c\x0a\x71\xdc\x8e\x9c\x11\xcb\xe8\xb1\x37\x94\x3d\x8a\x59\x4e\x7d\xc9\x8f\x8f\xef\x2a\xe4\xe6\x2e\x8d\x71\x71\xc4\x57\x93\xbb\xdb\xc0\x19\xfe\xe3\x50\x13\x18\xb7\x13\x28\xf4\xd5\x7e\x0b\xaa\x88\xbb\x92\x0d\x2c\x69\x0d\x36\x34\x1d\x4b\x5a\x83\x0d\xad\x81\xe0\x7b\x05\x71\xe9\x3e\xb6\x12\xc2\x7b\x28\x3b\xb0\x94\x41\x26\xf5\x5a\x08\xdd\xb1\x25\xa9\x90\xf5\x6a\x58\x03\xdd\xf6\x40\x36\x6c\x1f\xe8\xb0\x6c\xd7\xdd\xc8\x0e\x8b\xea\x3a\xd7\x83\xec\x05\xc6\xa4\xa0\x7b\xee\xa2\x53\x31\xb2\xb3\x29\x50\x2f\xe5\x34\x92\xec\x45\xd1\x60\x2f\xb2\x9a\xbd\x30\xb4\xe8\x2d\x48\x89\x37\x34\x71\xe4\x46\x01\x78\x0d\x7a\x87\xd8\x51\xb2\xa1\xef\x15\x66\x20\xb8\xcf\xae\xe3\x41\x15\xb4\xaa\x5f\x87\xac\x1a\x30\x55\x75\x83\x00\xfe\xb3\x6c\x1b\xe4\x49\x0f\x05\x52\xc1\x4a\x6f\x04\x38\xe4\xbf\x29\x08\x0c\x27\xbd\x98\x8d\x0a\x94\x43\xa2\x3e\xad\xc0\x08\x43\x40\xc2\xe9\x05\x2b\x6a\x9b\x25\xe3\x96\x5c\x21\xb3\x97\x5a\x5d\x16\xb1\x3e\xd6\x85\xa6\x2d\xb2\x78\xcd\x4d\xd4\x5a\xe5\x56\xb7\xa6\x64\xa2\xa6\xf3\x4b\x7f\x1a\x81\x37\xda\x6a\x8b\xaf\x84\x8b\x03\x35\xd6\xe9\xe6\xc5\xb6\x6a\x3e\x49\x22\xc4\x01\x28\x6a\xf0\x37\xaa\x6f\x27\xa4\xf6\x61\xe0\x7f\x29\x14\xa4\x6e\x3e\x40\x83\x5c\xf5\x24\xcd\x2c\x47\x25\xd4\x10\xa1\xa5\x55\x79\x28\x57\x6d\x84\x59\x6b\x4b\x95\x04\x7e\x11\x6d\xc5\xfc\x86\x1b\x46\x1c\x5f\x98\x29\xc7\xdc\x7b\x62\xa8\x14\x9b\x85\x1e\x62\x98\xd6\x2d\xd9\x42\xc1\x03\x5e\x2b\x6f\x88\x39\x7f\x6f\x55\x63\x90\x85\xff\x2a\x9b\xba\x0b\x0a\x0f\x2f\x6f\xf0\x09\x57\xb8\xd6\xf0\xe5\x08\x39\xce\x60\xd1\x88\x99\xa7\xc5\x6f\x41\x75\x05\x0d\x00\x6f\x3a\x15\xe1\x29\xd9\xb5\xa5\xd3\x70\xc6\xe4\xaa\x20\xa1\xf3\x2f\x8c\x60\x57\xc8\x78\x20\xb2\x62\x17\xa0\xb6\x7c\x02\xb2\xa2\x7a\x76\xe0\x61\x0b\x14\x46\xe3\x83\x0c\x75\x5a\x89\x17\x65\x77\x90\x46\x97\x5f\xba\x5b\xe5\x20\x01\x50\x76\x9e\xae\x2d\xdb\xeb\x3e\xd2\x51\x6b\xbb\xbb\xfd\xb4\xca\xbe\x09\xa8\x04\x9d\x8d\xe4\x2c\xb3\x51\xdd\x39\x95\xf0\x5c\x4e\x42\x8c\x7d\x8c\x9d\xaa\x41\xec\x61\xfd\xba\xbb\x85\x72\x5b\x9e\xf5\x74\x71\x1c\xe4\x8e\x97\xd5\xbb\xa1\xb9\x6a\x9d\xdc\xca\x07\x13\x57\xa1\x83\xda\x04\x80\x7b\xe1\x2a\x8a\xe7\xb0\x69\xe1\xf1\x2a\x88\x4b\xd1\xc1\x59\xa3\xf9\x06\xaa\x8a\xbc\xca\xdf\xe6\x3c\x8b\x4c\x1c\xfc\x63\x5b\x66\x41\x56\x8a\x72\xfe\x61\x4f\xab\x6d\x68\x93\xaa\x01\xc5\x2b\x0c\x15\x0e\x5d\xdd\x90\x94\x3e\xe9\xe3\x69\x57\x2b\x8d\xf1\x63\xa4\x84\x63\x64\xab\x0b\x3f\x4a\x94\xa4\x18\xba\xaf\x43\xed\x12\x0d\x70\x47\xe3\x59\x75\xfe\x30\x66\x40\xa3\x07\x25\x8f\xf6\x7a\x20\x03\xdc\xd3\xc6\x4a\x4f\xcb\xaa\x17\x11\x5e\x54\x22\x25\x17\x55\x33\x59\xd5\x4c\xd1\x30\xf5\x4c\xa2\x86\xf8\x5f\xb7\x68\x68\xc0\x9a\x19\x68\xca\x0d\x9d\x57\xd4\xd2\x60\x50\xba\xb7\x97\x2f\x33\x6b\xa9\xa2\xc9\x25\x4d\xaf\xb0\xc4\x50\x6f\xe8\x8e\xdc\xdc\x4c\x01\x79\x1c\x76\x1e\xfb\x20\x41\x2f\xba\xb0\x12\xe0\xc5\x78\x7e\x88\xd6\x0c\xf5\x55\x74\x97\xda\x23\x8a\xee\x52\x7b\xa4\x91\x3e\xf4\xf0\xb9\x4f\x1a\xcd\x9d\xa9\x12\x0b\x5a\x43\x51\xee\x70\x7a\x71\x0c\x9d\x4b\xd4\x84\xc9\x78\xcf\x32\x59\x71\xd5\x91\x37\xa7\x78\xef\x51\x21\x31\x65\x31\xab\x82\xf0\x3e\x30\xb4\xb0\x71\xd4\x36\xe8\x18\x18\xd7\x26\x21\x36\xaf\x65\x62\x95\xfc\x8a\x22\xd3\x09\x32\xeb\x18\x97\xb4\x7d\x05\xc5\x3e\x3a\x50\x7f\xde\x9c\x88\x4c\xcc\x4b\xc0\x39\x0b\x40\x3a\xe6\x9d\x3f\xcd\x65\x06\xee\xa4\x41\x5f\xaf\x9a\xc9\x4b\x7c\x95\xb2\x14\x11\xc5\x56\x65\x23\x5f\x89\xe4\xa4\xaf\xcb\xcb\x57\x43\xb7\x21\x3b\x59\x46\xed\xe3\x42\x37\xb7\x4a\xe7\xf3\x92\x4b\xe3\xf1\x0c\x30\x32\x8b\xe4\xcc\x89\x53\x5e\xc0\xb9\x41\x41\x5b\xe9\x08\xb7\x32\x83\x36\xe2\xc6\x6c\x8c\xe1\x4d\x71\xe3\x49\xff\x3d\x7c\x0a\x90\x1a\x31\x2f\x0e\x6d\x0d\x52\xed\xe5\xa2\xbd\x97\xe7\x51\xd3\x5e\xe5\x62\x13\x84\x6f\x2f\x12\xb1\x05\x44\x6b\xbc\xa0\x26\x5b\xbd\x6e\x32\x71\x85\x4a\x6e\x33\x15\xd0\xaf\x99\x6a\xe0\xdb\xb5\xaa\xff\xde\xca\x0c\x51\x69\xa3\x3b\x4a\x75\x48\x2a\x61\x52\x02\x12\x5f\x9b\xb9\x45\x57\xcf\x4e\xf7\xab\xaf\xbe\xc2\x00\x7c\x63\x0c\xb4\x95\x39\xc6\x56\x38\x8b\xf6\x43\x5f\xe4\xa6\x68\x15\xab\xce\x80\x78\x06\x36\xa3\xa2\x98\xe0\xab\x8b\x5f\x17\xb6\xbe\x1d\x51\xe6\xdd\x51\xde\x15\x05\xf8\xa9\xf3\xee\x28\xef\x92\xc2\x0b\xe3\x6d\x74\x0d\x10\x17\x57\x06\x48\x76\x43\x8f\x50\x9b\x46\xa2\x16\x0e\x1a\x47\xd3\x52\x8c\x29\xd1\xc3\x98\x12\x64\x67\x8a\x16\x43\xd5\xad\x7a\xdb\x88\xfc\x67\xe8\xb2\x88\xee\x96\x7b\x19\x6a\x84\xe0\x10\xf7\x19\xb9\xab\xc5\xe8\x1c\x01\xf0\x94\xdc\x04\x4a\xc8\x50\x42\x7a\xa9\xd2\xf1\x52\xce\xf1\x50\x82\x58\xf4\x34\x18\xce\xd8\x75\xa4\xee\x34\x64\x74\x27\xd3\x1c\x5f\xb1\x05\x73\x3d\x22\xfc\x4c\x9a\x07\xd4\x4b\xd4\xeb\x06\xe0\xf9\x64\x14\x8f\xd3\x51\x8a\xbe\x19\xba\x26\xa8\x37\x55\x57\x6e\x6d\x30\xac\x3e\x1c\x69\xbc\x21\x42\x5a\x68\x96\xe6\x86\x0a\x80\x16\x2c\x47\x68\x36\x6d\xd4\x79\x05\x75\xe1\xe5\x0e\x91\x15\x90\x1a\x75\x03\x65\x2b\x93\xeb\x01\xe7\xf2\xa6\xb9\x90\x9b\x3d\x1c\x85\x78\x07\x8c\xf1\xe1\xf8\xf8\x08\x2a\x08\xd1\x15\x2e\xe4\xa1\x91\xc0\xf0\x96\x85\xd1\x66\x62\xcd\xc7\x57\x37\x37\x57\x9c\xcf\x8f\x8f\x61\x86\x4e\x61\x16\x27\x6b\x1a\x00\x9a\x7e\xe3\x13\x0f\x19\x85\x9c\xf4\x80\x91\xd0\xb3\x52\x62\xd4\x2a\x98\x26\x19\x7e\x69\x8d\x91\x74\x17\x68\x60\xb5\x43\x53\xab\x25\x3e\x9d\x01\x98\xc3\xfe\xa1\xd9\xa9\x9e\x19\x39\x23\x0c\x8d\x0d\xf9\x9a\xa1\xad\x21\xdf\xe9\x0b\x30\x70\xe3\x9c\xc1\xb7\xcc\xb0\xfa\x83\x8c\x40\xfa\x6c\x5d\xc8\xe9\xa0\xf2\xde\x1e\xa1\xd9\xc9\x19\xab\xf7\xc0\x65\x43\xad\xbb\x8d\x24\x8d\x67\x1c\xa8\xe4\x8e\xe3\x74\x49\x59\xe7\x22\x16\x85\x78\x60\x96\x60\xad\x6f\x58\xd0\x10\x8c\x47\x7b\x16\x41\xd5\xde\x96\xf4\xd9\x96\x17\x2e\xcf\x1c\x49\x84\x02\x46\x91\x2f\x3b\x34\x98\x71\x38\x46\xd9\xab\x59\x01\xba\xb8\xac\xe2\x07\x90\x97\x4a\x47\x36\xb4\x80\x9c\x94\x6a\xc4\x10\xbc\x47\x6d\x03\x9b\xcc\x15\xb8\xa3\x2b\x58\x10\x69\x58\x40\x96\x9f\x14\xbe\xfd\xa6\x56\xbf\x17\x2a\x3f\xec\x3c\x19\x3b\x70\x94\x3a\x3c\x45\x01\x50\xa6\xae\x04\xed\x3e\x72\xad\xcc\x4b\x29\x62\x67\x50\x5f\x56\x4d\x81\xf7\x6b\xc6\x69\xe8\x50\x00\xbe\xc0\xf6\x20\x33\x5e\x14\x0d\x45\xf0\xf6\x1b\x59\x6a\x24\xba\x44\x80\xbb\x21\x34\x12\x3b\x11\x2c\x15\xd1\xe1\x2e\x06\x4d\x88\x9d\x52\x1a\x73\xe9\x4c\x99\x4e\x36\x74\x08\x6d\xe8\x2c\x39\x17\x5e\x31\x55\x93\x81\x19\x97\xfb\x6d\xd4\x30\xb2\xd4\x2b\x51\xd1\x29\x4a\x86\x4e\x31\xb5\x81\x71\x33\x54\x02\x91\xe9\x8c\xb7\x57\x14\x30\x6b\x05\xa4\x26\x62\x5a\x78\x83\x56\xf9\x67\xad\xe5\x10\x3d\xc0\x7b\x11\xcc\x7e\x84\x37\x8a\x87\x1e\xde\x41\xd8\xcd\x5d\x4e\x64\xb0\x4b\x6f\xef\x5d\x8a\xaa\xb6\x76\x4d\x32\xe3\xd5\x1e\xde\xef\x6b\xbc\x5f\xf5\x89\x19\x5c\xa3\xe7\x45\x44\x89\x4a\x7e\xbb\x59\x2b\x83\xcd\x86\x8d\xc2\xf2\xa0\xa8\xda\xd4\x42\x44\x6d\x99\x56\x37\xa8\x66\xb6\x9e\x5a\xf8\xea\x1b\x7d\x7b\x6f\xd2\x0c\x03\x57\x23\xd3\x43\x82\x5a\x5c\x43\xa3\xbd\x77\x87\xa9\x8d\xaa\x5c\x93\xc8\x00\x82\x0d\xc8\x90\x9e\x26\x6f\x0c\x79\xfd\xfd\xab\x8b\xd7\x8c\xa9\x05\x86\x9c\x52\x3c\x69\x1c\xf1\x5f\xee\x5f\xe2\x07\x82\x94\x2e\xf5\x32\x43\x7e\xb9\xd2\x8d\x5a\xde\x18\x43\xc1\x78\xd2\x70\xd0\x76\x3e\x1e\xe8\x39\xbe\xcc\xb7\x6c\x8e\xaf\x73\xf3\x4a\xb7\x6f\x5a\x94\xc3\x16\xe8\xa8\x13\xba\xd1\x08\x0e\x42\x21\xa9\x1c\x2c\x4a\x5e\x71\x1e\xa5\x21\x71\x37\xdf\x91\x6b\x9c\x87\x57\x85\x8f\x2a\xed\x20\xd2\x75\xb0\xae\x65\x0f\x1d\x00\xfb\x36\x93\x32\x73\xe4\x16\x29\xa0\x2f\x7c\xd1\x2e\x5a\xd8\xa3\x12\xbb\x13\x99\x02\xe5\xe8\x93\x5c\xda\x1e\x88\x71\x31\xa1\x4b\xe1\xfc\xa9\x68\x84\x8a\xf9\xb5\xb5\x94\x48\x06\x4b\x9f\xc9\x49\xe3\xcd\xb2\x7d\x6c\x4b\xd1\xc9\x26\xbd\xf7\xcf\x1e\xcc\x94\x56\xca\x24\x4b\x25\xa9\x80\x71\x27\xd4\x3d\x12\xf8\x88\x5c\xa3\x1b\x7e\x2c\x51\x53\xe8\x2a\x8f\x4d\x75\x2b\x64\x24\x2f\x18\x05\x46\x7d\x5a\x56\x03\x8d\xc6\x29\xce\x28\x9a\xc9\x49\xe1\x04\x85\x03\x88\x28\xcc\x28\x72\xe6\x50\x02\x0e\xc4\x22\x4e\x53\xb2\x1d\xc3\xa2\x78\x98\x90\xc2\xc5\x9b\xd1\x0c\x89\x6f\x63\x62\x26\x1f\xa8\x88\x7f\x97\x56\x52\x56\x58\xf4\x12\xdb\x49\x6e\x19\x56\x77\x67\x56\x6a\x4b\xe5\xbc\xf5\xd7\x86\xe9\xe1\x4f\x7b\x33\x49\x12\x66\xba\x73\xb8\x7f\xbf\x7a\xdc\x93\x74\x07\xde\x0b\x7c\x9a\x90\xad\x15\x5d\xb3\x27\x4d\x16\x6c\x38\xa1\x57\x22\xcb\x05\x79\x7c\x14\xfb\x5f\xe5\x3d\x99\x3c\x40\x71\x95\xbc\xd0\x12\x6a\x4a\x3d\x32\x2f\x07\x12\xc7\xd6\x97\xf9\xe2\x4a\xd2\xe7\x82\x3e\xef\x2d\x66\x4d\xbf\x06\xdd\xcb\x28\x17\x21\x05\x41\xa6\x90\xe0\x5e\x75\x3b\x22\x12\xfa\x64\xf2\x62\x35\x65\x72\x3f\x18\xa3\xaf\x59\x3f\xab\x11\x01\xe4\xf0\xe0\xc7\xc3\xc9\x4f\x91\xff\x0f\xfa\x8e\x66\x93\x1f\x4a\xff\xa7\x4a\xd1\x93\xca\xab\x50\x19\xb9\x96\x05\x74\x5d\x43\x02\x2f\x6b\x0c\x45\x63\x70\x91\xc6\x4a\xa7\xc8\x57\x13\x4a\x65\x41\xd5\xe3\x7d\x9f\xf3\x3a\x82\x15\xe6\x87\xf9\x99\xa7\xeb\x20\x32\x62\x09\x16\xf7\xc4\xb8\x4a\x60\x0d\x90\x17\x7e\x55\xae\x2f\x45\xa6\x82\x8e\x25\x58\x0b\x9d\xae\x83\xcd\xec\x55\x82\x91\x2e\xa8\x60\x51\x15\x7c\x83\x4a\xa7\x43\xa5\x23\xcd\xde\xda\x86\xf5\x86\xb0\xbe\x29\xa9\xeb\x61\x1c\xac\x37\x9f\xd6\x68\xa6\x1b\x45\x87\x51\xb3\xae\x4f\x2b\x2e\x74\x71\x81\xc5\x8b\x28\x7c\x9b\x1f\x9a\xb1\x3f\xe4\xb9\xd7\x79\xbe\x4d\xb3\x75\x60\x4c\xbe\x89\xe8\xbe\xd0\x98\x0f\x33\x27\xb0\xad\x0f\xd5\xf7\x97\x8a\x6a\x87\x91\xf3\x70\xbc\xe9\x66\xc7\xf7\xad\x6e\x8c\xfd\x77\xdb\x0c\xb2\xf7\x67\x74\x9f\x40\x8b\xa6\xb6\xa3\x7e\x69\x09\xe0\xc5\x98\x1a\x14\x76\xe1\x0c\x77\x8c\x1a\xff\x6a\xd6\x48\x80\x0e\x00\xce\x6f\xf2\x33\x5e\xab\x66\x64\xfe\x4d\x73\x92\xe4\x2d\x2f\x63\x65\x0c\xfa\x5a\xf5\x49\x18\x80\x18\xa5\x81\xf4\x59\xd6\x31\x44\xd0\x34\x60\xa0\x24\xe1\x12\x3c\x19\x31\x2b\x8a\x8a\x7b\x87\x9a\x10\x48\x17\xbd\xac\x8a\x86\xd5\x1d\x3c\x1a\xf3\x68\x52\x3a\xd0\x8c\xdf\x3d\xd1\x2f\x8f\x7c\x54\xd7\x93\xa8\x13\xde\x86\x36\xc3\xd6\x78\x0d\xd3\xf0\xb5\x57\xda\x4e\x49\x3a\x43\x6e\x34\x8c\xef\x94\xe2\x76\x1f\x51\xf2\x70\x86\x16\xcc\x86\x78\x78\x7f\x86\x71\x36\x75\x38\xb6\x80\xa9\x39\x30\x5d\x64\x5a\x14\x9a\xca\x21\xbd\x4e\x14\xcc\x88\x42\x69\x6b\x26\xdd\x44\x4b\x7d\x3d\x29\xeb\xe4\x1d\x34\x39\x9e\x3e\x9d\xe9\xe0\x35\xd0\xe2\x82\xb6\xd9\xeb\x4c\x2c\xa2\x6d\x4d\x11\xab\x6b\x65\xe8\x62\xcd\x4c\x5e\x09\x56\x09\xee\xa7\x4f\x66\x64\xbd\xf7\x64\xc6\x3b\xdd\x8e\xfb\x75\x64\x29\x25\x1d\xe4\x1c\xd2\xa5\x6b\xd8\x04\xef\x2c\x3a\x4c\xd4\x2d\x40\x3f\xb4\xca\xe4\xa0\x52\x5c\x54\xb5\xa0\x59\x22\x3c\xef\xd6\x97\x69\x7c\x7b\xdb\x6e\xee\x77\xe4\x24\x9e\xce\xf0\xf2\x78\x52\xe7\x54\x7a\x18\x49\x83\xf3\x0e\x93\x7d\xa2\xbe\xb8\xd0\x89\x51\x3d\xbb\xaa\x27\xa6\x85\xff\xd7\x06\x14\xf4\x0e\x6d\x9a\xc4\xd8\x32\x6e\xb7\x3f\x30\xca\xfe\xde\xa0\x88\xbe\x46\x62\x6d\x58\xe3\xfa\x04\x8d\x17\x77\xb1\xd2\x04\x5f\xe6\x96\xf0\x20\x8b\x39\xc3\x85\x9e\xe1\x42\xce\xb0\xed\x3e\x70\xad\x8e\xe8\x1c\x61\x70\x08\xd4\x7a\x39\x56\xe7\x4b\x5c\x32\x53\xe6\xf9\xaf\xc3\xf8\xa2\x16\x3f\x2a\xb7\x03\xec\x7b\x7f\x9c\x4c\xfa\x3e\xd4\xe5\xd5\xc3\xa1\x7b\x83\x30\x72\x53\x1d\xb3\xa5\xb0\x0f\x23\x05\x55\x93\x36\x3d\x52\xb5\xc8\x57\x2f\x69\x84\x58\x36\x28\x5f\x0a\x01\x53\x5d\x91\x94\xee\x21\x91\xc2\x20\x7d\x12\x1d\x54\x14\x4b\xb0\xf4\xb3\xd0\x89\x20\xbf\x29\x60\x1b\xd0\x82\x80\xca\x59\x56\xd6\x44\x31\x52\xf6\x5a\x62\x2c\x1a\x82\xdd\x69\xf7\x32\xc8\x0d\x58\x29\xee\x45\x34\xae\xa8\x6b\xce\xcc\x9a\x0a\xac\xa9\x09\x75\x35\x31\x0a\x20\x4d\x67\x65\x72\xfa\xfc\x6d\xed\xb6\x52\x55\x87\x4e\x71\xaa\xab\x40\x8d\xa5\x58\x5f\x0b\x2d\xe8\x50\x25\x00\xe7\xb2\xea\x3a\x83\x44\xfa\x8b\xa9\x48\x11\xc6\x6e\x2d\x31\x46\x14\xcb\x0d\xa8\x54\x5a\x21\x9e\x33\x5e\x7c\x39\x98\x0c\x7d\x72\x56\x8e\xf2\x6f\xa3\x24\x02\x04\x98\x7b\xb1\x34\xec\x16\xca\x3b\x22\x1f\xc7\xa3\xd8\x75\x2b\x26\x7e\x45\xb1\x00\x56\xa3\x15\x7c\x53\x77\x2c\x44\x56\x6c\x3b\x2b\x7b\x64\xbc\xaa\x23\x47\xe2\x10\xe3\x2b\xd6\x74\x9a\x8f\x8c\xca\x16\x40\x05\xad\xc6\xfd\xd1\xca\xf3\xda\xd5\x61\xa6\x18\x38\xbf\x74\x1a\xcf\x4e\x03\xea\x84\x8a\x46\xa0\x95\x4f\x90\x84\x31\x08\xc6\xe1\x28\x87\xe2\xa3\x14\xed\x00\x88\x90\x23\x45\x78\xa5\x72\x53\x33\xd8\x46\x9a\x5a\xf7\x77\xd4\x5e\x60\xad\x07\x3c\x8b\x47\xfb\x76\x6b\x93\x82\x9f\xc5\x7e\x47\xd7\x02\x07\xb2\xd8\x6d\x44\xba\x78\x20\xb1\x50\x0d\x49\xb4\x13\x45\x56\x91\xa9\x70\xb2\xbb\x03\x96\xf4\xd4\x82\x02\xb9\xa9\xfd\x43\x42\x2e\x90\x92\x18\x08\x6f\x30\xac\x05\xcc\x18\x0c\x88\x7b\xc6\x47\x5a\xd0\xfb\x18\x86\xa4\x17\x59\x21\x31\x0d\x2e\xec\x70\x20\x5f\x27\x28\xeb\xf4\xd1\x66\x07\x26\xe1\x0e\x2c\x8f\x50\x83\xd2\x90\x16\x56\xc8\x1e\xf0\x7b\xca\xcc\x63\xfc\x5d\x85\x5b\x6a\xd5\xc7\x81\x93\x2d\x91\xcc\x8f\x91\x0c\x4a\x07\xbf\x83\x9e\x21\x9c\xff\x8c\xf3\x9e\x7d\x1e\xf9\x58\x9d\x72\x71\xd7\x29\xcf\x88\xc4\xca\xda\x67\x29\x31\x49\x2c\x81\x43\x56\x79\x0e\xee\x96\x9a\xc4\x12\x4c\xd2\x63\x59\xeb\xb0\x9b\x91\x01\x55\x9f\xfe\x92\x15\x53\x66\xb1\xdd\xa4\x49\x23\x3a\x50\x7a\xcf\xb0\xe4\x4c\xe2\xad\xd2\xd5\x5c\xd6\x60\x47\x98\x43\x2b\xb0\xf2\x3b\xd6\xf7\xbb\xe6\xfa\xca\xd5\xcd\x1a\xab\xfb\x63\xf4\x31\x93\xdd\x62\x52\x43\x78\x8f\x20\xfe\x5d\xa6\xa7\x3f\x47\x7b\x21\xb3\x6a\x58\x1a\x4d\x2d\x40\xf6\x4b\x81\x88\x16\x30\xb7\xa2\x14\x49\x22\x53\x4c\x80\x1a\xc1\x04\xa6\x6e\x6c\xc7\x60\xac\xfd\x1e\xd0\x62\xde\xc0\xfe\x52\xeb\x08\x1b\x71\xa3\x1b\x51\x57\xf7\x14\x56\x77\xe8\xe0\x1e\x14\xae\x00\x3e\x53\xed\x55\x14\xc2\x57\x12\x81\xbd\x3d\x97\xdd\x0f\x20\x92\x51\x22\xcd\x9e\xd0\xff\x2a\x1e\x99\x9a\x72\xf2\x01\xc8\x6a\x49\x67\x7a\x4a\xac\xe4\x2a\xc8\xf1\xf6\x41\xe4\x15\x6f\x6e\xe4\x78\x23\x3d\xde\xa8\xa6\xa3\xc4\x14\xe6\x63\x56\x85\x8b\x2a\xba\x81\x8d\xd1\x9b\x3e\x83\x17\x8a\x80\xaf\x40\x16\xb9\xe0\x1f\x0a\x5f\x13\xe4\x81\x5f\x65\xa4\x48\x67\x51\x55\xe9\x6b\xd4\x68\x1b\xc7\x02\xfd\x8d\x3e\x1c\x34\xda\x0d\xb8\xa2\xb3\x43\xa0\x16\x29\xba\x4b\x59\x79\x25\x6b\x10\x69\x85\xdc\x0a\xdd\x18\x85\xe2\x7d\x1b\x1d\x6a\x43\xbb\x67\xd5\x62\x0a\xb7\xbe\x30\x13\x45\x21\xa1\x9b\x3b\x01\x64\xcd\xed\x76\x8f\x65\xaf\xda\xfd\xae\x3a\x4d\x9c\xc5\xff\x7a\xcf\x15\xf2\x94\xe6\x8a\x6a\x18\xf6\x5d\xe3\xb8\xe9\x37\x47\x62\x14\xa5\x41\xb9\x58\xc8\x6b\x96\x71\x72\xaa\x71\x7f\xb8\xc6\x78\xee\x1c\xf3\xd7\x41\x32\x6f\x8e\x96\x85\xf7\x8c\x77\xcf\xb8\xfa\xf4\x04\x52\x42\x1e\x68\x6b\x08\x9c\x82\xd3\x52\x5e\x85\x5b\x4e\x63\x0f\x1e\x16\xf8\xd1\x8b\x31\x48\x87\xb5\xf0\x72\x73\xc8\x81\x3b\xc4\xd8\xb3\xc6\x90\x73\x77\xe5\x84\xa8\x0d\x8b\xd1\x57\xb1\x16\xaa\xa4\x7c\x85\xde\x34\x81\x6d\x0e\x90\x3a\x7f\xff\x72\xfe\xbf\x1d\x9f\x41\x26\x1d\x1e\x6a\x6b\xac\xe6\xce\x80\xfc\xc6\xc2\x06\x48\xb2\xe0\xb2\x1e\x9a\x0a\xa3\x98\x9a\x15\x7b\x6f\xdd\xef\x9f\x1b\x4c\x3d\x00\xda\xd3\x2a\x43\x3b\xe8\x5c\x95\x05\x88\x44\x00\x1f\xd2\x5e\x4e\xdc\x85\x22\x7e\xd6\xe2\x05\x0d\x02\x9b\xa6\x14\x69\x0b\xa2\x47\x96\x66\x6c\xfa\x44\xab\x1a\xa1\xa2\x02\xad\xc0\xce\x46\x76\x30\x05\xd2\x65\x86\x24\xd1\xbb\x32\x48\x0a\xbc\x82\x32\x61\xa2\x97\x1d\xb2\x86\x4a\x4d\xd9\x0c\x19\x51\x93\x61\xdb\x84\xc2\x1a\xf5\xfd\x62\x5a\xcb\xcf\x02\xa6\xa3\x29\x56\xe2\xa8\xcf\xe3\x0e\xb4\xb0\x29\xb3\xbb\x8b\x28\x2e\x04\xd0\xc8\xb6\x74\xe9\x45\xdb\x62\x25\x79\x4a\x3f\x57\xf2\x14\x29\xc9\x53\x5a\x8d\x36\x3f\x30\xd3\x01\x66\x90\x84\x4e\x7b\xc9\x6a\x5c\x86\x44\x0c\x99\x26\xfd\xb4\xa0\x5b\xff\xc7\x62\x32\xc5\xfb\x73\xe0\x1f\x4a\xab\x81\x4d\x93\x53\xeb\x4b\xf9\xf6\xa9\x76\xb3\xc2\xcf\xf8\xd1\x90\x76\xcf\xee\x21\xfc\xd4\xba\xde\x62\xd7\x0d\xbb\x98\xf4\x5e\x4a\x4f\x4c\x0f\xd9\x14\xa6\xa6\x50\x25\x72\x28\x68\xa5\xdd\x88\x05\x59\x9a\x51\xe5\xb5\x0a\x42\x45\xb7\x4c\xab\x0f\x68\x17\xa1\x6f\x67\x18\xb5\x08\xa9\x4f\xe3\xcd\x60\xdb\x90\xc8\x07\x79\xb4\x69\x5d\xed\x4c\x4a\xd9\x64\x1c\x68\xa0\x95\x3e\x63\x71\x4d\x11\x5d\x76\xc7\xda\x99\x56\x99\xa2\x5a\x3b\x34\xb3\xe6\x48\x3b\xc1\xc2\xf9\x45\x2f\x72\x31\x2e\x3c\x2b\xdc\x41\x2f\x9a\xdd\x43\xb0\x55\x2b\xd0\x12\xba\x89\xf6\x39\x34\x29\x2b\x31\xa6\xeb\x75\x4d\x31\xb3\xb0\x67\xbe\x3c\x3f\xb7\x77\x52\x38\x1f\x39\x27\x48\x25\x24\x9f\x49\x7a\x50\xc0\x61\x3a\x0a\xe2\x73\x77\xfa\x34\xa1\x7d\x8d\x51\x1d\x71\xe7\xde\x09\xaf\x84\xde\xb9\xa6\x25\x56\xba\x6f\xe4\x21\xb3\xbb\xc9\x6d\xa5\x1e\x55\x1c\x08\x5a\x9d\xa8\xa9\x28\xda\x63\xbb\x7f\x77\x49\xb2\x1b\x57\x96\x66\xa6\xf8\x04\x99\x6d\xf1\x39\x32\xdb\xe2\xae\x31\xd3\xf8\x1a\x97\xea\x94\x69\x9d\x6a\x38\x10\x44\x69\x43\x7f\x15\x25\x89\xc8\xe4\x75\x63\x06\xb8\x6d\xe6\x49\xcb\x62\x3f\x4f\xd0\xcc\x43\x01\xb2\x9e\x35\x63\x3e\x85\xcd\x2c\x22\x99\xb7\x32\xc4\x8d\x0c\x78\xe9\xff\x26\x68\xe7\xc9\xd3\x5a\x6a\xa5\xe4\x54\x09\x3a\x6b\x15\x1e\x40\x87\xcc\x76\xa4\x58\x6a\x60\x18\x6d\xa5\xb5\x2f\xbb\x96\x56\x56\x71\x36\x49\xf9\xa5\xe2\x6f\x02\x09\x6e\x95\x93\xcc\x47\xdb\x2a\xc3\xc6\xc2\x89\x5c\x54\xe0\x63\xa8\x30\x07\x43\x42\x79\x81\x13\x21\x19\x88\x5e\x0f\x21\x05\x29\x1b\xcc\x5c\x0c\xd0\x56\xc8\x2f\x4b\x8a\xbd\xe3\x62\xec\x27\x72\x39\x07\x5a\x15\x63\x3f\x49\xab\x8f\x39\x5f\x79\x39\x5b\xf3\xa5\xb7\x60\x3b\x3e\x77\xe6\xee\xda\x59\xb3\x33\x2e\xbc\x8c\x6d\x79\xee\x2c\xbd\x95\xb3\x60\x97\xdc\xea\x8f\xd7\x13\x6f\xe0\x0f\xcc\x78\xbb\x67\xce\x99\xb3\xf3\xb6\xce\x16\x7d\xd7\xad\xad\xb3\xf6\xe6\xce\xa5\xdd\xc3\x8b\x62\x2c\xf8\x3c\xf7\xd6\xf2\xf5\x9c\x12\x5d\x95\xf8\x56\x26\xba\x2a\xf1\x05\xbf\xf0\x36\xec\x19\xbf\xf6\xae\xd8\x2b\x7e\x0e\xcf\xcf\xf9\x5b\xef\x4a\x83\xcf\x17\xce\x0b\xf7\x99\xf3\x6c\xfc\xca\x79\xe5\x3e\x77\x9e\xd3\xed\xfd\xe7\xd0\xc0\x5b\x38\x6e\xd3\x0b\x2f\x64\xd7\x48\x0b\x4d\x2f\x1c\xd1\x3b\x63\xd7\xf8\x77\x66\x5a\xc0\xb5\x4f\x95\x09\x7f\x70\xff\xc5\xf5\x6d\x9e\xb0\x89\xf1\x6a\x81\x00\x65\xd2\x3a\x44\x26\x4c\xef\x14\x69\xaf\xe9\x8c\xcc\x9b\x70\x52\xb5\xb2\x6a\xc9\x5f\x10\xc6\xdd\xe0\x6f\x86\x0a\xb7\xc5\xe9\x0a\x99\xa4\x30\x88\x63\x79\xe1\x08\xc6\x3f\x5a\x40\x49\x7b\xa2\x82\xc3\x4c\xdd\xa5\x99\x8c\xc6\x59\xee\xa6\xf5\x65\x66\xfb\x79\xed\xa6\x0c\x7d\xa4\xe6\x2b\xa2\xa3\x4e\xc3\xa4\x58\x1f\xed\xb8\x92\x16\xcb\x70\x0f\x92\xbe\x79\x86\x4a\xd3\x57\x68\x73\xf2\x0a\xe3\x8c\x2d\x51\x67\x1a\x75\xdf\x0a\x0c\x4c\xd0\x7d\x52\x5b\x5d\x6c\x3f\x1d\x95\x14\x84\x48\x8a\xee\xee\xd3\xf5\x4b\x05\x49\x28\x01\x62\x89\x45\x94\x88\x83\xfa\xac\x43\xc2\x03\x2a\x58\xde\xd2\x5d\x2d\x9f\xa9\x96\x4a\x79\x2d\xe1\xe2\x5a\xc2\x95\x4c\xe0\x9c\xf9\xc0\x5a\xbe\x88\x89\x85\x47\xbf\x83\x65\x6a\xd3\x74\x40\x4b\x29\x41\x3a\x91\x7c\xce\x0d\x62\xd4\xc5\xa0\x01\xd5\x96\x4d\x98\x22\x57\xe5\xa5\xa9\x2a\xda\x98\x39\x28\xbb\xdb\xf9\xcb\xb8\x7d\xf4\x2a\x6d\xda\xa7\xd2\x0d\xc6\xe6\xad\xf0\xa4\x11\x9a\xa2\x12\x83\xfc\x4d\x50\x89\x51\xd9\xab\x2a\x75\x6f\xe7\xfb\x0e\x23\x35\x87\x8b\x2b\x30\x2d\x66\x78\x41\x06\x9e\xf7\xce\x6f\xb2\x40\xcd\xab\xa3\xd5\x9d\x51\x4a\xea\x46\x0c\xe5\x43\xd5\xaf\xf5\xff\x46\xbf\x7e\xc3\x7e\xa9\x1e\x01\x84\xab\x5a\xac\x54\x30\x07\x1a\xde\xfd\xaf\x4d\x48\x35\x15\xfb\xf3\x70\xa8\xe1\xb3\xb4\x65\xdb\xa4\x98\xb4\x87\x13\x5a\x36\x9f\x20\xed\x05\x3c\x2a\xb9\xed\x80\xa1\x57\xde\x75\xda\xd6\x6c\x6d\xef\xa8\xe7\xa4\xaa\xa7\x4f\xf5\x58\x4a\x94\x92\xd0\x1a\x24\x54\xd5\xd4\xa0\x87\x87\xb3\x99\xbe\xd5\x23\x41\x62\x03\x86\x69\x37\x5b\xba\xfc\xc4\x96\x92\x03\xbd\xbc\x48\x2b\x99\xb2\x06\x72\xa7\x03\x8c\x2e\x25\x9f\x8f\x78\x1d\x3d\x61\xff\x9b\x3b\xb4\xcd\x1d\x5d\x7b\x71\xb6\xf2\xc1\x7a\x75\x3a\xac\x0a\x19\x4d\xf2\x7e\x19\x3a\x0e\xbd\x32\x30\x9e\xcb\x48\xde\x19\x8f\x16\x33\x9d\x9f\x3b\xae\x85\x57\x62\x7a\x43\x07\xef\xca\xec\x9d\xd8\x74\x7d\xaf\x85\xf7\x63\xd2\xb7\x41\xf5\x0d\xb3\xa9\x87\x01\xc9\xb4\xc8\xbd\x0d\x95\x9a\xba\xe9\xf1\x00\x2f\x6a\x2b\x94\x69\x36\x7a\x7a\x84\xae\x8b\x2e\x12\x9d\xe7\x50\x25\x32\xd9\x2e\x36\xa2\x9a\x40\xce\xdb\xc5\x06\xaa\x26\x31\x72\x79\x9d\x4e\x5d\x08\xaa\xf4\x46\xf3\x46\xc4\xe3\xe1\x28\xae\xa2\x4e\xa0\x0e\x00\xdb\xb4\x55\xf3\xd8\x19\xc0\x5d\xd8\x83\xf3\xcf\x6c\xe1\xb6\x56\x8a\xe6\x54\xd9\xc8\x9c\x2e\xe0\xfd\x83\xf6\x74\xd1\xb7\x7a\xba\x72\x5d\x5b\x8e\xb5\x69\x1a\xcd\xb0\x5e\x4c\xf7\xc3\x49\x90\xac\x90\xc2\x17\x90\x25\x53\x52\x93\x2b\x78\x13\x23\x6a\x6f\x6a\x81\x61\x70\x1a\x8e\xec\xda\x50\x07\xcd\x58\x98\xf2\xa2\x98\x96\x8e\x95\xea\x78\xdc\x00\x6a\xf0\x4d\x87\xe4\x9e\x1d\x32\x85\x3f\x4f\x55\x98\x82\x7a\x3b\xef\x6f\xb6\x82\xdc\xeb\xf7\xc1\x42\x26\x37\x5a\x26\x37\xda\xb4\x64\xf8\x1f\x41\x82\x01\x41\x02\xec\xfb\x14\xba\x09\xff\x11\xdc\xc0\xb0\x27\x25\x81\x91\x88\xe1\xad\xdd\xaf\x52\xeb\x79\x8c\x01\x6f\xf0\x93\x7c\x09\x6c\x15\x17\x45\x9f\x56\x24\xfa\x6d\x02\x38\xe8\xcc\x25\xa1\x0c\xf0\xad\x5a\x39\xad\x14\x43\x12\xb2\x06\xd5\xe7\x40\x7f\x46\xa3\xaa\xe7\xa9\x15\x52\xfc\xa4\x5a\xa1\x26\x7d\xb0\xc2\xfa\x02\x71\xbc\xff\xe6\x00\x94\x7a\xbb\x37\x3d\x0f\x9b\xd3\x63\x1a\x2b\x4e\xd1\xac\x0d\x3d\x88\xeb\xa9\x8a\xb8\x5c\x48\xf8\x8b\xb1\x47\x4e\x4f\xd0\x58\x91\x0c\xb1\x94\x91\x90\x54\xe6\xa6\xfa\x65\xa0\x9c\x58\x94\x57\x8b\x9c\x93\x48\x6e\x2b\x3d\x5b\x36\xc3\x28\xf6\x58\x5b\x69\xd4\xa6\x47\xde\xaa\xb7\x35\x4f\x85\x9e\x10\x41\x91\x86\x6a\xf1\xf6\xfe\xd0\x5f\xa4\x56\x3b\x66\xef\xde\xe0\x4a\xf7\xa1\x56\x32\x4e\xe5\x00\x1f\xe2\xce\x84\x2e\x7d\x59\xce\x74\x9b\x42\xad\x8d\x7a\xd1\x43\x2c\xf8\xf4\xf0\xfa\x57\xc3\x8b\x1a\x75\xb5\x46\x22\x0e\xaf\xb8\xd0\x03\x2c\x1a\x2b\x5e\x1c\x18\xe0\xb3\xb4\x69\x99\xa8\xe5\x01\xd2\x28\xc2\xf0\x78\x52\xe7\x51\x1f\x49\xe9\x81\x12\x48\x6f\x93\x2a\x0a\x3f\x79\x9e\x50\x18\x59\xf2\x4d\x8a\xab\xed\x1a\xe3\x49\x89\x7b\x82\x70\x31\x2f\x1c\x49\x39\xe0\x49\x77\xac\xc8\x2d\xd1\xba\x18\xb7\x29\xa5\x0c\xaa\x94\x14\x52\x6a\x71\x2a\x9d\x52\xc3\x4e\x36\xfd\x98\x1f\xb8\x8b\x17\xfe\x39\x68\x58\x00\x4f\x27\xf8\x74\x62\xde\xb0\x90\xd6\xee\x3e\xf2\x04\x3c\xa7\xf9\x7f\x16\xa3\xe1\x8f\x5a\x0c\x78\x11\xd5\xcb\x2b\x33\xe5\x95\x99\xf2\xdc\x4c\x79\x8e\x29\xe6\x25\x0a\x8d\x8e\xd2\xee\x53\x57\x7f\xca\x5b\x03\x08\x19\x1b\x96\xb2\xf7\x10\x23\xe4\x16\x23\x35\x2a\x0d\xf4\x46\xb3\x0a\xed\xa0\xb3\x42\xc3\xb1\x08\xa6\x10\x68\x55\x4c\x21\x48\x09\x70\xc3\x25\x73\x89\xde\xb0\x02\x83\x98\x2d\x35\xc3\x3f\xbe\xdc\xdf\xf3\xb4\xfc\x64\x54\x48\xbd\x83\x75\xf7\x4c\x70\x4c\x8b\x4d\x00\xb9\xc0\xb6\x08\x16\xc3\x1f\x6c\x8a\x4c\x34\x28\xa4\x72\x0a\x5f\x79\x4a\x5f\x79\xdf\x07\x52\x1f\x3f\xf4\xd0\x69\x56\x7e\x84\x47\xbc\xbb\x8a\x5c\x53\x58\x39\xfe\x8a\x5c\x35\x4e\x9c\xc2\xe0\x4c\xd1\xe9\x00\x6b\x29\x1d\xc1\x54\x4d\xa5\x93\xa9\x18\x3e\x01\x57\xdd\xe0\xd0\x0f\x72\x1a\xaa\xa4\x6f\x21\x83\xbc\xf6\x4c\x4e\xb6\x21\x9e\x0b\x3c\xf9\x15\x56\xe2\xb1\x63\x0d\x5c\xac\xdc\xc1\x3f\xb5\xfd\xe2\xb4\xbc\xb9\xe9\x53\xab\x0e\x3e\xd5\xe8\xc3\x30\x06\xfc\xa5\x49\x91\xdf\x49\x11\xd1\xc4\x9a\x97\x42\x1c\x9a\x68\x2e\xcd\x54\x6b\x44\x57\x22\x08\x28\xc8\x62\x95\x49\xbb\x0d\x94\x29\xe3\x26\x7a\x13\x50\x04\x06\x6e\xdc\xa4\x83\x57\x8d\xe3\x39\x32\xae\xdb\xa9\xc5\xc9\x86\xa9\xea\x37\xf7\xb1\xad\x78\xa5\xf7\x55\xcd\xb6\x06\xc0\xb6\xae\x6d\x64\x25\x73\x16\xc3\xf3\xdc\xb0\x02\xc5\xaf\xc0\x5b\xd4\x0c\xad\xba\x5b\x19\x37\xcb\x1c\xff\xac\xf1\xcf\x0e\x07\x75\x56\x93\x68\x5b\xc5\xd9\x5e\xe2\x6f\x89\xbc\xbd\xe0\x9c\x67\x93\x7d\xa1\xce\xf2\xd6\x27\xe6\x17\xf8\x71\x72\x20\x3e\x90\x65\x43\x59\x68\xdf\xef\x4e\xcf\x46\x76\x6a\xb0\xbb\x28\xa2\xd8\x41\xfb\xf6\x04\x7a\x2d\xd7\x73\xc9\xdd\xad\x99\x03\x12\xf1\x7e\xd3\xcb\xd6\xb7\x19\xdd\x22\x2d\x59\xea\x8b\x76\x7e\xf7\x7a\x2f\xb7\xed\xcf\x6b\x9e\x1a\x26\xb0\x1e\x7d\x35\xfd\x75\x06\x4c\xd7\xc1\xdb\x27\x57\x77\x33\xd6\xcf\x70\x3f\xf4\x61\x3b\x00\x87\x9d\x22\x87\x1d\x20\x87\x8d\x11\xdc\x91\xa5\x8c\x39\xc6\xe9\x46\xbc\xbd\xf8\xcf\x78\x6d\x93\x75\xde\xf6\x3f\x9f\x43\xdf\x0e\x3e\x8f\x45\xff\xff\x3e\x83\xad\x07\x78\x25\x4b\x45\x54\xe8\x13\x7b\x67\xf2\xf4\xbb\x4f\xec\x9d\xd9\xce\x67\x09\x10\x52\x59\x30\xfd\x8f\x04\x08\xe1\x61\x01\x42\x80\x02\x84\xe0\x90\x00\x01\x56\x5b\x9f\xbb\x9b\x1b\x5c\xf8\xa0\x1b\xc6\x69\x2e\xe6\x13\x38\xa3\x3e\xee\x02\xe8\x4b\xf8\xd9\x22\x86\x85\x1c\xc4\xa2\x21\x62\x78\x9d\xb6\x2c\xfc\x9b\x82\xcf\x5f\x8d\xe4\xa9\x72\x6b\x32\x83\xae\xa4\x87\x8c\x25\x6a\xaf\x8d\xc3\x17\xe6\xb6\x41\x9b\xda\xcf\xd3\x26\x70\x6b\xc0\x35\xf3\xaa\xd8\x6f\x0d\x59\xef\xe3\x87\x86\x4d\x7e\xfd\xbd\x23\x03\xa7\x1b\x82\x90\x9f\xd2\x43\xe1\x61\x92\xde\xbb\x8a\x66\xea\x9c\xf5\x81\xe8\x2c\xdc\xce\x33\xfa\x2b\x9f\x1f\xf4\x1f\x0c\xd8\xe0\x01\xa6\x78\x77\x27\x15\x4d\xa1\xcb\x0f\xf7\xcd\x0a\x13\x23\xb4\x8d\x82\x29\x99\x26\x18\x8a\x83\x0c\xf4\x8a\x6e\x00\x99\xae\x04\x7d\xf0\x3c\x14\x7c\x97\x49\x31\x51\xde\x68\x46\xba\xaf\x3f\xc9\xf2\x4c\x27\xb8\x78\xa9\xbd\xe8\xc2\xa6\x49\xf0\x7a\x00\xf9\x20\xb7\x6a\x56\x6e\x0a\x03\x86\xc9\x10\xc8\x17\xf3\xa0\x08\x2e\x2e\x98\x52\xd0\x34\xc3\x5f\xa4\x2d\x7f\xa1\x1d\xa0\x05\xf6\x3a\x26\x1f\xfc\x60\x2d\xf2\x4d\x10\x0a\xf2\x99\x8e\xe6\xe8\xe2\x64\x18\x2e\xa7\xfb\x0e\x72\xd1\x9c\x70\x5c\x55\x50\x03\xaf\x3f\x21\xeb\x81\x73\x21\x8c\x4b\x31\xe5\x95\xb1\xc9\x34\x9a\x01\x42\xec\x16\xd7\x42\x24\x64\x26\x02\x84\x04\x30\x0c\x34\x24\x8c\x06\x50\x0d\x06\xb3\xc3\x48\x90\xe0\xc8\xe8\xc2\x4e\xe3\x54\x1c\xaa\x45\x34\x1d\xc9\x7f\x6b\x1c\x05\x79\xf9\x18\x79\x4a\x74\x9a\x17\x42\xcb\x48\x47\x62\x5b\x3c\x4f\x13\x52\xe6\x24\x66\xe0\xff\x03\x95\x4c\x3a\x17\x17\x14\x00\x27\xc2\x2c\x17\x17\x70\x86\x1b\x1f\x3a\x6e\xe2\xc2\x17\x63\x07\x7d\x71\x50\xac\x2f\xd0\xc2\x17\x7f\xf8\x07\xb9\xea\x7e\x9f\xd1\x46\xf1\xfb\xb7\xa8\x39\x8c\x80\x33\x52\xd7\xb3\xa8\x3b\xd3\xca\x6e\x11\xad\xc5\x48\x26\xf1\x0f\x34\x78\x9f\x2c\x74\x18\x26\xf8\x01\x3a\x3c\x06\x3b\xbf\xec\xd2\x2f\x9b\x97\x59\x80\x1d\xc0\x0f\xea\x91\x89\x20\x17\xf0\x8e\x3f\x8c\x36\x0b\xaa\xb3\x4a\x19\x34\xd3\x75\x23\xb9\x55\xd1\xd9\x1a\x6b\x34\xae\x8e\x2f\x1b\x64\x86\x50\xa1\xdd\x65\xc7\xc7\x99\xe6\x2a\x73\x4b\xb2\xdc\x80\x04\xa6\x3a\x75\x36\x2a\xe9\x18\xe8\xba\xd5\x9e\x37\x32\xb0\x52\x6f\xf5\xf2\xf0\x56\x6f\xec\x8b\x52\x6f\x72\xa6\x2b\xe0\x80\x64\x75\x0d\xea\x41\x2a\x75\x0e\x94\xc6\x5b\x64\xd5\xb6\xd1\x8e\xa7\xb5\x7e\x0c\x77\x3a\x46\x19\x3d\x58\x0e\x0e\xf3\x95\x0e\xba\x4e\x17\xe4\xa7\x72\x16\x17\xf0\x50\x4d\xef\xfe\xc4\xd5\xe4\x4e\x37\xe4\xb1\x05\x38\x60\x60\x4f\x5e\x09\x3f\x66\x83\x5b\x06\x94\xac\xb1\x65\xe3\xd6\xbc\x52\x30\x6c\x55\x7a\x50\xf1\xea\x40\x6b\xf7\x16\x40\x50\x50\x98\xfa\xb0\xbe\x4b\x26\x1c\xf7\x47\xf6\xd5\xd4\xf3\xc2\x99\xee\x7f\xcd\x41\x96\x18\x93\xd2\xda\x9b\x25\x91\xcc\x0f\xcf\x51\x8e\x6a\x61\xa5\x62\xad\xf5\x59\xd5\x60\xaa\xd5\x9c\x54\xab\x99\x55\xd0\xec\xff\x67\xee\xcf\xbb\xdb\xc6\x91\x87\x51\xf8\xef\xf7\xf9\x14\x1d\xfd\xa6\x3d\xa4\x04\x49\xd4\x6a\x9b\x0a\xac\x93\x49\xd2\xdb\xc4\xe9\x74\x9c\x5e\x15\x8d\x0f\x4d\x51\x12\xdb\x14\xa9\x70\xb1\xad\xd8\xfa\xee\x6f\x55\x01\x20\x41\x89\x72\x9c\xb9\xbf\xfb\x9c\x3b\xd3\xb1\x48\x10\x6b\x01\x28\x54\x15\x6a\x21\x1f\x9d\x1d\x22\x87\xc8\xd1\x32\xc2\x87\xd6\xe3\x9a\x7b\x2e\x51\x98\xa3\x1c\x24\x29\x5f\x34\x1c\x60\x1a\xf8\x62\xec\x52\x64\x17\x6a\xd4\x40\x58\xb9\xa6\x84\x8f\xa6\xb7\xae\x71\x7e\x4e\x9a\xc6\xd2\xe1\x15\xea\xa5\xd6\x4a\xf8\x41\x86\x53\x31\x72\xdf\x45\x25\x97\x55\x85\x52\x70\x6c\x8e\x63\x5b\x28\xdf\xd7\x98\x65\xd6\x74\xc3\xc7\xdf\xff\x37\x1a\xb3\xd8\xa1\xe6\xca\x8d\xfd\x54\x3e\xb8\xd3\xe8\xc7\x8b\x9f\x2f\xd2\xd8\x0f\x17\xfa\x3d\xf9\xf7\x8f\x6b\x30\x84\x25\xa5\xf6\xcc\xd0\x42\xc1\x86\x82\x77\x15\x72\xaf\xb6\x27\x7c\x99\xc9\xfb\xf4\xdf\x30\x46\x59\xa1\x0e\xc4\x7f\xcb\xaf\x8e\xe0\xa4\xda\x78\x4e\x4c\x16\x19\x87\x94\x0e\xc3\x76\xaf\x33\xe8\x0d\xbd\x21\xec\x09\x0f\xcd\x59\xa6\xb6\x3f\x4e\x27\x59\xfb\xb7\x60\xe2\x37\x3b\xd3\xe7\xf8\x3b\x6d\x67\x63\x78\xb1\xfd\xa9\x3d\xf9\x57\x20\x2c\x3c\x44\xe6\xed\x13\x54\x68\xff\x1d\xfd\xef\xe8\xd0\xa6\xa4\x51\x9a\xbf\x0a\x3d\xca\x7f\x47\x55\xca\xae\x87\xb4\x11\x9e\x29\x3f\x88\x47\x47\xcf\x94\x81\xa4\xc7\xa0\x83\x0d\xaf\x81\x6e\xf7\x94\xe6\xb3\x50\xf5\xe0\xb9\xaa\x2c\x22\xf4\x77\x3e\x39\x14\x56\x91\x30\xc7\x99\x11\xb1\x8e\x65\xda\xb5\x90\x54\x7a\x35\x6a\x12\x10\x21\x69\x29\xab\x49\x71\xe8\xe0\x72\x84\xf6\x07\xc9\x7d\x73\x10\x18\xdf\xa1\x17\x83\xf4\xac\x53\x65\xb5\x48\x7a\xee\x1e\xea\x2d\x28\xa3\x45\x72\x27\xc3\xa1\xbf\x29\x70\xd0\x39\xe7\x51\x61\xc5\xa8\x15\x15\x46\x8c\x79\x49\xa0\x8f\xf4\xa2\x5b\x5b\x6a\x00\xef\xea\x1f\x17\xc2\x29\x54\xe7\xcf\x01\x41\x6e\xfb\x73\x08\x78\x07\x20\x40\x9f\x80\x07\x57\x40\x3e\x3a\x9a\xdc\xd3\x03\xa9\x26\x14\x16\xa0\x04\x18\x5f\x00\xc6\x27\xc0\xe4\xb3\x82\x89\x34\x31\x28\x50\x82\xb9\xe9\x9c\xa1\xc1\x79\x7a\x50\x0f\xba\xd0\xc1\x78\x4c\xe5\x38\xfa\xb2\xca\x71\x69\x2b\xc3\xe9\xfc\x0a\x11\x81\x9e\xe3\x17\x3d\xc7\x4f\x17\x3f\xbf\x45\xa3\xed\x04\x15\x7c\x63\xa0\xaa\xa2\x30\xf1\x3e\x00\x3d\xa2\xeb\xa9\x39\x05\xb9\x9b\x01\xfb\x10\x7b\x50\xe5\x7b\x61\x9d\x5b\xb0\x8f\x09\xa0\x5f\x37\x7d\x1b\xcd\x3c\x03\x32\x5d\x45\xb3\x0d\xde\x70\x88\xcc\x44\xdc\xdc\xa5\x99\x13\x7c\x17\x3b\x8b\x15\x85\x49\xdd\x69\x8d\xaa\x77\xf8\x3d\x72\x2a\x48\x34\xd4\x7a\xad\x41\x6b\x50\xdb\x02\xc9\x00\x28\x5b\xdc\x63\xb1\xd8\xa9\xe2\x4e\x3c\x47\x9e\x22\xa8\xd8\x23\x03\xb0\xcc\x22\x97\xf6\x21\x59\x63\x39\x66\x1a\x6f\x60\x02\xb1\x63\xea\xc3\xeb\xc0\xc3\x1f\x61\xcb\x8d\xbd\x4e\x50\xe8\x4e\x7e\xa1\x3e\xc0\x2a\xd8\xba\x0e\x7a\xb0\xf7\x81\x66\xdc\x69\xb4\x32\xb6\x6a\x11\x9c\x22\x35\x47\x29\x06\x43\xf2\x50\x3e\x86\xf2\xf6\x5c\x4c\xbc\xc5\xbb\x11\x9c\x0d\x68\xe4\x16\x88\x2f\xf5\xb8\x3f\xcf\x0d\x35\x6f\x80\xd4\x64\xe7\x73\xb8\xcb\x7e\x1b\xb5\x57\x3f\xfe\x56\x33\x81\xd0\xd8\x04\x1e\x92\xa0\xef\xe2\x68\x0d\x18\x6a\x63\xd4\x22\xa0\x8c\xfd\x74\x03\x27\x0a\x43\x91\xad\x18\x48\xe4\x48\x32\x4e\xc2\x47\x0d\x7f\x1d\x47\x69\x84\xcb\x9e\xb9\x0e\x77\x1c\xac\xe9\x05\x9c\x36\xfe\x55\x86\x2e\x23\xf7\x92\xde\x5e\xb0\x44\xd6\xf0\xf2\xe2\xe2\x02\x1b\x7f\xe5\xb9\x81\x23\xe8\x0f\xad\xb6\xb9\xc3\x13\x47\xef\xd7\x68\xa7\xa6\x9d\xad\xea\x3a\x1a\x5b\x01\x29\x0d\xec\x3a\xdb\x6b\xbd\x54\x0a\xcf\x97\x60\xa7\x1c\xf3\x44\xc9\x72\xe3\x7b\xc5\xe6\xfb\xcd\xe1\x76\xda\xc2\xb1\xe4\x24\x2e\xd0\x25\x70\xf4\xa1\x37\x04\x58\x2f\x5e\xfe\x5e\xee\xb1\xda\x62\xa8\xc2\x0f\x1b\xfb\x2c\xc4\xed\x7d\xc6\xd1\xfa\xcb\x6a\x5b\x5b\x26\x7c\x07\x55\x61\xa4\x0a\x71\x9d\xf0\xc3\xc2\xf7\x14\xe2\x05\x22\x94\xc2\x3c\xbc\x49\x11\xee\xb9\x62\x12\xeb\xa1\xef\xc5\x33\xa0\xd1\xee\x81\x04\x95\xfe\x5c\xf4\xec\xbb\x79\x81\x50\x16\xf6\xea\xc2\x88\xe8\x60\xd5\x05\xdd\x8a\xa2\xc3\xcc\x7c\x6a\x33\x15\xe5\xb4\x26\x0b\xec\x26\xbc\x3f\xfc\x7f\x08\x30\xf1\x99\xf7\x7f\x1b\x30\x5a\x93\x25\xc0\x78\xbb\x31\xae\x77\x23\x24\x90\xa7\x97\x27\x43\x87\xfc\xc0\x94\xa1\xe3\xeb\xd0\xc9\x76\x3b\x4e\x05\x76\x73\x1b\xc5\x34\xb2\x98\xdc\x48\x40\x39\xb3\x0c\xac\xbd\x96\xb4\x41\xfb\x53\xf4\x3a\xf4\xe4\x56\x2b\x4a\x1e\xea\x81\x92\xf5\xb0\x6c\x4a\xe0\x4b\xb2\x55\x35\xec\x48\x1a\xaa\x45\x02\x10\x17\x55\x95\xb0\x93\x7d\x8a\x70\x0a\x81\x0c\x40\x6f\x62\x11\x41\x21\x6e\x70\x4f\xc4\xfa\xf9\x66\x2f\x8f\xd6\xe7\x68\x8a\xd7\x8c\x79\xfe\xfc\xd6\x98\xd6\xbd\xe7\x54\x63\x04\x9f\x02\x5c\xe4\x1d\x94\xf7\x24\xd1\x97\x3a\xe9\x20\xe0\x32\x12\x51\x84\x74\xfd\x30\xf6\xa1\x51\x1b\x98\xb0\x52\x3f\xb5\x6c\x5a\x47\x9d\x29\x89\x38\x8a\x22\xb2\xab\xee\xd8\x6f\xbb\x8a\xfb\x62\x9a\x96\x79\x25\x75\xa5\xd9\x60\x98\x75\xa0\xcd\x58\x5c\x32\xc7\x46\x07\x4f\x00\x41\x0c\x25\x8e\x6e\xac\x9a\x85\xcb\xb5\x31\xfa\x0e\x32\xf0\x02\xb6\x99\x09\xd1\x2b\xc2\x67\xe6\x57\x42\xc8\xcf\xcd\x31\x15\x88\xdc\x27\xcc\x21\x39\xcf\xcc\xd0\x30\xc8\x40\x55\x04\x9c\x15\x65\x0b\x59\x9e\x48\x2d\xa3\x06\x20\x54\xc4\x30\xcb\x85\x72\xbd\x78\xe5\x0e\x48\xd3\xc1\x8f\x72\x5d\xf7\xd6\xc0\xd4\xe1\x07\x03\x80\x51\xed\x11\xf8\x72\xe6\xcb\xf3\x6e\xc1\xc0\x2c\xba\x07\x65\x89\x70\x1d\xfa\xd8\x00\x03\x7d\xfe\x03\x1a\x20\x3a\x21\x6b\x3a\xcc\x41\xb7\x2e\x8d\x46\xc2\x5c\x78\xa8\x1b\x1e\xda\x46\x94\x86\x1c\x54\xae\x89\x60\xca\x02\xf3\x4b\xd5\x28\x69\x0b\x50\xfd\x6e\xdb\x48\x60\xe2\xf5\xd1\xce\xbc\x1b\x9f\xa8\x01\xbe\x23\xad\x24\xbf\xea\x0a\x16\xd5\xd2\xdc\xfc\xc6\x69\xac\x89\x55\x51\x1f\x98\xc4\x3a\x4b\x87\xfb\x68\x60\x9f\xf3\x8e\x6f\xbc\x79\xca\x97\xa8\xa5\x3f\x27\xa1\x91\x48\x2d\x78\xcb\xf7\xfe\x62\x49\x19\x62\x7c\x28\x72\x44\x71\x15\x19\xe9\x13\xa8\xd5\x5c\x8c\x35\x85\xe2\x58\xb3\x98\x97\x7c\x1c\xf2\x1d\x02\xe5\x2c\xb3\xf9\x7c\x67\x6f\x20\x85\x01\x00\xdc\x9b\x35\x32\xa2\xd1\x74\x41\xba\xe4\x81\x27\xe5\x96\x59\xe8\x42\x48\x7f\x6f\x18\xeb\x18\xaf\x23\x4b\xde\x56\xeb\x7e\xb3\xf9\x60\x91\x0a\x89\xdf\x48\xf1\xae\x14\x7f\xf0\x18\x13\x6f\xf8\xc3\xe3\xe2\xda\x0e\xfb\x07\xf4\xcf\x6a\x9f\xdc\x2a\x3c\x26\x6a\xfa\x4f\x05\x11\x8b\x78\x0e\x89\xd8\x58\x84\x35\xc1\x08\x26\xd3\x32\x26\x5b\x3b\x7e\x9c\x54\xd3\xc5\xd2\xf3\x94\x76\xf7\x5c\x5c\x3b\xe7\x2d\x58\x67\x31\x10\x4a\x78\xc7\x78\xe6\x49\x8f\x8c\x93\x94\xdc\xe8\x84\x93\x46\x43\x6b\xce\xa7\xe6\x3e\xfb\x6b\x7d\x39\x51\xe8\xac\x78\x1f\xc0\x52\x5c\x35\x29\x14\x9d\x42\x72\x52\xcf\xa5\x23\xc7\xbc\x00\xea\x4d\xec\x50\xed\x8d\x46\xf8\x3c\x1d\xe9\xaa\x0b\x82\x14\xf1\x26\xe1\x54\xcb\x49\x0a\xb5\x19\x9a\xe1\xf8\xe8\xd0\x27\xaf\x11\x5e\xd0\x47\x6c\xe9\x34\x27\x41\xcc\x3a\x4a\x2a\xef\x76\xc4\xa8\x0a\xbf\x13\x72\x3d\x5d\x7b\x9b\x32\x5c\x95\x7f\xe6\xc2\x79\xb2\x08\x01\x95\x2a\x6b\x4e\x8d\x8f\xa6\x0d\x16\x64\xde\x57\xd5\x10\xea\xe1\xa0\x44\x25\x30\xa0\xd8\xff\xba\x5a\xee\xa1\xe3\xb6\xc7\xa8\x79\x1b\xab\xdc\xee\xd4\x49\x1e\x5c\x0f\xad\x18\xa2\xfc\x34\xdd\x18\x22\x73\x2c\x22\x0d\xb2\x91\x19\x35\x88\x14\xd1\xed\xa1\xf4\xc9\x8b\xcc\x51\xb3\x99\x91\x33\x33\xfc\x24\xe8\x3a\x98\xf4\xdc\x4c\xb4\xd9\x4c\x85\xd3\xdd\x49\xb3\x89\xc1\x9a\x4a\x5c\x19\xa1\x96\x85\xb4\x25\x77\xae\x92\x91\xb2\x78\xdd\xdb\xd2\xb0\xea\x2a\xcd\xe2\xd0\xc3\xea\x81\x40\x2c\x80\x53\x71\x77\x33\xb2\xc7\x69\xe3\x6d\x75\xa7\x6d\x99\xe9\x32\x8e\x6e\x89\x39\x7f\x1d\xc7\xd0\xe3\x9a\x1f\xce\x49\x44\xf7\x8d\x30\x28\x55\x06\xee\xd2\x2b\x93\x83\x8e\x2b\x3c\xf4\x83\x20\xcf\xbc\xb0\x8e\x4e\x13\xf1\x8f\x87\x7f\xac\x33\xa1\x71\x33\xc2\xa1\x37\xbc\x3a\x10\x26\xe6\x59\x9a\x6b\x98\xc6\xed\xd2\x69\xa7\x65\x7a\xbe\x93\x49\x49\x6b\x25\x8d\xbe\xae\x3c\xf0\x85\x4d\x2e\xf6\x02\xe6\x3f\x49\x11\x99\x47\xf3\x6f\x02\xb3\x42\xa2\x4d\xa5\x88\x3b\x15\x16\x1b\xb2\x1b\x50\x96\x26\xae\xe5\x27\x32\xa0\xa3\xf4\x2d\xf8\x74\xf2\x5f\xa7\xb3\x45\x03\x19\x51\xd7\xe5\x33\x4e\xfb\x9c\x9f\x71\x72\x75\x64\x84\xc4\xf3\xcc\xe4\x86\x49\x86\x56\xa3\xfc\x91\xf0\x47\xb5\xb3\x4c\xd6\x0e\xaf\x5d\x5e\x12\x97\x7b\x79\x59\x83\xc5\xce\x6b\x1f\xef\x2c\xab\x36\x72\x8d\x80\xdd\x2f\x9d\xc4\x5e\x32\xf4\x2b\x5c\xb5\xdd\xe9\xaa\x6c\x92\x18\x68\x64\xc7\x92\x52\x26\xdd\x1f\x8d\x96\x8d\xa3\xf5\x39\x45\x74\xb6\x17\x0c\xf1\x82\xbd\x16\xfb\x2b\xb1\xf7\x8e\x56\x6d\x5f\xa6\x14\xf3\x8d\xea\x31\xa5\x8a\x92\xac\x35\xd5\x3c\xa5\x6c\x99\xdc\xe4\x5f\x5b\x17\x6d\x74\xb2\xc1\x12\x7b\x3d\xaf\x7b\xab\x57\x9e\xf8\x9f\x3d\xfb\x86\x79\xab\x75\xba\xb1\x67\x4c\x2e\x0d\xbb\x72\xfb\x97\xda\x28\xd8\x72\x61\xe7\x95\xf7\x7c\xbb\x25\x2f\xbc\xa1\x97\x94\xa4\x66\x85\x94\x4a\x6a\xad\xd1\x36\x3d\x2b\x9c\x5f\xab\x63\x6b\x2c\xef\x55\x32\x74\x27\xe2\x8d\x73\x6a\xcd\x8e\x46\x85\x55\x85\x0c\xce\x88\xab\x70\x5d\xf8\x62\xbf\xe1\xfe\xc4\x69\x34\x50\x35\x45\xac\xfe\x46\x63\xf1\x7c\x3d\x32\x8d\x25\x9f\xd1\x85\xbb\xcb\x6f\xd0\x7d\xc6\x64\x81\x3a\x52\xe3\xa5\x00\x54\x82\xba\x1d\xb8\x96\x5c\x36\x49\x34\x0c\x3b\x86\xac\xa8\x74\x37\xe7\xe5\xab\x9f\x44\x99\xe9\x23\xc5\x41\xd6\x1e\xa6\x0d\x59\xef\xb7\xfb\x39\xe9\x58\x96\xd9\x00\x2c\xb3\x62\xeb\x99\x4c\xbb\x70\x17\xc6\x6a\xe4\x75\x64\x1f\x20\xa1\x40\x32\x42\x2d\x2c\x9a\x78\x30\xbe\x42\xc5\xb3\x62\x2b\x67\xb0\x46\xb5\x15\x10\xaa\xa5\x88\x5b\x0f\x2f\x3f\x51\x56\x05\x30\x26\xa8\x56\x2e\xed\x0c\x58\x05\x32\x69\xc0\xbf\x38\x38\x61\x91\x28\x70\x3f\x8c\x52\x6a\x8a\x15\xf7\x33\x59\x19\x07\x95\xbc\x4e\x52\x8c\x1a\x0b\x05\x7e\xfb\x87\x95\xe6\xbc\x00\xc9\x35\x42\x65\x70\xc4\xa0\xcb\x43\x2a\x00\xcd\x57\xd2\x7f\xb9\x2f\xf5\x0c\x73\xe1\x40\xfe\xbd\x7b\x18\x2b\xfa\x7f\xe2\x17\x16\x90\x68\xc6\xa8\x0a\xfc\xb6\x7f\xfa\x2a\x0c\xa2\xb2\xc5\x51\x10\x64\x95\x4e\xd0\x62\x99\x45\xd0\x95\x5e\x5a\x71\xfc\xe2\xf2\x5b\x11\xf2\x35\x0b\x12\x4e\xa7\xb6\x88\x9e\x42\x8f\xde\x69\xcb\x99\xcd\xf6\xce\x76\xd7\x58\x29\x3c\x05\x9f\x1f\xc7\x53\x18\x56\x11\x90\x10\x06\x71\xd5\xf0\x90\x9c\xf5\xf5\xff\xd6\x0e\x57\xfb\xfa\xca\x5b\x3a\x37\x7e\x44\xd1\x2e\x73\xb7\x67\x87\xa8\x56\x18\x30\x52\x95\xbb\xc7\x82\xd2\xeb\x85\x51\x6b\x84\x59\x3c\x9d\xf2\x73\x3a\xc3\x4b\x81\x2f\x25\x53\x31\x73\xf8\xa4\x76\xeb\x5d\x5d\xfb\x18\x2b\x60\x95\xe0\x9f\xe8\x33\xfc\x3d\xa7\xbf\x11\xfc\xfb\xb9\x36\x45\xa2\x60\xe6\x27\x6b\x94\xa5\x96\xb0\x4f\x4e\x66\xe2\xcc\x5c\x32\xe9\xb4\xbd\xa2\x63\xa4\x5b\x09\x4c\x77\xde\xad\x14\xba\x75\x5b\xdc\xda\x21\xd2\xbc\x2c\x04\xa8\xad\xa8\x52\x50\x80\x3a\x10\xd2\xac\xb3\xd6\xaa\x99\x64\xb4\x30\x12\xfb\xdb\x22\xb7\xed\xca\xe2\x83\xee\x83\x0a\xbf\x8c\x18\x10\x04\x0d\x37\x0e\xdc\x52\xa1\xfb\x1d\xa1\x04\xd2\x22\xef\x1c\xb6\xfe\x26\x5d\x9d\x75\x2b\x05\x4d\x52\xe4\x83\x51\x3e\x48\xf3\x5c\xcd\xb4\x49\xd3\x0d\x2b\xed\xe7\xdb\x30\x17\x4d\xa3\xd3\xee\x52\xcd\xa5\x00\xe3\xf8\x65\x2b\xc8\xcf\x1b\xd2\x84\x40\xa5\x00\x5a\x0a\x9f\xb2\xa8\x5a\x3f\x0a\x2f\x11\xd6\x81\x03\x03\x5c\x39\xac\xf6\xf1\xe3\x3f\x8e\x6a\xa6\x98\xd6\x95\xc3\xdb\x93\x8f\x1f\x3f\xfe\xe7\xe3\x3f\x3e\xd6\x3f\x36\x3e\x8e\x3f\x3e\x7c\x9c\x7c\x9c\x7e\x34\x3e\x9a\x1f\x5b\x1f\xef\x3f\x6e\xa7\xed\x05\xdb\x38\xb0\xda\x5a\xf9\x81\x3e\x2e\x03\x3c\x2c\xbe\xc0\x49\x6c\x1f\x58\x8a\x22\xc0\x6a\xa8\x02\x3d\x6e\xd9\xb9\x53\x2d\x28\x4e\x5b\x9f\x32\x2f\xde\x5c\xd0\x35\x09\x82\x0a\x70\xd1\xdd\xd3\xf2\xbe\x90\x97\x1b\x57\xbb\xd9\xd5\x9a\x58\xe1\xba\xf4\x92\x87\x87\x70\x82\x6e\x75\x6b\xf2\x5d\x95\x87\x6d\x2c\x81\x6c\xec\x55\x91\x2b\xb1\x4b\xfa\x08\xc9\x34\xf1\x33\xaa\xd0\xa8\xb9\xf0\x3f\x7f\x0e\x50\x74\x79\x68\x94\x22\x83\xf0\x2d\x88\x61\x82\x48\x35\x11\xc7\x29\x3e\xe0\x10\xc4\x53\x6b\xa7\x8f\xa6\x40\x7a\xf8\xb2\x23\x3b\x28\xf8\x25\xf1\xb9\xe2\x16\x47\x4e\xfa\xa5\xc3\xf5\x4a\x8a\xdd\x84\x87\xca\xa5\xfa\xb2\x8f\x56\x35\x55\xe5\x51\xc8\xdf\xea\xa6\x09\xd2\xe3\x8c\x88\xf6\x5f\x72\x3a\x73\xaf\x8c\x05\x50\x57\x93\x29\xcf\xc7\x78\x93\x44\x42\x4c\x5c\xe6\x40\x40\x6a\xc9\x05\x99\x81\x75\x06\xba\x17\x1b\xf7\x79\x20\x22\xd4\xa2\x94\x6a\x6c\x28\xd6\x8e\x87\x8a\x64\xc9\x0a\xf5\x08\x97\xac\x18\x60\x0e\x6a\x2a\x09\xd8\x87\x6f\xc8\xb9\x6f\x9e\x89\x17\xf9\xd1\x79\x82\x3c\xd8\x70\xb3\x29\x71\xf3\x0b\xc3\x87\x05\x95\xc3\x04\x56\x58\x35\x58\x04\x48\x5e\xea\x20\x91\x34\x7a\x19\x24\x44\x6a\x17\x40\xa3\xe1\x67\xd3\x5c\x90\xb9\x63\x7f\x23\xb5\xb8\x49\x4a\xaa\xa0\x18\x3b\x86\x1c\x2e\x45\x3a\x50\xc3\x75\x50\x60\xbe\x03\xdf\x82\xe7\x7d\x81\xda\x30\x34\xf7\xb7\xb0\x97\x93\x9b\x85\x5d\x5b\xa6\xe9\xda\x6e\xb7\x6f\x6f\x6f\x5b\xb7\xbd\x56\x14\x2f\xda\x5d\xcb\xb2\xda\xf0\xad\xc6\xee\x96\xe9\x2a\xa8\xca\xd2\x39\x3d\x3d\x6d\xd3\x57\xc8\x84\x11\x61\x0e\x67\xc2\xaf\x90\xa9\xba\x9e\x3f\xce\xdf\x60\xb6\x93\x76\xae\xa2\x46\x59\xc3\xe4\x60\xbf\xe8\x6b\xbb\xb6\xc5\x13\x26\x04\x6a\x6f\x4d\x5e\x21\xed\x5b\x87\x7d\xca\x9c\xc0\x9f\x6f\xec\x0a\x2a\xa0\x38\x04\x6c\x8a\xb0\x55\x78\xb2\x16\xe7\x80\xa7\x21\xfe\x54\x3f\x07\xf0\xf2\xdc\x64\xb7\xce\x2e\x66\xf6\xcc\xf1\x3d\x75\x17\x1a\x46\xfd\x99\x20\x82\x99\xb0\xc3\x2d\xfc\x47\xab\x04\x35\x50\x76\x36\x7c\x15\x37\xdc\xa5\xe4\x5a\x42\xaa\x23\xda\x7d\x7a\xee\xac\x17\xd7\x0c\x5e\xb1\x16\x17\xc7\x24\x15\x0c\x93\x96\x1c\x2d\x92\x5f\x40\xcb\x60\xf3\x63\x0f\x69\x6b\xed\xf2\x0f\xcd\x19\xb1\x8f\x2a\x03\x90\xf1\xa5\x1c\x74\xcb\x8d\x6a\x06\x52\x30\x81\x8d\x79\x48\xc5\x7e\x46\x5f\x5a\xc8\x43\x94\xcf\x1a\x9d\xe2\x91\xf9\x84\xe5\x21\x8e\xd8\x0d\x9c\x24\xf1\x76\x29\x90\xff\x87\x83\x86\xfd\x64\x84\xfc\x03\x32\xbc\x8a\xb7\xc8\x24\x4f\x8f\xfe\x2d\xa8\xcd\x37\x7e\x92\x6a\xd7\x5b\x31\x5d\xab\x3c\x43\x2d\xce\x30\x75\x80\xe3\x36\x88\xcf\x95\x27\xf9\xb3\x4e\xc1\xc3\x62\x0d\x25\x70\xd4\xa8\xbe\x9a\xa9\xd7\xf3\x46\x14\x6f\xa5\xc0\x46\x21\xf5\xa5\xaa\x91\x80\x79\x66\x55\x43\xf0\xfd\x13\x21\xf8\x5e\x83\x20\x5d\x4d\xeb\xf0\xd3\x54\x39\xf7\x08\x24\xe8\x5b\xef\x2c\x2b\x41\xf2\x99\x06\xc9\xae\xf0\x5e\x8e\x14\x29\xe1\xa1\x78\xb7\x83\xef\x90\x9a\x40\x63\x2e\x6f\xa7\x8b\x48\xb9\x9c\xe5\x7a\x8f\x15\x0b\x10\x6d\x00\x10\x6e\x2f\xa3\xd5\x1a\xa0\x36\xa3\x4b\x6d\xf4\x1e\x86\xe8\x12\x3f\xa8\x4d\x42\xb4\x3d\xae\x31\x24\xba\xf6\x87\xfe\x4e\x8e\x50\x0c\x7e\x5d\x75\xf3\xfc\x95\xeb\x47\x6f\x42\xf4\x19\x25\x8c\x95\xf3\xf3\xeb\x13\xe7\xe7\x57\x6d\x7e\x50\x23\xe3\x49\xca\xde\x45\xf1\x4a\xdd\xf3\xa7\xaa\x6a\x8f\xf6\x75\x5d\x05\xe5\x38\xae\xd5\x6c\x20\xb0\x94\x5a\xce\x63\xda\xb1\x00\x78\xfb\x71\xed\x59\x41\xbb\x4a\x78\xe9\xdf\x68\xcc\x88\xe1\xff\xef\x8f\x99\x5c\x85\xfc\xf0\xe1\xfc\xcd\x13\x47\x5c\xe4\xaf\x1a\xaf\x56\xdb\xce\x68\xf3\x2f\x02\x67\xaf\xd7\x5e\xb5\x93\xee\x90\xff\x8d\x78\x56\xc4\x4e\x15\x34\x55\x05\xbd\x85\x5f\x45\x1d\x2f\x51\x47\xc6\x38\x30\x44\x64\xfd\xb1\x39\x40\x4d\x65\xc7\xe5\xba\x92\x84\x6c\x10\x68\xab\xf4\x49\xed\x8a\xca\xfe\xe5\xc1\x62\xf7\x0e\x35\x8c\xfa\xea\x55\xe9\x82\xe8\x54\xdd\x12\x8c\x6b\x15\x3d\x99\xcf\xf0\x77\x22\x27\x12\x1c\x87\x75\xf0\x0a\x6d\x46\x11\x61\xa8\x90\x56\xcf\x73\x2f\x4b\x7a\x40\xa3\x08\x4d\x9c\x16\x9a\x94\x7a\x8e\xf6\x42\xa5\xd7\x9b\xb2\x0c\x1b\x0f\x01\xd1\xc4\x8c\xad\x84\xa0\x89\x6d\xca\x59\x84\x78\x9b\xec\xd5\x62\xbc\xbf\x5b\x91\xe3\xc3\x99\xba\x32\xcf\x84\x3d\xab\x46\x2c\x02\x3a\x1a\xdf\xa0\xba\x76\x66\xaf\x48\xbc\x34\x43\xc9\xe7\x06\x53\x66\xe5\xda\xe6\x44\x80\xae\x48\x9c\x95\x57\xe8\xd1\xfd\x47\x4c\x9e\x9f\xcd\x71\xf6\x8c\xf3\x67\x48\x5e\x2c\xa8\x46\xad\x1d\xee\x9b\xf6\x1a\x13\x7f\x40\x1d\x43\xd5\xd2\x33\xab\xaa\xc7\xd8\x00\x76\xc0\x54\xb5\x51\xff\x42\x0a\x84\x97\x6b\x14\xe4\x45\xd0\x71\x89\xb4\xd2\x15\x3d\xc9\xc6\x86\xde\x2e\x13\x7d\xd1\x9a\x17\x71\xec\xe6\x67\x64\x06\x6b\xca\x64\x2c\x6a\xaa\xd8\xfc\xe2\x4b\xde\xec\x76\xdd\xca\xd6\x33\xb4\xc0\x59\xb0\xb5\x4e\x66\x2e\xf4\x97\x1b\xfd\x25\xd4\x5e\x94\xf1\xec\x3a\x37\x89\x5e\x98\x4c\xba\x55\xb9\x11\x7a\x6d\x9a\xea\x86\x4e\x35\x57\xba\xc0\xa4\xe1\x87\xfa\xb4\xe7\xec\x84\x35\xcd\x3d\xdb\x2a\xa5\x09\xe2\x19\x84\x92\x06\xde\x90\xe8\x74\x7f\x21\x57\x10\xea\xfb\x7f\x19\xc8\xa7\xb8\xfc\x05\xfd\x26\xe2\x17\xfb\x50\x85\xe0\x4c\x5d\x33\xc3\x53\x1d\xf0\xa7\x4c\x92\xe8\x18\x1f\xab\x00\x41\xb1\xde\xfc\x9d\x5b\xe6\xfd\xf2\x79\xbf\x5c\x14\xdc\x79\x71\xc5\xce\x74\xb6\x0c\xbd\xa9\xfb\x55\xda\x91\x09\x7c\x53\xbb\xb5\xa4\xec\xf1\x05\x54\xbe\xce\xd5\xe3\x72\xae\x09\x15\x3c\x0f\x7d\x13\x18\x41\x78\xb1\x3b\xc4\x2f\x22\x6b\x54\xe1\xaf\x58\x98\x79\xfc\x8c\x34\x9e\x16\xac\xd5\xda\x99\xfb\xe8\xcc\x1f\xf9\x18\xe2\x2b\x3b\xcc\x45\x7a\x0a\x6a\x95\x5c\xa4\xd0\x15\xf0\x0a\xfd\x7b\x67\xe4\x40\x85\x18\xba\x4f\xb0\x56\xda\x54\x69\xdc\x94\x8f\x32\x98\xdc\x90\x20\x67\xa3\x32\x31\xe2\x28\x9e\x95\xa7\x64\xf7\x1e\xb5\xc4\xf4\x95\x2e\x4c\x91\x59\x54\x96\x44\x59\xce\xdc\x12\xab\x18\x63\xd4\x14\x75\x45\x87\x2a\x07\x42\xef\xca\xf0\x8f\x8e\x7c\xc0\x02\x5e\x0b\xc3\x65\x5d\xf8\x57\xc0\x5a\x2d\xd0\xc7\xa3\xb6\xb2\x4a\x07\x81\x87\x01\xc3\x7c\x8d\xfd\x23\x22\x87\x68\xcd\x68\x27\x66\x46\xc8\x7f\x3c\x70\x22\xcf\xcb\xf1\x15\xcb\x23\x22\x29\x1d\x8d\x22\x9d\x0a\x51\x76\x58\x6a\x4c\x00\xc8\x10\xc0\xc2\xc3\xa3\x6a\x05\xfe\x29\xa5\x9b\x9a\xe0\x1a\x29\x5f\x25\xf9\xc4\xc0\x7c\xb9\xc9\x14\xde\x42\x49\x86\xc3\xa9\xe2\xc1\x91\x2d\xae\xd0\x8f\x50\x63\x23\xab\x78\xb2\xc4\x12\xc7\xaa\xe8\x17\x8a\x64\xf7\xf7\xce\x33\x8d\x54\xa0\x7c\xf8\x58\x3d\xd7\xd6\xce\x54\xa7\x67\xe1\x28\xd4\x9c\x95\x7b\xf9\x4c\x8b\x50\x39\xf9\x2a\xcc\x00\xb9\xc6\xb8\xac\xc5\xaa\xf7\xa4\x11\x91\x6f\xe6\xb7\xf9\x9a\x35\x93\x98\x39\xff\xf3\x9e\x4f\xf7\xb0\x08\x6c\xb9\x0b\x4b\xf3\x1e\x96\xdd\x16\xc3\xe7\x10\xd7\x7f\x41\xbe\x13\x4a\x42\x1f\x81\x55\xfe\x62\xfb\x89\x9a\x3c\xe8\xc2\x61\x17\x39\x85\x94\xd3\x4a\x98\x26\x80\xa7\xa0\x88\x29\x04\x26\x09\x2e\x7c\xa7\x89\x92\x13\x86\xef\x34\x02\x39\x12\x7a\xdf\x97\x32\xed\x19\xc5\x2b\x75\x26\x92\x8e\x94\x97\x20\x09\x48\xee\x81\x51\xcc\x04\x90\x61\x2f\xcb\xf3\x29\xf7\x43\xb1\x8f\x2b\xb2\x2a\x0c\x21\xb5\x88\xb4\xb8\x70\x01\x3a\x89\x37\x7c\xf4\xd8\xaa\xc9\x99\x62\x78\xe3\x85\xb0\x49\x3f\xdb\xfc\x62\xa9\xa2\x7b\x09\x53\x93\xcc\xf0\xe2\xdb\x21\x11\x13\xda\x36\x5c\x3c\x4e\x19\x1e\xb8\x37\xff\x8d\xa6\x1d\xda\xcb\x09\xcb\xb2\xbe\xae\xd4\xbd\xd9\x81\xb4\x92\x88\x2a\x43\x98\x5d\x96\x2a\x45\x3b\xe4\xc9\xb9\x03\x7b\x30\x43\x5f\x19\x5e\x09\x84\xfb\x52\x45\x34\xfe\x43\x8f\x29\xa5\x7c\xd8\x8c\xc9\xe0\xf4\xf4\xa6\x7a\x2f\x2a\x25\x68\x87\x3a\x12\x8e\x85\xc0\xeb\x0e\x8d\x21\x33\x67\x57\xbe\x55\xd9\x95\x94\x02\x82\xea\x1d\x41\x60\x63\x47\xf0\x72\x94\x90\x77\xb8\xa7\xb2\x20\xae\xf8\xaa\xb9\xed\xf8\x11\x6e\x3b\xa6\x59\x78\xd6\x91\x0e\x55\x76\xd9\xcd\x3f\xf0\x9a\x12\xe5\x44\x69\x15\xb7\xad\xac\xc6\xe4\xb1\xaf\x78\x57\x38\x5d\xe1\x9c\x6c\x84\x22\x66\xfc\xe5\xc8\x83\xfa\xf7\x39\xd4\x3f\x64\xd7\xa5\x58\xef\x9a\x44\xba\x68\x29\x73\xbf\x8a\xb2\xc4\xa3\x8d\x6c\xd7\xe8\x19\xe8\xfa\xb8\xc6\xe8\x31\xf0\x9c\x1b\x4f\x25\x67\x69\x6d\x6b\x8e\x32\xe7\xe8\xe8\xda\xa9\xb8\xc9\x34\xef\x6b\xd4\x0f\x1c\x94\xcc\x24\x98\x04\xe4\xed\x85\xea\xc5\x6b\x87\xbd\x80\xf3\x15\x11\x0b\x55\x59\x85\xe5\x7f\x82\x8e\x5e\x1b\xaa\x9f\x6f\xa5\x8c\x38\x74\x6e\xfc\x85\x93\x46\x00\xc0\xf6\xef\xde\xd5\xbf\xfd\xb4\x2d\x65\x2d\xa5\xaf\x2d\xa8\x34\x7e\xb1\xc0\x99\x45\xed\x71\x6a\x29\x8d\xb2\xd2\x79\xf2\x25\xa5\x13\x38\x48\x38\x74\x00\x83\x62\x87\x0b\x6f\xf6\x01\x8b\x7b\xc8\x16\x95\x74\x98\x2c\x8a\xe6\xa8\xe6\xfd\x2c\x43\x61\x10\x4a\x82\x70\x72\x48\x12\xe4\xcf\xa0\x6a\x7f\xee\x03\xd2\x84\xa3\xd8\xd4\x46\x17\x8b\xf5\xad\x6e\xe6\x5a\xb3\xd8\x59\x1c\xb8\x7a\x97\xac\x29\x24\x8b\x39\x98\x45\xb7\x21\xe5\xaf\xc1\x91\x4d\xc9\x34\x3a\x61\x16\x29\xd2\x23\xdd\x03\xab\xb4\x50\x45\xb7\x3a\x15\xb6\xce\x79\x3e\x47\x1d\x10\x24\x9a\x4e\x8d\x25\xbb\x81\xf5\x47\x04\x17\xba\x32\x69\x9e\x8b\xb8\x74\xe8\x0b\x06\x9e\x3b\x53\xb6\x7e\xe0\xe1\x83\xc7\xce\x79\xcc\x16\xc6\x3d\xae\x70\xbb\x26\x9a\xbf\xb3\xc9\x97\x4c\x80\x25\x36\x36\x79\x8f\x09\xb0\x04\x06\xe3\xc3\xd0\x77\x5e\xc9\x9c\x17\x5d\x5b\x88\xe6\xa0\xb1\x15\x0e\xc8\x6f\xcc\xa4\x88\x08\x5e\x22\xf5\xc2\x36\xc6\x1a\xe8\x2b\x79\x85\x25\xe3\xfb\x03\x5c\x91\x17\xd4\xdb\x87\xc3\xa6\xb6\x95\x71\x1d\x30\x4c\xad\x38\xe4\xf8\x4e\x41\xe0\x27\x13\x1d\x1b\x2f\x80\xac\x8a\xe6\x46\x89\x09\x16\xf1\x60\x43\xf2\x1c\x51\x13\xa0\x6d\xc8\x2b\xb9\x1b\x14\x33\xd4\x9a\xb5\xc6\x0d\xf0\x64\xc5\xcd\x88\xe1\x01\xf3\x69\xaa\x31\x38\xf9\x00\x5c\xe8\x3d\xff\x1d\x19\xd3\x73\x05\x5a\x60\xb6\x02\x38\x3f\x04\xb1\x51\x6a\x36\xe0\x93\xa0\x75\x27\x00\x1e\xb4\x36\x04\xed\xa9\x69\x43\xb2\xc5\x20\xa9\x34\x58\x9a\x75\xb4\x37\x14\xcc\x10\x7f\x8d\x57\x54\x62\x16\xb4\xef\x2c\x07\x8c\xa9\x2c\x82\x81\x80\x30\xae\x98\xda\x84\x18\x01\x8b\x1e\x70\xaf\xd6\xe4\x73\xb6\xae\x91\x9f\x63\xe3\x7b\xa6\xb6\x10\xdb\x30\xb1\xda\x64\x3e\x7a\xa6\x7a\x0b\xf2\x29\x8a\xfd\xc5\x53\x0d\xf8\x32\x4e\x71\x19\x32\xed\x5e\x1a\x37\x07\x43\x2c\x22\x76\x88\x68\x61\xd7\xfa\xec\xf1\x13\x0e\x77\x6e\x9a\x6f\xd9\x71\x8c\xee\x6e\xf6\xc2\x96\x0b\x5a\xeb\x27\x11\x6e\x2a\xbf\xa9\xd3\x76\x6c\xaa\xbd\x30\x58\xb2\xf6\x64\x2a\xf0\xd1\x4b\x07\xa3\x9e\x0c\xd9\x67\x87\xbf\x74\xea\x2f\x1d\xf6\x49\x6a\xb8\xbd\xfb\x91\xbd\x71\x78\xb7\xfe\xc9\x61\x1f\x1c\xfe\xc6\x69\xc2\xb7\xf7\x0e\xff\x84\x91\x02\x5e\xd1\x6f\xe7\xc4\x62\xef\xa0\xf8\x89\xd5\x86\x4c\xbf\xca\x72\x17\xbf\xbc\xff\xd0\x65\x7f\x43\x51\xf6\x9d\xc3\xfb\x88\xb0\x34\xe7\x15\x7f\x45\xd1\xae\xe6\xbd\xbe\xb9\x73\x29\x59\x9d\x42\xca\xae\xd4\xc8\x80\xbe\xbe\x21\x63\xf3\xb6\xf1\xb7\x53\x5f\x9a\x75\xc3\xab\x67\xa9\xf1\xab\x53\x4f\x61\xd1\x36\x3d\xfc\xac\x06\x3e\x89\x1b\x51\x3d\x60\x19\xfc\x4d\x98\x5f\xf7\xda\x71\x9e\x51\x99\x71\x42\x96\x90\xb2\x84\x94\x85\xfa\xed\xdd\xad\x29\x9b\x74\x6d\x9e\xbb\x5f\x0b\x95\xbb\xbd\xae\xe6\xe7\x2f\x15\xbe\xf9\xd0\xf5\x13\xac\xf0\xa8\x19\xa3\xbf\x8c\x66\x06\x3b\x33\xa8\x07\x8d\xa4\x9e\x28\x09\x0f\x69\x26\x93\x80\xc7\x70\xeb\x6e\x13\x5d\xdf\x7e\xe7\xd4\xe7\x14\xbb\xd6\xaf\xd3\x58\xd0\xab\xad\xfc\xd6\xcc\xbf\xb9\xf2\xdb\x0d\xcf\x23\x41\x15\xf5\x2d\xea\x8b\x46\xc7\x6c\x2e\x70\x2b\x57\x7c\x5e\xd7\xd7\xf8\x79\x8d\x9b\x79\xd6\xbc\xc1\x08\xc9\xab\x87\x87\x3c\xa3\xdb\x06\xe6\xbb\xfd\xab\x53\xac\x13\x65\x16\x0e\x2b\xa1\x57\xdf\x30\xaf\x8c\xcd\x3f\x97\xa6\xac\x84\xcd\x29\xf4\x31\x24\x7e\x62\x73\xc2\x0e\x3f\x3b\x8d\x1a\xe5\xaf\xb1\x85\xc0\xe6\xb3\xab\xc0\x0d\x7c\xf7\x5a\xa6\xae\x29\xf5\x3d\x5b\x96\x71\x7a\xee\xec\x83\x1c\x47\x36\xaf\x5b\x77\x66\xfb\xba\x75\xcd\x44\x60\xf6\xeb\xd6\x86\x5e\x4b\xa1\x47\x34\x07\x21\xe8\x98\x0b\x3e\x37\xae\xd1\x53\x08\xfa\xe6\x12\x2f\x9b\x92\xf3\x73\xc8\x0f\xc9\x45\x20\xa0\xb7\x38\x91\xb9\x10\xee\x2d\xce\x67\xc9\x77\x92\x0c\xa2\x92\xa2\xda\xbb\xc9\xa0\xea\x86\xe6\xe2\x18\x2a\x6f\x14\x5e\x8e\x8b\x42\x91\x60\xe1\xf0\x70\x42\xde\x0d\x0e\xdc\x38\x05\x02\xf8\xfe\xce\xbe\xa6\x20\xae\x50\x8e\x5d\xc3\xdf\x6b\x74\x2c\x9e\xc7\x6f\xe9\xd2\x45\xad\x6f\xa0\x5f\x8b\xd8\x14\x4a\xc8\x12\x03\x43\xd3\x2f\xcf\x2c\x11\xd8\xa8\x55\x38\x6f\x00\x94\xa0\xe6\xcc\x78\x49\x44\xa1\xb8\x94\x17\x87\x82\x36\x0a\x3c\x07\xaf\x8e\x8e\xae\x94\x59\xeb\x9d\x0a\x96\x7a\xc0\x4c\xda\x08\x73\xe0\x6f\x45\x9e\x3b\x69\xd1\x8c\xb7\x81\x47\x47\xb7\xaa\xa2\xcb\xa7\x54\xb4\xd1\x2b\xba\xcc\x2b\xd2\x4f\x4b\x28\xf0\xb9\xd1\x78\x78\x08\xd5\x39\x80\xeb\x24\x3f\x07\xf2\x8c\xa8\xd6\x70\x0f\x83\x61\xa5\x7c\x35\x46\x41\xe9\x10\xa0\x2c\xb7\x65\xb7\x27\x08\x6b\x9a\x7e\x53\xf7\x09\x00\x15\x34\x9b\x9f\x77\x5a\x12\xc7\x2b\xaa\xeb\x21\x9b\x99\xe7\x9e\xef\x12\x2d\x73\xde\x81\x09\x52\x07\x0c\x7a\x34\x80\xcd\x17\x18\xba\x57\x04\x60\xf6\xef\x97\xb8\xba\xdf\x14\xc7\xfd\x07\x79\xd8\x03\x84\xaa\x0e\xfb\x08\x1d\x18\x38\x2a\x68\x13\x1d\xed\xd1\xde\xd1\xee\xf0\x57\x78\x96\x67\xfa\xa1\x3a\xe7\x18\xa5\x5e\x5b\x26\x18\x86\x48\xb6\x2d\x1b\x8e\x11\xe7\x78\x7a\x97\x11\xd1\xfc\x0e\xbf\xa3\x57\x81\x64\xe0\x4c\xe6\x96\x86\xb0\xdc\x1d\x76\x6e\x8d\x21\x0f\x20\x63\x9d\x9f\x2e\x0b\x8e\x50\xaf\x52\x00\x44\x9c\x50\x1c\x36\x48\x3c\xcf\x60\x01\xcf\x26\x7a\xea\x94\x93\x7b\x81\x6d\x29\xbc\x6d\x9a\x5f\x92\xec\xc0\x60\xa4\x6f\x08\x1c\xde\x1d\x0c\x0f\x7f\xaf\x80\x2a\x41\x65\x28\x62\x76\x0b\x89\x8d\x57\x54\x50\xa6\x79\x25\x99\xeb\xed\x92\xb9\xb3\x89\x87\x6e\x5a\xf4\xfe\xe1\xc4\xc9\x60\x35\x48\x33\x05\x5c\x59\xe1\x1a\xa6\x52\x36\x76\x75\xe5\xa6\x81\x65\x9d\x05\xcd\x73\xe5\xd1\xd4\x45\x5f\x94\x91\xb1\x66\x09\x9b\x4d\x12\xbd\xe6\xca\xe8\x97\x00\xcb\x3c\x94\x61\xd7\x44\x95\xac\x0b\xc3\xdc\x9e\xf3\x60\xab\x14\xa1\x5d\xcd\x07\x6c\xd1\x04\xac\x04\x17\x51\x17\xd0\x7f\x88\x9c\xe6\x98\xb4\xe0\xe8\x11\x15\x9e\x3b\xd3\xd1\x8a\x2f\xeb\xcb\x06\x9c\x17\xdb\xf2\x42\x15\xb4\xb1\x44\x56\x3b\x13\xac\x96\xc7\xda\xdc\x11\x21\x46\xba\x08\xb1\xd1\x70\x50\x9b\x10\x97\x37\xaa\x95\x91\x9a\x06\x24\x00\x24\xf5\xc1\x0a\x5f\xbc\x26\x19\xf1\x8d\x42\x34\x94\xe5\x31\xf2\x7e\xb1\x1a\x84\x91\x70\x2f\xf7\x51\x58\x4f\x1a\xf4\xae\xfc\x17\xd6\x91\xd4\x5d\x1d\x1d\x15\x47\x5b\xd2\x5e\x99\x18\xf3\x89\xce\x09\x8a\x33\x81\x9e\x5c\xe9\x98\x20\x03\x7a\x78\x43\x85\xfe\x09\x09\xbc\x1a\xb1\xfa\x4e\xce\x1a\x63\xf5\x3d\x33\xe6\xf5\x05\x42\x57\xd0\x8e\x84\xe8\x61\x33\xdf\xec\xe0\x4d\xec\x79\xbe\x0e\x05\x78\x4a\xb2\xf7\x9d\xa5\xba\xb3\xd2\x76\x42\xb3\x28\x6d\x4b\xe9\x7b\x64\x46\xa6\x32\x3a\xa4\x0a\xad\x19\xda\x31\x8a\xbd\x22\x7b\x29\x58\x80\x5b\x5d\x7e\x60\x5c\xd2\xea\xdf\x48\xec\x72\xab\x1f\xc1\x78\xb6\xb2\xd7\xe8\x73\x5d\x5d\x2a\x2c\x60\xdf\x13\x6e\xb9\x11\x98\x64\xad\x63\x92\x19\xaa\x51\xae\xa0\xaf\x1b\x2e\x4e\x6e\xe0\x02\x0e\x0c\x09\xad\xde\x35\x22\xf2\x8e\x6b\xc4\x73\x63\xc3\xae\x78\x41\x40\xc3\xeb\x25\xca\xad\x6e\x35\x1c\x05\xe4\xc8\x6b\xc0\x3f\xb0\xaa\x50\xa7\xd9\x45\x7a\x4e\x76\x3c\x47\x97\xef\x99\x7e\x76\x2d\x72\x04\x44\xdd\xde\x15\xcf\x6e\xc6\x2e\x30\xf3\xf1\x07\x7f\x85\x8c\xbc\xb1\x31\x6d\xe3\x06\xb0\xca\x8c\x03\xad\x93\x63\x3d\x29\x1c\x52\x4b\x9a\x5e\x19\x9e\x3a\xc8\xc2\x24\x5e\xaa\x4a\x6b\xe4\xcd\x46\x2c\x8b\x84\x14\xe9\x06\x16\xed\xc4\xf2\x69\xdd\xb2\xac\x6e\xfd\x07\x58\x22\x26\x52\x1a\x74\x72\x03\x0f\xc4\x82\x92\xf3\x84\xb5\x8e\x3e\xb5\xce\xb0\x94\x57\xef\x7a\xc0\x16\x52\x68\xe5\xd1\x15\xa8\x9a\x04\x72\xbd\xfa\x6f\x6f\x33\xd6\x22\x75\x9b\xcd\x8e\xad\xc7\xf8\x46\x8c\x41\x73\x7d\xc3\x66\x6c\x05\x7c\xcd\x39\xbb\x63\x57\xec\x92\xdd\xb2\x6b\xa4\x3e\x60\x7a\xe1\xdf\xb5\xdd\xd9\xb2\x17\x7c\x72\x3a\xb4\x60\x60\x80\x29\xde\xf2\x1f\x1d\xf6\x92\x77\x07\x16\xfb\x0c\x4b\xe0\x13\xd7\x78\x72\x71\xbe\xbe\xe1\x05\x27\x25\x93\x3e\x70\xc5\x50\xc9\x84\xf7\x5c\xe7\xd9\x45\xda\x2b\xc1\xbb\x15\x87\x39\x93\x07\x76\x7e\xea\xe6\x07\xc9\xcf\xce\xc3\x03\x10\x8e\x1c\xb8\xa4\xdb\xa5\xe7\x05\xa4\xa4\xe6\x8c\x8d\x1f\x9c\x7d\xc9\x74\x33\x87\x0a\xec\xa3\xd4\xf9\xb3\x6e\x94\x13\xce\x81\xf9\x1d\x77\xba\x96\x0d\xe0\x60\x35\x51\x9d\x69\x43\xcd\xd4\xe3\x2f\x56\xff\x4d\x5e\x1b\x65\x7d\x85\x55\x6e\x25\xff\xa8\x2a\xfb\x62\xbf\x52\xc7\x0f\xb6\xa4\x15\x7c\x8e\xe5\xde\xf9\x77\x5e\x70\xe1\xa2\x32\x37\x06\xd7\x95\x24\x5a\xf9\x0a\x42\x08\xb4\xf6\x64\xdb\x55\xcb\x1e\x45\x39\xa3\x0f\xc1\x58\x3b\x11\x71\x55\x95\x69\x43\xa1\x8e\xa0\xcf\x87\x56\xf7\x35\x97\xce\xd8\x24\x75\xfa\xf0\x50\x5e\x20\x2e\x49\xb7\x84\xef\x29\x83\xa6\xcb\xde\xab\x43\x1c\xb2\x2f\x84\x3f\xbd\x17\xc2\x5d\xf9\x6c\x3c\x83\x77\xdb\x23\xcf\xda\xf8\xd2\x99\xda\x31\xbc\xd0\xf1\xb2\xc3\x01\x1a\x13\x23\xd3\xa8\x7c\x3f\xa7\x15\x99\x47\x84\x3e\xc3\xef\x29\x7e\x4f\xc5\xf7\x14\xbf\xa7\xf4\x1d\xfe\x56\xc4\xec\x4f\x95\x08\x13\xc3\xdd\x02\xcd\x04\x5c\x1f\xf0\x66\xa3\xf2\x50\x39\x6d\x86\xac\x89\xe7\x42\xdd\x81\x21\xfb\x4d\x3c\x14\xe0\xf1\x1a\x63\x20\xd0\x06\xde\x2a\xf0\x15\xbe\xbd\xf6\x86\x9f\x08\x10\x89\x7c\xe8\x9b\xea\x40\x0e\xdb\xd8\x6d\x9f\xa0\x4b\x0d\x11\x82\xa1\x2b\x9d\xb0\x95\xd3\xae\x4f\x93\x33\xd0\x28\x1a\xa9\x10\x48\x35\x88\x15\x95\x4c\x05\x51\xc8\xa6\x46\x01\x43\xe5\x44\x22\x7f\x45\xc5\x3a\xa7\xd2\x48\xf3\x3a\xa9\x7e\x59\xdb\xe1\xe0\x4b\xfb\x75\xbe\xcd\x55\x59\x7e\x74\xec\x89\xe8\x35\xf5\x19\xf9\x2d\xfb\x2d\xd6\xe9\xee\xdc\xef\x3e\x56\xdd\x0a\x83\x8d\xef\x55\xb3\xa2\xae\x95\x2e\x88\x1e\xab\xe4\x45\x65\x25\x2f\xb0\x92\x9c\x15\x7e\x52\x45\x2f\x79\x83\x44\x3e\x2f\xb1\xe8\xdd\xd3\xca\x5c\xf1\x14\xce\xce\x54\x79\xe7\xd9\xc5\xcf\x50\xdb\x15\xd6\xb6\x79\x5a\x6d\x70\xc2\xc2\x51\xfb\x58\x6d\xb7\x65\x71\xd4\x2b\x29\x8e\x22\xda\xf6\x07\x87\xfd\xec\xb0\x1f\x1d\x14\xc6\x75\xda\x16\x5d\x90\xb9\x51\x10\xc1\x36\x4a\x59\xa4\x39\x7d\x01\x02\x48\xb8\xf9\x3a\xa4\x1f\x13\x2f\xae\x0c\xb3\x51\xab\x51\x63\xcb\x24\xe0\x4e\x4a\x2d\xfc\xe9\xc0\x93\x76\x9f\x86\xea\x0a\x51\x3a\xfa\xd3\x69\x5d\x91\xad\xb5\x57\x69\x61\x1d\x16\xe1\xe2\x5b\xc7\x7b\x26\x93\xe3\xd0\x46\x9b\x05\xa8\xc9\x91\xe2\xf2\xa5\x54\x15\x12\x3f\x41\x1b\x8f\xee\x3f\xf1\xea\x3f\xbe\xfe\x5f\x6e\x20\xac\x8b\x26\x44\x03\x30\xea\x0a\x80\xb8\xd5\xbd\x12\x22\xc0\xa5\x1b\xf0\x40\xc0\xe6\x2f\x07\x9e\xf6\x61\xf3\xd7\x17\x60\x83\xfa\x3e\xe5\x16\xdc\x42\x90\xd1\xb1\x2c\xd9\x5c\xe3\x37\xa7\xbe\x77\x23\x40\x23\x43\xb5\xbe\xbf\x1e\x85\xce\xe1\x26\xc8\xad\xb5\x68\xa0\xf9\xa5\x06\xaa\xa1\x93\xec\x56\x2c\xa1\x23\x96\x10\xc1\x28\x70\xa0\xa0\x80\xd1\x6f\x28\x5f\x64\x7f\x38\xbc\x75\x3a\xb0\xfa\xc7\xec\x1f\x18\xa7\xe1\x5f\xf0\xa7\x65\x9d\x9c\x9c\xf4\xd8\xef\x70\x1a\x57\xc0\xf0\xf7\x2f\xc3\x70\x9e\x1a\x5f\x07\x35\x91\xc3\x11\x3f\x57\xd0\xd3\xdf\xbf\x04\xc3\xbc\x89\xa7\x41\xad\xaa\x81\x6a\x18\x2e\x25\x0c\x83\xbd\x22\xa9\x28\xb2\x12\xd0\xfb\xc9\x81\xa7\x7d\xe8\xfc\x74\x00\x3a\x4f\xd8\x15\x32\x52\x85\xd8\xf3\x4a\x2b\x62\x21\x35\x3a\x5a\x57\x40\x07\xf4\xf2\x2b\xf9\xf4\xe1\xc1\x7b\x78\x88\xc7\x06\x7a\xcc\x3c\x13\xe1\xb9\x33\xb2\x48\xc8\xa4\x57\x1b\x34\xae\xc5\xb7\x98\x4c\x92\x32\xb1\xe7\x56\xda\xc4\x74\x07\x03\x96\xc2\x76\x66\xa5\x14\x6f\x2f\x25\x6e\x63\xb8\x43\x5b\x16\xa7\x10\x19\x00\x8c\x9f\xfe\x37\x50\x00\xd4\x27\x37\x7d\xac\x76\xff\x42\x3d\x5c\x89\x46\x10\xdf\xed\x4f\xd2\xa5\x9c\xa4\x98\xc9\x42\x7a\x91\xc3\xf8\xb4\xf6\x3f\xb5\xc6\x9d\x2a\x6a\xe6\x8f\x8b\xe2\xf1\x4a\x62\xef\xef\x8b\x2b\x4f\x07\x95\xf6\xaf\xd0\xca\xb6\x33\x38\x3e\xed\xf6\x60\x67\xa0\xb3\x91\x4f\x19\xd0\xad\x7e\x0a\xa9\xc3\x7e\xbf\xdf\x3b\x1e\x30\xe7\x53\xe6\xd8\xc3\xc1\xa0\x27\x1e\x57\x0e\x74\xc2\xb3\x4f\x7a\x27\x27\x83\x61\x9f\x39\x9f\xb3\x58\x54\xd1\xef\x40\xe6\x2b\xcf\x5f\x60\xd9\x4e\xe7\xb4\x0b\x3c\xc3\x95\x9f\x7c\xc2\x16\x86\xc7\xc7\x56\xb7\xdf\x67\x57\x81\xe3\x5e\xc3\x49\x03\xbf\x21\xf0\x7d\x33\x27\x58\x45\xe1\x8c\xbe\x77\xad\x3e\x14\xc7\xfe\xe0\xec\xe0\xc3\x8d\x1f\x01\xe7\x6b\x9f\x5a\x83\x41\xd7\xea\xb2\xab\x18\x98\x0c\xbb\x63\x9d\x74\xfb\xdd\x1e\x54\x95\xc5\xc1\xe6\x36\x8a\xa0\x74\x7f\x70\x3a\xec\xf6\x3a\xcc\x75\x80\x96\xa6\x2a\x86\xdd\xe1\x70\xd0\x3d\x61\x44\x45\xc5\x1e\x10\xd5\xd4\xe1\xde\xa0\x0b\x49\x91\x4b\x54\xa5\xdd\xe9\x1d\x9f\x9c\xf6\x8f\xd1\x37\x6d\xec\x04\xd8\x89\x7e\xbf\x7b\xdc\xc5\xd7\x10\xb8\xa4\x5b\x2f\x16\x75\x0d\x4e\x3b\xa7\x27\x1d\x4a\x4e\xfc\xe0\x9a\x7a\x3b\x80\xda\x98\x1b\xfb\xab\x24\x82\x3e\x41\xb9\x1e\x22\x04\x77\xe3\x84\x12\x54\xb8\x8a\x04\x74\x7b\xa7\xf4\x42\xdf\x7a\x83\xe3\x6e\x8f\x5e\x17\x51\x00\x8c\x71\x8c\xdd\xef\x5a\xa7\xdd\x53\x99\x6b\x11\x3b\x1b\xbb\x03\xff\x3b\xb5\x3a\xc7\x32\x05\x7d\xe1\x76\x07\x43\xa8\x5f\xbe\xef\xe4\xb8\x5e\x3a\xd7\x3e\x54\xd3\xef\xf5\xba\x03\x51\xcd\x0a\x6f\xbb\x52\xc7\x3e\xed\x58\xa7\xc3\xbe\x68\x31\x0a\xfc\x1b\x4f\xd4\x36\x18\x9c\x1e\x9f\x9e\x8a\xac\x91\x70\x3e\x88\xa3\x3f\x06\x38\xcb\x34\x77\xe9\x43\xcf\x2c\xab\x6f\x59\x9d\x2e\xa5\xc5\xde\x8c\xaa\x03\x9c\x4a\xef\x09\xcd\x1d\xcc\x7c\xcf\x3a\xe9\x77\x44\xb9\xc4\x73\x44\x03\xb0\x18\x4e\x01\x6a\x22\x11\x81\x4d\xa0\xe8\x1f\xf7\xfa\xbd\xfe\x71\x91\x4a\xa3\x45\xc8\xf5\x4f\x07\x7a\xaa\x57\x4e\x85\x35\xfe\x29\x8b\x7c\x98\xc4\x41\xf7\xb4\x2f\xd2\xd4\xe2\x18\x9e\x9e\x0e\x10\x76\x9e\xb7\x5e\xa3\x6d\x0d\x8c\xa3\x33\x3c\xc5\x46\x20\x25\xb9\xde\x88\x86\x4f\x3b\x83\x0e\x9b\xf9\x2b\x6a\x70\x78\x0a\x6b\x68\x38\x10\xef\x9e\xf6\x1e\xcd\x16\x72\xce\xbb\x96\xd5\x83\x11\xb0\xb9\x0f\x54\x50\xec\xc3\x9a\xed\x20\x80\x3a\xfd\x21\x83\x95\x01\xab\x45\xed\x11\x58\x09\xa7\x00\x34\x54\x21\x4b\x52\x39\x55\xdd\x61\xef\xa4\xdf\x05\xda\x1e\x18\x5c\xdf\xa1\x1e\x75\x4e\x61\x49\x2c\xd0\xc4\xe2\x2a\x8a\x23\x5c\x30\xb0\xd6\x60\x7f\x2c\x96\x51\x92\xaa\xba\x7a\x9d\x21\x64\x65\xb8\x32\xb0\x10\xbc\x40\xcd\xda\x3a\xe9\xf7\xba\xa7\x1d\x4c\xc2\x41\x40\x0b\x1d\x9c\x0a\xd1\x66\xaf\x7b\x3c\x3c\x11\xcf\x1b\x2f\x80\xb5\x0b\xfd\xed\x5b\x3d\xd8\x39\x8c\x86\xa8\x72\x2f\xa3\xd0\xdb\xcc\xbc\x5b\xb9\x61\xa1\x07\xcb\x28\x55\x70\xeb\x9d\x1c\xf7\x2d\x74\x9d\xec\x3b\x21\xce\x76\xa7\xd7\x1f\x9c\x0c\xba\x7d\x4a\x5a\x44\x04\xc5\x5e\x0f\x72\xdc\x44\xf1\x86\xc6\x0e\x1d\x04\xaa\x51\x2c\xbf\xc1\xf1\x09\x74\xd9\x62\x81\x03\xdc\xea\xcc\x8b\x21\xa5\xd3\xeb\xe2\xca\x50\x29\x00\xd9\x64\x49\xe5\x7a\x3d\x00\x77\xe0\xdc\x86\xa2\xf7\x27\xb0\x96\x4f\x8f\x87\x2c\xf0\x60\x45\xc1\xca\x9b\xcf\x71\x61\x21\x6c\x01\xc7\xb0\x00\x8f\x1d\xb1\x95\x60\x2f\xc1\x12\xef\x8b\x24\xb9\x6b\x07\xc7\x43\xf4\xd2\x2a\xd3\x70\x93\x75\x00\xb8\xb0\xc2\x4f\x45\x52\x0e\x40\x05\x18\xc0\x6b\x27\x5d\xec\x16\x7d\xa5\xfd\x06\x9b\xb9\xdb\x83\x8d\x29\x93\xc4\x0a\x3e\x3d\x81\x4d\x97\x27\xed\xe6\x52\x40\x1b\x9c\xf4\x87\xb2\x8f\x6a\x47\x40\x22\x4c\x47\x57\x26\xaa\x2d\xd1\xed\xf4\xbb\x27\xa7\xb2\x59\xb5\x30\x21\xc1\xea\xf5\x65\x2b\xc5\x96\x38\x3e\xe9\x01\xe6\xed\x95\x92\xbd\xdd\xe4\xd4\xf3\x02\x09\x16\xe8\x04\x6c\x2d\x91\x9e\x0f\x13\xa6\xa7\x73\x82\x89\x2b\xc4\x61\xdd\x13\x8b\x1e\xe5\x7a\x81\xa5\x84\x53\x19\x00\x2a\x0f\x09\x24\x83\x21\x20\x42\x85\x36\xf2\x25\x0b\xc8\x3e\x82\x21\x21\xee\x1c\x5a\x27\x0c\x7d\x68\x65\x2b\xed\x14\x80\x45\x73\xdc\xeb\x76\xe5\x07\xb9\x75\x06\xf2\x55\x61\x91\x6e\xb7\x83\x2b\x5b\xa6\xae\xb3\x78\x1d\x78\xb0\x71\x01\x47\xc3\x99\x23\x12\x73\x28\xf5\x4e\x8f\x4f\x60\x2d\xa8\xe4\x1c\x75\x9c\x58\x27\xc7\xc7\x00\x3d\x99\xbe\xc6\x83\x50\x94\x18\xf6\x3b\xb0\x22\x44\x7a\x81\x28\xfa\xb0\x36\x7b\x96\xca\x2f\x90\x85\x58\xd3\x40\x12\x76\x8e\xa1\x5d\x7f\x16\x16\x0b\x0b\x00\x00\x5b\x0b\x12\xc3\x14\x5d\x61\xae\xf0\x04\xeb\x76\x4e\x06\x50\x81\x9f\xa4\x9b\x38\x4a\xd4\x21\x86\x45\x23\xd7\x75\x12\x3f\x94\x29\xdd\x53\x16\x3a\x37\xce\xdf\x51\x8e\x13\x86\x27\x43\x58\xb7\x90\x08\x8b\x06\x0e\x21\x58\x80\x68\x47\x0c\x5f\x00\x15\x0f\x06\x98\x80\x3e\xd1\x71\x4f\xf6\x60\xd5\xd3\xdb\x2c\x76\xae\xec\x63\xab\x7f\x72\x0c\xc8\xac\x40\xc9\x80\xda\x60\xc3\x8b\x77\xea\x3e\xe0\x84\xd3\x1e\x1c\xa4\x0a\xb6\xfd\x1e\x6c\x00\x98\xfa\x35\xf0\xd8\x1a\xaa\x18\x0c\x07\xc7\x30\x54\x91\x4c\x60\x02\x74\xda\x85\xed\x24\x92\x0a\x38\xc1\xda\xe9\x9e\xc2\x5c\x50\xb2\x06\xa6\x7e\xef\x04\x50\x4d\x0f\x92\xd7\xce\xc6\x81\x91\xad\xc5\xc6\xb5\x8e\x8f\xd9\x1a\xa5\x18\xeb\x6c\x3e\xa7\xb1\xc2\xff\x21\x9b\x17\x67\x88\x2f\x86\x27\x80\xf6\x99\xda\x1b\xc3\x8e\x05\x6b\x68\x1d\x64\x2b\x3c\xa3\xbb\xfd\x61\x0f\x0a\x47\xb7\x33\x89\x64\xa1\x6d\x38\x23\x60\x27\xca\x25\x81\xab\xec\x18\x76\x32\xa0\x5c\x0f\x20\x2c\x53\x87\x43\x58\x12\x70\xfc\xca\xe1\xc3\x52\x82\x41\xc0\x84\x6c\x24\x3d\xd0\x85\x33\x75\x00\x47\x4d\x1c\x6d\x1c\xb1\x1f\x60\x9f\x0d\xf1\x98\x48\x9c\xd9\x2c\xf0\x44\x36\x98\x5d\xd8\x0d\xc7\x2c\xdf\xa3\x80\xfc\x60\x3b\xc3\x7b\x38\x53\x35\x0d\xad\x1e\x94\xec\xb3\x62\x31\x5a\x03\x48\x3a\xc6\x84\x64\x09\xdb\x8a\x40\x00\xa3\x38\x61\x89\xef\x85\x21\xec\x13\xc8\x30\x3c\x86\xe5\x0a\x74\xc1\x0d\xa2\x3c\x40\xfd\x5d\xc4\x1a\xa5\xfd\x0d\x94\x49\xb1\x90\x61\x34\x96\x35\x94\x29\x62\xb3\xf7\x60\x4e\x61\x4a\xb5\x7d\xae\x52\x42\xb9\x91\x07\xa7\x30\x97\xa5\x45\x3f\xe8\x5b\xd0\x6a\x8e\x02\xfa\x43\x20\x22\x00\x2e\x29\xa2\xbf\x1e\x6e\x16\x7c\xf1\x00\x3f\xc2\x90\x4e\x87\x44\x47\xa6\x00\x4c\xc0\x41\xb0\xc6\x80\x74\x49\xa3\x95\x93\x46\x84\xf5\x8f\xe1\x4c\x67\xda\xce\xe9\x0e\x60\xe1\x0f\x99\x3c\x60\x61\x29\xc1\x51\x7c\x32\x64\xb7\x4b\xcf\x49\x89\xb2\xeb\xe1\x88\x8a\x03\xf0\x18\x8e\x16\xf1\x9a\xac\xa2\x6b\x45\xfc\xc1\x06\xd0\x30\xd1\x10\x05\xc8\xe2\x5d\x2d\x47\x58\x11\xd6\x71\x7f\x6b\x8e\xbe\xaf\x52\xa4\xc3\x8b\xf4\xef\x1d\xe9\xde\x67\x23\x9c\x63\x93\x84\x9b\xb2\x44\x31\x7f\x4d\x3e\xd7\xee\x96\x31\x7f\x81\x92\x7c\xf2\x0e\x97\xdc\x3c\x6a\x63\xc3\x7c\xf3\xbe\x52\xdf\xcd\xe7\x1e\x93\x3a\x8f\x23\x61\x63\xfc\x96\xbc\x0a\x31\x21\x87\xf2\xc6\xb1\x9d\x51\x9c\x79\xcd\x49\x5f\xac\x3b\xd7\x7d\xc4\x42\x20\xca\x7d\x11\x4b\xcd\x29\x34\xa0\x35\xa9\xc6\x50\xc4\x27\x8f\x2a\x75\x14\xbe\xf1\xbe\xe4\x3a\x39\xab\x0a\xde\x91\xee\x95\x4f\x4b\xe5\xd1\x15\x98\xae\xb1\xa0\xfb\x05\x40\xb6\x20\x32\x45\xe8\x1f\xfd\x5e\x42\xf7\xe9\xec\x08\x8d\x43\x18\xc1\x3f\x6b\xff\x6c\x14\x3e\x12\xda\x1f\x6b\xed\x05\xfb\x67\xad\xf6\x4f\xb3\x01\x5f\x6c\x65\x19\x82\xec\xd0\x7b\x6f\xf1\xfa\x6e\x6d\xfc\x73\x82\x25\x1a\xb5\x8f\xe1\xb4\x66\x52\xa4\x2e\xa4\xce\x5f\x46\x33\x0f\x66\xd0\xd2\x74\x90\xa8\xdf\x15\xde\x08\xe2\x9d\x2c\xef\xa3\xdb\x04\xbe\xea\x56\xa0\x74\x05\x97\x47\x16\x88\x31\xa9\xd9\x51\x81\x1b\xb0\x2f\xdf\xa9\xcc\xb5\x59\x8d\xd5\x64\xbe\xfb\x5a\x63\xd7\x09\xbc\xa6\x64\x45\x6e\xac\x85\x26\xab\x30\x22\x6e\xd4\xec\x6f\x66\x13\x8a\xa6\x32\xad\x6d\x25\xc0\xa0\x36\xf8\xb0\xc5\x4b\x0a\x9e\x8e\xcb\x7d\xca\xad\x41\x71\xca\xd0\xa1\x8d\x9d\xa1\x14\x57\x1b\xc6\xe1\x75\x4b\x23\x4a\xce\x78\xa0\x06\x45\x8e\x3b\x33\xf5\x96\xf1\x67\x1d\xe6\x4b\x16\x3b\x21\xe5\xdb\x3e\x79\x1a\xd4\x60\x0b\x7b\x47\x77\xca\x37\xf2\x1a\x0d\xf4\x09\x50\x99\xd7\x33\xa9\xc1\x5e\xff\xd9\xee\x07\xb4\xee\x16\x97\xb2\x8d\x86\xb7\x4d\xb8\xd7\xe8\x4a\x2f\x3f\x7b\xf9\xd4\x3c\x75\x7a\x14\x42\xcb\xc8\xd0\xd1\x4b\xc7\xda\x6b\xab\xd1\x35\x8f\x8e\x1a\x8d\xc4\xb4\xe9\x63\x4c\xbe\x57\x9f\x59\x78\xe5\x91\x9b\x94\x03\xb8\x8a\x45\x56\x13\x8b\xec\x9f\xc2\x16\x7b\x14\x9c\x25\xa3\x3c\x0c\x80\x5e\x73\xd2\x68\xa0\x44\x5f\x38\xf1\xa4\xaa\x4d\xac\x38\x77\x11\x26\x3a\x66\x1e\xe8\x57\x82\x8a\x98\xe8\x98\xb2\xd1\x70\x0a\xb7\x62\x31\x40\xc4\x35\xd1\x52\xda\x0f\x33\xaf\x50\xf7\x93\x3d\x65\x49\xd3\xc9\xd5\xd3\xf3\xd4\x22\x08\x99\xb0\xd3\xba\x87\xed\x8e\x7f\xd0\xb4\x80\x05\x85\x9d\x5f\xc2\x2d\xd4\xd0\x40\x07\x6a\x18\xc2\x0c\x9a\x8a\x46\xc5\xa4\x2d\xc9\x71\x11\x24\xfa\x47\x47\xb1\xf8\xb6\x54\x66\x36\x8c\x4a\x8c\xd2\xa3\x23\x89\x5e\x96\xa4\x60\x39\x07\x08\x98\x0f\x0f\xd2\x7e\x6c\x99\xf7\xcc\xc1\x65\x37\xdf\x0d\x6b\x4f\x73\x5e\xf6\x9b\x46\x71\x2a\xcd\x7c\xc3\x89\x22\xb4\xe3\x52\x53\xcd\x3b\x8a\x3a\x84\xad\x52\x8e\x43\xaa\x74\x3b\x4a\xae\x7a\x42\x33\x26\xc3\xc2\x14\x7a\xa7\xfc\xc3\x91\x3b\x21\x81\xe1\x27\xd9\x0e\x1a\xca\x83\xff\xa6\x7b\x1a\x8c\x6a\x0b\x1c\x8a\xdf\x10\xc1\x20\xc2\xa9\xb9\x2d\x50\x9a\xa9\x36\xeb\x47\x52\xaf\xd4\x87\x55\xed\x02\x06\x6b\xf6\x77\x0a\x91\xc4\xcc\x85\xb3\x46\x1c\x39\xb8\xf3\x59\x0d\x8d\x81\xdb\x90\x58\xa3\x93\x28\xd5\xbe\xfe\xff\xd4\xd7\xd4\xb9\x6a\x26\xde\x1a\xfd\x99\x7b\xb3\xa6\xf0\x75\x24\xdd\xf1\xfd\xdb\x61\xbf\x38\x2c\x74\x59\xea\x32\xcf\x65\xb1\xb0\xdb\x98\xdc\x89\xab\xbc\x1a\x7a\xa9\x01\xac\xfb\x22\xf4\x57\x74\xd3\xf0\x5d\xec\xac\xbc\x9a\x39\x7d\x78\xd0\x3b\xad\xdd\x4d\x87\xac\x73\x6c\x92\xdb\x07\x0a\xd9\xf2\x54\xd5\x7d\xa5\x9b\x0f\x3b\xb0\x27\x9d\x22\x17\x2a\x2c\x0a\x8b\x7a\x8d\x14\x17\xb2\x6b\x43\x5d\x76\xc6\xe6\x36\x20\xa0\x50\x84\x89\x1b\xfd\xe2\x8c\x7f\x71\x5a\x21\xf7\xed\x7f\x3b\xdc\x87\x31\xc1\x9f\xd0\x7d\x78\x30\x52\x97\x97\xae\xde\x53\x17\x36\xb9\xcb\x81\xaa\x73\x8d\x4f\x64\x34\xae\xfa\xda\x9a\x23\x97\xa8\xcb\xb8\xde\xe0\xe5\xff\x87\x54\x0a\x7a\xe3\x28\xdb\xf3\xdd\xa4\x56\x9f\xb8\xef\xa6\x1c\x46\x58\x37\xd2\x42\x5c\xd7\x41\x5f\x15\xa6\xd9\x4e\x6d\x3d\x8b\x14\x8a\x65\x2e\x9f\xd4\x36\x78\xd1\x0c\xff\x1c\xf8\x37\x87\x7f\x6b\xf8\x17\xc2\xbf\x8f\x77\x57\x03\x54\x08\x86\x7f\xf0\xdf\x35\x3a\x6f\x82\x7f\xdf\xc3\xbf\x0f\xf0\xef\x1d\xfc\x7b\x5d\xc3\x70\x83\xac\xf6\x67\x6d\x4a\xeb\xe5\x55\x4a\x6e\x64\xc5\xd2\x7a\x47\x2e\x37\x2a\x5d\xeb\xe4\x42\x4f\xb4\xea\xb3\xce\xc8\xb6\xaf\xce\x31\x98\x76\x4a\x5a\xe7\x6a\xb0\x50\xe6\xbd\x70\x72\x88\x36\x32\xbc\xd3\xd0\xae\xf1\x3b\x70\xbc\x75\x1b\xb9\x76\x40\x98\xeb\x06\x74\x2c\xcc\x9b\x8b\x92\x9b\xc0\xc5\x17\xd2\xcf\x3e\xeb\xd5\xb5\x4a\x0c\x3c\x23\xdb\x3d\x13\xeb\xcf\xdc\xc9\x49\xc3\x6b\xf7\xa4\xaa\xaf\xef\xf2\xb6\x31\xb6\x8d\xc9\x7f\xee\xd1\xa8\x67\xf2\xfc\x8c\xff\x07\x5d\x41\x1b\x93\xc6\xc7\xe6\x37\x94\xf4\x8f\xff\xc1\x1f\x0b\xfe\x7d\x9c\x35\xe0\x2f\xc3\xa7\x56\x73\x2c\xde\x26\x4e\xf3\xf3\xb7\x90\xa1\xed\xb3\xc8\xcd\x65\x8f\x57\x55\xde\xc1\xc2\x5c\xc2\x69\x74\x61\xae\xdd\xaa\x3c\xe2\x7b\x6b\x1e\x47\xab\x97\x12\x61\x93\xd2\x45\xf4\x85\x0a\x4f\xd0\x21\xd2\x17\xf2\x74\x86\x90\xe9\x8f\x2f\x67\x82\x97\x5f\xd7\xc0\xf0\xbc\x74\x12\xb2\x76\x5b\x54\x7b\x5b\xc4\x42\x30\xfb\xae\x9f\x08\x74\x05\x98\xe3\x70\x46\xa0\x8f\xa2\x10\xf5\x64\x9c\x80\xb2\xce\x0f\x67\xfd\xce\xbf\xf3\x66\x94\x29\xae\xcc\x74\x60\xe5\xe4\x25\xb5\xeb\x85\x62\x45\x58\x94\x11\xe3\x8d\xe2\x8a\x1a\x50\x80\x75\xe1\x3e\xcd\xa1\x59\xc3\xad\x89\xe7\x96\xeb\x12\x46\x18\xfd\xad\x5f\x11\xdc\x2f\xbc\x14\x53\xed\x03\x17\x7d\x97\x68\x97\xfd\xeb\x87\x97\x14\x2d\x04\x01\x86\xd9\x37\x5f\xce\xbd\x91\x99\xbf\x03\xdc\xf2\x27\x20\x8f\x2f\x95\x50\xf9\x64\xb1\x1f\xa2\x2c\x4e\xbe\x54\x86\x32\xc9\x02\xe7\x7e\x10\xa0\x0f\xe7\x28\x9c\x7d\xb1\x9c\x9e\x37\x2f\x1e\x66\xa9\xf7\x84\x92\x94\x4d\x15\x02\x7a\x62\xf9\xc5\x22\x98\x49\x16\xb8\x78\x5a\xff\x2e\x4a\x5d\x43\xb4\xfb\x68\x09\xcc\xa0\xe5\xfd\x0c\x8b\xf1\xe7\xf9\xbc\xe4\x49\x34\x2f\x65\x6d\x85\xa3\xbe\x9f\xe7\x87\xab\x94\x19\xb0\xca\x64\x7f\x71\x04\x2e\x32\x76\x72\x45\x68\xa6\xb4\xad\x4b\x4d\x6d\x45\x96\xdc\x1c\x28\xb8\x79\xb4\x5c\xd5\x92\xc9\x0b\xab\x8f\x8f\xd6\xb0\xb7\x7a\xf2\xe2\xf4\xe5\xd1\xb2\x87\x16\x52\x5e\x85\x9e\xe1\x0b\x35\xed\xad\x29\xad\x12\xfa\xf6\x78\xf9\xdd\xe5\x55\x94\xc6\x2f\x8f\x96\xad\x58\x69\x79\xe9\x8b\x27\xf4\x7d\x77\xd1\x89\xc2\x98\x7a\xb0\x98\x38\x74\x02\x81\x64\x0a\x0c\x33\x72\x5c\x8a\xd6\xc5\xbf\x4b\x2b\xe3\x74\x71\xf8\x3e\x73\xa4\x7f\x27\x35\x6a\xc0\x6f\x78\x1d\xb7\x65\x65\x24\x49\x19\x72\x4c\x11\xb6\x34\xfc\x62\x98\x0d\xc2\xbd\x55\x07\x40\x29\x1b\xa1\x45\xea\x51\xc2\xe5\x83\xd0\x6d\xcf\x93\x5b\x19\x50\x3c\xea\x13\x3c\x17\x9f\xa1\x9f\xbb\xc3\x28\xdc\x6f\xba\xae\xd1\xf5\x7a\xcc\x2a\x85\x3e\x3a\xd8\x5b\x46\xef\x12\x39\x88\x17\x81\x62\x01\x7d\x57\x0e\x5b\x84\x6b\x2a\xf2\x3d\x3a\x5c\x91\xa5\xd9\x11\x83\x85\x6e\x27\x12\xcc\xa5\xb1\xe4\x23\xc5\x0f\xbb\x03\xfd\x79\x8e\x1d\xad\x30\x3c\x97\x90\xd1\x0c\xe0\x75\x72\x24\x6c\xa6\xcd\xa1\xd7\xaf\x8b\xae\x96\xf1\x11\xf4\x28\xad\x4a\x05\xda\xee\x64\xd8\xf7\x06\x30\xa0\x49\x2d\x81\xb3\xcf\xd9\x90\x19\x97\x7c\x48\x81\x7e\x16\x4f\xb7\xde\x2c\x54\xcf\xe9\x12\x76\xb2\x78\x9c\xc7\xbe\x78\x48\x1c\xe8\x0f\x3e\x4e\x0f\x48\xa5\x52\x7e\xdc\x14\x57\xe5\x1e\x8c\x03\x1d\xb8\x57\xae\x4a\x43\x5b\x95\x66\x15\xf0\x9b\xea\x65\x43\x13\xf1\xed\xf1\xa1\xc5\xba\x37\x6b\xc7\xf5\x92\x22\xe7\xce\x1c\xaa\x9e\x29\x08\xe7\x8d\x54\x81\x5a\x9f\x27\x94\x6c\x00\x4f\x4e\x5d\x69\x1f\x43\xff\x30\x4a\x23\x79\xd6\xc6\x61\x36\x6a\x49\x6d\xca\xbd\x7c\x7e\x65\x0a\x4d\xbf\x57\x9a\x79\xfc\x22\x6a\x84\x02\xff\x6f\xf4\x4c\x90\x25\xad\x5b\xcf\xbb\xc6\xda\xc4\x6c\xab\x94\xa4\x48\x2a\xd6\x22\x7d\x50\x2b\x55\x7e\x2c\x2d\x56\xcc\x20\x57\x6b\x9e\x43\xbc\xd3\x4c\x27\x2e\xbf\xaf\x35\x6b\x36\xb0\x00\x97\x76\xed\x9b\x1a\xb3\xec\x9a\x55\x03\xb8\x03\x79\xfc\x9f\x8f\x49\x1d\x68\xdd\x36\x5b\xe2\xcb\xb7\x6d\xa4\xfd\xc9\x85\x5c\x95\x65\xef\xbd\x08\x07\x27\x02\xb4\xd9\xef\x52\x52\xdb\x85\xa5\x2c\x13\x7e\x4e\x49\x9f\x50\xb8\x8d\x27\xc2\x4b\xd4\x64\xdc\xcf\x80\x90\x5c\x39\x81\x5d\x6b\xd5\x58\xba\x8c\x32\x94\x5b\x27\x36\xb2\x9e\x0b\x20\xf5\xd6\x40\x9a\xda\x93\xde\x94\xb9\x59\x1c\x7b\xa1\xbb\xb1\x27\xb5\x7f\x20\xc7\x32\x65\x68\xdc\x4f\x98\xb8\xf6\xad\xf3\xcd\xb7\x57\xdf\x7c\xeb\x7d\xf3\xed\x1f\xdf\x7c\xfb\x67\x8d\xbe\x40\xea\xaa\xfd\xed\xac\x8d\xef\xa9\xc8\xf5\x83\xfd\xed\xb9\xfd\xed\x45\x0d\x65\xfa\x7e\x04\x8d\x4c\x6a\x2f\x90\xe5\x79\x77\x4e\xb5\x6d\x30\xe1\x42\x6d\xb0\x73\xb5\xc1\x3e\xe4\x1b\xec\x77\x6d\x83\x7d\x28\x36\xd8\x77\x6a\x83\x5d\xe4\x1b\x8c\x25\xcb\x28\xc6\x15\x20\xab\x14\xf5\x89\xca\x44\x45\xa2\x0a\x51\x5a\x14\x85\x52\x2b\x44\x78\x58\xe4\x27\x27\xcc\x9c\x98\x2a\xf7\xae\x62\xf9\x78\xee\xc4\xee\x12\x7e\x5f\xac\x63\x3f\xa0\x77\x4c\xfd\x29\x0b\x3d\xfa\x09\xf0\xed\x45\xb6\xc8\x12\x54\x30\xbe\xf0\xd6\xa9\x47\xf1\xf9\x58\xed\x67\x37\x8d\xc4\xd3\xdb\xe8\x46\x25\xbe\xf2\x5c\xf1\x28\x3b\x7b\xae\xb5\x2d\xda\x15\x4d\x8a\x06\xf5\xe6\x44\x6b\xa2\x31\xd1\x92\x68\x43\xd4\x2f\xaa\xae\xa1\x5f\xf3\x9c\x55\xe4\x0b\xb7\xa5\x2f\x0f\xe4\x76\x17\x1e\x89\x8b\x5c\x4f\x27\xb7\x13\x1b\xb8\x59\xf8\xb7\xeb\x65\x59\xf8\x46\x25\xb7\x65\x6c\x0d\x0c\x36\xbc\xaf\x5d\xa5\x4b\x26\x7e\x94\x83\x2c\xe1\xb8\x26\x6d\x70\xc8\x90\x0a\x4f\x35\x09\x3d\xff\x1f\x74\xc7\xbc\x43\xf7\xc9\xcf\xa2\x08\xff\x32\xf9\x97\xc8\x15\xbc\x76\xc5\xa1\xe6\x8d\xc4\x48\x50\x88\xea\x39\xbb\xb6\x9c\xc0\xf7\xde\xb8\x7b\xde\x7c\x5b\x38\x54\x73\x7c\x03\xd8\x84\x1e\xa7\x94\xd9\x4e\x3c\xe9\x3f\x96\x34\xd7\x61\x57\x7e\xe7\xe1\x72\xda\xe5\xac\x12\x81\x30\xa3\x95\x97\xc6\x1b\xf2\xe8\x20\xf3\xbd\x8c\x02\xe9\xb6\xe3\x90\xcf\x5d\x0c\x28\x29\xf2\x26\x0c\x3d\x45\xe9\x1e\x48\xa4\x0b\xe8\xc4\x23\x9f\x4f\xa5\x06\xb6\x6c\x06\xbd\xb9\x58\x2f\xbd\xbd\xce\xc0\x19\x4e\xc9\x48\x0c\xbf\x8b\xfc\x70\xd7\x3b\x3f\x7a\xd0\x74\x01\xe7\xcd\xfc\x10\x76\x64\x82\x8e\x18\x30\x17\xd9\xab\x90\x71\x22\x43\x43\x52\x28\x7c\x9e\x05\xa9\x5f\x55\x83\xde\x79\xbd\xa6\x03\xfd\x0f\x85\xb7\xab\x83\xed\xbc\xf1\x43\x4f\xb0\xbb\xbb\xed\x78\xc6\x4e\x57\xc9\xeb\x39\xf5\xeb\x70\xa1\xaf\xeb\xdc\x5c\x00\x57\x56\xfd\x2e\x0a\x36\x8b\xbd\xc9\x5a\xee\xf5\xa3\x80\x4e\x55\xfe\xaf\xec\xc2\x52\x75\x01\x6a\xfd\x5e\xce\xf1\x93\x16\x8e\x5c\x10\xfe\x17\x97\x0e\xad\x18\xb5\x2b\x1c\xd8\x14\x55\xd2\xc7\x15\x46\x6b\x2a\xed\x1c\x68\xf1\x1c\xf6\xf5\xca\x95\x7e\xa8\x5d\xb6\x51\x5b\x0c\x3e\x00\x62\xd8\x59\x7e\xe6\xfd\xca\x6d\xf0\x7e\xfd\x93\xb3\x65\x34\xd7\xf6\x15\xdd\xf8\x5f\xa0\x9a\xbf\x7c\x7e\x1d\xce\xe0\x69\x2d\xe0\x26\x3e\xe8\x96\x2d\x6e\x8b\xd0\x01\xd0\x97\xe7\x6e\x2b\x2f\xcb\x17\xde\x56\x95\xc1\x0a\xf6\xec\x10\xba\xf5\x8d\x3b\xc2\xc6\xad\xb3\x70\x8c\x1d\x68\x84\x76\x58\xae\x42\xbe\x40\x71\x7c\xa4\xee\xf1\xab\x02\x2a\x57\x28\xc0\x48\x0e\x19\x11\x23\xe4\xcf\x85\xf4\xf8\x8e\x4f\x12\x1e\xb2\x25\x0f\xa7\x26\x9b\x93\xce\xe0\x9c\xa3\xcb\xa2\xb3\x05\xba\x93\xe3\xfa\x95\x99\x08\xa6\x2e\xc5\x9f\x6b\xcf\x98\xa4\xf5\x57\x0e\xf3\xe0\x8f\x70\x57\xb6\x52\x3e\x44\x67\x9e\xb1\x42\x7b\x48\x9f\x4f\x32\xdc\x19\xcd\x0c\x37\x89\x85\xe6\xdc\x33\x74\xe0\x99\x99\xa3\x73\xcf\x88\xd0\xbe\xfc\x0e\x7f\xa5\xd9\x5f\xda\x5c\xb3\x80\xbb\x67\xd6\xb8\x63\xc3\xfc\xdf\xf0\x08\xcd\x06\xde\x39\xf5\x80\xcd\xf8\xc2\x31\x5c\xf3\xac\x73\x42\x91\xb7\x66\xff\x31\x6e\xce\x82\xfa\xfa\xe8\x28\xa8\xa7\x67\x37\x32\x48\xc9\x06\x0a\x74\xb0\xc0\x68\x23\x7b\xbf\x31\x73\x73\xbe\x1b\x6e\xdc\x34\x7a\x43\xcb\xfc\x16\xfe\x34\xd1\x92\xfe\x50\x25\x4d\x55\xcb\xfc\x6c\x43\xe0\x50\xb5\xcc\x49\x89\x72\xce\x3d\x93\x79\xb2\x01\xcf\x1c\xcd\xc6\xeb\xb3\x74\xec\x18\xb8\x8f\xce\xf0\x67\x89\x17\x20\x4b\x80\x9c\x8d\xee\x6c\x96\x5a\x62\x82\x89\xcb\x33\x9e\x8c\x8d\x84\x40\x9d\x08\x50\x2f\x65\x01\xd3\x4e\xcf\xd6\x4f\xaf\x4a\xf4\x4a\x84\x5f\x18\xad\x78\x8c\x66\x67\xdb\xd2\xe5\xd7\x95\x5c\x19\x69\xd9\x18\xf1\x0e\x9d\x53\x25\xec\x0e\xc6\xc9\x97\x4c\x65\x0a\xd1\xb7\x61\xc9\x2a\x37\xcb\x2f\x05\x57\xf9\x45\x51\x73\x3d\xda\x34\x70\x36\x62\x9a\x8d\x71\xdc\x30\x62\x98\x31\x00\xaa\xdd\x44\xf0\xda\xb1\xe8\xd6\x0d\xd4\x37\xe3\xde\x48\xad\x4e\xaa\x8a\x89\x1f\xfd\x0a\x15\x56\xa2\xb6\xae\x8d\xd2\xc5\xa9\x79\x9f\x19\x37\x6c\x96\xef\x1e\x58\xed\xb0\x95\xa0\xed\x8d\x79\xf6\xd2\x21\x28\x34\x01\x3c\xd0\x0d\x60\xda\xca\x83\xda\x1d\x8a\x53\x12\xf2\xa5\x4d\x1e\x9a\xcf\xad\x71\x8a\x2b\xc2\x4e\x4b\xf6\xd1\xba\xc0\x50\xd9\x9f\x97\xec\xa2\x75\x99\x39\x7c\x7b\x4e\xbe\x09\xc6\xe2\x11\x8e\xe3\x50\x24\xd8\xe1\xf3\x94\xfc\xac\xe3\xcb\x73\x71\xa1\x2b\x63\x98\xb0\x35\x2b\x99\x8d\xf1\x7b\x81\x5e\x42\x0d\xbd\x78\x39\x7a\x89\x0f\xa2\x17\x35\x71\x19\x4c\x61\x81\x19\x7c\xf9\x86\xa8\x21\x62\x1b\xc0\x82\x34\x05\x45\x15\x78\x92\x56\x63\x9f\x22\xa3\x80\x74\xb1\x32\xf4\x06\x3c\xad\x81\x98\x59\x67\x1b\x77\xac\x4d\x04\x9b\xc3\xe3\x82\x9f\xc2\x94\xd8\x1b\x98\xa5\x31\x3e\xdb\xcd\x97\x8e\xdc\x4c\x4d\xf8\x52\x9e\x2b\xc0\x5a\xbb\xf7\xf0\x80\xc6\x17\x7c\x09\x15\x01\x0a\xa3\xb8\x4c\xec\x1c\xaf\xfc\x76\xd1\xf9\x95\xd2\x8e\x3e\xd7\xdc\x27\x11\x6e\x23\x07\x71\xae\x66\xa0\x2c\xe3\x52\x9c\x8b\x68\x67\xe8\xf5\x2e\x95\xde\x26\x3d\x48\x84\x33\x25\x10\x81\xa1\x33\xf3\xe1\x01\x1f\xd1\xc2\xca\x1c\x1b\x8e\x41\xa8\x8b\x2c\x5d\xcf\xe4\x0b\xa2\x34\xdc\x82\xf8\x4b\xb6\xb3\xc0\x4f\xc9\xc2\xd5\xd9\xac\x29\x99\xdc\x02\x40\xa4\x63\xfa\x0c\xf1\x46\xee\x92\x9d\x79\xb0\x71\x9b\x30\x4a\x0c\x55\x5d\x38\xe7\x13\xfe\xdb\x7c\x8c\x88\x95\x9e\xf1\x78\x04\x85\x98\xe8\x2f\xc6\xd4\x67\x46\xc4\x1d\xea\x02\x13\x75\x9f\x01\x1e\x33\xd6\x30\xe3\xc2\xbe\x17\x30\x3a\x75\x40\xdd\x5c\x9e\xf3\x3b\x61\x66\x09\xed\x70\xce\x93\x87\x07\xf1\x30\x1f\x4f\x26\x16\x34\x0d\xff\xa6\x2c\x7f\x9a\xda\x93\x09\x2c\x56\x48\x81\xe5\x3a\x9d\x6e\xb7\x86\xa9\x80\x8f\xb6\x43\x71\xe4\x97\xbd\xd7\xde\xb9\xfc\xca\xe5\x97\x2e\xbf\x75\xf9\x85\xcb\xaf\x5d\xfe\xda\xe5\x2f\x5c\xfe\xd6\xe5\x2f\x5d\xfe\xb9\xea\x28\xfe\xe4\xaa\xc9\x7b\xeb\x32\x0f\xb2\xc1\x80\x3f\xbb\x30\xe2\xb4\x9e\x36\xbc\xba\xd7\x88\xeb\xb9\xc6\xc2\x67\x87\x9c\x4c\xa7\x50\x31\x64\x7d\x8d\x59\x5f\xb8\x0c\x96\xd4\x95\x4b\xc9\x97\x98\x7c\x8b\xc9\x17\xae\x59\xae\x82\x61\x59\x73\x9c\x8f\xcc\x9e\x88\x68\x62\xa9\x13\x76\x31\x52\x8d\x09\x88\x9e\xa5\xa9\x11\xb7\x0b\x9b\xe7\xcc\xc4\x54\x79\x87\x73\xe7\xb2\x2b\x97\x41\x0b\x50\xff\x85\xcb\xa0\x07\xd0\x3e\xb4\x0e\xbd\x86\x3e\x43\x8f\x3f\x15\xa4\xc3\x95\xa4\x13\x2e\x3d\x6d\x27\x5f\x14\x5b\xf9\xda\x3b\xb8\x97\x3f\xe9\x87\xfb\xeb\x83\xf4\x41\x29\xdb\x85\x07\x84\xf3\x1b\x97\xbf\xf1\x8c\xb7\x1e\x7b\xe7\xb1\xbf\x3d\x36\x69\x7e\x72\x58\x13\x7d\xc6\xc0\xb2\xfc\xe0\xf2\x8e\x77\xaa\x68\x02\x37\xf0\xd7\xbb\x86\x64\x65\xc3\x74\xe1\xfe\xee\x5e\xcc\x51\xd5\x55\x0e\xc5\x77\x45\xf1\x34\xcc\xff\xb3\x0e\x82\xda\xa7\xa8\x3c\x2a\xc9\xc2\x10\x39\x22\x52\x6e\x51\xdc\x79\xc4\x9a\xca\xe7\x3f\x02\x35\xca\x1b\x18\xc2\x5e\x04\x6b\x17\x8f\xb8\xac\xf1\xb1\x33\x15\x26\x8f\xe2\x11\xb7\x5a\xb9\x0b\xd2\x1f\x91\x89\x91\xa3\x26\x13\x18\x07\x2c\x59\x18\x09\x2e\xd9\x42\xd9\x48\x74\xc8\x98\x08\x07\x48\xb9\x35\x2e\x12\xeb\x86\x82\x4d\x14\xfa\xee\x6b\xf4\x74\xff\xa2\x44\x4f\x16\x9e\x23\x3d\xe3\x2f\x8c\xa5\xd4\x8a\x9d\x5b\xfe\x97\xa7\x96\xb3\x13\x00\xc3\x99\x54\x1b\xb6\xee\xd7\x6b\x40\xf1\x28\x45\x31\x14\x74\x82\xa1\xd3\x58\x61\x89\x67\x4c\x9a\xad\x21\xeb\x9d\xb4\x8e\x85\x43\x51\x07\xa8\xe5\x20\x31\x26\xdd\xd3\xd6\x80\xf5\x07\xad\x01\x24\x93\x1d\xa0\xd1\xb1\x8e\x2d\x71\x93\x5b\xb4\xfe\x6b\xe2\x1c\xf6\x16\x23\xbc\x3d\x12\x93\x12\x91\x03\x95\x5c\x36\x2a\xd0\x01\x92\x63\x40\x88\xa5\x0f\x0f\x46\x2c\x1f\x51\xb5\x40\x3e\x6e\xcb\x41\x38\x4a\xcd\x1a\xa6\xb0\x34\x7d\x74\x98\xa8\x5c\x5a\x1a\x67\x97\x0d\x4e\x68\x3c\xda\x30\x07\x03\x36\x1c\x20\x16\x7d\x42\x75\xc7\xe5\xea\x7a\xac\x73\xda\x3a\x2d\x57\x77\xc2\x3a\x27\xe4\x4f\x57\x1e\xab\x65\x6d\xa2\x94\xc3\x32\xf1\xb4\xf5\x11\x4a\x37\x29\x15\x82\x56\x5f\x42\x1d\x2f\x83\xfd\xc2\x68\x54\x46\x0b\x40\xe2\x40\x38\x44\x48\x61\x19\x0a\xcf\x39\xc2\x25\x82\xf2\x2e\x68\x64\x67\xbc\xd5\xe9\x1e\x1d\xb5\xba\xbd\x3e\xa2\xb0\xf8\x8c\x37\x5b\xfd\xee\xe0\xe8\xa8\xd9\xea\x76\xfa\x67\xf1\x38\xb2\x29\xcf\x70\xb8\x93\x09\xbe\x62\xa6\x4e\x67\x00\x99\x1c\xdb\x37\x65\x2f\xe9\xbe\x36\xdc\x97\x05\x68\x5d\x96\x18\x16\x3b\x1d\x69\x6f\x31\x77\x8a\x37\xd9\xc1\x7d\x08\x65\xc8\x71\x2b\x82\x0d\x6d\x87\xf4\x97\x58\x7b\xd9\xb2\x7d\x7e\xa9\xe0\xd5\xa1\x5c\xfe\x18\x6b\x1c\x7c\x81\x16\x4b\xc5\x34\xfa\x0f\x4a\xea\x6f\x71\x89\x36\xcc\x31\xe9\x5e\x69\x41\xb0\x78\xda\x73\x5c\x3c\x6f\x0f\xa2\xdd\x74\x87\x32\xa2\xf1\x96\x12\xe2\x27\xd2\x4e\x69\x99\x74\xf2\xca\xaf\x71\xe9\x75\xbb\xc5\x39\x5c\xab\xeb\xed\xa7\x19\x9e\xfa\x45\x01\xb4\xb8\x8e\xca\xaf\x4e\xf9\x35\x24\x5a\x23\x4f\x31\xbf\xd2\x2e\x59\x2d\x7c\x6a\x47\x3c\xb6\x7a\x83\x3a\xb5\x93\x7f\xd1\xcc\xa8\x8d\xd2\xee\x20\x42\x47\xee\x9c\xc3\xd6\xd6\x95\x3e\xb6\x95\x33\x5a\xbd\x3a\x71\xab\xa5\x6d\xc6\x84\x0b\x4b\xe2\x39\x27\x5b\xe2\x5c\xaf\xb1\xb4\x47\x53\x53\x3b\xf0\x00\xf7\x27\xb0\xf1\x06\x03\x60\x25\xe7\xb0\xb9\x7a\x27\xf5\x00\x4e\x82\xa4\xa1\xd2\x1a\x32\x0d\x11\xad\xd8\x23\xae\x29\x16\x3b\xec\x9b\x48\xab\x16\xeb\xe9\x59\xc7\xb2\x8c\xd5\x81\x32\x15\x0d\x75\xa1\xd2\xc6\x4b\x07\xf3\x74\xba\xf4\x88\xad\xd1\xae\xae\x07\x4d\xf1\x01\x76\x3b\x3d\x57\xb5\x99\x71\x67\xa7\xcd\xae\xa5\xfa\x89\x15\x56\xb4\x49\x55\xab\x36\x87\x43\xad\x51\xc0\x21\x4f\x6a\x34\xcc\x17\x89\x3c\x66\x08\xf0\xef\x5d\xf6\xca\x65\xef\x5c\xf6\xab\xcb\xfe\x76\xd9\x77\x2e\xfb\x21\xc7\xac\x5f\x2b\x0f\x79\x85\x84\xe0\x0f\x3a\x09\xf3\xdb\x41\x4a\xa7\x94\xed\x87\x42\xda\xf1\x43\x2e\xed\x60\xef\x5d\x62\x44\x5f\xb9\xed\x2e\x8a\x10\x7f\xce\xfb\xf5\x87\xf7\x94\x8e\x5d\xe9\x2d\x5f\x6d\xd9\x8f\x79\xf9\xdf\xf5\xf2\x3f\x15\xf4\xdb\xf7\x87\xe9\xb7\x1f\xf5\xee\xfe\xfb\xe0\xa8\x7e\x54\xbd\x87\x26\x4a\x45\x7e\xca\xdf\x71\x90\xdf\x7b\x85\x28\x67\x0d\x74\xe9\xe1\xf3\x5d\x53\x82\xaa\xf0\x16\xef\x90\xcf\x6e\x6c\xf0\xbd\x33\xf3\xb3\xc4\x68\x38\x07\x42\x45\xb0\x08\x83\xa9\x13\x59\x05\xa4\x40\xc4\x81\x02\x30\xcd\x3d\xa2\x9d\xdc\xa6\xa1\x4c\x2b\x0b\x4a\xac\x7a\x5a\x10\x3e\x91\xa0\x2b\xc2\x22\x82\x24\x12\x95\x70\xb6\xf7\x5b\x03\xcd\x49\xf6\x01\xa9\xdd\xfb\x2a\x56\x21\x33\x7e\x70\xa1\xe1\xf7\xae\xf2\x5d\xb0\xc7\x7f\x28\x03\xd0\xaf\x61\x40\x32\xe3\x47\xac\xf5\xb3\x3b\x9e\xbc\x75\xdb\x9f\x91\x9c\x87\xbf\x53\xfb\x05\x24\x5c\xbb\xed\x17\x48\xe8\xc3\xdf\xa9\x7d\x01\x09\x97\x6e\xfb\x02\x59\x00\xf8\x0b\x2c\x84\x62\x26\xb0\x3f\xbb\x92\xb6\xa2\x37\x7f\xbb\xfc\x3b\x17\x78\xd8\x77\x2e\xff\xd5\x15\x5c\xec\x7e\x1f\x7e\xc6\x3e\x4c\x26\xb4\xbf\x60\xbb\xd2\x0e\x9b\x4e\xc5\xf1\x10\xfd\xbd\x1b\x72\xed\x11\x4d\x79\x60\x2a\x85\x6e\xbc\x22\x0e\x1e\x1e\x52\xbc\xfa\xb3\x37\x0c\x2f\x78\x51\x55\x3e\xa4\x48\x45\x4f\x8d\x2d\x03\xb4\xb9\xd4\x89\x8d\xa9\x5a\xef\xf6\x9b\x7f\x78\x64\xf0\xfb\x0b\xf9\xcb\xa9\x70\xb0\xbf\xb7\xdc\x1c\x53\x34\x1e\xd3\x80\x8a\x0f\x4f\x3b\x85\x1c\x5e\xb1\xa4\xd3\x71\x6a\x1b\x3b\x8b\x1a\x0e\xa3\x86\x38\xf4\x9c\x32\xe4\x8c\x5d\x42\x19\x3a\xa3\x80\x20\x5d\x62\xab\x39\x21\x74\x8b\x57\x49\x55\xf7\x8e\xbb\x1c\x51\x29\xe4\xb2\x17\xeb\xae\xd0\x64\xfc\x23\x4f\xc5\xb0\xc8\x4f\x27\x3c\xf4\x4b\x9e\xce\xf7\x89\xaf\x54\xdd\x16\x51\x73\x39\xb1\x95\x56\x13\x5b\x5a\xce\x2f\x11\x58\x5a\xd6\x2f\x92\x53\x3b\x79\xbf\x44\x40\x95\xfa\xfb\x24\x42\x69\xbf\x84\x24\x8a\xd4\x54\x68\x2b\x3f\x8b\xf7\x13\xcf\xb3\x14\x1d\x35\x73\x3f\xce\xd9\x37\xef\x53\xe6\x03\xb1\x03\x4c\xfd\x22\x0b\x9c\xaa\xc8\x15\x59\x6c\x38\xb1\xe2\xdf\x9c\x58\xd1\xfc\x4e\x5e\x3f\xb1\x18\xbb\x9b\x4d\x17\x7d\x17\xac\x1d\x3a\x1a\x47\xc9\xf4\x2b\x87\x21\xfd\x01\xbf\xb0\xcc\x31\x81\xbf\x93\x29\xf4\x90\xab\xb3\xf3\x20\x26\x6e\x01\x25\xcf\x58\x28\x14\x85\x98\xd2\x5f\x3f\xeb\x8e\xf1\xee\x08\x92\x6c\xc4\x11\x7b\xfc\x48\xa9\x69\xc5\x07\x3c\xa9\x07\xf8\x9f\x5b\x31\x58\xd7\x8f\xdd\xc0\x3b\xe8\x31\x5a\xdc\x42\x54\x6c\x3e\x0c\xd5\x5c\x79\x7e\xd8\x50\x35\x0e\x93\xdc\xca\x61\xb7\x9a\x6a\x90\x96\xe2\x5c\x4a\xaa\xee\xc2\x9c\x87\x09\x89\x14\xab\x64\xd4\xa4\x7a\x7b\xc8\x85\xcc\x18\xb6\xb7\x1a\x60\x28\x07\x88\x9a\x0c\xd2\xb5\xa4\xbc\xb9\xaa\x31\xed\x82\xca\x9e\x64\xd3\xed\x56\x8b\x97\x48\xec\x7f\xc6\x87\xff\x9d\xb3\xe1\x58\x38\x1b\x26\x54\x06\xeb\x4c\x07\x5f\xfc\x48\x31\x8f\x2f\x62\xc3\x48\x79\x23\x36\x11\x1c\x19\xcd\x15\xc6\x37\x39\xc0\x02\x7c\xb1\x2e\xba\x74\x01\x6c\x2f\x2a\x34\xa5\x03\x64\xd9\x27\xe3\x54\x13\x0f\xcc\x7c\x11\x04\xbe\x4a\x7f\x1a\x39\xd8\xb4\xf0\x03\x88\x3d\xe3\x6a\xca\x7c\x2e\x17\x15\x30\xf8\x42\x2a\xe6\x63\xbf\x98\xf4\x37\xec\x46\x09\xbe\xb9\xc5\xb7\x0c\xdd\x35\xe6\xdf\x32\xa4\xd0\xf3\x6f\x3e\x4a\x84\xf3\x6f\x7e\x59\x5b\x45\x88\xe1\x0a\xc9\x1b\x8c\x70\x5e\x8f\xcc\xba\xd7\x80\xa7\xa0\x9e\x34\xdd\xfa\xbc\xee\xc0\x3b\x34\x57\x4f\x1a\x01\xbd\xe5\xe3\x5b\xa0\xe7\x20\x37\x7b\x64\x21\x4b\xf4\x2d\xd6\xc8\xce\x45\x6b\x79\xad\x20\xc2\xaa\xa4\x67\x50\x1b\x98\x1c\xaf\x16\xde\xe0\xfc\xf6\xcc\xac\xcf\x80\xb0\x99\x09\x47\xab\x4b\x33\xb7\xb2\xd8\xcf\x1c\xb4\x57\x66\x7d\xc5\x5c\xb6\x12\x99\x17\xe6\x63\xb9\xe3\xf6\xda\xac\x63\x48\xec\xb5\x29\x63\xdc\x54\xa9\xec\x01\xd1\x1b\x7e\x3b\xc3\x3b\x10\xe9\xea\x35\x79\xb4\x52\xa7\x7d\x63\xd6\x6f\x80\x08\xbb\xf9\x62\xa5\x2b\xad\xd2\xb9\xf4\x82\xae\x11\x71\x30\x8c\x80\xe5\xb7\x18\xbc\x83\x0e\xce\xd7\x6c\xc6\xd1\xb4\x98\xf7\xd0\x48\x91\x77\x75\x32\x0f\x0f\x90\x4a\xe9\xd8\x41\x37\xb6\x72\xae\x0e\x4d\x53\xb8\x15\x0e\xbc\xa2\x2c\xc5\xba\xf7\xab\x7e\x14\x1f\x2c\xd1\x1a\x45\xc2\x69\x81\x8c\x8f\xb0\x33\xea\x98\x6c\x09\xab\x16\xe8\x5a\xc0\x53\xa8\x95\x5e\xa4\x2f\x8c\xa0\x2a\xdd\x9c\x12\x07\xef\x3d\xdd\x2d\x17\x1a\xc3\xfc\x1d\xc5\x92\x63\x43\x87\xe2\x7e\xa8\xbd\xda\x61\x29\x81\xc6\xa8\x15\x78\x22\xd7\x2e\xf8\x62\xe1\x45\x9b\x58\x63\xf2\x01\x2f\x53\xc9\x7f\xb6\x48\x45\xff\xda\x52\xa2\xee\xc3\x6e\xcf\x50\x64\x0e\x5b\xf8\x4c\x48\xd3\x03\xbc\x84\x45\x5f\xdb\xa6\x8e\xa1\x8c\x8d\x89\x22\x56\x9f\x21\xe3\x9c\x31\x49\xa4\x6a\x9d\x7e\x2a\x16\xcd\xfb\xe8\x15\x7d\x74\x8a\x3e\x46\x45\x1f\x63\xba\x6f\x4d\x79\x8c\x56\x5a\xe8\xfa\x06\x50\xd0\x59\x44\x49\x0e\x14\x89\x50\xfe\x58\xd5\xc7\x98\x39\x24\x06\x8e\x44\x1f\x93\xd4\x5b\x7f\xcd\x1c\x5d\x40\xfe\x7c\x86\xe4\x8b\x9a\x1f\x7a\x2d\x66\xe7\xe2\xa9\x55\x1b\x33\x29\xb3\x58\x89\xe1\x91\xd3\xb8\x19\x5b\x15\x40\x7c\x7a\x55\x6b\x59\xd5\x8d\x56\xd5\x9a\xdd\x4c\xff\x0b\x99\xd2\x06\xdd\xa9\x25\xfc\x06\x88\x23\xd8\xde\xa7\x74\x7b\x37\x8b\x8d\x18\x10\xd0\x06\x36\x05\x7e\x08\x60\xcf\xe3\x87\x05\x7e\xf0\x01\x11\x6c\xe8\xc8\xd9\xec\xac\x50\x63\x32\xa1\x4b\xf5\xe6\xa9\x25\x04\x0f\xf8\x72\x6a\x49\x51\x83\xbe\xb6\x55\xc6\x13\xfa\x28\x32\x9e\x50\xa1\xa9\x8e\xda\x3d\x27\x7d\x11\xbb\x4f\xc3\xec\x87\xb0\xc5\x24\x7d\x78\x38\x40\xb0\x30\x0f\x0d\xe8\x2a\x3f\x95\x88\x86\x15\x46\xea\xd8\xc4\x05\x4a\xdb\x3f\x54\x77\x65\xfe\x2a\x87\xf1\x5f\xb5\x2e\x44\x75\x51\x16\xeb\x4d\x78\x8f\xee\x28\x74\xf2\x5b\x41\xac\x79\x63\x24\xaf\x6c\x2f\xa7\x5a\xa4\x1b\xec\x27\xad\x0c\x0c\xad\xe0\x55\xf3\x5f\x54\x6b\x9a\xd3\x1d\x15\x4b\xee\x91\x2d\x66\x5b\x5b\x14\x34\x49\x50\x69\x5e\x2a\xab\x8d\xd2\xce\x05\xe5\xac\x53\xcd\xbb\x84\x6f\x5e\x99\x68\xa2\x8a\xb7\xfd\xb3\x8a\xff\xff\xcb\x35\xd9\x9f\x52\x17\xe8\x4f\x17\x5e\xf7\xae\xf1\x74\xf1\xd6\x5d\xfc\x54\x31\xd2\x6f\x2e\xbf\xaa\x3c\x60\x0b\x32\xa7\xdb\x36\x3a\x8d\x70\x57\xf5\x58\x66\xeb\x0a\xfd\x64\x74\x91\x61\x84\x28\xd9\x32\x47\x39\x1b\xfb\xd9\x5f\x65\xe9\xd2\x09\x1e\xbb\xa9\x02\x4e\xe7\x37\x57\x71\x3a\xbf\xb9\x34\xbe\x3f\xf6\xfa\x24\xef\xcd\xa9\x25\x24\xcc\xb4\x60\x6a\x47\x47\x69\x3b\x27\xdf\x90\xf7\xdc\x54\xf7\xc0\x17\x0b\xbd\x2a\x16\x20\xf4\xe1\x8f\xbc\x0f\x7f\xb8\xe5\x6b\xb6\x97\x51\x48\x2a\x9b\x55\x2e\xbc\xfe\xf4\x8c\xcb\x9c\x4d\xbb\x8c\xf7\xee\xe7\x1e\x69\x13\x8a\xde\xe6\x45\x6f\x85\xe6\xf1\x3f\x0e\xcd\x45\xa7\x0d\x8b\x30\x27\x41\x8b\xf1\x2d\xc2\x68\x85\x4d\x55\x8f\xe9\x1f\xf9\x98\xfe\xe1\xb2\x8b\x78\xff\xe2\xa8\x58\xb9\x93\x90\xa9\x89\x84\x06\x8c\x3c\xe0\x45\x6a\x9a\xcd\xf7\xce\xb4\xb8\x79\x5c\x79\xb1\x4b\xec\xec\x7e\x8b\xd7\xb1\x71\x91\x8f\xe8\x42\x8c\xe8\x5f\xe5\x11\x15\x03\x52\xc3\x81\x49\x2b\x86\x13\xc5\xe9\x32\x02\x32\x79\xbd\x3c\x34\xa4\x7f\xe5\x43\xfa\x97\x58\x2a\xbf\x1f\x06\x19\x2d\xda\x47\xd7\x2c\x0e\x35\xd4\x57\x2c\x9c\xbd\xb1\xf7\x78\x0f\x7e\xcf\x7b\xf0\xbb\xcb\x5e\x3f\x0e\xd4\x66\x5a\x0d\xd5\x70\x17\xaa\x24\xcd\x21\xaa\xed\xbc\x02\xbe\x82\xbf\x05\xf0\xbe\xa6\xe8\x0f\xca\x21\x2a\x7a\xb1\x90\x57\x8d\x05\xbe\xdf\xf5\x95\xaa\xc9\x5c\xc7\x70\x98\x35\xa5\xea\x27\x5e\x27\xdb\xc4\xac\x9a\x6c\x42\x69\x4d\x91\x88\x28\x52\xd4\x59\x5d\x87\x67\x4c\x34\x15\xd2\xb2\x44\xa0\x71\x6a\xd9\xa7\x96\xa8\xd8\x13\x15\xeb\xca\xa6\x4d\xfc\xb6\x65\x50\x03\x70\xb6\x8c\x5e\x04\x20\x5f\x2b\x46\x7f\x85\xea\xcf\xf2\xb1\xb5\xcc\x76\x02\xa1\x69\xec\x4e\x48\xf7\x31\x61\xee\xd6\x43\x5e\xc4\x00\xc3\x2e\x8e\xc2\x8c\xbf\x4e\xc9\x87\x07\xfe\xc6\xa6\x1e\x64\x97\x8c\xf1\x5d\xe4\xed\x45\xa8\x73\x6b\x14\x9d\xa5\xa3\xb4\xd1\x30\xa5\xf9\xfc\xa4\x91\xe9\x21\xe2\x30\x6c\x1b\x0a\xec\xfc\x8a\xc4\x54\x86\x82\x15\x61\x23\x8d\xcf\x34\x3d\x45\x85\x32\x8a\xeb\xc4\x81\xec\x08\x89\x26\x3d\x60\x78\x23\x79\x47\xf4\x32\x46\x91\x63\x82\xbf\x2e\xd2\x32\xe8\x42\x9d\x73\x1e\x08\x85\x98\x64\x92\xe4\xea\x35\x22\x39\x28\xde\x81\xc0\xc9\x87\x50\x24\xa3\xea\x8d\x35\x6a\x36\x53\x73\x21\xc5\x11\xd0\x78\x00\xad\x4e\x01\xfe\xb2\xb3\xc0\xdb\xcf\x47\xe9\xf3\xbc\x6e\x8a\x56\xa9\xe7\x4f\x8a\xfc\x8a\xd7\xda\x4a\x87\xce\x48\xda\xbe\xcd\xa9\x8b\xfd\x00\xa9\x28\xc0\x35\x52\xdd\xd3\xed\x63\x12\x5b\x8f\x93\x9a\x37\xda\xd8\xeb\xee\x6c\x1f\x2b\x12\x8b\x22\x40\x1f\xa4\x66\xb1\x54\xe4\x89\x56\x55\xc5\x06\x35\xe9\x7e\x72\xf3\x38\x8f\x3f\xb9\x7c\xa7\x94\x26\xe2\x04\x88\xfe\xe4\xee\x08\xfb\xb5\x68\x96\x6c\x3f\xd2\xa7\x0a\x55\xea\x35\xc9\xc7\xb5\xa5\x22\x7f\x86\xc4\x05\xc8\xf8\x9f\x2c\x13\xc1\x60\xea\xb1\x92\x60\xd4\xe3\xe2\x22\xb0\x35\xa8\x03\x61\x02\xed\x56\x5e\x15\x14\xa4\x1d\xa9\x18\xeb\x4d\x8b\x58\xb0\x16\x13\x01\xe3\x26\x19\x74\x41\xac\xc6\x1d\xa8\x3d\x3c\x18\x18\x74\xb5\x6d\x0c\x85\x53\x4a\x87\x94\x14\x4c\x53\xa9\x29\x0b\xf6\x84\xea\xc0\xb0\xf7\x14\xc2\xa8\x8e\x0a\x2c\x4d\xd4\x6d\xa9\x13\xd1\xee\x37\x84\xfc\x85\xd4\x5d\xcc\x3a\x30\x2b\x94\xd0\x99\x92\xa6\x0b\x24\xc8\xc1\x4c\xfc\x7a\xc8\xa2\x7a\x38\x15\x23\x0a\xfc\x75\x79\x0b\xef\x87\xaf\x84\xa6\x3f\xa0\xe0\x1f\xf6\x24\x8c\x30\xd0\x47\xd8\x84\x0f\xc2\x8e\x41\xd8\x23\x4c\x02\x1c\x62\xa3\xe1\xa2\x43\x93\x7b\xb1\x96\x95\xf3\x0d\x33\x47\x46\xa4\x87\x46\xd9\xdd\x29\xc9\x86\x8c\x22\xcc\x42\xd3\x31\x9b\xa4\xab\x43\x41\xa1\xbd\xe7\xf1\xc8\xc4\x90\x4d\xde\x94\x7d\x8a\x8d\x88\x25\xa4\x44\xf7\x09\x19\x87\x84\x54\xeb\x42\xb1\x2b\xde\x90\xae\x09\xa5\x11\x03\x87\x69\x11\xf0\x6e\x79\x4e\x8c\x91\xbb\x9f\xd3\xe7\xd1\xc8\xc9\x3f\x91\xe4\x0a\xa3\x68\xe6\x82\x56\xe9\xa5\xd3\x65\xff\x76\xd9\x2f\x2e\x0b\x03\x96\x06\xcc\x0b\x10\x41\xc5\xf8\x77\xf4\xb3\x26\x7f\x47\xc2\x15\x23\xb8\x1d\x5a\x99\x22\xf0\xe1\x6c\x41\xa1\x25\xf2\xb0\x12\x5e\xb3\x89\x8b\x91\x82\x49\xe0\x47\xbc\x01\xc2\x1e\x39\x0f\x0f\xa8\xfd\x40\xa0\xf3\x58\x47\x37\x41\x44\x4c\xf6\x27\x62\x32\x59\xc7\x96\xfd\x52\xba\x06\x48\x76\x65\xea\xba\x35\x08\xb6\xd1\x0a\x00\x59\x09\xb1\xb9\x9f\x7a\xe3\x22\xdd\xb1\x8b\x67\xa0\x3c\xbd\xb2\xa0\xfd\xc9\xd5\x5c\x69\xd5\x38\x28\xd8\xc8\xf4\xee\x89\x20\x9f\x76\xa5\x0c\x91\x65\xa8\x71\x29\x0e\x8f\xb4\xf5\x8e\xe2\x60\xbe\x85\x25\xf4\x16\xc0\xf2\x16\xdd\x30\xb4\xde\x42\x2a\x31\xe9\x6f\x51\x7c\xda\x7a\x9f\x47\xd1\x6e\xbd\x1f\x85\xad\x37\x08\x4b\xfc\x81\x7f\x3c\x95\xfa\xcc\xad\xf7\xe8\x65\x87\x87\xe2\x55\x98\xb9\x8e\xa1\x48\x96\x49\x9b\x57\x04\xe5\x3b\x71\xcd\x48\xcd\x41\xbd\xef\x38\xd5\x80\x27\x38\x21\x4c\x68\xb4\xf5\x56\x66\xa1\x32\xe2\x1b\xf9\xa8\xa2\x75\x8e\xb9\xa1\x21\x59\xc9\xaf\xc8\x43\xb5\x5e\xa2\x02\x5b\x88\x8d\x1f\x1d\x79\xad\x97\x23\x13\x58\xab\xd6\xaf\x50\x8e\xf3\xb8\xf5\x06\x79\xa2\xb8\xf5\x1e\x15\xd0\xb2\xd6\x4b\x40\xb6\x90\x3f\xc3\x32\x1d\x16\xab\xa2\x31\x1d\xd5\x18\x37\xf9\x3d\xfa\xff\x10\x1d\x46\xbd\xe7\x50\xf8\xc8\x6a\xfd\x8a\x9a\x21\x7a\x99\x58\xe6\xc1\x30\xee\x36\xb5\xf0\xe6\x89\x2d\xbc\x41\x17\xbe\x4f\x68\xc1\xd3\x5a\x10\x39\xa4\x93\x7e\xca\x85\x06\x4b\x18\x6b\xa2\xa4\xed\xa7\x4f\x1e\xc0\x16\xa7\xef\x1d\x25\xbc\x13\xb3\x2b\xe6\x33\x94\x93\x30\xd2\x10\x10\x56\x8f\xb1\xdb\x60\x14\x11\xcd\x31\x85\xaa\xf1\xc7\xd1\x18\x66\x2f\x32\x6d\xdf\x8e\x58\x36\xce\x00\xfa\x9c\x87\xf4\xeb\xd9\x19\xcc\x83\x67\xcb\x69\xf2\x98\x7f\x74\x14\x11\x57\xdb\x7a\x49\x23\x09\xe9\xf7\x0d\x4a\xaa\x68\x9e\xd0\xae\x32\xc2\xc9\xa0\xb9\x81\x24\x6c\x32\x44\x90\x33\xac\x2f\x84\xb4\xf7\x28\x1b\xc2\xcc\x18\x27\x16\x7e\x51\xc0\xe5\x89\x3c\x08\xe5\x98\xea\x0c\x51\x8f\x9f\xdc\x86\x60\x0e\x93\x3d\x13\x51\x57\x51\x83\xbb\xf5\x52\x8f\x06\x03\x19\x5e\x52\xc0\xd5\x59\x44\x19\xd4\x2e\xba\x94\x0e\x9d\x64\x1a\x34\x2e\xf6\x01\x3c\xbd\xc7\xd5\x84\x82\x2a\x31\x13\x59\x79\x26\x32\xa4\x6a\x20\x13\xae\xe3\x37\x18\xf3\xfb\x4d\xeb\x25\xa2\x8f\xf7\xf8\xfc\x1e\x1a\xbf\x2f\x9e\xd1\xfb\x0b\x7e\xc7\x6a\xd2\xf2\x92\x49\xb5\x6a\x68\xa1\x50\x3b\x54\x0a\x73\x6b\xad\x85\xb2\xc3\x23\xea\xf0\x36\xb7\x89\xc0\xe2\x6f\x2a\xbb\x1a\x97\xbb\xfa\xe6\xb1\xae\x16\xe9\x46\xde\x78\x5a\x1e\x71\xaa\x55\xa3\x77\x55\x0e\x2c\x3e\xd8\xd5\x7c\x53\xe2\x14\x66\xad\x5f\xb7\xb7\x4b\x3f\xf0\x8c\x67\x38\x45\x23\x31\x79\x34\x37\xdb\x6d\x41\xbc\xdc\x44\x71\x14\x46\xfe\x23\xa4\x6e\x61\x32\x2e\xbc\x35\xa9\x93\x8e\x94\xe4\x72\x09\xaa\x52\x44\xf5\xb9\xd2\x43\x8d\xb8\x54\x43\x55\xd8\xdd\xcf\x0c\xba\x0b\x77\x50\x25\x31\x08\x92\x7d\xa3\x67\x0f\xbe\xdd\x0b\xf3\x16\x4f\x9e\x26\x01\x3c\x21\x06\xc6\x43\x78\xe2\x4c\xf3\xa8\x56\x63\x77\x4f\x26\x2e\x3b\xda\x4a\xc4\x95\xaa\xa2\x09\x80\x20\x44\x0a\x6f\xba\x35\xed\xa0\x75\x77\x86\xae\xbf\xe0\xf7\x39\x3a\xb8\x0a\x5a\x9b\x33\x9e\xd1\xef\x73\xd8\x26\x28\x0c\x8d\xa6\x6c\xe2\xcb\xbf\x19\xfc\x85\x6d\x8a\x0a\xde\xd3\x51\xa2\xd4\xfb\xa1\x17\xe8\x1e\x50\xb7\x1d\xd9\x75\xe3\x54\xc5\x8e\xdd\xdf\xe9\xfe\x80\x44\x58\xa7\xf6\x4b\xc7\xc4\xa0\x96\x1b\xfd\x53\x54\xfa\xe4\xdb\x29\x4a\xf1\x85\x3d\xc9\x0b\x44\x1a\x6f\x63\x0c\x45\x0f\xe0\xcd\x80\x78\xc9\x82\x91\xc6\x60\x09\x74\x1e\xf8\xe1\x75\xa5\x8e\x85\x9c\x00\x53\x80\xf6\x91\xdb\x0d\x98\x62\xdc\xd8\xf1\x76\x3f\x94\xa7\xba\xe3\x27\x99\x9b\x8d\xd0\x0d\x5a\x3e\x1a\x1b\xa0\xb4\x8c\xde\x81\x29\x9d\xd2\xc5\x03\x86\x04\xf4\xe9\xa2\x2d\xa9\xd0\xbd\x9c\xec\xae\x8b\x47\x56\x45\x5c\x10\x1b\x42\xeb\x5a\xae\x09\x47\x2d\x93\x82\x6e\x90\x74\x9c\x53\x78\x3b\x73\x88\x70\x13\xf4\x07\x30\x39\x74\xb0\x47\xe3\xa4\x15\xdb\xf0\xac\xe8\xb9\x8c\x27\x00\xd5\x39\x65\x77\x0f\x65\x66\xf1\x73\xbf\x85\x7e\xd1\x9e\xcf\xf1\xc7\x01\x24\x0d\xbd\x99\x9b\xcf\x2d\xdc\xd4\x82\xdb\x42\x2d\x06\xe0\xd0\x7c\x04\x4a\x38\x81\x7c\xc8\xd5\x92\x93\x84\x27\x33\x26\x82\x6d\xe4\x68\xae\x2d\x78\x8d\xa7\xb2\x27\x11\x16\xcc\x64\x41\x8c\xf3\x5a\xa9\xc5\xfe\x58\x0d\x8e\xd4\x62\x81\xd3\x26\xb0\x89\xd7\x71\x10\x59\x07\x42\x8c\xe9\x60\x95\xe5\x38\x26\x8f\x54\xa6\xb7\x8e\x07\x85\xd4\x28\x0f\xa7\x3b\x95\x02\x20\x31\x4a\x65\x6e\x6a\x9b\x01\xf1\x39\x69\x76\xbc\x21\xc3\x3f\x28\xf3\x86\x47\x7c\x9a\x8e\x14\xd2\x9a\x79\x81\x93\x85\x4e\x25\x58\x76\x10\x1b\x86\xa7\x55\xab\x90\xd4\x81\xd5\xf7\x4f\x99\x33\x4b\x63\xcf\xdb\x71\x58\x86\xe7\xb2\x86\x01\xfd\x12\x3e\xf4\x8d\x92\xf2\x3f\x62\x2b\x54\xcc\xf4\x93\xb7\xce\x5b\x60\xf8\x8f\x8e\xe4\x23\x50\x0f\x52\x40\xe0\xcc\x15\x42\x0b\x01\x0d\x25\xf0\x97\x22\xc7\xe2\xc8\x9f\x71\x17\x73\xa1\xa9\x5e\xd3\x33\x1b\xf0\x9b\x34\x63\xf3\x79\xcb\xea\x98\xc1\x5e\x3b\xe4\x1a\x90\x6a\x9a\x73\xa9\x1c\x34\xc2\x98\x2e\x18\x89\x25\x54\x98\x09\xc9\x33\x2c\x3a\x67\x2e\xf2\x00\xb2\x28\xdb\xaf\x4d\xd1\x8e\x77\x78\xd0\x43\x0d\xb1\x52\x38\x52\x64\x65\x45\x91\x1c\x08\xfa\x37\xba\xe5\x14\x23\x0c\x38\xb0\x92\x46\xd6\x20\x91\x02\x3e\x46\x0d\x92\x2a\x78\x67\x3c\x60\x4b\x1e\x9f\xc1\x0e\x5b\xf0\xe5\xf3\xe7\x9d\x87\xf9\x48\x80\x06\x4f\x33\xa4\x68\x31\xb0\x7a\x32\x59\x4c\x91\x55\xcc\x5f\x78\x92\xa1\x77\x91\xf9\x38\xe3\xb0\x48\xb0\x8e\x71\xc4\x13\xdb\xc5\x8d\xba\xd7\x83\x43\x06\x63\xb8\x21\xa0\x43\x77\xf8\xeb\x9a\x05\xe4\x53\xf3\x06\x68\x5c\x8c\x68\x8a\x96\x80\x1b\x9e\xe5\xae\x17\x57\x7c\xc3\x9b\xc6\x0d\x9f\x09\x1d\xb4\x39\xb2\x43\xe8\x13\x91\xad\x0b\x21\x4e\x44\x91\xc9\x17\xc0\x6f\xaf\xcf\x16\x80\x41\x16\x26\x4c\x2c\x74\x99\x25\x70\xae\xdc\xc0\x39\x7b\x03\x98\xe3\x0e\xe0\x00\xc7\x0a\x05\x97\x84\xd7\x0d\xbe\xde\x9d\xad\x30\xee\x76\xfe\x95\xac\xbc\x36\xe2\xeb\x5c\x20\x10\xfa\xb4\x54\xcf\x1b\xe9\x13\x72\xb7\x3d\x82\xf8\x15\x6f\x9c\x1b\xb2\xe5\x85\xc9\x2e\x79\xe3\xce\x00\x18\x9b\xa3\x9b\xb3\x2b\xea\xc4\x95\xc9\x66\x67\x97\xd4\x01\x60\x03\xae\x64\xe3\x90\x7a\x29\x1b\xbe\xcc\x9b\xbd\xca\x1b\xbd\x14\xc0\xbc\xe5\xab\xe6\x0d\xbb\xe0\x9b\xe6\x6c\x74\x7b\x76\x31\xde\xf0\x59\xe3\xd6\x5e\xf1\x9b\xc6\x85\x08\x68\x4f\xf3\x83\x10\xbd\x46\x97\x8a\xa5\x9d\xe8\x1b\xd7\x2c\x64\xd0\x39\xf8\x03\x9d\x65\xd0\xaf\x10\x7b\x28\xa7\x05\x36\xe1\x75\xeb\xc6\x07\x0c\xbe\x43\x75\x60\x24\xfa\x52\xa6\xb9\x1f\x56\xaa\x2e\x2e\x33\x6c\x21\x17\xef\x15\x45\x16\x88\xfd\x65\x44\x27\x71\x66\x20\xb8\x9e\xaf\x47\x26\xf5\x09\x21\x35\xc7\x3f\x4b\xfc\xa3\x8a\x8d\x9a\xcd\x85\xda\x11\xea\xf0\xa1\x41\x15\x71\xbc\xf8\x92\x87\x3c\x11\x3b\xec\x7a\x2b\x0c\xd1\x1c\x3c\x8e\xdd\x42\x20\x85\x36\x66\xbb\x1a\xda\x88\x51\xdd\x0c\x72\x05\x19\x43\x3f\xa0\x11\xb9\x1d\xa5\xa0\xef\xc8\x27\xa3\xf7\x43\x9f\x7c\xf3\x1a\xfe\x53\x4f\x07\x40\xd1\xcc\x27\xdd\x3d\xff\xa9\xe7\x82\x2b\x8a\xb8\x58\x64\xf7\x16\xfe\xb1\x72\xea\x2c\x48\xb9\xc7\x63\x2e\x8c\x87\x6c\x94\xe0\x85\xc5\xa5\x74\x28\xe9\xbe\x18\x1f\x3b\xea\x3a\x3d\x54\x06\x48\xd0\xac\x0a\xb0\x45\xa5\x27\x13\x18\xb8\x22\xab\xb0\x3f\x4f\x3e\x4e\x0e\xf6\x46\x84\xb2\x6c\x84\x5a\xd3\x15\xed\xc6\xcd\x94\x65\x4d\x0f\xdb\x14\x87\x80\x76\x9b\xf6\x7e\x71\xc5\x17\xd9\x4e\xe2\xcf\x57\xa8\x41\xc7\xd7\xbb\xe9\x6f\xc9\x6d\x06\xbf\xd9\x4d\x97\x01\x53\x66\x99\x70\x66\x18\xf0\xf6\xa4\xd9\x98\x8e\x8d\xb1\xfd\x71\xd6\xf8\xd8\x1a\x7f\x9c\xd5\x1f\xe8\xa7\x61\x42\xda\xc4\x7b\x3d\xa5\xef\xe4\xba\xb0\xbd\x60\x51\xa0\xfb\x2f\xf6\x03\x79\xab\xc9\x6a\x8b\x9a\xb9\x13\xa4\x9c\xaf\x76\xda\x8e\xe2\x84\x4f\x2a\x44\x0e\xf9\x2d\xa4\x5a\xa1\x35\xe1\x5a\xb8\x86\x2c\xf1\xf8\x7b\x27\x77\x8e\xda\xfe\x8f\xf1\x3f\x0f\xf1\xe2\xea\xa3\xf1\xb0\x4c\x82\x8f\x86\xd9\x16\xae\x97\x53\x73\xbc\xc8\xec\x59\x66\xa3\x3b\x55\x71\x4f\x0b\xd5\x45\x29\xa6\xee\xb8\x70\x35\xc7\x9b\xcc\xae\x45\x04\x34\xaa\xff\xe8\x48\x9c\x85\xf0\x65\x9d\xd9\x37\x99\x29\x74\x33\xa7\x3b\x60\xa3\xe2\x7c\x23\xa0\x56\x79\xcb\xb5\xd9\x32\x37\xc8\xdd\x39\xe2\xbd\xa2\x13\xdb\x4e\x40\x17\x89\xf6\x75\xc6\xf0\x20\xaf\x90\xe4\x5c\x02\x01\xe4\x66\x57\xbe\x5b\xf1\xed\x16\xbe\xa1\x53\xfd\xfd\x2f\xaf\xc9\x24\x6f\x5d\xf1\xe5\x05\xd6\x47\x9a\x80\x15\x1f\xdf\x62\xb1\xc0\x49\x52\x68\xee\x65\xc6\xae\x30\xf2\xcc\x67\xf8\x05\x82\xde\xad\xca\xff\x29\x43\x75\xbc\xa0\x18\x56\xcd\x0f\x6b\xf6\x86\x45\x59\x6a\xdf\x65\x0c\xde\x9a\xf0\x58\xb3\xaf\xe0\x19\x1e\x9a\xf8\xb5\x62\x93\x5c\x65\xc6\x1d\xf9\xf6\xde\x0a\xe7\x2e\x9e\x93\x78\x15\xa4\x36\xaa\x41\xce\xbc\xbb\x9f\xe7\x46\xad\x59\x43\xb1\x06\xca\xe9\xc7\x4a\x76\x89\xee\x4a\x81\xd6\x8b\xcb\xa9\x69\xa3\x63\xda\xd8\xab\xc2\x60\xc4\x0d\xd0\x8b\x12\xd0\x39\x0f\x0f\x00\xfe\x98\x07\xe2\x3d\x86\x77\x38\x6a\x33\x23\x36\x94\xb7\x35\x61\x2c\xe7\x88\x3b\x8b\x7c\x27\xb3\x0e\x39\x7a\xdc\x59\x00\x3f\xc0\xe4\xbe\xd9\xdd\x4c\x3f\x24\x01\xff\xb0\x9b\xf8\xc6\xb9\xe2\xef\x77\x13\xdf\x93\x8f\xd6\x57\x94\x5c\xad\x95\x2c\x60\x90\x41\x6f\x50\x4d\xc2\x7b\x1d\x78\xd8\x9b\xb7\x17\x78\xfb\x15\x26\x28\xd8\x9c\xfb\x77\xad\xe4\x66\x21\xf6\x9a\x32\x7a\x3f\x54\x5d\x4e\x43\x84\x64\xc2\xe5\xa5\x2f\x52\xd8\x54\x57\x59\xea\x19\xb5\xbc\x44\x8d\x85\xa6\xf4\xdb\x95\x16\xf5\xb4\xae\x60\x7e\x7e\x73\x02\xbc\xa0\x4d\xa2\xc0\x9f\x09\x27\x95\x8a\xe9\x82\xed\xff\x0e\x58\xa1\xb1\x07\x4b\x02\xaa\xbc\xb3\x93\x00\x58\x07\x22\x5a\xdf\x65\x4f\x0a\x76\x57\x2b\xcc\x60\x6a\x0d\xe1\x43\x47\x25\x34\x6a\xa6\xb4\x0b\x94\x5f\xc4\x1b\x24\x27\xd7\xde\xed\x1f\x2a\x15\x5f\x30\x8d\x0c\x5b\x54\x1a\xbe\x40\x62\x4d\xd0\xe7\x30\x35\xf7\x8e\xdd\x61\x57\xb6\xc5\x5c\xf8\x37\x83\x67\x0f\x7e\xe7\xb6\xb5\xdd\xc1\x54\x1f\x72\x08\xfe\x90\x89\xc8\x69\x1b\x58\xcd\xf2\x9a\x4d\xbc\xb4\xae\x60\xfe\x82\x2a\x05\x91\x4a\xc9\x3d\x52\x62\x28\x3f\xc7\xe0\xce\x85\xbf\x13\x12\xa5\x4b\x0e\xec\x4f\xd8\x10\x13\x6f\x6a\x16\x42\xe5\xad\xde\x9c\xbb\x8c\xe2\xd9\xe3\xba\xbc\x2c\xc8\x75\xf6\xa0\xa7\x37\xd8\xe4\x8c\xe7\x9a\x82\xbe\x09\x34\xa3\xbc\xfc\xf2\x48\x58\x8e\x7f\x42\x0a\x79\x4e\x72\xfd\xe5\x73\x5f\xde\x0f\x04\x90\xb8\x10\x89\x0b\x4c\x0c\x1a\x3c\x9b\x2c\xa7\x40\x7b\x8c\x6e\x44\x67\x03\xa8\x4c\xc6\x07\x2f\xea\x37\x59\xd8\xe0\x01\x79\xf3\x06\x7a\x61\x26\x78\xdb\x4a\x85\x8f\xc8\xb8\x99\x84\x40\xc8\x4c\x52\x62\x32\x81\x95\x5a\x1d\xf0\x24\x17\xee\xd5\xa2\x69\xc9\x18\x19\xde\x0c\x86\x68\x85\x0f\xbf\x1e\xd6\x85\xa1\xcf\xb9\xf1\xc6\x69\x26\x75\xdf\x6c\x03\x48\xaa\xc6\x37\x07\xaa\x5c\x1f\x9f\x74\x09\x32\x83\x31\x02\xe9\xbd\x9a\x6c\x70\xa8\x40\x7c\x67\xf8\x74\x3e\x65\x57\x90\xff\x92\x03\x14\xee\xea\xe1\x68\x3d\xd9\x34\x00\x1d\x35\xce\xa7\x28\x35\x07\xf4\x04\xe8\x2f\xc9\xae\xc4\xe3\x39\x23\x21\xce\x0b\x64\xdb\xec\x2b\x94\xd5\x8b\xc7\x4b\xe1\x0f\xca\xbe\xdb\x6e\x63\xa8\x54\x2b\x59\x64\x9f\x17\xd9\x03\x99\xdd\x08\x9a\x73\x13\x95\x18\xa0\xed\x84\x00\xab\x8f\x45\x10\xd7\xcb\x9d\x71\xdc\xf2\xf5\x64\x49\x3d\x84\x31\x5c\xc0\xcb\x82\x5e\x96\xd3\x91\x71\x2b\x7c\x8e\x3e\x3c\x5c\x88\x07\x13\x25\xe0\x34\x8b\xf2\xcb\x73\xf9\x61\xac\xe4\x24\x17\x4a\x40\x72\xbb\xb5\x55\xda\xad\x4a\xbb\x00\x70\xbb\x47\x47\x7b\x36\x42\xde\x23\x33\xef\x1a\x86\x52\x7c\x12\x4d\x35\x94\xc6\x92\xec\x12\xc5\x15\x2f\xe7\x48\x77\x73\x98\xdb\x4a\x9d\x55\x5c\xf5\x49\xe1\x32\x3a\x90\xe8\xe8\xa9\xc2\x0b\x92\x40\xa0\x50\x5e\x72\x4b\x48\xad\x09\xd6\x94\x84\x12\x41\x6b\x0d\xa4\x75\x09\x7d\x3d\x56\x1f\xfa\xdb\xd1\x6b\x48\xb0\x06\x84\xcb\xf7\xe8\x8b\xae\x52\xcc\x55\x25\x18\x29\x57\x12\xa9\x4a\x2e\xb2\xab\xc5\x57\xd4\xe3\x50\x3d\xaa\x16\x47\xd5\xf2\x12\x71\xca\x13\xab\x40\x5a\xdc\xa3\xc9\xc6\x2a\x5c\xac\xc2\xdd\x29\x9e\x97\x86\x15\x86\xc1\xfd\x3d\xcc\xb4\xdb\xcd\x3c\x53\x2c\x32\xc5\x90\x49\xc7\x73\xb0\xa8\xdd\x43\xaa\xde\x55\xb1\x3c\x94\xe4\x83\xee\xa6\x48\x16\x80\x51\x19\x94\x49\x3c\xe0\xcd\xbb\x26\x4a\x30\x22\x7c\xdc\xc0\xe3\x06\x85\x8f\x4d\x0f\x58\x1b\xbf\xee\x37\xa2\x3a\x85\x8a\x70\xcf\x9c\xba\xd3\x9e\x51\x2d\xeb\xb3\x5c\x30\x40\xa1\xda\x61\xe5\xb5\x5d\x60\xfc\xd7\x77\x4d\x28\x12\xa0\xc4\x61\xd3\xe4\x51\x3d\x90\xe7\xdf\x33\x6b\x5b\xb4\x7d\x74\x04\x1b\xa2\x54\x03\x25\xbf\x7c\xac\x1a\x55\x8f\x6a\xad\xa4\xa1\x4e\xf7\x34\xeb\xbb\x22\x1e\xfe\x1d\x95\x2c\xde\x61\x3c\x64\xaa\x47\xbe\x89\x77\xad\xf1\xd0\x2d\x1e\x39\xd9\xf7\x93\xb5\x93\xe6\xd1\xab\xd1\xad\xa7\xef\xa2\x9f\x76\x0a\x19\x0e\x3b\x67\xd2\x61\xc0\x0b\x25\xbc\x75\xca\xe6\x7c\x8e\x72\x8f\x25\xa1\x48\x0c\x8f\xc4\x17\x80\x8e\x78\xab\x03\x87\x49\x6b\xd8\xa7\x43\x84\x1c\xb5\xe4\xfa\x0c\x2d\xac\x4c\x9f\x32\x80\x87\x11\xd7\xa1\xb2\x53\x14\x0b\x59\x03\x75\xcf\xe2\xb6\xa0\x3d\x43\xaa\x73\x62\xd3\xcc\x09\xd6\x4b\xc7\x8e\xb9\x05\x78\xfb\x99\x95\xdf\x31\x39\x74\x90\xad\x81\xcf\xdd\x90\xeb\x9c\x95\xda\x93\x97\x85\x13\x18\x71\x8e\x59\xa3\xcb\x33\x0f\x4f\x52\xd3\xe1\xe7\x78\x23\x3d\x47\x03\x78\xc1\x82\x2c\xd1\xbe\x96\x30\x07\xdb\xf0\x65\xeb\xae\x39\x07\xe8\xdd\xc1\xd3\x06\x9e\x36\xcc\x58\xf3\x4d\x7d\xd3\xb8\xab\xdf\x99\xe4\x54\x25\xae\xfb\x50\x41\xdd\x80\xc7\x42\x89\x6f\x6d\x9a\xcd\x0c\x8f\x96\xf6\x9a\x6d\xea\x7c\xcd\xee\xf0\x0f\x56\x06\x85\x0d\x38\x90\x5b\xb7\x1e\x86\xc8\x6a\x1b\x4b\xf9\xd4\x50\x49\x26\x8a\x26\x60\x8e\xef\xea\x33\x06\x2d\x37\x44\x81\x4e\x73\x86\xc2\x8b\x0d\x1e\x26\x33\x92\x43\x40\x62\x5c\xbf\x31\x49\xb0\x81\x3a\x2c\x80\x01\xef\xe0\xa1\x83\x0f\x44\x32\xcc\x4c\x53\x4a\x04\xbc\xe7\x57\x23\x18\xe8\x0a\x07\xea\x60\x95\xc6\xa6\x09\xbf\x68\xa7\xe0\x60\x95\xc6\x1d\xbc\x6e\xe0\x15\xeb\x5d\x50\xa9\x9f\x32\x60\x35\x77\x65\x87\xc6\x0a\x36\x1e\xfa\x7e\xc8\xaf\xf4\xa1\x5e\x43\x54\x8c\xd6\x03\x77\xde\x0c\xef\x7f\x48\xd6\x61\xa0\x6f\x0f\x53\x82\xbb\xc8\x9d\xf7\x82\x72\x03\x8a\x69\xdd\x01\xb8\xd7\x77\xd8\x11\x7c\xd8\x98\x36\xa6\x35\xb9\x81\xa9\x4d\xfa\xcb\xb1\xaf\x66\x3d\xc1\x3c\xe2\xc3\x86\x3e\x60\x81\x0d\x7e\x30\x47\x2e\x2d\x26\xb5\x46\xc4\x2a\x95\x8b\x04\x45\xf3\x8e\x10\xb3\x3d\x0d\x65\xad\x00\x65\x39\x14\xc5\xda\x39\x7c\xb7\xb0\x5f\xec\x5c\x14\x3b\xc7\x62\x4f\xe7\xf2\x03\x51\x2a\x50\x8d\xbd\xda\x37\xcb\x79\xa4\xf4\xbc\x4a\x09\x37\x1c\x87\x76\x83\x6a\x9d\x63\xad\xb9\x4e\x72\xb9\x01\xd9\x1e\x90\xd6\x07\x35\x63\xf7\xdb\x5b\x3e\xde\xde\x12\xdb\x9b\xc7\x3e\x65\x78\xea\x79\x27\x8a\x26\x58\x54\x20\xb2\xa7\x15\x5c\x3c\xde\x95\x45\x51\xdf\xd7\x81\x74\xcd\xc3\xba\x98\x48\x6d\x33\x63\x65\x8b\xd8\xb9\xf1\xd3\x27\x8a\xa0\x6e\xe4\xb0\x6e\xb0\x64\xba\xf4\xd2\x4a\x83\xe6\x2a\x4b\x80\xbd\xd6\x67\xd4\x3a\x2d\xe6\x27\x0a\x8e\xb0\xed\x78\x0c\xc7\xff\x99\x85\x3a\xd5\x36\xfc\x02\x96\x70\xe5\x45\xa1\xdc\x23\x12\xa3\x2b\x4c\x1a\x8a\x10\x60\x14\x27\xc4\x10\xa8\xd9\xc4\xab\x4b\xbc\x90\x71\x44\xc9\x83\x0e\x03\xc5\xdd\xf8\x33\x4f\x50\xc9\x9e\x76\x77\xea\xa2\x5d\x98\x35\x82\x73\x72\x84\x01\x7f\x3c\xbc\xd1\x94\xbc\x04\xa6\x27\x32\x5d\x7a\x06\x3c\x87\xcf\x23\x6f\x92\x29\x32\x8e\x88\xdd\xa9\xf4\x8a\x25\x51\x32\xe0\x9e\x89\x7a\xde\xc9\x20\x4a\xa1\xa5\x96\xe4\x9e\xe8\xe6\x0c\x35\xc2\x1c\x71\x49\x16\x15\x1c\x94\x23\xa3\x34\xc9\x0b\x0c\x9f\x47\xd0\x36\x46\xb4\xc9\x9d\x4c\x94\x4c\xd1\x80\x55\x99\x45\x2b\xc3\xac\xc7\x9a\xd3\x1b\xb7\x38\x5f\x92\xfc\x7c\x81\x73\x2f\x10\xf6\x17\x88\x8a\x73\xad\x47\xf7\x2c\x25\xc5\x3f\x23\x06\xfc\x07\xdc\x8b\xe8\x3a\x4f\x59\x2c\xb1\x3e\xe4\x51\x79\x13\x99\x37\x06\x80\x40\xe7\x6b\xc2\x71\xad\x66\x67\x29\x47\x8a\x2a\x1e\xca\x18\x60\x35\x51\x8f\x53\xb3\xaa\x84\x00\x18\x95\x90\x8a\xfe\x58\x42\x3c\x42\x89\x46\x43\x15\x97\xdd\xa1\x14\x09\x65\x91\xb2\x37\x14\x31\x12\x26\x6f\x80\x5a\x74\x1a\xc6\x78\x45\x63\xd4\xee\x6a\x6c\x8d\x1a\x59\xf2\xd3\x46\x7c\xda\xe0\xa7\x4d\x8d\xdd\x68\x9f\xd6\xb2\x18\x20\x79\xac\xa2\x48\x97\x65\x00\xc7\x63\x79\x8a\xcb\x85\x04\x44\xc5\x9e\x9f\x9b\xbb\x80\x43\xb6\x8e\xc3\x79\x5a\xa8\x90\x9e\x0b\x15\xd2\xe2\x72\x61\x2f\xfb\x1c\x9b\xf0\x0f\x34\xb1\xdc\x6b\xc2\xa7\x26\x96\x4f\x6d\x82\xb2\x93\x03\xba\xe8\x40\x13\x0b\x73\x17\xbe\x11\x35\xb1\xd0\x9a\x58\x55\x35\x51\xca\xbe\x28\x88\xab\x9c\xb8\xcb\x09\xbd\x2a\x13\x0c\x81\x57\x8c\x56\xc7\x14\xdb\x3c\x5a\x3f\x92\xcb\xa2\x4c\xb3\xd8\xa9\x10\xc5\x20\xf1\x0e\x5b\x1f\x50\xc8\x95\xb7\x04\x44\x19\xc5\x94\xd1\x30\xa5\x19\xad\xb1\x81\x27\x0c\x0d\x07\x89\x84\x4d\x04\xc5\x5e\x63\x7f\x64\xc5\x07\x95\x96\x16\x49\x40\xee\xa9\xd4\x7f\xa0\x96\xdf\x1e\xba\x43\x25\x1c\xa1\x07\x86\x45\x56\x51\x96\x78\xd1\x0d\xc6\x3a\x12\x85\xfe\x25\xab\x17\x1f\xb2\xbc\xd9\xdf\x21\x9d\x20\xeb\x09\x95\x58\x04\x12\x32\xe3\x06\xb2\x84\xb5\x08\xc3\x51\x11\x59\x39\x0f\x78\xd7\x62\xcb\x80\x77\xd8\x22\xc0\x3b\xb2\x51\xc1\x73\x2c\x7d\x2f\x46\x97\xd8\x9b\x03\x98\x31\x93\xec\x04\xa0\xa1\x49\x36\x25\x5d\x68\xda\x45\x59\x6b\xe6\xad\x51\x75\x72\x24\x24\x6b\x88\x7e\x80\xe0\x5f\x63\x20\x28\x44\x4a\x52\x35\xda\x37\x99\x81\xea\x20\xd4\xcd\x90\xa1\x8a\x13\x95\x33\x71\x6b\xb8\xb9\x1e\xb2\x16\x81\x8e\x0c\x30\x47\xcd\xa6\x8b\x7a\xc9\x66\x24\x6f\xd5\x00\x13\xb9\xa8\x0b\x89\x6e\xb0\xf0\x2e\xc4\x87\x47\xd1\x01\x59\x61\xa3\x33\xc2\x88\x54\xbe\x60\x94\xe9\x92\x06\x8e\x4e\x3f\x98\x41\x76\x1e\x88\xab\x22\x3d\x03\xa0\x86\xbd\x3e\x3d\x3c\x40\xb1\x99\x17\x78\xa9\xf7\x4d\x51\x5a\x2d\xc7\x5f\x32\x23\xdb\xf7\xa4\xcf\x32\x8c\xad\x66\x90\xeb\x60\x59\x80\x44\x0b\x24\x06\x48\x29\x18\x3d\x32\xd7\xb2\xdf\xa6\xf2\xed\x06\xac\x3d\x24\x0a\xa6\x1e\xa5\x40\x02\x25\x73\xcf\x47\x5e\xd5\x47\xc1\xae\x5f\x68\xe8\x63\x5d\x4f\x33\x95\x42\xdf\x95\xca\xf4\x3a\x1f\xfd\x93\xcc\xa1\x3c\x61\xfc\x4d\x4e\x34\x04\x84\x9e\x54\x4c\xb7\x19\x8f\xbd\x83\x05\x11\x0a\xff\x06\x6a\x9c\x95\x95\xf0\x54\x17\x49\xcd\x49\x4d\x1c\x80\xe3\x97\x52\x56\x75\x35\x32\x4a\xf3\x02\xa4\x89\xb5\x3b\x91\x29\x4b\xf5\x89\xc4\x21\x69\x60\x57\x12\x15\x9e\xe6\x60\x27\x15\x8f\x50\xe7\xc0\x21\x7b\xea\x97\x09\xbf\xd2\x6e\xc8\x59\xee\x9c\xc5\x56\x8b\x84\xf8\xe0\x3b\xd2\xb2\x04\x0e\x55\xf4\xa3\x9e\x61\x8f\xe0\x54\xc0\x9f\x0d\xcf\x50\xf3\x0f\x90\xa7\x5f\x2c\x7a\x79\x2b\x49\x12\x1c\xe0\x2f\x70\x0f\xc4\xaa\x83\xe3\xb8\x2d\x9f\x6c\x54\x12\x0f\x9e\x47\x23\x13\xf8\x11\xee\x4f\x82\x29\x43\x26\xde\x11\x5f\xeb\x31\xb9\x31\x6b\x70\x77\x97\x7b\xce\x7d\x5a\xcb\x4e\xa2\xc7\x4d\xd2\x57\x14\x37\x9a\x79\x37\x34\x3d\x1d\xc1\xe5\xf8\xa8\xe4\x1d\x17\xe1\xc1\x60\x00\x86\x37\xf1\x35\x01\x6d\xa7\x11\xeb\xca\x54\x14\x3b\x55\x84\x46\x8d\x35\x64\xef\x69\x21\x51\x43\x23\x22\x1f\xc9\x2c\xf7\x1d\xda\x4e\x29\x09\x5d\xf3\x48\x5d\xa9\x0a\xb4\x64\xa0\x0f\x46\x62\xd1\xf3\x4b\x8d\xaf\xe0\x4c\x32\x94\xdc\x90\x08\xeb\xfb\x8c\x74\x92\x4a\x93\xed\x1f\x12\xb6\x44\x62\x30\x30\x2f\x39\xbd\x45\xa4\x57\x49\xb1\x8a\x54\x9c\x44\xcb\x8d\x54\xad\x41\x6a\x83\x1c\x78\x55\x79\x2b\x7a\xc4\xbb\x04\xaa\x2d\x54\x15\x41\x5d\xd2\xea\x22\x99\xd9\x4c\x80\xcf\xcf\x83\x74\x09\xab\xa1\xab\xc4\x98\x9b\x6d\x97\x55\xb6\xef\x8f\xfd\x03\x95\xa1\x04\x7b\xc1\x97\x75\xc3\x3a\x9b\x8f\x9b\x1d\xbb\x63\x02\x11\x68\xcc\x9b\x6e\x7d\x61\xb6\x01\x64\x70\xf6\xa2\xe0\xfb\xa6\x90\xa9\x03\x59\x3c\xd3\x24\x21\xe2\x14\x80\x95\x75\x23\x50\x1f\xea\x14\xaf\x83\x71\xa5\x20\x14\xcd\x4b\x9a\x01\x50\xaa\xdb\xea\x30\x66\x1e\xac\x8b\x70\xca\x22\x29\x22\xbf\xa9\x8c\x1a\x39\xc3\xd0\x2a\xf7\x33\x27\x75\x6c\xca\x2d\x76\x8a\xc3\xb1\x5e\x5d\xb4\x9c\x14\xa2\xe5\xa4\xc1\x9d\xfa\xba\xb1\x60\x6b\x47\xa6\x2c\xf1\x4a\x6f\x26\x91\xaf\xb8\x25\x06\x04\xbc\x0e\xa4\x6f\xda\x37\xe8\x2a\xa2\x88\xc3\xb7\x8b\x18\x9f\x8a\x89\xcb\xf8\xfb\xa9\x58\xb8\x18\xc3\xd7\xa3\x62\x35\xe4\xa7\x9b\xc2\xe6\xc6\xae\xce\xd7\x94\xf4\x45\x49\x7f\xab\x8c\x65\xd6\x28\x89\xd6\xc8\x0b\x18\x44\x59\x3e\xa6\xed\x32\x52\x43\x42\xfe\xc5\x58\xe6\xba\x7f\x39\xef\xe2\x48\x83\x27\xe7\xe0\xa6\xfb\x66\x7f\xd3\x05\x87\x62\x80\xee\x06\x07\x2d\x6e\x52\x26\x7e\x71\x7c\x78\xe8\x0c\x50\x7b\x9b\xd2\x9d\xca\xbc\x20\x5f\x12\xe8\xf1\x88\x2e\x80\xd7\x5e\xbc\xc2\xeb\xc3\x80\xcd\xc9\xd6\xa4\x48\x49\x20\x85\xfa\x9e\xab\x35\xf1\x58\x2f\xcf\x56\xc4\x5c\xe9\xa2\xbc\x35\xac\xb1\xd5\xd9\x1a\x10\xef\xda\x14\xb4\x95\xcc\x8f\x19\x27\x6b\x64\xc4\x66\xf8\x93\x88\x57\x52\x96\x58\xf0\xce\x68\x29\x35\x8b\xb4\xfc\x0b\x91\xbf\xc1\x93\xc9\xa2\xd9\x91\xb9\x59\x22\xd2\xb1\x60\x4e\x5c\xcb\x45\xbf\x81\xf5\xee\x20\xc1\xe1\xfa\xb0\xe0\x23\xf2\x96\x80\xc4\x9e\xef\xef\x2c\xfb\xe4\xeb\xd7\x7d\x14\xcf\x74\xc3\xc2\xc7\x17\xfe\x01\x4f\x58\x37\xe2\xc2\x1a\x35\x1e\xa0\x9b\x6a\x6f\x44\x14\xd6\xe9\xa9\xfb\xe2\x40\xd5\xb3\xa2\x6a\xd7\xcf\xb7\xce\xdd\x57\xaf\x7c\x5d\xa5\xe7\xb1\x22\x91\x28\x12\x49\xf7\x1e\x5f\xbd\x37\x65\x54\x93\x92\x02\x42\xe2\xcf\x3c\xa1\x76\xb0\x77\x7d\x4e\x26\x60\xb9\xfe\x1b\xd2\xa0\x58\x28\xf0\x4d\x32\x5f\x20\xa7\x2a\xbe\xf4\x70\x2b\x30\x7a\x6c\x3e\x72\x79\x95\x01\x5a\x6d\x22\x97\xb9\x25\x71\x08\x43\x83\x73\xb2\x3b\x4a\x74\xc3\xc8\x58\x32\x72\x1e\x47\xe4\xcd\xdc\x33\x67\x6c\x38\x0d\x8e\xc2\x65\xbc\x44\x42\x52\xde\x43\xcd\x29\x57\xa6\x25\x79\x9a\x5a\x6d\x89\xe6\x8c\x44\x3a\x32\x41\x1f\x66\x32\xb1\x4a\xa1\x22\xef\x7f\xae\xe4\x5e\x54\xb1\x65\xb5\x99\x37\x77\xb2\x00\x00\xe4\xf8\x88\xeb\x0b\xe8\x25\x7e\xb0\x8c\x32\x2f\x4d\xbd\x6a\xd8\x11\xc8\x72\xc3\xb9\xb0\xd8\xb3\x8c\xf8\x5f\x01\x84\xfc\x52\x19\x08\x2b\x29\x8c\x97\x66\x66\x16\x51\x5b\x99\x34\xec\x8c\xd1\x9e\x8f\x2e\x6a\x49\xb9\xfe\x0c\x7d\xfb\x3b\x3c\x26\x2f\xa7\x22\x50\xf3\x76\xb7\x1e\x17\x32\x73\xc3\x69\x46\x24\x82\xef\x2a\x00\xb9\x5b\x76\xeb\x2f\x16\xc1\xc1\x5e\xeb\x8e\x6c\x8a\x11\xcc\x85\x8b\xe4\x25\x9f\xab\x94\xdc\x1c\x74\x81\x36\xa4\xc0\x8b\x41\x97\x3d\xc2\x2a\x3b\xe3\xc8\x74\x39\x43\x69\x1c\x2a\x87\x4f\x36\x85\x73\x4c\xb5\xa6\xcd\x39\xd9\x36\xc2\x53\x5e\xea\x5e\x10\xb6\x68\x7c\x68\x14\xc5\x9b\xe2\xb1\x29\xd4\xce\xda\x46\xb7\xee\x98\xb9\xd3\x7a\xb4\x16\x44\xbd\xec\x3c\x6b\xac\x65\x75\x46\x7e\x83\x47\xf5\xa2\xaa\xed\x02\x81\xe5\x36\x79\x36\xf6\xdb\x59\xdd\xb1\x2d\xe9\xec\x25\xe0\x6e\x01\x59\x35\x32\xcc\xdc\xe4\x41\x61\xab\x8a\xea\x43\x4e\x38\xfb\xfa\x75\xd0\x69\x67\x05\x4b\xfc\x95\x8b\x80\x22\xd1\xab\x8d\xa3\xb2\x14\xdf\xdb\x3c\x2e\x0b\x49\xf6\xb3\xf0\x68\x6f\xd1\x38\x08\x07\xab\x40\xf2\xec\xb3\x17\x47\xb6\xeb\x0b\x5d\xa3\x9c\xb8\x4e\x52\x34\x59\x5f\x1d\x94\x86\xfa\x05\x3f\x4e\x6b\x49\x85\x23\xc7\x8d\xe3\x31\x65\x61\xa9\x93\xfa\x01\x23\x3f\x58\xba\x21\xb4\x4c\x44\x9e\x02\xd6\x5d\x50\xac\xbb\x79\x11\x03\x60\xcd\xd3\x31\x50\x9b\xed\x25\x71\x1d\x0b\x34\xae\x74\x81\xd1\xc0\xf6\x22\x64\x9d\xe6\x13\xbf\x01\xd3\x6f\x44\x2d\x7a\x9e\xe2\x86\xd9\x08\x2e\x66\x71\x66\x11\xf8\x72\x9e\x65\x89\x37\x33\x01\x64\x62\xce\x19\x19\x46\x1f\x1d\x39\xcf\xe1\xa1\x33\x25\xb6\xcb\x9d\xa0\x60\x07\xc3\x6a\x02\x8a\x83\x41\x75\xd8\x82\x4c\x3b\x23\xbc\x3d\x5a\xab\x8d\x18\x96\xd8\x1c\x57\x9e\x92\x68\xe9\xa3\xe8\xc3\x98\xaf\xf1\xa8\x5c\xee\x1e\x90\x5f\x4f\xe1\x11\xda\x7a\xea\x21\xf6\x3a\x95\x6e\x8f\xe9\x94\xba\x02\xd4\xff\xd4\x03\x64\x4f\x94\x9a\x8e\x2b\xd0\xe8\x42\x98\xb7\x6c\xed\xbc\x21\xa2\x07\xe7\x14\x5c\x3c\x74\x37\x4f\x3d\xfe\x9f\x3d\xcb\x09\x80\x32\x67\x7d\x90\x0e\x0c\x0b\xe6\xd1\xd3\x4d\xe6\x71\xf1\x38\x14\x22\x07\x16\x60\x26\x3c\x3d\x51\x3c\x88\x84\x2b\x3d\xd1\xfc\x86\xc1\x3e\x70\xc6\xef\xcb\xf8\xd2\xed\x88\xc4\x53\x78\x23\x87\xb1\x43\x7e\xc9\x80\x10\x2d\x8b\x25\x62\xde\x48\x0c\x4d\x3a\x43\x59\xce\xa1\x37\xb1\x29\xd5\xf9\xe3\xba\x81\xeb\x36\x67\x90\x01\x75\xb5\x62\xe0\xba\xc4\x6f\x60\x22\xbe\xae\xaa\xb8\xc1\xe7\x7a\x7d\x55\x59\x9a\x98\x45\xe9\x97\x5d\xfa\x48\x25\xb7\xbb\x2c\x80\x7f\x62\xa7\x1c\x6e\x53\xb2\xd1\xa4\xa5\x5c\xc5\x48\x8b\xd3\xfd\x06\xc7\x41\x58\xbd\xc4\x55\x87\x3b\x5c\xf5\x53\xf9\x85\x78\xc7\xdd\xe9\xe3\x8b\x43\xcc\x9b\xf7\xf0\x50\xe9\xcd\xc7\xb3\x1b\x05\xf1\xb8\xa7\x71\xf2\x25\xa7\x5b\x72\x6f\x7c\x2f\x62\xfa\xe8\x6b\xaf\x6c\x32\xb2\xb3\xf6\xa4\x30\x27\xe1\x51\x69\xed\x65\xca\xbb\x02\xa0\x2e\xc0\x17\x24\xbd\x87\xe9\x5a\x22\x93\xb0\x94\x62\xa5\xd6\x8a\x37\x97\xad\xcf\xec\xdf\x98\x1e\xa3\x72\x08\x3c\xcd\x51\xe6\x91\x5b\x7e\x40\xff\x01\xc7\xcd\x81\x82\x9f\x8f\xe8\x63\x79\xb6\xef\x9e\x2f\x5a\x77\x14\x67\x89\x62\xd3\xde\x9d\xad\xe9\x75\x2d\x5e\x49\x88\x74\x76\x23\x7e\xc9\x3a\x80\x5c\x8f\x60\xbd\x33\xee\x18\xc0\x5e\xc0\x3a\x6b\x42\x0d\xc0\x53\xb8\x78\x7b\x6e\x40\xf1\x86\x63\xac\x01\xb3\xb5\xbb\x8d\x99\xc9\x36\x90\x0e\x47\x89\x21\xeb\x78\x78\xe8\x98\x95\xdd\x80\xb3\x16\x4a\xce\xd0\x8f\x9f\xb0\x4e\x11\xf2\xab\x4d\xb1\x12\x93\x1d\xd9\x92\x66\x97\xcf\xef\x5f\x90\xe2\x36\x53\x72\x26\x1b\x59\x7b\xd4\xb1\xf3\xa6\x4a\x3a\x9c\xf2\x38\x97\x0e\xeb\xe2\xa6\x42\x82\x26\x1d\x13\x28\xe1\xd8\xc8\x39\x8b\x00\xab\x47\x66\x2c\xf0\xb2\xe1\x4f\xa2\x29\xcf\xf8\xfd\xa5\x8d\x4f\x4c\xcc\x80\x9d\x16\x8d\x1a\x18\x4b\x26\x9a\xea\x62\xd8\x4c\x99\xfa\x3f\x3c\xc0\x81\x22\x7b\xe9\x88\x9f\xcf\x40\x23\xac\xa4\x3a\xa4\x88\x98\x48\xc9\x3e\xd0\xe7\x66\xcb\xe1\x99\x59\xc8\x9b\x54\x8d\xa5\x38\x49\x9e\xae\xab\x9b\x0f\xc2\xcb\x45\xbd\xba\xd4\x2d\x6c\xf9\x63\x6f\x02\x7f\x9b\x18\x36\x09\x2d\x8a\x49\x5c\x28\xc9\xd5\xfb\xb7\x68\x4f\x20\x54\xd0\x85\xcf\x84\xd6\xe7\x46\x3a\x49\x0b\xd7\x1d\xad\xcf\x44\x00\x8e\x61\x96\x3e\x03\x20\x3f\xc3\x1c\x87\xad\x4b\x16\xa3\xa5\x38\x1c\xca\x50\xff\xe7\x26\x6a\xcf\xc3\x57\xbf\x10\x75\xef\x67\x36\x47\x79\xef\x5e\x70\xdc\x27\x64\x44\x24\x13\x1e\x1e\x28\xd6\x43\x31\xc2\x58\x2c\x8e\x4b\x32\x59\xfa\xdc\xc8\x73\xe2\x1a\x59\x35\x8a\x81\xae\x8a\x22\x99\xe4\x9c\xef\x45\x98\xa2\xdc\x65\x30\xd2\x50\x48\x3c\x21\xbb\x81\xc8\x7c\x17\x46\x12\xb9\x43\xd5\x09\xac\x80\x15\x6c\xbd\x08\xfe\x2e\xb9\xdb\x5a\x8d\x22\xfe\xda\xc7\x50\x6a\x19\xbf\xf6\xd1\xf5\x66\x04\xf3\x3a\x32\x5d\x7c\x73\xc9\x5f\x8b\x8f\xb7\x0c\x7e\x0b\x15\xbd\xd0\x95\xfd\xe7\xc6\xbc\x99\x01\x40\x02\x18\x78\x04\x03\xcf\x10\x4a\x31\x5d\x1f\xbf\xf0\x8d\x97\x50\x17\xa3\x48\x5d\x21\x6d\xd9\x06\x8f\x59\xd2\x40\x4a\x7c\xde\xa0\x46\x51\xe1\x13\xdb\x6e\x60\xe3\xf8\xc9\xc7\x3e\x1c\x1d\x3d\xa3\x76\xe8\x06\x21\xe5\x11\xb4\x07\x20\x98\x37\x13\x8a\xd7\xf2\x8c\xfa\x42\xf7\xd3\x18\xac\xca\xc5\x6f\x41\x73\x49\xc6\xfa\x6a\x03\x79\x05\x94\x7c\xb9\xeb\xea\xb4\x6b\x4b\x3b\x0e\xb7\xab\xb0\x55\x79\x0c\x87\x93\x99\xbf\x38\x9f\xc4\x33\x6c\x9c\x0b\x1f\xc9\x34\xd2\x65\x0a\x84\xd5\x7a\x81\xd9\xd1\x0d\xc4\x8e\xef\xdf\xc7\xdd\x52\xa7\xb9\xab\xe9\xa7\x9f\x0a\x81\xf2\xa6\x8d\x8e\x15\xc7\xbe\xd8\x4e\x50\x8d\xb4\x19\x24\xdf\xe6\xa8\xc1\x72\xf1\x5f\xd6\x48\xb5\xf8\xa2\x46\x97\x6a\x97\xc8\x3e\x2a\x21\x7b\x37\xc8\x92\x92\x3f\xa3\x03\xb4\x06\x3a\x30\xd9\xa5\x36\x5c\x32\x89\x46\xc5\x59\x3c\xbd\xdd\xbd\xdb\x1e\x7d\xab\xe3\xb5\x4f\x5a\xe8\x2b\xc0\x26\xf9\xe4\x8b\xa0\x11\x1b\xfe\x19\x9f\xd0\x8f\x01\xa4\x46\x63\x58\x51\x1e\x75\x13\xb0\x4c\x48\x34\x47\x54\x20\xf2\x84\xbf\xf1\x85\x2b\x9f\x0f\xf4\xbb\x44\x43\xb3\xa6\x10\x23\xc1\x99\x8f\xc4\xf2\x5d\xc3\x03\x8c\x9d\x68\x3c\x20\x75\x2e\x1b\x57\x21\xf1\xa6\x8b\x3a\x51\xb1\x5a\x57\xb0\x22\x49\xf3\xcf\x24\xff\x31\x5b\xbb\xb2\xc8\x12\x98\xaf\x05\xfc\xd5\x8a\x75\x9a\x58\x72\x0c\xcf\x6d\xf8\xb5\x3b\xa6\xac\xa0\xb8\xaa\xfa\xaa\xe5\xe9\xe1\xf2\x8c\xe5\xf2\xcc\xf8\xb3\xce\x7f\xbf\x38\x4b\x22\xd2\xaf\x20\x59\x72\x57\xef\x92\xb8\x15\xeb\x29\xfe\xfa\x55\x29\xaa\x7a\xa6\x57\x15\xeb\xcb\x31\xdd\xa3\x3d\x80\x6b\x3a\xb8\x1c\xf5\x10\xa1\xc4\x6b\x02\x53\xe4\xeb\x7a\xf2\x19\x6a\x37\xc7\xe4\xfa\x7e\x92\x4d\x25\x58\x51\x4e\x9f\x8e\x2d\x1b\x55\x49\x84\xf7\x21\x65\xc4\xfa\xf0\x60\x9d\xf1\x18\x3e\xc5\xfa\x81\xed\xa9\x1b\x2b\xaf\x74\x63\xe5\xa3\x3b\x7b\x75\x0a\xe9\x77\x51\x73\x74\x85\x95\x08\x3b\x4a\x3f\xf7\x97\xb3\xc6\xbb\x63\x20\x65\x6a\x94\x80\x16\x43\x8b\x71\x00\x5c\x9a\x5d\x9b\xe9\xef\x1b\x5b\x64\x68\x16\xa9\x9d\x23\x4f\x20\x38\xf1\x9d\x0a\xe5\x17\x17\xf8\xc6\x30\x5d\x68\xda\x85\x40\x4c\x61\x52\x1d\x93\xda\xf2\xda\x0e\xaf\x7e\x69\x9c\xd6\x08\xb0\xc1\x52\x75\xfa\xcc\x1a\x99\x52\x86\x14\xf1\xe5\xc4\x6d\x76\xa6\x2a\x27\x62\x73\xfc\x65\xb5\xe4\x53\xe6\xc4\xfe\x7c\x53\x7b\x06\x5d\x79\x78\x40\xb9\x0b\x6c\xaf\x1b\xd3\x7c\xce\xd7\x63\x63\x29\xe8\x12\x18\x9c\x03\x3b\x56\x94\x6d\xf2\x44\xa4\x8a\x1a\x32\xcc\x0e\xcc\x2c\x06\x04\xbb\xe1\x15\xfd\x66\x6a\x75\x70\xd5\x4b\x01\x2b\x73\xa4\x3e\xe0\x8d\x9b\xaa\xc5\xaa\xc8\x8f\x07\x98\xba\xe5\x48\x75\x47\xcd\x9e\xba\xfe\x8c\x77\x6e\x1b\xe1\x84\x8f\x4b\x73\x87\x52\xdb\x39\x45\xca\x81\x53\x5f\x4d\x59\x2e\xa1\x42\x71\x3b\x72\xd4\xf5\x08\xa1\xaa\xee\x40\x99\xab\xa0\xea\xa3\xe2\x22\x0e\x79\xa4\x9c\x90\xf9\xea\x2b\x1e\x81\x04\x07\xb1\xee\xfd\xd6\x67\x1a\x8d\x0b\x5d\xfe\x3c\xc6\x3a\x6d\xac\x93\x45\xec\x59\x2e\xc5\x67\xca\xe5\x03\x57\x0d\x00\x39\x95\x0f\xd0\xd3\x07\x18\xef\x6d\x02\x1e\x4a\xb0\x93\x64\x09\x97\x5c\x84\xbb\xc2\xd1\x77\x45\xf4\xdc\x19\x99\xb4\x27\x80\xe2\xc3\xdc\x74\x32\x93\x3b\x5d\x5f\x84\x2f\xcd\xc4\x25\x67\xc1\xcb\xc7\x75\xbc\x88\xad\xa3\xbe\xd2\x38\x67\xa2\xd2\x7a\x56\x5f\xb7\x81\xa9\x6f\xc3\xa3\x5f\x5f\x03\xd6\x86\x06\xf7\x08\x1a\xc5\xf9\x89\x1b\xd2\xb2\x73\x38\x0f\xe8\x6f\x54\x71\xd8\xe0\x3d\xc0\xd8\x35\x44\xef\xdb\x29\xa0\x7b\x22\xf3\xd0\x95\xcd\xec\x4e\x8c\xd0\x88\x1f\x1e\x92\x33\x0f\xd7\x0c\x05\xf7\xa4\x27\x12\x5e\x44\xe8\xcf\x00\x85\x0f\x40\xaf\x00\x6b\x0a\x7f\x37\x3c\x80\xbf\xb3\x0d\x4f\x98\x83\x34\xc9\xec\xae\x58\x7a\x1e\x1e\x0a\x90\xd2\x74\x58\x02\x4d\x66\xa2\xc9\x04\x9a\x34\x47\x40\xfb\x50\x9c\x3a\xf8\xdc\xe0\x5a\x46\x0f\xe5\x1c\x09\xc3\x26\x61\x7d\x13\x99\x58\xee\xd3\x5d\xde\xa7\xbb\x2f\xf4\xe9\x0e\xea\x21\x3a\x09\x7a\xa7\xf5\x69\xd3\xa0\xca\x83\x03\x7d\xea\xd0\x70\xb0\x4f\x79\x46\xec\x9e\xe8\xd3\x1d\xf6\x49\x27\x91\x14\xc4\x79\xf4\xf0\x80\xb1\x58\xf1\x62\x02\x65\x8a\x4a\xb7\x0d\x7a\x64\x91\x39\x2d\xfe\x9d\xdd\x09\x8d\x35\x1f\x7b\x14\x90\x97\xe5\xa3\x23\x47\x69\x24\xe0\x52\x0e\x0d\x1c\x07\xe6\xac\x63\xa6\xb6\xaf\x76\x80\x11\x01\xdf\x99\x9a\x98\x67\x49\x72\x22\x20\x31\xb3\xdc\x5c\xb8\xfa\x46\x5a\x7a\x86\x27\xdf\x1f\x9a\x06\x39\x51\x3c\x73\xfe\xde\x07\xac\x09\xa3\x5d\xf0\x02\xf5\x00\x3e\x40\xfb\xfa\x4e\xa3\xd0\x89\x1c\xc0\xd2\xfc\x3f\xf9\x68\xbe\x4e\xdb\xd6\x27\x6d\x5b\xbf\xd2\x2c\x43\x43\xfb\xa9\xa6\x03\x80\x94\x8e\xaf\xe9\x48\xe8\x17\xb7\x68\x5a\xfa\x1e\x69\x16\xfb\x15\xfc\xdd\xd7\xbd\xf3\xc6\x13\x8f\xd1\xff\xa7\xb6\x1e\xdc\xd6\xd3\x0e\x4a\x2a\x09\x64\xcd\x63\x51\xaf\x12\x22\x79\xe2\xc2\x44\x5b\x1e\xca\x09\xc6\x5f\x79\xef\x97\x84\x38\x78\xbc\x4a\x85\x58\x73\x9c\xda\x45\x9f\x38\xf2\x41\x18\xe3\x8e\xfe\x3f\xc5\xfb\x7d\x8f\xf9\x08\x0d\x9a\x8f\x27\x9b\x74\x8c\x8b\x39\xb4\xa5\x68\x0f\x0d\xae\x9f\x49\x39\x1f\x19\x3a\xa3\x0a\xe9\x13\xb5\x65\x97\xc4\xdd\x08\x1e\x92\xb4\x88\xa1\x3f\x48\xd6\x3c\x59\x63\x17\x8b\xad\xb1\xd8\x0a\xc8\x91\xa7\xea\x0f\x87\x8d\x5a\x0d\x0b\x2e\x88\xf8\xf0\x99\xf4\x16\x2c\x74\x3d\xf9\x7d\x48\x6e\x68\xab\x5c\x9b\xed\xd9\xbd\xab\x49\xe9\x4a\x9f\xe4\x70\xd6\x75\xe8\x31\xc4\xd3\x49\x23\x5f\x0a\xcf\x68\xb3\x08\xea\x91\xee\x4a\x95\x76\x29\x99\xf9\xed\xa7\x01\x26\x96\x11\x4f\xa5\x7f\xa3\xec\xe1\x21\x3b\x2b\xbc\xc8\x85\x8d\xb4\xee\xd5\x8b\xcd\xd1\x94\x55\x04\xd1\x02\x78\xbe\x76\x86\xc1\x53\xe0\xf9\xed\xce\x78\x94\xa7\xd3\x7c\xc8\x2d\x31\x62\xa5\xe5\xe0\x68\x3a\x0e\xa3\x5d\xfb\x99\xb2\xdf\x62\xf2\xb2\x6a\xa0\x59\x2e\xbb\x22\xdf\xda\xfb\xc4\x7f\xd1\x8a\x1f\xdf\xfa\xe1\x0f\x74\xe9\xfa\x48\xbd\xa9\x81\x06\x6c\x30\xa5\x2a\x77\xd5\xf5\x95\x4e\x18\xe6\x16\x93\x28\x6e\xb6\x46\xe1\x99\x37\xf2\x1a\x0d\x33\x6d\xf0\x12\x3c\x35\x2b\x49\x9a\x6d\x11\xf7\xee\x5e\x46\x7d\x0f\xf8\xfd\x3c\x88\xa2\xd8\xde\x30\x0c\x8e\x60\x6f\xe8\x3e\x9e\xf2\xb4\x84\x25\x76\x85\xe6\xe3\x8f\x3e\xfa\x58\xed\x60\x84\x5c\xfc\xbb\xca\x90\xd8\x11\x15\x6e\xa0\xc2\xc4\x06\x74\x06\xff\xd6\xf0\x2f\x26\xdb\xd1\x8e\x5e\x6b\x54\xa5\x4c\xf9\x93\x6f\xec\xb4\x0b\xf4\x14\xf4\xdf\x81\xb3\x82\x5a\x81\x05\x66\x01\x35\xc4\x10\x7d\xa2\xe0\x81\x5a\x3b\xa7\x0b\x3a\x72\x9f\x9c\x1a\xb5\x96\xe5\xd5\x4c\x76\x97\x0f\x69\x1f\x7e\xcd\x22\x0a\x44\x13\xad\x6e\x69\xc8\x87\xb2\x51\x25\x94\x4f\xeb\xfd\x3a\xba\xad\xe8\xfd\xf7\x15\xbd\x67\x1d\x01\x1e\xb3\x80\x3a\xad\xd6\x8a\xe2\x7a\xed\x30\x6c\x58\x5c\x51\x88\x3e\x75\x5a\x03\xbd\xb0\x70\xe4\x5e\x65\x40\xff\x0b\xcc\xc7\x94\xdd\x03\xde\xa3\x4b\x82\x1a\x73\xec\xc9\x64\x3a\xdd\xea\xa5\x5d\x58\xa6\x8b\x28\xde\x74\xac\xc7\x3a\x20\xdb\xc0\x18\xa3\x74\x4b\x7a\x15\x54\xd5\xd1\xfd\xaa\x3a\x2e\x0f\xd4\x71\xf5\x35\x95\xdc\x1e\xa8\xa4\xca\x8b\xf2\xc1\x4a\x2e\x02\xb9\x6e\xae\xe0\x18\xee\x5a\xc3\x6e\x77\x08\x33\x34\x3c\xee\xf7\xe1\x85\x75\x4f\xbb\xfd\xc1\xc9\x09\xeb\xf4\xad\x5e\xff\xb8\x7b\xc2\x4e\x8f\xbb\xf0\x3e\x60\xa7\x9d\xd3\xe3\x4e\x0f\xd6\x5d\xff\xd4\x3a\xee\xf5\x2c\x76\xd2\x1b\x0c\x8e\x3b\x90\xd0\xed\x0d\x4f\x3b\x27\x43\xd6\x19\x0c\x86\x9d\xe3\xc1\x94\xae\xbc\xce\x81\xaa\xbe\xd4\x1b\xe8\xf4\x07\xfd\x7e\x5f\x6b\x09\x1e\x06\xa7\xc3\xe3\x6e\xd1\xa4\x65\x41\x35\xa7\x5a\xdb\x98\xc5\x3a\xee\x77\xf3\x4e\x74\xba\xa7\x83\xc1\xc9\xb0\x53\xf4\xa6\x0b\xc9\x1d\xac\x56\x75\xab\x33\xec\xf6\xfa\x9d\xd3\x7e\xd1\xbf\x9e\x75\xda\x3d\xb1\x8e\xb5\x8e\x42\x3f\x4e\x06\x27\xa7\xaa\xc7\xd0\x72\xbf\x63\x41\x13\x45\xd7\x6f\xa1\xeb\x3d\x6c\xfc\xf8\x98\x0d\x7a\xa7\x90\xed\x94\x1d\x5b\x7d\xeb\x18\x7e\x3b\x56\x77\xd8\xef\x42\x3d\xc3\x41\xe7\xd4\x3a\x3d\x66\xa7\xdd\xce\x70\x00\x2d\x76\x3a\xa7\x9d\x41\xa7\x03\xf5\x41\xd3\xc3\x61\x6f\x08\x5f\xac\xee\xe9\x69\x0f\x9a\xee\x77\x87\x27\x16\xb6\x08\x1d\x80\x0e\xe3\x03\x94\xed\x75\xd9\xc9\x70\x38\xec\x0c\xe1\x0b\x14\x1a\xc2\x20\x70\xf4\xfd\xd3\x61\xbf\x87\x59\x8e\x8f\x7b\x00\x20\xe8\xfc\xf1\xf0\x04\x12\xac\x93\x5e\xbf\xd7\xed\x63\xfd\xdd\x93\x01\x56\x07\x80\x3b\x1d\x0e\xfa\x45\xc7\x2f\xb0\xe3\xdd\x7e\x1f\x60\x01\x1d\x46\x00\x58\x38\x3c\x6b\x38\xec\x62\xbf\x2c\xf8\x86\x60\x83\xc2\x03\x6b\x00\x55\x62\xe3\xc7\xc3\x3e\x3e\x74\x07\xdd\xc1\x29\x3e\xf4\xfa\x30\x11\xac\xd7\x1d\xf4\xac\xe3\x21\x3b\x1e\x0e\xba\xfd\x63\xac\x65\x68\x1d\x5b\x16\x94\xe9\x75\x2c\xa8\xa0\x0f\x5f\x4e\xa1\x1f\x88\x8a\x7a\xa7\x50\x6b\x57\x40\x18\x7b\xdc\xe9\xf7\x00\x42\xa7\x1d\x04\x51\x0f\xa0\xc8\x4e\x4f\x86\x27\xd0\x22\x02\xa2\xd7\x3f\x01\xa0\x76\xfa\xdd\xe3\x63\xeb\xa4\x93\xf7\xbc\xc0\x2e\x40\x00\x86\xa9\x5f\x69\x2c\x1f\x46\xb8\xc7\x27\x25\x74\x22\xb2\x7f\xae\x0c\xbe\x10\x19\x56\x15\x06\x4a\x97\xb1\x97\x2c\xa3\x60\x56\xa5\xd0\x0e\x4d\xb4\x06\xd3\xfd\x42\xfe\x0c\xb0\x51\xc9\x12\xa8\xd0\xd5\x8d\x0c\x3d\xfb\xcd\x42\xda\xfe\xc3\x13\x90\xf4\x87\x03\x56\x88\x93\x38\xe7\xac\x2c\xd6\xf0\x0e\x85\x62\x0c\x4a\xd9\x0e\xe8\x44\xa2\x00\x22\xaa\xfe\xd4\x7c\xef\x90\xb1\xe3\xc1\x8f\x52\x2d\x92\xb4\x21\x51\x46\xbb\xe0\xc9\xd9\x7c\x6c\xd9\x1d\x72\x27\x75\x16\xd0\x1d\x0b\x86\x81\x01\x0a\x92\xaf\x81\xf2\x3f\xe3\x1f\x1c\x33\x3f\xb6\x03\xb6\x30\x1b\x06\x79\xe7\x63\x9d\xe6\xc2\xb4\x6b\x35\xb3\x51\xfb\xab\x26\x54\xdc\x0a\x57\x55\x68\xa0\xc9\x2e\xd9\x2d\xbb\x60\xd7\xec\x35\x9c\xda\x2f\xe0\xdf\x5b\x64\xb9\xd1\xb6\x71\xc5\x8d\x86\x5b\xdd\x47\x54\x50\x6e\x77\x4d\x72\xf3\xe4\x03\x49\x7b\x1d\x14\x57\x99\x46\x58\x0f\x1b\x41\x3d\x30\xed\xc6\x01\x6d\x4d\x86\x52\x8c\x17\x75\xe0\x44\x01\x94\x28\xd6\xe6\x69\x6a\xcc\xda\x41\x3d\x0f\x6a\xb0\x42\x57\xa8\xa8\x56\xfd\x5a\x7c\x0a\xcb\x9f\xf0\xaa\xea\x1e\x18\xa5\x7a\x1e\xb6\x2a\x69\xbc\x30\xd9\x39\xd7\xaa\xa0\x94\x3b\x3d\xcf\xbc\x09\x29\x57\x7a\x1e\x4c\x21\x98\xbc\x2c\xc1\x1b\x88\xb7\x17\xe6\x73\xfe\xc9\x51\x10\x7f\x71\x74\x94\x44\x86\x04\x98\x89\x12\xa1\xff\xbc\x14\x0b\xe6\x33\x10\xff\x0d\x94\x74\x8e\x4a\xdd\xf9\xbc\xd3\x99\xcf\xd8\x95\x2b\xa2\xae\xa5\x73\x4f\x60\x3c\x85\x1a\x00\x1c\xf1\x97\x3c\xd4\x7b\xf9\x1a\x30\x1e\x0f\xf5\x5e\x42\xca\x85\x9e\x27\x69\x40\xca\xb5\x9e\x07\x53\x68\x24\x9f\x8a\x91\x24\xcd\x79\xa3\x5b\x7f\x5d\x1a\xc9\x6b\x1a\x89\x9c\x72\x1c\x09\x2c\x8f\xff\x7c\x12\x63\x79\x93\x8f\xa5\xd4\xa1\x37\x3b\xdd\x79\x83\x9d\xb9\xd6\xc7\x72\xc9\x6f\xc5\x58\x94\xf9\x6d\x49\x9d\x37\x00\x7a\xa5\xdd\x65\x8d\x43\xe1\x54\xcc\xb3\x16\x9c\x35\xd0\x05\x1e\x9c\x85\xff\x59\x50\x4f\xb1\x3b\x1f\x24\x77\x75\x31\x9e\x40\x7f\xa7\xd2\xb7\xd2\xdd\x78\x02\xf3\x30\xb5\xdf\xc4\x06\x3d\xb0\x09\x0c\x04\xfe\xc2\xc4\xc0\x5f\xcc\x68\xb2\xf7\x7c\xd3\xfc\x80\xec\xf4\x2b\x7e\x0e\x0f\x40\x0f\xbe\xe3\x77\x22\xe5\x57\x7e\x25\x52\xfe\xe6\x9d\x22\x86\x46\x11\x65\xc3\x78\x5f\x7f\xd7\x78\x55\xff\xd5\x6c\x6b\x41\xcf\xde\xd7\xdf\x43\xda\x2b\x53\xa3\xef\xdf\x41\xb6\x5f\x21\x1b\xde\x94\x9b\xec\x3b\xcd\xea\x18\x9b\xa9\xe3\x9f\x06\xb6\x53\xff\x40\x4a\x8b\xb9\x03\x97\x3b\x01\xea\x1f\x0a\x38\xad\x19\x40\xe8\x3b\x68\xef\xef\x46\x07\x16\xf6\xcf\x7c\x1e\x19\xe5\x81\xcb\x11\xd2\x68\x03\xf6\x03\x7a\x35\xfb\x11\x73\x69\x63\x96\xe9\xa3\x35\xcc\xe8\x0f\xe3\xb7\x42\x00\x56\x3b\xaf\xb1\x9f\x71\xd0\xb5\x17\x35\xf8\x5c\x63\xf4\xf7\x1b\xeb\x1b\x0b\x9e\x6e\xe0\x09\x3f\x77\xc4\xe7\x80\x3e\x07\xf4\xb9\x86\x38\xe3\x3f\xb0\x4c\x7e\x96\xce\xb5\x7e\x96\xe1\x9e\x7e\x94\xef\x3f\x2a\x4f\x5b\x58\x66\x41\x15\xfd\xa8\x2a\xaa\x6e\xe7\x47\xbc\x99\xb3\xbf\xd4\xaf\x4e\x39\xbf\x58\x5c\x5a\xa1\x0d\xe5\x3d\xd7\xc0\x79\x21\xc0\xf9\x67\x09\x9c\xa1\x00\x67\x13\xc1\xf9\x17\x01\x4a\x5b\x28\x21\x6b\xfe\x89\x10\xfc\x8d\x3e\x10\xec\xca\x0b\x4b\x40\x55\x66\x23\x80\xfe\x99\x03\xf4\x4d\x8d\xfd\xa6\x3a\xfe\x27\x75\xe6\xcf\x9d\x81\xfe\xa6\xe0\x10\xd2\xe7\x50\x02\x94\xc0\xf9\x9b\x04\xdf\x6f\x12\x9c\x7f\xc9\xf7\xbf\x74\x70\x02\xe8\xa9\xa2\xbf\x54\x45\xd5\xed\xfc\x55\x02\xe8\x97\xfb\xf5\xd7\x3e\x40\xa1\xd0\x25\xe5\xbd\x3d\x0c\x69\x29\x32\xbd\x3b\x3a\x52\x1f\xf7\xd6\xca\x4b\x6d\x15\xdc\xd1\xf3\x95\xc9\x2a\xda\x90\x55\x5d\x94\xaa\x2a\x43\xe9\x53\x09\x02\x17\xf4\x76\x9d\x73\x8b\xaa\xd8\x5f\x35\xac\xff\xef\x08\x26\x1b\x8e\xb5\xd2\xb5\x7e\xa1\xef\x59\x3b\x87\xb1\x37\xc2\x06\x34\x82\x7f\xc5\xb3\x58\x62\x8d\x14\x9f\xe0\xb7\xf9\xf8\x67\x19\x20\x99\xfb\x11\x5e\xcb\x46\xe8\xde\x38\x62\x3e\x1c\x75\xe8\x65\x18\x65\x6b\x6e\x84\x4e\xf6\xa2\xe2\x2a\xc8\x0f\x43\x2f\xfe\x9a\xf8\xb9\x5e\xa1\x15\xe5\x49\xad\xda\xaf\xab\x60\x57\xad\xca\x8d\xe2\xaf\xec\x42\xc6\xcb\xfa\x52\x6b\x67\xf6\x35\xc5\x7d\x9e\xd2\xe9\x7f\x1d\x14\x7a\x57\xfe\x7f\xa3\xfd\x1f\x15\xfd\x88\xbe\xde\x02\xc0\x29\x4a\x3b\x5f\x6f\x05\xe0\x16\xa5\x0f\x44\xb0\x56\xd4\xa1\x71\x88\x26\x6c\x7c\x73\x90\x0c\x44\xcd\x27\x28\x78\x80\x14\x84\x82\x87\x22\x7e\xb7\xbb\x40\x0a\xca\xd5\x35\xc9\x8f\xe3\xd4\xac\x87\x4c\x8b\xfe\x44\x91\x27\xa4\x6e\xf5\x75\xc0\x6b\x4e\x96\x46\xb5\x91\xa4\x77\xab\x43\x30\x7e\xb3\x04\x62\x46\xf2\x9d\xaf\xf7\xdc\xdc\x2d\x22\x56\x13\x8f\x4d\x37\x88\x12\x6f\x56\xb3\xd7\x11\xc3\x18\x7d\xf6\x0d\x7c\xc2\x87\xe6\x95\x37\x8f\x62\xaf\x66\xaf\x54\x82\x33\x87\x95\x5b\xb3\x37\x11\xbb\x72\x12\x3f\xb1\x2f\xe0\x03\x3d\x35\xa3\xb5\x17\xd6\xec\xeb\xfc\x5d\xd5\xf9\x1a\xb2\x92\x1b\x2e\xfb\x05\xec\x23\x47\xf0\xc5\xf6\x15\xe4\x53\x2f\xb2\xe8\xb9\x9e\xa4\x4a\xdf\x45\x6c\x15\x85\x51\x1a\x85\x9e\xfd\x21\xda\x9a\xa3\xd7\xc1\x01\x2f\x54\x69\xeb\xda\xdb\x50\xdc\x03\x51\x96\xb7\x65\x25\xff\x90\x0e\x07\xf3\xab\xec\x17\x01\x46\xa0\xed\xb6\x81\xa9\x82\x7f\x80\x4e\xdf\x52\x02\xbe\x74\x45\xc2\x4b\x99\x30\x94\xb9\x86\x53\x1d\xd0\xa4\x4b\x56\x96\x86\x88\x55\x03\xe0\x7e\x1f\x15\xa2\x42\xa5\x73\x86\xbe\x6d\xa4\xb5\x66\x48\xbe\x61\x44\xd0\x5a\xf4\x73\x93\x27\x6f\x50\x0b\x71\x15\x29\x8d\x70\x0e\x00\xde\x14\x6f\x00\xfe\x9c\xb1\xa9\x0c\x35\xf6\x8a\x26\x5a\xcf\x74\xb0\x93\xaf\x9e\xd8\x49\x1d\xc9\x41\x8a\xa5\x7d\xb5\x76\x50\x18\x24\x75\xb4\xcf\x9d\x83\x43\xd4\xb1\x05\x24\x68\x75\x6e\x2c\x1d\x17\xc0\xbb\x56\x21\x3c\x87\xf9\xd8\x1e\xf3\xb1\x16\x16\x2e\xde\x53\xb1\xcb\x7c\x16\x92\x97\x62\xf5\x1e\xd1\xfb\x48\x9d\x1d\x35\xe0\x7b\xd6\x56\x23\x36\xdc\x56\xcc\xe0\xb1\x83\x37\x89\x9d\x26\xfc\xb1\x80\xaf\xf2\x0c\x17\xf8\x8f\x71\xa6\x7f\xa5\x07\x0b\x70\x68\x91\x18\xc0\x43\x80\x89\x50\x8f\x7c\xc6\x44\xa8\x27\xa0\x7a\xb2\x22\x35\x2f\x4f\x5c\xda\xce\x91\xa6\xdd\xde\xf1\x92\xc9\x10\xfa\xbd\x57\xef\x19\xa3\x98\x4f\xae\xfe\x8e\x8c\x24\xda\x14\x95\x93\xe4\x20\xef\x63\xdb\x67\x8e\x65\xc3\x41\xd6\xb1\x13\xb6\xb6\xec\x89\x5f\xd0\xfc\x11\x54\x5e\x50\xfc\x91\x39\x65\xeb\x4e\x29\x43\x52\xca\x40\x21\x19\x75\xcd\x32\xcd\xf0\x02\xe6\xdc\xe2\xd0\x71\xc7\xa2\x28\x2c\x1d\x7a\xee\xec\xdc\x9f\x16\xf6\x4c\xbb\x27\x72\x0d\x10\xa4\xe1\x9d\x7d\x72\x00\x34\xac\x03\xaf\x69\xe5\xe5\xa6\x2c\xfc\x0b\x9c\xdc\x58\x46\xb8\x88\xf0\x31\x38\x64\xc4\x37\x31\x1c\xd6\xef\xf0\xb0\x86\x63\x3b\x80\x63\x7b\x6f\x91\xff\x57\x67\xcc\x6e\x08\xc8\xc7\x8f\xc9\xf2\xe9\xf8\x35\x81\x1e\x77\x4f\xc6\xaf\x3d\x59\x77\x4f\xb7\xaf\x3b\x59\x83\xa2\x74\xb0\xd5\xf6\x1b\x20\x91\x45\xb4\x23\xfb\xad\xd2\x4b\xf5\x77\xb4\x94\x50\x01\x6e\x47\x4d\x3a\xc3\x2b\x7f\xc3\x6f\x6d\xe0\x8c\xdc\xe0\x71\xe9\xf2\x89\xcf\xee\xef\x6c\x1f\x10\xce\x06\x81\x7d\x8f\x57\xf4\xf2\x39\xca\xaf\x50\x5d\x2e\xe2\x31\xc0\xca\xa7\x2d\x8b\x3c\x57\xed\xff\x4f\xdb\xd5\x38\xb5\xad\x2b\xfb\x7f\xa5\x78\x2e\x8c\xdd\x38\x21\x90\x53\x7a\x6f\xa8\xc9\xf4\xd0\x76\xe8\xb9\xd0\xf6\x95\x94\x7e\x30\x39\x8c\x49\x1c\xe2\xd6\xb1\x53\x7f\x00\x29\xe1\x7f\x7f\xfb\x5b\x49\xb6\xec\x38\x9c\xd0\x79\x6f\xce\x29\xb1\xbe\x77\xa5\xd5\x6a\x25\xad\x76\x0f\xf1\xb1\x43\x1f\x4f\xf0\xb1\xab\x3e\x3a\x03\xa9\xf6\x33\xc5\x03\xc9\x39\xb4\xe0\x3f\x45\xfa\x0b\xf5\xf5\xdd\x79\xa6\xd2\xd3\x9a\x52\xf4\x7d\xcc\x58\x56\x05\x3e\xcd\x91\xfe\x9a\xf2\x5e\xfe\x46\x72\x69\x24\x56\x72\xf6\x4a\x3e\x13\xae\x3e\x3e\x45\x42\xd5\x33\x6f\xbf\xe8\x8b\x3a\x98\x1e\xb8\xc4\xf3\xcc\xef\x11\x34\xa3\x2d\x4d\x67\x1e\xcd\x25\xf3\xe9\x65\xb4\x9a\x3c\xf2\x39\x6b\xfe\x92\xcf\xd8\x4a\x34\x11\x5b\xd6\x62\xf1\x3e\xb2\x4c\xaf\x1a\x2d\xc7\xf1\x08\x08\xbc\xd1\x86\x90\x7d\x21\xfd\xd6\x00\xae\xaf\x85\x55\x19\x3e\x21\x41\xfd\x2a\x24\x28\x69\xab\xf7\x3d\xf1\x9a\x38\x4a\xea\xae\xe0\xb4\x53\xb2\xed\x67\x85\x46\x1c\xe8\xb7\xd9\x79\x9a\x32\xe3\x6b\xd2\xcf\x91\xf8\x39\x53\xd1\x47\xbc\x2f\x39\xcb\x13\x39\xf2\x8c\x23\xf3\x24\x95\xb1\xa9\x27\x89\xe2\xb4\xa8\xd8\x34\xfe\x24\x32\xd5\x3c\x12\x2a\x01\x65\xee\x3e\x3d\x0e\xd8\x0f\x51\x4a\x1f\xfb\xfa\x6e\x0a\xf5\x1e\x1b\x0d\x8f\x80\xe4\xad\x25\xef\x94\x28\x9a\x23\xd0\x02\x6b\x0b\xd4\xbc\xeb\xd2\x1b\xa8\xe0\x5c\x60\x7c\xcc\xf5\xc9\xc0\x13\x15\x90\x4d\xe4\x01\x34\x63\x28\xe7\x0a\xcd\x51\x74\x13\xd6\xbc\x1c\x2c\x21\xf4\x33\x10\xc8\xfc\x0c\xb4\x96\x01\xbd\xa7\xb7\xe9\xe9\xed\x20\x54\x6e\x28\x9b\xfd\x76\x33\x4d\xbd\x9d\x52\x33\xa2\x15\xf1\xb2\xa9\x98\x31\x7d\xa2\xe3\xc4\xa1\x49\x41\x62\x6b\x62\xca\x43\xbd\x40\x6b\xab\x63\xd9\xc7\x32\x0c\x17\x9b\x9d\x36\x7c\xec\xee\x5f\x48\xdb\xc1\xfe\xd2\xc4\x2d\x79\xa0\x73\xfa\xc1\x62\xd1\x68\x7c\x0a\x68\x3b\xfb\x25\x82\x67\x1c\xb6\xb7\x13\x39\x1f\x29\xfe\x0e\x96\xa7\xba\xaf\xdc\xd4\x6b\x85\xb8\xf6\xb3\x61\xdb\xb9\x7b\x9a\x41\xe4\x72\xe7\x30\xbb\x9b\x09\x4d\xc7\xee\xee\xb3\xf6\xbd\xb0\xe8\x34\xd4\xdd\xd7\xb1\x51\xa7\xe1\xbe\x75\xe7\x4b\x03\xb3\x54\xb7\x50\x8a\x93\x26\x15\xe1\xa3\xce\x85\xaa\x09\x95\x1c\xe7\x4f\xaa\xa8\x58\xf2\x62\xcc\xfa\x50\xc1\x79\x32\xb0\xb6\xb6\xfe\x15\x99\x1e\xbb\x93\x60\x4b\x77\xa9\x7a\x65\xa9\x74\x91\xbf\x46\xec\xe8\x1a\xe6\x10\x2e\xa4\xf1\xdf\x38\x9b\xd5\x5a\x98\x17\x8e\xd3\xb0\x2d\x50\xb6\xdc\x5f\x05\xdd\xb7\x91\xc9\xc8\x5b\x72\x13\xd4\x0f\xec\x8f\x81\xfd\x2a\x70\x44\x02\x91\xff\x07\x7e\x1b\xfa\x09\x9a\xb4\x1f\x84\x04\xe5\x5c\x08\x61\x8b\x92\x5a\xde\x74\x96\xce\x11\xc1\x1f\x88\x81\x0a\x26\x22\xf0\x8b\x30\xf3\x94\x0b\x61\x84\x2e\x37\x13\x5d\x1d\x1b\x5d\x4a\x82\x70\x54\x64\xea\xf5\x83\x9e\x1e\x66\x07\xe7\x5d\xd0\x09\x09\xbf\x92\x9f\xea\xc9\xd2\xc9\x48\x11\xa3\xf9\x87\xfb\xc0\x20\x8b\x82\xce\xaa\x17\x82\xdc\x4d\xfe\x08\x2f\x1a\xf0\x15\xba\x53\x2f\x99\xb9\x43\x8f\xdf\x8a\xee\x87\xce\x3b\x28\x0a\xa8\x81\x7c\x60\xe0\xa3\xdf\x1b\xf8\x58\x0d\xbc\x99\xeb\xfa\xc4\xd0\xf8\xbf\x80\x7d\x84\x8b\x0b\x22\x05\xd7\xb2\x7a\xa6\xa1\x22\x0c\x5f\xd8\x64\xf1\xf2\x2c\x4e\x91\xdb\xb2\x25\xf9\x30\x8d\x9c\xfb\x03\xe8\x9d\x16\x44\x44\x5c\x5f\x3e\x95\x83\x6a\xaf\x46\x52\x70\xac\x93\xc1\xf0\xb5\xea\xad\x97\x15\x77\xac\x95\x47\xaa\x79\xa7\xb9\xd5\x4e\x1b\x8a\x4e\x3b\xd4\x3b\x0d\x06\x52\xa4\x57\xc7\x02\xfb\xe0\x45\x52\xbc\x27\x19\x4b\x97\x8f\x03\xb6\x7a\xac\xbd\x33\x64\xa3\xc1\x57\x6c\x96\x28\x76\xc6\xe7\x93\x01\x4d\x30\x27\x86\xb1\xb4\x68\x60\xd7\x77\xd8\x84\x76\x28\xf6\xb0\x6e\x30\x66\xa8\xfb\x3a\xb7\x9e\x82\x47\xfb\x2f\xae\x69\x08\x32\xc7\x3b\x9f\xc9\xb9\x97\xd9\x33\x1b\xfe\xe6\xfd\xbc\xdb\x32\xbd\xa3\x86\x48\x14\x1d\x25\xfc\x39\xad\x24\x2b\xea\x86\x42\x27\x6a\x23\x57\x88\x62\xad\x9c\xf7\x98\x80\x39\x58\xc2\xb5\xa7\xde\x3b\xd1\x81\xbf\xef\x37\x1a\xd6\x5d\x56\x87\x86\xf0\x49\xca\x8f\x25\xf9\x21\x73\x8e\x0f\xec\xdc\xb9\x54\x0c\x0e\xea\xa8\x8b\xd8\x51\xe5\x72\xff\xb8\x36\xde\x42\xa4\xf9\xe3\xe5\x02\xb9\xcc\xae\x0c\xa6\x1c\x65\x81\x6f\x7a\xe3\x79\xd5\x29\x5c\x80\x03\x62\x88\x2b\xc4\xb0\xbf\x42\x9a\x78\xb1\x2b\x1c\x3c\x82\x63\x98\x96\x78\x29\x2c\xaa\x67\x71\x88\x44\x8c\xaf\x52\xea\x91\x6f\x05\x75\x09\x25\x2d\xe5\x17\x0e\x02\xc1\x04\x8a\x45\x8a\xc4\xef\xac\x94\x29\xf1\xc4\x01\xe9\xbd\x40\xc4\x4d\xd3\xb8\x82\x87\xb6\x81\xa3\x16\xd8\x5e\x3b\x57\x5c\x18\x9b\x77\x4b\xaf\x6b\xea\x33\xbd\x3b\x85\x73\x60\xee\x39\xb7\x15\x44\xd4\xf5\x56\x69\xc7\x56\xb0\x3c\xc9\x8f\xbd\xae\x19\x36\x1c\xc3\xa8\xea\x68\xa5\xca\xef\xec\x95\x6e\xef\xde\x2d\xde\x35\xc1\x58\x30\xab\x7a\x61\xb6\x87\x56\xe9\xb5\x83\x30\x22\x5f\x2a\x68\xa7\xec\xb5\x00\xff\x95\x5f\xb2\x54\xe0\x89\x1f\x03\x4f\x0d\xb6\xbf\x07\xdf\x72\x45\x1a\xbc\x78\xf0\xb9\x44\x3e\xf2\x8d\xf6\x13\x62\x85\xa1\x25\xdc\xdc\x52\x65\x50\x62\x84\xdd\x99\x7d\x6d\xfd\x93\x0f\x72\x34\x57\x01\xc0\xf3\x28\xeb\x4e\x33\xa1\x22\x1a\x26\xb8\xb8\x0f\xfc\xf1\x5c\xd3\x07\xfb\x16\x09\xfa\x33\x50\x6d\x8b\xf6\xe3\xb4\xd7\x96\xa0\xf5\xfc\x6e\x56\x90\x51\xbf\x66\x4e\x94\x0e\x03\x3c\x4d\x03\x5c\x13\xe6\xe5\xd4\x2a\x0d\x6f\xa6\xe9\x3b\x6f\x6d\x3d\x3c\xa2\xc4\xdc\x85\x1f\x8a\xd2\x59\xc2\xfa\x8d\x51\x97\x67\xb2\xcb\x33\x39\x76\x6b\x37\xbe\x5c\x56\x01\x23\x0f\x6a\x56\x74\xaa\x70\x90\x80\x0e\x33\x8b\x7e\x95\x35\x10\xe5\x79\x72\xf9\x49\xe7\x41\xc9\x49\x98\x70\x47\x57\xcc\x22\x05\x11\xf2\xc9\x09\xf8\x21\x8e\x66\x5e\x9c\xa2\x31\x9d\xbe\xbd\x0a\x7d\x7b\xbd\xac\x6b\x7a\x75\xf4\xcd\xcf\x19\x85\xf7\x61\x74\xd3\x61\x34\x9d\x11\xa2\xa3\x53\xb4\x51\x70\x22\x4e\x53\x6d\x9d\x89\x27\x32\x39\x76\xfe\x06\x3b\x61\xa1\xb5\x64\x0a\x65\x4e\xcf\x2a\x19\x41\xd3\x40\x4e\x8a\x3a\x70\x54\xc0\x86\xe6\x04\xa9\x0b\x52\x5d\x52\xee\xa4\x19\xd0\x39\x88\xf8\x5d\x9e\x72\x28\x53\x2c\x27\xd6\xdd\xee\x41\xc4\xb2\x83\x61\x88\x15\x22\xd6\x66\x05\xb7\x48\xdc\x9f\xbd\xe4\x79\xe5\x89\x11\x53\x89\xfb\x2a\xbd\x0b\x10\x31\x30\x1e\x3b\xee\x51\x03\xb2\x44\xe7\xd5\x51\xc9\xea\x1f\x82\x43\x58\xf8\xcd\x8e\xcd\xa1\x8d\x34\x7a\x7c\xa8\x2b\x23\xd9\x95\xf7\xab\x56\x9d\x0e\x4c\x7a\xa2\x9f\x6c\x9d\x14\x0b\x94\xe5\xbc\x4e\xbd\xdb\x5a\x71\x3a\xef\x24\x64\xc0\xcd\xdd\x99\x14\x04\x04\x11\xd6\x1c\x3e\xd4\x2e\x86\x85\x54\x0e\x5b\xe2\x9a\xdc\xba\xcc\x75\xd9\x17\xee\x79\x38\x68\x0d\xa3\x2c\x4c\x5f\xec\x32\x47\xe5\xf2\xe2\x0d\xe6\x3b\x5a\x3f\x79\x29\x17\x10\x1c\xe2\x89\x89\xe8\x6c\xb9\xd2\xad\x70\x50\xa3\xd6\x6b\x6f\xdd\xf5\x7a\xa7\xb4\x5e\x7b\x03\xe2\xb2\x5c\x77\xd7\x5c\x29\xe2\x48\xf7\x38\x75\xda\xbc\x96\x2d\x97\xf7\x1c\x32\x9c\x88\x68\xd5\xc2\x1a\xb0\x40\x80\x77\x5f\xff\x5f\x18\x88\xad\x9d\x84\xa5\xd6\x9a\x73\x01\xa0\xcd\x04\x1e\xeb\x25\x9d\x46\x9d\x74\x85\x7c\xf7\x5d\x61\x04\xb9\x0e\x3f\x51\xb4\x40\x30\xab\x3e\xa0\xfb\x3f\xc6\x51\x6d\x5b\x7f\x0b\x4d\x05\x5c\xae\xf2\x85\x7b\x8c\x7a\x9c\x05\xd2\x7a\x46\xab\x1e\x7f\x55\x67\xde\x05\x98\x0b\x8f\x13\x2b\x57\xc8\x04\x62\xf9\xa1\xdd\xac\x4f\x5b\xfd\xfd\x34\x9e\xdf\xf5\x03\xc7\x5b\x22\xb6\x54\x20\xf9\x91\xb6\x66\x42\x4a\x54\x38\xe1\x81\x45\x79\x1c\x69\x39\xc1\xd5\x5b\x30\x47\xee\xcc\xa6\xea\x7c\xa9\xf7\x53\xad\x34\x3f\xf2\x95\x92\xe7\xbe\xe9\x0b\x4f\x07\x8b\x85\xfa\xaa\xf7\x68\xc0\xfe\x04\x8c\x7c\x1f\x6f\xd0\xc6\xbc\x25\xbb\xe1\xbe\xcc\xb0\x99\x37\xd5\xec\xa5\x4b\x9e\xe1\x97\xf6\xb4\x7c\xe0\x11\x55\x77\x69\x30\x7c\x23\xed\x40\xe9\xfb\x8e\xe0\x60\xb8\x3f\xc4\xbe\x43\x9a\x80\x0d\x4b\xfb\x8e\x34\x77\xb4\x9f\x50\xc9\x71\xe1\x77\x7e\x7c\x90\xec\x27\xd8\x77\xd0\x98\xc9\xbd\x2c\x76\x20\x11\x76\x9f\x6a\x43\x8a\x1d\xa6\x38\x64\x89\xd9\xca\xb7\x38\x60\x89\x79\xbe\xcb\x43\x96\x58\x4c\x8e\x46\x9c\x13\x49\x71\xea\x52\xc4\xdd\x17\x5e\xf9\x4b\xa7\x22\x62\xd3\x56\x5c\xf8\xdd\xfa\xc9\xaa\x13\x58\xbc\x9f\xf5\x4a\xd7\xa5\xb9\x2b\x22\x27\x3f\x68\x30\x95\xa9\x1c\xe1\xf3\xf9\x02\xc6\xdc\xd3\x8b\x8b\xc5\x02\x9e\x6a\xcb\x71\x58\xf2\xa2\x19\x5e\x17\x4d\xa4\xe2\xd6\xb0\x37\x66\x1b\xe6\x89\xfa\x95\x7c\x70\xcc\x66\xf1\x95\x2a\xbd\xd5\x1d\xd2\x56\x37\xdf\xe4\x70\xce\x37\xac\x3e\x5f\x0a\xe8\x65\xe7\xdd\x14\x26\xbe\x8b\x5d\xba\x69\x70\x4e\xc3\x6a\x81\x70\xcd\x09\x8c\xda\x5d\x3b\xb3\x96\x07\x8a\x32\x61\xe8\x1b\x1e\xf2\x4d\xe3\x8a\xa8\x4c\xb6\x4b\x79\x59\x5c\x36\x86\x81\x9b\x24\xca\xab\x86\x25\xa5\x05\x23\x22\x0a\xf1\xd3\xb9\x61\x1f\xba\x96\xf0\xc4\xa4\x9d\xb6\x50\xc5\xb7\x7e\x6a\x5a\xb5\xb9\xd5\x6e\x0c\x86\xf2\xaa\xc5\xd8\xa0\x5c\x5d\xb9\x1d\xe8\x0b\xe6\x7c\x23\xb3\xdb\x56\x23\xb2\x6f\x9d\x4f\xbe\x39\x66\x95\xc5\x12\xaa\x39\x02\x8c\x2c\x14\x7b\xec\x0b\xc7\xbc\xcc\xb1\xa5\x9e\x82\xaf\x0e\x83\x26\xd9\x64\x09\x4d\x55\xb8\x7c\x5c\x64\x5e\x92\xa8\x71\x9d\x97\xc4\x6d\xb6\x01\xc3\x95\x2a\x82\x57\x7b\x71\x16\x29\x95\x45\xed\x97\xce\xb5\x22\x12\x95\xff\x9d\x33\xad\x46\x1d\xd2\x28\xa8\x28\x51\x09\x8b\x16\xe6\x95\x65\xff\xd2\x2a\x10\x49\xf6\x4f\xad\x02\x19\x75\x4c\xdb\x96\x68\xc6\xcf\xa6\x16\x0b\x23\xf0\xc6\xa9\x78\x42\x05\x1b\x9f\xe0\x81\xc6\x65\x94\xa6\xd1\x54\x65\x50\x79\xf1\xc4\xea\xcf\xc8\xbe\x71\x60\x07\xfd\x87\x03\x93\xe7\xa7\xf4\xbd\x6b\xd8\xaf\x29\x40\x3f\x87\xb2\x5f\x46\x94\xd2\x3e\x38\xee\x19\x6d\x6f\x6a\x74\x8d\xd6\xf3\x1d\xfa\xcd\x07\x08\x40\x34\xdd\x10\x97\xcb\xd4\x77\x53\x7f\x34\x0a\x80\xd5\x85\x2a\x6c\xf0\xcd\xd3\x2d\xdf\x3c\xd9\x46\xe3\xf8\xa9\xdf\x30\xce\xda\x47\x88\xc2\x1d\xd4\x19\x47\xf1\x4b\x7a\xe7\x33\x43\x33\x67\x68\x6e\x19\x9a\xb9\x80\xe6\xb6\x02\x8d\xd1\xea\xec\xae\x84\x81\x41\x05\xbb\x54\xce\x03\x96\x80\x61\x18\x6c\x05\xd4\x51\xfb\x4c\x01\x73\x24\x81\xb1\x5f\x8a\x02\xaf\xed\xe3\xa7\x19\x0d\x83\x08\xfd\xa0\xd0\x09\x14\xab\x38\x74\x4a\x14\x58\xca\xf5\x53\x84\x6e\xf2\x78\x99\x7f\x2c\xde\x31\xfc\xe9\x86\x23\xc1\x3e\xfa\xce\xd8\xfe\xe8\xf4\x8b\x68\x13\x27\xfe\xc4\x85\xea\xa4\xc9\x3e\x7d\x37\x3e\xca\xd5\x24\x29\xca\xf4\x28\x7f\x77\xa4\x2e\xae\x61\x3b\x80\x88\x33\xb7\x41\x39\x86\x03\xb3\x3c\x6d\xac\x76\x0d\xd2\x6e\x50\xe5\xc9\x4b\xec\x7c\xc7\x59\xf7\x1e\xad\x02\x7b\xb4\x04\x74\xc0\xf5\x77\xd8\x22\x53\xc5\xc6\x04\xbf\x41\x5a\xf3\x16\xa8\x78\xc1\x1f\xc5\x7e\xc9\xb5\xe9\x3f\x5c\xde\x61\x5b\xf2\x26\xe8\xa5\x0d\xc3\xe8\x7e\x0f\x72\xb5\x2d\xe6\x8e\x35\xea\x1b\x75\x97\xd0\x85\x6b\x43\x75\x11\x8d\xd2\x67\x15\x13\x97\x0f\x5f\x08\xa7\xf9\x65\x70\xc1\x60\x1f\x6f\x1e\x13\x65\x97\xcc\x0e\x3c\xfc\x38\xcf\x83\xc2\x59\x23\xc5\x92\x9c\x67\x61\xb3\x78\xb9\xfe\x19\xab\x97\xf4\xeb\x6a\x7e\x40\x85\xad\x51\xd8\x73\x62\xfd\x93\xc7\x95\xf7\x65\x79\x5f\x21\xf5\xe1\x31\xa6\x9b\x22\x59\x3a\xca\xbb\x24\xbb\x1c\xf9\xd7\xfe\xa8\xd6\xd6\x7f\xa5\xf8\xd6\x56\x98\xdf\x23\x7e\x0f\x1c\xc5\xcc\xec\x37\x81\x73\x47\xac\x0c\xaf\xd5\xe0\xf7\x01\x9e\x0f\x39\x85\x3e\xc0\x02\xd5\xeb\x35\x5a\xe2\x2f\x63\x12\x02\x56\xac\xf1\xac\xfd\x54\xb7\xc6\xa7\xd5\x15\x5e\xf1\x1a\xf6\x78\xe5\xc5\x4d\x96\xd5\xb0\x5c\xd0\x2c\x2b\x38\x51\xf3\xc6\xbb\xfc\xe1\xa7\xcd\xd4\x9d\x35\x27\x04\x57\x00\xd8\x9a\xc3\x28\x60\xee\x18\x5f\x5d\xba\x66\xdb\xe6\xff\x2c\x43\xb3\xf8\x8f\x5b\x3a\x01\x27\x9e\x7a\x72\x7c\x1a\x65\xc3\x89\x70\x41\x90\x27\xb0\x9f\x2f\x7d\x9d\x83\x47\xd3\x2b\x7e\xdf\xaa\xaf\x75\xfb\xd1\xd2\x42\x17\xc3\xff\x6b\x75\xa1\x2b\x95\x96\x08\xc0\x29\xd2\xa5\x1f\xf0\x92\x6b\x4c\x88\x9b\x7b\x61\x91\x38\xcc\xe2\x84\x11\xe1\xbb\xdb\x89\xeb\xc7\x58\x25\x4b\x10\x09\x47\xc6\x3a\x34\xeb\xc1\x92\x97\xab\x36\x05\x49\x41\xae\xab\x6e\x05\xfb\xd8\xc3\xdd\x91\x6a\xeb\x1a\x3e\xa3\x5d\x29\x77\x14\x22\x86\xbb\xd4\xfe\x55\xb5\xf1\x65\xb6\x6b\x88\xaa\x9f\x40\xc5\x75\x09\xa4\x1a\x2e\x7d\xc4\xa6\xae\x57\xa0\x78\x5b\x57\x64\xfb\xdc\xbb\x19\x14\xfa\x75\xbd\x66\x47\x18\x18\x51\x85\xe6\xb5\x85\xfe\x3e\x0f\x93\xc1\xea\x42\x37\xfe\x88\xe4\x19\x7b\x4f\x85\x27\xec\x12\x85\x23\x1e\x1a\x5e\x76\xa9\xc1\xc9\xd8\x77\x90\x68\x6d\x40\x07\x06\xf7\x76\xa6\xd5\x33\xc2\x88\xc4\x14\x6e\x47\x8c\xc2\x10\x72\xad\x5b\xbe\x79\x83\x05\xb5\x52\x54\x64\xed\x07\xec\xfe\x81\xe4\xb3\x00\xe6\xd4\xf2\xae\x18\x32\x4d\x94\xe0\x85\x36\x4a\x93\xe3\xed\x98\xa4\x39\x12\xa6\x55\xd1\xa4\x28\x3a\x2f\x17\x55\xa8\x69\x65\x33\x2e\xeb\x99\xe3\xd2\xf9\xb5\x27\xe4\xf8\x5a\xba\x11\x55\x69\xee\x61\x6b\x28\x41\xf7\xdd\x3a\x3e\x6f\x6c\x7b\xc5\xa0\x09\x89\x66\x42\x91\x7f\x27\x7a\xa4\x65\xdc\x2f\xdb\xd8\x52\x42\x5b\x31\x43\x0a\xea\x60\xf0\xc3\x9a\x79\x64\xb7\xc2\x03\xd0\x92\xdd\x4a\x0e\x4a\x34\x25\x7b\x6e\x0c\xec\xc7\x65\x9b\x5e\xd9\xc3\xed\x51\x3f\x4e\x1e\x68\xcf\x93\xed\xdd\x94\xdb\x53\xdd\x3d\x41\x83\x93\x72\x83\xbe\xce\x52\x11\xe8\xec\x3a\x85\x07\xbf\x1f\xde\xfc\x30\x1a\xe1\xc8\xf3\x90\xf6\xb8\x27\xe2\xf9\xfc\x4f\x18\x91\x75\x00\x3d\x7d\x52\x8d\x0e\xea\x25\x49\x78\xd7\xb2\x4f\xf1\x40\x3b\xaf\xee\x7a\x65\x75\x14\x79\x48\x95\xa2\xa6\x46\x51\x53\x43\xd5\xd4\xae\x54\x34\xd2\x75\x7d\x98\xe7\xc2\xb9\x7e\x0a\x3b\x45\x30\xc7\x17\x72\x35\xb7\xca\x77\x3d\x3e\xf1\xdc\x00\x20\xe7\x4d\xbb\x41\xfa\x5f\x6f\xde\x33\x4f\x18\x8f\x73\x13\xfd\xde\x18\xb3\xb5\xda\x5d\xdb\x44\xa7\x34\x26\x22\x44\x25\x01\x17\x81\xd5\xe0\x9a\x5f\x9c\xa0\xc7\x04\x84\x04\x20\x22\x77\x10\x49\x99\x07\x56\x57\xf4\x09\x09\x9d\x5b\x5b\x53\x58\xf8\xa6\xb5\x01\x3b\x63\xf3\x07\xc3\xd7\x26\x89\x53\x24\xc0\x53\x33\x9b\x65\xc9\x13\xd8\x2d\x09\x82\x37\xca\x5d\x96\x5c\x2a\x60\x5f\xa0\x7b\xd8\x13\xcc\xb3\x2b\xb9\x99\x71\xaf\x77\xc8\x54\x29\x15\x4a\xeb\x6d\x24\x70\x7c\x62\xeb\x56\x43\xc7\x17\x16\xb2\x7c\x61\x88\xf3\x27\x8e\x3e\xae\x1d\xaf\x37\xe9\x8e\x69\x9f\x77\x8d\xf1\xba\xd6\xcc\x74\x60\x14\x86\x4d\x98\x0b\x69\x3a\xa3\x46\x02\x79\xd2\xf4\x7a\xb3\xee\x95\x55\xd8\x60\x19\xda\x85\x49\x1d\x5b\xf8\x01\xee\xe2\xc7\x3e\xec\x65\x8e\x19\x37\x9c\xc4\x6a\x8c\xba\xe6\x09\x5b\x27\xa9\x2f\xb5\xfb\x14\x0e\x10\x9b\x31\x9e\xb6\xc5\x07\x09\x64\x1a\xa8\xa8\xc1\x4b\x02\xfd\xb1\x01\xd1\x06\xf6\x37\x80\x6f\xc3\xc9\x48\x06\xed\xb9\xc2\x19\xbd\x34\xd9\x80\x1c\x54\x04\xe9\x4e\x06\x13\x3d\x5d\xf6\xc9\xa3\x59\x82\x21\x76\x77\x47\x74\x62\xff\xf8\xa7\xb5\xbe\x8e\x97\xac\xc7\x41\xed\x42\xaa\x20\x49\x86\xf6\x32\x4b\xab\x8b\xc8\x76\x5c\xc8\x06\x18\x43\x25\x02\x88\x53\xf0\x3c\x29\x9b\x2d\x27\xb0\xdc\x50\x5f\x86\x93\x70\x98\xbc\x94\x42\xb3\x4a\x17\x41\x4a\x09\x95\x46\xec\x5f\x66\x95\xde\xb0\xd9\x92\x3b\x0c\x7e\xfe\xc7\xc7\x1e\xb4\xe1\xd6\x24\x28\x35\x87\x94\x77\xb4\x1b\x67\xd8\x8a\xc6\xe6\xa5\xfe\xe4\xf1\x87\x56\x80\xe6\xe6\x6b\xe7\x02\x0b\x7b\x36\xa5\xf6\x5e\x3a\x1b\xdb\x7f\x9b\xe1\x22\xb1\x14\xf7\x7d\x4d\x53\x21\xa0\xed\x34\xe2\xbd\xc5\x4d\x29\x3e\xa1\xf9\x7f\xd1\xe2\xc5\xdd\xa3\xc5\x58\x31\x40\xda\x4e\x7f\x46\xc5\x3f\x4b\x2c\xe0\x58\x07\x13\x9b\xfc\xba\x0e\xf1\x6b\x7a\xe3\x9a\x1f\x59\xe5\x98\x0d\x27\xd8\x9a\x8d\xfa\xdc\xc7\x49\xef\xb8\x7e\x30\x46\xf5\x23\x31\xb7\xba\x2b\x46\x7c\x54\x3b\xdc\x73\x10\x69\x7e\x18\x68\x96\x48\xf2\xa9\x61\xe9\x49\xf6\xa1\x25\x79\x11\xb1\x5c\x7c\x29\x2e\xc4\xc1\x9d\x81\xb0\x40\x8d\x77\x8f\x6a\x77\xda\xd8\xbe\x29\x7a\x93\x76\xaa\xb4\xbc\x85\x79\x78\xff\xd6\x39\x27\x9e\xd7\xec\xcb\xca\x88\xe3\x35\x3f\x8a\x9a\x06\x8a\xe9\xf5\xf3\x36\x3e\x0e\xc4\xc6\xb5\xc2\x43\x69\x9a\x9f\x38\x3f\x95\x05\x2b\x6b\x7f\xf5\x84\xe3\xa9\xb3\xee\x8c\x5b\x6f\x82\x5d\x54\x22\xac\x2a\x39\x8b\x53\x03\x58\x92\x97\x3e\x67\x85\x7d\xec\xd7\xc4\x30\xf5\x0c\xb6\x62\xb6\xc5\x24\xb0\xa4\x5d\xc6\xc2\x50\xd0\x79\xdb\x66\xfb\xb2\xe2\xf7\x0a\x56\x9b\x66\xf8\x73\xed\xbc\x0f\x34\x1e\x1a\xca\xa3\x5f\x5d\xfe\x58\x71\xf6\x28\x26\x4e\xf5\xb9\x70\xea\xdc\xdd\x12\x7b\x9e\x77\x27\x30\x6f\x6a\x7f\xc7\xb6\xd7\x5b\x3a\x92\x14\x37\x45\xda\x81\x64\x6a\xf7\x69\xab\x5d\xd9\xe8\x68\x62\x9c\x25\x6f\xa0\x4a\xfb\x10\x0d\x22\xdc\xe2\xf9\x6c\x20\xeb\x3b\x3b\xd1\xb8\x25\x54\x61\x26\x2b\xac\xed\x50\x92\x53\xe5\x65\x1a\x47\x77\x97\xeb\x13\x5b\xe3\x39\xcc\xd7\xa6\xf0\xb3\x17\xe3\x7b\x02\x87\x4b\xc5\x35\x9f\xe3\xca\xce\xd5\xce\xd4\x71\xc8\x7c\xeb\xe0\x6e\x1c\x92\x68\x6b\xee\xc4\xf8\x0c\xeb\x56\xc5\x62\x31\xbc\xbf\xb7\xb4\x0b\xb6\x3a\xe4\x52\x46\x2e\x25\xe4\xfe\xa1\xaa\x4a\xba\x64\x88\x38\xd4\xaa\xa7\xac\xdf\xa9\x8e\x2f\xeb\xd6\x76\x5e\x11\xd0\xd8\x32\x91\x6d\x04\x2f\x5e\xec\x2c\x36\x92\x81\xd2\x4f\x5f\xd7\x97\x45\x52\x5b\x43\xc2\xaf\xbf\x02\x77\x3a\x5b\x13\x0e\x62\xc7\xb0\x62\xb4\xb1\x01\xab\xb7\x20\x7e\xfa\x20\xb9\xa7\x1b\xf4\x38\xb2\x9b\xf0\x43\x7d\xfa\x12\x0a\xf4\xc8\x7e\x7e\x65\xcf\x06\xc8\xd0\x4d\x48\x8e\x10\x76\x17\x43\x29\xa1\x2e\x9f\xa4\x48\x5d\xb3\xe1\xaa\xfb\x2e\x86\x81\xaf\x1c\xa8\xfd\xd8\x49\x59\xaa\xe1\x18\x4f\xc4\xc4\x2c\x0e\x47\xce\x39\x55\x05\x1f\x16\x7e\x78\xed\xc5\xc2\xe3\x1b\xfc\xee\x51\x8e\xc0\x8c\xb1\xb3\x38\x88\x79\x5f\xe2\xc1\x69\x39\xdc\xa9\xc0\x01\xd9\x06\x33\xd6\xc5\x22\xde\x60\x21\x14\x02\xda\x58\xd4\x24\xf7\x31\x99\x68\xd8\x17\x0d\x07\x1c\xc3\x26\xce\x7d\x16\xb0\xa0\xd8\x7f\x4e\xf0\xc3\x51\x46\xde\x30\x49\x34\xa0\x5f\x9f\x7e\x70\x1a\x99\x1d\xf8\xdc\x70\x66\x67\x0e\xbc\xb7\xa0\xe1\x6c\x83\x59\xf8\x62\xe1\x6f\xb0\xc8\x8b\x86\x27\xa2\x26\x8b\x7b\x92\xb1\x8e\x70\x14\x17\x09\x34\x23\xee\x76\x0a\x8f\x45\x98\x65\xe6\x32\xb6\x32\x20\x91\x56\xa1\x7a\xdc\x25\x7a\x2e\x04\x31\x57\x60\xe8\x8a\x16\x32\x86\x8c\xc2\x2c\x8a\x97\xd1\x52\x75\x0a\xec\x54\xa8\x1e\x49\x8b\x4d\x1f\x10\x39\x50\x77\x66\x03\xfb\x3c\x26\xdc\x40\x16\xdc\xbb\xa0\x1b\x81\xad\x20\xc8\x7a\x9b\x47\xb9\x10\x46\x22\x7b\x95\x19\x2b\x46\x62\x41\x23\x5f\x66\x5c\xae\x62\x63\x83\x60\x40\x8f\x39\xdc\x61\x8b\xc5\xc6\x06\xb5\x3c\xe1\x08\xe0\xa7\xfb\x64\x0c\xcb\x3e\x19\x8f\x02\xe7\x2e\xec\x1a\x61\xd2\x94\x13\xdb\x86\x5f\xf0\x9b\x3c\x94\x94\xd2\x6e\x4a\x69\x21\x05\xc3\x9b\xc4\x2b\x22\xa8\x6c\xe8\x25\x5a\x69\xaf\x92\x23\xb9\x29\xe7\xb8\xb7\xdf\x07\xce\xf9\xb9\x11\xe2\x74\x85\xfe\x61\x39\xbd\xc1\x92\xca\x7f\x38\x86\xff\xdc\x18\xd4\xb7\x9c\x43\x7c\x85\x9c\x17\x56\x4b\x06\xf6\xdb\xc0\x71\x87\xd2\x54\x93\x73\x35\xe4\x1b\x39\x71\x16\x6a\x7f\x0d\x9c\xb7\x41\x2b\x4b\x87\xf6\xb7\xc0\xf9\x4a\x0b\xf3\xe6\xd7\xe6\xe6\xb4\xb9\x39\xea\x6f\x1e\x75\x37\x4f\xba\x9b\xa7\xad\xcd\xe3\x6f\x86\xb5\x4f\xb9\xfc\x24\x72\x58\x67\x3a\x57\xb9\x6d\xa5\xd1\xdb\xd3\xf7\xa7\xac\xa6\xb2\xb5\xd5\x80\x2b\xde\x57\xbc\xc7\xde\x6d\xb7\xdb\xcd\xf6\x0e\xfd\xdf\x6f\xb7\xbb\xfc\x7f\x8b\xa2\xa8\xa2\xde\x5f\x51\xf7\x5b\x60\xff\x15\x41\xab\xa1\x56\x5f\x21\xaf\x45\x53\xb7\x61\x9b\xa9\xca\xb4\x70\x7a\x8f\xe2\x69\x24\xda\x75\xbe\x05\xf9\xb7\x4d\x68\x26\xde\x30\x0a\x47\xce\x9b\xd4\xac\x39\xe1\x41\xdd\xc3\xa1\xb9\xe3\x75\x9e\x6a\x76\xa6\xc2\x6d\x8a\xc0\xfd\x74\xf9\x5e\x9a\x55\x09\xfb\xd4\x57\x26\x6b\x2a\xf2\x97\xd5\xa8\x94\x4d\xcb\xe5\x34\x9a\xa5\x22\xa7\x0c\x4b\x62\xb2\xe7\x48\x05\x5a\xe2\xe4\x9f\xe2\x22\x40\x4b\xc2\x48\x68\xc9\x14\x2a\xb2\xd0\x06\x2a\x4b\xbd\x87\x11\xdb\xf3\xfe\x28\x23\x46\x11\xeb\x22\x56\x29\xfb\x20\x62\x27\x0c\x4b\x8e\x98\x00\x8d\x11\x13\x9f\x55\xa8\x73\xc4\x64\x72\x09\xb1\x49\x94\xc5\x55\xb4\x94\x11\x67\x09\xde\x2f\x12\x20\xdf\xb3\x2b\x29\xd3\xda\xde\x2b\x1c\xbd\x09\xac\x3b\x7b\xde\xb3\xa7\x66\x09\x6f\x44\x35\x53\xab\x91\xae\x8b\x3d\xd7\xb1\x2e\xfa\x47\x04\x71\x8e\x3c\xc0\x67\xd4\xf1\x51\xc6\x2a\x47\x9b\x93\xca\xa3\x19\x85\xe9\x64\xd5\x60\xa2\xc8\xc8\x85\x86\x1b\x9f\xef\xa4\x3c\x1d\x76\x98\xc5\xd5\xe0\x72\x82\xaa\x04\x32\xe2\x13\x68\x3f\x30\x76\x22\x8f\x1c\x39\x04\xc4\xc0\xe1\xab\x02\x5f\x31\x6c\x9c\x98\x23\xc0\x8c\xf1\x0c\xf6\x34\xbd\x8e\xfd\xcc\x83\xd1\x28\xfa\xd3\xf1\xfe\xb0\x89\x88\xe8\xf7\x99\xfd\x1f\xfa\xb7\xf3\x6f\xfa\x83\x7e\x85\x09\x29\xfa\xbb\xbb\x83\xef\x3f\x3a\xbb\xf4\xf7\xdf\x7b\x7f\x20\xfe\xf9\x2e\x12\xf6\xda\x7f\x70\xfa\xb3\xff\xec\x7a\x7b\xf6\xf3\xe7\xcf\xf7\xe8\xa7\xb3\xf3\x8c\xca\xee\x0d\xec\x2f\xe0\x7f\xf9\x9c\x60\xd3\x77\x45\xe8\x59\x29\xb4\x53\x0e\x76\xda\x22\x28\x88\x4e\x95\x94\xa1\x67\xe5\xb4\x72\x50\x95\xc4\xb8\xa9\x72\xfc\xdd\xd1\xbe\xf7\xf4\x3c\xbb\x22\x40\xa3\xa6\xf2\xe3\x53\xc6\x92\xb8\xfc\x23\x6f\x1e\x5d\x59\x0e\xc8\x4a\xe7\xb4\xfa\xd9\xd8\x80\xfd\x8b\x99\xf2\x34\x0b\x52\xdf\x24\xd6\x4f\x1c\xb8\xf6\xb8\x5a\xce\xc4\x20\xf0\x93\x9c\xcf\x80\xf5\x13\xd3\x5e\x9d\xff\xb4\x94\x75\xf3\x2d\x31\xf9\x87\x2a\x57\xd3\x5c\x64\x7e\xb2\x39\x5b\x9d\x59\x4d\x0a\xce\xea\x3e\xd9\x1c\xad\xce\xfa\x8a\x68\x9b\x44\x9d\x9d\x0d\x47\x06\x53\x4f\x15\xbc\x5c\x55\xb0\x2e\xf3\x9f\x0f\x80\x2e\xa9\x9c\xf3\x7d\x35\xec\x77\xde\x80\xa4\xb4\x3f\x69\x31\x67\x0a\x2e\x59\xda\x2c\x1e\xe5\x16\x3e\xca\x0a\x6b\x85\xe1\xb6\x67\x3d\xf5\xec\x06\xb2\xf1\xeb\xb7\xff\x42\x13\xb0\x6a\xb9\xf1\x4b\xc0\xe3\xe7\xa8\x71\x04\x15\x96\x6f\x5a\x0b\x8b\x85\x51\x8d\xc5\xc2\x2f\x01\x0d\xbb\x14\x39\x3e\x07\xce\x97\x8a\x87\xc4\x1c\xbb\x73\xf6\x6b\x85\x05\x1b\xa7\x8f\xb0\xf3\xfe\x17\x16\xee\x35\xa9\xe5\x53\xff\xf0\xb1\x04\x43\x45\x1e\x45\x33\xdc\xc4\x23\xc8\x86\xf2\x3f\x82\x72\x28\x77\x85\x78\x38\xe6\x11\xf4\x53\xc9\xff\x00\x09\x01\x93\x3a\x2a\xda\xff\x5c\x1e\x6b\x1e\x0d\x35\xde\xcc\x31\xd7\x1c\xf3\xcf\x24\x07\x49\xdb\x8a\xac\x86\xfa\xb2\x7e\x35\xc0\x59\xc9\x2c\x0a\x13\xaf\x4f\x99\xee\xf9\x6c\xe4\x7b\xb2\xea\x7d\xd5\x3b\x3c\x7e\x30\xa0\x43\xe4\x0f\x59\x83\x6a\x1b\x79\x0d\xfb\x7f\x22\x65\xef\x7e\x92\x4e\x83\x87\xca\x02\x94\x6d\x64\x22\x71\xd5\x55\x85\x6e\xa9\xcc\x3f\x81\xf7\xe5\xe4\x98\xa0\xab\xd1\x39\x1c\x79\x63\x42\x79\x6b\x4b\xfc\xb6\xdc\xe9\xa8\x27\x3e\xa9\x4f\xac\xae\x11\x5d\xe2\x19\x6e\x91\x9d\xb6\xd1\x59\x40\xd9\xc5\x2f\x9b\xe4\x8c\x53\xec\x52\xca\x11\x0e\x15\x16\xba\xbd\xa3\x0e\x7d\xdf\x9b\xd6\xfe\xff\x06\x00\x00\xff\xff\x3b\xc1\xeb\x31\x55\x4e\x02\x00") + +func uiJsLibsD3335D3MinJsBytes() ([]byte, error) { + return bindataRead( + _uiJsLibsD3335D3MinJs, + "ui/js/libs/d3/3.3.5/d3.min.js", + ) +} + +func uiJsLibsD3335D3MinJs() (*asset, error) { + bytes, err := uiJsLibsD3335D3MinJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/js/libs/d3/3.3.5/d3.min.js", size: 151125, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiJsLibsMithriljs020MithrilMinJs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x94\x7c\x79\x77\xdb\xb6\xd2\xf7\xff\xf9\x14\x32\xeb\xe3\x97\xac\x60\x5a\x4e\x9e\xf7\x9e\xe7\x52\x41\x78\x9c\xc4\x59\xda\x38\x8b\xe3\xb4\x4d\x14\x35\xe5\x02\x89\x94\xb9\xa8\x22\xe5\x25\x26\xbf\xfb\x33\x33\x00\xb8\x48\x72\x7a\xef\xe9\xa9\x45\x62\x1d\x0c\x66\xf9\xcd\x00\xcc\xd1\xcf\x0f\xce\xe2\x32\x5a\xc5\xc9\xe0\x6a\x64\x3f\xb4\x47\x0f\xa2\xb2\x5c\x3a\x47\x47\x73\x28\x5d\xfb\x76\x90\xa7\x47\x49\x94\xaf\x62\x71\x94\xca\x76\xf6\xa2\x78\x60\x06\xd6\xe0\x8d\xc8\x07\xaf\xb0\xe2\xc1\x9b\x38\x10\x59\x21\x9c\xc1\xd9\xeb\x8b\x07\x3f\x1f\x3d\xb8\xf2\x56\x83\x94\xcf\xd6\x59\x50\xc6\x79\x36\xf0\x4c\x9f\x05\xd6\x5d\xf3\x1e\x9a\x9e\x75\xf7\x9c\x7b\x76\x98\x07\xeb\x54\x64\x25\x3b\x85\x97\x24\x0f\x3c\xac\x66\x2f\xe1\x25\xf0\xb2\x40\x24\x27\x59\x9c\x52\xd9\x8b\x95\x97\x8a\xaa\x82\xf2\x44\x78\xab\x8b\x38\x15\xf9\xba\x64\x2f\xa0\xe1\x4a\xfc\xbd\x16\x45\xb9\xdd\xb2\x10\xa5\x6a\x57\x37\x13\x0b\xd3\xba\x43\xda\x3c\xe6\xf3\xc9\xd4\x2e\x12\xa0\x1b\xa6\x4a\x12\xd3\x5b\xcd\x89\x92\xc2\x62\x01\xdf\x33\xb3\x75\x92\x70\xee\x4f\x8e\xa7\x55\xf5\x46\xb6\xc0\x17\x6b\x8f\xf3\x57\x55\x65\x94\xde\xdc\x88\xb3\x81\xac\x37\xae\x62\x71\xdd\x79\x2d\xd6\x7e\xb9\x12\x42\x97\x58\x2c\xe4\x81\x8b\x4f\xce\x5d\xcd\x04\x37\x82\xc4\x2b\x0a\xac\x0d\x5d\xf5\xec\xc8\xdf\xb7\x40\xb9\xc1\x66\xfc\x0e\x86\x77\x8c\x30\xbe\x32\x98\x57\x96\xab\x02\xfa\xd5\x6c\x0e\x04\x8f\xe3\x99\xd9\x50\x33\x42\x6a\x7e\xb1\x60\x47\xf2\xeb\x41\x26\xae\x07\xa7\xab\x55\xbe\x32\x8d\x42\x24\x22\x28\xf3\xd5\x00\x66\x48\x4d\xfd\xc6\x06\x34\x14\x1b\x04\x51\x9c\x84\x2b\x91\x59\x83\x22\xca\xd7\x49\x38\xf0\xc5\xc0\x1b\x14\xe5\x2a\xce\xe6\x86\x35\x9e\xc1\x10\x63\x8f\x9f\xd9\xe2\x46\x04\x72\x96\xb1\x05\xd3\x1a\x06\xe7\xdc\x83\x45\x1c\x1c\x78\x93\x87\x53\x6b\x66\x03\x91\x1c\x1f\xc7\x22\x29\xc4\x00\x9b\xfc\xa4\xdb\x40\x2d\xcd\x66\xc7\xe1\x46\x13\xbb\x69\x32\xb7\x97\xeb\x22\x32\x69\xb0\xb6\x7e\x22\xeb\x1f\x4d\x71\x62\xda\xaa\x88\xbf\x95\xb4\x60\x29\xd0\x27\x47\x9e\x44\x30\xc6\x94\x47\x50\x56\x55\x66\x04\x83\xb8\x86\xe1\xec\x8d\xac\x1a\xfb\xc4\xdc\x97\x7b\x6b\x06\xee\x43\xe7\x18\x7b\xe9\x65\xf3\x63\x98\x20\xb6\x13\x91\xcd\xcb\xe8\xe0\x40\x71\x33\xc6\xe9\xa0\xe2\xb5\x8b\x4f\x4e\x4c\x6c\xc0\x91\x16\xc8\xc5\xd0\x0a\xed\xc8\x2b\xde\x5d\x67\xef\x57\xf9\x52\xac\xca\x5b\x73\x61\x1d\x1c\x98\x0b\xe8\x21\x0e\x0e\x50\x56\xf6\x78\x38\x59\x00\x6f\x0c\x03\x24\x04\x1f\x5d\x53\x2d\x10\x5f\x2c\xa6\xc9\x5e\x4c\xb9\x61\x58\x4e\xe7\x95\xea\xc7\x2b\x51\xae\x57\xd9\x60\xae\x08\x7b\x32\x82\xe1\x75\x23\x31\xe5\x73\x7b\x91\xc7\x99\x69\x0c\x0c\x0b\xc6\x6a\xe5\x79\x66\x82\x24\xb3\x90\x2d\x58\xc2\x52\x96\xb1\x9c\x2d\xd9\xdf\x6c\x65\xdd\x95\xab\xdb\x3b\x25\xc4\x49\x55\xa9\x07\xbb\xcc\x3f\xd2\x3e\x9b\x16\x92\x9f\x20\x29\x35\xe8\x5c\x10\x99\x85\x75\x87\xaf\x35\xee\x01\xd0\xe2\xc5\x19\x6e\x44\x62\x2b\x59\xb6\x14\x7d\xe9\x18\x99\x52\x72\xc5\xb6\xd4\x62\x6b\xfd\x9c\x58\x28\x9d\x72\xa6\xb4\xaa\x4a\xe0\xc3\xda\xba\x53\x45\x7b\x3c\x45\x21\x0a\x0f\x0e\x42\x3b\xcb\x43\x51\xc8\xbd\xbd\xe2\xf9\xe1\x82\x5d\xf3\xab\xa1\xb9\x26\xee\x27\x4e\xaa\xea\x15\x23\xc6\xb1\xa9\x7a\xa8\x0d\xbd\x62\xd7\xa0\x50\x9d\x17\xab\x26\xe1\x51\xfd\x0e\x0e\x62\x53\x3d\xb2\xd4\x1a\xa7\x1c\x15\x23\x01\x1b\x96\x81\x84\xaf\x49\x11\x52\x94\x5c\x58\x7e\xca\xef\x6a\x8b\xa9\xc6\xa0\x5c\xb8\x76\xa2\x02\x0c\x95\xda\xfd\x1b\x3e\x62\xb7\xc0\x05\x45\xcb\xed\x93\x9b\xf1\xcd\x70\x68\xe9\x15\x4f\x6e\xa4\xd0\x10\x2f\x69\x12\x60\xa6\xed\x2d\x97\xc9\xad\x39\x99\xb2\xc4\x62\x37\x87\x87\x9d\x01\xac\x46\xac\xbe\xc3\x7c\xec\x84\xa7\xaa\x82\x58\x2d\x1f\xd9\x53\x98\xf3\x19\x3f\x06\x8b\xf8\x10\xec\xdb\x23\x30\x86\x60\x35\xce\xf8\xde\x31\x03\x6a\xc6\x37\x8f\x75\x1f\xa2\x24\x05\x12\x0e\x0e\xf0\xaf\x94\x15\x2d\x8c\x6d\x89\x7d\x29\x6e\x81\x3e\x18\x60\xc4\x5e\x4e\xfa\xe5\x53\x7e\xe7\x91\x1c\x39\xcf\x58\x9c\x85\xe2\xc6\xb9\xa9\x5b\x1a\xdf\x02\x21\xf7\x30\x00\x38\x95\xd0\xcc\xc9\xd6\xcc\x49\x6f\x86\x96\x95\x1f\x36\x47\xfa\x30\xfe\x00\x23\x25\x93\x0f\x34\xcc\x87\xde\x30\xc0\x8e\xa6\x44\x2d\xa0\x5f\xc0\x8d\x6f\xdf\x94\x33\xfa\xf6\xcd\x18\xbe\x85\x91\xc6\xfe\x4a\x78\x97\xb8\x89\x67\x52\xb8\xce\x81\x67\x28\x92\x7a\xce\xbd\x86\xdd\x16\x54\x8d\xa4\xcd\xd1\xe4\x7d\x64\x17\xc4\xdf\x8f\xc4\x3a\x76\x41\xeb\xd0\x6b\xfd\xa8\x69\xbb\xd0\x0f\x1f\x5b\x52\xf6\xf8\x45\x77\xbd\x34\x74\x43\xca\xf9\x3f\xca\xd2\x7f\xc1\x4a\x1c\xe5\xd3\x46\xe9\xf8\xe5\xe4\xd3\x94\xe3\x1f\x57\xef\xe5\x0b\xbd\x97\x6c\xb6\xca\x53\x07\xeb\x6c\x2a\x61\xe0\x0a\xd0\xc5\x69\x1d\x9b\xb4\x55\x60\x44\x9f\xdb\x01\x50\x5d\x8a\x53\xd9\xc8\x24\xff\x63\xd5\x8e\x1e\xf6\xb4\x11\x11\x32\xb1\xbf\xa1\x3b\xd2\x6b\xfb\x1d\xad\xe4\x4b\xeb\x37\x69\xf1\x5e\x4e\x7e\x07\x8b\x86\xe5\x7f\xf0\xdf\xec\x22\x5f\x95\xe6\xdc\x62\x9f\x49\x15\x4f\x56\x2b\xef\xd6\x6c\x36\x62\xfc\x59\xa9\x5f\xda\x53\xf2\x56\x08\xbf\xd0\xae\x7c\xe1\x7f\xe8\xed\x40\x8b\xf2\xc5\x96\x34\x81\xda\x3c\x03\xd1\x00\x8d\x9f\x7c\x51\xeb\xd0\xaa\xdf\x14\xc0\xc4\x76\xb1\xa4\x51\x55\x11\x3b\x06\x1b\xda\x19\xe2\x54\x72\x76\x9f\xef\xe6\xc0\x78\x9f\x04\x2e\x69\xa7\x68\x98\xcf\x3c\x28\x2a\xc0\x1f\x3c\x15\x40\xaf\x30\xf7\xa1\x80\xfc\xcc\x5b\x62\xef\x97\x86\xb7\xb8\x9f\x3b\x08\x19\xb1\x3b\xe5\xdf\x61\x30\x67\xd7\x0c\x35\xa3\xf5\x38\x93\xfd\x69\x8d\x03\x64\xbd\x81\xf9\x7e\xdd\x59\xc7\x0b\x60\xc5\xce\xf9\xc1\x12\x7f\xb1\xd5\xde\x6b\xd9\xea\x96\x6c\xac\xa2\xa9\xf9\x87\xd5\xb4\x64\x20\xb7\x51\xd6\xa6\xdb\x14\x36\x83\x59\x75\xca\x3f\xd7\x75\x57\x1b\xbe\xed\xd6\x08\xda\x0d\xdf\xe7\xd2\xb7\xa5\xe0\xd3\x50\xe4\x61\x4b\xbf\x4d\xd1\xc3\x0d\x9f\x56\xd5\x53\xe5\xe6\xc6\xbe\x0f\x4b\x09\x60\xe1\xbe\xaf\x04\x28\xce\x4a\xe0\x08\x60\x82\x13\x50\x7f\x8b\x3d\x1d\x72\xa8\xda\x07\xdb\x5f\x94\x22\x74\xb1\x5d\x4a\x0e\xef\xe8\xf1\xe4\xcf\xaf\x47\xd3\xea\xeb\x93\xaf\xc5\xcf\x93\x3f\x1f\x4f\x8f\xe6\x56\x55\x21\x0c\x50\xf4\x38\x1a\x68\xf9\x12\x18\x40\x4f\x55\x71\x8c\xb4\x0c\x87\x53\x18\xd9\x42\x25\xdf\x3b\xf9\x47\x2d\x6f\xad\xf2\xc1\xc1\x77\xd2\x12\xe5\x26\xbe\x33\x32\xc9\xd2\xe7\x35\x52\x1f\xf8\x24\xf6\x81\xaf\xf5\x42\x4b\xbf\x1c\x27\xf0\xed\xa5\x07\x58\xa6\xc4\x9d\xc1\x01\x89\xd9\xef\x66\x66\xe0\x5b\x8f\x47\xe8\x02\x27\x81\x3f\x65\x64\xed\x41\x13\x35\x35\x8d\xeb\x40\xe7\xa7\x3d\x4f\xe3\x9b\x1a\x4f\xf8\xbd\xae\x35\x1c\x53\x76\xe8\xe0\x00\xfd\xe2\xab\x76\x95\x02\xd1\x33\x9b\xe1\x5f\x18\x1d\xe1\xef\x58\x6e\xdb\xdc\xe7\xf2\xdd\xde\x87\xb8\x60\x1e\x67\x1e\xa0\x0f\x59\xc2\x22\x9f\x83\x46\xcd\x66\x00\x2c\x04\xa0\xf6\x70\xe5\x5d\xdb\xe0\x94\x41\xe1\xe6\xb7\x26\xe0\x91\x94\x9a\x15\xae\xfa\x6d\x16\x35\xf7\x2d\xe7\xf0\x98\xc5\x3e\x8f\xfc\x27\x87\xc7\x50\x0f\x8e\xb6\x5c\xe5\x49\x22\x10\x07\xfa\x53\x07\x0c\x8b\x99\x74\x4a\xab\xea\xbd\xc5\x3e\x21\xdd\x89\xb6\xa8\x49\xc7\x64\xa2\xc9\xe5\x23\x80\x69\x7e\x55\xa5\x38\x6f\x67\xbc\x8d\xd7\x86\x88\xd8\xb7\x70\x6e\xb9\x14\x7c\x73\x24\x48\x5f\x26\x5e\x20\xa2\x3c\x09\xc5\xca\xa8\xd9\x8f\xa1\xd3\x27\x74\x63\x92\x0e\x90\x4f\xf5\x44\x20\xa4\x43\x1d\xff\x64\xc1\x52\xed\x3c\x5b\x67\x49\xee\x01\x60\xf2\x7c\x69\x55\xef\x5a\xb2\x9c\xd8\x67\x91\x97\x85\xf2\xb1\x69\x0b\x03\x09\xd5\x18\x78\x06\xdb\x23\x9f\x63\x25\xa5\x89\xc4\x3d\x33\x2d\xc7\xdb\x91\xc3\xb3\x3c\x5d\xe6\x19\xc8\xd5\xa0\x14\x29\xac\xac\x04\x58\x05\x7a\x33\x50\x2b\xf0\x06\x57\xf1\xaa\x5c\x7b\xc9\x40\x1b\x88\x41\x96\x97\x03\x0f\x6a\xd0\xaa\x33\x15\x44\xb0\x81\x28\x03\xdb\x40\xb9\xdb\xb5\xd6\xb4\x29\x4d\xdb\x52\xf2\x16\x0b\x9f\xbf\xf3\x17\x10\xad\x20\x1f\x0a\xdd\xc9\x62\x97\x3e\x5f\x68\xa2\x9f\x98\x06\x54\x62\xf0\xa4\xaa\xdd\x63\x67\x44\xc8\xd3\xa4\xf5\xa1\x93\x87\x9f\xaa\x82\x1e\xe4\x79\x2c\x89\x9c\x21\x54\xea\x8e\xad\xa6\xb6\xfa\x6d\x50\x54\x75\xdc\x82\x03\xe9\xe7\xb6\x9c\xfc\x7d\xda\xbe\x40\xb4\x07\x36\xe2\x3e\x89\x36\xf7\x48\x98\x66\xf1\xfc\x19\xec\x9d\xb8\x01\xb3\xb4\x51\x60\x4b\x81\x01\x23\x06\xa1\x0b\x0c\xf6\x63\xfd\xe8\x75\xdd\x2a\x50\x63\x81\xec\x81\xe1\x23\x15\x97\x16\x51\xeb\x7c\x03\x8c\x71\x0f\x36\x86\x2a\x6f\x97\x22\x9f\x0d\x36\x47\xd4\x92\x05\x63\xfe\xba\x3d\x9f\xae\x35\xd5\x80\x5a\x69\x2c\x4b\xdb\x89\x58\xda\xb1\x18\xed\x58\x57\x69\x95\x35\x53\xb3\x76\x44\x58\x4e\xd4\x29\x30\xef\x96\x2b\x71\x05\xb2\xf6\x5c\xcc\xbc\x75\x52\x3a\xef\x6b\xab\x13\x05\xd3\x9e\x53\x18\x2c\x65\x74\xac\xac\x67\xe2\xa3\x82\xf3\x3e\x0b\x24\x18\x94\x7b\x77\x93\x26\x59\xe1\xfe\xcd\x7b\xef\x8e\x51\x5c\xcd\xa5\xf2\xc2\xb0\x50\x6b\xa8\x4c\xc8\xf5\xf5\xb5\x7d\xfd\xc8\xce\x57\xf3\xa3\x87\xa3\xd1\xe8\x08\x9b\x39\x06\x38\x92\xa8\x69\x0d\x0c\xdf\xd9\xfe\xf8\xdf\xff\xfe\xdf\xa3\x33\x68\x49\x7f\xce\xde\x18\xa0\xed\x3e\xa1\x98\xc0\x6f\x66\x8f\x91\x14\x70\x64\xee\x26\x04\xa1\xa1\x59\xdb\xcc\x72\x36\x5a\xbc\xfd\x68\xfe\xcd\xb6\x5b\xfd\x60\xb4\x1f\x0c\x01\xfb\x28\x73\x0f\x72\x40\x89\x4d\x2e\x7d\x37\x32\x91\xa5\xdd\x49\x18\xc4\x24\x7f\x5b\x8e\x7e\xd3\xc1\xb5\xa3\x1c\x46\x13\x6d\xa3\xe1\xd5\xcf\x4d\x68\xeb\xce\xda\xf1\x02\xf8\xaf\x6d\x82\x72\xa4\x1f\x21\x5e\x19\x35\x6b\x42\xe1\x01\x52\x45\x18\x97\x9e\x9f\x08\x37\xf0\x1d\x89\x00\x9c\x4e\x67\x05\x95\xc0\xf5\xd5\xac\xb5\x72\x77\xca\x9f\x70\xe1\xf7\xc5\x94\xcf\xfc\xf1\xb6\xa0\xce\xfc\x0e\xf0\xef\x19\xe2\xce\x0b\x78\xb7\x24\x44\xe4\xd9\x91\xdc\xcd\x6a\x88\x52\xfd\x5e\x27\xe9\x21\x53\xbf\xdb\x72\xdc\x1d\xe1\x3d\xdb\x1c\x83\xa7\x7e\x5d\xa7\x1d\x6e\xee\xb5\x2f\x3a\xde\x35\x37\x8b\xc0\x29\x5b\x4c\x65\x81\x3a\xe2\x69\x5c\x79\xc9\x5a\x74\x2c\xe7\xc1\x41\x67\x5f\xef\xa8\x56\x6f\xa8\x4d\x6f\xb5\xdc\xe5\x4d\x94\x0b\x7d\x7a\xc0\x30\xd7\x90\x50\xc2\x86\x0e\x68\x19\x4d\xc1\x76\xf7\xa6\xd1\x02\xa3\x4c\x28\x8e\xde\x92\xcf\xff\x33\xb9\x38\xfe\x4f\xe4\x42\xa3\x19\x85\x07\x31\xfa\x6d\x44\x82\x78\x76\xaf\x4c\x58\x8c\x4c\xe8\x48\x23\xe5\xc0\xdf\x42\xc8\xf7\x72\x00\x2d\x8c\x32\x6a\x1d\x0a\xc1\x64\xa2\x5d\x93\xfb\x9f\x29\x5b\xd8\xda\xd1\xcd\xf7\xaa\x02\xb6\xe7\x7e\x93\x3d\x45\x18\x6c\xdd\x29\x1f\xdc\x14\x36\x25\x5e\x6f\x22\x05\x2b\xb1\x4b\x5d\x8f\x57\x12\x01\xe4\xbe\x99\x30\xd0\x0b\xb6\x97\xf8\x2c\x83\x25\x4f\x2d\xab\x05\x79\x9a\xe0\x3d\x4d\xe2\xf7\xf1\xb6\xed\x74\xc1\x78\x34\x28\xfa\x3b\xbf\x84\x19\x00\x97\x5b\x8e\xf9\x9d\x4f\xb4\x3d\xb9\x00\xe2\x91\x21\x66\x62\x4d\x81\x41\xd8\x1d\x33\x9a\x0a\x70\xbf\xb3\x30\x29\xdb\xe3\xe3\x77\x94\x90\xdd\x9c\x44\x53\x64\x48\x3c\x31\xc8\xd6\xa9\x2f\x20\x24\xc8\xf3\x44\x78\x99\xd1\x60\x32\x4d\x38\x21\xb3\xad\x3c\x0f\x50\xe1\x24\x2d\xa8\xb5\x20\xea\x25\xa9\x86\x8e\x98\xc5\x4d\xda\x37\x98\x92\x76\xdc\x85\xc5\xe8\xdc\xd1\xf2\xe0\x60\x09\x85\xcf\x29\xbc\xba\xd2\xa6\x92\xa0\x4c\x1b\x4c\xc4\x08\xdf\x2d\xd6\xb2\xc3\x72\x0c\xdc\x41\xc0\xe6\x1e\x6a\x9e\xef\x7a\x72\x16\x9e\x38\x4b\x77\x09\x84\x67\x62\xf5\xea\xe2\xec\x0d\xbc\x9b\x26\x26\x22\x91\x03\x34\xe3\x05\xac\xa5\xaa\xbe\x6b\x1b\x49\x0e\xbc\x9b\xc9\x62\xf7\xf0\x79\x4b\x3b\x7f\xc0\x53\xd6\xcc\xf6\x9b\x24\x8a\xb8\xbc\x8b\x71\x7d\xb6\x6d\x28\x52\xad\x01\x6d\x9b\x86\x9c\xf7\x64\xd4\x53\x31\xe9\xa1\xaf\x1e\xe4\xc6\xc3\xa6\x41\x09\xfd\xb6\x3d\x23\x0a\xf2\x02\x16\x32\xd1\x86\x17\x33\x4c\x27\x04\x2a\xa2\xe0\xc1\x64\x36\x65\x11\x0f\xe1\x07\xf5\x8b\x2a\xc1\xf8\x62\xd2\x6c\x6e\x29\xab\x06\xcf\x33\x30\x71\x71\xb6\x5c\x93\xcd\x23\x9d\xa5\xaa\x3d\x3e\xa7\xb8\x58\xee\xc3\x5c\xa6\x9a\xef\x70\x30\x3e\x1f\x63\x96\x14\x33\x9e\x52\x77\x68\x14\x00\x61\x08\x30\xe1\xc9\x42\xbb\x10\x67\x6b\xd1\xd1\xea\xb9\x04\x28\xa8\x1f\xb3\x46\x0e\x8d\x3c\x33\x2c\xcb\xc3\x21\x13\x13\xdc\x66\x27\x9d\x5d\x94\xb7\x89\xa6\x4e\x9a\x93\x79\x93\x73\x9e\x5b\xfd\xa0\x2a\xc6\x85\xcd\x2d\x95\x42\x8d\xaa\x2a\x9a\xc4\x18\xbb\xcf\xe1\xc7\xa2\x35\xd0\x68\xf0\x26\x8b\xc6\xbd\x8e\x91\x25\xfb\x83\x88\x76\x1a\x62\x82\x97\x88\x91\x93\x0b\xd7\x88\x56\x62\x46\x04\xb9\x74\x42\x72\x02\xb6\x23\xf6\xd7\xa5\x00\x14\xb0\x1b\xbd\xfc\xfb\xe8\x26\x89\xb3\x4b\x83\xc9\xae\x0c\x00\x44\xe7\xb4\x62\xc7\x48\xa6\x3a\xd4\xc0\x96\x1b\x35\x33\x2c\xa3\x0d\xf4\x60\xb7\x92\xb8\x28\x31\x5d\x8e\x3b\x27\x19\xa5\x5e\x60\x61\xa9\x7e\x46\xc6\xeb\xe7\xeb\x38\x04\xc4\xa5\x5e\x22\x11\xcf\x23\xd9\xdf\x35\xd5\xce\xc3\x0b\xc4\x74\xb8\x13\xc8\x37\x62\x1a\x6d\xf4\x4e\x42\x54\xe6\x7b\x41\x60\x6c\x61\xa7\xa2\x28\xbc\xb9\x68\x77\xf5\x75\x06\x32\x13\x87\x03\x7d\x32\x64\x40\x6c\xad\x62\xa6\x45\x5d\x6b\x2d\x08\x5b\x59\x8e\xa5\x16\x34\x41\x3c\x1e\x69\x91\x3a\x1f\x1e\x8f\x83\x27\xf8\xe7\xf0\x10\x51\x85\x37\x09\xe8\x14\x25\x98\x76\xc2\x78\x99\xb2\xdf\x28\x04\x48\x9f\xe6\x57\xe2\x19\x2a\x33\x75\xd3\x44\x03\x98\xa8\xe9\x04\x4b\xe6\x9c\x4d\xf0\x5a\x3e\x8d\xba\x30\x7d\x6a\x36\xda\x6b\x66\x27\xd1\x51\xd1\xfe\xc8\x6a\xc9\x5d\xe0\x21\x1c\x92\x73\x4f\x30\xe0\xfd\x30\x18\xd8\xec\xd6\x8d\x06\xee\xed\x29\xcd\x90\xd7\x0b\x16\x34\xbb\xc0\x0a\x00\x02\xf3\x79\xaf\x16\xd6\x32\x0e\xda\x48\x61\x33\x50\xf8\xe7\x38\xc1\x6b\x80\x83\xd5\x46\x0d\x9d\x42\xca\xf7\x6b\x12\x42\x22\x21\xe4\x6d\xbd\x9e\x7f\x01\x1c\x97\x5a\xdd\xd6\x49\x58\xb5\xe8\x8e\xd6\x32\xf7\x52\xda\x35\x69\xc3\x9a\x11\xa5\x41\xf6\xc9\x8e\x29\x3c\x28\xf8\xf1\x1e\x0f\x1b\x1f\xc0\x66\xdb\x69\xc8\x62\x09\x5e\x0f\xa6\x77\xcd\x0d\x5b\x3f\x63\xa1\x36\xed\x33\x55\x73\x12\x2e\xbc\x00\x7a\xa1\x97\x31\x0d\x9f\xda\xf9\x62\x1e\x67\x06\x10\xc3\xbc\x9e\x40\xcd\xc0\x5f\x85\xff\x49\xbf\x5a\xad\xfc\xfe\xa6\x22\x0b\xb1\x61\x63\x92\xe8\xb0\x72\x63\xd1\x78\x30\x36\x6e\x8e\xfd\xfa\x75\x20\xbe\xc3\x61\x73\x08\xd6\xb2\x31\xd9\x0d\x7e\x80\xaf\x01\x0f\xaa\x8a\x76\x9c\x6d\x47\xcb\x32\x8e\xb6\xa0\xa6\x00\x67\x5c\x62\x5e\x63\x5d\x7a\x12\x37\x91\xd1\x6f\x3c\x95\x4c\xf1\xe1\x1a\x67\x98\xac\x4a\x6e\xef\x84\x6f\x02\x38\x6a\x49\x48\x51\x4d\x48\x40\xf9\xc7\xc6\x38\x78\xcd\x89\xdd\xe8\x89\xef\x7e\x54\x6b\xb2\x0e\x8f\x1d\xbf\xed\x99\xb5\x3d\x77\xc0\x36\x7d\xde\xdc\xd1\x52\xde\x14\x62\x1e\x92\x79\xb5\x9e\xc4\xb7\xcb\xfc\x97\x8f\xef\xde\xee\x1a\xa7\x66\x9d\x29\x73\xc9\x2f\x69\x7e\xb6\x1a\x9b\xde\x46\x92\x4c\xa1\xc5\x32\x8a\x0b\xe8\x56\x55\xf8\x50\xb3\x90\x77\x19\x7d\x0f\xbd\x4f\x8e\x31\xeb\xca\x7d\x6d\x81\xee\x39\x4d\xc7\x64\x3b\xca\x1d\xe5\x04\x1b\x6c\xea\xa2\x99\x6b\x4c\x97\x43\x16\x6b\x1c\xb6\x39\x43\x2e\x3b\x8c\xa5\x82\x74\x33\x5f\x01\xc3\x0a\x27\x6c\x59\x03\xac\xd2\xbe\x15\x9f\xd5\x71\x91\xd0\xb9\x25\xcc\xac\xeb\x72\x4c\x90\xb5\xbc\x5a\x02\x5f\xf6\xa1\xe9\x3e\x58\xac\x7d\x69\x9a\x1a\xf9\xc5\xfb\x01\xa3\xb1\xc7\x7f\x43\x65\xf5\x65\x30\xf8\x07\xca\xa9\x62\xed\xef\xf0\xdc\xe1\xe5\xc1\xc1\x46\x81\xbd\xbf\x0f\x2c\x28\xdc\x09\x76\x6a\x96\xba\xbb\x11\xac\x9f\x5a\x8d\x51\x8e\x41\xbe\x56\xc0\x21\x6a\x89\x2b\x75\x9b\x27\x9a\x1f\x04\xd5\x41\x9f\xfe\x0d\xe8\xfe\x06\x74\x7f\x53\x26\xf5\x33\xfd\xb2\x2f\x84\xe6\x9e\x83\x12\xdc\xaf\x14\x2d\x03\xfe\x46\xf9\x6c\x34\x41\x9e\xbc\x44\xfe\x04\x7a\xe6\xe0\x23\xed\x14\x74\x73\xaa\xa3\xe8\xb6\xd7\x4a\x5b\xb6\x99\xcf\xef\xea\xb1\xb4\x6f\x41\xeb\x36\x5d\x30\x55\x87\xc7\xa8\xec\x78\x84\xed\xf3\x2b\x33\xc0\x54\x28\x90\x61\x86\xc3\x63\x16\xe8\x11\xf1\x9e\x45\x53\x33\x62\xa1\x25\x93\x80\xb3\x5e\x9e\x0e\xfc\xda\xbc\x83\xb4\x02\xb2\xe9\x34\xfa\x5c\xe7\x55\x91\xd0\x35\x98\x49\xa0\x6a\x32\x9b\xcc\xa7\xa0\x38\x7b\xa3\x66\x23\x23\x04\x1b\x32\xdf\x82\x80\x31\xd8\xd5\x2b\x92\x5d\xe4\xc5\x01\x64\xe0\xb9\x98\x9f\xde\x2c\x4d\xe3\x4f\x63\x18\x01\x1b\x29\xc7\x6b\x1e\x39\x74\x60\x30\x74\xbf\xda\x77\x8f\xea\xa3\x39\x33\x4c\xfb\x67\xd7\x32\xac\xad\x16\x54\x07\x8f\xf8\x0c\xf5\x43\xe3\xc8\xdd\x37\x88\xf2\xd8\x2e\x45\x51\xc2\x32\x34\x19\x41\xd3\x39\x66\x1d\x75\x6d\x21\x44\xa4\x8f\x2b\x9a\xb1\xf1\x94\x62\x0a\x3a\x7a\xaf\xc2\xb1\xc3\x87\xe0\x0f\xf8\x08\x38\xa7\x99\x3d\x9e\x3f\x99\x8d\x67\x20\xc6\x33\x40\x07\x80\x88\x3a\x24\x57\x5f\x6d\xa4\xd7\xb0\xa6\x3c\x14\x01\x6c\xf9\xa7\xf3\xd7\x4d\x1e\xd8\x44\x9c\x0c\x9e\xa7\xcf\xac\x1a\xd9\xd5\xb1\x90\x85\x06\x12\xdc\xd3\x26\x79\x0f\x2c\x4d\xb9\x4a\x7e\x45\x5d\x84\xe7\x54\x94\x1e\x3d\x3f\x84\x9d\xf3\xec\xeb\x28\x0e\x22\xeb\xce\xb3\xfb\x3e\xdb\xdd\x2c\x30\x11\xb7\x49\x4e\xc9\x88\x65\xef\xb8\xd9\x58\x02\x0a\xeb\x15\x22\xa5\x0b\x58\xbc\x28\xe9\xca\xcf\x2a\x50\x5e\x13\x84\xcb\x58\x7a\x65\x94\x29\x90\xda\x15\x6a\xc4\x0d\x85\xf0\x56\x41\xe4\x5e\x99\xfa\x51\xc9\x3f\x98\x2b\x07\xa4\x1a\xe2\x07\xe3\x04\xe0\xa4\xdf\x46\xb1\x65\xfe\x69\xb9\x14\xab\x67\x5e\x81\xe7\x93\x16\x9a\xbe\x16\xa8\x8d\xd5\xf8\xe6\xa6\xfa\xfc\x58\xab\xd0\xef\xb4\x7c\x84\xf5\xde\x19\x91\x57\x20\xc4\xed\xd3\x7b\x8a\xd7\x4f\x22\x57\xfe\x70\xf9\xe3\x00\xe5\x01\x1a\x92\x8b\x1c\xd4\xa7\x0b\xec\xd6\xad\x13\x08\x39\x5d\x39\xea\x1c\xd5\x4a\xf4\xad\x63\x2b\xdf\xf5\x87\xc6\xc4\x18\xce\x86\xc6\xd4\x70\x66\x10\x66\x21\x60\x66\xb1\xbe\xd4\x01\x24\x2e\xb8\x0c\x48\x78\xe4\x8a\x6c\x4b\x40\x00\x5a\xc7\x18\xc6\xb8\x6b\x33\x62\xea\xe5\xb5\x8b\x5a\x13\xae\x61\xe1\x3b\x73\x18\x21\x68\x29\x84\x29\xf8\x43\x27\x02\xf8\x00\xb6\xcd\xf5\x1c\x53\x3d\x62\xba\xc6\xd3\x56\x73\xe7\xac\x43\x83\x1b\xc3\x1d\x35\x3e\xb8\x9b\x9a\x4d\xa6\x2a\xa5\x6f\x1c\x18\x96\xf3\x5f\x0d\x10\x59\xe3\x48\x9e\x29\x0a\xe9\xd5\x17\x56\xdd\xd8\x8c\x66\xcc\x96\xd9\x57\x28\xfc\x60\xf4\xf0\xda\x12\x60\x1a\x6f\x75\x52\x9a\x23\x4b\x7a\x73\x65\xdd\xf0\xc2\x0d\xc8\x55\x4f\x74\xf1\x24\xb8\xa4\xa1\x40\x52\xef\xd0\xe7\x8e\x60\x9f\x74\x86\x6a\x2c\x9e\x84\xe3\x50\x9f\x85\xce\xc0\xb1\x85\x53\xdd\x85\x1b\x68\x13\x77\xe8\xea\x8c\x40\x43\xc4\x1f\x62\x6c\xaa\xb2\x36\x3b\x9b\x1d\x4f\x2d\x4a\xd4\x8e\x55\x82\x0b\x78\xee\x6a\x68\x8c\x2f\x98\x1e\xc1\x3b\x2d\xf8\xcc\x27\x81\xb4\xa9\xf8\x23\x19\x02\xa6\xdb\xa1\xaa\x48\x33\x26\x68\xd9\x71\xdd\x62\x1e\x04\x4e\xe3\xb8\x87\xf4\xd8\x05\x61\x3d\xfc\xcb\x3b\x9d\x6e\xba\xa8\x05\xd8\xbe\xca\x97\xb0\x91\xe3\xc6\x35\x95\x91\x40\x28\x02\xbe\x03\x9f\x3a\xe8\x04\xbc\x86\x16\x2a\x18\x43\xb5\x83\x42\xcc\x7e\xb1\xce\x04\xb7\x2a\x32\xd3\xef\x01\x52\x99\xa0\xb9\x5a\xb0\x0c\x2c\xec\xb2\x23\xa8\x58\xc1\x79\x8c\x09\x84\x95\x28\xf2\xe4\x4a\x98\x29\xa5\xae\x56\x02\xfd\x12\xbc\xd4\x9d\xed\x0f\x75\xfe\x82\x2c\xa0\xbe\xeb\xd4\xc4\xf8\x29\xc5\xf8\x00\xac\xd4\xf9\x0a\xe5\x01\xdb\x08\x8b\x5e\x11\x8f\xca\x6d\x1e\x8d\x15\x20\x4d\x59\x97\x1e\x30\xdc\x78\x5a\xc6\x61\x26\x13\xa5\x7b\x77\x5d\x80\x75\x3a\x3e\x9c\x5b\x77\xc2\x0e\xc5\x4c\x80\x81\x0c\x21\x48\x12\x74\xc0\x47\x09\xfe\x39\xb6\x94\x88\x1e\x62\xb5\xee\x55\x32\xb9\x03\x0b\x02\xc8\x0b\x4e\x27\xa3\xc8\x51\x35\x64\xd6\xb0\x7a\xc7\xc8\x19\x65\x92\x58\xc2\x23\x06\xe3\xd4\xa1\xb9\xe8\xba\xb3\x04\x26\xc5\xe2\x7e\x59\xb4\x55\x86\x13\x23\xf3\xe7\x7d\x0e\xb9\xb0\x3c\xe0\xa4\x43\x46\x08\xd3\x03\xaa\x07\xe8\x9c\x8e\x0b\xe9\x3a\x97\x8f\xf7\xd1\x60\x2e\xcd\x84\xd9\x8f\x28\x9e\x21\xc5\x33\xe2\x05\xee\xca\xa5\x0b\x03\x60\x00\x26\x8f\x42\x2d\x62\xa7\xb3\xb1\x8e\xc0\x8c\x51\xae\xfa\x45\x8a\xe0\x18\x99\x2f\x6f\x1f\xce\xf9\x31\xaa\x21\x58\xd1\x47\x60\x3d\xff\x87\x5d\x72\x02\xd8\x09\xa8\x78\x0a\xff\x67\x68\x8e\x2f\x51\xca\xd3\xb8\x10\xa8\xfc\x97\x5a\xd2\x78\x77\x6b\x15\xed\x89\xda\x5f\xc5\x44\x8b\x49\x90\x7e\xa9\xe4\xf1\xc7\x5d\xa2\x7e\x17\x35\xe7\x86\x1a\x75\x94\x0f\xd1\x8f\x54\x16\xad\x7d\xa4\x0c\x6e\xd0\xd1\x05\xda\x87\x05\x15\x29\x85\x70\x32\x69\x19\x48\x45\xd5\x1c\x1d\xbf\xf6\xbd\x8b\x33\xdb\xe2\x13\x05\x1b\x00\x1f\x84\x5e\xe9\xc9\x0c\xa8\xb1\x28\xf2\x6c\x69\x10\x4c\xd0\xa5\xe0\x7a\xdf\xe4\xd7\xda\xf5\x6a\xc7\x86\xa4\xfa\xf6\x1f\x67\x6f\x5e\x95\xe5\xf2\x5c\x5e\x02\xa6\xb8\xda\xce\x97\x02\x43\x1d\x00\x1d\x51\x1e\x82\x1f\x59\xaf\x12\x46\x0e\x65\x0d\xe1\x2b\xfc\x2c\xbd\xa2\xb8\xce\x57\x78\x42\x03\xe2\x00\xb1\x76\x78\x0b\x61\x62\x29\xc0\x7a\x67\x73\xd1\x0d\x9b\xfe\x07\x56\x1a\xda\xd4\xe2\x23\xb6\x00\x31\x0b\x31\xa4\x2c\xd7\xc5\x13\xfe\x70\x34\xc2\xeb\x8c\xf2\xf5\xf1\xa3\xd1\x08\xf0\x4b\xae\x92\x11\x28\x97\x8e\x81\xcf\x06\x2b\x09\x9e\x40\xc8\x82\x68\x46\x8b\x9f\x6a\x41\x2f\xdd\x26\x20\x5f\x98\xaa\x5a\xc5\x5e\x12\x7f\x17\x30\x3d\x86\x7d\xb6\x74\x22\xf1\xec\x16\xad\x12\xb2\x05\xb4\xe0\xe5\xe9\x85\x64\x93\x5c\x27\x91\x22\x4a\xc5\x88\x57\x40\xb2\xa0\x13\x7d\x3a\x1f\x39\x44\x36\x1a\xcc\xc0\x00\x2c\x96\x97\xac\x8f\x90\xd1\xe3\x01\x7a\x2c\xe8\xc6\xd7\xe5\xec\xf0\x7f\x0d\x8c\xd4\xc0\x4c\x6f\x4e\xbf\xc4\x36\xbb\x27\x38\x09\x02\xb1\x2c\x77\x0c\xcd\x06\x98\xfa\x39\xfa\x19\xc6\xdc\xc8\x27\xb5\x67\x21\x82\xeb\x32\x33\xc4\xb4\xa9\x4a\x52\x22\x97\xb9\x90\xba\x34\xe3\xdb\x0b\x95\x2c\x70\xe5\x0f\x84\x43\x94\x15\x6e\x4c\xee\x0c\x8f\x83\x0f\x0e\x66\xdd\x94\x36\x02\xb9\x17\xf9\x2a\x85\xc8\xc8\x93\x29\x3c\x43\xad\x63\x80\x63\x74\x6e\x42\x8b\x18\x74\x63\xd5\xbd\x13\x3d\xc8\x57\x03\xdd\xd7\x1e\x3c\x8b\x44\x70\x39\x80\x36\x83\xbf\x1a\x36\xfd\x35\xc8\x97\x32\x01\x98\x0d\xfe\x4a\xf5\x85\xf4\xbf\x0c\xad\x42\xc8\xb7\x0c\xd3\x2d\x2c\x54\xf6\xc1\xd0\x77\x17\x91\x62\xdf\x0b\x2e\xbf\x19\x43\x53\x87\x6e\x96\x3d\x97\x37\xd7\x4d\x00\x29\x50\x81\xe7\xc6\x88\x06\x61\x88\x63\x71\xfc\xaf\x9f\xe5\xbb\x97\x85\x79\x0a\xda\xd0\xde\xe9\x7d\xf4\x2f\xf4\xfe\xdb\xd9\xa3\x60\x15\xc3\x0e\x59\x63\x1f\x7d\x76\x23\xdc\xe0\xb0\xa2\xfb\x32\x8d\x11\xca\xc1\x0f\x44\x19\x94\xb9\x00\x34\x51\xd0\x49\x04\x48\x6d\x8d\xd9\xc7\x39\xba\x74\x16\x69\x09\xdf\x91\xaa\xf8\xa7\xf9\x7e\xa0\x19\x77\x52\xcb\x9c\xff\x3f\x1a\xb1\xde\xe4\x7d\xf5\x30\xef\xa8\x9b\x63\x90\x15\x1f\xa4\xde\x25\x6e\x20\x99\x94\x81\xda\x16\x03\x8c\x74\x43\x2f\xdb\x3b\x96\x24\x53\x4a\x71\x8b\x62\x59\x0b\x41\x05\x27\x23\x32\x34\xe9\xa7\x17\xea\x3e\x19\xb9\x00\xe2\x1c\x7c\xc4\x6a\xbd\x9f\x10\xec\xb8\xbd\x37\xc7\xd0\x2f\x86\x84\x9e\xf3\x21\xf4\x1b\x02\x54\x27\x29\xc6\x33\x3f\x8b\x3d\xb7\xfd\x3c\xbc\xc5\x34\x09\xc8\x8b\x66\x4d\x6b\x30\x9f\xea\xc8\x1b\x4f\x16\x50\x2b\x78\x57\x2b\x1a\xcb\xd9\x1a\xce\x36\xfb\xb8\x49\xf6\x63\x20\xdb\x05\xb2\x0f\x0c\x40\x9d\x6b\x04\x5b\xd4\x46\xaf\x53\xb8\xe1\x50\x38\xcd\xe1\x81\x1c\x91\x07\x5d\x50\xd6\x92\xf5\xac\xeb\x40\xbc\x36\x5e\xf5\x0e\xbf\x4f\xbf\x5e\x43\xc4\x1a\x53\xec\x0b\x88\xda\x6f\x33\xad\x98\x67\x7d\xdc\x84\xa7\x0d\xd4\x15\x80\x46\xc3\x69\x13\x8b\x8d\x3d\xfa\xc0\x43\xc6\xaa\x58\x03\xfb\x26\xf0\x83\x0a\x91\x88\x52\x0c\xf0\xa5\x6e\x08\xc2\xfe\xcf\xd9\x29\x7b\xc1\x5e\xb2\x57\xdc\x98\xe4\x94\x47\x18\xc8\x74\xc2\xd4\x60\xaf\xdb\x32\xba\x85\x0a\x45\xbf\xb4\x45\x52\x89\xa0\xec\x57\xde\x02\x0c\xf6\x06\xdc\x73\xa3\x61\xec\x8c\x1f\x99\xae\x63\xfe\x59\xfd\x04\x51\xb3\x05\x21\xfe\x4f\x5f\xed\xaf\x93\xaf\x53\x08\xf3\xad\xca\xfc\x3a\xb1\x87\xee\xd7\xa9\x05\xe1\xf4\x5b\x7e\xf4\x75\x62\xc2\xab\x05\xed\xb9\x69\x54\xff\xaf\xb2\x28\x5b\xf0\xf5\xa1\x05\x4d\x8e\xd8\x3b\x7e\xf4\xa7\x79\x72\x7e\x7a\x52\x3d\x3d\xf9\x78\x5a\x3d\x3d\xaf\x9e\xbd\x7b\x03\xff\x9f\x9d\x9d\xbc\x7d\x5e\x9d\x9e\x3d\x3d\x7d\x5e\xbd\x3a\xaf\x5e\x9f\xbd\xac\x5e\xbf\x7d\xff\xe9\xa2\xfa\xf5\xf4\xf3\xcb\xd3\xb7\xd5\x9b\xd7\x6f\x7f\xad\xce\x4e\x2f\x4e\xaa\xf7\x27\xe7\x27\x67\xd5\xc7\x77\x9f\xce\x9f\x9d\x56\x17\xe7\x27\xcf\x7e\xad\x7e\x7f\x7a\x6e\xed\x1f\xb1\xf7\x5d\x41\xae\xc7\x21\xee\x1a\xdd\xc0\x66\xe7\xfc\xae\x23\x5b\x4e\x17\x39\x7c\xe0\xf2\x1e\xe5\x87\x6d\x03\x12\x95\x69\x82\x9f\x1d\x3c\x6f\xbe\xd6\x39\xd5\x37\x47\xb7\x8a\xd0\x4e\xbb\xcf\xf5\x96\xa9\x73\x8b\xed\x9e\x78\x07\xa5\x2b\xe5\x9e\x84\x28\x9d\x48\x01\xc9\x68\x5e\x6a\xd6\x4d\x7b\xf7\xe8\xa6\x6e\xfd\xa1\x6a\xd6\xf6\x74\x26\xd3\x9a\x7d\xc4\xcb\x8a\x17\x98\xac\xd2\x19\xb6\x1e\xf6\x61\x4d\x26\x5e\x7e\x60\xb3\xe7\x6d\xdf\x8c\x3b\xcd\x8a\xf5\x4a\x90\xdd\x7f\xfe\xee\x4c\xdf\x7f\x03\x37\x81\xf6\x05\xf1\x84\x08\x07\x65\x3e\x48\x65\xd4\x7e\x94\xca\x84\xc9\x51\xaa\xe6\x1b\xc4\x05\x5d\x95\x03\x1b\x2e\x66\x71\x06\x30\xd4\x90\x7b\x32\xa7\x28\x09\xc3\x6e\x3c\x6c\x06\xb4\x18\x41\xa4\x41\xe7\xce\x1b\x1c\x73\xcf\x1d\x6f\x8c\xe0\x97\x76\x03\xfd\x99\xbc\x73\xe4\xab\x8f\x85\xa8\xb8\xf9\x5a\xa8\xbd\x90\xe3\xd7\x18\x6e\x81\xad\xa3\xed\x8d\xcd\x45\x87\xad\xf8\x61\x92\xbc\xe9\x80\x51\x9b\x6c\x36\x03\xc4\x4b\xa9\x44\xbc\x80\xe1\x53\x99\xbc\x71\xa1\x0a\x45\x1b\xc6\x5e\x02\x96\x4d\x20\x5c\x53\x3a\x9c\x3c\xb9\x1c\x5f\x82\x1e\x8b\xc9\xe5\x14\x71\x3d\xc0\x36\x3c\x27\xdf\x85\x4f\x3d\x02\x6f\xca\x6d\x79\x68\xfc\xf5\x99\x3a\x05\xfe\xd8\x17\x63\xc0\x1d\x5d\x55\x80\xe5\x35\xde\xde\xeb\x07\x58\xde\x46\x80\x25\x91\x2e\xc6\x10\x10\x1f\x02\x4e\x45\xf1\x20\xc6\x7f\x62\x78\x81\x9d\xfd\x8e\x7f\xfe\xc0\x3f\x4d\x06\x75\xa4\x92\xc1\x2a\xb7\xca\x3c\xba\xeb\xea\xfb\xfc\xf8\x5f\x20\x3f\x81\x8e\xa3\x77\xad\x0b\xb3\xef\x3f\xc8\x83\xe3\xba\x48\x2e\x38\xe5\x75\xd6\x89\xd8\xc0\xe0\xf7\x08\xdf\xfb\x44\x00\xf2\x1d\x88\xdd\x32\x28\x6e\xe2\xa2\x2c\x06\xf2\x1c\x66\x20\xe5\x0d\xa5\xd2\x6b\x2f\x71\xc6\x19\xc8\x66\x5c\x6a\xa1\x0b\xf8\x6f\xdd\x83\x8c\xd1\x13\x54\x7c\x2c\xdc\xfc\x4a\x25\x64\x33\xfc\xee\x64\xce\x37\x0f\xd7\xba\xa9\x4a\xdc\xb2\x7d\x2e\x99\x55\x83\xbf\x94\x27\x68\x98\x28\x1c\x47\x20\x0e\xf8\xe5\x14\xdd\x54\x95\x0c\x09\x3b\xf9\x6f\x36\x47\x04\xde\xc9\x87\xf7\xce\x09\x09\xd5\x75\x8e\xe6\xb6\x07\xde\xd5\xb3\x99\x4e\x9d\xd6\xf9\x4a\xa9\xff\xa0\xd3\x51\x25\x16\xf8\xb2\x71\x92\xd8\x2b\xc2\x40\x79\x6f\x86\x21\xf4\x56\x0e\x1d\x6f\x7b\xee\x3e\x57\x62\xbf\xc1\x10\x10\x74\x6d\x1d\x94\x3c\x24\x35\x2d\xd6\x7e\xd0\x66\xa9\xee\x15\x93\x87\x96\xca\x83\xc7\xfc\x13\xf7\xf1\x34\xbb\x7b\xfa\xd1\x35\xec\x35\x58\x0b\xbf\x7f\x9e\x03\x91\x26\x8a\xcd\x42\x3b\x69\x4c\xc6\xe1\xa5\x63\x5c\x1c\xbf\x64\xbf\xe3\x8f\x8f\x97\x84\x81\x5a\x2c\xab\x6b\x75\x5f\x12\x13\xab\x7a\xb1\x3d\xc1\x0e\x80\x00\xbc\xa8\x08\x7b\xfc\x19\x80\xf7\x9e\xbc\x26\xf3\x02\x6f\x58\xdc\xf7\xe1\xa5\x86\xb1\x87\x5f\x9e\xf8\x3e\x26\xc2\x3e\xe3\xc7\x6c\x2f\xcd\xcf\x78\x4a\xf1\xc2\x5c\x82\x2a\x41\x64\x6d\x2e\x4d\xf9\xde\x59\x92\x54\xc1\x9a\x1a\x30\x22\x8a\x54\x66\x63\x0f\x74\x82\x48\xb2\x29\xc4\x73\x9a\xed\xed\xe8\xba\xc0\xd0\x1f\x0e\x71\x1c\x74\x11\xf7\xb5\xe0\x04\xaa\x53\xef\xc6\x0c\xfd\x43\x30\x77\x16\xc3\x2b\x1e\x78\x81\x4f\xcf\x6f\x2a\xc3\x21\x7a\x87\x79\x46\x06\x1b\xba\xfb\xc2\xae\x8b\x43\x1d\xde\x7f\x0e\x63\x39\x9b\x24\xe1\x14\xc2\xbe\x86\xd0\x00\x2f\x2a\xfc\xc3\xfd\xaf\xde\x11\x68\x73\x0a\xb3\x91\x11\x47\xef\x38\xf6\x4d\x8f\xae\xcc\xb8\xe1\xc4\x9b\x3a\x21\x46\x17\xed\x45\x08\x0f\x6f\x82\xc9\x83\x17\x9f\xcd\x7d\xbc\xa4\x7f\xa7\xf3\xe6\x00\x00\x19\x65\x9a\x8d\x9f\x0c\x26\xb3\xe4\x08\x74\x6b\xbc\x8a\xff\x9e\x2d\x48\x6a\x9a\x04\x0b\x39\xbe\x2e\x6b\x40\xe9\x90\x87\x9b\xea\xa0\x4f\x3e\xe6\x3e\xaa\xe5\xa3\x1d\x2d\x5a\xdb\xde\x9c\x86\x1e\xd3\x77\x76\xbf\xa8\x6f\x77\x7b\xc7\xa4\x2c\xe0\xdd\x76\xe0\xd2\xda\xd7\x87\x53\xba\xd1\xa9\x69\xf2\x75\x3a\x75\xee\xf3\xbf\x11\x15\xa1\xbd\xc5\xe3\x2c\xb0\x73\x96\xbc\x05\xe2\xff\xd0\xf5\x87\xd2\xfc\x0d\x68\xad\x03\x02\xba\xa2\x18\x80\x04\x0c\xc0\xa8\x60\x03\xaa\x28\x06\xca\xc9\xd3\x07\xb8\x92\x31\x60\x79\x17\xa4\x45\xfa\x9c\x00\x42\x0f\x10\x32\xe2\xa1\xe6\x3f\x97\xb9\xff\x8d\xc3\x0a\xd7\xc8\x33\x2c\x97\xc9\x09\x80\xec\x00\xf2\xf3\x25\xe5\x2b\x0c\x08\xe9\x66\xd3\x2e\xcf\x25\x7b\x4e\xfb\x87\x0d\xe3\x1f\x1c\x84\x98\xde\x90\x9f\xaa\x13\x10\x0b\xf6\x7f\x8f\xe3\xa1\x20\x5e\x5b\x25\x20\xb5\xcf\x4b\x3c\x55\x9b\xea\x84\x21\x1e\xf2\x74\x78\x6f\x7b\x61\x78\x8a\xf2\xf7\x06\x5c\x90\xc8\xd0\x06\xf5\xab\xcb\xd2\x0b\x22\x6a\xa1\x0f\x1c\x7a\x5b\x17\xf1\xde\x1e\xb3\xee\xce\x75\x5e\xf0\xb3\xdf\xb9\x8d\xb7\x8f\x00\x4a\x37\x6b\xd9\xdb\xe0\xd3\xa9\xdd\x91\x5b\x6b\xb8\x79\xe4\x32\x8c\xd4\x3d\x49\x1c\x87\xcd\xb7\x48\xc7\xef\x75\x65\x4c\xda\x2b\xc6\xcb\x4c\x31\x04\x6d\x0c\xd0\xd2\x76\xa7\x4e\x2d\x98\xb4\xb9\x1d\x8a\x66\xc1\x78\x2b\xac\xd7\xb5\xdc\x5d\xd5\x72\x76\x4b\xea\x47\x5d\xa9\x8f\x41\x6a\xc7\x20\xb8\xdd\x6a\xf9\xd5\x44\x4f\xfe\xe9\xf2\xe8\x25\xb4\xed\x85\x7b\x80\xd3\x2e\xf1\x92\xe4\x95\x39\xd7\x1f\x46\x5f\x0e\xd5\x51\x97\xf6\xb0\x29\x8a\xeb\xc2\x4a\x26\xe9\x94\x2f\xe0\x0f\x0d\x9e\x41\x70\x98\x58\x2c\x97\xdd\x9b\xce\x23\x76\x69\x39\x40\x4f\x06\x12\x04\x34\xe5\x43\xf3\x10\x6f\x33\xe6\xbd\x49\x75\x84\x69\x0d\x33\x69\xab\x97\x7c\xa7\xbe\xbb\xdd\x6d\x77\x36\x95\x7e\x6f\x54\x55\x71\xb7\x17\xae\xdb\xb7\xc1\xb0\x95\xf9\xea\x96\xf2\x8e\x94\x9a\x73\x4d\x14\xd6\x6f\x5d\x6d\x68\x5a\x4d\x96\xae\xa1\x42\x12\x6a\x0b\x64\x35\xfd\x8c\x29\x61\x4a\x88\x51\xca\xb8\x4c\x04\xdb\x92\x9b\x39\x9e\x25\x80\x3e\xec\xaa\x80\x4d\xdf\x50\x36\xe0\xfc\xbd\x8d\xeb\x5a\xab\x3f\x26\x42\xbc\xb4\xe7\x69\xd1\x16\xcd\x76\x98\x9f\xcf\xf9\x5a\x7e\x84\x83\xc2\xa1\xcd\x89\xd9\x7c\x80\xa3\x4c\xd2\x39\x96\x32\x65\x7f\x2c\x0d\x06\xb1\x0b\x42\xc1\xb4\x3b\xab\x69\x19\x4d\x14\x3f\xf3\xc1\x25\xb4\x54\x21\xa9\xdc\x90\xd6\xc0\x68\x4a\xfd\x35\x04\x0c\x1f\xd6\x62\x75\x2b\x11\x3b\x5f\x77\x97\x51\x88\x6e\xd5\x15\x6b\x53\xed\xdb\x86\x89\xb2\xcb\xed\xb1\x8e\xce\x80\xe3\xd1\x8d\x7a\xb6\x24\xfa\xdf\xcc\xd6\x6f\x72\xaa\x89\xda\x89\x49\x53\xb4\x6b\x4d\x3c\x40\x07\xce\x9d\xdc\x5f\xe7\xa3\x77\x9d\x9b\x90\xdd\x8e\x2c\xc5\x6d\x9a\xb2\xb8\xcd\x82\xde\x34\x4d\x7e\xc3\xdf\xed\x80\x45\x53\x34\x07\x26\x72\xc1\x08\x2a\x71\x43\x66\xc5\x0d\x89\x20\x0e\x0f\x67\x94\x33\x56\xcb\x43\x60\x19\x02\xf0\x82\x5f\xbc\x8a\x52\x4b\x34\x6e\xa8\xdc\xba\x01\xce\xab\x5d\xbb\x89\x87\xf8\xfa\xe2\x1e\x60\xf0\xf6\xeb\xd9\x99\xba\xd9\xa6\xbf\xa7\x68\x40\x32\x42\xe4\xe8\xb1\xae\x20\x94\xec\x01\x5c\x96\xe7\x62\x20\x94\xe4\x73\xe8\x17\x8f\x23\xe5\x11\x50\x93\xd8\x9f\xb4\xff\x0a\x41\x43\xaf\x84\x5f\x04\xf3\x7a\xbc\xf1\x6c\xcc\x64\xcd\x29\x29\xb9\x27\x43\xc8\x9d\x57\xad\xe4\x41\x20\x6d\x3b\xfa\xe9\x26\x31\xd5\x64\xab\xf8\xfd\x79\x7e\xf4\xe4\x9d\x4c\x78\xe0\x7e\x77\x3a\xef\x55\xd5\xcf\xfc\x11\xaf\xba\xa9\x6b\xd9\xbe\x53\xa2\x7a\x90\xc8\xe2\xd5\x08\x77\x57\x60\x6a\x77\x93\x8b\x35\x0c\x00\x3f\x2b\xfa\x9e\x74\x47\x6b\x82\x37\xbd\x1e\x0d\x82\x99\xf5\x52\xe7\x2e\x5a\x18\x67\x63\xf0\x56\x0f\x64\x06\x8f\x37\x47\x16\x55\x45\xd9\x3d\xab\x7f\xe5\x40\x1e\x64\xf0\x67\x32\x09\xc9\x24\xdb\xa0\x94\x63\x5a\x50\xbe\xe1\xc9\xa7\x4e\xdc\x72\x6f\x5b\x79\x02\x79\xc4\xb6\x85\x1b\x4d\x99\xde\xc5\x1c\x81\x8d\x21\x92\x0b\x53\x64\xd7\x2b\x6f\xf9\x71\x1d\x04\xa2\x28\x1c\xfd\x4e\x7a\x63\x55\xd5\x77\xbc\x8f\x6d\xce\xcc\xb9\x09\x1d\x08\x6b\x32\xcf\xa2\xf3\x59\x7a\x21\xf9\xdc\x18\xb3\x73\xfd\x32\x52\xff\x68\x82\x27\x2b\x9a\x6b\xcc\xf8\x01\xce\xe3\xa8\xf9\x58\x0b\xa4\x17\x6f\x40\x93\xf8\xc8\xa6\x66\x44\xf7\x9e\x55\x4e\xb2\x24\x41\x32\xa3\x5e\x03\x0b\xf3\xdc\x9b\xcb\x69\x14\xcc\xd1\xda\x39\xc5\xc4\xaa\x3c\x25\x0c\x76\x1e\x95\x06\xa0\x28\xfa\x80\x2b\xb0\xea\x9d\x02\xbf\x85\xde\x19\x1e\x69\x41\xbf\xd6\xb0\x35\xcf\x74\x4d\x3f\x2e\x41\x14\xe9\x26\x4b\xa7\x95\xb4\x77\xcb\x62\x57\x42\x21\x84\xc0\xd1\xab\x2a\xbc\xdd\xab\x9b\xd9\x33\x0f\xad\xda\x2d\x44\x9a\xa2\x36\x8d\x26\xa3\x04\x78\x48\x45\xb7\xd7\xe0\x84\xf3\x6b\x57\xfe\x38\xf8\x71\xe5\xae\x56\x32\x01\xd1\x7c\x0e\xae\x5f\xe5\x2f\x88\xfd\x32\x5f\x95\x85\xdb\x7f\xe5\xa9\xb3\xe3\xf0\x55\x0e\x7d\x70\x20\x7f\x6d\x2f\x0d\xf5\xb3\xb9\x7d\x06\x90\x02\x39\x0f\x8e\x8e\x7e\x1a\x14\xf9\x7a\x15\x88\x33\x6f\xb9\x04\x05\xfe\x74\xfe\x86\xeb\x7f\x5b\x28\x8d\x33\x7b\x51\xe0\xa1\xfc\x83\xff\x0b\x00\x00\xff\xff\x5e\x87\x38\xfe\x9a\x48\x00\x00") + +func uiJsLibsMithriljs020MithrilMinJsBytes() ([]byte, error) { + return bindataRead( + _uiJsLibsMithriljs020MithrilMinJs, + "ui/js/libs/mithriljs/0.2.0/mithril.min.js", + ) +} + +func uiJsLibsMithriljs020MithrilMinJs() (*asset, error) { + bytes, err := uiJsLibsMithriljs020MithrilMinJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/js/libs/mithriljs/0.2.0/mithril.min.js", size: 18586, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiJsLibsMithriljs020MithrilMinJsMap = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xac\xbc\x5b\x53\xea\x4e\xdb\x27\xfc\x5d\x56\xdd\x67\x5a\x8f\xa2\xe2\xe6\x7e\x8f\x92\x4e\x08\x31\x46\x84\x88\xc8\x7a\x6b\x6a\x0a\x21\x42\xd8\x04\x0c\x01\xd1\xa9\xf9\xee\xd3\xd7\xef\xd7\x21\x41\x5d\xff\x7b\x3d\x53\xb3\x0e\x96\x49\x77\xa7\x37\xd7\x7e\xd7\xfc\xaf\x5f\xdb\x38\x5b\x27\xcb\xf4\xd7\xbf\xcf\x8f\x7f\xbd\x26\xf3\xf8\xd7\xbf\x7f\x2d\x92\x7c\x92\x25\xf3\xff\x5a\x24\xe9\x7f\x4d\xd7\xbf\x8e\x7f\xad\x97\x9b\x6c\x18\xaf\x7f\xfd\xfb\xff\xdf\xf7\xe9\xf6\xff\x71\xfc\x2b\x1d\x2c\x4c\xb3\x1e\x35\x58\xad\xf4\xff\xef\x49\x3a\x5a\xbe\xeb\x87\x4d\x3a\x8a\x5f\x93\x34\x1e\xe9\xe7\x24\x4d\xf2\x64\x30\x4f\x3e\x63\xfd\xf2\xaf\xd1\x72\xb8\x59\xc4\x69\xae\x9f\x2b\x8f\xff\x9a\x2f\x87\x83\x5c\xb6\x72\xfc\xab\xf2\xf8\xaf\xe1\x20\x1d\xc6\x73\x2b\x4d\x16\x68\x6a\x64\x7a\x4d\xdd\xfe\xa7\xe6\x79\x3c\xc8\x1e\x93\x45\xbc\xdc\x60\xd2\x2c\x7e\xdb\xc4\xeb\xfc\xdb\xb8\x3f\xb5\xaf\xe3\xbc\xfc\x5a\x77\x0d\x27\x72\xb2\x6c\x0c\x30\xcc\x93\x21\x97\x9e\xcf\xd9\x8a\xbd\x4b\xd7\x64\xb0\xb6\xf2\x3c\x93\xc7\xfc\x63\x25\x83\x5a\xf6\xad\xab\x1e\x65\x98\x69\x1f\xce\x07\x6b\x0c\xba\x37\x3b\x8d\x31\x4b\x3e\x18\x17\x9d\xb1\x0c\x8b\x1e\x3b\xfe\xbd\xa7\x1f\xdc\x2c\x5b\x66\xfa\xef\x6a\x90\xad\x63\x79\x88\x77\xf1\x50\x60\x29\x00\x5d\x6d\xd6\x13\xf4\x25\x99\x59\xe2\xa1\x18\x36\x9c\x24\xf3\x51\x16\x03\x8c\x71\x3a\xce\x65\x9c\xd5\xe9\x58\x7d\x33\xd0\x2c\xaf\x77\xdc\x7a\x4f\x1f\xb2\xe5\x2a\xce\xf2\x0f\xdd\x30\x5d\x26\xf2\xcd\xcb\x46\x7f\xce\x65\xf5\xd9\xdc\x79\x6c\xd0\xc3\xf7\x47\xec\x96\xcf\x6a\x30\x9c\xc4\xfb\x37\x5f\xa3\x7b\x27\x18\x1d\xe4\x03\xc0\x48\x77\xca\x3c\xeb\xc9\x72\x33\x1f\x75\x62\xbd\xf4\x00\xc0\x4c\xcc\xc0\x78\x94\xe4\x83\x97\xb9\xcc\x00\x32\x5a\x0d\x08\xdc\x65\xfa\x9a\x00\xdc\xf9\x32\xca\xb3\x24\x95\x05\x81\x99\xcd\x4b\x9e\xc5\xf1\x7e\xee\x47\xc2\x59\xd6\x33\x8f\xe9\x72\x04\x10\x2e\x5f\x5f\x35\x1a\xe5\xb3\x74\x54\x90\x04\x67\x5e\xe7\xd9\x66\x98\x03\xac\x09\xe1\xc3\x76\x4d\x6d\x24\xe0\xf9\x07\x76\xa8\xb7\x9a\x73\x49\x2b\xcb\x06\x1f\x6a\xb9\x01\x0c\x1c\xf7\xce\x7d\xf4\x5b\xf7\xfa\xd1\xbf\x8f\xdc\x8e\x79\x0e\x5b\x4f\x2e\xf0\x93\xac\x73\xee\x97\x87\x0e\x07\x32\x53\x92\xfa\x23\x0d\x1f\xcd\x00\xd8\xdc\x2c\x96\x25\xf4\xfc\x24\xef\xf1\x06\xf8\x9c\xb2\x67\xed\x24\xaf\xaf\xc4\x22\xce\xa8\x48\x23\x72\x46\xf3\xf8\x9a\x2d\x85\xd7\xe2\x3d\x5e\x86\x99\x06\x6d\x5c\xe2\x89\x33\xcb\x4a\x2b\x8d\x5b\xd0\xc3\x20\x1d\xc7\x64\xe3\x2c\x37\x7f\xd4\xbe\x31\x8d\xdf\x55\x81\x2b\x1c\x76\xff\x89\x0c\x5d\x19\x92\x1f\x6d\x16\x0b\x82\x46\x13\x59\x6e\xc7\xaf\xcb\x2c\x2e\x68\xed\xde\x80\x1d\x5b\x2e\x40\x95\xe4\xb1\xec\xf3\x5f\x1a\xe0\xeb\x1c\x93\x0b\x76\xf6\xd4\x72\xcf\x17\xd0\x42\xeb\x55\x3f\x6d\x93\xf8\x7d\x4d\x64\xe4\xd9\x72\x3e\x8f\xc1\x33\xd2\x2a\xb3\x2c\xb3\x64\x9c\xa4\x83\xf9\xc1\x80\x82\xe2\xb2\x78\x94\x0d\x64\x98\xc6\xae\x06\xc5\xf8\xe3\x60\x14\x56\x06\x20\x56\x9a\x1c\x34\x7a\x3a\xe4\x7c\x10\x4a\xba\x49\xe7\xcb\xc1\x08\xd2\x4a\x1e\xb8\xaa\x3e\xfd\x88\x5f\x0a\xe0\x85\x65\x03\x8d\x1a\xe1\xe9\x97\x69\x0c\xc2\x98\xf1\x5d\xf3\x90\xe9\x21\xd5\x2a\xbd\x6a\xbc\xcb\xb1\x27\x41\xbc\x7e\x68\x74\xef\x95\x21\x93\x55\x16\x6f\xf5\xd1\x9d\xf8\x75\xb0\x99\x03\x46\xeb\x7b\x1c\x6f\xb7\x98\x03\x61\xc9\xfa\x2b\x3e\xef\x23\x8a\x24\xd9\x43\xf2\xb2\xc9\xe3\x02\x44\xba\xaf\xc2\x3f\xff\x5a\x82\x65\xb7\x83\xf9\x26\x2e\x06\x60\x1b\x22\xa9\x5e\x06\xc3\x19\x40\x2d\x7b\x6f\x3e\x86\x77\xfb\x45\x1e\xf5\x20\x83\x08\x41\x8e\x11\x0c\xdb\x65\x32\x32\xcb\xaf\x8b\x49\x81\x22\xa1\xac\x6d\x85\xd2\x92\x34\x8d\x33\x33\xa1\x7c\x5f\xe1\xc2\x27\xb3\x13\x91\x04\x2f\x15\x38\xee\xc9\x64\x54\xbc\x15\x3d\x07\x1d\xf2\xe5\x46\xb3\x69\x81\xd8\x6c\x83\x63\xae\xf3\x8f\x79\xfc\x05\x20\xdf\x20\xa4\x5f\xb5\x30\x59\x0f\xc6\x94\xf2\x8b\xe5\x36\x56\x13\x8a\xb4\x3d\xb2\x87\xa6\x21\xd5\x00\x88\x92\x97\x39\x99\x36\x59\x57\xa4\xdd\x5c\x4b\xa3\x89\x06\x2b\xc8\x80\x54\x6f\x8d\xa6\xba\x31\x2d\x60\xb8\x2c\x88\x01\x58\xc5\xf6\x06\x9a\xb1\x96\x8b\xd5\x26\x2f\x94\x97\xa6\xb8\x46\x92\xad\xbf\xb4\x8e\xe3\x5c\xb8\x19\x6c\x17\x40\x1c\x08\xcc\x0a\x71\xaa\x7b\x73\x4d\x87\xf8\x1f\xb3\x92\xd5\xf2\xe5\x6d\x44\x32\x1a\x88\xaa\xd2\x9d\xd4\xa6\x43\x3d\xf5\x32\xe5\x0e\xf2\x09\x49\x28\xcf\x84\x53\xb4\x0e\x5b\x41\x8d\x0d\xb1\x7a\xfc\x90\xc5\x1d\x40\xb4\xb9\x5c\x0a\x45\x64\xcb\x65\x6e\xfe\xac\xab\x13\xc9\xcb\xbf\xfe\x65\x74\x9e\x66\x56\xc2\xa0\x98\x64\xb9\xce\x0f\x66\xd1\x8a\xcb\x34\xf8\xa3\x83\x57\xa5\x69\x4f\x54\xa9\xc8\xcd\x41\x4e\xca\xc8\x16\x30\x02\x3a\x4b\x22\x2a\x33\x7f\x17\x46\x82\x2c\x48\x8c\x68\xb6\x3f\x0a\x22\xc2\x2b\x35\x21\x94\x19\xde\x1f\x04\x0a\xf2\x8d\x66\xe6\xec\x23\x12\xd0\xff\x32\xba\xb2\xcd\x16\xa3\x3a\xb4\x0c\x5f\x83\xa2\x16\x46\x32\x41\xa9\x63\xbe\x4e\x3c\x76\x77\x2b\x1c\x12\xf8\x16\x08\x6a\xc9\x50\x10\x3d\xc8\x33\x1e\xea\x3d\x75\x3b\xbe\xaa\x80\x19\x1b\xe8\xa6\xcb\x17\x11\x6e\x9a\x25\x0c\xc8\x89\x4a\x8d\x9a\x01\x9f\xde\x27\x09\x14\x9e\x96\x05\x9b\x2c\x2d\x4e\x33\xdc\x64\x54\xa4\xd9\x18\x3a\x6a\x9d\x0d\x4b\xb2\x5b\x6b\x4d\x85\x6f\xf2\x65\x77\xa5\x15\xb3\x1a\xac\x0d\xc1\x47\x43\x11\x67\x94\x39\x32\x60\x8d\xf7\xc7\xe5\x2f\xa3\xb1\x0f\x0f\xad\x45\xcd\x6b\x02\x6d\xbc\x11\x09\x3e\xa0\xe0\x20\x1c\x70\x36\xc3\xab\x71\xfa\xd3\xf1\xe2\xd1\x66\x48\x3e\x5a\x2c\xc1\x2d\x83\xcc\xca\xf7\xa0\x34\x2b\x68\xcb\x03\x73\xea\xf9\xf3\x82\x2a\x49\x30\xd4\xbd\xc3\x92\xba\x87\x05\xb1\xff\xa2\x52\x4a\x5e\x3f\xf8\xb4\x48\xd6\xd4\x02\xb0\x0e\x0b\x08\xe5\x13\xa8\x65\x3d\xd1\x72\xbe\x25\x17\x1b\x4e\xd3\xa2\x33\xd6\xd0\x83\x59\xb1\x19\x6a\x8b\x74\xad\x4a\x01\xf7\x3a\x48\xe6\x9b\x2c\xae\xb6\xe8\x89\x09\xac\x9c\x04\xd8\x71\xc5\x26\x73\x1d\xc3\xfa\x20\x86\x15\xb0\xbc\x9f\xb7\xe3\x46\xad\xbb\x27\x0c\x31\x1b\xac\x6e\x2b\x2d\x0c\x96\x65\xfe\x58\xbc\x56\x16\x1c\x1a\x12\xd3\x90\x34\xc6\xdb\x6b\x92\x95\x0b\xd3\xae\xe3\x0a\x7c\x5e\xc7\x73\x91\xac\x82\x8d\xc2\xdc\x4b\x68\x2c\xc0\x48\x98\x0e\x04\x87\xcb\x55\xa1\xd1\xf3\xe5\xdd\xf2\x7d\x4f\x15\xbb\x89\x8c\x7f\x0e\xef\x9a\x79\xbe\x32\x5a\x0d\xc3\x01\x3e\x4d\x87\x93\x25\xa4\x1e\x84\xc1\x66\x6d\x58\x68\xbd\x7e\x5f\x66\x23\x6c\x52\x2b\x81\xd1\x07\x60\xb3\x57\xf8\x68\x8a\x0c\xb8\xa4\x6b\x43\x3d\x69\x04\x67\xbe\xa7\x5a\x2d\x7e\x0a\x7b\xde\xc8\x25\x92\x06\x71\xab\x49\xc0\x6c\xa8\x19\x0f\x28\x3f\x34\x87\x57\xbe\x01\xa3\xfe\x2a\xf4\x26\x10\xf1\xf1\x12\x3f\xe3\x44\x0d\x2d\x26\x1c\x5a\x91\x6b\x63\xc1\x19\x10\x93\x9c\xc6\x34\xd1\xf5\x53\xb8\x17\x08\x18\x96\x69\xbd\x0d\xeb\x48\x33\x47\xb2\x22\x29\xaf\x57\xe6\x8f\x86\x20\x14\x9e\x50\xbd\x01\xb5\x66\x3d\x61\x9f\xe5\x08\xc0\x5e\x89\x7d\x50\xa8\x8a\x17\x6d\x99\x98\x3d\x68\x30\xb7\xf6\x18\x80\xb4\xa9\x30\x41\x29\x8a\xbb\x00\x73\xbe\x9c\xc5\x18\x38\xc9\x17\xb0\xdc\x8c\x7f\x63\xd4\x6c\xf1\x5a\x72\xbc\x11\x3d\xc5\xba\xda\xae\x1a\x6a\x29\x0d\xfd\x4c\x65\x91\xac\x1d\xf3\x51\x87\xf2\x1a\x16\x95\xfe\xbb\x67\xf6\x7c\xb9\xaa\xb2\x6f\xa3\x63\x85\xee\xff\xb4\xbb\x8e\xe7\x3e\x52\xa6\x52\x7b\x16\x16\x0e\xe6\x7c\xa0\x2d\x62\x58\xe9\xa5\xaa\x44\x8c\x80\xfa\x22\x11\xb4\x40\xe7\x6a\xd8\x21\x44\xc7\xe8\x50\xab\x2d\x40\xac\xef\xda\x3f\x34\x2a\xbc\x78\xac\x30\xc8\xf8\x50\x51\x9b\xa5\x0a\x75\x20\xf2\x3d\x2d\xdc\xb3\x91\xe6\x9c\x21\xad\x24\x63\x31\x15\xc3\x46\x87\xaf\x74\x4e\xf5\xc3\x5c\x9b\xdf\x71\x8a\x03\x0e\x46\x23\x57\xce\x77\x57\x69\x82\xff\xe1\x1a\x5d\xbd\x25\xa1\x4c\xb4\x9c\xfc\x55\x98\x09\x5f\xbf\x18\xc5\xd5\x2f\xb4\x2d\x50\xac\x08\x22\x28\xac\x4f\x73\x86\x07\x92\x62\xe1\xed\x00\xa9\xcd\x44\x94\xf7\x87\xab\x4d\x51\xa1\xb0\x09\x5f\x7f\xd1\x7b\x2b\x98\x4c\xf3\xfa\x3c\x2e\x68\x49\x66\xf8\x48\x87\xe6\xcf\x24\x5b\xa6\x9a\xb2\xc0\xb7\xcb\x75\x29\x12\x47\x7c\xd4\x30\x00\x73\x6e\x72\xcd\xa8\x30\x6d\x7f\xed\xfd\x5a\x21\x61\x0d\xf2\x71\xc1\x1a\xc9\x5a\xb8\xf4\x41\xf0\xb6\xd3\x56\x32\x00\x3b\x5d\x2f\xd3\x15\x08\xe3\x3d\x1b\x94\x0f\x11\x25\xeb\xfe\xbd\x10\x4c\x05\x13\x01\x32\x2b\xaa\x6b\x23\x78\x87\xe6\x5c\xf1\x6e\xa5\x7d\x0b\xea\x4d\x71\xfd\x05\xec\x8b\x91\x04\x0a\xb4\x9c\x5d\xe9\x0d\xae\x7f\xfd\xfb\xd7\xff\x87\x7f\x96\xfe\x77\xec\x59\x96\xcf\xff\x8f\xdb\x96\xd5\x55\x78\x54\xc7\xae\x65\xb5\xe5\xb9\x77\x65\x4b\x7b\x84\xf6\x5e\x43\xff\xaf\x52\xdb\x93\xee\x7e\x53\xfe\x6f\xf9\xc7\x91\x34\xe1\x8b\xfe\x1d\x9a\xc2\x4a\xd3\xbb\xfd\x80\xb6\xf6\xf1\xda\x96\xb7\x0e\xde\xa2\xe3\x81\xa5\x6e\x1c\x8c\xf8\xb0\x9f\xd0\xd6\x3b\xde\xd8\xf2\xf6\x8c\xb7\xfe\x71\xcf\x5a\xd8\x53\x17\x8b\x8f\x8e\x03\x4b\x75\xf4\xda\x81\x1f\xeb\xff\xef\x2c\xa5\x1b\x64\xaf\xa1\x65\x85\x78\x0e\x94\x1e\xaf\x32\xbd\xa6\x6f\x59\x6b\x5b\x3a\x9e\x6f\x65\xa2\x40\x1a\x86\x01\x1e\x9b\x18\xd9\x60\xb3\x1e\xd1\x0e\xe5\x50\xfd\xe3\x96\x5e\xe2\x5e\x1e\x31\x38\x04\x1c\xac\xfd\x7b\xa4\x67\xb6\x06\xfb\x77\x75\xd2\x6c\x01\x3a\x38\x7e\xef\xb6\x98\x4d\xed\xec\xb6\x3c\x8f\x6d\x7d\x7a\xab\xe7\xc8\xf8\x36\xa6\x3a\xee\x5b\xea\x4a\xb9\x68\xc0\xfe\xb0\x78\xab\x79\xdc\xb5\xd4\x8b\x2f\x53\x3e\x4b\xab\x7f\xff\x7d\x93\x01\x20\x21\xab\xc9\x63\x88\x61\x4a\xf6\x1b\x1e\x5f\x3b\x96\x9a\x3b\x98\x69\x84\x11\x31\xe0\x46\x68\xbc\x16\x9f\xab\x13\x5b\xd6\x4d\x6c\x69\x7e\x71\xa4\x19\xb3\xe8\xf3\xe0\x51\x90\xdd\xc5\x60\xec\x2c\x7c\x66\x73\x4b\x76\x2c\x0d\x09\x40\xf9\x52\x8e\xee\x73\x74\x03\xa0\x8f\x00\x94\xa9\xbd\xff\xa8\xfe\x87\x8f\x78\x86\x10\x7b\x9b\x9b\xe1\x6d\x4b\x7d\x62\xf8\x12\xc3\x27\x76\x39\xde\x23\x5e\x94\xde\x05\xb6\xef\x2f\xf0\xa7\xa5\x0c\xc8\x65\x9a\x89\x5d\x0c\x57\x53\xd5\xc5\x46\xb8\xa9\xde\x1e\xed\xa1\x55\x42\xd1\x3c\x16\x48\xf5\xf5\x93\x3f\x07\x92\x7c\x60\x66\x6d\xaf\x6c\x03\x07\x6c\x06\x24\xbe\xb6\x0d\x46\x5d\xcb\x5d\x39\xfc\xba\xa7\xd1\xeb\xcc\x6c\x99\x64\xc5\x2d\x6b\xde\x68\xcb\x28\xee\xc8\x20\x70\x86\x97\x08\x64\xe6\xea\x47\xb5\x55\x0d\xb6\x78\x96\xf7\x68\xe9\xb3\x79\x53\x20\x05\xb3\xfa\x9e\x3c\xf6\x27\x72\x4c\x55\x40\x42\x83\x31\xb6\xac\xd8\x11\x34\xca\x52\x82\xb6\x57\x19\xbd\xc4\x1e\x53\x9b\xe8\x1c\x63\x2f\x1f\x40\xfc\xca\x6c\x82\x8d\x6a\xee\xfe\xae\x00\xfe\xa9\xd2\x93\xda\xa3\x0a\x1e\xc7\x36\x01\xee\x5b\xee\x8f\x1d\xe5\xa4\x9a\x05\x57\x42\x80\x0d\xff\x37\xe8\xb9\x0b\xe6\x91\x0d\x78\xbf\x2b\xdf\x29\x12\x1d\x80\xd8\x1e\xf2\x98\xa1\xe5\xd6\x1c\xcc\xe4\x76\xc0\xd5\x09\x26\x0f\x81\xd4\x98\xa8\xc5\xff\x83\xca\xff\x61\x21\x89\x80\x07\x65\x48\xdc\x05\xf3\xf3\x03\xcf\x3a\xb3\xeb\x80\x39\xc9\xae\x03\x4e\x5e\x18\x10\x11\xed\xad\xe3\xa1\x90\x19\x25\x51\xc9\x81\x6d\x80\x9e\x12\x09\x80\x17\xf1\x66\xbd\xd9\xc2\xf0\x53\xf3\x69\x24\x5b\xa5\x40\x69\xc9\x48\x95\x83\x66\x7d\x90\xfe\x60\xa5\x2a\x28\xbf\xc6\x79\x22\x30\x48\x2f\xab\xf6\x5c\xca\xa9\xd5\xa7\x03\x59\x24\x53\x3d\x01\x40\x33\x1b\x90\xe3\xd9\xbb\x42\xee\x37\x68\xe7\x10\x41\x97\x6a\x62\x8b\xf8\x3f\xc6\x86\xfa\xe8\x6c\xc9\xe0\xac\x90\xd5\xb2\x2a\x90\xdb\x16\x69\xa4\xa6\x36\x44\x41\x08\xea\xee\x36\x40\x37\x24\xee\x76\x54\x02\x50\xcb\x5b\x8d\xba\x56\x2e\x47\xd3\xa2\xf8\x83\xc8\x20\x2f\x73\x91\xb0\x46\x01\x7b\x56\x6a\x03\x2b\x24\x29\xf4\xeb\xf6\x61\x57\xdb\x72\x6f\x9c\x17\x30\x29\xe7\x05\xea\xc3\x91\x59\x49\xb6\x2c\xa2\xc5\xad\x2b\x08\x52\x40\xcf\xc7\x06\x03\x4d\x55\x5a\x40\x8e\x20\xb2\xb8\x1d\x2b\x00\xc0\x0b\x46\x68\x09\xcb\x79\x1d\xf3\x49\x79\x1a\x01\x82\xbb\xb5\x89\x4f\xe9\x3c\xa5\xb0\x90\x3e\x8f\xd4\x43\x59\xa3\x29\x5f\x6f\xa9\x7f\x81\x97\x5b\x70\x4d\x24\xec\xa4\x79\xf2\xfc\x1b\x9a\xac\x80\x74\xd4\xae\x81\x51\x6a\x36\x61\x46\x6a\xd0\x72\xa8\x05\x00\x6a\x11\xdf\x5d\x81\x5b\xaf\xec\x04\x03\xad\x6f\x2b\x0e\x5e\x0a\xfe\x7e\x74\x48\x41\x7d\xcc\x15\x99\xed\x3f\x43\x51\x74\xcb\x1d\xb6\xc7\x6a\x2f\x6f\x5a\x2b\x97\x14\x5e\x9e\x06\x42\x94\xaa\x59\x34\x90\xc6\x3f\x78\x3e\x06\x62\xce\x6c\x36\x81\x0e\x08\x02\x6c\xd9\x9f\x14\x8b\xc9\x02\x67\xd8\xea\x8d\x91\x12\x2d\x8a\x8e\xb0\x7c\x13\xd9\xfb\x09\x05\x33\x06\xee\xb7\xf6\xc7\xd7\x3e\x41\xfb\x52\xf4\x8e\x4a\x1d\xa7\x5c\xf9\x9c\xd2\x28\xfa\xfc\xe3\x78\x21\x13\xd9\x03\xd4\x9c\x00\x4f\x88\x62\x28\x12\xa5\xee\x14\x80\x72\x9c\x01\x68\x48\x66\x6c\xbc\x94\x47\xf9\x2b\x6c\x9e\x93\x1f\xa6\x7b\x2c\xfa\x7b\x82\x0e\x92\xea\xd9\xae\xb1\x76\x66\xbf\x7f\xed\x33\x7b\x15\x12\x13\x06\xab\x39\x25\x6d\x79\x25\x69\xbd\xfc\x71\x33\x83\x2a\x69\x9d\x70\xc0\x11\xf7\x51\xbe\xc9\x5a\x5b\xe7\x87\x7d\x94\x7d\x25\xcc\x06\xf5\x3f\xf4\xc1\x50\x19\x0a\xb1\xb8\x22\xb6\x27\x9e\x9e\xd0\x6f\x18\x69\xa1\xbf\xd0\xbc\x50\xaa\xcf\x60\x7f\xa4\x29\x76\xe3\x4f\x94\xd9\xbc\xd8\x27\xbd\x0a\x81\x9c\x02\x86\x03\x41\x6f\x4d\xed\xd5\x13\xc4\xac\xd5\xc7\x47\xa9\x4d\x90\x02\x16\x1f\x36\x88\xd5\x1a\x70\x42\x83\x76\x3f\x41\x63\x6f\xae\x2a\xf0\xf5\x01\x96\x9c\x5b\xe4\x57\xbd\x4f\x80\x21\x3a\x25\x12\x6b\x7c\xfb\x70\x8a\x3e\x73\xd4\x00\x26\xa5\x19\x51\x1e\x3f\x80\x0c\x6c\xf8\xdc\xb0\x7e\x7e\x29\x41\x40\x51\x29\x8d\xaf\x25\x0a\x5f\xff\x9b\xd2\xe1\x6f\xe9\x49\x79\x7f\x47\x4e\x37\x76\x69\x6c\x87\xf5\x3f\x0c\xf6\x44\x05\xe3\x10\x91\xd8\x25\xce\x23\xad\x06\x20\xf9\x85\x0c\x04\x21\xdf\xc9\x0b\x06\xd2\x2f\x0f\x33\x98\x12\xe1\xa3\x19\x2b\x62\xf5\x13\x22\x74\x65\x27\xb0\x4e\xa2\x54\x95\xa2\x38\x1c\x1e\x8e\x13\x22\xb8\xa2\x12\x3a\x72\x85\xa8\x86\x5a\x32\xdd\xcd\xb5\xc5\x2d\xcb\xdd\x51\x9f\x95\xfc\xda\x9d\xe3\x4b\xff\x4d\x16\x55\xb7\xa5\x11\x03\x82\x69\x43\x0b\x74\x69\xf1\xad\xc8\xd9\xef\x98\x3c\x1a\xc0\x58\x73\x8c\x15\x4b\xe5\x24\xa3\x3c\x63\xc1\xeb\xde\xad\x71\x24\xcc\x7c\x62\xe9\x52\x44\x83\x3e\xb5\xa5\xf7\x46\xad\x76\x42\x19\xfd\x5c\x39\x54\x4d\x86\xbb\x27\xa5\x51\xd5\x3b\xc3\x3e\x1f\xea\x25\xbd\xf6\x88\xe5\x08\x67\x6a\x6f\x4b\xc2\x04\x35\x05\x53\x99\xfc\xd6\xe7\xa0\xd6\x84\x96\xfc\xbd\xd0\x42\x46\xc7\xc5\x28\xb4\x0b\x6e\x09\x2b\x8a\x33\x53\xa8\xb7\x6a\x8f\x36\x6f\x27\x0e\x0f\xde\xf5\x30\xce\x29\xba\x42\x5a\x21\x6e\xdd\x3e\x55\xd5\x95\x08\x69\x21\x95\x09\x49\x6f\x83\x0d\xb6\x3f\x1b\x07\xb8\x11\xb4\xd2\xe2\x0d\x53\x12\xa5\x21\xa6\xcb\x83\x6d\x9d\xdb\x25\x01\x6a\xc5\x40\x0e\x1d\xea\xd7\x81\xa6\x47\xee\x25\xc5\x9f\xa1\x86\x69\xaf\x70\x65\xb8\x75\x6d\x8d\xe8\x55\xea\xee\x3f\xec\x5f\xf6\x77\x0e\x75\xd8\x36\xfc\xf8\x1f\x76\x11\x50\xd3\xc8\x07\x0b\xa1\x14\xb5\x6d\x60\x45\x83\xcb\x30\xa9\x7e\x17\x01\x90\xde\x95\xdd\xa8\x02\xe8\x56\x8e\x32\xb5\xaf\xec\x1f\xb7\x2d\x23\x0c\x40\x1f\xe5\xe5\x1a\x8b\xa5\x46\x81\x4b\x93\xda\xba\xbb\x03\x30\x34\x4d\x97\x70\x88\xe9\xf9\x03\x30\xdc\xbc\x61\x80\xe1\x56\xb7\xd9\xa8\x62\xfd\x09\x6e\xa0\x6a\xff\xf9\x54\x95\xed\x69\x9e\x27\x4f\x46\x90\xb9\xc1\x73\x29\xa8\x6a\x15\x3b\x86\xdf\x43\xb1\x78\x93\xbf\x11\x5b\xa0\x64\x77\x42\x16\x9d\xc1\x58\x6d\xed\xe8\x29\x54\x2d\x6d\xcc\xde\xe6\x59\x9a\x55\x31\x6d\x8c\x81\x04\x7c\x36\x98\xe0\x4b\x63\x79\xb7\x17\xc6\x99\x84\x78\x8d\xb9\x8f\x6e\x69\xb9\xab\x89\x20\x5f\x9f\x3a\x3a\x11\xab\x53\x75\x8e\x20\xc8\x82\xad\x32\xde\xa2\x46\x4a\x7b\x6f\xff\x05\x13\x25\x07\xbf\xf5\x2e\x31\xab\xe6\xff\xae\xf6\x45\x69\x13\xa6\x74\x23\x4c\x44\x00\x02\x63\x2d\xd8\x74\x35\x1d\x57\xbd\xac\x31\xc6\x75\xeb\xd8\x65\xfb\x82\x1f\x5f\x51\x8f\x60\x43\x6e\xaf\x38\x4d\xc0\x63\x68\xb6\xdb\xd1\x64\xbc\xa1\x49\xac\xa1\xa5\x7d\x99\x3d\xec\x6f\xff\x9b\x4a\xa2\x46\x5f\xf7\xc0\xa0\x62\x18\x24\xac\x51\x14\xcd\x78\xfa\x8e\x91\x62\xa5\x9a\xf4\xee\x74\x87\x5f\x73\x4a\x81\xf5\x01\x74\x3d\xd0\xab\xc0\x26\xa2\x25\x24\x41\x6b\xe5\x54\x24\x5d\x50\xd1\xa7\x36\xfd\x1c\x0e\xd3\x30\xec\x8b\xb7\x52\xe3\xd6\xcf\x40\xbd\x6d\x78\x00\xf0\x75\xbc\x9c\xb3\xad\x29\xa9\xcd\xa4\xd8\xb4\x7b\xee\x4e\x89\x07\x9c\x34\x2a\x8c\x02\x41\x59\xc5\x40\x88\xba\x7b\xc3\x41\xe5\x4e\xaf\xdc\x94\xc6\x6b\x4b\x7c\x40\x39\x3e\xdc\x30\xf8\x87\x63\xbb\x47\x83\x5d\x15\xb0\x76\x11\x57\x70\x18\x71\x4a\x1a\x80\xaa\x00\x48\x3d\x7e\x62\x37\xc1\x29\x75\xbc\x31\x56\xf6\xf2\xb9\x55\xdb\x77\x17\xe1\x1e\x6b\x70\x5e\x69\xd3\xdc\x04\x9a\xff\xc0\xa1\xb7\xf6\x39\x3c\x10\xf7\xc2\x33\x16\x7b\x5f\xa2\x4f\x57\x3c\xf1\x86\xf6\xe8\xb6\xfa\xa6\xdd\xa5\x36\x74\x91\x01\x96\x3a\x69\x00\xce\x83\x26\x5d\x35\xc0\x86\x0b\xb6\xde\x1d\x99\xae\x8f\xb1\x0b\x52\x13\x49\x30\x38\x42\xcf\x10\xba\x6c\xee\xf1\xd8\x22\x9e\x3d\x40\x48\x46\xec\x20\x95\x22\x63\x2c\xec\xec\x8a\xe2\x3f\x27\x68\x28\x47\xe9\xcc\xa4\x76\xe2\xc2\xbd\xb7\xc9\xd1\x5d\xab\xd8\x80\x16\x5f\xf1\xee\x60\x3b\x0d\x1c\xa0\x4d\x27\x53\xb4\xc3\xc9\x01\xc8\x10\x07\x89\x57\x0d\xd2\x7a\xac\x25\x55\x93\x8e\xee\x1b\xb7\xf2\xcd\xd3\x9d\xab\x33\x68\x78\xb7\xbe\xdf\x6b\x5b\x56\xdb\xbf\x75\x85\xfe\xbe\x1d\x84\x81\x17\x7d\x9c\xd1\x82\x41\x43\x4f\x0f\x34\x81\xc5\xee\x94\x8c\x7d\xe9\xca\xd2\x7d\x50\x41\x3f\x80\xf8\xbd\x33\x63\x25\x8c\xd7\x78\xc2\xfe\x73\x97\xd6\x83\x8b\x18\x19\x98\xbb\xbf\x65\xdb\x25\x0c\xa2\x39\x61\x6f\xce\x99\x81\xdf\x5a\xd7\x00\x54\x3f\x75\xa1\x6a\xca\xb8\x59\x87\x71\xb3\x23\x11\x0b\x8e\xc1\xe7\x4f\x47\x9a\x16\x3e\x0f\x2d\xa3\x56\xf9\x16\x59\x6e\x8d\xc2\xe8\xb2\x61\x1c\xf7\xd6\x3e\xe4\xb6\x75\x4b\xf4\x6a\x65\x3b\x86\xc3\xd0\x05\xf1\x0c\x4e\x5c\xaa\x11\x32\x90\xb7\x07\x57\xbb\xe0\x73\xf7\x04\x38\xf2\xcd\x46\xcc\x49\x18\x7e\x12\x9f\x58\xde\x4e\x21\x4c\xc5\x21\x90\x45\x4f\xa8\x99\x2e\xdc\xca\x16\x72\xb7\xd8\xa9\xb4\x25\x6e\x75\x60\x58\xc5\x12\xc2\x0e\xe1\x78\x7f\xb0\xb2\x2d\xfe\x82\xcc\x80\x2a\xbc\x32\x8e\x8d\x47\x58\x43\x73\x99\x7b\xc8\x65\x43\x21\x55\xc3\x65\x1a\x6f\xb1\x68\x8b\x9d\x5b\xbc\x0e\xc1\x1a\x5d\x31\x72\xf4\x62\x33\xc3\xa9\x9f\xcd\x3f\x73\xea\x3f\xce\xa1\x69\xf3\xbc\xf7\xe9\x56\x24\x63\x0e\x94\xb5\x89\xb2\x7d\xf4\xa1\x25\xb4\xfc\x5c\x4c\xf0\x86\x38\xf4\x0e\x54\x52\x4c\xf8\x00\x71\x82\xa8\x44\xb7\x76\xb0\x94\xf4\xa8\x89\x37\x75\x4b\xbe\xd3\x3e\x76\xa1\x2e\x7a\x20\xad\x87\x9b\x52\x60\xc7\xd7\xf4\xa0\x6e\x0e\x58\x73\xa7\x8c\x24\xd3\xf4\xb5\x72\xae\x21\xe6\x41\xeb\xc5\xa2\xbf\x2b\x9c\xd2\x95\x23\x8f\x6d\x69\xf2\x33\x10\x9a\x5f\x6b\x54\x94\xde\xe5\x9e\x48\x8a\xe0\xa2\x26\x24\x6d\xa1\xa4\x8c\x4c\x81\x5d\xac\xf0\x1d\x14\x3e\x46\xdb\xce\xae\x7f\x81\x52\xa8\xb9\x46\x48\xf9\xd6\x44\x7f\x0d\xc6\xd7\x70\x65\x5a\x84\x29\xd5\xd8\x41\x97\xb6\xcf\x05\xc0\x2f\x37\x6e\xb1\x05\x61\x83\x53\xc6\x84\x8e\x2f\x6d\x09\x2c\x8a\xca\x78\xb9\xab\x6c\x71\x6c\x17\x03\xd6\x5a\xfe\xe7\xea\x9d\xa0\xd7\x12\xbe\x2f\x7c\xfe\xbc\xb0\x77\xd8\xeb\x6b\xe6\x54\x17\xdc\x80\x83\x7a\x35\x1c\x67\x38\x45\x5f\x1f\xeb\x16\x96\xb0\x89\xb1\x71\x17\xc1\x9b\xfd\xe5\x6b\x81\x02\x69\xab\x7b\xda\x3c\x1e\xdb\xb2\x13\xd2\x6b\xef\xee\x3f\x7c\xa8\xb2\xdb\xbf\x5a\x57\xd8\x23\xb3\xff\x79\x09\x89\xde\x36\xd7\x88\x15\x89\xba\xae\xac\x88\xf5\xdd\xa7\x26\x60\x6e\x04\x06\x8c\xd5\x21\x35\x46\x98\x39\x3f\xef\x53\x2c\x5d\x5a\x4d\x83\x0a\x8e\xd4\xb4\x31\x90\xae\x33\x1c\x64\x6a\x33\x10\xfe\x2c\x34\xb5\xdc\xbf\x44\x88\x57\x17\xf6\xd1\xa7\x83\xcc\x48\x78\xea\xfc\xb0\xde\x96\x4e\x3a\x34\x4e\x8f\x26\x2e\x27\xa0\x73\xd7\xfa\x0d\x6a\xc5\xf7\xb0\x97\x7a\x55\x30\x9e\x7a\x00\xc7\xcc\x66\x08\xa2\x45\x38\x56\xa2\xb6\xea\xc6\x24\x3c\x64\x4a\x75\xbf\xa1\x67\x80\x30\xb6\x7b\xe7\x1f\x88\x70\x25\x74\xd7\xab\x6a\x6e\x51\x1c\xea\x75\x5b\xe5\xb1\xa1\xec\x53\x65\x15\xf7\xef\x8f\xbc\x89\x08\x71\xc9\x93\x62\x12\xca\xf9\x1d\xff\xba\xa2\xb0\xfa\x4d\xf3\x1c\x31\x54\x2d\xca\x03\x11\x3f\xd3\xd6\xfb\xd2\xaf\xe1\x7f\xde\xa0\x42\x5a\xd0\x81\x67\x1f\xe2\xba\xe7\xe5\x5a\xe5\x87\x6d\xb1\x1e\x9b\x46\x14\x44\xc8\xae\x49\x7c\xd9\x76\x0e\x27\x16\x1a\x43\xd8\x26\xa8\xd9\x46\x0c\xfd\x86\xe4\x28\xb0\x20\xe3\x36\xd4\x55\xcf\x87\x4d\x5d\xcb\xbd\x81\xa5\xf4\xf2\xbb\x42\xb1\x4b\x12\xd0\xdb\x5e\x05\x8a\xd8\xfd\xf0\x7e\x26\x3c\x51\x9f\x1f\x94\x0a\xab\x46\x15\xc1\x17\x84\xd2\x89\x0b\xa7\xbe\x89\xd0\x43\xe1\x56\x01\xfe\xe1\xe7\x81\x77\x79\x03\x49\xd4\xd5\x1f\x79\x2b\x77\x06\x33\xe1\xd0\xaa\x3d\x46\xea\xe3\x02\x3d\xd1\x5f\xb1\x41\x78\xa0\x9d\xe5\x0d\x4c\xa1\x32\xf7\xb6\x84\x43\x2f\xfc\x7f\x41\xe1\xad\xff\x1b\x0a\x9f\x06\x77\x95\xf3\xc1\xbe\x02\xd7\xcd\x8d\xb9\x2e\x04\xae\x69\xff\xf5\x2f\x48\x1b\xc6\xce\x16\xaa\x97\x4e\xd8\x98\xc9\x8e\x05\x73\x0a\x06\xd4\x7f\x01\xfe\xc0\xf2\xe6\x4d\xa8\xcf\x66\xc5\x10\x91\x80\x8f\x15\x2e\x40\x03\x20\xd8\x2b\x12\x6c\x17\x1f\x11\xf1\x46\x23\x8e\x2b\xba\x78\x66\x5b\xde\x4e\x21\x64\xdb\x03\xcd\xe5\x18\x19\x9e\x98\xc8\x38\x23\x05\x7d\xcd\xde\x78\x3a\xb2\x0f\x96\x6c\x89\xd2\xa7\x73\xc4\x88\x78\x08\x95\xe4\xd5\xd4\x1b\x56\x6f\xaf\xc8\xcc\x4b\x48\xc6\x88\xa1\xc3\xd6\x1b\x49\x87\xea\x8d\x29\x9c\x48\x6f\x50\x93\x95\x46\x40\x17\x99\x57\xb1\xe0\xcf\xdc\xe2\x2c\xee\x94\x67\x81\x95\xa8\xde\x31\xe7\xce\x7e\xfe\x6a\x35\xa8\xdf\xd4\x84\x1a\x86\x1a\x27\x1d\x46\x03\xcc\x34\xbd\x73\x9c\x2b\x06\x15\xb4\x84\x65\xb5\xf7\xde\xe7\xae\x88\xf5\x99\x8f\x5c\xdd\x0e\x7e\xef\x95\x0d\xfa\x1b\x6a\x2b\x51\x80\xf2\xd9\x24\xbd\x80\xd5\xe3\x9b\x46\x15\x55\xc6\x43\xa8\x78\xde\x5f\x11\xa6\x9d\xde\x5a\xd3\xa4\x0e\xdf\x61\xba\xac\x1d\xc1\x43\xbc\x75\xf6\x7e\x5d\xe1\x10\xca\x23\xd2\x29\x26\x95\x48\x9f\x43\xd5\x1a\x95\xe0\x1f\x08\xcc\x7d\xe0\xf9\xb5\x4d\x29\xf4\xc5\xe3\x05\x67\x0d\xc8\x95\xcf\xc6\x9e\xcc\xd4\xdc\x05\x54\x2a\x81\x36\xf5\x84\x4c\x4c\x9f\xf9\x48\x4a\xd7\xee\xda\x17\x5e\xd0\x2e\x58\xbd\x51\x00\x51\x5b\x3a\x1d\x2a\xca\x90\x51\x96\x67\x99\xef\xa5\xf7\x8f\x60\x15\x8e\xd4\x60\x19\x99\x10\x36\x29\xf8\x1d\x3e\x43\x1b\x54\xa8\x25\x29\x44\x39\xfd\xa0\xe8\xa3\x01\x21\x74\xd5\x40\x78\x54\x76\x94\xdb\xfd\x3d\x44\xbd\x19\xba\x67\xf6\x9c\x64\x99\xd3\xf5\x12\x8d\x7c\xa5\xbe\xd8\x88\x61\xb1\xc3\x95\xd6\x34\x3f\x22\x36\x10\x0b\xeb\xf6\xbf\x87\x3c\x89\x07\xb9\x51\xb9\xa1\x05\xf7\x8b\xf0\x88\xbf\x63\x54\xe5\x5b\x2e\xac\xc8\x03\xdf\xd8\xdf\xd0\xf6\xfc\xfc\x93\x40\xf1\x98\x8d\x6b\x41\x3d\x99\xe4\xea\x07\x25\xcc\x1a\xa7\xf0\xc8\x01\x18\x84\x85\x5c\xaa\xd6\x68\x49\xf3\x7d\x45\xff\x64\xc1\xb7\x2b\xc2\xfb\x1a\x40\x73\x6f\xe4\x4d\xe5\x2c\xc4\xa0\x6f\x35\xa4\x43\x18\xd2\x52\x0e\x36\x4d\x23\xf2\x5c\x21\x08\x94\x88\x7c\x56\x32\x27\xc8\x82\xf5\x4f\x69\xcd\x89\x6c\x61\x49\x02\xd3\xee\x3d\x86\x36\x6b\x1e\xe4\xb6\x7d\x09\x09\x34\x40\x63\x1f\x1e\xbc\x48\x11\x7a\x94\x12\x59\x38\x83\x55\x97\x20\xe7\x21\x99\x71\xd7\xda\xa8\xba\xe8\x39\xeb\xa5\xee\x19\x7b\x57\xbf\x74\x10\x83\x5e\xd8\xa7\xdc\x20\x9d\x95\x88\x99\xef\xa9\x7b\xa2\x8a\x56\x39\xe6\x58\x3a\x77\xea\x48\xc9\xd6\xea\x8e\x53\x2c\x2d\xd0\xd3\x3a\x4e\x49\x61\x87\xe0\xde\xa4\xb4\xa1\x4d\xb9\xd6\x1b\xec\xa8\xdf\xa0\xc4\x85\x88\x10\x71\xe0\x45\x02\x5d\x20\xa0\x3d\xf8\xc4\x39\x37\x20\x85\x73\x3b\x25\x0f\x1f\x31\xcc\x20\x30\xfd\x74\xc8\x2c\x57\xf4\x6c\xaf\x71\x76\x03\x90\x13\x99\xdb\x9b\x17\xe5\x14\x72\x40\x0e\x63\xee\xff\xf7\x05\x76\xb0\xb4\x6f\x18\xbb\xa3\x63\x90\xf8\xf2\x67\x78\x85\x36\x98\x4d\x85\xb7\x2f\xf0\x1e\xa3\xb7\x2d\x6c\xa6\x5c\x99\x64\x84\x23\xad\x19\xcd\xeb\xc1\xaf\xee\xe2\xd3\x88\xfa\x7e\x4e\x5d\xb9\x28\xc2\x23\x5e\x51\xf4\x12\xc9\xe2\x6e\xbd\x51\x46\xfe\x2d\x4c\x0d\xd4\x3f\x01\x37\x6d\xec\xa8\x67\x40\x7d\x30\x85\x3e\xbf\x4f\xa3\xe3\x65\x0e\x0c\x23\x2e\xf8\x82\xac\xda\x9b\x7d\xe9\x14\x02\x44\xd8\xee\xf8\xc8\x06\x4e\x99\x87\x90\xa0\x0c\x64\x9f\x20\x00\x02\xc2\x8c\x7e\x23\x3f\x82\x44\xef\x49\x7f\x66\x65\xd3\x33\xa7\x1b\x00\xa8\x05\x9f\x76\x1d\x64\xd4\xbf\x04\x95\x6e\xe8\xb1\xec\xc1\xdb\x45\xe9\x0a\xf1\x1b\x15\xcf\xcb\xc3\xe7\xea\x98\x9e\x79\x76\xb7\xfe\x0f\xb4\x77\x05\x9d\x3d\x24\x49\x74\xcd\xae\x0c\xc6\xb1\x1d\x77\x4f\x90\x3f\xec\xd5\x9d\x33\xda\x5e\x17\xd0\xba\xf7\x06\xd6\xc2\x96\x0b\x0f\x74\xb4\x32\xe4\xb4\xb4\x8b\x6a\x15\x2c\x14\x9e\x88\x1d\xdd\xde\xb1\x3e\xe8\xac\x51\xca\x85\x15\xb4\x68\x55\x24\x67\x95\x0c\xba\xc9\xdf\xdd\x1d\x88\x4b\x99\xf4\xcc\xe4\x50\xca\xc0\xa3\xaa\x8c\x64\xb5\x4d\xf1\x2c\x82\x8e\x70\x41\x06\x6e\xc5\x9a\x27\x13\x93\xac\x76\xf7\xd6\xf4\x8e\x27\xde\x7e\x16\xb1\x94\x43\x44\xc8\xf5\xf3\xc3\x03\x44\xc7\x8c\x16\xea\x1c\x42\xf1\x95\x01\x30\x06\x5a\xfd\x0b\x5a\x26\x24\x07\x36\x7a\x72\x28\x6b\x62\xef\xcf\xa0\xf1\x36\x20\x68\xf6\x27\x12\x64\x31\x2d\xb6\x81\x15\xd4\x02\x43\x07\x92\x20\xbc\xf5\xad\xc2\xba\xf9\xa7\x40\x81\xde\xdd\xca\xfd\x21\x52\x90\x15\x26\xfa\xbe\x51\x4c\x50\xf1\xce\xaf\xec\x32\x86\xd0\xff\x12\x43\xf0\xbe\xfb\x29\xee\x7f\x8e\x21\x78\xdf\x62\x08\xee\x4f\x31\x04\x8f\x42\x80\xf6\x0f\x8d\x62\x85\xf8\x9a\xff\x5a\x91\x1d\xd7\xb6\xe9\x15\x7b\x00\x05\x4b\x73\x55\x6e\x91\x60\x7a\xb8\x6a\xec\xf7\xd8\xbd\x64\xee\xee\xca\xdb\xcf\x6a\x45\x17\xd5\x84\x9a\xc1\x0d\xb2\x72\x5b\xe7\x0a\x02\xcb\x8c\x7b\x62\x60\xdc\xaf\x22\x4f\x6c\x6d\xef\x86\x58\x99\x51\x59\x7c\x31\x0f\x3c\x14\x8c\xc9\x02\x47\xe8\x1f\xa6\xcd\x2f\x3a\x17\xf6\x01\x09\x83\x8a\x04\xb9\x34\x6e\x4a\x19\xd6\xf5\xc4\xfa\xa3\x94\x9f\x0a\x71\x68\xf1\xbe\xa0\xee\x3e\x67\x3a\xaa\x48\xb3\xb5\x84\xc8\xcf\x10\x7b\x6c\xae\x9a\x55\xbd\x9f\xb8\x46\x4b\x79\x22\xa2\x24\x2a\xe2\x30\x60\xa2\x8e\x17\x36\x74\x81\xd8\x67\x73\xec\xf8\xc6\x98\x0c\xe3\x26\x90\x28\x34\xee\xe6\xcc\x6a\xf5\xbd\x2f\xc3\x25\x7d\xa9\x90\x80\x18\xae\x9b\x45\x5f\xbf\x10\x09\x6e\x2a\xa2\xc4\x44\xce\x25\xc6\xae\xbc\x6f\x46\x47\x40\xed\xe3\x49\xf6\x3e\x25\x57\x99\x2c\x44\xf7\x9b\x79\xa2\x19\x13\x62\xcb\x31\x49\xcc\xbd\x88\x60\xa0\xb1\xc7\xc9\xbb\x97\x07\xb6\xbc\xa6\xad\x08\xca\xd1\x30\xa2\x31\x3a\x2f\x10\x1c\x7a\x4c\x11\x4d\x28\x23\x79\x82\x6b\x31\xad\xe7\x36\xc9\xc4\x5d\x06\xe2\x33\xa8\x46\x51\x11\x66\xb5\x68\x0c\x44\xa9\xc9\xe7\x00\x58\x6d\xae\x30\x47\x12\x55\x5d\xcb\x6c\x89\x6a\x96\x65\xa8\x63\x51\xa6\x1e\x14\xb3\xc0\x82\xf6\x7d\xfb\x8d\x72\x93\x25\xa3\xed\x14\x55\x29\x37\x60\x78\xa9\x19\xb5\x3a\x53\x66\x96\xcd\xb0\xdc\x27\x0d\xd2\xd9\xc6\x51\x30\x20\x9a\x43\xa2\x46\x6b\x46\x6e\x95\x91\x90\xb2\x4e\x4a\x07\x44\x43\xd0\x95\x4c\x9f\xe3\xa7\x88\x62\x77\x67\x90\x31\xed\x25\x53\x6a\xf9\x2d\x9d\x46\x31\x35\xd4\x5a\xce\xd3\x92\xc8\xf3\xad\xc5\xcf\x83\x65\x83\x32\xa8\x27\x05\x0b\x34\xc8\xb4\xd0\x72\x60\x1e\x0c\x89\x80\xb7\x86\x59\x5b\xf8\xb9\x2e\x04\x51\x24\x84\xaf\xd9\x83\x98\x24\x03\x26\xd7\x34\x53\x6f\xca\xbc\x83\x15\xd6\x55\xe1\xa0\x8a\x2a\xb8\xba\x85\x47\x7d\x79\x2b\x52\x68\xe7\xac\x28\x85\x80\x9b\x37\x91\x6d\x6e\x6a\xe3\x34\x9a\xfc\xcd\x69\xf6\x25\x7d\x0c\x6d\x99\xda\xa7\x19\xdc\xab\xee\x94\xba\xbc\xa8\xba\x2d\x02\xb1\x27\xce\x07\xd9\x27\x65\x80\x3e\xe7\x1e\x18\x56\xe0\x21\xf4\x66\x6f\xb9\x3f\xd2\xc7\x9c\xae\xfe\xf5\x2d\x78\xc2\xcd\x58\x8f\x80\x29\xfb\x33\xb7\x98\x4c\x74\x82\xc9\x00\xc2\xb2\x10\x04\x33\x77\xe0\x22\x44\x19\x58\xac\xf3\x74\xeb\x22\x69\x1c\xff\x93\x60\x96\xa1\x6f\x20\xda\xd7\xb2\xf4\xd3\x3b\x63\x51\xcd\x92\x22\x67\x77\x4b\x23\x98\xc6\xaa\x49\x26\x95\xe3\x54\xcd\xc1\xc0\x85\xe1\x0b\x9c\x4c\xdd\x2e\x29\x12\xa0\x05\x2d\xcc\xbd\x81\x81\xb8\xb3\xbf\xd4\xcb\x3c\x4c\x9b\x7b\x71\x19\x25\x4d\x23\x0d\x85\x27\xe7\xcd\x6f\x8a\x94\xc9\xe5\x42\xc8\x8b\xdc\x4a\x4d\x3e\x16\x14\xda\x5a\x80\xb5\x7a\x29\xbe\xf4\xae\x11\x25\x1f\xbe\xb9\x5f\x1a\xa1\x54\x69\xcc\x33\xe2\x2b\x13\xfa\x30\xb6\x91\x12\x68\xfe\x3c\x5e\x74\x54\x39\x5e\x22\x17\xb7\x4c\x37\xb9\x6f\x77\xf8\x10\xa8\x0d\x0f\x56\x63\xc1\x69\xeb\xf4\x87\xc6\xc0\xa9\x9e\x65\x62\xcc\x3e\xed\xf1\x5c\xb9\xeb\xe0\x2b\xf0\xde\x05\x49\xee\x27\x7d\x9d\x58\x20\xfc\xaa\x68\x0a\x1a\xb1\x2d\x96\xb2\xfd\x79\xf7\xa3\x64\x59\x7b\x29\xcb\xd3\x2f\xb1\xdd\xd8\xd4\x90\x80\xaf\x58\x67\x53\x83\x98\x09\xcf\x18\x13\xa9\x73\x9a\xb3\x3b\x34\xc2\x0a\x0e\x35\x15\x68\xd3\x7d\x47\xcd\xf3\x01\x0a\x1d\xb0\xc4\x0b\x65\x32\xa8\x7b\xd4\x9e\x2d\x02\x93\xd0\x6c\x54\x25\x74\x52\x82\x1a\xb3\x6e\xc8\x50\x81\xda\x2e\x10\x02\x68\xe2\xd0\x50\xa4\xda\x7e\xa7\x91\xee\x63\xef\x0d\x2a\x26\x31\xaa\x38\x83\xe6\xbb\x48\x32\xd5\x67\xb7\x15\x66\xe3\x58\x33\xca\x83\x5f\x2c\x2b\xd7\x69\x8c\x38\x95\xa4\xcf\x07\x02\x70\xa9\x7d\x45\xf1\x43\x8f\x4e\xaa\xa3\x65\x5b\xa7\xf0\x99\x3f\xf1\xf1\x40\x86\x3f\xdd\x20\xdd\x24\x3e\x9d\x63\xb1\xfe\xd9\x7d\x0b\xab\x31\x18\x1c\xda\x64\x00\xc2\x95\xcb\x22\x22\x29\x57\xee\x94\xe6\xfe\x07\x84\x67\xe4\x13\xb1\x0a\x2b\x78\x48\x9e\x0b\x83\x0a\xa5\xba\x2f\x58\x61\x12\xfe\x71\x05\xa9\x1b\x52\x23\x4e\x2c\x47\x83\xd7\xdd\x35\x38\x97\x58\x26\x6c\x4a\xd8\x34\xe1\x80\x30\x4e\x10\x6e\x03\xee\x2d\xb6\xc0\xc6\x1c\x50\x0b\xbb\xe7\xb0\xea\xfd\x6a\x4d\xd1\xa3\x9e\x4f\x8a\x47\x42\xeb\x9e\x57\x1d\x82\xb6\x49\x89\xbb\x94\xc1\x5e\x69\xfd\x36\x9c\x89\x89\x30\xf1\xec\x75\x52\x0e\x03\x1b\xf6\x19\x24\x4d\xff\xf3\xee\xbb\xf4\x83\xd1\xed\x8b\x8c\xbe\x2c\x6d\x38\x53\x3d\xf0\x46\xa1\x32\x6d\xfc\xa9\x58\x23\x61\xa8\x9b\x49\x83\x20\x07\x46\xbc\x77\x9f\xc7\x6b\x33\x5a\x21\xd5\xb4\xb4\x06\x4c\x09\x8e\x0f\x32\x6f\x16\x3c\xfa\x23\x74\xb5\x31\x21\xf6\xac\xff\x54\xa9\xb5\x4e\xec\x4c\xe8\xdb\x05\xba\x1c\xeb\x8b\x06\xd7\x06\xcf\x1d\x8d\x31\x77\x0d\x25\xd6\xcb\x41\x92\xee\x46\x28\x54\xa4\x9c\xde\xf0\xef\x2d\xdb\xde\x45\x9d\x58\x13\x78\xcd\xfe\x8e\x6d\x4b\x97\x56\x27\x55\x8c\xbc\x26\x80\x9d\x79\xd7\xbc\x35\x10\xc3\x4a\x01\xea\x81\xd5\xb0\x4a\xc3\x6c\x6c\xd7\x38\xc7\xe9\x2d\x13\x7e\xe6\xf5\xec\x16\x56\xb5\x9a\x87\x46\x56\x0c\x24\xb3\x41\xd3\xe4\x80\x8d\x37\xf6\x92\xc6\x10\x03\x1b\x1c\x91\xd8\xc3\xb2\xad\x35\x27\x9c\x60\xd8\x79\x63\x50\xe6\x07\xbc\xb3\x9d\x02\x24\x86\x9f\x2e\xad\x58\x1c\x63\x4d\xae\x1d\xd3\x3d\x1e\xd6\xc5\xae\xd6\x36\x55\x06\xd3\xb3\x58\x9a\x7e\xc5\x70\x7a\xff\x5d\xac\xd4\xff\x4e\xf0\x58\x11\xb3\x40\x3b\x06\x58\xde\xa4\x54\x5f\xf5\xe5\x79\x62\x67\xdf\xa7\x9d\xd9\xf9\x1d\xad\xd4\x90\x7e\x5e\x58\x79\x6b\x55\xdf\xb4\x7f\xb2\xc2\xf7\xad\xb7\x7b\x8a\x4b\x97\x17\x2b\xdc\xcf\xca\x8d\x9e\xc4\x66\x9c\xab\xbd\x71\x20\xf7\x55\x29\x74\x2d\x18\x89\x95\xf2\xbe\x8c\x01\x84\x0b\x77\xcf\xf6\xc6\x00\xdb\xd2\xa7\xbc\xf6\x0d\x5d\xbb\xc6\x7e\x08\x53\x5a\xf8\x26\x80\x03\xeb\x9c\x2c\xd2\x3e\xa2\x65\x01\x79\xa6\x5e\xd7\x18\xd7\xdf\x32\x49\x6d\x82\x19\x30\x9f\x73\x7b\x0a\x8a\xa4\x55\xf2\x94\x98\x17\x2d\xd7\xc8\x10\x73\x5a\x47\x4e\x02\xd1\x33\xcc\x59\x27\x3a\x0b\x89\xfd\x8c\x2e\x08\xb2\x3b\xea\x44\x15\x83\x58\xfd\x47\x07\x26\x3c\x6b\x50\xd4\x32\x31\x26\x2d\x57\xb2\xb2\x0b\x3b\xc7\x09\xde\x99\xad\x39\xc1\xd9\xc3\x23\x56\x11\x9e\xf8\xb8\xec\x62\x97\xaf\xc2\x42\xa8\xd6\xf3\x47\x97\xf2\x45\xf3\xfe\xee\x4b\x97\xcf\x74\xbf\x9a\xda\x97\x54\x07\x57\xb0\x3e\x5a\x9a\xc2\x2b\x47\x31\xc0\x9a\x15\x8d\xe7\x4d\x44\xb6\xdd\x4f\x53\x25\xa4\xf1\xfa\x7b\x79\xf7\x4f\x5f\x20\x55\xac\x21\x82\x90\x4c\x77\x82\xf5\x7b\xef\xa0\x04\xbf\x76\xb7\xaf\xb4\x94\x6c\x31\xf2\x27\xa8\xbb\xf0\xe7\x77\xc5\xfc\x52\x06\x04\x2f\xe0\x96\xf4\x81\x40\xbb\x42\x08\x7b\x4e\x5e\xf0\x03\x42\x2c\xd8\x57\x3a\xb1\x39\xa4\xe1\xab\x3d\xce\x13\x55\x16\x74\xd3\x38\xc7\xd5\x0b\xbf\x4d\x06\x0c\x8c\x04\x15\xd1\x10\x7c\x95\x98\x09\x33\x92\x57\x77\xff\x50\xde\xa6\xa6\xbc\xb9\xc3\x8a\xda\xd6\x98\x29\x9e\x39\x6d\xb7\x45\x50\xac\xa2\xa9\x87\x92\x29\x1c\xfb\x06\x3a\x9f\xbc\x09\x76\x8c\x2a\x78\x52\x13\x8b\x2c\x5f\x49\x67\x01\x0c\x8c\xa1\x36\x53\xbe\x8e\x47\x15\x89\x62\x1d\xdf\x2b\x09\xac\xf5\x89\x82\xc4\x7b\xb2\x50\x71\xf1\xe7\xbe\xe8\x92\xca\xb4\x8c\x05\x78\xd7\x77\xe5\x78\xab\x4d\x4b\x59\xde\x02\x09\x39\x96\xaf\x1e\xe3\x24\x98\xc6\x43\x48\x9b\x5b\x34\x7d\x12\x09\x90\x9b\x48\xb4\x6f\x12\xc4\x2c\x3a\x25\x2f\x87\x2b\xd0\xf9\x08\xa0\x61\x9d\x6c\x6f\xe2\x52\x88\x89\x96\x52\x27\x36\xcd\xb4\x70\xd1\x2c\xb4\x92\x28\xd0\x0d\x1d\x7a\x87\x2e\x8b\x32\x2f\xa2\x95\x52\xb1\x40\xda\xcc\xf9\x47\x6f\xa8\xf9\xe4\x55\x1c\x2c\x58\x68\xfd\x15\x37\xc7\xdc\x8f\xbb\xa6\x73\xb7\x94\x43\xc9\x5d\x2f\x71\x7d\x68\x01\xd2\x31\x80\x06\x52\xbc\x1c\x16\xbc\x41\xbc\x54\x98\x8f\x13\x1b\x6f\xf3\xae\x5c\xd0\x7c\x5c\x8e\xb1\xa2\x26\xc4\xa6\x5a\xc9\x42\x21\xc1\xf0\x8e\x9d\x70\xa6\xc4\x96\x61\xef\xf4\x22\xcd\x37\xad\x3a\xa2\x83\xaf\x97\xc0\x51\xfb\xea\x9e\x5e\xc9\x3d\x38\x86\x16\x28\xef\xc1\xf9\x66\x47\x22\x12\xed\xc2\xaa\x11\x88\x90\x10\xa1\x53\xdb\x7d\x06\x67\x69\x4b\x3c\x82\x27\xc4\x15\xf2\x6b\x6e\xb9\x62\x17\xf9\x85\xd0\x2f\x76\x84\x3f\xc2\x23\xe6\x72\xc1\xda\xdc\x7d\x83\x04\x7d\xb7\x01\xf0\x82\x92\xd6\x60\xb1\x99\x3d\x07\x7c\x66\xf6\x0c\xef\x89\xc4\x7c\x91\xd2\x4f\x30\x2c\x82\x97\xa1\x3e\x01\x0e\x8a\xef\xa4\x34\xcc\x7e\x33\xfa\x11\x7c\xde\x17\x53\xba\x26\xdb\x17\x65\x10\xb0\x75\xfb\x5d\x78\x5b\xdd\x82\x24\xe2\x0c\x93\xbd\xd2\x9f\x87\x3a\xec\x22\x36\xa6\x3a\x3f\x0d\xbb\x14\x6e\xf1\x1a\xac\x19\x41\x7c\xf6\x9e\x89\x4b\x77\x8d\xc0\x57\x84\xbb\x94\xed\x2c\xa4\x89\x9a\x80\x6b\xe2\x69\x88\x8f\xb5\xe4\x69\x6b\xc7\x57\x52\x92\x3e\x8c\xe8\x48\x6c\x36\x97\xf7\x7c\x50\x75\x09\xe5\xa3\xa8\x9c\x5b\x03\x9a\x09\x78\xc1\xcd\x1a\x37\xa3\x04\x5b\xc9\xc2\xbe\x64\x18\x9b\xd6\x96\x16\xed\x5f\xac\x7e\x46\x25\x20\xc9\x22\xe5\x08\x2a\xdc\x0e\xfd\x57\x22\x4c\xac\x8e\x57\xde\xf3\x14\x5b\x5d\x75\x1a\xa8\x84\x93\xe6\xc6\x73\xf9\x65\xc7\x29\x9b\x85\x7d\x58\xc5\xdb\x45\x19\xc6\x52\xcc\x14\xa4\xdb\x09\xad\xcc\xb9\x26\xf0\x1e\xc9\x92\x0c\x43\xda\xf7\xf8\x02\xc9\x44\xed\x03\xce\x6c\xb9\xc4\x87\xfb\xae\x39\x0b\x89\xe3\x0e\x87\xb3\x26\xd1\xbe\x37\x7b\xd2\x52\xf6\x09\xc7\xdf\xc9\xf1\x3c\x39\x7e\xe3\xef\x8f\xdf\x39\xbd\x93\xa8\xc3\x6d\x8b\x24\x8c\xb9\x57\x2c\x71\x8f\x23\x09\x4f\xbe\x62\xef\x1e\x2b\xd4\xaa\x30\xa1\xe0\x83\x2c\xbc\xe3\x5e\xa4\xf9\x89\x38\x52\xe6\xf4\xe2\x1e\x49\xd0\x63\xda\x9c\x93\x22\x91\xa5\x44\x62\xce\xa3\x6f\x88\x47\x28\x05\xda\xcf\xb7\xc5\xa3\xda\x3a\x70\x8e\x5a\x29\xe4\x48\xf8\x66\xea\x9b\x64\x10\x4f\x60\xc6\xfb\x52\xdb\x00\xb0\x0d\x25\x22\x33\xa2\x99\x26\x47\x26\xf3\x42\x8b\xb7\x50\x9e\x7b\x1f\x1c\x79\x70\xdd\xc3\x2a\xf1\x1e\x79\x7b\xf4\xba\x40\xaf\x1b\x4e\x84\x94\xbd\xce\xc2\xf8\x68\xad\xc3\xb9\x3e\xff\xe3\x5c\x7d\xcc\xe5\x7c\x9f\x2b\xa0\x0c\xc5\x4d\x48\xdf\x20\x67\x2f\xa3\x14\x3d\x64\x1f\x16\x29\xdc\x20\xbf\x73\x28\xc7\x5c\xdc\xcf\x68\x59\x8f\x3e\xb3\x34\xa2\x94\xd4\xcb\xa1\x2c\xd2\xc4\xf4\x48\x5a\x42\x1c\x74\xce\xcb\x97\x7b\xb9\xa4\x69\x64\xc2\xb4\x74\x90\x52\x16\xbc\x89\xf4\x73\x6f\x69\xae\xbd\xe8\x4d\x25\xcd\x39\x25\x3d\xef\x02\x46\x27\x4d\x8a\x91\xc2\x99\x96\x44\xba\x74\x8f\x69\xd3\x60\xeb\xc8\xb9\x32\x64\xde\xae\xc1\x00\x38\x82\x57\x94\xaa\xd3\xb0\x68\x94\xe3\x9e\xc9\x65\xa5\x0f\xc9\x05\x28\x8b\x21\x4e\xda\xfd\x4c\x9e\xae\xda\x74\xbc\xda\x7a\xd0\x10\xf6\xf0\x8b\x85\xd3\xf1\xbc\x01\xa3\x82\x41\x79\x1d\xc5\xdc\x68\x05\x59\x92\x0a\x21\x1b\x43\x50\x54\xbb\x2d\xa6\xfa\xdc\xa5\xcd\xd3\x82\x26\xc7\xa5\x4e\x05\x91\x9b\xda\x85\x31\x32\xd0\x76\x0d\x68\xde\x8f\x58\x9f\x19\x20\xf3\xc0\x86\x22\x08\x16\x14\xec\x2e\x60\x3e\x7f\x60\x3d\xa9\x6c\xe4\xe2\x01\x7f\x84\xe3\x55\xdd\xa5\xd7\xd9\xc1\x61\xb7\xdc\x0c\x80\xb5\x1f\xa5\x89\xe1\x9c\x57\x80\xdb\x43\x13\xab\x2b\x0b\x99\xe9\xae\xb4\x33\xd4\x49\x9c\x01\x0b\xa9\xfd\x76\x6f\x8e\xdd\xd6\xfc\xeb\x32\x96\x14\xc3\x09\xe6\xcd\xe0\xb1\x7d\xbc\x50\x92\x22\xe2\x9d\xa4\xf6\xcc\x66\x7d\x06\xb5\x87\xcf\x3a\x54\x73\x59\x6b\xff\x1d\x2a\x92\x66\xfa\xb3\xcc\x66\x79\x75\xdb\x94\x03\xdd\x50\xfc\xa1\xd8\xca\x44\xd9\x81\xa7\x1e\x83\x80\x32\xcc\x64\x61\x84\x86\x60\x64\xa6\x68\xfa\xfd\x06\xe3\x76\x66\xa7\x74\x40\x51\x38\xe0\x99\x9b\x67\x35\x18\x0d\xa7\xdf\x4f\xa4\x31\x72\x57\x9c\x59\x0c\x49\xd3\xc5\xb7\x17\x0a\x02\x43\x5b\x42\x8b\xb5\x6a\xd5\xff\x25\x16\x8c\x18\x20\xeb\x32\x7a\x2f\xa9\x73\x09\x04\x14\x75\xa3\x82\x09\xed\x02\x11\x11\x4b\x4f\x84\x4d\x4b\xbb\xbc\xac\xe0\xe2\xd5\x25\x2b\xa8\xe3\xda\x6f\x63\x23\x6b\x4f\xdd\x07\x74\xa1\x52\x4f\x73\xea\x1b\x33\x6a\x08\xfc\x32\xea\xb4\x64\xc5\x13\x0c\xba\x02\x79\x21\x06\x05\xa2\xc2\x69\xa1\xbb\xac\x38\xa8\xd1\xa6\x41\x35\x88\x77\x06\x45\x12\xd5\x41\x6b\x95\x2b\x56\x5a\x83\xcd\x19\x72\x38\x05\xc3\xc7\x46\x32\x20\xf7\xcf\x73\x68\xbf\xb1\x92\x28\x5b\xfb\xec\xe3\x05\x18\xd0\xa4\x7a\x28\x69\x52\xdd\x6b\x6a\x93\x90\xf9\x0c\xb0\x18\xca\x8e\x34\xd7\x4f\x78\x01\xc6\xac\xf1\x29\x7f\xbc\xad\x7d\xcd\x0b\x09\x99\xb9\xe1\xd2\x43\xd5\x41\x68\x3d\x5b\x6f\xc6\x54\xfa\xbe\xb2\xbb\x5f\x19\xd0\x7d\x28\xe9\x7c\xbf\x72\x83\x15\x7b\x72\xf9\x63\xc9\x4d\x50\x09\x92\xce\x7b\x63\x93\x46\xd0\x04\xe8\x6d\xd5\xfc\xfb\xc6\x10\xb3\xf0\x3a\x66\x73\x53\x7b\x1f\x2b\x7f\xa5\xcf\x21\x9d\xbc\x5d\xd8\xf2\x61\x94\x33\xaa\x0f\x79\xa0\x69\xfd\xde\xbc\x08\xe1\xac\x02\x06\x51\x02\x13\x48\xe3\x78\x31\x62\x32\x75\x4d\x89\xf2\x8e\xf4\xca\x70\x67\x57\xdf\xf8\x73\x0d\xa5\xcf\x0a\xa1\x1a\xae\x4c\x28\x8f\x55\x62\x42\xa7\x22\x63\x14\xb3\x9a\xdd\x24\x32\x87\x14\x58\x89\x5c\xbd\xb6\xcd\xef\x66\xb4\x4a\x49\xde\xaf\x3d\x90\x41\x40\x75\xa9\x2a\x39\x23\xb7\x37\xac\x44\x9b\x00\x1b\x67\x88\x6f\x6e\x6d\x5e\x07\xee\x9d\x80\x96\xde\x70\xa1\xd3\x5c\xbd\x23\x6b\x46\xe3\x06\x07\xd8\xff\x74\x60\xb1\xea\x9d\x25\xa4\xf1\x90\x85\x30\x09\xdd\x1a\xbd\x85\xd3\x07\x7a\xb7\xac\xb1\xa0\x53\xde\xe3\x15\xba\x16\x57\x1f\x4e\x69\xdf\x26\x8d\x42\xbf\xba\x2b\x97\xbe\x45\x0d\x84\xd7\x5a\x60\xb1\x2e\x4c\x57\x09\x20\x08\x9e\x30\xaf\x09\x9b\xbb\x34\xdc\x88\xa8\xe0\xfc\xde\x18\xf8\x72\x8c\x4b\x2c\x1f\xf1\x9e\xa8\xaf\x09\x19\x8e\xdb\x10\x21\x5c\x94\xd9\x83\x32\xba\x57\x0f\xd0\x77\x65\x9a\x3a\xa9\x5c\x90\xa2\xef\x79\xc1\x24\xe1\xb6\x5d\x5e\x73\xa6\xa7\x68\x64\x19\xd4\x6a\x98\x70\x14\xd8\x1e\x5e\x6a\xc8\xda\x55\x55\xb3\x3f\xb0\x15\xe3\xc9\xce\x99\x43\x32\x69\x02\x0e\x2f\xee\x81\x5e\xe0\x92\xc0\xb9\xcd\xda\xc4\x00\x29\x4f\x6f\xc4\xfa\x36\xb1\x44\xe7\x73\xfc\x52\x49\xcb\xcf\xa0\xd4\x7a\x8c\x8f\x43\x55\xbd\x23\xa4\xf4\x70\xa3\x78\x4f\x18\xc6\xde\xc2\xdc\xa0\x2d\xa2\x9b\x4f\xd5\x2e\x96\xe0\xf4\x84\xfe\xaf\x1a\x19\x4b\x08\x12\x85\x04\x2e\x69\x36\x3a\xde\x28\xb1\x1b\x03\x1a\x2c\x47\xb6\x5c\xe5\x5f\x7b\xb4\x93\x4e\x1b\x9a\x6d\x6a\xe6\xaa\x7c\xdf\x1a\x3c\xb3\xaa\x05\x15\x26\xeb\x11\x7f\x73\xe4\x4c\xac\x50\x09\xf5\x88\x8f\xff\x80\x64\x23\x84\x50\xca\x1f\xd6\xb0\x3f\xc0\x4b\x51\x0d\xaa\xb0\x77\x4a\x86\xdd\x45\x5f\x04\x99\x4a\x9d\x13\x26\x6c\xf4\x88\x84\x61\x88\xa8\x78\x97\xa3\x2c\xed\x73\xc0\xf9\xc6\x39\x61\x7d\xcb\x59\x84\x4c\x6a\x9d\x9e\xbb\x69\xe4\xc7\x6e\xaa\xcc\xc7\xb3\x08\xfc\xc4\xbd\x9c\xdb\x1f\x34\x06\xae\x5c\xde\xfd\x31\x13\x49\x05\x9b\x7b\x65\x3b\x8c\x2d\xca\xde\x85\x46\xb4\xeb\x6f\x86\x9f\x36\x8b\x49\x50\x43\x29\xe1\x45\xd7\xdb\xa0\x6f\x6c\x8f\x91\xcb\x59\xd9\x5b\xa0\xd8\x64\x3b\x50\x8f\x12\x31\x70\x60\xe2\x07\xef\x1d\x5a\xdf\x20\x84\xfa\xc3\xf1\xfe\xde\xeb\x05\xd4\x32\x43\x1a\x64\xc2\x5b\x5e\x33\x59\x36\xf6\x79\x2b\x40\x3d\x60\x8c\x6b\x8c\xea\x32\x95\xd9\x89\x71\x09\xa7\xe0\xd2\xa8\x1e\x90\x0c\x8f\x18\xb1\xba\x86\x5d\x34\x3b\xe8\x05\x7c\x58\x71\x0a\xdd\x10\x6b\xab\x54\x2a\x35\xdd\x04\x83\xae\x21\x49\x7e\x7f\x42\x72\x52\x33\xc5\x8e\x71\xa0\xc1\x0c\x2d\x54\xe5\x88\xaa\x07\x8a\xbb\x30\x5c\x26\x8d\x6b\xc6\x0c\xb7\x38\x43\x9b\x8c\xd9\x3b\xe3\x85\xc1\x35\x79\xf6\x56\x44\xe2\x4e\x25\xf7\x74\x67\xc0\x28\x75\x93\x20\x40\xc8\x61\xa5\x58\x67\x26\xb3\x48\x27\x8b\xc2\x4f\x9d\x12\x36\x8c\xae\x98\x4a\x5b\x53\x8d\x51\xae\xec\x1b\x5b\x8e\x09\x0f\x66\x2d\x29\x8b\x66\x28\xda\xdc\x79\x65\x14\xb2\x57\xb2\x3e\x03\x46\xfc\x89\x13\xa6\x43\x7f\x8a\x17\xd1\x7e\x93\x1a\x8c\xd6\x95\xc3\x78\x88\xbb\x78\x44\xed\x17\x10\x3d\x11\xae\xf5\xe6\x36\x3c\x28\x8b\x26\x2f\x84\xcc\x1d\xd2\x10\xd3\x3b\xfa\x4f\xfc\x4d\x96\xc9\x3e\xe6\xaf\x9e\xc6\xc2\x35\x63\xbb\xc3\x28\xa7\x09\x7c\x40\x56\x77\x17\xa8\xb8\x99\x9b\xec\xb3\x5e\xea\x11\x13\x27\xf6\xea\xb6\x62\xc7\x6c\x40\x43\xbd\xf4\x96\xfe\xfd\xe2\xb6\xa8\x11\x82\x7b\x7f\x44\x03\x79\xc6\x80\x36\xbd\xfc\xd4\x63\x95\x58\xfb\x44\xe0\xee\x3d\xe2\x9c\x48\x52\x9b\x44\xc6\x75\x70\x01\xeb\xbc\x16\xa4\x88\x58\xf6\x15\x63\x06\xe7\x2e\x63\x09\x47\x2e\x65\x03\x43\x70\x2e\xd4\x8a\x80\x12\x54\xb3\x61\xb9\x77\x11\x6a\x0f\xa4\x78\x8d\x19\xa0\xdd\xdd\x32\xa4\x85\xe2\x5a\xc3\xd4\xce\x1f\xc1\x2e\x17\x01\x0d\x22\x26\x64\xbc\xe2\x36\x22\x4b\x0c\x07\x58\x59\x8a\x2a\x7e\x48\x17\xbb\x9f\x0e\xad\x45\x93\xbc\x10\x2f\x55\xde\x36\x8f\x25\x03\xe6\x00\x6b\x78\x67\x94\xa5\xa0\x32\xf8\x03\xb3\x5d\xb8\x7b\x66\x63\xda\xb0\x3d\xe6\xc7\x75\x0a\x72\x94\x9b\x32\x30\xd6\x39\x61\xc5\x3d\x5d\x16\x33\xec\x4a\x8c\xe5\xd6\x55\x25\x81\xbb\x10\x86\xbf\xfb\x6d\x7e\x8e\x45\x3e\xce\xa9\x72\x77\xca\x98\xde\x3d\x89\x9d\x5c\xdf\x95\x03\x3e\x7d\xc2\xb0\x00\x9f\x94\xbd\xa8\xbc\x4c\x01\x0f\xde\xe9\xef\xe6\x80\x64\xd7\xfc\xf8\x10\x32\xa1\x73\x87\x7d\x51\x46\x9f\x7d\x4a\x7a\x5f\xf3\xe7\x42\x6a\x21\xc2\x74\x88\xe8\xa9\x73\xf5\x76\x5b\x69\x35\x37\x07\x44\xb6\x4d\xcc\xf5\x1f\x08\xda\x66\x59\xbb\x83\x75\x1e\x76\x0f\x7f\xb1\x11\x2b\x30\xfb\x38\x98\x7c\x13\x16\x7b\xeb\x4b\xd5\x9f\xc4\xc5\x43\x09\x1f\xdc\xfa\x50\x56\xfd\x1c\x85\x01\x89\xd4\x25\x7b\x7c\x15\xfb\xf1\xc8\xd9\x97\x26\xa9\x89\x4b\xb7\xa1\xd2\x27\x18\xc6\x2d\x00\x6f\x67\xa3\x4a\xa2\xf8\x7d\x8a\x4f\x38\x60\x5f\x32\xbd\xad\xc3\x1a\x92\x85\xd4\x90\x0c\xc9\x90\x20\xf7\xe8\x08\xec\xf1\x7c\xc3\xe2\x8b\x6a\x0d\x03\xa3\x9b\xfd\x6b\x1f\x0a\xe7\xc6\xff\x23\x55\xca\x8f\x76\xb0\x52\xea\x1d\xf5\x54\x0b\x5a\x93\x31\xf1\xca\x7a\xe7\xe1\x8d\xc3\x9c\xe3\x50\x0a\x7b\x59\xb7\x37\x64\xd1\x6a\x59\x82\x81\x1f\x09\x22\x67\x02\xb2\x18\xd6\xce\x64\x4f\x77\xfe\x05\x8c\xa6\x37\x84\x7d\xd4\xce\xbe\x0a\x2b\x70\x89\x2e\x20\xed\x32\xdb\xe4\xf5\xa7\x3c\xdb\x29\xf2\x11\x99\x0d\xb5\xd3\xa2\x83\x23\x5f\xf8\x05\xd3\xfb\xa7\x30\xfa\xfa\xac\x76\xaa\x1b\xe6\xf4\x4a\x56\x4a\x18\xf6\x44\xb0\xea\x96\x95\xb4\x7a\x12\xaf\x93\xf9\xb4\xcd\xd6\x80\x0a\x42\xf7\x9f\xf6\x54\x6a\xef\xb4\x13\x7a\xf8\xab\x6c\x38\xc9\x45\x60\xf8\x1b\x82\xe3\x1a\x11\xc1\x5a\xe3\x84\x61\x2d\xd8\x54\x37\x60\xd1\xb5\x7d\x0d\x25\x5c\x67\xec\x2e\x3e\x0f\xc8\x1a\x63\x0a\xaf\x53\xe1\x79\x0d\x96\x1a\x8c\x53\x8b\xc5\xe0\xfb\x41\x00\xf0\x59\xc0\x39\x61\x56\x35\x21\x31\xdc\x90\x1b\x97\xb0\x78\xfd\x3b\x91\xf4\x0c\x79\xac\x25\xee\xb2\xb6\x73\x03\x19\xe3\x9b\x0a\x68\x72\x7b\x82\x88\x86\x50\x10\x8d\x14\x2c\xb5\x42\xad\xc7\x54\x4d\x78\x0d\xf1\xfa\x91\x09\x48\x61\xf0\xb9\x7d\x63\x14\xf1\x75\xc0\xa4\x14\x79\xec\xc4\xb4\x52\x5d\xb1\x12\xc9\xe7\xef\x81\xa1\xa0\x74\xb2\xbf\xd1\x18\x89\xd3\x84\x6f\x3e\x8a\x78\x6f\x4f\x02\x86\xb8\xf8\x98\x7d\x29\x97\xd2\x5a\xf6\x37\x82\x4b\xd6\xa4\xf9\x03\x13\xe8\xb9\x46\xe6\x90\x7a\x93\xfa\x04\x5e\xe7\x86\xb8\x1e\x77\x29\x05\x64\x58\x0d\x4a\x34\x3c\x6b\xd1\x68\x2a\xcb\xb6\x6a\x88\xf2\x7d\x2d\xdb\xd2\xab\x01\xdf\xe6\xee\xd3\xb7\x3c\x2c\xaa\x37\xb5\x15\xbd\x34\xe9\xa0\x73\x84\x0c\xdb\x67\xcd\xe3\x32\x1c\x3b\x3c\x67\xa4\xe8\x8c\x55\x72\x49\x93\xb6\x9d\x78\x87\x41\x1d\x71\xd1\x37\x9b\x95\xdb\x83\x99\x50\x9c\x73\x63\x6f\x69\xd8\xbc\xfb\x0c\x48\x08\x71\xdd\x78\x7b\xc1\x1e\x34\x8b\xbb\xbb\xda\xc1\x9a\x31\x03\x97\x83\x1b\x13\xb5\xb9\x67\xcc\x52\x63\x74\x1c\x4f\x45\x39\x9e\x8c\xac\x1c\x53\x98\x4c\xa9\x44\x24\x5d\x00\x86\x3f\x1d\x90\xd9\xbb\xa0\x22\x16\xf8\x03\x5a\xd7\x1d\x3a\xb4\x32\xa0\x18\x36\x79\x2c\x86\x7d\xff\x3d\x37\xc5\xe4\x96\x4c\x0f\xa9\x8c\xe8\x7a\x6e\x7e\x08\x85\x09\x10\x23\x7c\xd0\xb4\x04\x81\xc6\xab\xc7\xb2\xe9\x02\xd8\x16\x5b\xce\x5c\x2a\x52\x9f\xee\x0c\xb0\x27\xe2\x3c\xda\x19\x18\xbb\x03\x63\xb6\x16\x3e\x3d\x63\x53\x15\xea\xe3\x23\x0a\xad\x1a\x45\xf9\xd7\x42\x15\xfe\x32\x98\xa9\x29\x5a\x1b\xf6\x2e\x15\xe6\x67\x44\x85\xf9\xee\x8a\xd1\xf6\x11\xd1\x38\x38\x46\x5a\x32\x87\xd5\x56\x64\x9b\x69\x46\x0c\xa9\xd5\x1d\x03\x72\x2d\x1f\xd2\x8a\x4d\x7b\x81\xc8\x91\x16\xd9\x07\x5f\x1a\x4b\xc3\x70\x51\x5f\x32\x1d\xe7\x50\x93\xad\x0d\x00\xd1\x27\x67\x61\x87\x9f\x3c\x27\xab\x7b\xba\x0f\x5f\xa7\xd1\x9e\xd4\x50\x16\xb8\xfa\x92\x3d\x6f\x89\xf8\xc1\x16\xda\xe6\xd3\x0b\x44\x21\x4e\xd4\x18\x8a\x6f\x6c\x1b\x90\x41\xc0\xcc\xd5\x1b\x05\x69\x26\x44\xe7\x3d\x13\xaf\x1b\xfb\x0d\xa2\x7a\x6b\xa7\xcc\xd8\x6d\x84\x89\x3c\x7c\xef\xe7\x25\xde\x3c\x6d\x93\xd0\x85\xd9\x56\x1a\xdf\x1f\xe9\x2b\x49\x9d\x16\x89\x60\x07\x07\xb2\x3b\x71\xf7\x59\xd0\x95\xfd\x21\x54\xd8\x18\x8b\x4e\x33\x8d\xf8\x4d\xb3\xe2\xf9\xa5\x7c\xcc\xc4\x15\x91\xf3\x9c\xc2\x09\xfe\x30\x85\x0e\x57\xdf\x21\xbb\x2e\x2a\x00\x2e\x1f\x0b\xd5\xaf\xdd\x14\x9f\x46\xf9\xf7\x2a\x83\x36\x73\xd4\x41\xf6\xc8\x82\x85\x47\xa4\x16\x3c\x86\x22\xda\x9b\x07\xd4\x63\x3e\x6f\xf9\x7a\xf6\x80\x42\xf2\x25\x43\x17\x73\x44\x9b\x32\xc5\x3b\xb4\x32\xd6\xc4\x10\xa5\xf3\x46\xd8\xc2\x9b\x17\x9d\x17\xf0\x1d\xfb\xd0\xa4\xa9\x4f\x67\xc9\x74\xbd\x57\xba\x4e\xa4\x8a\xd3\xaf\x93\x86\xb6\x77\xff\x89\xbf\xea\xaa\x60\x26\x91\x00\x88\x0a\xbe\x42\xc4\xc6\x86\x55\x8f\xf7\xd5\x4d\xfc\x8d\xbc\x16\xab\x9f\xc5\x5e\x98\xda\xd7\xe0\xc1\x01\xcc\xbe\xc1\xd5\x7d\x11\x1c\xd1\xf4\xc0\x44\x4c\x64\x6e\x9b\x40\x14\xde\x18\x7f\x8c\xc1\xed\xc1\x9c\xe0\x1a\x77\x39\x22\xc4\x8f\x03\xee\x7d\x90\x29\x6b\xa1\x18\xb7\x0f\x97\xa4\x9f\x15\x7f\x1f\x92\xbf\x98\x12\x8c\xa9\xca\xa9\x2f\x4e\xe1\x5e\xee\xa3\x2f\x7d\xc2\x87\xa6\xfc\xb0\xb4\x14\x82\x51\x75\x6d\x28\x97\x31\xc8\x6d\x28\x09\x18\x6d\x8a\x7f\x82\x95\x07\xd4\xc6\x31\x34\xee\x05\xc4\xc1\x15\x05\x71\x5f\xcb\xdc\x22\x04\x34\x64\xf4\x47\x5c\x12\x04\x7f\xe4\x22\x0f\xf4\x10\xb6\xc4\x0b\x98\x5a\xe4\x75\x2b\x92\x51\x7e\xd1\xa5\xa0\xf0\xc0\x2a\x20\x49\x77\xa8\x7d\x09\x51\x35\xb8\xda\x03\xde\xcd\x9b\x8c\x20\xb7\x66\xcc\x41\x28\x32\x76\x16\x1c\xb2\x17\x7f\xf9\xec\x1d\x8a\x6f\x6b\xaf\x98\x09\x37\x9f\xe0\xec\x17\x85\xac\x18\x98\x22\xb5\xf0\x06\x60\xef\x26\xcc\x70\xd5\x6e\xff\x48\xdc\x30\x5c\xdc\x6d\x13\xbc\x13\x7d\xfe\x99\x0b\xd6\x72\xf9\xc9\x3b\xb1\x69\x38\x7c\x95\x34\x66\x84\x64\x65\xed\xbf\x99\xaa\x65\xf9\x73\x95\x1e\xca\xcb\xdb\xd2\xa3\xac\xb7\x4b\x9b\x20\x30\x85\xc4\x15\xa7\x25\xa0\x0c\x5e\x37\x50\xe2\x8c\xc8\x32\x0a\x0c\xfa\x39\x72\xb8\xab\xe2\x47\x15\xaa\x5c\x2f\x6e\xe5\x65\xe3\xf5\x50\x10\x5e\xda\xc6\x8e\x61\x6d\x8d\xbd\x3b\xa8\x17\x6a\x57\x3a\xdb\xe7\x76\x4a\x0f\x6b\x6d\x6e\x24\x68\x64\xfc\x36\x76\xbf\x57\x66\x9d\x5c\x54\x03\x4b\xa0\x9c\x17\x2b\x5f\x10\x1c\x66\x85\x10\x7f\x34\x4c\x12\x45\xea\xca\x16\x7a\x5d\xfb\x9d\xfc\xa1\x32\x29\x13\x8e\x5d\x26\x97\x11\xb3\x61\x34\x41\xbb\x64\x92\x82\x99\xda\xf3\xea\x8f\x2d\xbe\x81\x70\x2f\x48\xb8\x6e\x1b\x32\xe2\x11\x5e\x87\xf9\xb9\xa0\xc2\x57\xb4\xc2\x77\x21\x59\xef\xbc\x61\x72\xcb\xef\x4f\x65\xd1\xc0\x4e\x88\xb5\x28\x59\xf9\xe8\x1a\xc7\xd3\x2d\xd2\x53\xb5\x8a\xfd\xb3\x13\x23\xb8\xf5\x8a\x5a\xc0\x0f\x66\xfe\x19\x7c\xdf\x22\xff\xff\xf4\xce\xec\xd9\xdc\xd4\x06\x76\x25\xa5\x8b\xdc\xfc\x12\x26\xcc\xdd\xd6\x33\x00\x10\xc2\x5d\x20\x79\xae\x95\x26\x1b\x79\x27\xb7\xbd\xc0\x3d\xc4\xe7\x4f\x99\xfd\xf1\xb1\xa2\x83\x65\xba\xc1\x23\x5d\xde\x5e\x09\x34\xa9\x01\xdf\x50\x0a\x50\xd2\xcb\xe5\xe6\x96\x58\x01\x1b\xd2\x29\xa5\x0d\x82\x9a\xe1\x0c\xe5\x43\xa4\x2a\xbf\x3a\x9c\x97\x8a\xa7\x95\x6b\x3c\x67\xdf\xe2\xa3\x46\x2a\x71\xbc\xf9\x19\xc8\x89\x2a\x65\x95\xe8\xb4\x33\xda\xb8\x14\x4b\x03\x84\xe3\xf9\x4b\xbc\xad\x8f\xce\x41\x53\x5b\xee\xda\xae\xa1\xd3\xa3\x27\x24\x5f\x41\xc5\x5d\x43\x32\x91\x75\xd4\xd0\x46\x41\x8b\x96\xea\x53\x85\x28\x9c\xe3\xf2\xe7\x6d\x7b\xe6\x1a\x2b\xf8\xec\x04\xce\x46\x71\x3d\xc0\xfc\xc4\xea\xac\x51\x25\x4d\xb1\x5d\x67\xac\xdd\x27\x1d\x48\x5c\xbc\x0b\x49\xa6\xff\xcf\xd5\x51\xab\x68\xdc\xe7\x1b\x55\xc6\x5c\x72\xdf\x44\xd7\xb7\x10\x6f\xfd\x6b\x86\x2a\x79\x11\xb7\xb7\x51\x45\x5f\xaf\x08\x5a\x40\x19\xa9\xac\x81\x71\x43\xe6\x97\x7a\x29\xb3\x03\xa7\x3f\x7d\x9c\x32\xf7\x54\x24\xde\xf0\x53\x00\x66\x20\xe3\x62\xd8\x93\xa9\x9b\x2b\x6b\x93\x79\x99\x6d\xcc\x88\x41\xef\xdd\x29\x8d\xf8\x73\xdc\x6f\x58\xe1\x1e\x1e\x7e\x2c\xcd\xaa\x9b\xda\xab\x4b\x8a\xc9\x9b\x07\xda\xa8\xc9\x03\xed\x9d\x72\x69\x93\x00\x30\x79\x3f\x0c\x3f\xb5\x51\x7f\xba\xb3\x99\x6e\x35\x59\x86\xae\x49\x2f\x98\x37\xa0\x30\x93\x1d\xa9\xa9\xf3\x56\x4d\x2c\x98\xdf\x30\x1b\xdb\xd5\xc6\xc0\x24\x0b\x6a\x62\xaf\xa8\xba\x73\x0a\xa2\xe6\xef\xca\x99\x74\x87\x55\x0c\x08\xca\xa4\x87\x63\x50\xc1\xdf\xa8\x89\x78\x09\xb7\x77\xa5\xbe\x4a\x0e\xfc\x4a\xa0\x29\xfd\xf8\xc1\x59\x19\x43\x94\xbe\xc1\xfe\x7c\xae\xc3\x60\x90\xab\x72\x30\x3c\x97\x20\x56\x09\x61\x02\xb8\x2c\xeb\xef\x5d\x98\x57\xdc\x8a\x51\xab\x06\x63\xfb\x3d\x56\xe5\x5f\xb1\xf6\x9d\x8e\x68\x9b\xd1\x67\xf7\xf4\x1e\xbc\xf2\x8e\xe3\x0e\xe7\x0f\x65\xa3\x04\xc5\x7c\x93\xae\x7b\xae\xdd\x97\xab\xab\x3b\x23\x52\x4b\x31\xb7\x84\xb0\x1a\x4e\xc8\x1c\x0b\x14\x32\xf4\x56\x62\x3f\x68\x6b\xb5\xc2\xb1\xea\x2b\xc7\x9a\xe0\xcf\xb4\x5b\xcd\x68\x98\xc6\x9c\x3f\xbc\x8d\x4f\x3e\x60\x5b\x70\x4a\xed\xa0\x3e\x15\x03\xda\x96\x7b\xe5\x96\x9d\x22\x41\xd8\x49\x86\xe2\x15\xc4\xca\x67\x1e\x7e\x9e\x19\xca\x8a\x19\xe1\xe7\x93\xbb\x03\xb8\x32\xd6\xd7\xa5\x5e\xf6\xe4\x07\xb1\x41\xca\x27\x88\xf0\xfc\x63\xdd\xcf\x11\x26\x32\xa5\x08\xb9\xc0\xc8\x7d\x99\x3d\xfc\x49\x08\x5c\xc3\xde\x76\xb7\xca\x5c\xc8\x58\x43\x92\xdf\xf1\xb7\x0a\x7f\xd4\x48\x28\x4a\x60\xc8\xe4\xc4\x10\x70\x7f\xaf\xac\xfc\xbd\x28\xda\xf4\x8e\x2b\xc5\x66\x54\x1b\x52\xa4\xbe\x02\x44\x78\xf1\x36\x5a\xe3\xa5\x9d\x9b\x30\xbd\x90\x9e\xd7\x69\x54\xbe\x0f\x78\xbd\x62\x27\x31\x60\xf7\x09\x12\xad\x0f\xfd\xf6\x84\x8e\x77\xd8\xf7\xee\x0b\x0c\xe9\xa7\x37\xd8\xe8\x4b\x68\xf9\x67\xd4\xac\x8b\x3e\x16\x30\x2c\x78\xcd\x28\x75\x2a\x6f\xdd\x1a\x02\xcb\x1a\x35\xe2\x70\x3c\x9f\x41\x16\x7c\x98\x0f\x8a\x9b\x15\x48\x83\xf6\xcc\xaf\xac\xb5\xce\x7b\xbf\xfe\xf7\xff\x09\x00\x00\xff\xff\x2a\x55\x00\x86\x40\x70\x00\x00") + +func uiJsLibsMithriljs020MithrilMinJsMapBytes() ([]byte, error) { + return bindataRead( + _uiJsLibsMithriljs020MithrilMinJsMap, + "ui/js/libs/mithriljs/0.2.0/mithril.min.js.map", + ) +} + +func uiJsLibsMithriljs020MithrilMinJsMap() (*asset, error) { + bytes, err := uiJsLibsMithriljs020MithrilMinJsMapBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/js/libs/mithriljs/0.2.0/mithril.min.js.map", size: 28736, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiJsLibsNvd3171NvD3MinJs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\xf7\x76\xe3\x48\x92\x2f\xfc\xff\x3e\x85\xc4\x99\xd5\x02\xc5\x24\x8b\x54\x55\xf5\xcc\x90\x0d\xf1\xc8\x95\x77\xd3\xd5\x76\x74\x74\xfa\x02\x20\xe8\x49\x50\xf4\x54\x89\x0f\xf5\xbd\xc2\xf7\x64\x37\x22\x0d\x90\x09\x64\x02\xa0\x4a\xea\xde\xdd\x3b\xa7\x4f\x97\x88\x44\x7a\xa4\x09\xf3\x8b\x88\xa7\x4f\x0e\x26\xab\xf6\xb3\x83\x55\x30\x9b\xf7\xc3\xc9\x41\xbd\xfa\xf7\x6a\xfd\xc0\xea\x2d\x16\xd3\x79\xe3\xe9\xd3\x6e\x7f\xd1\x5b\x7a\x55\x3f\x1c\x3f\x9d\x84\xab\xe5\xfc\x29\x66\xb6\x0f\x8e\x6b\xf5\x17\x95\xda\xb3\xca\xf1\xb3\x83\x27\x4f\xff\xe3\xb0\xb3\x9c\xf8\x0b\x28\x6d\xd9\x5f\x57\xee\xec\xc0\x75\xbe\xee\x9a\x6e\xb5\x1d\xac\x9c\xc3\x3a\x71\xab\x8b\x30\x1c\x2d\xfa\x53\x27\xfa\x75\x77\xf7\x75\x07\xe9\xcb\x45\x7f\x34\x77\xf8\x5f\x9e\x36\x0e\xdb\x01\x4d\x64\x3f\x78\xaa\xdf\x73\x67\x8b\xb9\x43\x7f\x77\x67\xee\xb4\x37\x77\xae\xae\xe1\xf7\x28\xec\xf2\xd4\x76\x38\xe6\x3f\xfa\xf3\xa9\xbb\xf0\x7b\x4e\xfb\x59\xf4\xdb\x2a\xcd\x82\x49\x3b\x98\xfd\x3e\x5f\x40\x3d\x25\x22\x1e\xe1\xdf\x92\x4d\x5e\xf2\xde\x57\xa7\xb3\x70\x11\x2e\xb6\xd3\xa0\xea\xf5\x27\xed\xbb\x3b\xcb\xf0\xc6\x89\xc6\xeb\xda\x5f\xfb\x1d\xab\x24\x9e\x4b\x87\x0e\x66\x0a\x3b\x07\x8b\x5e\x7f\x6e\x2f\x7a\xb3\x70\x7d\x30\x09\xd6\x07\x3f\x42\xea\xe5\x6c\x16\xce\xac\x92\xa1\xce\x83\xca\xc1\xba\xe7\x2e\x0e\xfa\xf3\x83\xc5\x6c\xdb\x9f\x74\x0f\x16\xe1\x81\x17\x1c\x78\xe1\x12\x5e\x42\xea\x24\x5c\x1c\xf8\xee\x68\xe4\x7a\xa3\xa0\x64\x37\x71\x9e\x3d\xe7\x74\x36\x73\xb7\x52\x4d\xf3\x51\xdf\x0f\xaa\x98\xcd\x72\x67\xdd\xe5\x38\x98\x2c\xe6\xa4\x6e\x13\xdf\xc1\x0e\x11\xa9\xe7\x36\x4c\x56\x20\x3f\xce\x82\xc5\x72\x36\x39\xf0\xab\xee\x74\x3a\xda\x5a\x98\xff\xa0\x3f\x81\x09\x9b\xf8\x38\xa0\xf6\xd1\x91\xdb\xc2\xc4\x86\x4b\x70\x3d\x4c\x7c\x77\x61\x15\x69\xde\xb6\xed\x5d\x93\x57\xde\x8e\xf3\xd2\x0e\xc5\x8f\x24\x90\x5e\xe1\x8c\xb5\x49\xb0\xb3\x09\x5d\x44\x47\x47\x56\xfc\x59\xab\xd0\xd9\xc4\xd7\x94\x06\xc1\x56\x44\x95\xbe\xf8\xb1\x3f\x0e\x9c\x32\xd6\x75\xe1\x2e\x78\x65\x9a\x4a\x70\x0d\x68\xaa\x80\x64\xb5\x02\xbe\xda\x60\x09\x2f\xdc\x11\x7d\xa5\xe6\xac\x24\xdb\x66\x05\xac\x12\x2d\x50\x4a\x15\xb7\x77\xb6\xcd\x12\xe5\xaf\x00\xab\x89\x8f\x79\x0d\x8b\x22\x5c\xe3\x4c\xcf\xc3\x51\x70\x74\xc4\x7f\x60\x01\xe5\x81\x7d\x2f\x3b\x95\x62\xf1\x14\x12\x7f\x89\x26\x6c\xa8\xe0\xc0\xdc\x44\xbc\x8e\x1d\xb1\x8e\x95\x56\x0d\x4b\x97\x6d\x7a\xcf\x31\xbc\x66\xeb\x41\xaa\x88\xf0\xdf\x76\xd3\x33\x76\x75\xc7\x57\x4c\x94\x72\x15\xfd\xaa\x8e\x82\x49\x77\xd1\xab\xd4\xaf\xe9\x76\x0f\xa6\xb3\x00\xd6\x62\x20\xef\x4a\xe2\xd9\x5f\x53\x13\xb7\x76\x67\x13\xf5\xc9\x2a\xd1\xa3\x0f\x7f\xc2\x86\x6b\x1c\xfc\x9f\x52\xd9\x2d\x97\xfe\xcf\x41\xcf\x9d\xc3\xd6\x0b\x60\xbd\x46\x95\x57\x0f\x4a\xc4\xbb\xbb\x2b\x95\x6c\x6c\x94\x2d\x9d\xb8\x41\x68\xce\x73\xe0\x75\x3d\x7a\x57\x75\xe1\xcd\x2a\x70\x0e\x6b\xf2\xb2\x93\xd7\xad\xc5\xf6\xb0\x2f\x7f\xfd\x0e\x1c\x10\x98\x08\x8b\x9f\x74\x9c\x5a\xd3\x3b\xe9\xc0\xe2\xc7\x95\xc6\x6b\xbd\x59\x06\xcb\xe0\xaa\x73\x6d\x37\x3b\xe5\xb2\xdd\x76\x82\x6a\x37\x98\x04\x33\xe8\xa1\x65\x13\xfe\xc9\xd8\x06\xf4\x5c\x7f\x18\x7d\x45\xf1\x65\x8e\x8e\xe2\x97\x56\xdb\x8e\x0e\xd3\xea\x74\x39\xef\x41\x42\x53\x6d\xa8\x3a\x9f\xe2\x86\xb6\x6a\xa4\x63\x93\xc4\x2b\xf6\x11\x5a\xf3\x80\xae\xf5\x70\xb9\xb0\x7c\xbb\x61\xa5\xc7\x0a\xff\x5a\x76\x7a\x5a\xea\x70\x28\x28\x65\x77\x9a\x3c\x89\x36\xd9\x91\xef\xb6\xdb\xaf\xb0\xd3\xca\xec\xf3\x71\xc6\xab\xa5\x76\xad\x19\xbc\xe5\x39\x5f\xc5\x7c\x35\xe4\xbc\x44\x4c\x8a\x94\x0a\xcb\x2b\x35\x68\x3a\x4d\x5e\x6a\x38\x77\x77\x22\xc1\x82\x71\x94\xe0\xc0\x0e\x3a\xfd\x49\xd0\x8e\xaf\x03\xb8\xcc\x96\x74\x87\x69\xde\x05\x9b\x69\x08\x97\x1b\x74\x8f\xe5\xaa\xf2\x04\xc7\xb5\xb5\x75\xb1\x5d\x0b\xd9\xf9\xf6\x9d\xac\x30\x27\xbd\x01\xab\xeb\x59\x7f\x11\x28\xd7\x13\xdf\x47\xab\xb0\xdf\x3e\xa8\x1d\x3a\x0e\x2f\xd4\x71\xe7\x0b\x28\xd0\xe2\x7f\x59\x41\xc8\xdf\x70\x2d\x9b\x5f\xa7\x30\x24\xb7\x7d\x9f\xba\xb0\x9c\x54\x55\x7f\xb2\x80\x19\xa7\x13\xf5\x6a\xd9\x87\x4b\x1d\x86\x23\x2f\xfa\xd2\x12\x0e\xa5\xf9\x62\xd6\xf7\x17\xa5\xa6\x48\x3f\xf0\xac\x91\xfd\x75\x54\x0d\x5c\xb8\xbd\xa3\xcc\x90\x14\x65\x18\x47\xc4\x06\x5c\xf4\xe3\x10\x2a\xa1\x77\x96\x0d\x97\x9c\x8b\x9f\x14\x76\x0d\x7c\x43\xd2\xc7\x2d\x38\x80\xc5\xd4\x84\x73\x6f\x08\xb3\xd6\xc6\xfc\xc1\x0a\xbe\x71\x35\xec\x74\x60\x0d\xfe\x0a\x59\x13\x49\xbf\x91\xd2\x7c\xd5\x85\x29\x8f\x5f\xc0\x96\xed\x06\xf8\xa7\xfb\xd1\x1d\xc3\x97\xb4\xfa\xb8\x88\x49\xf2\xbd\x3f\x72\xe7\x73\xcc\x51\xf5\xdc\x79\xf0\xb3\x3b\xaa\x8e\x19\x01\x32\x59\x55\x46\x41\x97\x12\x1c\x50\x18\x3a\x54\x83\xe3\xbf\x8f\xfd\xa9\x38\x1d\xd8\x4d\x9d\x05\x09\xf0\xd7\x22\x9c\xda\xa4\x76\x02\xd4\x47\xed\x04\x16\x56\xfb\x24\xbc\xbb\x0b\x4e\x80\x62\x8a\x5a\x9a\x05\x23\x3c\x91\x7e\xa4\x0d\x1e\x1d\xb1\xaf\xe1\x48\x5d\x55\x32\x54\xc3\x35\x2c\xf8\x2f\x3f\xbf\xba\x1c\x05\xb8\xb0\xef\xee\x06\xf4\x96\x81\xa9\x78\xa0\x1a\x61\x0c\x79\x25\xa2\x59\x31\x0d\x43\x9a\x37\x36\x5f\x3e\x2c\xeb\xcf\x21\x5d\x3a\x97\x98\x7d\x7e\x8e\x19\x80\x96\x60\x6b\x50\x10\x14\xbd\x6a\xc0\x3a\xf1\x01\x17\x00\x9e\x24\x5f\xe9\x52\xf8\xb5\xd1\x26\xf4\xc7\x6f\x0d\xbc\xf9\x3d\xbe\x3d\xe9\xfa\x7b\x0f\xeb\xcf\x9a\x2c\x47\x23\x9b\xd0\x7e\xfb\xd5\x5e\xbf\xdd\x0e\x26\x16\x7c\x92\x5d\xfc\x50\x67\xe7\xf3\xc8\xe9\xc2\x0a\x06\xea\x78\x81\xe7\xa3\xda\xde\x38\x5c\x05\x9a\x06\xc9\x14\x3b\xfe\x2b\x7c\xfc\x65\xd0\x18\x41\xf3\xa5\xb6\x37\xf2\xe1\x24\x1d\x96\xe4\x29\xc2\xed\x7c\x74\x14\xd5\x78\xc1\xf3\x14\xaa\x30\xb7\xb6\xf3\x82\x55\xed\x70\x8c\x13\xac\x66\x0e\x25\xfd\x05\xdf\x43\xa1\x03\x0b\xf0\x1f\xdf\xd5\xc8\xd4\x81\x6f\xf6\xbc\x56\x23\x37\xce\x84\x67\x39\x85\xdb\xbc\xd4\x85\xef\x53\x59\xc3\x39\x8c\x7f\xa5\x1d\x8e\x93\xfb\xde\xdd\x06\xb3\x92\x5d\x6d\xbb\x0b\xd7\xba\x1a\x5d\xdb\x64\xe6\xdc\x00\x99\xb4\xc0\xf3\x11\x6f\x7c\xbc\x13\x4a\x5d\xc8\xe1\x2e\x16\x40\x11\xd3\x6f\x0f\x44\xf9\x01\xaf\xf2\xc0\x58\x65\x73\x96\x51\x5c\x2d\x15\x7d\x6a\x20\xf0\x07\xb8\xe3\x28\xcd\xb7\x08\x97\x7e\x0f\x3f\x5b\x89\x8c\x6d\x9a\x32\x16\x1f\x12\x52\x08\xac\x80\x38\x11\x56\x93\x9c\x16\x7d\x43\x51\x32\x7a\x82\xe5\xd5\x15\xad\x39\xb8\xb0\xd2\xeb\x2d\x3e\xef\x7c\xd8\x7d\x78\x13\xc5\x45\x8e\x8e\xa4\x07\x3e\xa6\x4d\xbd\x64\xc3\xd7\xf5\xf1\x66\x89\x8f\xe7\x04\x9b\xe5\xc1\xac\xf2\xaf\x56\xaa\x1a\x47\x2f\x7f\xb5\x11\x4b\xa1\x1f\x06\x3b\x7a\xe8\xf8\xad\x2b\xce\x7f\x55\x3f\xba\x1f\x17\xe1\xbf\x82\x59\x08\x7d\xbc\x6e\xc0\x5d\xfb\x05\xce\xe4\x49\x17\xa9\xb4\xe4\xb7\xe3\xf5\xa4\xe6\xbf\x2b\xce\xf7\xe8\x25\x0c\x84\x68\xae\x10\x77\x17\x65\x38\xce\xc9\xb0\x85\x1a\xa6\xd1\x03\xe4\xae\xe1\x84\x07\x9b\x3e\x50\x50\x30\xcd\x74\x0f\x22\x2d\xbd\xb3\xf9\x6a\xf6\x23\xe6\x51\xb0\x9b\x40\x6a\xf9\xd5\xf6\x12\xae\x7d\x6c\x04\xbe\x27\xec\xf1\xe0\x02\xce\x9f\x2d\x3e\xfc\xde\x9f\xbf\x91\x56\x1b\xae\x34\x3c\x0a\x92\x07\x41\x9b\x7d\x5a\xfe\x85\x3b\xce\x57\x3c\xb3\x1b\x35\x02\x07\x76\xa3\xb6\x23\x5d\xba\x87\x80\x8e\x00\xd2\x08\x26\xc0\x85\xe9\x22\x09\x1e\x34\x79\x74\xc0\x9c\x25\x4e\xaf\x38\xe5\x9c\x2d\xae\x52\xe2\x70\x80\xc5\xcc\x2f\x34\xda\x8b\xa1\x53\x3a\xa5\xbd\xfe\xf5\x93\x37\x80\x8f\x5c\xea\x4f\x38\x79\x20\x0e\x48\x2f\xe6\x87\x7b\x30\x6d\x82\x13\xf7\xe1\xf7\x18\x4e\xde\xfe\x44\x77\xc1\x27\x49\xed\x96\x45\xef\x25\x47\x47\x8d\x20\x4f\x3f\x6d\xd1\x7f\x1b\x34\x17\x61\xb7\x99\x21\x33\xbe\x6a\xb1\x3f\x0d\x7e\xed\x79\x76\xa3\xb3\x83\xfe\xac\xfb\xed\x45\xaf\x58\x77\xe0\x8a\xc7\x62\x6d\x2c\xd6\x0b\xfa\xdd\xde\xa2\x58\xb9\x80\x95\x0b\xb0\xdc\xe6\x0b\x7e\xac\x62\xe5\xba\xac\x5c\x17\xcb\xcd\x7b\xe1\x5a\xb3\xaf\xb3\x8a\xf7\x59\xf1\x3e\x2d\xbe\xea\x9e\x87\x93\x85\x0b\x85\x67\xc5\x4a\x0f\x58\xe9\x01\x94\x4e\x90\x53\x67\xfd\x39\x7c\x74\x85\xef\x21\x7e\x82\xa0\x82\xab\xfe\xd0\x72\x65\x4e\x9e\x32\xed\xe2\x22\x3d\xc0\x75\xc4\xd6\x77\xb3\xed\x68\x04\x19\x7e\x4b\xd7\xc9\xea\x66\xd7\xf0\x69\xb1\x20\xc1\x76\x09\x4e\x1f\x72\x57\xa0\xbf\x1d\xdc\x02\x1e\xed\x27\xf0\x36\x81\xcd\x3e\x39\xdd\x2c\x63\x77\x63\x5d\x01\x6b\x41\xcb\x01\x37\x47\xf7\x8b\xe5\x5e\x75\x81\xbb\x41\xa1\x4a\xbc\x7e\x22\x52\xbe\x07\x27\x67\xcf\xe9\x62\x4e\xc7\xf1\xc4\x10\xba\xb4\x23\x7d\x5a\x67\x7f\x62\x5d\x75\xcb\xc8\x39\x44\x5c\x22\x9c\xff\xb4\xde\x3e\xd4\xcb\x4a\xe8\xaa\xa6\x77\x84\xd3\xb7\xc9\x07\x77\xd1\xab\xba\xde\xdc\x1a\x54\x3c\xfb\xc4\x89\x1e\x7b\xf0\xd8\xea\xe2\x47\x74\xab\xb8\xbf\x83\xf9\x82\xde\xa2\x6f\xa0\xae\x4d\xf6\x37\x60\xc7\x47\xfd\x69\x8d\x9f\x1e\xcd\x68\x1a\x81\xe1\xbb\x54\x28\x5c\x17\x58\x2d\x7a\xb8\x77\xe3\x96\xbd\x8a\x6b\x37\xdb\x27\x0e\xf2\xfd\x27\x5d\x4a\xc2\x76\x51\x76\x03\x07\x1e\x81\xa5\x6c\x22\xa5\x93\xa7\xa0\xc2\x68\xc6\x64\x36\xa3\x06\x25\x5a\x9a\x5f\x29\x43\xbb\x29\x88\x60\x18\x30\xd4\x04\xc7\x6d\x4c\xfd\xba\x90\x28\xee\x1e\xcc\x65\x0b\x89\x94\xc8\x0b\x9b\x9c\x1d\xd9\xab\x7e\xb0\x3e\x0b\x37\x25\xbb\x41\x87\x0e\x8d\x31\x6e\x99\x32\x97\x50\xfa\xa0\x24\x18\xe1\xa9\x3b\x9b\xc3\x74\x2e\x80\x8b\x9c\x2f\xb6\xa3\xc0\x2a\xd1\x23\x01\xce\xbc\x7a\xcd\x7e\xea\x5d\x1d\x5f\x37\xa7\xec\x6c\x61\x7f\x9e\xf8\x64\x4a\xcf\x25\xfa\xef\x13\x7f\xb7\xdb\x45\xe3\xf2\xd9\xb8\x0e\x27\x7c\x60\x4d\xd7\x19\xb6\x86\x8d\x76\xe8\xd3\xdd\x55\xf5\xc2\xf6\x96\xc8\x74\x8f\x1b\xdf\x6e\xed\xfe\x4a\x73\xb9\xf1\x59\x3c\x28\x95\xad\x41\x6b\xd0\x28\x6d\xb6\x15\x9e\x04\x83\xe7\xb9\xfb\xed\x12\x59\xd9\x64\x22\xfa\x0f\xdd\xc2\xfb\x4a\x3c\x62\xa7\xe9\xfd\x15\x65\x08\xa7\xae\xdf\x5f\x6c\x45\x62\x7c\x53\x43\x1f\xc8\xc1\x02\x65\x7d\xf0\xa7\x0d\xff\x23\x41\x45\x3b\x13\xb4\xad\x35\x12\x25\x90\x5f\x7d\x0e\x81\x42\x63\x73\x2f\xcd\x43\x9b\xcd\xc3\xec\xe8\xe8\x0c\x76\x1f\x4c\x3c\x17\x3b\x74\xf8\x1c\xc2\x56\x64\x84\x80\xd3\x6f\xf5\x1b\x74\x22\xe3\xd5\xa9\xa5\x3c\x7c\x2b\x12\x3e\x5a\x28\xc2\x81\xc5\x10\xc2\xa1\x04\xc7\xd9\xeb\x1f\x3f\xbc\x87\x5d\x49\x80\xb5\x58\xb6\x62\x16\x32\x49\xb6\xc0\x97\xa8\x02\xc9\xcf\xb9\x87\xf9\xd9\xf6\x47\xb6\xaa\xf8\x42\x42\xde\xcd\x4b\xdc\xae\xb8\x6a\x5c\x56\x1a\x6f\x77\x28\x7d\x86\x62\x51\xa0\x4e\xe0\x9e\x84\x4a\x7e\xc0\x2f\x88\x9c\xdf\xd0\xf8\x2e\x70\x7c\x3a\x38\xa8\x09\x18\x2b\x56\x57\xdf\x9c\xbf\x19\xc4\xfb\x2f\xb0\x4f\xfa\xfc\x9a\x69\xd5\xe0\xf2\xf0\xe8\xa2\x8b\x5f\x57\xda\x8c\x6b\xf3\xd8\xe2\x8c\x5e\xf8\xf4\x19\xde\xe2\x1f\x7b\xd7\x29\x43\x73\x8c\xbf\x7c\x0f\x09\x65\x96\xbd\x72\xfc\x64\x08\x74\xc3\x2c\x1c\x8d\xde\xd3\xef\x11\xe7\xfa\x31\x9c\x96\x69\x5b\x52\x1e\x48\x23\x70\x0a\xf6\x4e\x6a\x30\xef\xfc\x8c\xe8\x8c\x42\x38\x5b\xbb\x4f\x7b\xf6\x93\x9e\x4d\xce\xad\xab\x0e\x81\x33\x74\x67\x37\xe2\x9f\xa4\xbd\xdb\xb1\xd3\x9a\x53\x2f\xa5\x75\x09\x3e\xfd\xf1\x0b\x38\x49\x6b\x40\x52\xd0\xd4\x88\xa8\xa0\x7f\x46\x48\x67\x8c\x1d\xa4\xfd\x27\x2c\x25\x64\x7f\xa6\xfc\xe3\xd0\x07\xfc\x3e\xf8\x63\x07\x0c\x42\x82\x22\x9a\x61\x05\x73\xa7\x0e\x15\x2c\xf0\xe7\x12\x25\x3a\x2b\x27\xde\x4a\x95\x52\x59\xea\x7f\x3d\x78\xf1\x84\x3e\xce\x5c\x20\x60\x80\xbb\xb7\xc9\x1a\x33\x57\xa6\x8c\x0d\xac\x50\x3e\x67\x5e\x99\x84\x40\x5e\x92\x8d\xf6\xee\xdc\x91\xad\x21\xfd\xd6\x90\x7e\x9a\x94\xe5\xe3\x60\xe0\x72\x71\xf9\xe5\x52\x2a\xf1\xc5\x1e\x9f\x14\xd1\x19\xe2\xc3\xea\x5e\x04\x7c\x1d\xc3\x66\x67\x92\x79\x7a\x79\x2d\xc4\x62\xf5\xe4\x4d\xbd\xe8\xc1\x76\x88\x18\x23\xf7\xda\x4e\x11\xd6\x3c\x47\xd3\x8f\x53\x70\xe3\x47\x0f\xed\xf8\x60\x0a\x47\x40\xd7\x4d\x4a\xe4\x59\xfc\x1a\x4e\xfe\x70\xd2\x95\x0e\x8a\xd2\xa6\xb2\xc2\x3b\xaa\x44\xb9\x98\xde\x62\x3c\xb2\xb6\x70\xba\xd2\x34\x9b\x51\xcb\xed\x44\x17\xf1\x60\xcc\xee\x22\xcb\x81\x42\x13\xa5\x60\xc4\xf1\x69\xe9\x85\x79\x30\xeb\x07\xf3\x9d\xa6\x3a\xf9\x60\x2b\xf5\x60\x93\x8d\x70\xa3\xe9\x99\x82\x6a\xf4\x7e\x07\x3b\x54\x9d\x96\xa8\x0e\x26\x66\xa9\xc0\x04\x85\x33\xc6\x91\xb0\xe1\xab\xc7\x3b\x3f\x80\x51\xe8\xd7\x9d\xe1\x01\xc0\x0a\x18\xda\xa5\xef\xf0\xba\x35\xb4\x39\x0c\xb6\xd2\x1c\x6b\x29\xa2\x5b\x98\x78\xc8\x06\x29\x19\xf5\x24\xbf\x96\xb6\xa6\x8d\xf8\x84\xa2\x2e\xf9\x33\x60\x75\xaa\xd0\xcc\xe5\x5a\x85\x68\xee\x04\xf7\x98\x62\x58\xf0\xc8\x76\x91\x82\xaa\x11\x20\x9b\x70\x23\x76\x03\xeb\xaa\xf4\x97\x4e\xa7\x83\xfa\x0b\x3a\x09\xd7\xa8\x4c\xaa\x7e\xd7\x4c\x48\x0c\xa2\xf9\x0c\x67\xc0\xf7\x56\xbc\x70\xb1\x08\xc7\x62\x4a\x3d\xe0\x28\x93\x39\xf0\x58\x93\x5f\xef\x76\xe2\x62\xf2\x04\xb5\x01\x0c\x11\xbb\x54\x9a\x49\xc1\x23\x12\x4e\x21\xbc\x84\x33\x10\x4e\xd5\xd2\xf7\xf0\x49\x0f\xe8\x1c\x3a\xff\xc5\x5e\xfc\xd7\x49\xa9\x2c\x32\x95\x4b\xdf\x3f\x85\x0c\x27\xb0\x66\x81\xcf\x38\x4b\x6e\x78\xf7\xe8\x48\x2c\x4f\x3e\x51\xec\x21\x4d\x32\xb3\x5e\x1c\x1e\x8a\x1c\x9c\xc4\x6c\x1a\x0a\x31\x96\xcc\x4e\x6c\x01\xe7\x4a\xfc\xba\x86\xcf\xcc\xd5\x1c\x87\xf5\x1d\x39\x57\x04\xda\x21\xf6\xca\x74\x83\xfa\xa4\x0d\xdb\x2f\x22\x97\x42\x7e\x5f\xbc\xa6\x57\x14\x12\x4b\x70\xaa\xa7\xde\xfe\x82\xb4\x14\x7d\xd9\x17\x2a\xd7\x2a\xe3\x15\xbf\xf4\x6f\x71\xba\x29\xb1\x05\x97\x80\xf6\x25\xbb\xfe\xe0\x6e\xe0\x32\xdf\xa9\xdb\x0d\x7e\xfb\x44\x2b\x86\x0b\x41\x4a\xfc\x95\x25\x36\x07\x22\x91\x92\x06\xb4\xf1\x13\x47\x21\xbf\xf8\x8d\x46\x5f\x01\x41\x35\xa8\xd4\xbf\x83\xae\xc9\xa5\xd8\x80\xf4\xc5\xd8\x3b\xa0\x59\xfa\x50\x8e\xae\x9c\x19\x59\xc0\x1d\x23\x7f\x5d\xbe\xcc\x9b\xed\xf0\xa0\x3f\xff\xe8\x7e\x84\xcf\x14\xdd\xac\xf6\xdd\x9d\xe5\x95\x1d\x39\x85\xb8\xd1\xe3\x67\xa0\xef\x27\x8b\xe6\xba\xd7\x1f\xa1\x54\x3c\xe2\xa6\x77\x70\x81\xa5\x5b\xf0\xd3\x2d\xe0\x5d\x9e\x68\x82\x26\x15\x69\xa3\x39\x5f\xf7\x51\x60\x00\x9c\x80\xef\xce\x83\x52\x50\x6a\xc0\x45\x02\x74\x51\xa5\x57\xe9\x02\x91\xe3\x5d\xd5\xaf\x2b\xc1\xd3\x63\xb8\x61\x57\x56\x68\xc3\xed\xba\xc4\x3f\xd3\x13\xdc\x0f\x2c\x67\xb9\x7b\x32\x6d\xb1\x1f\x8d\x69\x65\x56\xf6\x81\x2a\x3b\x59\x50\xd6\x61\x58\x59\x94\xdb\x50\xa8\x1c\x9c\x0c\xcb\x03\x96\x54\x1e\x60\x62\x05\xc9\x39\x58\x6f\xc3\x26\x6d\x76\x2d\x9a\x2d\x67\x34\x3a\x2b\xf7\x4e\xfa\x51\xb3\xd8\x41\xa9\xa5\xf2\x8b\x22\xed\x4c\xe2\xe1\x3d\x3d\xae\xbc\xe0\x6d\x41\xa3\xfa\xe1\x4d\xb1\xd6\xb8\x59\x1f\x4b\x15\x6b\x68\x2e\x37\x14\x0d\xa9\xb2\x6f\x43\xd1\xf0\xd4\x51\x20\x59\xc2\xeb\x17\x75\x27\x6a\xde\xf9\x15\xe7\x86\x51\xdd\x6d\xfc\x85\xe4\x28\x2e\xa0\xb5\x13\x1a\xc9\x56\xdd\x86\xbb\xbb\x8b\x36\x84\xf8\xc1\x89\x10\x89\x48\xd4\x6d\xca\xdc\x82\x94\x02\xdd\x38\x70\x29\xbb\x93\x39\x8a\xe7\x2d\xe0\x76\xd6\xb4\xcb\xe5\xa9\x5d\x2e\x4d\x37\xe4\x80\xa6\x40\xd7\xcb\x43\x9a\x60\x97\x80\xe6\x52\x0a\xf8\x22\x5f\x9b\xbf\xbf\xc5\x9b\x86\xd2\x70\xd3\x10\xf3\x30\xb9\xa2\xb5\x21\x5b\x1b\xe8\xaf\x14\x2f\x64\x7f\x5f\xad\x37\x47\xad\x49\x95\x56\xda\x67\xe7\x5e\xb5\x4d\xc5\x75\x63\x5b\x91\xe3\xa5\xb9\xa8\xc6\x84\xb5\x34\x5b\x4e\x51\x3e\xa8\x56\x21\x4a\x9e\x02\x19\x2f\xae\xac\x1f\xd7\x41\x80\x82\x61\xcc\x08\xdc\xf8\x58\xc1\x02\x88\xab\x7b\x47\x4a\xfd\x31\x2a\xe5\xdc\xc9\x22\xa6\x1d\x2a\xeb\xc0\x1b\xf6\x17\x15\xa9\xec\x36\xdd\xa7\x3a\xca\x25\x63\x00\x84\x4e\xad\xe1\xac\x49\xbb\x1a\x4e\xb1\xd1\x08\x0e\x23\x9e\x51\x7b\x49\xd5\xe8\xa8\xaf\x6d\x57\x7f\x17\xd9\xd8\xed\xc2\x69\x50\xeb\xeb\x8e\x7c\x15\xc3\x6b\x7c\x85\xc5\xd4\x48\x8f\x62\xbe\x23\x73\xf9\x05\x1c\x5f\xd0\xda\x6e\x47\xba\x33\x77\x05\x5d\x35\x95\xeb\xa4\xcb\x75\x68\xb9\x76\x9f\xdd\x75\xa6\x82\xdd\x74\xc1\x2e\x2d\x38\x9f\xb8\xd3\x8b\x9c\xc2\xbd\x74\xe1\x1e\x2d\xcc\x68\xa5\xb9\xa9\xdc\x20\x5d\x6e\xc0\xca\x21\x84\x28\x12\xbd\x99\x8a\x0f\xd3\xc5\x87\xb4\x78\xa7\xbf\x09\xda\xb0\xb1\x4c\x05\xfb\xe9\x82\x7d\x5a\x30\x98\x20\x5f\xd0\x36\x95\x9b\xa5\xcb\xcd\x68\xb9\x48\x46\x6d\x2a\x39\x4e\x97\x1c\xb3\x91\xc2\x20\x61\x6d\xbd\x62\x9a\xee\xd0\x38\xd6\xd3\x74\x05\xa7\xb4\x02\x4a\x5c\xbe\x84\x05\x0d\xac\x86\x79\xaa\x36\xe9\xe2\x1b\xd6\x73\x20\x59\x82\x59\x6e\xf9\x6d\xba\xfc\x96\x96\x07\x2a\x39\xb7\xf0\x6d\xba\xf0\xad\xd4\xf8\x65\xf6\xa4\x2f\xd2\xa5\x17\xb4\xb4\x46\x17\x60\xaa\x63\x99\xae\x03\x38\xdc\x43\xac\x65\x1a\xb2\x33\xc7\x54\x74\x9a\x2e\xca\x05\x5b\x12\x85\x2b\x4b\xca\xb9\xac\x86\x49\xbb\xa4\x3c\xb1\xe8\x9d\xbe\x82\xa6\x19\x69\x61\x6a\xf8\x26\xdd\xf0\x4d\x66\xc3\xfc\xba\xba\x31\x37\x7c\xc3\x1b\x66\xda\x12\x53\xc3\xa3\x74\xc3\xa3\x43\x07\x48\x6f\x6b\x84\x73\x46\xda\x16\x72\x00\x04\xf9\x47\x53\x15\x41\xba\x0a\xb7\x4a\x65\x03\x14\x1f\x46\xd7\xac\xc3\x53\xaa\x1b\x12\xd1\xdb\xe2\x07\x47\x12\x72\xd2\x5d\xcd\xbe\x8d\x5f\x50\x9e\x24\x7a\x41\x9f\x50\x09\x27\xbf\x45\xde\x17\x3f\x33\x17\x63\xe0\x15\x6a\xea\x74\x98\xe8\xb4\xfd\x15\xca\xf5\x8d\xeb\x72\xa5\xc9\x4e\x51\x28\xec\x4a\xe8\x4f\xfa\x8b\x4f\xec\xfc\xa7\xb7\xc1\x6e\x67\xc5\x2f\x63\x72\xdd\x49\xc3\x31\x29\x6d\xdf\xf8\xee\x79\x8d\x30\x42\xbe\xf1\xfc\xef\xb5\xe8\x52\x4a\x11\xea\x11\x32\x4c\xa2\xc2\x5b\x30\xc7\x4c\x43\x93\xca\x0e\x5d\xe0\x4a\x98\x74\x31\xe2\xda\x8d\xd2\xf9\x97\x2f\xf5\xf3\x70\x3c\x75\x17\x25\x27\x26\xe6\x7d\x9a\xf2\x01\x78\xbd\xa3\x23\x13\x5d\x62\x7e\x23\x73\x35\x71\xdf\x8a\xe4\x8e\xbb\x9b\x93\x3b\x1e\x81\xc2\x80\x48\x7d\xa2\xfc\x48\x76\x47\x92\x59\x34\xad\x4b\x59\xe2\x26\xdd\x5d\xe2\xcb\xfe\x10\xcc\x95\x6f\x1b\xcb\x03\xf8\xac\xbb\xed\x36\xa5\x29\xde\xc3\xcd\x8a\x47\x7f\xcb\x90\x8e\xc8\x47\xac\xaa\x84\x5a\x25\x8e\x51\xbc\xfc\xe1\x87\x4f\x3f\x34\x0e\x5e\xba\xc0\x8b\xb4\x29\xf2\x14\x21\xa9\xf0\x97\xd7\xc1\x4a\xc0\x13\xac\x22\x44\xc2\xd9\xe4\x6b\x04\x99\xf2\xe0\x4a\x0e\xdc\x99\xbc\x6a\xa3\x52\xa8\xe6\x34\x36\x0e\x6b\x3b\x1a\x23\xec\x87\x73\xba\xf3\xe4\xf1\x01\x63\x1d\x21\x4b\xbc\x98\x91\x66\x25\xda\x41\xc7\x5d\x8e\x58\x29\x8b\x0a\xdd\x18\x1a\xb5\x3f\xa7\x7f\xa1\xbc\x90\xc1\x45\x72\x8e\x70\x06\xf4\xb5\x3b\xb2\x84\x68\xc3\x8b\x98\x2e\x55\xce\xc2\xe4\x62\x71\xd3\x2d\xb7\xe1\x35\x55\x59\xd0\xdd\x9d\x0f\x5b\x70\xb7\x8b\x19\x43\x5d\xbf\x34\xf8\xda\xe4\x80\xad\xa8\x77\x88\x33\xec\x86\xb3\xed\x71\x2d\xea\xa0\x6d\xc7\xf5\xfa\xcb\xf9\x22\x1c\xff\xd8\x83\x15\x9a\xd2\x36\x51\xf0\xa1\x56\x70\x05\x77\x29\x10\x04\x08\x24\xc8\x6c\x87\xab\xa8\x7c\x21\xd2\x48\x4e\x0b\x17\x98\x77\x1c\x0f\x65\xfe\x5c\x34\x9a\x46\x8b\xba\x57\x9d\xeb\x16\xfe\x63\xd9\x8d\xf8\xb6\x10\x89\x0d\x0b\x31\xd5\x71\x2b\x36\xb2\x41\x75\xe2\x5f\xb5\xaf\x6d\x69\x29\x4c\x07\xae\x24\xdd\xa5\xe3\x63\xbd\x8b\xd2\xda\xf6\x57\x18\x0d\x15\x90\xb5\x89\x9c\xca\x44\xdc\xb1\x68\xca\xb7\xb9\x2c\xa9\x19\x00\x1f\x84\xec\xf6\x47\x78\x84\x75\x39\x1d\xb9\x7e\x70\x0e\x9c\x77\xdb\x92\x04\xbb\x76\xaa\x1c\x09\x6c\xa5\x5f\xb4\x3b\x48\xcf\x47\xa5\x50\xea\xe6\x29\x80\x10\xe9\x9b\xf7\x60\xd5\xc3\x4c\x53\xdc\xe0\x97\x05\x12\xea\x14\xf5\xdc\x9b\x05\x1d\x42\x7f\x2d\x82\x0d\xa5\x49\xa1\x67\x24\x7a\x05\xf3\x62\xc9\x0f\x02\xe2\x33\x9d\xd1\xbf\x17\x6c\x81\x59\x54\xac\x1f\x75\x9e\x6d\x39\xd6\x91\x69\x38\x9d\x63\x6b\x4a\x5f\xa2\x6a\xe8\x2b\x38\xc4\x2c\x35\x05\x87\x15\x2f\x36\x77\xe4\x9f\x4e\xa7\xb3\x70\xf3\x23\xf4\xf0\x97\x94\x66\x5e\x01\xbd\xc7\x9f\x9f\x31\x3f\x5a\x20\xb1\x4b\xc7\x2a\x24\x26\x69\x55\x5f\x07\x66\xa1\x42\x4f\x06\x5b\x7c\x1f\x18\xc8\xa6\x44\x4a\x4c\xff\x47\x50\xf1\x83\x55\x58\x76\x62\x91\xfa\x4f\xbc\x27\xd5\x17\x62\x27\xd6\xe2\x41\x44\x80\x16\x8d\xec\xbf\x34\x59\x8e\xbd\x60\x26\x41\x13\xee\xee\xb8\x04\xc7\xbe\xbb\x13\x4a\x80\xbb\xbb\xfa\xd3\x1a\xfb\xe1\xc2\x9f\x0a\x3c\x01\xeb\x08\x47\x73\x34\xef\x2a\xdc\x79\x8d\x40\x8b\x1f\x23\x9e\x53\x23\x2a\xba\xc2\x0f\x7b\x2d\xf0\xf3\x57\xd7\x26\xc4\xbe\x1d\x9f\x37\x31\x0f\xcb\xd1\xd2\x78\x46\xc5\xa3\x64\x48\xa3\x5f\x28\xc4\x43\xdd\x35\x54\xf5\x9f\xc4\xf1\x6b\x8a\xc5\x58\x80\x60\xad\x7b\x4f\x6b\x6b\xca\x87\x22\xec\x6a\xbf\xe5\x37\x8e\x5f\xa0\x46\xfb\xea\x9a\x74\x28\x9a\xbf\x49\x17\x2d\x37\xe0\xd0\x9d\x46\x8e\x69\xbc\x35\xdc\x65\x69\x5d\x38\x52\x78\xbf\xff\xce\x7a\x12\xb4\x51\x7d\xa4\xbe\xd3\xc0\xf9\x2f\x53\x68\x7e\xb9\x82\x1a\xe9\x54\xa3\x7c\x08\xf3\x82\xae\x96\x70\xe1\x43\x7d\x24\x00\xba\xa5\x1d\x6c\x3e\xa1\xaa\xf1\xfb\x1a\x42\xa5\x29\xdc\xd7\xc5\x7d\x86\x23\xdb\xb1\x1d\x0a\xf7\x57\xa0\xc2\x4d\xe2\x93\x8e\xca\x85\xb0\x2a\x18\x29\xcf\xbe\xd0\xad\x06\x22\xbe\x8f\xe7\x24\xf1\x1e\x27\xf5\x96\x79\x55\x20\x2a\x0b\x75\x4a\x51\x56\x0f\xe8\xd4\xa9\x7c\xd8\xb6\x5b\x6d\xfa\x59\x92\x13\x67\x1c\x1c\xc1\xf5\xed\xc7\x97\xab\x3a\x5d\x2e\x93\xbb\x68\xee\x31\x36\x23\x6e\x24\x54\x31\x67\x69\x2a\x95\xd2\xed\x24\xb0\x2d\x87\xb0\x99\xf0\x0c\x9a\x6d\x35\x5a\xa3\x43\x91\x6d\x67\x63\xc6\xc3\x7a\x93\xe1\x22\x6a\xba\xad\x21\x8b\x77\xfc\xa4\x06\xc4\xfe\x5a\x2e\x77\x77\x3c\xb5\x94\x34\xf8\xc0\x1e\x55\x2a\x5d\xca\x45\x18\x17\x8b\x64\x15\x03\xbb\x8f\x9e\x95\x7c\x35\xf0\x0c\xf2\xf8\x03\xe3\x98\x94\x09\xde\x21\x12\x38\x28\xb2\xee\x25\x08\x6b\xa2\x2f\x92\x99\xcd\x4e\xa6\x41\x82\xe9\xe5\x06\x6e\x95\xb6\x42\x4f\x71\xfd\xf9\x9e\x2b\xae\xe9\xa7\xbb\xe8\x4b\xb6\x0a\x70\xba\x1c\xf8\xe2\xee\xf5\xe0\x32\x4f\x2a\x4e\x50\xdd\x1c\x32\x7c\x5a\x74\x1d\x60\x3e\xd2\x4d\xa7\x23\x31\xd0\xec\x1c\x1d\x1d\xc2\x2d\xd2\x6d\xa5\xc7\x63\xd1\x82\x94\x64\x68\xe0\x4f\x07\x7f\xee\xe4\xab\x8b\x5e\x66\x09\x93\x1a\xf3\x31\xc8\xae\x3e\xdd\x01\x48\xdf\x70\xe5\xef\x57\xa4\xa1\x64\xae\x4c\xb5\xa4\x62\xa5\x91\xb5\x8b\xf4\xeb\x14\xeb\x42\x57\x88\xde\x1e\xcd\xef\x21\xe1\x05\xb7\x1b\x1c\x26\x25\x76\xbe\xa8\xc7\x19\xa6\x2b\xc7\x9d\x0f\xc7\x06\x22\x94\x79\x66\xa0\x1f\x17\x7a\x04\x19\x82\xe3\xa4\xf3\x6a\x9e\xcc\x28\x69\x12\x3d\xd4\x50\x28\x03\xb3\xe5\x81\xfa\x04\x68\x2a\x17\x3e\x36\x69\x1f\x1d\x79\x16\x5f\xf3\xbc\x5e\x64\x46\x95\xd5\x15\x20\x54\xf8\xab\x6e\x11\x5a\x54\x53\xc9\xb7\x6f\x8a\x39\x6d\x33\xea\xfd\xed\x97\x4f\x1f\xab\x73\x2a\x1a\xee\x77\xe0\x92\x43\xfc\x6b\x22\xcd\x13\x1f\x0a\xce\x02\xb1\xfc\x7c\x5c\x7e\xae\x1d\x13\xeb\x57\xfe\x35\xe2\x6b\xe1\x8f\x83\xc3\xa1\x3f\x5c\xf8\x07\x3e\xca\xa1\x38\x3a\x0e\x81\xf9\xa5\x83\x58\x4e\xdb\x89\xd5\x82\xe0\x26\x1f\x3a\x8c\xe0\x7e\xf6\x35\x6d\xd2\x65\xfb\x82\x2a\x3a\x8f\x8e\xd4\x6f\xc5\x3e\xa4\xe5\xc9\xdb\x4f\x12\xdd\x6a\xef\x41\x0a\xbd\x1f\xbb\x53\x04\x1d\x69\x10\x60\x30\x97\x1a\x02\x0a\x9b\xbd\x72\xaf\x59\xfb\xf0\x03\x9b\x64\x82\x61\xda\x2f\x71\x47\xc9\x14\xdc\x8f\x40\x8f\xce\x7f\xd5\xd2\xd2\x70\x23\xc0\x41\x8a\x93\x18\x34\x83\xef\x23\xba\x3f\x28\x3b\x75\x41\xea\xfb\x57\x01\xb4\x86\xff\x32\x69\xc9\xbc\x25\xfd\xe6\x05\x1a\xb5\x26\xec\x84\x93\x76\xab\xd3\x68\x47\x26\x5b\x8c\xa5\xfc\x21\xb8\x81\x7c\x0b\x60\x27\x19\xa9\x75\x80\x63\xc0\x0e\x71\x06\x92\x67\x3b\x87\x7e\x2e\xa9\x25\xc0\xc1\xd8\xdd\x1c\xb0\xda\x99\xed\x23\x66\x6c\xc3\x17\x74\x3c\x68\xc0\x73\xda\x95\x3a\xf0\x9a\x9e\x53\x3f\xf1\x5a\xec\x97\x84\x1e\x49\x57\x48\x4d\x28\xa1\xbd\x03\x3f\x5c\x4e\x16\x07\xae\x68\xd7\xd3\xcc\xd1\x6f\x89\x39\x4a\xf0\x6a\xf1\x5c\x32\xfa\x5f\x23\x90\x49\xec\x2f\xf7\xca\x83\x55\x57\xfd\x1d\xd7\xcd\x1c\x55\xb9\xec\x17\xa4\xb6\xa4\xdf\x0d\xf9\x3c\x35\xe2\x3f\xdd\x48\xe8\x8f\x95\xfa\x54\x38\x20\x27\xed\x74\xfd\x99\x6b\x0e\x7e\xae\x32\x80\x93\xe3\xd3\x7a\xf2\x79\x16\x4e\x83\xd9\x62\x8b\xc8\xab\xb9\xe5\x45\x15\xe2\x16\x46\x24\x55\x76\x66\x3a\x02\x9a\xb5\x09\xcc\xa5\x20\x67\xdb\x76\xb4\x2d\x03\x76\x2b\xa4\x3b\x86\x33\x08\xcb\x48\x99\xc4\x5e\x30\x8b\xfa\x7d\xf1\x2c\x45\x27\xc1\x68\xdb\xcf\x84\xde\x23\x6a\x4c\x4e\xbd\xbb\xbb\x42\x5c\x42\x75\x39\x99\xf7\xfa\x9d\x05\xae\x86\xf8\xc1\xa5\x6c\xd2\x2c\xa0\xb6\x88\xd2\xd5\x29\x7f\x48\x17\xef\xa9\x9f\x26\x7d\x58\xb2\xda\x1d\x5b\x9d\x87\x68\xb1\x57\xed\xf4\x47\x08\x5f\xd1\xad\x96\x43\xe0\xb1\xbd\x43\x3c\x6a\xd0\x32\x51\xbe\x90\xb6\x63\x2f\x1c\x7d\x70\xa7\x0e\xdf\xf5\x76\xe2\x95\x01\x98\xe9\x91\x88\xeb\xf6\xe3\x03\x88\x60\x32\x02\x68\x13\x49\xfc\x64\xab\xd4\x99\xd1\xd2\x7c\xd5\xe5\xb5\xa3\xe9\xf1\x3c\xa2\xfe\x3a\x76\x4b\x79\x8b\x3a\x32\xc8\x00\xe9\x55\x64\xbe\xac\xae\x6d\xe1\xf2\x4a\xf4\x1c\x97\x01\x64\x81\xb7\x3b\x8e\x3f\x70\xbe\x7b\x1e\x43\xcc\xa9\xd1\xae\x6e\xda\x52\x6b\x99\x0a\x63\x68\x4e\x58\x27\xf0\x61\x3c\xbb\xe1\x53\x54\xb4\x22\xda\xca\x86\x7e\xa7\x6a\x68\xef\xe4\x4d\xad\x2e\x27\xed\xe1\x97\xb1\xb6\xfd\xc4\x46\x08\x72\x32\xc7\x1b\x81\xe0\x67\xfa\x9d\xb7\x1e\xb4\x71\x49\xc2\x67\xf2\x13\xab\x14\x31\xce\x62\x05\x07\xb6\xf8\xd5\x89\x7e\x75\xd1\xc6\x48\xac\x5c\xb8\x78\x7b\xf2\x9a\xd6\x2e\xe3\x1e\xd2\x86\x71\xbb\x8e\x66\x49\x5b\x99\x4d\xb6\xa3\x5f\x5e\xa2\xff\x36\xad\x3a\xde\x7b\xba\xaa\xbb\x52\x61\x75\x3f\x26\xce\xc9\x2f\x3f\xbf\x72\x54\x12\x57\xa0\x9e\xbe\x52\x33\xdc\x0a\xa2\x3f\x1b\x70\x33\xcb\x5b\xc7\x85\x82\xb0\x34\x5e\x27\x31\xfe\x12\x0d\x03\xbc\x79\x24\x4d\xf0\x84\x34\x81\x89\x58\x4b\xb6\x4d\x8d\x97\xd2\x15\x26\x25\x1a\x79\xf5\x71\x20\xb2\x4d\x8d\xa2\xa4\x63\x63\xe5\xf6\xa9\x41\x7e\xb2\x83\xb0\xd8\x90\x76\x4a\xdc\x23\xea\x70\xe8\x8a\x64\xd8\x51\xf8\x97\x21\xa6\x34\x55\x27\xba\x9a\x5d\x33\xcd\x2c\x2a\xe6\xe8\xd3\x19\xc5\xcb\x45\x15\x4f\xc2\x0b\x77\xe1\x6a\xf7\x85\x27\x28\x17\x8b\xc1\xfb\x98\x85\x88\x85\x4b\xbb\xcd\xcb\x59\x36\x47\x0c\x3b\x4e\xa7\x75\x55\xfa\x18\xa2\x6d\xbc\x7b\x70\x2a\x7a\x5b\x2d\x5d\x37\xae\x3a\xb8\xcc\x0d\x73\x04\x6b\x91\x7d\x1c\xa8\xc9\xc7\xa3\xac\x9f\xce\xc9\x46\xd1\x66\xa2\x74\x91\x6f\xe0\x04\x0c\x88\xd0\x7f\x7a\x4c\x86\xf0\x80\x18\x84\xde\xd3\x63\x60\x4f\x64\xbb\xb4\x52\x6c\x14\xc4\xed\xf7\x94\xf7\x68\x27\xc5\x46\x22\xe0\x8a\xb0\xe3\x46\x69\x54\x62\xb0\x59\x68\x30\xe0\xed\x67\x07\x72\x79\xf6\xba\xbd\x85\x77\x95\xea\xdf\x82\x71\x0c\x0d\xc0\xf2\x15\x60\x35\x7a\x88\x6f\x2b\x8d\xfb\xed\x36\x42\x43\xc9\x48\x18\x3d\x95\xc8\x20\x32\x69\x2a\x91\xa1\xcd\x24\x5b\xba\x03\x90\x6d\x07\x8e\xe4\x77\x37\xfd\x79\x11\xd3\xd9\x6e\xac\xf4\x67\xf2\x0a\xfc\x6c\x09\xa6\xd8\x13\x76\x06\x09\x24\x5f\x33\xb1\x69\x71\x82\x30\xe3\xd4\xe9\x1a\x0d\x00\xb1\x5f\x11\x68\xd4\x83\xab\xf8\xc6\x99\x16\x30\xf8\x13\x13\x2a\x8c\xfe\x58\x35\x64\xe1\x58\x37\x72\x29\x32\x8d\x4c\x0d\xa8\xa1\x01\x07\xac\x4f\x5a\x7e\x95\x12\x94\xd6\xc4\x6e\x30\xac\xbd\x03\x1f\x3b\x9c\x21\x7c\xc6\x82\xad\x5a\x62\x7b\x4a\x49\x05\xfa\x5d\x94\x8a\x70\xda\x6d\x21\x05\x47\xcc\x4e\xfc\x50\xbb\xb6\x9f\xd6\x6b\x35\xe8\x4f\x52\xae\x67\xcd\x49\x89\x0f\x99\xf9\x36\x40\x0b\x47\x54\x09\x30\x09\x3b\x5f\x79\x4b\x87\xb5\xc4\x74\xd9\x16\xeb\xb7\xe3\x2c\x81\xc1\x58\x3a\x33\xe5\x15\x2b\xb0\x72\x16\x0a\x94\x13\x96\x84\x98\x5c\xd8\x16\x28\xa9\xe2\x33\xdc\x63\x12\xca\x6b\x28\x96\x34\x84\x63\x80\x22\xb2\x21\x5b\x81\x22\x93\xc6\xce\xe0\x64\x38\x51\x8d\x55\xd1\x25\x2f\x37\x4f\xb6\x4e\x34\x3d\xfc\x42\xfe\xfe\xb8\x55\x6b\x1c\xa3\x21\x6a\xe2\x45\x4b\x9e\xd5\x46\xfc\x90\xcc\x07\xc4\x52\x39\xe3\x0b\x90\x15\xef\x91\x7e\x47\xc5\x7b\xa8\x66\xc7\x7b\x6b\xfb\xf4\x98\xd9\x56\x6f\x9c\x69\x6a\xcd\xe2\x78\x3e\xb8\x9b\x0f\xfd\x89\x98\xcf\xb6\xc0\xbd\xc2\x7d\xb7\x29\xb4\x6c\xd5\x4a\xd4\x19\xc4\x2a\xd4\x6f\x02\x29\x7c\x0c\x1a\x90\x51\x74\xf1\x28\x18\xaa\xb4\x4d\x66\x1b\xb9\xdf\x32\x8e\xb3\xb4\x8b\xf4\x14\xea\x47\x63\x07\x51\xad\xfa\x82\x9e\x44\xd1\xcc\x54\xd8\x32\xfc\xec\xb6\x11\x5d\x66\x45\xc6\x2a\x86\x19\x4d\x9d\x44\x4c\x04\xb2\x8c\x21\x8a\x56\xa9\x54\xf6\x6c\x61\xd8\x0e\x5d\x2c\xd9\xad\x52\xa9\xe1\xed\x70\xa4\x9a\xad\x32\xee\x4f\x2a\xc8\xdb\xe1\xc2\xb3\xb3\xa6\x22\x26\xa6\xf3\x26\x23\x5a\x22\xfe\x75\x34\x29\x0a\x1c\x8f\x6f\xfd\xc6\xda\x09\xcb\xcf\x18\x3e\xf4\xd6\x79\x56\x23\xa7\x4e\x8d\x9c\xa9\xfb\xac\x5b\x4a\xce\x27\x39\x77\x4a\xd4\x72\x6e\xf0\x9f\xcf\xbe\xab\xd9\x5f\xcf\x52\xf2\x44\x26\xb9\x10\x82\x18\x2d\x72\x0f\x4d\xa1\xe8\x05\xd6\x3c\x75\x84\xce\x97\x78\x27\xb7\xb0\x2c\x6f\x1d\x0a\xdc\x86\x56\x66\xe1\x82\x8d\x71\x50\x2e\x1d\xd4\x48\xa9\x6c\x9d\x3e\x3d\x2e\x27\x3f\x58\xb9\x64\x33\x33\x84\x8b\xd8\xb8\x84\xfe\x98\xc3\xa2\x1d\x30\xab\x89\xcf\x6f\x9e\xd6\xff\x5e\x83\x49\x58\x3b\xd6\x45\xeb\xe2\xc9\x6d\xe3\xd6\x2e\xc3\x80\xcf\xd2\x13\x7e\xae\xbf\xa6\xe8\x60\x4f\x6a\xad\x12\x73\xab\xd3\xa0\x82\x52\x20\xf8\xff\xb7\x9d\x14\xeb\xfb\x9f\x14\x57\xf1\x51\x41\x61\x9e\xf1\x53\xfc\x33\xee\xed\xf5\x7f\xf3\xe3\xa4\x6c\x8d\xc5\xdc\x9f\xb9\xe8\xa6\xe5\xe9\x71\xa3\x56\xe8\x90\xa9\xfe\xad\xae\x9e\x31\xa6\x23\x26\x7f\xd1\xb5\xb4\xcb\xae\xf1\x47\x9c\x47\xfc\x8c\xc8\x3c\x92\x1e\x6e\x3a\x81\xfa\x3b\x3a\xd2\xec\x46\x1d\x13\x22\xb5\x46\x0f\x05\xef\x3f\x61\xe3\xc0\x14\xd5\x60\x62\xea\xc7\x25\x7a\x20\xec\x94\xf3\x8e\x12\xf9\xf7\xbd\xd6\x57\xda\x4f\x33\x6c\x89\x8f\xd0\x28\x79\x41\x97\xad\xcd\x64\xef\x21\x13\x3f\xc3\xfe\x01\xa3\x6c\x94\xe4\x45\x31\x6c\x55\xe8\xd1\x84\x86\xbe\x01\x63\x43\x48\xc7\x2e\xd7\x8f\x1b\x95\xba\x7c\x5d\x0f\x5b\xdc\x1a\x38\xda\xcf\x38\x75\xc9\x25\xf5\xa7\x5d\xe8\x3a\x5b\xcd\x6f\xdf\x94\xf8\x5d\x8d\xb7\x7c\xde\xf6\x7b\x76\xac\x6e\x3f\x79\x36\x53\x5b\x51\xcb\x92\xb0\xcd\xf6\x98\xbb\x8b\xad\xc8\xfd\xef\x7b\xc3\xc4\xa8\x37\xbe\x6e\x82\xd2\xc0\x6b\x65\x87\x50\xe3\xdb\x47\xdb\x20\xf4\xae\xcc\xda\x1e\x95\xbc\xfd\x41\x81\x96\xb0\x3d\x8e\x5f\x54\xac\xf0\xee\xae\x66\xa7\x76\x49\x45\xb7\x4d\x52\xd4\xdd\xff\x13\xfb\x64\xf6\xed\xfb\xa4\x18\x59\xcc\xbe\xeb\xff\xee\x5d\xb2\x43\x9c\x5d\x96\x04\x82\x1c\xf6\x81\x9b\xa6\x1b\xe8\x50\x66\xa6\x8f\x8e\xf8\xbd\x73\xa8\x32\xde\x56\x8a\xbe\x4e\x59\x24\xa6\xcc\x07\x75\x1f\x51\xea\x24\xb1\xd0\xa3\xc4\xf7\x32\xf9\x57\xae\xd7\xee\xee\x30\xf5\x44\xa6\x03\x71\xd3\xc0\x06\xb0\xdc\x93\x7a\x50\xc1\x1c\x15\xfa\xf7\xc4\xb5\xa9\xd6\x4d\x69\x34\xd1\x4a\x4d\xc6\x53\x15\xe9\x56\xcd\xa6\x18\x2c\x99\x26\x44\xf2\x36\x7a\xac\x5f\x1f\x1d\xd5\x94\x94\x1a\xa4\xe4\xec\xcc\xe4\x07\xd2\x2b\x6e\x81\x96\xae\xef\xf8\x66\xe7\xa2\x0f\x83\xec\x43\x16\x7e\xb0\x85\x7b\xe9\x5c\xa1\x27\x85\xcc\x5e\x04\x69\x9d\xe4\x62\xb6\xfd\x7a\xc9\x5d\xe0\xb5\xa8\x7f\x8f\x2c\xfe\x87\xf1\x3e\x95\xe7\x0d\xcc\x59\xce\xcf\x59\x7e\x6e\xef\x7c\xe6\xfa\xcb\x4e\x34\xc3\xeb\x78\x8e\x36\xa2\x24\x7f\x69\xb1\x95\x72\x09\x73\xcd\x97\xc7\x25\x7c\x08\x5c\x13\xa9\x25\xd1\x4a\x7e\x6e\x71\x4a\x35\x72\xd6\x81\xc8\x87\x38\x10\xa5\x43\xf4\x48\x29\xa5\xf5\x44\x31\xa8\x85\xca\x96\x5f\x8e\x42\x77\xc1\x58\x38\x6a\x7b\x4c\x8d\xdf\x5d\xfb\x69\x3d\xf8\xce\x16\xfe\xd7\x10\x4f\xb4\x93\x4c\x83\x6f\x61\x83\x53\xcb\x60\x32\xa3\x2a\x84\xe9\x96\x22\x00\xe7\x32\xa0\x09\x3f\xe1\x41\x7f\x3c\x0e\xda\x7d\x84\xff\xa1\xb2\x33\x86\xc0\xae\xba\x54\x7e\x48\xfd\x24\xa4\x7d\x15\x05\xce\x57\x6a\xb7\x4f\xe8\x8e\x86\xbf\x6c\x01\xc1\x0f\x66\xd5\x8f\xae\x5c\xfe\xf6\x82\x74\x9d\xef\x6a\xa4\xc7\x50\x0e\xdc\x13\x51\x8d\x0c\xf1\xc7\x08\x61\x46\x63\xfc\x27\x72\x17\x80\xee\xc3\x10\x8c\x74\xa3\xf3\xc5\x8b\x48\x2d\x34\x74\x67\x22\xb3\xb6\x2d\x56\x69\x29\x22\xcb\x25\x09\x99\xfe\x5c\xe2\x66\x9f\xb1\x62\x42\x06\xad\xdd\x90\x69\x6c\x53\xc9\x24\xa7\xe8\xf5\x28\x82\x63\xdc\x10\x2f\xdf\xe6\xca\xa3\x1a\x10\xb3\xcd\x15\x56\xfb\x1e\x89\x84\x3c\x73\xa6\xa4\x21\x00\x8c\x23\x64\xb6\x50\x0b\xb7\xdb\x0d\x66\xb4\x12\xa3\x51\x93\xce\x7c\x82\x96\x66\xc4\x45\x76\x61\xa3\x45\x14\x2b\xfc\x1b\x2d\xbd\xb7\x3d\x14\xba\x41\x62\xa7\xc5\xde\x16\x51\xd1\xa4\xed\x6d\xfb\xc5\x8d\x17\xf6\xb5\x37\x63\xb0\x03\x43\xa9\x49\xba\xd4\x84\x96\x62\x36\x13\xfb\x1a\xc5\x31\x9d\xc9\x1e\x46\x2c\x81\xd9\xb6\x86\xbe\x22\x9c\x75\x92\xb3\xd0\x84\x16\xff\xdb\x10\xbc\x55\xc0\x95\x48\x72\x4e\x96\xd2\x12\x3f\x1a\x22\x0f\x09\x32\xed\x7e\xd8\x5b\xb4\xc8\xc9\x31\x2a\xd4\x99\x32\x39\x2e\x11\x6a\x87\x29\xc2\x62\xe8\x0e\x37\x55\xd0\x4e\x54\x10\x00\x6d\xe0\x04\x24\x3e\x17\xe0\x4c\xd1\xa0\x61\x24\x46\x7b\x6e\x44\x12\x00\xed\xd4\x26\x57\x25\x76\xfb\xa2\xd7\x6f\x8e\xb9\x8a\x8a\xca\xbf\xe7\x25\x44\xa1\x1b\xac\x6d\x3c\x3b\xab\x11\x1f\x1a\x61\xa7\x17\x54\x88\x8b\x8d\x3a\x86\x9a\xf3\x87\x2f\x4b\xaf\xdd\x5f\x51\x37\x14\xec\x99\x9a\x3f\x94\x24\xe2\x93\x3f\xb1\xb3\x0e\xba\xf1\x70\x03\x62\x8a\x71\xae\x3d\xf2\xe0\x54\x96\xa1\xab\x66\xfd\x51\xac\x60\x6c\x27\xb5\x46\x84\xc3\xec\x43\x67\x5c\xe1\x0e\x6e\x7c\xbe\xfe\x66\xce\xa4\x42\x9d\xec\xc0\xbf\x7c\x95\xcd\x73\xb5\x4b\x90\x44\xeb\x83\x7e\x29\x88\x06\x04\xe3\x53\xe7\xc3\x36\xc3\x5e\xe0\x0d\x12\xcc\xfd\x80\x92\x0f\x36\x59\x3a\xdd\x7d\xb2\xaf\x9c\xde\x3e\xd9\xd7\x4e\xdf\x90\x9d\x6c\x9c\x81\xe9\xd5\xd6\x19\x9a\x5e\xdd\x9a\x9d\x6d\x20\x0a\x1f\x51\x72\xb4\x13\xe3\x60\x86\x2e\x37\x46\x64\x71\x0d\xd4\x1a\x27\x6b\x83\xd6\x55\x48\x6a\xd7\x8d\xab\x1a\x09\xaf\x6d\x06\x5c\xfb\xfd\x77\x6a\xcf\xfa\xfb\xef\x92\x61\x87\xce\x8d\xc7\xd3\x5a\xe4\xc8\xe3\x36\x36\x2a\x51\xab\x70\x6e\xe9\x45\x7a\x2a\x1c\xa8\x2d\x6c\x72\x26\x1c\xb4\x2d\x50\x4c\xbd\x40\x47\xba\x17\xce\xdc\xa8\xff\x63\x2b\x4b\xd1\x00\x5e\x3a\x17\xf7\xd0\x00\x8a\x8a\xc8\x4b\xe7\x52\x51\x01\xbe\x82\xea\x24\x25\x60\xf3\x65\xf4\x76\x86\xf8\x51\x0d\xa7\x4a\x07\x7b\x20\x7e\xc0\x55\x85\xb5\xee\x59\xea\x14\x1d\x52\xed\x5d\x8a\x52\xd0\x05\x4a\x8d\x03\x77\xbe\x9c\x05\x4a\x5e\xa0\x4d\x7a\xda\xbc\xee\x6c\x18\xcc\x7e\x9c\xf5\xa1\x01\xaa\x4a\xbe\x48\xb3\x8c\xaa\x15\x3e\x53\x96\x43\x6a\x99\xee\x49\xe4\x06\x19\xc1\xf4\x5a\x07\xb4\x89\xf4\x0a\xb7\x48\x71\xdf\x5a\xc8\xda\x90\x37\xba\x9c\xf0\x0e\x28\x67\xb7\x51\xb3\x77\xcd\x57\xd1\x37\xc1\x31\x56\x95\xc9\xe6\xfd\xe3\x48\x0c\x32\x13\x09\x0c\x4a\x41\x5e\x5b\x67\x27\xb5\xd6\x59\xe3\xd4\x96\x78\xf2\x37\x52\x22\x2c\xa5\xe5\x38\x7a\x26\x86\xa6\xe8\x17\xca\x6d\xea\x5c\x6d\xe4\x3c\xaa\xfe\xdc\x58\xf1\x07\x49\xde\x99\x31\x86\x44\xef\x6d\xed\x28\x4f\x1b\xc9\x7c\x51\x62\x3c\x4a\x7c\xd6\x74\x26\x5a\x24\x91\xa1\x4c\x7f\x34\x92\x3c\xa2\x46\x7d\x7b\xfa\x4c\x12\x74\x48\x4f\xbc\x27\xb5\x93\x55\x0b\x3f\x2b\x7c\xdb\x15\xaa\x4b\x1a\xfc\x2f\xfb\xd6\x72\xe7\x56\xb6\xec\x04\x77\x15\xcc\x14\xb4\xfc\x8d\xea\x71\x19\x5e\x5b\x5f\x29\x68\xb3\x81\xd5\x11\x2a\x31\x6b\x6c\x29\xf3\x55\x3a\x5f\xce\x66\xf4\x52\xa4\x26\x73\x69\xa6\x4a\x1a\x10\x75\xdf\x9a\x74\xc8\x6b\x6c\x96\x39\x5e\x7e\xf8\x66\xa9\x0b\x56\xf3\x60\xd1\xbd\xf4\x43\x35\x4a\xb7\xe2\x5b\x67\xf6\xf4\xbb\xe6\x12\x6a\x68\xbd\x92\x0f\x57\x3c\x05\xaa\x9a\x5d\x9f\x21\x26\xd2\x2a\x2a\x6e\x2d\xac\xdb\xa6\xa7\xc0\xec\xe9\x31\x97\x08\x71\x09\x19\x24\x7e\x40\x31\xd2\xdb\x72\xe9\x3d\xfd\x17\x7e\x57\xe0\xcf\x01\xfb\xc3\x9f\xfe\x55\xba\xdf\x6a\x58\xc6\x33\xb4\x61\x33\xf4\x79\x16\xac\xfa\x90\xed\x8f\x5e\x0e\xdf\xd0\x6e\xe1\xf5\xf0\x00\xa3\x6d\x14\x5b\x01\x91\x20\xf5\x22\x09\x6b\x62\xc4\xa0\xf9\x6b\x45\xa6\xad\xbe\xb3\x86\x2b\x1a\xa1\xff\xad\x3a\x5a\xb7\x96\x3e\x04\xee\xa4\xd4\x28\xc1\x91\xd7\x1f\x2f\xc7\xf8\x0b\x58\x34\xfc\x65\x37\xcd\x1f\xd8\xe5\xe3\xf5\xff\xa7\x7e\xce\x87\x98\x8f\x78\x05\xec\x3d\x1d\xbb\x58\x3a\x93\x27\x79\x69\x3b\xdc\x75\x28\x0d\x8a\xd1\xd1\x23\x94\xe9\xe7\x9f\xa3\x23\x6a\xed\x6b\xb6\x90\xe6\xad\xe8\x17\x90\x93\xd7\xc0\x51\x1b\x72\xb3\x5b\x07\xaa\xeb\x67\xb4\xc6\xe4\x0e\x2d\xe5\xa9\x81\x96\x6f\x83\xac\x3e\x44\xa5\xe4\x47\x5a\x6c\x98\xd9\x99\xb8\x9c\xfc\x4c\x0b\x8e\x1c\x5c\x26\x63\xe7\xd9\xdf\xd1\x59\xe5\xb3\x5a\xec\xaa\x32\x65\x6e\x7d\x55\xfa\x4b\xbd\xf3\xb7\xbf\x79\xcf\x4b\x14\xa6\x66\x74\xd0\xcd\x36\x8f\xd9\x41\x77\xec\xc5\xdb\xd6\xf8\xda\x7e\x10\xe1\x12\xfb\xa2\xf7\x91\x40\xd0\xef\xbb\xaf\x94\x44\x7c\xf3\xbd\xa5\x32\x70\x13\xf9\xc1\xaf\x7b\xcb\xae\x32\xe5\x2b\x46\xe7\x36\xd9\x22\x20\xa3\x30\x27\xe6\xaf\xf7\x96\xd0\x65\x4b\x74\xfc\x74\x31\xdf\x2c\xd1\xa1\xaf\x88\x9f\x27\xd1\x11\x1c\xb5\x5f\x40\xa2\x13\xf1\xda\x7e\xa6\x44\xc7\x17\x12\x1d\x26\xa8\x28\x2a\x8e\x41\x55\x8d\xe3\xc2\xc1\xc3\x35\x3d\x0e\x06\x86\x88\x95\x0b\x6d\xea\x6e\x68\x64\xf6\x31\x94\x94\x0f\x79\x54\x3e\x94\xdc\x94\x5e\xa6\xe4\x25\x2d\xc3\x38\x47\xc6\xf5\xdb\x04\x19\x01\x99\x08\x41\x46\x9e\x88\x22\x14\x00\x58\x03\x50\x79\x48\x42\xd2\xc5\xc3\x64\x54\xe9\x52\xf1\x47\x97\x7f\x12\xea\xec\x5a\x63\x63\x86\xfd\xda\xb1\x28\x6a\xdc\x11\x3c\x95\x18\x1c\x06\x77\x77\x87\xb2\x9c\x02\xfb\x98\x74\x7b\xc1\x61\xd8\x1e\x09\x61\x62\x9a\xa1\x11\xdb\xac\x00\x42\x67\x4e\xb2\xda\x4c\xf1\xc7\x5c\x11\x7f\xe4\x66\x5f\x28\x22\x91\xdc\xec\x4b\x27\xcc\x11\x24\xd0\xcf\x1b\x49\x13\x02\xc4\x76\x39\xcb\x7b\x4b\x13\x78\x6d\x64\xed\xac\x14\x91\xc2\x06\xea\x94\x45\x0a\xeb\x6c\xcd\x37\xab\xec\x17\xa8\x1a\xeb\xca\xce\xbb\xe8\x2f\x46\x01\x42\x99\x97\x39\x5c\x7a\x37\xe6\xd2\xbb\x2a\x97\xbe\xcd\x74\xcf\x1a\xe1\x06\x66\x78\xf1\xd1\x10\x56\x0b\xa4\xf4\x23\x61\x4f\xa7\x75\x35\xe5\x32\xa3\xe9\x35\xca\x9f\xee\x2b\x35\xda\x46\x52\xa3\x84\xe0\xc9\xd9\x72\xa9\xd1\x5a\x09\x42\x22\x86\xae\x99\x20\x9d\x66\x3d\x6b\x7a\x2a\xdf\x21\xf6\x29\xb9\xa9\x6c\xc6\xc7\xd8\xcd\xd3\x5c\x08\x07\xed\x8b\x4e\x7d\x1f\x1b\x90\x63\x0e\x38\x79\xf2\xeb\x9a\x2f\x3d\x51\x9d\x84\x30\x60\x30\x38\x73\xfd\xa2\x14\xda\xd5\x72\x73\x86\xa9\x70\xa6\x6a\xdd\xb0\x2f\x7d\xe6\x6c\x94\x19\x94\x17\x1a\xfa\x19\x91\x8c\xdc\xcf\x22\xc0\x39\x2d\x79\xee\x8c\xef\xee\xb6\xb2\x9e\x6c\xca\x10\xeb\x17\x51\x95\xf1\x16\xe3\x9a\x49\xba\xa7\xb6\x1c\x02\x3f\x7d\xfa\x02\x72\x6b\x7a\x9e\x74\x4e\x72\x77\x77\xce\x1c\x21\x14\x15\xeb\x89\xe6\x32\xe0\x6e\x06\x8e\xd5\x95\x00\x88\x49\xac\x42\x50\xf9\xce\x6e\x5e\xea\xc3\xd0\x60\x9c\x98\x1b\x39\x4e\xcc\xdf\x9e\xdc\x3c\xfd\x0e\x7a\xac\xff\xb4\x99\x28\x51\xe9\xdb\x46\x22\x15\x56\x1d\xfb\xd6\xe7\x6c\xfe\x5f\x3a\xea\xe7\xb9\xd8\x7f\xbc\xdb\xcc\xf1\xa2\x9c\x53\x2c\x8d\x42\x83\x7d\xa9\x47\x2c\x44\xdd\x27\x89\x0e\x73\x78\xce\x43\xf7\x1b\xbf\x93\x14\x9b\x87\xb6\xda\x1f\x07\xb3\x6a\x67\x84\x7a\xfd\x98\xf3\x49\xdc\xeb\x54\x37\x9d\x8e\xde\x83\xe4\x07\x63\x80\x3a\xc8\x00\x75\x19\xc3\xf4\x82\x33\x4c\xcf\x23\x8e\xe9\x98\xb3\x4c\xf5\xe3\x9a\x91\xb3\x11\x6c\x92\x81\xaf\x31\xb0\x49\x26\x86\x26\x62\x93\x22\xa7\xf9\x2f\x5e\x00\x1f\x42\x7f\x47\x6a\x70\x85\xc7\xe0\x83\xfa\xd2\x0b\xd7\x78\xd8\xb1\xa7\xd7\xa8\x1d\xb2\x63\x27\xa1\x4a\xac\x22\xd9\xa1\x21\x46\x23\x82\x93\x44\xf1\x14\x90\xe4\x5a\xc4\xbc\x95\x12\xde\x52\xb8\x3f\xbc\xaf\xc3\x60\x8b\x6e\xbf\x90\x7b\x22\x9c\x77\xe5\xee\xc4\x19\x25\x27\xbc\x9d\x23\xb0\x05\x0f\x0b\x57\x0e\x85\xb4\xcb\x6e\x7e\xb9\xd0\xb4\x0e\x24\xa4\x1c\x62\x2d\xb3\x06\x5c\x32\x86\x2a\x84\x57\x45\x8b\x7e\xfd\xd8\x2b\x12\x3a\xc6\x65\xdf\x5d\x49\xfb\x75\x67\xd3\xb5\xe7\x09\xbd\x97\xa2\xfd\x0f\xa5\x60\x48\xed\xc7\x67\xd6\x8c\xbc\x53\x0e\xb3\x66\xd4\xa1\xe7\x31\x6b\x46\xa5\x7f\x26\xd7\x65\xd4\xf6\x67\x73\x5d\x46\x16\x2f\x9f\xeb\x32\xf2\x79\x8c\x90\xdd\x9f\xcf\x63\xdf\xd4\x38\x2f\xc0\x06\xf0\x9d\x64\xa7\x39\x13\x39\x9a\x6c\xb4\x53\xf1\x3e\x43\xee\x82\x92\x3d\x62\xcd\xc4\xb5\x50\xa7\x22\x34\x68\x03\x89\xeb\x3e\x3c\xa4\xfe\x20\x78\x66\x7e\x87\x9a\xbb\x94\x74\xd8\x5a\xb8\x6f\xbc\x66\x6d\x0f\xd3\x95\x2a\x5d\x4d\xbd\xa6\x3d\xce\xe6\x75\x75\xa2\x03\x33\xaf\x4b\x5f\x91\x6e\x1e\xaf\xcb\x33\x90\x6e\x01\x5e\x57\xe4\x21\xdd\x4c\x5e\xb7\x5b\x8c\xd7\xd5\x81\x31\x80\xd7\xed\xc4\xbc\x6e\x20\xf3\xba\x41\x82\x47\x95\x55\xf3\x14\xa5\x69\xe4\x5f\xff\x43\x62\x60\xfd\xe5\x98\x7a\xa7\x60\x71\x0d\x0b\x33\xb2\xa3\xa8\xd7\xaf\x23\x8b\xce\xd7\xbc\x4e\xab\x63\x93\xd9\xd1\x51\xf4\x88\x1c\x9c\xf4\xd8\x43\xbb\x53\x73\x1c\xd5\x53\x4b\x46\x63\x4a\x4c\x69\x74\xaf\xfb\xcb\xd9\x9c\x91\xec\xeb\x0a\xf7\xde\x68\xc7\x11\x86\x2e\xa1\xfc\xab\xea\x26\x8e\x44\xb9\x21\xaf\xaa\x7d\x47\x02\xb7\xbd\x14\x01\x34\x21\x9b\x6d\x93\x77\x96\x54\xfa\x75\xf1\xd6\xdd\xe5\x22\x44\xcb\x22\xe6\xcb\xc0\x81\x46\xc8\x39\xf3\xd2\x73\xce\x7c\xb0\x6c\xa5\x7a\xdf\x21\x9b\xed\x71\x0e\xf2\xd5\x35\xa3\xd7\x5c\xc7\x8b\xaf\x56\x8c\x6b\x28\xdd\xb3\x44\x30\xea\x48\x9d\xc4\x2f\x5c\xe6\xf1\xe0\x7d\xae\x90\xe0\xbd\x4d\xde\xc7\x60\x3d\x20\x80\xe9\x6e\xac\x94\xca\x1b\xc4\xec\xd1\xe6\x3f\x30\x36\xff\xa3\x49\x8e\x10\x92\xf7\x18\x4d\xf2\x93\xd1\x74\x7a\x4a\x33\x98\xa4\x0a\xe8\xfd\xe6\xa2\xf5\x9e\x71\x08\x9e\xdd\x78\x6f\x70\x8f\x75\x61\x8b\x2c\x1a\x19\xc4\x96\xfb\x0b\xb2\xde\xc2\x22\x89\xe6\xc4\xe6\xee\x86\xac\x37\x90\x6a\xc7\x13\xb5\xc5\x0b\x95\x1e\x79\xce\x88\xba\xb6\xd0\x00\x1e\x0f\xdd\x28\x13\x22\x89\x6f\x99\xd4\xe5\x73\xf3\xd6\xf9\xba\xa3\xee\x42\x3e\xa3\xab\x90\xad\x7d\x7b\xf5\xf9\xda\xd9\xc2\x3f\x49\xf7\x51\x2d\x4c\xe4\x12\x85\x9a\xdd\xc0\x27\xfa\x4d\xfe\x49\x43\xcb\x05\x3d\x77\xd5\x0f\x67\xd5\xf6\xcc\xed\x5a\x3c\x52\x27\xfc\xe4\xa1\xe1\x4f\xe3\x94\x12\xb9\x8c\x1f\xa8\x0f\xb0\xd7\x36\x8b\x8e\x37\x3a\x3a\x1a\x71\xab\x2d\xfc\x65\xc4\x6e\x1e\xb8\xaa\xf3\x9b\x9d\xb0\xf5\x32\x0b\x69\xde\xa3\x90\x06\x1a\x79\x9f\x2b\xa7\x41\x8f\x52\x3c\x26\x21\x25\x78\x3b\xd5\xad\x78\x58\xdb\xf0\x70\xc1\xb8\x73\xea\x90\x88\xc6\x71\xa7\xd3\xf8\x83\x93\xd1\x5f\x65\xe6\x53\x9f\x27\x8a\x01\xc3\xd1\x27\x62\x70\x04\x1a\xb3\x62\xff\x83\x18\xcf\xe0\xfb\x4a\xf5\x1f\x2f\xa8\x53\xa5\xda\xb5\x83\xbf\x6d\x72\x45\x1f\x2a\x18\xe6\xc0\x7e\x6a\xd5\xcb\xf4\x07\xb1\x68\xd8\x03\x8f\x9a\x4e\xd3\x44\x14\x49\xc0\x57\xff\xe2\x5c\x71\x6c\xc9\x0f\xda\xf8\x3a\x48\x63\x53\x2e\x01\x45\x1a\x86\x2c\xe8\x54\xe5\xba\x19\xcf\xc4\x17\x7b\xf7\x52\x92\x59\x8c\xa0\x0e\xf5\xf3\x54\xa4\x18\x36\x35\xf2\xf1\x9a\x62\x69\xc7\x53\x4b\x6c\xc7\x91\xe3\x5b\x78\x88\xc0\x3a\xff\xd1\x59\xb5\x78\x04\x87\x92\x8b\xea\xf5\x9f\x9c\xf7\x46\x19\x95\x7a\x82\x2b\x71\x6e\x7f\x76\x7e\xba\x87\x98\x2a\x55\xa1\x2c\xa5\xfa\x05\xaa\x94\xa5\x54\xb0\x98\x7e\x2e\x1c\x04\x17\xca\xe7\x64\xde\xc4\x76\xf7\xe2\xc0\x55\xe3\x6d\x61\xb6\x70\x52\xa0\xa6\xad\x64\xc1\x9f\x93\x35\x0e\xba\x94\x9f\x17\xd9\xde\x39\x13\x86\x98\x3a\xf8\x63\x6e\x25\xee\xaa\xfb\x3e\xbf\x9e\x82\x03\x65\xf1\xa5\xb8\x20\x30\x27\x2f\x9e\xae\xb3\x70\xc4\x1b\x26\x37\x18\x37\x9c\xcb\x81\x3e\xc2\xb7\x55\xe4\x3e\x72\xbd\x1c\x17\x32\xe2\x47\x75\xdf\x26\x63\xa4\xa6\x0e\x9d\x7e\xe4\x3d\x03\xe3\xc5\x53\xe2\x2b\x4e\xca\xbd\x3a\x32\x9b\xcc\x12\xc5\x21\x4e\xa0\x32\x8e\x24\x94\x36\x59\xb2\x03\xe4\x57\xe7\x8a\xf2\x93\xa5\x1f\x82\x0a\x15\x27\x1e\x6c\xd9\x1a\x20\xe2\xe4\x69\x1c\xae\x77\xd7\xcd\x01\x1f\x74\xfd\x79\xcd\x66\xec\x25\x2a\xe2\x9e\x3f\x7f\x0e\xad\xc8\x7f\x70\xc7\x62\x7f\x4f\x47\xfd\x2e\xe5\x37\x85\x0f\x12\x85\xe3\x8f\x18\xfe\x17\x8c\xef\x03\x76\x3f\x39\x32\x75\xe2\xf9\x74\xfe\xba\xd7\x20\xd9\xd4\x0f\xec\xdd\x4f\x39\x42\xdc\x71\x2c\xc4\x8d\x4b\x93\xc5\xd1\x91\xda\xa5\xad\xe4\x29\x23\xbb\xc2\x8f\x4c\xb2\xc2\x8e\xa9\xdf\xb2\x8e\x78\xea\x56\x77\x8c\xc1\x34\xf8\x31\xdf\x8c\x4f\x0b\xe5\x8d\x7c\xd3\xfc\x16\x5d\x76\x3f\x65\x8b\x3d\x13\x15\x44\x18\xa1\x8f\x4f\x8f\x25\xc9\x12\xfa\x3e\xa9\x9b\x9d\x9f\x48\x16\x54\xbf\x19\x68\x04\xee\xa7\xda\xae\x0e\x60\x47\x5a\x25\x72\x80\x16\xae\xc2\x15\x9c\xef\x4e\x26\xe1\xe2\xc0\x03\xfe\x26\x76\x15\x07\x93\x46\x65\x94\x07\x28\x56\x3a\x98\x02\x25\x1e\xb6\xab\x68\xa8\x07\xbb\x62\x18\x6d\x30\xb1\x31\x3e\xc5\xcb\x88\xae\x17\xf6\xc1\x68\x9c\x42\xfa\xc1\x50\x84\x25\x85\xe5\x05\x5a\x4e\xdc\xc4\x6d\x9b\xfc\x64\x8a\xb1\x2d\x56\xc8\xd0\xc6\x63\x40\x91\xe0\x4a\xe7\x5b\x02\x05\x98\x58\xa6\x71\xce\x03\x05\x25\xc8\x41\x5b\x1f\x93\x28\xaf\x4f\x36\xbd\x9e\xb5\x53\x88\xb2\x8d\x91\xbb\xad\xe2\x44\x6a\x66\x80\xed\xba\x24\x99\x26\x3b\x3e\x12\x9e\xcd\x59\xf2\x4e\x63\xc5\x12\xe7\x3e\x1c\x5d\x79\xd7\x11\x79\x71\x74\xc4\x9e\xd5\xb5\xc8\xd6\xef\xbf\x9c\xc4\x99\x23\x1d\xc4\xfc\x94\x2b\x44\xc2\x40\x1b\xc9\xc5\x6e\x37\xff\xc5\x3e\x41\x07\x59\x1c\xbd\x27\x45\x21\xf7\x62\x61\x7a\x3d\x0e\xbc\xfa\x6b\x41\xba\x09\x1a\x3d\x3c\x63\x92\xef\xdf\x13\xe3\x48\xde\x29\xfa\x28\xeb\x7f\xd5\xc7\x13\xa4\xcb\x9d\xb8\x9e\xc6\x43\x74\x60\x61\x83\x11\xfd\x55\x3b\x41\x5b\x2f\xef\xe4\x53\xeb\x53\xc3\xdb\x35\x7f\x37\xc5\x62\xe7\x7b\x0f\x43\x40\x0e\x83\x0a\x5f\x3f\xc7\xc9\xf4\xb6\x3b\xef\x51\xef\x5d\x28\xdf\xae\x91\x7a\x2d\x59\x52\x1b\xff\xb0\xc3\x17\x8f\x0d\x53\xaa\xcc\xa7\x1d\x87\x71\xaf\xcb\xd6\x95\xc7\xd2\xd2\x45\x51\xb5\xeb\xc9\xb2\x6a\x78\x22\xbf\x27\x3a\xa6\x31\x77\x33\x4f\xc8\xdd\x1d\xce\x07\xb5\x80\xbb\x77\xf3\x3a\xbf\x39\x9e\xe7\xfc\x2b\x49\xa8\x53\x66\x53\x21\xf4\x90\x9b\xf4\xd2\x31\xf1\x4d\x28\x5f\xb9\x02\x65\x73\x3f\x93\x8d\x51\xa3\x03\x95\xc1\x3b\xa1\xb6\xf8\xc4\xc5\xa4\x78\x82\xaa\x2f\xcc\x04\x0c\xd2\xae\xfc\x54\xfa\x27\x70\x1e\xde\xde\x62\xfd\x97\xc0\x06\xf4\x63\xc1\x7e\xea\xf0\xc1\xc8\x68\xdd\xd8\x64\x8b\x69\x91\xba\xfc\xaf\xdd\x8a\x7e\x35\x34\xae\x33\x3f\x3e\xfd\x1b\x90\xe9\x36\x2b\x45\xc3\x0a\x56\x3e\xa1\xcd\xa5\xba\xad\x36\x05\x6f\x49\xbc\xac\x03\xc9\xee\x93\x5d\xba\xe6\xba\xe8\xa4\x74\x6d\x2a\x1a\xb1\x7a\x7c\x08\x81\x18\x42\x2f\x1a\x42\xcf\x3c\x84\xdf\xac\x4f\x4f\x9f\x7d\x97\x18\xc2\xc7\xf4\x10\xb6\xc9\x66\x7b\x29\xc2\x2b\x7d\xee\x87\xda\x00\x02\x5c\xb0\x42\xd1\x6b\x4c\xf0\x80\xaa\xde\x6c\xf9\x4a\x96\x80\x84\x0a\x5f\xf0\x0e\xd1\x09\xe0\xcf\x13\xcd\xbb\xd8\x7e\x5f\xc4\xc2\xa1\x1b\x9e\x60\x87\x5e\x22\xdb\x54\xa8\x9d\x81\xda\x0e\x23\x37\x35\xcd\xc4\x07\xae\x23\x1d\xbe\x64\xad\x3c\x6d\x51\xf0\x85\x9f\xed\x37\x67\x9d\x6e\x30\x16\xdf\x40\xbb\xfd\x84\x2f\xe5\x38\xab\xda\x6e\xc2\x89\xf0\x56\xf8\x0a\x6e\x66\x57\x3f\xcc\xd6\x5f\x48\x6d\xa0\x9f\xec\x2a\x0d\x8f\xf2\x5a\x44\x5f\x9d\x8b\x68\x1b\x24\x20\x7d\x32\x40\x5b\x5c\xe0\xe9\x34\xd7\x91\x72\x35\x2b\x97\x18\x51\x39\xfb\xd4\xc5\xd7\x25\x3d\x2a\xca\xac\x4a\xd4\xca\x19\x8d\xc1\x0f\x7b\x95\x73\xf9\x3e\xfb\xaa\xbf\xfe\xcc\x02\xc9\x56\x37\xe8\x04\xa0\x13\x07\x89\xa5\x51\xea\xac\x1e\x74\x52\xf0\xcb\x43\x47\x14\xbe\x0a\xae\x9b\x52\x0c\xfd\x28\x86\xc2\x10\x8d\x91\x35\xb1\xf5\xdb\x3c\x5e\x22\xd1\xbd\x44\x0b\xe6\xbe\xe3\x45\xb2\x0f\x8b\xf6\xc5\x1a\x92\xc0\xb6\x71\x05\x51\x4b\x60\xca\x64\x74\x69\xfc\x5c\xa6\xb2\xf2\x50\x48\x41\x33\x71\xad\x15\x8e\xba\x9b\xb8\x9b\xd8\x12\xe4\x5e\xce\x8f\x05\xdc\xc7\x8b\x24\x2b\x62\xdf\xf8\x6c\x83\xfd\x66\x13\x29\xac\xb7\x94\x4d\x32\xdf\xae\xe8\x92\xeb\x14\x4a\x58\xad\x3d\x7b\x32\x25\x18\x3b\x0a\x01\x15\xc1\x7c\x41\xa7\x96\xf6\xc5\x1a\x98\x29\x5f\x3a\x1e\xe8\x68\x48\x6e\x22\xd7\x76\x78\xcc\x0e\xae\x66\xd7\xf1\xe7\x70\x50\x73\x86\xfd\x9f\x3b\x5d\xc5\x75\x1c\x9f\xae\x36\xce\x44\x60\x37\x87\x91\xfc\x3f\x56\x97\x51\x9a\xb7\x5f\x96\xa8\x5e\x31\xe0\xb2\x20\x7f\xd5\xe0\x78\xd6\x07\x29\x5a\x8a\x5d\x55\xc3\xc1\xe9\x46\xd1\x53\xbb\x84\xf4\x12\xbb\x2c\x39\x38\x76\x4e\xd8\x87\x69\x0c\x50\x29\x07\xfb\x87\x19\xea\xbe\xc2\xe0\xcc\x78\x35\x02\x83\x9b\xbd\xad\x92\x40\x6c\xcd\xa6\x42\x87\x5a\xec\x14\xa5\x9b\xf6\x4b\x22\x00\x8a\x8b\xb2\xf5\xf4\x92\x95\x49\x3d\x4b\x43\x43\xb2\xf0\x3a\xf1\xf1\x14\xe7\x87\x63\x62\xa7\x48\x40\xe3\x57\xca\x42\x97\x9a\xa2\xe7\x25\xb4\xc3\x4e\xd5\xbe\xe9\x40\x15\xaf\x64\xf9\xb5\xa9\x4a\x71\x24\x42\xad\x6b\x27\x7e\x54\x0f\xac\x1d\xea\x0a\x24\x33\x71\x8d\x0e\x22\x61\x35\x1e\xc9\xd1\x7d\xe5\x1c\x7a\x77\x77\x67\xbd\x73\x98\x80\x10\x5a\x50\xd6\x34\x8b\xd7\x74\xe8\xf1\x33\x42\x88\x44\xbd\xa6\x08\x84\xce\xcf\x0e\x97\x9e\x77\xcc\x17\xa2\xaf\xe6\x6a\x3b\xef\x2c\xf4\x6f\x2d\x7c\x19\x57\xff\xf1\xe2\x04\x49\xf0\xcb\x16\xac\x72\x99\xf4\x47\x7b\x73\xcf\x6e\xa4\x52\xeb\x44\x34\x13\xb5\x97\xc5\xef\x70\x8e\xc9\xf9\xba\x6d\x58\xef\xe8\xbb\x4a\x9b\x0a\x2e\x11\x9e\x87\x7e\x2f\x90\x0b\xda\x89\xc3\xba\x13\x23\x13\x90\xe6\xa6\x9e\x50\x15\xcf\x9c\x96\x4d\xdd\x9e\xaa\x29\x7d\xa9\x14\xbd\xfe\x2c\x9b\xc6\x58\x4e\xa6\x0d\xd5\xe3\x9a\x6e\x0d\xde\xcc\x48\x07\x89\x18\x33\x10\xc4\x33\x01\x1b\x7f\x16\x0b\x45\x38\x0a\x02\x1d\xd5\x4e\x1c\x7d\xb8\xac\x18\x20\x4d\xff\xdc\xe0\x84\xf2\x78\xfd\x87\x34\x5c\x7f\x1d\xc3\xf5\xd7\xc8\x0a\x7f\xad\xf1\xd7\x06\x3e\x7b\xbf\x4d\xad\x1c\x95\x08\x09\xd4\xb8\x91\x56\x72\xca\xfe\x9c\xe9\xa1\x12\x2e\x9c\xb4\x6e\x37\xc0\x38\xd7\x0a\x1e\x42\xb9\x9b\xd5\xbd\x2b\x3b\x0a\x20\x17\xd4\x93\xc0\x25\xf4\xa7\x29\xf6\x49\x4d\x25\x09\xba\x7a\x0f\x02\xc2\xc1\xcb\xdf\xd0\x99\x32\xcf\xb1\x68\x09\x87\x59\x0c\x57\x82\xec\xa3\xf1\x94\x93\x96\x4c\xf2\x9c\x63\x6c\x72\x22\xde\xa5\xbe\x68\x57\x57\x14\x6e\x27\xb6\x4b\x59\x70\xa8\xc3\xba\x84\x2b\x4a\xf8\x67\x78\xe5\x7c\xed\x37\xe0\x33\xa0\x3d\xc0\x6b\xad\xc3\x83\x73\x72\x61\xeb\x4d\xf6\x52\xaa\xcf\xaf\x6c\x91\x35\x5c\x93\xd2\x46\xd1\xd9\xd0\xd9\x6e\x20\x99\x27\x66\xbb\xb1\xc6\xd8\x6d\x6f\x33\xdb\xf2\xa4\xc0\x38\x9e\x72\xf4\xf1\x27\x9b\x48\xef\x95\x73\xcc\x93\xce\x31\x29\x0f\xeb\x34\x7a\xd3\xd7\xb0\xfa\xbe\x4a\x45\x8a\xdc\xf4\x94\xde\xed\x9a\x7a\x8a\x37\x07\x33\xc3\xad\x33\x36\x0d\x76\xc7\x72\x42\x18\xb6\x00\x27\x3f\xa2\x04\x01\x9c\x91\x82\x46\xee\x9a\xfc\xd1\xf1\x61\x71\x09\x20\x4d\x74\x29\xe3\xcb\x79\x02\x58\x93\xd5\x47\x03\xb0\x66\xa4\x00\x6b\xe8\xe2\x79\xc7\x62\x8f\xa4\x6d\x12\xce\xe1\x70\xa4\xc2\x17\xa7\x83\xbf\xe8\xc1\xe3\xf4\xb9\x0a\x10\x65\xa5\xce\x00\xe9\xc0\x53\xf4\x94\xd1\x85\x5f\x5b\xfa\xab\x47\x3c\xf9\x5c\xa2\x21\x51\x9d\x21\xba\x6c\xa7\x71\x56\xb6\x12\x8e\x66\xf4\x10\x38\x9a\x4c\x7c\x8a\x11\xa3\x9f\x8d\x4f\xd1\x3b\x29\x40\x0f\x18\x62\x3d\x1b\x0a\xae\xd3\x05\xd7\x91\xf7\x8b\x73\x3e\x6d\x7b\x05\x88\x15\x85\xdf\xd3\xe9\xdf\x27\x4e\x2b\x73\x9d\xc1\x4e\x51\x53\xb9\xb3\x74\xb9\x33\x16\xaa\x99\x9d\xfe\xf4\x98\xd9\x3b\xa4\x6e\x36\x14\xc7\x18\x45\x18\x87\xf9\x2b\xae\xa1\xbd\x43\x1f\x63\xc9\xdf\xb2\x4a\x1a\x43\x59\x4f\xc2\xcb\xd9\x2c\x9c\x9d\xf7\x02\x7f\x68\x2a\x7c\x99\x2e\x7c\x59\x08\x3b\x34\x7a\x44\xec\xd0\xe8\x7e\xd8\xa1\xd1\x9f\x80\x1d\xd2\xb4\x59\x00\x3b\xa4\x03\x7a\x99\xb1\x43\xf4\x15\x19\xe7\x61\x87\x78\x06\xc8\x98\x8f\x1d\x12\x79\xc8\x38\x13\x3b\x34\x16\xd8\xa1\x4c\xb3\x96\x24\xfe\xcc\xa3\xf8\xb3\xb4\x59\x0b\xe9\x73\xd1\xe9\x04\x67\x68\x49\xa3\x0a\xa4\x48\xbc\xa2\xd1\x80\xf1\x46\x72\x5c\x82\x91\x08\x0f\x6b\xa8\x8e\x97\x0f\x66\x8a\x0c\x05\xa2\x7f\x1e\xfc\x1c\xce\xc2\x49\xd8\xc7\x04\x6c\x34\xd6\xa7\x65\x6e\x29\x7d\x48\xec\x98\x64\x72\x93\x24\x53\x01\xe7\x30\x17\xe9\x3a\x2f\x10\x60\x25\x63\x51\x80\x6c\x93\x9f\x7a\xca\x93\xc0\x3a\x5d\x24\xed\x83\x12\xd8\xab\x4e\x21\xdb\x21\xb8\x09\xe1\xa2\x59\x04\x67\xee\x6c\x3f\xc8\xd5\x26\x82\x5c\x25\x81\x54\xdc\x82\x74\xe4\x0c\x2a\x7d\xe6\x0c\xa5\xcf\x97\xe4\xda\x19\xc2\x6f\x34\x5c\xe8\x8b\x85\xb7\xcd\x05\x11\x51\x41\x93\x49\x8f\xc1\xf9\x19\x7d\xb8\x38\x0e\xee\xf5\x22\xd3\xf2\x5b\xc7\x3f\x3a\x6a\xb7\xae\xae\x1b\x5e\x8e\xec\xc1\xcc\x22\x01\xe5\x13\xd2\x67\xa0\x78\xa6\xfc\x07\x46\xec\xdb\xd6\x76\xb4\x9d\xb1\x10\x81\xb0\xf0\xb2\xcc\x79\xc9\x6d\x1a\x6a\x12\xb5\xb7\xd9\x09\xa7\x26\xd4\x41\x8d\x15\xdc\xdd\x21\x74\xe3\x9a\x54\x61\xf1\x4e\x22\x8f\x28\xb4\xb6\xa4\x53\x94\xac\x7a\x51\xe5\xc5\xc3\x90\xdc\xa0\xd4\x68\xc2\x05\xc3\xf3\x56\x07\x5a\x58\x57\xac\x89\x2c\xc3\xf9\xbe\xd6\xaa\xa3\x6b\x5e\x32\x91\x45\x38\x27\x2c\xf5\xba\x41\x8b\x10\xf4\x28\xdd\x75\xba\x77\x77\x63\x60\xea\xd0\xe1\x3e\x77\xb9\x26\x10\x25\x14\x33\x86\xff\x5c\x73\x07\x36\xa7\xce\xd6\x08\x19\x11\x2b\xcf\x73\x67\x8a\x93\x94\x33\xe7\xf4\x1e\x78\x11\xa5\x36\xe0\xa7\xce\xe4\xb2\xcd\x53\x19\x2e\xb2\x3b\xcf\xc6\x27\xa0\x0c\x7a\x8a\x88\x8d\xd3\x1c\x95\x74\x3f\xd6\x71\xf7\x55\x43\xa5\x0b\xe7\x54\x11\x6d\x8b\x2a\x93\x8a\x14\x9a\x2e\x46\xaf\xfb\x8a\xbb\x0c\x55\x59\x53\x6f\x75\x62\xd0\x21\x31\xfb\x03\xc9\xe2\x3a\xf1\x8a\x08\xbb\x87\x94\x67\xce\x0d\x29\x49\xa7\x44\xe3\x00\xb3\x1d\xc4\x23\xba\x5f\x73\xb2\xcd\xbe\xf2\x05\x74\x7b\x2e\xfa\x2a\xf8\xa5\xd9\xae\xae\x94\xca\x9e\xec\x09\xb0\x97\x34\xec\x97\x66\x8b\xbe\xdb\x61\x4b\x79\x43\xcb\x1d\x95\x61\x48\xd5\xbf\xbd\x60\x1f\xfe\xd2\xb9\x48\x2d\x78\x69\x81\x67\x1c\x38\x3b\x34\xe2\xd1\x29\xe0\xd0\xeb\x8f\x79\x3f\x14\x77\x9a\x5d\x2a\x5b\x63\x8b\x1d\x5d\x76\xb9\x5a\x7b\xf1\x64\x2c\xfb\xe5\x46\xfd\xd6\x41\xa9\x8c\x9b\x97\x7b\xc4\x08\xb3\x5c\x26\x24\x2d\xf9\x93\xdf\x01\x5d\x32\x2e\x35\x6e\x12\x70\x16\x1a\x2e\xe7\x9e\xbd\x07\xf1\x56\x90\xdb\x95\x7a\xaa\x2b\xe8\xa1\xe0\x5b\x7b\x92\x50\x6a\xd0\xae\x2c\x35\x2e\x1b\xbe\xa1\x9d\xa4\xea\x4b\x6d\x83\xaa\x8c\xee\x57\x3f\x91\xa2\x5c\x87\x53\x8c\xdf\xe5\x76\x39\x00\x98\x37\xdd\xf6\x46\xd9\xad\x5f\x78\xa3\xc7\xea\x80\xc9\x8f\x95\x50\xb9\xd6\x12\x3a\xe3\xea\x3f\xd4\xa5\xfc\xd4\x8b\x62\xa9\xcf\x5b\xd6\xcb\x7d\x4c\xdd\xc8\x65\xd2\x56\x2c\x61\xc6\x28\x09\xaf\x16\x16\xbb\xfe\x71\xca\xf2\xce\x15\x38\x02\xe6\x07\x4a\xfb\x1b\x4d\xbf\x65\x00\x91\xb6\x49\xd6\x20\x5c\xd5\x13\xd1\x76\x85\x6e\x58\xf4\x1e\xff\x1c\xc8\x88\xc6\x65\x32\x56\x8e\x0c\x71\xba\xcc\x3f\x68\xe3\x16\x18\x24\x71\x76\x30\x09\xba\x54\x28\x0e\x24\x2e\x4f\x61\xe2\x1a\x48\xd9\x25\xdc\x2f\x65\x03\x68\x66\x42\x32\x68\x84\x56\x64\x97\x92\x5c\x40\x25\x2f\xed\x55\xc1\x0f\xa0\x43\x13\x65\x2c\x9e\xcb\x42\xb5\xe6\x9f\xc4\x4c\x62\x96\x71\xf6\x92\xb6\x23\x7d\xd9\x9a\xdd\xc0\x7f\x2a\xd1\x37\xfe\xbe\x4e\x53\x2b\xf5\x46\x94\xd4\xd4\x9c\xee\x3e\x3b\xc1\xdb\x09\x17\xd7\xda\x2d\xa4\x9d\xf4\xc8\x7e\x3a\x52\xf7\xc9\xcb\xac\x0d\x94\x33\x75\x36\x53\xc3\x88\x6f\x54\x36\xd7\x75\xc6\x9c\x00\x44\xef\xb7\xb1\xfb\xdd\x8d\xac\x57\x91\x26\x4c\xe7\x85\x97\x50\x2d\x02\xe9\x92\x1e\xe9\xe7\xfa\x7c\x19\x38\xff\xf8\x0e\x3d\xeb\xbe\xa8\xa1\x6b\x5d\x29\xd2\x69\x3d\x78\xce\x22\xbe\xc0\x7c\x00\xf9\x8a\x9a\x98\x71\x2c\x2f\x0e\x67\xed\xfe\xc4\x1d\x41\x37\x27\x1a\x21\xb2\x2e\x12\x3e\x25\xcb\xc9\x54\xff\x66\xbb\x23\x37\xd4\xb7\xca\xcc\xa4\x48\x98\xa3\x86\x60\x41\x83\x32\x32\xd9\x36\xac\xb3\xe3\x0e\x9a\xbe\xa7\x02\x1e\xcf\x04\xc2\x20\x01\x38\x28\x25\xce\xd9\xa4\xdb\x95\xc2\x9e\x58\x54\x8d\xc1\xca\x91\x3f\x48\x09\x38\x32\xd4\x20\x6c\xb4\xb2\xf3\x25\x59\xeb\xdc\xb8\x2c\x1f\x5d\xa2\x69\xb4\xd3\xcb\x96\x68\x1a\x0d\xf5\xa8\x2f\x16\xa3\x3c\xd3\x28\x57\x44\x89\x1b\x73\x5a\xba\xb7\xc8\x6d\xb3\xb7\xb0\x76\xbb\xb7\x9c\x96\x61\x03\xf6\xb6\x21\xdc\x66\x16\x33\xda\x10\x6e\x98\x85\xc1\x3e\x1e\x5f\x58\x73\xd9\xe5\xf4\xae\x55\xb0\xbd\x1f\xf0\x7c\xdc\xcf\x4a\x0d\x9b\xcb\x2c\x66\x74\x0f\x24\xe9\xb9\xf6\x93\x05\x41\xd9\xbe\x51\x62\x6d\xf6\x50\x0d\xbb\xe1\x1c\xef\xae\xfd\xa4\x5c\xb9\xf2\x44\x9d\x65\xac\x59\x9e\x48\x5f\x91\x7e\x9e\x3c\x51\x08\x6f\xfa\x05\xe4\x89\x91\x58\xa7\x9f\x29\x4f\xec\x17\x92\x27\x26\x45\xe1\x1e\x15\x85\xeb\xdc\xe4\xe4\x0a\xdd\xf4\x3a\x0b\x22\x64\x58\xeb\xc2\xae\x76\xa4\xc3\xb3\xb0\x99\x62\x2f\x5e\x43\x91\xcc\x6c\x21\x0c\x11\x03\xb8\xa9\x8e\x8e\x16\x92\xd5\xe2\x44\x7a\xec\xa2\xf0\x4f\x95\xae\xf5\x84\x74\x2d\x4f\x6e\x36\x62\xec\xe3\x8d\xc9\xb2\x6e\x40\x46\xa4\x8f\x8e\x6a\x4c\xe6\x11\x43\x9a\xc1\x64\x59\x37\xab\x7a\x01\x1c\xac\xc1\x4f\xc2\xee\x6d\x64\x30\xad\x9b\x67\x99\xd6\x1d\x5a\xbd\xa3\xa3\x5e\x84\xbd\xef\x3d\xa8\xa1\x19\x1a\xeb\x35\x47\xf9\x56\x66\xbe\x13\xc4\x56\x66\x6d\x78\x88\xd0\x4c\xaa\x71\xd4\xd2\x19\xe5\x4a\xb3\x60\x61\xfc\xd2\x5f\xf4\x4e\x37\x41\x1c\xfc\xb3\x77\x6f\x67\x3d\xfa\x5a\x65\x53\x28\xd9\x81\x0f\x50\x21\x73\x8d\x0f\x9f\x55\x61\x6b\x27\x92\x93\x55\x32\x67\xca\xce\x88\x71\x19\x12\x76\x5b\x0c\x92\x9d\xd7\x02\x52\xd4\xdc\x2e\x48\x13\x14\x27\x5f\xfa\x46\xc2\xa3\xa3\xcd\x3d\x2d\x4c\x6e\xb8\x85\x09\x09\xb8\xa9\xc0\x4d\x64\x2a\xb0\x10\xfe\x87\x12\x5e\x69\xa2\xde\x72\xd4\x7e\xc6\xfa\x55\xe0\x03\x74\x57\x6d\xd5\x0d\x43\x37\x49\x20\xbb\x51\x02\x0e\x7c\xfa\x59\xf6\x7d\xdc\x6f\xf3\x4f\x56\xa1\x9e\x2a\x2a\x98\xa1\x82\x90\x5f\x04\xa1\xa4\xac\x2a\xe2\xbe\xfe\xc5\x54\xa6\x5c\xd2\x32\x45\xbe\xcc\x9d\x3c\xb1\xa6\xad\xe3\x46\xdd\x4e\xf2\x10\xf5\xef\xd4\xc0\x41\x32\x13\x05\x45\xea\x8d\x63\xa4\xc2\x11\x96\xc6\x70\xc5\xbe\xc0\x15\x77\x22\x5c\x71\x27\x0b\x1a\x7d\x83\x6e\x7b\x48\x4f\x01\x16\x2f\x58\xfc\xa4\xfb\x62\xa3\x2d\x39\x28\x4e\xd9\x0a\xaa\x31\x89\x87\xb6\x63\xed\xa4\x40\xfc\x3b\x16\xab\xce\x2e\x65\x35\xca\x8d\x2d\xb8\x82\xc1\x9c\x4f\x0d\xd1\xd2\x9c\x1e\x1d\xdd\x6a\xb8\xf5\x4c\x5e\xd2\x18\xf5\xc8\xf2\x79\x30\xbc\x17\x18\x0c\xef\x6f\x22\x18\xde\x6e\x72\x6f\x68\xfa\x6f\xd6\x02\x71\xdd\xea\xf4\xdf\xa4\xa7\x3f\x85\xeb\xee\xda\xc9\x2c\xe2\x30\x38\x50\xbc\xf5\xa4\xac\x13\x6e\x64\xeb\x84\xb6\xe4\x80\x19\xed\x13\xe8\x33\x8d\x74\x63\x60\x2d\x7d\x0d\x60\x2f\x62\x30\x1d\xdd\xfd\x4d\x43\x78\x27\x91\x69\x99\xe8\xb5\x18\x68\xc6\x59\xd5\xba\x30\xbe\xab\x6b\x81\x66\x03\x06\xfe\x8a\xdc\xe0\xa4\x68\x17\xe4\x52\x0f\xd1\x3b\xe7\x21\x7a\xe7\x04\x9e\x71\x8a\xff\xdc\xb0\xfc\x33\x95\x57\x94\x6f\xdb\x04\x53\x37\x47\x26\xae\xd9\x49\x43\xbd\xe2\x78\x24\xd4\x6c\x30\x37\x76\x4c\x0c\x17\x0b\x93\x9a\x4d\xb9\xb0\xc2\xd7\xd6\x3b\x68\xfa\xd8\xcb\x76\xcf\x53\x08\x48\xa6\x45\x83\xa1\xaa\x23\xa7\x5c\x47\x57\xae\xc9\xe2\x27\xe8\xf8\xda\x19\x99\x47\x7c\x6d\xf0\xed\x6e\x83\x04\x0e\x0a\xef\x7a\x5b\x41\x62\x8b\xb4\x84\x0b\xa1\x9e\xde\x85\x50\x56\x57\x0c\x48\xa7\x9e\xea\x42\x28\xa3\x06\xa3\x0b\xa1\xde\xfd\x5d\x08\x45\x12\x81\x19\x7b\x10\xfa\x37\x27\x88\x20\x53\x9d\x08\x32\xd5\x95\x30\x51\xbd\xff\x71\x12\x84\x42\x01\x89\x8c\x9c\x7a\x2e\xe8\xc7\xc8\xac\xe7\x82\x7e\x8c\xfc\x7a\x36\x3e\xc9\x28\xf3\xc8\x83\xfb\xf4\x1e\x11\xee\xd3\xbb\x1f\xdc\xa7\xf7\x27\xc0\x7d\x34\x6d\x16\x80\xfb\xfc\x8f\x63\xcf\xf3\xd8\x6a\xbd\xfc\x8b\x08\x36\x77\x4e\x8f\xa4\x98\x0f\x94\x41\x2e\x73\x05\xe4\x32\xb7\xf3\x84\x01\x49\x59\x8a\x47\x65\x29\x1a\x70\x51\x20\x8c\x7a\xf7\xc0\xf9\xe8\xa5\x72\xf1\x6d\xa8\xc1\xf9\x64\x21\x6f\x82\xa2\xa2\x84\xc5\xac\xef\x2d\xf1\x65\x11\x31\xc2\x30\x3e\x2e\x22\x31\xc2\x50\x0f\xbd\x19\x3a\x56\x50\x41\xba\xdc\x71\x9c\x6e\xab\xcd\x18\xa5\x36\x5f\x30\x6d\xca\x2c\xb5\x85\xe7\x50\x42\xb3\x75\x5b\xa5\x2d\x8c\x0e\xe3\xc1\x14\x91\x2c\x00\xcb\xec\xdf\xdd\x0d\xe8\x25\x3b\xd1\x70\xc5\xf2\xd8\x14\x70\x47\xe8\x4c\xf6\x60\x83\xd5\x6a\x80\x3a\xb2\x42\x85\xf9\x9d\xc8\x7c\xae\xdd\x9c\xe4\x30\x78\xed\x98\x63\x6c\xab\x78\x8d\x1b\x4d\x68\x58\x6c\xfc\xde\xd0\x8c\x1b\xdd\x28\xc9\x4d\x31\xa8\x03\xb6\x9c\x42\x3a\x14\x51\x9b\xf5\x65\xe2\x67\xe6\xdc\x24\x0d\xb0\xa3\x61\x95\xbb\x85\x00\x09\x33\x93\x61\x35\x1d\x46\xb7\x5c\xaa\x1b\x3a\xe2\x5b\xbd\x48\x37\x2a\xf2\x1e\xe7\xe7\x45\x87\x1e\x31\x4b\x7c\x23\xe0\x10\x19\xa3\xa0\x0a\xb9\x05\x85\xa4\x14\xe8\xd6\x60\x8f\x6e\xc9\x79\x0d\x68\x90\x9a\x24\x43\x9a\x15\xff\xb4\xd0\x6f\xe0\xbb\xe5\x07\xfe\x89\x69\x0d\x43\xda\xfd\x5a\xfc\x84\x1d\x4c\xcc\xcc\x8c\x0d\xfb\xf1\x46\x0c\xfb\x7b\x10\xeb\xf3\xc6\x09\xa6\x2b\xda\x93\x7a\x7e\x2b\x57\x8d\x17\x38\xcf\x81\xb3\xef\x38\x7f\x07\x76\x0b\x85\x07\x7a\xaf\xa4\x57\xdd\xeb\x1d\xb5\x14\xd2\xaa\xd8\x06\x1a\x4d\xde\x90\x2a\xb3\x46\xc6\xc0\x9a\xc0\x6d\xe9\xf8\x01\xe0\xd0\x24\x3d\x57\x31\xc2\x34\xa2\x7d\x47\xd4\xe4\x0b\x6f\x7d\xed\x20\x66\xdd\x25\xd2\xe0\x42\x68\xd9\xb2\xe8\xc1\xe3\xe8\xed\xd6\xe2\xbb\x9f\xe6\x22\xfc\xc4\x36\xe4\x56\xc9\x00\x9e\x97\x88\x73\xdd\x50\x28\x49\x11\x88\xec\x84\x9d\x8d\x86\x52\x32\x71\xc0\x32\xa2\xa5\x59\x1b\xe5\xb9\x94\x0c\x2f\x36\x74\xf4\x23\x08\xc5\x02\x2c\x46\x43\x8f\x16\x2a\xd5\x65\xa5\xba\x58\x0a\xdd\xec\x15\x2b\xd5\x61\xa5\x3a\x58\x0a\xee\x7c\xa4\x85\x8b\x15\xec\x51\xad\x2d\xe6\x84\x65\xe6\xa2\xb5\x5b\xa3\x47\x9b\xc6\xa5\x56\xac\x8a\x01\x6b\x7b\xc0\xc4\xdd\xb0\x5c\xe3\x62\x7e\x46\xb1\x7e\x9a\x9c\xf1\x69\xfb\xfd\x9d\xe4\x7c\xaf\x58\x17\x80\x6b\x21\x82\x4a\x18\xd2\x4a\x80\xb5\x91\x89\x0f\xb8\xd7\x61\x80\x7d\x18\x54\x41\xe0\xef\x3a\xd6\xa5\x68\x68\x0e\x41\x90\xd0\x8b\x67\x9d\x24\x20\x24\xfd\x72\x42\x07\xd1\x23\x6b\x8c\x12\xb0\x35\xea\x20\xfa\x34\x43\x8a\x02\x59\x53\xc3\x58\x19\x67\xcb\x91\xb1\x9e\xe4\xf1\x0c\x91\xb1\xe3\x08\x03\x1b\x22\x06\x76\xc8\xe5\x7f\x37\x2d\x44\xd9\x56\x5f\x3c\xd9\x3c\xf5\x52\x3e\xd2\xc8\xe6\x89\x95\x4e\xad\x54\x5f\xd8\x9a\xcc\xd7\x0d\x86\xd7\xdd\x5c\xa3\x06\x44\x07\xd6\x4d\x76\x69\x12\x75\x69\x1a\x87\x33\x44\x7c\xed\x96\xe2\x6b\x87\x6a\xe4\x6c\x67\xa8\x86\xce\x8e\x1e\x95\x7c\xad\x2b\xe5\xb1\x52\xad\xd5\x9f\x28\x29\x44\xa9\xa6\x9c\x78\x5f\xbf\xbe\x6e\x5c\x55\xea\xa4\x2e\x0f\x82\xb7\x3f\x52\xdb\x8f\x1e\x47\x6a\xfb\xca\x23\xad\x5f\x49\x21\x4a\x35\x95\xc4\x7b\xa9\x7d\x2e\x46\x5d\x1b\x15\x2d\xca\xca\x85\x8b\x73\x10\x91\x97\xf1\x3c\xc3\x30\x4e\x9d\xdb\x7b\xe8\x5b\xd2\x95\x53\x38\x72\x42\xc1\x72\x2e\x25\x75\xa9\x19\xe6\xad\xa2\x70\xc9\xc1\x17\x33\xd4\x10\xb9\xbd\x4f\x18\x04\xb2\x36\x23\x03\x17\xd5\x18\x4f\x92\x82\xe5\x4d\xc3\x79\x24\xc7\x41\x95\xf5\x80\x5a\x40\x9f\xe5\xeb\x1a\x98\xcb\x4e\xaa\x35\xc0\xf8\x5b\x6c\xc6\x13\x9a\x86\x5b\x45\xd3\xa0\x29\x61\xd0\x33\x6c\x92\x3a\x85\xad\x0c\x07\xe6\xe5\x4b\x64\xd6\x2a\x2d\x67\x23\xcb\x58\xb7\x0d\x9c\x4b\x49\xe0\x6f\x6f\x53\x1a\x9a\x34\xec\x3a\x07\x91\xbb\xd3\xd3\x47\x63\x41\x5d\xa7\x70\xba\x24\x8d\xd0\x55\x86\xbb\x91\x44\xdd\x32\xb6\x4f\x12\xe8\x47\xda\xcb\x8f\xee\xc7\x45\xf8\xaf\x60\x16\x5a\x23\x2b\x42\x64\xd5\x08\xcb\x6c\xc7\x84\x5c\x1a\xcb\x95\x5d\x5b\x04\xea\x1a\x59\xbc\xae\xca\x08\x85\xea\x71\x85\x7a\xa5\x83\x4e\xe5\x50\x2a\x5b\x43\x6b\x4c\x5f\xda\x15\xdd\x11\xfa\xa4\xfa\xfc\x45\xec\x31\x27\xcc\x42\x12\x2f\xd1\x0f\x46\x01\x34\xf1\xe2\x81\xd0\xc4\x79\x70\xe2\x42\xfd\xa9\xa7\xfa\x73\x5f\x48\x71\x3e\xa6\x18\xe1\x00\x7f\x00\xac\x18\x86\xbd\x78\x5c\x68\x71\x2e\xb6\x58\xee\xc2\xa3\xe1\x8b\x69\xc0\x0e\xc5\xaf\x94\x76\xb3\xcf\x85\xfe\xc1\xc8\xd6\xc5\x3b\xc3\x9a\xec\x81\x9a\xb5\x19\xef\xe7\xd1\xfb\xc5\x8f\x78\xbf\x24\xd4\x74\x45\x4a\x05\xd0\xa5\x0f\xb0\x39\xd5\x03\x59\x9b\xfd\x1f\x3a\x2c\x6c\xb2\x83\xa9\x73\x8d\x39\xaf\x60\x0f\x30\x35\x78\xd8\x34\xf0\x9f\x4a\x74\x00\x7d\x5f\xa7\xa9\x95\x7a\x23\x4a\x6a\x1a\xcf\xaf\xf6\xb7\x9d\x7c\x0a\xae\x35\x71\x04\x12\x34\x0a\xc4\x75\xb1\x92\x19\x5d\x85\x16\xc8\x82\xae\xe6\xf2\xbb\x3d\xa6\xd0\xeb\xb3\x3f\x83\x1c\xe0\xea\x50\xc3\xd9\x8e\x34\x69\x63\x23\x6e\x55\xcf\x24\x20\x6e\x35\x74\xae\xae\xc9\x94\x82\x57\x6f\x50\xd5\xc8\xdd\x5b\x18\x78\xec\xc5\x9f\x8d\x56\xe5\xee\x36\x74\x4c\x3b\x22\x01\x62\xa6\x5d\xf5\xd0\xe4\xa8\x3b\x3a\x3e\x2b\x4a\x06\x02\x32\x49\x31\x1c\xf0\x1f\x95\x1a\xbc\x77\xd3\xe7\x3f\x87\x32\xa9\xde\x76\x64\x2e\xea\xfe\x4d\x32\x63\xa5\x92\xf6\xce\xd9\xc9\x82\x87\xc5\xa3\x2b\xd1\x8c\xf1\x39\xb2\x95\x68\xc6\xf0\x1c\xd9\x21\x11\x8d\xc8\xd8\x6c\xf4\xae\x51\xe9\x36\x75\xdb\xf7\xd2\x80\x19\xa1\xbb\x66\x44\xed\xfe\x60\xda\x4c\x0c\xae\x51\x0b\x99\x0d\xdd\x35\xa2\x4d\xff\x77\x43\x77\x91\x17\xb8\x6c\x9b\x0b\x1a\x1d\x2a\x98\x71\xbb\x46\xed\xb1\x64\x5a\xbe\xb7\x83\x8b\xff\x65\x51\x44\x32\x95\x75\x49\xbd\xa0\x47\xf5\x82\xf7\x0f\x70\xa9\x9c\x9f\x09\xdc\xad\x67\x92\x59\xf9\x56\x4c\xcd\x79\x09\x99\xd5\xd0\xfe\x7a\x1b\x29\xd1\x6e\x25\xf0\xed\x0d\xa2\xb2\x62\xf0\xed\x4c\x7a\xec\x99\xa4\x5b\xa7\x14\xca\xaa\x91\x51\xf1\x48\x76\x06\xd9\xd7\x84\xac\x11\xa1\x7a\x6e\x94\x7d\x85\x34\x03\x22\x05\x7d\x0d\xfe\x76\x6d\x80\xdb\x6e\xa3\x70\x78\xf0\x91\x92\x70\xdb\x65\xec\x0d\x68\x58\x30\x36\xc5\x8a\x51\x72\x17\xcd\x95\x88\x4d\x71\x81\x8e\x21\x97\xf6\xea\xea\xe2\xda\x59\xc2\x3f\xa9\xd8\x14\x98\x18\xc7\xa6\xc0\xa7\x1d\x8d\x29\x31\x44\xf1\x95\x80\xfa\x0e\x1f\x10\xea\xeb\x93\xb5\x4d\xfc\xe6\xfa\x1b\x02\x4a\x70\xe9\x41\x41\xb9\x93\x1a\x8c\x73\x78\x6d\x93\x6c\x2b\xdd\x42\xf2\x26\x51\xa9\x2c\x5a\x7a\xe5\x5c\x2a\xa2\xa5\x97\xc5\xb1\xbc\x39\x59\xb7\xc5\xb3\x4a\xa0\xdc\x9c\x9c\x4a\x18\x80\x9c\xbc\x6a\x48\x86\xa9\x14\x05\xe0\x0c\xc6\x9d\x17\x05\x60\x18\x47\x01\x18\x69\xa2\x00\x8c\x92\x51\x00\xf2\xb6\x99\x6c\xfa\xb9\x7f\x14\x80\x91\x14\x05\xe0\x32\x47\xae\x37\x8a\xe5\x7a\x71\x31\xf4\xc0\xfb\xea\x9e\xb8\xe5\x33\x81\x5b\x5e\xa0\x87\xcc\x68\x0e\xc5\xd8\xcf\x13\x8e\xde\x47\xb1\xcb\xcb\x91\xce\xd1\xfb\x5a\x76\xf4\x7e\x99\xe7\xe8\x7d\x40\x3d\xa4\x6a\xda\x64\x28\x8c\xe4\x29\xa3\xb3\xf1\x1c\x17\x71\xad\x3e\x94\x5d\xab\x0b\x37\xea\xaf\x9d\x57\xd9\x78\xec\x8c\x43\x26\x81\xc7\x7e\xad\x01\x63\xb3\xfb\xe0\xde\xbe\x9d\xcf\x28\x80\x79\xa8\x20\x68\xcf\x11\x41\xfb\xea\x01\x9d\x3b\x9b\xeb\x4a\x8f\x07\xa1\xb9\xb3\x6f\xf0\xf4\x7c\x8e\x88\x60\x75\x3c\x67\xe9\xf1\x6c\x33\xfb\xd0\xb3\x53\x1e\x90\x33\x5c\x05\x7b\x79\xae\x82\x27\xe8\x2a\x58\xf3\x95\xbf\xc1\x4f\x70\xae\x97\x60\x4f\xf1\x12\xec\x1b\xbc\x04\xc7\x3e\x82\x7b\x8a\x8f\xe0\x88\xb0\x82\x3b\xd0\x62\x0f\x8e\xe3\x30\x6f\xc0\x3d\xe1\xda\x0f\x52\x98\x0b\x60\x3f\x76\x01\x4c\x1b\x42\xe7\xc3\xcc\x99\x8b\xde\x05\xb0\x4f\x81\xa7\xbd\xd8\x05\xf0\x38\xe5\x02\x98\x50\x81\x9a\xd4\x25\x2a\x84\x6c\x32\x3f\xc0\x09\x0c\xae\x1f\xf9\xd1\xb5\x9b\x03\xb3\x17\x5d\xe9\x48\xf1\x84\x17\xdd\x91\xde\x8b\xee\xe9\x03\x7b\xd1\x0d\x85\x17\xdd\x09\xf5\xa2\x3b\xd0\x7b\xd1\xcd\x58\x71\x49\x2f\xba\x9b\xaa\x14\x7f\x14\x31\xe2\x5a\xaf\xba\xfd\x6f\x73\xe2\x5d\xf4\x5c\xe2\x74\xcf\xdd\x9d\x89\x5a\x3b\x90\x1b\xa8\x93\xcb\x24\x05\xc4\x26\x47\x16\x27\x88\xec\x4c\x8a\x8d\xa0\xef\xfd\x89\xc2\x8d\xe2\x09\x7c\x89\x42\x86\xf4\x4e\xf7\x8d\xf3\x74\xa1\x11\x00\x03\x8f\x6b\xf0\xe2\x14\x8f\xaf\x46\xb9\x05\x79\xbc\x0f\xd0\x75\x5f\x76\x62\xbe\xf9\x46\x67\xc9\x9a\x31\xe4\x39\x4b\x5e\xea\x9d\x25\xfb\xaa\xab\xe2\x5b\xa3\x64\x32\xed\xa9\xd8\x97\xbc\xf3\x7a\x77\x77\x7a\x2e\xea\x1b\x3d\xf5\x1a\xbc\xf2\x0e\x75\xc6\x12\xa3\x84\x57\xde\x7f\xa4\x8c\x25\xfe\x51\xdb\x49\xd8\x9c\x84\x14\x32\x0a\x19\xcc\x9d\xf3\x52\x0b\x09\xc9\x35\x6f\x5d\xb8\xe6\xfd\xba\x23\x2b\x96\x69\xcd\xfe\x6c\xee\xe7\x55\x77\x4b\xcd\x29\xf6\xf0\x9c\x3b\x4f\x79\xce\x1d\x3e\x80\x39\xc4\x43\xfb\xd5\xe5\x9a\x75\x9d\x30\x75\x23\x09\x53\xef\xe5\x14\x56\xb5\x88\xf0\x35\x16\x11\x7e\x96\x45\xc4\x50\x6f\x11\x71\x0f\xdf\xaf\x43\xd5\x22\x22\xa3\x06\xa3\x45\xc4\xf0\xbe\x16\x11\x71\x04\x67\x67\x03\x0f\x48\x8c\x3a\x1d\xf8\x11\x79\x95\xf5\x23\x47\xb2\x7e\xe4\x48\xd6\x4f\x3b\x92\x1d\x40\xa2\x30\x95\x18\xc2\xef\x5c\x29\xaf\x8f\x6d\xdf\x57\xca\x6b\x14\x52\x66\x4b\x79\x8d\xe2\xda\x7c\x47\xae\xf7\xb7\x93\xc8\x74\xd5\x90\x89\xf0\x36\x4a\x01\x8b\x38\x81\x35\x5a\xe3\x67\x1b\x59\x18\x1d\xe5\xe6\x19\x59\x0c\x1f\xd1\xc8\x62\x78\x3f\x23\x8b\xe1\x9f\x60\x64\xa1\x69\xb3\x80\x91\x85\x4e\x0c\x6e\x96\xa4\xd2\x57\x64\x94\x27\x49\xe5\x19\x20\x63\xbe\x24\x55\xe4\x21\xa3\x4c\x49\xea\xa8\x90\x24\x35\xa9\x74\xf0\xa8\xd2\x21\xc3\xa7\xea\x98\x52\xac\xfc\x67\x01\x13\x8e\x6d\x7a\xba\xb6\x8e\x4b\x84\x74\x74\xab\x98\xf6\x6d\x15\xa3\x8d\xed\x1e\x16\x16\x06\x4b\x91\x4c\x4f\xaa\x7b\x7a\x86\x35\x38\x6b\x15\x9e\x61\xfd\xa4\x63\xd8\x2c\x1b\x0e\xdf\xe4\x3d\x15\x8f\x5a\x49\x30\x1d\xf6\x46\xbe\xce\x15\x04\x0b\xd2\x95\x21\xbf\xb6\x92\x55\xc8\xd1\x65\xab\x86\x91\xe3\xa5\xa6\xf1\x3c\x6e\xde\x4d\xca\x89\x45\xbd\x50\x89\x8b\x1a\xb5\xfc\x78\xe7\x92\xb6\x83\x17\x4c\x30\xf9\xde\x07\x16\x21\x9c\x07\xad\xd2\xb1\xef\xd6\x8e\x7d\xf8\x10\xed\xef\x8e\xff\x76\xfc\xf7\x12\xef\xd6\x7f\x7d\xdf\x7b\x76\x40\x61\x16\x4e\x89\x2d\xd9\x83\xbf\xfc\x57\xb9\x5d\xfe\xaf\xd2\xc9\x7f\x95\xb9\xc0\xb6\x5c\xfa\xfe\x69\xef\xd9\xc9\xf7\x0b\x3c\x61\xe0\xcf\x0c\xfe\x6f\x9f\x60\xf5\x8d\xef\x9f\xc2\x2f\x7c\x2a\x95\xb9\x49\x60\x92\xd3\xc4\x6c\x36\xd6\x80\x19\x9f\xd2\xb2\xac\x3c\xed\x57\x81\x0a\x68\x3e\x6d\x0d\xc8\x9a\xe7\x97\xc7\x5c\xda\xe2\xa3\x70\x5d\xa0\x79\xc8\xa5\x96\x7e\xca\xa6\xa1\xb4\x53\x95\x19\x9c\x1c\x30\x61\x6e\xff\x43\x02\xdd\x4e\xe2\x5b\x5a\x6f\xe8\x33\x71\xda\x15\x9f\xf9\xd8\xf5\xf9\x11\x15\xe6\x9a\xef\x84\x8c\x14\x9c\x3a\x61\x4a\xd8\xcd\xfa\xa6\x58\xec\xdc\x38\xd6\x74\x0f\xc9\x76\x54\x83\x2c\xc5\x9e\xaa\x76\x3a\xd3\x1c\x81\xa6\x1f\x4b\x48\x7d\xd5\x4e\x27\x61\xd3\xa2\x70\xb8\x66\x38\x1f\x5a\x48\xa7\x4d\x59\xb4\x42\x69\x51\x1b\x6a\x5d\xe6\x31\x38\xb2\x3f\xf3\x47\x59\x01\x05\x0d\x82\xf0\xca\x7c\x3b\xf6\xc2\x51\xd4\xd0\xac\x44\x5e\x40\x67\x8a\x78\x24\x64\xb1\xba\xcd\x35\x2b\x45\xdb\x18\xba\xb0\xfa\xec\x98\x06\x1c\xe5\x49\x1b\x48\xfa\x7b\x09\x0d\x53\xc2\x2c\xf8\xdd\x98\xaf\xc7\x18\x55\xc7\x19\x8d\x30\x03\x23\xa7\x16\x5a\x2e\xe4\x32\x5a\x68\x97\x28\xc0\x20\x5d\x98\xc4\x23\xe0\xcc\xd8\x67\xb3\x9b\x18\x26\x6b\xd4\x82\x6d\xb4\xb7\x10\xc0\x6e\x58\x06\x29\x8b\x8f\x44\xfa\xcc\x1c\x19\x94\xcb\x04\xf0\x6e\xc8\x6b\xb5\xbe\x43\x67\x16\x8a\xec\xe0\x6b\x14\xcd\xd7\x2f\x24\x7a\xd8\xe5\x02\xe0\x60\xcd\x89\x89\x12\x22\x12\xe6\x60\x7a\x28\x8e\xef\x68\xba\xee\x31\x4f\xdf\xdc\x7d\xbc\x2f\x67\xb1\x20\x89\x19\x30\x71\x59\x52\xce\x14\x43\xb9\x24\x64\x76\x16\x9d\x09\xc9\xdd\x55\xc4\x9b\x64\xf7\x5e\xde\x24\x45\x29\xa9\x71\xc5\xcd\xa7\x4d\xb8\x77\xa5\x05\x8a\x95\x67\x89\x33\x97\x5f\xeb\xc4\x4f\x9e\xb0\x89\xca\x9a\x8b\xd9\x16\xbf\xa5\x07\x57\xeb\x24\x44\x21\x22\xa3\xd4\xc6\xd3\x25\xd0\xc5\x3f\x42\x9e\xf7\x54\xaa\x07\x93\x50\x3b\x71\x3c\x7b\xd1\x9b\x85\xeb\x03\x1a\xa3\x01\x88\x6a\x9f\x72\xe4\x6d\xfb\xab\xe7\xc8\x22\xf8\xd3\xe9\x74\x16\x6e\xb0\x30\xd3\x1e\xfb\xf6\x6e\xc1\x64\xc0\x5e\x19\x45\x9c\x4d\x11\xb6\x6f\xe9\x20\x64\xaa\x46\xd6\x38\x84\xc9\xc9\xea\xe8\x68\xf9\xfd\x82\xcb\x11\x9b\xf6\xfa\x6a\x79\xed\x2c\xe0\x1f\xb2\x2a\xe3\xdf\x72\xf9\x9a\x96\x44\x89\x33\xe2\x2f\x97\x0e\x86\xdb\x39\x99\x40\xa9\x93\x7a\x13\x19\x96\xab\x6b\xb2\xac\x54\xa2\xea\x37\x4e\xad\xb9\x89\x2b\xdc\x94\xcb\xf6\xe2\x6a\x73\x7d\x62\xad\xaf\x36\xff\xb9\xa4\xee\x21\x31\x5c\x0d\x7d\x70\xf0\x0d\x54\xe7\xac\xe1\xb3\xb7\x97\x7e\x60\x10\xd0\x23\x00\x72\x27\x1a\xd8\x62\x8b\xb7\x30\x80\x53\x68\x69\x79\x72\xdb\xbc\x85\x26\xb6\x57\xb7\xd7\xce\x29\x39\x2d\x3b\x6b\xf8\xd5\x9c\xdd\xc3\xf9\xf1\xf6\xca\x83\x2e\xd1\x4b\xc5\x7a\x51\x3e\xae\x3d\x91\x50\x78\xde\xd3\xa5\xcd\x5d\xa6\x90\x41\xeb\x26\xe7\x7a\xb2\xda\xe2\xb2\xad\xac\xec\xc4\x2d\xd5\xc8\x2e\x5c\x53\x32\x93\xc0\x61\x0f\x3e\x67\x19\xa2\x6e\xf9\x41\x7f\x64\x89\x49\x86\xce\xed\x80\x70\x08\xe8\xf2\x3b\x23\xe7\xce\x0b\x72\x01\xff\x5f\xc2\xfc\x64\x4d\x04\x5b\xae\x6e\xce\x62\xcd\x59\xa1\xe5\xbe\xa0\x4a\xcf\x9c\x0b\xd2\xfe\x9e\x5f\xcd\x7c\xfc\xe5\xb3\xb2\x0b\x5f\xfb\xc2\x39\x83\xfe\x9c\x97\x9d\x63\xa0\x4f\x2f\xca\x40\x74\x5f\x9c\x5c\x42\xfa\xa5\x73\x61\xa7\x55\x95\xa5\xf2\x39\x9f\xea\x3d\x26\xfa\x32\x39\xd1\xe9\xb9\x3b\x2f\xd7\x5f\xec\x76\x11\x3a\xd3\xc9\x8c\x8e\x5e\x03\xce\x88\x5a\x21\x06\xd0\x69\xd2\xd1\x03\x26\xd1\x94\x97\x4a\x49\xb5\x72\xc9\x1e\xca\x1f\xfb\xce\xf1\xdf\xc9\x00\x7f\x0d\xf1\x9f\x11\x3d\x67\x55\xb1\xa3\xa2\x1b\x48\x49\xc0\x4b\x89\xeb\x37\x91\x42\x51\x92\xb2\xe0\x52\xe7\x91\x73\xfc\xe8\x50\x40\x23\xd6\x2b\x5b\x48\x64\xc4\x7a\xa1\x94\x70\x5f\xa0\x97\x8b\x4c\xe6\xde\x58\xc5\x98\x3f\xdd\x1b\xed\x35\x65\xa2\xde\xbd\x71\x8e\x52\xf4\xb2\xbd\x21\x7e\x33\xb7\xdd\x0f\xcf\x96\xb0\x54\x27\x1f\x60\x63\xee\x8d\xf5\xcb\x96\x8d\xe8\xa0\x7e\x66\xd9\x08\x7d\x45\xfc\x3c\xd9\x88\x60\x3c\xfc\x02\xb2\x11\x91\x87\xf8\x99\xb2\x11\xbf\x90\x6c\x24\x89\x99\x83\x73\xbf\xfb\x2d\x28\x33\x64\xb1\x8b\x98\x42\xde\xc4\x60\xbf\x08\x43\xb6\x94\xfc\x39\xde\xe8\x79\xb5\x1b\xa7\x5b\xe9\x30\x5e\xad\xc3\xa7\x6c\xe6\xf4\xe0\x37\xc6\x43\xe9\x88\x89\x59\xe5\xb2\x6f\xab\x0c\x87\x85\xc0\xe8\xcc\xef\xee\x7c\xb2\x70\x16\x77\x77\x6d\x8e\x57\x5b\x19\x31\x4d\x72\x50\x76\xca\xec\x6d\xe0\xaa\xde\x1f\xc5\xc4\x5d\xfb\xa1\x77\xbc\x84\xa5\xdc\xad\x94\x84\x8c\xe0\x69\x04\xb0\x62\x70\xa6\xdb\x82\x91\x38\x72\xf2\xcd\x7d\xaa\x0c\xe1\xb8\xa3\x75\xce\xb5\xd2\x89\xd9\xcb\x8e\x74\x9f\xa4\x9c\xfe\xcd\x04\x80\x6f\xad\xe0\x1b\x94\xc6\x9a\x67\x91\xdf\xbe\x6d\xbe\x2d\x5d\xd0\xee\x06\x39\x4e\xfb\xd6\x8a\x29\x5d\xba\x80\xc1\x92\xee\x26\x69\x1b\x31\x3b\xa9\xb5\x66\x18\xcf\xe5\x34\x6d\x4f\x17\xc6\xf6\x74\xba\x06\x98\x39\x1d\xda\x06\xde\xab\x20\x9d\xb4\xf3\xc4\xa4\x3d\x4e\x00\x94\xf3\x7b\x07\x40\x51\x39\x78\x6d\x13\x2c\x0b\xa5\xb6\xef\xee\xfa\xbb\xcc\xd8\x29\xe7\x29\xf6\xe6\x3c\xdf\x1f\x04\xb0\xad\x9c\x99\xba\xbb\x2b\x09\xbb\xa0\x6f\x0f\x73\x52\x80\x8d\x1a\xec\xc3\x3d\x89\xcc\x30\xa4\xa4\x0d\xd0\x92\x50\x87\x1c\xf7\x8f\x9b\xa2\x1d\x07\x66\xf9\xc4\x72\xdc\xdd\x55\x5f\xec\x44\x48\x9d\x73\x79\xf1\xe0\x82\xa4\x40\x23\xa0\x60\x32\xd6\x0f\xfe\x6e\x5d\xb9\xd7\x8d\xab\x6b\x6d\xc0\x9c\xa9\xbc\x4d\xa5\x13\x85\x57\xcb\x65\x29\x2a\x22\x49\xd0\x44\xcf\x10\x37\x57\xc5\x9c\x34\x6a\x36\x54\x3c\x0d\xe9\x11\x33\xb5\xab\x1c\x26\x80\xf6\xe7\x9b\x04\x16\xc0\x68\xa7\x34\xb7\x86\xdc\xc8\x13\xbe\xcc\xb6\x56\xb4\xd8\xc2\x1a\x49\xc5\xea\x96\x46\x32\x6e\xa9\x9e\x2d\x9d\x5a\xab\xad\x44\x79\x82\x84\x5a\x43\x49\x6a\x28\x25\xa8\xe9\xd5\x74\x3a\xda\xd2\x2b\x89\x5c\x79\x91\x9d\xf5\x4e\x5a\xfb\xe6\xaf\x23\xc5\xfa\x31\x2e\x21\xcc\x8a\x87\xe6\xfc\x31\xa6\xbd\x9d\x31\x7f\x3e\x9d\xf6\xf6\xbe\xd3\xde\xce\x9d\xf6\xf6\x63\x4e\x3b\xc7\x2b\x6b\xf7\x84\x7c\xad\xa7\xf7\xc4\x95\x40\x57\x5f\x33\x53\xe6\x82\x3b\x42\x71\xde\x09\x9f\x86\x7f\x07\x06\xfc\x78\xf8\xe5\x7f\x9f\xd5\xaf\x33\x53\x8c\xd6\x17\xfe\x9b\x5a\x5f\xf7\x1a\x44\xf1\xc5\x74\x9f\xb5\x84\x34\x9c\x2f\xc2\x6a\x2c\x9c\x76\xec\x86\x67\x29\x63\x80\xb0\xcb\xf9\xee\x4e\x39\xad\x42\x5d\x9d\xe6\x59\x29\x76\x69\x70\x8d\x1e\x0d\xae\xd1\x77\xea\xd5\x17\x14\xe8\xa3\x65\x7d\x87\x46\xd3\xc3\x91\xd1\xf4\x70\xec\x68\x71\xbd\xfd\x39\x4c\x03\x0c\x9f\x3a\x1e\x3a\x3a\xe2\xb1\xfe\xd9\xb3\xd1\x92\x11\x37\xff\x4e\x78\x4c\x2d\x31\x8b\x48\xa0\x81\xa8\xfb\x9f\x84\xdb\x54\xbd\x9d\x62\xb6\x55\xa2\x04\x06\x6a\x06\x0c\xec\x49\xd1\xae\xe8\xf1\x98\x3e\x31\xc3\x28\xeb\xaa\xfe\x1d\x39\x7e\xf1\x1d\x77\x5a\x31\x27\x0b\xb2\x34\x38\x1c\xbd\xd1\xb1\xed\x33\xe6\x56\x06\x3f\x90\x13\x18\x9c\x77\x26\x21\x85\x30\x09\x8a\x91\xb6\x7c\x3e\x44\x6e\x60\xf2\xbc\x89\xaa\x24\x84\x54\x65\x8c\xf2\xb9\x4f\xb5\x09\x20\xe5\x2c\x69\x20\x6f\xac\xf4\xb1\xa5\x17\x3a\xe3\xaa\x02\xd2\x0b\xa3\x4c\x81\x1f\x0c\x7b\x1b\x0a\x4a\xe7\xcb\xde\xd8\x98\x3c\x33\x37\x23\x1e\x27\x5b\x22\xa0\x93\xb6\x98\x25\x02\xf4\x15\xe9\xe4\x49\x04\x04\x7b\xdb\x29\x20\x11\x88\x18\xdf\x4e\xa6\x44\xa0\x53\xd4\x25\xa5\x1e\x22\x44\x04\xa7\x7e\xa3\xb8\xa4\xbc\x41\x98\x41\x7f\x7e\x0a\xeb\x68\x2f\x78\x94\xe2\x22\x2a\xcb\x66\x54\x2f\xe7\x81\x2e\x6c\x58\x41\xa3\x14\x4c\x2f\xe0\x81\x82\x5b\x56\x30\x53\x30\x92\x94\x68\x79\x54\xa2\x95\xe1\x2b\x73\xf0\x20\x0e\x2d\xf1\x1c\x2e\x1c\x14\x63\x10\x23\x50\x22\x21\xca\x56\x12\xa2\x4c\x8f\x8e\xb6\xaa\x5d\xde\x56\xb2\xcb\x1b\x24\x44\x2c\x03\x26\x62\x49\x09\x4f\xc8\x56\x6f\x9b\xb7\xca\xb1\xcd\x1b\x93\x15\x19\x66\x19\x0d\x4d\x68\x06\x53\x6c\x0c\xd4\xa6\x6c\x5a\x2b\x11\xf7\xa2\xb1\x32\xd8\xea\x6d\xb2\x42\x63\x2c\x60\x24\xf4\xf2\x3e\x85\xe1\x11\xd1\x0c\x95\xd4\x63\xea\x2d\x9a\xde\x44\x20\x61\xc8\x1d\xa9\xfa\x06\x05\x2d\xfb\x96\xc2\xb2\x6f\xa9\x58\xf6\x2d\x6c\xb4\xd8\x73\x16\x3a\xcb\xbe\x85\x62\xd9\xb7\x88\x2c\xfb\x06\x47\x47\x83\xc8\xb2\x6f\xf0\xa0\x41\x3c\x56\x18\xc4\x63\xf5\x0d\x41\x3c\x38\xa5\x9c\x2d\x05\x53\x0d\xfa\x06\xf7\x36\xe8\x93\xeb\x2a\x66\xc7\xc7\xa5\x39\x9c\x3d\x96\x7c\x4b\xe6\xd9\xcf\x3d\x8e\xad\x1f\x0e\xe0\xd1\x8d\xfd\x5e\xe9\xa3\xd3\x71\x69\xcc\x59\x52\x96\x75\x7e\x52\x6b\x9d\xa3\x2c\x2b\xa4\xc6\x4b\xc5\x8d\x04\x07\x91\xd1\x11\x19\x32\x23\xc1\x9e\x6c\x24\x48\xd3\xa4\xa4\xdc\xfd\xfe\x6d\x46\x82\xc3\x3d\x8c\x04\x87\xb1\x8c\x32\x2e\x86\xc6\x5b\xdf\x6c\x24\x38\x57\x0c\x2d\x4d\x46\x82\xc3\xd8\xa2\x67\xa8\x33\x12\x5c\x45\x46\x82\x7e\x01\x23\xc1\xbe\x1d\xcb\x57\x35\x46\x82\xc9\x03\x4b\xa7\xba\x1f\x15\x31\x12\x1c\x14\x31\x12\x94\x56\xb8\x58\x26\x7b\x58\x09\x0a\x69\x2f\xda\xab\xde\x37\xb2\x09\x33\x0c\x1c\x3c\xa4\x61\x60\x7b\x0f\xc3\x40\x6e\xdb\xf8\x2d\xc6\x8d\xdc\x16\x70\xb0\x8f\x2d\x60\x64\x82\xd8\x53\x79\x08\xc5\x2c\x43\x21\x44\x39\x22\xc0\xc7\x5b\xc9\xb5\x17\x57\xfe\xb5\xe3\xc2\x3f\x68\xe7\x2d\x01\x59\x16\xf1\xe5\xa8\x33\xcd\xca\xb0\x2e\x04\x96\x3c\x30\x5a\x17\xf6\xc8\x98\x59\x17\xc2\x05\xa7\x59\x20\xf7\x37\x30\xec\x90\x2e\x65\x24\x34\x26\x86\x1d\x61\x62\xe8\x2b\x26\x86\x1e\x33\x31\x0c\x92\x26\x86\x18\x34\x53\x18\x19\xf6\x1d\x51\xf8\xaa\x27\x19\x19\xf6\xd3\x46\x86\x7d\xc9\xc8\x70\x0c\x29\x63\xc7\x8b\x8d\x0c\x59\x30\x8b\x3e\xc6\x7d\x51\x8d\x0c\x3b\x92\x91\x21\x8b\x6e\x81\x99\x38\x1d\x0a\xcb\x09\xe8\x77\xd9\xc8\x90\x82\x9d\xa0\x02\x76\xbb\x9f\x1c\x33\x52\x23\x84\xa6\xa2\xd8\x5a\xfd\x09\x30\x9a\x0b\xcb\xe7\x06\x83\xe8\xde\x3b\x72\xd0\x24\x65\x93\xdd\x5a\xea\x92\xeb\x14\xa3\x58\xad\x3d\x7b\x32\xa5\x01\x39\x51\x16\x10\xcc\x17\x74\xe6\x68\x5f\xac\x49\x4e\xac\x7f\xe8\x68\x88\x1c\x3a\x97\x3d\xa0\x85\xec\xe4\x6a\x76\x1d\xcf\xb6\x83\xc6\x24\x94\xc5\x77\x12\xb1\x46\x3c\x6e\x1f\xd9\xc3\x88\x4e\x26\xfb\x48\x3e\xc2\x5f\xcb\xd2\xa1\x2a\x46\x5d\x1e\xea\xcd\x24\xb7\x7b\x9a\x49\x26\x2d\x7e\x92\x66\x92\x73\xd5\x4c\xb2\x9f\x32\x93\x1c\x9b\xb7\x4e\x52\x06\x21\x7c\x7b\x91\x0e\x6e\x8f\x07\xdd\x1b\x01\xab\xba\xab\xdd\x1d\x41\xe6\xee\xe8\x39\xe2\xfd\x55\x97\x6e\x5a\x9d\xb1\x5e\x4f\xb1\xe1\x73\x44\x32\xdb\x18\xa9\x6d\xd0\x83\x9d\x6a\x8b\xed\x15\xaf\x3d\xcb\xe3\x46\xb6\xf0\xb6\xd9\xe1\x7b\x84\xf6\xa8\xd1\x23\xf4\x2f\x1d\x6d\xa3\x4b\x9d\x6e\x5e\xb5\x49\xff\x9a\x48\xb3\xd0\x08\xe4\x39\x11\xdf\x25\x60\xf8\x3a\x49\xbe\xa2\xf8\xe2\xeb\xe4\x9c\x6c\x49\xe1\x8b\xe6\x5c\xdb\x45\xce\x43\xef\x6b\xde\x28\x48\x7c\xc7\x91\x4c\x15\x23\xb2\x1f\x4f\xc9\x7d\x8d\x1f\x17\x7a\xe3\x47\x4f\x35\x7e\xdc\x26\x05\x9f\x69\x9b\x47\xad\xf4\x93\x1b\x25\xee\x19\xe5\x29\xb2\x73\xec\x9b\xed\x1c\x07\x3a\x3b\xc7\x61\xc2\xce\xf1\x58\x1b\x14\x6a\x64\x12\xaa\x8e\x99\xd1\x62\x64\xee\x78\x58\x43\x63\xc7\x5a\x64\xec\x58\x17\xc6\x8e\xa2\x3c\xbd\x04\x11\x7b\xc0\x4a\x44\xb6\x8f\x8a\xfc\x93\x77\xef\x4b\x2f\x5c\x23\xd1\x10\x9b\x36\x27\x70\x45\x59\x06\x91\x1b\x53\x7c\xa9\x84\x41\x64\x64\x32\x39\x4b\x19\x44\x0e\xbe\x21\x02\x54\x21\x93\x47\x73\x10\xa8\xad\x56\x26\xbb\x26\x1b\x84\x27\x68\x8e\xd2\x94\x3c\xe5\x2b\xf7\xf8\xe4\x9a\xf8\x6a\x05\x26\xbb\xdb\x91\xd3\xcc\x6a\x11\x0e\x22\xae\x67\xaf\xca\xea\x3e\x3a\x72\x35\x80\x5e\xdc\x3c\x32\x84\x57\xe4\xa6\x7b\x67\xb7\x13\x22\xe5\x7b\xc5\xb0\x1a\x44\x26\x97\xd1\x6d\xe5\xe2\xcf\x6f\x0f\x4a\x35\x50\x4d\x30\x25\x81\xf7\x1a\x1e\x28\xf5\x4d\x23\x44\x71\x3b\x88\x9e\x21\x58\x54\xca\x2c\xb2\x2f\x45\x90\x1a\x24\xab\x7d\x5c\x01\xb2\x51\xa2\x9b\x2d\x40\x36\x9a\x56\xe6\xdb\x48\x66\x9a\x57\x66\xda\x48\x66\x5a\x57\x66\xda\x68\x19\xad\x2b\x8b\xd8\x48\x1a\xfd\x9e\x65\xdb\x48\x1a\x4d\x2b\xf3\x6c\x24\x07\x8f\x68\x23\x39\xb8\x9f\x8d\xe4\xe0\x4f\xb0\x91\xd4\xb4\x59\xc0\x46\x52\x27\x96\x36\x4b\xfd\xe9\x2b\x74\x9d\x9f\x2d\xf5\xe7\x19\x20\x63\xbe\xd4\x5f\xe4\x21\xc3\x4c\xa9\xff\xb0\xa8\xd4\x7f\x93\x1e\xd0\xc6\x71\x89\x10\x2d\x6f\x14\xa9\xff\x46\x09\x44\xb5\x51\x6c\x1a\x37\x0f\x17\x88\xaa\x17\x05\xa2\xba\x57\x4c\x2a\xbd\xc5\x72\xc6\x1d\xbb\xbf\xc5\xa4\xc1\x28\x13\x25\x44\x41\xd2\x5a\x12\xc6\x00\xb5\xff\x1c\xce\xc2\x49\xd8\xc7\x84\x07\x53\x19\x7c\x1e\x2d\xe7\xfb\x84\xd3\x5e\xc5\x87\x47\x42\x0b\x00\x6f\xa2\x7c\x6f\x85\xcd\xa3\xe7\x94\xe1\xde\x02\x5a\x1f\xdd\x0e\x38\x5e\xab\xde\xa8\xd4\x49\xdb\xf9\xf5\xe9\x33\x7e\x7f\x96\x3e\x94\xca\xd5\x17\x4f\x7c\x16\x17\xaa\x5c\x3a\xfd\x8e\x7c\x77\x50\x83\xff\x4a\x65\xaf\x5c\x82\x7f\xbf\x8b\xde\x5a\xed\xf2\x77\x76\xb9\xf4\x33\xfc\x3a\x7e\xd2\xae\xe0\xef\x54\xee\x28\x33\xe4\x28\x97\xfe\x05\x95\x1f\xcb\xe5\xff\x2e\x95\xc7\xdf\xf0\xfe\xb9\xf9\xfd\x2e\x1a\xcf\x17\x98\x91\x65\x35\x18\x4f\x17\xc0\x7b\xdc\xdd\x2d\x45\x74\x89\x37\x40\x77\x7a\x5c\x6c\x1d\xbd\x6f\x05\x11\x7f\xdc\x78\x73\x6d\x27\xa6\x29\x9a\x98\xc0\x72\x11\x65\x52\x91\xbd\x4a\x51\x39\xba\x78\xac\x5f\x57\x30\x0f\x86\x65\x30\x59\x11\x54\x79\x78\x50\x45\x82\x5b\x3b\xf1\x5a\xb5\x86\x47\xdd\x70\xeb\x4b\xb1\xa5\x2b\xf9\xc7\xe7\xed\xa4\x2a\xf2\xa1\x22\xf4\x24\x13\xcf\xc4\x8f\x30\x13\x6f\x9c\x78\xac\x48\xf5\x36\xa2\xf9\xc0\x8f\xac\x9d\x07\x29\xc7\xbb\xaa\x37\xa3\x4c\x1b\x4b\x69\xf8\x84\x3e\x37\x96\xb0\xa0\xbf\xd0\x48\xe6\x4c\x54\xf9\x73\x24\xaa\xfc\x45\x88\x2a\x57\x05\x44\x95\xe7\x45\x44\x95\x2b\x59\x54\x79\x74\x44\x1f\x3d\x77\xb6\xa3\xee\xb1\xfe\xf0\xe6\x0f\xa5\xf6\x9b\x6c\x71\xb4\x3d\x45\x92\xd7\x09\xfd\x65\xe4\xa4\x58\x15\x9f\xfe\x4b\x84\x9d\xf9\x97\x81\x40\xa6\x02\x24\x37\x16\x20\xcd\x1b\x91\x1a\x28\x4b\x76\x30\x62\x6e\x44\x20\xe5\xc4\xf1\x61\x69\x62\xf0\x11\x91\xf2\x3d\xa4\xd4\x29\x15\x6c\x37\xae\xbe\xf2\x5a\xaf\xae\x77\xd7\xc8\xca\x19\xbb\x9e\x16\xfd\xfe\x95\x1a\x42\xf3\x79\x68\x29\x35\x35\xfe\x6a\x1a\x0e\xc2\x4f\x1a\x0c\x85\x42\x24\xb0\x62\x43\x81\x2e\x92\xfb\x0d\x7a\x90\x1a\xf4\x40\x37\x68\xd8\x90\x4e\x34\xef\xa3\x48\x70\xd1\x18\xc4\x3a\xb0\x49\x52\xb2\x3b\x89\x24\xbb\x93\x2c\xe9\xf4\xcf\x54\x3a\xbd\x52\x44\xbb\xbf\xa0\x68\x77\x22\x36\xd3\x55\x6c\xa3\x84\x5d\xb4\x89\x64\x4a\x85\x3d\xb4\x21\x29\xf1\x0d\x8c\x8e\xe9\xa2\x9b\xf7\x3d\x97\x10\x4f\x52\xde\xa4\x52\x59\x46\x78\xb9\x66\x67\x19\xa4\x7a\x10\xaf\x82\x7d\xe4\xea\x9d\x94\x5c\x7d\xca\xa7\xb5\x23\xa6\x75\x1a\x4d\xeb\x34\x4b\x60\xfe\x0b\x0a\xcc\xd5\x59\xfd\x19\x67\xf5\x86\xd7\xd7\x15\xf5\xdd\x44\xf5\xdd\xec\x57\x5f\xb4\x1e\x6a\x0d\x56\xb5\x71\x06\xb6\x75\x39\x2e\x79\x42\xf3\x18\x55\x53\x6f\x64\xd6\x71\x9c\x51\xc7\x5f\x23\xa9\xd0\xa1\xba\xc3\xb0\xce\xdc\x28\x8d\xf1\xf5\x23\x94\x56\xc5\x46\x92\xbd\x24\xa6\x45\x07\x93\x5d\xcd\x0d\x13\x05\xff\x94\x6b\xa7\xf1\x13\x3b\x49\x7f\x36\x61\x0c\xb6\xe4\x27\x74\x5b\xfb\x8b\x51\xe7\x78\x4b\x33\x54\xac\xcb\xd6\x6b\xfc\x12\xbf\x3a\xaf\x2b\x1b\x6a\x2c\xb2\xe1\xd4\xb3\x09\x7e\xf0\x53\xce\x10\xb4\x70\x83\x0f\x02\x6e\xf0\x03\x5a\x98\xa4\xe0\x06\xff\xb4\x56\x32\xdc\xe0\x43\x2c\x96\x48\xde\x49\x26\xb8\xc1\x47\x46\x76\xfc\xd6\xfc\x28\xe0\x06\xbf\xa1\x62\xe7\x83\xfd\xf1\xea\xb7\x6b\xe7\x03\xfc\x93\x82\x1b\x60\x62\x0c\x37\xc0\x27\x06\x37\x58\xc1\x85\x19\xad\xb0\xd5\x83\xc2\x0d\x7e\x42\xb8\xc1\x4f\xb9\x70\x03\xfa\x69\xff\xe5\x64\xb4\x7d\x28\x4b\x4e\x5d\x76\xb7\x92\xbf\xe6\x94\xa0\xb9\xe0\x68\x1f\xc9\x4e\x8a\x43\x7e\x42\xa0\x24\x73\x14\x9b\xfa\x74\x9d\x41\xfc\xd0\x73\xc6\xf1\x43\xdf\x19\xaa\xe8\x87\xdf\xf7\xed\x68\x8e\xc6\x64\x6e\x24\x43\xbe\x6e\x1a\xa7\xcc\x66\x7d\xdb\x38\x63\x84\x08\x15\xe1\xba\x5e\xe1\x2e\x1c\x3e\x52\x1f\x9a\xe2\x60\xb9\xaa\x91\x9f\xaf\x29\x47\xc8\xa3\xb5\x45\xa1\xda\xe0\xd7\x38\x98\x41\x96\xdf\x45\x88\x36\xd7\x43\xdf\x9e\x7a\xb0\x6b\x14\xbc\x8d\x55\xc8\xe8\x26\xcf\xf9\x29\x13\x68\xc2\xb9\x9d\x08\x6a\xb2\x82\x9e\xf8\x9e\xe3\x79\xf7\x04\x9b\xc4\xf5\xc9\x70\x93\x36\xad\x51\x06\x9c\xf8\x5e\x71\x30\x07\x1d\x49\xe0\x39\x79\x65\xe8\xf9\x89\x18\xd9\x9c\x7c\x32\x52\x25\x2f\xef\xb6\xbe\x4f\xe6\xe3\x3d\x32\x4b\x5e\xac\xf3\xb2\x4a\x74\x22\x9d\x8b\x4e\xfe\x5c\x50\x31\x0c\xb5\xfe\x87\x13\xaa\xb3\xc7\x84\xe4\xe5\x55\x26\x24\x37\xf3\xf1\x1e\x99\xa5\x09\xc9\xcb\x2a\xa3\x82\x72\xab\x45\x5e\xea\xcc\xf5\x87\x68\x14\x44\xf5\x07\x85\xa6\x83\x16\xc3\x60\x7a\x5c\x05\xe8\x39\x8b\x2a\x35\xf9\x05\x42\xe8\xe7\xa7\xc7\x8d\x9f\x49\x4f\x4e\xea\x7a\x8d\x5a\x73\xc1\x39\xa5\xae\x97\xba\xdb\x35\x68\x20\xd3\x45\x05\x9b\x39\x04\x7e\xb4\x3f\x71\x47\xef\x82\xad\x13\x29\xc7\x95\xe4\x16\x25\xe5\x1b\x4a\x1a\xa1\x69\x6a\xbe\xb2\x45\x8f\xaf\xd6\xa7\xc6\x67\xea\x5d\x95\x5f\xb9\x0b\x54\xbe\x51\x04\xd2\x42\x46\x20\xd1\x34\x29\x29\x9f\x1a\x78\x9d\x3d\xd2\x6c\xd2\xaa\xe7\x51\x31\x43\x65\x1d\x41\x8a\x76\x70\x4c\x64\x97\x59\xc7\x48\xa4\xb8\x58\xb2\x0f\xd1\xea\x17\x94\x20\x0a\xe7\x47\x2e\x50\x82\x97\xad\x12\x12\x44\x7d\x77\x84\xb1\xb0\x42\x6a\x28\x3a\x4e\x31\xb8\xbf\xfe\x91\xfc\xf5\xf0\x8f\x6f\x3e\xc5\x5f\xf7\x53\x0c\x36\x9f\xc2\x3c\x16\x3b\xc9\xed\x0e\x32\x2b\xda\x93\xe1\x85\x3b\xd2\xf4\x5d\xf3\x18\x25\xeb\x17\x58\x1e\xdc\x13\x03\xa5\x52\x6d\xb6\x50\xfa\x3a\xd7\xc0\x63\xec\xb7\x26\x7d\x68\x93\x57\xb0\x2b\x42\xce\xf7\x84\x11\x27\x14\xee\xcb\xb0\xfe\xaa\xe1\x7f\xe4\x89\xd9\x87\x07\xec\xa5\x78\xc0\x82\x15\xa7\x07\x18\xc2\xf2\x7b\x09\x23\x9c\x71\x92\xae\x27\x98\xbe\x59\x34\xd4\xe8\x57\xe3\x57\xe0\xf0\x52\xec\xe2\x9c\x97\xec\x8b\x92\xf3\xa8\xe4\xdc\x54\x32\x8f\x31\x94\xfb\xbf\x7d\x56\x94\x35\xbc\x87\xb3\xfa\xac\x76\x8b\xb0\x93\x45\xd8\xc7\x20\x9f\x7d\x54\xda\x35\x32\x90\xf4\x83\xcd\x8a\x77\x3a\x5d\x78\x6e\xa3\xd1\xd6\x06\xfd\xec\xa3\xf2\x94\xdd\x70\xe4\x47\x9b\xbc\x39\x3a\x92\x04\xb8\xf4\x40\x18\xa6\xf6\x71\xea\x1e\x55\xe8\xca\x88\x80\x7c\x23\x09\x83\x51\xf0\x32\xf2\x9c\xa1\x96\x98\x6c\x8e\x3c\x7d\x74\x52\x71\x13\x2b\x92\xdc\x44\xc8\xd2\x5a\x12\x93\xfb\x2b\xb6\x94\x5d\x5f\x4a\xc6\x9b\x53\x21\x9d\x87\x71\x6a\x1e\x36\xd5\x98\x3a\x60\xf3\xba\xb4\x9b\x63\x4f\x9e\x0d\xa5\x79\xa9\x87\x6a\x2e\x54\x06\xc1\x76\x28\x19\x6c\x1d\xdb\x25\xf2\x96\x23\x52\xf6\x07\x27\x7e\x88\xc0\x89\xef\x14\x70\xe2\x87\x04\x38\xf1\xdd\x37\x3a\x18\x5f\xed\x8f\xb1\xf9\x90\x8f\xb1\x21\x3f\xd2\x7f\x13\x71\x0d\x49\x8f\xf4\x65\xa4\x4b\xda\xc7\x37\x4f\x19\x19\x3c\x5d\x5a\x2c\xe2\xbe\xe1\xd5\x24\x05\xc2\x09\x53\x29\xd3\x54\xca\x4d\x2a\x65\x96\x4a\x99\xa7\x52\x16\x1a\x78\xcf\xd2\xe1\xd6\x9f\x4c\x19\x60\xd3\x40\x83\x29\x50\xcf\x3a\x01\xea\x79\x16\x81\x7a\x9e\x49\xa0\x9e\x8d\x6a\x5d\x19\x67\x3a\x96\x32\x6d\x19\x40\xe7\x96\xfd\xd1\x82\x44\xa8\x0d\xe5\x99\xd1\x86\xf2\xdc\x84\x1d\xba\x40\x8c\xd0\x25\xfe\xf3\x12\x31\x42\xaf\xf0\xd7\x6b\xe7\x45\x8d\xbc\x61\x8d\xbd\x65\x7f\xde\xa9\xd8\x20\x7e\x20\x65\xe0\x80\x6c\xf2\xde\xa9\x91\x0f\x29\xc8\xd1\x47\x56\xdf\x27\xa7\x74\x60\xe1\xf8\x0e\x70\x9e\xed\x12\xf9\x8c\x09\x74\x0e\x78\x4a\x73\x50\x15\x96\x6b\xd4\x7b\xe9\x30\xa5\x57\x9c\x64\xc3\x8a\x5e\xa0\xc4\x55\xe4\xe0\x60\xa2\x9b\x28\x81\x1f\x31\x24\xcc\xad\x64\x96\xac\x64\x9e\xaa\x64\x95\x74\xd4\x5e\x2b\x88\x3d\x9a\x18\xb1\x47\xff\x7c\x1c\x80\xd1\x0f\x7f\x2c\xc0\x28\x2b\x7a\x86\x11\x60\xb4\x8a\xe5\x8e\x40\x9e\x15\x73\x79\x7f\xa3\xc5\x7f\x15\x02\x2a\x65\x47\xf8\xd0\x02\x95\x56\x2a\x50\x69\x74\x3f\xc7\xf7\x74\x5c\x8e\xa7\xb8\xbc\x8f\xdd\xe1\xcb\x80\x69\x83\xf3\xfb\x95\x12\x2b\xa0\xc8\x34\x4d\x33\xa7\x49\x99\x96\xac\x41\x7d\xf3\xb4\x18\x5d\xe8\xaf\xee\xeb\x42\x5f\x42\x75\xbd\x8b\x21\x62\x8b\x08\x37\x36\x10\xbf\x8e\x9d\x21\xfc\xa4\x2e\xf6\x47\xfc\xc7\x31\xf5\x83\xc6\xa0\x64\x13\xfc\x75\x4c\x7f\x86\x88\x2a\xab\xd3\x9f\x53\xfc\xc9\x52\x6f\xf0\xe7\x33\xfa\x13\xcd\xb0\xb7\xcf\xe9\xcf\xb9\x04\x31\x5b\x3d\x3a\xaa\x4c\xef\x7a\x3b\x17\x55\x76\x9b\x2e\x76\x5b\x10\x55\x76\x91\x2e\x7a\x41\x8b\xd2\x9b\xe0\x72\x93\x85\x6e\x7a\x93\x2e\xfb\xa6\x00\xc0\xeb\x6d\xba\xd8\x5b\x1e\xd6\xd5\x5f\xce\xd9\x51\x6b\x2a\x7b\x99\x2e\x7b\x19\x97\x7d\x9d\x39\x4b\xaf\xd3\x65\x5f\xc7\x65\x11\x0e\x8b\x5f\xdc\x18\x8d\xf6\x55\xba\xf8\xab\x74\x71\x63\x54\xda\x97\xe9\xe2\x2f\x69\x71\xb6\xa2\xdf\xc3\x06\xc0\xf2\xaf\xfb\xe6\xf9\xfe\x94\xae\xe2\x93\x54\xc5\x0f\x14\x45\x94\x53\xc7\xe7\x74\x1d\x9f\x0b\xa1\xeb\x56\x8f\x88\xae\x5b\xdd\x0f\x5d\xb7\xfa\x13\xd0\x75\x9a\x36\x0b\xa0\xeb\x74\x71\x1f\xcc\xe8\x3a\xfa\x8a\xac\xf3\xd0\x75\x3c\x03\x59\x17\x40\xd7\x89\x3c\x64\x9d\x89\xae\x5b\x17\x45\xd7\xbd\x4f\x0f\xe8\x3d\x73\x4a\x90\x05\x94\x3b\x4f\x7f\x9d\x73\x2d\x50\x6e\xc1\x85\x6f\xe7\x99\xa6\xf4\xa7\xe9\x4e\x9c\x3a\x2e\x19\x50\x53\x7a\xa0\x2b\xe9\x9f\x11\xfb\x33\xce\xb5\xaf\x3f\x4b\xd7\x76\x46\x6b\xdb\xb2\xda\xb6\xac\xb6\x2d\xab\x8d\x19\xdd\x67\xc1\xdd\x06\x85\xe1\x6e\xbf\xf4\x17\xbd\x97\x78\x88\x14\x06\xbc\x85\x31\x2a\x38\x81\xe4\x0a\x25\xc0\xdb\x26\x07\xf0\xf6\xf6\x7f\x18\xe0\xed\x12\x66\x64\x12\x03\xde\x26\x42\xc6\xb1\xb6\xc9\x0f\x5c\xf4\x31\xd1\xe1\xbc\xd6\xf9\x78\x37\x5f\xc6\xbb\xb5\x9d\xd7\x7f\x3a\xc8\xad\x8d\x7e\xa0\x14\x90\xdb\x4b\x8c\xf0\xeb\x4c\x54\x90\x5b\x34\x07\x8c\xb9\x70\x1d\xed\x04\x48\xb9\xa8\xb2\x3c\x32\xaa\xc3\xc1\x57\x68\x07\xbe\x77\xea\x36\x10\x1b\x09\x18\x9c\xcb\x61\x70\x13\x58\xe8\x97\x96\xc0\x81\x7d\x2c\x8c\xa5\x0a\x8b\x06\xb5\x53\xb8\x1c\x4f\x41\x89\x79\x14\x30\x45\x01\x56\x1e\x03\x58\x71\x01\xb5\x67\x02\x4f\xc9\x9e\x95\xba\x94\x0a\xc7\x94\x13\xc7\xa5\xe0\xa9\x38\xe5\x7b\xc7\x8d\xc1\x53\x26\x84\xd1\x6d\x64\xa6\x4a\x4c\xe3\xce\x47\x32\xdd\xc6\xa1\x69\x4d\x95\x18\x63\x64\xa6\x2a\x41\xd7\x1c\xf8\x21\x5e\xe5\xe2\x4d\x5e\x09\x73\x67\x03\xde\x64\x4e\x5e\x91\xa9\x4d\xde\x18\x35\x4c\x0b\x9a\xa1\xb2\x24\x6f\x9d\x65\xe5\x86\x22\x4d\x6e\x72\x90\x26\xaf\x72\x7a\xaf\x45\x9a\x9c\x0a\xa4\xc9\x05\x1c\x60\x69\xa4\xc9\x39\x4a\xc9\x63\xa4\xc9\x69\xcc\x9f\x86\x05\x91\x26\x67\x6c\xc3\xbf\x6b\x9e\x09\xa4\xc9\x3b\x94\xd2\x9d\xda\x67\x57\xef\xae\x9d\x53\xf8\x27\x85\x34\xc1\xc4\x18\x69\x82\x4f\x0c\x69\x12\x1e\x1d\x85\x11\xd2\x24\x63\x81\xdf\x03\x69\xf2\x0a\x91\x26\xaf\x8a\x38\xb6\xe8\xca\x8e\x2d\xba\x31\xce\x23\x70\x7a\xf1\x9b\x0e\x3c\x28\xa0\x8f\xf7\xce\xab\x4c\x24\x82\x7a\x11\x45\xf2\xe4\x10\xf1\x7c\xce\xfb\x7b\xc2\x11\x52\x95\xca\xa8\x84\x8f\x50\xad\x8c\x49\xf8\xb0\x27\x24\xe1\x93\x93\x53\x42\x00\x12\x3e\x15\x57\xbf\xe7\x64\xdd\x16\xcf\x9a\x04\x0d\x7c\xce\xeb\x6d\x0c\x19\xf8\x5c\xbc\xbf\x39\x59\xb7\xc5\xb3\xca\x3a\xfd\x9c\xac\x69\x95\x7e\x91\x1e\x0b\x8d\xfe\x0a\x8d\xcc\xb9\xce\xf5\x75\xf2\x4c\xd4\xe8\xe9\xc3\x58\x4b\x38\x65\x3a\xf3\xb1\xac\x33\xa7\x69\x52\x52\x81\x13\x2d\xb3\xd1\x5c\xbf\x1d\x53\xc9\x6f\xc7\xfb\x1c\xed\xd3\x34\xd6\x96\xc7\xc5\x48\x37\x1a\xbd\xe8\xf5\x1b\xa1\x71\x4e\x9e\x69\x3a\x8d\xf3\xac\x88\xc6\x39\x4c\xf8\xbe\x40\x37\x0b\xdc\x81\x61\x37\xfa\x05\x07\x6b\xb2\x27\x6f\x1f\xbf\x27\x1f\xef\xab\x53\x7e\x03\x93\xc8\x75\xca\x37\xb1\x4e\x99\x4b\x56\xb5\xb5\x7e\x23\x69\x42\x49\x40\xe9\x4a\xfb\x67\xec\x40\xa6\x9f\x74\xf6\xd1\x8f\x14\xaf\xfd\x2c\xed\xf4\x6b\xaa\x9d\x0e\x15\xed\xf4\x1b\x54\xc2\x0e\x92\xf8\xec\x41\x54\xe1\x20\x0b\xf8\xfb\x06\x81\xbf\x6a\x7d\xaf\xb1\xbe\x22\x04\x4b\xde\x8c\xbf\x61\xeb\x75\x92\x52\x5a\x4a\x77\xfe\x4b\x66\x4a\x7e\x74\x24\x91\xe4\xf4\x93\xfc\x90\xf8\x24\x05\x15\x98\x6b\x89\xb8\x47\x05\xe6\x17\xe7\x07\xad\xfa\xf2\xcb\x03\x6a\x2f\xdf\x42\x33\x0f\xa9\xbc\x7c\xcb\x66\xe0\xc7\xc4\x0c\xa4\x55\x97\x13\xbb\xf9\x63\xae\xe6\x12\x7a\xf7\xe3\x7e\x8a\xcb\x8d\x4d\x5e\xa2\x6a\x2e\x19\xd8\x7d\x18\x2d\xa9\xe1\xbe\x6b\xf4\x6d\x7a\x4d\xdd\x17\x40\x91\x06\xd1\xab\xbb\xac\x50\x2b\x31\x44\x64\x94\x44\xe0\x8f\xa2\x51\x8e\xb2\x36\xce\x5b\xc3\xc6\x29\xda\x99\x6d\xaa\x33\xa3\xc7\x9b\xa1\xf1\xfd\xf4\xd0\xa7\x91\x1e\x7a\xab\xe8\xa1\x4f\x13\x0a\xdf\xed\xb7\xe9\xa1\xc3\xfd\xd5\xd0\x09\x9f\x0e\x09\x5d\x73\x4a\xa7\xdc\x4b\xa5\xf4\x53\x5a\xdd\x41\x2a\x65\x98\x4a\x19\xa5\x52\xc6\x1a\x5d\xf0\x24\xa9\x0b\x0e\x75\xba\xe0\x69\x21\x5d\xf0\x4d\x11\x5d\xf0\xcc\xa4\xc9\x9d\x33\xcd\xea\x82\xfd\x59\xa2\x0e\x77\x85\xda\xdc\x28\xa4\x35\xfd\xb3\xdd\x5f\x91\x7b\x4b\xbd\xe3\x9e\xa6\x54\xb9\x67\xb4\xc6\x66\x57\xd1\xd3\xca\x2a\x29\x20\x24\x92\x3a\xdb\x7e\xae\xba\x75\x90\x54\xb7\x0e\x73\x8b\x8c\x92\x45\xc2\x42\xca\xb0\xc1\xfd\x7d\x46\xf4\x8d\x7a\xdb\xf3\xc7\xd1\xdb\x5e\xfc\xb1\x7a\xdb\xee\x7d\x34\x9a\x61\x31\x7d\x6b\x56\xdd\x06\xc5\x62\x68\x74\x0c\xb1\x8d\x75\x7d\xe3\x48\xd7\xd7\x8d\x75\x7d\xb1\x8f\x88\x7e\xe4\x23\x62\x10\xab\xf8\x86\xb1\x5e\x6f\x24\x69\xf0\xc2\x47\xd7\xe0\xe9\x0d\xa8\x73\x35\x78\xfa\x48\xb5\xc5\xf4\x5a\x46\x3f\x0b\xf9\xda\x3f\xa3\xaf\x85\x02\xda\x3f\x63\x2c\xeb\x22\xbe\x21\xf4\xc2\xf6\x5c\xd5\xa1\xde\xa8\xbf\x80\xf6\x2a\x7c\x44\xed\x55\x78\x3f\xed\x55\xf8\x27\x68\xaf\x34\x6d\x16\xd0\x5e\xe9\xfc\x87\x98\xb5\x57\xf4\x15\xb0\xe9\x39\xda\x2b\x9e\x81\x4c\x0b\x68\xaf\x44\x1e\x32\xcd\xd4\x5e\x4d\x0b\xc5\x88\x4a\x7a\x51\xf0\xa8\x17\x05\x8d\x12\x6a\xcc\xb9\xe0\x99\x5d\xcc\x51\x77\x57\x89\x16\x90\xfc\x96\xe8\x61\x5c\xc9\xe0\x46\xd7\x68\x94\x80\xca\xae\x1f\xa3\xfb\xc7\x18\x65\xac\x2a\x65\xd2\xb5\xa3\x66\x60\xaa\x30\x25\x01\xd5\x60\xf9\xed\x0c\xaa\xdb\xec\x76\xd4\x0c\x4c\x3b\x96\x6c\x27\x4f\x91\xa8\x87\x2e\x20\x76\x27\x16\x1c\xa3\x97\xb3\xf8\x29\x4b\x23\x48\x65\xfb\xba\x89\xdf\xb0\xe9\xce\xd3\x01\x76\x11\x95\xa3\x2b\xbf\x65\xe5\xf3\xb5\x7e\xdd\x42\x5a\xbf\x31\x9c\x8f\xfd\x33\x77\x56\x44\xd7\x77\x11\x1f\x9a\x91\x5b\xec\x0b\x7d\x3c\xb1\x0b\x67\x58\x19\xb0\x78\x62\x03\xbe\xbd\x2e\x9d\x11\xfc\x46\xc1\xfd\x40\x6c\xa2\x97\xb9\x7a\x83\x97\x76\x13\x98\x79\x2f\xf6\xe3\xb6\x76\x22\xb3\x00\x0f\xad\x05\xb4\xe6\x76\x92\xb1\x9d\x5b\xdd\xc0\x24\xd7\x84\x27\x3b\x01\x7e\x22\xc8\xb3\x36\xaa\xb5\x3a\x5a\xdf\x01\x5f\xbf\x80\xaa\x3d\xec\xcd\xc8\xdd\x22\x89\x00\x04\xa8\x3f\x04\x1e\x3f\xec\x74\x70\x9c\x4b\x8e\x7d\x9a\x67\x49\xd7\x69\x50\x8d\x1b\xdb\x3a\x8c\xbb\xbb\x6e\xad\x1b\x68\xa4\xe7\xe9\xe8\x24\x2f\x42\x68\xcd\xd3\xaf\x7d\x8c\x7e\xc7\x81\x5a\xc0\xbd\x70\x5b\x1e\x1a\x59\x6a\x47\xbb\x6b\x1e\x3d\x11\x3e\x10\x1d\x8c\x20\x59\x6b\x7a\xa9\xd9\x11\x11\xe0\xb9\x4b\x42\x60\xc8\xbc\x2a\x4e\x88\xe2\xe3\x12\x7b\xbd\xfd\xbe\xd6\xc2\xdf\x75\x8c\x01\x51\x71\x58\x2e\xbb\xc1\x92\xd8\x53\xb9\x4d\xda\x65\xf1\x66\x27\x68\xd4\x57\xe8\xcf\x33\x68\x5d\x5d\x37\xd2\xad\xef\x61\x2a\x39\x15\xa6\x92\x37\xfc\x47\x0d\xbe\xe0\xb6\x46\xb6\x75\xfc\x5b\x67\xa6\x93\xe3\xc8\x56\xf2\xee\x2e\x32\x92\x7c\x95\x61\xa2\x19\x5b\x47\x9e\xb9\x93\x36\x7c\xd3\xbb\xbb\xab\x1a\xb9\xb8\x26\xb7\x92\x1f\x81\x80\x56\x96\xb4\xbd\x34\x57\x8b\x67\xff\xf6\xa4\x86\xff\xb2\xce\x95\xe1\x1f\xfc\xf1\x1f\xe8\x40\x93\x19\x6c\xce\xec\xc8\x2c\xb3\x0b\x6d\x5e\x12\xf4\x4f\x30\x96\xbd\x88\xa2\xdb\x53\xd9\x7d\xe8\xd1\x51\xf4\xa8\xe4\x6b\x5d\x29\x8f\x15\x58\xc9\x4f\x94\x14\xa2\x54\x53\x4e\xbc\xaf\x5f\x5f\x37\xae\x2a\x75\x82\xfe\x49\x27\x89\xf6\x27\x6a\xfb\xd1\xe3\x44\x6d\x5f\x79\xa4\xf5\x2b\x29\x44\xa9\xa6\x92\x78\x2f\xb7\xdf\x73\x7a\x77\x77\x63\xe0\xa0\xfb\x77\x77\x13\xae\x25\x7c\x69\x54\x0e\xd1\xf3\xca\x93\x6c\x54\x31\x32\xe0\x1b\xe7\xf5\x3d\x54\x42\x71\x55\xe4\xad\xf3\x26\x19\x1d\xf0\x9d\x94\xd4\xa5\x58\xe3\xd7\x8a\x7e\xe8\x5d\xc1\xe8\x80\xaf\x73\x84\xf2\x83\x58\x28\x3f\x88\x85\xf2\x6f\xf7\x8b\xd7\x17\xa6\x42\xf5\xbd\x36\x86\xea\x0b\x0d\x51\xfa\x2e\x92\x92\xbe\xcb\x58\xa3\x20\x85\xd9\x9b\xeb\xc3\xec\x85\x4a\x84\xbd\x0f\xd2\x64\x3d\x58\x84\x3d\x89\x39\xf6\x76\xa8\xa0\xbb\x6f\x7c\x3d\x4d\x90\x3c\xda\xeb\x8f\xce\x99\x2c\x6c\xfb\xa0\x89\x1d\x86\x13\xc7\x8d\xe0\x60\x92\x4b\x62\x09\x5d\x42\xc6\x12\xf3\x34\x32\xee\x53\x4c\x31\xd9\xda\x92\x4c\x56\x33\xb4\xbe\x45\x4f\x8c\x5a\xa3\x66\xdf\xdd\xd5\x76\xc9\xc9\xaf\x49\xe6\xfc\x1f\x81\xf2\x86\x7b\xe9\xe8\x88\xff\x48\x9c\x96\x2c\xa2\xb0\xf7\xc4\xda\x3e\xb5\xce\xcb\x75\xdb\xae\x78\x82\xc9\xf6\xa9\x89\x45\x6e\xb0\xbf\x68\xc1\x3e\x76\x6c\xbf\xd5\x3e\xb1\xfd\x44\x66\xf4\xfe\xb0\x5f\xe4\xbe\xea\xdf\x5e\xc4\x4a\x59\xd3\xd7\x33\x2e\x3a\x20\x38\xa2\x2b\xbc\xb5\xae\x26\x1c\xe4\xec\x50\x83\x9b\x08\xa8\x88\x29\x89\xb5\xa8\x93\xdb\x6b\x47\xc9\x6e\x36\xb8\x67\xb9\xd5\xf3\xc1\x24\xe8\xba\xd4\x3f\x7d\x43\xa4\x30\x59\x07\xa4\xec\x24\x91\xbf\x7c\xdf\x4b\x51\xbf\x16\x88\xd6\x81\xa3\x3e\xba\xde\x2c\xfb\xa9\x17\xeb\xfd\xbf\x6d\x45\x2a\xe7\x85\xda\x06\x94\xad\x37\xbc\x08\x57\x70\x8f\x18\xe8\x63\x8b\xdd\xf6\x36\x33\x8c\xa3\xf3\x6c\x5c\x51\x12\xae\x66\x45\x67\x20\x6f\x55\xe9\x0b\xa0\x74\x68\xac\x09\x3b\x45\xfb\x98\x84\x4e\x25\xf7\xc2\x21\x0d\x60\x9a\x14\x5c\x59\x5f\x71\x5d\x35\x5c\xe0\xd3\xd0\x9f\xb2\xc7\x59\xc0\x14\x0e\x4b\x1a\x19\x25\x9b\xa4\xbe\x28\xee\x92\x8b\x75\xa5\x9e\xea\xca\x72\xf1\xed\x3d\x49\xb8\xa4\xa7\x5d\x51\x9b\xa1\xeb\xff\x5b\xda\xf1\x13\xfe\xbb\xd5\x36\x98\x7f\xe9\x7b\xd5\x4f\x22\x0c\xff\x1c\x6e\xd5\xcf\x33\x38\x1c\xba\x8c\x71\x13\x4d\xb7\xa3\x38\xe7\x86\xd6\x2f\xbc\xd1\x63\x75\x00\xf1\x1a\x8f\x73\x34\x7c\xd3\x96\x23\x1b\xe0\x83\xfc\xbb\x3b\x0b\xee\x13\x95\xd0\x8d\xc4\xc6\x35\x54\x9a\x67\xed\xcc\xf8\x2c\x82\x09\x98\x75\x3d\x6b\xc3\xda\x80\xf3\x76\x36\x84\xfd\xe1\x9b\x55\xf9\x5e\x8e\xf2\xde\x07\x6a\x6f\x67\x5f\xb5\xaf\x6d\xa0\x94\xbe\x00\x83\x3a\xe9\x5a\x79\xfb\xfe\x8f\xef\x8e\x40\xd8\x7c\x4a\xc5\x7b\x3c\x8b\x29\x06\x89\x5a\x40\xd5\x07\x52\x0b\xa9\xbb\x3d\x3e\xb2\xfc\x27\xdb\xa7\x32\xc3\x27\xce\xf3\xe6\xa2\xf5\x39\xf3\x4c\x47\xf9\xf8\xb6\x6e\xa7\x0e\x73\x4d\x56\xd6\x1f\x77\x13\x63\x32\x69\x61\x64\x63\x6a\x76\x85\xfe\xae\xc1\xa7\x97\x2a\xdb\xa8\x21\xf5\x58\x35\xf1\xc5\xa1\xbb\x27\xec\xc6\x67\xdd\x15\x26\x11\x13\x8c\xfc\xc8\xbb\xc1\xb4\x77\x50\x74\xfd\xe8\xa6\x44\xb7\xaf\x50\x83\xd4\xc0\x7f\x60\x78\x2c\xd1\xfe\xbe\x4e\x53\x2b\xf5\x46\x94\xa4\xbb\x0c\xb5\xf5\xea\x66\x90\xd7\x51\xc1\x4a\x71\xf2\x68\x65\xd4\x23\x12\x8f\xa2\xd9\x07\x86\x8b\xff\xf4\x28\x2a\x54\xfa\xce\xb0\x19\xcf\x9d\xf4\x77\xc7\xf3\xe3\x4c\x76\x3b\x2f\x16\x95\xc9\xeb\xbc\x64\x30\x9b\x17\x68\x73\x48\x03\x6d\x8e\x68\xa0\xcd\x31\x15\xcf\xa0\x3a\xbb\x1a\xce\xda\xe8\x43\x24\xd2\x46\xd2\x44\x16\xdb\x92\x2a\x24\x25\x27\x7b\xf5\xe0\xf9\x13\xfa\x08\x9f\x06\x18\x3e\x0c\x7f\x30\x35\x9a\x93\xde\x18\xcd\x49\x67\x0e\x72\x91\x73\x54\x2f\x2e\xd0\x6c\x74\xe9\x94\x6e\x83\x59\x58\xa2\x96\xb0\x5a\xed\xe4\x1a\xb3\x45\x3a\x48\x1c\xc0\xad\x53\xad\x93\x53\x55\x1d\xc9\x62\x59\xa8\x11\x37\x13\x8f\xe2\xdc\x2f\x1a\x92\x33\x1d\xc5\x45\xf1\x50\x7f\xa6\xf5\xf1\x7e\x0a\x7b\x9e\x9c\x3b\x35\x41\xaa\x4b\x1a\xa7\xd3\x47\xd7\x0d\xe9\x43\xff\xe5\xea\x86\xf4\x81\xff\xb2\xc4\xa0\x46\x87\xdf\x46\xc1\xa7\xd1\xd1\x37\x03\x93\xee\xed\x05\x7d\x9b\x59\xcc\xe8\x05\x7d\xc3\xc2\xa8\x9a\xca\xb5\xd3\xe5\xda\xac\xb9\xec\x72\x41\xba\x5c\xc0\xda\xfb\x01\x0f\xb2\x7d\x22\x61\xb2\xe6\x32\x8b\x19\x63\x8b\x02\x7d\xe0\x07\x46\x03\x31\xbd\x77\x67\x54\xe3\xa1\x54\xd4\x1c\x5b\xd4\xa8\x3a\xa4\xe5\x3e\x51\x51\xea\xde\xaa\xc3\xbc\xd8\xa2\x46\x35\xa7\xd0\x40\x9b\x0a\xfa\xe9\x82\x3e\x8b\x84\xba\xbf\xe3\xfb\x5e\xbf\x1d\x64\x19\x0b\x1a\x35\x94\x94\xeb\xfe\x82\x7c\xeb\xa4\xbb\xb7\x4d\x65\xb6\xae\x2c\x19\x68\x93\xaa\x49\x8c\xba\x32\xfa\x8a\x0c\xf2\x74\x65\x42\x98\x3f\x28\xa0\x2b\x8b\xc4\xfc\x83\x4c\x5d\xd9\xa0\xa8\xa5\x97\xde\x24\x95\x08\x5d\xc4\x36\xd7\x3b\x7a\x52\xc7\xec\x51\x1d\x73\x5a\xdf\x86\x5a\x67\x77\x76\x9e\x55\x55\x52\xfd\xeb\xa1\xfa\xd7\x6b\x69\x2a\x6b\xe0\x7d\x94\xd0\xd4\xe4\x6a\x63\xee\x11\xa9\xf4\x42\x52\xc9\xc4\x91\x4a\x67\x47\x47\x17\x52\xa4\xd2\xb9\xf4\x68\x8e\x54\x7a\x9b\xab\x96\xb9\x65\x34\xee\x85\xc9\x9c\x63\x44\x6e\x31\x44\xa9\xc6\xdc\x83\x83\x9f\xc7\x34\x43\x56\x88\xd2\xf3\xd6\x6d\x14\xa2\xf4\xd6\x60\xc9\x71\x9e\x65\xc9\xb1\x11\x96\x1c\xaf\xb4\x21\x4a\x5f\xaa\x21\x4a\x37\xfb\x87\x28\xdd\xb2\xd9\x7a\xd3\xdc\x0a\x4b\x8e\x37\x88\x73\xdb\xd8\xdb\xab\x37\xd7\xce\x06\xfe\x49\x59\x72\x60\x62\x6c\xc9\x81\x4f\x8f\x1e\xa2\xf4\x16\x2d\x39\x6e\xbf\x35\x44\xe9\x5b\xe7\x36\x5b\x24\x0f\x8b\x16\xcd\x2b\x18\xc8\x43\x89\x55\xfa\xce\x79\x7b\x5f\xe1\x7c\xb2\x52\x55\x1e\xff\x56\x91\xc7\xc3\x3c\xe6\x88\xe4\x65\x4b\x85\x9c\xac\xdb\xe2\x59\x25\x47\x85\x39\x39\x95\x90\xa4\x39\x79\x71\x2d\xcf\xc2\x91\xa8\xf9\x46\x8a\x2d\x7a\x51\x39\xb3\x28\xd8\xff\x81\xe3\x8b\xe6\x6d\xd6\xcc\x26\x73\xe2\x7b\x5a\x36\xf3\xed\x27\x47\x19\x0d\xd9\xf6\xf9\xe0\x5c\x51\xe3\xba\x69\x95\xde\x85\x41\xfb\xee\xae\xf4\x8a\xfd\x2a\xc5\x77\x78\x50\xe5\xb4\x07\x2a\xc5\x79\x7e\x9e\x02\xf9\xbf\xb0\x5f\x52\xfe\x43\xb9\xc0\x75\x33\x8a\x29\x8a\x46\x06\x0c\x4b\x71\x55\xfa\xcb\xf3\xe7\xcf\xa1\x57\xf2\x9f\xeb\xe4\x20\xd5\xef\xc0\x67\xf6\xc3\x5e\xf1\x54\x85\xbd\xdd\xee\xed\xbd\xc2\xaa\x2e\x8e\x8e\xde\xdf\x33\xac\xea\x85\x70\x31\x16\x44\xe7\x56\x2a\x9c\xa9\x74\xb2\x48\x96\x06\x62\xa9\x45\x86\x18\xaf\xf7\x09\x87\x3a\xb9\x77\x38\x54\xd9\x08\x4b\xeb\x6b\xb0\x78\x34\x54\x38\x0f\x3e\x46\x01\x51\x67\x18\x39\xfe\x7e\xf1\x50\x2f\x34\xf1\x50\x29\x32\xfb\xfd\x03\xc6\x43\x35\xd7\xc5\xe3\xa1\x72\x6d\x86\x21\xdf\xc1\xc9\x41\x37\x65\xc1\x80\x33\xf0\x49\x4e\x43\x76\x9d\x1c\xa8\xae\x30\x25\x55\x0a\x59\xb1\x0d\xf9\xd9\xc9\x95\x1b\xba\x74\x91\x7a\xd8\xf7\x1d\xf9\xa7\xf3\x82\xfc\xe0\xd4\xff\xd6\x54\x1a\x33\x59\xd1\x18\x64\xf2\x9f\x61\x62\xfc\xff\x3c\x76\x9c\x5a\xeb\x9f\x8d\x1f\x04\x8a\xe0\x4b\x4c\x88\x44\x37\x57\x3c\x68\x71\x07\x1d\x74\xe1\x3f\xd6\x1e\x8a\x4a\xd8\x85\xd8\x7c\x9f\x5d\x10\x7f\x7c\x70\x37\x1f\x30\xa6\x78\x81\xae\x2a\x1d\x45\xf2\xc4\xbb\xbb\xfb\xf2\x9f\xc7\x87\xd8\xe1\x1f\x1a\xff\x44\x79\xf6\xf2\xe8\xe8\x53\x66\xf4\x04\xef\x3f\xe3\xd0\x04\x83\x94\x50\xe7\x29\x5b\x69\xb6\x8d\x75\xee\xec\xe4\x5c\x92\x03\xfc\x7c\x9a\x0f\x57\xa3\xe6\x2e\xca\xdc\xd3\x95\x6a\x1c\x56\x69\x16\x2e\xb8\xf7\xd4\x72\xe9\xa0\x46\x4f\x08\x51\x2b\x96\xa9\x00\xc5\xd2\x0b\x67\x25\xb2\x3e\xa9\xb5\x10\xb5\x3d\xc3\x30\x3e\xf4\x02\xce\x58\xa7\x49\xe2\x20\x3d\xbf\xe9\x15\xb7\x9b\x7f\x43\x8c\xdf\xd7\xe9\x18\xbf\x17\xe9\x6d\xf9\x90\x31\x7e\x37\x91\xf9\xc2\xa9\x62\xbe\xb0\xc9\x8e\xf1\xcb\xee\xc9\x64\x9c\x52\x04\xc7\x75\x2c\xc9\xe7\xdd\xd7\xf9\xba\x8f\x72\xa1\x0f\xce\x87\xfc\x23\x1a\xa5\x62\x2e\x65\x29\xe2\x94\x3a\xf3\xf8\x0b\x5c\xac\x3b\x0f\xa2\x2b\xb4\x81\x4f\x07\xd1\xe5\x2a\x5d\xa4\x87\x75\xbb\xe9\xcd\x02\x77\xd8\xa4\x05\xc4\x1d\x2a\x0a\x08\x5e\x5f\x2a\x50\xb3\x77\x1b\xf1\xe4\x48\x17\x2c\xc9\x9a\x8f\x1d\xbe\x0e\xbf\xc9\xaf\xe0\x3d\x62\x77\x6e\xf4\x7e\x05\xf5\x4d\xf1\x81\xd0\xc8\x52\x62\x50\x51\x2a\xd6\x25\xc6\x1c\x25\x92\x4b\x47\xca\x90\xb0\x1e\xb9\xd0\x89\x66\xfd\x62\x51\x41\x05\xd9\xfb\x8d\x91\x41\x93\x69\xdf\x14\x12\x94\x0a\x54\xa3\x00\xa0\x06\xe1\x2b\x0f\x09\xfa\x75\x17\x85\x04\xad\x29\xc2\xdb\x43\x6a\x2a\x52\x27\x6b\xa7\x46\x36\x29\x3b\x8f\xa4\xf7\x41\x45\x62\x5b\x34\x12\xe8\x99\xa3\x91\xd8\xb4\xea\x7f\xaf\xa1\x5c\xfb\x9c\x86\x09\x8d\x3f\x25\x74\x45\xd9\x0a\x24\x37\x82\x68\x15\x41\xec\xec\x48\xc3\x02\xb2\x79\x86\x16\xb9\x22\x85\x1c\x5d\x24\xc3\xa1\xc9\x85\x61\xac\x1d\xf6\xab\x44\xaa\xf5\x4e\x89\x06\x59\xda\xd7\xeb\xda\x43\x07\x27\x85\x43\x8c\xad\x69\x3a\xd1\xf4\xac\x50\x19\x7e\x45\x94\x6d\xa3\x7b\xc7\x3a\x79\xf9\xf0\x86\x29\x91\xc8\xf1\x12\x4d\x54\x5e\xed\x61\xa2\x12\x6f\xea\xcb\xf8\x49\x44\x17\xff\x53\xa3\x9b\xe6\xb9\xe5\x63\xae\xdc\x31\x35\x15\xd6\xdc\xe0\xa5\x6f\xa0\xf7\xaf\xf7\xed\xf1\x51\x33\x6a\x30\xfa\xd7\x1b\x3c\x80\x7f\x3d\xd4\x80\x88\x93\x33\x19\x8f\x55\xb0\x64\xd4\xdc\x46\x17\x9c\x95\x9e\x17\xce\x26\x11\x91\xf5\x71\x15\x2a\x46\xcd\x48\xb6\x42\xc5\xa8\xb5\xc8\x37\x98\x31\xea\x49\xb0\xe8\x39\x9f\xa3\xbd\x05\xd9\x7c\x72\xdf\xbb\x5e\x60\x2e\x9d\x19\xc5\x35\x33\xfe\xab\x59\xb3\x90\x17\xff\xd5\x2c\xe6\x2f\x60\xe3\x63\x74\x66\x98\x6d\xe3\x63\x14\xbc\xcf\x82\xf6\xd2\x0f\x7e\xa5\x94\xe8\xde\x0a\x0d\x46\x7e\x67\xcf\xb0\x51\x5f\x00\x6b\xbb\xdb\x0d\x66\xd9\xa5\xff\x1d\xb7\xf6\xdf\x71\x6b\x1f\x20\x6e\x6d\xd2\x47\x9e\x4b\x7d\xe4\xc9\xc1\x6a\xcf\x95\x60\xb5\xe7\x4a\xb0\xda\x73\x46\x08\xa3\x4a\xe2\x3c\x57\x33\x93\x54\xc3\x7a\x54\x0d\x9b\x11\xb7\x76\xb2\x47\xb0\x5a\xbd\x5a\x32\x83\x3a\x2b\xa0\xff\x09\xaa\x22\x87\x46\xa1\x1b\xbd\x63\xa6\x3a\xac\xc7\x5a\xda\x8b\x43\x92\x4a\x7f\xf1\x7d\xbf\x14\x41\x92\xea\xd5\x17\x4f\x3c\x15\x53\xf4\x10\xf1\x6c\x05\x6f\xf1\x1a\xc6\x7d\x8b\xba\x92\x51\x11\x0d\xd3\x58\xa3\x61\x1a\xeb\x8d\x7e\xc6\x69\xa3\x9f\xb3\xb4\xd1\xcf\x65\xae\x76\xe9\x92\xb9\xe5\xc9\xb0\xc7\x61\x50\x90\x7d\x8c\x72\x1e\xc3\x0a\x67\xf5\xc7\x5b\xe1\x54\x58\x96\xb4\x31\x8e\xd6\x0a\xe7\xe5\x1f\x68\x85\x33\xd1\x59\xe1\xbc\xdc\xdb\x0a\xe7\x8c\x5a\xe1\x84\xd9\x56\x38\xe6\x6a\x57\x92\x15\x8e\x30\xc0\xa1\xbd\x8c\x8d\x70\xe6\x36\x2a\x1f\xb8\x08\x16\xb1\xde\xab\x16\x1a\xe3\x84\xb2\xf5\x0a\x4c\x38\x1a\x8d\x8d\x2b\x56\x28\x1b\xad\x9c\xd0\x64\xfb\xba\xd1\xa5\x7d\x1d\x0b\xeb\x95\x09\xb3\x5e\x49\x01\xa3\x44\xd9\xb8\x92\x28\x2a\x5b\x88\xce\x0b\xf0\x9f\x6b\xbb\xf9\x55\xeb\x43\x2f\xd7\x04\x26\xde\xc7\x8a\x31\xcc\x6b\xe7\xd5\x37\x18\xc3\xc8\x95\x92\x37\x8e\xf5\x3a\x69\x17\xf3\x5a\xae\xd4\x8e\x7c\xc4\xd1\xc7\xdd\x9b\x82\x46\x31\xaf\xee\x63\x14\xc3\x15\x91\xaf\x1e\xdd\xb2\x44\xaf\xaf\xbc\xa7\x65\x09\x79\x2b\xac\x05\x92\x68\xd0\x8b\x18\x0d\xda\x8b\x66\xbd\x71\x80\xb9\x0f\xe2\x61\xdd\xaf\xd5\x58\xaf\xfb\xf6\xbf\x91\xf9\xc7\x62\x1f\xf3\x0f\x91\x19\x46\x50\x70\xe6\x72\x27\x2d\xcf\x5c\xe4\x5d\xa4\x53\x8e\x77\x5d\xb6\xad\x88\x64\x15\xf2\x2e\x65\x15\xc2\x1c\x1d\xbe\xcb\xd8\x8d\x7a\x6d\x83\x64\xcf\xa1\xec\x8a\xbe\xb5\x12\x06\x1a\xcc\x41\xed\x8a\x1a\x7b\x4c\xb4\x20\xd8\xf2\x84\x82\xbb\x7d\xdb\xa6\x8e\xc9\xa0\x83\xef\xf5\xc6\x29\xc2\xd1\x6b\x12\xe2\xaa\x56\x0b\x6d\xc9\xf6\x1d\x3c\x56\xcc\x37\xd9\x4e\x9c\xff\xf7\xb1\x9d\x38\x7f\x78\xdb\x09\x4d\x4f\x1e\xa1\x15\x9d\x85\xc6\xf9\x1f\x60\xa1\x71\xfe\xa7\x5a\x68\x9c\xff\x11\x16\x1a\xc0\x6f\x20\x02\xb9\x86\x60\x89\x78\xeb\x4c\xc3\xd1\x96\x69\xe2\x60\x0b\x88\x8b\x28\x4e\xe4\x7b\x88\x9d\x81\x3c\xa4\x20\x4f\x9b\x86\xfd\xc9\x42\x3d\x81\x23\x12\x71\x46\x1f\x80\x4e\xac\xfe\x3d\xb1\x9d\xad\xe3\x27\x89\xad\xd7\x6c\x3b\x6d\x61\x9d\xd6\x6e\x5c\x55\x22\x6a\xb1\xcd\x63\x9d\xb3\xdf\xe8\x3c\xba\x6d\x22\x93\x42\xf8\x5d\x41\xea\x83\x13\x8a\x1d\xe7\xea\xaa\x8d\xa3\xad\x04\xd7\x84\xfd\x8a\x7e\xd4\xe8\x8f\xba\xf4\x83\x67\xaa\x63\xa6\xeb\x66\x24\x46\x36\x52\x7a\x03\x18\xb9\x05\xd3\x81\x9f\x95\xfd\x3e\x28\xd9\x39\x06\x2b\xd1\xd4\xe4\x4e\x87\xe6\xa0\xa4\xa8\x7b\x1f\x11\xfe\xb5\x46\xc8\x1f\xd8\x78\xf1\xe0\x3c\xa0\x8e\xc5\xf1\x48\xa4\x06\xae\xfc\xc3\x32\x2d\x25\x61\x04\xa1\x15\x7f\x5b\x55\x8d\x2a\xeb\x47\xb5\xb7\x56\x6c\xb3\x83\x1a\xd3\x06\xd7\x9f\xca\x96\x77\xa9\x01\xa5\xac\xe6\xda\x90\xab\x54\x7d\x76\x1c\x50\x25\x04\x34\xa9\x35\xf8\x3c\x15\xb6\x05\x84\xad\x1f\x4f\x4c\xc5\x41\x14\x24\xb4\xdd\xf2\x1b\xd1\x5a\xf1\xcb\x25\xf8\xef\x34\x36\x4e\x68\x53\x77\xdf\xe5\x52\x25\x91\x5a\x83\xd4\x06\xe4\xfe\xff\xff\x3f\xf5\x85\xcd\x62\x84\x15\xbc\x8c\x11\xba\x51\xb2\xf5\xd3\xb8\xc9\x9b\xbc\xca\x73\xfe\xdd\x3c\xfe\xdd\xca\xcf\xe1\x6b\x35\xde\x69\x10\x06\x74\x7e\x4a\x25\x6a\xba\x84\x5f\x2e\xf9\x45\xe3\xf3\x9e\x5d\xe6\x95\x11\xca\xce\xd8\x0d\xa4\x7e\xe5\xaa\x92\xe1\x3e\x9f\x5c\x56\x96\x3f\xec\x27\x17\x92\x57\x41\x13\x7d\xcb\x67\xd0\x8f\x33\xf7\x9b\xe0\x67\xa8\x44\x5f\xa5\xfc\xbc\x51\xd1\x7f\x93\x64\xf5\xd1\x07\x7a\xf7\xe0\x26\x6f\x64\x59\xcc\x5c\xed\xdd\x3e\xe6\x6a\xcb\xff\x5e\xe6\x6a\x8f\xde\x1d\x9b\xac\x5a\xfb\x2e\xa7\xfd\x4d\x0d\x43\x66\x88\x46\xe9\xd6\x49\x6c\x76\x88\xa7\x70\xb4\x38\x75\x64\xa9\x76\xa4\xd1\x99\x24\x96\x23\x37\x52\x0b\xb9\x91\x5a\xca\x5c\x6b\xa2\xda\xa0\x3d\xe4\x70\x7d\xc3\x70\xa3\x2b\x88\xfd\x88\x68\xf6\xc8\xc2\xad\x20\xd9\xae\x9f\x1d\x3d\x91\x9e\x34\x80\xcb\x9d\x43\xc5\x58\x4d\x3d\x71\x99\xa5\x1f\xe9\xc5\xe6\x69\x7d\x27\xe4\x3f\x4d\x20\x87\x58\x78\xf0\xe0\x96\x68\xd9\x06\x66\x13\x9d\xa5\x5a\xa8\xb1\x54\xbb\x9f\x25\x9a\xfe\xcd\xe5\x0c\x85\xbf\xd4\x4c\x6d\x61\x82\x45\x2c\x19\xa2\x81\x43\x1f\xa8\x7d\x1a\xfc\xb3\x75\xbe\x93\x8d\xd3\x62\xf5\xff\x71\x87\xe2\x18\xd0\x22\xf4\xfc\xcf\x36\x5b\xd3\xeb\xfa\xcf\xc9\x99\xad\x31\x59\x3b\xff\xb7\xc9\x9a\x46\x15\x8b\x4b\x64\x6f\x55\x68\xb6\x9d\x9b\xd1\x60\x2d\xdb\xce\xcd\xa8\xf0\xfd\x7f\xd9\xce\xcd\xa8\x53\xce\xb1\x73\x33\xea\x57\x51\x8b\xfd\x33\x73\x17\xb2\xb7\xab\xca\x87\xb7\x56\x33\x82\x0b\x24\x40\xd1\x7e\x01\xad\x44\x59\x0e\x8a\xda\x5b\xdd\xfe\x6f\x6b\xb7\xe2\xd6\x6e\x86\x20\x60\x42\x09\x77\x96\xab\x53\x4d\xaa\x3d\x3d\xaa\xf6\xbc\x97\xb5\x5b\x12\xcb\xe0\x21\x96\xe1\xe1\xac\xdd\x62\xb2\xe1\x1e\x76\x6f\xe7\x91\x56\xf2\x5c\xb5\x7b\x3b\x57\xed\xde\xce\xf3\xed\xde\xd6\xb9\x9a\xc9\xb5\xf0\xc0\x6c\xb4\x7b\x5b\xa3\xdd\x9b\xc6\x2e\x2e\x32\xa5\x59\x67\xd8\xbd\xad\xef\x13\xb1\x68\xa1\x40\x71\x97\xc2\xea\xed\x4c\x6b\xf5\x76\xaa\x5a\xbd\x2d\xf7\xb7\x7a\xe3\x56\x02\x97\xcd\x95\xb0\x7a\xbb\x44\x78\xf4\xd2\x5e\x5d\x5d\x5e\x3b\x4b\xf8\x27\x65\xf5\x86\x89\xb1\xd5\x1b\x3e\x3d\xba\xd5\xdb\x1a\xad\xde\xd6\xdf\x6a\xf5\xf6\xd2\x59\xe7\x5a\xbd\x25\x16\xaf\x62\xfa\xf6\xca\x79\xf9\x0d\xa6\x6f\xe9\x9a\x65\xfb\xb7\xd8\x49\x5e\x64\xed\xf1\xaa\xb8\xfd\x5b\x4e\x56\xc9\xfe\x2d\x3b\x23\xea\xe1\xdf\x73\xc9\x27\xcf\xc7\xa5\xa3\x39\x2d\x48\x66\x73\x39\x39\x15\xb3\xb9\x9c\xbc\x19\x66\x73\xe7\x95\x2d\x72\x0a\xaf\x1f\xda\x6c\x2e\x6f\xaf\x67\x36\x99\xad\x05\xdd\x66\x98\xcd\xbd\xf9\x23\xcd\xe6\xb6\xf9\x66\x73\xaf\xf3\xcd\xe6\xde\xdc\xcf\x6c\xee\xe5\xbd\xcc\xe6\xee\x6b\xf2\x76\x1e\x99\xbc\x5d\xfc\x31\x26\x6f\x6f\x13\xae\x12\xbf\xcd\xe4\xed\xad\x7a\x83\x7c\xb3\xfd\xdb\x6f\xd6\xc5\xd3\xe3\xe7\x09\x3b\x9b\x73\xb4\xb3\x79\x5d\xc8\x64\xed\x9d\x63\xce\x97\x30\x57\x7b\x67\xb2\x55\xfb\x06\x33\xa1\x5f\xad\x73\x8d\xf9\xde\x45\xba\xff\x45\x8d\x2a\x71\x91\x5e\xb0\x15\x66\xae\x20\x32\x34\x52\xb3\x88\xb3\xf2\x40\x51\x15\x6d\xea\xb0\xff\x50\xde\x22\x9e\x8f\xd5\xe7\x6d\x5d\x0e\xef\x03\x2f\x2b\x17\xf7\xb6\x60\x5a\x46\x16\x4c\x1b\xc5\x62\x67\xf9\xa0\x16\x4c\x6f\x9c\x37\x0f\x6a\xc1\x94\x6f\xb2\xa4\xda\x28\x2d\xb5\x36\x4a\xa9\x11\xab\x74\x93\x6a\xb1\xb4\xf9\xe3\x2d\x96\x96\x0f\x68\xb1\xb4\xd4\x58\x2c\x2d\x32\x2c\x96\xce\xb5\xce\xa4\x62\x41\xe8\xc1\x9e\xd6\x4b\x31\xe5\x72\x7f\x3b\x26\x71\x0c\x3f\xab\x69\x4d\x9a\xe4\xd7\x7f\xbe\x75\x53\xd2\x9e\x69\xc5\xea\x8b\xe2\xe2\xdc\xcb\x9e\x69\x9b\x65\xcf\x44\x23\xe6\x34\x97\x7a\x7b\xa6\x85\x6c\xce\x24\x59\x1c\xc5\x01\x6d\xbe\xc1\x98\x49\xb5\x8f\xfa\x1f\x68\xc4\x74\xfa\x88\x66\x4a\x0b\x34\x53\x3a\xbb\x97\x99\xd2\xe2\xe1\xcd\x94\xc8\xb9\x56\x86\xbb\x21\xb7\xf6\xbf\x2d\x98\x1e\xd7\x82\x69\xf3\xed\x16\x4c\xcb\x7f\x5b\x30\xfd\xdb\x82\x29\x4f\xe4\x9c\x6d\xc1\x64\x14\x37\xff\xdb\x12\xe8\xdf\x96\x40\xc5\x2d\x81\x0c\xa1\x71\x84\xe8\xf5\xd6\x96\x8d\x82\x6e\x15\xa3\xa0\x5b\xc5\x28\xe8\xf6\x91\x2c\x81\xfe\xd7\x9a\xeb\xdc\x43\x20\xae\x11\x6e\x47\xf9\x86\xb1\xdd\xc9\xb1\xe3\x38\x83\x2b\x71\x67\xbf\x41\xdc\xe4\x35\xbb\x82\x5a\xb7\x8d\x6d\x53\x5c\xf1\x18\x5e\xaf\x0f\xd7\xdc\x46\xba\xde\xd9\x7d\x2e\xde\x6c\xa3\xbb\x9c\x3d\xf3\x1b\xfd\x2c\xfe\xea\xe8\xd6\x24\x83\x00\x8c\xbd\xc0\x78\x49\x2a\xce\x47\x02\xb0\x40\xc8\xbf\x68\x80\xa3\x3d\x06\xc8\x07\xe6\xac\x38\x15\x43\x9f\xf1\xd3\xf0\x71\xc1\x8b\xad\xfc\xe2\xcf\x19\xd1\x24\x3d\x22\x4a\x58\xb1\x61\xe9\x3e\xd9\xc2\x40\x95\xb1\xcf\xb6\xc8\x22\xc3\xce\x0a\xd2\xec\x45\x07\x28\x0d\x88\xe9\x4d\xf2\x14\x2c\xe7\x31\x6f\x2a\xaf\xfa\x73\x8d\x58\x4b\xa7\x0c\xc9\xf6\x4a\xd8\x25\xe7\xb8\xf7\x2e\x8d\x12\xdb\x1e\xcb\xf0\xd2\xc9\x90\xb9\x31\xf9\x36\x3d\xc2\x81\x1b\x3f\x3a\xaa\xe3\x4f\xfa\x11\x76\x28\xf0\xdf\xa3\xe4\xb1\x5c\xf2\x75\x66\x49\x34\x42\x30\x34\xf9\x66\x8f\x82\x4a\x8b\x6f\x33\x0b\xba\x40\x36\x9a\x9a\x7c\xb7\x4f\x49\xb9\xcd\xe6\x63\xab\x7d\x70\xf9\x34\xcf\x73\xd5\x3e\xdc\x32\xa3\x98\x64\x55\x1d\xfc\x9e\x76\x74\x92\x15\x1d\x8b\x44\x86\x88\x22\x2a\x73\xf9\x50\xb8\xf9\xe3\x47\x68\xbe\x19\x99\xa4\x69\xcc\xeb\xde\x0b\x53\xb9\x0f\xc0\xc6\x6b\x1b\x8b\x6d\xf7\x2c\x1a\x39\x4b\x78\x6f\x3b\x57\xd5\x65\x54\x57\x16\xdf\x63\x8a\x6e\xec\x93\xf3\xb1\x80\x6e\x8c\xeb\xc4\xda\xcf\x0e\x94\x6a\xe4\xd0\xeb\x9f\x8a\x6b\xbd\x72\xb2\x6e\xeb\x7b\xe4\x3d\x2e\x98\x97\x46\x89\xad\x73\x85\x54\x6e\xc6\xe3\x02\x19\x51\x43\x50\xa4\x42\xcc\x57\xa4\x3e\x2a\x74\x28\x52\x21\xcd\x58\xa4\x46\x59\xc7\xc5\x83\x21\x7c\x94\x95\x95\xe4\x9f\x29\x75\xb3\x1c\x34\x19\xd5\x24\x5c\xaf\xd2\xe1\xa2\x1c\x3c\x39\xfa\xec\x1e\xfc\xc1\x39\xad\xba\x68\xf4\x6d\xd9\xad\x8b\xa7\xc7\x8d\x0b\xf2\x45\x4a\xf9\xa1\x51\x6b\x9e\x72\x5d\xce\x0f\xe8\x7a\x8a\x91\x73\xff\xb4\xc9\xe7\x58\x18\xaf\x53\xfb\x99\x77\x56\x08\x84\x37\x42\x0a\xdf\x05\x5b\x27\x82\xd6\x2b\xc9\x2d\x2a\xe7\x68\x28\x69\x4c\x96\xad\xe6\x2b\x5b\xf1\x51\xd2\x2a\x95\x1a\xa5\x03\x8b\x12\xf5\x07\xb8\x8e\x50\xa7\xe0\xee\x44\xf4\xf6\x53\xa4\xa9\xa9\xfa\xf1\x54\x56\x3f\xd2\x34\x29\x29\xf7\x32\x33\x8f\x3b\x5b\xab\xf6\x85\x69\x1e\x83\x48\xa3\xb6\x9b\xa5\x9c\x42\x5e\xda\x4a\xd4\xd0\xb1\x50\x98\xfd\xb3\xb8\x16\x8c\x1e\xae\x34\x85\x4e\xca\xd1\x91\xb8\x24\x69\x1a\xde\x20\x08\x50\x9e\x3f\x4e\xd3\xc7\x05\x9a\x5e\xe8\x9a\x7e\x80\x61\xb2\x8b\x59\x69\x6a\xf9\x40\x4d\x25\x87\xa5\x69\x6a\xf5\x48\xa3\xe2\x77\xbf\xd2\xd6\xfa\x91\x86\xa5\x6b\xeb\x73\xce\xaa\x0e\x62\x5d\x71\xa0\xda\x15\xff\xe8\xc8\xfb\x44\x3a\xb3\xf9\xf9\xf0\xb2\xa8\x16\x96\xfc\x24\xd7\x24\x9d\xd5\xbc\xa2\xd7\x85\x2b\xfa\x59\xae\x48\x3e\xa4\x79\x4d\x6f\x0b\xd7\xf4\x4b\x6a\x70\xc7\x4a\x4d\xaf\x0a\xd7\xf4\x6b\x72\x70\x6a\x45\x6f\x0a\x57\xf4\x5b\x6a\x70\x6a\x4d\xef\x0a\xd7\xf4\x2f\xe7\xad\x30\x71\x7a\x9b\x47\x1e\xed\x90\x06\x44\xdf\x3d\x26\x75\x7e\xda\x87\x43\x9a\x80\x2a\x7b\x57\xfe\x35\xa7\xa3\x04\xa5\x74\x05\x19\x6a\x18\x68\x76\x77\x6d\x37\xae\xae\xc9\x5f\x9d\x77\xa2\x53\xef\xfe\xbb\x74\xaa\x39\x15\x34\x9f\xaf\xf5\xaa\xf0\x3e\x2a\xf8\x2f\x03\xd9\xb7\x55\xc8\xbe\x4b\xa0\xe2\x6e\x54\xaf\x0f\xc9\x2a\x3f\x44\x55\xfe\xb5\x70\x95\xb3\x2a\xc7\x16\x5b\xd3\xd8\x6d\x02\x9c\xc3\xba\xd4\x95\x36\x75\x1e\xa5\xde\x48\xa9\x4b\x6d\xea\x5a\x9b\xfa\x36\xe2\x4f\x60\x28\x12\xeb\xf9\x33\xbf\x9d\x57\x68\x53\xa4\xcf\xf2\x1b\xcf\xb2\x46\xf5\xbf\x3e\xcb\x4f\x3c\xcb\x02\xb8\x37\x43\x96\x5f\x79\x96\x25\x70\xa3\x86\x2c\x3f\xf2\x2c\x33\x44\x45\xe9\xb3\xfc\xc2\xb3\xcc\x51\xa3\xcd\x40\x12\x05\x3d\x1c\x5f\x22\x44\xe2\xf3\xbd\x3d\x1c\x5f\x32\x88\x84\xda\x1b\x63\x75\xbc\x97\x1b\x9b\x6c\x4d\xbd\xfc\xcd\xba\x34\xf8\x7b\xcd\x6a\x63\x5b\x4f\x35\xb2\xb5\xc9\xed\x03\x37\x72\x9c\x6a\xe4\x36\x39\x77\x72\x47\x14\x83\x44\x71\x90\x95\xc8\x7b\x71\x5e\x1c\xd6\x1b\x87\xb5\x3c\xf2\x2c\x54\x5c\x48\x33\x2f\xdf\xe6\x6e\x19\x9a\xfc\x70\xcf\x26\xeb\x51\x93\xa7\x45\x70\x28\x08\x7b\x90\xc0\x25\xb3\xa2\x1a\xc7\x21\xee\xe4\xe2\x79\xb3\xea\x35\xe8\x0a\xcf\x54\x5d\x61\x56\x6b\xc5\x6a\x58\x15\xed\xef\x08\x4f\x9e\xe2\x79\xb3\xea\x2d\xd6\xb3\xac\xd6\x8a\xd5\xb0\x28\xda\xdf\x09\x07\xb3\x14\xcc\x9b\x55\x6f\xb1\x9e\x65\xb5\xf6\xcd\x63\x33\x6a\x89\xcf\xee\xab\x25\xce\xe8\xee\x83\x37\xb6\x53\x91\x3a\x45\x20\x31\x1d\x13\x08\xa6\xcb\xd0\x2c\x3d\xf6\xa7\x8f\xf0\x97\x01\xfb\x3d\x34\x5a\xd5\x8d\x0c\xb6\x73\xff\xb1\x23\x63\xa7\x34\x0e\x27\xe1\x02\x7d\x24\x90\x09\xd6\xa6\x37\xd8\x4b\xa7\xdd\x68\xd2\x66\x12\x44\x08\xd2\x2c\x5b\x20\xb9\xa7\xb0\xaf\x4d\xef\x6e\x6c\x0a\x8b\x4a\xf9\x5e\x96\x01\x67\x52\x3d\xcb\xa2\x79\x6f\x6c\x1a\xa5\x8e\xe7\xe5\x19\x4e\x81\x5f\x51\xba\xb5\xce\xc9\x02\xb5\x6c\x92\x48\x29\x8e\x82\x0c\xed\x6c\x6f\xc5\x2f\x10\x3d\xa4\x2f\x3a\xb5\x13\xc8\x20\x72\x6b\xc8\x79\x13\xe7\x64\xfe\xf1\xe0\xbc\xcf\x06\x62\x9d\xe9\x80\x58\xaa\x21\xa3\xc9\x78\x90\xb1\x5c\xce\x4c\xfc\x3c\x76\xe6\xf0\x93\xb2\x4f\xce\x82\xff\x3a\xa6\x90\x08\xc6\x09\x39\x2b\xf1\xf3\xd8\x59\x47\x30\x8a\x8d\x80\x51\xd4\x9d\xad\xf8\x79\xec\xdc\x4a\x40\x8a\xb3\x47\x07\x52\x18\x8d\xd1\xb2\x81\x14\xbd\x74\xb1\x5e\x41\x20\x45\x3f\x5d\xb4\x2f\x1b\xe9\xd5\xf7\x36\x2a\xe3\x05\x8f\xf7\x36\x0b\xcc\x86\x23\xe8\x8c\xb4\x98\x11\x5b\x2c\xcb\xd9\x1b\x68\x92\x07\x65\x38\x7b\x44\x28\xc3\xd9\xfd\xa0\x0c\x67\x7f\x02\x94\x41\xd3\x66\x01\x28\x83\xce\x8e\xd3\x0c\x65\xa0\xaf\x48\x90\x07\x65\xe0\x19\x20\x63\x3e\x94\x41\xe4\x21\x41\x26\x94\x21\x10\x50\x86\x4c\x70\x41\xd2\xbc\xd4\xa3\xe6\xa5\x5a\x93\x38\xa3\x79\xb0\xde\x0e\x19\xa8\xcf\x0d\xc2\x07\xe6\xec\xcf\x82\xfd\x59\xb2\x3f\x2b\xf6\x67\x4d\xff\x64\x19\x12\xeb\x31\x58\xc8\x11\xb3\xba\xb7\xac\xb6\x2d\xab\x6d\xcb\x5a\xda\xb2\x96\xb6\xac\x6e\x58\x15\x3f\x87\x33\xb8\x57\xfb\xfb\x59\x10\x43\x23\x71\x51\xd6\x9a\xfa\xbc\x4a\x3c\xaf\xd5\xe7\xa2\x36\x7f\x61\x6f\xe4\xc3\xbd\x59\x04\xd2\xb0\x89\xba\xbc\xd1\xfb\x1b\xdd\x24\xd5\xc9\xf4\x2a\xd3\xaa\x7e\x7b\x64\x43\xba\xec\xfe\xd2\x4b\xcb\xfb\x34\x43\x4a\x1f\xbd\x41\x2b\x20\x9d\xd4\x24\xe9\xf8\x73\xac\xfa\x97\x1c\x72\x66\x69\xd9\x0a\xee\xee\xae\xaa\x2f\x9e\xdc\x6a\xe2\x37\x93\xdb\x27\x56\x3a\xb5\x52\x7d\x61\x6b\x32\x5f\x37\x02\xea\x74\xf2\xf6\xda\x26\x23\x49\xea\x72\x85\xc2\x16\xf8\x99\xec\xd0\x2c\xea\xd0\xc2\xa6\x0c\x2c\xfa\x7a\x48\x66\xba\x91\x33\x5d\x0b\x41\x0c\x7a\xe2\x3c\x25\xb5\x6b\x69\xec\xc8\x67\x3a\x8e\x33\x94\xbd\x61\x1e\x1d\x45\x8f\x4a\xbe\xd6\x95\xf2\x58\xa9\xd6\xea\x4f\x94\x14\xa2\x54\x53\x4e\xbc\xaf\x5f\x5f\x37\xae\x2a\x75\x52\x97\x07\xca\xdb\x1f\xa9\xed\x47\x8f\x23\xb5\x7d\xe5\x91\xd6\xaf\xa4\x10\xa5\x9a\x4a\xe2\xbd\xd4\x3e\x95\x0c\x9f\x15\x76\xcc\xc9\xd7\x76\xec\x8d\x33\x9e\xed\x6b\xa4\x83\xce\xee\x61\x0c\x18\xd5\x49\x2e\x9c\xf3\xa4\x2f\xce\x4b\x29\x09\xd5\x6a\x2f\xa1\x09\xd9\x26\xf0\x32\x5b\x87\x49\xc5\x20\xf4\x6a\xc8\xe6\xfc\xbb\xb1\xd4\xbc\x1b\x5b\x58\x6d\xcc\xde\xe1\xb6\xd5\xd8\x5d\x45\xca\x35\x1b\x30\x32\x11\xab\x82\xd6\xeb\x03\x1e\x34\x45\x74\x15\x03\xbe\x7e\x76\x17\xbd\xa8\xc7\xfd\x36\x37\xee\xc3\x3a\x2b\xf8\xba\x02\x74\x63\xaf\x52\x2a\x0f\xec\x84\x4b\x43\x12\x8f\xff\x2f\xfa\x12\xe5\xd2\x81\xce\xcd\xcc\x6d\xd2\xb1\xca\x29\x0a\xde\xc4\x8c\xf1\xf2\x25\xb2\x6a\x95\x96\xb3\x91\x65\xac\xfb\xff\x92\xf7\xa5\xdd\x6d\xdb\x5a\xbb\xdf\xef\xaf\xb0\x75\xfa\x7a\x91\x31\xe4\x48\x6e\xd3\xd3\x4a\x65\xbc\x1c\xcf\x89\x9d\xa4\x49\xda\x93\xd4\x4b\x2b\x4b\x03\x25\x51\xa2\x06\x6b\xb0\x25\xc7\xfa\xef\x17\x7b\x63\x20\x40\x02\x24\x25\x3b\xed\x7d\xcf\xfd\x60\x4b\x22\x01\x10\x04\x41\x60\x8f\xcf\xe3\x16\x2a\x05\xee\x50\x38\x53\x9e\xc5\x5e\x34\xd8\xf1\xd8\x04\x38\x9c\x0a\x53\x0a\x10\xab\x31\x60\x49\x92\x04\x78\x1d\xab\x03\x66\x00\x58\x8a\x8c\xc6\xce\x08\x9f\xd1\x4b\x06\xc1\x73\x20\xe6\x41\x0c\x68\x09\x0f\x49\xa4\x25\x97\x8e\x1a\x3f\x48\xef\xb3\x89\x90\x61\x0d\x09\xb2\xd3\x32\x03\xb7\x99\x56\xbc\x67\x7b\xbf\x72\xf9\xbf\x30\x28\x91\x52\x08\xb6\x42\x27\xc4\x2e\x01\x42\x5b\x28\xb0\xda\xe8\x05\xc3\xc2\x6e\xb1\xf5\x7c\x1f\x2c\x4d\xf4\xab\xf8\xc6\x2b\x4c\x64\x85\x51\x54\x81\x9f\x1b\xcb\x73\x13\xb5\xb1\xa8\x2d\xd1\xec\x7d\x21\x03\x83\xce\x8c\x64\xd4\x77\x06\x02\xbd\x88\x5e\x30\x94\x80\x58\x0c\xad\x47\xc5\xff\x33\xc4\xe3\xd2\x11\x91\x85\x12\xf8\x4f\xe6\x62\x0b\x35\xff\xcb\x02\xe6\x13\x3a\x12\xce\xa7\x44\xd8\x29\x03\x0a\x92\xb1\xaa\x84\xff\x09\x1d\x5e\x91\x8e\x1c\x62\x28\x49\x94\xde\xbf\x6b\x3e\xc5\xcc\xac\x67\xdf\xeb\xe9\xfc\x6f\x9e\xb0\xab\x04\x9c\x52\x26\x90\x92\x34\xd8\xe0\x47\x2f\x03\x4a\xa9\x6f\x30\xae\x84\x86\x63\x03\xab\xcd\x67\x68\x45\x52\x1a\x99\xcf\x8c\xe8\x1a\xb6\xb2\x41\x33\x35\xc3\xd1\xd4\xb7\xc2\x33\x75\xe9\x4d\x5b\x11\x9a\xc2\xd1\x1d\x02\x34\x01\x3e\x13\xfd\x37\x87\x24\xa9\x5b\x30\x34\xdd\xd9\x4c\x5c\x1c\x9d\x49\x4b\xd7\xe2\xda\xd5\x47\xaa\x86\xc3\xbe\xc8\x7e\x9d\x07\x2d\x9f\x45\xc4\xe4\x48\xe5\x22\x7f\x0b\x7a\x93\x62\x59\x81\x51\x09\x61\x3a\xbc\x87\xc8\x55\x4f\x9f\xec\x0d\x3a\xa4\xf4\x11\x9e\x8b\x32\x90\x7f\x17\x49\x38\x05\x45\x90\xd9\x12\x1b\x54\xb1\x44\x5f\xd0\x7a\x12\x3a\xb7\xc9\x42\x30\xf5\xe6\x54\xd1\x3e\xa3\x5d\x06\x1d\x5d\x30\x62\xf2\xae\xd4\x6c\x9a\xe5\x77\xb7\xda\x58\xcd\x2f\xe9\x56\x1b\xab\xe9\x25\x1d\xc5\xc9\x0a\x66\x95\x8e\xe2\x64\x07\xb3\x4a\x47\x63\xca\xb2\xf3\xac\x6d\xe6\x49\x47\x71\xb2\x82\x3f\xa5\xa3\x38\x59\xc1\x9f\x10\xc5\xe9\xf3\xda\x79\x35\xe9\xe0\x4f\x66\x56\x10\x5a\x6d\x5c\x6f\xa5\xd9\xb0\xac\xbc\x3e\x20\x0a\x9e\xb4\xec\xb7\x67\x4d\xe1\xb1\x23\x38\xa5\xdb\xcb\x78\x82\x62\x4e\x86\xfa\x3a\x30\xd4\xa7\x02\x9f\x59\x2d\x6c\x56\x7b\x85\x15\x8c\x0c\x56\x74\x6b\xe6\x56\xc2\xd6\x15\xe5\x6e\xc1\x5a\x6f\xcd\xd9\x32\xd5\x63\x59\x5b\xb0\xde\xad\x9d\x65\x46\x77\x87\xb5\x93\xbc\xd2\x8d\x65\x26\xcb\xaf\x66\x2c\x53\x6d\x65\x78\x86\x74\x62\xb6\xb2\xb8\xa9\x8c\x9f\xa7\xe5\x62\xa6\xb2\xa4\xa5\x4c\x14\x21\x1d\xdd\x52\xa6\x1b\xca\x3a\xb9\x0c\x65\xf1\xbc\xb1\x06\xe6\x8d\x99\x0c\x65\xf9\xac\x3e\xe3\xfa\xa4\x1e\x86\x7e\x78\x34\x62\xf0\x8c\x33\x7f\x9a\xc7\x02\x34\x8e\x1e\x7e\xd2\x02\x24\xcb\x8d\x95\x4d\xff\xd4\xe9\xea\xe1\x32\x0d\x44\x29\x08\xa6\x6f\xeb\x6f\x9d\x3a\xf0\x63\x3c\x3c\xb0\x1f\xb4\x4b\x53\xff\x34\x1c\xd5\x67\xec\xb8\x2b\x70\x95\x3b\x18\x76\xc6\xad\x01\xa4\xc5\x7e\x73\xd7\x37\xf1\xbd\x26\x98\x34\x9c\x26\x18\x0e\xe0\xab\xfb\xfc\x57\x86\xbb\x81\xea\xed\xbb\xb6\x03\xe8\xb5\xac\xa9\x6e\x52\x6a\x12\xed\x5e\xfb\x04\x5a\x90\x16\x97\xeb\x45\xb1\xbc\x4f\x5a\x78\xa8\x8a\x17\x6c\x4c\xe6\xd3\xee\xde\x12\x60\x68\x5e\xef\x8d\xe9\x77\x18\x6d\x76\x93\xd7\x70\x11\x02\xa5\x1c\xdf\xad\xf1\x83\x5b\x22\x64\xe5\x65\xe9\xc0\x39\x16\x10\xb3\xb0\x81\x86\x75\xc0\x16\x0e\x86\x1c\x97\xe7\xc4\x7e\xce\xad\x98\x6a\x32\x10\x73\x53\x3d\x76\xc6\x25\x4a\x87\x70\x28\xa9\xee\xa2\x24\xb0\xdc\x38\x6c\x38\xea\x5e\x37\x25\xa6\xab\x73\x5d\x17\x37\xed\x0f\xc6\x33\x06\x32\x0a\xec\x38\x96\xe0\x29\xb5\x3c\xb3\xc8\x41\x94\x70\x1f\xe4\x3c\x5b\xa2\x74\x1f\xd0\x2f\xbe\xb5\x02\x2a\x36\x4d\xe9\xc1\x4a\x9d\xb0\x9a\x15\x08\x9d\x82\x89\x1c\x42\xed\xab\xc4\x7d\xca\x56\xa4\xa6\x50\x07\xeb\xc5\x64\xa9\xb6\x1f\xe1\xf6\xb2\xe9\xd5\xa4\xfd\x73\x81\x1f\xa8\x55\x43\xd3\x95\xd2\xdf\x65\x34\x0f\xd0\x5c\xb5\x5d\xaa\xf0\x62\xbf\x79\x50\x6d\x67\x07\xfe\xff\xe6\xe1\xc1\x32\x1d\x4c\x21\xd8\xb5\xc0\xe2\x85\x73\xa1\x49\x27\xe6\x01\x88\xf3\x15\xf6\x10\x56\xc0\x68\x83\xad\x3b\xdf\xd8\x18\x4f\x2b\x7d\xc2\x37\x88\x70\xa5\x3c\x8d\x09\x2e\xeb\xb4\x7d\xcc\x97\x81\x17\x93\x8e\xc0\x5b\xfa\x96\xee\x7d\xfd\xca\x22\x95\xbf\x7e\xf5\xda\x60\xe0\xbd\xe4\xda\xd2\x6d\x30\x0d\x1a\x41\x88\x4c\x19\x05\xe6\x35\x2f\x28\x0d\x4e\x65\x83\x4c\x05\xa5\x77\x75\x47\x14\x6d\xd4\x7e\x99\x5d\x4f\x7a\xac\x17\x74\x16\x5d\x45\xda\xd9\x18\xf2\xf0\xa6\xa3\x89\x05\x05\x7b\x4e\x2f\x59\x9c\x3b\x98\xe2\xdf\x16\x43\x49\x5f\x94\xb7\x69\xfa\xa2\x51\x5b\x84\x96\x98\x6a\x18\xdd\xd0\x0c\xc5\x1c\x2a\xb5\xce\xfc\x2d\x7b\xe7\x09\x2f\x01\x77\x4e\x74\x03\xa1\x52\x21\x2b\xa6\xa6\xcd\xaf\x1f\xbf\xfb\x4b\xf5\x97\xe1\x39\xc0\xa3\x57\xba\x3c\x8f\x72\xc4\xa0\x3f\x62\xbe\x40\x29\xcf\x6b\x1c\xc0\x55\x2a\x4c\x6b\xbc\x4d\x98\xcc\xef\x6c\x26\xf3\x16\xb9\x05\x4e\x82\x85\xd5\x64\xee\x63\x81\x84\xc9\xfc\x16\x5e\xa4\x06\x7d\x30\xb8\xb4\xa1\x06\x32\x85\xd8\xbe\xbb\x1a\x10\xb0\xc8\xa7\x85\x46\xb2\x25\x60\xc8\x75\x0d\xef\xab\x58\x8c\x15\x83\x3b\x51\xd7\x74\x76\x87\xbb\x0d\x7a\xb7\xd1\xfb\xb1\x84\x59\x08\x3a\x9e\x08\xd2\x87\x05\x7a\x67\xc7\x61\xc7\x4b\x04\x7e\x7a\x25\x5c\x79\xbd\x92\xcb\x7e\x42\x21\x30\x25\x3b\xf8\x0b\x17\xf7\x32\x2b\x01\xff\x76\xcb\xb0\xae\xd1\xda\xd6\x95\xbc\x29\x97\xf0\xbd\x5f\x9f\x39\xb0\x8c\xbb\x68\x39\x8f\xde\x77\xac\x7b\xdb\xe1\xaf\x27\xd0\x91\xc1\x39\x46\x70\x81\xc7\x0a\xe4\xc6\xa5\x8b\x69\x7d\xe0\x17\xe8\x6e\xcd\x19\x19\xee\xbd\x5b\xab\x9d\xd9\xb0\x9b\x6a\x0c\x50\x87\xde\xfd\x06\x96\x66\x63\xab\xe4\x15\xe4\x56\x28\x26\xe6\x23\xda\xb6\x6a\x62\x7e\x95\x6e\x62\x36\x34\xba\xd5\xa8\x37\xfb\x00\x5a\xc6\x48\x9b\xd7\xaf\x4f\x67\x8b\xff\x98\xfa\x83\x60\x3a\x0d\x86\x1d\x06\xd4\xca\x77\xc5\xfb\x8c\x17\xb5\x19\x99\xc0\x9b\x7a\xe0\xf8\x31\x39\x21\xa7\xe2\x19\xf3\xf0\x12\x35\x35\xa1\xd0\xac\x33\x44\x6a\x84\xc2\xc7\x9d\xc7\x19\x42\xa6\x20\xaf\xc2\x43\x2e\x62\x31\x19\xe7\x70\xba\xe1\x77\xeb\xb7\xc1\x68\xb2\xd7\x9a\xd4\x3b\x0e\xa7\x44\xa1\x5f\x19\xcd\x00\x99\x44\x47\x0a\x64\x1a\xfd\x00\xf6\x01\x02\xb1\xa5\x5e\x5b\x09\xd9\x2b\xb6\x95\x90\x41\xf2\x1a\xb6\xba\x37\xde\x75\x69\xf7\xe2\xf9\x3e\x41\xe9\xe3\xae\x28\xbe\xd6\xaa\xc7\xca\x53\xde\x33\x8c\x57\x1c\xaa\x4b\x4e\xbf\x37\x35\x30\xe5\xc7\x27\x1f\x1f\xe4\xe3\x84\x21\xfb\x58\x01\xc1\x32\x99\x70\x54\x3b\xe8\xd2\x56\xa6\xac\xd8\x4a\xf7\x2d\x65\xf6\x95\x76\x6c\x65\x7e\x04\x18\xa6\x93\x35\xee\x9c\x13\x4c\xb0\x3b\x8f\x80\x9a\xb6\x98\x05\x11\x50\xf1\x4e\xe2\x64\x14\xa9\x65\xe3\xc3\xc6\x29\x49\x4e\x12\xc3\x76\x12\x99\x83\x17\x8a\x99\xf8\xae\xf8\xeb\x3e\x3c\xc4\x04\x83\x84\xe6\x4e\x60\xb9\x8f\xf7\x6a\x18\x7f\xf4\x3e\xaa\xb7\xc7\x7d\x0a\xd8\xe5\x06\xd0\x47\x99\x9d\x0e\x74\xb3\x8a\xf7\x4f\xdb\xbe\xf0\x82\x57\xea\x05\xd5\x17\x38\xe5\x82\x57\xb6\x0b\x5e\x25\x2e\x78\x65\xd8\x2f\x85\x79\xbd\x07\xa7\x47\x8f\x25\xab\x1a\x19\xc8\xaa\x90\xe1\xa2\x52\xdf\x83\xa5\x9b\x30\x2f\x17\x76\x5e\x73\x75\xa1\x7f\x16\xea\x24\x64\x03\x78\x0f\xed\x27\xa9\x2a\xc0\xf2\x44\x1f\x4d\x6e\x35\x4a\xd2\x4e\x65\xf5\x5c\x32\x48\xc6\x52\x3a\xf7\xa4\xf4\x2c\x9e\x53\x37\x6f\x26\xa7\x65\x31\x56\x1a\xcc\xca\xe4\x34\x55\xcf\x9d\xaf\x69\xa8\x5c\x64\xbb\xaf\x5a\x55\x63\xa9\xc9\xbe\x34\xa7\x38\xd9\x40\xf0\x64\x82\x1f\x04\x51\xaf\xa0\x7a\x7c\x3e\xbf\xd5\x21\x43\x39\x93\x0a\x57\x4c\x9a\xf3\xc9\x14\xc8\x68\x0a\xcc\xec\xab\x32\xc8\x14\xcb\x48\x20\x63\x60\xae\x29\x0c\xa8\xe4\x1e\xfa\x82\x8f\x85\x41\x55\xb8\xf6\xf7\xc2\xfd\x66\x9a\xf1\xf4\x69\x51\xb5\x29\x75\x5a\xe7\x9d\xe1\xa6\xc9\x6e\x9d\xea\x89\xde\x20\x77\x1a\x74\x86\xe5\xbb\x40\xd0\xfd\x79\x7c\xd8\x78\xec\xbb\x9f\x24\x7c\x4d\xbc\x35\x50\xff\x8c\x87\x3d\x32\xe9\xcc\x88\x6d\x16\x30\x43\xc1\x2a\x7e\xa5\x94\xc9\x15\xbf\xbc\xe5\xe2\x91\xb8\xe8\xae\xb4\x35\x51\x73\x56\xd3\x35\xbe\xf8\x4b\xcc\x73\x5d\xfe\x59\xf1\x09\xc5\x02\x7c\xa5\x33\xa8\x1c\x79\x83\x5a\xcc\x0d\xe4\xb3\x8f\xb6\x89\x38\xa3\x03\x40\x77\x5d\x90\x10\x02\xf8\xd7\xb3\x79\x4b\x50\xdb\x46\xa5\x79\x00\xff\x86\x5e\x99\x85\xf0\x46\xbe\x13\x2e\xdf\xe6\xf1\x68\x98\x02\x43\x47\xdf\xdd\xec\x6f\xb5\x70\xa7\x9b\xfd\xad\x16\x6e\xb9\x9c\xbd\xa5\x2b\xab\x35\x24\xd1\xea\x6c\x90\xd5\xd9\xd4\xb3\x36\x60\x75\x3b\x80\x90\xf2\x89\xdb\x37\xd6\x35\xda\xca\x8b\xe7\xee\x77\x22\x48\x31\x6a\x82\x07\x28\xea\xe3\xa1\x84\x23\x76\xbd\x46\xa6\x3d\xd5\xe4\xb6\xb0\x07\x1f\xe2\x29\xd2\xcc\x0a\x3e\xe4\x05\x68\xc1\xec\xe0\x43\x51\x86\x34\x53\x83\x0f\x9b\xb9\x6c\xaa\x71\x63\x7e\x03\x8d\xf9\x8f\xb0\xa9\x06\x7e\x1e\x1b\xea\xb1\xec\x40\x84\x94\x7f\x9c\x62\x4d\x3d\x16\x9c\xd8\x74\x43\x3c\x1c\x76\x42\xdf\xe3\xc6\x53\x79\xc0\x3d\x00\xfe\x67\xf1\x8b\x20\xac\xe8\x64\xa6\x97\x8d\x0e\xb1\xd2\xd1\x6f\x32\x7a\x78\xa0\x05\x82\xe1\xd0\x9f\x7c\xa8\xb7\x82\xf9\x94\xea\xe2\x55\xa9\xed\xab\xaa\x13\xee\x18\x5f\xe9\x76\x07\x1b\x05\xa9\xcb\x15\x42\x3b\xee\x35\x81\x49\xd9\x20\xeb\x1e\x82\x3d\xb2\x49\x0f\xd0\x11\x45\xc4\x7a\xaf\x55\x64\x4f\xaa\x28\xe6\xc0\xa9\xe7\x17\x71\xda\x14\xe5\x93\x3e\x8b\xcc\x58\x54\xaf\x73\xa9\x46\x74\x0e\x6b\xdb\x05\xfc\x7b\x9d\x80\xaf\x09\xda\x0e\xd8\x19\x96\x02\x98\x44\xe0\xed\xbe\xf1\xce\x8a\x67\xcf\x5f\x90\x4b\x6f\xf1\xec\x8c\x5c\x79\xa5\xea\xd5\x6f\x18\x5c\xc0\xca\x55\xaf\x76\x77\xdd\x73\x66\xca\x7b\x03\x49\x80\xf8\xed\xd2\xad\xd2\xe7\xea\x6f\x9d\xd3\xf6\xcc\x56\x4f\x3a\x6e\x74\xa9\xf4\x27\x45\xfe\xf9\xfc\x85\xfb\xec\x0c\x31\x60\x52\x6a\xe0\x48\x17\xf9\xa7\xa8\x81\xa1\x93\x70\x93\xb6\x8a\x5b\x89\x8a\x80\x30\x1d\xb7\xf5\xbc\x16\x52\xe2\xeb\x78\x5c\x93\xb4\x55\x04\x7e\x24\xd2\xe7\x16\x15\x63\x96\x89\xc0\xdf\x92\x11\x57\x85\x5d\x2a\x72\xbe\xf7\x34\x71\x8f\xfc\x1e\xc3\x97\xf8\xe0\xbd\xcf\x10\x07\xa1\x5b\xd5\xec\x42\x0c\x46\xd0\x2c\xe2\x65\x1b\x08\xc8\xef\xba\x98\x10\xf8\x99\xb8\x0b\x27\x18\xea\x51\xd8\x3d\x85\x4f\x63\x13\xa2\x4b\xeb\x36\xf4\xda\x1e\xaf\x77\xbf\x4e\xbc\x5e\x17\xd5\x92\x43\x78\x21\x5e\xd1\x7f\x55\x31\xe7\xcd\xb3\x1c\xed\x78\x1f\xa5\xb1\x63\xd2\x04\x3b\x06\xcc\x5d\xf6\xee\x3b\xe7\xd7\x57\x54\xf7\xfd\x94\x5e\x60\xf7\x85\x5b\x9d\xd1\x65\x77\xbb\xbc\xb3\xe3\x7c\x54\x16\x13\x48\xa1\xfd\xa4\xff\x76\xc9\x6d\x54\x52\x2c\x52\x60\x94\xfc\xa4\xfe\xa2\x5a\x11\x16\x50\x96\x21\xe7\x82\x75\x25\x79\xcc\x25\x1f\xf7\x9a\xa3\x89\x3c\xba\xb3\x73\x87\x95\xd5\x63\x90\xef\xfb\x29\x7e\x04\x12\x24\xf1\xd5\xfe\x08\x86\x2a\xfc\xf6\x89\x21\x61\xfd\x01\x37\x1c\xd6\x97\x90\x9f\x46\x9f\x29\xe4\xdc\x80\xb9\x1b\xed\xba\x2c\x02\x29\x1d\x3e\x9b\x2e\xaa\x1d\x88\xba\x76\xab\x7f\x50\x41\x9a\xdd\xd6\xce\xce\x7c\x67\x27\xfa\x09\xb9\xc3\xf4\x26\xc7\xb4\xab\x1f\xb2\x15\x9c\xc0\x2f\xce\x82\x19\x28\x08\x71\xd9\x36\x3a\x23\x14\x90\x34\xc5\xc2\xe0\xb7\x55\xa8\xc1\x47\xc3\x59\x71\x1a\xdc\x53\xad\x5c\x5b\x65\x9f\x2d\x9e\xed\x3f\x77\xc6\x82\x02\x6f\x9f\xaa\x46\xe3\x85\xae\xd9\x94\xf6\x7e\x7c\xa1\xea\x36\x06\x4d\xcb\xa0\x68\x95\x80\xec\x75\xc2\xc9\x5e\x71\xa9\xfa\xd3\x4b\xdc\x5e\x32\x28\x13\xb9\x4a\xc4\xb2\xf5\x07\xe0\x27\x24\x2a\xc9\xb7\x30\x56\x55\xe8\x6a\xbc\x6a\xf5\xcf\x84\x6e\xf7\x1f\x23\x4f\xf8\x67\xef\x4f\xd3\xca\x58\xfd\x9c\x7c\x56\xbc\x77\xe4\xf3\xe3\xad\x1a\x37\x98\x31\x6e\x08\x6e\x96\xc6\x18\x33\x21\xcd\xbf\x4b\x4a\x2c\xdd\x2b\x34\x3a\xdf\x5b\xd9\xbc\x75\x9b\x48\x4e\xea\x69\xed\xee\x36\xb3\x7b\x6c\x7a\x73\x2f\xd4\x9b\x3b\x34\xdd\x5c\xc4\xdc\x9d\xb0\x9a\xa8\xfd\x36\x91\x73\xdf\x5b\xc9\xb9\x6d\x4d\x59\x56\x6c\xdf\xc0\xbf\xfd\x98\x91\xb6\x71\x6d\xdf\xdb\xb8\xb6\x37\xbb\xd8\x9f\xe6\x08\x59\xd5\xbd\x17\x70\x74\x42\x86\xe1\xfd\xa7\x2d\x5a\xd6\x5a\x05\xde\x19\x3d\x2c\x3a\xa1\x83\xeb\x12\x64\x9d\xe1\x4b\xfd\x99\x3a\x3d\x4c\xa1\xa3\x0d\x5d\xd8\xac\x8b\x90\xdb\x4f\x77\xbe\x3f\xc4\xc2\xc7\x54\x4b\x8e\x68\x18\xbe\xa0\x83\xd9\xb8\x4f\x7e\x61\xdb\x83\xb6\x0d\xaa\x1b\x11\x10\x72\x86\x74\x29\x1f\x1d\x38\x5f\xe8\x9e\x64\xdf\x2f\x0f\xe9\x59\xed\x00\x80\x67\xf0\x1d\x11\x6a\xc6\x76\xcf\x5b\xf5\x94\xba\x41\x56\xf0\x32\xd0\x9a\x5b\xfd\x8f\x51\x68\x53\x41\x05\x22\x52\xe5\xe4\x60\x33\xc7\x64\x5c\x74\x6e\x64\x05\xf7\xd2\x27\x32\x05\x3d\x44\xb9\x17\xef\x9c\x0e\xf3\x6e\xb9\x44\x74\xfd\x81\x1d\x7d\xc1\x95\x08\x4d\xfb\xd8\x55\xd4\x96\xe7\xfb\xcf\x9c\xf2\x2f\xa5\xe7\xb8\xf5\xbc\xbf\x10\xea\x44\x4a\xf9\xdf\x78\xd1\x83\x66\xd1\xfb\xb5\x54\x69\xee\xd2\xff\xba\x94\xf5\x05\xb1\xca\x7c\x80\x9c\x0e\x5a\xcc\x99\xbb\x35\x19\xcd\xb8\x4c\x88\x1b\x4f\x14\xe6\xaa\xdc\xc8\x59\xf2\x2e\xe8\xa1\x17\x99\x8d\x17\x10\x65\x5c\x4f\x7a\x88\xf3\x09\x17\xfe\xd5\x6e\xb7\x0b\xfa\xcb\x27\x0f\xb2\x41\x9f\x2c\x0a\xe4\x47\xf9\x63\x09\x3f\x94\x66\xb9\x90\x60\xda\xed\xa7\x07\x79\x86\x4b\x23\xc2\xae\x44\x12\x42\xac\x47\xa5\x52\xa9\x20\x0c\xcd\x7f\x81\xcd\xe9\x07\xaf\xfc\x13\xf9\x4a\xff\xd1\xb1\x69\x98\x62\x7a\x95\xd0\x65\xf0\x0d\x3d\xff\xea\x3e\xfb\x8a\x52\xae\x76\xa2\x5c\x7b\xfe\x83\xfb\xec\x87\x15\x9d\xb7\x71\x9e\xdf\x23\x52\x00\x6d\x22\xb4\xca\xd0\xff\x9d\x73\x30\xd7\xe4\xab\xb2\xe0\x96\x78\x73\x55\x64\x79\x41\x99\x94\xbd\xcb\xbe\x57\x6f\x38\x2d\xb7\xfa\xd7\xb5\x0f\x8e\x73\x88\x5a\x2a\x7a\x3f\xb8\xe4\xaf\x6b\x3c\x0e\xae\xf6\x95\xc1\xe4\xcd\x39\xf7\xa9\xfc\x93\xb0\x6d\x6f\xa5\xcc\x38\xc3\x2c\x78\xcc\x24\x5c\x19\x9c\x63\x6c\x81\x52\x2c\x1c\x45\xcd\x80\x01\x84\xed\xe2\x79\x91\xa6\x57\x28\x20\x8c\x29\x1f\x92\x87\x87\xe1\xcb\x06\xc7\x23\xa5\x67\x38\x05\xce\x80\x73\xd8\xf4\xfd\x65\xa1\xd2\xf4\xda\x02\x6f\x57\x65\xaf\xc1\xea\x70\xb6\xe7\x74\xc4\x79\xad\xc0\xd8\x9f\xc0\x63\x60\x45\x64\xf4\xd7\x56\x73\x85\x14\x35\x1a\x67\x0b\xcc\x69\x03\x3b\x4b\x66\x6a\x40\x0b\xd9\x95\x7d\xfc\xdf\xb6\x06\xf4\x77\xac\x01\xfd\xdd\x8c\x64\x82\xc0\x66\x3a\xee\x19\x78\x8f\xfb\x10\xa3\x11\x42\x00\xc7\xc0\xc3\x91\x23\x43\x6f\xaf\xb4\x0f\xe4\x2b\x65\x32\x86\x7f\x9c\x7c\x05\xb9\x57\xca\x82\x7b\x85\x05\xf5\x03\xbd\x72\x89\x2c\xbc\xbd\x17\x64\x09\xbb\xec\xfd\x3f\x4d\x9f\x2c\x15\x64\x0b\x09\xc7\xbd\xc9\xe0\x7d\xff\x14\x06\x6f\x2a\x13\x4c\xd9\x6b\xbd\x36\x41\xeb\xdf\x6a\x2b\x47\x60\x83\x54\x9a\x06\x6b\x98\x3c\x2a\xa4\x6b\x93\x3b\x60\xad\x77\xed\x36\x9c\x5d\x37\xf2\x17\xd7\xa9\x4f\xdd\x89\x4f\x7b\x1d\x5a\x03\xb6\xad\xb6\xf5\x1c\x94\xbb\xd6\x60\x6f\x6b\xc0\xb6\x35\x60\xde\x1e\x51\x6e\xf5\x3c\x88\xa5\x6f\x7d\xce\x63\xb9\x50\x6e\x12\x69\x9f\x5a\xd1\x1e\x6a\xaf\x98\x59\xd6\x67\x5a\x1e\x0d\xe7\xb3\x0f\xa0\xea\xad\x1d\x3a\xcf\xc4\x86\x77\xf3\xd9\x34\x68\xad\x9f\xa4\x81\xb5\x3f\xce\x87\x0d\xbf\x3e\xb8\x44\xd3\xcf\xfa\x54\x21\xd0\xf7\xb5\x29\x51\x3a\x93\xd1\xdd\xbb\xe1\x39\xac\x64\x6b\x47\xc9\x4b\x53\xc7\x9a\x77\xdd\x80\xbb\x6e\x10\xdd\x3d\x14\x6f\x8c\x3b\x89\xb4\x61\x8d\x7c\x44\xe2\x7e\x9f\xee\xfa\xc9\xe6\x32\x7b\x80\x67\xd6\x7b\x71\xd1\xb1\x13\xbf\xb4\xd2\x0e\xbf\xa6\xb2\x24\x68\x57\xdc\xd0\x27\x66\x26\x8a\xb3\xb9\xc7\xcc\xa5\x33\x3c\x65\xe6\x4a\x59\x4e\x33\x73\x2d\xa3\xff\xcc\x9a\x68\x62\xc4\xd4\x01\x09\x02\x0e\x20\x71\x47\x96\xf7\x2d\xee\x31\x6d\xa0\xc7\xd4\x08\xfd\xc1\x96\x7a\xda\xd1\xf5\x12\x65\x1e\x1e\x50\x68\x59\xc3\x7d\x97\x9b\xdc\xc3\x8f\xde\x53\xe9\xc3\xbb\x11\x7c\xd6\x4d\x40\x8a\xd6\x95\x6e\x2e\xa8\xf7\x33\xe9\x16\xfa\x4c\xf9\x1a\xda\x19\x13\xfa\xa4\x0d\xf4\x77\x76\x90\x69\x28\x60\xe3\xb3\xee\xe7\xa4\x6d\x20\xa1\x60\xad\x46\xf2\xee\x04\x6b\xf5\x84\x1e\x55\x58\xab\xc3\x88\xf1\xcc\xcf\xc9\x5a\x3d\x60\x23\x72\x53\x1d\x08\xd6\xea\x1b\xa0\xc4\x0c\xdd\xc1\xf5\x4d\xcd\x0b\xe9\xbf\x04\x6b\x35\x1c\x8c\x58\xab\xe1\x17\xb2\x56\x53\x89\x7f\xdb\x17\xfe\x3e\x29\x0b\xc7\x78\x08\xfa\xc0\x43\xd0\xcf\xc7\x43\x30\xf3\xfa\xf6\x48\x5f\x3e\x49\x64\xe4\xa0\x5f\x03\x18\xb2\xd9\x66\x4e\x34\x13\x8d\xf4\x2d\x6d\x4c\x8d\xe7\x9d\x67\xba\xc4\x38\xfe\x7b\x46\x41\x8d\xb5\x39\xa0\x6a\x62\x81\x2e\x3f\x05\x20\x30\x39\x70\x5a\x1c\x11\x7a\xe8\x02\x44\xba\xd3\x04\xbe\x12\x40\xb2\xc9\x60\x66\xf6\xf9\x0c\x6a\x41\xd4\x3f\x42\xa3\xb7\x54\x68\x74\x3c\xa6\x1c\xca\x9c\xb5\xa9\x97\xcc\x64\x2a\x6e\x47\x9c\xcc\x15\x8e\x8f\x06\x77\x07\x0a\xb1\xe8\xc2\x48\xbb\xbf\x36\x5b\x4e\xa1\xd7\xec\xf6\x5d\x2c\xcb\xbf\xbf\x1c\x3e\xdf\x57\x7e\xd3\x5f\x2e\x19\x16\xa3\xb2\xb2\xbe\x7a\x68\x8d\x21\xcb\xf0\x16\x0e\x39\xa2\x27\x36\x9a\x91\xb3\x10\x79\x3a\xa3\x31\xa0\x8b\xbd\x7c\xa6\xf2\xee\xab\x8c\x54\xff\x36\xee\x3b\xd1\xba\x08\x53\xba\xaa\x27\xfe\xdf\xf1\x5e\x43\x96\xcb\x66\x44\xb7\xa1\x24\xba\x1d\x6b\xb4\xaf\x61\x8c\xe8\x76\xfc\x48\x9e\x57\x7f\x7d\x9e\xd7\xd0\xcc\xf3\x1a\x63\x64\xbd\x89\x69\xf7\x47\x36\x02\x56\x4f\xdd\x50\x30\x5f\x2d\x81\xd0\xa7\x32\xb4\x46\xb0\x7c\x6d\x2b\x18\xe4\x3e\xb7\x0f\xec\x97\x56\x66\xcc\x47\x7c\x95\xa9\xba\x6e\xd1\xed\xc3\x04\x1d\xaa\xa4\x57\xc5\x8f\x11\x50\x97\x32\x60\xc7\xa7\xcc\xb2\x77\xab\x3e\xe7\x0a\x3d\x11\x98\x6c\x65\x77\x6d\x0e\xd2\xa6\x5a\x4a\x32\x89\xe2\x4c\xbe\x31\xea\xf1\x63\xd7\x0c\x3f\x90\x10\x1b\xd6\x22\x14\x05\x1a\xd1\xe9\x1a\x34\xa2\x8f\x20\x09\xad\xca\x3b\xdf\x88\x09\x54\xe5\xfc\xd4\xf9\x40\x73\xd0\x7e\xfa\x66\xda\xcf\xb4\xae\x58\x00\x5d\x7d\x1d\xd0\x35\xa5\x05\x2b\xc6\xaa\xbf\x39\xed\x27\x27\xf7\x6c\xa9\x98\x05\x63\xfa\x03\x62\xb4\x9a\x0a\xfa\xa4\xff\x14\xf6\x9d\x74\x8c\x45\xab\x09\xe2\x11\x38\x92\xec\xf6\xde\xf3\xd1\x59\xdb\x80\x91\x87\xe0\x72\x63\x78\x47\xff\x3b\xc2\x3b\xfa\x9b\xc1\x3b\xfa\xff\x00\xbc\xa3\xe1\x9a\x8d\x4c\xa5\xc8\x82\x65\xd8\xe2\xf4\x1c\x7d\x78\x8f\xc4\xd7\x1c\x34\x91\x66\x03\x04\x11\x3a\xcb\x28\x5b\xbb\x35\x59\xb4\xec\x11\x9f\x78\x4a\xca\x45\xd6\x88\x4f\x5e\x80\x16\xcc\x8e\xf8\x14\x65\x48\x3b\x35\xe2\xb3\xcd\x35\xd6\x34\x96\xc7\x66\x2e\x35\x70\xda\xc4\xcd\x28\x8f\x16\x78\x25\x87\xe9\x9d\xd4\x02\xaf\x52\x22\x39\xaf\x1c\x74\x60\xbd\x05\xe3\xf8\xf6\x2d\xd7\x55\xb6\xcb\x55\x96\x8c\x2d\x39\x1a\x1a\x76\x26\x26\x0b\xab\x58\x04\x99\xc4\xc0\x8c\xa8\x80\xc1\x30\x8c\xf8\x56\x72\x0d\x02\xe7\x6e\xd9\x2f\xc6\xfc\x01\x04\x04\x52\xd3\x71\x3a\x58\x04\x12\x39\xd3\xe8\x60\xb6\xee\x9c\xfa\xf5\x4f\x35\xdc\x8e\x21\x98\x87\xde\xd9\x25\x15\xb8\xe9\x72\xff\x8d\x45\x61\xd6\x75\xa5\x8c\xde\xa8\x38\xf2\xdb\x8f\x54\x54\xab\x33\x07\xfb\x75\xa8\xa4\xc1\x15\xa9\xa8\x33\x88\xfd\x66\x92\x0a\xfd\x57\x43\x2a\xc8\x58\x9d\x72\x6d\x57\xab\xc3\x7e\xa7\xd7\x49\x5e\x27\xbb\x4e\xf2\x3a\xb1\xbe\x29\x21\xb3\x1d\x7f\x34\xa0\x5b\x57\xb8\xec\xd0\x11\xbb\xbe\x2e\x96\x4b\x84\xfe\xd5\x08\x7e\x0b\x76\xf1\x6b\x77\x37\xf6\x1d\x4a\xd4\x40\x5c\x14\x0d\xdc\x4a\x28\xcf\x18\x80\x42\x94\xda\xce\x02\x3f\xe8\x92\x10\x52\x09\x92\xce\x63\xb6\xf5\x57\xea\x90\xa7\xbe\x5f\x23\x48\x93\xc9\x7e\xfd\x08\xf9\xf4\xd5\x3f\x74\xc1\x1f\x4e\x23\x56\xde\xd4\x98\xf6\xa5\x29\xc5\xbe\xb7\x5e\x65\x14\x23\x40\x31\xf4\xfc\x84\x6e\x3c\xbd\xed\x54\x34\x7c\xbc\x96\x39\x01\x10\xa4\x27\x68\x67\x67\x87\xbd\xf0\x48\xb3\xc9\x19\x12\x0a\x57\x85\x5d\x7e\xa4\x47\xbb\xe2\xd0\x05\xda\xdd\x2d\xfc\x55\xa8\x14\xae\xb6\x4a\x5b\xa5\x08\x5b\x2c\xb0\x44\x88\xb0\x2c\x22\xc4\x09\x8c\x90\xf3\x14\x64\x41\x63\x1d\x89\x35\x08\xe5\x68\x45\xe6\x41\x85\xa9\xff\x6a\x67\xa7\xad\xbb\xd3\x39\x37\xed\x3e\x15\xe8\xf9\x9f\xab\x39\xdc\x8b\xa3\x71\xbd\x89\xc9\xe3\x7b\x3f\xc5\x42\x06\xa2\x53\xe5\x44\x30\x81\x68\xb6\x44\x9b\x64\x7f\x10\xd5\xe8\x7e\xfb\x43\x03\x5a\x64\x8f\x07\xba\x39\x8d\x3f\xc9\x3e\x7d\x92\xea\x93\xe8\x24\x70\x1d\xb5\xca\xba\xd5\x44\xc1\x82\x14\x82\xa2\xe9\xe9\x1a\x21\x23\x6d\x4f\x41\x0c\xe6\x2a\xd6\x46\x30\x69\x86\x51\x7c\x6e\x73\x91\x9d\x91\xda\x5c\x66\x67\xa4\x4e\x0a\xe4\x88\x85\x7c\x0e\x63\x38\x5c\xb0\x34\x0b\x03\x52\x89\xfb\xde\x1b\x92\xaf\xb6\x06\x4f\x59\xee\x3e\x2d\xe1\x79\x6f\xf1\x15\xf9\x9a\xb3\xd2\xd6\xaa\x3e\xdb\xa1\xbd\x9e\xd3\x92\x5c\xaf\x20\x0e\x2c\xe8\xe2\xec\xc3\x97\x25\x5d\x9c\x7d\xf6\x2c\xda\xde\xef\x7b\x43\xba\xef\x38\x68\x59\x7b\x05\x19\x98\xc1\xb0\x73\x14\x42\xea\xf1\x07\x78\x98\x90\x97\x71\x47\x65\xd0\xd1\x1d\x13\x7a\x99\xb3\xec\xe1\xa1\x35\x6a\xce\x41\x80\xde\x13\x5f\x4e\x98\x40\x4d\xb7\xaf\xc9\x28\x0c\x3f\xd1\x6d\x38\x50\x2b\x7e\xce\x59\xf1\x92\xee\xa2\x54\x91\xfc\x86\x9b\x2a\x60\xe3\xf9\x82\x7e\xd7\x75\x85\xa1\x21\x10\xf8\xa3\x74\xd5\x82\x5d\x7f\xe0\x8c\x63\xc5\xc0\x08\xd1\xe5\xd0\xa4\xe5\xd2\xaa\xda\x74\xbe\xb1\xb5\xc8\x17\x4b\x54\x0b\xa3\x98\xfb\x44\xe1\x02\xae\x88\xc1\x62\xeb\x96\x38\x86\x3f\x50\x2d\xf2\xcd\xd1\x77\x54\x9c\xa6\xcf\xef\x8d\x16\x7f\x27\x52\xd7\x4c\x31\x74\xb1\xf2\xc2\xcb\xac\x67\xbb\x25\x92\xef\xb4\x3a\x52\x07\x4b\x4f\x91\x33\xd4\x99\xcf\x60\xb7\xc4\xac\x02\x7d\x3d\x85\xf4\xdb\xb1\x21\x7c\x15\x8f\x27\x0f\xe3\xa8\x14\x5c\x4b\x3c\x22\x9f\xcc\x0f\x0f\xdb\xca\xfc\x4d\x99\xda\x44\x99\xc7\xcd\x5a\xf5\x4d\x2c\x96\xd1\xf8\xec\xae\xd9\xec\x68\xd2\x07\xce\xa6\x03\x61\xf3\x80\x1d\xa0\x4f\xbe\x96\xf9\x70\x9b\xab\xb4\xe7\xf4\x64\x77\x11\xc5\x49\x7e\xff\x1b\x31\x07\xff\x3e\xd5\x9d\x28\x91\xbc\xdf\xed\x56\xb8\x82\xd2\xe3\xcc\xd1\x29\x13\xfc\x89\x6f\x0b\x62\x78\x13\x77\xb5\x7e\x77\x71\x69\xff\x3d\x81\xaa\xf2\xc1\x0e\x44\xfe\x3b\x00\x91\x7f\x4c\x01\x22\xff\xdd\x04\x44\xfe\x3b\x18\x05\x0c\xb6\x1d\x54\x24\xb9\x94\x6e\x82\x51\x91\x06\x9a\x28\xa7\xfb\x93\x77\xbc\xb3\x73\xb2\xb3\x73\x7e\x70\x5d\xab\x58\xd5\x80\x4c\x25\x40\x6e\xaa\xdf\x16\x15\x86\x01\x4b\x96\x15\x86\x02\x4b\x20\xc6\xbf\xc2\xa0\x57\x57\x4c\x5c\x97\x00\xdb\xc7\x2a\x8a\xfa\x27\xfb\x45\x17\x2b\x1d\x51\x5d\xc8\xc6\x0b\x00\x55\x2a\xd5\x0e\x4e\x1f\x1e\xae\x9d\x0f\xcf\x96\xbb\x1f\x30\x40\x2b\x09\xdd\x4a\x1f\x42\xf1\xc3\x33\xa7\xbc\xbb\xb4\x15\xa8\x55\x4e\x11\x52\xfd\x03\x15\x84\x07\xa2\x7f\x27\x39\xfb\xb7\x5c\xa9\xd8\xe9\x02\x05\xe6\x8c\x36\xf8\x11\x01\x60\x86\xa2\xc1\xf3\x9c\x0d\xc2\x98\x45\x6d\xce\xa3\x36\x2f\x1e\x1e\xde\x03\x5d\x77\x2a\x18\xfa\xc3\xc3\x20\x76\x7a\xa0\x9e\x7e\x12\x24\xf5\x38\x52\x7a\x1c\x49\x3d\x8e\xb4\xae\x22\xb9\xa7\xf6\x6e\x67\x47\xfe\x1c\xe8\xd7\x1f\x24\xae\xaf\x1d\x21\x83\xc4\xf5\x07\xe6\xeb\xb3\xc4\x44\xad\xf3\xae\x72\xdb\x7a\xb1\x41\xac\xd8\x20\x5e\xac\xe9\x35\x1f\x1e\x42\xd0\x9e\xe8\xb8\xd3\x75\x06\xc2\x00\xab\x2c\xaf\xe7\x77\xab\x33\x8f\xab\xfa\x1a\x54\xcf\x9f\x54\x3a\x5e\xdf\x97\xc7\x5b\x52\x93\xe2\xfa\x90\xa5\xf2\x67\x1c\x20\xfe\xb3\x72\x08\xbc\x7d\x5f\x14\xb5\x0a\xbc\x7d\x7f\x68\x41\xdc\x80\x75\x12\xfa\x7c\xb3\x27\xaf\x21\x33\x20\xd5\xc7\x27\x84\x88\xac\x72\x9a\xf2\x46\xfe\xd8\x08\x6d\xfe\x3f\xd9\xf8\xf0\x7e\xab\xe3\x0b\xe9\xbe\x9f\x40\x86\xd7\x15\x16\xad\xac\x05\x13\xfe\x43\x1c\x3f\xfb\xe3\xcb\xd2\xc1\xc7\x4a\x89\x0e\x63\x52\x7f\xbb\x8f\x90\xe1\x63\x6d\x33\x4c\x78\xf2\xd6\xdb\x2e\xf1\x48\xe7\xf5\x44\x31\x3b\x34\xbc\x99\x51\xb3\xef\xd3\xa5\xa9\xfa\x97\x71\x5a\xd9\xd4\x3e\xbf\xf8\xb3\x45\x59\xc4\x53\xe4\xaf\x44\x16\xd3\x5f\x76\x6c\x70\x55\xd9\xc2\x9b\xc0\x29\x8b\xbb\x10\xd7\xbb\xe2\xd9\x3a\xc6\xfb\xc0\x73\x2b\xb8\x52\x3c\x88\xfb\x1d\x29\xf0\x37\xa0\xb2\x15\x8d\x9e\xaa\x0c\x1b\x0d\x48\x3d\xee\xcc\x89\xab\xb8\x6b\x14\x36\x69\xca\x31\xe5\xfa\x05\xdb\x64\x7f\xf0\xfe\x8a\x9b\x29\x54\x41\xda\xfa\x50\xb3\x36\xdb\x6b\xfa\x3d\x8f\xa5\xac\x24\x2c\x65\xd5\x1f\x6c\x64\x01\x96\x11\x53\xfa\xc2\xbc\x34\x29\x03\x66\x28\xbb\x2e\x12\x4a\x13\x10\xd1\xa1\xbb\xa0\x36\x73\xd8\xf6\x16\x60\xa2\xab\xc7\x74\xf0\x76\xe9\x5e\x5c\x0e\x1a\xa3\x90\xde\x18\xb8\x66\x4d\xa3\xc9\xb2\x04\xf0\x29\x02\x97\xa7\xa1\xc4\x10\x00\xdc\xa3\x2b\x01\x9f\xf0\x0f\x86\xb9\xce\x8f\xa4\x3c\x50\xfb\x1c\xdd\x82\xca\xe9\xa9\x06\xc6\x81\x09\x0d\x03\x33\x30\x0e\x8c\xec\xe8\x0f\x39\xd0\x46\x94\xf5\x9e\x2f\xf4\x90\xb4\x93\x38\x0c\x80\xdf\x20\x37\xc4\x4f\x0e\x47\x43\x05\x7c\xb8\x00\x86\x65\x23\x7a\x37\x74\x26\x65\x4c\xf0\x1a\x19\x09\x18\x8f\x1c\x95\xbf\x69\xba\x20\xfa\xf9\xa7\x60\x80\x1a\x45\x1b\x2c\x90\x53\x7f\x26\x7e\x5f\x91\x1f\x4b\x80\x34\x48\xc5\xad\xe6\x68\xbc\x44\xff\xfc\x40\x7c\xf5\xbd\x21\xff\xba\x02\x0c\x22\xc5\xe1\x2f\x46\xc9\xe0\xef\xdf\x18\xf5\xdf\x8a\xe1\xa2\x45\xf0\xbf\x88\x47\xf0\x9b\xa1\xff\x93\xc7\x86\x86\x63\x16\xb8\xff\x85\x15\xeb\x7f\x69\xc5\xf9\x87\x07\xf2\xf0\x50\xb6\x42\xfd\x4f\xbb\xf5\x31\x2d\x50\xe0\x56\x3c\x1d\xf6\x9f\xfe\xe3\xb0\xff\x46\xaf\xfb\x70\x34\x3b\xc4\xd9\xbc\x12\xf8\xff\x7b\x65\x72\x0f\xdf\x0e\xa1\xd6\x2b\xf8\x76\xe4\x25\x9d\x55\xfb\x2f\x56\xe4\x98\x0d\xef\x09\xfb\x38\x65\x1f\x67\xec\xe3\x9c\x7d\x5c\xb0\x8f\xd7\xd0\xcc\x1b\x3d\xe8\xe1\x69\x12\x11\xd4\xac\x83\x4b\xe8\xf1\x15\x06\x58\xa0\xdf\xe7\x9d\x31\x66\xe1\x0d\xb9\x02\x0c\x85\xeb\xf2\xcf\x64\xff\xc5\xcf\x35\x43\x22\xc2\x9b\xfc\x8e\x6a\x08\xd5\x99\x7a\x43\xff\x4e\x0d\x79\xc0\x04\xcb\x14\x62\x80\x28\xa1\x7d\x34\xd8\xbb\x9b\x04\x33\x5f\xcd\x1c\x97\x8b\x96\x14\x86\xa4\x98\x4b\x65\x35\xb9\xec\xa6\xd2\x07\xb8\xe8\x28\x59\x31\xfc\x59\x1b\x21\x02\x38\x9e\x5a\xe8\x8a\x35\x75\x83\x3b\xca\x84\x09\xf3\x66\xee\x4f\x96\x1f\xb1\x5f\xf4\x5d\x31\x76\x2b\x92\x72\xd4\x7e\x02\xc7\x09\xc6\x38\xf1\x95\xd8\xc0\xa4\xd0\x82\xbd\x7a\x45\xde\x98\x43\x2f\xf8\x42\xad\xce\xde\x5b\xaa\x06\xf3\xb1\x8f\xdd\x9d\x23\x54\x7e\x34\x59\x08\x43\x29\xfb\xc1\x82\x23\x0c\x57\x01\x18\x82\x27\xbb\x48\x99\x05\x45\xfc\xef\xa0\x62\xb0\x86\xeb\xa7\x53\x31\x58\xe3\x15\x70\x20\x52\xab\x5a\x23\x34\x32\x58\x1c\x8e\x93\xf5\x8e\xf3\xb0\x38\x9c\x24\xeb\x9d\x44\x5d\x4d\xaf\x7b\x9e\xac\x7b\x9e\x83\x01\xe2\x34\x59\xed\x34\x07\x03\xc4\x59\xb2\xda\x59\xd4\xd3\xd4\xaa\x17\xc9\xaa\x17\xff\x00\x79\x04\x56\xc3\x37\x64\xed\xa4\x96\x1c\x9c\x0e\xd6\x24\x1c\x1c\x9f\xc3\xd4\xba\xd6\x7c\x18\xce\x77\xf1\x0e\x12\x44\xd7\x4e\x18\xcb\x20\xcb\xb0\x66\xd2\x64\x91\x65\xdc\x27\x2b\xde\xcb\x8a\x19\x04\x97\x87\xc9\xba\x87\xb2\x6e\x7a\xd2\xd0\x51\xb2\xea\x91\x0c\x9e\xca\xb8\xec\xab\x64\xdd\x57\x19\xd9\x58\xd6\xfc\x36\x6b\xca\x97\x31\xc4\x26\x9e\x08\x61\x4d\xa3\x30\x66\xc6\xc5\x6b\xb3\x05\x0c\x0c\xb8\xeb\xe4\x0a\x99\x5b\x01\xa9\x6c\xad\x54\xbb\x78\x33\x8f\x24\xdc\xc8\xc1\xb8\x91\x9f\x72\x63\x0d\xce\x0d\x1b\xe9\x46\x56\x04\xd5\xd5\xff\x49\xde\xd1\x95\x57\x27\x22\xe0\xe7\x2a\x33\xa4\x2b\x3f\xca\x5c\x0e\xaa\xd8\xcb\x64\x6f\x2e\x69\x6f\x30\xee\x06\x00\x96\xa8\x7c\x5c\xce\x8d\x57\xc7\x95\x9a\xdc\x49\x2f\xcb\xe8\xad\x94\xe1\x4e\x47\x4a\xd2\xcb\x74\x67\x47\xfe\x6c\xb9\x64\xa6\xfc\xf4\x5d\x32\x56\x7e\x76\x10\x0b\x46\xfe\xec\xba\x64\x19\x53\x94\x97\x4c\xd8\x3b\xcd\x4c\x98\x39\x15\xe4\x8e\x16\xf7\x4e\x9f\x9c\x02\xe0\xf0\xb9\xd5\xbd\x13\x62\x01\x5b\xc2\x0c\x80\xc9\xdd\x1f\x9c\x8a\x4c\x99\xca\xa9\x05\xa2\xe6\x3e\x2d\x99\xe6\x56\x24\xd3\x9c\xd0\xfb\x4a\x26\xd3\x1c\xd3\xa3\x4a\x32\xcd\x6d\x14\x19\x6c\xc3\x82\x8b\x27\xd3\xdc\xb1\xd1\xba\xa8\xde\x89\x64\x9a\x0b\x08\xbb\xbf\x75\xef\xae\x2f\x6a\xde\x2d\xfd\x97\x48\xa6\x81\x83\x51\x32\x0d\xfc\xc2\x64\x1a\x67\xb9\xb3\x23\xc0\xf3\xe0\x9b\x95\x1f\x24\x32\x8c\xb1\xc2\x54\x47\xe7\x4e\x1c\x6b\x0e\xce\x69\x2c\x47\xde\xa8\x54\x57\x4f\x33\x93\x74\xa8\x6a\xdb\xdc\x63\x32\x24\xea\xb4\x4d\xc1\xcf\xcf\xa6\xc2\x6b\xef\x34\xcb\xe2\xaf\xa7\xf0\x2c\x6b\x54\x02\xf7\x5e\x6f\x6e\xf6\x67\xb9\x00\x8a\xf6\xd1\xdc\x0b\x5a\xa0\xab\x5f\x7a\x6f\x34\x6b\xff\x95\x84\xe5\x63\xd6\x7e\x08\x99\x8b\x63\x87\x98\xaf\xa8\x43\x82\x33\xeb\x1f\xae\xe8\xfe\xa4\x88\xf1\xcf\xd3\x88\x18\xe6\x32\xdd\xf8\xbf\x50\x30\x9a\x33\x8a\x2e\xf3\x17\xe5\x43\xc1\xf3\x8b\x32\x0a\x03\xda\xb8\x3f\x05\x14\xd2\x4b\xfa\x96\x4c\xf3\x55\xa2\x13\x7e\x96\xaf\xa4\x96\xea\x34\xdf\xd9\xb9\xd2\xcc\xfb\x4b\x05\x8a\x38\xdd\xf1\x71\xc6\x73\x70\xc8\x84\xbd\x5f\x6f\xbd\xb3\x6a\x9b\xa7\xd5\xbc\x05\xfc\xbe\x8c\x64\x9f\x25\x5f\x14\xda\x2e\xe9\xb1\xfc\xa8\xb6\x9a\x1f\x85\xc7\x94\x43\x99\x8b\x54\xea\x25\x33\xf3\xa3\x7a\xd2\x77\xb3\x7a\x9d\x71\xe3\xbd\xc8\xe3\xd3\x4b\x66\x14\x9d\xc9\x8c\xa2\x73\x97\x47\x23\xc7\x17\x2a\x2d\x64\x15\x8b\x3c\x3c\x0c\x84\x01\x3f\xc5\x52\xbe\xbd\x44\xae\x27\xb9\xb4\xc5\xef\x58\x9b\x65\x62\x94\x53\x48\x8c\xd4\x65\x32\xca\x61\xd2\xdb\x34\x4e\xc6\xa4\x3f\xc9\xe8\x4d\x62\x2f\x7a\xc4\x3d\xf1\xce\xcb\xd3\x76\x6c\x81\xa3\x85\xf0\x6c\x06\xeb\xf0\xbb\x7c\x98\xee\x51\x6b\xd8\x23\x00\xe6\x34\x5f\xcf\x7e\x39\xc6\xe1\xf2\xde\xc2\x1a\x61\xbd\xa4\xdd\x9d\x55\x72\xc9\xfb\xd4\xad\x04\x17\xb2\xa6\x3f\x9e\x41\xc8\xe7\x34\x1c\x8d\xc1\xf1\x6e\x80\x0a\xe2\xcf\xff\x7d\x38\x9f\xc2\x15\x71\xe1\xad\x6c\xd1\xeb\x6b\x5d\x03\xf2\x8a\xa1\x12\xdd\xab\x92\x51\x0c\x95\x08\xde\x0c\x22\x8b\x91\x33\x54\xdd\xce\xcf\x78\xcf\x76\x95\xee\xba\x59\x24\x16\x5a\x1b\x65\x6b\x1b\x29\x0e\xb0\x88\xd8\x77\x6b\xc0\x83\x5c\x6c\xc3\x6c\x1c\x5a\xf1\x02\x3c\x3c\x28\xc9\x73\x5e\x94\x3c\x87\xfd\xb1\x9d\x94\x9d\x3c\x28\x55\xca\x2b\x14\xf1\x9c\x16\x87\x65\x1f\x32\x4c\x76\x2a\xeb\xf1\x4f\xf7\x40\x7e\xab\x88\x85\x8c\x96\x6c\x7e\x82\x63\x9f\x9d\xb3\xe7\xe5\x52\x89\x80\xa8\x03\x85\x40\x9f\x71\x8a\xe7\x30\x35\xf4\xe5\x79\x91\x73\x79\x86\x35\x6d\xa4\x86\x70\xc3\x4b\x28\x92\x2b\x51\xfa\x74\x7c\xde\xd3\x91\xe8\xa9\x2f\x7b\xea\xdb\x7b\xfa\xc5\x39\x7f\xfe\xe3\xcf\xb1\x8e\x9e\x25\x3b\xaa\xee\x23\x78\x59\xdf\x45\x29\xd7\xe9\x80\x60\x87\x32\x0f\x4b\x34\x8d\xc6\x4b\xae\x9f\xdf\x7b\xd5\xbc\xd4\x7a\x1a\xed\x9c\xd9\x3b\xec\x24\x68\xcc\xa1\xfd\xcf\x85\xf8\xfd\xc6\xce\x6e\xf0\x70\x36\x5a\xaf\x3b\x2e\x2a\x0b\x4e\x57\x19\xd5\x65\x34\xaa\x23\x31\xaa\x7f\xc3\x5e\xf4\xf8\x51\xfd\x92\x3a\xaa\x5f\x32\x25\x12\x67\x7e\x70\x56\x29\x76\x99\x3b\xcc\xe5\x84\x15\x1b\x0e\x6c\x17\x53\x98\x37\xca\xe6\xbd\x95\xd9\xbc\x0b\x2d\x9b\xf7\x36\x96\xcd\xbb\x78\x64\x36\xef\x72\xfd\x6c\xde\xdb\xec\x6c\xde\xf5\xb3\x19\xc1\x72\xad\xa4\x33\xc6\xd9\x99\x75\xb1\x3f\xee\x79\xd0\x0c\xf3\xfc\x24\x3c\xf5\x05\x9e\x8b\xcc\xf4\xea\x6e\xf4\x54\xd7\x58\x5a\xae\x01\x3b\xa1\x9c\x45\x19\x23\x62\x4d\x35\xfd\xee\xa3\x00\xc7\xa7\x88\x06\x7f\xce\xa4\xd7\xbf\x61\x54\xd8\x35\x51\xfc\xed\xf0\x01\x2a\x32\x71\xd8\x25\x41\x94\x8f\x8a\xc5\x5c\x73\xb2\xec\xa1\x74\x23\x93\x57\xde\x28\xf2\x28\x1b\x95\xdf\xbb\x60\xd6\xdd\x02\xe9\x25\x3d\x97\x9c\x17\xd7\xf3\xc9\x19\x53\x99\x9a\x4d\xce\x8f\xb4\x0d\x39\xe7\x9d\xe8\x98\xba\xe6\x60\x86\x81\xed\x4c\x60\xca\x53\xef\x59\xf3\xd4\x5f\x70\x67\xf7\xbf\x5f\xac\x48\x9f\x39\x59\x43\xf6\x31\xb0\x79\xbb\xad\xaa\xbc\xc4\x97\x2b\x93\x09\xb8\x50\xa7\xf0\x6f\x06\xff\x38\xc0\x5c\x3c\xa5\xfd\x8e\x5d\x69\xa1\x3b\x74\x73\x66\xaa\x93\x25\xab\x7d\x0f\x8e\xda\xaa\xec\x12\xdd\xb2\x79\x7f\x46\x80\x7c\x20\x28\xe1\xd8\xed\x16\x98\x7c\xf0\xbe\xde\x82\x9c\x0d\xa7\x5c\x82\xdc\x0e\x5e\x64\x7e\xc0\x11\x28\x2a\x9c\x3f\x2e\x51\x94\xf3\xcc\x15\x16\x40\xbd\xc1\xbf\x2f\x01\x99\x83\xa7\xcc\x67\x64\xc5\xb7\x54\x3e\x1c\x91\x14\x9f\x2b\x9f\xde\x37\xd5\x44\x55\xe1\x90\xbc\xb2\x40\xe3\x2d\xc8\xbd\x4b\x8e\xbf\x4f\x52\xfd\xc9\xdf\x9b\x54\xaf\xb8\xd4\x17\x74\x57\x10\xd9\x9e\xcd\x28\x67\xbc\x4d\xbf\x2e\x0e\xe9\x03\xc1\xec\xf1\x25\x7e\xf3\x59\x1e\xf9\xec\xb3\xd7\xe1\xdf\xbe\x78\x5d\x25\x8d\x3c\xf8\xee\xbc\x38\x56\xcf\x44\xba\x0f\xd6\xea\x4c\x05\xff\xc9\x31\xdc\xd1\xda\xa0\x7d\xa2\xa6\xd5\x17\x67\x85\x2e\xcb\x4e\x78\xb7\xa2\xfd\x41\xd5\xcf\xf0\x28\xd6\xf6\x1b\x42\xcd\x2f\x69\x35\xad\xae\xc3\x3c\x59\xf2\x56\x27\x5e\x3a\x26\x80\xd5\x7d\x97\xe5\x8f\xb0\xba\xe1\xb2\xb2\xf2\x83\xef\x98\x95\x1f\x6c\x96\x95\x1f\xfc\x03\x59\xf9\x86\x6b\xaa\x3d\xfe\xfc\xf8\x2e\x67\xf6\xf8\x53\x37\x98\x6e\xb1\x55\x60\x8b\x7e\x63\x56\xed\x16\xd9\x1a\xcf\x67\x9c\x7c\x92\xf6\x77\x36\xda\x02\xa3\xc1\x96\xb8\xa9\x82\xd2\xc9\x2f\xff\x4f\x77\x32\xdd\x41\x68\x82\xa4\xb0\x3b\x08\xf1\x14\xe9\x65\x39\x08\x79\x01\x5a\x30\xdb\x41\x28\xca\x90\x5e\xaa\x83\xb0\x27\x1c\x84\xd8\xf2\x61\x18\x74\x86\xa9\x8b\x88\x39\x88\x20\x12\x08\xea\x71\x81\x20\xcb\x6d\x18\x0f\x67\x69\x60\x38\x4b\xd2\x6d\x48\x55\x38\xa6\xf6\x0e\x40\xa6\x90\x5f\xbb\xf2\xeb\x93\x60\x22\x8c\xeb\x93\x3e\x08\xa9\x79\xdc\x84\xbd\xe8\x61\x27\xb1\x10\x40\xce\xe8\x79\xdd\x22\x73\xc0\x16\x85\x6b\x97\xee\xa0\x45\xf4\x06\x17\xa5\x03\xf7\x26\xd3\xf5\x77\xe3\x92\xbe\x64\x7d\x56\x73\x7a\x1a\x64\x20\x73\x75\x7c\x4c\x28\xea\xd5\xdc\x28\x33\xa6\xa5\x97\x1d\xca\xb2\x6d\x5a\x76\x0c\xb9\x42\x55\xec\xe7\xc4\xbb\xb1\x3b\x92\xc4\x88\x68\xc9\x23\x53\x6f\xb2\x89\x17\x29\x6a\xab\x3a\xd5\xfc\x45\x13\xd5\x5b\xb4\x9a\x6c\x92\xa7\xc1\x11\xed\x26\xb6\x14\x7d\x9b\xf5\x37\x89\x68\xc7\xb9\x5e\x67\x89\x68\xec\x59\xae\xf8\x7d\x69\x7b\x19\x09\x69\x55\xc6\x03\xeb\x5c\xcd\x0b\xb3\xdc\xda\x77\x98\xd1\x06\x6a\x2e\xcd\x45\x42\x67\x28\x8a\xb0\xfb\x9e\xeb\xf7\xcd\x62\x51\x53\xa3\xfe\x95\x79\xcc\xd0\xe6\x8b\xe5\x6d\xaf\x21\xc8\xcf\xeb\xf4\x29\x0b\x41\xb2\xa9\x28\x90\x1e\x7d\x91\x04\x1a\x38\x06\x39\x4a\xed\xcd\x66\x89\x1a\xf2\x41\xa0\xea\x5c\xc3\x69\xee\xd1\x99\xc1\x5a\x7a\xd7\x76\xb4\x7c\x2d\x17\xd4\x3b\x28\x11\x24\xcf\x96\xe0\x6c\x9b\xd5\x47\xd7\x6b\xb1\x2c\x01\x3f\x7c\xd2\x22\xed\x5a\x8a\xcd\x1d\xba\x89\xe4\xe6\x2b\x80\x18\x8c\x3f\x6b\x91\x7b\x4f\xe6\x89\xa7\x3d\x4f\xcf\xc7\x67\x8f\x49\xd3\xae\xdd\xac\xfc\x7c\xf6\xdc\x2c\x75\x26\x05\xb2\xef\xda\x72\x5b\x34\xd3\xb8\xd6\x80\xe7\xf5\xd5\x71\x3c\x90\x71\xf4\xe8\xa7\x65\x3c\x23\x7f\x32\xc0\xf7\xc4\xc5\x3d\x3d\xb3\x4f\xaf\x3b\x08\x86\xbc\x9e\x7e\xb8\xbe\x60\x87\x57\x0a\xfb\xa7\x1e\x1b\xbe\x1f\x8f\x0d\xdf\x57\x62\xc3\x7f\x2a\x95\xa8\xba\xfd\xe3\x3e\x55\xaf\xa9\x8e\xdb\x37\x04\x6f\x9b\x03\xbf\x8d\x36\xff\x05\x95\x3f\xad\x01\xdd\xa3\xe4\x36\x72\xcd\xa8\x1f\x6a\x0a\x02\xfa\xf7\xd5\x66\x9e\x3c\xa2\x34\x3d\x68\xd2\x84\xd1\x9b\x27\x50\xd3\x0a\xb0\x9e\x1e\x6c\x69\x05\x58\x4f\x0f\xb6\xb4\xa2\x87\xa7\xc7\xcb\x5a\x35\xc3\xf4\x78\x59\xab\x66\x58\x1f\x06\x83\x14\x8d\x67\x7d\x54\x74\x63\x64\x6e\xee\x10\x39\x63\x70\xee\x7f\x79\x54\x5a\xaa\x64\x18\x8f\x38\x6c\x20\xa8\xd7\xe6\xb4\xa5\x52\xfc\x00\xaf\x6a\x1e\x01\x6f\x1c\xd9\x08\x62\x02\xde\x8d\xb2\x81\x4e\x18\xd8\xd5\x76\x4f\x84\xed\x1f\xc6\xfd\xd0\x18\x69\xcf\x16\x4d\xbe\x13\x07\xb4\x67\x5e\x3d\x9f\x9f\x5b\xab\x6d\xf5\x3b\x9b\x73\x02\x4b\x20\x4c\xf2\x8d\xcd\x1c\xcf\xb5\xff\xa2\xb4\x41\xab\xd1\x2e\x59\xdf\x20\xed\xce\x47\xb0\xc6\x1b\x2a\x7f\x91\xba\x2b\xc9\xc8\x37\xe8\xa0\x2d\x15\xb2\x0c\xfa\xaf\x88\xed\x72\x1a\x66\xbf\xfe\x02\xdd\x0f\x8a\x15\x9e\x01\xeb\xaa\x36\xf2\x92\xea\xf4\xbe\x35\x10\x15\x25\x63\x8e\xc4\x83\x8a\x68\xb3\x7f\x96\x8d\xc4\x2f\xa1\xb3\x19\xfa\x18\xf2\xa4\x10\x0f\xee\xfd\x0a\xb4\x83\xe4\x50\x73\x04\x44\xb3\x01\xad\xfc\xf2\x7a\x48\x2d\xd3\x97\x43\x1b\xd0\xed\xbc\x46\x02\x14\x9d\xf2\xf4\x7b\x99\xe8\x77\xde\x6e\x33\xae\x9b\xb5\x3b\xbe\xd4\x3a\x1e\xd2\x8e\x2f\x93\x1d\xa7\xaf\xb6\x7c\xcd\xa6\x8e\xf2\xce\xd5\x99\x8c\x29\xbd\x75\x2c\x95\xac\xde\x98\xf2\x01\xc0\x4c\xb9\x92\x5b\x6c\x80\xdc\x09\x04\x33\xa5\x6a\xfb\x37\x01\xa9\x55\x6d\xef\xee\xba\x89\x0a\xed\x1a\x69\x43\x85\xdf\x9a\x74\xca\x18\x1a\x14\xe7\x69\x83\x6d\x29\x3e\xb4\x56\xca\x9b\x8f\x4c\x63\x11\xe3\x3c\xe2\x06\x30\x24\xa1\x6a\xe0\x5d\xd7\x9d\x1b\x46\x3d\x89\xc1\x6d\x28\xe8\xd2\x01\xa1\x7a\x19\xbd\xcd\x1a\x01\xcb\xc5\x8a\x69\x30\x59\xda\xe0\x4c\x88\xfc\x56\xe4\xf4\x19\x20\xa7\xdf\xa6\x60\x50\xcf\x52\x90\xd3\x61\xd9\x33\x84\x76\x6e\xdf\x3c\x3c\x6c\xdf\x64\xa1\x8f\xcf\x20\xb0\x71\x96\x0f\x7d\xfc\xce\x13\xcf\xfc\x46\x8a\xf5\x35\x72\xa3\x88\xf8\x4d\x5a\x42\xfa\x4c\x00\x71\x5d\x0b\x7f\x5c\x78\xb3\x6c\xad\x75\x4c\x97\x7a\xa9\xb9\xde\xd4\xc0\xff\xb1\x78\x8c\xe6\xca\xda\x23\xf7\xde\x52\xd3\x5f\x0f\x69\xab\x6a\xbc\xe3\x7d\x46\x0c\xa1\x68\x8e\x87\xee\x65\x14\x47\x3b\x54\xbe\xa2\xf8\x96\x1d\x52\xe1\xb4\x00\x4e\xe9\x0d\xe0\xb4\x71\x68\x5f\x79\xfa\xbb\x1b\xeb\x2f\x4c\x1d\x9f\x47\x23\xcc\x65\x8c\xdc\x2d\x30\xcd\xf2\xf8\x10\xc2\x51\xef\x8f\x62\x0d\xa9\x77\x72\xec\x1d\x25\x72\xed\x54\x75\x45\x3c\xb5\x3b\x2a\xad\x1f\x27\x9e\x99\x6d\x21\x8b\x35\xc1\x57\x25\xba\x9e\x8d\x0e\x8a\xbf\x54\x7e\x31\xac\x53\x46\xee\xaf\xd1\x01\x27\xef\xe2\xcb\x1b\x39\x8e\x56\xc6\xf9\xae\x33\x3a\xe0\xd0\x9e\x15\xc0\xba\x93\xeb\xe4\xf0\xc0\xa0\x8b\x00\x93\xd9\xaa\x52\x8a\x65\xbd\x73\xf0\xb4\xb4\xf9\x2f\xd7\xc6\x3b\xba\x10\xde\x27\x17\x53\xf6\x98\xe3\x61\xb5\x23\x9d\x03\x74\x6a\x86\xce\x02\x59\x76\xbb\x67\xc7\x3c\x02\x7d\xe3\x9a\x2d\x4b\xc6\x85\x1c\xae\xad\x43\x57\xe4\xe4\xc5\x45\xfc\x7a\x39\xef\x22\x2c\xfb\x55\x0c\x02\x63\x2e\xa6\x27\x1f\xe8\x38\x22\xc6\x2d\x9b\xb3\x31\x1d\xd4\x4b\x0a\x7b\x11\xe0\x78\xf9\x05\xd7\x4b\x21\x3c\x8b\x0b\xac\x65\xee\xc9\x7d\x61\x40\x1c\xa7\xf7\xdf\x03\x17\x6c\x5f\x63\x0c\x9b\x14\xb8\x86\x1a\xe3\x10\x1b\x80\x3a\x3b\x84\x7f\x9c\x35\x0c\x5a\x89\xd4\xcc\xc8\xb2\xf8\x24\x48\xcc\xa9\x4a\xa7\x91\xb3\x24\x5b\xe9\xb4\xea\xaa\x8b\x4f\xd2\x91\xba\xbe\x6e\x96\x5d\x37\xd5\x75\x77\x59\x9f\xb2\x97\x79\xed\x74\xc8\x3a\xd8\xb2\x53\xab\x5a\xd3\x21\x23\x5b\x78\x6a\x7d\x2b\xed\x51\xba\x4f\xcc\xea\x70\xfc\xff\x07\xa1\xd8\xcf\xa7\xb0\xcd\xea\xcd\xbe\xdf\x82\xb5\x26\x8f\xba\x16\x46\x9e\x4e\x99\xb6\x33\x13\xa9\x37\x37\x60\x17\xd7\x95\xb8\xd0\xe5\xd6\xef\x76\xd1\x67\x56\x7a\x9f\x8f\xc6\xdc\xeb\x14\x7d\xb4\xd2\xfb\xe2\x9e\x6f\x33\xe5\xb2\x5b\x40\x5b\xb8\x51\x05\x96\x1b\x5d\x60\xb9\xf3\xc2\x6a\x68\x45\x52\x53\x22\x78\x90\xc2\x89\x39\x9f\xbc\x14\x20\x64\x25\xa8\x18\x2a\x35\x49\xa2\x11\x09\xbc\xb6\xf0\xc2\x9c\x31\x73\xd5\x50\xe1\x87\xc7\x07\x00\x2c\xbf\x93\x16\xad\x39\xa4\x5f\x10\x5c\xd3\x19\xf0\x08\x8c\x69\x5a\xbe\xcc\x0a\x2c\xdc\x3d\xb0\x61\xf7\x91\x27\x58\xbb\xe3\x08\xc8\x19\x12\x8f\xfa\xb4\xfa\x41\xa9\xd2\xac\x62\x4f\xc6\xf4\xea\xde\xb7\x65\xa5\x45\x96\xa5\x4a\x83\xce\x23\x67\xc1\xee\x62\x29\x09\x3d\x0c\x12\x1f\x9b\x2b\x75\xb6\x27\x32\xc9\x01\x00\x8e\x41\x52\xdb\x40\xde\x53\x5b\xa3\xd2\xdd\x7d\x1c\xde\xea\x95\xa7\x09\x62\xe4\x88\x5e\x46\x15\x00\x5f\xa5\x8b\x69\xd0\x30\x17\x83\x32\x4a\xea\xe9\x26\xcb\x0c\x91\xce\x8f\xb6\x56\x3f\xca\x67\xb8\xe1\xb2\xda\x44\xca\x6a\x73\xf9\x6c\x8c\x0f\x90\x3f\x84\xbd\xe5\xae\xf2\xbd\x04\x51\xa4\x98\x9b\xec\x60\xa8\x39\x93\x5f\x42\x3b\xac\x1c\x77\x83\x74\xd1\xea\xac\xcc\x4c\xe9\xb5\x88\x24\x40\x7b\xd2\x43\x08\xc2\x1f\x4a\x95\x37\x20\x88\xac\x05\xc5\x15\x24\xa0\xb8\x96\x56\x28\xae\xc0\x02\xc5\x35\x89\x0b\x1e\x73\x88\x6f\x4b\x24\x4d\x8c\xcd\x20\x5c\x81\x00\xe1\xc2\xfb\x3d\x89\xb8\xb3\xfd\xba\xdd\x01\xd4\x74\x7a\x91\x03\xa8\x64\x1a\xdb\x96\xa3\x3e\x17\x2c\x57\xce\x2c\xb7\x1b\xaf\x83\x31\xef\xe3\x11\x4e\x9d\x91\x4b\x4e\xff\xd1\xde\x21\x3c\xc4\x59\x6c\x42\x44\xaf\x89\x09\x00\x49\x7d\xd7\x4d\x13\x90\x2e\x66\x67\x36\x04\xaa\x5c\x10\x62\x70\x81\x2d\xfe\xa9\xa1\x67\x9b\x61\xbc\x4f\x05\x59\xf1\x34\x31\xdf\xd3\x00\x77\xad\x38\x49\x02\x52\xa4\xe4\x92\x29\x3e\x94\x04\x2a\x6a\x5d\x02\xa1\x03\xf6\x1a\x43\x46\xd5\x79\x42\x88\x4e\x25\x62\x86\x45\xc5\x5f\xa9\x08\xa8\x39\x7a\x59\xd6\x7b\x19\x81\x9c\x7e\x97\x4e\x1a\xc0\x8e\xf3\xf7\x50\x03\xc9\x7d\xea\xee\x91\xb3\x84\x27\xf1\x2c\x2f\xe0\x99\x79\xb1\xcc\x0f\x82\x66\xae\x4f\xaf\x1f\xcf\x30\x9a\xa1\xdd\x4e\x08\x57\x5b\x76\x8c\x7a\xe5\xc5\x3f\x89\xa6\x77\x83\x11\x45\xa5\x87\x52\xe3\xeb\xa9\x75\xf6\xc8\x18\xd2\x1c\xf0\x80\x65\xfe\x96\xe9\xbd\x37\xbd\x0d\x19\xd7\xa6\x72\xcb\x77\xba\x34\x47\x97\x69\xfd\xf8\x95\x0f\x1e\xc3\x1a\x67\xbf\xde\x33\xce\x6c\xcd\x1b\x89\x56\x41\x22\x34\x53\xa6\xd8\x43\xcc\x32\x00\xc2\xf2\x5f\x1d\xaf\xfc\xdc\xa7\x3a\xe7\x75\x0d\xd3\x99\x9b\x60\xa9\x7c\xd9\xac\xee\xee\x36\x99\x79\xb3\xe1\x95\xc0\x84\x59\x6d\xfc\x76\x27\xcc\x97\x8d\xdd\x5d\xb7\xb5\x4b\x85\xa6\x3b\xc8\xdb\x90\x30\xc3\x68\x96\x69\xb9\xbc\x52\xd5\x7f\xd9\xc0\x92\xe0\xca\xa7\x67\x81\x9a\xde\x6b\x55\x11\x90\xdb\x5e\xc4\xeb\xac\xe2\xbd\xe8\x42\x0a\x44\xa9\x2a\x75\xc4\x15\x08\xd5\x6a\x7c\xb7\x32\x8f\x2c\xa8\x61\x99\x88\x61\x6d\xef\xd7\x9f\x4b\x74\x28\x80\x0c\xbc\x6b\x8b\xa0\x0e\x32\xf0\xc2\x7a\x56\x17\x71\xdf\xea\x22\x0e\x3d\xd6\xff\x02\x10\x7f\xdf\xfb\x93\x11\x30\x7f\x17\xf8\x85\x0b\x54\x93\x2f\x30\x0f\x74\x41\x44\x69\x1b\xe2\xd4\x27\x88\x79\x35\xd5\xc3\xb1\xe5\x32\x43\xa5\x12\x6d\xe9\xd6\x7e\xc7\x40\xb4\x6c\xfc\xe0\x69\x20\x5c\x6e\xf5\x66\x4f\xe2\x66\x38\xfb\x7b\xfb\xee\x9e\x02\xae\xe3\x5c\xd3\x23\x84\xfe\xd5\x44\x7c\x8c\x29\xea\x79\x4a\xa5\x1c\x43\xd8\xf0\x54\x09\x1b\xbe\xb1\xbc\x72\x47\x09\xbb\xd2\x54\xc3\x54\x87\x7d\x37\x5c\xe2\x8a\x4c\xa8\x76\x8b\x70\x56\xd3\x1c\xab\x87\xb9\x49\x65\x71\xd9\xa0\xd9\x98\x81\x6b\x1a\x47\xe5\xb6\x36\xda\x50\x45\x25\xe3\x5c\x12\xa5\x05\x69\x87\x03\xec\x43\x0d\xb7\x32\x02\x4b\xba\x70\x65\xe5\xab\x39\xa1\x35\x85\xfe\x3a\xc1\x1b\x12\x9e\x30\xfa\x8b\x36\x39\x59\x11\xeb\x33\xfa\xde\x86\x25\xab\xe3\x3e\xdd\xb0\x64\xb5\x47\x65\x61\xf1\x58\x2d\x25\xa3\x54\x2a\x75\xab\x49\x08\xf5\xd8\xb5\xad\x41\xca\xc3\x5f\xdb\x12\x64\x8d\x15\x30\x46\x17\xe4\x8e\x15\x30\x9a\xdb\xd6\x8b\x15\x30\xc5\x6e\xd8\xcd\x49\x78\x8a\xf8\x59\xe6\x24\x61\x40\xf1\x73\x98\x93\xa4\x69\xc5\x4f\x35\x27\xf9\xb9\x62\x05\xe2\xb6\xcb\x06\xda\x2e\x8d\xe0\x33\x28\x4d\xad\x61\x8b\x9c\xde\x05\xb0\x48\x86\x1e\x04\xd3\xd4\xa7\x3e\xdf\x31\x2a\x0d\x61\x0d\x61\x1b\x07\xbc\x57\xcc\x4e\x22\xf7\x0f\xb7\xda\xa0\x2f\x56\xbf\xca\x6b\xd1\xef\x03\xb5\xda\x5d\xd0\xe9\x60\xec\x99\xac\x18\x0c\x81\x05\xbc\xc8\xd6\xf5\x44\xdd\x62\x13\x95\x19\xb5\x89\x69\x10\x76\x47\x73\x40\x57\xc9\xd3\x8c\xbf\x18\xd7\xc1\xa9\x11\xd5\xe7\x47\xb2\xfb\x4e\xef\xf8\xeb\x98\x49\x38\x4a\xfd\x0c\x59\xc8\xd4\xec\x2a\x47\xec\xbf\x39\x39\xc2\xba\x2a\xa6\x9b\x1a\x6f\xd6\x35\x35\xe6\x86\x09\xea\x47\xa2\xb1\xb4\x37\x9e\x28\x40\x40\x93\x9d\x1d\xf9\xb3\x8d\x29\xe5\x27\x0a\x2e\x50\x3f\x66\x8d\xec\x33\x71\x71\x91\x20\x74\x38\x41\x07\x6c\xc2\xdc\xc8\x6d\x62\x17\x36\x37\xf0\x80\x2c\x48\x08\xe0\xfd\x36\x37\xf0\x10\x0b\xd8\xdc\xc0\x0b\x4b\x38\xc6\x51\x2e\xfc\x9f\x73\x60\xf0\x4b\xe0\xff\x00\xeb\xb7\x19\xff\xa7\xbf\x1e\xfe\xcf\x9b\x08\xff\xe7\x8d\xc0\xff\x79\x03\xf8\x3f\x6f\x4c\xf8\x3f\x6f\x34\xfc\x9f\x37\x1c\xff\xa7\xbf\xb3\xd3\x97\x31\x22\xfd\x27\xc5\xff\x59\x80\x17\x7c\x91\x0d\xef\x93\xee\xdf\xbe\xf4\x16\x59\xd6\x4e\x39\x5d\xa5\xc9\xb3\x5f\x03\xf0\x9d\xcb\xcd\x4d\x9e\x6a\x93\xaa\x81\xf3\xad\x77\x19\x47\xf4\xb9\x8a\xbb\x1e\xb9\x9e\xaa\xa2\x61\x5c\xe5\x87\xe8\xc9\x28\xba\xcc\x5f\x94\xdf\x0a\xb7\x99\x66\x14\xd6\x30\x74\x32\xca\xc2\x74\x9f\x8c\xc2\x69\xbe\xd2\x2a\x5a\x35\x1d\x40\x39\x7c\x26\x33\xe3\x45\xdc\xcc\xf8\x9a\x2e\x72\x6c\xb2\xbf\xf3\xc6\x07\x17\xc5\xfb\xca\x45\xb5\xcb\xed\xb8\xef\xd4\xd6\x2c\x90\x3c\x7d\x99\xfc\x4e\x42\x06\xc9\xd3\x55\x21\x79\xf0\x98\x72\x28\x73\x9d\x48\xbd\x64\x46\x2e\xff\x45\xf1\x1d\x83\xcb\x2e\x86\x11\x34\x0f\x9d\x40\x63\x76\x83\xef\xbd\x6b\xe4\xf0\x7d\x25\x56\xe1\x87\x87\xc2\x47\xf6\x8d\xea\x65\xfe\xac\xfe\x86\x9e\x8c\x8e\x88\xf5\xa0\xc2\x37\xe2\x6d\xfa\xe2\xb0\x99\xe7\xf2\xbd\x9d\x9f\xa0\xd2\xac\x68\x16\xb6\x4f\x6c\x15\xf7\x60\xb5\x51\x76\x40\x6d\x13\x8f\x18\x1b\xc5\x33\xb2\x55\xb6\x77\x62\x6f\x4f\xf8\x57\xa5\xe5\xe8\x50\xd4\x36\xdf\x6d\x0d\x6d\xf3\x33\x4a\x8f\x95\x0d\x57\x0c\xc7\xd6\xff\xc4\x87\xe3\x2b\xdf\x68\x13\x83\x22\xf7\x6a\xdb\xe0\xc8\x02\xab\x5a\xf5\xde\x3b\xe4\x4b\xda\xf3\x1f\x9f\xed\x53\x45\xfc\xbd\x97\x02\x62\x03\x79\x02\xb4\x82\x08\xd3\xa7\x3b\x28\xeb\x12\x28\x4a\x01\x9f\xa0\xf7\xc2\x3b\x70\x5d\xf8\xd7\x4f\x3f\xfd\x44\x1f\xbd\xfa\x51\x8b\xcf\x25\xfd\xb5\xe2\x13\xf8\x3d\x9f\xc0\x81\x9c\xc0\xa8\xef\x0f\xea\x0b\x27\x88\xa6\x6d\x34\x83\xa3\x59\x9d\x51\x6e\xed\xa9\x1e\xeb\x5e\x26\xfe\x94\x32\xc9\x2f\x33\x5e\x8d\x30\xf2\xd7\x44\xb5\x00\xd2\xe5\xed\x86\x48\x5e\x17\x02\xc9\x6b\x8e\xb8\x5b\xec\x71\x5c\x48\xbf\xcf\x6b\xa0\xd8\x04\xad\xc0\xe1\xc4\x77\x8c\x3c\x0b\x24\x7c\xbc\x3e\x18\x1b\x6f\x3b\x47\x62\x57\xa7\x42\x86\xd8\xa0\x9a\x71\x54\x10\x6d\x75\x63\x8f\x0a\x80\xbb\x7c\xc3\x35\xab\x8c\xa9\x4a\xbf\x27\x6d\x91\x96\x8b\x16\xec\x2b\xbf\xeb\xa2\x87\x08\x29\xa2\xe2\x94\xd3\xe6\x60\x28\x4d\x01\x74\xd3\x96\x40\x37\xed\x34\x48\x9e\x0b\x84\xe4\xe9\x6b\x48\x37\xaf\x61\x7f\x7a\xbb\x31\x24\xcf\x6b\xf6\xac\xec\x0d\x98\xe5\xa7\x92\x84\x4a\xa3\x2f\x24\x5b\xff\x3e\x54\x3f\x78\x42\x19\xf0\x3c\xfa\xc2\x72\xe9\x1a\x5c\xa2\x1d\x79\x7f\x9d\x34\x20\x9f\xd7\x00\xe4\xd3\x87\xc4\x38\x36\x3e\x2d\x31\x3e\x1f\xd4\x3b\xbe\x80\x3b\x16\x6b\x0d\x5e\x89\x2f\x0d\x74\x85\xd1\x57\x05\xf5\xe4\x81\x73\xec\x75\xb4\x5c\x7a\xa2\xfd\x54\x42\x61\xfe\xa7\xe0\xba\x6e\xe5\x78\x67\x47\x2b\x70\x1c\x1f\xa5\x65\xee\x51\xea\xb8\x2b\x5f\xb7\xe8\x48\xc3\x1a\x9d\xae\x38\x62\x9a\x99\xb7\x2f\xdd\xeb\x65\x70\x2b\xe7\xf4\x79\x0b\xdb\x8b\x5a\x4c\xcd\xb0\x2f\xaf\x14\xc5\x32\x06\xcb\xd2\xdc\xf6\x62\x2e\x80\x0d\xe4\xda\x65\x2a\xb8\x4c\xf7\xb1\xd8\x35\xe9\xcd\x07\x7a\xf3\x6c\x63\x8f\xdb\xf5\xb4\x11\xa1\x2f\x22\x6c\x11\x56\xc7\x6f\x34\x72\x25\x88\x41\x20\xda\x58\x12\x31\xb1\xea\xec\x13\xc6\x0b\xbf\x28\x3b\x55\x4a\x87\xa1\xc7\xbd\x74\x8a\x7d\xa5\xdb\x4d\x30\x6a\xc4\xc8\x00\xb8\x78\xdd\x22\x5d\x12\x90\x01\x18\xde\xe9\x9a\x63\x98\x2a\x5a\x4a\x9f\x1e\x58\xa1\xcf\x9e\x44\x44\x47\x9b\x74\x98\xf9\x41\x59\x23\x5f\x05\x53\x98\xff\x6d\xe1\x42\xe1\x59\x75\x9f\x31\xc0\x08\x80\x18\x1c\x5c\x3c\x63\x58\xf7\x1d\xda\xc9\xed\x12\xeb\x70\xcf\x13\x95\xaf\xbb\xd8\x67\x13\xaa\x50\x4f\x03\x1b\x92\x00\x67\xf0\xc8\x5a\x5e\x8f\xbe\xfd\x86\x93\x01\x3d\x19\x78\x0d\xa9\x8a\x38\xd8\x1b\xa7\x47\xa8\x8a\x23\x98\x74\xa3\x55\x23\x5a\x17\x7a\x91\xf7\xb6\xd2\xc0\x50\x5e\xa8\x52\x1d\x30\x4a\x69\x94\x64\xda\xe8\x53\xc3\x5e\x57\xfa\xdc\x82\x33\xa2\xe3\xd3\xd6\x3c\x2d\x84\xef\x05\x2c\xd8\x4a\x36\x0b\x68\x16\x40\xdf\x36\xf1\x6f\xfd\xc9\x14\xe6\xc5\x80\xbf\xa9\x2f\xf7\xd9\xca\x39\xa4\xbd\x16\x3a\x93\x88\xa7\x6e\xb2\x10\xec\x2f\xae\x08\xc1\x1b\x58\x42\x6e\x86\x51\x8c\xf7\x50\x70\x5a\xcb\x23\xf5\x3d\xb5\x4f\xe0\x9e\xa6\x0a\x9a\xf5\xac\xb4\x9e\x0f\x5f\x7a\xcd\x9d\x9d\xd6\x6e\xf3\xa5\x37\x3c\x00\x83\x96\x33\xf6\x1a\x54\xeb\x44\xd3\x16\x27\x86\xd8\xf6\x00\x3b\x6d\x70\x3d\xae\x45\x4f\x1b\xc8\xc4\xd1\x5f\x72\xe3\xb5\x75\xd8\x12\xf6\x2c\x5a\xf0\x2c\xc8\xc4\xf8\x18\x4c\x9e\xf5\x68\x49\xde\x2b\xd3\x45\x19\x23\x50\x0d\xe5\x3a\x31\x88\x14\x77\x55\xed\x49\x78\x01\x09\x01\xc4\x44\x85\x60\x57\x11\x16\xc4\x20\xef\x0a\xa9\x01\x3d\x6a\x91\xdc\x70\xb2\x37\xae\x43\x18\xee\xdb\x51\xcb\x4f\xa0\xb5\x4c\xb8\xb2\xfa\x8d\xcd\x8b\x1b\xe1\x80\x1d\xac\x5c\x40\xdd\xe1\xae\x89\xb3\x79\xd0\xf2\x01\xfb\x90\x4a\x80\xe9\xef\x7c\xdc\xb0\x6f\x78\xe3\x71\x8d\x1d\x3d\x06\xa2\x4b\xd8\x0a\x3c\x4f\x81\xdb\x8a\x72\x4c\xfa\x4f\x06\xe0\x65\xee\x08\x3e\x6c\x86\xf4\xa7\x2f\x9e\xa7\x9e\xfc\xaa\xae\xea\x2b\x30\x45\x25\xbd\x74\x5b\xe8\xa6\xc3\x87\x65\x75\xd6\x99\x6c\x62\x3a\xd4\x12\x07\x5f\xea\x24\x8e\x74\x0d\x70\x4c\x81\xe1\x58\x4f\x5f\x1b\xf1\x51\xf3\x58\xdd\xbe\x09\x89\x29\x8c\x23\x31\xbd\x88\x23\x31\xfd\x5c\x5a\xd1\xb5\x9c\xb1\xd4\xb3\x8f\x91\xcd\x8f\x38\x86\x6d\xe9\x06\xfe\x69\x78\x4b\xe5\x4c\xbc\x25\xfc\x58\x6e\x06\xbb\x84\x78\x4b\xe4\xd0\xbb\x8e\xf4\x58\xa9\x7c\x46\xba\x62\x8d\xbc\xf2\xbe\xad\xc8\x11\x82\x33\x25\xb7\xc5\x76\x3a\x30\xd3\xbf\x41\x30\xe3\x25\x66\x71\x18\x06\xd2\xcf\x87\xb7\xd4\xde\x18\x6f\x29\xbe\x98\x44\x78\x4b\x8c\xaa\xa8\x1a\xf0\xf9\x89\xe3\x03\x10\x62\x3c\x28\xca\xe4\x92\x5c\xc2\xcc\x8e\xee\xfc\xec\xe9\x21\x99\xb8\x3a\x2c\xaf\x01\x86\xe9\xf3\x35\x20\x9a\xc4\x1b\x79\x2a\xbe\xd3\x37\xfa\x49\x01\x9c\xfc\x4d\xa0\xea\x78\x7a\xf7\xde\xc2\xe3\x79\x4b\x9c\xac\x5c\xe4\x7d\xef\x2d\x79\xd6\x8d\x3c\xd1\x97\xd8\x6e\x71\xcc\x37\x0d\xeb\x2d\xad\x37\x46\x28\x41\x10\xc6\x23\x24\x41\x16\x38\x21\xbc\x96\x4b\xf0\x5a\xb2\xf7\x00\xc3\xe1\x39\x20\x55\x97\x5b\x94\x41\xd9\x46\xa4\x29\x86\x4e\xd5\x96\xe8\x54\x1d\xe1\x8a\x65\x03\x76\x59\x5f\xfa\x13\xaf\xa7\xc0\x53\xf5\xe3\x57\xf9\xbe\xfe\x50\xab\xa3\x31\xdd\x1f\x6a\xf5\x34\x66\xe3\x46\xa5\x42\x4e\xa5\xe2\x46\xa5\x22\x4e\xa5\x42\xbe\x58\x11\xa7\xbe\x23\x6e\x94\x95\xbe\x05\x7a\x7b\xc4\xe7\xc8\xda\x6e\x63\x3e\xb9\x2e\xeb\x0d\xdf\x5e\xdb\xca\xa6\x92\x85\x3c\xd5\xff\x8e\xc8\x53\xfd\xcd\x90\xa7\xfa\xff\x00\xf2\x94\xe1\x9a\x8d\x6c\x77\xb4\x29\x09\xc4\xee\x8e\xc6\x53\x40\xcc\x9d\xee\x8e\xe6\x05\x68\xc1\x6c\x77\xb4\x28\x43\xc2\x54\x77\x74\x98\x97\x50\xc5\x4c\xe8\x43\x84\xab\xf0\x08\x97\xd4\xc8\xab\x06\x08\xb5\xca\xaf\x8e\xfa\xeb\xa9\x12\xe5\x25\x58\xd2\xc8\x95\xf9\x67\x23\x37\x3f\xf6\x93\x19\x40\x2e\x45\xe8\x60\x54\x2f\x17\x06\x49\x6f\x2d\x78\xa9\xed\xed\xba\xbe\xf0\x3b\xdb\x75\x14\x77\x25\x8d\x0c\x1e\xf0\x45\x24\x4c\xbc\xe8\x93\xe4\xa2\xcc\x87\x8d\xf9\x64\x9a\xcb\x31\x1c\xe1\x06\x8c\xa4\x63\x38\x8e\x20\xd0\x50\xb2\x99\x47\x6c\xe7\x5e\x94\xe8\x43\x03\x46\xbb\x16\x7e\x6b\x2d\xa2\xe4\xe7\xb1\x8c\x26\x04\xf1\x53\x0d\xdc\x8e\xc0\x5f\xc8\x35\xab\xbd\x80\x40\xef\x05\x52\x85\xc7\xca\x86\x5a\xd9\x25\xf2\x89\xb7\x92\x85\x38\x9a\x35\x96\x39\xd8\x2f\x55\x4a\x64\x1e\x01\xa6\x28\x62\x8c\x1f\xc5\x92\x1c\x18\x36\x39\x5d\xe9\xf4\x95\x35\x89\xf7\xa2\x81\x40\xe2\xb2\x53\x4d\xf8\xc9\x2f\xde\xc2\x53\xd8\x04\x4b\x8b\xbe\x21\x93\x84\x63\x7c\x6a\x73\x7d\xfb\x64\x42\x80\x97\xc7\x6a\xe7\x6f\xb3\x02\x73\xee\x2a\xa0\x17\x9f\x92\x99\xfb\x7c\x3f\xe1\x64\x9f\x30\x19\xf5\x56\x87\x57\xd2\x3c\xb1\x7c\x5e\x08\x0f\x6c\x03\x14\x86\xdb\x4d\xfc\xaf\xbc\x21\x95\x5e\xa5\xe3\x52\xb5\xe3\x4e\xbd\xb4\x76\x45\xaa\x22\xa4\x7b\x03\xa6\xcf\xf7\xd1\xb7\x30\x83\x4f\xe4\xf7\x30\x07\x4f\x83\x14\xdf\xe3\x3a\x3c\x8b\x8d\x86\x7b\xa9\xd4\x09\x7a\x79\x2a\x0d\x8c\x8a\x16\x51\xd0\xc0\x2a\xd6\x41\x0d\x53\x4c\x95\x6b\x9c\x21\x8c\x9a\xbe\x41\x55\xab\x05\x1b\x8a\xc1\xde\x90\xbe\x3b\x54\x90\x4c\x8d\xc1\xa7\x9a\xd0\x30\x9b\x11\xba\xeb\x50\xa9\xb4\xd9\x0d\xc2\x16\xd5\x12\x0e\x68\xd7\xb8\x81\xc1\xdd\x1b\xd6\x07\xbe\x21\x48\xba\xf0\xaf\xd3\xd3\xd3\x82\x35\x58\xbc\x49\xd7\xad\x1b\x8b\xf1\x39\x60\x5d\xfb\x74\xe7\x53\xd9\x15\xfa\x07\x6f\x1f\x5c\x02\xdf\xe0\xd1\x63\x83\xf9\x13\x6e\xf2\xbd\x5f\xc0\xbc\x11\x97\xef\xe5\x33\x60\x4b\x7f\xbc\x61\x75\xc0\xdc\xc7\xc7\xee\x27\x3a\x55\x4e\xf4\x09\x22\xfa\x59\x97\xf4\xcb\xc5\x4c\xae\x08\x74\x18\x37\xc9\xaa\x35\xe9\xc4\x19\x69\xa6\x09\x31\xf1\x8d\x06\x89\xcc\xd8\x61\x9f\xe9\xe5\x6d\xf6\xd1\xd1\x83\x84\x7f\x8a\x07\x09\xa7\x44\x17\x43\xf0\x71\x4f\xd7\xee\xa3\x37\xc2\x1a\x9b\x6b\xa1\xcc\x65\x83\xb2\x3e\x8b\xae\x01\x0f\x2b\x7a\xc9\xf6\xd9\xdd\xbc\xbf\xa8\x69\x20\x59\xd3\x9b\xc9\x4c\x70\x23\xf3\xc4\x3d\xfa\x72\xcc\xc4\xbc\x9e\x8e\xe8\x69\x18\x1c\xae\xc6\x3b\xc9\xb5\x1a\x18\x2f\x86\x51\xfa\x4f\x13\x6a\x41\xde\xfb\xe1\xb0\x13\x1a\xd9\xa8\xa5\x8b\xb5\x44\xe4\x12\x2a\x7b\x47\xfa\xf4\x5d\x5d\xb8\xec\x95\x19\xb6\x1e\xd3\x08\x6e\x65\xac\xa5\x60\x48\xa5\x49\xc6\xa1\x98\xd1\x58\x48\x6b\x2e\xb1\xce\x08\x98\x25\xf3\xd7\x81\xab\x61\x45\xc5\x78\xa4\x1a\x25\x7a\xa6\x28\xe9\xde\x77\xd7\x32\xad\x28\x5b\xe9\x5a\xa6\x35\x58\xd7\xce\x0a\x69\x0d\xd4\xcd\x12\x76\xad\x78\x65\xe9\x42\xbf\x09\x76\x4c\x13\xfa\x55\x99\x1f\xcf\x90\x56\x4c\xe6\x8f\x8b\xfc\xfc\x3c\x2d\x17\x13\xf9\x93\x12\xbf\x28\x42\x5a\xba\xc4\xaf\x0b\xfc\xad\x27\x8e\x3f\xcd\x89\x55\xc5\x17\xc5\xdc\xc1\x88\xad\xc8\x28\x21\x65\xce\x81\xc2\x59\xd8\x8a\xc9\x9f\x2d\x26\x4f\x76\x33\xd3\x9a\xbb\x4c\x04\x0a\x6c\xc2\x56\x9b\x74\x41\x84\xee\x59\x85\xad\x0e\x16\x48\xe3\x1d\xec\x1f\x74\x25\xef\x60\xd7\xb2\x29\xf7\xd3\xe2\x0e\xb7\x5b\x0f\x0f\xdb\xad\x2c\x70\x9a\x2e\x84\xe5\x75\xf3\x81\xd3\x84\x5e\xd7\x1e\x7c\xa7\x3e\x1b\x21\xf7\xb5\x60\x01\x0e\x1f\x21\xf7\x99\x82\xee\x86\xb4\x45\x35\xe8\x6e\x90\x11\xf7\xc6\x9b\xe2\xe1\x69\xe1\x46\xc9\xc2\x82\xfc\x2c\x90\x01\x1c\x3d\x36\x24\x23\x6f\xa8\x07\x70\x68\x57\xe3\x11\x1c\x2d\x64\x1b\x57\x1e\xe1\x48\xb2\x91\x71\x5f\x5e\x62\xdf\x3f\xb2\x79\x23\xbc\xc4\xdb\xa0\xb3\x42\x44\xfe\x01\xdf\xca\xd4\xb0\xcf\x05\x85\x7d\xcc\x32\xe2\x22\x02\x87\xf9\xb0\x4a\x02\x8e\x82\xd3\x64\x48\x34\xc2\xbd\x94\x4e\x78\x6c\xa6\x8f\x86\xfd\x50\x97\x1b\x78\xcf\x3e\x76\x47\x77\x30\xe6\xec\xd7\x39\x55\x7d\x19\x5e\x56\x2e\x8f\xc1\xc0\xb8\x05\x85\x11\xf4\x14\xb7\xe7\x9f\x08\xbb\x50\x59\x8f\x9f\xb0\x9a\xec\xd5\x04\xd9\xcd\xf8\x50\x84\x3b\xdc\x43\x1f\x6f\x1d\x5f\x00\x94\xc3\xb9\xa7\x97\x1f\x01\x52\x11\xbe\x6a\xf2\xfc\x44\xba\x91\x98\x99\x44\xd6\x26\xaa\x81\x8d\x42\xb3\x2e\xa7\xb4\x00\xaf\xb5\xa5\x89\xc8\xc7\x89\x3b\x8c\x96\xe7\xc9\x26\x8e\x9e\x0a\x0a\x1e\x4a\xdd\x94\x1d\x82\x29\x5b\xd8\x06\x9a\x4f\x21\x0b\xa4\x1b\x46\xad\xa8\x94\x79\x8c\xb1\xd6\x6d\x7a\xad\xbd\x8d\xe1\xc2\xd0\x11\x67\x16\xa4\xae\x9b\x43\x40\x30\xe3\xc3\x10\xb1\x57\xf5\xff\xfb\xf2\x55\x1e\x01\x46\x0e\xe1\x0e\xf4\x80\x57\x28\xef\xfd\xb2\x57\x2e\xac\xe8\x9e\xf4\x7f\x03\x00\x00\xff\xff\xdc\x02\x04\xb3\x7b\xeb\x02\x00") + +func uiJsLibsNvd3171NvD3MinJsBytes() ([]byte, error) { + return bindataRead( + _uiJsLibsNvd3171NvD3MinJs, + "ui/js/libs/nvd3/1.7.1/nv.d3.min.js", + ) +} + +func uiJsLibsNvd3171NvD3MinJs() (*asset, error) { + bytes, err := uiJsLibsNvd3171NvD3MinJsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/js/libs/nvd3/1.7.1/nv.d3.min.js", size: 191355, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsAppTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x94\x92\xcf\x6e\xe2\x30\x10\xc6\xef\x79\x8a\x91\x4f\x41\x62\xe3\x7b\x58\x56\x0b\x12\x42\x7b\xd8\xaa\x6a\xa5\x5e\x91\x89\xa7\x89\x2b\x6c\x47\x63\xa7\x14\x55\x7d\xf7\x1a\x43\xda\xa4\x29\x28\xcd\xc1\xff\xf2\xfb\x3c\x9e\x6f\x86\x73\x70\xb6\xa1\x02\x73\x10\x75\x9d\x79\x97\xf0\x70\xf4\x9b\xf0\x11\x09\x4d\x81\x50\x0b\x5f\xcd\x99\x3f\xd4\xca\x94\x8e\x6b\xe5\x2b\x52\xbb\xa7\x8f\x55\x26\x83\x86\x01\xff\x93\x7c\x2f\xac\x45\x89\x8e\x97\x24\xea\xaa\x05\xaf\x70\xda\x1a\xe5\x2d\x8d\x20\x8d\x95\xe8\x46\x70\x84\xce\x6f\xf0\xa5\xde\x59\xc2\x31\xf7\xba\x10\xfe\xf3\xe2\x40\xc2\xa2\xf1\x95\xa5\x1c\x16\x46\x12\xee\x61\x69\xcd\x33\x1a\x4f\x08\xa9\x30\xf2\xb0\xb5\xc6\xfd\x2d\xb5\x08\x4e\x14\x56\x4f\xba\x82\x25\x09\x0d\x6b\x6a\x0c\x2a\x82\x74\x1b\x76\xe5\x69\xd3\xe5\x13\x9d\x91\x6d\x3c\x66\x3a\x24\x04\x73\x60\x95\x70\x15\x9b\xb5\xc7\xa9\xb4\x45\xa3\x43\xbc\xac\x44\xbf\xda\xe1\x71\xb9\x3c\xfc\x93\x29\x23\x6b\x3d\x9b\x4c\x81\xc5\x14\x7f\xb5\x29\xb2\x29\xbc\x26\x10\x3e\x76\x32\x9d\x85\x87\x4b\xad\xcc\x83\xc2\xbd\xcb\xd6\xb1\x0e\xb7\x21\xd3\xe9\x19\x3a\x3b\xde\xc7\xfe\x9f\xcb\xd0\x05\x8f\x86\xf7\xa9\x9b\x58\x82\x38\x7e\x05\xdd\x68\x92\xe7\xc7\x71\xa3\xe4\x25\xc5\xe0\xea\x1f\x29\xfa\xde\xf4\x04\x77\xe1\xd7\xaa\x6d\x8c\xae\x26\xb6\x40\x9f\xbd\x3f\x75\x45\x9c\x06\xa8\xbb\xcc\xba\x01\xcc\xf3\x38\x0d\x9e\x7f\x3d\xc2\x58\x55\xf2\x36\x99\x25\xef\x01\x00\x00\xff\xff\x27\x3f\x35\x45\xd3\x03\x00\x00") + +func uiTsAppTsBytes() ([]byte, error) { + return bindataRead( + _uiTsAppTs, + "ui/ts/app.ts", + ) +} + +func uiTsAppTs() (*asset, error) { + bytes, err := uiTsAppTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/app.ts", size: 979, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsComponentsMetricsTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xa4\x58\x6b\x8f\xdb\xb8\x15\xfd\xee\x5f\xc1\x1a\x08\x56\x0e\x66\xe9\x09\x06\xed\x07\xa5\x93\xb6\x48\xb6\x8b\x00\x3b\xbb\x68\x53\xa4\x2d\x8a\xa2\xa0\x25\xda\x66\x86\x12\x55\x92\xf2\xa3\x03\xff\xf7\x9e\x4b\x4a\xf2\x43\xb2\x3c\x45\x89\x20\x63\x49\x97\xe7\x92\xf7\x79\xc8\xf9\x9c\x39\x53\xdb\x4c\xa6\x2c\x33\x45\x65\x4a\x59\x7a\x37\x2f\xa4\xb7\x2a\x73\xdc\xbb\xc9\x1c\x12\xbf\xb5\x72\x29\xad\x2c\x33\xc9\x2a\xe1\xd7\x8f\x53\xce\xe7\x7e\x5f\xa9\x72\x05\x51\xe5\xd7\x56\xe9\x6f\xdd\x2f\x9e\x63\xda\x94\xcd\x3f\xdc\x9c\x9a\x3f\xe0\xdf\x6d\xf1\xc2\xe4\x52\xbb\xb9\x57\x85\x74\xd2\x2a\xe9\xda\x09\x93\xc9\xfc\xed\x5b\x36\x61\x6f\xd9\xc7\x6e\xe9\x2c\x97\x4b\x55\x4a\xc7\xac\xac\x9d\x58\x68\x79\xb2\x2d\xb6\x5d\xab\x6c\xcd\x0a\xb1\x67\x0b\xc9\x6a\x27\x73\x66\x4a\x56\xd4\xda\xab\x4a\x93\xc2\x95\x74\x77\x04\x67\xec\xf1\x6d\x50\x4b\x72\x7e\x2d\x99\x13\x45\x94\xe3\x10\x9b\x4f\xb0\xb2\x1a\x22\x27\xda\x5f\x26\x0c\x03\xcb\x0a\x7f\x01\x55\x6e\x58\xb6\x16\x16\x9f\x1a\xe1\xdc\x00\xae\x34\x9e\x65\xb5\xc5\x46\xbd\xde\xb3\xb5\xd8\x48\x26\x18\xcc\x22\x5d\x66\x55\xe5\xe3\x26\x94\x57\xa6\xe4\x0d\xd0\x3c\xfc\xcd\x65\xa6\x85\x95\x6c\x23\x2c\x90\x53\x51\xee\xdf\x4f\x2e\x35\x3e\x45\xdf\x61\xdf\xa5\x17\xaa\x74\xa7\x06\x08\x7b\xf6\x86\xe5\xca\x55\x1a\x66\x68\xfc\xcc\x72\xe1\xc5\xb9\x26\xb9\xab\x8c\xf5\xed\xa2\x5b\xcc\xb8\xbd\x33\x85\x51\xe9\x4f\xb0\xf9\x8f\x56\x54\xeb\x16\xda\x61\x43\x1a\x2f\xd9\x2a\xbc\x35\xcb\x60\x3f\xd2\x03\xcf\xf8\xda\x96\x58\xc8\xd2\x9a\x82\xf6\x0d\x0b\x9f\x62\x45\x27\xb3\x7f\xd7\xd2\xee\xf9\xc9\x87\x79\xf7\xfb\x7c\x71\x47\xdd\xc7\xe5\xf5\x96\x18\xa1\xbf\x2a\xb9\x7d\xa2\x70\x62\xca\x85\x05\x85\xd8\x62\x4b\x38\x5c\x30\x57\xc9\x4c\x2d\x55\x76\x02\xf8\x3d\x53\x25\x13\x79\x1e\x5c\x01\xc3\x5d\xe2\x11\xc4\x42\x64\xcf\x08\x67\xf6\x27\x5a\x2f\x33\x8b\x6f\x32\xf3\x77\x4c\x79\x26\xb4\x33\x08\x36\xd5\xb8\xc1\x40\xd8\xb2\x4a\xda\xef\x3b\x87\x5c\xc2\xb5\x6e\x31\x15\xe9\x73\xfc\xe2\xfb\xfc\xec\x19\xb8\xd2\x2e\x05\x32\xe5\xb8\xab\x73\x03\xd0\x08\x56\x4c\xc3\x57\xc7\x1b\x37\xf2\xb0\xd4\x27\x51\x22\x90\xed\xfb\xde\x14\x2d\x9c\xff\xa1\x32\xd9\x3a\x2d\xeb\x62\x31\x24\xf1\x2c\xf7\xbf\x1b\xfc\x78\x98\xdc\xf2\xc0\x47\x44\xa5\x35\x5a\xc3\x14\x5d\x80\x06\x2b\xd6\xfa\x99\xa2\x64\x59\x97\x19\x6d\x5e\x68\xe5\xf7\xac\x94\x32\x8f\x11\x8b\x54\xc9\x31\x47\x5c\xe2\x75\xbe\x1a\x37\x16\xd2\xc6\xb9\x53\xe5\x7d\x4b\xa1\xfa\x94\x9b\xfc\x21\xa6\x2b\xef\x7d\x0e\xaf\xd9\x23\x64\x78\x2c\x48\x9c\xc2\xfb\x23\xbd\x4d\x66\x3d\x69\x1a\x7c\x97\x24\xf9\x8c\x3d\x7e\xc0\x36\xb6\xec\x93\xf0\x32\x41\xad\xa3\x72\xe2\x45\x51\xfd\xab\x14\xa5\x71\xf3\x77\xfc\x5e\xfe\x66\x76\x05\x60\xdf\x02\xe4\x7c\x23\x74\x2d\x87\xc5\xe6\x73\x1e\x62\x41\xc0\x70\x1b\x99\x78\x7b\x4d\x90\x23\xfd\x3f\x1f\x25\x7f\xac\x15\xf6\x81\x4d\xc4\x29\x6c\x78\x8e\x5b\x9b\xed\x4f\x72\x05\xf3\x8f\x21\x93\xd4\xdf\xff\xb0\x53\xee\x96\xd0\xdf\x6e\x09\xed\xbe\x64\x42\xc3\x52\x0f\xc1\x54\xdc\x85\xa7\xd9\xec\xfd\xa4\x27\x0e\x33\x7a\x64\x6b\x66\xb4\xb1\x0e\x9e\xc1\x94\x20\xcd\x33\x98\x7a\x65\xec\xfe\xdd\x7d\x32\x34\x0f\x71\xe7\xb0\x80\xcc\x1b\x9b\x54\xf5\x42\x03\x63\x53\xa4\x5d\x12\xcd\x06\x62\x83\x06\xe2\xe3\x8b\xf4\x6c\x47\x1b\x40\xcd\xca\x9e\x1d\xc5\x65\x65\x0d\x52\x1a\x45\x1c\x35\xa4\x10\x03\x71\x43\xc3\xaf\x95\xe3\x31\xae\xc2\xf4\x41\xa1\xb0\x7b\xc2\xfd\x63\x40\xea\x2c\x10\x81\x93\xef\xde\x7c\x4e\xdf\x3c\xa5\x6f\xbe\x7c\x77\x25\x5a\x3a\x13\x3f\x89\xdd\x93\x2a\x93\x25\xea\x8f\x9c\xf5\x93\xf7\xd0\xb7\x48\x2f\x4f\x69\xa0\x10\xaf\x4d\xad\xf3\x3f\x87\xcc\xfb\x74\xac\xdc\xd8\x37\xdc\xc7\x54\x28\xe9\x68\x46\x30\x07\x05\x78\xa8\xed\x5d\xa6\x0e\x18\xe2\x22\x25\x69\x5c\x6a\x48\x66\xe9\xc2\x18\x2d\x45\x79\xc5\x09\xd4\xf8\x24\xd5\x26\xf8\x3b\x58\x75\x53\xf0\xd8\x28\xc2\xdb\x2b\x99\x88\xa5\x26\x71\xd6\x87\x6e\x56\x57\xe5\xae\xf9\x9b\x46\x4f\x18\x6a\x03\xd0\xd5\x19\xd1\x44\xc1\x42\x7d\xd3\xd3\x38\x0c\xbe\x6d\xa6\x05\x9f\xbd\xd6\x65\x03\x09\xfb\x16\x5c\xc2\x0d\xba\x2a\xb6\xe1\xe0\x23\xf8\x4b\x6c\x84\xd2\x81\x1d\xfd\x8f\x0e\x6b\xe0\x6f\xfa\xa9\x35\xc3\x90\x8b\xe0\x84\xfb\xff\x67\x8b\xb9\x15\xdb\xd8\x9e\x57\x92\x08\x9f\xb2\xe8\xb8\x4c\x64\x99\x74\x21\x25\x03\x51\xdb\xac\x98\xd4\xb2\x40\x93\x6d\xb9\x47\xb0\xc0\x10\x9e\x58\xa2\x24\x52\xc3\x26\xc3\xe4\x4d\xbf\xf9\xf4\xcb\x13\x67\x7f\x0d\x2c\x91\xfd\xfc\xf5\xd3\x43\x60\x4d\x50\x7c\xa4\x31\xc4\x5e\x86\xe0\x48\xe0\x92\xbb\x8c\x58\xf4\xb8\x9b\x47\x04\x69\x5c\x72\xfa\x43\xfc\x0b\x1a\xe1\x3e\x13\x0f\x44\x37\xfc\x8f\xcc\x5b\x9b\xdf\x85\xd6\x29\x77\x9e\x08\x60\xe8\x0f\xc3\x4e\xa0\xb0\xff\xd5\x19\xc2\x58\xac\xa3\xb1\x61\xf7\x61\x29\xc9\xb1\x60\x0d\x14\x10\x1a\x07\xd6\xf7\x57\xab\x32\x4c\xee\x67\xf6\x98\x6e\x4a\xeb\x58\xe7\xbc\xcc\x43\xfc\x3e\xb2\x7f\xfc\xf3\xaa\x38\x4a\xf1\x5f\x60\x65\x2b\x1d\x58\x3a\x02\x2a\x16\x61\xf0\x85\xad\xd2\x9a\xb8\xbd\x2c\x2a\x3c\x61\x31\x08\x50\x69\xad\xb1\x63\x50\x26\x03\x15\x97\x39\x67\x28\xbc\x60\xe6\xdb\x3b\xb6\x95\x11\xe9\x5b\xed\x7c\x47\xca\xc8\xaf\xd3\x9f\x0d\x35\x72\x31\x1d\xc3\x43\x83\x77\x60\x56\xac\x2e\xbd\xd2\x84\x05\xd6\xae\xf2\x78\xd8\x20\x90\xb8\x5a\xb6\x25\xcc\x8e\x8a\x8f\x01\x86\x1d\xb4\xb0\x97\xac\xf0\x64\x74\xc6\xef\x32\xae\xb5\xd0\x98\xed\x69\x5c\xda\x7e\x18\xa5\xf9\xe1\x78\x21\xaa\x96\x99\x8c\xe3\xd2\x68\x4a\xc1\x6d\x41\x1a\x81\xe6\xb8\x14\x84\x87\x72\xac\x32\x20\x36\x74\x24\x7b\xc5\x00\x27\xa5\x69\x25\x4e\x68\xaf\x9b\x10\x78\x43\x7a\xc2\x09\x79\x64\x12\x49\x04\x99\xbd\x0e\x05\xa7\x31\x91\x52\x91\x7d\x9d\xf8\x12\x61\xf5\x4b\x25\x32\x90\xdb\x94\xbf\xbb\x3d\xe7\x30\x9c\x7e\xdd\xe7\x2b\xe9\x19\xbe\x5d\xfd\x42\x44\x09\x95\x26\xf3\x6d\xbd\xb9\x4e\x28\x68\x90\x2b\xea\x22\x39\x8b\x91\x11\x0a\xe2\xad\x28\x5d\x38\x30\x21\x62\xf2\xda\x8a\xf0\xf3\xd7\xf7\xf7\x37\xb4\x80\xba\xe9\x57\x14\x9e\x81\xce\x71\xfe\x74\xf6\xd8\x9c\x14\xdb\x53\x45\x28\x9c\xd1\xdb\x49\x60\xf1\xe3\xb4\xaf\x09\x5d\x62\x37\x1f\x2f\x26\xce\x46\x0f\x3e\x97\x6a\x37\xd0\x92\x64\xde\xea\xf4\x88\x33\xa4\x90\x32\x98\xc4\x78\xd7\x67\xaf\x65\x6e\xb3\xb4\x22\x99\x86\x73\x48\x68\x6e\xd3\xbb\x61\x0e\xdf\x8e\x17\xe7\xf7\x5a\xa6\xd3\xad\xca\xfd\x3a\x85\x47\xaa\xdd\xfb\xb5\x54\xab\xb5\x4f\x1f\xc2\xc3\xf4\x30\x1e\x91\xd0\x86\xc6\xca\x5b\x65\x2f\xb0\xe6\x52\xad\x52\x16\x96\xdc\x35\xb2\xc3\xb8\xa3\x87\x28\x29\x7a\x35\xfa\xec\xad\x9d\x42\xe5\x54\x1b\x91\xe3\xb4\xcd\x39\x9f\x0e\x72\xdb\xf3\xa7\x5b\xa7\xd1\x0c\xd9\xeb\xc1\x8f\x70\x20\x10\xa8\xd6\xf8\x4d\xf7\x16\x0e\x0a\x74\xfb\x16\xe7\xeb\x86\x40\x1c\xaf\x05\xae\x1e\xe0\xe3\x05\x53\x77\x05\xd2\xf1\x84\xc8\x49\xea\xaa\xd2\x0a\x7d\xe0\xec\x18\xde\xdc\x18\x5c\x1e\x5f\x2f\x91\x7f\x5f\x09\x2b\x0a\xaa\x72\xa1\xf5\xd1\xdf\xf8\x46\x35\xb7\x3a\x8b\x3d\x6b\x2e\xe0\x02\x07\xc2\x19\xef\xb9\x81\x76\x74\x89\xa1\x95\xeb\x2e\xc0\x32\x74\xc5\x05\xb5\x4f\x61\x91\xab\x2b\xb4\xbe\xd1\xb3\x73\x2f\x87\x82\xd1\x92\x9b\x37\x0b\x77\xa7\xf7\x04\xb3\xbe\x73\xa9\xe9\x9f\x1e\xbc\xd0\x77\x5e\x8e\x77\x0f\xf7\x77\xcd\xdd\x45\xf8\xbf\x9f\xf6\x94\x2a\xc0\xbf\x96\x1f\x68\x5e\x64\xa3\x47\x5a\xc3\xad\x38\xa1\xd1\x46\x19\xef\x7c\x9b\x74\xfe\xbe\x03\xda\x6c\x32\x3c\x3f\xfe\x3a\x4c\x0e\x93\xff\x06\x00\x00\xff\xff\x8c\xe7\x71\x33\x4a\x15\x00\x00") + +func uiTsComponentsMetricsTsBytes() ([]byte, error) { + return bindataRead( + _uiTsComponentsMetricsTs, + "ui/ts/components/metrics.ts", + ) +} + +func uiTsComponentsMetricsTs() (*asset, error) { + bytes, err := uiTsComponentsMetricsTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/components/metrics.ts", size: 5450, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsHeaderTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x6c\x53\x41\x6f\x9b\x4c\x10\x3d\xc7\xbf\x62\x3e\x5f\xe2\x48\xfe\x20\x8d\xd4\x4b\xa2\x4a\x21\xb1\x9b\xa2\xa6\x58\x32\xa4\x51\x8e\xcb\x32\x86\x6d\x61\x97\xce\x2e\x21\xfc\xfb\xce\x02\x4e\x13\xb5\x3e\x79\x66\xdf\xbc\x79\x6f\x66\x08\x43\xb8\x43\x8d\x24\x1c\x16\x90\x0f\xe0\xac\x0c\x16\x9c\xb4\xa6\x23\x89\x97\x20\x8d\xfc\x49\x46\xc8\x2a\x24\x9c\x72\x61\x67\x43\x67\xc3\x20\x18\x71\x9b\x1d\x24\xbb\x0c\xb6\x9b\x38\xfb\x8f\x63\x9f\xba\x35\xed\x40\xaa\xac\x1c\x5c\x9c\x7f\xf8\x08\x59\x85\x9c\x9a\x59\x20\xea\x5c\x65\xc8\x06\x33\xf6\x5e\x49\xd4\x96\x5b\x77\xba\x40\x02\xc7\xd8\xa8\x65\x1c\x1e\x5f\xd6\xf0\x1d\xc9\x2a\xa3\xe1\x22\x38\x87\x95\x07\x2c\xe7\xa7\xe5\xd9\x95\xa7\x18\x4c\x07\x8d\x18\x40\x1b\x07\x9d\x45\xe6\x50\x16\x0e\xaa\x46\xc0\x17\x89\xad\x03\xa5\xd9\x45\xd3\xd6\x4a\x68\x89\xd0\x2b\x57\x8d\x7d\x66\x96\xd1\xc5\xd3\xcc\x61\x72\x27\x18\x2e\xb8\xa0\xe5\xe8\xf0\x16\x08\xc2\xcd\xa2\xfd\xaf\x72\xae\xbd\x0c\xc3\xbe\xef\x03\x31\x0a\x0e\x0c\x95\x61\x3d\x41\x6d\x78\x1f\xdf\x6e\x93\x74\xfb\x3f\x8b\x9e\x8b\x1e\x74\x8d\xd6\x02\xe1\xaf\x4e\xd1\x34\x6b\xd1\xb2\x28\x29\x72\x96\x5a\x8b\x1e\x0c\x81\x28\x09\xf9\xcd\x19\x2f\xba\x27\xe5\x94\x2e\xd7\xbc\x8b\x83\xeb\x05\xa1\xa7\x29\x94\x75\xa4\xf2\xce\xbd\x9b\xd9\x51\x22\x3b\x7f\x0b\xe0\xa9\x09\x0d\xcb\x28\x85\x38\x5d\xc2\x4d\x94\xc6\xe9\xda\x93\x3c\xc6\xd9\x97\xdd\x43\x06\x8f\xd1\x7e\x1f\x25\x59\xbc\x4d\x61\xb7\x87\xdb\x5d\xc2\x5b\x8c\x77\x09\x47\x9f\x21\x4a\x9e\xe0\x6b\x9c\x6c\xd6\x80\x3c\x31\xee\x83\x2f\x2d\x79\x07\x86\x3c\x85\xf2\x03\xc5\x22\x80\x14\xf1\x9d\x84\x83\x99\x24\xd9\x16\xa5\x3a\x28\xc9\xd6\x74\xd9\x89\x12\xa1\x34\xcf\x48\x9a\x1d\xf9\xfa\x16\xa9\x51\xd6\x2f\xd6\xb2\xc6\x02\x6a\xd5\x28\x27\xdc\x18\xff\xe5\xeb\x4f\x97\xe8\x81\x95\xef\xd3\x71\xbf\x9e\xc6\x77\xd3\xa2\x41\xeb\x97\x25\x8d\x9e\xac\xbf\x39\xb0\xf9\xde\x2e\xe1\x86\x44\x03\x77\xd4\x69\x54\x04\xab\x9c\xa3\xa0\x9c\xa2\xeb\xb2\x11\xaa\x0e\xf8\x46\xce\xb8\xe2\xe4\xc4\xaf\x37\xd2\x05\x61\x0f\x37\x46\x3f\x23\x93\x22\xac\x58\xe4\x90\xb3\xba\x7f\xa1\xbf\x09\xe7\x20\x23\x21\x07\x58\x35\xfc\xff\xfa\xf5\xab\xa9\x45\x6e\x8f\xd8\xc5\xe2\x59\x10\x54\x28\xd8\xdd\x06\xad\x24\xd5\x7a\xbf\xf0\x09\x4e\xb3\xd7\x9b\xf5\x1b\x44\xab\x4a\x3d\x9d\x81\x28\x8a\xd1\xf7\x54\xe5\x33\x3e\x72\xa6\x3d\x1e\x27\x73\xe7\xca\x83\x7f\x4c\x04\xc1\xe9\xd5\xe2\x77\x00\x00\x00\xff\xff\x05\xd5\x4c\x27\xd4\x03\x00\x00") + +func uiTsHeaderTsBytes() ([]byte, error) { + return bindataRead( + _uiTsHeaderTs, + "ui/ts/header.ts", + ) +} + +func uiTsHeaderTs() (*asset, error) { + bytes, err := uiTsHeaderTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/header.ts", size: 980, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsModelsNode_statusTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xdc\x19\xe9\x6e\xdb\x36\xf8\x7f\x9e\x82\x10\x60\x40\xca\x12\x39\xd9\x80\x01\x53\x8e\xad\x6b\xd2\x0b\x39\xba\xb8\x2b\x3a\x18\x46\xc0\x58\x74\xcc\x4d\xa2\x34\x92\x72\xeb\xa5\x7e\xf7\x7d\xa4\x28\x4b\x96\x68\xc9\x0a\x36\x60\x18\x7f\xd4\x0a\xf9\xdd\x37\xd9\xe1\x10\x89\x24\xe3\x53\x12\xa0\x38\x09\x49\x24\x86\x0c\x7e\xee\x85\xc4\x32\x13\xbe\x14\x7b\x43\x80\x38\xe5\x64\x46\x38\x61\x53\x82\x52\x2c\xe7\x67\x8e\xef\x0f\xe5\x32\xa5\xec\x51\x0c\x63\x2a\xe7\x9c\x46\xbf\xaf\xbf\xfc\x10\xd0\x1c\x34\x3c\xb7\xa3\x2a\xca\xa2\x84\x40\x2f\x32\x39\x4f\x78\x80\x7e\xe6\x38\x46\xaf\x79\xc6\x08\xe5\xc8\x7d\x80\xbf\xfc\xc7\xfc\xaf\x9f\x1e\x63\x0c\x64\xa7\x49\xec\xed\xed\x81\x90\x59\x44\xd0\xb5\x96\x15\x3d\xed\x21\x58\xe4\x4b\x9a\x70\x89\xcc\xd1\x0d\x1c\x8d\xb4\xf8\xe6\x58\x2d\x1a\x6b\x90\x94\x27\x31\x15\x04\x9d\xa1\xfb\x42\xda\xeb\xfc\xf7\x7d\x7e\x72\xb2\xb7\x46\x31\x54\x29\x93\x84\xcf\x30\xc8\xff\x22\x0c\x39\x11\x55\xaa\x6a\x31\x22\x3f\x27\xfc\x8f\x00\x09\xc9\xc1\x20\x27\x1b\x87\x38\x47\x69\x1e\xae\x5a\xf8\x28\x05\x2e\x88\x98\x72\x9a\x4a\x9a\xb0\x3a\x3f\xe5\x1e\x1a\x06\x88\x65\xf1\x03\xe1\x5b\xf8\x19\x59\x6b\xa7\x52\x72\x38\xc3\x6c\xb9\xbb\x20\x0d\x4b\xaa\x15\x82\x74\x41\x5d\xce\x4d\x5e\x42\x26\x5c\xc9\x29\x0a\x41\xc7\x93\x4d\x00\x8e\xd9\x23\xb9\x9f\x26\x19\x93\x76\x5d\x20\x50\xb8\x24\xe1\x3d\xde\x72\x9e\xa5\x21\x6e\x3b\xd7\x81\x16\x98\x48\xf1\x47\x3a\xec\xae\x3f\xbe\x7c\xa9\xbf\x36\x41\x23\x82\x43\xc2\xef\x3b\x45\xe2\x24\x8d\xe8\x54\x73\xed\x84\xc5\x0b\x08\x5a\xfc\x10\x91\x76\xd0\xdd\xec\x7f\x47\x44\x9a\x30\x41\x46\x44\xd6\x5d\x11\x54\xc0\xc6\x93\x9e\x74\xaf\xa8\x90\xd7\x38\xad\xd1\x1c\xab\x18\x7b\xbb\x0e\xb1\xc9\x33\x59\x54\x62\x63\x57\x1e\x15\x94\x9e\x9a\xf4\xd3\xa2\x85\xf8\x34\xc2\x90\xe3\x0a\xb4\x1e\xf5\x29\xa7\x0b\xf0\xbd\x0e\x2c\x3a\x45\xf7\x10\x7e\xf8\x8a\x42\x1d\x81\x72\x72\x7c\xa4\xd6\x49\x27\xfc\x7b\x55\xd2\xc2\x11\xfd\x4b\xd5\xa0\x1f\xb6\xe3\x68\xe0\xc0\x56\xa5\x52\xc2\xe5\xf2\xb4\xe1\xc2\x73\xa0\x17\xfb\x50\xdf\x52\xd7\x76\xf8\xb4\xf2\x2a\xa5\x4d\x73\xca\x1e\x20\x96\x4d\x2a\xb7\xf2\xd9\xf4\x63\x9d\x51\xfd\x54\x73\xb2\x30\xca\x3b\x0a\x11\x3b\x29\xb5\x55\xa1\x2d\xca\xfc\x92\x11\xbe\x74\x3d\x2b\x6d\x55\xd6\x4f\xad\xa9\x74\x5e\x73\xb0\x5a\x0b\xcc\x51\xc6\x23\x60\xee\x0c\x4d\x17\xd4\x1d\x51\x0c\x9d\x93\x06\x30\x27\x32\xe3\x0c\xc4\xe4\xe4\xcf\x8c\x08\xe9\x3e\x29\xdc\x40\xfd\x73\x80\x62\x02\x8d\x0d\xc2\xcf\x79\x7d\xf9\xc1\x39\x80\xf0\x92\x1c\x4f\x55\x05\x48\xd8\x3b\x91\xb0\x4b\xce\x13\x2e\xd0\xca\x6b\x50\x55\xcb\x97\x73\xc2\x5c\x17\x6a\x78\x16\xa9\x2a\x66\x95\xdf\x43\x67\x36\x15\x4a\xe9\x34\x32\xf4\xe3\x59\xc2\x2f\xf1\x74\xee\xba\xb9\x42\x1d\x78\x85\x19\xf2\xfc\x01\x4b\x98\x61\x40\x85\x8a\x6f\xda\x4f\xd3\x16\xd5\x45\x67\xc8\x95\x73\x2a\x7c\x1d\xc6\xae\x67\x52\x71\x82\xce\xce\x20\x1b\xa3\xc8\xeb\xe0\xae\x96\x1d\x1f\xd5\xdb\x48\x7d\xad\x3a\xd5\x12\xeb\xcc\x00\x72\x36\x2e\xdd\xba\xb9\x25\x0d\x3f\x22\xec\x51\xce\x95\x66\x47\x1e\xfa\xfa\xb5\x53\xaf\x0a\xee\xb8\x49\xe6\x10\x1d\x4f\xfc\xb2\xb3\xa1\xd3\xc2\xf8\xe5\x9e\xf7\x5c\xeb\xf9\x69\x26\xe6\x45\x08\xb4\x2b\xb9\x26\x51\x64\xed\x86\x0f\xf2\xcd\xe7\xfa\xa1\x5e\x1f\x9a\x62\xa7\xaa\x48\xde\x46\xe1\x25\x83\xa9\x49\xf1\xee\x42\xc8\x8d\x53\xa9\x44\xad\x38\x26\x6b\x4d\x7a\xd8\xe1\xea\x42\xae\xf6\xec\x65\xda\xc6\x39\x40\x8b\x84\x86\x16\x27\x69\x61\x55\x16\xed\x58\x39\xd5\x2a\x13\xd1\x3e\x61\xaa\x05\xe9\x8d\x5c\x93\xad\x94\x6d\xf8\x7e\x5b\xac\x94\xa2\x54\x1d\x6b\x8b\x9a\xb1\x35\x94\xaa\xe1\xaa\xc8\x34\x85\x5a\xed\x64\xbf\x86\xab\xb7\x1a\xef\x5f\x32\x44\x59\x11\x7a\x55\x03\x55\x05\x4c\x66\x1a\x53\x9c\xe7\x33\x83\x5f\x8e\x05\x6d\x79\xba\x66\x69\x88\x88\x29\xf4\x48\x52\x23\x79\x58\x25\x59\x4e\x0e\x07\x75\xa8\x63\x7b\x0f\x69\xa6\x60\xab\x4f\xe0\x2e\xf6\xe1\xf6\xe2\xd6\x55\x17\x31\x4f\xcd\xcd\x0b\x82\x64\x82\x32\x49\x23\x2a\x97\xf9\x5c\xe4\xdb\xbd\x68\x66\x5d\x0d\xe8\x6e\x3a\xc9\x2b\x3e\x5a\x5c\x5a\x58\xbe\x59\x6c\x9a\xc6\x57\x86\x57\x87\x7e\x73\x66\x37\x35\xd8\x6e\x74\x93\xf4\x0e\x0c\x6a\x03\x4b\x27\x6f\xda\xca\x20\xe4\xcc\xac\xc3\x3c\x1a\xa2\x6d\x92\xec\xab\x81\xd0\xf3\x65\x32\xd2\xba\xbb\x1e\xfa\x06\x39\x75\xbe\xff\x9c\xfd\xcb\x7b\xc9\xff\xd2\xfa\xf6\x6b\xd7\x7f\xc6\xfc\x95\xf9\x9e\x48\x1a\x93\x57\x09\x8f\xe1\x93\x83\x61\xc3\xef\x7c\xb5\xa3\x06\x30\xd8\x72\x9d\xc1\x6f\x87\x83\xf8\x70\x10\xa2\xc1\x9b\x60\x70\x1d\x0c\x46\x8e\xd7\x4a\x32\xc7\xbb\x80\x2d\x97\x61\x96\xac\x2f\xd3\x5d\x7e\x2d\x44\x01\x11\x18\xf9\x8c\x4a\x02\x60\xb4\x63\xff\x88\x7c\x6f\xe9\x34\xc6\xe4\x65\xc9\xd9\x50\xc6\x2d\x36\x3a\x1a\x63\x3e\xec\x5f\x10\x09\x09\x23\x9a\xd1\x58\x9f\xcf\x3f\x52\x2e\x33\x1c\x5d\x46\x24\x26\xac\x7e\xb7\x2d\xb4\x79\x6e\x94\x76\x8d\x9b\xc5\xf8\xee\x3a\x21\x5d\xc0\x88\xee\xdc\x24\xca\x72\x18\xdc\x40\x84\x12\x67\x49\xa4\xef\x34\x8b\x6b\x4d\x67\x1b\xa9\xb1\x95\x21\x1c\x4b\x55\x45\xb6\x02\x14\x40\x5c\x41\xa8\x8f\x50\x89\x35\x52\x6f\x29\x02\xb9\x0e\x84\xb1\x0e\xf9\xf5\xe3\x4a\xd1\x03\x20\xbc\xbd\xc0\xf1\x0e\x5a\x47\xb2\x82\xde\xb8\x46\x23\xc6\xa9\x3b\xcb\xd8\x54\x0d\x22\xae\xde\x7e\x1b\xee\x32\x63\xee\xa6\xb3\x45\x0a\x3c\x9e\x73\x32\x3b\x1b\x6a\x5e\x70\xb1\x02\xf1\x0d\x5b\xa5\xc8\x04\x48\x3d\xa1\x69\xc2\x66\xf4\x31\x50\x77\xab\x24\x83\x8c\x58\x1d\x14\x30\x1d\x5a\x16\xcb\x01\x4a\x1d\x53\xee\xca\x9b\xd8\x3b\xa7\x5a\x93\x16\x3e\x4d\x17\xdd\x98\x57\x40\xf0\xc1\xda\xce\xda\xcc\xfa\xd2\x64\x9e\xe5\x7c\xf3\x56\xe8\xf5\xa3\x6d\xde\xf2\x3a\x68\x9b\xdf\x9e\xb4\x47\xf9\x23\x1b\xc2\x72\x83\xbc\x29\x02\xd5\xf2\x93\xc7\x4c\xf1\x24\xe7\xf5\xe4\xf3\x6b\x7e\x7d\xd9\x91\x4f\xf5\xb2\xd3\x8f\xcf\x9d\xea\x02\x16\x53\x55\xba\x43\x4f\x8a\x57\xba\xbd\xa0\x6d\x84\x9b\xdd\xa7\xaf\x77\x8b\xd1\x62\x2b\x0b\xeb\xf0\xf1\x4c\x2e\xba\x99\x6d\xb0\xc8\x67\x5e\xcb\x04\xd7\xdb\xc5\x0c\x0c\x71\x78\xb7\xee\xd5\x3d\x4c\x06\x33\x6c\x4b\xa3\xef\x29\xc7\x2b\xa8\xf8\x4b\x54\xca\x61\xd1\xb6\x31\x2f\x79\xdb\x2a\x81\x65\xbb\x5e\x55\x56\xb6\xc7\xc4\xe1\xfe\x7e\x09\xb4\x5f\x7b\xf3\x21\x4c\x64\xaa\xa0\xcb\x39\xdc\xf0\x89\xda\x43\x31\xa4\x2e\x06\x6b\x99\xa2\x0a\xd6\x9b\xf1\x24\x06\x08\x98\x05\x08\x5f\x10\x5e\xa5\x86\xb9\xfa\xcf\x14\x2e\x88\x0e\x1b\x2c\xd0\xbb\xd1\xed\x8d\xe9\xb1\xd5\x19\x65\x7f\xb8\xfe\x2e\xea\xfb\xa6\x24\xee\x97\x39\x0f\xd0\xa7\xeb\xab\x37\x52\xa6\x77\xf9\x1b\xd6\x01\x4a\x52\x69\x79\xa5\xfb\xf4\xe6\xee\x36\xbf\xe1\x6e\x1b\x3e\x4c\x3f\x00\x9a\xa6\x4b\xc3\x9d\xe8\xdb\xa3\x23\xf4\xa3\x96\xcf\xcf\x71\xe8\x6c\xa9\xb8\x82\xab\xf3\x67\xac\x0f\xe4\x0b\x5c\x94\x02\x54\xdf\xab\xbe\x90\xe7\xff\xae\xf6\xfe\x0e\x00\x00\xff\xff\x68\xfa\x72\xbe\xac\x1a\x00\x00") + +func uiTsModelsNode_statusTsBytes() ([]byte, error) { + return bindataRead( + _uiTsModelsNode_statusTs, + "ui/ts/models/node_status.ts", + ) +} + +func uiTsModelsNode_statusTs() (*asset, error) { + bytes, err := uiTsModelsNode_statusTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/models/node_status.ts", size: 6828, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsModelsStatsTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x84\x92\x3f\x4f\xc3\x30\x10\xc5\x77\x7f\x8a\x53\x27\xe8\x10\xef\xe5\x8f\x80\x0e\x4c\x9d\x90\x58\xab\xab\x73\x4d\x42\xfd\x27\x3a\x9f\x2b\x22\xd4\xef\x8e\xd3\x06\x04\xa8\x35\x37\x58\x3e\xfd\xde\xf3\xbb\x93\xac\x35\xc4\x90\xd8\xd0\x02\x5c\xa8\xc9\x46\x1d\x05\x25\x56\x12\x95\xce\xec\x96\x69\x4b\x4c\xde\x10\xf4\x28\xed\xdd\xac\xaa\xb4\x0c\x7d\xe7\x9b\xa8\x5d\x27\x2d\x77\xf6\xed\xfb\x56\xd5\xd9\x36\x03\x7d\x9f\xad\xf0\x98\xa4\x0d\xbc\x80\x27\x46\x07\xcf\x9c\x3c\x75\x0c\x57\x9b\xdc\x55\xcd\xa9\x7b\x68\x1c\x66\x93\x09\xee\x5a\x29\x3d\x9f\x2b\x98\xc3\xea\x38\x03\x98\xe0\x05\x3b\x1f\xa1\x46\xc1\x69\x30\xe8\x93\xb5\x54\xc3\x96\x83\xcb\x02\xb3\xe3\x80\xa6\xad\xb2\x4b\xab\xac\x48\x96\xbe\xdc\x1f\x0a\x72\xd1\x7b\x1f\x58\x60\x42\x2f\xe3\x56\x13\xf9\x41\x3b\x2f\xc4\x5b\xcc\xeb\xad\x5e\x97\xcb\xbf\xa2\xb1\x6c\xb7\xa7\xf5\x66\x10\x8a\x0b\xf0\xc9\x6d\x88\x6f\x7e\xf1\x1d\x0d\x25\xbc\x47\x5b\xc2\x63\xbe\x97\x92\xe2\x98\x6f\x42\xf2\x72\x39\xbf\x80\xc7\xfc\x02\x9e\xf2\xff\x57\x60\x43\xe7\x79\x63\x4e\xd3\x5f\x56\xc4\x21\x96\x16\x1c\x71\x21\xdf\x62\x94\x75\xea\xf3\x47\xa0\xb5\x47\x1f\xce\xbc\x72\x50\xa7\xf3\xa0\x3e\x03\x00\x00\xff\xff\xf7\xb6\xa5\x6d\xce\x02\x00\x00") + +func uiTsModelsStatsTsBytes() ([]byte, error) { + return bindataRead( + _uiTsModelsStatsTs, + "ui/ts/models/stats.ts", + ) +} + +func uiTsModelsStatsTs() (*asset, error) { + bytes, err := uiTsModelsStatsTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/models/stats.ts", size: 718, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsModelsStore_statusTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xdc\x19\x69\x6f\xdb\x36\xfb\xbb\x7f\x05\x21\xc0\x80\x94\xd7\x91\x93\xb7\xc0\x80\x29\xc7\xd6\x25\x69\xbb\x22\x47\x17\x77\x45\x07\xc3\x08\x18\x89\xb6\xb5\xe9\x1a\x49\xb9\xf1\x52\xff\xf7\x3d\x3c\x64\x5d\x94\x8f\x6c\x03\x86\x09\x85\xa5\x92\xcf\x7d\x93\x19\x0e\x11\x4b\x73\xea\x13\x0f\xc5\x69\x40\x22\x36\x64\x3c\xa5\xe4\x81\x71\xcc\x73\xe6\x72\xd6\x1b\x02\xc8\x29\x25\x53\x42\x49\xe2\x13\x94\x61\x3e\x3f\xb3\x5c\x77\xc8\x97\x59\x98\xcc\xd8\x30\x0e\xf9\x9c\x86\xd1\xaf\xeb\x2f\x37\x00\x34\x0b\x0d\xcf\xb7\xa2\x06\xaf\xe0\xdf\x16\xf0\x04\xa4\x2a\xa5\xe9\x86\x13\x20\x15\x08\xf4\x3a\xe7\xf3\x94\x7a\xe8\x07\x8a\x63\xf4\x96\xe6\x09\x09\x29\xb2\x1f\xe1\x7f\xee\x4c\xfd\xef\xfb\x59\x8c\x41\x5a\x3f\x8d\x9d\x5e\x0f\x94\xcf\x23\x82\x6e\xa4\x0d\xd0\x73\x0f\xc1\x43\x9e\xb2\x94\x72\xa4\xb7\x46\xc2\x2e\x23\x29\x88\xde\x17\x4f\x18\x4b\x98\x8c\xa6\x71\xc8\x08\x3a\x43\x0f\x85\x15\x6e\xd4\xfb\x83\xda\x39\xe9\xad\x51\x34\xd9\x30\xe1\x84\x4e\xb1\xaf\x29\x5f\x12\xe6\xd3\x30\xe3\x61\x9a\x54\xc8\x8b\x47\x39\x24\x0c\x3c\x94\xe4\xf1\x23\xa1\x27\xb5\x5d\x61\x1f\x4f\xcb\xed\xde\xc2\x4b\x89\x28\x3f\x2b\x34\xeb\x48\x98\x73\xca\x3c\x84\x93\x65\xb9\xbe\xda\x20\xe1\x05\xce\xb0\x1f\xf2\x65\x43\xb2\x62\xd9\x2c\xd9\xeb\x05\x98\x17\x3f\x46\xc4\xbc\x7d\x8f\x93\x19\xb9\x48\xf3\x84\xb7\xf7\x37\xc9\x62\xf6\x83\x78\x02\x50\xd7\x6b\x59\xb3\xce\x95\x0a\xae\x0f\xbe\x99\xad\xb2\x36\xa6\x9c\x04\x0f\xb8\x63\x3f\xcf\x02\xbc\x69\x5f\xc6\xe1\xda\x21\x23\x19\x95\x37\x9f\x2e\x2e\xe4\x57\x1d\x34\x22\x38\x20\xf4\x61\xab\x48\x94\x64\x51\xe8\x4b\xae\x5b\x61\x71\x61\xf4\xcd\xa0\x3b\x1a\xf8\x9e\xb0\x2c\x4d\x18\x19\x11\xde\xb4\xb5\x57\x85\x1b\x4f\xf6\xa5\x7c\x1d\x32\x7e\x83\xb3\x06\xd5\xb1\x8c\xf5\x1f\xd7\xa1\x3e\x79\x31\x97\x4a\x00\xec\xce\xa6\x82\xb4\xaf\x3e\xfb\xea\xb2\x81\xbe\x1f\x61\xc6\x14\x6c\x33\xc2\x33\x1a\x2e\x20\x0e\x64\x90\x85\x3e\x7a\x80\x50\xc4\xd7\x21\x54\x1c\x28\x3c\xc7\x47\xe2\x39\xd9\x0a\xff\x41\x54\xbf\x60\x14\xfe\x21\xaa\xd5\xb7\xdd\x38\x12\xd8\x33\xd5\xb3\x8c\x50\xbe\x3c\x6d\x3b\xf3\x1c\x08\xc6\x2e\x94\xc2\xcc\x36\xee\x3e\xaf\x9c\x4a\x19\x94\xbc\xf2\x47\x88\x6c\x9d\xb8\x9b\x39\xd5\x1d\xda\x62\xd5\xdc\x96\xbc\x0c\xac\x54\x27\x21\x6c\x37\xc5\xba\x95\xea\x50\xe8\xa7\x9c\xd0\xa5\xed\x18\xa9\x8b\x36\x70\x6a\x4e\xae\xf3\x86\x9f\xc5\xb3\xc0\x14\xe5\x34\x02\xf6\xd6\x50\x37\x40\xd5\x9b\xd9\xd0\x3a\x69\x41\x53\xc2\x73\x9a\x80\xa4\x94\xfc\x9e\x13\xc6\xed\x67\x81\xec\x89\x9f\x01\x8a\x09\xf4\x42\x08\x44\xeb\xed\xd5\x47\x6b\x00\x71\xc6\x29\xf6\x45\x55\x48\x93\xf7\x2c\x4d\xae\x28\x4d\x29\x43\x2b\xa7\x45\x55\x3c\x2e\x9f\x93\xc4\xb6\x81\x6f\x1e\x89\xca\x66\xd6\xc0\x41\x67\x26\x25\x4a\xf1\x24\x36\xf4\xfa\x69\x4a\xaf\xb0\x3f\xb7\x6d\xa5\xd2\x16\xbc\xc2\x10\x3a\x97\xc0\x18\x7a\x14\x10\x21\xe3\x16\x9d\xb1\x6d\x8e\xea\x13\x4e\x91\xcd\xe7\x21\x73\x65\x44\xdb\x4e\x91\x98\x13\x74\x76\x06\xb9\x19\x45\xce\x16\x01\xc4\xd3\x41\x00\x8d\x27\x9b\x99\xaf\x76\x50\xad\x48\x12\x20\x67\x64\xb3\x5d\x3d\xbb\x24\xe2\x46\x24\x99\xf1\xb9\xd0\xed\xc8\x41\x5f\xbf\x6e\xd5\xac\x82\x3b\x6e\x93\x39\x44\xc7\x13\xb7\xec\x79\xe8\xb4\x70\x40\xb9\xe6\xbc\xd8\x7e\x6e\x96\xb3\x79\x11\x08\x9b\xb5\x5c\xd3\x28\x12\xb8\xee\x06\xb5\xfa\x52\x57\x34\x6b\x45\x5b\xf0\x4c\x14\xcd\xbb\x28\xb8\x4a\x38\x0d\x05\xf3\x6d\x08\xca\x3c\x95\xaa\xb4\x11\x47\x67\xaf\xce\x12\x33\x5c\x53\xc8\x55\xcf\x5c\xb6\x4d\x9c\x3d\xb4\x48\xc3\xc0\xe0\x26\x29\xac\xc8\xa5\x5d\xcb\xa8\x78\x44\xd4\x8a\xb1\x53\xf4\x36\x06\xf6\x48\x66\x6d\x18\x48\x73\x64\x2b\x20\x68\x98\x35\xf7\x77\x85\x4b\x29\x8b\x33\x56\x98\x93\x66\x46\xe8\xe5\xb1\x69\xb1\x16\xb1\x82\x4c\x5b\xa8\xd5\x4e\x06\x6c\xf9\xba\xd3\x7a\xff\x90\x21\xca\xaa\xd0\xa1\xbf\x39\x40\x44\x21\xd0\xc9\xa9\x4d\x71\xae\xa7\x08\xb7\x1c\x14\x36\xe5\xea\x9a\xa7\xa6\xc2\x7c\xe8\x98\xa4\x41\xf3\xb0\x46\xb3\x1c\x26\x06\xa8\x09\x77\x6c\xee\x27\xed\x34\xdc\xe8\x16\x38\xca\x7d\xbc\xbb\xbc\xb3\xc5\x39\xce\x11\x73\xf5\x82\x20\x9e\xa2\x9c\x87\x91\x38\x90\xc8\x61\xc9\x35\x3b\x52\xcf\xc2\x12\xd0\x2e\xa6\x31\xe5\x27\x47\xbf\x3b\x9c\x2a\x81\x0b\xe3\x1b\x2a\x4e\xdb\x01\xca\xf8\xb0\xeb\xb6\xa7\x7a\x5d\x8b\xcd\x86\xd7\xa9\x6f\xc1\xf8\xd6\x37\xf4\xf5\xb6\xb5\x34\x82\xe6\x66\x9c\xf7\xd1\x10\x75\xca\x72\x20\x06\x45\xc7\xe5\xe9\x48\x1a\xc0\x76\xd0\xff\x90\xd5\xe4\xfc\xf7\xf9\xa0\x3c\xbb\xac\x3d\x80\x0a\x17\xa0\xff\x88\x0f\xcc\xe7\xb3\x7f\x8f\x13\x2a\xd3\x3f\xe1\x61\x4c\xde\xa4\x34\x86\x4f\x0a\xc6\x0d\x5e\xb9\x62\x45\x4c\x65\xb0\x64\x5b\xfd\x5f\x0e\xfb\xf1\x61\x3f\x40\xfd\x77\x5e\xff\xc6\xeb\x8f\x2c\x67\x23\x49\x85\x77\x09\x4b\x76\x82\x93\x94\x15\x87\x9d\x6d\xce\x2d\x44\x01\x11\x12\xf2\x05\x95\x04\xc0\x6a\xc7\xee\x11\xf9\xc6\xd0\x76\xb4\xd1\x2b\xe5\xa7\xa6\x8d\x5d\x2c\x6c\xe9\x93\xea\x1c\x70\x49\x38\x24\x0e\x6b\x95\x85\xe6\xdc\xfe\x29\xa4\x3c\xc7\xd1\x55\x44\x62\x92\x34\x0f\xc1\x85\x36\x7f\x21\x54\xb7\xcd\xa0\xc5\x5c\x6f\x5b\x41\xb8\x80\xd9\xdd\xba\x4d\x85\xf1\x30\x78\x82\x30\x21\xd1\x92\x70\xd7\x6a\x57\xda\xce\x98\x2d\x28\x8d\x8d\xec\x60\x97\x8b\x6a\x02\x9c\xcc\x00\x0a\x84\x8a\x7d\xf1\x11\x28\x91\x02\x82\xc0\x86\x96\x33\x40\xc5\x22\xbc\xf1\x78\x4e\xc9\xf4\x6c\x28\x9a\x16\x9c\x59\x20\xc4\x55\x3e\xc8\xd1\x5d\x2c\xca\x1f\x18\xdf\x45\xf0\x4f\x00\xe7\x19\xf9\x69\x32\x0d\x67\x9e\x38\xc6\xa4\x39\x84\xd9\x6a\xd0\x85\xe3\x38\x13\x67\xb0\x9f\x84\xb7\x84\x7f\x49\xe9\x6f\x35\x31\x9b\xd4\x71\x10\x80\x5d\x99\x9b\x28\xd8\xfd\x99\xbc\x56\x04\x76\x62\xa2\xdf\x7b\x31\x19\xa9\xeb\x29\x84\x79\x8d\x45\x91\x14\x95\x7c\x54\x5c\xcb\xeb\xac\xfd\x2c\xf6\xb3\x1a\xef\x77\xe6\x53\x3d\x0e\xec\xc3\x47\xde\x02\x9a\xcc\x55\x29\x97\x7b\x11\xbc\x96\xd5\x16\x75\xd2\x6d\x57\xe3\xbd\xc8\xaf\x2f\x35\xbb\x39\x18\x5b\xf2\x8b\x98\xc8\xca\x5e\xe3\xa0\xa6\x41\xd3\x60\xb3\xa7\x7b\x13\x30\xc2\xe1\xfd\xba\x71\xed\x63\x2f\x18\xed\x36\xf5\xbd\xbd\xe4\x78\x03\xa5\x6f\x89\x4a\x39\x0c\xca\xb6\x27\x08\xa1\xaa\x91\x83\x61\x79\xd2\xea\x06\xe5\xd7\xfa\x73\x78\x70\x50\x02\x1d\x34\xae\x45\x48\xc2\x72\x71\x13\xc7\xe7\x70\xfc\x25\x62\x0d\xc5\x90\xb5\x18\xcc\xa5\x6b\x2a\x98\x6f\x4a\xd3\x18\x20\xa0\x31\x12\xba\x20\xb4\x4a\x0d\x53\xf1\x27\x0a\xca\x88\x8c\x1a\xcc\xd0\xfb\xd1\xdd\xad\xee\x8e\xd5\x86\x7d\x30\x5c\x7f\x4f\xf3\xc4\x97\x7f\x08\xa8\x49\x62\x3f\xcd\xa9\x87\x3e\xdf\x5c\xbf\xe3\x3c\xbb\x57\xd7\x3c\x03\x94\x66\xdc\x70\x99\xf5\xf9\xdd\xfd\x9d\x3a\xfc\x75\x75\x62\xdd\x0e\x80\xa6\xee\x58\x70\x5a\xf8\xff\xd1\x11\xfa\x4e\xca\xe7\x2a\x9c\x70\xba\x14\x5c\xc1\xd3\xea\xa2\xe7\x23\x79\x82\x13\x84\x87\x9a\x6b\xd5\x8b\x65\xf5\xbb\xea\xfd\x19\x00\x00\xff\xff\xdb\xd1\xe8\xc5\x5a\x1a\x00\x00") + +func uiTsModelsStore_statusTsBytes() ([]byte, error) { + return bindataRead( + _uiTsModelsStore_statusTs, + "ui/ts/models/store_status.ts", + ) +} + +func uiTsModelsStore_statusTs() (*asset, error) { + bytes, err := uiTsModelsStore_statusTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/models/store_status.ts", size: 6746, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsModelsTimeseriesTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xc4\x59\xdf\x6f\xdc\xb8\x11\x7e\xf7\x5f\xc1\xf3\x93\x94\xdb\x68\x93\x7b\xe8\x83\x1c\xa7\x0d\xee\x82\x1e\x0e\x75\x93\x3a\x46\x7b\x40\x10\x18\x5c\x89\xbb\xab\x46\xa2\x14\x92\xb2\xb3\xbd\xdb\xff\xbd\xdf\x90\xd4\x6f\x69\xb3\x06\x0e\x38\x01\x71\x64\x89\x1c\xce\x7c\xf3\xf1\x9b\xa1\xbc\x5e\x33\x5d\xd6\x2a\x11\x31\x2b\xca\x54\xe4\x7a\x6d\xb2\x42\x68\xa1\x32\xa1\x23\xa3\x2f\xd6\x18\xf0\x4a\x89\xad\x50\x42\x26\x82\x55\xdc\xec\xaf\x2f\xa3\x68\x6d\x0e\x55\x26\x77\x7a\x5d\x64\x66\xaf\xb2\xfc\xbf\xed\x5d\x94\x62\xda\x25\x5b\xbf\xc6\x54\xf6\xa6\x36\xfb\x52\xc5\xec\x86\x1b\xc3\xee\x14\x4f\x0e\x2c\x28\x70\xff\xb7\xa4\x4c\x3e\xab\x92\x27\xfb\x9c\x6f\x74\x94\x94\x45\x78\x71\xb1\x7e\xf6\xec\x82\x3d\x63\x37\xd6\x0d\x96\x94\xd2\xf0\x4c\x6a\x96\x72\xc3\xbd\x6f\xac\xaa\xf3\x5c\xa4\x6c\xab\xca\x82\xb5\x26\x22\xcc\x5a\x5f\x60\x44\x9d\x8b\x66\xf6\x6f\x17\x0c\x97\xf8\x5a\x95\xca\xb0\xe6\x95\x30\x2a\x4b\x9a\x77\x74\x65\x85\x7d\x5f\xc1\x5c\xa6\x05\xbb\x66\xf7\x4d\x10\x37\xee\xff\xf7\xee\xcd\xd5\x45\x3b\x05\x4e\xb2\xf6\x17\x78\xfb\xaf\x5a\xa8\xc3\x9b\xdd\x4e\x89\x1d\x37\xa5\x62\x99\x66\x5c\x32\x21\xeb\x42\x28\x6e\xb2\x52\xb2\x72\xcb\xcc\x5e\x30\xfe\xc0\x33\x04\x0b\x3f\x78\x3b\xba\x6f\x68\x5b\xcb\x84\xc6\x6b\xb6\x85\x19\x4a\x02\x73\x59\x60\x5f\x6a\x97\x0d\x76\xb7\x87\x75\x29\x44\xaa\x99\x29\xd9\x46\xb0\xcf\xa2\x32\x2c\x93\x4c\x1f\x64\xc2\x1e\xe1\x72\xdf\x20\x2d\x7a\x07\x33\x1f\xec\xec\xb1\x9f\x03\x0f\xa5\x1d\x8c\xe5\x1e\x84\x8a\xfa\x36\x82\x35\xb0\x31\xe5\x80\x14\xf6\x49\xd8\x1b\xb5\x6e\xef\x3d\xde\x64\x7b\x02\x4c\x87\x3a\x5d\x6f\xfe\xfd\x77\xc0\xfd\x72\x35\x7e\x78\x7f\xfb\xe6\xee\x2d\xde\xfc\xd0\xbd\x39\x0e\xc0\xef\x7b\xf7\x13\x98\x51\x95\x99\x34\x16\x75\xa6\x41\x48\xc0\x9b\x76\x4f\x25\x9e\x12\x7a\x07\xa6\x84\xae\x80\xad\x98\x82\xd8\x37\x38\xc1\x73\x04\x62\xb7\xa0\x05\x61\x53\x6f\xb1\x2f\x18\x90\xd1\x7c\x27\x3c\x8c\x7d\x7b\x1e\xd1\x13\x30\x46\xa7\x70\xc4\x42\x42\x6d\x39\xb6\x5d\xb7\xf0\x10\x46\x6b\xcf\xf0\xa2\xba\x97\x5c\x96\x3a\x66\x40\x7e\x23\xd4\xd5\x60\xd0\x03\xcf\x6b\x31\x7d\xb5\x8c\xab\x4d\xdd\xad\xd0\x75\x3e\x44\xb6\x85\x12\x2f\xbe\xc1\xc6\xbe\xb9\x19\x20\x7b\x2b\x44\xf6\xfe\x04\xa0\x4f\xe3\xe5\x99\x80\xf6\x43\x1c\x42\x2a\x79\x21\x62\x0d\xa5\x90\xbb\x21\x8c\x2d\xaf\x00\x73\x9b\x8f\x8f\x9f\x9e\x86\xe7\x07\x01\x39\xe2\x26\xd9\x63\x5f\xdb\xd8\xea\x24\x41\xb4\xdb\x3a\x67\x65\x6d\xaa\xda\x34\x72\xb1\x36\x7a\x6d\xf1\xee\x1b\x12\x32\xb5\xab\x9e\x23\x05\x63\x2e\xce\x82\xff\x27\xc2\x4e\x48\x0c\x91\x77\xc4\x02\xba\xbd\x51\x1f\x3f\x9d\x4d\x58\x47\x55\x94\x92\x02\x01\x74\x4b\x42\xe3\x73\x51\x08\xfc\x9e\xb2\xcd\xc1\x46\xe6\x78\x8c\x0a\x86\x24\x00\x32\x92\x4a\xcc\x75\x55\xe2\x29\x81\x8c\xfc\xb7\x66\xe3\x20\xbc\x7e\xed\x0b\xca\xab\x61\xb8\xaf\xcf\x0f\x25\xcd\x74\xe5\x59\xd2\xee\xbe\x71\x49\x38\x50\xe6\xe7\x13\xd5\x39\xde\x54\x15\x37\x23\x80\x56\x28\x13\x83\xbd\x62\x45\x64\xf2\x77\x28\x48\xf1\x48\xae\x57\x7e\x25\xbf\x13\x3e\x7e\x0a\xe3\x85\xa0\x46\x20\x3c\x70\xc5\x6a\x95\x43\xc2\x2f\x5b\x0a\x5f\x8e\xf5\x48\xb9\xa2\x7e\x3d\x9a\x4b\x97\xf5\xb0\x51\x33\xfb\x4b\xb4\x13\x86\xc8\x1b\x84\x80\xe7\x65\xf4\x42\xfc\x65\x35\x99\x85\x58\x9a\x39\xb8\x3d\x67\x86\x2f\xaa\xb1\x8f\x33\x2a\x78\x15\x04\x2a\x64\xd7\x08\x48\x09\x53\x2b\x39\xe3\x1c\x5d\x56\x1f\x98\x9a\x5a\xa4\xab\x2b\xed\x31\xdd\x4f\x07\x1d\xaf\x8e\xe1\xf0\xe9\xb1\xfd\x6d\xb4\x19\xac\x0f\x45\xa4\x04\x5c\xd5\x26\xf8\x0d\xa8\xc6\xf8\xb7\xc2\x3e\x45\x53\x95\xc6\x97\xef\xdf\x7d\xb8\xbb\x44\x1e\xbf\x1a\x34\x56\x26\x96\xa5\xfc\x45\x97\xf2\xad\x52\xa5\xd2\x2b\x8b\x70\x4c\x3f\x8e\xe1\xc4\x8b\x08\xb4\x91\x41\x90\xc6\xc3\x5c\xba\xe8\x67\x03\x43\x2f\xf7\xbe\x44\xf7\x05\xbe\x30\xb0\x80\x28\x89\xad\x86\x66\xcc\xb1\x6b\x9b\x89\x1c\x52\x64\x75\x47\x14\x95\x39\x30\xae\x14\x3f\xe8\x68\xd6\x58\xb6\x65\xc1\x77\x69\xe4\xf7\x7b\xb8\xb0\x24\x5d\xed\x20\x70\xa5\x2f\x05\xf3\x00\xce\xce\x8c\xd0\x4e\xbd\x45\x97\xd8\x66\x77\x71\x31\xeb\x96\x8a\x3a\x9d\x3f\xe5\x19\x5d\xfd\xb1\xd6\xc1\xc5\xd1\xf3\x3e\x1e\xc3\xf9\x88\x7c\xee\xd3\xe9\xdb\xfe\x8c\xe3\x72\x53\x7a\x2b\x12\x08\x5e\x4f\x15\x9d\x5e\x3c\xee\xb3\x64\x0f\x9d\x93\x19\x08\x4a\x8f\xd3\xba\xeb\x51\xd1\x6f\x63\xbb\xa1\xc3\xd0\xd9\xff\x06\x85\x03\xfc\xc2\x9e\xa2\x84\x6f\x78\xf2\xf9\x91\x2b\x24\xda\x36\xe0\xa4\x3d\x49\xad\x70\x30\x30\x56\x9c\x22\xf6\x1f\xd0\x0a\xde\x6f\x01\xfd\x5e\xa4\xab\x4e\x6c\x87\xed\x40\x9e\x53\xc5\x52\xe2\x39\x88\x54\x43\x96\xa1\x63\x6e\x91\x46\xd1\x06\x56\x4f\x09\x72\x92\x73\xad\x07\xe1\x0e\x33\x56\xa9\xec\x81\x28\x7b\x3f\x52\xb3\x21\xb2\x36\x74\x55\x27\x40\x25\xa8\xea\x4d\x9e\x51\x05\x95\x69\xf9\xf8\x93\xc7\x27\x76\xbd\xd3\xaa\xb3\x37\x2b\x99\x51\x14\x8d\x55\x73\x86\x41\x54\x6c\x22\xef\x10\x58\xe3\x6e\xae\x46\x9a\x30\x2d\x2c\xc1\xb9\x0a\x4c\x17\x49\x2c\xf0\x24\x11\xc4\x12\x52\x3c\x52\xc7\x02\x3d\x9c\x32\x8a\x46\x5a\x99\x1d\x8f\xf5\xd3\x7b\x5a\xfa\xdc\xb9\x3e\x84\x66\xc6\xa4\xa7\x6f\xaf\xe2\x90\x81\x55\xe3\xd0\xca\x23\x40\xfa\x38\x00\x23\x1c\x83\x30\x03\xc7\x5c\xb5\xbc\xe1\x12\x6d\x0b\xc2\xa8\x2b\x22\x85\x6f\xac\xf6\x9c\x52\x40\xcc\xee\xb7\xad\xae\xf0\x6c\x84\x79\x14\x42\xf6\x2d\x15\x78\x99\xa1\x53\xa0\x06\x02\x27\x05\xf0\x49\x9f\xc1\xbc\xc1\xfa\x0b\xd4\x73\x0b\x8f\xa4\x96\x90\xc6\x59\xf6\x6a\x7e\x8a\x20\x0d\x8f\xad\x92\x9f\x1e\xe8\x6c\xbf\xad\xca\x64\xef\x39\x8a\xf1\x2f\xae\x86\xf4\x81\x76\xdb\x76\xd1\x71\xbc\x56\xa2\xdd\x82\x28\x19\xcf\xc9\x3a\x94\x41\x74\x67\xa5\x8c\xba\xa2\xe7\xdb\x3c\xdb\xed\xcd\x8a\xc1\x85\x3d\xd7\x63\x83\x84\x52\x2e\x6c\x4f\x85\x9e\x55\x96\x06\xe6\x60\x02\x0c\xa5\x76\x56\xa4\x5e\x0b\xb8\xec\x4c\x8d\x95\x60\x68\x08\x15\xab\x94\xf9\x01\x3f\x84\x6f\x81\x71\x20\x6f\xcb\x0a\x5c\xf4\xdf\x03\xe0\xa5\x3d\xcf\x44\xf3\x80\xa0\x89\x26\x15\x23\xb9\x8a\xa7\xdb\xc2\xa7\xe2\x9b\xed\x59\x9b\x6b\x9b\x87\x99\x8f\x02\x95\x50\xe6\xf0\xca\x26\x68\x34\xed\xe8\x13\x36\x4a\x41\x9f\xb6\x74\x3d\x63\x3f\x36\xa2\x83\x88\x68\xd3\x0d\xa8\xe4\x94\xba\xdc\xb8\x2f\x20\x4d\x0d\x6c\x54\x77\x6c\x8a\x88\x9f\x67\xc8\x85\x45\x78\x54\x73\x7b\xd4\xa5\x6b\xa0\x75\x0d\x6a\xae\x73\xb5\x1e\x40\xb1\x46\xea\xd3\x8c\xf2\xb9\x7d\xd7\x21\x1c\x84\x53\x88\xa9\x88\xba\x4d\xdd\x4b\xc5\x52\x21\x25\xf1\xe9\x98\x74\xcd\x16\xeb\xe7\xd4\x64\x64\x73\x03\x55\xfa\xce\xe1\xcd\x7e\xff\x9d\x4d\x07\x39\xe4\xba\x51\xe1\x68\x6b\xf4\xbd\x6e\x1d\x39\x55\xf6\xdd\x12\x5e\x4b\xae\x4f\xac\x38\x5f\xd9\x3b\x13\xc2\x6f\xee\xc5\xc0\xbe\x65\xa0\x37\xa5\xa1\xdc\x39\x4e\x5b\xad\xf8\xfe\xfb\x73\x5b\xa9\xe3\xa9\xba\x34\xc3\x6a\x2d\x7c\x1d\x4e\xf6\x5c\xee\xfc\x21\xd7\xc9\x4a\x2d\x53\xa1\xf2\x03\xf9\xeb\xce\x5b\x8e\xeb\xa7\xe9\xda\xd8\x0b\xbe\x78\x7a\x2e\xd5\x53\xb7\xc6\x35\xfb\x72\xb2\x92\xce\x78\xec\x73\xe9\x8a\x96\xf3\xb7\x28\x35\x3d\xa0\xa6\xa2\x79\xed\x4f\xe5\x76\x95\x15\xd1\x85\x4b\x12\xca\xb1\xb1\x0a\xc3\x31\xeb\x74\x4c\x0d\x45\xc6\x25\x61\x21\xb4\xb9\x7d\xb7\x58\x74\xfb\xa9\x7e\x2a\x12\x82\xa8\x31\x00\xc2\x3d\xf1\xb1\x37\x4d\x59\xbf\x9c\x5e\xb9\x54\x52\x8f\x39\xb6\x86\x36\xb3\x34\x68\x35\x13\x9e\x43\xd6\x33\x99\x28\xc1\xfd\xb1\xa1\xa6\x63\xb4\xd7\x38\x5b\x6c\xf0\xce\x9f\xd0\xdd\x09\x02\xed\xfa\xd8\x9c\x5b\x35\x40\xa1\x82\x2f\x6a\xf0\xdd\x44\x51\xfd\x09\xe9\x9b\x08\x55\x0c\xa5\x87\x2e\x52\xf5\x42\xb6\xe6\x83\x45\x68\x2f\x4f\x27\xcb\x8e\x43\xae\x7c\x75\xfd\xa3\x73\x64\xb7\xe3\x93\x13\x65\xb5\x63\x90\x28\xff\x84\x4c\x12\xc6\x6d\x7f\xde\xa7\x32\x65\x02\x1d\xf6\x74\x03\xd8\x7e\x3d\x08\x5b\x5e\x97\x09\x72\x8d\x1a\x7e\x1a\x18\x27\x53\xbe\x4b\xf9\xe3\x70\xb1\x76\x4f\x22\xd2\x3a\xfc\x84\x86\x18\x9d\xc6\x8f\xb9\x40\xb9\xe9\xcb\xa6\x3f\x5a\x53\xd8\x99\xe7\x49\x0e\x96\xa6\x07\xef\xd1\x04\x82\x26\xac\x65\x91\xb7\x67\xc8\xb3\xeb\xdf\x9c\x92\x2f\xd7\x1e\xdf\xbd\xf4\xf4\x2e\xf2\x27\x83\xf9\x8f\x11\x74\xb9\x0e\xa6\xa0\x44\x54\x81\x6f\x58\x5c\x25\x5c\xcd\x57\xdb\xf9\x93\xea\x52\x9d\x73\x1f\x12\xc8\xde\x6a\xa9\x92\xcd\x80\x34\x5d\x63\xc0\x80\xe9\x32\x4f\x3f\x18\x0c\x3e\x86\xe0\xe4\xa1\x41\x68\xda\x2a\xdc\xf8\xbd\xe2\x3f\x76\xea\x36\xd5\xdd\x9e\x71\xdf\xd3\xfa\xd6\xb8\xa2\xbf\x7c\x29\x2d\xdc\xdf\x6f\x34\xfb\xe5\xc3\xbb\x7f\x32\x77\xc8\x5b\x38\x26\xb4\x1f\xde\x06\x9e\x04\x5f\xf7\x2a\x66\xbf\xde\xfc\xe3\x67\x63\xaa\x5b\x47\x3f\x34\xbe\x15\x7d\xf5\x1c\xb7\x99\xbf\xfe\x7c\xfb\xae\xb2\x7f\x11\x0a\xfd\x79\x72\xf2\xbd\xd4\x82\x06\x93\x11\xf0\x32\xb5\x66\xaf\xd9\x0f\x2f\x5e\xb0\xbf\x5a\xf7\x22\x37\x27\xdb\x1e\x68\xd1\xa8\xf9\x03\xc8\x1d\x4e\xda\x21\x8b\xd9\xf8\x59\xff\xbb\x82\xfb\x79\xbc\xf8\x7f\x00\x00\x00\xff\xff\x24\x88\x6a\xd1\x1c\x1c\x00\x00") + +func uiTsModelsTimeseriesTsBytes() ([]byte, error) { + return bindataRead( + _uiTsModelsTimeseriesTs, + "ui/ts/models/timeseries.ts", + ) +} + +func uiTsModelsTimeseriesTs() (*asset, error) { + bytes, err := uiTsModelsTimeseriesTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/models/timeseries.ts", size: 7196, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsPagesGraphTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x56\x51\x8f\xe2\x36\x10\x7e\xe7\x57\x4c\xf3\x14\x4e\xc8\x61\x75\x52\x1f\xb8\x72\x3a\xba\xad\xb6\x95\x8a\xd4\x6e\x57\xf7\x72\x3a\x9d\x8c\x19\x12\xf7\x1c\x9b\xda\x0e\x1c\xaa\xf8\xef\x1d\x3b\x21\x1b\x42\x58\xaa\x95\x6a\x21\x48\xf0\xcc\x37\x9f\xe7\x1b\x8f\x9d\x65\xe0\x4c\x65\x05\xce\x60\xcb\x73\x74\x59\x6e\xf9\xb6\x60\xde\x8d\x32\x9a\xfa\xc1\xe2\x06\x2d\x6a\x81\x34\xeb\x8b\x79\xc2\x58\xe6\x0f\x5b\xa9\x73\x97\x95\xd2\x17\x56\xaa\xbf\xda\x27\xb6\x26\xb7\x04\xb2\xf7\x37\x5d\xd7\x6f\xe9\x73\xdb\xbc\x34\x6b\x54\x2e\xf3\xb2\x44\x87\x56\xa2\xbb\xe5\x20\x4c\xb9\x35\x1a\xb5\x27\x4e\xe8\xad\x14\xad\x07\xb9\xc0\xa2\xf2\x85\xb1\x33\xf8\xd1\xf2\x12\x1e\x6c\xa5\x51\x5a\x48\x57\xf4\xc6\xf2\xfa\xed\x43\x5e\x72\x5a\x07\xc1\x8c\xbb\x0e\x4b\xee\x3d\x3c\x59\x2e\x0e\x90\x96\xf4\xfc\x41\x18\xf1\xd5\x1a\x2e\x0a\xc5\x57\xae\x36\x1f\x65\x6f\xde\x8c\xe0\x0d\x2c\xd6\xa5\xd4\x1f\x25\xee\x1d\x48\x07\xbe\x20\x76\x56\x96\xdc\x1e\x80\x56\x53\x29\x84\x8d\xb1\x70\x7f\xf2\x47\x07\x3c\x38\x48\xe7\x2d\xf7\x72\x87\xb0\xc7\x55\x80\x91\xda\xa3\xdd\x70\x81\x8c\xde\xb2\x51\xe3\xdb\x01\xff\x67\x04\x10\x43\x02\x59\x3f\x04\xcd\x42\x3c\x4e\xd1\x8c\xd9\x00\x7d\x84\xa1\xd4\x6c\x7d\x8c\x17\x32\x08\x75\x0a\x21\xea\xeb\x58\x74\xcc\xe8\x1b\xbf\x6d\x8d\xf5\x27\x76\x35\x52\x00\x0f\xa3\x09\x00\x31\xc8\x02\x5c\xc9\x95\x82\x35\x96\x46\xd7\x7c\x8d\x0e\x91\x38\x88\x82\x5b\x3f\x81\x7d\x21\x45\x01\x6b\xe9\xb6\x8a\x1f\x02\x19\xbf\x37\xf5\x9c\x7b\x86\x69\xa6\xa9\x0e\x62\x76\x1c\x27\x6a\x6b\xee\x39\xf1\xf3\xc0\x1d\xd8\x20\x1c\xee\x70\x0d\xab\x03\x41\xfc\x51\xa1\x3d\x2c\xb9\xa6\xda\xb4\xac\x45\xc9\x9a\xa7\x73\xf2\xbf\x93\x51\xcb\x3d\x0c\xa1\xb8\x73\x94\x6d\xed\xad\x51\x0a\x2d\xc8\x72\xab\xb0\x0c\x05\x02\x5f\x4e\x55\xbb\xac\x7f\x3b\x56\x5d\x88\x30\xca\x3a\xfc\x6c\x19\xeb\x91\x2d\x9b\xd2\xea\x52\x7b\xd7\x73\x71\x85\xd9\x3f\x72\x8f\x6e\xb6\x32\x46\x21\xd7\x7d\x83\x28\xf0\x8e\xab\x99\xae\xca\x55\xf0\xef\x03\x54\xe5\xdf\x01\x1f\xe6\xa0\x71\x0f\xbd\xd0\x8f\x28\x68\x11\x91\x40\x7a\x37\xa5\xac\x7e\x1f\xbe\xee\xa6\xd3\xe9\x04\x7a\x40\xf5\x18\xa2\xbe\xc8\x73\x8b\x39\xf7\xc6\xb2\xc5\xc7\x87\x09\x24\xc2\x32\x4d\x76\x4c\x90\xcc\x8e\xb9\x4a\x08\x74\x8e\xdd\x25\xe3\x3e\x79\xd2\x1e\x5f\xc7\x6e\x80\xdc\x6d\x6a\x5f\x1e\x17\x4f\x3f\xbf\xcc\xaf\x87\x2b\x62\x85\x56\x82\x00\xd2\x71\x5f\xce\x30\x7c\x21\x1d\x6b\x74\x1d\x5e\x44\x57\xdd\x34\x9a\x9f\x24\xb9\x48\x47\x1f\x90\x51\x6b\xb2\xe8\x8a\xf4\xba\xe5\x49\x7e\x8a\x4d\x75\xff\x6b\xf3\x96\xa6\x63\x98\xbf\xbf\x82\x35\x89\x19\x9c\x5e\x60\x1e\xfb\x8b\x37\xba\xd2\xca\xf0\x35\x81\x0d\x2d\x5d\x50\x39\xda\x36\xe2\x19\x9b\xdb\xd8\xde\xe4\xb9\xc2\xba\x4b\xcc\xa1\xa6\x7b\x35\xbf\xed\x26\x20\xd3\xef\xce\xff\x19\x4a\x8c\xdc\x40\x7a\x6e\x35\xbc\x80\x16\xff\x94\x22\xca\x60\x5d\x6c\xf1\xdf\xb6\x38\x07\xb3\x7f\x04\x12\x19\x5f\x83\xfb\xa2\xfc\xc7\x57\x97\x44\xd7\xf3\x2c\xdd\x4d\x6f\xdb\x54\x5a\xc4\x4e\x2b\xda\x06\x95\x8e\x67\x2f\x74\x2b\x6a\xa0\x95\xd5\xb1\xa4\xef\x3b\x2e\xef\xfe\x6b\x9c\x1d\x9d\x2f\xa9\xf0\x56\x75\x82\x5c\x0a\xb1\xe3\x16\x56\x95\xf7\x46\x3f\xe1\x37\x3f\xa3\xdd\x46\x1d\xfd\xa2\xc9\x91\xa2\x01\xe9\x96\xa2\xcf\x40\x54\x29\xc9\x9f\x64\x0c\x4f\xc6\x73\xe5\x92\x8b\x6c\x5d\x97\x6f\x00\x24\x86\xbc\xc4\x18\x4e\x58\x99\x26\x2c\x1e\x8e\xe1\x18\x49\x26\xf0\xe9\x4a\x89\x90\xdd\x2f\x6f\x69\x3e\xa9\x77\xc1\x4f\x74\x1c\x26\xe3\xa1\xc6\x16\xc6\x7d\x7b\x23\x69\x1b\xcb\x6f\x52\xd7\x1b\x88\x09\x8b\x44\xb0\xce\x50\x53\x27\xff\x3f\x10\xd1\x4f\xae\x1c\x12\xad\x81\xd4\xdb\xca\x7f\xa2\xdb\x1a\xce\xeb\xac\x7e\x26\x97\x6b\x5b\xe6\x34\xa8\x7f\x54\x74\x8b\x7c\x96\xe1\x1a\x83\xd3\xa0\x0b\x8a\x92\xe2\xeb\x0c\x22\xef\x4e\x67\x79\xc9\xf1\x38\xbe\x58\xd9\xe7\x5e\x6d\x3f\xff\x1e\x47\xc7\xd1\xbf\x01\x00\x00\xff\xff\x47\xd6\x5d\x9c\xe1\x0a\x00\x00") + +func uiTsPagesGraphTsBytes() ([]byte, error) { + return bindataRead( + _uiTsPagesGraphTs, + "ui/ts/pages/graph.ts", + ) +} + +func uiTsPagesGraphTs() (*asset, error) { + bytes, err := uiTsPagesGraphTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/pages/graph.ts", size: 2785, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsPagesMonitorTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x7c\x91\xbb\xce\xdb\x30\x0c\x85\x77\x3d\x05\xe1\xc9\x09\x0a\x6b\xe8\x96\x5e\x90\xb4\x43\xa7\x00\x19\x8a\xee\x8a\x4c\xdb\x6a\x75\x09\x28\x2a\x69\x10\xe4\xdd\x4b\x25\x75\xe0\x7f\xf9\x35\xd8\x22\xce\xf9\x0e\x09\x4a\x6b\xc8\xa9\x90\xc5\x0d\x9c\xcc\x88\x59\x87\x14\x1d\x27\xea\x38\x2b\x2d\xe2\x67\xc2\x01\x09\xa3\x45\xd1\x79\xfa\xd2\x74\x9d\xe6\xeb\xc9\xc5\x51\xac\x8e\x27\x72\xfe\xf7\xeb\xd6\xf5\x82\x35\xa0\xbf\x2a\x61\x61\x57\x78\x4a\xb4\x81\x6f\x64\x02\xfc\xa0\x12\xd1\x11\xb4\x47\xa9\xba\xf1\x59\x6d\xc7\x60\x84\xb2\x29\xac\x96\xc0\xde\x30\xc3\x4f\x32\xf6\x0a\x6d\x90\xfb\xd6\x26\xfb\x87\x92\xb1\x93\x37\xc7\xfc\xb4\x2b\xbd\x5e\x2b\x58\xc3\xae\x0f\x2e\xfe\x72\x78\xc9\xe0\x32\xf0\x24\x63\x92\x0b\x86\xae\x10\x52\x5f\x3c\xc2\x90\x08\xbe\xcf\x3c\x66\x30\x15\x70\x99\xc9\xb0\x3b\x23\x5c\xf0\x58\x63\x5c\x64\xa4\xc1\x58\xec\xa4\xd2\xea\x3f\xbb\x08\xbf\x29\x80\x47\x4b\x10\xf7\xfe\xb9\xa3\xb9\xe3\x59\x1c\x8f\x3e\xf8\xf7\xe4\x13\xc9\x6e\xc0\xfa\x92\x25\x11\x32\x1b\x2e\xb9\x7b\x60\x5a\xbe\xe2\x48\xc4\xf3\x6c\x73\x4e\x0d\xaf\xe7\xad\x7a\x90\xf7\x78\x49\x0b\x79\x28\xd1\xb2\x4b\x11\x6c\x8a\x4c\xc9\x7b\xa4\x76\x05\xb7\xfb\x3b\xce\x3a\x61\xf5\x2c\x2c\xf5\x10\x72\xa1\x08\xa1\x6d\xa6\x8f\xcd\x07\x68\xe6\x79\x0e\x5e\x36\x31\x25\xdf\x23\x35\xab\x4f\x0b\x68\xee\x51\xff\x77\x75\x57\xff\x02\x00\x00\xff\xff\xd6\xb1\x96\xcc\x3e\x02\x00\x00") + +func uiTsPagesMonitorTsBytes() ([]byte, error) { + return bindataRead( + _uiTsPagesMonitorTs, + "ui/ts/pages/monitor.ts", + ) +} + +func uiTsPagesMonitorTs() (*asset, error) { + bytes, err := uiTsPagesMonitorTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/pages/monitor.ts", size: 574, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsPagesNodesTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xc4\x55\x5d\x6f\xa3\x38\x14\x7d\xcf\xaf\xb8\xe2\xa1\x82\x36\x6b\xf6\xe3\x8d\x6c\xaa\xed\x76\x57\xab\x4a\xdb\xce\x8c\x2a\xcd\x4b\x15\x45\x06\x9c\xe0\xd6\xd8\x19\xdb\x90\x89\xaa\xfc\xf7\xb9\xc6\x40\x20\x49\x67\xfa\x36\x48\x0d\xd8\xd7\xe7\xdc\xaf\x73\xdd\x38\x06\xa3\x2a\x9d\xb1\x04\x36\x74\xcd\x4c\x2c\x55\xce\x0c\xb1\x66\x12\xa3\xe9\x4f\xcd\x56\x4c\x33\x99\x31\xb4\xda\x62\x1e\x10\x12\xdb\xdd\x86\xcb\xb5\x89\x4b\x6e\x0b\xcd\xc5\x73\xff\x45\x72\x84\x05\x10\x5f\xbf\x09\x2d\x91\x5b\x78\x17\x4b\x63\xa9\xad\x4c\x87\x40\x08\xdc\x54\xb6\x50\x3a\x81\xbf\x35\x2d\xe1\x3f\x5d\x49\xc6\x35\x84\x29\xae\xc8\xda\xaf\xfe\x5a\x97\x14\xfd\x64\xaa\x8c\x10\x71\x79\x39\x81\x4b\xb8\xc9\x4b\x2e\x3f\x73\xb6\x35\xc0\x0d\xd8\x02\xdd\x69\x5e\x52\xbd\x03\xf4\x56\x09\x06\x2b\xa5\xe1\x56\x65\x2f\x5a\xd1\xac\x60\x06\xa8\x03\x70\x63\x35\xb5\xbc\x66\xb0\x65\xa9\xa3\xe1\xd2\x32\xbd\xa2\x19\x23\xb8\x8a\x27\x2d\x76\x40\xfe\x3a\x01\x68\x5c\x02\x9e\x7e\x70\x45\xea\xfc\xd5\x68\x6f\xbc\xb0\xaf\x1b\xa1\x34\x16\xa7\xd9\xf6\x09\x82\x5a\x01\x15\x02\x7c\x59\x1b\x74\x8c\xbf\x78\x54\x69\xdb\x85\xe8\xe9\x9c\x87\xde\x52\x53\xdd\x60\x1e\x1b\x16\x66\x12\xb8\x6f\x8a\x47\x1e\xfa\x4d\xe2\x61\x73\x90\xe8\xff\x0d\x6b\x18\xcd\x86\xac\x99\xa0\xc6\x60\x35\xa4\xd5\x4a\x08\xa6\x81\x97\x1b\xc1\x4a\x26\xad\x81\x65\xd7\xc6\x7b\xff\x1e\x9c\xf2\x91\x81\xab\x6c\x4d\xad\x4f\x8d\x67\xb0\xfc\x52\x31\xbd\xfb\xb7\xc6\x9f\xfb\x47\x8c\xe3\xb7\x5f\xf1\x99\x1d\x9d\x5d\x36\x95\xad\xa9\x48\x40\x56\x65\xca\xf4\x6c\xd2\x9d\xa8\x52\x81\x2c\x99\x92\xd8\x8c\x2a\xb3\x4a\x87\x51\xef\x0a\x46\xd9\x93\x4f\xce\x53\x97\x8c\x7b\x6c\xc1\x0d\xe9\xb9\xd1\xb9\x61\xf6\xae\x5d\x85\xc8\x33\xbf\x3e\x4b\x30\x1d\x24\x4f\x46\xf1\xf7\xdc\xfb\xa3\xf8\x94\xac\xa4\x50\x34\x1f\x05\x97\x09\x46\x75\xef\x6f\x1c\xcc\x80\x69\xc0\xd7\x6a\xa7\x57\xcf\x47\x9c\x36\x30\x85\xda\x02\x05\x81\x72\xec\x84\xe2\xa4\x43\x6b\x94\x39\x4d\x51\x19\x07\xd9\xb4\xc2\x39\x2b\x9d\x86\xab\x0b\xae\xb5\xaf\x2a\x99\x59\xae\xa4\xab\x6f\x9b\xf0\x28\x03\xcd\x6c\xa5\x65\xa3\x9d\xdb\xc1\x89\x71\xec\xa7\x6c\x4e\xec\xe7\x78\xca\x30\xc8\x79\x1d\x4c\xe1\xa9\xb7\x80\xdb\x2c\x7e\xc7\xbd\xc0\x2b\xf5\x7f\x4c\x33\x88\xa6\xe3\x03\x95\x38\x02\x01\x7c\x48\x9f\x59\x66\xc9\x0b\xdb\x99\x70\xd4\x44\x24\xc9\xc2\x28\x22\x06\x43\x0a\x23\x52\xd2\x4d\xd8\x05\xd6\x1c\xbc\xcb\x87\x91\xf9\xc7\x0d\x92\xc3\xb9\x39\x39\xe5\x7a\xf2\xb0\xc5\xec\x08\x75\xc8\x4a\x70\x8c\xef\x15\x30\x98\xa4\xe1\x21\xcd\xed\xc5\x73\xd8\x4f\x8f\x30\x70\xbe\x08\xbd\x91\xa0\xca\x8d\x0d\x83\x0b\x99\x9a\xcd\xec\x22\xad\x84\x98\xf9\xef\x71\x51\x06\x6c\xf4\xa9\xc0\x6b\x74\xee\x2f\xe5\x38\x80\xab\x71\x08\x57\x10\x2c\x9a\xe8\xb0\xc7\x2b\xbe\x4e\xd0\x87\x56\x15\x0e\xdd\xbe\xad\x79\x72\x0c\x39\xeb\x28\x80\x2d\x8e\x3c\x5e\x76\xb9\x66\xc6\x1c\x30\xd4\x6f\x10\xc9\xec\x56\xe9\x17\xe7\xee\x97\x13\x63\xfb\x3e\xa1\x5d\x44\xd1\xb8\xa8\xfb\x91\xef\xc5\x60\xb5\x78\xd7\xc4\x1c\x06\xc6\x8d\x48\xce\x2c\xce\x88\xbf\x5e\xc1\xe0\x9d\xdb\x0e\xcb\x8f\x66\xe5\x67\x8e\x4a\x77\xa7\xdf\xe5\x28\xc6\xb6\x55\x64\x43\xf1\x1f\x5c\x18\xb4\xfd\x09\x06\x45\x7b\xf7\x64\x81\x17\xf5\xc9\x68\x9d\xd3\xa2\x03\xfe\xd1\x01\x13\x70\xed\x6c\x27\x67\xac\x8c\xd1\xac\xfc\xe3\x8b\xdd\xcd\xd8\xa8\x8d\xdf\xe9\xa2\xfb\xdb\x4f\xbe\x05\x00\x00\xff\xff\xec\xae\xf6\xff\x62\x08\x00\x00") + +func uiTsPagesNodesTsBytes() ([]byte, error) { + return bindataRead( + _uiTsPagesNodesTs, + "ui/ts/pages/nodes.ts", + ) +} + +func uiTsPagesNodesTs() (*asset, error) { + bytes, err := uiTsPagesNodesTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/pages/nodes.ts", size: 2146, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsPagesRest_explorerTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\x5a\x5f\x6f\xdb\x38\x12\x7f\xcf\xa7\x98\xd5\xc3\x46\xea\x26\xf2\x02\xf7\x72\x70\xea\xec\xf5\xd2\x74\x7b\xb7\xed\x35\x48\xbd\xc5\x02\x41\xb0\xa0\x25\xda\x52\x23\x8b\x3a\x92\xb2\xeb\x2b\xf2\xdd\x6f\x86\xa4\x24\x4a\x76\xfe\x15\x49\x6f\xb1\xd7\x87\x36\x92\x38\xff\x38\xfc\xcd\x6f\x48\x26\xa3\x11\x28\x51\xcb\x84\x8f\xa1\x62\x0b\xae\x46\x92\x2b\xfd\x3b\xff\x54\x15\x42\x72\x19\x6b\xb5\x37\x42\x91\xe7\x92\xcf\xb9\xe4\x65\xc2\x51\x4a\x67\x93\x20\x8e\x47\x7a\x53\xe5\xe5\x42\x8d\x96\xb9\xce\x64\x5e\x7c\x6c\x9f\xe2\x14\xd5\x02\x18\x1d\xef\xa1\x2e\xbc\xa8\x75\x26\xe4\x18\xde\x32\xad\x61\x2a\x59\xb2\x81\x70\x89\xcf\x7f\x4b\x44\x72\x25\x05\x4b\xb2\x82\xcd\x54\x9c\x88\x65\x84\xf2\xcf\x9e\xed\xc1\x33\x78\x91\x2e\xf3\xf2\x43\xce\xd7\x0a\x72\x05\x3a\x43\xaf\x32\x5f\x32\xb9\x81\xa5\x48\xeb\x82\xc3\x5c\x48\x38\x69\xf4\xb9\x02\x46\x0a\xb9\xd2\x92\xe9\x7c\xc5\x61\xcd\x67\x64\x26\x2f\x35\x97\x73\x96\xf0\x18\xdf\x46\x7b\x4e\xd7\x33\xfe\x79\x0f\xc0\xb8\x04\x94\x3e\xc7\x89\x9f\xba\x79\x93\x5b\x06\x2b\x8e\x1e\x55\xbe\xac\x50\xab\xb5\x65\x7c\xdb\xfc\xe0\xf4\x81\xd2\x05\x2b\x56\xd4\x5c\xc5\x30\xcd\x72\x8a\xd8\xda\x63\xa8\x5a\x2e\x0a\xae\x45\x09\x67\xac\xe4\x45\x6c\xbe\x8f\xf0\x7f\x54\x17\x52\x37\x93\xe9\x39\xa6\x90\xda\xa0\xc8\xcc\x5b\x91\xf2\x02\x12\x51\x6a\x96\x97\x36\x19\x4a\xe3\x34\x13\x52\xc7\x11\x0a\x87\x3e\xf6\xac\x54\xad\x3f\xe7\x11\x1a\x67\xd6\x9c\xf5\xe2\xf9\x21\x4f\x67\x52\x54\x5c\xea\x1c\xf3\xd9\x18\x35\x2e\xe2\x56\x64\xe4\x9e\x5c\xfc\x2b\x26\xdd\x1c\x7f\xe1\x1b\x98\xc0\x32\xae\xd0\x44\x18\x04\xd1\xd1\x4d\x82\x1f\x28\x53\xf7\x13\x3d\x11\x35\xe5\xbc\x13\xfe\x71\x97\xac\x64\xe5\x82\xbf\xd7\x0c\x5f\xef\xb0\x6a\x24\x4f\xcb\xf4\x4e\x39\xae\x2a\x51\x2a\xfe\x46\x2c\x3a\xd1\x8b\x4b\x14\xdd\x95\xb4\x42\x2c\xce\x9d\x82\x05\x0d\x86\x8c\x8f\xf3\xba\x4c\x74\x8e\x2b\xbf\xce\xf2\x24\x83\x94\x27\x98\x49\xbb\x7a\x8d\x7d\xd0\x02\x58\xd9\x59\xfa\xed\xed\x9b\xd7\x5a\x57\xe7\xfc\xdf\x35\x61\x8a\x61\xa4\x0b\x5e\x72\x84\x34\x01\x9c\x1c\xc1\x92\x2b\x85\x45\x9a\x6e\xaf\x48\xeb\xcf\x8b\x27\xfc\x94\x61\xdd\xf5\xcd\x1e\x80\xa8\xb4\x1a\xc3\xef\x4d\xad\xbe\xb5\x3f\x7f\x7b\x7d\xfe\xae\x22\x03\x2a\x1a\x63\x19\x11\xb2\x1b\x8c\x80\xc9\x4a\xca\x34\x73\x23\x47\xed\x40\x3e\x07\x72\x12\x37\x53\x9a\x6e\x2a\x5c\xdc\xc9\x04\x82\x8f\x4a\x94\x41\xe4\xd9\x00\x63\x01\x13\xfa\xcf\xf7\xef\xfe\x15\x5b\x43\xf9\x7c\xd3\x53\x8f\x3a\xcb\xd7\xc0\x0b\x4c\xd1\x0e\xfd\x9e\x3f\xfe\x49\x7b\x3a\x7b\x03\x51\xfa\x11\x17\xbc\x5c\xe8\x0c\x8e\xe1\x47\xf8\xc9\x0e\x8c\x21\x08\x4b\xd1\xad\xc3\x4c\xa4\x9b\x28\x38\x1a\x6a\x5f\xec\x5f\xec\xdb\x74\xc5\x4b\x8e\x1c\x96\x1e\xc0\xfe\x25\xe0\x27\x8a\x80\x4a\xb0\x56\xf8\x05\x1a\x99\x5a\x16\xf8\x3a\xa6\x77\x32\x70\x19\x7f\x14\x79\x19\xee\xef\x7b\x93\xf2\x90\x15\x46\x71\x55\xab\x2c\x24\xd1\xc8\x13\xd0\xb5\x2c\x87\x29\xf2\x65\xae\x77\x82\x50\x25\xac\x84\x34\x57\xc8\xcd\x96\x0e\xed\x17\xe9\xa0\x84\x40\x33\xb4\xc1\x25\x32\x1a\xcc\x98\xe2\x29\x20\x54\xe8\x5b\x52\x4b\xa4\x75\xdd\x99\xb2\x54\x06\x62\xee\x57\x16\x61\xb1\x29\x1f\x62\x39\xde\x9a\x5e\xe7\x45\x01\x35\x81\x99\x1c\xd4\x55\x55\xe4\x3c\xed\xac\x65\x88\x3c\xb0\xd9\x6b\xf4\x5c\xd2\x8d\xe2\x8c\x13\x5e\x11\xd0\x4d\x88\xed\x30\x7e\xbe\x91\x76\x5a\xac\xd3\x24\x43\x6b\x7d\x0c\x36\x5f\xd1\x78\x88\x6c\x64\xb5\x65\xae\xf8\x73\x56\x6e\x8e\x07\x98\xe6\x65\x5a\xe1\x22\x11\x73\x04\xa3\xab\x95\x69\x7d\x23\x33\xcf\x9f\x14\xcd\x7b\x12\xc0\x0f\x28\x44\xa5\xfb\xeb\xf9\x3f\x4e\xc4\x12\x63\xc3\x64\x85\x5d\x66\xc2\x28\xea\x57\xc3\x77\xdf\x35\x79\xc2\xa1\x1e\x7c\x5b\x67\x3f\x4c\x60\xff\x7b\x7c\x9b\xec\xdf\x62\xdd\x1a\xd8\x85\x6d\x87\x91\x65\xec\x96\x20\xf4\x9d\x34\xc9\x70\x80\xf5\x46\x10\x9e\xe3\x36\x06\x7f\x00\x4b\x08\x9b\xb2\x1e\xfb\xcc\xd1\x8d\x5f\xb7\x31\xec\x46\x1e\x06\x8c\x3d\xb2\x07\xbd\x16\x75\x4c\x2e\xb8\x26\x26\x69\x3a\xa1\x93\xee\xc1\xf1\xc0\xe2\xb1\xb3\xd8\x07\xa6\x87\xc7\xae\xd3\x10\x1c\xbd\x76\xb2\x8d\xc8\xce\xda\x10\x9a\x0f\x45\x64\x67\xe9\x61\xd0\x34\x33\x7d\x74\x6c\x1a\xab\x23\x42\x65\x9b\x8c\xd0\x03\x89\xed\x5e\x26\x0d\x5b\xae\x3a\x82\x47\x8b\x4f\x0a\x19\xa0\x95\xcd\x59\x91\xff\x07\xf7\x94\x4d\x42\x2c\x89\xc1\xe7\x06\xbe\x86\x63\xaf\x3d\x9c\xf5\xcb\xc8\x06\x63\x5b\xc9\xd9\xbb\xf7\xd3\x41\x2b\x71\x93\xc4\x4d\x63\x39\xcf\xa9\x4b\xb7\x6e\x90\x9b\x2d\x1f\xf7\x15\xc0\x92\x36\xd7\xae\x0d\xbe\xe6\x2c\xe5\x32\x0c\x4e\x70\x5b\x85\x49\x3d\xa4\xc6\x15\x1c\x40\xa0\x71\x6a\xa3\xaa\xc0\x9d\xd6\x11\x24\x19\xc3\x4e\xae\x27\xbf\x4e\x5f\x1d\xfe\x15\x03\x38\xea\xd9\x73\xf3\x40\xb3\xfe\xf7\xeb\x1d\x41\xba\x76\xe2\x01\x36\xec\x15\xf6\xcd\x95\xed\x7e\xde\x51\x82\x89\xdb\x27\xfd\xcf\x8a\xd0\x6d\xd4\xfe\x88\x65\xe8\x72\xf3\xe8\x85\xe8\xec\x7e\x2b\xc5\xa7\x2b\x45\x46\x48\x49\x18\x99\x1a\x7d\x3a\x5c\xaf\xd7\x87\x78\x28\x59\x1e\x62\x26\x6c\xcf\x4c\x9f\xa8\x42\x1d\x9a\x1f\xb9\x46\x0b\xce\x24\x1d\x28\xcc\x83\xfa\x82\xbd\x4e\x63\x21\xf4\xb3\xe9\x6f\x28\xcd\x09\xa5\x5d\xc1\x3d\x2f\x16\xef\x30\x39\xab\x35\x1d\x47\xcd\x41\x25\xe3\x05\x1e\xf7\x3a\x0f\x3a\x63\xba\x77\xe2\x48\x30\xff\x57\x6c\x86\x94\xe1\xd4\xdc\xa9\xb0\x31\x36\x38\x71\x2e\x78\xff\xc0\xd9\x1a\xb6\xda\x21\x71\xab\x3b\x41\x20\x2e\x4a\x63\x7d\x1c\x46\x93\x63\x2c\xba\x03\x62\x2f\x72\x95\x9a\x2f\x33\x21\x70\xba\x65\x37\xd5\x26\xed\x61\x90\x97\x55\xad\x2f\x34\x82\x64\x62\xed\x5e\x22\x58\xfc\x8a\x45\xa6\x1a\x03\xf9\xea\x10\xdd\xda\x6e\x9f\xc2\xa8\x1b\x6d\x42\x69\x1e\x9a\x91\x66\xeb\xb3\x9d\x45\x3b\x89\x57\x39\x2f\xd2\xfb\xa5\x12\x33\x4e\x61\xc3\xdc\xa8\x7c\x61\x1a\x8d\xf2\xf3\xe9\x71\x3f\x91\x76\xc2\x94\xb4\xe9\x17\x25\x91\x8c\xf5\x53\x88\xed\x2f\xe1\x99\x28\xb0\x2a\x1f\x96\x48\x97\xfb\x95\x6d\x71\xbd\x04\x67\xb4\xa7\x45\x62\x8b\xd7\x48\x81\x2f\xb4\xc6\x7a\x37\x62\x81\x9b\x40\x74\x43\xd2\xdd\xa5\xc5\x29\xb5\xac\x76\x87\xdc\xc6\x9a\x14\x4c\x29\x20\xe2\x90\xa2\x28\xda\xcb\x13\xb3\x5a\x23\xef\x3a\x23\xde\x2a\x98\x33\xe4\x52\x6a\x8a\xed\xf9\x7e\xce\x8a\xde\xf9\xf3\xca\x5c\x68\x98\xcb\x92\xb8\x25\x78\x9f\xde\x8b\xc1\xb0\x69\xec\x47\x7b\x7e\x00\xaf\xdc\xca\xf5\xfc\x5b\xd6\x70\x4c\xef\xda\x51\x8f\x1f\x75\x96\xab\x78\x10\x67\xa8\x65\xed\x47\x07\xce\xb5\xbf\xcb\x8c\x62\xc4\x14\x56\x19\xa9\x27\x82\xee\xac\x34\x3f\x80\xde\xeb\x6e\x4a\xc3\x48\xff\x8e\x9c\x97\xb6\x48\x53\xee\xd2\x82\x49\x4e\x8d\x1b\x31\x8e\xf4\xc3\x8a\x62\xc6\x92\x2b\x6f\x2e\x95\xcc\x57\x08\x6f\x68\xac\x63\x42\x90\x9c\x26\xc7\xbb\x67\x30\x4c\x30\xee\x4a\x86\x0a\x36\x35\xc1\xcf\xa7\xd3\xc0\x13\xac\x84\xba\x49\xd2\xb6\xa3\x4e\x34\xc3\x56\x72\x83\xe8\xeb\xd3\x17\x2f\x7d\x51\xcc\xde\x8e\x90\x9d\xf0\xcb\xd3\x37\xa7\xd3\xd3\x60\x9b\xd3\xb7\xb7\x17\x0d\xf4\xc2\x68\xbc\x13\x87\xae\xe6\x4a\xbe\xf6\x70\x1a\xde\x6d\x79\x95\xf3\x75\x98\x68\x6c\xfb\x9d\x5a\xb4\x6d\x17\x6b\x59\x71\xa3\x41\x09\x6f\x69\xc4\xe9\xa8\x43\x17\x20\x96\xd9\x45\xaf\x37\xa2\x5e\xf6\x17\xea\xb2\xbf\x8c\x3e\xc0\x19\xcb\x65\x10\x1d\x0c\x05\xa8\xdd\x6e\x29\x82\xa5\xa1\x30\xc0\x72\xc0\x41\x8a\x30\xc6\x5a\x71\x4f\x83\x45\x1f\xd8\x44\xab\x31\x02\x99\x32\xfc\xbd\x64\x52\x1e\x0d\x9d\xb6\xc6\x3f\x38\x6e\x30\x46\xb1\xd6\xee\x69\xde\x35\x9a\xe0\x67\xae\x1b\x65\x84\xd9\x03\x95\x69\x3f\xd2\x68\x13\xa0\x1e\xa8\x7e\x56\xb7\xbe\x09\xb9\x0f\xd4\x7e\x69\x60\xd9\x18\xb0\x20\xbd\x97\x89\xcb\xee\x12\xc9\xdb\x07\xec\xa0\xd2\x73\x62\xe2\xaf\x4a\xa5\xbd\x1b\x5a\xcb\x5b\xdd\xa7\x81\x98\xbd\x9e\xf5\x84\xf0\xc3\xd7\x26\x55\xef\x56\xe9\xcf\xca\xa9\xdf\xd8\xcf\xb2\x9f\x29\x86\x07\x53\x9f\x01\x6e\x53\xa3\x1d\x94\x1f\x99\x03\x11\xf9\x3d\x1f\xf8\xfe\x35\x69\xf0\xe9\x99\xc8\x1d\xb4\xfe\xd8\xdb\x3a\x17\xe4\x9d\x1c\xd4\x14\xee\x23\x73\x51\xff\xfe\xe2\xcf\x4a\x47\xdf\xb6\x78\x4f\x49\x72\x0e\xc2\xdf\x76\x78\xff\x27\x3b\xbc\x37\x62\xb1\xcd\xa9\xdd\x9f\x2f\xec\xc4\x70\x21\x16\xdb\xbf\x13\x76\x4c\xbb\x79\x6e\x59\xec\xe2\xf2\xb8\x2b\x2e\x73\x1d\x35\x06\xba\x67\x58\x89\x3c\x7d\xbc\x32\xf2\x99\xd2\x44\xe5\x36\x83\xdd\x4d\x97\x9f\x16\x17\x86\x23\x4b\x77\x45\xe6\x5d\x65\x3e\x5e\x0d\xf6\x8a\x0f\x9d\xdc\x56\x6f\xa5\x12\xc5\xd6\xb6\xa2\x01\xc0\x09\x45\xd9\xac\xbf\x09\xf9\xc0\x31\x94\xe5\xcf\xbe\x96\x91\x2a\xcc\xef\x8b\x97\x0c\xfb\x59\x13\x78\x88\x6b\x32\xbc\x57\xf5\xc3\x45\x07\x24\xd1\x1b\xbf\xf6\x11\xb4\x0b\x40\xfd\x3f\x4b\x39\x63\x8b\xee\x17\xf0\xb7\xad\x27\x7c\xbe\xbe\x2d\xbd\xf7\xc8\xe7\xae\x64\xee\x64\xbb\x1d\x6c\xd5\xbf\x1b\x1a\x96\x5d\xff\xb8\x33\x1c\x1d\x6e\x41\x86\x15\xd7\x7f\xf7\x0b\xeb\xe0\x96\x62\xa4\x7f\xd7\x7b\xff\x0d\x00\x00\xff\xff\x29\xf7\x5b\xb6\x59\x25\x00\x00") + +func uiTsPagesRest_explorerTsBytes() ([]byte, error) { + return bindataRead( + _uiTsPagesRest_explorerTs, + "ui/ts/pages/rest_explorer.ts", + ) +} + +func uiTsPagesRest_explorerTs() (*asset, error) { + bytes, err := uiTsPagesRest_explorerTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/pages/rest_explorer.ts", size: 9561, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsPagesStoresTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xc4\x55\x4b\x6f\xdb\x38\x10\xbe\xfb\x57\x0c\x74\x08\xa4\xac\x97\xda\xc7\x4d\x5e\x07\x9b\xa6\x45\x11\xa0\xe9\x03\x06\x7a\x09\x0c\x83\x96\x68\x8b\x09\x45\xba\x24\x65\xd7\x08\xfc\xdf\x3b\xa4\x1e\x96\x1c\x39\xc9\xad\x02\x2c\x8b\xe4\x7c\xdf\x7c\x33\x9c\x21\xe3\x18\x8c\x2a\x75\xca\x12\xd8\xd0\x35\x33\xb1\xb1\x4a\x33\x43\xac\x19\xc5\xb8\xf6\x9f\x66\x2b\xa6\x99\x4c\x19\x2e\xdb\x7c\x1a\x10\x12\xdb\xfd\x86\xcb\xb5\x89\x0b\x6e\x73\xcd\xc5\x43\xfb\x45\x32\x84\x05\x10\x5f\x9d\x85\x16\x2a\x63\xa2\xf6\xb1\x30\x96\xda\xd2\x34\x10\xc4\xc0\x75\x69\x73\xa5\x13\x78\xa7\x69\x01\x1f\x75\x29\x19\xd7\x10\x2e\x71\x44\xd6\xd5\xe8\xff\x75\x41\xd1\x51\xaa\x8a\x08\x11\x97\x97\x23\xb8\x84\xeb\xac\xe0\xf2\x3b\x67\x3b\x03\xdc\x80\xcd\xd1\x9f\xe6\x05\xd5\x7b\x40\x77\xa5\x60\xb0\x52\x1a\x6e\x54\xfa\xa8\x15\x4d\x73\x66\x80\x3a\x00\x37\x56\x53\xcb\xb7\x0c\x76\x6c\xe9\x68\xb8\xb4\x4c\xaf\x68\xca\x08\x8e\xe2\x51\x8d\xed\x90\x3f\x8d\x00\xbc\x4b\x40\xeb\x99\x4f\x53\xe3\x70\x8b\x06\xde\x0d\xfb\xb9\x11\x4a\x63\x7a\xfc\x74\x15\x21\xa8\x15\x50\x21\x6a\x08\xf1\xf8\x18\xdf\x68\xab\xb4\x6d\x44\xd6\x84\xce\x49\xbb\xb4\xa5\x1a\x7c\xae\x66\x9e\x88\x99\x04\xee\x7c\x06\xc9\xec\x38\x4b\x6a\xe4\x14\x24\x8a\x38\xbb\x1e\x46\x93\x2e\x75\x2a\xa8\x31\x98\x15\x69\xb5\x12\x82\x69\xe0\xc5\x46\xb0\x82\x49\x6b\x60\xd1\xec\xe7\x5d\xf5\xdf\xb1\xaa\xe4\x81\xcb\xf0\x96\xda\x2a\x42\x9e\xc2\xe2\x47\xc9\xf4\xfe\xc3\x16\x5f\x77\x33\x54\xf2\xf7\x5f\xf8\x4c\x4e\x6c\x17\x3e\xc3\x5b\x2a\x12\x90\x65\xb1\x64\x7a\x32\x6a\x2c\xca\xa5\x40\x96\x54\x49\xdc\x94\x32\x45\xbd\x61\xd4\xba\x82\x7e\x0a\xc8\x37\xe7\xaa\x89\xc6\x3d\x36\xe7\x86\xb4\xe4\xe8\xdd\x30\x7b\x5b\x8f\x42\x24\x9a\x5e\x0d\x33\x8c\x3b\xe1\x93\x5e\x04\x2d\xf9\xe1\x44\xa1\x92\xa5\x14\x8a\x66\x3d\x79\xa9\x60\x54\xb7\x0e\xfb\x6a\x3a\x4c\x1d\xbe\xba\x8a\x8e\x75\xf4\x15\x5b\x0f\x4c\xae\x76\x40\x41\x60\x65\x36\x25\x43\x53\x5f\xa1\xe6\x58\x39\x75\xed\x0c\x57\x8f\xa7\x69\x84\xd5\x06\xab\x52\x22\x89\x92\x2e\xbb\x75\xb0\x3d\xf5\x9a\xd9\x52\x4b\x5f\x3b\x37\x1d\x8b\xbe\xee\xe7\x6c\xae\xe2\x87\x78\x8a\x30\xc8\xf8\x36\x18\xc3\x7d\xbb\x02\x6e\x32\xff\x07\xe7\x82\xba\x54\x3f\x61\x88\x41\x34\xee\x5b\x94\xe2\x04\x05\xf0\x65\xf9\xc0\x52\x4b\x1e\xd9\xde\x84\xfd\x2d\xcc\x98\x49\xc3\x28\x22\x06\x45\x85\x11\x29\xe8\x26\x6c\xa4\x55\x96\xb7\x59\x57\x5c\xf5\xb8\x76\x72\x40\x57\x22\x03\x6c\xf7\x35\x70\x3e\x39\xc1\x1d\x43\x13\x1c\x35\x3e\x01\x0a\x4a\x3c\x13\xa9\x4e\x32\x9e\xc1\x61\x7c\x02\x82\xe1\x54\xb4\x8b\x04\x2b\xdd\xd8\x30\xb8\x90\x4b\xb3\x99\x5c\x2c\x4b\x21\x26\xd5\x77\x3f\x33\x1d\x36\x7a\x9f\xe3\x99\x3a\xad\x8f\xe8\x38\x80\x3f\xa0\x96\x8c\x5f\xc1\xdc\x4b\xc3\x5d\x5e\xf1\x75\x82\xfc\x5a\x95\xd8\x74\x87\x26\xeb\x49\xc7\x7c\xd0\x41\x80\xd5\x0d\xc1\x2b\xae\x25\x1e\x2f\x95\x67\x1f\xbe\x1b\xfa\x97\x4b\xc1\x0b\x1a\x82\xcf\x68\x93\x0c\xc2\xce\x68\xd9\xe1\xd1\x83\x87\x6f\x86\x81\x9a\x13\x20\xad\x66\x89\x64\x76\xa7\xf4\xa3\xf3\xfb\xe7\xb0\x45\xfd\xff\xcc\xc1\x3c\x8a\xfa\x7b\x7c\xe8\xa9\x98\x77\x46\xf3\xb7\x75\xf0\xb1\x81\xdd\xb9\x9f\x31\x8b\xb7\x54\x75\xf0\x83\xc1\xdb\x00\x3b\xd4\x0b\x7b\xad\x83\x7f\x67\x03\xb7\x97\x0d\x96\xd3\xb4\xd9\x3b\xb2\xa1\x78\xfb\x86\x41\x53\xe7\x41\x27\x71\x6f\xef\x78\xa8\x3a\xed\x59\xcb\x0f\xb5\x87\x43\xfe\xdb\x22\x13\x38\x5f\xb6\xfd\x1e\x7e\x5f\xe5\xbc\xed\xfe\xde\x7e\xbe\xb0\x9d\xee\x77\x18\xfd\x0a\x00\x00\xff\xff\x2a\xcc\x4b\x96\x07\x09\x00\x00") + +func uiTsPagesStoresTsBytes() ([]byte, error) { + return bindataRead( + _uiTsPagesStoresTs, + "ui/ts/pages/stores.ts", + ) +} + +func uiTsPagesStoresTs() (*asset, error) { + bytes, err := uiTsPagesStoresTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/pages/stores.ts", size: 2311, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsTsconfigJson = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\x84\x92\x41\x4b\x3b\x31\x10\xc5\xef\xfd\x14\x65\xcf\x7f\x12\x0a\x7f\x2f\xde\x44\x7a\x10\x94\x7e\x00\x91\x12\xb7\xd3\x36\x25\xc9\x84\x99\x49\x51\xa4\xdf\xdd\x49\x5a\xb1\x75\xbb\xba\x97\x85\xfc\xde\x7b\x93\x79\xbb\x1f\x93\xa9\x3e\xdd\x1e\x88\x3d\xa6\xee\x76\xda\xcd\xcc\x7f\x33\xeb\xfe\x1d\xcf\x7b\x8c\xd9\x07\xa0\x45\x16\xc5\xac\xfc\x68\x68\x50\x1c\x6d\x40\xaa\x07\xf8\xe6\xe4\x68\x20\xe2\xaa\x04\xa8\x40\xfd\x11\xd3\x8e\xcf\xe9\x0a\xfa\xe0\xc8\xc9\x71\xde\xda\x05\x86\x33\x9a\xf0\x21\xe6\xe0\x7b\x2f\x77\xe9\xfd\x2a\x9f\x47\x2f\x8b\x34\x27\x42\x52\x2e\x54\xce\x31\x41\xc4\x3d\xdc\xeb\x58\x48\xc2\x43\x9e\xf0\xd1\xbf\x5e\x89\xc5\xd2\x16\x31\xb6\x78\xbb\x63\xeb\x72\x36\x97\xb7\x66\x2c\xd4\xc3\x93\xcb\x5f\xe6\x86\x0e\xa7\x9e\xd6\x5a\x52\x9d\xf6\xfc\x6d\x30\x76\x0b\x6e\x05\x64\xe4\x22\xc7\xb4\xec\x9f\x67\xda\x18\x04\xb6\x49\x5f\x4b\x16\x27\x85\xc7\x24\x95\xfe\x02\x91\xfe\x0a\x10\x1f\x81\x81\x3c\x0c\x15\xf5\x6b\x63\xaa\xc5\xd9\x08\x42\xbe\x1f\x4a\xb2\xdb\x00\xdb\x0d\xb9\xbc\x1d\x61\x75\x87\x31\x5f\xbb\xdf\x18\xd4\x1f\xc5\x2b\x1f\xa1\xea\x93\x25\xbc\xe5\xa0\x09\x4d\xd3\x24\x2f\x93\xc3\xe4\x33\x00\x00\xff\xff\x2f\x17\x33\x4e\xc3\x02\x00\x00") + +func uiTsTsconfigJsonBytes() ([]byte, error) { + return bindataRead( + _uiTsTsconfigJson, + "ui/ts/tsconfig.json", + ) +} + +func uiTsTsconfigJson() (*asset, error) { + bytes, err := uiTsTsconfigJsonBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/tsconfig.json", size: 707, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsTypingsD3D3DTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\xeb\x72\xdc\xb6\xb2\x28\xfc\x3f\x4f\xc1\x4a\x55\x6a\x8d\x52\xb2\x9c\x4b\x7d\x5f\x9d\x92\xb3\xa3\xe3\xf8\x96\xec\x6d\x27\xde\x1e\x39\x95\xac\xd4\xaa\x55\x18\x12\x33\xc3\x98\x43\x4e\x40\x52\xd2\x24\xdb\x0f\x74\x9e\xe3\xbc\xd8\x41\x37\x00\x12\x04\x01\x10\xe4\x8c\x2c\x59\x91\xaa\x6c\xcd\x08\x40\xdf\x70\xeb\x6e\x34\x1a\x0f\x1f\x46\xe7\xbb\x2d\x8d\x12\xba\x4c\xf3\xb4\x4a\x8b\xbc\x8c\x96\x05\x8b\x92\xaf\xff\x73\xfe\x09\x2f\x7c\xcd\x8a\xdf\x69\x5c\x9d\x46\xeb\xaa\xda\x9e\x3e\x7c\x98\x7c\xfd\x7b\x79\x52\xb0\xd5\x43\x28\x7c\xaa\x35\x5a\xec\x4e\xa3\xef\x0a\x96\x96\xd1\xaf\x24\x7f\x57\x5c\x44\xdf\x40\x8b\x92\x37\x59\xa5\xd5\xba\x5e\x9c\xc4\xc5\xe6\xe1\x02\x2a\xec\xb0\xfc\x5b\x03\x80\xc0\xe0\xae\xff\x50\xd6\xa5\xd9\x0e\x08\x4e\x3e\xf9\x24\xa1\x71\x46\x18\x8d\x36\x45\x52\x67\x34\x7a\xfa\x75\xf4\xd7\x27\x11\xff\xa1\x57\xdb\x82\x55\x51\x9a\x57\x94\x2d\x49\x4c\xa3\x39\xcd\x38\x0b\x05\x2b\x65\x05\xf8\x79\xf8\xf9\xe7\xcd\xe7\xcf\x65\x8d\x88\xe4\x11\xff\xb0\xa1\x79\x15\x2d\x59\xb1\x89\xaa\x35\x8d\xe2\x9a\x31\xf8\x43\x52\xc4\x35\x94\xb4\xad\x1e\x36\x1f\x4b\x6c\x7e\xaa\x81\x37\x51\x08\x34\x6f\x68\x55\x33\x2e\x2b\x80\x4b\x37\xdb\x6a\x27\x5b\x72\xfe\xbb\x35\x1f\x76\xbe\xce\x8e\x4e\xa3\x7f\xcf\x55\xcd\x6f\x48\xbe\xfb\xf6\xd1\x00\x26\x51\x5b\x60\x5a\xa6\xac\xac\x1a\xc6\xaa\x35\xa9\xa2\x0d\xa9\xe2\x35\x15\xc5\xe5\x96\xc6\xe9\x32\xa5\x89\x24\x86\x77\x7e\x59\xb1\x34\x5f\x75\x41\x1a\x08\xfe\xf7\x96\x30\xb2\x69\x9b\x34\xe4\x45\x73\x6c\x1c\x55\x85\xc0\xe2\x65\x4c\x35\x3f\x95\x28\xf7\x63\xb4\xe5\x24\x2f\x12\x1a\x42\xbe\x12\xca\x8f\xbc\x7e\x2b\xa1\x42\xb2\xe5\x25\x5d\xd6\x3e\x8d\x9e\x5d\xf0\x5f\xe7\x84\xad\x68\xe5\x23\xff\xfd\xa3\x4f\xfc\x83\x6f\x53\x67\x55\xba\xcd\x1a\x3a\xca\x29\x63\xf0\x71\x96\x0d\x0f\x43\x25\x33\x92\x65\x2d\xb2\x76\x5c\x38\x46\xc5\x47\x3c\x1c\x08\x63\x64\x17\x15\xcb\x86\xdb\x11\x63\xa3\x8c\x1e\xab\xd6\xb9\x36\x4a\xca\x71\xc3\xa4\xec\x8c\x93\xdf\xfe\x35\x30\x52\xf0\xd7\x27\xf6\xd5\xec\xe9\xd7\x08\x89\x17\x54\x34\x4f\x4a\x01\x57\xeb\xf3\xe4\xea\x34\xca\xeb\xcd\x82\xb2\x16\x64\xb2\xeb\xff\x2d\xce\x52\xde\xf0\x17\x57\xc1\xaf\xfd\x82\x8a\x91\xbc\xcc\x48\x45\x55\xd1\x6f\xff\x6a\x0b\xcb\x98\x64\xb4\xdf\xa6\x2c\x6a\x16\x53\xa4\xf1\x54\x91\xde\x96\x5a\x48\xb5\x50\xfa\x8e\xee\x9e\x70\xd1\xf7\x0b\x48\x56\xfd\x17\xdd\x9d\x9d\x46\x8b\xa2\xc8\x28\xc9\x35\x1e\x2a\x96\x39\x8a\x36\xb4\x22\x8e\xa2\x72\x9d\x2e\x5d\x10\x2b\xbe\xe9\xa8\x71\xe9\xef\xa0\xef\x48\x49\x9b\xde\x19\xde\x7b\x9e\x30\xca\x45\x1a\x91\x68\x41\xd7\xe4\x22\xd5\x26\x9a\x36\x96\x54\x19\xdf\x63\xe5\xa7\x13\xf5\xe1\x91\x03\xee\xe3\x38\xa6\x65\xd9\x59\x3f\xea\x92\xb2\x88\xe2\x78\x81\x3d\x1e\x49\x26\xdd\xed\x47\xc3\x49\x8d\x4e\x73\xd1\x5f\x6c\xb6\xb0\x0d\x57\x97\x45\x74\x41\xb2\x9a\x0a\x05\xa2\xe4\x42\xe1\xa2\x3a\xd1\x6a\xaa\xed\xef\xc1\x97\x51\xba\xe4\x0c\x73\x5d\x21\x13\x24\xf2\x8d\x77\x71\x1c\xf1\x56\x6d\xc9\x0a\xc5\xc2\xf4\xc2\x2f\x5a\x58\x1a\x54\x39\x5d\x49\xf4\x1c\xf7\x39\x24\xa1\x5f\xbc\xe0\x3d\x11\x17\x79\x62\x96\xb7\xec\x92\x32\xe6\x3d\xc6\x49\xfe\xe6\xfc\xdb\x19\x39\x8d\xce\x8f\xa3\x05\xff\xff\xa8\x3f\xec\x0e\xc8\xbf\x85\x4b\xb7\x70\xae\x97\xff\x84\x4e\x14\xc0\xf3\x94\x83\x85\x61\xb6\xe1\xfa\xd9\xa6\xde\x08\x14\x7c\x74\x81\x3e\x85\x4b\xaf\x97\x6e\xc6\xe4\x0a\x8b\x0b\x2a\x61\xda\x1e\xd1\x54\xda\x90\x2d\x8c\xe7\x92\x0b\x84\xcb\x61\x59\xe7\xce\x41\xcb\x69\xf8\x86\x13\xfe\x96\x73\xc0\xf8\x6c\x39\xff\xed\x5f\xc7\xd0\xfa\x34\x9a\x5d\x9c\x21\x4b\xe9\x99\xe2\xe7\x28\xfa\x8f\x6f\xa3\xb7\x9c\xbd\xb7\x37\xc0\x99\x41\x71\x4b\x2e\xa7\xe7\x7c\x98\x1e\x72\x75\xf3\x92\x26\x57\xd7\x21\xe9\x83\x73\x66\x50\x3c\x56\xd2\xb2\xe7\x09\xff\x7e\x1b\xa4\x8e\xfb\x4a\xe5\x12\x3c\x4c\xd7\x46\xd6\xfa\xee\x7c\x23\xdc\xf5\xa9\xee\x0a\xdf\x4d\x20\xac\xa9\x35\xdf\x14\x51\x8d\xe3\x34\x71\xe5\x4b\x51\x83\x8a\x18\x8e\xaa\xf2\x03\x8a\x9d\x13\xa1\x53\xdf\x13\xb8\x1c\xe7\x21\x7b\xc5\x35\xf2\xd5\xa1\x57\x10\xab\x14\xb5\x51\xa4\x11\xc6\x4d\x70\xae\x27\xa5\x31\xd7\x96\x38\x81\x37\x2e\x7e\xa0\xe2\xd0\xf2\xbf\x66\x26\xbb\xc4\xef\xd1\x19\x1b\x9a\xa4\x4e\xf2\xa2\x19\x54\xf9\xe2\xe4\xff\x7b\xf0\x47\x4d\xf2\x2a\xcd\xe8\xd1\xc9\x07\xed\x17\xa0\xed\xd0\x3d\xf3\xe1\x38\x36\x39\x99\xd8\x4d\x24\x52\xb4\xa0\xea\x47\x50\xf9\xd3\xed\x4e\x49\xfb\xfe\x5d\xb3\x8d\xce\x39\xf7\x0d\x36\x5e\x93\xa1\x52\x69\x63\x49\xd5\xe2\xbd\xd1\x61\xeb\x38\xda\x76\x36\x66\x3f\x8f\x2f\x8b\x98\xc8\x7e\x49\x73\x6e\x3f\xa0\x51\xbf\x2d\x52\x69\x43\x5c\xe1\x4e\xa1\xc8\xde\x10\xfe\x77\xfe\x4f\x09\xa0\x60\x09\x65\x7b\x33\x7d\x15\xfd\x8c\x7b\x52\x53\x45\x5a\x2f\x1d\x6a\xfa\xcd\xb2\xe2\x32\x7a\xd5\x51\xdc\x60\x44\x21\xb2\xb2\x5e\x94\xd4\xd2\x64\x9d\xae\x57\xd1\xab\xce\x46\xe8\x6c\xa3\x19\x67\x69\xc9\x6d\xbc\xee\x2c\xb8\x42\x15\x88\x93\xd0\x28\x41\xc7\x1c\xfa\x6a\xdd\xea\x44\x43\x83\xeb\xb6\x09\xfe\x7a\xe5\xbe\x5a\x4f\x95\xfb\x4b\xba\xbc\x97\xfd\x0d\xc9\xfe\x0d\x6f\x7b\x70\xe1\x7f\x87\xa0\xa3\xba\x04\xbf\x21\xec\x00\xe8\xc8\x28\x98\x7f\xf5\x94\x95\xa4\xdb\x63\x60\xdf\x12\xd4\x17\x6c\xa6\x9a\xf1\x35\x32\x21\x15\x37\x7a\x49\xbe\xe3\x96\x4b\x9e\xd0\xab\xce\x1a\xc9\xff\x7c\x84\x85\x2e\xa2\xdf\x70\x15\xba\xd8\xa4\x7f\x8a\x41\x83\x43\x40\xdf\xc0\xc2\x57\x7e\xa6\x00\x59\xd5\xba\x75\xbd\x5c\x66\x34\x5c\x91\x7e\x43\x05\x29\xfa\x46\xda\x78\x30\x39\xf3\xbc\x54\x7a\x67\xf5\x1a\xc8\x3f\x0d\xd7\x7d\x18\x35\xc6\xbc\xaa\x25\x01\xc9\x9a\x71\x81\xf3\x04\x11\x36\x42\xc2\xb3\x10\x45\x51\xb9\x2e\xea\x2c\x89\x16\x54\x6e\x6b\x7c\x36\xa5\xd6\x0e\xdc\x52\xb6\xe1\x3b\xaf\x90\x02\xef\x16\x18\x79\x12\x99\xfc\x7e\x24\x7f\xbb\x24\x73\x0e\xce\xcc\x6d\x51\xc2\xee\x7d\xc1\x75\x41\xb2\xe0\xfb\xa9\xe8\xf1\x66\xfc\x0f\x6e\xd8\x92\x33\x74\x06\x57\x0a\xa0\x8d\xde\x3f\xd3\xed\xec\xe4\xe4\x04\x9a\x04\xd2\xf7\x9a\xb0\x52\x0c\xa6\x55\x7a\x41\xf3\xe8\xab\xa7\x11\x59\x2e\xd3\x9c\x0a\x44\x7c\x35\xd8\x48\x6f\xe4\x71\x44\x4a\x71\x7e\xc7\xc5\xb5\xd8\x45\xf3\x9f\x5f\xfc\xa3\xd4\x6a\x91\x8a\x57\x5b\x70\x69\x79\xb9\x69\x0f\x00\x3d\xa8\x6c\xac\x35\x75\x66\x2d\x08\xcd\x81\xef\x99\x33\x5a\x17\x68\x83\x2f\x40\xf2\x1b\xc2\xa1\x5f\x45\xe7\x97\x45\x94\xa4\x7c\xe4\x94\x1c\x25\xc9\xda\x15\xd9\xdb\x15\x4d\xe1\x4c\x80\x09\xec\x0f\xe1\xa6\x2d\x5b\x52\xf5\xd1\x5c\x6f\x33\x5e\x04\xc4\x27\xbf\x93\x18\xfc\xab\x5b\x92\x06\x18\x0f\x16\x58\xbc\x31\x4b\x29\x8e\x28\x80\xa1\x37\x64\xd2\x7f\x88\x74\xfe\xf6\xaf\xb6\x39\x47\xfc\xd5\x83\xe6\xf8\x4a\x10\x03\xdb\x05\x25\x7c\xdf\xe8\x42\xd1\xa6\x10\x50\xa8\x4d\x20\x25\x00\xb7\x08\x5e\xa6\x65\x85\x23\xf2\x1d\xdd\x95\x6a\x75\xe3\xab\x67\x9c\x92\x8a\x8f\xd1\x80\x95\x0e\x2d\x0b\x45\x72\xb1\xf8\x5d\x9c\xd5\x14\xd1\x8a\x36\x80\x1b\x1f\x2a\x2b\x36\x36\xb2\x01\xf7\x0c\x6d\x0c\xb1\x26\x8b\x81\x16\x40\xb4\x84\x7b\x1d\x64\x0f\x90\x2c\x8a\x75\xa2\xbd\x23\x4d\x17\xf3\x03\xb1\x21\xab\x41\x71\x4d\x32\x97\x58\x70\x44\x38\xb9\x90\x34\x04\xb3\xb1\xa1\x6c\x45\xdb\x53\x4d\x31\xad\xe1\xcc\xa1\x88\x8a\x9c\x0e\xbb\x96\x1a\xba\x91\x5a\x84\x66\x37\xdc\x78\x01\xac\xad\x8a\xae\xe1\xa9\xfc\x82\xe6\x94\x89\x33\x17\xbe\x16\xac\xa8\xb4\xd0\x28\x4b\x63\xd9\x57\x27\x36\x4c\x58\x77\xf8\x74\x75\x18\xba\x38\xd8\xfd\xe2\xa4\xdb\xd0\x00\xa3\x4e\x54\xab\x62\xdb\x6a\x82\x2b\x05\x1b\x3a\x4e\x40\xaf\x0a\x57\x43\xba\x8d\xe6\xf0\xdf\x82\x56\x97\x94\xef\x20\xb8\x1a\x74\xdd\xff\x06\x87\xf0\x33\x03\x8c\xad\xea\x06\x60\xfa\xaa\x9b\x2e\xdb\xa9\x52\x08\x64\x9f\xb0\x4a\xd3\x84\xe1\xeb\xed\x11\x14\x27\x46\x97\x54\xb1\x3d\x1b\x23\xb8\xf7\xfe\xad\x26\xca\xe9\x25\xff\xc7\xd7\x82\x62\x0b\xbc\xd8\x0f\x06\xa1\x02\xc4\x87\xfc\xc8\x7f\xbb\x95\xc0\x3f\x6a\x80\xc3\xbb\x82\x8a\xf3\x58\xa9\x5c\xff\xf2\xea\xe5\xf7\x55\xb5\x95\xe5\xd6\x41\x7f\xb5\x66\xc3\x43\x5e\xdf\x1b\xcb\x5d\x1e\xaf\x59\x91\x17\x75\xc9\xd1\x09\xc4\x78\x1e\xd6\x9c\xc6\xd7\x2c\x0b\xe9\x7a\x5e\x2d\x7a\xcb\xff\xa1\x7e\x89\x70\xec\xf5\x62\x92\x65\x0b\x12\xbf\x8b\x9e\x4b\x85\x1f\x5a\xa4\xf9\x45\xf1\x8e\x46\x97\x6b\xde\x9d\x0d\xd3\x70\xa4\x56\x90\x04\x4d\x34\x31\x30\x14\x7d\x24\xcd\x4a\x6f\x5f\x73\x62\x4e\x1b\x75\x4b\x61\xe4\xdd\x3b\x43\xf9\x74\xe5\x88\x06\xc3\x45\x91\x26\xbc\x5b\x7e\x59\xb3\xa1\x99\x72\xa3\xc2\xdb\x70\xf5\x29\x7a\xf5\xc3\xab\x67\x78\xbe\x7d\x0b\x65\x0d\x04\xee\x2f\x79\xe7\x54\x6b\xa7\x46\x45\xaf\x38\x71\x69\x66\xd7\x19\x79\x61\x48\x78\x97\x1b\xd8\x01\xfa\xea\x66\x07\x3a\x07\xbe\x2d\xf2\xb2\xe9\x8c\x91\xa3\xfc\x9a\x65\xf3\x11\x8f\xe3\x60\xc1\x06\x0c\xe2\xff\x9c\xff\xf4\x63\xb4\xc8\x8a\x85\x4f\xb1\xf2\xc8\xf4\xfa\x04\xa4\x09\xe7\xf7\x12\x0c\x44\xf7\x48\xa3\x8c\x15\x4c\x7a\x62\x1a\xa7\x4c\x2b\x15\xf8\xd0\x91\x8b\x43\x18\x79\xf4\xfd\xf9\xab\x97\x4d\xcc\x1c\x57\xba\xc8\x0a\x3e\xd8\xb7\xb9\x4d\x40\xdc\xdc\x08\xd0\x5d\xd1\x87\x8a\xff\x7a\xbb\xc0\x60\x19\x7e\x42\xa6\xfb\x53\xc9\xe5\xd4\x09\xff\x41\x84\x75\x27\xe6\xff\xa0\xa4\x87\x57\x80\x1c\x76\x44\xef\x98\xbf\x7d\xeb\xc1\xba\x82\xc9\x37\x66\x28\x3e\x97\x6c\x8d\x5f\x14\xa2\xb8\xd8\x6c\xc8\x83\x92\x02\x5b\xe0\xac\x97\x16\xd9\xec\xc9\xfc\xe7\x23\xdc\x95\xac\xcb\x43\x5c\x5e\x70\xec\xe5\x85\x33\x08\x4e\xeb\x00\xc2\x16\x69\xc5\x08\xdb\x45\xf1\x9a\xb0\x3e\x2a\x40\xc2\x4d\x6d\x56\x82\x95\x90\xa5\x5c\x80\x25\xdd\xa4\x71\x91\x71\xa1\x72\x91\x5d\x42\x1c\x2e\xbd\xa0\x56\x6d\x3f\x09\xa6\x23\xaa\xc8\xc2\xc2\xe6\xb9\x62\xd3\xaa\xe5\x34\xd0\xed\xc0\xcf\x61\x92\xa9\x01\x60\xed\xca\x0a\x47\x39\xd4\x3b\x81\xff\x5c\x80\xe6\x10\x2b\x6a\x05\x20\xa3\x48\xb1\xc2\x09\xfe\x0f\xd1\x94\x3a\x1c\x0d\xcc\x0f\x10\xbf\xb8\x2d\x32\xb4\xf3\x9a\xe8\x3b\x1b\xd8\xb4\xad\x79\x2a\xdc\x8e\xe8\xa6\x3c\x01\xe0\x1a\x94\x40\x3c\xbd\xd0\x00\x2b\xa2\x1f\xb1\xd6\x01\xd0\x01\xcc\xd5\x30\xbe\x37\x45\x9d\x27\x07\x40\x27\xa6\xe0\x10\x36\x11\xd6\x7d\x00\x74\x6f\x5e\x7c\x17\xc1\xe0\x1f\xe6\x6f\xb5\x38\x00\xba\xef\xe7\x2f\xc3\xd0\x7d\x5f\x66\x87\x40\xf7\x24\x14\x5d\x7c\x08\x74\x2f\x3f\x27\x9f\x2f\x3e\x0f\xc3\xf8\x92\x1c\x42\x9e\xd2\xad\x57\x2c\xc3\x66\x1f\x3a\xf4\x0e\x82\x96\x2f\xb2\xb0\xc6\x4a\x87\xe6\x00\xda\x9f\x16\xe2\x12\xd3\xde\x78\xbf\x7a\xaa\x0e\x1f\x9a\x63\x8f\x21\xdc\xe7\xaa\xe2\x04\xf4\xe7\x6b\xda\xba\xf8\x17\x75\x9a\x55\x0f\xd2\x5c\x03\x0e\xc7\x9c\x04\x0e\x32\xd3\x21\xc9\x17\x70\xf0\xa4\xe1\xd7\x70\x3f\x47\x08\x3e\x87\x34\xd9\x15\xb5\x5d\xc6\x19\x16\x9d\xca\x2a\x27\xe2\x97\x73\xd9\xbf\x58\xfd\xc3\xbe\xea\x5f\xf0\x95\x84\x97\x9e\xf0\x7f\xfe\x03\x56\x75\x42\x27\xfd\x7b\x8e\x51\x2e\xce\x50\x4f\x65\x9b\x01\x37\x1b\x69\x4e\x8a\x41\xa7\x81\x8e\x22\xb0\x7f\x4a\x44\xa4\x84\x70\x1e\xe3\xf0\xab\xaf\x1f\x29\x07\x0d\xc3\x2e\x93\x40\xda\x3f\x72\xc0\xb5\xfd\x34\x4a\x54\x9d\x35\x55\xb5\x93\xb3\x19\xce\xa8\xce\x31\xb4\x7e\xfd\xc0\x22\x22\xed\x7a\xd9\xfc\x87\x68\xcb\xe8\x92\x0f\xd4\xa5\xd4\xc3\x5a\x1f\x92\xf0\xf6\x93\xca\xf8\x33\xaf\x1f\xa7\xa5\xe3\xc4\x5c\xd0\xf9\x1a\x41\x76\x09\x3b\x6e\x1b\xea\xfe\xce\x57\x94\xd3\x1a\x8b\x06\x4e\x85\x02\xce\x4e\xf8\xce\x06\xb2\xe7\x03\x1c\xc8\x49\xbe\xe6\x3a\xd1\x02\xd4\x27\x1b\x15\xb2\xf2\xe9\x08\x41\xb0\xa2\xa8\x2c\xd7\xec\x7a\x37\xa7\x78\xa1\xf7\x9e\x1d\xdc\x50\x1c\x32\x10\xcf\x31\x80\x79\x0b\xbc\x30\xba\x4a\x4b\x3e\xc5\xe0\x32\x1a\xd9\x70\x0d\x16\x6e\x86\x88\x1e\xa1\x5e\xb3\x41\xd4\x31\x71\x21\x9d\x30\x4b\x4c\xc6\xd5\xcf\x95\xd0\xa2\x9d\xc5\x59\x9a\xbf\xf3\x14\x7b\xdb\x6e\x32\x60\xde\x56\xfc\x7e\xc8\x0a\xfc\xef\x9a\x64\x30\xba\x7a\x17\xf4\xb8\x4c\x7c\x52\xf8\x03\xdb\xed\x66\x50\x4f\x9b\x12\x7f\x45\x28\xc8\x86\x18\x6e\x6a\x70\x1d\xb1\xfd\xfa\x3e\xc8\x56\x92\xa7\xa8\xed\x82\x4a\x09\xba\xc3\x9b\x75\x40\x8e\xc5\x96\x5c\x30\x2a\x6d\x43\x87\x37\x84\xf0\x3a\xfd\x6e\xd0\x71\x64\x9c\xf3\xc3\xbc\x7d\xfa\xf5\x89\xb6\xf6\xb6\x1f\xdd\x81\x85\x39\x87\x56\xe3\x25\x3d\x3c\x07\x68\xb4\x24\xfb\xc9\x14\xa8\x46\x83\x4e\x7a\x27\xcc\xe8\x32\xad\xcc\x5b\x7f\x7c\x5a\xaf\x30\x2c\x7c\x01\x66\x4c\x9e\xd3\xcc\xdc\xe0\x2d\xbd\x36\x63\xed\xa2\xb0\x6a\x3f\x2e\xb4\x65\x81\x4b\xe2\x09\xf2\xc1\xb1\xe3\x87\x41\xf7\xb8\x9b\xec\xc5\x0e\xed\x28\x15\x4f\xd2\x12\x2f\x8a\x6d\xb7\x58\x0d\x7a\xb1\xa2\x36\xbe\x3c\xd4\xb9\x4f\x6b\x4c\x02\x1b\x9d\xcf\xda\x57\xeb\x38\xc0\xd3\x14\x02\xd3\xc6\xcf\xba\x15\x7a\xdc\x7e\xcc\x34\xf9\x0b\xf6\x38\xb8\x69\xc2\x6f\xe8\xb8\x06\xe1\xbb\x48\x1b\x21\xf9\xb9\x57\xf2\xe5\x24\xc9\x2b\x98\xb6\x59\xb2\xe6\xfb\xe8\xfa\x38\x2a\x09\x5f\x52\x08\x2e\x1d\x25\x4e\x9a\x0c\xe2\xe2\x72\xb8\xbe\x95\x85\xf6\x57\xe9\xed\xaf\xf9\xd4\xfe\x9a\x5f\x7b\x7f\xf5\x48\x0b\xef\x2f\xff\xaa\x96\x91\x29\xab\xda\xcb\xc7\x3d\x98\x36\x66\xb2\x56\xdc\xc4\xbe\x52\x09\xf6\x38\xb8\x69\x92\x6f\xe8\xb8\x36\xc9\xf7\x49\xd3\x24\xbf\xa2\xc5\x69\xf4\x82\x16\x27\xfc\x5f\xe7\xaf\x1b\xfc\xf3\x06\xfe\xee\xd4\x8c\x57\x54\x5e\xa1\xde\x14\x5c\x6d\x8d\xb6\x85\xd8\xad\xb8\x52\x93\x89\xa8\x13\x88\x17\xec\x30\x82\xe1\x4b\xd4\xde\x8f\x08\x64\xd6\xd4\x51\xc1\x23\xfd\x03\x71\x07\x11\x55\x51\x43\x18\x93\x24\xa2\x9c\x48\x05\x42\xa1\xa5\x9b\x0e\xa0\xc4\x41\xca\x0f\xa6\x3e\x20\xef\x48\x95\x9a\xf1\x70\x1c\x31\x4d\xeb\x34\xaa\xea\xb7\x40\x7f\xe2\xe5\xec\x32\x2d\x69\xdb\x42\x37\x41\xc0\xfd\x17\x06\x49\x53\xce\xa1\x75\xc1\xbe\x79\x73\x1c\x9d\x7f\xab\xb4\xf3\xd9\x96\x1b\x40\xa8\x7d\xc0\x15\x4e\xed\xdb\xa3\x5e\xbb\xb6\x91\xaa\xaa\x4e\x5c\xce\x35\x99\x60\x80\x4d\x77\x3e\x82\xc6\xfc\x8a\x6c\x2d\x57\xf3\x01\x66\x21\xad\xee\xbf\xa2\xdf\xde\xd1\x9d\x1a\xbf\xff\x82\x6b\x77\xd1\x7b\xd9\xf2\xdc\xd2\x0e\x11\x89\x42\x4f\x2d\x22\x5d\x09\x18\xef\x33\x5c\xe9\x18\x02\x9d\x9e\xc3\xc1\x93\x22\xeb\x5c\x86\x8c\x9e\x59\x4c\x2c\x0b\x48\x6d\x72\x95\xb4\x77\x1a\x0c\x92\x98\xd3\xca\x21\x89\x0e\xad\x50\xcd\x01\x38\x49\xb9\x7e\x5b\xc5\x6b\x88\x67\x02\xa5\xb2\x6c\xe3\xdb\x40\x3b\x91\xa5\x6d\x7d\x46\x17\x9c\x85\x59\x85\x59\x05\xe4\x91\x99\xf0\xc3\xcb\x2f\x1c\x0e\x9a\x1f\x9d\xc8\x28\xbd\xfd\x1f\x75\x51\xd1\x19\x47\xa2\x2d\x2f\xa6\xa6\x0f\x5e\xdd\x5e\x14\xc8\x0c\x07\x0f\x17\x27\x4a\x4d\x5e\x97\x3f\x8e\x12\x3e\x39\x77\x5a\x18\xcc\x86\xb0\x77\xba\x59\x08\xde\xfa\xae\x7c\x96\x59\x5d\xae\x67\xbd\xa2\xf7\x2d\xfa\x46\x5d\x86\x5a\x0e\x3d\xba\x65\x09\xdc\xa0\xb3\xab\x96\x82\xdc\x11\x78\xee\xcc\xaf\x20\xa5\xac\xf1\xfb\x9b\xbc\x0a\xdf\x0c\xe0\x8e\x10\xc1\x1e\x35\x64\xa3\x1b\x04\xa6\xcc\x7b\x15\xe0\x14\x80\x9b\x8a\xda\x92\xd4\xa9\xff\xde\x4b\xad\x6e\x66\x3b\x53\x0c\xe0\x3a\x02\xce\x74\x6d\xb5\x02\xb7\x00\x5f\x0b\x2f\x28\x5e\x53\x6f\x6e\x57\x41\xf4\x2c\x38\x9d\xb6\x5b\x56\x6c\x59\x0a\x0e\x12\x69\xb5\x26\x02\x84\x75\x01\x92\x6e\xfb\x59\x32\xe2\x62\x11\xa0\x91\x2e\x8a\x72\xb7\x59\x14\x99\x15\x30\x96\x84\xe5\x5d\xf8\x65\xcd\x9c\x12\x78\x41\x2b\x38\x5c\xe1\x13\xb7\x39\x8f\x5a\x53\x92\xd8\x4f\x59\x44\x49\x48\xa4\x9f\x16\xfe\x09\x46\xa3\x66\x3e\xd9\x91\x60\x3b\x03\x8a\xf4\x20\xc1\x34\x8d\x7e\x84\xff\x38\x20\xd1\xac\x17\x62\x0a\x9d\xe6\x55\x14\x0c\x73\xd9\x66\xb2\xdb\x72\xa6\x5c\x3f\x1b\xa5\x9f\x0d\xd5\x5a\x14\x6b\x17\x5f\x44\xab\x06\x4e\x30\xf3\xc7\x91\xdc\xd0\x1a\x59\x84\x1d\xa4\x6a\xe3\x04\x4f\x93\xcf\x1d\x86\x3f\x1c\xe7\x9e\xe3\x1c\x0e\x1d\x24\x2a\x07\x47\x1f\xac\x8d\x97\xd1\x9d\xd7\x80\x6d\xfc\x7d\xd6\x03\x70\xbb\xd8\xf1\xcc\xfc\x7c\xad\x9f\xa0\x7b\xa1\x3c\xf4\xae\x76\x6e\x49\xf7\x05\xad\xc8\x6f\xf4\x1f\xae\x2a\x26\xe2\x52\xd5\x56\xe2\x17\x87\xbf\xcd\xc2\x24\x63\x9f\x79\x2d\x88\x0d\x71\xa7\xb3\x68\x4f\x8d\x43\x7a\xe8\x40\xf8\x6d\xd2\x39\xf2\xc4\xaa\xf5\x36\x06\x7b\x07\x1f\x92\x3a\xdf\xc4\x3b\x0f\xed\x09\x12\xca\xbc\xd2\x45\x3d\x02\x08\x9e\x9b\x3f\x94\x65\x4d\x3b\x21\x05\x75\x63\x54\xbd\x78\x76\x0e\x89\x7d\xd6\x45\xf2\x49\x9f\xd3\xa0\x28\x06\xfe\x25\x2e\x36\xdb\x8c\x2a\x0f\x60\x2f\x16\xe2\xa1\x66\x46\x55\xb3\xa9\xa1\x88\xe1\x3c\xbd\xfe\x69\xde\x67\x4a\xbb\xbf\x51\x94\x01\x31\x89\x63\x11\x78\xc6\xc8\x5e\xd2\xb3\x0d\x8e\xc3\xc6\xd1\x1e\x90\x53\x1c\xdc\x4f\xe1\x3f\xb8\x85\xc3\xe5\x1c\x21\xdf\x69\xee\x5e\x12\xaf\x4d\x48\xda\xb5\xc4\x83\x47\xbf\xa2\xc8\xc0\xcc\x4c\x4b\x8b\xd0\x5a\x35\xc0\x3d\x08\x4b\x0a\x31\x07\x41\x83\x70\x3c\x1e\x4f\x0f\x89\x9a\xa0\xfd\xc2\x2f\x71\xbc\x26\x16\xab\x77\xf4\x06\x3a\x49\x90\x73\x5d\x11\xe2\xb7\x4d\x7c\xb7\x69\x7a\x98\x92\xbf\xce\xe9\xf2\x78\xc1\x0d\x8e\x6e\x3f\x1c\x43\xb2\xae\xb4\x02\x57\x90\x54\xf0\xb2\x1d\xe7\xe7\xc1\x12\x3d\xc0\xb6\x19\x43\x00\xc8\xcc\xbf\x2b\xbc\x91\x87\x87\xe0\x19\x52\xb6\xa1\x08\xcf\x8b\x29\x38\xbe\xd0\x1c\xf5\xde\x2e\x44\x1d\xee\x59\x0e\x0a\x27\x6a\xe4\xb0\x67\x57\x15\x91\xc9\x1d\x35\x98\xfd\xa6\x4d\xa1\xde\x45\xaa\x71\x21\x70\xdb\x18\xc3\xa0\x5e\x97\x5d\xdb\xbb\x5d\x7d\xd6\xbb\x5e\xdd\x09\xe1\x73\x1a\xe7\xe5\x85\xd3\xc6\x6b\x63\xdf\x12\x9a\xa5\x9b\xd4\x88\xb9\xf3\x89\xeb\xa6\x43\x20\xc3\x82\xa1\x5b\x95\xb6\x3d\x59\x1c\x56\x31\x1e\x37\xf1\x88\x4f\xa5\x58\x58\x79\xaa\x95\xf7\x3c\xd7\x22\x36\xb1\xb1\x00\xc4\xf5\x63\x25\x52\x26\x72\x45\x41\x24\x20\xf4\xf5\x49\xf4\x1c\xee\x99\x5e\x11\x98\xb7\xc7\xe2\xd2\x2a\xdc\x5b\x96\x72\x6f\x03\x10\x17\xbb\xe8\xd3\xff\xf9\xf4\x58\x18\x81\xe0\x73\xe0\x4c\xf2\x65\x83\x61\x90\x24\x89\x2b\xf0\xd4\xf0\x45\x48\x27\xec\x82\x97\x26\xbc\xbf\xff\x23\x4a\xbe\x3e\xe1\x1f\x66\x08\xe0\x53\xb8\x3f\xf0\x70\x9b\x91\x34\xff\xf4\xe8\x91\xb5\x53\x75\xf7\x69\xcb\x90\xaf\xff\x25\x9d\x68\xf9\xc9\xcb\x56\x2d\x61\x96\xa1\x50\xe4\x90\xcf\xca\x65\x1c\xce\x1a\x70\x5a\x9f\xb6\x4d\xf4\x10\x8f\xfd\xfa\x7d\x20\xea\x55\x5c\x21\xd7\xa7\x83\xc0\x24\x2f\x61\xca\xab\xa0\xed\x4e\x22\xcd\x6c\x56\x5c\x7a\xe3\x85\x25\x90\x16\xaa\x88\x0d\xd1\xe0\xab\x61\xd0\x6f\xdb\xa4\x69\x80\xcd\xa6\x48\xd2\xe5\x2e\x02\x47\x13\x0c\x08\x71\xbd\x15\xef\xde\x71\x0a\xac\x1a\x2f\xc0\x9c\x95\x32\xf2\xb0\xb9\xfc\x2e\x41\x62\xa8\x70\x71\xe9\x5f\x64\x82\x2e\xdd\xbb\x24\x26\x6e\x56\x73\xd8\xab\xbc\x60\x1f\x40\x68\x06\xe7\x6f\x8a\xcb\xd2\xc9\xbd\xc6\x7c\x93\x0b\x61\x5c\x06\x8b\xe7\x32\xf2\x49\xbb\x54\x2e\xaf\x92\x23\xf3\x7d\xa1\x78\xf9\xe5\xc4\x94\x6d\x82\x08\xe9\x68\x8c\xac\x70\x6c\x0c\xcb\xb0\x28\x80\xd2\xba\xae\x43\x9c\x80\x5a\xfc\xce\xf9\xb7\xfd\x2c\xac\xc7\x82\x26\x74\xd3\x6b\x1b\x09\xa4\x48\xe8\x39\x71\x03\x9c\x69\x76\x9f\x93\x10\x75\x87\x92\xe1\x66\x6a\x57\x69\xf6\xca\x73\x77\x2f\xfa\x40\x03\x2b\xe8\x40\x7b\x05\xa7\x28\x22\xf0\xd1\xdd\x44\xcf\x4a\x1d\x67\xa4\xe4\x36\xff\x90\x1c\x7a\x99\x71\x6f\xa9\x20\x90\x9d\x69\x92\x28\xab\x5d\xd6\x73\x1c\xed\x35\x1e\x20\x48\x2e\xe5\x8b\x46\x05\x67\x23\xb6\xe4\xd6\x07\x95\xcc\x78\x6c\xc8\xf1\x34\x61\xc9\xf5\x7b\x37\x24\xaf\xfe\xc9\xcf\x2d\x1c\x34\x8a\x99\x69\xa2\xb0\x5d\x13\x75\xb9\x72\x67\xc1\xec\x1e\x8a\x41\x9d\x52\x11\x2d\xf8\x31\x50\x4a\xb6\x5b\x8b\x8f\xc1\x1c\x5c\x3e\xaa\x64\x62\x94\x43\xd0\xd5\x92\x25\x32\x71\x79\xc9\x3a\x8e\x16\x94\xef\x63\xa1\x64\x0a\x88\xcf\x46\x12\x3b\x12\x89\x8d\xbe\xb1\x28\xaf\x95\x8f\xc3\x11\xa3\x75\x16\xa3\x9b\xe2\x82\xaa\xb3\x6a\x47\x7d\x7c\x90\xc3\x38\xcf\xd6\xc6\xa1\x20\xa3\xdb\xdd\xdf\xbc\x95\x81\x13\x65\x8f\x4e\x23\xf7\xb1\x8c\x3f\x38\x6b\xea\xbd\xf5\xa8\xa8\xff\x7e\xbb\x4d\xe0\x8a\x4d\x43\xe6\x5b\x33\xa4\x40\xc3\x7b\x60\xd0\x33\x33\x9f\xd8\xfb\xae\x0c\xea\xcd\x90\xbb\x4f\x9c\x59\x94\x7a\x62\xaf\x7f\x94\x5c\xa0\x75\x2e\x0f\x25\xe4\x59\x85\xb0\xd2\xda\x53\xc7\xae\x2f\xab\x39\x86\xa0\x50\x01\x4c\x48\x13\x49\x93\xe0\x48\xc4\x6f\xf3\x36\x12\xdb\x89\x59\xf3\x6d\x8e\xd7\xec\x00\xc1\xd3\xaf\x4f\x1a\xde\x4f\x90\x1a\xe1\x40\x3a\x16\x5e\x1d\xe9\x17\x4b\x0a\xae\xf5\xe6\x45\x85\xfe\x28\x91\xe0\xf3\xf7\x22\xcd\xb9\x72\x85\x79\x93\xeb\xd2\xc4\xd0\x6b\x40\x73\x65\x2a\xd3\xab\x54\x8b\x3f\x2f\x8f\x7a\xd4\xe9\x27\x30\x65\xf7\x08\x86\x4b\x6a\x41\x5b\x09\xb8\x59\x86\xd9\x03\x36\xc4\x16\x35\x38\xe0\xd4\xc4\xb2\x65\xf4\x22\x85\xb4\x12\xd8\x87\x51\x12\x11\x99\x02\x5a\x9d\x4b\xe2\x90\x89\xd2\xe3\x36\xcc\x11\x25\x82\x76\xeb\x55\x05\xf7\x20\xf4\xda\x4f\x7f\x7a\x65\x62\x50\xd2\xef\xb2\x90\x62\xbb\xf6\x34\x09\x4e\x56\x91\x85\x76\x68\x40\x37\x9c\x44\x8f\xf9\x60\xcd\x64\x90\x31\xa7\x21\xcb\x7a\x32\xe6\x2d\x64\x42\x97\x76\x30\x01\x36\x8e\x42\x65\x48\x89\xd6\x04\xfa\x21\xa2\xcb\x25\xa4\x10\x2c\x72\x99\xc2\x91\xb3\x66\xca\xfd\xe1\xd0\x4c\x7e\xeb\x59\x71\x86\x66\xd1\xd4\x39\x61\x46\x98\x71\x06\xe0\x91\x16\xb3\xbb\xcb\x8f\x7e\x88\x97\xe0\x94\x54\x9c\x2f\x94\x93\x09\xcc\x43\xed\x4d\x9a\xf0\x2e\x7b\x3b\xb1\x53\xf4\x8b\x22\x4d\x6f\xf0\xe9\xa1\x7c\x5f\xe2\xe9\xa4\xbc\xc8\x1f\xe0\xe0\x54\x29\xd6\xa4\xa7\xbb\x61\xb9\xc7\x30\x0e\x4a\x78\xde\x01\xaf\x29\x65\xd9\x0e\xc6\xff\xb2\xce\x78\x87\x82\x7f\x78\x19\xed\x8a\x3a\x7a\x97\x17\x97\x5d\x38\x2a\x84\xb1\x04\x8f\x5a\x0c\xae\x64\xc8\x94\xe5\x58\xd6\xfa\xc7\xcc\xe7\xf6\x55\x7b\x99\x66\x95\x2d\x7e\x4b\xfe\xd9\xb7\xc1\x36\x61\x5d\x30\x74\x1e\xb3\xd5\xd9\xa9\x6b\x06\xf4\xd4\x00\x05\xbe\x55\x4b\x7c\x4d\x3a\x76\x28\x17\x58\x73\x36\x78\xaa\x5e\x05\x42\x65\xa0\xb3\x75\xcb\x9b\x16\xab\xd2\xf4\x8b\xf5\x0a\x9c\x3a\x02\xac\x44\x33\xf8\xef\x00\xfa\xc6\x70\x18\xd8\x60\x8a\xd1\xc0\x20\xb1\x41\x38\xe0\x4a\xdc\xf2\x91\x4d\xdb\x87\x6c\xc2\x94\x6d\xf7\x35\xaa\xaa\xa8\x48\xa6\xe5\xc7\x6c\x52\x76\xca\xb9\xa0\x36\x06\xcb\x9c\xd0\x8f\x0b\xd3\x3f\xe9\x4c\x8b\xc3\x73\x20\x9e\x43\x66\x2d\x70\x47\xb7\xa1\x7f\xcd\x94\xec\x23\xd2\x42\x02\x4b\xf1\x50\x0e\xa4\x9d\xe3\x5b\x8c\xbc\x5c\xaf\xd6\xa5\x63\x0d\x03\xbd\x8a\xe9\xb6\xcd\xac\x05\x51\xfb\xe9\x06\x82\xdd\xca\x4d\x51\x54\x6b\x98\x79\x17\x70\x3e\x02\x7e\x6e\x5e\x63\xad\x9e\x68\xe1\xd6\x48\xb6\x13\x0e\xc1\xb2\x22\x7c\xb2\xe6\x94\x6f\xaa\xd9\xce\x1e\x72\x3c\x2a\x70\xd1\x10\x81\x3c\x6a\xa2\xc3\x92\xee\xe6\x71\x35\x43\xcc\x37\xd2\x15\xad\xc1\x56\x9b\xb3\xd7\x81\xd7\xb6\x14\x59\x13\xf8\x97\xb4\x84\x7e\x68\x22\x08\x2f\xd7\x29\x17\x32\x6c\xd5\xb0\x82\x2b\xd5\x03\x72\x72\xc2\xba\xde\x66\x99\x15\xd7\x88\x34\x0c\xe8\x10\xc4\x47\x73\x8e\xb1\x4c\x66\x7d\x95\x0a\x21\x4d\x51\xdc\x70\x16\xb1\xc2\x38\xef\x63\x19\xfb\x0d\x9f\x38\x35\x7f\x52\x26\xaf\xfa\x8b\x03\x98\x24\x85\x5c\xcd\x3a\xf8\x35\x4d\x59\x1b\x25\x8e\x69\x66\xed\xa3\x11\x4e\xe2\x5a\x3e\x41\x83\xd6\x9e\xbd\xe9\x24\xaf\x37\xe6\x8e\x73\xc2\x3c\x10\xd6\x4f\xa9\xf7\x9a\xec\x94\x26\x29\x47\x59\xe3\x31\x9c\xbc\x7f\xd9\xfc\x59\xa4\xc3\xed\xbc\xcc\xd7\xbf\xb5\x28\xb9\x69\x36\x18\xfa\x47\x9d\x72\x59\xc8\x67\xeb\x60\xd1\x84\x61\x80\x8c\x1d\xc1\x3e\x83\x18\xa0\x3b\x20\x56\x3d\x63\x94\x24\x3b\x99\xa6\x9a\x73\x59\x57\x38\x4f\xf4\x91\x41\xe0\xd8\xd1\x2a\x2c\x44\xec\x30\xa1\x02\xd6\x0f\xff\x4e\x6a\x99\xd4\x2a\xe6\xbe\x19\xe5\xc0\x2d\x98\x68\xfa\x34\x56\x27\x3d\x00\xd3\x4a\x75\x8e\xef\x86\x7d\xf3\xac\x7d\x2d\x4d\x20\xfe\x56\xf0\xf1\xcc\xef\x4c\x6e\x5f\xb1\x53\xcd\x8d\xeb\xa1\xd1\x5f\x6e\x47\xf4\x33\xf8\xd8\xf1\x46\xff\x75\x87\x9c\x1a\xa1\x8e\xc5\xfd\xbc\x01\xd3\x9c\xa5\x56\x4f\xc2\xd9\xad\xf2\x6b\xec\x43\x8d\xd6\x61\xea\xe1\xd1\xfe\xcb\x89\xa3\x1d\x1d\xdd\x19\x23\xa7\x87\x20\xfa\x51\x47\x35\x3b\x8d\x5c\xca\x59\x6f\xc4\x77\x4f\x2a\xfb\xe5\x8f\x3a\x8a\x81\xc2\x1a\x12\xa4\xdf\x05\xd5\x4e\x4f\x03\xc5\xd0\x1c\xed\xab\xa4\xb6\x99\xde\x99\xba\x68\xf6\x34\xeb\xa0\x87\xa5\x1a\x61\x0f\x39\x9d\xb8\xe9\xe4\xa9\xe2\x22\xdc\xa0\xbb\x25\xda\x64\x68\x40\x00\x90\x35\xf4\xbf\xa8\xf0\x76\x6b\x3c\x6a\xb7\x75\x5a\x52\x95\xad\xd5\xe8\xa9\x3e\xa0\x5d\x60\x33\xb8\x7a\x63\xce\x18\x87\xfa\xda\xcc\xf7\x6e\x46\x53\xd8\xb4\xfe\x0b\x52\x3f\xb7\xfb\x35\x40\xfa\x52\xe5\x89\xfb\xaa\xbd\xb3\xd4\x6c\xda\x7d\x08\x3f\x8b\x4c\xcc\x93\x61\xb0\x22\xcb\xea\xed\x4c\xfc\x0a\xe5\x48\x4c\xe6\x2e\xa0\x0d\xd9\xce\x34\x81\xca\x77\x73\x20\x3a\xe0\xcc\x7a\x09\x44\x25\x5f\xee\xb4\x91\x50\x55\x07\x2a\xaf\x9d\xf3\xaa\x08\xd9\xaa\xaa\xdd\x21\xed\xee\xee\xc6\xa6\xf4\xc0\xec\xc2\x5a\x93\x72\xa6\xc1\xb3\x9d\x17\x42\xf4\x6c\xb7\x8a\x66\xb8\x96\xdd\xc2\xe6\x54\xe8\xbc\x5b\x4d\x78\x74\x87\x30\x61\xae\x70\x6b\x8e\x70\x99\x92\xdb\x74\x76\x2a\x31\x8b\xeb\x5f\x9a\xb4\xf4\x4a\x7c\x39\x7f\x06\x76\x23\x68\xc2\xbc\xef\xed\xd4\x6a\xb1\x39\xdd\x83\x2f\x5c\x7d\x67\x36\x6a\x4d\xe3\xc8\x27\x77\x71\x87\xcc\x90\xbb\x26\xaa\x1e\x70\x92\x24\x33\xaf\x28\x7d\x8d\x5b\x69\xf5\x25\x69\x48\xa3\x7b\xed\xe2\x9a\xa5\x20\x73\xc2\xb8\x03\xc2\x7a\xd7\x2b\xc1\x8a\x94\xb9\x63\x40\x51\x66\x7a\x52\x99\x52\xb8\x3e\xb9\xe1\x01\xc1\x07\x19\x5c\xc6\x13\x0f\x27\x74\x34\xf0\xbe\xa5\x84\xaf\x87\x81\x53\x8b\xd3\x27\xdc\x74\x1d\x9f\xb6\x4a\x45\x9d\x44\xdb\x92\xd6\x49\xd1\xc5\xd9\x07\x97\xd0\x8b\x54\xdc\x25\x3f\x6f\xa2\xaf\xc0\xd6\x4c\x08\x4b\xda\x42\xbb\xb2\x0b\x74\xcf\x80\x1e\xed\x06\x5e\xd3\x44\xbf\x86\xd7\xdf\x69\x0f\x27\xbe\xac\x58\x3d\xf8\x58\x45\xc8\x69\xff\xf1\x56\x48\x31\x8f\x7e\x60\x97\x69\xfe\xe0\x7b\x70\x88\x86\x8a\x31\x2e\x6a\x6e\x44\x01\xcf\xad\xa3\x06\xf6\x23\x30\x36\xc0\xbc\x52\xef\x9c\xd8\x73\x45\x01\xbe\xef\xd1\xf7\x06\x60\xbc\x6c\xca\x09\xf9\xf0\xa1\xee\x7b\xd1\xe7\xa8\x7c\x93\xbf\x2d\xd5\x35\x28\x73\x1a\x5b\x6b\xc1\x4f\x22\xb3\x2a\xd8\xb2\xe1\xcc\xda\xc2\x86\x50\x5b\x62\x15\x4b\xfd\x90\xed\xda\x05\xca\xc8\x78\x83\xd7\x5d\xed\xe4\x89\x92\x40\xda\x44\xe5\x03\x12\x66\x8b\x68\x42\x54\x01\x51\x2c\xbd\x7a\x46\x6c\x86\x97\x95\x90\xe0\x8c\x49\x0c\x22\xf4\x6e\x74\xd3\x28\x89\x58\x83\x7a\x0e\x22\x12\x7b\xb8\xcd\x35\x4a\x69\x1c\x42\x43\x0e\xa6\x7b\xbd\xf5\x52\xea\x20\xc6\x38\xd7\x5d\x88\x5d\xcf\xf3\xc3\xea\xa6\x1c\x40\xf8\x14\x86\xee\x02\x52\xfe\xb0\x6e\xcb\xee\x61\x87\x32\x7b\xfb\x7d\xd9\x3b\xe3\xd1\xd0\xea\x8e\xa8\xe6\xb1\x1c\x70\xc3\x75\x7c\x6e\x8d\xeb\x54\x99\xd4\xb6\x04\x1d\x08\xd6\x82\xa8\x09\x27\x96\x4d\x5b\x0b\x6d\xde\x04\x79\x22\xb6\x7e\xdb\x87\xfd\x41\xd2\x33\xea\xfd\x83\x6a\x98\x77\x2d\xff\x16\xb7\xf2\xc7\x70\xa4\xe4\xf5\x23\x6f\xd7\x0a\xaf\x90\x9c\x06\x71\x23\x5b\x9d\x46\xf8\x9c\xfc\x39\xa6\x2c\xf0\x8f\xda\xb0\xc1\xd4\xbc\x30\xd3\xb8\x5c\xf7\x18\x53\x8f\xb3\x5e\x58\x94\x0d\xb9\x4e\x40\xd9\x39\xb3\xd4\x46\x94\x63\x3c\xdd\xad\x81\xd4\x7b\x55\x6e\xc2\xa8\x2a\xdb\xf7\x89\x72\x6d\x7c\x95\xd3\x06\x58\xd9\x19\x61\xde\x05\xea\x7d\xe7\x1b\x9c\x03\x86\x76\x3e\xdc\xca\xda\xe0\x9b\xb1\x15\xc5\x1b\x3f\x70\x0d\xc4\x94\x4d\x47\xe1\xd3\x83\x1e\x0c\xb7\xb7\x0d\x7a\xa5\xad\xc4\x70\xb4\x22\xce\x9c\xba\xa3\x1a\x8f\xaa\xe1\x00\x05\x37\x09\x47\xe4\x86\x0d\xb8\x54\xab\xb5\x60\x8e\x36\x7a\x63\x9e\x6e\xd2\x8c\x60\x80\x7e\x27\x92\x00\xe8\x3f\xb1\x00\xb3\xc1\x57\xdd\xab\x1d\xac\xda\x02\x5b\x84\xd4\x12\x97\x78\x6c\x90\x15\xc9\x7b\x8b\xc7\x0a\x5c\xc6\xba\x78\xc4\x63\x69\x66\x1b\x89\xb6\x13\xe5\xc9\x4a\x8f\x63\xfc\x3d\x4e\x92\xce\xfd\x30\x3c\x20\x6d\x35\x69\x71\x47\xec\x38\x2a\xeb\x2d\xa8\xdb\x20\xa0\x4f\xf1\xc5\x22\xb8\x43\xc3\xed\x81\x4f\x41\x34\x36\xb8\x9f\xa2\x62\xce\xea\x6d\xf5\xa9\x04\x22\x42\x7a\x1a\x44\xea\xc4\xaf\xd7\x7d\x70\x16\x77\x91\x26\x35\xc9\x6c\x70\x8d\xb1\xdf\x92\x3a\x72\x54\x89\x64\x05\xf0\x1f\xf4\x93\xc1\x30\x1f\xbf\x82\xdf\xf6\xee\x17\x61\xd4\xe0\xdc\x06\x1c\xc6\x89\xc6\xb9\x8d\xa6\xde\x05\xb9\xf3\xee\x55\xba\x01\x99\x68\x02\xb0\x4e\xf8\x41\x99\x58\x06\xda\xe4\x08\x81\xe0\x45\x51\xd7\x0e\x85\x1d\xe8\x6a\x27\x73\x61\x76\x1c\x40\xd6\x64\x98\x2e\x00\xa0\xdb\x9f\xc3\x03\x5c\x86\x76\x8c\x8f\x72\x89\xe4\x32\x82\xa1\x4e\xea\x36\xe5\xb1\x35\x12\x2a\x7b\x18\x44\x43\xe0\x60\x88\xc6\xe9\xe2\xb6\x08\x71\xd1\x93\x58\x10\x66\x3c\x88\xba\x7d\x32\xbb\xfe\xf3\xc0\xfe\xb5\xc8\x41\xa4\x94\xe6\xf6\x68\x3f\x49\xb4\x07\xae\x3d\xcc\x08\x09\x1e\xa9\x7f\x68\xf5\xfd\x03\xb9\x8d\x6d\x09\xb4\x7d\xa4\xaf\xd3\xd1\x40\x3b\x58\xeb\xf9\x28\xfa\xa2\x30\x4f\x49\xc9\x99\xa4\x73\xd1\xb8\xf0\x9d\x49\xbe\x7d\x98\x8c\x46\x3d\x34\x3d\x2c\x46\xb6\xa8\x20\x1e\x7a\x91\x4a\xc3\xa9\xa7\x1e\x3e\x84\x27\x1d\x6c\x4e\x1e\x08\x92\xf1\xb9\x77\xba\xe5\xf0\x53\x52\xbe\xd7\x26\x72\x80\xf1\x15\xa3\xdb\x4b\x9b\x34\xaf\xe1\xe4\xcc\x5e\xba\x2e\x6a\xe6\x2a\x4b\xc8\xce\x55\xc4\xc7\xf9\x3b\x57\x59\x59\xe7\x9e\x96\x9b\xc2\x57\x5a\xf1\x3d\xc6\x8b\x36\xc9\xbd\x15\xaa\x75\xcd\x7c\xe5\x4b\x96\x7a\x4a\x31\xf3\xa8\x9f\xf6\x6a\xed\x2a\xdc\x51\xd2\x91\xa4\xa5\x8b\x4a\x4c\xa2\xbe\xa2\xb6\x0e\xb2\x97\x41\xf7\xd8\x4b\x38\x99\xf6\x02\xe8\x1a\x07\x22\x20\xdf\x5e\x04\xc4\xb7\x25\x96\xee\x74\x42\x74\x96\xc9\xae\x74\x11\x29\x3b\xd2\xd1\x56\x76\xa3\xbd\x54\x74\xa2\xbd\x4c\x75\xa1\xa3\x25\x5e\x84\x1c\x61\x96\xf4\xae\x73\x63\x8a\x6c\x11\xc9\xa6\xee\x9c\x32\xed\xd2\xaf\xf4\x8e\xab\xfc\xf3\x81\x8a\x87\x2d\x5f\x3d\xcc\x73\x71\x89\x34\x58\x87\x6d\x9d\xe3\x40\x29\x5a\xf2\x0f\xe0\x1a\x7d\x56\x0b\x33\xa1\x25\x5a\x45\x08\xdb\x8d\xcf\x2d\xa3\x22\x0c\x4c\xdd\xab\x35\x63\x87\x1d\x7c\x20\x46\xbe\xcb\xc8\x46\xcd\x0b\xc8\x42\x4f\xd1\xf8\xe9\xb5\xac\xab\xd8\xd6\x29\x4e\x5e\x05\xbf\x87\xef\x1c\x07\x63\xf0\x33\xba\x93\x06\x88\x1f\xe8\xac\xb7\xe7\x4f\x0e\xdc\x61\x1e\xde\x82\x3b\xce\x6c\x68\xba\x95\x9c\x3c\x7f\x2e\x2d\x56\x6e\xeb\xfc\x30\xff\x29\xfa\x5f\xff\xff\x17\x5f\x9a\x2c\x9e\x46\x9f\x7e\xf6\xeb\x83\xcf\x36\x0f\x3e\x4b\xce\x3f\xfb\xfe\xf4\xb3\x57\xa7\x9f\xcd\x4f\x3e\x7b\xf9\x4f\xab\xf5\xd0\xe7\x23\x2d\x0b\x77\x7f\x98\x74\xca\x0c\x8b\xa1\xae\xa9\xde\x40\x43\xb2\x45\x0e\xc8\xc6\x0e\x4e\xe8\x92\x70\x39\x46\x49\xb1\x21\xdc\x2a\x03\x13\x88\xf5\x57\x20\x01\x10\xcd\x93\x34\x7e\x27\xf2\x5b\xc3\xa7\xe6\xa9\x0c\x6e\x5f\xf1\xad\x62\x99\xae\x6a\x26\x2d\x9f\x76\x54\xf7\x25\x61\x5b\x4d\x8e\xd4\x8b\x4f\x20\x0d\xfc\x14\xea\x94\xba\x59\x3e\xd5\x78\x08\xe2\x92\xaf\x18\x83\x8c\xbe\x0f\x53\xe4\x70\x9f\x30\x55\x38\xf9\x1c\xf1\x53\xb4\x49\x30\xba\x50\x7c\x34\x1f\x22\x86\xbf\x76\x2e\x78\x0d\x69\x8c\x5c\x37\x30\x71\x89\xc8\xa6\xa7\xc2\xce\x7a\xda\x51\x6d\xe1\x67\x99\x15\x4a\x79\x57\xd5\xf0\x15\x84\x5e\x45\x26\xde\xac\x1a\xae\x18\xd3\x34\x0b\x02\x28\xde\xe8\xb6\x6c\xa4\xc5\x72\x89\x69\x7b\x35\x18\x42\x36\x1d\x8b\xa2\x0f\x91\x77\xdb\x99\x4d\x81\xf2\x89\xad\x9d\xd4\x5e\xc1\xd9\x0e\x9a\x30\xd3\x03\xc4\xd5\x75\xf2\x3c\x58\x68\x33\x74\x73\xf9\x02\x8f\x45\x3d\x17\x05\x3e\x05\xbd\x57\x03\x41\xba\x1f\x2a\xc6\x89\x36\xaf\x20\x17\x4e\xd6\x62\x6d\x2a\x1a\x7e\x75\xa8\x87\x03\x1f\x3e\x98\x0f\x04\x85\x60\xda\xa6\x34\x00\x0f\xaf\x05\x58\x5e\xa7\x74\x0a\x0e\x3e\x9b\xe3\x10\x2c\x58\x0f\xf0\x3c\x87\x0f\x53\x30\x55\x8c\x86\x20\x82\x6a\xc2\x4e\xa5\x56\x34\x0b\x3e\x71\x32\xac\xf1\x1d\x7e\xb2\xd5\x89\xd7\x05\x4b\xa0\xca\x13\xf8\x60\xad\x91\xd5\x10\xf0\x8d\x75\xc4\x47\x5b\xad\x35\x57\x21\x08\x8b\xd7\x18\xb0\xf3\xbd\xfa\x62\xaf\x59\x56\xc5\x8a\x91\x8d\xa8\x29\xbf\xd8\x6a\x6e\xe5\xa8\x78\xed\x18\x14\x7c\x1e\x54\xcd\xd5\x89\xd7\xea\x8b\xad\x26\x48\x0a\xc2\xe9\xa4\xb0\x5e\x91\xad\x59\xcb\x37\x55\xb5\x51\x69\x5e\xee\x3d\xff\x76\xc6\xfb\x89\xe2\xc3\x59\x4d\x4e\x15\x7d\x25\x3d\x37\x9f\xc1\x97\x71\x52\x7a\x46\x9a\xa4\x75\x1c\x09\x03\xdb\x39\x0d\xc4\x02\x35\x53\xeb\x54\xa3\xb1\x39\x1b\x5c\xcd\xb4\xe4\x2f\x76\x67\xd0\x00\xca\xdd\xde\x10\xf8\x1f\x66\x9c\x5c\x79\x91\x4c\x42\xd8\x7d\xd1\x3a\xce\x76\x1d\x68\x32\x16\xcc\x0a\xce\xbb\xa0\x36\xb3\x20\x24\x9b\x6b\x29\x53\xf8\xca\xf3\x18\x00\x25\x2e\x57\x40\x6e\xe3\x74\x81\x57\x24\xe0\xa0\xa9\x6c\x2e\x15\x89\xf9\x68\x4d\xaa\xa7\xdd\x83\x51\xc7\x17\xde\xe5\xae\xe8\x07\xd0\xdb\x08\xd5\x88\x35\x88\xd4\x5f\x21\xf2\x51\x1b\xaa\x59\xf9\x02\x5c\xc3\xcf\xfe\x3e\x8c\x30\x5d\x6c\x8c\x08\xd8\x75\x2d\x98\x83\x4f\x55\xf5\x07\x4e\x4b\xf6\x3a\xcd\x12\x46\xf3\x36\x7d\x55\xc8\x50\x50\xad\x26\x0c\x87\x40\x84\x2e\x71\x1d\xf5\x16\x9e\xf1\x1d\x3d\x96\x79\x17\x2d\xad\x14\xfa\x6b\xe1\xe4\xbe\x7a\x53\xab\x6b\x89\x61\xbb\x29\x0e\xd0\x19\x3c\x05\x77\x1a\xbd\x60\x64\xbb\x86\x38\x86\x23\xed\xb3\xb9\x92\x5b\x86\x87\xcf\x9c\x45\xf8\xc7\xe2\x66\x17\xde\x94\x2f\x4a\x95\xe0\x40\xe4\xbe\x93\x15\x9a\x07\x3f\xb4\x24\x5b\x2a\x0f\x1b\xa3\xdc\x28\x2e\x69\x5e\xa9\x69\x03\x4f\xb6\xc9\x60\x06\xb8\x2b\x27\xaf\x78\x81\x38\xdb\xe3\xa5\x5e\x1c\x87\xc1\x38\xc2\x98\x21\xf6\x0e\xb7\x8a\xf7\x97\xbc\x7c\x98\xf7\x1f\x96\x2a\x43\x9e\xbc\x88\xd5\x88\x00\x93\xf6\x39\xcf\xbd\xe5\x45\x3f\xb8\x2d\xae\xb5\x5f\x50\x3c\x74\xe0\xda\x50\xba\x5a\x2f\x44\x26\x35\xa4\xf0\xa4\x8f\x08\x2e\x9c\x6b\xc8\xf4\xcc\x7e\xed\x9d\xb1\xa6\x41\xd0\x02\xdd\x54\x9f\x32\x2f\x03\x71\x5a\xf0\xc2\x0f\x4e\x4c\xa2\x75\x04\x5e\x35\x6c\x07\xe4\x3e\x0b\xf3\xde\xd2\x0f\x62\x40\x97\x5e\x18\x27\x07\x5d\x92\xc9\x05\x49\x33\x88\x60\x55\x9b\x0c\x44\x8b\x7b\x7b\x1b\xef\x15\x8d\xee\xe7\x61\x3c\x2e\x01\x1d\xd9\x1e\x36\xf2\x63\x9d\xef\x8f\x55\xb0\xa9\x10\x5f\x93\xc8\x31\x36\x67\x48\xe0\x50\x69\xbe\xaf\xd0\xed\x98\x5c\xcc\x1f\x46\xe4\xe3\x70\x4e\x11\xb8\x4f\xc1\x6d\xcc\x56\xd3\x61\x60\x5c\x12\xea\xd9\x20\x8f\x59\xfc\x94\x96\x31\x4b\xb7\x5c\x39\xb2\xda\x23\xd6\x13\xd9\x23\x5d\xe1\xef\x9d\xab\xba\xd6\x20\xab\xb9\xe0\x68\xed\xb6\xc5\xcd\xb8\x5c\x87\xc6\x3c\x5e\x77\x1d\xa3\x26\x06\xd2\x06\x3e\xb5\xc7\xf9\xca\x11\x38\x6c\x5c\x53\xe9\x8a\x4a\xb4\x1a\x42\xa8\xd7\x9d\x05\x91\xd8\x69\x91\x84\xb3\x66\x69\x67\x1a\x7b\x23\xa5\x43\xf3\xe4\xa3\x95\xcd\x35\x8b\x66\x4b\xee\x45\x63\x11\x8d\x6f\x09\xec\xac\x64\x86\xd8\xda\x58\x7b\xf3\x48\x59\x46\x87\xb8\xa7\xad\x4d\xd2\xed\xc0\xb5\x95\x76\x56\xb4\x30\xda\x1b\xc5\xc7\xa0\x3b\x4d\xce\x3c\x38\x1c\x65\x10\x8c\x73\xe6\xf0\x0e\xbb\xda\x6c\x77\x8e\x02\xd8\xa8\x1c\x45\x97\xa0\x01\x56\x8e\x42\x17\x22\x27\x9e\x7a\xe1\xe3\xa9\xed\x11\x47\x05\xd5\x25\x8e\x62\x1c\x00\x8e\x32\x7c\x9c\xec\xcc\x91\x98\x56\x99\x9f\x67\x1e\x63\xef\xdf\x21\x95\x84\x09\xa6\xd7\x30\x86\x22\xdd\x56\x6b\x0b\x85\x83\xc3\x06\x4c\x30\x33\x3c\x46\x3e\xe1\xe7\x40\xa5\x9e\xfb\xb3\x14\x07\x0d\x52\xf4\x5d\x9b\x23\xd5\xd3\x79\x63\xc7\xc2\xf8\x51\xea\xed\x42\xe7\x38\x0d\x12\xad\x8d\xd9\x9e\x7c\xb1\xd2\x80\x90\x8d\x3a\x3e\xe4\xda\xe1\x80\x25\xc7\xaa\xf3\xe8\xc0\x65\xac\xf8\x35\xdc\xd9\x66\xd7\xd3\x46\x9d\x28\x8c\x6d\x0a\xdc\x03\x4f\x53\xb8\x1a\x19\x8f\xdf\xaa\x44\x81\xb6\x57\x39\xb1\x62\xf5\x71\xba\xe3\x18\x0e\xe6\x15\x9f\x9a\xab\x6a\x7d\xda\x29\xf9\x18\xb9\x59\xb2\x54\x04\x8d\x7f\xf4\x9c\x90\x6c\xbb\xee\xe5\x4b\xfd\x38\x48\x87\x87\x1f\x56\x1f\xe9\x74\xb0\xe4\x38\xfc\x61\x89\xf7\x87\x61\x8a\x1b\xae\xbb\xc6\xc6\xdf\x90\xab\x74\x03\x59\x41\x55\x3d\x4c\x7e\x86\xf9\xbd\x4c\x68\x42\x38\xe2\x1c\x54\xc4\xd6\x43\x4a\x34\x0e\xee\xc4\x44\x64\x77\xdd\x99\xf0\x74\xaf\x9a\x22\x43\xe2\x50\xc0\x54\xa6\x31\x19\xc6\x51\x8a\xb4\x5f\xcb\x34\x4f\xab\x5d\x2f\xf3\xe2\x1c\x31\x62\x8a\x36\x12\x61\x1d\x6a\xc2\x8b\xd2\xcd\x96\x71\x0e\x05\xef\x5b\xbe\x66\xc3\x51\x3d\xb2\xbd\xb4\x91\xa7\x9f\x0d\x63\x54\x08\x6f\x9d\xd4\xc8\x7e\xb4\x29\xb8\x04\x30\xdc\x85\x2f\xc1\x89\xac\xf4\xc8\x84\xa2\x30\x3f\x50\x0f\x1f\xf4\xa5\x48\x51\x54\x7a\xaa\x48\xf3\x9a\x00\xde\x4f\xf9\x5d\x39\xf7\x30\xb8\x25\xae\xcb\xaa\xd8\x44\x2b\x46\x2e\x2c\xb2\x30\x4f\x23\x00\xe5\xe4\xc5\x3e\x69\x1a\xde\xe8\xf8\xe6\xfd\xd1\x4f\xc3\x3c\x48\xfc\x8d\x4d\xcd\xce\x77\xd9\x4d\x1f\x29\xf5\x78\x92\xe0\xa2\xbd\xab\x6d\x59\xb5\x14\xc2\x5e\x0a\x08\x66\x5d\x93\x08\x5f\xf7\x8b\x83\x8c\x80\xcd\xb1\xab\xb5\x39\x08\xfa\xd1\x38\x16\x99\x40\x10\xda\x35\x5e\xa5\x8e\xd1\xb2\xde\xf8\x43\x46\xf8\x24\xde\x7a\x2b\x40\x18\x9a\xb7\x42\x91\xbb\xaf\x02\xe9\x07\xef\x4e\x00\x09\x23\x2b\x27\x06\xef\x6d\x05\x2d\xfa\xc4\xd4\x75\x33\xa3\xc3\xdb\x63\x27\x61\x60\x85\x46\xa1\x69\xe1\x2b\x06\x8a\x0d\xe1\xfc\x5e\x0d\xe9\xcc\x76\xad\x59\x36\x6d\x2b\xf9\x02\x65\xde\x1b\xb6\x60\x92\x60\x74\xd6\xc8\x99\xdc\xb4\x6b\xa6\x5f\x20\x42\xf0\x91\xbe\x60\x45\xbd\x75\xce\x40\x38\x8c\x51\x31\x17\x8b\x30\x67\x6e\xc7\x5b\x3a\xd0\x7c\x1c\xa9\xf3\x7a\xb1\xfa\x78\xa8\xc5\xaa\xb7\x9f\x54\x8c\xe6\x2a\x67\xbe\x93\x5b\x21\xf4\x99\xef\x58\xc0\x3b\xcf\xf4\x10\xb0\x9e\xc9\xec\xf1\xd2\x4f\x3c\xd2\xec\x09\x2a\xe8\x34\xd1\x13\xa8\x66\x0a\xcc\x1d\x7f\xd1\x3d\x00\xe9\xbe\x94\xe0\x74\x01\x09\x9a\xcd\x78\x06\x5f\xfb\x31\xe4\x8e\x8e\x51\x98\x72\xb6\xef\x3f\xfd\xde\xab\x33\x27\x1d\x0d\x07\x4b\x67\xa2\x6f\xa4\xe7\x19\x09\x46\xe8\x3f\x3b\x13\x59\x32\x03\x25\xa3\x1e\xc1\x76\x37\x0a\x25\xcc\x37\x7b\x8d\xc0\xcc\x5b\x3b\x7f\xbd\x01\xa4\xb7\x71\x06\x8f\x20\xf8\x83\xcc\xe1\x0f\x3d\x32\x47\xf0\xcf\xc4\x1b\x62\x16\x09\x38\x81\x78\x95\xcb\xb4\x4d\x6d\x6a\x7d\xb7\x0f\x7e\x2c\x47\x35\xf0\x93\x38\xfe\xbe\x1b\xe7\x47\x36\x82\x98\xc7\x1e\xcf\x73\x0e\xc6\x75\x9f\x96\x68\xcb\x19\xba\xa7\x9b\x78\xfd\xfa\xfd\xc8\x6b\x5f\x87\x89\xfb\x12\x83\xc4\xb8\x6d\x48\xeb\x14\x93\x60\x03\x01\x0c\xc5\x8a\xeb\x20\x43\xdb\x74\xd9\x5c\xa4\xb9\x5b\xc1\x93\x90\x89\xeb\xe5\x4c\x0f\x9f\x02\x6e\x30\x84\x20\x46\x05\x4c\x6d\xf6\x8d\x69\x30\x56\x30\x4b\x7c\x9a\x38\x8f\x9d\x5e\x09\xeb\x89\x0c\x16\x6a\x4d\xdb\x7b\xf8\x81\xa8\xbd\xa1\x30\xae\x80\xfc\xdb\xb3\x85\xb9\x2e\x2d\xdc\xc6\xdd\x2b\x8c\xd6\x3b\xb9\x71\x85\xb1\x7e\x28\xcd\x32\x0c\xdb\xe1\x5c\x07\xc3\xf8\xfc\xb3\xac\x73\xa5\xe6\x7e\xaa\xdd\x4f\xb5\xbb\x34\xd5\x86\x2e\x13\x35\xb7\xc4\x6e\xed\xc0\x77\xdc\x65\xeb\x0b\xf5\x76\x8c\xfd\x60\x72\xef\xe4\xf0\x0f\xe6\xfe\x50\x33\x20\x18\xe1\xe1\xf6\x9b\x60\x94\xf2\x52\xf7\x58\x7d\x52\x36\xd3\x73\x3a\x85\x0a\x15\xce\x47\x26\x68\xb0\xaa\xdd\x04\x94\x1b\x1c\x0d\x76\x84\xce\xfc\xc1\xa2\x91\x96\x02\x2b\x00\x99\x79\xcd\xfb\x49\x91\xc9\x14\xa2\xdd\x5b\xde\xf8\x77\xdf\x25\x6f\xb3\x02\xc2\xeb\x85\xff\xa7\x79\xcc\x20\x91\x1b\x9f\x75\xab\x75\x95\x73\x2b\x13\x6e\x2f\x95\xc5\x06\x53\xb3\x17\x39\x5c\x4f\x22\x99\xcc\x10\x16\xcd\x56\x64\xb3\x21\x47\x5d\x18\xdd\x63\xe7\x05\x03\x40\x94\xcd\xde\xe9\x66\x31\x12\xf3\x68\x80\x96\x84\x1e\x98\x96\x84\xb0\x77\x93\x28\x89\x8b\xfc\x82\x32\xf1\x5e\x57\x8c\x72\x84\x97\x2a\x65\x4f\x9e\xf8\x50\x56\x85\xc8\xd7\x6a\x1b\x17\xde\x0c\x0f\x2f\xbe\x13\x1d\xa6\xdc\x1f\x61\xdd\x27\xde\xd5\x4d\x24\x91\xf1\x9a\xe4\x39\xcd\xbc\x04\x32\xfb\x1a\x60\x07\xbd\x62\x70\x73\x28\x1c\xf8\x6a\x0c\xf0\x05\x24\xfc\x0f\x87\xbd\x08\x85\xad\x3a\x0f\x2f\xd2\x71\xb9\x42\xdf\x7d\x3f\x7f\xe9\x05\xbe\x2e\x33\xbc\xc1\x3e\x7f\x69\x8c\x0f\xaf\xab\x48\xd6\x1e\xd9\x67\xeb\xda\x7b\xa1\x66\x1d\xca\x27\xe6\x91\x22\x83\xd7\xdf\x42\xc1\x35\x93\xce\x07\x2d\x9b\xd4\x09\x5c\x50\xd0\x09\xbc\x2f\xfc\x43\x73\xb5\x80\x4e\x50\x53\x21\xac\x13\x5e\x3e\x9e\x34\x71\x0e\xcb\x2d\x79\x90\xa4\x1b\x9a\x97\x03\x7d\x41\x42\xe1\x2d\xc2\xe0\x4d\x9b\x12\x5c\x62\xd7\xd6\x1b\xdf\x3f\xb9\xd1\x29\x11\xaf\x39\x83\xc4\x07\x2a\x0e\x9e\x0e\xf5\x26\xcd\x21\x00\xea\x1a\xa6\xc3\x93\x7d\xa7\x83\xf8\x5f\xa9\x08\xf3\x9f\x5f\x58\x14\x84\xf9\xc5\xca\xa7\x1e\x74\x8b\xed\x54\x8b\x44\x26\x32\x8f\x49\xb9\xdb\x2c\x8a\x4c\xbd\x63\x62\xa4\x35\x37\x17\x1d\xac\x8b\x49\x60\xf0\xd3\x90\x78\x3a\x88\xc8\x55\xf3\x90\xf2\x00\x1a\xa8\x89\x87\xdf\xfc\xf7\x38\x14\x2c\x0e\xc4\xc0\x62\x79\xba\x3e\x0a\x3e\x37\x61\x68\x18\x02\xa8\xe9\xd2\x2b\xb9\xa1\x63\x49\x59\xc5\x48\xc2\xb5\x20\x55\xfe\x06\xbf\xf9\x34\xd7\x41\x51\x50\x12\x2a\x0b\xea\x8c\xc4\x7b\xcc\xcb\x7c\xa4\x42\xf9\xde\xa4\x2e\x58\x5d\xae\xc3\x68\xc5\xaa\x98\x2c\x07\x3e\x8c\xea\x3b\x0c\xbb\x08\xc3\xd2\xcd\xb7\x33\x0a\x0b\x17\xc5\xaa\xc8\x49\xe0\x7c\x52\xb5\x5d\xe2\x7f\x2a\xcb\x7d\x5d\x60\xaf\x33\xd4\x01\x90\x13\xaf\xc9\x5c\x50\x36\xa9\xb6\xe5\x62\x00\x31\x68\xa5\x77\x11\x13\x15\x21\x7b\x77\x69\x7b\x4c\xcc\x9b\xa9\x47\xe0\xe8\x72\x2c\xa2\xde\x66\x2d\x58\x05\x35\xfa\x9f\x68\x36\xc3\x14\xf0\x43\x2f\x0d\xe2\x67\xdb\xba\x24\xdf\xa4\xd4\x6d\xef\x00\xa8\xf2\xa3\x13\xaa\x68\x7e\xa6\xb7\xd7\xed\x91\x31\x46\x02\x0e\xe6\xc1\x55\xfb\x29\x23\x97\x78\xa5\x9b\x1b\x06\xf8\x11\x5f\x07\x10\x93\xa7\x79\x9c\xd8\x7c\xa6\x42\xe6\x9f\xb1\x3e\xea\x60\xbe\x3c\x6f\x7f\x9f\x1d\x4e\x6a\x8f\xcc\x67\xdf\xec\x14\xf6\xee\x9c\x5f\x3d\x10\x19\xfc\x48\x59\x16\x71\x8a\x59\x22\x9b\x64\x7e\x48\xb8\x8f\x1e\x6b\x38\xa0\xe7\xea\xf9\x04\x8c\x16\xac\x28\x09\x98\x56\x5f\x9f\x88\x0c\x7f\xa3\xd2\x18\xce\xa7\x71\x8e\x8d\x2d\xe0\x64\xa2\xfa\x26\x61\x0b\xbe\x08\x06\x39\xdb\x00\x76\x10\x27\x32\xdd\x64\x97\x1b\xfb\xfa\x39\x3e\xa5\xc0\x5e\xdd\x6b\xf5\xf3\xdc\x77\xef\x2d\xea\x5e\x75\x9d\x43\x2c\x31\xa8\xf9\x7b\x93\xf3\x88\x1a\x7b\x64\x63\x71\x22\x72\xb1\x7f\x24\xcf\xea\x47\xf7\xdf\x64\x8c\xe6\xbb\xad\x53\x04\xfd\x24\x83\x94\xd7\x48\x87\xc0\x0c\x6f\xc6\xbe\x53\xd9\x82\x74\x92\xc4\xf3\x9a\xde\x8d\x38\x06\x60\xc1\x1a\x51\xf3\x92\x3b\xab\x29\x3c\x2b\x0f\xb7\x60\x8a\x1c\x1e\xbe\x59\xf6\x91\xab\x87\xda\xbd\x7d\xee\x7c\xff\xd3\x4e\x40\x6f\x90\x75\x9f\x3d\xe9\xec\x60\xf8\x10\x08\x6a\x06\x3e\x0a\x26\xe5\xff\x19\x8f\xd5\x82\x19\x7e\x3a\xe1\xfa\x47\x01\x0f\x76\x8c\x1e\xaa\xd7\x43\xea\xa8\x47\x46\x8e\xa3\x98\x6c\xf9\xc0\xa1\x67\xba\x8f\xdd\x3f\xf4\xbd\x19\x02\xc0\x12\xfc\x6b\x2f\xe5\xc3\xf1\xda\xdd\x49\xfb\xb1\x69\xd6\xd5\x05\x5d\xe9\x97\xe5\x5a\x62\x3b\x5d\x10\x4d\x44\x44\x56\xdf\x24\x35\xef\xd7\x14\x2c\x75\xac\x82\xde\x33\x05\xd1\x4c\x86\xdd\x36\xc3\x69\x18\x1d\xe6\x38\xf6\x30\x64\x3d\x86\x12\x2f\xff\xd5\xf2\x95\x2d\xb5\x96\x85\x21\x7b\x7d\xb0\x83\xa8\x30\x7c\x3f\xcb\x15\x77\x1c\x87\xe6\x3a\x6d\xc5\x65\xa2\x9a\xd7\x0b\x7c\xe4\x87\xf6\x5e\x4e\xed\x37\xc7\xfa\x83\x87\x80\x16\xca\xd2\x3c\x6f\x2f\x81\x1d\x43\xe2\x4d\xca\xce\xfc\x52\xe9\x7c\xc3\xf6\xe7\x53\xb1\xcb\x53\xd0\x60\x6c\x48\xde\x07\xc3\x06\x42\x15\xf9\x96\x67\x4d\x16\x7d\x5b\xf4\xe1\x99\xcd\xfe\xb3\x81\xcf\xd3\x58\x76\xa6\x5b\xc4\x03\xb9\x4c\x06\xed\xb2\x37\x5a\x2e\xbb\x2d\xe1\x4a\x20\x2c\xa7\xb6\xc7\x26\xcd\x86\xea\x91\x63\xa8\xde\x3c\x9c\x87\xdf\xec\xe6\x9a\x6a\x80\x22\x88\x7e\xda\xc2\x5a\x41\x32\xf1\xd5\x6b\xd8\x99\xeb\xbb\xcf\x4e\x85\x1f\x1c\x62\xe0\xd6\xa9\xdd\xc1\x96\x6e\x98\xde\x53\x78\x26\xa1\xb6\x7d\x61\xba\xe0\x3a\xd5\x8c\x94\x38\x03\x95\x1b\x9a\xa6\xb5\xf2\xde\xaf\xec\x01\x31\xd6\x0f\x9c\x28\xf7\x32\x1b\x25\xb3\xe1\xac\x5c\x53\x45\x66\x66\x5f\xb2\xb3\x63\xcf\xbb\xe4\xaf\x3b\x4a\x5e\xbd\x46\x7b\x89\x6b\x28\x4d\xd7\xbd\xb0\xb4\x9f\x98\xaf\x9f\x8c\xeb\x7f\xde\xc5\xaf\x1f\xa9\xe3\x3d\x92\x04\xef\xff\x1d\xda\x0d\xac\x17\x1d\x6c\xfb\x81\xd5\x8c\x93\x56\x9c\x74\x87\xc4\x45\xc1\xb8\x7a\x87\x8e\x70\xe9\xce\xf0\x9a\xad\xe3\x9c\x7b\xa1\x48\x2c\x88\x90\xe5\xe9\x93\xc3\x69\x9c\x8d\x22\xc9\x02\xc2\xe5\xfb\x99\x96\x9c\x59\xcf\x15\x60\x9f\x73\xf6\x43\x27\x6b\x43\xef\xbc\xb3\xc3\xf1\x8b\xa9\x2b\x27\x0c\xb9\x89\xe1\xbd\x17\x62\x7b\x88\xd5\x23\xac\x98\xb7\x69\x04\xa5\x20\x88\x18\xc1\xb0\x71\x00\x00\x4e\x7d\xbc\x84\x38\xc9\xf4\x81\xbf\x1b\x3d\xf0\xc7\xb9\x3d\x43\x91\xb8\x18\xbe\xae\x81\x1f\x4a\xd2\xdf\x7d\xe0\xef\xee\xea\xc0\x4f\x9b\x27\x28\xe1\x84\x09\x02\x22\xbd\xa3\xbe\xad\x3e\x2e\xa1\xb0\x05\xd7\xe8\x09\xa0\x9d\x23\x6e\x8b\x14\x3d\x1e\x6a\xdf\x97\xef\x8c\x49\x03\x72\x6c\xef\x06\xd3\xe5\xee\x58\x4d\x2e\xd8\xbf\x7d\xb1\x06\x71\xd9\x11\x6f\x30\xbf\x07\x19\x08\x31\xc1\xe1\x9d\x45\xe5\x16\xa3\x23\x2a\x11\xde\xe4\x0f\xa6\x14\x75\xc6\x8f\x04\x13\xd9\xe8\xb1\x30\x6d\xb5\x1b\x81\xd6\xdd\xd5\x92\x69\xec\xe6\x27\x06\xc0\x6e\xb7\x57\x96\x08\x31\x17\x4f\x8d\x28\xf7\x99\xdb\x4f\x0a\xd0\x95\xb3\xe8\x72\x4d\x39\xbb\x4c\x3d\x5a\x80\xd9\xbf\x12\xba\x4c\xe1\xed\x03\x78\x38\x4d\x3e\x05\x88\xa3\xca\xdb\xc1\xb2\xd1\xf8\x0e\xee\x6d\x02\xfc\xaf\x1c\x73\x2c\x08\x2c\x81\x42\x46\x6d\xf4\x1d\x6a\x3b\x74\x06\x99\xfb\x47\x48\x38\xdd\x18\x97\xe3\xa5\xdb\x3d\x84\x54\x5f\xec\xb7\x65\x36\x9d\x13\x26\x8a\xa1\x21\x35\x64\x31\x89\xf0\xa0\x7b\xbb\x29\xba\xb7\x9b\x3e\x56\xbb\xc9\x16\xe1\xe6\x6c\x3e\xa8\x44\x2a\x68\x77\xc8\x88\xb2\x86\x00\xde\x9b\x52\x5e\x92\x3e\x52\x53\xea\x7a\xe6\xc2\x38\x91\xdd\x66\xb3\xea\x10\x53\xe1\xa3\x33\xae\xee\x94\xe5\x74\xc0\x8e\xbc\x37\x8e\x3a\x6d\x6e\x87\x71\x34\xa9\x63\xff\x9e\x26\xd2\x84\xa0\xa5\xbb\x60\x0e\x69\x19\x98\x02\x07\x0c\x1b\x38\xf8\xb5\xdf\xbc\x0f\x3f\xf1\xf5\xee\xbc\xed\xa9\xec\xd8\x3d\xdb\x68\xe9\x7c\x10\x26\xec\x46\x0a\xf1\x1f\x4e\x6a\x32\x18\x7c\x00\xca\x3c\x92\xf4\x6b\x1e\x9e\xc7\x70\x46\x34\x44\xee\x83\x01\x84\xa5\xa8\x80\xfb\x31\x01\x2f\xdd\xe2\x55\x11\xb8\x42\xb2\x4d\x69\x4c\x2f\xd3\x52\x4c\x5e\xc2\x70\x7e\x1c\xc3\x53\x94\xf8\xde\xbd\x98\x2e\x90\x01\xdc\xbf\xb8\xdc\xdb\xaa\x7f\x4b\x5b\xd5\x7e\x5b\x6b\xbc\x66\x6e\x87\xf3\x71\x9a\xa7\x7d\x5e\xc6\x2a\x71\x57\x5f\xe8\x9c\xcd\x16\xa4\xa4\x30\x39\x8f\x02\x27\xc1\x17\xe3\x67\xc1\x58\x94\x2e\x51\x5c\xd7\x94\x98\x44\xdf\xdf\x7e\x7e\xb8\x64\x76\xa7\xe6\xca\x97\x1d\x26\xab\x62\x3b\x66\xaa\x7c\x39\x65\xaa\x8c\xc2\xe8\x12\xc4\xf5\xcd\x94\xf1\xe4\xfd\xed\x27\x8a\x43\x64\x77\x69\x9e\xdc\x3b\x3b\xef\x95\xa9\x50\x31\x1d\x60\xdc\x77\xc7\xfc\x0d\x0d\xf9\xbd\xd4\xa8\xdd\x04\x35\x6a\x24\x46\x97\x24\xae\x6d\x2e\xdc\x2b\x51\x07\x13\xd9\x5d\x99\x23\xfb\xa8\x4f\xbb\x09\xea\xd3\x38\x84\x2e\x39\x5c\xdb\x0c\xb9\x57\x9e\xf6\x93\xd8\x9d\x9b\x20\x1f\xdd\xc9\xd8\x7d\xd8\xa1\x2d\xec\x70\xff\x81\x70\x7f\xb2\xd6\x69\xe3\xee\xea\x0f\x75\xb2\x36\xa1\x4b\x6d\x67\x6a\xc6\x79\xd0\xad\x3b\x53\x1b\x3e\xaf\x9a\xb4\x3f\xfe\xfd\xce\xd8\x5c\x62\x18\x1a\x4a\x43\xa7\x2d\x81\xe1\x86\xf7\x67\x2e\xf7\x67\x2e\x01\x0c\x86\x69\x7b\x87\x8b\x89\xf2\x41\xfb\x78\xcf\x5f\x0e\x11\x4a\x73\x7f\x0a\xa3\xe8\xbb\x0b\xa7\x30\xb7\x63\xc6\x7c\x71\xc7\xa7\xcc\xfd\x61\x4c\x74\x47\x0e\x63\x6e\xc7\x7c\xf9\xf2\x6e\xcf\x97\xfb\x43\x99\x7b\x6d\x6b\x8a\xc8\xee\xe0\x4c\xb8\x3f\xab\x11\xe4\xdd\x81\xb3\x9a\xdb\x30\x5d\x0c\xf9\xdd\xc1\x09\x73\x7f\x70\x73\x37\x0e\x6e\x6e\xc7\x6c\xb9\xe3\x8a\xd6\x47\x77\x8a\x73\xa7\x8e\x68\x0e\xd8\x91\xf7\xa7\x30\x9d\x36\xee\xde\xfc\x90\xa7\x30\x07\xbb\xdf\x74\xf7\xcf\x62\xfe\xa6\x67\x2f\xc6\x59\xcb\xde\xf7\x9b\xc2\xef\x31\x79\xb7\x58\x67\x02\xcb\x90\x36\x53\xf6\xf4\xd1\xe9\x2c\x83\x64\x15\x90\x3d\xf5\x5e\x60\xfa\xd7\x80\xd4\xa9\xf7\x02\xd3\xbf\x7a\x2f\xda\x05\xdf\xa9\xf3\xab\xbb\x8e\x6c\x9f\x01\x4d\x26\x69\xd7\x23\x73\x7f\x06\x89\x69\x38\xbd\xec\xbd\xac\xd4\xcf\x50\x6e\xd9\x7b\x49\xe1\x47\x4f\xf0\x01\xbe\x15\x66\xbe\x6a\xd0\x7b\x62\x6a\x28\x24\xe0\x50\x1b\xad\xe5\xe5\xb2\x4e\x45\xa3\x0b\x2c\xd5\xaf\x6f\x32\xb9\x68\xb3\x8f\x8e\x61\xd2\x0e\x36\x76\x0f\x4d\x58\x59\xd4\x2c\x1e\xf9\xda\x84\xc4\x25\xb4\xb3\x21\x82\x1c\xf7\xca\x9d\x8d\xcd\x37\x0f\x08\x5b\x51\xe7\x53\x15\x37\x4b\x9f\x6f\xaa\xa9\x27\xef\xf6\x9e\x6d\x5b\x56\xfc\xae\x5e\x1d\xb1\x0b\xc1\x07\xb3\x1d\x0d\xd6\x27\x28\x00\x78\x07\x40\xa7\xc1\x91\xef\x75\xbf\x7e\x5b\xf7\xca\xe5\x01\x35\x6a\x38\x0e\x71\xea\x78\x1c\x85\xc5\x7d\x1e\x45\xff\x7a\xd8\x33\x5b\x39\xde\x9d\x09\x00\xe2\xab\x35\x6a\xb4\x4f\x63\x5f\xc1\xd4\x73\x0f\x0c\x12\x6e\x34\x32\xb3\x2e\x04\xb7\x0f\xe4\xbd\xf7\xac\x2c\xbc\x67\x23\x92\xe2\x19\x2f\xcb\xe2\x93\x66\x7f\xb9\xe7\x1d\x56\xf8\x0e\x5e\x72\xff\x6b\xd8\x9d\xc0\xe7\x5b\x1d\x83\xc7\x40\x46\xd5\xfd\x51\x93\xbc\x4a\xe1\x85\x9b\x0b\x2a\x9e\xe1\xf1\xfa\x0f\x44\x2b\xf5\x1c\x2a\x61\x96\x77\xda\x1e\x7a\xb0\xe6\x51\xa1\xbc\x2c\x83\xa8\x64\x4d\xc0\xf5\x93\xf8\x68\x45\x36\x89\x47\xf1\x2c\x1c\x89\x92\xb4\x8c\x19\xad\x28\x18\x3b\xdb\xba\xe2\xfb\x7c\xbe\xf2\x53\x25\x60\xfd\x49\x81\xac\xff\x96\x9f\xf7\x13\x82\x7c\xa2\x0e\x5e\x7e\x27\x15\x5d\x15\x2c\xe5\x7f\x15\x2f\xb5\xfb\x1f\xfb\x94\xd5\x77\x5f\x7e\x31\x24\xa3\xb1\xb4\x5c\xd2\xbc\xda\x59\xc8\x09\xa1\xe6\xab\x5b\x46\xcd\xe2\x76\x91\x13\x4f\x27\x47\x0d\xe7\x34\xa1\x30\x9c\x77\x01\x73\x48\x55\x05\xa4\x3f\xc8\xcf\x63\xb1\x3a\x67\x4f\x1e\x65\xc5\x8a\x30\xfe\x79\x93\xc6\x11\xbe\xfc\x05\xcf\x03\xf9\xd7\x8f\x62\x85\x8b\x47\xb1\x3a\x20\x19\xb0\x22\xe6\xc0\x1c\xef\x8b\x30\x32\xb6\xc5\x25\x90\xf1\xba\xb8\x3c\x00\x19\x1b\xb2\xdd\xe2\x33\x81\x85\x2c\xcd\x06\x5e\xe9\x55\xb5\xda\x35\x24\x1b\xbb\x86\x78\xd6\xb4\x92\x17\x31\x1a\xb1\xa2\xa8\x02\xa5\x51\xfe\xc1\x2a\x7c\x3d\x9c\xff\x1e\x4b\x47\xb5\x66\xb4\x5c\x17\x59\xb2\xef\xc2\xda\x00\x02\x4a\xce\xd5\x17\x83\x1c\x9f\xfa\x89\xb1\xe3\x69\x8c\x2d\xbe\x99\x7f\x6b\x6a\xa1\xed\x6b\x55\x36\x25\x3a\x29\x36\x24\xb5\xab\x9b\xe6\x9b\x65\x73\xcb\xde\x7f\x64\x7d\xf2\xac\xe7\xad\xe5\x32\xb8\x5e\x14\x29\xbe\x7b\xff\x0c\x1f\x8a\x3c\x9b\xed\x34\x76\xcd\x86\x71\xb1\xc5\x55\x61\x1e\x26\x5c\xa1\x84\xe0\x0b\x94\x49\x69\x88\x1a\xfe\xe7\xe2\x0e\xe9\x9c\xff\xd6\x46\x6d\xd3\x51\x76\xa8\x66\x07\xda\x4f\xbd\xc0\x99\x8f\x72\x15\xe7\xa7\x9c\x2d\xc6\x47\x0e\x5f\x0e\x12\x39\x23\xd5\xd1\x88\xe8\x60\xdb\x29\xab\x09\x56\xba\xf9\x05\xbc\xa7\xa2\xd9\xcf\xbd\xbb\x75\xe6\x35\x03\xf3\x4d\x35\x9b\x75\xeb\x66\x41\xa7\xce\xcd\x83\xc6\xe8\x08\x16\xde\x60\xab\x41\x0e\xc4\xd0\x99\xc8\x87\x3a\x81\xc1\x35\xe0\x1f\x65\x67\xd6\x1f\x47\xf0\x9c\x29\xcd\xc9\x22\x83\x55\xa9\x46\xb6\x46\xd0\x0f\xe7\x2c\xc1\xab\x08\xd6\x78\x03\x48\x4e\xcd\x69\x85\x2f\x86\x0f\x31\xb2\xea\x9e\xa4\x1a\xfc\xb4\x67\x82\x03\xb1\x23\x03\x67\xe3\xf2\xa9\x63\xed\x81\xcc\x1f\xda\x06\x96\xb9\xcf\xa7\x10\xc7\xb8\xf3\x34\xea\x2f\x1a\x83\x67\x8b\xb2\x47\x38\xb7\x7c\xb1\xc6\x8f\x71\x46\x36\xb8\x93\x15\xe2\xd9\x59\x8f\xd4\xed\x1d\x86\x00\xa2\x67\x26\x60\xaf\x66\x04\x4d\x5c\x32\x72\xa6\x7d\x9f\xc9\x66\x6d\x32\x74\x93\xfb\x21\xe6\x71\xcd\x69\xfb\x58\xcd\x40\x3e\xdb\xe0\x71\x42\x31\x4e\xe5\xe0\x37\x37\x73\x07\xef\xf0\x9c\x61\x9b\xb8\x5c\x34\x45\x49\xc2\x53\xa0\x00\x98\x5e\xf1\x6e\xcc\x76\xd1\x32\xd5\x27\xbd\x4f\x38\xf6\x77\x12\x83\x06\x31\xa3\x5b\xbe\x88\x88\xb7\x4b\x2f\xe4\xa2\x51\x46\x4b\x56\x6c\x64\x28\x04\xf4\xac\xa0\x60\x04\x7b\x8f\xb7\xac\xb8\x4a\x37\x10\xfd\x60\x47\xc0\xd9\x64\x98\x32\xde\xbf\xd7\x83\x48\x7a\xaf\x79\x5a\x76\x29\x3b\x6f\x24\x6a\x9e\xa1\xc4\xe7\x77\xf9\x30\xdb\x66\x64\x87\xab\x25\x87\x2c\x69\xb9\x0e\xae\x86\x98\x92\xaf\x64\x76\x38\x3b\x96\xd4\x9e\xe9\xef\x11\xe7\x1d\xdf\x82\xe9\x04\xf3\xed\xa4\xbd\x2d\xd4\xdc\x3f\xfb\x7b\x6c\xef\x2f\x43\xbb\xb5\x66\xdb\x0f\x43\xd7\x2a\x0f\xc1\xed\x98\x20\xf6\x7d\xbf\x53\xe5\x5e\x07\xf8\x88\x74\x80\xfb\x55\xe7\x36\xad\x3a\xfb\x2d\x32\x8d\x25\x38\x3c\xfd\x9b\xaa\x43\x93\x5f\x19\xdb\xc3\x20\x55\xcd\xc1\x65\x4a\x7a\x11\x02\xd6\x28\x59\x73\x08\xa2\xee\x98\xb1\xaf\x4f\x7a\x0d\x73\x79\xc2\xb9\xf9\x1a\xb3\x2c\x88\x08\x3f\xde\x91\xcd\xd5\x63\xf9\xd0\xb6\xbe\x91\xbb\xdd\x40\x08\xe9\x3b\xae\x37\x07\x00\x92\x8f\x55\xbf\x1e\x0d\x1f\xd5\xe4\xeb\x46\x02\xf0\x5d\xa7\x7d\x58\x41\x18\xab\x16\xf3\x76\x78\x13\xfc\xd3\xbe\x01\xea\x9b\xde\x9f\x61\x1b\x5e\xd7\xdf\x60\x07\xd8\xad\x33\x04\xb1\xe3\xd7\xf1\x51\x98\x51\xeb\x58\x6a\x3c\x49\x23\x25\x73\x9e\x6e\x7c\x38\x9b\x62\x97\x7f\xe4\xa9\x30\x26\x6c\xdd\xe5\xd8\x1d\x9e\xf6\x6c\x96\x01\x23\xac\xa1\xc1\x04\xff\x81\x6d\xa6\xe7\xa2\x06\xb8\x9b\xec\x14\x99\x6f\xd7\x82\xcd\xd1\xb7\x3c\x1c\x8d\x71\xb7\xb1\x32\x12\xb0\x03\x61\x3d\xe9\x2f\x02\xfa\x39\x8a\x93\x37\xc2\x98\x0e\x68\x6d\x79\x43\x7f\xda\x16\x01\x3f\x76\x1b\xc4\xc2\xb4\x79\xa0\xf5\x1d\x5d\x93\x8b\xb4\xa8\x19\xfe\xa1\x7b\xa6\x25\xcb\x98\xef\x58\xcb\x52\x07\x21\xbb\x4f\x7c\x4a\xbe\x47\x43\x44\x66\xc2\xc8\x2a\x5a\x74\xd0\x37\xb5\x8d\x70\x58\x5e\x13\x07\x16\xff\x1d\x7c\xb0\xa4\xd0\xfc\x59\x70\xb5\x26\x08\x0d\xd4\x04\x34\xff\xe4\xbf\xc3\xa6\x31\xd4\x1c\x64\xfc\xf1\x76\x9b\xa5\x54\x3c\xce\xa5\x13\xc3\x40\x75\x40\xd3\x76\x4b\xe3\x74\x99\xd2\x24\x2a\x69\x26\x4e\xd4\x8f\x0d\x18\x8c\xae\xd2\x92\x63\x45\x35\x06\x23\x5a\x21\x9a\x95\xb0\x5d\x44\xb9\xba\x59\x45\x19\x94\xf2\x05\x04\xd5\x91\xb2\xde\x02\x9d\x06\x88\x2d\xc9\x73\x68\x0e\x6e\x1e\x20\xa3\xef\xde\x31\xf4\xe4\x86\x98\xd3\xe8\xdf\x73\xf5\xf9\x1b\x3e\x90\xbf\xe5\x32\xba\x28\xd2\xc4\x78\x85\xc9\xf6\x2c\x99\xa0\xba\xc4\x53\x11\x41\xa1\xd0\x97\x62\x0a\x1a\x14\xd2\x1e\xa4\x8b\x55\xbb\x2d\x8d\x9e\xc1\xe9\x41\x94\x93\x8d\xb8\xd6\x51\x55\x24\x5e\xcb\xb7\x1a\x1a\xd8\xf6\xe6\x4d\x85\xe7\x4d\xc8\x71\x0b\xa0\x10\x74\xf8\x64\x01\x32\x98\x01\x0d\xca\x38\x3c\x6e\x40\x06\xa5\x65\x81\xdf\x62\x54\x0d\x5b\x19\x65\xe7\x8e\x40\xcd\x0d\x0c\xce\x34\x8e\x1b\x74\x81\xf8\xc8\xc4\x0a\x13\xee\x06\x48\x24\x03\xc8\x2c\x08\xe1\x67\x8f\xcb\x01\x23\xf0\x5a\xc0\xc8\xbe\x2d\x58\xba\xe2\x06\xd9\x3f\xc7\x11\x2d\x45\xd5\xac\x94\xdd\x39\x0f\x3f\xef\xf7\xeb\x2c\x3c\xd3\x91\xd7\x12\x2e\x28\x6c\x61\x5e\xfb\x40\xd6\xde\xa3\xf7\x42\xb0\xba\xa4\x71\x74\xea\x89\xc5\x09\xeb\xc4\x60\xf4\xee\x9e\x6c\x84\x10\x81\x26\x30\x9e\x0b\x4d\x88\x5a\x74\xcf\x21\x7a\x96\x64\x59\x71\x49\xd5\xe1\x19\xee\xf8\x83\xf3\x50\x68\xcc\xd3\xfb\x53\xe1\x44\xc1\xf6\x51\xba\x84\xb0\x47\x57\x22\x46\x74\x0a\xfb\x70\xba\xfb\x0f\x55\x59\x6e\x31\x4f\x23\x9c\x4a\x79\x1d\xb8\xeb\x7e\x79\x20\xf4\x6c\xbc\x63\xc2\x0d\x83\x3a\x4b\xf8\x06\x1c\x91\xe4\xf7\x9a\x2f\xe0\x09\xdc\x36\xc9\xd5\x7e\xe8\xeb\xd3\x09\xb9\xa1\x24\xea\xd0\x6e\xe3\x1a\x24\xd6\x3f\xb1\xa8\xa9\x6e\x64\x73\x93\xcf\x42\x67\x6f\x4c\xf7\x5d\xe1\x19\xce\x2f\x51\x38\xd1\x57\x26\xd1\x4d\x9f\xed\xd9\x69\xbf\x1e\xa8\xd3\x26\xa4\x98\xf8\xf5\x43\x76\xda\xaf\x7b\x77\xda\x0e\x3b\xed\xd7\x11\x9d\xb6\x73\x76\x9a\x5e\x2d\x34\x98\x14\x74\xf8\x21\x05\xf8\xd9\x15\x8d\x6b\xbe\xaa\xa3\xc2\xbf\xa1\xd5\xba\x48\xbc\x8a\xa7\x3a\xf9\xbf\xd7\x2e\xc3\xb5\x4b\x61\x1a\x4d\x54\x58\xa4\x0a\xe5\xbf\x22\xd7\x8b\xfb\x83\x36\xd3\xb7\xb7\x20\x9c\x16\xbc\xf0\xe3\x0c\xb0\xf6\xcf\xb6\x70\x94\x83\xda\xe6\xe3\x49\x64\x8b\xc6\x67\x4d\xf0\x69\xcf\x9c\xf5\x04\x9e\xbe\xa0\xc5\x8a\x91\xed\x7a\x87\x7f\xe8\xda\xe9\xbc\xcc\x67\xa2\x77\x8b\x6d\x72\xfa\x3c\x8a\x19\x15\x09\x1d\xc1\x64\x5e\x49\x5c\x69\x2c\x5e\x93\x5e\x89\x7c\x8f\x7e\x15\x16\x6a\x62\xb4\x16\xff\x3d\x64\xa4\x37\xd8\xe2\x94\xc5\x9c\x81\x06\x81\x3f\x92\x12\x2b\x03\x8e\x27\xf8\x69\x10\x4b\xb1\xd9\xc2\xba\x23\x6c\xec\x35\x15\x61\x80\x78\xa9\xb4\x58\x36\x47\x35\x4b\x4e\x4a\xcd\xfc\xf1\x0a\xd0\x66\x26\x2b\xaa\xde\x0b\x3b\x6e\xd1\x69\x00\x8d\xb6\xaa\x13\xfa\x20\x2b\xf2\x15\x7e\x8a\x16\x32\xd0\x82\x7f\xb8\xc2\xe3\x8a\x31\x54\x61\xe3\xd2\x4e\x17\xe4\x0d\x9e\x26\x9f\x98\xc2\x3d\xdc\x34\x19\x2b\x23\xd5\xce\x45\xcf\x18\x6a\x56\x30\x3e\x1e\x10\x16\xc3\xf1\x4d\x45\x72\x3e\x88\x17\xb4\xba\xa4\x9c\x94\xea\xb2\x10\x17\xa8\xfd\xc1\x7b\xaa\xdd\x8c\xb4\x14\x1c\x47\x8b\x8e\x7a\x19\xd6\x83\x7a\x2e\x81\x3e\x11\x5c\x69\x2e\xc0\xa9\x22\x48\xe6\x03\x25\x0e\x8d\x38\xf1\x51\x36\xab\x02\xee\x49\x0c\x0c\x36\x9a\xaf\xf8\xd4\xc5\x4e\xc4\x9b\xf2\x32\xc5\x74\x21\xae\xa7\xc3\x5c\xaa\x37\x4b\xca\xd7\x62\x2e\x5c\xac\xc5\xc9\xda\xad\x06\xf2\x0f\x08\xa8\x13\xa7\x82\x9a\xf4\xd0\x33\x09\x61\x89\x76\x83\x44\x1c\x3e\x12\x6e\x2e\x5c\x6a\x7f\xf5\x07\x87\x36\xd5\x66\xbc\xd5\x69\xf4\x86\x5c\xbe\x6e\xfe\x04\xeb\x50\xf3\xe5\x10\x84\x6d\xea\x4a\x44\x46\x4d\x21\xf0\x15\x6f\xcc\x17\x37\xa0\xf3\xb9\xf2\x77\xbb\xc9\x95\xb5\x87\xa8\x86\x5e\x7c\x9c\x41\xe0\x4b\x44\xff\xa8\x49\xf6\x40\xa4\xda\x2d\x72\x58\xb5\xc3\x28\x24\xd8\x7c\x36\x4a\x58\x04\x47\x59\x51\xa6\x55\x83\x5e\x97\x96\x1c\x5e\x6f\xf3\x14\xf4\xf4\x39\xe7\x64\x20\xca\x56\xd0\xf0\xb6\x24\xe3\xc8\x40\x7b\xf5\xcf\x94\x77\xcb\x9a\xaf\x59\x9a\x00\x42\x59\x57\x6d\x9f\x41\x53\xb8\xbd\xe8\x3a\xcd\x70\xd1\x04\x3f\xfd\x81\x37\x2e\xbe\xa9\xc7\x45\x2a\xd6\xad\x6a\x0a\x1b\xaa\xed\x4d\x31\x22\x86\x1e\xff\x1f\x0f\xe0\xb3\x50\x16\xb0\xd9\x13\xd5\x6a\x22\xf1\x33\xae\xac\x7c\xd9\x9e\x82\xf2\x6f\x5f\x69\xce\xbd\x83\x30\x36\xa1\x77\xb0\xe1\xfe\x3d\xf3\x61\x98\x53\x13\x68\x46\x4e\xde\x9d\x90\x13\x39\xb9\x8f\xc6\xf2\xba\xd7\x64\xba\x56\x4e\xa1\x03\xb9\x6d\xc8\x3b\x62\x55\x67\x84\x45\xb3\x2d\xee\xe9\x31\xe1\x06\xc9\xff\xfd\x3f\xc1\x8c\x1a\x60\x6e\x6a\xb6\xad\xf2\x62\x33\x66\xad\x57\xf5\x6f\x8a\xde\x56\xc1\x7c\x45\x59\x0c\x1b\x5c\x28\xe5\x1b\x59\xff\xe6\x17\x68\x6e\x56\xad\x5b\xcb\x28\x8c\x7a\xbd\xcd\xcd\x73\x00\xfe\x12\x3a\x96\x85\x4e\xa3\x9b\xe2\x01\x9d\xfb\x17\x7c\x45\xa2\xa3\x07\x50\xdb\xf4\xd5\x0d\x0e\x25\xbe\x40\x42\x60\x06\x57\xa0\xb8\x3d\xfe\x9f\xf3\x9f\x7e\x8c\x8a\x05\x00\x92\x61\x83\xb4\xd8\xd0\x8a\xed\x40\x4d\xa7\x64\xe0\x22\x10\x56\x99\x89\xe6\xa7\x0a\x9c\xee\x34\x9a\x63\x8d\xe6\x98\xd6\x4b\x98\x77\xd1\xe0\x46\x79\x1a\xd7\xc2\xe8\x7e\xa1\xbe\xec\x05\x90\xab\xda\x8f\x59\x2c\xe0\x89\xcf\x7b\x80\x63\x45\x45\x84\x05\x20\x3f\x74\xac\xa8\x37\xf2\x8f\x61\xae\x4c\xf0\x5b\x0c\xba\x49\xde\x60\xa4\x9f\x38\xcb\x47\xd7\x08\x78\xe7\x94\x69\xa5\x94\xdf\x8e\xcd\xec\x23\xbf\x63\x47\xb5\xee\x3d\x61\x54\x85\xbd\x79\x61\xdc\x84\x58\x8d\x9e\xdc\xfe\x5b\xfc\x76\x87\xda\x2a\x1c\x9b\x05\x23\x72\x3e\x30\xd9\xec\x78\x47\x70\xe9\xc2\xab\xb3\xdb\xb5\xbf\x7a\x6e\xab\xa1\x09\x6d\x88\x9e\x5b\xd2\x09\x65\x98\xc6\x8c\x5e\xf9\xd3\xbb\xc9\x3a\xe1\x02\x17\x01\xa6\x70\x89\x72\xfe\xf3\x0b\x31\xf0\xe4\x98\x4b\xf3\x8b\xe2\x1d\xb7\xb4\x30\x8b\x1a\xf5\xb9\x6b\x5c\x12\x71\x0c\x35\x37\x31\x25\x78\x91\xfb\x1c\x63\x60\x09\x33\xe7\x87\xdd\x75\xe8\xa2\xa5\x11\xcc\x13\xf1\x61\x52\xbf\x3c\x11\x5e\x10\x49\x84\xe8\x63\x48\xc0\xc7\x97\x1b\xaf\x29\x65\xf1\xf1\xf5\x9c\xcc\xc1\xd8\x94\x37\xcc\x3b\x0c\x1c\x1e\xb3\xe9\x58\x75\x77\xa2\x0f\xb3\xdd\x73\x18\x80\xd7\x1c\xf3\x98\x10\x07\x76\x30\x19\x66\x2d\xbc\x62\x6a\x00\xfa\x2d\x7f\xac\xea\xce\x5c\xe6\x9b\x09\x65\xe7\x28\x41\x50\x11\x3a\xd8\xc7\xc5\xaa\xb4\x83\x5d\xb0\x5a\x97\x5c\xcc\x1a\xbf\x18\x47\x8c\x43\xff\x55\x9d\x55\xe9\xeb\x0e\xfb\xfd\x00\x2f\x81\x3c\x88\xd4\x5e\x56\xa2\xfe\x4c\xb8\xcd\x64\xdb\xf6\x36\x7b\xea\x28\xdf\x0c\xf7\xe6\x8c\x92\xeb\x4e\x77\xe8\x2c\xe8\x2a\xcd\x5f\xcb\xb3\x88\xde\x88\xde\x14\x17\xf4\xbc\x98\x5d\xb5\x36\xe6\xae\x1b\xa4\xd9\xad\x0e\x8e\xd3\x11\xd5\x09\x57\x6c\x6c\x75\x8f\xa3\x6e\x67\x1e\x77\x12\x42\xa9\xbf\xb5\x99\x98\xdc\x18\xe2\xac\x28\xa9\x95\x3b\xaf\xa4\xc4\x29\x8b\x11\x4a\x7c\x72\x72\x42\xd8\x4a\xbb\xcf\x2c\x15\xc9\x47\x86\xfd\xe2\x3a\xe7\xf3\x87\x9a\xcc\x54\x43\x4d\x21\xb3\x1d\xdb\x74\xea\x9a\x34\x19\x89\x7a\x6c\xed\xbb\xbb\xc1\x61\x92\xfb\x0d\xe3\xd9\x32\x3e\x35\x5c\x99\x78\xbd\xb8\xb4\x96\x81\xf8\xbc\x17\xb6\x95\x4e\x6e\x76\xae\xab\x3b\x61\x44\x97\x5a\xa9\xd9\x75\x45\x5d\x41\x15\x67\x7b\xea\x8c\x6a\x9a\x79\xce\x9e\xb0\xdc\x0c\xf0\x11\x63\xce\x6e\x54\x74\xa5\xbd\x49\xf3\x82\xb9\xe3\xa9\xae\x13\x33\xf9\xfd\x86\x30\x73\x53\xce\x79\xe1\xf6\x3a\xc5\x3c\xbf\x01\xbc\x20\xe4\x1b\xc0\x7b\xd8\x49\x3c\x88\xd2\x3f\x8f\x85\x2d\x1c\x3a\x8d\x9b\xe3\x4d\x07\x95\x53\x92\xe7\xa9\x36\x42\x19\xb4\x5b\xe7\x5d\x01\x4e\x49\x81\xd7\xcd\xbf\x15\x82\xe5\xd0\xdd\xe4\xc7\xe8\x4f\x8f\x21\x1c\x37\x7f\x19\xd6\x9c\x7a\x6d\xa0\x74\x0f\x55\x3d\xbc\x27\x6c\xd3\xee\xb8\x9a\xcc\x71\x91\x91\xcd\x22\x21\x1d\x4f\x79\xef\x26\xa8\x49\x82\xb8\x18\x74\xe6\xd2\x66\xfa\x8d\xbc\xde\x12\x27\x69\x56\x71\x0c\x12\x85\xc6\x40\x40\x7d\x74\xf4\x0c\xec\xf0\xf6\x6b\x3a\x36\x0f\x91\xd3\x97\xf7\xa8\x67\xa8\x51\xa7\xd3\xd0\x83\x34\x2b\xe2\xc9\x48\x21\xde\x28\xcb\x68\x36\x90\xcf\xf4\xe0\x78\xbd\xa1\xe8\x03\x78\xfb\xbd\x18\x88\xd4\x79\x73\xc1\x3b\xbf\xcd\x20\xfe\xd0\xee\xcc\xd2\xed\x61\x72\x9e\x8e\x40\x78\x68\x25\x22\x74\x14\x1d\x74\xf1\x0c\xed\x4d\xe1\xa0\x56\xfe\xe8\x33\xcd\x21\x2d\x3e\x84\xad\x31\xa2\xae\x41\x37\x0e\x31\x87\x95\xf5\xa7\x7e\xf7\xad\xef\xfa\x06\xc5\x76\x0e\x86\xd7\xcc\x59\xfc\x4c\x5c\x83\xed\x17\xca\xe0\x18\x4f\x73\x59\xc3\x09\x01\x0f\xc0\x68\xbf\xcc\xbb\x07\xc8\x45\xab\xb9\x25\xfa\x98\x31\xb2\xc3\x3b\x58\xbd\x1d\xc1\x36\xe5\xfb\x1e\x70\xf8\x91\x37\x44\x03\x5b\x84\xed\x02\x32\x68\x65\xdc\x3e\x65\x1b\x4e\x96\xb8\x47\x3c\x18\xf9\x44\x23\xa0\x0d\x7b\xdc\x0c\xc4\x3d\x9a\xa3\xe7\xa2\x60\x45\x5e\xa4\xdf\x9c\x7f\x0b\x1d\xf1\x73\xf3\x6d\xc8\xef\xa5\x47\x56\xc9\x56\x5c\x07\x23\x2b\x08\x09\x55\x6e\xff\xd6\x5d\x12\x10\x9f\x26\x09\x99\x41\x4f\xa4\x31\x6c\x95\x3f\x8b\x4f\x62\x72\x8b\xb1\x34\x2e\xe2\xeb\x29\xcd\x48\x9d\x93\x1d\x5f\xc1\x53\x71\x38\xdd\x09\xc9\x19\x45\x5e\x22\x61\x35\xf4\x9d\x4d\x26\x50\xbb\x8e\xf9\x47\x4d\x12\x3e\xa7\xa9\x88\x74\x84\xc7\xc1\xf9\x68\x86\xe0\xb3\x00\x8a\x54\x5b\x99\x8d\x0f\x3f\xcb\x60\xaa\x61\x67\xa9\x71\x25\xb4\x43\x47\x57\x36\x93\x48\x12\x75\x4f\x85\x57\x0d\xa2\xf9\xae\xb4\x20\x86\x9d\xf6\xf9\xea\x2b\xed\xef\x7a\x68\x83\xe2\xe8\xf6\xb1\x72\x99\x26\xd5\xba\xa5\x7a\x4d\xd3\xd5\xba\x9a\x40\xb9\x7e\x72\x26\x12\x8c\x34\xf4\xa9\x31\x26\xb3\x12\x26\x49\x2a\xb3\x33\x89\xbb\x02\xa5\x8c\xa5\xa7\x5e\x67\xba\x5c\x7e\xfd\x13\x6a\x70\xb4\x62\x24\xa0\x92\xed\xba\xce\xb2\x28\x23\xbb\x82\x13\x2b\x92\x8a\x42\xfe\x17\xba\x24\x75\x56\x81\x87\xb5\xe2\xba\xbc\x5f\xac\x00\x01\x06\xec\xf7\xfc\xb7\x11\x9d\x8f\x45\x76\x62\x9b\xcf\x61\x8b\xb0\xac\x6e\xec\x11\xa2\x83\x86\x53\xf3\xe8\xfd\x82\xea\x8d\x4a\x2b\x26\x69\xf3\xb1\x87\xf5\xcf\xfa\x3a\x84\x3f\xbf\x08\xf6\x84\x41\xad\xe4\x61\x1c\xb9\x65\xba\xca\xe5\xc1\x8e\x20\x3a\x2d\xd5\x30\xf0\x52\x0d\x07\x3d\xc1\x51\xab\x0a\x21\x81\xa0\xdf\x07\x34\xa3\x1b\xbc\x9c\x87\x63\xb7\x49\x08\xa3\xae\x65\xeb\xb1\xd3\x3a\x39\x61\x81\xd3\x23\x82\xa5\x9f\x70\x8d\x52\x0a\xa1\x16\x51\x04\x12\x53\x44\x56\x24\x85\x97\xeb\x42\xa5\x01\xba\xe9\x4c\x02\x69\xe6\x89\x6d\xc6\x0c\xa4\xd1\xd0\x17\xe4\xf1\xb9\x00\x0e\xb4\x8c\xcd\x6e\xc1\x52\x7a\x07\x76\x83\x7d\x76\x81\x0e\x20\xeb\xa5\x49\x91\x30\x7e\xe0\x09\x31\xf1\x64\xa4\x78\x31\xd2\xcc\x0e\xdf\xdb\xfe\xbb\xb6\x48\xe7\x9b\xf5\x06\xe0\x07\xa5\xa0\x94\x69\xc8\xed\x53\x1b\x4b\xe1\xbf\x8e\x16\xee\x55\x70\x68\x93\x8a\xc7\x65\x35\xca\x1a\xaa\x17\x3b\x76\xa3\x13\x74\xc8\xfc\x1e\xce\x75\x91\x24\x6a\x2c\x8a\x93\x60\x79\x94\xa8\x06\xa6\x3f\x98\x39\x49\x94\x07\x01\x07\x9e\xd5\x8c\xba\xe0\x36\x69\x35\xe3\x86\x7f\xb6\x20\xf1\x3b\xe5\x47\x0c\x37\xa9\xc4\x51\xe7\x5f\xe6\x30\xb5\x6d\x06\xbb\x71\x3b\x5b\x6b\x4d\x04\xac\x7f\x63\xcc\x09\x88\x31\xf2\xcf\x57\x71\x47\xf0\x7c\x9c\x6a\xfe\xa4\x73\xe1\x86\x6c\xd7\x60\x01\xbf\x2b\x1b\x02\x0e\x40\x18\x02\xec\x50\xf7\x12\xd5\xa9\x93\x17\x80\xef\x25\x2f\x1d\x47\xa6\xb0\x6c\x32\x7a\x50\x22\x1b\xa0\x1d\x42\x5d\x73\x6b\xc2\x3d\xf0\xab\x43\xbc\x5a\x7f\xee\x7d\x61\x38\x90\xa2\xf9\x48\x8a\x2c\x20\xae\xf9\x5d\xe1\x73\x6f\xa8\x80\x6e\xb0\xef\xc3\xf2\x1e\xaf\x02\xab\x87\x80\xf7\x7a\x19\x58\xb6\x39\xb5\x73\xa6\xd7\x0d\xd8\xcd\x06\xde\xba\xbe\x75\x83\x2f\x94\xa2\x3b\x34\xf8\x76\x77\x61\xf0\xf9\xbd\xd8\x03\xb7\xbe\x79\x5b\xa9\x96\x8c\x7c\x71\xd8\xee\x13\x1f\xc8\x49\xe3\xc5\xe6\x96\xaf\x4c\x60\xd2\x48\x77\x2c\xd1\x56\x47\x7d\x98\x70\x85\x0a\x38\x56\xac\xd0\x6a\xb4\x3c\xc7\x4a\x13\x90\x1c\xe3\xb5\x17\x3e\xca\x68\x2e\x03\xd6\x35\xe1\x88\x68\x26\x8c\x80\x86\xcb\x92\xb3\x2f\x8e\xbf\x38\x1a\x25\x77\xc0\xd0\x48\x3d\x9c\xa7\x9e\xda\x3c\x2c\x6a\x9f\xfe\x06\x4e\x9a\x5e\xba\xc5\x50\x07\x0d\xfc\x5c\x8f\xb5\xd3\x6b\xf0\x21\x0c\x1c\x0f\x52\xe5\xa0\xe7\xa2\x4c\x68\x9c\xc1\x23\x26\x17\x84\x45\xc9\xd7\x98\x57\x04\x1e\xb8\x7a\xd4\x96\x48\x4f\xfd\xa7\xc9\xd7\x9f\x4a\x32\xa5\xd8\xff\x83\x37\x78\xc4\x61\xfc\xbf\x00\x00\x00\xff\xff\x4e\xc4\xb8\x78\x7a\xc5\x01\x00") + +func uiTsTypingsD3D3DTsBytes() ([]byte, error) { + return bindataRead( + _uiTsTypingsD3D3DTs, + "ui/ts/typings/d3/d3.d.ts", + ) +} + +func uiTsTypingsD3D3DTs() (*asset, error) { + bytes, err := uiTsTypingsD3D3DTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/typings/d3/d3.d.ts", size: 116090, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsTypingsJqueryJqueryDTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xec\xbd\x6b\x73\xdc\xc6\xb1\x30\xfc\x5d\xbf\x02\xc5\x4a\x95\x96\x7e\x96\x54\x7c\xce\x79\xea\xe4\x50\x8e\xf5\xd0\x14\x6d\x33\x91\x44\x1d\x91\x8a\x9d\x72\xb9\xde\x02\x17\xb3\x24\x2c\x2c\xb0\x01\xb0\xa4\x18\xdb\xff\xfd\xed\xdb\xdc\x70\x5b\xec\x95\x5c\x59\xf9\x10\x53\x0b\x60\xa6\x6f\xd3\xd3\xdd\xd3\xd3\xfd\xec\x59\x70\x79\x3f\x55\x41\xa4\xc6\x71\x1a\x97\x71\x96\x16\xc1\x38\xcb\x83\x5f\xfe\x77\xa6\xf2\xfb\xe0\xcb\xc3\x2f\xff\x7c\xf8\x31\x78\x16\xfc\xc7\x21\xfc\xf7\x09\xbc\xfd\x36\xcf\x7e\x51\xa3\xf2\x28\xb8\x29\xcb\xe9\xd1\xb3\x67\xbf\xfc\x0b\x5f\x3c\x1c\x65\x93\x67\xf8\xf8\xa5\x33\xce\xd5\xfd\x51\xf0\x4d\x96\xc7\x45\xf0\xcf\x30\xfd\x90\xdd\x06\x5f\xe1\x37\x05\x7c\x74\x1d\x97\x37\xb3\x2b\xfa\xe8\x0a\x5f\xb8\xa7\xe7\xcf\xbe\x1e\x06\x27\x37\xf0\xcf\x32\x0e\xd3\xe0\xfb\x6c\x3c\x9e\x28\xf8\x87\xca\x1b\x3f\x1c\xdd\xd8\x17\xe0\xc3\x8b\x52\xdd\xaa\xe0\x5b\x95\x96\x59\xda\xf8\x3e\xbd\x70\xc0\x2f\xc0\xfb\x2f\xe3\x59\x92\xa8\x38\xf8\x2e\x9b\xa8\xa2\xf1\x03\x79\x03\xde\xbd\x0c\x8b\x22\x38\x4b\xe2\x6c\x9a\xcd\x92\xac\xf9\xed\x32\x2c\xb2\x38\xc1\xb7\xff\x06\x7f\xa5\xc1\xc5\x9d\x0a\xf3\x38\xbd\x56\xcd\xd0\xfc\x82\x2f\x15\x07\x69\x76\x1b\x26\x2a\x1c\x23\x02\x0a\x91\x8e\x93\xa4\xf1\xfd\x02\x9e\x16\x1f\x70\xf8\xef\x66\xb3\x02\xa0\xce\x8a\x42\xa5\xcd\xa0\xc0\x1b\xff\x86\x17\xff\xae\x92\xe4\x3e\xb8\x98\x4d\x26\x2a\x4f\xe2\x66\x30\x3e\x14\xfa\x31\x7c\xf0\x4d\x58\x84\x79\x58\x06\xc7\x49\x1c\x5c\xdc\xab\xa8\x99\x5f\xfc\x12\xbc\xfe\x26\x06\x16\x24\x61\x11\xfc\x90\x25\xb7\x2a\x2f\x5a\xe8\x9e\xde\xe9\xc7\x48\x75\x95\xab\x0f\xc1\x49\x3c\x52\x79\x96\xaa\xc6\xf7\x23\x7c\x65\x24\x6f\xc0\x27\xc7\x69\x94\xab\xbb\xe0\xbb\xb0\x98\x86\xcd\x92\xc0\x6f\xf0\x0b\x44\x7f\xe4\xe8\xf7\x61\x0e\x92\x04\x30\x7d\x1b\x17\x37\x2d\x22\xf4\x0b\xbe\x79\x33\xa6\x17\x88\x03\xf1\x07\xc0\x29\x0e\xfe\x9e\xa5\x51\xd6\xc2\x06\x7e\x05\xa9\xa5\x52\xf8\x1e\xe8\xfa\xb7\x70\xf4\x61\x12\x36\x23\x7f\x25\x2f\xfd\xc2\xef\xc0\x67\x6f\x41\x84\x82\x8b\x2c\x07\xe6\xb5\x88\x46\xf1\xe7\xff\xf9\xcf\xff\xf8\x9f\xff\x42\x4c\xb2\xe2\x06\x04\x3b\xcf\xae\x9a\x85\x02\x9f\xf3\x63\x7a\xf9\x26\x0d\xde\xa9\x18\x99\xde\x88\x2c\x3c\x4f\xef\x73\x7a\xe1\x19\x2d\x80\xd1\x87\xe0\x16\xe0\x8e\x00\x8e\x6f\x40\x54\x3f\xb4\xac\x82\xd1\x87\xdb\x88\x9e\x7f\x5d\x59\xe0\xac\x03\x3a\xd6\xb3\xbc\xab\x92\x7b\xd4\x31\xd1\x93\x27\xcf\xbe\x08\xbe\x58\xe7\xff\x9e\x9c\x64\xd3\xfb\x3c\xbe\xbe\x29\x83\xc1\x68\x3f\x78\x1d\x8f\xf2\xac\xc8\xc6\x65\x70\x92\xe5\xd3\x0c\xc4\x14\xc0\x3c\x04\x79\x4e\x02\x7a\xa9\x08\x72\x55\xa8\xfc\x56\x45\x87\x4f\x5e\x81\x84\x01\x0b\xa2\x60\x96\x82\xc4\x05\xe5\x8d\x0a\x8e\xa7\xe1\x08\xfe\x23\x4f\x86\xc1\x3f\x40\x6a\x61\x00\xd4\x7d\xc1\x00\x5f\xd8\x93\x47\x7b\xfb\xcf\x83\xfb\x6c\x16\x4c\xc2\xfb\x20\xcd\xca\x60\x56\xa8\x27\xe5\x0d\xe8\xb9\x71\x9c\xa8\x40\x7d\x1c\xa9\x69\x19\x80\x64\x00\x3d\xa6\x09\xe8\xb2\x91\x0a\xee\x80\x42\x34\x89\x0c\x71\x18\xfc\x53\x06\xc8\xae\xca\x10\xde\x0d\xe1\xed\x29\xfc\x6b\x8c\x6f\x69\xe8\x02\x58\x8d\xa2\x67\xef\xee\xee\x0e\x43\x02\xf0\x30\xcb\xaf\x9f\x25\xfc\x42\xf1\xec\xd5\xd9\xc9\xe9\x9b\x8b\xd3\x03\x00\xf2\xc9\x93\xcb\xef\xcf\x2e\x82\x93\xf3\x97\xa7\x01\xfc\xf7\xed\xbb\xf3\x7f\x9c\xbd\x3c\x7d\x19\x7c\x71\x7c\x01\xff\xfe\x22\xf8\xe6\xf8\xe2\xec\x62\x18\xfc\x70\x76\xf9\xfd\xf9\xfb\xcb\xe0\x87\xe3\x77\xef\x8e\xdf\x5c\x9e\x9d\x5e\x04\xe7\xef\xe0\xab\x37\x2f\xcf\x2e\xcf\xce\xdf\xc0\xbf\xbe\x0d\x8e\xdf\xfc\xf3\xc9\xdf\xcf\xde\xbc\x1c\x06\xa7\xf0\xf6\xe9\xbb\xe0\xf4\xc7\xb7\xef\x4e\x2f\xe8\xcd\xb3\xd7\x6f\x5f\x9d\x9d\xc2\xa3\xb3\x37\x27\xaf\xde\xbf\x3c\x7b\xf3\x9d\x19\xf2\xd5\xd9\xeb\xb3\xcb\x63\x1c\x05\x47\xd0\x6f\x3e\xe9\x9a\xe9\xf2\xec\xf2\xd5\xe9\x30\xf8\xf6\xec\xf2\x0d\x8e\xff\x2d\xbc\x70\x1c\xbc\x3d\x7e\x77\x79\x76\xf2\xfe\xd5\xf1\xbb\xe0\xed\xfb\x77\x6f\xcf\x2f\x4e\x87\x4f\x5e\x9f\xbe\x3b\xf9\x1e\x46\x39\xfe\xe6\xd5\xd9\xe5\x3f\x71\xa0\x37\xe7\x6f\x0e\xce\xde\x7c\xfb\x0e\x20\x38\x7d\x7d\xfa\xe6\xf2\xf0\xc9\x93\x0b\xa5\x5c\x56\xba\x1c\xd4\x24\xc5\xdd\xad\x98\xaa\x51\x3c\x8e\x47\x41\x12\xa6\xd7\xb3\xf0\x5a\x05\xd7\x19\xe8\xa8\x14\xf4\x75\x30\x55\xf9\x24\x2e\xf0\xb3\xe2\x49\x98\x46\x41\x12\x4f\xe2\x32\xe4\x1d\xcd\xca\x8a\x66\xe3\x93\xb5\xca\x73\xf0\xc5\xb3\x27\xb8\x4a\xbe\x78\x12\x7c\x11\x9c\xa5\xb0\xb3\x8d\xc3\x11\x83\x4c\x58\xfd\xed\xf8\xc7\xa0\x50\x65\x89\x70\x96\x37\x20\x1c\x77\xb8\x5f\x8c\xb2\x74\x1c\x5f\xcf\x72\x65\x5f\xca\x15\x6c\xcb\x45\xf9\x04\x07\x8c\xcd\x38\x7f\xa3\x4d\xfd\xf8\x97\xf0\xe3\x05\x0f\x52\x04\xbf\x3e\x09\xe0\x7f\x34\x23\xfe\xef\x8b\xe0\x12\x86\x80\x01\x4b\xd8\x27\x83\x12\x2d\x83\x02\xff\x02\x01\xc5\xb1\x65\xd8\xe0\x46\x85\x4c\x08\x00\x01\x96\x77\x52\xd0\x53\x5a\x5a\x79\x70\x87\xbf\x7e\x88\x81\x74\x20\xcc\xb0\xe0\xa6\x19\x92\x3d\x16\x60\xc3\x91\x5e\x1d\xb9\x2a\x67\x39\x2c\xcf\x33\x12\x79\x79\x50\x18\xfc\x52\xa5\xa2\x22\x98\x64\x11\x32\x8a\xe8\x3f\xc4\x41\x62\x5c\xc4\xb0\xb0\x26\x0a\x78\x11\x05\x65\x16\x80\xaa\x2e\xb2\x20\xc3\x55\x26\x60\xfe\xe9\x30\x64\x1c\x67\xd3\xc1\x7e\x30\x51\xe5\x4d\x06\x2b\x9e\x11\x7c\x46\xff\x95\xc9\x5e\x1c\x05\x61\x7a\xff\xbc\x4a\x83\x6f\xee\xd1\x1e\x0a\x67\x49\x39\x0c\x42\x54\x1e\x8c\x76\x11\x84\xb9\xd0\x23\x2c\xee\xd3\xd1\x0d\xec\x50\xd9\xac\x00\x7d\x3b\x88\x0f\x61\x45\x93\x0a\x88\x09\x03\x84\xab\xcc\x67\x0a\x6c\x20\x3d\xd4\x3e\x61\x8a\x6a\x03\x31\x0b\x9c\x01\xcc\xf8\x43\xfe\x14\x87\xc9\xa6\x88\x31\x0e\x33\x0e\x13\x54\x17\x27\xa0\xd9\x8a\x83\x28\x9b\x84\x44\x3a\x0d\x10\x50\x39\x0a\xcb\x10\xf5\xeb\x51\xb0\xf7\x0b\x6c\x78\xd3\x3d\xfb\x18\x48\x83\xfa\xa9\x98\x4d\x41\x1b\x96\xde\x9c\x19\xc8\xb9\xe8\xc7\x37\x59\xa9\x98\x97\x4d\x40\x91\x92\x2a\xd5\x04\xf5\x69\x1e\x03\xb2\x49\x06\x1b\x07\x92\xf9\x2a\xcf\xee\x80\xe7\xc3\x20\x8a\x8b\xf0\x2a\x41\xa6\x01\x35\x81\xb6\xbc\x58\xee\x6e\x50\x1b\xba\x62\x03\x78\xe1\xc3\x5b\x40\xe7\xb8\x40\xe9\x30\x56\xe6\x5f\x86\xf4\x22\x28\x52\xfc\x99\xa8\x7b\xc4\x98\xb3\xe6\xfc\xe5\x5f\x3f\x7e\xff\x2e\x18\xfc\xe9\x10\xb6\x14\x95\xe7\x2a\xda\xc7\xc1\x22\x35\x05\x59\x08\x4b\x15\x89\x3e\x9e\x15\xa4\x8c\x59\x1a\x67\xc0\xe3\xa2\x78\x06\xaf\x67\xf9\x33\x52\xc5\x0a\xf0\x1c\x01\x43\xaf\x60\x37\x16\x0a\x03\xc3\x52\xb0\x20\xc3\x48\x34\x2f\xc8\x7e\xce\x32\x1b\x21\x3e\x2c\x3b\x85\x7e\xc8\x60\x64\x57\x68\x01\xe3\x04\x37\x00\x2a\xff\x78\x18\x81\xb5\x02\xc2\x26\x2b\xd5\x42\x26\x8f\x05\x9a\xc1\x7e\x45\x0e\x11\x53\x90\xc2\xab\x2c\x03\x33\x30\xad\x49\xe2\x71\x00\xe3\x1c\x68\xfa\x19\xd8\xc7\xb3\x74\xc4\xf2\x81\x5c\x1b\xc1\x26\x7e\x45\xc4\xa3\xf5\x40\x4b\xe6\xde\x81\x77\x00\x12\x63\x28\xfd\x5f\x87\x1f\x87\xc1\x8f\xaf\x5f\x7d\x7f\x79\xf9\xf6\x1d\x8f\xbb\xaf\x31\xba\x52\xa0\x69\x94\xac\x32\x94\xf3\xc3\xe0\x3d\x51\x13\xfe\x09\x03\xa3\x70\x8e\x80\xc4\xd9\x44\x14\x00\x08\xac\x2a\x47\x87\xa4\x33\x78\x2a\x94\xc7\x42\xeb\x16\x1e\x95\x57\xcd\x14\x4c\x68\x00\x2f\xc4\x7f\x5d\xcf\x60\xf1\x96\x05\x7e\xc7\x0b\x06\xe0\x47\xa5\x14\x9c\xde\xd2\x9c\xef\x48\x31\x20\xf9\x59\x02\x64\x55\x33\x74\x17\xb0\xee\x2d\xfe\xac\xff\x70\x87\x4d\x5c\x49\xab\xc9\xd7\xff\x1d\x56\x87\x90\x05\x46\x03\x5c\xb1\x58\x00\x7c\xb9\xba\x0e\xf3\x28\x01\x4e\x69\x96\x93\x0e\x24\x45\xc6\x23\x7b\xec\xb3\xe3\xbd\x08\x06\x44\x81\x23\x51\xb2\xf0\xe7\xd0\x50\xe2\xa8\x41\xf3\xee\x37\xab\x1e\x50\x11\xa2\x3e\x08\xf7\xa1\xd1\x9b\x30\xd1\xc8\xe0\x07\x90\x4e\x61\xd7\x2a\x68\x75\xc3\xbb\x84\x00\x6c\x78\x11\xea\x1b\x67\x69\xf2\xda\x3e\x0a\x64\x52\x7e\xc9\x0c\xce\x03\x67\x29\xac\xe9\xbb\x2c\xff\xc0\xa2\x3f\x2a\xf1\x9f\xb8\xe6\xbe\x3f\x3d\x7e\x49\x0c\xfd\xee\xf4\xd2\x68\x03\x50\x62\x25\xbd\x8d\xee\x5d\x10\x4e\xa7\x8a\x17\xca\xde\xff\xf7\xd7\x5f\xcb\x18\xcc\xe9\x32\x9c\x4c\x7f\xdf\x23\xfd\x07\x53\xe1\xa7\x60\x95\x83\x9d\x0d\x7b\x50\xc1\x92\x62\xfe\x8d\xac\x47\x04\x50\x1f\x02\xe8\xb8\xcb\x65\x25\xda\xea\x48\xf3\xc2\x21\x3a\xca\x99\x31\xaa\xce\x4e\xff\x02\xaa\x45\xa1\xc5\x04\x86\xc1\x25\x0e\x32\x01\x61\xc4\x19\xc3\xe0\xfd\xbb\x57\xbc\x26\x6e\x50\xd2\x92\x1c\xc4\xf4\x1e\xa8\xa3\x52\x87\x72\x08\x37\x02\xe6\xb3\x92\x48\xd3\xb9\x12\xed\xa2\xcb\x1c\x89\x21\x50\x5c\x25\x87\x26\x2f\x38\x14\x45\x30\x08\xc7\x88\xa4\xac\x7c\xa2\x24\xe9\x22\xb3\x8c\x79\x65\xa8\x8f\x6a\x34\x03\xb8\xf6\x99\x3a\x66\x96\x6b\x05\x4b\x47\x96\x4d\x79\x97\xd9\x75\x73\xe4\xac\xb7\xde\x4b\x1b\x67\x0f\x83\xa2\xcc\x59\x0c\x4a\x75\x0d\x76\xfa\xbf\xd9\x8e\x00\x5d\x09\x06\xce\xcc\x88\xbc\xc6\x64\xb0\x27\xb0\xef\x0d\x83\x3d\x60\x14\xef\xc5\x2a\xc2\x7f\x12\x26\xf8\x07\x32\x3d\x9b\x95\xf8\x67\x08\xb6\x3f\xfe\x01\x28\xee\x01\x93\x41\xfe\xf8\xad\xfd\xb6\xe5\x68\x94\x72\x61\xe4\x33\xd5\x06\x02\xfe\x95\xe7\x21\x59\xc4\x9a\x26\x20\x40\xa7\xc0\xa6\xca\xf2\xb7\xbc\x40\x45\x41\x26\x45\xb3\x62\xf1\xf9\x2d\x73\x37\x2e\xdc\x52\x7d\x2c\x2f\x88\x26\x47\x42\xb3\x96\xe5\x7a\x9c\x6a\x02\x03\x98\xfc\xe6\x33\xd0\x21\xb3\x24\xcc\x0f\xd4\x47\xd0\xdd\x64\x48\x02\x1b\xe3\xbc\x60\xc1\x8c\x50\xf2\xc1\x23\x54\xc1\x4d\x76\xa7\x29\x42\x78\x10\xc9\x84\x01\x6c\x34\x0d\x83\x6b\xd8\x2c\x53\xd0\x01\x85\x67\x93\x1d\x06\x83\x5b\xb1\x6c\xc3\x08\x96\xce\x11\x92\x74\xbf\x82\x1e\xbd\x8e\x16\xce\xaf\xc1\x4f\x1f\xd4\xbd\x46\xe4\x67\x46\x24\xf8\x5d\x70\x79\x76\x3c\x82\x75\x4f\x6b\x18\xe4\x9a\xe1\x21\xf3\x09\x8c\xaa\x19\xaa\x9c\x51\x16\x01\x20\xf8\xcb\x53\x63\x96\xc0\x2e\x3e\x0b\xd1\xd1\x84\xff\x03\x45\xa3\x67\xa3\x48\x92\x6c\x14\xf0\x9f\x3d\xd2\x32\x7b\x32\xcf\x82\xce\xe2\x33\xb0\xc1\x41\x0a\x9f\xfd\xf7\x7f\xfd\x47\x95\xe8\x3f\xe0\x92\x2b\x44\xf1\xa0\xf5\xa3\xb5\x0d\x1b\xa0\x43\x31\x01\xe2\x2a\xd1\x5e\xb2\x21\x86\x82\xb1\x07\x9a\x2b\x11\xb3\xf2\xd9\xc7\x03\x70\xae\x0e\x40\xfd\x4c\x0e\x66\x79\xa2\x52\xc4\x18\x2c\x8a\xd1\x0d\x32\xa4\xfc\xeb\xfb\xcb\x6f\x0f\xfe\x02\x62\x0d\xf6\x0c\xc8\x1e\x79\x79\x29\xdb\xe4\x93\x8c\x36\x65\x70\xc3\x8c\x6d\x07\x4c\x87\x71\x63\x54\xa2\xb8\x76\x03\xf1\xec\x08\x8c\x83\x52\xe8\xc3\xf6\xe9\x60\x9f\x56\x41\x2a\xfb\x6d\x98\xdc\x85\xf7\xbc\xed\xfa\xf8\x04\x03\x45\x42\x30\x06\x65\xc9\xe8\xca\xee\x2c\x1a\xe3\x87\xff\x3c\xa1\x55\x0f\xe4\x95\x55\x6f\xfc\x1b\xc2\x0f\xcc\xb3\x11\xc8\xb2\x12\x01\xa4\x85\xc7\xa8\x39\xd3\x12\x92\xcf\xe5\xc3\x7b\x36\xe5\x58\x19\xeb\x77\x49\x46\x51\x5d\xf3\x4e\xe4\xec\x32\x08\x2e\xbc\x95\x5e\xf3\xaf\x44\x40\x18\xa1\xba\xde\x8c\x88\xb4\x58\xdd\xb4\x68\x65\x35\xe9\x85\xcd\x9a\x5d\xbb\x24\x1f\x69\x99\xa1\x45\x8e\xab\x1a\xcc\xa2\x84\x2c\x2c\xa3\x4f\x0f\x3d\xcb\xdd\xfd\x8c\x75\x81\x0c\x4e\x64\xc8\xd1\x42\x43\x2a\xb2\xef\xc2\x12\xaf\x2d\x17\x32\xa5\xc4\xec\xc0\xd1\xd1\xf2\x0c\x5d\xb7\x69\xa2\xf2\x6b\x54\xfe\xda\xab\x37\x5f\x6a\x85\xad\x99\xbc\xdf\x40\x85\x8f\x65\x0b\x05\xac\x36\xc1\xf7\xc0\xd0\xd7\x02\x8e\x54\x3b\x28\xb3\x03\xfd\x37\x3e\x07\xc9\xe0\x3d\x95\x54\xa2\xf9\x01\x16\xe9\x6d\x98\x80\xe7\x81\x28\x57\x0c\x45\xf6\xb8\x18\xe1\x32\x0f\xd3\x02\x65\x1e\xa0\xe5\x0f\x8c\xf6\x67\xe5\xd3\x4f\xc9\x08\x14\x73\xd5\x8c\x67\xe1\xe0\x42\xb9\x83\x4d\x92\x2c\x11\x92\x26\x58\x23\xe8\xdf\xbc\xf4\xdc\x9b\x60\xa0\x4d\xec\xbf\x5d\x9c\xbf\x79\x0b\x7b\x19\x73\xa4\x00\xf3\x21\x60\x4f\x48\x7b\x4c\xca\xe2\xe0\x0e\x24\x5e\x98\x6c\x08\xac\xac\x86\xb4\x74\xd5\xc7\x10\xf5\xff\x50\xd6\xd8\x41\x11\x47\x88\x7a\x14\xa3\x05\x24\x9b\xbc\x5e\x01\x3c\x55\x1f\x7a\xd8\xa9\x3b\x2c\x89\x97\xa2\xb1\xae\x54\xc3\x62\x27\xfb\x8a\x35\x17\x91\x36\x62\xbb\x86\x82\xec\x42\xda\x21\xab\x82\xd2\xd8\x37\x7a\x5f\xc7\x6f\x81\xfd\x6c\x94\xf1\x97\xe4\x54\xe5\x64\x3d\xa2\xc9\x73\x60\xcd\x38\x8c\x94\x4c\xf3\x0c\xb7\x77\x02\xc8\x3a\x9c\xb0\x2e\x6e\x09\x2e\xa2\xd9\x0c\xcc\x7d\x50\x23\x23\xfd\x32\xcd\x73\xce\x52\x4a\xfe\x16\xa0\xf1\x77\x75\xff\xec\x1f\x44\x7f\xda\xe8\x48\x19\x5a\x21\x84\x3d\x18\x37\xf2\xa1\xde\xec\x00\xd1\x38\x4c\xe2\x7f\x83\x42\x9a\xc0\x42\x8d\x81\x0d\xfc\x76\xc1\xeb\x89\xd8\x0b\xa2\x14\x5c\x85\xb8\x94\x84\xe9\x9e\x8c\x82\xf0\x46\x14\x83\x0c\x13\x63\x3b\x0c\x22\x55\x8c\xf2\xf8\x0a\x2d\x3c\x05\x8c\xae\xac\x3c\x5c\x3a\x6d\xcb\xae\x6a\xda\x69\x4f\x0a\x74\x5a\xa4\x5d\xd8\xf0\xce\xc6\x32\x48\x09\x03\x28\xbe\xd6\x3d\x34\x56\x07\x39\x6d\xe3\x38\x81\x95\x41\x5e\x8c\x33\x7a\x11\x62\xf0\xf4\xdf\xaa\xb2\xd4\x30\x18\x58\xdc\x64\xb3\x24\x92\x45\x2a\x82\xce\x2f\xb3\x8f\x5f\xb1\x0f\x75\xbc\xa4\xc1\x36\x44\x60\x09\x46\x1e\x0b\x6d\xeb\x1c\x9c\x36\x67\x4b\x41\x73\x10\xff\xf9\x54\x6b\x94\xa7\xd6\x2c\xaf\xd3\xed\x5b\x42\x05\x2c\x25\xfc\x07\xd1\x10\xb4\xeb\x3d\xfd\xd1\x62\x17\x5d\x3a\x9e\x13\xef\xd0\xa8\x7f\x60\xdd\x3f\x25\x8b\x77\x8a\x8b\x0c\x28\xc3\xce\xac\x0f\x1b\x49\x4f\x8a\xa7\x03\xb8\xcd\xf1\x46\xa6\xa2\xa1\x67\x2a\x95\xf0\x07\x10\x33\x4e\xc7\xe8\x45\x94\xbe\xa4\xbc\x3e\x7b\x7d\x6a\x26\x77\xc9\x0c\x16\x79\x8a\x3c\x73\xde\xa0\xd1\xee\x63\x05\x74\x87\x07\x43\xd4\xf9\x60\x47\x93\xbe\x71\x9f\x85\xc1\xdf\xc2\xdb\xf0\x02\xc4\x0b\x2c\x53\x56\xd1\xe6\xdd\x82\x7f\xa5\xb7\xc5\x96\x67\x6c\xe8\xf7\x21\x5b\xde\xe9\x3d\xac\x26\x40\x58\x19\xb7\xeb\x4a\x59\xee\xa0\xaf\xa2\xed\xcc\xc3\xa0\x46\x7e\xd9\x33\xf9\x85\xde\x8e\x49\xec\x1b\xf3\xe3\x30\x4e\x8a\x8a\x08\x81\xae\x53\x60\x60\xe2\x86\x90\x83\x3a\x58\xc0\xc3\xb0\x52\xbf\x6f\xe8\x61\xdc\x0b\x59\x88\xda\xb9\xd0\xac\x60\xe7\x87\x04\x21\x1b\x8d\x66\x18\xc5\x11\xe2\x88\xf2\x09\x13\x71\xf3\x10\x36\x43\xe5\x71\x80\xb2\xa0\xbf\x38\x0c\xde\x82\x8e\x8d\xaf\xac\xce\xd0\xc1\xd1\x42\x81\xce\x8c\x0c\x12\xc1\xe0\x4a\xa1\x52\x07\x17\x73\x96\x24\xfb\xe4\x6a\xb9\xce\x8a\x71\x60\xb4\xd7\x82\xa0\x78\x6e\xcb\x21\x1b\x9a\x78\x2a\x07\x0e\x95\x80\x4f\x70\xa0\x3f\x8a\xff\xba\xbc\x01\x03\xc8\x23\xa3\x22\xd7\x01\x6c\xe3\x00\x03\x6e\x84\x07\xb3\x81\x86\x60\x37\x6b\x68\x22\x47\x7b\xe0\x9d\x07\xdf\x66\xb3\x34\xda\x23\xa7\x89\x22\xbe\x48\x86\x0b\x5e\xa5\xa7\x38\xc9\xe1\x5e\x8b\xf7\xc4\x00\xad\xdb\x75\xe2\x80\x01\xa9\x32\x56\x7f\xc6\x4d\x97\x37\x91\xde\x23\x37\x18\x29\x0b\x00\xe9\xe7\xfd\x4e\x9b\xb6\x13\x38\xe8\xe1\x94\x11\x4a\x3d\x3d\x32\x8f\x07\x73\xdc\x34\x60\x24\x07\x16\xd0\x1e\x88\xaf\xaf\xe1\xcf\xeb\x24\xbb\x0a\xd9\x90\x0c\x78\xbf\x13\x74\xb5\x44\xc5\x85\x8d\x26\x5d\x52\x48\xcf\x78\x0f\x6c\x53\x5c\x38\x71\x1a\x7f\xdf\x54\x7a\x74\x33\x64\x12\x7f\x60\x1b\x13\x70\xc8\x4b\x64\x36\xff\x23\x9b\xb2\xfa\xbb\x52\xb4\x5a\x18\x36\x94\x72\x22\x56\x25\xb0\x87\x46\x61\x9e\x25\x20\xf8\x79\x8c\x11\x5a\x4b\xc5\xc2\x27\x23\xcf\xde\x15\xcc\x70\xdd\x56\xb0\x66\xf4\x5e\x2a\x71\x7d\xd8\x7c\x9f\xdd\xda\xfd\x9c\x5d\x3a\x5c\x5b\x49\x06\x50\xd2\x26\x6d\xa2\xc3\xb3\x42\xaf\xf3\x8a\x0f\x42\x06\x26\xae\x02\x26\x9f\x0c\xfd\xe3\xc1\x3b\x1d\x88\x39\xf8\x01\x06\x3a\xaa\x7e\x66\x5d\x12\xb2\xb2\x86\xc1\xd5\xac\x24\x07\x58\xd3\xbf\xf2\x3e\xc3\x29\x94\x62\x2f\x24\x82\xc9\x72\x60\xd0\x3f\x58\x41\x88\x1d\x2f\x21\x4b\x7f\xc1\x24\x05\xa9\x4c\x3c\xfc\xb9\xcb\xe3\x12\x3c\x14\xe6\x07\xe2\xd8\x1e\x76\xec\x61\x0a\xca\x6c\x0b\xd8\xc5\xc7\x68\x9d\x7a\x2a\x5b\x6c\x44\x8e\xc1\x8c\x67\x12\xaa\x8b\x2b\x9b\x1a\x46\xba\x34\xde\xc0\x0b\x71\xcd\x92\xb0\x28\x5d\xf9\xe5\xa5\x87\x41\x6a\x8c\x7f\x8d\x6e\xd4\xe8\x83\xe6\xdb\x2b\x78\xf5\xe0\xb5\xc4\x76\x04\x70\xeb\x2c\x1b\x3b\x4e\xc7\x23\xaf\xd3\x2c\xd7\x9f\xea\x97\xcf\xdc\x3d\x42\xe2\xc5\x6a\x74\x93\xc6\x30\x3f\x13\x99\x66\x64\x0d\xf9\x54\x95\xe1\xf5\x53\xbb\xb5\xeb\x98\xa5\x98\x26\x28\xe8\x61\x09\xaa\x6a\x96\xea\x80\x13\x9b\x3f\x1e\x7d\xe3\xb1\x86\xb8\x4b\xcc\x0d\x49\x69\xf3\x80\xb5\xa9\xd2\xdb\x38\xcf\xd2\x89\xd8\xdd\xb4\x09\x8f\xb2\xeb\x94\x8c\x2c\xd4\xc8\x49\x06\x6a\x6e\xb8\x07\x3e\xf7\xe1\xf5\x21\x7d\x8a\x67\xba\xc5\x3d\x08\xec\x04\xfc\x75\xed\x89\x0b\xb6\x51\x26\x31\x58\x33\x0a\x5a\x23\x30\x0e\x69\x78\x7b\xf6\x23\xfb\x6e\x86\xf0\xd0\x19\x63\x9e\x95\xd9\x28\x4b\x38\x02\x28\xc0\x01\x6f\x7d\x60\x08\x96\x23\x02\x60\x18\x7c\x71\x00\x1a\x50\xa5\x05\x9d\x83\xa1\xae\xbd\x8b\xa3\x6b\x55\x9a\xe3\xb3\xb8\x78\x85\xaf\x6f\xec\xf8\xac\x49\xe4\x0f\xbf\xf4\x85\x5e\x60\xe8\xe0\xc8\x39\x0c\x92\xc7\xda\xa7\xaf\x1d\x67\xa4\x68\xfa\x53\xc8\x84\x4e\xb2\x2a\x02\xcc\xa2\xa8\x37\x2e\xf1\xd1\xcd\xe1\xcd\x53\x3d\xdc\x53\x8d\x87\xf9\xe5\xaf\x2f\xc8\xbc\x2d\xf5\x66\xec\x7a\x53\xfa\x65\xf0\x92\x40\xa5\x67\xc1\xaf\x34\xf3\xd1\xd3\x2c\xa5\xfd\xeb\x55\x16\x46\x4f\x7f\x0f\xee\xc4\x34\x2f\x68\x07\x48\x03\xf7\x31\x8f\xae\xdd\x7e\xd7\x90\xad\xef\xdb\xf6\xf0\x56\x09\x8a\x95\x83\x3e\xbd\x8b\x14\xfa\x33\x52\x47\xa8\xa2\xe5\xab\xbd\x17\x1a\xab\x3d\x8d\x81\xcc\x8a\xb1\x6f\xdc\x58\x4a\x3c\xac\x2b\xe5\x01\x86\xc2\xf6\xfe\xfa\x62\x8f\x37\x35\xed\xf3\xcb\xc1\xdf\x59\x2a\x61\xb2\x10\x57\xf6\xbd\xf5\x41\x68\xc9\x3a\xa1\x2c\xed\x64\x13\xc8\x27\x9a\x6d\x82\xcc\x21\x98\x30\x8e\x43\xfd\x2b\xbf\x75\xa4\x15\x86\xf7\xcd\x51\xb0\xa7\xc1\x7f\x03\xbc\xde\x0b\x7e\xf7\x04\x88\xde\x6d\xf1\xd2\x2e\x38\x34\xd5\x25\x39\x88\x63\xe8\xdb\x1d\xbd\x44\x87\x1d\xbc\x14\xec\x16\x1e\xc7\x38\xbd\x14\xe3\xbc\x56\x29\x1e\x95\xb2\xa2\x92\x00\xa9\x78\xe9\xc0\x2c\xf0\x40\x42\xb4\x46\x81\xd6\x09\x50\x49\xb8\xa6\xbf\x01\x70\x66\xac\x05\x79\x60\xd0\xc2\xe5\x53\x00\x62\x12\x7e\x20\x55\xa1\xc2\x22\x66\x9d\x37\x09\xd3\xf0\xda\x3b\x2e\xe5\x23\x03\x50\x15\xb7\xb8\x60\x9c\x43\x03\x73\x90\x40\xe6\x05\x71\x40\x27\x93\xdc\x85\xac\xd8\x8a\x26\x62\xd1\x51\x05\xc5\x5e\xe4\x2d\x95\x12\xe8\x57\xc0\x47\x00\x42\x47\xf3\xf0\x24\x04\xa5\x07\x08\xe3\x9f\xfc\xd4\xc5\x19\x07\x33\xfb\x28\x8a\x9a\x13\x71\x32\x56\x94\x88\x09\x39\x4c\x1c\x43\x45\x79\xf3\x9d\x7a\x5f\xb0\x9c\x33\xf4\x1b\xed\x26\xb9\x01\x00\xf0\x20\xcc\x56\x5c\x97\x1f\x3d\x4c\xab\xb7\x3f\x01\x2f\x20\xd0\xb1\xd8\xcc\xd5\x48\xe8\xf0\x98\xa7\xbd\x54\x1e\xbe\x3d\xcf\x3f\x43\xe5\x70\x97\xe5\x91\x1b\x5d\x20\x23\xaa\x6a\xfa\xa4\x76\x57\xa7\xf0\x13\x7b\x0d\xa1\x9c\x1f\xcd\x30\x58\x5c\xea\xa0\x6e\xe3\x79\xa4\x9e\xa9\x1d\x1a\x37\x40\x4a\x8e\xb9\x68\x2e\x09\x96\xdd\xe8\xe0\x86\xc4\xf9\xdd\xb0\xe9\x80\xb7\x74\x5a\x14\x43\xeb\xd2\xca\x91\xdd\x0d\x8a\x81\xb6\xc2\xcd\x4a\x93\xa0\x91\x78\x7a\x6e\xcc\x31\x4e\x1b\x02\x5b\xe3\xb8\x2c\x1d\x8d\xa6\x4d\x3e\x2f\x7e\x3e\x3f\x74\xbf\x67\xa2\xf1\x66\x39\x90\xf5\x1a\xbc\x3c\x7f\xfd\x32\x1b\x91\x7b\x48\xa7\x54\x0c\x7a\x9a\xa5\x07\x16\x4e\x44\xbf\x23\x0f\xc3\x27\xb7\x8d\x9f\x75\xed\x79\x68\xb5\x11\xd0\x18\xe1\xd2\xc7\x85\x7b\xec\x36\xed\x59\x3b\x19\xc5\x9e\x64\x83\x6c\x8f\xa1\xef\x4c\x19\x9d\x40\x82\xa3\x13\x3d\xd0\x69\xd4\xe3\x98\xd8\x30\x39\xb2\xb0\x72\xf7\x48\x8a\xf7\xc9\x51\x29\xbc\xb0\x3f\x6c\x11\xe0\x9f\x63\xa0\x42\x47\x54\xd9\x85\x03\xbb\xcc\x0b\x7d\x1b\x1d\xfa\xbe\x70\x4f\x3a\x71\x98\x70\x44\x67\x9b\x30\x98\x0c\x41\xc6\x0a\x9d\x4a\x6b\x7f\xd1\x84\x6a\x43\x9e\x9d\xdc\x78\x3d\xf0\x04\x73\x4e\x78\x5a\x9f\xa6\xfc\xdb\x09\x43\xda\xb1\xaa\x5c\x0f\x26\x05\x96\xe6\xf1\x88\x97\x0b\x8a\x00\x2b\x49\xe3\xfb\xb6\x9e\xd8\x3a\x26\x74\x3d\xf7\x03\x07\x3a\x0c\xc6\xd5\x0c\x16\x6b\x8f\x0f\xdd\xb3\x53\x7c\xdb\x9d\x11\x15\xbc\xa1\x80\x3d\x02\xd7\xc4\xd0\xa7\xc2\x5a\x39\x3f\x47\xab\x32\x2e\xc5\xc4\xe0\x73\xa3\x54\xd4\xfc\x00\xac\xfa\x64\x46\x30\xfd\xe7\xc7\x8f\x26\x4a\xcd\xc7\x47\xf7\x73\xa7\xf2\x0f\x9d\x7b\xf8\x2e\x8c\xd1\x09\x20\xb4\x88\xfb\xd2\x2f\x0c\x45\x78\x83\x65\xda\x75\xd8\xdd\x14\x8c\xea\x0c\x67\x52\x48\x7f\x82\x86\x4f\x84\xda\xd2\x1e\x67\x6a\x7d\x46\xeb\xc2\x50\xe6\x79\x6b\xa8\x8a\x31\x7f\x6e\xc2\xa3\x8b\x85\xc0\xda\x8e\xb9\x35\xaf\x1f\xe0\x94\x5b\xa6\xae\x84\x6e\x1b\x62\x29\xd5\x88\x4b\x4b\x20\x05\x63\x1e\x61\x20\x61\x34\x22\xcc\x04\x80\x8b\x39\xf6\x56\xec\x9b\x60\x9c\x6f\x7d\x71\x9e\x89\xde\x68\x31\x47\x4c\xe2\x23\x7a\x20\x3e\x5f\x04\xc5\xe6\xb9\x1e\x2c\x23\xfa\x9d\x29\x2c\xf1\x2c\x42\x16\xe5\x68\x1a\xb1\x7e\x99\x66\xb1\x44\x5c\xf8\x4b\x3e\xad\x93\x94\x10\x5a\x53\x05\x98\xd3\x39\x4c\xc5\xba\xde\xcb\xe4\x03\xe8\x41\x83\x5f\xe7\x3a\x3b\xc3\x3d\xd2\x44\x95\x90\x52\xc8\x25\x55\xb2\xa4\xc3\xdb\x30\x4e\xd0\x60\xd2\x8e\xd4\x54\x47\x22\xd9\xee\x74\xdc\x76\x84\x39\x40\xa0\x6d\x46\x95\x44\x28\x38\xab\xea\xcc\x17\x28\x9a\x9d\x0e\x2d\x86\x4d\x91\x94\xca\x99\x28\xab\x86\x38\x05\x83\x28\x26\x7a\x80\x26\xad\xac\x32\xca\xc4\x41\x00\x9e\x8b\xf5\xa0\x73\xf3\x64\xa8\x89\x9a\x5c\xa1\x86\xa0\xd4\x3e\x0c\xa0\x91\xb2\xd1\xb1\x57\x82\xef\x5b\xd0\x31\xe3\xec\x63\xf0\x9f\x87\x7f\xfe\x3f\x14\x78\x18\xba\x81\x3e\x3f\xb6\x87\xc8\xa1\xc6\x27\x19\xc5\x5c\xac\x44\xa7\xd9\x08\xf3\x9e\xbb\xbb\x0c\xe1\x91\xcf\x52\xe3\x4c\xa3\xcb\x0c\xa2\x81\x11\x54\x4e\x99\x29\x6b\x6c\xf7\xa5\x5a\x9e\x81\x76\x02\xcd\x0f\x88\x34\x8a\xa9\xce\x5a\xa3\x34\xcc\xd8\x3f\x74\xd4\x39\x82\xde\x39\x52\x79\x9f\x90\x7d\x49\x7a\xc2\x9c\x52\x85\x75\x2b\xd3\xf9\xaa\x63\xdb\xbf\xac\x27\x8f\xb1\x9d\x0f\xda\x7a\xb0\x87\xa9\x4b\xbc\x7f\xe3\x4e\x0d\xaa\xdc\x09\x2f\xd2\x4f\x3a\x12\x7b\x4e\x72\x4b\x3b\x9b\x1e\x45\x92\x12\x6d\x1c\xf9\xed\xfb\x4b\xe2\xca\xcb\xd3\x57\xa7\x97\xa7\x43\x2f\xb4\x45\xfb\x39\xc6\xc3\x38\x92\x46\x3b\x06\x0a\xbf\x93\x17\x2a\xcc\x42\xe9\x62\xe9\xaf\x84\x13\xcb\x39\xf6\xad\xce\x2a\xb2\x67\xd6\xda\x1d\x05\x7c\xd9\xe2\xaf\xee\xa1\x35\x45\x05\xd6\x5b\xd7\x14\x80\x45\x4e\x1e\xd4\xc6\x4d\x68\x3d\x53\x3b\x34\xc6\x4d\xe1\x48\xb8\x0a\xcb\x96\x08\xa8\xde\x15\x24\x94\x56\xe8\x1d\xe9\x98\x72\x60\x7f\x94\x43\x54\xce\x65\xd3\xba\x25\x18\x9c\x9d\xee\x37\x6b\x01\x14\x04\x10\x60\xb0\x49\x6c\x14\x25\x33\xfe\x21\x88\x37\x18\xb4\x77\xb0\xa0\xd0\x0d\xc7\x9d\x33\x34\x6e\x58\x75\x24\xf0\xd6\xd3\x1b\x5c\xa8\x13\xce\x7f\x60\xb0\xc6\x60\xd3\x65\xe0\xdb\x7a\xe4\xf8\x78\x93\xcf\x4d\x56\xc0\xbd\x0b\x8f\xc9\xd0\xa3\x3f\xa0\xbf\xfe\x51\x0d\x1e\x1b\x33\x31\x0d\x11\xf7\xc0\xa6\xd1\x56\xa2\x07\xda\xa3\x9c\x71\xca\xb8\x7c\x8c\xac\x3e\x01\xbb\x07\x99\x17\x26\x76\x59\xd7\xce\x22\x8c\x46\xc2\x23\x72\x4a\x2b\xf4\x95\xad\xec\xc8\xd5\xf1\x80\x88\xa0\x67\x4a\xf4\x9f\xd9\x76\xc5\x1f\xc2\xeb\xb0\xb4\x31\x1d\x07\x70\xde\x2b\xc0\xe6\x3b\x39\x7f\x77\x61\xa7\xc4\x3f\x62\x0e\x29\x95\x12\x30\xa2\x60\xa9\xe4\x22\x8d\x93\x50\x42\x25\x72\xb6\x80\x37\xc0\x86\xc1\x9d\xb2\x01\x39\x09\xa6\x5b\x68\x0f\xbf\xfc\x3f\x3a\x24\x83\x84\xe1\x19\x58\x75\x49\xaa\x74\x5c\xf6\x72\x53\x81\x8d\xdf\x22\x63\x3a\x03\xd2\xbf\x77\x5c\x3d\x70\x33\x9f\x1b\x6f\x15\xe0\x63\x8a\x50\x46\x45\x45\xde\x86\xf2\xc6\x5b\x30\xda\x40\x7c\xbf\x82\xe9\xbe\x6e\xbe\x77\x70\xa8\x6d\x84\xd7\xe2\x55\x9b\xf0\x23\xed\x54\x36\x72\x53\x09\xcc\xc3\x6b\xb5\x88\x50\x25\xcd\xc3\xcf\x8b\x36\x3a\xc2\xf3\x2c\x75\x34\xbb\x6a\xc5\x1d\x7e\x39\xac\xd1\x40\xa2\xda\xac\xf2\xc4\xbf\x69\x05\x7e\x80\x02\x11\x3a\x16\x44\x50\xb3\x28\xe1\xe9\x1d\xec\x9b\xac\xa4\xf1\x5d\x37\xe3\x1e\xdd\xa5\x5b\x46\xdc\x42\x55\x3d\x29\xae\x4d\xaf\x43\x13\x73\xce\xc6\x4e\x1a\xb2\xa7\xe5\x99\x7e\xe5\xff\xc9\x96\x48\x36\xe3\x25\xe6\x53\x19\xa5\x6f\xf3\xba\xf5\xe1\x27\x5b\x96\x4e\x96\xaf\x16\x21\x3a\x7c\xb0\x6e\x88\x77\xc0\x40\x71\x41\x84\x03\xbc\x77\x0f\x2b\x3a\x9d\x1d\xd8\x99\x5f\x38\xd8\xdc\x66\x71\x54\x4f\x2f\x4a\x47\x72\xf7\x4b\x0e\x64\xb5\x40\xc0\x66\x5e\xea\xfb\x55\x81\x4e\xd7\xc7\xa5\x7c\x88\x47\xe3\x86\x59\xc5\x90\xf3\x84\x28\xa5\x24\xac\xdc\x52\xd8\xe7\xa5\x87\xb7\x80\x12\x4a\x92\x13\x99\x96\x6d\x69\x12\xa6\xf1\x74\x46\x49\x69\x98\xc5\x3e\xe6\xc8\x5e\x24\x57\x16\x0e\x71\xf3\x19\xb0\x8d\x5c\x51\xd2\x91\x2a\xe9\x78\xde\xdf\x76\xf1\x75\x84\xd3\x06\x4f\x17\xb6\xe2\x83\xbf\x7e\x4d\x64\x1a\xd2\xf9\xbf\x13\x19\x5b\xe6\x88\x15\xd3\x3d\xf4\x80\xfb\x47\x0d\xab\xba\xc6\x8c\xb7\x5a\xaf\x56\x6c\x03\x3a\x66\x8f\x9c\xcb\x41\x95\x33\xad\x13\x59\x96\xe4\xb7\x81\xb2\xc4\x70\x87\x47\x1b\xfd\x26\xda\xa1\x7a\x7f\xea\x52\x5f\x0c\xab\x91\xbe\x46\x0d\x66\xf6\xf5\x9a\x6e\x3a\x8e\x30\x7a\x64\x6f\x8e\xe4\x94\xd3\x09\x56\xee\x48\x1f\xf1\xdb\xe8\x2c\x45\xb5\xcc\xab\xe0\x1a\x19\xfb\x22\xa8\x2c\x27\xfb\xcd\xb1\xa3\xb5\x70\xf0\x9a\x47\x38\xe4\xa0\x27\xda\x6d\x2c\x69\xa4\xe9\xf5\xd6\xd4\x38\x9b\x2c\x9f\x28\x1a\x98\x79\x8e\x82\x6f\x65\x40\xc3\x3d\x8d\x73\x7d\x77\xff\xd4\x50\xfe\xe9\xe7\x06\xa4\x6b\xa9\x79\x74\x91\x49\x55\xd1\xe1\x78\x43\x94\x89\x17\xc5\x71\xcf\x09\x6c\x3e\x95\x54\x29\xfe\x7a\xd0\x67\x22\x93\x05\x2e\xa2\x6f\x29\x43\x13\xa2\xfb\x49\xd7\x16\x64\xcc\xa8\x71\xa6\x08\xa7\x32\xfe\x47\x75\x8e\x77\xb4\x6b\x90\x5d\x9f\x55\x27\xe1\x53\xa5\x06\xea\xe1\xd1\xd1\x7d\x1f\x0c\xf0\x49\xf3\xd8\x26\x29\x96\x93\xd7\x4d\x20\xa7\x45\x26\xcc\x73\x32\x01\x4c\xfa\x0e\x08\x05\x51\x02\x13\x14\xcc\x1b\x68\xef\x62\x56\x35\x71\x66\xbe\x28\x8c\xc1\x58\x1a\x1c\x1e\x1e\x3a\xb1\x24\x60\x5f\x3f\x49\x68\x67\xd0\x4d\x48\x54\x75\xee\x96\x48\x60\x06\xc4\x15\x38\x81\x30\xc3\x4e\x56\x87\xa4\x9b\x5b\x86\x9e\x76\x22\x3a\x08\x25\x22\x54\x48\xaa\xb3\x9a\x43\x27\xdf\xa9\x68\x5d\x73\xf2\xf2\x71\x40\x87\x55\x8a\x32\x04\x84\x74\x3a\x3b\x3a\x75\xdc\x34\x6f\x7e\x8a\xec\x22\x04\x62\x85\x5e\x29\x46\xe5\xb0\x95\x89\xc7\x96\xe3\xfe\xca\x36\xaf\x0c\x0d\x1b\x2b\x1c\xf4\x66\xac\xd3\x0f\xd3\x45\x06\x5e\x02\xf5\x30\x60\xe6\x2e\xc5\xd7\x3b\xc9\x09\x0a\xc9\x0d\x4e\x62\x27\x91\x1c\xb7\x1c\x43\xfc\x39\xaa\x8c\x2f\xcc\xea\x7f\x90\xbf\x12\xe6\x18\xbd\xcb\x2a\x89\x94\xb0\xa4\x8d\x5e\xf2\x34\x71\xab\x48\xbc\xc2\x8b\x96\x55\x55\x14\xcb\x75\x10\x49\x68\xa0\xf0\x8f\x3f\x11\xde\xcf\x5c\xab\x0e\xc2\x01\xab\x1a\x88\x7f\xeb\xa5\x7f\x7a\xee\x22\xa2\x92\x36\xbe\x8f\x68\x63\xda\xc4\x90\x3b\x14\x08\xbf\xbb\xdc\x0e\xfa\x49\xa3\xdf\xb8\xd6\xac\x01\x76\xcc\xd7\x82\xc4\x70\x16\x13\xb1\xe0\x94\x5d\x10\xba\x6c\xca\x1a\x0d\x4f\xde\xe4\x9d\xa9\xbc\xd3\x68\x99\x7d\x87\xa7\xe9\xf1\x48\x9b\x9a\x97\x0d\xee\x23\xda\x2b\x26\xdb\xae\xf9\xb8\x47\x5f\x1d\xd6\x1e\x1c\x39\xe1\x05\x16\x27\x01\xf3\x38\x57\xf8\x1b\xfe\x85\x39\x95\x25\x86\x28\x9d\xf0\x70\x1b\x23\xd0\x3a\xe7\xe4\x68\xef\xfc\x03\x29\x1e\x17\xed\x00\x38\x33\x57\x15\x29\x9a\xe9\x7a\x44\x27\x2f\x76\xc1\xb1\x19\x97\xba\x3b\xf1\xd5\xfb\xaf\x07\x16\x66\xf0\x02\xc8\xf9\x02\x65\x7a\x49\xaa\x94\x33\x6a\xb5\x32\x45\x53\xff\xfd\x6f\xbe\x95\xff\xfe\xeb\xa1\x03\x22\xfa\x11\xf0\x19\x87\x32\xbc\xef\x48\x39\x6b\xea\x79\x2f\xeb\x1f\x01\x99\xca\x07\x35\x97\xe2\xfd\xd7\x75\xa5\xf2\x99\xcf\x7d\xf8\xbc\x18\x93\xad\x83\xb8\x15\xb6\xe2\x74\x5f\xf7\x72\xd7\x44\x29\x3c\xd3\x1e\xb4\x55\x7c\x8d\x6a\x42\x26\xd0\x0a\xc9\xea\x89\x0a\x05\x7c\x8b\x81\xa3\x08\x00\x4d\xcb\x70\xe7\x54\x28\x21\xcb\xbf\x82\x8f\xdf\x9b\x11\x35\x24\x5f\x1e\xb5\x4e\xfe\x5b\xdb\x83\x9f\x7e\x26\x30\x0c\x32\x6f\x8e\xf8\x86\xcc\x57\xcd\x1f\xa0\x67\xdd\x32\x16\x3e\xfa\xe9\xe7\xaf\x1b\x57\x4e\x7f\xfa\x0e\x4d\x72\x5c\x2f\xfa\x22\x5d\x75\xa4\xaf\xb7\x7e\xb6\xc6\x86\x9b\x8e\xc9\x87\x57\x68\x1c\x56\x57\x6d\xe5\x18\x13\xdf\x43\x63\xa3\xed\x80\x60\x29\xad\xa0\x62\x39\x13\xe4\x25\x8a\x1a\xa1\xba\xa4\x6a\xce\x0a\xa5\x26\x6b\xfa\x17\x5f\xf6\xde\x80\x7b\xaa\x89\x46\x18\x9a\xe7\xfe\x8f\xe0\x5c\x6b\x0d\x27\x83\xdb\x99\x57\x83\x53\xb4\x19\x04\xcb\x02\x24\x7e\x36\x81\x33\xf0\xa1\xfa\xf2\x45\xdb\x7a\x98\x2b\xc5\xbc\x34\x7d\x1c\xd7\xbf\x32\x2e\xeb\x41\xaa\xd5\xb6\x94\xae\x2d\x63\x09\x39\xe9\xcb\x97\xaa\x70\x78\xd3\x6d\x47\x34\x2a\x21\x09\x0c\xa8\xba\x50\xb4\x8b\xc2\x7c\xd5\xe8\x8e\x33\x47\x06\x3a\x07\xdb\x28\xff\xbb\x35\x85\x1b\x6f\x5d\x2b\xff\x9b\x95\x83\x37\xdd\xa6\xf9\xdf\xa4\x0e\x28\x88\xee\x42\xb1\xaa\x2a\xf0\x30\x7a\xac\x8a\x40\xe7\xf9\x16\x36\x93\x24\xcd\x4a\x93\x72\xdf\x6a\x50\xea\xb7\x4f\x16\xf2\xe4\xba\x41\xea\x0b\x8b\xc9\x5d\xa4\x77\x06\x55\x50\x56\xe5\x5b\x75\xbc\xcd\xb0\x8e\x79\x87\xe5\x08\x4d\xa1\xa5\x03\x89\x8e\xa5\x19\x66\x2c\xe0\x6d\x7c\x46\x34\x9e\x2a\xc7\x1e\x46\x7b\xf5\xa3\x3d\xcb\x20\x8b\xd6\x37\x7d\xab\x4f\xeb\xf6\xae\xff\x46\xcb\x51\x48\x0f\xfb\x4b\xdb\xb5\x7d\x0d\x30\xcd\xea\xcf\x16\xd8\x67\x0b\x6c\xe7\x2c\x30\x47\x78\x3f\x9b\x60\x7f\x44\x13\x6c\x13\x02\xf0\xd9\x06\xdb\x45\x1b\x6c\xcd\x92\xf0\xd9\x08\xdb\xa2\x11\xe6\xf1\xae\xf1\x10\x93\x12\x3c\x6a\xa4\xc5\xf4\xb4\x1a\xe7\xea\x47\xc5\xad\xcc\xc2\x67\xce\x92\xb2\x47\xc2\x7a\xb9\xf8\x57\x30\x6b\x00\xf8\x84\x27\x9e\xdc\x9b\xb8\x60\xd7\x59\xe2\x26\x11\xae\x1c\xe4\xce\x3d\xc3\x3d\x91\xff\xce\xc1\xd5\xa4\x63\xd9\x8a\x5a\x0d\x07\xb6\x6b\x27\xa7\x7b\x40\x2b\x34\x5d\x99\xc0\xef\x14\x67\xdb\xd5\x28\x49\xe5\x26\x90\xfa\x98\xd6\xee\xe9\xa9\x0d\x4a\x95\x37\x4f\xf5\xac\x0c\xc1\x5a\x5c\xa2\xd6\x8f\xef\x7a\x84\xca\x9f\xa2\xa7\x40\xb9\x47\x19\xf5\x83\xff\xa5\xa9\xba\x19\xc1\x22\x13\x6a\x1e\xa5\x3d\xa3\x6e\x11\xc9\xe2\xeb\xaa\xdf\xc6\x79\x51\xda\xa4\x16\x8b\xb7\x37\x6e\xf7\xe2\x2c\x66\x57\x05\x26\x66\xa6\xe5\x7c\x52\x36\x0e\x6b\x52\xe6\x10\xe1\xce\xb3\x90\x2d\xd1\x6d\x3d\x12\xea\x4f\xb1\x51\x09\x9d\x4f\xd6\x0e\x11\x5d\x9a\xd0\x74\xed\xd9\xd2\xf9\x69\x61\xd2\x4d\x2b\x08\x56\x10\x2d\x61\x2e\x55\xea\x22\x6d\x59\xea\xdd\xc2\x90\x33\x1f\x53\xd9\x9a\xb2\x99\x24\xc3\xae\x2c\xa9\x88\x70\xd5\x44\xc1\xf7\x07\x3c\xe8\x8b\xa3\xc6\x88\xc7\xee\x46\x64\x24\x7b\x4d\x02\x32\xa6\xc4\x86\xfe\x1d\x6b\x6b\x72\x55\x9f\xc6\xd4\xf7\x6f\xc2\x42\xf1\xa7\x74\xf7\x4e\x28\xae\x43\x33\xf4\x9b\x04\x62\x4c\xe2\x2e\x6b\xfc\x48\x25\x0a\xaf\x17\x5c\x12\x55\x8f\x82\x53\xce\x06\xe6\x87\x71\x21\xb9\xd1\x6f\xb9\x16\x44\x25\xcf\x86\x5f\x39\x9b\x4c\x54\x14\xc3\x10\x6f\xe5\xaa\x02\x40\x8d\xf5\x84\xa6\x8d\x6f\xf7\x78\x09\x2f\xbd\x14\x53\xc0\xca\x8f\xf1\x64\x79\x7c\x1d\xc3\x6a\x21\x64\x8e\x18\xa7\xe7\x22\x19\x04\x9d\xc0\x3a\x70\xd3\xcb\xa5\x32\x67\x23\x76\x7c\xc3\xd5\x79\xb9\x00\x80\x9a\xb0\x19\x78\x29\xde\xf8\x56\xeb\xc3\xb2\x69\x22\xbc\x8b\xfc\xa3\x7f\x45\x0c\x7f\xfa\xa7\xff\x13\xad\x0c\xff\x27\x58\x1a\xe1\xdf\xf1\x86\x84\xa1\x4f\xc3\xe9\xf0\x59\x3a\x9d\x95\x4d\x5c\x6f\x96\x89\x5f\x25\x62\x53\xfa\x03\xe3\x8f\xa3\x32\x4f\xea\xbf\xd6\x81\x20\x2a\xdc\xc4\xe3\x72\x2e\x6c\xaf\xb3\x59\xa1\x9a\x60\x6b\x01\x9d\x81\xbb\x9a\x95\x25\x9e\xde\xbb\xa4\x18\x25\x31\xbc\xf6\x63\xd3\x8f\x15\x3a\x66\xe3\x71\xa1\xaa\x6f\xf2\x8f\xff\xac\x33\x61\x3e\x5f\x8a\x51\xae\x54\xfa\x63\xd3\x8f\xce\x9b\x0d\xc8\x03\x75\x16\x46\x1d\x6f\xb4\x3b\x12\x89\xff\xc4\xeb\xcf\xfe\xe4\x74\x69\xc6\xbc\x03\xff\xf2\x5f\x69\x00\xa5\xb7\x78\x0c\x5b\xc0\x1b\xb6\x30\x74\xd8\x88\xeb\xaf\xac\xe1\x08\xbc\x13\x2f\xcd\x4c\xee\x37\xc5\xca\xd4\xf8\xd6\xf1\x5f\xb9\xf1\xf7\x04\x1b\x8f\x54\xc1\xbf\x90\xb6\x11\x22\xbb\xbf\x84\x1f\xab\xd7\x1d\xaf\xb2\x8f\xaf\x81\x08\xb5\x6b\x90\x5c\x8f\xea\x9b\xd9\xd5\x55\xa2\x8a\xfa\x43\x35\xfa\x70\x92\x80\xfe\x6f\x7c\x72\x5e\xab\x9d\x3a\xca\xf2\xfa\x20\xa0\xfd\x93\x2c\x2c\xab\xbf\xdf\xe4\x6a\xfc\x06\x2f\x83\x63\x81\xd1\x5a\x6d\xa8\x9b\x72\x92\x5c\xe8\xf2\xa3\xd5\x87\xf0\x17\xde\x1b\xff\xe1\x26\x2e\x59\x11\x56\x5f\x48\x33\x82\xfa\x04\xa1\xac\x8f\x2d\x4f\x89\x1f\xd5\x67\xa0\xb6\x46\x71\x79\x5f\xff\xb9\x94\x8c\xf3\xda\x68\xf0\xe8\x42\x25\x14\xe3\xa9\x3e\xe2\x6b\xb4\xa7\x60\x5e\xbc\x08\x6a\x5a\x9c\x6e\xb1\xd6\xbe\x98\x5d\x4d\xe2\xb2\x85\x1d\xe5\x55\x16\x79\x90\x35\xa5\xc2\x90\x5d\x51\x3b\x52\x38\xc1\xcb\x8f\x68\x0a\x9a\x92\xae\x91\xad\xab\x1c\x6a\xe1\xb3\x77\xdc\x73\x53\xd5\xb1\x98\xc5\x65\xa8\xaf\x4e\xcf\x0a\x29\xfa\x84\x57\x46\xff\xe5\xd6\x66\x82\x87\x74\xb3\xbd\x72\x53\xb3\x6a\xf0\xc0\xa8\x9c\x77\xec\xcd\xc2\xc9\xb8\x02\x98\x6f\xb4\x0d\xe0\x0d\x6d\xc9\xe8\xcd\xee\x13\x40\xce\x18\x80\xce\xb5\xe6\xe3\xe0\x1b\x66\x2c\x40\x11\x51\x14\x0a\x4b\xf8\xd9\x7a\x88\xa0\x17\xb0\x78\x02\xde\xd5\x76\xbe\xda\x2b\x6e\x42\xcc\xe1\xdc\xeb\xba\x07\x6d\xa8\x38\x74\xbf\x35\x92\xe4\xd0\xd6\x5a\x5e\x98\x2d\x6d\xa5\xcb\xa9\x6c\x08\xaf\xce\x46\xa6\x7e\x92\xd4\xc0\x1a\x48\x51\x00\x5a\x54\xfb\x52\x75\x09\x87\xa1\x76\x85\x58\xf0\x4e\x21\xc6\x58\x34\xde\xad\xe7\x14\xa7\x09\xa5\x35\xa7\x5a\x91\x95\x54\xc1\x18\xef\xa9\x20\x52\x38\x80\xdc\x96\xd3\x17\x92\x0c\x00\x74\x65\xd6\x16\x5e\xc0\x72\xc4\xba\x57\x14\x23\x43\xd3\xe7\xa6\x43\x89\x79\xea\x5a\x89\xe8\x22\x34\x1c\xdf\x11\x16\x27\x7a\x26\x60\xa5\xe4\x92\xa1\xe5\xe5\x5c\xb9\xc2\xb7\xde\x1a\x85\x5d\xb1\xb8\x1d\x75\x2f\x6a\x47\xdd\xad\x30\xc2\x3c\xc6\xe8\x3a\x52\xa3\x8c\x8a\x6a\x60\x60\xb3\x19\xb7\x13\xfb\x82\xa0\x95\xa8\x71\xe9\x6f\xa0\x60\xc1\x79\xdb\xa5\xcc\x2c\x46\x9b\xc9\xfe\x67\x49\x37\xb5\x3e\xae\x9c\x8a\xd1\x14\xc3\x1c\xec\x37\x42\x70\xe1\xbd\x24\x83\x0a\x2c\x2e\x7d\x18\x16\xb9\x75\xe8\x08\x68\xad\x4d\x56\x1a\x73\x9d\xb4\x73\x69\x14\xf4\x6b\x50\x8b\x55\x3b\x4b\x99\xf1\x32\xed\x1d\xf0\x57\x6c\xf0\x40\x15\x33\x09\x2b\x3d\x9c\xa9\x7f\x50\x39\xbc\x99\x71\x3b\x26\xb9\xcd\xd6\x3e\x97\xb7\x8c\xd1\xab\xc3\x1a\x62\x95\x2a\xd3\xb3\xc2\x9e\x35\x53\x7d\xa1\xb8\xbe\x7a\xf9\x33\x7b\xcd\xbd\x61\x46\x77\x48\xf2\xec\x33\x5d\x5e\xd2\x62\x43\xb5\xca\xb9\x95\x46\x4b\x83\x0d\x9b\x35\x3e\x6f\x0e\x1b\x58\xa7\xbb\xbb\x58\x04\x85\x27\x52\x91\xbd\xa2\x8d\x95\x84\xbd\x27\x8a\x59\x2d\xb5\x46\xcc\x78\x72\x31\x9e\x2b\x58\x91\x21\x33\x4b\xf1\x06\xa8\x7f\x13\xf8\xf2\x0e\x6f\x38\x58\x9d\xea\xf4\x31\xf0\x2a\x8e\x9b\xe9\x2b\x3d\x92\x6a\xc7\xe4\x0a\xeb\xd7\x0d\xd2\xec\x4e\x8b\x3a\x28\x47\x9c\xc3\x73\x50\xfb\x13\x82\x0b\x62\x10\xc2\x38\xb6\x06\xc7\xd0\x7f\xc8\x45\x41\x89\x31\x53\x2a\xec\xed\x53\xa5\xa1\xa3\x91\x48\x2a\x6d\x5e\x3e\x71\x63\x6c\x64\x51\xbf\x4d\xfe\x97\xfd\x6a\x44\x80\xbc\x6f\xc4\xd3\xc0\xd1\xe4\x71\x5b\x47\xdd\xd2\x22\x57\x13\xbe\x07\xfa\xda\xfc\xd8\x97\x28\x24\x81\xe6\xc4\xc5\x4a\xe0\x95\x02\x07\xb5\x0f\xe0\x54\x3a\x66\x2e\xd4\x8b\xf3\xa8\x01\x26\x2d\xfc\x05\xde\xfd\xae\xc6\x6d\xdc\x13\xdc\xfd\x1e\x70\x47\x6c\x2a\xcf\x23\xf6\x2f\xb3\x09\xf8\xf5\x97\xd9\x69\x1a\xd9\x3d\x78\x1d\xc8\x50\xe9\x70\xde\xa6\xa5\x5f\x4f\x2b\x52\x7c\x2a\xd9\x07\x29\x1c\xf4\x21\x91\xb2\x1c\xa2\x8b\x00\xd9\x94\xa3\x94\x58\x72\x46\x1e\xd1\x0d\xf0\x66\x44\x3b\xf2\x56\xfa\xe0\xce\x39\x16\x1b\xc0\x7e\x8e\xa9\x97\x84\x75\xf5\xcd\x74\x51\xe3\x31\xb5\x6a\x03\x4b\x14\x4b\x5b\x9f\x8d\x75\xf5\xce\x86\xad\x8b\xd6\x5b\x10\xeb\x88\x4d\x72\x5f\xab\x98\xf0\xdf\xfc\x1d\x0d\xa6\x2b\xe8\x99\x9a\x34\xba\xf2\x95\xed\x66\x51\x2b\x0b\xe9\xed\x2e\xde\xbd\x5f\x1e\xd2\x98\xe1\x4a\x8a\x07\x63\xeb\x42\x69\x81\xc1\x35\xdb\x75\x9f\x3a\x7e\x9f\xcb\xca\x4a\x75\x3d\x7f\x02\x53\xc1\xd7\xaf\xf9\x49\xaa\xc2\x69\x2a\x48\xba\xe7\x30\x52\x34\xde\x60\x8f\xfe\x83\xa3\xee\xed\x93\x95\x44\x45\xbd\xe3\xca\x5e\x40\x2f\xb5\x6f\xe7\x93\x90\xb4\x39\x55\xc5\xcb\xe9\x36\xb1\x56\xd0\x27\x17\x17\xae\xc7\xae\x6d\x5d\x29\x93\xec\x3c\x31\xe7\x0a\x52\xbd\x2a\xce\x2b\x25\xec\x2a\xa6\x41\xa3\x92\xfc\xaf\x8a\x92\x44\x8b\x2f\x4c\x4e\xb5\x75\x50\xb7\x14\xc5\x9a\xd6\x35\xa4\x2c\xe3\x07\xb0\x7c\x0a\xaa\xf1\xf7\x27\x82\x48\x7e\x06\xc0\x26\x85\x82\x75\x52\xb4\x18\x6e\x3c\xde\xaf\x35\x0f\xec\xad\x76\x4d\x52\xaf\xdf\x26\x97\xf4\x19\xa0\xef\xb4\x5f\x75\x9e\x2a\x8e\x90\x69\xcb\x73\xcc\x35\x68\xc6\xf5\xd2\xe6\xd4\x40\xd1\x6f\xa0\xea\x3a\x65\xd4\x3c\xd8\x0c\x83\x27\x03\xfa\xf8\x00\x1e\xd9\x02\x95\xba\xb8\x57\xc9\xb5\xc0\xb0\xd2\xd6\xd4\xba\x10\x7e\x55\x33\x5f\x15\x60\x23\xa8\x39\x7d\x02\x4d\x8d\x86\x7a\x7d\x85\x95\x29\x84\xcd\x61\x56\xad\xe0\xb4\x63\xd4\x06\x94\xad\xaf\xa4\x27\x7b\x31\x9f\xf6\x55\xe2\x7f\xcf\xdd\x61\x44\xd3\x10\x1e\xba\xa7\x28\x2d\x68\xb2\x31\xd5\x47\x6c\x67\x8f\x2e\x82\x3c\x12\xfb\x91\x2c\xba\x0a\x3d\xa5\x0c\xdc\x98\x4b\x06\x49\x9d\x2e\x5b\x99\x14\xd6\xbf\x6e\x1c\xd6\xc2\x4c\x5d\xea\xd0\x3f\xe6\xaa\x33\xd7\xd5\x39\x14\xe9\x3a\xd0\x7e\xb4\xed\x26\x5b\x54\xc6\xd6\xcd\x20\x8e\xcd\x5f\x52\x9b\x29\x72\xeb\xb8\x70\xf3\x84\xf1\xac\x44\xf6\xba\xac\x2d\xea\x8c\x78\x9b\x2b\xee\x91\x33\x30\x73\x5a\xbe\xc8\x24\xb0\x45\x02\x1e\x85\x44\x19\xf4\x59\xc4\x39\xfd\x54\xe7\x57\x4b\x01\x14\xf6\x7e\x1b\xab\xc5\x3c\x3e\x1e\x6e\x92\xce\x9b\x22\xaa\x99\xea\xa2\x43\x91\xc9\x6b\x96\xfa\x01\xd7\xe9\xeb\x8b\x57\x70\x46\xdd\x26\x4c\x79\x59\xa7\x8c\xfd\xa1\x1e\xd0\x0c\xac\x63\x67\xc2\xb0\x45\x14\x92\x86\xa7\xae\x98\xf4\x68\x9e\x5e\xd2\x53\x3e\x73\x89\x00\x9a\x47\x5e\x6e\x51\x2b\x0e\xdd\xbc\x0b\xff\x21\x2f\xc0\x5a\xbf\x26\x2e\x0c\x16\xb2\x62\x77\xaa\x72\x6f\x43\xab\x4b\xf5\xd2\xe3\xb6\xf6\xc3\x68\x0f\x4b\x0f\xd3\xd6\x6a\xaf\x2d\x8a\xaa\xde\x27\x8a\x7b\x43\xd5\x4b\xbc\x9a\x7a\x51\x47\x74\x78\x9b\x24\xf1\x35\xae\xb6\xef\x66\x08\xda\xe0\xe3\x24\xe1\x42\xf3\x43\xd3\x76\x09\xcb\xa3\x97\x93\xa4\xb2\x01\x5c\xab\xb2\xa2\xff\xa5\x40\xea\x92\xb5\x95\xe8\xed\x5a\x8f\xa6\xce\x3d\xfb\x51\x32\x99\xe0\x39\x46\x0f\x21\xb6\x65\xfd\x72\xd3\x60\x40\xd8\xdc\xd0\x9b\xd2\x64\x76\x54\xa3\xd8\x7f\x08\xe9\x91\xa6\x72\x6c\x23\xff\xf6\xc0\x32\x85\xb5\xb0\x0e\xa4\x04\x7a\xb7\x80\xa1\x6c\xb9\x15\x45\x77\x4c\x8b\x18\x66\x20\xc6\xeb\x5e\xce\x3b\x4e\xe7\x9d\x58\xc8\x1d\x0c\xdc\xd4\x8a\x9a\xcf\x56\xaf\xc7\x1f\xf6\xdc\xe9\xcd\x56\x69\xe3\xab\x9b\xff\xc5\x3b\xbb\x9e\x18\xf9\xd6\x15\xc5\xca\xd1\x3e\x5a\x9e\xfe\x55\x06\x3c\xd4\x59\xab\xee\x9a\x01\x14\x3d\x72\x8f\xba\x97\x36\xcd\xa8\x23\xfd\x8e\x69\xd5\xe0\x1d\x97\x95\xa5\x37\xcc\xde\x4a\xdd\x6d\xe8\x04\x45\x7a\xb0\x89\xd7\x8d\xdd\x14\x39\x6a\x18\x72\xef\xeb\x07\xd8\x9d\x51\xf0\x86\x4d\x1b\xf4\x34\x2b\x76\xc5\xbe\xdb\xb2\xa4\x3c\xee\x7d\xe1\x93\x16\xc1\x07\x33\x12\x1b\x62\xce\xd8\x6f\xf9\x60\x3a\xcb\xa7\x18\xa8\x35\x97\x8d\xa5\xd2\xa2\xd3\x1d\xdd\x1e\x9e\x02\x42\x77\x2a\xc7\xee\x83\x77\xe1\xbd\xd3\xa8\xca\x70\x1b\xbf\x2d\x5a\x24\x18\x6b\x5e\xfb\xc1\x28\x5d\xd3\xb1\x1a\x76\xe2\x37\x99\xa3\x7c\x04\x7b\xa3\x5b\xf7\xb9\x13\x01\xfb\x31\x61\xb9\xb2\x75\x99\xd4\xec\x01\x0d\x53\x27\x87\x7e\xa1\x21\x88\x97\x25\x51\xc1\xe7\x37\x58\xbb\x51\x6a\x06\xb3\xc0\xca\xb6\xc3\x61\xec\xa7\x54\xb2\x3b\x92\xd4\x94\xb6\xe0\x0d\x8c\x06\x02\x44\x87\x2f\xdc\xec\x87\xcf\x5e\x48\xe6\xf1\x63\x7a\x21\x2e\xa4\xdf\x67\xae\x5b\x61\x3a\x00\xf8\xd9\xd7\xf8\xfe\x3b\xfc\x72\x80\x7f\xb9\xa9\x35\xcd\x11\x84\x63\x69\x0a\x1d\x36\xa8\x8d\x90\x0e\x16\x0a\xca\x2a\x83\xf9\x58\x75\xc4\x05\x1b\x2f\x3a\xe1\x63\x42\xad\x17\x43\x1d\x2f\x91\x53\xe4\x36\xfe\x9a\xc1\x9a\xd4\x54\x68\x1f\xc3\xb2\x93\xe2\x50\x95\x01\x6c\x71\xca\x97\xe7\xaf\x75\x26\xc8\x30\xf0\xba\x34\xe9\x63\x04\xe9\x30\x56\xe8\x8f\x3c\x42\x0d\xf4\x5c\x76\xdd\xd8\x52\x91\x32\xae\xdc\x70\x33\x52\xf1\xe0\xe4\xd3\x67\xf4\x8c\xbd\xfe\x17\xaa\xf5\x3c\x9c\x4a\x1f\x44\x46\xbe\xe9\x4a\xfe\x40\x3e\x30\xf8\x3d\x3a\xc4\x28\x13\xc7\x26\xaf\x55\x64\x83\x06\x72\x10\x2f\x16\xc6\x9c\xc6\x37\xe8\x3b\x17\x2b\xea\x04\xf8\x26\xc6\xe4\xdb\xb0\x7a\x3e\x6c\x76\x26\x7b\x93\x13\x00\xc2\xca\x97\x63\x00\xb4\xb8\x81\x27\x49\x46\x69\xa1\x2d\x98\x1a\xed\xe4\x1f\x3d\x6b\x5f\xc0\xf6\x33\xc1\x71\x63\xd1\x21\x15\x6c\xf4\x18\x58\x95\x9b\x83\x85\x49\x1c\xda\x13\x09\x3e\x1f\xab\x19\xd2\x0f\xce\x64\xd9\x2f\x2a\x46\x45\x6f\x1e\xf2\x8f\x47\xc1\xaf\xbf\x3f\x3e\x94\x52\x1b\xf3\xf7\x50\xa0\x24\x08\xcc\xf2\x6d\xc1\x65\xae\x82\xd1\x4d\x2c\xc3\x46\x69\xf1\x84\x90\x72\x99\xf0\x2c\x1a\x05\xb0\x7a\xd3\x7b\xd0\x31\x07\x3b\x53\x85\xbf\xb4\xa4\xfd\xc6\x38\xb9\xb7\xa6\x8f\x36\xae\x8c\x93\x34\x0e\xf2\xf0\x0e\xcc\xd3\xd7\xaf\xda\xf6\x37\xb0\x77\x9c\xac\xb7\x31\xbd\x4b\x44\x61\x07\xce\xce\xc2\xed\x6b\x78\x43\xa7\x3b\x59\x54\xf2\xbd\xa0\x0f\x86\x14\xbf\xff\xd1\xce\x62\xc8\x7f\x97\xaa\x5c\xeb\x7e\x3c\xf0\xd3\x7f\x7a\x05\x8a\x31\xe3\xd1\xe0\x65\x7a\x63\x11\x00\x55\x2a\x21\xbc\x76\x43\xf0\x86\x87\xe5\xa5\xff\x7c\x0c\xb4\xa4\x43\x7e\xd1\x8c\xf0\x1f\x6c\x59\x51\x94\x61\x1a\x61\xcb\x6d\xf8\x9b\xe8\xac\x37\x08\xee\x4d\xfc\x55\x14\xdf\x3e\xfb\x1a\x37\x48\xfc\xeb\xeb\xaf\x9e\xe1\xff\xef\xd7\x2e\xbd\xe9\x56\x7f\x45\xa5\xe9\xb7\xf9\x5d\xf2\x45\x0b\xee\x2a\xac\xaf\x85\xd9\x8c\x3f\x4d\xf3\xe4\xfe\x40\x88\x6c\x32\xee\xba\x88\x6d\x27\xd0\xa6\x6f\x07\x99\xdf\xa9\x24\x4e\xc1\x03\x28\x6e\xac\xb5\xa5\xbb\x9d\x4b\x52\xc4\x9f\xa8\xed\x39\xba\xfa\x2d\xf4\xe4\x62\xb5\x78\x4e\x33\x2f\x0f\x26\xb7\x85\xd1\x65\x75\xeb\xa1\x0b\xcb\x50\xe9\x50\x56\x8c\xb2\xa9\x72\x3b\xf0\xc9\x17\x71\x09\x8a\x67\xbc\x5f\xbd\x06\x7d\x92\xa5\xe3\x24\x1e\x95\x03\x03\xcd\x0b\xd7\x68\xd3\xc9\x14\x55\xfc\xdf\x5a\x73\x5b\xac\x6c\xad\x12\x6a\x4e\x15\x16\x3f\x47\xdd\x86\xb6\xa9\x9b\x3a\xc2\x89\xc7\x43\x50\x7c\x33\xca\x60\xa9\xdc\xce\x14\xdb\xda\x04\x55\xfc\x7c\x01\x75\xdb\xa1\x14\x75\x95\xa2\x22\x38\x77\x26\xac\x8e\x4f\xa6\x1a\xef\x04\x4e\x1c\xcd\xe6\x43\x3b\x64\x42\x35\xf7\xd5\xe5\xd7\x58\x36\xd4\x8c\xad\xeb\x13\x5c\xfe\x56\xbd\x59\xf8\xec\x0b\xb4\xf9\xea\x05\x90\xbe\x78\xd6\x55\x19\xca\xb5\xf0\xb3\x0f\x01\x77\x4c\xa4\x2c\x71\x20\xae\xb5\x28\x4d\x53\x3a\xf4\x36\xb0\x08\x53\x3c\x9a\x25\x61\x5e\x4d\xc1\xc1\x13\xbf\x5c\x81\x40\x2b\xc9\xf6\x82\xed\x04\xb5\x98\xdc\x33\x71\x5f\xbf\xc7\x6c\x23\x56\x37\xb9\x56\x8b\x72\xbc\xec\x64\x59\x7a\xf4\x18\x15\x05\x02\x59\xcc\x69\xb6\x08\xaf\xbd\xa1\x84\x49\xb9\x85\x54\xdb\x5b\x4a\xe4\x4b\x98\x5f\xc5\x65\x1e\x62\x75\x29\x74\x78\xc3\xa2\xc8\x46\x31\xad\x5a\xe3\xc9\xdb\xce\xeb\x26\x75\x96\x2f\x9b\x16\x4e\xde\x2b\x89\x0b\x36\xa2\x71\x72\x5c\x5b\xcc\xd7\x4b\xd9\xb1\x1c\x03\xd6\x4c\x6b\x67\x75\x7b\xb8\xeb\x11\x00\x59\xab\x02\x99\x6e\xac\x4d\x63\x35\xb2\x4e\x3b\x1f\x80\x57\xbf\x65\x30\x2f\x65\x43\xa0\x17\xe9\xa7\x4a\x5a\x35\xfc\x8e\xb2\x56\xb5\x95\x87\x81\x43\xe8\xa1\x4e\x07\xbf\x04\x89\xba\x6c\xb8\x93\xcf\xc4\xe1\x19\x81\x2c\x98\xf9\x25\x31\x9e\x82\x88\xae\x73\xad\x95\x1e\x9c\xe9\xe6\x34\x8c\xc6\x97\x07\xe6\x31\x0e\x20\x93\xee\x93\xa0\xd0\x7e\x82\x61\x8d\xf6\x41\x1f\x15\x13\x2c\x71\xbb\x29\xdb\xd2\x73\xe8\x13\xa5\x68\x07\x55\xf6\x5b\x16\xed\xa9\xe8\x79\xde\x64\x3f\xda\xc6\xd6\x7a\xe7\xe5\x0c\x46\x0d\x39\x99\xb3\xf5\x1d\xb8\x97\x5f\x49\x5b\x9b\x98\x51\x76\x13\xc4\x66\xe2\xda\x59\xe1\xc9\xa2\x5a\x73\x6d\x3d\x2e\x3d\xc6\x2e\x6f\xad\x61\x49\xca\xb4\xb4\x5d\xf6\x31\x97\xd4\xed\x7e\x37\xfe\x68\x7a\xe6\x82\x69\x93\x47\x95\xbc\x53\x9f\x8c\x92\x6c\x59\x97\x2f\x03\x46\xbd\x19\x54\x95\xbc\x0d\xed\x1e\x52\x43\x90\x1b\x6a\x6f\xad\x05\xaa\x59\x5f\xb6\x1e\xe6\xb4\xfa\xee\x68\x8c\xf2\x0d\x41\xe2\x5a\x5d\x3e\x60\xda\x97\x2d\x22\xd2\xda\x4b\xe1\x42\x47\xc3\x24\xa7\x76\x5c\x6b\x6e\x6c\x3c\x59\x91\x9b\x55\x24\x85\xea\xf4\xe3\x2e\xa1\x13\xec\x4c\x69\x00\x9f\x51\x0f\x22\x17\x0b\x49\x05\xd5\x5b\xa8\xa9\x9f\xd7\xa6\x4f\xd7\xf6\x68\x7a\x87\x3d\x38\x39\xf9\x58\x97\x9d\xa8\xac\x36\xee\xe5\x2b\x84\x7e\x20\x12\xeb\xe9\x60\x4b\xfd\x5f\xa2\xca\x71\x53\x83\x62\xd6\x1f\x36\x9d\x5c\x5f\x26\x66\x42\x4a\x4f\xbd\x62\x41\xb6\xd9\xcd\x58\x4f\xde\xd8\x6e\xe2\x51\x30\x33\x4b\xad\x22\x0d\xa9\x53\xd6\xe3\xd0\x9c\x8d\xcd\x69\xd0\x3c\x72\xa3\x0d\x08\xb0\x9b\x4e\xbf\x34\x9f\x6c\xdc\xaa\xd6\x15\xa5\xa3\x1b\x0c\x96\x8d\x88\xc1\xe9\x00\x7f\x92\x76\xe5\xc8\x37\x34\x56\xdf\xd2\x9a\x6c\x9c\xd4\x23\x7d\x97\x91\xc3\x83\x54\x6b\xbc\xe0\x6f\x8d\x4a\x9b\x2d\x8f\xfa\x89\x43\xd3\xe9\xcb\xc8\xb9\xfa\xe9\x9f\x91\xe5\x62\x0f\x85\x78\xf8\x11\xa7\x74\xa0\x3d\x2b\x63\xee\x58\xe8\x54\x0e\x73\xbc\xf3\x5c\x5d\xc7\x05\x06\x17\xe9\x4c\x67\x9a\xf8\x6d\x94\xc4\x7d\x27\x19\x20\xce\x15\x78\xcf\xe2\x36\xfb\xa0\xea\xbf\xa3\x09\x80\x05\x3b\xf8\x7a\x81\x3e\xcf\x43\x18\xc3\x38\xc1\xac\x48\x5b\x23\x16\x36\x4b\xd7\x6d\xc4\xbd\xc1\xfd\x77\x55\xfa\x2b\x4c\x90\x86\x9d\x74\x59\xa2\xbd\x8d\xc6\x2f\xb3\xa2\x74\x32\x68\x3d\xaa\x09\x9d\x7c\xee\x38\x4e\xe1\xc0\x99\x82\x4e\xd6\xe4\x51\x43\xc1\x9d\x5a\x3c\xb5\xb3\x18\xcf\x29\xaf\x36\x6f\xde\xf1\xc7\x23\xb9\x5e\x8a\xff\x03\xcf\x11\x03\xb8\xa6\xa1\xc6\x73\xf3\xc4\x26\xbc\xd2\x50\xb8\x24\xf1\xcc\xab\xa1\x7b\x3a\x7a\x5c\x24\xcc\xe6\x7e\x4a\x41\x9d\xaf\x0e\x9d\xef\x9f\x99\xbf\xe9\x1e\xc5\x2d\x5e\xb8\x76\x2f\xd9\xe2\xff\x0a\xba\x69\xdb\x04\x0b\x6c\xea\xe4\x6c\xff\x1a\x14\x89\xbd\xa2\xf8\x1c\x58\x5d\xd8\xcb\xba\xda\xe1\x6c\x00\xfe\x3b\x8a\x8a\x80\x1f\x1d\xe9\x4e\x79\x54\xef\x49\x43\xdb\x0c\x68\x36\x1e\x57\x6a\x0e\x30\x90\x6a\xea\x78\x07\xbf\xd7\x89\x7e\x19\x7e\x50\x5e\xcc\x9e\x25\x55\x2f\x15\xd4\x6b\x59\xaa\x3d\xd5\x98\xda\xa7\xe1\xbd\x2a\x69\xd0\xe6\xba\xf3\x72\x14\xd4\x76\x4a\x29\xc3\x5f\xde\x28\xe7\xee\x37\xdd\x65\xd1\xe7\x53\x26\xcc\x48\x67\x93\xb5\xdd\x59\xbf\x86\x23\x38\x71\x70\xdb\x53\x4d\x9e\x0f\x30\x14\xba\xaf\xd5\xbc\x99\xcb\x36\x57\x6b\xf0\x73\x6d\xf5\xd0\x63\xa7\xc9\xda\xbd\x7b\x8d\xd3\xed\x8f\x77\x55\xab\xae\xa6\x67\x31\xed\xdf\x4c\x07\x5d\x4b\x58\x19\xa1\x72\x94\x9d\x67\x1f\xef\x07\x42\x1d\x6e\xf3\xe2\x56\xb1\x32\xc7\xd0\xa6\xec\x95\x2e\x4e\x82\x2f\xd6\xa1\xb6\xd5\xaf\x9a\x5c\xc2\x6d\x31\x7b\x93\xac\xa2\x5d\xe6\xb2\xb2\x99\xf7\x93\xa8\x60\x60\x47\x0e\xbd\xcb\xce\x2e\x50\x0c\x70\x3d\xc8\xbb\x2e\x11\x61\x37\x3c\x4e\xad\x45\xd2\x25\x19\x35\xbe\xfb\x65\x08\x7a\x49\x01\x0d\x27\xb5\xa5\x9a\xab\x24\xb4\xeb\x05\xd9\xcd\xf9\xf2\x1b\xd6\xb1\x21\xe7\xee\x23\x9e\x18\xf1\x0d\x4f\x63\x60\xb5\x7a\x71\x13\xd8\xea\x30\x9b\x01\x99\xa6\xff\xa6\x48\x07\x8c\x99\xcd\xaa\xbd\x31\xb1\x19\xee\x40\x5e\x3b\x6a\x3a\x8c\xc3\x73\x6e\x47\xbc\xc7\xa9\x44\xf0\x82\x67\xcf\x2e\xcf\x5f\x9e\x1f\xc1\x5e\x35\xd2\xd1\xc6\x3b\xf0\x49\x43\x49\xb7\xc1\x14\x15\x94\x37\x1e\x25\x2e\xe8\xc8\xbf\xe6\x0e\x3e\x0b\x6c\x51\x07\xfa\x45\xfa\xf7\x1f\xf9\xf5\x7a\x1a\x4e\x31\xd0\x1f\x65\xbc\xa8\xd9\x5f\xe8\x19\x51\xe8\x75\x80\xb7\x5d\x8c\x00\x69\x04\x88\x36\x7a\xea\x36\xef\xbe\xd6\x55\xa3\x0f\xa8\x0c\x2f\xd7\xe2\x25\xb8\x54\x27\xf6\xdc\x97\x84\x8a\xc7\xad\x8e\x59\x19\x2b\x6a\x1f\xeb\x4a\x39\x6f\x5d\xdd\x07\x83\x0a\xe8\xfb\xed\xb3\xe8\xb2\x04\xdc\xb2\x7b\x60\x00\x77\x6c\x39\x33\x74\x2f\xa7\xfc\x98\xab\xfd\xc6\x23\x90\x2f\xee\x11\xe5\x94\x0f\xd6\x57\x5a\x53\xd3\xb6\x9c\x7b\x43\x4e\xf0\x2a\x3e\x06\xa2\xe9\x13\xee\x1a\x0e\x53\x80\x71\xa7\x03\xf5\x5c\x15\x11\x2b\x43\x1f\x72\x50\xdc\xf9\xe9\x20\x89\x3f\x98\x60\x3f\xdb\x84\x61\x90\xa8\xf4\x1a\xfe\x30\x4a\x63\x00\x36\xdc\x0d\x06\xcc\xac\x36\x7d\x5a\x38\x2a\x40\xb4\x08\x45\xb5\x05\x0c\xa2\x25\xa8\x0b\xc6\x26\x8d\x14\xb8\x1b\x64\x5c\xff\x19\xc1\xe6\x09\x0e\xbe\x3c\x0c\xce\x89\xb0\x06\x52\x77\x80\xdb\x38\x44\xda\xc7\xb9\x68\x91\x7a\xb4\xbb\x2e\x3a\xa6\x46\x95\xa3\x8d\x4d\xdd\x65\x8c\x42\x38\x44\xea\xf4\x71\x7c\x63\x52\xeb\x56\xd7\xe5\x53\xb7\x6d\x27\xd1\x78\x8d\x0b\x6d\x47\x63\x99\x58\xb8\x8e\x82\xcb\x9f\x7e\x1e\xda\x07\xf6\xa0\x9e\x68\x74\x96\x4a\x06\x82\xae\x6e\x40\xf1\xc7\xf3\xf1\xa9\x76\x12\x2e\xf5\x26\x69\x86\x68\x8b\x03\x7e\x96\xa5\x4f\x46\x96\x9a\x05\x09\x2d\xa5\xf9\x82\x64\x0b\x87\x3a\x52\xe4\x14\x0e\x99\x2b\x47\xaf\x55\x7e\xad\xac\xcd\x40\x2c\x02\x1b\xe2\x2e\xab\x9e\x14\x02\x49\xae\x39\x22\x4a\xde\x22\x99\x01\x54\xac\xd6\x47\xab\x42\x28\x29\x2d\x6a\x8f\x92\x2d\x8d\x72\x70\xa4\xe3\x5b\x65\x8e\xe8\x9d\xe3\x33\xdc\x72\x6c\x0d\x7c\x97\xe3\x62\x87\x60\xfa\x48\xee\x8c\xc5\xc5\xf2\x68\x28\x09\xce\x9a\xea\x94\x38\x18\x17\x5f\x21\x6f\x35\x4b\xea\x36\x8a\x9f\xcd\xf1\xa5\x03\xad\x9b\x3d\x62\x01\x72\x20\xc5\x8c\x11\xa2\x60\x5c\x0b\xe1\xf0\x10\x6f\xb0\x40\x7d\x15\x13\x67\xd8\xee\xb1\x44\x48\x08\xbb\x81\x2e\x5a\xc9\xb7\x30\x19\x56\xa7\xa2\xb1\xcc\xd7\x6d\x35\x6f\x98\xdd\x91\x52\x53\x2c\x06\x01\xa6\x98\xd4\x82\x60\x8c\xae\xf0\xee\xa5\xc2\x6c\xa6\xd1\x2c\x2f\x90\xeb\x83\xf0\x43\x78\xc8\xef\x8f\xb2\xe9\x7d\xcd\x44\x15\xc1\xf1\xad\x6e\x26\x04\x95\xf5\x9a\x23\x42\x3b\xc6\x5a\xa4\x83\x31\x1c\x86\xc1\x52\x9c\xae\x85\x20\xe4\x94\xa6\x00\xca\xbb\x47\xec\x78\x0f\x49\xb2\x15\x92\xfb\x56\xa7\x27\x62\x1b\xb7\xfa\x9d\xcd\x34\xa8\x5c\x06\xa1\xf1\xb0\xc6\xe0\x60\x44\x55\x2e\xfd\xe3\xbc\x2a\x6c\xdf\x52\x76\x9d\x73\xb4\x56\x78\xf7\x35\x78\xff\x2a\xc2\x32\x2e\x38\xf7\x89\x1b\x9f\x9a\x70\x11\x8b\x85\xdc\x43\x96\x6f\xe4\x96\x6f\x48\x81\x17\xeb\x71\x57\x3d\x1f\x7a\xf7\xd2\x44\xd5\x6d\xff\x6d\xf4\x08\x66\xd7\x37\x55\x56\xe3\x9c\x15\x2d\x9f\xe9\xfb\xd9\x7c\xa1\x1b\xf6\x09\x18\xf7\x1a\x6d\xc4\x92\x21\x1b\xfb\x45\xbc\xab\x4e\x93\xa8\x22\xfc\x6e\xa8\x2b\x71\x04\x1c\xd3\xb1\x1f\xe9\x97\x50\xdb\x1f\xfa\x00\x88\xe3\x97\xeb\x7a\xcf\x3a\x79\x85\x4f\xb3\x03\x4e\x9f\xd2\xdb\x90\x93\x9a\x72\x07\x83\x81\x1f\xd1\x5c\xec\x3a\x4e\x61\x8f\x2a\x71\xed\xee\xf1\x9f\x7b\x94\x50\xc6\x45\x5d\xb0\x5c\x59\x56\x3a\xc9\xf5\xa5\x4e\x3c\x73\x82\x05\xe2\x79\x3b\xc9\x9b\x85\xbe\x06\x3f\xa6\xb0\x8f\x61\xf5\xd8\x64\xdf\xed\xe9\x8d\x6d\xcf\x0c\x80\xaa\xe3\xb0\x0a\x87\xd1\x27\x9b\x9a\x95\x10\xad\x88\x74\xae\xa6\x68\xe6\x85\xbc\xd3\xa2\x61\x47\x13\x1f\x99\x74\xd2\xf3\xb1\xec\xc2\x97\xc3\xa0\xc9\xbe\xa3\x4d\xd8\x2c\x6a\x46\xc7\x4b\xef\xb9\xc4\xb3\xa6\xea\xda\xb8\x30\xfd\xe0\xd1\x65\x35\xa9\x17\x7c\xf4\x8d\x56\x17\x66\x4a\x6a\x7c\x6d\xd0\x83\xba\xbc\x13\x14\xc1\x00\x3e\x3d\xf8\x12\x37\x3e\xe4\xda\x38\x9b\xa5\x51\x5b\xf5\x00\x9b\x14\x21\x59\x1c\x4d\xfd\xe8\xfd\xc5\x63\x4e\x78\x64\xc5\xd8\x78\x3a\x7f\x59\x5b\x41\x60\xca\x9d\x11\x5c\x5a\x9e\x4d\x51\x32\x46\xa1\xb4\x23\x70\xa9\x20\x5e\x0f\x34\x16\x81\xa6\x6f\xd8\x83\x20\xfc\x59\x1b\xb7\x24\xdf\x66\xe9\xe2\x71\x2d\xef\xec\x30\xa2\xcf\xc6\x38\x95\x44\xa1\xaf\x07\x3a\x69\x63\x18\x78\x3c\xd5\xf0\xbd\x30\x7c\xb3\x11\xd2\x2a\x73\xea\xe7\xc3\x8c\x88\x5d\xb5\x9a\x35\xed\x19\xa3\xba\xd0\x3a\xea\x05\xbc\xd5\xa2\x47\x92\x55\x16\x37\x0e\x23\xc8\x14\x5c\xd1\xd0\x29\x47\xea\xc5\x49\xbb\x7c\xf8\xd4\xad\x47\x35\x99\xa2\xad\xae\x7d\x5b\x2c\xb8\xae\xc8\x02\xa7\x18\xad\xdd\xb8\xda\xc4\x06\xb1\x70\xb7\x66\xd7\xf0\xd5\x87\xd9\x76\xea\xb8\x7c\x2a\x53\x56\xb1\x39\xc5\x1f\x99\x1c\x7d\x70\xb2\xd4\x8f\xc7\x3e\xe1\xb5\x5d\x58\xc8\xb5\xcc\x42\xae\x65\x9a\xe4\x88\x2e\xab\xa5\x37\x4f\x6a\x07\x16\x1a\x0f\x7d\x9e\xb5\x10\x12\xf6\xbe\x47\x5c\x16\xbe\x0c\x89\xfc\xcd\xa1\xbe\x59\xb2\xa8\xe7\xe9\x5e\x48\x15\xae\x37\xec\x55\x69\xc9\x5f\x41\x62\x42\x3f\x6b\x7b\xa0\x53\x3b\xf9\x8e\xda\xde\xaf\xbf\xef\x21\xad\xf6\xd0\x0a\x63\x52\xee\xad\x51\x76\xfc\xc9\xab\x48\xbe\xc5\x67\xcb\x08\x51\xeb\x12\x96\xad\x72\x65\x71\xf1\x87\xd1\xf0\xfe\x40\xbf\x2e\xb5\x86\x29\xc6\x95\xa2\x21\x16\x17\xce\x5e\xf0\xe3\xeb\x57\x36\xf7\x19\xb5\x3f\x2b\x10\xf7\xe7\x36\x6e\xd0\x60\x12\x3c\xa3\xbf\xfb\xf0\xa3\x3e\x6b\x15\x47\x78\xf6\x32\x1b\x0d\x52\xb2\x05\xdf\xc0\xff\x77\xc5\xc5\x4e\x32\x36\x3e\xb4\xce\x73\x03\x0d\xec\x7e\x84\x64\x01\xb8\xd6\xa8\xa7\x1c\x9b\x4b\x20\xbb\x49\xf8\xbc\x43\xf2\x50\x29\xd8\x95\xe0\x34\x1c\xd7\xd5\xeb\x24\xfc\xa0\x6a\x0a\x56\x52\x42\x6a\x41\x65\x2c\x93\x4a\x59\x04\x68\x65\xa0\x31\xa7\xe9\xd2\x50\x79\x19\x97\x85\x49\x8b\xa0\x77\xdb\x40\xb7\x06\xea\xb1\x36\x50\x4b\x3d\x53\xcf\x28\xc4\x9a\xec\x53\x31\xab\xc9\x4a\x9d\x67\xa1\x12\xe6\x06\x72\x33\x12\x46\xa0\xb4\x99\x9a\xde\x6b\x03\xf5\x07\x96\x5b\x77\xce\x21\x1b\xad\x74\xe2\x54\x68\x80\xc4\x6c\x1d\xf0\x2a\xda\x6f\x5c\xfd\x93\x70\xca\x7d\xf6\x3d\x33\xcd\x09\x97\x2c\x62\xaa\xbd\x07\x6e\xbf\x6f\x48\xff\xd9\x24\xab\xcf\x73\x51\x25\x96\xe5\x30\x9c\xa3\x5e\x1e\x86\xf9\xc4\xaa\xe7\xf3\xf9\x0e\xb0\x62\x3a\xa8\x67\xd0\x59\x72\xe8\xa8\xe0\xe1\x7c\xb1\xa8\x24\x9a\xf0\xf2\x0e\x8e\x6d\x59\x67\xf1\x0c\x45\x31\x8d\x81\x24\xe0\x39\x53\x28\x48\x3e\xe1\x3e\x21\xe4\xcf\xf3\xc7\x6b\x96\xb3\x81\xc7\x2f\xf1\xc6\x1d\x49\xb3\x7b\xac\x88\xd8\x79\xfe\x77\xe9\x00\xe1\xe4\x0e\x2c\x18\x84\x93\x8e\x8f\x6d\xc1\x98\x4e\x2d\xc8\xaf\x5c\xfa\x2f\x9b\x50\xc4\xb0\xe6\x7e\x6b\x46\x47\x51\xfd\xc0\x5a\x9e\x5d\xba\xf2\xe0\x8e\x56\x01\x6c\x18\xcc\xc0\x33\x87\x7d\xb6\x6a\x92\xd0\xcb\x68\x8b\xd3\x6b\xb2\x5c\x79\x44\xfa\x47\x9b\x53\x84\x37\xac\xc8\x66\x6d\xb6\xc0\xd2\x2c\x9b\x0e\xda\xa8\x6b\x1a\x23\xc9\xf1\xa6\xb9\xd3\xa0\x73\x7a\x74\x3a\x5a\x19\x4f\x54\x75\xdc\xbb\x41\x87\x37\xa0\x0f\x16\xef\x54\x92\x1c\x60\x61\x45\xc5\xd5\x5e\xdc\x93\xc6\xdc\xc9\x94\xb7\x22\x5a\xbb\xf2\xd0\xc6\x44\xbc\x45\xce\x91\x18\x67\x5c\x5c\xe5\x78\x3d\xaa\x72\xc8\x8a\x3f\x51\x85\x14\xfc\x68\x5e\x08\xe6\x2d\xdf\xaf\x0a\x6d\x99\x70\x5c\x81\xcd\xbb\x7a\x35\xca\x47\x89\xaf\x1e\xd6\xf8\x95\x05\x8e\x0e\x8c\xf3\xea\xdd\x64\xfa\x09\x5e\x94\xfb\xeb\x06\x3c\xb6\x15\x66\xdc\x88\xa7\xce\x3c\xca\xd1\x62\x17\x4f\x37\xda\xb0\xb7\x6e\xc8\x61\x4c\x35\xad\xe9\x14\x76\x6c\x70\x6a\xa3\x29\x3c\x5d\xcb\xb8\x8c\x16\xfc\x34\x19\xc0\x03\x07\xa3\xb6\x16\x11\x7e\x4b\x6d\xca\xc7\xc1\x00\x96\x23\x0c\x3f\xfd\x74\x92\x80\x2b\xf3\xf3\xcf\x12\x0f\xeb\x16\x0e\xdf\x12\xc5\x78\x69\x9f\x71\x2b\xe0\xdf\x4f\x55\x9f\xf6\x16\x17\x59\x5e\x3a\x81\x96\xca\x55\x5c\xaa\xca\x4b\x09\x9e\x43\x27\xd5\x7d\x36\x4d\xe4\x66\x3b\x67\xc4\x45\xb5\x5b\x7e\x54\x8c\xfc\x2e\xcb\xa5\xff\xa5\xe9\x6f\xeb\x8f\x8d\x36\xb5\x74\x53\xb0\xa5\xf3\x7b\x9b\x50\x95\xe1\x7c\xf4\x67\x69\xfc\xaf\x99\xd2\xd6\x83\x7b\x33\xd8\xfc\xdd\x7f\xed\x78\xa4\x41\xdb\xb7\xf5\x8a\x14\xae\x20\xba\xa3\xd7\xbe\x68\xaa\x09\x28\x95\x84\x6b\xaa\x43\xa1\xbb\xd8\xe9\x77\xbc\x7b\x8f\x34\xfe\x38\x0f\xaf\x39\x9f\xd8\xbf\xf8\x58\x99\xe4\x83\x52\x53\x16\x95\x62\xee\x75\x38\xbe\xdb\xa6\xa4\xb4\x45\xe1\x9c\xc9\x98\x59\x19\xab\xfa\xea\xc7\x87\xde\xf2\x77\x6f\xdd\xe3\x43\xe7\x4e\x88\x01\xc8\x0b\x99\xb5\x58\xe3\x9f\x39\xb2\x09\x8e\xd8\xb2\x0a\x73\xd8\xe1\xb7\x05\xd1\x57\x1e\x53\x4c\x3e\x1e\x29\x5d\xf9\xb9\xb1\x98\x73\xbd\x49\xd0\x3b\x9d\xa8\x1a\xba\x15\x4d\x2b\xb5\xd9\xbd\x52\x9f\xb6\xa1\x04\xb7\x74\x60\xef\x17\x5f\x39\xed\xaa\xbd\x21\x83\x57\xed\xe7\x2b\x25\x99\xaf\xd5\xee\xf9\x30\xde\x89\x4c\xe4\x54\x46\x55\xb5\x5c\x24\x9d\xdd\x04\xfb\xda\xf7\x65\x39\x7d\xc7\x50\x1e\x55\xfe\x3d\xa4\x01\xcf\x75\xd5\xcf\xa6\x6e\x84\x0d\xd7\xa0\x96\x26\x8d\x9c\xd7\xa7\x9c\x94\x54\x23\x54\xb0\x6e\x4a\x9d\x52\xee\x53\x1f\x32\x55\xcb\xd5\x0c\xe7\x56\x86\x1d\x72\xfa\x56\x4a\x73\xf4\x24\xdd\x31\xdd\x93\xe8\x28\xe8\x20\x19\xc4\xa1\x4f\x40\x53\x1e\x69\xe3\x04\xbb\xc0\x73\xc0\xe5\xe9\x75\xde\x51\x3e\x76\x3d\x72\x65\xbd\x0e\x8f\x40\xba\x9b\xc6\xc6\xe9\x83\x39\xda\x0e\x81\xd6\x84\x15\x7a\xf4\xfe\x8a\xa1\x04\x51\xbd\x6c\xa2\x6d\x20\x06\xbe\xcb\x22\x78\xcd\x15\x65\x44\x0c\x53\x4e\x6a\xc2\x6c\x7b\x58\x48\xd6\x3e\x15\x8c\xd8\x02\x8a\x3c\xdb\xfa\xb5\x66\x2f\x61\xaf\xd2\xaf\xbd\xe0\x1a\xda\xfa\xf6\x96\x92\x09\x3d\xd0\x06\x6a\x1c\xdc\x7e\xf7\x80\x76\xa2\x16\x9b\xd9\x1c\x7a\x15\x63\x33\x5a\xa0\x26\x4e\x3e\xc7\xb1\xfe\x48\x63\x45\x33\xfe\xe7\x6f\x9a\xd3\x4e\xc3\xa7\x01\xf7\xa0\x28\xd4\x25\xe5\x07\x77\x15\x8c\xec\x96\x8f\x1e\xec\x3f\xa5\x4a\xac\xb6\xc4\x0b\x35\x44\x30\x71\x90\xd0\x31\x22\xf1\x08\x96\x5a\x21\x52\x25\x2a\x1f\x49\x53\x78\x72\xb0\xef\x37\x0a\x5b\x68\x26\xc7\x40\xa5\x84\x25\x92\x40\x2e\x6c\xde\x32\x9d\x74\x34\x3b\xea\x6a\x62\xd6\x18\x40\x89\x24\xe1\xc2\x9e\x28\x8f\xd0\x23\x1c\xa8\x82\x5a\x92\x50\xb4\x50\xc2\x78\x02\x6e\x45\xd0\xdb\x2c\x67\x1a\x86\xae\xaa\x9d\x77\xb4\x09\xa0\xb7\x94\x4e\x27\xf7\x7a\xb4\xd0\x23\x5b\xff\xc3\x34\xec\x6a\x59\x68\xa2\x56\xa2\x88\x3c\xda\x81\x99\xbe\xe1\x4a\xd5\xd6\x68\x60\x16\xcd\x71\x35\x37\x21\x9e\xd3\x3e\x81\x91\x67\xe6\x37\xd0\xc6\x94\x15\xb2\xef\x0d\x8a\x7d\xac\xbf\x40\x99\x4f\x6e\x28\x76\x9a\x71\xd7\x36\x8d\x81\x49\xd7\x4e\x0d\x42\x3a\xd9\xa4\x79\x54\x92\x48\x9d\xa8\xd9\x3f\x7c\xaa\xa3\x67\xf5\xf9\x5a\x38\x26\x49\x14\x04\xb5\x4d\x85\xad\xf3\x11\x97\xf2\xfc\x5b\x72\x11\xa3\xa4\x6f\x09\x56\x0b\x37\xe9\xdb\x9b\xe0\x8a\xf0\x51\x9a\x0b\x32\x55\xe5\xd0\xa5\x06\xb1\x3a\x4f\xcc\x31\x4b\x4c\x48\xb5\xd5\xe8\x6a\x68\x7c\x03\x43\x99\xfa\x71\x7d\xae\xf2\x7d\x27\x91\x19\xd3\x21\x8e\x6f\x48\x8b\xbc\xeb\xbb\xfa\x6c\x5c\x35\xb0\xad\xbf\x1c\x9a\x41\xdf\x34\xdd\x2c\xb1\x53\x72\xb4\xa8\x82\x18\x3c\x1d\x78\x03\x34\x44\xb4\x2a\x88\x61\x3f\x06\x57\xba\x9d\xea\x41\x1a\xab\x8d\x21\xd0\x5a\xe2\xe3\xd8\xcd\x65\x29\x0d\x20\xe6\xe3\xbe\x68\x0f\xfd\xa6\x8f\xbf\x99\xe4\x90\x16\xf5\xf2\xc8\x88\x41\x99\x6b\x8d\xfa\xa8\xf4\xd3\x7d\xc0\xb9\x29\xc5\x00\x6c\x58\xcf\xab\xea\x1a\x2c\x60\x69\x41\x95\x02\x1e\xae\xa2\xe9\xcd\x8d\x66\xbd\x81\x2f\x37\xa8\x8c\x07\xe4\x56\x5b\xe5\xac\x03\xaf\x91\x48\x43\x79\x14\x1f\xf9\xa6\x3a\x58\xf8\x56\x7b\x50\xd9\x96\xac\x30\x27\x72\x55\xd8\x29\x89\x1a\x14\x6d\x7c\x9d\x4a\x6b\xb3\x6b\x60\x6d\xca\xda\x77\xee\x06\x7f\x69\x76\x6b\x12\xc4\xc6\x64\x31\x53\xb3\xa2\x7d\x7b\x6e\x4d\x04\xd0\x7a\x92\x0c\x6e\xef\x28\x6c\x49\xf5\x28\xc0\x94\x93\xa4\xc3\x4c\xbb\x68\x9b\x95\xec\x81\x95\xf4\x31\xf5\x0f\x67\x63\xb2\xa9\x0a\x1e\xad\x93\xc2\x3d\xf8\xeb\x67\xfc\x10\x42\x76\xec\xf9\x96\xcf\x06\x51\xec\x56\x33\xee\x84\x46\xdb\xac\xae\x50\x68\xd8\x06\x5d\x62\xda\x41\x4f\xa6\x9c\x77\xed\x0c\x25\x01\x1e\x74\x74\x34\x74\x63\xd3\x67\x76\x26\x9d\x04\x61\x70\xaa\xb3\xe7\x9e\x8f\x9b\x7b\xb0\xbe\xa1\x21\x58\xad\xdf\x50\x22\xee\x36\x2b\x3b\x01\xaf\xdb\x44\xfa\xcc\xfb\xdd\xe4\xfd\x7c\xab\xd1\x5e\xb3\x5a\xa3\xcd\xa8\xc7\x6c\x34\x32\xcc\x84\x4d\x16\x23\x3e\x1c\xb8\x9f\xcf\xa9\xe2\x55\xdd\x72\x9d\x0b\x12\xcb\x6d\xb9\xbd\x41\x5f\xd4\x56\x34\x89\x2b\xfd\xf0\x6d\xb6\x14\x7f\xb3\xc7\x24\x3d\x6d\x90\x75\x11\x24\xae\xda\x20\x1a\xe8\xb9\x26\x88\x8b\x62\xdc\x6a\x82\x3c\x56\x9e\x2e\x62\xf2\xae\xae\x88\x0c\x30\x4d\xca\xa8\x45\x31\x28\x4c\x97\xba\xcb\xf2\xa8\x87\x92\xe8\x2d\x7c\xad\x7b\x85\x5c\xff\xbe\xff\x87\x4d\xff\x9d\x1f\x1f\xd3\x85\x77\x3c\x17\x15\x03\xa5\xab\xef\x17\xbe\x43\x73\x9c\xfa\x3e\x0c\xe7\x08\x3c\x47\x42\xc2\x90\xba\xef\x2c\x75\x07\x8e\x4d\x2f\x87\xb0\x16\x41\xd1\x1d\x02\xac\xe1\xec\x13\x4e\x2a\xab\x76\x79\xb7\x73\x6b\x10\x71\x89\x5d\xb6\x7d\x87\x4e\x05\x1d\x0e\x6a\xd1\x05\x19\x3c\x48\xd0\x41\xae\x35\x91\x6b\x99\xc8\x9a\x24\x5a\xd8\xd0\xf6\x52\xd1\x35\x1e\xa5\x62\xc1\x37\x45\x3a\x1e\x17\xc1\xd6\x19\x86\x33\x19\x2b\xab\x2b\x0a\x1e\x7c\x9e\xeb\xeb\xd2\x7c\xad\x21\x32\xa7\x92\x56\xc5\x7a\xd8\x90\x66\x6e\x2f\x89\xf5\xb6\xc3\x62\xe8\x8a\xf0\x51\x29\x27\xc2\xc2\x65\xe2\xb2\xd2\x33\x0c\x22\x35\x55\xdc\xf1\x1a\x6f\x67\x73\x73\x76\xb3\x58\x9e\x62\x1b\x19\x4c\x10\x1c\x29\x5d\x18\xd4\x98\x60\x34\xea\x5d\x4c\x35\xe2\x2b\xb7\x88\x7b\x2d\x5e\x57\xce\x06\x56\xfc\xae\xee\x59\x22\x39\x0e\x8d\xd7\x39\xb2\xeb\xeb\x44\x2a\x42\x36\x61\xa6\x51\x6a\xd8\x04\x8b\x3b\x84\xce\xa6\x8c\x0c\x30\x7b\x8a\x8a\x64\x95\xf9\xac\xbc\xb9\x7f\x86\x77\xdd\x60\x23\x30\xdb\x61\xd4\x78\x21\x82\x21\x75\x8a\xcc\x50\x58\xda\x30\xa2\x72\xca\xc7\xf0\xb6\xb8\xfc\x43\x86\xc9\x4b\x1c\x69\x0f\xd1\xef\x22\xb3\x35\xcd\xaf\xdc\xab\x98\x9b\xa0\xed\xa7\x4e\xc8\xaa\x05\xe7\x55\xbb\xab\x2b\x69\xbd\x4c\x04\xf2\xb6\xbd\xae\x63\xf1\x2c\xa7\xde\x87\x4d\xba\xdd\xb9\xcc\x2b\xb8\x36\xe8\xfa\xad\x4b\x4c\xcf\xad\x44\xd6\xa8\x95\x2c\xbb\xb5\x74\x2d\xdf\x36\x9f\x55\x9b\xb2\x9e\x08\x2c\x1f\xc1\xc3\x7b\xe5\x1d\x4e\xa5\x27\x6c\xab\x9b\x11\xda\x35\xb4\x01\x3b\x2e\xa6\x95\x7b\x07\xb6\x3a\x21\x75\x94\xe5\x7c\x7a\x1d\x49\xda\x60\x1d\x9a\xca\xbc\x4e\xe8\x8f\x4f\x91\x54\xf4\x4c\x6e\x5a\xd5\xd1\xf6\x3d\x4b\xfe\x4f\x57\x79\xd3\x0d\xd0\xe3\x11\x9d\x24\xcc\x33\xa2\x90\x62\xcd\x12\xef\xd1\xb1\xc5\x70\x9a\x1b\x81\x29\xca\xfb\xa4\xd1\xc7\x5d\x77\x1c\xe6\xd8\x6b\x11\xe0\xe3\x38\x82\x55\xdd\x62\x43\xf5\x3c\xa6\xab\x74\x2b\x58\x83\x39\x78\x5c\x6b\x69\x50\xbb\xb0\xb4\x44\xc0\xa5\x0d\xd3\x55\x4f\xe6\x1e\x14\xff\x5d\x58\x46\x73\x09\xdf\x77\x75\x3d\x28\x6b\x96\x0f\x83\x39\xf8\x37\x47\xc1\xe6\xed\x7b\x98\xdb\x44\x49\x53\x37\x2a\xbe\xbe\x29\x57\xd2\x13\x72\x2a\x40\x03\xb9\xb7\x91\x5a\x14\x3f\x52\x50\x66\x45\xed\x4f\xa5\xa7\xfa\xe5\xac\x89\x84\xd2\x45\x59\x75\xdd\x74\x53\xca\x16\x88\x9c\xc6\x1f\x55\x22\x8e\xbc\xfd\x40\x27\x19\x9b\xf6\x8d\xb3\x34\x66\xdc\x54\x58\x60\x69\xe0\x70\x8a\x26\x24\x96\xaf\x74\x12\xad\xf6\x1b\x31\x15\x91\x92\x58\x6a\xdf\x53\x8e\xe5\xb1\xef\xde\xe5\x64\xcc\xf5\x45\x0f\x65\xc0\xcd\xe6\xdc\x08\x29\x9b\x77\x44\x7e\xe8\xdd\x80\x6d\x23\xf6\x36\xc4\x7d\x18\xd8\xa6\x49\x53\x2c\xc9\x04\xff\xc5\x26\xae\xe8\xbe\x5e\x65\x79\xa4\xf2\x6a\x61\x8f\x54\xe5\xdf\xd7\x56\x45\x83\x60\x68\x2e\x61\xd1\x49\x2d\x1b\xa9\x3d\x12\x5f\x17\x58\x6b\x5f\x4d\xd8\xcb\xeb\x7a\x3d\x6b\xca\x25\x96\xcf\xf7\xe6\x95\xd5\x9b\xe1\x77\x71\x54\xde\x6c\x8f\xdf\x3f\xe0\x74\x0b\xb0\x9b\xc1\xfb\x43\x72\x9b\x49\x45\x04\x58\x95\xd7\x80\x78\x9c\xd2\x3d\xbe\x25\x3c\xb9\x21\x15\x8b\xa7\x92\x0b\xa2\xbd\x9a\x8b\x46\x64\xe3\x31\x8c\x60\x53\x5b\x4f\xec\xb4\xf5\xe8\x46\x53\x19\x37\xc7\x8e\xe4\x9a\x6b\x53\x52\xb8\x89\x1a\x97\xba\x6a\x10\x15\x8d\x64\x7a\x17\xee\x5d\x2a\xe2\x8f\xba\xf3\xbe\xf1\xf0\xae\x74\x02\x6a\x8d\xd8\x3b\x9f\x3c\x1a\x18\x3d\xf2\x3a\x1f\x34\x10\xba\x23\x9e\xf4\x58\xb0\x99\x17\x30\xca\x74\x69\x01\x12\x61\x67\xc0\x8e\xad\xbb\x79\xc7\x76\x4a\x84\x4a\x92\x4e\xa5\x76\x82\xde\xce\x9b\x16\x8a\x7c\x51\x29\x9e\xd0\x5d\xc9\x2d\xf5\x7a\x37\x34\x52\xa8\xad\x25\x9c\x70\xb7\x25\xd8\x83\x70\x35\xb2\x1b\xf7\xfc\x2e\x21\x78\xa0\x7d\x7f\x28\xba\x96\x23\x6a\x4e\x82\xee\x04\x08\x19\xa7\xb6\xfd\x9c\xa3\x3e\x07\x48\xb4\x0c\x54\xf5\xde\xf4\xe3\xde\xbe\x55\xbf\xa1\x6b\x93\x89\x23\x9f\x4b\x4b\xf8\xb1\xbe\x0a\x44\xe5\xe3\xa5\xc2\x40\xbf\xce\xaf\x72\xe5\xf2\x35\x01\xd4\xfb\x82\xa6\x23\x65\x4f\x0b\xc1\xc6\x88\x5b\x98\x60\x3d\xfa\x7a\x71\x03\x40\xca\xec\xdd\xde\xb4\x5e\x44\x6e\xee\x86\x48\xc3\xac\xc7\xfe\x41\xae\xec\xce\x6e\xe8\xd2\x6f\x9e\xed\xf3\x40\x76\xcf\x5c\x82\x6e\x5b\xdc\xd8\x78\x58\x59\xda\xd6\x61\x7e\xed\xa0\xb0\xf5\x32\xbd\xb6\x6e\x76\xf1\x1e\x81\xd7\xbe\xeb\xc9\x25\xe2\xbb\xb6\x58\x5f\xf3\x40\xbd\xc9\xf2\xf8\xdf\x68\x16\x24\x35\x2f\xb8\x18\xe5\x19\x5e\x73\x0f\xf3\xa5\x16\x8b\xf4\x4e\x65\x17\xbc\xf7\x2c\x9d\x6e\xbf\x5c\xa8\xa2\x2f\x5e\xc1\x9e\xda\x23\xa4\xb2\x38\x9e\xcb\x5f\x25\xaa\x49\x73\x83\xd1\x64\x26\x97\x28\x6a\x05\x80\x32\x6b\xc5\xd5\x0b\xaa\x2c\x72\x8e\x83\x46\xc7\x68\xb3\xfc\xed\x3b\x47\x6f\xee\x5e\x72\x51\xa0\x9e\xcc\xed\x3d\xfd\xe3\x63\x2d\x22\xba\x2c\x67\xd7\xb0\xa3\xf9\x20\xdd\x55\x5d\xf4\x16\xba\x63\xa4\x4e\xf6\x87\x35\x1e\xda\x3d\x8e\x5d\x80\x69\xb0\x7c\x04\x73\x8d\x74\xe9\x0e\x6b\xf2\x44\xeb\x8b\x6a\xf2\x78\x9b\x0d\x6a\x32\x71\x9b\x5d\x1d\x6f\xcf\x5d\x28\xa4\x29\x59\x52\x26\x6f\x8e\xfb\x42\xda\x82\x7f\x94\x89\x40\xb5\x01\x30\x16\x74\x8f\xad\x85\x95\x02\x72\xce\xda\xba\xd7\x6d\xb5\xc9\xe9\x08\xec\xb2\x9c\x9a\x60\x0e\x1a\xfb\x9a\xb6\x61\xdd\xbb\x07\x78\x4f\x69\xdb\x44\x83\xee\xe7\x6e\xfa\x67\x7a\xef\xd6\xf7\xa5\x46\x48\xd6\x64\xac\xd4\x4f\xf4\x49\x44\x6d\x96\x9b\x9a\x78\x77\x16\x5b\x58\x37\x81\xb8\x34\xa9\x73\x26\x05\x10\x79\xc7\x51\x0e\x8d\x66\xd3\x28\xac\x5e\x57\x24\x2c\xa8\x5c\x57\x4b\xef\xf7\xae\xe4\x4c\x13\x17\x31\x7d\xb4\xb5\x18\x36\xf6\xd2\x6e\xdc\x03\xe4\x96\x85\x0d\x8e\xb8\xad\xb6\x09\x3a\xb7\xb5\x36\x32\x03\x2f\xd3\xa6\x74\x6d\xe3\xff\xd2\x0b\x07\x5f\xd4\xef\x62\x36\x88\xd1\x1b\x67\x75\x58\xe0\xa2\x6e\xa6\x76\xf6\x0f\x7f\x9c\xa8\x3b\x88\x6c\xa6\xe9\x77\x9b\x28\x6e\x55\x41\xe9\xee\xdc\x0b\x69\xa7\x15\x7b\xc0\xf6\x6f\xe2\x1a\x29\x2a\x83\x81\xc6\x68\x25\x31\xb8\xe5\xe3\xa2\xfe\x75\x53\xbe\xeb\x4b\x2d\x14\x0b\xa4\x4e\x2f\x87\x2b\x65\xc1\x1f\x37\xa4\x27\xad\x02\x39\x0e\xaa\x21\xf7\x72\x8e\x5a\xd6\x57\x88\x0d\xe7\x26\x71\xe1\xf6\x6c\xc9\xae\xb8\x2e\x9a\xa9\xb6\x13\x4a\x97\x65\xba\xd0\x34\x02\xa3\x9b\x5a\xbd\xa1\x22\xbf\xc2\x4e\x05\xc6\x1a\x70\x56\x99\x34\x4b\xe6\xea\xda\x43\xde\x85\xc7\x20\xa6\xc5\x4d\x6b\xa3\x0f\x1a\x10\xf7\x12\xfa\x23\x93\xe6\xd9\xbc\x8b\xa7\xd8\xd3\x54\x32\x08\x05\xbc\xe8\x90\x9a\xbf\xa2\x68\x1f\x81\x5c\xef\x57\x47\xe3\x6e\x34\x52\x6b\x31\x4b\xbd\xea\x2d\x53\xc1\x59\x37\xdb\x25\xf0\xa4\x96\x83\x74\xe7\xf6\x9d\x6d\x7e\x7f\x80\x90\xbd\x70\x8a\x9d\xd0\x1c\x2f\x6a\xc9\x06\x42\xd2\xaf\x40\x33\x34\x34\x9a\x7d\xab\x72\x2a\x2b\x02\xa4\x9c\x81\xb8\xc0\x1f\xba\xb9\x2a\x13\x58\x8c\x45\x3f\xad\x62\xc1\xb4\x89\x4a\x4e\x86\xad\x51\x12\x48\x21\x47\xe5\xcc\x4a\x55\xed\xb8\xb6\x66\x76\x07\x4a\xa1\x56\xcc\x66\x96\x87\x92\xa3\xaf\xf3\xeb\x74\x45\x47\x93\xfb\x88\xbf\x62\xcb\x43\x32\xc8\x1b\x86\x77\x8c\xae\x86\x52\x36\xee\x59\x00\xc6\x77\x81\x5f\x72\x7f\xcf\x0e\x13\x3b\x45\xe3\x3c\xe6\xf0\x2b\xaa\x21\xfb\x63\x68\x40\x7f\x51\x49\x3c\xf2\x4a\xd9\x34\xb4\xb6\xfe\xcc\xb2\x46\x96\x81\x3f\xe5\x5d\x8c\xf6\x62\x99\xb8\xb8\xe4\x05\x97\x9f\x78\x57\x53\x6f\x73\x54\x1a\x3b\xe6\x86\x40\x76\xf1\x16\x77\xa8\x66\x1f\x95\x74\x30\x1e\x2f\xdc\x0a\x8b\x9f\xb2\xb8\xb0\xe7\x8c\x55\x2b\x27\xe1\x94\x60\x74\xda\x64\xc9\x33\xaa\x60\x5c\x18\xd7\x8f\x55\x67\x7f\x5a\x67\x95\x02\x60\x1a\x36\x29\x0c\xd6\xe5\xf0\xa0\xc3\x4a\x95\x9e\x73\xd9\x00\x61\xbb\xe4\x12\x57\x42\xd1\x62\x06\x5b\x02\xec\x16\x68\xf7\xe9\x52\xef\xd6\x00\x6a\xa6\xab\x5d\x21\xed\xc1\x1d\x13\x7d\x70\x7b\x78\xb7\xc0\x60\x0c\x3d\xaa\xdf\xde\x04\xc0\x03\x19\x71\x00\xe9\x40\x23\x6b\xbd\xee\x85\x8c\xba\x97\x71\x31\xd5\xcd\xe3\x6b\xe1\x40\x30\x98\xc7\x61\x24\xa0\x4f\xc8\x7e\x98\x86\xff\xea\x41\xf7\x47\xb9\x99\x00\x2a\xea\x2c\x1d\x38\x9a\xc1\x8b\x46\x2c\xa8\x08\x76\x80\x70\x6b\x54\xe9\x0f\xc5\x92\xd5\x94\xf5\x3a\x79\xb4\x26\x3d\x2a\x18\x2f\xaf\x32\xbf\x8f\xe5\x28\xb1\x07\x42\xc4\x40\xff\x84\x69\xf7\x96\xec\xf9\xac\x5c\xd7\x9a\xdd\x09\xda\xed\xc6\xaa\xed\xe6\xca\x6a\xcb\x76\xbd\x6c\x5a\xe3\xc2\x45\xa4\x97\x5f\xb9\xc7\x11\xdf\xfb\xc4\xe0\xfc\x34\x1c\xc5\x65\x6b\x5d\xa8\xed\x0a\x9c\x06\xe6\x58\x8f\x75\xa5\xca\x3b\x8c\xa6\xff\x99\x4c\xcf\x2f\x61\x6c\x70\xf4\xb5\x01\x23\xce\xb7\x7c\xb4\x49\x11\xbb\xcc\x1c\xe3\xa6\x62\xc4\xcb\xf4\x6e\x56\xd5\x02\x02\xf6\x47\xe0\xc4\x6e\xa8\x91\x85\x78\xbc\xa0\x56\x69\xb3\x06\x00\xc1\x9b\x2e\x0d\x23\xa0\x33\x95\xe3\xbc\x4a\xe0\xdd\xdb\x41\x2f\xe9\x02\xea\xba\x0d\xdf\x9d\x20\xe3\xae\xac\x82\x39\x0c\x5a\x8f\x19\xbc\x5e\x8e\xad\x71\x5f\x15\xfc\x57\x88\x23\x60\x5a\xae\x73\x6a\x9d\xdc\x1f\x80\x30\x48\xc7\x20\x19\x65\xa8\xaf\xdf\x23\x87\x24\x86\x6d\x1e\x16\x9c\xdc\x6a\x98\x4a\xa1\x71\xf3\x70\xa9\xb3\x9c\x5a\x51\x0e\xfe\xd5\xb6\x20\xc9\xf0\x94\x6b\xea\x4c\x53\x21\x0c\x85\xd4\xf9\x88\xa6\x8f\x27\xdf\x6a\x35\xed\xa6\xe2\x42\x49\xdd\xb8\xdd\xff\x59\x19\x2d\x44\xf4\x0d\x99\xf5\x9b\x55\x30\x84\xd3\xf2\xaa\xa5\x2b\x86\xb0\x9b\x2b\xab\x80\x79\xb7\x11\x05\xfb\xbc\xb8\x16\xa2\xfb\xe6\x42\x5d\x9b\x5d\x5f\x84\xd6\x66\xd6\x97\xa4\xff\x05\x45\x12\x93\xd3\x3f\xc9\x5c\xfe\xec\xd8\xaa\x03\x1c\xd4\xcb\xec\x6e\x3b\x01\xe8\x47\x40\xb8\x1d\x58\x90\x3d\x58\xb2\xc1\x00\xf4\x22\x3c\x5a\xd7\x5a\x35\x18\xaf\xbe\x60\x3b\xbd\x89\x47\x20\x7f\x6b\x95\x92\x07\x70\xa1\x1f\x01\x09\x77\x64\x09\x3f\x06\xf7\xf9\xa1\x16\xf3\xca\xae\x73\x7b\xb0\xfd\x11\x08\xe0\x5a\xc5\xe4\xfd\x74\xf3\xe7\x48\x8f\x80\x66\x3b\xb2\x68\x3b\xb9\xb1\xa9\xf3\xa3\x87\x5a\xa5\x80\xec\x66\x83\x5b\x3a\xf5\xb8\xa7\xe9\x6f\x2f\x28\xcc\xbd\xbd\x2a\x41\xb3\x6a\xc0\x0c\x73\xad\xb1\xe5\x78\x25\x7d\x25\x4c\x8a\x5a\x52\xcc\x2f\xb3\xc9\xf4\x32\x3b\x4d\xa3\xb9\x73\x19\x01\x73\xb0\x75\x05\x6a\x32\x51\x11\x26\xfa\x63\x97\xc4\xd6\x69\x85\xec\xd8\xc7\xd1\xa2\x69\xaf\xcb\x0e\x2d\x3c\x7d\x2a\x77\x6e\x80\xf8\x2b\x46\x07\xff\x60\x3c\xf4\xe3\x9f\xc3\x60\x19\x9e\x2e\xb3\xa3\xef\xe6\x46\x57\x6e\xdd\x4e\xfd\xbc\xb9\x2d\xc8\x81\xcd\x1b\xa3\x9b\xdd\xd0\xca\x45\x2d\xce\xf5\x61\x80\xa1\xa6\xf3\x9c\xb6\xf7\x79\x6a\x08\x5f\xf5\xa6\x68\xbe\x1e\x2b\xc8\xd8\x81\xfb\xa8\x0f\xd3\xf2\xd7\x69\x64\x8c\x05\x4b\xb0\x71\x6e\x6b\xa5\x9c\xa0\x2a\xc9\xf8\xf6\x25\x5e\x87\x68\x4a\x15\x75\x8b\x30\x52\x63\x7b\x1a\x1b\xef\x28\x14\x43\x6c\x17\x4c\xb7\x3a\xf7\x46\x49\x3c\xfa\xb0\x87\x2f\xee\x51\x67\xd4\x72\x48\xff\x90\xcc\x64\xfe\x86\x0a\x34\xd7\x96\x11\x3e\x7a\x49\x8d\x6c\x9b\x2a\x09\xf1\x85\x14\xcc\x35\xd6\x5d\xf1\xa5\x87\xbd\x88\x05\x8f\x2c\xd8\x57\xc7\xd6\x44\xf1\xd7\x91\xf4\xad\xe5\x2b\xb4\x98\xf0\xeb\x0c\x84\x95\x35\xf3\xf8\xfa\x5a\xd5\x2e\x94\x5d\x01\x73\x07\x86\x52\x76\xc9\x18\xf8\xe9\x8a\xd6\x30\xa8\xb4\x32\xe6\xc4\xe4\x86\x86\xc6\x0b\xb4\x73\xde\x59\xde\x6e\x83\xfe\x9f\xe9\xbd\x9d\xb5\x84\xb7\xcf\xe0\xf1\x37\xb3\xab\xab\x44\x61\xb6\xbc\x4d\xfe\xb9\x89\xf3\xc8\x6b\x8e\x45\x06\x14\x4f\x12\xd6\x7b\x92\x23\x00\x32\x1a\x5f\x28\x97\x2b\x1a\x72\x01\x8c\x6f\x5a\x67\x23\x34\xd8\xd8\xb6\x8d\xc8\xfc\x2a\x1c\x18\xe9\x95\x2b\x04\x05\xde\xe0\xda\x59\x7a\x10\x92\xa0\x6a\x7e\x7a\xdf\xc5\xeb\x21\xd9\xa7\x98\xfe\xce\x8b\xcc\x27\xc9\xd6\x87\x63\x63\x4b\x75\xbf\x0e\x26\x12\x21\x34\x15\x0b\x57\x3f\xca\xc4\x93\x36\x9c\x8b\xea\x0d\xf5\x2a\x5a\x97\xac\x49\x09\xfa\xbd\xab\x64\x96\xef\xc9\xc4\x19\x57\x35\x63\x84\xfc\xd1\xe1\xad\x41\x3b\xa1\xbe\x89\xb1\x66\x5d\xea\x6b\x0a\xad\x3e\x64\x0a\xbc\x85\x7f\xc1\xb7\xf0\xe9\xb5\x66\xfb\x69\xad\x5b\x03\x02\xbd\xbe\x7d\x60\x7d\x48\xee\x8c\x6d\x83\x04\x34\xc0\xbe\xf0\x2d\x99\x17\xcb\x90\xb4\x53\x14\x47\x30\xf2\xb5\x6a\x14\x46\x1f\x2e\x7e\x71\x69\x79\xd4\xf3\x6c\x5f\x22\x05\xf0\x6d\xc9\xe4\x62\x88\xee\x8a\x54\x0a\x11\xb7\x28\x97\xbc\x89\xce\x17\x4b\x7c\x6f\x79\xa9\xe4\x59\x1e\x8e\x57\x2e\x12\x5b\x93\xd0\x87\x46\x7a\x23\x02\x4a\x24\xdc\x9e\x7c\x46\x57\x49\x5f\x11\xd5\xaf\x2e\x2d\xa5\x76\xae\xed\x6b\x4f\x03\xfc\xb6\xa4\x73\x51\x64\x77\x45\x40\x0d\x21\xd7\x2f\xa3\x58\x20\xe4\x1a\x6f\x61\x73\xa3\xa2\x2c\x97\x81\xd7\xef\xa1\x2f\x30\xd3\x1a\x63\x31\x9d\x0b\x71\x9c\x81\x63\xd5\x63\x15\xd2\x7b\x4b\x2f\x41\x99\x65\xfb\xeb\x8f\xc1\xde\xd6\xe2\x5b\x08\xcd\x5d\x59\x79\x4c\xc2\x8d\x6e\x0d\x3d\xa8\x1a\xa7\x0f\x26\x3e\x71\xba\x5d\x01\xea\x8f\xea\x4e\x89\x10\x90\xd1\x51\x6a\xba\xca\xc5\x1a\xf5\x5a\x0f\xd2\x66\xb3\xf2\xc1\xc4\x08\xe6\xde\xae\x1c\x2d\x80\xec\x4e\x09\x12\x12\x72\x0b\x92\x54\xde\x65\x7a\x4c\x7b\x72\x57\x2b\x40\xcd\x35\xb0\x04\x9b\x88\x2b\x80\xd1\x9b\x19\x1e\x90\x4e\x33\xac\x94\x92\x07\x0a\xff\x9f\xe3\x63\x89\x0a\x75\xf5\xd1\x39\xe7\x72\x32\xf9\x59\xda\x42\xba\xee\xb9\x9c\x09\x5a\x38\x72\x3e\x2b\x17\x1b\xb9\x0e\x7a\xe5\x4e\x48\x76\xab\x4c\xf4\xea\x2c\xed\xcd\x89\xa1\x03\xd1\xda\x96\x86\x6e\xcf\x5d\x59\x1a\x2b\x72\x30\x6b\xa2\xc2\x5c\x06\x2e\x4c\xe9\xae\xd9\x3a\x69\xbe\x24\x05\x3b\x4d\xc4\x0f\xea\x3e\xca\xee\xd2\x1e\x46\xa2\xbc\xb9\xb4\x99\x68\x66\xda\xbe\x8a\xd6\xa0\x77\x6a\x91\xbf\xab\x75\x2a\xe9\x05\xb1\xdd\x15\x1d\xad\x29\xb9\xa0\xc5\x38\x97\xb6\xf3\x64\x14\x2b\x61\xf7\xf1\x64\xf4\xab\xab\x48\xa9\xcc\xf5\x20\x62\xca\xc0\x6f\x57\x4e\x17\xc2\x77\x87\x04\x95\x69\xb9\x6d\x49\x9d\x4d\xfb\x89\xe9\x6c\xba\x8a\x8c\xe2\x2c\x0f\x22\xa0\x00\xf6\x76\xa5\xb3\x3f\xa6\x3b\x24\x9a\x40\xc5\x4d\xcb\x65\x37\x61\x93\x2c\x8c\xea\x74\xed\x36\x75\xe6\x59\x39\xf3\xf0\xc6\x39\xb7\xe6\x24\x2d\x84\xe0\xc3\x49\xce\x62\xc4\xdb\x5e\x08\x9f\x2c\xd6\x9e\x86\xa1\x79\x77\x69\x85\xe6\xcc\xb6\x5d\x91\xb4\xa0\x77\xca\xe5\x6b\x7c\x6d\x8d\xc2\xb9\x38\xbe\x3b\x20\xa1\x96\x96\x8b\xfa\xef\x3d\xc8\x3b\x5f\x58\xc9\xab\xea\x2b\xad\xf4\xf2\x32\xe2\x7a\x45\x95\xf5\xeb\x9e\xa4\x89\x01\xcc\xe9\xd1\xbc\x4e\x5a\x33\x12\xdb\x12\xdc\x55\x31\xdf\x15\x09\x66\xaa\x3e\x88\x08\x53\x38\xa0\xaf\x08\xd3\xcb\xeb\x14\x61\x09\x46\x6c\x55\x84\x19\x89\x87\x16\xe1\xbe\x98\xef\x8a\x08\x33\x55\x1f\x44\x84\xf1\xd2\x54\x5f\x09\xc6\x77\x57\x33\x19\x78\xb6\x07\x30\x19\x08\xf4\xed\x9b\x0c\x0b\xe1\xbb\x2b\xd2\x4a\xb4\x7c\x10\x61\xa5\x33\x94\x7e\xb2\x8a\xc7\x12\x2b\xb1\xae\xf1\xbc\x66\x0b\x92\x3a\xf7\x60\x6a\x23\x82\xba\x08\xb6\xbb\x22\xa7\xcb\x9c\x4c\xad\x47\x4c\x6f\xfb\x1b\xb6\x74\x60\xb0\x1a\xeb\x68\xb6\x87\x90\xd4\xdb\x2d\x5a\xb3\x4b\xe2\xbb\x33\xb2\x7a\xfb\x50\x36\x6c\xaf\xf0\xa7\xbc\xb9\x9a\xa0\x36\x05\x06\xb7\x20\xa6\xf3\x02\xa0\x1b\x11\xd2\x05\x70\xdd\x15\x11\x75\x43\xa0\x9b\x13\x50\xdd\x94\x2c\x6d\x46\x4c\x5a\x5e\x8f\xc7\x1d\xa2\x38\x67\x88\x26\xf2\x17\xc1\xb9\x73\x91\xa6\xda\x91\x8d\x87\xb1\x97\x6a\x4c\xa3\x56\xba\xf8\x84\x2f\x73\x67\x57\x2a\xb8\xed\xfe\x56\xb9\x45\x35\x34\xa7\x8c\x87\x93\xfb\xb7\xc9\xec\x3a\x4e\xf7\xe8\xc3\x3d\xfb\xef\x2a\x07\x75\x6e\x22\x5e\xe1\xd2\x7f\xf2\x2d\xf0\xe2\x26\x9b\x25\x11\x1f\xa1\x13\x17\xf9\x2e\x50\x0c\xa3\x84\x49\x72\xef\x88\xc9\x21\xb6\xd9\x96\x76\x68\x74\x21\x09\xe5\xca\xa3\x4d\xc7\x05\x4b\xfd\x97\x11\x20\xdb\x2d\xce\x34\x1b\xb3\x57\x99\x70\xd0\x41\xb1\x4f\x58\xe1\x0f\xc5\x54\x8d\x62\xa0\x14\xf7\x40\x6c\xa8\x7f\x80\xac\x64\x16\xd8\x6c\x4b\x8d\xe8\x8b\x5a\xaa\xe7\x52\x71\xd3\x4f\x59\x3c\x1e\x94\x4f\xeb\x3b\x1a\x58\x8a\x27\x56\x5d\x82\x68\xe7\x7c\x94\x23\xd7\x1c\x81\x8e\x85\x6d\xc7\xec\xdd\x92\x5b\x8a\x7b\xa1\x34\x1c\x96\x16\x55\x76\xe4\x2a\xd5\x8b\x5e\x64\x7f\xe0\x45\x5e\xe7\x68\x4b\x67\xd7\x86\xa5\xd8\xa3\x64\x40\x75\x63\x34\x12\x89\x64\x70\x59\x21\x7c\x94\x8d\x8c\xa7\x9a\x5f\x20\x61\x5d\x2b\xb2\xe9\x8a\x6b\x6d\xfd\xad\x6f\x43\xa5\x4b\xa7\xce\xf2\xc2\xa7\xf0\xdf\x0c\xcb\x70\x67\x77\x58\xb2\x86\x7a\x7b\xdf\x64\x79\x89\x93\x10\xb1\xaa\xb7\x60\x8b\x78\x32\x05\xa6\x47\x19\xc9\x20\x35\xc0\xe4\xa5\x0a\x0b\x08\x74\x0b\x81\x88\x75\x47\xf0\x72\x6d\x81\x13\x10\xc5\x35\xf2\xe6\x71\xe1\x88\xcd\x2f\xc4\xcc\x43\x81\x73\xb0\x7f\x18\xbc\xc9\x4a\xe9\x5a\x89\x98\x84\xa3\x72\xe6\x7f\x9b\xa5\x75\xbb\xc3\xc2\x39\x41\x25\x77\x85\x99\x5d\xf9\x07\x46\xca\xcc\x3f\x78\x11\x14\xf7\x60\xd7\x7c\xac\xb4\x2e\xcf\xd2\xa5\x35\xcb\x30\x38\x3c\x3c\x44\x64\x49\x62\x7f\xfa\xb9\xff\x5d\xfc\x4f\x59\x48\xc9\x64\x7c\x29\x0d\x57\x6b\x06\xa3\xc6\x38\x16\x12\x1c\xd2\xeb\xac\x38\xd2\x0e\x53\xf0\x91\x2f\x81\x27\xdd\x12\x45\x48\x2e\x78\x7b\xe3\xb3\x74\xf5\xb5\x48\x65\xdb\xc5\xab\xfc\x71\x52\x8a\x7f\x19\xa9\x62\xa4\xd2\x28\x44\x50\xa5\x00\x58\x0d\x41\x51\x34\x8e\x57\xca\x32\x19\x9c\xb9\x1f\xc0\x0c\x20\x2a\xe9\x0c\xcb\x14\x01\xfd\x26\x71\x09\x63\x0c\x7d\x31\x0b\x93\xbb\xf0\xde\x91\x36\x96\xc4\xb8\x04\x29\xc1\x4d\xb8\x68\x9c\x7f\x97\x64\xbb\x43\xb8\xed\x05\xa6\xa5\x14\xa8\xe3\xd6\x7d\x96\xf3\x3f\x84\x9c\xff\x71\x77\x88\x85\x56\x51\xb4\xf8\x8d\xbf\x9d\x58\x50\xd6\x73\xb2\xb5\x18\x1f\xc0\x79\x0a\xeb\x68\xb2\x38\x62\x41\xba\x25\xdd\xa6\x15\x57\x28\xc5\xd8\xa8\x1e\x9e\xb3\x10\xfa\xaf\x52\xb3\x72\xcc\x3a\x15\x54\x1e\x66\x91\x52\x51\x9c\xaa\xdb\x97\x2e\xe1\xf5\xf1\x52\x78\x51\xad\x0b\xf3\x59\x88\x57\x17\xe2\x87\xe3\x72\x23\x4b\xdb\x78\xea\x86\xb9\xdb\x2b\x18\x91\xfe\x76\x16\x81\xb9\xc7\x03\x4b\x6b\x92\x15\x25\x57\x99\x9c\xe2\x9d\x1a\xfe\x84\xff\x36\x0c\x98\xc3\xf1\x39\x55\xac\xaa\x01\xf7\x6d\xd5\x9b\x13\x57\xb9\x77\x3e\x31\xc0\xbc\xc1\x58\xda\x67\x8e\x99\x65\xb5\xed\x03\x95\x75\x08\x42\xb4\xa9\x6b\x94\x8f\x49\x2e\x3e\x5b\xf4\x7f\x4c\xcf\xb5\x2e\xee\xcb\xbb\xae\xbb\xa5\x09\x3f\x4b\xfc\x67\x1f\xf6\x61\xd6\xd3\x12\x4e\xec\x8e\xed\x26\x9f\x88\x27\xf0\xd9\x9d\x5d\xca\xd1\x51\xeb\xf3\x67\x3f\x0b\xf9\xce\xba\xbb\x3d\xa4\xa0\x99\xe5\x55\x9e\x5f\x60\x26\xc4\xf8\xde\x53\xc9\x0d\x8a\x1f\x8b\xed\xe2\x01\xeb\x0c\x4f\xe1\xf1\xae\x9f\xdd\x42\x16\x73\x19\xc6\x7a\x55\xcb\x88\xb0\xa4\xa2\x7b\x1f\x3b\xfa\xc9\x49\x62\xe3\x33\xdb\xe3\x24\x0e\x8b\x17\x1a\x93\x8b\x32\x2c\xe3\xd1\xa2\x19\x80\xc0\xd4\xf8\xdf\x7d\xf2\xff\xf9\xc5\xa5\xf3\xff\xf4\x3c\x6b\x49\xff\x5b\xec\xf2\xae\x40\xbe\xad\x6b\xac\x0b\x62\x6a\x22\xc5\x8f\xfc\x0a\xb4\x50\xd1\x09\x6c\x6f\xc0\x43\xf5\x44\xb3\x18\xe5\x59\x92\xf4\x10\x4d\x7e\x71\x69\xd1\xd4\xf3\x3c\x80\x68\x0a\xe4\xdb\x12\xcd\x05\x31\xdd\x15\xd1\x14\x2a\x6e\x53\x34\xc9\x9c\xe8\x23\x9a\xf4\xe2\xf2\xa2\x29\xf3\x3c\x84\x68\x32\xe4\x5b\x13\xcd\xc5\x30\xdd\x19\xd1\x64\x2a\x6e\x53\x34\x29\x48\xda\x47\x34\xe9\xc5\xe5\x45\x53\xe6\xd9\x7e\x49\x13\x01\x7c\x6b\x92\xb9\x10\xa2\x3b\x23\x98\x4c\x44\x03\xee\x26\xca\x53\x9c\x6a\x0b\x17\x30\xd5\x19\xa8\xe4\x57\x5c\xa9\x9b\xf0\x36\xce\xf0\x5f\x3a\x41\xb6\xa5\x1c\x9c\xf1\x26\xae\x63\x98\xba\xc1\x55\x5a\xac\xe3\x49\xd8\x7c\xde\x60\x63\x6b\x14\x5a\x43\xc7\x89\xe9\x53\xe5\x80\xfa\x58\xe6\xe1\x5b\x9b\x09\x79\x6c\x7b\x8b\x39\xf9\x91\xa5\xb4\x17\x0b\xb9\xe5\xdb\xdc\x7a\xe9\x3a\xf5\xd2\xc0\xee\x94\x1d\xf6\x27\x7c\x21\xe9\x04\xbf\x09\x0f\x5a\x45\xfa\xc1\x48\x0f\x64\x97\x84\xd2\x53\x56\x40\x04\xe8\x03\xd0\xb1\x31\x33\xa3\x37\x39\xfb\xd1\xd3\xa1\xa0\xd5\xb2\x1c\xce\x4b\xfd\xed\xeb\x81\xc5\x14\x76\x81\x3c\xc7\x6e\x74\x5e\x3b\xbc\xd5\x49\xfd\x3d\x3f\x6b\x92\x5c\x4c\x82\xf1\xc1\xd0\xa9\x30\x7a\x0f\x6c\xbf\xfa\xe3\xa4\xd0\x1f\x18\x22\xfb\xda\x99\xfa\xf9\x78\xc1\x97\x07\xa1\xb4\x06\x07\x03\x3f\x7e\x00\x37\x2e\x24\xbe\x91\x66\xd4\xfa\x11\x03\x3d\x12\x0e\xf2\x49\x39\x4b\xfd\x5e\x43\x9b\xbd\xf3\xb2\x3b\xa4\x1d\x27\x45\xf0\x9e\x68\xc3\xd1\xc5\x51\x96\x83\x0f\x3a\xcd\x52\x6a\x6a\xfc\xd4\x0d\x8a\x3f\xad\xd0\xfe\x0e\x46\xbf\xca\x66\xa0\xee\x66\xd4\x27\xf3\x90\x28\x6c\xe1\x1d\x4a\x5c\x7e\xbf\x9b\x13\x96\x11\x00\x4b\x8f\x5e\x4f\x9b\xa1\x31\xaa\xd4\x1a\x25\xc5\xb2\x08\xdd\x44\xfe\xee\x1b\x73\x06\xb9\x72\x5e\xcc\xd3\xa0\x51\x07\xd6\x84\x3d\x51\x0f\x9a\x8d\x82\x63\x91\xf6\x86\x8a\xee\x87\xab\x83\xae\xc3\xe0\x2a\x44\x18\x67\x53\x34\x47\xf9\xa6\xd1\x38\x1e\xc1\xf3\x12\x35\x52\x9e\x65\x65\x4b\xe3\x4a\x60\xa1\x2e\xd1\xdf\x83\xec\x0f\x09\x6f\x95\x6f\xed\x17\x7a\xb4\xe1\x37\x13\xb6\x39\x61\x7d\x86\x17\xa4\x1c\xdb\x05\xd7\x94\xfa\x6a\xab\xad\xe1\xd4\x70\x6f\xb1\x38\xe5\x82\xa9\x0d\x0e\xef\xea\x47\x52\x0d\x6b\x6c\x13\xca\xee\x0f\x20\x11\xee\xb9\x00\x80\x52\x4b\xae\x73\xe2\xfc\xce\xc5\x34\xd6\x8e\x5e\x6f\x38\x56\x10\x86\x54\x93\x45\xb9\x59\xe8\x7d\x7d\xc7\xf8\x62\x0e\x3d\x5a\xd6\x95\x7d\x6e\x89\x44\x40\x32\xf5\x11\x85\x56\x52\x99\x6f\x7b\x5c\x9e\xeb\xf6\x42\x67\x69\x4b\x79\xc4\x60\xf0\xf2\xf4\xed\xbb\xd3\x93\xe3\xcb\xd3\x97\x4c\xcf\xdb\x2f\x0f\xff\xb2\xdf\x82\xec\x9a\xae\x83\x33\x34\x5b\x73\xc1\xd7\x84\xbc\xe3\x9b\x07\xd3\x04\x18\xec\xac\x9b\xc7\x70\xc9\x5e\xa8\xba\x51\x9f\xfc\x52\xce\x99\xd2\x2c\x52\x24\xe7\x60\xa4\x37\x5f\x27\x65\x37\x6e\xb0\xff\x3c\x88\xc7\xf0\x3a\xe8\x95\x3b\xc7\xdc\x40\x9c\xf4\xe7\x44\xb1\x24\xfe\xa0\x50\xb1\xf0\xe6\x10\x65\x23\xea\xed\xd9\xcc\xa1\x2f\xff\xbc\xef\x21\x2e\x03\x1d\x05\xa7\xbc\x56\x05\xec\x5f\xfe\x85\x10\xe8\xa5\xb3\xe8\x8a\x51\x79\x9e\x35\x95\x09\x79\x90\x05\x43\xc0\x6c\x6d\xbd\xac\x07\xf5\xc7\xbe\x5c\x98\xa6\x4e\x68\x75\xed\x19\x2e\x11\xf6\x2d\x18\x65\x09\x6e\x36\x08\x25\x20\x4e\x2d\x56\xf5\xf6\x04\x62\xcb\xe8\xf2\x5a\x01\x41\x0d\x47\x1f\x5a\x2d\x79\xfd\x95\xeb\x8d\xdb\x64\x0d\x70\xc0\x67\xc5\x8d\x1d\x92\xc6\xa2\x6d\x7b\x12\x7e\x50\x41\x8c\xbf\xc3\x66\xa4\xee\xf4\x64\x7e\x64\x85\x49\x82\x43\x5c\xe0\x87\x03\x3d\xb0\x75\xba\xdb\x52\xe4\x76\x08\x49\x77\xcb\x26\x4d\x46\x7f\x60\x50\x43\xbf\xcf\xad\xfc\x59\x32\xaf\x55\xaa\x38\xe1\x01\xa7\xaa\x41\x53\x1d\x54\xb7\x23\x2e\x68\x64\xfb\x2f\x96\x72\x2c\x2f\x20\x22\x1e\xa7\x81\x4f\x11\x99\x74\x80\xe6\x4b\xa1\xf2\x38\x4c\xe2\x7f\x87\x48\xcb\xfd\x9e\xdc\x19\x12\x22\xd6\x9e\x32\x93\xd7\xb9\x57\x65\xdf\x59\x0a\x33\x72\x88\x19\x3e\x18\x6a\x13\x08\xc0\xbc\xba\x27\x18\x4d\x90\x67\x28\x99\x06\x14\x27\xd6\xb1\xaa\x38\x95\xcc\x1d\x5a\xd5\xd5\x10\x60\x8d\xcb\x4c\x29\x99\xec\xcb\xe0\xfb\xcb\xd7\xaf\x0c\xd0\x8e\xd0\x0c\xeb\xd4\xe6\xfa\x17\x2e\x53\x91\x88\x31\x43\xbf\x3c\x60\x1e\x40\xff\xe1\xe5\x58\x3a\x81\x2e\x57\x9e\x05\xb6\xc2\x07\xce\xc1\xa4\x01\xd4\x62\x1d\xb0\xb2\x0c\xd0\xe7\x03\x4d\x41\xcd\xd7\xdf\x38\x0c\x29\xdb\xdf\x6f\x97\xb0\x19\xfe\xe6\x04\xd2\x34\x7e\x73\x17\xf3\x43\x48\x03\xea\x70\x4f\x95\xe3\x7a\xe1\xe8\x0c\x15\xe8\x6c\x13\x12\x5d\x7c\x64\x7d\x42\x01\xfe\xc5\x48\xc5\xba\x3d\x0b\xec\x90\xea\x63\x30\xcd\x8a\x58\xab\x35\x27\xde\xe2\x0e\x15\x12\x98\x7a\xcd\x1d\x06\x3f\xc4\xe5\x8d\x3c\xd6\x48\x61\x32\x1c\x65\xe6\x8c\x9d\xe6\x43\xda\x19\xa9\x0f\xd9\xc4\x72\x1c\x0a\x36\x25\x82\xea\x28\x48\x67\x93\x2b\x64\xc2\x4d\x39\x49\x8c\x6f\x80\x3b\x12\xff\x69\x24\x81\xf9\xbc\xa6\xf5\xaf\xf7\x66\x4c\xf9\x1a\xaf\x53\x0f\xcc\x5b\xfa\x9e\x08\x74\xb1\xbc\x5c\x15\xc0\x07\xd0\x07\xab\xc2\x2c\x42\x32\x9d\xc2\x10\x8f\x42\x31\xac\x5b\x4c\x36\xa6\x20\x96\xa6\xfc\xb2\x8a\x42\x52\x22\xb3\x24\x62\xa0\x39\xc7\xbb\xf2\x01\xaa\x13\xbd\x7f\x6f\x40\x99\xb0\x9c\x6c\x56\x9b\x80\xe5\x0c\x04\xef\x47\xcc\x8a\xb8\x50\x88\x10\xf0\x57\xad\x47\x5f\xfc\xd4\x89\x82\x0d\xad\xee\xf0\x44\xa1\x87\x0d\xf1\xdc\x3b\xb9\x14\x08\x6d\xf4\x48\x5c\x13\x96\x17\x4e\xc3\xad\x80\x6a\x45\xad\xba\x24\xe2\xc2\xae\x89\x26\x16\x5c\x66\x03\xc6\xa4\x65\xa9\xce\x8d\xf7\x2c\xb2\x24\xaf\xd4\x98\x02\x7a\x8f\xcf\x74\x5b\x01\xb2\xed\xeb\xea\xe5\x81\x65\xce\xf3\xf7\x8f\x42\x49\xaf\x4d\x22\x36\xa5\x9d\x97\x00\xf0\x91\xda\x6f\xc2\xf5\x0d\xa9\xdc\x93\x5c\x85\x78\xba\x12\x44\x4a\x4d\x81\xf7\xd3\x7b\x7b\xa3\x63\x11\x3e\xde\x01\xd6\x18\x06\x39\x4e\xa3\x53\x39\x17\x08\xbe\xe1\x13\x4b\x24\x65\x3c\x02\x8f\x34\xbd\xc6\xe8\x0a\x8c\x9d\xfb\x01\x1a\x3e\x1e\xa0\x98\x8e\x94\x9b\xc3\x74\xfe\x6c\x8a\xa2\xc7\x19\x01\x38\xba\x7f\x5e\x49\x5e\x72\xa4\xc6\xe1\x2c\x29\x65\x23\xc4\x6c\x78\xf7\x8e\x92\x40\x86\x88\xfd\xb0\x1e\xe8\xf4\x01\xc1\xe8\x26\x4e\x22\x60\x9e\x26\xd5\x08\x80\xb4\x24\xaa\x21\x71\x18\x7c\x73\x6f\x60\x8d\x61\x72\x86\x97\x29\xcb\xd2\x36\x8e\xf3\xa2\x34\x42\xf4\x54\xbf\x32\xe0\x13\x08\xf9\x96\x44\x87\x50\xac\x78\xf6\x34\xff\xa0\xc6\x82\x17\xe6\xd0\x78\xd8\x4c\x85\x17\x4d\xa7\xca\x2d\xa7\x26\x5d\x7b\xb0\x39\x47\x81\x05\xda\x22\x1f\x4d\xc7\x4f\xea\x23\x35\x5c\x33\xcb\x9e\x0f\x9e\x8a\x79\xdb\x3d\xd0\x35\x27\x98\xaa\x3d\xe1\x15\x9e\x75\x0f\x16\xa9\x18\xa8\x4f\x84\x34\x4f\x29\x2e\x5d\xcc\x59\x01\x8d\xe8\x4a\x4c\x70\x32\x2d\xef\x07\x6b\xb6\x70\xec\x0d\x8d\x16\xcb\x66\xbe\x61\xb3\xa8\x53\xb4\xa8\x61\x63\x20\x5c\xc6\xa0\xe1\x61\x8e\xc9\x4d\xed\xb4\x69\x9c\x9d\x6d\xcd\x24\x96\xdd\xe2\x31\xd3\xd8\x01\x71\x79\x22\x7f\xc3\x7b\xc9\xfa\xa8\xbc\x88\x47\x77\xa5\xae\xe3\x94\x2b\x30\x3c\x66\xf7\x7f\x65\x30\x1f\x2c\x08\xb0\x2a\xe4\x12\x26\xce\xd5\x63\x8b\x05\xac\x59\x72\x36\x1c\x11\x58\x1a\xda\x1d\x8e\x0b\x68\xa1\x79\x7c\x81\x01\x8f\x1b\xbb\x10\x1e\xa8\x01\xbc\x8c\xba\x17\x7e\xac\x1c\x25\x58\xd5\xf8\xeb\x48\x3e\x5a\xb3\xf5\xc7\x3f\x2e\x68\xfd\x4d\x13\x4c\xac\xe1\xab\x0b\xcc\x78\x2d\x5c\xc6\xe3\xe8\xab\x5a\xda\xe4\xc7\x08\x8c\x27\x1a\x95\xa0\x07\xfa\x15\xb5\xe3\x4a\xcf\x31\x89\xad\x1a\x41\x41\x00\x42\xe4\x0c\x7d\x95\x0a\xf4\xe3\x71\x92\xac\xcc\x78\x87\x36\x3d\x57\x9c\xa1\xd9\x34\xcf\x6e\xe3\x08\x1e\xe1\x51\xaa\x28\x7a\x52\x53\x92\x35\xeb\x0c\x62\x59\xab\x33\x67\x2b\xdc\xad\xe8\x6e\x18\xf1\x44\x06\x44\x0f\x50\x0f\x6e\x94\xf0\x61\xf0\x3a\xa4\x34\x90\x0e\x3d\xee\x2c\x5e\x7f\x17\xae\x2e\xe0\x46\xda\xa2\xea\x1c\x58\x30\x16\xb2\xa2\x76\x84\xc8\x9d\x1b\xa4\x9e\x8a\x00\x91\x3a\x00\x46\x1a\xfb\x9b\x19\x2e\x35\x65\xd7\xa0\xad\xa1\xf7\x9e\xf0\x9d\x62\x7d\x39\xca\x26\x57\x31\xba\xdf\x94\x0c\x24\xd0\x15\x0b\xee\xbd\x43\x78\x3e\x4a\x66\x94\xdb\x0d\xaf\xc5\xb9\x5b\xe3\xa2\x72\xf7\x00\xa6\x41\x17\x4f\xa7\x05\x55\xc0\xba\x30\x60\x31\x99\x16\x83\xc3\x94\x22\x34\x8a\x1e\xa7\x6b\x55\x36\x88\x31\x2e\x03\xfa\x03\x3e\x95\x78\x54\xd3\xfc\x95\x99\xc0\x04\xc0\x44\x97\x37\xb4\x43\xa3\xe0\x9b\x70\x48\x11\x14\xb3\xe9\x34\x89\xb1\x06\x47\x6c\x13\x6c\x60\xbc\x5b\xde\xa7\x28\x49\xe2\x82\x53\x15\x4d\x5d\x06\x4a\x38\x68\x20\x14\x27\x56\xc9\x7e\xcf\xf6\xc0\x6f\x73\x33\xd9\xb7\x49\xc3\xaa\xac\xb3\x98\x8b\x1c\x78\x32\x25\x04\x5e\x87\x99\x46\xc3\xb2\x99\xe6\xd9\x65\x75\xfa\x35\x1b\x54\x2e\x55\x1d\x83\xaa\x53\x9f\xc3\x1b\x4a\x62\x1d\x6e\x24\x4d\x67\x9b\x4a\x66\x89\x4d\x2b\x01\x98\x87\x26\xb8\x09\xea\xb2\x02\x5c\x76\x8c\x3f\xe2\x42\x20\xc5\xd7\x69\x3a\x00\xa5\x95\x57\x2b\x66\xbe\x25\x31\xa4\x1e\x9b\x9a\x0d\xb5\x57\x19\x54\x58\xa6\x0d\x7b\xe0\x2c\xbd\xcb\xc3\x69\x57\x14\xe6\x07\x78\xee\x6e\x10\xb3\x11\xf0\x1c\x93\x6e\x28\x2d\x79\x15\x07\x43\x84\x0a\x01\x98\x02\xf0\xa2\xcc\x7a\x98\x93\x35\xb7\x82\xa5\xf7\x5e\x53\xc0\x42\x09\x52\x78\x47\xf0\x33\xb4\x4d\xe4\xf1\xe9\x41\xd4\xa8\x40\x64\x76\xad\x56\x83\x60\xdb\x24\x93\x75\x88\x55\x5c\xae\x30\x2b\xab\x65\x41\xd2\xfc\x46\x2f\x34\xf8\x62\x73\x69\xf3\x48\xc3\xfc\xc4\xa5\xa6\xd5\xee\x3a\x4c\x73\x37\xc5\x6e\x36\x79\xc9\xed\x9f\x88\x64\xa3\xa9\xbb\x94\x70\xeb\x8f\xe7\xd0\x7c\x69\x62\x2f\xbf\x81\xf5\xa6\xbd\x9e\x3a\x8d\xa7\x53\xd4\xd6\x0d\xbe\x55\xcd\xef\x80\xa7\x8e\xd1\xbb\x10\x33\x1c\x6c\xfa\xf1\xe6\x2c\x4d\x55\xbe\x61\xd5\xb3\x7e\x32\xb7\x6a\x22\x36\x76\x75\x5e\x27\x15\xd1\x5b\x85\x5c\x8f\x58\x11\x31\xe3\x96\x5f\x19\x67\x25\x91\x28\xc0\xae\x92\x36\x3b\x36\x33\xd7\xa0\x31\xd5\x9a\xaf\xb7\x78\xa5\xb9\x1b\x0d\xd5\x9e\x76\x9b\x93\xc2\x3d\x6f\x28\x39\xab\xc1\xc3\xa2\x66\xf3\x0a\xdf\x37\xb7\x01\x7a\xf5\x0c\x14\xe3\x8a\xae\x3f\x8d\x7d\xfb\x4a\x03\x21\xd1\xcd\xe6\xcc\xe2\x0a\x72\x2c\x0c\xc7\xc1\xbf\x55\x9e\x1d\xf0\x1d\xa3\x18\x84\xe9\x9a\x2a\x93\x35\x47\x05\xd8\x09\x63\x38\x7c\x44\xaf\x55\x59\xe1\xe1\x11\xad\x25\xc1\xaf\xc1\x2b\x15\x6c\x16\x46\xc3\xce\xd7\x6e\x16\x5e\xa8\x30\x07\xa8\xb9\xe8\xa4\xdc\xed\x17\x0c\xc8\xfe\x0b\x27\x59\x8b\xd1\x57\x3d\xd0\x00\x8c\x70\x1e\xc6\xa9\xc1\x87\x58\x75\x9e\x3e\x41\x2c\xe3\xff\xb0\x34\x0b\x55\x9c\x74\x76\x5b\x2b\x0f\xef\x61\x67\x1f\xcc\xf5\xfc\x26\x91\x64\x9c\xaa\x17\xdc\x7e\xf3\xf5\xa5\x83\x72\x15\x67\x74\x05\x53\xf1\xe8\xc6\xb5\x9d\xbe\x83\x65\x89\x4a\xaf\xcb\x9b\x56\x5a\xb6\x21\x6c\x7e\xad\x5f\xdb\x19\xe2\xb5\x1d\xba\x11\x41\x17\x2a\x46\x98\x66\xa0\x37\x19\x7d\xdf\xc7\xd5\x3d\x01\x68\x0a\x8a\x05\x46\x38\xc1\x08\xf3\xe6\x8f\x82\x2f\x0f\xff\x7b\xa8\x43\x15\xf8\xaf\xff\xf1\x80\xae\xd2\x89\xc1\xfe\x49\x44\xdd\xab\xbe\xe7\x3d\x61\x24\x7f\xae\x2c\x82\x1a\xce\x51\x83\x47\xb9\xd8\x46\xe2\x0a\x4c\xc5\x5d\x66\x71\x69\x8c\x85\xe2\x05\x4c\xb4\xd5\xec\x51\x91\x0b\x06\xfc\xdc\x17\x9a\xff\xe7\x1c\x44\x49\x9c\x60\x9a\xc5\x56\xf3\xeb\x4b\x52\x18\x78\x76\xea\x39\x9a\xb8\xa5\xce\x62\x00\x5e\xf1\x24\x48\x63\xac\x0c\x1b\x27\xa1\xb9\xec\xa3\x47\xd7\xfb\x91\x56\x7f\x7f\x1a\x58\xbb\x50\xde\xd9\x97\x9b\x0a\x95\x74\xb6\x28\x6a\xb8\xd2\x29\x9f\xbc\xb0\x5a\xb8\xf3\x06\xc9\x8a\x8c\x32\x9f\xbb\x67\x75\xcb\x51\xdd\x22\x85\x15\x28\xe4\xa1\xc1\x62\xde\x4d\x98\x15\xf1\xc0\x73\x16\x63\x15\x8e\xf3\xf0\x5a\x6f\x0c\xcb\xc0\xef\x1d\xda\x6c\x12\x6a\x50\x48\x08\xb4\xfa\x18\x17\xb4\x2e\x6a\x2e\xdd\x32\xd0\xc3\xd7\x1a\xe6\x3e\x31\x44\x27\xa1\x67\xa1\xa8\xa1\xae\x5d\x9a\xdc\xcb\xf9\x05\xef\x90\x76\x69\xf7\xd7\x0d\xde\xad\xdf\x16\xcd\xc0\x57\x91\x0d\xbd\xc3\x6b\xf8\xa0\xa8\xe8\x72\x8d\xcb\x42\x47\x21\xdf\x66\xad\x77\x1d\x86\xb8\xa1\xb3\x79\x49\x49\x4a\xc6\xde\xc0\xa0\xb0\x9b\xc3\x64\x60\x46\x13\x41\x15\x46\xdd\x9b\x21\x4b\x78\x63\xcc\x71\xb0\x3c\x24\x7d\x0f\x6f\xcc\xa6\xf0\x12\x18\xcd\xd7\x37\x94\x1a\x15\xa6\x23\xf8\x14\x0b\x04\xc5\xb6\xce\x69\x99\xab\xd6\xb2\x3f\x1b\x24\x64\x92\x15\x00\x4b\x4d\x3b\xb5\x2f\x86\xcf\x54\x74\xa9\x58\xdd\x80\x8e\x3d\xc7\xf3\x8e\xdd\x16\xde\x78\x42\xb3\xc1\x98\xe7\x13\x3e\xc6\x19\xa3\x3b\x45\x05\xa3\xd3\xcc\x8c\x14\x17\xee\x65\x38\x7d\x61\xd3\x5c\x27\x1e\x57\xc2\x98\x7e\x85\x03\x04\x51\x85\x51\x3f\x5e\x2f\xb4\x13\xed\x2e\xfb\x49\x05\xd7\x15\xef\x22\xab\xa4\x59\xe1\x7e\x32\x14\x52\x36\xe6\xe2\x38\x5c\x8b\x10\x48\xe9\xf0\x47\x5d\x8e\x9a\xb6\xa5\xd0\x2d\x9a\x55\x8d\xd9\x23\x72\x9a\x0e\xd6\x35\x93\xe9\x1b\xbd\x7d\x07\xff\x45\xf4\x81\x7b\x93\x36\x5f\x5d\x35\x04\x83\x11\xe2\x85\xcd\x08\xf0\x88\xd6\x97\xb8\x5a\xa9\xee\x5d\x54\x1c\x85\xdc\x03\x6f\x52\x1b\x2d\x1e\xf1\xca\x46\x88\x73\x74\x49\xa6\x38\x08\xc7\x28\x9b\xd0\xa7\x94\xcf\x5a\x81\x58\x4e\x48\xbb\x0e\x48\x4e\x75\xf8\x15\xab\xc6\x83\x3b\x46\x5e\x33\xd9\x37\x94\x97\x32\xc5\xe8\x8e\x78\xb7\xae\xb0\x8d\x6e\xf0\x9a\x7e\xf3\x19\x74\xd3\x29\x1d\xae\x44\x5d\x15\x06\x2f\x63\x97\x95\xc8\x05\x66\x14\x75\x86\x5d\xa2\x59\xf7\x91\xb3\x36\x1b\x31\x2e\x23\xe9\x35\xf6\x54\x90\xdc\xc1\x39\x11\x98\xb4\x29\xee\x82\xc3\xfc\x59\xc2\x32\x2d\x01\xbb\xc3\xe0\xfc\x5d\xc7\xd7\x2d\x5f\xa1\xd8\xcc\xd8\x39\xc4\xc8\xe3\x5d\x98\x47\xce\xa9\x58\x12\x16\x5d\xd1\xbb\x20\xf0\x69\xf7\xaf\x5a\xd0\x67\x55\x3a\x82\xa4\x3b\xea\xd8\x57\xc6\x12\x04\xf0\xc2\x90\x4f\x0b\x52\xd0\x9b\xb0\x39\x5c\xa9\xab\x26\x39\x34\x6a\x61\x96\xde\x05\x6c\xb9\x07\x22\x4a\x35\xac\x49\x9a\x87\x1a\xb6\xe0\x57\x36\xb4\xd9\x20\x07\x1c\xf4\x8d\x0b\x8f\x38\x8e\xe6\x6c\x24\x48\x7b\x00\xd4\xdb\xab\x7a\xd4\xbc\x7a\x10\x72\x75\x6d\xcb\xcb\xca\x48\xc7\x46\xfd\x38\x90\x9e\xeb\x30\xaf\x86\xff\x62\xae\x73\xa5\x17\x4c\x93\x70\x56\x80\xa8\x6f\x60\xcd\xae\x73\xd3\xd1\xd5\x9c\x43\x81\xcd\x39\x83\x18\x93\x5b\x40\x7b\x3c\x4a\xea\x2c\x6f\xc3\x12\xf6\xfd\xd7\xc5\xa3\xc4\x7e\x05\x1f\x87\xd0\xef\xb7\x2c\xfa\xdb\x24\xec\xe6\xb4\x9d\xc2\xd1\xd3\x75\x18\x3f\x46\xf7\xdc\x84\xb7\x7c\xcf\x4f\xf3\xa4\xc3\xb5\xf2\x0f\x89\xb7\xbf\xda\x6e\xc2\x62\x93\x5b\xf5\xfa\x49\x61\x93\xa8\x7c\x67\x65\x01\x7c\xcd\x10\x7d\x3c\xc4\x93\x1b\x35\xfa\xe0\x2d\xa0\xb6\x34\x73\xed\x79\x85\x4d\x89\x1a\xb5\xdc\x0c\xd7\x76\xcf\xf1\x4e\xe5\x18\xed\xe6\x44\x85\x45\xe9\x1c\x6e\x16\xb5\x73\x41\x26\x1a\x1f\xb3\xd5\xd2\xd9\xb6\x27\x37\x71\xa3\xd8\x48\xbe\x61\x4d\x6e\x76\x9a\x88\x3d\x0c\x45\x67\x41\x98\x40\x79\x70\x06\xf0\x8d\x46\x6a\x4a\xa5\xb5\x6c\xa1\xa9\x21\x7b\x3c\x43\xf1\xab\xc5\x8a\x94\xcf\x9e\x16\xe2\x0f\xf9\x27\x89\xf6\x98\xf3\x70\xd1\x24\x84\x56\xb3\x14\x38\xb8\x80\x49\x6a\x33\x49\x3f\x49\x1e\x6f\xca\xd0\x03\x22\xfb\xbb\xd9\x27\x49\x3d\x35\xef\x54\x6f\x79\xea\x29\x73\xb0\xc7\x4e\x91\xa1\xdf\x2a\xe6\x00\x1e\xf5\x22\xf2\x6d\x26\x01\xfa\xff\x5d\x16\xc1\x5b\x74\x23\xba\x6c\x2c\x97\x77\x3a\x18\x18\x3a\xeb\x75\x9a\x67\x00\x2d\x2b\xe1\x5a\x11\x3c\x57\x47\xe3\xa0\xc2\x3e\xee\xcf\xd7\xba\x2d\xea\x1c\x2a\x47\x51\x69\xe9\x75\xab\x37\xc6\xe9\x6d\xf6\x41\x45\xad\xee\xad\xc3\x1f\x9f\x26\x93\x70\x3a\xd0\x93\xd4\x75\x46\x94\x4d\x4e\xe7\x7b\xb2\x6d\xd6\x6b\x3c\x99\xa8\x28\x0e\x4b\xac\x2b\x3a\xce\xb0\x77\x2a\xe5\x3c\xc4\x57\xc9\x32\x77\xfb\xce\xc6\xee\xd6\x86\x81\x48\xb9\xbf\x31\xe4\x3e\x96\x9c\x73\xc3\x02\x9e\x62\x18\xcf\x4c\x94\xc2\xfc\xb0\x40\x62\xd7\x40\x09\xcb\x07\x3c\x61\x44\xf0\x16\x3a\x5d\xa4\x78\x36\x70\xba\x46\xc5\xc5\xaf\x69\x3c\xc2\x03\x57\x24\x07\x26\x92\x6e\x88\x22\x18\xb9\xcf\x82\xab\x19\x06\x73\x4b\xff\x9a\x8a\x13\xf3\xf6\x92\xb3\xac\x0a\xd6\xb5\x76\x1b\x74\x30\x07\xc2\xd7\x4b\x2e\x09\x73\x52\x15\x55\x4e\x8a\x2c\xca\x6c\x6a\x63\xf4\xf5\x65\xa4\xaa\xc9\x01\xda\xbc\xe1\x22\xe4\x1b\x61\xd6\xfb\xb4\x8c\x1b\xd8\xa5\x7d\xcd\x26\xfe\xed\x1a\xfb\x8c\xab\x6f\xab\x2d\xd7\x46\xf0\x0b\x9f\x3c\x76\x76\xc9\x7b\xf6\x40\xe5\x53\x62\x17\xc7\x26\x3e\x15\x56\x01\xd0\xa6\x2d\x6c\x17\x97\xea\xc6\x12\xdd\x18\x32\xd3\x98\x93\x8f\x95\xf3\xee\xd6\x86\x63\xb6\x48\x3a\xc8\xba\xf0\xd9\xda\x99\x00\xa2\xb7\x94\xf7\xb5\x61\x02\x34\x5a\xf2\x5e\x95\x68\x4a\x7e\xa6\xc9\xcc\x1c\x8e\xb5\x5b\xc7\x72\xd1\xe4\xbc\x75\x61\xb2\x29\x8f\x0e\x71\x5a\x30\xe5\x8d\x0f\xae\x4d\x26\x84\x9f\x70\x81\xf6\xa9\x9c\x51\x56\x2f\xda\x67\xe3\x31\x80\xf4\x96\xae\xf4\x75\xb9\x23\x7a\x22\xbe\xfc\xb7\x74\xfc\xf7\x11\x1a\x7c\x8c\xd1\xc2\xf6\x1e\xa2\x6b\xf3\x4e\x3e\x39\x7a\x14\x0f\x44\x90\x0d\xed\xd8\xdb\x35\x8c\xab\xab\x70\x6b\xbb\xb6\xf0\x6e\x3d\x26\xf1\x4e\x32\x74\x3d\xa6\xf2\xe3\x60\xe0\xaa\x46\xf2\x4e\x32\x70\x75\xe3\xf9\x71\x30\x6f\x59\xb3\xb9\x29\x5e\x85\x77\x68\x54\xb4\x7c\xbc\xea\x71\xee\x33\xb9\xba\x5d\x2a\xca\x52\xa3\xc6\x27\x11\x77\x42\x72\x2c\x1b\x77\xea\x41\x91\x4f\x62\x5f\xad\xaf\x83\xad\x2f\x71\xe0\xd2\xfa\x02\x4e\x8f\x8f\x6f\xeb\xd9\x3e\x1f\x13\x9f\xd6\x11\x69\x7a\x7c\x7c\x5a\x7d\x97\x7c\x4c\x3c\x5a\x75\xaf\xfc\x94\xf6\x01\x8d\xcb\x82\xb5\xef\xfa\x1c\x4c\x86\xd8\x1c\x19\x9f\x7b\x85\x07\xc3\x20\x0f\xd3\x6b\x3a\xa5\x25\xa9\x69\x3f\xff\x2b\xca\x30\x2f\x17\xc9\xa2\xf6\xae\xa2\x1a\x48\xf8\x0e\x2a\x17\xff\x63\x24\x95\xa4\xf6\x63\x9f\xcb\xf8\x56\xd1\x19\x9a\xde\x0b\xa8\x3e\x02\x47\x29\x9c\x0e\x9f\xb6\xe9\x82\x9b\x33\xad\x95\x18\x3c\x5d\x19\x4a\x5a\x2d\x57\x8a\x16\xc8\x5a\x80\xc4\x8f\xb3\x49\x5c\x96\x78\x48\x48\x67\xae\x44\x76\x94\x9b\x38\x9d\xc1\x10\x98\x2b\x9e\x74\xa0\x27\xf2\x91\x00\x8b\x06\xc4\x0a\x27\xa0\x97\x46\x2f\x7a\xa4\x86\x5f\xdc\x64\x77\x34\xea\xbf\x66\x8a\x6b\x8a\x7a\x4d\x5b\x81\x1f\xba\xab\x78\x90\xa5\x5e\xd8\x6d\x5e\x24\x8c\x06\x7c\x83\x0d\xd4\x9a\x16\x04\x9d\x82\x4a\x77\x35\x33\xfd\x61\xf0\xd2\x2d\x84\xfe\x91\x89\x02\x88\xa5\x51\x98\xc3\x8c\xe3\xb1\xc2\xba\xb8\xfc\xae\x47\x02\xfa\x69\x60\xa6\x74\x17\x88\x5c\xca\xa8\xe0\xfd\x3a\x4c\xe3\xe9\x2c\x41\xcb\xa2\x17\xf6\xa0\x18\xc0\x87\x58\xb8\x88\x45\xaa\xee\xfe\x97\x86\x76\xfb\xd5\x79\x73\xb8\x75\xf5\xb4\xe3\xc5\xd0\xe8\x7b\x1c\x4d\x98\xea\x71\x8f\x82\x6f\x65\xb0\xae\xe0\xe6\x96\x90\x35\xc9\x00\x97\x74\xc4\x7d\xe7\xd5\xee\x70\xee\xf8\xd2\xfc\x43\xae\x2f\x18\x7a\x2f\x8d\xf8\x22\x94\x4e\x1c\x88\x14\x83\x6a\x8e\xcc\xe3\xb2\xda\x37\x98\xc9\x61\x33\x04\x34\x39\x1e\x9c\x18\x5b\x12\xff\x4d\x0b\x9a\x41\xc3\xda\xb4\x8f\x52\xf6\xb6\x4c\xee\x87\x13\xf5\x06\x86\x74\x4a\xff\xef\x4f\x22\x35\x4a\xc2\x1c\xef\x7a\x45\xb3\x44\x05\x7b\xdc\xf6\x76\x2f\xf8\x95\x46\x05\x73\x24\x83\x2d\xfc\xaf\xc1\x9f\xdc\x77\x6f\x43\x6d\x3e\xea\x91\x2e\xb0\x02\xe4\xe8\xb9\xf7\xc6\x9f\xaa\x0f\xff\xff\x00\x00\x00\xff\xff\xa3\x3d\x8d\x7a\x4a\x45\x02\x00") + +func uiTsTypingsJqueryJqueryDTsBytes() ([]byte, error) { + return bindataRead( + _uiTsTypingsJqueryJqueryDTs, + "ui/ts/typings/jquery/jquery.d.ts", + ) +} + +func uiTsTypingsJqueryJqueryDTs() (*asset, error) { + bytes, err := uiTsTypingsJqueryJqueryDTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/typings/jquery/jquery.d.ts", size: 148810, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _uiTsTypingsMithriljsMithrilDTs = []byte("\x1f\x8b\x08\x00\x00\x09\x6e\x88\x00\xff\xb4\x58\x5b\x4f\xdb\xc8\x17\x7f\x0e\x9f\x62\xd4\x27\x47\x8a\x42\xf5\x7f\x74\xda\x44\x55\xa1\xe2\xbf\x2a\xd0\x25\x09\x5b\x09\xa1\xd5\xc4\x3e\x49\xbc\xd8\x1e\xef\xcc\x38\x21\x5b\xf8\xee\x7b\xe6\xe6\x4b\x6c\x07\xc2\x0a\x04\xd8\x9e\x99\x73\xbf\xfd\xec\xd3\xd3\xcb\x48\xae\x79\x14\x93\x8f\xc3\xff\x0d\x3f\x12\xb9\xcb\x80\x84\xb0\x8c\xd2\x48\x46\x2c\x15\x64\xc9\x38\x99\xe1\xa2\x08\x78\x94\xc9\x93\x10\x82\x98\x72\x20\x09\x0b\xf3\x18\xc8\x9f\x89\xa5\xfe\x75\xd2\x8b\x52\x09\x7c\x49\x03\x20\x96\xe5\x54\x52\x19\x05\xb8\x75\xd2\xeb\x7d\x9a\x11\x78\x94\x90\x86\xc2\xed\x7e\x65\xa9\xe4\x2c\x8e\x81\x8f\x3d\x01\x31\x04\x92\x71\x9f\x08\xc9\xa3\x74\x35\x20\x54\xe2\xcd\x22\x97\x20\x7c\x47\xf0\xa5\x58\x1a\x90\xe1\x70\x18\xac\xa3\x38\xe4\x90\xfa\xe4\x0b\xe7\x74\xf7\xc9\x50\x3e\xd9\xc3\xb7\x11\x97\x39\x8d\xcf\x63\x48\x20\x95\x4f\x85\xcc\x24\x63\x29\x2e\x7c\x9a\x8d\xc7\xfd\x82\x73\xfd\xf0\xe8\x0d\xea\xbe\xaf\x3e\xa8\x50\xc6\x59\x86\x87\x3c\xbc\x26\x91\x80\xe2\xe8\x0f\xf3\x8c\x5b\x7d\xb2\xbf\x88\x97\x0c\xb8\xdc\xe1\xe6\xa8\xc2\x62\x43\xe3\x1c\x19\xcc\xfa\xd5\xf3\xfb\x07\xbd\x96\xdd\xeb\xc5\x5f\x68\xf6\x78\x44\x4e\x4f\x49\x12\xad\xd6\x92\x2c\x80\xc8\x35\x95\xf8\x2f\x12\x44\xac\x59\x1e\x87\x6a\xad\xa0\xa0\xe9\x6e\xac\xb4\xdf\x22\x27\x15\x3e\xa5\xbe\xde\x29\x3d\x17\xd0\x38\x5e\xd0\xe0\xc1\x27\x4e\x31\x24\xea\x93\xcf\x63\xb2\x61\x51\x88\x5a\x78\xa5\xb1\xe7\x1b\x74\x87\xde\xc3\x33\xda\x2d\x26\x0d\x0f\x47\x8b\x33\x26\xad\x2b\x7d\x72\xc5\x42\x40\xa1\xce\xef\x3e\x69\x89\x04\x0a\x9d\x8d\xde\xca\xbc\x24\xce\x15\xb3\x77\x52\xec\x78\xde\x86\x16\x89\x83\x92\x61\x37\x83\x01\x99\x51\xbe\x1a\x7b\x15\x7d\x7e\x50\x4e\x13\xc0\x12\x8f\xfe\x81\xb0\xa9\x9c\xa5\x18\x90\xc7\x89\xaf\xee\xfa\xad\x16\xa0\x7c\xfc\x95\x3c\x17\xd2\x5b\xcb\x24\x76\x79\xd0\x77\x37\x5a\x45\xac\xa2\x10\x78\xdd\x06\x57\x39\x17\xb3\xcb\xef\x67\x2c\xc8\xd5\x03\x52\xa9\x24\x19\x1d\x41\x82\x2e\x2e\xea\xb4\xb5\xda\x06\xaa\xe3\x05\x70\x03\x01\x07\xaa\x5a\xe0\xc4\x27\x0b\xc6\x62\xa0\xe9\x7b\x88\xbb\xbb\x7f\x8d\x40\x2d\x31\xe4\x74\xeb\xab\x46\xdb\xeb\x79\x9a\xa4\x55\xb3\x1e\xfa\x91\x4a\x58\xed\x9a\xf5\x6b\x3c\xac\x4b\xfc\x59\xb3\x64\xd8\x4c\x2d\xc7\x23\xb2\xa9\x6e\x1f\xce\x0a\x9a\xc7\xf2\xc6\xf0\x72\x55\xad\x59\x97\xad\x5b\xef\x0a\x93\xc1\x85\xa2\x47\x88\x2c\x62\xf3\x46\x69\xda\x67\xd0\xe0\x16\x89\xff\xab\x31\x47\x63\x95\xd2\x85\x33\x55\x15\xe2\x28\x7b\xc4\x93\xa6\xe3\x0d\xc8\x26\x64\x89\x7b\xaa\x9a\xe0\x65\x54\xae\x4b\x3d\x32\x55\x22\x62\xa2\x5b\xd8\xc0\xf6\xc3\x1b\xc8\x62\x9c\x89\x17\x91\xc0\x81\xb1\x6b\x0f\x99\x57\x4f\xff\x9e\xe6\xe3\x3d\xc0\xae\xa5\x3c\x7a\xba\x2f\x41\x6d\x61\x91\x63\x8e\xfd\x9e\x03\xdf\x4d\xf5\xa2\x17\x52\x49\x2b\xfa\x9a\x55\xcb\x59\x40\xf3\xe4\xd4\x49\x31\x24\x45\x82\xc0\xdf\x39\x08\x55\xb7\x1e\xcb\x34\x1c\x28\x7c\xfc\xf3\xe2\xe6\xda\x2c\xf5\x5b\x66\x91\x36\x03\x63\x05\x9c\x2b\xc7\xea\x0c\xc3\x16\xc0\x39\xe3\xaa\x9d\x9f\xab\x9b\x7a\x2a\x8c\x2b\x03\xe7\xcc\x12\xda\x71\xa4\x55\x11\xbb\x34\xa8\xcc\x3f\xd1\x22\xf4\xee\xbe\x45\x95\xbb\x7b\xa3\x8c\x90\x94\x4b\xd5\x89\x72\xa9\x8b\xcc\xab\x88\xc7\x14\x6c\xdd\xc1\x2d\x9c\x74\xdf\x10\x00\x61\x3a\x49\x22\xf2\x48\x82\xb6\x2b\x13\xae\x0e\x13\x16\x3c\xfc\x11\xa5\x21\xc3\xca\x34\xd7\xbe\xbb\xd1\x86\x21\x1c\x52\x61\x77\x8e\x75\xe6\xa8\xbf\x06\x5c\xaa\x37\x06\x2d\x00\x53\x00\x33\x26\xcd\x93\x05\x70\x45\x2b\xe9\x6a\x52\x8d\xbc\x42\x49\x2a\xdf\x1a\x08\x49\x6d\xba\xce\x63\xf2\xf1\xee\x7e\x64\xe4\xa2\x49\x58\x67\xcb\x68\x95\x73\x6d\x2f\x59\xe6\x69\x60\x6e\xd0\x52\x9a\x12\x5b\x27\x2d\x1a\x5a\xd5\x0c\xb9\x56\xf0\xf8\xa2\x72\xd5\xa1\x4a\x6a\xd2\xd1\x14\xcb\xd8\x58\x85\x4b\xc3\x08\xea\x49\xc9\xc6\x1c\x3f\xa0\x6a\x85\x42\xe9\x29\x23\x19\x43\xcd\x75\x08\x63\x85\xb8\xc2\x89\xd6\x5c\xad\xaf\x68\x63\x4b\x4d\x6b\x3e\x28\x35\x3c\x53\x90\x19\x85\xc9\x35\x60\xa2\x2c\x04\x48\xc2\x96\x44\x03\x16\x03\x91\x1c\xcc\x4e\x01\x42\xd1\xe6\xdb\x8d\x0b\x7a\x90\x63\xf2\xa7\x52\x0d\x51\x28\x1d\x3b\xea\xc8\x9a\xb2\x67\x6a\x62\x96\xe6\x69\xcc\x68\x38\xf1\x60\xa3\x88\x37\xc6\x9d\x1a\x2f\xbd\xc4\xe0\x9b\x4b\x84\xce\xb6\x6c\x62\x7e\x98\xdf\x6d\x04\xdb\x83\xad\xdd\x30\x09\x24\x8f\x0d\x08\x3d\x04\x94\xbb\x95\x7e\x05\x88\x31\x92\x82\xe2\xd9\xef\x36\xf9\xe9\x17\x06\x66\xab\x2c\x9b\x91\x67\x15\xf6\x0d\x5a\xe1\xd7\x4d\x1a\x37\x94\x79\x01\x12\xbd\x08\xaf\x50\x3f\x62\x7f\xaa\x5a\x7a\x0e\x42\x7d\x1e\xcf\x5e\xab\x4a\x13\xc9\x17\xb1\xd2\x90\xb1\x8a\xfa\xf5\x82\x64\xbf\x4d\xaf\xaf\xdc\x7e\x17\xb3\xbd\xd7\x88\x7d\x8b\xca\xe6\xfb\xdf\xa5\xb9\xa9\xfd\x52\x3c\xef\x2a\x73\xf1\xbe\x15\x64\x1a\x09\x2d\x22\x2a\x83\x45\xb3\xe2\x20\x58\xbc\x01\xa3\xed\xc4\xa8\x5b\x22\x3c\xd5\xb0\x8b\x2d\xf5\x52\x52\x6e\x76\xbf\x85\x75\x59\x37\xcd\x83\x00\x84\xf8\x6a\xdf\x76\x14\x5e\x9e\x5b\xa7\x55\x7c\x35\xdf\x77\xde\x1e\xff\x79\x27\x7f\x3d\x52\x0b\xee\x7b\xac\xdd\xbc\xad\xb1\x2f\x90\xc5\xfc\x85\xf8\xbf\x22\xba\x6b\x48\x51\xa6\x27\x8c\x91\xe5\xab\xdc\x4c\xbf\xac\xcd\x3b\x0c\x79\x2f\xba\x06\xcd\x41\x3e\xb7\x25\x1f\x15\xde\x01\xd1\x30\xa5\xe4\x69\x9c\xa7\xf8\xde\xb6\x43\x1d\xa7\xcf\xe0\xb6\xdb\x92\xe3\xb8\xce\x5f\xc7\xb5\x41\xf5\x06\x29\xcf\x2d\x71\x2f\xb1\x9d\x8e\x3b\x76\xb8\x35\x0b\x6b\x43\x31\xe7\x71\xed\x51\x00\xaf\xed\x67\x38\x45\xb7\x8c\xd7\x89\x14\xd4\x9c\xb8\xd1\xd1\x53\x79\xba\x42\xe0\x9e\x86\x25\x26\xd6\xbc\xd2\x2d\xa7\x99\x2d\x97\x89\xc5\xa7\xa6\xfa\x2c\xa5\x39\xa1\x4d\x6b\xdd\x47\x65\x0c\xfa\x30\xbb\x33\x36\x75\x0b\xee\x60\x45\x27\x68\x9c\x3e\x2b\x97\x2a\x45\x62\x79\x63\x6f\xe2\x08\xe9\x26\xde\xe3\x1a\xdd\xfc\xf3\xf2\xfb\x85\x94\xd9\x8d\x81\xc9\x03\x72\x10\x24\x97\x42\xd5\x37\xb6\xc9\x3e\x46\x77\xad\xc5\xe2\x8d\x37\x08\xa8\x1f\x76\x1e\x57\xdf\xee\xaa\x61\x78\x3e\xc1\x5a\x77\x5f\xf1\x36\x94\x3b\x56\x7e\xf1\x2d\x6f\x58\xfb\x7c\x37\xaa\x1d\x4e\xba\x8f\xed\x7f\x1a\xfc\x60\xcf\x7d\xb0\x53\x0e\x1e\x33\xc6\x25\xf9\x4c\x92\x11\xaa\xf0\x6f\x00\x00\x00\xff\xff\x3a\xb5\x30\x94\x78\x14\x00\x00") + +func uiTsTypingsMithriljsMithrilDTsBytes() ([]byte, error) { + return bindataRead( + _uiTsTypingsMithriljsMithrilDTs, + "ui/ts/typings/mithriljs/mithril.d.ts", + ) +} + +func uiTsTypingsMithriljsMithrilDTs() (*asset, error) { + bytes, err := uiTsTypingsMithriljsMithrilDTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "ui/ts/typings/mithriljs/mithril.d.ts", size: 5240, mode: os.FileMode(420), modTime: time.Unix(1400000000, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +// Asset loads and returns the asset for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func Asset(name string) ([]byte, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("Asset %s can't read by error: %v", name, err) + } + return a.bytes, nil + } + return nil, fmt.Errorf("Asset %s not found", name) +} + +// MustAsset is like Asset but panics when Asset would return an error. +// It simplifies safe initialization of global variables. +func MustAsset(name string) []byte { + a, err := Asset(name) + if err != nil { + panic("asset: Asset(" + name + "): " + err.Error()) + } + + return a +} + +// AssetInfo loads and returns the asset info for the given name. +// It returns an error if the asset could not be found or +// could not be loaded. +func AssetInfo(name string) (os.FileInfo, error) { + cannonicalName := strings.Replace(name, "\\", "/", -1) + if f, ok := _bindata[cannonicalName]; ok { + a, err := f() + if err != nil { + return nil, fmt.Errorf("AssetInfo %s can't read by error: %v", name, err) + } + return a.info, nil + } + return nil, fmt.Errorf("AssetInfo %s not found", name) +} + +// AssetNames returns the names of the assets. +func AssetNames() []string { + names := make([]string, 0, len(_bindata)) + for name := range _bindata { + names = append(names, name) + } + return names +} + +// _bindata is a table, holding each asset generator, mapped to its name. +var _bindata = map[string]func() (*asset, error){ + "ui/css/app.css": uiCssAppCss, + "ui/css/graph.css": uiCssGraphCss, + "ui/css/libs/nvd3/1.7.1/nv.d3.min.css": uiCssLibsNvd3171NvD3MinCss, + "ui/css/rest_explorer.css": uiCssRest_explorerCss, + "ui/index.html": uiIndexHtml, + "ui/js/app.js": uiJsAppJs, + "ui/js/libs/d3/3.3.5/d3.min.js": uiJsLibsD3335D3MinJs, + "ui/js/libs/mithriljs/0.2.0/mithril.min.js": uiJsLibsMithriljs020MithrilMinJs, + "ui/js/libs/mithriljs/0.2.0/mithril.min.js.map": uiJsLibsMithriljs020MithrilMinJsMap, + "ui/js/libs/nvd3/1.7.1/nv.d3.min.js": uiJsLibsNvd3171NvD3MinJs, + "ui/ts/app.ts": uiTsAppTs, + "ui/ts/components/metrics.ts": uiTsComponentsMetricsTs, + "ui/ts/header.ts": uiTsHeaderTs, + "ui/ts/models/node_status.ts": uiTsModelsNode_statusTs, + "ui/ts/models/stats.ts": uiTsModelsStatsTs, + "ui/ts/models/store_status.ts": uiTsModelsStore_statusTs, + "ui/ts/models/timeseries.ts": uiTsModelsTimeseriesTs, + "ui/ts/pages/graph.ts": uiTsPagesGraphTs, + "ui/ts/pages/monitor.ts": uiTsPagesMonitorTs, + "ui/ts/pages/nodes.ts": uiTsPagesNodesTs, + "ui/ts/pages/rest_explorer.ts": uiTsPagesRest_explorerTs, + "ui/ts/pages/stores.ts": uiTsPagesStoresTs, + "ui/ts/tsconfig.json": uiTsTsconfigJson, + "ui/ts/typings/d3/d3.d.ts": uiTsTypingsD3D3DTs, + "ui/ts/typings/jquery/jquery.d.ts": uiTsTypingsJqueryJqueryDTs, + "ui/ts/typings/mithriljs/mithril.d.ts": uiTsTypingsMithriljsMithrilDTs, +} + +// AssetDir returns the file names below a certain +// directory embedded in the file by go-bindata. +// For example if you run go-bindata on data/... and data contains the +// following hierarchy: +// data/ +// foo.txt +// img/ +// a.png +// b.png +// then AssetDir("data") would return []string{"foo.txt", "img"} +// AssetDir("data/img") would return []string{"a.png", "b.png"} +// AssetDir("foo.txt") and AssetDir("notexist") would return an error +// AssetDir("") will return []string{"data"}. +func AssetDir(name string) ([]string, error) { + node := _bintree + if len(name) != 0 { + cannonicalName := strings.Replace(name, "\\", "/", -1) + pathList := strings.Split(cannonicalName, "/") + for _, p := range pathList { + node = node.Children[p] + if node == nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + } + } + if node.Func != nil { + return nil, fmt.Errorf("Asset %s not found", name) + } + rv := make([]string, 0, len(node.Children)) + for childName := range node.Children { + rv = append(rv, childName) + } + return rv, nil +} + +type bintree struct { + Func func() (*asset, error) + Children map[string]*bintree +} + +var _bintree = &bintree{nil, map[string]*bintree{ + "ui": {nil, map[string]*bintree{ + "css": {nil, map[string]*bintree{ + "app.css": {uiCssAppCss, map[string]*bintree{}}, + "graph.css": {uiCssGraphCss, map[string]*bintree{}}, + "libs": {nil, map[string]*bintree{ + "nvd3": {nil, map[string]*bintree{ + "1.7.1": {nil, map[string]*bintree{ + "nv.d3.min.css": {uiCssLibsNvd3171NvD3MinCss, map[string]*bintree{}}, + }}, + }}, + }}, + "rest_explorer.css": {uiCssRest_explorerCss, map[string]*bintree{}}, + }}, + "index.html": {uiIndexHtml, map[string]*bintree{}}, + "js": {nil, map[string]*bintree{ + "app.js": {uiJsAppJs, map[string]*bintree{}}, + "libs": {nil, map[string]*bintree{ + "d3": {nil, map[string]*bintree{ + "3.3.5": {nil, map[string]*bintree{ + "d3.min.js": {uiJsLibsD3335D3MinJs, map[string]*bintree{}}, + }}, + }}, + "mithriljs": {nil, map[string]*bintree{ + "0.2.0": {nil, map[string]*bintree{ + "mithril.min.js": {uiJsLibsMithriljs020MithrilMinJs, map[string]*bintree{}}, + "mithril.min.js.map": {uiJsLibsMithriljs020MithrilMinJsMap, map[string]*bintree{}}, + }}, + }}, + "nvd3": {nil, map[string]*bintree{ + "1.7.1": {nil, map[string]*bintree{ + "nv.d3.min.js": {uiJsLibsNvd3171NvD3MinJs, map[string]*bintree{}}, + }}, + }}, + }}, + }}, + "ts": {nil, map[string]*bintree{ + "app.ts": {uiTsAppTs, map[string]*bintree{}}, + "components": {nil, map[string]*bintree{ + "metrics.ts": {uiTsComponentsMetricsTs, map[string]*bintree{}}, + }}, + "header.ts": {uiTsHeaderTs, map[string]*bintree{}}, + "models": {nil, map[string]*bintree{ + "node_status.ts": {uiTsModelsNode_statusTs, map[string]*bintree{}}, + "stats.ts": {uiTsModelsStatsTs, map[string]*bintree{}}, + "store_status.ts": {uiTsModelsStore_statusTs, map[string]*bintree{}}, + "timeseries.ts": {uiTsModelsTimeseriesTs, map[string]*bintree{}}, + }}, + "pages": {nil, map[string]*bintree{ + "graph.ts": {uiTsPagesGraphTs, map[string]*bintree{}}, + "monitor.ts": {uiTsPagesMonitorTs, map[string]*bintree{}}, + "nodes.ts": {uiTsPagesNodesTs, map[string]*bintree{}}, + "rest_explorer.ts": {uiTsPagesRest_explorerTs, map[string]*bintree{}}, + "stores.ts": {uiTsPagesStoresTs, map[string]*bintree{}}, + }}, + "tsconfig.json": {uiTsTsconfigJson, map[string]*bintree{}}, + "typings": {nil, map[string]*bintree{ + "d3": {nil, map[string]*bintree{ + "d3.d.ts": {uiTsTypingsD3D3DTs, map[string]*bintree{}}, + }}, + "jquery": {nil, map[string]*bintree{ + "jquery.d.ts": {uiTsTypingsJqueryJqueryDTs, map[string]*bintree{}}, + }}, + "mithriljs": {nil, map[string]*bintree{ + "mithril.d.ts": {uiTsTypingsMithriljsMithrilDTs, map[string]*bintree{}}, + }}, + }}, + }}, + }}, +}} + +// RestoreAsset restores an asset under the given directory +func RestoreAsset(dir, name string) error { + data, err := Asset(name) + if err != nil { + return err + } + info, err := AssetInfo(name) + if err != nil { + return err + } + err = os.MkdirAll(_filePath(dir, path.Dir(name)), os.FileMode(0755)) + if err != nil { + return err + } + err = ioutil.WriteFile(_filePath(dir, name), data, info.Mode()) + if err != nil { + return err + } + err = os.Chtimes(_filePath(dir, name), info.ModTime(), info.ModTime()) + if err != nil { + return err + } + return nil +} + +// RestoreAssets restores an asset under the given directory recursively +func RestoreAssets(dir, name string) error { + children, err := AssetDir(name) + // File + if err != nil { + return RestoreAsset(dir, name) + } + // Dir + for _, child := range children { + err = RestoreAssets(dir, path.Join(name, child)) + if err != nil { + return err + } + } + return nil +} + +func _filePath(dir, name string) string { + cannonicalName := strings.Replace(name, "\\", "/", -1) + return filepath.Join(append([]string{dir}, strings.Split(cannonicalName, "/")...)...) +} diff --git a/samples/Go/gen-go-linguist-thrift.go b/samples/Go/gen-go-linguist-thrift.go new file mode 100644 index 00000000..3f972e99 --- /dev/null +++ b/samples/Go/gen-go-linguist-thrift.go @@ -0,0 +1,18 @@ +// Autogenerated by Thrift Compiler (1.0.0-dev) +// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + +package linguist + +import ( + "bytes" + "fmt" + "git.apache.org/thrift.git/lib/go/thrift" +) + +// (needed to ensure safety because of naive import list construction.) +var _ = thrift.ZERO +var _ = fmt.Printf +var _ = bytes.Equal + +func init() { +} diff --git a/samples/Groff/Tcl.n b/samples/Groff/Tcl.n new file mode 100644 index 00000000..c7fa9f6f --- /dev/null +++ b/samples/Groff/Tcl.n @@ -0,0 +1,275 @@ +'\" +'\" Copyright (c) 1993 The Regents of the University of California. +'\" Copyright (c) 1994-1996 Sun Microsystems, Inc. +'\" +'\" See the file "license.terms" for information on usage and redistribution +'\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. +'\" +.TH Tcl n "8.6" Tcl "Tcl Built-In Commands" +.so man.macros +.BS +.SH NAME +Tcl \- Tool Command Language +.SH SYNOPSIS +Summary of Tcl language syntax. +.BE +.SH DESCRIPTION +.PP +The following rules define the syntax and semantics of the Tcl language: +.IP "[1] \fBCommands.\fR" +A Tcl script is a string containing one or more commands. +Semi-colons and newlines are command separators unless quoted as +described below. +Close brackets are command terminators during command substitution +(see below) unless quoted. +.IP "[2] \fBEvaluation.\fR" +A command is evaluated in two steps. +First, the Tcl interpreter breaks the command into \fIwords\fR +and performs substitutions as described below. +These substitutions are performed in the same way for all +commands. +Secondly, the first word is used to locate a command procedure to +carry out the command, then all of the words of the command are +passed to the command procedure. +The command procedure is free to interpret each of its words +in any way it likes, such as an integer, variable name, list, +or Tcl script. +Different commands interpret their words differently. +.IP "[3] \fBWords.\fR" +Words of a command are separated by white space (except for +newlines, which are command separators). +.IP "[4] \fBDouble quotes.\fR" +If the first character of a word is double-quote +.PQ \N'34' +then the word is terminated by the next double-quote character. +If semi-colons, close brackets, or white space characters +(including newlines) appear between the quotes then they are treated +as ordinary characters and included in the word. +Command substitution, variable substitution, and backslash substitution +are performed on the characters between the quotes as described below. +The double-quotes are not retained as part of the word. +.IP "[5] \fBArgument expansion.\fR" +If a word starts with the string +.QW {*} +followed by a non-whitespace character, then the leading +.QW {*} +is removed and the rest of the word is parsed and substituted as any other +word. After substitution, the word is parsed as a list (without command or +variable substitutions; backslash substitutions are performed as is normal for +a list and individual internal words may be surrounded by either braces or +double-quote characters), and its words are added to the command being +substituted. For instance, +.QW "cmd a {*}{b [c]} d {*}{$e f {g h}}" +is equivalent to +.QW "cmd a b {[c]} d {$e} f {g h}" . +.IP "[6] \fBBraces.\fR" +If the first character of a word is an open brace +.PQ { +and rule [5] does not apply, then +the word is terminated by the matching close brace +.PQ } "" . +Braces nest within the word: for each additional open +brace there must be an additional close brace (however, +if an open brace or close brace within the word is +quoted with a backslash then it is not counted in locating the +matching close brace). +No substitutions are performed on the characters between the +braces except for backslash-newline substitutions described +below, nor do semi-colons, newlines, close brackets, +or white space receive any special interpretation. +The word will consist of exactly the characters between the +outer braces, not including the braces themselves. +.IP "[7] \fBCommand substitution.\fR" +If a word contains an open bracket +.PQ [ +then Tcl performs \fIcommand substitution\fR. +To do this it invokes the Tcl interpreter recursively to process +the characters following the open bracket as a Tcl script. +The script may contain any number of commands and must be terminated +by a close bracket +.PQ ] "" . +The result of the script (i.e. the result of its last command) is +substituted into the word in place of the brackets and all of the +characters between them. +There may be any number of command substitutions in a single word. +Command substitution is not performed on words enclosed in braces. +.IP "[8] \fBVariable substitution.\fR" +If a word contains a dollar-sign +.PQ $ +followed by one of the forms +described below, then Tcl performs \fIvariable +substitution\fR: the dollar-sign and the following characters are +replaced in the word by the value of a variable. +Variable substitution may take any of the following forms: +.RS +.TP 15 +\fB$\fIname\fR +. +\fIName\fR is the name of a scalar variable; the name is a sequence +of one or more characters that are a letter, digit, underscore, +or namespace separators (two or more colons). +Letters and digits are \fIonly\fR the standard ASCII ones (\fB0\fR\(en\fB9\fR, +\fBA\fR\(en\fBZ\fR and \fBa\fR\(en\fBz\fR). +.TP 15 +\fB$\fIname\fB(\fIindex\fB)\fR +. +\fIName\fR gives the name of an array variable and \fIindex\fR gives +the name of an element within that array. +\fIName\fR must contain only letters, digits, underscores, and +namespace separators, and may be an empty string. +Letters and digits are \fIonly\fR the standard ASCII ones (\fB0\fR\(en\fB9\fR, +\fBA\fR\(en\fBZ\fR and \fBa\fR\(en\fBz\fR). +Command substitutions, variable substitutions, and backslash +substitutions are performed on the characters of \fIindex\fR. +.TP 15 +\fB${\fIname\fB}\fR +. +\fIName\fR is the name of a scalar variable or array element. It may contain +any characters whatsoever except for close braces. It indicates an array +element if \fIname\fR is in the form +.QW \fIarrayName\fB(\fIindex\fB)\fR +where \fIarrayName\fR does not contain any open parenthesis characters, +.QW \fB(\fR , +or close brace characters, +.QW \fB}\fR , +and \fIindex\fR can be any sequence of characters except for close brace +characters. No further +substitutions are performed during the parsing of \fIname\fR. +.PP +There may be any number of variable substitutions in a single word. +Variable substitution is not performed on words enclosed in braces. +.PP +Note that variables may contain character sequences other than those listed +above, but in that case other mechanisms must be used to access them (e.g., +via the \fBset\fR command's single-argument form). +.RE +.IP "[9] \fBBackslash substitution.\fR" +If a backslash +.PQ \e +appears within a word then \fIbackslash substitution\fR occurs. +In all cases but those described below the backslash is dropped and +the following character is treated as an ordinary +character and included in the word. +This allows characters such as double quotes, close brackets, +and dollar signs to be included in words without triggering +special processing. +The following table lists the backslash sequences that are +handled specially, along with the value that replaces each sequence. +.RS +.TP 7 +\e\fBa\fR +Audible alert (bell) (Unicode U+000007). +.TP 7 +\e\fBb\fR +Backspace (Unicode U+000008). +.TP 7 +\e\fBf\fR +Form feed (Unicode U+00000C). +.TP 7 +\e\fBn\fR +Newline (Unicode U+00000A). +.TP 7 +\e\fBr\fR +Carriage-return (Unicode U+00000D). +.TP 7 +\e\fBt\fR +Tab (Unicode U+000009). +.TP 7 +\e\fBv\fR +Vertical tab (Unicode U+00000B). +.TP 7 +\e\fB\fIwhiteSpace\fR +. +A single space character replaces the backslash, newline, and all spaces +and tabs after the newline. This backslash sequence is unique in that it +is replaced in a separate pre-pass before the command is actually parsed. +This means that it will be replaced even when it occurs between braces, +and the resulting space will be treated as a word separator if it is not +in braces or quotes. +.TP 7 +\e\e +Backslash +.PQ \e "" . +.TP 7 +\e\fIooo\fR +. +The digits \fIooo\fR (one, two, or three of them) give a eight-bit octal +value for the Unicode character that will be inserted, in the range +\fI000\fR\(en\fI377\fR (i.e., the range U+000000\(enU+0000FF). +The parser will stop just before this range overflows, or when +the maximum of three digits is reached. The upper bits of the Unicode +character will be 0. +.TP 7 +\e\fBx\fIhh\fR +. +The hexadecimal digits \fIhh\fR (one or two of them) give an eight-bit +hexadecimal value for the Unicode character that will be inserted. The upper +bits of the Unicode character will be 0 (i.e., the character will be in the +range U+000000\(enU+0000FF). +.TP 7 +\e\fBu\fIhhhh\fR +. +The hexadecimal digits \fIhhhh\fR (one, two, three, or four of them) give a +sixteen-bit hexadecimal value for the Unicode character that will be +inserted. The upper bits of the Unicode character will be 0 (i.e., the +character will be in the range U+000000\(enU+00FFFF). +.TP 7 +\e\fBU\fIhhhhhhhh\fR +. +The hexadecimal digits \fIhhhhhhhh\fR (one up to eight of them) give a +twenty-one-bit hexadecimal value for the Unicode character that will be +inserted, in the range U+000000\(enU+10FFFF. The parser will stop just +before this range overflows, or when the maximum of eight digits +is reached. The upper bits of the Unicode character will be 0. +.RS +.PP +The range U+010000\(enU+10FFFD is reserved for the future. +.RE +.PP +Backslash substitution is not performed on words enclosed in braces, +except for backslash-newline as described above. +.RE +.IP "[10] \fBComments.\fR" +If a hash character +.PQ # +appears at a point where Tcl is +expecting the first character of the first word of a command, +then the hash character and the characters that follow it, up +through the next newline, are treated as a comment and ignored. +The comment character only has significance when it appears +at the beginning of a command. +.IP "[11] \fBOrder of substitution.\fR" +Each character is processed exactly once by the Tcl interpreter +as part of creating the words of a command. +For example, if variable substitution occurs then no further +substitutions are performed on the value of the variable; the +value is inserted into the word verbatim. +If command substitution occurs then the nested command is +processed entirely by the recursive call to the Tcl interpreter; +no substitutions are performed before making the recursive +call and no additional substitutions are performed on the result +of the nested script. +.RS +.PP +Substitutions take place from left to right, and each substitution is +evaluated completely before attempting to evaluate the next. Thus, a +sequence like +.PP +.CS +set y [set x 0][incr x][incr x] +.CE +.PP +will always set the variable \fIy\fR to the value, \fI012\fR. +.RE +.IP "[12] \fBSubstitution and word boundaries.\fR" +Substitutions do not affect the word boundaries of a command, +except for argument expansion as specified in rule [5]. +For example, during variable substitution the entire value of +the variable becomes part of a single word, even if the variable's +value contains spaces. +.SH KEYWORDS +backslash, command, comment, script, substitution, variable +'\" Local Variables: +'\" mode: nroff +'\" fill-column: 78 +'\" End: diff --git a/samples/Groff/create_view.l b/samples/Groff/create_view.l new file mode 100644 index 00000000..ad083c2d --- /dev/null +++ b/samples/Groff/create_view.l @@ -0,0 +1,135 @@ +.\\" auto-generated by docbook2man-spec $Revision: 1.1.1.1 $ +.TH "CREATE VIEW" "" "2005-11-05" "SQL - Language Statements" "SQL Commands" +.SH NAME +CREATE VIEW \- define a new view + +.SH SYNOPSIS +.sp +.nf +CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW \fIname\fR [ ( \fIcolumn_name\fR [, ...] ) ] + AS \fIquery\fR +.sp +.fi +.SH "DESCRIPTION" +.PP +\fBCREATE VIEW\fR defines a view of a query. The view +is not physically materialized. Instead, the query is run every time +the view is referenced in a query. +.PP +\fBCREATE OR REPLACE VIEW\fR is similar, but if a view +of the same name already exists, it is replaced. You can only replace +a view with a new query that generates the identical set of columns +(i.e., same column names and data types). +.PP +If a schema name is given (for example, CREATE VIEW +myschema.myview ...) then the view is created in the specified +schema. Otherwise it is created in the current schema. Temporary +views exist in a special schema, so a schema name may not be given +when creating a temporary view. The name of the view must be +distinct from the name of any other view, table, sequence, or index +in the same schema. +.SH "PARAMETERS" +.TP +\fBTEMPORARY or TEMP\fR +If specified, the view is created as a temporary view. +Temporary views are automatically dropped at the end of the +current session. Existing +permanent relations with the same name are not visible to the +current session while the temporary view exists, unless they are +referenced with schema-qualified names. + +If any of the tables referenced by the view are temporary, +the view is created as a temporary view (whether +TEMPORARY is specified or not). +.TP +\fB\fIname\fB\fR +The name (optionally schema-qualified) of a view to be created. +.TP +\fB\fIcolumn_name\fB\fR +An optional list of names to be used for columns of the view. +If not given, the column names are deduced from the query. +.TP +\fB\fIquery\fB\fR +A query (that is, a \fBSELECT\fR statement) which will +provide the columns and rows of the view. + +Refer to SELECT [\fBselect\fR(l)] +for more information about valid queries. +.SH "NOTES" +.PP +Currently, views are read only: the system will not allow an insert, +update, or delete on a view. You can get the effect of an updatable +view by creating rules that rewrite inserts, etc. on the view into +appropriate actions on other tables. For more information see +CREATE RULE [\fBcreate_rule\fR(l)]. +.PP +Use the DROP VIEW [\fBdrop_view\fR(l)] +statement to drop views. +.PP +Be careful that the names and types of the view's columns will be +assigned the way you want. For example, +.sp +.nf +CREATE VIEW vista AS SELECT 'Hello World'; +.sp +.fi +is bad form in two ways: the column name defaults to ?column?, +and the column data type defaults to \fBunknown\fR. If you want a +string literal in a view's result, use something like +.sp +.nf +CREATE VIEW vista AS SELECT text 'Hello World' AS hello; +.sp +.fi +.PP +Access to tables referenced in the view is determined by permissions of +the view owner. However, functions called in the view are treated the +same as if they had been called directly from the query using the view. +Therefore the user of a view must have permissions to call all functions +used by the view. +.SH "EXAMPLES" +.PP +Create a view consisting of all comedy films: +.sp +.nf +CREATE VIEW comedies AS + SELECT * + FROM films + WHERE kind = 'Comedy'; +.sp +.fi +.SH "COMPATIBILITY" +.PP +The SQL standard specifies some additional capabilities for the +\fBCREATE VIEW\fR statement: +.sp +.nf +CREATE VIEW \fIname\fR [ ( \fIcolumn_name\fR [, ...] ) ] + AS \fIquery\fR + [ WITH [ CASCADED | LOCAL ] CHECK OPTION ] +.sp +.fi +.PP +The optional clauses for the full SQL command are: +.TP +\fBCHECK OPTION\fR +This option has to do with updatable views. All +\fBINSERT\fR and \fBUPDATE\fR commands on the view +will be checked to ensure data satisfy the view-defining +condition (that is, the new data would be visible through the +view). If they do not, the update will be rejected. +.TP +\fBLOCAL\fR +Check for integrity on this view. +.TP +\fBCASCADED\fR +Check for integrity on this view and on any dependent +view. CASCADED is assumed if neither +CASCADED nor LOCAL is specified. +.PP +.PP +\fBCREATE OR REPLACE VIEW\fR is a +PostgreSQL language extension. +So is the concept of a temporary view. +.SH "SEE ALSO" +DROP VIEW [\fBdrop_view\fR(l)] diff --git a/samples/Groff/fsinterface.ms b/samples/Groff/fsinterface.ms new file mode 100644 index 00000000..1b35e732 --- /dev/null +++ b/samples/Groff/fsinterface.ms @@ -0,0 +1,1174 @@ +.\" $NetBSD: fsinterface.ms,v 1.4 2003/08/07 10:30:42 agc Exp $ +.\" +.\" Copyright (c) 1986 The Regents of the University of California. +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)fsinterface.ms 1.4 (Berkeley) 4/16/91 +.\" +.if \nv .rm CM +.de UX +.ie \\n(UX \s-1UNIX\s0\\$1 +.el \{\ +\s-1UNIX\s0\\$1\(dg +.FS +\(dg \s-1UNIX\s0 is a registered trademark of AT&T. +.FE +.nr UX 1 +.\} +.. +.TL +Toward a Compatible Filesystem Interface +.AU +Michael J. Karels +Marshall Kirk McKusick +.AI +Computer Systems Research Group +Computer Science Division +Department of Electrical Engineering and Computer Science +University of California, Berkeley +Berkeley, California 94720 +.AB +.LP +As network or remote filesystems have been implemented for +.UX , +several stylized interfaces between the filesystem implementation +and the rest of the kernel have been developed. +.FS +This is an update of a paper originally presented +at the September 1986 conference of the European +.UX +Users' Group. +Last modified April 16, 1991. +.FE +Notable among these are Sun Microsystems' Virtual Filesystem interface (VFS) +using vnodes, Digital Equipment's Generic File System (GFS) architecture, +and AT&T's File System Switch (FSS). +Each design attempts to isolate filesystem-dependent details +below a generic interface and to provide a framework within which +new filesystems may be incorporated. +However, each of these interfaces is different from +and incompatible with the others. +Each of them addresses somewhat different design goals. +Each was based on a different starting version of +.UX , +targetted a different set of filesystems with varying characteristics, +and uses a different set of primitive operations provided by the filesystem. +The current study compares the various filesystem interfaces. +Criteria for comparison include generality, completeness, robustness, +efficiency and esthetics. +Several of the underlying design issues are examined in detail. +As a result of this comparison, a proposal for a new filesystem interface +is advanced that includes the best features of the existing implementations. +The proposal adopts the calling convention for name lookup introduced +in 4.3BSD, but is otherwise closely related to Sun's VFS. +A prototype implementation is now being developed at Berkeley. +This proposal and the rationale underlying its development +have been presented to major software vendors +as an early step toward convergence on a compatible filesystem interface. +.AE +.SH +Introduction +.PP +As network communications and workstation environments +became common elements in +.UX +systems, several vendors of +.UX +systems have designed and built network file systems +that allow client process on one +.UX +machine to access files on a server machine. +Examples include Sun's Network File System, NFS [Sandberg85], +AT&T's recently-announced Remote File Sharing, RFS [Rifkin86], +the LOCUS distributed filesystem [Walker85], +and Masscomp's extended filesystem [Cole85]. +Other remote filesystems have been implemented in research or university groups +for internal use, notably the network filesystem in the Eighth Edition +.UX +system [Weinberger84] and two different filesystems used at Carnegie-Mellon +University [Satyanarayanan85]. +Numerous other remote file access methods have been devised for use +within individual +.UX +processes, +many of them by modifications to the C I/O library +similar to those in the Newcastle Connection [Brownbridge82]. +.PP +Multiple network filesystems may frequently +be found in use within a single organization. +These circumstances make it highly desirable to be able to transport filesystem +implementations from one system to another. +Such portability is considerably enhanced by the use of a stylized interface +with carefully-defined entry points to separate the filesystem from the rest +of the operating system. +This interface should be similar to the interface between device drivers +and the kernel. +Although varying somewhat among the common versions of +.UX , +the device driver interfaces are sufficiently similar that device drivers +may be moved from one system to another without major problems. +A clean, well-defined interface to the filesystem also allows a single +system to support multiple local filesystem types. +.PP +For reasons such as these, several filesystem interfaces have been used +when integrating new filesystems into the system. +The best-known of these are Sun Microsystems' Virtual File System interface, +VFS [Kleiman86], and AT&T's File System Switch, FSS. +Another interface, known as the Generic File System, GFS, +has been implemented for the ULTRIX\(dd +.FS +\(dd ULTRIX is a trademark of Digital Equipment Corp. +.FE +system by Digital [Rodriguez86]. +There are numerous differences among these designs. +The differences may be understood from the varying philosophies +and design goals of the groups involved, from the systems under which +the implementations were done, and from the filesystems originally targetted +by the designs. +These differences are summarized in the following sections +within the limitations of the published specifications. +.SH +Design goals +.PP +There are several design goals which, in varying degrees, +have driven the various designs. +Each attempts to divide the filesystem into a filesystem-type-independent +layer and individual filesystem implementations. +The division between these layers occurs at somewhat different places +in these systems, reflecting different views of the diversity and types +of the filesystems that may be accommodated. +Compatibility with existing local filesystems has varying importance; +at the user-process level, each attempts to be completely transparent +except for a few filesystem-related system management programs. +The AT&T interface also makes a major effort to retain familiar internal +system interfaces, and even to retain object-file-level binary compatibility +with operating system modules such as device drivers. +Both Sun and DEC were willing to change internal data structures and interfaces +so that other operating system modules might require recompilation +or source-code modification. +.PP +AT&T's interface both allows and requires filesystems to support the full +and exact semantics of their previous filesystem, +including interruptions of system calls on slow operations. +System calls that deal with remote files are encapsulated +with their environment and sent to a server where execution continues. +The system call may be aborted by either client or server, returning +control to the client. +Most system calls that descend into the file-system dependent layer +of a filesystem other than the standard local filesystem do not return +to the higher-level kernel calling routines. +Instead, the filesystem-dependent code completes the requested +operation and then executes a non-local goto (\fIlongjmp\fP) to exit the +system call. +These efforts to avoid modification of main-line kernel code +indicate a far greater emphasis on internal compatibility than on modularity, +clean design, or efficiency. +.PP +In contrast, the Sun VFS interface makes major modifications to the internal +interfaces in the kernel, with a very clear separation +of filesystem-independent and -dependent data structures and operations. +The semantics of the filesystem are largely retained for local operations, +although this is achieved at some expense where it does not fit the internal +structuring well. +The filesystem implementations are not required to support the same +semantics as local +.UX +filesystems. +Several historical features of +.UX +filesystem behavior are difficult to achieve using the VFS interface, +including the atomicity of file and link creation and the use of open files +whose names have been removed. +.PP +A major design objective of Sun's network filesystem, +statelessness, +permeates the VFS interface. +No locking may be done in the filesystem-independent layer, +and locking in the filesystem-dependent layer may occur only during +a single call into that layer. +.PP +A final design goal of most implementors is performance. +For remote filesystems, +this goal tends to be in conflict with the goals of complete semantic +consistency, compatibility and modularity. +Sun has chosen performance over modularity in some areas, +but has emphasized clean separation of the layers within the filesystem +at the expense of performance. +Although the performance of RFS is yet to be seen, +AT&T seems to have considered compatibility far more important than modularity +or performance. +.SH +Differences among filesystem interfaces +.PP +The existing filesystem interfaces may be characterized +in several ways. +Each system is centered around a few data structures or objects, +along with a set of primitives for performing operations upon these objects. +In the original +.UX +filesystem [Ritchie74], +the basic object used by the filesystem is the inode, or index node. +The inode contains all of the information about a file except its name: +its type, identification, ownership, permissions, timestamps and location. +Inodes are identified by the filesystem device number and the index within +the filesystem. +The major entry points to the filesystem are \fInamei\fP, +which translates a filesystem pathname into the underlying inode, +and \fIiget\fP, which locates an inode by number and installs it in the in-core +inode table. +\fINamei\fP performs name translation by iterative lookup +of each component name in its directory to find its inumber, +then using \fIiget\fP to return the actual inode. +If the last component has been reached, this inode is returned; +otherwise, the inode describes the next directory to be searched. +The inode returned may be used in various ways by the caller; +it may be examined, the file may be read or written, +types and access may be checked, and fields may be modified. +Modified inodes are automatically written back the filesystem +on disk when the last reference is released with \fIiput\fP. +Although the details are considerably different, +the same general scheme is used in the faster filesystem in 4.2BSD +.UX +[Mckusick85]. +.PP +Both the AT&T interface and, to a lesser extent, the DEC interface +attempt to preserve the inode-oriented interface. +Each modify the inode to allow different varieties of the structure +for different filesystem types by separating the filesystem-dependent +parts of the inode into a separate structure or one arm of a union. +Both interfaces allow operations +equivalent to the \fInamei\fP and \fIiget\fP operations +of the old filesystem to be performed in the filesystem-independent +layer, with entry points to the individual filesystem implementations to support +the type-specific parts of these operations. Implicit in this interface +is that files may be conveniently be named by and located using a single +index within a filesystem. +The GFS provides specific entry points to the filesystems +to change most file properties rather than allowing arbitrary changes +to be made to the generic part of the inode. +.PP +In contrast, the Sun VFS interface replaces the inode as the primary object +with the vnode. +The vnode contains no filesystem-dependent fields except the pointer +to the set of operations implemented by the filesystem. +Properties of a vnode that might be transient, such as the ownership, +permissions, size and timestamps, are maintained by the lower layer. +These properties may be presented in a generic format upon request; +callers are expected not to hold this information for any length of time, +as they may not be up-to-date later on. +The vnode operations do not include a corollary for \fIiget\fP; +the only external interface for obtaining vnodes for specific files +is the name lookup operation. +(Separate procedures are provided outside of this interface +that obtain a ``file handle'' for a vnode which may be given +to a client by a server, such that the vnode may be retrieved +upon later presentation of the file handle.) +.SH +Name translation issues +.PP +Each of the systems described include a mechanism for performing +pathname-to-internal-representation translation. +The style of the name translation function is very different in all +three systems. +As described above, the AT&T and DEC systems retain the \fInamei\fP function. +The two are quite different, however, as the ULTRIX interface uses +the \fInamei\fP calling convention introduced in 4.3BSD. +The parameters and context for the name lookup operation +are collected in a \fInameidata\fP structure which is passed to \fInamei\fP +for operation. +Intent to create or delete the named file is declared in advance, +so that the final directory scan in \fInamei\fP may retain information +such as the offset in the directory at which the modification will be made. +Filesystems that use such mechanisms to avoid redundant work +must therefore lock the directory to be modified so that it may not +be modified by another process before completion. +In the System V filesystem, as in previous versions of +.UX , +this information is stored in the per-process \fIuser\fP structure +by \fInamei\fP for use by a low-level routine called after performing +the actual creation or deletion of the file itself. +In 4.3BSD and in the GFS interface, these side effects of \fInamei\fP +are stored in the \fInameidata\fP structure given as argument to \fInamei\fP, +which is also presented to the routine implementing file creation or deletion. +.PP +The ULTRIX \fInamei\fP routine is responsible for the generic +parts of the name translation process, such as copying the name into +an internal buffer, validating it, interpolating +the contents of symbolic links, and indirecting at mount points. +As in 4.3BSD, the name is copied into the buffer in a single call, +according to the location of the name. +After determining the type of the filesystem at the start of translation +(the current directory or root directory), it calls the filesystem's +\fInamei\fP entry with the same structure it received from its caller. +The filesystem-specific routine translates the name, component by component, +as long as no mount points are reached. +It may return after any number of components have been processed. +\fINamei\fP performs any processing at mount points, then calls +the correct translation routine for the next filesystem. +Network filesystems may pass the remaining pathname to a server for translation, +or they may look up the pathname components one at a time. +The former strategy would be more efficient, +but the latter scheme allows mount points within a remote filesystem +without server knowledge of all client mounts. +.PP +The AT&T \fInamei\fP interface is presumably the same as that in previous +.UX +systems, accepting the name of a routine to fetch pathname characters +and an operation (one of: lookup, lookup for creation, or lookup for deletion). +It translates, component by component, as before. +If it detects that a mount point crosses to a remote filesystem, +it passes the remainder of the pathname to the remote server. +A pathname-oriented request other than open may be completed +within the \fInamei\fP call, +avoiding return to the (unmodified) system call handler +that called \fInamei\fP. +.PP +In contrast to the first two systems, Sun's VFS interface has replaced +\fInamei\fP with \fIlookupname\fP. +This routine simply calls a new pathname-handling module to allocate +a pathname buffer and copy in the pathname (copying a character per call), +then calls \fIlookuppn\fP. +\fILookuppn\fP performs the iteration over the directories leading +to the destination file; it copies each pathname component to a local buffer, +then calls the filesystem \fIlookup\fP entry to locate the vnode +for that file in the current directory. +Per-filesystem \fIlookup\fP routines may translate only one component +per call. +For creation and deletion of new files, the lookup operation is unmodified; +the lookup of the final component only serves to check for the existence +of the file. +The subsequent creation or deletion call, if any, must repeat the final +name translation and associated directory scan. +For new file creation in particular, this is rather inefficient, +as file creation requires two complete scans of the directory. +.PP +Several of the important performance improvements in 4.3BSD +were related to the name translation process [McKusick85][Leffler84]. +The following changes were made: +.IP 1. 4 +A system-wide cache of recent translations is maintained. +The cache is separate from the inode cache, so that multiple names +for a file may be present in the cache. +The cache does not hold ``hard'' references to the inodes, +so that the normal reference pattern is not disturbed. +.IP 2. +A per-process cache is kept of the directory and offset +at which the last successful name lookup was done. +This allows sequential lookups of all the entries in a directory to be done +in linear time. +.IP 3. +The entire pathname is copied into a kernel buffer in a single operation, +rather than using two subroutine calls per character. +.IP 4. +A pool of pathname buffers are held by \fInamei\fP, avoiding allocation +overhead. +.LP +All of these performance improvements from 4.3BSD are well worth using +within a more generalized filesystem framework. +The generalization of the structure may otherwise make an already-expensive +function even more costly. +Most of these improvements are present in the GFS system, as it derives +from the beta-test version of 4.3BSD. +The Sun system uses a name-translation cache generally like that in 4.3BSD. +The name cache is a filesystem-independent facility provided for the use +of the filesystem-specific lookup routines. +The Sun cache, like that first used at Berkeley but unlike that in 4.3, +holds a ``hard'' reference to the vnode (increments the reference count). +The ``soft'' reference scheme in 4.3BSD cannot be used with the current +NFS implementation, as NFS allocates vnodes dynamically and frees them +when the reference count returns to zero rather than caching them. +As a result, fewer names may be held in the cache +than (local filesystem) vnodes, and the cache distorts the normal reference +patterns otherwise seen by the LRU cache. +As the name cache references overflow the local filesystem inode table, +the name cache must be purged to make room in the inode table. +Also, to determine whether a vnode is in use (for example, +before mounting upon it), the cache must be flushed to free any +cache reference. +These problems should be corrected +by the use of the soft cache reference scheme. +.PP +A final observation on the efficiency of name translation in the current +Sun VFS architecture is that the number of subroutine calls used +by a multi-component name lookup is dramatically larger +than in the other systems. +The name lookup scheme in GFS suffers from this problem much less, +at no expense in violation of layering. +.PP +A final problem to be considered is synchronization and consistency. +As the filesystem operations are more stylized and broken into separate +entry points for parts of operations, it is more difficult to guarantee +consistency throughout an operation and/or to synchronize with other +processes using the same filesystem objects. +The Sun interface suffers most severely from this, +as it forbids the filesystems from locking objects across calls +to the filesystem. +It is possible that a file may be created between the time that a lookup +is performed and a subsequent creation is requested. +Perhaps more strangely, after a lookup fails to find the target +of a creation attempt, the actual creation might find that the target +now exists and is a symbolic link. +The call will either fail unexpectedly, as the target is of the wrong type, +or the generic creation routine will have to note the error +and restart the operation from the lookup. +This problem will always exist in a stateless filesystem, +but the VFS interface forces all filesystems to share the problem. +This restriction against locking between calls also +forces duplication of work during file creation and deletion. +This is considered unacceptable. +.SH +Support facilities and other interactions +.PP +Several support facilities are used by the current +.UX +filesystem and require generalization for use by other filesystem types. +For filesystem implementations to be portable, +it is desirable that these modified support facilities +should also have a uniform interface and +behave in a consistent manner in target systems. +A prominent example is the filesystem buffer cache. +The buffer cache in a standard (System V or 4.3BSD) +.UX +system contains physical disk blocks with no reference to the files containing +them. +This works well for the local filesystem, but has obvious problems +for remote filesystems. +Sun has modified the buffer cache routines to describe buffers by vnode +rather than by device. +For remote files, the vnode used is that of the file, and the block +numbers are virtual data blocks. +For local filesystems, a vnode for the block device is used for cache reference, +and the block numbers are filesystem physical blocks. +Use of per-file cache description does not easily accommodate +caching of indirect blocks, inode blocks, superblocks or cylinder group blocks. +However, the vnode describing the block device for the cache +is one created internally, +rather than the vnode for the device looked up when mounting, +and it is located by searching a private list of vnodes +rather than by holding it in the mount structure. +Although the Sun modification makes it possible to use the buffer +cache for data blocks of remote files, a better generalization +of the buffer cache is needed. +.PP +The RFS filesystem used by AT&T does not currently cache data blocks +on client systems, thus the buffer cache is probably unmodified. +The form of the buffer cache in ULTRIX is unknown to us. +.PP +Another subsystem that has a large interaction with the filesystem +is the virtual memory system. +The virtual memory system must read data from the filesystem +to satisfy fill-on-demand page faults. +For efficiency, this read call is arranged to place the data directly +into the physical pages assigned to the process (a ``raw'' read) to avoid +copying the data. +Although the read operation normally bypasses the filesystem buffer cache, +consistency must be maintained by checking the buffer cache and copying +or flushing modified data not yet stored on disk. +The 4.2BSD virtual memory system, like that of Sun and ULTRIX, +maintains its own cache of reusable text pages. +This creates additional complications. +As the virtual memory systems are redesigned, these problems should be +resolved by reading through the buffer cache, then mapping the cached +data into the user address space. +If the buffer cache or the process pages are changed while the other reference +remains, the data would have to be copied (``copy-on-write''). +.PP +In the meantime, the current virtual memory systems must be used +with the new filesystem framework. +Both the Sun and AT&T filesystem interfaces +provide entry points to the filesystem for optimization of the virtual +memory system by performing logical-to-physical block number translation +when setting up a fill-on-demand image for a process. +The VFS provides a vnode operation analogous to the \fIbmap\fP function of the +.UX +filesystem. +Given a vnode and logical block number, it returns a vnode and block number +which may be read to obtain the data. +If the filesystem is local, it returns the private vnode for the block device +and the physical block number. +As the \fIbmap\fP operations are all performed at one time, during process +startup, any indirect blocks for the file will remain in the cache +after they are once read. +In addition, the interface provides a \fIstrategy\fP entry that may be used +for ``raw'' reads from a filesystem device, +used to read data blocks into an address space without copying. +This entry uses a buffer header (\fIbuf\fP structure) +to describe the I/O operation +instead of a \fIuio\fP structure. +The buffer-style interface is the same as that used by disk drivers internally. +This difference allows the current \fIuio\fP primitives to be avoided, +as they copy all data to/from the current user process address space. +Instead, for local filesystems these operations could be done internally +with the standard raw disk read routines, +which use a \fIuio\fP interface. +When loading from a remote filesystems, +the data will be received in a network buffer. +If network buffers are suitably aligned, +the data may be mapped into the process address space by a page swap +without copying. +In either case, it should be possible to use the standard filesystem +read entry from the virtual memory system. +.PP +Other issues that must be considered in devising a portable +filesystem implementation include kernel memory allocation, +the implicit use of user-structure global context, +which may create problems with reentrancy, +the style of the system call interface, +and the conventions for synchronization +(sleep/wakeup, handling of interrupted system calls, semaphores). +.SH +The Berkeley Proposal +.PP +The Sun VFS interface has been most widely used of the three described here. +It is also the most general of the three, in that filesystem-specific +data and operations are best separated from the generic layer. +Although it has several disadvantages which were described above, +most of them may be corrected with minor changes to the interface +(and, in a few areas, philosophical changes). +The DEC GFS has other advantages, in particular the use of the 4.3BSD +\fInamei\fP interface and optimizations. +It allows single or multiple components of a pathname +to be translated in a single call to the specific filesystem +and thus accommodates filesystems with either preference. +The FSS is least well understood, as there is little public information +about the interface. +However, the design goals are the least consistent with those of the Berkeley +research groups. +Accordingly, a new filesystem interface has been devised to avoid +some of the problems in the other systems. +The proposed interface derives directly from Sun's VFS, +but, like GFS, uses a 4.3BSD-style name lookup interface. +Additional context information has been moved from the \fIuser\fP structure +to the \fInameidata\fP structure so that name translation may be independent +of the global context of a user process. +This is especially desired in any system where kernel-mode servers +operate as light-weight or interrupt-level processes, +or where a server may store or cache context for several clients. +This calling interface has the additional advantage +that the call parameters need not all be pushed onto the stack for each call +through the filesystem interface, +and they may be accessed using short offsets from a base pointer +(unlike global variables in the \fIuser\fP structure). +.PP +The proposed filesystem interface is described very tersely here. +For the most part, data structures and procedures are analogous +to those used by VFS, and only the changes will be be treated here. +See [Kleiman86] for complete descriptions of the vfs and vnode operations +in Sun's interface. +.PP +The central data structure for name translation is the \fInameidata\fP +structure. +The same structure is used to pass parameters to \fInamei\fP, +to pass these same parameters to filesystem-specific lookup routines, +to communicate completion status from the lookup routines back to \fInamei\fP, +and to return completion status to the calling routine. +For creation or deletion requests, the parameters to the filesystem operation +to complete the request are also passed in this same structure. +The form of the \fInameidata\fP structure is: +.br +.ne 2i +.ID +.nf +.ta .5i +\w'caddr_t\0\0\0'u +\w'struct\0\0'u +\w'vnode *nc_prevdir;\0\0\0\0\0'u +/* + * Encapsulation of namei parameters. + * One of these is located in the u. area to + * minimize space allocated on the kernel stack + * and to retain per-process context. + */ +struct nameidata { + /* arguments to namei and related context: */ + caddr_t ni_dirp; /* pathname pointer */ + enum uio_seg ni_seg; /* location of pathname */ + short ni_nameiop; /* see below */ + struct vnode *ni_cdir; /* current directory */ + struct vnode *ni_rdir; /* root directory, if not normal root */ + struct ucred *ni_cred; /* credentials */ + + /* shared between namei, lookup routines and commit routines: */ + caddr_t ni_pnbuf; /* pathname buffer */ + char *ni_ptr; /* current location in pathname */ + int ni_pathlen; /* remaining chars in path */ + short ni_more; /* more left to translate in pathname */ + short ni_loopcnt; /* count of symlinks encountered */ + + /* results: */ + struct vnode *ni_vp; /* vnode of result */ + struct vnode *ni_dvp; /* vnode of intermediate directory */ + +/* BEGIN UFS SPECIFIC */ + struct diroffcache { /* last successful directory search */ + struct vnode *nc_prevdir; /* terminal directory */ + long nc_id; /* directory's unique id */ + off_t nc_prevoffset; /* where last entry found */ + } ni_nc; +/* END UFS SPECIFIC */ +}; +.DE +.DS +.ta \w'#define\0\0'u +\w'WANTPARENT\0\0'u +\w'0x40\0\0\0\0\0\0\0'u +/* + * namei operations and modifiers + */ +#define LOOKUP 0 /* perform name lookup only */ +#define CREATE 1 /* setup for file creation */ +#define DELETE 2 /* setup for file deletion */ +#define WANTPARENT 0x10 /* return parent directory vnode also */ +#define NOCACHE 0x20 /* name must not be left in cache */ +#define FOLLOW 0x40 /* follow symbolic links */ +#define NOFOLLOW 0x0 /* don't follow symbolic links (pseudo) */ +.DE +As in current systems other than Sun's VFS, \fInamei\fP is called +with an operation request, one of LOOKUP, CREATE or DELETE. +For a LOOKUP, the operation is exactly like the lookup in VFS. +CREATE and DELETE allow the filesystem to ensure consistency +by locking the parent inode (private to the filesystem), +and (for the local filesystem) to avoid duplicate directory scans +by storing the new directory entry and its offset in the directory +in the \fIndirinfo\fP structure. +This is intended to be opaque to the filesystem-independent levels. +Not all lookups for creation or deletion are actually followed +by the intended operation; permission may be denied, the filesystem +may be read-only, etc. +Therefore, an entry point to the filesystem is provided +to abort a creation or deletion operation +and allow release of any locked internal data. +After a \fInamei\fP with a CREATE or DELETE flag, the pathname pointer +is set to point to the last filename component. +Filesystems that choose to implement creation or deletion entirely +within the subsequent call to a create or delete entry +are thus free to do so. +.PP +The \fInameidata\fP is used to store context used during name translation. +The current and root directories for the translation are stored here. +For the local filesystem, the per-process directory offset cache +is also kept here. +A file server could leave the directory offset cache empty, +could use a single cache for all clients, +or could hold caches for several recent clients. +.PP +Several other data structures are used in the filesystem operations. +One is the \fIucred\fP structure which describes a client's credentials +to the filesystem. +This is modified slightly from the Sun structure; +the ``accounting'' group ID has been merged into the groups array. +The actual number of groups in the array is given explicitly +to avoid use of a reserved group ID as a terminator. +Also, typedefs introduced in 4.3BSD for user and group ID's have been used. +The \fIucred\fP structure is thus: +.DS +.ta .5i +\w'caddr_t\0\0\0'u +\w'struct\0\0'u +\w'vnode *nc_prevdir;\0\0\0\0\0'u +/* + * Credentials. + */ +struct ucred { + u_short cr_ref; /* reference count */ + uid_t cr_uid; /* effective user id */ + short cr_ngroups; /* number of groups */ + gid_t cr_groups[NGROUPS]; /* groups */ + /* + * The following either should not be here, + * or should be treated as opaque. + */ + uid_t cr_ruid; /* real user id */ + gid_t cr_svgid; /* saved set-group id */ +}; +.DE +.PP +A final structure used by the filesystem interface is the \fIuio\fP +structure mentioned earlier. +This structure describes the source or destination of an I/O +operation, with provision for scatter/gather I/O. +It is used in the read and write entries to the filesystem. +The \fIuio\fP structure presented here is modified from the one +used in 4.2BSD to specify the location of each vector of the operation +(user or kernel space) +and to allow an alternate function to be used to implement the data movement. +The alternate function might perform page remapping rather than a copy, +for example. +.DS +.ta .5i +\w'caddr_t\0\0\0'u +\w'struct\0\0'u +\w'vnode *nc_prevdir;\0\0\0\0\0'u +/* + * Description of an I/O operation which potentially + * involves scatter-gather, with individual sections + * described by iovec, below. uio_resid is initially + * set to the total size of the operation, and is + * decremented as the operation proceeds. uio_offset + * is incremented by the amount of each operation. + * uio_iov is incremented and uio_iovcnt is decremented + * after each vector is processed. + */ +struct uio { + struct iovec *uio_iov; + int uio_iovcnt; + off_t uio_offset; + int uio_resid; + enum uio_rw uio_rw; +}; + +enum uio_rw { UIO_READ, UIO_WRITE }; +.DE +.DS +.ta .5i +\w'caddr_t\0\0\0'u +\w'vnode *nc_prevdir;\0\0\0\0\0'u +/* + * Description of a contiguous section of an I/O operation. + * If iov_op is non-null, it is called to implement the copy + * operation, possibly by remapping, with the call + * (*iov_op)(from, to, count); + * where from and to are caddr_t and count is int. + * Otherwise, the copy is done in the normal way, + * treating base as a user or kernel virtual address + * according to iov_segflg. + */ +struct iovec { + caddr_t iov_base; + int iov_len; + enum uio_seg iov_segflg; + int (*iov_op)(); +}; +.DE +.DS +.ta .5i +\w'UIO_USERISPACE\0\0\0\0\0'u +/* + * Segment flag values. + */ +enum uio_seg { + UIO_USERSPACE, /* from user data space */ + UIO_SYSSPACE, /* from system space */ + UIO_USERISPACE /* from user I space */ +}; +.DE +.SH +File and filesystem operations +.PP +With the introduction of the data structures used by the filesystem +operations, the complete list of filesystem entry points may be listed. +As noted, they derive mostly from the Sun VFS interface. +Lines marked with \fB+\fP are additions to the Sun definitions; +lines marked with \fB!\fP are modified from VFS. +.PP +The structure describing the externally-visible features of a mounted +filesystem, \fIvfs\fP, is: +.DS +.ta .5i +\w'struct vfsops\0\0\0'u +\w'*vfs_vnodecovered;\0\0\0\0\0'u +/* + * Structure per mounted file system. + * Each mounted file system has an array of + * operations and an instance record. + * The file systems are put on a doubly linked list. + */ +struct vfs { + struct vfs *vfs_next; /* next vfs in vfs list */ +\fB+\fP struct vfs *vfs_prev; /* prev vfs in vfs list */ + struct vfsops *vfs_op; /* operations on vfs */ + struct vnode *vfs_vnodecovered; /* vnode we mounted on */ + int vfs_flag; /* flags */ +\fB!\fP int vfs_fsize; /* fundamental block size */ +\fB+\fP int vfs_bsize; /* optimal transfer size */ +\fB!\fP uid_t vfs_exroot; /* exported fs uid 0 mapping */ + short vfs_exflags; /* exported fs flags */ + caddr_t vfs_data; /* private data */ +}; +.DE +.DS +.ta \w'\fB+\fP 'u +\w'#define\0\0'u +\w'VFS_EXPORTED\0\0'u +\w'0x40\0\0\0\0\0'u + /* + * vfs flags. + * VFS_MLOCK lock the vfs so that name lookup cannot proceed past the vfs. + * This keeps the subtree stable during mounts and unmounts. + */ + #define VFS_RDONLY 0x01 /* read only vfs */ +\fB+\fP #define VFS_NOEXEC 0x02 /* can't exec from filesystem */ + #define VFS_MLOCK 0x04 /* lock vfs so that subtree is stable */ + #define VFS_MWAIT 0x08 /* someone is waiting for lock */ + #define VFS_NOSUID 0x10 /* don't honor setuid bits on vfs */ + #define VFS_EXPORTED 0x20 /* file system is exported (NFS) */ + + /* + * exported vfs flags. + */ + #define EX_RDONLY 0x01 /* exported read only */ +.DE +.LP +The operations supported by the filesystem-specific layer +on an individual filesystem are: +.DS +.ta .5i +\w'struct vfsops\0\0\0'u +\w'*vfs_vnodecovered;\0\0\0\0\0'u +/* + * Operations supported on virtual file system. + */ +struct vfsops { +\fB!\fP int (*vfs_mount)( /* vfs, path, data, datalen */ ); +\fB!\fP int (*vfs_unmount)( /* vfs, forcibly */ ); +\fB+\fP int (*vfs_mountroot)(); + int (*vfs_root)( /* vfs, vpp */ ); +\fB!\fP int (*vfs_statfs)( /* vfs, vp, sbp */ ); +\fB!\fP int (*vfs_sync)( /* vfs, waitfor */ ); +\fB+\fP int (*vfs_fhtovp)( /* vfs, fhp, vpp */ ); +\fB+\fP int (*vfs_vptofh)( /* vp, fhp */ ); +}; +.DE +.LP +The \fIvfs_statfs\fP entry returns a structure of the form: +.DS +.ta .5i +\w'struct vfsops\0\0\0'u +\w'*vfs_vnodecovered;\0\0\0\0\0'u +/* + * file system statistics + */ +struct statfs { +\fB!\fP short f_type; /* type of filesystem */ +\fB+\fP short f_flags; /* copy of vfs (mount) flags */ +\fB!\fP long f_fsize; /* fundamental file system block size */ +\fB+\fP long f_bsize; /* optimal transfer block size */ + long f_blocks; /* total data blocks in file system */ + long f_bfree; /* free blocks in fs */ + long f_bavail; /* free blocks avail to non-superuser */ + long f_files; /* total file nodes in file system */ + long f_ffree; /* free file nodes in fs */ + fsid_t f_fsid; /* file system id */ +\fB+\fP char *f_mntonname; /* directory on which mounted */ +\fB+\fP char *f_mntfromname; /* mounted filesystem */ + long f_spare[7]; /* spare for later */ +}; + +typedef long fsid_t[2]; /* file system id type */ +.DE +.LP +The modifications to Sun's interface at this level are minor. +Additional arguments are present for the \fIvfs_mount\fP and \fIvfs_umount\fP +entries. +\fIvfs_statfs\fP accepts a vnode as well as filesystem identifier, +as the information may not be uniform throughout a filesystem. +For example, +if a client may mount a file tree that spans multiple physical +filesystems on a server, different sections may have different amounts +of free space. +(NFS does not allow remotely-mounted file trees to span physical filesystems +on the server.) +The final additions are the entries that support file handles. +\fIvfs_vptofh\fP is provided for the use of file servers, +which need to obtain an opaque +file handle to represent the current vnode for transmission to clients. +This file handle may later be used to relocate the vnode using \fIvfs_fhtovp\fP +without requiring the vnode to remain in memory. +.PP +Finally, the external form of a filesystem object, the \fIvnode\fP, is: +.DS +.ta .5i +\w'struct vnodeops\0\0'u +\w'*v_vfsmountedhere;\0\0\0'u +/* + * vnode types. VNON means no type. + */ +enum vtype { VNON, VREG, VDIR, VBLK, VCHR, VLNK, VSOCK }; + +struct vnode { + u_short v_flag; /* vnode flags (see below) */ + u_short v_count; /* reference count */ + u_short v_shlockc; /* count of shared locks */ + u_short v_exlockc; /* count of exclusive locks */ + struct vfs *v_vfsmountedhere; /* ptr to vfs mounted here */ + struct vfs *v_vfsp; /* ptr to vfs we are in */ + struct vnodeops *v_op; /* vnode operations */ +\fB+\fP struct text *v_text; /* text/mapped region */ + enum vtype v_type; /* vnode type */ + caddr_t v_data; /* private data for fs */ +}; +.DE +.DS +.ta \w'#define\0\0'u +\w'NOFOLLOW\0\0'u +\w'0x40\0\0\0\0\0\0\0'u +/* + * vnode flags. + */ +#define VROOT 0x01 /* root of its file system */ +#define VTEXT 0x02 /* vnode is a pure text prototype */ +#define VEXLOCK 0x10 /* exclusive lock */ +#define VSHLOCK 0x20 /* shared lock */ +#define VLWAIT 0x40 /* proc is waiting on shared or excl. lock */ +.DE +.LP +The operations supported by the filesystems on individual \fIvnode\fP\^s +are: +.DS +.ta .5i +\w'int\0\0\0\0\0'u +\w'(*vn_getattr)(\0\0\0\0\0'u +/* + * Operations on vnodes. + */ +struct vnodeops { +\fB!\fP int (*vn_lookup)( /* ndp */ ); +\fB!\fP int (*vn_create)( /* ndp, vap, fflags */ ); +\fB+\fP int (*vn_mknod)( /* ndp, vap, fflags */ ); +\fB!\fP int (*vn_open)( /* vp, fflags, cred */ ); + int (*vn_close)( /* vp, fflags, cred */ ); + int (*vn_access)( /* vp, fflags, cred */ ); + int (*vn_getattr)( /* vp, vap, cred */ ); + int (*vn_setattr)( /* vp, vap, cred */ ); + +\fB+\fP int (*vn_read)( /* vp, uiop, offp, ioflag, cred */ ); +\fB+\fP int (*vn_write)( /* vp, uiop, offp, ioflag, cred */ ); +\fB!\fP int (*vn_ioctl)( /* vp, com, data, fflag, cred */ ); + int (*vn_select)( /* vp, which, cred */ ); +\fB+\fP int (*vn_mmap)( /* vp, ..., cred */ ); + int (*vn_fsync)( /* vp, cred */ ); +\fB+\fP int (*vn_seek)( /* vp, offp, off, whence */ ); + +\fB!\fP int (*vn_remove)( /* ndp */ ); +\fB!\fP int (*vn_link)( /* vp, ndp */ ); +\fB!\fP int (*vn_rename)( /* src ndp, target ndp */ ); +\fB!\fP int (*vn_mkdir)( /* ndp, vap */ ); +\fB!\fP int (*vn_rmdir)( /* ndp */ ); +\fB!\fP int (*vn_symlink)( /* ndp, vap, nm */ ); + int (*vn_readdir)( /* vp, uiop, offp, ioflag, cred */ ); + int (*vn_readlink)( /* vp, uiop, ioflag, cred */ ); + +\fB+\fP int (*vn_abortop)( /* ndp */ ); +\fB+\fP int (*vn_lock)( /* vp */ ); +\fB+\fP int (*vn_unlock)( /* vp */ ); +\fB!\fP int (*vn_inactive)( /* vp */ ); +}; +.DE +.DS +.ta \w'#define\0\0'u +\w'NOFOLLOW\0\0'u +\w'0x40\0\0\0\0\0'u +/* + * flags for ioflag + */ +#define IO_UNIT 0x01 /* do io as atomic unit for VOP_RDWR */ +#define IO_APPEND 0x02 /* append write for VOP_RDWR */ +#define IO_SYNC 0x04 /* sync io for VOP_RDWR */ +.DE +.LP +The argument types listed in the comments following each operation are: +.sp +.IP ndp 10 +A pointer to a \fInameidata\fP structure. +.IP vap +A pointer to a \fIvattr\fP structure (vnode attributes; see below). +.IP fflags +File open flags, possibly including O_APPEND, O_CREAT, O_TRUNC and O_EXCL. +.IP vp +A pointer to a \fIvnode\fP previously obtained with \fIvn_lookup\fP. +.IP cred +A pointer to a \fIucred\fP credentials structure. +.IP uiop +A pointer to a \fIuio\fP structure. +.IP ioflag +Any of the IO flags defined above. +.IP com +An \fIioctl\fP command, with type \fIunsigned long\fP. +.IP data +A pointer to a character buffer used to pass data to or from an \fIioctl\fP. +.IP which +One of FREAD, FWRITE or 0 (select for exceptional conditions). +.IP off +A file offset of type \fIoff_t\fP. +.IP offp +A pointer to file offset of type \fIoff_t\fP. +.IP whence +One of L_SET, L_INCR, or L_XTND. +.IP fhp +A pointer to a file handle buffer. +.sp +.PP +Several changes have been made to Sun's set of vnode operations. +Most obviously, the \fIvn_lookup\fP receives a \fInameidata\fP structure +containing its arguments and context as described. +The same structure is also passed to one of the creation or deletion +entries if the lookup operation is for CREATE or DELETE to complete +an operation, or to the \fIvn_abortop\fP entry if no operation +is undertaken. +For filesystems that perform no locking between lookup for creation +or deletion and the call to implement that action, +the final pathname component may be left untranslated by the lookup +routine. +In any case, the pathname pointer points at the final name component, +and the \fInameidata\fP contains a reference to the vnode of the parent +directory. +The interface is thus flexible enough to accommodate filesystems +that are fully stateful or fully stateless, while avoiding redundant +operations whenever possible. +One operation remains problematical, the \fIvn_rename\fP call. +It is tempting to look up the source of the rename for deletion +and the target for creation. +However, filesystems that lock directories during such lookups must avoid +deadlock if the two paths cross. +For that reason, the source is translated for LOOKUP only, +with the WANTPARENT flag set; +the target is then translated with an operation of CREATE. +.PP +In addition to the changes concerned with the \fInameidata\fP interface, +several other changes were made in the vnode operations. +The \fIvn_rdrw\fP entry was split into \fIvn_read\fP and \fIvn_write\fP; +frequently, the read/write entry amounts to a routine that checks +the direction flag, then calls either a read routine or a write routine. +The two entries may be identical for any given filesystem; +the direction flag is contained in the \fIuio\fP given as an argument. +.PP +All of the read and write operations use a \fIuio\fP to describe +the file offset and buffer locations. +All of these fields must be updated before return. +In particular, the \fIvn_readdir\fP entry uses this +to return a new file offset token for its current location. +.PP +Several new operations have been added. +The first, \fIvn_seek\fP, is a concession to record-oriented files +such as directories. +It allows the filesystem to verify that a seek leaves a file at a sensible +offset, or to return a new offset token relative to an earlier one. +For most filesystems and files, this operation amounts to performing +simple arithmetic. +Another new entry point is \fIvn_mmap\fP, for use in mapping device memory +into a user process address space. +Its semantics are not yet decided. +The final additions are the \fIvn_lock\fP and \fIvn_unlock\fP entries. +These are used to request that the underlying file be locked against +changes for short periods of time if the filesystem implementation allows it. +They are used to maintain consistency +during internal operations such as \fIexec\fP, +and may not be used to construct atomic operations from other filesystem +operations. +.PP +The attributes of a vnode are not stored in the vnode, +as they might change with time and may need to be read from a remote +source. +Attributes have the form: +.DS +.ta .5i +\w'struct vnodeops\0\0'u +\w'*v_vfsmountedhere;\0\0\0'u +/* + * Vnode attributes. A field value of -1 + * represents a field whose value is unavailable + * (getattr) or which is not to be changed (setattr). + */ +struct vattr { + enum vtype va_type; /* vnode type (for create) */ + u_short va_mode; /* files access mode and type */ +\fB!\fP uid_t va_uid; /* owner user id */ +\fB!\fP gid_t va_gid; /* owner group id */ + long va_fsid; /* file system id (dev for now) */ +\fB!\fP long va_fileid; /* file id */ + short va_nlink; /* number of references to file */ + u_long va_size; /* file size in bytes (quad?) */ +\fB+\fP u_long va_size1; /* reserved if not quad */ + long va_blocksize; /* blocksize preferred for i/o */ + struct timeval va_atime; /* time of last access */ + struct timeval va_mtime; /* time of last modification */ + struct timeval va_ctime; /* time file changed */ + dev_t va_rdev; /* device the file represents */ + u_long va_bytes; /* bytes of disk space held by file */ +\fB+\fP u_long va_bytes1; /* reserved if va_bytes not a quad */ +}; +.DE +.SH +Conclusions +.PP +The Sun VFS filesystem interface is the most widely used generic +filesystem interface. +Of the interfaces examined, it creates the cleanest separation +between the filesystem-independent and -dependent layers and data structures. +It has several flaws, but it is felt that certain changes in the interface +can ameliorate most of them. +The interface proposed here includes those changes. +The proposed interface is now being implemented by the Computer Systems +Research Group at Berkeley. +If the design succeeds in improving the flexibility and performance +of the filesystem layering, it will be advanced as a model interface. +.SH +Acknowledgements +.PP +The filesystem interface described here is derived from Sun's VFS interface. +It also includes features similar to those of DEC's GFS interface. +We are indebted to members of the Sun and DEC system groups +for long discussions of the issues involved. +.br +.ne 2i +.SH +References + +.IP Brownbridge82 \w'Satyanarayanan85\0\0'u +Brownbridge, D.R., L.F. Marshall, B. Randell, +``The Newcastle Connection, or UNIXes of the World Unite!,'' +\fISoftware\- Practice and Experience\fP, Vol. 12, pp. 1147-1162, 1982. + +.IP Cole85 +Cole, C.T., P.B. Flinn, A.B. Atlas, +``An Implementation of an Extended File System for UNIX,'' +\fIUsenix Conference Proceedings\fP, +pp. 131-150, June, 1985. + +.IP Kleiman86 +``Vnodes: An Architecture for Multiple File System Types in Sun UNIX,'' +\fIUsenix Conference Proceedings\fP, +pp. 238-247, June, 1986. + +.IP Leffler84 +Leffler, S., M.K. McKusick, M. Karels, +``Measuring and Improving the Performance of 4.2BSD,'' +\fIUsenix Conference Proceedings\fP, pp. 237-252, June, 1984. + +.IP McKusick84 +McKusick, M.K., W.N. Joy, S.J. Leffler, R.S. Fabry, +``A Fast File System for UNIX,'' \fITransactions on Computer Systems\fP, +Vol. 2, pp. 181-197, +ACM, August, 1984. + +.IP McKusick85 +McKusick, M.K., M. Karels, S. Leffler, +``Performance Improvements and Functional Enhancements in 4.3BSD,'' +\fIUsenix Conference Proceedings\fP, pp. 519-531, June, 1985. + +.IP Rifkin86 +Rifkin, A.P., M.P. Forbes, R.L. Hamilton, M. Sabrio, S. Shah, and K. Yueh, +``RFS Architectural Overview,'' \fIUsenix Conference Proceedings\fP, +pp. 248-259, June, 1986. + +.IP Ritchie74 +Ritchie, D.M. and K. Thompson, ``The Unix Time-Sharing System,'' +\fICommunications of the ACM\fP, Vol. 17, pp. 365-375, July, 1974. + +.IP Rodriguez86 +Rodriguez, R., M. Koehler, R. Hyde, +``The Generic File System,'' \fIUsenix Conference Proceedings\fP, +pp. 260-269, June, 1986. + +.IP Sandberg85 +Sandberg, R., D. Goldberg, S. Kleiman, D. Walsh, B. Lyon, +``Design and Implementation of the Sun Network Filesystem,'' +\fIUsenix Conference Proceedings\fP, +pp. 119-130, June, 1985. + +.IP Satyanarayanan85 +Satyanarayanan, M., \fIet al.\fP, +``The ITC Distributed File System: Principles and Design,'' +\fIProc. 10th Symposium on Operating Systems Principles\fP, pp. 35-50, +ACM, December, 1985. + +.IP Walker85 +Walker, B.J. and S.H. Kiser, ``The LOCUS Distributed Filesystem,'' +\fIThe LOCUS Distributed System Architecture\fP, +G.J. Popek and B.J. Walker, ed., The MIT Press, Cambridge, MA, 1985. + +.IP Weinberger84 +Weinberger, P.J., ``The Version 8 Network File System,'' +\fIUsenix Conference presentation\fP, +June, 1984. diff --git a/samples/Groovy/build.script! b/samples/Groovy/build.gvy similarity index 100% rename from samples/Groovy/build.script! rename to samples/Groovy/build.gvy diff --git a/samples/Groovy/groovy.script! b/samples/Groovy/groovy similarity index 100% rename from samples/Groovy/groovy.script! rename to samples/Groovy/groovy diff --git a/samples/HTML/rpanel.inc b/samples/HTML/rpanel.inc new file mode 100644 index 00000000..95ceb913 --- /dev/null +++ b/samples/HTML/rpanel.inc @@ -0,0 +1,31 @@ + + + + + + + +
+

Поддержка:

+
+ + + + + + + + + + + +
+

Москва:

+
+

+7-902-7-800-807

+
+

Регионы:

+
+

+7-902-7-800-807

+
+ diff --git a/samples/HTML/tailDel.inc b/samples/HTML/tailDel.inc new file mode 100644 index 00000000..9ee2aa05 --- /dev/null +++ b/samples/HTML/tailDel.inc @@ -0,0 +1,5 @@ + +

Supported Targets

+ + + diff --git a/samples/Haskell/HsColour.hs b/samples/Haskell/HsColour.hs new file mode 100644 index 00000000..64588a6d --- /dev/null +++ b/samples/Haskell/HsColour.hs @@ -0,0 +1,114 @@ +-- | This is a library which colourises Haskell code. +-- It currently has six output formats: +-- +-- * ANSI terminal codes +-- +-- * LaTeX macros +-- +-- * HTML 3.2 with font tags +-- +-- * HTML 4.01 with external CSS. +-- +-- * XHTML 1.0 with internal CSS. +-- +-- * mIRC chat client colour codes. +-- +module Language.Haskell.HsColour (Output(..), ColourPrefs(..), + hscolour) where + +import Language.Haskell.HsColour.Colourise (ColourPrefs(..)) +import qualified Language.Haskell.HsColour.TTY as TTY +import qualified Language.Haskell.HsColour.HTML as HTML +import qualified Language.Haskell.HsColour.CSS as CSS +import qualified Language.Haskell.HsColour.ACSS as ACSS +import qualified Language.Haskell.HsColour.InlineCSS as ICSS +import qualified Language.Haskell.HsColour.LaTeX as LaTeX +import qualified Language.Haskell.HsColour.MIRC as MIRC +import Data.List(mapAccumL, isPrefixOf) +import Data.Maybe +import Language.Haskell.HsColour.Output +--import Debug.Trace + +-- | Colourise Haskell source code with the given output format. +hscolour :: Output -- ^ Output format. + -> ColourPrefs -- ^ Colour preferences (for formats that support them). + -> Bool -- ^ Whether to include anchors. + -> Bool -- ^ Whether output document is partial or complete. + -> String -- ^ Title for output. + -> Bool -- ^ Whether input document is literate haskell or not + -> String -- ^ Haskell source code. + -> String -- ^ Coloured Haskell source code. +hscolour output pref anchor partial title False = + (if partial then id else top'n'tail output title) . + hscolour' output pref anchor +hscolour output pref anchor partial title True = + (if partial then id else top'n'tail output title) . + concatMap chunk . joinL . classify . inlines + where + chunk (Code c) = hscolour' output pref anchor c + chunk (Lit c) = c + +-- | The actual colourising worker, despatched on the chosen output format. +hscolour' :: Output -- ^ Output format. + -> ColourPrefs -- ^ Colour preferences (for formats that support them) + -> Bool -- ^ Whether to include anchors. + -> String -- ^ Haskell source code. + -> String -- ^ Coloured Haskell source code. +hscolour' TTY pref _ = TTY.hscolour pref +hscolour' (TTYg tt) pref _ = TTY.hscolourG tt pref +hscolour' MIRC pref _ = MIRC.hscolour pref +hscolour' LaTeX pref _ = LaTeX.hscolour pref +hscolour' HTML pref anchor = HTML.hscolour pref anchor +hscolour' CSS _ anchor = CSS.hscolour anchor +hscolour' ICSS pref anchor = ICSS.hscolour pref anchor +hscolour' ACSS _ anchor = ACSS.hscolour anchor + +-- | Choose the right headers\/footers, depending on the output format. +top'n'tail :: Output -- ^ Output format + -> String -- ^ Title for output + -> (String->String) -- ^ Output transformer +top'n'tail TTY _ = id +top'n'tail (TTYg _) _ = id +top'n'tail MIRC _ = id +top'n'tail LaTeX title = LaTeX.top'n'tail title +top'n'tail HTML title = HTML.top'n'tail title +top'n'tail CSS title = CSS.top'n'tail title +top'n'tail ICSS title = ICSS.top'n'tail title +top'n'tail ACSS title = CSS.top'n'tail title + +-- | Separating literate files into code\/comment chunks. +data Lit = Code {unL :: String} | Lit {unL :: String} deriving (Show) + +-- Re-implementation of 'lines', for better efficiency (but decreased laziness). +-- Also, importantly, accepts non-standard DOS and Mac line ending characters. +-- And retains the trailing '\n' character in each resultant string. +inlines :: String -> [String] +inlines s = lines' s id + where + lines' [] acc = [acc []] + lines' ('\^M':'\n':s) acc = acc ['\n'] : lines' s id -- DOS +--lines' ('\^M':s) acc = acc ['\n'] : lines' s id -- MacOS + lines' ('\n':s) acc = acc ['\n'] : lines' s id -- Unix + lines' (c:s) acc = lines' s (acc . (c:)) + + +-- | The code for classify is largely stolen from Language.Preprocessor.Unlit. +classify :: [String] -> [Lit] +classify [] = [] +classify (x:xs) | "\\begin{code}"`isPrefixOf`x + = Lit x: allProg xs + where allProg [] = [] -- Should give an error message, + -- but I have no good position information. + allProg (x:xs) | "\\end{code}"`isPrefixOf`x + = Lit x: classify xs + allProg (x:xs) = Code x: allProg xs +classify (('>':x):xs) = Code ('>':x) : classify xs +classify (x:xs) = Lit x: classify xs + +-- | Join up chunks of code\/comment that are next to each other. +joinL :: [Lit] -> [Lit] +joinL [] = [] +joinL (Code c:Code c2:xs) = joinL (Code (c++c2):xs) +joinL (Lit c :Lit c2 :xs) = joinL (Lit (c++c2):xs) +joinL (any:xs) = any: joinL xs + diff --git a/samples/HyPhy/AAModelComparison.bf b/samples/HyPhy/AAModelComparison.bf new file mode 100644 index 00000000..602a9e56 --- /dev/null +++ b/samples/HyPhy/AAModelComparison.bf @@ -0,0 +1,252 @@ +if (Rows (modelMatrixList) == 0) +{ + modelMatrixList = + { + {"Equal Input", "EIAA.mdl", "19"} + {"Dayhoff","Dayhoff.mdl","0"} + {"Dayhoff+F","Dayhoff_F.mdl","19"} + {"JTT", "Jones.mdl", "0"} + {"JTT+F", "Jones_F.mdl", "19"} + {"WAG", "WAG.mdl", "0"} + {"WAG+F", "WAG_F.mdl", "19"} + {"rtREV", "rtREV.mdl", "0"} + {"rtREV+F", "rtREV_F.mdl", "19"} + {"mtMAM", "mtMAM.mdl", "0"} + {"mtMAM+F", "mtMAM_F.mdl", "19"} + {"mtREV 24", "mtREV_24.mdl", "0"} + {"mtREV 24+F", "mtREV_24_F.mdl", "19"} + {"HIV within", "HIVwithin.mdl", "0"} + {"HIV within+F", "HIVwithin+F.mdl", "19"} + {"HIV between", "HIVbetween.mdl", "0"} + {"HIV between+F", "HIVbetween+F.mdl", "19"} + {"REV-1 step", "reducedREV.mdl", "19"} + {"REV", "mtREV.mdl", "19"} + }; +} + +/*___________________________________________________________________________________________________________*/ + +function runAModel (modelID, fileName, xtraP, midx) +{ + ExecuteCommands ("#include \"TemplateModels/"+fileName+"\";"); + Tree givenTree = treeString; + LikelihoodFunction lf = (filteredData,givenTree); + + GetString (lf_info, lf, -1); + locals = lf_info["Local Independent"]; + + if (Columns (branchLengthStash)) + { + USE_LAST_RESULTS = 1; + for (_iv = 0; _iv < Columns (locals); _iv = _iv+1) + { + ExecuteCommands (locals[_iv] + "=1;\n"); + } + currentBL = BranchLength (givenTree,0); + currentBN = BranchName (givenTree,-1); + for (_iv = 0; _iv < Columns (currentBN); _iv = _iv+1) + { + ExecuteCommands ("givenTree."+currentBN[_iv]+".t="+branchLengthStash[_iv]/currentBL+";"); + + } + } + else + { + for (_iv = 0; _iv < Columns (locals); _iv = _iv+1) + { + ExecuteCommands (locals[_iv] + "=0.1;\n"); + } + USE_LAST_RESULTS = 1; + } + + Optimize (res,lf); + + fprintf (stdout, "| ", modelID); + for (k=0; k1) + { + cAIC = 2(-res[1][0]+params*(filteredData.sites/(filteredData.sites-params-1))); + } + else + { + cAIC = 0; + } + + branchLengths = BranchLength (givenTree,-1); + TL = 0; + for (k=Rows(branchLengths)*Columns(branchLengths)-1; k>=0; k=k-1) + { + TL = TL + branchLengths[k]; + } + + fprintf (stdout, "| ", Format (res[1][0],14,3), " | ", Format (params,5,0), " | ", + Format (AIC, 9,3), " | ",); + + if (cAIC > 0) + { + fprintf (stdout, Format (cAIC,11,3), " | "); + } + else + { + fprintf (stdout, " N/A | "); + } + + fprintf (stdout, Format (TL,11,3), " |\n", sepString); + + resultMatrix[midx][0] = res[1][0]; + resultMatrix[midx][1] = params; + resultMatrix[midx][2] = AIC; + resultMatrix[midx][3] = cAIC; + resultMatrix[midx][4] = TL; + + if (AIC < bestAIC) + { + bestAIC = AIC; + bestAICidx = midx; + branchLengthStash = BranchLength (givenTree,-1); + } + + if (cAIC > 0) + { + if (bestCAIC > cAIC) + { + bestCAIC = cAIC; + bestCAICidx = midx; + + } + } + + return 0; +} + + +/*___________________________________________________________________________________________________________*/ + + + +maxModelWidth = 7; +skipCodeSelectionStep = 0; + +ChoiceList (doREV, "Include REV?", 1, SKIP_NONE, "Yes", "Include REV and reduced REV models. CAUTION: these models take a long time to fit.", + "No", "Only use empirical models"); + +if (doREV < 0) +{ + return 0; +} + +if (doREV == 0) +{ + #include "TemplateModels/chooseGeneticCode.def"; + skipCodeSelectionStep = 1; +} + +modelCount = Rows (modelMatrixList) - 2*doREV; + +for (k=0; k=0) +{ + fprintf (stdout, "\n\nBest c-AIC model:\n\t", modelMatrixList[bestCAICidx][0], " with the score of ", bestCAIC); +} + +labelMatrix = {{"Log-likelihood","Parameters","AIC","c-AIC","Total tree length",""}}; + +aaString = "Model"; + +for (fC = 0; fC < modelCount; fC = fC+1) +{ + aaString = aaString + ";" + modelMatrixList[fC][0]; +} + +USE_LAST_RESULTS = 0; + +labelMatrix[5] = aaString; +skipCodeSelectionStep = 0; +OpenWindow (CHARTWINDOW,{{"Model Fits"} + {"labelMatrix"}, + {"resultMatrix"}, + {"Bar Chart"}, + {"Index"}, + {"c-AIC"}, + {"Model Index"}, + {""}, + {"AIC"} + }, + "SCREEN_WIDTH-60;SCREEN_HEIGHT-60;30;30"); diff --git a/samples/HyPhy/CodonModelCompare.bf b/samples/HyPhy/CodonModelCompare.bf new file mode 100644 index 00000000..e24b730d --- /dev/null +++ b/samples/HyPhy/CodonModelCompare.bf @@ -0,0 +1,1046 @@ +/* + This file takes a nucleotide data set and a tree (either from the data file or from a separate file) and computes maximum likelihood estimates for every possible 4x4 reversible model on that data and tree. + + We use the string (v1,v2,v3,v4,v5,v6), where and v1..6 = 0..5 + to encode a 4x4 symmetric transition matrix with entries + [* v1 v2 v3] + [- * v4 v5] + [- - * v6] + [- - - * ] + + For instance: (010010) encodes HKY85. + + For each model the following information is reported: + - Model string. (e.g. (012345) for the GRM) + - Number of model parameters + - Max ln-likelihood for the model + - Likelihood ratio statistic (as a sub-model of the GRM) + - AIC + - P-Value for the Likelihood Ratio Test. + + + Sergei L. Kosakovsky Pond, Summer 2002. + +*/ + +function ReceiveJobs (sendOrNot) +{ + if (MPI_NODE_COUNT>1) + { + MPIReceive (-1, fromNode, result_String); + jobModelNum = MPINodeState[fromNode-1][1]; + vv1 = MPINodeState[fromNode-1][2]; + vv2 = MPINodeState[fromNode-1][3]; + vv3 = MPINodeState[fromNode-1][4]; + vv4 = MPINodeState[fromNode-1][5]; + vv5 = MPINodeState[fromNode-1][6]; + vv6 = MPINodeState[fromNode-1][7]; + if (sendOrNot) + { + MPISend (fromNode,lf); + MPINodeState[fromNode-1][1] = modelNum; + MPINodeState[fromNode-1][2] = v1; + MPINodeState[fromNode-1][3] = v2; + MPINodeState[fromNode-1][4] = v3; + MPINodeState[fromNode-1][5] = v4; + MPINodeState[fromNode-1][6] = v5; + MPINodeState[fromNode-1][7] = v6; + } + else + { + MPINodeState[fromNode-1][0] = 0; + MPINodeState[fromNode-1][1] = -1; + } + + ExecuteCommands (result_String); + } + else + { + jobModelNum = modelNum; + } + + if (jobModelNum == 0) + { + stdl = lf_MLES[1][0]; + fullnp = lf_MLES[1][1]+addOn; + fprintf(stdout,"\n(012345) Full Model ln-lik = ",stdl,". Parameter Count=",Format(fullnp,0,0)," AIC = ", 2*(fullnp-stdl),"\n\n"); + + + resultCache [0][0] = 1; + resultCache [0][1] = 2; + resultCache [0][2] = 3; + resultCache [0][3] = 4; + resultCache [0][4] = 5; + resultCache [0][5] = lf_MLES[1][0]; + resultCache [0][6] = lf_MLES[1][1]+addOn; + resultCache [0][7] = 0; + resultCache [0][8] = 0; + + fprintf (stdout,"\n# | Model | # prm | lnL | LRT | AIC | P-Value |"); + fprintf (stdout,"\n----|----------|-------|-----------|----------------|------------|------------------|"); + + if (MPI_NODE_COUNT>1) + { + for (h=1; h<203; h=h+1) + { + lnL = resultCache[h][5]; + + if (lnL<0) + { + np = resultCache[h][6]; + LRT = -2*(lnL-stdl); + if (LRT<0) + { + LRT = 0; + } + AIC = -2*lnL+2*np; + PRINT_DIGITS = 3; + fprintf (stdout,"\n",h); + PRINT_DIGITS = 1; + fprintf (stdout," | (",0, resultCache[h][0], resultCache[h][1], resultCache[h][2], resultCache[h][3], resultCache[h][4],") | "); + fprintf (stdout,Format (np,5,0)); + PRINT_DIGITS = 8; + fprintf (stdout, " | ",lnL," | ",Format(LRT,14,3), " | ", AIC, " | ", ); + + PRINT_DIGITS = 15; + if (LRT==0) + { + pValue = 1; + } + else + { + pValue = 1-CChi2(LRT,fullnp-np); + } + fprintf (stdout,pValue," |"); + resultCache [jobModelNum][7] = pValue; + if (pValue1)&&(resultCache[0][5]>=0)) + { + resultCache [jobModelNum][0] = vv2; + resultCache [jobModelNum][1] = vv3; + resultCache [jobModelNum][2] = vv4; + resultCache [jobModelNum][3] = vv5; + resultCache [jobModelNum][4] = vv6; + resultCache [jobModelNum][5] = lf_MLES[1][0]; + resultCache [jobModelNum][6] = lf_MLES[1][1]+addOn; + return fromNode - 1; + } + } + + np = lf_MLES[1][1]+addOn; + lnL = lf_MLES[1][0]; + LRT = -2*(lnL-stdl); + if (LRT<0) + { + LRT = 0; + } + AIC = -2*lnL+2*np; + PRINT_DIGITS = 3; + fprintf (stdout,"\n",jobModelNum); + PRINT_DIGITS = 1; + fprintf (stdout," | (",vv1,vv2,vv3,vv4,vv5,vv6,") | "); + fprintf (stdout,Format (np,5,0)); + PRINT_DIGITS = 8; + fprintf (stdout, " | ",lnL," | ",Format(LRT,14,3), " | ", AIC, " | ", ); + + + PRINT_DIGITS = 15; + if (LRT==0) + { + pValue = 1; + } + else + { + pValue = 1-CChi2(LRT,fullnp-np); + } + fprintf (stdout,pValue," |"); + + resultCache [jobModelNum][0] = vv2; + resultCache [jobModelNum][1] = vv3; + resultCache [jobModelNum][2] = vv4; + resultCache [jobModelNum][3] = vv5; + resultCache [jobModelNum][4] = vv6; + resultCache [jobModelNum][5] = lf_MLES[1][0]; + resultCache [jobModelNum][6] = lf_MLES[1][1]+addOn; + resultCache [jobModelNum][7] = pValue; + if (pValue 0) +{ + #include "TemplateModels/defineGamma.mdl"; +} + +ChoiceList (branchLengths,"Estimate Branch Lengths",1,SKIP_NONE, + "Every Time","Branch lengths are reestimated for every model.", + "Once","Branch lenghts obtained from the nucleotide GTR model and reused for subsequent models." + ); + +if (branchLengths<0) +{ + return; +} + +rejectAt = 0; + +while ((rejectAt<=0)||(rejectAt>=1)) +{ + fprintf (stdout, "\nModel rejection level (e.g. 0.05):"); + fscanf (stdin,"Number", rejectAt); +} + +SetDialogPrompt ("Save results to:"); + +fprintf (PROMPT_FOR_FILE, CLEAR_FILE); +BASE_PATH = LAST_FILE_PATH; + +KEEP_OPTIMAL_ORDER = 1; +MESSAGE_LOGGING = 0; + +global AC=1; +global AT=1; +global CG=1; +global CT=1; +global GT=1; +global R=1; + + +r = setElement (0,2,1); +r = setElement (0,3,2); +r = setElement (1,2,3); +r = setElement (1,3,4); +r = setElement (2,3,5); + +MG94custom = 0; +MULTIPLY_BY_FREQS = PopulateModelMatrix ("MG94custom", observedFreq); +vectorOfFrequencies = BuildCodonFrequencies (observedFreq); +Model MG94customModel = (MG94custom,vectorOfFrequencies,0); + +USE_POSITION_SPECIFIC_FREQS = 1; +Tree tr = treeString; + +addOn = 0; + +if (branchLengths) +{ + global TreeScaler = 1; + GTRMatrix = {{*,AC*nt,nt,AT*nt}{AC*nt,*,CG*nt,CT*nt}{nt,CG*nt,*,GT*nt}{AT*nt,CT*nt,GT*nt,*}}; + DataSetFilter nucFilter = CreateFilter (filteredData,1); + HarvestFrequencies (nucFreq,nucFilter,1,1,1); + Model GTRModel = (GTRMatrix,nucFreq,1); + givenTreeString = Format (tr,0,0); + Tree nucTree = givenTreeString; + LikelihoodFunction lfn = (nucFilter, nucTree); + Optimize (nres,lfn); + ReplicateConstraint ("this1.?.synRate:=this2.?.nt__/TreeScaler",tr,nucTree); + addOn = nres[1][1]-nres[1][2]-1; +} + +LikelihoodFunction lf = (filteredData, tr); + +resultCache = {203,9}; + +modelNum = 0; +rejectCount = 0; + +if (MPI_NODE_COUNT>1) +{ + MPINodeState = {MPI_NODE_COUNT-1,8}; + OPTIMIZE_SUMMATION_ORDER = 0; + MPISend (1,lf); + MPINodeState[0][0] = 1; + MPINodeState[0][1] = modelNum; +} +else +{ + Optimize (lf_MLES,lf); + vv1 = 0; + vv2 = 0; + vv3 = 0; + vv4 = 0; + vv5 = 0; + vv6 = 0; + dummy = ReceiveJobs (0); +} + +rateBiasTerms = {{"AC","1","AT","CG","CT","GT"}}; + +for (v2=0; v2<=1; v2=v2+1) +{ + for (v3=0; v3<=v2+1; v3=v3+1) + { + if (v3>v2) + { + ub4 = v3; + } + else + { + ub4 = v2; + } + for (v4=0; v4<=ub4+1; v4=v4+1) + { + if (v4>=ub4) + { + ub5 = v4; + } + else + { + ub5 = ub4; + } + for (v5=0; v5<=ub5+1; v5=v5+1) + { + if (v5>ub5) + { + ub6 = v5; + } + else + { + ub6 = ub5; + } + for (v6=0; v6<=ub6+1; v6=v6+1) + { + if (v6==5) + { + break; + } + + R = 1; + + paramCount = 0; + + modelDesc = "0"+Format(v2,1,0); + modelDesc = modelDesc+Format(v3,1,0); + modelDesc = modelDesc+Format(v4,1,0); + modelDesc = modelDesc+Format(v5,1,0); + modelDesc = modelDesc+Format(v6,1,0); + + modelConstraintString = ""; + + AC = 1; + AT = 1; + CG = 1; + CT = 1; + GT = 1; + + for (customLoopCounter2=1; customLoopCounter2<6; customLoopCounter2=customLoopCounter2+1) + { + for (customLoopCounter=0; customLoopCounter1) + { + for (mpiNode = 0; mpiNode < MPI_NODE_COUNT-1; mpiNode = mpiNode+1) + { + if (MPINodeState[mpiNode][0]==0) + { + break; + } + } + + if (mpiNode==MPI_NODE_COUNT-1) + /* all nodes busy */ + { + mpiNode = ReceiveJobs (1); + } + else + { + MPISend (mpiNode+1,lf); + MPINodeState[mpiNode][0] = 1; + MPINodeState[mpiNode][1] = modelNum; + MPINodeState[mpiNode][2] = v1; + MPINodeState[mpiNode][3] = v2; + MPINodeState[mpiNode][4] = v3; + MPINodeState[mpiNode][5] = v4; + MPINodeState[mpiNode][6] = v5; + MPINodeState[mpiNode][7] = v6; + } + } + else + { + Optimize (lf_MLES,lf); + vv1 = v1; + vv2 = v2; + vv3 = v3; + vv4 = v4; + vv5 = v5; + vv6 = v6; + dummy = ReceiveJobs (0); + } + } + } + } + } + +} + +if (MPI_NODE_COUNT>1) +{ + while (1) + { + for (nodeCounter = 0; nodeCounter < MPI_NODE_COUNT-1; nodeCounter = nodeCounter+1) + { + if (MPINodeState[nodeCounter][0]==1) + { + fromNode = ReceiveJobs (0); + break; + } + } + if (nodeCounter == MPI_NODE_COUNT-1) + { + break; + } + } + OPTIMIZE_SUMMATION_ORDER = 1; +} + +function checkEmbedding (_m1, _m2) +{ + for (r=0; r<6; r=r+1) + { + if (_m2[r]<_m1[r]) + { + /*fprintf (stdout,_m1," ", _m2, " Reject 1 at position ",r,"\n");*/ + return 0; + } + if (_m2[r]>_m1[r]) + { + for (r2 = 0; r2 < 6; r2 = r2+1) + { + if ((_m2[r2]==_m2[r])&&(_m1[r2]!=_m1[r])) + { + /*fprintf (stdout,_m1," ", _m2, " Reject 2 at positions ",r,r2,"\n");*/ + return 0; + } + } + } + } + return 1; +} + +PRINT_DIGITS = 0; + +fprintf (stdout, "\n\n--------------------------\n (*) => p-Value < ", rejectAt, "\nRejected ", rejectCount, " models.\n"); + + +if (rejectCount<202) +{ + + fprintf (stdout, "\nPerforming nested tests on the remaining models...\n"); + + done = 0; + while (!done) + { + done = 1; + for (v2=1; v2<203; v2=v2+1) + { + if (resultCache[v2][8]) + { + modelString = "0"; + for (v3 = 0; v3<5; v3=v3+1) + { + modelString = modelString + resultCache [v2][v3]; + } + for (v3 = v2+1; v3<203; v3 = v3+1) + { + if (resultCache[v3][8]) + { + modelString2 = "0"; + for (v4 = 0; v4<5; v4=v4+1) + { + modelString2 = modelString2 + resultCache [v3][v4]; + } + if (checkEmbedding (modelString, modelString2)) + { + fprintf (stdout,"H: (", modelString,") A: (", modelString2, "). "); + done = 0; + LRT = 2*(resultCache[v3][5]-resultCache[v2][5]); + npd = resultCache[v3][6]-resultCache[v2][6]; + if (LRT<0) + { + pValue = 1; + } + else + { + pValue = 1-CChi2(LRT,npd); + } + fprintf (stdout," P-Value=", Format (pValue,10,3)); + if (pValue1)", + "0 & 2 (Normal>1)", + "3 Normal", + "RE: Lognormal", + "RE: Gamma", + "RE: Discrete"}}; + +ParameterCount = {{0, + 1, + 3, + 4, + 2, + 4, + 2, + 4, + 5, + 5, + 5, + 5, + 6, + 1, + 2, + 4 + }}; + +MAXIMUM_ITERATIONS_PER_VARIABLE = 2000; +OPTIMIZATION_PRECISION = 0.001; + +function SetWDistribution (resp) +{ + if (rateType == 0) + { + global P = .5; + P:<1; + categFreqMatrix = {{P,1-P}}; + categRateMatrix = {{0,1}}; + category c = (2, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25); + } + else + { + if (rateType == 1) + { + global P1 = 1/3; + global P2 = 0; + + P1:<1; + P2:<1; + + global W = 1; + categFreqMatrix = {{P1,(1-P1)*P2, (1-P1)*(1-P2)}} ; + categRateMatrix = {{0,1,W}}; + category c = (3, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25); + } + else + { + if (rateType == 2) + { + global P1 = 1/3; + global P2 = .5; + P1:<1; + P2:<1; + global W1 = .25; + global R1 = 4; + global R2 = 3; + R1:>1; + R2:>1; + categFreqMatrix = {{P1,(1-P1)*P2, (1-P1)*(1-P2)}} ; + categRateMatrix = {{W1,W1*R1,W1*R1*R2}}; + category c = (3, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25); + } + else + { + if (rateType == 3) + { + global P1 = 1/5; + global P2 = 1/4; + global P3 = 1/3; + global P4 = 1/2; + + P1:<1; + P2:<1; + P3:<1; + P4:<1; + + categFreqMatrix = {{P1, + (1-P1)P2, + (1-P1)(1-P2)*P3, + (1-P1)(1-P2)(1-P3)P4, + (1-P1)(1-P2)(1-P3)(1-P4)}} ; + categRateMatrix = {{0,1/3,2/3,1,3}}; + category c = (5, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25); + } + else + { + if (rateType == 4) + { + global alpha = .5; + global beta = 1; + alpha:>0.01;alpha:<100; + beta:>0.01; + beta:<200; + category c = (resp, EQUAL, MEAN, GammaDist(_x_,alpha,beta), CGammaDist(_x_,alpha,beta), 0 , + 1e25,CGammaDist(_x_,alpha+1,beta)*alpha/beta); + } + else + { + if (rateType == 5) + { + global alpha = .5; + global beta = 1; + global alpha2= .75; + global P = .5; + alpha:>0.01;alpha:<100; + beta:>0.01; + beta:<200; + P:<1; + alpha2:>0.01;alpha2:<100; + category c = (resp, EQUAL, MEAN, P*GammaDist(_x_,alpha,beta) + (1-P)*GammaDist(_x_,alpha2,alpha2) + , P*CGammaDist(_x_,alpha,beta) + (1-P)*CGammaDist(_x_,alpha2,alpha2), + 0 , 1e25, + P*CGammaDist(_x_,alpha+1,beta)*alpha/beta + (1-P)*CGammaDist(_x_,alpha2+1,alpha2)); + } + else + { + if (rateType == 6) + { + global betaP = 1; + global betaQ = 1; + betaP:>0.05;betaP:<85; + betaQ:>0.05;betaQ:<85; + category c = (resp, EQUAL, MEAN, _x_^(betaP-1)*(1-_x_)^(betaQ-1)/Beta(betaP,betaQ), IBeta(_x_,betaP,betaQ), 0 , + 1,IBeta(_x_,betaP+1,betaQ)*betaP/(betaP+betaQ)); + } + else + { + if (rateType == 7) + { + global W = 2; + /*W:>1;*/ + global P = 1-1/(resp+1); + global betaP = 1; + global betaQ = 2; + betaP:>0.05; + betaQ:>0.05; + betaP:<85; + betaQ:<85; + P:>0.0000001; + P:<0.9999999; + categFreqMatrix = {resp+1,1}; + for (k=0; k=W), + 0,1e25, + P*IBeta(Min(_x_,1),betaP+1,betaQ)*betaP/(betaP+betaQ)+(1-P)*W*(_x_>=W)); + } + else + { + if (rateType == 8) + { + global P = .5; + global betaP = 1; + global betaQ = 2; + betaP:>0.05;betaP:<85; + betaQ:>0.05;betaQ:<85; + global alpha = .5; + global beta = 1; + alpha:>0.01;alpha:<100; + beta:>0.01; + beta:<200; + P:<1; + category c = (resp, EQUAL, MEAN, + P*_x_^(betaP-1)*(1-Min(_x_,1))^(betaQ-1)/Beta(betaP,betaQ)+(1-P)*GammaDist(_x_,alpha,beta), + P*IBeta(Min(_x_,1),betaP,betaQ)+(1-P)*CGammaDist(_x_,alpha,beta), + 0,1e25, + P*betaP/(betaP+betaQ)*IBeta(Min(_x_,1),betaP+1,betaQ)+(1-P)*alpha/beta*CGammaDist(_x_,alpha+1,beta)); + } + else + { + if (rateType == 9) + { + global P = .5; + P:<1; + global betaP = 1; + betaP:>0.05;betaP:<85; + global betaQ = 2; + betaQ:>0.05;betaQ:<85; + global alpha = .5; + alpha:>0.01;alpha:<100; + global beta = 1; + beta:>0.01;beta:<500; + category c = (resp, EQUAL, MEAN, + P*_x_^(betaP-1)*(1-Min(_x_,1))^(betaQ-1)/Beta(betaP,betaQ)+(1-P)*(_x_>1)*GammaDist(Max(1e-20,_x_-1),alpha,beta), + P*IBeta(Min(_x_,1),betaP,betaQ)+(1-P)*CGammaDist(Max(_x_-1,0),alpha,beta), + 0,1e25, + P*betaP/(betaP+betaQ)*IBeta(Min(_x_,1),betaP+1,betaQ)+ + (1-P)*(alpha/beta*CGammaDist(Max(0,_x_-1),alpha+1,beta)+CGammaDist(Max(0,_x_-1),alpha,beta))); + } + else + { + if (rateType == 10) + { + global P = .5; + global betaP = 1; + global betaQ = 2; + betaP:>0.05; + betaQ:>0.05; + betaP:<85; + betaQ:<85; + global mu = 3; + global sigma = .01; + sigma:>0.0001; + sqrt2pi = Sqrt(8*Arctan(1)); + P:<1; + + category c = (resp, EQUAL, MEAN, + P*_x_^(betaP-1)*(1-Min(_x_,1))^(betaQ-1)/Beta(betaP,betaQ)+ + (1-P)*(_x_>=1)*Exp(-(_x_-mu)(_x_-mu)/(2*sigma*sigma))/(sqrt2pi__*sigma)/ZCDF((mu-1)/sigma), + P*IBeta(Min(_x_,1),betaP,betaQ)+(1-P)*(_x_>=1)*(1-ZCDF((mu-_x_)/sigma)/ZCDF((mu-1)/sigma)), + 0,1e25, + P*betaP/(betaP+betaQ)*IBeta(Min(_x_,1),betaP+1,betaQ)+ + (1-P)*(_x_>=1)*(mu*(1-ZCDF((1-mu)/sigma)-ZCDF((mu-_x_)/sigma))+ + sigma*(Exp((mu-1)(1-mu)/(2*sigma*sigma))-Exp((_x_-mu)(mu-_x_)/(2*sigma*sigma)))/sqrt2pi__)/ZCDF((mu-1)/sigma)); + } + else + { + if (rateType == 11) + { + global P = 1/3; + global P1 = .5; + + global mu = 3; + global sigma = .5; + sigma:>0.0001; + global sigma1 = 1; + sigma1:>0.0001; + + sqrt2pi = Sqrt(8*Arctan(1)); + P:<1; + P1:<1; + + categFreqMatrix = {resp+1,1}; + for (k=1; k<=resp; k=k+1) + { + categFreqMatrix[k]:=(1-P)/resp__; + } + categFreqMatrix[0]:=P; + + category c = (resp+1, categFreqMatrix, MEAN, + (1-P)((1-P1)*Exp(-(_x_-mu)(_x_-mu)/(2*sigma1*sigma1))/(sqrt2pi__*sigma1)/ZCDF(mu/sigma1)+ + P1*Exp(-(_x_-1)(_x_-1)/(2*sigma*sigma))/(sqrt2pi__*sigma)/ZCDF(1/sigma)), + P+(1-P)(_x_>1e-20)((1-P1)(1-ZCDF((mu-_x_)/sigma1)/ZCDF(mu/sigma1))+ + P1*(1-ZCDF((1-_x_)/sigma)/ZCDF(1/sigma))), + 0,1e25, + (1-P)((1-P1)(mu*(1-ZCDF(-mu/sigma1)-ZCDF((mu-_x_)/sigma1))+ + sigma1*(Exp(-mu*mu/(2*sigma1*sigma1))-Exp((_x_-mu)(mu-_x_)/(2*sigma1*sigma1)))/sqrt2pi__)/ZCDF(mu/sigma1)+ + P(1-ZCDF(-1/sigma)-ZCDF((1-_x_)/sigma)+ + sigma*(Exp(-1/(2*sigma*sigma))-Exp((_x_-1)(1-_x_)/(2*sigma*sigma)))/sqrt2pi__)/ZCDF(1/sigma)) + ); + } + else + { + if (rateType == 12) + { + global P = 1/3; + global P1 = .5; + + global mu = 3; + global sigma = .25; + global sigma1 = .5; + global sigma2 = 1; + sigma:>0.0001; + sigma1:>0.0001; + sigma2:>0.0001; + + sqrt2pi = Sqrt(8*Arctan(1)); + P:<1; + P1:<1; + + category c = (resp, EQUAL , MEAN, + 2*P*Exp(-_x_^2/(2*sigma*sigma))+ + (1-P)((1-P1)*Exp((_x_-mu)(mu-_x_)/(2*sigma2*sigma2))/(sqrt2pi__*sigma2)/ZCDF(mu/sigma2)+ + P1*Exp((1-_x_)(_x_-1)/(2*sigma1*sigma1))/(sqrt2pi__*sigma1)/ZCDF(1/sigma1)), + P*(1-2*ZCDF(-_x_/sigma))+ + (1-P)((1-P1)(1-ZCDF((mu-_x_)/sigma2)/ZCDF(mu/sigma2))+ + P1*(1-ZCDF((1-_x_)/sigma1)/ZCDF(1/sigma1))), + 0,1e25, + 2*P*sigma*(1-Exp(-_x_*_x_/(2*sigma*sigma)))/sqrt2pi__+ + (1-P)((1-P1)(mu*(1-ZCDF(-mu/sigma2)-ZCDF((mu-_x_)/sigma2))+ + sigma2*(Exp(-mu*mu/(2*sigma2*sigma2))-Exp((_x_-mu)(mu-_x_)/(2*sigma2*sigma2)))/sqrt2pi__)/ZCDF(mu/sigma2)+ + P1(1-ZCDF(-1/sigma1)-ZCDF((1-_x_)/sigma1)+ + sigma1*(Exp(-1/(2*sigma1*sigma1))-Exp((_x_-1)(1-_x_)/(2*sigma1*sigma1)))/sqrt2pi__)/ZCDF(mu/sigma1)) + ); + } + else + { + if (rateType == 13) + { + global sigma = .1; + sigma:>0.0001;sigma:<10; + sqrt2pi = Sqrt(8*Arctan(1)); + global _x_:<1e200; + category c = (resp, EQUAL, MEAN, + Exp (-Log(_x_)*Log(_x_) / (2*sigma*sigma)) / (_x_*sigma*sqrt2pi__), /*density*/ + ZCDF (Log(_x_)/sigma), /*CDF*/ + 1e-200, /*left bound*/ + 1e200, /*right bound*/ + Exp (.5*sigma^2)*ZCDF (Log(_x_)/sigma-sigma), + CONSTANT_ON_PARTITION + ); + } + else + { + if (rateType == 14) + { + global alpha = .5; + global beta = 1; + alpha:>0.01;alpha:<100; + beta:>0.01; + beta:<200; + category c = (resp, EQUAL, MEAN, GammaDist(_x_,alpha,beta), CGammaDist(_x_,alpha,beta), 0 , + 1e25,CGammaDist(_x_,alpha+1,beta)*alpha/beta,CONSTANT_ON_PARTITION); + } + else + { + global P1 = 1/3; + global P2 = .5; + P1:<1; + P2:<1; + global W1 = .25; + global R1 = 4; + global R2 = 3; + R1:>1; + R2:>1; + categFreqMatrix = {{P1,(1-P1)*P2, (1-P1)*(1-P2)}} ; + categRateMatrix = {{W1,W1*R1,W1*R1*R2}}; + category c = (3, categFreqMatrix , MEAN, ,categRateMatrix, 0, 1e25, ,CONSTANT_ON_PARTITION); + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + return 0; +} + +/* ____________________________________________________________________________________________________________________*/ + +function FrameText (frameChar,vertChar,parOff,theText) +{ + h = Abs (theText)+4; + fprintf (stdout,"\n"); + for (k=0; k1) break; + } + if (k 1 */ + { + ConstructCategoryMatrix(marginals,lf,COMPLETE); + + CC = Columns (marginals); + if (rateType>=13) + /* subset rate variation */ + { + CC = CC/numberOfSubsets; + + subsetMarginals = {D,numberOfSubsets}; + for (v=0; v1 (Posterior cutoff = ",sigLevel,")\n\n"); + for (v=0; v=sigLevel) + { + fprintf (LAST_FILE_PATH,Format (v+1,0,0)," (",positiveProb,")\n"); + } + } + fprintf (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n Subsets with dN/dS<=1 (Posterior cutoff = ",sigLevel,")\n\n"); + for (v=0; v1 (Posterior cutoff = ",sigLevel,")\n\n"); + for (v=0; v=sigLevel) + { + fprintf (LAST_FILE_PATH,Format (v+1,0,0)," (",positiveProb,")\n"); + } + } + fprintf (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n Sites with dN/dS<=1 (Posterior cutoff = ",sigLevel,")\n\n"); + for (v=0; v1."); + } + fprintf (LAST_FILE_PATH,"\n\n------------------------------------------------\n\n"); + return E; +} + +/* ____________________________________________________________________________________________________________________*/ + +function PopulateModelMatrix (ModelMatrixName&, EFV) +{ + ModelMatrixName = {ModelMatrixDimension,ModelMatrixDimension}; + + hshift = 0; + + if (modelType==0) + { + for (h=0; h<64; h=h+1) + { + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + continue; + } + vshift = hshift; + for (v = h+1; v<64; v=v+1) + { + diff = v-h; + if (_Genetic_Code[v]==10) + { + vshift = vshift+1; + continue; + } + if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0)) + { + if (h$4==v$4) + { + transition = v%4; + transition2= h%4; + } + else + { + if(diff%16==0) + { + transition = v$16; + transition2= h$16; + } + else + { + transition = v%16$4; + transition2= h%16$4; + } + } + if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) + { + ModelMatrixName[h-hshift][v-vshift] := t*EFV__[transition__]; + ModelMatrixName[v-vshift][h-hshift] := t*EFV__[transition2__]; + } + else + { + ModelMatrixName[h-hshift][v-vshift] := c*t*EFV__[transition__]; + ModelMatrixName[v-vshift][h-hshift] := c*t*EFV__[transition2__]; + } + } + } + } + } + else + { + if (modelType==1) + { + for (h=0; h<64; h=h+1) + { + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + continue; + } + vshift = hshift; + for (v = h+1; v<64; v=v+1) + { + diff = v-h; + if (_Genetic_Code[v]==10) + { + vshift = vshift+1; + continue; + } + nucPosInCodon = 2; + if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0)) + { + if (h$4==v$4) + { + transition = v%4; + transition2= h%4; + } + else + { + if(diff%16==0) + { + transition = v$16; + transition2= h$16; + nucPosInCodon = 0; + } + else + { + transition = v%16$4; + transition2= h%16$4; + nucPosInCodon = 1; + } + } + if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) + { + ModelMatrixName[h-hshift][v-vshift] := t*EFV__[transition__][nucPosInCodon__]; + ModelMatrixName[v-vshift][h-hshift] := t*EFV__[transition2__][nucPosInCodon__]; + } + else + { + ModelMatrixName[h-hshift][v-vshift] := c*t*EFV__[transition__][nucPosInCodon__]; + ModelMatrixName[v-vshift][h-hshift] := c*t*EFV__[transition2__][nucPosInCodon__]; + } + } + } + } + } + else + { + for (h=0; h<64; h=h+1) + { + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + continue; + } + vshift = hshift; + for (v = h+1; v<64; v=v+1) + { + diff = v-h; + if (_Genetic_Code[v]==10) + { + vshift = vshift+1; + continue; + } + if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0)) + { + if (h$4==v$4) + { + transition = v%4; + transition2= h%4; + } + else + { + if(diff%16==0) + { + transition = v$16; + transition2= h$16; + } + else + { + transition = v%16$4; + transition2= h%16$4; + } + } + if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) + { + if (Abs(transition-transition2)%2) + { + ModelMatrixName[h-hshift][v-vshift] := kappa*t; + ModelMatrixName[v-vshift][h-hshift] := kappa*t; + } + else + { + ModelMatrixName[h-hshift][v-vshift] := t; + ModelMatrixName[v-vshift][h-hshift] := t; + } + + } + else + { + if (Abs(transition-transition2)%2) + { + ModelMatrixName[h-hshift][v-vshift] := kappa*c*t; + ModelMatrixName[v-vshift][h-hshift] := kappa*c*t; + } + else + { + ModelMatrixName[h-hshift][v-vshift] := c*t; + ModelMatrixName[v-vshift][h-hshift] := c*t; + } + } + } + } + } + } + } + return (modelType>1); +} + +/* ____________________________________________________________________________________________________________________*/ + +function PopulateModelMatrix2 (ModelMatrixName&, EFV) +{ + ModelMatrixName = {ModelMatrixDimension,ModelMatrixDimension}; + + hshift = 0; + + for (h=0; h<64; h=h+1) + { + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + continue; + } + vshift = hshift; + for (v = h+1; v<64; v=v+1) + { + diff = v-h; + if (_Genetic_Code[v]==10) + { + vshift = vshift+1; + continue; + } + if ((h$4==v$4)||((diff%4==0)&&(h$16==v$16))||(diff%16==0)) + { + if (h$4==v$4) + { + transition = v%4; + transition2= h%4; + } + else + { + if(diff%16==0) + { + transition = v$16; + transition2= h$16; + } + else + { + transition = v%16$4; + transition2= h%16$4; + } + } + if (_Genetic_Code[0][h]==_Genetic_Code[0][v]) + { + if (Abs(transition-transition2)%2) + { + ExecuteCommands ("ModelMatrixName[h-hshift][v-vshift] := kappa"+l+"*t;ModelMatrixName[v-vshift][h-hshift] := kappa"+l+"*t;"); + } + else + { + ModelMatrixName[h-hshift][v-vshift] := t; + ModelMatrixName[v-vshift][h-hshift] := t; + } + + } + else + { + if (Abs(transition-transition2)%2) + { + ExecuteCommands ("ModelMatrixName[h-hshift][v-vshift] := c*kappa"+l+"*t;ModelMatrixName[v-vshift][h-hshift] := c*kappa"+l+"*t;"); + } + else + { + ModelMatrixName[h-hshift][v-vshift] := c*t; + ModelMatrixName[v-vshift][h-hshift] := c*t; + } + } + } + } + } + return 1; +} +/* ____________________________________________________________________________________________________________________*/ + +function spawnLikelihood (kappaSharedOrNot) +{ + if (kappaSharedOrNot) + { + for (l=0; l=lowerSeqBound)&&(speciesIndex1)","Beta & (Normal>1)", + "0 & 2 (Normal>1)","0 & 2 (Normal>1)", + "3 Normal","3 Normal", + "RE:Log normal","Random Effects: Log normal", + "RE:Gamma","Random Effects: Gamma", + "RE:Discrete","Random Effects: 3 bin Discrete"); + + if (modelTypes[0]<0) + { + return; + } + for (rateType = 0; rateType < Rows(modelTypes)*Columns(modelTypes); rateType = rateType + 1) + { + modelType = modelTypes[rateType]; + chosenModelList[modelType] = 1; + } +} + +ChoiceList (shareType,"Choose parameter sharing mode",1,SKIP_NONE, + "All","Share dN/dS, transversion/transition ratio (if applicable) and base frequencies for all subsets.", + "dN/dS Only","Share only dN/dS. Transversion/transition ratio (if applicable) and base frequencies are separate for each subset." +); + +if (shareType<0) +{ + return; +} + +ChoiceList (modelType,"Choose a model",1,SKIP_NONE, + "MG94 1x4","Muse-Gaut 94 model with 4(-1) nucleotide frequency parameters (intra-codon position independent).", + "MG94 3x4","Muse-Gaut 94 model with 12(-3) nucleotide frequency parameters (intra-codon position specific).", + "GY94 1x4","Goldman-Yang 94 model with 4(-1) nucleotide frequency parameters (intra-codon position independent).", + "GY94 3x4","Goldman-Yang 94 model with 12(-3) nucleotide frequency parameters (intra-codon position specific)." +); + +if (modelType<0) +{ + return; +} + +if ((modelType==0)||(modelType==2)) +{ + if (shareType==0) + { + HarvestFrequencies (observedFreq,filteredData,1,1,0); + vectorOfFrequencies = BuildCodonFrequencies4 (observedFreq); + } + else + { + for (v=0; v1) +{ + global kappa = 2.; +} + +fprintf (stdout, "\n\n\nChoose the cutoff (0 to 1) for posterior of dN/dS>1 for a site to be considered under selective pressure:"); +fscanf (stdin, "Number",psigLevel); +if ((psigLevel <= 0)||(psigLevel>1)) +{ + psigLevel = .95; +} +fprintf (stdout, "\n>Using ", psigLevel , " cutoff\n"); + +fprintf (stdout, "\nChoose the number of categories in discretized distributions:"); +fscanf (stdin, "Number",categCount); +categCount = categCount$1; +if (categCount<=0) +{ + categCount = 8; +} + +fprintf (stdout, "\n>Using ", Format (categCount,0,0), " categories.\n"); + +SetDialogPrompt ("Write detailed results to:"); + +fprintf (PROMPT_FOR_FILE,CLEAR_FILE); + +global c = 1.; + +dummyVar = FrameText ("-","|",2,"SUMMARY TABLE"); +tableSeparator = "+-------------------------+----------------+---------------+-----+\n"; +fprintf (stdout, "\n\"p\" is the number of parameters in addition to the branch lengths.\nDetailed results including sites with dN/dS>1 will be written to\n",LAST_FILE_PATH,"\n\n"); +fprintf (stdout, tableSeparator, + "| MODEL (Number & Desc) | Log likelihood | dN/dS | p |\n", + tableSeparator); + +cachedBranchLengths = {{-1,-1}}; + +if (chosenModelList[0]>0) +{ + timer = Time(1); + fprintf (LAST_FILE_PATH,"\n*** RUNNING SINGLE RATE MODEL ***\n#################################\n"); + dummy = spawnLikelihood (shareType); + Optimize (res,lf); + fprintf (LAST_FILE_PATH,"\n>Done in ", Time(1)-timer, " seconds \n\n"); + fprintf (LAST_FILE_PATH,lf,"\n\n-----------------------------------\n\ndN/dS = ",c,"\n\n"); + + fprintf (stdout, "| 0. Single Rate Model | ",Format (res[1][0],14,6)," | ",Format (c,13,8)," | 0 |\n", + tableSeparator); + + timer = res[1][1]-res[1][2]; + cachedBranchLengths = {timer,1}; + + for (rateType = timer; rateType < Columns(cachedBranchLengths); rateType = rateType+1) + { + cachedBranchLengths[rateType-timer][0] = res [0][rateType]; + } +} + +for (rateType = 0; rateType < 16; rateType = rateType + 1) +{ + if (chosenModelList[rateType+1]==0) + { + continue; + } + timer = Time(1); + dummy = SetWDistribution (categCount); + dummy = spawnLikelihood (shareType); + + fprintf (LAST_FILE_PATH,"\n*** RUNNING MODEL ", Format(rateType+1,0,0), " (",ModelNames[rateType],") ***\n######################################\n"); + /*if (cachedBranchLengths[0][0]>=0.0) + { + v = ParameterCount[rateType]; + if (modelType>1) + { + v=v+1; + } + for (h=0; hDone in ",Time(1)-timer, " seconds \n\n", lf); + fprintf (stdout, "| "); + if (rateType<9) + { + fprintf (stdout," "); + } + fprintf (stdout, Format (rateType+1,0,0), ". ", ModelNames[rateType]); + for (dummy = Abs(ModelNames[rateType])+5; dummy<25; dummy = dummy+1) + { + fprintf (stdout," "); + } + dummy = GetDistributionParameters(psigLevel); + fprintf (stdout,"| ",Format (res[1][0],14,6)," | ",Format (dummy,13,8)," | ", + Format(ParameterCount[rateType],0,0)," |\n",tableSeparator); + + if (modelType>1) + { + kappa = 2.; + } +} diff --git a/samples/HyPhy/MatrixIndexing.bf b/samples/HyPhy/MatrixIndexing.bf new file mode 100755 index 00000000..aa1344d4 --- /dev/null +++ b/samples/HyPhy/MatrixIndexing.bf @@ -0,0 +1 @@ +fprintf (stdout, "\n1). Spawning a zero-populated 5x6 matrix and setting it's values to random numbers in [0,1].\n"); aMatrix = {5,6}; aMatrix = aMatrix ["Random(0,1)"]; fprintf (stdout, aMatrix, "\n"); fprintf (stdout, "\n2). Accessing a second-row third-column element and a random element.\n\n"); r = Random (0, Rows(aMatrix))$1; c = Random (0, Columns(aMatrix))$1; fprintf (stdout, "matrix[1][2]=", aMatrix[1][2], "\nmatrix[", r , "][" , c, "]=", aMatrix[r][c], "\n"); fprintf (stdout, "\n3). Accessing the fourth row.\n\n"); fprintf (stdout, "matrix[3][-1]=\n", aMatrix[3][-1],"\n"); fprintf (stdout, "\n4). Accessing the first column.\n\n"); fprintf (stdout, "matrix[-1][0]=\n", aMatrix[-1][0],"\n"); fprintf (stdout, "\n5). Populating a matrix template (below the diagonal).\n\n"); template={5,6}; template=template["_MATRIX_ELEMENT_ROW_>_MATRIX_ELEMENT_COLUMN_"]; fprintf (stdout, template ,"\n"); fprintf (stdout, "\n6). Extracting (by row) matrix elements using the template.\n\n"); fprintf (stdout, aMatrix[template] ,"\n"); fprintf (stdout, "\n7). Extracting a submatrix: top left corner at (1,1) - bottom right corner at (3,2).\n\n"); fprintf (stdout, "matrix[{{1,1}}][{{3,2}}]=\n", aMatrix[{{1,1}}][{{3,2}}],"\n"); fprintf (stdout, "\n8). Returning a matrix in which all elements are squared and above diagonal elements are further increased by 1.\n\n"); fprintf (stdout, "\n", aMatrix["_MATRIX_ELEMENT_VALUE_^2+(_MATRIX_ELEMENT_ROW_<_MATRIX_ELEMENT_COLUMN_)"],"\n"); \ No newline at end of file diff --git a/samples/HyPhy/MolecularClock.bf b/samples/HyPhy/MolecularClock.bf new file mode 100644 index 00000000..92606d2d --- /dev/null +++ b/samples/HyPhy/MolecularClock.bf @@ -0,0 +1,147 @@ +#include "molclockBootstrap.bf"; + +RESTORE_GLOBALS = 1; +_DO_TREE_REBALANCE_ = 0; +VERBOSITY_LEVEL = -1; + +function RestoreGlobalValues (lfIndex) +{ + if (lfIndex==0) + { + for (i=0;i1) +{ + ChoiceList (parameter2Constrain, "Parameter(s) to constrain:",1,SKIP_NONE,LAST_MODEL_PARAMETER_LIST); + + if (parameter2Constrain<0) + { + return; + } + if (parameter2Constrain==0) + { + parameter2ConstrainString = ""; + for (parameter2Constrain=Rows("LAST_MODEL_PARAMETER_LIST")-1; parameter2Constrain; parameter2Constrain = parameter2Constrain-1) + { + GetString (funnyString,LAST_MODEL_PARAMETER_LIST,parameter2Constrain); + parameter2ConstrainString = parameter2ConstrainString + funnyString + ","; + } + GetString (funnyString,LAST_MODEL_PARAMETER_LIST,0); + parameter2ConstrainString = parameter2ConstrainString + funnyString; + } + else + { + GetString (parameter2ConstrainString,LAST_MODEL_PARAMETER_LIST,parameter2Constrain-1); + } +} +else +{ + GetString (parameter2ConstrainString,LAST_MODEL_PARAMETER_LIST,0); +} + +timer = Time(0); + +LikelihoodFunction lf = (filteredData,givenTree); + +Optimize (res,lf); + +separator = "*-----------------------------------------------------------*"; + +fprintf (stdout, "\n", separator, "\nRESULTS WITHOUT THE CLOCK:\n",lf); + +fullModelLik = res[1][0]; + +fullVars = res[1][1]; + +/* now specify the constraint */ + +Tree clockTree = treeString; + +ExecuteCommands ("MolecularClock (clockTree,"+parameter2ConstrainString+");"); + +LikelihoodFunction lfConstrained = (filteredData, clockTree); + +USE_LAST_RESULTS = 1; +Optimize (res1,lfConstrained); +USE_LAST_RESULTS = 0; + +SAVE_GLOBALS = res1[1][2]; + +if (SAVE_GLOBALS) +{ + globalSpoolMatrix = {1,SAVE_GLOBALS}; + + for (i=0;idS in the data sets? + - Do the sites under positive selection share the same dN/dS? + - Two previous tests combined +*/ + +RequireVersion ("0.9920061001"); + +/*---------------------------------------------------------------------------------------------------------------------------------------------------*/ + +function BuildCodonFrequencies (obsF) +{ + PIStop = 1.0; + result = {ModelMatrixDimension,1}; + hshift = 0; + + for (h=0; h<64; h=h+1) + { + first = h$16; + second = h%16$4; + third = h%4; + if (_Genetic_Code[h]==10) + { + hshift = hshift+1; + PIStop = PIStop-obsF[first][0]*obsF[second][1]*obsF[third][2]; + continue; + } + result[h-hshift][0]=obsF[first][0]*obsF[second][1]*obsF[third][2]; + } + return result*(1.0/PIStop); +} + +/*---------------------------------------------------------------------------------------------------------------------------------------------------*/ + +function ReportDistributionString (rc,freqStrMx,infix, skip0) +{ + distroString = ""; + distroString * 1024; + + reportMx = {rc,4}; + + distroString * (" dN/dS dS dN Prob\n"); + for (mi=0; mi 0) + { + distroString * (Format(reportMx[mi][2],8,3)+Format(reportMx[mi][0],8,3)+Format(reportMx[mi][1],8,3)+Format(reportMx[mi][3],10,3)+"\n"); + } + } + + distroString * 0; + return distroString; +} + +/*---------------------------------------------------------------------------------------------------------------------------------------------------*/ + +function DefineNucleotideBiases (dummy) +{ + ModelTitle = "MG94x"+modelDesc[0]; + modelConstraintString = ""; + + for (customLoopCounter2=0; customLoopCounter2<6; customLoopCounter2=customLoopCounter2+1) + { + if (rateBiasTerms[customLoopCounter2] != "1") + { + ExecuteCommands ("global " + rateBiasTerms[customLoopCounter2] + "=1;"); + } + } + + for (customLoopCounter2=1; customLoopCounter2<6; customLoopCounter2=customLoopCounter2+1) + { + for (customLoopCounter=0; customLoopCounter0.0000001;global NS_"+infix+"0 = 0.1;"); + + for (mi=1; mi0.0000001;\nglobal NS_"+infix+mi+";\n"); + if (randomizeInitValues) + { + categDef1*("global P_"+infix+mi+" = Random(0.05,0.95);\nP_"+infix+mi+":<1;\n"); + categDef1*("global S_"+infix+mi+" = Random(0.05,1);"); + } + else + { + categDef1*("global P_"+infix+mi+" = 1/"+(resp+1-mi)+";\nP_"+infix+mi+":<1;\n"); + } + } + + freqStrMx = {resp,1}; + if (resp>1) + { + freqStrMx[0] = "P_"+infix+"1"; + + for (mi=1; mi1;R_"+infix+mi+"="+Random(1.05,10)+";"); + } + } + else + { + for (mi=respN+respP; mi1;R_"+infix+mi+"=2+"+mi+";"); + } + } + } + else + { + if (randomizeInitValues) + { + for (mi=0; mi 1) + { + lfParts = lfParts + ",filteredData_" + fileID + "," + treeID; + } + } +} + +lfParts * 0; +ExecuteCommands (lfParts + "," + lfDef1 + ");"); + +sumPath = resToPath + ".summary"; + +treeBranchParameters = 0; +for (fileID = 1; fileID <= fileCount; fileID = fileID + 1) +{ + ExecuteCommands ("treeBranchParameters = treeBranchParameters + BranchCount(tree_" + fileID + "_0) + TipCount(tree_" + fileID + "_0);"); +} + +/*-------------- INDEPENDENT DISTRIBUTIONS ------------------*/ + +sop = Max(OPTIMIZATION_PRECISION,0.001); + +fprintf (stdout, "Running simpler distribution approximations to ensure good convergence...\n"); + +OPTIMIZATION_PRECISION = 0.1; + +P_1_1 := 0;P_1_2 := 0;P_1_3 := 0; +P_2_1 := 0;P_2_2 := 0;P_2_3 := 0; + +S_1_0 := 1;S_1_1 := 1;S_1_2 := 1;S_1_3 := 1; +S_2_0 := 1;S_2_1 := 1;S_2_2 := 1;S_2_3 := 1; +R_1_0 := 1;R_1_1 := 1;R_1_2 := 1; +R_2_0 := 1;R_2_1 := 1;R_2_2 := 1; + +Optimize (res,lf); +USE_LAST_RESULTS = 1; +SKIP_CONJUGATE_GRADIENT = 1; + +d1 = ReportDistributionString(4,freqStrMx_1,"1_",1); +d2 = ReportDistributionString(4,freqStrMx_2,"2_",1); + +fprintf (stdout, "\n*** Done with pass 1. Log(L) = ", Format(res[1][0],10,3), " *** \n"); +fprintf (stdout, "Approximate rates for data set 1:\n", d1); +fprintf (stdout, "Approximate rates for data set 2:\n", d2); + +codonFactor_1 := codonFactor_1__; +codonFactor_2 := codonFactor_2__; + +AC_1 := AC_1__; AT_1 := AT_1__; CG_1 := CG_1__; CT_1 := CT_1__; GT_1 := GT_1__; +AC_2 := AC_2__; AT_2 := AT_2__; CG_2 := CG_2__; CT_2 := CT_2__; GT_2 := GT_2__; + + + +fprintf (stdout, "\nGateaux sampling positively selected directions\n"); + +P_1_1 = 2/filteredData_1.sites; +S_1_3 = 1; + +baseLineLL = res[1][0]; +LFCompute (lf,LF_START_COMPUTE); +bestDiff = -1e100; +bestAlpha = 1; +bestBeta = 1; +bestLL = -1e100; + +step = 0.1; +step2 = 0.25; +v1 = 0.05; + +for (v1c = 0; v1c < 10; v1c = v1c + 1) +{ + v2 = v1+step; + for (v2c = 0; v2c < 20; v2c = v2c+1) + { + checkASample ("1_0"); + v2 = v2 + step2; + } + v1 = v1+step; +} + +S_1_0 = bestAlpha; +R_1_0 = bestBeta; +bestAlpha = 1; +bestBeta = 1; + +if (bestDiff <= 0) +{ + P_1_1 = 0; +} +saveBD = bestDiff; + +P_2_1 = 1/filteredData_2.sites; +S_2_3 = 1; + +v1 = 0.05; +for (v1c = 0; v1c < 10; v1c = v1c + 1) +{ + v2 = v1+step; + for (v2c = 0; v2c < 20; v2c = v2c+1) + { + checkASample ("2_0"); + v2 = v2 + step2; + } + v1 = v1+step; +} + +LFCompute (lf,LF_DONE_COMPUTE); + +S_2_0 = bestAlpha; +R_2_0 = bestBeta; + +if (bestDiff <= saveBD) +{ + P_2_1 = 0; +} + +if (bestDiff > 0) +{ + fprintf (stdout, "\nFound a likelihood improvement in the direction (", S_1_0, ",", S_1_0*R_1_0, "), (", S_2_0, ",", S_2_0*R_2_0, "), ",bestDiff," likelihood points\n"); +} + + +Optimize (res,lf); + +d1 = ReportDistributionString(4,freqStrMx_1,"1_",1); +d2 = ReportDistributionString(4,freqStrMx_2,"2_",1); + +fprintf (stdout, "\n*** Done with pass 2. Log(L) = ", Format(res[1][0],10,3), " *** \n"); +fprintf (stdout, "Approximate rates for data set 1:\n", d1); +fprintf (stdout, "Approximate rates for data set 2:\n", d2); + + +fprintf (stdout, "\nGateaux sampling neutral directions\n"); + +baseLineLL = res[1][0]; +LFCompute (lf,LF_START_COMPUTE); + +P_1_2 = 1/(filteredData_1.sites*(1-P_1_1)); +bestDiff = -1e100; +bestAlpha = 1; +step = 0.02; +v1 = 0; +for (v1c = 0; v1c < 50; v1c = v1c + 1) +{ + v1 = v1 + step; + v2 = v1; + + checkASample ("1_1"); +} + + +S_1_1 = bestAlpha; +bestAlpha = 1; + +if (bestDiff <= 0) +{ + P_1_2 = 0; +} +saveBD = bestDiff; +R_1_1 := 1; + +P_2_2 = 1/(filteredData_2.sites*(1-P_2_1)); + +v1 = 0; +for (v1c = 0; v1c < 50; v1c = v1c + 1) +{ + v1 = v1 + step; + v2 = v1; + + checkASample ("2_1"); +} + + +LFCompute (lf,LF_DONE_COMPUTE); + +S_2_1 = bestAlpha; +R_2_1 := 1; + +if (bestDiff <= saveBD) +{ + P_2_2 = 0; +} + +if (bestDiff > 0) +{ + fprintf (stdout, "\nFound a likelihood improvement in the direction (", S_1_1, ",", S_1_1, "), (", S_2_1, ",", S_2_1, "), ",bestDiff," likelihood points\n"); +} + +Optimize (res,lf); +d1 = ReportDistributionString(4,freqStrMx_1,"1_",1); +d2 = ReportDistributionString(4,freqStrMx_2,"2_",1); + +fprintf (stdout, "\n*** Done with pass 3. Log(L) = ", Format(res[1][0],10,3), " *** \n"); +fprintf (stdout, "Approximate rates for data set 1:\n", d1); +fprintf (stdout, "Approximate rates for data set 2:\n", d2); + +fprintf (stdout, "\nGateaux sampling negative selected directions\n"); + + +baseLineLL = res[1][0]; +LFCompute (lf,LF_START_COMPUTE); +bestDiff = -1e100; +bestAlpha = 1; +bestBeta = 1; + + +step = 1/16; +v1 = 0; +P_1_3 = 2/(filteredData_1.sites*(1-P_1_1)*(1-P_1_2)); +S_1_2 = 1; +for (v1c = 0; v1c < 15; v1c = v1c + 1) +{ + v1 = v1+step; + v2 = step/2; + for (v2c = 0; v2c < v1c; v2c = v2c+1) + { + checkASample ("1_2"); + v2 = v2 + step; + } +} + + +S_1_2 = bestAlpha; +R_1_2 = bestBeta; +bestAlpha = 1; +bestBeta = 1; + +if (bestDiff <= 0) +{ + P_1_3 = 0; +} +saveBD = bestDiff; + + +v1 = 0; +P_2_3 = 2/(filteredData_2.sites*(1-P_2_1)*(1-P_2_2)); +S_2_2 = 1; +for (v1c = 0; v1c < 15; v1c = v1c + 1) +{ + v1 = v1+step; + v2 = step/2; + for (v2c = 0; v2c < v1c; v2c = v2c+1) + { + checkASample ("2_2"); + v2 = v2 + step; + } +} + +LFCompute (lf,LF_DONE_COMPUTE); + +S_2_2 = bestAlpha; +R_2_2 = bestBeta; + +if (bestDiff <= saveBD) +{ + P_2_2 = 0; +} + +if (bestDiff > 0) +{ + fprintf (stdout, "\nFound a likelihood improvement in the direction (", S_1_2, ",", S_1_2*R_1_2, "), (", S_2_2, ",", S_2_2*R_2_2, "), ",bestDiff," likelihood points\n"); +} + +AC_1 = AC_1; AT_1 = AT_1; CG_1 = CG_1; CT_1 = CT_1; GT_1 = GT_1; +AC_2 = AC_2; AT_2 = AT_2; CG_2 = CG_2; CT_2 = CT_2; GT_2 = GT_2; + +if (Abs(modelConstraintString_1)) +{ + ExecuteCommands (modelConstraintString_1); +} +if (Abs(modelConstraintString_2)) +{ + ExecuteCommands (modelConstraintString_2); +} + +codonFactor_1 = codonFactor_1; +codonFactor_2 = codonFactor_2; + + +GetString (paramList, lf, -1); +degF = Columns(paramList["Global Independent"]) + 14 - 2*branchLengths + treeBranchParameters; + +OPTIMIZATION_PRECISION = sop; +fprintf (stdout, "Running an independent distributions model fit (", degF, " parameters)...\n"); +Optimize (res,lf); +LogL = res[1][0]; + +AIC = 2*(degF-LogL); +AICc = 2*(degF*totalCodonCount/(totalCodonCount-degF-1) - LogL); + +fprintf (stdout, "\n\nIndependent distributions model fit summary\n", + "\nLog likelihood:", Format (LogL, 15, 5), + "\nParameters :", Format (degF, 15, 0), + "\nAIC :", Format (AIC, 15, 5), + "\nc-AIC :", Format (AICc, 15, 5),"\n" +); + +fprintf (sumPath,CLEAR_FILE,"Independent distributions model fit summary\n", + "\nLog likelihood:", Format (LogL, 15, 5), + "\nParameters :", Format (degF, 15, 0), + "\nAIC :", Format (AIC, 15, 5), + "\nc-AIC :", Format (AICc, 15, 5),"\n"); + +d1 = ReportDistributionString(4,freqStrMx_1,"1_",0); +d2 = ReportDistributionString(4,freqStrMx_2,"2_",0); + +fprintf (stdout, "Inferred rates for data set 1:\n", d1); +fprintf (sumPath, "Inferred rates for data set 1:\n", d1); +fprintf (stdout, "Inferred rates for data set 2:\n", d2); +fprintf (sumPath, "Inferred rates for data set 2:\n", d2); + +LIKELIHOOD_FUNCTION_OUTPUT = 6; +fprintf (resToPath,CLEAR_FILE,lf); + + +/*-------------- SHARED POSITIVE SELECTION STRENGTHS ------------------*/ + +for (k=0; k=respP+respN) + { + ExecuteCommands ("R_1_"+k+"=0.5(R_1_"+k+"+R_2_"+k+");"); + } + ExecuteCommands ("S_2_"+k+":=S_1_"+k+";R_2_"+k+":=R_1_"+k+";"); +} +for (k=1; k<=resp; k=k+1) +{ + ExecuteCommands ("P_1_"+k+"=0.5(P_1_"+k+"+P_2_"+k+");"); + ExecuteCommands ("P_2_"+k+":=P_1_"+k+";"); +} + +GetString (paramList, lf, -1); +degFJ = Columns(paramList["Global Independent"]) + 14 - 2*branchLengths + treeBranchParameters; +fprintf (stdout, "\nRunning a shared distributions model fit (", degFJ, " parameters)...\n"); + +Optimize (res_J,lf); +LogLJ = res_J[1][0]; + +AICJ = 2*(degFJ-LogLJ); +AICcJ = 2*(degFJ*totalCodonCount/(totalCodonCount-degFJ-1) - LogLJ); + +fprintf (stdout, "\n\nShared distributions model fit summary\n", + "\nLog likelihood:", Format (LogLJ, 15, 5), + "\nParameters :", Format (degFJ, 15, 0), + "\nAIC :", Format (AICJ, 15, 5), + "\nc-AIC :", Format (AICcJ, 15, 5),"\n" +); + +fprintf (sumPath, "\n\nShared distributions model fit summary\n", + "\nLog likelihood:", Format (LogLJ, 15, 5), + "\nParameters :", Format (degFJ, 15, 0), + "\nAIC :", Format (AICJ, 15, 5), + "\nc-AIC :", Format (AICcJ, 15, 5),"\n" +); + +d1 = ReportDistributionString(4,freqStrMx_1,"1_",0); + +fprintf (stdout, "Inferred joint rates:\n", d1); +fprintf (sumPath, "Inferred joint rates:\n", d1); + +fpath = resToPath + ".JointAll"; +LIKELIHOOD_FUNCTION_OUTPUT = 6; +fprintf (fpath,CLEAR_FILE,lf); + +USE_LAST_RESULTS = 0; +SKIP_CONJUGATE_GRADIENT = 0; +LIKELIHOOD_FUNCTION_OUTPUT = 2; + +fprintf (stdout, "\nDistribution comparison tests\n", + "\n\tAre the distributions different?", + "\n\t\tLR = ", Format (2*(LogL-LogLJ),10,3), + " DF = ", degF-degFJ, + " p = ", Format(1-CChi2(2*(LogL-LogLJ), degF-degFJ),8,3), "\n"); + +fprintf (stdout, "\n\tAre selective regimes (dN/dS and proportions) different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSH),10,3), + " DF = ", degF-degFPSH, + " p = ", Format(1-CChi2(2*(LogL-LogLPSH), degF-degFPSH),8,3), "\n"); + +fprintf (stdout, "\n\tAre selection strengths (dN/dS) different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSS),10,3), + " DF = ", degF-degFPSS, + " p = ", Format(1-CChi2(2*(LogL-LogLPSS), degF-degFPSH),8,3), "\n"); + +fprintf (stdout, "\n\tAre the proportions of codons under selection different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSP),10,3), + " DF = ", degF-degFPSP, + " p = ", Format(1-CChi2(2*(LogL-LogLPSP), degF-degFPSP),8,3), "\n"); + +fprintf (sumPath, "\n\nDistribution comparison tests\n", + "\n\tAre the distributions different?", + "\n\t\tLR = ", Format (2*(LogL-LogLJ),10,3), + " DF = ", degF-degFJ, + " p = ", Format(1-CChi2(2*(LogL-LogLJ), degF-degFJ),8,3), "\n"); + +fprintf (sumPath, "\n\tAre selective regimes (dN/dS and proportions) different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSH),10,3), + " DF = ", degF-degFPSH, + " p = ", Format(1-CChi2(2*(LogL-LogLPSH), degF-degFPSH),8,3), "\n"); + +fprintf (sumPath, "\n\tAre selection strengths (dN/dS) different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSS),10,3), + " DF = ", degF-degFPSS, + " p = ", Format(1-CChi2(2*(LogL-LogLPSS), degF-degFPSH),8,3), "\n"); + +fprintf (sumPath, "\n\tAre the proportions of codons under selection different?", + "\n\t\tLR = ", Format (2*(LogL-LogLPSP),10,3), + " DF = ", degF-degFPSP, + " p = ", Format(1-CChi2(2*(LogL-LogLPSP), degF-degFPSP),8,3), "\n"); +/*------------------------------------------------------------------------------------------------------------*/ + +function checkASample (whichRate) +{ + ExecuteCommands ("S_"+whichRate+"=v1;R_"+whichRate+"=v2/v1;"); + LFCompute (lf,res_n); + localDiff = res_n-baseLineLL; + if (localDiff > bestDiff) + { + bestDiff = localDiff; + bestAlpha = v1; + bestBeta = v2/v1; + } + return 0; +} diff --git a/samples/HyPhy/hyphy_cmds.bf b/samples/HyPhy/hyphy_cmds.bf new file mode 100644 index 00000000..7a2189f9 --- /dev/null +++ b/samples/HyPhy/hyphy_cmds.bf @@ -0,0 +1,11003 @@ +INTEGRATION_PRECISION_FACTOR = 5.0e-6; +END_OF_FILE = 0; +LIKELIHOOD_FUNCTION_OUTPUT = 5; +ACCEPT_BRANCH_LENGTHS = 1; +#include "/home/oashenbe/.local/lib/python2.7/site-packages/phyloExpCM/data//NTsCodonsAAs.ibf"; +fprintf(stdout, "Running HYPHY script hyphy_cmds.bf...\n"); +DataSet data = ReadDataFile("_codenames_Aligned_NPs_Swine.fasta"); +assert(data.sites % 3 == 0, "Sequence lengths not multiples of 3"); +totalcodons = data.sites $ 3; +fprintf(stdout, "Read from _codenames_Aligned_NPs_Swine.fasta a set of ", data.species, " sequences consisting of ", data.sites, " nucleotides corresponding to ", totalcodons, " codons each.\n"); +fprintf(stdout, "The analysis will include the following 498 codon positions (sequential numbering starting with 1):\n1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498\n"); +assert(totalcodons >= 498, "Largest included site exceeds sequence length"); +DataSetFilter codonfilter = CreateFilter(data, 3, "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333,334,335,336,337,338,339,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,375,376,377,378,379,380,381,382,383,384,385,386,387,388,389,390,391,392,393,394,395,396,397,398,399,400,401,402,403,404,405,406,407,408,409,410,411,412,413,414,415,416,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513,514,515,516,517,518,519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534,535,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,601,602,603,604,605,606,607,608,609,610,611,612,613,614,615,616,617,618,619,620,621,622,623,624,625,626,627,628,629,630,631,632,633,634,635,636,637,638,639,640,641,642,643,644,645,646,647,648,649,650,651,652,653,654,655,656,657,658,659,660,661,662,663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680,681,682,683,684,685,686,687,688,689,690,691,692,693,694,695,696,697,698,699,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,719,720,721,722,723,724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739,740,741,742,743,744,745,746,747,748,749,750,751,752,753,754,755,756,757,758,759,760,761,762,763,764,765,766,767,768,769,770,771,772,773,774,775,776,777,778,779,780,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,956,957,958,959,960,961,962,963,964,965,966,967,968,969,970,971,972,973,974,975,976,977,978,979,980,981,982,983,984,985,986,987,988,989,990,991,992,993,994,995,996,997,998,999,1000,1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1011,1012,1013,1014,1015,1016,1017,1018,1019,1020,1021,1022,1023,1024,1025,1026,1027,1028,1029,1030,1031,1032,1033,1034,1035,1036,1037,1038,1039,1040,1041,1042,1043,1044,1045,1046,1047,1048,1049,1050,1051,1052,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1072,1073,1074,1075,1076,1077,1078,1079,1080,1081,1082,1083,1084,1085,1086,1087,1088,1089,1090,1091,1092,1093,1094,1095,1096,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1108,1109,1110,1111,1112,1113,1114,1115,1116,1117,1118,1119,1120,1121,1122,1123,1124,1125,1126,1127,1128,1129,1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163,1164,1165,1166,1167,1168,1169,1170,1171,1172,1173,1174,1175,1176,1177,1178,1179,1180,1181,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279,1280,1281,1282,1283,1284,1285,1286,1287,1288,1289,1290,1291,1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303,1304,1305,1306,1307,1308,1309,1310,1311,1312,1313,1314,1315,1316,1317,1318,1319,1320,1321,1322,1323,1324,1325,1326,1327,1328,1329,1330,1331,1332,1333,1334,1335,1336,1337,1338,1339,1340,1341,1342,1343,1344,1345,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1363,1364,1365,1366,1367,1368,1369,1370,1371,1372,1373,1374,1375,1376,1377,1378,1379,1380,1381,1382,1383,1384,1385,1386,1387,1388,1389,1390,1391,1392,1393,1394,1395,1396,1397,1398,1399,1400,1401,1402,1403,1404,1405,1406,1407,1408,1409,1410,1411,1412,1413,1414,1415,1416,1417,1418,1419,1420,1421,1422,1423,1424,1425,1426,1427,1428,1429,1430,1431,1432,1433,1434,1435,1436,1437,1438,1439,1440,1441,1442,1443,1444,1445,1446,1447,1448,1449,1450,1451,1452,1453,1454,1455,1456,1457,1458,1459,1460,1461,1462,1463,1464,1465,1466,1467,1468,1469,1470,1471,1472,1473,1474,1475,1476,1477,1478,1479,1480,1481,1482,1483,1484,1485,1486,1487,1488,1489,1490,1491,1492,1493", "", "TAA,TAG,TGA"); +assert(data.species == codonfilter.species, "species number mismatch"); +assert(codonfilter.sites == 498, "Codon filtered data does not contain the right number of sites"); +fprintf(stdout, "Created a codon filter of ", codonfilter.sites, " sites.\n"); +assert(totalcodons - (totalcodons - 498) - 0 == codonfilter.sites, "Codon filtered data is not the expected length. Do sequences contain stop codons?"); +CheckCodonFilter("codonfilter"); +fprintf(stdout, "Reading tree string from _codenames_codonphyml_Swine_tree.newick.\n"); +fscanf("_codenames_codonphyml_Swine_tree.newick", String, treestring); +fprintf(stdout, "Using the Goldman Yang 1994 (GY94) codon model...\n"); +#include "/home/oashenbe/.local/lib/python2.7/site-packages/phyloExpCM/data//CF3x4.ibf"; +#include "/home/oashenbe/.local/lib/python2.7/site-packages/phyloExpCM/data//GY94.ibf"; +CreateGY94Model("CF3x4", "global", "global", 4, 4, 1); +UseModel(model); +ExecuteCommands("Tree tree = treestring;") +assert(codonfilter.species == TipCount(tree), "Number of species and number of tips differ"); +LikelihoodFunction likelihood = (codonfilter, tree); +fprintf(stdout, "\nNow optimizing the likelihood function...\n"); +Optimize(mlestimates, likelihood) +fprintf(stdout, "Completed likelihood optimization. Optimized ", mlestimates[1][1], " indpendent parameters and ", mlestimates[1][2], " shared parameters to obtain a log likelihood of ", mlestimates[1][0], ".\n"); +fprintf(stdout, "Writing the results to hyphy_output.txt.\n"); +fprintf("hyphy_output.txt", "Log likelihood: ", mlestimates[1][0], "\nindependent parameters (includes branch lengths): ", mlestimates[1][1], "\nshared parameters: ", mlestimates[1][2], "\nnumber of branch lengths: ", TipCount(tree) + BranchCount(tree), "\nnumber of tip nodes: ", TipCount(tree), "\nnumber of internal branches: ", BranchCount(tree), "\n",likelihood); +fprintf(stdout, "\nNow computing per-site likelihoods.\n"); +fprintf(stdout, "\nFirst fixing all global variables to the maximum-likelihood values estimated on the entire tree.\n"); +GetString(associativearray, likelihood, -1); +globalindependentvariables = associativearray["Global Independent"]; +for (ivariable=0; ivariable * + * All rights reserved. * + * * + * License: BSD * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +package jflex; + +import java_cup.runtime.Symbol; +import java.io.*; +import java.util.Stack; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import jflex.unicode.UnicodeProperties; + +%% + +%final +%public +%class LexScan +%implements sym, java_cup.runtime.Scanner +%function next_token + +%type Symbol +%unicode + +%column +%line + +%eofclose + +%state COMMENT, STATELIST, MACROS, REGEXPSTART +%state REGEXP, JAVA_CODE, STATES, STRING_CONTENT +%state CHARCLASS, COPY, REPEATEXP, EATWSPNL +%state CTOR_ARG, REGEXP_CODEPOINT_SEQUENCE +%state STRING_CODEPOINT_SEQUENCE, CHARCLASS_CODEPOINT + +%inputstreamctor false + +%cupdebug + +%{ + int balance = 0; + int commentbalance = 0; + int action_line = 0; + int bufferSize = 16384; + + File file; + Stack files = new Stack(); + + StringBuilder userCode = new StringBuilder(); + + String classCode; + String initCode; + String initThrow; + String eofCode; + String eofThrow; + String lexThrow; + String eofVal; + String scanErrorException; + String cupSymbol = "sym"; + + StringBuilder actionText = new StringBuilder(); + StringBuilder string = new StringBuilder(); + + private UnicodeProperties unicodeProperties; + + boolean charCount; + boolean lineCount; + boolean columnCount; + boolean cupCompatible; + boolean cup2Compatible; + boolean cupDebug; + boolean isInteger; + boolean isIntWrap; + boolean isYYEOF; + boolean notUnix; + boolean isPublic; + boolean isFinal; + boolean isAbstract; + boolean bolUsed; + boolean standalone; + boolean debugOption; + boolean caseless; + boolean inclusive_states; + boolean eofclose; + boolean isASCII; + // TODO: In the version of JFlex after 1.6, the InputStream ctor + // TODO: will never be emitted, and this option will cease to exist. + boolean emitInputStreamCtor = Options.emitInputStreamCtor; + + String isImplementing; + String isExtending; + String className = "Yylex"; + String functionName; + String tokenType; + String visibility = "public"; + + List ctorArgs = new ArrayList(); + List ctorTypes = new ArrayList(); + + LexicalStates states = new LexicalStates(); + + List actions = new ArrayList(); + + private int nextState; + + boolean macroDefinition; + + Timer t = new Timer(); + + // CharClasses.init() is delayed until UnicodeProperties.init() has been called, + // since the max char code won't be known until then. + private CharClasses charClasses = new CharClasses(); + + public CharClasses getCharClasses() { + return charClasses; + } + + public int currentLine() { + return yyline; + } + + public void setFile(File file) { + this.file = file; + } + + private Symbol symbol(int type, Object value) { + return new Symbol(type, yyline, yycolumn, value); + } + + private Symbol symbol(int type) { + return new Symbol(type, yyline, yycolumn); + } + + // updates line and column count to the beginning of the first + // non whitespace character in yytext, but leaves yyline+yycolumn + // untouched + private Symbol symbol_countUpdate(int type, Object value) { + int lc = yyline; + int cc = yycolumn; + String text = yytext(); + + for (int i=0; i < text.length(); i++) { + char c = text.charAt(i); + + if (c != '\n' && c != '\r' && c != ' ' && c != '\t' ) + return new Symbol(type, lc, cc, value); + + if (c == '\n') { + lc++; + cc = 0; + } + else + cc++; + } + + return new Symbol(type, yyline, yycolumn, value); + } + + private String makeMacroIdent() { + String matched = yytext().trim(); + return matched.substring(1, matched.length()-1).trim(); + } + + public static String conc(Object a, Object b) { + if (a == null && b == null) return null; + if (a == null) return b.toString(); + if (b == null) return a.toString(); + + return a.toString()+b.toString(); + } + + public static String concExc(Object a, Object b) { + if (a == null && b == null) return null; + if (a == null) return b.toString(); + if (b == null) return a.toString(); + + return a.toString()+", "+b.toString(); + } + + public UnicodeProperties getUnicodeProperties() { + return unicodeProperties; + } + + private void populateDefaultVersionUnicodeProperties() { + try { + unicodeProperties = new UnicodeProperties(); + } catch (UnicodeProperties.UnsupportedUnicodeVersionException e) { + throw new ScannerException + (file, ErrorMessages.UNSUPPORTED_UNICODE_VERSION, yyline); + } + charClasses.init + (Options.jlex ? 127 : unicodeProperties.getMaximumCodePoint(), this); + } + + private void includeFile(String filePath) { + File f = new File(file.getParentFile(), filePath); + if ( !f.canRead() ) + throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline); + // check for cycle + if (files.search(f) > 0) + throw new ScannerException(file,ErrorMessages.FILE_CYCLE, yyline); + try { + yypushStream( new FileReader(f) ); + files.push(file); + file = f; + Out.println("Including \""+file+"\""); + } + catch (FileNotFoundException e) { + throw new ScannerException(file,ErrorMessages.NOT_READABLE, yyline); + } + } +%} + +%init{ + states.insert("YYINITIAL", true); +%init} + + +Digit = [0-9] +HexDigit = [0-9a-fA-F] +OctDigit = [0-7] + +Number = {Digit}+ +HexNumber = \\ x {HexDigit} {2} +OctNumber = \\ [0-3]? {OctDigit} {1, 2} + +// Unicode4 can encode chars only in the BMP with the 16 bits provided by its +// 4 hex digits. +Unicode4 = \\ u {HexDigit} {4} + +// Unicode6 can encode all Unicode chars, both in the BMP and in the +// supplementary planes -- only 21 bits are required as of Unicode 5.0, +// but its six hex digits provide 24 bits. +Unicode6 = \\ U {HexDigit} {6} + +// see http://www.unicode.org/unicode/reports/tr18/ +WSP = [ \t\b] +WSPNL = [\u2028\u2029\u000A\u000B\u000C\u000D\u0085\t\b\ ] +NWSPNL = [^\u2028\u2029\u000A\u000B\u000C\u000D\u0085\t\b\ ] +NL = [\u2028\u2029\u000A\u000B\u000C\u000D\u0085] | \u000D\u000A +NNL = [^\u2028\u2029\u000A\u000B\u000C\u000D\u0085] + +Ident = {IdentStart} {IdentPart}* +QualIdent = {Ident} ( {WSP}* "." {WSP}* {Ident} )* +QUIL = {QualIdent} ( {WSP}* "," {WSP}* {QualIdent} )* +Array = "[" {WSP}* "]" +ParamPart = {IdentStart}|{IdentPart}|"<"|">"|","|{WSP}|"&"|"?"|"." +GenParam = "<" {ParamPart}+ ">" +ClassT = {Ident} ({WSP}* {GenParam})? +QClassT = {QualIdent} ({WSP}* {GenParam})? +ArrType = ({GenParam} {WSP}*)? {QClassT} ({WSP}* {Array})* + +IdentStart = [:jletter:] +IdentPart = [:jletterdigit:] + +JFlexCommentChar = [^*/]|"/"+[^*/]|"*"+[^*/] +JFlexComment = {JFlexCommentChar}+ + +/* Java comments */ +JavaComment = {TraditionalComment}|{EndOfLineComment} +TraditionalComment = "/*"{CommentContent}\*+"/" +EndOfLineComment = "//".*{NL} + +CommentContent = ([^*]|\*+[^*/])* + +StringCharacter = [^\u2028\u2029\u000A\u000B\u000C\u000D\u0085\"\\] + +CharLiteral = \'([^\u2028\u2029\u000A\u000B\u000C\u000D\u0085\'\\]|{EscapeSequence})\' +StringLiteral = \"({StringCharacter}|{EscapeSequence})*\" + +EscapeSequence = \\[^\u2028\u2029\u000A\u000B\u000C\u000D\u0085]|\\+u{HexDigit}{4}|\\[0-3]?{OctDigit}{1,2} + +/* \\(b|t|n|f|r|\"|\'|\\|[0-3]?{OctDigit}{1,2}|u{HexDigit}{4}) */ + +JavaRest = [^\{\}\"\'/]|"/"[^*/] +JavaCode = ({JavaRest}|{StringLiteral}|{CharLiteral}|{JavaComment})+ + +DottedVersion = [1-9][0-9]*(\.[0-9]+){0,2} + +%% + + { + "%%".*{NL}? { + t.start(); + yybegin(MACROS); + macroDefinition = true; + return symbol(USERCODE,userCode); + } + .*{NL} | .+ { userCode.append(yytext()); } + <> { return symbol(EOF); } +} + + ("%{"|"%init{"|"%initthrow{"|"%eof{"|"%eofthrow{"|"%yylexthrow{"|"%eofval{").*{NL} + { string.setLength(0); yybegin(COPY); } + { + "%}".*{NL} { classCode = conc(classCode,string); yybegin(MACROS); } + "%init}".*{NL} { initCode = conc(initCode,string); yybegin(MACROS); } + "%initthrow}".*{NL} { initThrow = concExc(initThrow,string); yybegin(MACROS); } + "%eof}".*{NL} { eofCode = conc(eofCode,string); yybegin(MACROS); } + "%eofthrow}".*{NL} { eofThrow = concExc(eofThrow,string); yybegin(MACROS); } + "%yylexthrow}".*{NL} { lexThrow = concExc(lexThrow,string); yybegin(MACROS); } + "%eofval}".*{NL} { eofVal = string.toString(); yybegin(MACROS); } + + .*{NL} { string.append(yytext()); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); } +} + + + ^"%s" ("tate" "s"?)? {WSP}+ { inclusive_states = true; yybegin(STATELIST); } + ^"%x" ("state" "s"?)? {WSP}+ { inclusive_states = false; yybegin(STATELIST); } + { + {Ident} { states.insert(yytext(),inclusive_states); } + ([\ \t]*","[\ \t]*)|([\ \t]+) { } + {NL} { yybegin(MACROS); } + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); } +} + + { + "%char" { charCount = true; } + "%line" { lineCount = true; } + "%column" { columnCount = true; } + "%byaccj" { isInteger = true; + if (eofVal == null) + eofVal = "return 0;"; + eofclose = true; + } + "%cup2" { cup2Compatible = true; + isImplementing = concExc(isImplementing, "Scanner"); + lineCount = true; + columnCount = true; + if (functionName == null) + functionName = "readNextTerminal"; + if (tokenType == null) + tokenType = "ScannerToken"; + if (eofVal == null) + eofVal = "return token(SpecialTerminals.EndOfInputStream);"; + if (!Options.jlex) eofclose = true; + return symbol(UNICODE); // %unicode + } + "%cup" { cupCompatible = true; + isImplementing = concExc(isImplementing, "java_cup.runtime.Scanner"); + if (functionName == null) + functionName = "next_token"; + if (tokenType == null) + tokenType = "java_cup.runtime.Symbol"; + if (eofVal == null) + eofVal = "return new java_cup.runtime.Symbol("+cupSymbol+".EOF);"; + if (!Options.jlex) eofclose = true; + } + "%cupsym"{WSP}+{QualIdent} {WSP}* { cupSymbol = yytext().substring(8).trim(); + if (cupCompatible) Out.warning(ErrorMessages.CUPSYM_AFTER_CUP, yyline); } + "%cupsym"{WSP}+{NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_CUPSYM, yyline); } + "%cupdebug" { cupDebug = true; } + "%eofclose"({WSP}+"true")? { eofclose = true; } + "%eofclose"({WSP}+"false") { eofclose = false; } + "%class"{WSP}+{ClassT} {WSP}* { className = yytext().substring(7).trim(); } + "%ctorarg"{WSP}+{ArrType}{WSP}+ { yybegin(CTOR_ARG); ctorTypes.add(yytext().substring(8).trim()); } + "%function"{WSP}+{Ident} {WSP}* { functionName = yytext().substring(10).trim(); } + "%type"{WSP}+{ArrType} {WSP}* { tokenType = yytext().substring(6).trim(); } + "%integer"|"%int" { isInteger = true; } + "%intwrap" { isIntWrap = true; } + "%yyeof" { isYYEOF = true; } + "%notunix" { notUnix = true; } + "%7bit" { isASCII = true; return symbol(ASCII); } + "%full"|"%8bit" { return symbol(FULL); } + "%16bit" { populateDefaultVersionUnicodeProperties(); + return symbol(UNICODE); + } + "%unicode"({WSP}+{DottedVersion})? { String v = yytext().substring(8).trim(); + if (v.length() == 0) { + populateDefaultVersionUnicodeProperties(); + } else { + try { + unicodeProperties = new UnicodeProperties(v); + } catch (UnicodeProperties.UnsupportedUnicodeVersionException e) { + throw new ScannerException + (file, ErrorMessages.UNSUPPORTED_UNICODE_VERSION, yyline); + } + charClasses.init + (Options.jlex ? 127 : unicodeProperties.getMaximumCodePoint(), this); + } + return symbol(UNICODE); + } + + "%caseless"|"%ignorecase" { caseless = true; } + "%implements"{WSP}+.* { isImplementing = concExc(isImplementing, yytext().substring(12).trim()); } + "%extends"{WSP}+{QClassT}{WSP}* { isExtending = yytext().substring(9).trim(); } + "%public" { isPublic = true; } + "%apiprivate" { visibility = "private"; Skeleton.makePrivate(); } + "%final" { isFinal = true; } + "%abstract" { isAbstract = true; } + "%debug" { debugOption = true; } + "%standalone" { standalone = true; isInteger = true; } + "%pack" { /* no-op - this is the only generation method */ } + "%include" {WSP}+ .* { includeFile(yytext().substring(9).trim()); } + "%buffer" {WSP}+ {Number} {WSP}* { bufferSize = Integer.parseInt(yytext().substring(8).trim()); } + "%buffer" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.NO_BUFFER_SIZE, yyline); } + "%initthrow" {WSP}+ {QUIL} {WSP}* { initThrow = concExc(initThrow,yytext().substring(11).trim()); } + "%initthrow" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_INITTHROW, yyline); } + "%eofthrow" {WSP}+ {QUIL} {WSP}* { eofThrow = concExc(eofThrow,yytext().substring(10).trim()); } + "%eofthrow" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_EOFTHROW, yyline); } + "%yylexthrow"{WSP}+ {QUIL} {WSP}* { lexThrow = concExc(lexThrow,yytext().substring(12).trim()); } + "%throws" {WSP}+ {QUIL} {WSP}* { lexThrow = concExc(lexThrow,yytext().substring(8).trim()); } + "%yylexthrow"{WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_YYLEXTHROW, yyline); } + "%throws" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_THROW, yyline); } + "%scanerror" {WSP}+ {QualIdent} {WSP}* { scanErrorException = yytext().substring(11).trim(); } + "%scanerror" {WSP}+ {NNL}* { throw new ScannerException(file,ErrorMessages.QUIL_SCANERROR, yyline); } +// TODO: In the version of JFlex after 1.6, the %inputstreamctor directive will become a no-op: the InputStream ctor will never be emitted. + "%inputstreamctor"({WSP}+"true")? { emitInputStreamCtor = true; } + "%inputstreamctor"{WSP}+"false" { emitInputStreamCtor = false; } + + {Ident} { return symbol(IDENT, yytext()); } + "="{WSP}* { if (null == unicodeProperties && ! isASCII) { + populateDefaultVersionUnicodeProperties(); + } + yybegin(REGEXP); + return symbol(EQUALS); + } + + "/*" { nextState = MACROS; yybegin(COMMENT); } + + {EndOfLineComment} { } + + ^"%%" {NNL}* { if (null == unicodeProperties && ! isASCII) { + populateDefaultVersionUnicodeProperties(); + } + macroDefinition = false; + yybegin(REGEXPSTART); + return symbol(DELIMITER); + } + "%"{Ident} { throw new ScannerException(file,ErrorMessages.UNKNOWN_OPTION, yyline, yycolumn); } + "%" { throw new ScannerException(file,ErrorMessages.UNKNOWN_OPTION, yyline, yycolumn); } + ^{WSP}+"%" { Out.warning(ErrorMessages.NOT_AT_BOL, yyline); yypushback(1); } + + {WSP}+ { } + {NL}+ { } + <> { if ( yymoreStreams() ) { + file = (File) files.pop(); + yypopStream(); + } + else + throw new ScannerException(file,ErrorMessages.EOF_IN_MACROS); + } +} + + { + {Ident} {WSP}* { yybegin(MACROS); ctorArgs.add(yytext().trim()); } + [^] { throw new ScannerException(file,ErrorMessages.CTOR_ARG,yyline,yycolumn); } +} + + { + ^ {WSP}* "%include" {WSP}+ .* { includeFile(yytext().trim().substring(9).trim()); } + {WSP}* "/*" { nextState = REGEXPSTART; yybegin(COMMENT); } + {WSP}* "<" { yybegin(STATES); return symbol_countUpdate(LESSTHAN, null); } + {WSP}* "}" { return symbol_countUpdate(RBRACE, null); } + {WSP}* "//" {NNL}* { } + {WSP}* "<>" {WSPNL}* "{" { actionText.setLength(0); yybegin(JAVA_CODE); + Symbol s = symbol_countUpdate(EOFRULE, null); + action_line = s.left+1; + return s; + } + ^ {WSP}* {NWSPNL} { yypushback(yylength()); yybegin(REGEXP); } + {WSP} | {NL} { } +} + + { + {Ident} { return symbol(IDENT, yytext()); } + "," { return symbol(COMMA); } + {WSPNL}+ { } + + // "{" will be caught in REGEXP + ">"{WSPNL}* { yybegin(REGEXP); return symbol(MORETHAN); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_STATES); } +} + + + { + "<>" {WSPNL}+ "{" { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(EOFRULE); } + "<>" { throw new ScannerException(file,ErrorMessages.EOF_WO_ACTION); } + + {WSPNL}*"|"{WSP}*$ { if (macroDefinition) { + yybegin(EATWSPNL); + return symbol(BAR); + } + else { + yybegin(REGEXPSTART); + return symbol(NOACTION); + } + } + + // stategroup + "{" { yybegin(REGEXPSTART); return symbol(LBRACE); } + + {WSPNL}*"|" { return symbol(BAR); } + + {WSPNL}*\" { string.setLength(0); nextState = REGEXP; yybegin(STRING_CONTENT); } + {WSPNL}*"\\u{" { string.setLength(0); yybegin(REGEXP_CODEPOINT_SEQUENCE); } + {WSPNL}*"!" { return symbol(BANG); } + {WSPNL}*"~" { return symbol(TILDE); } + {WSPNL}*"(" { return symbol(OPENBRACKET); } + {WSPNL}*")" { return symbol(CLOSEBRACKET); } + {WSPNL}*"*" { return symbol(STAR); } + {WSPNL}*"+" { return symbol(PLUS); } + {WSPNL}*"?" { return symbol(QUESTION); } + {WSPNL}*"$" { return symbol(DOLLAR); } + {WSPNL}*"^" { bolUsed = true; return symbol(HAT); } + {WSPNL}*"." { return symbol(POINT); } + {WSPNL}*"\\R" { return symbol(NEWLINE); } + {WSPNL}*"[" { yybegin(CHARCLASS); return symbol(OPENCLASS); } + {WSPNL}*"/" { return symbol(LOOKAHEAD); } + + {WSPNL}* "{" {WSP}* {Ident} {WSP}* "}" { return symbol_countUpdate(MACROUSE, makeMacroIdent()); } + {WSPNL}* "{" {WSP}* {Number} { yybegin(REPEATEXP); + return symbol(REPEAT, + new Integer(yytext().trim().substring(1).trim())); + } + + {WSPNL}+ "{" { actionText.setLength(0); yybegin(JAVA_CODE); action_line = yyline+1; return symbol(REGEXPEND); } + {NL} { if (macroDefinition) { yybegin(MACROS); } return symbol(REGEXPEND); } + + {WSPNL}*"/*" { nextState = REGEXP; yybegin(COMMENT); } + + {WSPNL}*"//"{NNL}* { } + + {WSP}+ { } + + { + {WSPNL}*"[:jletter:]" { return symbol(JLETTERCLASS); } + {WSPNL}*"[:jletterdigit:]" { return symbol(JLETTERDIGITCLASS); } + {WSPNL}*"[:letter:]" { return symbol(LETTERCLASS); } + {WSPNL}*"[:uppercase:]" { return symbol(UPPERCLASS); } + {WSPNL}*"[:lowercase:]" { return symbol(LOWERCLASS); } + {WSPNL}*"[:digit:]" { return symbol(DIGITCLASS); } + {WSPNL}*"\\d" { return symbol(DIGITCLASS); } + {WSPNL}*"\\D" { return symbol(DIGITCLASSNOT); } + {WSPNL}*"\\s" { return symbol(WHITESPACECLASS); } + {WSPNL}*"\\S" { return symbol(WHITESPACECLASSNOT); } + {WSPNL}*"\\w" { return symbol(WORDCLASS); } + {WSPNL}*"\\W" { return symbol(WORDCLASSNOT); } + {WSPNL}*"\\p{"[^}]*"}" { String trimmedText = yytext().trim(); + String propertyValue = trimmedText.substring(3,trimmedText.length()-1); + IntCharSet set = unicodeProperties.getIntCharSet(propertyValue); + if (null == set) { + throw new ScannerException(file,ErrorMessages.INVALID_UNICODE_PROPERTY, yyline, yycolumn + 3); + } + return symbol(UNIPROPCCLASS, set); + } + {WSPNL}*"\\P{"[^}]*"}" { String trimmedText = yytext().trim(); + String propertyValue = trimmedText.substring(3,trimmedText.length()-1); + IntCharSet set = unicodeProperties.getIntCharSet(propertyValue); + if (null == set) { + throw new ScannerException(file,ErrorMessages.INVALID_UNICODE_PROPERTY, yyline, yycolumn + 3); + } + return symbol(UNIPROPCCLASSNOT, set); + } + } + + . { return symbol(CHAR, yytext().codePointAt(0)); } +} + + {WSPNL}+ { yybegin(REGEXP); } + + + { + "}" { yybegin(REGEXP); return symbol(RBRACE); } + "," {WSP}* {Number} { return symbol(REPEAT, new Integer(yytext().substring(1).trim())); } + {WSP}+ { } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } +} + + { + "{"{Ident}"}" { return symbol(MACROUSE, yytext().substring(1,yylength()-1)); } + "[" { balance++; return symbol(OPENCLASS); } + "]" { if (balance > 0) balance--; else yybegin(REGEXP); return symbol(CLOSECLASS); } + "^" { return symbol(HAT); } + "-" { return symbol(DASH); } + "--" { return symbol(DIFFERENCE); } + "&&" { return symbol(INTERSECTION); } + "||" { /* union is the default operation - '||' can be ignored */ } + "~~" { return symbol(SYMMETRICDIFFERENCE); } + "\\u{" { yybegin(CHARCLASS_CODEPOINT); } + + // this is a hack to keep JLex compatibilty with char class + // expressions like [+-] + "-]" { yypushback(1); yycolumn--; return symbol(CHAR, (int)'-'); } + + \" { string.setLength(0); nextState = CHARCLASS; yybegin(STRING_CONTENT); } + + . { return symbol(CHAR, yytext().codePointAt(0)); } + + \n { throw new ScannerException(file,ErrorMessages.EOL_IN_CHARCLASS,yyline,yycolumn); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } +} + + { + \" { yybegin(nextState); return symbol(STRING, string.toString()); } + \\\" { string.append('\"'); } + [^\"\\\u2028\u2029\u000A\u000B\u000C\u000D\u0085]+ { string.append(yytext()); } + + {NL} { throw new ScannerException(file,ErrorMessages.UNTERMINATED_STR, yyline, yycolumn); } + + {HexNumber} { string.append( (char) Integer.parseInt(yytext().substring(2,yylength()), 16)); } + {OctNumber} { string.append( (char) Integer.parseInt(yytext().substring(1,yylength()), 8)); } + {Unicode4} { string.append( (char) Integer.parseInt(yytext().substring(2,yylength()), 16)); } + {Unicode6} { int codePoint = Integer.parseInt(yytext().substring(2,yylength()), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + string.append(Character.toChars(codePoint)); + } else { + throw new ScannerException(file,ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn+2); + } + } + + "\\u{" { yybegin(STRING_CODEPOINT_SEQUENCE); } + + \\b { string.append('\b'); } + \\n { string.append('\n'); } + \\t { string.append('\t'); } + \\f { string.append('\f'); } + \\r { string.append('\r'); } + + \\. { string.append(yytext().substring(1, yytext().offsetByCodePoints(1, 1))); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_STRING); } +} + + + { + {HexNumber} { return symbol(CHAR, Integer.parseInt(yytext().substring(2,yylength()), 16)); } + {OctNumber} { return symbol(CHAR, Integer.parseInt(yytext().substring(1,yylength()), 8)); } + {Unicode4} { return symbol(CHAR, Integer.parseInt(yytext().substring(2,yylength()), 16)); } + {Unicode6} { int codePoint = Integer.parseInt(yytext().substring(2,yylength()), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + return symbol(CHAR, codePoint); + } else { + throw new ScannerException(file,ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn+2); + } + } + + \\b { return symbol(CHAR, (int)'\b'); } + \\n { return symbol(CHAR, (int)'\n'); } + \\t { return symbol(CHAR, (int)'\t'); } + \\f { return symbol(CHAR, (int)'\f'); } + \\r { return symbol(CHAR, (int)'\r'); } + + \\. { return symbol(CHAR, yytext().codePointAt(1)); } +} + + + { + "{" { balance++; actionText.append('{'); } + "}" { if (balance > 0) { + balance--; + actionText.append('}'); + } + else { + yybegin(REGEXPSTART); + Action a = new Action(actionText.toString(), action_line); + actions.add(a); + return symbol(ACTION, a); + } + } + + {JavaCode} { actionText.append(yytext()); } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_ACTION, action_line-1); } +} + + { + + "/"+ "*" { commentbalance++; } + "*"+ "/" { if (commentbalance > 0) + commentbalance--; + else + yybegin(nextState); + } + + {JFlexComment} { /* ignore */ } + + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_COMMENT); } +} + + { + "}" { yybegin(REGEXP); return symbol(STRING, string.toString()); } + {HexDigit}{1,6} { int codePoint = Integer.parseInt(yytext(), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + string.append(Character.toChars(codePoint)); + } else { + throw new ScannerException(file,ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn); + } + } + {WSPNL}+ { } + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } +} + + { // Specialized form: newlines disallowed, and doesn't return a symbol + "}" { yybegin(STRING_CONTENT); } + {HexDigit}{1,6} { int codePoint = Integer.parseInt(yytext(), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + string.append(Character.toChars(codePoint)); + } else { + throw new ScannerException(file, ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn); + } + } + {NL} { throw new ScannerException(file,ErrorMessages.UNTERMINATED_STR, yyline, yycolumn); } + {WSP}+ { } + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_STRING); } +} + + { // Specialized form: only one codepoint allowed, no whitespace allowed + {HexDigit}{1,6} "}" { int codePoint = Integer.parseInt(yytext().substring(0, yylength() - 1), 16); + if (codePoint <= unicodeProperties.getMaximumCodePoint()) { + yybegin(CHARCLASS); + return symbol(CHAR, codePoint); + } else { + throw new ScannerException(file, ErrorMessages.CODEPOINT_OUT_OF_RANGE, yyline, yycolumn); + } + } + <> { throw new ScannerException(file,ErrorMessages.EOF_IN_REGEXP); } +} + +. { throw new ScannerException(file,ErrorMessages.UNEXPECTED_CHAR, yyline, yycolumn); } +\R { throw new ScannerException(file,ErrorMessages.UNEXPECTED_NL, yyline, yycolumn); } + +<> { if ( yymoreStreams() ) { + file = (File) files.pop(); + yypopStream(); + } + else { + return symbol(EOF); + } + } diff --git a/samples/JFlex/java.jflex b/samples/JFlex/java.jflex new file mode 100644 index 00000000..b12f15d2 --- /dev/null +++ b/samples/JFlex/java.jflex @@ -0,0 +1,305 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Copyright (C) 1998-2015 Gerwin Klein * + * All rights reserved. * + * * + * License: BSD * + * * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +/* Java 1.2 language lexer specification */ + +/* Use together with unicode.flex for Unicode preprocesssing */ +/* and java12.cup for a Java 1.2 parser */ + +/* Note that this lexer specification is not tuned for speed. + It is in fact quite slow on integer and floating point literals, + because the input is read twice and the methods used to parse + the numbers are not very fast. + For a production quality application (e.g. a Java compiler) + this could be optimized */ + + +import java_cup.runtime.*; + +%% + +%public +%class Scanner +%implements sym + +%unicode + +%line +%column + +%cup +%cupdebug + +%{ + StringBuilder string = new StringBuilder(); + + private Symbol symbol(int type) { + return new JavaSymbol(type, yyline+1, yycolumn+1); + } + + private Symbol symbol(int type, Object value) { + return new JavaSymbol(type, yyline+1, yycolumn+1, value); + } + + /** + * assumes correct representation of a long value for + * specified radix in scanner buffer from start + * to end + */ + private long parseLong(int start, int end, int radix) { + long result = 0; + long digit; + + for (int i = start; i < end; i++) { + digit = Character.digit(yycharat(i),radix); + result*= radix; + result+= digit; + } + + return result; + } +%} + +/* main character classes */ +LineTerminator = \r|\n|\r\n +InputCharacter = [^\r\n] + +WhiteSpace = {LineTerminator} | [ \t\f] + +/* comments */ +Comment = {TraditionalComment} | {EndOfLineComment} | + {DocumentationComment} + +TraditionalComment = "/*" [^*] ~"*/" | "/*" "*"+ "/" +EndOfLineComment = "//" {InputCharacter}* {LineTerminator}? +DocumentationComment = "/*" "*"+ [^/*] ~"*/" + +/* identifiers */ +Identifier = [:jletter:][:jletterdigit:]* + +/* integer literals */ +DecIntegerLiteral = 0 | [1-9][0-9]* +DecLongLiteral = {DecIntegerLiteral} [lL] + +HexIntegerLiteral = 0 [xX] 0* {HexDigit} {1,8} +HexLongLiteral = 0 [xX] 0* {HexDigit} {1,16} [lL] +HexDigit = [0-9a-fA-F] + +OctIntegerLiteral = 0+ [1-3]? {OctDigit} {1,15} +OctLongLiteral = 0+ 1? {OctDigit} {1,21} [lL] +OctDigit = [0-7] + +/* floating point literals */ +FloatLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? [fF] +DoubleLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}? + +FLit1 = [0-9]+ \. [0-9]* +FLit2 = \. [0-9]+ +FLit3 = [0-9]+ +Exponent = [eE] [+-]? [0-9]+ + +/* string and character literals */ +StringCharacter = [^\r\n\"\\] +SingleCharacter = [^\r\n\'\\] + +%state STRING, CHARLITERAL + +%% + + { + + /* keywords */ + "abstract" { return symbol(ABSTRACT); } + "boolean" { return symbol(BOOLEAN); } + "break" { return symbol(BREAK); } + "byte" { return symbol(BYTE); } + "case" { return symbol(CASE); } + "catch" { return symbol(CATCH); } + "char" { return symbol(CHAR); } + "class" { return symbol(CLASS); } + "const" { return symbol(CONST); } + "continue" { return symbol(CONTINUE); } + "do" { return symbol(DO); } + "double" { return symbol(DOUBLE); } + "else" { return symbol(ELSE); } + "extends" { return symbol(EXTENDS); } + "final" { return symbol(FINAL); } + "finally" { return symbol(FINALLY); } + "float" { return symbol(FLOAT); } + "for" { return symbol(FOR); } + "default" { return symbol(DEFAULT); } + "implements" { return symbol(IMPLEMENTS); } + "import" { return symbol(IMPORT); } + "instanceof" { return symbol(INSTANCEOF); } + "int" { return symbol(INT); } + "interface" { return symbol(INTERFACE); } + "long" { return symbol(LONG); } + "native" { return symbol(NATIVE); } + "new" { return symbol(NEW); } + "goto" { return symbol(GOTO); } + "if" { return symbol(IF); } + "public" { return symbol(PUBLIC); } + "short" { return symbol(SHORT); } + "super" { return symbol(SUPER); } + "switch" { return symbol(SWITCH); } + "synchronized" { return symbol(SYNCHRONIZED); } + "package" { return symbol(PACKAGE); } + "private" { return symbol(PRIVATE); } + "protected" { return symbol(PROTECTED); } + "transient" { return symbol(TRANSIENT); } + "return" { return symbol(RETURN); } + "void" { return symbol(VOID); } + "static" { return symbol(STATIC); } + "while" { return symbol(WHILE); } + "this" { return symbol(THIS); } + "throw" { return symbol(THROW); } + "throws" { return symbol(THROWS); } + "try" { return symbol(TRY); } + "volatile" { return symbol(VOLATILE); } + "strictfp" { return symbol(STRICTFP); } + + /* boolean literals */ + "true" { return symbol(BOOLEAN_LITERAL, true); } + "false" { return symbol(BOOLEAN_LITERAL, false); } + + /* null literal */ + "null" { return symbol(NULL_LITERAL); } + + + /* separators */ + "(" { return symbol(LPAREN); } + ")" { return symbol(RPAREN); } + "{" { return symbol(LBRACE); } + "}" { return symbol(RBRACE); } + "[" { return symbol(LBRACK); } + "]" { return symbol(RBRACK); } + ";" { return symbol(SEMICOLON); } + "," { return symbol(COMMA); } + "." { return symbol(DOT); } + + /* operators */ + "=" { return symbol(EQ); } + ">" { return symbol(GT); } + "<" { return symbol(LT); } + "!" { return symbol(NOT); } + "~" { return symbol(COMP); } + "?" { return symbol(QUESTION); } + ":" { return symbol(COLON); } + "==" { return symbol(EQEQ); } + "<=" { return symbol(LTEQ); } + ">=" { return symbol(GTEQ); } + "!=" { return symbol(NOTEQ); } + "&&" { return symbol(ANDAND); } + "||" { return symbol(OROR); } + "++" { return symbol(PLUSPLUS); } + "--" { return symbol(MINUSMINUS); } + "+" { return symbol(PLUS); } + "-" { return symbol(MINUS); } + "*" { return symbol(MULT); } + "/" { return symbol(DIV); } + "&" { return symbol(AND); } + "|" { return symbol(OR); } + "^" { return symbol(XOR); } + "%" { return symbol(MOD); } + "<<" { return symbol(LSHIFT); } + ">>" { return symbol(RSHIFT); } + ">>>" { return symbol(URSHIFT); } + "+=" { return symbol(PLUSEQ); } + "-=" { return symbol(MINUSEQ); } + "*=" { return symbol(MULTEQ); } + "/=" { return symbol(DIVEQ); } + "&=" { return symbol(ANDEQ); } + "|=" { return symbol(OREQ); } + "^=" { return symbol(XOREQ); } + "%=" { return symbol(MODEQ); } + "<<=" { return symbol(LSHIFTEQ); } + ">>=" { return symbol(RSHIFTEQ); } + ">>>=" { return symbol(URSHIFTEQ); } + + /* string literal */ + \" { yybegin(STRING); string.setLength(0); } + + /* character literal */ + \' { yybegin(CHARLITERAL); } + + /* numeric literals */ + + /* This is matched together with the minus, because the number is too big to + be represented by a positive integer. */ + "-2147483648" { return symbol(INTEGER_LITERAL, new Integer(Integer.MIN_VALUE)); } + + {DecIntegerLiteral} { return symbol(INTEGER_LITERAL, new Integer(yytext())); } + {DecLongLiteral} { return symbol(INTEGER_LITERAL, new Long(yytext().substring(0,yylength()-1))); } + + {HexIntegerLiteral} { return symbol(INTEGER_LITERAL, new Integer((int) parseLong(2, yylength(), 16))); } + {HexLongLiteral} { return symbol(INTEGER_LITERAL, new Long(parseLong(2, yylength()-1, 16))); } + + {OctIntegerLiteral} { return symbol(INTEGER_LITERAL, new Integer((int) parseLong(0, yylength(), 8))); } + {OctLongLiteral} { return symbol(INTEGER_LITERAL, new Long(parseLong(0, yylength()-1, 8))); } + + {FloatLiteral} { return symbol(FLOATING_POINT_LITERAL, new Float(yytext().substring(0,yylength()-1))); } + {DoubleLiteral} { return symbol(FLOATING_POINT_LITERAL, new Double(yytext())); } + {DoubleLiteral}[dD] { return symbol(FLOATING_POINT_LITERAL, new Double(yytext().substring(0,yylength()-1))); } + + /* comments */ + {Comment} { /* ignore */ } + + /* whitespace */ + {WhiteSpace} { /* ignore */ } + + /* identifiers */ + {Identifier} { return symbol(IDENTIFIER, yytext()); } +} + + { + \" { yybegin(YYINITIAL); return symbol(STRING_LITERAL, string.toString()); } + + {StringCharacter}+ { string.append( yytext() ); } + + /* escape sequences */ + "\\b" { string.append( '\b' ); } + "\\t" { string.append( '\t' ); } + "\\n" { string.append( '\n' ); } + "\\f" { string.append( '\f' ); } + "\\r" { string.append( '\r' ); } + "\\\"" { string.append( '\"' ); } + "\\'" { string.append( '\'' ); } + "\\\\" { string.append( '\\' ); } + \\[0-3]?{OctDigit}?{OctDigit} { char val = (char) Integer.parseInt(yytext().substring(1),8); + string.append( val ); } + + /* error cases */ + \\. { throw new RuntimeException("Illegal escape sequence \""+yytext()+"\""); } + {LineTerminator} { throw new RuntimeException("Unterminated string at end of line"); } +} + + { + {SingleCharacter}\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, yytext().charAt(0)); } + + /* escape sequences */ + "\\b"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\b');} + "\\t"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\t');} + "\\n"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\n');} + "\\f"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\f');} + "\\r"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\r');} + "\\\""\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\"');} + "\\'"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\'');} + "\\\\"\' { yybegin(YYINITIAL); return symbol(CHARACTER_LITERAL, '\\'); } + \\[0-3]?{OctDigit}?{OctDigit}\' { yybegin(YYINITIAL); + int val = Integer.parseInt(yytext().substring(1,yylength()-1),8); + return symbol(CHARACTER_LITERAL, (char)val); } + + /* error cases */ + \\. { throw new RuntimeException("Illegal escape sequence \""+yytext()+"\""); } + {LineTerminator} { throw new RuntimeException("Unterminated character literal at end of line"); } +} + +/* error fallback */ +[^] { throw new RuntimeException("Illegal character \""+yytext()+ + "\" at line "+yyline+", column "+yycolumn); } +<> { return symbol(EOF); } \ No newline at end of file diff --git a/samples/Java/gen-java-linguist-thrift.java b/samples/Java/gen-java-linguist-thrift.java new file mode 100644 index 00000000..4e2a5b1a --- /dev/null +++ b/samples/Java/gen-java-linguist-thrift.java @@ -0,0 +1,396 @@ +/** + * Autogenerated by Thrift Compiler (1.0.0-dev) + * + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * @generated + */ +import org.apache.thrift.scheme.IScheme; +import org.apache.thrift.scheme.SchemeFactory; +import org.apache.thrift.scheme.StandardScheme; + +import org.apache.thrift.scheme.TupleScheme; +import org.apache.thrift.protocol.TTupleProtocol; +import org.apache.thrift.protocol.TProtocolException; +import org.apache.thrift.EncodingUtils; +import org.apache.thrift.TException; +import org.apache.thrift.async.AsyncMethodCallback; +import org.apache.thrift.server.AbstractNonblockingServer.*; +import java.util.List; +import java.util.ArrayList; +import java.util.Map; +import java.util.HashMap; +import java.util.EnumMap; +import java.util.Set; +import java.util.HashSet; +import java.util.EnumSet; +import java.util.Collections; +import java.util.BitSet; +import java.nio.ByteBuffer; +import java.util.Arrays; +import javax.annotation.Generated; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"}) +@Generated(value = "Autogenerated by Thrift Compiler (1.0.0-dev)", date = "2015-5-12") +public class PullRequest implements org.apache.thrift.TBase, java.io.Serializable, Cloneable, Comparable { + private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("PullRequest"); + + private static final org.apache.thrift.protocol.TField TITLE_FIELD_DESC = new org.apache.thrift.protocol.TField("title", org.apache.thrift.protocol.TType.STRING, (short)1); + + private static final Map, SchemeFactory> schemes = new HashMap, SchemeFactory>(); + static { + schemes.put(StandardScheme.class, new PullRequestStandardSchemeFactory()); + schemes.put(TupleScheme.class, new PullRequestTupleSchemeFactory()); + } + + public String title; // required + + /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */ + public enum _Fields implements org.apache.thrift.TFieldIdEnum { + TITLE((short)1, "title"); + + private static final Map byName = new HashMap(); + + static { + for (_Fields field : EnumSet.allOf(_Fields.class)) { + byName.put(field.getFieldName(), field); + } + } + + /** + * Find the _Fields constant that matches fieldId, or null if its not found. + */ + public static _Fields findByThriftId(int fieldId) { + switch(fieldId) { + case 1: // TITLE + return TITLE; + default: + return null; + } + } + + /** + * Find the _Fields constant that matches fieldId, throwing an exception + * if it is not found. + */ + public static _Fields findByThriftIdOrThrow(int fieldId) { + _Fields fields = findByThriftId(fieldId); + if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!"); + return fields; + } + + /** + * Find the _Fields constant that matches name, or null if its not found. + */ + public static _Fields findByName(String name) { + return byName.get(name); + } + + private final short _thriftId; + private final String _fieldName; + + _Fields(short thriftId, String fieldName) { + _thriftId = thriftId; + _fieldName = fieldName; + } + + public short getThriftFieldId() { + return _thriftId; + } + + public String getFieldName() { + return _fieldName; + } + } + + // isset id assignments + public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap; + static { + Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class); + tmpMap.put(_Fields.TITLE, new org.apache.thrift.meta_data.FieldMetaData("title", org.apache.thrift.TFieldRequirementType.DEFAULT, + new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING))); + metaDataMap = Collections.unmodifiableMap(tmpMap); + org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(PullRequest.class, metaDataMap); + } + + public PullRequest() { + } + + public PullRequest( + String title) + { + this(); + this.title = title; + } + + /** + * Performs a deep copy on other. + */ + public PullRequest(PullRequest other) { + if (other.isSetTitle()) { + this.title = other.title; + } + } + + public PullRequest deepCopy() { + return new PullRequest(this); + } + + @Override + public void clear() { + this.title = null; + } + + public String getTitle() { + return this.title; + } + + public PullRequest setTitle(String title) { + this.title = title; + return this; + } + + public void unsetTitle() { + this.title = null; + } + + /** Returns true if field title is set (has been assigned a value) and false otherwise */ + public boolean isSetTitle() { + return this.title != null; + } + + public void setTitleIsSet(boolean value) { + if (!value) { + this.title = null; + } + } + + public void setFieldValue(_Fields field, Object value) { + switch (field) { + case TITLE: + if (value == null) { + unsetTitle(); + } else { + setTitle((String)value); + } + break; + + } + } + + public Object getFieldValue(_Fields field) { + switch (field) { + case TITLE: + return getTitle(); + + } + throw new IllegalStateException(); + } + + /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */ + public boolean isSet(_Fields field) { + if (field == null) { + throw new IllegalArgumentException(); + } + + switch (field) { + case TITLE: + return isSetTitle(); + } + throw new IllegalStateException(); + } + + @Override + public boolean equals(Object that) { + if (that == null) + return false; + if (that instanceof PullRequest) + return this.equals((PullRequest)that); + return false; + } + + public boolean equals(PullRequest that) { + if (that == null) + return false; + + boolean this_present_title = true && this.isSetTitle(); + boolean that_present_title = true && that.isSetTitle(); + if (this_present_title || that_present_title) { + if (!(this_present_title && that_present_title)) + return false; + if (!this.title.equals(that.title)) + return false; + } + + return true; + } + + @Override + public int hashCode() { + List list = new ArrayList(); + + boolean present_title = true && (isSetTitle()); + list.add(present_title); + if (present_title) + list.add(title); + + return list.hashCode(); + } + + @Override + public int compareTo(PullRequest other) { + if (!getClass().equals(other.getClass())) { + return getClass().getName().compareTo(other.getClass().getName()); + } + + int lastComparison = 0; + + lastComparison = Boolean.valueOf(isSetTitle()).compareTo(other.isSetTitle()); + if (lastComparison != 0) { + return lastComparison; + } + if (isSetTitle()) { + lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.title, other.title); + if (lastComparison != 0) { + return lastComparison; + } + } + return 0; + } + + public _Fields fieldForId(int fieldId) { + return _Fields.findByThriftId(fieldId); + } + + public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException { + schemes.get(iprot.getScheme()).getScheme().read(iprot, this); + } + + public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException { + schemes.get(oprot.getScheme()).getScheme().write(oprot, this); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("PullRequest("); + boolean first = true; + + sb.append("title:"); + if (this.title == null) { + sb.append("null"); + } else { + sb.append(this.title); + } + first = false; + sb.append(")"); + return sb.toString(); + } + + public void validate() throws org.apache.thrift.TException { + // check for required fields + // check for sub-struct validity + } + + private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException { + try { + write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out))); + } catch (org.apache.thrift.TException te) { + throw new java.io.IOException(te); + } + } + + private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException { + try { + read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in))); + } catch (org.apache.thrift.TException te) { + throw new java.io.IOException(te); + } + } + + private static class PullRequestStandardSchemeFactory implements SchemeFactory { + public PullRequestStandardScheme getScheme() { + return new PullRequestStandardScheme(); + } + } + + private static class PullRequestStandardScheme extends StandardScheme { + + public void read(org.apache.thrift.protocol.TProtocol iprot, PullRequest struct) throws org.apache.thrift.TException { + org.apache.thrift.protocol.TField schemeField; + iprot.readStructBegin(); + while (true) + { + schemeField = iprot.readFieldBegin(); + if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { + break; + } + switch (schemeField.id) { + case 1: // TITLE + if (schemeField.type == org.apache.thrift.protocol.TType.STRING) { + struct.title = iprot.readString(); + struct.setTitleIsSet(true); + } else { + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + break; + default: + org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type); + } + iprot.readFieldEnd(); + } + iprot.readStructEnd(); + + // check for required fields of primitive type, which can't be checked in the validate method + struct.validate(); + } + + public void write(org.apache.thrift.protocol.TProtocol oprot, PullRequest struct) throws org.apache.thrift.TException { + struct.validate(); + + oprot.writeStructBegin(STRUCT_DESC); + if (struct.title != null) { + oprot.writeFieldBegin(TITLE_FIELD_DESC); + oprot.writeString(struct.title); + oprot.writeFieldEnd(); + } + oprot.writeFieldStop(); + oprot.writeStructEnd(); + } + + } + + private static class PullRequestTupleSchemeFactory implements SchemeFactory { + public PullRequestTupleScheme getScheme() { + return new PullRequestTupleScheme(); + } + } + + private static class PullRequestTupleScheme extends TupleScheme { + + @Override + public void write(org.apache.thrift.protocol.TProtocol prot, PullRequest struct) throws org.apache.thrift.TException { + TTupleProtocol oprot = (TTupleProtocol) prot; + BitSet optionals = new BitSet(); + if (struct.isSetTitle()) { + optionals.set(0); + } + oprot.writeBitSet(optionals, 1); + if (struct.isSetTitle()) { + oprot.writeString(struct.title); + } + } + + @Override + public void read(org.apache.thrift.protocol.TProtocol prot, PullRequest struct) throws org.apache.thrift.TException { + TTupleProtocol iprot = (TTupleProtocol) prot; + BitSet incoming = iprot.readBitSet(1); + if (incoming.get(0)) { + struct.title = iprot.readString(); + struct.setTitleIsSet(true); + } + } + } + +} + diff --git a/samples/JavaScript/gen-js-linguist-thrift.js b/samples/JavaScript/gen-js-linguist-thrift.js new file mode 100644 index 00000000..d6a429f2 --- /dev/null +++ b/samples/JavaScript/gen-js-linguist-thrift.js @@ -0,0 +1,60 @@ +// +// Autogenerated by Thrift Compiler (1.0.0-dev) +// +// DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING +// + + +PullRequest = function(args) { + this.title = null; + if (args) { + if (args.title !== undefined) { + this.title = args.title; + } + } +}; +PullRequest.prototype = {}; +PullRequest.prototype.read = function(input) { + input.readStructBegin(); + while (true) + { + var ret = input.readFieldBegin(); + var fname = ret.fname; + var ftype = ret.ftype; + var fid = ret.fid; + if (ftype == Thrift.Type.STOP) { + break; + } + switch (fid) + { + case 1: + if (ftype == Thrift.Type.STRING) { + this.title = input.readString().value; + } else { + input.skip(ftype); + } + break; + case 0: + input.skip(ftype); + break; + default: + input.skip(ftype); + } + input.readFieldEnd(); + } + input.readStructEnd(); + return; +}; + +PullRequest.prototype.write = function(output) { + output.writeStructBegin('PullRequest'); + if (this.title !== null && this.title !== undefined) { + output.writeFieldBegin('title', Thrift.Type.STRING, 1); + output.writeString(this.title); + output.writeFieldEnd(); + } + output.writeFieldStop(); + output.writeStructEnd(); + return; +}; + diff --git a/samples/JavaScript/js.script! b/samples/JavaScript/js similarity index 100% rename from samples/JavaScript/js.script! rename to samples/JavaScript/js diff --git a/samples/JavaScript/js2.script! b/samples/JavaScript/js2 similarity index 100% rename from samples/JavaScript/js2.script! rename to samples/JavaScript/js2 diff --git a/samples/KiCad/Volume.sch b/samples/KiCad/Volume.sch new file mode 100644 index 00000000..2141db90 --- /dev/null +++ b/samples/KiCad/Volume.sch @@ -0,0 +1,714 @@ +EESchema Schematic File Version 2 +LIBS:mfk_alps +LIBS:mfk_connector +LIBS:mfk_interface +LIBS:power +LIBS:device +LIBS:transistors +LIBS:conn +LIBS:linear +LIBS:regul +LIBS:74xx +LIBS:cmos4000 +LIBS:adc-dac +LIBS:memory +LIBS:xilinx +LIBS:special +LIBS:microcontrollers +LIBS:dsp +LIBS:microchip +LIBS:analog_switches +LIBS:motorola +LIBS:texas +LIBS:intel +LIBS:audio +LIBS:interface +LIBS:digital-audio +LIBS:philips +LIBS:display +LIBS:cypress +LIBS:siliconi +LIBS:opto +LIBS:atmel +LIBS:contrib +LIBS:valves +LIBS:Volume-AlpsRK16814MG-cache +EELAYER 27 0 +EELAYER END +$Descr A 11000 8500 +encoding utf-8 +Sheet 1 1 +Title "ALPS RK16816MG with H-bridge" +Date "4 apr 2015" +Rev "" +Comp "Mithat Konar" +Comment1 "Copyright (C) 2015 Mithat Konar" +Comment2 "CERN Open Hardware Licence v1.2" +Comment3 "" +Comment4 "" +$EndDescr +$Comp +L SN754410 U1 +U 1 1 550CA683 +P 7600 4650 +F 0 "U1" H 7600 5350 60 0000 C CNN +F 1 "SN754410" H 7600 4000 60 0000 C CNN +F 2 "mfk-DIP-16_AriesC84_e" H 7600 4650 60 0001 C CNN +F 3 "~" H 7600 4650 60 0000 C CNN + 1 7600 4650 + 1 0 0 -1 +$EndComp +$Comp +L DGND #PWR01 +U 1 1 550CA83D +P 8450 5500 +F 0 "#PWR01" H 8450 5500 40 0001 C CNN +F 1 "DGND" H 8450 5430 40 0000 C CNN +F 2 "" H 8450 5500 60 0000 C CNN +F 3 "" H 8450 5500 60 0000 C CNN + 1 8450 5500 + 1 0 0 -1 +$EndComp +$Comp +L DGND #PWR02 +U 1 1 550CA86E +P 6600 5300 +F 0 "#PWR02" H 6600 5300 40 0001 C CNN +F 1 "DGND" H 6600 5230 40 0000 C CNN +F 2 "" H 6600 5300 60 0000 C CNN +F 3 "" H 6600 5300 60 0000 C CNN + 1 6600 5300 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6900 4550 6600 4550 +Wire Wire Line + 6600 4550 6600 5300 +Wire Wire Line + 6900 4700 6600 4700 +Connection ~ 6600 4700 +Wire Wire Line + 8300 4550 8450 4550 +Wire Wire Line + 8450 4250 8450 5500 +Wire Wire Line + 8300 4700 8450 4700 +Connection ~ 8450 4700 +Wire Wire Line + 3900 4450 4600 4450 +Wire Wire Line + 4400 4450 4400 4400 +Wire Wire Line + 4600 4450 4600 4400 +Wire Wire Line + 4400 5250 4400 5500 +Wire Wire Line + 4600 5400 4600 5250 +Wire Wire Line + 5700 4200 5700 4150 +Wire Wire Line + 5700 4150 6150 4150 +Wire Wire Line + 6150 4400 6900 4400 +Wire Wire Line + 5700 4850 6900 4850 +Wire Wire Line + 5700 4800 5700 4850 +Wire Wire Line + 8300 4250 8450 4250 +Connection ~ 8450 4550 +Wire Wire Line + 6400 4250 6900 4250 +Wire Wire Line + 6400 3250 6400 4250 +Wire Wire Line + 6750 3750 8450 3750 +Wire Wire Line + 8300 5000 8450 5000 +Wire Wire Line + 8300 4100 8700 4100 +Wire Wire Line + 6750 5150 6900 5150 +$Comp +L C C1 +U 1 1 550CAD46 +P 8700 4350 +F 0 "C1" H 8700 4450 40 0000 L CNN +F 1 "100n" H 8706 4265 40 0000 L CNN +F 2 "mfk-C_4.0_2.5_2.5_0.5" H 8738 4200 30 0001 C CNN +F 3 "~" H 8700 4350 60 0000 C CNN + 1 8700 4350 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8700 4100 8700 4150 +$Comp +L DGND #PWR03 +U 1 1 550CADFB +P 8700 4700 +F 0 "#PWR03" H 8700 4700 40 0001 C CNN +F 1 "DGND" H 8700 4630 40 0000 C CNN +F 2 "" H 8700 4700 60 0000 C CNN +F 3 "" H 8700 4700 60 0000 C CNN + 1 8700 4700 + 1 0 0 -1 +$EndComp +Wire Wire Line + 8700 4700 8700 4550 +Text Label 6400 3250 3 50 ~ 0 +VOL_UP +Text Label 6400 6150 1 50 ~ 0 +VOL_DOWN +$Comp +L DGND #PWR04 +U 1 1 550CB0E4 +P 3150 2100 +F 0 "#PWR04" H 3150 2100 40 0001 C CNN +F 1 "DGND" H 3150 2030 40 0000 C CNN +F 2 "" H 3150 2100 60 0000 C CNN +F 3 "" H 3150 2100 60 0000 C CNN + 1 3150 2100 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3650 1350 3650 1800 +Wire Wire Line + 3100 2450 3850 2450 +Text Label 3850 2450 2 50 ~ 0 +VOL_UP +Wire Wire Line + 3100 2650 3850 2650 +Text Label 3850 2650 2 50 ~ 0 +VOL_DOWN +$Comp +L PWR_FLAG #FLG05 +U 1 1 550CB3B3 +P 3400 2000 +F 0 "#FLG05" H 3400 2095 30 0001 C CNN +F 1 "PWR_FLAG" H 3400 2180 30 0000 C CNN +F 2 "" H 3400 2000 60 0000 C CNN +F 3 "" H 3400 2000 60 0000 C CNN + 1 3400 2000 + -1 0 0 1 +$EndComp +$Comp +L PWR_FLAG #FLG06 +U 1 1 550CB3CC +P 3900 1650 +F 0 "#FLG06" H 3900 1745 30 0001 C CNN +F 1 "PWR_FLAG" H 3900 1830 30 0000 C CNN +F 2 "" H 3900 1650 60 0000 C CNN +F 3 "" H 3900 1650 60 0000 C CNN + 1 3900 1650 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3150 1900 3100 1900 +Wire Wire Line + 3150 1900 3150 2100 +Wire Wire Line + 3900 1650 3650 1650 +Connection ~ 3650 1650 +Wire Wire Line + 3400 2000 3150 2000 +Connection ~ 3150 2000 +$Comp +L CONN_2 P4 +U 1 1 550CCCA8 +P 2750 2550 +F 0 "P4" V 2700 2550 50 0000 C CNN +F 1 "CTRL" V 2800 2550 50 0000 C CNN +F 2 "mfk-TE_282834-2" H 2750 2550 60 0001 C CNN +F 3 "" H 2750 2550 60 0000 C CNN + 1 2750 2550 + -1 0 0 -1 +$EndComp +Wire Wire Line + 4150 3250 4150 3850 +$Comp +L CONN_5 P1 +U 1 1 550CCE69 +P 2750 3450 +F 0 "P1" V 2700 3450 50 0000 C CNN +F 1 "AB I/O" V 2800 3450 50 0000 C CNN +F 2 "mfk-TE_282834-5" H 2750 3450 60 0001 C CNN +F 3 "" H 2750 3450 60 0000 C CNN + 1 2750 3450 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3150 3250 4150 3250 +Wire Wire Line + 4300 4100 4350 4100 +Wire Wire Line + 4350 4100 4350 3350 +Wire Wire Line + 4350 3350 3150 3350 +Text Label 3150 3250 0 50 ~ 0 +A_TOP +Text Label 3150 3350 0 50 ~ 0 +A_WIPER +Text Label 3150 3550 0 50 ~ 0 +B_TOP +Text Label 3150 3650 0 50 ~ 0 +B_WIPER +$Comp +L CONN_5 P2 +U 1 1 550CCF9F +P 2800 4800 +F 0 "P2" V 2750 4800 50 0000 C CNN +F 1 "CD I/O" V 2850 4800 50 0000 C CNN +F 2 "mfk-TE_282834-5" H 2800 4800 60 0001 C CNN +F 3 "" H 2800 4800 60 0000 C CNN + 1 2800 4800 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3200 4600 4150 4600 +Wire Wire Line + 3200 4700 3900 4700 +Wire Wire Line + 3200 4900 3700 4900 +Wire Wire Line + 5100 4950 5100 5700 +Wire Wire Line + 5100 4950 4950 4950 +Wire Wire Line + 3200 4800 3800 4800 +Wire Wire Line + 5000 4600 5000 5600 +Wire Wire Line + 5000 4600 4800 4600 +Wire Wire Line + 4800 4600 4800 4700 +Wire Wire Line + 4300 5400 4300 4950 +Text Label 3200 4600 0 50 ~ 0 +C_TOP +Wire Wire Line + 3900 5400 4300 5400 +Wire Wire Line + 4400 5400 4600 5400 +Wire Wire Line + 3900 4700 3900 5400 +$Comp +L RK16814MG RV1 +U 1 1 550CA765 +P 4500 4500 +F 0 "RV1" H 5850 5250 50 0000 C CNN +F 1 "RK16814MG" H 5700 3600 50 0000 C CNN +F 2 "mfk-ALPS_RK16814MG" V 4800 4900 60 0001 C CNN +F 3 "~" V 4800 4900 60 0000 C CNN + 1 4500 4500 + 1 0 0 -1 +$EndComp +Wire Wire Line + 4150 4600 4150 4700 +Text Label 3200 4700 0 50 ~ 0 +C_WIPER +Text Label 3200 4900 0 50 ~ 0 +D_TOP +Text Label 3200 5000 0 50 ~ 0 +D_WIPER +Wire Wire Line + 3900 3450 3900 4450 +Connection ~ 4400 4450 +Connection ~ 4400 5400 +Text Label 3150 3450 0 50 ~ 0 +AB_COMMON +Wire Wire Line + 3600 5000 3200 5000 +Text Label 3200 4800 0 50 ~ 0 +CD_COMMON +$Comp +L +5VD #PWR07 +U 1 1 550CE6FC +P 7600 3650 +F 0 "#PWR07" H 7600 3600 20 0001 C CNN +F 1 "+5VD" H 7600 3750 50 0000 C CNN +F 2 "" H 7600 3650 60 0000 C CNN +F 3 "" H 7600 3650 60 0000 C CNN + 1 7600 3650 + 1 0 0 -1 +$EndComp +$Comp +L +5VD #PWR08 +U 1 1 550CE733 +P 3650 1350 +F 0 "#PWR08" H 3650 1300 20 0001 C CNN +F 1 "+5VD" H 3650 1450 50 0000 C CNN +F 2 "" H 3650 1350 60 0000 C CNN +F 3 "" H 3650 1350 60 0000 C CNN + 1 3650 1350 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3900 3450 3150 3450 +Wire Wire Line + 4800 3850 4800 3550 +Wire Wire Line + 4800 3550 3150 3550 +Wire Wire Line + 4950 4100 5000 4100 +Wire Wire Line + 5000 4100 5000 3650 +Wire Wire Line + 5000 3650 3150 3650 +Wire Wire Line + 3600 5000 3600 5700 +Wire Wire Line + 3700 4900 3700 5600 +Wire Wire Line + 3800 4800 3800 5500 +Wire Wire Line + 3800 5500 4400 5500 +Wire Wire Line + 3700 5600 5000 5600 +Wire Wire Line + 3600 5700 5100 5700 +$Bitmap +Pos 10300 6850 +Scale 1.000000 +Data +89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52 00 00 00 5F 00 00 00 64 08 06 00 00 00 E0 F1 EC +9B 00 00 00 04 73 42 49 54 08 08 08 08 7C 08 64 88 00 00 00 09 70 48 59 73 00 00 07 6C 00 00 07 +6C 01 9C F3 D5 25 00 00 13 B3 49 44 41 54 78 9C ED 9D 7B 7C 54 D5 B5 C7 BF EB CC 04 C2 43 1E 5A +45 D0 2A F6 FA 82 52 A0 6A D5 D6 5A B1 3E 69 21 27 40 A3 F6 E1 55 51 4E 78 5C B5 B4 DA 56 3F 7E +8A 69 BD D4 6A 6F 6F AB AD 90 13 90 48 3F B7 B6 E6 16 66 22 8A F6 65 44 AD AD A2 45 B4 A5 D6 17 +88 12 15 5A 0C F2 CA 64 E6 AC FB C7 3E 93 49 86 10 66 92 7D 48 E8 E5 F7 F9 E4 33 AF BD D7 59 FB +77 76 F6 D9 7B ED B5 D6 16 55 E5 40 80 F8 C9 7B 80 59 05 14 5D A0 9E 3B 3B 6A 7D 6C C0 E9 69 05 +8A C0 85 96 CB F5 38 E4 40 E8 F9 E2 27 0F 01 9A 00 29 A0 B8 02 83 D5 73 3F 88 56 AB EE E3 40 E9 +F9 63 29 8C 78 C2 72 63 23 D4 C5 1A 0E 14 F2 C7 45 5C BE 47 70 A0 90 3F 3E E2 F2 3D 82 83 E4 F7 +20 22 27 5F FC E4 67 C5 4F 5E DE 8D FA 31 60 4C 91 D5 C6 84 F5 BA 7A CD CB C5 4F 7E B6 AB F5 0B +45 A4 E4 8B 9F 2C 03 56 02 4B C5 4F AE 14 3F 39 A2 0B 62 4E 04 FA 15 59 A7 5F 58 AF 28 88 9F 1C +21 7E 72 25 B0 14 58 19 EA 1F 19 22 23 3F 54 BC 0E E8 13 7E 75 31 F0 92 F8 C9 CB 8A 14 75 4A 17 +55 38 B5 98 C2 A1 5E 2F 61 F4 04 A3 77 5D 94 37 20 92 79 7E 07 C4 E7 E3 01 60 B6 7A EE 3F 3A 91 +31 00 B8 0C A8 02 8E EA 82 1A 8D C0 AD C0 CF D5 73 B7 77 72 9D C3 80 7B 80 4B F6 52 24 05 54 A8 +E7 D6 77 41 87 4E 61 9D FC 02 88 CF A2 11 98 A1 9E FB 50 5E FD 31 40 25 70 39 30 D8 82 4A 1F 00 +3F 03 16 AA E7 BE 98 77 AD CF 03 35 C0 F0 7D C8 88 E4 06 58 25 BF 08 E2 DB 62 11 70 3B F0 49 60 +26 70 96 35 85 F6 C4 53 C0 42 E0 69 E0 5B C0 35 45 D4 B5 7E 03 AC 91 DF 45 E2 0F 34 58 BD 01 36 +1F B8 35 FC 6B 13 0F A6 7D 35 B6 84 D9 24 FF 4E 8B B2 7A 33 AC B5 D3 26 F9 3F 04 9E B4 28 AF 37 +E2 49 4C 3B AD C0 F6 03 F7 23 C0 0B C0 40 6B 42 7B 0F B6 03 E3 D4 73 5F B7 25 D0 EA 22 2B 54 EC +06 9B 32 7B 11 6E B0 49 3C 44 B7 C8 5A 49 6E A5 F8 AF 80 47 D4 73 27 DA 16 1A 95 79 E1 6A 60 6B +44 B2 F7 37 B6 62 DA 63 1D 91 90 AF 9E BB 09 98 13 85 EC 1E C0 9C B0 3D D6 11 E9 1E AE F8 C9 06 +E0 9C C8 2E 10 3D 1E 57 CF 9D 10 95 F0 A8 ED F9 F1 88 E5 47 8D 48 F5 8F AC E7 8B 9F 1C 07 AC 89 +44 F8 FE C5 78 F5 DC 17 A2 10 1C 65 CF BF 2E 42 D9 FB 13 91 B5 23 AA A9 E6 61 C0 5B 40 A9 75 E1 +39 BC 05 BC 0C 9C 04 1C 1D E1 75 76 03 47 77 B6 F7 D0 55 44 35 A6 CD C0 3E F1 29 E0 2E E0 31 E0 +39 F5 DC 77 B3 3F 88 9F 1C 86 D9 B9 3A 17 D3 53 6D 1A F8 4A 31 ED B9 DD A2 4C 20 9A CD 94 18 F0 +06 F0 61 8B 62 D7 00 57 A8 E7 AE 2D E0 FA 63 81 FB B0 EB C1 B0 11 38 4E 3D 37 63 51 66 24 63 FE +97 B1 4B FC 7C E0 F4 42 88 07 08 CB 9D 1E D6 B3 85 0F 63 DA 65 15 DD EA F9 E2 27 FB 03 1F C3 F4 +B2 F1 18 4F B1 D3 81 2E BB 6D E4 A1 4E 3D 77 6F 7B AB FB 84 F8 C9 07 80 0A 4B BA 64 80 67 30 86 +C3 35 E1 DF 8B EA B9 3B BB 2A B0 60 F2 C5 4F 96 00 E7 63 08 CE 92 7D 02 D1 CD 98 36 03 1F 55 CF +DD DC 55 01 E2 27 0F 07 FE 02 1C 6E 4D AB F6 08 80 57 C8 DD 8C 17 80 DF AA E7 B6 14 52 B9 98 07 +EE 95 80 5F AC 76 DD C0 9C EE 10 0F A0 9E BB 59 FC E4 1C 8C B7 44 14 70 30 B3 AD 93 80 4B C3 EF +3C 0A DC ED 2A A6 D7 0E 28 4E AF 6E A1 51 3D B7 CE 86 A0 50 4E A3 0D 59 05 A2 60 9E 7A AB AF E6 +EA 5E 2E CF 0A 7A 2B F9 CF F5 72 79 56 D0 5B C9 3F D8 F3 7B 10 7B 75 EF EB 25 F2 AC A0 B7 92 7F +5C 2F 97 67 05 BD 95 FC 13 7A B9 3C 2B E8 AD E4 5F 22 7E B2 D0 00 B8 4E 11 CA E9 F2 2A 39 4A 14 +43 FE FE 0C AD 3C 1E B3 9A B6 81 F3 43 79 FB 0B 05 F3 54 CC 0A B7 16 78 8D 9C 0D 67 1C 30 1A E8 +5B 8C 66 45 60 BE F8 C9 86 42 97 EA 1D 21 34 89 D8 34 B0 E5 A3 19 F8 2B C6 AC 90 B5 F9 3C 51 68 +E5 82 C9 0F CD A9 0D E1 1F 00 E2 27 E3 C0 C9 E4 6E C6 29 C0 79 85 CA DC 07 4E C3 10 77 63 37 64 +CC 0F E5 D8 C2 EF 80 E7 C9 91 FD 37 F5 DC 74 57 85 45 61 CF FF 09 F6 DC 46 14 F8 86 7A EE 0F BA +A0 C7 0D C0 1D 14 1E 3C BD 2F FC 54 3D F7 3F 2C C9 02 A2 21 7F 14 E6 5F D1 26 EE C5 84 11 35 17 +70 FD BE 98 30 9F E9 96 75 18 AD 9E BB CE A6 C0 A8 F6 70 57 01 67 5B 16 FB 22 50 DE 99 BF 64 E8 +A8 9B C0 EC 31 D8 C4 13 EA B9 9F B1 2C 33 B2 A9 66 14 A6 E7 8F 01 1F DD 47 99 8F 62 9F 78 88 C8 +94 1E 15 F9 FF 8B 7D 5F CD B7 31 31 BD 9D 61 65 58 CE 26 B6 62 DA 63 1D 51 F9 6A EE C6 04 12 DB +84 BF AF 99 45 F8 BB ED 5E BA 34 6C 8F 75 44 B9 C2 B5 16 BB 04 A4 8B 90 57 13 96 B7 05 9B ED 68 +87 C8 C8 57 CF FD 0B F6 86 9E 84 7A 6E 41 BB 51 61 B9 84 A5 EB 6E 0D DB 11 09 A2 0C FF BF 1C 18 +6A 49 DC 3D 11 97 DF 1B 86 76 27 69 C7 BE 10 D5 54 F3 68 4C 1E 03 1B 11 E4 7F 53 CF 1D D5 05 1D +D6 61 56 DF DD 45 13 30 46 3D F7 2D 0B B2 DA C1 7A CF 0F AD 88 4B B0 43 3C C0 82 FD 5C 2F 1F 83 +81 25 B6 AC AC 6D 11 C5 B0 33 1B 7B 16 C9 1D 18 D7 BF AE E0 BE B0 BE 0D 9C 8F 69 97 55 58 25 5F +FC E4 09 18 7B 8A 2D FC 5C 3D B7 A9 2B 15 C3 7A 3F B7 A8 CB 1D 61 FB AC C1 1A F9 A1 83 EC 52 A0 +BF 2D 99 74 FF C1 69 EB C1 0B A6 5D 4B BB 93 C1 2A 1F 36 7B FE 37 80 33 2D CA FB A3 7A 6E B7 22 +5B C2 FA 7F B4 A4 0F 98 F6 7D C3 96 30 9B E4 7F D5 A2 2C B0 D7 6B 6D F6 7E B0 D8 4E 9B E4 5F 81 +D9 D9 B1 81 2D D8 F3 AF 7C 20 94 67 03 CD 98 76 5A 81 35 F2 D5 73 1F 01 CA 29 EE 06 28 F0 3F C0 +43 79 DF DF 5B 88 ED BE 40 BD 9A 31 FB 01 6D F1 50 78 DD 62 16 39 CD 18 93 F6 23 36 F4 02 FB B9 +17 8A B9 01 6F 02 E7 A9 E7 7E 45 3D 77 12 26 C3 D4 2A 8C DB 75 B5 4D BD 42 79 41 28 FF 2C F5 DC +49 EA B9 5F C1 6C 79 BE 59 40 7D EB C4 43 74 2B DC 8B 31 F6 95 BD 6D AE D7 02 D7 AB E7 6E EB A0 +EE D1 51 AC 26 F7 26 57 FC E4 20 E0 C7 18 17 F8 8E 10 09 F1 10 6D 1C 6E 47 37 E0 3D C0 53 CF 4D +46 72 D1 6E 40 FC A4 8B 31 47 1F D1 E6 EB C8 88 87 68 AD 9A F9 43 50 02 63 23 E9 75 C4 03 84 7A +8D 21 67 11 8D 94 78 D8 0F F9 F3 C5 4F 7E 1A 18 6E 2B D8 61 7F 40 FC 64 05 26 40 23 D2 CC 59 07 +C4 E1 05 FF AA E8 AD BE 9A FF 2F 70 90 FC 1E C4 41 F2 7B 10 07 C9 EF 41 1C 24 BF 07 71 90 FC 1E +44 1C 40 FC 15 FD 91 CC 6C 94 B3 50 FA 01 7F 42 32 0B D5 9B DA 08 20 8B 96 1D 4D 26 B6 08 61 23 +E2 FC 08 74 2E AA 27 80 AE 25 16 FC 40 AF 9E BA 21 2B 50 40 A8 4E 4C C7 61 32 EA 0C 41 83 35 68 +FC 4E 9D 39 A9 D5 93 4C AA 93 8F 20 A4 08 62 B3 88 65 6E 41 39 09 E1 61 E2 A9 FB F4 AA 8A 4E A3 +CE A5 BA FE 34 24 98 08 72 2E E8 56 90 75 A4 A9 D6 D9 EE C6 D6 32 FE 8A 0F 41 7A 16 22 67 A2 64 +10 79 9A DD 25 3F D5 6B 27 6E 33 ED A9 1F 4B 46 EF 40 58 AD 9E 7B 4B 6B BD 9A E5 E7 10 38 37 21 +34 A8 E7 DE DE AE DD 8E DC 8D EA D7 51 8E 02 EA 29 49 DD AF 57 55 6C 96 EA E5 E3 10 67 16 30 0A +65 23 8E 3C CE A6 41 4B 74 DE 84 34 80 DC 5B 7F 08 69 FD 26 AA 9F 44 64 17 C8 E3 34 97 DC A5 D7 +4E 6C 16 EE 7A 78 10 7D 53 7F 04 F2 3D 04 DE 45 63 67 6B E5 A4 57 C4 5F 71 32 64 D6 61 F6 44 1D +DA 1F A3 F1 0E 64 4E 69 BD 51 7E F2 7E CC A1 03 6D B1 0D 71 CE D7 19 93 9F 0D CB 28 C6 D0 B5 85 +F6 CB F9 9D 88 73 BA CE 98 DC A1 AF 8C F8 89 AF 83 74 E4 2E BE 03 63 A4 FB 93 2C 4C 8C C4 91 A7 +80 FC 23 42 5E 25 96 3A 43 AF AE F8 A7 2C 4C 4C C0 91 C7 50 1E D5 4A B7 35 FF A7 D4 D4 5F 86 EA +FD C0 2F D5 73 2F 6B D3 EE ED 61 BB C3 5D 3A D9 4C 26 7D 26 F1 F8 79 A8 2E 20 3F D1 87 EA EF E9 +CB 34 00 52 F2 67 60 64 9E 2E 6B E9 D7 EF 53 0E A5 A9 9B 31 C4 6F 04 AE 47 F5 4B 18 8F E0 61 38 +E9 FC A4 CD 03 80 DF A3 72 0E A2 97 62 6C 35 47 42 7C 96 51 3E 31 11 43 FC 1B 88 7C 11 62 A7 A2 +F2 00 30 08 0D F2 DD 07 1D 60 13 C8 25 28 D3 41 5E 07 FA A3 C1 BC 0E C8 CD D2 73 63 D8 B8 EB 88 +65 46 12 E8 19 20 FF 85 92 C0 73 9F 31 52 E5 76 0C F1 EB 40 AE 44 65 16 B0 1E 38 9E 74 C9 B7 F7 +2E BB 53 0C 04 9E 04 BD 08 F8 1A 9A 71 D1 58 0B AA 3F 0C DB 51 8F 52 16 72 F2 32 48 23 A9 F7 76 +90 92 2A 60 24 CA A3 08 67 A1 94 61 B8 1D CB AE 5D F3 E2 A8 5C 0C 0A AA DF D4 CA F2 FB 01 A4 7A +F9 5F 11 67 8D F9 2D 0F E9 92 6B 74 F6 E7 DE 01 90 9A E4 31 28 77 82 8E 36 A4 38 E5 A1 AC FF 56 +CF FD 05 80 D4 26 2A 49 89 0B 9C 2C 0B 13 23 75 66 F9 FA 36 64 7E 4D BD B2 C7 CC 35 93 20 DC 0B +D2 E1 59 27 52 57 17 83 3E 31 20 4D 89 F3 2B 9D 5E BE 09 D8 80 49 C3 D2 16 46 67 0D AE D6 CA 29 +4F 1B D9 0F 36 22 41 02 E9 A0 3D 85 41 09 B4 32 D4 FD D7 A6 ED F5 D7 A3 3A 10 58 AD 9E EB B6 EA +79 4F DD C3 CC AE D8 A1 A0 E2 27 CB 01 08 32 B3 B5 72 EA EB 21 67 71 94 65 C0 E7 E2 A0 E6 3C 12 +47 73 21 F2 87 A6 5F 62 6B 9F 9D 40 7F F9 E9 F2 C3 28 29 C9 FE B2 2D 4B 7C 88 D7 C2 D7 21 A1 8E +C6 49 49 E4 02 F1 13 6D 49 FC 00 E8 4B 4C 8E C7 F4 42 80 16 1A FF FC 38 84 E7 C1 C4 32 BF 21 88 +01 DA 61 E2 08 AD A8 C8 88 9F 5C 02 DC 48 5A D7 8B 9F 5C 0B F2 1E 12 AC 03 7E A6 33 CA D7 C8 CF +7E 3D 00 E3 67 93 61 67 3A B7 FF 2B 2D CF 84 23 43 57 CE 5E 01 F4 D5 F6 9D 06 50 0D 87 69 6D B7 +11 A4 B3 2B B6 43 F8 1C 35 49 92 76 10 73 BE 2D 7E 68 AF 13 A7 4F B8 87 73 72 9C 6C C6 6F 4D B7 +E6 2C 0B 1B BA 19 38 96 52 1D 48 2E B9 55 7B 37 0E 71 9A D0 00 90 AC D9 F8 D0 F0 75 72 87 D1 38 +81 B4 8D 01 0B 74 DE BC A0 F5 53 AA 34 4D 7C 1F B1 6F 2D C1 F7 29 71 52 98 A8 93 53 CD 7F 99 4C +04 E6 C8 E2 FA 31 68 6B 24 E0 07 3A B7 62 57 AE E2 96 2D 30 2C 0D F4 97 AA 2A 87 61 C5 9E DE 27 +C1 9E 5F 71 98 E1 D0 79 A3 C3 2A 01 43 71 10 60 00 48 6E EB 31 67 4B 8B C5 31 E9 50 8E 43 E2 E3 +81 C7 01 4C 6F 77 8E 05 60 67 BF 77 E8 9B C9 46 70 1F 25 BE 5F A2 9E D7 12 0A 1A 19 4A 0C 6F 8A +FE 1D 64 0C 4A 99 56 BA 0F 16 D9 C2 7D 42 E7 4C F9 07 70 8B 54 55 7D 9B C3 3F 71 04 B1 F4 D1 88 +7E 0B 98 46 9A CB 78 E7 CF F3 19 3E 3E 03 0C 91 C5 CB 8E 6D 9D 85 39 47 8C 25 20 0E 34 EA BC 79 +81 D4 2C 57 54 40 F2 D2 91 69 11 E9 C9 94 97 C3 37 17 D2 91 63 D7 CC 49 9B F0 93 3B 00 A5 5F BF +23 F5 F2 0B F7 70 E0 72 00 13 66 A3 CE 54 F1 FD 12 01 A1 24 F6 C5 F0 F7 B7 F5 DA 89 CD ED CB 1F +99 3B 6F 56 35 FB FE 9F E1 6B F6 34 9E AB A4 AA CA 01 90 BB 57 0E 92 9A FA 2F 4B 5D 5D B7 32 FE +49 5D 5D 4C FC E4 0F C5 AF 3F 57 E7 CD 0B 74 F6 E7 DE D1 CA B2 D5 48 E8 1A 22 3A 3E FC 4F 5A 0F +40 10 AB 90 AA 2A 47 AA 1A E2 04 8E 09 82 96 B0 AD 69 CD 4E 4B 47 8B BF FC D3 90 1D 26 F4 2B 85 +2B D4 9A C9 E4 62 59 58 FF F1 D6 AF 6B 12 57 4A F5 F2 71 6A C6 96 97 80 81 EC DA D9 9A 9F 4D 16 +D7 1F 2F 7E FD E7 01 E2 A8 7E 0F 91 F3 80 EB 60 D8 17 F0 93 4D E4 A6 9D DF DB F3 AA FA 2B F1 93 +7F 00 8E 6C 2D A7 84 B6 FA F8 4F 20 98 8D E8 14 86 8F 7F 53 AA EB 9F A2 AF 4E 44 39 84 F7 4B AE +10 B8 48 8B DB B4 CE 61 6B 89 07 CC 05 FD AA F8 C9 E7 50 5E 02 86 23 61 AE 66 D5 95 E1 EB F7 10 +59 84 72 27 C3 C7 57 42 53 1F E0 18 F3 9B 98 F6 CC 9A FA 06 7E F2 AF C0 68 70 56 89 9F CC 4E B5 +87 14 AC CF 0C 37 41 75 F2 09 84 B3 71 F4 79 F1 13 CF 83 F4 03 19 85 C8 56 59 52 77 12 D2 67 1E +CA 23 20 D5 E2 27 2A C1 79 37 9C 31 39 E2 27 6E 70 B4 B2 FC 77 66 AA C7 36 CC 14 6D 14 D0 02 F2 +5D 1A D7 E4 3B 9B 6E 40 B9 1F 93 BF 32 7B 83 6E CF 0E 31 EA 4D DA 82 F2 05 4C B2 D1 A3 10 BD 04 +38 04 78 0D 8D 7F AB CB C4 03 EA 95 2F 08 A7 72 1B 81 D3 10 AE 44 B8 08 78 15 B8 49 2B CB 17 03 +50 59 7E 2F 22 37 63 76 A2 8E C7 10 BF 13 74 B6 7A 65 0F 81 79 52 40 6C 1A C8 4A F3 91 4F 82 B4 +80 14 1C D5 A2 A0 48 E6 52 44 C3 9D 39 39 25 E4 64 13 2A 97 EA 55 15 9B 75 86 FB 28 AA D7 01 4D +E6 77 9D 08 38 A8 AC 20 D6 B2 A4 75 33 45 AA 1A E2 1C B9 6D 3C 4E 66 00 DB D3 CF B4 7D 60 B5 59 +6C BC AC 9E 7B B2 F8 2B 8E 41 83 D1 68 E6 79 9D 39 E5 BD 7C C5 A4 AA 21 CE 51 EF 8F 23 23 23 70 +82 97 99 31 E5 95 B6 C4 CB A2 07 CF 24 9D 09 74 66 F9 33 B9 6B F8 25 38 C3 4F 25 90 94 7A 93 9E +EF AC E1 66 E5 19 1F 43 09 6B 75 7A 59 87 E9 D5 E5 EE 95 7D 29 69 39 8D B8 64 08 1A 9F 6B 7D 4E +E5 97 5B 98 18 49 4C 8F A5 74 C0 6A B6 ED 28 A5 6F FC 04 44 B7 E8 D5 65 AF 4A 6D 43 29 E9 0F C6 +93 49 EF D2 CA 29 7B CD A7 6C 64 30 8A 40 36 68 A5 BB 47 18 AC F8 75 83 71 FA 8C 25 23 03 C8 C4 +D7 B4 4E D5 0B D9 C9 CA 27 7F 9F 15 22 80 D4 26 86 90 6A 51 F5 2A BA E4 38 DB 1B 71 40 A4 58 97 +DA 86 52 52 B2 15 FA 34 13 6D 7E E6 FD 8A 83 56 CD 1E C4 41 F2 7B 10 5D 22 5F AA AA 1C 59 52 D7 +69 96 56 A9 4D 0C 91 BB 57 0E EA F0 37 DF 2F 91 DA 86 D2 D6 B5 C0 E2 BA 43 F3 D7 01 02 22 F7 3C +7C 64 87 F5 EF 5E D9 57 6A 1B 4A 25 6F 19 2D BE 5F D2 D1 7A 42 6A 1B 4A A5 B6 A1 B4 7D D9 BA C1 +E2 D7 75 18 BA D4 AA 5F 5D 5D 0C 40 16 3C 34 54 EE 5E B9 87 F7 9D DC 53 37 50 16 D5 0F EB 48 46 +21 28 F6 81 FB 77 4C 00 C4 CD 40 7F 84 06 54 7F AC 5E 79 22 57 36 F9 25 CC FA E0 18 4C FE E1 35 +C0 2A 88 CD 57 6F D2 96 B0 CC 2F 80 4B 41 6F 00 F9 22 26 FD FA 3F 81 85 78 EE 2D F8 89 5B 40 E6 +62 A2 19 DF 46 E4 86 D0 D4 DB AC 9E 5B 2A 7E 72 35 70 2A 2A 17 6A 65 D9 6F DA 5C FB 15 60 10 8D +6B 86 67 4D 17 C6 FE AF CF 02 6F E1 B9 C7 50 9D 9C 86 70 27 C6 CC 1B 00 2F A0 BA 8A 4C 9F DB 5B +67 21 7E A2 D6 98 04 E4 D6 70 7A 78 06 F0 3E 48 AD 7A 65 73 A5 66 F9 89 E0 54 A3 9C 83 E9 00 9B +40 6E 56 AF AC A8 10 A6 62 7B FE 89 C0 6D 21 A9 01 CA 04 90 5F 49 75 FD 67 20 34 4B A0 B7 62 0E +13 58 0B FA 3C 66 EE 3B 17 49 77 10 A2 23 3F C0 E4 E8 69 02 06 A3 D2 80 9F 98 09 F2 1D 0C F1 DB +81 41 21 F1 6D B1 DC BC B4 AE B0 91 EA E5 E3 30 F3 FA 23 18 31 36 97 74 C3 E1 82 B0 6C 02 BF 6E +10 C2 77 30 1D E3 45 E0 59 E0 44 44 AE 27 D6 D2 81 4B BA DE 8A 21 BE C9 E8 21 0D E2 AF E8 8F 3A +BF 35 6D 67 1B C6 B8 38 02 B4 56 6A EA 8B CA 74 52 FC B0 23 7A 1B 3B 52 C3 08 F4 DF 30 C9 42 1D +24 B8 02 B2 B6 97 96 4F A0 72 AE 7A EE 38 F5 CA 4F 87 D8 28 20 85 CA 67 43 AB 63 5B AC 27 93 39 +1E DE 3D 1C 47 4E 09 7B F1 55 E1 85 16 30 34 35 84 C6 C1 87 62 CE CC 6D A3 75 B0 CC 14 E1 A2 9C +5E B1 69 6D 0A B4 79 9F BD 41 CE 32 F5 2A 9A 48 A7 4E 07 39 5F 3D 77 AC 7A EE 99 94 A4 8E 03 76 +21 9C 2D B5 89 FC 15 EE 26 34 76 22 8D 83 3F 84 06 A7 68 E5 E4 24 9A B9 16 63 AD 4C 40 6C 04 9E +7B 02 E6 1C 5F 50 BD 23 7F 28 EC 0C C5 92 BF 8B 98 73 87 CE AD D8 A5 33 CB D7 87 BB 38 80 B4 CE +FD D5 AB 68 D2 CA B2 55 B9 CF 93 DE C4 1C 66 10 63 FB EE FC E3 35 6A 74 D6 D4 D7 D5 F3 5A F4 9A +B2 30 3F BE 7C C8 68 26 4B B5 A2 22 A3 F3 26 A4 D1 A0 9D 7F BD 5E 33 65 1D F0 37 E0 63 E2 2F 0B +4F 71 D6 69 98 5E F8 07 94 29 02 62 7A 29 9F 02 FE C1 D0 E6 55 60 4C BE D9 3D 04 00 B3 6D 29 7F +07 A0 59 8F CD D3 6F A9 56 4E 7A 45 E7 4D 48 B7 59 64 9D 11 D6 5C A0 DE A4 9D 66 F1 F8 EE BD 98 +5D B9 C3 A8 5E 51 70 3E B7 62 E7 F9 6F EA F4 B2 5C 02 B7 58 EC 2F 04 01 B4 D9 46 93 EA FA 99 88 +7A 98 21 2A 2B DF 3C 04 63 4E 5E AF D0 0E 92 22 C9 40 50 48 A7 73 79 75 94 D7 F6 E8 4F AA CB 11 +B9 09 8D 5D 20 FE 8A 67 80 D1 20 3F 42 78 0F D5 F9 2C 7A F0 0C 24 33 14 95 3E 40 BD 56 54 64 00 +A4 A6 7E 3A 1A CC 01 39 11 C8 6E 54 18 FD 1C 69 7F 15 D1 97 F7 54 2F 1B 58 2D F5 E2 67 7D 7E 87 +B5 91 D1 32 02 93 D6 7D 9F B0 BA C8 92 85 F5 67 E1 E8 02 60 37 CA B3 38 6A AC 9D 2A E7 51 F0 49 +A1 6A 6C E7 71 CD CD 5A E2 DA 87 3D 2C EA CE 32 D0 9B CC D0 93 31 A6 60 47 1E 24 9D 7E 0F C7 99 +4F 26 98 86 88 E9 14 62 86 29 59 94 38 15 95 C5 20 CD 08 AB 41 B7 84 FA 9D 0B 74 38 33 EB A0 95 +A9 D0 52 F2 24 A2 7B 66 AA CD 50 F0 C1 36 76 57 B8 4E 30 03 04 54 2E 6A 3B F4 88 9F DC 44 E1 C7 +B4 6E 07 86 41 EC 38 CC 89 40 90 89 7F 04 69 3F 2B D3 CA B2 D5 E2 27 37 62 02 94 47 03 EF F3 F6 +21 AB 74 DE 84 B4 F8 C9 0D 88 4C 05 DD 0D 6C 67 77 A9 99 11 05 32 23 AC 5D A6 33 CA 7F DD 46 BF +37 28 98 7C 5D 07 8C 43 F5 7E F5 42 63 5E 17 61 79 91 E5 1C 11 4A FD B8 D4 D5 F5 11 90 70 53 7D +78 11 42 8C 8B 49 C0 8D E2 AF 38 46 16 2F 3B 16 D1 9B C2 DF F2 E7 C5 CB 31 DE 0F E3 81 47 B2 EE +1A C0 0A D0 8F 00 A3 51 79 B8 75 4F 42 B3 9E 12 72 5A 76 9D 20 7E FD B9 EC E9 5D D0 09 E4 29 F3 +22 D7 C9 A2 07 CF 94 AA 86 B8 D4 D4 5F 26 7E B2 5E 16 D4 9F 54 44 3B 2D 93 AF 7A 5F F8 FA 23 B6 +F6 79 1F 3F B9 1D 95 87 8B 93 21 3F 0E DF 4D 86 CC 06 32 B1 F5 E4 D2 09 B4 1F 93 03 5D DE E6 53 +6E E7 4C 65 45 EB 7B 87 5C 19 D1 AC 07 C5 7F 92 6A DA 8A 9F FC 00 F4 F7 45 E9 37 B4 79 01 E8 B3 +C0 58 82 E0 69 86 37 6D 0B A7 C2 93 89 E9 5D C5 88 2A 90 FC 74 0B B0 01 D5 F6 29 B4 D2 DA 8C F1 +20 68 04 D0 4A F7 97 88 FE 3B B0 16 D3 4B DF 45 F4 36 CC D9 56 1B 42 39 80 6E 0E EB ED 71 D8 8B +56 96 2D 0B ED F6 7F C2 CC A3 57 85 CF 8C 0D E1 5F 0E 87 B5 3C 11 5E EB 0D 32 F1 5C 0A B0 54 C9 +63 98 05 E1 6B C4 72 91 8E EA 95 27 8C 4B 0B 6B 30 6B 95 2D 08 DF 47 79 14 D8 40 20 A9 90 96 2D +E1 E7 3D C6 74 F3 E0 6E B9 00 E4 0E CC EC 2A 00 9E 03 F9 2E 43 53 93 3B E7 B1 3D FE 0F E4 2C B5 +B8 3A B8 3B 5D 00 00 00 00 49 45 4E 44 AE 42 60 82 AC $EndBitmap +EndData +$EndBitmap +Wire Wire Line + 5350 4600 5250 4600 +Wire Wire Line + 5350 4400 5250 4400 +$Comp +L GND #PWR09 +U 1 1 550CF9FF +P 5350 4700 +F 0 "#PWR09" H 5350 4700 30 0001 C CNN +F 1 "GND" H 5350 4630 30 0001 C CNN +F 2 "" H 5350 4700 60 0000 C CNN +F 3 "" H 5350 4700 60 0000 C CNN + 1 5350 4700 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5350 4400 5350 4700 +Connection ~ 5350 4600 +Text Notes 5050 4800 0 40 ~ 0 +chassis ground +$Comp +L GND #PWR010 +U 1 1 550CFBE5 +P 5350 6250 +F 0 "#PWR010" H 5350 6250 30 0001 C CNN +F 1 "GND" H 5350 6180 30 0001 C CNN +F 2 "" H 5350 6250 60 0000 C CNN +F 3 "" H 5350 6250 60 0000 C CNN + 1 5350 6250 + 1 0 0 -1 +$EndComp +Text Notes 5150 6400 0 40 ~ 0 +chassis ground +$Comp +L PWR_FLAG #FLG011 +U 1 1 550CFBF4 +P 5350 6150 +F 0 "#FLG011" H 5350 6245 30 0001 C CNN +F 1 "PWR_FLAG" H 5350 6330 30 0000 C CNN +F 2 "" H 5350 6150 60 0000 C CNN +F 3 "" H 5350 6150 60 0000 C CNN + 1 5350 6150 + 1 0 0 -1 +$EndComp +Wire Wire Line + 5350 6150 5350 6250 +$Comp +L CONN_1 P5 +U 1 1 550D1AD1 +P 5000 6150 +F 0 "P5" H 5080 6150 40 0000 L CNN +F 1 "GND" H 5000 6205 30 0001 C CNN +F 2 "mfk-AVA-20ga" H 5000 6150 60 0001 C CNN +F 3 "" H 5000 6150 60 0000 C CNN + 1 5000 6150 + -1 0 0 1 +$EndComp +Wire Wire Line + 5150 6150 5350 6150 +$Comp +L C C2 +U 1 1 550D2A54 +P 6900 5500 +F 0 "C2" H 6900 5600 40 0000 L CNN +F 1 "1u" H 6906 5415 40 0000 L CNN +F 2 "mfk-C_4.0_2.5_2.5_0.5" H 6938 5350 30 0001 C CNN +F 3 "TDK FK18X5R1A105K" H 6900 5500 60 0001 C CNN + 1 6900 5500 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6900 5150 6900 5300 +$Comp +L DGND #PWR012 +U 1 1 550D2ACA +P 6900 5800 +F 0 "#PWR012" H 6900 5800 40 0001 C CNN +F 1 "DGND" H 6900 5730 40 0000 C CNN +F 2 "" H 6900 5800 60 0000 C CNN +F 3 "" H 6900 5800 60 0000 C CNN + 1 6900 5800 + 1 0 0 -1 +$EndComp +Wire Wire Line + 6900 5800 6900 5700 +NoConn ~ 8300 4400 +NoConn ~ 8300 4850 +Connection ~ 8450 5000 +Wire Wire Line + 8450 3750 8450 4100 +Wire Wire Line + 7600 3650 7600 3750 +Connection ~ 7600 3750 +Wire Wire Line + 6900 4100 6750 4100 +Wire Wire Line + 6150 4150 6150 4400 +Connection ~ 8450 4100 +Wire Wire Line + 8300 5150 8450 5150 +Connection ~ 8450 5150 +Wire Wire Line + 6900 5000 6400 5000 +Wire Wire Line + 6400 5000 6400 6150 +$Comp +L CONN_3 P3 +U 1 1 551F2247 +P 2750 1800 +F 0 "P3" V 2700 1800 50 0000 C CNN +F 1 "PWR" V 2800 1800 40 0000 C CNN +F 2 "mfk-TE_282834-3" H 2750 1800 60 0001 C CNN +F 3 "" H 2750 1800 60 0000 C CNN + 1 2750 1800 + -1 0 0 -1 +$EndComp +Wire Wire Line + 3650 1800 3100 1800 +Wire Wire Line + 3100 1700 3350 1700 +Wire Wire Line + 3150 1250 3150 1700 +Text Label 3150 1250 3 60 ~ 0 +V_MOT +Wire Wire Line + 6750 4100 6750 3750 +Wire Wire Line + 6750 5150 6750 6150 +Text Label 6750 6150 1 60 ~ 0 +V_MOT +$Comp +L PWR_FLAG #FLG013 +U 1 1 551F243F +P 3350 1650 +F 0 "#FLG013" H 3350 1745 30 0001 C CNN +F 1 "PWR_FLAG" H 3350 1830 30 0000 C CNN +F 2 "" H 3350 1650 60 0000 C CNN +F 3 "" H 3350 1650 60 0000 C CNN + 1 3350 1650 + -1 0 0 -1 +$EndComp +Connection ~ 3150 1700 +Wire Wire Line + 3350 1700 3350 1650 +$Comp +L JUMPER J1 +U 1 1 552023B1 +P 4750 1800 +F 0 "J1" H 4750 1950 60 0000 C CNN +F 1 "PWR_BR" H 4750 1720 40 0000 C CNN +F 2 "mfk-SIL-2" H 4750 1800 60 0001 C CNN +F 3 "~" H 4750 1800 60 0000 C CNN + 1 4750 1800 + 1 0 0 -1 +$EndComp +$Comp +L +5VD #PWR014 +U 1 1 552023F3 +P 4400 1450 +F 0 "#PWR014" H 4400 1400 20 0001 C CNN +F 1 "+5VD" H 4400 1550 50 0000 C CNN +F 2 "" H 4400 1450 60 0000 C CNN +F 3 "" H 4400 1450 60 0000 C CNN + 1 4400 1450 + -1 0 0 -1 +$EndComp +Wire Wire Line + 4450 1800 4400 1800 +Wire Wire Line + 4400 1800 4400 1450 +Text Label 5100 1350 3 60 ~ 0 +V_MOT +Wire Wire Line + 5050 1800 5100 1800 +Wire Wire Line + 5100 1800 5100 1350 +Text Notes 4000 2000 0 60 ~ 0 +Use jumper to power motor from +5VD. +$EndSCHEMATC diff --git a/samples/KiCad/nrf-bga.kicad_pcb b/samples/KiCad/nrf-bga.kicad_pcb new file mode 100644 index 00000000..ddd092ce --- /dev/null +++ b/samples/KiCad/nrf-bga.kicad_pcb @@ -0,0 +1,928 @@ +(kicad_pcb (version 4) (host pcbnew "(2014-08-05 BZR 5054)-product") + + (general + (links 36) + (no_connects 0) + (area 146.9984 92.8984 164.465656 112.3572) + (thickness 1.6) + (drawings 0) + (tracks 108) + (zones 0) + (modules 12) + (nets 54) + ) + + (page A4) + (layers + (0 F.Cu signal) + (31 B.Cu signal) + (32 B.Adhes user) + (33 F.Adhes user) + (34 B.Paste user) + (35 F.Paste user) + (36 B.SilkS user) + (37 F.SilkS user) + (38 B.Mask user) + (39 F.Mask user) + (40 Dwgs.User user) + (41 Cmts.User user) + (42 Eco1.User user) + (43 Eco2.User user) + (44 Edge.Cuts user) + (45 Margin user) + (46 B.CrtYd user) + (47 F.CrtYd user) + (48 B.Fab user) + (49 F.Fab user) + ) + + (setup + (last_trace_width 0.1016) + (trace_clearance 0.1016) + (zone_clearance 0.2032) + (zone_45_only no) + (trace_min 0.1016) + (segment_width 0.2) + (edge_width 0.1) + (via_size 0.889) + (via_drill 0.635) + (via_min_size 0.889) + (via_min_drill 0.508) + (uvia_size 0.508) + (uvia_drill 0.127) + (uvias_allowed no) + (uvia_min_size 0.508) + (uvia_min_drill 0.127) + (pcb_text_width 0.3) + (pcb_text_size 1.5 1.5) + (mod_edge_width 0.15) + (mod_text_size 1 1) + (mod_text_width 0.15) + (pad_size 0.2 0.2) + (pad_drill 0) + (pad_to_mask_clearance 0) + (aux_axis_origin 0 0) + (visible_elements FFFCFF7F) + (pcbplotparams + (layerselection 0x00000_00000001) + (usegerberextensions false) + (excludeedgelayer true) + (linewidth 0.100000) + (plotframeref false) + (viasonmask false) + (mode 1) + (useauxorigin false) + (hpglpennumber 1) + (hpglpenspeed 20) + (hpglpendiameter 15) + (hpglpenoverlay 2) + (psnegative false) + (psa4output false) + (plotreference true) + (plotvalue true) + (plotinvisibletext false) + (padsonsilk false) + (subtractmaskfromsilk false) + (outputformat 5) + (mirror true) + (drillshape 0) + (scaleselection 1) + (outputdirectory pdfs/)) + ) + + (net 0 "") + (net 1 "Net-(C1-Pad1)") + (net 2 GND) + (net 3 "Net-(C2-Pad1)") + (net 4 "Net-(C3-Pad1)") + (net 5 "Net-(C4-Pad2)") + (net 6 "Net-(D1-Pad1)") + (net 7 +BATT) + (net 8 SWDIO) + (net 9 SWCLK) + (net 10 LED) + (net 11 "Net-(U1-PadC1)") + (net 12 "Net-(U1-PadD1)") + (net 13 "Net-(U1-PadG1)") + (net 14 "Net-(U1-PadE2)") + (net 15 "Net-(U1-PadF2)") + (net 16 "Net-(U1-PadG2)") + (net 17 "Net-(U1-PadE3)") + (net 18 "Net-(U1-PadF3)") + (net 19 "Net-(U1-PadG3)") + (net 20 "Net-(U1-PadH4)") + (net 21 "Net-(U1-PadA5)") + (net 22 "Net-(U1-PadB5)") + (net 23 "Net-(U1-PadC5)") + (net 24 "Net-(U1-PadH5)") + (net 25 "Net-(U1-PadA6)") + (net 26 "Net-(U1-PadB6)") + (net 27 "Net-(U1-PadC6)") + (net 28 "Net-(U1-PadH6)") + (net 29 "Net-(U1-PadA7)") + (net 30 "Net-(U1-PadB7)") + (net 31 "Net-(U1-PadC7)") + (net 32 "Net-(U1-PadE7)") + (net 33 "Net-(U1-PadF7)") + (net 34 "Net-(U1-PadG7)") + (net 35 "Net-(U1-PadH7)") + (net 36 "Net-(U1-PadA8)") + (net 37 "Net-(U1-PadD8)") + (net 38 "Net-(U1-PadE8)") + (net 39 "Net-(U1-PadF8)") + (net 40 "Net-(U1-PadG8)") + (net 41 "Net-(U1-PadH8)") + (net 42 "Net-(U1-PadE9)") + (net 43 "Net-(U1-PadF9)") + (net 44 "Net-(U1-PadH1)") + (net 45 "Net-(U1-PadJ3)") + (net 46 "Net-(U1-PadJ4)") + (net 47 "Net-(U1-PadJ5)") + (net 48 "Net-(U1-PadJ6)") + (net 49 "Net-(U1-PadJ7)") + (net 50 "Net-(U1-PadJ8)") + (net 51 "Net-(U1-PadH9)") + (net 52 "Net-(C5-Pad1)") + (net 53 "Net-(ANT1-Pad2)") + + (net_class Default "This is the default net class." + (clearance 0.1016) + (trace_width 0.1016) + (via_dia 0.889) + (via_drill 0.635) + (uvia_dia 0.508) + (uvia_drill 0.127) + (add_net +BATT) + (add_net LED) + (add_net "Net-(C1-Pad1)") + (add_net "Net-(C2-Pad1)") + (add_net "Net-(C3-Pad1)") + (add_net "Net-(C4-Pad2)") + (add_net "Net-(C5-Pad1)") + (add_net "Net-(D1-Pad1)") + (add_net "Net-(U1-PadA5)") + (add_net "Net-(U1-PadA6)") + (add_net "Net-(U1-PadA7)") + (add_net "Net-(U1-PadA8)") + (add_net "Net-(U1-PadB5)") + (add_net "Net-(U1-PadB6)") + (add_net "Net-(U1-PadB7)") + (add_net "Net-(U1-PadC1)") + (add_net "Net-(U1-PadC5)") + (add_net "Net-(U1-PadC6)") + (add_net "Net-(U1-PadC7)") + (add_net "Net-(U1-PadD1)") + (add_net "Net-(U1-PadD8)") + (add_net "Net-(U1-PadE2)") + (add_net "Net-(U1-PadE3)") + (add_net "Net-(U1-PadE7)") + (add_net "Net-(U1-PadE8)") + (add_net "Net-(U1-PadE9)") + (add_net "Net-(U1-PadF2)") + (add_net "Net-(U1-PadF3)") + (add_net "Net-(U1-PadF7)") + (add_net "Net-(U1-PadF8)") + (add_net "Net-(U1-PadF9)") + (add_net "Net-(U1-PadG1)") + (add_net "Net-(U1-PadG2)") + (add_net "Net-(U1-PadG3)") + (add_net "Net-(U1-PadG7)") + (add_net "Net-(U1-PadG8)") + (add_net "Net-(U1-PadH1)") + (add_net "Net-(U1-PadH4)") + (add_net "Net-(U1-PadH5)") + (add_net "Net-(U1-PadH6)") + (add_net "Net-(U1-PadH7)") + (add_net "Net-(U1-PadH8)") + (add_net "Net-(U1-PadH9)") + (add_net "Net-(U1-PadJ3)") + (add_net "Net-(U1-PadJ4)") + (add_net "Net-(U1-PadJ5)") + (add_net "Net-(U1-PadJ6)") + (add_net "Net-(U1-PadJ7)") + (add_net "Net-(U1-PadJ8)") + (add_net SWCLK) + (add_net SWDIO) + ) + + (net_class ANT "" + (clearance 0.1016) + (trace_width 0.254) + (via_dia 0.889) + (via_drill 0.635) + (uvia_dia 0.508) + (uvia_drill 0.127) + (add_net GND) + (add_net "Net-(ANT1-Pad2)") + ) + + (module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B59067) + (at 153.75 102.5 270) + (descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0402") + (path /54B59137) + (attr smd) + (fp_text reference C1 (at 0 -1.7 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 12p (at 0 1.7 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (pad 2 smd rect (at 0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (model Capacitors_SMD/C_0402.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B58E0D) + (at 159.004 100.711) + (descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0402") + (path /54B591B6) + (attr smd) + (fp_text reference C2 (at 0 -1.7) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 12p (at 0 1.7) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (pad 2 smd rect (at 0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (model Capacitors_SMD/C_0402.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B59E9D) + (at 159.004 102.1588) + (descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0402") + (path /54B58D67) + (attr smd) + (fp_text reference C3 (at 0 -1.7) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 100n (at 0 1.7) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 4 "Net-(C3-Pad1)")) + (pad 2 smd rect (at 0.55 0) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (model Capacitors_SMD/C_0402.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 54B58E25) + (at 154.15 106.55 90) + (descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0402") + (path /54B58DD5) + (attr smd) + (fp_text reference C4 (at 0 -1.7 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 100n (at 0 1.7 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.55 0 90) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad 2 smd rect (at 0.55 0 90) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 5 "Net-(C4-Pad2)")) + (model Capacitors_SMD/C_0402.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module SMD_Packages:SMD-0805 (layer F.Cu) (tedit 54B58D88) (tstamp 54B58E32) + (at 162.0266 104.9782 90) + (path /54B599BA) + (attr smd) + (fp_text reference D1 (at 0 -0.3175 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value LED (at 0 0.381 90) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_circle (center -1.651 0.762) (end -1.651 0.635) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.508 0.762) (end -1.524 0.762) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.524 0.762) (end -1.524 -0.762) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.524 -0.762) (end -0.508 -0.762) (layer F.SilkS) (width 0.15)) + (fp_line (start 0.508 -0.762) (end 1.524 -0.762) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 -0.762) (end 1.524 0.762) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.524 0.762) (end 0.508 0.762) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.9525 0 90) (size 0.889 1.397) (layers F.Cu F.Paste F.Mask) + (net 6 "Net-(D1-Pad1)")) + (pad 2 smd rect (at 0.9525 0 90) (size 0.889 1.397) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (model SMD_Packages/SMD-0805.wrl + (at (xyz 0 0 0)) + (scale (xyz 0.1000000014901161 0.1000000014901161 0.1000000014901161)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Pin_Headers:Pin_Header_Straight_1x04 (layer F.Cu) (tedit 54B58D8A) (tstamp 54B58E41) + (at 156.7942 109.1946 180) + (descr "Through hole pin header") + (tags "pin header") + (path /54B593BB) + (fp_text reference P1 (at 0 -2.286 180) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CONN_01X04 (at 0 0 180) (layer F.SilkS) hide + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -2.54 1.27) (end 5.08 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 -1.27) (end 5.08 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.08 -1.27) (end -2.54 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start 5.08 1.27) (end 5.08 -1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -2.54 -1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.08 -1.27) (end -5.08 1.27) (layer F.SilkS) (width 0.15)) + (fp_line (start -5.08 1.27) (end -2.54 1.27) (layer F.SilkS) (width 0.15)) + (pad 1 thru_hole rect (at -3.81 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 2 GND)) + (pad 2 thru_hole oval (at -1.27 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 7 +BATT)) + (pad 3 thru_hole oval (at 1.27 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 8 SWDIO)) + (pad 4 thru_hole oval (at 3.81 0 180) (size 1.7272 2.032) (drill 1.016) (layers *.Cu *.Mask F.SilkS) + (net 9 SWCLK)) + (model Pin_Headers/Pin_Header_Straight_1x04.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Resistors_SMD:R_0603 (layer F.Cu) (tedit 5415CC62) (tstamp 54B59E20) + (at 160.0454 105.0544 270) + (descr "Resistor SMD 0603, reflow soldering, Vishay (see dcrcw.pdf)") + (tags "resistor 0603") + (path /54B59A45) + (attr smd) + (fp_text reference R1 (at 0 -1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value R (at 0 1.9 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.3 -0.8) (end 1.3 -0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.3 -0.8) (end -1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.3 -0.8) (end 1.3 0.8) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.5 0.675) (end -0.5 0.675) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.5 -0.675) (end 0.5 -0.675) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 10 LED)) + (pad 2 smd rect (at 0.75 0 270) (size 0.5 0.9) (layers F.Cu F.Paste F.Mask) + (net 6 "Net-(D1-Pad1)")) + (model Resistors_SMD/R_0603.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module Crystals_Oscillators_SMD:CX2520DB (layer F.Cu) (tedit 544FEDED) (tstamp 54B58E9A) + (at 156.1084 101.3714) + (path /54B5903E) + (fp_text reference X1 (at 0 -2.25) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value CRYSTAL (at 0 2.5) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.25 1) (end 1.25 1) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.25 1) (end 1.25 -1) (layer F.SilkS) (width 0.15)) + (fp_line (start 1.25 -1) (end -1.25 -1) (layer F.SilkS) (width 0.15)) + (fp_line (start -1.25 -1) (end -1.25 1) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.9 0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (pad 2 smd rect (at 0.9 -0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (pad 3 smd rect (at 0.9 0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask)) + (pad 4 smd rect (at -0.9 -0.65) (size 1.2 1) (layers F.Cu F.Paste F.Mask)) + ) + + (module NRF51:WLCSP62 (layer F.Cu) (tedit 54B59368) (tstamp 54B59DAD) + (at 156.9212 105.1306) + (path /54B58C30) + (fp_text reference U1 (at 0 3.2) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2))) + ) + (fp_text value nRF51x22-CEAA (at 0 -3.2) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2))) + ) + (fp_line (start -1.6 -2) (end -2 -1.6) (layer F.SilkS) (width 0.2)) + (fp_line (start -2 -1.6) (end -2 2) (layer F.SilkS) (width 0.2)) + (fp_line (start -2 2) (end 2 2) (layer F.SilkS) (width 0.2)) + (fp_line (start 2 2) (end 2 -2) (layer F.SilkS) (width 0.2)) + (fp_line (start 2 -2) (end -1.6 -2) (layer F.SilkS) (width 0.2)) + (pad A1 smd circle (at -1.6 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 7 +BATT)) + (pad B1 smd circle (at -1.6 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad C1 smd circle (at -1.6 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 11 "Net-(U1-PadC1)")) + (pad D1 smd circle (at -1.6 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(U1-PadD1)")) + (pad E1 smd circle (at -1.6 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 52 "Net-(C5-Pad1)")) + (pad F1 smd circle (at -1.6 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 5 "Net-(C4-Pad2)")) + (pad G1 smd circle (at -1.6 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 13 "Net-(U1-PadG1)")) + (pad H1 smd circle (at -1.6 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 44 "Net-(U1-PadH1)")) + (pad A2 smd circle (at -1.2 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 1 "Net-(C1-Pad1)")) + (pad E2 smd circle (at -1.2 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 14 "Net-(U1-PadE2)")) + (pad F2 smd circle (at -1.2 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 15 "Net-(U1-PadF2)")) + (pad G2 smd circle (at -1.2 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 16 "Net-(U1-PadG2)")) + (pad H2 smd circle (at -1.2 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 9 SWCLK)) + (pad J2 smd circle (at -1.2 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 8 SWDIO)) + (pad A3 smd circle (at -0.8 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 3 "Net-(C2-Pad1)")) + (pad E3 smd circle (at -0.8 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 17 "Net-(U1-PadE3)")) + (pad F3 smd circle (at -0.8 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 18 "Net-(U1-PadF3)")) + (pad G3 smd circle (at -0.8 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 19 "Net-(U1-PadG3)")) + (pad H3 smd circle (at -0.8 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad J3 smd circle (at -0.8 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 45 "Net-(U1-PadJ3)")) + (pad A4 smd circle (at -0.4 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 4 "Net-(C3-Pad1)")) + (pad B4 smd circle (at -0.4 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad G4 smd circle (at -0.4 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad H4 smd circle (at -0.4 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 20 "Net-(U1-PadH4)")) + (pad J4 smd circle (at -0.4 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 46 "Net-(U1-PadJ4)")) + (pad A5 smd circle (at 0 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 21 "Net-(U1-PadA5)")) + (pad B5 smd circle (at 0 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 22 "Net-(U1-PadB5)")) + (pad C5 smd circle (at 0 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 23 "Net-(U1-PadC5)")) + (pad G5 smd circle (at 0 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad H5 smd circle (at 0 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 24 "Net-(U1-PadH5)")) + (pad J5 smd circle (at 0 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 47 "Net-(U1-PadJ5)")) + (pad A6 smd circle (at 0.4 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 25 "Net-(U1-PadA6)")) + (pad B6 smd circle (at 0.4 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 26 "Net-(U1-PadB6)")) + (pad C6 smd circle (at 0.4 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 27 "Net-(U1-PadC6)")) + (pad G6 smd circle (at 0.4 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad H6 smd circle (at 0.4 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 28 "Net-(U1-PadH6)")) + (pad J6 smd circle (at 0.4 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 48 "Net-(U1-PadJ6)")) + (pad A7 smd circle (at 0.8 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 29 "Net-(U1-PadA7)")) + (pad B7 smd circle (at 0.8 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 30 "Net-(U1-PadB7)")) + (pad C7 smd circle (at 0.8 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 31 "Net-(U1-PadC7)")) + (pad D7 smd circle (at 0.8 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad E7 smd circle (at 0.8 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 32 "Net-(U1-PadE7)")) + (pad F7 smd circle (at 0.8 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 33 "Net-(U1-PadF7)")) + (pad G7 smd circle (at 0.8 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 34 "Net-(U1-PadG7)")) + (pad H7 smd circle (at 0.8 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 35 "Net-(U1-PadH7)")) + (pad J7 smd circle (at 0.8 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 49 "Net-(U1-PadJ7)")) + (pad A8 smd circle (at 1.2 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 36 "Net-(U1-PadA8)")) + (pad B8 smd circle (at 1.2 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 7 +BATT)) + (pad C8 smd circle (at 1.2 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad D8 smd circle (at 1.2 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 37 "Net-(U1-PadD8)")) + (pad E8 smd circle (at 1.2 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 38 "Net-(U1-PadE8)")) + (pad F8 smd circle (at 1.2 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 39 "Net-(U1-PadF8)")) + (pad G8 smd circle (at 1.2 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 40 "Net-(U1-PadG8)")) + (pad H8 smd circle (at 1.2 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 41 "Net-(U1-PadH8)")) + (pad J8 smd circle (at 1.2 1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 50 "Net-(U1-PadJ8)")) + (pad A9 smd circle (at 1.6 -1.6) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask)) + (pad B9 smd circle (at 1.6 -1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 7 +BATT)) + (pad C9 smd circle (at 1.6 -0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad D9 smd circle (at 1.6 -0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 10 LED)) + (pad E9 smd circle (at 1.6 0) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 42 "Net-(U1-PadE9)")) + (pad F9 smd circle (at 1.6 0.4) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 43 "Net-(U1-PadF9)")) + (pad G9 smd circle (at 1.6 0.8) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (pad H9 smd circle (at 1.6 1.2) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 51 "Net-(U1-PadH9)")) + ) + + (module Capacitors_SMD:C_0402 (layer F.Cu) (tedit 5415D599) (tstamp 55048D3E) + (at 153 106.55 270) + (descr "Capacitor SMD 0402, reflow soldering, AVX (see smccp.pdf)") + (tags "capacitor 0402") + (path /550483E1) + (attr smd) + (fp_text reference C5 (at 0 -1.7 270) (layer F.SilkS) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_text value 2n2 (at 0 1.7 270) (layer F.Fab) + (effects (font (size 1 1) (thickness 0.15))) + ) + (fp_line (start -1.15 -0.6) (end 1.15 -0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start -1.15 -0.6) (end -1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 1.15 -0.6) (end 1.15 0.6) (layer F.CrtYd) (width 0.05)) + (fp_line (start 0.25 -0.475) (end -0.25 -0.475) (layer F.SilkS) (width 0.15)) + (fp_line (start -0.25 0.475) (end 0.25 0.475) (layer F.SilkS) (width 0.15)) + (pad 1 smd rect (at -0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 52 "Net-(C5-Pad1)")) + (pad 2 smd rect (at 0.55 0 270) (size 0.6 0.5) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + (model Capacitors_SMD.3dshapes/C_0402.wrl + (at (xyz 0 0 0)) + (scale (xyz 1 1 1)) + (rotate (xyz 0 0 0)) + ) + ) + + (module ANT:ANT-2.4GHz (layer F.Cu) (tedit 54517711) (tstamp 55049531) + (at 149.35 106.95 90) + (path /55047C3D) + (fp_text reference ANT1 (at -2.5 1.5 90) (layer F.SilkS) + (effects (font (size 0.4 0.4) (thickness 0.04))) + ) + (fp_text value ANT-2.4GHz (at -2 2 90) (layer F.SilkS) + (effects (font (size 0.4 0.4) (thickness 0.04))) + ) + (pad 1 smd rect (at 0 0 90) (size 0.9 4.9) (layers F.Cu) + (net 2 GND)) + (pad 3 smd rect (at 2.05 -2.7 90) (size 5 0.5) (layers F.Cu)) + (pad 2 smd rect (at 2.1 0 90) (size 0.5 4.9) (layers F.Cu) + (net 53 "Net-(ANT1-Pad2)")) + (pad 3 smd rect (at 4.3 -1.13 90) (size 0.5 2.64) (layers F.Cu)) + (pad 3 smd rect (at 6.8 -1.13 90) (size 0.5 2.64) (layers F.Cu)) + (pad 3 smd rect (at 5.55 -0.06 90) (size 2 0.5) (layers F.Cu)) + (pad 3 smd rect (at 7.9 -2.7 90) (size 2.7 0.5) (layers F.Cu)) + (pad 3 smd rect (at 12.6 -2.7 90) (size 2.7 0.5) (layers F.Cu)) + (pad 3 smd rect (at 9 -1.13 90) (size 0.5 2.64) (layers F.Cu)) + (pad 3 smd rect (at 11.5 -1.13 90) (size 0.5 2.64) (layers F.Cu)) + (pad 3 smd rect (at 10.25 -0.06 90) (size 2 0.5) (layers F.Cu)) + (pad 3 smd rect (at 13.7 -0.48 90) (size 0.5 3.94) (layers F.Cu)) + ) + + (module NRF51:BAL-NRF02D3 (layer F.Cu) (tedit 550C7CF1) (tstamp 55048D47) + (at 153.65 104.55 180) + (path /550480A2) + (fp_text reference U2 (at 0 1.95 180) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2))) + ) + (fp_text value BAL-NRF02D3 (at 0 -1.95 180) (layer F.SilkS) + (effects (font (size 1.2 1.2) (thickness 0.2))) + ) + (fp_circle (center 0.75 -1.25) (end 1 -1.25) (layer F.SilkS) (width 0.15)) + (fp_line (start -1 -0.75) (end -1 0.75) (layer F.SilkS) (width 0.2)) + (fp_line (start -1 0.75) (end 1 0.75) (layer F.SilkS) (width 0.2)) + (fp_line (start 1 0.75) (end 1 -0.75) (layer F.SilkS) (width 0.2)) + (fp_line (start 1 -0.75) (end -1 -0.75) (layer F.SilkS) (width 0.2)) + (pad A3 smd circle (at -0.5 -0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 12 "Net-(U1-PadD1)")) + (pad B3 smd circle (at -0.5 0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 11 "Net-(U1-PadC1)")) + (pad A2 smd circle (at 0 -0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 52 "Net-(C5-Pad1)")) + (pad A1 smd circle (at 0.5 -0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 53 "Net-(ANT1-Pad2)")) + (pad B1 smd circle (at 0.5 0.25 180) (size 0.2 0.2) (layers F.Cu F.Paste F.Mask) + (net 2 GND)) + ) + + (segment (start 155.7212 102.5342) (end 155.2084 102.0214) (width 0.1016) (layer F.Cu) (net 1)) + (segment (start 155.7212 103.5306) (end 155.7212 102.5342) (width 0.1016) (layer F.Cu) (net 1)) + (segment (start 155.137 101.95) (end 155.2084 102.0214) (width 0.1016) (layer F.Cu) (net 1) (tstamp 55048FFD)) + (segment (start 153.75 101.95) (end 155.137 101.95) (width 0.1016) (layer F.Cu) (net 1)) + (segment (start 156.947646 104.7306) (end 156.7306 104.7306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.7306 104.7306) (end 156.5212 104.5212) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.5212 104.5212) (end 156.5212 104.072021) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.5212 104.072021) (end 156.5212 103.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.1212 106.3306) (end 156.5212 105.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.5212 105.9306) (end 156.9212 105.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 157.3212 105.9306) (end 156.9212 105.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 157.7212 104.7306) (end 156.947646 104.7306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.5212 103.9306) (end 155.3212 103.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.9212 104.757046) (end 156.9212 105.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 156.947646 104.7306) (end 156.9212 104.757046) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 157.7212 104.7306) (end 158.1212 104.3306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 158.1212 104.3306) (end 158.5212 104.3306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 161.2265 103.4796) (end 161.7726 104.0257) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 159.3722 103.4796) (end 161.2265 103.4796) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 161.7726 104.0257) (end 162.0266 104.0257) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 159.554 101.0626) (end 159.554 102.1588) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 159.554 100.711) (end 159.554 101.0626) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 159.3722 102.6922) (end 159.3722 103.4796) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 159.554 102.5104) (end 159.3722 102.6922) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 159.554 102.1588) (end 159.554 102.5104) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 159.3722 103.621021) (end 159.3722 103.4796) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 158.5212 104.3306) (end 158.662621 104.3306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 158.662621 104.3306) (end 159.3722 103.621021) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 155.0306 103.9306) (end 154.15 103.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55048FDD)) + (segment (start 154.15 103.05) (end 153.75 103.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55048FEF)) + (segment (start 155.3212 103.9306) (end 155.0306 103.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 154.15 107.1) (end 153 107.1) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 160.6042 108.3542) (end 160.6042 109.1946) (width 0.1016) (layer F.Cu) (net 2) (tstamp 5504935E)) + (segment (start 158.5212 105.9306) (end 159.05 105.9306) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 160.85 105.05) (end 159.4 105.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049373)) + (segment (start 159.4 105.05) (end 159.05 105.4) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049377)) + (segment (start 159.05 105.4) (end 159.05 105.9306) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049378)) + (segment (start 161.8743 104.0257) (end 160.85 105.05) (width 0.1016) (layer F.Cu) (net 2) (tstamp 55049366)) + (segment (start 162.0266 104.0257) (end 161.8743 104.0257) (width 0.1016) (layer F.Cu) (net 2)) + (segment (start 149.5 107.1) (end 149.35 106.95) (width 0.1016) (layer F.Cu) (net 2) (tstamp 5504964A) (status 30)) + (segment (start 149.5 107.1) (end 149.35 106.95) (width 0.254) (layer F.Cu) (net 2) (tstamp 5504967F) (status 30)) + (segment (start 153 107.1) (end 149.5 107.1) (width 0.254) (layer F.Cu) (net 2) (status 20)) + (segment (start 158.4436 100.7214) (end 158.454 100.711) (width 0.1016) (layer F.Cu) (net 3)) + (segment (start 157.0084 100.7214) (end 158.4436 100.7214) (width 0.1016) (layer F.Cu) (net 3)) + (segment (start 156.6786 100.7214) (end 157.0084 100.7214) (width 0.1016) (layer F.Cu) (net 3)) + (segment (start 156.1084 101.2916) (end 156.6786 100.7214) (width 0.1016) (layer F.Cu) (net 3)) + (segment (start 156.1084 103.5178) (end 156.1084 101.2916) (width 0.1016) (layer F.Cu) (net 3)) + (segment (start 156.1212 103.5306) (end 156.1084 103.5178) (width 0.1016) (layer F.Cu) (net 3)) + (segment (start 156.5212 103.389179) (end 157.014979 102.8954) (width 0.1016) (layer F.Cu) (net 4)) + (segment (start 156.5212 103.5306) (end 156.5212 103.389179) (width 0.1016) (layer F.Cu) (net 4)) + (segment (start 157.6674 102.8954) (end 158.404 102.1588) (width 0.1016) (layer F.Cu) (net 4)) + (segment (start 158.404 102.1588) (end 158.454 102.1588) (width 0.1016) (layer F.Cu) (net 4)) + (segment (start 157.014979 102.8954) (end 157.6674 102.8954) (width 0.1016) (layer F.Cu) (net 4)) + (segment (start 154.45 106) (end 154.9194 105.5306) (width 0.1016) (layer F.Cu) (net 5) (tstamp 5504901F)) + (segment (start 154.9194 105.5306) (end 155.3212 105.5306) (width 0.1016) (layer F.Cu) (net 5) (tstamp 55049021)) + (segment (start 154.15 106) (end 154.45 106) (width 0.1016) (layer F.Cu) (net 5)) + (segment (start 160.1717 105.9307) (end 160.0454 105.8044) (width 0.1016) (layer F.Cu) (net 6)) + (segment (start 162.0266 105.9307) (end 160.1717 105.9307) (width 0.1016) (layer F.Cu) (net 6)) + (segment (start 159 99.9) (end 159.05 99.9) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 159.35 99.6) (end 161.2 99.6) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 158.25 111.15) (end 158.0642 110.9642) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 159.05 99.9) (end 159.35 99.6) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 161.2 99.6) (end 163.35 101.75) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 163.35 101.75) (end 163.35 110.35) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 163.35 110.35) (end 162.55 111.15) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 158.0642 110.9642) (end 158.0642 109.1946) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 162.55 111.15) (end 158.25 111.15) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 158.5212 103.9306) (end 158.1212 103.9306) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 158.0642 109.347) (end 158.0642 109.1946) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 159 99.9) (end 159 103.593221) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 158.662621 103.9306) (end 158.5212 103.9306) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 154.1 99.6) (end 158.7 99.6) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 153 102.3) (end 153 100.7) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 153.2 102.5) (end 153 102.3) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 158.7 99.6) (end 159 99.9) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 154.2906 102.5) (end 153.2 102.5) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 159 103.593221) (end 158.662621 103.9306) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 153 100.7) (end 154.1 99.6) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 155.3212 103.5306) (end 154.2906 102.5) (width 0.1016) (layer F.Cu) (net 7)) + (segment (start 155.7212 108.9976) (end 155.5242 109.1946) (width 0.1016) (layer F.Cu) (net 8)) + (segment (start 155.7212 106.7306) (end 155.7212 108.9976) (width 0.1016) (layer F.Cu) (net 8)) + (segment (start 152.9842 109.0676) (end 152.9842 109.1946) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 152.9842 109.1946) (end 152.9842 109.0422) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 155.2018 106.85) (end 155.7212 106.3306) (width 0.1016) (layer F.Cu) (net 9) (tstamp 55049280)) + (segment (start 155.1 106.95) (end 155.2 106.85) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 155.1 107.35) (end 155.1 106.95) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 154.55 107.9) (end 155.1 107.35) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 154.1264 107.9) (end 154.55 107.9) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 152.9842 109.0422) (end 154.1264 107.9) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 155.2 106.85) (end 155.2018 106.85) (width 0.1016) (layer F.Cu) (net 9)) + (segment (start 160.0454 104.3044) (end 159.4938 104.3044) (width 0.1016) (layer F.Cu) (net 10)) + (segment (start 158.662621 104.7306) (end 158.5212 104.7306) (width 0.1016) (layer F.Cu) (net 10)) + (segment (start 159.0676 104.7306) (end 158.662621 104.7306) (width 0.1016) (layer F.Cu) (net 10)) + (segment (start 159.4938 104.3044) (end 159.0676 104.7306) (width 0.1016) (layer F.Cu) (net 10)) + (segment (start 154.1806 104.3306) (end 154.15 104.3) (width 0.1016) (layer F.Cu) (net 11) (tstamp 5504938B)) + (segment (start 155.3212 104.3306) (end 154.1806 104.3306) (width 0.1016) (layer F.Cu) (net 11)) + (segment (start 154.2194 104.7306) (end 154.15 104.8) (width 0.1016) (layer F.Cu) (net 12) (tstamp 55049388)) + (segment (start 155.3212 104.7306) (end 154.2194 104.7306) (width 0.1016) (layer F.Cu) (net 12)) + (segment (start 155.3212 105.1306) (end 154.7194 105.1306) (width 0.1016) (layer F.Cu) (net 52)) + (segment (start 154.7194 105.1306) (end 154.6 105.25) (width 0.1016) (layer F.Cu) (net 52)) + (segment (start 154.6 105.25) (end 153.65 105.25) (width 0.1016) (layer F.Cu) (net 52)) + (segment (start 153.65 105.25) (end 153.65 104.8) (width 0.1016) (layer F.Cu) (net 52) (tstamp 5504901A)) + (segment (start 153.6 105.3) (end 153.65 105.25) (width 0.1016) (layer F.Cu) (net 52) (tstamp 55049386)) + (segment (start 153 105.9) (end 153.6 105.3) (width 0.1016) (layer F.Cu) (net 52) (tstamp 55049018)) + (segment (start 153 106) (end 153 105.9) (width 0.1016) (layer F.Cu) (net 52)) + (segment (start 149.4 104.8) (end 149.35 104.85) (width 0.1016) (layer F.Cu) (net 53) (tstamp 55049543) (status 30)) + (segment (start 153.1 104.85) (end 153.15 104.8) (width 0.254) (layer F.Cu) (net 53) (tstamp 550495A4)) + (segment (start 149.35 104.85) (end 153.1 104.85) (width 0.254) (layer F.Cu) (net 53) (status 10)) + + (zone (net 2) (net_name GND) (layer F.Cu) (tstamp 550C7F83) (hatch edge 0.508) + (connect_pads (clearance 0.2032)) + (min_thickness 0.1524) + (fill yes (arc_segments 16) (thermal_gap 0.2032) (thermal_bridge_width 0.15494) (smoothing chamfer) (radius 0.5)) + (polygon + (pts + (xy 164 111.85) (xy 151.5 111.85) (xy 151.5 97.15) (xy 164 97.15) + ) + ) + (filled_polygon + (pts + (xy 163.9238 111.318437) (xy 163.468437 111.7738) (xy 152.031563 111.7738) (xy 151.5762 111.318437) (xy 151.5762 107.6794) + (xy 151.744424 107.6794) (xy 151.855576 107.6794) (xy 151.958267 107.636864) (xy 152.036864 107.558267) (xy 152.0794 107.455576) + (xy 152.0794 107.02112) (xy 152.00955 106.95127) (xy 151.5762 106.95127) (xy 151.5762 106.94873) (xy 152.00955 106.94873) + (xy 152.0794 106.87888) (xy 152.0794 106.444424) (xy 152.036864 106.341733) (xy 151.958267 106.263136) (xy 151.855576 106.2206) + (xy 151.744424 106.2206) (xy 151.5762 106.2206) (xy 151.5762 105.3794) (xy 151.855576 105.3794) (xy 151.958267 105.336864) + (xy 152.036864 105.258267) (xy 152.037637 105.2564) (xy 153.1 105.2564) (xy 153.195652 105.237373) (xy 153.012426 105.4206) + (xy 152.694424 105.4206) (xy 152.591733 105.463136) (xy 152.513136 105.541733) (xy 152.4706 105.644424) (xy 152.4706 105.755576) + (xy 152.4706 106.355576) (xy 152.513136 106.458267) (xy 152.591733 106.536864) (xy 152.623446 106.55) (xy 152.591733 106.563136) + (xy 152.513136 106.641733) (xy 152.4706 106.744424) (xy 152.4706 107.02888) (xy 152.54045 107.09873) (xy 152.99873 107.09873) + (xy 152.99873 107.07873) (xy 153.00127 107.07873) (xy 153.00127 107.09873) (xy 153.45955 107.09873) (xy 153.5294 107.02888) + (xy 153.5294 106.744424) (xy 153.486864 106.641733) (xy 153.408267 106.563136) (xy 153.376553 106.55) (xy 153.408267 106.536864) + (xy 153.486864 106.458267) (xy 153.5294 106.355576) (xy 153.5294 106.244424) (xy 153.5294 105.837574) (xy 153.6206 105.746374) + (xy 153.6206 105.755576) (xy 153.6206 106.355576) (xy 153.663136 106.458267) (xy 153.741733 106.536864) (xy 153.773446 106.55) + (xy 153.741733 106.563136) (xy 153.663136 106.641733) (xy 153.6206 106.744424) (xy 153.6206 107.02888) (xy 153.69045 107.09873) + (xy 154.14873 107.09873) (xy 154.14873 107.07873) (xy 154.15127 107.07873) (xy 154.15127 107.09873) (xy 154.60955 107.09873) + (xy 154.6794 107.02888) (xy 154.6794 106.744424) (xy 154.636864 106.641733) (xy 154.558267 106.563136) (xy 154.526553 106.55) + (xy 154.558267 106.536864) (xy 154.636864 106.458267) (xy 154.6794 106.355576) (xy 154.6794 106.244424) (xy 154.6794 106.236217) + (xy 154.683487 106.233487) (xy 154.7968 106.120174) (xy 154.7968 106.634168) (xy 154.872829 106.710197) (xy 154.866513 106.716513) + (xy 154.794935 106.823638) (xy 154.7698 106.95) (xy 154.7698 107.213226) (xy 154.6794 107.303626) (xy 154.6794 107.17112) + (xy 154.60955 107.10127) (xy 154.15127 107.10127) (xy 154.15127 107.12127) (xy 154.14873 107.12127) (xy 154.14873 107.10127) + (xy 153.69045 107.10127) (xy 153.6206 107.17112) (xy 153.6206 107.455576) (xy 153.663136 107.558267) (xy 153.741733 107.636864) + (xy 153.844424 107.6794) (xy 153.880026 107.6794) (xy 153.5294 108.030025) (xy 153.5294 107.455576) (xy 153.5294 107.17112) + (xy 153.45955 107.10127) (xy 153.00127 107.10127) (xy 153.00127 107.60955) (xy 153.07112 107.6794) (xy 153.194424 107.6794) + (xy 153.305576 107.6794) (xy 153.408267 107.636864) (xy 153.486864 107.558267) (xy 153.5294 107.455576) (xy 153.5294 108.030025) + (xy 153.527705 108.03172) (xy 153.421607 107.960828) (xy 152.99873 107.876712) (xy 152.99873 107.60955) (xy 152.99873 107.10127) + (xy 152.54045 107.10127) (xy 152.4706 107.17112) (xy 152.4706 107.455576) (xy 152.513136 107.558267) (xy 152.591733 107.636864) + (xy 152.694424 107.6794) (xy 152.805576 107.6794) (xy 152.92888 107.6794) (xy 152.99873 107.60955) (xy 152.99873 107.876712) + (xy 152.9842 107.873822) (xy 152.546793 107.960828) (xy 152.175977 108.208599) (xy 151.928206 108.579415) (xy 151.8412 109.016822) + (xy 151.8412 109.372378) (xy 151.928206 109.809785) (xy 152.175977 110.180601) (xy 152.546793 110.428372) (xy 152.9842 110.515378) + (xy 153.421607 110.428372) (xy 153.792423 110.180601) (xy 154.040194 109.809785) (xy 154.1272 109.372378) (xy 154.1272 109.016822) + (xy 154.040194 108.579415) (xy 153.989631 108.503742) (xy 154.263173 108.2302) (xy 154.55 108.2302) (xy 154.676362 108.205065) + (xy 154.783487 108.133487) (xy 155.333483 107.583489) (xy 155.333486 107.583487) (xy 155.333487 107.583487) (xy 155.391 107.497411) + (xy 155.391 107.900317) (xy 155.086793 107.960828) (xy 154.715977 108.208599) (xy 154.468206 108.579415) (xy 154.3812 109.016822) + (xy 154.3812 109.372378) (xy 154.468206 109.809785) (xy 154.715977 110.180601) (xy 155.086793 110.428372) (xy 155.5242 110.515378) + (xy 155.961607 110.428372) (xy 156.332423 110.180601) (xy 156.580194 109.809785) (xy 156.6672 109.372378) (xy 156.6672 109.016822) + (xy 156.580194 108.579415) (xy 156.332423 108.208599) (xy 156.0514 108.020825) (xy 156.0514 107.2532) (xy 158.434168 107.2532) + (xy 159.0532 106.634168) (xy 159.0532 105.0608) (xy 159.0676 105.0608) (xy 159.193962 105.035665) (xy 159.301087 104.964087) + (xy 159.463138 104.802035) (xy 159.539824 104.8338) (xy 159.650976 104.8338) (xy 160.550976 104.8338) (xy 160.653667 104.791264) + (xy 160.732264 104.712667) (xy 160.7748 104.609976) (xy 160.7748 104.498824) (xy 160.7748 103.998824) (xy 160.732264 103.896133) + (xy 160.653667 103.817536) (xy 160.550976 103.775) (xy 160.439824 103.775) (xy 160.1334 103.775) (xy 160.1334 102.464376) + (xy 160.1334 102.353224) (xy 160.1334 102.22992) (xy 160.1334 102.08768) (xy 160.1334 101.964376) (xy 160.1334 101.853224) + (xy 160.1334 101.016576) (xy 160.1334 100.905424) (xy 160.1334 100.78212) (xy 160.1334 100.63988) (xy 160.1334 100.516576) + (xy 160.1334 100.405424) (xy 160.090864 100.302733) (xy 160.012267 100.224136) (xy 159.909576 100.1816) (xy 159.62512 100.1816) + (xy 159.55527 100.25145) (xy 159.55527 100.70973) (xy 160.06355 100.70973) (xy 160.1334 100.63988) (xy 160.1334 100.78212) + (xy 160.06355 100.71227) (xy 159.55527 100.71227) (xy 159.55527 101.17055) (xy 159.62512 101.2404) (xy 159.909576 101.2404) + (xy 160.012267 101.197864) (xy 160.090864 101.119267) (xy 160.1334 101.016576) (xy 160.1334 101.853224) (xy 160.090864 101.750533) + (xy 160.012267 101.671936) (xy 159.909576 101.6294) (xy 159.62512 101.6294) (xy 159.55527 101.69925) (xy 159.55527 102.15753) + (xy 160.06355 102.15753) (xy 160.1334 102.08768) (xy 160.1334 102.22992) (xy 160.06355 102.16007) (xy 159.55527 102.16007) + (xy 159.55527 102.61835) (xy 159.62512 102.6882) (xy 159.909576 102.6882) (xy 160.012267 102.645664) (xy 160.090864 102.567067) + (xy 160.1334 102.464376) (xy 160.1334 103.775) (xy 159.539824 103.775) (xy 159.437133 103.817536) (xy 159.358536 103.896133) + (xy 159.316 103.998824) (xy 159.316 104.033704) (xy 159.260313 104.070913) (xy 159.0532 104.278026) (xy 159.0532 104.006995) + (xy 159.233487 103.826708) (xy 159.305065 103.719583) (xy 159.3302 103.593221) (xy 159.330201 103.593221) (xy 159.3302 103.593215) + (xy 159.3302 102.6882) (xy 159.48288 102.6882) (xy 159.55273 102.61835) (xy 159.55273 102.16007) (xy 159.53273 102.16007) + (xy 159.53273 102.15753) (xy 159.55273 102.15753) (xy 159.55273 101.69925) (xy 159.48288 101.6294) (xy 159.3302 101.6294) + (xy 159.3302 101.2404) (xy 159.48288 101.2404) (xy 159.55273 101.17055) (xy 159.55273 100.71227) (xy 159.53273 100.71227) + (xy 159.53273 100.70973) (xy 159.55273 100.70973) (xy 159.55273 100.25145) (xy 159.48288 100.1816) (xy 159.3302 100.1816) + (xy 159.3302 100.086774) (xy 159.486774 99.9302) (xy 161.063226 99.9302) (xy 163.0198 101.886774) (xy 163.0198 110.213226) + (xy 163.0045 110.228526) (xy 163.0045 106.430776) (xy 163.0045 106.319624) (xy 163.0045 105.430624) (xy 163.0045 104.525776) + (xy 163.0045 104.09682) (xy 163.0045 103.95458) (xy 163.0045 103.525624) (xy 162.961964 103.422933) (xy 162.883367 103.344336) + (xy 162.780676 103.3018) (xy 162.669524 103.3018) (xy 162.09772 103.3018) (xy 162.02787 103.37165) (xy 162.02787 104.02443) + (xy 162.93465 104.02443) (xy 163.0045 103.95458) (xy 163.0045 104.09682) (xy 162.93465 104.02697) (xy 162.02787 104.02697) + (xy 162.02787 104.67975) (xy 162.09772 104.7496) (xy 162.669524 104.7496) (xy 162.780676 104.7496) (xy 162.883367 104.707064) + (xy 162.961964 104.628467) (xy 163.0045 104.525776) (xy 163.0045 105.430624) (xy 162.961964 105.327933) (xy 162.883367 105.249336) + (xy 162.780676 105.2068) (xy 162.669524 105.2068) (xy 162.02533 105.2068) (xy 162.02533 104.67975) (xy 162.02533 104.02697) + (xy 162.02533 104.02443) (xy 162.02533 103.37165) (xy 161.95548 103.3018) (xy 161.383676 103.3018) (xy 161.272524 103.3018) + (xy 161.169833 103.344336) (xy 161.091236 103.422933) (xy 161.0487 103.525624) (xy 161.0487 103.95458) (xy 161.11855 104.02443) + (xy 162.02533 104.02443) (xy 162.02533 104.02697) (xy 161.11855 104.02697) (xy 161.0487 104.09682) (xy 161.0487 104.525776) + (xy 161.091236 104.628467) (xy 161.169833 104.707064) (xy 161.272524 104.7496) (xy 161.383676 104.7496) (xy 161.95548 104.7496) + (xy 162.02533 104.67975) (xy 162.02533 105.2068) (xy 161.272524 105.2068) (xy 161.169833 105.249336) (xy 161.091236 105.327933) + (xy 161.0487 105.430624) (xy 161.0487 105.541776) (xy 161.0487 105.6005) (xy 160.7748 105.6005) (xy 160.7748 105.498824) + (xy 160.732264 105.396133) (xy 160.653667 105.317536) (xy 160.550976 105.275) (xy 160.439824 105.275) (xy 159.539824 105.275) + (xy 159.437133 105.317536) (xy 159.358536 105.396133) (xy 159.316 105.498824) (xy 159.316 105.609976) (xy 159.316 106.109976) + (xy 159.358536 106.212667) (xy 159.437133 106.291264) (xy 159.539824 106.3338) (xy 159.650976 106.3338) (xy 160.550976 106.3338) + (xy 160.653667 106.291264) (xy 160.684031 106.2609) (xy 161.0487 106.2609) (xy 161.0487 106.430776) (xy 161.091236 106.533467) + (xy 161.169833 106.612064) (xy 161.272524 106.6546) (xy 161.383676 106.6546) (xy 162.780676 106.6546) (xy 162.883367 106.612064) + (xy 162.961964 106.533467) (xy 163.0045 106.430776) (xy 163.0045 110.228526) (xy 162.413226 110.8198) (xy 161.7472 110.8198) + (xy 161.7472 110.266176) (xy 161.7472 110.155024) (xy 161.7472 109.26572) (xy 161.7472 109.12348) (xy 161.7472 108.234176) + (xy 161.7472 108.123024) (xy 161.704664 108.020333) (xy 161.626067 107.941736) (xy 161.523376 107.8992) (xy 160.67532 107.8992) + (xy 160.60547 107.96905) (xy 160.60547 109.19333) (xy 161.67735 109.19333) (xy 161.7472 109.12348) (xy 161.7472 109.26572) + (xy 161.67735 109.19587) (xy 160.60547 109.19587) (xy 160.60547 110.42015) (xy 160.67532 110.49) (xy 161.523376 110.49) + (xy 161.626067 110.447464) (xy 161.704664 110.368867) (xy 161.7472 110.266176) (xy 161.7472 110.8198) (xy 160.60293 110.8198) + (xy 160.60293 110.42015) (xy 160.60293 109.19587) (xy 160.60293 109.19333) (xy 160.60293 107.96905) (xy 160.53308 107.8992) + (xy 159.685024 107.8992) (xy 159.582333 107.941736) (xy 159.503736 108.020333) (xy 159.4612 108.123024) (xy 159.4612 108.234176) + (xy 159.4612 109.12348) (xy 159.53105 109.19333) (xy 160.60293 109.19333) (xy 160.60293 109.19587) (xy 159.53105 109.19587) + (xy 159.4612 109.26572) (xy 159.4612 110.155024) (xy 159.4612 110.266176) (xy 159.503736 110.368867) (xy 159.582333 110.447464) + (xy 159.685024 110.49) (xy 160.53308 110.49) (xy 160.60293 110.42015) (xy 160.60293 110.8198) (xy 158.3944 110.8198) + (xy 158.3944 110.449696) (xy 158.501607 110.428372) (xy 158.872423 110.180601) (xy 159.120194 109.809785) (xy 159.2072 109.372378) + (xy 159.2072 109.016822) (xy 159.120194 108.579415) (xy 158.872423 108.208599) (xy 158.501607 107.960828) (xy 158.0642 107.873822) + (xy 157.626793 107.960828) (xy 157.255977 108.208599) (xy 157.008206 108.579415) (xy 156.9212 109.016822) (xy 156.9212 109.372378) + (xy 157.008206 109.809785) (xy 157.255977 110.180601) (xy 157.626793 110.428372) (xy 157.734 110.449696) (xy 157.734 110.9642) + (xy 157.759135 111.090562) (xy 157.830713 111.197687) (xy 158.016513 111.383487) (xy 158.123638 111.455065) (xy 158.25 111.480201) + (xy 158.25 111.4802) (xy 158.250005 111.4802) (xy 162.55 111.4802) (xy 162.676362 111.455065) (xy 162.783487 111.383487) + (xy 163.583487 110.583487) (xy 163.655065 110.476362) (xy 163.6802 110.35) (xy 163.680201 110.35) (xy 163.6802 110.349994) + (xy 163.6802 101.75) (xy 163.655065 101.623638) (xy 163.583487 101.516513) (xy 161.433487 99.366513) (xy 161.326362 99.294935) + (xy 161.2 99.2698) (xy 159.35 99.2698) (xy 159.223638 99.294935) (xy 159.116513 99.366513) (xy 159.025 99.458026) + (xy 158.933487 99.366513) (xy 158.826362 99.294935) (xy 158.7 99.2698) (xy 154.100005 99.2698) (xy 154.1 99.269799) + (xy 153.973638 99.294935) (xy 153.866513 99.366513) (xy 152.766513 100.466513) (xy 152.694935 100.573638) (xy 152.6698 100.7) + (xy 152.6698 102.3) (xy 152.694935 102.426362) (xy 152.766513 102.533487) (xy 152.96651 102.733483) (xy 152.966513 102.733487) + (xy 152.966514 102.733487) (xy 153.073638 102.805065) (xy 153.2 102.830201) (xy 153.2 102.8302) (xy 153.200005 102.8302) + (xy 153.2206 102.8302) (xy 153.2206 102.97888) (xy 153.29045 103.04873) (xy 153.74873 103.04873) (xy 153.74873 103.02873) + (xy 153.75127 103.02873) (xy 153.75127 103.04873) (xy 154.20955 103.04873) (xy 154.2794 102.97888) (xy 154.2794 102.955773) + (xy 154.868129 103.544502) (xy 154.7968 103.615832) (xy 154.7968 104.0004) (xy 154.387007 104.0004) (xy 154.365194 103.978548) + (xy 154.2794 103.942923) (xy 154.2794 103.405576) (xy 154.2794 103.12112) (xy 154.20955 103.05127) (xy 153.75127 103.05127) + (xy 153.75127 103.55955) (xy 153.82112 103.6294) (xy 153.944424 103.6294) (xy 154.055576 103.6294) (xy 154.158267 103.586864) + (xy 154.236864 103.508267) (xy 154.2794 103.405576) (xy 154.2794 103.942923) (xy 154.225798 103.920666) (xy 154.074864 103.920534) + (xy 153.935368 103.978173) (xy 153.887912 104.025544) (xy 153.74873 103.886362) (xy 153.74873 103.55955) (xy 153.74873 103.05127) + (xy 153.29045 103.05127) (xy 153.2206 103.12112) (xy 153.2206 103.405576) (xy 153.263136 103.508267) (xy 153.341733 103.586864) + (xy 153.444424 103.6294) (xy 153.555576 103.6294) (xy 153.67888 103.6294) (xy 153.74873 103.55955) (xy 153.74873 103.886362) + (xy 153.675 103.812632) (xy 153.412173 104.075458) (xy 153.376346 104.076713) (xy 153.376346 103.986301) (xy 153.239069 103.92356) + (xy 153.088231 103.91813) (xy 152.946798 103.970835) (xy 152.923654 103.986301) (xy 152.926759 104.074963) (xy 153.15 104.298204) + (xy 153.373241 104.074963) (xy 153.376346 103.986301) (xy 153.376346 104.076713) (xy 153.375037 104.076759) (xy 153.151796 104.3) + (xy 153.165938 104.314142) (xy 153.164142 104.315938) (xy 153.15 104.301796) (xy 153.135857 104.315938) (xy 153.134061 104.314142) + (xy 153.148204 104.3) (xy 152.924963 104.076759) (xy 152.836301 104.073654) (xy 152.77356 104.210931) (xy 152.76813 104.361769) + (xy 152.798624 104.4436) (xy 152.037637 104.4436) (xy 152.036864 104.441733) (xy 151.958267 104.363136) (xy 151.855576 104.3206) + (xy 151.744424 104.3206) (xy 151.5762 104.3206) (xy 151.5762 97.681563) (xy 152.031563 97.2262) (xy 163.468437 97.2262) + (xy 163.9238 97.681563) (xy 163.9238 111.318437) + ) + ) + ) + (zone (net 0) (net_name "") (layer F.Cu) (tstamp 550C7E3B) (hatch edge 0.508) + (connect_pads (clearance 0.2032)) + (min_thickness 0.1524) + (keepout (tracks allowed) (vias allowed) (copperpour not_allowed)) + (fill yes (arc_segments 16) (thermal_gap 0.2032) (thermal_bridge_width 0.15494) (smoothing chamfer) (radius 0.5)) + (polygon + (pts + (xy 153.9 104.55) (xy 153.45 104.55) (xy 153.45 104.1) (xy 153.9 104.1) + ) + ) + ) + (zone (net 0) (net_name "") (layer F.Cu) (tstamp 550C7E43) (hatch edge 0.508) + (connect_pads (clearance 0.2032)) + (min_thickness 0.1524) + (keepout (tracks allowed) (vias allowed) (copperpour not_allowed)) + (fill yes (arc_segments 16) (thermal_gap 0.2032) (thermal_bridge_width 0.15494) (smoothing chamfer) (radius 0.5)) + (polygon + (pts + (xy 158.85 107.05) (xy 155 107.05) (xy 155 103.2) (xy 158.85 103.2) + ) + ) + ) +) diff --git a/samples/KiCad/ultimate-temp-controller.sch b/samples/KiCad/ultimate-temp-controller.sch new file mode 100644 index 00000000..8cac6465 --- /dev/null +++ b/samples/KiCad/ultimate-temp-controller.sch @@ -0,0 +1,69 @@ +EESchema Schematic File Version 2 +LIBS:power +LIBS:device +LIBS:transistors +LIBS:conn +LIBS:linear +LIBS:regul +LIBS:74xx +LIBS:cmos4000 +LIBS:adc-dac +LIBS:memory +LIBS:xilinx +LIBS:special +LIBS:microcontrollers +LIBS:dsp +LIBS:microchip +LIBS:analog_switches +LIBS:motorola +LIBS:texas +LIBS:intel +LIBS:audio +LIBS:interface +LIBS:digital-audio +LIBS:philips +LIBS:display +LIBS:cypress +LIBS:siliconi +LIBS:opto +LIBS:atmel +LIBS:contrib +LIBS:valves +LIBS:relays +LIBS:w_relay +LIBS:ultimate-temp-controller-cache +EELAYER 25 0 +EELAYER END +$Descr A4 11693 8268 +encoding utf-8 +Sheet 1 2 +Title "" +Date "" +Rev "" +Comp "" +Comment1 "" +Comment2 "" +Comment3 "" +Comment4 "" +$EndDescr +$Sheet +S 1400 2100 2150 2000 +U 54E5B803 +F0 "controller" 60 +F1 "controller.sch" 60 +F2 "TC+" I L 1400 2300 60 +F3 "TC-" I L 1400 2400 60 +F4 "VCC" I L 1400 3750 60 +F5 "GND" I L 1400 3900 60 +F6 "RS485A" I R 3550 3700 60 +F7 "RS485B" I R 3550 3800 60 +F8 "DRAIN" O R 3550 3300 60 +F9 "+5V" O R 3550 2250 60 +F10 "SDA" B R 3550 2350 60 +F11 "SCL" B R 3550 2450 60 +F12 "GND" O R 3550 2550 60 +F13 "RELAY_NO" I R 3550 2850 60 +F14 "RELAY_COM" I R 3550 3050 60 +F15 "RELAY_NC" I R 3550 2950 60 +$EndSheet +$EndSCHEMATC diff --git a/samples/Lean/binary.lean b/samples/Lean/binary.lean new file mode 100644 index 00000000..060a8cb0 --- /dev/null +++ b/samples/Lean/binary.lean @@ -0,0 +1,75 @@ +/- +Copyright (c) 2014 Microsoft Corporation. All rights reserved. +Released under Apache 2.0 license as described in the file LICENSE. + +Module: algebra.binary +Authors: Leonardo de Moura, Jeremy Avigad + +General properties of binary operations. +-/ + +import logic.eq +open eq.ops + +namespace binary + section + variable {A : Type} + variables (op₁ : A → A → A) (inv : A → A) (one : A) + + local notation a * b := op₁ a b + local notation a ⁻¹ := inv a + local notation 1 := one + + definition commutative := ∀a b, a * b = b * a + definition associative := ∀a b c, (a * b) * c = a * (b * c) + definition left_identity := ∀a, 1 * a = a + definition right_identity := ∀a, a * 1 = a + definition left_inverse := ∀a, a⁻¹ * a = 1 + definition right_inverse := ∀a, a * a⁻¹ = 1 + definition left_cancelative := ∀a b c, a * b = a * c → b = c + definition right_cancelative := ∀a b c, a * b = c * b → a = c + + definition inv_op_cancel_left := ∀a b, a⁻¹ * (a * b) = b + definition op_inv_cancel_left := ∀a b, a * (a⁻¹ * b) = b + definition inv_op_cancel_right := ∀a b, a * b⁻¹ * b = a + definition op_inv_cancel_right := ∀a b, a * b * b⁻¹ = a + + variable (op₂ : A → A → A) + + local notation a + b := op₂ a b + + definition left_distributive := ∀a b c, a * (b + c) = a * b + a * c + definition right_distributive := ∀a b c, (a + b) * c = a * c + b * c + end + + context + variable {A : Type} + variable {f : A → A → A} + variable H_comm : commutative f + variable H_assoc : associative f + infixl `*` := f + theorem left_comm : ∀a b c, a*(b*c) = b*(a*c) := + take a b c, calc + a*(b*c) = (a*b)*c : H_assoc + ... = (b*a)*c : H_comm + ... = b*(a*c) : H_assoc + + theorem right_comm : ∀a b c, (a*b)*c = (a*c)*b := + take a b c, calc + (a*b)*c = a*(b*c) : H_assoc + ... = a*(c*b) : H_comm + ... = (a*c)*b : H_assoc + end + + context + variable {A : Type} + variable {f : A → A → A} + variable H_assoc : associative f + infixl `*` := f + theorem assoc4helper (a b c d) : (a*b)*(c*d) = a*((b*c)*d) := + calc + (a*b)*(c*d) = a*(b*(c*d)) : H_assoc + ... = a*((b*c)*d) : H_assoc + end + +end binary diff --git a/samples/Lean/set.hlean b/samples/Lean/set.hlean new file mode 100644 index 00000000..761cd67d --- /dev/null +++ b/samples/Lean/set.hlean @@ -0,0 +1,70 @@ +-- Copyright (c) 2015 Jakob von Raumer. All rights reserved. +-- Released under Apache 2.0 license as described in the file LICENSE. +-- Authors: Jakob von Raumer +-- Category of sets + +import .basic types.pi trunc + +open truncation sigma sigma.ops pi function eq morphism precategory +open equiv + +namespace precategory + + universe variable l + + definition set_precategory : precategory.{l+1 l} (Σ (A : Type.{l}), is_hset A) := + begin + fapply precategory.mk.{l+1 l}, + intros, apply (a.1 → a_1.1), + intros, apply trunc_pi, intros, apply b.2, + intros, intro x, exact (a_1 (a_2 x)), + intros, exact (λ (x : a.1), x), + intros, apply funext.path_pi, intro x, apply idp, + intros, apply funext.path_pi, intro x, apply idp, + intros, apply funext.path_pi, intro x, apply idp, + end + +end precategory + +namespace category + + universe variable l + local attribute precategory.set_precategory.{l+1 l} [instance] + + definition set_category_equiv_iso (a b : (Σ (A : Type.{l}), is_hset A)) + : (a ≅ b) = (a.1 ≃ b.1) := + /-begin + apply ua, fapply equiv.mk, + intro H, + apply (isomorphic.rec_on H), intros (H1, H2), + apply (is_iso.rec_on H2), intros (H3, H4, H5), + fapply equiv.mk, + apply (isomorphic.rec_on H), intros (H1, H2), + exact H1, + fapply is_equiv.adjointify, exact H3, + exact sorry, + exact sorry, + end-/ sorry + + definition set_category : category.{l+1 l} (Σ (A : Type.{l}), is_hset A) := + /-begin + assert (C : precategory.{l+1 l} (Σ (A : Type.{l}), is_hset A)), + apply precategory.set_precategory, + apply category.mk, + assert (p : (λ A B p, (set_category_equiv_iso A B) ▹ iso_of_path p) = (λ A B p, @equiv_path A.1 B.1 p)), + apply is_equiv.adjointify, + intros, + apply (isomorphic.rec_on a_1), intros (iso', is_iso'), + apply (is_iso.rec_on is_iso'), intros (f', f'sect, f'retr), + fapply sigma.path, + apply ua, fapply equiv.mk, exact iso', + fapply is_equiv.adjointify, + exact f', + intros, apply (f'retr ▹ _), + intros, apply (f'sect ▹ _), + apply (@is_hprop.elim), + apply is_trunc_is_hprop, + intros, + end -/ sorry + +end category diff --git a/samples/Lex/zend_ini_scanner.l b/samples/Lex/zend_ini_scanner.l new file mode 100644 index 00000000..8aeb076e --- /dev/null +++ b/samples/Lex/zend_ini_scanner.l @@ -0,0 +1,601 @@ +/* + +----------------------------------------------------------------------+ + | Zend Engine | + +----------------------------------------------------------------------+ + | Copyright (c) 1998-2012 Zend Technologies Ltd. (http://www.zend.com) | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.00 of the Zend license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.zend.com/license/2_00.txt. | + | If you did not receive a copy of the Zend license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@zend.com so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Zeev Suraski | + | Jani Taskinen | + | Marcus Boerger | + | Nuno Lopes | + | Scott MacVicar | + +----------------------------------------------------------------------+ +*/ + +/* $Id$ */ + +#include +#include "zend.h" +#include "zend_globals.h" +#include +#include "zend_ini_scanner.h" + +#if 0 +# define YYDEBUG(s, c) printf("state: %d char: %c\n", s, c) +#else +# define YYDEBUG(s, c) +#endif + +#include "zend_ini_scanner_defs.h" + +#define YYCTYPE unsigned char +/* allow the scanner to read one null byte after the end of the string (from ZEND_MMAP_AHEAD) + * so that if will be able to terminate to match the current token (e.g. non-enclosed string) */ +#define YYFILL(n) { if (YYCURSOR > YYLIMIT) return 0; } +#define YYCURSOR SCNG(yy_cursor) +#define YYLIMIT SCNG(yy_limit) +#define YYMARKER SCNG(yy_marker) + +#define YYGETCONDITION() SCNG(yy_state) +#define YYSETCONDITION(s) SCNG(yy_state) = s + +#define STATE(name) yyc##name + +/* emulate flex constructs */ +#define BEGIN(state) YYSETCONDITION(STATE(state)) +#define YYSTATE YYGETCONDITION() +#define yytext ((char*)SCNG(yy_text)) +#define yyleng SCNG(yy_leng) +#define yyless(x) do { YYCURSOR = (unsigned char*)yytext + x; \ + yyleng = (unsigned int)x; } while(0) + +/* #define yymore() goto yymore_restart */ + +/* perform sanity check. If this message is triggered you should + increase the ZEND_MMAP_AHEAD value in the zend_streams.h file */ +/*!max:re2c */ +#if ZEND_MMAP_AHEAD < (YYMAXFILL + 1) +# error ZEND_MMAP_AHEAD should be greater than YYMAXFILL +#endif + + +/* How it works (for the core ini directives): + * =========================================== + * + * 1. Scanner scans file for tokens and passes them to parser. + * 2. Parser parses the tokens and passes the name/value pairs to the callback + * function which stores them in the configuration hash table. + * 3. Later REGISTER_INI_ENTRIES() is called which triggers the actual + * registering of ini entries and uses zend_get_configuration_directive() + * to fetch the previously stored name/value pair from configuration hash table + * and registers the static ini entries which match the name to the value + * into EG(ini_directives) hash table. + * 4. PATH section entries are used per-request from down to top, each overriding + * previous if one exists. zend_alter_ini_entry() is called for each entry. + * Settings in PATH section are ZEND_INI_SYSTEM accessible and thus mimics the + * php_admin_* directives used within Apache httpd.conf when PHP is compiled as + * module for Apache. + * 5. User defined ini files (like .htaccess for apache) are parsed for each request and + * stored in separate hash defined by SAPI. + */ + +/* TODO: (ordered by importance :-) + * =============================================================================== + * + * - Separate constant lookup totally from plain strings (using CONSTANT pattern) + * - Add #if .. #else .. #endif and ==, !=, <, > , <=, >= operators + * - Add #include "some.ini" + * - Allow variables to refer to options also when using parse_ini_file() + * + */ + +/* Globals Macros */ +#define SCNG INI_SCNG +#ifdef ZTS +ZEND_API ts_rsrc_id ini_scanner_globals_id; +#else +ZEND_API zend_ini_scanner_globals ini_scanner_globals; +#endif + +/* Eat leading whitespace */ +#define EAT_LEADING_WHITESPACE() \ + while (yytext[0]) { \ + if (yytext[0] == ' ' || yytext[0] == '\t') { \ + SCNG(yy_text)++; \ + yyleng--; \ + } else { \ + break; \ + } \ + } + +/* Eat trailing whitespace + extra char */ +#define EAT_TRAILING_WHITESPACE_EX(ch) \ + while (yyleng > 0 && ( \ + (ch != 'X' && yytext[yyleng - 1] == ch) || \ + yytext[yyleng - 1] == '\n' || \ + yytext[yyleng - 1] == '\r' || \ + yytext[yyleng - 1] == '\t' || \ + yytext[yyleng - 1] == ' ') \ + ) { \ + yyleng--; \ + } + +/* Eat trailing whitespace */ +#define EAT_TRAILING_WHITESPACE() EAT_TRAILING_WHITESPACE_EX('X') + +#define zend_ini_copy_value(retval, str, len) { \ + Z_STRVAL_P(retval) = zend_strndup(str, len); \ + Z_STRLEN_P(retval) = len; \ + Z_TYPE_P(retval) = IS_STRING; \ +} + +#define RETURN_TOKEN(type, str, len) { \ + zend_ini_copy_value(ini_lval, str, len); \ + return type; \ +} + +static void _yy_push_state(int new_state TSRMLS_DC) +{ + zend_stack_push(&SCNG(state_stack), (void *) &YYGETCONDITION(), sizeof(int)); + YYSETCONDITION(new_state); +} + +#define yy_push_state(state_and_tsrm) _yy_push_state(yyc##state_and_tsrm) + +static void yy_pop_state(TSRMLS_D) +{ + int *stack_state; + zend_stack_top(&SCNG(state_stack), (void **) &stack_state); + YYSETCONDITION(*stack_state); + zend_stack_del_top(&SCNG(state_stack)); +} + +static void yy_scan_buffer(char *str, unsigned int len TSRMLS_DC) +{ + YYCURSOR = (YYCTYPE*)str; + SCNG(yy_start) = YYCURSOR; + YYLIMIT = YYCURSOR + len; +} + +#define ini_filename SCNG(filename) + +/* {{{ init_ini_scanner() +*/ +static int init_ini_scanner(int scanner_mode, zend_file_handle *fh TSRMLS_DC) +{ + /* Sanity check */ + if (scanner_mode != ZEND_INI_SCANNER_NORMAL && scanner_mode != ZEND_INI_SCANNER_RAW) { + zend_error(E_WARNING, "Invalid scanner mode"); + return FAILURE; + } + + SCNG(lineno) = 1; + SCNG(scanner_mode) = scanner_mode; + SCNG(yy_in) = fh; + + if (fh != NULL) { + ini_filename = zend_strndup(fh->filename, strlen(fh->filename)); + } else { + ini_filename = NULL; + } + + zend_stack_init(&SCNG(state_stack)); + BEGIN(INITIAL); + + return SUCCESS; +} +/* }}} */ + +/* {{{ shutdown_ini_scanner() +*/ +void shutdown_ini_scanner(TSRMLS_D) +{ + zend_stack_destroy(&SCNG(state_stack)); + if (ini_filename) { + free(ini_filename); + } +} +/* }}} */ + +/* {{{ zend_ini_scanner_get_lineno() +*/ +int zend_ini_scanner_get_lineno(TSRMLS_D) +{ + return SCNG(lineno); +} +/* }}} */ + +/* {{{ zend_ini_scanner_get_filename() +*/ +char *zend_ini_scanner_get_filename(TSRMLS_D) +{ + return ini_filename ? ini_filename : "Unknown"; +} +/* }}} */ + +/* {{{ zend_ini_open_file_for_scanning() +*/ +int zend_ini_open_file_for_scanning(zend_file_handle *fh, int scanner_mode TSRMLS_DC) +{ + char *buf; + size_t size; + + if (zend_stream_fixup(fh, &buf, &size TSRMLS_CC) == FAILURE) { + return FAILURE; + } + + if (init_ini_scanner(scanner_mode, fh TSRMLS_CC) == FAILURE) { + zend_file_handle_dtor(fh TSRMLS_CC); + return FAILURE; + } + + yy_scan_buffer(buf, size TSRMLS_CC); + + return SUCCESS; +} +/* }}} */ + +/* {{{ zend_ini_prepare_string_for_scanning() +*/ +int zend_ini_prepare_string_for_scanning(char *str, int scanner_mode TSRMLS_DC) +{ + int len = strlen(str); + + if (init_ini_scanner(scanner_mode, NULL TSRMLS_CC) == FAILURE) { + return FAILURE; + } + + yy_scan_buffer(str, len TSRMLS_CC); + + return SUCCESS; +} +/* }}} */ + +/* {{{ zend_ini_escape_string() + */ +static void zend_ini_escape_string(zval *lval, char *str, int len, char quote_type TSRMLS_DC) +{ + register char *s, *t; + char *end; + + zend_ini_copy_value(lval, str, len); + + /* convert escape sequences */ + s = t = Z_STRVAL_P(lval); + end = s + Z_STRLEN_P(lval); + + while (s < end) { + if (*s == '\\') { + s++; + if (s >= end) { + *t++ = '\\'; + continue; + } + switch (*s) { + case '"': + if (*s != quote_type) { + *t++ = '\\'; + *t++ = *s; + break; + } + case '\\': + case '$': + *t++ = *s; + Z_STRLEN_P(lval)--; + break; + default: + *t++ = '\\'; + *t++ = *s; + break; + } + } else { + *t++ = *s; + } + if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) { + SCNG(lineno)++; + } + s++; + } + *t = 0; +} +/* }}} */ + +int ini_lex(zval *ini_lval TSRMLS_DC) +{ +restart: + SCNG(yy_text) = YYCURSOR; + +/* yymore_restart: */ + /* detect EOF */ + if (YYCURSOR >= YYLIMIT) { + if (YYSTATE == STATE(ST_VALUE) || YYSTATE == STATE(ST_RAW)) { + BEGIN(INITIAL); + return END_OF_LINE; + } + return 0; + } + + /* Eat any UTF-8 BOM we find in the first 3 bytes */ + if (YYCURSOR == SCNG(yy_start) && YYCURSOR + 3 < YYLIMIT) { + if (memcmp(YYCURSOR, "\xef\xbb\xbf", 3) == 0) { + YYCURSOR += 3; + goto restart; + } + } +/*!re2c +re2c:yyfill:check = 0; +LNUM [0-9]+ +DNUM ([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*) +NUMBER [-]?{LNUM}|{DNUM} +ANY_CHAR (.|[\n\t]) +NEWLINE ("\r"|"\n"|"\r\n") +TABS_AND_SPACES [ \t] +WHITESPACE [ \t]+ +CONSTANT [a-zA-Z_][a-zA-Z0-9_]* +LABEL [^=\n\r\t;|&$~(){}!"\[]+ +TOKENS [:,.\[\]"'()|^&+-/*=%$!~<>?@{}] +OPERATORS [&|~()!] +DOLLAR_CURLY "${" + +SECTION_RAW_CHARS [^\]\n\r] +SINGLE_QUOTED_CHARS [^'] +RAW_VALUE_CHARS [^"\n\r;\000] + +LITERAL_DOLLAR ("$"([^{\000]|("\\"{ANY_CHAR}))) +VALUE_CHARS ([^$= \t\n\r;&|~()!"'\000]|{LITERAL_DOLLAR}) +SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR}) + + := yyleng = YYCURSOR - SCNG(yy_text); + +"[" { /* Section start */ + /* Enter section data lookup state */ + if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) { + yy_push_state(ST_SECTION_RAW TSRMLS_CC); + } else { + yy_push_state(ST_SECTION_VALUE TSRMLS_CC); + } + return TC_SECTION; +} + +"'"{SINGLE_QUOTED_CHARS}+"'" { /* Raw string */ + /* Eat leading and trailing single quotes */ + if (yytext[0] == '\'' && yytext[yyleng - 1] == '\'') { + SCNG(yy_text)++; + yyleng = yyleng - 2; + } + RETURN_TOKEN(TC_RAW, yytext, yyleng); +} + +"]"{TABS_AND_SPACES}*{NEWLINE}? { /* End of section */ + BEGIN(INITIAL); + SCNG(lineno)++; + return ']'; +} + +{LABEL}"["{TABS_AND_SPACES}* { /* Start of option with offset */ + /* Eat leading whitespace */ + EAT_LEADING_WHITESPACE(); + + /* Eat trailing whitespace and [ */ + EAT_TRAILING_WHITESPACE_EX('['); + + /* Enter offset lookup state */ + yy_push_state(ST_OFFSET TSRMLS_CC); + + RETURN_TOKEN(TC_OFFSET, yytext, yyleng); +} + +{TABS_AND_SPACES}*"]" { /* End of section or an option offset */ + BEGIN(INITIAL); + return ']'; +} + +{DOLLAR_CURLY} { /* Variable start */ + yy_push_state(ST_VARNAME TSRMLS_CC); + return TC_DOLLAR_CURLY; +} + +{LABEL} { /* Variable name */ + /* Eat leading whitespace */ + EAT_LEADING_WHITESPACE(); + + /* Eat trailing whitespace */ + EAT_TRAILING_WHITESPACE(); + + RETURN_TOKEN(TC_VARNAME, yytext, yyleng); +} + +"}" { /* Variable end */ + yy_pop_state(TSRMLS_C); + return '}'; +} + +("true"|"on"|"yes"){TABS_AND_SPACES}* { /* TRUE value (when used outside option value/offset this causes parse error!) */ + RETURN_TOKEN(BOOL_TRUE, "1", 1); +} + +("false"|"off"|"no"|"none"|"null"){TABS_AND_SPACES}* { /* FALSE value (when used outside option value/offset this causes parse error!)*/ + RETURN_TOKEN(BOOL_FALSE, "", 0); +} + +{LABEL} { /* Get option name */ + /* Eat leading whitespace */ + EAT_LEADING_WHITESPACE(); + + /* Eat trailing whitespace */ + EAT_TRAILING_WHITESPACE(); + + RETURN_TOKEN(TC_LABEL, yytext, yyleng); +} + +{TABS_AND_SPACES}*[=]{TABS_AND_SPACES}* { /* Start option value */ + if (SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW) { + yy_push_state(ST_RAW TSRMLS_CC); + } else { + yy_push_state(ST_VALUE TSRMLS_CC); + } + return '='; +} + +["] { + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '\n': + SCNG(lineno)++; + break; + case '\r': + if (*YYCURSOR != '\n') { + SCNG(lineno)++; + } + break; + case '"': + yyleng = YYCURSOR - SCNG(yy_text) - 2; + SCNG(yy_text)++; + RETURN_TOKEN(TC_RAW, yytext, yyleng); + case '\\': + if (YYCURSOR < YYLIMIT) { + YYCURSOR++; + } + break; + } + } + yyleng = YYCURSOR - SCNG(yy_text); + RETURN_TOKEN(TC_RAW, yytext, yyleng); +} + +{RAW_VALUE_CHARS}+ { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ + RETURN_TOKEN(TC_RAW, yytext, yyleng); +} + +{SECTION_RAW_CHARS}+ { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ + RETURN_TOKEN(TC_RAW, yytext, yyleng); +} + +{TABS_AND_SPACES}*{NEWLINE} { /* End of option value */ + BEGIN(INITIAL); + SCNG(lineno)++; + return END_OF_LINE; +} + +{CONSTANT} { /* Get constant option value */ + RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); +} + +{NUMBER} { /* Get number option value as string */ + RETURN_TOKEN(TC_NUMBER, yytext, yyleng); +} + +{TOKENS} { /* Disallow these chars outside option values */ + return yytext[0]; +} + +{OPERATORS}{TABS_AND_SPACES}* { /* Boolean operators */ + return yytext[0]; +} + +[=] { /* Make = used in option value to trigger error */ + yyless(0); + BEGIN(INITIAL); + return END_OF_LINE; +} + +{VALUE_CHARS}+ { /* Get everything else as option/offset value */ + RETURN_TOKEN(TC_STRING, yytext, yyleng); +} + +{SECTION_VALUE_CHARS}+ { /* Get rest as section/offset value */ + RETURN_TOKEN(TC_STRING, yytext, yyleng); +} + +{TABS_AND_SPACES}*["] { /* Double quoted '"' string start */ + yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC); + return '"'; +} + +["]{TABS_AND_SPACES}* { /* Double quoted '"' string ends */ + yy_pop_state(TSRMLS_C); + return '"'; +} + +[^] { /* Escape double quoted string contents */ + if (YYCURSOR > YYLIMIT) { + return 0; + } + + while (YYCURSOR < YYLIMIT) { + switch (*YYCURSOR++) { + case '"': + if (YYCURSOR < YYLIMIT && YYCURSOR[-2] == '\\' && *YYCURSOR != '\r' && *YYCURSOR != '\n') { + continue; + } + break; + case '$': + if (*YYCURSOR == '{') { + break; + } + continue; + case '\\': + if (YYCURSOR < YYLIMIT && *YYCURSOR != '"') { + YYCURSOR++; + } + /* fall through */ + default: + continue; + } + + YYCURSOR--; + break; + } + + yyleng = YYCURSOR - SCNG(yy_text); + + zend_ini_escape_string(ini_lval, yytext, yyleng, '"' TSRMLS_CC); + return TC_QUOTED_STRING; +} + +{WHITESPACE} { + RETURN_TOKEN(TC_WHITESPACE, yytext, yyleng); +} + +{TABS_AND_SPACES}+ { + /* eat whitespace */ + goto restart; +} + +{TABS_AND_SPACES}*{NEWLINE} { + SCNG(lineno)++; + return END_OF_LINE; +} + +{TABS_AND_SPACES}*[;][^\r\n]*{NEWLINE} { /* Comment */ + BEGIN(INITIAL); + SCNG(lineno)++; + return END_OF_LINE; +} + +{TABS_AND_SPACES}*[#][^\r\n]*{NEWLINE} { /* #Comment */ + zend_error(E_DEPRECATED, "Comments starting with '#' are deprecated in %s on line %d", zend_ini_scanner_get_filename(TSRMLS_C), SCNG(lineno)); + BEGIN(INITIAL); + SCNG(lineno)++; + return END_OF_LINE; +} + +[^] { /* End of option value (if EOF is reached before EOL */ + BEGIN(INITIAL); + return END_OF_LINE; +} + +<*>[^] { + return 0; +} + +*/ +} diff --git a/samples/Limbo/cat.b b/samples/Limbo/cat.b new file mode 100644 index 00000000..5b9e3b5b --- /dev/null +++ b/samples/Limbo/cat.b @@ -0,0 +1,48 @@ +implement Cat; + +include "sys.m"; + sys: Sys; + +include "draw.m"; + +Cat: module +{ + init: fn(ctxt: ref Draw->Context, argv: list of string); +}; + +stdout: ref Sys->FD; + +init(nil: ref Draw->Context, args: list of string) +{ + sys = load Sys Sys->PATH; + stdout = sys->fildes(1); + args = tl args; + if(args == nil) + args = "-" :: nil; + for(; args != nil; args = tl args){ + file := hd args; + if(file != "-"){ + fd := sys->open(file, Sys->OREAD); + if(fd == nil){ + sys->fprint(sys->fildes(2), "cat: cannot open %s: %r\n", file); + raise "fail:bad open"; + } + cat(fd, file); + }else + cat(sys->fildes(0), ""); + } +} + +cat(fd: ref Sys->FD, file: string) +{ + buf := array[Sys->ATOMICIO] of byte; + while((n := sys->read(fd, buf, len buf)) > 0) + if(sys->write(stdout, buf, n) < n) { + sys->fprint(sys->fildes(2), "cat: write error: %r\n"); + raise "fail:write error"; + } + if(n < 0) { + sys->fprint(sys->fildes(2), "cat: error reading %s: %r\n", file); + raise "fail:read error"; + } +} diff --git a/samples/Limbo/lock.b b/samples/Limbo/lock.b new file mode 100644 index 00000000..8b51e4f9 --- /dev/null +++ b/samples/Limbo/lock.b @@ -0,0 +1,26 @@ +implement Lock; + +include "sys.m"; + sys: Sys; +include "lock.m"; + +Semaphore.obtain(l: self ref Semaphore) +{ + l.c <-= 0; +} + +Semaphore.release(l: self ref Semaphore) +{ + <-l.c; +} + +Semaphore.new(): ref Semaphore +{ + l := ref Semaphore; + l.c = chan[1] of int; + return l; +} + +init() +{ +} diff --git a/samples/Limbo/lock.m b/samples/Limbo/lock.m new file mode 100644 index 00000000..ffd818c5 --- /dev/null +++ b/samples/Limbo/lock.m @@ -0,0 +1,13 @@ +Lock: module +{ + PATH: con "/dis/lib/lock.dis"; + + Semaphore: adt { + c: chan of int; + obtain: fn(nil: self ref Semaphore); + release: fn(nil: self ref Semaphore); + new: fn(): ref Semaphore; + }; + + init: fn(); +}; diff --git a/samples/Linker Script/filenames/ld.script b/samples/Linker Script/filenames/ld.script new file mode 100644 index 00000000..8e6b07ca --- /dev/null +++ b/samples/Linker Script/filenames/ld.script @@ -0,0 +1,50 @@ +/* + * ld.script for compressed kernel support of MIPS + * + * Copyright (C) 2009 Lemote Inc. + * Author: Wu Zhangjin + * Copyright (C) 2010 "Wu Zhangjin" + */ + +OUTPUT_ARCH(mips) +ENTRY(start) +SECTIONS +{ + /* Text and read-only data */ + /* . = VMLINUZ_LOAD_ADDRESS; */ + .text : { + *(.text) + *(.rodata) + } + /* End of text section */ + + /* Writable data */ + .data : { + *(.data) + /* Put the compressed image here */ + __image_begin = .; + *(.image) + __image_end = .; + CONSTRUCTORS + } + . = ALIGN(16); + _edata = .; + /* End of data section */ + + /* BSS */ + .bss : { + *(.bss) + } + . = ALIGN(16); + _end = .; + + /* Sections to be discarded */ + /DISCARD/ : { + *(.MIPS.options) + *(.options) + *(.pdr) + *(.reginfo) + *(.comment) + *(.note) + } +} diff --git a/samples/Linker Script/link.ld b/samples/Linker Script/link.ld new file mode 100644 index 00000000..833fe462 --- /dev/null +++ b/samples/Linker Script/link.ld @@ -0,0 +1,12 @@ +/* +* link.ld +*/ +OUTPUT_FORMAT(elf32-i386) +ENTRY(start) +SECTIONS + { + . = 0x100000; + .text : { *(.text) } + .data : { *(.data) } + .bss : { *(.bss) } + } \ No newline at end of file diff --git a/samples/Linker Script/vmlinux.lds b/samples/Linker Script/vmlinux.lds new file mode 100644 index 00000000..00bf300f --- /dev/null +++ b/samples/Linker Script/vmlinux.lds @@ -0,0 +1,373 @@ +/* + * ld script for the x86 kernel + * + * Historic 32-bit version written by Martin Mares + * + * Modernisation, unification and other changes and fixes: + * Copyright (C) 2007-2009 Sam Ravnborg + * + * + * Don't define absolute symbols until and unless you know that symbol + * value is should remain constant even if kernel image is relocated + * at run time. Absolute symbols are not relocated. If symbol value should + * change if kernel is relocated, make the symbol section relative and + * put it inside the section definition. + */ + +#ifdef CONFIG_X86_32 +#define LOAD_OFFSET __PAGE_OFFSET +#else +#define LOAD_OFFSET __START_KERNEL_map +#endif + +#include +#include +#include +#include +#include +#include + +#undef i386 /* in case the preprocessor is a 32bit one */ + +OUTPUT_FORMAT(CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT) + +#ifdef CONFIG_X86_32 +OUTPUT_ARCH(i386) +ENTRY(phys_startup_32) +jiffies = jiffies_64; +#else +OUTPUT_ARCH(i386:x86-64) +ENTRY(phys_startup_64) +jiffies_64 = jiffies; +#endif + +#if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA) +/* + * On 64-bit, align RODATA to 2MB so that even with CONFIG_DEBUG_RODATA + * we retain large page mappings for boundaries spanning kernel text, rodata + * and data sections. + * + * However, kernel identity mappings will have different RWX permissions + * to the pages mapping to text and to the pages padding (which are freed) the + * text section. Hence kernel identity mappings will be broken to smaller + * pages. For 64-bit, kernel text and kernel identity mappings are different, + * so we can enable protection checks that come with CONFIG_DEBUG_RODATA, + * as well as retain 2MB large page mappings for kernel text. + */ +#define X64_ALIGN_DEBUG_RODATA_BEGIN . = ALIGN(HPAGE_SIZE); + +#define X64_ALIGN_DEBUG_RODATA_END \ + . = ALIGN(HPAGE_SIZE); \ + __end_rodata_hpage_align = .; + +#else + +#define X64_ALIGN_DEBUG_RODATA_BEGIN +#define X64_ALIGN_DEBUG_RODATA_END + +#endif + +PHDRS { + text PT_LOAD FLAGS(5); /* R_E */ + data PT_LOAD FLAGS(6); /* RW_ */ +#ifdef CONFIG_X86_64 +#ifdef CONFIG_SMP + percpu PT_LOAD FLAGS(6); /* RW_ */ +#endif + init PT_LOAD FLAGS(7); /* RWE */ +#endif + note PT_NOTE FLAGS(0); /* ___ */ +} + +SECTIONS +{ +#ifdef CONFIG_X86_32 + . = LOAD_OFFSET + LOAD_PHYSICAL_ADDR; + phys_startup_32 = startup_32 - LOAD_OFFSET; +#else + . = __START_KERNEL; + phys_startup_64 = startup_64 - LOAD_OFFSET; +#endif + + /* Text and read-only data */ + .text : AT(ADDR(.text) - LOAD_OFFSET) { + _text = .; + /* bootstrapping code */ + HEAD_TEXT + . = ALIGN(8); + _stext = .; + TEXT_TEXT + SCHED_TEXT + LOCK_TEXT + KPROBES_TEXT + ENTRY_TEXT + IRQENTRY_TEXT + *(.fixup) + *(.gnu.warning) + /* End of text section */ + _etext = .; + } :text = 0x9090 + + NOTES :text :note + + EXCEPTION_TABLE(16) :text = 0x9090 + +#if defined(CONFIG_DEBUG_RODATA) + /* .text should occupy whole number of pages */ + . = ALIGN(PAGE_SIZE); +#endif + X64_ALIGN_DEBUG_RODATA_BEGIN + RO_DATA(PAGE_SIZE) + X64_ALIGN_DEBUG_RODATA_END + + /* Data */ + .data : AT(ADDR(.data) - LOAD_OFFSET) { + /* Start of data section */ + _sdata = .; + + /* init_task */ + INIT_TASK_DATA(THREAD_SIZE) + +#ifdef CONFIG_X86_32 + /* 32 bit has nosave before _edata */ + NOSAVE_DATA +#endif + + PAGE_ALIGNED_DATA(PAGE_SIZE) + + CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES) + + DATA_DATA + CONSTRUCTORS + + /* rarely changed data like cpu maps */ + READ_MOSTLY_DATA(INTERNODE_CACHE_BYTES) + + /* End of data section */ + _edata = .; + } :data + + + . = ALIGN(PAGE_SIZE); + __vvar_page = .; + + .vvar : AT(ADDR(.vvar) - LOAD_OFFSET) { + /* work around gold bug 13023 */ + __vvar_beginning_hack = .; + + /* Place all vvars at the offsets in asm/vvar.h. */ +#define EMIT_VVAR(name, offset) \ + . = __vvar_beginning_hack + offset; \ + *(.vvar_ ## name) +#define __VVAR_KERNEL_LDS +#include +#undef __VVAR_KERNEL_LDS +#undef EMIT_VVAR + + /* + * Pad the rest of the page with zeros. Otherwise the loader + * can leave garbage here. + */ + . = __vvar_beginning_hack + PAGE_SIZE; + } :data + + . = ALIGN(__vvar_page + PAGE_SIZE, PAGE_SIZE); + + /* Init code and data - will be freed after init */ + . = ALIGN(PAGE_SIZE); + .init.begin : AT(ADDR(.init.begin) - LOAD_OFFSET) { + __init_begin = .; /* paired with __init_end */ + } + +#if defined(CONFIG_X86_64) && defined(CONFIG_SMP) + /* + * percpu offsets are zero-based on SMP. PERCPU_VADDR() changes the + * output PHDR, so the next output section - .init.text - should + * start another segment - init. + */ + PERCPU_VADDR(INTERNODE_CACHE_BYTES, 0, :percpu) + ASSERT(SIZEOF(.data..percpu) < CONFIG_PHYSICAL_START, + "per-CPU data too large - increase CONFIG_PHYSICAL_START") +#endif + + INIT_TEXT_SECTION(PAGE_SIZE) +#ifdef CONFIG_X86_64 + :init +#endif + + INIT_DATA_SECTION(16) + + .x86_cpu_dev.init : AT(ADDR(.x86_cpu_dev.init) - LOAD_OFFSET) { + __x86_cpu_dev_start = .; + *(.x86_cpu_dev.init) + __x86_cpu_dev_end = .; + } + +#ifdef CONFIG_X86_INTEL_MID + .x86_intel_mid_dev.init : AT(ADDR(.x86_intel_mid_dev.init) - \ + LOAD_OFFSET) { + __x86_intel_mid_dev_start = .; + *(.x86_intel_mid_dev.init) + __x86_intel_mid_dev_end = .; + } +#endif + + /* + * start address and size of operations which during runtime + * can be patched with virtualization friendly instructions or + * baremetal native ones. Think page table operations. + * Details in paravirt_types.h + */ + . = ALIGN(8); + .parainstructions : AT(ADDR(.parainstructions) - LOAD_OFFSET) { + __parainstructions = .; + *(.parainstructions) + __parainstructions_end = .; + } + + /* + * struct alt_inst entries. From the header (alternative.h): + * "Alternative instructions for different CPU types or capabilities" + * Think locking instructions on spinlocks. + */ + . = ALIGN(8); + .altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) { + __alt_instructions = .; + *(.altinstructions) + __alt_instructions_end = .; + } + + /* + * And here are the replacement instructions. The linker sticks + * them as binary blobs. The .altinstructions has enough data to + * get the address and the length of them to patch the kernel safely. + */ + .altinstr_replacement : AT(ADDR(.altinstr_replacement) - LOAD_OFFSET) { + *(.altinstr_replacement) + } + + /* + * struct iommu_table_entry entries are injected in this section. + * It is an array of IOMMUs which during run time gets sorted depending + * on its dependency order. After rootfs_initcall is complete + * this section can be safely removed. + */ + .iommu_table : AT(ADDR(.iommu_table) - LOAD_OFFSET) { + __iommu_table = .; + *(.iommu_table) + __iommu_table_end = .; + } + + . = ALIGN(8); + .apicdrivers : AT(ADDR(.apicdrivers) - LOAD_OFFSET) { + __apicdrivers = .; + *(.apicdrivers); + __apicdrivers_end = .; + } + + . = ALIGN(8); + /* + * .exit.text is discard at runtime, not link time, to deal with + * references from .altinstructions and .eh_frame + */ + .exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) { + EXIT_TEXT + } + + .exit.data : AT(ADDR(.exit.data) - LOAD_OFFSET) { + EXIT_DATA + } + +#if !defined(CONFIG_X86_64) || !defined(CONFIG_SMP) + PERCPU_SECTION(INTERNODE_CACHE_BYTES) +#endif + + . = ALIGN(PAGE_SIZE); + + /* freed after init ends here */ + .init.end : AT(ADDR(.init.end) - LOAD_OFFSET) { + __init_end = .; + } + + /* + * smp_locks might be freed after init + * start/end must be page aligned + */ + . = ALIGN(PAGE_SIZE); + .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) { + __smp_locks = .; + *(.smp_locks) + . = ALIGN(PAGE_SIZE); + __smp_locks_end = .; + } + +#ifdef CONFIG_X86_64 + .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) { + NOSAVE_DATA + } +#endif + + /* BSS */ + . = ALIGN(PAGE_SIZE); + .bss : AT(ADDR(.bss) - LOAD_OFFSET) { + __bss_start = .; + *(.bss..page_aligned) + *(.bss) + . = ALIGN(PAGE_SIZE); + __bss_stop = .; + } + + . = ALIGN(PAGE_SIZE); + .brk : AT(ADDR(.brk) - LOAD_OFFSET) { + __brk_base = .; + . += 64 * 1024; /* 64k alignment slop space */ + *(.brk_reservation) /* areas brk users have reserved */ + __brk_limit = .; + } + + _end = .; + + STABS_DEBUG + DWARF_DEBUG + + /* Sections to be discarded */ + DISCARDS + /DISCARD/ : { *(.eh_frame) } +} + + +#ifdef CONFIG_X86_32 +/* + * The ASSERT() sink to . is intentional, for binutils 2.14 compatibility: + */ +. = ASSERT((_end - LOAD_OFFSET <= KERNEL_IMAGE_SIZE), + "kernel image bigger than KERNEL_IMAGE_SIZE"); +#else +/* + * Per-cpu symbols which need to be offset from __per_cpu_load + * for the boot processor. + */ +#define INIT_PER_CPU(x) init_per_cpu__##x = x + __per_cpu_load +INIT_PER_CPU(gdt_page); +INIT_PER_CPU(irq_stack_union); + +/* + * Build-time check on the image size: + */ +. = ASSERT((_end - _text <= KERNEL_IMAGE_SIZE), + "kernel image bigger than KERNEL_IMAGE_SIZE"); + +#ifdef CONFIG_SMP +. = ASSERT((irq_stack_union == 0), + "irq_stack_union is not at start of per-cpu area"); +#endif + +#endif /* CONFIG_X86_32 */ + +#ifdef CONFIG_KEXEC +#include + +. = ASSERT(kexec_control_code_size <= KEXEC_CONTROL_CODE_MAX_SIZE, + "kexec control code size is too big"); +#endif + diff --git a/samples/Linux Kernel Module/bcm4334x.mod b/samples/Linux Kernel Module/bcm4334x.mod new file mode 100644 index 00000000..8b35ba24 --- /dev/null +++ b/samples/Linux Kernel Module/bcm4334x.mod @@ -0,0 +1,2 @@ +/data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcm4334x.ko +/data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_pno.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_common.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_ip.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_custom_gpio.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_sched.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_cfg80211.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_wq.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/aiutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmevent.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmwifi_channels.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/hndpmu.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/linux_osl.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/sbutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/siutils.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_android.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfg80211.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfgp2p.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_cfg_btcoex.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wldev_common.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/wl_linux_mon.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_linux_platdev.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_sdmmc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/bcmsdh_sdmmc_linux.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_cdc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_wlfc.o /data/israel/edison/poky/meta-edison/recipes-kernel/bcm43340/driver_bcm43x/dhd_sdio.o diff --git a/samples/Linux Kernel Module/mbcache.mod b/samples/Linux Kernel Module/mbcache.mod new file mode 100644 index 00000000..1478b3a1 --- /dev/null +++ b/samples/Linux Kernel Module/mbcache.mod @@ -0,0 +1,2 @@ +fs/mbcache.ko +fs/mbcache.o diff --git a/samples/Linux Kernel Module/md5.mod b/samples/Linux Kernel Module/md5.mod new file mode 100644 index 00000000..85778eb0 --- /dev/null +++ b/samples/Linux Kernel Module/md5.mod @@ -0,0 +1,2 @@ +crypto/md5.ko +crypto/md5.o diff --git a/samples/MUF/39.m b/samples/MUF/39.m new file mode 100644 index 00000000..16dd9970 --- /dev/null +++ b/samples/MUF/39.m @@ -0,0 +1,278 @@ +$include $lib/strings +$include $lib/match +lvar check-obj-addr + +: check-next-loop (d -- ) + dup not if pop exit then + dup exit? over thing? or + me @ 3 pick .controls and if + dup check-obj-addr @ execute + then + next check-next-loop +; + +: check-contents (d -- ) + contents check-next-loop +; + +: check-exits (d -- ) + exits check-next-loop +; + +: exec-err (d mtypestr warnstr -- ) + "On " 4 rotate unparseobj strcat + ", in it's " strcat rot strcat + ", " strcat swap strcat .tell +; + +: can-linkto? (player object -- i) + dup "link_ok" flag? if pop pop 1 exit then + .controls +; + +: check-exec (d mtype execstr -- ) + dup "@" 1 strncmp if pop pop pop exit then + 1 strcut swap pop + " " .split pop + dup "$" 1 strncmp not if + dup match ok? not if + " is not a known registered program." strcat + exec-err exit + then + dup match program? not if + " is not a program." strcat + exec-err exit + then + 3 pick owner over match can-linkto? not if + " is not Link_OK." strcat + exec-err exit + then + else + dup number? not if + " is not a program dbref." strcat + "@" swap strcat exec-err exit + then + dup atoi dbref ok? not if + " is not a valid program reference." strcat + "@" swap strcat exec-err exit + then + dup atoi dbref program? not if + " is not a valid program reference." strcat + "@" swap strcat exec-err exit + then + 3 pick owner over atoi dbref can-linkto? not if + " is not Link_OK." strcat + "@" swap strcat exec-err exit + then + then + pop pop pop +; + + +: missing-err ( d s -- ) + swap unparseobj + " is missing an " + strcat swap strcat + " message." strcat .tell +; + +: colon-err ( d s -- ) + swap unparseobj + " has an unnecesary ':' at the start of its " + strcat swap strcat + " message." strcat .tell +; + +: check-desc (d -- ) + dup desc not if + "@description" missing-err + else + "@description" over + desc check-exec + then +; + +: check-succ (d -- ) + dup succ not if + "@success" missing-err + else + "@success" over + succ check-exec + then +; + +: check-fail (d -- ) + dup fail not if + "@fail" missing-err + else + "@fail" over + fail check-exec + then +; + +: check-drop (d -- ) + dup drop not if + "@drop" missing-err + else + "@drop" over + drop check-exec + then +; + +: check-osucc (d -- ) + dup osucc not if + "@osuccess" missing-err + else + dup osucc ":" 1 strncmp not if + "@osuccess" colon-err + else pop + then + then +; + +: check-ofail (d -- ) + dup ofail not if + "@ofail" missing-err + else + dup ofail ":" 1 strncmp not if + "@ofail" colon-err + else pop + then + then +; + +: check-odrop (d -- ) + dup odrop not if + "@odrop" missing-err + else + dup odrop ":" 1 strncmp not if + "@odrop" colon-err + else pop + then + then +; + + +$define islocked? (d -- i) getlockstr "*UNLOCKED*" stringcmp $enddef + +: islocked_always? (d -- i) + getlockstr dup "#0" stringcmp not if pop 1 exit then + dup "#" STRsplit swap pop atoi + "#" swap intostr strcat + (lockstr "#dbref") + dup "&!" over strcat strcat + 3 pick stringcmp not if pop pop 1 exit then + "&" over strcat strcat "!" swap strcat + stringcmp not if 1 exit then + 0 +; + +: check-link ( d -- ) + dup getlink not if + dup unparseobj " is unlinked." strcat .tell + else + dup getlink over location dbcmp if + dup islocked? not if + dup unparseobj + " is linked to it's location, but is unlocked." + strcat .tell + then + else (is not linked to it's location) + dup getlink program? if + dup dup owner swap getlink can-linkto? not if + dup unparseobj + " is linked to a program which is not Link_OK." + strcat .tell + then + then + then + then + pop +; + +: check-room (d -- ) + dup check-desc + dup islocked? if + dup islocked_always? not if + dup check-succ + then + dup check-fail + then + dup getlink if + dup check-drop + dup check-odrop + then + dup check-contents + check-exits +; + +: check-exit ( d -- ) + dup check-link + dup check-desc + dup getlink dup ok? if + program? not if + dup islocked_always? not if + dup check-succ + dup check-osucc + dup check-odrop + then + dup islocked? if + dup check-fail + dup check-ofail + then + then + else pop + then + pop +; + +: check-thing ( d -- ) + dup check-desc + dup islocked_always? not if + dup check-succ + dup check-osucc + then + dup islocked? if + dup check-fail + dup check-ofail + then + dup check-drop + dup check-odrop + check-exits +; + +: check-player ( d -- ) + dup check-desc + dup islocked_always? not if + dup check-succ + dup check-osucc + then + dup islocked? if + dup check-fail + dup check-ofail + then + dup check-contents + check-exits +; + +: check-program ( d -- ) + check-desc +; + +: check-obj (d -- ) + dup room? if check-room exit then + dup exit? if check-exit exit then + dup thing? if check-thing exit then + dup player? if check-player exit then + check-program +; + +: main + 'check-obj check-obj-addr ! + .strip dup not if pop "here" then + .match_controlled + dup #-3 dbcmp if pop me @ getlink then + dup ok? not if pop exit then + check-obj + me @ "Check done." notify +; diff --git a/samples/MUF/cmd-say.muf b/samples/MUF/cmd-say.muf new file mode 100644 index 00000000..6d27c65e --- /dev/null +++ b/samples/MUF/cmd-say.muf @@ -0,0 +1,275 @@ +@program cmd-say.muf +1 1000 d +i +( cmd-say.muf by Natasha@HLM + + Copyright 2002-2004 Natasha Snunkmeox. Copyright 2002-2004 Here Lie Monsters. + "@view $box/mit" for license information. +) +$author Natasha Snunkmeox +$note Say for Fuzzball 6. +$version 1.0 + +$include $lib/ignore +$include $lib/strings +$include $lib/match + +$def str_program "saypose" +$def prop_third "_prefs/say/third" +$def prop_quotes "_say/def/quotes" +$def prop_overb "_say/def/osay" +$def prop_verb "_say/def/say" +$def prop_split "_prefs/say/split" +$def prop_color "_prefs/say/color" +$def prop_meow "_prefs/say/meow" + +lvar randomWord + +lvar verb +lvar overb +lvar lquo +lvar rquo +lvar splitsay + +: rtn-getThirdVerb[ var:overb -- ] + ( Get the third-person verb. ) + me @ prop_overb getpropstr dup if ( str strOverb ) + strip dup dup "," instr not and if "," strcat then + else pop "says," then ( str strOverb ) + me @ "%D %s" fmtstring overb @ ! ( str ) +; + +: rtn-getFirstVerb[ var:verb var:overb -- ] + me @ prop_third getpropstr .yes? not if ( str ) + ( Get the first-person verb. ) + me @ prop_verb getpropstr dup if ( str strVerb ) + strip dup dup "," instr not and if "," strcat then + else pop "say," then ( str strVerb ) + splitsay @ if "you %s" else "You %s" then fmtstring ( str strVerb ) + else overb @ @ then verb @ ! ( str ) +; + +: rtn-getQuotes[ var:lquo var:rquo -- ] + me @ prop_quotes getpropstr dup "%m" instr if ( strQuotes ) + "%m" split ( strLquo strRquo ) + else pop "\"" dup then ( strLquo strRquo ) + rquo @ ! lquo @ ! ( ) +; + +: do-say ( str -- ) + "" randomWord ! + + var who + var exclude + + ( Ignoring? Get 'em outta here. ) + loc @ contents_array ( str arrHere ) + dup me @ str_program array_get_ignorers ( str arrHere arrIgnorers ) + dup exclude ! + swap array_diff who ! + + + ( Anyone #meowing this player? Go ahead and notify before special formatting. ) + who @ prop_meow me @ owner "*{%d}*" fmtstring array_filter_prop ( str arrMeow ) + dup if ( str arrMeow ) + dup who @ array_diff who ! ( str arrMeow ) + dup exclude @ array_union exclude ! ( str arrMeow ) + + over ansi_strip ( str arrMeow str ) + "\\b[A-Z0-9_]+\\b" "MEOW" REG_ALL regsub ( str arrMeow str' ) + "\\b[A-Z0-9_][A-Za-z0-9_]*[a-z][A-Za-z0-9_]*\\b" "Meow" REG_ALL regsub ( str arrMeow str' ) + "\\b[a-z_][A-Za-z0-9_]*\\b" "meow" REG_ALL regsub ( str arrMeow str' ) + me @ "%D meows, \"%s\"" fmtstring ( str arrMeow str" ) + 1 array_make swap array_notify ( str ) + else pop then ( str ) + + + var msg + + dup ",," instr ( str boolCommas ) + me @ prop_split getpropstr .no? not ( str boolCommas boolSplitOK ) + and if ( str ) + ",," split ( str- -str ) + + ( User-supplied verb? ) + dup ",," instr if + ",," split ( str- strVerb -str ) + swap dup if ( str- -str strVerb ) + strip ( str- -str strVerb ) + dup me @ name instr over tolower "%n" instr or if ( str- -str strVerb ) + "%n" "%N" subst me @ name "%n" subst ( str- -str strVerb ) + else + me @ swap "%s %D," fmtstring ( str- -str -str- ) + then ( str- -str -str- ) + dup "*[-!.,:;]" smatch not if "," strcat then ( str- -str -str- ) + dup verb ! overb ! ( str- -str ) + else pop then ( str- -str ) + then ( str- -str ) + + 2 array_make ( arrMsg ) + 1 + else 0 then splitsay ! msg ! + + + verb @ string? not if + overb rtn-getThirdVerb + verb overb rtn-getFirstVerb + then + lquo rquo rtn-getQuotes ( str ) + + + ( Say. ) + msg @ string? if + rquo @ msg @ lquo @ ( strRquo strMsg strLquo ) + "%s %s%s%s" ( strRquo strMsg strLquo strFormat ) + + 4 dupn + verb @ swap fmtstring .tell ( strRquo strMsg strLquo strFormat ) + overb @ swap fmtstring ( strOsay ) + else + rquo @ msg @ array_vals pop ( strRquo strMsg strMsg2 ) + swap dup "*[-!.,:;]" smatch not if "," strcat then swap ( strRquo strMsg strMsg2 ) + ( Only handle strMsg if there's no strMsg2. ) + dup if ( strRquo strMsg strMsg2 ) + swap ( strRquo strMsg2 strMsg ) + lquo @ swap rquo @ swap lquo @ ( strRquo strMsg2 strLquo strRquo strMsg' strLquo ) + "%s%s%s %s %s%s%s" ( strRquo strMsg2 strLquo strRquo strMsg' strLquo strFormat ) + + 7 + else ( strRquo strMsg strMsg2 ) + pop lquo @ ( strRquo strMsg' strLquo ) + "%s%s%s %s" ( strRquo strMsg' strLquo strFormat ) + + verb @ ",$" "." 0 regsub verb ! + overb @ ",$" "." 0 regsub overb ! + + 4 + then ( ... strRquo strMsg strLquo strFormat intDepth ) + + dupn + verb @ -5 rotate fmtstring .tell ( ... strRquo strMsg strLquo strFormat ) + overb @ -5 rotate fmtstring ( strOsay ) + then ( strOsay ) + + + ( Is there color to avoid? ) + dup "\[[" instr if + who @ prop_color "{n*|0}" array_filter_prop ( strOsay arrGreyed ) + dup if ( strOsay arrGreyed ) + over ansi_strip 1 array_make ( strOsay arrGreyed arrMsg ) + over array_notify ( strOsay arrGreyed ) + + exclude @ array_union exclude ! ( strOsay ) + else pop then ( strOsay ) + then ( strOsay ) + + loc @ ( strOsay db ) + exclude @ array_vals ( strOsay db dbExcludeN..dbExclude1 intN ) + me @ swap ++ ( strOsay db dbGreyedN..dbGreyed1' intN' ) + dup 3 + rotate ( db dbGreyedN..dbGreyed1 intN strOsay ) + notify_exclude ( ) +; + +: do-help pop pop .showhelp ; +: do-ignore pop str_program cmd-ignore-add ; +: do-unignore pop str_program cmd-ignore-del ; + +: do-third ( strY strZ -- ) + pop pop ( ) + me @ prop_third "yes" setprop + me @ "You will see your own says in the third person (\"%D says\")." fmtstring .tellgood +; +: do-unthird ( strY strZ -- ) + pop pop ( ) + me @ prop_third remove_prop + "You will see your own says in the second person (\"You say\")." .tellgood +; + +: do-grey ( strY strZ -- ) + pop pop ( ) + me @ prop_color "no" setprop + me @ "You will not see color in any says. Note you will see color in your own says." fmtstring .tellgood +; +: do-ungrey ( strY strZ -- ) + pop pop ( ) + me @ prop_color remove_prop + "You will see color in says." .tellgood +; + +: do-meow ( strY strZ -- ) + pop ( strY ) + dup if + .noisy_pmatch dup ok? not if pop exit then ( db ) + me @ prop_meow 3 pick reflist_find if ( db ) + "%D is already in your #meow list." fmtstring .tellbad exit ( ) + then ( db ) + me @ prop_meow 3 pick reflist_add ( db ) + "%D added." fmtstring .tellgood + else + me @ prop_meow array_get_reflist ( arr ) + "" swap foreach swap pop "%D %s" fmtstring repeat + "Your meowlist: " swap strcat .tellgood + then +; +: do-unmeow ( strY strZ -- ) + pop ( strY ) + .noisy_pmatch dup ok? not if pop exit then ( db ) + me @ prop_meow 3 pick reflist_find not if ( db ) + "%D is not in your #meow list." fmtstring .tellbad exit ( ) + then ( db ) + me @ prop_meow 3 pick reflist_del ( db ) + "%D removed." fmtstring .tellgood +; + +$define dict_commands { + "help" 'do-help + "ignore" 'do-ignore + "!ignore" 'do-unignore + "meow" 'do-meow + "!meow" 'do-unmeow + "third" 'do-third + "!third" 'do-unthird + "grey" 'do-grey + "gray" 'do-grey + "!grey" 'do-ungrey + "!gray" 'do-ungrey +}dict $enddef + +: main ( str -- ) + dup STRparse ( str strX strY strZ ) + 3 pick string? if 3 pick "#" stringpfx if ( str strX strY strZ ) + pop pop pop ( str ) + "#" split strcat ( str' ) + do-say exit ( ) + then then + 3 pick int? if pop pop pop do-say exit then + 4 rotate pop ( strX strY strZ ) + + rot dict_commands over array_getitem ( strY strZ strX ? ) + dup address? if ( strY strZ strX adr ) + swap pop ( strY strZ adr ) + execute ( ) + else pop ( strY strZ strX ) + "I don't recognize the command '#%s'. Try 'say #help' for help, or using '##' to say something starting with '#'." fmtstring .tellbad ( strY strZ ) + pop pop ( ) + then ( ) +; +. +c +q + +lsedit #257=_help +.del 1 $ +say +." +say #[!]ignore +say #[!]third +say #[!]grey +say #[!]meow + +Speaks to the room. Use #ignore to not see 's says, poses, and spoofs; use #meow to see 's says with all the words replaced with "meow." Use #third to see your own says in the third person (that is, "Puck says" instead of the normal "You say"). Use #grey to turn off color in others' says and poses. + +Say supports a "split" say if you put two consecutive commas in your message. For example, if CobaltBlue typed '"Hello,,how are you?' everyone would see '"Hello," says CobaltBlue, "how are you?"' You can also specify an "ad-hoc" verb by putting a message with your name or '%N' between pairs of commas: '"Hello,,%N welcomes Weiran,,how are you?' would display '"Hello," CobaltBlue welcomes Weiran, "how are you?"' +.format 10=78 +.format 8=78 +.end diff --git a/samples/Makefile/filenames/Kbuild b/samples/Makefile/filenames/Kbuild new file mode 100644 index 00000000..dd295335 --- /dev/null +++ b/samples/Makefile/filenames/Kbuild @@ -0,0 +1,23 @@ +# Fail on warnings - also for files referenced in subdirs +# -Werror can be disabled for specific files using: +# CFLAGS_ := -Wno-error +subdir-ccflags-y := -Werror + +# platform specific definitions +include arch/mips/Kbuild.platforms +obj-y := $(platform-y) + +# make clean traverses $(obj-) without having included .config, so +# everything ends up here +obj- := $(platform-) + +# mips object files +# The object files are linked as core-y files would be linked + +obj-y += kernel/ +obj-y += mm/ +obj-y += net/ + +ifdef CONFIG_KVM +obj-y += kvm/ +endif diff --git a/samples/Makefile/filenames/Makefile.boot b/samples/Makefile/filenames/Makefile.boot new file mode 100644 index 00000000..07c25c11 --- /dev/null +++ b/samples/Makefile/filenames/Makefile.boot @@ -0,0 +1,159 @@ +# $NetBSD$ + +S= ${.CURDIR}/../../../../.. + +NOMAN= +PROG?= boot +NEWVERSWHAT?= "BIOS Boot" +VERSIONFILE?= ${.CURDIR}/../version + +AFLAGS.biosboot.S= ${${ACTIVE_CC} == "clang":?-no-integrated-as:} + +SOURCES?= biosboot.S boot2.c conf.c devopen.c exec.c +SRCS= ${SOURCES} +.if !make(depend) +SRCS+= vers.c +.endif + +PIE_CFLAGS= +PIE_AFLAGS= +PIE_LDFLAGS= + +.include + +STRIPFLAG= # nothing + +LIBCRT0= # nothing +LIBCRTI= # nothing +LIBCRTBEGIN= # nothing +LIBCRTEND= # nothing +LIBC= # nothing + +BINDIR=/usr/mdec +BINMODE=444 + +.PATH: ${.CURDIR}/.. ${.CURDIR}/../../lib + +LDFLAGS+= -nostdlib -Wl,-N -Wl,-e,boot_start +CPPFLAGS+= -I ${.CURDIR}/.. -I ${.CURDIR}/../../lib -I ${S}/lib/libsa +CPPFLAGS+= -I ${.OBJDIR} +# Make sure we override any optimization options specified by the user +COPTS= -Os + +.if ${MACHINE_ARCH} == "x86_64" +LDFLAGS+= -Wl,-m,elf_i386 +AFLAGS+= -m32 +CPUFLAGS= -m32 +LIBKERN_ARCH=i386 +KERNMISCMAKEFLAGS="LIBKERN_ARCH=i386" +.else +CPUFLAGS= -march=i386 -mtune=i386 +.endif + +CFLAGS+= -mno-sse -mno-sse2 -mno-sse3 + +COPTS+= -ffreestanding +CFLAGS+= -Wall -Wmissing-prototypes -Wstrict-prototypes +CPPFLAGS+= -nostdinc -D_STANDALONE +CPPFLAGS+= -I$S + +CPPFLAGS+= -DSUPPORT_PS2 +CPPFLAGS+= -DDIRECT_SERIAL +CPPFLAGS+= -DSUPPORT_SERIAL=boot_params.bp_consdev + +CPPFLAGS+= -DCONSPEED=boot_params.bp_conspeed +CPPFLAGS+= -DCONSADDR=boot_params.bp_consaddr +CPPFLAGS+= -DCONSOLE_KEYMAP=boot_params.bp_keymap + +CPPFLAGS+= -DSUPPORT_CD9660 +CPPFLAGS+= -DSUPPORT_USTARFS +CPPFLAGS+= -DSUPPORT_DOSFS +CPPFLAGS+= -DSUPPORT_EXT2FS +#CPPFLAGS+= -DSUPPORT_MINIXFS3 +CPPFLAGS+= -DPASS_BIOSGEOM +CPPFLAGS+= -DPASS_MEMMAP +#CPPFLAGS+= -DBOOTPASSWD +CPPFLAGS+= -DEPIA_HACK +#CPPFLAGS+= -DDEBUG_MEMSIZE +#CPPFLAGS+= -DBOOT_MSG_COM0 +CPPFLAGS+= -DLIBSA_ENABLE_LS_OP + +# The biosboot code is linked to 'virtual' address of zero and is +# loaded at physical address 0x10000. +# XXX The heap values should be determined from _end. +SAMISCCPPFLAGS+= -DHEAP_START=0x40000 -DHEAP_LIMIT=0x70000 +SAMISCCPPFLAGS+= -DLIBSA_PRINTF_LONGLONG_SUPPORT +SAMISCMAKEFLAGS+= SA_USE_CREAD=yes # Read compressed kernels +SAMISCMAKEFLAGS+= SA_INCLUDE_NET=no # Netboot via TFTP, NFS + +CPPFLAGS+= -Wno-pointer-sign + +# CPPFLAGS+= -DBOOTXX_RAID1_SUPPORT + +I386_STAND_DIR?= $S/arch/i386/stand + +### find out what to use for libi386 +I386DIR= ${I386_STAND_DIR}/lib +.include "${I386DIR}/Makefile.inc" +LIBI386= ${I386LIB} + +### find out what to use for libsa +SA_AS= library +SAMISCMAKEFLAGS+="SA_USE_LOADFILE=yes" +SAMISCMAKEFLAGS+="SA_ENABLE_LS_OP=yes" +.include "${S}/lib/libsa/Makefile.inc" +LIBSA= ${SALIB} + +### find out what to use for libkern +KERN_AS= library +.include "${S}/lib/libkern/Makefile.inc" +LIBKERN= ${KERNLIB} + +### find out what to use for libz +Z_AS= library +.include "${S}/lib/libz/Makefile.inc" +LIBZ= ${ZLIB} + +LDSCRIPT ?= $S/arch/i386/conf/stand.ldscript + +cleandir distclean: .WAIT cleanlibdir + +cleanlibdir: + -rm -rf lib + +LIBLIST= ${LIBI386} ${LIBSA} ${LIBZ} ${LIBKERN} ${LIBI386} ${LIBSA} +# LIBLIST= ${LIBSA} ${LIBKERN} ${LIBI386} ${LIBSA} ${LIBZ} ${LIBKERN} + +CLEANFILES+= ${PROG}.tmp ${PROG}.map ${PROG}.sym vers.c + +vers.c: ${VERSIONFILE} ${SOURCES} ${LIBLIST} ${.CURDIR}/../Makefile.boot + ${HOST_SH} ${S}/conf/newvers_stand.sh ${VERSIONFILE} x86 ${NEWVERSWHAT} + +# Anything that calls 'real_to_prot' must have a %pc < 0x10000. +# We link the program, find the callers (all in libi386), then +# explicitly pull in the required objects before any other library code. +${PROG}: ${OBJS} ${LIBLIST} ${.CURDIR}/../Makefile.boot + ${_MKTARGET_LINK} + bb="$$( ${CC} -o ${PROG}.sym ${LDFLAGS} -Wl,-Ttext,0 -Wl,-cref \ + ${OBJS} ${LIBLIST} | ( \ + while read symbol file; do \ + [ -z "$$file" ] && continue; \ + [ "$$symbol" = real_to_prot ] && break; \ + done; \ + while \ + oifs="$$IFS"; \ + IFS='()'; \ + set -- $$file; \ + IFS="$$oifs"; \ + [ -n "$$2" ] && echo "${I386DST}/$$2"; \ + read file rest && [ -z "$$rest" ]; \ + do :; \ + done; \ + ) )"; \ + ${CC} -o ${PROG}.sym ${LDFLAGS} -Wl,-Ttext,0 -T ${LDSCRIPT} \ + -Wl,-Map,${PROG}.map -Wl,-cref ${OBJS} $$bb ${LIBLIST} + ${OBJCOPY} -O binary ${PROG}.sym ${PROG} + +.include +KLINK_MACHINE= i386 +.include diff --git a/samples/Makefile/foo.o.d b/samples/Makefile/foo.o.d new file mode 100644 index 00000000..cf0ba55c --- /dev/null +++ b/samples/Makefile/foo.o.d @@ -0,0 +1,5 @@ +bar/foo.o: \ + bar/foo.c \ + bar/baz.h + +bar/baz.h: diff --git a/samples/Makefile/makefile.script! b/samples/Makefile/makefile similarity index 100% rename from samples/Makefile/makefile.script! rename to samples/Makefile/makefile diff --git a/samples/Mathematica/Predicates.wl b/samples/Mathematica/Predicates.wl new file mode 100644 index 00000000..3c569691 --- /dev/null +++ b/samples/Mathematica/Predicates.wl @@ -0,0 +1,150 @@ +(* ::Package:: *) + +BeginPackage["Predicates`"]; + + +(* ::Title:: *) +(*Predicates*) + + +(* ::Section::Closed:: *) +(*Fuzzy Logic*) + + +(* ::Subsection:: *) +(*Documentation*) + + +PossiblyTrueQ::usage="Returns True if the argument is not definitely False."; +PossiblyFalseQ::usage="Returns True if the argument is not definitely True."; +PossiblyNonzeroQ::usage="Returns True if and only if its argument is not definitely zero."; + + +(* ::Subsection:: *) +(*Implimentation*) + + +Begin["`Private`"]; + + +PossiblyTrueQ[expr_]:=\[Not]TrueQ[\[Not]expr] + + +PossiblyFalseQ[expr_]:=\[Not]TrueQ[expr] + + +End[]; + + +(* ::Section::Closed:: *) +(*Numbers and Lists*) + + +(* ::Subsection:: *) +(*Documentation*) + + +AnyQ::usage="Given a predicate and a list, retuns True if and only if that predicate is True for at least one element of the list."; +AnyElementQ::usage="Returns True if cond matches any element of L."; +AllQ::usage="Given a predicate and a list, retuns True if and only if that predicate is True for all elements of the list."; +AllElementQ::usage="Returns True if cond matches any element of L."; + + +AnyNonzeroQ::usage="Returns True if L is a list such that at least one element is definitely not zero."; +AnyPossiblyNonzeroQ::usage="Returns True if expr is a list such that at least one element is not definitely zero."; + + +RealQ::usage="Returns True if and only if the argument is a real number"; +PositiveQ::usage="Returns True if and only if the argument is a positive real number"; +NonnegativeQ::usage="Returns True if and only if the argument is a non-negative real number"; +PositiveIntegerQ::usage="Returns True if and only if the argument is a positive integer"; +NonnegativeIntegerQ::usage="Returns True if and only if the argument is a non-negative integer"; + + +IntegerListQ::usage="Returns True if and only if the input is a list of integers."; +PositiveIntegerListQ::usage="Returns True if and only if the input is a list of positive integers."; +NonnegativeIntegerListQ::usage="Returns True if and only if the input is a list of non-negative integers."; +IntegerOrListQ::usage="Returns True if and only if the input is a list of integers or an integer."; +PositiveIntegerOrListQ::usage="Returns True if and only if the input is a list of positive integers or a positive integer."; +NonnegativeIntegerOrListQ::usage="Returns True if and only if the input is a list of positive integers or a positive integer."; + + +SymbolQ::usage="Returns True if argument is an unassigned symbol."; +SymbolOrNumberQ::usage="Returns True if argument is a number of has head 'Symbol'"; + + +(* ::Subsection:: *) +(*Implimentation*) + + +Begin["`Private`"]; + + +AnyQ[cond_, L_] := Fold[Or, False, cond /@ L] + + +AnyElementQ[cond_,L_]:=AnyQ[cond,Flatten[L]] + + +AllQ[cond_, L_] := Fold[And, True, cond /@ L] + + +AllElementQ[cond_, L_] := Fold[And, True, cond /@ L] + + +AnyNonzeroQ[L_]:=AnyElementQ[#!=0&,L] + + +PossiblyNonzeroQ[expr_]:=PossiblyTrueQ[expr!=0] + + +AnyPossiblyNonzeroQ[expr_]:=AnyElementQ[PossiblyNonzeroQ,expr] + + +RealQ[n_]:=TrueQ[Im[n]==0]; + + +PositiveQ[n_]:=Positive[n]; + + +PositiveIntegerQ[n_]:=PositiveQ[n]\[And]IntegerQ[n]; + + +NonnegativeQ[n_]:=TrueQ[RealQ[n]&&n>=0]; + + +NonnegativeIntegerQ[n_]:=NonnegativeQ[n]\[And]IntegerQ[n]; + + +IntegerListQ[input_]:=ListQ[input]&&Not[MemberQ[IntegerQ/@input,False]]; + + +IntegerOrListQ[input_]:=IntegerListQ[input]||IntegerQ[input]; + + +PositiveIntegerListQ[input_]:=IntegerListQ[input]&&Not[MemberQ[Positive[input],False]]; + + +PositiveIntegerOrListQ[input_]:=PositiveIntegerListQ[input]||PositiveIntegerQ[input]; + + +NonnegativeIntegerListQ[input_]:=IntegerListQ[input]&&Not[MemberQ[NonnegativeIntegerQ[input],False]]; + + +NonnegativeIntegerOrListQ[input_]:=NonnegativeIntegerListQ[input]||NonnegativeIntegerQ[input]; + + +SymbolQ[a_]:=Head[a]===Symbol; + + +SymbolOrNumberQ[a_]:=NumericQ[a]||Head[a]===Symbol; + + +End[]; + + +(* ::Section:: *) +(*Epilogue*) + + +EndPackage[]; diff --git a/samples/Mathematica/UnitTest.wlt b/samples/Mathematica/UnitTest.wlt new file mode 100644 index 00000000..21e67951 --- /dev/null +++ b/samples/Mathematica/UnitTest.wlt @@ -0,0 +1,17 @@ +BeginTestSection["Untitled-5"] + +VerificationTest[(* 1 *) + RotationMatrix[phi] + , + List[List[Cos[phi], Times[-1, Sin[phi]]], List[Sin[phi], Cos[phi]]] +] + +VerificationTest[(* 2 *) + Times[1, Power[Plus[a, Times[-1, a]], -1]] + , + ComplexInfinity + , + {Power::infy} +] + +EndTestSection[] diff --git a/samples/Modelica/NestedPackages.mo b/samples/Modelica/NestedPackages.mo new file mode 100644 index 00000000..d57e1134 --- /dev/null +++ b/samples/Modelica/NestedPackages.mo @@ -0,0 +1,26 @@ +within ModelicaByExample.PackageExamples; +package NestedPackages + "An example of how packages can be used to organize things" + package Types + type Rabbits = Real(quantity="Rabbits", min=0); + type Wolves = Real(quantity="Wolves", min=0); + type RabbitReproduction = Real(quantity="Rabbit Reproduction", min=0); + type RabbitFatalities = Real(quantity="Rabbit Fatalities", min=0); + type WolfReproduction = Real(quantity="Wolf Reproduction", min=0); + type WolfFatalities = Real(quantity="Wolf Fatalities", min=0); + end Types; + + model LotkaVolterra "Lotka-Volterra with types" + parameter Types.RabbitReproduction alpha=0.1; + parameter Types.RabbitFatalities beta=0.02; + parameter Types.WolfReproduction gamma=0.4; + parameter Types.WolfFatalities delta=0.02; + parameter Types.Rabbits x0=10; + parameter Types.Wolves y0=10; + Types.Rabbits x(start=x0); + Types.Wolves y(start=y0); + equation + der(x) = x*(alpha-beta*y); + der(y) = -y*(gamma-delta*x); + end LotkaVolterra; +end NestedPackages; diff --git a/samples/Modelica/NewtonCooling.mo b/samples/Modelica/NewtonCooling.mo new file mode 100644 index 00000000..5a24b99f --- /dev/null +++ b/samples/Modelica/NewtonCooling.mo @@ -0,0 +1,24 @@ +within ModelicaByExample.PackageExamples; +model NewtonCooling + "Cooling example importing physical types from the Modelica Standard Library" + import Modelica.SIunits.Temperature; + import Modelica.SIunits.Mass; + import Modelica.SIunits.Area; + import ConvectionCoefficient = Modelica.SIunits.CoefficientOfHeatTransfer; + import SpecificHeat = Modelica.SIunits.SpecificHeatCapacity; + + // Parameters + parameter Temperature T_inf=300.0 "Ambient temperature"; + parameter Temperature T0=280.0 "Initial temperature"; + parameter ConvectionCoefficient h=0.7 "Convective cooling coefficient"; + parameter Area A=1.0 "Surface area"; + parameter Mass m=0.1 "Mass of thermal capacitance"; + parameter SpecificHeat c_p=1.2 "Specific heat"; + + // Variables + Temperature T "Temperature"; +initial equation + T = T0 "Specify initial value for T"; +equation + m*c_p*der(T) = h*A*(T_inf-T) "Newton's law of cooling"; +end NewtonCooling; diff --git a/samples/Modelica/Pendulum.mo b/samples/Modelica/Pendulum.mo new file mode 100644 index 00000000..919cfb5f --- /dev/null +++ b/samples/Modelica/Pendulum.mo @@ -0,0 +1,47 @@ +within ModelicaByExample.Subsystems.Pendula; +model Pendulum "A single individual pendulum" + import Modelica.Mechanics.MultiBody.Parts; + import Modelica.Mechanics.MultiBody.Joints; + + parameter Modelica.SIunits.Position x; + parameter Modelica.SIunits.Mass m "Mass of mass point"; + parameter Modelica.SIunits.Angle phi "Initial angle"; + parameter Modelica.SIunits.Length L "String length"; + parameter Modelica.SIunits.Diameter d=0.01; + + Parts.Fixed ground(r={0,0,x}, animation=false) + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=270, origin={0,60}))); + Parts.PointMass ball(m=m, sphereDiameter=5*d) + annotation (Placement(transformation(extent={{-10,-90},{10,-70}}))); + Parts.BodyCylinder string(density=0, r={0,L,0}, diameter=d) + annotation (Placement(transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={0,-30}))); + Joints.Revolute revolute(phi(fixed=true, start=phi), + cylinderDiameter=d/2, animation=false) + annotation (Placement( + transformation( + extent={{-10,-10},{10,10}}, + rotation=90, + origin={0,20}))); +equation + connect(string.frame_a, ball.frame_a) annotation (Line( + points={{0,-40},{0,-40},{0,-80}}, + color={95,95,95}, + thickness=0.5, + smooth=Smooth.None)); + connect(revolute.frame_b, ground.frame_b) annotation (Line( + points={{0,30},{0,40},{0,40},{0,50}}, + color={95,95,95}, + thickness=0.5, + smooth=Smooth.None)); + connect(revolute.frame_a, string.frame_b) annotation (Line( + points={{0,10},{0,10},{0,-20},{0,-20}}, + color={95,95,95}, + thickness=0.5, + smooth=Smooth.None)); +end Pendulum; diff --git a/samples/Modelica/RLC.mo b/samples/Modelica/RLC.mo new file mode 100644 index 00000000..fb84728d --- /dev/null +++ b/samples/Modelica/RLC.mo @@ -0,0 +1,16 @@ +within ModelicaByExample.PackageExamples; +model RLC "An RLC circuit referencing types from the Modelica Standard Library" + parameter Modelica.SIunits.Voltage Vb=24 "Battery voltage"; + parameter Modelica.SIunits.Inductance L = 1; + parameter Modelica.SIunits.Resistance R = 100; + parameter Modelica.SIunits.Capacitance C = 1e-3; + Modelica.SIunits.Voltage V; + Modelica.SIunits.Current i_L; + Modelica.SIunits.Current i_R; + Modelica.SIunits.Current i_C; +equation + i_R = V/R; + i_C = C*der(V); + i_L=i_R+i_C; + L*der(i_L) = (Vb-V); +end RLC; diff --git a/samples/Modelica/SecondOrderSystem.mo b/samples/Modelica/SecondOrderSystem.mo new file mode 100644 index 00000000..29d412ec --- /dev/null +++ b/samples/Modelica/SecondOrderSystem.mo @@ -0,0 +1,29 @@ +within ModelicaByExample.PackageExamples; +model SecondOrderSystem + "A second order rotational system importing types from Modelica Standard Library" + import Modelica.SIunits.*; + parameter Angle phi1_init = 0; + parameter Angle phi2_init = 1; + parameter AngularVelocity omega1_init = 0; + parameter AngularVelocity omega2_init = 0; + parameter Inertia J1=0.4; + parameter Inertia J2=1.0; + parameter RotationalSpringConstant k1=11; + parameter RotationalSpringConstant k2=5; + parameter RotationalDampingConstant d1=0.2; + parameter RotationalDampingConstant d2=1.0; + Angle phi1; + Angle phi2; + AngularVelocity omega1; + AngularVelocity omega2; +initial equation + phi1 = phi1_init; + phi2 = phi2_init; + omega1 = omega1_init; + omega2 = omega2_init; +equation + omega1 = der(phi1); + omega2 = der(phi2); + J1*der(omega1) = k1*(phi2-phi1)+d1*der(phi2-phi1); + J2*der(omega2) = k1*(phi1-phi2)+d1*der(phi1-phi2)-k2*phi2-d2*der(phi2); +end SecondOrderSystem; diff --git a/samples/Modelica/System.mo b/samples/Modelica/System.mo new file mode 100644 index 00000000..82d762a5 --- /dev/null +++ b/samples/Modelica/System.mo @@ -0,0 +1,19 @@ +within ModelicaByExample.Subsystems.Pendula; +model System "A system of pendula" + import Modelica.Constants.g_n; + import Modelica.Constants.pi; + + parameter Integer n=15 "Number of pendula"; + parameter Modelica.SIunits.Position x[n] = linspace(0,(n-1)*0.05,n); + parameter Modelica.SIunits.Time T = 54; + parameter Modelica.SIunits.Time X = 30; + parameter Modelica.SIunits.Length lengths[n] = { g_n*(T/(2*pi*(X+(n-i))))^2 for i in 1:n}; + parameter Modelica.SIunits.Angle phi0 = 0.5; + + Pendulum pendulum[n](x=x, each m=1, each phi=phi0, L=lengths) + annotation (Placement(transformation(extent={{-10,-10},{10,10}}))); + inner Modelica.Mechanics.MultiBody.World world + annotation (Placement(transformation(extent={{-80,-60},{-60,-40}}))); + annotation (experiment(StopTime=54, + Interval=9e-3, Tolerance=1e-008)); +end System; diff --git a/samples/Modelica/package.mo b/samples/Modelica/package.mo new file mode 100644 index 00000000..09cdd4db --- /dev/null +++ b/samples/Modelica/package.mo @@ -0,0 +1,4 @@ +within ; +package ModelicaByExample +annotation (uses(Modelica(version="3.2.1"))); +end ModelicaByExample; diff --git a/samples/Modelica/package2.mo b/samples/Modelica/package2.mo new file mode 100644 index 00000000..98c31810 --- /dev/null +++ b/samples/Modelica/package2.mo @@ -0,0 +1,3 @@ +within ModelicaByExample; +package PackageExamples "Examples of using packages" +end PackageExamples; diff --git a/samples/Modelica/package3.mo b/samples/Modelica/package3.mo new file mode 100644 index 00000000..53cb202e --- /dev/null +++ b/samples/Modelica/package3.mo @@ -0,0 +1,3 @@ +within ModelicaByExample.Subsystems; +package GearSubsystemModel "Build a subsystem model representing a gear with backlash" +end GearSubsystemModel; diff --git a/samples/Modelica/package4.mo b/samples/Modelica/package4.mo new file mode 100644 index 00000000..c0630497 --- /dev/null +++ b/samples/Modelica/package4.mo @@ -0,0 +1,3 @@ +within ModelicaByExample.Subsystems; +package Pendula "Example of using arrays of subsystems to build complete systems" +end Pendula; diff --git a/samples/Modula-2/HuffChan.mod b/samples/Modula-2/HuffChan.mod new file mode 100644 index 00000000..14073609 --- /dev/null +++ b/samples/Modula-2/HuffChan.mod @@ -0,0 +1,329 @@ +IMPLEMENTATION MODULE HuffChan; + +(* + This module shows how to redefine standard IO file functions. It provides + functions for reading and writing packed files opened in Raw mode. +*) + +IMPORT IOChan, IOLink, ChanConsts, IOConsts, SYSTEM, Strings; +FROM Storage IMPORT ALLOCATE, DEALLOCATE; + +CONST + rbldFrq = 512; (* means: every 512 bytes rebuild table *) + +TYPE + charTap = POINTER TO ARRAY [0..MAX(INTEGER)-1] OF CHAR; + smbTp = POINTER TO smbT; + + smbT = RECORD (* Huffman's tree *) + ch : CHAR; + n : CARDINAL; (* frequncy of char ch *) + left,right,next : smbTp; + END; + + tblT = RECORD (* bit sequence for code *) + vl : CARDINAL; (* bit sequence *) + cnt : INTEGER; (* it length *) + END; + + lclDataT = RECORD (* channel's local data *) + tRoot : smbTp; + htbl : ARRAY [0..255] OF tblT; (* code -> bit sequence table *) + ftbl : ARRAY [0..255] OF CARDINAL; (* frequncey table *) + wBf,rb1,rb2 : CARDINAL; + wbc,rbc,smc : INTEGER; + chid : IOChan.ChanId; + END; + lclDataTp = POINTER TO lclDataT; + charp = POINTER TO CHAR; + +VAR + did : IOLink.DeviceId; + ldt : lclDataTp; + + +PROCEDURE Shf(a:CARDINAL; b : INTEGER) : CARDINAL; (* shl a,b (or shr) *) +BEGIN + RETURN SYSTEM.CAST(CARDINAL,SYSTEM.SHIFT(SYSTEM.CAST(BITSET,a),b)); +END Shf; + +PROCEDURE wrDword(a:CARDINAL); (* write 4 bytes to file *) +BEGIN + IOChan.RawWrite(ldt^.chid,SYSTEM.ADR(a),4); +END wrDword; + +PROCEDURE rdDword() : CARDINAL; (* read 4 bytes from file *) +VAR + a,z : CARDINAL; +BEGIN + a:=0; + IOChan.RawRead(ldt^.chid,SYSTEM.ADR(a),4,z); + RETURN a; +END rdDword; + +PROCEDURE wrSmb(ch : CHAR); (* write bit sequence for code ch *) +VAR + v,h : CARDINAL; + b,c : INTEGER; +BEGIN + WITH ldt^ DO + v:=htbl[ORD(ch)].vl; + c:=htbl[ORD(ch)].cnt; + IF c+wbc<=32 THEN + wBf:=Shf(wBf,c); + wBf:=wBf+v; + wbc:=wbc+c; + IF wbc=32 THEN + wrDword(wBf); + wBf:=0; wbc:=0; + END; + RETURN; + END; + b:=c+wbc-32; + h:=Shf(v,-b); + wBf:=Shf(wBf,32-wbc)+h; + wrDword(wBf); + wBf:=v-Shf(h,b); + wbc:=b; + END; +END wrSmb; + +PROCEDURE flush(); (* write data in buffer *) +BEGIN + WITH ldt^ DO + wBf:=Shf(wBf,32-wbc); + wrDword(wBf); + END; +END flush; + +PROCEDURE getSym() : CHAR; (* find code for first bit sequence in buffer *) +VAR + t,i : CARDINAL; + b : INTEGER; +BEGIN + WITH ldt^ DO + IF rbc<=32 THEN + rb2:=rdDword(); + t:=Shf(rb2,-rbc); + IF rbc=32 THEN t:=0; END; + rb1:=rb1+t; + rb2:=Shf(rb2,32-rbc); + IF rbc=0 THEN rb2:=0; END; + rbc:=rbc+32; + END; + FOR i:=0 TO 255 DO + t:=Shf(rb1,htbl[i].cnt-32); + IF t=htbl[i].vl THEN + rb1:=Shf(rb1,htbl[i].cnt); + b:=32-htbl[i].cnt; + t:=Shf(rb2,-b); + rb1:=rb1+t; + rb2:=Shf(rb2,32-b); + rbc:=rbc+b-32; + RETURN CHR(i); + END; + END; + END; +END getSym; + +PROCEDURE Insert(s : smbTp); (* insert new character in Huffman's tree *) +VAR + cr : smbTp; +BEGIN + WITH ldt^ DO + IF tRoot=NIL THEN + cr:=tRoot; + tRoot:=s; + s^.next:=cr; + RETURN; + ELSIF tRoot^.n<=s^.n THEN + cr:=tRoot; + tRoot:=s; + s^.next:=cr; + RETURN; + END; + cr:=tRoot; + WHILE (cr^.next<>NIL) & (cr^.next^.n>s^.n) DO + cr:=cr^.next; + END; + s^.next:=cr^.next; + cr^.next:=s; + END; +END Insert; + +PROCEDURE BuildTree(); (* build Huffman's tree *) +VAR + cr,ocr,ncr : smbTp; +BEGIN + WITH ldt^ DO + LOOP + ocr:=NIL; cr:=tRoot; + WHILE cr^.next^.next<>NIL DO + ocr:=cr; cr:=cr^.next; + END; + NEW(ncr); + ncr^.n:=cr^.n+cr^.next^.n; + ncr^.left:=cr; + ncr^.right:=cr^.next; + IF ocr<>NIL THEN + ocr^.next:=NIL; + Insert(ncr); + ELSE + tRoot:=NIL; + Insert(ncr); + EXIT; + END; + END; + END; +END BuildTree; + +PROCEDURE BuildTable(cr: smbTp; vl,n: CARDINAL); (* build table: code -> bit sequence *) +BEGIN + WITH ldt^ DO + IF cr^.left=NIL THEN + htbl[ORD(cr^.ch)].vl:=vl; + htbl[ORD(cr^.ch)].cnt:=n; + DISPOSE(cr); + RETURN; + END; + vl:=vl*2; + BuildTable(cr^.left,vl,n+1); + BuildTable(cr^.right,vl+1,n+1); + DISPOSE(cr); + END; +END BuildTable; + +PROCEDURE clcTab(); (* build code/bitseq. table from frequency table *) +VAR + i : CARDINAL; + s : smbTp; +BEGIN + WITH ldt^ DO + tRoot:=NIL; + FOR i:=0 TO 255 DO + NEW(s); + s^.ch:=CHR(i); + s^.n:=ftbl[i]; + s^.left:=NIL; s^.right:=NIL; s^.next:=NIL; + Insert(s); + END; + BuildTree(); + BuildTable(tRoot,0,0); + END; +END clcTab; + +PROCEDURE iniHuf(); +VAR + i : CARDINAL; +BEGIN + WITH ldt^ DO + FOR i:=0 TO 255 DO + ftbl[i]:=1; + END; + wBf:=0; wbc:=0; rb1:=0; rb2:=0; rbc:=0; + smc:=0; + clcTab(); + END; +END iniHuf; + + +PROCEDURE RawWrite(x: IOLink.DeviceTablePtr; buf: SYSTEM.ADDRESS; + len: CARDINAL); +VAR + i : CARDINAL; + ch : CHAR; + cht : charTap; +BEGIN + IF len = 0 THEN RETURN; END; + ldt:=SYSTEM.CAST(lclDataTp,x^.cd); + cht:=SYSTEM.CAST(charTap,buf); + WITH ldt^ DO + FOR i:=0 TO len-1 DO + ch:=cht^[i]; + wrSmb(ch); + IF ch = 377C THEN wrSmb(ch); END; + ftbl[ORD(ch)]:=ftbl[ORD(ch)]+1; smc:=smc+1; + IF smc=rbldFrq THEN + clcTab(); + smc:=0; + END; + END; + END; + x^.result:=IOChan.ReadResult(ldt^.chid); +END RawWrite; + +PROCEDURE RawRead(x: IOLink.DeviceTablePtr; buf: SYSTEM.ADDRESS; + blen: CARDINAL; VAR len: CARDINAL); +VAR + i : CARDINAL; + cht : charTap; + ch : CHAR; +BEGIN + ldt:=SYSTEM.CAST(lclDataTp,x^.cd); + cht:=SYSTEM.CAST(charTap,buf); + IF (blen=0) OR (x^.result<>IOConsts.allRight) THEN len:=0; RETURN; END; + WITH ldt^ DO + FOR i:=0 TO blen-1 DO + ch:=getSym(); + IF ch = 377C THEN + ch:=getSym(); + IF ch = 0C THEN + x^.result:=IOConsts.endOfInput; + len:=i; cht^[i]:=0C; + RETURN; + END; + END; + cht^[i]:=ch; + ftbl[ORD(ch)]:=ftbl[ORD(ch)]+1; smc:=smc+1; + IF smc=rbldFrq THEN + clcTab(); + smc:=0; + END; + END; + len:=blen; + END; +END RawRead; + +PROCEDURE CreateAlias(VAR cid: ChanId; io: ChanId; VAR res: OpenResults); +VAR + x : IOLink.DeviceTablePtr; +BEGIN + IOLink.MakeChan(did,cid); + IF cid = IOChan.InvalidChan() THEN + res:=ChanConsts.outOfChans + ELSE + NEW(ldt); + IF ldt=NIL THEN + IOLink.UnMakeChan(did,cid); + res:=ChanConsts.outOfChans; + RETURN; + END; + x:=IOLink.DeviceTablePtrValue(cid,did,IOChan.notAvailable,""); + ldt^.chid:=io; + x^.cd:=ldt; + x^.doRawWrite:=RawWrite; + x^.doRawRead:=RawRead; + res:=ChanConsts.opened; + iniHuf(); + x^.result:=IOConsts.allRight; + END; +END CreateAlias; + +PROCEDURE DeleteAlias(VAR cid: ChanId); +VAR + x : IOLink.DeviceTablePtr; +BEGIN + x:=IOLink.DeviceTablePtrValue(cid,did,IOChan.notAvailable,""); + ldt:=x^.cd; + IF ldt^.rbc=0 THEN + wrSmb(377C); + wrSmb(0C); + flush(); + END; + DISPOSE(ldt); + IOLink.UnMakeChan(did,cid); +END DeleteAlias; + +BEGIN + IOLink.AllocateDeviceId(did); +END HuffChan. diff --git a/samples/Module Management System/descrip.mms b/samples/Module Management System/descrip.mms new file mode 100644 index 00000000..f6530a56 --- /dev/null +++ b/samples/Module Management System/descrip.mms @@ -0,0 +1,1204 @@ +# DESCRIP.MMS +# Written By: Robert Alan Byer / byer@mail.ourservers.net +# Modified By: Mark Pizzolato / mark@infocomm.com +# Norman Lastovica / norman.lastovica@oracle.com +# +# This MMS/MMK build script is used to compile the various simulators in +# the SIMH package for OpenVMS using DEC C v6.0-001(AXP), v6.5-001(AXP), +# HP C V7.2-001 (IA64) and v6.4-005(VAX). +# +# Notes: On VAX, the PDP-10 and Eclipse simulators will not be built +# due to the fact that INT64 is required for that simulator. +# +# This build script will accept the following build options. +# +# ALL Just Build "Everything". +# ALTAIR Just Build The MITS Altair. +# ALTAIRZ80 Just Build The MITS Altair Z80. +# ECLIPSE Just Build The Data General Eclipse. +# GRI Just Build The GRI Corporation GRI-909. +# LGP Just Build The Royal-McBee LGP-30. +# H316 Just Build The Honewell 316/516. +# HP2100 Just Build The Hewlett-Packard HP-2100. +# I1401 Just Build The IBM 1401. +# I1620 Just Build The IBM 1620. +# IBM1130 Just Build The IBM 1130. +# ID16 Just Build The Interdata 16-bit CPU. +# ID32 Just Build The Interdata 32-bit CPU. +# NOVA Just Build The Data General Nova. +# PDP1 Just Build The DEC PDP-1. +# PDP4 Just Build The DEC PDP-4. +# PDP7 Just Build The DEC PDP-7. +# PDP8 Just Build The DEC PDP-8. +# PDP9 Just Build The DEC PDP-9. +# PDP10 Just Build The DEC PDP-10. +# PDP11 Just Build The DEC PDP-11. +# PDP15 Just Build The DEC PDP-15. +# S3 Just Build The IBM System 3. +# SDS Just Build The SDS 940. +# VAX Just Build The DEC VAX. +# VAX780 Just Build The DEC VAX780. +# CLEAN Will Clean Files Back To Base Kit. +# +# To build with debugging enabled (which will also enable traceback +# information) use.. +# +# MMK/MACRO=(DEBUG=1) +# +# This will produce an executable named {Simulator}-{I64|VAX|AXP}-DBG.EXE +# + +# Let's See If We Are Going To Build With DEBUG Enabled. Always compile +# /DEBUG so that the traceback and debug information is always available +# in the object files. + +CC_DEBUG = /DEBUG + +.IFDEF DEBUG +LINK_DEBUG = /DEBUG/TRACEBACK +CC_OPTIMIZE = /NOOPTIMIZE + +.IFDEF MMSALPHA +ALPHA_OR_IA64 = 1 +CC_FLAGS = /PREF=ALL +ARCH = AXP-DBG +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSIA64 +ALPHA_OR_IA64 = 1 +CC_FLAGS = /PREF=ALL +ARCH = I64-DBG +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSVAX +ALPHA_OR_IA64 = 0 +CC_FLAGS = $(CC_FLAGS) +ARCH = VAX-DBG +CC_DEFS = "__VAX" +.ENDIF + +.ELSE +LINK_DEBUG = /NODEBUG/NOTRACEBACK + +.IFDEF MMSALPHA +ALPHA_OR_IA64 = 1 +CC_OPTIMIZE = /OPT=(LEV=5)/ARCH=HOST +CC_FLAGS = /PREF=ALL +ARCH = AXP +CC_DEFS = "_LARGEFILE" +LINK_SECTION_BINDING = /SECTION_BINDING +.ENDIF + +.IFDEF MMSIA64 +ALPHA_OR_IA64 = 1 +CC_OPTIMIZE = /OPT=(LEV=5) +CC_FLAGS = /PREF=ALL +ARCH = I64 +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSVAX +ALPHA_OR_IA64 = 0 +CC_OPTIMIZE = /OPTIMIZE +CC_FLAGS = $(CC_FLAGS) +ARCH = VAX +CC_DEFS = "__VAX" +.ENDIF + +.ENDIF + +# Define Our Compiler Flags & Define The Compile Command +OUR_CC_FLAGS = $(CC_FLAGS)$(CC_DEBUG)$(CC_OPTIMIZE) \ + /NEST=PRIMARY/NAME=(AS_IS,SHORT) +CC = CC/DECC$(OUR_CC_FLAGS) + +# Define The BIN Directory Where The Executables Will Go. +# Define Our Library Directory. +# Define The platform specific Build Directory Where The Objects Will Go. +# +BIN_DIR = SYS$DISK:[.BIN] +LIB_DIR = SYS$DISK:[.LIB] +BLD_DIR = SYS$DISK:[.LIB.BLD-$(ARCH)] + +# Check To Make Sure We Have SYS$DISK:[.BIN] & SYS$DISK:[.LIB] Directory. +# +.FIRST + @ IF (F$SEARCH("SYS$DISK:[]BIN.DIR").EQS."") THEN CREATE/DIRECTORY $(BIN_DIR) + @ IF (F$SEARCH("SYS$DISK:[]LIB.DIR").EQS."") THEN CREATE/DIRECTORY $(LIB_DIR) + @ IF (F$SEARCH("SYS$DISK:[.LIB]BLD-$(ARCH).DIR").EQS."") THEN CREATE/DIRECTORY $(BLD_DIR) + @ IF (F$SEARCH("$(BLD_DIR)*.*").NES."") THEN DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.*;* + @ IF "".NES."''CC'" THEN DELETE/SYMBOL/GLOBAL CC + +# Core SIMH File Definitions. +# +SIMH_DIR = SYS$DISK:[] +SIMH_LIB = $(LIB_DIR)SIMH-$(ARCH).OLB +SIMH_SOURCE = $(SIMH_DIR)SIM_CONSOLE.C,$(SIMH_DIR)SIM_SOCK.C,\ + $(SIMH_DIR)SIM_TMXR.C,$(SIMH_DIR)SIM_ETHER.C,\ + $(SIMH_DIR)SIM_TAPE.C,$(SIMH_DIR)SIM_FIO.C,\ + $(SIMH_DIR)SIM_TIMER.C + +# VMS PCAP File Definitions. +# +PCAP_DIR = SYS$DISK:[.PCAP-VMS.PCAP-VCI] +PCAP_LIB = $(LIB_DIR)PCAP-$(ARCH).OLB +PCAP_SOURCE = \ + $(PCAP_DIR)PCAPVCI.C,$(PCAP_DIR)VCMUTIL.C,\ + $(PCAP_DIR)BPF_DUMP.C,$(PCAP_DIR)BPF_FILTER.C,\ + $(PCAP_DIR)BPF_IMAGE.C,$(PCAP_DIR)ETHERENT.C,\ + $(PCAP_DIR)FAD-GIFC.C,$(PCAP_DIR)GENCODE.C,\ + $(PCAP_DIR)GRAMMAR.C,$(PCAP_DIR)INET.C,\ + $(PCAP_DIR)NAMETOADDR.C,$(PCAP_DIR)OPTIMIZE.C,\ + $(PCAP_DIR)PCAP.C,$(PCAP_DIR)SAVEFILE.C,\ + $(PCAP_DIR)SCANNER.C,$(PCAP_DIR)SNPRINTF.C,\ + $(PCAP_DIR)PCAP-VMS.C +PCAP_VCMDIR = SYS$DISK:[.PCAP-VMS.PCAPVCM] +PCAP_VCM_SOURCES = $(PCAP_VCMDIR)PCAPVCM.C,$(PCAP_VCMDIR)PCAPVCM_INIT.MAR,\ + $(PCAP_VCMDIR)VCI_JACKET.MAR,$(PCAP_VCMDIR)VCMUTIL.C +PCAP_VCI = SYS$COMMON:[SYS$LDR]PCAPVCM.EXE + +# PCAP is not available on OpenVMS VAX or IA64 right now +# +.IFDEF MMSALPHA +PCAP_EXECLET = $(PCAP_VCI) +PCAP_INC = ,$(PCAP_DIR) +PCAP_LIBD = $(PCAP_LIB) +PCAP_LIBR = ,$(PCAP_LIB)/LIB/SYSEXE +PCAP_DEFS = ,"USE_NETWORK=1" +PCAP_SIMH_INC = /INCL=($(PCAP_DIR)) +.ENDIF + +# MITS Altair Simulator Definitions. +# +ALTAIR_DIR = SYS$DISK:[.ALTAIR] +ALTAIR_LIB = $(LIB_DIR)ALTAIR-$(ARCH).OLB +ALTAIR_SOURCE = $(ALTAIR_DIR)ALTAIR_SIO.C,$(ALTAIR_DIR)ALTAIR_CPU.C,\ + $(ALTAIR_DIR)ALTAIR_DSK.C,$(ALTAIR_DIR)ALTAIR_SYS.C +ALTAIR_OPTIONS = /INCL=($(SIMH_DIR),$(ALTAIR_DIR))/DEF=($(CC_DEFS)) + +# +# MITS Altair Z80 Simulator Definitions. +# +ALTAIRZ80_DIR = SYS$DISK:[.ALTAIRZ80] +ALTAIRZ80_LIB = $(LIB_DIR)ALTAIRZ80-$(ARCH).OLB +ALTAIRZ80_SOURCE = $(ALTAIRZ80_DIR)/ALTAIRZ80_CPU.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_CPU_NOMMU.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_DSK.C,$(ALTAIRZ80_DIR)/DISASM.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_SIO.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_SYS.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_HDSK.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_NET.C,\ + $(ALTAIRZ80_DIR)/FLASHWRITER2.C,$(ALTAIRZ80_DIR)/I86_DECODE.C,\ + $(ALTAIRZ80_DIR)/I86_OPS.C,$(ALTAIRZ80_DIR)/I86_PRIM_OPS.C,\ + $(ALTAIRZ80_DIR)/I8272.C,$(ALTAIRZ80_DIR)/INSNSA.C,$(ALTAIRZ80_DIR)/INSNSD.C,\ + $(ALTAIRZ80_DIR)/MFDC.C,$(ALTAIRZ80_DIR)/N8VEM.C,$(ALTAIRZ80_DIR)/VFDHD.C,\ + $(ALTAIRZ80_DIR)/S100_DISK1A.C,$(ALTAIRZ80_DIR)/S100_DISK2.C,\ + $(ALTAIRZ80_DIR)/S100_FIF.C,$(ALTAIRZ80_DIR)/S100_MDRIVEH.C,\ + $(ALTAIRZ80_DIR)/S100_MDSAD.C,$(ALTAIRZ80_DIR)/S100_SELCHAN.C,\ + $(ALTAIRZ80_DIR)/S100_SS1.C,$(ALTAIRZ80_DIR)/S100_64FDC.C,\ + $(ALTAIRZ80_DIR)/S100_SCP300F.C,$(ALTAIRZ80_DIR)/SIM_IMD.C,\ + $(ALTAIRZ80_DIR)/WD179X.C +ALTAIRZ80_OPTIONS = /INCL=($(SIMH_DIR),$(ALTAIRZ80_DIR))/DEF=($(CC_DEFS)) + +# +# Data General Nova Simulator Definitions. +# +NOVA_DIR = SYS$DISK:[.NOVA] +NOVA_LIB = $(LIB_DIR)NOVA-$(ARCH).OLB +NOVA_SOURCE = $(NOVA_DIR)NOVA_SYS.C,$(NOVA_DIR)NOVA_CPU.C,\ + $(NOVA_DIR)NOVA_DKP.C,$(NOVA_DIR)NOVA_DSK.C,\ + $(NOVA_DIR)NOVA_LP.C,$(NOVA_DIR)NOVA_MTA.C,\ + $(NOVA_DIR)NOVA_PLT.C,$(NOVA_DIR)NOVA_PT.C,\ + $(NOVA_DIR)NOVA_CLK.C,$(NOVA_DIR)NOVA_TT.C,\ + $(NOVA_DIR)NOVA_TT1.C,$(NOVA_DIR)NOVA_QTY.C +NOVA_OPTIONS = /INCL=($(SIMH_DIR),$(NOVA_DIR))/DEF=($(CC_DEFS)) + +# +# Data General Eclipse Simulator Definitions. +# +ECLIPSE_LIB = $(LIB_DIR)ECLIPSE-$(ARCH).OLB +ECLIPSE_SOURCE = $(NOVA_DIR)ECLIPSE_CPU.C,$(NOVA_DIR)ECLIPSE_TT.C,\ + $(NOVA_DIR)NOVA_SYS.C,$(NOVA_DIR)NOVA_DKP.C,\ + $(NOVA_DIR)NOVA_DSK.C,$(NOVA_DIR)NOVA_LP.C,\ + $(NOVA_DIR)NOVA_MTA.C,$(NOVA_DIR)NOVA_PLT.C,\ + $(NOVA_DIR)NOVA_PT.C,$(NOVA_DIR)NOVA_CLK.C,\ + $(NOVA_DIR)NOVA_TT1.C,$(NOVA_DIR)NOVA_QTY.C +ECLIPSE_OPTIONS = /INCL=($(SIMH_DIR),$(NOVA_DIR))\ + /DEF=($(CC_DEFS),"USE_INT64=1","ECLIPSE=1") + +# +# GRI Corporation GRI-909 Simulator Definitions. +# +GRI_DIR = SYS$DISK:[.GRI] +GRI_LIB = $(LIB_DIR)GRI-$(ARCH).OLB +GRI_SOURCE = $(GRI_DIR)GRI_CPU.C,$(GRI_DIR)GRI_STDDEV.C,$(GRI_DIR)GRI_SYS.C +GRI_OPTIONS = /INCL=($(SIMH_DIR),$(GRI_DIR))/DEF=($(CC_DEFS)) + +# +# Royal-McBee LGP-30 Simulator Definitions. +# +LGP_DIR = SYS$DISK:[.LGP] +LGP_LIB = $(LIB_DIR)LGP-$(ARCH).OLB +LGP_SOURCE = $(LGP_DIR)LGP_CPU.C,$(LGP_DIR)LGP_STDDEV.C,$(LGP_DIR)LGP_SYS.C +LGP_OPTIONS = /INCL=($(SIMH_DIR),$(LGP_DIR))/DEF=($(CC_DEFS)) + +# +# Honeywell 316/516 Simulator Definitions. +# +H316_DIR = SYS$DISK:[.H316] +H316_LIB = $(LIB_DIR)H316-$(ARCH).OLB +H316_SOURCE = $(H316_DIR)H316_STDDEV.C,$(H316_DIR)H316_LP.C,\ + $(H316_DIR)H316_CPU.C,$(H316_DIR)H316_SYS.C,\ + $(H316_DIR)H316_FHD.C,$(H316_DIR)H316_MT.C,\ + $(H316_DIR)H316_DP.C +H316_OPTIONS = /INCL=($(SIMH_DIR),$(H316_DIR))/DEF=($(CC_DEFS)) + +# +# Hewlett-Packard HP-2100 Simulator Definitions. +# +HP2100_DIR = SYS$DISK:[.HP2100] +HP2100_LIB = $(LIB_DIR)HP2100-$(ARCH).OLB +HP2100_SOURCE = $(HP2100_DIR)HP2100_STDDEV.C,$(HP2100_DIR)HP2100_DP.C,\ + $(HP2100_DIR)HP2100_DQ.C,$(HP2100_DIR)HP2100_DR.C,\ + $(HP2100_DIR)HP2100_LPS.C,$(HP2100_DIR)HP2100_MS.C,\ + $(HP2100_DIR)HP2100_MT.C,$(HP2100_DIR)HP2100_MUX.C,\ + $(HP2100_DIR)HP2100_CPU.C,$(HP2100_DIR)HP2100_FP.C,\ + $(HP2100_DIR)HP2100_SYS.C,$(HP2100_DIR)HP2100_LPT.C,\ + $(HP2100_DIR)HP2100_IPL.C,$(HP2100_DIR)HP2100_DS.C,\ + $(HP2100_DIR)HP2100_CPU0.C,$(HP2100_DIR)HP2100_CPU1.C,\ + $(HP2100_DIR)HP2100_CPU2.C,$(HP2100_DIR)HP2100_CPU3.C,\ + $(HP2100_DIR)HP2100_CPU4.C,$(HP2100_DIR)HP2100_CPU5.C,\ + $(HP2100_DIR)HP2100_CPU6.C,$(HP2100_DIR)HP2100_CPU7.C,\ + $(HP2100_DIR)HP2100_FP1.C,$(HP2100_DIR)HP2100_BACI.C,\ + $(HP2100_DIR)HP2100_MPX.C,$(HP2100_DIR)HP2100_PIF.C +.IF ALPHA_OR_IA64 +HP2100_OPTIONS = /INCL=($(SIMH_DIR),$(HP2100_DIR))\ + /DEF=($(CC_DEFS),"HAVE_INT64=1") +.ELSE +HP2100_OPTIONS = /INCL=($(SIMH_DIR),$(HP2100_DIR))/DEF=($(CC_DEFS)) +.ENDIF + +# +# Interdata 16-bit CPU. +# +ID16_DIR = SYS$DISK:[.INTERDATA] +ID16_LIB = $(LIB_DIR)ID16-$(ARCH).OLB +ID16_SOURCE = $(ID16_DIR)ID16_CPU.C,$(ID16_DIR)ID16_SYS.C,$(ID16_DIR)ID_DP.C,\ + $(ID16_DIR)ID_FD.C,$(ID16_DIR)ID_FP.C,$(ID16_DIR)ID_IDC.C,\ + $(ID16_DIR)ID_IO.C,$(ID16_DIR)ID_LP.C,$(ID16_DIR)ID_MT.C,\ + $(ID16_DIR)ID_PAS.C,$(ID16_DIR)ID_PT.C,$(ID16_DIR)ID_TT.C,\ + $(ID16_DIR)ID_UVC.C,$(ID16_DIR)ID16_DBOOT.C,$(ID16_DIR)ID_TTP.C +ID16_OPTIONS = /INCL=($(SIMH_DIR),$(ID16_DIR))/DEF=($(CC_DEFS)) + +# +# Interdata 32-bit CPU. +# +ID32_DIR = SYS$DISK:[.INTERDATA] +ID32_LIB = $(LIB_DIR)ID32-$(ARCH).OLB +ID32_SOURCE = $(ID32_DIR)ID32_CPU.C,$(ID32_DIR)ID32_SYS.C,$(ID32_DIR)ID_DP.C,\ + $(ID32_DIR)ID_FD.C,$(ID32_DIR)ID_FP.C,$(ID32_DIR)ID_IDC.C,\ + $(ID32_DIR)ID_IO.C,$(ID32_DIR)ID_LP.C,$(ID32_DIR)ID_MT.C,\ + $(ID32_DIR)ID_PAS.C,$(ID32_DIR)ID_PT.C,$(ID32_DIR)ID_TT.C,\ + $(ID32_DIR)ID_UVC.C,$(ID32_DIR)ID32_DBOOT.C,$(ID32_DIR)ID_TTP.C +ID32_OPTIONS = /INCL=($(SIMH_DIR),$(ID32_DIR))/DEF=($(CC_DEFS)) + +# +# IBM 1130 Simulator Definitions. +# +IBM1130_DIR = SYS$DISK:[.IBM1130] +IBM1130_LIB = $(LIB_DIR)IBM1130-$(ARCH).OLB +IBM1130_SOURCE = $(IBM1130_DIR)IBM1130_CPU.C,$(IBM1130_DIR)IBM1130_CR.C,\ + $(IBM1130_DIR)IBM1130_DISK.C,$(IBM1130_DIR)IBM1130_STDDEV.C,\ + $(IBM1130_DIR)IBM1130_SYS.C,$(IBM1130_DIR)IBM1130_GDU.C,\ + $(IBM1130_DIR)IBM1130_GUI.C,$(IBM1130_DIR)IBM1130_PRT.C,\ + $(IBM1130_DIR)IBM1130_FMT.C,$(IBM1130_DIR)IBM1130_PTRP.C,\ + $(IBM1130_DIR)IBM1130_PLOT.C,$(IBM1130_DIR)IBM1130_SCA.C,\ + $(IBM1130_DIR)IBM1130_T2741.C +IBM1130_OPTIONS = /INCL=($(SIMH_DIR),$(IBM1130_DIR))/DEF=($(CC_DEFS)) + +# +# IBM 1401 Simulator Definitions. +# +I1401_DIR = SYS$DISK:[.I1401] +I1401_LIB = $(LIB_DIR)I1401-$(ARCH).OLB +I1401_SOURCE = $(I1401_DIR)I1401_LP.C,$(I1401_DIR)I1401_CPU.C,\ + $(I1401_DIR)I1401_IQ.C,$(I1401_DIR)I1401_CD.C,\ + $(I1401_DIR)I1401_MT.C,$(I1401_DIR)I1401_DP.C,\ + $(I1401_DIR)I1401_SYS.C +I1401_OPTIONS = /INCL=($(SIMH_DIR),$(I1401_DIR))/DEF=($(CC_DEFS)) + + +# +# IBM 1620 Simulators Definitions. +# +I1620_DIR = SYS$DISK:[.I1620] +I1620_LIB = $(LIB_DIR)I1620-$(ARCH).OLB +I1620_SOURCE = $(I1620_DIR)I1620_CD.C,$(I1620_DIR)I1620_DP.C,\ + $(I1620_DIR)I1620_PT.C,$(I1620_DIR)I1620_TTY.C,\ + $(I1620_DIR)I1620_CPU.C,$(I1620_DIR)I1620_LP.C,\ + $(I1620_DIR)I1620_FP.C,$(I1620_DIR)I1620_SYS.C +I1620_OPTIONS = /INCL=($(SIMH_DIR),$(I1620_DIR))/DEF=($(CC_DEFS)) + +# +# PDP-1 Simulator Definitions. +# +PDP1_DIR = SYS$DISK:[.PDP1] +PDP1_LIB = $(LIB_DIR)PDP1-$(ARCH).OLB +PDP1_SOURCE = $(PDP1_DIR)PDP1_LP.C,$(PDP1_DIR)PDP1_CPU.C,\ + $(PDP1_DIR)PDP1_STDDEV.C,$(PDP1_DIR)PDP1_SYS.C,\ + $(PDP1_DIR)PDP1_DT.C,$(PDP1_DIR)PDP1_DRM.C,\ + $(PDP1_DIR)PDP1_CLK.C,$(PDP1_DIR)PDP1_DCS.C +PDP1_OPTIONS = /INCL=($(SIMH_DIR),$(PDP1_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment PDP-8 Simulator Definitions. +# +PDP8_DIR = SYS$DISK:[.PDP8] +PDP8_LIB = $(LIB_DIR)PDP8-$(ARCH).OLB +PDP8_SOURCE = $(PDP8_DIR)PDP8_CPU.C,$(PDP8_DIR)PDP8_CLK.C,\ + $(PDP8_DIR)PDP8_DF.C,$(PDP8_DIR)PDP8_DT.C,\ + $(PDP8_DIR)PDP8_LP.C,$(PDP8_DIR)PDP8_MT.C,\ + $(PDP8_DIR)PDP8_PT.C,$(PDP8_DIR)PDP8_RF.C,\ + $(PDP8_DIR)PDP8_RK.C,$(PDP8_DIR)PDP8_RX.C,\ + $(PDP8_DIR)PDP8_SYS.C,$(PDP8_DIR)PDP8_TT.C,\ + $(PDP8_DIR)PDP8_TTX.C,$(PDP8_DIR)PDP8_RL.C,\ + $(PDP8_DIR)PDP8_TSC.C,$(PDP8_DIR)PDP8_TD.C,\ + $(PDP8_DIR)PDP8_CT.C +PDP8_OPTIONS = /INCL=($(SIMH_DIR),$(PDP8_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment PDP-4, PDP-7, PDP-9 And PDP-15 Simulator Definitions. +# +PDP18B_DIR = SYS$DISK:[.PDP18B] +PDP4_LIB = $(LIB_DIR)PDP4-$(ARCH).OLB +PDP7_LIB = $(LIB_DIR)PDP7-$(ARCH).OLB +PDP9_LIB = $(LIB_DIR)PDP9-$(ARCH).OLB +PDP15_LIB = $(LIB_DIR)PDP15-$(ARCH).OLB +PDP18B_SOURCE = $(PDP18B_DIR)PDP18B_DT.C,$(PDP18B_DIR)PDP18B_DRM.C,\ + $(PDP18B_DIR)PDP18B_CPU.C,$(PDP18B_DIR)PDP18B_LP.C,\ + $(PDP18B_DIR)PDP18B_MT.C,$(PDP18B_DIR)PDP18B_RF.C,\ + $(PDP18B_DIR)PDP18B_RP.C,$(PDP18B_DIR)PDP18B_STDDEV.C,\ + $(PDP18B_DIR)PDP18B_SYS.C,$(PDP18B_DIR)PDP18B_TT1.C,\ + $(PDP18B_DIR)PDP18B_RB.C,$(PDP18B_DIR)PDP18B_FPP.C +PDP4_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP4=1") +PDP7_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP7=1") +PDP9_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP9=1") +PDP15_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP15=1") + +# +# Digital Equipment PDP-11 Simulator Definitions. +# +PDP11_DIR = SYS$DISK:[.PDP11] +PDP11_LIB1 = $(LIB_DIR)PDP11L1-$(ARCH).OLB +PDP11_SOURCE1 = $(PDP11_DIR)PDP11_FP.C,$(PDP11_DIR)PDP11_CPU.C,\ + $(PDP11_DIR)PDP11_DZ.C,$(PDP11_DIR)PDP11_CIS.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_RK.C,\ + $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RP.C,\ + $(PDP11_DIR)PDP11_RX.C,$(PDP11_DIR)PDP11_STDDEV.C,\ + $(PDP11_DIR)PDP11_SYS.C,$(PDP11_DIR)PDP11_TC.C, \ + $(PDP11_DIR)PDP11_CPUMOD.C,$(PDP11_DIR)PDP11_CR.C,\ + $(PDP11_DIR)PDP11_TA.C,$(PDP11_DIR)PDP11_IO_LIB.C +PDP11_LIB2 = $(LIB_DIR)PDP11L2-$(ARCH).OLB +PDP11_SOURCE2 = $(PDP11_DIR)PDP11_TM.C,$(PDP11_DIR)PDP11_TS.C,\ + $(PDP11_DIR)PDP11_IO.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TQ.C,$(PDP11_DIR)PDP11_PCLK.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_PT.C,\ + $(PDP11_DIR)PDP11_HK.C,$(PDP11_DIR)PDP11_XQ.C,\ + $(PDP11_DIR)PDP11_VH.C,$(PDP11_DIR)PDP11_RH.C,\ + $(PDP11_DIR)PDP11_XU.C,$(PDP11_DIR)PDP11_TU.C,\ + $(PDP11_DIR)PDP11_DL.C,$(PDP11_DIR)PDP11_RF.C, \ + $(PDP11_DIR)PDP11_RC.C,$(PDP11_DIR)PDP11_KG.C,\ + $(PDP11_DIR)PDP11_KE.C,$(PDP11_DIR)PDP11_DC.C +PDP11_OPTIONS = /INCL=($(SIMH_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_PDP11=1"$(PCAP_DEFS)) + +# +# Digital Equipment PDP-10 Simulator Definitions. +# +PDP10_DIR = SYS$DISK:[.PDP10] +PDP10_LIB = $(LIB_DIR)PDP10-$(ARCH).OLB +PDP10_SOURCE = $(PDP10_DIR)PDP10_FE.C,\ + $(PDP10_DIR)PDP10_CPU.C,$(PDP10_DIR)PDP10_KSIO.C,\ + $(PDP10_DIR)PDP10_LP20.C,$(PDP10_DIR)PDP10_MDFP.C,\ + $(PDP10_DIR)PDP10_PAG.C,$(PDP10_DIR)PDP10_XTND.C,\ + $(PDP10_DIR)PDP10_RP.C,$(PDP10_DIR)PDP10_SYS.C,\ + $(PDP10_DIR)PDP10_TIM.C,$(PDP10_DIR)PDP10_TU.C,\ + $(PDP11_DIR)PDP11_PT.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_XU.C,\ + $(PDP11_DIR)PDP11_CR.C +PDP10_OPTIONS = /INCL=($(SIMH_DIR),$(PDP10_DIR),$(PDP11_DIR))\ + /DEF=($(CC_DEFS),"USE_INT64=1","VM_PDP10=1"$(PCAP_DEFS)) + +# +# IBM System 3 Simulator Definitions. +# +S3_DIR = SYS$DISK:[.S3] +S3_LIB = $(LIB_DIR)S3-$(ARCH).OLB +S3_SOURCE = $(S3_DIR)S3_CD.C,$(S3_DIR)S3_CPU.C,$(S3_DIR)S3_DISK.C,\ + $(S3_DIR)S3_LP.C,$(S3_DIR)S3_PKB.C,$(S3_DIR)S3_SYS.C +S3_OPTIONS = /INCL=($(SIMH_DIR),$(S3_DIR))/DEF=($(CC_DEFS)) + +# +# SDS 940 +# +SDS_DIR = SYS$DISK:[.SDS] +SDS_LIB = $(LIB_DIR)SDS-$(ARCH).OLB +SDS_SOURCE = $(SDS_DIR)SDS_CPU.C,$(SDS_DIR)SDS_DRM.C,$(SDS_DIR)SDS_DSK.C,\ + $(SDS_DIR)SDS_IO.C,$(SDS_DIR)SDS_LP.C,$(SDS_DIR)SDS_MT.C,\ + $(SDS_DIR)SDS_MUX.C,$(SDS_DIR)SDS_RAD.C,$(SDS_DIR)SDS_STDDEV.C,\ + $(SDS_DIR)SDS_SYS.C +SDS_OPTIONS = /INCL=($(SIMH_DIR),$(SDS_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment VAX Simulator Definitions. +# +VAX_DIR = SYS$DISK:[.VAX] +VAX_LIB = $(LIB_DIR)VAX-$(ARCH).OLB +VAX_SOURCE = $(VAX_DIR)VAX_CIS.C,$(VAX_DIR)VAX_CMODE.C,\ + $(VAX_DIR)VAX_CPU.C,$(VAX_DIR)VAX_CPU1.C,\ + $(VAX_DIR)VAX_FPA.C,$(VAX_DIR)VAX_MMU.C,\ + $(VAX_DIR)VAX_OCTA.C,$(VAX_DIR)VAX_SYS.C,\ + $(VAX_DIR)VAX_SYSCM.C,$(VAX_DIR)VAX_SYSDEV.C,\ + $(VAX_DIR)VAX_SYSLIST.C,$(VAX_DIR)VAX_IO.C,\ + $(VAX_DIR)VAX_STDDEV.C,$(PDP11_DIR)PDP11_IO_LIB.C,\ + $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TS.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_TQ.C,\ + $(PDP11_DIR)PDP11_XQ.C,$(PDP11_DIR)PDP11_CR.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_VH.C +VAX_OPTIONS = /INCL=($(SIMH_DIR),$(VAX_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_VAX=1"$(PCAP_DEFS)) + +# Digital Equipment VAX780 Simulator Definitions. +# +VAX780_DIR = SYS$DISK:[.VAX] +VAX780_LIB1 = $(LIB_DIR)VAX780L1-$(ARCH).OLB +VAX780_SOURCE1 = $(VAX780_DIR)VAX_CPU.C,$(VAX780_DIR)VAX_CPU1.C,\ + $(VAX780_DIR)VAX_FPA.C,$(VAX780_DIR)VAX_CIS.C,\ + $(VAX780_DIR)VAX_OCTA.C,$(VAX780_DIR)VAX_CMODE.C,\ + $(VAX780_DIR)VAX_MMU.C,$(VAX780_DIR)VAX_SYS.C,\ + $(VAX780_DIR)VAX_SYSCM.C,$(VAX780_DIR)VAX780_STDDEV.C,\ + $(VAX780_DIR)VAX780_SBI.C,$(VAX780_DIR)VAX780_MEM.C,\ + $(VAX780_DIR)VAX780_UBA.C,$(VAX780_DIR)VAX780_MBA.C,\ + $(VAX780_DIR)VAX780_FLOAD.C,$(VAX780_DIR)VAX780_SYSLIST.C +VAX780_LIB2 = $(LIB_DIR)VAX780L2-$(ARCH).OLB +VAX780_SOURCE2 = $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TS.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_TQ.C,\ + $(PDP11_DIR)PDP11_XU.C,$(PDP11_DIR)PDP11_RY.C,\ + $(PDP11_DIR)PDP11_CR.C,$(PDP11_DIR)PDP11_RP.C,\ + $(PDP11_DIR)PDP11_TU.C,$(PDP11_DIR)PDP11_HK.C,\ + $(PDP11_DIR)PDP11_IO_LIB.C +VAX780_OPTIONS = /INCL=($(SIMH_DIR),$(VAX780_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_VAX=1"$(PCAP_DEFS),"VAX_780=1") + +# IBM 7094 Simulator Definitions. +# +I7094_DIR = SYS$DISK:[.I7094] +I7094_LIB = $(LIB_DIR)I7094-$(ARCH).OLB +I7094_SOURCE = $(I7094_DIR)I7094_CPU.C,$(I7094_DIR)I7094_CPU1.C,\ + $(I7094_DIR)I7094_IO.C,$(I7094_DIR)I7094_CD.C,\ + $(I7094_DIR)I7094_CLK.C,$(I7094_DIR)I7094_COM.C,\ + $(I7094_DIR)I7094_DRM.C,$(I7094_DIR)I7094_DSK.C,\ + $(I7094_DIR)I7094_SYS.C,$(I7094_DIR)I7094_LP.C,\ + $(I7094_DIR)I7094_MT.C,$(I7094_DIR)I7094_BINLOADER.C +I7094_OPTIONS = /INCL=($(SIMH_DIR),$(I7094_DIR))/DEF=($(CC_DEFS)) + +# If we're not a VAX, Build Everything +# +.IF ALPHA_OR_IA64 +ALL : ALTAIR ALTAIRZ80 ECLIPSE GRI LGP H316 HP2100 I1401 I1620 IBM1130 ID16 \ + ID32 NOVA PDP1 PDP4 PDP7 PDP8 PDP9 PDP10 PDP11 PDP15 S3 VAX VAX780 SDS \ + I7094 + @CONTINUE +.ELSE +# +# Else We Are On VAX And Build Everything EXCEPT the 64b simulators +# +ALL : ALTAIR ALTAIRZ80 GRI H316 HP2100 I1401 I1620 IBM1130 ID16 ID32 \ + NOVA PDP1 PDP4 PDP7 PDP8 PDP9 PDP11 PDP15 S3 VAX VAX780 SDS + @CONTINUE +.ENDIF + +CLEAN : + $! + $! Clean out all targets and building Remnants + $! + $ IF (F$SEARCH("$(BIN_DIR)*.EXE;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM $(BIN_DIR)*.EXE;* + $ IF (F$SEARCH("$(LIB_DIR)*.OLB;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM $(LIB_DIR)*.OLB;* + $ IF (F$SEARCH("SYS$DISK:[...]*.OBJ;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.OBJ;* + $ IF (F$SEARCH("SYS$DISK:[...]*.LIS;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.LIS;* + $ IF (F$SEARCH("SYS$DISK:[...]*.MAP;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.MAP;* + +# +# Build The Libraries. +# +$(SIMH_LIB) : $(SIMH_SOURCE) + $! + $! Building The $(SIMH_LIB) Library. + $! + $ $(CC)/DEF=($(CC_DEFS)$(PCAP_DEFS))$(PCAP_SIMH_INC) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ALTAIR_LIB) : $(ALTAIR_SOURCE) + $! + $! Building The $(ALTAIR_LIB) Library. + $! + $ $(CC)$(ALTAIR_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ALTAIRZ80_LIB) : $(ALTAIRZ80_SOURCE) + $! + $! Building The $(ALTAIRZ80_LIB) Library. + $! + $ $(CC)$(ALTAIRZ80_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The Eclipse Library. +# +.IF ALPHA_OR_IA64 +$(ECLIPSE_LIB) : $(ECLIPSE_SOURCE) + $! + $! Building The $(ECLIPSE_LIB) Library. + $! + $ $(CC)$(ECLIPSE_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(ECLIPSE_LIB) : + $! + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)ECLIPSE-$(ARCH).OLB Library On VAX. + $! +.ENDIF + +$(GRI_LIB) : $(GRI_SOURCE) + $! + $! Building The $(GRI_LIB) Library. + $! + $ $(CC)$(GRI_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(LGP_LIB) : $(LGP_SOURCE) + $! + $! Building The $(LGP_LIB) Library. + $! + $ $(CC)$(LGP_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(H316_LIB) : $(H316_SOURCE) + $! + $! Building The $(H316_LIB) Library. + $! + $ $(CC)$(H316_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(HP2100_LIB) : $(HP2100_SOURCE) + $! + $! Building The $(HP2100_LIB) Library. + $! + $ $(CC)$(HP2100_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(I1401_LIB) : $(I1401_SOURCE) + $! + $! Building The $(I1401_LIB) Library. + $! + $ $(CC)$(I1401_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(I1620_LIB) : $(I1620_SOURCE) + $! + $! Building The $(I1620_LIB) Library. + $! + $ $(CC)$(I1620_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(IBM1130_LIB) : $(IBM1130_SOURCE) + $! + $! Building The $(IBM1130_LIB) Library. + $! + $ $(CC)$(IBM1130_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ID16_LIB) : $(ID16_SOURCE) + $! + $! Building The $(ID16_LIB) Library. + $! + $ $(CC)$(ID16_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ID32_LIB) : $(ID32_SOURCE) + $! + $! Building The $(ID32_LIB) Library. + $! + $ $(CC)$(ID32_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(NOVA_LIB) : $(NOVA_SOURCE) + $! + $! Building The $(NOVA_LIB) Library. + $! + $ $(CC)$(NOVA_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP1_LIB) : $(PDP1_SOURCE) + $! + $! Building The $(PDP1_LIB) Library. + $! + $ $(CC)$(PDP1_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP4_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP4_LIB) Library. + $! + $ $(CC)$(PDP4_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP7_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP7_LIB) Library. + $! + $ $(CC)$(PDP7_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP8_LIB) : $(PDP8_SOURCE) + $! + $! Building The $(PDP8_LIB) Library. + $! + $ $(CC)$(PDP8_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP9_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP9_LIB) Library. + $! + $ $(CC)$(PDP9_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Library. +# +.IF ALPHA_OR_IA64 +$(PDP10_LIB) : $(PDP10_SOURCE) + $! + $! Building The $(PDP10_LIB) Library. + $! + $ $(CC)$(PDP10_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(PDP10_LIB) : + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)PDP10-$(ARCH).OLB Library On VAX. +.ENDIF + +$(PDP11_LIB1) : $(PDP11_SOURCE1) + $! + $! Building The $(PDP11_LIB1) Library. + $! + $(CC)$(PDP11_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP11_LIB2) : $(PDP11_SOURCE2) + $! + $! Building The $(PDP11_LIB2) Library. + $! + $(CC)$(PDP11_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP15_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP15_LIB) Library. + $! + $ $(CC)$(PDP15_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(S3_LIB) : $(S3_SOURCE) + $! + $! Building The $(S3_LIB) Library. + $! + $ $(CC)$(S3_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(SDS_LIB) : $(SDS_SOURCE) + $! + $! Building The $(SDS_LIB) Library. + $! + $ $(CC)$(SDS_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX_LIB) : $(VAX_SOURCE) + $! + $! Building The $(VAX_LIB) Library. + $! + $ $(CC)$(VAX_OPTIONS)/OBJ=$(VAX_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX780_LIB1) : $(VAX780_SOURCE1) + $! + $! Building The $(VAX780_LIB1) Library. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(VAX780_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX780_LIB2) : $(VAX780_SOURCE2) + $! + $! Building The $(VAX780_LIB2) Library. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(VAX780_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PCAP_LIB) : $(PCAP_SOURCE) + $! + $! Building The $(PCAP_LIB) Library. + $! + $ SET DEFAULT $(PCAP_DIR) + $ @VMS_PCAP $(DEBUG) + $ SET DEFAULT [--] + $ IF (F$SEARCH("$(PCAP_LIB)").NES."") THEN - + DELETE $(PCAP_LIB); + $ COPY $(PCAP_DIR)PCAP.OLB $(PCAP_LIB) + $ DELETE/NOLOG/NOCONFIRM $(PCAP_DIR)*.OBJ;*,$(PCAP_DIR)*.OLB;* + +# +# If Not On VAX, Build The IBM 7094 Library. +# +.IF ALPHA_OR_IA64 +$(I7094_LIB) : $(I7094_SOURCE) + $! + $! Building The $(I7094_LIB) Library. + $! + $ $(CC)$(I7094_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(I7094_LIB) : + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)I7094-$(ARCH).OLB Library On VAX. +.ENDIF + +# +# Individual Simulator Builds. +# +ALTAIR : $(SIMH_LIB) $(ALTAIR_LIB) + $! + $! Building The $(BIN_DIR)ALTAIR-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ALTAIR_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ALTAIR-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ALTAIR_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ALTAIRZ80 : $(SIMH_LIB) $(ALTAIRZ80_LIB) + $! + $! Building The $(BIN_DIR)ALTAIRZ80-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ALTAIRZ80_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ALTAIRZ80-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ALTAIRZ80_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Simulator. +# +.IF ALPHA_OR_IA64 +ECLIPSE : $(SIMH_LIB) $(ECLIPSE_LIB) + $! + $! Building The $(BIN_DIR)ECLIPSE-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ECLIPSE_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ECLIPSE-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ECLIPSE_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +ECLIPSE : + $! Sorry, Can't Build $(BIN_DIR)ECLIPSE-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +GRI : $(SIMH_LIB) $(GRI_LIB) + $! + $! Building The $(BIN_DIR)GRI-$(ARCH).EXE Simulator. + $! + $ $(CC)$(GRI_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)GRI-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(GRI_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +LGP : $(SIMH_LIB) $(LGP_LIB) + $! + $! Building The $(BIN_DIR)LGP-$(ARCH).EXE Simulator. + $! + $ $(CC)$(LGP_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)LGP-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(LGP_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +H316 : $(SIMH_LIB) $(H316_LIB) + $! + $! Building The $(BIN_DIR)H316-$(ARCH).EXE Simulator. + $! + $ $(CC)$(H316_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)H316-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(H316_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +HP2100 : $(SIMH_LIB) $(HP2100_LIB) + $! + $! Building The $(BIN_DIR)HP2100-$(ARCH).EXE Simulator. + $! + $ $(CC)$(HP2100_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)HP2100-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(HP2100_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +I1401 : $(SIMH_LIB) $(I1401_LIB) + $! + $! Building The $(BIN_DIR)I1401-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I1401_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I1401-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I1401_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +I1620 : $(SIMH_LIB) $(I1620_LIB) + $! + $! Building The $(BIN_DIR)I1620-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I1620_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I1620-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I1620_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +IBM1130 : $(SIMH_LIB) $(IBM1130_LIB) + $! + $! Building The $(BIN_DIR)IBM1130-$(ARCH).EXE Simulator. + $! + $ $(CC)$(IBM1130_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)IBM1130-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(IBM1130_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ID16 : $(SIMH_LIB) $(ID16_LIB) + $! + $! Building The $(BIN_DIR)ID16-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ID16_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ID16-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ID16_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ID32 : $(SIMH_LIB) $(ID32_LIB) + $! + $! Building The $(BIN_DIR)ID32-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ID32_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ID32-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ID32_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +NOVA : $(SIMH_LIB) $(NOVA_LIB) + $! + $! Building The $(BIN_DIR)NOVA-$(ARCH).EXE Simulator. + $! + $ $(CC)$(NOVA_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)NOVA-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(NOVA_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP1 : $(SIMH_LIB) $(PDP1_LIB) + $! + $! Building The $(BIN_DIR)PDP1-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP1_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP1-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP1_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP4 : $(SIMH_LIB) $(PDP4_LIB) + $! + $! Building The $(BIN_DIR)PDP4-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP4_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP4-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP4_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP7 : $(SIMH_LIB) $(PDP7_LIB) + $! + $! Building The $(BIN_DIR)PDP7-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP7_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP7-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP7_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP8 : $(SIMH_LIB) $(PDP8_LIB) + $! + $! Building The $(BIN_DIR)PDP8-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP8_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP8-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP8_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP9 : $(SIMH_LIB) $(PDP9_LIB) + $! + $! Building The $(BIN_DIR)PDP9-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP9_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP9-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP9_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Simulator. +# +.IF ALPHA_OR_IA64 +PDP10 : $(SIMH_LIB) $(PCAP_LIBD) $(PDP10_LIB) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)PDP10-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP10_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP10-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP10_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +PDP10 : + $! Sorry, Can't Build $(BIN_DIR)PDP10-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +PDP11 : $(SIMH_LIB) $(PCAP_LIBD) $(PDP11_LIB1) $(PDP11_LIB2) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)PDP11-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP11_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP11-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP11_LIB1)/LIBRARY,$(PDP11_LIB2)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP15 : $(SIMH_LIB) $(PDP15_LIB) + $! + $! Building The $(BIN_DIR)PDP15-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP15_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP15-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP15_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +S3 : $(SIMH_LIB) $(S3_LIB) + $! + $! Building The $(BIN_DIR)S3-$(ARCH).EXE Simulator. + $! + $ $(CC)$(S3_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)S3-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(S3_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +SDS : $(SIMH_LIB) $(SDS_LIB) + $! + $! Building The $(BIN_DIR)SDS-$(ARCH).EXE Simulator. + $! + $ $(CC)$(SDS_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)SDS-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(SDS_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +VAX : $(SIMH_LIB) $(PCAP_LIBD) $(VAX_LIB) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)VAX-$(ARCH).EXE Simulator. + $! + $ $(CC)$(VAX_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)$(LINK_SECTION_BINDING)- + /EXE=$(BIN_DIR)VAX-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(VAX_LIB)/LIBRARY,- + $(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +VAX780 : $(SIMH_LIB) $(PCAP_LIBD) $(VAX780_LIB1) $(VAX780_LIB2) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)VAX780-$(ARCH).EXE Simulator. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)$(LINK_SECTION_BINDING)- + /EXE=$(BIN_DIR)VAX780-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,- + $(VAX780_LIB1)/LIBRARY,$(VAX780_LIB2)/LIBRARY,- + $(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The IBM 7094 Simulator. +# +.IF ALPHA_OR_IA64 +I7094 : $(SIMH_LIB) $(I7094_LIB) + $! + $! Building The $(BIN_DIR)I7094-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I7094_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I7094-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I7094_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +I7094 : + $! Sorry, Can't Build $(BIN_DIR)I7094-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +# +# PCAP VCI Components +# +$(PCAP_VCI) : $(PCAP_VCMDIR)PCAPVCM.EXE + $! + $! Installing the PCAP VCI Execlet in SYS$LOADABLE_IMAGES + $! + $ COPY $(PCAP_VCMDIR)PCAPVCM.EXE SYS$COMMON:[SYS$LDR]PCAPVCM.EXE + +$(PCAP_VCMDIR)PCAPVCM.EXE : $(PCAP_VCM_SOURCES) + $! + $! Building The PCAP VCI Execlet + $! + $ @SYS$DISK:[.PCAP-VMS.PCAPVCM]BUILD_PCAPVCM + $ DELETE/NOLOG/NOCONFIRM $(PCAP_VCMDIR)*.OBJ;*,$(PCAP_VCMDIR)*.MAP;* diff --git a/samples/Module Management System/openvms.mmk b/samples/Module Management System/openvms.mmk new file mode 100644 index 00000000..4a48d3c1 --- /dev/null +++ b/samples/Module Management System/openvms.mmk @@ -0,0 +1,563 @@ +# Copyright (C) 1997, 2000 Aladdin Enterprises. All rights reserved. +# +# This software is provided AS-IS with no warranty, either express or +# implied. +# +# This software is distributed under license and may not be copied, +# modified or distributed except as expressly authorized under the terms +# of the license contained in the file LICENSE in this distribution. +# +# For more information about licensing, please refer to +# http://www.ghostscript.com/licensing/. For information on +# commercial licensing, go to http://www.artifex.com/licensing/ or +# contact Artifex Software, Inc., 101 Lucas Valley Road #110, +# San Rafael, CA 94903, U.S.A., +1(415)492-9861. + +# $Id: openvms.mmk,v 1.31 2004/12/10 23:48:48 giles Exp $ +# makefile for OpenVMS VAX and Alpha using MMK +# +# Please contact Jim Dunham (dunham@omtool.com) if you have questions. +# Addapted for MMK by Jouk Jansen (joukj@hrem.stm.tudelft.nl) +# Support for VAX C on OpenVMS was removed in release 6.01 by Aladdin: +# DEC C is now used on both VAX and Alpha platforms. +# +# ------------------------------- Options ------------------------------- # + +###### This section is the only part of the file you should need to edit. + +# on the make command line specify: +# mmk/descrip=[.src]openvms.mmk/macro=("DECWINDOWS1_2={0,1}") + +# Define the directory for the final executable, and the +# source, generated intermediate file, and object directories +# for the graphics library (GL) and the PostScript/PDF interpreter (PS). + +BINDIR=[.bin] +GLSRCDIR=[.src] +GLGENDIR=[.obj] +GLOBJDIR=[.obj] +PSSRCDIR=[.src] +PSGENDIR=[.obj] +PSOBJDIR=[.obj] +PSLIBDIR=[.lib] +# Because of OpenVMS syntactic problems, the following redundant definitions +# are necessary. If you are using more than one GENDIR and/or OBJDIR, +# you will have to edit the code below that creates these directories. +BIN_DIR=BIN.DIR +OBJ_DIR=OBJ.DIR + +# create directories +.first + if f$search("$(BIN_DIR)") .eqs. "" then create/directory/log $(BINDIR) + if f$search("$(OBJ_DIR)") .eqs. "" then create/directory/log $(GLOBJDIR) + +# Do not edit the next group of lines. + +#.include $(COMMONDIR)vmscdefs.mak +#.include $(COMMONDIR)vmsdefs.mak +#.include $(COMMONDIR)generic.mak +.include $(GLSRCDIR)version.mak +DD=$(GLGENDIR) +GLD=$(GLGENDIR) +PSD=$(PSGENDIR) + +# ------ Generic options ------ # + +# Define the directory that will hold documentation at runtime. + +GS_DOCDIR=GS_DOC +#GS_DOCDIR=SYS$COMMON:[GS] + +# Define the default directory/ies for the runtime +# initialization and font files. Separate multiple directories with ,. + +GS_LIB_DEFAULT=GS_LIB +#GS_LIB_DEFAULT=SYS$COMMON:[GS],SYS$COMMON:[GS.FONT] + +# Define whether or not searching for initialization files should always +# look in the current directory first. This leads to well-known security +# and confusion problems, but users insist on it. +# NOTE: this also affects searching for files named on the command line: +# see the "File searching" section of Use.htm for full details. +# Because of this, setting SEARCH_HERE_FIRST to 0 is not recommended. + +SEARCH_HERE_FIRST=1 + +# Define the name of the interpreter initialization file. +# (There is no reason to change this.) + +GS_INIT=GS_INIT.PS + +# Choose generic configuration options. + +# Setting DEBUG=1 includes debugging features in the code + +DEBUG=0 + +# Setting TDEBUG=1 includes symbol table information for the debugger, +# and also enables stack tracing on failure. + +TDEBUG= + +# Setting CDEBUG=1 enables 'C' compiler debugging and turns off optimization +# Code is substantially slower and larger. + +CDEBUG= + +# Define the name of the executable file. + +GS=GS + +# Define the name of a pre-built executable that can be invoked at build +# time. Currently, this is only needed for compiled fonts. The usual +# alternatives are: +# - the standard name of Ghostscript on your system (typically `gs'): +BUILD_TIME_GS=GS +# - the name of the executable you are building now. If you choose this +# option, then you must build the executable first without compiled fonts, +# and then again with compiled fonts. +#BUILD_TIME_GS=$(BINDIR)$(GS) -I$(PSLIBDIR) + +# Define the directory where the IJG JPEG library sources are stored, +# and the major version of the library that is stored there. +# You may need to change this if the IJG library version changes. +# See jpeg.mak for more information. + +.ifdef SYSLIB +JSRCDIR=sys$library: +.else +JSRCDIR=[--.jpeg-6b] +.endif +JVERSION=6 + +# Define the directory where the PNG library sources are stored, +# and the version of the library that is stored there. +# You may need to change this if the libpng version changes. +# See libpng.mak for more information. + +.ifdef SYSLIB +PSRCDIR=sys$library: +.else +PSRCDIR=[--.libpng-1_2_8] +.endif +PVERSION=10208 + +# Define the directory where the zlib sources are stored. +# See zlib.mak for more information. + +.ifdef SYSLIB +ZSRCDIR=sys$library: +.else +ZSRCDIR=[--.zlib-1_2_1] +.endif + +# Define the directory where the jbig2dec library sources are stored. +# See jbig2.mak for more information +.ifdef SYSLIB +JBIG2SRCDIR=sys$library: +.else +JBIG2SRCDIR=[--.jbig2dec-0_7] +.endif + +# Define the directory where the icclib source are stored. +# See icclib.mak for more information + +ICCSRCDIR=[.icclib] + +# IJS has not been ported to OpenVMS. If you do the port, +# you'll need to set these values. You'll also need to +# include the ijs.mak makefile (right after icclib.mak). +# +# Define the directory where the ijs source is stored, +# and the process forking method to use for the server. +# See ijs.mak for more information. + +#IJSSRCDIR=[.ijs] +#IJSEXECTYPE=unix + +# Note that built-in third-party libraries aren't available. + +SHARE_JPEG=0 +SHARE_LIBPNG=0 +SHARE_ZLIB=0 +SHARE_JBIG2=0 + +# Define the path to X11 include files + +X_INCLUDE=DECW$INCLUDE + +# ------ Platform-specific options ------ # + +# Define the drive, directory, and compiler name for the 'C' compiler. +# COMP is the full compiler path name. + +.ifdef DEBUG +SW_DEBUG=/DEBUG/NOOPTIMIZE +.else +# This should include /OPTIMIZE, but some OpenVMS compilers have an +# optimizer bug that causes them to generate incorrect code for gdevpsfx.c, +# so we must disable optimization. (Eventually we will check for the bug +# in genarch and enable optimization if it is safe.) +#SW_DEBUG=/NODEBUG/OPTIMIZE +SW_DEBUG=/NODEBUG/NOOPTIMIZE +.endif + +SW_PLATFORM=/DECC/PREFIX=ALL/NESTED_INCLUDE=PRIMARY/name=(as_is,short)/nowarn + +# Define any other compilation flags. +# Including defines for A4 paper size + +.ifdef A4_PAPER +SW_PAPER=/DEFINE=("A4","HAVE_MKSTEMP") +.else +SW_PAPER=/DEFINE=("HAVE_MKSTEMP") +.endif + +.ifdef IEEE +SW_IEEE=/float=ieee +.else +SW_IEEE= +.endif + +COMP=CC$(SW_DEBUG)$(SW_PLATFORM)$(SW_PAPER)$(SW_IEEE) + +# LINK is the full linker path name + +.ifdef TDEBUG +LINKER=LINK/DEBUG/TRACEBACK +.else +LINKER=LINK/NODEBUG/NOTRACEBACK +.endif + +# INCDIR contains the include files +INCDIR= + +# LIBDIR contains the library files +LIBDIR= + +# Define the .dev module that implements thread and synchronization +# primitives for this platform. Don't change this unless you really know +# what you're doing. + +SYNC=posync + +# ------ Devices and features ------ # + +# Choose the device(s) to include. See devs.mak for details, +# devs.mak and contrib.mak for the list of available devices. + +DEVICE_DEVS=$(DD)x11.dev $(DD)x11alpha.dev $(DD)x11cmyk.dev $(DD)x11gray2.dev $(DD)x11gray4.dev $(DD)x11mono.dev +DEVICE_DEVS1= +DEVICE_DEVS2= +DEVICE_DEVS3=$(DD)deskjet.dev $(DD)djet500.dev $(DD)laserjet.dev $(DD)ljetplus.dev $(DD)ljet2p.dev $(DD)ljet3.dev $(DD)ljet3d.dev $(DD)ljet4.dev $(DD)ljet4d.dev +DEVICE_DEVS4=$(DD)cdeskjet.dev $(DD)cdjcolor.dev $(DD)cdjmono.dev $(DD)cdj550.dev $(DD)pj.dev $(DD)pjxl.dev $(DD)pjxl300.dev +DEVICE_DEVS5=$(DD)uniprint.dev +DEVICE_DEVS6=$(DD)bj10e.dev $(DD)bj200.dev $(DD)bjc600.dev $(DD)bjc800.dev +DEVICE_DEVS7=$(DD)faxg3.dev $(DD)faxg32d.dev $(DD)faxg4.dev +DEVICE_DEVS8=$(DD)pcxmono.dev $(DD)pcxgray.dev $(DD)pcx16.dev $(DD)pcx256.dev $(DD)pcx24b.dev $(DD)pcxcmyk.dev +DEVICE_DEVS9=$(DD)pbm.dev $(DD)pbmraw.dev $(DD)pgm.dev $(DD)pgmraw.dev $(DD)pgnm.dev $(DD)pgnmraw.dev +DEVICE_DEVS10=$(DD)tiffcrle.dev $(DD)tiffg3.dev $(DD)tiffg32d.dev $(DD)tiffg4.dev $(DD)tifflzw.dev $(DD)tiffpack.dev +DEVICE_DEVS11=$(DD)tiff12nc.dev $(DD)tiff24nc.dev +DEVICE_DEVS12=$(DD)psmono.dev $(DD)psgray.dev $(DD)psrgb.dev $(DD)bit.dev $(DD)bitrgb.dev $(DD)bitcmyk.dev +DEVICE_DEVS13=$(DD)pngmono.dev $(DD)pnggray.dev $(DD)png16.dev $(DD)png256.dev $(DD)png16m.dev $(DD)pngalpha.dev +DEVICE_DEVS14=$(DD)jpeg.dev $(DD)jpeggray.dev +DEVICE_DEVS15=$(DD)pdfwrite.dev $(DD)pswrite.dev $(DD)epswrite.dev $(DD)pxlmono.dev $(DD)pxlcolor.dev +DEVICE_DEVS16=$(DD)bbox.dev +# Overflow from DEVS9 +DEVICE_DEVS17=$(DD)pnm.dev $(DD)pnmraw.dev $(DD)ppm.dev $(DD)ppmraw.dev $(DD)pkm.dev $(DD)pkmraw.dev $(DD)pksm.dev $(DD)pksmraw.dev +DEVICE_DEVS18= +DEVICE_DEVS19= +DEVICE_DEVS20= +DEVICE_DEVS21= +DEVICE_DEVS21= + +# Choose the language feature(s) to include. See gs.mak for details. + +FEATURE_DEVS=$(PSD)psl3.dev $(PSD)pdf.dev $(PSD)dpsnext.dev $(PSD)ttfont.dev $(PSD)epsf.dev $(PSD)fapi.dev $(PSD)jbig2.dev + +# Choose whether to compile the .ps initialization files into the executable. +# See gs.mak for details. + +COMPILE_INITS=0 + +# Choose whether to store band lists on files or in memory. +# The choices are 'file' or 'memory'. + +BAND_LIST_STORAGE=file + +# Choose which compression method to use when storing band lists in memory. +# The choices are 'lzw' or 'zlib'. + +BAND_LIST_COMPRESSOR=zlib + +# Choose the implementation of file I/O: 'stdio', 'fd', or 'both'. +# See gs.mak and sfxfd.c for more details. + +FILE_IMPLEMENTATION=stdio + +# Choose the implementation of stdio: '' for file I/O and 'c' for callouts +# See gs.mak and ziodevs.c/ziodevsc.c for more details. + +STDIO_IMPLEMENTATION=c + +# Define the name table capacity size of 2^(16+n). + +EXTEND_NAMES=0 + +# Define whether the system constants are writable. + +SYSTEM_CONSTANTS_ARE_WRITABLE=0 + +# Define the platform name. + +PLATFORM=openvms_ + +# Define the name of the makefile -- used in dependencies. + +MAKEFILE=$(GLSRCDIR)openvms.mmk +TOP_MAKEFILES=$(MAKEFILE) + +# Define the platform options + +PLATOPT= + +# Patch a couple of PC-specific things that aren't relevant to OpenVMS builds, +# but that cause `make' to produce warnings. + +PCFBASM= + +# It is very unlikely that anyone would want to edit the remaining +# symbols, but we describe them here for completeness: + +# Define the suffix for command files (e.g., null or .bat). + +CMD= + +# Define the directory separator character (\ for MS-DOS, / for Unix, +# nothing for OpenVMS). + +D= + +# Define the brackets for passing preprocessor definitions to the C compiler. +NULL= + +D_=/DEFINE=" +_D_=$(NULL)= +_D=" + +# Define the syntax of search paths for the C compiler. +# The OpenVMS compilers uses /INCLUDE=(dir1, dir2, ...dirn), +# and only a single /INCLUDE switch is allowed in the command line. + +I_=/INCLUDE=( +II=, +_I=) + +# Define the string for specifying the output file from the C compiler. + +O_=/OBJECT= + +# Define the quoting string for mixed-case arguments. +# (OpenVMS is the only platform where this isn't an empty string.) + +Q=" + +# Define the extension for executable files (e.g., null or .exe). + +XE=.exe + +# Define the extension for executable files for the auxiliary programs +# (e.g., null or .exe). + +XEAUX=.exe + +# Define the list of files that `make clean' removes. + +BEGINFILES=$(GLSRCDIR)OPENVMS.OPT $(GLSRCDIR)OPENVMS.COM + +# Define the C invocation for auxiliary programs (echogs, genarch). +# We don't need to define this separately. + +CCAUX= + +# Define the C invocation for normal compilation. + +CC=$(COMP) + +# Define the Link invocation. + +LINK=$(LINKER)/EXE=$@ $+,$(GLSRCDIR)OPENVMS.OPT/OPTION + +# Define the auxiliary program dependency. We don't need this. + +AK= + +# Define the syntax for command, object, and executable files. + +OBJ=obj + +# Define the prefix for image invocations. + +EXP=MCR $(NULL) + +# Define the prefix for shell invocations. + +SH= + +# Define generic commands. + +CP_=@$(GLSRCDIR)COPY_ONE + +# Define the command for deleting (a) file(s) (including wild cards) + +RM_=@$(GLSRCDIR)RM_ONE + +# Define the command for deleting multiple files / patterns. + +RMN_=@$(GLSRCDIR)RM_ALL + +# Define the arguments for genconf. + +CONFILES=-p %s +CONFLDTR=-o + +# Define the generic compilation rules. + +.suffixes : .c .obj .exe + +.obj.exe : + $(LINK) + +# ---------------------------- End of options ---------------------------- # + +# Define various incantations of the 'c' compiler. + +CC_=$(COMP) +CC_INT=$(CC_) +CC_NO_WARN=$(CC_) + +# ------------------- Include the generic makefiles ---------------------- # + +all : macro [.lib]Fontmap. $(GS_XE) + +#.include $(COMMONDIR)/ansidefs.mak +#.include $(COMMONDIR)/vmsdefs.mak +#.include $(COMMONDIR)/generic.mak +.include $(GLSRCDIR)gs.mak +.include $(GLSRCDIR)lib.mak +.include $(PSSRCDIR)int.mak +.include $(PSSRCDIR)cfonts.mak +.include $(GLSRCDIR)jpeg.mak +# zlib.mak must precede libpng.mak +.include $(GLSRCDIR)zlib.mak +.include $(GLSRCDIR)libpng.mak +JBIG2_EXTRA_OBJS=$(JBIG2OBJDIR)$(D)snprintf.$(OBJ) +.include $(GLSRCDIR)jbig2.mak +.include $(GLSRCDIR)icclib.mak +.include $(GLSRCDIR)devs.mak +.include $(GLSRCDIR)contrib.mak + + +# ----------------------------- Main program ------------------------------ + +macro : +.ifdef A4_PAPER + @ a4p = 1 +.else + @ a4p = 0 +.endif +.ifdef IEEE + @ i3e = 1 +.else + @ i3e = 0 +.endif +.ifdef SYSLIB + @ dsl = 1 +.else + @ dsl = 0 +.endif + @ decc = f$search("SYS$SYSTEM:DECC$COMPILER.EXE").nes."" + @ decw12 = f$search("SYS$SHARE:DECW$XTLIBSHRR5.EXE").nes."" + @ macro = "" + @ if dsl.or.a4p.or.decc.or.decw12 then macro = "/MACRO=(" + @ if decw12 then macro = macro + "DECWINDOWS1_2=1," + @ if a4p then macro = macro + "A4_PAPER=1," + @ if dsl then macro = macro + "SYSLIB=1," + @ if i3e then macro = macro + "IEEE=1," + @ if macro.nes."" then macro = f$extract(0,f$length(macro)-1,macro)+ ")" + $(MMS)$(MMSQUALIFIERS)'macro' $(GS_XE) + +$(GS_XE) : openvms $(GLGEN)arch.h $(GLOBJDIR)gs.$(OBJ) $(INT_ALL) $(LIB_ALL) + $(LINKER)/EXE=$@ $(GLOBJDIR)gs.$(OBJ),$(ld_tr)/OPTIONS,$(GLSRCDIR)OPENVMS.OPT/OPTION + @ Write Sys$Output "Build of GhostScript is complete!" + +# OpenVMS.dev + +openvms__=$(GLOBJ)gp_getnv.$(OBJ) $(GLOBJ)gp_vms.$(OBJ) $(GLOBJ)gp_stdia.$(OBJ) +$(GLGEN)openvms_.dev : $(openvms__) $(GLGEN)nosync.dev + $(SETMOD) $(GLGEN)openvms_ $(openvms__) -include $(GLGEN)nosync + +$(ECHOGS_XE) : $(GLOBJDIR)echogs.$(OBJ) +$(GENARCH_XE) : $(GLOBJDIR)genarch.$(OBJ) +$(GENCONF_XE) : $(GLOBJDIR)genconf.$(OBJ) +$(GENDEV_XE) : $(GLOBJDIR)gendev.$(OBJ) +$(GENHT_XE) : $(GLOBJDIR)genht.$(OBJ) +$(GENINIT_XE) : $(GLOBJDIR)geninit.$(OBJ) + +$(GLOBJDIR)echogs.$(OBJ) : $(GLSRCDIR)echogs.c +$(GLOBJDIR)genarch.$(OBJ) : $(GLSRCDIR)genarch.c $(GENARCH_DEPS) +$(GLOBJDIR)genconf.$(OBJ) : $(GLSRCDIR)genconf.c $(GENCONF_DEPS) +$(GLOBJDIR)gendev.$(OBJ) : $(GLSRCDIR)gendev.c $(GENDEV_DEPS) +# ****** NEED TO ADD $(GENHT_CFLAGS) HERE ****** +$(GLOBJDIR)genht.$(OBJ) : $(GLSRCDIR)genht.c $(GENHT_DEPS) +$(GLOBJDIR)geninit.$(OBJ) : $(GLSRCDIR)geninit.c $(GENINIT_DEPS) + +$(GLOBJ)gp_vms.$(OBJ) : $(GLSRC)gp_vms.c $(string__h) $(memory__h) $(gx_h) $(gp_h) $(gpmisc_h) $(gsstruct_h) + $(CC_)/include=($(GLGENDIR),$(GLSRCDIR))/obj=$(GLOBJ)gp_vms.$(OBJ) $(GLSRC)gp_vms.c + +$(GLOBJ)gp_stdia.$(OBJ) : $(GLSRC)gp_stdia.c $(AK) $(stdio__h) $(time__h) $(unistd__h) $(gx_h) $(gp_h) + $(CC_)/incl=$(GLOBJ)/obj=$(GLOBJ)gp_stdia.$(OBJ) $(GLSRC)gp_stdia.c + +# Preliminary definitions + +openvms : $(GLSRCDIR)openvms.com $(GLSRCDIR)openvms.opt + @$(GLSRCDIR)OPENVMS + +$(GLSRCDIR)openvms.com : $(GLSRCDIR)append_l.com + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB X11 $(X_INCLUDE)" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB GS_LIB ''F$ENVIRONMENT(""DEFAULT"")'" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB GS_DOC ''F$ENVIRONMENT(""DEFAULT"")'" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB DECC$USER_INCLUDE ''F$ENVIRONMENT(""DEFAULT"")', DECW$INCLUDE, DECC$LIBRARY_INCLUDE, SYS$LIBRARY" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB DECC$SYSTEM_INCLUDE ''F$ENVIRONMENT(""DEFAULT"")', DECW$INCLUDE, DECC$LIBRARY_INCLUDE, SYS$LIBRARY" + @$(GLSRCDIR)APPEND_L $@ "$ DEFINE/JOB SYS "DECC$LIBRARY_INCLUDE,SYS$LIBRARY" + +$(GLSRCDIR)openvms.opt : +.ifdef DECWINDOWS1_2 + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XMLIBSHR12.EXE/SHARE" + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XTLIBSHRR5.EXE/SHARE" + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XLIBSHR.EXE/SHARE" +.else + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XMLIBSHR.EXE/SHARE" + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XTSHR.EXE/SHARE" + @$(GLSRCDIR)APPEND_L $@ "SYS$SHARE:DECW$XLIBSHR.EXE/SHARE" +.endif + @$(GLSRCDIR)APPEND_L $@ ""Ident="""""GS $(GS_DOT_VERSION)""""" + +# The platform-specific makefiles must also include rules for creating +# certain dynamically generated files: +# gconfig_.h - this indicates the presence or absence of +# certain system header files that are located in different +# places on different systems. (It could be generated by +# the GNU `configure' program.) +# gconfigv.h - this indicates the status of certain machine- +# and configuration-specific features derived from definitions +# in the platform-specific makefile. + +$(gconfig__h) : $(TOP_MAKEFILES) $(ECHOGS_XE) + $(EXP)$(ECHOGS_XE) -w $(gconfig__h) -x 23 define "HAVE_SYS_TIME_H" + +$(gconfigv_h) : $(TOP_MAKEFILES) $(ECHOGS_XE) + $(EXP)$(ECHOGS_XE) -w $(gconfigv_h) -x 23 define "USE_ASM" 0 + $(EXP)$(ECHOGS_XE) -a $(gconfigv_h) -x 23 define "USE_FPU" 1 + $(EXP)$(ECHOGS_XE) -a $(gconfigv_h) -x 23 define "EXTEND_NAMES" 0$(EXTEND_NAMES) + $(EXP)$(ECHOGS_XE) -a $(gconfigv_h) -x 23 define "SYSTEM_CONSTANTS_ARE_WRITABLE" 0$(SYSTEM_CONSTANTS_ARE_WRITABLE) diff --git a/samples/Module Management System/simh_descrip.mms b/samples/Module Management System/simh_descrip.mms new file mode 100755 index 00000000..f6530a56 --- /dev/null +++ b/samples/Module Management System/simh_descrip.mms @@ -0,0 +1,1204 @@ +# DESCRIP.MMS +# Written By: Robert Alan Byer / byer@mail.ourservers.net +# Modified By: Mark Pizzolato / mark@infocomm.com +# Norman Lastovica / norman.lastovica@oracle.com +# +# This MMS/MMK build script is used to compile the various simulators in +# the SIMH package for OpenVMS using DEC C v6.0-001(AXP), v6.5-001(AXP), +# HP C V7.2-001 (IA64) and v6.4-005(VAX). +# +# Notes: On VAX, the PDP-10 and Eclipse simulators will not be built +# due to the fact that INT64 is required for that simulator. +# +# This build script will accept the following build options. +# +# ALL Just Build "Everything". +# ALTAIR Just Build The MITS Altair. +# ALTAIRZ80 Just Build The MITS Altair Z80. +# ECLIPSE Just Build The Data General Eclipse. +# GRI Just Build The GRI Corporation GRI-909. +# LGP Just Build The Royal-McBee LGP-30. +# H316 Just Build The Honewell 316/516. +# HP2100 Just Build The Hewlett-Packard HP-2100. +# I1401 Just Build The IBM 1401. +# I1620 Just Build The IBM 1620. +# IBM1130 Just Build The IBM 1130. +# ID16 Just Build The Interdata 16-bit CPU. +# ID32 Just Build The Interdata 32-bit CPU. +# NOVA Just Build The Data General Nova. +# PDP1 Just Build The DEC PDP-1. +# PDP4 Just Build The DEC PDP-4. +# PDP7 Just Build The DEC PDP-7. +# PDP8 Just Build The DEC PDP-8. +# PDP9 Just Build The DEC PDP-9. +# PDP10 Just Build The DEC PDP-10. +# PDP11 Just Build The DEC PDP-11. +# PDP15 Just Build The DEC PDP-15. +# S3 Just Build The IBM System 3. +# SDS Just Build The SDS 940. +# VAX Just Build The DEC VAX. +# VAX780 Just Build The DEC VAX780. +# CLEAN Will Clean Files Back To Base Kit. +# +# To build with debugging enabled (which will also enable traceback +# information) use.. +# +# MMK/MACRO=(DEBUG=1) +# +# This will produce an executable named {Simulator}-{I64|VAX|AXP}-DBG.EXE +# + +# Let's See If We Are Going To Build With DEBUG Enabled. Always compile +# /DEBUG so that the traceback and debug information is always available +# in the object files. + +CC_DEBUG = /DEBUG + +.IFDEF DEBUG +LINK_DEBUG = /DEBUG/TRACEBACK +CC_OPTIMIZE = /NOOPTIMIZE + +.IFDEF MMSALPHA +ALPHA_OR_IA64 = 1 +CC_FLAGS = /PREF=ALL +ARCH = AXP-DBG +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSIA64 +ALPHA_OR_IA64 = 1 +CC_FLAGS = /PREF=ALL +ARCH = I64-DBG +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSVAX +ALPHA_OR_IA64 = 0 +CC_FLAGS = $(CC_FLAGS) +ARCH = VAX-DBG +CC_DEFS = "__VAX" +.ENDIF + +.ELSE +LINK_DEBUG = /NODEBUG/NOTRACEBACK + +.IFDEF MMSALPHA +ALPHA_OR_IA64 = 1 +CC_OPTIMIZE = /OPT=(LEV=5)/ARCH=HOST +CC_FLAGS = /PREF=ALL +ARCH = AXP +CC_DEFS = "_LARGEFILE" +LINK_SECTION_BINDING = /SECTION_BINDING +.ENDIF + +.IFDEF MMSIA64 +ALPHA_OR_IA64 = 1 +CC_OPTIMIZE = /OPT=(LEV=5) +CC_FLAGS = /PREF=ALL +ARCH = I64 +CC_DEFS = "_LARGEFILE" +.ENDIF + +.IFDEF MMSVAX +ALPHA_OR_IA64 = 0 +CC_OPTIMIZE = /OPTIMIZE +CC_FLAGS = $(CC_FLAGS) +ARCH = VAX +CC_DEFS = "__VAX" +.ENDIF + +.ENDIF + +# Define Our Compiler Flags & Define The Compile Command +OUR_CC_FLAGS = $(CC_FLAGS)$(CC_DEBUG)$(CC_OPTIMIZE) \ + /NEST=PRIMARY/NAME=(AS_IS,SHORT) +CC = CC/DECC$(OUR_CC_FLAGS) + +# Define The BIN Directory Where The Executables Will Go. +# Define Our Library Directory. +# Define The platform specific Build Directory Where The Objects Will Go. +# +BIN_DIR = SYS$DISK:[.BIN] +LIB_DIR = SYS$DISK:[.LIB] +BLD_DIR = SYS$DISK:[.LIB.BLD-$(ARCH)] + +# Check To Make Sure We Have SYS$DISK:[.BIN] & SYS$DISK:[.LIB] Directory. +# +.FIRST + @ IF (F$SEARCH("SYS$DISK:[]BIN.DIR").EQS."") THEN CREATE/DIRECTORY $(BIN_DIR) + @ IF (F$SEARCH("SYS$DISK:[]LIB.DIR").EQS."") THEN CREATE/DIRECTORY $(LIB_DIR) + @ IF (F$SEARCH("SYS$DISK:[.LIB]BLD-$(ARCH).DIR").EQS."") THEN CREATE/DIRECTORY $(BLD_DIR) + @ IF (F$SEARCH("$(BLD_DIR)*.*").NES."") THEN DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.*;* + @ IF "".NES."''CC'" THEN DELETE/SYMBOL/GLOBAL CC + +# Core SIMH File Definitions. +# +SIMH_DIR = SYS$DISK:[] +SIMH_LIB = $(LIB_DIR)SIMH-$(ARCH).OLB +SIMH_SOURCE = $(SIMH_DIR)SIM_CONSOLE.C,$(SIMH_DIR)SIM_SOCK.C,\ + $(SIMH_DIR)SIM_TMXR.C,$(SIMH_DIR)SIM_ETHER.C,\ + $(SIMH_DIR)SIM_TAPE.C,$(SIMH_DIR)SIM_FIO.C,\ + $(SIMH_DIR)SIM_TIMER.C + +# VMS PCAP File Definitions. +# +PCAP_DIR = SYS$DISK:[.PCAP-VMS.PCAP-VCI] +PCAP_LIB = $(LIB_DIR)PCAP-$(ARCH).OLB +PCAP_SOURCE = \ + $(PCAP_DIR)PCAPVCI.C,$(PCAP_DIR)VCMUTIL.C,\ + $(PCAP_DIR)BPF_DUMP.C,$(PCAP_DIR)BPF_FILTER.C,\ + $(PCAP_DIR)BPF_IMAGE.C,$(PCAP_DIR)ETHERENT.C,\ + $(PCAP_DIR)FAD-GIFC.C,$(PCAP_DIR)GENCODE.C,\ + $(PCAP_DIR)GRAMMAR.C,$(PCAP_DIR)INET.C,\ + $(PCAP_DIR)NAMETOADDR.C,$(PCAP_DIR)OPTIMIZE.C,\ + $(PCAP_DIR)PCAP.C,$(PCAP_DIR)SAVEFILE.C,\ + $(PCAP_DIR)SCANNER.C,$(PCAP_DIR)SNPRINTF.C,\ + $(PCAP_DIR)PCAP-VMS.C +PCAP_VCMDIR = SYS$DISK:[.PCAP-VMS.PCAPVCM] +PCAP_VCM_SOURCES = $(PCAP_VCMDIR)PCAPVCM.C,$(PCAP_VCMDIR)PCAPVCM_INIT.MAR,\ + $(PCAP_VCMDIR)VCI_JACKET.MAR,$(PCAP_VCMDIR)VCMUTIL.C +PCAP_VCI = SYS$COMMON:[SYS$LDR]PCAPVCM.EXE + +# PCAP is not available on OpenVMS VAX or IA64 right now +# +.IFDEF MMSALPHA +PCAP_EXECLET = $(PCAP_VCI) +PCAP_INC = ,$(PCAP_DIR) +PCAP_LIBD = $(PCAP_LIB) +PCAP_LIBR = ,$(PCAP_LIB)/LIB/SYSEXE +PCAP_DEFS = ,"USE_NETWORK=1" +PCAP_SIMH_INC = /INCL=($(PCAP_DIR)) +.ENDIF + +# MITS Altair Simulator Definitions. +# +ALTAIR_DIR = SYS$DISK:[.ALTAIR] +ALTAIR_LIB = $(LIB_DIR)ALTAIR-$(ARCH).OLB +ALTAIR_SOURCE = $(ALTAIR_DIR)ALTAIR_SIO.C,$(ALTAIR_DIR)ALTAIR_CPU.C,\ + $(ALTAIR_DIR)ALTAIR_DSK.C,$(ALTAIR_DIR)ALTAIR_SYS.C +ALTAIR_OPTIONS = /INCL=($(SIMH_DIR),$(ALTAIR_DIR))/DEF=($(CC_DEFS)) + +# +# MITS Altair Z80 Simulator Definitions. +# +ALTAIRZ80_DIR = SYS$DISK:[.ALTAIRZ80] +ALTAIRZ80_LIB = $(LIB_DIR)ALTAIRZ80-$(ARCH).OLB +ALTAIRZ80_SOURCE = $(ALTAIRZ80_DIR)/ALTAIRZ80_CPU.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_CPU_NOMMU.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_DSK.C,$(ALTAIRZ80_DIR)/DISASM.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_SIO.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_SYS.C,\ + $(ALTAIRZ80_DIR)/ALTAIRZ80_HDSK.C,$(ALTAIRZ80_DIR)/ALTAIRZ80_NET.C,\ + $(ALTAIRZ80_DIR)/FLASHWRITER2.C,$(ALTAIRZ80_DIR)/I86_DECODE.C,\ + $(ALTAIRZ80_DIR)/I86_OPS.C,$(ALTAIRZ80_DIR)/I86_PRIM_OPS.C,\ + $(ALTAIRZ80_DIR)/I8272.C,$(ALTAIRZ80_DIR)/INSNSA.C,$(ALTAIRZ80_DIR)/INSNSD.C,\ + $(ALTAIRZ80_DIR)/MFDC.C,$(ALTAIRZ80_DIR)/N8VEM.C,$(ALTAIRZ80_DIR)/VFDHD.C,\ + $(ALTAIRZ80_DIR)/S100_DISK1A.C,$(ALTAIRZ80_DIR)/S100_DISK2.C,\ + $(ALTAIRZ80_DIR)/S100_FIF.C,$(ALTAIRZ80_DIR)/S100_MDRIVEH.C,\ + $(ALTAIRZ80_DIR)/S100_MDSAD.C,$(ALTAIRZ80_DIR)/S100_SELCHAN.C,\ + $(ALTAIRZ80_DIR)/S100_SS1.C,$(ALTAIRZ80_DIR)/S100_64FDC.C,\ + $(ALTAIRZ80_DIR)/S100_SCP300F.C,$(ALTAIRZ80_DIR)/SIM_IMD.C,\ + $(ALTAIRZ80_DIR)/WD179X.C +ALTAIRZ80_OPTIONS = /INCL=($(SIMH_DIR),$(ALTAIRZ80_DIR))/DEF=($(CC_DEFS)) + +# +# Data General Nova Simulator Definitions. +# +NOVA_DIR = SYS$DISK:[.NOVA] +NOVA_LIB = $(LIB_DIR)NOVA-$(ARCH).OLB +NOVA_SOURCE = $(NOVA_DIR)NOVA_SYS.C,$(NOVA_DIR)NOVA_CPU.C,\ + $(NOVA_DIR)NOVA_DKP.C,$(NOVA_DIR)NOVA_DSK.C,\ + $(NOVA_DIR)NOVA_LP.C,$(NOVA_DIR)NOVA_MTA.C,\ + $(NOVA_DIR)NOVA_PLT.C,$(NOVA_DIR)NOVA_PT.C,\ + $(NOVA_DIR)NOVA_CLK.C,$(NOVA_DIR)NOVA_TT.C,\ + $(NOVA_DIR)NOVA_TT1.C,$(NOVA_DIR)NOVA_QTY.C +NOVA_OPTIONS = /INCL=($(SIMH_DIR),$(NOVA_DIR))/DEF=($(CC_DEFS)) + +# +# Data General Eclipse Simulator Definitions. +# +ECLIPSE_LIB = $(LIB_DIR)ECLIPSE-$(ARCH).OLB +ECLIPSE_SOURCE = $(NOVA_DIR)ECLIPSE_CPU.C,$(NOVA_DIR)ECLIPSE_TT.C,\ + $(NOVA_DIR)NOVA_SYS.C,$(NOVA_DIR)NOVA_DKP.C,\ + $(NOVA_DIR)NOVA_DSK.C,$(NOVA_DIR)NOVA_LP.C,\ + $(NOVA_DIR)NOVA_MTA.C,$(NOVA_DIR)NOVA_PLT.C,\ + $(NOVA_DIR)NOVA_PT.C,$(NOVA_DIR)NOVA_CLK.C,\ + $(NOVA_DIR)NOVA_TT1.C,$(NOVA_DIR)NOVA_QTY.C +ECLIPSE_OPTIONS = /INCL=($(SIMH_DIR),$(NOVA_DIR))\ + /DEF=($(CC_DEFS),"USE_INT64=1","ECLIPSE=1") + +# +# GRI Corporation GRI-909 Simulator Definitions. +# +GRI_DIR = SYS$DISK:[.GRI] +GRI_LIB = $(LIB_DIR)GRI-$(ARCH).OLB +GRI_SOURCE = $(GRI_DIR)GRI_CPU.C,$(GRI_DIR)GRI_STDDEV.C,$(GRI_DIR)GRI_SYS.C +GRI_OPTIONS = /INCL=($(SIMH_DIR),$(GRI_DIR))/DEF=($(CC_DEFS)) + +# +# Royal-McBee LGP-30 Simulator Definitions. +# +LGP_DIR = SYS$DISK:[.LGP] +LGP_LIB = $(LIB_DIR)LGP-$(ARCH).OLB +LGP_SOURCE = $(LGP_DIR)LGP_CPU.C,$(LGP_DIR)LGP_STDDEV.C,$(LGP_DIR)LGP_SYS.C +LGP_OPTIONS = /INCL=($(SIMH_DIR),$(LGP_DIR))/DEF=($(CC_DEFS)) + +# +# Honeywell 316/516 Simulator Definitions. +# +H316_DIR = SYS$DISK:[.H316] +H316_LIB = $(LIB_DIR)H316-$(ARCH).OLB +H316_SOURCE = $(H316_DIR)H316_STDDEV.C,$(H316_DIR)H316_LP.C,\ + $(H316_DIR)H316_CPU.C,$(H316_DIR)H316_SYS.C,\ + $(H316_DIR)H316_FHD.C,$(H316_DIR)H316_MT.C,\ + $(H316_DIR)H316_DP.C +H316_OPTIONS = /INCL=($(SIMH_DIR),$(H316_DIR))/DEF=($(CC_DEFS)) + +# +# Hewlett-Packard HP-2100 Simulator Definitions. +# +HP2100_DIR = SYS$DISK:[.HP2100] +HP2100_LIB = $(LIB_DIR)HP2100-$(ARCH).OLB +HP2100_SOURCE = $(HP2100_DIR)HP2100_STDDEV.C,$(HP2100_DIR)HP2100_DP.C,\ + $(HP2100_DIR)HP2100_DQ.C,$(HP2100_DIR)HP2100_DR.C,\ + $(HP2100_DIR)HP2100_LPS.C,$(HP2100_DIR)HP2100_MS.C,\ + $(HP2100_DIR)HP2100_MT.C,$(HP2100_DIR)HP2100_MUX.C,\ + $(HP2100_DIR)HP2100_CPU.C,$(HP2100_DIR)HP2100_FP.C,\ + $(HP2100_DIR)HP2100_SYS.C,$(HP2100_DIR)HP2100_LPT.C,\ + $(HP2100_DIR)HP2100_IPL.C,$(HP2100_DIR)HP2100_DS.C,\ + $(HP2100_DIR)HP2100_CPU0.C,$(HP2100_DIR)HP2100_CPU1.C,\ + $(HP2100_DIR)HP2100_CPU2.C,$(HP2100_DIR)HP2100_CPU3.C,\ + $(HP2100_DIR)HP2100_CPU4.C,$(HP2100_DIR)HP2100_CPU5.C,\ + $(HP2100_DIR)HP2100_CPU6.C,$(HP2100_DIR)HP2100_CPU7.C,\ + $(HP2100_DIR)HP2100_FP1.C,$(HP2100_DIR)HP2100_BACI.C,\ + $(HP2100_DIR)HP2100_MPX.C,$(HP2100_DIR)HP2100_PIF.C +.IF ALPHA_OR_IA64 +HP2100_OPTIONS = /INCL=($(SIMH_DIR),$(HP2100_DIR))\ + /DEF=($(CC_DEFS),"HAVE_INT64=1") +.ELSE +HP2100_OPTIONS = /INCL=($(SIMH_DIR),$(HP2100_DIR))/DEF=($(CC_DEFS)) +.ENDIF + +# +# Interdata 16-bit CPU. +# +ID16_DIR = SYS$DISK:[.INTERDATA] +ID16_LIB = $(LIB_DIR)ID16-$(ARCH).OLB +ID16_SOURCE = $(ID16_DIR)ID16_CPU.C,$(ID16_DIR)ID16_SYS.C,$(ID16_DIR)ID_DP.C,\ + $(ID16_DIR)ID_FD.C,$(ID16_DIR)ID_FP.C,$(ID16_DIR)ID_IDC.C,\ + $(ID16_DIR)ID_IO.C,$(ID16_DIR)ID_LP.C,$(ID16_DIR)ID_MT.C,\ + $(ID16_DIR)ID_PAS.C,$(ID16_DIR)ID_PT.C,$(ID16_DIR)ID_TT.C,\ + $(ID16_DIR)ID_UVC.C,$(ID16_DIR)ID16_DBOOT.C,$(ID16_DIR)ID_TTP.C +ID16_OPTIONS = /INCL=($(SIMH_DIR),$(ID16_DIR))/DEF=($(CC_DEFS)) + +# +# Interdata 32-bit CPU. +# +ID32_DIR = SYS$DISK:[.INTERDATA] +ID32_LIB = $(LIB_DIR)ID32-$(ARCH).OLB +ID32_SOURCE = $(ID32_DIR)ID32_CPU.C,$(ID32_DIR)ID32_SYS.C,$(ID32_DIR)ID_DP.C,\ + $(ID32_DIR)ID_FD.C,$(ID32_DIR)ID_FP.C,$(ID32_DIR)ID_IDC.C,\ + $(ID32_DIR)ID_IO.C,$(ID32_DIR)ID_LP.C,$(ID32_DIR)ID_MT.C,\ + $(ID32_DIR)ID_PAS.C,$(ID32_DIR)ID_PT.C,$(ID32_DIR)ID_TT.C,\ + $(ID32_DIR)ID_UVC.C,$(ID32_DIR)ID32_DBOOT.C,$(ID32_DIR)ID_TTP.C +ID32_OPTIONS = /INCL=($(SIMH_DIR),$(ID32_DIR))/DEF=($(CC_DEFS)) + +# +# IBM 1130 Simulator Definitions. +# +IBM1130_DIR = SYS$DISK:[.IBM1130] +IBM1130_LIB = $(LIB_DIR)IBM1130-$(ARCH).OLB +IBM1130_SOURCE = $(IBM1130_DIR)IBM1130_CPU.C,$(IBM1130_DIR)IBM1130_CR.C,\ + $(IBM1130_DIR)IBM1130_DISK.C,$(IBM1130_DIR)IBM1130_STDDEV.C,\ + $(IBM1130_DIR)IBM1130_SYS.C,$(IBM1130_DIR)IBM1130_GDU.C,\ + $(IBM1130_DIR)IBM1130_GUI.C,$(IBM1130_DIR)IBM1130_PRT.C,\ + $(IBM1130_DIR)IBM1130_FMT.C,$(IBM1130_DIR)IBM1130_PTRP.C,\ + $(IBM1130_DIR)IBM1130_PLOT.C,$(IBM1130_DIR)IBM1130_SCA.C,\ + $(IBM1130_DIR)IBM1130_T2741.C +IBM1130_OPTIONS = /INCL=($(SIMH_DIR),$(IBM1130_DIR))/DEF=($(CC_DEFS)) + +# +# IBM 1401 Simulator Definitions. +# +I1401_DIR = SYS$DISK:[.I1401] +I1401_LIB = $(LIB_DIR)I1401-$(ARCH).OLB +I1401_SOURCE = $(I1401_DIR)I1401_LP.C,$(I1401_DIR)I1401_CPU.C,\ + $(I1401_DIR)I1401_IQ.C,$(I1401_DIR)I1401_CD.C,\ + $(I1401_DIR)I1401_MT.C,$(I1401_DIR)I1401_DP.C,\ + $(I1401_DIR)I1401_SYS.C +I1401_OPTIONS = /INCL=($(SIMH_DIR),$(I1401_DIR))/DEF=($(CC_DEFS)) + + +# +# IBM 1620 Simulators Definitions. +# +I1620_DIR = SYS$DISK:[.I1620] +I1620_LIB = $(LIB_DIR)I1620-$(ARCH).OLB +I1620_SOURCE = $(I1620_DIR)I1620_CD.C,$(I1620_DIR)I1620_DP.C,\ + $(I1620_DIR)I1620_PT.C,$(I1620_DIR)I1620_TTY.C,\ + $(I1620_DIR)I1620_CPU.C,$(I1620_DIR)I1620_LP.C,\ + $(I1620_DIR)I1620_FP.C,$(I1620_DIR)I1620_SYS.C +I1620_OPTIONS = /INCL=($(SIMH_DIR),$(I1620_DIR))/DEF=($(CC_DEFS)) + +# +# PDP-1 Simulator Definitions. +# +PDP1_DIR = SYS$DISK:[.PDP1] +PDP1_LIB = $(LIB_DIR)PDP1-$(ARCH).OLB +PDP1_SOURCE = $(PDP1_DIR)PDP1_LP.C,$(PDP1_DIR)PDP1_CPU.C,\ + $(PDP1_DIR)PDP1_STDDEV.C,$(PDP1_DIR)PDP1_SYS.C,\ + $(PDP1_DIR)PDP1_DT.C,$(PDP1_DIR)PDP1_DRM.C,\ + $(PDP1_DIR)PDP1_CLK.C,$(PDP1_DIR)PDP1_DCS.C +PDP1_OPTIONS = /INCL=($(SIMH_DIR),$(PDP1_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment PDP-8 Simulator Definitions. +# +PDP8_DIR = SYS$DISK:[.PDP8] +PDP8_LIB = $(LIB_DIR)PDP8-$(ARCH).OLB +PDP8_SOURCE = $(PDP8_DIR)PDP8_CPU.C,$(PDP8_DIR)PDP8_CLK.C,\ + $(PDP8_DIR)PDP8_DF.C,$(PDP8_DIR)PDP8_DT.C,\ + $(PDP8_DIR)PDP8_LP.C,$(PDP8_DIR)PDP8_MT.C,\ + $(PDP8_DIR)PDP8_PT.C,$(PDP8_DIR)PDP8_RF.C,\ + $(PDP8_DIR)PDP8_RK.C,$(PDP8_DIR)PDP8_RX.C,\ + $(PDP8_DIR)PDP8_SYS.C,$(PDP8_DIR)PDP8_TT.C,\ + $(PDP8_DIR)PDP8_TTX.C,$(PDP8_DIR)PDP8_RL.C,\ + $(PDP8_DIR)PDP8_TSC.C,$(PDP8_DIR)PDP8_TD.C,\ + $(PDP8_DIR)PDP8_CT.C +PDP8_OPTIONS = /INCL=($(SIMH_DIR),$(PDP8_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment PDP-4, PDP-7, PDP-9 And PDP-15 Simulator Definitions. +# +PDP18B_DIR = SYS$DISK:[.PDP18B] +PDP4_LIB = $(LIB_DIR)PDP4-$(ARCH).OLB +PDP7_LIB = $(LIB_DIR)PDP7-$(ARCH).OLB +PDP9_LIB = $(LIB_DIR)PDP9-$(ARCH).OLB +PDP15_LIB = $(LIB_DIR)PDP15-$(ARCH).OLB +PDP18B_SOURCE = $(PDP18B_DIR)PDP18B_DT.C,$(PDP18B_DIR)PDP18B_DRM.C,\ + $(PDP18B_DIR)PDP18B_CPU.C,$(PDP18B_DIR)PDP18B_LP.C,\ + $(PDP18B_DIR)PDP18B_MT.C,$(PDP18B_DIR)PDP18B_RF.C,\ + $(PDP18B_DIR)PDP18B_RP.C,$(PDP18B_DIR)PDP18B_STDDEV.C,\ + $(PDP18B_DIR)PDP18B_SYS.C,$(PDP18B_DIR)PDP18B_TT1.C,\ + $(PDP18B_DIR)PDP18B_RB.C,$(PDP18B_DIR)PDP18B_FPP.C +PDP4_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP4=1") +PDP7_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP7=1") +PDP9_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP9=1") +PDP15_OPTIONS = /INCL=($(SIMH_DIR),$(PDP18B_DIR))/DEF=($(CC_DEFS),"PDP15=1") + +# +# Digital Equipment PDP-11 Simulator Definitions. +# +PDP11_DIR = SYS$DISK:[.PDP11] +PDP11_LIB1 = $(LIB_DIR)PDP11L1-$(ARCH).OLB +PDP11_SOURCE1 = $(PDP11_DIR)PDP11_FP.C,$(PDP11_DIR)PDP11_CPU.C,\ + $(PDP11_DIR)PDP11_DZ.C,$(PDP11_DIR)PDP11_CIS.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_RK.C,\ + $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RP.C,\ + $(PDP11_DIR)PDP11_RX.C,$(PDP11_DIR)PDP11_STDDEV.C,\ + $(PDP11_DIR)PDP11_SYS.C,$(PDP11_DIR)PDP11_TC.C, \ + $(PDP11_DIR)PDP11_CPUMOD.C,$(PDP11_DIR)PDP11_CR.C,\ + $(PDP11_DIR)PDP11_TA.C,$(PDP11_DIR)PDP11_IO_LIB.C +PDP11_LIB2 = $(LIB_DIR)PDP11L2-$(ARCH).OLB +PDP11_SOURCE2 = $(PDP11_DIR)PDP11_TM.C,$(PDP11_DIR)PDP11_TS.C,\ + $(PDP11_DIR)PDP11_IO.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TQ.C,$(PDP11_DIR)PDP11_PCLK.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_PT.C,\ + $(PDP11_DIR)PDP11_HK.C,$(PDP11_DIR)PDP11_XQ.C,\ + $(PDP11_DIR)PDP11_VH.C,$(PDP11_DIR)PDP11_RH.C,\ + $(PDP11_DIR)PDP11_XU.C,$(PDP11_DIR)PDP11_TU.C,\ + $(PDP11_DIR)PDP11_DL.C,$(PDP11_DIR)PDP11_RF.C, \ + $(PDP11_DIR)PDP11_RC.C,$(PDP11_DIR)PDP11_KG.C,\ + $(PDP11_DIR)PDP11_KE.C,$(PDP11_DIR)PDP11_DC.C +PDP11_OPTIONS = /INCL=($(SIMH_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_PDP11=1"$(PCAP_DEFS)) + +# +# Digital Equipment PDP-10 Simulator Definitions. +# +PDP10_DIR = SYS$DISK:[.PDP10] +PDP10_LIB = $(LIB_DIR)PDP10-$(ARCH).OLB +PDP10_SOURCE = $(PDP10_DIR)PDP10_FE.C,\ + $(PDP10_DIR)PDP10_CPU.C,$(PDP10_DIR)PDP10_KSIO.C,\ + $(PDP10_DIR)PDP10_LP20.C,$(PDP10_DIR)PDP10_MDFP.C,\ + $(PDP10_DIR)PDP10_PAG.C,$(PDP10_DIR)PDP10_XTND.C,\ + $(PDP10_DIR)PDP10_RP.C,$(PDP10_DIR)PDP10_SYS.C,\ + $(PDP10_DIR)PDP10_TIM.C,$(PDP10_DIR)PDP10_TU.C,\ + $(PDP11_DIR)PDP11_PT.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_XU.C,\ + $(PDP11_DIR)PDP11_CR.C +PDP10_OPTIONS = /INCL=($(SIMH_DIR),$(PDP10_DIR),$(PDP11_DIR))\ + /DEF=($(CC_DEFS),"USE_INT64=1","VM_PDP10=1"$(PCAP_DEFS)) + +# +# IBM System 3 Simulator Definitions. +# +S3_DIR = SYS$DISK:[.S3] +S3_LIB = $(LIB_DIR)S3-$(ARCH).OLB +S3_SOURCE = $(S3_DIR)S3_CD.C,$(S3_DIR)S3_CPU.C,$(S3_DIR)S3_DISK.C,\ + $(S3_DIR)S3_LP.C,$(S3_DIR)S3_PKB.C,$(S3_DIR)S3_SYS.C +S3_OPTIONS = /INCL=($(SIMH_DIR),$(S3_DIR))/DEF=($(CC_DEFS)) + +# +# SDS 940 +# +SDS_DIR = SYS$DISK:[.SDS] +SDS_LIB = $(LIB_DIR)SDS-$(ARCH).OLB +SDS_SOURCE = $(SDS_DIR)SDS_CPU.C,$(SDS_DIR)SDS_DRM.C,$(SDS_DIR)SDS_DSK.C,\ + $(SDS_DIR)SDS_IO.C,$(SDS_DIR)SDS_LP.C,$(SDS_DIR)SDS_MT.C,\ + $(SDS_DIR)SDS_MUX.C,$(SDS_DIR)SDS_RAD.C,$(SDS_DIR)SDS_STDDEV.C,\ + $(SDS_DIR)SDS_SYS.C +SDS_OPTIONS = /INCL=($(SIMH_DIR),$(SDS_DIR))/DEF=($(CC_DEFS)) + +# +# Digital Equipment VAX Simulator Definitions. +# +VAX_DIR = SYS$DISK:[.VAX] +VAX_LIB = $(LIB_DIR)VAX-$(ARCH).OLB +VAX_SOURCE = $(VAX_DIR)VAX_CIS.C,$(VAX_DIR)VAX_CMODE.C,\ + $(VAX_DIR)VAX_CPU.C,$(VAX_DIR)VAX_CPU1.C,\ + $(VAX_DIR)VAX_FPA.C,$(VAX_DIR)VAX_MMU.C,\ + $(VAX_DIR)VAX_OCTA.C,$(VAX_DIR)VAX_SYS.C,\ + $(VAX_DIR)VAX_SYSCM.C,$(VAX_DIR)VAX_SYSDEV.C,\ + $(VAX_DIR)VAX_SYSLIST.C,$(VAX_DIR)VAX_IO.C,\ + $(VAX_DIR)VAX_STDDEV.C,$(PDP11_DIR)PDP11_IO_LIB.C,\ + $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TS.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_TQ.C,\ + $(PDP11_DIR)PDP11_XQ.C,$(PDP11_DIR)PDP11_CR.C,\ + $(PDP11_DIR)PDP11_RY.C,$(PDP11_DIR)PDP11_VH.C +VAX_OPTIONS = /INCL=($(SIMH_DIR),$(VAX_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_VAX=1"$(PCAP_DEFS)) + +# Digital Equipment VAX780 Simulator Definitions. +# +VAX780_DIR = SYS$DISK:[.VAX] +VAX780_LIB1 = $(LIB_DIR)VAX780L1-$(ARCH).OLB +VAX780_SOURCE1 = $(VAX780_DIR)VAX_CPU.C,$(VAX780_DIR)VAX_CPU1.C,\ + $(VAX780_DIR)VAX_FPA.C,$(VAX780_DIR)VAX_CIS.C,\ + $(VAX780_DIR)VAX_OCTA.C,$(VAX780_DIR)VAX_CMODE.C,\ + $(VAX780_DIR)VAX_MMU.C,$(VAX780_DIR)VAX_SYS.C,\ + $(VAX780_DIR)VAX_SYSCM.C,$(VAX780_DIR)VAX780_STDDEV.C,\ + $(VAX780_DIR)VAX780_SBI.C,$(VAX780_DIR)VAX780_MEM.C,\ + $(VAX780_DIR)VAX780_UBA.C,$(VAX780_DIR)VAX780_MBA.C,\ + $(VAX780_DIR)VAX780_FLOAD.C,$(VAX780_DIR)VAX780_SYSLIST.C +VAX780_LIB2 = $(LIB_DIR)VAX780L2-$(ARCH).OLB +VAX780_SOURCE2 = $(PDP11_DIR)PDP11_RL.C,$(PDP11_DIR)PDP11_RQ.C,\ + $(PDP11_DIR)PDP11_TS.C,$(PDP11_DIR)PDP11_DZ.C,\ + $(PDP11_DIR)PDP11_LP.C,$(PDP11_DIR)PDP11_TQ.C,\ + $(PDP11_DIR)PDP11_XU.C,$(PDP11_DIR)PDP11_RY.C,\ + $(PDP11_DIR)PDP11_CR.C,$(PDP11_DIR)PDP11_RP.C,\ + $(PDP11_DIR)PDP11_TU.C,$(PDP11_DIR)PDP11_HK.C,\ + $(PDP11_DIR)PDP11_IO_LIB.C +VAX780_OPTIONS = /INCL=($(SIMH_DIR),$(VAX780_DIR),$(PDP11_DIR)$(PCAP_INC))\ + /DEF=($(CC_DEFS),"VM_VAX=1"$(PCAP_DEFS),"VAX_780=1") + +# IBM 7094 Simulator Definitions. +# +I7094_DIR = SYS$DISK:[.I7094] +I7094_LIB = $(LIB_DIR)I7094-$(ARCH).OLB +I7094_SOURCE = $(I7094_DIR)I7094_CPU.C,$(I7094_DIR)I7094_CPU1.C,\ + $(I7094_DIR)I7094_IO.C,$(I7094_DIR)I7094_CD.C,\ + $(I7094_DIR)I7094_CLK.C,$(I7094_DIR)I7094_COM.C,\ + $(I7094_DIR)I7094_DRM.C,$(I7094_DIR)I7094_DSK.C,\ + $(I7094_DIR)I7094_SYS.C,$(I7094_DIR)I7094_LP.C,\ + $(I7094_DIR)I7094_MT.C,$(I7094_DIR)I7094_BINLOADER.C +I7094_OPTIONS = /INCL=($(SIMH_DIR),$(I7094_DIR))/DEF=($(CC_DEFS)) + +# If we're not a VAX, Build Everything +# +.IF ALPHA_OR_IA64 +ALL : ALTAIR ALTAIRZ80 ECLIPSE GRI LGP H316 HP2100 I1401 I1620 IBM1130 ID16 \ + ID32 NOVA PDP1 PDP4 PDP7 PDP8 PDP9 PDP10 PDP11 PDP15 S3 VAX VAX780 SDS \ + I7094 + @CONTINUE +.ELSE +# +# Else We Are On VAX And Build Everything EXCEPT the 64b simulators +# +ALL : ALTAIR ALTAIRZ80 GRI H316 HP2100 I1401 I1620 IBM1130 ID16 ID32 \ + NOVA PDP1 PDP4 PDP7 PDP8 PDP9 PDP11 PDP15 S3 VAX VAX780 SDS + @CONTINUE +.ENDIF + +CLEAN : + $! + $! Clean out all targets and building Remnants + $! + $ IF (F$SEARCH("$(BIN_DIR)*.EXE;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM $(BIN_DIR)*.EXE;* + $ IF (F$SEARCH("$(LIB_DIR)*.OLB;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM $(LIB_DIR)*.OLB;* + $ IF (F$SEARCH("SYS$DISK:[...]*.OBJ;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.OBJ;* + $ IF (F$SEARCH("SYS$DISK:[...]*.LIS;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.LIS;* + $ IF (F$SEARCH("SYS$DISK:[...]*.MAP;*").NES."") THEN - + DELETE/NOLOG/NOCONFIRM SYS$DISK:[...]*.MAP;* + +# +# Build The Libraries. +# +$(SIMH_LIB) : $(SIMH_SOURCE) + $! + $! Building The $(SIMH_LIB) Library. + $! + $ $(CC)/DEF=($(CC_DEFS)$(PCAP_DEFS))$(PCAP_SIMH_INC) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ALTAIR_LIB) : $(ALTAIR_SOURCE) + $! + $! Building The $(ALTAIR_LIB) Library. + $! + $ $(CC)$(ALTAIR_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ALTAIRZ80_LIB) : $(ALTAIRZ80_SOURCE) + $! + $! Building The $(ALTAIRZ80_LIB) Library. + $! + $ $(CC)$(ALTAIRZ80_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The Eclipse Library. +# +.IF ALPHA_OR_IA64 +$(ECLIPSE_LIB) : $(ECLIPSE_SOURCE) + $! + $! Building The $(ECLIPSE_LIB) Library. + $! + $ $(CC)$(ECLIPSE_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(ECLIPSE_LIB) : + $! + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)ECLIPSE-$(ARCH).OLB Library On VAX. + $! +.ENDIF + +$(GRI_LIB) : $(GRI_SOURCE) + $! + $! Building The $(GRI_LIB) Library. + $! + $ $(CC)$(GRI_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(LGP_LIB) : $(LGP_SOURCE) + $! + $! Building The $(LGP_LIB) Library. + $! + $ $(CC)$(LGP_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(H316_LIB) : $(H316_SOURCE) + $! + $! Building The $(H316_LIB) Library. + $! + $ $(CC)$(H316_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(HP2100_LIB) : $(HP2100_SOURCE) + $! + $! Building The $(HP2100_LIB) Library. + $! + $ $(CC)$(HP2100_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(I1401_LIB) : $(I1401_SOURCE) + $! + $! Building The $(I1401_LIB) Library. + $! + $ $(CC)$(I1401_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(I1620_LIB) : $(I1620_SOURCE) + $! + $! Building The $(I1620_LIB) Library. + $! + $ $(CC)$(I1620_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(IBM1130_LIB) : $(IBM1130_SOURCE) + $! + $! Building The $(IBM1130_LIB) Library. + $! + $ $(CC)$(IBM1130_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ID16_LIB) : $(ID16_SOURCE) + $! + $! Building The $(ID16_LIB) Library. + $! + $ $(CC)$(ID16_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(ID32_LIB) : $(ID32_SOURCE) + $! + $! Building The $(ID32_LIB) Library. + $! + $ $(CC)$(ID32_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(NOVA_LIB) : $(NOVA_SOURCE) + $! + $! Building The $(NOVA_LIB) Library. + $! + $ $(CC)$(NOVA_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP1_LIB) : $(PDP1_SOURCE) + $! + $! Building The $(PDP1_LIB) Library. + $! + $ $(CC)$(PDP1_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP4_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP4_LIB) Library. + $! + $ $(CC)$(PDP4_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP7_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP7_LIB) Library. + $! + $ $(CC)$(PDP7_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP8_LIB) : $(PDP8_SOURCE) + $! + $! Building The $(PDP8_LIB) Library. + $! + $ $(CC)$(PDP8_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP9_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP9_LIB) Library. + $! + $ $(CC)$(PDP9_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Library. +# +.IF ALPHA_OR_IA64 +$(PDP10_LIB) : $(PDP10_SOURCE) + $! + $! Building The $(PDP10_LIB) Library. + $! + $ $(CC)$(PDP10_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(PDP10_LIB) : + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)PDP10-$(ARCH).OLB Library On VAX. +.ENDIF + +$(PDP11_LIB1) : $(PDP11_SOURCE1) + $! + $! Building The $(PDP11_LIB1) Library. + $! + $(CC)$(PDP11_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP11_LIB2) : $(PDP11_SOURCE2) + $! + $! Building The $(PDP11_LIB2) Library. + $! + $(CC)$(PDP11_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PDP15_LIB) : $(PDP18B_SOURCE) + $! + $! Building The $(PDP15_LIB) Library. + $! + $ $(CC)$(PDP15_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(S3_LIB) : $(S3_SOURCE) + $! + $! Building The $(S3_LIB) Library. + $! + $ $(CC)$(S3_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(SDS_LIB) : $(SDS_SOURCE) + $! + $! Building The $(SDS_LIB) Library. + $! + $ $(CC)$(SDS_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX_LIB) : $(VAX_SOURCE) + $! + $! Building The $(VAX_LIB) Library. + $! + $ $(CC)$(VAX_OPTIONS)/OBJ=$(VAX_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX780_LIB1) : $(VAX780_SOURCE1) + $! + $! Building The $(VAX780_LIB1) Library. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(VAX780_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(VAX780_LIB2) : $(VAX780_SOURCE2) + $! + $! Building The $(VAX780_LIB2) Library. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(VAX780_DIR) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +$(PCAP_LIB) : $(PCAP_SOURCE) + $! + $! Building The $(PCAP_LIB) Library. + $! + $ SET DEFAULT $(PCAP_DIR) + $ @VMS_PCAP $(DEBUG) + $ SET DEFAULT [--] + $ IF (F$SEARCH("$(PCAP_LIB)").NES."") THEN - + DELETE $(PCAP_LIB); + $ COPY $(PCAP_DIR)PCAP.OLB $(PCAP_LIB) + $ DELETE/NOLOG/NOCONFIRM $(PCAP_DIR)*.OBJ;*,$(PCAP_DIR)*.OLB;* + +# +# If Not On VAX, Build The IBM 7094 Library. +# +.IF ALPHA_OR_IA64 +$(I7094_LIB) : $(I7094_SOURCE) + $! + $! Building The $(I7094_LIB) Library. + $! + $ $(CC)$(I7094_OPTIONS) - + /OBJ=$(BLD_DIR) $(MMS$CHANGED_LIST) + $ IF (F$SEARCH("$(MMS$TARGET)").EQS."") THEN - + LIBRARY/CREATE $(MMS$TARGET) + $ LIBRARY/REPLACE $(MMS$TARGET) $(BLD_DIR)*.OBJ + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# We Are On VAX And Due To The Use of INT64 We Can't Build It. +# +$(I7094_LIB) : + $! Due To The Use Of INT64 We Can't Build The + $! $(LIB_DIR)I7094-$(ARCH).OLB Library On VAX. +.ENDIF + +# +# Individual Simulator Builds. +# +ALTAIR : $(SIMH_LIB) $(ALTAIR_LIB) + $! + $! Building The $(BIN_DIR)ALTAIR-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ALTAIR_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ALTAIR-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ALTAIR_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ALTAIRZ80 : $(SIMH_LIB) $(ALTAIRZ80_LIB) + $! + $! Building The $(BIN_DIR)ALTAIRZ80-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ALTAIRZ80_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ALTAIRZ80-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ALTAIRZ80_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Simulator. +# +.IF ALPHA_OR_IA64 +ECLIPSE : $(SIMH_LIB) $(ECLIPSE_LIB) + $! + $! Building The $(BIN_DIR)ECLIPSE-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ECLIPSE_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ECLIPSE-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ECLIPSE_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +ECLIPSE : + $! Sorry, Can't Build $(BIN_DIR)ECLIPSE-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +GRI : $(SIMH_LIB) $(GRI_LIB) + $! + $! Building The $(BIN_DIR)GRI-$(ARCH).EXE Simulator. + $! + $ $(CC)$(GRI_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)GRI-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(GRI_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +LGP : $(SIMH_LIB) $(LGP_LIB) + $! + $! Building The $(BIN_DIR)LGP-$(ARCH).EXE Simulator. + $! + $ $(CC)$(LGP_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)LGP-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(LGP_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +H316 : $(SIMH_LIB) $(H316_LIB) + $! + $! Building The $(BIN_DIR)H316-$(ARCH).EXE Simulator. + $! + $ $(CC)$(H316_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)H316-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(H316_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +HP2100 : $(SIMH_LIB) $(HP2100_LIB) + $! + $! Building The $(BIN_DIR)HP2100-$(ARCH).EXE Simulator. + $! + $ $(CC)$(HP2100_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)HP2100-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(HP2100_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +I1401 : $(SIMH_LIB) $(I1401_LIB) + $! + $! Building The $(BIN_DIR)I1401-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I1401_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I1401-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I1401_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +I1620 : $(SIMH_LIB) $(I1620_LIB) + $! + $! Building The $(BIN_DIR)I1620-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I1620_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I1620-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I1620_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +IBM1130 : $(SIMH_LIB) $(IBM1130_LIB) + $! + $! Building The $(BIN_DIR)IBM1130-$(ARCH).EXE Simulator. + $! + $ $(CC)$(IBM1130_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)IBM1130-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(IBM1130_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ID16 : $(SIMH_LIB) $(ID16_LIB) + $! + $! Building The $(BIN_DIR)ID16-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ID16_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ID16-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ID16_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +ID32 : $(SIMH_LIB) $(ID32_LIB) + $! + $! Building The $(BIN_DIR)ID32-$(ARCH).EXE Simulator. + $! + $ $(CC)$(ID32_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)ID32-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(ID32_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +NOVA : $(SIMH_LIB) $(NOVA_LIB) + $! + $! Building The $(BIN_DIR)NOVA-$(ARCH).EXE Simulator. + $! + $ $(CC)$(NOVA_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)NOVA-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(NOVA_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP1 : $(SIMH_LIB) $(PDP1_LIB) + $! + $! Building The $(BIN_DIR)PDP1-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP1_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP1-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP1_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP4 : $(SIMH_LIB) $(PDP4_LIB) + $! + $! Building The $(BIN_DIR)PDP4-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP4_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP4-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP4_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP7 : $(SIMH_LIB) $(PDP7_LIB) + $! + $! Building The $(BIN_DIR)PDP7-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP7_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP7-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP7_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP8 : $(SIMH_LIB) $(PDP8_LIB) + $! + $! Building The $(BIN_DIR)PDP8-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP8_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP8-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP8_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP9 : $(SIMH_LIB) $(PDP9_LIB) + $! + $! Building The $(BIN_DIR)PDP9-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP9_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP9-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP9_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The PDP-10 Simulator. +# +.IF ALPHA_OR_IA64 +PDP10 : $(SIMH_LIB) $(PCAP_LIBD) $(PDP10_LIB) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)PDP10-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP10_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP10-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP10_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +PDP10 : + $! Sorry, Can't Build $(BIN_DIR)PDP10-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +PDP11 : $(SIMH_LIB) $(PCAP_LIBD) $(PDP11_LIB1) $(PDP11_LIB2) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)PDP11-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP11_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP11-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP11_LIB1)/LIBRARY,$(PDP11_LIB2)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +PDP15 : $(SIMH_LIB) $(PDP15_LIB) + $! + $! Building The $(BIN_DIR)PDP15-$(ARCH).EXE Simulator. + $! + $ $(CC)$(PDP15_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)PDP15-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(PDP15_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +S3 : $(SIMH_LIB) $(S3_LIB) + $! + $! Building The $(BIN_DIR)S3-$(ARCH).EXE Simulator. + $! + $ $(CC)$(S3_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)S3-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(S3_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +SDS : $(SIMH_LIB) $(SDS_LIB) + $! + $! Building The $(BIN_DIR)SDS-$(ARCH).EXE Simulator. + $! + $ $(CC)$(SDS_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)SDS-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(SDS_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +VAX : $(SIMH_LIB) $(PCAP_LIBD) $(VAX_LIB) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)VAX-$(ARCH).EXE Simulator. + $! + $ $(CC)$(VAX_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)$(LINK_SECTION_BINDING)- + /EXE=$(BIN_DIR)VAX-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(VAX_LIB)/LIBRARY,- + $(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +VAX780 : $(SIMH_LIB) $(PCAP_LIBD) $(VAX780_LIB1) $(VAX780_LIB2) $(PCAP_EXECLET) + $! + $! Building The $(BIN_DIR)VAX780-$(ARCH).EXE Simulator. + $! + $ $(CC)$(VAX780_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)$(LINK_SECTION_BINDING)- + /EXE=$(BIN_DIR)VAX780-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,- + $(VAX780_LIB1)/LIBRARY,$(VAX780_LIB2)/LIBRARY,- + $(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* + +# +# If Not On VAX, Build The IBM 7094 Simulator. +# +.IF ALPHA_OR_IA64 +I7094 : $(SIMH_LIB) $(I7094_LIB) + $! + $! Building The $(BIN_DIR)I7094-$(ARCH).EXE Simulator. + $! + $ $(CC)$(I7094_OPTIONS)/OBJ=$(BLD_DIR) SCP.C + $ LINK $(LINK_DEBUG)/EXE=$(BIN_DIR)I7094-$(ARCH).EXE - + $(BLD_DIR)SCP.OBJ,$(I7094_LIB)/LIBRARY,$(SIMH_LIB)/LIBRARY$(PCAP_LIBR) + $ DELETE/NOLOG/NOCONFIRM $(BLD_DIR)*.OBJ;* +.ELSE +# +# Else We Are On VAX And Tell The User We Can't Build On VAX +# Due To The Use Of INT64. +# +I7094 : + $! Sorry, Can't Build $(BIN_DIR)I7094-$(ARCH).EXE Simulator + $! Because It Requires The Use Of INT64. +.ENDIF + +# +# PCAP VCI Components +# +$(PCAP_VCI) : $(PCAP_VCMDIR)PCAPVCM.EXE + $! + $! Installing the PCAP VCI Execlet in SYS$LOADABLE_IMAGES + $! + $ COPY $(PCAP_VCMDIR)PCAPVCM.EXE SYS$COMMON:[SYS$LDR]PCAPVCM.EXE + +$(PCAP_VCMDIR)PCAPVCM.EXE : $(PCAP_VCM_SOURCES) + $! + $! Building The PCAP VCI Execlet + $! + $ @SYS$DISK:[.PCAP-VMS.PCAPVCM]BUILD_PCAPVCM + $ DELETE/NOLOG/NOCONFIRM $(PCAP_VCMDIR)*.OBJ;*,$(PCAP_VCMDIR)*.MAP;* diff --git a/samples/Module Management System/spline_descrip.mms b/samples/Module Management System/spline_descrip.mms new file mode 100644 index 00000000..2f81cdb0 --- /dev/null +++ b/samples/Module Management System/spline_descrip.mms @@ -0,0 +1,31 @@ +! +! $Id: descrip.mms 35 2008-01-08 21:37:42Z tmr $ +! +! Project: LISP -- The LISP Interpreter +! Created: 22-DEC-2008 18:35 +! Author: tmr + +cc = cc +cflags = /define="_VMS_=1" - +/WARN=DISABLE=(ZERODIV,FLOATOVERFL,NOMAINUFLO) - +/IEEE_MODE=UNDERFLOW_TO_ZERO/FLOAT=IEEE +core = LISP_CORE +main = LISP_MAIN +exec = [.bin]LISP +clib = SYS$LIBRARY:VAXCRTL +head = LISP_CORE +objs = $(core).obj, $(main).obj + +$(exec) : $(objs) + DEFINE/NOLOG LNK$LIBRARY $(clib) + LINK/EXEC=$(exec) $(objs) + DEASSIGN LNK$LIBRARY + +$(core).obj : $(core).c, $(head).h + +$(main).obj : $(main).c, $(head).h + +clean : + del *.obj;* + del *.exe;* + diff --git a/samples/Module Management System/xv_makefile.mms b/samples/Module Management System/xv_makefile.mms new file mode 100644 index 00000000..b419dd80 --- /dev/null +++ b/samples/Module Management System/xv_makefile.mms @@ -0,0 +1,271 @@ +# MMS Description file for xv +# Written by Rick Dyson (dyson@iowasp.physics.uiowa.edu) +# Last Modified: 30-APR-1992 for v2.21 +# 5-OCT-1992 for v2.21 (export.lcs.mit.edu version +# of xv-2.21 seemed to change about +# 25-Sep-1992 without version number +# changing. +# 8-FEB-1993 for v2.21b +# ALPHA support is in ALPHA.MMS +# 2-MAR-1993 for v3.00 +# 15-APR-1993 for v3.00 (DEC C changes) +# 25-MAY-1993 merged ALPHA.MMS and MAKEFILE.MMS +# 27-APR-1994 for v3.01 +# 23-DEC-1994 for v3.10 +# +# Modeled after the original Unix Makefile for xv +# Most of the Unix comments have been left intact to help debug any +# problems. + + +# BE SURE TO SET THIS TO YOUR SITE'S DESTINATION DIRECTORY...!!! +BINDIR = Sys$Disk:[] + +# your C compiler (and options) of choice +# Remember: if you change the C compiler (to gcc, or whatever), be sure to +# do the same thing to the Makefile in the 'jpeg' and 'tiff' subdirectories +# +# For ALPHA/DEC C users, you must add a MACRO qualifier to the +# command line, i.e., +# MMS /Description = Makefile.mms /Macro = ("ALPHA=1") +# +# For VAX/DEC C users, you must add a MACRO qualifier to the +# command line, i.e., +# MMS /Description = Makefile.mms /Macro = ("DECC=1") +# +# Users still using the non-MOTIF DECWindows (i.e., XUI) should also +# add another macro of "DEC_XUI=1" + +CC = cc + + +################ CONFIGURATION OPTIONS ################# + +# if, for whatever reason, you're unable to get the JPEG library to compile +# on your machine, *COMMENT OUT* the following lines. +# +# Also, comment out the JPEGLIB dependancy below. +# +# VMS MMS USERS!!! +# +# if you don't use the JPEG package as supplied with XV, you +# will need fill in the complete directory specifications for JPEGDIR. +# +JPEG = ,HAVE_JPEG +JPEGDIR = [.JPEG] +JPEGLIB = $(JPEGDIR)LIBJPEG.OLB +JPEGINCLUDE = ,$(JPEGDIR) + + +# if, for whatever reason, you're unable to get the TIFF library to compile +# on your machine, *COMMENT OUT* the following lines +# +# Also, comment out the LIBTIFF dependancy at the end of this Makefile +# +# if you don't use the TIFF package as supplied with XV, you +# will need to fill in the complete directory specifications for TIFFDIR. +# +TIFF = ,HAVE_TIFF +TIFFDIR = [.TIFF] +TIFFLIB = $(TIFFDIR)LIBTIFF.OLB +TIFFINCLUDE = ,$(TIFFDIR) + + +# if, for whatever reason, you're unable to get the PDS/VICAR support +# to compile (xvpds.c, and vdcomp.c), *COMMENT OUT* the following line, +# and also remove 'vdcomp' from the 'all:' dependancy +PDS = ,HAVE_PDS + + +# If you are still using the DECWindows XUI interface, uncomment the +# next line. This will help stop the "window creep" problem with this +# window mananager +.ifdef DEC_XUI +XUI = ,HAVE_XUI +.endif + +DEFS = /Define = (VMS$(JPEG)$(PDS)$(TIFF)$(TIMERS)$(XUI)) +INCS = /Include = ([]$(JPEGINCLUDE)$(TIFFINCLUDE)) + +.ifdef ALPHA +OPTIMIZE = /Optimize /Standard = VAXC +OPTS = Sys$Disk:[]DECC_OPTIONS.OPT +.else +.ifdef DECC +OPTIMIZE = /Optimize /Standard = VAXC /Warnings = NoInformationals +OPTS = Sys$Disk:[]DECC_OPTIONS.OPT +.else +OPTIMIZE = /Optimize +OPTS = Sys$Disk:[]VAXC_OPTIONS.OPT +.endif +.endif +DEBUG = /NoDebug + +CFLAGS = $(CFLAGS) $(DEFS) $(INCS) $(DEBUG) $(OPTIMIZE) +LINKFLAGS = $(LINKFLAGS) $(DEBUG) + +XVLIB = LIBXV.OLB + +OBJS = xv.obj,xvevent.obj,xvroot.obj,xvmisc.obj,xvimage.obj,xvcolor.obj, \ + xvsmooth.obj,xv24to8.obj,xvgif.obj,xvpm.obj,xvinfo.obj,xvctrl.obj, \ + xvscrl.obj,xvalg.obj,xvgifwr.obj,xvdir.obj,xvbutt.obj,xvpbm.obj, \ + xvxbm.obj,xvgam.obj,xvbmp.obj,xvdial.obj,xvgraf.obj,xvsunras.obj, \ + xvjpeg.obj,xvps.obj,xvpopup.obj,xvdflt.obj,xvtiff.obj,xvtiffwr.obj, \ + xvpds.obj,xvrle.obj,xviris.obj,xvgrab.obj,xvbrowse.obj,xviff.obj, \ + xvtext.obj,xvpcx.obj,xvtarga.obj,xvxpm.obj,xvcut.obj,xvxwd.obj, \ + xvfits.obj,vms.obj + + +BITS = [.Bits]annot.h + +MISC = readme. changelog. ideas. + +.first +.ifdef ALPHA + @- Define /NoLog Sys DECC$Library_Include +.else +.ifdef DECC + @- Define /NoLog Sys DECC$Library_Include +.else + @- Define /NoLog Sys Sys$Library +.endif + @- Define /NoLog X11 DECW$Include + @- XVDIR = F$Environment ("Default") +.endif + +all : $(BITS) $(OPTS) lib xv bggen decompress xcmap xvpictoppm help + ! All Finished with the VMS build of XV (v3.10) + +lib : $(JPEGLIB) $(TIFFLIB) $(XVLIB) + @ Continue + +xv : xv.exe + @ Continue + +bggen : bggen.exe + @ Continue + +xcmap : xcmap.exe + @ Continue + +xvpictoppm : xvpictoppm.exe + @ Continue + +help : xv.hlb + @ Continue + +decompress : decompress.exe vdcomp.exe + @ Continue + +bggen.exe : bggen.obj $(XVLIB) $(OPTS) + $(LINK) $(LINKFLAGS) bggen.obj,$(XVLIB)/Library,$(OPTS)/Option + +xcmap.exe : xcmap.obj + $(LINK) $(LINKFLAGS) xcmap.obj,$(XVLIB)/Library,$(OPTS)/Option + +xvpictoppm.exe : xvpictoppm.obj + $(LINK) $(LINKFLAGS) xvpictoppm.obj,$(XVLIB)/Library,$(OPTS)/Option + +xv.exe : xv.obj $(XVLIB) $(JPEGLIB) $(TIFFLIB) $(OPTS) + $(LINK) $(LINKFLAGS) xv.obj,$(XVLIB)/Library,$(JPEGLIB)/Library,$(TIFFLIB)/Library,$(OPTS)/Option + +$(JPEGLIB) : + Set Default $(JPEGDIR) +.ifdef ALPHA + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS /Macro = "ALPHA = 1" LIBJPEG.OLB +.else + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS LIBJPEG.OLB +.endif + Set Default 'XVDIR' + +$(TIFFLIB) : + Set Default $(TIFFDIR) +.ifdef ALPHA + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS /Macro = "ALPHA = 1" LIBTIFF.OLB +.else +.ifdef DECC + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS /Macro = "ALPHA = 1" LIBTIFF.OLB +.else + $(MMS) $(MMSDEFAULTS) /Description = MAKEFILE.MMS LIBTIFF.OLB +.endif +.endif + Set Default 'XVDIR' + +$(XVLIB) : $(OBJS) + If "''F$Search ("$(XVLIB)")'" .eqs. "" Then Library /Create $(XVLIB) + Library /Replace $(XVLIB) $(OBJS) + +decompress.exe : decompress.obj + $(LINK) $(LINKFLAGS) decompress.obj,$(OPTS)/Option + +vdcomp.exe : vdcomp.obj + $(LINK) $(LINKFLAGS) vdcomp.obj,$(OPTS)/Option + +[.Bits]annot.h : + Set Default [.Bits] + Set Protection = Owner:RWED *. + Rename *. *.H + Set Protection = Owner:RWE *.H + Set Default [-] + +# various dependencies +$(OBJS) : xv.h config.h +xv.hlb : xv.hlp +vms.obj : includes.h dirent.h + +# +# Build the linker options file for OpenVMS VAX and VAX C. +# +Sys$Disk:[]VAXC_Options.opt : + @ Open /Write TMP VAXC_Options.opt + @ Write TMP "! XV (v3.10) Linker Options list for VMS VAX C" + @ Write TMP "!" + @ Write TMP "Sys$Disk:[]LibXV.OLB /Library" + @ Write TMP "Sys$Disk:[.JPEG]LibJPEG.OLB /Library" + @ Write TMP "Sys$Disk:[.TIFF]LibTIFF.OLB /Library" +.ifdef DEC_XUI + @ Write TMP "!" + @ Write TMP "! These were appropriate for VAX C and XUI in the past." + @ Write TMP "Sys$Library:DECW$DWTLibShr.exe /Share + @ Write TMP "Sys$Library:DECW$XLibShr.exe /Share + @ Write TMP "!You may need the next line for VAX C (v3.2-044)" + @ Write TMP "!But you don't for DEC C (v4.0-000)" + @ Write TMP "Sys$Library:VAXCRTL.EXE /Share" +.else + @ Write TMP "!" + @ Write TMP "! Some of the following libraries may not be available on" + @ Write TMP "! older systems, namely XUI or Motif v1.0/1.1" + @ Write TMP "! I know they are available for OpenVMS v6.1/Motif v1.2." + @ Write TMP "! If you get a report that they can't be found," + @ Write TMP "! comment them out and try again..." + @ Write TMP "Sys$Library:DECW$DXMLibShr12.exe /Share + @ Write TMP "Sys$Library:DECW$XMLibShr12.exe /Share + @ Write TMP "Sys$Library:DECW$XTLibShrR5.exe /Share" + @ Write TMP "Sys$Library:DECW$XLibShr.exe /Share +.endif + @ Close TMP + +Sys$Disk:[]DECC_Options.opt : + @ Open /Write TMP DECC_Options.opt + @ Write TMP "! XV (v3.10) Linker Options list for VMS DEC C" + @ Write TMP "!" + @ Write TMP "Sys$Disk:[]LibXV.olb /Library" + @ Write TMP "Sys$Disk:[.JPEG]LibJPEG.olb /Library" + @ Write TMP "Sys$Disk:[.TIFF]LibTIFF.olb /Library" + @ Write TMP "Sys$Library:DECW$XTShr.exe /Share" + @ Write TMP "Sys$Library:DECW$XLibShr.exe /Share" + @ Close TMP + +install : xv.exe vdcomp.exe bggen.exe decompress.exe + Copy *.exe $(BINDIR) + +clean : + @- Set Protection = Owner:RWED *.obj,*.*;-1 + - Delete /NoConfirm /NoLog *.obj;*,*.exe;*,*.log;*,*.olb;*,*.hlb;* + - Purge /NoConfirm /NoLog + Set Default [.JPEG] + $(MMS) /Description = MAKEFILE.MMS clean + - Delete /NoConfirm /NoLog *.olb;* + Set Default [-.TIFF] + $(MMS) /Description = MAKEFILE.MMS clean + Set Default [-] diff --git a/samples/NCL/PrnOscPat_driver.ncl b/samples/NCL/PrnOscPat_driver.ncl new file mode 100644 index 00000000..9a4ba134 --- /dev/null +++ b/samples/NCL/PrnOscPat_driver.ncl @@ -0,0 +1,109 @@ +undef("PrnOscPat_driver") +function PrnOscPat_driver(eof[*][*][*]:numeric, eof_ts[*][*]:numeric, kPOP[1]:integer) +; ================================================================= +; compute Principal Oscillation Patterns (POPs) +; ================================================================= +local dim_ts, dim_eof, neof, ntim, nlat, mlon, dnam_ts, dnam_eof, neof, j \ + , cov0, cov1, cov0_inverse, A, z, Z, pr, pi, zr, zi, mean, stdev \ + , evlr, eigi, eigr +begin + + dim_ts = dimsizes(eof_ts) ; (neof,ntim) + dim_eof = dimsizes(eof) ; (neof,nlat,mlon) + + ntim = dim_ts(1) + neof = dim_eof(0) + nlat = dim_eof(1) + mlon = dim_eof(2) + + dnam_ts = getvardims(eof_ts) ; dimension names + dnam_eof= getvardims(eof) ; used at end for meta data + +; ================================================================= +; lag-0 and lag-1 matrices +; ================================================================= + + if (get_ncl_version().eq."6.1.2") then ; bug in 6.1.2 + cov0 = covcorm(eof_ts,(/1,0/)) ; lag-0 covariance matrix + else + cov0 = covcorm(eof_ts,(/0,1/)) ; lag-0 covariance matrix (n x n) + end if + ; either + cov1 = covcorm_xy(eof_ts, eof_ts, (/0,1,0/)) ; lag-1 + ;cov1 = covcorm_xy(eof_ts(:,0:ntim-2) \ ; alternative, brute force + ; ,eof_ts(:,1:ntim-1), (/0,0,0/)) + ;printVarSummary(cov1) + +; ================================================================= +; matrix A contains information for evolution of the POP system. +; POPs are eigenvectors of A. +; ================================================================= + + cov0_inverse = inverse_matrix(cov0) + A = cov1#inverse_matrix(cov0) ; [*][*] => neof x neof + +; ================================================================= +; NCL 6.1.1 of dgeevx: evlr(2,2,N,N) ; (left(0)/right(1), real(0)/imag(1),:,:) +; Eigenvalues are returned as attributes: eigi = evlr@eigi ; eigr = evlr@eigr +; ================================================================= + + evlr = dgeevx_lapack(A, "B", "V", "V", "B", False) + +; ================================================================= +; POP time series from eigenvalues and right eigenvectors +; ================================================================= + ;PR = (/ evlr(1,0,:,:) /) ; right ev (1), real part (0) + ;PI = (/ evlr(1,1,:,:) /) ; right ev (1), imag part (1) + ; kPOP is what we want; use righteigenvector + pr = (/ evlr(1,0,kPOP-1,:) /) ; right ev (1), real part (0), row 'kPOP-1' + pi = (/ evlr(1,1,kPOP-1,:) /) ; right ev (1), imag part (1), row 'kPOP-1' + + z = inverse_matrix( (/ (/sum(pr*pr), sum(pr*pi)/) \ + , (/sum(pr*pi), sum(pi*pi)/) /))#(/pr,pi/)#eof_ts + + ; complex conjugate + z = (/z(0,:), -z(1,:)/) ; real & imag series + z = dim_rmvmean_n(z,1) + mean = dim_avg_n(z,1) ; calculate mean + stdev= dim_stddev_n(z,1) ; calculate stdev + z = dim_standardize_n(z,1,1) ; standardize time series + + z!0 = "nPOP" ; add meta data + z!1 = dnam_ts(1) + z&nPOP = (/0,1/) + z&$dnam_ts(1)$ = eof_ts&$dnam_ts(1)$ + z@stdev = stdev + z@mean = mean + z@long_name = "POP timeseries" + ;printVarSummary(z) + +; ================================================================= +; POP spatial patterns +; ================================================================= + + zr = pr(0)*eof(0,:,:) ; construct POP spatial domain + zi = pi(0)*eof(0,:,:) + do j=1,neof-1 + zr = zr + pr(j)*eof(j,:,:) + zi = zi + pi(j)*eof(j,:,:) + end do + + Z = (/zr*stdev(0), -zi*stdev(1)/) ; scale patterns by time series stdev + + Z!0 = "nPOP" ; add meta data + Z!1 = dnam_eof(1) + Z!2 = dnam_eof(2) + + Z&nPOP = (/0,1/) + Z&$dnam_eof(1)$ = eof&$dnam_eof(1)$ + Z&$dnam_eof(2)$ = eof&$dnam_eof(2)$ + Z@long_name = "POP pattern" + ;printVarSummary(Z) + +; ================================================================= +; return POP time series and POP spatial patterns as a +; variable of type 'list' which contains 2 variables +; ================================================================= + + return( [/z, Z/] ) ; this is type "list" +end diff --git a/samples/NCL/WRF_static_2.ncl b/samples/NCL/WRF_static_2.ncl new file mode 100644 index 00000000..3f2eefd6 --- /dev/null +++ b/samples/NCL/WRF_static_2.ncl @@ -0,0 +1,115 @@ +;************************************************* +; WRF static: panel different variables +;************************************************ +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl" +begin +;************************************************ +; open file and read in data +;************************************************ + f = addfile("static.wrfsi.nc", "r") +;************************************************ +; Read variables +;************************************************ + use = f->use(0,0,:,:) ; land use dominant category + stl = f->stl(0,0,:,:) ; top layer (0-30cm) dom cat soiltype + sbl = f->sbl(0,0,:,:) ; bottom layer (30-90cm) dom cat soiltype + lat2d = f->lat(0,0,:,:) + lon2d = f->lon(0,0,:,:) + lsMask= f->lnd(0,0,:,:) ; land (1) water (0) mas + +;************************************************ +; Use mask function to set all ocean areas to _FillValue +;************************************************ + use = mask(use,lsMask,1) + stl = mask(stl,lsMask,1) + sbl = mask(sbl,lsMask,1) + +;************************************************ +; Associate 2D coordinates with variables for plotting +;************************************************ + use@lat2d = lat2d + use@lon2d = lon2d + stl@lat2d = lat2d + stl@lon2d = lon2d + sbl@lat2d = lat2d + sbl@lon2d = lon2d + +;************************************************ +; The file should be examined via: ncdump -v grid_type static.wrsi +; This will print the print type. then enter below. +;************************************************ + projection = "mercator" + +;************************************************ +; create plots +;************************************************ + wks = gsn_open_wks("ps" ,"WRF_static") ; ps,pdf,x11,ncgm,eps + gsn_define_colormap(wks ,"BlAqGrYeOrReVi200"); choose colormap + + res = True ; plot mods desired + res@gsnSpreadColors = True ; use full range of colormap + res@cnFillOn = True ; color plot desired + res@cnLinesOn = False ; turn off contour lines + res@cnLineLabelsOn = False ; turn off contour labels + res@cnLevelSpacingF = 1 ; manually specify interval + res@cnFillMode = "RasterFill" ; activate raster mode + res@lbLabelAutoStride = True ; let NCL figure lb stride + +;************************************************ +; Turn on lat / lon labeling +;************************************************ +;;res@pmTickMarkDisplayMode = "Always" ; turn on tickmarks + + dimll = dimsizes(lat2d) + nlat = dimll(0) + mlon = dimll(1) + + res@mpProjection = projection + res@mpLimitMode = "Corners" + res@mpLeftCornerLatF = lat2d(0,0) + res@mpLeftCornerLonF = lon2d(0,0) + res@mpRightCornerLatF = lat2d(nlat-1,mlon-1) + res@mpRightCornerLonF = lon2d(nlat-1,mlon-1) + + res@mpCenterLonF = f->LoV ; set center logitude + + if (projection.eq."LambertConformal") then + res@mpLambertParallel1F = f->Latin1 + res@mpLambertParallel2F = f->Latin2 + res@mpLambertMeridianF = f->LoV + end if + + res@mpFillOn = False ; turn off map fill + res@mpOutlineDrawOrder = "PostDraw" ; draw continental outline last + res@mpOutlineBoundarySets = "GeophysicalAndUSStates" ; state boundaries + +;;res@tfDoNDCOverlay = True ; True only for 'native' grid + res@gsnAddCyclic = False ; data are not cyclic + +;************************************************ +; allocate array for 3 plots +;************************************************ + plts = new (3,"graphic") + +;************************************************ +; Tell NCL not to draw or advance frame for individual plots +;************************************************ + res@gsnDraw = False ; (a) do not draw + res@gsnFrame = False ; (b) do not advance 'frame' + + plts(0) = gsn_csm_contour_map(wks,use,res) + plts(1) = gsn_csm_contour_map(wks,stl,res) + plts(2) = gsn_csm_contour_map(wks,sbl,res) +;************************************************ +; create panel: panel plots have their own set of resources +;************************************************ + resP = True ; modify the panel plot + resP@txString = "Land Use and Soil Type" + resP@gsnMaximize = True ; maximize panel area + resP@gsnPanelRowSpec = True ; specify 1 top, 2 lower level + gsn_panel(wks,plts,(/1,2/),resP) ; now draw as one plot + +end + diff --git a/samples/NCL/WRF_track_1.ncl b/samples/NCL/WRF_track_1.ncl new file mode 100644 index 00000000..9d818519 --- /dev/null +++ b/samples/NCL/WRF_track_1.ncl @@ -0,0 +1,160 @@ +;******************************************************** +; Plot storm stracks from wrfout files. +;******************************************************** +; +; JUN-18-2005 +; So-Young Ha (MMM/NCAR) +; SEP-01-2006 +; Slightly modified by Mary Haley to add some extra comments. +; =========================================== + +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRF_contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl" + + +begin + +; DATES + date = (/1512,1600,1612,1700,1712,1800,1812,1900/) + ndate = dimsizes(date) + + sdate = sprinti("%4.0i",date) + +; Experiment name (for legend) + EXP = (/"EXP_I"/) ; (/"EXP_I","EXP_II","EXP_III"/) + nexp = dimsizes(EXP) + +; To get lat/lon info. + + a = addfile("wrfout_d01_2003-07-15_00:00:00.nc","r") + + lat2d = a->XLAT(0,:,:) + lon2d = a->XLONG(0,:,:) + dimll = dimsizes(lat2d) + nlat = dimll(0) + mlon = dimll(1) + +; Sea Level Pressure + slp = wrf_user_getvar(a,"slp",0) + dims = dimsizes(slp) + +; Array for track + time = new(ndate,string) + imin = new(ndate,integer) + jmin = new(ndate,integer) + smin = new(ndate,integer) + +; ======= +; ndate +; ======= + fs = systemfunc("ls wrfout*00") + nfs= dimsizes(fs) + if(nfs .ne. ndate) then + print("Check input data:"+nfs+" .ne. "+ndate) + end if + + do ifs=0,nfs-1 + f = addfile(fs(ifs)+".nc","r") + time(ifs) = wrf_user_list_times(f) +; print(time(ifs)) + slp2d = wrf_user_getvar(f,"slp",0) + +; We need to convert 2-D array to 1-D array to find the minima. + slp1d = ndtooned(slp2d) + smin(ifs) = minind(slp1d) + +; Convert the index for 1-D array back to the indeces for 2-D array. + minij = ind_resolve(ind(slp1d.eq.min(slp2d)),dims) + imin(ifs) = minij(0,0) + jmin(ifs) = minij(0,1) + +; print(time(ifs)+" : "+min(slp2d)+" ("+imin(ifs)+","+jmin(ifs)+")") + end do +; + +; Graphics section + + wks=gsn_open_wks("ps","track") ; Open PS file. + gsn_define_colormap(wks,"BlGrYeOrReVi200") ; Change color map. + + res = True + res@gsnDraw = False ; Turn off draw. + res@gsnFrame = False ; Turn off frame advance. + res@gsnMaximize = True ; Maximize plot in frame. + + res@tiMainString = "Hurricane Isabel" ; Main title + + WRF_map_c(a,res,0) ; Set up map resources + ; (plot options) + plot = gsn_csm_map(wks,res) ; Create a map. + +; Set up resources for polymarkers. + gsres = True + gsres@gsMarkerIndex = 16 ; filled dot + ;gsres@gsMarkerSizeF = 0.005 ; default - 0.007 + cols = (/5,160,40/) + +; Set up resources for polylines. + res_lines = True + res_lines@gsLineThicknessF = 3. ; 3x as thick + + dot = new(ndate,graphic) ; Make sure each gsn_add_polyxxx call + line = new(ndate,graphic) ; is assigned to a unique variable. + +; Loop through each date and add polylines to the plot. + do i = 0,ndate-2 + res_lines@gsLineColor = cols(0) + xx=(/lon2d(imin(i),jmin(i)),lon2d(imin(i+1),jmin(i+1))/) + yy=(/lat2d(imin(i),jmin(i)),lat2d(imin(i+1),jmin(i+1))/) + line(i) = gsn_add_polyline(wks,plot,xx,yy,res_lines) + end do + + lon1d = ndtooned(lon2d) + lat1d = ndtooned(lat2d) + +; Loop through each date and add polymarkers to the plot. + do i = 0,ndate-1 + print("dot:"+lon1d(smin(i))+","+lat1d(smin(i))) + gsres@gsMarkerColor = cols(0) + dot(i)=gsn_add_polymarker(wks,plot,lon1d(smin(i)),lat1d(smin(i)),gsres) + end do + +; Date (Legend) + txres = True + txres@txFontHeightF = 0.015 + txres@txFontColor = cols(0) + + txid1 = new(ndate,graphic) +; Loop through each date and draw a text string on the plot. + do i = 0, ndate-1 + txres@txJust = "CenterRight" + ix = smin(i) - 4 + print("Eye:"+ix) + if(i.eq.1) then + txres@txJust = "CenterLeft" + ix = ix + 8 + end if + txid1(i) = gsn_add_text(wks,plot,sdate(i),lon1d(ix),lat1d(ix),txres) + end do + +; Add marker and text for legend. (Or you can just use "pmLegend" instead.) + txres@txJust = "CenterLeft" + + txid2 = new(nexp,graphic) + pmid2 = new(nexp,graphic) + do i = 0,nexp-1 + gsres@gsMarkerColor = cols(i) + txres@txFontColor = cols(i) + ii = ((/129,119,109/)) ; ilat + jj = ((/110,110,110/)) ; jlon + ji = ii*mlon+jj ; col x row + pmid2(i) = gsn_add_polymarker(wks,plot,lon1d(ji(i)),lat1d(ji(i)),gsres) + txid2(i) = gsn_add_text(wks,plot,EXP(i),lon1d(ji(i)+5),lat1d(ji(i)),txres) + end do + + draw(plot) + frame(wks) +end diff --git a/samples/NCL/cru_8.ncl b/samples/NCL/cru_8.ncl new file mode 100644 index 00000000..465a9f85 --- /dev/null +++ b/samples/NCL/cru_8.ncl @@ -0,0 +1,129 @@ +;***************************************************** +; cru_8.ncl +; +; Concepts illustrated: +; - Plotting CRU (Climate Research Unit)/ BADC data +; - Selecting a sub-period +; - calculating a climatology +; - Drawing raster contours; very basic graphics +; +;***************************************************** + +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" ; not needed 6.20 onward +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" + +; create references (pointers) to the files + + diri = "./" + fcld = addfile(diri+"cru_ts3.21.1901.2012.cld.dat.nc", "r") + fdtr = addfile(diri+"cru_ts3.21.1901.2012.dtr.dat.nc", "r") + ffrs = addfile(diri+"cru_ts3.21.1901.2012.frs.dat.nc", "r") + fpet = addfile(diri+"cru_ts3.21.1901.2012.pet.dat.nc", "r") + fpre = addfile(diri+"cru_ts3.21.1901.2012.pre.dat.nc", "r") + ftmn = addfile(diri+"cru_ts3.21.1901.2012.tmn.dat.nc", "r") + ftmp = addfile(diri+"cru_ts3.21.1901.2012.tmp.dat.nc", "r") + ftmx = addfile(diri+"cru_ts3.21.1901.2012.tmx.dat.nc", "r") + fvap = addfile(diri+"cru_ts3.21.1901.2012.vap.dat.nc", "r") + fwet = addfile(diri+"cru_ts3.21.1901.2012.wet.dat.nc", "r") + +; specify start & last dates (arbitrary) + + ymStrt = 199101 + ymLast = 200012 + +; get index values of start/lat dates + + time = fcld->time + yyyymm = cd_calendar(time, -1) + + ntStrt = ind(yyyymm.eq.ymStrt) ; index values + ntLast = ind(yyyymm.eq.ymLast) + +; read time segment + + cld = fcld->cld(ntStrt:ntLast,:,:) + dtr = fdtr->dtr(ntStrt:ntLast,:,:) + frs = ffrs->frs(ntStrt:ntLast,:,:) + pet = fpet->pet(ntStrt:ntLast,:,:) + pre = fpre->pre(ntStrt:ntLast,:,:) + tmn = ftmn->tmn(ntStrt:ntLast,:,:) + tmp = ftmp->tmp(ntStrt:ntLast,:,:) + tmx = ftmx->tmx(ntStrt:ntLast,:,:) + vap = fvap->vap(ntStrt:ntLast,:,:) + wet = fwet->wet(ntStrt:ntLast,:,:) + + printVarSummary(cld) ; [time | 120] x [lat | 360] x [lon | 720] + +; calculate monthly climatologies + + cldclm = clmMonTLL(cld) + dtrclm = clmMonTLL(dtr) + frsclm = clmMonTLL(frs) + petclm = clmMonTLL(pet) + preclm = clmMonTLL(pre) + tmnclm = clmMonTLL(tmn) + tmpclm = clmMonTLL(tmp) + tmxclm = clmMonTLL(tmx) + vapclm = clmMonTLL(vap) + wetclm = clmMonTLL(wet) + + + printVarSummary(cldclm) ; [month | 12] x [lat | 360] x [lon | 720] + +;************************************ +; create plots ... very simple +;************************************ + + nt = 6 + month = "July" + yrStrt = ymStrt/100 + yrLast = ymLast/100 + title = month+": "+yrStrt+"-"+yrLast + + wks = gsn_open_wks("ps","cru") ; open a ps file + gsn_define_colormap(wks,"ncl_default") ; choose colormap; not needed 6.20 onward + plot = new(2,graphic) ; create graphic array + + res = True + res@cnFillOn = True ; turn on color fill; not needed 6.20 onward + res@cnFillMode = "RasterFill" ; Raster Mode + res@cnLinesOn = False ; Turn off contour lines + + res@gsnDraw = False ; do not draw picture + res@gsnFrame = False ; do not advance frame + res@lbOrientation = "Vertical" ; vertical label bar + + resp = True + resp@gsnMaximize = True ; make ps, eps, pdf large + + resp@txString = title+": CLD, FRS" + plot(0)=gsn_csm_contour_map_ce(wks,cldclm(nt,:,:),res) + plot(1)=gsn_csm_contour_map_ce(wks,frsclm(nt,:,:),res) + gsn_panel(wks,plot,(/2,1/),resp) + + resp@txString = title+": PET, VAP" + plot(0)=gsn_csm_contour_map_ce(wks,petclm(nt,:,:),res) + plot(1)=gsn_csm_contour_map_ce(wks,vapclm(nt,:,:),res) + gsn_panel(wks,plot,(/2,1/),resp) + + resp@txString = title+": TMN, TMX" + plot(0)=gsn_csm_contour_map_ce(wks,tmnclm(nt,:,:),res) + plot(1)=gsn_csm_contour_map_ce(wks,tmxclm(nt,:,:),res) + gsn_panel(wks,plot,(/2,1/),resp) + + resp@txString = title+": TMP, DTR" + plot(0)=gsn_csm_contour_map_ce(wks,tmpclm(nt,:,:),res) + plot(1)=gsn_csm_contour_map_ce(wks,dtrclm(nt,:,:),res) + gsn_panel(wks,plot,(/2,1/),resp) + + resp@txString = title+": WET, PRE" + plot(0)=gsn_csm_contour_map_ce(wks,wetclm(nt,:,:),res) + + ;colors = (/ ... /) + ;res@cnFillPalette = colors ; optional: distinct colors for categories + res@cnLevelSelectionMode = "ExplicitLevels" ; use unequal spacing + res@cnLevels = (/2.0,10,25,37.5,50,75,100,125,150,175,200,300,400,500,750/) + + plot(1)=gsn_csm_contour_map_ce(wks,preclm(nt,:,:),res) + gsn_panel(wks,plot,(/2,1/),resp) diff --git a/samples/NCL/gsn_csm_xy2_time_series_inputs.ncl b/samples/NCL/gsn_csm_xy2_time_series_inputs.ncl new file mode 100644 index 00000000..4efe39ab --- /dev/null +++ b/samples/NCL/gsn_csm_xy2_time_series_inputs.ncl @@ -0,0 +1,20 @@ +;******************** Inputs Regarding Input and Output Data ************************************* + +;netCDFFilePath = "NULL-MYD04_L2.051-MIL2ASAE.0022-AERONET_AOD_L2.2-20112106165049.nc" +;outputFilePath = "plot-output" + +;******************* Inputs Regarding Data Structure *********************************************** + +;lPlotVariablesList = "mean_AERONET_AOD_L2_2_AOD0558intrp_Ames,mean_MIL2ASAE_0022_AOD0866b_Ames" +;rPlotVariablesList = "medn_MYD04_L2_051_AOD0550dpbl_l_Ames" + +;xDimName = "time" +;xDimSize = 365 + +;******************* Inputs Regarding the View Annotations **************************************** + +;title = "MAPSS Time Series" +;yLAxisLabel = "Mean AOD" +;yRAxisLabel = "Median AOD" + +;*******************END INPUTS ******************************************************************** \ No newline at end of file diff --git a/samples/NCL/hdf4sds_7.ncl b/samples/NCL/hdf4sds_7.ncl new file mode 100644 index 00000000..f3aeff77 --- /dev/null +++ b/samples/NCL/hdf4sds_7.ncl @@ -0,0 +1,128 @@ +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +;************************************************************** +; User Input +;*************************************************************** + ; INPUT + diri = "./" ; input directory + fili = "wv_LV3_MET08_20050102_12345678_L00013712E00013712.hdf" + + pltDir = "./" ; directory for plot output + sfx = get_file_suffix(fili,1) + ;pltName = sfx@fBase ; output graphic name + pltName = "hdf4sds" + pltType = "ps" + +;*************************************************************** +; End User Input +;*************************************************************** + +;*************************************************************** +; Open SEVIRI L3 'wv' HDF file +;*************************************************************** +; Note the rather unusual data format: flag *prepended* to data value +;*************************************************************** +; integer twc_lv3 ( fakeDim0, fakeDim1 ) +; long_name : total water vapour column + flag +; units : fmmmm +; format : I4 +; valid_range : ( 10000, 38000 ) +; _FillValue : -99 +; legend_01 : f = flag +; legend_02 : f = 1 averaged level 2 values +; legend_03 : f = 2 interpolated from averaged level 2 values +; legend_04 : f = 3 gaps filled with NVAP climatology +; legend_05 : mmmm = water vapour column in mm * 100. as integer +; legend_06 : Example: 11025 means: flag = 1, 10.25 mm water vapour column +; min_lat : -74.75 +; max_lat : 61.75 +; min_lon : -75.25 +; max_lon : 75.25 +; dlat : 0.5 +; dlon : 0.5 +;--------------------------------------------------------------- + + f = addfile (diri+fili, "r") + ifx = f->twc_lv3 ; fmmmm (integer) + printVarSummary(ifx) + + flag = ifx/10000 ; extract flag + ix = ifx - flag*10000 ; extract mmmm + x = ix*0.01 ; scale + +; create meta data for 'x' + + dimx = dimsizes(x) + nlat = dimx(0) ; grid size x(nlat,mlon) + mlon = dimx(1) + + lat = fspan(ifx@min_lat, ifx@max_lat, nlat) + lat@units = "degrees_north" + lon = fspan(ifx@min_lon, ifx@max_lon, mlon) + lon@units = "degrees_east" + + x!0 = "lat" + x!1 = "lon" + x&lat = lat + x&lon = lon + x@long_name = "SEVIRI: Total Water Vapor" + x@units = "mm" + + delete( [/ifx, ix/] ) ; no longer needed + +;*************************************************************** +; Create plot +;*************************************************************** + wks = gsn_open_wks(pltType, pltDir+pltName) + + plot = new (2, "graphic") + + res = True ; plot mods desired + res@gsnAddCyclic = False ; data noty global + res@gsnDraw = False + res@gsnFrame = False + + res@cnFillOn = True ; turn on color fill + res@cnLinesOn = False ; turn of contour lines + res@cnFillMode = "RasterFill" ; Raster Mode + res@cnLinesOn = False ; Turn off contour lines + res@cnLineLabelsOn = False ; Turn off contour lines + res@cnMissingValFillColor= "background" ; "foreground" + + res@mpCenterLonF = 0.5*(min(x&lon) + max(x&lon)) + res@mpMinLatF = min(x&lat) + res@mpMaxLatF = max(x&lat) + res@mpMinLonF = min(x&lon) + res@mpMaxLonF = max(x&lon) + + ;res@lbOrientation = "Vertical" + + plot(0) = gsn_csm_contour_map_ce(wks,x, res) + +; plot flag + + copy_VarCoords(x, flag) + flag@long_name = "Flag" + flag@units = "1=avg(L2), 2=int(L2), 3=NVAP" + print(flag&lat+" "+flag(:,{30})) + + res@cnLevelSelectionMode = "ManualLevels" ; set manual contour levels + res@cnMinLevelValF = 2 ; set min contour level + res@cnMaxLevelValF = 3 ; one less than max + res@cnLevelSpacingF = 1 ; set contour spacing + + res@lbLabelStrings = ispan(1,3,1) ; 1, 2, 3 + res@lbLabelPosition = "Center" ; label position + res@lbLabelAlignment = "BoxCenters" + + res@gsnLeftString = "" + res@gsnRightString = "" + res@gsnCenterString = "flag: 1=avg(L2), 2=int(L2), 3=NVAP" + + plot(1) = gsn_csm_contour_map_ce(wks,flag, res) + + resP = True ; modify the panel plot + resP@txString = fili + resP@gsnMaximize = True + gsn_panel(wks,plot,(/1,2/),resP) ; now draw as one plot diff --git a/samples/NCL/mask_12.ncl b/samples/NCL/mask_12.ncl new file mode 100644 index 00000000..30027c80 --- /dev/null +++ b/samples/NCL/mask_12.ncl @@ -0,0 +1,125 @@ +;---------------------------------------------------------------------- +; mask_12.ncl +; +; Concepts illustrated: +; - Using a worldwide shapefile to create a land/ocean mask +; - Masking a data array based on a geographical area +; - Attaching shapefile polylines to a map plot +; - Attaching lat/lon points to a map using gsn_coordinates +;---------------------------------------------------------------------- +; Downloaded GSHHS shapefiles from: +; +; http://www.ngdc.noaa.gov/mgg/shorelines/data/gshhg/latest/ +; +; Used the "coarsest" one: "GSHHS_shp/c/GSHHS_c_L1.shp". +;---------------------------------------------------------------------- + +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +load "./shapefile_mask_data.ncl" + +;---------------------------------------------------------------------- +; Main code +;---------------------------------------------------------------------- +begin + WRITE_MASK = True + DEBUG = False + +;---Read data to plot and mask + dir = "$NCARG_ROOT/lib/ncarg/data/cdf/" + cdf_prefix = "uv300" + cdf_file = dir + cdf_prefix + ".nc" + fin = addfile(cdf_file,"r") + u = fin->U(1,:,:) +; +; Create a mask array the same size as "u", using +; lat/lon data read off a shapefile. +; + shpfile = "GSHHS_shp/c/GSHHS_c_L1.shp" + opt = True + opt@return_mask = True + + land_mask = shapefile_mask_data(u,shpfile,opt) + +;---Mask "u" against land and ocean. + u_land_mask = where(land_mask.eq.1,u,u@_FillValue) + u_ocean_mask = where(land_mask.eq.0,u,u@_FillValue) + copy_VarMeta(u,u_land_mask) + copy_VarMeta(u,u_ocean_mask) + +;---Start the graphics + wks = gsn_open_wks("ps","mask") + + res = True + + res@gsnMaximize = True ; maximize plot in frame + res@gsnDraw = False ; don't draw plot yet + res@gsnFrame = False ; don't advance frame yet + + res@cnFillOn = True + res@cnLineLabelsOn = False + res@cnLinesOn = False + +;---Make sure both plots have same contour levels + mnmxint = nice_mnmxintvl(min(u),max(u),25,False) + res@cnLevelSelectionMode = "ManualLevels" + res@cnMinLevelValF = mnmxint(0) + res@cnMaxLevelValF = mnmxint(1) + res@cnLevelSpacingF = mnmxint(2) + + res@lbLabelBarOn = False + res@gsnAddCyclic = False + + res@mpFillOn = False + res@mpOutlineOn = False + + res@gsnRightString = "" + res@gsnLeftString = "" + +;---Create plot of original data and attach shapefile outlines + res@tiMainString = "Original data with shapefile outlines" + map_data = gsn_csm_contour_map(wks,u,res) + dum1 = gsn_add_shapefile_polylines(wks,map_data,shpfile,False) + +;---Create plots of masked data + res@tiMainString = "Original data masked against land" + map_land_mask = gsn_csm_contour_map(wks,u_land_mask,res) + res@tiMainString = "Original data masked against ocean" + map_ocean_mask = gsn_csm_contour_map(wks,u_ocean_mask,res) + + if(DEBUG) then + mkres = True +; mkres@gsMarkerSizeF = 0.007 + mkres@gsnCoordsAttach = True + gsn_coordinates(wks,map_data,u,mkres) + mkres@gsnCoordsNonMissingColor = "yellow" + mkres@gsnCoordsMissingColor = "black" + gsn_coordinates(wks,map_land_mask,u_land_mask,mkres) + gsn_coordinates(wks,map_ocean_mask,u_ocean_mask,mkres) + end if + +;---Add shapefile outlines + dum2 = gsn_add_shapefile_polylines(wks,map_land_mask,shpfile,False) + dum3 = gsn_add_shapefile_polylines(wks,map_ocean_mask,shpfile,False) + +;---Draw all three plots on one page + pres = True + pres@gsnMaximize = True + pres@gsnPanelLabelBar = True + gsn_panel(wks,(/map_data,map_land_mask,map_ocean_mask/),(/3,1/),pres) + + if(WRITE_MASK) then + delete(fin) ; Close file before we open again. +; +; Make copy of file so we don't overwrite original. +; This is not necessary, but it's safer. +; + new_cdf_file = cdf_prefix + "_with_mask.nc" + system("/bin/cp " + cdf_file + " " + new_cdf_file) + finout = addfile(new_cdf_file,"w") + filevardef(finout, "land_mask", typeof(land_mask), (/ "lat", "lon" /) ) + finout->land_mask = (/land_mask/) + end if +end + diff --git a/samples/NCL/mcsst_1.ncl b/samples/NCL/mcsst_1.ncl new file mode 100644 index 00000000..338fe26f --- /dev/null +++ b/samples/NCL/mcsst_1.ncl @@ -0,0 +1,115 @@ +;***************************************************** +; mcsst_1.ncl +; +; Concepts illustrated: +; - Plotting NAVO MCSST data +; - Using fbindirread to read in fortran binary data +; - Converting "byte" data to "float" +; - Adding meta data (attributes and coordinates) to a variable +; - Adding gray to an existing color map +; - Spanning all but the last two colors in a color map for contour fill +; - Drawing raster contours +; +;***************************************************** +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +;*************************************** +; type of data available on file +;*************************************** +; ipar=0 Weekly Binned Sea Surface Temperature +; ipar=1 Number of Points in Bin +; ipar=2 Weekly Binned Sea Surface Temperature Anomaly +; ipar=3 Interpolated Sea Surface Temperature +; ipar=4 Interpolated Sea Surface Temperature Anomaly +;*************************************** +begin + ipar = 3 + fname = "2001311d18N16.dat" + tmp = fbindirread(fname,ipar,(/1024,2048/),"byte") +;*************************************** +; convert to float and then change to true SST +;*************************************** + xslope = 0.15 + if(ipar.eq.4.or.ipar.eq.2)then ; anom has different intercept + yint = -20.0 + end if + if(ipar.eq.3.or.ipar.eq.0)then + yint = -3.0 + end if + sst = new((/1024,2048/),"float") ; create float var + sst = tmp*xslope+yint ; convert to float + delete(tmp) ; delete unecessary array +;*************************************** +; assign missing values. The original missing value was zero, but since it was +; not assigned in NCL, it was not recognized. The new missing values are +; listed below. These will be changed later. +;*************************************** + if(ipar.eq.4)then + sst@_FillValue = -20 + end if + if(ipar.eq.3.or.ipar.eq.0)then + sst@_FillValue = -3 + end if +;*************************************** +; create coordinate variables +;*************************************** + nlat = 1024 + dy = 180./nlat + lat = (90. -(ispan(0,1023,1)*dy))-dy/2 + lat!0 = "lat" + lat&lat = lat + lat@units = "degrees_north" + + nlon = 2048 + dx = 360./nlon + lon = (ispan(0,2047,1)*dx)+dx/2-180. ; note -180. added by sjm to align + lon!0 = "lon" + lon&lon = lon + lon@units = "degrees_east" +;*************************************** +; fill out the netCDF data model +;*************************************** + sst!0 = "lat" ; name dimensions + sst!1 = "lon" ; ditto + sst = sst(::-1,:) ; reverse lat orientation + sst@long_name = "NAVO MCSST" ; assign long_name + sst@units = "deg C" ; assign units + sst&lat = lat ; assign lat cv + sst&lon = lon ; assign lon cv + sst@_FillValue = -999. ; assign missing value +;*************************************** +; get year and day from filename +;*************************************** + res = True ; plot mods desired + title = stringtochar(fname) ; parse file name to get date + year = title(0:3) + jday = title(4:6) + res@gsnCenterString = year+" "+jday ; create center string +;*************************************** +; create plot +;*************************************** + wks = gsn_open_wks("ps","mcsst") ; open workstation (plot destination) + gsn_define_colormap(wks,"BlGrYeOrReVi200") ; choose colormap +; +; This will not be necessary in V6.1.0 and later. Named colors can +; be used without having to first add them to the color map. +; + d = NhlNewColor(wks,0.8,0.8,0.8) ; add gray to colormap + + + res@cnFillOn = True ; turn on color + res@gsnSpreadColors = True ; use full range of colormap + res@gsnSpreadColorStart = 2 ; start at color 2 + res@gsnSpreadColorEnd = -3 ; don't use added gray + res@cnLinesOn = False ; no contour lines + res@cnFillDrawOrder = "PreDraw" ; draw contours before continents + res@gsnMaximize = True ; maximize plot + + +; For a grid this size, it is better to use raster mode. It will be +; significantly faster, and will not go over NCL's 16mb default plot size. + res@cnFillMode = "RasterFill" ; turn on raster mode + + plot = gsn_csm_contour_map_ce(wks,sst,res) ; contour the variable + +end diff --git a/samples/NCL/primero.ncl b/samples/NCL/primero.ncl new file mode 100644 index 00000000..7860ab8d --- /dev/null +++ b/samples/NCL/primero.ncl @@ -0,0 +1,3 @@ +val=102 +a=val/4. +print(a) diff --git a/samples/NCL/topo_9.ncl b/samples/NCL/topo_9.ncl new file mode 100644 index 00000000..e9bd62bf --- /dev/null +++ b/samples/NCL/topo_9.ncl @@ -0,0 +1,172 @@ +;---------------------------------------------------------------------- +; topo_9.ncl +; +; Concepts illustrated: +; - Recreating a jpeg topographic image as an NCL map object +; - Zooming in on a jpeg image +; - Drawing a box around an area of interest on a map +; - Attaching polylines to a map +; - Using "overlay" to overlay multiple contour plots +; - Using more than 256 colors per frame +; - Using functions for cleaner code +;---------------------------------------------------------------------- +; NOTE: This example will only work with NCL V6.1.0 and later. +; +; This script recreates a JPEG image that was converted to a NetCDF +; file with color separated bands using the open source tool +; "gdal_translate": +; +; gdal_translate -ot Int16 -of netCDF EarthMap_2500x1250.jpg \ +; EarthMap_2500x1250.nc +;---------------------------------------------------------------------- +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" + +;---------------------------------------------------------------------- +; This function imports a JPEG image that's on the whole globe, +; and recreates it as an NCL map object that is zoomed in on the +; southern tip of Africa. +;---------------------------------------------------------------------- +undef("recreate_jpeg_image") +function recreate_jpeg_image(wks,minlat,maxlat,minlon,maxlon) +begin + orig_jpg_filename = "EarthMap_2500x1250.jpg" + nc_filename = "EarthMap_2500x1250.nc" + +;--You could use a system call to do the NetCDF conversion +; cmd = "gdal_translate -ot Int16 -of netCDF " + jpeg_filename + \ +; " " + nc_filename) +; system(cmd) + +;---Read the three bands of data + f = addfile(nc_filename,"r") + Band1 = where(f->Band1.gt.255, 255, f->Band1) ; red channel + Band2 = where(f->Band2.gt.255, 255, f->Band2) ; green channel + Band3 = where(f->Band3.gt.255, 255, f->Band3) ; blue channel + + band_dims = dimsizes(Band3) + nlat = band_dims(0) + nlon = band_dims(1) + print("dimensions of image = " + nlat + " x " + nlon) + +; +; Add lat/lon data so we can overlay on a map, and/or +; overlay contours. We know the image is global, +; cylindrical equidistant, and centered about lon=0. +; + lat = fspan( -90, 90,nlat) + lon = fspan(-180,180,nlon) + lat@units = "degrees_north" + lon@units = "degrees_east" + + Band1!0 = "lat" + Band1!1 = "lon" + Band2!0 = "lat" + Band2!1 = "lon" + Band3!0 = "lat" + Band3!1 = "lon" + Band1&lat = lat + Band1&lon = lon + Band2&lat = lat + Band2&lon = lon + Band3&lat = lat + Band3&lon = lon + + res = True + + res@gsnMaximize = True + + res@gsnFrame = False ; Don't draw or advance + res@gsnDraw = False ; frame yet. + + res@cnFillOn = True + res@cnFillMode = "RasterFill" ; Raster fill can be faster + + res@cnLevelSelectionMode = "EqualSpacedLevels" + res@cnMaxLevelCount = 254 + res@cnFillBackgroundColor = (/ 1., 1., 1., 1./) + + res@cnLinesOn = False ; Turn off contour lines . + res@cnLineLabelsOn = False ; Turn off contour labels + res@cnInfoLabelOn = False ; Turn off info label + res@lbLabelBarOn = False ; Turn off labelbar + res@gsnRightString = "" ; Turn off subtitles + res@gsnLeftString = "" + res@pmTickMarkDisplayMode = "Always" + +;---Construct RGBA colormaps... + ramp = fspan(0., 1., 255) + reds = new((/255, 4/), float) + greens = new((/255, 4/), float) + blues = new((/255, 4/), float) + + reds = 0 + greens = 0 + blues = 0 + + reds(:,0) = ramp + greens(:,1) = ramp + blues(:,2) = ramp + + ; The red contour map is plotted fully opaque; the green and blue + ; are plotted completely transparent. When overlain, the colors + ; combine (rather magically). + reds(:,3) = 1. + greens(:,3) = 0 + blues(:,3) = 0 + + res@cnFillColors = greens + greenMap = gsn_csm_contour(wks, Band2, res) + + res@cnFillColors = blues + blueMap = gsn_csm_contour(wks, Band3, res) + +;---This will be our base, so make it a map plot. + res@cnFillColors = reds + res@gsnAddCyclic = False + + res@mpFillOn = False + +;---Zoom in on area of interest + res@mpMinLatF = minlat + res@mpMaxLatF = maxlat + res@mpMinLonF = minlon + res@mpMaxLonF = maxlon + + redMap = gsn_csm_contour_map(wks, Band1, res) + +;---Overlay everything to create the topo map + overlay(redMap, greenMap) + overlay(redMap, blueMap) + + return(redMap) +end + +;---------------------------------------------------------------------- +; Main code +;---------------------------------------------------------------------- +begin +;---Recreating jpeg images only works for X11 and PNG. + wks = gsn_open_wks("png","topo") + +;---Southern part of Africa + minlat = -40 + maxlat = 5 + minlon = 10 + maxlon = 40 + + map = recreate_jpeg_image(wks,minlat,maxlat,minlon,maxlon) + +;---Overlay a red box + lonbox = (/ 15, 35, 35, 15, 15/) + latbox = (/-30,-30,-10,-10,-30/) + + lnres = True + lnres@gsLineColor = "red" ; red box + lnres@gsLineThicknessF = 4.0 ; make box thicker + box = gsn_add_polyline(wks,map,lonbox,latbox,lnres) + + draw(map) ; Drawing the map will draw the red box + frame(wks) + +end diff --git a/samples/NCL/traj_3.ncl b/samples/NCL/traj_3.ncl new file mode 100644 index 00000000..f01304b4 --- /dev/null +++ b/samples/NCL/traj_3.ncl @@ -0,0 +1,120 @@ +;************************************************* +; traj_3.ncl +;************************************************* +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +external TRAJ "./particle.so" +;************************************************* +begin + + path = "./data.asc" + data = asciiread(path,(/500,6/),"float") +;************************************************* +; some parameters +;************************************************* + np = 1 + nq = 500 + ncor= 8 + xrot = new((/np,nq/),float) + yrot = new((/np,nq/),float) + xaxis = new(ncor,float) + yaxis = new(ncor,float) +;************************************************** +; convert data into rotated format +;************************************************** + TRAJ::particle(path,xrot,yrot,nq,np,xaxis,yaxis,ncor) +;************************************************** +; create plot +;************************************************** + wks = gsn_open_wks("ps","traj") ; Open an ps file + + xyres = True + xyres@gsnFrame = False ; don't advance the frame + xyres@gsnDraw = False ; don't draw indivdual plots + xyres@tmXTBorderOn = False ; don't draw top axis + xyres@tmXBBorderOn = False ; don't draw bottom axis + xyres@tmYRBorderOn = False ; don't draw right axis + xyres@tmYLBorderOn = False ; don't draw left axis + xyres@tmXTOn = False ; don't draw top-axis tick marks + xyres@tmXBOn = False ; don't draw bottom-axis tick marks + xyres@tmYROn = False ; don't draw right-axis tick marks + xyres@tmYLOn = False ; don't draw left-axis tick marks + + xyres@xyLineColors = (/"red"/) ; set the line color to red + xyres@xyLineThicknessF = 4.0 ; 4 times the line thickness + + xyres@trXMaxF = 15000 ; choose range of axis even though + xyres@trXMinF = -10000 ; we don't see them + xyres@trYMaxF = 1000 + xyres@trYMinF = -1000 + + plot = gsn_xy(wks,xrot,yrot,xyres) ; Draw trajectory +;********************************************** +; create arrays needed for the bounding box +;********************************************** + a1 = new(5,float) + b1 = new(5,float) + a2 = new(5,float) + b2 = new(5,float) + a3 = new(2,float) + b3 = new(2,float) + a4 = new(2,float) + b4 = new(2,float) + a5 = new(2,float) + b5 = new(2,float) + a6 = new(2,float) + b6 = new(2,float) + a0 = new(2,float) + b0 = new(2,float) +;********************************************** +; determine values of each bounding line from information +; returned from particle.f +;********************************************** + a1(0:3) = xaxis(:3) + b1(0:3) = yaxis(:3) + a1(4) = xaxis(0) + b1(4) = yaxis(0) + + a2(0:3) = xaxis(4:) + b2(0:3) = yaxis(4:) + a2(4) = xaxis(4) + b2(4) = yaxis(4) + + a3 = xaxis(0:4:4) + b3 = yaxis(0:4:4) + a4 = xaxis(1:5:4) + b4 = yaxis(1:5:4) + + a5 = xaxis(2:6:4) + b5 = yaxis(2:6:4) + a6 = xaxis(3:7:4) + b6 = yaxis(3:7:4) + + a0(0) = xaxis(3) + b0(0) = yaxis(3) + a0(1) = xrot(0,0) + b0(1) = yrot(0,0) +;*************************************************************** +; create bounding box by drawing multiple xy plots on top of +; each other. each with their individual axis turned off. +;*************************************************************** + xyres@xyLineColors = (/"black"/) ; line color + xyres@xyLineThicknessF = 1.0 ; regular line thickness + + bottom = gsn_xy(wks,a1,b1,xyres) ; Draw the bottom bounding box. + top = gsn_xy(wks,a2,b2,xyres) ; Draw the top bounding box. + side1 = gsn_xy(wks,a3,b3,xyres) ; Draw a side line. + side2 = gsn_xy(wks,a4,b4,xyres) ; Draw a side line. + side3 = gsn_xy(wks,a5,b5,xyres) ; Draw a side line. + side4 = gsn_xy(wks,a6,b6,xyres) ; Draw a side line. +;*************************************************************** +; now draw a large brown line to represent the chimney +;*************************************************************** + xyres@xyLineColors = (/"brown"/) ; chimney color + xyres@xyLineThicknessF = 9.0 ; thick line + xyres@tiMainString = "Pollutant Trajectory in a 3D Volume" + chimney = gsn_xy(wks,a0,b0,xyres) ; Draw the chimney. + + draw(wks) + frame(wks) + +end diff --git a/samples/NCL/tsdiagram_1.ncl b/samples/NCL/tsdiagram_1.ncl new file mode 100644 index 00000000..be9b2f6f --- /dev/null +++ b/samples/NCL/tsdiagram_1.ncl @@ -0,0 +1,167 @@ +; Read potential temp (TEMP), salinity (SALT) +; Compute potential density (PD) for specified range PD(t,s) +; (use ncl function based on Yeager's algorithm for rho computation) +; Assumes annual and zonally avgeraged input data set (i.e, one time slice) +; Used K.Lindsay's "za" for zonal avg -- already binned into basins +; Plots temp vs salt (scatter plot), pd overlay + +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl" + +begin +; ================================> ; PARAMETERS + case = "PHC2_gx1v3" + ocnfile = "za_PHC2_T_S_gx1v3.nc" + + depth_min = 14895.82 ; in cm, depth of first layer to be included + depth_max = 537499.9 +; +; plot limits +; + smincn = 32.5 + smaxcn = 37.0 + tmincn = -2. + tmaxcn = 22. +; +; Choose basin index +; +; 0 = global 1 = southern ocean 2 = pacific 3 = indian 6 = atlantic +; 8 = labrador 9 = GIN 10 = arctic +; + bi = 2 + +;=====> basin check + + if(bi.lt.0.or.bi.gt.10) then + print("basin index "+ bi + " not supported") + exit + end if + + if(bi.eq.0) then + basin = "Global" + blab = "global" + end if + if(bi.eq.1) then + basin = "Southern Ocean" + blab = "so" + end if + if(bi.eq.2) then + basin = "Pacific Ocean" + blab = "pacific" + end if + if(bi.eq.3) then + basin = "Indian Ocean" + blab = "indian" + end if + if(bi.eq.6) then + basin = "Atlantic Ocean" + blab = "atlanticn" + end if + if(bi.eq.8) then + basin = "Labrador Sea" + blab = "lab" + end if + if(bi.eq.9) then + basin = "GIN Sea" + blab = "gin" + end if + if(bi.eq.10) then + basin = "Arctic Ocean" + blab = "arctic" + end if + +;=====> initial resource settings + + wks = gsn_open_wks("ps","tsdiagram") ; Open a Postscript file + +;===== data + focn = addfile(ocnfile, "r") + salt = focn->SALT(0,:,{depth_min:depth_max},:) ;(basins, z_t, lat_t) + temp = focn->TEMP(0,:,{depth_min:depth_max},:) + +;====section out choice basin + temp_ba = temp(bi,:,:) + salt_ba = salt(bi,:,:) + +;===== put into scatter array format + tdata_ba = ndtooned(temp_ba) + sdata_ba = ndtooned(salt_ba) + + ydata = tdata_ba + xdata = sdata_ba + +;============== compute potenial density (PD), using rho_mwjf +; +; for potential density, depth = 0. (i.e. density as if brought to surface) +; +;=========================================================================== +; WARNING: T-S diagrams use POTENTIAL DENSITY... if set depth to something +; other then 0, then you will be plotting density contours computed for the +; specified depth layer. +;=========================================================================== + + depth = 0. ;in meters + tspan = fspan(tmincn,tmaxcn,51) + sspan = fspan(smincn,smaxcn,51) + + ; the more points the better... using Yeager's numbers + + t_range = conform_dims((/51,51/),tspan,0) + s_range = conform_dims((/51,51/),sspan,1) + + pd = rho_mwjf(t_range,s_range,depth) + + pd!0 = "temp" + pd!1 = "salt" + pd&temp = tspan + pd&salt = sspan + pd = 1000.*(pd-1.) ; Put into kg/m3 pot den units + +; printVarSummary(pd) +; printVarInfo(pd,"rho_mwjf") + +;=================Graphics + +;--- scatter plot + res = True + res@gsnMaximize = True + res@gsnDraw = False + res@gsnFrame = False + + res@xyMarkLineModes = "Markers" + res@xyMarkers = 16 + res@xyMarkerColors = "black" + res@pmLegendDisplayMode = "Never" + res@txFontHeightF = 0.01 + res@tiMainString = case + " ANN AVG: T-S Diagram" + res@tiXAxisString = salt@units + res@tiXAxisFontHeightF = 0.02 + res@tiYAxisString = temp@units + res@tiYAxisFontHeightF = 0.02 + res@trXMinF = smincn + res@trXMaxF = smaxcn + res@trYMinF = tmincn + res@trYMaxF = tmaxcn + res@gsnRightString = depth_min/100. + "-"+depth_max/100. +"m" + res@gsnLeftString = basin + + plot = gsn_csm_xy(wks,xdata,ydata,res) + +;----- pd overlay + resov = True + resov@gsnDraw = False + resov@gsnFrame = False + resov@cnLevelSelectionMode = "AutomaticLevels" + resov@cnInfoLabelOn = "False" + resov@cnLineLabelPlacementMode = "Constant" + resov@cnLineLabelFontHeightF = ".02" + + plotpd = gsn_csm_contour(wks,pd,resov) + overlay(plot,plotpd) + + draw(plot) + frame(wks) + +end diff --git a/samples/NCL/unique_9.ncl b/samples/NCL/unique_9.ncl new file mode 100644 index 00000000..edcf8285 --- /dev/null +++ b/samples/NCL/unique_9.ncl @@ -0,0 +1,141 @@ +;************************************ +; unique_9.ncl +; +; Concepts illustrated: +; - Drawing raster contours over a map +; - Creating a topography plot using raster contours +; - Reading data from binary files +; - Manually creating lat/lon coordinate arrays +; - Customizing a labelbar for a contour plot +;************************************ +; This example generates a topo map over +; the area of Trinidad, Colorado. +;************************************ +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" + +begin + + wks = gsn_open_wks("ps","unique") + +;----------------- read the west binary data ------------------------- + binfile = "trinidad-w.bin" + + quad_name = fbinrecread(binfile,0,60,"character") + + map_cornersW = fbinrecread(binfile,1,4,"double") + + lonW = fbinrecread(binfile,2,(/1201/),"double") + + latW = fbinrecread(binfile,3,(/1201/),"double") + + minmax_elevW = fbinrecread(binfile,4,2,"double") + + tmpW = fbinrecread(binfile,5,(/1201,1201/),"integer") + +;----------------- read the east binary data ------------------------- + binfile = "trinidad-e.bin" + + quad_name = fbinrecread(binfile,0,60,"character") + + map_cornersE = fbinrecread(binfile,1,4,"double") + + lonE = fbinrecread(binfile,2,(/1201/),"double") + + latE = fbinrecread(binfile,3,(/1201/),"double") + + minmax_elevE = fbinrecread(binfile,4,2,"double") + + tmpE = fbinrecread(binfile,5,(/1201,1201/),"integer") + +;---------------------------------------------------------------------- + min_elev = min((/minmax_elevW(0),minmax_elevE(0)/))*3.28 + max_elev = max((/minmax_elevW(1),minmax_elevE(1)/))*3.28 + + lat = new(1201,"double") + lat = latW + lat!0 = "lat" + lat&lat = latW ; same as latE + lat@long_name = "latitude" + lat@units = "degrees_north" + + lon = new(2401,"double") + lon(0:1200) = lonW + lon(1201:2400) = lonE(1:1200) + lon!0 = "lon" + lon&lon = lon + lon@long_name = "longitude" + lon@units = "degrees_east" + + data = new((/1201,2401/),"float") ; (lat,lon) + data!0 = "lat" + data&lat = lat + data!1 = "lon" + data&lon = lon + data(:,0:1200) = (/tmpW*3.28/) ; convert to feet + data(:,1201:2400) = (/tmpE(:,1:1200)*3.28/) ; convert to feet +;------------------------------------------------------------- + +; +; Define colormap. +; + cmap = (/(/1.00, 1.00, 1.00/),(/0.00, 0.00, 0.00/), \ + (/0.51, 0.13, 0.94/),(/0.00, 0.00, 0.59/), \ + (/0.00, 0.00, 0.80/),(/0.25, 0.41, 0.88/), \ + (/0.12, 0.56, 1.00/),(/0.00, 0.75, 1.00/), \ + (/0.63, 0.82, 1.00/),(/0.82, 0.96, 1.00/), \ + (/1.00, 1.00, 0.78/),(/1.00, 0.88, 0.20/), \ + (/1.00, 0.67, 0.00/),(/1.00, 0.43, 0.00/), \ + (/1.00, 0.00, 0.00/),(/0.78, 0.00, 0.00/), \ + (/0.63, 0.14, 0.14/),(/1.00, 0.41, 0.70/)/) + + gsn_define_colormap(wks,cmap) + + res = True + res@gsnMaximize = True + res@gsnAddCyclic = False + +; map plot resources + res@mpFillOn = False + res@mpLimitMode = "Corners" + res@mpDataBaseVersion = "Ncarg4_1" + res@mpOutlineBoundarySets = "AllBoundaries" + res@mpLeftCornerLonF = map_cornersW(0) + res@mpLeftCornerLatF = map_cornersW(1) + res@mpRightCornerLonF = map_cornersE(2) + res@mpRightCornerLatF = map_cornersE(3) + +; contour resources + res@cnFillOn = True + res@cnLinesOn = False + res@cnFillMode = "RasterFill" + res@cnLevelSelectionMode = "ExplicitLevels" + res@cnLevels = (/ 5000., 6000., 7000., 8000., 8500., 9000., \ + 9500.,10000.,10500.,11000.,11500.,12000., \ + 12500.,13000.,13500./) + +; tickmark resources + res@pmTickMarkDisplayMode = "Always" + res@tmXBLabelFontHeightF = 0.010 + +; labelbar resources + res@pmLabelBarWidthF = 0.60 + res@txFontHeightF = 0.012 + res@lbTitleString = "elevation above mean sea level (feet)" + res@lbTitleFontHeightF = 0.012 + res@lbLabelFontHeightF = 0.008 + res@lbTitleOffsetF = -0.27 + res@lbBoxMinorExtentF = 0.15 + res@pmLabelBarOrthogonalPosF = -.05 + +; title resources + res@tiMainString = "USGS DEM TRINIDAD (1 x 2 degrees)" + res@tiMainOffsetYF = -0.02 ; Move title down towards graphic. + res@tiMainFontHeightF = 0.015 + res@gsnLeftString = "Min Elevation: "+min_elev + res@gsnRightString = "Max Elevation: "+max_elev + res@gsnCenterString = "Scale 1:250,000" + + plot = gsn_csm_contour_map(wks,data,res) + +end diff --git a/samples/NCL/viewport_4.ncl b/samples/NCL/viewport_4.ncl new file mode 100644 index 00000000..3635a2fa --- /dev/null +++ b/samples/NCL/viewport_4.ncl @@ -0,0 +1,131 @@ +; *********************************************** +; viewport_4.ncl +; +; Concepts illustrated: +; - Drawing an XY plot with multiple curves +; - Using drawNDCGrid to draw a nicely labeled NDC grid +; - Changing the size/shape of an XY plot using viewport resources +; - Drawing two XY plots on the same page using viewport resources +; - Drawing polylines, polymarkers, and text in NDC space +; - Using "getvalues" to retrieve resource values +; - Maximizing plots after they've been created +; *********************************************** +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl" + +;******************************************************************** +; Draw a box around the viewport of the given object.. +;******************************************************************** +procedure draw_vp_box(wks,plot) +local vpx, vpy, vpw, vph, xbox, ybox, lnres, mkres, txres +begin + +; Retrieve the viewport values of the drawable object. + getvalues plot + "vpXF" : vpx + "vpYF" : vpy + "vpWidthF" : vpw + "vpHeightF" : vph + end getvalues + +; Set up some marker resources. + mkres = True + mkres@gsMarkerIndex = 16 ; filled dot + mkres@gsMarkerSizeF = 0.02 ; larger than default + mkres@gsMarkerColor = "Red" + +; Draw a single marker at the vpXF/vpYF location. + gsn_polymarker_ndc(wks,vpx,vpy,mkres) + + +; Set up some text resources. + txres = True + txres@txJust = "BottomLeft" + txres@txFontHeightF = 0.018 + txres@txFontColor = "Blue" + txres@txBackgroundFillColor = "white" + + gsn_text_ndc(wks,"(vpXF="+vpx+", vpYF="+vpy+")",vpx,vpy+0.02,txres) +; Set up some line resources. + lnres = True + lnres@gsLineColor = "Red" ; line color + lnres@gsLineThicknessF = 2.0 ; 3.5 times as thick + +; Draw lines indicating the width and height + xline = (/vpx, vpx+vpw/) + yline = (/vpy-0.05,vpy-0.05/) + gsn_polyline_ndc(wks,xline,yline,lnres) + + xline = (/vpx+0.05,vpx+0.05/) + yline = (/vpy,vpy-vph/) + gsn_polyline_ndc(wks,xline,yline,lnres) + + txres@txJust = "CenterCenter" + gsn_text_ndc(wks,"vpWidthF = " + vpw,vpx+vpw/2.,vpy-0.05,txres) + + txres@txAngleF = 90. + gsn_text_ndc(wks,"vpHeightF = " + vph,vpx+0.05,vpy-vph/2.,txres) +end + +;******************************************************************** +; Main code +;******************************************************************** +begin +;************************************************ +; read in data +;************************************************ + f = addfile ("$NCARG_ROOT/lib/ncarg/data/cdf/uv300.nc","r") + u = f->U ; get u data +;************************************************ +; plotting parameters +;************************************************ + wks = gsn_open_wks ("ps","viewport") ; open workstation + + res = True ; plot mods desired + + res@gsnFrame = False ; don't advance frame yet + + res@vpWidthF = 0.8 ; set width and height + res@vpHeightF = 0.3 + +; First plot + res@tiMainString = "Plot 1" + + res@vpXF = 0.15 + res@vpYF = 0.9 ; Higher on the page + + plot1 = gsn_csm_xy (wks,u&lat,u(0,:,{82}),res) ; create plot + +; Second plot + res@tiMainString = "Plot 2" + + res@vpXF = 0.15 ; Same X location as first plot + res@vpYF = 0.4 ; Lower on the page + + plot2 = gsn_csm_xy (wks,u&lat,u(0,:,{3}),res) ; create plot + +; Advance the frame + frame(wks) + +; Now draw the two plots with illustrations. + + drawNDCGrid(wks) ; Draw helpful grid lines showing NDC square. + + draw(plot1) ; Draw the two plots + draw(plot2) + + draw_vp_box(wks,plot1) ; Draw boxes around the two viewports. + draw_vp_box(wks,plot2) + + frame(wks) ; Advance the frame. + + +; +; Uncomment the next two lines if you want to maximize these plots for +; PS or PDF output. +; +; psres = True +; maximize_output(wks,psres) ; calls draw and frame for you +end diff --git a/samples/NCL/weather_sym_6.ncl b/samples/NCL/weather_sym_6.ncl new file mode 100644 index 00000000..49ed16d1 --- /dev/null +++ b/samples/NCL/weather_sym_6.ncl @@ -0,0 +1,120 @@ +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" + +begin +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; Example of plotting station model data over a map +; illustrating how the wind barb directions are adjusted +; for the map projection. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; City names. +; + cities = (/ "NCAR", "Seattle", "San Francisco", \ + "Los Angeles", "Billings", "El Paso", \ + "Houston", "Kansas City", "Minneapolis", \ + "Chicago", "Detroit", "Atlanta", \ + "Miami", "New York", "Eugene", \ + "Boise", "Salt Lake", "Phoenix", \ + "Albuquerque", "Bismarck", "Tulsa", \ + "Dallas", "Little Rock", "Lexington", \ + "Charlotte", "Norfolk", "Bangor" \ + /) + city_lats = (/ 40.0, 47.6, 37.8, \ + 34.1, 45.8, 31.8, \ + 29.8, 39.1, 45.0, \ + 41.9, 42.3, 33.8, \ + 25.8, 40.8, 44.1, \ + 43.6, 40.7, 33.5, \ + 35.1, 46.7, 36.0, \ + 32.8, 34.7, 38.1, \ + 35.2, 36.8, 44.8 \ + /) + city_lons = (/ -105.0, -122.3, -122.4, \ + -118.3, -108.5, -106.5, \ + -095.3, -094.1, -093.8, \ + -087.6, -083.1, -084.4, \ + -080.2, -074.0, -123.1, \ + -116.2, -111.9, -112.1, \ + -106.6, -100.8, -096.0, \ + -096.8, -092.3, -084.1, \ + -080.8, -076.3, -068.8 \ + /) +; +; Station model data for the 27 cities. +; + imdat = (/"11000000751126021360300004955054054600007757087712", \ + "11103100011104021080300004959055050600517043080369", \ + "11206200031102021040300004963056046601517084081470", \ + "11309300061000021020300004967057042602017125082581", \ + "11412400091002021010300004971058038602517166083592", \ + "11515500121004020000300004975050034603017207084703", \ + "11618600151006020030300004979051030603507248085814", \ + "11721700181008020050300004983052026604007289086925", \ + "11824800211009020070300004987053022604507323087036", \ + "11927900241011020110300004991054018605017364088147", \ + "11030000271013020130300004995055014605517405089258", \ + "11133100301015020170300004999056010606017446080369", \ + "11236200331017020200300004000057006606517487081470", \ + "11339300361019020230300004004058002607017528082581", \ + "11442400391021020250300004008050000607517569083692", \ + "11545500421023020270300004012051040608017603084703", \ + "11648600451025020290300004017052008608517644085814", \ + "11751700481027020310300004021053012609017685086925", \ + "11854800511029020330300004025054016609507726087036", \ + "11958900541031020360300004029055018610007767088147", \ + "11060000571033020380300004033056030610507808089258", \ + "11163100601035020410300004037057034611007849080369", \ + "11266200631037020430300004041058043611507883081470", \ + "11369300661039020470300004045050041612007924082581", \ + "11472400691041020500300004048051025612507965083692", \ + "11575500721043020530300004051052022613507996084703", \ + "11678600751048021580300004055053013614007337085814" \ + /) + +; +; Define a color map and open a workstation. +; + cmap = (/ \ + (/ 1., 1., 1. /), \ ; color index 0 - white + (/ 0., 0., 0. /) \ ; color index 1 - black + /) + wks = gsn_open_wks("ps","weather_sym") + gsn_define_colormap(wks,cmap) + +; +; Draw a world map. +; + mpres = True + mpres@gsnFrame = False + mpres@mpSatelliteDistF = 1.3 + mpres@mpOutlineBoundarySets = "USStates" + mpres@mpCenterLatF = 40. + mpres@mpCenterLonF = -97. + mpres@mpCenterRotF = 35. + map = gsn_map(wks,"Satellite",mpres) + +; +; Scale the station model plot (all aspects of the station +; model plots are scaled as per the size of the wind barb). +; + wmsetp("wbs",0.018) +; +; In the middle of Nebraska, draw a wind barb for a north wind +; with a magnitude of 15 knots. +; + wmbarbmap(wks,42.,-99.,0.,-15.) + +; +; Draw the station model data at the selected cities. The call +; to wmsetp informs wmstnm that the wind barbs will be drawn over +; a map. To illustrate the adjustment for plotting the model +; data over a map, all winds are from the north. +; + wmsetp("ezf",1) + wmstnm(wks,city_lats,city_lons,imdat) + + frame(wks) + +end diff --git a/samples/NCL/xy_29.ncl b/samples/NCL/xy_29.ncl new file mode 100644 index 00000000..ae231f75 --- /dev/null +++ b/samples/NCL/xy_29.ncl @@ -0,0 +1,151 @@ +; xy_29.ncl +; +; Concepts illustrated: +; - Reading data from an ASCII file with headers +; - Creating a separate procedure to create a specific plot +; - Attaching polymarkers to an XY plot +; +; This script was originally from Dr. Birgit Hassler (NOAA) +;**************************************************** + +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" + +;************************************************ +; Plot Procedure +;************************************************ +procedure plotTCOPolym(pltName[1]:string, pltType[1]:string, filName[1]:string \ + ,xTitle[1]:string , yTitle[1]:string \ + ,year[*]:numeric, y[*]:numeric) +local wks, res, ntim, gsres, MarkerCol, OldYear, i, xmarker, ymarker + +begin + wks = gsn_open_wks(pltType,pltName) + gsn_define_colormap(wks,"default") + + res = True + res@gsnMaximize = True ; make "ps", "eps", "pdf" large + + res@vpHeightF = 0.5 ; change aspect ratio of plot + res@vpWidthF = 0.75 + res@vpXF = 0.15 ; start plot at x ndc coord + res@tiXAxisString = xTitle + res@tiYAxisString = yTitle + res@tiMainString = filName + + ntim = dimsizes(year) + res@trXMinF = year(0)-1 + res@trXMaxF = year(ntim-1)+1 + + res@gsnDraw = False + res@gsnFrame = False + res@xyMarkLineMode = "markers" + res@xyMarker = 16 + res@xyMarkerColor = "Background" + plot = gsn_csm_xy (wks,year,y,res) ; create plot frame ork + + ; add different color polymarkers for each year + gsres = True + MarkerCol = 2 + OldYear = year(0) + + do i=0,ntim-1 + xmarker = year(i) + ymarker = y(i) + + if (i.gt.0) then + if (year(i).gt.OldYear) then + MarkerCol = MarkerCol+1 + end if + OldYear = year(i) + end if + + gsres@gsMarkerColor = MarkerCol + gsres@gsMarkerIndex = 16 + ;gsres@gsMarkerSizeF = 15.0 + ; add (attach) polymarkers to existing plot object + plot@$unique_string("dum")$ = gsn_add_polymarker(wks,plot,xmarker,ymarker,gsres) + end do + + draw(plot) + frame(wks) +end + +;*********************************************************** +; MAIN +;*********************************************************** + pltType = "ps" ; "ps", "eps", "png", "x11" + + ; read multiple ascii file names + ;;fili = "Southpole_TCOTimeSeries_11.dat" + + diri = "./" + fili = systemfunc("cd "+diri+" ; ls *TCOT*dat") + print(fili) + + nfil = dimsizes(fili) + + nhead= 4 ; number of header lines on ascii file(s) + ncol = 4 ; year, month, day, O3 + + do nf=0,nfil-1 + sfx = get_file_suffix(fili(nf), 0) ; sfx = ".dat" + filx = sfx@fBase ; filx= "Southpole_TCOTimeSeries_11" + ; read ascii files + data = readAsciiTable(diri+fili(nf), ncol, "float", nhead) + dimd = dimsizes(data) + ntim = dimd(0) ; # rows + + year = toint( data(:,0) ) ; user decision ... convert to integer + mon = toint( data(:,1) ) + day = toint( data(:,2) ) + + hour = new (ntim, "integer", "No_FillValue") + mn = new (ntim, "integer", "No_FillValue") + sec = new (ntim, "double" , "No_FillValue") + hour = 0 + mn = 0 + sec = 0d0 + ; create COARDS/udunits time variable + ;;tunits = "days since 1900-01-01 00:00:0.0" + tunits = "days since "+year(0)+"-"+mon(0)+"-"+day(0)+" 00:00:0.0" + time = cd_inv_calendar(year,mon,day,hour,mn,sec,tunits, 0) + time!0 = "time" + time&time = time + ;printVarSummary(time) + + ; create a Gregorin 'date' variable + date = year*10000 + mon*100 + day + date!0 = "time" + date@units = "yyyymmdd" + date&time = time + ;printVarSummary(date) + + O3 = data(:,3) + O3@long_name = "total column ozone" + O3@units = "DU" + + O3!0 = "time" + O3&time = time + ;printVarSummary(O3) + ;print(" ") + ;print(date+" "+time+" "+O3) + + ; plot + yTitle = O3@long_name + year@long_name = "YEAR" + + plotTCOPolym (filx, pltType, fili(nf), year@long_name, yTitle, year, O3) + + delete(time) ; delete ... size (# rows) may change in the next file + delete(date) + delete(year) + delete(mon ) + delete(day ) + delete(mn ) + delete(sec ) + delete(O3 ) + delete(data) + end do + diff --git a/samples/NL/assign0.nl b/samples/NL/assign0.nl new file mode 100644 index 00000000..9f1c58cf --- /dev/null +++ b/samples/NL/assign0.nl @@ -0,0 +1,84 @@ +g3 0 1 0 # problem assign0 + 9 6 1 0 6 # vars, constraints, objectives, ranges, eqns + 0 0 # nonlinear constraints, objectives + 0 0 # network constraints: nonlinear, linear + 0 0 0 # nonlinear vars in constraints, objectives, both + 0 0 0 1 # linear network variables; functions; arith, flags + 9 0 0 0 0 # discrete variables: binary, integer, nonlinear (b,c,o) + 18 9 # nonzeros in Jacobian, gradients + 0 0 # max name lengths: constraints, variables + 0 0 0 0 0 # common exprs: b,c,o,c1,o1 +C0 +n0 +C1 +n0 +C2 +n0 +C3 +n0 +C4 +n0 +C5 +n0 +O0 0 +n0 +r +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +b +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +k8 +2 +4 +6 +8 +10 +12 +14 +16 +J0 3 +0 1 +1 1 +2 1 +J1 3 +3 1 +4 1 +5 1 +J2 3 +6 1 +7 1 +8 1 +J3 3 +0 1 +3 1 +6 1 +J4 3 +1 1 +4 1 +7 1 +J5 3 +2 1 +5 1 +8 1 +G0 9 +0 1 +1 3 +2 3 +3 2 +4 3 +5 3 +6 3 +7 3 +8 2 diff --git a/samples/NL/balassign0.nl b/samples/NL/balassign0.nl new file mode 100644 index 00000000..59d5690b --- /dev/null +++ b/samples/NL/balassign0.nl @@ -0,0 +1,2284 @@ +g3 2 1 0 # problem balassign0 + 160 121 1 0 26 # vars, constraints, objectives, ranges, eqns + 0 0 # nonlinear constraints, objectives + 0 0 # network constraints: nonlinear, linear + 0 0 0 # nonlinear vars in constraints, objectives, both + 0 0 0 1 # linear network variables; functions; arith, flags + 130 30 0 0 0 # discrete variables: binary, integer, nonlinear (b,c,o) + 1435 30 # nonzeros in Jacobian, gradients + 0 0 # max name lengths: constraints, variables + 0 0 0 0 0 # common exprs: b,c,o,c1,o1 +C0 +n0 +C1 +n0 +C2 +n0 +C3 +n0 +C4 +n0 +C5 +n0 +C6 +n0 +C7 +n0 +C8 +n0 +C9 +n0 +C10 +n0 +C11 +n0 +C12 +n0 +C13 +n0 +C14 +n0 +C15 +n0 +C16 +n0 +C17 +n0 +C18 +n0 +C19 +n0 +C20 +n0 +C21 +n0 +C22 +n0 +C23 +n0 +C24 +n0 +C25 +n0 +C26 +n0 +C27 +n0 +C28 +n0 +C29 +n0 +C30 +n0 +C31 +n0 +C32 +n0 +C33 +n0 +C34 +n0 +C35 +n0 +C36 +n0 +C37 +n0 +C38 +n0 +C39 +n0 +C40 +n0 +C41 +n0 +C42 +n0 +C43 +n0 +C44 +n0 +C45 +n0 +C46 +n0 +C47 +n0 +C48 +n0 +C49 +n0 +C50 +n0 +C51 +n0 +C52 +n0 +C53 +n0 +C54 +n0 +C55 +n0 +C56 +n0 +C57 +n0 +C58 +n0 +C59 +n0 +C60 +n0 +C61 +n0 +C62 +n0 +C63 +n0 +C64 +n0 +C65 +n0 +C66 +n0 +C67 +n0 +C68 +n0 +C69 +n0 +C70 +n0 +C71 +n0 +C72 +n0 +C73 +n0 +C74 +n0 +C75 +n0 +C76 +n0 +C77 +n0 +C78 +n0 +C79 +n0 +C80 +n0 +C81 +n0 +C82 +n0 +C83 +n0 +C84 +n0 +C85 +n0 +C86 +n0 +C87 +n0 +C88 +n0 +C89 +n0 +C90 +n0 +C91 +n0 +C92 +n0 +C93 +n0 +C94 +n0 +C95 +n0 +C96 +n0 +C97 +n0 +C98 +n0 +C99 +n0 +C100 +n0 +C101 +n0 +C102 +n0 +C103 +n0 +C104 +n0 +C105 +n0 +C106 +n0 +C107 +n0 +C108 +n0 +C109 +n0 +C110 +n0 +C111 +n0 +C112 +n0 +C113 +n0 +C114 +n0 +C115 +n0 +C116 +n0 +C117 +n0 +C118 +n0 +C119 +n0 +C120 +n0 +O0 0 +n0 +r +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +4 1 +1 0 +1 0 +1 0 +1 0 +1 0 +2 0 +2 0 +2 0 +2 0 +2 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +1 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +2 0 +b +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +0 0 1 +1 5 +2 6 +1 4 +1 0 +1 0 +1 0 +1 1 +1 0 +1 2 +1 0 +1 0 +1 4 +1 0 +1 2 +1 2 +1 0 +2 4 +2 1 +2 1 +2 1 +2 2 +2 1 +2 3 +2 1 +2 1 +2 5 +2 1 +2 3 +2 3 +2 1 +k159 +11 +22 +33 +44 +55 +64 +73 +82 +91 +100 +111 +122 +133 +144 +155 +166 +177 +188 +199 +210 +220 +230 +240 +250 +260 +270 +280 +290 +300 +310 +321 +332 +343 +354 +365 +375 +385 +395 +405 +415 +425 +435 +445 +455 +465 +476 +487 +498 +509 +520 +531 +542 +553 +564 +575 +586 +597 +608 +619 +630 +641 +652 +663 +674 +685 +696 +707 +718 +729 +740 +749 +758 +767 +776 +785 +796 +807 +818 +829 +840 +850 +860 +870 +880 +890 +899 +908 +917 +926 +935 +945 +955 +965 +975 +985 +995 +1005 +1015 +1025 +1035 +1046 +1057 +1068 +1079 +1090 +1099 +1108 +1117 +1126 +1135 +1146 +1157 +1168 +1179 +1190 +1201 +1212 +1223 +1234 +1245 +1255 +1265 +1275 +1285 +1295 +1304 +1313 +1322 +1331 +1340 +1345 +1350 +1355 +1355 +1355 +1355 +1360 +1360 +1365 +1365 +1365 +1370 +1370 +1375 +1380 +1380 +1385 +1390 +1390 +1395 +1400 +1400 +1405 +1410 +1410 +1415 +1420 +1425 +1430 +J0 5 +0 1 +1 1 +2 1 +3 1 +4 1 +J1 5 +5 1 +6 1 +7 1 +8 1 +9 1 +J2 5 +10 1 +11 1 +12 1 +13 1 +14 1 +J3 5 +15 1 +16 1 +17 1 +18 1 +19 1 +J4 5 +20 1 +21 1 +22 1 +23 1 +24 1 +J5 5 +25 1 +26 1 +27 1 +28 1 +29 1 +J6 5 +30 1 +31 1 +32 1 +33 1 +34 1 +J7 5 +35 1 +36 1 +37 1 +38 1 +39 1 +J8 5 +40 1 +41 1 +42 1 +43 1 +44 1 +J9 5 +45 1 +46 1 +47 1 +48 1 +49 1 +J10 5 +50 1 +51 1 +52 1 +53 1 +54 1 +J11 5 +55 1 +56 1 +57 1 +58 1 +59 1 +J12 5 +60 1 +61 1 +62 1 +63 1 +64 1 +J13 5 +65 1 +66 1 +67 1 +68 1 +69 1 +J14 5 +70 1 +71 1 +72 1 +73 1 +74 1 +J15 5 +75 1 +76 1 +77 1 +78 1 +79 1 +J16 5 +80 1 +81 1 +82 1 +83 1 +84 1 +J17 5 +85 1 +86 1 +87 1 +88 1 +89 1 +J18 5 +90 1 +91 1 +92 1 +93 1 +94 1 +J19 5 +95 1 +96 1 +97 1 +98 1 +99 1 +J20 5 +100 1 +101 1 +102 1 +103 1 +104 1 +J21 5 +105 1 +106 1 +107 1 +108 1 +109 1 +J22 5 +110 1 +111 1 +112 1 +113 1 +114 1 +J23 5 +115 1 +116 1 +117 1 +118 1 +119 1 +J24 5 +120 1 +121 1 +122 1 +123 1 +124 1 +J25 5 +125 1 +126 1 +127 1 +128 1 +129 1 +J26 27 +0 -1 +5 -1 +10 -1 +15 -1 +20 -1 +25 -1 +30 -1 +35 -1 +40 -1 +45 -1 +50 -1 +55 -1 +60 -1 +65 -1 +70 -1 +75 -1 +80 -1 +85 -1 +90 -1 +95 -1 +100 -1 +105 -1 +110 -1 +115 -1 +120 -1 +125 -1 +130 1 +J27 27 +1 -1 +6 -1 +11 -1 +16 -1 +21 -1 +26 -1 +31 -1 +36 -1 +41 -1 +46 -1 +51 -1 +56 -1 +61 -1 +66 -1 +71 -1 +76 -1 +81 -1 +86 -1 +91 -1 +96 -1 +101 -1 +106 -1 +111 -1 +116 -1 +121 -1 +126 -1 +130 1 +J28 27 +2 -1 +7 -1 +12 -1 +17 -1 +22 -1 +27 -1 +32 -1 +37 -1 +42 -1 +47 -1 +52 -1 +57 -1 +62 -1 +67 -1 +72 -1 +77 -1 +82 -1 +87 -1 +92 -1 +97 -1 +102 -1 +107 -1 +112 -1 +117 -1 +122 -1 +127 -1 +130 1 +J29 27 +3 -1 +8 -1 +13 -1 +18 -1 +23 -1 +28 -1 +33 -1 +38 -1 +43 -1 +48 -1 +53 -1 +58 -1 +63 -1 +68 -1 +73 -1 +78 -1 +83 -1 +88 -1 +93 -1 +98 -1 +103 -1 +108 -1 +113 -1 +118 -1 +123 -1 +128 -1 +130 1 +J30 27 +4 -1 +9 -1 +14 -1 +19 -1 +24 -1 +29 -1 +34 -1 +39 -1 +44 -1 +49 -1 +54 -1 +59 -1 +64 -1 +69 -1 +74 -1 +79 -1 +84 -1 +89 -1 +94 -1 +99 -1 +104 -1 +109 -1 +114 -1 +119 -1 +124 -1 +129 -1 +130 1 +J31 27 +0 -1 +5 -1 +10 -1 +15 -1 +20 -1 +25 -1 +30 -1 +35 -1 +40 -1 +45 -1 +50 -1 +55 -1 +60 -1 +65 -1 +70 -1 +75 -1 +80 -1 +85 -1 +90 -1 +95 -1 +100 -1 +105 -1 +110 -1 +115 -1 +120 -1 +125 -1 +131 1 +J32 27 +1 -1 +6 -1 +11 -1 +16 -1 +21 -1 +26 -1 +31 -1 +36 -1 +41 -1 +46 -1 +51 -1 +56 -1 +61 -1 +66 -1 +71 -1 +76 -1 +81 -1 +86 -1 +91 -1 +96 -1 +101 -1 +106 -1 +111 -1 +116 -1 +121 -1 +126 -1 +131 1 +J33 27 +2 -1 +7 -1 +12 -1 +17 -1 +22 -1 +27 -1 +32 -1 +37 -1 +42 -1 +47 -1 +52 -1 +57 -1 +62 -1 +67 -1 +72 -1 +77 -1 +82 -1 +87 -1 +92 -1 +97 -1 +102 -1 +107 -1 +112 -1 +117 -1 +122 -1 +127 -1 +131 1 +J34 27 +3 -1 +8 -1 +13 -1 +18 -1 +23 -1 +28 -1 +33 -1 +38 -1 +43 -1 +48 -1 +53 -1 +58 -1 +63 -1 +68 -1 +73 -1 +78 -1 +83 -1 +88 -1 +93 -1 +98 -1 +103 -1 +108 -1 +113 -1 +118 -1 +123 -1 +128 -1 +131 1 +J35 27 +4 -1 +9 -1 +14 -1 +19 -1 +24 -1 +29 -1 +34 -1 +39 -1 +44 -1 +49 -1 +54 -1 +59 -1 +64 -1 +69 -1 +74 -1 +79 -1 +84 -1 +89 -1 +94 -1 +99 -1 +104 -1 +109 -1 +114 -1 +119 -1 +124 -1 +129 -1 +131 1 +J36 21 +0 -1 +5 -1 +10 -1 +15 -1 +20 -1 +25 -1 +30 -1 +35 -1 +45 -1 +50 -1 +55 -1 +60 -1 +65 -1 +75 -1 +100 -1 +105 -1 +110 -1 +115 -1 +120 -1 +125 -1 +132 1 +J37 9 +0 -1 +10 -1 +45 -1 +70 -1 +75 -1 +90 -1 +95 -1 +100 -1 +136 1 +J38 15 +15 -1 +20 -1 +25 -1 +30 -1 +35 -1 +40 -1 +50 -1 +55 -1 +60 -1 +65 -1 +80 -1 +110 -1 +115 -1 +120 -1 +138 1 +J39 25 +0 -1 +5 -1 +10 -1 +15 -1 +25 -1 +30 -1 +40 -1 +45 -1 +50 -1 +55 -1 +60 -1 +65 -1 +70 -1 +75 -1 +80 -1 +85 -1 +90 -1 +95 -1 +100 -1 +105 -1 +110 -1 +115 -1 +120 -1 +125 -1 +141 1 +J40 13 +0 -1 +10 -1 +20 -1 +30 -1 +35 -1 +40 -1 +45 -1 +70 -1 +75 -1 +85 -1 +100 -1 +125 -1 +143 1 +J41 12 +5 -1 +15 -1 +50 -1 +55 -1 +60 -1 +65 -1 +80 -1 +90 -1 +95 -1 +110 -1 +115 -1 +144 1 +J42 21 +1 -1 +6 -1 +11 -1 +16 -1 +21 -1 +26 -1 +31 -1 +36 -1 +46 -1 +51 -1 +56 -1 +61 -1 +66 -1 +76 -1 +101 -1 +106 -1 +111 -1 +116 -1 +121 -1 +126 -1 +132 1 +J43 9 +1 -1 +11 -1 +46 -1 +71 -1 +76 -1 +91 -1 +96 -1 +101 -1 +136 1 +J44 15 +16 -1 +21 -1 +26 -1 +31 -1 +36 -1 +41 -1 +51 -1 +56 -1 +61 -1 +66 -1 +81 -1 +111 -1 +116 -1 +121 -1 +138 1 +J45 25 +1 -1 +6 -1 +11 -1 +16 -1 +26 -1 +31 -1 +41 -1 +46 -1 +51 -1 +56 -1 +61 -1 +66 -1 +71 -1 +76 -1 +81 -1 +86 -1 +91 -1 +96 -1 +101 -1 +106 -1 +111 -1 +116 -1 +121 -1 +126 -1 +141 1 +J46 13 +1 -1 +11 -1 +21 -1 +31 -1 +36 -1 +41 -1 +46 -1 +71 -1 +76 -1 +86 -1 +101 -1 +126 -1 +143 1 +J47 12 +6 -1 +16 -1 +51 -1 +56 -1 +61 -1 +66 -1 +81 -1 +91 -1 +96 -1 +111 -1 +116 -1 +144 1 +J48 21 +2 -1 +7 -1 +12 -1 +17 -1 +22 -1 +27 -1 +32 -1 +37 -1 +47 -1 +52 -1 +57 -1 +62 -1 +67 -1 +77 -1 +102 -1 +107 -1 +112 -1 +117 -1 +122 -1 +127 -1 +132 1 +J49 9 +2 -1 +12 -1 +47 -1 +72 -1 +77 -1 +92 -1 +97 -1 +102 -1 +136 1 +J50 15 +17 -1 +22 -1 +27 -1 +32 -1 +37 -1 +42 -1 +52 -1 +57 -1 +62 -1 +67 -1 +82 -1 +112 -1 +117 -1 +122 -1 +138 1 +J51 25 +2 -1 +7 -1 +12 -1 +17 -1 +27 -1 +32 -1 +42 -1 +47 -1 +52 -1 +57 -1 +62 -1 +67 -1 +72 -1 +77 -1 +82 -1 +87 -1 +92 -1 +97 -1 +102 -1 +107 -1 +112 -1 +117 -1 +122 -1 +127 -1 +141 1 +J52 13 +2 -1 +12 -1 +22 -1 +32 -1 +37 -1 +42 -1 +47 -1 +72 -1 +77 -1 +87 -1 +102 -1 +127 -1 +143 1 +J53 12 +7 -1 +17 -1 +52 -1 +57 -1 +62 -1 +67 -1 +82 -1 +92 -1 +97 -1 +112 -1 +117 -1 +144 1 +J54 21 +3 -1 +8 -1 +13 -1 +18 -1 +23 -1 +28 -1 +33 -1 +38 -1 +48 -1 +53 -1 +58 -1 +63 -1 +68 -1 +78 -1 +103 -1 +108 -1 +113 -1 +118 -1 +123 -1 +128 -1 +132 1 +J55 9 +3 -1 +13 -1 +48 -1 +73 -1 +78 -1 +93 -1 +98 -1 +103 -1 +136 1 +J56 15 +18 -1 +23 -1 +28 -1 +33 -1 +38 -1 +43 -1 +53 -1 +58 -1 +63 -1 +68 -1 +83 -1 +113 -1 +118 -1 +123 -1 +138 1 +J57 25 +3 -1 +8 -1 +13 -1 +18 -1 +28 -1 +33 -1 +43 -1 +48 -1 +53 -1 +58 -1 +63 -1 +68 -1 +73 -1 +78 -1 +83 -1 +88 -1 +93 -1 +98 -1 +103 -1 +108 -1 +113 -1 +118 -1 +123 -1 +128 -1 +141 1 +J58 13 +3 -1 +13 -1 +23 -1 +33 -1 +38 -1 +43 -1 +48 -1 +73 -1 +78 -1 +88 -1 +103 -1 +128 -1 +143 1 +J59 12 +8 -1 +18 -1 +53 -1 +58 -1 +63 -1 +68 -1 +83 -1 +93 -1 +98 -1 +113 -1 +118 -1 +144 1 +J60 21 +4 -1 +9 -1 +14 -1 +19 -1 +24 -1 +29 -1 +34 -1 +39 -1 +49 -1 +54 -1 +59 -1 +64 -1 +69 -1 +79 -1 +104 -1 +109 -1 +114 -1 +119 -1 +124 -1 +129 -1 +132 1 +J61 9 +4 -1 +14 -1 +49 -1 +74 -1 +79 -1 +94 -1 +99 -1 +104 -1 +136 1 +J62 15 +19 -1 +24 -1 +29 -1 +34 -1 +39 -1 +44 -1 +54 -1 +59 -1 +64 -1 +69 -1 +84 -1 +114 -1 +119 -1 +124 -1 +138 1 +J63 25 +4 -1 +9 -1 +14 -1 +19 -1 +29 -1 +34 -1 +44 -1 +49 -1 +54 -1 +59 -1 +64 -1 +69 -1 +74 -1 +79 -1 +84 -1 +89 -1 +94 -1 +99 -1 +104 -1 +109 -1 +114 -1 +119 -1 +124 -1 +129 -1 +141 1 +J64 13 +4 -1 +14 -1 +24 -1 +34 -1 +39 -1 +44 -1 +49 -1 +74 -1 +79 -1 +89 -1 +104 -1 +129 -1 +143 1 +J65 12 +9 -1 +19 -1 +54 -1 +59 -1 +64 -1 +69 -1 +84 -1 +94 -1 +99 -1 +114 -1 +119 -1 +144 1 +J66 21 +0 -1 +5 -1 +10 -1 +15 -1 +20 -1 +25 -1 +30 -1 +35 -1 +45 -1 +50 -1 +55 -1 +60 -1 +65 -1 +75 -1 +100 -1 +105 -1 +110 -1 +115 -1 +120 -1 +125 -1 +146 1 +J67 4 +40 -1 +85 -1 +90 -1 +147 1 +J68 3 +80 -1 +95 -1 +149 1 +J69 9 +0 -1 +10 -1 +45 -1 +70 -1 +75 -1 +90 -1 +95 -1 +100 -1 +150 1 +J70 15 +15 -1 +20 -1 +25 -1 +30 -1 +35 -1 +40 -1 +50 -1 +55 -1 +60 -1 +65 -1 +80 -1 +110 -1 +115 -1 +120 -1 +152 1 +J71 3 +85 -1 +105 -1 +153 1 +J72 25 +0 -1 +5 -1 +10 -1 +15 -1 +25 -1 +30 -1 +40 -1 +45 -1 +50 -1 +55 -1 +60 -1 +65 -1 +70 -1 +75 -1 +80 -1 +85 -1 +90 -1 +95 -1 +100 -1 +105 -1 +110 -1 +115 -1 +120 -1 +125 -1 +155 1 +J73 3 +20 -1 +35 -1 +156 1 +J74 13 +0 -1 +10 -1 +20 -1 +30 -1 +35 -1 +40 -1 +45 -1 +70 -1 +75 -1 +85 -1 +100 -1 +125 -1 +157 1 +J75 12 +5 -1 +15 -1 +50 -1 +55 -1 +60 -1 +65 -1 +80 -1 +90 -1 +95 -1 +110 -1 +115 -1 +158 1 +J76 4 +25 -1 +105 -1 +120 -1 +159 1 +J77 21 +1 -1 +6 -1 +11 -1 +16 -1 +21 -1 +26 -1 +31 -1 +36 -1 +46 -1 +51 -1 +56 -1 +61 -1 +66 -1 +76 -1 +101 -1 +106 -1 +111 -1 +116 -1 +121 -1 +126 -1 +146 1 +J78 4 +41 -1 +86 -1 +91 -1 +147 1 +J79 3 +81 -1 +96 -1 +149 1 +J80 9 +1 -1 +11 -1 +46 -1 +71 -1 +76 -1 +91 -1 +96 -1 +101 -1 +150 1 +J81 15 +16 -1 +21 -1 +26 -1 +31 -1 +36 -1 +41 -1 +51 -1 +56 -1 +61 -1 +66 -1 +81 -1 +111 -1 +116 -1 +121 -1 +152 1 +J82 3 +86 -1 +106 -1 +153 1 +J83 25 +1 -1 +6 -1 +11 -1 +16 -1 +26 -1 +31 -1 +41 -1 +46 -1 +51 -1 +56 -1 +61 -1 +66 -1 +71 -1 +76 -1 +81 -1 +86 -1 +91 -1 +96 -1 +101 -1 +106 -1 +111 -1 +116 -1 +121 -1 +126 -1 +155 1 +J84 3 +21 -1 +36 -1 +156 1 +J85 13 +1 -1 +11 -1 +21 -1 +31 -1 +36 -1 +41 -1 +46 -1 +71 -1 +76 -1 +86 -1 +101 -1 +126 -1 +157 1 +J86 12 +6 -1 +16 -1 +51 -1 +56 -1 +61 -1 +66 -1 +81 -1 +91 -1 +96 -1 +111 -1 +116 -1 +158 1 +J87 4 +26 -1 +106 -1 +121 -1 +159 1 +J88 21 +2 -1 +7 -1 +12 -1 +17 -1 +22 -1 +27 -1 +32 -1 +37 -1 +47 -1 +52 -1 +57 -1 +62 -1 +67 -1 +77 -1 +102 -1 +107 -1 +112 -1 +117 -1 +122 -1 +127 -1 +146 1 +J89 4 +42 -1 +87 -1 +92 -1 +147 1 +J90 3 +82 -1 +97 -1 +149 1 +J91 9 +2 -1 +12 -1 +47 -1 +72 -1 +77 -1 +92 -1 +97 -1 +102 -1 +150 1 +J92 15 +17 -1 +22 -1 +27 -1 +32 -1 +37 -1 +42 -1 +52 -1 +57 -1 +62 -1 +67 -1 +82 -1 +112 -1 +117 -1 +122 -1 +152 1 +J93 3 +87 -1 +107 -1 +153 1 +J94 25 +2 -1 +7 -1 +12 -1 +17 -1 +27 -1 +32 -1 +42 -1 +47 -1 +52 -1 +57 -1 +62 -1 +67 -1 +72 -1 +77 -1 +82 -1 +87 -1 +92 -1 +97 -1 +102 -1 +107 -1 +112 -1 +117 -1 +122 -1 +127 -1 +155 1 +J95 3 +22 -1 +37 -1 +156 1 +J96 13 +2 -1 +12 -1 +22 -1 +32 -1 +37 -1 +42 -1 +47 -1 +72 -1 +77 -1 +87 -1 +102 -1 +127 -1 +157 1 +J97 12 +7 -1 +17 -1 +52 -1 +57 -1 +62 -1 +67 -1 +82 -1 +92 -1 +97 -1 +112 -1 +117 -1 +158 1 +J98 4 +27 -1 +107 -1 +122 -1 +159 1 +J99 21 +3 -1 +8 -1 +13 -1 +18 -1 +23 -1 +28 -1 +33 -1 +38 -1 +48 -1 +53 -1 +58 -1 +63 -1 +68 -1 +78 -1 +103 -1 +108 -1 +113 -1 +118 -1 +123 -1 +128 -1 +146 1 +J100 4 +43 -1 +88 -1 +93 -1 +147 1 +J101 3 +83 -1 +98 -1 +149 1 +J102 9 +3 -1 +13 -1 +48 -1 +73 -1 +78 -1 +93 -1 +98 -1 +103 -1 +150 1 +J103 15 +18 -1 +23 -1 +28 -1 +33 -1 +38 -1 +43 -1 +53 -1 +58 -1 +63 -1 +68 -1 +83 -1 +113 -1 +118 -1 +123 -1 +152 1 +J104 3 +88 -1 +108 -1 +153 1 +J105 25 +3 -1 +8 -1 +13 -1 +18 -1 +28 -1 +33 -1 +43 -1 +48 -1 +53 -1 +58 -1 +63 -1 +68 -1 +73 -1 +78 -1 +83 -1 +88 -1 +93 -1 +98 -1 +103 -1 +108 -1 +113 -1 +118 -1 +123 -1 +128 -1 +155 1 +J106 3 +23 -1 +38 -1 +156 1 +J107 13 +3 -1 +13 -1 +23 -1 +33 -1 +38 -1 +43 -1 +48 -1 +73 -1 +78 -1 +88 -1 +103 -1 +128 -1 +157 1 +J108 12 +8 -1 +18 -1 +53 -1 +58 -1 +63 -1 +68 -1 +83 -1 +93 -1 +98 -1 +113 -1 +118 -1 +158 1 +J109 4 +28 -1 +108 -1 +123 -1 +159 1 +J110 21 +4 -1 +9 -1 +14 -1 +19 -1 +24 -1 +29 -1 +34 -1 +39 -1 +49 -1 +54 -1 +59 -1 +64 -1 +69 -1 +79 -1 +104 -1 +109 -1 +114 -1 +119 -1 +124 -1 +129 -1 +146 1 +J111 4 +44 -1 +89 -1 +94 -1 +147 1 +J112 3 +84 -1 +99 -1 +149 1 +J113 9 +4 -1 +14 -1 +49 -1 +74 -1 +79 -1 +94 -1 +99 -1 +104 -1 +150 1 +J114 15 +19 -1 +24 -1 +29 -1 +34 -1 +39 -1 +44 -1 +54 -1 +59 -1 +64 -1 +69 -1 +84 -1 +114 -1 +119 -1 +124 -1 +152 1 +J115 3 +89 -1 +109 -1 +153 1 +J116 25 +4 -1 +9 -1 +14 -1 +19 -1 +29 -1 +34 -1 +44 -1 +49 -1 +54 -1 +59 -1 +64 -1 +69 -1 +74 -1 +79 -1 +84 -1 +89 -1 +94 -1 +99 -1 +104 -1 +109 -1 +114 -1 +119 -1 +124 -1 +129 -1 +155 1 +J117 3 +24 -1 +39 -1 +156 1 +J118 13 +4 -1 +14 -1 +24 -1 +34 -1 +39 -1 +44 -1 +49 -1 +74 -1 +79 -1 +89 -1 +104 -1 +129 -1 +157 1 +J119 12 +9 -1 +19 -1 +54 -1 +59 -1 +64 -1 +69 -1 +84 -1 +94 -1 +99 -1 +114 -1 +119 -1 +158 1 +J120 4 +29 -1 +109 -1 +124 -1 +159 1 +G0 30 +130 -1 +131 1 +132 -1 +133 -1 +134 -1 +135 -1 +136 -1 +137 -1 +138 -1 +139 -1 +140 -1 +141 -1 +142 -1 +143 -1 +144 -1 +145 -1 +146 1 +147 1 +148 1 +149 1 +150 1 +151 1 +152 1 +153 1 +154 1 +155 1 +156 1 +157 1 +158 1 +159 1 diff --git a/samples/NetLinx+ERB/sample.axi.erb b/samples/NetLinx+ERB/sample.axi.erb new file mode 100644 index 00000000..92fa9b03 --- /dev/null +++ b/samples/NetLinx+ERB/sample.axi.erb @@ -0,0 +1,78 @@ +(*********************************************************** + Sample File + + For testing syntax highlighting +************************************************************) + +#if_not_defined Sample +#define Sample 1 +(***********************************************************) +(* System Type : NetLinx *) +(***********************************************************) +(* DEVICE NUMBER DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_DEVICE + +(***********************************************************) +(* CONSTANT DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_CONSTANT + +<% global_constant_justify = 20 -%> +// Video Source Select Buttons +<%= + video_sources = { + BTN_VID_FOH_PC: { btn: 11, input: :VID_SRC_FOH_PC }, + BTN_VID_STAGE_PC: { btn: 12, input: :VID_SRC_STAGE_PC }, + BTN_VID_BLURAY: { btn: 13, input: :VID_SRC_BLURAY }, + } + + print_constant_hash video_sources.remap(:btn), + justify: global_constant_justify +%> + +(***********************************************************) +(* INCLUDES GO BELOW *) +(***********************************************************) + +(***********************************************************) +(* DATA TYPE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_TYPE + +(***********************************************************) +(* VARIABLE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_VARIABLE + +(***********************************************************) +(* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *) +(***********************************************************) + +(***********************************************************) +(* STARTUP CODE GOES BELOW *) +(***********************************************************) +DEFINE_START + +(***********************************************************) +(* THE EVENTS GO BELOW *) +(***********************************************************) +DEFINE_EVENT + +// Video Source Select +<%= + justify group(video_sources.remap :input) { |name, input| + "[#{@dvTP}, #{name}] = (outputs[VID_DEST_PROJECTOR].input == #{input});" + } +%> + +(***********************************************************) +(* THE MAINLINE GOES BELOW *) +(***********************************************************) +DEFINE_PROGRAM + +(***********************************************************) +(* END OF PROGRAM *) +(* DO NOT PUT ANY CODE BELOW THIS COMMENT *) +(***********************************************************) +#end_if diff --git a/samples/NetLinx+ERB/sample.axs.erb b/samples/NetLinx+ERB/sample.axs.erb new file mode 100644 index 00000000..92fa9b03 --- /dev/null +++ b/samples/NetLinx+ERB/sample.axs.erb @@ -0,0 +1,78 @@ +(*********************************************************** + Sample File + + For testing syntax highlighting +************************************************************) + +#if_not_defined Sample +#define Sample 1 +(***********************************************************) +(* System Type : NetLinx *) +(***********************************************************) +(* DEVICE NUMBER DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_DEVICE + +(***********************************************************) +(* CONSTANT DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_CONSTANT + +<% global_constant_justify = 20 -%> +// Video Source Select Buttons +<%= + video_sources = { + BTN_VID_FOH_PC: { btn: 11, input: :VID_SRC_FOH_PC }, + BTN_VID_STAGE_PC: { btn: 12, input: :VID_SRC_STAGE_PC }, + BTN_VID_BLURAY: { btn: 13, input: :VID_SRC_BLURAY }, + } + + print_constant_hash video_sources.remap(:btn), + justify: global_constant_justify +%> + +(***********************************************************) +(* INCLUDES GO BELOW *) +(***********************************************************) + +(***********************************************************) +(* DATA TYPE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_TYPE + +(***********************************************************) +(* VARIABLE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_VARIABLE + +(***********************************************************) +(* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *) +(***********************************************************) + +(***********************************************************) +(* STARTUP CODE GOES BELOW *) +(***********************************************************) +DEFINE_START + +(***********************************************************) +(* THE EVENTS GO BELOW *) +(***********************************************************) +DEFINE_EVENT + +// Video Source Select +<%= + justify group(video_sources.remap :input) { |name, input| + "[#{@dvTP}, #{name}] = (outputs[VID_DEST_PROJECTOR].input == #{input});" + } +%> + +(***********************************************************) +(* THE MAINLINE GOES BELOW *) +(***********************************************************) +DEFINE_PROGRAM + +(***********************************************************) +(* END OF PROGRAM *) +(* DO NOT PUT ANY CODE BELOW THIS COMMENT *) +(***********************************************************) +#end_if diff --git a/samples/NetLinx/projector.axi b/samples/NetLinx/projector.axi new file mode 100644 index 00000000..f4b53e20 --- /dev/null +++ b/samples/NetLinx/projector.axi @@ -0,0 +1,132 @@ +(*********************************************************** + Mock Projector + + For testing syntax highlighting +************************************************************) + +#if_not_defined MOCK_PROJECTOR +#define MOCK_PROJECTOR 1 +(***********************************************************) +(* System Type : NetLinx *) +(***********************************************************) +(* DEVICE NUMBER DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_DEVICE + +dvPROJECTOR = 5001:1:0; + +(***********************************************************) +(* CONSTANT DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_CONSTANT + +// Power States +POWER_STATE_ON = 0; +POWER_STATE_OFF = 1; +POWER_STATE_WARMING = 2; +POWER_STATE_COOLING = 3; + +// Inputs +INPUT_HDMI = 0; +INPUT_VGA = 1; +INPUT_COMPOSITE = 2; +INPUT_SVIDEO = 3; + +(***********************************************************) +(* INCLUDES GO BELOW *) +(***********************************************************) + +#include 'amx-lib-log' + +(***********************************************************) +(* DATA TYPE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_TYPE + +struct projector_t +{ + integer power_state; + integer input; + integer lamp_hours; +} + +(***********************************************************) +(* VARIABLE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_VARIABLE + +volatile projector_t proj_1; + +(***********************************************************) +(* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *) +(***********************************************************) + +define_function initialize(projector_t self) +{ + self.power_state = POWER_STATE_OFF; + self.input = INPUT_HDMI; + self.lamp_hours = 0; +} + +define_function switch_input(projector_t self, integer input) +{ + self.input = input; + print(LOG_LEVEL_INFO, "'Projector set to input: ', itoa(input)"); +} + +(***********************************************************) +(* STARTUP CODE GOES BELOW *) +(***********************************************************) +DEFINE_START + +initialize(proj_1); + +(***********************************************************) +(* THE EVENTS GO BELOW *) +(***********************************************************) +DEFINE_EVENT + +data_event[dvPROJECTOR] +{ + string: + { + parse_message(data.text); + } + + command: {} + online: {} + offline: {} +} + +button_event[dvTP, BTN_HDMI] +button_event[dvTP, BTN_VGA] +button_event[dvTP, BTN_COMPOSITE] +button_event[dvTP, BTN_SVIDEO] +{ + push: + { + switch (button.input.channel) + { + case BTN_HDMI: switch_input(proj_1, INPUT_HDMI); + case BTN_VGA: switch_input(proj_1, INPUT_VGA); + case BTN_COMPOSITE: switch_input(proj_1, INPUT_COMPOSITE); + case BTN_SVIDEO: switch_input(proj_1, INPUT_SVIDEO); + } + } + + release: {} +} + +(***********************************************************) +(* THE MAINLINE GOES BELOW *) +(***********************************************************) +DEFINE_PROGRAM + +[dvTP, BTN_POWER_ON] = (proj_1.power_state == POWER_STATE_ON); +[dvTP, BTN_POWER_OFF] = (proj_1.power_state == POWER_STATE_OFF); + +(***********************************************************) +(* END OF PROGRAM *) +(* DO NOT PUT ANY CODE BELOW THIS COMMENT *) +(***********************************************************) +#end_if diff --git a/samples/NetLinx/volume-array.axs b/samples/NetLinx/volume-array.axs new file mode 100644 index 00000000..902b86ac --- /dev/null +++ b/samples/NetLinx/volume-array.axs @@ -0,0 +1,158 @@ +(*********************************************************** + AMX VOLUME CONTROL + VOLUME ARRAY EXAMPLE + + Website: https://sourceforge.net/projects/amx-lib-volume/ + + + This application demonstrates the use of volume control + arrays using the amx-lib-volume library. + + Volume control operation can be viewed by watching the + master's internal diagnostic output. + + I/O PORT CONNECTIONS: + Ch 1: Volume Up Button + Ch 2: Volume Down Button +************************************************************ +Copyright 2011, 2012, 2014 Alex McLain + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +************************************************************) + +PROGRAM_NAME='volume array' +(***********************************************************) +(***********************************************************) +(* System Type : NetLinx *) +(***********************************************************) +(* REV HISTORY: *) +(***********************************************************) +(* + $History: See version control repository. +*) +(***********************************************************) +(* INCLUDES GO BELOW *) +(***********************************************************) + +// Include the volume control library. +#include 'amx-lib-volume' + +(***********************************************************) +(* DEVICE NUMBER DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_DEVICE + +dvDebug = 0:0:0; // For debug output. + +dvIO = 36000:1:0; // Volume up/down button connections. + +(***********************************************************) +(* CONSTANT DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_CONSTANT + +// Volume control indexes. +MIC1 = 1; // Microphone 1. +MIC2 = 2; // Microphone 2. +MIC3 = 3; // Microphone 3. +MIC4 = 4; // Microphone 4. +WLS1 = 5; // Wireless mic 1. +WLS2 = 6; // Wireless mic 2. +IPOD = 7; // iPod input. +CD = 8; // CD player input. + +(***********************************************************) +(* DATA TYPE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_TYPE + +(***********************************************************) +(* VARIABLE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_VARIABLE + +// Define a volume control array for the input devices. +volume inputs[8]; + +(***********************************************************) +(* LATCHING DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_LATCHING + +(***********************************************************) +(* MUTUALLY EXCLUSIVE DEFINITIONS GO BELOW *) +(***********************************************************) +DEFINE_MUTUALLY_EXCLUSIVE + +(***********************************************************) +(* SUBROUTINE/FUNCTION DEFINITIONS GO BELOW *) +(***********************************************************) +(* EXAMPLE: DEFINE_FUNCTION () *) +(* EXAMPLE: DEFINE_CALL '' () *) + +(***********************************************************) +(* STARTUP CODE GOES BELOW *) +(***********************************************************) +DEFINE_START + +// Initialize the array of volume controls. +volArrayInit(inputs, 0, VOL_UNMUTED, 10000, 20000, 5); + +(***********************************************************) +(* THE EVENTS GO BELOW *) +(***********************************************************) +DEFINE_EVENT + +// Volume Up +button_event[dvIO, 1] +{ + PUSH: + { + volArrayIncrement(inputs); // Increment the volume up a step. + send_string dvDebug, "'Volume Up MIC1: ', itoa(volGetLevel(inputs[MIC1]))"; + send_string dvDebug, "'Volume Up MIC2: ', itoa(volGetLevel(inputs[MIC2]))"; + send_string dvDebug, "'Volume Up MIC3: ', itoa(volGetLevel(inputs[MIC3]))"; + send_string dvDebug, "'Volume Up MIC4: ', itoa(volGetLevel(inputs[MIC4]))"; + send_string dvDebug, "'Volume Up WLS1: ', itoa(volGetLevel(inputs[WLS1]))"; + send_string dvDebug, "'Volume Up WLS2: ', itoa(volGetLevel(inputs[WLS2]))"; + send_string dvDebug, "'Volume Up IPOD: ', itoa(volGetLevel(inputs[IPOD]))"; + send_string dvDebug, "'Volume Up CD: ', itoa(volGetLevel(inputs[CD]))"; + } +} + +// Volume Down +button_event[dvIO, 2] +{ + PUSH: + { + volArrayDecrement(inputs); // Decrement the volume down a step. + send_string dvDebug, "'Volume Dn MIC1: ', itoa(volGetLevel(inputs[MIC1]))"; + send_string dvDebug, "'Volume Dn MIC2: ', itoa(volGetLevel(inputs[MIC2]))"; + send_string dvDebug, "'Volume Dn MIC3: ', itoa(volGetLevel(inputs[MIC3]))"; + send_string dvDebug, "'Volume Dn MIC4: ', itoa(volGetLevel(inputs[MIC4]))"; + send_string dvDebug, "'Volume Dn WLS1: ', itoa(volGetLevel(inputs[WLS1]))"; + send_string dvDebug, "'Volume Dn WLS2: ', itoa(volGetLevel(inputs[WLS2]))"; + send_string dvDebug, "'Volume Dn IPOD: ', itoa(volGetLevel(inputs[IPOD]))"; + send_string dvDebug, "'Volume Dn CD: ', itoa(volGetLevel(inputs[CD]))"; + } +} + +(***********************************************************) +(* THE ACTUAL PROGRAM GOES BELOW *) +(***********************************************************) +DEFINE_PROGRAM + +(***********************************************************) +(* END OF PROGRAM *) +(* DO NOT PUT ANY CODE BELOW THIS COMMENT *) +(***********************************************************) diff --git a/samples/NewLisp/queens.nl b/samples/NewLisp/queens.nl new file mode 100644 index 00000000..61c04992 --- /dev/null +++ b/samples/NewLisp/queens.nl @@ -0,0 +1,49 @@ +#!/usr/bin/env newlisp + +(constant 'NUM 8) + +(define (intersects? q1 q2) + (or + (= (q1 0) (q2 0)) + (= (q1 1) (q2 1)) + (= (abs (- (q1 0) (q2 0))) (abs (- (q1 1) (q2 1)))))) + +(define (variant? alist) + (set 'logic nil) + (cond + ((= (length alist) 1) true) + ((> (length alist) 1) + (while (> (length alist) 1) + (set 'q (pop alist -1)) + (dolist (el alist) + (push + (intersects? + (list q (inc (length alist))) + (list el (+ 1 $idx))) + logic -1))) + (not (apply or logic))))) + +(define (fork-by-line alist) + (let (res '()) + (dolist (i (sequence 1 NUM)) + (set 'tmp alist) + (push i tmp -1) + (setf res (push tmp res -1))) + res)) + +(define (find-variants num) + (let (res '()) + (cond + ((< num 1) + (begin (println "num < 1") (exit))) + ((= num 1) + (dolist (i (sequence 1 NUM)) (push (list i) res -1))) + ((> num 1) + (dolist (v (find-variants (dec num))) + (set 'passed (filter variant? (fork-by-line v))) + (if (not (empty? passed)) (extend res passed))))) + res)) + +(set 'solutions (find-variants NUM)) +(println (length solutions)) +;;(exit) \ No newline at end of file diff --git a/samples/Nginx/example.com.vhost b/samples/Nginx/example.com.vhost new file mode 100644 index 00000000..ed0c40d9 --- /dev/null +++ b/samples/Nginx/example.com.vhost @@ -0,0 +1,242 @@ +# Move the www people to no-www +server { + listen 80; + server_name www.example.com; + return 301 $scheme://example.com$request_uri; +} + +server { + listen 80; + listen 443 ssl; + server_name example.com; + + # Certs sent to the client in SERVER HELLO are concatenated in ssl_certificate + ssl_certificate /srv/www/example.com/ssl/example.com.crt; + ssl_certificate_key /srv/www/example.com/ssl/example.com.key; + + # Allow multiple connections to use the same key data + ssl_session_timeout 5m; + ssl_session_cache shared:SSL:50m; + + # Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits + ssl_dhparam /etc/ssl/certs/dhparam.pem; + + # Intermediate configuration. tweak to your needs + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + include snippets/ssl_ciphers_intermediate.conf; + ssl_prefer_server_ciphers on; + + # HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months) + #add_header Strict-Transport-Security max-age=15768000; + + # OCSP Stapling - fetch OCSP records from URL in ssl_certificate and cache them + ssl_stapling on; + ssl_stapling_verify on; + + # Verify chain of trust of OCSP response using Root CA and Intermediate certs + ssl_trusted_certificate /srv/www/example.com/ssl/unified-ssl.crt; + resolver 8.8.8.8 8.8.4.4; + resolver_timeout 10s; + + root /srv/www/example.com/htdocs; + index index.php index.html index.htm; + charset UTF-8; + autoindex off; + + # Deny access based on HTTP method (set in HTTP level) + if ($bad_method = 1) { + return 444; + } + + # Show "Not Found" 404 errors in place of "Forbidden" 403 errors, because + # forbidden errors allow attackers potential insight into your server's + # layout and contents + error_page 403 = 404; + + # It's always good to set logs, note however you cannot turn off the error log + # setting error_log off; will simply create a file called 'off'. + access_log /var/log/nginx/example.com.access.log; + error_log /var/log/nginx/example.com.error.log; + + # Add trailing slash to */wp-admin requests. + rewrite /wp-admin$ $scheme://$host$uri/ permanent; + + location / { + # This try_files directive is used to enable pretty, SEO-friendly URLs + # and permalinks for Wordpress. Leave it *off* to start with, and then + # turn it on once you've gotten Wordpress configured! + try_files $uri $uri/ /index.php?$args; + } + + # Option to create password protected directory + # http://www.howtoforge.com/basic-http-authentication-with-nginx + # location /admin { + # auth_basic "Administrator Login"; + # auth_basic_user_file /var/www/domain.com/admin/.htpasswd; + # } + + # Do not log access to these to keep the logs cleaner + location = /favicon.ico { + log_not_found off; + access_log off; + } + + location = /apple-touch-icon.png { + log_not_found off; + access_log off; + } + + location = /apple-touch-icon-precomposed.png { + log_not_found off; + access_log off; + } + + # This block will catch static file requests, such as images, css, js + # The ?: prefix is a 'non-capturing' mark, meaning we do not require + # the pattern to be captured into $1 which should help improve performance + location ~* \.(?:3gp|gif|jpg|jpe?g|png|ico|wmv|avi|asf|asx|mpg|mpeg|mp4|pls|mp3|mid|wav|swf|flv|html|htm|txt|js|css|exe|zip|tar|rar|gz|tgz|bz2|uha|7z|doc|docx|xls|xlsx|pdf|iso|woff)$ { + # Some basic cache-control for static files to be sent to the browser + expires max; + add_header Pragma public; + add_header Cache-Control "public, must-revalidate, proxy-revalidate"; + } + + # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac). + # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban) + location ~ /\. { + access_log off; + log_not_found off; + deny all; + } + + location ~ ~$ { + access_log off; + log_not_found off; + deny all; + } + + # Common deny or internal locations, to help prevent access to areas of + # the site that should not be public + location ~* wp-admin/includes { + deny all; + } + + location ~* wp-includes/theme-compat/ { + deny all; + } + + location ~* wp-includes/js/tinymce/langs/.*\.php { + deny all; + } + + location /wp-content/ { + internal; + } + + # Deny access to any files with a .php extension in the uploads directory + # Works in sub-directory installs and also in multisite network + # Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban) + location ~* /(?:uploads|files)/.*\.php$ { + deny all; + } + + # Make sure these get through, esp with dynamic WP sitmap plugin + location = /robots.txt { + try_files $uri /index.php; + } + + location = /sitemap.xml { + try_files $uri /index.php; + } + + location = /sitemap.xml.gz { + try_files $uri /index.php; + } + + # Fix for Firefox issue with cross site font icons + location ~* \.(eot|otf|ttf|woff)$ { + add_header Access-Control-Allow-Origin *; + } + + # Redirect server error pages to the static page /50x.html + # Make sure 50x.html exists at that location + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + # Cache everything by default + set $skip_cache 0; + + # POST requests and urls with a query string should always go to PHP + if ($request_method = POST) { + set $skip_cache 1; + } + if ($query_string != "") { + set $skip_cache 1; + } + + # Don't cache uris containing the following segments + if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") { + set $skip_cache 1; + } + + # Don't use the cache for logged in users or recent commenters + if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { + set $skip_cache 1; + } + + # Pass all .php files onto a php-fpm/php-fcgi server. + location ~ [^/]\.php(/|$) { + # regex to split $uri to $fastcgi_script_name and $fastcgi_path + fastcgi_split_path_info ^(.+\.php)(/.+)$; + + # Check that the PHP script exists before passing it + try_files $fastcgi_script_name =404; + + # Bypass the fact that try_files resets $fastcgi_path_info + # see: http://trac.nginx.org/nginx/ticket/321 + set $path_info $fastcgi_path_info; + fastcgi_param PATH_INFO $path_info; + + fastcgi_pass unix:/var/run/example.com.sock; + fastcgi_index index.php; + # Uncomment if site is HTTPS + #fastcgi_param HTTPS on; + include fastcgi.conf; + + fastcgi_cache_bypass $skip_cache; + fastcgi_no_cache $skip_cache; + + fastcgi_cache WORDPRESS; + fastcgi_cache_valid 60m; + } + + location ~ /purge(/.*) { + fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1"; + } + + # Use this block if PHPMyAdmin is enabled for this domain + location /phpmyadmin { + root /usr/share/; + index index.php index.html index.htm; + + location ~ ^/phpmyadmin/(.+\.php)$ { + try_files $uri =404; + root /usr/share/; + fastcgi_pass unix:/var/run/example.com.sock; + fastcgi_index index.php; + include fastcgi.conf; + } + + location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { + root /usr/share/; + } + } + + location /phpMyAdmin { + rewrite ^/* /phpmyadmin last; + } + # End PHPMyAdmin block + +} # End of server block. diff --git a/samples/Nu/nu.script! b/samples/Nu/nu similarity index 100% rename from samples/Nu/nu.script! rename to samples/Nu/nu diff --git a/samples/OCaml/cmdliner.ml b/samples/OCaml/cmdliner.ml new file mode 100644 index 00000000..71e49e85 --- /dev/null +++ b/samples/OCaml/cmdliner.ml @@ -0,0 +1,1344 @@ +(*--------------------------------------------------------------------------- + Copyright (c) 2011 Daniel C. Bünzli. All rights reserved. + Distributed under a BSD3 license, see license at the end of the file. + %%NAME%% release %%VERSION%% + ---------------------------------------------------------------------------*) + +(* Invalid_arg strings *) + +let err_argv = "argv array must have at least one element" +let err_not_opt = "Option argument without name" +let err_not_pos = "Positional argument with a name" +let err_help s = "term error, help requested for unknown command " ^ s +let err_empty_list = "empty list" + +(* A few useful definitions. *) + +let rev_compare n n' = compare n' n +let str = Printf.sprintf +let pr = Format.fprintf +let pr_str = Format.pp_print_string +let pr_char = Format.pp_print_char +let str_of_pp pp v = pp Format.str_formatter v; Format.flush_str_formatter () +let quote s = str "`%s'" s +let alts_str ?(quoted = true) alts = + let quote = if quoted then quote else (fun s -> s) in + match alts with + | [] -> invalid_arg err_empty_list + | [a] -> (quote a) + | [a; b] -> str "either %s or %s" (quote a) (quote b) + | alts -> + let rev_alts = List.rev alts in + str "one of %s or %s" + (String.concat ", " (List.rev_map quote (List.tl rev_alts))) + (quote (List.hd rev_alts)) + +let pr_white_str spaces ppf s = (* spaces and new lines with Format's funs *) + let left = ref 0 and right = ref 0 and len = String.length s in + let flush () = + Format.pp_print_string ppf (String.sub s !left (!right - !left)); + incr right; left := !right; + in + while (!right <> len) do + if s.[!right] = '\n' then (flush (); Format.pp_force_newline ppf ()) else + if spaces && s.[!right] = ' ' then (flush (); Format.pp_print_space ppf ()) + else incr right; + done; + if !left <> len then flush () + +let pr_text = pr_white_str true +let pr_lines = pr_white_str false +let pr_to_temp_file pr v = try + let exec = Filename.basename Sys.argv.(0) in + let file, oc = Filename.open_temp_file exec "out" in + let ppf = Format.formatter_of_out_channel oc in + pr ppf v; Format.pp_print_flush ppf (); close_out oc; + at_exit (fun () -> try Sys.remove file with Sys_error e -> ()); + Some file +with Sys_error _ -> None + +(* Levenshtein distance, for making spelling suggestions in case of error. *) + +let levenshtein_distance s t = + (* As found here http://rosettacode.org/wiki/Levenshtein_distance#OCaml *) + let minimum a b c = min a (min b c) in + let m = String.length s in + let n = String.length t in + (* for all i and j, d.(i).(j) will hold the Levenshtein distance between + the first i characters of s and the first j characters of t *) + let d = Array.make_matrix (m+1) (n+1) 0 in + for i = 0 to m do d.(i).(0) <- i done; + for j = 0 to n do d.(0).(j) <- j done; + for j = 1 to n do + for i = 1 to m do + if s.[i-1] = t.[j-1] then + d.(i).(j) <- d.(i-1).(j-1) (* no operation required *) + else + d.(i).(j) <- minimum + (d.(i-1).(j) + 1) (* a deletion *) + (d.(i).(j-1) + 1) (* an insertion *) + (d.(i-1).(j-1) + 1) (* a substitution *) + done; + done; + d.(m).(n) + +let suggest s candidates = + let add (min, acc) name = + let d = levenshtein_distance s name in + if d = min then min, (name :: acc) else + if d < min then d, [name] else + min, acc + in + let dist, suggs = List.fold_left add (max_int, []) candidates in + if dist < 3 (* suggest only if not too far *) then suggs else [] + +(* Tries. This implementation also maps any non ambiguous prefix of a + key to its value. *) + +module Trie : sig + type 'a t + val empty : 'a t + val is_empty : 'a t -> bool + val add : 'a t -> string -> 'a -> 'a t + val find : 'a t -> string -> [ `Ok of 'a | `Ambiguous | `Not_found ] + val ambiguities : 'a t -> string -> string list + val of_list : (string * 'a) list -> 'a t +end = struct + module Cmap = Map.Make (Char) (* character maps. *) + type 'a value = (* type for holding a bound value. *) + | Pre of 'a (* value is bound by the prefix of a key. *) + | Key of 'a (* value is bound by an entire key. *) + | Amb (* no value bound because of ambiguous prefix. *) + | Nil (* not bound (only for the empty trie). *) + + type 'a t = { v : 'a value; succs : 'a t Cmap.t } + let empty = { v = Nil; succs = Cmap.empty } + let is_empty t = t = empty + + (* N.B. If we replace a non-ambiguous key, it becomes ambiguous but it's + not important for our use. Also the following is not tail recursive but + the stack is bounded by key length. *) + let add t k d = + let rec aux t k len i d pre_d = + if i = len then { v = Key d; succs = t.succs } else + let v = match t.v with + | Amb | Pre _ -> Amb | Key _ as v -> v | Nil -> pre_d + in + let succs = + let t' = try Cmap.find k.[i] t.succs with Not_found -> empty in + Cmap.add k.[i] (aux t' k len (i + 1) d pre_d) t.succs + in + { v; succs } + in + aux t k (String.length k) 0 d (Pre d (* allocate less *)) + + let find_node t k = + let rec aux t k len i = + if i = len then t else + aux (Cmap.find k.[i] t.succs) k len (i + 1) + in + aux t k (String.length k) 0 + + let find t k = + try match (find_node t k).v with + | Key v | Pre v -> `Ok v | Amb -> `Ambiguous | Nil -> `Not_found + with Not_found -> `Not_found + + let ambiguities t p = (* ambiguities of [p] in [t]. *) + try + let t = find_node t p in + match t.v with + | Key _ | Pre _ | Nil -> [] + | Amb -> + let add_char s c = s ^ (String.make 1 c) in + let rem_char s = String.sub s 0 ((String.length s) - 1) in + let to_list m = Cmap.fold (fun k t acc -> (k,t) :: acc) m [] in + let rec aux acc p = function + | ((c, t) :: succs) :: rest -> + let p' = add_char p c in + let acc' = match t.v with + | Pre _ | Amb -> acc + | Key _ -> (p' :: acc) + | Nil -> assert false + in + aux acc' p' ((to_list t.succs) :: succs :: rest) + | [] :: [] -> acc + | [] :: rest -> aux acc (rem_char p) rest + | [] -> assert false + in + aux [] p (to_list t.succs :: []) + with Not_found -> [] + + let of_list l = List.fold_left (fun t (s, v) -> add t s v) empty l +end + +(* The following types keep untyped information about arguments and + terms. This data is used to parse the command line, report errors + and format man page information. *) + +type absence = (* what happens if the argument is absent from the cl. *) + | Error (* an error is reported. *) + | Val of string Lazy.t (* if <> "", takes the given default value. *) + +type opt_kind = (* kinds of optional arguments. *) + | Flag (* just a flag, without value. *) + | Opt (* value is required. *) + | Opt_vopt of string (* option value is optional, takes given default. *) + +type pos_kind = (* kinds of positional arguments. *) + | All (* all positional arguments. *) + | Nth of bool * int (* specific position. *) + | Left of bool * int (* all args on the left of a position. *) + | Right of bool * int (* all args on the right of a position. *) + +type arg_info = (* information about a command line argument. *) + { id : int; (* unique id for the argument. *) + absent : absence; (* behaviour if absent. *) + doc : string; (* help. *) + docv : string; (* variable name for the argument in help. *) + docs : string; (* title of help section where listed. *) + p_kind : pos_kind; (* positional arg kind. *) + o_kind : opt_kind; (* optional arg kind. *) + o_names : string list; (* names (for opt args). *) + o_all : bool; } (* repeatable (for opt args). *) + +let arg_id = (* thread-safe UIDs, Oo.id (object end) was used before. *) + let c = ref 0 in + fun () -> + let id = !c in + incr c; if id > !c then assert false (* too many ids *) else id + +let is_opt a = a.o_names <> [] +let is_pos a = a.o_names = [] + +module Amap = Map.Make (* arg info maps. *) + (struct type t = arg_info let compare a a' = compare a.id a'.id end) + +type arg = (* unconverted argument data as found on the command line. *) + | O of (int * string * (string option)) list (* (pos, name, value) of opt. *) + | P of string list + +type cmdline = arg Amap.t (* command line, maps arg_infos to arg value. *) + +type man_block = [ (* block of manpage text. *) + | `S of string | `P of string | `I of string * string | `Noblank ] + +type term_info = + { name : string; (* name of the term. *) + version : string option; (* version (for --version). *) + tdoc : string; (* one line description of term. *) + tdocs : string; (* title of man section where listed (commands). *) + sdocs : string; (* standard options, title of section where listed. *) + man : man_block list; } (* man page text. *) + +type eval_info = (* information about the evaluation context. *) + { term : term_info * arg_info list; (* term being evaluated. *) + main : term_info * arg_info list; (* main term. *) + choices : (term_info * arg_info list) list} (* all term choices. *) + +let eval_kind ei = (* evaluation with multiple terms ? *) + if ei.choices = [] then `Simple else + if (fst ei.term) == (fst ei.main) then `M_main else `M_choice + +module Manpage = struct + type title = string * int * string * string * string + type block = man_block + type t = title * block list + + let p_indent = 7 (* paragraph indentation. *) + let l_indent = 4 (* label indentation. *) + let escape subst esc buf s = + let subst s = + let len = String.length s in + if not (len > 1 && s.[1] = ',') then (subst s) else + if len = 2 then "" else + esc s.[0] (String.sub s 2 (len - 2)) + in + Buffer.clear buf; Buffer.add_substitute buf subst s; + let s = Buffer.contents buf in (* twice for $(i,$(mname)). *) + Buffer.clear buf; Buffer.add_substitute buf subst s; + Buffer.contents buf + + let pr_tokens ?(groff = false) ppf s = + let is_space = function ' ' | '\n' | '\r' | '\t' -> true | _ -> false in + let len = String.length s in + let i = ref 0 in + try while (true) do + while (!i < len && is_space s.[!i]) do incr i done; + let start = !i in + if start = len then raise Exit; + while (!i < len && not (is_space s.[!i]) && not (s.[!i] = '-')) do + incr i + done; + pr_str ppf (String.sub s start (!i - start)); + if !i = len then raise Exit; + if s.[!i] = '-' then + (incr i; if groff then pr_str ppf "\\-" else pr_char ppf '-'); + if (!i < len && is_space s.[!i]) then + (if groff then pr_char ppf ' ' else Format.pp_print_space ppf ()) + done with Exit -> () + + (* Plain text output *) + + let plain_esc c s = match c with 'g' -> "" (* groff specific *) | _ -> s + let pr_indent ppf c = for i = 1 to c do pr_char ppf ' ' done + let pr_plain_blocks subst ppf ts = + let buf = Buffer.create 1024 in + let escape t = escape subst plain_esc buf t in + let pr_tokens ppf t = pr_tokens ppf (escape t) in + let rec aux = function + | [] -> () + | t :: ts -> + begin match t with + | `Noblank -> () + | `P s -> pr ppf "%a@[%a@]@," pr_indent p_indent pr_tokens s + | `S s -> pr ppf "@[%a@]" pr_tokens s + | `I (label, s) -> + let label = escape label in + let ll = String.length label in + pr ppf "@[%a@[%a@]" pr_indent p_indent pr_tokens label; + if s = "" then () else + if ll < l_indent then + pr ppf "%a@[%a@]@]@," pr_indent (l_indent - ll) pr_tokens s + else + pr ppf "@\n%a@[%a@]@]@," + pr_indent (p_indent + l_indent) pr_tokens s + end; + begin match ts with + | `Noblank :: ts -> aux ts + | ts -> Format.pp_print_cut ppf (); aux ts + end + in + aux ts + + let pr_plain_page subst ppf (_, text) = + pr ppf "@[%a@]" (pr_plain_blocks subst) text + + (* Groff output *) + + let groff_esc c s = match c with + | 'i' -> (str "\\fI%s\\fR" s) + | 'b' -> (str "\\fB%s\\fR" s) + | 'p' -> "" (* plain text specific *) + | _ -> s + + let pr_groff_blocks subst ppf text = + let buf = Buffer.create 1024 in + let escape t = escape subst groff_esc buf t in + let pr_tokens ppf t = pr_tokens ~groff:true ppf (escape t) in + let pr_block = function + | `P s -> pr ppf "@\n.P@\n%a" pr_tokens s + | `S s -> pr ppf "@\n.SH %a" pr_tokens s + | `Noblank -> pr ppf "@\n.sp -1" + | `I (l, s) -> pr ppf "@\n.TP 4@\n%a@\n%a" pr_tokens l pr_tokens s + in + List.iter pr_block text + + let pr_groff_page subst ppf ((n, s, a1, a2, a3), t) = + pr ppf ".\\\" Pipe this output to groff -man -Tutf8 | less@\n\ + .\\\"@\n\ + .TH \"%s\" %d \"%s\" \"%s\" \"%s\"@\n\ + .\\\" Disable hyphenantion and ragged-right@\n\ + .nh@\n\ + .ad l\ + %a@?" + n s a1 a2 a3 (pr_groff_blocks subst) t + + (* Printing to a pager *) + + let find_cmd cmds = + let test, null = match Sys.os_type with + | "Win32" -> "where", " NUL" + | _ -> "type", "/dev/null" + in + let cmd c = Sys.command (str "%s %s 1>%s 2>%s" test c null null) = 0 in + try Some (List.find cmd cmds) with Not_found -> None + + let pr_to_pager print ppf v = + let pager = + let cmds = ["less"; "more"] in + let cmds = try (Sys.getenv "PAGER") :: cmds with Not_found -> cmds in + let cmds = try (Sys.getenv "MANPAGER") :: cmds with Not_found -> cmds in + find_cmd cmds + in + match pager with + | None -> print `Plain ppf v + | Some pager -> + let cmd = match (find_cmd ["groff"; "nroff"]) with + | None -> + begin match pr_to_temp_file (print `Plain) v with + | None -> None + | Some f -> Some (str "%s < %s" pager f) + end + | Some c -> + begin match pr_to_temp_file (print `Groff) v with + | None -> None + | Some f -> + (* TODO use -Tutf8, but annoyingly maps U+002D to U+2212. *) + let xroff = if c = "groff" then c ^ " -Tascii -P-c" else c in + Some (str "%s -man < %s | %s" xroff f pager) + end + in + match cmd with + | None -> print `Plain ppf v + | Some cmd -> if (Sys.command cmd) <> 0 then print `Plain ppf v + + let rec print ?(subst = fun x -> x) fmt ppf page = match fmt with + | `Pager -> pr_to_pager (print ~subst) ppf page + | `Plain -> pr_plain_page subst ppf page + | `Groff -> pr_groff_page subst ppf page +end + +module Help = struct + let invocation ?(sep = ' ') ei = match eval_kind ei with + | `Simple | `M_main -> (fst ei.main).name + | `M_choice -> str "%s%c%s" (fst ei.main).name sep (fst ei.term).name + + let title ei = + let prog = String.capitalize (fst ei.main).name in + let name = String.uppercase (invocation ~sep:'-' ei) in + let left_footer = prog ^ match (fst ei.main).version with + | None -> "" | Some v -> str " %s" v + in + let center_header = str "%s Manual" prog in + name, 1, "", left_footer, center_header + + let name_section ei = + let tdoc d = if d = "" then "" else (str " - %s" d) in + [`S "NAME"; `P (str "%s%s" (invocation ~sep:'-' ei) + (tdoc (fst ei.term).tdoc)); ] + + let synopsis ei = match eval_kind ei with + | `M_main -> str "$(b,%s) $(i,COMMAND) ..." (invocation ei) + | `Simple | `M_choice -> + let rev_cmp (p, _) (p', _) = match p', p with (* best effort. *) + | p, All -> -1 | All, p -> 1 + | Left _, Right _ -> -1 | Right _, Left _ -> 1 + | Left (false, k), Nth (false, k') + | Nth (false, k), Nth (false, k') + | Nth (false, k), Right (false, k') -> if k <= k' then -1 else 1 + | Nth (false, k), Left (false, k') + | Right (false, k), Nth (false, k') -> if k >= k' then 1 else -1 + | Left (true, k), Nth (true, k') + | Nth (true, k), Nth (true, k') + | Nth (true, k), Right (true, k') -> if k >= k' then -1 else 1 + | Nth (true, k), Left (true, k') + | Right (true, k), Nth (true, k') -> if k <= k' then 1 else -1 + | p, p' -> compare p p' + in + let rec format_pos acc = function + | a :: al -> + if is_opt a then format_pos acc al else + let v = if a.docv = "" then "$(i,ARG)" else str "$(i,%s)" a.docv in + let v = if a.absent = Error then str "%s" v else str "[%s]" v in + let v = v ^ match a.p_kind with Nth _ -> "" | _ -> "..." in + format_pos ((a.p_kind, v) :: acc) al + | [] -> acc + in + let args = List.sort rev_cmp (format_pos [] (snd ei.term)) in + let args = String.concat " " (List.rev_map snd args) in + str "$(b,%s) [$(i,OPTION)]... %s" (invocation ei) args + + let get_synopsis_section ei = + let rec extract_synopsis syn = function + | `S _ :: _ as man -> List.rev syn, man + | block :: rest -> extract_synopsis (block :: syn) rest + | [] -> List.rev syn, [] + in + match (fst ei.term).man with + | `S "SYNOPSIS" as s :: rest -> extract_synopsis [s] rest (* user-defined *) + | man -> [ `S "SYNOPSIS"; `P (synopsis ei); ], man (* automatic *) + + let make_arg_label a = + if is_pos a then str "$(i,%s)" a.docv else + let fmt_name var = match a.o_kind with + | Flag -> fun n -> str "$(b,%s)" n + | Opt -> + fun n -> + if String.length n > 2 then str "$(b,%s)=$(i,%s)" n var else + str "$(b,%s) $(i,%s)" n var + | Opt_vopt _ -> + fun n -> + if String.length n > 2 then str "$(b,%s)[=$(i,%s)]" n var else + str "$(b,%s) [$(i,%s)]" n var + in + let var = if a.docv = "" then "VAL" else a.docv in + let names = List.sort compare a.o_names in + let s = String.concat ", " (List.rev_map (fmt_name var) names) in + s + + let make_arg_items ei = + let buf = Buffer.create 200 in + let subst_docv docv d = + let subst = function "docv" -> str "$(i,%s)" docv | s -> str "$(%s)" s in + Buffer.clear buf; Buffer.add_substitute buf subst d; Buffer.contents buf + in + let rev_cmp a' a = + let c = compare a.docs a'.docs in + if c <> 0 then c else + match is_opt a, is_opt a' with + | true, true -> + let key names = + let k = String.lowercase (List.hd (List.sort rev_compare names)) in + if k.[1] = '-' then String.sub k 1 (String.length k - 1) else k + in + compare (key a.o_names) (key a'.o_names) + | false, false -> + compare (String.lowercase a.docv) (String.lowercase a'.docv) + | true, false -> -1 + | false, true -> 1 + in + let format a = + let absent = match a.absent with + | Error -> "" + | Val v -> match Lazy.force v with "" -> "" | v -> str "absent=%s" v + in + let optvopt = match a.o_kind with + | Opt_vopt v -> str "default=%s" v + | _ -> "" + in + let argvdoc = match absent, optvopt with + | "", "" -> "" + | s, "" | "", s -> str " (%s)" s + | s, s' -> str " (%s, %s)" s s' + in + (a.docs, `I (make_arg_label a ^ argvdoc, (subst_docv a.docv a.doc))) + in + let is_arg_item a = not (is_pos a && (a.docv = "" || a.doc = "")) in + let l = List.sort rev_cmp (List.filter is_arg_item (snd ei.term)) in + List.rev_map format l + + let make_cmd_items ei = match eval_kind ei with + | `Simple | `M_choice -> [] + | `M_main -> + let add_cmd acc (ti, _) = + (ti.tdocs, `I ((str "$(b,%s)" ti.name), ti.tdoc)) :: acc + in + List.sort rev_compare (List.fold_left add_cmd [] ei.choices) + + let text ei = (* man that code is particulary unreadable. *) + let rec merge_items acc to_insert mark il = function + | `S s as sec :: ts -> + let acc = List.rev_append to_insert acc in + let acc = if mark then sec :: `Orphan_mark :: acc else sec :: acc in + let to_insert, il = List.partition (fun (n, _) -> n = s) il in + let to_insert = List.rev_map (fun (_, i) -> i) to_insert in + let to_insert = (to_insert :> [ `Orphan_mark | Manpage.block] list) in + merge_items acc to_insert (s = "DESCRIPTION") il ts + | t :: ts -> + let t = (t :> [`Orphan_mark | Manpage.block]) in + merge_items (t :: acc) to_insert mark il ts + | [] -> + let acc = List.rev_append to_insert acc in + (if mark then `Orphan_mark :: acc else acc), il + in + let rec merge_orphans acc orphans = function + | `Orphan_mark :: ts -> + let rec merge acc s = function + | [] -> (`S s) :: acc + | (s', i) :: ss -> + let i = (i :> Manpage.block) in + if s = s' then merge (i :: acc) s ss else + merge (i :: (`S s) :: acc) s' ss + in + let acc = match orphans with + | [] -> acc | (s, _) :: _ -> merge acc s orphans + in + merge_orphans acc [] ts + | (#Manpage.block as e) :: ts -> merge_orphans (e :: acc) orphans ts + | [] -> acc + in + let cmds = make_cmd_items ei in + let args = make_arg_items ei in + let cmp (s, _) (s', _) = compare s s' in + let items = List.rev (List.stable_sort cmp (List.rev_append cmds args)) in + let synopsis, man = get_synopsis_section ei in + let rev_text, orphans = + merge_items [`Orphan_mark] [] false items man + in + synopsis @ merge_orphans [] orphans rev_text + + let ei_subst ei = function + | "tname" -> (fst ei.term).name + | "mname" -> (fst ei.main).name + | s -> s + + let man ei = + title ei, (name_section ei) @ (text ei) + + let print fmt ppf ei = Manpage.print ~subst:(ei_subst ei) fmt ppf (man ei) + let pr_synopsis ppf ei = + pr ppf "@[%s@]" + (Manpage.escape (ei_subst ei) + Manpage.plain_esc (Buffer.create 100) (synopsis ei)) + + let pr_version ppf ei = match (fst ei.main).version with + | None -> assert false + | Some v -> pr ppf "@[%a@]@." pr_text v +end + +(* Errors for the command line user *) + +module Err = struct + let invalid kind s exp = str "invalid %s %s, %s" kind (quote s) exp + let invalid_val = invalid "value" + let no kind s = str "no %s %s" (quote s) kind + let not_dir s = str "%s is not a directory" (quote s) + let is_dir s = str "%s is a directory" (quote s) + let element kind s exp = str "invalid element in %s (`%s'): %s" kind s exp + let sep_miss sep s = invalid_val s (str "missing a `%c' separator" sep) + let unknown kind ?(hints = []) v = + let did_you_mean s = str ", did you mean %s ?" s in + let hints = match hints with [] -> "." | hs -> did_you_mean (alts_str hs) in + str "unknown %s %s%s" kind (quote v) hints + + let ambiguous kind s ambs = + str "%s %s ambiguous and could be %s" kind (quote s) (alts_str ambs) + + let pos_excess excess = + str "too many arguments, don't know what to do with %s" + (String.concat ", " (List.map quote excess)) + + let flag_value f v = + str "option %s is a flag, it cannot take the argument %s" + (quote f) (quote v) + + let opt_value_missing f = str "option %s needs an argument" (quote f) + let opt_parse_value f e = str "option %s: %s" (quote f) e + let opt_repeated f f' = + if f = f' then str "option %s cannot be repeated" (quote f) else + str "options %s and %s cannot be present at the same time" (quote f) + (quote f') + + let pos_parse_value a e = + if a.docv = "" then e else match a.p_kind with + | Nth _ -> str "%s argument: %s" a.docv e + | _ -> str "%s... arguments: %s" a.docv e + + let arg_missing a = + if is_opt a then + let rec long_name = function + | n :: l -> if (String.length n) > 2 || l = [] then n else long_name l + | [] -> assert false + in + str "required option %s is missing" (long_name a.o_names) + else + if a.docv = "" then str "a required argument is missing" else + str "required argument %s is missing" a.docv + + (* Error printers *) + + let print ppf ei e = pr ppf "%s: @[%a@]@." (fst ei.main).name pr_text e + let pr_backtrace err ei e bt = + let bt = + let len = String.length bt in + if len > 0 then String.sub bt 0 (len - 1) (* remove final '\n' *) else bt + in + pr err + "%s: @[internal error, uncaught exception:@\n%a@]@." + (fst ei.main).name pr_lines (str "%s\n%s" (Printexc.to_string e) bt) + + let pr_try_help ppf ei = + let exec = Help.invocation ei in + let main = (fst ei.main).name in + if exec = main then + pr ppf "@[<2>Try `%s --help' for more information.@]" exec + else + pr ppf "@[<2>Try `%s --help' or `%s --help' for more information.@]" + exec main + + let pr_usage ppf ei e = + pr ppf "@[%s: @[%a@]@,@[Usage: @[%a@]@]@,%a@]@." + (fst ei.main).name pr_text e Help.pr_synopsis ei pr_try_help ei +end + +(* Command lines. A command line stores pre-parsed information about + the command line's arguments in a more structured way. Given the + [arg_info] values mentionned in a term and Sys.argv (whithout exec + name) we parse the command line into a map of [arg_info] values to + [arg] values. This map is used by the term's closures to retrieve + and convert command line arguments (see the Arg module). *) + +module Cmdline :sig + exception Error of string + val choose_term : term_info -> (term_info * 'a) list -> string list -> + term_info * string list + val create : ?peek_opts:bool -> arg_info list -> string list -> cmdline + val opt_arg : cmdline -> arg_info -> (int * string * (string option)) list + val pos_arg : cmdline -> arg_info -> string list +end = struct + exception Error of string + + let opt_arg cl a = match try Amap.find a cl with Not_found -> assert false + with O l -> l | _ -> assert false + + let pos_arg cl a = match try Amap.find a cl with Not_found -> assert false + with P l -> l | _ -> assert false + + let choose_term ti choices = function + | [] -> ti, [] + | maybe :: args' as args -> + if String.length maybe > 1 && maybe.[0] = '-' then ti, args else + let index = + let add acc (choice, _) = Trie.add acc choice.name choice in + List.fold_left add Trie.empty choices + in + match Trie.find index maybe with + | `Ok choice -> choice, args' + | `Not_found -> + let all = Trie.ambiguities index "" in + let hints = suggest maybe all in + raise (Error (Err.unknown "command" ~hints maybe)) + | `Ambiguous -> + let ambs = List.sort compare (Trie.ambiguities index maybe) in + raise (Error (Err.ambiguous "command" maybe ambs)) + + let arg_info_indexes al = + (* from [al] returns a trie mapping the names of optional arguments to + their arg_info, a list with all arg_info for positional arguments and + a cmdline mapping each arg_info to an empty [arg]. *) + let rec aux opti posi cl = function + | a :: l -> + if is_pos a then aux opti (a :: posi) (Amap.add a (P []) cl) l else + let add t name = Trie.add t name a in + aux (List.fold_left add opti a.o_names) posi (Amap.add a (O []) cl) l + | [] -> opti, posi, cl + in + aux Trie.empty [] Amap.empty al + + let parse_opt_arg s = (* (name,value) of opt arg, assert len > 1. *) + let l = String.length s in + if s.[1] <> '-' then + if l = 2 then s, None else + String.sub s 0 2, Some (String.sub s 2 (l - 2)) + else try + let i = String.index s '=' in + String.sub s 0 i, Some (String.sub s (i + 1) (l - i - 1)) + with Not_found -> s, None + + let parse_args ~peek_opts opti cl args = + (* returns an updated [cl] cmdline according to the options found in [args] + with the trie index [opti]. Positional arguments are returned in order + in a list. *) + let rec aux k opti cl pargs = function + | [] -> cl, (List.rev pargs) + | "--" :: args -> cl, (List.rev_append pargs args) + | s :: args -> + let is_opt s = String.length s > 1 && s.[0] = '-' in + let is_short_opt s = String.length s = 2 && s.[0] = '-' in + if not (is_opt s) then aux (k+1) opti cl (s :: pargs) args else + let name, value = parse_opt_arg s in + match Trie.find opti name with + | `Ok a -> + let value, args = match value, a.o_kind with + | Some v, Flag when is_short_opt name -> None, ("-" ^ v) :: args + | Some v, _ -> value, args + | None, Flag -> value, args + | None, _ -> + match args with + | v :: rest -> if is_opt v then None, args else Some v, rest + | [] -> None, args + in + let arg = O ((k, name, value) :: opt_arg cl a) in + aux (k+1) opti (Amap.add a arg cl) pargs args + | `Not_found when peek_opts -> aux (k+1) opti cl pargs args (* skip *) + | `Not_found -> + let hints = + if String.length s <= 2 then [] else + let short_opt, long_opt = + if s.[1] <> '-' + then s, Printf.sprintf "-%s" s + else String.sub s 1 (String.length s - 1), s + in + let short_opt, _ = parse_opt_arg short_opt in + let long_opt, _ = parse_opt_arg long_opt in + let all = Trie.ambiguities opti "-" in + match List.mem short_opt all, suggest long_opt all with + | false, [] -> [] + | false, l -> l + | true, [] -> [short_opt] + | true, l -> if List.mem short_opt l then l else short_opt :: l + in + raise (Error (Err.unknown "option" ~hints name)) + | `Ambiguous -> + let ambs = List.sort compare (Trie.ambiguities opti name) in + raise (Error (Err.ambiguous "option" name ambs)) + in + aux 0 opti cl [] args + + let process_pos_args posi cl pargs = + (* returns an updated [cl] cmdline in which each positional arg mentionned + in the list index posi, is given a value according the list + of positional arguments values [pargs]. *) + if pargs = [] then cl else + let rec take n acc l = + if n = 0 then List.rev acc else + take (n - 1) (List.hd l :: acc) (List.tl l) + in + let rec aux pargs last cl max_spec = function + | a :: al -> + let arg, max_spec = match a.p_kind with + | All -> P pargs, last + | Nth (rev, k) -> + let k = if rev then last - k else k in + let max_spec = max k max_spec in + if k < 0 || k > last then P [], max_spec else + P ([List.nth pargs k]), max_spec + | Left (rev, k) -> + let k = if rev then last - k else k in + let max_spec = max k max_spec in + if k <= 0 || k > last then P [], max_spec else + P (take k [] pargs), max_spec + | Right (rev, k) -> + let k = if rev then last - k else k in + if k < 0 || k >= last then P [], last else + P (List.rev (take (last - k) [] (List.rev pargs))), last + in + aux pargs last (Amap.add a arg cl) max_spec al + | [] -> cl, max_spec + in + let last = List.length pargs - 1 in + let cl, max_spec = aux pargs last cl (-1) posi in + if last <= max_spec then cl else + let excess = List.rev (take (last - max_spec) [] (List.rev pargs)) in + raise (Error (Err.pos_excess excess)) + + let create ?(peek_opts = false) al args = + let opti, posi, cl = arg_info_indexes al in + let cl, pargs = parse_args ~peek_opts opti cl args in + if peek_opts then cl (* skip positional arguments *) else + process_pos_args posi cl pargs +end + +module Arg = struct + type 'a parser = string -> [ `Ok of 'a | `Error of string ] + type 'a printer = Format.formatter -> 'a -> unit + type 'a converter = 'a parser * 'a printer + type 'a arg_converter = (eval_info -> cmdline -> 'a) + type 'a t = arg_info list * 'a arg_converter + type info = arg_info + + let ( & ) f x = f x + let parse_error e = raise (Cmdline.Error e) + let some ?(none = "") (parse, print) = + (fun s -> match parse s with `Ok v -> `Ok (Some v) | `Error _ as e -> e), + (fun ppf v -> match v with None -> pr_str ppf none| Some v -> print ppf v) + + let info ?docs ?(docv = "") ?(doc = "") names = + let dash n = if String.length n = 1 then "-" ^ n else "--" ^ n in + let docs = match docs with + | None -> if names = [] then "ARGUMENTS" else "OPTIONS" + | Some s -> s + in + { id = arg_id (); absent = Val (Lazy.from_val ""); + doc = doc; docv = docv; docs = docs; + p_kind = All; o_kind = Flag; o_names = List.rev_map dash names; + o_all = false; } + + let flag a = + if is_pos a then invalid_arg err_not_opt else + let convert _ cl = match Cmdline.opt_arg cl a with + | [] -> false + | [_, _, None] -> true + | [_, f, Some v] -> parse_error (Err.flag_value f v) + | (_, f, _) :: (_ ,g, _) :: _ -> parse_error (Err.opt_repeated f g) + in + [a], convert + + let flag_all a = + if is_pos a then invalid_arg err_not_opt else + let a = { a with o_all = true } in + let convert _ cl = match Cmdline.opt_arg cl a with + | [] -> [] + | l -> + let truth (_, f, v) = match v with + | None -> true | Some v -> parse_error (Err.flag_value f v) + in + List.rev_map truth l + in + [a], convert + + let vflag v l = + let convert _ cl = + let rec aux fv = function + | (v, a) :: rest -> + begin match Cmdline.opt_arg cl a with + | [] -> aux fv rest + | [_, f, None] -> + begin match fv with + | None -> aux (Some (f, v)) rest + | Some (g, _) -> parse_error (Err.opt_repeated g f) + end + | [_, f, Some v] -> parse_error (Err.flag_value f v) + | (_, f, _) :: (_, g, _) :: _ -> parse_error (Err.opt_repeated g f) + end + | [] -> match fv with None -> v | Some (_, v) -> v + in + aux None l + in + let flag (_, a) = if is_pos a then invalid_arg err_not_opt else a in + List.rev_map flag l, convert + + let vflag_all v l = + let convert _ cl = + let rec aux acc = function + | (fv, a) :: rest -> + begin match Cmdline.opt_arg cl a with + | [] -> aux acc rest + | l -> + let fval (k, f, v) = match v with + | None -> (k, fv) | Some v -> parse_error (Err.flag_value f v) + in + aux (List.rev_append (List.rev_map fval l) acc) rest + end + | [] -> + if acc = [] then v else List.rev_map snd (List.sort rev_compare acc) + in + aux [] l + in + let flag (_, a) = + if is_pos a then invalid_arg err_not_opt else { a with o_all = true } + in + List.rev_map flag l, convert + + let parse_opt_value parse f v = match parse v with + | `Ok v -> v | `Error e -> parse_error (Err.opt_parse_value f e) + + let opt ?vopt (parse, print) v a = + if is_pos a then invalid_arg err_not_opt else + let a = { a with absent = Val (lazy (str_of_pp print v)); + o_kind = match vopt with + | None -> Opt | Some dv -> Opt_vopt (str_of_pp print dv) } + in + let convert _ cl = match Cmdline.opt_arg cl a with + | [] -> v + | [_, f, Some v] -> parse_opt_value parse f v + | [_, f, None] -> + begin match vopt with + | None -> parse_error (Err.opt_value_missing f) + | Some optv -> optv + end + | (_, f, _) :: (_, g, _) :: _ -> parse_error (Err.opt_repeated g f) + in + [a], convert + + let opt_all ?vopt (parse, print) v a = + if is_pos a then invalid_arg err_not_opt else + let a = { a with absent = Val (Lazy.from_val ""); o_all = true; + o_kind = match vopt with + | None -> Opt | Some dv -> Opt_vopt (str_of_pp print dv) } + in + let convert _ cl = match Cmdline.opt_arg cl a with + | [] -> v + | l -> + let parse (k, f, v) = match v with + | Some v -> (k, parse_opt_value parse f v) + | None -> match vopt with + | None -> parse_error (Err.opt_value_missing f) + | Some dv -> (k, dv) + in + List.rev_map snd (List.sort rev_compare (List.rev_map parse l)) + in + [a], convert + + (* Positional arguments *) + + let parse_pos_value parse a v = match parse v with + | `Ok v -> v | `Error e -> parse_error (Err.pos_parse_value a e) + + let pos ?(rev = false) k (parse, print) v a = + if is_opt a then invalid_arg err_not_pos else + let a = { a with p_kind = Nth (rev, k); + absent = Val (Lazy.from_val (str_of_pp print v)) } + in + let convert _ cl = match Cmdline.pos_arg cl a with + | [] -> v + | [v] -> parse_pos_value parse a v + | _ -> assert false + in + [a], convert + + let pos_list kind (parse, _) v a = + if is_opt a then invalid_arg err_not_pos else + let a = { a with p_kind = kind } in + let convert _ cl = match Cmdline.pos_arg cl a with + | [] -> v + | l -> List.rev (List.rev_map (parse_pos_value parse a) l) + in + [a], convert + + let pos_all c v a = pos_list All c v a + let pos_left ?(rev = false) k = pos_list (Left (rev, k)) + let pos_right ?(rev = false) k = pos_list (Right (rev, k)) + + (* Arguments as terms *) + + let absent_error al = List.rev_map (fun a -> { a with absent = Error }) al + let value a = a + let required (al, convert) = + let al = absent_error al in + let convert ei cl = match convert ei cl with + | Some v -> v + | None -> parse_error (Err.arg_missing (List.hd al)) + in + al, convert + + let non_empty (al, convert) = + let al = absent_error al in + let convert ei cl = match convert ei cl with + | [] -> parse_error (Err.arg_missing (List.hd al)) + | l -> l + in + al, convert + + let last (al, convert) = + let convert ei cl = match convert ei cl with + | [] -> parse_error (Err.arg_missing (List.hd al)) + | l -> List.hd (List.rev l) + in + al, convert + + (* Predefined converters. *) + + let bool = + (fun s -> try `Ok (bool_of_string s) with Invalid_argument _ -> + `Error (Err.invalid_val s (alts_str ["true"; "false"]))), + Format.pp_print_bool + + let char = + (fun s -> if String.length s = 1 then `Ok s.[0] else + `Error (Err.invalid_val s "expected a character")), + pr_char + + let parse_with t_of_str exp s = + try `Ok (t_of_str s) with Failure _ -> `Error (Err.invalid_val s exp) + + let int = + parse_with int_of_string "expected an integer", Format.pp_print_int + + let int32 = + parse_with Int32.of_string "expected a 32-bit integer", + (fun ppf -> pr ppf "%ld") + + let int64 = + parse_with Int64.of_string "expected a 64-bit integer", + (fun ppf -> pr ppf "%Ld") + + let nativeint = + parse_with Nativeint.of_string "expected a processor-native integer", + (fun ppf -> pr ppf "%nd") + + let float = + parse_with float_of_string "expected a floating point number", + Format.pp_print_float + + let string = (fun s -> `Ok s), pr_str + let enum sl = + if sl = [] then invalid_arg err_empty_list else + let sl_inv = List.rev_map (fun (s,v) -> (v,s)) sl in + let print ppf v = pr_str ppf (List.assoc v sl_inv) in + let t = Trie.of_list sl in + let parse s = match Trie.find t s with + | `Ok _ as r -> r + | `Ambiguous -> + let ambs = List.sort compare (Trie.ambiguities t s) in + `Error (Err.ambiguous "enum value" s ambs) + | `Not_found -> + let alts = List.rev (List.rev_map (fun (s, _) -> s) sl) in + `Error (Err.invalid_val s ("expected " ^ (alts_str alts))) + in + parse, print + + let file = + (fun s -> if Sys.file_exists s then `Ok s else + `Error (Err.no "file or directory" s)), + pr_str + + let dir = + (fun s -> + if Sys.file_exists s then + if Sys.is_directory s then `Ok s else `Error (Err.not_dir s) + else + `Error (Err.no "directory" s)), + pr_str + + let non_dir_file = + (fun s -> + if Sys.file_exists s then + if not (Sys.is_directory s) then `Ok s else `Error (Err.is_dir s) + else + `Error (Err.no "file" s)), + pr_str + + let split_and_parse sep parse s = + let parse sub = match parse sub with + | `Error e -> failwith e | `Ok v -> v in + let rec split accum j = + let i = try String.rindex_from s j sep with Not_found -> -1 in + if (i = -1) then + let p = String.sub s 0 (j + 1) in + if p <> "" then parse p :: accum else accum + else + let p = String.sub s (i + 1) (j - i) in + let accum' = if p <> "" then parse p :: accum else accum in + split accum' (i - 1) + in + split [] (String.length s - 1) + + let list ?(sep = ',') (parse, pr_e) = + let parse s = try `Ok (split_and_parse sep parse s) with + | Failure e -> `Error (Err.element "list" s e) + in + let rec print ppf = function + | v :: l -> pr_e ppf v; if (l <> []) then (pr_char ppf sep; print ppf l) + | [] -> () + in + parse, print + + let array ?(sep = ',') (parse, pr_e) = + let parse s = try `Ok (Array.of_list (split_and_parse sep parse s)) with + | Failure e -> `Error (Err.element "array" s e) + in + let print ppf v = + let max = Array.length v - 1 in + for i = 0 to max do pr_e ppf v.(i); if i <> max then pr_char ppf sep done + in + parse, print + + let split_left sep s = + try + let i = String.index s sep in + let len = String.length s in + Some ((String.sub s 0 i), (String.sub s (i + 1) (len - i - 1))) + with Not_found -> None + + let pair ?(sep = ',') (pa0, pr0) (pa1, pr1) = + let parser s = match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v0, v1) -> + match pa0 v0, pa1 v1 with + | `Ok v0, `Ok v1 -> `Ok (v0, v1) + | `Error e, _ | _, `Error e -> `Error (Err.element "pair" s e) + in + let printer ppf (v0, v1) = pr ppf "%a%c%a" pr0 v0 sep pr1 v1 in + parser, printer + + let t2 = pair + let t3 ?(sep = ',') (pa0, pr0) (pa1, pr1) (pa2, pr2) = + let parse s = match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v0, s) -> + match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v1, v2) -> + match pa0 v0, pa1 v1, pa2 v2 with + | `Ok v0, `Ok v1, `Ok v2 -> `Ok (v0, v1, v2) + | `Error e, _, _ | _, `Error e, _ | _, _, `Error e -> + `Error (Err.element "triple" s e) + in + let print ppf (v0, v1, v2) = + pr ppf "%a%c%a%c%a" pr0 v0 sep pr1 v1 sep pr2 v2 + in + parse, print + + let t4 ?(sep = ',') (pa0, pr0) (pa1, pr1) (pa2, pr2) (pa3, pr3) = + let parse s = match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some(v0, s) -> + match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v1, s) -> + match split_left sep s with + | None -> `Error (Err.sep_miss sep s) + | Some (v2, v3) -> + match pa0 v0, pa1 v1, pa2 v2, pa3 v3 with + | `Ok v1, `Ok v2, `Ok v3, `Ok v4 -> `Ok (v1, v2, v3, v4) + | `Error e, _, _, _ | _, `Error e, _, _ | _, _, `Error e, _ + | _, _, _, `Error e -> `Error (Err.element "quadruple" s e) + in + let print ppf (v0, v1, v2, v3) = + pr ppf "%a%c%a%c%a%c%a" pr0 v0 sep pr1 v1 sep pr2 v2 sep pr3 v3 + in + parse, print + + (* Documentation formatting helpers *) + + let doc_quote = quote + let doc_alts = alts_str + let doc_alts_enum ?quoted enum = alts_str ?quoted (List.map fst enum) +end + +module Term = struct + type info = term_info + type +'a t = arg_info list * (eval_info -> cmdline -> 'a) + type 'a result = [ + | `Ok of 'a | `Error of [`Parse | `Term | `Exn ] | `Version | `Help ] + + exception Term of + [ `Help of [`Pager | `Plain | `Groff] * string option + | `Error of bool * string ] + + let info ?(sdocs = "OPTIONS") ?(man = []) ?(docs = "COMMANDS") ?(doc = "") + ?version name = + { name = name; version = version; tdoc = doc; tdocs = docs; sdocs = sdocs; + man = man } + + let name ti = ti.name + let pure v = [], (fun _ _ -> v) + let app (al, f) (al', v) = + List.rev_append al al', + fun ei cl -> (f ei cl) (v ei cl) + + let ( $ ) = app + + type 'a ret = + [ `Help of [`Pager | `Plain | `Groff] * string option + | `Error of (bool * string) + | `Ok of 'a ] + + let ret (al, v) = + al, fun ei cl -> match v ei cl with + | `Ok v -> v + | `Error (u,e) -> raise (Term (`Error (u,e))) + | `Help h -> raise (Term (`Help h)) + + let main_name = [], (fun ei _ -> (fst ei.main).name) + let choice_names = + [], fun ei _ -> List.rev_map (fun e -> (fst e).name) ei.choices + + let man_format = + let fmts = ["pager", `Pager; "groff", `Groff; "plain", `Plain] in + let doc = "Show output in format $(docv) (pager, plain or groff)."in + Arg.(value & opt (enum fmts) `Pager & info ["man-format"] ~docv:"FMT" ~doc) + + (* Evaluation *) + + let remove_exec argv = + try List.tl (Array.to_list argv) with Failure _ -> invalid_arg err_argv + + let add_std_opts ei = + let docs = (fst ei.term).sdocs in + let args, v_lookup = + if (fst ei.main).version = None then [], None else + let (a, lookup) = + Arg.flag (Arg.info ["version"] ~docs ~doc:"Show version information.") + in + a, Some lookup + in + let args, h_lookup = + let (a, lookup) = + let fmt = Arg.enum ["pager",`Pager; "groff",`Groff; "plain",`Plain] in + let doc = "Show this help in format $(docv) (pager, plain or groff)."in + let a = Arg.info ["help"] ~docv:"FMT" ~docs ~doc in + Arg.opt ~vopt:(Some `Pager) (Arg.some fmt) None a + in + List.rev_append a args, lookup + in + h_lookup, v_lookup, + { ei with term = (fst ei.term), List.rev_append args (snd ei.term) } + + let eval_term help err ei f args = + let help_arg, vers_arg, ei = add_std_opts ei in + try + let cl = Cmdline.create (snd ei.term) args in + match help_arg ei cl, vers_arg with + | Some fmt, _ -> Help.print fmt help ei; `Help + | None, Some v_arg when v_arg ei cl -> Help.pr_version help ei; `Version + | _ -> `Ok (f ei cl) + with + | Cmdline.Error e -> Err.pr_usage err ei e; `Error `Parse + | Term (`Error (usage, e)) -> + if usage then Err.pr_usage err ei e else Err.print err ei e; + `Error `Term + | Term (`Help (fmt, cmd)) -> + let ei = match cmd with + | Some cmd -> + let cmd = + try List.find (fun (i, _) -> i.name = cmd) ei.choices + with Not_found -> invalid_arg (err_help cmd) + in + {ei with term = cmd } + | None -> { ei with term = ei.main } + in + let _, _, ei = add_std_opts ei in + Help.print fmt help ei; `Help + + let eval ?(help = Format.std_formatter) ?(err = Format.err_formatter) + ?(catch = true) ?(argv = Sys.argv) ((al, f), ti) = + let term = ti, al in + let ei = { term = term; main = term; choices = [] } in + try eval_term help err ei f (remove_exec argv) with + | e when catch -> + Err.pr_backtrace err ei e (Printexc.get_backtrace ()); `Error `Exn + + let eval_choice ?(help = Format.std_formatter) ?(err = Format.err_formatter) + ?(catch = true) ?(argv = Sys.argv) (((al, f) as t), ti) choices = + let ei_choices = List.rev_map (fun ((al, _), ti) -> ti, al) choices in + let main = (ti, al) in + let ei = { term = main; main = main; choices = ei_choices } in + try + let chosen, args = Cmdline.choose_term ti ei_choices (remove_exec argv) in + let find_chosen (_, ti) = ti = chosen in + let (al, f), _ = List.find find_chosen ((t, ti) :: choices) in + let ei = { ei with term = (chosen, al) } in + eval_term help err ei f args + with + | Cmdline.Error e -> (* may be raised by choose_term. *) + Err.pr_usage err ei e; `Error `Parse + | e when catch -> + Err.pr_backtrace err ei e (Printexc.get_backtrace ()); `Error `Exn + + let eval_peek_opts ?(version_opt = false) ?(argv = Sys.argv) (al, f) = + let args = remove_exec argv in + let version = if version_opt then Some "dummy" else None in + let term = info ?version "dummy", al in + let ei = { term = term; main = term; choices = [] } in + let help_arg, vers_arg, ei = add_std_opts ei in + try + let cl = Cmdline.create ~peek_opts:true (snd ei.term) args in + match help_arg ei cl, vers_arg with + | Some fmt, _ -> + (try (Some (f ei cl), `Help) with e -> None, `Help) + | None, Some v_arg when v_arg ei cl -> + (try (Some (f ei cl), `Version) with e -> None, `Version) + | _ -> + let v = f ei cl in + Some v, `Ok v + with + | Cmdline.Error _ -> None, (`Error `Parse) + | Term _ -> None, (`Error `Term) + | e -> None, (`Error `Exn) +end + +(*--------------------------------------------------------------------------- + Copyright (c) 2011 Daniel C. Bünzli + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + 3. Neither the name of Daniel C. Bünzli nor the names of + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------*) diff --git a/samples/OCaml/common.ml b/samples/OCaml/common.ml new file mode 100644 index 00000000..8f3a9260 --- /dev/null +++ b/samples/OCaml/common.ml @@ -0,0 +1,14 @@ +(* + * Copyright (c) 2013 Jeremy Yallop. + * + * This file is distributed under the terms of the MIT License. + * See the file LICENSE for details. + *) + +let string_of format v = + let buf = Buffer.create 100 in + let fmt = Format.formatter_of_buffer buf in begin + format fmt v; + Format.pp_print_flush fmt (); + Buffer.contents buf + end diff --git a/samples/OCaml/date.ml b/samples/OCaml/date.ml new file mode 100644 index 00000000..70f46d3c --- /dev/null +++ b/samples/OCaml/date.ml @@ -0,0 +1,40 @@ +(* + * Copyright (c) 2013 Jeremy Yallop. + * + * This file is distributed under the terms of the MIT License. + * See the file LICENSE for details. + *) + +open Ctypes +open PosixTypes +open Foreign + +type tm +let tm = structure "tm" +let (-:) ty label = field tm label ty +let tm_sec = int -: "tm_sec" (* seconds *) +let tm_min = int -: "tm_min" (* minutes *) +let tm_hour = int -: "tm_hour" (* hours *) +let tm_mday = int -: "tm_mday" (* day of the month *) +let tm_mon = int -: "tm_mon" (* month *) +let tm_year = int -: "tm_year" (* year *) +let tm_wday = int -: "tm_wday" (* day of the week *) +let tm_yday = int -: "tm_yday" (* day in the year *) +let tm_isdst = int -: "tm_isdst" (* daylight saving time *) +let () = seal (tm : tm structure typ) + +let time = foreign "time" ~check_errno:true (ptr time_t @-> returning time_t) + +let asctime = foreign "asctime" (ptr tm @-> returning string) + +let localtime = foreign "localtime" (ptr time_t @-> returning (ptr tm)) + +let () = begin + let timep = allocate_n ~count:1 time_t in + let time = time timep in + assert (time = !@timep); + let tm = localtime timep in + Printf.printf "tm.tm_mon = %d\n" (getf !@tm tm_mon); + Printf.printf "tm.tm_year = %d\n" (getf !@tm tm_year); + print_endline (asctime tm) +end diff --git a/samples/OCaml/map.ml b/samples/OCaml/map.ml new file mode 100644 index 00000000..7d65bc6b --- /dev/null +++ b/samples/OCaml/map.ml @@ -0,0 +1,337 @@ +(***********************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 1996 Institut National de Recherche en Informatique et *) +(* en Automatique. All rights reserved. This file is distributed *) +(* under the terms of the GNU Library General Public License, with *) +(* the special exception on linking described in file ../LICENSE. *) +(* *) +(***********************************************************************) + +module type OrderedType = + sig + type t + val compare: t -> t -> int + end + +module type S = + sig + type key + type +'a t + val empty: 'a t + val is_empty: 'a t -> bool + val mem: key -> 'a t -> bool + val add: key -> 'a -> 'a t -> 'a t + val singleton: key -> 'a -> 'a t + val remove: key -> 'a t -> 'a t + val merge: + (key -> 'a option -> 'b option -> 'c option) -> 'a t -> 'b t -> 'c t + val compare: ('a -> 'a -> int) -> 'a t -> 'a t -> int + val equal: ('a -> 'a -> bool) -> 'a t -> 'a t -> bool + val iter: (key -> 'a -> unit) -> 'a t -> unit + val fold: (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b + val for_all: (key -> 'a -> bool) -> 'a t -> bool + val exists: (key -> 'a -> bool) -> 'a t -> bool + val filter: (key -> 'a -> bool) -> 'a t -> 'a t + val partition: (key -> 'a -> bool) -> 'a t -> 'a t * 'a t + val cardinal: 'a t -> int + val bindings: 'a t -> (key * 'a) list + val min_binding: 'a t -> (key * 'a) + val max_binding: 'a t -> (key * 'a) + val choose: 'a t -> (key * 'a) + val split: key -> 'a t -> 'a t * 'a option * 'a t + val find: key -> 'a t -> 'a + val map: ('a -> 'b) -> 'a t -> 'b t + val mapi: (key -> 'a -> 'b) -> 'a t -> 'b t + end + +module Make(Ord: OrderedType) = struct + + type key = Ord.t + + type 'a t = + Empty + | Node of 'a t * key * 'a * 'a t * int + + let height = function + Empty -> 0 + | Node(_,_,_,_,h) -> h + + let create l x d r = + let hl = height l and hr = height r in + Node(l, x, d, r, (if hl >= hr then hl + 1 else hr + 1)) + + let singleton x d = Node(Empty, x, d, Empty, 1) + + let bal l x d r = + let hl = match l with Empty -> 0 | Node(_,_,_,_,h) -> h in + let hr = match r with Empty -> 0 | Node(_,_,_,_,h) -> h in + if hl > hr + 2 then begin + match l with + Empty -> invalid_arg "Map.bal" + | Node(ll, lv, ld, lr, _) -> + if height ll >= height lr then + create ll lv ld (create lr x d r) + else begin + match lr with + Empty -> invalid_arg "Map.bal" + | Node(lrl, lrv, lrd, lrr, _)-> + create (create ll lv ld lrl) lrv lrd (create lrr x d r) + end + end else if hr > hl + 2 then begin + match r with + Empty -> invalid_arg "Map.bal" + | Node(rl, rv, rd, rr, _) -> + if height rr >= height rl then + create (create l x d rl) rv rd rr + else begin + match rl with + Empty -> invalid_arg "Map.bal" + | Node(rll, rlv, rld, rlr, _) -> + create (create l x d rll) rlv rld (create rlr rv rd rr) + end + end else + Node(l, x, d, r, (if hl >= hr then hl + 1 else hr + 1)) + + let empty = Empty + + let is_empty = function Empty -> true | _ -> false + + let rec add x data = function + Empty -> + Node(Empty, x, data, Empty, 1) + | Node(l, v, d, r, h) -> + let c = Ord.compare x v in + if c = 0 then + Node(l, x, data, r, h) + else if c < 0 then + bal (add x data l) v d r + else + bal l v d (add x data r) + + let rec find x = function + Empty -> + raise Not_found + | Node(l, v, d, r, _) -> + let c = Ord.compare x v in + if c = 0 then d + else find x (if c < 0 then l else r) + + let rec mem x = function + Empty -> + false + | Node(l, v, d, r, _) -> + let c = Ord.compare x v in + c = 0 || mem x (if c < 0 then l else r) + + let rec min_binding = function + Empty -> raise Not_found + | Node(Empty, x, d, r, _) -> (x, d) + | Node(l, x, d, r, _) -> min_binding l + + let rec max_binding = function + Empty -> raise Not_found + | Node(l, x, d, Empty, _) -> (x, d) + | Node(l, x, d, r, _) -> max_binding r + + let rec remove_min_binding = function + Empty -> invalid_arg "Map.remove_min_elt" + | Node(Empty, x, d, r, _) -> r + | Node(l, x, d, r, _) -> bal (remove_min_binding l) x d r + + let merge t1 t2 = + match (t1, t2) with + (Empty, t) -> t + | (t, Empty) -> t + | (_, _) -> + let (x, d) = min_binding t2 in + bal t1 x d (remove_min_binding t2) + + let rec remove x = function + Empty -> + Empty + | Node(l, v, d, r, h) -> + let c = Ord.compare x v in + if c = 0 then + merge l r + else if c < 0 then + bal (remove x l) v d r + else + bal l v d (remove x r) + + let rec iter f = function + Empty -> () + | Node(l, v, d, r, _) -> + iter f l; f v d; iter f r + + let rec map f = function + Empty -> + Empty + | Node(l, v, d, r, h) -> + let l' = map f l in + let d' = f d in + let r' = map f r in + Node(l', v, d', r', h) + + let rec mapi f = function + Empty -> + Empty + | Node(l, v, d, r, h) -> + let l' = mapi f l in + let d' = f v d in + let r' = mapi f r in + Node(l', v, d', r', h) + + let rec fold f m accu = + match m with + Empty -> accu + | Node(l, v, d, r, _) -> + fold f r (f v d (fold f l accu)) + + let rec for_all p = function + Empty -> true + | Node(l, v, d, r, _) -> p v d && for_all p l && for_all p r + + let rec exists p = function + Empty -> false + | Node(l, v, d, r, _) -> p v d || exists p l || exists p r + + (* Beware: those two functions assume that the added k is *strictly* + smaller (or bigger) than all the present keys in the tree; it + does not test for equality with the current min (or max) key. + + Indeed, they are only used during the "join" operation which + respects this precondition. + *) + + let rec add_min_binding k v = function + | Empty -> singleton k v + | Node (l, x, d, r, h) -> + bal (add_min_binding k v l) x d r + + let rec add_max_binding k v = function + | Empty -> singleton k v + | Node (l, x, d, r, h) -> + bal l x d (add_max_binding k v r) + + (* Same as create and bal, but no assumptions are made on the + relative heights of l and r. *) + + let rec join l v d r = + match (l, r) with + (Empty, _) -> add_min_binding v d r + | (_, Empty) -> add_max_binding v d l + | (Node(ll, lv, ld, lr, lh), Node(rl, rv, rd, rr, rh)) -> + if lh > rh + 2 then bal ll lv ld (join lr v d r) else + if rh > lh + 2 then bal (join l v d rl) rv rd rr else + create l v d r + + (* Merge two trees l and r into one. + All elements of l must precede the elements of r. + No assumption on the heights of l and r. *) + + let concat t1 t2 = + match (t1, t2) with + (Empty, t) -> t + | (t, Empty) -> t + | (_, _) -> + let (x, d) = min_binding t2 in + join t1 x d (remove_min_binding t2) + + let concat_or_join t1 v d t2 = + match d with + | Some d -> join t1 v d t2 + | None -> concat t1 t2 + + let rec split x = function + Empty -> + (Empty, None, Empty) + | Node(l, v, d, r, _) -> + let c = Ord.compare x v in + if c = 0 then (l, Some d, r) + else if c < 0 then + let (ll, pres, rl) = split x l in (ll, pres, join rl v d r) + else + let (lr, pres, rr) = split x r in (join l v d lr, pres, rr) + + let rec merge f s1 s2 = + match (s1, s2) with + (Empty, Empty) -> Empty + | (Node (l1, v1, d1, r1, h1), _) when h1 >= height s2 -> + let (l2, d2, r2) = split v1 s2 in + concat_or_join (merge f l1 l2) v1 (f v1 (Some d1) d2) (merge f r1 r2) + | (_, Node (l2, v2, d2, r2, h2)) -> + let (l1, d1, r1) = split v2 s1 in + concat_or_join (merge f l1 l2) v2 (f v2 d1 (Some d2)) (merge f r1 r2) + | _ -> + assert false + + let rec filter p = function + Empty -> Empty + | Node(l, v, d, r, _) -> + (* call [p] in the expected left-to-right order *) + let l' = filter p l in + let pvd = p v d in + let r' = filter p r in + if pvd then join l' v d r' else concat l' r' + + let rec partition p = function + Empty -> (Empty, Empty) + | Node(l, v, d, r, _) -> + (* call [p] in the expected left-to-right order *) + let (lt, lf) = partition p l in + let pvd = p v d in + let (rt, rf) = partition p r in + if pvd + then (join lt v d rt, concat lf rf) + else (concat lt rt, join lf v d rf) + + type 'a enumeration = End | More of key * 'a * 'a t * 'a enumeration + + let rec cons_enum m e = + match m with + Empty -> e + | Node(l, v, d, r, _) -> cons_enum l (More(v, d, r, e)) + + let compare cmp m1 m2 = + let rec compare_aux e1 e2 = + match (e1, e2) with + (End, End) -> 0 + | (End, _) -> -1 + | (_, End) -> 1 + | (More(v1, d1, r1, e1), More(v2, d2, r2, e2)) -> + let c = Ord.compare v1 v2 in + if c <> 0 then c else + let c = cmp d1 d2 in + if c <> 0 then c else + compare_aux (cons_enum r1 e1) (cons_enum r2 e2) + in compare_aux (cons_enum m1 End) (cons_enum m2 End) + + let equal cmp m1 m2 = + let rec equal_aux e1 e2 = + match (e1, e2) with + (End, End) -> true + | (End, _) -> false + | (_, End) -> false + | (More(v1, d1, r1, e1), More(v2, d2, r2, e2)) -> + Ord.compare v1 v2 = 0 && cmp d1 d2 && + equal_aux (cons_enum r1 e1) (cons_enum r2 e2) + in equal_aux (cons_enum m1 End) (cons_enum m2 End) + + let rec cardinal = function + Empty -> 0 + | Node(l, _, _, r, _) -> cardinal l + 1 + cardinal r + + let rec bindings_aux accu = function + Empty -> accu + | Node(l, v, d, r, _) -> bindings_aux ((v, d) :: bindings_aux accu r) l + + let bindings s = + bindings_aux [] s + + let choose = min_binding + +end diff --git a/samples/OCaml/mirage.ml b/samples/OCaml/mirage.ml new file mode 100644 index 00000000..4878abed --- /dev/null +++ b/samples/OCaml/mirage.ml @@ -0,0 +1,2503 @@ +(* + * Copyright (c) 2013 Thomas Gazagnaire + * Copyright (c) 2013 Anil Madhavapeddy + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + *) + +open Mirage_misc + +module StringSet = struct + + include Set.Make(String) + + let of_list l = + let s = ref empty in + List.iter (fun e -> s := add e !s) l; + !s + +end + +let main_ml = ref None + +let append_main fmt = + match !main_ml with + | None -> failwith "main_ml" + | Some oc -> append oc fmt + +let newline_main () = + match !main_ml with + | None -> failwith "main_ml" + | Some oc -> newline oc + +let set_main_ml file = + let oc = open_out file in + main_ml := Some oc + +type mode = [ + | `Unix + | `Xen + | `MacOSX +] + +let string_of_mode = + function + | `Unix -> "Unix" + | `Xen -> "Xen" + | `MacOSX -> "MacOS X" + +let mode : mode ref = ref `Unix + +let set_mode m = + mode := m + +let get_mode () = + !mode + +type _ typ = + | Type: 'a -> 'a typ + | Function: 'a typ * 'b typ -> ('a -> 'b) typ + +let (@->) f t = + Function (f, t) + +module type CONFIGURABLE = sig + type t + val name: t -> string + val module_name: t -> string + val packages: t -> string list + val libraries: t -> string list + val configure: t -> unit + val clean: t -> unit + val update_path: t -> string -> t +end + + +module TODO (N: sig val name: string end) = struct + + let todo str = + failwith (Printf.sprintf "TODO: %s.%s" N.name str) + + let name _ = + todo "name" + + let module_name _ = + todo "module_name" + + let packages _ = + todo "packages" + + let libraries _ = + todo "libraries" + + let configure _ = + todo "configure" + + let clean _ = + todo "clean" + + let update_path _ = + todo "update_path" + +end + +type ('a, 'b) base = { + typ: 'a typ; + t: 'b; + m: (module CONFIGURABLE with type t = 'b); +} + +type 'a foreign = { + name: string; + ty: 'a typ; + libraries: string list; + packages: string list; +} + +type _ impl = + | Impl: ('a, 'b) base -> 'a impl (* base implementation *) + | App: ('a, 'b) app -> 'b impl (* functor application *) + | Foreign: 'a foreign -> 'a impl (* foreign functor implementation *) + +and ('a, 'b) app = { + f: ('a -> 'b) impl; (* functor *) + x: 'a impl; (* parameter *) +} + +let rec string_of_impl: type a. a impl -> string = function + | Impl { t; m = (module M) } -> Printf.sprintf "Impl (%s)" (M.module_name t) + | Foreign { name } -> Printf.sprintf "Foreign (%s)" name + | App { f; x } -> Printf.sprintf "App (%s, %s)" (string_of_impl f) (string_of_impl x) + +type 'a folder = { + fn: 'b. 'a -> 'b impl -> 'a +} + +let rec fold: type a. 'b folder -> a impl -> 'b -> 'b = + fun fn t acc -> + match t with + | Impl _ + | Foreign _ -> fn.fn acc t + | App {f; x} -> fold fn f (fn.fn acc x) + +type iterator = { + i: 'b. 'b impl -> unit +} + +let rec iter: type a. iterator -> a impl -> unit = + fun fn t -> + match t with + | Impl _ + | Foreign _ -> fn.i t + | App {f; x} -> iter fn f; iter fn x; fn.i x + +let driver_initialisation_error name = + Printf.sprintf "fail (Failure %S)" name + +module Name = struct + + let ids = Hashtbl.create 1024 + + let names = Hashtbl.create 1024 + + let create name = + let n = + try 1 + Hashtbl.find ids name + with Not_found -> 1 in + Hashtbl.replace ids name n; + Printf.sprintf "%s%d" name n + + let of_key key ~base = + find_or_create names key (fun () -> create base) + +end + +module Impl = struct + + (* get the left-most module name (ie. the name of the functor). *) + let rec functor_name: type a. a impl -> string = function + | Impl { t; m = (module M) } -> M.module_name t + | Foreign { name } -> name + | App { f } -> functor_name f + + (* return a unique variable name holding the state of the given + module construction. *) + let rec name: type a. a impl -> string = function + | Impl { t; m = (module M) } -> M.name t + | Foreign { name } -> Name.of_key ("f" ^ name) ~base:"f" + | App _ as t -> Name.of_key (module_name t) ~base:"t" + + (* return a unique module name holding the implementation of the + given module construction. *) + and module_name: type a. a impl -> string = function + | Impl { t; m = (module M) } -> M.module_name t + | Foreign { name } -> name + | App { f; x } -> + let name = match module_names f @ [module_name x] with + | [] -> assert false + | [m] -> m + | h::t -> h ^ String.concat "" (List.map (Printf.sprintf "(%s)") t) + in + Name.of_key name ~base:"M" + + and module_names: type a. a impl -> string list = + function t -> + let fn = { + fn = fun acc t -> module_name t :: acc + } in + fold fn t [] + + let rec names: type a. a impl -> string list = function + | Foreign _ -> [] + | Impl _ as t -> [name t] + | App {f=Foreign f; x} -> names x + | App {f; x} -> (names f) @ [name x] + + let configured = Hashtbl.create 31 + + let rec configure: type a. a impl -> unit = + fun t -> + let name = name t in + if not (Hashtbl.mem configured name) then ( + Hashtbl.add configured name true; + match t with + | Impl { t; m = (module M) } -> M.configure t + | Foreign _ -> () + | App {f; x} as app -> + configure_app f; + configure_app x; + iter { i=configure } app; + let name = module_name app in + let body = cofind Name.names name in + append_main "module %s = %s" name body; + newline_main (); + ) + + and configure_app: type a. a impl -> unit = function + | Impl _ + | Foreign _ -> () + | App _ as t -> + let name = name t in + configure t; + begin match names t with + | [n] -> append_main "let %s = %s" name n + | names -> + append_main "let %s () =" name; + List.iter (fun n -> + append_main " %s () >>= function" n; + append_main " | `Error e -> %s" (driver_initialisation_error n); + append_main " | `Ok %s ->" n; + ) names; + append_main " return (`Ok (%s))" (String.concat ", " names) + end; + newline_main () + + let rec packages: type a. a impl -> string list = function + | Impl { t; m = (module M) } -> M.packages t + | Foreign { packages } -> packages + | App {f; x} -> packages f @ packages x + + let rec libraries: type a. a impl -> string list = function + | Impl { t; m = (module M) } -> M.libraries t + | Foreign { libraries } -> libraries + | App {f; x} -> libraries f @ libraries x + + let rec clean: type a. a impl -> unit = function + | Impl { t; m = (module M) } -> M.clean t + | Foreign _ -> () + | App {f; x} -> clean f; clean x + + let rec update_path: type a. a impl -> string -> a impl = + fun t root -> match t with + | Impl b -> + let module M = (val b.m) in Impl { b with t = M.update_path b.t root } + | Foreign _ -> t + | App {f; x} -> App { f = update_path f root; x = update_path x root } + +end + +let impl typ t m = + Impl { typ; t; m } + +let implementation typ t m = + let typ = Type typ in + Impl { typ; t; m } + +let ($) f x = + App { f; x } + +let foreign name ?(libraries=[]) ?(packages=[]) ty = + Foreign { name; ty; libraries; packages } + +let rec typ: type a. a impl -> a typ = function + | Impl { typ } -> typ + | Foreign { ty } -> ty + | App { f } -> match typ f with Function (_, b) -> b | _ -> assert false + + +module Io_page = struct + + (** Memory allocation interface. *) + + type t = unit + + let name () = + "io_page" + + let module_name () = + "Io_page" + + let packages () = [ + "io-page" + ] + + let libraries () = + match !mode with + | `Xen -> ["io-page"] + | `Unix | `MacOSX -> ["io-page"; "io-page.unix"] + + let configure () = () + + let clean () = () + + let update_path () _ = () + +end + +type io_page = IO_PAGE + +let io_page = Type IO_PAGE + +let default_io_page: io_page impl = + impl io_page () (module Io_page) + +module Time = struct + + (** OS Timer. *) + + type t = unit + + let name () = + "time" + + let module_name () = + "OS.Time" + + let packages () = [] + + let libraries () = [] + + let configure () = () + + let clean () = () + + let update_path () _ = () + +end + +type time = TIME + +let time = Type TIME + +let default_time: time impl = + impl time () (module Time) + +module Clock = struct + + (** Clock operations. *) + + type t = unit + + let name () = + "clock" + + let module_name () = + "Clock" + + let packages () = [ + match !mode with + | `Unix | `MacOSX -> "mirage-clock-unix" + | `Xen -> "mirage-clock-xen" + ] + + let libraries () = packages () + + let configure () = + append_main "let clock () = return (`Ok ())"; + newline_main () + + let clean () = () + + let update_path () _ = () + +end + +type clock = CLOCK + +let clock = Type CLOCK + +let default_clock: clock impl = + impl clock () (module Clock) + +module Random = struct + + type t = unit + + let name () = + "random" + + let module_name () = + "Random" + + let packages () = [] + + let libraries () = [] + + let configure () = + append_main "let random () = return (`Ok ())"; + newline_main () + + let clean () = () + + let update_path () _ = () + +end + +type random = RANDOM + +let random = Type RANDOM + +let default_random: random impl = + impl random () (module Random) + +module Entropy = struct + + type t = unit + + let name _ = + "entropy" + + let module_name () = "Entropy" + + let construction () = + match !mode with + | `Unix | `MacOSX -> "Entropy_unix.Make (OS.Time)" + | `Xen -> "Entropy_xen" + + let packages () = + match !mode with + | `Unix | `MacOSX -> [ "mirage-entropy-unix" ] + | `Xen -> [ "mirage-entropy-xen" ] + + let libraries = packages + + let configure t = + append_main "module %s = %s" (module_name t) (construction t) ; + newline_main () ; + append_main "let %s () =" (name t); + append_main " %s.connect ()" (module_name t); + newline_main () + + let clean () = () + + let update_path t _ = t + +end + +type entropy = ENTROPY + +let entropy = Type ENTROPY + +let default_entropy: entropy impl = + impl entropy () (module Entropy) + +module Console = struct + + type t = string + + let name t = + Name.of_key ("console" ^ t) ~base:"console" + + let module_name t = + "Console" + + let construction () = + match !mode with + | `Unix | `MacOSX -> "Console_unix" + | `Xen -> "Console_xen" + + let packages _ = + match !mode with + | `Unix | `MacOSX -> ["mirage-console"; "mirage-unix"] + | `Xen -> ["mirage-console"; "xenstore"; "mirage-xen"; "xen-gnt"; "xen-evtchn"] + + let libraries _ = + match !mode with + | `Unix | `MacOSX -> ["mirage-console.unix"] + | `Xen -> ["mirage-console.xen"] + + let configure t = + append_main "module %s = %s" (module_name t) (construction ()); + newline_main (); + append_main "let %s () =" (name t); + append_main " %s.connect %S" (module_name t) t; + newline_main () + + let clean _ = + () + + let update_path t _ = + t + +end + +type console = CONSOLE + +let console = Type CONSOLE + +let default_console: console impl = + impl console "0" (module Console) + +let custom_console: string -> console impl = + fun str -> + impl console str (module Console) + +module Crunch = struct + + type t = string + + let name t = + Name.of_key ("static" ^ t) ~base:"static" + + let module_name t = + String.capitalize (name t) + + let packages _ = [ + "mirage-types"; + "lwt"; + "cstruct"; + "crunch"; + ] @ Io_page.packages () + + let libraries _ = [ + "mirage-types"; + "lwt"; + "cstruct"; + ] @ Io_page.libraries () + + let ml t = + Printf.sprintf "%s.ml" (name t) + + let mli t = + Printf.sprintf "%s.mli" (name t) + + let configure t = + if not (command_exists "ocaml-crunch") then + error "ocaml-crunch not found, stopping."; + let file = ml t in + if Sys.file_exists t then ( + info "%s %s" (blue_s "Generating:") (Sys.getcwd () / file); + command "ocaml-crunch -o %s %s" file t + ) else + error "The directory %s does not exist." t; + append_main "let %s () =" (name t); + append_main " %s.connect ()" (module_name t); + newline_main () + + let clean t = + remove (ml t); + remove (mli t) + + let update_path t root = + if Sys.file_exists (root / t) then + root / t + else + t + +end + +type kv_ro = KV_RO + +let kv_ro = Type KV_RO + +let crunch dirname = + impl kv_ro dirname (module Crunch) + +module Direct_kv_ro = struct + + include Crunch + + let module_name t = + match !mode with + | `Xen -> Crunch.module_name t + | `Unix | `MacOSX -> "Kvro_fs_unix" + + let packages t = + match !mode with + | `Xen -> Crunch.packages t + | `Unix | `MacOSX -> "mirage-fs-unix" :: Crunch.packages t + + let libraries t = + match !mode with + | `Xen -> Crunch.libraries t + | `Unix | `MacOSX -> "mirage-fs-unix" :: Crunch.libraries t + + let configure t = + match !mode with + | `Xen -> Crunch.configure t + | `Unix | `MacOSX -> + append_main "let %s () =" (name t); + append_main " Kvro_fs_unix.connect %S" t + +end + +let direct_kv_ro dirname = + impl kv_ro dirname (module Direct_kv_ro) + +module Block = struct + + type t = string + + let name t = + Name.of_key ("block" ^ t) ~base:"block" + + let module_name _ = + "Block" + + let packages _ = [ + match !mode with + | `Unix | `MacOSX -> "mirage-block-unix" + | `Xen -> "mirage-block-xen" + ] + + let libraries _ = [ + match !mode with + | `Unix | `MacOSX -> "mirage-block-unix" + | `Xen -> "mirage-block-xen.front" + ] + + let configure t = + append_main "let %s () =" (name t); + append_main " %s.connect %S" (module_name t) t; + newline_main () + + let clean t = + () + + let update_path t root = + if Sys.file_exists (root / t) then + root / t + else + t + +end + +type block = BLOCK + +let block = Type BLOCK + +let block_of_file filename = + impl block filename (module Block) + +module Fat = struct + + type t = { + io_page: io_page impl; + block : block impl; + } + + let name t = + let key = "fat" ^ Impl.name t.io_page ^ Impl.name t.block in + Name.of_key key ~base:"fat" + + let module_name t = + String.capitalize (name t) + + let packages t = + "fat-filesystem" + :: Impl.packages t.io_page + @ Impl.packages t.block + + let libraries t = + "fat-filesystem" + :: Impl.libraries t.io_page + @ Impl.libraries t.block + + let configure t = + Impl.configure t.io_page; + Impl.configure t.block; + append_main "module %s = Fat.Fs.Make(%s)(%s)" + (module_name t) + (Impl.module_name t.block) + (Impl.module_name t.io_page); + newline_main (); + let name = name t in + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.block); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok dev -> %s.connect dev" (module_name t); + newline_main () + + let clean t = + Impl.clean t.block; + Impl.clean t.io_page + + let update_path t root = + { io_page = Impl.update_path t.io_page root; + block = Impl.update_path t.block root; + } + +end + +type fs = FS + +let fs = Type FS + +let fat ?(io_page=default_io_page) block: fs impl = + let t = { Fat.block; io_page } in + impl fs t (module Fat) + +(* This would deserve to be in its own lib. *) +let kv_ro_of_fs x: kv_ro impl = + let dummy_fat = fat (block_of_file "xx") in + let libraries = Impl.libraries dummy_fat in + let packages = Impl.packages dummy_fat in + let fn = foreign "Fat.KV_RO.Make" ~libraries ~packages (fs @-> kv_ro) in + fn $ x + +module Fat_of_files = struct + + type t = { + dir : string option; + regexp: string; + } + + let name t = + Name.of_key + ("fat" ^ (match t.dir with None -> "." | Some d -> d) ^ ":" ^ t.regexp) + ~base:"fat" + + let module_name t = + String.capitalize (name t) + + let block_file t = + name t ^ ".img" + + let block t = + block_of_file (block_file t) + + let packages t = + Impl.packages (fat (block t)) + + let libraries t = + Impl.libraries (fat (block t)) + + let configure t = + let fat = fat (block t) in + Impl.configure fat; + append_main "module %s = %s" (module_name t) (Impl.module_name fat); + append_main "let %s = %s" (name t) (Impl.name fat); + newline_main (); + let file = Printf.sprintf "make-%s-image.sh" (name t) in + let oc = open_out file in + append oc "#!/bin/sh"; + append oc ""; + append oc "echo This uses the 'fat' command-line tool to build a simple FAT"; + append oc "echo filesystem image."; + append oc ""; + append oc "FAT=$(which fat)"; + append oc "if [ ! -x \"${FAT}\" ]; then"; + append oc " echo I couldn\\'t find the 'fat' command-line tool."; + append oc " echo Try running 'opam install fat-filesystem'"; + append oc " exit 1"; + append oc "fi"; + append oc ""; + append oc "IMG=$(pwd)/%s" (block_file t); + append oc "rm -f ${IMG}"; + (match t.dir with None -> () | Some d -> append oc "cd %s/" d); + append oc "SIZE=$(du -s . | cut -f 1)"; + append oc "${FAT} create ${IMG} ${SIZE}KiB"; + append oc "${FAT} add ${IMG} %s" t.regexp; + append oc "echo Created '%s'" (block_file t); + + close_out oc; + Unix.chmod file 0o755; + command "./make-%s-image.sh" (name t) + + let clean t = + command "rm -f make-%s-image.sh %s" (name t) (block_file t); + Impl.clean (block t) + + let update_path t root = + match t.dir with + | None -> t + | Some d -> { t with dir = Some (root / d) } + +end + +let fat_of_files: ?dir:string -> ?regexp:string -> unit -> fs impl = + fun ?dir ?regexp () -> + let regexp = match regexp with + | None -> "*" + | Some r -> r in + impl fs { Fat_of_files.dir; regexp } (module Fat_of_files) + +type network_config = Tap0 | Custom of string + +module Network = struct + + type t = network_config + + let name t = + "net_" ^ match t with + | Tap0 -> "tap0" + | Custom s -> s + + let module_name _ = + "Netif" + + let packages t = + match !mode with + | `Unix -> ["mirage-net-unix"] + | `MacOSX -> ["mirage-net-macosx"] + | `Xen -> ["mirage-net-xen"] + + let libraries t = + packages t + + let configure t = + append_main "let %s () =" (name t); + append_main " %s.connect %S" + (module_name t) + (match t with Tap0 -> "tap0" | Custom s -> s); + newline_main () + + let clean _ = + () + + let update_path t _ = + t + +end + +type network = NETWORK + +let network = Type NETWORK + +let tap0 = + impl network Tap0 (module Network) + +let netif dev = + impl network (Custom dev) (module Network) + +module Ethif = struct + + type t = network impl + + let name t = + Name.of_key ("ethif" ^ Impl.name t) ~base:"ethif" + + let module_name t = + String.capitalize (name t) + + let packages t = + Impl.packages t @ ["tcpip"] + + let libraries t = + Impl.libraries t @ + match !mode with + | `Unix | `MacOSX -> [ "tcpip.ethif-unix" ] + | `Xen -> [ "tcpip.ethif" ] + + let configure t = + let name = name t in + Impl.configure t; + append_main "module %s = Ethif.Make(%s)" (module_name t) (Impl.module_name t); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok eth -> %s.connect eth" (module_name t); + newline_main () + + let clean t = + Impl.clean t + + let update_path t root = + Impl.update_path t root + +end + +type ethernet = ETHERNET + +let ethernet = Type ETHERNET + +let etif network = + impl ethernet network (module Ethif) + +type ('ipaddr, 'prefix) ip_config = { + address: 'ipaddr; + netmask: 'prefix; + gateways: 'ipaddr list; +} + +type ipv4_config = (Ipaddr.V4.t, Ipaddr.V4.t) ip_config + +let meta_ipv4_config t = + Printf.sprintf "(Ipaddr.V4.of_string_exn %S, Ipaddr.V4.of_string_exn %S, [%s])" + (Ipaddr.V4.to_string t.address) + (Ipaddr.V4.to_string t.netmask) + (String.concat "; " + (List.map (Printf.sprintf "Ipaddr.V4.of_string_exn %S") + (List.map Ipaddr.V4.to_string t.gateways))) + +module IPV4 = struct + + type t = { + ethernet: ethernet impl; + config : ipv4_config; + } + (* XXX: should the type if ipv4.id be ipv4.t ? + N.connect ethif |> N.set_ip up *) + + let name t = + let key = "ipv4" ^ Impl.name t.ethernet ^ meta_ipv4_config t.config in + Name.of_key key ~base:"ipv4" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" :: Impl.packages t.ethernet + + let libraries t = + (match !mode with + | `Unix | `MacOSX -> [ "tcpip.ipv4-unix" ] + | `Xen -> [ "tcpip.ipv4" ]) + @ Impl.libraries t.ethernet + + let configure t = + let name = name t in + let mname = module_name t in + Impl.configure t.ethernet; + append_main "module %s = Ipv4.Make(%s)" + (module_name t) (Impl.module_name t.ethernet); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.ethernet); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok eth ->"; + append_main " %s.connect eth >>= function" mname; + append_main " | `Error _ -> %s" (driver_initialisation_error "IPV4"); + append_main " | `Ok ip ->"; + append_main " let i = Ipaddr.V4.of_string_exn in"; + append_main " %s.set_ip ip (i %S) >>= fun () ->" + mname (Ipaddr.V4.to_string t.config.address); + append_main " %s.set_ip_netmask ip (i %S) >>= fun () ->" + mname (Ipaddr.V4.to_string t.config.netmask); + append_main " %s.set_ip_gateways ip [%s] >>= fun () ->" + mname + (String.concat "; " + (List.map + (fun n -> Printf.sprintf "(i %S)" (Ipaddr.V4.to_string n)) + t.config.gateways)); + append_main " return (`Ok ip)"; + newline_main () + + let clean t = + Impl.clean t.ethernet + + let update_path t root = + { t with ethernet = Impl.update_path t.ethernet root } + +end + +type ipv6_config = (Ipaddr.V6.t, Ipaddr.V6.Prefix.t list) ip_config + +let meta_ipv6_config t = + Printf.sprintf "(Ipaddr.V6.of_string_exn %S, [%s], [%s])" + (Ipaddr.V6.to_string t.address) + (String.concat "; " + (List.map (Printf.sprintf "Ipaddr.V6.Prefix.of_string_exn %S") + (List.map Ipaddr.V6.Prefix.to_string t.netmask))) + (String.concat "; " + (List.map (Printf.sprintf "Ipaddr.V6.of_string_exn %S") + (List.map Ipaddr.V6.to_string t.gateways))) + +module IPV6 = struct + + type t = { + time : time impl; + clock : clock impl; + ethernet: ethernet impl; + config : ipv6_config; + } + (* XXX: should the type if ipv4.id be ipv4.t ? + N.connect ethif |> N.set_ip up *) + + let name t = + let key = "ipv6" ^ Impl.name t.time ^ Impl.name t.clock ^ Impl.name t.ethernet ^ meta_ipv6_config t.config in + Name.of_key key ~base:"ipv6" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" :: Impl.packages t.time @ Impl.packages t.clock @ Impl.packages t.ethernet + + let libraries t = + (match !mode with + | `Unix | `MacOSX -> [ "tcpip.ipv6-unix" ] + | `Xen -> [ "tcpip.ipv6" ]) + @ Impl.libraries t.time @ Impl.libraries t.clock @ Impl.libraries t.ethernet + + let configure t = + let name = name t in + let mname = module_name t in + Impl.configure t.ethernet; + append_main "module %s = Ipv6.Make(%s)(%s)(%s)" + (module_name t) (Impl.module_name t.ethernet) (Impl.module_name t.time) (Impl.module_name t.clock); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.ethernet); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok eth ->"; + append_main " %s.connect eth >>= function" mname; + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok ip ->"; + append_main " let i = Ipaddr.V6.of_string_exn in"; + append_main " %s.set_ip ip (i %S) >>= fun () ->" + mname (Ipaddr.V6.to_string t.config.address); + List.iter begin fun netmask -> + append_main " %s.set_ip_netmask ip (i %S) >>= fun () ->" + mname (Ipaddr.V6.Prefix.to_string netmask) + end t.config.netmask; + append_main " %s.set_ip_gateways ip [%s] >>= fun () ->" + mname + (String.concat "; " + (List.map + (fun n -> Printf.sprintf "(i %S)" (Ipaddr.V6.to_string n)) + t.config.gateways)); + append_main " return (`Ok ip)"; + newline_main () + + let clean t = + Impl.clean t.time; + Impl.clean t.clock; + Impl.clean t.ethernet + + let update_path t root = + { t with + time = Impl.update_path t.time root; + clock = Impl.update_path t.clock root; + ethernet = Impl.update_path t.ethernet root } + +end + +type v4 +type v6 + +type 'a ip = IP + +let ip = Type IP + +type ipv4 = v4 ip +type ipv6 = v6 ip + +let ipv4 : ipv4 typ = ip +let ipv6 : ipv6 typ = ip + +let create_ipv4 net config = + let etif = etif net in + let t = { + IPV4.ethernet = etif; + config } in + impl ipv4 t (module IPV4) + +let default_ipv4_conf = + let i = Ipaddr.V4.of_string_exn in + { + address = i "10.0.0.2"; + netmask = i "255.255.255.0"; + gateways = [i "10.0.0.1"]; + } + +let default_ipv4 net = + create_ipv4 net default_ipv4_conf + +let create_ipv6 + ?(time = default_time) + ?(clock = default_clock) + net config = + let etif = etif net in + let t = { + IPV6.ethernet = etif; + time; clock; + config + } in + impl ipv6 t (module IPV6) + +module UDP_direct (V : sig type t end) = struct + + type t = V.t ip impl + + let name t = + Name.of_key ("udp" ^ Impl.name t) ~base:"udp" + + let module_name t = + String.capitalize (name t) + + let packages t = + Impl.packages t @ [ "tcpip" ] + + let libraries t = + Impl.libraries t @ [ "tcpip.udp" ] + + let configure t = + let name = name t in + Impl.configure t; + append_main "module %s = Udp.Make(%s)" (module_name t) (Impl.module_name t); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t); + append_main " | `Error _ -> %s" (driver_initialisation_error name); + append_main " | `Ok ip -> %s.connect ip" (module_name t); + newline_main () + + let clean t = + Impl.clean t + + let update_path t root = + Impl.update_path t root + +end + +module UDPV4_socket = struct + + type t = Ipaddr.V4.t option + + let name _ = "udpv4_socket" + + let module_name _ = "Udpv4_socket" + + let packages t = [ "tcpip" ] + + let libraries t = + match !mode with + | `Unix | `MacOSX -> [ "tcpip.udpv4-socket" ] + | `Xen -> failwith "No socket implementation available for Xen" + + let configure t = + append_main "let %s () =" (name t); + let ip = match t with + | None -> "None" + | Some ip -> + Printf.sprintf "Some (Ipaddr.V4.of_string_exn %s)" (Ipaddr.V4.to_string ip) + in + append_main " %s.connect %S" (module_name t) ip; + newline_main () + + let clean t = + () + + let update_path t root = + t + +end + +type 'a udp = UDP + +type udpv4 = v4 udp +type udpv6 = v6 udp + +let udp = Type UDP +let udpv4 : udpv4 typ = udp +let udpv6 : udpv6 typ = udp + +let direct_udp (type v) (ip : v ip impl) = + impl udp ip (module UDP_direct (struct type t = v end)) + +let socket_udpv4 ip = + impl udpv4 ip (module UDPV4_socket) + +module TCP_direct (V : sig type t end) = struct + + type t = { + clock : clock impl; + time : time impl; + ip : V.t ip impl; + random: random impl; + } + + let name t = + let key = "tcp" + ^ Impl.name t.clock + ^ Impl.name t.time + ^ Impl.name t.ip in + Name.of_key key ~base:"tcp" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" + :: Impl.packages t.clock + @ Impl.packages t.time + @ Impl.packages t.ip + @ Impl.packages t.random + + let libraries t = + "tcpip.tcp" + :: Impl.libraries t.clock + @ Impl.libraries t.time + @ Impl.libraries t.ip + @ Impl.libraries t.random + + let configure t = + let name = name t in + Impl.configure t.clock; + Impl.configure t.time; + Impl.configure t.ip; + Impl.configure t.random; + append_main "module %s = Tcp.Flow.Make(%s)(%s)(%s)(%s)" + (module_name t) + (Impl.module_name t.ip) + (Impl.module_name t.time) + (Impl.module_name t.clock) + (Impl.module_name t.random); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.ip); + append_main " | `Error _ -> %s" (driver_initialisation_error (Impl.name t.ip)); + append_main " | `Ok ip -> %s.connect ip" (module_name t); + newline_main () + + let clean t = + Impl.clean t.clock; + Impl.clean t.time; + Impl.clean t.ip; + Impl.clean t.random + + let update_path t root = + { clock = Impl.update_path t.clock root; + ip = Impl.update_path t.ip root; + time = Impl.update_path t.time root; + random = Impl.update_path t.random root; + } + +end + +module TCPV4_socket = struct + + type t = Ipaddr.V4.t option + + let name _ = "tcpv4_socket" + + let module_name _ = "Tcpv4_socket" + + let packages t = [ "tcpip" ] + + let libraries t = + match !mode with + | `Unix | `MacOSX -> [ "tcpip.tcpv4-socket" ] + | `Xen -> failwith "No socket implementation available for Xen" + + let configure t = + append_main "let %s () =" (name t); + let ip = match t with + | None -> "None" + | Some ip -> + Printf.sprintf "Some (Ipaddr.V4.of_string_exn %s)" (Ipaddr.V4.to_string ip) + in + append_main " %s.connect %S" (module_name t) ip; + newline_main () + + let clean t = + () + + let update_path t root = + t + +end + +type 'a tcp = TCP + +type tcpv4 = v4 tcp +type tcpv6 = v6 tcp + +let tcp = Type TCP +let tcpv4 : tcpv4 typ = tcp +let tcpv6 : tcpv6 typ = tcp + +let direct_tcp (type v) + ?(clock=default_clock) ?(random=default_random) ?(time=default_time) (ip : v ip impl) = + let module TCP_direct = TCP_direct (struct type t = v end) in + let t = { TCP_direct.clock; random; time; ip } in + impl tcp t (module TCP_direct) + +let socket_tcpv4 ip = + impl tcpv4 ip (module TCPV4_socket) + +module STACKV4_direct = struct + + type t = { + clock : clock impl; + time : time impl; + console: console impl; + network: network impl; + random : random impl; + config : [`DHCP | `IPV4 of ipv4_config]; + } + + let name t = + let key = "stackv4" + ^ Impl.name t.clock + ^ Impl.name t.time + ^ Impl.name t.console + ^ Impl.name t.network + ^ Impl.name t.random + ^ match t.config with + | `DHCP -> "dhcp" + | `IPV4 i -> meta_ipv4_config i in + Name.of_key key ~base:"stackv4" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" + :: Impl.packages t.clock + @ Impl.packages t.time + @ Impl.packages t.console + @ Impl.packages t.network + @ Impl.packages t.random + + let libraries t = + "tcpip.stack-direct" + :: "mirage.runtime" + :: Impl.libraries t.clock + @ Impl.libraries t.time + @ Impl.libraries t.console + @ Impl.libraries t.network + @ Impl.libraries t.random + + let configure t = + let name = name t in + Impl.configure t.clock; + Impl.configure t.time; + Impl.configure t.console; + Impl.configure t.network; + Impl.configure t.random; + append_main "module %s = struct" (module_name t); + append_main " module E = Ethif.Make(%s)" (Impl.module_name t.network); + append_main " module I = Ipv4.Make(E)"; + append_main " module U = Udp.Make(I)"; + append_main " module T = Tcp.Flow.Make(I)(%s)(%s)(%s)" + (Impl.module_name t.time) + (Impl.module_name t.clock) + (Impl.module_name t.random); + append_main " module S = Tcpip_stack_direct.Make(%s)(%s)(%s)(%s)(E)(I)(U)(T)" + (Impl.module_name t.console) + (Impl.module_name t.time) + (Impl.module_name t.random) + (Impl.module_name t.network); + append_main " include S"; + append_main "end"; + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.console); + append_main " | `Error _ -> %s" + (driver_initialisation_error (Impl.name t.console)); + append_main " | `Ok console ->"; + append_main " %s () >>= function" (Impl.name t.network); + append_main " | `Error e ->"; + let net_init_error_msg_fn = "Mirage_runtime.string_of_network_init_error" in + append_main " fail (Failure (%s %S e))" + net_init_error_msg_fn (Impl.name t.network); + append_main " | `Ok interface ->"; + append_main " let config = {"; + append_main " V1_LWT.name = %S;" name; + append_main " console; interface;"; + begin match t.config with + | `DHCP -> append_main " mode = `DHCP;" + | `IPV4 i -> append_main " mode = `IPv4 %s;" (meta_ipv4_config i); + end; + append_main " } in"; + append_main " %s.connect config" (module_name t); + newline_main () + + let clean t = + Impl.clean t.clock; + Impl.clean t.time; + Impl.clean t.console; + Impl.clean t.network; + Impl.clean t.random + + let update_path t root = + { t with + clock = Impl.update_path t.clock root; + time = Impl.update_path t.time root; + console = Impl.update_path t.console root; + network = Impl.update_path t.network root; + random = Impl.update_path t.random root; + } + +end + +module STACKV4_socket = struct + + type t = { + console: console impl; + ipv4s : Ipaddr.V4.t list; + } + + let meta_ips ips = + String.concat "; " + (List.map (fun x -> + Printf.sprintf "Ipaddr.V4.of_string_exn %S" (Ipaddr.V4.to_string x) + ) ips) + + let name t = + let key = "stackv4" ^ Impl.name t.console ^ meta_ips t.ipv4s in + Name.of_key key ~base:"stackv4" + + let module_name t = + String.capitalize (name t) + + let packages t = + "tcpip" :: Impl.packages t.console + + let libraries t = + "tcpip.stack-socket" :: Impl.libraries t.console + + let configure t = + let name = name t in + Impl.configure t.console; + append_main "module %s = Tcpip_stack_socket.Make(%s)" + (module_name t) (Impl.module_name t.console); + newline_main (); + append_main "let %s () =" name; + append_main " %s () >>= function" (Impl.name t.console); + append_main " | `Error _ -> %s" + (driver_initialisation_error (Impl.name t.console)); + append_main " | `Ok console ->"; + append_main " let config = {"; + append_main " V1_LWT.name = %S;" name; + append_main " console; interface = [%s];" (meta_ips t.ipv4s); + append_main " mode = ();"; + append_main " } in"; + append_main " %s.connect config" (module_name t); + newline_main () + + let clean t = + Impl.clean t.console + + let update_path t root = + { t with console = Impl.update_path t.console root } + +end + +type stackv4 = STACKV4 + +let stackv4 = Type STACKV4 + +let direct_stackv4_with_dhcp + ?(clock=default_clock) + ?(random=default_random) + ?(time=default_time) + console network = + let t = { + STACKV4_direct.console; network; time; clock; random; + config = `DHCP } in + impl stackv4 t (module STACKV4_direct) + +let direct_stackv4_with_default_ipv4 + ?(clock=default_clock) + ?(random=default_random) + ?(time=default_time) + console network = + let t = { + STACKV4_direct.console; network; clock; time; random; + config = `IPV4 default_ipv4_conf; + } in + impl stackv4 t (module STACKV4_direct) + +let direct_stackv4_with_static_ipv4 + ?(clock=default_clock) + ?(random=default_random) + ?(time=default_time) + console network ipv4 = + let t = { + STACKV4_direct.console; network; clock; time; random; + config = `IPV4 ipv4; + } in + impl stackv4 t (module STACKV4_direct) + +let socket_stackv4 console ipv4s = + impl stackv4 { STACKV4_socket.console; ipv4s } (module STACKV4_socket) + +module Channel_over_TCP (V : sig type t end) = struct + + type t = V.t tcp impl + + let name t = + let key = "channel" ^ Impl.name t in + Name.of_key key ~base:"channel" + + let module_name t = + String.capitalize (name t) + + let packages _ = + [ "mirage-tcpip" ] + + let libraries _ = + [ "tcpip.channel" ] + + let configure t = + Impl.configure t; + append_main "module %s = Channel.Make(%s)" (module_name t) (Impl.module_name t); + newline_main (); + append_main "let %s () =" (name t); + append_main " %s () >>= function" (Impl.name t); + append_main " | `Error _ -> %s" (driver_initialisation_error (Impl.name t)); + append_main " | `Ok console ->"; + append_main " let flow = %s.create config in" (module_name t); + append_main " return (`Ok flow)"; + newline_main () + + let clean t = + Impl.clean t + + let update_path t root = + Impl.update_path t root + +end + +type channel = CHANNEL + +let channel = Type CHANNEL + +let channel_over_tcp (type v) (flow : v tcp impl) = + impl channel flow (module Channel_over_TCP (struct type t = v end)) + +module VCHAN_localhost = struct + + type uuid = string + type t = uuid + + let name t = + let key = "in_memory" in + Name.of_key key ~base:"vchan" + + let module_name t = + String.capitalize (name t) + + let packages t = + [ "mirage-conduit" ] + + let libraries t = + [ "conduit.mirage" ] + + let configure t = + append_main "module %s = Conduit_localhost" (module_name t); + newline_main (); + append_main "let %s = %s.register %S" (name t) (module_name t) t; + newline_main () + + let clean t = () + + let update_path t root = t + +end + +module VCHAN_xenstore = struct + + type uuid = string + type t = string + + let name t = + let key = "xen" in + Name.of_key key ~base:"vchan" + + let module_name t = + String.capitalize (name t) + + let packages t = + match !mode with + |`Xen -> [ "vchan"; "mirage-xen"; "xen-evtchn"; "xen-gnt" ] + |`Unix | `MacOSX -> [ "vchan"; "xen-evtchn"; "xen-gnt"] + (* TODO: emit a failure on MacOSX? *) + + let libraries t = + match !mode with + |`Xen -> [ "conduit.mirage-xen" ] + |`Unix | `MacOSX-> [ "vchan" ] + + let configure t = + let m = + match !mode with + |`Xen -> "Conduit_xenstore" + |`Unix | `MacOSX -> "Vchan_lwt_unix.M" + in + append_main "module %s = %s" (module_name t) m; + newline_main (); + append_main "let %s = %s.register %S" (name t) (module_name t) t; + newline_main () + + let clean t = () + + let update_path t root = t + +end + +type vchan = STACK4 + +let vchan = Type STACK4 + +let vchan_localhost ?(uuid="localhost") () = + impl vchan uuid (module VCHAN_localhost) + +let vchan_xen ?(uuid="localhost") () = + impl vchan uuid (module VCHAN_xenstore) + +let vchan_default ?uuid () = + match !mode with + | `Xen -> vchan_xen ?uuid () + | `Unix | `MacOSX -> vchan_localhost ?uuid () + +module Conduit = struct + type t = + [ `Stack of stackv4 impl * vchan impl ] + + let name t = + let key = "conduit" ^ match t with + | `Stack (s,v) -> + Printf.sprintf "%s_%s" (Impl.name s) (Impl.name v) in + Name.of_key key ~base:"conduit" + + let module_name_core t = + String.capitalize (name t) + + let module_name t = + module_name_core t + + let packages t = + [ "conduit"; "mirage-types"; "vchan" ] @ + match t with + | `Stack (s,v) -> Impl.packages s @ (Impl.packages v) + + let libraries t = + [ "conduit.mirage" ] @ + match t with + | `Stack (s,v) -> Impl.libraries s @ (Impl.libraries v) + + let configure t = + begin match t with + | `Stack (s,v) -> + Impl.configure s; + Impl.configure v; + append_main "module %s = Conduit_mirage.Make(%s)(%s)" + (module_name_core t) (Impl.module_name s) (Impl.module_name v); + end; + newline_main (); + append_main "let %s () =" (name t); + let (stack_subname, vchan_subname) = match t with + | `Stack (s,v) -> Impl.name s, Impl.name v in + + append_main " %s () >>= function" stack_subname; + append_main " | `Error _ -> %s" (driver_initialisation_error stack_subname); + append_main " | `Ok %s ->" stack_subname; + append_main " %s >>= fun %s ->" vchan_subname vchan_subname; + append_main " %s.init ~peer:%s ~stack:%s () >>= fun %s ->" + (module_name_core t) vchan_subname stack_subname (name t); + append_main " return (`Ok %s)" (name t); + newline_main () + + let clean = function + | `Stack (s,v) -> Impl.clean s; Impl.clean v + + let update_path t root = + match t with + | `Stack (s,v) -> + `Stack ((Impl.update_path s root), (Impl.update_path v root)) + +end + +type conduit = Conduit + +let conduit = Type Conduit + +let conduit_direct ?(vchan=vchan_localhost ()) stack = + impl conduit (`Stack (stack,vchan)) (module Conduit) + +type conduit_client = [ + | `TCP of Ipaddr.t * int + | `Vchan of string list +] + +type conduit_server = [ + | `TCP of [ `Port of int ] + | `Vchan of string list +] + +module Resolver_unix = struct + type t = unit + + let name t = + let key = "resolver_unix" in + Name.of_key key ~base:"resolver" + + let module_name_core t = + String.capitalize (name t) + + let module_name t = + module_name_core t + + let packages t = + match !mode with + |`Unix | `MacOSX -> [ "mirage-conduit" ] + |`Xen -> failwith "Resolver_unix not supported on Xen" + + let libraries t = + [ "conduit.mirage"; "conduit.lwt-unix" ] + + let configure t = + append_main "module %s = Resolver_lwt" (module_name t); + append_main "let %s () =" (name t); + append_main " return (`Ok Resolver_lwt_unix.system)"; + newline_main () + + let clean t = () + + let update_path t root = t + +end + +module Resolver_direct = struct + type t = + [ `DNS of stackv4 impl * Ipaddr.V4.t option * int option ] + + let name t = + let key = "resolver" ^ match t with + | `DNS (s,_,_) -> Impl.name s in + Name.of_key key ~base:"resolver" + + let module_name_core t = + String.capitalize (name t) + + let module_name t = + (module_name_core t) ^ "_res" + + let packages t = + [ "dns"; "tcpip" ] @ + match t with + | `DNS (s,_,_) -> Impl.packages s + + let libraries t = + [ "dns.mirage" ] @ + match t with + | `DNS (s,_,_) -> Impl.libraries s + + let configure t = + begin match t with + | `DNS (s,_,_) -> + Impl.configure s; + append_main "module %s = Resolver_lwt" (module_name t); + append_main "module %s_dns = Dns_resolver_mirage.Make(OS.Time)(%s)" + (module_name_core t) (Impl.module_name s); + append_main "module %s = Resolver_mirage.Make(%s_dns)" + (module_name_core t) (module_name_core t); + end; + newline_main (); + append_main "let %s () =" (name t); + let subname = match t with + | `DNS (s,_,_) -> Impl.name s in + append_main " %s () >>= function" subname; + append_main " | `Error _ -> %s" (driver_initialisation_error subname); + append_main " | `Ok %s ->" subname; + let res_ns = match t with + | `DNS (_,None,_) -> "None" + | `DNS (_,Some ns,_) -> + Printf.sprintf "Ipaddr.V4.of_string %S" (Ipaddr.V4.to_string ns) in + append_main " let ns = %s in" res_ns; + let res_ns_port = match t with + | `DNS (_,_,None) -> "None" + | `DNS (_,_,Some ns_port) -> Printf.sprintf "Some %d" ns_port in + append_main " let ns_port = %s in" res_ns_port; + append_main " let res = %s.init ?ns ?ns_port ~stack:%s () in" (module_name_core t) subname; + append_main " return (`Ok res)"; + newline_main () + + let clean = function + | `DNS (s,_,_) -> Impl.clean s + + let update_path t root = + match t with + | `DNS (s,a,b) -> `DNS (Impl.update_path s root, a, b) + +end + +type resolver = Resolver + +let resolver = Type Resolver + +let resolver_dns ?ns ?ns_port stack = + impl resolver (`DNS (stack, ns, ns_port)) (module Resolver_direct) + +let resolver_unix_system = + impl resolver () (module Resolver_unix) + +module HTTP = struct + + type t = + [ `Channel of channel impl + | `Stack of conduit_server * conduit impl ] + + let name t = + let key = "http" ^ match t with + | `Channel c -> Impl.name c + | `Stack (_, c) -> Impl.name c in + Name.of_key key ~base:"http" + + let module_name_core t = + String.capitalize (name t) + + let module_name t = + module_name_core t ^ ".Server" + + let packages t = + [ "mirage-http" ] @ + match t with + | `Channel c -> Impl.packages c + | `Stack (_, c) -> Impl.packages c + + let libraries t = + [ "mirage-http" ] @ + match t with + | `Channel c -> Impl.libraries c + | `Stack (_, c) -> Impl.libraries c + + let configure t = + begin match t with + | `Channel c -> + Impl.configure c; + append_main "module %s = HTTP.Make(%s)" (module_name_core t) (Impl.module_name c) + | `Stack (_, c) -> + Impl.configure c; + append_main "module %s = HTTP.Make(%s)" (module_name_core t) (Impl.module_name c) + end; + newline_main (); + let subname = match t with + | `Channel c -> Impl.name c + | `Stack (_,c) -> Impl.name c in + append_main "let %s () =" (name t); + append_main " %s () >>= function" subname; + append_main " | `Error _ -> %s" (driver_initialisation_error subname); + append_main " | `Ok %s ->" subname; + begin match t with + | `Channel c -> failwith "TODO" + | `Stack (m,c) -> + append_main " let listen spec ="; + append_main " let ctx = %s in" (Impl.name c); + append_main " let mode = %s in" + (match m with + |`TCP (`Port port) -> Printf.sprintf "`TCP (`Port %d)" port + |`Vchan l -> failwith "Vchan not supported yet in server" + ); + append_main " %s.serve ~ctx ~mode (%s.Server.listen spec)" (Impl.module_name c) (module_name_core t); + append_main " in"; + append_main " return (`Ok listen)"; + end; + newline_main () + + let clean = function + | `Channel c -> Impl.clean c + | `Stack (_,c) -> Impl.clean c + + let update_path t root = + match t with + | `Channel c -> `Channel (Impl.update_path c root) + | `Stack (m, c) -> `Stack (m, Impl.update_path c root) + +end + +type http = HTTP + +let http = Type HTTP + +let http_server_of_channel chan = + impl http (`Channel chan) (module HTTP) + +let http_server mode conduit = + impl http (`Stack (mode, conduit)) (module HTTP) + +type job = JOB + +let job = Type JOB + +module Job = struct + + type t = { + name: string; + impl: job impl; + } + + let create impl = + let name = Name.create "job" in + { name; impl } + + let name t = + t.name + + let module_name t = + "Job_" ^ t.name + + let packages t = + Impl.packages t.impl + + let libraries t = + Impl.libraries t.impl + + let configure t = + Impl.configure t.impl; + newline_main () + + let clean t = + Impl.clean t.impl + + let update_path t root = + { t with impl = Impl.update_path t.impl root } + +end + +module Tracing = struct + type t = { + size : int; + } + + let unix_trace_file = "trace.ctf" + + let packages _ = StringSet.singleton "mirage-profile" + + let libraries _ = + match !mode with + | `Unix | `MacOSX -> StringSet.singleton "mirage-profile.unix" + | `Xen -> StringSet.singleton "mirage-profile.xen" + + let configure t = + if Sys.command "ocamlfind query lwt.tracing 2>/dev/null" <> 0 then ( + flush stdout; + error "lwt.tracing module not found. Hint:\n\ + opam pin add lwt 'https://github.com/mirage/lwt.git#tracing'" + ); + + append_main "let () = "; + begin match !mode with + | `Unix | `MacOSX -> + append_main " let buffer = MProf_unix.mmap_buffer ~size:%d %S in" t.size unix_trace_file; + append_main " let trace_config = MProf.Trace.Control.make buffer MProf_unix.timestamper in"; + append_main " MProf.Trace.Control.start trace_config"; + | `Xen -> + append_main " let trace_pages = MProf_xen.make_shared_buffer ~size:%d in" t.size; + append_main " let buffer = trace_pages |> Io_page.to_cstruct |> Cstruct.to_bigarray in"; + append_main " let trace_config = MProf.Trace.Control.make buffer MProf_xen.timestamper in"; + append_main " MProf.Trace.Control.start trace_config;"; + append_main " MProf_xen.share_with (module Gnt.Gntshr) (module OS.Xs) ~domid:0 trace_pages"; + append_main " |> OS.Main.run"; + end; + newline_main () +end + +type tracing = Tracing.t + +let mprof_trace ~size () = + { Tracing.size } + +type t = { + name: string; + root: string; + jobs: job impl list; + tracing: tracing option; +} + +let t = ref None + +let config_file = ref None + +let reset () = + config_file := None; + t := None + +let set_config_file f = + config_file := Some f + +let get_config_file () = + match !config_file with + | None -> Sys.getcwd () / "config.ml" + | Some f -> f + +let update_path t root = + { t with jobs = List.map (fun j -> Impl.update_path j root) t.jobs } + +let register ?tracing name jobs = + let root = match !config_file with + | None -> failwith "no config file" + | Some f -> Filename.dirname f in + t := Some { name; jobs; root; tracing } + +let registered () = + match !t with + | None -> { name = "empty"; jobs = []; root = Sys.getcwd (); tracing = None } + | Some t -> t + +let ps = ref StringSet.empty + +let add_to_opam_packages p = + ps := StringSet.union (StringSet.of_list p) !ps + +let packages t = + let m = match !mode with + | `Unix | `MacOSX -> "mirage-unix" + | `Xen -> "mirage-xen" in + let ps = StringSet.add m !ps in + let ps = match t.tracing with + | None -> ps + | Some tracing -> StringSet.union (Tracing.packages tracing) ps in + let ps = List.fold_left (fun set j -> + let ps = StringSet.of_list (Impl.packages j) in + StringSet.union ps set + ) ps t.jobs in + StringSet.elements ps + +let ls = ref StringSet.empty + +let add_to_ocamlfind_libraries l = + ls := StringSet.union !ls (StringSet.of_list l) + +let libraries t = + let m = match !mode with + | `Unix | `MacOSX -> "mirage-types.lwt" + | `Xen -> "mirage-types.lwt" in + let ls = StringSet.add m !ls in + let ls = match t.tracing with + | None -> ls + | Some tracing -> StringSet.union (Tracing.libraries tracing) ls in + let ls = List.fold_left (fun set j -> + let ls = StringSet.of_list (Impl.libraries j) in + StringSet.union ls set + ) ls t.jobs in + StringSet.elements ls + +let configure_myocamlbuild_ml t = + let minor, major = ocaml_version () in + if minor < 4 || major < 1 then ( + (* Previous ocamlbuild versions weren't able to understand the + --output-obj rules *) + let file = t.root / "myocamlbuild.ml" in + let oc = open_out file in + append oc "(* %s *)" generated_by_mirage; + newline oc; + append oc + "open Ocamlbuild_pack;;\n\ + open Ocamlbuild_plugin;;\n\ + open Ocaml_compiler;;\n\ + \n\ + let native_link_gen linker =\n\ + \ link_gen \"cmx\" \"cmxa\" !Options.ext_lib [!Options.ext_obj; \"cmi\"] linker;;\n\ + \n\ + let native_output_obj x = native_link_gen ocamlopt_link_prog\n\ + \ (fun tags -> tags++\"ocaml\"++\"link\"++\"native\"++\"output_obj\") x;;\n\ + \n\ + rule \"ocaml: cmx* & o* -> native.o\"\n\ + \ ~tags:[\"ocaml\"; \"native\"; \"output_obj\" ]\n\ + \ ~prod:\"%%.native.o\" ~deps:[\"%%.cmx\"; \"%%.o\"]\n\ + \ (native_output_obj \"%%.cmx\" \"%%.native.o\");;\n\ + \n\ + \n\ + let byte_link_gen = link_gen \"cmo\" \"cma\" \"cma\" [\"cmo\"; \"cmi\"];;\n\ + let byte_output_obj = byte_link_gen ocamlc_link_prog\n\ + \ (fun tags -> tags++\"ocaml\"++\"link\"++\"byte\"++\"output_obj\");;\n\ + \n\ + rule \"ocaml: cmo* -> byte.o\"\n\ + \ ~tags:[\"ocaml\"; \"byte\"; \"link\"; \"output_obj\" ]\n\ + ~prod:\"%%.byte.o\" ~dep:\"%%.cmo\"\n\ + \ (byte_output_obj \"%%.cmo\" \"%%.byte.o\");;"; + close_out oc + ) + +let clean_myocamlbuild_ml t = + remove (t.root / "myocamlbuild.ml") + +let configure_main_libvirt_xml t = + let file = t.root / t.name ^ "_libvirt.xml" in + let oc = open_out file in + append oc "" generated_by_mirage; + append oc ""; + append oc " %s" t.name; + append oc " 262144"; + append oc " 262144"; + append oc " 1"; + append oc " "; + append oc " linux"; + append oc " %s/mir-%s.xen" t.root t.name; + append oc " "; (* the libxl driver currently needs an empty cmdline to be able to start the domain on arm - due to this? http://lists.xen.org/archives/html/xen-devel/2014-02/msg02375.html *) + append oc " "; + append oc " "; + append oc " preserve"; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc " "; + append oc ""; + close_out oc + +let clean_main_libvirt_xml t = + remove (t.root / t.name ^ "_libvirt.xml") + +let configure_main_xl t = + let file = t.root / t.name ^ ".xl" in + let oc = open_out file in + append oc "# %s" generated_by_mirage; + newline oc; + append oc "name = '%s'" t.name; + append oc "kernel = '%s/mir-%s.xen'" t.root t.name; + append oc "builder = 'linux'"; + append oc "memory = 256"; + append oc "on_crash = 'preserve'"; + newline oc; + append oc "# You must define the network and block interfaces manually."; + newline oc; + append oc "# The disk configuration is defined here:"; + append oc "# http://xenbits.xen.org/docs/4.3-testing/misc/xl-disk-configuration.txt"; + append oc "# An example would look like:"; + append oc "# disk = [ '/dev/loop0,,xvda' ]"; + newline oc; + append oc "# The network configuration is defined here:"; + append oc "# http://xenbits.xen.org/docs/4.3-testing/misc/xl-network-configuration.html"; + append oc "# An example would look like:"; + append oc "# vif = [ 'mac=c0:ff:ee:c0:ff:ee,bridge=br0' ]"; + close_out oc + +let clean_main_xl t = + remove (t.root / t.name ^ ".xl") + +let configure_main_xe t = + let file = t.root / t.name ^ ".xe" in + let oc = open_out file in + append oc "#!/bin/sh"; + append oc "# %s" generated_by_mirage; + newline oc; + append oc "set -e"; + newline oc; + append oc "# Dependency: xe"; + append oc "command -v xe >/dev/null 2>&1 || { echo >&2 \"I require xe but it's not installed. Aborting.\"; exit 1; }"; + append oc "# Dependency: xe-unikernel-upload"; + append oc "command -v xe-unikernel-upload >/dev/null 2>&1 || { echo >&2 \"I require xe-unikernel-upload but it's not installed. Aborting.\"; exit 1; }"; + append oc "# Dependency: a $HOME/.xe"; + append oc "if [ ! -e $HOME/.xe ]; then"; + append oc " echo Please create a config file for xe in $HOME/.xe which contains:"; + append oc " echo server=''"; + append oc " echo username=root"; + append oc " echo password=password"; + append oc " exit 1"; + append oc "fi"; + newline oc; + append oc "echo Uploading VDI containing unikernel"; + append oc "VDI=$(xe-unikernel-upload --path %s/mir-%s.xen)" t.root t.name; + append oc "echo VDI=$VDI"; + append oc "echo Creating VM metadata"; + append oc "VM=$(xe vm-create name-label=%s)" t.name; + append oc "echo VM=$VM"; + append oc "xe vm-param-set uuid=$VM PV-bootloader=pygrub"; + append oc "echo Adding network interface connected to xenbr0"; + append oc "ETH0=$(xe network-list bridge=xenbr0 params=uuid --minimal)"; + append oc "VIF=$(xe vif-create vm-uuid=$VM network-uuid=$ETH0 device=0)"; + append oc "echo Atting block device and making it bootable"; + append oc "VBD=$(xe vbd-create vm-uuid=$VM vdi-uuid=$VDI device=0)"; + append oc "xe vbd-param-set uuid=$VBD bootable=true"; + append oc "xe vbd-param-set uuid=$VBD other-config:owner=true"; + append oc "echo Starting VM"; + append oc "xe vm-start vm=%s" t.name; + close_out oc; + Unix.chmod file 0o755 + +let clean_main_xe t = + remove (t.root / t.name ^ ".xe") + +(* Get the linker flags for any extra C objects we depend on. + * This is needed when building a Xen image as we do the link manually. *) +let get_extra_ld_flags ~filter pkgs = + let output = read_command + "ocamlfind query -r -format '%%d\t%%(xen_linkopts)' -predicates native %s" + (String.concat " " pkgs) in + split output '\n' + |> List.fold_left (fun acc line -> + match cut_at line '\t' with + | None -> acc + | Some (dir, ldflags) -> Printf.sprintf "-L%s %s" dir ldflags :: acc + ) [] + +let configure_makefile t = + let file = t.root / "Makefile" in + let pkgs = "lwt.syntax" :: libraries t in + let libraries_str = + match pkgs with + | [] -> "" + | ls -> "-pkgs " ^ String.concat "," ls in + let packages = String.concat " " (packages t) in + let oc = open_out file in + append oc "# %s" generated_by_mirage; + newline oc; + append oc "LIBS = %s" libraries_str; + append oc "PKGS = %s" packages; + begin match !mode with + | `Xen -> + append oc "SYNTAX = -tags \"syntax(camlp4o),annot,bin_annot,strict_sequence,principal\"\n"; + append oc "SYNTAX += -tag-line \": -syntax(camlp4o)\"\n"; + append oc "FLAGS = -cflag -g -lflags -g,-linkpkg,-dontlink,unix\n"; + append oc "XENLIB = $(shell ocamlfind query mirage-xen)\n" + | `Unix -> + append oc "SYNTAX = -tags \"syntax(camlp4o),annot,bin_annot,strict_sequence,principal\"\n"; + append oc "SYNTAX += -tag-line \": -syntax(camlp4o)\"\n"; + append oc "FLAGS = -cflag -g -lflags -g,-linkpkg\n" + | `MacOSX -> + append oc "SYNTAX = -tags \"syntax(camlp4o),annot,bin_annot,strict_sequence,principal,thread\"\n"; + append oc "SYNTAX += -tag-line \": -syntax(camlp4o)\"\n"; + append oc "FLAGS = -cflag -g -lflags -g,-linkpkg\n" + end; + append oc "BUILD = ocamlbuild -use-ocamlfind $(LIBS) $(SYNTAX) $(FLAGS)\n\ + OPAM = opam\n\n\ + export PKG_CONFIG_PATH=$(shell opam config var prefix)/lib/pkgconfig\n\n\ + export OPAMVERBOSE=1\n\ + export OPAMYES=1"; + newline oc; + append oc ".PHONY: all depend clean build main.native\n\ + all: build\n\ + \n\ + depend:\n\ + \t$(OPAM) install $(PKGS) --verbose\n\ + \n\ + main.native:\n\ + \t$(BUILD) main.native\n\ + \n\ + main.native.o:\n\ + \t$(BUILD) main.native.o"; + newline oc; + + (* On ARM, we must convert the ELF image to an ARM boot executable zImage, + * while on x86 we leave it as it is. *) + let generate_image = + let need_zImage = + match uname_m () with + | Some machine -> String.length machine > 2 && String.sub machine 0 3 = "arm" + | None -> failwith "uname -m failed; can't determine target machine type!" in + if need_zImage then ( + Printf.sprintf "\t -o mir-%s.elf\n\ + \tobjcopy -O binary mir-%s.elf mir-%s.xen" + t.name t.name t.name + ) else ( + Printf.sprintf "\t -o mir-%s.xen" t.name + ) in + + begin match !mode with + | `Xen -> + let filter = function + | "unix" | "bigarray" |"shared_memory_ring_stubs" -> false (* Provided by mirage-xen instead. *) + | _ -> true in + let extra_c_archives = + get_extra_ld_flags ~filter pkgs + |> String.concat " \\\n\t " in + + append oc "build: main.native.o"; + let pkg_config_deps = "mirage-xen" in + append oc "\tpkg-config --print-errors --exists %s" pkg_config_deps; + append oc "\tld -d -static -nostdlib \\\n\ + \t _build/main.native.o \\\n\ + \t %s \\\n\ + \t $$(pkg-config --static --libs %s) \\\n\ + \t $(shell gcc -print-libgcc-file-name) \\\n\ + %s" + extra_c_archives pkg_config_deps generate_image; + | `Unix | `MacOSX -> + append oc "build: main.native"; + append oc "\tln -nfs _build/main.native mir-%s" t.name; + end; + newline oc; + append oc "run: build"; + begin match !mode with + | `Xen -> + append oc "\t@echo %s.xl has been created. Edit it to add VIFs or VBDs" t.name; + append oc "\t@echo Then do something similar to: xl create -c %s.xl\n" t.name + | `Unix | `MacOSX -> + append oc "\t$(SUDO) ./mir-%s\n" t.name + end; + append oc "clean:\n\ + \tocamlbuild -clean"; + close_out oc + +let clean_makefile t = + remove (t.root / "Makefile") + +let no_opam_version_check_ = ref false +let no_opam_version_check b = no_opam_version_check_ := b + +let configure_opam t = + info "Installing OPAM packages."; + match packages t with + | [] -> () + | ps -> + if command_exists "opam" then + if !no_opam_version_check_ then () + else ( + let opam_version = read_command "opam --version" in + let version_error () = + error "Your version of opam: %s is not up-to-date. \ + Please update to (at least) 1.2." opam_version + in + match split opam_version '.' with + | major::minor::_ -> + let major = try int_of_string major with Failure _ -> 0 in + let minor = try int_of_string minor with Failure _ -> 0 in + if (major, minor) >= (1, 2) then opam "install" ps else version_error () + | _ -> version_error () + ) + else error "OPAM is not installed." + +let clean_opam t = + () +(* This is a bit too agressive, disabling for now on. + let (++) = StringSet.union in + let set mode = StringSet.of_list (packages t mode) in + let packages = + set (`Unix `Socket) ++ set (`Unix `Direct) ++ set `Xen in + match StringSet.elements packages with + | [] -> () + | ps -> + if cmd_exists "opam" then opam "remove" ps + else error "OPAM is not installed." +*) + +let manage_opam_packages_ = ref true +let manage_opam_packages b = manage_opam_packages_ := b + +let configure_job j = + let name = Impl.name j in + let module_name = Impl.module_name j in + let param_names = Impl.names j in + append_main "let %s () =" name; + List.iter (fun p -> + append_main " %s () >>= function" p; + append_main " | `Error e -> %s" (driver_initialisation_error p); + append_main " | `Ok %s ->" p; + ) (dedup param_names); + append_main " %s.start %s" module_name (String.concat " " param_names); + newline_main () + +let configure_main t = + info "%s main.ml" (blue_s "Generating:"); + set_main_ml (t.root / "main.ml"); + append_main "(* %s *)" generated_by_mirage; + newline_main (); + append_main "open Lwt"; + newline_main (); + append_main "let _ = Printexc.record_backtrace true"; + newline_main (); + begin match t.tracing with + | None -> () + | Some tracing -> Tracing.configure tracing end; + List.iter (fun j -> Impl.configure j) t.jobs; + List.iter configure_job t.jobs; + let names = List.map (fun j -> Printf.sprintf "%s ()" (Impl.name j)) t.jobs in + append_main "let () ="; + append_main " OS.Main.run (join [%s])" (String.concat "; " names) + +let clean_main t = + List.iter Impl.clean t.jobs; + remove (t.root / "main.ml") + +let configure t = + info "%s %s" (blue_s "Using configuration:") (get_config_file ()); + info "%d job%s [%s]" + (List.length t.jobs) + (if List.length t.jobs = 1 then "" else "s") + (String.concat ", " (List.map Impl.functor_name t.jobs)); + in_dir t.root (fun () -> + if !manage_opam_packages_ then configure_opam t; + configure_myocamlbuild_ml t; + configure_makefile t; + configure_main_xl t; + configure_main_xe t; + configure_main_libvirt_xml t; + configure_main t + ) + +let make () = + match uname_s () with + | Some ("FreeBSD" | "OpenBSD" | "NetBSD" | "DragonFly") -> "gmake" + | _ -> "make" + +let build t = + info "Build: %s" (blue_s (get_config_file ())); + in_dir t.root (fun () -> + command "%s build" (make ()) + ) + +let run t = + info "Run: %s" (blue_s (get_config_file ())); + in_dir t.root (fun () -> + command "%s run" (make ()) + ) + +let clean t = + info "Clean: %s" (blue_s (get_config_file ())); + in_dir t.root (fun () -> + if !manage_opam_packages_ then clean_opam t; + clean_myocamlbuild_ml t; + clean_makefile t; + clean_main_xl t; + clean_main_xe t; + clean_main_libvirt_xml t; + clean_main t; + command "rm -rf %s/_build" t.root; + command "rm -rf log %s/main.native.o %s/main.native %s/mir-%s %s/*~" + t.root t.root t.root t.name t.root; + ) + +(* Compile the configuration file and attempt to dynlink it. + * It is responsible for registering an application via + * [Mirage_config.register] in order to have an observable + * side effect to this command. *) +let compile_and_dynlink file = + info "%s %s" (blue_s "Processing:") file; + let root = Filename.dirname file in + let file = Filename.basename file in + let file = Dynlink.adapt_filename file in + command "rm -rf %s/_build/%s.*" root (Filename.chop_extension file); + command "cd %s && ocamlbuild -use-ocamlfind -tags annot,bin_annot -pkg mirage %s" root file; + try Dynlink.loadfile (String.concat "/" [root; "_build"; file]) + with Dynlink.Error err -> error "Error loading config: %s" (Dynlink.error_message err) + +(* If a configuration file is specified, then use that. + * If not, then scan the curdir for a `config.ml` file. + * If there is more than one, then error out. *) +let scan_conf = function + | Some f -> + info "%s %s" (blue_s "Using specified config file:") f; + if not (Sys.file_exists f) then error "%s does not exist, stopping." f; + realpath f + | None -> + let files = Array.to_list (Sys.readdir ".") in + match List.filter ((=) "config.ml") files with + | [] -> error "No configuration file config.ml found.\n\ + You'll need to create one to let Mirage know what to do." + | [f] -> + info "%s %s" (blue_s "Using scanned config file:") f; + realpath f + | _ -> error "There is more than one config.ml in the current working directory.\n\ + Please specify one explictly on the command-line." + +let load file = + reset (); + let file = scan_conf file in + let root = realpath (Filename.dirname file) in + let file = root / Filename.basename file in + info "%s %s" (blue_s "Compiling for target:") (string_of_mode !mode); + set_config_file file; + compile_and_dynlink file; + let t = registered () in + set_section t.name; + update_path t root diff --git a/samples/OCaml/reload.ml b/samples/OCaml/reload.ml new file mode 100644 index 00000000..510f201f --- /dev/null +++ b/samples/OCaml/reload.ml @@ -0,0 +1,125 @@ +(***********************************************************************) +(* *) +(* OCaml *) +(* *) +(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *) +(* *) +(* Copyright 2000 Institut National de Recherche en Informatique et *) +(* en Automatique. All rights reserved. This file is distributed *) +(* under the terms of the Q Public License version 1.0. *) +(* *) +(***********************************************************************) + +open Cmm +open Arch +open Reg +open Mach + +(* Reloading for the AMD64 *) + +(* Summary of instruction set constraints: + "S" means either stack or register, "R" means register only. + Operation Res Arg1 Arg2 + Imove R S + or S R + Iconst_int S if 32-bit signed, R otherwise + Iconst_float R + Iconst_symbol (not PIC) S + Iconst_symbol (PIC) R + Icall_ind R + Itailcall_ind R + Iload R R R + Istore R R + Iintop(Icomp) R R S + or S S R + Iintop(Imul|Idiv|mod) R R S + Iintop(shift) S S R + Iintop(others) R R S + or S S R + Iintop_imm(Iadd, n)/lea R R + Iintop_imm(others) S S + Inegf...Idivf R R S + Ifloatofint R S + Iintoffloat R S + Ispecific(Ilea) R R R + Ispecific(Ifloatarithmem) R R R + + Conditional branches: + Iinttest S R + or R S + Ifloattest R S (or S R if swapped test) + other tests S +*) + +let stackp r = + match r.loc with + Stack _ -> true + | _ -> false + +class reload = object (self) + +inherit Reloadgen.reload_generic as super + +method! reload_operation op arg res = + match op with + | Iintop(Iadd|Isub|Iand|Ior|Ixor|Icomp _|Icheckbound) -> + (* One of the two arguments can reside in the stack, but not both *) + if stackp arg.(0) && stackp arg.(1) + then ([|arg.(0); self#makereg arg.(1)|], res) + else (arg, res) + | Iintop_imm(Iadd, _) when arg.(0).loc <> res.(0).loc -> + (* This add will be turned into a lea; args and results must be + in registers *) + super#reload_operation op arg res + | Iintop(Idiv | Imod | Ilsl | Ilsr | Iasr) + | Iintop_imm(_, _) -> + (* The argument(s) and results can be either in register or on stack *) + (* Note: Idiv, Imod: arg(0) and res(0) already forced in regs + Ilsl, Ilsr, Iasr: arg(1) already forced in regs *) + (arg, res) + | Iintop(Imul) | Iaddf | Isubf | Imulf | Idivf -> + (* First argument (= result) must be in register, second arg + can reside in the stack *) + if stackp arg.(0) + then (let r = self#makereg arg.(0) in ([|r; arg.(1)|], [|r|])) + else (arg, res) + | Ifloatofint | Iintoffloat -> + (* Result must be in register, but argument can be on stack *) + (arg, (if stackp res.(0) then [| self#makereg res.(0) |] else res)) + | Iconst_int n -> + if n <= 0x7FFFFFFFn && n >= -0x80000000n + then (arg, res) + else super#reload_operation op arg res + | Iconst_symbol _ -> + if !pic_code || !Clflags.dlcode + then super#reload_operation op arg res + else (arg, res) + | _ -> (* Other operations: all args and results in registers *) + super#reload_operation op arg res + +method! reload_test tst arg = + match tst with + Iinttest cmp -> + (* One of the two arguments can reside on stack *) + if stackp arg.(0) && stackp arg.(1) + then [| self#makereg arg.(0); arg.(1) |] + else arg + | Ifloattest((Clt|Cle), _) -> + (* Cf. emit.mlp: we swap arguments in this case *) + (* First argument can be on stack, second must be in register *) + if stackp arg.(1) + then [| arg.(0); self#makereg arg.(1) |] + else arg + | Ifloattest((Ceq|Cne|Cgt|Cge), _) -> + (* Second argument can be on stack, first must be in register *) + if stackp arg.(0) + then [| self#makereg arg.(0); arg.(1) |] + else arg + | _ -> + (* The argument(s) can be either in register or on stack *) + arg + +end + +let fundecl f = + (new reload)#fundecl f diff --git a/samples/OCaml/sigset.ml b/samples/OCaml/sigset.ml new file mode 100644 index 00000000..ba5e1092 --- /dev/null +++ b/samples/OCaml/sigset.ml @@ -0,0 +1,70 @@ +(* + * Copyright (c) 2013 Jeremy Yallop. + * + * This file is distributed under the terms of the MIT License. + * See the file LICENSE for details. + *) + +open PosixTypes +open Ctypes +open Foreign + +type t = sigset_t ptr + +let t = ptr sigset_t + +(* This function initializes the signal set set to exclude all of the defined + signals. It always returns 0. *) +let sigemptyset = foreign "sigemptyset" (ptr sigset_t @-> returning int) + +let empty () = + let setp = allocate_n ~count:1 sigset_t in begin + ignore (sigemptyset setp); + setp + end + +(* This function initializes the signal set set to include all of the defined + signals. Again, the return value is 0. *) +let sigfillset = foreign "sigfillset" (ptr sigset_t @-> returning int) + +let full () = + let setp = allocate_n ~count:1 sigset_t in begin + ignore (sigfillset setp); + setp + end + +(* This function adds the signal signum to the signal set set. All sigaddset + does is modify set; it does not block or unblock any signals. + + The return value is 0 on success and -1 on failure. The following errno + error condition is defined for this function: + + EINVAL The signum argument doesn't specify a valid signal. +*) +let sigaddset = foreign "sigaddset" ~check_errno:true + (ptr sigset_t @-> int @-> returning int) + +let add set signal = ignore (sigaddset set signal) + +(* This function removes the signal signum from the signal set set. All + sigdelset does is modify set; it does not block or unblock any signals. + + The return value and error conditions are the same as for + sigaddset. *) +let sigdelset = foreign "sigdelset" ~check_errno:true + (ptr sigset_t @-> int @-> returning int) + +let del set signal = ignore (sigdelset set signal) + +(* The sigismember function tests whether the signal signum is a member of the + signal set set. It returns 1 if the signal is in the set, 0 if not, and -1 if + there is an error. + + The following errno error condition is defined for this function: + + EINVAL The signum argument doesn't specify a valid signal. +*) +let sigismember = foreign "sigismember" ~check_errno:true + (ptr sigset_t @-> int @-> returning int) + +let mem set signal = sigismember set signal <> 0 diff --git a/samples/OCaml/uutf.ml b/samples/OCaml/uutf.ml new file mode 100644 index 00000000..ff12d954 --- /dev/null +++ b/samples/OCaml/uutf.ml @@ -0,0 +1,810 @@ +(*--------------------------------------------------------------------------- + Copyright 2012 Daniel C. Bünzli. All rights reserved. + Distributed under the BSD3 license, see license at the end of the file. + %%NAME%% release %%VERSION%% + ---------------------------------------------------------------------------*) + +let io_buffer_size = 65536 (* IO_BUFFER_SIZE 4.0.0 *) + +let pp = Format.fprintf +let invalid_encode () = invalid_arg "expected `Await encode" +let invalid_bounds j l = + invalid_arg (Printf.sprintf "invalid bounds (index %d, length %d)" j l) + +(* Unsafe string byte manipulations. If you don't believe the author's + invariants, replacing with safe versions makes everything safe in + the module. He won't be upset. *) + +let unsafe_chr = Char.unsafe_chr +let unsafe_blit = String.unsafe_blit +let unsafe_array_get = Array.unsafe_get +let unsafe_byte s j = Char.code (String.unsafe_get s j) +let unsafe_set_byte s j byte = String.unsafe_set s j (Char.unsafe_chr byte) + +(* Unicode characters *) + +type uchar = int +let u_bom = 0xFEFF (* BOM. *) +let u_rep = 0xFFFD (* replacement character. *) +let is_uchar cp = + (0x0000 <= cp && cp <= 0xD7FF) || (0xE000 <= cp && cp <= 0x10FFFF) + +let pp_cp ppf cp = + if cp < 0 || cp > 0x10FFFF then pp ppf "U+Invalid(%X)" cp else + if cp <= 0xFFFF then pp ppf "U+%04X" cp else + pp ppf "U+%X" cp + +let cp_to_string cp = (* NOT thread safe. *) + pp Format.str_formatter "%a" pp_cp cp; Format.flush_str_formatter () + +(* Unicode encoding schemes *) + +type encoding = [ `UTF_8 | `UTF_16 | `UTF_16BE | `UTF_16LE ] +type decoder_encoding = [ encoding | `US_ASCII | `ISO_8859_1 ] + +let encoding_of_string s = match String.uppercase s with (* IANA names. *) +| "UTF-8" -> Some `UTF_8 +| "UTF-16" -> Some `UTF_16 +| "UTF-16LE" -> Some `UTF_16LE +| "UTF-16BE" -> Some `UTF_16BE +| "ANSI_X3.4-1968" | "ISO-IR-6" | "ANSI_X3.4-1986" | "ISO_646.IRV:1991" +| "ASCII" | "ISO646-US" | "US-ASCII" | "US" | "IBM367" | "CP367" | "CSASCII" -> + Some `US_ASCII +| "ISO_8859-1:1987" | "ISO-IR-100" | "ISO_8859-1" | "ISO-8859-1" +| "LATIN1" | "L1" | "IBM819" | "CP819" | "CSISOLATIN1" -> + Some `ISO_8859_1 +| _ -> None + +let encoding_to_string = function +| `UTF_8 -> "UTF-8" | `UTF_16 -> "UTF-16" | `UTF_16BE -> "UTF-16BE" +| `UTF_16LE -> "UTF-16LE" | `US_ASCII -> "US-ASCII" +| `ISO_8859_1 -> "ISO-8859-1" + +(* Base character decoders. They assume enough data. *) + +let malformed s j l = `Malformed (String.sub s j l) +let malformed_pair be hi s j l = (* missing or half low surrogate at eoi. *) + let bs1 = String.sub s j l in + let bs0 = String.create 2 in + let j0, j1 = if be then (0, 1) else (1, 0) in + unsafe_set_byte bs0 j0 (hi lsr 8); + unsafe_set_byte bs0 j1 (hi land 0xFF); + `Malformed (bs0 ^ bs1) + +let r_us_ascii s j = + (* assert (0 <= j && j < String.length s); *) + let b0 = unsafe_byte s j in + if b0 <= 127 then `Uchar b0 else malformed s j 1 + +let r_iso_8859_1 s j = + (* assert (0 <= j && j < String.length s); *) + `Uchar (unsafe_byte s j) + +let utf_8_len = [| (* uchar byte length according to first UTF-8 byte. *) + 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; + 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; + 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; + 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; + 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; 1; + 1; 1; 1; 1; 1; 1; 1; 1; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; + 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; + 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; + 0; 0; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; 2; + 2; 2; 2; 2; 2; 2; 2; 2; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; 3; + 4; 4; 4; 4; 4; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0; 0 |] + +let r_utf_8 s j l = + (* assert (0 <= j && 0 <= l && j + l <= String.length s); *) + match l with + | 1 -> `Uchar (unsafe_byte s j) + | 2 -> + let b0 = unsafe_byte s j in let b1 = unsafe_byte s (j + 1) in + if b1 lsr 6 != 0b10 then malformed s j l else + `Uchar (((b0 land 0x1F) lsl 6) lor (b1 land 0x3F)) + | 3 -> + let b0 = unsafe_byte s j in let b1 = unsafe_byte s (j + 1) in + let b2 = unsafe_byte s (j + 2) in + let c = `Uchar (((b0 land 0x0F) lsl 12) lor + ((b1 land 0x3F) lsl 6) lor + (b2 land 0x3F)) + in + if b2 lsr 6 != 0b10 then malformed s j l else + begin match b0 with + | 0xE0 -> if b1 < 0xA0 || 0xBF < b1 then malformed s j l else c + | 0xED -> if b1 < 0x80 || 0x9F < b1 then malformed s j l else c + | _ -> if b1 lsr 6 != 0b10 then malformed s j l else c + end + | 4 -> + let b0 = unsafe_byte s j in let b1 = unsafe_byte s (j + 1) in + let b2 = unsafe_byte s (j + 2) in let b3 = unsafe_byte s (j + 3) in + let c = `Uchar (((b0 land 0x07) lsl 18) lor + ((b1 land 0x3F) lsl 12) lor + ((b2 land 0x3F) lsl 6) lor + (b3 land 0x3F)) + in + if b3 lsr 6 != 0b10 || b2 lsr 6 != 0b10 then malformed s j l else + begin match b0 with + | 0xF0 -> if b1 < 0x90 || 0xBF < b1 then malformed s j l else c + | 0xF4 -> if b1 < 0x80 || 0x8F < b1 then malformed s j l else c + | _ -> if b1 lsr 6 != 0b10 then malformed s j l else c + end + | _ -> assert false + +let r_utf_16 s j0 j1 = (* May return a high surrogate. *) + (* assert (0 <= j0 && 0 <= j1 && max j0 j1 < String.length s); *) + let b0 = unsafe_byte s j0 in let b1 = unsafe_byte s j1 in + let u = (b0 lsl 8) lor b1 in + if u < 0xD800 || u > 0xDFFF then `Uchar u else + if u > 0xDBFF then malformed s (min j0 j1) 2 else `Hi u + +let r_utf_16_lo hi s j0 j1 = (* Combines [hi] with a low surrogate. *) + (* assert (0 <= j0 && 0 <= j1 && max j0 j1 < String.length s); *) + let b0 = unsafe_byte s j0 in + let b1 = unsafe_byte s j1 in + let lo = (b0 lsl 8) lor b1 in + if lo < 0xDC00 || lo > 0xDFFF + then malformed_pair (j0 < j1 (* true => be *)) hi s (min j0 j1) 2 + else `Uchar ((((hi land 0x3FF) lsl 10) lor (lo land 0x3FF)) + 0x10000) + +let r_encoding s j l = (* guess encoding with max. 3 bytes. *) + (* assert (0 <= j && 0 <= l && j + l <= String.length s) *) + let some i = if i < l then Some (unsafe_byte s (j + i)) else None in + match (some 0), (some 1), (some 2) with + | Some 0xEF, Some 0xBB, Some 0xBF -> `UTF_8 `BOM + | Some 0xFE, Some 0xFF, _ -> `UTF_16BE `BOM + | Some 0xFF, Some 0xFE, _ -> `UTF_16LE `BOM + | Some 0x00, Some p, _ when p > 0 -> `UTF_16BE (`ASCII p) + | Some p, Some 0x00, _ when p > 0 -> `UTF_16LE (`ASCII p) + | Some u, _, _ when utf_8_len.(u) <> 0 -> `UTF_8 `Decode + | Some _, Some _, _ -> `UTF_16BE `Decode + | Some _, None , None -> `UTF_8 `Decode + | None , None , None -> `UTF_8 `End + | None , Some _, _ -> assert false + | Some _, None , Some _ -> assert false + | None , None , Some _ -> assert false + +(* Decode *) + +type src = [ `Channel of in_channel | `String of string | `Manual ] +type nln = [ `ASCII of uchar | `NLF of uchar | `Readline of uchar ] +type decode = [ `Await | `End | `Malformed of string | `Uchar of uchar] + +let pp_decode ppf = function +| `Uchar u -> pp ppf "@[`Uchar %a@]" pp_cp u +| `End -> pp ppf "`End" +| `Await -> pp ppf "`Await" +| `Malformed bs -> + let l = String.length bs in + pp ppf "@[`Malformed ("; + if l > 0 then pp ppf "%02X" (Char.code (bs.[0])); + for i = 1 to l - 1 do pp ppf " %02X" (Char.code (bs.[i])) done; + pp ppf ")@]" + +type decoder = + { src : src; (* input source. *) + mutable encoding : decoder_encoding; (* decoded encoding. *) + nln : nln option; (* newline normalization (if any). *) + nl : int; (* newline normalization character. *) + mutable i : string; (* current input chunk. *) + mutable i_pos : int; (* input current position. *) + mutable i_max : int; (* input maximal position. *) + t : string; (* four bytes temporary buffer for overlapping reads. *) + mutable t_len : int; (* current byte length of [t]. *) + mutable t_need : int; (* number of bytes needed in [t]. *) + mutable removed_bom : bool; (* [true] if an initial BOM was removed. *) + mutable last_cr : bool; (* [true] if last char was CR. *) + mutable line : int; (* line number. *) + mutable col : int; (* column number. *) + mutable byte_count : int; (* byte count. *) + mutable count : int; (* char count. *) + mutable pp : (* decoder post-processor for BOM, position and nln. *) + decoder -> [ `Malformed of string | `Uchar of uchar ] -> decode; + mutable k : decoder -> decode } (* decoder continuation. *) + +(* On decodes that overlap two (or more) [d.i] buffers, we use [t_fill] to copy + the input data to [d.t] and decode from there. If the [d.i] buffers are not + too small this is faster than continuation based byte per byte writes. + + End of input (eoi) is signalled by [d.i_pos = 0] and [d.i_max = min_int] + which implies that [i_rem d < 0] is [true]. *) + +let i_rem d = d.i_max - d.i_pos + 1 (* remaining bytes to read in [d.i]. *) +let eoi d = d.i <- ""; d.i_pos <- 0; d.i_max <- min_int (* set eoi in [d]. *) +let src d s j l = (* set [d.i] with [s]. *) + if (j < 0 || l < 0 || j + l > String.length s) then invalid_bounds j l else + if (l = 0) then eoi d else + (d.i <- s; d.i_pos <- j; d.i_max <- j + l - 1) + +let refill k d = match d.src with (* get new input in [d.i] and [k]ontinue. *) +| `Manual -> d.k <- k; `Await +| `String _ -> eoi d; k d +| `Channel ic -> + let rc = input ic d.i 0 (String.length d.i) in + (src d d.i 0 rc; k d) + +let t_need d need = d.t_len <- 0; d.t_need <- need +let rec t_fill k d = (* get [d.t_need] bytes (or less if eoi) in [i.t]. *) + let blit d l = + unsafe_blit d.i d.i_pos d.t d.t_len (* write pos. *) l; + d.i_pos <- d.i_pos + l; d.t_len <- d.t_len + l; + in + let rem = i_rem d in + if rem < 0 (* eoi *) then k d else + let need = d.t_need - d.t_len in + if rem < need then (blit d rem; refill (t_fill k) d) else (blit d need; k d) + +let ret k v byte_count d = (* return post-processed [v]. *) + d.k <- k; d.byte_count <- d.byte_count + byte_count; d.pp d v + +(* Decoders. *) + +let rec decode_us_ascii d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_us_ascii d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 1; ret decode_us_ascii (r_us_ascii d.i j) 1 d + +let rec decode_iso_8859_1 d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_iso_8859_1 d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 1; ret decode_iso_8859_1 (r_iso_8859_1 d.i j) 1 d + +(* UTF-8 decoder *) + +let rec t_decode_utf_8 d = (* decode from [d.t]. *) + if d.t_len < d.t_need + then ret decode_utf_8 (malformed d.t 0 d.t_len) d.t_len d + else ret decode_utf_8 (r_utf_8 d.t 0 d.t_len) d.t_len d + +and decode_utf_8 d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_utf_8 d) else + let need = unsafe_array_get utf_8_len (unsafe_byte d.i d.i_pos) in + if rem < need then (t_need d need; t_fill t_decode_utf_8 d) else + let j = d.i_pos in + if need = 0 + then (d.i_pos <- d.i_pos + 1; ret decode_utf_8 (malformed d.i j 1) 1 d) + else (d.i_pos <- d.i_pos + need; ret decode_utf_8 (r_utf_8 d.i j need) need d) + +(* UTF-16BE decoder *) + +let rec t_decode_utf_16be_lo hi d = (* decode from [d.t]. *) + let bcount = d.t_len + 2 (* hi count *) in + if d.t_len < d.t_need + then ret decode_utf_16be (malformed_pair true hi d.t 0 d.t_len) bcount d + else ret decode_utf_16be (r_utf_16_lo hi d.t 0 1) bcount d + +and t_decode_utf_16be d = (* decode from [d.t]. *) + if d.t_len < d.t_need + then ret decode_utf_16be (malformed d.t 0 d.t_len) d.t_len d + else decode_utf_16be_lo (r_utf_16 d.t 0 1) d + +and decode_utf_16be_lo v d = match v with +| `Uchar _ | `Malformed _ as v -> ret decode_utf_16be v 2 d +| `Hi hi -> + let rem = i_rem d in + if rem < 2 then (t_need d 2; t_fill (t_decode_utf_16be_lo hi) d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 2; + ret decode_utf_16be (r_utf_16_lo hi d.i j (j + 1)) 4 d + +and decode_utf_16be d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_utf_16be d) else + if rem < 2 then (t_need d 2; t_fill t_decode_utf_16be d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 2; decode_utf_16be_lo (r_utf_16 d.i j (j + 1)) d + +(* UTF-16LE decoder, same as UTF-16BE with byte swapped. *) + +let rec t_decode_utf_16le_lo hi d = (* decode from [d.t]. *) + let bcount = d.t_len + 2 (* hi count *) in + if d.t_len < d.t_need + then ret decode_utf_16le (malformed_pair false hi d.t 0 d.t_len) bcount d + else ret decode_utf_16le (r_utf_16_lo hi d.t 1 0) bcount d + +and t_decode_utf_16le d = (* decode from [d.t]. *) + if d.t_len < d.t_need + then ret decode_utf_16le (malformed d.t 0 d.t_len) d.t_len d + else decode_utf_16le_lo (r_utf_16 d.t 1 0) d + +and decode_utf_16le_lo v d = match v with +| `Uchar _ | `Malformed _ as v -> ret decode_utf_16le v 2 d +| `Hi hi -> + let rem = i_rem d in + if rem < 2 then (t_need d 2; t_fill (t_decode_utf_16le_lo hi) d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 2; + ret decode_utf_16le (r_utf_16_lo hi d.i (j + 1) j) 4 d + +and decode_utf_16le d = + let rem = i_rem d in + if rem <= 0 then (if rem < 0 then `End else refill decode_utf_16le d) else + if rem < 2 then (t_need d 2; t_fill t_decode_utf_16le d) else + let j = d.i_pos in + d.i_pos <- d.i_pos + 2; decode_utf_16le_lo (r_utf_16 d.i (j + 1) j) d + +(* Encoding guessing. The guess is simple but starting the decoder + after is tedious, uutf's decoders are not designed to put bytes + back in the stream. *) + +let guessed_utf_8 d = (* start decoder after `UTF_8 guess. *) + let b3 d = (* handles the third read byte. *) + let b3 = unsafe_byte d.t 2 in + match utf_8_len.(b3) with + | 0 -> ret decode_utf_8 (malformed d.t 2 1) 1 d + | n -> + d.t_need <- n; d.t_len <- 1; unsafe_set_byte d.t 0 b3; + t_fill t_decode_utf_8 d + in + let b2 d = (* handle second read byte. *) + let b2 = unsafe_byte d.t 1 in + let b3 = if d.t_len > 2 then b3 else decode_utf_8 (* decodes `End *) in + match utf_8_len.(b2) with + | 0 -> ret b3 (malformed d.t 1 1) 1 d + | 1 -> ret b3 (r_utf_8 d.t 1 1) 1 d + | n -> (* copy d.t.(1-2) to d.t.(0-1) and decode *) + d.t_need <- n; + unsafe_set_byte d.t 0 b2; + if (d.t_len < 3) then d.t_len <- 1 else + (d.t_len <- 2; unsafe_set_byte d.t 1 (unsafe_byte d.t 2); ); + t_fill t_decode_utf_8 d + in + let b1 = unsafe_byte d.t 0 in (* handle first read byte. *) + let b2 = if d.t_len > 1 then b2 else decode_utf_8 (* decodes `End *) in + match utf_8_len.(b1) with + | 0 -> ret b2 (malformed d.t 0 1) 1 d + | 1 -> ret b2 (r_utf_8 d.t 0 1) 1 d + | 2 -> + if d.t_len < 2 then ret decode_utf_8 (malformed d.t 0 1) 1 d else + if d.t_len < 3 then ret decode_utf_8 (r_utf_8 d.t 0 2) 2 d else + ret b3 (r_utf_8 d.t 0 2) 2 d + | 3 -> + if d.t_len < 3 + then ret decode_utf_8 (malformed d.t 0 d.t_len) d.t_len d + else ret decode_utf_8 (r_utf_8 d.t 0 3) 3 d + | 4 -> + if d.t_len < 3 + then ret decode_utf_8 (malformed d.t 0 d.t_len) d.t_len d + else (d.t_need <- 4; t_fill t_decode_utf_8 d) + | n -> assert false + +let guessed_utf_16 d be v = (* start decoder after `UTF_16{BE,LE} guess. *) + let decode_utf_16, t_decode_utf_16, t_decode_utf_16_lo, j0, j1 = + if be then decode_utf_16be, t_decode_utf_16be, t_decode_utf_16be_lo, 0, 1 + else decode_utf_16le, t_decode_utf_16le, t_decode_utf_16le_lo, 1, 0 + in + let b3 k d = + if d.t_len < 3 then decode_utf_16 d (* decodes `End *) else + begin (* copy d.t.(2) to d.t.(0) and decode. *) + d.t_need <- 2; d.t_len <- 1; + unsafe_set_byte d.t 0 (unsafe_byte d.t 2); + t_fill k d + end + in + match v with + | `BOM -> ret (b3 t_decode_utf_16) (`Uchar u_bom) 2 d + | `ASCII u -> ret (b3 t_decode_utf_16) (`Uchar u) 2 d + | `Decode -> + match r_utf_16 d.t j0 j1 with + | `Malformed _ | `Uchar _ as v -> ret (b3 t_decode_utf_16) v 2 d + | `Hi hi -> + if d.t_len < 3 + then ret decode_utf_16 (malformed_pair be hi "" 0 0) d.t_len d + else (b3 (t_decode_utf_16_lo hi)) d + +let guess_encoding d = (* guess encoding and start decoder. *) + let setup d = match r_encoding d.t 0 d.t_len with + | `UTF_8 r -> + d.encoding <- `UTF_8; d.k <- decode_utf_8; + begin match r with + | `BOM -> ret decode_utf_8 (`Uchar u_bom) 3 d + | `Decode -> guessed_utf_8 d + | `End -> `End + end + | `UTF_16BE r -> + d.encoding <- `UTF_16BE; d.k <- decode_utf_16be; guessed_utf_16 d true r + | `UTF_16LE r -> + d.encoding <- `UTF_16LE; d.k <- decode_utf_16le; guessed_utf_16 d false r + + in + (t_need d 3; t_fill setup d) + +(* Character post-processors. Used for BOM handling, newline + normalization and position tracking. The [pp_remove_bom] is only + used for the first character to remove a possible initial BOM and + handle UTF-16 endianness recognition. *) + +let nline d = d.col <- 0; d.line <- d.line + 1 (* inlined. *) +let ncol d = d.col <- d.col + 1 (* inlined. *) +let ncount d = d.count <- d.count + 1 (* inlined. *) +let cr d b = d.last_cr <- b (* inlined. *) + +let pp_remove_bom utf16 pp d = function(* removes init. BOM, handles UTF-16. *) +| `Uchar 0xFEFF (* BOM *) -> + if utf16 then (d.encoding <- `UTF_16BE; d.k <- decode_utf_16be); + d.removed_bom <- true; d.pp <- pp; d.k d +| `Uchar 0xFFFE (* BOM reversed from decode_utf_16be *) when utf16 -> + d.encoding <- `UTF_16LE; d.k <- decode_utf_16le; + d.removed_bom <- true; d.pp <- pp; d.k d +| `Malformed _ | `Uchar _ as v -> + d.removed_bom <- false; d.pp <- pp; d.pp d v + +let pp_nln_none d = function +| `Uchar 0x000A (* LF *) as v -> + let last_cr = d.last_cr in + cr d false; ncount d; if last_cr then v else (nline d; v) +| `Uchar 0x000D (* CR *) as v -> cr d true; ncount d; nline d; v +| `Uchar (0x0085 | 0x000C | 0x2028 | 0x2029) (* NEL | FF | LS | PS *) as v -> + cr d false; ncount d; nline d; v +| `Uchar _ | `Malformed _ as v -> cr d false; ncount d; ncol d; v + +let pp_nln_readline d = function +| `Uchar 0x000A (* LF *) -> + let last_cr = d.last_cr in + cr d false; if last_cr then d.k d else (ncount d; nline d; `Uchar d.nl) +| `Uchar 0x000D (* CR *) -> cr d true; ncount d; nline d; `Uchar d.nl +| `Uchar (0x0085 | 0x000C | 0x2028 | 0x2029) (* NEL | FF | LS | PS *) -> + cr d false; ncount d; nline d; `Uchar d.nl +| `Uchar _ | `Malformed _ as v -> cr d false; ncount d; ncol d; v + +let pp_nln_nlf d = function +| `Uchar 0x000A (* LF *) -> + let last_cr = d.last_cr in + cr d false; if last_cr then d.k d else (ncount d; nline d; `Uchar d.nl) +| `Uchar 0x000D (* CR *) -> cr d true; ncount d; nline d; `Uchar d.nl +| `Uchar 0x0085 (* NEL *) -> cr d false; ncount d; nline d; `Uchar d.nl +| `Uchar (0x000C | 0x2028 | 0x2029) as v (* FF | LS | PS *) -> + cr d false; ncount d; nline d; v +| `Uchar _ | `Malformed _ as v -> cr d false; ncount d; ncol d; v + +let pp_nln_ascii d = function +| `Uchar 0x000A (* LF *) -> + let last_cr = d.last_cr in + cr d false; if last_cr then d.k d else (ncount d; nline d; `Uchar d.nl) +| `Uchar 0x000D (* CR *) -> cr d true; ncount d; nline d; `Uchar d.nl +| `Uchar (0x0085 | 0x000C | 0x2028 | 0x2029) as v (* NEL | FF | LS | PS *) -> + cr d false; ncount d; nline d; v +| `Uchar _ | `Malformed _ as v -> cr d false; ncount d; ncol d; v + +let decode_fun = function +| `UTF_8 -> decode_utf_8 +| `UTF_16 -> decode_utf_16be (* see [pp_remove_bom]. *) +| `UTF_16BE -> decode_utf_16be +| `UTF_16LE -> decode_utf_16le +| `US_ASCII -> decode_us_ascii +| `ISO_8859_1 -> decode_iso_8859_1 + +let decoder ?nln ?encoding src = + let pp, nl = match nln with + | None -> pp_nln_none, 0x000A (* not used. *) + | Some (`ASCII nl) -> pp_nln_ascii, nl + | Some (`NLF nl) -> pp_nln_nlf, nl + | Some (`Readline nl) -> pp_nln_readline, nl + in + let encoding, k = match encoding with + | None -> `UTF_8, guess_encoding + | Some e -> (e :> decoder_encoding), decode_fun e + in + let i, i_pos, i_max = match src with + | `Manual -> "", 1, 0 (* implies src_rem d = 0. *) + | `Channel _ -> String.create io_buffer_size, 1, 0 (* idem. *) + | `String s -> s, 0, String.length s - 1 + in + { src = (src :> src); encoding; nln = (nln :> nln option); nl; + i; i_pos; i_max; t = String.create 4; t_len = 0; t_need = 0; + removed_bom = false; last_cr = false; line = 1; col = 0; + byte_count = 0; count = 0; + pp = pp_remove_bom (encoding = `UTF_16) pp; k } + +let decode d = d.k d +let decoder_line d = d.line +let decoder_col d = d.col +let decoder_byte_count d = d.byte_count +let decoder_count d = d.count +let decoder_removed_bom d = d.removed_bom +let decoder_src d = d.src +let decoder_nln d = d.nln +let decoder_encoding d = d.encoding +let set_decoder_encoding d e = + d.encoding <- (e :> decoder_encoding); d.k <- decode_fun e + +(* Encode *) + +type dst = [ `Channel of out_channel | `Buffer of Buffer.t | `Manual ] +type encode = [ `Await | `End | `Uchar of uchar ] +type encoder = + { dst : dst; (* output destination. *) + encoding : encoding; (* encoded encoding. *) + mutable o : string; (* current output chunk. *) + mutable o_pos : int; (* next output position to write. *) + mutable o_max : int; (* maximal output position to write. *) + t : string; (* four bytes buffer for overlapping writes. *) + mutable t_pos : int; (* next position to read in [t]. *) + mutable t_max : int; (* maximal position to read in [t]. *) + mutable k : (* encoder continuation. *) + encoder -> encode -> [ `Ok | `Partial ] } + +(* On encodes that overlap two (or more) [e.o] buffers, we encode the + character to the temporary buffer [o.t] and continue with + [tmp_flush] to write this data on the different [e.o] buffers. If + the [e.o] buffers are not too small this is faster than + continuation based byte per byte writes. *) + +let o_rem e = e.o_max - e.o_pos + 1 (* remaining bytes to write in [e.o]. *) +let dst e s j l = (* set [e.o] with [s]. *) + if (j < 0 || l < 0 || j + l > String.length s) then invalid_bounds j l; + e.o <- s; e.o_pos <- j; e.o_max <- j + l - 1 + +let partial k e = function `Await -> k e | `Uchar _ | `End -> invalid_encode () +let flush k e = match e.dst with(* get free storage in [d.o] and [k]ontinue. *) +| `Manual -> e.k <- partial k; `Partial +| `Buffer b -> Buffer.add_substring b e.o 0 e.o_pos; e.o_pos <- 0; k e +| `Channel oc -> output oc e.o 0 e.o_pos; e.o_pos <- 0; k e + +let t_range e max = e.t_pos <- 0; e.t_max <- max +let rec t_flush k e = (* flush [d.t] up to [d.t_max] in [d.i]. *) + let blit e l = + unsafe_blit e.t e.t_pos e.o e.o_pos l; + e.o_pos <- e.o_pos + l; e.t_pos <- e.t_pos + l + in + let rem = o_rem e in + let len = e.t_max - e.t_pos + 1 in + if rem < len then (blit e rem; flush (t_flush k) e) else (blit e len; k e) + +(* Encoders. *) + +let rec encode_utf_8 e v = + let k e = e.k <- encode_utf_8; `Ok in + match v with + | `Await -> k e + | `End -> flush k e + | `Uchar u as v -> + let rem = o_rem e in + if u <= 0x007F then + if rem < 1 then flush (fun e -> encode_utf_8 e v) e else + (unsafe_set_byte e.o e.o_pos u; e.o_pos <- e.o_pos + 1; k e) + else if u <= 0x07FF then + begin + let s, j, k = + if rem < 2 then (t_range e 1; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 2; e.o, j, k) + in + unsafe_set_byte s j (0xC0 lor (u lsr 6)); + unsafe_set_byte s (j + 1) (0x80 lor (u land 0x3F)); + k e + end + else if u <= 0xFFFF then + begin + let s, j, k = + if rem < 3 then (t_range e 2; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 3; e.o, j, k) + in + unsafe_set_byte s j (0xE0 lor (u lsr 12)); + unsafe_set_byte s (j + 1) (0x80 lor ((u lsr 6) land 0x3F)); + unsafe_set_byte s (j + 2) (0x80 lor (u land 0x3F)); + k e + end + else + begin + let s, j, k = + if rem < 4 then (t_range e 3; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 4; e.o, j, k) + in + unsafe_set_byte s j (0xF0 lor (u lsr 18)); + unsafe_set_byte s (j + 1) (0x80 lor ((u lsr 12) land 0x3F)); + unsafe_set_byte s (j + 2) (0x80 lor ((u lsr 6) land 0x3F)); + unsafe_set_byte s (j + 3) (0x80 lor (u land 0x3F)); + k e + end + +let rec encode_utf_16be e v = + let k e = e.k <- encode_utf_16be; `Ok in + match v with + | `Await -> k e + | `End -> flush k e + | `Uchar u -> + let rem = o_rem e in + if u < 0x10000 then + begin + let s, j, k = + if rem < 2 then (t_range e 1; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 2; e.o, j, k) + in + unsafe_set_byte s j (u lsr 8); + unsafe_set_byte s (j + 1) (u land 0xFF); + k e + end else begin + let s, j, k = + if rem < 4 then (t_range e 3; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 4; e.o, j, k) + in + let u' = u - 0x10000 in + let hi = (0xD800 lor (u' lsr 10)) in + let lo = (0xDC00 lor (u' land 0x3FF)) in + unsafe_set_byte s j (hi lsr 8); + unsafe_set_byte s (j + 1) (hi land 0xFF); + unsafe_set_byte s (j + 2) (lo lsr 8); + unsafe_set_byte s (j + 3) (lo land 0xFF); + k e + end + +let rec encode_utf_16le e v = (* encode_uft_16be with bytes swapped. *) + let k e = e.k <- encode_utf_16le; `Ok in + match v with + | `Await -> k e + | `End -> flush k e + | `Uchar u -> + let rem = o_rem e in + if u < 0x10000 then + begin + let s, j, k = + if rem < 2 then (t_range e 1; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 2; e.o, j, k) + in + unsafe_set_byte s j (u land 0xFF); + unsafe_set_byte s (j + 1) (u lsr 8); + k e + end + else + begin + let s, j, k = + if rem < 4 then (t_range e 3; e.t, 0, t_flush k) else + let j = e.o_pos in (e.o_pos <- e.o_pos + 4; e.o, j, k) + in + let u' = u - 0x10000 in + let hi = (0xD800 lor (u' lsr 10)) in + let lo = (0xDC00 lor (u' land 0x3FF)) in + unsafe_set_byte s j (hi land 0xFF); + unsafe_set_byte s (j + 1) (hi lsr 8); + unsafe_set_byte s (j + 2) (lo land 0xFF); + unsafe_set_byte s (j + 3) (lo lsr 8); + k e + end + +let encode_fun = function +| `UTF_8 -> encode_utf_8 +| `UTF_16 -> encode_utf_16be +| `UTF_16BE -> encode_utf_16be +| `UTF_16LE -> encode_utf_16le + +let encoder encoding dst = + let o, o_pos, o_max = match dst with + | `Manual -> "", 1, 0 (* implies o_rem e = 0. *) + | `Buffer _ + | `Channel _ -> String.create io_buffer_size, 0, io_buffer_size - 1 + in + { dst = (dst :> dst); encoding = (encoding :> encoding); o; o_pos; o_max; + t = String.create 4; t_pos = 1; t_max = 0; k = encode_fun encoding} + +let encode e v = e.k e (v :> encode) +let encoder_encoding e = e.encoding +let encoder_dst e = e.dst + +(* Manual sources and destinations. *) + +module Manual = struct + let src = src + let dst = dst + let dst_rem = o_rem +end + +(* Strings folders and Buffer encoders *) + +module String = struct + let encoding_guess s = match r_encoding s 0 (max (String.length s) 3) with + | `UTF_8 d -> `UTF_8, (d = `BOM) + | `UTF_16BE d -> `UTF_16BE, (d = `BOM) + | `UTF_16LE d -> `UTF_16LE, (d = `BOM) + + type 'a folder = + 'a -> int -> [ `Uchar of uchar | `Malformed of string ] -> 'a + + let fold_utf_8 f acc s = + let rec loop acc f s i l = + if i = l then acc else + let need = unsafe_array_get utf_8_len (unsafe_byte s i) in + if need = 0 then loop (f acc i (malformed s i 1)) f s (i + 1) l else + let rem = l - i in + if rem < need then f acc i (malformed s i rem) else + loop (f acc i (r_utf_8 s i need)) f s (i + need) l + in + loop acc f s 0 (String.length s) + + let fold_utf_16be f acc s = + let rec loop acc f s i l = + if i = l then acc else + let rem = l - i in + if rem < 2 then f acc i (malformed s i 1) else + match r_utf_16 s i (i + 1) with + | `Uchar _ | `Malformed _ as v -> loop (f acc i v) f s (i + 2) l + | `Hi hi -> + if rem < 4 then f acc i (malformed s i rem) else + loop (f acc i (r_utf_16_lo hi s (i + 2) (i + 3))) f s (i + 4) l + in + loop acc f s 0 (String.length s) + + let fold_utf_16le f acc s = (* [fold_utf_16be], bytes swapped. *) + let rec loop acc f s i l = + if i = l then acc else + let rem = l - i in + if rem < 2 then f acc i (malformed s i 1) else + match r_utf_16 s (i + 1) i with + | `Uchar _ | `Malformed _ as v -> loop (f acc i v) f s (i + 2) l + | `Hi hi -> + if rem < 4 then f acc i (malformed s i rem) else + loop (f acc i (r_utf_16_lo hi s (i + 3) (i + 2))) f s (i + 4) l + in + loop acc f s 0 (String.length s) +end + +module Buffer = struct + let add_utf_8 b u = + let w byte = Buffer.add_char b (unsafe_chr byte) in (* inlined. *) + if u <= 0x007F then + (w u) + else if u <= 0x07FF then + (w (0xC0 lor (u lsr 6)); + w (0x80 lor (u land 0x3F))) + else if u <= 0xFFFF then + (w (0xE0 lor (u lsr 12)); + w (0x80 lor ((u lsr 6) land 0x3F)); + w (0x80 lor (u land 0x3F))) + else + (w (0xF0 lor (u lsr 18)); + w (0x80 lor ((u lsr 12) land 0x3F)); + w (0x80 lor ((u lsr 6) land 0x3F)); + w (0x80 lor (u land 0x3F))) + + let add_utf_16be b u = + let w byte = Buffer.add_char b (unsafe_chr byte) in (* inlined. *) + if u < 0x10000 then (w (u lsr 8); w (u land 0xFF)) else + let u' = u - 0x10000 in + let hi = (0xD800 lor (u' lsr 10)) in + let lo = (0xDC00 lor (u' land 0x3FF)) in + w (hi lsr 8); w (hi land 0xFF); + w (lo lsr 8); w (lo land 0xFF) + + let add_utf_16le b u = (* swapped add_utf_16be. *) + let w byte = Buffer.add_char b (unsafe_chr byte) in (* inlined. *) + if u < 0x10000 then (w (u land 0xFF); w (u lsr 8)) else + let u' = u - 0x10000 in + let hi = (0xD800 lor (u' lsr 10)) in + let lo = (0xDC00 lor (u' land 0x3FF)) in + w (hi land 0xFF); w (hi lsr 8); + w (lo land 0xFF); w (lo lsr 8) +end + +(*--------------------------------------------------------------------------- + Copyright 2012 Daniel C. Bünzli + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + 3. Neither the name of Daniel C. Bünzli nor the names of + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ---------------------------------------------------------------------------*) diff --git a/samples/Objective-C/gen-cocoa-linguist-thrift.m b/samples/Objective-C/gen-cocoa-linguist-thrift.m new file mode 100644 index 00000000..670a85f7 --- /dev/null +++ b/samples/Objective-C/gen-cocoa-linguist-thrift.m @@ -0,0 +1,176 @@ +/** + * Autogenerated by Thrift Compiler (1.0.0-dev) + * + * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING + * @generated + */ + +#import + +#import "TProtocol.h" +#import "TApplicationException.h" +#import "TProtocolException.h" +#import "TProtocolUtil.h" +#import "TProcessor.h" +#import "TObjective-C.h" +#import "TBase.h" + + +#import "linguist.h" + +@implementation PullRequest + +- (id) init +{ + self = [super init]; +#if TARGET_OS_IPHONE || (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) +#endif + return self; +} + +- (id) initWithTitle: (NSString *) title +{ + self = [super init]; + __title = [title retain_stub]; + __title_isset = YES; + return self; +} + +- (id) initWithCoder: (NSCoder *) decoder +{ + self = [super init]; + if ([decoder containsValueForKey: @"title"]) + { + __title = [[decoder decodeObjectForKey: @"title"] retain_stub]; + __title_isset = YES; + } + return self; +} + +- (void) encodeWithCoder: (NSCoder *) encoder +{ + if (__title_isset) + { + [encoder encodeObject: __title forKey: @"title"]; + } +} + +- (NSUInteger) hash +{ + NSUInteger hash = 17; + hash = (hash * 31) ^ __title_isset ? 2654435761 : 0; + if (__title_isset) + { + hash = (hash * 31) ^ [__title hash]; + } + return hash; +} + +- (BOOL) isEqual: (id) anObject +{ + if (self == anObject) { + return YES; + } + if (![anObject isKindOfClass:[PullRequest class]]) { + return NO; + } + PullRequest *other = (PullRequest *)anObject; + if ((__title_isset != other->__title_isset) || + (__title_isset && ((__title || other->__title) && ![__title isEqual:other->__title]))) { + return NO; + } + return YES; +} + +- (void) dealloc +{ + [__title release_stub]; + [super dealloc_stub]; +} + +- (NSString *) title { + return [[__title retain_stub] autorelease_stub]; +} + +- (void) setTitle: (NSString *) title { + [title retain_stub]; + [__title release_stub]; + __title = title; + __title_isset = YES; +} + +- (BOOL) titleIsSet { + return __title_isset; +} + +- (void) unsetTitle { + [__title release_stub]; + __title = nil; + __title_isset = NO; +} + +- (void) read: (id ) inProtocol +{ + NSString * fieldName; + int fieldType; + int fieldID; + + [inProtocol readStructBeginReturningName: NULL]; + while (true) + { + [inProtocol readFieldBeginReturningName: &fieldName type: &fieldType fieldID: &fieldID]; + if (fieldType == TType_STOP) { + break; + } + switch (fieldID) + { + case 1: + if (fieldType == TType_STRING) { + NSString * fieldValue = [inProtocol readString]; + [self setTitle: fieldValue]; + } else { + [TProtocolUtil skipType: fieldType onProtocol: inProtocol]; + } + break; + default: + [TProtocolUtil skipType: fieldType onProtocol: inProtocol]; + break; + } + [inProtocol readFieldEnd]; + } + [inProtocol readStructEnd]; +} + +- (void) write: (id ) outProtocol { + [outProtocol writeStructBeginWithName: @"PullRequest"]; + if (__title_isset) { + if (__title != nil) { + [outProtocol writeFieldBeginWithName: @"title" type: TType_STRING fieldID: 1]; + [outProtocol writeString: __title]; + [outProtocol writeFieldEnd]; + } + } + [outProtocol writeFieldStop]; + [outProtocol writeStructEnd]; +} + +- (void) validate { + // check for required fields +} + +- (NSString *) description { + NSMutableString * ms = [NSMutableString stringWithString: @"PullRequest("]; + [ms appendString: @"title:"]; + [ms appendFormat: @"\"%@\"", __title]; + [ms appendString: @")"]; + return [NSString stringWithString: ms]; +} + +@end + + +@implementation linguistConstants ++ (void) initialize { +} +@end + diff --git a/samples/PHP/drupal.script! b/samples/PHP/drupal.php similarity index 100% rename from samples/PHP/drupal.script! rename to samples/PHP/drupal.php diff --git a/samples/PHP/file_display.inc b/samples/PHP/file_display.inc new file mode 100644 index 00000000..8133a3b9 --- /dev/null +++ b/samples/PHP/file_display.inc @@ -0,0 +1,142 @@ + TRUE, + 'title' => t('File display'), + 'description' => t('Displays the file with a configurable style.'), + 'required context' => new ctools_context_required(t('File'), 'entity:file'), + 'category' => t('File'), + 'defaults' => array( + 'displays' => array(), + ), +); + +/** + * Render the node content. + */ +function file_entity_file_display_content_type_render($subtype, $conf, $panel_args, $context) { + if (!empty($context) && empty($context->data)) { + return; + } + $file = isset($context->data) ? clone($context->data) : NULL; + $block = new stdClass(); + $block->module = 'file_entity'; + $block->delta = $file->fid; + + if (empty($file)) { + $block->delta = 'placeholder'; + $block->title = t('File display'); + $block->content = t('File display goes here.'); + } + else { + if (!empty($conf['identifier'])) { + $file->ctools_template_identifier = $conf['identifier']; + } + + $block->title = $file->filename; + $block->content = file_view_file($file, $conf['displays']); + } + + if (!empty($conf['link']) && $file) { + $block->title_link = entity_uri('file', $file); + } + + return $block; +} + +/** + * Edit form for this plugin. + */ +function file_entity_file_display_content_type_edit_form($form, &$form_state) { + $conf = $form_state['conf']; + $form['#tree'] = TRUE; + $form['#attached']['js'][] = drupal_get_path('module', 'file_entity') . '/file_entity.admin.js'; + + // Retrieve available formatters for this file. We can load all file types + // since we don't know which type the file is at this point. + $formatters = file_info_formatter_types(); + + // Formatter status. + $form['displays']['status'] = array( + '#type' => 'item', + '#title' => t('Enabled displays'), + '#prefix' => '
', + '#suffix' => '
', + ); + $i=0; + foreach ($formatters as $name => $formatter) { + $form['displays']['status'][$name] = array( + '#type' => 'checkbox', + '#title' => check_plain($formatter['label']), + '#default_value' => !empty($conf['displays'][$name]['status']), + '#description' => isset($formatter['description']) ? filter_xss($formatter['description']) : NULL, + '#parents' => array('displays', $name, 'status'), + '#weight' => (isset($formatter['weight']) ? $formatter['weight'] : 0) + ($i / 1000), + ); + $i++; + } + // Formatter order (tabledrag). + $form['displays']['order'] = array( + '#type' => 'item', + '#title' => t('Display precedence order'), + '#theme' => 'file_entity_file_display_order', + ); + foreach ($formatters as $name => $formatter) { + $form['displays']['order'][$name]['label'] = array( + '#markup' => check_plain($formatter['label']), + ); + $form['displays']['order'][$name]['weight'] = array( + '#type' => 'weight', + '#title' => t('Weight for @title', array('@title' => $formatter['label'])), + '#title_display' => 'invisible', + '#delta' => 50, + '#default_value' => isset($conf['displays'][$name]['weight']) ? $conf['displays'][$name]['weight'] : 0, + '#parents' => array('displays', $name, 'weight'), + ); + $form['displays']['order'][$name]['#weight'] = $form['displays']['order'][$name]['weight']['#default_value']; + } + + // Formatter settings. + $form['display_settings_title'] = array( + '#type' => 'item', + '#title' => t('Display settings'), + ); + $form['display_settings'] = array( + '#type' => 'vertical_tabs', + ); + $i=0; + foreach ($formatters as $name => $formatter) { + if (isset($formatter['settings callback']) && ($function = $formatter['settings callback']) && function_exists($function)) { + $defaults = !empty($formatter['default settings']) ? $formatter['default settings'] : array(); + $settings = !empty($conf['displays'][$name]['settings']) ? $conf['displays'][$name]['settings'] : array(); + $settings += $defaults; + $settings_form = $function($form, $form_state, $settings, $name, $file_type, $view_mode); + if (!empty($settings_form)) { + $form['displays']['settings'][$name] = array( + '#type' => 'fieldset', + '#title' => check_plain($formatter['label']), + '#parents' => array('displays', $name, 'settings'), + '#group' => 'display_settings', + '#weight' => (isset($formatter['weight']) ? $formatter['weight'] : 0) + ($i / 1000), + ) + $settings_form; + } + } + $i++; + } + return $form; +} + +function file_entity_file_display_content_type_edit_form_submit($form, &$form_state) { + // Copy everything from our defaults. + foreach (array_keys($form_state['plugin']['defaults']) as $key) { + $form_state['conf'][$key] = $form_state['values'][$key]; + } +} + +function file_entity_file_display_content_type_admin_title($subtype, $conf, $context) { + return t('"@s" content', array('@s' => $context->identifier)); +} diff --git a/samples/PHP/php.script! b/samples/PHP/php similarity index 100% rename from samples/PHP/php.script! rename to samples/PHP/php diff --git a/samples/PHP/php-script.script! b/samples/PHP/php-script similarity index 100% rename from samples/PHP/php-script.script! rename to samples/PHP/php-script diff --git a/samples/PHP/php2.script! b/samples/PHP/php2 similarity index 100% rename from samples/PHP/php2.script! rename to samples/PHP/php2 diff --git a/samples/PHP/root.php b/samples/PHP/root.php new file mode 100644 index 00000000..8f8be563 --- /dev/null +++ b/samples/PHP/root.php @@ -0,0 +1,6 @@ + diff --git a/samples/PLSQL/myobject.sql b/samples/PLSQL/myobject.sql new file mode 100644 index 00000000..dd2a68aa --- /dev/null +++ b/samples/PLSQL/myobject.sql @@ -0,0 +1,15 @@ +create or replace type myobject +AUTHID DEFINER +AS OBJECT +( + m_name varchar2(200), + member function toString RETURN VARCHAR2, + map member function Compare return varchar2 + +) +not instantiable not final; +/ + +prompt create type myarray +create or replace type myarray as table of myobject; +/ diff --git a/samples/PLSQL/packagebody.pkb b/samples/PLSQL/packagebody.pkb new file mode 100644 index 00000000..e5e80d99 --- /dev/null +++ b/samples/PLSQL/packagebody.pkb @@ -0,0 +1,58 @@ +CREATE OR REPLACE PACKAGE BODY linguistpackage +AS + /* + * Package: linguist pacakage body + * Purpose: a sample PLSQL file for linguist to work with + * + * Date: 03/03/2014 + * Author: david pyke le brun + * Comments: initial version + */ + +PROCEDURE proc_1 +IS +BEGIN +NULL; +END; + +-- functions with 1 arg +FUNCTION function1( param1 VARCHAR2 ) RETURN VARCHAR2 +IS +CURSOR c IS +select * from dual; +v c%ROWTYPE; +BEGIN + open c; + fetch c into v; + close c; + + return v; +end; + +FUNCTION function2( param1 NUMBER ) RETURN DATE +IS +BEGIN + return SYSDATE; +end; + +--a few more to use all basic SQL types +FUNCTION function3( param1 TIMESTAMP ) RETURN CHAR +IS +BEGIN +IF 1 = 2 THEN +return 'Y'; +ELSE +return 'N'; +END IF; +return NULL; +END; + + +FUNCTION function4( param1 CLOB ) RETURN BLOB +IS +BEGIN + return null; +END; + +END linguistpackage; +/ diff --git a/samples/PLSQL/packageheader.pks b/samples/PLSQL/packageheader.pks new file mode 100644 index 00000000..408cdca3 --- /dev/null +++ b/samples/PLSQL/packageheader.pks @@ -0,0 +1,28 @@ +CREATE OR REPLACE PACKAGE linguistpackage +AUTHID DEFINER +AS + /* + * Package: linguist pacakage + * Purpose: a sample PLSQL file for linguist to work with + * + * Date: 03/03/2014 + * Author: david pyke le brun + * Comments: initial version + */ + +k_constant CONSTANT NUMBER(10,2) := 3.14; + +--basic procedure +PROCEDURE proc_1; + +-- functions with 1 arg +FUNCTION function1( param1 VARCHAR2 ) RETURN VARCHAR2; +FUNCTION function2( param1 NUMBER ) RETURN DATE; + +--a few more to use all basic SQL types +FUNCTION function3( param1 TIMESTAMP ) RETURN CHAR; +FUNCTION function4( param1 CLOB ) RETURN BLOB; + +END linguistpackage; +/ + diff --git a/samples/PLSQL/prime#.plsql b/samples/PLSQL/prime#.plsql new file mode 100644 index 00000000..1a4785a1 --- /dev/null +++ b/samples/PLSQL/prime#.plsql @@ -0,0 +1,93 @@ +create or replace package prime# +is + invalid_argument_error exception; + + function nth ( + i_num pls_integer + ) return number; +end prime#; +/ + +create or replace package body prime# +is + type t_primes is table of number index by pls_integer; + b_primes t_primes; + + function is_prime( + i_candidate number + ) return boolean + is + l_num number := 1; + l_prime number; + l_result number; + begin + if i_candidate < 2 then + return false; + end if; + + loop + l_prime := nth(l_num); + if l_prime = i_candidate then + return true; + end if; + + l_result := i_candidate / l_prime; + if l_result = ceil(l_result) then + return false; + end if; + + l_num := l_num + 1; + exit when l_result <= l_prime; + end loop; + + return true; + end is_prime; + + function next ( + i_prime pls_integer + ) return number + is + l_next number; + begin + l_next := i_prime + case mod(i_prime, 2) when 0 then 1 else 2 end; + + while not is_prime(l_next) loop + l_next := l_next + 2; + end loop; + return l_next; + end next; + + function nth ( + i_num pls_integer + ) return number + is + l_index number := 2; + l_prime number := 3; + begin + if i_num < 1 + or ceil(i_num) != i_num + then + raise invalid_argument_error; + end if; + + case i_num + when 1 then return 2; + else + if b_primes.exists(i_num) then + return b_primes(i_num); + end if; + while l_index < i_num loop + l_index := l_index + 1; + if b_primes.exists(l_index) then + l_prime := b_primes(l_index); + else + l_prime := next(l_prime); + b_primes(l_index) := l_prime; + end if; + end loop; + return l_prime; + end case; + end nth; + +end prime#; +/ \ No newline at end of file diff --git a/samples/PLSQL/who_called_me.sql b/samples/PLSQL/who_called_me.sql new file mode 100644 index 00000000..fee4ed9b --- /dev/null +++ b/samples/PLSQL/who_called_me.sql @@ -0,0 +1,65 @@ +CREATE OR REPLACE PROCEDURE who_called_me +( owner OUT VARCHAR2, + name OUT VARCHAR2, + lineno OUT NUMBER, + caller_t OUT VARCHAR2 , + depth NUMBER DEFAULT 1 +) +AUTHID DEFINER +AS +--depth based version of who_called_me from asktom + call_stack VARCHAR2(4096) default dbms_utility.format_call_stack; + n NUMBER; + found_stack BOOLEAN DEFAULT FALSE; + line VARCHAR2(255); + cnt NUMBER := 0; +BEGIN + LOOP + n := instr( call_stack, chr(10) ); + exit when ( n is NULL or n = 0 ); +-- + line := substr( call_stack, 1, n-1 ); + call_stack := substr( call_stack, n+1 ); +-- + if ( NOT found_stack ) then + if ( line like '%handle%number%name%' ) then + found_stack := TRUE; + end if; + else + cnt := cnt + 1; + -- cnt = 1 is ME + -- cnt = 2 is MY Caller + -- cnt = 3 is Their Caller + if ( cnt = (2+depth) ) then + lineno := to_number(substr( line, 13, 8 )); + line := substr( line, 23 ); --set to rest of line .. change from 21 to 23 + if ( line like 'pr%' ) then + n := length( 'procedure ' ); + elsif ( line like 'fun%' ) then + n := length( 'function ' ); + elsif ( line like 'package body%' ) then + n := length( 'package body ' ); + elsif ( line like 'pack%' ) then + n := length( 'package ' ); + elsif ( line like 'anonymous%' ) then + n := length( 'anonymous block ' ); + else + n := null; + end if; + if ( n is not null ) then + caller_t := ltrim(rtrim(upper(substr( line, 1, n-1 )))); + else + caller_t := 'TRIGGER'; + end if; + + line := substr( line, nvl(n,1) ); + n := instr( line, '.' ); + owner := ltrim(rtrim(substr( line, 1, n-1 ))); + name := LTRIM(RTRIM(SUBSTR( LINE, N+1 ))); + exit; + END IF; + END IF; + END LOOP; +END; +/ + diff --git a/samples/PLpgSQL/plpgsql_lint-8.4.sql b/samples/PLpgSQL/plpgsql_lint-8.4.sql new file mode 100644 index 00000000..72c84469 --- /dev/null +++ b/samples/PLpgSQL/plpgsql_lint-8.4.sql @@ -0,0 +1,165 @@ +load 'plpgsql'; +load 'plpgsql_lint'; + +create table t1(a int, b int); + +create function f1() +returns void as $$ +begin + if false then + update t1 set c = 30; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create function g1(out a int, out b int) +as $$ + select 10,20; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + r := g1(); + if false then + raise notice '%', r.c; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function g1(out a int, out b int) +returns setof record as $$ +select * from t1; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + raise notice '%', r.c; + end loop; +end; +$$ language plpgsql; + +select f1(); + +create or replace function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + r.c := 20; + end loop; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function f1() +returns int as $$ +declare r int; +begin + if false then + r := a + b; + end if; + return r; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '%', 1, 2; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '% %'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +declare r int[]; +begin + if false then + r[c+10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + + +create or replace function f1() +returns void as $$ +declare r int; +begin + if false then + r[10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create type diagnostic_info_type as ( + status text, + message text, + detail text, + row_count int); + +create or replace function f1() +returns void as $$ +declare + dg record; +begin + dg := NULL::diagnostic_info_type; + if false then + dg.status := '00000'; + dg.mistake := 'hello'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); diff --git a/samples/PLpgSQL/plpgsql_lint-9.0.sql b/samples/PLpgSQL/plpgsql_lint-9.0.sql new file mode 100644 index 00000000..72c84469 --- /dev/null +++ b/samples/PLpgSQL/plpgsql_lint-9.0.sql @@ -0,0 +1,165 @@ +load 'plpgsql'; +load 'plpgsql_lint'; + +create table t1(a int, b int); + +create function f1() +returns void as $$ +begin + if false then + update t1 set c = 30; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create function g1(out a int, out b int) +as $$ + select 10,20; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + r := g1(); + if false then + raise notice '%', r.c; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function g1(out a int, out b int) +returns setof record as $$ +select * from t1; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + raise notice '%', r.c; + end loop; +end; +$$ language plpgsql; + +select f1(); + +create or replace function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + r.c := 20; + end loop; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function f1() +returns int as $$ +declare r int; +begin + if false then + r := a + b; + end if; + return r; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '%', 1, 2; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '% %'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +declare r int[]; +begin + if false then + r[c+10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + + +create or replace function f1() +returns void as $$ +declare r int; +begin + if false then + r[10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create type diagnostic_info_type as ( + status text, + message text, + detail text, + row_count int); + +create or replace function f1() +returns void as $$ +declare + dg record; +begin + dg := NULL::diagnostic_info_type; + if false then + dg.status := '00000'; + dg.mistake := 'hello'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); diff --git a/samples/PLpgSQL/plpgsql_lint-9.1.sql b/samples/PLpgSQL/plpgsql_lint-9.1.sql new file mode 100644 index 00000000..2cc532a1 --- /dev/null +++ b/samples/PLpgSQL/plpgsql_lint-9.1.sql @@ -0,0 +1,179 @@ +load 'plpgsql'; +load 'plpgsql_lint'; + +create table t1(a int, b int); + +create function f1() +returns void as $$ +begin + if false then + update t1 set c = 30; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create function g1(out a int, out b int) +as $$ + select 10,20; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + r := g1(); + if false then + raise notice '%', r.c; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function g1(out a int, out b int) +returns setof record as $$ +select * from t1; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + raise notice '%', r.c; + end loop; +end; +$$ language plpgsql; + +select f1(); + +create or replace function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + r.c := 20; + end loop; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function f1() +returns int as $$ +declare r int; +begin + if false then + r := a + b; + end if; + return r; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '%', 1, 2; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '% %'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +declare r int[]; +begin + if false then + r[c+10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + + +create or replace function f1() +returns void as $$ +declare r int; +begin + if false then + r[10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create type diagnostic_info_type as ( + status text, + message text, + detail text, + row_count int); + +create or replace function f1() +returns void as $$ +declare dg record; +begin + dg := NULL::diagnostic_info_type; + if false then + dg.status := '00000'; + dg.mistake := 'hello'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +declare dg record; +begin + if false then + dg := 10,20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + diff --git a/samples/PLpgSQL/plpgsql_lint-9.2.sql b/samples/PLpgSQL/plpgsql_lint-9.2.sql new file mode 100644 index 00000000..73da6e67 --- /dev/null +++ b/samples/PLpgSQL/plpgsql_lint-9.2.sql @@ -0,0 +1,166 @@ +load 'plpgsql'; +load 'plpgsql_lint'; + +create table t1(a int, b int); + +create function f1() +returns void as $$ +begin + if false then + update t1 set c = 30; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create function g1(out a int, out b int) +as $$ + select 10,20; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + r := g1(); + if false then + raise notice '%', r.c; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function g1(out a int, out b int) +returns setof record as $$ +select * from t1; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + raise notice '%', r.c; + end loop; +end; +$$ language plpgsql; + +select f1(); + +create or replace function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + r.c := 20; + end loop; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function f1() +returns int as $$ +declare r int; +begin + if false then + r := a + b; + end if; + return r; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '%', 1, 2; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '% %'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +declare r int[]; +begin + if false then + r[c+10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + + +create or replace function f1() +returns void as $$ +declare r int; +begin + if false then + r[10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create type _exception_type as ( + state text, + message text, + detail text); + +create or replace function f1() +returns void as $$ +declare + _exception record; +begin + _exception := NULL::_exception_type; +exception when others then + get stacked diagnostics + _exception.state = RETURNED_SQLSTATE, + _exception.message = MESSAGE_TEXT, + _exception.detail = PG_EXCEPTION_DETAIL, + _exception.hint = PG_EXCEPTION_HINT; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); diff --git a/samples/PLpgSQL/plpgsql_lint-9.3.sql b/samples/PLpgSQL/plpgsql_lint-9.3.sql new file mode 100644 index 00000000..73da6e67 --- /dev/null +++ b/samples/PLpgSQL/plpgsql_lint-9.3.sql @@ -0,0 +1,166 @@ +load 'plpgsql'; +load 'plpgsql_lint'; + +create table t1(a int, b int); + +create function f1() +returns void as $$ +begin + if false then + update t1 set c = 30; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create function g1(out a int, out b int) +as $$ + select 10,20; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + r := g1(); + if false then + raise notice '%', r.c; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function g1(out a int, out b int) +returns setof record as $$ +select * from t1; +$$ language sql; + +create function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + raise notice '%', r.c; + end loop; +end; +$$ language plpgsql; + +select f1(); + +create or replace function f1() +returns void as $$ +declare r record; +begin + for r in select * from g1() + loop + r.c := 20; + end loop; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); +drop function g1(); + +create function f1() +returns int as $$ +declare r int; +begin + if false then + r := a + b; + end if; + return r; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '%', 1, 2; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +begin + if false then + raise notice '% %'; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create or replace function f1() +returns void as $$ +declare r int[]; +begin + if false then + r[c+10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + + +create or replace function f1() +returns void as $$ +declare r int; +begin + if false then + r[10] := 20; + end if; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); + +create type _exception_type as ( + state text, + message text, + detail text); + +create or replace function f1() +returns void as $$ +declare + _exception record; +begin + _exception := NULL::_exception_type; +exception when others then + get stacked diagnostics + _exception.state = RETURNED_SQLSTATE, + _exception.message = MESSAGE_TEXT, + _exception.detail = PG_EXCEPTION_DETAIL, + _exception.hint = PG_EXCEPTION_HINT; +end; +$$ language plpgsql; + +select f1(); + +drop function f1(); diff --git a/samples/Pascal/image_url.inc b/samples/Pascal/image_url.inc new file mode 100644 index 00000000..9f7090fa --- /dev/null +++ b/samples/Pascal/image_url.inc @@ -0,0 +1,37 @@ + function GetUnixMangaImageURL: Boolean; + var + i: Integer; + l: TStringList; + s: String; + begin + l := TStringList.Create; + s := manager.container.PageContainerLinks[workCounter]; + Result := GetPage(TObject(l), s , manager.container.Manager.retryConnect); + + if Self.Terminated then + begin + l.Free; + parse.Free; + Exit; + end; + + parse := TStringList.Create; + Parser := THTMLParser.Create(PChar(l.Text)); + Parser.OnFoundTag := OnTag; + Parser.OnFoundText := OnText; + Parser.Exec; + Parser.Free; + l.Free; + if parse.Count > 0 then + begin + for i := 0 to parse.Count - 1 do + begin + if (Pos('STYLE="border', parse[i]) > 0) and (Pos(' 0) then + begin + manager.container.PageLinks[workCounter] := Trim(GetVal(parse[i], 'SRC')); + Break; + end; + end; + end; + parse.Free; + end; diff --git a/samples/Pascal/libc.inc b/samples/Pascal/libc.inc new file mode 100644 index 00000000..15ced61e --- /dev/null +++ b/samples/Pascal/libc.inc @@ -0,0 +1,56 @@ +{ + This file is part of the Free Component Library (FCL) + Copyright (c) 1999-2002 by the Free Pascal development team + + BIOS functions unit for Nintendo DS + Copyright (c) 2006 by Francesco Lombardi + + See the file COPYING.FPC, included in this distribution, + for details about the copyright. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + + *****************************************************************************} + +function __errno: plongint; cdecl; export; +begin + +end; + + +function S_ISBLK(m: longint): boolean; inline; +begin + result := (m and _IFMT) = _IFBLK; +end; + +function S_ISCHR(m: longint): boolean; inline; +begin + result := (m and _IFMT) = _IFCHR; +end; + +function S_ISDIR(m: longint): boolean; inline; +begin + result := (m and _IFMT) = _IFDIR; +end; + +function S_ISFIFO(m: longint): boolean; inline; +begin + result := (m and _IFMT) = _IFIFO; +end; + +function S_ISREG(m: longint): boolean; inline; +begin + result := (m and _IFMT) = _IFREG; +end; + +function S_ISLNK(m: longint): boolean; inline; +begin + result := (m and _IFMT) = _IFLNK; +end; + +function S_ISSOCK(m: longint): boolean; inline; +begin + result := (m and _IFMT) = _IFSOCK; +end; diff --git a/samples/Pascal/vmops_impl.inc b/samples/Pascal/vmops_impl.inc new file mode 100644 index 00000000..71ab8727 --- /dev/null +++ b/samples/Pascal/vmops_impl.inc @@ -0,0 +1,502 @@ +operator+(a, b: TVector)res: TVector; +var + i, an, bn, rn: Integer; +begin + an := Length(a); + bn := Length(b); + rn := math.max(an, bn); + SetLength(res, rn); + for i := 0 to rn - 1 do res[i] := a[i mod an] + b[i mod bn]; +end; + +operator+(a: TVector; b: Double)res: TVector; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] + b; +end; + +operator+(a: Double; b: TVector)res: TVector; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a + b[i]; +end; + +operator-(a: TVector)res: TVector; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := -a[i]; +end; + +operator-(a, b: TVector)res: TVector; +var + i, an, bn, rn: Integer; +begin + an := Length(a); + bn := Length(b); + rn := math.max(an, bn); + SetLength(res, rn); + for i := 0 to rn - 1 do res[i] := a[i mod an] - b[i mod bn]; +end; + +operator-(a: TVector; b: Double)res: TVector; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] - b; +end; + +operator-(a: Double; b: TVector)res: TVector; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a - b[i]; +end; + +operator*(a, b: TVector)res: TVector; +var + i, an, bn, rn: Integer; +begin + an := Length(a); + bn := Length(b); + rn := math.max(an, bn); + SetLength(res, rn); + for i := 0 to rn - 1 do res[i] := a[i mod an] * b[i mod bn]; +end; + +operator*(a: TVector; b: Double)res: TVector; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] * b; +end; + +operator*(a: Double; b: TVector)res: TVector; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a * b[i]; +end; + +operator/(a, b: TVector)res: TVector; +var + i, an, bn, rn: Integer; +begin + an := Length(a); + bn := Length(b); + rn := math.max(an, bn); + SetLength(res, rn); + for i := 0 to rn - 1 do res[i] := a[i mod an] / b[i mod bn]; +end; + +operator/(a: TVector; b: Double)res: TVector; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] / b; +end; + +operator/(a: Double; b: TVector)res: TVector; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a / b[i]; +end; + +operator**(a, b: Double)res: Double; +begin + if IsNan(a) or IsNan(b) then res := NaN + else if b = Infinity then begin + if a = NegInfinity then res := NaN + else case sign(a) of + 1: res := Infinity; + 0: res := 0; + -1: res := NegInfinity; + end; + end else if b = NegInfinity then begin + if a = NegInfinity then res := NaN + else case sign(a) of + 1: res := 0; + 0: res := Infinity; + -1: res := 0; + end; + end else res := power(a, b); +end; + +operator**(a, b: TVector)res: TVector; +var + i, an, bn, rn: Integer; +begin + an := Length(a); + bn := Length(b); + rn := math.max(an, bn); + SetLength(res, rn); + for i := 0 to rn - 1 do res[i] := a[i mod an] ** b[i mod bn]; +end; + +operator**(a: TVector; b: Double)res: TVector; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] ** b; +end; + +operator**(a: Double; b: TVector)res: TVector; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a ** b[i]; +end; + +operator><(a: TVector; b: TVector)res: TMatrix; +var + i, an, bn, rn: Integer; +begin + an := Length(a); + bn := Length(b); + if an * bn = 0 then Exit(nil); + rn := math.max(an, bn); + SetLength(res, 1); + SetLength(res[0], 1); + res[0][0] := 0; + for i := 0 to rn - 1 do res[0][0] := res[0][0] + a[i mod an] * b[i mod bn]; +end; + +operator+(a: TMatrix; b: TMatrix)res: TMatrix; +var + i, an: Integer; +begin + an := Length(a); + SetLength(res, an); + for i := 0 to an - 1 do res[i] := a[i] + b[i]; +end; + +operator+(a: TMatrix; b: Double)res: TMatrix; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] + b; +end; + +operator+(a: Double; b: TMatrix)res: TMatrix; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a + b[i]; +end; + +operator+(a: TMatrix; b: TVector)res: TMatrix; +begin + res := a + matrix(b, Length(a), Length(a[0])); +end; + +operator+(a: TVector; b: TMatrix)res: TMatrix; +begin + res := b + matrix(a, Length(b), Length(b[0])); +end; + +operator-(a: TMatrix)res: TMatrix; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := -a[i]; +end; + +operator-(a: TMatrix; b: TMatrix)res: TMatrix; +var + i, an: Integer; +begin + an := Length(a); + SetLength(res, an); + for i := 0 to an - 1 do res[i] := a[i] - b[i]; +end; + +operator-(a: TMatrix; b: Double)res: TMatrix; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] - b; +end; + +operator-(a: Double; b: TMatrix)res: TMatrix; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a - b[i]; +end; + +operator-(a: TMatrix; b: TVector)res: TMatrix; +begin + res := a - matrix(b, Length(a), Length(a[0])); +end; + +operator-(a: TVector; b: TMatrix)res: TMatrix; +begin + res := b - matrix(a, Length(b), Length(b[0])); +end; + +operator*(a: TMatrix; b: TMatrix)res: TMatrix; +var + i, an: Integer; +begin + an := Length(a); + SetLength(res, an); + for i := 0 to an - 1 do res[i] := a[i] * b[i]; +end; + +operator*(a: TMatrix; b: Double)res: TMatrix; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] * b; +end; + +operator*(a: Double; b: TMatrix)res: TMatrix; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a * b[i]; +end; + +operator*(a: TMatrix; b: TVector)res: TMatrix; +begin + res := a * matrix(b, Length(a), Length(a[0])); +end; + +operator*(a: TVector; b: TMatrix)res: TMatrix; +begin + res := b * matrix(a, Length(b), Length(b[0])); +end; + +operator/(a: TMatrix; b: TMatrix)res: TMatrix; +var + i, an: Integer; +begin + an := Length(a); + SetLength(res, an); + for i := 0 to an - 1 do res[i] := a[i] / b[i]; +end; + +operator/(a: TMatrix; b: Double)res: TMatrix; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] / b; +end; + +operator/(a: Double; b: TMatrix)res: TMatrix; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a / b[i]; +end; + +operator/(a: TMatrix; b: TVector)res: TMatrix; +begin + res := a / matrix(b, Length(a), Length(a[0])); +end; + +operator/(a: TVector; b: TMatrix)res: TMatrix; +begin + res := b / matrix(a, Length(b), Length(b[0])); +end; + +operator**(a: TMatrix; b: TMatrix)res: TMatrix; +var + i, an: Integer; +begin + an := Length(a); + SetLength(res, an); + for i := 0 to an - 1 do res[i] := a[i] ** b[i]; +end; + +operator**(a: TMatrix; b: Double)res: TMatrix; +var + i, n: Integer; +begin + n := Length(a); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a[i] ** b; +end; + +operator**(a: Double; b: TMatrix)res: TMatrix; +var + i, n: Integer; +begin + n := Length(b); + SetLength(res, n); + for i := 0 to n - 1 do res[i] := a ** b[i]; +end; + +operator**(a: TMatrix; b: TVector)res: TMatrix; +begin + res := a ** matrix(b, Length(a), Length(a[0])); +end; + +operator**(a: TVector; b: TMatrix)res: TMatrix; +begin + res := b ** matrix(a, Length(b), Length(b[0])); +end; + +operator><(a: TMatrix; b: TMatrix)res: TMatrix; +var + i, j, n, m: Integer; +begin + n := Length(a); + m := Length(b); + if (n = 1) and (m = 1) then Exit(vector(a) >< vector(b)); + SetLength(res, n); + for i := 0 to n - 1 do begin + j := 0; + res[i] := a[i][j] * b[j]; + for j := 1 to m - 1 do res[i] := res[i] + a[i][j] * b[j]; + end; +end; + +operator><(a: TMatrix; b: TVector)res: TMatrix; +begin + res := a >< matrix(b, 1, Length(b)); +end; + +operator><(a: TVector; b: TMatrix)res: TMatrix; +begin + res := matrix(a, 1, Length(a)) >< b; +end; + +function vector(a: array of const): TVector; +var + i, n: Integer; +begin + n := Length(a); + SetLength(Result, n); + for i := 0 to n - 1 do case a[i].VType of + vtInteger: Result[i] := a[i].VInteger; + vtExtended: Result[i] := a[i].VExtended^; + vtCurrency: Result[i] := a[i].VCurrency^; + vtInt64: Result[i] := a[i].VInt64^; + end; +end; + +function vector(a: TMatrix): TVector; inline; +var + i, j, n, m : Integer; +begin + n := Length(a); + if n = 0 then Exit(nil); + m := Length(a[0]); + if m = 0 then Exit(nil); + SetLength(Result, m * n); + for i := 0 to m - 1 do + for j := 0 to n - 1 do + Result[i * n + j] := a[j][i]; +end; + +function matrix(data: TVector; nrow, ncol: Integer; byrow: Boolean): TMatrix; +var + i, j, n, c: Integer; +begin + n := Length(data); + if n = 0 then Exit(nil); + if (nrow = 0) and (ncol = 0) then ncol := 1; + if nrow = 0 then nrow := (n div ncol) + sign(n mod ncol); + if ncol = 0 then ncol := (n div nrow) + sign(n mod nrow); + SetLength(Result, nrow); + for i := 0 to nrow - 1 do begin + SetLength(Result[i], ncol); + for j := 0 to ncol - 1 do begin + if byrow then c := i * ncol + j else c := j * nrow + i; + Result[i][j] := data[c mod n]; + end; + end; +end; + +function matrix(data: TMatrix; nrow, ncol: Integer; byrow: Boolean): TMatrix; +begin + Result := matrix(vector(data), nrow, ncol, byrow); +end; + +function rep(data: TVector; times: TVector): TVector; +var + i, j, n, m, s, c: Integer; +begin + Result := nil; + n := Length(data); + m := Length(times); + if n * m = 0 then Exit; + s := 0; + for i := 0 to n - 1 do begin + c := trunc(times[i mod m]); + if c > 0 then s += c; + end; + SetLength(Result, s); + c := 0; + for i := 0 to n - 1 do begin + s := trunc(times[i mod m]); + for j := 1 to s do begin + Result[c] := data[i]; + Inc(c); + end; + end; +end; + +function rep(data: TVector; len: Integer): TVector; +var + i, j, n: Integer; +begin + n := Length(data); + SetLength(Result, n * len); + if n = 0 then Exit; + for i := 0 to len - 1 do + for j := 0 to n - 1 do + Result[i * n + j] := data[j]; +end; + +function rep(data: Double; len: Integer): TVector; +var + i: Integer; +begin + SetLength(Result, len); + for i := 0 to len - 1 do Result[i] := data; +end; diff --git a/samples/Perl/exception_handler.pl b/samples/Perl/exception_handler.pl new file mode 100644 index 00000000..14807ced --- /dev/null +++ b/samples/Perl/exception_handler.pl @@ -0,0 +1,117 @@ +package exception_handler; +use sigtrap qw(die normal-signals); +use IO::Handle; +use Carp; +use File::Spec; +use File::Basename; +use Data::Dumper; + +use sigtrap 'handler', \&tm_die; + +$Carp::CarpLevel = 1; # How many extra package levels to skip on carp. + +BEGIN { + *CORE::GLOBAL::die = \&tm_die; + $main::SIG{__DIE__} = \&tm_die; + my $error_fd = $ENV{"TM_ERROR_FD"}; + open (TM_ERROR_FD, ">&=$error_fd"); + TM_ERROR_FD->autoflush(1); +} + +sub realwarn { CORE::warn(@_); } +sub realdie { CORE::die(@_); } + +sub longmess { + my ($arg, @rest) = shift; + { + local $@; + # XXX fix require to not clear $@? + # don't use require unless we need to (for Safe compartments) + require Carp::Heavy unless $INC{"Carp/Heavy.pm"}; + } + # Icky backwards compatibility wrapper. :-( + my $call_pack = caller(); + if ($Internal{$call_pack} or $Carp::CarpInternal{$call_pack}) { + return longmess_heavy($arg, @rest); + } + else { + local $Carp::CarpLevel = $Carp::CarpLevel + 1; + return longmess_heavy($arg, @rest); + } +} + +sub longmess_heavy { + return @_ if ref($_[0]); # don't break references as exceptions + my $i = Carp::long_error_loc(); + my ($arg, @rest) = @_; + return ret_backtrace($i, $arg, @rest); +} + +sub quote { + my $str = shift; + $str =~ s/([^A-Za-z0-9\/_.-])/sprintf("%%%02X", ord($1))/seg; + return $str; +} + +sub url_and_display_name { + my $file = shift; + my $url = ""; + my $display_name = ""; + $display_name = basename($file); + $url = 'url=file://' . quote($file); + return ($url, $display_name); +} + +# Returns a full stack backtrace starting from where it is +# told. +sub ret_backtrace { + my ($i, $arg, @rest) = @_; + my $mess; + $i++; + + my $tid_msg = ''; + if (defined &Thread::tid) { + my $tid = Thread->self->tid; + $tid_msg = " thread $tid" if $tid; + } + + my %i = Carp::caller_info($i); + $arg =~ s/\n/\/g; + $i{sub} =~ s/tm_die/die/g; + $mess .= "
\n"; + $mess .= "

$arg

\n"; + $mess .= "
\n"; + my ($url, $display_name) = url_and_display_name($i{file}); + $mess .= "\n"; + while (my %i = Carp::caller_info(++$i)) { + ($url, $display_name) = url_and_display_name($i{file}); + $mess .= "\n"; + } + $mess .= "
$i{sub} in $display_name at line $i{line}$tid_msg
$i{sub} in $display_name at line $i{line}$tid_msg
"; + return $mess; +} + +sub ineval { + (exists $ENV{MOD_PERL} ? 0 : $^S) || Carp::longmess() =~ /eval [\{\']/m +} + +sub htmlize { + my $l = shift; + $l =~ s/&/&/g; + $l =~ s//>/g; + return $l; +} + +sub tm_die { + my ($arg,@rest) = @_; + if (ineval()) { + realdie ($arg,@rest) if ineval(); + } + if (!ref($arg)) { + print TM_ERROR_FD longmess($arg,@rest); + } + exit($!); +} + +1; diff --git a/samples/Perl/getchar.al b/samples/Perl/getchar.al new file mode 100644 index 00000000..ecd06589 --- /dev/null +++ b/samples/Perl/getchar.al @@ -0,0 +1,13 @@ +# NOTE: Derived from ../../lib/POSIX.pm. +# Changes made here will be lost when autosplit is run again. +# See AutoSplit.pm. +package POSIX; + +#line 318 "../../lib/POSIX.pm (autosplit into ../../lib/auto/POSIX/getchar.al)" +sub getchar { + usage "getchar()" if @_ != 0; + CORE::getc(STDIN); +} + +# end of POSIX::getchar +1; diff --git a/samples/Perl/perl.script! b/samples/Perl/perl similarity index 100% rename from samples/Perl/perl.script! rename to samples/Perl/perl diff --git a/samples/Perl/strict.t b/samples/Perl/strict.t index 04cea2f8..a9d4ec8c 100644 --- a/samples/Perl/strict.t +++ b/samples/Perl/strict.t @@ -1,4 +1,5 @@ use Test::Base; +use Test::More; __DATA__ === Strict Test diff --git a/samples/Perl6/test.p6 b/samples/Perl6/test.p6 index 3d12b56c..65073eb9 100644 --- a/samples/Perl6/test.p6 +++ b/samples/Perl6/test.p6 @@ -73,26 +73,6 @@ Here's some POD! Wooo say('this is not!'); -=table - Of role things - -say('not in your table'); -#= A single line declarator "block" (with a keyword like role) -#| Another single line declarator "block" (with a keyword like role) -#={ - A declarator block (with a keyword like role) - } -#|{ - Another declarator block (with a keyword like role) - } -#= { A single line declarator "block" with a brace (with a keyword like role) -#=« - More declarator blocks! (with a keyword like role) - » -#|« - More declarator blocks! (with a keyword like role) - » - say 'Moar code!'; my $don't = 16; diff --git a/samples/PicoLisp/simul.l b/samples/PicoLisp/simul.l new file mode 100644 index 00000000..df4c219c --- /dev/null +++ b/samples/PicoLisp/simul.l @@ -0,0 +1,165 @@ +# 11dec13abu +# (c) Software Lab. Alexander Burger + +(de permute (Lst) + (ifn (cdr Lst) + (cons Lst) + (mapcan + '((X) + (mapcar + '((Y) (cons X Y)) + (permute (delete X Lst)) ) ) + Lst ) ) ) + +(de subsets (N Lst) + (cond + ((=0 N) '(NIL)) + ((not Lst)) + (T + (conc + (mapcar + '((X) (cons (car Lst) X)) + (subsets (dec N) (cdr Lst)) ) + (subsets N (cdr Lst)) ) ) ) ) + +(de shuffle (Lst) + (by '(NIL (rand)) sort Lst) ) + +(de samples (Cnt Lst) + (make + (until (=0 Cnt) + (when (>= Cnt (rand 1 (length Lst))) + (link (car Lst)) + (dec 'Cnt) ) + (pop 'Lst) ) ) ) + + +# Genetic Algorithm +(de gen ("Pop" "Cond" "Re" "Mu" "Se") + (until ("Cond" "Pop") + (for ("P" "Pop" "P" (cdr "P")) + (set "P" + (maxi "Se" # Selection + (make + (for ("P" "Pop" "P") + (rot "P" (rand 1 (length "P"))) + (link # Recombination + Mutation + ("Mu" ("Re" (pop '"P") (pop '"P"))) ) ) ) ) ) ) ) + (maxi "Se" "Pop") ) + + +# Alpha-Beta tree search +(de game ("Flg" "Cnt" "Moves" "Move" "Cost") + (let ("Alpha" '(1000000) "Beta" -1000000) + (recur ("Flg" "Cnt" "Alpha" "Beta") + (let? "Lst" ("Moves" "Flg") + (if (=0 (dec '"Cnt")) + (loop + ("Move" (caar "Lst")) + (setq "*Val" (list ("Cost" "Flg") (car "Lst"))) + ("Move" (cdar "Lst")) + (T (>= "Beta" (car "*Val")) + (cons "Beta" (car "Lst") (cdr "Alpha")) ) + (when (> (car "Alpha") (car "*Val")) + (setq "Alpha" "*Val") ) + (NIL (setq "Lst" (cdr "Lst")) "Alpha") ) + (setq "Lst" + (sort + (mapcar + '(("Mov") + (prog2 + ("Move" (car "Mov")) + (cons ("Cost" "Flg") "Mov") + ("Move" (cdr "Mov")) ) ) + "Lst" ) ) ) + (loop + ("Move" (cadar "Lst")) + (setq "*Val" + (if (recurse (not "Flg") "Cnt" (cons (- "Beta")) (- (car "Alpha"))) + (cons (- (car @)) (cdar "Lst") (cdr @)) + (list (caar "Lst") (cdar "Lst")) ) ) + ("Move" (cddar "Lst")) + (T (>= "Beta" (car "*Val")) + (cons "Beta" (cdar "Lst") (cdr "Alpha")) ) + (when (> (car "Alpha") (car "*Val")) + (setq "Alpha" "*Val") ) + (NIL (setq "Lst" (cdr "Lst")) "Alpha") ) ) ) ) ) ) + + +### Grids ### +(de grid (DX DY FX FY) + (let Grid + (make + (for X DX + (link + (make + (for Y DY + (set + (link + (if (> DX 26) + (box) + (intern (pack (char (+ X 96)) Y)) ) ) + (cons (cons) (cons)) ) ) ) ) ) ) + (let West (and FX (last Grid)) + (for (Lst Grid Lst) + (let + (Col (pop 'Lst) + East (or (car Lst) (and FX (car Grid))) + South (and FY (last Col)) ) + (for (L Col L) + (with (pop 'L) + (set (: 0 1) (pop 'West)) # west + (con (: 0 1) (pop 'East)) # east + (set (: 0 -1) South) # south + (con (: 0 -1) # north + (or (car L) (and FY (car Col))) ) + (setq South This) ) ) + (setq West Col) ) ) ) + Grid ) ) + +(de west (This) + (: 0 1 1) ) + +(de east (This) + (: 0 1 -1) ) + +(de south (This) + (: 0 -1 1) ) + +(de north (This) + (: 0 -1 -1) ) + +(de disp ("Grid" "How" "Fun" "X" "Y" "DX" "DY") + (setq "Grid" + (if "X" + (mapcar + '((L) (flip (head "DY" (nth L "Y")))) + (head "DX" (nth "Grid" "X")) ) + (mapcar reverse "Grid") ) ) + (let (N (+ (length (cdar "Grid")) (or "Y" 1)) Sp (length N)) + ("border" north) + (while (caar "Grid") + (prin " " (align Sp N) " " + (and "How" (if (and (nT "How") (west (caar "Grid"))) " " '|)) ) + (for L "Grid" + (prin + ("Fun" (car L)) + (and "How" (if (and (nT "How") (east (car L))) " " '|)) ) ) + (prinl) + ("border" south) + (map pop "Grid") + (dec 'N) ) + (unless (> (default "X" 1) 26) + (space (inc Sp)) + (for @ "Grid" + (prin " " (and "How" " ") (char (+ 96 "X"))) + (T (> (inc '"X") 26)) ) + (prinl) ) ) ) + +(de "border" (Dir) + (when "How" + (space Sp) + (prin " +") + (for L "Grid" + (prin (if (and (nT "How") (Dir (car L))) " +" "---+")) ) + (prinl) ) ) diff --git a/samples/Prolog/dleak-report.script! b/samples/Prolog/dleak-report similarity index 100% rename from samples/Prolog/dleak-report.script! rename to samples/Prolog/dleak-report diff --git a/samples/Public Key/id_dsa.asc b/samples/Public Key/id_dsa.asc new file mode 100644 index 00000000..dc568f9d --- /dev/null +++ b/samples/Public Key/id_dsa.asc @@ -0,0 +1 @@ +ssh-dss AAAAB3NzaC1kc3MAAACBAIXi8hv+I7/bYzbve0Wg/Gv9yeZX0H/qON6rwJTPFICTncfK2t/Kc2Ec7+GYSkEIj7ok5wzHgv51SFTM6dvK/8hrjFE8frNztRK2TwZCvgYkbcBoprUstE86ZHBA1pAVPfHAOcF708Yk+KsxDONxkzu7FWw4HWqycqPtaavdcgsZAAAAFQC0uvetk3WY9sFNU71a32JKjkmTnwAAAIBlm1eGuATcZJvlk2jerZnTO54MlO/htWQrI4pZGLdhukOPgF1lsTUSwmCN8k8xxkyRL5Yl/8GUcdUfC4gbZvsbZGtvq5gFZSVTfkKJrlwykpZcaijWXtDiWSpqszs0MfexLMdpZSkNsWp7TEoWcqNLN8X7ohlsLAhcdrAbGqFblAAAAIBgW12r208h9AA3rH3t+6HKLXuPO1BQPuE+fKQg1Aet40c1gxUkCF/J+xdAITE1v7kmssZxBvDqUPgpvYCm+ZfA0j712pvt4JmQcfPn9Go003kq6/cgI4tCOy1dgQDLr0E5Jd7YqIglkr25fkDtKRFBRue3FmCGOdaM4NAAdYU48Q== lars@junk diff --git a/samples/Public Key/id_rsa.asc b/samples/Public Key/id_rsa.asc new file mode 100644 index 00000000..4c936646 --- /dev/null +++ b/samples/Public Key/id_rsa.asc @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCw3QQtYgRViVH8ZpkQ2A7BuCeyPYC4hB9kKNhxwUfJ2hFgW8soGMBhsLN+vOeAJ2IXDMsezJO2/qhoZFQMvHoWpWTRTLPeNtBsKD+nhOZX28A4D+QRzVZ6hdWoh9W+mIP69MIT3aX35oLb86IycbNdRJlEK4FAUt7tjezNkU7boQ== root@use1-2.nitrousbox.com diff --git a/samples/Public Key/sshkey1.asc b/samples/Public Key/sshkey1.asc new file mode 100644 index 00000000..ce491bc3 --- /dev/null +++ b/samples/Public Key/sshkey1.asc @@ -0,0 +1,7 @@ +---- BEGIN SSH2 PUBLIC KEY ---- +Subject: galb +Comment: 1024-bit rsa, created by galb@shimi Mon Jan 15 08:31:24 2001 +AAAAB3NzaC1yc2EAAAABJQAAAIEAiPWx6WM4lhHNedGfBpPJNPpZ7yKu+dnn1SJejgt459 +6k6YjzGGphH2TUxwKzxcKDKKezwkpfnxPkSMkuEspGRt/aZZ9wa++Oi7Qkr8prgHc4soW6 +NUlfDzpvZK2H5E7eQaSeP3SAwGmQKUFHCddNaP0L+hM7zhFNzjFvpaMgJw0= +---- END SSH2 PUBLIC KEY ---- diff --git a/samples/Puppet/apacheinit.pp b/samples/Puppet/apacheinit.pp new file mode 100644 index 00000000..37d866ad --- /dev/null +++ b/samples/Puppet/apacheinit.pp @@ -0,0 +1,378 @@ +# Class: apache +# +# This class installs Apache +# +# Parameters: +# +# Actions: +# - Install Apache +# - Manage Apache service +# +# Requires: +# +# Sample Usage: +# +class apache ( + $apache_name = $::apache::params::apache_name, + $service_name = $::apache::params::service_name, + $default_mods = true, + $default_vhost = true, + $default_charset = undef, + $default_confd_files = true, + $default_ssl_vhost = false, + $default_ssl_cert = $::apache::params::default_ssl_cert, + $default_ssl_key = $::apache::params::default_ssl_key, + $default_ssl_chain = undef, + $default_ssl_ca = undef, + $default_ssl_crl_path = undef, + $default_ssl_crl = undef, + $default_ssl_crl_check = undef, + $default_type = 'none', + $ip = undef, + $service_enable = true, + $service_manage = true, + $service_ensure = 'running', + $purge_configs = true, + $purge_vhost_dir = undef, + $purge_vdir = false, + $serveradmin = 'root@localhost', + $sendfile = 'On', + $error_documents = false, + $timeout = '120', + $httpd_dir = $::apache::params::httpd_dir, + $server_root = $::apache::params::server_root, + $conf_dir = $::apache::params::conf_dir, + $confd_dir = $::apache::params::confd_dir, + $vhost_dir = $::apache::params::vhost_dir, + $vhost_enable_dir = $::apache::params::vhost_enable_dir, + $mod_dir = $::apache::params::mod_dir, + $mod_enable_dir = $::apache::params::mod_enable_dir, + $mpm_module = $::apache::params::mpm_module, + $lib_path = $::apache::params::lib_path, + $conf_template = $::apache::params::conf_template, + $servername = $::apache::params::servername, + $manage_user = true, + $manage_group = true, + $user = $::apache::params::user, + $group = $::apache::params::group, + $keepalive = $::apache::params::keepalive, + $keepalive_timeout = $::apache::params::keepalive_timeout, + $max_keepalive_requests = $::apache::params::max_keepalive_requests, + $logroot = $::apache::params::logroot, + $logroot_mode = $::apache::params::logroot_mode, + $log_level = $::apache::params::log_level, + $log_formats = {}, + $ports_file = $::apache::params::ports_file, + $docroot = $::apache::params::docroot, + $apache_version = $::apache::version::default, + $server_tokens = 'OS', + $server_signature = 'On', + $trace_enable = 'On', + $allow_encoded_slashes = undef, + $package_ensure = 'installed', + $use_optional_includes = $::apache::params::use_optional_includes, +) inherits ::apache::params { + validate_bool($default_vhost) + validate_bool($default_ssl_vhost) + validate_bool($default_confd_files) + # true/false is sufficient for both ensure and enable + validate_bool($service_enable) + validate_bool($service_manage) + validate_bool($use_optional_includes) + + $valid_mpms_re = $apache_version ? { + '2.4' => '(event|itk|peruser|prefork|worker)', + default => '(event|itk|prefork|worker)' + } + + if $mpm_module { + validate_re($mpm_module, $valid_mpms_re) + } + + if $allow_encoded_slashes { + validate_re($allow_encoded_slashes, '(^on$|^off$|^nodecode$)', "${allow_encoded_slashes} is not permitted for allow_encoded_slashes. Allowed values are 'on', 'off' or 'nodecode'.") + } + + # NOTE: on FreeBSD it's mpm module's responsibility to install httpd package. + # NOTE: the same strategy may be introduced for other OSes. For this, you + # should delete the 'if' block below and modify all MPM modules' manifests + # such that they include apache::package class (currently event.pp, itk.pp, + # peruser.pp, prefork.pp, worker.pp). + if $::osfamily != 'FreeBSD' { + package { 'httpd': + ensure => $package_ensure, + name => $apache_name, + notify => Class['Apache::Service'], + } + } + validate_re($sendfile, [ '^[oO]n$' , '^[oO]ff$' ]) + + # declare the web server user and group + # Note: requiring the package means the package ought to create them and not puppet + validate_bool($manage_user) + if $manage_user { + user { $user: + ensure => present, + gid => $group, + require => Package['httpd'], + } + } + validate_bool($manage_group) + if $manage_group { + group { $group: + ensure => present, + require => Package['httpd'] + } + } + + validate_apache_log_level($log_level) + + class { '::apache::service': + service_name => $service_name, + service_enable => $service_enable, + service_manage => $service_manage, + service_ensure => $service_ensure, + } + + # Deprecated backwards-compatibility + if $purge_vdir { + warning('Class[\'apache\'] parameter purge_vdir is deprecated in favor of purge_configs') + $purge_confd = $purge_vdir + } else { + $purge_confd = $purge_configs + } + + # Set purge vhostd appropriately + if $purge_vhost_dir == undef { + $purge_vhostd = $purge_confd + } else { + $purge_vhostd = $purge_vhost_dir + } + + Exec { + path => '/bin:/sbin:/usr/bin:/usr/sbin', + } + + exec { "mkdir ${confd_dir}": + creates => $confd_dir, + require => Package['httpd'], + } + file { $confd_dir: + ensure => directory, + recurse => true, + purge => $purge_confd, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + + if ! defined(File[$mod_dir]) { + exec { "mkdir ${mod_dir}": + creates => $mod_dir, + require => Package['httpd'], + } + # Don't purge available modules if an enable dir is used + $purge_mod_dir = $purge_configs and !$mod_enable_dir + file { $mod_dir: + ensure => directory, + recurse => true, + purge => $purge_mod_dir, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + } + + if $mod_enable_dir and ! defined(File[$mod_enable_dir]) { + $mod_load_dir = $mod_enable_dir + exec { "mkdir ${mod_enable_dir}": + creates => $mod_enable_dir, + require => Package['httpd'], + } + file { $mod_enable_dir: + ensure => directory, + recurse => true, + purge => $purge_configs, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + } else { + $mod_load_dir = $mod_dir + } + + if ! defined(File[$vhost_dir]) { + exec { "mkdir ${vhost_dir}": + creates => $vhost_dir, + require => Package['httpd'], + } + file { $vhost_dir: + ensure => directory, + recurse => true, + purge => $purge_vhostd, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + } + + if $vhost_enable_dir and ! defined(File[$vhost_enable_dir]) { + $vhost_load_dir = $vhost_enable_dir + exec { "mkdir ${vhost_load_dir}": + creates => $vhost_load_dir, + require => Package['httpd'], + } + file { $vhost_enable_dir: + ensure => directory, + recurse => true, + purge => $purge_vhostd, + notify => Class['Apache::Service'], + require => Package['httpd'], + } + } else { + $vhost_load_dir = $vhost_dir + } + + concat { $ports_file: + owner => 'root', + group => $::apache::params::root_group, + mode => '0644', + notify => Class['Apache::Service'], + require => Package['httpd'], + } + concat::fragment { 'Apache ports header': + ensure => present, + target => $ports_file, + content => template('apache/ports_header.erb') + } + + if $::apache::conf_dir and $::apache::params::conf_file { + case $::osfamily { + 'debian': { + $pidfile = "\${APACHE_PID_FILE}" + $error_log = 'error.log' + $scriptalias = '/usr/lib/cgi-bin' + $access_log_file = 'access.log' + } + 'redhat': { + $pidfile = 'run/httpd.pid' + $error_log = 'error_log' + $scriptalias = '/var/www/cgi-bin' + $access_log_file = 'access_log' + } + 'freebsd': { + $pidfile = '/var/run/httpd.pid' + $error_log = 'httpd-error.log' + $scriptalias = '/usr/local/www/apache24/cgi-bin' + $access_log_file = 'httpd-access.log' + } 'gentoo': { + $pidfile = '/run/apache2.pid' + $error_log = 'error.log' + $error_documents_path = '/usr/share/apache2/error' + $scriptalias = '/var/www/localhost/cgi-bin' + $access_log_file = 'access.log' + + ::portage::makeconf { 'apache2_modules': + content => $default_mods, + } + file { [ + '/etc/apache2/modules.d/.keep_www-servers_apache-2', + '/etc/apache2/vhosts.d/.keep_www-servers_apache-2' + ]: + ensure => absent, + require => Package['httpd'], + } + } + default: { + fail("Unsupported osfamily ${::osfamily}") + } + } + + $apxs_workaround = $::osfamily ? { + 'freebsd' => true, + default => false + } + + # Template uses: + # - $pidfile + # - $user + # - $group + # - $logroot + # - $error_log + # - $sendfile + # - $mod_dir + # - $ports_file + # - $confd_dir + # - $vhost_dir + # - $error_documents + # - $error_documents_path + # - $apxs_workaround + # - $keepalive + # - $keepalive_timeout + # - $max_keepalive_requests + # - $server_root + # - $server_tokens + # - $server_signature + # - $trace_enable + file { "${::apache::conf_dir}/${::apache::params::conf_file}": + ensure => file, + content => template($conf_template), + notify => Class['Apache::Service'], + require => Package['httpd'], + } + + # preserve back-wards compatibility to the times when default_mods was + # only a boolean value. Now it can be an array (too) + if is_array($default_mods) { + class { '::apache::default_mods': + all => false, + mods => $default_mods, + } + } else { + class { '::apache::default_mods': + all => $default_mods, + } + } + class { '::apache::default_confd_files': + all => $default_confd_files + } + if $mpm_module { + class { "::apache::mod::${mpm_module}": } + } + + $default_vhost_ensure = $default_vhost ? { + true => 'present', + false => 'absent' + } + $default_ssl_vhost_ensure = $default_ssl_vhost ? { + true => 'present', + false => 'absent' + } + + ::apache::vhost { 'default': + ensure => $default_vhost_ensure, + port => 80, + docroot => $docroot, + scriptalias => $scriptalias, + serveradmin => $serveradmin, + access_log_file => $access_log_file, + priority => '15', + ip => $ip, + logroot_mode => $logroot_mode, + manage_docroot => $default_vhost, + } + $ssl_access_log_file = $::osfamily ? { + 'freebsd' => $access_log_file, + default => "ssl_${access_log_file}", + } + ::apache::vhost { 'default-ssl': + ensure => $default_ssl_vhost_ensure, + port => 443, + ssl => true, + docroot => $docroot, + scriptalias => $scriptalias, + serveradmin => $serveradmin, + access_log_file => $ssl_access_log_file, + priority => '15', + ip => $ip, + logroot_mode => $logroot_mode, + manage_docroot => $default_ssl_vhost, + } + } +} diff --git a/samples/Python/gen-py-linguist-thrift.py b/samples/Python/gen-py-linguist-thrift.py new file mode 100644 index 00000000..3ae25bb9 --- /dev/null +++ b/samples/Python/gen-py-linguist-thrift.py @@ -0,0 +1,83 @@ +# +# Autogenerated by Thrift Compiler (1.0.0-dev) +# +# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING +# +# options string: py +# + +from thrift.Thrift import TType, TMessageType, TException, TApplicationException + +from thrift.transport import TTransport +from thrift.protocol import TBinaryProtocol, TProtocol +try: + from thrift.protocol import fastbinary +except: + fastbinary = None + + + +class PullRequest: + """ + Attributes: + - title + """ + + thrift_spec = ( + None, # 0 + (1, TType.STRING, 'title', None, None, ), # 1 + ) + + def __init__(self, title=None,): + self.title = title + + def read(self, iprot): + if iprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and isinstance(iprot.trans, TTransport.CReadableTransport) and self.thrift_spec is not None and fastbinary is not None: + fastbinary.decode_binary(self, iprot.trans, (self.__class__, self.thrift_spec)) + return + iprot.readStructBegin() + while True: + (fname, ftype, fid) = iprot.readFieldBegin() + if ftype == TType.STOP: + break + if fid == 1: + if ftype == TType.STRING: + self.title = iprot.readString() + else: + iprot.skip(ftype) + else: + iprot.skip(ftype) + iprot.readFieldEnd() + iprot.readStructEnd() + + def write(self, oprot): + if oprot.__class__ == TBinaryProtocol.TBinaryProtocolAccelerated and self.thrift_spec is not None and fastbinary is not None: + oprot.trans.write(fastbinary.encode_binary(self, (self.__class__, self.thrift_spec))) + return + oprot.writeStructBegin('PullRequest') + if self.title is not None: + oprot.writeFieldBegin('title', TType.STRING, 1) + oprot.writeString(self.title) + oprot.writeFieldEnd() + oprot.writeFieldStop() + oprot.writeStructEnd() + + def validate(self): + return + + + def __hash__(self): + value = 17 + value = (value * 31) ^ hash(self.title) + return value + + def __repr__(self): + L = ['%s=%r' % (key, value) + for key, value in self.__dict__.iteritems()] + return '%s(%s)' % (self.__class__.__name__, ', '.join(L)) + + def __eq__(self, other): + return isinstance(other, self.__class__) and self.__dict__ == other.__dict__ + + def __ne__(self, other): + return not (self == other) diff --git a/samples/Python/python.script! b/samples/Python/python similarity index 100% rename from samples/Python/python.script! rename to samples/Python/python diff --git a/samples/Python/python2.script! b/samples/Python/python2 similarity index 100% rename from samples/Python/python2.script! rename to samples/Python/python2 diff --git a/samples/Python/python3.script! b/samples/Python/python3 similarity index 100% rename from samples/Python/python3.script! rename to samples/Python/python3 diff --git a/samples/QML/common.qbs b/samples/QML/common.qbs new file mode 100644 index 00000000..ebf60a0b --- /dev/null +++ b/samples/QML/common.qbs @@ -0,0 +1,155 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: http://www.qt.io/licensing +** +** This file is part of the Qt Build Suite. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms and +** conditions see http://www.qt.io/terms-conditions. For further information +** use the contact form at http://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, The Qt Company gives you certain additional +** rights. These rights are described in The Qt Company LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +****************************************************************************/ + +import qbs 1.0 +import qbs.FileInfo +import qbs.ModUtils + +Module { + property string buildVariant: "debug" + property bool enableDebugCode: buildVariant == "debug" + property bool debugInformation: (buildVariant == "debug") + property string optimization: (buildVariant == "debug" ? "none" : "fast") + readonly property stringList hostOS: undefined // set internally + property string hostOSVersion: { + if (hostOS && hostOS.contains("osx")) { + return getNativeSetting("/System/Library/CoreServices/ServerVersion.plist", "ProductVersion") || + getNativeSetting("/System/Library/CoreServices/SystemVersion.plist", "ProductVersion"); + } else if (hostOS && hostOS.contains("windows")) { + var version = getNativeSetting("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion", "CurrentVersion"); + return version + "." + hostOSBuildVersion; + } + } + + property string hostOSBuildVersion: { + if (hostOS.contains("osx")) { + return getNativeSetting("/System/Library/CoreServices/ServerVersion.plist", "ProductBuildVersion") || + getNativeSetting("/System/Library/CoreServices/SystemVersion.plist", "ProductBuildVersion"); + } else if (hostOS.contains("windows")) { + return getNativeSetting("HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion", "CurrentBuildNumber"); + } + } + + readonly property var hostOSVersionParts: hostOSVersion ? hostOSVersion.split('.').map(function(item) { return parseInt(item, 10); }) : [] + readonly property int hostOSVersionMajor: hostOSVersionParts[0] || 0 + readonly property int hostOSVersionMinor: hostOSVersionParts[1] || 0 + readonly property int hostOSVersionPatch: hostOSVersionParts[2] || 0 + + property stringList targetOS: hostOS + property string pathListSeparator: hostOS.contains("windows") ? ";" : ":" + property string pathSeparator: hostOS.contains("windows") ? "\\" : "/" + property string profile + property stringList toolchain + property string architecture + property bool install: false + property string installSourceBase + readonly property string installRoot: undefined + property string installDir + property string installPrefix: "" + property path sysroot + + PropertyOptions { + name: "buildVariant" + allowedValues: ['debug', 'release'] + description: "name of the build variant" + } + + PropertyOptions { + name: "optimization" + allowedValues: ['none', 'fast', 'small'] + description: "optimization level" + } + + validate: { + var validator = new ModUtils.PropertyValidator("qbs"); + validator.setRequiredProperty("architecture", architecture, + "you might want to re-run 'qbs-setup-toolchains'"); + validator.setRequiredProperty("hostOS", hostOS); + validator.setRequiredProperty("targetOS", targetOS); + if (hostOS && (hostOS.contains("windows") || hostOS.contains("osx"))) { + validator.setRequiredProperty("hostOSVersion", hostOSVersion, + "could not detect host operating system version; " + + "verify that system files and registry keys have not " + + "been modified."); + if (hostOSVersion) + validator.addVersionValidator("hostOSVersion", hostOSVersion, 2, 4); + + validator.setRequiredProperty("hostOSBuildVersion", hostOSBuildVersion, + "could not detect host operating system build version; " + + "verify that system files or registry have not been " + + "tampered with."); + } + + validator.addCustomValidator("architecture", architecture, function (value) { + return architecture === canonicalArchitecture(architecture); + }, "'" + architecture + "' is invalid. You must use the canonical name '" + + canonicalArchitecture(architecture) + "'"); + + validator.validate(); + } + + // private properties + property var commonRunEnvironment: { + var env = {}; + if (targetOS.contains("windows")) { + env["PATH"] = [ + FileInfo.joinPaths(installRoot, installPrefix) + ]; + } else if (hostOS.contains("darwin") && targetOS.contains("darwin")) { + env["DYLD_FRAMEWORK_PATH"] = [ + FileInfo.joinPaths(installRoot, installPrefix, "Library", "Frameworks"), + FileInfo.joinPaths(installRoot, installPrefix, "lib"), + FileInfo.joinPaths(installRoot, installPrefix) + ].join(pathListSeparator); + + env["DYLD_LIBRARY_PATH"] = [ + FileInfo.joinPaths(installRoot, installPrefix, "lib"), + FileInfo.joinPaths(installRoot, installPrefix, "Library", "Frameworks"), + FileInfo.joinPaths(installRoot, installPrefix) + ].join(pathListSeparator); + + if (targetOS.contains("ios-simulator") && sysroot) { + env["DYLD_ROOT_PATH"] = [sysroot]; + } + } else if (hostOS.contains("unix") && targetOS.contains("unix")) { + env["LD_LIBRARY_PATH"] = [ + FileInfo.joinPaths(installRoot, installPrefix, "lib") + ]; + } + + return env; + } + + // internal properties + readonly property string version: [versionMajor, versionMinor, versionPatch].join(".") + readonly property int versionMajor: undefined // set internally + readonly property int versionMinor: undefined // set internally + readonly property int versionPatch: undefined // set internally +} diff --git a/samples/QMake/qmake.script! b/samples/QMake/qmake similarity index 100% rename from samples/QMake/qmake.script! rename to samples/QMake/qmake diff --git a/samples/R/git-punchcard.script! b/samples/R/git-punchcard similarity index 100% rename from samples/R/git-punchcard.script! rename to samples/R/git-punchcard diff --git a/samples/RenderScript/convolve3x3.rs b/samples/RenderScript/convolve3x3.rs new file mode 100644 index 00000000..2acffab0 --- /dev/null +++ b/samples/RenderScript/convolve3x3.rs @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma version(1) +#pragma rs java_package_name(com.android.gallery3d.filtershow.filters) +#pragma rs_fp_relaxed + +int32_t gWidth; +int32_t gHeight; +const uchar4 *gPixels; +rs_allocation gIn; + +float gCoeffs[9]; + +void root(const uchar4 *in, uchar4 *out, const void *usrData, uint32_t x, uint32_t y) { + uint32_t x1 = min((int32_t)x+1, gWidth-1); + uint32_t x2 = max((int32_t)x-1, 0); + uint32_t y1 = min((int32_t)y+1, gHeight-1); + uint32_t y2 = max((int32_t)y-1, 0); + + float4 p00 = rsUnpackColor8888(gPixels[x1 + gWidth * y1]); + float4 p01 = rsUnpackColor8888(gPixels[x + gWidth * y1]); + float4 p02 = rsUnpackColor8888(gPixels[x2 + gWidth * y1]); + float4 p10 = rsUnpackColor8888(gPixels[x1 + gWidth * y]); + float4 p11 = rsUnpackColor8888(gPixels[x + gWidth * y]); + float4 p12 = rsUnpackColor8888(gPixels[x2 + gWidth * y]); + float4 p20 = rsUnpackColor8888(gPixels[x1 + gWidth * y2]); + float4 p21 = rsUnpackColor8888(gPixels[x + gWidth * y2]); + float4 p22 = rsUnpackColor8888(gPixels[x2 + gWidth * y2]); + + p00 *= gCoeffs[0]; + p01 *= gCoeffs[1]; + p02 *= gCoeffs[2]; + p10 *= gCoeffs[3]; + p11 *= gCoeffs[4]; + p12 *= gCoeffs[5]; + p20 *= gCoeffs[6]; + p21 *= gCoeffs[7]; + p22 *= gCoeffs[8]; + + p00 += p01; + p02 += p10; + p11 += p12; + p20 += p21; + + p22 += p00; + p02 += p11; + + p20 += p22; + p20 += p02; + + p20 = clamp(p20, 0.f, 1.f); + *out = rsPackColorTo8888(p20.r, p20.g, p20.b); +} diff --git a/samples/RenderScript/scenegraph_objects.rsh b/samples/RenderScript/scenegraph_objects.rsh new file mode 100644 index 00000000..bdca3ab1 --- /dev/null +++ b/samples/RenderScript/scenegraph_objects.rsh @@ -0,0 +1,323 @@ +// Copyright (C) 2011-2012 The Android Open Source Project +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#pragma version(1) + +#pragma rs java_package_name(com.android.scenegraph) + +#ifndef _TRANSFORM_DEF_ +#define _TRANSFORM_DEF_ + +#include "rs_graphics.rsh" + +#define TRANSFORM_NONE 0 +#define TRANSFORM_TRANSLATE 1 +#define TRANSFORM_ROTATE 2 +#define TRANSFORM_SCALE 3 + +#define CULL_FRUSTUM 0 +#define CULL_ALWAYS 2 + +#define LIGHT_POINT 0 +#define LIGHT_DIRECTIONAL 1 + +// Shader params that involve only data +#define SHADER_PARAM_DATA_ONLY 10000 +#define SHADER_PARAM_FLOAT4_DATA 10001 +#define SHADER_PARAM_TRANSFORM_DATA 10002 +#define SHADER_PARAM_TRANSFORM_MODEL 10003 + +// Shader params that involve camera +#define SHADER_PARAM_CAMERA 1000 +#define SHADER_PARAM_FLOAT4_CAMERA_POS 1001 +#define SHADER_PARAM_FLOAT4_CAMERA_DIR 1002 +#define SHADER_PARAM_TRANSFORM_VIEW 1003 +#define SHADER_PARAM_TRANSFORM_PROJ 1004 +#define SHADER_PARAM_TRANSFORM_VIEW_PROJ 1005 +#define SHADER_PARAM_TRANSFORM_MODEL_VIEW 1006 +#define SHADER_PARAM_TRANSFORM_MODEL_VIEW_PROJ 1007 + +// Shader Params that only involve lights +#define SHADER_PARAM_LIGHT 100 +#define SHADER_PARAM_FLOAT4_LIGHT_COLOR 103 +#define SHADER_PARAM_FLOAT4_LIGHT_POS 104 +#define SHADER_PARAM_FLOAT4_LIGHT_DIR 105 + +#define SHADER_PARAM_TEXTURE 10 + +#define TEXTURE_NONE 0 +#define TEXTURE_2D 1 +#define TEXTURE_CUBE 2 +#define TEXTURE_RENDER_TARGET 3 + +typedef struct TransformComponent_s { + float4 value; + int type; + rs_allocation name; +} SgTransformComponent; + +typedef struct __attribute__((packed, aligned(4))) SgTransform { + rs_matrix4x4 globalMat; + rs_matrix4x4 localMat; + + rs_allocation components; + int isDirty; + + rs_allocation children; + rs_allocation name; + + // Used to check whether transform params need to be updated + uint32_t timestamp; +} SgTransform; + +typedef struct VertexShader_s { + rs_program_vertex program; + // Buffer with vertex constant data + rs_allocation shaderConst; + // ShaderParam's that populate data + rs_allocation shaderConstParams; + // location of the per object constants on the buffer + int objectConstIndex; +} SgVertexShader; + +typedef struct FragmentShader_s { + rs_program_fragment program; + // Buffer with vertex constant data + rs_allocation shaderConst; + // ShaderParam's that populate data + rs_allocation shaderConstParams; + // ShaderParam's that set textures + rs_allocation shaderTextureParams; + // location of the per object constants on the buffer + int objectConstIndex; +} SgFragmentShader; + +typedef struct RenderState_s { + rs_allocation pv; // VertexShader struct + rs_allocation pf; // FragmentShader struct + rs_program_store ps; + rs_program_raster pr; +} SgRenderState; + +typedef struct Renderable_s { + rs_allocation render_state; + // Buffer with vertex constant data + rs_allocation pv_const; + // ShaderParam's that populate data + rs_allocation pv_constParams; + // Buffer with fragment constant data + rs_allocation pf_const; + // ShaderParam's that populate data + rs_allocation pf_constParams; + rs_allocation pf_textures[8]; + int pf_num_textures; + rs_mesh mesh; + int meshIndex; + rs_allocation transformMatrix; + rs_allocation name; + float4 boundingSphere; + float4 worldBoundingSphere; + int bVolInitialized; + int cullType; // specifies whether to frustum cull + int isVisible; +} SgRenderable; + +typedef struct RenderPass_s { + rs_allocation color_target; + rs_allocation depth_target; + rs_allocation camera; + rs_allocation objects; + + float4 clear_color; + float clear_depth; + bool should_clear_color; + bool should_clear_depth; +} SgRenderPass; + +typedef struct Camera_s { + rs_matrix4x4 proj; + rs_matrix4x4 view; + rs_matrix4x4 viewProj; + float4 position; + float near; + float far; + float horizontalFOV; + float aspect; + rs_allocation name; + rs_allocation transformMatrix; + float4 frustumPlanes[6]; + + int isDirty; + // Timestamp of the camera itself to signal params if anything changes + uint32_t timestamp; + // Timestamp of our transform + uint32_t transformTimestamp; +} SgCamera; + +typedef struct Light_s { + float4 position; + float4 color; + float intensity; + int type; + rs_allocation name; + rs_allocation transformMatrix; +} SgLight; + +// This represents the shader parameter data needed to set a float or transform data +typedef struct ShaderParamData_s { + int type; + float4 float_value; + uint32_t timestamp; + rs_allocation paramName; + rs_allocation camera; + rs_allocation light; + rs_allocation transform; + rs_allocation texture; +} SgShaderParamData; + +// This represents a shader parameter that knows how to update itself for a given +// renderable or shader and contains a timestamp for the last time this buffer was updated +typedef struct ShaderParam_s { + // Used to check whether transform params need to be updated + uint32_t transformTimestamp; + // Used to check whether data params need to be updated + // These are used when somebody set the matrix of float value directly in java + uint32_t dataTimestamp; + // Specifies where in the constant buffer data gets written to + int bufferOffset; + // An instance of SgShaderParamData that could be shared by multiple objects + rs_allocation data; + // How many components of the vector we need to write + int float_vecSize; +} SgShaderParam; + +// This represents a texture object +typedef struct Texture_s { + uint32_t type; + rs_allocation texture; +} SgTexture; + +static void printName(rs_allocation name) { + if (!rsIsObject(name)) { + rsDebug("no name", 0); + return; + } + + rsDebug((const char*)rsGetElementAt(name, 0), 0); +} + +static void printCameraInfo(const SgCamera *cam) { + rsDebug("***** Camera information. ptr:", cam); + printName(cam->name); + const SgTransform *camTransform = (const SgTransform *)rsGetElementAt(cam->transformMatrix, 0); + rsDebug("Transform name:", camTransform); + printName(camTransform->name); + + rsDebug("Aspect: ", cam->aspect); + rsDebug("Near: ", cam->near); + rsDebug("Far: ", cam->far); + rsDebug("Fov: ", cam->horizontalFOV); + rsDebug("Position: ", cam->position); + rsDebug("Proj: ", &cam->proj); + rsDebug("View: ", &cam->view); +} + +static void printLightInfo(const SgLight *light) { + rsDebug("***** Light information. ptr:", light); + printName(light->name); + const SgTransform *lTransform = (const SgTransform *)rsGetElementAt(light->transformMatrix, 0); + rsDebug("Transform name:", lTransform); + printName(lTransform->name); + + rsDebug("Position: ", light->position); + rsDebug("Color : ", light->color); + rsDebug("Intensity: ", light->intensity); + rsDebug("Type: ", light->type); +} + +static void getCameraRay(const SgCamera *cam, int screenX, int screenY, float3 *pnt, float3 *vec) { + rsDebug("=================================", screenX); + rsDebug("Point X", screenX); + rsDebug("Point Y", screenY); + + rs_matrix4x4 mvpInv; + rsMatrixLoad(&mvpInv, &cam->viewProj); + rsMatrixInverse(&mvpInv); + + float width = (float)rsgGetWidth(); + float height = (float)rsgGetHeight(); + + float4 pos = {(float)screenX, height - (float)screenY, 0.0f, 1.0f}; + + pos.x /= width; + pos.y /= height; + + rsDebug("Pre Norm X", pos.x); + rsDebug("Pre Norm Y", pos.y); + + pos.xy = pos.xy * 2.0f - 1.0f; + + rsDebug("Norm X", pos.x); + rsDebug("Norm Y", pos.y); + + pos = rsMatrixMultiply(&mvpInv, pos); + float oneOverW = 1.0f / pos.w; + pos.xyz *= oneOverW; + + rsDebug("World X", pos.x); + rsDebug("World Y", pos.y); + rsDebug("World Z", pos.z); + + rsDebug("Cam X", cam->position.x); + rsDebug("Cam Y", cam->position.y); + rsDebug("Cam Z", cam->position.z); + + *vec = normalize(pos.xyz - cam->position.xyz); + rsDebug("Vec X", vec->x); + rsDebug("Vec Y", vec->y); + rsDebug("Vec Z", vec->z); + *pnt = cam->position.xyz; +} + +static bool intersect(const SgRenderable *obj, float3 pnt, float3 vec) { + // Solving for t^2 + Bt + C = 0 + float3 originMinusCenter = pnt - obj->worldBoundingSphere.xyz; + float B = dot(originMinusCenter, vec) * 2.0f; + float C = dot(originMinusCenter, originMinusCenter) - + obj->worldBoundingSphere.w * obj->worldBoundingSphere.w; + + float discriminant = B * B - 4.0f * C; + if (discriminant < 0.0f) { + return false; + } + discriminant = sqrt(discriminant); + + float t0 = (-B - discriminant) * 0.5f; + float t1 = (-B + discriminant) * 0.5f; + + if (t0 > t1) { + float temp = t0; + t0 = t1; + t1 = temp; + } + + // The sphere is behind us + if (t1 < 0.0f) { + return false; + } + return true; +} + + +#endif // _TRANSFORM_DEF_ diff --git a/samples/Ruby/filenames/Deliverfile b/samples/Ruby/filenames/Deliverfile new file mode 100644 index 00000000..bd8b463d --- /dev/null +++ b/samples/Ruby/filenames/Deliverfile @@ -0,0 +1,50 @@ +require 'open-uri' + +framework_version = JSON.parse(open(url).read) + +# The URL below is password protected +apps = JSON.parse(open(url).read) + +app_id = Dir.pwd.split("/")[-2].to_i +app = apps[app_id.to_s] + +# The app identifier is required +app_identifier "net.sunapps.#{app_id}" + +version framework_version['version_number'] + +title( + 'de-DE' => app["fullName"] +) + +description( + 'de-DE' => app["description"]["de"] +) + +changelog( + 'de-DE' => framework_version["public_description"]["de"] +) + +keywords( + 'de-DE' => app["keywords"]["de"].split(",") +) + +app_icon "../Submission/AppIconFull.png" + +price_tier 0 # free app + +primary_category "Reference" + +secondary_category "Business" + +automatic_release true + +ratings_config_path "./ratings_config.json" + +app_review_information({ + first_name: "Felix", + phone_number: "My Phone Number", + demo_user: "", + demo_password: "", + notes: "" +}) \ No newline at end of file diff --git a/samples/Ruby/filenames/Fastfile b/samples/Ruby/filenames/Fastfile new file mode 100644 index 00000000..aed95f6f --- /dev/null +++ b/samples/Ruby/filenames/Fastfile @@ -0,0 +1,115 @@ +# Customise this file, documentation can be found here: +# https://github.com/KrauseFx/fastlane/tree/master/docs + +$:.unshift File.dirname(__FILE__) +require 'lib/utils.rb' + +fastlane_version "1.0.0" + +default_platform :ios + +platform :ios do + before_all do + ENV['DELIVER_WHAT_TO_TEST'] = git_commit_log + ensure_git_status_clean + end + + desc "Runs linting (and eventually static analysis)" + lane :analyze do + return if test_disabled? + make 'lint' + end + + desc "Runs all the unit tests." + lane :test do + return if test_disabled? + # TODO: lint & test JS code + xctest( + scheme: 'Wikipedia', + destination: "platform=iOS Simulator,name=iPhone 6,OS=8.3", + reports: [ + { + report: "html", + output: "build/reports/unit-tests.html" + }, + { + report: "junit", + output: "build/reports/unit-tests.xml" + } + ], + clean: nil + ) + end + + desc "Bump the version, and submit a new **Wikipedia Alpha** Build to Apple TestFlight" + lane :alpha do + # snapshot + sigh + increment_build_number + + # uncomment when CI is able to push tags + if ENV['WMF_BUMP'] + commit_version_bump + plist_version = get_version_short_string File.expand_path(File.join(ENV['PWD'], 'Wikipedia/Wikipedia-Info.plist')) + # tag must be added after the version bump is committed + add_git_tag(tag: "#{plist_version}.#{Actions.lane_context[Actions::SharedValues::BUILD_NUMBER]}") + end + + ipa( + configuration: "Alpha", + scheme: "Wikipedia Alpha", + ) + hockey( + notes: '', + notify: '0', # Means do not notify + status: '1', # Means do not make available for download + ) + deliver skip_deploy: true, beta: true + + # uncomment when CI is able to push tags + if ENV['WMF_BUMP'] + # only push after everything else has succeeded + push_to_git_remote + end + end + + desc "Submit a new **Wikipedia Beta** build to Apple TestFlight" + lane :beta do + # snapshot + sigh + ipa( + configuration: "Beta", + scheme: "Wikipedia Beta", + ) + hockey( + notes: '', + notify: '0', # Means do not notify + status: '1', # Means do not make available for download + ) + deliver skip_deploy: true, beta: true + end + + desc "Deploy a new version to the App Store" + lane :store do + # snapshot + sigh + ipa( + configuration: "Wikipedia", + scheme: "Wikipedia", + ) + hockey( + notes: '', + notify: '0', # Means do not notify + status: '1', # Means do not make available for download + ) + deliver skip_deploy: true, force: true + end + + after_all do |lane| + + end + + error do |lane, exception| + + end +end \ No newline at end of file diff --git a/samples/Ruby/filenames/Podfile b/samples/Ruby/filenames/Podfile new file mode 100644 index 00000000..2a03e4ae --- /dev/null +++ b/samples/Ruby/filenames/Podfile @@ -0,0 +1,18 @@ +source 'https://github.com/CocoaPods/Specs.git' + +platform :ios, :deployment_target => '6.0' + +inhibit_all_warnings! + +xcodeproj 'Wikipedia' + +pod 'AFNetworking/NSURLConnection', '~> 2.5' +pod 'hpple', '~> 0.2' +pod 'blockskit/Core', '~> 2.2' +pod 'Masonry', '~> 0.6' +pod 'HockeySDK', '3.6.2' + +target 'WikipediaUnitTests', :exclusive => false do + pod 'OCMockito', '~> 1.4' + pod 'OCHamcrest', '~> 4.1' +end diff --git a/samples/Ruby/filenames/Snapfile b/samples/Ruby/filenames/Snapfile new file mode 100644 index 00000000..182c7d1f --- /dev/null +++ b/samples/Ruby/filenames/Snapfile @@ -0,0 +1,26 @@ + +# Download the latest screenshot information from the CMS +app_id = Dir.pwd.split("/")[-2].to_i +File.write("./screenshots.json", open("https://...amazonaws.com/1.0/#{app_id}/....json").read) rescue nil + + +# A list of devices you want to take the screenshots from +devices([ + "iPhone 6", + "iPhone 6 Plus", + "iPhone 5", + "iPhone 4s" +]) + +languages([ + 'de-DE' +]) + +# Where should the resulting screenshots be stored? +screenshots_path "./screenshots" + +# JavaScript UIAutomation file +js_file './snapshot.js' + +# The name of the project's scheme +scheme 'Release' \ No newline at end of file diff --git a/samples/Ruby/gen-rb-linguist-thrift.rb b/samples/Ruby/gen-rb-linguist-thrift.rb new file mode 100644 index 00000000..931cf393 --- /dev/null +++ b/samples/Ruby/gen-rb-linguist-thrift.rb @@ -0,0 +1,9 @@ +# +# Autogenerated by Thrift Compiler (1.0.0-dev) +# +# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING +# + +require 'thrift' +require 'linguist_types' + diff --git a/samples/Ruby/index.json.jbuilder b/samples/Ruby/index.json.jbuilder new file mode 100644 index 00000000..26c7bc67 --- /dev/null +++ b/samples/Ruby/index.json.jbuilder @@ -0,0 +1,4 @@ +json.array!(@courts) do |court| + json.extract! court, :id, :name_r, :region, :region_r, :email, :website + json.url court_url(court, format: :json) +end diff --git a/samples/Ruby/macruby.script! b/samples/Ruby/macruby similarity index 100% rename from samples/Ruby/macruby.script! rename to samples/Ruby/macruby diff --git a/samples/Ruby/rexpl b/samples/Ruby/rexpl new file mode 100755 index 00000000..e55b1cd5 --- /dev/null +++ b/samples/Ruby/rexpl @@ -0,0 +1,4 @@ +#!/usr/bin/env rbx +$: << 'lib' +require 'rexpl' +Rexpl::Environment.run diff --git a/samples/Ruby/ruby.script! b/samples/Ruby/ruby similarity index 100% rename from samples/Ruby/ruby.script! rename to samples/Ruby/ruby diff --git a/samples/Ruby/ruby2.script! b/samples/Ruby/ruby2 similarity index 100% rename from samples/Ruby/ruby2.script! rename to samples/Ruby/ruby2 diff --git a/samples/Ruby/shoes-swt b/samples/Ruby/shoes-swt new file mode 100755 index 00000000..df746edd --- /dev/null +++ b/samples/Ruby/shoes-swt @@ -0,0 +1,11 @@ +#!/usr/bin/env jruby +lib_directory = File.expand_path('../../lib', __FILE__) +$LOAD_PATH << lib_directory + +if File.exist?("Gemfile") + require "bundler/setup" + Bundler.require +end + +require 'shoes/ui/cli' +Shoes::CLI.new("swt").run ARGV diff --git a/samples/SMT/bignum_lia1.smt2 b/samples/SMT/bignum_lia1.smt2 new file mode 100644 index 00000000..e8eb354a --- /dev/null +++ b/samples/SMT/bignum_lia1.smt2 @@ -0,0 +1,20 @@ +(set-logic QF_LIA) +(set-info :source | SMT-COMP'06 organizers |) +(set-info :smt-lib-version 2.0) +(set-info :category "check") +(set-info :status unsat) +(set-info :notes |This benchmark is designed to check if the DP supports bignumbers.|) +(declare-fun x1 () Int) +(declare-fun x2 () Int) +(declare-fun x3 () Int) +(declare-fun x4 () Int) +(declare-fun x5 () Int) +(declare-fun x6 () Int) +(assert (and (or (>= x1 1000) (>= x1 1002)) + (or (>= x2 (* 1230 x1)) (>= x2 (* 1003 x1))) + (or (>= x3 (* 1310 x2)) (>= x3 (* 1999 x2))) + (or (>= x4 (* 4000 x3)) (>= x4 (* 8000 x3))) + (or (<= x5 (* (- 4000) x4)) (<= x5 (* (- 8000) x4))) + (or (>= x6 (* (- 3) x5)) (>= x6 (* (- 2) x5))) (< x6 0))) +(check-sat) +(exit) diff --git a/samples/SMT/list4.smt2 b/samples/SMT/list4.smt2 new file mode 100644 index 00000000..f2c8e539 --- /dev/null +++ b/samples/SMT/list4.smt2 @@ -0,0 +1,20 @@ +(set-logic AUFLIRA) +(set-info :source | Buggy list theorem |) +(set-info :smt-lib-version 2.0) +(set-info :category "crafted") +(set-info :status sat) +(declare-sort List 0) +(declare-fun cons (Real List) List) +(declare-fun nil () List) +(declare-fun car (List) Real) +(declare-fun cdr (List) List) +(declare-fun len (List) Int) +(assert (forall ((?x Real) (?y List)) (= (car (cons ?x ?y)) ?x))) +(assert (forall ((?x Real) (?y List)) (= (cdr (cons ?x ?y)) ?y))) +(assert (= (len nil) 0)) +(assert (forall ((?x Real) (?y List)) (= (len (cons ?x ?y)) (+ (len ?y) 1)))) +(declare-fun append (List List) List) +(assert (forall ((?x Real) (?y1 List) (?y2 List)) (= (append (cons ?x ?y1) ?y2) (cons ?x (append ?y1 ?y2))))) +(assert (not (forall ((?x Real) (?y List)) (= (append (cons ?x nil) ?y) (cons ?x ?y))))) +(check-sat) +(exit) diff --git a/samples/SMT/queen10-1.smt2 b/samples/SMT/queen10-1.smt2 new file mode 100644 index 00000000..25c8bd82 --- /dev/null +++ b/samples/SMT/queen10-1.smt2 @@ -0,0 +1,123 @@ +(set-logic QF_IDL) +(set-info :source | +Queens benchmarks generated by Hyondeuk Kim in SMT-LIB format. +|) +(set-info :smt-lib-version 2.0) +(set-info :category "crafted") +(set-info :status sat) +(declare-fun x0 () Int) +(declare-fun x1 () Int) +(declare-fun x2 () Int) +(declare-fun x3 () Int) +(declare-fun x4 () Int) +(declare-fun x5 () Int) +(declare-fun x6 () Int) +(declare-fun x7 () Int) +(declare-fun x8 () Int) +(declare-fun x9 () Int) +(declare-fun x10 () Int) +(assert + (let + ((?v_0 (- x0 x10)) + (?v_1 (- x1 x10)) + (?v_2 (- x2 x10)) + (?v_3 (- x3 x10)) + (?v_4 (- x4 x10)) + (?v_5 (- x5 x10)) + (?v_6 (- x6 x10)) + (?v_7 (- x7 x10)) + (?v_8 (- x8 x10)) + (?v_9 (- x9 x10)) + (?v_10 (- x0 x1)) + (?v_11 (- x0 x2)) + (?v_12 (- x0 x3)) + (?v_13 (- x0 x4)) + (?v_14 (- x0 x5)) + (?v_15 (- x0 x6)) + (?v_16 (- x0 x7)) + (?v_17 (- x0 x8)) + (?v_18 (- x0 x9)) + (?v_19 (- x1 x2)) + (?v_20 (- x1 x3)) + (?v_21 (- x1 x4)) + (?v_22 (- x1 x5)) + (?v_23 (- x1 x6)) + (?v_24 (- x1 x7)) + (?v_25 (- x1 x8)) + (?v_26 (- x1 x9)) + (?v_27 (- x2 x3)) + (?v_28 (- x2 x4)) + (?v_29 (- x2 x5)) + (?v_30 (- x2 x6)) + (?v_31 (- x2 x7)) + (?v_32 (- x2 x8)) + (?v_33 (- x2 x9)) + (?v_34 (- x3 x4)) + (?v_35 (- x3 x5)) + (?v_36 (- x3 x6)) + (?v_37 (- x3 x7)) + (?v_38 (- x3 x8)) + (?v_39 (- x3 x9)) + (?v_40 (- x4 x5)) + (?v_41 (- x4 x6)) + (?v_42 (- x4 x7)) + (?v_43 (- x4 x8)) + (?v_44 (- x4 x9)) + (?v_45 (- x5 x6)) + (?v_46 (- x5 x7)) + (?v_47 (- x5 x8)) + (?v_48 (- x5 x9)) + (?v_49 (- x6 x7)) + (?v_50 (- x6 x8)) + (?v_51 (- x6 x9)) + (?v_52 (- x7 x8)) + (?v_53 (- x7 x9)) + (?v_54 (- x8 x9))) + (and (<= ?v_0 9) (>= ?v_0 0) (<= ?v_1 9) (>= ?v_1 0) (<= ?v_2 9) (>= ?v_2 0) + (<= ?v_3 9) (>= ?v_3 0) (<= ?v_4 9) (>= ?v_4 0) (<= ?v_5 9) (>= ?v_5 0) + (<= ?v_6 9) (>= ?v_6 0) (<= ?v_7 9) (>= ?v_7 0) (<= ?v_8 9) (>= ?v_8 0) + (<= ?v_9 9) (>= ?v_9 0) + (not (= x0 x1)) (not (= x0 x2)) (not (= x0 x3)) (not (= x0 x4)) + (not (= x0 x5)) (not (= x0 x6)) (not (= x0 x7)) (not (= x0 x8)) + (not (= x0 x9)) (not (= x1 x2)) (not (= x1 x3)) (not (= x1 x4)) + (not (= x1 x5)) (not (= x1 x6)) (not (= x1 x7)) (not (= x1 x8)) + (not (= x1 x9)) (not (= x2 x3)) (not (= x2 x4)) (not (= x2 x5)) + (not (= x2 x6)) (not (= x2 x7)) (not (= x2 x8)) (not (= x2 x9)) + (not (= x3 x4)) (not (= x3 x5)) (not (= x3 x6)) (not (= x3 x7)) + (not (= x3 x8)) (not (= x3 x9)) (not (= x4 x5)) (not (= x4 x6)) + (not (= x4 x7)) (not (= x4 x8)) (not (= x4 x9)) (not (= x5 x6)) + (not (= x5 x7)) (not (= x5 x8)) (not (= x5 x9)) (not (= x6 x7)) + (not (= x6 x8)) (not (= x6 x9)) (not (= x7 x8)) (not (= x7 x9)) + (not (= x8 x9)) + (not (= ?v_10 1)) (not (= ?v_10 (- 1))) (not (= ?v_11 2)) + (not (= ?v_11 (- 2))) (not (= ?v_12 3)) (not (= ?v_12 (- 3))) + (not (= ?v_13 4)) (not (= ?v_13 (- 4))) (not (= ?v_14 5)) + (not (= ?v_14 (- 5))) (not (= ?v_15 6)) (not (= ?v_15 (- 6))) + (not (= ?v_16 7)) (not (= ?v_16 (- 7))) (not (= ?v_17 8)) + (not (= ?v_17 (- 8))) (not (= ?v_18 9)) (not (= ?v_18 (- 9))) + (not (= ?v_19 1)) (not (= ?v_19 (- 1))) (not (= ?v_20 2)) + (not (= ?v_20 (- 2))) (not (= ?v_21 3)) (not (= ?v_21 (- 3))) + (not (= ?v_22 4)) (not (= ?v_22 (- 4))) (not (= ?v_23 5)) + (not (= ?v_23 (- 5))) (not (= ?v_24 6)) (not (= ?v_24 (- 6))) + (not (= ?v_25 7)) (not (= ?v_25 (- 7))) (not (= ?v_26 8)) + (not (= ?v_26 (- 8))) (not (= ?v_27 1)) (not (= ?v_27 (- 1))) + (not (= ?v_28 2)) (not (= ?v_28 (- 2))) (not (= ?v_29 3)) + (not (= ?v_29 (- 3))) (not (= ?v_30 4)) (not (= ?v_30 (- 4))) + (not (= ?v_31 5)) (not (= ?v_31 (- 5))) (not (= ?v_32 6)) + (not (= ?v_32 (- 6))) (not (= ?v_33 7)) (not (= ?v_33 (- 7))) + (not (= ?v_34 1)) (not (= ?v_34 (- 1))) (not (= ?v_35 2)) + (not (= ?v_35 (- 2))) (not (= ?v_36 3)) (not (= ?v_36 (- 3))) + (not (= ?v_37 4)) (not (= ?v_37 (- 4))) (not (= ?v_38 5)) + (not (= ?v_38 (- 5))) (not (= ?v_39 6)) (not (= ?v_39 (- 6))) + (not (= ?v_40 1)) (not (= ?v_40 (- 1))) (not (= ?v_41 2)) + (not (= ?v_41 (- 2))) (not (= ?v_42 3)) (not (= ?v_42 (- 3))) + (not (= ?v_43 4)) (not (= ?v_43 (- 4))) (not (= ?v_44 5)) + (not (= ?v_44 (- 5))) (not (= ?v_45 1)) (not (= ?v_45 (- 1))) + (not (= ?v_46 2)) (not (= ?v_46 (- 2))) (not (= ?v_47 3)) + (not (= ?v_47 (- 3))) (not (= ?v_48 4)) (not (= ?v_48 (- 4))) + (not (= ?v_49 1)) (not (= ?v_49 (- 1))) (not (= ?v_50 2)) + (not (= ?v_50 (- 2))) (not (= ?v_51 3)) (not (= ?v_51 (- 3))) + (not (= ?v_52 1)) (not (= ?v_52 (- 1))) (not (= ?v_53 2)) + (not (= ?v_53 (- 2))) (not (= ?v_54 1)) (not (= ?v_54 (- 1)))))) +(check-sat) +(exit) diff --git a/samples/SMT/shufflevector.smt b/samples/SMT/shufflevector.smt new file mode 100644 index 00000000..6bc79d3a --- /dev/null +++ b/samples/SMT/shufflevector.smt @@ -0,0 +1,2104 @@ +(set-logic QF_ABV) +(define-sort Address () (_ BitVec 64)) +(define-sort Byte () (_ BitVec 8)) +(define-sort Mem () (Array Address Byte)) + +(define-sort I8 () (_ BitVec 8)) +(define-sort I16 () (_ BitVec 16)) +(define-sort I32 () (_ BitVec 32)) +(define-sort I64 () (_ BitVec 64)) +(define-sort I128 () (_ BitVec 128)) + + +;; +;;constants +;; +(define-fun zero () Address (_ bv0 64)) +(define-fun one () Address (_ bv1 64)) +(define-fun two () Address (_ bv2 64)) +(define-fun three () Address (_ bv3 64)) +(define-fun four () Address (_ bv4 64)) +(define-fun five () Address (_ bv5 64)) +(define-fun six () Address (_ bv6 64)) +(define-fun seven () Address (_ bv7 64)) +(define-fun eight () Address (_ bv8 64)) + + +;; +;; Write a little endian 1 bit value (8 bit aligned) at address x in mem +;; +(define-fun write1 ((mem Mem) (x Address) (v Bool)) Mem + (store mem x (ite v #x01 #x00))) + +;; +;; Write a little endian 8bit value at address x in mem +;; +(define-fun write8 ((mem Mem) (x Address) (v I8)) Mem + (store mem x v)) + +;; +;; Write a little endian 16bit value at address x in mem +;; +(define-fun write16 ((mem Mem) (x Address) (v I16)) Mem + (let ((b0 ((_ extract 7 0) v)) + (b1 ((_ extract 15 8) v))) + (store (store mem x b0) (bvadd x one) b1))) + +;; +;; Write a little endian 32bit value at address x in mem +;; +(define-fun write32 ((mem Mem) (x Address) (v I32)) Mem + (let ((b0 ((_ extract 7 0) v)) + (b1 ((_ extract 15 8) v)) + (b2 ((_ extract 23 16) v)) + (b3 ((_ extract 31 24) v))) + (store (store (store (store mem x b0) (bvadd x one) b1) (bvadd x two) b2) (bvadd x three) b3))) + +;; +;; Write a little endian 64bit value at address x in mem +;; +(define-fun write64 ((mem Mem) (x Address) (v I64)) Mem + (let ((b0 ((_ extract 31 0) v)) + (b1 ((_ extract 63 32) v))) + (write32 (write32 mem x b0) (bvadd x four) b1))) + +;; +;; Write a little endian 128bit value at address x in mem +;; +(define-fun write128 ((mem Mem) (x Address) (v I128)) Mem + (let ((b0 ((_ extract 63 0) v)) + (b1 ((_ extract 127 64) v))) + (write64 (write64 mem x b0) (bvadd x eight) b1))) + + +;; +;; Read a little endian 1 bit value (8 bit aligned) at address x in mem +;; - returns a Boolean: true if what's stored at address x is non-zero +;; +(define-fun read1 ((mem Mem) (x Address)) Bool + (not (= (select mem x) #x00))) + +;; +;; Read a little endian 8bit value at address x in mem +;; +(define-fun read8 ((mem Mem) (x Address)) I8 + (select mem x)) + +;; +;; Read a little endian 16bit value at address x in mem +;; +(define-fun read16 ((mem Mem) (x Address)) I16 + (let ((b0 (select mem x)) + (b1 (select mem (bvadd x one)))) + (concat b1 b0))) + +;; +;; Read a little endian 32bit value at address x in mem +;; +(define-fun read32 ((mem Mem) (x Address)) I32 + (let ((b0 (select mem x)) + (b1 (select mem (bvadd x one))) + (b2 (select mem (bvadd x two))) + (b3 (select mem (bvadd x three)))) + (concat b3 (concat b2 (concat b1 b0))))) + +;; +;; Read a little endian 64bit value at address x in mem +;; +(define-fun read64 ((mem Mem) (x Address)) I64 + (let ((b0 (read32 mem x)) + (b1 (read32 mem (bvadd x four)))) + (concat b1 b0))) + +;; +;; Read a little endian 128bit value at address x in mem +;; +(define-fun read128 ((mem Mem) (x Address)) I128 + (let ((b0 (read64 mem x)) + (b1 (read64 mem (bvadd x eight)))) + (concat b1 b0))) + + +;; +;; Vectors of (2^1) int4 elements +;; +(define-sort vector_1_4 () (Array (_ BitVec 1) (_ BitVec 4))) + +(declare-fun vundef_1_4 () vector_1_4) + + +;; +;; Vectors of (2^1) int8 elements +;; +(define-sort vector_1_8 () (Array (_ BitVec 1) (_ BitVec 8))) + +(declare-fun vundef_1_8 () vector_1_8) + + +;; +;; Vectors of (2^1) int16 elements +;; +(define-sort vector_1_16 () (Array (_ BitVec 1) (_ BitVec 16))) + +(declare-fun vundef_1_16 () vector_1_16) + + +;; +;; Vectors of (2^1) int32 elements +;; +(define-sort vector_1_32 () (Array (_ BitVec 1) (_ BitVec 32))) + +(declare-fun vundef_1_32 () vector_1_32) + + +;; +;; Vectors of (2^1) int64 elements +;; +(define-sort vector_1_64 () (Array (_ BitVec 1) (_ BitVec 64))) + +(declare-fun vundef_1_64 () vector_1_64) + + +;; +;; Vectors of (2^2) int4 elements +;; +(define-sort vector_2_4 () (Array (_ BitVec 2) (_ BitVec 4))) + +(declare-fun vundef_2_4 () vector_2_4) + + +;; +;; Vectors of (2^2) int8 elements +;; +(define-sort vector_2_8 () (Array (_ BitVec 2) (_ BitVec 8))) + +(declare-fun vundef_2_8 () vector_2_8) + + +;; +;; Vectors of (2^2) int16 elements +;; +(define-sort vector_2_16 () (Array (_ BitVec 2) (_ BitVec 16))) + +(declare-fun vundef_2_16 () vector_2_16) + + +;; +;; Vectors of (2^2) int32 elements +;; +(define-sort vector_2_32 () (Array (_ BitVec 2) (_ BitVec 32))) + +(declare-fun vundef_2_32 () vector_2_32) + + +;; +;; Vectors of (2^2) int64 elements +;; +(define-sort vector_2_64 () (Array (_ BitVec 2) (_ BitVec 64))) + +(declare-fun vundef_2_64 () vector_2_64) + + +;; +;; Vectors of (2^3) int4 elements +;; +(define-sort vector_3_4 () (Array (_ BitVec 3) (_ BitVec 4))) + +(declare-fun vundef_3_4 () vector_3_4) + + +;; +;; Vectors of (2^3) int8 elements +;; +(define-sort vector_3_8 () (Array (_ BitVec 3) (_ BitVec 8))) + +(declare-fun vundef_3_8 () vector_3_8) + + +;; +;; Vectors of (2^3) int16 elements +;; +(define-sort vector_3_16 () (Array (_ BitVec 3) (_ BitVec 16))) + +(declare-fun vundef_3_16 () vector_3_16) + + +;; +;; Vectors of (2^3) int32 elements +;; +(define-sort vector_3_32 () (Array (_ BitVec 3) (_ BitVec 32))) + +(declare-fun vundef_3_32 () vector_3_32) + + +;; +;; Vectors of (2^3) int64 elements +;; +(define-sort vector_3_64 () (Array (_ BitVec 3) (_ BitVec 64))) + +(declare-fun vundef_3_64 () vector_3_64) + +;; Special case where we use Bool rather than bitvectors of size 1 + +(define-sort vector_1_1 () (Array (_ BitVec 1) Bool)) + +(declare-fun vundef_1_1 () vector_1_1) + +(define-fun vmake_1_1 ((x0 Bool) (x1 Bool)) vector_1_1 + (store (store vundef_1_1 #b0 x0) #b1 x1)) + +(define-sort vector_2_1 () (Array (_ BitVec 2) Bool)) + +(declare-fun vundef_2_1 () vector_2_1) + +(define-fun vmake_2_1 + ((x0 Bool) (x1 Bool) (x2 Bool) (x3 Bool)) vector_2_1 + (store (store (store (store vundef_2_1 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +(define-sort vector_3_1 () (Array (_ BitVec 3) Bool)) + +(declare-fun vundef_3_1 () vector_3_1) + +(define-fun vmake_3_1 + ((x0 Bool) (x1 Bool) (x2 Bool) (x3 Bool) (x4 Bool) (x5 Bool) (x6 Bool) (x7 Bool)) vector_3_1 + (store (store (store (store (store (store (store (store vundef_3_1 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; +;; Vectors of (2^1) i.e. two int4 elements +;; +(define-fun vmake_1_4 ((x0 (_ BitVec 4)) (x1 (_ BitVec 4))) vector_1_4 + (store (store vundef_1_4 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int4 elements +;; +(define-fun vmake_2_4 + ((x0 (_ BitVec 4)) (x1 (_ BitVec 4)) (x2 (_ BitVec 4)) (x3 (_ BitVec 4))) vector_2_4 + (store (store (store (store vundef_2_4 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int4 elements +;; +(define-fun vmake_3_4 + ((x0 (_ BitVec 4)) (x1 (_ BitVec 4)) (x2 (_ BitVec 4)) (x3 (_ BitVec 4))(x4 (_ BitVec 4)) (x5 (_ BitVec 4)) (x6 (_ BitVec 4)) (x7 (_ BitVec 4))) vector_3_4 + (store (store (store (store (store (store (store (store vundef_3_4 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int4 elements + + (define-fun vzero_1_4 () vector_1_4 (vmake_1_4 (_ bv0 4) (_ bv0 4))) + + (define-fun vzero_2_4 () vector_2_4 (vmake_2_4 (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4))) + + (define-fun vzero_3_4 () vector_3_4 (vmake_3_4 (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4) (_ bv0 4))) + + +;; +;; Vectors of (2^1) i.e. two int8 elements +;; +(define-fun vmake_1_8 ((x0 (_ BitVec 8)) (x1 (_ BitVec 8))) vector_1_8 + (store (store vundef_1_8 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int8 elements +;; +(define-fun vmake_2_8 + ((x0 (_ BitVec 8)) (x1 (_ BitVec 8)) (x2 (_ BitVec 8)) (x3 (_ BitVec 8))) vector_2_8 + (store (store (store (store vundef_2_8 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int8 elements +;; +(define-fun vmake_3_8 + ((x0 (_ BitVec 8)) (x1 (_ BitVec 8)) (x2 (_ BitVec 8)) (x3 (_ BitVec 8))(x4 (_ BitVec 8)) (x5 (_ BitVec 8)) (x6 (_ BitVec 8)) (x7 (_ BitVec 8))) vector_3_8 + (store (store (store (store (store (store (store (store vundef_3_8 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int8 elements + + (define-fun vzero_1_8 () vector_1_8 (vmake_1_8 (_ bv0 8) (_ bv0 8))) + + (define-fun vzero_2_8 () vector_2_8 (vmake_2_8 (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8))) + + (define-fun vzero_3_8 () vector_3_8 (vmake_3_8 (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8) (_ bv0 8))) + + +;; +;; Vectors of (2^1) i.e. two int16 elements +;; +(define-fun vmake_1_16 ((x0 (_ BitVec 16)) (x1 (_ BitVec 16))) vector_1_16 + (store (store vundef_1_16 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int16 elements +;; +(define-fun vmake_2_16 + ((x0 (_ BitVec 16)) (x1 (_ BitVec 16)) (x2 (_ BitVec 16)) (x3 (_ BitVec 16))) vector_2_16 + (store (store (store (store vundef_2_16 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int16 elements +;; +(define-fun vmake_3_16 + ((x0 (_ BitVec 16)) (x1 (_ BitVec 16)) (x2 (_ BitVec 16)) (x3 (_ BitVec 16))(x4 (_ BitVec 16)) (x5 (_ BitVec 16)) (x6 (_ BitVec 16)) (x7 (_ BitVec 16))) vector_3_16 + (store (store (store (store (store (store (store (store vundef_3_16 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int16 elements + + (define-fun vzero_1_16 () vector_1_16 (vmake_1_16 (_ bv0 16) (_ bv0 16))) + + (define-fun vzero_2_16 () vector_2_16 (vmake_2_16 (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16))) + + (define-fun vzero_3_16 () vector_3_16 (vmake_3_16 (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16) (_ bv0 16))) + + +;; +;; Vectors of (2^1) i.e. two int32 elements +;; +(define-fun vmake_1_32 ((x0 (_ BitVec 32)) (x1 (_ BitVec 32))) vector_1_32 + (store (store vundef_1_32 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int32 elements +;; +(define-fun vmake_2_32 + ((x0 (_ BitVec 32)) (x1 (_ BitVec 32)) (x2 (_ BitVec 32)) (x3 (_ BitVec 32))) vector_2_32 + (store (store (store (store vundef_2_32 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int32 elements +;; +(define-fun vmake_3_32 + ((x0 (_ BitVec 32)) (x1 (_ BitVec 32)) (x2 (_ BitVec 32)) (x3 (_ BitVec 32))(x4 (_ BitVec 32)) (x5 (_ BitVec 32)) (x6 (_ BitVec 32)) (x7 (_ BitVec 32))) vector_3_32 + (store (store (store (store (store (store (store (store vundef_3_32 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int32 elements + + (define-fun vzero_1_32 () vector_1_32 (vmake_1_32 (_ bv0 32) (_ bv0 32))) + + (define-fun vzero_2_32 () vector_2_32 (vmake_2_32 (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32))) + + (define-fun vzero_3_32 () vector_3_32 (vmake_3_32 (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32) (_ bv0 32))) + + +;; +;; Vectors of (2^1) i.e. two int64 elements +;; +(define-fun vmake_1_64 ((x0 (_ BitVec 64)) (x1 (_ BitVec 64))) vector_1_64 + (store (store vundef_1_64 #b0 x0) #b1 x1)) + +;; +;; Vectors of (2^2) i.e. four int64 elements +;; +(define-fun vmake_2_64 + ((x0 (_ BitVec 64)) (x1 (_ BitVec 64)) (x2 (_ BitVec 64)) (x3 (_ BitVec 64))) vector_2_64 + (store (store (store (store vundef_2_64 #b00 x0) #b01 x1) #b10 x2) #b11 x3)) + +;; +;; Vectors of (2^3) i.e. eight int64 elements +;; +(define-fun vmake_3_64 + ((x0 (_ BitVec 64)) (x1 (_ BitVec 64)) (x2 (_ BitVec 64)) (x3 (_ BitVec 64))(x4 (_ BitVec 64)) (x5 (_ BitVec 64)) (x6 (_ BitVec 64)) (x7 (_ BitVec 64))) vector_3_64 + (store (store (store (store (store (store (store (store vundef_3_64 #b000 x0) #b001 x1) #b010 x2) #b011 x3) #b100 x4) #b101 x5) #b110 x6) #b111 x7)) + + +;; zero vectors with int64 elements + + (define-fun vzero_1_64 () vector_1_64 (vmake_1_64 (_ bv0 64) (_ bv0 64))) + + (define-fun vzero_2_64 () vector_2_64 (vmake_2_64 (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64))) + + (define-fun vzero_3_64 () vector_3_64 (vmake_3_64 (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64) (_ bv0 64))) + + +(define-fun vbvadd_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvadd (select x #b0) (select y #b0))) + (z1 (bvadd (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvadd_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvadd (select x #b0) (select y #b0))) + (z1 (bvadd (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvadd_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvadd (select x #b0) (select y #b0))) + (z1 (bvadd (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvadd_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvadd (select x #b0) (select y #b0))) + (z1 (bvadd (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvsub_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvsub (select x #b0) (select y #b0))) + (z1 (bvsub (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvsub_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvsub (select x #b0) (select y #b0))) + (z1 (bvsub (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvsub_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvsub (select x #b0) (select y #b0))) + (z1 (bvsub (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvsub_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvsub (select x #b0) (select y #b0))) + (z1 (bvsub (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvmul_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvmul (select x #b0) (select y #b0))) + (z1 (bvmul (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvmul_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvmul (select x #b0) (select y #b0))) + (z1 (bvmul (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvmul_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvmul (select x #b0) (select y #b0))) + (z1 (bvmul (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvmul_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvmul (select x #b0) (select y #b0))) + (z1 (bvmul (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvshl_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvshl (select x #b0) (select y #b0))) + (z1 (bvshl (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvshl_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvshl (select x #b0) (select y #b0))) + (z1 (bvshl (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvshl_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvshl (select x #b0) (select y #b0))) + (z1 (bvshl (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvshl_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvshl (select x #b0) (select y #b0))) + (z1 (bvshl (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvsdiv_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvsdiv (select x #b0) (select y #b0))) + (z1 (bvsdiv (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvsdiv_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvsdiv (select x #b0) (select y #b0))) + (z1 (bvsdiv (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvsdiv_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvsdiv (select x #b0) (select y #b0))) + (z1 (bvsdiv (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvsdiv_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvsdiv (select x #b0) (select y #b0))) + (z1 (bvsdiv (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvudiv_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvudiv (select x #b0) (select y #b0))) + (z1 (bvudiv (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvudiv_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvudiv (select x #b0) (select y #b0))) + (z1 (bvudiv (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvudiv_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvudiv (select x #b0) (select y #b0))) + (z1 (bvudiv (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvudiv_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvudiv (select x #b0) (select y #b0))) + (z1 (bvudiv (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvlshr_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvlshr (select x #b0) (select y #b0))) + (z1 (bvlshr (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvlshr_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvlshr (select x #b0) (select y #b0))) + (z1 (bvlshr (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvlshr_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvlshr (select x #b0) (select y #b0))) + (z1 (bvlshr (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvlshr_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvlshr (select x #b0) (select y #b0))) + (z1 (bvlshr (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvashr_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvashr (select x #b0) (select y #b0))) + (z1 (bvashr (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvashr_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvashr (select x #b0) (select y #b0))) + (z1 (bvashr (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvashr_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvashr (select x #b0) (select y #b0))) + (z1 (bvashr (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvashr_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvashr (select x #b0) (select y #b0))) + (z1 (bvashr (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvurem_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvurem (select x #b0) (select y #b0))) + (z1 (bvurem (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvurem_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvurem (select x #b0) (select y #b0))) + (z1 (bvurem (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvurem_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvurem (select x #b0) (select y #b0))) + (z1 (bvurem (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvurem_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvurem (select x #b0) (select y #b0))) + (z1 (bvurem (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvsrem_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvsrem (select x #b0) (select y #b0))) + (z1 (bvsrem (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvsrem_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvsrem (select x #b0) (select y #b0))) + (z1 (bvsrem (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvsrem_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvsrem (select x #b0) (select y #b0))) + (z1 (bvsrem (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvsrem_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvsrem (select x #b0) (select y #b0))) + (z1 (bvsrem (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvand_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvand (select x #b0) (select y #b0))) + (z1 (bvand (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvand_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvand (select x #b0) (select y #b0))) + (z1 (bvand (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvand_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvand (select x #b0) (select y #b0))) + (z1 (bvand (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvand_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvand (select x #b0) (select y #b0))) + (z1 (bvand (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvor_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvor (select x #b0) (select y #b0))) + (z1 (bvor (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvor_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvor (select x #b0) (select y #b0))) + (z1 (bvor (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvor_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvor (select x #b0) (select y #b0))) + (z1 (bvor (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvor_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvor (select x #b0) (select y #b0))) + (z1 (bvor (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + +(define-fun vbvxor_1_8 ((x vector_1_8) (y vector_1_8)) vector_1_8 + (let ((z0 (bvxor (select x #b0) (select y #b0))) + (z1 (bvxor (select x #b1) (select y #b1)))) + (vmake_1_8 z0 z1))) + +(define-fun vbvxor_1_16 ((x vector_1_16) (y vector_1_16)) vector_1_16 + (let ((z0 (bvxor (select x #b0) (select y #b0))) + (z1 (bvxor (select x #b1) (select y #b1)))) + (vmake_1_16 z0 z1))) + +(define-fun vbvxor_1_32 ((x vector_1_32) (y vector_1_32)) vector_1_32 + (let ((z0 (bvxor (select x #b0) (select y #b0))) + (z1 (bvxor (select x #b1) (select y #b1)))) + (vmake_1_32 z0 z1))) + +(define-fun vbvxor_1_64 ((x vector_1_64) (y vector_1_64)) vector_1_64 + (let ((z0 (bvxor (select x #b0) (select y #b0))) + (z1 (bvxor (select x #b1) (select y #b1)))) + (vmake_1_64 z0 z1))) + + (define-fun vbvadd_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvadd (select x #b00) (select y #b00))) + (z1 (bvadd (select x #b01) (select y #b01))) + (z2 (bvadd (select x #b10) (select y #b10))) + (z3 (bvadd (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvadd_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvadd (select x #b00) (select y #b00))) + (z1 (bvadd (select x #b01) (select y #b01))) + (z2 (bvadd (select x #b10) (select y #b10))) + (z3 (bvadd (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvadd_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvadd (select x #b00) (select y #b00))) + (z1 (bvadd (select x #b01) (select y #b01))) + (z2 (bvadd (select x #b10) (select y #b10))) + (z3 (bvadd (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvadd_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvadd (select x #b00) (select y #b00))) + (z1 (bvadd (select x #b01) (select y #b01))) + (z2 (bvadd (select x #b10) (select y #b10))) + (z3 (bvadd (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvsub_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvsub (select x #b00) (select y #b00))) + (z1 (bvsub (select x #b01) (select y #b01))) + (z2 (bvsub (select x #b10) (select y #b10))) + (z3 (bvsub (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvsub_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvsub (select x #b00) (select y #b00))) + (z1 (bvsub (select x #b01) (select y #b01))) + (z2 (bvsub (select x #b10) (select y #b10))) + (z3 (bvsub (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvsub_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvsub (select x #b00) (select y #b00))) + (z1 (bvsub (select x #b01) (select y #b01))) + (z2 (bvsub (select x #b10) (select y #b10))) + (z3 (bvsub (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvsub_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvsub (select x #b00) (select y #b00))) + (z1 (bvsub (select x #b01) (select y #b01))) + (z2 (bvsub (select x #b10) (select y #b10))) + (z3 (bvsub (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvmul_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvmul (select x #b00) (select y #b00))) + (z1 (bvmul (select x #b01) (select y #b01))) + (z2 (bvmul (select x #b10) (select y #b10))) + (z3 (bvmul (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvmul_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvmul (select x #b00) (select y #b00))) + (z1 (bvmul (select x #b01) (select y #b01))) + (z2 (bvmul (select x #b10) (select y #b10))) + (z3 (bvmul (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvmul_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvmul (select x #b00) (select y #b00))) + (z1 (bvmul (select x #b01) (select y #b01))) + (z2 (bvmul (select x #b10) (select y #b10))) + (z3 (bvmul (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvmul_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvmul (select x #b00) (select y #b00))) + (z1 (bvmul (select x #b01) (select y #b01))) + (z2 (bvmul (select x #b10) (select y #b10))) + (z3 (bvmul (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvshl_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvshl (select x #b00) (select y #b00))) + (z1 (bvshl (select x #b01) (select y #b01))) + (z2 (bvshl (select x #b10) (select y #b10))) + (z3 (bvshl (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvshl_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvshl (select x #b00) (select y #b00))) + (z1 (bvshl (select x #b01) (select y #b01))) + (z2 (bvshl (select x #b10) (select y #b10))) + (z3 (bvshl (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvshl_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvshl (select x #b00) (select y #b00))) + (z1 (bvshl (select x #b01) (select y #b01))) + (z2 (bvshl (select x #b10) (select y #b10))) + (z3 (bvshl (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvshl_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvshl (select x #b00) (select y #b00))) + (z1 (bvshl (select x #b01) (select y #b01))) + (z2 (bvshl (select x #b10) (select y #b10))) + (z3 (bvshl (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvsdiv_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvsdiv (select x #b00) (select y #b00))) + (z1 (bvsdiv (select x #b01) (select y #b01))) + (z2 (bvsdiv (select x #b10) (select y #b10))) + (z3 (bvsdiv (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvsdiv_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvsdiv (select x #b00) (select y #b00))) + (z1 (bvsdiv (select x #b01) (select y #b01))) + (z2 (bvsdiv (select x #b10) (select y #b10))) + (z3 (bvsdiv (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvsdiv_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvsdiv (select x #b00) (select y #b00))) + (z1 (bvsdiv (select x #b01) (select y #b01))) + (z2 (bvsdiv (select x #b10) (select y #b10))) + (z3 (bvsdiv (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvsdiv_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvsdiv (select x #b00) (select y #b00))) + (z1 (bvsdiv (select x #b01) (select y #b01))) + (z2 (bvsdiv (select x #b10) (select y #b10))) + (z3 (bvsdiv (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvudiv_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvudiv (select x #b00) (select y #b00))) + (z1 (bvudiv (select x #b01) (select y #b01))) + (z2 (bvudiv (select x #b10) (select y #b10))) + (z3 (bvudiv (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvudiv_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvudiv (select x #b00) (select y #b00))) + (z1 (bvudiv (select x #b01) (select y #b01))) + (z2 (bvudiv (select x #b10) (select y #b10))) + (z3 (bvudiv (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvudiv_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvudiv (select x #b00) (select y #b00))) + (z1 (bvudiv (select x #b01) (select y #b01))) + (z2 (bvudiv (select x #b10) (select y #b10))) + (z3 (bvudiv (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvudiv_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvudiv (select x #b00) (select y #b00))) + (z1 (bvudiv (select x #b01) (select y #b01))) + (z2 (bvudiv (select x #b10) (select y #b10))) + (z3 (bvudiv (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvlshr_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvlshr (select x #b00) (select y #b00))) + (z1 (bvlshr (select x #b01) (select y #b01))) + (z2 (bvlshr (select x #b10) (select y #b10))) + (z3 (bvlshr (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvlshr_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvlshr (select x #b00) (select y #b00))) + (z1 (bvlshr (select x #b01) (select y #b01))) + (z2 (bvlshr (select x #b10) (select y #b10))) + (z3 (bvlshr (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvlshr_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvlshr (select x #b00) (select y #b00))) + (z1 (bvlshr (select x #b01) (select y #b01))) + (z2 (bvlshr (select x #b10) (select y #b10))) + (z3 (bvlshr (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvlshr_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvlshr (select x #b00) (select y #b00))) + (z1 (bvlshr (select x #b01) (select y #b01))) + (z2 (bvlshr (select x #b10) (select y #b10))) + (z3 (bvlshr (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvashr_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvashr (select x #b00) (select y #b00))) + (z1 (bvashr (select x #b01) (select y #b01))) + (z2 (bvashr (select x #b10) (select y #b10))) + (z3 (bvashr (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvashr_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvashr (select x #b00) (select y #b00))) + (z1 (bvashr (select x #b01) (select y #b01))) + (z2 (bvashr (select x #b10) (select y #b10))) + (z3 (bvashr (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvashr_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvashr (select x #b00) (select y #b00))) + (z1 (bvashr (select x #b01) (select y #b01))) + (z2 (bvashr (select x #b10) (select y #b10))) + (z3 (bvashr (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvashr_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvashr (select x #b00) (select y #b00))) + (z1 (bvashr (select x #b01) (select y #b01))) + (z2 (bvashr (select x #b10) (select y #b10))) + (z3 (bvashr (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvurem_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvurem (select x #b00) (select y #b00))) + (z1 (bvurem (select x #b01) (select y #b01))) + (z2 (bvurem (select x #b10) (select y #b10))) + (z3 (bvurem (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvurem_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvurem (select x #b00) (select y #b00))) + (z1 (bvurem (select x #b01) (select y #b01))) + (z2 (bvurem (select x #b10) (select y #b10))) + (z3 (bvurem (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvurem_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvurem (select x #b00) (select y #b00))) + (z1 (bvurem (select x #b01) (select y #b01))) + (z2 (bvurem (select x #b10) (select y #b10))) + (z3 (bvurem (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvurem_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvurem (select x #b00) (select y #b00))) + (z1 (bvurem (select x #b01) (select y #b01))) + (z2 (bvurem (select x #b10) (select y #b10))) + (z3 (bvurem (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvsrem_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvsrem (select x #b00) (select y #b00))) + (z1 (bvsrem (select x #b01) (select y #b01))) + (z2 (bvsrem (select x #b10) (select y #b10))) + (z3 (bvsrem (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvsrem_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvsrem (select x #b00) (select y #b00))) + (z1 (bvsrem (select x #b01) (select y #b01))) + (z2 (bvsrem (select x #b10) (select y #b10))) + (z3 (bvsrem (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvsrem_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvsrem (select x #b00) (select y #b00))) + (z1 (bvsrem (select x #b01) (select y #b01))) + (z2 (bvsrem (select x #b10) (select y #b10))) + (z3 (bvsrem (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvsrem_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvsrem (select x #b00) (select y #b00))) + (z1 (bvsrem (select x #b01) (select y #b01))) + (z2 (bvsrem (select x #b10) (select y #b10))) + (z3 (bvsrem (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvand_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvand (select x #b00) (select y #b00))) + (z1 (bvand (select x #b01) (select y #b01))) + (z2 (bvand (select x #b10) (select y #b10))) + (z3 (bvand (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvand_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvand (select x #b00) (select y #b00))) + (z1 (bvand (select x #b01) (select y #b01))) + (z2 (bvand (select x #b10) (select y #b10))) + (z3 (bvand (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvand_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvand (select x #b00) (select y #b00))) + (z1 (bvand (select x #b01) (select y #b01))) + (z2 (bvand (select x #b10) (select y #b10))) + (z3 (bvand (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvand_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvand (select x #b00) (select y #b00))) + (z1 (bvand (select x #b01) (select y #b01))) + (z2 (bvand (select x #b10) (select y #b10))) + (z3 (bvand (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvor_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvor (select x #b00) (select y #b00))) + (z1 (bvor (select x #b01) (select y #b01))) + (z2 (bvor (select x #b10) (select y #b10))) + (z3 (bvor (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvor_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvor (select x #b00) (select y #b00))) + (z1 (bvor (select x #b01) (select y #b01))) + (z2 (bvor (select x #b10) (select y #b10))) + (z3 (bvor (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvor_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvor (select x #b00) (select y #b00))) + (z1 (bvor (select x #b01) (select y #b01))) + (z2 (bvor (select x #b10) (select y #b10))) + (z3 (bvor (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvor_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvor (select x #b00) (select y #b00))) + (z1 (bvor (select x #b01) (select y #b01))) + (z2 (bvor (select x #b10) (select y #b10))) + (z3 (bvor (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvxor_2_8 ((x vector_2_8) (y vector_2_8)) vector_2_8 + (let ((z0 (bvxor (select x #b00) (select y #b00))) + (z1 (bvxor (select x #b01) (select y #b01))) + (z2 (bvxor (select x #b10) (select y #b10))) + (z3 (bvxor (select x #b11) (select y #b11)))) + (vmake_2_8 z0 z1 z2 z3))) + + + (define-fun vbvxor_2_16 ((x vector_2_16) (y vector_2_16)) vector_2_16 + (let ((z0 (bvxor (select x #b00) (select y #b00))) + (z1 (bvxor (select x #b01) (select y #b01))) + (z2 (bvxor (select x #b10) (select y #b10))) + (z3 (bvxor (select x #b11) (select y #b11)))) + (vmake_2_16 z0 z1 z2 z3))) + + + (define-fun vbvxor_2_32 ((x vector_2_32) (y vector_2_32)) vector_2_32 + (let ((z0 (bvxor (select x #b00) (select y #b00))) + (z1 (bvxor (select x #b01) (select y #b01))) + (z2 (bvxor (select x #b10) (select y #b10))) + (z3 (bvxor (select x #b11) (select y #b11)))) + (vmake_2_32 z0 z1 z2 z3))) + + + (define-fun vbvxor_2_64 ((x vector_2_64) (y vector_2_64)) vector_2_64 + (let ((z0 (bvxor (select x #b00) (select y #b00))) + (z1 (bvxor (select x #b01) (select y #b01))) + (z2 (bvxor (select x #b10) (select y #b10))) + (z3 (bvxor (select x #b11) (select y #b11)))) + (vmake_2_64 z0 z1 z2 z3))) + + + (define-fun vbvadd_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvadd (select x #b000) (select y #b000))) + (z1 (bvadd (select x #b001) (select y #b001))) + (z2 (bvadd (select x #b010) (select y #b010))) + (z3 (bvadd (select x #b011) (select y #b011))) + (z4 (bvadd (select x #b100) (select y #b100))) + (z5 (bvadd (select x #b101) (select y #b101))) + (z6 (bvadd (select x #b110) (select y #b110))) + (z7 (bvadd (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvadd_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvadd (select x #b000) (select y #b000))) + (z1 (bvadd (select x #b001) (select y #b001))) + (z2 (bvadd (select x #b010) (select y #b010))) + (z3 (bvadd (select x #b011) (select y #b011))) + (z4 (bvadd (select x #b100) (select y #b100))) + (z5 (bvadd (select x #b101) (select y #b101))) + (z6 (bvadd (select x #b110) (select y #b110))) + (z7 (bvadd (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvadd_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvadd (select x #b000) (select y #b000))) + (z1 (bvadd (select x #b001) (select y #b001))) + (z2 (bvadd (select x #b010) (select y #b010))) + (z3 (bvadd (select x #b011) (select y #b011))) + (z4 (bvadd (select x #b100) (select y #b100))) + (z5 (bvadd (select x #b101) (select y #b101))) + (z6 (bvadd (select x #b110) (select y #b110))) + (z7 (bvadd (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvadd_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvadd (select x #b000) (select y #b000))) + (z1 (bvadd (select x #b001) (select y #b001))) + (z2 (bvadd (select x #b010) (select y #b010))) + (z3 (bvadd (select x #b011) (select y #b011))) + (z4 (bvadd (select x #b100) (select y #b100))) + (z5 (bvadd (select x #b101) (select y #b101))) + (z6 (bvadd (select x #b110) (select y #b110))) + (z7 (bvadd (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsub_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvsub (select x #b000) (select y #b000))) + (z1 (bvsub (select x #b001) (select y #b001))) + (z2 (bvsub (select x #b010) (select y #b010))) + (z3 (bvsub (select x #b011) (select y #b011))) + (z4 (bvsub (select x #b100) (select y #b100))) + (z5 (bvsub (select x #b101) (select y #b101))) + (z6 (bvsub (select x #b110) (select y #b110))) + (z7 (bvsub (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsub_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvsub (select x #b000) (select y #b000))) + (z1 (bvsub (select x #b001) (select y #b001))) + (z2 (bvsub (select x #b010) (select y #b010))) + (z3 (bvsub (select x #b011) (select y #b011))) + (z4 (bvsub (select x #b100) (select y #b100))) + (z5 (bvsub (select x #b101) (select y #b101))) + (z6 (bvsub (select x #b110) (select y #b110))) + (z7 (bvsub (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsub_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvsub (select x #b000) (select y #b000))) + (z1 (bvsub (select x #b001) (select y #b001))) + (z2 (bvsub (select x #b010) (select y #b010))) + (z3 (bvsub (select x #b011) (select y #b011))) + (z4 (bvsub (select x #b100) (select y #b100))) + (z5 (bvsub (select x #b101) (select y #b101))) + (z6 (bvsub (select x #b110) (select y #b110))) + (z7 (bvsub (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsub_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvsub (select x #b000) (select y #b000))) + (z1 (bvsub (select x #b001) (select y #b001))) + (z2 (bvsub (select x #b010) (select y #b010))) + (z3 (bvsub (select x #b011) (select y #b011))) + (z4 (bvsub (select x #b100) (select y #b100))) + (z5 (bvsub (select x #b101) (select y #b101))) + (z6 (bvsub (select x #b110) (select y #b110))) + (z7 (bvsub (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvmul_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvmul (select x #b000) (select y #b000))) + (z1 (bvmul (select x #b001) (select y #b001))) + (z2 (bvmul (select x #b010) (select y #b010))) + (z3 (bvmul (select x #b011) (select y #b011))) + (z4 (bvmul (select x #b100) (select y #b100))) + (z5 (bvmul (select x #b101) (select y #b101))) + (z6 (bvmul (select x #b110) (select y #b110))) + (z7 (bvmul (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvmul_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvmul (select x #b000) (select y #b000))) + (z1 (bvmul (select x #b001) (select y #b001))) + (z2 (bvmul (select x #b010) (select y #b010))) + (z3 (bvmul (select x #b011) (select y #b011))) + (z4 (bvmul (select x #b100) (select y #b100))) + (z5 (bvmul (select x #b101) (select y #b101))) + (z6 (bvmul (select x #b110) (select y #b110))) + (z7 (bvmul (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvmul_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvmul (select x #b000) (select y #b000))) + (z1 (bvmul (select x #b001) (select y #b001))) + (z2 (bvmul (select x #b010) (select y #b010))) + (z3 (bvmul (select x #b011) (select y #b011))) + (z4 (bvmul (select x #b100) (select y #b100))) + (z5 (bvmul (select x #b101) (select y #b101))) + (z6 (bvmul (select x #b110) (select y #b110))) + (z7 (bvmul (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvmul_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvmul (select x #b000) (select y #b000))) + (z1 (bvmul (select x #b001) (select y #b001))) + (z2 (bvmul (select x #b010) (select y #b010))) + (z3 (bvmul (select x #b011) (select y #b011))) + (z4 (bvmul (select x #b100) (select y #b100))) + (z5 (bvmul (select x #b101) (select y #b101))) + (z6 (bvmul (select x #b110) (select y #b110))) + (z7 (bvmul (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvshl_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvshl (select x #b000) (select y #b000))) + (z1 (bvshl (select x #b001) (select y #b001))) + (z2 (bvshl (select x #b010) (select y #b010))) + (z3 (bvshl (select x #b011) (select y #b011))) + (z4 (bvshl (select x #b100) (select y #b100))) + (z5 (bvshl (select x #b101) (select y #b101))) + (z6 (bvshl (select x #b110) (select y #b110))) + (z7 (bvshl (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvshl_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvshl (select x #b000) (select y #b000))) + (z1 (bvshl (select x #b001) (select y #b001))) + (z2 (bvshl (select x #b010) (select y #b010))) + (z3 (bvshl (select x #b011) (select y #b011))) + (z4 (bvshl (select x #b100) (select y #b100))) + (z5 (bvshl (select x #b101) (select y #b101))) + (z6 (bvshl (select x #b110) (select y #b110))) + (z7 (bvshl (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvshl_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvshl (select x #b000) (select y #b000))) + (z1 (bvshl (select x #b001) (select y #b001))) + (z2 (bvshl (select x #b010) (select y #b010))) + (z3 (bvshl (select x #b011) (select y #b011))) + (z4 (bvshl (select x #b100) (select y #b100))) + (z5 (bvshl (select x #b101) (select y #b101))) + (z6 (bvshl (select x #b110) (select y #b110))) + (z7 (bvshl (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvshl_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvshl (select x #b000) (select y #b000))) + (z1 (bvshl (select x #b001) (select y #b001))) + (z2 (bvshl (select x #b010) (select y #b010))) + (z3 (bvshl (select x #b011) (select y #b011))) + (z4 (bvshl (select x #b100) (select y #b100))) + (z5 (bvshl (select x #b101) (select y #b101))) + (z6 (bvshl (select x #b110) (select y #b110))) + (z7 (bvshl (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsdiv_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvsdiv (select x #b000) (select y #b000))) + (z1 (bvsdiv (select x #b001) (select y #b001))) + (z2 (bvsdiv (select x #b010) (select y #b010))) + (z3 (bvsdiv (select x #b011) (select y #b011))) + (z4 (bvsdiv (select x #b100) (select y #b100))) + (z5 (bvsdiv (select x #b101) (select y #b101))) + (z6 (bvsdiv (select x #b110) (select y #b110))) + (z7 (bvsdiv (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsdiv_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvsdiv (select x #b000) (select y #b000))) + (z1 (bvsdiv (select x #b001) (select y #b001))) + (z2 (bvsdiv (select x #b010) (select y #b010))) + (z3 (bvsdiv (select x #b011) (select y #b011))) + (z4 (bvsdiv (select x #b100) (select y #b100))) + (z5 (bvsdiv (select x #b101) (select y #b101))) + (z6 (bvsdiv (select x #b110) (select y #b110))) + (z7 (bvsdiv (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsdiv_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvsdiv (select x #b000) (select y #b000))) + (z1 (bvsdiv (select x #b001) (select y #b001))) + (z2 (bvsdiv (select x #b010) (select y #b010))) + (z3 (bvsdiv (select x #b011) (select y #b011))) + (z4 (bvsdiv (select x #b100) (select y #b100))) + (z5 (bvsdiv (select x #b101) (select y #b101))) + (z6 (bvsdiv (select x #b110) (select y #b110))) + (z7 (bvsdiv (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsdiv_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvsdiv (select x #b000) (select y #b000))) + (z1 (bvsdiv (select x #b001) (select y #b001))) + (z2 (bvsdiv (select x #b010) (select y #b010))) + (z3 (bvsdiv (select x #b011) (select y #b011))) + (z4 (bvsdiv (select x #b100) (select y #b100))) + (z5 (bvsdiv (select x #b101) (select y #b101))) + (z6 (bvsdiv (select x #b110) (select y #b110))) + (z7 (bvsdiv (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvudiv_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvudiv (select x #b000) (select y #b000))) + (z1 (bvudiv (select x #b001) (select y #b001))) + (z2 (bvudiv (select x #b010) (select y #b010))) + (z3 (bvudiv (select x #b011) (select y #b011))) + (z4 (bvudiv (select x #b100) (select y #b100))) + (z5 (bvudiv (select x #b101) (select y #b101))) + (z6 (bvudiv (select x #b110) (select y #b110))) + (z7 (bvudiv (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvudiv_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvudiv (select x #b000) (select y #b000))) + (z1 (bvudiv (select x #b001) (select y #b001))) + (z2 (bvudiv (select x #b010) (select y #b010))) + (z3 (bvudiv (select x #b011) (select y #b011))) + (z4 (bvudiv (select x #b100) (select y #b100))) + (z5 (bvudiv (select x #b101) (select y #b101))) + (z6 (bvudiv (select x #b110) (select y #b110))) + (z7 (bvudiv (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvudiv_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvudiv (select x #b000) (select y #b000))) + (z1 (bvudiv (select x #b001) (select y #b001))) + (z2 (bvudiv (select x #b010) (select y #b010))) + (z3 (bvudiv (select x #b011) (select y #b011))) + (z4 (bvudiv (select x #b100) (select y #b100))) + (z5 (bvudiv (select x #b101) (select y #b101))) + (z6 (bvudiv (select x #b110) (select y #b110))) + (z7 (bvudiv (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvudiv_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvudiv (select x #b000) (select y #b000))) + (z1 (bvudiv (select x #b001) (select y #b001))) + (z2 (bvudiv (select x #b010) (select y #b010))) + (z3 (bvudiv (select x #b011) (select y #b011))) + (z4 (bvudiv (select x #b100) (select y #b100))) + (z5 (bvudiv (select x #b101) (select y #b101))) + (z6 (bvudiv (select x #b110) (select y #b110))) + (z7 (bvudiv (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvlshr_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvlshr (select x #b000) (select y #b000))) + (z1 (bvlshr (select x #b001) (select y #b001))) + (z2 (bvlshr (select x #b010) (select y #b010))) + (z3 (bvlshr (select x #b011) (select y #b011))) + (z4 (bvlshr (select x #b100) (select y #b100))) + (z5 (bvlshr (select x #b101) (select y #b101))) + (z6 (bvlshr (select x #b110) (select y #b110))) + (z7 (bvlshr (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvlshr_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvlshr (select x #b000) (select y #b000))) + (z1 (bvlshr (select x #b001) (select y #b001))) + (z2 (bvlshr (select x #b010) (select y #b010))) + (z3 (bvlshr (select x #b011) (select y #b011))) + (z4 (bvlshr (select x #b100) (select y #b100))) + (z5 (bvlshr (select x #b101) (select y #b101))) + (z6 (bvlshr (select x #b110) (select y #b110))) + (z7 (bvlshr (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvlshr_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvlshr (select x #b000) (select y #b000))) + (z1 (bvlshr (select x #b001) (select y #b001))) + (z2 (bvlshr (select x #b010) (select y #b010))) + (z3 (bvlshr (select x #b011) (select y #b011))) + (z4 (bvlshr (select x #b100) (select y #b100))) + (z5 (bvlshr (select x #b101) (select y #b101))) + (z6 (bvlshr (select x #b110) (select y #b110))) + (z7 (bvlshr (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvlshr_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvlshr (select x #b000) (select y #b000))) + (z1 (bvlshr (select x #b001) (select y #b001))) + (z2 (bvlshr (select x #b010) (select y #b010))) + (z3 (bvlshr (select x #b011) (select y #b011))) + (z4 (bvlshr (select x #b100) (select y #b100))) + (z5 (bvlshr (select x #b101) (select y #b101))) + (z6 (bvlshr (select x #b110) (select y #b110))) + (z7 (bvlshr (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvashr_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvashr (select x #b000) (select y #b000))) + (z1 (bvashr (select x #b001) (select y #b001))) + (z2 (bvashr (select x #b010) (select y #b010))) + (z3 (bvashr (select x #b011) (select y #b011))) + (z4 (bvashr (select x #b100) (select y #b100))) + (z5 (bvashr (select x #b101) (select y #b101))) + (z6 (bvashr (select x #b110) (select y #b110))) + (z7 (bvashr (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvashr_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvashr (select x #b000) (select y #b000))) + (z1 (bvashr (select x #b001) (select y #b001))) + (z2 (bvashr (select x #b010) (select y #b010))) + (z3 (bvashr (select x #b011) (select y #b011))) + (z4 (bvashr (select x #b100) (select y #b100))) + (z5 (bvashr (select x #b101) (select y #b101))) + (z6 (bvashr (select x #b110) (select y #b110))) + (z7 (bvashr (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvashr_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvashr (select x #b000) (select y #b000))) + (z1 (bvashr (select x #b001) (select y #b001))) + (z2 (bvashr (select x #b010) (select y #b010))) + (z3 (bvashr (select x #b011) (select y #b011))) + (z4 (bvashr (select x #b100) (select y #b100))) + (z5 (bvashr (select x #b101) (select y #b101))) + (z6 (bvashr (select x #b110) (select y #b110))) + (z7 (bvashr (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvashr_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvashr (select x #b000) (select y #b000))) + (z1 (bvashr (select x #b001) (select y #b001))) + (z2 (bvashr (select x #b010) (select y #b010))) + (z3 (bvashr (select x #b011) (select y #b011))) + (z4 (bvashr (select x #b100) (select y #b100))) + (z5 (bvashr (select x #b101) (select y #b101))) + (z6 (bvashr (select x #b110) (select y #b110))) + (z7 (bvashr (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvurem_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvurem (select x #b000) (select y #b000))) + (z1 (bvurem (select x #b001) (select y #b001))) + (z2 (bvurem (select x #b010) (select y #b010))) + (z3 (bvurem (select x #b011) (select y #b011))) + (z4 (bvurem (select x #b100) (select y #b100))) + (z5 (bvurem (select x #b101) (select y #b101))) + (z6 (bvurem (select x #b110) (select y #b110))) + (z7 (bvurem (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvurem_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvurem (select x #b000) (select y #b000))) + (z1 (bvurem (select x #b001) (select y #b001))) + (z2 (bvurem (select x #b010) (select y #b010))) + (z3 (bvurem (select x #b011) (select y #b011))) + (z4 (bvurem (select x #b100) (select y #b100))) + (z5 (bvurem (select x #b101) (select y #b101))) + (z6 (bvurem (select x #b110) (select y #b110))) + (z7 (bvurem (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvurem_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvurem (select x #b000) (select y #b000))) + (z1 (bvurem (select x #b001) (select y #b001))) + (z2 (bvurem (select x #b010) (select y #b010))) + (z3 (bvurem (select x #b011) (select y #b011))) + (z4 (bvurem (select x #b100) (select y #b100))) + (z5 (bvurem (select x #b101) (select y #b101))) + (z6 (bvurem (select x #b110) (select y #b110))) + (z7 (bvurem (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvurem_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvurem (select x #b000) (select y #b000))) + (z1 (bvurem (select x #b001) (select y #b001))) + (z2 (bvurem (select x #b010) (select y #b010))) + (z3 (bvurem (select x #b011) (select y #b011))) + (z4 (bvurem (select x #b100) (select y #b100))) + (z5 (bvurem (select x #b101) (select y #b101))) + (z6 (bvurem (select x #b110) (select y #b110))) + (z7 (bvurem (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsrem_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvsrem (select x #b000) (select y #b000))) + (z1 (bvsrem (select x #b001) (select y #b001))) + (z2 (bvsrem (select x #b010) (select y #b010))) + (z3 (bvsrem (select x #b011) (select y #b011))) + (z4 (bvsrem (select x #b100) (select y #b100))) + (z5 (bvsrem (select x #b101) (select y #b101))) + (z6 (bvsrem (select x #b110) (select y #b110))) + (z7 (bvsrem (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsrem_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvsrem (select x #b000) (select y #b000))) + (z1 (bvsrem (select x #b001) (select y #b001))) + (z2 (bvsrem (select x #b010) (select y #b010))) + (z3 (bvsrem (select x #b011) (select y #b011))) + (z4 (bvsrem (select x #b100) (select y #b100))) + (z5 (bvsrem (select x #b101) (select y #b101))) + (z6 (bvsrem (select x #b110) (select y #b110))) + (z7 (bvsrem (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsrem_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvsrem (select x #b000) (select y #b000))) + (z1 (bvsrem (select x #b001) (select y #b001))) + (z2 (bvsrem (select x #b010) (select y #b010))) + (z3 (bvsrem (select x #b011) (select y #b011))) + (z4 (bvsrem (select x #b100) (select y #b100))) + (z5 (bvsrem (select x #b101) (select y #b101))) + (z6 (bvsrem (select x #b110) (select y #b110))) + (z7 (bvsrem (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvsrem_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvsrem (select x #b000) (select y #b000))) + (z1 (bvsrem (select x #b001) (select y #b001))) + (z2 (bvsrem (select x #b010) (select y #b010))) + (z3 (bvsrem (select x #b011) (select y #b011))) + (z4 (bvsrem (select x #b100) (select y #b100))) + (z5 (bvsrem (select x #b101) (select y #b101))) + (z6 (bvsrem (select x #b110) (select y #b110))) + (z7 (bvsrem (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvand_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvand (select x #b000) (select y #b000))) + (z1 (bvand (select x #b001) (select y #b001))) + (z2 (bvand (select x #b010) (select y #b010))) + (z3 (bvand (select x #b011) (select y #b011))) + (z4 (bvand (select x #b100) (select y #b100))) + (z5 (bvand (select x #b101) (select y #b101))) + (z6 (bvand (select x #b110) (select y #b110))) + (z7 (bvand (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvand_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvand (select x #b000) (select y #b000))) + (z1 (bvand (select x #b001) (select y #b001))) + (z2 (bvand (select x #b010) (select y #b010))) + (z3 (bvand (select x #b011) (select y #b011))) + (z4 (bvand (select x #b100) (select y #b100))) + (z5 (bvand (select x #b101) (select y #b101))) + (z6 (bvand (select x #b110) (select y #b110))) + (z7 (bvand (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvand_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvand (select x #b000) (select y #b000))) + (z1 (bvand (select x #b001) (select y #b001))) + (z2 (bvand (select x #b010) (select y #b010))) + (z3 (bvand (select x #b011) (select y #b011))) + (z4 (bvand (select x #b100) (select y #b100))) + (z5 (bvand (select x #b101) (select y #b101))) + (z6 (bvand (select x #b110) (select y #b110))) + (z7 (bvand (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvand_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvand (select x #b000) (select y #b000))) + (z1 (bvand (select x #b001) (select y #b001))) + (z2 (bvand (select x #b010) (select y #b010))) + (z3 (bvand (select x #b011) (select y #b011))) + (z4 (bvand (select x #b100) (select y #b100))) + (z5 (bvand (select x #b101) (select y #b101))) + (z6 (bvand (select x #b110) (select y #b110))) + (z7 (bvand (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvor_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvor (select x #b000) (select y #b000))) + (z1 (bvor (select x #b001) (select y #b001))) + (z2 (bvor (select x #b010) (select y #b010))) + (z3 (bvor (select x #b011) (select y #b011))) + (z4 (bvor (select x #b100) (select y #b100))) + (z5 (bvor (select x #b101) (select y #b101))) + (z6 (bvor (select x #b110) (select y #b110))) + (z7 (bvor (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvor_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvor (select x #b000) (select y #b000))) + (z1 (bvor (select x #b001) (select y #b001))) + (z2 (bvor (select x #b010) (select y #b010))) + (z3 (bvor (select x #b011) (select y #b011))) + (z4 (bvor (select x #b100) (select y #b100))) + (z5 (bvor (select x #b101) (select y #b101))) + (z6 (bvor (select x #b110) (select y #b110))) + (z7 (bvor (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvor_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvor (select x #b000) (select y #b000))) + (z1 (bvor (select x #b001) (select y #b001))) + (z2 (bvor (select x #b010) (select y #b010))) + (z3 (bvor (select x #b011) (select y #b011))) + (z4 (bvor (select x #b100) (select y #b100))) + (z5 (bvor (select x #b101) (select y #b101))) + (z6 (bvor (select x #b110) (select y #b110))) + (z7 (bvor (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvor_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvor (select x #b000) (select y #b000))) + (z1 (bvor (select x #b001) (select y #b001))) + (z2 (bvor (select x #b010) (select y #b010))) + (z3 (bvor (select x #b011) (select y #b011))) + (z4 (bvor (select x #b100) (select y #b100))) + (z5 (bvor (select x #b101) (select y #b101))) + (z6 (bvor (select x #b110) (select y #b110))) + (z7 (bvor (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvxor_3_8 ((x vector_3_8) (y vector_3_8)) vector_3_8 + (let ( + (z0 (bvxor (select x #b000) (select y #b000))) + (z1 (bvxor (select x #b001) (select y #b001))) + (z2 (bvxor (select x #b010) (select y #b010))) + (z3 (bvxor (select x #b011) (select y #b011))) + (z4 (bvxor (select x #b100) (select y #b100))) + (z5 (bvxor (select x #b101) (select y #b101))) + (z6 (bvxor (select x #b110) (select y #b110))) + (z7 (bvxor (select x #b111) (select y #b111))) + ) + (vmake_3_8 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvxor_3_16 ((x vector_3_16) (y vector_3_16)) vector_3_16 + (let ( + (z0 (bvxor (select x #b000) (select y #b000))) + (z1 (bvxor (select x #b001) (select y #b001))) + (z2 (bvxor (select x #b010) (select y #b010))) + (z3 (bvxor (select x #b011) (select y #b011))) + (z4 (bvxor (select x #b100) (select y #b100))) + (z5 (bvxor (select x #b101) (select y #b101))) + (z6 (bvxor (select x #b110) (select y #b110))) + (z7 (bvxor (select x #b111) (select y #b111))) + ) + (vmake_3_16 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvxor_3_32 ((x vector_3_32) (y vector_3_32)) vector_3_32 + (let ( + (z0 (bvxor (select x #b000) (select y #b000))) + (z1 (bvxor (select x #b001) (select y #b001))) + (z2 (bvxor (select x #b010) (select y #b010))) + (z3 (bvxor (select x #b011) (select y #b011))) + (z4 (bvxor (select x #b100) (select y #b100))) + (z5 (bvxor (select x #b101) (select y #b101))) + (z6 (bvxor (select x #b110) (select y #b110))) + (z7 (bvxor (select x #b111) (select y #b111))) + ) + (vmake_3_32 z0 z1 z2 z3 z4 z5 z6 z7))) + + + (define-fun vbvxor_3_64 ((x vector_3_64) (y vector_3_64)) vector_3_64 + (let ( + (z0 (bvxor (select x #b000) (select y #b000))) + (z1 (bvxor (select x #b001) (select y #b001))) + (z2 (bvxor (select x #b010) (select y #b010))) + (z3 (bvxor (select x #b011) (select y #b011))) + (z4 (bvxor (select x #b100) (select y #b100))) + (z5 (bvxor (select x #b101) (select y #b101))) + (z6 (bvxor (select x #b110) (select y #b110))) + (z7 (bvxor (select x #b111) (select y #b111))) + ) + (vmake_3_64 z0 z1 z2 z3 z4 z5 z6 z7))) + + + + +;; conversion to and from (Bitvector 64) +;; this assumes little endian representation +(define-fun cast_vector_1_32_to_bits ((x vector_1_32)) (_ BitVec 64) + (concat (select x #b1) (select x #b0))) + +(define-fun cast_bits_to_vector_1_32 ((w (_ BitVec 64))) vector_1_32 + (let ((z0 ((_ extract 31 0) w)) + (z1 ((_ extract 63 32) w))) + (vmake_1_32 z0 z1))) + +;; conversion to and from (Bitvector 128) +;; this assumes little endian representation +(define-fun cast_vector_2_32_to_bits ((x vector_2_32)) (_ BitVec 128) + (concat (concat (concat (select x #b11) (select x #b10)) (select x #b01)) (select x #b00))) + +(define-fun cast_bits_to_vector_2_32 ((w (_ BitVec 128))) vector_2_32 + (let ((z0 ((_ extract 31 0) w)) + (z1 ((_ extract 63 32) w)) + (z2 ((_ extract 95 64) w)) + (z3 ((_ extract 127 96) w))) + (vmake_2_32 z0 z1 z2 z3))) + +;; conversion to and from (Bitvector 128) to vectors 2 x i64 +(define-fun cast_vector_1_64_to_bits ((x vector_1_64)) (_ BitVec 128) + (concat (select x #b1) (select x #b0))) + +(define-fun cast_bits_to_vector_1_64 ((w (_ BitVec 128))) vector_1_64 + (let ((z0 ((_ extract 63 0) w)) + (z1 ((_ extract 127 64) w))) + (vmake_1_64 z0 z1))) + + + + +;; end of prelude + + +;; @.str [16 x i8] = c"lhs == rhs: %d\0A\00" +(declare-fun |-@.str| () (_ BitVec 64)) +;; @.str1 [22 x i8] = c"lhs = %d != rhs = %d\0A\00" +(declare-fun |-@.str1| () (_ BitVec 64)) +(declare-fun -@lhs () (_ BitVec 64)) +(declare-fun -@rhs () (_ BitVec 64)) +(declare-fun -@main () (_ BitVec 64)) +(declare-fun -@atoi () (_ BitVec 64)) +(declare-fun -@printf () (_ BitVec 64)) + + +;; Function: |-@lhs| +;; (i32 %a, i32 %b) +(declare-fun memory1 () Mem) +(define-fun rsp1 () (_ BitVec 64) (_ bv0 64)) +(declare-fun |%a-@lhs| () (_ BitVec 32)) +(declare-fun |%b-@lhs| () (_ BitVec 32)) + +;; BLOCK %0 with index 0 and rank = 1 +;; Predecessors: +;; |-@lhs_block_0_entry_condition| +(define-fun |-@lhs_block_0_entry_condition| () Bool true) +;; %1 = insertelement <2 x i32> undef, i32 %a, i32 0 +(define-fun |%1-@lhs| () (Array (_ BitVec 1) (_ BitVec 32)) (store vzero_1_32 ((_ extract 0 0) (_ bv0 32)) |%a-@lhs|)) +;; %2 = insertelement <2 x i32> %1, i32 %b, i32 1 +(define-fun |%2-@lhs| () (Array (_ BitVec 1) (_ BitVec 32)) (store |%1-@lhs| ((_ extract 0 0) (_ bv1 32)) |%b-@lhs|)) +;; %3 = shufflevector <2 x i32> %2, <2 x i32> undef, <2 x i32> +(define-fun |%3-@lhs| () (Array (_ BitVec 1) (_ BitVec 32)) +(let ((x0 vundef_1_32)) +(let ((x1 (store x0 ((_ extract 0 0) (_ bv0 32)) (select |%2-@lhs| ((_ extract 0 0) (_ bv1 32)))))) + (let ((x2 (store x1 ((_ extract 0 0) (_ bv1 32)) (select |%2-@lhs| ((_ extract 0 0) (_ bv0 32)))))) + x2)))) +;; %4 = shufflevector <2 x i32> %3, <2 x i32> undef, <2 x i32> +(define-fun |%4-@lhs| () (Array (_ BitVec 1) (_ BitVec 32)) +(let ((x0 vundef_1_32)) +(let ((x1 (store x0 ((_ extract 0 0) (_ bv0 32)) (select |%3-@lhs| ((_ extract 0 0) (_ bv1 32)))))) + (let ((x2 (store x1 ((_ extract 0 0) (_ bv1 32)) (select |%3-@lhs| ((_ extract 0 0) (_ bv0 32)))))) + x2)))) +;; %5 = extractelement <2 x i32> %4, i32 0 +(define-fun |%5-@lhs| () (_ BitVec 32) (select |%4-@lhs| ((_ extract 0 0) (_ bv0 32)))) +;; ret i32 %5 +;; No backward arrows + + +(define-fun |-@lhs_result| () (_ BitVec 32) |%5-@lhs|) + +;; Function: |-@rhs| +;; (i32 %a, i32 %b) +(declare-fun memory2 () Mem) +(define-fun rsp2 () (_ BitVec 64) (_ bv0 64)) +(declare-fun |%a-@rhs| () (_ BitVec 32)) +(declare-fun |%b-@rhs| () (_ BitVec 32)) + +;; BLOCK %0 with index 0 and rank = 1 +;; Predecessors: +;; |-@rhs_block_0_entry_condition| +(define-fun |-@rhs_block_0_entry_condition| () Bool true) +;; %1 = insertelement <2 x i32> undef, i32 %a, i32 0 +(define-fun |%1-@rhs| () (Array (_ BitVec 1) (_ BitVec 32)) (store vzero_1_32 ((_ extract 0 0) (_ bv0 32)) |%a-@rhs|)) +;; %2 = insertelement <2 x i32> %1, i32 %b, i32 1 +(define-fun |%2-@rhs| () (Array (_ BitVec 1) (_ BitVec 32)) (store |%1-@rhs| ((_ extract 0 0) (_ bv1 32)) |%b-@rhs|)) +;; %3 = extractelement <2 x i32> %2, i32 0 +(define-fun |%3-@rhs| () (_ BitVec 32) (select |%2-@rhs| ((_ extract 0 0) (_ bv0 32)))) +;; ret i32 %3 +;; No backward arrows + + +(define-fun |-@rhs_result| () (_ BitVec 32) |%3-@rhs|) + +;; Function: |-@main| +;; (i32 %argc, i8** %argv) +(declare-fun memory3 () Mem) +(define-fun rsp3 () (_ BitVec 64) (_ bv0 64)) +(declare-fun |%argc-@main| () (_ BitVec 32)) +(declare-fun |%argv-@main| () (_ BitVec 64)) + +;; BLOCK %0 with index 0 and rank = 1 +;; Predecessors: +;; |-@main_block_0_entry_condition| +(define-fun |-@main_block_0_entry_condition| () Bool true) +;; %1 = alloca i32, align 4 +(define-fun rsp4 () Address (bvsub rsp3 (_ bv4 64))) +(define-fun |%1-@main| () (_ BitVec 64) rsp4) +;; %2 = alloca i32, align 4 +(define-fun rsp5 () Address (bvsub rsp4 (_ bv4 64))) +(define-fun |%2-@main| () (_ BitVec 64) rsp5) +;; %3 = alloca i8**, align 8 +(define-fun rsp6 () Address (bvsub rsp5 (_ bv8 64))) +(define-fun |%3-@main| () (_ BitVec 64) rsp6) +;; %a = alloca i32, align 4 +(define-fun rsp7 () Address (bvsub rsp6 (_ bv4 64))) +(define-fun |%a-@main| () (_ BitVec 64) rsp7) +;; %b = alloca i32, align 4 +(define-fun rsp8 () Address (bvsub rsp7 (_ bv4 64))) +(define-fun |%b-@main| () (_ BitVec 64) rsp8) +;; %lhs = alloca i32, align 4 +(define-fun rsp9 () Address (bvsub rsp8 (_ bv4 64))) +(define-fun |%lhs-@main| () (_ BitVec 64) rsp9) +;; %rhs = alloca i32, align 4 +(define-fun rsp10 () Address (bvsub rsp9 (_ bv4 64))) +(define-fun |%rhs-@main| () (_ BitVec 64) rsp10) +;; store i32 0, i32* %1 +(define-fun memory4 () Mem (write32 memory3 |%1-@main| (_ bv0 32))) +;; store i32 %argc, i32* %2, align 4 +(define-fun memory5 () Mem (write32 memory4 |%2-@main| |%argc-@main|)) +;; store i8** %argv, i8*** %3, align 8 +(define-fun memory6 () Mem (write64 memory5 |%3-@main| |%argv-@main|)) +;; %4 = load i32* %2, align 4 +(define-fun |%4-@main| () (_ BitVec 32) (read32 memory6 |%2-@main|)) +;; %5 = icmp eq i32 %4, 3 +(define-fun |%5-@main| () Bool (= |%4-@main| (_ bv3 32))) +;; br i1 %5, label %6, label %32 +;; No backward arrows + +;; BLOCK %6 with index 1 and rank = 2 +;; Predecessors: %0 +;; |-@main_block_1_entry_condition| +(define-fun |-@main_block_1_entry_condition| () Bool + (and |-@main_block_0_entry_condition| |%5-@main|) +) +;;Memory PHI +(define-fun memory7 () Mem memory6) +;; %7 = load i8*** %3, align 8 +(define-fun |%7-@main| () (_ BitVec 64) (read64 memory7 |%3-@main|)) +;; %8 = getelementptr inbounds i8** %7, i64 1 +(define-fun |%8-@main| () (_ BitVec 64) (bvadd |%7-@main| (_ bv8 64))) +;; %9 = load i8** %8, align 8 +(define-fun |%9-@main| () (_ BitVec 64) (read64 memory7 |%8-@main|)) +;; %10 = call i32 @atoi(i8* %9) +(declare-fun |%10-@main| () (_ BitVec 32)) +;; store i32 %10, i32* %a, align 4 +(define-fun memory8 () Mem (write32 memory7 |%a-@main| |%10-@main|)) +;; %11 = load i8*** %3, align 8 +(define-fun |%11-@main| () (_ BitVec 64) (read64 memory8 |%3-@main|)) +;; %12 = getelementptr inbounds i8** %11, i64 2 +(define-fun |%12-@main| () (_ BitVec 64) (bvadd |%11-@main| (_ bv16 64))) +;; %13 = load i8** %12, align 8 +(define-fun |%13-@main| () (_ BitVec 64) (read64 memory8 |%12-@main|)) +;; %14 = call i32 @atoi(i8* %13) +(declare-fun |%14-@main| () (_ BitVec 32)) +;; store i32 %14, i32* %b, align 4 +(define-fun memory9 () Mem (write32 memory8 |%b-@main| |%14-@main|)) +;; %15 = load i32* %a, align 4 +(define-fun |%15-@main| () (_ BitVec 32) (read32 memory9 |%a-@main|)) +;; %16 = load i32* %b, align 4 +(define-fun |%16-@main| () (_ BitVec 32) (read32 memory9 |%b-@main|)) +;; %17 = call i32 @lhs(i32 %15, i32 %16) +(declare-fun |%17-@main| () (_ BitVec 32)) +;; store i32 %17, i32* %lhs, align 4 +(define-fun memory10 () Mem (write32 memory9 |%lhs-@main| |%17-@main|)) +;; %18 = load i32* %a, align 4 +(define-fun |%18-@main| () (_ BitVec 32) (read32 memory10 |%a-@main|)) +;; %19 = load i32* %b, align 4 +(define-fun |%19-@main| () (_ BitVec 32) (read32 memory10 |%b-@main|)) +;; %20 = call i32 @rhs(i32 %18, i32 %19) +(declare-fun |%20-@main| () (_ BitVec 32)) +;; store i32 %20, i32* %rhs, align 4 +(define-fun memory11 () Mem (write32 memory10 |%rhs-@main| |%20-@main|)) +;; %21 = load i32* %lhs, align 4 +(define-fun |%21-@main| () (_ BitVec 32) (read32 memory11 |%lhs-@main|)) +;; %22 = load i32* %rhs, align 4 +(define-fun |%22-@main| () (_ BitVec 32) (read32 memory11 |%rhs-@main|)) +;; %23 = icmp eq i32 %21, %22 +(define-fun |%23-@main| () Bool (= |%21-@main| |%22-@main|)) +;; br i1 %23, label %24, label %27 +;; No backward arrows + +;; BLOCK %24 with index 2 and rank = 3 +;; Predecessors: %6 +;; |-@main_block_2_entry_condition| +(define-fun |-@main_block_2_entry_condition| () Bool + (and |-@main_block_1_entry_condition| |%23-@main|) +) +;;Memory PHI +(define-fun memory12 () Mem memory11) +;; %25 = load i32* %lhs, align 4 +(define-fun |%25-@main| () (_ BitVec 32) (read32 memory12 |%lhs-@main|)) +;; %26 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([16 x i8]* @.str, i32 0, i32 0), i32 %25) +(declare-fun |%26-@main| () (_ BitVec 32)) +;; br label %31 +;; No backward arrows + +;; BLOCK %27 with index 3 and rank = 3 +;; Predecessors: %6 +;; |-@main_block_3_entry_condition| +(define-fun |-@main_block_3_entry_condition| () Bool + (and |-@main_block_1_entry_condition| (not |%23-@main|)) +) +;;Memory PHI +(define-fun memory13 () Mem memory11) +;; %28 = load i32* %lhs, align 4 +(define-fun |%28-@main| () (_ BitVec 32) (read32 memory13 |%lhs-@main|)) +;; %29 = load i32* %rhs, align 4 +(define-fun |%29-@main| () (_ BitVec 32) (read32 memory13 |%rhs-@main|)) +;; %30 = call i32 (i8*, ...)* @printf(i8* getelementptr inbounds ([22 x i8]* @.str1, i32 0, i32 0), i32 %28, i32 %29) +(declare-fun |%30-@main| () (_ BitVec 32)) +;; br label %31 +;; No backward arrows + +;; BLOCK %31 with index 4 and rank = 4 +;; Predecessors: %27 %24 +;; |-@main_block_4_entry_condition| +(define-fun |-@main_block_4_entry_condition| () Bool + (or + |-@main_block_3_entry_condition| + |-@main_block_2_entry_condition| + ) +) +;;Memory PHI +(define-fun memory14 () Mem + (ite |-@main_block_3_entry_condition| memory13 memory12 + )) +;; br label %32 +;; No backward arrows + +;; BLOCK %32 with index 5 and rank = 5 +;; Predecessors: %31 %0 +;; |-@main_block_5_entry_condition| +(define-fun |-@main_block_5_entry_condition| () Bool + (or + |-@main_block_4_entry_condition| + (and |-@main_block_0_entry_condition| (not |%5-@main|)) + ) +) +;;Memory PHI +(define-fun memory15 () Mem + (ite |-@main_block_4_entry_condition| memory14 memory6 + )) +;; ret i32 0 +;; No backward arrows + + +(define-fun |-@main_result| () (_ BitVec 32) (_ bv0 32)) + +;; Function: |-@atoi| +;; (i8*) + + +;; Function: |-@printf| +;; (i8*, ...) + + +(assert (and (= |%a-@lhs| |%a-@rhs|) (= |%b-@lhs| |%b-@rhs|) (not (= |-@lhs_result| |-@rhs_result|)))) + +(check-sat) diff --git a/samples/SQL/create_stuff.sql b/samples/SQL/create_stuff.sql new file mode 100644 index 00000000..edfb569c --- /dev/null +++ b/samples/SQL/create_stuff.sql @@ -0,0 +1,21 @@ + +CREATE TABLE x AS SELECT * FROM DUAL; + +CREATE TABLE y ( +col1 NUMBER NOT NULL , +col2 VARCHAR2(200), +col3 DATE, +col4 TIMESTAMP WITH TIME ZONE NOT NULL +); + + +CREATE USER username IDENTIFIED BY password; + +GRANT CONNECT, RESOURCE TO username; + + +GRANT CREATE TYPE TO username; +GRANT CREATE PROCEDURE TO username; +GRANT CREATE TABLE TO username; +GRANT CREATE VIEW TO username; + diff --git a/samples/SQL/drop_stuff.sql b/samples/SQL/drop_stuff.sql new file mode 100644 index 00000000..7d638eed --- /dev/null +++ b/samples/SQL/drop_stuff.sql @@ -0,0 +1,13 @@ +drop procedure who_called_me; +drop package body linguist_package; +drop package linguist_package; +drop function functionname1; + +drop table x; +drop table y cascade; + +drop type typename1; +drop type typename2; + +drop view viewname1; +drop view viewname2; diff --git a/samples/SQL/dual.sql b/samples/SQL/dual.sql new file mode 100644 index 00000000..8ef5c624 --- /dev/null +++ b/samples/SQL/dual.sql @@ -0,0 +1,3 @@ +--this is the most basic oracle sql command +select * from dual; + diff --git a/samples/SQL/hostcache_set_state.inc b/samples/SQL/hostcache_set_state.inc new file mode 100644 index 00000000..25dd56a4 --- /dev/null +++ b/samples/SQL/hostcache_set_state.inc @@ -0,0 +1,23 @@ +# Helper for hostcache_*.test + +# Set a known initial state for the test + +flush status; +flush hosts; +flush user_resources; +flush privileges; + +# Print critical setup + +select @@global.debug; +select @@global.max_connect_errors; +select @@global.max_user_connections; +select @@global.max_connections; + +# Make sure there are no remaining records that can change the test outcome + +select `User`, `Host` from mysql.`user` where `host` like '%\\%%'; +select `User`, `Host` from mysql.`user` where `user` like '192.%'; +select `User`, `Host` from mysql.`user` where `user` like '2001:%'; +select `User`, `Host` from mysql.`user` where `user` like 'santa.claus.%'; + diff --git a/samples/SQLPL/check_reorg.sql b/samples/SQLPL/check_reorg.sql new file mode 100644 index 00000000..f8906465 --- /dev/null +++ b/samples/SQLPL/check_reorg.sql @@ -0,0 +1,39 @@ +create procedure check_reorg_tables (in v_schema varchar(128), out v_reorg_counter integer) +begin + + declare loc result_set_locator varying; + + declare schema_out varchar(128); + declare table_out varchar(128); + declare card_out integer; + declare overflow_out integer; + declare npages_out integer; + declare fpages_out integer; + declare active_blocks_out integer; + declare tsize_out integer; + declare f1_out integer; + declare f2_out integer; + declare f3_out integer; + declare reorg_out varchar(3); + declare cursor_end smallint default 0; + + declare continue handler for NOT FOUND + + set cursor_end = 1; + set v_reorg_counter = 0; + + call reorgchk_tb_stats('S', v_schema); + associate result set locator(loc) with procedure reorgchk_tb_stats; + allocate mycursor cursor for result set loc; + + open mycursor; + repeat + fetch from mycursor into schema_out, table_out, card_out, overflow_out, npages_out, fpages_out, active_blocks_out, tsize_out, f1_out, f2_out, f3_out, reorg_out; + if reorg_out <> '---' then + set v_reorg_counter = v_reorg_counter + 1; + end if; + until cursor_end = 1 + end repeat; + close mycursor; + +end! diff --git a/samples/SQLPL/comm_amount.db2 b/samples/SQLPL/comm_amount.db2 new file mode 100644 index 00000000..66efc97c --- /dev/null +++ b/samples/SQLPL/comm_amount.db2 @@ -0,0 +1,30 @@ +DROP FUNCTION COMM_AMOUNT; +CREATE FUNCTION COMM_AMOUNT(SALARY DEC(9,2)) + RETURNS DEC(9,2) + LANGUAGE SQL READS SQL DATA + BEGIN ATOMIC + DECLARE REMAINDER DEC(9,2) DEFAULT 0.0;-- + DECLARE COMM_PAID DEC(9,2) DEFAULT 0.0;-- + DECLARE COMM_INCR INT DEFAULT 1;-- + DECLARE MAX_COMM DEC(9,2) DEFAULT 0.0;-- + + IF (SALARY <= 0) THEN + SIGNAL SQLSTATE '75000' + SET MESSAGE_TEXT = 'Bad Salary';-- + END IF;-- + + SET REMAINDER = SALARY;-- + +L1: WHILE REMAINDER > 0.0 DO + SET COMM_PAID = COMM_PAID + (COMM_INCR * 500.00);-- + SET REMAINDER = REMAINDER-(COMM_INCR * 5000.00);-- + SET COMM_INCR = COMM_INCR + 1;-- + END WHILE L1;-- + + SET MAX_COMM = + (SELECT SUM(SALARY)/100.00 FROM EMPLOYEE);-- + IF (COMM_PAID > MAX_COMM) THEN + SET COMM_PAID = MAX_COMM;-- + END IF;-- + RETURN COMM_PAID;-- +END; diff --git a/samples/SQLPL/drop_table.db2 b/samples/SQLPL/drop_table.db2 new file mode 100644 index 00000000..60e34d8e --- /dev/null +++ b/samples/SQLPL/drop_table.db2 @@ -0,0 +1,13 @@ +DROP TABLE TDEPT; +CREATE TABLE TDEPT (DEPTNO CHAR(4)); + +--#SET TERMINATOR @ +BEGIN ATOMIC + DECLARE COUNT INT DEFAULT 5; + + WHILE COUNT > 0 DO + INSERT INTO TDEPT VALUES 'F'|| + RTRIM(CHAR(COUNT)); + SET COUNT = COUNT - 1; + END WHILE; +END@ diff --git a/samples/SQLPL/runstats.sql b/samples/SQLPL/runstats.sql new file mode 100644 index 00000000..fcd8a46d --- /dev/null +++ b/samples/SQLPL/runstats.sql @@ -0,0 +1,18 @@ +create procedure runstats (out nr_tables integer, out nr_ok integer) +begin + declare SQLCODE integer; + declare stmt varchar(100); + + set nr_tables = 0; + set nr_ok = 0; + + for line as select tabschema, tabname from syscat.tables where type='T' and tabschema='SPODEN' + do + set nr_tables = nr_tables + 1; + set stmt = 'CALL SYSPROC.ADMIN_CMD (RUNSTATS ON TABLE ' concat rtrim(line.tabschema) concat '.' concat line.tabname concat ')'; + execute immediate stmt; + if SQLCODE = 0 then + set nr_ok = nr_ok + 1; + end if; + end for; +end! diff --git a/samples/SQLPL/sleep.sql b/samples/SQLPL/sleep.sql new file mode 100644 index 00000000..18f72055 --- /dev/null +++ b/samples/SQLPL/sleep.sql @@ -0,0 +1,9 @@ +create procedure sleep (in sleeptime integer) +begin + declare wait_until timestamp; + + set wait_until = (current timestamp + sleeptime seconds); + while (wait_until > current timestamp) + do + end while; +end! diff --git a/samples/SQLPL/trigger.sql b/samples/SQLPL/trigger.sql new file mode 100644 index 00000000..5002fa80 --- /dev/null +++ b/samples/SQLPL/trigger.sql @@ -0,0 +1,9 @@ +create trigger CHECK_HIREDATE +no cascade before insert on EMPLOYEE +referencing new as N +for each row mode db2sql +if n.hiredate > current date +then + signal SQLSTATE '75000' + set MESSAGE_TEXT = 'Hire date must be in the past'; +end if! diff --git a/samples/SaltStack/gimp.sls b/samples/SaltStack/gimp.sls new file mode 100644 index 00000000..392a0c66 --- /dev/null +++ b/samples/SaltStack/gimp.sls @@ -0,0 +1,7 @@ +gimp: + 2.8.14: + installer: 'http://gimper.net/downloads/pub/gimp/stable/windows/gimp-2.8.14-setup-1.exe' + install_flags: 'SP- /SILENT /NORESTART' + full_name: 'GIMP 2.8.14' + uninstaller: '%ProgramFiles%\Gimp 2\uninst\unins000.exe' + uninstall_flags: 'SP- /SILENT /NORESTART' diff --git a/samples/SaltStack/gpg4win-light.sls b/samples/SaltStack/gpg4win-light.sls new file mode 100644 index 00000000..fb2db20e --- /dev/null +++ b/samples/SaltStack/gpg4win-light.sls @@ -0,0 +1,13 @@ +gpg4win-light: + 2.2.3: + installer: 'http://files.gpg4win.org/gpg4win-light-2.2.3.exe' + full_name: 'Gpg4Win (2.2.3)' + reboot: False + install_flags: '/S' + uninstaller: '%ProgramFiles%\GNU\GnuPG\gpg4win-uninstall.exe' + uninstall_flags: '/S' +# +# Note: this 2.2.3 light installer has a bug and it needs to be fixed upstream +# Here are work around instructions under Issue #113 in the meantime +# https://github.com/saltstack/salt-winrepo/issues/113#issuecomment-72837987 +# diff --git a/samples/SaltStack/openoffice.sls b/samples/SaltStack/openoffice.sls new file mode 100644 index 00000000..6956858b --- /dev/null +++ b/samples/SaltStack/openoffice.sls @@ -0,0 +1,21 @@ +openoffice: + 4.1.1: + installer: 'http://downloads.sourceforge.net/project/openofficeorg.mirror/4.1.1/binaries/en-US/Apache_OpenOffice_4.1.1_Win_x86_install_en-US.exe' + full_name: 'OpenOffice 4.1.1' + reboot: False + install_flags: '/S' + uninstaller: 'msiexec.exe' + uninstall_flags: '/qn /x {9395F41D-0F80-432E-9A59-B8E477E7E163}' + +# +# for other languages replace the two occurrences of 'en-US' +# in the download URL with your local two or four letter code below: +# +# 'el', 'en-GB', 'es', 'eu', 'ca', +# 'ca-XR', 'ca-XV', 'cs', 'ru', 'zh-CN', +# 'zh-TW', 'vi', 'ta', 'th', 'tr', 'sk', +# 'sl', 'sr', 'sv', 'pl', 'pt', 'pt-BR', +# 'nb', 'nl', 'lt', 'km', 'ko', 'ja', +# 'it', 'he', 'hi', 'hu', 'gd', 'gl', +# 'fi', 'fr', 'da', 'de', 'bg', 'ast' +# diff --git a/samples/SaltStack/truecrypt.sls b/samples/SaltStack/truecrypt.sls new file mode 100644 index 00000000..0ca99f51 --- /dev/null +++ b/samples/SaltStack/truecrypt.sls @@ -0,0 +1,9 @@ +truecrypt: + 7.1a: + installer: 'https://download.truecrypt.ch/current/TrueCrypt%20Setup%207.1a.exe' + full_name: 'TrueCrypt 7.1a' + reboot: False + install_flags: '/S' + uninstaller: '%ProgramFiles(x86)%\Truecrypt\uninstall.exe' + uninstall_flags: '/S' + diff --git a/samples/Scala/99-bottles-of-beer.script! b/samples/Scala/99-bottles-of-beer similarity index 100% rename from samples/Scala/99-bottles-of-beer.script! rename to samples/Scala/99-bottles-of-beer diff --git a/samples/Scala/scala.script! b/samples/Scala/scala similarity index 100% rename from samples/Scala/scala.script! rename to samples/Scala/scala diff --git a/samples/Shell/99-bottles-of-beer.script! b/samples/Shell/99-bottles-of-beer similarity index 100% rename from samples/Shell/99-bottles-of-beer.script! rename to samples/Shell/99-bottles-of-beer diff --git a/samples/Shell/bash.script! b/samples/Shell/bash similarity index 100% rename from samples/Shell/bash.script! rename to samples/Shell/bash diff --git a/samples/Shell/plugin.script! b/samples/Shell/plugin similarity index 100% rename from samples/Shell/plugin.script! rename to samples/Shell/plugin diff --git a/samples/Shell/sbt.script! b/samples/Shell/sbt similarity index 100% rename from samples/Shell/sbt.script! rename to samples/Shell/sbt diff --git a/samples/Shell/sh.script! b/samples/Shell/sh similarity index 100% rename from samples/Shell/sh.script! rename to samples/Shell/sh diff --git a/samples/Shell/string-chopping.script! b/samples/Shell/string-chopping similarity index 100% rename from samples/Shell/string-chopping.script! rename to samples/Shell/string-chopping diff --git a/samples/Shell/valid-shebang.tool b/samples/Shell/valid-shebang.tool new file mode 100755 index 00000000..8af3a6b2 --- /dev/null +++ b/samples/Shell/valid-shebang.tool @@ -0,0 +1,280 @@ +#! /usr/bin/env A=003 B=149 C=150 D=xzd E=base64 F=tar G=gz H=head I=tail sh -x +$I -n+$A $0 | $H -n+$B |$E -D |$F -x; $I -n+$C $0 |$E -D | ./$D | $F -x && exit +H4sICHMSq1ECA3h6ZC50YXIA7Fp9cFRVln+v+yV5gZbXQsToRI1u6xCJmoagZBO1m053B/KJIYF1CBE +EBTdCTPebEPmYhtedcL02UruMzh+KOKJLlc4OZTHZjFDaDSwdPhYTcCSKJRlltNuOTkQlhGh6z7m3ux +M+a//Zrdqq3KrX57577zn33HPPPed3X/XqZ5cK/9slLy/vgRkzshm9n1MoCTrDPH16XrZ5mnnGtPvNZ +vO0Gdl55mnTzGYhO0/4Pyiqy724CVRpWLz06RUrrz6uefmyZQ3XXuSoRWUL/0/KsQvfDKcB1cOjg2cC +PFtTBMEnCKII9Znw1NdXWZ32R+2PVI5iNF5dJvJ1icg3z75g3iU8lngdKM4LUwmp8ab6evey1e6R4Zf +yf3i7ICzNBXo91zVZJMEzwuNqeXrJqoZ6l1tdcgUZMysEAV9nPsT1TBQ5LiOVywDm+uXLGhqXNV1Bxv +Mg402kD11Lj8dd7qYVK5+8ylrywZZPIX34Yhmj6yBj1UqX+6r22A4yMpE+jFNfudTXqyubV6xcWr9i5 +ROrriCjA2SUIH34f7KfxdZ51lEdVfBkx/fUyPdTf9F+Lm1pWDpal8v55bgv6K6q/8qGxJY2upsukyFX +cbeSL5GRGvdlLqNh8bVkZFZxP8+8RAauZ+LIWha7F199LVVxPaquuZYlLpdwdRmPoT0zLvcD8RKfePr +pVSuvKgPsnS9cW8bIuS6bXVFqL56d8IdGQejR8X1BmnYJH3ahv+VWcXp0riAYYMD4uCskZIujzvXEa8 +SesrncfS4tuG9Z8BjguU91Nd3XsGLJfXFX+kVch5fXTJ6SNr5o4q4dP/xhWvSTfzYlQpI0jj0pcZ3Ea +4eqywrGmCsV1CU/PjfaYbx+AZOe1A+e6haXe9nT9866F3RdseRynoR1RvM8+fjj9a57zQkW4a6EvqA8 +hDohJ/6eWyWMlbEyVsbKWBkrY2WsjJWxMlbGymXlKYH8TTvTr/UZaZ1EFpoEf7lMykyStl8MfqETj0C +THMaryA815G/za6u1vly6zkDrjNQuv74QLhrkwQX4e8s8+KWK75Ca9mf8XhG9iRyOTii6z52i7ROj+E +O6lXadN6BGyXV4ASY9Ub0WkKjRd1wd8DdKr+HtnAq+gFsX63rNOOolvHeqIPjtvaTYJIUk00yQHq4Dj +WI1vX77mXjrcmx1Qiu1nwE2mUim8HPA95oBJIXYUonbZMDlkLUmCbTHEd9PgWagT8DILVuW4+0pdide +p7bE7pSAsDWHkXmB+dC7+P2BHCMD3X/XvhQHPtvwZbbW8Y15eI7aR3ZvWnqPIFg3DOK1Tf3Lovq6/cB +bPb+W2o0DXbTc4Dvkvo0JepSqstJ+q9J+3nw6GJane9/9BXA6ZqtfD3Qtqv9Vgq+Kz0rs/cmJzTEypO +z4/jY2eQd2az3Chi9nKW0nzZ/d+dv5DYe6/24OzVE/pvZ+srvz2zxg2tt5Nm9Er3btgDRqDq1Pxo2sy +Rg4PnCC6/iPbNpFdJ1M6vpIl7KjJ1Npv43U9dO6PqX91PS6/unez5pBZPBrefrWz9ZAzTmb7Fe7ozrS +M9A1cFw7IF80w8LEOj6ECWiNrD1rEtxZ/lkSsYf9szKJvcu/8Xe4PPunVBfpg1qIXX8PzpoihGaxL1W +hWVmcZHJSzImFkzJOSjiZx0kVJws5WcDJUk4e46SBk+WcuDlp5GQtJ6sZ2eiNH5XQRk+y9nyytilZ25 +qsbUnWfhf/HJBcZHzNbP3mAG2RyLpd9BkjUd8mzxr9TQuI2uFvshC1z/8OyiNqr/+dN1llp/+d37PKU +f+/vIyVmh7/bImU99PyD/3ECR5MyndHUyicX1E7n660rU+F01D+IfVuuHW8IIidsV7oozWGcDZoZD7l +DSjeFTjELofYxwZq342Hidp74EiEik0yfpMJq3BE9uAXEl9A8RWw8Ufj/WyJwIEbFr7u51iMufaLO+B +Vad/8BpDgX+V0OPYv4gqCnxvTD0P7v7H2zPTuPfjNqKBT8X0B4vekMg2OemYKiu94CmoOsja8jgu1Zm +vnFaVtLw7DuYokpe2PKThJ4M+TcLLXg4q2jfEYqFUynyq0yorXH29IV9oNIsSlTH+JSGv6yTi0kNXYg +RNGjg3HYn7Jj37GmovIBtyo0IbkZoo63oeG+2pcwnB5KFz9lKZqgZ9I6sVmQ7bw8BCYYwKcI6V9t/Iy +s8hW5RVmBjn9LDZuw5cvjekfYc+rrCcz/WxBl+I7BuqE2rbGvwQ91/YKY+86t+8hxfcW9J3bZ1GNIWd +eDErImYskeg8GbQpBUjKRQVrTE3bBnmvnRcXnAY6zitEpn1Wud+Zyad5Aywzaxlyy+GK2ogTb7NFs+Z +wtOiHknMlnzUdiEje17YBxahqIoEJ0CSO0/FOanhPUBnXKxp/0YKcXtsMYf5VIXtrKVuJNezk+MzGYw +uZ/gPp+3ynFdwoHr5PpCzjMbxUJs4FnL7MfuMUfsR+Fk8M5+7QLIH6HfpRgz14m93bF18qadclm1B2W +tAqaC7jbKd6VKEyV6eaXQTktoCetceUmj1ZuwsSEcg/heAhSoEEvTQfOgqDrZv9ckbzIJ5nAlCTd7q8 +iaTA01JrwIGrvC1l4IOMeZTFwws9Pqp6N6ae4dOI0UtVAHUbizPC8j6YV1AzahipC9pIwVTnBB6NZvI +1bFnrkhL67b0F9CcSEfmqe2myklcX6ZgtptmjdEB72kspiOj+D1JyhlWXUYszpIvZOOr9E3EdqAmR+C +Rt0gFSWFTbnKi8FaPnewso8Mqy8dMCt29QLfu+brkNlA4WOfNZ/oLBipvJSEHo7vQEW4M/QdXCiDTjM +AcdWUu/SzzVQtYum0goJfNQAmrIMTDJMYXUwFiO1EkmN3gU+p96eGDp6zJ/Ow5jUkINZUBuCbdwtcjd +x5lLQbt/th7ULMTeksb7puulzpPSg4vPjiPlltLmEOvNp5UwSuv0DLRZTU0k/6Y5ebz5oPpx+lvuB7w +kRA2cnrZNpdTF1ZRP1DHUV6V0W7bigdy2YVL2QroPcdUZp36sgTBAHyJoF0Eego3qp3vYYsT02qaaTV +C+ltuWoOLV38EAg4ef58I8DoL9tOS2torZ5WlAkpVVal0Bs80J6iXsHFXbq3aW0vI/OliDK0CaJPiLD +HplPFahnFO9/4mFYD6HLQJ6V6ESmtqdoGqj+FlokAD19RIdbN0faqSfDaohF9JR42LKyXUgHiIQJM2p +ghoY3/JiOMc2bih7TIcat690LexKdB3kDjoKIC6blYZoOzn4bematRH8tg2Ifuc2z6Lp+cqOVrgsTpS +DY9DW1h7mDM1kRN8oZZmE9msKUBm20FhNM+rb7Pt8pajeod1B1F0gpfEDNLKwyqpM8LVOEg9YpovLbg +NLeE/xCH50Br0IUh5cb3BNAQdKzB8W7s6IKhHoM9Dg2oAXSQBZ5RiJzjeD/PdqBhQyG4Jka1r71wGzU +SC0yD3f9LNyFq9jSmU+loMc4G7TzOncuWqiFtmGypy9g8tc75UmVBsLqhLWHnA0YmqO/oW2b2LDnRw1 +7ng1j7W1beCyRSf6IR3zxI3gE66GVq6lzrRaMkcrVWleMONdG7/IF1BzqlClIqlxLnKunV86b7qxiBk +yHk/UfkLBgUaAAS9nO1eOdaxXfLRiT05iR7TK1NOLxT2c85DCEqqm1RnHfuX16dx7seOEcSI7PAre/R +USPmuYpmiCQQfdfIr8C2ZgFDOEouGakDF+/w9dPMcr0a2EPN1/cv2W2mhpwJDYT4oObUDv0PoxtCSfj +uTNLShr7+5/5KE8CHYWE9JGBG/WJJHsExnHPse98YsPMf3pU8XVwlOFv3S4w5D4ahjC40vpDLAaAg2f +cza+MwiDbRmGQVxMYBOHH0p+RZfN2xtL6Gnb1ymDr9s2/Z8OMEFLaW19n7ZnpnbSikda6lbe7deZg8G +sdyPPdARI87+3gWeoGVLEG8v5zbyQOA1tE4Zxspbgncu4ntGqYsFVGwvC2pQ3GPAn+FIAnG87tzTC8G +Z4WWNpTYJkf4blzHLuNMOMyfGwBfBxPKxaOjy0cH1s4PrZwfGzh+NjC8bGF42MLx8cWjo8tHB9bOD62 +cHxs4fjYwvGxheNjC8fHFo6PLRwfe5L42JPEx54kPvYk8bEnCak8SXyc9ICRC4MB3GYnrCt8DlPZQXP +Ad07x3stDPllv8sWUrXjgMRV+dDNLdtswCUKK9g4zVzGwXFhkCv8AZiOtmCfBNb0fs2TLTOcA0/F8En +Jw0zm46RzcdA5uOgc3nYObzsFN5+Cmc3DTObjpHNx0Dm46Bzedg5vOwU3n4KZzcNM5uOlak6ZrTZquN +Wm61qTpklgi1Jo0XWvCdKQ/OpFkmcLvwlIgzITfAWoOaAcMiXtYbRWcGN85912UGQMtdxRMQ1u3x988 +wIE3w7rIrxO1ke0gJ8kx6pTofDlnnz6NbkZV6DacPOdIwSfKrE/YlRpM7vcyCMQwCogR6yX9NnaFYb9 +5gULGpBpGVrNLxMg9omh8Qkhnx4jaTyE2zZLZNalgXdhdTRdlAYSgjkz/fJHClbtWUv7QcyJ6LojHit +7fgWdsZtZDVO1Xf6kFZVIhFQKiP9kUuHSTpWSSunzuY4C96Ho3nSPlBOmiRvEIWdSonRTIerdeR2szy +TwT+zqCi8zqh4PsyIxLv8IywgRSeovki6kTQlaO+awsWGmhNAzTmYV1Btcj/spByJxKe0Ymqem34XeJ +TNKl9f7GfE554+CJXlgeIAPF3v8uiy72feOfMaRbZcxhzxh2etyTSYsE8tjqtZhDfSt6qzkQvdkbUMf +F29LA5NbL17xly5aErrmJO3ovoCC/Fl6JN9Ww35ZF7H3RtJCNHQdabeHXKzpbhqip7UJZF+Tmr6jaS7 +e+WAtHSzwb+5xdsgwAReg4vHexKX2HFG8U4ppn8HRzumcQMsAxeHsiZKsSRG1NkaBO5qCX1hoAiVZn0 +tqMHKC510bO3kMKyQc5pFPrvS3YayS2ElAV5/MMBpSNxdB10DZXCNmwJkSKIEXCsbiQpvjq8fK2zkCd +GVMBb5eWwHJsQVqaTatzyUc5x8RgwUEAvY7DpHQKLS1DzLNeptoZZpZ+yM8GCEqHINnBXFEd6cw5qZ8 +MjgHYrd///CRmPYMJoPVne+7GU3KiYL/i7CkYUpyn2ce0u2+C2TejNL80vtBRpt7r96YyLsnE/lmT05 +nTg5gBcxq7S0rI0YocYk/0Fu18RvMNhL1CsBMXSOR7cjAyWUQsGCWODPAm4jCEHOyfAZBp9LAzm4LMG +cBk3iV4b3iPCRuitcaCT8j3Sls5NpaW5XST0jLSlXPBdXdOiOxhK15rkv1ePdOPJf8w+n5DJl6eDBHM +mUD1gOFrpRAzEfOV9TI5n9Olnb+hqYYM0AeIy0Cqjf65NxR0uQDZyFowGtXrKyVSmkE+Di9JuUjBIF6 +0qmFfyshHU5ulgmNK279DU853qNswYbuRc1KLZTTfWfCB4hyE6wLoKHaNUi90I2jL1BfXS9SWBXtLPs +gJoa+5pxSW5qrg1OzPJLTCoK8w6m2ZKCJxhyI3ojGywfuITCuM4iCpMFJbSc558DC1iJ+qNWWQ6W/UY +2051K5jNQlqerz76dkd2cZd1yYz//vTT+h/hRUZivc03o4gPFXIiu8NaKYUVS0sLVO0F+E18j70X3SO +JBEQicj8G2FnpBFGXTIA3NhfLIv8EOCVMlJ6+SCQQmxlMAA1i9x9JSllXEoZtRUTmyWSimjl9KhRz2W +JzAKeoV6lbbIOoTBLcObjnqF7SHeTwerZf8IzlNs8QCrd7+FpPPFlBWl2h5wsAZJhz1B6k2GWZ/+AZ0 +iGQbWNSvsR8ODSBrFbG5SUtn3As6mbxY0TvSXE1ggeckpEO1rYJyJwgvIzfBMGU5SN/4rIoFr2HXdb5 +yDIb5QQ5dv7IWmo/YrXjbe707Re8jtECF8Ewle60p5vDn4hp39P6iUyRKrlOXCBJAfVo9R+RgsMcQvh +BJGT+BGnusx3XPGeuwDXGRlnKAHfhgkK4MpoID2K9l+o1WojbcwoGFC09/EAD08t7y/4TrEdw1ulK5u +uyc0ZKBhUHIMFJxXnhZwLpLpM78oEkK6XmeNhRoHMbbwBJNmyRXC07AKbyaUnNhOLjylwxqL3FNpygY +747gTqMOgdRj3cq9eOpKUjGUwIJA0iiuuN+vUSgTPAF2GGRUTwAw7fwkFd8/y4t0CUxKAamXwBvdR3H +BRXCyPihcTQNXMFdSoMSmV825WN3+DV/eMw/pss8tfB5LAqQfE+DlzagVyeZRzQvBlmwG83H8LzIzw3 +gfu9Cc+30HdjCsO1IStHUlaOsqwcSVk5yrIyeNVRJGDSkKyCZHmw6QGAEmdDIjtoPLtBck1JIMnaKkC +RU1ZB7Nw1CVEkoJ8Hce8AEFQUEUe+NqhTjUlAgP9vE6K3aoOiehOacC3yODIh0o/DbVkMr+ZzcP9JAK +PaKvbxUGkvN2iDv2xeCfCKHNY+F7XDuu6IFhx/4nNSm0crinyH3PkdqFthbX5zCanNxWnvKKid6boFY +AzOlDoJv5PkYTUtManblISOFg5Xq8RQayK0IrJDNeJad+DmRftAKfyYb5e11RDixlMLk75zIqZ7uS7y +6kRmZJ7syTE/TG7/73aONiaqKzt35s044NT3bKeILa1Y0TCtXYXS1SnogjoD/WBcU0C0ypSFGaHlQ+d +DpCms+kC5Pl+6abrZZtNNs9km22Sb0mZdtcZYRwz40bgIREfqWlxJO+OQFiEpqCuz59z3wEGb1GT/7I ++5yXvvzH333XveOeeer3vfXJZKUiVHuvWM9wmxuUrjmyOXVEn2InhOKrwcug7SMNmAFz+CX/KegUQ0g +EHZXkVtffKeyxg927qlMiG7zMzv3QltFpT4wInBVE9l4Kqe3JBfWbdjBebevPNQ9RikZk5+ldAStPTg +8TwW+M6YcBHEM6KDO/RE4PpM/tBcvr3XcpEX76C2SDqMkaQlGAjpSdBNidScKudHwaPS6eyLJUcaLRz +O6AEyz5AcydAhAZdt/m3JXgnui+So6b122MjsaVug9zrpB8eS5Q7EppCB34s+T7VtCDcekmG5pXRwFj +PvkkFBeJGCMFgbh0DH5G2ENghSA2BtmkUnMId7BiwR4A2WLxAIz5SahvlDv+Lb/2k5432UzvqCoX0zE +NaTm0dwzMgjllPUgLmucXgXS1dGjxsibduwmxrJ1wm94ijZdRuT8PzuKpDo8PMAggdhANpQfHlLh5vO +lZKArrtusVymaCMslUyTgHKYLxyVtxLqFSQvoMgZ6BUkbRc8Hp6HChL4etMSeNHa1aDTORYfxpEyer5 +UiDGsAfKVIPkSadOgbFpOesB3nX+CFg+Q89XFCoVG5P0vMQoVDqNB3zXBiPRU4FsjXSat56S1gryBUK +cgOZFEMxUCrUcCrefoDSTQZiDQ43z7WSCQGcz4rCOMRP2B63rS/zmJPGo5R5cx804vAdksZ5eedtN+I +Kubzmk5rTi/a048By5q8SDp4Q9eiiEaKPjiEL97JVBOsqeCsaIOkNzkthQCImwtQUVakga0E2/q+L27 +yVTAFu5AR7CZ4w994BjHfroDoZl8e4elixdn4m/DdPFrYa3E5koD/weMQeU1uTOovVKyb6L21yV7KbV +vQkrbS9UM0w2puDtUgEsm9ipx3CAXTLDpyq8+BZHBEWXJZSgwMAPl79dBnSJ/K3dFGW3TgIN0pVTGuH +sDubtNkLYx7qLx6qAbuIgebtMbII/fz4Qh+UMavn3YMuqdQzPouS8Z6l2BH/Ski4k9kHiMWuEx2hn4X +m8ZpucyvnbTLiaEwPOEfnGEiLdy+d1bgI7yquPiuK6hhtqLwiKoMPDHk2KFUSHYNIlc8KASeYfZ7gR+ +7xakZuAOdVSGrUp26BoRz2ppWRENgCIdf4jf+yE0eZEWhnqvQa3iHXeTILUNZpxmBARCosaxgdwKU6R +bpJDOzoF/C2h4ptAwJwEaA8aEbmpH0bQD599zBDGGGGVE5NtHLMPep+hzCt+7ke/dwPeXsQ249zAzro +BhjYA5p9l0NYcCo7eccNP3lBaFQ6rfQlYXYTRQ9DChV/KyC0E4X8VpbdVNyZugjZU37xv3yxq2AALbK +wMDeoIJfXl/QSnUTdL7vQeldx0j8y0kc4/2p1ipjnSXlY0P2vWr0PAIWl3LGXDDi4dXqGrhru7EJGMz +hNSoFvhpevN8iBoAlzF6ITAxT95URuZ3kgu0gQMlUIbUW+X/NHCNA1hldUSXB2OA/jk/TUPDm4xIHkE +uI3SjIG2EcbKeQ/yg3ynLcgYoXnIU7dUNFH6g+ahlzDuPZtxD83XYBph8DqgdscAUIRBd3yUUu81uTr +LZXoQ8Rr3SshmqwhtRBTVzCmPRlCFvK+7lLYlVIZoEUCFg8VnSPJlMCUj6dAFZdr+ApLMwojT8heZ+p +s4FAoY/0fwUt9Oncxvo+ACcZnREtHKno/X4/WjlMrQ2RebdPzS7BUrS8fpdhQmzl+lM6iiaplmNQBZq +Zko0GNKpRow5J1JxX+glTCmdbjnus4KKzy5J53f7xoD0hs/JCmCBpkEVQUUFjKEKUM23OUlRAPkcfzA +w6aVObYdAXbLNtPS4VGy0XuD37MIF6nXJ29+WGo3SBgG3REBYW4A4Z1puW0f51VfoiKU/u8kI5o0+As +Y1zyyvjz5TPDR2wTrC54/Y6Whktj17m1k1YCPQER2WZmOOq3Mfl9kGhuKW/BaImXEf6P6moTZuzmr/O +Wmd8TNiXWcCw7XOxHJk0zdVmCEEkkjMZCNSIwcIyt4pK5H1pDIJGpF1IMQdgQhIZCbffsXyjTeLzlW4 +NoxcA/2v7cqr0iqrB4EBTi7ScnIeB9aoyzbAwoLPUZKCynTAZyydbppJL0Ajyaoq3YXQHPWuVdrASXk +CrsquEyREn9PGGCzwPOGVAz8AMnYt3z5uue1dQq2KM3ACnQHQpiWITuJddA4YODTaCi6RRRA/zUYzhs +0toJ7t2By/HdnViVsRoB1zCkbAi2EujjRblfTFKOmzca11qcJNafOQ/BqhGwRpgwmzbOi5fGtMOEeXA +qasmS3EH+J20F6kXnvQcgWjtkE69xjDF+0o6VSM62OWfmnzIH0ElANY30sqcmhhO6ETN83aQaIJ34hj +hI4/YxtQjCzJqxJPmqdxNgWXpJsEsTlV4wPZp7dClDCnHyr4Vj+ZTOI1c4RvwaVL2Z5KbUNSWRq4YLi +02205Ze3wGHHF+h/MPg5L+WzXk1ySjinJojSOnMLg4C/ML0kj+YKyH8qEldcjmNPkxHHiM+N6DscG39 +lshMHHkZTrTRI8gNle1cUJvTIdpx62rCVAAEwdadAW3N58QZdvAgwnE8VqkuYpA2sJSMs5MyFcvwjvz +e9+F6fceV5sZatbJmo3U0eylG+m9hTZng5+PYVKp9CVb8b8VgzqSxTUoUcc2GGma03gA1IYwJFC15rh +lRqs8L4KAkOqexYKySrmfgPeBGIizR/VTNLcrxc7OckgnkyZziYlKw7urtnSgW/nSLVe4lddYoR2pKO +VUsPxHD2mwgVLWSr0D1OIYWCU1zyZfncpMvSEHgO16UPkoo4o7MZE8VLq/yojKlo5vvU8YZtaLDdY8q +MDf0EIViocxkAY2gT+QwtP8S172Hw5wLKHam43JNthRp+U7TpqOy7btdR2VLYTajusPiqblu0zJe68O +rHzZohvteIMgpChyzbMMtY3dQ05L/ZeE6/NgJB2DttzE/Q+KUF/3HIJ/JuD++f+qMdQax+nBa3M5UT9 +CfKmx0kYY3y6eVheswxGH0BlgLvzcqJ8K8ubFB6WTVZaeBmmXqKyulZ4lNUEWc1VY0JAAnS55RBy8gd +TQJMICWeP3QaMLRPw5s9sNZFRmHKtp/16qXgosgYiGJZNbzEiOoEB3ZFkZgS/wJSJJcD0Qe93ayNcxm +0y2naeBntDgO5ITtT3vQSPFg/hyqntcluKVrIF23K0aLwEyd/XxmXuuoZKhAbHgglQmSz5B6CSnqXj8 +m85yf9VJAGYKW+CFuP52U2n+N1/m4hGIzNULiAtkYgGICLdfACZVniAFgiMvWSCgqbpJjtM4sncSSEA +a4SbHZGDQ1pcwvIZ9hUa2wqMGNFjA5aD2Nlk4vy/YKuCHEuNc9MS5YJySVUuaUoC4a6M5TDheA1mkNh +k1L79hJTLydJnGIio0vs7rbJ4podr6IcL0Wio7GI0qiamcdsl2/qVNwhTz9aHDd9AlSRSgWUKumyX2c +CgkDWs2ozVg122kFI9hDhnHD+GSwm6v6/AH6cjBrTwtgFrwJ8piVgH88Skdqmu93LKei/yMoQpRhAsd +SjZFlSmVR9ivwNwxQAntAIf8a9Q+hOPl6pdmn+6ywY4Z4MQtf6JYRlSqNYa5VvKQe7EqNa/HHNJUzty +MFjHvaWyeEw31SOJ3Ru3EH3DNPQN2VuKnaVsLyoqghgslNFvatjo/gWYeupj6+r+OWKU+B9W3+rpQUz +RhT9k9pHVJA/iejpgFEPJSeTe1/wccm1TLQL3t0DfPuSeXDuKPHsPCQ/d/wRbhc9SM1U5TJqjC/Gr2e +jCFHZOZec0dk5n58XsvJSds9h5OTvnsHMuO69h5wJ2fgXOVdhl+KU+cPY0VdhxeKUCY/fhTAXGQcKLF +BiHCj+mwDhgeJYC47BhrQLj4OEfexmMKISvKzAiEr6iwIhOuEeBEalwpwIjauEjCowIhj9lsPo9cGNN +pbO2/E2Xs9JVU97ogh/1lf4al7O6rtpXXV5T/ZbL46wor6nxxravr3T6XJ5ap9tfV+HVbNioubPsrdK +Nmmefxa/NNQVwmp+oeSFVs8q/ZX4i+56V44xGoyAIqampubm5GqLV6qAQ9RtZzT1XZD9+H5+lfntqXa +ncQ1jHVpeJRoj9qlcYeMcIx717yPEb9/fh+AiOz+A4CscpOPrgGIBjCI5xOLi10AUcKXCkr43vvY+Xe +ImXeImXeImXeImXeImXeImXePl/LH0Lnv43MRlyllf+pi/pX+Sidvm2t1/+hLQ9tLbs92TBBw9/TPp1 +f9VVtHLzV2pwxQU3bK2ylesxWcgnChr8XNykwvjRuFmF8XPwVMw5EIH9gVWWWo+flLNFLvWvxV6Pgd0 +xcFMM3BoD74+B342B/xgD/zkG/jgG/jQGPhgDn46Bz8fAl2LgqzHw9Rh4JAbGNBl+9IL/h4Y0eUij/J +cZr1H+wwvXs/DbVqQRLkckwYF599lwYK4Hl8Jm/A/9YHE6SvM8WyrU63aN0+nc6qnfUlde6wK4tsrp2 +uGq8PtczipXeaXLo3G66rZXe+rrsOGbrsbaLR5nZUO5x53p9Li2VHt9Lo/T66rwVdfXebGJ147/QOer +8sDTLNHl9NT7fdV10Hm5z7Wj2gcdejx19XBhP9wVNfVeuOne6vdBB258jl2wrsFT7YNrbXlF1T191Zb +X1NTDS9S6aitqtyrXrY3sWlu/3cUArwv69/o82MBTXul5YcmS53+ZkfV8VmZ8VsdLvMRLvPx8+S8PzQ +WAAFoAAA== +/Td6WFoAAATm1rRGAgAhARwAAAAQz1jM4Fn/HkJdADweiKUCtAHJSsuY4Z2yMys5o8xm6NANjJaLd9Je +uzPe3CPGyeEsOOn0n54/ntu5saYNSd2BLMsLKUTYclNJ7tTrqjHRTkSQbw0cPQqf1yF/3PuH3olaHnJt +bIAuDJfFDGih2/s3duWBbHAsVpnhC/AtTvipjEHx+dTsX9dtgAy6QHwYNVP++d6vrnnxPX/q+gUugFwR +SC017rBvquqlXlAw65oSGjKcLD8j+Q0IJzrhiGuGfwUO2xyfCjKjARYpoVYbN3yF9BanN/IvQxxpSfwj +MlWFHgRkIz3CjInOUxv9dN4RTC7fcoxWa5GAjKCGjUtEIIYFsekq1bs1Ab1Ens/nWw/fpb/2IhO5fPu3 +QV6p6mDC0Y6sumRXhcPA5IwDHlwiP6EjtojePYQ26FDeSbRKiQ3vgMeIEHiYlCvzKf1H7DRE6YF4UB7v +Rpnt4KdQQ+tlbgSp5qd+Sp/MzBaYsY0ChBl2Wnssg0a65yP8/25/hRHaWEezzw3ZGN+fosVcH1Dfso6E +YYDdRS8Qzwhm7y6VjViJngFIfUtArBLFY3hlSMcfq/1Pyjf5qCiU0+NA1SMflfiy5BtveMkMQvdrK0qX +3dnsL00I21gi6CcmLzieFKf53e8YBOmBdhkq6cIt0cNtjrGlYf2zj13M1aLBKdSGNVpHqPwdbR3nWGNb +znHNXbTE934PP6tgQeeAsurSlT6a0yayqiWeY476ge+tRFjlyLrzK5S+b8E5pTfBNjIKvi4i4K+YEB5V +cA0pFRJX3mOZQxM3Cx25sffavAZPB+SB2fyrah44svqNWFz8tLECcOYOoDpvxlCEnbxtrt44H1dFmRhw +o4aF1kuZi9Xulz+2qnjxI1ovlI+3UhhnhHL9eUIx1DBe2nc4Iefv4CiaxvCincy7qqpqX3H7eY5d/Jkr +7K5uLourbB3yzvdImA6sU4vg0mFiCvL9qv2B+qeOWFpc/FQFgzUepdYD8/bjtOcWm4HJ36FGNZ4fmuOd +eYlg349iAKUEqpeaN+89XeYCGI/RxbZ3wp+pEegVd6bqRwxqK4B19U0FWqgSWMgAY6eQyFXnfE5vbt1Y +cCWWMcwiUy3uXKpyzGejc9xtcM6fluSDSPCiLHxnril1L8irRPRO8axKYbGRP3JvddjbV2YyY04obtgl ++ZcKioc17QuNLjkEQlSaJfAul81NUFjCIqRhGU08AGYxFjJr11cljAmU5oVtadMvayTQZ/CEfXc/iXQJ +okC0v8GNYkJeOxzvqayhqL+i4wBEgvhGcn4NBeaPxfsK/KNGfZz5HaEg2mFIzPFCWb6+VQgUT9PZjbcY +7v7+s24QKFNFGI/2RW4BDDxau3Tcv+MprCdZKnxPep3Mq8vF3VqHLwxmZ39b0Z5f+NPgDOxuLqSdQ7Z1 +L/febGOpRO/QKUyEduPb90aqxlNTVhGeepfYGJ6j8XgJuBax0m2lZgPDQ3/Iu8n1AswW7PCNE0vzu7Ox +5QEGVovRp5IeVwFM6nKoir0fUCL7j8FcUuGkeNWmrbU1IxpL/aAZGXwVuaB//1w6umxysxkJxfLGpmbp +1MpDrJoMMnkOj0q71WuslegiREhKuplHVWcZjitZ/F3kczhcfAensNUuiLAl5rp0yATDyCs69acgsR+3 +BQEXW4r6a2rOpvWs78gadAlPOxEqCgTBVE6BUsMzLXIZH0ybKHckMYySx5amVzNRJwER7/kduASSb0JC +YF6FubHGY/q4jnGHA03wziA9ObjXTvVRu0R8aXSLzgbtyNKVKd84xeo9zca5EuWttPcRuEAxOubvzj2B +r/XvFt8CHYiPem0nu1DB6bzbjycsKfKHTRQwaF2wAzVhjztfQH1LkI2++iYXoF3HCR6rSv+00G4mmm5D +jCfunzxZYpg56I3Nwocnsxbt/pCxZK5YTxCMO+HkvjJLES2lP6kkX1cNIRgK6piZ2117iTXvjnxMtTgi +pnunM4Ye4bXXtZprO6W71LySIr4m0ZQxID5nLfBMGu9Bj3VIlAX3xmkdFwO8rPRVLlj24UxaWuevgEPh +ygSF13muUlkwB64YSq/bHJAhdf51IkDO+b3YuJBvUBsguFuV+ZhQ9D5bWKmVvUd1HZwqWAgd3C3L4Mrr +TMDRC3c8EgwougkKTm2CjtWRGlvuz2zjnAsTWpmbl49XgXj4CR7tOnED+JAja8QttBH1MfToQ04Ezfez +8mNq+5uykr8y7vGvV/w4YNYa41IFvUJgxuDn9aOXvv/qh68JfTS+TnRf8T0tDOgS+Imr/gi7q4l/PrAI +0RDAYIQl6GzjBJQ2LoqgJUQVaLF6qQij1+O5O2ITw2B2Vq0w+FTUjJny2+j1gKvsYreYlj6Gu7IrsrMe +sB1B/MIA65ISmgKNvPcCXI0MYMMvceMEPLrpvx3/qoVc6EqP01zKtAMH7AcOdeHj3ghvVaJcCDSfZXoj +Xrs1p5sll2vcxyrs1e6Ne0OhTjo+E9wf2ivLApfU5ZoJ+yWu7VLTLAggv6VgHo/gnsqWhUAC/x3nenAA +kjVOdoyUrjOkaP0rJlVB71jhKu7heaAKlBmT7hVw6PC5Jd3WwcumHK0mqTSekL2kMDjCs9GcHAZvT+Ec +WkzXYTMr9ej6C3GOa+AmHFK3YZaRvVA46Bhw0J8XTMLqI38Y+yytaWb2SDppzBF9WM4UsEeAu1iXkjkh +Wp60VEcSwy004DW4+sQr4/DmKjAW0j6twTYYfiEpesSn788iTRgFuI1jPfEqK8Oqv1gWD1zTggEIsdr2 +eoni1X1LqzAasgPBrvWJtn9YHPVnV3lMp5mqSPLyDZm1uKwledV3o3QAI/PjyORym+9S4dt6ncNk/uI0 +cy3gy6zZnKokeDtCcWJnoeyf1Yy8od3k9Zhqjp2g6JuhRcBEfXXSNlzPIcTzg7dUL0cF4K57R7d+RYqC +yWCvs+wuD+cG3WUGdLEz32Tc2gtHwcAeeMuCURFNnZDN0mPkHNWzSXOI/dtOzRTYM/G9aTnRu7J5Y4uv +y3EJwaa0PTJJ2I2GgQ6JBUeZJv25Zenb1TYMLk10UBr2Kuy9ez74h20yX9tkVXfSc9g/vTLUFMCXFGCf +/HrlJ6f4XBQNa9tpJUe5yvyI7De+K6/73KqKfW08wPPJkoinlCNOyyWvRLw94JwGS9YA5JiFVbqXgpmi +5RdwpSQ8zRFVTm6lzPiR3yTVpyqz2oJWqLKrGddPxz4HK3jeG6D6PWH2mDaCqSceEMz/SKJ5DGrO45Pv +kFC26lOrko4UiFDvfjsnGDD7OuYUcACdtcPeIfrNdiqz/wT9KQ/yNZR2VYIPWOxcsRCSyTQVUj3wTuPO +Nooh4gAXlgVJSvV5efTXe/mUFbFisxet/fAQYdHQmH0QS6GdzWamXkyY4gDYsG6JZZ/G2Yjusqbj/1UB +uZW616MQ5oLxTPG6dJrzfOUkukDI//SSduKpINv4ZTMFdx9qdcc3+V9f9cD5Ycb63fkJbJ8XTUIfl30M +cHOcx+2YIKGtsyYpRMl3+4V7/Gc6S/de14RV8R/HkiMq+10a51JNupa8jHVye66Ga0W19EY/md6Z3rqz +ZZgAJLgl+/KinLCSvjRNBVzMUv8JGSAMcFCxkAb1oQNhz3A2G6gpaU6pRKqvLb+zJc+CNgUDc2017UV2 +X39LnMiP+GqnC+ucgZlb3HM5k3l1xX9VpfKr5TFLNA7gZT38GePtlaMDQ/9GEKBPndM1Xm1KeWB0TYTP +659NVAkOLDiDi0dGtmzELZiGVYYUS2p+mtk77VprwgmRPvqHzr76Mk+U6T1+YXIp3OvfuG/ue2JHeNIn +6LLYcVhpByaWHowUxmg3vbW7Fu1jv7Ink6wpSbdLRLCixP7+upKbLj/sRWnz4QU9Hr2SVoqK/guvXQ+b +7FJFfHQZL87p77gaduYI0BaxPVrf+hOYk/+GTZnQXtd3aLEbifrm4jklxzRwzCHYuiZKJMZy0P4BzqCb +K0tnXscSRN4V7QNinm+O+62cwzT8zvReuPR9hZ4g2j8J70NFhsR/g7krnibrt8OY4YL2QjbY5Y6Atscj +nmrWvHrxd7b9+fxMTgT89eftXQmQXynnOGtNPHBKW+DQSu/hsxZC1TAE6fBjadbwMRe+U8As1clN73rO +svWHhQa3xFii69Y8m7+1BnN3wsGw+8y97n2/HzX52NfyQMR5coRCTIFoiEhtJW6pqYJXCSuuVJCSGpR+ +WlI2s9oSUr8wbcVL2ujSBGknIvgF+sRYzH3+Pcpxq5Ty8jbwEDIh9lt5qh2/kj6uSc23gxFOBAIdrY47 +8y7t/ewXGFDf/MsHbuj2sez9CT/WG6clYltBOtpPnmBbbcIF1oFx9gKQUujW4I37T6GUL517x+bvN9dF +LBgbVSluPTrqqShkOwEUIQ7ufYze09/X6B+lqhYXXA3ptXGfbQIuBozZeUz/2ew9gj7QQQ5IRSAZOAE0 +In/qjrMO6Mopj0EagscUiByVN3wOVtn7zH17tPBHUJt2ilTy+vriHa9cxzZ/w4DzutDCuxU0cgUtwP6b +6Mm0ZGniGE3PMbjgAMTZQqKrgFzKzm3aIE7hI03OUwc+HR6TtYy72zLgI5S829Fky0/+lc98VChKnOjo +Rb33Fq3fWRHCR4XpvM00mKgeoUqx38kRqYfuvo1ZtFt+u3gFR5MMKqgfiXSh8gMbn59vKoTf8jmELEWV +7AFoxyZJjLuj5HObwpJ4nN2zwevglUxtXTellcCExpaKXv6Ym+cXtycdLd96w1x3Q/+W03NeuNXugCjI ++0E1aBG/Dwc1/3B67lxjk6aY88RgxkfgnHgiwr3OdOeUlcogbDR+N84nOmeOi8TVRerS+z0Pcs5Hve81 +2NskZqi0QVLdW28GiQHtodfLG+RnR+t3PyRNIYZ5wHzd4TgR/sEE40sCHb9LpemKpRG2wifooev/1eR0 +Pq5areOWJzCaP7Kj0zEEGVuOXo6Pk6JBsA5dYic/TR1kBtw8WSO7rFxVfZHdbr/tcCHnb0U7MbuaZN/Z +gZd/NlzQvktLk3TThcDiCQYaa8rL5JwJspATXEPFy87H93w//8ZYjEgvXdsT2QntlaMa1ATz+Q6XBHFu +AsBgs90jYQtFndXBToD2aduSn3Cm2OfvNKQaCuohNIxIuA5L3pkhbK77TM72WS6407J2wgn98ipvLYU6 +5NhwcIXqONCI9lI8MdpaEhCWevIj5otQGsYX6YUqBvd91na0HoWrKv0UCZ5TGhZhuQqir3ISdId/INxb +a4byXG0CuVNXnGptNSgEcqkfYvzzJcrq2VSZyFcxH4hvT22+iajMmr9TFl95X3peYJdF5UuHKXmCL2LA +fZJQJcuRc1Fs3shTPQ1Icbz84B0LP0S7WfQN87ph5o/U0Ov+tTcviIwpdwmonpSwY3C9wDTAq1bjZhBY +hqcUbuI4pvmxxUMhvQfIGY7rtECqzmdq5RbkUT8C0rx7JMG/WFqL1Pk9faRDRHvjXsZwDOb1v01x3mUG +7jGrCg0A8zxT8KnvqjFuTBr5XyC3wgeCLSeBLG8WpGRgHCRRjo+WBA4VvBiC4qgLLHYROhflteDmKKVn +qUAgL+TYfxv22cNeEruRVcuz5mrhIKdGsyMuI7wPlhgp69/s0kwBZ+KkukPUXa92qQbzmiKvfvur/BLx +bh+L25H2DsrwiYafzPgga0ivDF7Qe9IPZo6nTBrXyz0dmAgzT0HLIHI7FnUd0mlX7fkfkXlSebtQzOJz +5bcKbVL8ZZSuh42aerAn1BLmi7GiKHpDq/xuhXM7yeCBqPutYp8slghgU0ahh9jwiUVx3JXGUH6DTWnm +8vJbXhtf/Ybjq3ibElDQwtAvkQpL/IuT5pnVos3c3B7ray9CW6PqAg2obBcjreNoshlDjVL2Osnmm5wv +cf/B+9TfV+qCXqM/r3XblImKcB0a/4hvq7LMwV+OxyMOUTnYPp0yeU7kwBT42gBKimHCLNYIVbRSEKnN +yLpCVumw8TrpOE6O4gETzIkSSLoDLwEldveND5Vg93RByhF94Z+TEh+nnKEnSN2fwnJBxK4nR+nvCyun +CYlQwM4MNCIXLf7x0XBEkBa4og+B9EdOdIiF8yCkcKJEWiVfO7ftpOyTkboo4g8DYuOZBZIEodzHsrDw +TvLzfJxiEQdSvXmjiBK0GDE4JOtq3Hfkdmiknb3/RyBXI1ZgwULu8Ic+NLMIeYjuMOvN1lsNLmGNfekl +NtaDB7y1iYVfCMtD7iKOJgi9MHAp0YdYacrh8bejLQXtltlP6CoKKzqqHxVBs6s4W7Tzf19n4xp9RPuo +xAgfNToz+pZAG/tPWglviGHd/jKNKmNz2cWLiFnVYYkeoX48W8e6c3Kp6yAudU9wAeC+NF4J3WpXeOUG +5//LVgGf/suzAzqkJt4P4oVBH1eXKtcfcWFlVKbmGYDrjGnXfGum7TgX1d83HYq1q1m3ZMUMk7o5InnV +4BdfFdmh2Cs69Yb0Bbl+Uwg542kN9kLhRBSVAuKdjTS+UbkEtk/Y/uKoX91LhOp4A6SSIVORcM/EZxyR ++L0BctAazUoUTPvPmdPwhtEDQ4OlbTpiBZVmmCB8dE5i+P9gctAqV1q9gXdTH/zy36xoD2UVq5NyTAlv +Wm7sWqrLVUdKewCWsZ6G2RNef+g07qoLlun5mWucvu9KDRkJ0zQsdQ7+HNcwQoeYU3Ns33T8IGLy9CX8 +liIPE2NkItiHgYGO9afNkmt3Bb4mWj1937LAk6UOjyU9K3SQFBHRCDUf5BocztwT2YJPSKYO1ZS/2Ow1 +W7mj2LyZ/mObyoidqEH5rrX2kh7ATB1GscaUBi9qXJiM/ePDYwPcq15P16Zwo1lVPF/X0k3+XKQOeRbu +W7VGGzPv1OQ+j0wASbUq3S9/3j4B1g4s08f0cAvnm5by6keBPODX/htHuWASARtQvcJlFa6NyDewiogE +t2JGvi6+AzDJ071ES2gcbtVjCEFV0FROII1ahnkVYgybH2CrLEM1zJRG0tYebd4Kjd568fTMaEDwlPKP +oG8xond+bCi2BWwGS29LK0zt1Y3U/JOyrWKjy06B+adWx3vDRI5PERg8bdBBYBJgdTp16cnre2Ui/PNm +zVS0+41AIjZxXeciFHOXQvsGWdNDpp3b7T1r0xxK3qCQfl5vxK24hftpk4neCPVN0oP8fsncr8MAq0M4 +zZqClAGYr7XEBCyqd7an+AT5TTaXdfxs4oKJFVFpPTLyEoB7AVlJa44E+F7ojNY3iThtSKOyusrzbM5I +6KMivoNJ/JIxy6MZ6E17ulIn4oTl64dU4f4O50B+K3SjkQGNvkq/Xu9L+E9nNO9nw/UgmVGFZDxujrbk +gECnVqaamiOldHqWxA2im+2JB1oXhJmIH+ksook0hebaq1SfmkCFtMNlMx7qxhuNssfirqXrkLJAyPW9 +9WocVqx9OPtp1MB4wxIDS7bCUccssqyusXAwTySQSyekZyWNZmhgna9wDJ5MQNZKMKDG+LTLUBG1g6+R +u2EyRsB6NZTTcQtxBK5wcG2JSEKZlu367G+9CevvvKLJNI1MMAdFeeSJAw9OcvXSxBGjsq1XIUGYqs+M +4VZQOaURbCVXj+tP2fWQdzSru7gauYFf5ZWfmj5YMO6Pxpw18aI3ci5509VCA/uERcvzYPQEGcyBbPAq +jLrj2jZdktuOZkYwC0rctHO2kJ1GXXyJnoNhQk2FWwmYA8pYjaN2HRRg7nYZG63BkpwnYlZxvBqGGv3+ +cZlv7vhOUMmqAnZ5HkvjYioBQYHkfnwYSiJ7Zt1zQj6JdlDmckFeUl1R8zTh5L9jK8fpcletmxUKcC8A +RLtk3AVXz7BSYlfXmfqZnZ/lCZK7kNNi/1hV0Aavlyf5TCKuoAXkvpG2siQ2bMe6c9g+JnH1QLTjBAUl +kLzuBLrzkQmSsIfHOdxtNsIvz8fDfWunRn0u5oKs8/55msDzUugWLkoo8gYeDST0Q7byiefmwKixcfEy +igUU10dy6xQG8gw6cMtg6DY8cQz1ux0rdMFuvfp10kfVebZDkAbFXpew7EZaGVi02LtXC29I2BisSSeX +BM9MH2hgi4CA8qyU5wi4fNz35Y5giVI1drg+o9VtzHs3q8UafsgiF/uNyCUcYv4MRn1zw/bhfp44U+Js +bTFdshisX2m1Ld0EL5Ev1Z679qOyvJrEoflj7JGCuAf/k2bQpipn3uyoQcUHIDBvr6jrXcLTdQBnfO/F +VTZdpIn3jfpuX5taIOCG9c1EEwHbSrQPtxLlx85V+/ShZrj8FL07cB1x6vzaNVCD/Y9sIHKdi6ZgHhwB +B9oWC9/hV59TREfiLuNzaO4ljOUz9gpxM06fTlP71qETRkiIV30aKiWDppD5P9MxU0zXgSReFP3T2ylO +tMwgfO/CgWgkGXkd4+XAd3KxNRkU38ol2A+VTW3Kgwy4eAttFwTztgJ1+yv+CghdZC03rjlJdP5O3/aH +N/baMSwUuJ0kOEWLh5ouQwziM0kMDJGJaHetO68lznzaTTi683VNMT/P2QU/vug8JaSM5AAmD2CR0pFL +jAWtIvB/n+j2fAGPjqrm6C23buiLa5/QK69C8R9McxhKqWIwY4o+ZIWnmGnmIYo+ccxwW4iYtvqqEyhr +OnF/7jFtP/DfdvImYazIHl2kopJfsCUxYipKrMgdCNM4F5rzr/6UIz33n73Hx8Qyl2k84jDpw5XxiB0Z +aFvDEkgyVNrHt4DdOe+4g6a/+yHtG/ONcEQVQa+vq5e79YbP7Hj4UEycMyYcfMVWwoKfubI160mRg7Zw +ZqEOdYuObmLeqBfgNIb3IIUc1pFAMpbZhvfGO19MhjOA5RDkRbcHxGjPifJruygA668UTQGs/0osaVR2 +8OyFruT+Hh9xe0jyqLTGq93xx28ecwT10p71+CFVxfwcGoE7bsPCVB3C5DOxZ69c+5X1owpQqI2tL4vc +ABDLgFvC3FvR2o2Fnp+TXnwa3aT8TkrYL6U3Z2/lnJ+lKPZbfqsmGpPiAN0ekB/V0Rws5wjPnwLp6MoZ +vekRCGiLdMRfB4Qh8eNULX9SFypF48XqbUpcRSR2iMkqbiprjoxvKMMqgnt552bONmEKZm/ZGpHSTuJM +hfyii8gPt+IQynHn/p3h9hpCIARXsiJ/HVZi8FHiQypOoqwANP6yFiJAKj9jthlOdm+Rs9xnP9gpY0Zp +4QArvTPAzKDot+JwFQpoF87ns4BEBIaaIeV6yCjiZHKx9H5iTXOxatQo46+eEfaOQ5vUZA88xr6qjNAV +k3SMIZMwuH6WdYfmPxj+6z8+0PQ+aCe3a4+FlqXVhh8hJXg/ylr5NtYvFQiG7+cX9oHSneya0vjPYQO3 +vSTfyJgjVS1zTaBRrPo9lVFJ+yI/8e3To3OyrboOk23L8qMFyUP6mCK8rt90wViBIwQ5x4rDfRXMhZSS +FShEBmy+c3y4eS4IuyDUf2USaUnGg9TAStl7+/7Pvzw/5d/Q8JKLgKksj/MVgCZcGPhLoFFGzrHIYVVl +Iew5sRlPgvdfAFtLIveNievHwSVrdj3Tdt8YcXxz/S1iRLk1MQHqJyjw0kGXhZy2It83ctSvevDf/6w6 +szETjtHhwYNv9l6KZQxIfwwwO/iDI8af6SauWLEMco8L3tloBApM3jUIwdXelXGiw2TnYlW4t1QIsfO1 +49ass28OFuyRTZeTgtIzgggiqrqv04Af7i60e7HJWSIc6onHzvAJhJ57UBTUkxjyShVbMbe2ZOkW7TEB +1tn8awzy2VzQfnMcq11XOqJVcAisOU5O0y6EkQffzQYoQNjHnbK3JM8HFvcgBEDZoqyNfSfcCEEyxaai +fxMFEBEP9LNI0Y6j/l7Dj3vrLPZ5ZlJGXMmiMw2tmrLFfs0rjvWPkvIpXBKBqMd+dzt78o4V19QzFCfm +3K0xK9ZCxHljbiqwR2abHvan2Fku9R/ULKXB4dw5o3umQs9pMbLBR+DNfvYP0S0MQLC3Ec/hAiE6AXRB +httMQi5OYn6yZ3YnR1fjNZeN2ga9QDziM9DyCd2+gEvzDLftJlSSp1tAkAE+b8LIYFKEHxGrvfNx+NPW +2G9H6c2q1ZbGidQ6YhIrpgBbgk/BFlXRUrDs0g1YJJN57p2k7V0Q1bgQVCeBNlUHqLPfFyYr7llOhxib +hFmjs5tqJpS/4YWsXJgKgZSnSI4wdFhGnI+3zMEcTgV09R9DrqrN55zbbOyHoUBA95f8d+IQ5+PqG269 +B9vAUObvi9KRQjwFpLKnQE0m75Kd46+DaNv1Z126ugnE/+R+bZS4QhG/NAjqJoIQntOKRgHO/eS7kdVr +UUiNCfgpHvbOhdt/cQl5I5N6ooZU0fVM36OX1ugK5oWUOGRYAAAAAAs+rk4I5fZyAAHePIC0AQCzLaW5 +scRn+wIAAAAABFla diff --git a/samples/Shell/zsh.script! b/samples/Shell/zsh similarity index 100% rename from samples/Shell/zsh.script! rename to samples/Shell/zsh diff --git a/samples/Smali/ActionBarDrawerToggle.smali b/samples/Smali/ActionBarDrawerToggle.smali new file mode 100644 index 00000000..c22484e6 --- /dev/null +++ b/samples/Smali/ActionBarDrawerToggle.smali @@ -0,0 +1,551 @@ +.class public Landroid/support/v4/app/ActionBarDrawerToggle; +.super Ljava/lang/Object; +.source "ActionBarDrawerToggle.java" + +# interfaces +.implements Landroid/support/v4/widget/DrawerLayout$DrawerListener; + + +# annotations +.annotation system Ldalvik/annotation/MemberClasses; + value = { + Landroid/support/v4/app/ActionBarDrawerToggle$1;, + Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;, + Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImplHC;, + Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImplBase;, + Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + } +.end annotation + + +# static fields +.field private static final ID_HOME:I = 0x102002c + +.field private static final IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + +# instance fields +.field private final mActivity:Landroid/app/Activity; + +.field private final mCloseDrawerContentDescRes:I + +.field private mDrawerImage:Landroid/graphics/drawable/Drawable; + +.field private final mDrawerImageResource:I + +.field private mDrawerIndicatorEnabled:Z + +.field private final mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + +.field private final mOpenDrawerContentDescRes:I + +.field private mSetIndicatorInfo:Ljava/lang/Object; + +.field private mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + +.field private mThemeImage:Landroid/graphics/drawable/Drawable; + + +# direct methods +.method static constructor ()V + .registers 3 + + .prologue + const/4 v2, 0x0 + + .line 108 + sget v0, Landroid/os/Build$VERSION;->SDK_INT:I + + .line 109 + .local v0, "version":I + const/16 v1, 0xb + + if-lt v0, v1, :cond_f + + .line 110 + new-instance v1, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImplHC; + + invoke-direct {v1, v2}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImplHC;->(Landroid/support/v4/app/ActionBarDrawerToggle$1;)V + + sput-object v1, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + .line 114 + :goto_e + return-void + + .line 112 + :cond_f + new-instance v1, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImplBase; + + invoke-direct {v1, v2}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImplBase;->(Landroid/support/v4/app/ActionBarDrawerToggle$1;)V + + sput-object v1, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + goto :goto_e +.end method + +.method public constructor (Landroid/app/Activity;Landroid/support/v4/widget/DrawerLayout;III)V + .registers 8 + .param p1, "activity" # Landroid/app/Activity; + .param p2, "drawerLayout" # Landroid/support/v4/widget/DrawerLayout; + .param p3, "drawerImageRes" # I + .param p4, "openDrawerContentDescRes" # I + .param p5, "closeDrawerContentDescRes" # I + + .prologue + .line 152 + invoke-direct {p0}, Ljava/lang/Object;->()V + + .line 121 + const/4 v0, 0x1 + + iput-boolean v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + .line 153 + iput-object p1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + .line 154 + iput-object p2, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + + .line 155 + iput p3, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerImageResource:I + + .line 156 + iput p4, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mOpenDrawerContentDescRes:I + + .line 157 + iput p5, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mCloseDrawerContentDescRes:I + + .line 159 + sget-object v0, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + invoke-interface {v0, p1}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl;->getThemeUpIndicator(Landroid/app/Activity;)Landroid/graphics/drawable/Drawable; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mThemeImage:Landroid/graphics/drawable/Drawable; + + .line 160 + invoke-virtual {p1}, Landroid/app/Activity;->getResources()Landroid/content/res/Resources; + + move-result-object v0 + + invoke-virtual {v0, p3}, Landroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerImage:Landroid/graphics/drawable/Drawable; + + .line 161 + new-instance v0, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + iget-object v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerImage:Landroid/graphics/drawable/Drawable; + + invoke-direct {v0, v1}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->(Landroid/graphics/drawable/Drawable;)V + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + .line 162 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + const v1, 0x3eaaaaab + + invoke-virtual {v0, v1}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->setOffsetBy(F)V + + .line 163 + return-void +.end method + + +# virtual methods +.method public isDrawerIndicatorEnabled()Z + .registers 2 + + .prologue + .line 217 + iget-boolean v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + return v0 +.end method + +.method public onConfigurationChanged(Landroid/content/res/Configuration;)V + .registers 4 + .param p1, "newConfig" # Landroid/content/res/Configuration; + + .prologue + .line 229 + sget-object v0, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + iget-object v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + invoke-interface {v0, v1}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl;->getThemeUpIndicator(Landroid/app/Activity;)Landroid/graphics/drawable/Drawable; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mThemeImage:Landroid/graphics/drawable/Drawable; + + .line 230 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + invoke-virtual {v0}, Landroid/app/Activity;->getResources()Landroid/content/res/Resources; + + move-result-object v0 + + iget v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerImageResource:I + + invoke-virtual {v0, v1}, Landroid/content/res/Resources;->getDrawable(I)Landroid/graphics/drawable/Drawable; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerImage:Landroid/graphics/drawable/Drawable; + + .line 231 + invoke-virtual {p0}, Landroid/support/v4/app/ActionBarDrawerToggle;->syncState()V + + .line 232 + return-void +.end method + +.method public onDrawerClosed(Landroid/view/View;)V + .registers 6 + .param p1, "drawerView" # Landroid/view/View; + + .prologue + .line 298 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + const/4 v1, 0x0 + + invoke-virtual {v0, v1}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->setOffset(F)V + + .line 299 + iget-boolean v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + if-eqz v0, :cond_18 + + .line 300 + sget-object v0, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + iget-object v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + iget-object v2, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + iget v3, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mCloseDrawerContentDescRes:I + + invoke-interface {v0, v1, v2, v3}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl;->setActionBarDescription(Ljava/lang/Object;Landroid/app/Activity;I)Ljava/lang/Object; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + .line 303 + :cond_18 + return-void +.end method + +.method public onDrawerOpened(Landroid/view/View;)V + .registers 6 + .param p1, "drawerView" # Landroid/view/View; + + .prologue + .line 282 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + const/high16 v1, 0x3f800000 + + invoke-virtual {v0, v1}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->setOffset(F)V + + .line 283 + iget-boolean v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + if-eqz v0, :cond_19 + + .line 284 + sget-object v0, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + iget-object v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + iget-object v2, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + iget v3, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mOpenDrawerContentDescRes:I + + invoke-interface {v0, v1, v2, v3}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl;->setActionBarDescription(Ljava/lang/Object;Landroid/app/Activity;I)Ljava/lang/Object; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + .line 287 + :cond_19 + return-void +.end method + +.method public onDrawerSlide(Landroid/view/View;F)V + .registers 7 + .param p1, "drawerView" # Landroid/view/View; + .param p2, "slideOffset" # F + + .prologue + const/high16 v3, 0x40000000 + + const/high16 v2, 0x3f000000 + + .line 264 + iget-object v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + invoke-virtual {v1}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->getOffset()F + + move-result v0 + + .line 265 + .local v0, "glyphOffset":F + cmpl-float v1, p2, v2 + + if-lez v1, :cond_20 + + .line 266 + const/4 v1, 0x0 + + sub-float v2, p2, v2 + + invoke-static {v1, v2}, Ljava/lang/Math;->max(FF)F + + move-result v1 + + mul-float/2addr v1, v3 + + invoke-static {v0, v1}, Ljava/lang/Math;->max(FF)F + + move-result v0 + + .line 270 + :goto_1a + iget-object v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + invoke-virtual {v1, v0}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->setOffset(F)V + + .line 271 + return-void + + .line 268 + :cond_20 + mul-float v1, p2, v3 + + invoke-static {v0, v1}, Ljava/lang/Math;->min(FF)F + + move-result v0 + + goto :goto_1a +.end method + +.method public onDrawerStateChanged(I)V + .registers 2 + .param p1, "newState" # I + + .prologue + .line 314 + return-void +.end method + +.method public onOptionsItemSelected(Landroid/view/MenuItem;)Z + .registers 5 + .param p1, "item" # Landroid/view/MenuItem; + + .prologue + const v2, 0x800003 + + .line 244 + if-eqz p1, :cond_1f + + invoke-interface {p1}, Landroid/view/MenuItem;->getItemId()I + + move-result v0 + + const v1, 0x102002c + + if-ne v0, v1, :cond_1f + + iget-boolean v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + if-eqz v0, :cond_1f + + .line 245 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + + invoke-virtual {v0, v2}, Landroid/support/v4/widget/DrawerLayout;->isDrawerVisible(I)Z + + move-result v0 + + if-eqz v0, :cond_21 + + .line 246 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + + invoke-virtual {v0, v2}, Landroid/support/v4/widget/DrawerLayout;->closeDrawer(I)V + + .line 251 + :cond_1f + :goto_1f + const/4 v0, 0x0 + + return v0 + + .line 248 + :cond_21 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + + invoke-virtual {v0, v2}, Landroid/support/v4/widget/DrawerLayout;->openDrawer(I)V + + goto :goto_1f +.end method + +.method public setDrawerIndicatorEnabled(Z)V + .registers 8 + .param p1, "enable" # Z + + .prologue + .line 199 + iget-boolean v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + if-eq p1, v0, :cond_23 + + .line 200 + if-eqz p1, :cond_27 + + .line 201 + sget-object v1, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + iget-object v2, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + iget-object v3, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + iget-object v4, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + + const v5, 0x800003 + + invoke-virtual {v0, v5}, Landroid/support/v4/widget/DrawerLayout;->isDrawerOpen(I)Z + + move-result v0 + + if-eqz v0, :cond_24 + + iget v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mOpenDrawerContentDescRes:I + + :goto_1b + invoke-interface {v1, v2, v3, v4, v0}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl;->setActionBarUpIndicator(Ljava/lang/Object;Landroid/app/Activity;Landroid/graphics/drawable/Drawable;I)Ljava/lang/Object; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + .line 208 + :goto_21 + iput-boolean p1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + .line 210 + :cond_23 + return-void + + .line 201 + :cond_24 + iget v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mCloseDrawerContentDescRes:I + + goto :goto_1b + + .line 205 + :cond_27 + sget-object v0, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + iget-object v1, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + iget-object v2, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + iget-object v3, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mThemeImage:Landroid/graphics/drawable/Drawable; + + const/4 v4, 0x0 + + invoke-interface {v0, v1, v2, v3, v4}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl;->setActionBarUpIndicator(Ljava/lang/Object;Landroid/app/Activity;Landroid/graphics/drawable/Drawable;I)Ljava/lang/Object; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + goto :goto_21 +.end method + +.method public syncState()V + .registers 7 + + .prologue + const v5, 0x800003 + + .line 175 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + + invoke-virtual {v0, v5}, Landroid/support/v4/widget/DrawerLayout;->isDrawerOpen(I)Z + + move-result v0 + + if-eqz v0, :cond_2f + + .line 176 + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + const/high16 v1, 0x3f800000 + + invoke-virtual {v0, v1}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->setOffset(F)V + + .line 181 + :goto_12 + iget-boolean v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerIndicatorEnabled:Z + + if-eqz v0, :cond_2e + + .line 182 + sget-object v1, Landroid/support/v4/app/ActionBarDrawerToggle;->IMPL:Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl; + + iget-object v2, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + iget-object v3, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mActivity:Landroid/app/Activity; + + iget-object v4, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mDrawerLayout:Landroid/support/v4/widget/DrawerLayout; + + invoke-virtual {v0, v5}, Landroid/support/v4/widget/DrawerLayout;->isDrawerOpen(I)Z + + move-result v0 + + if-eqz v0, :cond_36 + + iget v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mOpenDrawerContentDescRes:I + + :goto_28 + invoke-interface {v1, v2, v3, v4, v0}, Landroid/support/v4/app/ActionBarDrawerToggle$ActionBarDrawerToggleImpl;->setActionBarUpIndicator(Ljava/lang/Object;Landroid/app/Activity;Landroid/graphics/drawable/Drawable;I)Ljava/lang/Object; + + move-result-object v0 + + iput-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSetIndicatorInfo:Ljava/lang/Object; + + .line 186 + :cond_2e + return-void + + .line 178 + :cond_2f + iget-object v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mSlider:Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable; + + const/4 v1, 0x0 + + invoke-virtual {v0, v1}, Landroid/support/v4/app/ActionBarDrawerToggle$SlideDrawable;->setOffset(F)V + + goto :goto_12 + + .line 182 + :cond_36 + iget v0, p0, Landroid/support/v4/app/ActionBarDrawerToggle;->mCloseDrawerContentDescRes:I + + goto :goto_28 +.end method diff --git a/samples/Smali/DoodleMobileAnaylise.smali b/samples/Smali/DoodleMobileAnaylise.smali new file mode 100644 index 00000000..9f08c551 --- /dev/null +++ b/samples/Smali/DoodleMobileAnaylise.smali @@ -0,0 +1,4235 @@ +.class public Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; +.super Ljava/lang/Object; +.source "DoodleMobileAnaylise.java" + + +# annotations +.annotation system Ldalvik/annotation/MemberClasses; + value = { + Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$Sync;, + Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$SessionPolling;, + Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$MobclixHttpClient;, + Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$FetchRemoteConfig;, + Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$LogEvent; + } +.end annotation + + +# static fields +.field static final DEBUG:Z = false + +.field public static final LOG_LEVEL_DEBUG:I = 0x1 + +.field public static final LOG_LEVEL_ERROR:I = 0x8 + +.field public static final LOG_LEVEL_FATAL:I = 0x10 + +.field public static final LOG_LEVEL_INFO:I = 0x2 + +.field public static final LOG_LEVEL_WARN:I = 0x4 + +.field private static MC_ANALYTICS_DIRECTORY:Ljava/lang/String; = null + +.field private static MC_DIRECTORY:Ljava/lang/String; = null + +.field private static MC_MAX_ANALYTICS_FILES:I = 0x0 + +.field private static MC_MAX_EVENTS_PER_FILE:I = 0x0 + +.field static final PREFS_CONFIG:Ljava/lang/String; = ".DMConfig" + +.field public static final PUSH_MESSAGE_INTERVAL:I = 0xf0 + +.field static final PUSH_MESSAGE_TO_SERVER:I = 0x186a1 + +.field private static SYNC_ERROR:I + +.field private static SYNC_READY:I + +.field private static SYNC_RUNNING:I + +.field private static applicationInfo:Landroid/content/pm/ApplicationInfo; + +.field private static final controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + +.field private static currentFile:Ljava/io/File; + +.field private static fileCreated:Z + +.field private static isInitialized:Z + +.field private static loggingEvent:Z + +.field static mSyncHandler:Landroid/os/Handler; + +.field private static numLinesWritten:I + +.field private static packageName:Ljava/lang/String; + +.field private static syncContents:Ljava/lang/String; + +.field private static syncStatus:I + + +# instance fields +.field private analyticsServer:Ljava/lang/String; + +.field private androidId:Ljava/lang/String; + +.field private androidVersion:Ljava/lang/String; + +.field private applicationId:Ljava/lang/String; + +.field private applicationVersion:Ljava/lang/String; + +.field private autoplay:Ljava/util/HashMap; + .annotation system Ldalvik/annotation/Signature; + value = { + "Ljava/util/HashMap", + "<", + "Ljava/lang/String;", + "Ljava/lang/Boolean;", + ">;" + } + .end annotation +.end field + +.field private configServer:Ljava/lang/String; + +.field private connectionType:Ljava/lang/String; + +.field private context:Landroid/content/Context; + +.field private deviceHardwareModel:Ljava/lang/String; + +.field private deviceId:Ljava/lang/String; + +.field private deviceModel:Ljava/lang/String; + +.field private enabled:Ljava/util/HashMap; + .annotation system Ldalvik/annotation/Signature; + value = { + "Ljava/util/HashMap", + "<", + "Ljava/lang/String;", + "Ljava/lang/Boolean;", + ">;" + } + .end annotation +.end field + +.field private haveLocationPermission:Z + +.field private haveNetworkStatePermission:Z + +.field private idleTimeout:I + +.field private isInSession:Z + +.field private isNewUser:Z + +.field private isOfflineSession:Z + +.field private isTopTask:Z + +.field private language:Ljava/lang/String; + +.field private latitude:Ljava/lang/String; + +.field private locale:Ljava/lang/String; + +.field location:Lcom/doodlemobile/gamecenter/DoodleMobileLocation; + +.field private locationCriteria:Landroid/location/Criteria; + +.field private locationHandler:Landroid/os/Handler; + +.field private logLevel:I + +.field private longitude:Ljava/lang/String; + +.field private mcc:Ljava/lang/String; + +.field private mnc:Ljava/lang/String; + +.field private pollTime:I + +.field private previousDeviceId:Ljava/lang/String; + +.field private refreshTime:Ljava/util/HashMap; + .annotation system Ldalvik/annotation/Signature; + value = { + "Ljava/util/HashMap", + "<", + "Ljava/lang/String;", + "Ljava/lang/Long;", + ">;" + } + .end annotation +.end field + +.field private remoteConfigSet:I + +.field private session:Lorg/json/JSONObject; + +.field private sessionEndTime:J + +.field private sessionPollingTimer:Ljava/util/Timer; + +.field private sessionStartTime:J + +.field private sharedPrefs:Landroid/content/SharedPreferences; + +.field private totalIdleTime:J + +.field private userAgent:Ljava/lang/String; + + +# direct methods +.method static constructor ()V + .locals 3 + + .prologue + const/4 v2, 0x0 + + const/4 v1, 0x0 + + .line 70 + const-string v0, "doodlemobile" + + sput-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_DIRECTORY:Ljava/lang/String; + + .line 72 + const-string v0, "analytics" + + sput-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_ANALYTICS_DIRECTORY:Ljava/lang/String; + + .line 74 + const/16 v0, 0x64 + + sput v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_MAX_ANALYTICS_FILES:I + + .line 76 + const/4 v0, 0x5 + + sput v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_MAX_EVENTS_PER_FILE:I + + .line 104 + sput-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->currentFile:Ljava/io/File; + + .line 106 + sput-boolean v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->fileCreated:Z + + .line 108 + sput-boolean v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->loggingEvent:Z + + .line 110 + sput v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->numLinesWritten:I + + .line 112 + sput-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->syncContents:Ljava/lang/String; + + .line 114 + sput v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->syncStatus:I + + .line 116 + sput v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->SYNC_READY:I + + .line 118 + const/4 v0, 0x1 + + sput v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->SYNC_RUNNING:I + + .line 120 + const/4 v0, -0x1 + + sput v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->SYNC_ERROR:I + + .line 184 + new-instance v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + invoke-direct {v0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->()V + + sput-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + .line 186 + sput-boolean v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInitialized:Z + + .line 188 + const-string v0, "" + + sput-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->packageName:Ljava/lang/String; + + .line 190 + sput-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationInfo:Landroid/content/pm/ApplicationInfo; + + .line 771 + new-instance v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$3; + + invoke-direct {v0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$3;->()V + + sput-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->mSyncHandler:Landroid/os/Handler; + + return-void +.end method + +.method public constructor ()V + .locals 7 + + .prologue + const/4 v5, 0x0 + + const-wide/16 v3, 0x0 + + const/4 v2, 0x0 + + const-string v6, "http://data.doodlemobile.com:8080/dmdata/ReceiveServlet" + + const-string v1, "null" + + .line 56 + invoke-direct {p0}, Ljava/lang/Object;->()V + + .line 78 + iput-object v5, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + .line 80 + new-instance v0, Lorg/json/JSONObject; + + invoke-direct {v0}, Lorg/json/JSONObject;->()V + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + .line 88 + new-instance v0, Ljava/util/HashMap; + + invoke-direct {v0}, Ljava/util/HashMap;->()V + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->enabled:Ljava/util/HashMap; + + .line 90 + new-instance v0, Ljava/util/HashMap; + + invoke-direct {v0}, Ljava/util/HashMap;->()V + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->refreshTime:Ljava/util/HashMap; + + .line 92 + new-instance v0, Ljava/util/HashMap; + + invoke-direct {v0}, Ljava/util/HashMap;->()V + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->autoplay:Ljava/util/HashMap; + + .line 94 + const-string v0, "http://data.doodlemobile.com:8080/dmdata/ReceiveServlet" + + iput-object v6, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->configServer:Ljava/lang/String; + + .line 96 + const-string v0, "http://data.doodlemobile.com:8080/dmdata/ReceiveServlet" + + iput-object v6, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->analyticsServer:Ljava/lang/String; + + .line 98 + const/16 v0, 0x7530 + + iput v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->pollTime:I + + .line 100 + const v0, 0x1d4c0 + + iput v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->idleTimeout:I + + .line 102 + iput v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->remoteConfigSet:I + + .line 122 + iput-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isOfflineSession:Z + + .line 124 + iput-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInSession:Z + + .line 126 + iput-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + + .line 128 + iput-wide v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionStartTime:J + + .line 130 + iput-wide v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionEndTime:J + + .line 132 + iput-wide v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + + .line 134 + new-instance v0, Ljava/util/Timer; + + invoke-direct {v0}, Ljava/util/Timer;->()V + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionPollingTimer:Ljava/util/Timer; + + .line 144 + iput-object v5, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->previousDeviceId:Ljava/lang/String; + + .line 150 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + .line 154 + new-instance v0, Lcom/doodlemobile/gamecenter/DoodleMobileLocation; + + invoke-direct {v0}, Lcom/doodlemobile/gamecenter/DoodleMobileLocation;->()V + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->location:Lcom/doodlemobile/gamecenter/DoodleMobileLocation; + + .line 156 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->latitude:Ljava/lang/String; + + .line 158 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->longitude:Ljava/lang/String; + + .line 160 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locale:Ljava/lang/String; + + .line 162 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->language:Ljava/lang/String; + + .line 164 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->mcc:Ljava/lang/String; + + .line 166 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->mnc:Ljava/lang/String; + + .line 168 + const-string v0, "" + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->userAgent:Ljava/lang/String; + + .line 170 + const-string v0, "null" + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationId:Ljava/lang/String; + + .line 172 + const/16 v0, 0x10 + + iput v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->logLevel:I + + .line 174 + iput-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveLocationPermission:Z + + .line 178 + iput-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveNetworkStatePermission:Z + + .line 180 + iput-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isNewUser:Z + + .line 1045 + return-void +.end method + +.method private OpenAnalyticsFile()Z + .locals 7 + + .prologue + const/4 v6, 0x1 + + const/4 v5, 0x0 + + const-string v0, "DoodleMobileAnaylise" + + const-string v0, "/" + + const-string v0, "UTF-8" + + .line 720 + sput v6, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->numLinesWritten:I + + .line 721 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + invoke-virtual {v0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->updateSession()V + + .line 724 + :try_start_0 + new-instance v0, Lorg/json/JSONObject; + + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v1, v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + const/4 v2, 0x3 + + new-array v2, v2, [Ljava/lang/String; + + const/4 v3, 0x0 + + const-string v4, "ll" + + aput-object v4, v2, v3 + + const/4 v3, 0x1 + + const-string v4, "g" + + aput-object v4, v2, v3 + + const/4 v3, 0x2 + + const-string v4, "id" + + aput-object v4, v2, v3 + + invoke-direct {v0, v1, v2}, Lorg/json/JSONObject;->(Lorg/json/JSONObject;[Ljava/lang/String;)V + + .line 726 + const-string v1, "a" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getApplicationId()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 727 + const-string v1, "p" + + const-string v2, "android" + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 728 + const-string v1, "m" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getMobclixVersion()Ljava/lang/String; + + move-result-object v2 + + invoke-static {v2}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 729 + const-string v1, "v" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getApplicationVersion()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 730 + const-string v1, "d" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getDeviceId()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 731 + const-string v1, "dm" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getDeviceModel()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 732 + const-string v1, "dv" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getAndroidVersion()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 733 + const-string v1, "hwdm" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getDeviceHardwareModel()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 735 + const-string v1, "m" + + const-string v2, "2.3" + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 736 + const-string v1, "lg" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getLanguage()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 737 + const-string v1, "lo" + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getLocale()Ljava/lang/String; + + move-result-object v2 + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 738 + const-string v1, "pn" + + sget-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->packageName:Ljava/lang/String; + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 740 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v1, v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + sget-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_DIRECTORY:Ljava/lang/String; + + const/4 v3, 0x0 + + invoke-virtual {v1, v2, v3}, Landroid/content/Context;->getDir(Ljava/lang/String;I)Ljava/io/File; + + move-result-object v1 + + .line 741 + new-instance v2, Ljava/io/File; + + new-instance v3, Ljava/lang/StringBuilder; + + invoke-direct {v3}, Ljava/lang/StringBuilder;->()V + + invoke-virtual {v1}, Ljava/io/File;->getAbsolutePath()Ljava/lang/String; + + move-result-object v1 + + invoke-virtual {v3, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + const-string v3, "/" + + invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + sget-object v3, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_ANALYTICS_DIRECTORY:Ljava/lang/String; + + invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v1 + + invoke-direct {v2, v1}, Ljava/io/File;->(Ljava/lang/String;)V + + .line 743 + invoke-virtual {v2}, Ljava/io/File;->mkdir()Z + + .line 744 + const-string v1, "DoodleMobileAnaylise" + + const-string v3, "mkdir" + + invoke-static {v1, v3}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + .line 745 + invoke-virtual {v2}, Ljava/io/File;->listFiles()[Ljava/io/File; + + move-result-object v1 + + array-length v1, v1 + + sget v3, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_MAX_ANALYTICS_FILES:I + + if-lt v1, v3, :cond_0 + + .line 746 + const-string v0, "DoodleMobileAnaylise" + + new-instance v1, Ljava/lang/StringBuilder; + + invoke-direct {v1}, Ljava/lang/StringBuilder;->()V + + invoke-virtual {v2}, Ljava/io/File;->listFiles()[Ljava/io/File; + + move-result-object v2 + + array-length v2, v2 + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; + + move-result-object v1 + + const-string v2, " " + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + sget v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_MAX_ANALYTICS_FILES:I + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v1 + + invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + move v0, v5 + + .line 768 + :goto_0 + return v0 + + .line 751 + :cond_0 + new-instance v1, Ljava/io/File; + + new-instance v3, Ljava/lang/StringBuilder; + + invoke-direct {v3}, Ljava/lang/StringBuilder;->()V + + invoke-virtual {v2}, Ljava/io/File;->getAbsoluteFile()Ljava/io/File; + + move-result-object v2 + + invoke-virtual {v3, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; + + move-result-object v2 + + const-string v3, "/" + + invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v2 + + invoke-static {}, Ljava/lang/System;->currentTimeMillis()J + + move-result-wide v3 + + invoke-virtual {v2, v3, v4}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; + + move-result-object v2 + + const-string v3, ".log" + + invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v2 + + invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v2 + + invoke-direct {v1, v2}, Ljava/io/File;->(Ljava/lang/String;)V + + sput-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->currentFile:Ljava/io/File; + + .line 754 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->currentFile:Ljava/io/File; + + invoke-virtual {v1}, Ljava/io/File;->createNewFile()Z + + .line 756 + new-instance v1, Ljava/io/FileOutputStream; + + sget-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->currentFile:Ljava/io/File; + + invoke-direct {v1, v2}, Ljava/io/FileOutputStream;->(Ljava/io/File;)V + + .line 758 + const-string v2, "[{\"hb\":" + + invoke-virtual {v2}, Ljava/lang/String;->getBytes()[B + + move-result-object v2 + + invoke-virtual {v1, v2}, Ljava/io/FileOutputStream;->write([B)V + + .line 759 + invoke-virtual {v0}, Lorg/json/JSONObject;->toString()Ljava/lang/String; + + move-result-object v0 + + invoke-virtual {v0}, Ljava/lang/String;->getBytes()[B + + move-result-object v0 + + invoke-virtual {v1, v0}, Ljava/io/FileOutputStream;->write([B)V + + .line 760 + const-string v0, ",\"ev\":[" + + invoke-virtual {v0}, Ljava/lang/String;->getBytes()[B + + move-result-object v0 + + invoke-virtual {v1, v0}, Ljava/io/FileOutputStream;->write([B)V + + .line 761 + invoke-virtual {v1}, Ljava/io/FileOutputStream;->close()V + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 767 + sput-boolean v6, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->fileCreated:Z + + move v0, v6 + + .line 768 + goto :goto_0 + + .line 763 + :catch_0 + move-exception v0 + + .line 764 + invoke-virtual {v0}, Ljava/lang/Exception;->printStackTrace()V + + move v0, v5 + + .line 765 + goto :goto_0 +.end method + +.method static synthetic access$002(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Ljava/lang/String;)Ljava/lang/String; + .locals 0 + + .prologue + .line 56 + iput-object p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->latitude:Ljava/lang/String; + + return-object p1 +.end method + +.method static synthetic access$1000()Ljava/io/File; + .locals 1 + + .prologue + .line 56 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->currentFile:Ljava/io/File; + + return-object v0 +.end method + +.method static synthetic access$102(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Ljava/lang/String;)Ljava/lang/String; + .locals 0 + + .prologue + .line 56 + iput-object p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->longitude:Ljava/lang/String; + + return-object p1 +.end method + +.method static synthetic access$1100()I + .locals 1 + + .prologue + .line 56 + sget v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->numLinesWritten:I + + return v0 +.end method + +.method static synthetic access$1102(I)I + .locals 0 + + .prologue + .line 56 + sput p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->numLinesWritten:I + + return p0 +.end method + +.method static synthetic access$1112(I)I + .locals 1 + + .prologue + .line 56 + sget v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->numLinesWritten:I + + add-int/2addr v0, p0 + + sput v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->numLinesWritten:I + + return v0 +.end method + +.method static synthetic access$1200()I + .locals 1 + + .prologue + .line 56 + sget v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_MAX_EVENTS_PER_FILE:I + + return v0 +.end method + +.method static synthetic access$1400(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)Landroid/content/Context; + .locals 1 + + .prologue + .line 56 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + return-object v0 +.end method + +.method static synthetic access$1500(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)Ljava/lang/String; + .locals 1 + + .prologue + .line 56 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationVersion:Ljava/lang/String; + + return-object v0 +.end method + +.method static synthetic access$1502(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Ljava/lang/String;)Ljava/lang/String; + .locals 0 + + .prologue + .line 56 + iput-object p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationVersion:Ljava/lang/String; + + return-object p1 +.end method + +.method static synthetic access$1600(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)Landroid/location/Criteria; + .locals 1 + + .prologue + .line 56 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locationCriteria:Landroid/location/Criteria; + + return-object v0 +.end method + +.method static synthetic access$1602(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Landroid/location/Criteria;)Landroid/location/Criteria; + .locals 0 + + .prologue + .line 56 + iput-object p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locationCriteria:Landroid/location/Criteria; + + return-object p1 +.end method + +.method static synthetic access$1702(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Z)Z + .locals 0 + + .prologue + .line 56 + iput-boolean p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveLocationPermission:Z + + return p1 +.end method + +.method static synthetic access$1802(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Z)Z + .locals 0 + + .prologue + .line 56 + iput-boolean p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveNetworkStatePermission:Z + + return p1 +.end method + +.method static synthetic access$1900(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Z)V + .locals 0 + + .prologue + .line 56 + invoke-direct {p0, p1}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->handleSessionStatus(Z)V + + return-void +.end method + +.method static synthetic access$200(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)V + .locals 0 + + .prologue + .line 56 + invoke-direct {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->updateLocation()V + + return-void +.end method + +.method static synthetic access$2000()I + .locals 1 + + .prologue + .line 56 + sget v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->SYNC_RUNNING:I + + return v0 +.end method + +.method static synthetic access$2100()Ljava/lang/String; + .locals 1 + + .prologue + .line 56 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_DIRECTORY:Ljava/lang/String; + + return-object v0 +.end method + +.method static synthetic access$2200()Ljava/lang/String; + .locals 1 + + .prologue + .line 56 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->MC_ANALYTICS_DIRECTORY:Ljava/lang/String; + + return-object v0 +.end method + +.method static synthetic access$2300()Ljava/lang/String; + .locals 1 + + .prologue + .line 56 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->syncContents:Ljava/lang/String; + + return-object v0 +.end method + +.method static synthetic access$2302(Ljava/lang/String;)Ljava/lang/String; + .locals 0 + + .prologue + .line 56 + sput-object p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->syncContents:Ljava/lang/String; + + return-object p0 +.end method + +.method static synthetic access$2400(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)Ljava/lang/String; + .locals 1 + + .prologue + .line 56 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->analyticsServer:Ljava/lang/String; + + return-object v0 +.end method + +.method static synthetic access$2500()I + .locals 1 + + .prologue + .line 56 + sget v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->SYNC_ERROR:I + + return v0 +.end method + +.method static synthetic access$400()Z + .locals 1 + + .prologue + .line 56 + sget-boolean v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->loggingEvent:Z + + return v0 +.end method + +.method static synthetic access$402(Z)Z + .locals 0 + + .prologue + .line 56 + sput-boolean p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->loggingEvent:Z + + return p0 +.end method + +.method static synthetic access$500()I + .locals 1 + + .prologue + .line 56 + sget v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->syncStatus:I + + return v0 +.end method + +.method static synthetic access$502(I)I + .locals 0 + + .prologue + .line 56 + sput p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->syncStatus:I + + return p0 +.end method + +.method static synthetic access$600()I + .locals 1 + + .prologue + .line 56 + sget v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->SYNC_READY:I + + return v0 +.end method + +.method static synthetic access$700()Z + .locals 1 + + .prologue + .line 56 + sget-boolean v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->fileCreated:Z + + return v0 +.end method + +.method static synthetic access$702(Z)Z + .locals 0 + + .prologue + .line 56 + sput-boolean p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->fileCreated:Z + + return p0 +.end method + +.method static synthetic access$800(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)Z + .locals 1 + + .prologue + .line 56 + invoke-direct {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->OpenAnalyticsFile()Z + + move-result v0 + + return v0 +.end method + +.method static synthetic access$900()Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + .locals 1 + + .prologue + .line 56 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + return-object v0 +.end method + +.method static addPref(Ljava/lang/String;Ljava/lang/String;)V + .locals 1 + + .prologue + .line 333 + :try_start_0 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor; + + move-result-object v0 + + .line 334 + invoke-interface {v0, p0, p1}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor; + + .line 335 + invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->commit()Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 338 + :goto_0 + return-void + + .line 336 + :catch_0 + move-exception v0 + + goto :goto_0 +.end method + +.method static addPref(Ljava/util/Map;)V + .locals 3 + .annotation system Ldalvik/annotation/Signature; + value = { + "(", + "Ljava/util/Map", + "<", + "Ljava/lang/String;", + "Ljava/lang/String;", + ">;)V" + } + .end annotation + + .prologue + .line 342 + :try_start_0 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor; + + move-result-object v1 + + .line 343 + invoke-interface {p0}, Ljava/util/Map;->entrySet()Ljava/util/Set; + + move-result-object v0 + + invoke-interface {v0}, Ljava/util/Set;->iterator()Ljava/util/Iterator; + + move-result-object v2 + + .line 344 + :goto_0 + invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z + + move-result v0 + + if-eqz v0, :cond_0 + + .line 345 + invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object; + + move-result-object p0 + + check-cast p0, Ljava/util/Map$Entry; + + .line 346 + invoke-interface {p0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object; + + move-result-object v0 + + check-cast v0, Ljava/lang/String; + + invoke-interface {p0}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object; + + move-result-object p0 + + check-cast p0, Ljava/lang/String; + + invoke-interface {v1, v0, p0}, Landroid/content/SharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor; + + goto :goto_0 + + .line 349 + :catch_0 + move-exception v0 + + .line 351 + :goto_1 + return-void + + .line 348 + :cond_0 + invoke-interface {v1}, Landroid/content/SharedPreferences$Editor;->commit()Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + goto :goto_1 +.end method + +.method static clearPref()V + .locals 1 + + .prologue + .line 364 + :try_start_0 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor; + + move-result-object v0 + + .line 365 + invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->clear()Landroid/content/SharedPreferences$Editor; + + .line 366 + invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->commit()Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 369 + :goto_0 + return-void + + .line 367 + :catch_0 + move-exception v0 + + goto :goto_0 +.end method + +.method private createNewSession()V + .locals 7 + + .prologue + const-wide/16 v5, 0x0 + + const/4 v4, 0x1 + + .line 804 + invoke-static {}, Ljava/lang/System;->currentTimeMillis()J + + move-result-wide v0 + + .line 805 + new-instance v2, Ljava/lang/StringBuilder; + + invoke-direct {v2}, Ljava/lang/StringBuilder;->()V + + iget-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceId:Ljava/lang/String; + + invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v2 + + invoke-virtual {v2, v0, v1}, Ljava/lang/StringBuilder;->append(J)Ljava/lang/StringBuilder; + + move-result-object v2 + + invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v2 + + invoke-static {v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sha1(Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + .line 807 + iput-boolean v4, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + + .line 808 + iput-wide v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionStartTime:J + + .line 809 + iput-wide v5, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionEndTime:J + + .line 810 + iput-wide v5, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + + .line 811 + iput-boolean v4, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInSession:Z + + .line 813 + :try_start_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + const-string v1, "id" + + const-string v3, "UTF-8" + + invoke-static {v2, v3}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 817 + :goto_0 + const/4 v0, 0x0 + + iput v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->remoteConfigSet:I + + .line 818 + new-instance v0, Ljava/lang/Thread; + + new-instance v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$FetchRemoteConfig; + + const/4 v2, 0x0 + + invoke-direct {v1, p0, v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$FetchRemoteConfig;->(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$1;)V + + invoke-direct {v0, v1}, Ljava/lang/Thread;->(Ljava/lang/Runnable;)V + + .line 819 + invoke-virtual {v0}, Ljava/lang/Thread;->start()V + + .line 820 + return-void + + .line 814 + :catch_0 + move-exception v0 + + .line 815 + const-string v0, "DoodleMobileAnaylise" + + const-string v1, "static sync 2" + + invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + goto :goto_0 +.end method + +.method private endSession()V + .locals 6 + + .prologue + const-string v0, "totalSessionTime" + + const-string v0, "totalIdleTime" + + const-string v0, "offlineSessions" + + .line 852 + :try_start_0 + iget-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInSession:Z + + if-nez v0, :cond_0 + + .line 893 + :goto_0 + return-void + + .line 854 + :cond_0 + iget-wide v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionEndTime:J + + iget-wide v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionStartTime:J + + sub-long/2addr v0, v2 + + .line 856 + const-string v2, "totalSessionTime" + + invoke-static {v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->hasPref(Ljava/lang/String;)Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + move-result v2 + + if-eqz v2, :cond_1 + + .line 858 + :try_start_1 + const-string v2, "totalSessionTime" + + invoke-static {v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getPref(Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-static {v2}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J + :try_end_1 + .catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_3 + + move-result-wide v2 + + add-long/2addr v0, v2 + + .line 861 + :cond_1 + :goto_1 + :try_start_2 + const-string v2, "totalIdleTime" + + invoke-static {v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->hasPref(Ljava/lang/String;)Z + :try_end_2 + .catch Ljava/lang/Exception; {:try_start_2 .. :try_end_2} :catch_0 + + move-result v2 + + if-eqz v2, :cond_2 + + .line 863 + :try_start_3 + iget-wide v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + + const-string v4, "totalIdleTime" + + invoke-static {v4}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getPref(Ljava/lang/String;)Ljava/lang/String; + + move-result-object v4 + + invoke-static {v4}, Ljava/lang/Long;->parseLong(Ljava/lang/String;)J + + move-result-wide v4 + + add-long/2addr v2, v4 + + iput-wide v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + :try_end_3 + .catch Ljava/lang/Exception; {:try_start_3 .. :try_end_3} :catch_2 + + .line 867 + :cond_2 + :goto_2 + :try_start_4 + new-instance v2, Ljava/util/HashMap; + + invoke-direct {v2}, Ljava/util/HashMap;->()V + + .line 868 + const-string v3, "totalSessionTime" + + invoke-static {v0, v1}, Ljava/lang/Long;->toString(J)Ljava/lang/String; + + move-result-object v0 + + invoke-virtual {v2, v3, v0}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 869 + const-string v0, "totalIdleTime" + + iget-wide v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + + invoke-static {v3, v4}, Ljava/lang/Long;->toString(J)Ljava/lang/String; + + move-result-object v1 + + invoke-virtual {v2, v0, v1}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 872 + iget-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isOfflineSession:Z + + if-eqz v0, :cond_4 + + .line 873 + const/4 v0, 0x1 + + .line 874 + const-string v1, "offlineSessions" + + invoke-static {v1}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->hasPref(Ljava/lang/String;)Z + :try_end_4 + .catch Ljava/lang/Exception; {:try_start_4 .. :try_end_4} :catch_0 + + move-result v1 + + if-eqz v1, :cond_3 + + .line 876 + :try_start_5 + const-string v1, "offlineSessions" + + invoke-static {v1}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getPref(Ljava/lang/String;)Ljava/lang/String; + + move-result-object v1 + + invoke-static {v1}, Ljava/lang/Integer;->parseInt(Ljava/lang/String;)I + :try_end_5 + .catch Ljava/lang/Exception; {:try_start_5 .. :try_end_5} :catch_1 + + move-result v1 + + add-int/2addr v0, v1 + + .line 880 + :cond_3 + :goto_3 + :try_start_6 + const-string v1, "offlineSessions" + + int-to-long v3, v0 + + invoke-static {v3, v4}, Ljava/lang/Long;->toString(J)Ljava/lang/String; + + move-result-object v0 + + invoke-virtual {v2, v1, v0}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 884 + :cond_4 + invoke-static {v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->addPref(Ljava/util/Map;)V + + .line 886 + const/4 v0, 0x0 + + iput-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInSession:Z + + .line 887 + const/4 v0, 0x0 + + iput-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + + .line 888 + const-wide/16 v0, 0x0 + + iput-wide v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionStartTime:J + + .line 889 + const-wide/16 v0, 0x0 + + iput-wide v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionEndTime:J + + .line 890 + const-wide/16 v0, 0x0 + + iput-wide v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + :try_end_6 + .catch Ljava/lang/Exception; {:try_start_6 .. :try_end_6} :catch_0 + + goto :goto_0 + + .line 891 + :catch_0 + move-exception v0 + + goto/16 :goto_0 + + .line 878 + :catch_1 + move-exception v1 + + goto :goto_3 + + .line 865 + :catch_2 + move-exception v2 + + goto :goto_2 + + .line 859 + :catch_3 + move-exception v2 + + goto :goto_1 +.end method + +.method static getAllPref()Ljava/util/HashMap; + .locals 1 + .annotation system Ldalvik/annotation/Signature; + value = { + "()", + "Ljava/util/HashMap", + "<", + "Ljava/lang/String;", + "Ljava/lang/String;", + ">;" + } + .end annotation + + .prologue + .line 309 + :try_start_0 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + invoke-interface {v0}, Landroid/content/SharedPreferences;->getAll()Ljava/util/Map; + + move-result-object v0 + + check-cast v0, Ljava/util/HashMap; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 312 + :goto_0 + return-object v0 + + .line 310 + :catch_0 + move-exception v0 + + .line 312 + new-instance v0, Ljava/util/HashMap; + + invoke-direct {v0}, Ljava/util/HashMap;->()V + + goto :goto_0 +.end method + +.method static getCookieStringFromCookieManager(Ljava/lang/String;)Ljava/lang/String; + .locals 1 + + .prologue + .line 901 + :try_start_0 + invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; + + move-result-object v0 + + .line 902 + invoke-virtual {v0, p0}, Landroid/webkit/CookieManager;->getCookie(Ljava/lang/String;)Ljava/lang/String; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + move-result-object v0 + + .line 905 + :goto_0 + return-object v0 + + .line 903 + :catch_0 + move-exception v0 + + .line 905 + const-string v0, "" + + goto :goto_0 +.end method + +.method public static getInstance()Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + .locals 1 + + .prologue + .line 515 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + return-object v0 +.end method + +.method static getPref(Ljava/lang/String;)Ljava/lang/String; + .locals 3 + + .prologue + const-string v2, "" + + .line 317 + :try_start_0 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + const-string v1, "" + + invoke-interface {v0, p0, v1}, Landroid/content/SharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + move-result-object v0 + + .line 320 + :goto_0 + return-object v0 + + .line 318 + :catch_0 + move-exception v0 + + .line 320 + const-string v0, "" + + move-object v0, v2 + + goto :goto_0 +.end method + +.method private declared-synchronized handleSessionStatus(Z)V + .locals 6 + + .prologue + .line 824 + monitor-enter p0 + + :try_start_0 + invoke-static {}, Ljava/lang/System;->currentTimeMillis()J + + move-result-wide v0 + + .line 825 + if-eqz p1, :cond_3 + + .line 826 + iget-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + .catchall {:try_start_0 .. :try_end_0} :catchall_0 + + if-eqz v2, :cond_1 + + .line 848 + :cond_0 + :goto_0 + monitor-exit p0 + + return-void + + .line 829 + :cond_1 + :try_start_1 + iget-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInSession:Z + + if-nez v2, :cond_2 + + .line 830 + invoke-direct {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->createNewSession()V + :try_end_1 + .catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_0 + .catchall {:try_start_1 .. :try_end_1} :catchall_0 + + goto :goto_0 + + .line 845 + :catch_0 + move-exception v0 + + .line 846 + :try_start_2 + const-string v0, "DoodleMobileAnaylise" + + const-string v1, "static sync 3" + + invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + :try_end_2 + .catchall {:try_start_2 .. :try_end_2} :catchall_0 + + goto :goto_0 + + .line 824 + :catchall_0 + move-exception v0 + + monitor-exit p0 + + throw v0 + + .line 832 + :cond_2 + :try_start_3 + iget-wide v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + + iget-wide v4, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionEndTime:J + + sub-long/2addr v0, v4 + + add-long/2addr v0, v2 + + iput-wide v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->totalIdleTime:J + + .line 833 + const/4 v0, 0x1 + + iput-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + + goto :goto_0 + + .line 836 + :cond_3 + iget-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + + if-nez v2, :cond_4 + + .line 837 + iget-wide v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionEndTime:J + + sub-long/2addr v0, v2 + + iget v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->idleTimeout:I + + int-to-long v2, v2 + + cmp-long v0, v0, v2 + + if-lez v0, :cond_0 + + iget-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInSession:Z + + if-eqz v0, :cond_0 + + .line 839 + invoke-direct {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->endSession()V + + goto :goto_0 + + .line 841 + :cond_4 + iput-wide v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionEndTime:J + + .line 842 + const/4 v0, 0x0 + + iput-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + + .line 843 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->location:Lcom/doodlemobile/gamecenter/DoodleMobileLocation; + + invoke-virtual {v0}, Lcom/doodlemobile/gamecenter/DoodleMobileLocation;->stopLocation()V + :try_end_3 + .catch Ljava/lang/Exception; {:try_start_3 .. :try_end_3} :catch_0 + .catchall {:try_start_3 .. :try_end_3} :catchall_0 + + goto :goto_0 +.end method + +.method static hasPref(Ljava/lang/String;)Z + .locals 1 + + .prologue + .line 325 + :try_start_0 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + invoke-interface {v0, p0}, Landroid/content/SharedPreferences;->contains(Ljava/lang/String;)Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + move-result v0 + + .line 328 + :goto_0 + return v0 + + .line 326 + :catch_0 + move-exception v0 + + .line 328 + const/4 v0, 0x0 + + goto :goto_0 +.end method + +.method private initialize(Landroid/app/Activity;Ljava/lang/String;I)V + .locals 7 + + .prologue + const/4 v6, 0x0 + + const/4 v5, 0x0 + + const-string v4, "" + + const-string v3, "null" + + .line 455 + iput-object p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + .line 456 + iput-object p2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationId:Ljava/lang/String; + + .line 457 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationId:Ljava/lang/String; + + if-eqz v0, :cond_0 + + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationId:Ljava/lang/String; + + const-string v1, "" + + invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_1 + + .line 458 + :cond_0 + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationId:Ljava/lang/String; + + .line 459 + :cond_1 + sget-object v0, Landroid/os/Build$VERSION;->RELEASE:Ljava/lang/String; + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidVersion:Ljava/lang/String; + + .line 460 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidVersion:Ljava/lang/String; + + if-eqz v0, :cond_2 + + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidVersion:Ljava/lang/String; + + const-string v1, "" + + invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_3 + + .line 461 + :cond_2 + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidVersion:Ljava/lang/String; + + .line 465 + :cond_3 + :try_start_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + const-string v1, "phone" + + invoke-virtual {v0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; + + move-result-object v0 + + check-cast v0, Landroid/telephony/TelephonyManager; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 469 + :goto_0 + invoke-virtual {p1}, Landroid/app/Activity;->getContentResolver()Landroid/content/ContentResolver; + + move-result-object v1 + + const-string v2, "android_id" + + invoke-static {v1, v2}, Landroid/provider/Settings$System;->getString(Landroid/content/ContentResolver;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v1 + + iput-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidId:Ljava/lang/String; + + .line 471 + iget-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidId:Ljava/lang/String; + + if-eqz v1, :cond_4 + + iget-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidId:Ljava/lang/String; + + const-string v2, "" + + invoke-virtual {v1, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v1 + + if-eqz v1, :cond_5 + + .line 472 + :cond_4 + const-string v1, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidId:Ljava/lang/String; + + .line 474 + :cond_5 + invoke-virtual {v0}, Landroid/telephony/TelephonyManager;->getDeviceId()Ljava/lang/String; + + move-result-object v0 + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceId:Ljava/lang/String; + + .line 475 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceId:Ljava/lang/String; + + if-eqz v0, :cond_6 + + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceId:Ljava/lang/String; + + const-string v1, "" + + invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_7 + + .line 476 + :cond_6 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidId:Ljava/lang/String; + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceId:Ljava/lang/String; + + .line 478 + :cond_7 + sget-object v0, Landroid/os/Build;->MODEL:Ljava/lang/String; + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceModel:Ljava/lang/String; + + .line 479 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceModel:Ljava/lang/String; + + if-eqz v0, :cond_8 + + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceModel:Ljava/lang/String; + + const-string v1, "" + + invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_9 + + .line 480 + :cond_8 + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceModel:Ljava/lang/String; + + .line 482 + :cond_9 + sget-object v0, Landroid/os/Build;->DEVICE:Ljava/lang/String; + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceHardwareModel:Ljava/lang/String; + + .line 483 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceHardwareModel:Ljava/lang/String; + + if-eqz v0, :cond_a + + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceHardwareModel:Ljava/lang/String; + + const-string v1, "" + + invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_b + + .line 485 + :cond_a + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceHardwareModel:Ljava/lang/String; + + .line 488 + :cond_b + iput p3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->logLevel:I + + .line 490 + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationVersion:Ljava/lang/String; + + .line 491 + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->longitude:Ljava/lang/String; + + .line 492 + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->latitude:Ljava/lang/String; + + .line 493 + iput-boolean v5, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveLocationPermission:Z + + .line 494 + iput-object v6, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locationCriteria:Landroid/location/Criteria; + + .line 495 + iput-boolean v5, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveNetworkStatePermission:Z + + .line 496 + invoke-static {}, Ljava/util/Locale;->getDefault()Ljava/util/Locale; + + move-result-object v0 + + invoke-virtual {v0}, Ljava/util/Locale;->getCountry()Ljava/lang/String; + + move-result-object v0 + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locale:Ljava/lang/String; + + .line 497 + invoke-static {}, Ljava/util/Locale;->getDefault()Ljava/util/Locale; + + move-result-object v0 + + invoke-virtual {v0}, Ljava/util/Locale;->getLanguage()Ljava/lang/String; + + move-result-object v0 + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->language:Ljava/lang/String; + + .line 499 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + invoke-static {v0}, Landroid/webkit/CookieSyncManager;->createInstance(Landroid/content/Context;)Landroid/webkit/CookieSyncManager; + + .line 501 + new-instance v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$2; + + invoke-direct {v0, p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$2;->(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)V + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locationHandler:Landroid/os/Handler; + + .line 506 + new-instance v0, Ljava/lang/StringBuilder; + + invoke-direct {v0}, Ljava/lang/StringBuilder;->()V + + invoke-virtual {p1}, Landroid/app/Activity;->getPackageName()Ljava/lang/String; + + move-result-object v1 + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + const-string v1, ".MCConfig" + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v0 + + invoke-virtual {p1, v0, v5}, Landroid/app/Activity;->getSharedPreferences(Ljava/lang/String;I)Landroid/content/SharedPreferences; + + move-result-object v0 + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + .line 509 + iget v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->pollTime:I + + iget v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->idleTimeout:I + + invoke-static {v0, v1}, Ljava/lang/Math;->min(II)I + + move-result v0 + + iput v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->pollTime:I + + .line 510 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sessionPollingTimer:Ljava/util/Timer; + + new-instance v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$SessionPolling; + + invoke-direct {v1, p0, v6}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$SessionPolling;->(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$1;)V + + const-wide/16 v2, 0x0 + + iget v4, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->pollTime:I + + int-to-long v4, v4 + + invoke-virtual/range {v0 .. v5}, Ljava/util/Timer;->scheduleAtFixedRate(Ljava/util/TimerTask;JJ)V + + .line 512 + return-void + + .line 467 + :catch_0 + move-exception v0 + + move-object v0, v6 + + goto/16 :goto_0 +.end method + +.method public static final logEvent(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V + .locals 5 + + .prologue + const-string v0, "UTF-8" + + const-string v2, "DoodleMobile" + + .line 672 + sget-boolean v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInitialized:Z + + if-nez v0, :cond_1 + + .line 673 + const-string v0, "mobclix-controller" + + const-string v1, "logEvent failed - You must initialize DoodleMobileAnaylise by calling DoodleMobileAnaylise.onCreate(this)." + + invoke-static {v0, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I + + .line 717 + :cond_0 + :goto_0 + return-void + + .line 678 + :cond_1 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->logLevel:I + + if-lt p0, v0, :cond_0 + + .line 682 + new-instance v0, Ljava/lang/StringBuilder; + + invoke-direct {v0}, Ljava/lang/StringBuilder;->()V + + invoke-virtual {v0, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + const-string v1, ", " + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + invoke-virtual {v0, p2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + const-string v1, ": " + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + invoke-virtual {v0, p3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v0 + + .line 684 + sparse-switch p0, :sswitch_data_0 + + .line 702 + :goto_1 + :try_start_0 + new-instance v0, Lorg/json/JSONObject; + + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v1, v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + const/4 v2, 0x4 + + new-array v2, v2, [Ljava/lang/String; + + const/4 v3, 0x0 + + const-string v4, "ts" + + aput-object v4, v2, v3 + + const/4 v3, 0x1 + + const-string v4, "ll" + + aput-object v4, v2, v3 + + const/4 v3, 0x2 + + const-string v4, "g" + + aput-object v4, v2, v3 + + const/4 v3, 0x3 + + const-string v4, "id" + + aput-object v4, v2, v3 + + invoke-direct {v0, v1, v2}, Lorg/json/JSONObject;->(Lorg/json/JSONObject;[Ljava/lang/String;)V + + .line 704 + const-string v1, "el" + + invoke-static {p0}, Ljava/lang/Integer;->toString(I)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 705 + const-string v1, "ep" + + const-string v2, "UTF-8" + + invoke-static {p1, v2}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 706 + const-string v1, "en" + + const-string v2, "UTF-8" + + invoke-static {p2, v2}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 707 + const-string v1, "ed" + + const-string v2, "UTF-8" + + invoke-static {p3, v2}, Ljava/net/URLEncoder;->encode(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 708 + const-string v1, "et" + + invoke-static {}, Ljava/lang/Thread;->currentThread()Ljava/lang/Thread; + + move-result-object v2 + + invoke-virtual {v2}, Ljava/lang/Thread;->getId()J + + move-result-wide v2 + + invoke-static {v2, v3}, Ljava/lang/Long;->toString(J)Ljava/lang/String; + + move-result-object v2 + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 709 + const-string v1, "es" + + if-eqz p4, :cond_2 + + const-string v2, "1" + + :goto_2 + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 710 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + .line 711 + invoke-virtual {v1}, Ljava/lang/Object;->getClass()Ljava/lang/Class; + + .line 712 + new-instance v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$LogEvent; + + invoke-virtual {v1}, Ljava/lang/Object;->getClass()Ljava/lang/Class; + + invoke-direct {v2, v1, v0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$LogEvent;->(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;Lorg/json/JSONObject;)V + + .line 713 + new-instance v0, Ljava/lang/Thread; + + invoke-direct {v0, v2}, Ljava/lang/Thread;->(Ljava/lang/Runnable;)V + + .line 714 + invoke-virtual {v0}, Ljava/lang/Thread;->start()V + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + goto/16 :goto_0 + + .line 715 + :catch_0 + move-exception v0 + + goto/16 :goto_0 + + .line 686 + :sswitch_0 + const-string v1, "DoodleMobile" + + invoke-static {v2, v0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I + + goto/16 :goto_1 + + .line 689 + :sswitch_1 + const-string v1, "DoodleMobile" + + invoke-static {v2, v0}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I + + goto/16 :goto_1 + + .line 692 + :sswitch_2 + const-string v1, "DoodleMobile" + + invoke-static {v2, v0}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + goto/16 :goto_1 + + .line 695 + :sswitch_3 + const-string v1, "DoodleMobile" + + invoke-static {v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I + + goto/16 :goto_1 + + .line 698 + :sswitch_4 + const-string v1, "DoodleMobile" + + invoke-static {v2, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I + + goto/16 :goto_1 + + .line 709 + :cond_2 + :try_start_1 + const-string v2, "0" + :try_end_1 + .catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_0 + + goto :goto_2 + + .line 684 + :sswitch_data_0 + .sparse-switch + 0x1 -> :sswitch_0 + 0x2 -> :sswitch_1 + 0x4 -> :sswitch_2 + 0x8 -> :sswitch_3 + 0x10 -> :sswitch_4 + .end sparse-switch +.end method + +.method public static final declared-synchronized onCreate(Landroid/app/Activity;)V + .locals 7 + + .prologue + const/4 v5, 0x0 + + const-string v0, "ssc" + + const-string v0, "DoodleMobileAnaylise" + + const-string v0, "doodle_mobile_appid" + + .line 520 + const-class v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + monitor-enter v0 + + if-eqz p0, :cond_0 + + .line 521 + :try_start_0 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + invoke-virtual {p0}, Landroid/app/Activity;->getApplicationContext()Landroid/content/Context; + + move-result-object v2 + + iput-object v2, v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_8 + .catchall {:try_start_0 .. :try_end_0} :catchall_0 + + .line 525 + :cond_0 + :goto_0 + :try_start_1 + sget-boolean v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInitialized:Z + :try_end_1 + .catchall {:try_start_1 .. :try_end_1} :catchall_0 + + if-nez v1, :cond_4 + + .line 528 + :try_start_2 + invoke-virtual {p0}, Landroid/app/Activity;->getPackageName()Ljava/lang/String; + + move-result-object v1 + + sput-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->packageName:Ljava/lang/String; + :try_end_2 + .catch Ljava/lang/Exception; {:try_start_2 .. :try_end_2} :catch_7 + .catchall {:try_start_2 .. :try_end_2} :catchall_0 + + .line 531 + :goto_1 + const/4 v1, 0x0 + + :try_start_3 + sput-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationInfo:Landroid/content/pm/ApplicationInfo; + :try_end_3 + .catchall {:try_start_3 .. :try_end_3} :catchall_0 + + .line 533 + :try_start_4 + invoke-virtual {p0}, Landroid/app/Activity;->getPackageManager()Landroid/content/pm/PackageManager; + + move-result-object v1 + + sget-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->packageName:Ljava/lang/String; + + const/16 v3, 0x80 + + invoke-virtual {v1, v2, v3}, Landroid/content/pm/PackageManager;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo; + + move-result-object v1 + + sput-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationInfo:Landroid/content/pm/ApplicationInfo; + :try_end_4 + .catch Landroid/content/pm/PackageManager$NameNotFoundException; {:try_start_4 .. :try_end_4} :catch_0 + .catchall {:try_start_4 .. :try_end_4} :catchall_0 + + .line 541 + :goto_2 + :try_start_5 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationInfo:Landroid/content/pm/ApplicationInfo; + + iget-object v1, v1, Landroid/content/pm/ApplicationInfo;->metaData:Landroid/os/Bundle; + + const-string v2, "doodle_mobile_appid" + + invoke-virtual {v1, v2}, Landroid/os/Bundle;->getString(Ljava/lang/String;)Ljava/lang/String; + :try_end_5 + .catch Ljava/lang/Exception; {:try_start_5 .. :try_end_5} :catch_1 + .catchall {:try_start_5 .. :try_end_5} :catchall_0 + + move-result-object v1 + + .line 543 + :try_start_6 + const-string v2, "ssc" + + new-instance v3, Ljava/lang/StringBuilder; + + invoke-direct {v3}, Ljava/lang/StringBuilder;->()V + + const-string v4, "applicationID 1 is " + + invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v3 + + invoke-virtual {v3, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v3 + + invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v3 + + invoke-static {v2, v3}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I + :try_end_6 + .catch Ljava/lang/Exception; {:try_start_6 .. :try_end_6} :catch_6 + .catchall {:try_start_6 .. :try_end_6} :catchall_0 + + .line 554 + :goto_3 + if-nez v1, :cond_1 + + .line 556 + :try_start_7 + sget-object v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationInfo:Landroid/content/pm/ApplicationInfo; + + iget-object v2, v2, Landroid/content/pm/ApplicationInfo;->metaData:Landroid/os/Bundle; + + const-string v3, "doodle_mobile_appid" + + invoke-virtual {v2, v3}, Landroid/os/Bundle;->getInt(Ljava/lang/String;)I + + move-result v2 + + invoke-static {v2}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; + :try_end_7 + .catch Ljava/lang/Exception; {:try_start_7 .. :try_end_7} :catch_3 + .catchall {:try_start_7 .. :try_end_7} :catchall_0 + + move-result-object v1 + + .line 562 + :cond_1 + :goto_4 + if-nez v1, :cond_2 + + .line 565 + :try_start_8 + new-instance v1, Landroid/content/res/Resources$NotFoundException; + + const-string v2, "doodle_mobile_appid not found in the Android Manifest xml." + + invoke-direct {v1, v2}, Landroid/content/res/Resources$NotFoundException;->(Ljava/lang/String;)V + + throw v1 + :try_end_8 + .catchall {:try_start_8 .. :try_end_8} :catchall_0 + + .line 520 + :catchall_0 + move-exception v1 + + monitor-exit v0 + + throw v1 + + .line 535 + :catch_0 + move-exception v1 + + .line 536 + :try_start_9 + const-string v1, "mobclix-controller" + + const-string v2, "Application Key Started" + + invoke-static {v1, v2}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I + + goto :goto_2 + + .line 544 + :catch_1 + move-exception v1 + + move-object v2, v5 + + .line 545 + :goto_5 + invoke-virtual {v1}, Ljava/lang/Exception;->printStackTrace()V + :try_end_9 + .catchall {:try_start_9 .. :try_end_9} :catchall_0 + + .line 547 + :try_start_a + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationInfo:Landroid/content/pm/ApplicationInfo; + + iget-object v1, v1, Landroid/content/pm/ApplicationInfo;->metaData:Landroid/os/Bundle; + + const-string v3, "doodle_mobile_appid" + + invoke-virtual {v1, v3}, Landroid/os/Bundle;->getInt(Ljava/lang/String;)I + + move-result v1 + + invoke-static {v1}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; + :try_end_a + .catch Ljava/lang/Exception; {:try_start_a .. :try_end_a} :catch_2 + .catchall {:try_start_a .. :try_end_a} :catchall_0 + + move-result-object v1 + + goto :goto_3 + + .line 549 + :catch_2 + move-exception v1 + + .line 550 + :try_start_b + invoke-virtual {v1}, Ljava/lang/Exception;->printStackTrace()V + + move-object v1, v2 + + goto :goto_3 + + .line 558 + :catch_3 + move-exception v2 + + .line 559 + invoke-virtual {v2}, Ljava/lang/Exception;->printStackTrace()V + + goto :goto_4 + + .line 568 + :cond_2 + const-string v2, "DoodleMobileAnaylise" + + new-instance v3, Ljava/lang/StringBuilder; + + invoke-direct {v3}, Ljava/lang/StringBuilder;->()V + + const-string v4, "applicationId = " + + invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v3 + + invoke-virtual {v3, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v1 + + invoke-static {v2, v1}, Landroid/util/Log;->i(Ljava/lang/String;Ljava/lang/String;)I + :try_end_b + .catchall {:try_start_b .. :try_end_b} :catchall_0 + + .line 571 + :try_start_c + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationInfo:Landroid/content/pm/ApplicationInfo; + + iget-object v1, v1, Landroid/content/pm/ApplicationInfo;->metaData:Landroid/os/Bundle; + + const-string v2, "doodle_mobile_loglevel" + + invoke-virtual {v1, v2}, Landroid/os/Bundle;->getString(Ljava/lang/String;)Ljava/lang/String; + :try_end_c + .catch Ljava/lang/Exception; {:try_start_c .. :try_end_c} :catch_4 + .catchall {:try_start_c .. :try_end_c} :catchall_0 + + move-result-object v1 + + .line 577 + :goto_6 + if-eqz v1, :cond_3 + + .line 578 + :try_start_d + const-string v2, "debug" + + invoke-virtual {v1, v2}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z + :try_end_d + .catchall {:try_start_d .. :try_end_d} :catchall_0 + + move-result v2 + + if-eqz v2, :cond_5 + + .line 593 + :cond_3 + :goto_7 + :try_start_e + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + invoke-virtual {v1}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->updateSession()V + + .line 595 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + invoke-static {}, Ljava/util/Locale;->getDefault()Ljava/util/Locale; + + move-result-object v2 + + invoke-virtual {v2}, Ljava/util/Locale;->getCountry()Ljava/lang/String; + + move-result-object v2 + + iput-object v2, v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locale:Ljava/lang/String; + + .line 596 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + invoke-static {}, Ljava/util/Locale;->getDefault()Ljava/util/Locale; + + move-result-object v2 + + invoke-virtual {v2}, Ljava/util/Locale;->getLanguage()Ljava/lang/String; + + move-result-object v2 + + iput-object v2, v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->language:Ljava/lang/String; + + .line 597 + const-string v1, "ssc" + + new-instance v2, Ljava/lang/StringBuilder; + + invoke-direct {v2}, Ljava/lang/StringBuilder;->()V + + const-string v3, "doolemobilea 585 " + + invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v2 + + sget-object v3, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v3, v3, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locale:Ljava/lang/String; + + invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v2 + + sget-object v3, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v3, v3, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->language:Ljava/lang/String; + + invoke-virtual {v2, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v2 + + invoke-virtual {v2}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v2 + + invoke-static {v1, v2}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + .line 599 + sget v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->SYNC_READY:I + + sput v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->syncStatus:I + + .line 601 + const/4 v1, 0x1 + + sput-boolean v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInitialized:Z + :try_end_e + .catch Ljava/lang/Exception; {:try_start_e .. :try_end_e} :catch_5 + .catchall {:try_start_e .. :try_end_e} :catchall_0 + + .line 606 + :cond_4 + :goto_8 + :try_start_f + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + const/4 v2, 0x1 + + invoke-direct {v1, v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->handleSessionStatus(Z)V + :try_end_f + .catchall {:try_start_f .. :try_end_f} :catchall_0 + + .line 607 + monitor-exit v0 + + return-void + + .line 573 + :catch_4 + move-exception v1 + + move-object v1, v5 + + goto :goto_6 + + .line 580 + :cond_5 + :try_start_10 + const-string v2, "info" + + invoke-virtual {v1, v2}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z + + move-result v2 + + if-nez v2, :cond_3 + + .line 582 + const-string v2, "warn" + + invoke-virtual {v1, v2}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z + + move-result v2 + + if-nez v2, :cond_3 + + .line 584 + const-string v2, "error" + + invoke-virtual {v1, v2}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z + + move-result v2 + + if-nez v2, :cond_3 + + .line 586 + const-string v2, "fatal" + + invoke-virtual {v1, v2}, Ljava/lang/String;->equalsIgnoreCase(Ljava/lang/String;)Z + + move-result v1 + + if-eqz v1, :cond_3 + + goto :goto_7 + + .line 602 + :catch_5 + move-exception v1 + + .line 603 + const-string v1, "DoodleMobileAnaylise" + + const-string v2, "has exception" + + invoke-static {v1, v2}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + :try_end_10 + .catchall {:try_start_10 .. :try_end_10} :catchall_0 + + goto :goto_8 + + .line 544 + :catch_6 + move-exception v2 + + move-object v6, v2 + + move-object v2, v1 + + move-object v1, v6 + + goto/16 :goto_5 + + .line 529 + :catch_7 + move-exception v1 + + goto/16 :goto_1 + + .line 522 + :catch_8 + move-exception v1 + + goto/16 :goto_0 +.end method + +.method public static final declared-synchronized onStop(Landroid/app/Activity;)V + .locals 3 + + .prologue + .line 610 + const-class v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + monitor-enter v0 + + :try_start_0 + sget-object v1, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + const/4 v2, 0x0 + + invoke-direct {v1, v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->handleSessionStatus(Z)V + :try_end_0 + .catchall {:try_start_0 .. :try_end_0} :catchall_0 + + .line 612 + monitor-exit v0 + + return-void + + .line 610 + :catchall_0 + move-exception v1 + + monitor-exit v0 + + throw v1 +.end method + +.method static removePref(Ljava/lang/String;)V + .locals 1 + + .prologue + .line 355 + :try_start_0 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->controller:Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise; + + iget-object v0, v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->sharedPrefs:Landroid/content/SharedPreferences; + + invoke-interface {v0}, Landroid/content/SharedPreferences;->edit()Landroid/content/SharedPreferences$Editor; + + move-result-object v0 + + .line 356 + invoke-interface {v0, p0}, Landroid/content/SharedPreferences$Editor;->remove(Ljava/lang/String;)Landroid/content/SharedPreferences$Editor; + + .line 357 + invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->commit()Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 360 + :goto_0 + return-void + + .line 358 + :catch_0 + move-exception v0 + + goto :goto_0 +.end method + +.method private static sha1(Ljava/lang/String;)Ljava/lang/String; + .locals 4 + + .prologue + const/4 v3, 0x0 + + .line 372 + const/16 v0, 0x28 + + new-array v0, v0, [B + + .line 375 + :try_start_0 + const-string v0, "SHA-1" + + invoke-static {v0}, Ljava/security/MessageDigest;->getInstance(Ljava/lang/String;)Ljava/security/MessageDigest; + :try_end_0 + .catch Ljava/security/NoSuchAlgorithmException; {:try_start_0 .. :try_end_0} :catch_0 + + move-result-object v0 + + .line 380 + invoke-virtual {p0}, Ljava/lang/String;->getBytes()[B + + move-result-object v1 + + invoke-virtual {p0}, Ljava/lang/String;->length()I + + move-result v2 + + invoke-virtual {v0, v1, v3, v2}, Ljava/security/MessageDigest;->update([BII)V + + .line 381 + invoke-virtual {v0}, Ljava/security/MessageDigest;->digest()[B + + move-result-object v0 + + .line 382 + new-instance v1, Ljava/lang/StringBuffer; + + invoke-direct {v1}, Ljava/lang/StringBuffer;->()V + + move v2, v3 + + .line 383 + :goto_0 + array-length v3, v0 + + if-ge v2, v3, :cond_0 + + .line 384 + aget-byte v3, v0, v2 + + and-int/lit16 v3, v3, 0xff + + invoke-static {v3}, Ljava/lang/Integer;->toHexString(I)Ljava/lang/String; + + move-result-object v3 + + invoke-virtual {v1, v3}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + .line 383 + add-int/lit8 v2, v2, 0x1 + + goto :goto_0 + + .line 376 + :catch_0 + move-exception v0 + + .line 377 + new-instance v1, Ljava/lang/RuntimeException; + + invoke-direct {v1, v0}, Ljava/lang/RuntimeException;->(Ljava/lang/Throwable;)V + + throw v1 + + .line 386 + :cond_0 + invoke-virtual {v1}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String; + + move-result-object v0 + + return-object v0 +.end method + +.method public static final sync()V + .locals 3 + + .prologue + const v2, 0x186a1 + + .line 792 + sget-boolean v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isInitialized:Z + + if-nez v0, :cond_0 + + .line 793 + const-string v0, "mobclix-controller" + + const-string v1, "sync failed - You must initialize DoodleMobileAnaylise by calling DoodleMobileAnaylise.onCreate(this)." + + invoke-static {v0, v1}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I + + .line 801 + :goto_0 + return-void + + .line 798 + :cond_0 + const-string v0, "DoodleMobileAnaylise" + + const-string v1, "static sync " + + invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + .line 799 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->mSyncHandler:Landroid/os/Handler; + + invoke-virtual {v0, v2}, Landroid/os/Handler;->removeMessages(I)V + + .line 800 + sget-object v0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->mSyncHandler:Landroid/os/Handler; + + invoke-virtual {v0, v2}, Landroid/os/Handler;->sendEmptyMessage(I)Z + + goto :goto_0 +.end method + +.method static syncCookiesToCookieManager(Lorg/apache/http/client/CookieStore;Ljava/lang/String;)V + .locals 7 + + .prologue + const-string v0, "DoodleMobileAnaylise" + + .line 911 + :try_start_0 + const-string v0, "DoodleMobileAnaylise" + + const-string v1, "syncCookieManager " + + invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + .line 912 + invoke-static {}, Landroid/webkit/CookieManager;->getInstance()Landroid/webkit/CookieManager; + + move-result-object v0 + + .line 913 + invoke-interface {p0}, Lorg/apache/http/client/CookieStore;->getCookies()Ljava/util/List; + + move-result-object v1 + + .line 914 + new-instance v2, Ljava/lang/StringBuffer; + + invoke-direct {v2}, Ljava/lang/StringBuffer;->()V + + .line 915 + invoke-interface {v1}, Ljava/util/List;->isEmpty()Z + + move-result v3 + + if-nez v3, :cond_4 + + .line 916 + const/4 v3, 0x0 + + :goto_0 + invoke-interface {v1}, Ljava/util/List;->size()I + + move-result v4 + + if-ge v3, v4, :cond_3 + + .line 917 + invoke-interface {v1, v3}, Ljava/util/List;->get(I)Ljava/lang/Object; + + move-result-object p0 + + check-cast p0, Lorg/apache/http/cookie/Cookie; + + .line 918 + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getName()Ljava/lang/String; + + move-result-object v4 + + invoke-virtual {v2, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + move-result-object v4 + + const-string v5, "=" + + invoke-virtual {v4, v5}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + move-result-object v4 + + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getValue()Ljava/lang/String; + + move-result-object v5 + + invoke-virtual {v4, v5}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + .line 921 + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getExpiryDate()Ljava/util/Date; + + move-result-object v4 + + if-eqz v4, :cond_0 + + .line 922 + new-instance v4, Ljava/text/SimpleDateFormat; + + const-string v5, "E, dd-MMM-yyyy HH:mm:ss" + + invoke-direct {v4, v5}, Ljava/text/SimpleDateFormat;->(Ljava/lang/String;)V + + .line 924 + const-string v5, "; expires=" + + invoke-virtual {v2, v5}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + move-result-object v5 + + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getExpiryDate()Ljava/util/Date; + + move-result-object v6 + + invoke-virtual {v4, v6}, Ljava/text/SimpleDateFormat;->format(Ljava/util/Date;)Ljava/lang/String; + + move-result-object v4 + + invoke-virtual {v5, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + move-result-object v4 + + const-string v5, " GMT" + + invoke-virtual {v4, v5}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + .line 928 + :cond_0 + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getPath()Ljava/lang/String; + + move-result-object v4 + + if-eqz v4, :cond_1 + + .line 929 + const-string v4, "; path=" + + invoke-virtual {v2, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + move-result-object v4 + + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getPath()Ljava/lang/String; + + move-result-object v5 + + invoke-virtual {v4, v5}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + .line 931 + :cond_1 + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getDomain()Ljava/lang/String; + + move-result-object v4 + + if-eqz v4, :cond_2 + + .line 932 + const-string v4, "; domain=" + + invoke-virtual {v2, v4}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + move-result-object v4 + + invoke-interface {p0}, Lorg/apache/http/cookie/Cookie;->getDomain()Ljava/lang/String; + + move-result-object v5 + + invoke-virtual {v4, v5}, Ljava/lang/StringBuffer;->append(Ljava/lang/String;)Ljava/lang/StringBuffer; + + .line 935 + :cond_2 + invoke-virtual {v2}, Ljava/lang/StringBuffer;->toString()Ljava/lang/String; + + move-result-object v4 + + .line 937 + invoke-virtual {v0, p1, v4}, Landroid/webkit/CookieManager;->setCookie(Ljava/lang/String;Ljava/lang/String;)V + + .line 916 + add-int/lit8 v3, v3, 0x1 + + goto :goto_0 + + .line 939 + :cond_3 + const-string v0, "DoodleMobileAnaylise" + + const-string v1, "before syn " + + invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + .line 940 + invoke-static {}, Landroid/webkit/CookieSyncManager;->getInstance()Landroid/webkit/CookieSyncManager; + + move-result-object v0 + + invoke-virtual {v0}, Landroid/webkit/CookieSyncManager;->sync()V + + .line 941 + const-string v0, "DoodleMobileAnaylise" + + const-string v1, "after syn " + + invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I + + .line 943 + invoke-static {}, Landroid/webkit/CookieSyncManager;->getInstance()Landroid/webkit/CookieSyncManager; + + move-result-object v0 + + invoke-virtual {v0}, Landroid/webkit/CookieSyncManager;->stopSync()V + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + .line 947 + :cond_4 + :goto_1 + return-void + + .line 945 + :catch_0 + move-exception v0 + + goto :goto_1 +.end method + +.method private updateConnectivity()V + .locals 4 + + .prologue + const-string v3, "null" + + .line 425 + :try_start_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + const-string v1, "connectivity" + + invoke-virtual {v0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; + + move-result-object v0 + + check-cast v0, Landroid/net/ConnectivityManager; + + .line 427 + const-string v1, "u" + + .line 429 + iget-boolean v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveNetworkStatePermission:Z + + if-eqz v2, :cond_4 + + .line 430 + invoke-virtual {v0}, Landroid/net/ConnectivityManager;->getActiveNetworkInfo()Landroid/net/NetworkInfo; + + move-result-object v0 + + .line 432 + if-eqz v0, :cond_4 + + .line 433 + invoke-virtual {v0}, Landroid/net/NetworkInfo;->getTypeName()Ljava/lang/String; + + move-result-object v0 + + .line 436 + :goto_0 + const-string v1, "WI_FI" + + invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v1 + + if-nez v1, :cond_0 + + const-string v1, "WIFI" + + invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v1 + + if-eqz v1, :cond_2 + + .line 437 + :cond_0 + const-string v0, "wifi" + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + .line 446 + :goto_1 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + if-nez v0, :cond_1 + + .line 447 + const-string v0, "null" + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + .line 451 + :cond_1 + :goto_2 + return-void + + .line 438 + :cond_2 + const-string v1, "MOBILE" + + invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_3 + + .line 439 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + const-string v1, "phone" + + invoke-virtual {v0, v1}, Landroid/content/Context;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; + + move-result-object v0 + + check-cast v0, Landroid/telephony/TelephonyManager; + + .line 441 + invoke-virtual {v0}, Landroid/telephony/TelephonyManager;->getNetworkType()I + + move-result v0 + + .line 442 + invoke-static {v0}, Ljava/lang/Integer;->toString(I)Ljava/lang/String; + + move-result-object v0 + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + goto :goto_1 + + .line 448 + :catch_0 + move-exception v0 + + .line 449 + const-string v0, "null" + + iput-object v3, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + goto :goto_2 + + .line 444 + :cond_3 + :try_start_1 + const-string v0, "null" + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + :try_end_1 + .catch Ljava/lang/Exception; {:try_start_1 .. :try_end_1} :catch_0 + + goto :goto_1 + + :cond_4 + move-object v0, v1 + + goto :goto_0 +.end method + +.method private updateLocation()V + .locals 3 + + .prologue + .line 409 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->location:Lcom/doodlemobile/gamecenter/DoodleMobileLocation; + + iget-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + new-instance v2, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$1; + + invoke-direct {v2, p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise$1;->(Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;)V + + invoke-virtual {v0, v1, v2}, Lcom/doodlemobile/gamecenter/DoodleMobileLocation;->getLocation(Landroid/content/Context;Lcom/doodlemobile/gamecenter/DoodleMobileLocation$LocationResult;)Z + + .line 421 + return-void +.end method + + +# virtual methods +.method protected finalize()V + .locals 0 + + .prologue + .line 896 + invoke-direct {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->endSession()V + + .line 897 + return-void +.end method + +.method getAnalyticsServer()Ljava/lang/String; + .locals 1 + + .prologue + .line 289 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->analyticsServer:Ljava/lang/String; + + return-object v0 +.end method + +.method getAndroidId()Ljava/lang/String; + .locals 1 + + .prologue + .line 218 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidId:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidId:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getAndroidVersion()Ljava/lang/String; + .locals 1 + + .prologue + .line 205 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidVersion:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->androidVersion:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getApplicationId()Ljava/lang/String; + .locals 1 + + .prologue + .line 201 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationId:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationId:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getApplicationVersion()Ljava/lang/String; + .locals 1 + + .prologue + .line 209 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationVersion:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->applicationVersion:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getConfigServer()Ljava/lang/String; + .locals 1 + + .prologue + .line 285 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->configServer:Ljava/lang/String; + + return-object v0 +.end method + +.method getConnectionType()Ljava/lang/String; + .locals 1 + + .prologue + .line 231 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getContext()Landroid/content/Context; + .locals 1 + + .prologue + .line 197 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + return-object v0 +.end method + +.method getDeviceHardwareModel()Ljava/lang/String; + .locals 1 + + .prologue + .line 226 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceHardwareModel:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceHardwareModel:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getDeviceId()Ljava/lang/String; + .locals 1 + + .prologue + .line 214 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceId:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceId:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getDeviceModel()Ljava/lang/String; + .locals 1 + + .prologue + .line 222 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceModel:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->deviceModel:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getGPS()Ljava/lang/String; + .locals 3 + + .prologue + const-string v2, "null" + + .line 243 + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getLatitude()Ljava/lang/String; + + move-result-object v0 + + const-string v1, "null" + + invoke-virtual {v0, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-nez v0, :cond_0 + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getLongitude()Ljava/lang/String; + + move-result-object v0 + + const-string v1, "null" + + invoke-virtual {v0, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_1 + + .line 244 + :cond_0 + const-string v0, "null" + + move-object v0, v2 + + .line 245 + :goto_0 + return-object v0 + + :cond_1 + new-instance v0, Ljava/lang/StringBuilder; + + invoke-direct {v0}, Ljava/lang/StringBuilder;->()V + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getLatitude()Ljava/lang/String; + + move-result-object v1 + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + const-string v1, "," + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getLongitude()Ljava/lang/String; + + move-result-object v1 + + invoke-virtual {v0, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v0 + + invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v0 + + goto :goto_0 +.end method + +.method getLanguage()Ljava/lang/String; + .locals 1 + + .prologue + .line 249 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->language:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->language:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getLatitude()Ljava/lang/String; + .locals 1 + + .prologue + .line 235 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->latitude:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->latitude:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getLocale()Ljava/lang/String; + .locals 1 + + .prologue + .line 253 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locale:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locale:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getLogLevel()I + .locals 1 + + .prologue + .line 261 + iget v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->logLevel:I + + return v0 +.end method + +.method getLongitude()Ljava/lang/String; + .locals 1 + + .prologue + .line 239 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->longitude:Ljava/lang/String; + + if-nez v0, :cond_0 + + const-string v0, "null" + + :goto_0 + return-object v0 + + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->longitude:Ljava/lang/String; + + goto :goto_0 +.end method + +.method getMobclixVersion()Ljava/lang/String; + .locals 1 + + .prologue + .line 257 + const-string v0, "2.3" + + return-object v0 +.end method + +.method getRefreshTime(Ljava/lang/String;)J + .locals 2 + + .prologue + .line 278 + :try_start_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->refreshTime:Ljava/util/HashMap; + + invoke-virtual {v0, p1}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object p0 + + check-cast p0, Ljava/lang/Long; + + invoke-virtual {p0}, Ljava/lang/Long;->longValue()J + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + move-result-wide v0 + + .line 281 + :goto_0 + return-wide v0 + + .line 279 + :catch_0 + move-exception v0 + + .line 281 + const-wide/16 v0, -0x1 + + goto :goto_0 +.end method + +.method getUserAgent()Ljava/lang/String; + .locals 3 + + .prologue + const-string v2, "UserAgent" + + .line 297 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->userAgent:Ljava/lang/String; + + const-string v1, "" + + invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_0 + + const-string v0, "UserAgent" + + invoke-static {v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->hasPref(Ljava/lang/String;)Z + + move-result v0 + + if-eqz v0, :cond_0 + + .line 298 + const-string v0, "UserAgent" + + invoke-static {v2}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getPref(Ljava/lang/String;)Ljava/lang/String; + + move-result-object v0 + + iput-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->userAgent:Ljava/lang/String; + + .line 299 + :cond_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->userAgent:Ljava/lang/String; + + return-object v0 +.end method + +.method isEnabled(Ljava/lang/String;)Z + .locals 1 + + .prologue + .line 270 + :try_start_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->enabled:Ljava/util/HashMap; + + invoke-virtual {v0, p1}, Ljava/util/HashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object p0 + + check-cast p0, Ljava/lang/Boolean; + + invoke-virtual {p0}, Ljava/lang/Boolean;->booleanValue()Z + :try_end_0 + .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0 + + move-result v0 + + .line 273 + :goto_0 + return v0 + + .line 271 + :catch_0 + move-exception v0 + + .line 273 + const/4 v0, 0x1 + + goto :goto_0 +.end method + +.method isRemoteConfigSet()I + .locals 1 + + .prologue + .line 293 + iget v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->remoteConfigSet:I + + return v0 +.end method + +.method isTopTask()Z + .locals 1 + + .prologue + .line 265 + iget-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->isTopTask:Z + + return v0 +.end method + +.method setContext(Landroid/app/Activity;)V + .locals 0 + + .prologue + .line 193 + iput-object p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->context:Landroid/content/Context; + + .line 194 + return-void +.end method + +.method setUserAgent(Ljava/lang/String;)V + .locals 1 + + .prologue + .line 303 + iput-object p1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->userAgent:Ljava/lang/String; + + .line 304 + const-string v0, "UserAgent" + + invoke-static {v0, p1}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->addPref(Ljava/lang/String;Ljava/lang/String;)V + + .line 305 + return-void +.end method + +.method updateSession()V + .locals 4 + + .prologue + const-string v0, "ll" + + .line 391 + invoke-direct {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->updateConnectivity()V + + .line 393 + iget-boolean v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->haveLocationPermission:Z + + if-eqz v0, :cond_0 + + .line 394 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->locationHandler:Landroid/os/Handler; + + const/4 v1, 0x0 + + invoke-virtual {v0, v1}, Landroid/os/Handler;->sendEmptyMessage(I)Z + + .line 397 + :cond_0 + :try_start_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + const-string v1, "ts" + + invoke-static {}, Ljava/lang/System;->currentTimeMillis()J + + move-result-wide v2 + + invoke-virtual {v0, v1, v2, v3}, Lorg/json/JSONObject;->put(Ljava/lang/String;J)Lorg/json/JSONObject; + + .line 398 + invoke-virtual {p0}, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->getGPS()Ljava/lang/String; + + move-result-object v0 + + .line 399 + const-string v1, "null" + + invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v1 + + if-nez v1, :cond_1 + + .line 400 + iget-object v1, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + const-string v2, "ll" + + invoke-virtual {v1, v2, v0}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 403 + :goto_0 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + const-string v1, "g" + + iget-object v2, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->connectionType:Ljava/lang/String; + + invoke-virtual {v0, v1, v2}, Lorg/json/JSONObject;->put(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; + + .line 406 + :goto_1 + return-void + + .line 402 + :cond_1 + iget-object v0, p0, Lcom/doodlemobile/gamecenter/DoodleMobileAnaylise;->session:Lorg/json/JSONObject; + + const-string v1, "ll" + + invoke-virtual {v0, v1}, Lorg/json/JSONObject;->remove(Ljava/lang/String;)Ljava/lang/Object; + :try_end_0 + .catch Lorg/json/JSONException; {:try_start_0 .. :try_end_0} :catch_0 + + goto :goto_0 + + .line 404 + :catch_0 + move-exception v0 + + goto :goto_1 +.end method diff --git a/samples/Smali/ModernAsyncTask.smali b/samples/Smali/ModernAsyncTask.smali new file mode 100644 index 00000000..6803b9d6 --- /dev/null +++ b/samples/Smali/ModernAsyncTask.smali @@ -0,0 +1,700 @@ +.class abstract Landroid/support/v4/content/ModernAsyncTask; +.super Ljava/lang/Object; +.source "ModernAsyncTask.java" + + +# annotations +.annotation system Ldalvik/annotation/MemberClasses; + value = { + Landroid/support/v4/content/ModernAsyncTask$4;, + Landroid/support/v4/content/ModernAsyncTask$AsyncTaskResult;, + Landroid/support/v4/content/ModernAsyncTask$WorkerRunnable;, + Landroid/support/v4/content/ModernAsyncTask$InternalHandler;, + Landroid/support/v4/content/ModernAsyncTask$Status; + } +.end annotation + +.annotation system Ldalvik/annotation/Signature; + value = { + "", + "Ljava/lang/Object;" + } +.end annotation + + +# static fields +.field private static final CORE_POOL_SIZE:I = 0x5 + +.field private static final KEEP_ALIVE:I = 0x1 + +.field private static final LOG_TAG:Ljava/lang/String; = "AsyncTask" + +.field private static final MAXIMUM_POOL_SIZE:I = 0x80 + +.field private static final MESSAGE_POST_PROGRESS:I = 0x2 + +.field private static final MESSAGE_POST_RESULT:I = 0x1 + +.field public static final THREAD_POOL_EXECUTOR:Ljava/util/concurrent/Executor; + +.field private static volatile sDefaultExecutor:Ljava/util/concurrent/Executor; + +.field private static final sHandler:Landroid/support/v4/content/ModernAsyncTask$InternalHandler; + +.field private static final sPoolWorkQueue:Ljava/util/concurrent/BlockingQueue; + .annotation system Ldalvik/annotation/Signature; + value = { + "Ljava/util/concurrent/BlockingQueue", + "<", + "Ljava/lang/Runnable;", + ">;" + } + .end annotation +.end field + +.field private static final sThreadFactory:Ljava/util/concurrent/ThreadFactory; + + +# instance fields +.field private final mFuture:Ljava/util/concurrent/FutureTask; + .annotation system Ldalvik/annotation/Signature; + value = { + "Ljava/util/concurrent/FutureTask", + ";" + } + .end annotation +.end field + +.field private volatile mStatus:Landroid/support/v4/content/ModernAsyncTask$Status; + +.field private final mTaskInvoked:Ljava/util/concurrent/atomic/AtomicBoolean; + +.field private final mWorker:Landroid/support/v4/content/ModernAsyncTask$WorkerRunnable; + .annotation system Ldalvik/annotation/Signature; + value = { + "Landroid/support/v4/content/ModernAsyncTask$WorkerRunnable", + ";" + } + .end annotation +.end field + + +# direct methods +.method static constructor ()V + .registers 8 + + .prologue + .line 54 + new-instance v0, Landroid/support/v4/content/ModernAsyncTask$1; + + invoke-direct {v0}, Landroid/support/v4/content/ModernAsyncTask$1;->()V + + sput-object v0, Landroid/support/v4/content/ModernAsyncTask;->sThreadFactory:Ljava/util/concurrent/ThreadFactory; + + .line 62 + new-instance v0, Ljava/util/concurrent/LinkedBlockingQueue; + + const/16 v1, 0xa + + invoke-direct {v0, v1}, Ljava/util/concurrent/LinkedBlockingQueue;->(I)V + + sput-object v0, Landroid/support/v4/content/ModernAsyncTask;->sPoolWorkQueue:Ljava/util/concurrent/BlockingQueue; + + .line 68 + new-instance v0, Ljava/util/concurrent/ThreadPoolExecutor; + + const/4 v1, 0x5 + + const/16 v2, 0x80 + + const-wide/16 v3, 0x1 + + sget-object v5, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit; + + sget-object v6, Landroid/support/v4/content/ModernAsyncTask;->sPoolWorkQueue:Ljava/util/concurrent/BlockingQueue; + + sget-object v7, Landroid/support/v4/content/ModernAsyncTask;->sThreadFactory:Ljava/util/concurrent/ThreadFactory; + + invoke-direct/range {v0 .. v7}, Ljava/util/concurrent/ThreadPoolExecutor;->(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/ThreadFactory;)V + + sput-object v0, Landroid/support/v4/content/ModernAsyncTask;->THREAD_POOL_EXECUTOR:Ljava/util/concurrent/Executor; + + .line 75 + new-instance v0, Landroid/support/v4/content/ModernAsyncTask$InternalHandler; + + const/4 v1, 0x0 + + invoke-direct {v0, v1}, Landroid/support/v4/content/ModernAsyncTask$InternalHandler;->(Landroid/support/v4/content/ModernAsyncTask$1;)V + + sput-object v0, Landroid/support/v4/content/ModernAsyncTask;->sHandler:Landroid/support/v4/content/ModernAsyncTask$InternalHandler; + + .line 77 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask;->THREAD_POOL_EXECUTOR:Ljava/util/concurrent/Executor; + + sput-object v0, Landroid/support/v4/content/ModernAsyncTask;->sDefaultExecutor:Ljava/util/concurrent/Executor; + + return-void +.end method + +.method public constructor ()V + .registers 3 + + .prologue + .line 117 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + invoke-direct {p0}, Ljava/lang/Object;->()V + + .line 81 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask$Status;->PENDING:Landroid/support/v4/content/ModernAsyncTask$Status; + + iput-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mStatus:Landroid/support/v4/content/ModernAsyncTask$Status; + + .line 83 + new-instance v0, Ljava/util/concurrent/atomic/AtomicBoolean; + + invoke-direct {v0}, Ljava/util/concurrent/atomic/AtomicBoolean;->()V + + iput-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mTaskInvoked:Ljava/util/concurrent/atomic/AtomicBoolean; + + .line 118 + new-instance v0, Landroid/support/v4/content/ModernAsyncTask$2; + + invoke-direct {v0, p0}, Landroid/support/v4/content/ModernAsyncTask$2;->(Landroid/support/v4/content/ModernAsyncTask;)V + + iput-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mWorker:Landroid/support/v4/content/ModernAsyncTask$WorkerRunnable; + + .line 127 + new-instance v0, Landroid/support/v4/content/ModernAsyncTask$3; + + iget-object v1, p0, Landroid/support/v4/content/ModernAsyncTask;->mWorker:Landroid/support/v4/content/ModernAsyncTask$WorkerRunnable; + + invoke-direct {v0, p0, v1}, Landroid/support/v4/content/ModernAsyncTask$3;->(Landroid/support/v4/content/ModernAsyncTask;Ljava/util/concurrent/Callable;)V + + iput-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mFuture:Ljava/util/concurrent/FutureTask; + + .line 147 + return-void +.end method + +.method static synthetic access$200(Landroid/support/v4/content/ModernAsyncTask;)Ljava/util/concurrent/atomic/AtomicBoolean; + .registers 2 + .param p0, "x0" # Landroid/support/v4/content/ModernAsyncTask; + + .prologue + .line 47 + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mTaskInvoked:Ljava/util/concurrent/atomic/AtomicBoolean; + + return-object v0 +.end method + +.method static synthetic access$300(Landroid/support/v4/content/ModernAsyncTask;Ljava/lang/Object;)Ljava/lang/Object; + .registers 3 + .param p0, "x0" # Landroid/support/v4/content/ModernAsyncTask; + .param p1, "x1" # Ljava/lang/Object; + + .prologue + .line 47 + invoke-direct {p0, p1}, Landroid/support/v4/content/ModernAsyncTask;->postResult(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + +.method static synthetic access$400(Landroid/support/v4/content/ModernAsyncTask;Ljava/lang/Object;)V + .registers 2 + .param p0, "x0" # Landroid/support/v4/content/ModernAsyncTask; + .param p1, "x1" # Ljava/lang/Object; + + .prologue + .line 47 + invoke-direct {p0, p1}, Landroid/support/v4/content/ModernAsyncTask;->postResultIfNotInvoked(Ljava/lang/Object;)V + + return-void +.end method + +.method static synthetic access$500(Landroid/support/v4/content/ModernAsyncTask;Ljava/lang/Object;)V + .registers 2 + .param p0, "x0" # Landroid/support/v4/content/ModernAsyncTask; + .param p1, "x1" # Ljava/lang/Object; + + .prologue + .line 47 + invoke-direct {p0, p1}, Landroid/support/v4/content/ModernAsyncTask;->finish(Ljava/lang/Object;)V + + return-void +.end method + +.method public static execute(Ljava/lang/Runnable;)V + .registers 2 + .param p0, "runnable" # Ljava/lang/Runnable; + + .prologue + .line 433 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask;->sDefaultExecutor:Ljava/util/concurrent/Executor; + + invoke-interface {v0, p0}, Ljava/util/concurrent/Executor;->execute(Ljava/lang/Runnable;)V + + .line 434 + return-void +.end method + +.method private finish(Ljava/lang/Object;)V + .registers 3 + .annotation system Ldalvik/annotation/Signature; + value = { + "(TResult;)V" + } + .end annotation + + .prologue + .line 458 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "result":Ljava/lang/Object;, "TResult;" + invoke-virtual {p0}, Landroid/support/v4/content/ModernAsyncTask;->isCancelled()Z + + move-result v0 + + if-eqz v0, :cond_e + + .line 459 + invoke-virtual {p0, p1}, Landroid/support/v4/content/ModernAsyncTask;->onCancelled(Ljava/lang/Object;)V + + .line 463 + :goto_9 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask$Status;->FINISHED:Landroid/support/v4/content/ModernAsyncTask$Status; + + iput-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mStatus:Landroid/support/v4/content/ModernAsyncTask$Status; + + .line 464 + return-void + + .line 461 + :cond_e + invoke-virtual {p0, p1}, Landroid/support/v4/content/ModernAsyncTask;->onPostExecute(Ljava/lang/Object;)V + + goto :goto_9 +.end method + +.method public static init()V + .registers 1 + + .prologue + .line 106 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask;->sHandler:Landroid/support/v4/content/ModernAsyncTask$InternalHandler; + + invoke-virtual {v0}, Landroid/support/v4/content/ModernAsyncTask$InternalHandler;->getLooper()Landroid/os/Looper; + + .line 107 + return-void +.end method + +.method private postResult(Ljava/lang/Object;)Ljava/lang/Object; + .registers 8 + .annotation system Ldalvik/annotation/Signature; + value = { + "(TResult;)TResult;" + } + .end annotation + + .prologue + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "result":Ljava/lang/Object;, "TResult;" + const/4 v5, 0x1 + + .line 157 + sget-object v1, Landroid/support/v4/content/ModernAsyncTask;->sHandler:Landroid/support/v4/content/ModernAsyncTask$InternalHandler; + + new-instance v2, Landroid/support/v4/content/ModernAsyncTask$AsyncTaskResult; + + new-array v3, v5, [Ljava/lang/Object; + + const/4 v4, 0x0 + + aput-object p1, v3, v4 + + invoke-direct {v2, p0, v3}, Landroid/support/v4/content/ModernAsyncTask$AsyncTaskResult;->(Landroid/support/v4/content/ModernAsyncTask;[Ljava/lang/Object;)V + + invoke-virtual {v1, v5, v2}, Landroid/support/v4/content/ModernAsyncTask$InternalHandler;->obtainMessage(ILjava/lang/Object;)Landroid/os/Message; + + move-result-object v0 + + .line 159 + .local v0, "message":Landroid/os/Message; + invoke-virtual {v0}, Landroid/os/Message;->sendToTarget()V + + .line 160 + return-object p1 +.end method + +.method private postResultIfNotInvoked(Ljava/lang/Object;)V + .registers 4 + .annotation system Ldalvik/annotation/Signature; + value = { + "(TResult;)V" + } + .end annotation + + .prologue + .line 150 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "result":Ljava/lang/Object;, "TResult;" + iget-object v1, p0, Landroid/support/v4/content/ModernAsyncTask;->mTaskInvoked:Ljava/util/concurrent/atomic/AtomicBoolean; + + invoke-virtual {v1}, Ljava/util/concurrent/atomic/AtomicBoolean;->get()Z + + move-result v0 + + .line 151 + .local v0, "wasTaskInvoked":Z + if-nez v0, :cond_b + + .line 152 + invoke-direct {p0, p1}, Landroid/support/v4/content/ModernAsyncTask;->postResult(Ljava/lang/Object;)Ljava/lang/Object; + + .line 154 + :cond_b + return-void +.end method + +.method public static setDefaultExecutor(Ljava/util/concurrent/Executor;)V + .registers 1 + .param p0, "exec" # Ljava/util/concurrent/Executor; + + .prologue + .line 111 + sput-object p0, Landroid/support/v4/content/ModernAsyncTask;->sDefaultExecutor:Ljava/util/concurrent/Executor; + + .line 112 + return-void +.end method + + +# virtual methods +.method public final cancel(Z)Z + .registers 3 + .param p1, "mayInterruptIfRunning" # Z + + .prologue + .line 306 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mFuture:Ljava/util/concurrent/FutureTask; + + invoke-virtual {v0, p1}, Ljava/util/concurrent/FutureTask;->cancel(Z)Z + + move-result v0 + + return v0 +.end method + +.method protected varargs abstract doInBackground([Ljava/lang/Object;)Ljava/lang/Object; + .annotation system Ldalvik/annotation/Signature; + value = { + "([TParams;)TResult;" + } + .end annotation +.end method + +.method public final varargs execute([Ljava/lang/Object;)Landroid/support/v4/content/ModernAsyncTask; + .registers 3 + .annotation system Ldalvik/annotation/Signature; + value = { + "([TParams;)", + "Landroid/support/v4/content/ModernAsyncTask", + ";" + } + .end annotation + + .prologue + .line 371 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "params":[Ljava/lang/Object;, "[TParams;" + sget-object v0, Landroid/support/v4/content/ModernAsyncTask;->sDefaultExecutor:Ljava/util/concurrent/Executor; + + invoke-virtual {p0, v0, p1}, Landroid/support/v4/content/ModernAsyncTask;->executeOnExecutor(Ljava/util/concurrent/Executor;[Ljava/lang/Object;)Landroid/support/v4/content/ModernAsyncTask; + + move-result-object v0 + + return-object v0 +.end method + +.method public final varargs executeOnExecutor(Ljava/util/concurrent/Executor;[Ljava/lang/Object;)Landroid/support/v4/content/ModernAsyncTask; + .registers 5 + .param p1, "exec" # Ljava/util/concurrent/Executor; + .annotation system Ldalvik/annotation/Signature; + value = { + "(", + "Ljava/util/concurrent/Executor;", + "[TParams;)", + "Landroid/support/v4/content/ModernAsyncTask", + ";" + } + .end annotation + + .prologue + .line 406 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p2, "params":[Ljava/lang/Object;, "[TParams;" + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mStatus:Landroid/support/v4/content/ModernAsyncTask$Status; + + sget-object v1, Landroid/support/v4/content/ModernAsyncTask$Status;->PENDING:Landroid/support/v4/content/ModernAsyncTask$Status; + + if-eq v0, v1, :cond_13 + + .line 407 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask$4;->$SwitchMap$android$support$v4$content$ModernAsyncTask$Status:[I + + iget-object v1, p0, Landroid/support/v4/content/ModernAsyncTask;->mStatus:Landroid/support/v4/content/ModernAsyncTask$Status; + + invoke-virtual {v1}, Landroid/support/v4/content/ModernAsyncTask$Status;->ordinal()I + + move-result v1 + + aget v0, v0, v1 + + packed-switch v0, :pswitch_data_34 + + .line 418 + :cond_13 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask$Status;->RUNNING:Landroid/support/v4/content/ModernAsyncTask$Status; + + iput-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mStatus:Landroid/support/v4/content/ModernAsyncTask$Status; + + .line 420 + invoke-virtual {p0}, Landroid/support/v4/content/ModernAsyncTask;->onPreExecute()V + + .line 422 + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mWorker:Landroid/support/v4/content/ModernAsyncTask$WorkerRunnable; + + iput-object p2, v0, Landroid/support/v4/content/ModernAsyncTask$WorkerRunnable;->mParams:[Ljava/lang/Object; + + .line 423 + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mFuture:Ljava/util/concurrent/FutureTask; + + invoke-interface {p1, v0}, Ljava/util/concurrent/Executor;->execute(Ljava/lang/Runnable;)V + + .line 425 + return-object p0 + + .line 409 + :pswitch_24 + new-instance v0, Ljava/lang/IllegalStateException; + + const-string v1, "Cannot execute task: the task is already running." + + invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V + + throw v0 + + .line 412 + :pswitch_2c + new-instance v0, Ljava/lang/IllegalStateException; + + const-string v1, "Cannot execute task: the task has already been executed (a task can be executed only once)" + + invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V + + throw v0 + + .line 407 + :pswitch_data_34 + .packed-switch 0x1 + :pswitch_24 + :pswitch_2c + .end packed-switch +.end method + +.method public final get()Ljava/lang/Object; + .registers 2 + .annotation system Ldalvik/annotation/Signature; + value = { + "()TResult;" + } + .end annotation + + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/lang/InterruptedException;, + Ljava/util/concurrent/ExecutionException; + } + .end annotation + + .prologue + .line 321 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mFuture:Ljava/util/concurrent/FutureTask; + + invoke-virtual {v0}, Ljava/util/concurrent/FutureTask;->get()Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + +.method public final get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object; + .registers 5 + .param p1, "timeout" # J + .param p3, "unit" # Ljava/util/concurrent/TimeUnit; + .annotation system Ldalvik/annotation/Signature; + value = { + "(J", + "Ljava/util/concurrent/TimeUnit;", + ")TResult;" + } + .end annotation + + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/lang/InterruptedException;, + Ljava/util/concurrent/ExecutionException;, + Ljava/util/concurrent/TimeoutException; + } + .end annotation + + .prologue + .line 341 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mFuture:Ljava/util/concurrent/FutureTask; + + invoke-virtual {v0, p1, p2, p3}, Ljava/util/concurrent/FutureTask;->get(JLjava/util/concurrent/TimeUnit;)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + +.method public final getStatus()Landroid/support/v4/content/ModernAsyncTask$Status; + .registers 2 + + .prologue + .line 169 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mStatus:Landroid/support/v4/content/ModernAsyncTask$Status; + + return-object v0 +.end method + +.method public final isCancelled()Z + .registers 2 + + .prologue + .line 273 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + iget-object v0, p0, Landroid/support/v4/content/ModernAsyncTask;->mFuture:Ljava/util/concurrent/FutureTask; + + invoke-virtual {v0}, Ljava/util/concurrent/FutureTask;->isCancelled()Z + + move-result v0 + + return v0 +.end method + +.method protected onCancelled()V + .registers 1 + + .prologue + .line 260 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + return-void +.end method + +.method protected onCancelled(Ljava/lang/Object;)V + .registers 2 + .annotation system Ldalvik/annotation/Signature; + value = { + "(TResult;)V" + } + .end annotation + + .prologue + .line 244 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "result":Ljava/lang/Object;, "TResult;" + invoke-virtual {p0}, Landroid/support/v4/content/ModernAsyncTask;->onCancelled()V + + .line 245 + return-void +.end method + +.method protected onPostExecute(Ljava/lang/Object;)V + .registers 2 + .annotation system Ldalvik/annotation/Signature; + value = { + "(TResult;)V" + } + .end annotation + + .prologue + .line 213 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "result":Ljava/lang/Object;, "TResult;" + return-void +.end method + +.method protected onPreExecute()V + .registers 1 + + .prologue + .line 197 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + return-void +.end method + +.method protected varargs onProgressUpdate([Ljava/lang/Object;)V + .registers 2 + .annotation system Ldalvik/annotation/Signature; + value = { + "([TProgress;)V" + } + .end annotation + + .prologue + .line 226 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "values":[Ljava/lang/Object;, "[TProgress;" + return-void +.end method + +.method protected final varargs publishProgress([Ljava/lang/Object;)V + .registers 5 + .annotation system Ldalvik/annotation/Signature; + value = { + "([TProgress;)V" + } + .end annotation + + .prologue + .line 451 + .local p0, "this":Landroid/support/v4/content/ModernAsyncTask;, "Landroid/support/v4/content/ModernAsyncTask;" + .local p1, "values":[Ljava/lang/Object;, "[TProgress;" + invoke-virtual {p0}, Landroid/support/v4/content/ModernAsyncTask;->isCancelled()Z + + move-result v0 + + if-nez v0, :cond_15 + + .line 452 + sget-object v0, Landroid/support/v4/content/ModernAsyncTask;->sHandler:Landroid/support/v4/content/ModernAsyncTask$InternalHandler; + + const/4 v1, 0x2 + + new-instance v2, Landroid/support/v4/content/ModernAsyncTask$AsyncTaskResult; + + invoke-direct {v2, p0, p1}, Landroid/support/v4/content/ModernAsyncTask$AsyncTaskResult;->(Landroid/support/v4/content/ModernAsyncTask;[Ljava/lang/Object;)V + + invoke-virtual {v0, v1, v2}, Landroid/support/v4/content/ModernAsyncTask$InternalHandler;->obtainMessage(ILjava/lang/Object;)Landroid/os/Message; + + move-result-object v0 + + invoke-virtual {v0}, Landroid/os/Message;->sendToTarget()V + + .line 455 + :cond_15 + return-void +.end method diff --git a/samples/Smali/PenguinSprite.smali b/samples/Smali/PenguinSprite.smali new file mode 100644 index 00000000..a02c7913 --- /dev/null +++ b/samples/Smali/PenguinSprite.smali @@ -0,0 +1,781 @@ +.class public Lcom/tdq/game/shootbubble/sprite/PenguinSprite; +.super Lcom/tdq/game/shootbubble/sprite/Sprite; +.source "PenguinSprite.java" + + +# static fields +.field public static final LOST_SEQUENCE:[[I + +.field public static final STATE_FIRE:I = 0x2 + +.field public static final STATE_GAME_LOST:I = 0x5 + +.field public static final STATE_GAME_WON:I = 0x4 + +.field public static final STATE_TURN_LEFT:I = 0x0 + +.field public static final STATE_TURN_RIGHT:I = 0x1 + +.field public static final STATE_VOID:I = 0x3 + +.field public static final WON_SEQUENCE:[[I + + +# instance fields +.field private count:I + +.field private currentPenguin:I + +.field private finalState:I + +.field private nextPosition:I + +.field private rand:Ljava/util/Random; + +.field private spritesImage:Lcom/tdq/game/shootbubble/sprite/BmpWrap; + + +# direct methods +.method static constructor ()V + .locals 8 + + .prologue + const/4 v7, 0x4 + + const/4 v6, 0x3 + + const/4 v5, 0x1 + + const/4 v4, 0x0 + + const/4 v3, 0x2 + + .line 67 + const/16 v0, 0x8 + + new-array v0, v0, [[I + + new-array v1, v3, [I + + fill-array-data v1, :array_0 + + aput-object v1, v0, v4 + + new-array v1, v3, [I + + fill-array-data v1, :array_1 + + aput-object v1, v0, v5 + + new-array v1, v3, [I + + fill-array-data v1, :array_2 + + aput-object v1, v0, v3 + + new-array v1, v3, [I + + fill-array-data v1, :array_3 + + aput-object v1, v0, v6 + + new-array v1, v3, [I + + fill-array-data v1, :array_4 + + aput-object v1, v0, v7 + + const/4 v1, 0x5 + + new-array v2, v3, [I + + fill-array-data v2, :array_5 + + aput-object v2, v0, v1 + + const/4 v1, 0x6 + + new-array v2, v3, [I + + fill-array-data v2, :array_6 + + aput-object v2, v0, v1 + + const/4 v1, 0x7 + + new-array v2, v3, [I + + fill-array-data v2, :array_7 + + aput-object v2, v0, v1 + + sput-object v0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->LOST_SEQUENCE:[[I + + .line 69 + const/16 v0, 0x8 + + new-array v0, v0, [[I + + new-array v1, v3, [I + + fill-array-data v1, :array_8 + + aput-object v1, v0, v4 + + new-array v1, v3, [I + + fill-array-data v1, :array_9 + + aput-object v1, v0, v5 + + new-array v1, v3, [I + + fill-array-data v1, :array_a + + aput-object v1, v0, v3 + + new-array v1, v3, [I + + fill-array-data v1, :array_b + + aput-object v1, v0, v6 + + new-array v1, v3, [I + + fill-array-data v1, :array_c + + aput-object v1, v0, v7 + + const/4 v1, 0x5 + + new-array v2, v3, [I + + fill-array-data v2, :array_d + + aput-object v2, v0, v1 + + const/4 v1, 0x6 + + new-array v2, v3, [I + + fill-array-data v2, :array_e + + aput-object v2, v0, v1 + + const/4 v1, 0x7 + + new-array v2, v3, [I + + fill-array-data v2, :array_f + + aput-object v2, v0, v1 + + sput-object v0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->WON_SEQUENCE:[[I + + return-void + + .line 67 + :array_0 + .array-data 4 + 0x1 + 0x0 + .end array-data + + :array_1 + .array-data 4 + 0x2 + 0x8 + .end array-data + + :array_2 + .array-data 4 + 0x3 + 0x9 + .end array-data + + :array_3 + .array-data 4 + 0x4 + 0xa + .end array-data + + :array_4 + .array-data 4 + 0x5 + 0xb + .end array-data + + :array_5 + .array-data 4 + 0x6 + 0xc + .end array-data + + :array_6 + .array-data 4 + 0x7 + 0xd + .end array-data + + :array_7 + .array-data 4 + 0x5 + 0xe + .end array-data + + .line 69 + :array_8 + .array-data 4 + 0x1 + 0x0 + .end array-data + + :array_9 + .array-data 4 + 0x2 + 0x7 + .end array-data + + :array_a + .array-data 4 + 0x3 + 0x6 + .end array-data + + :array_b + .array-data 4 + 0x4 + 0xf + .end array-data + + :array_c + .array-data 4 + 0x5 + 0x10 + .end array-data + + :array_d + .array-data 4 + 0x6 + 0x11 + .end array-data + + :array_e + .array-data 4 + 0x7 + 0x12 + .end array-data + + :array_f + .array-data 4 + 0x4 + 0x13 + .end array-data +.end method + +.method public constructor (Lcom/tdq/game/shootbubble/sprite/BmpWrap;Ljava/util/Random;)V + .locals 6 + .param p1, "sprites" # Lcom/tdq/game/shootbubble/sprite/BmpWrap; + .param p2, "rand" # Ljava/util/Random; + + .prologue + const/4 v5, 0x0 + + .line 85 + new-instance v0, Landroid/graphics/Rect; + + const/16 v1, 0x169 + + const/16 v2, 0x1b4 + + const/16 v3, 0x1a0 + + const/16 v4, 0x1df + + invoke-direct {v0, v1, v2, v3, v4}, Landroid/graphics/Rect;->(IIII)V + + invoke-direct {p0, v0}, Lcom/tdq/game/shootbubble/sprite/Sprite;->(Landroid/graphics/Rect;)V + + .line 87 + iput-object p1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->spritesImage:Lcom/tdq/game/shootbubble/sprite/BmpWrap; + + .line 88 + iput-object p2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->rand:Ljava/util/Random; + + .line 90 + iput v5, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + .line 92 + const/4 v0, 0x3 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->finalState:I + + .line 93 + iput v5, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + .line 94 + return-void +.end method + +.method public constructor (Lcom/tdq/game/shootbubble/sprite/BmpWrap;Ljava/util/Random;IIII)V + .locals 5 + .param p1, "sprites" # Lcom/tdq/game/shootbubble/sprite/BmpWrap; + .param p2, "rand" # Ljava/util/Random; + .param p3, "currentPenguin" # I + .param p4, "count" # I + .param p5, "finalState" # I + .param p6, "nextPosition" # I + + .prologue + .line 100 + new-instance v0, Landroid/graphics/Rect; + + const/16 v1, 0x169 + + const/16 v2, 0x1b4 + + const/16 v3, 0x1a0 + + const/16 v4, 0x1df + + invoke-direct {v0, v1, v2, v3, v4}, Landroid/graphics/Rect;->(IIII)V + + invoke-direct {p0, v0}, Lcom/tdq/game/shootbubble/sprite/Sprite;->(Landroid/graphics/Rect;)V + + .line 102 + iput-object p1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->spritesImage:Lcom/tdq/game/shootbubble/sprite/BmpWrap; + + .line 103 + iput-object p2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->rand:Ljava/util/Random; + + .line 104 + iput p3, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + .line 105 + iput p4, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + .line 106 + iput p5, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->finalState:I + + .line 107 + iput p6, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + .line 108 + return-void +.end method + + +# virtual methods +.method public getTypeId()I + .locals 1 + + .prologue + .line 124 + sget v0, Lcom/tdq/game/shootbubble/sprite/Sprite;->TYPE_PENGUIN:I + + return v0 +.end method + +.method public paint(Landroid/graphics/Canvas;DII)V + .locals 9 + .param p1, "c" # Landroid/graphics/Canvas; + .param p2, "scale" # D + .param p4, "dx" # I + .param p5, "dy" # I + + .prologue + .line 183 + invoke-virtual {p0}, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->getSpriteArea()Landroid/graphics/Rect; + + move-result-object v3 + + .line 184 + .local v3, "r":Landroid/graphics/Rect; + iget-object v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->spritesImage:Lcom/tdq/game/shootbubble/sprite/BmpWrap; + + const/16 v1, 0x168 + + iget v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + rem-int/lit8 v2, v2, 0x4 + + mul-int/lit8 v2, v2, 0x39 + + sub-int/2addr v1, v2 + + const/16 v2, 0x1b3 + + iget v4, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + div-int/lit8 v4, v4, 0x4 + + mul-int/lit8 v4, v4, 0x2d + + sub-int/2addr v2, v4 + + move-object v4, p1 + + move-wide v5, p2 + + move v7, p4 + + move v8, p5 + + invoke-static/range {v0 .. v8}, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->drawImageClipped(Lcom/tdq/game/shootbubble/sprite/BmpWrap;IILandroid/graphics/Rect;Landroid/graphics/Canvas;DII)V + + .line 188 + return-void +.end method + +.method public saveState(Landroid/os/Bundle;Ljava/util/Vector;)V + .locals 5 + .param p1, "map" # Landroid/os/Bundle; + .param p2, "saved_sprites" # Ljava/util/Vector; + + .prologue + const/4 v4, 0x1 + + const/4 v3, 0x0 + + .line 111 + invoke-virtual {p0}, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->getSavedId()I + + move-result v0 + + const/4 v1, -0x1 + + if-eq v0, v1, :cond_0 + + .line 120 + :goto_0 + return-void + + .line 114 + :cond_0 + invoke-super {p0, p1, p2}, Lcom/tdq/game/shootbubble/sprite/Sprite;->saveState(Landroid/os/Bundle;Ljava/util/Vector;)V + + .line 115 + const-string v0, "%d-currentPenguin" + + new-array v1, v4, [Ljava/lang/Object; + + invoke-virtual {p0}, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->getSavedId()I + + move-result v2 + + invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; + + move-result-object v2 + + aput-object v2, v1, v3 + + invoke-static {v0, v1}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; + + move-result-object v0 + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + invoke-virtual {p1, v0, v1}, Landroid/os/Bundle;->putInt(Ljava/lang/String;I)V + + .line 117 + const-string v0, "%d-count" + + new-array v1, v4, [Ljava/lang/Object; + + invoke-virtual {p0}, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->getSavedId()I + + move-result v2 + + invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; + + move-result-object v2 + + aput-object v2, v1, v3 + + invoke-static {v0, v1}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; + + move-result-object v0 + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + invoke-virtual {p1, v0, v1}, Landroid/os/Bundle;->putInt(Ljava/lang/String;I)V + + .line 118 + const-string v0, "%d-finalState" + + new-array v1, v4, [Ljava/lang/Object; + + invoke-virtual {p0}, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->getSavedId()I + + move-result v2 + + invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; + + move-result-object v2 + + aput-object v2, v1, v3 + + invoke-static {v0, v1}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; + + move-result-object v0 + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->finalState:I + + invoke-virtual {p1, v0, v1}, Landroid/os/Bundle;->putInt(Ljava/lang/String;I)V + + .line 119 + const-string v0, "%d-nextPosition" + + new-array v1, v4, [Ljava/lang/Object; + + invoke-virtual {p0}, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->getSavedId()I + + move-result v2 + + invoke-static {v2}, Ljava/lang/Integer;->valueOf(I)Ljava/lang/Integer; + + move-result-object v2 + + aput-object v2, v1, v3 + + invoke-static {v0, v1}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; + + move-result-object v0 + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + invoke-virtual {p1, v0, v1}, Landroid/os/Bundle;->putInt(Ljava/lang/String;I)V + + goto :goto_0 +.end method + +.method public updateState(I)V + .locals 6 + .param p1, "state" # I + + .prologue + const/4 v5, 0x7 + + const/4 v1, 0x3 + + const/4 v4, 0x4 + + const/4 v3, 0x1 + + const/4 v2, 0x0 + + .line 129 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->finalState:I + + if-eq v0, v1, :cond_2 + + .line 130 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + add-int/lit8 v0, v0, 0x1 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + .line 132 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + rem-int/lit8 v0, v0, 0x6 + + if-nez v0, :cond_0 + + .line 133 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->finalState:I + + const/4 v1, 0x5 + + if-ne v0, v1, :cond_1 + + .line 134 + sget-object v0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->LOST_SEQUENCE:[[I + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + aget-object v0, v0, v1 + + aget v0, v0, v3 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + .line 135 + sget-object v0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->LOST_SEQUENCE:[[I + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + aget-object v0, v0, v1 + + aget v0, v0, v2 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + .line 179 + :cond_0 + :goto_0 + return-void + + .line 136 + :cond_1 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->finalState:I + + if-ne v0, v4, :cond_0 + + .line 137 + sget-object v0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->WON_SEQUENCE:[[I + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + aget-object v0, v0, v1 + + aget v0, v0, v3 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + .line 138 + sget-object v0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->WON_SEQUENCE:[[I + + iget v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + aget-object v0, v0, v1 + + aget v0, v0, v2 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->nextPosition:I + + goto :goto_0 + + .line 142 + :cond_2 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + add-int/lit8 v0, v0, 0x1 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + .line 144 + packed-switch p1, :pswitch_data_0 + + .line 170 + :cond_3 + :goto_1 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + const/16 v1, 0x64 + + if-le v0, v1, :cond_5 + + .line 171 + iput v5, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + goto :goto_0 + + .line 146 + :pswitch_0 + iput v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + .line 147 + iput v1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + goto :goto_1 + + .line 150 + :pswitch_1 + iput v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + .line 151 + const/4 v0, 0x2 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + goto :goto_1 + + .line 154 + :pswitch_2 + iput v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + .line 155 + iput v3, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + goto :goto_1 + + .line 158 + :pswitch_3 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + if-lt v0, v4, :cond_4 + + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + if-le v0, v5, :cond_3 + + .line 159 + :cond_4 + iput v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + goto :goto_1 + + .line 164 + :pswitch_4 + iput v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + .line 165 + iput p1, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->finalState:I + + .line 166 + iput v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + goto :goto_0 + + .line 172 + :cond_5 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + rem-int/lit8 v0, v0, 0xf + + if-nez v0, :cond_0 + + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->count:I + + const/16 v1, 0x19 + + if-le v0, v1, :cond_0 + + .line 173 + iget-object v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->rand:Ljava/util/Random; + + invoke-virtual {v0}, Ljava/util/Random;->nextInt()I + + move-result v0 + + rem-int/lit8 v0, v0, 0x3 + + add-int/lit8 v0, v0, 0x4 + + iput v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + .line 174 + iget v0, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + if-ge v0, v4, :cond_0 + + .line 175 + iput v2, p0, Lcom/tdq/game/shootbubble/sprite/PenguinSprite;->currentPenguin:I + + goto :goto_0 + + .line 144 + nop + + :pswitch_data_0 + .packed-switch 0x0 + :pswitch_0 + :pswitch_1 + :pswitch_2 + :pswitch_3 + :pswitch_4 + :pswitch_4 + .end packed-switch +.end method diff --git a/samples/Smali/Subject.smali b/samples/Smali/Subject.smali new file mode 100644 index 00000000..4140157c --- /dev/null +++ b/samples/Smali/Subject.smali @@ -0,0 +1,1179 @@ +.class public final Lorg/apache/harmony/javax/security/auth/Subject; +.super Ljava/lang/Object; +.source "Subject.java" + +# interfaces +.implements Ljava/io/Serializable; + + +# annotations +.annotation system Ldalvik/annotation/MemberClasses; + value = { + Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + } +.end annotation + + +# static fields +.field private static final _AS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + +.field private static final _AS_PRIVILEGED:Lorg/apache/harmony/javax/security/auth/AuthPermission; + +.field private static final _PRINCIPALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + +.field private static final _PRIVATE_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + +.field private static final _PUBLIC_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + +.field private static final _READ_ONLY:Lorg/apache/harmony/javax/security/auth/AuthPermission; + +.field private static final _SUBJECT:Lorg/apache/harmony/javax/security/auth/AuthPermission; + +.field private static final serialVersionUID:J = -0x734dcd6cffcc0598L + + +# instance fields +.field private final principals:Ljava/util/Set; + .annotation system Ldalvik/annotation/Signature; + value = { + "Ljava/util/Set", + "<", + "Ljava/security/Principal;", + ">;" + } + .end annotation +.end field + +.field private transient privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + .annotation system Ldalvik/annotation/Signature; + value = { + "Lorg/apache/harmony/javax/security/auth/Subject$SecureSet", + "<", + "Ljava/lang/Object;", + ">;" + } + .end annotation +.end field + +.field private transient publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + .annotation system Ldalvik/annotation/Signature; + value = { + "Lorg/apache/harmony/javax/security/auth/Subject$SecureSet", + "<", + "Ljava/lang/Object;", + ">;" + } + .end annotation +.end field + +.field private readOnly:Z + + +# direct methods +.method static constructor ()V + .locals 2 + + .prologue + .line 59 + new-instance v0, Lorg/apache/harmony/javax/security/auth/AuthPermission; + + const-string v1, "doAs" + + invoke-direct {v0, v1}, Lorg/apache/harmony/javax/security/auth/AuthPermission;->(Ljava/lang/String;)V + + sput-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_AS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 61 + new-instance v0, Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 62 + const-string v1, "doAsPrivileged" + + .line 61 + invoke-direct {v0, v1}, Lorg/apache/harmony/javax/security/auth/AuthPermission;->(Ljava/lang/String;)V + + sput-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_AS_PRIVILEGED:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 64 + new-instance v0, Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 65 + const-string v1, "getSubject" + + .line 64 + invoke-direct {v0, v1}, Lorg/apache/harmony/javax/security/auth/AuthPermission;->(Ljava/lang/String;)V + + sput-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_SUBJECT:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 67 + new-instance v0, Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 68 + const-string v1, "modifyPrincipals" + + .line 67 + invoke-direct {v0, v1}, Lorg/apache/harmony/javax/security/auth/AuthPermission;->(Ljava/lang/String;)V + + sput-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_PRINCIPALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 70 + new-instance v0, Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 71 + const-string v1, "modifyPrivateCredentials" + + .line 70 + invoke-direct {v0, v1}, Lorg/apache/harmony/javax/security/auth/AuthPermission;->(Ljava/lang/String;)V + + sput-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_PRIVATE_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 73 + new-instance v0, Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 74 + const-string v1, "modifyPublicCredentials" + + .line 73 + invoke-direct {v0, v1}, Lorg/apache/harmony/javax/security/auth/AuthPermission;->(Ljava/lang/String;)V + + sput-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_PUBLIC_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 76 + new-instance v0, Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 77 + const-string v1, "setReadOnly" + + .line 76 + invoke-direct {v0, v1}, Lorg/apache/harmony/javax/security/auth/AuthPermission;->(Ljava/lang/String;)V + + sput-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_READ_ONLY:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + .line 55 + return-void +.end method + +.method public constructor ()V + .locals 2 + + .prologue + .line 94 + invoke-direct {p0}, Ljava/lang/Object;->()V + + .line 95 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PRINCIPALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + .line 96 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PUBLIC_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + .line 97 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PRIVATE_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + .line 99 + const/4 v0, 0x0 + + iput-boolean v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->readOnly:Z + + .line 100 + return-void +.end method + +.method public constructor (ZLjava/util/Set;Ljava/util/Set;Ljava/util/Set;)V + .locals 2 + .param p1, "readOnly" # Z + .annotation system Ldalvik/annotation/Signature; + value = { + "(Z", + "Ljava/util/Set", + "<+", + "Ljava/security/Principal;", + ">;", + "Ljava/util/Set", + "<*>;", + "Ljava/util/Set", + "<*>;)V" + } + .end annotation + + .prologue + .line 119 + .local p2, "subjPrincipals":Ljava/util/Set;, "Ljava/util/Set<+Ljava/security/Principal;>;" + .local p3, "pubCredentials":Ljava/util/Set;, "Ljava/util/Set<*>;" + .local p4, "privCredentials":Ljava/util/Set;, "Ljava/util/Set<*>;" + invoke-direct {p0}, Ljava/lang/Object;->()V + + .line 122 + if-eqz p2, :cond_0 + + if-eqz p3, :cond_0 + + if-nez p4, :cond_1 + + .line 123 + :cond_0 + new-instance v0, Ljava/lang/NullPointerException; + + invoke-direct {v0}, Ljava/lang/NullPointerException;->()V + + throw v0 + + .line 126 + :cond_1 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PRINCIPALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1, p2}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;Ljava/util/Collection;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + .line 127 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PUBLIC_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1, p3}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;Ljava/util/Collection;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + .line 128 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PRIVATE_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1, p4}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;Ljava/util/Collection;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + .line 130 + iput-boolean p1, p0, Lorg/apache/harmony/javax/security/auth/Subject;->readOnly:Z + + .line 131 + return-void +.end method + +.method static synthetic access$0(Lorg/apache/harmony/javax/security/auth/Subject;)V + .locals 0 + + .prologue + .line 514 + invoke-direct {p0}, Lorg/apache/harmony/javax/security/auth/Subject;->checkState()V + + return-void +.end method + +.method static synthetic access$1(Ljava/security/Permission;)V + .locals 0 + + .prologue + .line 506 + invoke-static {p0}, Lorg/apache/harmony/javax/security/auth/Subject;->checkPermission(Ljava/security/Permission;)V + + return-void +.end method + +.method static synthetic access$2()Lorg/apache/harmony/javax/security/auth/AuthPermission; + .locals 1 + + .prologue + .line 67 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_PRINCIPALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + return-object v0 +.end method + +.method static synthetic access$3()Lorg/apache/harmony/javax/security/auth/AuthPermission; + .locals 1 + + .prologue + .line 70 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_PRIVATE_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + return-object v0 +.end method + +.method static synthetic access$4(Lorg/apache/harmony/javax/security/auth/Subject;)Ljava/util/Set; + .locals 1 + + .prologue + .line 79 + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + return-object v0 +.end method + +.method static synthetic access$5()Lorg/apache/harmony/javax/security/auth/AuthPermission; + .locals 1 + + .prologue + .line 73 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_PUBLIC_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + return-object v0 +.end method + +.method private static checkPermission(Ljava/security/Permission;)V + .locals 1 + .param p0, "p" # Ljava/security/Permission; + + .prologue + .line 507 + invoke-static {}, Ljava/lang/System;->getSecurityManager()Ljava/lang/SecurityManager; + + move-result-object v0 + + .line 508 + .local v0, "sm":Ljava/lang/SecurityManager; + if-eqz v0, :cond_0 + + .line 509 + invoke-virtual {v0, p0}, Ljava/lang/SecurityManager;->checkPermission(Ljava/security/Permission;)V + + .line 511 + :cond_0 + return-void +.end method + +.method private checkState()V + .locals 2 + + .prologue + .line 515 + iget-boolean v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->readOnly:Z + + if-eqz v0, :cond_0 + + .line 516 + new-instance v0, Ljava/lang/IllegalStateException; + + const-string v1, "auth.0A" + + invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V + + throw v0 + + .line 518 + :cond_0 + return-void +.end method + +.method public static doAs(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedAction;)Ljava/lang/Object; + .locals 1 + .param p0, "subject" # Lorg/apache/harmony/javax/security/auth/Subject; + .param p1, "action" # Ljava/security/PrivilegedAction; + + .prologue + .line 146 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_AS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-static {v0}, Lorg/apache/harmony/javax/security/auth/Subject;->checkPermission(Ljava/security/Permission;)V + + .line 148 + invoke-static {}, Ljava/security/AccessController;->getContext()Ljava/security/AccessControlContext; + + move-result-object v0 + + invoke-static {p0, p1, v0}, Lorg/apache/harmony/javax/security/auth/Subject;->doAs_PrivilegedAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + +.method public static doAs(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;)Ljava/lang/Object; + .locals 1 + .param p0, "subject" # Lorg/apache/harmony/javax/security/auth/Subject; + .param p1, "action" # Ljava/security/PrivilegedExceptionAction; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/security/PrivilegedActionException; + } + .end annotation + + .prologue + .line 223 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_AS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-static {v0}, Lorg/apache/harmony/javax/security/auth/Subject;->checkPermission(Ljava/security/Permission;)V + + .line 225 + invoke-static {}, Ljava/security/AccessController;->getContext()Ljava/security/AccessControlContext; + + move-result-object v0 + + invoke-static {p0, p1, v0}, Lorg/apache/harmony/javax/security/auth/Subject;->doAs_PrivilegedExceptionAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v0 + + return-object v0 +.end method + +.method public static doAsPrivileged(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + .locals 2 + .param p0, "subject" # Lorg/apache/harmony/javax/security/auth/Subject; + .param p1, "action" # Ljava/security/PrivilegedAction; + .param p2, "context" # Ljava/security/AccessControlContext; + + .prologue + .line 170 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_AS_PRIVILEGED:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-static {v0}, Lorg/apache/harmony/javax/security/auth/Subject;->checkPermission(Ljava/security/Permission;)V + + .line 172 + if-nez p2, :cond_0 + + .line 173 + new-instance v0, Ljava/security/AccessControlContext; + + .line 174 + const/4 v1, 0x0 + + new-array v1, v1, [Ljava/security/ProtectionDomain; + + invoke-direct {v0, v1}, Ljava/security/AccessControlContext;->([Ljava/security/ProtectionDomain;)V + + .line 173 + invoke-static {p0, p1, v0}, Lorg/apache/harmony/javax/security/auth/Subject;->doAs_PrivilegedAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v0 + + .line 176 + :goto_0 + return-object v0 + + :cond_0 + invoke-static {p0, p1, p2}, Lorg/apache/harmony/javax/security/auth/Subject;->doAs_PrivilegedAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v0 + + goto :goto_0 +.end method + +.method public static doAsPrivileged(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + .locals 2 + .param p0, "subject" # Lorg/apache/harmony/javax/security/auth/Subject; + .param p1, "action" # Ljava/security/PrivilegedExceptionAction; + .param p2, "context" # Ljava/security/AccessControlContext; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/security/PrivilegedActionException; + } + .end annotation + + .prologue + .line 250 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_AS_PRIVILEGED:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-static {v0}, Lorg/apache/harmony/javax/security/auth/Subject;->checkPermission(Ljava/security/Permission;)V + + .line 252 + if-nez p2, :cond_0 + + .line 254 + new-instance v0, Ljava/security/AccessControlContext; + + const/4 v1, 0x0 + + new-array v1, v1, [Ljava/security/ProtectionDomain; + + invoke-direct {v0, v1}, Ljava/security/AccessControlContext;->([Ljava/security/ProtectionDomain;)V + + .line 253 + invoke-static {p0, p1, v0}, Lorg/apache/harmony/javax/security/auth/Subject;->doAs_PrivilegedExceptionAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v0 + + .line 256 + :goto_0 + return-object v0 + + :cond_0 + invoke-static {p0, p1, p2}, Lorg/apache/harmony/javax/security/auth/Subject;->doAs_PrivilegedExceptionAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v0 + + goto :goto_0 +.end method + +.method private static doAs_PrivilegedAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + .locals 4 + .param p0, "subject" # Lorg/apache/harmony/javax/security/auth/Subject; + .param p1, "action" # Ljava/security/PrivilegedAction; + .param p2, "context" # Ljava/security/AccessControlContext; + + .prologue + .line 187 + if-nez p0, :cond_0 + + .line 190 + const/4 v0, 0x0 + + .line 195 + .local v0, "combiner":Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + :goto_0 + new-instance v1, Lorg/apache/harmony/javax/security/auth/Subject$1; + + invoke-direct {v1, p2, v0}, Lorg/apache/harmony/javax/security/auth/Subject$1;->(Ljava/security/AccessControlContext;Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner;)V + + .line 202 + .local v1, "dccAction":Ljava/security/PrivilegedAction; + invoke-static {v1}, Ljava/security/AccessController;->doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object; + + move-result-object v2 + + check-cast v2, Ljava/security/AccessControlContext; + + .line 204 + .local v2, "newContext":Ljava/security/AccessControlContext; + invoke-static {p1, v2}, Ljava/security/AccessController;->doPrivileged(Ljava/security/PrivilegedAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v3 + + return-object v3 + + .line 192 + .end local v0 # "combiner":Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + .end local v1 # "dccAction":Ljava/security/PrivilegedAction; + .end local v2 # "newContext":Ljava/security/AccessControlContext; + :cond_0 + new-instance v0, Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + + invoke-direct {v0, p0}, Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner;->(Lorg/apache/harmony/javax/security/auth/Subject;)V + + .restart local v0 # "combiner":Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + goto :goto_0 +.end method + +.method private static doAs_PrivilegedExceptionAction(Lorg/apache/harmony/javax/security/auth/Subject;Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + .locals 4 + .param p0, "subject" # Lorg/apache/harmony/javax/security/auth/Subject; + .param p1, "action" # Ljava/security/PrivilegedExceptionAction; + .param p2, "context" # Ljava/security/AccessControlContext; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/security/PrivilegedActionException; + } + .end annotation + + .prologue + .line 268 + if-nez p0, :cond_0 + + .line 271 + const/4 v0, 0x0 + + .line 276 + .local v0, "combiner":Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + :goto_0 + new-instance v1, Lorg/apache/harmony/javax/security/auth/Subject$2; + + invoke-direct {v1, p2, v0}, Lorg/apache/harmony/javax/security/auth/Subject$2;->(Ljava/security/AccessControlContext;Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner;)V + + .line 282 + .local v1, "dccAction":Ljava/security/PrivilegedAction;, "Ljava/security/PrivilegedAction;" + invoke-static {v1}, Ljava/security/AccessController;->doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object; + + move-result-object v2 + + check-cast v2, Ljava/security/AccessControlContext; + + .line 284 + .local v2, "newContext":Ljava/security/AccessControlContext; + invoke-static {p1, v2}, Ljava/security/AccessController;->doPrivileged(Ljava/security/PrivilegedExceptionAction;Ljava/security/AccessControlContext;)Ljava/lang/Object; + + move-result-object v3 + + return-object v3 + + .line 273 + .end local v0 # "combiner":Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + .end local v1 # "dccAction":Ljava/security/PrivilegedAction;, "Ljava/security/PrivilegedAction;" + .end local v2 # "newContext":Ljava/security/AccessControlContext; + :cond_0 + new-instance v0, Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + + invoke-direct {v0, p0}, Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner;->(Lorg/apache/harmony/javax/security/auth/Subject;)V + + .restart local v0 # "combiner":Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + goto :goto_0 +.end method + +.method public static getSubject(Ljava/security/AccessControlContext;)Lorg/apache/harmony/javax/security/auth/Subject; + .locals 4 + .param p0, "context" # Ljava/security/AccessControlContext; + + .prologue + .line 488 + sget-object v2, Lorg/apache/harmony/javax/security/auth/Subject;->_SUBJECT:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-static {v2}, Lorg/apache/harmony/javax/security/auth/Subject;->checkPermission(Ljava/security/Permission;)V + + .line 489 + if-nez p0, :cond_0 + + .line 490 + new-instance v2, Ljava/lang/NullPointerException; + + const-string v3, "auth.09" + + invoke-direct {v2, v3}, Ljava/lang/NullPointerException;->(Ljava/lang/String;)V + + throw v2 + + .line 492 + :cond_0 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$3; + + invoke-direct {v0, p0}, Lorg/apache/harmony/javax/security/auth/Subject$3;->(Ljava/security/AccessControlContext;)V + + .line 497 + .local v0, "action":Ljava/security/PrivilegedAction;, "Ljava/security/PrivilegedAction;" + invoke-static {v0}, Ljava/security/AccessController;->doPrivileged(Ljava/security/PrivilegedAction;)Ljava/lang/Object; + + move-result-object v1 + + check-cast v1, Ljava/security/DomainCombiner; + + .line 499 + .local v1, "combiner":Ljava/security/DomainCombiner; + if-eqz v1, :cond_1 + + instance-of v2, v1, Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + + if-nez v2, :cond_2 + + .line 500 + :cond_1 + const/4 v2, 0x0 + + .line 502 + .end local v1 # "combiner":Ljava/security/DomainCombiner; + :goto_0 + return-object v2 + + .restart local v1 # "combiner":Ljava/security/DomainCombiner; + :cond_2 + check-cast v1, Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner; + + .end local v1 # "combiner":Ljava/security/DomainCombiner; + invoke-virtual {v1}, Lorg/apache/harmony/javax/security/auth/SubjectDomainCombiner;->getSubject()Lorg/apache/harmony/javax/security/auth/Subject; + + move-result-object v2 + + goto :goto_0 +.end method + +.method private readObject(Ljava/io/ObjectInputStream;)V + .locals 2 + .param p1, "in" # Ljava/io/ObjectInputStream; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException;, + Ljava/lang/ClassNotFoundException; + } + .end annotation + + .prologue + .line 467 + invoke-virtual {p1}, Ljava/io/ObjectInputStream;->defaultReadObject()V + + .line 469 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PUBLIC_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + .line 470 + new-instance v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + sget-object v1, Lorg/apache/harmony/javax/security/auth/Subject;->_PRIVATE_CREDENTIALS:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-direct {v0, p0, v1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->(Lorg/apache/harmony/javax/security/auth/Subject;Lorg/apache/harmony/javax/security/auth/AuthPermission;)V + + iput-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + .line 471 + return-void +.end method + +.method private writeObject(Ljava/io/ObjectOutputStream;)V + .locals 0 + .param p1, "out" # Ljava/io/ObjectOutputStream; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 474 + invoke-virtual {p1}, Ljava/io/ObjectOutputStream;->defaultWriteObject()V + + .line 475 + return-void +.end method + + +# virtual methods +.method public equals(Ljava/lang/Object;)Z + .locals 5 + .param p1, "obj" # Ljava/lang/Object; + + .prologue + const/4 v1, 0x1 + + const/4 v2, 0x0 + + .line 301 + if-ne p0, p1, :cond_1 + + .line 316 + :cond_0 + :goto_0 + return v1 + + .line 305 + :cond_1 + if-eqz p1, :cond_2 + + invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class; + + move-result-object v3 + + invoke-virtual {p1}, Ljava/lang/Object;->getClass()Ljava/lang/Class; + + move-result-object v4 + + if-eq v3, v4, :cond_3 + + :cond_2 + move v1, v2 + + .line 306 + goto :goto_0 + + :cond_3 + move-object v0, p1 + + .line 309 + check-cast v0, Lorg/apache/harmony/javax/security/auth/Subject; + + .line 311 + .local v0, "that":Lorg/apache/harmony/javax/security/auth/Subject; + iget-object v3, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + iget-object v4, v0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + invoke-interface {v3, v4}, Ljava/util/Set;->equals(Ljava/lang/Object;)Z + + move-result v3 + + if-eqz v3, :cond_4 + + .line 312 + iget-object v3, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + iget-object v4, v0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v3, v4}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->equals(Ljava/lang/Object;)Z + + move-result v3 + + if-eqz v3, :cond_4 + + .line 313 + iget-object v3, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + iget-object v4, v0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v3, v4}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->equals(Ljava/lang/Object;)Z + + move-result v3 + + if-nez v3, :cond_0 + + :cond_4 + move v1, v2 + + .line 316 + goto :goto_0 +.end method + +.method public getPrincipals()Ljava/util/Set; + .locals 1 + .annotation system Ldalvik/annotation/Signature; + value = { + "()", + "Ljava/util/Set", + "<", + "Ljava/security/Principal;", + ">;" + } + .end annotation + + .prologue + .line 325 + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + return-object v0 +.end method + +.method public getPrincipals(Ljava/lang/Class;)Ljava/util/Set; + .locals 1 + .annotation system Ldalvik/annotation/Signature; + value = { + "(", + "Ljava/lang/Class", + ";)", + "Ljava/util/Set", + ";" + } + .end annotation + + .prologue + .line 341 + .local p1, "c":Ljava/lang/Class;, "Ljava/lang/Class;" + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + check-cast v0, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v0, p1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->get(Ljava/lang/Class;)Ljava/util/Set; + + move-result-object v0 + + return-object v0 +.end method + +.method public getPrivateCredentials()Ljava/util/Set; + .locals 1 + .annotation system Ldalvik/annotation/Signature; + value = { + "()", + "Ljava/util/Set", + "<", + "Ljava/lang/Object;", + ">;" + } + .end annotation + + .prologue + .line 350 + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + return-object v0 +.end method + +.method public getPrivateCredentials(Ljava/lang/Class;)Ljava/util/Set; + .locals 1 + .annotation system Ldalvik/annotation/Signature; + value = { + "(", + "Ljava/lang/Class", + ";)", + "Ljava/util/Set", + ";" + } + .end annotation + + .prologue + .line 365 + .local p1, "c":Ljava/lang/Class;, "Ljava/lang/Class;" + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v0, p1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->get(Ljava/lang/Class;)Ljava/util/Set; + + move-result-object v0 + + return-object v0 +.end method + +.method public getPublicCredentials()Ljava/util/Set; + .locals 1 + .annotation system Ldalvik/annotation/Signature; + value = { + "()", + "Ljava/util/Set", + "<", + "Ljava/lang/Object;", + ">;" + } + .end annotation + + .prologue + .line 374 + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + return-object v0 +.end method + +.method public getPublicCredentials(Ljava/lang/Class;)Ljava/util/Set; + .locals 1 + .annotation system Ldalvik/annotation/Signature; + value = { + "(", + "Ljava/lang/Class", + ";)", + "Ljava/util/Set", + ";" + } + .end annotation + + .prologue + .line 390 + .local p1, "c":Ljava/lang/Class;, "Ljava/lang/Class;" + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v0, p1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->get(Ljava/lang/Class;)Ljava/util/Set; + + move-result-object v0 + + return-object v0 +.end method + +.method public hashCode()I + .locals 2 + + .prologue + .line 400 + iget-object v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + invoke-interface {v0}, Ljava/util/Set;->hashCode()I + + move-result v0 + + iget-object v1, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->hashCode()I + + move-result v1 + + add-int/2addr v0, v1 + + .line 401 + iget-object v1, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v1}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->hashCode()I + + move-result v1 + + .line 400 + add-int/2addr v0, v1 + + return v0 +.end method + +.method public isReadOnly()Z + .locals 1 + + .prologue + .line 422 + iget-boolean v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->readOnly:Z + + return v0 +.end method + +.method public setReadOnly()V + .locals 1 + + .prologue + .line 411 + sget-object v0, Lorg/apache/harmony/javax/security/auth/Subject;->_READ_ONLY:Lorg/apache/harmony/javax/security/auth/AuthPermission; + + invoke-static {v0}, Lorg/apache/harmony/javax/security/auth/Subject;->checkPermission(Ljava/security/Permission;)V + + .line 413 + const/4 v0, 0x1 + + iput-boolean v0, p0, Lorg/apache/harmony/javax/security/auth/Subject;->readOnly:Z + + .line 414 + return-void +.end method + +.method public toString()Ljava/lang/String; + .locals 6 + + .prologue + const/16 v5, 0xa + + .line 433 + new-instance v0, Ljava/lang/StringBuilder; + + const-string v4, "Subject:\n" + + invoke-direct {v0, v4}, Ljava/lang/StringBuilder;->(Ljava/lang/String;)V + + .line 435 + .local v0, "buf":Ljava/lang/StringBuilder; + iget-object v4, p0, Lorg/apache/harmony/javax/security/auth/Subject;->principals:Ljava/util/Set; + + invoke-interface {v4}, Ljava/util/Set;->iterator()Ljava/util/Iterator; + + move-result-object v2 + + .line 436 + .local v2, "it":Ljava/util/Iterator;, "Ljava/util/Iterator<*>;" + :goto_0 + invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z + + move-result v4 + + if-nez v4, :cond_0 + + .line 442 + iget-object v4, p0, Lorg/apache/harmony/javax/security/auth/Subject;->publicCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v4}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->iterator()Ljava/util/Iterator; + + move-result-object v2 + + .line 443 + :goto_1 + invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z + + move-result v4 + + if-nez v4, :cond_1 + + .line 449 + invoke-virtual {v0}, Ljava/lang/StringBuilder;->length()I + + move-result v4 + + add-int/lit8 v3, v4, -0x1 + + .line 450 + .local v3, "offset":I + iget-object v4, p0, Lorg/apache/harmony/javax/security/auth/Subject;->privateCredentials:Lorg/apache/harmony/javax/security/auth/Subject$SecureSet; + + invoke-virtual {v4}, Lorg/apache/harmony/javax/security/auth/Subject$SecureSet;->iterator()Ljava/util/Iterator; + + move-result-object v2 + + .line 452 + :goto_2 + :try_start_0 + invoke-interface {v2}, Ljava/util/Iterator;->hasNext()Z + :try_end_0 + .catch Ljava/lang/SecurityException; {:try_start_0 .. :try_end_0} :catch_0 + + move-result v4 + + if-nez v4, :cond_2 + + .line 461 + :goto_3 + invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v4 + + return-object v4 + + .line 437 + .end local v3 # "offset":I + :cond_0 + const-string v4, "\tPrincipal: " + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + .line 438 + invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object; + + move-result-object v4 + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; + + .line 439 + invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; + + goto :goto_0 + + .line 444 + :cond_1 + const-string v4, "\tPublic Credential: " + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + .line 445 + invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object; + + move-result-object v4 + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; + + .line 446 + invoke-virtual {v0, v5}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; + + goto :goto_1 + + .line 453 + .restart local v3 # "offset":I + :cond_2 + :try_start_1 + const-string v4, "\tPrivate Credential: " + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + .line 454 + invoke-interface {v2}, Ljava/util/Iterator;->next()Ljava/lang/Object; + + move-result-object v4 + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; + + .line 455 + const/16 v4, 0xa + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; + :try_end_1 + .catch Ljava/lang/SecurityException; {:try_start_1 .. :try_end_1} :catch_0 + + goto :goto_2 + + .line 457 + :catch_0 + move-exception v1 + + .line 458 + .local v1, "e":Ljava/lang/SecurityException; + invoke-virtual {v0}, Ljava/lang/StringBuilder;->length()I + + move-result v4 + + invoke-virtual {v0, v3, v4}, Ljava/lang/StringBuilder;->delete(II)Ljava/lang/StringBuilder; + + .line 459 + const-string v4, "\tPrivate Credentials: no accessible information\n" + + invoke-virtual {v0, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + goto :goto_3 +.end method diff --git a/samples/Smali/ViewDragHelper.smali b/samples/Smali/ViewDragHelper.smali new file mode 100644 index 00000000..18760567 --- /dev/null +++ b/samples/Smali/ViewDragHelper.smali @@ -0,0 +1,4382 @@ +.class public Landroid/support/v4/widget/ViewDragHelper; +.super Ljava/lang/Object; +.source "ViewDragHelper.java" + + +# annotations +.annotation system Ldalvik/annotation/MemberClasses; + value = { + Landroid/support/v4/widget/ViewDragHelper$Callback; + } +.end annotation + + +# static fields +.field private static final BASE_SETTLE_DURATION:I = 0x100 + +.field public static final DIRECTION_ALL:I = 0x3 + +.field public static final DIRECTION_HORIZONTAL:I = 0x1 + +.field public static final DIRECTION_VERTICAL:I = 0x2 + +.field public static final EDGE_ALL:I = 0xf + +.field public static final EDGE_BOTTOM:I = 0x8 + +.field public static final EDGE_LEFT:I = 0x1 + +.field public static final EDGE_RIGHT:I = 0x2 + +.field private static final EDGE_SIZE:I = 0x14 + +.field public static final EDGE_TOP:I = 0x4 + +.field public static final INVALID_POINTER:I = -0x1 + +.field private static final MAX_SETTLE_DURATION:I = 0x258 + +.field public static final STATE_DRAGGING:I = 0x1 + +.field public static final STATE_IDLE:I = 0x0 + +.field public static final STATE_SETTLING:I = 0x2 + +.field private static final TAG:Ljava/lang/String; = "ViewDragHelper" + +.field private static final sInterpolator:Landroid/view/animation/Interpolator; + + +# instance fields +.field private mActivePointerId:I + +.field private final mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + +.field private mCapturedView:Landroid/view/View; + +.field private mDragState:I + +.field private mEdgeDragsInProgress:[I + +.field private mEdgeDragsLocked:[I + +.field private mEdgeSize:I + +.field private mInitialEdgesTouched:[I + +.field private mInitialMotionX:[F + +.field private mInitialMotionY:[F + +.field private mLastMotionX:[F + +.field private mLastMotionY:[F + +.field private mMaxVelocity:F + +.field private mMinVelocity:F + +.field private final mParentView:Landroid/view/ViewGroup; + +.field private mPointersDown:I + +.field private mReleaseInProgress:Z + +.field private mScroller:Landroid/support/v4/widget/ScrollerCompat; + +.field private final mSetIdleRunnable:Ljava/lang/Runnable; + +.field private mTouchSlop:I + +.field private mTrackingEdges:I + +.field private mVelocityTracker:Landroid/view/VelocityTracker; + + +# direct methods +.method static constructor ()V + .registers 1 + + .prologue + .line 326 + new-instance v0, Landroid/support/v4/widget/ViewDragHelper$1; + + invoke-direct {v0}, Landroid/support/v4/widget/ViewDragHelper$1;->()V + + sput-object v0, Landroid/support/v4/widget/ViewDragHelper;->sInterpolator:Landroid/view/animation/Interpolator; + + return-void +.end method + +.method private constructor (Landroid/content/Context;Landroid/view/ViewGroup;Landroid/support/v4/widget/ViewDragHelper$Callback;)V + .registers 8 + .param p1, "context" # Landroid/content/Context; + .param p2, "forParent" # Landroid/view/ViewGroup; + .param p3, "cb" # Landroid/support/v4/widget/ViewDragHelper$Callback; + + .prologue + .line 373 + invoke-direct {p0}, Ljava/lang/Object;->()V + + .line 115 + const/4 v2, -0x1 + + iput v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + .line 333 + new-instance v2, Landroid/support/v4/widget/ViewDragHelper$2; + + invoke-direct {v2, p0}, Landroid/support/v4/widget/ViewDragHelper$2;->(Landroid/support/v4/widget/ViewDragHelper;)V + + iput-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mSetIdleRunnable:Ljava/lang/Runnable; + + .line 374 + if-nez p2, :cond_17 + + .line 375 + new-instance v2, Ljava/lang/IllegalArgumentException; + + const-string v3, "Parent view may not be null" + + invoke-direct {v2, v3}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V + + throw v2 + + .line 377 + :cond_17 + if-nez p3, :cond_21 + + .line 378 + new-instance v2, Ljava/lang/IllegalArgumentException; + + const-string v3, "Callback may not be null" + + invoke-direct {v2, v3}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V + + throw v2 + + .line 381 + :cond_21 + iput-object p2, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + .line 382 + iput-object p3, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + .line 384 + invoke-static {p1}, Landroid/view/ViewConfiguration;->get(Landroid/content/Context;)Landroid/view/ViewConfiguration; + + move-result-object v1 + + .line 385 + .local v1, "vc":Landroid/view/ViewConfiguration; + invoke-virtual {p1}, Landroid/content/Context;->getResources()Landroid/content/res/Resources; + + move-result-object v2 + + invoke-virtual {v2}, Landroid/content/res/Resources;->getDisplayMetrics()Landroid/util/DisplayMetrics; + + move-result-object v2 + + iget v0, v2, Landroid/util/DisplayMetrics;->density:F + + .line 386 + .local v0, "density":F + const/high16 v2, 0x41a00000 + + mul-float/2addr v2, v0 + + const/high16 v3, 0x3f000000 + + add-float/2addr v2, v3 + + float-to-int v2, v2 + + iput v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeSize:I + + .line 388 + invoke-virtual {v1}, Landroid/view/ViewConfiguration;->getScaledTouchSlop()I + + move-result v2 + + iput v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + .line 389 + invoke-virtual {v1}, Landroid/view/ViewConfiguration;->getScaledMaximumFlingVelocity()I + + move-result v2 + + int-to-float v2, v2 + + iput v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mMaxVelocity:F + + .line 390 + invoke-virtual {v1}, Landroid/view/ViewConfiguration;->getScaledMinimumFlingVelocity()I + + move-result v2 + + int-to-float v2, v2 + + iput v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mMinVelocity:F + + .line 391 + sget-object v2, Landroid/support/v4/widget/ViewDragHelper;->sInterpolator:Landroid/view/animation/Interpolator; + + invoke-static {p1, v2}, Landroid/support/v4/widget/ScrollerCompat;->create(Landroid/content/Context;Landroid/view/animation/Interpolator;)Landroid/support/v4/widget/ScrollerCompat; + + move-result-object v2 + + iput-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + .line 392 + return-void +.end method + +.method private checkNewEdgeDrag(FFII)Z + .registers 10 + .param p1, "delta" # F + .param p2, "odelta" # F + .param p3, "pointerId" # I + .param p4, "edge" # I + + .prologue + const/4 v2, 0x0 + + .line 1218 + invoke-static {p1}, Ljava/lang/Math;->abs(F)F + + move-result v0 + + .line 1219 + .local v0, "absDelta":F + invoke-static {p2}, Ljava/lang/Math;->abs(F)F + + move-result v1 + + .line 1221 + .local v1, "absODelta":F + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + aget v3, v3, p3 + + and-int/2addr v3, p4 + + if-ne v3, p4, :cond_31 + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + and-int/2addr v3, p4 + + if-eqz v3, :cond_31 + + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsLocked:[I + + aget v3, v3, p3 + + and-int/2addr v3, p4 + + if-eq v3, p4, :cond_31 + + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + aget v3, v3, p3 + + and-int/2addr v3, p4 + + if-eq v3, p4, :cond_31 + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v3, v3 + + cmpg-float v3, v0, v3 + + if-gtz v3, :cond_32 + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v3, v3 + + cmpg-float v3, v1, v3 + + if-gtz v3, :cond_32 + + .line 1231 + :cond_31 + :goto_31 + return v2 + + .line 1227 + :cond_32 + const/high16 v3, 0x3f000000 + + mul-float/2addr v3, v1 + + cmpg-float v3, v0, v3 + + if-gez v3, :cond_49 + + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v3, p4}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onEdgeLock(I)Z + + move-result v3 + + if-eqz v3, :cond_49 + + .line 1228 + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsLocked:[I + + aget v4, v3, p3 + + or-int/2addr v4, p4 + + aput v4, v3, p3 + + goto :goto_31 + + .line 1231 + :cond_49 + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + aget v3, v3, p3 + + and-int/2addr v3, p4 + + if-nez v3, :cond_31 + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v3, v3 + + cmpl-float v3, v0, v3 + + if-lez v3, :cond_31 + + const/4 v2, 0x1 + + goto :goto_31 +.end method + +.method private checkTouchSlop(Landroid/view/View;FF)Z + .registers 11 + .param p1, "child" # Landroid/view/View; + .param p2, "dx" # F + .param p3, "dy" # F + + .prologue + const/4 v2, 0x1 + + const/4 v3, 0x0 + + .line 1245 + if-nez p1, :cond_6 + + move v2, v3 + + .line 1258 + :cond_5 + :goto_5 + return v2 + + .line 1248 + :cond_6 + iget-object v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v4, p1}, Landroid/support/v4/widget/ViewDragHelper$Callback;->getViewHorizontalDragRange(Landroid/view/View;)I + + move-result v4 + + if-lez v4, :cond_2d + + move v0, v2 + + .line 1249 + .local v0, "checkHorizontal":Z + :goto_f + iget-object v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v4, p1}, Landroid/support/v4/widget/ViewDragHelper$Callback;->getViewVerticalDragRange(Landroid/view/View;)I + + move-result v4 + + if-lez v4, :cond_2f + + move v1, v2 + + .line 1251 + .local v1, "checkVertical":Z + :goto_18 + if-eqz v0, :cond_31 + + if-eqz v1, :cond_31 + + .line 1252 + mul-float v4, p2, p2 + + mul-float v5, p3, p3 + + add-float/2addr v4, v5 + + iget v5, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + iget v6, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + mul-int/2addr v5, v6 + + int-to-float v5, v5 + + cmpl-float v4, v4, v5 + + if-gtz v4, :cond_5 + + move v2, v3 + + goto :goto_5 + + .end local v0 # "checkHorizontal":Z + .end local v1 # "checkVertical":Z + :cond_2d + move v0, v3 + + .line 1248 + goto :goto_f + + .restart local v0 # "checkHorizontal":Z + :cond_2f + move v1, v3 + + .line 1249 + goto :goto_18 + + .line 1253 + .restart local v1 # "checkVertical":Z + :cond_31 + if-eqz v0, :cond_40 + + .line 1254 + invoke-static {p2}, Ljava/lang/Math;->abs(F)F + + move-result v4 + + iget v5, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v5, v5 + + cmpl-float v4, v4, v5 + + if-gtz v4, :cond_5 + + move v2, v3 + + goto :goto_5 + + .line 1255 + :cond_40 + if-eqz v1, :cond_4f + + .line 1256 + invoke-static {p3}, Ljava/lang/Math;->abs(F)F + + move-result v4 + + iget v5, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v5, v5 + + cmpl-float v4, v4, v5 + + if-gtz v4, :cond_5 + + move v2, v3 + + goto :goto_5 + + :cond_4f + move v2, v3 + + .line 1258 + goto :goto_5 +.end method + +.method private clampMag(FFF)F + .registers 7 + .param p1, "value" # F + .param p2, "absMin" # F + .param p3, "absMax" # F + + .prologue + const/4 v1, 0x0 + + .line 667 + invoke-static {p1}, Ljava/lang/Math;->abs(F)F + + move-result v0 + + .line 668 + .local v0, "absValue":F + cmpg-float v2, v0, p2 + + if-gez v2, :cond_b + + move p3, v1 + + .line 670 + .end local p3 # "absMax":F + :cond_a + :goto_a + return p3 + + .line 669 + .restart local p3 # "absMax":F + :cond_b + cmpl-float v2, v0, p3 + + if-lez v2, :cond_15 + + cmpl-float v1, p1, v1 + + if-gtz v1, :cond_a + + neg-float p3, p3 + + goto :goto_a + + :cond_15 + move p3, p1 + + .line 670 + goto :goto_a +.end method + +.method private clampMag(III)I + .registers 5 + .param p1, "value" # I + .param p2, "absMin" # I + .param p3, "absMax" # I + + .prologue + .line 650 + invoke-static {p1}, Ljava/lang/Math;->abs(I)I + + move-result v0 + + .line 651 + .local v0, "absValue":I + if-ge v0, p2, :cond_8 + + const/4 p3, 0x0 + + .line 653 + .end local p3 # "absMax":I + :cond_7 + :goto_7 + return p3 + + .line 652 + .restart local p3 # "absMax":I + :cond_8 + if-le v0, p3, :cond_e + + if-gtz p1, :cond_7 + + neg-int p3, p3 + + goto :goto_7 + + :cond_e + move p3, p1 + + .line 653 + goto :goto_7 +.end method + +.method private clearMotionHistory()V + .registers 4 + + .prologue + const/4 v2, 0x0 + + const/4 v1, 0x0 + + .line 770 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + if-nez v0, :cond_7 + + .line 781 + :goto_6 + return-void + + .line 773 + :cond_7 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + invoke-static {v0, v1}, Ljava/util/Arrays;->fill([FF)V + + .line 774 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + invoke-static {v0, v1}, Ljava/util/Arrays;->fill([FF)V + + .line 775 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + invoke-static {v0, v1}, Ljava/util/Arrays;->fill([FF)V + + .line 776 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + invoke-static {v0, v1}, Ljava/util/Arrays;->fill([FF)V + + .line 777 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + invoke-static {v0, v2}, Ljava/util/Arrays;->fill([II)V + + .line 778 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + invoke-static {v0, v2}, Ljava/util/Arrays;->fill([II)V + + .line 779 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsLocked:[I + + invoke-static {v0, v2}, Ljava/util/Arrays;->fill([II)V + + .line 780 + iput v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mPointersDown:I + + goto :goto_6 +.end method + +.method private clearMotionHistory(I)V + .registers 5 + .param p1, "pointerId" # I + + .prologue + const/4 v2, 0x0 + + const/4 v1, 0x0 + + .line 784 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + if-nez v0, :cond_7 + + .line 795 + :goto_6 + return-void + + .line 787 + :cond_7 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + aput v1, v0, p1 + + .line 788 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + aput v1, v0, p1 + + .line 789 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + aput v1, v0, p1 + + .line 790 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + aput v1, v0, p1 + + .line 791 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + aput v2, v0, p1 + + .line 792 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + aput v2, v0, p1 + + .line 793 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsLocked:[I + + aput v2, v0, p1 + + .line 794 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mPointersDown:I + + const/4 v1, 0x1 + + shl-int/2addr v1, p1 + + xor-int/lit8 v1, v1, -0x1 + + and-int/2addr v0, v1 + + iput v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mPointersDown:I + + goto :goto_6 +.end method + +.method private computeAxisDuration(III)I + .registers 14 + .param p1, "delta" # I + .param p2, "velocity" # I + .param p3, "motionRange" # I + + .prologue + const/high16 v9, 0x3f800000 + + .line 618 + if-nez p1, :cond_6 + + .line 619 + const/4 v6, 0x0 + + .line 636 + :goto_5 + return v6 + + .line 622 + :cond_6 + iget-object v6, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + invoke-virtual {v6}, Landroid/view/ViewGroup;->getWidth()I + + move-result v5 + + .line 623 + .local v5, "width":I + div-int/lit8 v3, v5, 0x2 + + .line 624 + .local v3, "halfWidth":I + invoke-static {p1}, Ljava/lang/Math;->abs(I)I + + move-result v6 + + int-to-float v6, v6 + + int-to-float v7, v5 + + div-float/2addr v6, v7 + + invoke-static {v9, v6}, Ljava/lang/Math;->min(FF)F + + move-result v1 + + .line 625 + .local v1, "distanceRatio":F + int-to-float v6, v3 + + int-to-float v7, v3 + + invoke-direct {p0, v1}, Landroid/support/v4/widget/ViewDragHelper;->distanceInfluenceForSnapDuration(F)F + + move-result v8 + + mul-float/2addr v7, v8 + + add-float v0, v6, v7 + + .line 629 + .local v0, "distance":F + invoke-static {p2}, Ljava/lang/Math;->abs(I)I + + move-result p2 + + .line 630 + if-lez p2, :cond_3f + + .line 631 + const/high16 v6, 0x447a0000 + + int-to-float v7, p2 + + div-float v7, v0, v7 + + invoke-static {v7}, Ljava/lang/Math;->abs(F)F + + move-result v7 + + mul-float/2addr v6, v7 + + invoke-static {v6}, Ljava/lang/Math;->round(F)I + + move-result v6 + + mul-int/lit8 v2, v6, 0x4 + + .line 636 + .local v2, "duration":I + :goto_38 + const/16 v6, 0x258 + + invoke-static {v2, v6}, Ljava/lang/Math;->min(II)I + + move-result v6 + + goto :goto_5 + + .line 633 + .end local v2 # "duration":I + :cond_3f + invoke-static {p1}, Ljava/lang/Math;->abs(I)I + + move-result v6 + + int-to-float v6, v6 + + int-to-float v7, p3 + + div-float v4, v6, v7 + + .line 634 + .local v4, "range":F + add-float v6, v4, v9 + + const/high16 v7, 0x43800000 + + mul-float/2addr v6, v7 + + float-to-int v2, v6 + + .restart local v2 # "duration":I + goto :goto_38 +.end method + +.method private computeSettleDuration(Landroid/view/View;IIII)I + .registers 20 + .param p1, "child" # Landroid/view/View; + .param p2, "dx" # I + .param p3, "dy" # I + .param p4, "xvel" # I + .param p5, "yvel" # I + + .prologue + .line 597 + iget v12, p0, Landroid/support/v4/widget/ViewDragHelper;->mMinVelocity:F + + float-to-int v12, v12 + + iget v13, p0, Landroid/support/v4/widget/ViewDragHelper;->mMaxVelocity:F + + float-to-int v13, v13 + + move/from16 v0, p4 + + invoke-direct {p0, v0, v12, v13}, Landroid/support/v4/widget/ViewDragHelper;->clampMag(III)I + + move-result p4 + + .line 598 + iget v12, p0, Landroid/support/v4/widget/ViewDragHelper;->mMinVelocity:F + + float-to-int v12, v12 + + iget v13, p0, Landroid/support/v4/widget/ViewDragHelper;->mMaxVelocity:F + + float-to-int v13, v13 + + move/from16 v0, p5 + + invoke-direct {p0, v0, v12, v13}, Landroid/support/v4/widget/ViewDragHelper;->clampMag(III)I + + move-result p5 + + .line 599 + invoke-static/range {p2 .. p2}, Ljava/lang/Math;->abs(I)I + + move-result v2 + + .line 600 + .local v2, "absDx":I + invoke-static/range {p3 .. p3}, Ljava/lang/Math;->abs(I)I + + move-result v3 + + .line 601 + .local v3, "absDy":I + invoke-static/range {p4 .. p4}, Ljava/lang/Math;->abs(I)I + + move-result v4 + + .line 602 + .local v4, "absXVel":I + invoke-static/range {p5 .. p5}, Ljava/lang/Math;->abs(I)I + + move-result v5 + + .line 603 + .local v5, "absYVel":I + add-int v7, v4, v5 + + .line 604 + .local v7, "addedVel":I + add-int v6, v2, v3 + + .line 606 + .local v6, "addedDistance":I + if-eqz p4, :cond_5b + + int-to-float v12, v4 + + int-to-float v13, v7 + + div-float v9, v12, v13 + + .line 608 + .local v9, "xweight":F + :goto_32 + if-eqz p5, :cond_60 + + int-to-float v12, v5 + + int-to-float v13, v7 + + div-float v11, v12, v13 + + .line 611 + .local v11, "yweight":F + :goto_38 + iget-object v12, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v12, p1}, Landroid/support/v4/widget/ViewDragHelper$Callback;->getViewHorizontalDragRange(Landroid/view/View;)I + + move-result v12 + + move/from16 v0, p2 + + move/from16 v1, p4 + + invoke-direct {p0, v0, v1, v12}, Landroid/support/v4/widget/ViewDragHelper;->computeAxisDuration(III)I + + move-result v8 + + .line 612 + .local v8, "xduration":I + iget-object v12, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v12, p1}, Landroid/support/v4/widget/ViewDragHelper$Callback;->getViewVerticalDragRange(Landroid/view/View;)I + + move-result v12 + + move/from16 v0, p3 + + move/from16 v1, p5 + + invoke-direct {p0, v0, v1, v12}, Landroid/support/v4/widget/ViewDragHelper;->computeAxisDuration(III)I + + move-result v10 + + .line 614 + .local v10, "yduration":I + int-to-float v12, v8 + + mul-float/2addr v12, v9 + + int-to-float v13, v10 + + mul-float/2addr v13, v11 + + add-float/2addr v12, v13 + + float-to-int v12, v12 + + return v12 + + .line 606 + .end local v8 # "xduration":I + .end local v9 # "xweight":F + .end local v10 # "yduration":I + .end local v11 # "yweight":F + :cond_5b + int-to-float v12, v2 + + int-to-float v13, v6 + + div-float v9, v12, v13 + + goto :goto_32 + + .line 608 + .restart local v9 # "xweight":F + :cond_60 + int-to-float v12, v3 + + int-to-float v13, v6 + + div-float v11, v12, v13 + + goto :goto_38 +.end method + +.method public static create(Landroid/view/ViewGroup;FLandroid/support/v4/widget/ViewDragHelper$Callback;)Landroid/support/v4/widget/ViewDragHelper; + .registers 6 + .param p0, "forParent" # Landroid/view/ViewGroup; + .param p1, "sensitivity" # F + .param p2, "cb" # Landroid/support/v4/widget/ViewDragHelper$Callback; + + .prologue + .line 360 + invoke-static {p0, p2}, Landroid/support/v4/widget/ViewDragHelper;->create(Landroid/view/ViewGroup;Landroid/support/v4/widget/ViewDragHelper$Callback;)Landroid/support/v4/widget/ViewDragHelper; + + move-result-object v0 + + .line 361 + .local v0, "helper":Landroid/support/v4/widget/ViewDragHelper; + iget v1, v0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v1, v1 + + const/high16 v2, 0x3f800000 + + div-float/2addr v2, p1 + + mul-float/2addr v1, v2 + + float-to-int v1, v1 + + iput v1, v0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + .line 362 + return-object v0 +.end method + +.method public static create(Landroid/view/ViewGroup;Landroid/support/v4/widget/ViewDragHelper$Callback;)Landroid/support/v4/widget/ViewDragHelper; + .registers 4 + .param p0, "forParent" # Landroid/view/ViewGroup; + .param p1, "cb" # Landroid/support/v4/widget/ViewDragHelper$Callback; + + .prologue + .line 347 + new-instance v0, Landroid/support/v4/widget/ViewDragHelper; + + invoke-virtual {p0}, Landroid/view/ViewGroup;->getContext()Landroid/content/Context; + + move-result-object v1 + + invoke-direct {v0, v1, p0, p1}, Landroid/support/v4/widget/ViewDragHelper;->(Landroid/content/Context;Landroid/view/ViewGroup;Landroid/support/v4/widget/ViewDragHelper$Callback;)V + + return-object v0 +.end method + +.method private dispatchViewReleased(FF)V + .registers 7 + .param p1, "xvel" # F + .param p2, "yvel" # F + + .prologue + const/4 v3, 0x1 + + const/4 v2, 0x0 + + .line 759 + iput-boolean v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mReleaseInProgress:Z + + .line 760 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0, v1, p1, p2}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onViewReleased(Landroid/view/View;FF)V + + .line 761 + iput-boolean v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mReleaseInProgress:Z + + .line 763 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + if-ne v0, v3, :cond_14 + + .line 765 + invoke-virtual {p0, v2}, Landroid/support/v4/widget/ViewDragHelper;->setDragState(I)V + + .line 767 + :cond_14 + return-void +.end method + +.method private distanceInfluenceForSnapDuration(F)F + .registers 6 + .param p1, "f" # F + + .prologue + .line 674 + const/high16 v0, 0x3f000000 + + sub-float/2addr p1, v0 + + .line 675 + float-to-double v0, p1 + + const-wide v2, 0x3fde28c7460698c7L + + mul-double/2addr v0, v2 + + double-to-float p1, v0 + + .line 676 + float-to-double v0, p1 + + invoke-static {v0, v1}, Ljava/lang/Math;->sin(D)D + + move-result-wide v0 + + double-to-float v0, v0 + + return v0 +.end method + +.method private dragTo(IIII)V + .registers 13 + .param p1, "left" # I + .param p2, "top" # I + .param p3, "dx" # I + .param p4, "dy" # I + + .prologue + .line 1366 + move v2, p1 + + .line 1367 + .local v2, "clampedX":I + move v3, p2 + + .line 1368 + .local v3, "clampedY":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0}, Landroid/view/View;->getLeft()I + + move-result v6 + + .line 1369 + .local v6, "oldLeft":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0}, Landroid/view/View;->getTop()I + + move-result v7 + + .line 1370 + .local v7, "oldTop":I + if-eqz p3, :cond_1f + + .line 1371 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0, v1, p1, p3}, Landroid/support/v4/widget/ViewDragHelper$Callback;->clampViewPositionHorizontal(Landroid/view/View;II)I + + move-result v2 + + .line 1372 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + sub-int v1, v2, v6 + + invoke-virtual {v0, v1}, Landroid/view/View;->offsetLeftAndRight(I)V + + .line 1374 + :cond_1f + if-eqz p4, :cond_30 + + .line 1375 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0, v1, p2, p4}, Landroid/support/v4/widget/ViewDragHelper$Callback;->clampViewPositionVertical(Landroid/view/View;II)I + + move-result v3 + + .line 1376 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + sub-int v1, v3, v7 + + invoke-virtual {v0, v1}, Landroid/view/View;->offsetTopAndBottom(I)V + + .line 1379 + :cond_30 + if-nez p3, :cond_34 + + if-eqz p4, :cond_3f + + .line 1380 + :cond_34 + sub-int v4, v2, v6 + + .line 1381 + .local v4, "clampedDx":I + sub-int v5, v3, v7 + + .line 1382 + .local v5, "clampedDy":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual/range {v0 .. v5}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onViewPositionChanged(Landroid/view/View;IIII)V + + .line 1385 + .end local v4 # "clampedDx":I + .end local v5 # "clampedDy":I + :cond_3f + return-void +.end method + +.method private ensureMotionHistorySizeForId(I)V + .registers 12 + .param p1, "pointerId" # I + + .prologue + const/4 v9, 0x0 + + .line 798 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + if-eqz v7, :cond_a + + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + array-length v7, v7 + + if-gt v7, p1, :cond_70 + + .line 799 + :cond_a + add-int/lit8 v7, p1, 0x1 + + new-array v3, v7, [F + + .line 800 + .local v3, "imx":[F + add-int/lit8 v7, p1, 0x1 + + new-array v4, v7, [F + + .line 801 + .local v4, "imy":[F + add-int/lit8 v7, p1, 0x1 + + new-array v5, v7, [F + + .line 802 + .local v5, "lmx":[F + add-int/lit8 v7, p1, 0x1 + + new-array v6, v7, [F + + .line 803 + .local v6, "lmy":[F + add-int/lit8 v7, p1, 0x1 + + new-array v2, v7, [I + + .line 804 + .local v2, "iit":[I + add-int/lit8 v7, p1, 0x1 + + new-array v0, v7, [I + + .line 805 + .local v0, "edip":[I + add-int/lit8 v7, p1, 0x1 + + new-array v1, v7, [I + + .line 807 + .local v1, "edl":[I + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + if-eqz v7, :cond_62 + + .line 808 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + iget-object v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + array-length v8, v8 + + invoke-static {v7, v9, v3, v9, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V + + .line 809 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + iget-object v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + array-length v8, v8 + + invoke-static {v7, v9, v4, v9, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V + + .line 810 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + iget-object v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + array-length v8, v8 + + invoke-static {v7, v9, v5, v9, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V + + .line 811 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + iget-object v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + array-length v8, v8 + + invoke-static {v7, v9, v6, v9, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V + + .line 812 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + iget-object v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + array-length v8, v8 + + invoke-static {v7, v9, v2, v9, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V + + .line 813 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + iget-object v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + array-length v8, v8 + + invoke-static {v7, v9, v0, v9, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V + + .line 814 + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsLocked:[I + + iget-object v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsLocked:[I + + array-length v8, v8 + + invoke-static {v7, v9, v1, v9, v8}, Ljava/lang/System;->arraycopy(Ljava/lang/Object;ILjava/lang/Object;II)V + + .line 817 + :cond_62 + iput-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + .line 818 + iput-object v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + .line 819 + iput-object v5, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + .line 820 + iput-object v6, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + .line 821 + iput-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + .line 822 + iput-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + .line 823 + iput-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsLocked:[I + + .line 825 + .end local v0 # "edip":[I + .end local v1 # "edl":[I + .end local v2 # "iit":[I + .end local v3 # "imx":[F + .end local v4 # "imy":[F + .end local v5 # "lmx":[F + .end local v6 # "lmy":[F + :cond_70 + return-void +.end method + +.method private forceSettleCapturedViewAt(IIII)Z + .registers 16 + .param p1, "finalLeft" # I + .param p2, "finalTop" # I + .param p3, "xvel" # I + .param p4, "yvel" # I + + .prologue + const/4 v0, 0x0 + + .line 577 + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v1}, Landroid/view/View;->getLeft()I + + move-result v10 + + .line 578 + .local v10, "startLeft":I + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v1}, Landroid/view/View;->getTop()I + + move-result v6 + + .line 579 + .local v6, "startTop":I + sub-int v2, p1, v10 + + .line 580 + .local v2, "dx":I + sub-int v3, p2, v6 + + .line 582 + .local v3, "dy":I + if-nez v2, :cond_1e + + if-nez v3, :cond_1e + + .line 584 + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v1}, Landroid/support/v4/widget/ScrollerCompat;->abortAnimation()V + + .line 585 + invoke-virtual {p0, v0}, Landroid/support/v4/widget/ViewDragHelper;->setDragState(I)V + + .line 593 + :goto_1d + return v0 + + .line 589 + :cond_1e + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + move-object v0, p0 + + move v4, p3 + + move v5, p4 + + invoke-direct/range {v0 .. v5}, Landroid/support/v4/widget/ViewDragHelper;->computeSettleDuration(Landroid/view/View;IIII)I + + move-result v9 + + .line 590 + .local v9, "duration":I + iget-object v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + move v5, v10 + + move v7, v2 + + move v8, v3 + + invoke-virtual/range {v4 .. v9}, Landroid/support/v4/widget/ScrollerCompat;->startScroll(IIIII)V + + .line 592 + const/4 v0, 0x2 + + invoke-virtual {p0, v0}, Landroid/support/v4/widget/ViewDragHelper;->setDragState(I)V + + .line 593 + const/4 v0, 0x1 + + goto :goto_1d +.end method + +.method private getEdgesTouched(II)I + .registers 6 + .param p1, "x" # I + .param p2, "y" # I + + .prologue + .line 1440 + const/4 v0, 0x0 + + .line 1442 + .local v0, "result":I + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + invoke-virtual {v1}, Landroid/view/ViewGroup;->getLeft()I + + move-result v1 + + iget v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeSize:I + + add-int/2addr v1, v2 + + if-ge p1, v1, :cond_e + + or-int/lit8 v0, v0, 0x1 + + .line 1443 + :cond_e + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + invoke-virtual {v1}, Landroid/view/ViewGroup;->getTop()I + + move-result v1 + + iget v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeSize:I + + add-int/2addr v1, v2 + + if-ge p2, v1, :cond_1b + + or-int/lit8 v0, v0, 0x4 + + .line 1444 + :cond_1b + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + invoke-virtual {v1}, Landroid/view/ViewGroup;->getRight()I + + move-result v1 + + iget v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeSize:I + + sub-int/2addr v1, v2 + + if-le p1, v1, :cond_28 + + or-int/lit8 v0, v0, 0x2 + + .line 1445 + :cond_28 + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + invoke-virtual {v1}, Landroid/view/ViewGroup;->getBottom()I + + move-result v1 + + iget v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeSize:I + + sub-int/2addr v1, v2 + + if-le p2, v1, :cond_35 + + or-int/lit8 v0, v0, 0x8 + + .line 1447 + :cond_35 + return v0 +.end method + +.method private releaseViewForPointerUp()V + .registers 6 + + .prologue + .line 1355 + iget-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + const/16 v3, 0x3e8 + + iget v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mMaxVelocity:F + + invoke-virtual {v2, v3, v4}, Landroid/view/VelocityTracker;->computeCurrentVelocity(IF)V + + .line 1356 + iget-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + invoke-static {v2, v3}, Landroid/support/v4/view/VelocityTrackerCompat;->getXVelocity(Landroid/view/VelocityTracker;I)F + + move-result v2 + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mMinVelocity:F + + iget v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mMaxVelocity:F + + invoke-direct {p0, v2, v3, v4}, Landroid/support/v4/widget/ViewDragHelper;->clampMag(FFF)F + + move-result v0 + + .line 1359 + .local v0, "xvel":F + iget-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + invoke-static {v2, v3}, Landroid/support/v4/view/VelocityTrackerCompat;->getYVelocity(Landroid/view/VelocityTracker;I)F + + move-result v2 + + iget v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mMinVelocity:F + + iget v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mMaxVelocity:F + + invoke-direct {p0, v2, v3, v4}, Landroid/support/v4/widget/ViewDragHelper;->clampMag(FFF)F + + move-result v1 + + .line 1362 + .local v1, "yvel":F + invoke-direct {p0, v0, v1}, Landroid/support/v4/widget/ViewDragHelper;->dispatchViewReleased(FF)V + + .line 1363 + return-void +.end method + +.method private reportNewEdgeDrags(FFI)V + .registers 7 + .param p1, "dx" # F + .param p2, "dy" # F + .param p3, "pointerId" # I + + .prologue + .line 1197 + const/4 v0, 0x0 + + .line 1198 + .local v0, "dragsStarted":I + const/4 v1, 0x1 + + invoke-direct {p0, p1, p2, p3, v1}, Landroid/support/v4/widget/ViewDragHelper;->checkNewEdgeDrag(FFII)Z + + move-result v1 + + if-eqz v1, :cond_a + + .line 1199 + or-int/lit8 v0, v0, 0x1 + + .line 1201 + :cond_a + const/4 v1, 0x4 + + invoke-direct {p0, p2, p1, p3, v1}, Landroid/support/v4/widget/ViewDragHelper;->checkNewEdgeDrag(FFII)Z + + move-result v1 + + if-eqz v1, :cond_13 + + .line 1202 + or-int/lit8 v0, v0, 0x4 + + .line 1204 + :cond_13 + const/4 v1, 0x2 + + invoke-direct {p0, p1, p2, p3, v1}, Landroid/support/v4/widget/ViewDragHelper;->checkNewEdgeDrag(FFII)Z + + move-result v1 + + if-eqz v1, :cond_1c + + .line 1205 + or-int/lit8 v0, v0, 0x2 + + .line 1207 + :cond_1c + const/16 v1, 0x8 + + invoke-direct {p0, p2, p1, p3, v1}, Landroid/support/v4/widget/ViewDragHelper;->checkNewEdgeDrag(FFII)Z + + move-result v1 + + if-eqz v1, :cond_26 + + .line 1208 + or-int/lit8 v0, v0, 0x8 + + .line 1211 + :cond_26 + if-eqz v0, :cond_34 + + .line 1212 + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeDragsInProgress:[I + + aget v2, v1, p3 + + or-int/2addr v2, v0 + + aput v2, v1, p3 + + .line 1213 + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v1, v0, p3}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onEdgeDragStarted(II)V + + .line 1215 + :cond_34 + return-void +.end method + +.method private saveInitialMotion(FFI)V + .registers 7 + .param p1, "x" # F + .param p2, "y" # F + .param p3, "pointerId" # I + + .prologue + .line 828 + invoke-direct {p0, p3}, Landroid/support/v4/widget/ViewDragHelper;->ensureMotionHistorySizeForId(I)V + + .line 829 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + aput p1, v1, p3 + + aput p1, v0, p3 + + .line 830 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + aput p2, v1, p3 + + aput p2, v0, p3 + + .line 831 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + float-to-int v1, p1 + + float-to-int v2, p2 + + invoke-direct {p0, v1, v2}, Landroid/support/v4/widget/ViewDragHelper;->getEdgesTouched(II)I + + move-result v1 + + aput v1, v0, p3 + + .line 832 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mPointersDown:I + + const/4 v1, 0x1 + + shl-int/2addr v1, p3 + + or-int/2addr v0, v1 + + iput v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mPointersDown:I + + .line 833 + return-void +.end method + +.method private saveLastMotion(Landroid/view/MotionEvent;)V + .registers 8 + .param p1, "ev" # Landroid/view/MotionEvent; + + .prologue + .line 836 + invoke-static {p1}, Landroid/support/v4/view/MotionEventCompat;->getPointerCount(Landroid/view/MotionEvent;)I + + move-result v1 + + .line 837 + .local v1, "pointerCount":I + const/4 v0, 0x0 + + .local v0, "i":I + :goto_5 + if-ge v0, v1, :cond_1e + + .line 838 + invoke-static {p1, v0}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v2 + + .line 839 + .local v2, "pointerId":I + invoke-static {p1, v0}, Landroid/support/v4/view/MotionEventCompat;->getX(Landroid/view/MotionEvent;I)F + + move-result v3 + + .line 840 + .local v3, "x":F + invoke-static {p1, v0}, Landroid/support/v4/view/MotionEventCompat;->getY(Landroid/view/MotionEvent;I)F + + move-result v4 + + .line 841 + .local v4, "y":F + iget-object v5, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + aput v3, v5, v2 + + .line 842 + iget-object v5, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + aput v4, v5, v2 + + .line 837 + add-int/lit8 v0, v0, 0x1 + + goto :goto_5 + + .line 844 + .end local v2 # "pointerId":I + .end local v3 # "x":F + .end local v4 # "y":F + :cond_1e + return-void +.end method + + +# virtual methods +.method public abort()V + .registers 9 + + .prologue + .line 512 + invoke-virtual {p0}, Landroid/support/v4/widget/ViewDragHelper;->cancel()V + + .line 513 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + const/4 v1, 0x2 + + if-ne v0, v1, :cond_30 + + .line 514 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getCurrX()I + + move-result v6 + + .line 515 + .local v6, "oldX":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getCurrY()I + + move-result v7 + + .line 516 + .local v7, "oldY":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->abortAnimation()V + + .line 517 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getCurrX()I + + move-result v2 + + .line 518 + .local v2, "newX":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getCurrY()I + + move-result v3 + + .line 519 + .local v3, "newY":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + sub-int v4, v2, v6 + + sub-int v5, v3, v7 + + invoke-virtual/range {v0 .. v5}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onViewPositionChanged(Landroid/view/View;IIII)V + + .line 521 + .end local v2 # "newX":I + .end local v3 # "newY":I + .end local v6 # "oldX":I + .end local v7 # "oldY":I + :cond_30 + const/4 v0, 0x0 + + invoke-virtual {p0, v0}, Landroid/support/v4/widget/ViewDragHelper;->setDragState(I)V + + .line 522 + return-void +.end method + +.method protected canScroll(Landroid/view/View;ZIIII)Z + .registers 20 + .param p1, "v" # Landroid/view/View; + .param p2, "checkV" # Z + .param p3, "dx" # I + .param p4, "dy" # I + .param p5, "x" # I + .param p6, "y" # I + + .prologue + .line 908 + instance-of v1, p1, Landroid/view/ViewGroup; + + if-eqz v1, :cond_5c + + move-object v9, p1 + + .line 909 + check-cast v9, Landroid/view/ViewGroup; + + .line 910 + .local v9, "group":Landroid/view/ViewGroup; + invoke-virtual {p1}, Landroid/view/View;->getScrollX()I + + move-result v11 + + .line 911 + .local v11, "scrollX":I + invoke-virtual {p1}, Landroid/view/View;->getScrollY()I + + move-result v12 + + .line 912 + .local v12, "scrollY":I + invoke-virtual {v9}, Landroid/view/ViewGroup;->getChildCount()I + + move-result v8 + + .line 914 + .local v8, "count":I + add-int/lit8 v10, v8, -0x1 + + .local v10, "i":I + :goto_15 + if-ltz v10, :cond_5c + + .line 917 + invoke-virtual {v9, v10}, Landroid/view/ViewGroup;->getChildAt(I)Landroid/view/View; + + move-result-object v2 + + .line 918 + .local v2, "child":Landroid/view/View; + add-int v1, p5, v11 + + invoke-virtual {v2}, Landroid/view/View;->getLeft()I + + move-result v3 + + if-lt v1, v3, :cond_59 + + add-int v1, p5, v11 + + invoke-virtual {v2}, Landroid/view/View;->getRight()I + + move-result v3 + + if-ge v1, v3, :cond_59 + + add-int v1, p6, v12 + + invoke-virtual {v2}, Landroid/view/View;->getTop()I + + move-result v3 + + if-lt v1, v3, :cond_59 + + add-int v1, p6, v12 + + invoke-virtual {v2}, Landroid/view/View;->getBottom()I + + move-result v3 + + if-ge v1, v3, :cond_59 + + const/4 v3, 0x1 + + add-int v1, p5, v11 + + invoke-virtual {v2}, Landroid/view/View;->getLeft()I + + move-result v4 + + sub-int v6, v1, v4 + + add-int v1, p6, v12 + + invoke-virtual {v2}, Landroid/view/View;->getTop()I + + move-result v4 + + sub-int v7, v1, v4 + + move-object v1, p0 + + move/from16 v4, p3 + + move/from16 v5, p4 + + invoke-virtual/range {v1 .. v7}, Landroid/support/v4/widget/ViewDragHelper;->canScroll(Landroid/view/View;ZIIII)Z + + move-result v1 + + if-eqz v1, :cond_59 + + .line 922 + const/4 v1, 0x1 + + .line 927 + .end local v2 # "child":Landroid/view/View; + .end local v8 # "count":I + .end local v9 # "group":Landroid/view/ViewGroup; + .end local v10 # "i":I + .end local v11 # "scrollX":I + .end local v12 # "scrollY":I + :goto_58 + return v1 + + .line 914 + .restart local v2 # "child":Landroid/view/View; + .restart local v8 # "count":I + .restart local v9 # "group":Landroid/view/ViewGroup; + .restart local v10 # "i":I + .restart local v11 # "scrollX":I + .restart local v12 # "scrollY":I + :cond_59 + add-int/lit8 v10, v10, -0x1 + + goto :goto_15 + + .line 927 + .end local v2 # "child":Landroid/view/View; + .end local v8 # "count":I + .end local v9 # "group":Landroid/view/ViewGroup; + .end local v10 # "i":I + .end local v11 # "scrollX":I + .end local v12 # "scrollY":I + :cond_5c + if-eqz p2, :cond_72 + + move/from16 v0, p3 + + neg-int v1, v0 + + invoke-static {p1, v1}, Landroid/support/v4/view/ViewCompat;->canScrollHorizontally(Landroid/view/View;I)Z + + move-result v1 + + if-nez v1, :cond_70 + + move/from16 v0, p4 + + neg-int v1, v0 + + invoke-static {p1, v1}, Landroid/support/v4/view/ViewCompat;->canScrollVertically(Landroid/view/View;I)Z + + move-result v1 + + if-eqz v1, :cond_72 + + :cond_70 + const/4 v1, 0x1 + + goto :goto_58 + + :cond_72 + const/4 v1, 0x0 + + goto :goto_58 +.end method + +.method public cancel()V + .registers 2 + + .prologue + .line 498 + const/4 v0, -0x1 + + iput v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + .line 499 + invoke-direct {p0}, Landroid/support/v4/widget/ViewDragHelper;->clearMotionHistory()V + + .line 501 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + if-eqz v0, :cond_12 + + .line 502 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + invoke-virtual {v0}, Landroid/view/VelocityTracker;->recycle()V + + .line 503 + const/4 v0, 0x0 + + iput-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + .line 505 + :cond_12 + return-void +.end method + +.method public captureChildView(Landroid/view/View;I)V + .registers 6 + .param p1, "childView" # Landroid/view/View; + .param p2, "activePointerId" # I + + .prologue + .line 460 + invoke-virtual {p1}, Landroid/view/View;->getParent()Landroid/view/ViewParent; + + move-result-object v0 + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + if-eq v0, v1, :cond_29 + + .line 461 + new-instance v0, Ljava/lang/IllegalArgumentException; + + new-instance v1, Ljava/lang/StringBuilder; + + invoke-direct {v1}, Ljava/lang/StringBuilder;->()V + + const-string v2, "captureChildView: parameter must be a descendant of the ViewDragHelper\'s tracked parent view (" + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + iget-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder; + + move-result-object v1 + + const-string v2, ")" + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v1 + + invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V + + throw v0 + + .line 465 + :cond_29 + iput-object p1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + .line 466 + iput p2, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + .line 467 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v0, p1, p2}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onViewCaptured(Landroid/view/View;I)V + + .line 468 + const/4 v0, 0x1 + + invoke-virtual {p0, v0}, Landroid/support/v4/widget/ViewDragHelper;->setDragState(I)V + + .line 469 + return-void +.end method + +.method public checkTouchSlop(I)Z + .registers 5 + .param p1, "directions" # I + + .prologue + .line 1276 + iget-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + array-length v0, v2 + + .line 1277 + .local v0, "count":I + const/4 v1, 0x0 + + .local v1, "i":I + :goto_4 + if-ge v1, v0, :cond_11 + + .line 1278 + invoke-virtual {p0, p1, v1}, Landroid/support/v4/widget/ViewDragHelper;->checkTouchSlop(II)Z + + move-result v2 + + if-eqz v2, :cond_e + + .line 1279 + const/4 v2, 0x1 + + .line 1282 + :goto_d + return v2 + + .line 1277 + :cond_e + add-int/lit8 v1, v1, 0x1 + + goto :goto_4 + + .line 1282 + :cond_11 + const/4 v2, 0x0 + + goto :goto_d +.end method + +.method public checkTouchSlop(II)Z + .registers 12 + .param p1, "directions" # I + .param p2, "pointerId" # I + + .prologue + const/4 v4, 0x1 + + const/4 v5, 0x0 + + .line 1301 + invoke-virtual {p0, p2}, Landroid/support/v4/widget/ViewDragHelper;->isPointerDown(I)Z + + move-result v6 + + if-nez v6, :cond_a + + move v4, v5 + + .line 1318 + :cond_9 + :goto_9 + return v4 + + .line 1305 + :cond_a + and-int/lit8 v6, p1, 0x1 + + if-ne v6, v4, :cond_3e + + move v0, v4 + + .line 1306 + .local v0, "checkHorizontal":Z + :goto_f + and-int/lit8 v6, p1, 0x2 + + const/4 v7, 0x2 + + if-ne v6, v7, :cond_40 + + move v1, v4 + + .line 1308 + .local v1, "checkVertical":Z + :goto_15 + iget-object v6, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + aget v6, v6, p2 + + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + aget v7, v7, p2 + + sub-float v2, v6, v7 + + .line 1309 + .local v2, "dx":F + iget-object v6, p0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + aget v6, v6, p2 + + iget-object v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + aget v7, v7, p2 + + sub-float v3, v6, v7 + + .line 1311 + .local v3, "dy":F + if-eqz v0, :cond_42 + + if-eqz v1, :cond_42 + + .line 1312 + mul-float v6, v2, v2 + + mul-float v7, v3, v3 + + add-float/2addr v6, v7 + + iget v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + iget v8, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + mul-int/2addr v7, v8 + + int-to-float v7, v7 + + cmpl-float v6, v6, v7 + + if-gtz v6, :cond_9 + + move v4, v5 + + goto :goto_9 + + .end local v0 # "checkHorizontal":Z + .end local v1 # "checkVertical":Z + .end local v2 # "dx":F + .end local v3 # "dy":F + :cond_3e + move v0, v5 + + .line 1305 + goto :goto_f + + .restart local v0 # "checkHorizontal":Z + :cond_40 + move v1, v5 + + .line 1306 + goto :goto_15 + + .line 1313 + .restart local v1 # "checkVertical":Z + .restart local v2 # "dx":F + .restart local v3 # "dy":F + :cond_42 + if-eqz v0, :cond_51 + + .line 1314 + invoke-static {v2}, Ljava/lang/Math;->abs(F)F + + move-result v6 + + iget v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v7, v7 + + cmpl-float v6, v6, v7 + + if-gtz v6, :cond_9 + + move v4, v5 + + goto :goto_9 + + .line 1315 + :cond_51 + if-eqz v1, :cond_60 + + .line 1316 + invoke-static {v3}, Ljava/lang/Math;->abs(F)F + + move-result v6 + + iget v7, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + int-to-float v7, v7 + + cmpl-float v6, v6, v7 + + if-gtz v6, :cond_9 + + move v4, v5 + + goto :goto_9 + + :cond_60 + move v4, v5 + + .line 1318 + goto :goto_9 +.end method + +.method public continueSettling(Z)Z + .registers 11 + .param p1, "deferCallbacks" # Z + + .prologue + const/4 v8, 0x2 + + const/4 v7, 0x0 + + .line 715 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + if-ne v0, v8, :cond_69 + + .line 716 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->computeScrollOffset()Z + + move-result v6 + + .line 717 + .local v6, "keepGoing":Z + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getCurrX()I + + move-result v2 + + .line 718 + .local v2, "x":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getCurrY()I + + move-result v3 + + .line 719 + .local v3, "y":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0}, Landroid/view/View;->getLeft()I + + move-result v0 + + sub-int v4, v2, v0 + + .line 720 + .local v4, "dx":I + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0}, Landroid/view/View;->getTop()I + + move-result v0 + + sub-int v5, v3, v0 + + .line 722 + .local v5, "dy":I + if-eqz v4, :cond_2f + + .line 723 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0, v4}, Landroid/view/View;->offsetLeftAndRight(I)V + + .line 725 + :cond_2f + if-eqz v5, :cond_36 + + .line 726 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v0, v5}, Landroid/view/View;->offsetTopAndBottom(I)V + + .line 729 + :cond_36 + if-nez v4, :cond_3a + + if-eqz v5, :cond_41 + + .line 730 + :cond_3a + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual/range {v0 .. v5}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onViewPositionChanged(Landroid/view/View;IIII)V + + .line 733 + :cond_41 + if-eqz v6, :cond_5e + + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getFinalX()I + + move-result v0 + + if-ne v2, v0, :cond_5e + + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->getFinalY()I + + move-result v0 + + if-ne v3, v0, :cond_5e + + .line 736 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->abortAnimation()V + + .line 737 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + invoke-virtual {v0}, Landroid/support/v4/widget/ScrollerCompat;->isFinished()Z + + move-result v6 + + .line 740 + :cond_5e + if-nez v6, :cond_69 + + .line 741 + if-eqz p1, :cond_6f + + .line 742 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mSetIdleRunnable:Ljava/lang/Runnable; + + invoke-virtual {v0, v1}, Landroid/view/ViewGroup;->post(Ljava/lang/Runnable;)Z + + .line 749 + .end local v2 # "x":I + .end local v3 # "y":I + .end local v4 # "dx":I + .end local v5 # "dy":I + .end local v6 # "keepGoing":Z + :cond_69 + :goto_69 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + if-ne v0, v8, :cond_73 + + const/4 v0, 0x1 + + :goto_6e + return v0 + + .line 744 + .restart local v2 # "x":I + .restart local v3 # "y":I + .restart local v4 # "dx":I + .restart local v5 # "dy":I + .restart local v6 # "keepGoing":Z + :cond_6f + invoke-virtual {p0, v7}, Landroid/support/v4/widget/ViewDragHelper;->setDragState(I)V + + goto :goto_69 + + .end local v2 # "x":I + .end local v3 # "y":I + .end local v4 # "dx":I + .end local v5 # "dy":I + .end local v6 # "keepGoing":Z + :cond_73 + move v0, v7 + + .line 749 + goto :goto_6e +.end method + +.method public findTopChildUnder(II)Landroid/view/View; + .registers 8 + .param p1, "x" # I + .param p2, "y" # I + + .prologue + .line 1428 + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + invoke-virtual {v3}, Landroid/view/ViewGroup;->getChildCount()I + + move-result v1 + + .line 1429 + .local v1, "childCount":I + add-int/lit8 v2, v1, -0x1 + + .local v2, "i":I + :goto_8 + if-ltz v2, :cond_32 + + .line 1430 + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mParentView:Landroid/view/ViewGroup; + + iget-object v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v4, v2}, Landroid/support/v4/widget/ViewDragHelper$Callback;->getOrderedChildIndex(I)I + + move-result v4 + + invoke-virtual {v3, v4}, Landroid/view/ViewGroup;->getChildAt(I)Landroid/view/View; + + move-result-object v0 + + .line 1431 + .local v0, "child":Landroid/view/View; + invoke-virtual {v0}, Landroid/view/View;->getLeft()I + + move-result v3 + + if-lt p1, v3, :cond_2f + + invoke-virtual {v0}, Landroid/view/View;->getRight()I + + move-result v3 + + if-ge p1, v3, :cond_2f + + invoke-virtual {v0}, Landroid/view/View;->getTop()I + + move-result v3 + + if-lt p2, v3, :cond_2f + + invoke-virtual {v0}, Landroid/view/View;->getBottom()I + + move-result v3 + + if-ge p2, v3, :cond_2f + + .line 1436 + .end local v0 # "child":Landroid/view/View; + :goto_2e + return-object v0 + + .line 1429 + .restart local v0 # "child":Landroid/view/View; + :cond_2f + add-int/lit8 v2, v2, -0x1 + + goto :goto_8 + + .line 1436 + .end local v0 # "child":Landroid/view/View; + :cond_32 + const/4 v0, 0x0 + + goto :goto_2e +.end method + +.method public flingCapturedView(IIII)V + .registers 14 + .param p1, "minLeft" # I + .param p2, "minTop" # I + .param p3, "maxLeft" # I + .param p4, "maxTop" # I + + .prologue + .line 690 + iget-boolean v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mReleaseInProgress:Z + + if-nez v0, :cond_c + + .line 691 + new-instance v0, Ljava/lang/IllegalStateException; + + const-string v1, "Cannot flingCapturedView outside of a call to Callback#onViewReleased" + + invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V + + throw v0 + + .line 695 + :cond_c + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mScroller:Landroid/support/v4/widget/ScrollerCompat; + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v1}, Landroid/view/View;->getLeft()I + + move-result v1 + + iget-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {v2}, Landroid/view/View;->getTop()I + + move-result v2 + + iget-object v3, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + iget v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + invoke-static {v3, v4}, Landroid/support/v4/view/VelocityTrackerCompat;->getXVelocity(Landroid/view/VelocityTracker;I)F + + move-result v3 + + float-to-int v3, v3 + + iget-object v4, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + iget v5, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + invoke-static {v4, v5}, Landroid/support/v4/view/VelocityTrackerCompat;->getYVelocity(Landroid/view/VelocityTracker;I)F + + move-result v4 + + float-to-int v4, v4 + + move v5, p1 + + move v6, p3 + + move v7, p2 + + move v8, p4 + + invoke-virtual/range {v0 .. v8}, Landroid/support/v4/widget/ScrollerCompat;->fling(IIIIIIII)V + + .line 700 + const/4 v0, 0x2 + + invoke-virtual {p0, v0}, Landroid/support/v4/widget/ViewDragHelper;->setDragState(I)V + + .line 701 + return-void +.end method + +.method public getActivePointerId()I + .registers 2 + + .prologue + .line 483 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + return v0 +.end method + +.method public getCapturedView()Landroid/view/View; + .registers 2 + + .prologue + .line 475 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + return-object v0 +.end method + +.method public getEdgeSize()I + .registers 2 + + .prologue + .line 448 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mEdgeSize:I + + return v0 +.end method + +.method public getMinVelocity()F + .registers 2 + + .prologue + .line 412 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mMinVelocity:F + + return v0 +.end method + +.method public getTouchSlop()I + .registers 2 + + .prologue + .line 490 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mTouchSlop:I + + return v0 +.end method + +.method public getViewDragState()I + .registers 2 + + .prologue + .line 421 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + return v0 +.end method + +.method public isCapturedViewUnder(II)Z + .registers 4 + .param p1, "x" # I + .param p2, "y" # I + + .prologue + .line 1397 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + invoke-virtual {p0, v0, p1, p2}, Landroid/support/v4/widget/ViewDragHelper;->isViewUnder(Landroid/view/View;II)Z + + move-result v0 + + return v0 +.end method + +.method public isEdgeTouched(I)Z + .registers 5 + .param p1, "edges" # I + + .prologue + .line 1331 + iget-object v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + array-length v0, v2 + + .line 1332 + .local v0, "count":I + const/4 v1, 0x0 + + .local v1, "i":I + :goto_4 + if-ge v1, v0, :cond_11 + + .line 1333 + invoke-virtual {p0, p1, v1}, Landroid/support/v4/widget/ViewDragHelper;->isEdgeTouched(II)Z + + move-result v2 + + if-eqz v2, :cond_e + + .line 1334 + const/4 v2, 0x1 + + .line 1337 + :goto_d + return v2 + + .line 1332 + :cond_e + add-int/lit8 v1, v1, 0x1 + + goto :goto_4 + + .line 1337 + :cond_11 + const/4 v2, 0x0 + + goto :goto_d +.end method + +.method public isEdgeTouched(II)Z + .registers 4 + .param p1, "edges" # I + .param p2, "pointerId" # I + + .prologue + .line 1351 + invoke-virtual {p0, p2}, Landroid/support/v4/widget/ViewDragHelper;->isPointerDown(I)Z + + move-result v0 + + if-eqz v0, :cond_f + + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + aget v0, v0, p2 + + and-int/2addr v0, p1 + + if-eqz v0, :cond_f + + const/4 v0, 0x1 + + :goto_e + return v0 + + :cond_f + const/4 v0, 0x0 + + goto :goto_e +.end method + +.method public isPointerDown(I)Z + .registers 5 + .param p1, "pointerId" # I + + .prologue + const/4 v0, 0x1 + + .line 860 + iget v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mPointersDown:I + + shl-int v2, v0, p1 + + and-int/2addr v1, v2 + + if-eqz v1, :cond_9 + + :goto_8 + return v0 + + :cond_9 + const/4 v0, 0x0 + + goto :goto_8 +.end method + +.method public isViewUnder(Landroid/view/View;II)Z + .registers 6 + .param p1, "view" # Landroid/view/View; + .param p2, "x" # I + .param p3, "y" # I + + .prologue + const/4 v0, 0x0 + + .line 1410 + if-nez p1, :cond_4 + + .line 1413 + :cond_3 + :goto_3 + return v0 + + :cond_4 + invoke-virtual {p1}, Landroid/view/View;->getLeft()I + + move-result v1 + + if-lt p2, v1, :cond_3 + + invoke-virtual {p1}, Landroid/view/View;->getRight()I + + move-result v1 + + if-ge p2, v1, :cond_3 + + invoke-virtual {p1}, Landroid/view/View;->getTop()I + + move-result v1 + + if-lt p3, v1, :cond_3 + + invoke-virtual {p1}, Landroid/view/View;->getBottom()I + + move-result v1 + + if-ge p3, v1, :cond_3 + + const/4 v0, 0x1 + + goto :goto_3 +.end method + +.method public processTouchEvent(Landroid/view/MotionEvent;)V + .registers 23 + .param p1, "ev" # Landroid/view/MotionEvent; + + .prologue + .line 1046 + invoke-static/range {p1 .. p1}, Landroid/support/v4/view/MotionEventCompat;->getActionMasked(Landroid/view/MotionEvent;)I + + move-result v3 + + .line 1047 + .local v3, "action":I + invoke-static/range {p1 .. p1}, Landroid/support/v4/view/MotionEventCompat;->getActionIndex(Landroid/view/MotionEvent;)I + + move-result v4 + + .line 1049 + .local v4, "actionIndex":I + if-nez v3, :cond_d + + .line 1052 + invoke-virtual/range {p0 .. p0}, Landroid/support/v4/widget/ViewDragHelper;->cancel()V + + .line 1055 + :cond_d + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + move-object/from16 v19, v0 + + if-nez v19, :cond_1f + + .line 1056 + invoke-static {}, Landroid/view/VelocityTracker;->obtain()Landroid/view/VelocityTracker; + + move-result-object v19 + + move-object/from16 v0, v19 + + move-object/from16 v1, p0 + + iput-object v0, v1, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + .line 1058 + :cond_1f + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + move-object/from16 v19, v0 + + move-object/from16 v0, v19 + + move-object/from16 v1, p1 + + invoke-virtual {v0, v1}, Landroid/view/VelocityTracker;->addMovement(Landroid/view/MotionEvent;)V + + .line 1060 + packed-switch v3, :pswitch_data_2be + + .line 1194 + :cond_2f + :goto_2f + :pswitch_2f + return-void + + .line 1062 + :pswitch_30 + invoke-virtual/range {p1 .. p1}, Landroid/view/MotionEvent;->getX()F + + move-result v17 + + .line 1063 + .local v17, "x":F + invoke-virtual/range {p1 .. p1}, Landroid/view/MotionEvent;->getY()F + + move-result v18 + + .line 1064 + .local v18, "y":F + const/16 v19, 0x0 + + move-object/from16 v0, p1 + + move/from16 v1, v19 + + invoke-static {v0, v1}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v15 + + .line 1065 + .local v15, "pointerId":I + move/from16 v0, v17 + + float-to-int v0, v0 + + move/from16 v19, v0 + + move/from16 v0, v18 + + float-to-int v0, v0 + + move/from16 v20, v0 + + move-object/from16 v0, p0 + + move/from16 v1, v19 + + move/from16 v2, v20 + + invoke-virtual {v0, v1, v2}, Landroid/support/v4/widget/ViewDragHelper;->findTopChildUnder(II)Landroid/view/View; + + move-result-object v16 + + .line 1067 + .local v16, "toCapture":Landroid/view/View; + move-object/from16 v0, p0 + + move/from16 v1, v17 + + move/from16 v2, v18 + + invoke-direct {v0, v1, v2, v15}, Landroid/support/v4/widget/ViewDragHelper;->saveInitialMotion(FFI)V + + .line 1072 + move-object/from16 v0, p0 + + move-object/from16 v1, v16 + + invoke-virtual {v0, v1, v15}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + .line 1074 + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + move-object/from16 v19, v0 + + aget v7, v19, v15 + + .line 1075 + .local v7, "edgesTouched":I + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + move/from16 v19, v0 + + and-int v19, v19, v7 + + if-eqz v19, :cond_2f + + .line 1076 + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + move-object/from16 v19, v0 + + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + move/from16 v20, v0 + + and-int v20, v20, v7 + + move-object/from16 v0, v19 + + move/from16 v1, v20 + + invoke-virtual {v0, v1, v15}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onEdgeTouched(II)V + + goto :goto_2f + + .line 1082 + .end local v7 # "edgesTouched":I + .end local v15 # "pointerId":I + .end local v16 # "toCapture":Landroid/view/View; + .end local v17 # "x":F + .end local v18 # "y":F + :pswitch_8e + move-object/from16 v0, p1 + + invoke-static {v0, v4}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v15 + + .line 1083 + .restart local v15 # "pointerId":I + move-object/from16 v0, p1 + + invoke-static {v0, v4}, Landroid/support/v4/view/MotionEventCompat;->getX(Landroid/view/MotionEvent;I)F + + move-result v17 + + .line 1084 + .restart local v17 # "x":F + move-object/from16 v0, p1 + + invoke-static {v0, v4}, Landroid/support/v4/view/MotionEventCompat;->getY(Landroid/view/MotionEvent;I)F + + move-result v18 + + .line 1086 + .restart local v18 # "y":F + move-object/from16 v0, p0 + + move/from16 v1, v17 + + move/from16 v2, v18 + + invoke-direct {v0, v1, v2, v15}, Landroid/support/v4/widget/ViewDragHelper;->saveInitialMotion(FFI)V + + .line 1089 + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + move/from16 v19, v0 + + if-nez v19, :cond_f5 + + .line 1092 + move/from16 v0, v17 + + float-to-int v0, v0 + + move/from16 v19, v0 + + move/from16 v0, v18 + + float-to-int v0, v0 + + move/from16 v20, v0 + + move-object/from16 v0, p0 + + move/from16 v1, v19 + + move/from16 v2, v20 + + invoke-virtual {v0, v1, v2}, Landroid/support/v4/widget/ViewDragHelper;->findTopChildUnder(II)Landroid/view/View; + + move-result-object v16 + + .line 1093 + .restart local v16 # "toCapture":Landroid/view/View; + move-object/from16 v0, p0 + + move-object/from16 v1, v16 + + invoke-virtual {v0, v1, v15}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + .line 1095 + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + move-object/from16 v19, v0 + + aget v7, v19, v15 + + .line 1096 + .restart local v7 # "edgesTouched":I + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + move/from16 v19, v0 + + and-int v19, v19, v7 + + if-eqz v19, :cond_2f + + .line 1097 + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + move-object/from16 v19, v0 + + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + move/from16 v20, v0 + + and-int v20, v20, v7 + + move-object/from16 v0, v19 + + move/from16 v1, v20 + + invoke-virtual {v0, v1, v15}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onEdgeTouched(II)V + + goto/16 :goto_2f + + .line 1099 + .end local v7 # "edgesTouched":I + .end local v16 # "toCapture":Landroid/view/View; + :cond_f5 + move/from16 v0, v17 + + float-to-int v0, v0 + + move/from16 v19, v0 + + move/from16 v0, v18 + + float-to-int v0, v0 + + move/from16 v20, v0 + + move-object/from16 v0, p0 + + move/from16 v1, v19 + + move/from16 v2, v20 + + invoke-virtual {v0, v1, v2}, Landroid/support/v4/widget/ViewDragHelper;->isCapturedViewUnder(II)Z + + move-result v19 + + if-eqz v19, :cond_2f + + .line 1104 + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + move-object/from16 v19, v0 + + move-object/from16 v0, p0 + + move-object/from16 v1, v19 + + invoke-virtual {v0, v1, v15}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + goto/16 :goto_2f + + .line 1110 + .end local v15 # "pointerId":I + .end local v17 # "x":F + .end local v18 # "y":F + :pswitch_11a + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + move/from16 v19, v0 + + const/16 v20, 0x1 + + move/from16 v0, v19 + + move/from16 v1, v20 + + if-ne v0, v1, :cond_18e + + .line 1111 + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + move/from16 v19, v0 + + move-object/from16 v0, p1 + + move/from16 v1, v19 + + invoke-static {v0, v1}, Landroid/support/v4/view/MotionEventCompat;->findPointerIndex(Landroid/view/MotionEvent;I)I + + move-result v12 + + .line 1112 + .local v12, "index":I + move-object/from16 v0, p1 + + invoke-static {v0, v12}, Landroid/support/v4/view/MotionEventCompat;->getX(Landroid/view/MotionEvent;I)F + + move-result v17 + + .line 1113 + .restart local v17 # "x":F + move-object/from16 v0, p1 + + invoke-static {v0, v12}, Landroid/support/v4/view/MotionEventCompat;->getY(Landroid/view/MotionEvent;I)F + + move-result v18 + + .line 1114 + .restart local v18 # "y":F + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionX:[F + + move-object/from16 v19, v0 + + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + move/from16 v20, v0 + + aget v19, v19, v20 + + sub-float v19, v17, v19 + + move/from16 v0, v19 + + float-to-int v10, v0 + + .line 1115 + .local v10, "idx":I + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mLastMotionY:[F + + move-object/from16 v19, v0 + + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + move/from16 v20, v0 + + aget v19, v19, v20 + + sub-float v19, v18, v19 + + move/from16 v0, v19 + + float-to-int v11, v0 + + .line 1117 + .local v11, "idy":I + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + move-object/from16 v19, v0 + + invoke-virtual/range {v19 .. v19}, Landroid/view/View;->getLeft()I + + move-result v19 + + add-int v19, v19, v10 + + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + move-object/from16 v20, v0 + + invoke-virtual/range {v20 .. v20}, Landroid/view/View;->getTop()I + + move-result v20 + + add-int v20, v20, v11 + + move-object/from16 v0, p0 + + move/from16 v1, v19 + + move/from16 v2, v20 + + invoke-direct {v0, v1, v2, v10, v11}, Landroid/support/v4/widget/ViewDragHelper;->dragTo(IIII)V + + .line 1119 + invoke-direct/range {p0 .. p1}, Landroid/support/v4/widget/ViewDragHelper;->saveLastMotion(Landroid/view/MotionEvent;)V + + goto/16 :goto_2f + + .line 1122 + .end local v10 # "idx":I + .end local v11 # "idy":I + .end local v12 # "index":I + .end local v17 # "x":F + .end local v18 # "y":F + :cond_18e + invoke-static/range {p1 .. p1}, Landroid/support/v4/view/MotionEventCompat;->getPointerCount(Landroid/view/MotionEvent;)I + + move-result v14 + + .line 1123 + .local v14, "pointerCount":I + const/4 v8, 0x0 + + .local v8, "i":I + :goto_193 + if-ge v8, v14, :cond_1ce + + .line 1124 + move-object/from16 v0, p1 + + invoke-static {v0, v8}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v15 + + .line 1125 + .restart local v15 # "pointerId":I + move-object/from16 v0, p1 + + invoke-static {v0, v8}, Landroid/support/v4/view/MotionEventCompat;->getX(Landroid/view/MotionEvent;I)F + + move-result v17 + + .line 1126 + .restart local v17 # "x":F + move-object/from16 v0, p1 + + invoke-static {v0, v8}, Landroid/support/v4/view/MotionEventCompat;->getY(Landroid/view/MotionEvent;I)F + + move-result v18 + + .line 1127 + .restart local v18 # "y":F + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + move-object/from16 v19, v0 + + aget v19, v19, v15 + + sub-float v5, v17, v19 + + .line 1128 + .local v5, "dx":F + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + move-object/from16 v19, v0 + + aget v19, v19, v15 + + sub-float v6, v18, v19 + + .line 1130 + .local v6, "dy":F + move-object/from16 v0, p0 + + invoke-direct {v0, v5, v6, v15}, Landroid/support/v4/widget/ViewDragHelper;->reportNewEdgeDrags(FFI)V + + .line 1131 + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + move/from16 v19, v0 + + const/16 v20, 0x1 + + move/from16 v0, v19 + + move/from16 v1, v20 + + if-ne v0, v1, :cond_1d3 + + .line 1142 + .end local v5 # "dx":F + .end local v6 # "dy":F + .end local v15 # "pointerId":I + .end local v17 # "x":F + .end local v18 # "y":F + :cond_1ce + invoke-direct/range {p0 .. p1}, Landroid/support/v4/widget/ViewDragHelper;->saveLastMotion(Landroid/view/MotionEvent;)V + + goto/16 :goto_2f + + .line 1136 + .restart local v5 # "dx":F + .restart local v6 # "dy":F + .restart local v15 # "pointerId":I + .restart local v17 # "x":F + .restart local v18 # "y":F + :cond_1d3 + move/from16 v0, v17 + + float-to-int v0, v0 + + move/from16 v19, v0 + + move/from16 v0, v18 + + float-to-int v0, v0 + + move/from16 v20, v0 + + move-object/from16 v0, p0 + + move/from16 v1, v19 + + move/from16 v2, v20 + + invoke-virtual {v0, v1, v2}, Landroid/support/v4/widget/ViewDragHelper;->findTopChildUnder(II)Landroid/view/View; + + move-result-object v16 + + .line 1137 + .restart local v16 # "toCapture":Landroid/view/View; + move-object/from16 v0, p0 + + move-object/from16 v1, v16 + + invoke-direct {v0, v1, v5, v6}, Landroid/support/v4/widget/ViewDragHelper;->checkTouchSlop(Landroid/view/View;FF)Z + + move-result v19 + + if-eqz v19, :cond_1fb + + move-object/from16 v0, p0 + + move-object/from16 v1, v16 + + invoke-virtual {v0, v1, v15}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + move-result v19 + + if-nez v19, :cond_1ce + + .line 1123 + :cond_1fb + add-int/lit8 v8, v8, 0x1 + + goto :goto_193 + + .line 1148 + .end local v5 # "dx":F + .end local v6 # "dy":F + .end local v8 # "i":I + .end local v14 # "pointerCount":I + .end local v15 # "pointerId":I + .end local v16 # "toCapture":Landroid/view/View; + .end local v17 # "x":F + .end local v18 # "y":F + :pswitch_1fe + move-object/from16 v0, p1 + + invoke-static {v0, v4}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v15 + + .line 1149 + .restart local v15 # "pointerId":I + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + move/from16 v19, v0 + + const/16 v20, 0x1 + + move/from16 v0, v19 + + move/from16 v1, v20 + + if-ne v0, v1, :cond_280 + + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + move/from16 v19, v0 + + move/from16 v0, v19 + + if-ne v15, v0, :cond_280 + + .line 1151 + const/4 v13, -0x1 + + .line 1152 + .local v13, "newActivePointer":I + invoke-static/range {p1 .. p1}, Landroid/support/v4/view/MotionEventCompat;->getPointerCount(Landroid/view/MotionEvent;)I + + move-result v14 + + .line 1153 + .restart local v14 # "pointerCount":I + const/4 v8, 0x0 + + .restart local v8 # "i":I + :goto_222 + if-ge v8, v14, :cond_277 + + .line 1154 + move-object/from16 v0, p1 + + invoke-static {v0, v8}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v9 + + .line 1155 + .local v9, "id":I + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + move/from16 v19, v0 + + move/from16 v0, v19 + + if-ne v9, v0, :cond_237 + + .line 1153 + :cond_234 + add-int/lit8 v8, v8, 0x1 + + goto :goto_222 + + .line 1160 + :cond_237 + move-object/from16 v0, p1 + + invoke-static {v0, v8}, Landroid/support/v4/view/MotionEventCompat;->getX(Landroid/view/MotionEvent;I)F + + move-result v17 + + .line 1161 + .restart local v17 # "x":F + move-object/from16 v0, p1 + + invoke-static {v0, v8}, Landroid/support/v4/view/MotionEventCompat;->getY(Landroid/view/MotionEvent;I)F + + move-result v18 + + .line 1162 + .restart local v18 # "y":F + move/from16 v0, v17 + + float-to-int v0, v0 + + move/from16 v19, v0 + + move/from16 v0, v18 + + float-to-int v0, v0 + + move/from16 v20, v0 + + move-object/from16 v0, p0 + + move/from16 v1, v19 + + move/from16 v2, v20 + + invoke-virtual {v0, v1, v2}, Landroid/support/v4/widget/ViewDragHelper;->findTopChildUnder(II)Landroid/view/View; + + move-result-object v19 + + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + move-object/from16 v20, v0 + + move-object/from16 v0, v19 + + move-object/from16 v1, v20 + + if-ne v0, v1, :cond_234 + + move-object/from16 v0, p0 + + iget-object v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + move-object/from16 v19, v0 + + move-object/from16 v0, p0 + + move-object/from16 v1, v19 + + invoke-virtual {v0, v1, v9}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + move-result v19 + + if-eqz v19, :cond_234 + + .line 1164 + move-object/from16 v0, p0 + + iget v13, v0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + .line 1169 + .end local v9 # "id":I + .end local v17 # "x":F + .end local v18 # "y":F + :cond_277 + const/16 v19, -0x1 + + move/from16 v0, v19 + + if-ne v13, v0, :cond_280 + + .line 1171 + invoke-direct/range {p0 .. p0}, Landroid/support/v4/widget/ViewDragHelper;->releaseViewForPointerUp()V + + .line 1174 + .end local v8 # "i":I + .end local v13 # "newActivePointer":I + .end local v14 # "pointerCount":I + :cond_280 + move-object/from16 v0, p0 + + invoke-direct {v0, v15}, Landroid/support/v4/widget/ViewDragHelper;->clearMotionHistory(I)V + + goto/16 :goto_2f + + .line 1179 + .end local v15 # "pointerId":I + :pswitch_287 + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + move/from16 v19, v0 + + const/16 v20, 0x1 + + move/from16 v0, v19 + + move/from16 v1, v20 + + if-ne v0, v1, :cond_298 + + .line 1180 + invoke-direct/range {p0 .. p0}, Landroid/support/v4/widget/ViewDragHelper;->releaseViewForPointerUp()V + + .line 1182 + :cond_298 + invoke-virtual/range {p0 .. p0}, Landroid/support/v4/widget/ViewDragHelper;->cancel()V + + goto/16 :goto_2f + + .line 1187 + :pswitch_29d + move-object/from16 v0, p0 + + iget v0, v0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + move/from16 v19, v0 + + const/16 v20, 0x1 + + move/from16 v0, v19 + + move/from16 v1, v20 + + if-ne v0, v1, :cond_2b8 + + .line 1188 + const/16 v19, 0x0 + + const/16 v20, 0x0 + + move-object/from16 v0, p0 + + move/from16 v1, v19 + + move/from16 v2, v20 + + invoke-direct {v0, v1, v2}, Landroid/support/v4/widget/ViewDragHelper;->dispatchViewReleased(FF)V + + .line 1190 + :cond_2b8 + invoke-virtual/range {p0 .. p0}, Landroid/support/v4/widget/ViewDragHelper;->cancel()V + + goto/16 :goto_2f + + .line 1060 + nop + + :pswitch_data_2be + .packed-switch 0x0 + :pswitch_30 + :pswitch_287 + :pswitch_11a + :pswitch_29d + :pswitch_2f + :pswitch_8e + :pswitch_1fe + .end packed-switch +.end method + +.method setDragState(I)V + .registers 3 + .param p1, "state" # I + + .prologue + .line 864 + iget v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + if-eq v0, p1, :cond_10 + + .line 865 + iput p1, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + .line 866 + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v0, p1}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onViewDragStateChanged(I)V + + .line 867 + if-nez p1, :cond_10 + + .line 868 + const/4 v0, 0x0 + + iput-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + .line 871 + :cond_10 + return-void +.end method + +.method public setEdgeTrackingEnabled(I)V + .registers 2 + .param p1, "edgeFlags" # I + + .prologue + .line 437 + iput p1, p0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + .line 438 + return-void +.end method + +.method public setMinVelocity(F)V + .registers 2 + .param p1, "minVel" # F + + .prologue + .line 401 + iput p1, p0, Landroid/support/v4/widget/ViewDragHelper;->mMinVelocity:F + + .line 402 + return-void +.end method + +.method public settleCapturedViewAt(II)Z + .registers 6 + .param p1, "finalLeft" # I + .param p2, "finalTop" # I + + .prologue + .line 557 + iget-boolean v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mReleaseInProgress:Z + + if-nez v0, :cond_c + + .line 558 + new-instance v0, Ljava/lang/IllegalStateException; + + const-string v1, "Cannot settleCapturedViewAt outside of a call to Callback#onViewReleased" + + invoke-direct {v0, v1}, Ljava/lang/IllegalStateException;->(Ljava/lang/String;)V + + throw v0 + + .line 562 + :cond_c + iget-object v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + iget v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + invoke-static {v0, v1}, Landroid/support/v4/view/VelocityTrackerCompat;->getXVelocity(Landroid/view/VelocityTracker;I)F + + move-result v0 + + float-to-int v0, v0 + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + iget v2, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + invoke-static {v1, v2}, Landroid/support/v4/view/VelocityTrackerCompat;->getYVelocity(Landroid/view/VelocityTracker;I)F + + move-result v1 + + float-to-int v1, v1 + + invoke-direct {p0, p1, p2, v0, v1}, Landroid/support/v4/widget/ViewDragHelper;->forceSettleCapturedViewAt(IIII)Z + + move-result v0 + + return v0 +.end method + +.method public shouldInterceptTouchEvent(Landroid/view/MotionEvent;)Z + .registers 15 + .param p1, "ev" # Landroid/view/MotionEvent; + + .prologue + .line 939 + invoke-static {p1}, Landroid/support/v4/view/MotionEventCompat;->getActionMasked(Landroid/view/MotionEvent;)I + + move-result v0 + + .line 940 + .local v0, "action":I + invoke-static {p1}, Landroid/support/v4/view/MotionEventCompat;->getActionIndex(Landroid/view/MotionEvent;)I + + move-result v1 + + .line 942 + .local v1, "actionIndex":I + if-nez v0, :cond_d + + .line 945 + invoke-virtual {p0}, Landroid/support/v4/widget/ViewDragHelper;->cancel()V + + .line 948 + :cond_d + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + if-nez v11, :cond_17 + + .line 949 + invoke-static {}, Landroid/view/VelocityTracker;->obtain()Landroid/view/VelocityTracker; + + move-result-object v11 + + iput-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + .line 951 + :cond_17 + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mVelocityTracker:Landroid/view/VelocityTracker; + + invoke-virtual {v11, p1}, Landroid/view/VelocityTracker;->addMovement(Landroid/view/MotionEvent;)V + + .line 953 + packed-switch v0, :pswitch_data_e6 + + .line 1036 + :cond_1f + :goto_1f + :pswitch_1f + iget v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + const/4 v12, 0x1 + + if-ne v11, v12, :cond_e3 + + const/4 v11, 0x1 + + :goto_25 + return v11 + + .line 955 + :pswitch_26 + invoke-virtual {p1}, Landroid/view/MotionEvent;->getX()F + + move-result v9 + + .line 956 + .local v9, "x":F + invoke-virtual {p1}, Landroid/view/MotionEvent;->getY()F + + move-result v10 + + .line 957 + .local v10, "y":F + const/4 v11, 0x0 + + invoke-static {p1, v11}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v7 + + .line 958 + .local v7, "pointerId":I + invoke-direct {p0, v9, v10, v7}, Landroid/support/v4/widget/ViewDragHelper;->saveInitialMotion(FFI)V + + .line 960 + float-to-int v11, v9 + + float-to-int v12, v10 + + invoke-virtual {p0, v11, v12}, Landroid/support/v4/widget/ViewDragHelper;->findTopChildUnder(II)Landroid/view/View; + + move-result-object v8 + + .line 963 + .local v8, "toCapture":Landroid/view/View; + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + if-ne v8, v11, :cond_48 + + iget v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + const/4 v12, 0x2 + + if-ne v11, v12, :cond_48 + + .line 964 + invoke-virtual {p0, v8, v7}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + .line 967 + :cond_48 + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + aget v4, v11, v7 + + .line 968 + .local v4, "edgesTouched":I + iget v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + and-int/2addr v11, v4 + + if-eqz v11, :cond_1f + + .line 969 + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget v12, p0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + and-int/2addr v12, v4 + + invoke-virtual {v11, v12, v7}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onEdgeTouched(II)V + + goto :goto_1f + + .line 975 + .end local v4 # "edgesTouched":I + .end local v7 # "pointerId":I + .end local v8 # "toCapture":Landroid/view/View; + .end local v9 # "x":F + .end local v10 # "y":F + :pswitch_5a + invoke-static {p1, v1}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v7 + + .line 976 + .restart local v7 # "pointerId":I + invoke-static {p1, v1}, Landroid/support/v4/view/MotionEventCompat;->getX(Landroid/view/MotionEvent;I)F + + move-result v9 + + .line 977 + .restart local v9 # "x":F + invoke-static {p1, v1}, Landroid/support/v4/view/MotionEventCompat;->getY(Landroid/view/MotionEvent;I)F + + move-result v10 + + .line 979 + .restart local v10 # "y":F + invoke-direct {p0, v9, v10, v7}, Landroid/support/v4/widget/ViewDragHelper;->saveInitialMotion(FFI)V + + .line 982 + iget v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + if-nez v11, :cond_7f + + .line 983 + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialEdgesTouched:[I + + aget v4, v11, v7 + + .line 984 + .restart local v4 # "edgesTouched":I + iget v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + and-int/2addr v11, v4 + + if-eqz v11, :cond_1f + + .line 985 + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + iget v12, p0, Landroid/support/v4/widget/ViewDragHelper;->mTrackingEdges:I + + and-int/2addr v12, v4 + + invoke-virtual {v11, v12, v7}, Landroid/support/v4/widget/ViewDragHelper$Callback;->onEdgeTouched(II)V + + goto :goto_1f + + .line 987 + .end local v4 # "edgesTouched":I + :cond_7f + iget v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + const/4 v12, 0x2 + + if-ne v11, v12, :cond_1f + + .line 989 + float-to-int v11, v9 + + float-to-int v12, v10 + + invoke-virtual {p0, v11, v12}, Landroid/support/v4/widget/ViewDragHelper;->findTopChildUnder(II)Landroid/view/View; + + move-result-object v8 + + .line 990 + .restart local v8 # "toCapture":Landroid/view/View; + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + if-ne v8, v11, :cond_1f + + .line 991 + invoke-virtual {p0, v8, v7}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + goto :goto_1f + + .line 999 + .end local v7 # "pointerId":I + .end local v8 # "toCapture":Landroid/view/View; + .end local v9 # "x":F + .end local v10 # "y":F + :pswitch_92 + invoke-static {p1}, Landroid/support/v4/view/MotionEventCompat;->getPointerCount(Landroid/view/MotionEvent;)I + + move-result v6 + + .line 1000 + .local v6, "pointerCount":I + const/4 v5, 0x0 + + .local v5, "i":I + :goto_97 + if-ge v5, v6, :cond_b9 + + .line 1001 + invoke-static {p1, v5}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v7 + + .line 1002 + .restart local v7 # "pointerId":I + invoke-static {p1, v5}, Landroid/support/v4/view/MotionEventCompat;->getX(Landroid/view/MotionEvent;I)F + + move-result v9 + + .line 1003 + .restart local v9 # "x":F + invoke-static {p1, v5}, Landroid/support/v4/view/MotionEventCompat;->getY(Landroid/view/MotionEvent;I)F + + move-result v10 + + .line 1004 + .restart local v10 # "y":F + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionX:[F + + aget v11, v11, v7 + + sub-float v2, v9, v11 + + .line 1005 + .local v2, "dx":F + iget-object v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mInitialMotionY:[F + + aget v11, v11, v7 + + sub-float v3, v10, v11 + + .line 1007 + .local v3, "dy":F + invoke-direct {p0, v2, v3, v7}, Landroid/support/v4/widget/ViewDragHelper;->reportNewEdgeDrags(FFI)V + + .line 1008 + iget v11, p0, Landroid/support/v4/widget/ViewDragHelper;->mDragState:I + + const/4 v12, 0x1 + + if-ne v11, v12, :cond_be + + .line 1019 + .end local v2 # "dx":F + .end local v3 # "dy":F + .end local v7 # "pointerId":I + .end local v9 # "x":F + .end local v10 # "y":F + :cond_b9 + invoke-direct {p0, p1}, Landroid/support/v4/widget/ViewDragHelper;->saveLastMotion(Landroid/view/MotionEvent;)V + + goto/16 :goto_1f + + .line 1013 + .restart local v2 # "dx":F + .restart local v3 # "dy":F + .restart local v7 # "pointerId":I + .restart local v9 # "x":F + .restart local v10 # "y":F + :cond_be + float-to-int v11, v9 + + float-to-int v12, v10 + + invoke-virtual {p0, v11, v12}, Landroid/support/v4/widget/ViewDragHelper;->findTopChildUnder(II)Landroid/view/View; + + move-result-object v8 + + .line 1014 + .restart local v8 # "toCapture":Landroid/view/View; + if-eqz v8, :cond_d2 + + invoke-direct {p0, v8, v2, v3}, Landroid/support/v4/widget/ViewDragHelper;->checkTouchSlop(Landroid/view/View;FF)Z + + move-result v11 + + if-eqz v11, :cond_d2 + + invoke-virtual {p0, v8, v7}, Landroid/support/v4/widget/ViewDragHelper;->tryCaptureViewForDrag(Landroid/view/View;I)Z + + move-result v11 + + if-nez v11, :cond_b9 + + .line 1000 + :cond_d2 + add-int/lit8 v5, v5, 0x1 + + goto :goto_97 + + .line 1024 + .end local v2 # "dx":F + .end local v3 # "dy":F + .end local v5 # "i":I + .end local v6 # "pointerCount":I + .end local v7 # "pointerId":I + .end local v8 # "toCapture":Landroid/view/View; + .end local v9 # "x":F + .end local v10 # "y":F + :pswitch_d5 + invoke-static {p1, v1}, Landroid/support/v4/view/MotionEventCompat;->getPointerId(Landroid/view/MotionEvent;I)I + + move-result v7 + + .line 1025 + .restart local v7 # "pointerId":I + invoke-direct {p0, v7}, Landroid/support/v4/widget/ViewDragHelper;->clearMotionHistory(I)V + + goto/16 :goto_1f + + .line 1031 + .end local v7 # "pointerId":I + :pswitch_de + invoke-virtual {p0}, Landroid/support/v4/widget/ViewDragHelper;->cancel()V + + goto/16 :goto_1f + + .line 1036 + :cond_e3 + const/4 v11, 0x0 + + goto/16 :goto_25 + + .line 953 + :pswitch_data_e6 + .packed-switch 0x0 + :pswitch_26 + :pswitch_de + :pswitch_92 + :pswitch_de + :pswitch_1f + :pswitch_5a + :pswitch_d5 + .end packed-switch +.end method + +.method public smoothSlideViewTo(Landroid/view/View;II)Z + .registers 6 + .param p1, "child" # Landroid/view/View; + .param p2, "finalLeft" # I + .param p3, "finalTop" # I + + .prologue + const/4 v1, 0x0 + + .line 539 + iput-object p1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + .line 540 + const/4 v0, -0x1 + + iput v0, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + .line 542 + invoke-direct {p0, p2, p3, v1, v1}, Landroid/support/v4/widget/ViewDragHelper;->forceSettleCapturedViewAt(IIII)Z + + move-result v0 + + return v0 +.end method + +.method tryCaptureViewForDrag(Landroid/view/View;I)Z + .registers 5 + .param p1, "toCapture" # Landroid/view/View; + .param p2, "pointerId" # I + + .prologue + const/4 v0, 0x1 + + .line 883 + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCapturedView:Landroid/view/View; + + if-ne p1, v1, :cond_a + + iget v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + if-ne v1, p2, :cond_a + + .line 892 + :goto_9 + return v0 + + .line 887 + :cond_a + if-eqz p1, :cond_1a + + iget-object v1, p0, Landroid/support/v4/widget/ViewDragHelper;->mCallback:Landroid/support/v4/widget/ViewDragHelper$Callback; + + invoke-virtual {v1, p1, p2}, Landroid/support/v4/widget/ViewDragHelper$Callback;->tryCaptureView(Landroid/view/View;I)Z + + move-result v1 + + if-eqz v1, :cond_1a + + .line 888 + iput p2, p0, Landroid/support/v4/widget/ViewDragHelper;->mActivePointerId:I + + .line 889 + invoke-virtual {p0, p1, p2}, Landroid/support/v4/widget/ViewDragHelper;->captureChildView(Landroid/view/View;I)V + + goto :goto_9 + + .line 892 + :cond_1a + const/4 v0, 0x0 + + goto :goto_9 +.end method diff --git a/samples/Smali/WbxmlSerializer.smali b/samples/Smali/WbxmlSerializer.smali new file mode 100644 index 00000000..2d870d8c --- /dev/null +++ b/samples/Smali/WbxmlSerializer.smali @@ -0,0 +1,1863 @@ +.class public Lorg/kxml2/wap/WbxmlSerializer; +.super Ljava/lang/Object; +.source "WbxmlSerializer.java" + +# interfaces +.implements Lorg/xmlpull/v1/XmlSerializer; + + +# instance fields +.field private attrPage:I + +.field attrStartTable:Ljava/util/Hashtable; + +.field attrValueTable:Ljava/util/Hashtable; + +.field attributes:Ljava/util/Vector; + +.field buf:Ljava/io/ByteArrayOutputStream; + +.field depth:I + +.field private encoding:Ljava/lang/String; + +.field private headerSent:Z + +.field name:Ljava/lang/String; + +.field namespace:Ljava/lang/String; + +.field out:Ljava/io/OutputStream; + +.field pending:Ljava/lang/String; + +.field stringTable:Ljava/util/Hashtable; + +.field stringTableBuf:Ljava/io/ByteArrayOutputStream; + +.field private tagPage:I + +.field tagTable:Ljava/util/Hashtable; + + +# direct methods +.method public constructor ()V + .locals 1 + + .prologue + .line 35 + invoke-direct {p0}, Ljava/lang/Object;->()V + + .line 38 + new-instance v0, Ljava/util/Hashtable; + + invoke-direct {v0}, Ljava/util/Hashtable;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTable:Ljava/util/Hashtable; + + .line 42 + new-instance v0, Ljava/io/ByteArrayOutputStream; + + invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + .line 43 + new-instance v0, Ljava/io/ByteArrayOutputStream; + + invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTableBuf:Ljava/io/ByteArrayOutputStream; + + .line 49 + new-instance v0, Ljava/util/Vector; + + invoke-direct {v0}, Ljava/util/Vector;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + .line 51 + new-instance v0, Ljava/util/Hashtable; + + invoke-direct {v0}, Ljava/util/Hashtable;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrStartTable:Ljava/util/Hashtable; + + .line 52 + new-instance v0, Ljava/util/Hashtable; + + invoke-direct {v0}, Ljava/util/Hashtable;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrValueTable:Ljava/util/Hashtable; + + .line 53 + new-instance v0, Ljava/util/Hashtable; + + invoke-direct {v0}, Ljava/util/Hashtable;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->tagTable:Ljava/util/Hashtable; + + .line 60 + const/4 v0, 0x0 + + iput-boolean v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->headerSent:Z + + return-void +.end method + +.method static writeInt(Ljava/io/OutputStream;I)V + .locals 4 + .param p0, "out" # Ljava/io/OutputStream; + .param p1, "i" # I + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 447 + const/4 v3, 0x5 + + new-array v0, v3, [B + + .line 448 + .local v0, "buf":[B + const/4 v1, 0x0 + + .line 451 + .local v1, "idx":I + :goto_0 + add-int/lit8 v2, v1, 0x1 + + .end local v1 # "idx":I + .local v2, "idx":I + and-int/lit8 v3, p1, 0x7f + + int-to-byte v3, v3 + + aput-byte v3, v0, v1 + + .line 452 + shr-int/lit8 p1, p1, 0x7 + + .line 454 + if-nez p1, :cond_1 + + move v1, v2 + + .line 456 + .end local v2 # "idx":I + .restart local v1 # "idx":I + :goto_1 + const/4 v3, 0x1 + + if-le v1, v3, :cond_0 + + .line 457 + add-int/lit8 v1, v1, -0x1 + + aget-byte v3, v0, v1 + + or-int/lit16 v3, v3, 0x80 + + invoke-virtual {p0, v3}, Ljava/io/OutputStream;->write(I)V + + goto :goto_1 + + .line 459 + :cond_0 + const/4 v3, 0x0 + + aget-byte v3, v0, v3 + + invoke-virtual {p0, v3}, Ljava/io/OutputStream;->write(I)V + + .line 460 + return-void + + .end local v1 # "idx":I + .restart local v2 # "idx":I + :cond_1 + move v1, v2 + + .end local v2 # "idx":I + .restart local v1 # "idx":I + goto :goto_0 +.end method + +.method private writeStr(Ljava/lang/String;)V + .locals 10 + .param p1, "text" # Ljava/lang/String; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + const/16 v9, 0x41 + + const/16 v8, 0x20 + + const/4 v7, 0x0 + + const/16 v6, 0x83 + + .line 349 + const/4 v2, 0x0 + + .line 350 + .local v2, "p0":I + const/4 v0, 0x0 + + .line 351 + .local v0, "lastCut":I + invoke-virtual {p1}, Ljava/lang/String;->length()I + + move-result v1 + + .line 353 + .local v1, "len":I + iget-boolean v4, p0, Lorg/kxml2/wap/WbxmlSerializer;->headerSent:Z + + if-eqz v4, :cond_3 + + .line 354 + iget-object v4, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {p0, v4, p1}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrI(Ljava/io/OutputStream;Ljava/lang/String;)V + + .line 394 + :cond_0 + :goto_0 + return-void + + .line 367 + .local v3, "p1":I + :cond_1 + sub-int v4, v3, v2 + + const/16 v5, 0xa + + if-le v4, v5, :cond_2 + + .line 368 + if-le v2, v0, :cond_5 + + add-int/lit8 v4, v2, -0x1 + + invoke-virtual {p1, v4}, Ljava/lang/String;->charAt(I)C + + move-result v4 + + if-ne v4, v8, :cond_5 + + iget-object v4, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTable:Ljava/util/Hashtable; + + invoke-virtual {p1, v2, v3}, Ljava/lang/String;->substring(II)Ljava/lang/String; + + move-result-object v5 + + invoke-virtual {v4, v5}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object v4 + + if-nez v4, :cond_5 + + .line 370 + iget-object v4, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v4, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 371 + invoke-virtual {p1, v0, v3}, Ljava/lang/String;->substring(II)Ljava/lang/String; + + move-result-object v4 + + invoke-direct {p0, v4, v7}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrT(Ljava/lang/String;Z)V + + .line 385 + :goto_1 + move v0, v3 + + .line 387 + :cond_2 + move v2, v3 + + .line 358 + .end local v3 # "p1":I + :cond_3 + if-ge v2, v1, :cond_8 + + .line 359 + :goto_2 + if-ge v2, v1, :cond_4 + + invoke-virtual {p1, v2}, Ljava/lang/String;->charAt(I)C + + move-result v4 + + if-ge v4, v9, :cond_4 + + .line 360 + add-int/lit8 v2, v2, 0x1 + + goto :goto_2 + + .line 362 + :cond_4 + move v3, v2 + + .line 363 + .restart local v3 # "p1":I + :goto_3 + if-ge v3, v1, :cond_1 + + invoke-virtual {p1, v3}, Ljava/lang/String;->charAt(I)C + + move-result v4 + + if-lt v4, v9, :cond_1 + + .line 364 + add-int/lit8 v3, v3, 0x1 + + goto :goto_3 + + .line 374 + :cond_5 + if-le v2, v0, :cond_6 + + add-int/lit8 v4, v2, -0x1 + + invoke-virtual {p1, v4}, Ljava/lang/String;->charAt(I)C + + move-result v4 + + if-ne v4, v8, :cond_6 + + .line 375 + add-int/lit8 v2, v2, -0x1 + + .line 378 + :cond_6 + if-le v2, v0, :cond_7 + + .line 379 + iget-object v4, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v4, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 380 + invoke-virtual {p1, v0, v2}, Ljava/lang/String;->substring(II)Ljava/lang/String; + + move-result-object v4 + + invoke-direct {p0, v4, v7}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrT(Ljava/lang/String;Z)V + + .line 382 + :cond_7 + iget-object v4, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v4, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 383 + invoke-virtual {p1, v2, v3}, Ljava/lang/String;->substring(II)Ljava/lang/String; + + move-result-object v4 + + const/4 v5, 0x1 + + invoke-direct {p0, v4, v5}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrT(Ljava/lang/String;Z)V + + goto :goto_1 + + .line 390 + .end local v3 # "p1":I + :cond_8 + if-ge v0, v1, :cond_0 + + .line 391 + iget-object v4, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v4, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 392 + invoke-virtual {p1, v0, v1}, Ljava/lang/String;->substring(II)Ljava/lang/String; + + move-result-object v4 + + invoke-direct {p0, v4, v7}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrT(Ljava/lang/String;Z)V + + goto :goto_0 +.end method + +.method private final writeStrT(Ljava/lang/String;Z)V + .locals 3 + .param p1, "s" # Ljava/lang/String; + .param p2, "mayPrependSpace" # Z + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 470 + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTable:Ljava/util/Hashtable; + + invoke-virtual {v1, p1}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object v0 + + check-cast v0, Ljava/lang/Integer; + + .line 471 + .local v0, "idx":Ljava/lang/Integer; + iget-object v2, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + if-nez v0, :cond_0 + + invoke-virtual {p0, p1, p2}, Lorg/kxml2/wap/WbxmlSerializer;->addToStringTable(Ljava/lang/String;Z)I + + move-result v1 + + :goto_0 + invoke-static {v2, v1}, Lorg/kxml2/wap/WbxmlSerializer;->writeInt(Ljava/io/OutputStream;I)V + + .line 474 + return-void + + .line 471 + :cond_0 + invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I + + move-result v1 + + goto :goto_0 +.end method + + +# virtual methods +.method public addToStringTable(Ljava/lang/String;Z)I + .locals 9 + .param p1, "s" # Ljava/lang/String; + .param p2, "mayPrependSpace" # Z + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + const/4 v8, 0x1 + + const/4 v5, 0x0 + + const/16 v7, 0x20 + + .line 485 + iget-boolean v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->headerSent:Z + + if-eqz v3, :cond_0 + + .line 486 + new-instance v3, Ljava/io/IOException; + + const-string v4, "stringtable sent" + + invoke-direct {v3, v4}, Ljava/io/IOException;->(Ljava/lang/String;)V + + throw v3 + + .line 489 + :cond_0 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTableBuf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v3}, Ljava/io/ByteArrayOutputStream;->size()I + + move-result v0 + + .line 490 + .local v0, "i":I + move v2, v0 + + .line 491 + .local v2, "offset":I + invoke-virtual {p1, v5}, Ljava/lang/String;->charAt(I)C + + move-result v3 + + const/16 v4, 0x30 + + if-lt v3, v4, :cond_1 + + if-eqz p2, :cond_1 + + .line 492 + new-instance v3, Ljava/lang/StringBuilder; + + invoke-direct {v3}, Ljava/lang/StringBuilder;->()V + + invoke-virtual {v3, v7}, Ljava/lang/StringBuilder;->append(C)Ljava/lang/StringBuilder; + + move-result-object v3 + + invoke-virtual {v3, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v3 + + invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object p1 + + .line 493 + add-int/lit8 v2, v2, 0x1 + + .line 496 + :cond_1 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTable:Ljava/util/Hashtable; + + new-instance v4, Ljava/lang/Integer; + + invoke-direct {v4, v0}, Ljava/lang/Integer;->(I)V + + invoke-virtual {v3, p1, v4}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 497 + invoke-virtual {p1, v5}, Ljava/lang/String;->charAt(I)C + + move-result v3 + + if-ne v3, v7, :cond_2 + + .line 498 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTable:Ljava/util/Hashtable; + + invoke-virtual {p1, v8}, Ljava/lang/String;->substring(I)Ljava/lang/String; + + move-result-object v4 + + new-instance v5, Ljava/lang/Integer; + + add-int/lit8 v6, v0, 0x1 + + invoke-direct {v5, v6}, Ljava/lang/Integer;->(I)V + + invoke-virtual {v3, v4, v5}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 500 + :cond_2 + invoke-virtual {p1, v7}, Ljava/lang/String;->lastIndexOf(I)I + + move-result v1 + + .line 501 + .local v1, "j":I + if-le v1, v8, :cond_3 + + .line 502 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTable:Ljava/util/Hashtable; + + invoke-virtual {p1, v1}, Ljava/lang/String;->substring(I)Ljava/lang/String; + + move-result-object v4 + + new-instance v5, Ljava/lang/Integer; + + add-int v6, v0, v1 + + invoke-direct {v5, v6}, Ljava/lang/Integer;->(I)V + + invoke-virtual {v3, v4, v5}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 503 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTable:Ljava/util/Hashtable; + + add-int/lit8 v4, v1, 0x1 + + invoke-virtual {p1, v4}, Ljava/lang/String;->substring(I)Ljava/lang/String; + + move-result-object v4 + + new-instance v5, Ljava/lang/Integer; + + add-int v6, v0, v1 + + add-int/lit8 v6, v6, 0x1 + + invoke-direct {v5, v6}, Ljava/lang/Integer;->(I)V + + invoke-virtual {v3, v4, v5}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 506 + :cond_3 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTableBuf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {p0, v3, p1}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrI(Ljava/io/OutputStream;Ljava/lang/String;)V + + .line 507 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTableBuf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v3}, Ljava/io/ByteArrayOutputStream;->flush()V + + .line 508 + return v2 +.end method + +.method public attribute(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer; + .locals 1 + .param p1, "namespace" # Ljava/lang/String; + .param p2, "name" # Ljava/lang/String; + .param p3, "value" # Ljava/lang/String; + + .prologue + .line 69 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + invoke-virtual {v0, p2}, Ljava/util/Vector;->addElement(Ljava/lang/Object;)V + + .line 70 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + invoke-virtual {v0, p3}, Ljava/util/Vector;->addElement(Ljava/lang/Object;)V + + .line 71 + return-object p0 +.end method + +.method public cdsect(Ljava/lang/String;)V + .locals 0 + .param p1, "cdsect" # Ljava/lang/String; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 76 + invoke-virtual {p0, p1}, Lorg/kxml2/wap/WbxmlSerializer;->text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer; + + .line 77 + return-void +.end method + +.method public checkPending(Z)V + .locals 8 + .param p1, "degenerated" # Z + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + const/4 v4, 0x4 + + const/4 v7, 0x1 + + const/4 v6, 0x0 + + .line 180 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->pending:Ljava/lang/String; + + if-nez v3, :cond_0 + + .line 240 + :goto_0 + return-void + + .line 183 + :cond_0 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + invoke-virtual {v3}, Ljava/util/Vector;->size()I + + move-result v2 + + .line 185 + .local v2, "len":I + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->tagTable:Ljava/util/Hashtable; + + iget-object v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->pending:Ljava/lang/String; + + invoke-virtual {v3, v5}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object v3 + + check-cast v3, [I + + move-object v1, v3 + + check-cast v1, [I + + .line 188 + .local v1, "idx":[I + if-nez v1, :cond_4 + + .line 189 + iget-object v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + if-nez v2, :cond_2 + + if-eqz p1, :cond_1 + + move v3, v4 + + :goto_1 + invoke-virtual {v5, v3}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 193 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->pending:Ljava/lang/String; + + invoke-direct {p0, v3, v6}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrT(Ljava/lang/String;Z)V + + .line 205 + :goto_2 + const/4 v0, 0x0 + + .local v0, "i":I + :goto_3 + if-ge v0, v2, :cond_d + + .line 206 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrStartTable:Ljava/util/Hashtable; + + iget-object v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + invoke-virtual {v5, v0}, Ljava/util/Vector;->elementAt(I)Ljava/lang/Object; + + move-result-object v5 + + invoke-virtual {v3, v5}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object v3 + + check-cast v3, [I + + move-object v1, v3 + + check-cast v1, [I + + .line 208 + if-nez v1, :cond_9 + + .line 209 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v3, v4}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 210 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + invoke-virtual {v3, v0}, Ljava/util/Vector;->elementAt(I)Ljava/lang/Object; + + move-result-object v3 + + check-cast v3, Ljava/lang/String; + + invoke-direct {p0, v3, v6}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrT(Ljava/lang/String;Z)V + + .line 220 + :goto_4 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrValueTable:Ljava/util/Hashtable; + + iget-object v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + add-int/lit8 v0, v0, 0x1 + + invoke-virtual {v5, v0}, Ljava/util/Vector;->elementAt(I)Ljava/lang/Object; + + move-result-object v5 + + invoke-virtual {v3, v5}, Ljava/util/Hashtable;->get(Ljava/lang/Object;)Ljava/lang/Object; + + move-result-object v3 + + check-cast v3, [I + + move-object v1, v3 + + check-cast v1, [I + + .line 221 + if-nez v1, :cond_b + + .line 222 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + invoke-virtual {v3, v0}, Ljava/util/Vector;->elementAt(I)Ljava/lang/Object; + + move-result-object v3 + + check-cast v3, Ljava/lang/String; + + invoke-direct {p0, v3}, Lorg/kxml2/wap/WbxmlSerializer;->writeStr(Ljava/lang/String;)V + + .line 232 + :goto_5 + add-int/lit8 v0, v0, 0x1 + + goto :goto_3 + + .line 189 + .end local v0 # "i":I + :cond_1 + const/16 v3, 0x44 + + goto :goto_1 + + :cond_2 + if-eqz p1, :cond_3 + + const/16 v3, 0x84 + + goto :goto_1 + + :cond_3 + const/16 v3, 0xc4 + + goto :goto_1 + + .line 195 + :cond_4 + aget v3, v1, v6 + + iget v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->tagPage:I + + if-eq v3, v5, :cond_5 + + .line 196 + aget v3, v1, v6 + + iput v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->tagPage:I + + .line 197 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v3, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 198 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + iget v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->tagPage:I + + invoke-virtual {v3, v5}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 200 + :cond_5 + iget-object v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + if-nez v2, :cond_7 + + if-eqz p1, :cond_6 + + aget v3, v1, v7 + + :goto_6 + invoke-virtual {v5, v3}, Ljava/io/ByteArrayOutputStream;->write(I)V + + goto :goto_2 + + :cond_6 + aget v3, v1, v7 + + or-int/lit8 v3, v3, 0x40 + + goto :goto_6 + + :cond_7 + if-eqz p1, :cond_8 + + aget v3, v1, v7 + + or-int/lit16 v3, v3, 0x80 + + goto :goto_6 + + :cond_8 + aget v3, v1, v7 + + or-int/lit16 v3, v3, 0xc0 + + goto :goto_6 + + .line 213 + .restart local v0 # "i":I + :cond_9 + aget v3, v1, v6 + + iget v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrPage:I + + if-eq v3, v5, :cond_a + + .line 214 + aget v3, v1, v6 + + iput v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrPage:I + + .line 215 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v3, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 216 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + iget v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrPage:I + + invoke-virtual {v3, v5}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 218 + :cond_a + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + aget v5, v1, v7 + + invoke-virtual {v3, v5}, Ljava/io/ByteArrayOutputStream;->write(I)V + + goto :goto_4 + + .line 225 + :cond_b + aget v3, v1, v6 + + iget v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrPage:I + + if-eq v3, v5, :cond_c + + .line 226 + aget v3, v1, v6 + + iput v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrPage:I + + .line 227 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v3, v6}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 228 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + iget v5, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrPage:I + + invoke-virtual {v3, v5}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 230 + :cond_c + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + aget v5, v1, v7 + + invoke-virtual {v3, v5}, Ljava/io/ByteArrayOutputStream;->write(I)V + + goto :goto_5 + + .line 235 + :cond_d + if-lez v2, :cond_e + + .line 236 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v3, v7}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 238 + :cond_e + const/4 v3, 0x0 + + iput-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->pending:Ljava/lang/String; + + .line 239 + iget-object v3, p0, Lorg/kxml2/wap/WbxmlSerializer;->attributes:Ljava/util/Vector; + + invoke-virtual {v3}, Ljava/util/Vector;->removeAllElements()V + + goto/16 :goto_0 +.end method + +.method public comment(Ljava/lang/String;)V + .locals 0 + .param p1, "comment" # Ljava/lang/String; + + .prologue + .line 84 + return-void +.end method + +.method public docdecl(Ljava/lang/String;)V + .locals 2 + .param p1, "docdecl" # Ljava/lang/String; + + .prologue + .line 90 + new-instance v0, Ljava/lang/RuntimeException; + + const-string v1, "Cannot write docdecl for WBXML" + + invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public endDocument()V + .locals 0 + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 158 + invoke-virtual {p0}, Lorg/kxml2/wap/WbxmlSerializer;->flush()V + + .line 159 + return-void +.end method + +.method public endTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer; + .locals 2 + .param p1, "namespace" # Ljava/lang/String; + .param p2, "name" # Ljava/lang/String; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + const/4 v1, 0x1 + + .line 400 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->pending:Ljava/lang/String; + + if-eqz v0, :cond_0 + + .line 401 + invoke-virtual {p0, v1}, Lorg/kxml2/wap/WbxmlSerializer;->checkPending(Z)V + + .line 405 + :goto_0 + iget v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->depth:I + + add-int/lit8 v0, v0, -0x1 + + iput v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->depth:I + + .line 406 + return-object p0 + + .line 403 + :cond_0 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v0, v1}, Ljava/io/ByteArrayOutputStream;->write(I)V + + goto :goto_0 +.end method + +.method public entityRef(Ljava/lang/String;)V + .locals 2 + .param p1, "er" # Ljava/lang/String; + + .prologue + .line 97 + new-instance v0, Ljava/lang/RuntimeException; + + const-string v1, "EntityReference not supported for WBXML" + + invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public flush()V + .locals 2 + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 167 + const/4 v0, 0x0 + + invoke-virtual {p0, v0}, Lorg/kxml2/wap/WbxmlSerializer;->checkPending(Z)V + + .line 169 + iget-boolean v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->headerSent:Z + + if-nez v0, :cond_0 + + .line 170 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTableBuf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->size()I + + move-result v1 + + invoke-static {v0, v1}, Lorg/kxml2/wap/WbxmlSerializer;->writeInt(Ljava/io/OutputStream;I)V + + .line 171 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTableBuf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B + + move-result-object v1 + + invoke-virtual {v0, v1}, Ljava/io/OutputStream;->write([B)V + + .line 172 + const/4 v0, 0x1 + + iput-boolean v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->headerSent:Z + + .line 175 + :cond_0 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v1}, Ljava/io/ByteArrayOutputStream;->toByteArray()[B + + move-result-object v1 + + invoke-virtual {v0, v1}, Ljava/io/OutputStream;->write([B)V + + .line 176 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v0}, Ljava/io/ByteArrayOutputStream;->reset()V + + .line 177 + return-void +.end method + +.method public getDepth()I + .locals 1 + + .prologue + .line 104 + iget v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->depth:I + + return v0 +.end method + +.method public getFeature(Ljava/lang/String;)Z + .locals 1 + .param p1, "name" # Ljava/lang/String; + + .prologue + .line 111 + const/4 v0, 0x0 + + return v0 +.end method + +.method public getName()Ljava/lang/String; + .locals 1 + + .prologue + .line 129 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->pending:Ljava/lang/String; + + return-object v0 +.end method + +.method public getNamespace()Ljava/lang/String; + .locals 1 + + .prologue + .line 120 + const/4 v0, 0x0 + + return-object v0 +.end method + +.method public getPrefix(Ljava/lang/String;Z)Ljava/lang/String; + .locals 2 + .param p1, "nsp" # Ljava/lang/String; + .param p2, "create" # Z + + .prologue + .line 136 + new-instance v0, Ljava/lang/RuntimeException; + + const-string v1, "NYI" + + invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public getProperty(Ljava/lang/String;)Ljava/lang/Object; + .locals 1 + .param p1, "name" # Ljava/lang/String; + + .prologue + .line 145 + const/4 v0, 0x0 + + return-object v0 +.end method + +.method public ignorableWhitespace(Ljava/lang/String;)V + .locals 0 + .param p1, "sp" # Ljava/lang/String; + + .prologue + .line 149 + return-void +.end method + +.method public processingInstruction(Ljava/lang/String;)V + .locals 2 + .param p1, "pi" # Ljava/lang/String; + + .prologue + .line 246 + new-instance v0, Ljava/lang/RuntimeException; + + const-string v1, "PI NYI" + + invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public setAttrStartTable(I[Ljava/lang/String;)V + .locals 4 + .param p1, "page" # I + .param p2, "attrStartTable" # [Ljava/lang/String; + + .prologue + .line 536 + const/4 v0, 0x0 + + .local v0, "i":I + :goto_0 + array-length v2, p2 + + if-ge v0, v2, :cond_1 + + .line 537 + aget-object v2, p2, v0 + + if-eqz v2, :cond_0 + + .line 538 + const/4 v2, 0x2 + + new-array v1, v2, [I + + const/4 v2, 0x0 + + aput p1, v1, v2 + + const/4 v2, 0x1 + + add-int/lit8 v3, v0, 0x5 + + aput v3, v1, v2 + + .line 539 + .local v1, "idx":[I + iget-object v2, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrStartTable:Ljava/util/Hashtable; + + aget-object v3, p2, v0 + + invoke-virtual {v2, v3, v1}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 536 + .end local v1 # "idx":[I + :cond_0 + add-int/lit8 v0, v0, 0x1 + + goto :goto_0 + + .line 542 + :cond_1 + return-void +.end method + +.method public setAttrValueTable(I[Ljava/lang/String;)V + .locals 4 + .param p1, "page" # I + .param p2, "attrValueTable" # [Ljava/lang/String; + + .prologue + .line 552 + const/4 v0, 0x0 + + .local v0, "i":I + :goto_0 + array-length v2, p2 + + if-ge v0, v2, :cond_1 + + .line 553 + aget-object v2, p2, v0 + + if-eqz v2, :cond_0 + + .line 554 + const/4 v2, 0x2 + + new-array v1, v2, [I + + const/4 v2, 0x0 + + aput p1, v1, v2 + + const/4 v2, 0x1 + + add-int/lit16 v3, v0, 0x85 + + aput v3, v1, v2 + + .line 555 + .local v1, "idx":[I + iget-object v2, p0, Lorg/kxml2/wap/WbxmlSerializer;->attrValueTable:Ljava/util/Hashtable; + + aget-object v3, p2, v0 + + invoke-virtual {v2, v3, v1}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 552 + .end local v1 # "idx":[I + :cond_0 + add-int/lit8 v0, v0, 0x1 + + goto :goto_0 + + .line 558 + :cond_1 + return-void +.end method + +.method public setFeature(Ljava/lang/String;Z)V + .locals 3 + .param p1, "name" # Ljava/lang/String; + .param p2, "value" # Z + + .prologue + .line 253 + new-instance v0, Ljava/lang/IllegalArgumentException; + + new-instance v1, Ljava/lang/StringBuilder; + + invoke-direct {v1}, Ljava/lang/StringBuilder;->()V + + const-string v2, "unknown feature " + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v1 + + invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public setOutput(Ljava/io/OutputStream;Ljava/lang/String;)V + .locals 1 + .param p1, "out" # Ljava/io/OutputStream; + .param p2, "encoding" # Ljava/lang/String; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 268 + if-nez p2, :cond_0 + + const-string p2, "UTF-8" + + .end local p2 # "encoding":Ljava/lang/String; + :cond_0 + iput-object p2, p0, Lorg/kxml2/wap/WbxmlSerializer;->encoding:Ljava/lang/String; + + .line 269 + iput-object p1, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + .line 271 + new-instance v0, Ljava/io/ByteArrayOutputStream; + + invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + .line 272 + new-instance v0, Ljava/io/ByteArrayOutputStream; + + invoke-direct {v0}, Ljava/io/ByteArrayOutputStream;->()V + + iput-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->stringTableBuf:Ljava/io/ByteArrayOutputStream; + + .line 273 + const/4 v0, 0x0 + + iput-boolean v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->headerSent:Z + + .line 276 + return-void +.end method + +.method public setOutput(Ljava/io/Writer;)V + .locals 2 + .param p1, "writer" # Ljava/io/Writer; + + .prologue + .line 260 + new-instance v0, Ljava/lang/RuntimeException; + + const-string v1, "Wbxml requires an OutputStream!" + + invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public setPrefix(Ljava/lang/String;Ljava/lang/String;)V + .locals 2 + .param p1, "prefix" # Ljava/lang/String; + .param p2, "nsp" # Ljava/lang/String; + + .prologue + .line 282 + new-instance v0, Ljava/lang/RuntimeException; + + const-string v1, "NYI" + + invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public setProperty(Ljava/lang/String;Ljava/lang/Object;)V + .locals 3 + .param p1, "property" # Ljava/lang/String; + .param p2, "value" # Ljava/lang/Object; + + .prologue + .line 289 + new-instance v0, Ljava/lang/IllegalArgumentException; + + new-instance v1, Ljava/lang/StringBuilder; + + invoke-direct {v1}, Ljava/lang/StringBuilder;->()V + + const-string v2, "unknown property " + + invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1, p1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; + + move-result-object v1 + + invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String; + + move-result-object v1 + + invoke-direct {v0, v1}, Ljava/lang/IllegalArgumentException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public setTagTable(I[Ljava/lang/String;)V + .locals 4 + .param p1, "page" # I + .param p2, "tagTable" # [Ljava/lang/String; + + .prologue + .line 518 + const/4 v0, 0x0 + + .local v0, "i":I + :goto_0 + array-length v2, p2 + + if-ge v0, v2, :cond_1 + + .line 519 + aget-object v2, p2, v0 + + if-eqz v2, :cond_0 + + .line 520 + const/4 v2, 0x2 + + new-array v1, v2, [I + + const/4 v2, 0x0 + + aput p1, v1, v2 + + const/4 v2, 0x1 + + add-int/lit8 v3, v0, 0x5 + + aput v3, v1, v2 + + .line 521 + .local v1, "idx":[I + iget-object v2, p0, Lorg/kxml2/wap/WbxmlSerializer;->tagTable:Ljava/util/Hashtable; + + aget-object v3, p2, v0 + + invoke-virtual {v2, v3, v1}, Ljava/util/Hashtable;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; + + .line 518 + .end local v1 # "idx":[I + :cond_0 + add-int/lit8 v0, v0, 0x1 + + goto :goto_0 + + .line 524 + :cond_1 + return-void +.end method + +.method public startDocument(Ljava/lang/String;Ljava/lang/Boolean;)V + .locals 2 + .param p1, "encoding" # Ljava/lang/String; + .param p2, "standalone" # Ljava/lang/Boolean; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 299 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + const/4 v1, 0x3 + + invoke-virtual {v0, v1}, Ljava/io/OutputStream;->write(I)V + + .line 301 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + const/4 v1, 0x1 + + invoke-virtual {v0, v1}, Ljava/io/OutputStream;->write(I)V + + .line 305 + if-eqz p1, :cond_0 + + .line 306 + iput-object p1, p0, Lorg/kxml2/wap/WbxmlSerializer;->encoding:Ljava/lang/String; + + .line 309 + :cond_0 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->encoding:Ljava/lang/String; + + invoke-virtual {v0}, Ljava/lang/String;->toUpperCase()Ljava/lang/String; + + move-result-object v0 + + const-string v1, "UTF-8" + + invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_1 + + .line 310 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + const/16 v1, 0x6a + + invoke-virtual {v0, v1}, Ljava/io/OutputStream;->write(I)V + + .line 316 + :goto_0 + return-void + + .line 311 + :cond_1 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->encoding:Ljava/lang/String; + + invoke-virtual {v0}, Ljava/lang/String;->toUpperCase()Ljava/lang/String; + + move-result-object v0 + + const-string v1, "ISO-8859-1" + + invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-eqz v0, :cond_2 + + .line 312 + iget-object v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->out:Ljava/io/OutputStream; + + const/4 v1, 0x4 + + invoke-virtual {v0, v1}, Ljava/io/OutputStream;->write(I)V + + goto :goto_0 + + .line 314 + :cond_2 + new-instance v0, Ljava/io/UnsupportedEncodingException; + + invoke-direct {v0, p1}, Ljava/io/UnsupportedEncodingException;->(Ljava/lang/String;)V + + throw v0 +.end method + +.method public startTag(Ljava/lang/String;Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer; + .locals 2 + .param p1, "namespace" # Ljava/lang/String; + .param p2, "name" # Ljava/lang/String; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 321 + if-eqz p1, :cond_0 + + const-string v0, "" + + invoke-virtual {v0, p1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z + + move-result v0 + + if-nez v0, :cond_0 + + .line 322 + new-instance v0, Ljava/lang/RuntimeException; + + const-string v1, "NSP NYI" + + invoke-direct {v0, v1}, Ljava/lang/RuntimeException;->(Ljava/lang/String;)V + + throw v0 + + .line 326 + :cond_0 + const/4 v0, 0x0 + + invoke-virtual {p0, v0}, Lorg/kxml2/wap/WbxmlSerializer;->checkPending(Z)V + + .line 327 + iput-object p2, p0, Lorg/kxml2/wap/WbxmlSerializer;->pending:Ljava/lang/String; + + .line 328 + iget v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->depth:I + + add-int/lit8 v0, v0, 0x1 + + iput v0, p0, Lorg/kxml2/wap/WbxmlSerializer;->depth:I + + .line 330 + return-object p0 +.end method + +.method public text(Ljava/lang/String;)Lorg/xmlpull/v1/XmlSerializer; + .locals 1 + .param p1, "text" # Ljava/lang/String; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 340 + const/4 v0, 0x0 + + invoke-virtual {p0, v0}, Lorg/kxml2/wap/WbxmlSerializer;->checkPending(Z)V + + .line 341 + invoke-direct {p0, p1}, Lorg/kxml2/wap/WbxmlSerializer;->writeStr(Ljava/lang/String;)V + + .line 342 + return-object p0 +.end method + +.method public text([CII)Lorg/xmlpull/v1/XmlSerializer; + .locals 1 + .param p1, "chars" # [C + .param p2, "start" # I + .param p3, "len" # I + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 334 + const/4 v0, 0x0 + + invoke-virtual {p0, v0}, Lorg/kxml2/wap/WbxmlSerializer;->checkPending(Z)V + + .line 335 + new-instance v0, Ljava/lang/String; + + invoke-direct {v0, p1, p2, p3}, Ljava/lang/String;->([CII)V + + invoke-direct {p0, v0}, Lorg/kxml2/wap/WbxmlSerializer;->writeStr(Ljava/lang/String;)V + + .line 336 + return-object p0 +.end method + +.method writeStrI(Ljava/io/OutputStream;Ljava/lang/String;)V + .locals 2 + .param p1, "out" # Ljava/io/OutputStream; + .param p2, "s" # Ljava/lang/String; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + .line 463 + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->encoding:Ljava/lang/String; + + invoke-virtual {p2, v1}, Ljava/lang/String;->getBytes(Ljava/lang/String;)[B + + move-result-object v0 + + .line 464 + .local v0, "data":[B + invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write([B)V + + .line 465 + const/4 v1, 0x0 + + invoke-virtual {p1, v1}, Ljava/io/OutputStream;->write(I)V + + .line 466 + return-void +.end method + +.method public writeWapExtension(ILjava/lang/Object;)V + .locals 3 + .param p1, "type" # I + .param p2, "data" # Ljava/lang/Object; + .annotation system Ldalvik/annotation/Throws; + value = { + Ljava/io/IOException; + } + .end annotation + + .prologue + const/4 v2, 0x0 + + .line 413 + invoke-virtual {p0, v2}, Lorg/kxml2/wap/WbxmlSerializer;->checkPending(Z)V + + .line 414 + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v1, p1}, Ljava/io/ByteArrayOutputStream;->write(I)V + + .line 415 + sparse-switch p1, :sswitch_data_0 + + .line 440 + new-instance v1, Ljava/lang/IllegalArgumentException; + + invoke-direct {v1}, Ljava/lang/IllegalArgumentException;->()V + + throw v1 + + .line 422 + :sswitch_0 + check-cast p2, [B + + .end local p2 # "data":Ljava/lang/Object; + move-object v0, p2 + + check-cast v0, [B + + .line 423 + .local v0, "bytes":[B + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + array-length v2, v0 + + invoke-static {v1, v2}, Lorg/kxml2/wap/WbxmlSerializer;->writeInt(Ljava/io/OutputStream;I)V + + .line 424 + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + invoke-virtual {v1, v0}, Ljava/io/ByteArrayOutputStream;->write([B)V + + .line 442 + .end local v0 # "bytes":[B + :goto_0 + :sswitch_1 + return-void + + .line 430 + .restart local p2 # "data":Ljava/lang/Object; + :sswitch_2 + iget-object v1, p0, Lorg/kxml2/wap/WbxmlSerializer;->buf:Ljava/io/ByteArrayOutputStream; + + check-cast p2, Ljava/lang/String; + + .end local p2 # "data":Ljava/lang/Object; + invoke-virtual {p0, v1, p2}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrI(Ljava/io/OutputStream;Ljava/lang/String;)V + + goto :goto_0 + + .line 436 + .restart local p2 # "data":Ljava/lang/Object; + :sswitch_3 + check-cast p2, Ljava/lang/String; + + .end local p2 # "data":Ljava/lang/Object; + invoke-direct {p0, p2, v2}, Lorg/kxml2/wap/WbxmlSerializer;->writeStrT(Ljava/lang/String;Z)V + + goto :goto_0 + + .line 415 + nop + + :sswitch_data_0 + .sparse-switch + 0x40 -> :sswitch_2 + 0x41 -> :sswitch_2 + 0x42 -> :sswitch_2 + 0x80 -> :sswitch_3 + 0x81 -> :sswitch_3 + 0x82 -> :sswitch_3 + 0xc0 -> :sswitch_1 + 0xc1 -> :sswitch_1 + 0xc2 -> :sswitch_1 + 0xc3 -> :sswitch_0 + .end sparse-switch +.end method diff --git a/samples/SourcePawn/Check.inc b/samples/SourcePawn/Check.inc new file mode 100644 index 00000000..518ed70d --- /dev/null +++ b/samples/SourcePawn/Check.inc @@ -0,0 +1,246 @@ +// Checkpoint Manager +// (c) João Pedro Lopes, All right's reserved +// +// Feel free to change any line above, as long as you post the 'fix' / 'patch' at the forum +// and send a copy to jplopes@live.com.pt + +/* natives + native CreateCheckpoint(ownerid, chpid, Float:posX, Float:posY, Float:posZ, Float:size); // Creates a checkpoint + native SetCheckpointInterior(chpid, interiorid); // Changes the checkpoint interior + native SetCheckpointVirtualWorld(chpid, VirtualWorldID); // Changes the Checkpoint vWorld + native ToggleCheckpointActive(chpid, bool:active); // Deactivates / Activates the checkpoint + native ChangeCheckpointOwner(chpid, owner); // Change the checkpoint owner + native RemoveCheckpoint(chpid); // Removes the specified checkpoint + native StartCheckpointSeeking(); // Starts seeking for each individual + native StopCheckpointSeeking(); // Stops the system + native VerifyCheckpoint(playerid); // Place this at OnPlayerEnterCheckpoint +*/ + +// Function Forwards +forward public OnCheckpointEnter(playerid, checkpointid); + +#if defined _CHECKPOINT_MANAGER_INCLUDED + #endinput +#endif + +#define _CHECKPOINT_MANAGER_INCLUDED +#pragma library CheckpointManager + +#include + +#define MAX_CHECKPOINTS 200 +#define CHECKPOINT_SEEKER_DELAY 300 + +#define GLOBAL_OWNER_ID -1 + + +// CHECKPOINT ENUMERATION +enum _checkpointEnum{ + _chp_populated, // Is this slot of the memory populated? + + _chp_id, // The ID of the checkpoint + _chp_owner, // The ID of the player who this checkpoint is visible too + + Float:_chp_posX, // The X position of this checkpoint + Float:_chp_posY, // The Y position of this checkpoint + Float:_chp_posZ, // The Z position of this checkpoint + Float:_chp_size, // The checkpoint size + Float:_chp_viewDistance, // The checkpoint view distance + + bool:_chp_active, // Is this checkpoint active? + + _chp_interior_id, // The interior id of this checkpoint + _chp_world_id // The world id of this checkpoint +}; + +// DATA ARRAYS +new _checkpoints[MAX_CHECKPOINTS][_checkpointEnum]; +new _p_VisibleCheckpoint[MAX_PLAYERS]; +new _chp_manager_timer_id; + +// DATA VARIABLES +new _totalCheckpoints; + +// -------------------------------------------------------------------------------------------------------- +// Creates a new checkpoint with some initial data +stock CreateCheckpoint(__ownerid, __chpid, Float:__posX, Float:__posY, Float:__posZ, Float:__size){ + // Max checkpoint reached? + if(_totalCheckpoints == MAX_CHECKPOINTS) return 0; + + // First checkpoint? Setting everything to unpopulated + if(!_totalCheckpoints){ + for(new i; i < MAX_PLAYERS; i++) _p_VisibleCheckpoint[i] = -1; + for(new i; i < MAX_CHECKPOINTS; i++){ + _checkpoints[i][_chp_populated] = false; + } + + // Sending the Initialization Info + printf("[Checkpoint Manager : Version 0.1.1b] System Initialized...", __chpid); + } + + // Getting the first open slot + new _slot; + for(new i = 0; i < MAX_CHECKPOINTS; i++){ + if(!_checkpoints[i][_chp_populated]){ + _slot = i; + break; + } + } + + // Adding the new checkpoint + _checkpoints[_slot][_chp_populated] = true; + _checkpoints[_slot][_chp_id] = __chpid; + _checkpoints[_slot][_chp_owner] = __ownerid; + _checkpoints[_slot][_chp_posX] = __posX; + _checkpoints[_slot][_chp_posY] = __posY; + _checkpoints[_slot][_chp_posZ] = __posZ; + _checkpoints[_slot][_chp_size] = __size; + _checkpoints[_slot][_chp_viewDistance] = 50.0; + _checkpoints[_slot][_chp_active] = true; + _checkpoints[_slot][_chp_interior_id] = 0; + _checkpoints[_slot][_chp_world_id] = 0; + + printf("[Checkpoint Manager] Checkpoint created (%d) at slot %d", __chpid, _slot); + printf("Checkpoint Position: { %f, %f, %f }", _checkpoints[_slot][_chp_posX], _checkpoints[_slot][_chp_posY], _checkpoints[_slot][_chp_posZ]); + + _totalCheckpoints++; + return 1; +} + +//--------------------------------------------------------------------------------------------- +stock SetCheckpointInterior(__chpid, __interiorid){ + new _slot = __ChpSlotByID(__chpid); + if(_slot > -1){ + // Valid slot? + _checkpoints[_slot][_chp_interior_id] = __interiorid; + return 1; + } + return 0; +} + +//--------------------------------------------------------------------------------------------- +stock SetCheckpointVirtualWorld(__chpid, __virtual_world_id){ + new _slot = __ChpSlotByID(__chpid); + if(_slot > -1){ + _checkpoints[_slot][_chp_world_id] = __virtual_world_id; + return 1; + } + return 0; +} + +stock ToggleCheckpointActive(__chpid, bool:__active){ + new _slot = __ChpSlotByID(__chpid); + if(_slot > -1){ + _checkpoints[_slot][_chp_active] = __active; + return 1; + } + return 0; +} + +stock ChangeCheckpointOwner(__chpid, __owner){ + new _slot = __ChpSlotByID(__chpid); + if(_slot > -1){ + _checkpoints[_slot][_chp_owner] = __owner; + return 1; + } + return 0; +} + +stock RemoveCheckpoint(__chpid){ + new _slot = __ChpSlotByID(__chpid); + if(_slot > -1){ + // Deleting the checkpoint + _checkpoints[_slot][_chp_populated] = false; + _checkpoints[_slot][_chp_id] = -1; + _checkpoints[_slot][_chp_owner] = 255; + _checkpoints[_slot][_chp_posX] = -1; + _checkpoints[_slot][_chp_posY] = -1; + _checkpoints[_slot][_chp_posZ] = -1; + _checkpoints[_slot][_chp_size] = -1; + _checkpoints[_slot][_chp_viewDistance] = -1; + _checkpoints[_slot][_chp_active] = false; + _checkpoints[_slot][_chp_interior_id] = -1; + _checkpoints[_slot][_chp_world_id] = -1; + _totalCheckpoints--; + printf("\n[Checkpoint Manager] Checkpoint removed (ID: %d)", __chpid); + return 1; + } + return 0; +} + +//--------------------------------------------------------------------------------------------- +// Gets the checkpoint slot by id +stock __ChpSlotByID(__chpid){ + for(new i; i < MAX_CHECKPOINTS; i++){ + if(_checkpoints[i][_chp_id] == __chpid) return i; + } + return -1; +} + + +forward CheckpointSeeker(); +stock StartCheckpointSeeking(){ + _chp_manager_timer_id = SetTimer("CheckpointSeeker", CHECKPOINT_SEEKER_DELAY, 1); + return 1; +} + +stock StopCheckpointSeeking(){ + KillTimer(_chp_manager_timer_id); + return 1; +} + +public CheckpointSeeker(){ + new Float:__posX, Float:__posY, Float:__posZ; + new __interior; + new __virtualWorld; + for(new i; i < MAX_PLAYERS; i++) + { + if(!IsPlayerConnected(i)) continue; + + GetPlayerPos(i, Float:__posX, Float:__posY, Float:__posZ); + // Is the player near a checkpoint? + if(_p_VisibleCheckpoint[i] > -1) + { + // If the player is no longer near that point + if(__posX < (_checkpoints[_p_VisibleCheckpoint[i]][_chp_posX] - _checkpoints[_p_VisibleCheckpoint[i]][_chp_viewDistance]) + || __posX > (_checkpoints[_p_VisibleCheckpoint[i]][_chp_posX] + _checkpoints[_p_VisibleCheckpoint[i]][_chp_viewDistance]) + || __posY < (_checkpoints[_p_VisibleCheckpoint[i]][_chp_posY] - _checkpoints[_p_VisibleCheckpoint[i]][_chp_viewDistance]) + || __posY > (_checkpoints[_p_VisibleCheckpoint[i]][_chp_posY] + _checkpoints[_p_VisibleCheckpoint[i]][_chp_viewDistance])){ + DisablePlayerCheckpoint(i); + _p_VisibleCheckpoint[i] = -1; + } + } + else + { + // Getting the player Interior and virtual world + __interior = GetPlayerInterior(i); + __virtualWorld = GetPlayerVirtualWorld(i); + + // Looking for a new checkpoint + for(new j = 0; j < MAX_CHECKPOINTS; j++){ + if(!_checkpoints[j][_chp_populated]) continue; + if((_checkpoints[j][_chp_owner] != i) && (_checkpoints[j][_chp_owner] != -1)) continue; + if(_checkpoints[j][_chp_interior_id] != __interior) continue; + if(_checkpoints[j][_chp_world_id] != __virtualWorld) continue; + + if(__posX > (_checkpoints[j][_chp_posX] - _checkpoints[j][_chp_viewDistance]) + && __posX < (_checkpoints[j][_chp_posX] + _checkpoints[j][_chp_viewDistance]) + && __posY > (_checkpoints[j][_chp_posY] - _checkpoints[j][_chp_viewDistance]) + && __posY < (_checkpoints[j][_chp_posY] + _checkpoints[j][_chp_viewDistance])){ + SetPlayerCheckpoint(i, _checkpoints[j][_chp_posX], _checkpoints[j][_chp_posY], _checkpoints[j][_chp_posZ], _checkpoints[j][_chp_size]); + _p_VisibleCheckpoint[i] = j; + break; + } + } + } + } + return 1; +} + +stock VerifyCheckpoint(__playerid){ + if(_p_VisibleCheckpoint[__playerid] >= 0){ + OnCheckpointEnter(__playerid, _checkpoints[_p_VisibleCheckpoint[__playerid]][_chp_id]); + return 1; + } + return 0; +} \ No newline at end of file diff --git a/samples/SourcePawn/fixed.inc b/samples/SourcePawn/fixed.inc new file mode 100644 index 00000000..b7573dc7 --- /dev/null +++ b/samples/SourcePawn/fixed.inc @@ -0,0 +1,91 @@ +/* Fixed point arithmetic + * + * (c) Copyright 1998-2011, ITB CompuPhase + * This file is provided as is (no warranties). + */ +#pragma library Fixed + +const fround_method: { + fround_round = 0, + fround_floor, + fround_ceil, + fround_tozero, + fround_unbiased +} + +native Fixed:fixed(value); +native Fixed:strfixed(const string[]); +native Fixed:fmul(Fixed:oper1, Fixed:oper2); +native Fixed:fdiv(Fixed:dividend, Fixed:divisor); +native Fixed:ffract(Fixed:value); +native fround(Fixed:value, fround_method:method=fround_round); +native Fixed:fpower(Fixed:value, exponent); +native Fixed:fsqroot(Fixed:value); +native Fixed:fabs(Fixed:value); + +#pragma rational Fixed(3) + +/* user defined operators */ +native Fixed:operator*(Fixed:oper1, Fixed:oper2) = fmul; +native Fixed:operator/(Fixed:oper1, Fixed:oper2) = fdiv; +native Fixed:operator=(oper) = fixed; + +stock Fixed:operator++(Fixed:oper) + return oper + fixed(1); + +stock Fixed:operator--(Fixed:oper) + return oper - fixed(1); + +stock Fixed:operator*(Fixed:oper1, oper2) + return Fixed: (_:oper1 * oper2); /* "*" is commutative */ + +stock Fixed:operator/(Fixed:oper1, oper2) + return oper1 / fixed(oper2); + +stock Fixed:operator/(oper1, Fixed:oper2) + return fdiv(fixed(oper1), oper2); + +stock Fixed:operator+(Fixed:oper1, oper2) + return oper1 + fixed(oper2); /* "+" is commutative */ + +stock Fixed:operator-(Fixed:oper1, oper2) + return oper1 - fixed(oper2); + +stock Fixed:operator-(oper1, Fixed:oper2) + return fixed(oper1) - oper2; + +stock bool:operator>(Fixed:oper1, oper2) + return oper1 > fixed(oper2); + +stock bool:operator>(oper1, Fixed:oper2) + return fixed(oper1) > oper2; + +stock bool:operator>=(Fixed:oper1, oper2) + return oper1 >= fixed(oper2); + +stock bool:operator>=(oper1, Fixed:oper2) + return fixed(oper1) >= oper2; + +stock bool:operator<(Fixed:oper1, oper2) + return oper1 < fixed(oper2); + +stock bool:operator<(oper1, Fixed:oper2) + return fixed(oper1) < oper2; + +stock bool:operator<=(Fixed:oper1, oper2) + return oper1 <= fixed(oper2); + +stock bool:operator<=(oper1, Fixed:oper2) + return fixed(oper1) <= oper2; + +stock bool:operator==(Fixed:oper1, oper2) /* "==" is commutative */ + return oper1 == fixed(oper2); + +stock bool:operator!=(Fixed:oper1, oper2) /* "!=" is commutative */ + return oper1 != fixed(oper2); + +/* forbidden operations */ +forward operator%(Fixed:oper1, Fixed:oper2); +forward operator%(Fixed:oper1, oper2); +forward operator%(oper1, Fixed:oper2); + diff --git a/samples/SourcePawn/foo.sma b/samples/SourcePawn/foo.sma new file mode 100644 index 00000000..e03b77a2 --- /dev/null +++ b/samples/SourcePawn/foo.sma @@ -0,0 +1,272 @@ +// vim: set ts=4 sw=4 tw=99 noet: +// +// AMX Mod X, based on AMX Mod by Aleksander Naszko ("OLO"). +// Copyright (C) The AMX Mod X Development Team. +// +// This software is licensed under the GNU General Public License, version 3 or higher. +// Additional exceptions apply. For full license details, see LICENSE.txt or visit: +// https://alliedmods.net/amxmodx-license + +// +// TimeLeft Plugin +// + +#include + +const TASK_TIMEREMAIN_SHORT = 8648458 // 0.8s repeat task +const TASK_TIMEREMAIN_LARGE = 34543 // 1.0s repeat task + +// time display flags +const TD_BOTTOM_WHITE_TEXT = 1 // a - display white text on bottom +const TD_USE_VOICE = 2 // b - use voice +const TD_NO_REMAINING_VOICE = 4 // c - don't add "remaining" (only in voice) +const TD_NO_HOURS_MINS_SECS_VOICE = 8 // d - don't add "hours/minutes/seconds" (only in voice) +const TD_SHOW_SPEAK_VALUES_BELOW = 16 // e - show/speak if current time is less than this set in parameter + +new g_TimeSet[32][2] +new g_LastTime +new g_CountDown +new g_Switch + +// pcvars +new g_amx_time_voice, g_amx_timeleft +new g_mp_timelimit + +public plugin_init() +{ + register_plugin("TimeLeft", AMXX_VERSION_STR, "AMXX Dev Team") + register_dictionary("timeleft.txt") + g_amx_time_voice = register_cvar("amx_time_voice", "1") + register_srvcmd("amx_time_display", "setDisplaying") + g_amx_timeleft = register_cvar("amx_timeleft", "00:00", FCVAR_SERVER|FCVAR_EXTDLL|FCVAR_UNLOGGED|FCVAR_SPONLY) + register_clcmd("say timeleft", "sayTimeLeft", 0, "- displays timeleft") + register_clcmd("say thetime", "sayTheTime", 0, "- displays current time") + + set_task(0.8, "timeRemain", TASK_TIMEREMAIN_SHORT, "", 0, "b") + + g_mp_timelimit = get_cvar_pointer("mp_timelimit") +} + +public sayTheTime(id) +{ + if (get_pcvar_num(g_amx_time_voice)) + { + new mhours[6], mmins[6], whours[32], wmins[32], wpm[6] + + get_time("%H", mhours, charsmax(mhours)) + get_time("%M", mmins, charsmax(mmins)) + + new mins = str_to_num(mmins) + new hrs = str_to_num(mhours) + + if (mins) + num_to_word(mins, wmins, charsmax(wmins)) + else + wmins[0] = EOS + + if (hrs < 12) + wpm = "am " + else + { + if (hrs > 12) hrs -= 12 + wpm = "pm " + } + + if (hrs) + num_to_word(hrs, whours, charsmax(whours)) + else + whours = "twelve " + + client_cmd(id, "spk ^"fvox/time_is_now %s_period %s%s^"", whours, wmins, wpm) + } + + new ctime[64] + + get_time("%m/%d/%Y - %H:%M:%S", ctime, charsmax(ctime)) + client_print(0, print_chat, "%L: %s", LANG_PLAYER, "THE_TIME", ctime) + + return PLUGIN_CONTINUE +} + +public sayTimeLeft(id) +{ + if (get_pcvar_float(g_mp_timelimit)) + { + new a = get_timeleft() + + if (get_pcvar_num(g_amx_time_voice)) + { + new svoice[128] + setTimeVoice(svoice, charsmax(svoice), 0, a) + client_cmd(id, "%s", svoice) + } + client_print(0, print_chat, "%L: %d:%02d", LANG_PLAYER, "TIME_LEFT", (a / 60), (a % 60)) + } + else + client_print(0, print_chat, "%L", LANG_PLAYER, "NO_T_LIMIT") + + return PLUGIN_CONTINUE +} + +setTimeText(text[], len, tmlf, id) +{ + new secs = tmlf % 60 + new mins = tmlf / 60 + + if (secs == 0) + formatex(text, len, "%d %L", mins, id, (mins > 1) ? "MINUTES" : "MINUTE") + else if (mins == 0) + formatex(text, len, "%d %L", secs, id, (secs > 1) ? "SECONDS" : "SECOND") + else + formatex(text, len, "%d %L %d %L", mins, id, (mins > 1) ? "MINUTES" : "MINUTE", secs, id, (secs > 1) ? "SECONDS" : "SECOND") +} + +setTimeVoice(text[], len, flags, tmlf) +{ + new temp[7][32] + new secs = tmlf % 60 + new mins = tmlf / 60 + + // for (new a = 0;a < 7;++a) // we just created it, already null + // temp[a][0] = 0 + + if (secs > 0) + { + num_to_word(secs, temp[4], charsmax(temp[])) + + if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE ) + temp[5] = "seconds " /* there is no "second" in default hl */ + } + + if (mins > 59) + { + new hours = mins / 60 + + num_to_word(hours, temp[0], charsmax(temp[])) + + if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE ) + temp[1] = "hours " + + mins = mins % 60 + } + + if (mins > 0) + { + num_to_word(mins, temp[2], charsmax(temp[])) + + if ( ~flags & TD_NO_HOURS_MINS_SECS_VOICE ) + temp[3] = "minutes " + } + + if ( ~flags & TD_NO_REMAINING_VOICE ) + temp[6] = "remaining " + + return formatex(text, len, "spk ^"vox/%s%s%s%s%s%s%s^"", temp[0], temp[1], temp[2], temp[3], temp[4], temp[5], temp[6]) +} + +findDispFormat(_time) +{ + // it is important to check i _time) + { + if (!g_Switch) + { + g_CountDown = g_Switch = _time + remove_task(TASK_TIMEREMAIN_SHORT) + set_task(1.0, "timeRemain", TASK_TIMEREMAIN_LARGE, "", 0, "b") + } + + return i + } + } + else if (g_TimeSet[i][0] == _time) + { + return i + } + } + + return -1 +} + +public setDisplaying() +{ + new arg[32], flags[32], num[32] + new argc = read_argc() - 1 + new i = 0 + + while (i < argc && i < sizeof(g_TimeSet)) + { + read_argv(i + 1, arg, charsmax(arg)) + parse(arg, flags, charsmax(flags), num, charsmax(num)) + + g_TimeSet[i][0] = str_to_num(num) + g_TimeSet[i][1] = read_flags(flags) + + i++ + } + + if( i < sizeof(g_TimeSet) ) + g_TimeSet[i][0] = 0 // has to be zeroed in case command is sent twice + + return PLUGIN_HANDLED +} + +public timeRemain(param[]) +{ + new gmtm = get_timeleft() + new tmlf = g_Switch ? --g_CountDown : gmtm + new stimel[12] + + formatex(stimel, charsmax(stimel), "%02d:%02d", gmtm / 60, gmtm % 60) + set_pcvar_string(g_amx_timeleft, stimel) + + if (g_Switch && gmtm > g_Switch) + { + remove_task(TASK_TIMEREMAIN_LARGE) + g_Switch = 0 + set_task(0.8, "timeRemain", TASK_TIMEREMAIN_SHORT, "", 0, "b") + + return + } + + if (tmlf > 0 && g_LastTime != tmlf) + { + g_LastTime = tmlf + new tm_set = findDispFormat(tmlf) + + if (tm_set != -1) + { + new flags = g_TimeSet[tm_set][1] + new arg[128] + + if (flags & TD_BOTTOM_WHITE_TEXT) + { + new players[MAX_PLAYERS], pnum, plr + + get_players(players, pnum, "c") + + if (flags & TD_SHOW_SPEAK_VALUES_BELOW) // yes this is correct flag, just because message should be shorter if it is shown every seconds + set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 0.0, 1.1, 0.1, 0.5, -1) + else + set_hudmessage(255, 255, 255, -1.0, 0.85, 0, 0.0, 3.0, 0.0, 0.5, -1) + + for (new i = 0; i < pnum; i++) + { + plr = players[i] + setTimeText(arg, charsmax(arg), tmlf, plr) + show_hudmessage(plr, "%s", arg) + } + } + + if (flags & TD_USE_VOICE) + { + setTimeVoice(arg, charsmax(arg), flags, tmlf) + client_cmd(0, "%s", arg) + } + } + } +} diff --git a/samples/SourcePawn/mfile.inc b/samples/SourcePawn/mfile.inc new file mode 100644 index 00000000..70fd47e0 --- /dev/null +++ b/samples/SourcePawn/mfile.inc @@ -0,0 +1,289 @@ +/* mFile 1.1 by Minokon + * + * (c) Copyright by Minokon 2010 + * (c) y_files Copyright by Y_Less 2010 + * + */ + +#if defined _mfile_included + #endinput +#endif +#define _mfile_included + +//Defines +#define MAX_LINE_SIZE 80 //Max lenght of one line in file +#define MAX_KEY_SIZE 50 //Max lenght of key in line (to =) +#define MAX_VALUE_SIZE 50 //Max lenght of value in line (past =) +#define TMP_FILE "tmpfile.txt" + +//Natives +/* +native mCreateFile(const file[]); +native mRemoveFile(const file[]); +native mClearFile(const file[]); +native bool:mFileExist(const file[]); +native mRenameFile(const file[], const newname[]); +native mFindFile(const name[], dest[], &index, sizename=sizeof dest); +native mCreateDir(const name[]); +native mRenameDir(const dir[], const newname[]); +native mFindDir(const name[], dest[], &index, sizename=sizeof dest); +native mHowLines(const file[]); +native mRemoveNewLine(string[]); //removes "\n" from string +native mGetString(const file[], const key[], bool:ignorecase=false); +native mGetInt(const file[], const key[], bool:ignorecase=false); +native mGetFloat(const file[], const key[], &Float:value); +native mSetString(const file[], const key[], const new_value[]); +native mSetInt(const file[], const key[], new_value); +native mSetFloat(const file[], const key[], Float:new_value); +native mIsSet(const file[], const key[], bool:ignorecase=false); +native mUnSet(const file[], const key[]); +native mIsFileEmpty(const file[]); +native y_files +*/ +//y_files by Y_Less Functions +native ffind(const pattern[], filename[], len, &idx); +native frename(const oldname[], const newname[]); +native dfind(const pattern[], filename[], len, &idx); +native dcreate(const name[]); +native drename(const oldname[], const newname[]); + +//Forwards +forward OnFileCreated(file[]); +forward OnFileRemoved(file[]); +forward OnFileCleared(file[]); +forward OnFileRenamed(oldname[], newname[]); +forward OnDirCreated(dir[]); +forward OnDirRenamed(oldname[], newname[]); + +stock mCreateFile(const file[]) +{ + if(fexist(file)) fremove(file); + new File:mfile = fopen(file, io_write); + fclose(mfile); + CallLocalFunction("OnFileCreated", "s", file); + return 1; +} + +stock mRemoveFile(const file[]) +{ + CallLocalFunction("OnFileRemoved", "s", file); + return fremove(file); +} + +stock mClearFile(const file[]) +{ + if(!fremove(file)) return 0; + new File:mfile = fopen(file, io_write); + fclose(mfile); + CallLocalFunction("OnFileCleared", "s", file); + return 1; +} + +stock bool:mFileExist(const file[]) + if(fexist(file)) return true; //dla ciekawych: fexist nie zwraca booleanu + else return false; + +stock mRenameFile(const file[], const newname[]) +{ + CallLocalFunction("OnFileRenamed", "ss", file, newname); + return frename(file, newname); +} + +stock mFindFile(const name[], dest[], &index, sizename=sizeof dest) + return ffind(name, dest, sizename, index); + +stock mCreateDir(const name[]) +{ + CallLocalFunction("OnDirCreated", "s", name); + return dcreate(name); +} + +stock mRenameDir(const dir[], const newname[]) +{ + CallLocalFunction("OnDirRenamed", "ss", dir, newname); + return drename(dir, newname); +} + +stock mFindDir(const name[], dest[], &index, sizename=sizeof dest) + return dfind(name, dest, sizename, index); + +stock mHowLines(const file[]) +{ + new lines, str[MAX_LINE_SIZE]; + new File:mfile = fopen(file, io_read); + while(fread(mfile, str)) lines++; + fclose(mfile); + return lines; +} + +stock mRemoveNewLine(string[]) +{ + new pos = strfind(string, "\n"); + if(pos != -1) + { + strdel(string, pos, pos+2); + return 1; + } + return 0; +} + +stock mGetString(const file[], const key[], bool:ignorecase=false) +{ + //Create file if not exists + if(!fexist(file)) + { + new File:created = fopen(file, io_write); + fclose(created); + } + new //Variables + File:mfile = fopen(file, io_read), //Open file + str[MAX_LINE_SIZE], + str2[MAX_KEY_SIZE], + str3[MAX_VALUE_SIZE], + pos; + //Find key in file + while(fread(mfile, str)) + { + pos = strfind(str, "=", ignorecase); + strmid(str2, str, 0, pos); + if(!strcmp(str2, key, ignorecase, strlen(key)+1)) + { + strmid(str3, str, pos+1, strlen(str)); + mRemoveNewLine(str3); + break; + } + } + fclose(mfile); + return str3; +} + +stock mGetInt(const file[], const key[], bool:ignorecase=false) + return strval(mGetString(file, key, ignorecase)); + +stock mGetFloat(const file[], const key[], &Float:value, bool:ignorecase=false) + value = floatstr(mGetString(file, key, ignorecase)); + +stock mSetString(const file[], const key[], const new_value[]) +{ + //Create file if not exists + if(!fexist(file)) + { + new File:created = fopen(file, io_write); + fclose(created); + } + new //Variables + str[MAX_LINE_SIZE], + str2[MAX_KEY_SIZE], + str3[MAX_LINE_SIZE], + bool:lFinded = false; + //Open file + new File:mfile = fopen(file, io_read); + //Create cache file + new File:tmpfile = fopen(TMP_FILE, io_write); + fclose(tmpfile); + //Open cache file + tmpfile = fopen(TMP_FILE, io_append); + format(str3, sizeof str3, "%s=%s\n", key, new_value); + while(fread(mfile, str)) + { + strmid(str2, str, 0, strfind(str, "=")); + if(!strcmp(str2, key)) + { + fwrite(tmpfile, str3); + lFinded = true; + } + else + fwrite(tmpfile, str); + } + if(!lFinded) //if line not found + fwrite(tmpfile, str3); + //Close and remove old file + fclose(mfile); + fremove(file); + //Close cache file and rename it + fclose(tmpfile); + frename(TMP_FILE, file); + return 1; +} + +stock mSetInt(const file[], const key[], new_value) +{ + new str[MAX_VALUE_SIZE]; + valstr(str, new_value); + mSetString(file, key, str); + return 1; +} + +stock mSetFloat(const file[], const key[], Float:new_value) +{ + new str[MAX_VALUE_SIZE]; + format(str, sizeof str, "%f", new_value); + return mSetString(file, key, str); +} + +stock bool:mIsSet(const file[], const key[], bool:ignorecase=false) +{ + //If fexists return false + if(!fexist(file)) return false; + new //Variables + File:mfile = fopen(file, io_read), //Open file + str[MAX_LINE_SIZE], + str2[MAX_KEY_SIZE], + bool:finded = false; + //Find key in file + while(fread(mfile, str)) + { + strmid(str2, str, 0, strfind(str, "=")); + if(!strcmp(str2, key, ignorecase, strlen(key)+1)) + { + finded = true; + break; + } + } + fclose(mfile); + return finded; +} + +stock mUnSet(const file[], const key[]) +{ + if(!fexist(file)) return 0; + new //Variables + str[MAX_LINE_SIZE], + str2[MAX_KEY_SIZE]; + //Open file + new File:mfile = fopen(file, io_read); + //Create cache file + new File:tmpfile = fopen(TMP_FILE, io_write); + fclose(tmpfile); + //Open cache file + tmpfile = fopen(TMP_FILE, io_append); + while(fread(mfile, str)) + { + strmid(str2, str, 0, strfind(str, "=")); + if(strcmp(str2, key) != 0) + fwrite(tmpfile, str); + } + //Close and remove old file + fclose(mfile); + fremove(file); + //Close cache file and rename it + fclose(tmpfile); + frename(TMP_FILE, file); + return 1; +} + +stock bool:mIsFileEmpty(const file[]) +{ + if(!fexist(file)) return true; + new File:mfile = fopen(file, io_read); + if(flength(mfile) <= 1) + { + fclose(mfile); + return true; + } + else + { + fclose(mfile); + return false; + } +} diff --git a/samples/SourcePawn/y_testing.inc b/samples/SourcePawn/y_testing.inc new file mode 100644 index 00000000..95b49c0c --- /dev/null +++ b/samples/SourcePawn/y_testing.inc @@ -0,0 +1,633 @@ +/**--------------------------------------------------------------------------**\ + ==================================== + y_testing - Run unit tests easilly + ==================================== +Description: + Runs any functions named as tests when the Testing_Run function is called. +Legal: + Version: MPL 1.1 + + The contents of this file are subject to the Mozilla Public License Version + 1.1 (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + http://www.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" basis, + WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + for the specific language governing rights and limitations under the + License. + + The Original Code is the YSI testing include. + + The Initial Developer of the Original Code is Alex "Y_Less" Cole. + Portions created by the Initial Developer are Copyright (C) 2011 + the Initial Developer. All Rights Reserved. + + Contributors: + ZeeX, koolk, JoeBullet/Google63, g_aSlice/Slice + + Thanks: + JoeBullet/Google63 - Handy arbitrary ASM jump code using SCTRL. + ZeeX - Very productive conversations. + koolk - IsPlayerinAreaEx code. + TheAlpha - Danish translation. + breadfish - German translation. + Fireburn - Dutch translation. + yom - French translation. + 50p - Polish translation. + Zamaroht - Spanish translation. + Dracoblue, sintax, mabako, Xtreme, other coders - Producing other modes + for me to strive to better. + Pixels^ - Running XScripters where the idea was born. + Matite - Pestering me to release it and using it. + + Very special thanks to: + Thiadmer - PAWN, whose limits continue to amaze me! + Kye/Kalcor - SA:MP. + SA:MP Team past, present and future - SA:MP. + +Version: + 1.0 +Changelog: + 16/02/12: + Added better error reporting (less verbose passes). + Removed "Tests:". + Added player requiring tests. + 25/10/10: + Integrated in to YSI. + 06/08/10: + First version + +\**--------------------------------------------------------------------------**/ + +/*#if defined _inc_a_samp || defined _samp_included || defined _inc_y_version + #error y_testing must be the VERY FIRST include in your mode if being used. +#endif + +// Now we redefined "native" to do something clever! +// "IsPlayerAttachedObjectSlotUsed" is an issue for us... + +// "y_renative" allows native functions to be declared without constantly trying +// to redefine it. +#include "internal\y_renative" + +#define native%0(%1); _YSI_NO_TAG_NATIVE:_YSI_RE_NATIVE<%0@|||%1|||%0>_YSI_RE_STOCK<%0|||%1|||_:%0@> + +//stock%0(%1){printf(_:_YSI_NO_SQUARE:"native "#%0" called");return _:%0@(%1);} + +#define _YSI_RE_STOCK<%0|||%1|||%2> stock%0(%1){print(_:_YSI_NO_SQUARE:"native "#%0" called");return %2(%1);} + +#define _YSI_NO_SQUARE:%0);%1(%2[%3]%4);} _YSI_NO_SQUARE:%0);%1(%2%4);} + +//#define _YSI_NO_TAG_NATIVE:_YSI_RE_NATIVE<%0:%1|||%2|||%3:%4>%5{%6;%7:%8:%9} _YSI_RE_NATIVE<%1|||%2|||%4>%5{%6;return%8:%9} +#define _YSI_NO_TAG_NATIVE:_YSI_RE_NATIVE<%0:%1|||%2|||%3:%4>_YSI_RE_STOCK<%5:%6|||%7|||_:%8:%9> _YSI_RE_NATIVE<%1|||%2|||%4>_YSI_RE_STOCK<%5:%6|||%7|||%8:%9>*/ + +#include + +#if defined YSI_TESTS + #if defined INCLUDE_TESTS + #error Incompatible testing options (YSI_TESTS + INCLUDE_TESTS) + #endif + #if !defined RUN_TESTS + #define RUN_TESTS + #endif +#endif + +#if defined INCLUDE_TESTS + #define RUN_TESTS + #define Debug_PrintT va_printf +#elseif defined RUN_TESTS + #define _AUTO_RUN_TESTS + #define Debug_PrintT va_printf +#else + #if _DEBUG > 0 || defined _YSI_SPECIAL_DEBUG + #define RUN_TESTS + #define _AUTO_RUN_TESTS + //#if defined _YSI_SPECIAL_DEBUG + // #define TP printf + // //#define TC(%0); %0 + #define Debug_PrintT va_printf + //#else + // //#define TP P:0 + // //#define TC C:0 + //#endif + #else + #define Debug_PrintT(%0); + // #define Tests:%1() stock bool:Tests_@%1() + // #define Test:%1() stock bool:Test_@%1() + // #define TestInit:%1() stock Init_@%1() + // #define TestClose:%1() stock Shut_@%1() + #endif +#endif + +#define Y_TESTING_DIALOG_ID (0x7974) // "yt" + +#define TEST_TRUE(%0) Testing_Test(!!%0) +#define TEST_FALSE(%0) Testing_Test(!%0) +#define TEST_NULL(%0) Testing_Test(0 == %0) +#define TEST_NOT_NULL(%0) Testing_Test(0 != %0) +#define TEST_N(%0,%1) Testing_Test(%1 == %0) + +#define TEST_TRUE_EX(%0,%2) Testing_Test(bool:(%0), (%2)) +#define TEST_FALSE_EX(%0,%2) Testing_Test(!(%0), (%2)) +#define TEST_NULL_EX(%0,%2) Testing_Test((%0) == 0, (%2)) +#define TEST_N_EX(%0,%1,%2) Testing_Test((%0) == (%1), (%2)) + +#define TEST_MSG "\2\2\2\2\2" +#define TEST_FAILED "FAIL:" +#define TEST_PASSED "PASS!" +//#define TEST_FAILED "*** Test Failed:" +//#define TEST_PASSED "*** Test Passed:" + +#define _Y_TESTEQ(%0) "\"%0\"") +#define _Y_TESTDQ:_Y_TESTEQ(%0"%1"%2) _Y_TESTDQ:_Y_TESTEQ(%0\x22;%1\x22;%2) +//#define _Y_TESTCB:_Y_TESTDQ:_Y_TESTEQ(%0)%1) _Y_TESTCB:_Y_TESTDQ:_Y_TESTEQ(%0\x29;%1) +#define _Y_TESTCB:_Y_TESTDQ:_Y_TESTEQ(%0)%1) _Y_TESTCB:_Y_TESTDQ:_Y_TESTEQ(%0\x29;%1) +#define _Y_TESTOB:_Y_TESTCB:_Y_TESTDQ:_Y_TESTEQ(%0(%1) _Y_TESTOB:_Y_TESTCB:_Y_TESTDQ:_Y_TESTEQ(%0\x28;%1) + +#define ASSERT(%0) Testing_Test(%0,TEST_MSG" %s", _Y_TESTOB:_Y_TESTCB:_Y_TESTDQ:_Y_TESTEQ(%0) +#define ASSERT_TRUE(%0) ASSERT(!!%0) //Testing_Test(!!%0,__name) +#define ASSERT_FALSE(%0) ASSERT(!%0) //Testing_Test(!%0,__name) +#define ASSERT_NULL(%0) ASSERT(0 == %0) //Testing_Test(0==%0,__name) +#define ASSERT_N:%1(%0) ASSERT(%1 == %0) //Testing_Test(%1==%0,__name) + +#define ASK(%0) Testing_Ask(playerid,%0) + +static stock + YSI_g_sFailMessage[512], + YSI_g_sPlayer = cellmax, + bool:YSI_g_sAsked, + YSI_g_sTests, + YSI_g_sFails; + +#if defined RUN_TESTS + #define Test:%1() forward bool:Tezt_@%1(); public bool:Tezt_@%1() for(new string:__name[]=#%1,bool:__once=(printf("*** Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + //#define Tests:%1() forward bool:Test_@%1(); public bool:Test_@%1() for(new string:__name[]=#%1,bool:__once=(printf("*** Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + #define TestInit:%1() forward Init_@%1(); public Init_@%1() for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE)) + #define TestClose:%1() forward Shut_@%1(); public Shut_@%1() for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE)) + + #define PTest:%1(%2) forward bool:Tezp_@%1(%2); public bool:Tezp_@%1(%2) for(new string:__name[]=#%1,bool:__once=(printf("*** Player Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + //#define Tests:%1() forward bool:Test_@%1(); public bool:Test_@%1() for(new string:__name[]=#%1,bool:__once=(printf("*** Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + #define PTestInit:%1(%2) forward Inip_@%1(%2); public Inip_@%1(%2) for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE)) + #define PTestClose:%1(%2) forward Shup_@%1(%2); public Shup_@%1(%2) for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE)) +#else + #define Test:%1() stock bool:Test_@%1() + #define TestInit:%1() stock Init_@%1() + #define TestClose:%1() stock Shut_@%1() + + #define PTest:%1(%2) stock bool:Test_@%1(%2) + #define PTestInit:%1(%2) stock Init_@%1(%2) + #define PTestClose:%1(%2) stock Shut_@%1(%2) +#endif + +// These all need to come AFTER the types are defined in case the have tests. +#include "internal\y_version" + +#include "y_amx" +#include "internal\y_shortfunc" +#include "y_debug" + +#include "internal\y_natives" + +#include "y_va" + +/**--------------------------------------------------------------------------**\ +Testing_Ask +Player to ask a question to. +What to ask. +Additional data. + + - + + + Calls a dialog to ask the player if the given test actually passed. + +\**--------------------------------------------------------------------------**/ + +stock Testing_Ask(playerid, str[] = "", va_args<>) +{ + va_format(YSI_g_sFailMessage, sizeof (YSI_g_sFailMessage), str, va_start<2>); + ShowPlayerDialog(playerid, Y_TESTING_DIALOG_ID, DIALOG_STYLE_MSGBOX, "Did the test pass?", YSI_g_sFailMessage, "Yes", "No"); + YSI_g_sAsked = true; +} + +stock Testing_Test(bool:x, str[] = "", va_args<>) +{ + P:3("Testing_Test called: %i, \"%s\"", x, str); + ++YSI_g_sTests; + if (!x) + { + ++YSI_g_sFails; + if (numargs() == 2) + { + P:T(TEST_FAILED " %s", va_start<1>); + //printf("*** Test failed: %s", str); + } + else + { + if (str[0] == '\2') + { + strunpack(str, !TEST_FAILED, 6); + str[5] = ' '; + } + P:T(str, va_start<2>); + } + } + #if defined TEST_SHOW_PASSES + else /*if (numargs() == 2) + { + P:T(TEST_PASSED " %s", va_start<1>); + } + else + { + P:T(str, va_start<2>); + if (str[0] == '\2') + { + strunpack(str, !TEST_PASSED, 17); + str[16] = ' '; + } + printf(str); + P:T(str, va_start<2>);*/ + { + P:T(TEST_PASSED, va_start<2>); + } + #endif +} + +/**--------------------------------------------------------------------------**\ +Testing_Run +Number of tests run. +Number of tests which failed. +The name of the first test which failed. + + Wether all tests were sucessful or not. + + + - + +native Testing_Run(&tests, &fails, buffer[33] = ""); + + +\**--------------------------------------------------------------------------**/ + +stock bool:Testing_Run(&tests, &fails, lastfail[33] = "", bool:p = false) +{ + P:3("bool:Testing_Run called: %i, %i, \"%s\", %i", tests, fails, lastfail, p); + #pragma unused p, lastfail + #if defined RUN_TESTS + P:2("Testing_Run() called"); + new + idx, + buffer[32]; + while ((idx = AMX_GetPublicName(idx, buffer, "Tezt_@"))) + { + strunpack(buffer, buffer); + //++YSI_g_sTests; + // Call the setup function if there is one. + buffer[0] = 'I'; + buffer[1] = 'n'; + buffer[2] = 'i'; + buffer[3] = 't'; + CallLocalFunction(buffer, ""); + // Call the test. + buffer[0] = 'T'; + buffer[1] = 'e'; + buffer[2] = 'z'; + buffer[3] = 't'; + fails = YSI_g_sFails; + P:5("Testing_Run(): Calling %s", buffer[6]); + CallLocalFunction(buffer, ""); + #if !defined TEST_SHOW_PASSES + if (YSI_g_sFails == fails) + { + printf(TEST_PASSED); + printf(" "); + } + #endif + /*if (YSI_g_sFails != fails) + { + if (YSI_g_sFails) + { + ++YSI_g_sFails; + } + else + { + fails = 0; + // Copy the string over. + while ((lastfail[fails] = buffer[fails + 6])) ++fails; + YSI_g_sFails = 1; + } + //C:1(if (p) printf("*** Test failed: %s", buffer[fails + 6]);); + }*/ + // Call the shutdown function if there is one. + buffer[0] = 'S'; + buffer[1] = 'h'; + buffer[2] = 'u'; + buffer[3] = 't'; + CallLocalFunction(buffer, ""); + } + tests = YSI_g_sTests; + fails = YSI_g_sFails; + return fails == 0; + #else + #pragma unused tests, fails, lastfail + return true; + #endif +} + +/**--------------------------------------------------------------------------**\ +Testing_Player +Player to test on. +Next test to run. +Number of tests run. +Number of tests which failed. +The name of the first test which failed. + + Wether all tests were sucessful or not. + + + - + +native Testing_Run(&tests, &fails, buffer[33] = ""); + + +\**--------------------------------------------------------------------------**/ + +stock bool:Testing_Player(playerid, &idx, &tests, &fails, lastfail[33] = "", bool:p = false) +{ + P:3("bool:Testing_Player called: %i, %i, %i, %i, \"%s\", %i", playerid, idx, tests, fails, lastfail, p); + #pragma unused p + #if defined RUN_TESTS + P:2("Testing_Player() called"); + new + //idx, + buffer[32]; + //while ((idx = AMX_GetPublicName(idx, buffer, "Tezt_@"))) + if ((idx = AMX_GetPublicName(idx, buffer, "Tezp_@"))) + { + strunpack(buffer, buffer); + //++YSI_g_sTests; + // Call the setup function if there is one. + buffer[0] = 'I'; + buffer[1] = 'n'; + buffer[2] = 'i'; + buffer[3] = 'p'; + CallLocalFunction(buffer, ""); + // Call the test. + buffer[0] = 'T'; + buffer[1] = 'e'; + buffer[2] = 'z'; + buffer[3] = 'p'; + fails = YSI_g_sFails; + P:5("Testing_Player(): Calling %s", buffer[6]); + CallLocalFunction(buffer, ""); + #if !defined TEST_SHOW_PASSES + if (YSI_g_sFails == fails) + { + printf(TEST_PASSED); + printf(" "); + } + #endif + /*if (YSI_g_sFails != fails) + { + if (YSI_g_sFails) + { + ++YSI_g_sFails; + } + else + { + fails = 0; + // Copy the string over. + while ((lastfail[fails] = buffer[fails + 6])) ++fails; + YSI_g_sFails = 1; + } + //C:1(if (p) printf("*** Test failed: %s", buffer[fails + 6]);); + }*/ + // Call the shutdown function if there is one. + //buffer[0] = 'S'; + //buffer[1] = 'h'; + //buffer[2] = 'u'; + //buffer[3] = 'p'; + //CallLocalFunction(buffer, ""); + } + tests = YSI_g_sTests; + fails = YSI_g_sFails; + return fails == 0; + #else + #pragma unused tests, fails, lastfail + return true; + #endif +} + +#if defined RUN_TESTS + /*#define Test:%1() forward bool:Tezt_@%1(); public bool:Tezt_@%1() for(new string:__name[]=#%1,bool:__once=(printf("*** Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + //#define Tests:%1() forward bool:Test_@%1(); public bool:Test_@%1() for(new string:__name[]=#%1,bool:__once=(printf("*** Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + #define TestInit:%1() forward Init_@%1(); public Init_@%1() for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE)) + #define TestClose:%1() forward Shut_@%1(); public Shut_@%1() for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE)) + + #define PTest:%1(%2) forward bool:Tezp_@%1(%2); public bool:Tezp_@%1(%2) for(new string:__name[]=#%1,bool:__once=(printf("*** Player Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + //#define Tests:%1() forward bool:Test_@%1(); public bool:Test_@%1() for(new string:__name[]=#%1,bool:__once=(printf("*** Test %s start", __name) || TRUE);__once;__once=(printf(" ") && FALSE)) + #define PTestInit:%1(%2) forward Inip_@%1(%2); public Inip_@%1(%2) for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE)) + #define PTestClose:%1(%2) forward Shup_@%1(%2); public Shup_@%1(%2) for(new string:__name[]=#%1,bool:__once=TRUE;__once;__once=(printf(" ", __name) && FALSE))*/ + + #if defined _AUTO_RUN_TESTS + #if !defined FILTERSCRIPT + // Hook main in gamemodes. + main() + { + // Disable error messages (as we're likely to generate them). + state ysi_debug : off; + CallLocalFunction("Testing_main", ""); + new + tests, + fails; + printf(" "); + printf(" ||===================|| "); + printf(" || STARTING TESTS... || "); + printf(" ||===================|| "); + printf(" "); + Testing_Run(tests, fails, _, true); + printf("*** Tests: %d, Fails: %d", tests, fails); + if (!fails) + { + printf(" "); + printf(" ||===================|| "); + printf(" || ALL TESTS PASSED! || "); + printf(" ||===================|| "); + printf(" "); + } + state ysi_debug : on; + } + + #define main forward Testing_main(); public Testing_main + + Testing_Next(playerid) + { + new + buffer[32]; + for ( ; ; ) + { + new + fails = YSI_g_sFails; + // Get the last test (nicely fails for cellmax). + if ((YSI_g_sPlayer = AMX_GetPublicName(YSI_g_sPlayer, buffer, "Tezp_@"))) + { + strunpack(buffer, buffer); + // Call the shutdown function if there is one. + buffer[0] = 'S'; + buffer[1] = 'h'; + buffer[2] = 'u'; + buffer[3] = 'p'; + CallLocalFunction(buffer, "i", playerid); + } + // Get the new test, but don't store the index. + if (AMX_GetPublicName(YSI_g_sPlayer, buffer, "Tezp_@")) + { + YSI_g_sAsked = false; + //++YSI_g_sTests; + strunpack(buffer, buffer); + // Call the setup function if there is one. + buffer[0] = 'I'; + buffer[1] = 'n'; + buffer[2] = 'i'; + buffer[3] = 'p'; + CallLocalFunction(buffer, "i", playerid); + // Call the test. + buffer[0] = 'T'; + buffer[1] = 'e'; + buffer[2] = 'z'; + buffer[3] = 'p'; + P:5("Testing_Next(): Calling %s", buffer[6]); + CallLocalFunction(buffer, "i", playerid); + } + else + { + YSI_g_sAsked = true; + // No more tests. + printf("*** Tests: %d, Fails: %d", YSI_g_sTests, YSI_g_sFails); + if (!YSI_g_sFails) + { + printf(" "); + printf(" ||==========================|| "); + printf(" || ALL PLAYER TESTS PASSED! || "); + printf(" ||==========================|| "); + printf(" "); + } + } + // If the test needs a player but doesn't ask them anything + // then we can't wait for "OnDialogResponse" to run the next + // one. + if (YSI_g_sAsked) + { + break; + } + else if (fails == YSI_g_sFails) + { + printf(TEST_PASSED); + } + } + //while (!YSI_g_sAsked); + } + + public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) + { + if (dialogid == Y_TESTING_DIALOG_ID) + { + ++YSI_g_sTests; + if (response) + { + // Pass. + printf(TEST_PASSED); + } + else + { + // Fail. + printf(TEST_FAILED " %s", YSI_g_sFailMessage); + ++YSI_g_sFails; + } + Testing_Next(playerid); + return 1; + } + #if defined Testing_OnDialogResponse + return Testing_OnDialogResponse(playerid, dialogid, response, listitem, inputtext); + #else + return 1; + #endif + } + + #if defined _ALS_OnDialogResponse + #undef OnDialogResponse + #else + #define _ALS_OnDialogResponse + #endif + #define OnDialogResponse Testing_OnDialogResponse + #if defined Testing_OnDialogResponse + forward Testing_OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]); + #endif + + public OnPlayerSpawn(playerid) + { + if (YSI_g_sPlayer == cellmax && !IsPlayerNPC(playerid)) + { + printf(" "); + printf(" ||==========================|| "); + printf(" || STARTING PLAYER TESTS... || "); + printf(" ||==========================|| "); + printf(" "); + YSI_g_sTests = 0; + YSI_g_sFails = 0; + Testing_Next(playerid); + } + #if defined Testing_OnPlayerSpawn + return Testing_OnPlayerSpawn(playerid); + #else + return 1; + #endif + } + + #if defined _ALS_OnPlayerSpawn + #undef OnPlayerSpawn + #else + #define _ALS_OnPlayerSpawn + #endif + #define OnPlayerSpawn Testing_OnPlayerSpawn + #if defined Testing_OnPlayerSpawn + forward Testing_OnPlayerSpawn(playerid); + #endif + #endif + #else + Testing_RunAll() + { + // Disable error messages (as we're likely to generate them). + state ysi_debug : off; + new + tests, + fails; + printf(" "); + printf(" ||===================|| "); + printf(" || STARTING TESTS... || "); + printf(" ||===================|| "); + printf(" "); + Testing_Run(tests, fails, _, true); + printf("*** Tests: %d, Fails: %d", tests, fails); + if (!fails) + { + printf(" "); + printf(" ||===================|| "); + printf(" || ALL TESTS PASSED! || "); + printf(" ||===================|| "); + printf(" "); + } + state ysi_debug : on; + } + #endif +#else + //#define Tests:%1() stock bool:Tests_@%1() + /*#define Test:%1() stock bool:Test_@%1() + #define TestInit:%1() stock Init_@%1() + #define TestClose:%1() stock Shut_@%1() + + #define PTest:%1(%2) stock bool:Test_@%1(%2) + #define PTestInit:%1(%2) stock Init_@%1(%2) + #define PTestClose:%1(%2) stock Shut_@%1(%2)*/ +#endif diff --git a/samples/Text/01_top.ncl b/samples/Text/01_top.ncl new file mode 100644 index 00000000..92f12f77 --- /dev/null +++ b/samples/Text/01_top.ncl @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/samples/Text/LIDARLite.ncl b/samples/Text/LIDARLite.ncl new file mode 100644 index 00000000..f93f95f7 --- /dev/null +++ b/samples/Text/LIDARLite.ncl @@ -0,0 +1,34 @@ +G04 DipTrace 2.4.0.2* +%INLIDARLite.ncl*% +%MOIN*% +%ADD11C,0.0394*% +%FSLAX44Y44*% +G04* +G70* +G90* +G75* +G01* +%LNBoardOutline*% +%LPD*% +X0Y23622D2* +D11* +X27953D1* +Y0D1* +X0D1* +Y23622D1* +X591Y23110D2* +X13819D1* +X591Y591D2* +Y11614D1* +Y12087D2* +Y23110D1* +X14291D2* +X27520D1* +X591Y591D2* +X13819D1* +X14291D2* +X27520D1* +Y11614D1* +Y12087D2* +Y23110D1* +M02* diff --git a/samples/Text/Site.local.ncl b/samples/Text/Site.local.ncl new file mode 100644 index 00000000..695dfa24 --- /dev/null +++ b/samples/Text/Site.local.ncl @@ -0,0 +1,22 @@ +#define YmakeRoot $(DESTDIR)@prefix@ +#define ManRoot $(DESTDIR)@mandir@ +#define LibRoot $(DESTDIR)@libdir@/ncarg +#define SharePath $(DESTDIR)@datadir@ + +#define BuildWithF90 TRUE +#define IncSearch -I/usr/include/netcdf -I/usr/include/udunits2 -I/usr/include/freetype2 -I/usr/include/gdal +#define LibSearch -L@libdir@/hdf + +#define BuildNetCDF4 1 +#define NetCDF4lib -lnetcdf +#define BuildCAIRO 1 +#define CAIROlib -lcairo -lfreetype +#define BuildGDAL 1 +#define GDALlib -lgdal +#define BuildHDFEOS 0 +#define BuildHDFEOS5 0 +#define BuildTRIANGLE 0 +#define HDFlib -lmfhdf -ldf -ljpeg -lz +#define HDF5lib -lhdf5_hl -lhdf5 +#define BuildUdunits 1 +#define UdUnitslib -ludunits2 diff --git a/samples/Text/main.ncl b/samples/Text/main.ncl new file mode 100644 index 00000000..61bee15d --- /dev/null +++ b/samples/Text/main.ncl @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/samples/Text/min-help.ncl b/samples/Text/min-help.ncl new file mode 100644 index 00000000..9fd20117 --- /dev/null +++ b/samples/Text/min-help.ncl @@ -0,0 +1,45 @@ +THE_URL:file://localhost/Users/hubery/Public/ucar/Document/Functions/Built-in/min.shtml +THE_TITLE:min + NCL Home > Documentation > Functions > General applied math + +min + + Computes the minimum value of a multi-dimensional array. + +Prototype + + function min ( + value : numeric + ) + + return_val [1] : numeric + +Arguments + + value + + An array of one or more numeric values of any dimension. + +Return value + + Returns a scalar of the same type as value. + +Description + + This function returns the minimum value for an array of any dimensionality. Missing values are ignored; a missing value + is returned only if all values are missing. + +See Also + + max, minind, maxind, dim_min, dim_max, dim_min_n, dim_max_n + +Examples + + Example 1 + + f = (/2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7, 9.8/) + min_f = min(f) + print(min_f) ; Should be 2.1 + + + ©2015 UCAR | Privacy Policy | Terms of Use | Contact the Webmaster | Sponsored by NSF diff --git a/samples/Text/receiver.ncl b/samples/Text/receiver.ncl new file mode 100644 index 00000000..83996d66 --- /dev/null +++ b/samples/Text/receiver.ncl @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/Text/rmMonAnnCycLLT-help.ncl b/samples/Text/rmMonAnnCycLLT-help.ncl new file mode 100644 index 00000000..9467861a --- /dev/null +++ b/samples/Text/rmMonAnnCycLLT-help.ncl @@ -0,0 +1,40 @@ +THE_URL:file://localhost/Users/hubery/Public/ucar/Document/Functions/Contributed/rmMonAnnCycLLT.shtml +THE_TITLE:rmMonAnnCycLLT + NCL Home > Documentation > Functions > Climatology + +rmMonAnnCycLLT + + Removes the annual cycle from "monthly" data. + +Prototype + +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" + + function rmMonAnnCycLLT ( + x [*][*][*] : numeric + ) + + return_val [dimsizes(x)] : typeof(x) + +Arguments + + x + + A three-dimensional array of monthly values, dimensioned lat x lon x time. The time dimension must be a multiple of 12. + +Return value + + The results are returned in an array of the same type and dimensionality as x. If the input data contains metadata, these + will be retained. + +Description + + This function removes the annual cycle from month (number of months = 12) data and subtracts the long term means from + each month. + +See Also + + rmMonAnnCycLLT, rmMonAnnCycTLL, rmMonAnnCycLLLT + + + ©2015 UCAR | Privacy Policy | Terms of Use | Contact the Webmaster | Sponsored by NSF diff --git a/samples/Text/zonalAve-help.ncl b/samples/Text/zonalAve-help.ncl new file mode 100644 index 00000000..20abf5de --- /dev/null +++ b/samples/Text/zonalAve-help.ncl @@ -0,0 +1,35 @@ +THE_URL:file://localhost/Users/hubery/Public/ucar/Document/Functions/Contributed/zonalAve.shtml +THE_TITLE:zonalAve + NCL Home > Documentation > Functions > General applied math + +zonalAve + + Computes a zonal average of the input array. + +Prototype + +load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" + + function zonalAve ( + x : numeric + ) + + return_val : typeof(x) + +Arguments + + x + + An array of any size and type. + +Return value + + The results are returned in an array of the same type and one dimension smaller than x. Metadata are preserved. + +Description + + This function computes a zonal average of the input array x. If the input array has a "long_name" or "short_name" + attribute, it will be updated. + + + ©2015 UCAR | Privacy Policy | Terms of Use | Contact the Webmaster | Sponsored by NSF diff --git a/samples/Thrift/linguist.thrift b/samples/Thrift/linguist.thrift new file mode 100644 index 00000000..8d701b88 --- /dev/null +++ b/samples/Thrift/linguist.thrift @@ -0,0 +1,5 @@ +struct PullRequest { + 1: string title +} + + diff --git a/samples/Unity3D Asset/GapTile.mat b/samples/Unity3D Asset/GapTile.mat new file mode 100644 index 00000000..07078927 --- /dev/null +++ b/samples/Unity3D Asset/GapTile.mat @@ -0,0 +1,28 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: GapTile + m_Shader: {fileID: 10750, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: [] + m_CustomRenderQueue: -1 + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: e503f0c932121ce4881ab1605349488b, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: {} + m_Colors: + data: + first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} diff --git a/samples/Unity3D Asset/Hover.anim b/samples/Unity3D Asset/Hover.anim new file mode 100644 index 00000000..c2c5cfab --- /dev/null +++ b/samples/Unity3D Asset/Hover.anim @@ -0,0 +1,157 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: Hover + serializedVersion: 4 + m_AnimationType: 1 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: {x: .25, y: .25, z: .25} + inSlope: {x: 1.15384614, y: 1.15384614, z: 1.15384614} + outSlope: {x: 1.15384614, y: 1.15384614, z: 1.15384614} + tangentMode: 823140368 + - time: .649999976 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 1.15384614, y: 1.15384614, z: 1.15384614} + outSlope: {x: 1.15384614, y: 1.15384614, z: 1.15384614} + tangentMode: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + path: Radius + m_FloatCurves: + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: -1.53846157 + outSlope: -1.53846157 + tangentMode: 10 + - time: .649999976 + value: 0 + inSlope: -1.53846157 + outSlope: -1.53846157 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + attribute: m_Color.a + path: Radius + classID: 212 + script: {fileID: 0} + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_StartTime: 0 + m_StopTime: .649999976 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: .25 + inSlope: 1.15384614 + outSlope: 1.15384614 + tangentMode: 10 + - time: .649999976 + value: 1 + inSlope: 1.15384614 + outSlope: 1.15384614 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + attribute: m_LocalScale.x + path: Radius + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: .25 + inSlope: 1.15384614 + outSlope: 1.15384614 + tangentMode: 10 + - time: .649999976 + value: 1 + inSlope: 1.15384614 + outSlope: 1.15384614 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + attribute: m_LocalScale.y + path: Radius + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: .25 + inSlope: 1.15384614 + outSlope: 1.15384614 + tangentMode: 10 + - time: .649999976 + value: 1 + inSlope: 1.15384614 + outSlope: 1.15384614 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + attribute: m_LocalScale.z + path: Radius + classID: 4 + script: {fileID: 0} + - curve: + serializedVersion: 2 + m_Curve: + - time: 0 + value: 1 + inSlope: -1.53846157 + outSlope: -1.53846157 + tangentMode: 10 + - time: .649999976 + value: 0 + inSlope: -1.53846157 + outSlope: -1.53846157 + tangentMode: 10 + m_PreInfinity: 2 + m_PostInfinity: 2 + attribute: m_Color.a + path: Radius + classID: 212 + script: {fileID: 0} + m_EulerEditorCurves: [] + m_Events: [] diff --git a/samples/Unity3D Asset/Tiles.meta b/samples/Unity3D Asset/Tiles.meta new file mode 100644 index 00000000..61ec47d5 --- /dev/null +++ b/samples/Unity3D Asset/Tiles.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 9e5c401e9d1d5415fbf2854b29c004c4 +folderAsset: yes +DefaultImporter: + userData: diff --git a/samples/Unity3D Asset/TimeManager.asset b/samples/Unity3D Asset/TimeManager.asset new file mode 100644 index 00000000..f0e494b6 --- /dev/null +++ b/samples/Unity3D Asset/TimeManager.asset @@ -0,0 +1,8 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!5 &1 +TimeManager: + m_ObjectHideFlags: 0 + Fixed Timestep: .0199999996 + Maximum Allowed Timestep: .333333343 + m_TimeScale: 1 diff --git a/samples/Unity3D Asset/canvas_Fullscreen_Fader.prefab b/samples/Unity3D Asset/canvas_Fullscreen_Fader.prefab new file mode 100644 index 00000000..0664d47e --- /dev/null +++ b/samples/Unity3D Asset/canvas_Fullscreen_Fader.prefab @@ -0,0 +1,157 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &100000 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22400000} + - 222: {fileID: 22200000} + - 114: {fileID: 11400004} + - 114: {fileID: 11400002} + - 114: {fileID: 11400000} + m_Layer: 5 + m_Name: Fader_Tint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!1 &100002 +GameObject: + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + serializedVersion: 4 + m_Component: + - 224: {fileID: 22400002} + - 223: {fileID: 22300000} + m_Layer: 5 + m_Name: canvas_Fullscreen_Fader + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0e5786b8fa0564f23a168e1c45671759, type: 3} + m_Name: + m_EditorClassIdentifier: + fadeOut: 1 + alwaysUseClearAsStartColor: 0 + _fadeOnStart: 1 + _startFaded: 0 + _fadeOnStartDelay: 1 + _fadeTime: .800000012 +--- !u!114 &11400002 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: c6d2a81ac2fb947e8a9aa86b4133fafd, type: 3} + m_Name: + m_EditorClassIdentifier: + _toDeactivate: [] +--- !u!114 &11400004 +MonoBehaviour: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 0} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: .996078432, g: .949019611, b: .862745106, a: 1} + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 +--- !u!222 &22200000 +CanvasRenderer: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} +--- !u!223 &22300000 +Canvas: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100002} + m_Enabled: 1 + serializedVersion: 2 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 1 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingLayerID: 0 + m_SortingOrder: 1 +--- !u!224 &22400000 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100000} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 22400002} + m_RootOrder: 0 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: .5, y: .5} +--- !u!224 &22400002 +RectTransform: + m_ObjectHideFlags: 1 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 100100000} + m_GameObject: {fileID: 100002} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 22400000} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1001 &100100000 +Prefab: + m_ObjectHideFlags: 1 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 0} + m_Modifications: [] + m_RemovedComponents: [] + m_ParentPrefab: {fileID: 0} + m_RootGameObject: {fileID: 100002} + m_IsPrefabParent: 1 + m_IsExploded: 1 diff --git a/samples/VimL/filenames/.nvimrc b/samples/VimL/filenames/.nvimrc new file mode 100644 index 00000000..53a65ade --- /dev/null +++ b/samples/VimL/filenames/.nvimrc @@ -0,0 +1,10 @@ +set nocompatible +set ignorecase +set smartcase +set showmatch +set showcmd + +syntax on + +set hlsearch " Highlight searches +set incsearch " Do incremental searching diff --git a/samples/VimL/solarized.vim b/samples/VimL/solarized.vim new file mode 100644 index 00000000..70f52238 --- /dev/null +++ b/samples/VimL/solarized.vim @@ -0,0 +1,1117 @@ +" Name: Solarized vim colorscheme +" Author: Ethan Schoonover +" URL: http://ethanschoonover.com/solarized +" (see this url for latest release & screenshots) +" License: OSI approved MIT license (see end of this file) +" Created: In the middle of the night +" Modified: 2011 May 05 +" +" Usage "{{{ +" +" --------------------------------------------------------------------- +" ABOUT: +" --------------------------------------------------------------------- +" Solarized is a carefully designed selective contrast colorscheme with dual +" light and dark modes that runs in both GUI, 256 and 16 color modes. +" +" See the homepage above for screenshots and details. +" +" --------------------------------------------------------------------- +" OPTIONS: +" --------------------------------------------------------------------- +" See the "solarized.txt" help file included with this colorscheme (in the +" "doc" subdirectory) for information on options, usage, the Toggle Background +" function and more. If you have already installed Solarized, this is available +" from the Solarized menu and command line as ":help solarized" +" +" --------------------------------------------------------------------- +" INSTALLATION: +" --------------------------------------------------------------------- +" Two options for installation: manual or pathogen +" +" MANUAL INSTALLATION OPTION: +" --------------------------------------------------------------------- +" +" 1. Download the solarized distribution (available on the homepage above) +" and unarchive the file. +" 2. Move `solarized.vim` to your `.vim/colors` directory. +" 3. Move each of the files in each subdirectories to the corresponding .vim +" subdirectory (e.g. autoload/togglebg.vim goes into your .vim/autoload +" directory as .vim/autoload/togglebg.vim). +" +" RECOMMENDED PATHOGEN INSTALLATION OPTION: +" --------------------------------------------------------------------- +" +" 1. Download and install Tim Pope's Pathogen from: +" https://github.com/tpope/vim-pathogen +" +" 2. Next, move or clone the `vim-colors-solarized` directory so that it is +" a subdirectory of the `.vim/bundle` directory. +" +" a. **clone with git:** +" +" $ cd ~/.vim/bundle +" $ git clone git://github.com/altercation/vim-colors-solarized.git +" +" b. **or move manually into the pathogen bundle directory:** +" In the parent directory of vim-colors-solarized: +" +" $ mv vim-colors-solarized ~/.vim/bundle/ +" +" MODIFY VIMRC: +" +" After either Option 1 or Option 2 above, put the following two lines in your +" .vimrc: +" +" syntax enable +" set background=dark +" colorscheme solarized +" +" or, for the light background mode of Solarized: +" +" syntax enable +" set background=light +" colorscheme solarized +" +" I like to have a different background in GUI and terminal modes, so I can use +" the following if-then. However, I find vim's background autodetection to be +" pretty good and, at least with MacVim, I can leave this background value +" assignment out entirely and get the same results. +" +" if has('gui_running') +" set background=light +" else +" set background=dark +" endif +" +" See the Solarized homepage at http://ethanschoonover.com/solarized for +" screenshots which will help you select either the light or dark background. +" +" --------------------------------------------------------------------- +" COLOR VALUES +" --------------------------------------------------------------------- +" Download palettes and files from: http://ethanschoonover.com/solarized +" +" L\*a\*b values are canonical (White D65, Reference D50), other values are +" matched in sRGB space. +" +" SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B sRGB HSB +" --------- ------- ---- ------- ----------- ---------- ----------- ----------- +" base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21 +" base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26 +" base01 #586e75 10/7 brgreen 240 #4e4e4e 45 -07 -07 88 110 117 194 25 46 +" base00 #657b83 11/7 bryellow 241 #585858 50 -07 -07 101 123 131 195 23 51 +" base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59 +" base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63 +" base2 #eee8d5 7/7 white 254 #d7d7af 92 -00 10 238 232 213 44 11 93 +" base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99 +" yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71 +" orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80 +" red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86 +" magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83 +" violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77 +" blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82 +" cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63 +" green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60 +" +" --------------------------------------------------------------------- +" COLORSCHEME HACKING +" --------------------------------------------------------------------- +" +" Useful commands for testing colorschemes: +" :source $VIMRUNTIME/syntax/hitest.vim +" :help highlight-groups +" :help cterm-colors +" :help group-name +" +" Useful links for developing colorschemes: +" http://www.vim.org/scripts/script.php?script_id=2937 +" http://vimcasts.org/episodes/creating-colorschemes-for-vim/ +" http://www.frexx.de/xterm-256-notes/" +" +" }}} +" Environment Specific Overrides "{{{ +" Allow or disallow certain features based on current terminal emulator or +" environment. + +" Terminals that support italics +let s:terms_italic=[ + \"rxvt", + \"gnome-terminal" + \] +" For reference only, terminals are known to be incomptible. +" Terminals that are in neither list need to be tested. +let s:terms_noitalic=[ + \"iTerm.app", + \"Apple_Terminal" + \] +if has("gui_running") + let s:terminal_italic=1 " TODO: could refactor to not require this at all +else + let s:terminal_italic=0 " terminals will be guilty until proven compatible + for term in s:terms_italic + if $TERM_PROGRAM =~ term + let s:terminal_italic=1 + endif + endfor +endif + +" }}} +" Default option values"{{{ +" --------------------------------------------------------------------- +" s:options_list is used to autogenerate a list of all non-default options +" using "call SolarizedOptions()" or with the "Generate .vimrc commands" +" Solarized menu option. See the "Menus" section below for the function itself. +let s:options_list=[ + \'" this block of commands has been autogenerated by solarized.vim and', + \'" includes the current, non-default Solarized option values.', + \'" To use, place these commands in your .vimrc file (replacing any', + \'" existing colorscheme commands). See also ":help solarized"', + \'', + \'" ------------------------------------------------------------------', + \'" Solarized Colorscheme Config', + \'" ------------------------------------------------------------------', + \] +let s:colorscheme_list=[ + \'syntax enable', + \'set background='.&background, + \'colorscheme solarized', + \] +let s:defaults_list=[ + \'" ------------------------------------------------------------------', + \'', + \'" The following items are available options, but do not need to be', + \'" included in your .vimrc as they are currently set to their defaults.', + \'' + \] +let s:lazycat_list=[ + \'" lazy method of appending this onto your .vimrc ":w! >> ~/.vimrc"', + \'" ------------------------------------------------------------------', + \] + +function! s:SetOption(name,default) + if type(a:default) == type(0) + let l:wrap='' + let l:ewrap='' + else + let l:wrap='"' + let l:ewrap='\"' + endif + if !exists("g:solarized_".a:name) || g:solarized_{a:name}==a:default + exe 'let g:solarized_'.a:name.'='.l:wrap.a:default.l:wrap.'"' + exe 'call add(s:defaults_list, "\" let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.'")' + else + exe 'call add(s:options_list, "let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.' \"default value is '.a:default.'")' + endif +endfunction + +if ($TERM_PROGRAM ==? "apple_terminal" && &t_Co < 256) + let s:solarized_termtrans_default = 1 +else + let s:solarized_termtrans_default = 0 +endif +call s:SetOption("termtrans",s:solarized_termtrans_default) +call s:SetOption("degrade",0) +call s:SetOption("bold",1) +call s:SetOption("underline",1) +call s:SetOption("italic",1) " note that we need to override this later if the terminal doesn't support +call s:SetOption("termcolors",16) +call s:SetOption("contrast","normal") +call s:SetOption("visibility","normal") +call s:SetOption("diffmode","normal") +call s:SetOption("hitrail",0) +call s:SetOption("menu",1) + +"}}} +" Colorscheme initialization "{{{ +" --------------------------------------------------------------------- +hi clear +if exists("syntax_on") + syntax reset +endif +let colors_name = "solarized" + +"}}} +" GUI & CSApprox hexadecimal palettes"{{{ +" --------------------------------------------------------------------- +" +" Set both gui and terminal color values in separate conditional statements +" Due to possibility that CSApprox is running (though I suppose we could just +" leave the hex values out entirely in that case and include only cterm colors) +" We also check to see if user has set solarized (force use of the +" neutral gray monotone palette component) +if (has("gui_running") && g:solarized_degrade == 0) + let s:vmode = "gui" + let s:base03 = "#002b36" + let s:base02 = "#073642" + let s:base01 = "#586e75" + let s:base00 = "#657b83" + let s:base0 = "#839496" + let s:base1 = "#93a1a1" + let s:base2 = "#eee8d5" + let s:base3 = "#fdf6e3" + let s:yellow = "#b58900" + let s:orange = "#cb4b16" + let s:red = "#dc322f" + let s:magenta = "#d33682" + let s:violet = "#6c71c4" + let s:blue = "#268bd2" + let s:cyan = "#2aa198" + "let s:green = "#859900" "original + let s:green = "#719e07" "experimental +elseif (has("gui_running") && g:solarized_degrade == 1) + " These colors are identical to the 256 color mode. They may be viewed + " while in gui mode via "let g:solarized_degrade=1", though this is not + " recommened and is for testing only. + let s:vmode = "gui" + let s:base03 = "#1c1c1c" + let s:base02 = "#262626" + let s:base01 = "#4e4e4e" + let s:base00 = "#585858" + let s:base0 = "#808080" + let s:base1 = "#8a8a8a" + let s:base2 = "#d7d7af" + let s:base3 = "#ffffd7" + let s:yellow = "#af8700" + let s:orange = "#d75f00" + let s:red = "#af0000" + let s:magenta = "#af005f" + let s:violet = "#5f5faf" + let s:blue = "#0087ff" + let s:cyan = "#00afaf" + let s:green = "#5f8700" +elseif g:solarized_termcolors != 256 && &t_Co >= 16 + let s:vmode = "cterm" + let s:base03 = "8" + let s:base02 = "0" + let s:base01 = "10" + let s:base00 = "11" + let s:base0 = "12" + let s:base1 = "14" + let s:base2 = "7" + let s:base3 = "15" + let s:yellow = "3" + let s:orange = "9" + let s:red = "1" + let s:magenta = "5" + let s:violet = "13" + let s:blue = "4" + let s:cyan = "6" + let s:green = "2" +elseif g:solarized_termcolors == 256 + let s:vmode = "cterm" + let s:base03 = "234" + let s:base02 = "235" + let s:base01 = "239" + let s:base00 = "240" + let s:base0 = "244" + let s:base1 = "245" + let s:base2 = "187" + let s:base3 = "230" + let s:yellow = "136" + let s:orange = "166" + let s:red = "124" + let s:magenta = "125" + let s:violet = "61" + let s:blue = "33" + let s:cyan = "37" + let s:green = "64" +else + let s:vmode = "cterm" + let s:bright = "* term=bold cterm=bold" +" let s:base03 = "0".s:bright +" let s:base02 = "0" +" let s:base01 = "2".s:bright +" let s:base00 = "3".s:bright +" let s:base0 = "4".s:bright +" let s:base1 = "6".s:bright +" let s:base2 = "7" +" let s:base3 = "7".s:bright +" let s:yellow = "3" +" let s:orange = "1".s:bright +" let s:red = "1" +" let s:magenta = "5" +" let s:violet = "5".s:bright +" let s:blue = "4" +" let s:cyan = "6" +" let s:green = "2" + let s:base03 = "DarkGray" " 0* + let s:base02 = "Black" " 0 + let s:base01 = "LightGreen" " 2* + let s:base00 = "LightYellow" " 3* + let s:base0 = "LightBlue" " 4* + let s:base1 = "LightCyan" " 6* + let s:base2 = "LightGray" " 7 + let s:base3 = "White" " 7* + let s:yellow = "DarkYellow" " 3 + let s:orange = "LightRed" " 1* + let s:red = "DarkRed" " 1 + let s:magenta = "DarkMagenta" " 5 + let s:violet = "LightMagenta" " 5* + let s:blue = "DarkBlue" " 4 + let s:cyan = "DarkCyan" " 6 + let s:green = "DarkGreen" " 2 + +endif +"}}} +" Formatting options and null values for passthrough effect "{{{ +" --------------------------------------------------------------------- + let s:none = "NONE" + let s:none = "NONE" + let s:t_none = "NONE" + let s:n = "NONE" + let s:c = ",undercurl" + let s:r = ",reverse" + let s:s = ",standout" + let s:ou = "" + let s:ob = "" +"}}} +" Background value based on termtrans setting "{{{ +" --------------------------------------------------------------------- +if (has("gui_running") || g:solarized_termtrans == 0) + let s:back = s:base03 +else + let s:back = "NONE" +endif +"}}} +" Alternate light scheme "{{{ +" --------------------------------------------------------------------- +if &background == "light" + let s:temp03 = s:base03 + let s:temp02 = s:base02 + let s:temp01 = s:base01 + let s:temp00 = s:base00 + let s:base03 = s:base3 + let s:base02 = s:base2 + let s:base01 = s:base1 + let s:base00 = s:base0 + let s:base0 = s:temp00 + let s:base1 = s:temp01 + let s:base2 = s:temp02 + let s:base3 = s:temp03 + if (s:back != "NONE") + let s:back = s:base03 + endif +endif +"}}} +" Optional contrast schemes "{{{ +" --------------------------------------------------------------------- +if g:solarized_contrast == "high" + let s:base01 = s:base00 + let s:base00 = s:base0 + let s:base0 = s:base1 + let s:base1 = s:base2 + let s:base2 = s:base3 + let s:back = s:back +endif +if g:solarized_contrast == "low" + let s:back = s:base02 + let s:ou = ",underline" +endif +"}}} +" Overrides dependent on user specified values and environment "{{{ +" --------------------------------------------------------------------- +if (g:solarized_bold == 0 || &t_Co == 8 ) + let s:b = "" + let s:bb = ",bold" +else + let s:b = ",bold" + let s:bb = "" +endif + +if g:solarized_underline == 0 + let s:u = "" +else + let s:u = ",underline" +endif + +if g:solarized_italic == 0 || s:terminal_italic == 0 + let s:i = "" +else + let s:i = ",italic" +endif +"}}} +" Highlighting primitives"{{{ +" --------------------------------------------------------------------- + +exe "let s:bg_none = ' ".s:vmode."bg=".s:none ."'" +exe "let s:bg_back = ' ".s:vmode."bg=".s:back ."'" +exe "let s:bg_base03 = ' ".s:vmode."bg=".s:base03 ."'" +exe "let s:bg_base02 = ' ".s:vmode."bg=".s:base02 ."'" +exe "let s:bg_base01 = ' ".s:vmode."bg=".s:base01 ."'" +exe "let s:bg_base00 = ' ".s:vmode."bg=".s:base00 ."'" +exe "let s:bg_base0 = ' ".s:vmode."bg=".s:base0 ."'" +exe "let s:bg_base1 = ' ".s:vmode."bg=".s:base1 ."'" +exe "let s:bg_base2 = ' ".s:vmode."bg=".s:base2 ."'" +exe "let s:bg_base3 = ' ".s:vmode."bg=".s:base3 ."'" +exe "let s:bg_green = ' ".s:vmode."bg=".s:green ."'" +exe "let s:bg_yellow = ' ".s:vmode."bg=".s:yellow ."'" +exe "let s:bg_orange = ' ".s:vmode."bg=".s:orange ."'" +exe "let s:bg_red = ' ".s:vmode."bg=".s:red ."'" +exe "let s:bg_magenta = ' ".s:vmode."bg=".s:magenta."'" +exe "let s:bg_violet = ' ".s:vmode."bg=".s:violet ."'" +exe "let s:bg_blue = ' ".s:vmode."bg=".s:blue ."'" +exe "let s:bg_cyan = ' ".s:vmode."bg=".s:cyan ."'" + +exe "let s:fg_none = ' ".s:vmode."fg=".s:none ."'" +exe "let s:fg_back = ' ".s:vmode."fg=".s:back ."'" +exe "let s:fg_base03 = ' ".s:vmode."fg=".s:base03 ."'" +exe "let s:fg_base02 = ' ".s:vmode."fg=".s:base02 ."'" +exe "let s:fg_base01 = ' ".s:vmode."fg=".s:base01 ."'" +exe "let s:fg_base00 = ' ".s:vmode."fg=".s:base00 ."'" +exe "let s:fg_base0 = ' ".s:vmode."fg=".s:base0 ."'" +exe "let s:fg_base1 = ' ".s:vmode."fg=".s:base1 ."'" +exe "let s:fg_base2 = ' ".s:vmode."fg=".s:base2 ."'" +exe "let s:fg_base3 = ' ".s:vmode."fg=".s:base3 ."'" +exe "let s:fg_green = ' ".s:vmode."fg=".s:green ."'" +exe "let s:fg_yellow = ' ".s:vmode."fg=".s:yellow ."'" +exe "let s:fg_orange = ' ".s:vmode."fg=".s:orange ."'" +exe "let s:fg_red = ' ".s:vmode."fg=".s:red ."'" +exe "let s:fg_magenta = ' ".s:vmode."fg=".s:magenta."'" +exe "let s:fg_violet = ' ".s:vmode."fg=".s:violet ."'" +exe "let s:fg_blue = ' ".s:vmode."fg=".s:blue ."'" +exe "let s:fg_cyan = ' ".s:vmode."fg=".s:cyan ."'" + +exe "let s:fmt_none = ' ".s:vmode."=NONE". " term=NONE". "'" +exe "let s:fmt_bold = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'" +exe "let s:fmt_bldi = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'" +exe "let s:fmt_undr = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'" +exe "let s:fmt_undb = ' ".s:vmode."=NONE".s:u.s:b. " term=NONE".s:u.s:b."'" +exe "let s:fmt_undi = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'" +exe "let s:fmt_uopt = ' ".s:vmode."=NONE".s:ou. " term=NONE".s:ou."'" +exe "let s:fmt_curl = ' ".s:vmode."=NONE".s:c. " term=NONE".s:c."'" +exe "let s:fmt_ital = ' ".s:vmode."=NONE".s:i. " term=NONE".s:i."'" +exe "let s:fmt_stnd = ' ".s:vmode."=NONE".s:s. " term=NONE".s:s."'" +exe "let s:fmt_revr = ' ".s:vmode."=NONE".s:r. " term=NONE".s:r."'" +exe "let s:fmt_revb = ' ".s:vmode."=NONE".s:r.s:b. " term=NONE".s:r.s:b."'" +" revbb (reverse bold for bright colors) is only set to actual bold in low +" color terminals (t_co=8, such as OS X Terminal.app) and should only be used +" with colors 8-15. +exe "let s:fmt_revbb = ' ".s:vmode."=NONE".s:r.s:bb. " term=NONE".s:r.s:bb."'" +exe "let s:fmt_revbbu = ' ".s:vmode."=NONE".s:r.s:bb.s:u." term=NONE".s:r.s:bb.s:u."'" + +if has("gui_running") + exe "let s:sp_none = ' guisp=".s:none ."'" + exe "let s:sp_back = ' guisp=".s:back ."'" + exe "let s:sp_base03 = ' guisp=".s:base03 ."'" + exe "let s:sp_base02 = ' guisp=".s:base02 ."'" + exe "let s:sp_base01 = ' guisp=".s:base01 ."'" + exe "let s:sp_base00 = ' guisp=".s:base00 ."'" + exe "let s:sp_base0 = ' guisp=".s:base0 ."'" + exe "let s:sp_base1 = ' guisp=".s:base1 ."'" + exe "let s:sp_base2 = ' guisp=".s:base2 ."'" + exe "let s:sp_base3 = ' guisp=".s:base3 ."'" + exe "let s:sp_green = ' guisp=".s:green ."'" + exe "let s:sp_yellow = ' guisp=".s:yellow ."'" + exe "let s:sp_orange = ' guisp=".s:orange ."'" + exe "let s:sp_red = ' guisp=".s:red ."'" + exe "let s:sp_magenta = ' guisp=".s:magenta."'" + exe "let s:sp_violet = ' guisp=".s:violet ."'" + exe "let s:sp_blue = ' guisp=".s:blue ."'" + exe "let s:sp_cyan = ' guisp=".s:cyan ."'" +else + let s:sp_none = "" + let s:sp_back = "" + let s:sp_base03 = "" + let s:sp_base02 = "" + let s:sp_base01 = "" + let s:sp_base00 = "" + let s:sp_base0 = "" + let s:sp_base1 = "" + let s:sp_base2 = "" + let s:sp_base3 = "" + let s:sp_green = "" + let s:sp_yellow = "" + let s:sp_orange = "" + let s:sp_red = "" + let s:sp_magenta = "" + let s:sp_violet = "" + let s:sp_blue = "" + let s:sp_cyan = "" +endif + +"}}} +" Basic highlighting"{{{ +" --------------------------------------------------------------------- +" note that link syntax to avoid duplicate configuration doesn't work with the +" exe compiled formats + +exe "hi! Normal" .s:fmt_none .s:fg_base0 .s:bg_back + +exe "hi! Comment" .s:fmt_ital .s:fg_base01 .s:bg_none +" *Comment any comment + +exe "hi! Constant" .s:fmt_none .s:fg_cyan .s:bg_none +" *Constant any constant +" String a string constant: "this is a string" +" Character a character constant: 'c', '\n' +" Number a number constant: 234, 0xff +" Boolean a boolean constant: TRUE, false +" Float a floating point constant: 2.3e10 + +exe "hi! Identifier" .s:fmt_none .s:fg_blue .s:bg_none +" *Identifier any variable name +" Function function name (also: methods for classes) +" +exe "hi! Statement" .s:fmt_none .s:fg_green .s:bg_none +" *Statement any statement +" Conditional if, then, else, endif, switch, etc. +" Repeat for, do, while, etc. +" Label case, default, etc. +" Operator "sizeof", "+", "*", etc. +" Keyword any other keyword +" Exception try, catch, throw + +exe "hi! PreProc" .s:fmt_none .s:fg_orange .s:bg_none +" *PreProc generic Preprocessor +" Include preprocessor #include +" Define preprocessor #define +" Macro same as Define +" PreCondit preprocessor #if, #else, #endif, etc. + +exe "hi! Type" .s:fmt_none .s:fg_yellow .s:bg_none +" *Type int, long, char, etc. +" StorageClass static, register, volatile, etc. +" Structure struct, union, enum, etc. +" Typedef A typedef + +exe "hi! Special" .s:fmt_none .s:fg_red .s:bg_none +" *Special any special symbol +" SpecialChar special character in a constant +" Tag you can use CTRL-] on this +" Delimiter character that needs attention +" SpecialComment special things inside a comment +" Debug debugging statements + +exe "hi! Underlined" .s:fmt_none .s:fg_violet .s:bg_none +" *Underlined text that stands out, HTML links + +exe "hi! Ignore" .s:fmt_none .s:fg_none .s:bg_none +" *Ignore left blank, hidden |hl-Ignore| + +exe "hi! Error" .s:fmt_bold .s:fg_red .s:bg_none +" *Error any erroneous construct + +exe "hi! Todo" .s:fmt_bold .s:fg_magenta.s:bg_none +" *Todo anything that needs extra attention; mostly the +" keywords TODO FIXME and XXX +" +"}}} +" Extended highlighting "{{{ +" --------------------------------------------------------------------- +if (g:solarized_visibility=="high") + exe "hi! SpecialKey" .s:fmt_revr .s:fg_red .s:bg_none + exe "hi! NonText" .s:fmt_bold .s:fg_red .s:bg_none +elseif (g:solarized_visibility=="low") + exe "hi! SpecialKey" .s:fmt_bold .s:fg_base02 .s:bg_none + exe "hi! NonText" .s:fmt_bold .s:fg_base02 .s:bg_none +else + exe "hi! SpecialKey" .s:fmt_bold .s:fg_base00 .s:bg_base02 + exe "hi! NonText" .s:fmt_bold .s:fg_base00 .s:bg_none +endif +exe "hi! StatusLine" .s:fmt_none .s:fg_base1 .s:bg_base02 .s:fmt_revbb +exe "hi! StatusLineNC" .s:fmt_none .s:fg_base00 .s:bg_base02 .s:fmt_revbb +exe "hi! Visual" .s:fmt_none .s:fg_base01 .s:bg_base03 .s:fmt_revbb +exe "hi! Directory" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! ErrorMsg" .s:fmt_revr .s:fg_red .s:bg_none +exe "hi! IncSearch" .s:fmt_stnd .s:fg_orange .s:bg_none +exe "hi! Search" .s:fmt_revr .s:fg_yellow .s:bg_none +exe "hi! MoreMsg" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! ModeMsg" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! LineNr" .s:fmt_none .s:fg_base01 .s:bg_base02 +exe "hi! Question" .s:fmt_bold .s:fg_cyan .s:bg_none +if ( has("gui_running") || &t_Co > 8 ) + exe "hi! VertSplit" .s:fmt_none .s:fg_base00 .s:bg_base00 +else + exe "hi! VertSplit" .s:fmt_revbb .s:fg_base00 .s:bg_base02 +endif +exe "hi! Title" .s:fmt_bold .s:fg_orange .s:bg_none +exe "hi! VisualNOS" .s:fmt_stnd .s:fg_none .s:bg_base02 .s:fmt_revbb +exe "hi! WarningMsg" .s:fmt_bold .s:fg_red .s:bg_none +exe "hi! WildMenu" .s:fmt_none .s:fg_base2 .s:bg_base02 .s:fmt_revbb +exe "hi! Folded" .s:fmt_undb .s:fg_base0 .s:bg_base02 .s:sp_base03 +exe "hi! FoldColumn" .s:fmt_none .s:fg_base0 .s:bg_base02 +if (g:solarized_diffmode=="high") +exe "hi! DiffAdd" .s:fmt_revr .s:fg_green .s:bg_none +exe "hi! DiffChange" .s:fmt_revr .s:fg_yellow .s:bg_none +exe "hi! DiffDelete" .s:fmt_revr .s:fg_red .s:bg_none +exe "hi! DiffText" .s:fmt_revr .s:fg_blue .s:bg_none +elseif (g:solarized_diffmode=="low") +exe "hi! DiffAdd" .s:fmt_undr .s:fg_green .s:bg_none .s:sp_green +exe "hi! DiffChange" .s:fmt_undr .s:fg_yellow .s:bg_none .s:sp_yellow +exe "hi! DiffDelete" .s:fmt_bold .s:fg_red .s:bg_none +exe "hi! DiffText" .s:fmt_undr .s:fg_blue .s:bg_none .s:sp_blue +else " normal + if has("gui_running") +exe "hi! DiffAdd" .s:fmt_bold .s:fg_green .s:bg_base02 .s:sp_green +exe "hi! DiffChange" .s:fmt_bold .s:fg_yellow .s:bg_base02 .s:sp_yellow +exe "hi! DiffDelete" .s:fmt_bold .s:fg_red .s:bg_base02 +exe "hi! DiffText" .s:fmt_bold .s:fg_blue .s:bg_base02 .s:sp_blue + else +exe "hi! DiffAdd" .s:fmt_none .s:fg_green .s:bg_base02 .s:sp_green +exe "hi! DiffChange" .s:fmt_none .s:fg_yellow .s:bg_base02 .s:sp_yellow +exe "hi! DiffDelete" .s:fmt_none .s:fg_red .s:bg_base02 +exe "hi! DiffText" .s:fmt_none .s:fg_blue .s:bg_base02 .s:sp_blue + endif +endif +exe "hi! SignColumn" .s:fmt_none .s:fg_base0 +exe "hi! Conceal" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! SpellBad" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_red +exe "hi! SpellCap" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_violet +exe "hi! SpellRare" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_cyan +exe "hi! SpellLocal" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_yellow +exe "hi! Pmenu" .s:fmt_none .s:fg_base0 .s:bg_base02 .s:fmt_revbb +exe "hi! PmenuSel" .s:fmt_none .s:fg_base01 .s:bg_base2 .s:fmt_revbb +exe "hi! PmenuSbar" .s:fmt_none .s:fg_base2 .s:bg_base0 .s:fmt_revbb +exe "hi! PmenuThumb" .s:fmt_none .s:fg_base0 .s:bg_base03 .s:fmt_revbb +exe "hi! TabLine" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0 +exe "hi! TabLineFill" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0 +exe "hi! TabLineSel" .s:fmt_undr .s:fg_base01 .s:bg_base2 .s:sp_base0 .s:fmt_revbbu +exe "hi! CursorColumn" .s:fmt_none .s:fg_none .s:bg_base02 +exe "hi! CursorLine" .s:fmt_uopt .s:fg_none .s:bg_base02 .s:sp_base1 +exe "hi! ColorColumn" .s:fmt_none .s:fg_none .s:bg_base02 +exe "hi! Cursor" .s:fmt_none .s:fg_base03 .s:bg_base0 +hi! link lCursor Cursor +exe "hi! MatchParen" .s:fmt_bold .s:fg_red .s:bg_base01 + +"}}} +" vim syntax highlighting "{{{ +" --------------------------------------------------------------------- +"exe "hi! vimLineComment" . s:fg_base01 .s:bg_none .s:fmt_ital +"hi! link vimComment Comment +"hi! link vimLineComment Comment +hi! link vimVar Identifier +hi! link vimFunc Function +hi! link vimUserFunc Function +hi! link helpSpecial Special +hi! link vimSet Normal +hi! link vimSetEqual Normal +exe "hi! vimCommentString" .s:fmt_none .s:fg_violet .s:bg_none +exe "hi! vimCommand" .s:fmt_none .s:fg_yellow .s:bg_none +exe "hi! vimCmdSep" .s:fmt_bold .s:fg_blue .s:bg_none +exe "hi! helpExample" .s:fmt_none .s:fg_base1 .s:bg_none +exe "hi! helpOption" .s:fmt_none .s:fg_cyan .s:bg_none +exe "hi! helpNote" .s:fmt_none .s:fg_magenta.s:bg_none +exe "hi! helpVim" .s:fmt_none .s:fg_magenta.s:bg_none +exe "hi! helpHyperTextJump" .s:fmt_undr .s:fg_blue .s:bg_none +exe "hi! helpHyperTextEntry".s:fmt_none .s:fg_green .s:bg_none +exe "hi! vimIsCommand" .s:fmt_none .s:fg_base00 .s:bg_none +exe "hi! vimSynMtchOpt" .s:fmt_none .s:fg_yellow .s:bg_none +exe "hi! vimSynType" .s:fmt_none .s:fg_cyan .s:bg_none +exe "hi! vimHiLink" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! vimHiGroup" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! vimGroup" .s:fmt_undb .s:fg_blue .s:bg_none +"}}} +" diff highlighting "{{{ +" --------------------------------------------------------------------- +hi! link diffAdded Statement +hi! link diffLine Identifier +"}}} +" git & gitcommit highlighting "{{{ +"git +"exe "hi! gitDateHeader" +"exe "hi! gitIdentityHeader" +"exe "hi! gitIdentityKeyword" +"exe "hi! gitNotesHeader" +"exe "hi! gitReflogHeader" +"exe "hi! gitKeyword" +"exe "hi! gitIdentity" +"exe "hi! gitEmailDelimiter" +"exe "hi! gitEmail" +"exe "hi! gitDate" +"exe "hi! gitMode" +"exe "hi! gitHashAbbrev" +"exe "hi! gitHash" +"exe "hi! gitReflogMiddle" +"exe "hi! gitReference" +"exe "hi! gitStage" +"exe "hi! gitType" +"exe "hi! gitDiffAdded" +"exe "hi! gitDiffRemoved" +"gitcommit +"exe "hi! gitcommitSummary" +exe "hi! gitcommitComment" .s:fmt_ital .s:fg_base01 .s:bg_none +hi! link gitcommitUntracked gitcommitComment +hi! link gitcommitDiscarded gitcommitComment +hi! link gitcommitSelected gitcommitComment +exe "hi! gitcommitUnmerged" .s:fmt_bold .s:fg_green .s:bg_none +exe "hi! gitcommitOnBranch" .s:fmt_bold .s:fg_base01 .s:bg_none +exe "hi! gitcommitBranch" .s:fmt_bold .s:fg_magenta .s:bg_none +hi! link gitcommitNoBranch gitcommitBranch +exe "hi! gitcommitDiscardedType".s:fmt_none .s:fg_red .s:bg_none +exe "hi! gitcommitSelectedType" .s:fmt_none .s:fg_green .s:bg_none +"exe "hi! gitcommitUnmergedType" +"exe "hi! gitcommitType" +"exe "hi! gitcommitNoChanges" +"exe "hi! gitcommitHeader" +exe "hi! gitcommitHeader" .s:fmt_none .s:fg_base01 .s:bg_none +exe "hi! gitcommitUntrackedFile".s:fmt_bold .s:fg_cyan .s:bg_none +exe "hi! gitcommitDiscardedFile".s:fmt_bold .s:fg_red .s:bg_none +exe "hi! gitcommitSelectedFile" .s:fmt_bold .s:fg_green .s:bg_none +exe "hi! gitcommitUnmergedFile" .s:fmt_bold .s:fg_yellow .s:bg_none +exe "hi! gitcommitFile" .s:fmt_bold .s:fg_base0 .s:bg_none +hi! link gitcommitDiscardedArrow gitcommitDiscardedFile +hi! link gitcommitSelectedArrow gitcommitSelectedFile +hi! link gitcommitUnmergedArrow gitcommitUnmergedFile +"exe "hi! gitcommitArrow" +"exe "hi! gitcommitOverflow" +"exe "hi! gitcommitBlank" +" }}} +" html highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! htmlTag" .s:fmt_none .s:fg_base01 .s:bg_none +exe "hi! htmlEndTag" .s:fmt_none .s:fg_base01 .s:bg_none +exe "hi! htmlTagN" .s:fmt_bold .s:fg_base1 .s:bg_none +exe "hi! htmlTagName" .s:fmt_bold .s:fg_blue .s:bg_none +exe "hi! htmlSpecialTagName".s:fmt_ital .s:fg_blue .s:bg_none +exe "hi! htmlArg" .s:fmt_none .s:fg_base00 .s:bg_none +exe "hi! javaScript" .s:fmt_none .s:fg_yellow .s:bg_none +"}}} +" perl highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! perlHereDoc" . s:fg_base1 .s:bg_back .s:fmt_none +exe "hi! perlVarPlain" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! perlStatementFileDesc". s:fg_cyan.s:bg_back.s:fmt_none + +"}}} +" tex highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! texStatement" . s:fg_cyan .s:bg_back .s:fmt_none +exe "hi! texMathZoneX" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! texRefLabel" . s:fg_yellow .s:bg_back .s:fmt_none +"}}} +" ruby highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! rubyDefine" . s:fg_base1 .s:bg_back .s:fmt_bold +"rubyInclude +"rubySharpBang +"rubyAccess +"rubyPredefinedVariable +"rubyBoolean +"rubyClassVariable +"rubyBeginEnd +"rubyRepeatModifier +"hi! link rubyArrayDelimiter Special " [ , , ] +"rubyCurlyBlock { , , } + +"hi! link rubyClass Keyword +"hi! link rubyModule Keyword +"hi! link rubyKeyword Keyword +"hi! link rubyOperator Operator +"hi! link rubyIdentifier Identifier +"hi! link rubyInstanceVariable Identifier +"hi! link rubyGlobalVariable Identifier +"hi! link rubyClassVariable Identifier +"hi! link rubyConstant Type +"}}} +" haskell syntax highlighting"{{{ +" --------------------------------------------------------------------- +" For use with syntax/haskell.vim : Haskell Syntax File +" http://www.vim.org/scripts/script.php?script_id=3034 +" See also Steffen Siering's github repository: +" http://github.com/urso/dotrc/blob/master/vim/syntax/haskell.vim +" --------------------------------------------------------------------- +" +" Treat True and False specially, see the plugin referenced above +let hs_highlight_boolean=1 +" highlight delims, see the plugin referenced above +let hs_highlight_delimiters=1 + +exe "hi! cPreCondit". s:fg_orange.s:bg_none .s:fmt_none + +exe "hi! VarId" . s:fg_blue .s:bg_none .s:fmt_none +exe "hi! ConId" . s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! hsImport" . s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! hsString" . s:fg_base00 .s:bg_none .s:fmt_none + +exe "hi! hsStructure" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hs_hlFunctionName" . s:fg_blue .s:bg_none +exe "hi! hsStatement" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsImportLabel" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hs_OpFunctionName" . s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! hs_DeclareFunction" . s:fg_orange .s:bg_none .s:fmt_none +exe "hi! hsVarSym" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsType" . s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! hsTypedef" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsModuleName" . s:fg_green .s:bg_none .s:fmt_undr +exe "hi! hsModuleStartLabel" . s:fg_magenta.s:bg_none .s:fmt_none +hi! link hsImportParams Delimiter +hi! link hsDelimTypeExport Delimiter +hi! link hsModuleStartLabel hsStructure +hi! link hsModuleWhereLabel hsModuleStartLabel + +" following is for the haskell-conceal plugin +" the first two items don't have an impact, but better safe +exe "hi! hsNiceOperator" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsniceoperator" . s:fg_cyan .s:bg_none .s:fmt_none + +"}}} +" pandoc markdown syntax highlighting "{{{ +" --------------------------------------------------------------------- + +"PandocHiLink pandocNormalBlock +exe "hi! pandocTitleBlock" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocTitleBlockTitle" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocTitleComment" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocComment" .s:fg_base01 .s:bg_none .s:fmt_ital +exe "hi! pandocVerbatimBlock" .s:fg_yellow .s:bg_none .s:fmt_none +hi! link pandocVerbatimBlockDeep pandocVerbatimBlock +hi! link pandocCodeBlock pandocVerbatimBlock +hi! link pandocCodeBlockDelim pandocVerbatimBlock +exe "hi! pandocBlockQuote" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader1" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader2" .s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader3" .s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader4" .s:fg_red .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader5" .s:fg_base0 .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader6" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocListMarker" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocListReference" .s:fg_magenta.s:bg_none .s:fmt_undr + +" Definitions +" --------------------------------------------------------------------- +let s:fg_pdef = s:fg_violet +exe "hi! pandocDefinitionBlock" .s:fg_pdef .s:bg_none .s:fmt_none +exe "hi! pandocDefinitionTerm" .s:fg_pdef .s:bg_none .s:fmt_stnd +exe "hi! pandocDefinitionIndctr" .s:fg_pdef .s:bg_none .s:fmt_bold +exe "hi! pandocEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_ital +exe "hi! pandocEmphasisNestedDefinition" .s:fg_pdef .s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_bold +exe "hi! pandocStrongEmphasisNestedDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasisDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi +exe "hi! pandocStrikeoutDefinition" .s:fg_pdef .s:bg_none .s:fmt_revr +exe "hi! pandocVerbatimInlineDefinition" .s:fg_pdef .s:bg_none .s:fmt_none +exe "hi! pandocSuperscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none +exe "hi! pandocSubscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none + +" Tables +" --------------------------------------------------------------------- +let s:fg_ptable = s:fg_blue +exe "hi! pandocTable" .s:fg_ptable.s:bg_none .s:fmt_none +exe "hi! pandocTableStructure" .s:fg_ptable.s:bg_none .s:fmt_none +hi! link pandocTableStructureTop pandocTableStructre +hi! link pandocTableStructureEnd pandocTableStructre +exe "hi! pandocTableZebraLight" .s:fg_ptable.s:bg_base03.s:fmt_none +exe "hi! pandocTableZebraDark" .s:fg_ptable.s:bg_base02.s:fmt_none +exe "hi! pandocEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_ital +exe "hi! pandocEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bold +exe "hi! pandocStrongEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bldi +exe "hi! pandocStrikeoutTable" .s:fg_ptable.s:bg_none .s:fmt_revr +exe "hi! pandocVerbatimInlineTable" .s:fg_ptable.s:bg_none .s:fmt_none +exe "hi! pandocSuperscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none +exe "hi! pandocSubscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none + +" Headings +" --------------------------------------------------------------------- +let s:fg_phead = s:fg_orange +exe "hi! pandocHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocHeadingMarker" .s:fg_yellow.s:bg_none.s:fmt_bold +exe "hi! pandocEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocStrongEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocStrongEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasisHeading".s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocStrikeoutHeading" .s:fg_phead .s:bg_none.s:fmt_revr +exe "hi! pandocVerbatimInlineHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocSuperscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocSubscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold + +" Links +" --------------------------------------------------------------------- +exe "hi! pandocLinkDelim" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocLinkLabel" .s:fg_blue .s:bg_none .s:fmt_undr +exe "hi! pandocLinkText" .s:fg_blue .s:bg_none .s:fmt_undb +exe "hi! pandocLinkURL" .s:fg_base00 .s:bg_none .s:fmt_undr +exe "hi! pandocLinkTitle" .s:fg_base00 .s:bg_none .s:fmt_undi +exe "hi! pandocLinkTitleDelim" .s:fg_base01 .s:bg_none .s:fmt_undi .s:sp_base00 +exe "hi! pandocLinkDefinition" .s:fg_cyan .s:bg_none .s:fmt_undr .s:sp_base00 +exe "hi! pandocLinkDefinitionID" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocImageCaption" .s:fg_violet .s:bg_none .s:fmt_undb +exe "hi! pandocFootnoteLink" .s:fg_green .s:bg_none .s:fmt_undr +exe "hi! pandocFootnoteDefLink" .s:fg_green .s:bg_none .s:fmt_bold +exe "hi! pandocFootnoteInline" .s:fg_green .s:bg_none .s:fmt_undb +exe "hi! pandocFootnote" .s:fg_green .s:bg_none .s:fmt_none +exe "hi! pandocCitationDelim" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocCitation" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocCitationID" .s:fg_magenta.s:bg_none .s:fmt_undr +exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none + +" Main Styles +" --------------------------------------------------------------------- +exe "hi! pandocStyleDelim" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocEmphasis" .s:fg_base0 .s:bg_none .s:fmt_ital +exe "hi! pandocEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bold +exe "hi! pandocStrongEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bldi +exe "hi! pandocStrikeout" .s:fg_base01 .s:bg_none .s:fmt_revr +exe "hi! pandocVerbatimInline" .s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! pandocSuperscript" .s:fg_violet .s:bg_none .s:fmt_none +exe "hi! pandocSubscript" .s:fg_violet .s:bg_none .s:fmt_none + +exe "hi! pandocRule" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocRuleLine" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocEscapePair" .s:fg_red .s:bg_none .s:fmt_bold +exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocNonBreakingSpace" . s:fg_red .s:bg_none .s:fmt_revr +hi! link pandocEscapedCharacter pandocEscapePair +hi! link pandocLineBreak pandocEscapePair + +" Embedded Code +" --------------------------------------------------------------------- +exe "hi! pandocMetadataDelim" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocMetadataKey" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_bold +hi! link pandocMetadataTitle pandocMetadata + +"}}} +" Utility autocommand "{{{ +" --------------------------------------------------------------------- +" In cases where Solarized is initialized inside a terminal vim session and +" then transferred to a gui session via the command `:gui`, the gui vim process +" does not re-read the colorscheme (or .vimrc for that matter) so any `has_gui` +" related code that sets gui specific values isn't executed. +" +" Currently, Solarized sets only the cterm or gui values for the colorscheme +" depending on gui or terminal mode. It's possible that, if the following +" autocommand method is deemed excessively poor form, that approach will be +" used again and the autocommand below will be dropped. +" +" However it seems relatively benign in this case to include the autocommand +" here. It fires only in cases where vim is transferring from terminal to gui +" mode (detected with the script scope s:vmode variable). It also allows for +" other potential terminal customizations that might make gui mode suboptimal. +" +autocmd GUIEnter * if (s:vmode != "gui") | exe "colorscheme " . g:colors_name | endif +"}}} +" Highlight Trailing Space {{{ +" Experimental: Different highlight when on cursorline +function! s:SolarizedHiTrail() + if g:solarized_hitrail==0 + hi! clear solarizedTrailingSpace + else + syn match solarizedTrailingSpace "\s*$" + exe "hi! solarizedTrailingSpace " .s:fmt_undr .s:fg_red .s:bg_none .s:sp_red + endif +endfunction +augroup SolarizedHiTrail + autocmd! + if g:solarized_hitrail==1 + autocmd! Syntax * call s:SolarizedHiTrail() + autocmd! ColorScheme * if g:colors_name == "solarized" | call s:SolarizedHiTrail() | else | augroup! s:SolarizedHiTrail | endif + endif +augroup END +" }}} +" Menus "{{{ +" --------------------------------------------------------------------- +" Turn off Solarized menu by including the following assignment in your .vimrc: +" +" let g:solarized_menu=0 + +function! s:SolarizedOptions() + new "new buffer + setf vim "vim filetype + let failed = append(0, s:defaults_list) + let failed = append(0, s:colorscheme_list) + let failed = append(0, s:options_list) + let failed = append(0, s:lazycat_list) + 0 "jump back to the top +endfunction +if !exists(":SolarizedOptions") + command SolarizedOptions :call s:SolarizedOptions() +endif + +function! SolarizedMenu() + if exists("g:loaded_solarized_menu") + try + silent! aunmenu Solarized + endtry + endif + let g:loaded_solarized_menu = 1 + + if g:colors_name == "solarized" && g:solarized_menu != 0 + + amenu &Solarized.&Contrast.&Low\ Contrast :let g:solarized_contrast="low" \| colorscheme solarized + amenu &Solarized.&Contrast.&Normal\ Contrast :let g:solarized_contrast="normal" \| colorscheme solarized + amenu &Solarized.&Contrast.&High\ Contrast :let g:solarized_contrast="high" \| colorscheme solarized + an &Solarized.&Contrast.-sep- + amenu &Solarized.&Contrast.&Help:\ Contrast :help 'solarized_contrast' + + amenu &Solarized.&Visibility.&Low\ Visibility :let g:solarized_visibility="low" \| colorscheme solarized + amenu &Solarized.&Visibility.&Normal\ Visibility :let g:solarized_visibility="normal" \| colorscheme solarized + amenu &Solarized.&Visibility.&High\ Visibility :let g:solarized_visibility="high" \| colorscheme solarized + an &Solarized.&Visibility.-sep- + amenu &Solarized.&Visibility.&Help:\ Visibility :help 'solarized_visibility' + + amenu &Solarized.&Background.&Toggle\ Background :ToggleBG + amenu &Solarized.&Background.&Dark\ Background :set background=dark \| colorscheme solarized + amenu &Solarized.&Background.&Light\ Background :set background=light \| colorscheme solarized + an &Solarized.&Background.-sep- + amenu &Solarized.&Background.&Help:\ ToggleBG :help togglebg + + if g:solarized_bold==0 | let l:boldswitch="On" | else | let l:boldswitch="Off" | endif + exe "amenu &Solarized.&Styling.&Turn\\ Bold\\ ".l:boldswitch." :let g:solarized_bold=(abs(g:solarized_bold-1)) \\| colorscheme solarized" + if g:solarized_italic==0 | let l:italicswitch="On" | else | let l:italicswitch="Off" | endif + exe "amenu &Solarized.&Styling.&Turn\\ Italic\\ ".l:italicswitch." :let g:solarized_italic=(abs(g:solarized_italic-1)) \\| colorscheme solarized" + if g:solarized_underline==0 | let l:underlineswitch="On" | else | let l:underlineswitch="Off" | endif + exe "amenu &Solarized.&Styling.&Turn\\ Underline\\ ".l:underlineswitch." :let g:solarized_underline=(abs(g:solarized_underline-1)) \\| colorscheme solarized" + + amenu &Solarized.&Diff\ Mode.&Low\ Diff\ Mode :let g:solarized_diffmode="low" \| colorscheme solarized + amenu &Solarized.&Diff\ Mode.&Normal\ Diff\ Mode :let g:solarized_diffmode="normal" \| colorscheme solarized + amenu &Solarized.&Diff\ Mode.&High\ Diff\ Mode :let g:solarized_diffmode="high" \| colorscheme solarized + + if g:solarized_hitrail==0 | let l:hitrailswitch="On" | else | let l:hitrailswitch="Off" | endif + exe "amenu &Solarized.&Experimental.&Turn\\ Highlight\\ Trailing\\ Spaces\\ ".l:hitrailswitch." :let g:solarized_hitrail=(abs(g:solarized_hitrail-1)) \\| colorscheme solarized" + an &Solarized.&Experimental.-sep- + amenu &Solarized.&Experimental.&Help:\ HiTrail :help 'solarized_hitrail' + + an &Solarized.-sep1- + + amenu &Solarized.&Autogenerate\ options :SolarizedOptions + + an &Solarized.-sep2- + + amenu &Solarized.&Help.&Solarized\ Help :help solarized + amenu &Solarized.&Help.&Toggle\ Background\ Help :help togglebg + amenu &Solarized.&Help.&Removing\ This\ Menu :help solarized-menu + + an 9999.77 &Help.&Solarized\ Colorscheme :help solarized + an 9999.78 &Help.&Toggle\ Background :help togglebg + an 9999.79 &Help.-sep3- + + endif +endfunction + +autocmd ColorScheme * if g:colors_name != "solarized" | silent! aunmenu Solarized | else | call SolarizedMenu() | endif + +"}}} +" License "{{{ +" --------------------------------------------------------------------- +" +" Copyright (c) 2011 Ethan Schoonover +" +" Permission is hereby granted, free of charge, to any person obtaining a copy +" of this software and associated documentation files (the "Software"), to deal +" in the Software without restriction, including without limitation the rights +" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +" copies of the Software, and to permit persons to whom the Software is +" furnished to do so, subject to the following conditions: +" +" The above copyright notice and this permission notice shall be included in +" all copies or substantial portions of the Software. +" +" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +" THE SOFTWARE. +" +" vim:foldmethod=marker:foldlevel=0 +"}}} diff --git a/samples/WebIDL/AnimationEvent.webidl b/samples/WebIDL/AnimationEvent.webidl index e48ed571..5dbc2752 100644 --- a/samples/WebIDL/AnimationEvent.webidl +++ b/samples/WebIDL/AnimationEvent.webidl @@ -1,4 +1,4 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* -*- Mode: linguist-disable-strategy-modeline-IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. diff --git a/samples/WebIDL/Fetch.webidl b/samples/WebIDL/Fetch.webidl index fb022126..87a4e957 100644 --- a/samples/WebIDL/Fetch.webidl +++ b/samples/WebIDL/Fetch.webidl @@ -1,4 +1,4 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* -*- Mode: linguist-disable-strategy-modeline-IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. diff --git a/samples/XML/Application.xib b/samples/XML/Application.xib new file mode 100644 index 00000000..6c2e5f4d --- /dev/null +++ b/samples/XML/Application.xib @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/samples/XML/Example.mdpolicy b/samples/XML/Example.mdpolicy new file mode 100644 index 00000000..6c9ff048 --- /dev/null +++ b/samples/XML/Example.mdpolicy @@ -0,0 +1,12 @@ + + + + 120 + False + True + + + None + FileFormatDefault + + \ No newline at end of file diff --git a/samples/XML/Storyboard.storyboard b/samples/XML/Storyboard.storyboard new file mode 100644 index 00000000..673e0f7e --- /dev/null +++ b/samples/XML/Storyboard.storyboard @@ -0,0 +1,7 @@ + + + + + + + diff --git a/samples/XML/intellij.iml b/samples/XML/intellij.iml new file mode 100644 index 00000000..74bdc4de --- /dev/null +++ b/samples/XML/intellij.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/samples/XML/point-3.1.gml b/samples/XML/point-3.1.gml new file mode 100644 index 00000000..233654d0 --- /dev/null +++ b/samples/XML/point-3.1.gml @@ -0,0 +1,4 @@ + + + 52.56 13.29 + diff --git a/samples/XML/point-3.2.gml b/samples/XML/point-3.2.gml new file mode 100644 index 00000000..af9dce90 --- /dev/null +++ b/samples/XML/point-3.2.gml @@ -0,0 +1,4 @@ + + + 52.56 13.29 + diff --git a/samples/XML/tei-odd-sample.odd b/samples/XML/tei-odd-sample.odd new file mode 100644 index 00000000..a6a736c4 --- /dev/null +++ b/samples/XML/tei-odd-sample.odd @@ -0,0 +1,1304 @@ + + + + + + + TEI Simple + + + TEI Consortium + + Distributed under a + Creative Commons Attribution-ShareAlike 3.0 Unported License + +

Copyright 2014 TEI Consortium.

+

All rights reserved.

+

Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met:

+ + Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +

This software is provided by the copyright holders and contributors "as is" and + any express or implied warranties, including, but not limited to, the implied + warranties of merchantability and fitness for a particular purpose are + disclaimed. In no event shall the copyright holder or contributors be liable + for any direct, indirect, incidental, special, exemplary, or consequential + damages (including, but not limited to, procurement of substitute goods or + services; loss of use, data, or profits; or business interruption) however + caused and on any theory of liability, whether in contract, strict liability, + or tort (including negligence or otherwise) arising in any way out of the use + of this software, even if advised of the possibility of such damage.

+
+

TEI material can be licensed differently depending on the use you intend to make + of it. Hence it is made available under both the CC+BY and BSD-2 licences. The + CC+BY licence is generally appropriate for usages which treat TEI content as data + or documentation. The BSD-2 licence is generally appropriate for usage of TEI + content in a software environment. For further information or clarification, + please contact the TEI Consortium.

+
+
+ +

created ab initio during a meeting in Oxford

+
+
+
+ + + + + TEI Simple + + Sebastian Rahtz + Brian Pytlik Zillig + Martin Mueller + Version 0.1: 30th November 2014 + + + +
+ Summary +

The TEI Simple project aims to define a highly-constrained and prescriptive subset of the Text Encoding Initiative (TEI) Guidelines + suited to the representation of early modern and modern books, a formally-defined set of + processing rules which permit modern web applications to easily present and analyze the + encoded texts, mapping to other ontologies, and processes to describe the encoding status + and richness of a TEI digital text. This document describes + the constrained subset

+
+
+ + Background +

The Text Encoding Initiative (TEI) has developed over 20 years into a key technology in + text-centric humanities disciplines, with an extremely wide range of applications, from + diplomatic editions to dictionaries, from prosopography to speech transcription and + linguistic analysis. It has been able to achieve its range of use by adopting a descriptive rather than prescriptive approach + , by recommending customization to suit particular projects, and by + eschewing any attempt to dictate how the digital texts should be rendered or exchanged. + However, this flexibility has come at the cost of relatively limited success in + interoperability. In our view there is a distinct set of uses (primarily in the area of + digitized ‘European’-style books) that would benefit from a prescriptive recipe for digital text; this will sit alongside other + domain-specific, constrained TEI customizations, such as the very successful Epidoc in the epigraphic community. TEI-Simple may become a prototype + for a new family of constrained customizations. For instance, a TEI Simple MS for + manuscript based work could be built on top of the ENRICH project, drawing on many of the + lessons and some of the code for TEI Simple.

+

The TEI has long maintained an introductory subset (TEI Lite), and a constrained + customization for use in outsourcing production to commercial vendors (TEI Tite), but both + of these permit enormous variation, and have nothing to say about processing. The present + project can be viewed in some ways as a revision of TEI Lite, re-examining the basis of + the choices therein, focusing it for a more specific area, and adding a "cradle to grave" + processing model that associates the TEI Simple schema with explicit and standardized + options for displaying and querying texts. This means being able to specify what a + programmer should do with particular TEI elements when they are encountered, allowing + programmers to build stylesheets that work for everybody and to query a corpus of + documents reliably.

+

This project, TEI Simple, focuses on interoperability, machine generation, and + low-cost integration. The TEI architecture facilitates customizations of many kinds; TEI + Simple aims to produce a complete 'out of the box' customization which meets the needs of + the many users for whom the task of creating a customization is daunting or seems + irrelevant. TEI Simple in no way intends to constrain the expressive liberty of encoders + who do not think that it is either possible or desirable to follow this path. It does, + however, promise to make life easier for those who think there is some virtue in + travelling that path as far as it will take you, which for quite a few projects will be + far enough. Some users will never feel the need to move beyond it, others will outgrow it, + and when they do they will have learned enough to do so.

+

A major driver for this project is the texts created by phase 1 of the EEBO-TCP project, + which were placed in the public domain on 1 January 2015. Another 45,000 texts will + join over the following five years, creating by 2020 an archive of 70,000 consistently + encoded books published in England from 1475 to 1700, including works of literature, + philosophy, politics, religion, geography, science and all other areas of human endeavor. + When we compare the query potential of the EEBO TCP texts in their current and quite + simple encoding with flat file versions of those text, it is clear that the difference in + query potential is very high, especially if you add to that coarse encoding simple forms + of linguistic annotation or named entity tagging that can be added in a largely + algorithmic fashion. During 2012 and 2013 extensive work has been undertaken at + Northwestern, Michigan and Oxford to enrich these texts and bring them into line with the + current TEI Guidelines (where necessary working with the TEI to modify the Guidelines). + TEI Simple uses this corpus as a point of departure and will provide its users with a + friendlier environment for manipulating EEBO texts in various projects. But TEI Simple + should not be understood as an EEBO specific project. We believe that, given the + extraordinary degree of internal diversity in the EEBO source files, a project that starts + from them can, with appropriate modifications, accommodate a wide range of printed texts + differing in language, genre, or time and place of origin.

+
+
+ The TEI Simple schema + + + + + + + + + + + + +
+ The TEI infrastructure + + + +
+
+ The header +

The default set of elements for the header are loaded using the + header module. In addition, elements from other modules are + loaded, if they are tagged in the classification as being needed for the header + only.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Elements which are only intended to be used in the header are banned from the + text, using a Schematron rule.

+ + + +
+
+
+ Transcription +

In order to support the sourcedoc and facsimile elements, the + basic transcriptional elements are loaded, and two attribute classes.

+ + + + + + + + + + + + + + + + + + + + + +
+
+ Attribute classes + +

The tei module brings with it a default set of attribute classes. + We need some more specialist ones from other modules, and to delete some + default ones which we don't plan to use.

+ + + + + + + +

Some uncommon attributes are removed from global linking.

+ + + + + + + + +

URLs have a constraint that a local pointer must have a corresponding ID.

+ + + + + + + + Error: Every + local pointer in "" must point to + an ID in this document () + + + + + + +

Constrained value lists are added to attribute classes where possible.

+ + + + + + + above the line + + + below the line + + + + at the top of the page + + + at the top right of the page + + + at the top left of the page + + + at the top center of the page + + + + at the bottom right of the page + + + + at the bottom left of the page + + + + at the bottom center of the page + + + + at the foot of the page + + + underneath a table + + + + + + + + in the outer margin + + + + in the left margin + + + + in the right margin + + + on the opposite, i.e. facing, page. + + + on the other side of the leaf. + + + at the end of the volume. + + + at the end the current division. + + + at the end the current paragraph. + + + + within the body of the text. + + + in a predefined space, for example left by an earlier + scribe. + + + formatted like a quotation + + + + + + + + + + + characters + + + + + lines + + + + pages + + + + words + + + + centimetres + + + millimetre + + + inches + + + + + + + + + + + Error: Each of + the rendition values in "" + must point to a local ID or to a token in the Simple scheme + () + + + + + + + + Error: Every + local pointer in "" must point to + an ID in this document () + + + + + + + + + + + + all capitals + + + + + + + black letter or gothic typeface + + + + + + + bold typeface + + + marked with a brace under the bottom of the text + + + + border around the text + + + + centred + + + cursive typeface + + + block display + + + strikethrough with double line + + + underlined with double line + + + + initial letter larger or decorated + + + floated out of main flow + + + with a hyphen here (eg in line break) + + + inline rendering + + + + + + + + italic typeface + + + + larger type + + + + aligned to the left or left-justified + + + + marked with a brace on the left side of the text + + + + letter-spaced + + + upright shape and default weight of typeface + + + + normal typeface weight + + + + aligned to the right or right-justified + + + marked with a brace to the right of the text + + + + rotated to the left + + + + rotated to the right + + + + + small caps + + + + smaller type + + + strike through + + + + subscript + + + + + superscript + + + marked with a brace above the text + + + fixed-width typeface, like typewriter + + + + underlined with single line + + + underlined with wavy line + + + + + +
+
+
+ Model classes + +

A set of unused model classes are removed.

+ + + + + + + + + + + + + +
+
+
+ Elements +

The main part of Simple is the set of selected elements.

+ + + + + + + + + + + + + + + color: green; text-decoration: underline; + + + + + margin-top: 2em; margin-left: 2em; margin-right: 2em; margin-bottom: + 2em; + + + + + white-space: nowrap; + + + + + + + + + + + + + + margin-bottom: 0.5em; + + + + + + + + + + + + + + Element "" may not be empty. + + + + + + + + + + + + + + + + + + + + Insert list. + + + + + Insert item, rendered as described in parent list rendition. + + + + + list-style: ordered; + + + + + + + + Insert table cell. + + + + + + + Element "" must have at least two child + elements. + + + + + + Element "" must have corresponding corr/sic, expand/abbr, reg/orig + + + + + + + + + + + + Insert cit. + + + + + margin-top: 1em; margin-left: 1em; margin-left: 1em; + + + + + Omit, if handled in parent choice. + + + content: '['; + content: ']'; + + + + + + + + + + + + + + text-decoration: line-through; + + + + + + + + border: 1px solid black; padding: 5px; + + + + + + Omit if located in teiHeader. + + + + + + Omit if located in teiHeader. + + + + + + Omit if located in teiHeader. + + + + + + Omit if located in teiHeader. + + + + + + Omit if located in teiHeader. + + + font-size: large; + + + + + + + + + + + + + + + content: '[..'; + content: '..]'; + color: grey;font-style:italic; + + + + + + +display: block; +border-top: solid 1pt blue; +border-bottom: solid 1pt blue; + + + + + + + margin: 6pt; + border: solid black 1pt; + + + + + + font-style:italic; + + + + + + + + + + + + + + + + + + + + color: grey; + + + content: '[..'; + content: '..]'; + color: grey; + + + content: '[...]'; + + + + + + + + + + + + + + font-style: italic; + + + font-style: italic; + + + font-style: italic; + + + font-weight: bold; + + + + + + + font-style: italic; + + + font-style: italic; + + + + + + + + + + + + margin-left: 1em; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + margin-left: 10px;margin-right: 10px; font-size:smaller; + + + content:" ["; + content:"] "; + font-size:small; + + + + + + + + + + + Omit, if handled in parent choice. + + + + + + text-align: justify; + + + + + + please make sure pb elements are not at the start or end of mixed content + + + + + display: block; + color: grey; + float: right; + + content: '[Page '; + content: ']'; + + + + + + + + + + + Omit if located in teiHeader. + + + + + Omit if located in teiHeader. + + + + + margin-left: 10px; margin-right: 10px; + + + + content: '‘'; + content: '’'; + + + margin-left: 10px; margin-right: 10px; + + + + + + If it is inside a paragraph then it is inline, otherwise it is block level + content: '‘'; + content: '’'; + + + If it is inside a paragraph then it is inline, otherwise it is block level + margin-left: 10px; margin-right: 10px; + + + + + + + + + + + + Omit, if handled in parent choice. + + + + + + + + + + + + + + + font-weight: bold; + + + Insert table row. + + + + + + + + + + + + + + + + + + + content: '{'; + content: '}'; + + + + + + text-align: right; + + + + + font-style: italic; + + + + + + + + + + + + font-style:italic; + + + + + + + + font-style: italic; + + + + + + + + + content:"<"; + content:">"; + + + content:"["; + content:"]"; + + + content:"("; + content:")"; + + + content:"{"; + content:"}"; + + + + + + font-size: smaller; + background-color: #F0F0F0; + + + + + + + + + + + + + + + + + + + + + + + + + max-width: 80%; + margin: auto; + font-family: Verdana, Tahoma, Geneva, Arial, Helvetica, sans-serif; + + + + + + + + + + + color: red; font-size: 2em; + + + + + + font-style: italic; + + + + + + font-style: italic; + + + + + + font-style: italic; + + + + + font-style: italic; + + + + + text-align: center; + + + + + + + + color: green; + + + + + content: ' [?] '; + + + + + + + +

A small number of elements have constrained value lists added.

+ + + + + + Using TeX or LaTeX notation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + data cell + + + label cell + + + + row or column sum data + + + table total data + + + + + + + + + + + data cell + + + label cell + + + row or column sum data + + + table total data + + + + + +
+ + text-transform: uppercase; + font-family: fantasy; + font-weight: bold; + padding-bottom: 2pt; border-bottom: dashed gray 2pt; + padding: 2pt; border: solid black 1pt; + text-align: center; + font-family: cursive; + text-decoration: line-through; color: red; + text-decoration: underline; color: red; + font-size : 6em; + font-family: cursive; + font-weight : bold; + vertical-align: top; + height: 1em; + line-height: 1em; + float : left; + width : 1em; + color : #c00; + margin: 0em; + padding: 0px; + float:right; display: block; + font-size: smaller; + clear: right; + padding: 4pt; + width: 15%; + + + display:inline; + display:block; + font-style: italic; + font-size: larger; + text-align: left; + padding-left: 2pt; border-left: dotted gray 2pt; + letter-spacing: 0.5em; + font-style:roman; + font-weight:normal; + text-align: right; + padding-right: 2pt; border-right: dotted gray 2pt; + -webkit-transform: rotate(90deg); transform: rotate(90deg); + -webkit-transform: rotate(-90deg); transform: rotate(-90deg); + font-variant: small-caps; + font-size: smaller; + text-decoration: line-through; + vertical-align: bottom; font-size: smaller; + vertical-align: super; font-size: smaller; + padding-top: 2pt; border-top: dotted gray 2pt; + font-family:monospace; + text-decoration: underline; + text-decoration: underline; text-decoration-style: wavy; + +
+
+ +
+
diff --git a/samples/XML/xhtml-struct-1.mod b/samples/XML/xhtml-struct-1.mod new file mode 100644 index 00000000..08c8b1d7 --- /dev/null +++ b/samples/XML/xhtml-struct-1.mod @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + + + + +]]> + + + + + + + +]]> + + + +]]> + + + + + + + +]]> + + + + + + + +]]> + + diff --git a/samples/XPages/navbar.xsp-config b/samples/XPages/navbar.xsp-config new file mode 100755 index 00000000..d32555bb --- /dev/null +++ b/samples/XPages/navbar.xsp-config @@ -0,0 +1,17 @@ + + + + http://www.ibm.com/xsp/custom + xc + + + navbar + navbar + /navbar.xsp + + + true + + + + diff --git a/samples/XPages/navbar.xsp.metadata b/samples/XPages/navbar.xsp.metadata new file mode 100755 index 00000000..120b7002 --- /dev/null +++ b/samples/XPages/navbar.xsp.metadata @@ -0,0 +1,22 @@ + + +20131221T175632,71-05 +20150305T194407,22-08 +20150305T194407,21-08 +20150305T194407,22-08 +20150305T162153,30-08 +CN=Eric McCormick/O=Eric McCormick +CN=Eric McCormick/O=Eric McCormick +gC~4; +navbar.xsp + + + + + +navbar.xsp +8.5.3 + + + + \ No newline at end of file diff --git a/samples/XS/CommonMark.xs b/samples/XS/CommonMark.xs new file mode 100644 index 00000000..6a0e321e --- /dev/null +++ b/samples/XS/CommonMark.xs @@ -0,0 +1,466 @@ +/* + * This software is copyright (C) by Nick Wellnhofer . + * + * This is free software; you can redistribute it and/or modify it under + * the same terms as the Perl 5 programming language system itself. + * + * Terms of the Perl programming language system itself + * + * a) the GNU General Public License as published by the Free + * Software Foundation; either version 1, or (at your option) any + * later version, or + * b) the "Artistic License" + */ + +/* + * Notes on memory management + * + * - A pointer to the Perl SV representing a node is stored in the + * user data slot of `struct cmark_node`, so there's a 1:1 mapping + * between Perl and C objects. + * - Every node SV keeps a reference to the parent SV. This is done + * indirectly by looking up the parent SV and increasing its refcount. + * - This makes sure that a document isn't freed if the last reference + * from Perl to the root node is dropped, as references to child nodes + * might still exist. + * - As a consequence, as long as a node is referenced from Perl, all its + * ancestor nodes will also be associated with a Perl object. + */ + +#define PERL_NO_GET_CONTEXT + +#include "EXTERN.h" +#include "perl.h" +#include "XSUB.h" + +#include +#include + +#if CMARK_VERSION < 0x001000 + #error libcmark 0.16.0 is required. +#endif + +/* Fix prefixes of render functions. */ +#define cmark_node_render_html cmark_render_html +#define cmark_node_render_xml cmark_render_xml +#define cmark_node_render_man cmark_render_man + +static SV* +S_create_or_incref_node_sv(pTHX_ cmark_node *node) { + SV *new_obj = NULL; + + while (node) { + SV *obj; + HV *stash; + + /* Look for existing object. */ + obj = (SV*)cmark_node_get_user_data(node); + + if (obj) { + /* Incref if found. */ + SvREFCNT_inc_simple_void_NN(obj); + if (!new_obj) { + new_obj = obj; + } + break; + } + + /* Create a new SV. */ + obj = newSViv(PTR2IV(node)); + cmark_node_set_user_data(node, obj); + if (!new_obj) { + new_obj = obj; + } + + /* + * Unfortunately, Perl doesn't offer an API function to bless an SV + * without a reference. The following code is mostly copied from + * sv_bless. + */ + SvOBJECT_on(obj); +#if (PERL_VERSION <= 16) + PL_sv_objcount++; +#endif + SvUPGRADE(obj, SVt_PVMG); + stash = gv_stashpvn("CommonMark::Node", 16, GV_ADD); + SvSTASH_set(obj, (HV*)SvREFCNT_inc(stash)); + + /* Recurse into parent. */ + node = cmark_node_parent(node); + } + + return new_obj; +} + +static void +S_decref_node_sv(pTHX_ cmark_node *node) { + SV *obj; + + if (!node) { + return; + } + + obj = (SV*)cmark_node_get_user_data(node); + if (!obj) { + /* Should never happen. */ + croak("Internal error: node SV not found"); + } + + SvREFCNT_dec_NN(obj); +} + +/* Find or create an SV for a cmark_node. */ +static SV* +S_node2sv(pTHX_ cmark_node *node) { + SV *obj; + + if (!node) { + return &PL_sv_undef; + } + + obj = S_create_or_incref_node_sv(aTHX_ node); + + return newRV_noinc(obj); +} + +/* Transfer refcount from a node to another. */ +static void +S_transfer_refcount(pTHX_ cmark_node *from, cmark_node *to) { + if (from != to) { + S_create_or_incref_node_sv(aTHX_ to); + S_decref_node_sv(aTHX_ from); + } +} + +/* Get C struct pointer from an SV argument. */ +static void* +S_sv2c(pTHX_ SV *sv, const char *class_name, STRLEN len, CV *cv, + const char *var_name) { + if (!SvROK(sv) || !sv_derived_from_pvn(sv, class_name, len, 0)) { + const char *sub_name = GvNAME(CvGV(cv)); + croak("%s: %s is not of type %s", sub_name, var_name, class_name); + } + return INT2PTR(void*, SvIV(SvRV(sv))); +} + + +MODULE = CommonMark PACKAGE = CommonMark PREFIX = cmark_ + +PROTOTYPES: DISABLE + +BOOT: + if (cmark_version != CMARK_VERSION) { + warn("Compiled against libcmark %s, but runtime version is %s", + CMARK_VERSION_STRING, cmark_version_string); + } + +char* +cmark_markdown_to_html(package, string) + SV *package = NO_INIT + SV *string +PREINIT: + STRLEN len; + const char *buffer; +CODE: + (void)package; + buffer = SvPVutf8(string, len); + RETVAL = cmark_markdown_to_html(buffer, len); +OUTPUT: + RETVAL + +cmark_node* +cmark_parse_document(package, string) + SV *package = NO_INIT + SV *string +PREINIT: + STRLEN len; + const char *buffer; +CODE: + (void)package; + buffer = SvPVutf8(string, len); + RETVAL = cmark_parse_document(buffer, len); +OUTPUT: + RETVAL + +cmark_node* +cmark_parse_file(package, file) + SV *package = NO_INIT + SV *file +PREINIT: + PerlIO *perl_io; + FILE *stream = NULL; +CODE: + (void)package; + perl_io = IoIFP(sv_2io(file)); + if (perl_io) { + stream = PerlIO_findFILE(perl_io); + } + if (!stream) { + croak("parse_file: file is not a file handle"); + } + RETVAL = cmark_parse_file(stream); +OUTPUT: + RETVAL + +int +cmark_version(package) + SV *package = NO_INIT +CODE: + (void)package; + RETVAL = cmark_version; +OUTPUT: + RETVAL + +const char* +cmark_version_string(package) + SV *package = NO_INIT +CODE: + (void)package; + RETVAL = cmark_version_string; +OUTPUT: + RETVAL + +int +cmark_compile_time_version(package) + SV *package = NO_INIT +CODE: + (void)package; + RETVAL = CMARK_VERSION; +OUTPUT: + RETVAL + +const char* +cmark_compile_time_version_string(package) + SV *package = NO_INIT +CODE: + (void)package; + RETVAL = CMARK_VERSION_STRING; +OUTPUT: + RETVAL + + +MODULE = CommonMark PACKAGE = CommonMark::Node PREFIX = cmark_node_ + +cmark_node* +new(package, type) + SV *package = NO_INIT + cmark_node_type type +CODE: + (void)package; + RETVAL = cmark_node_new(type); +OUTPUT: + RETVAL + +void +DESTROY(cmark_node *node) +CODE: + cmark_node *parent = cmark_node_parent(node); + if (parent) { + cmark_node_set_user_data(node, NULL); + S_decref_node_sv(aTHX_ parent); + } + else { + cmark_node_free(node); + } + +cmark_iter* +iterator(cmark_node *node) +CODE: + S_create_or_incref_node_sv(aTHX_ node); + RETVAL = cmark_iter_new(node); +OUTPUT: + RETVAL + +cmark_node* +interface_get_node(cmark_node *node) +INTERFACE: + cmark_node_next + cmark_node_previous + cmark_node_parent + cmark_node_first_child + cmark_node_last_child + +int +interface_get_int(cmark_node *node) +INTERFACE: + cmark_node_get_type + cmark_node_get_header_level + cmark_node_get_list_type + cmark_node_get_list_delim + cmark_node_get_list_start + cmark_node_get_list_tight + cmark_node_get_start_line + cmark_node_get_start_column + cmark_node_get_end_line + cmark_node_get_end_column + +NO_OUTPUT int +interface_set_int(cmark_node *node, int value) +INTERFACE: + cmark_node_set_header_level + cmark_node_set_list_type + cmark_node_set_list_delim + cmark_node_set_list_start + cmark_node_set_list_tight +POSTCALL: + if (!RETVAL) { + croak("%s: invalid operation", GvNAME(CvGV(cv))); + } + +const char* +interface_get_utf8(cmark_node *node) +INTERFACE: + cmark_node_get_type_string + cmark_node_get_literal + cmark_node_get_title + cmark_node_get_url + cmark_node_get_fence_info + +NO_OUTPUT int +interface_set_utf8(cmark_node *node, const char *value) +INTERFACE: + cmark_node_set_literal + cmark_node_set_title + cmark_node_set_url + cmark_node_set_fence_info +POSTCALL: + if (!RETVAL) { + croak("%s: invalid operation", GvNAME(CvGV(cv))); + } + +void +cmark_node_unlink(cmark_node *node) +PREINIT: + cmark_node *old_parent; +INIT: + old_parent = cmark_node_parent(node); +POSTCALL: + S_decref_node_sv(aTHX_ old_parent); + +NO_OUTPUT int +interface_move_node(cmark_node *node, cmark_node *other) +PREINIT: + cmark_node *old_parent; + cmark_node *new_parent; +INIT: + old_parent = cmark_node_parent(other); +INTERFACE: + cmark_node_insert_before + cmark_node_insert_after + cmark_node_prepend_child + cmark_node_append_child +POSTCALL: + if (!RETVAL) { + croak("%s: invalid operation", GvNAME(CvGV(cv))); + } + new_parent = cmark_node_parent(other); + S_transfer_refcount(aTHX_ old_parent, new_parent); + +char* +interface_render(cmark_node *root, long options = 0) +INTERFACE: + cmark_node_render_html + cmark_node_render_xml + cmark_node_render_man + + +MODULE = CommonMark PACKAGE = CommonMark::Iterator PREFIX = cmark_iter_ + +void +DESTROY(cmark_iter *iter) +CODE: + S_decref_node_sv(aTHX_ cmark_iter_get_node(iter)); + S_decref_node_sv(aTHX_ cmark_iter_get_root(iter)); + cmark_iter_free(iter); + +void +cmark_iter_next(cmark_iter *iter) +PREINIT: + I32 gimme; + cmark_node *old_node; + cmark_event_type ev_type; +PPCODE: + gimme = GIMME_V; + old_node = cmark_iter_get_node(iter); + ev_type = cmark_iter_next(iter); + + if (ev_type != CMARK_EVENT_DONE) { + cmark_node *node = cmark_iter_get_node(iter); + + ST(0) = sv_2mortal(newSViv((IV)ev_type)); + + if (gimme == G_ARRAY) { + SV *obj = S_create_or_incref_node_sv(aTHX_ node); + + /* A bit more efficient than S_transfer_refcount. */ + if (old_node != node) { + S_decref_node_sv(aTHX_ old_node); + SvREFCNT_inc_simple_void_NN(obj); + } + + ST(1) = sv_2mortal(newRV_noinc(obj)); + XSRETURN(2); + } + else { + S_transfer_refcount(aTHX_ old_node, node); + XSRETURN(1); + } + } + else { + S_decref_node_sv(aTHX_ old_node); + + if (gimme == G_ARRAY) { + XSRETURN_EMPTY; + } + else { + ST(0) = sv_2mortal(newSViv((IV)ev_type)); + XSRETURN(1); + } + } + +cmark_node* +cmark_iter_get_node(cmark_iter *iter) + +cmark_event_type +cmark_iter_get_event_type(cmark_iter *iter) + +void +cmark_iter_reset(iter, node, event_type) + cmark_iter *iter + cmark_node *node + cmark_event_type event_type +PREINIT: + cmark_node *old_node; +INIT: + old_node = cmark_iter_get_node(iter); + S_transfer_refcount(aTHX_ old_node, node); + + +MODULE = CommonMark PACKAGE = CommonMark::Parser PREFIX = cmark_parser_ + +cmark_parser* +cmark_parser_new(package) + SV *package = NO_INIT +CODE: + (void)package; + RETVAL = cmark_parser_new(); +OUTPUT: + RETVAL + +void +DESTROY(cmark_parser *parser) +CODE: + cmark_parser_free(parser); + +void +cmark_parser_feed(cmark_parser *parser, SV *string) +PREINIT: + STRLEN len; + const char *buffer; +CODE: + buffer = SvPVutf8(string, len); + cmark_parser_feed(parser, buffer, len); + +cmark_node* +cmark_parser_finish(cmark_parser *parser) + diff --git a/samples/wisp/intro.wisp b/samples/wisp/intro.wisp index 6b817dac..b222b6e2 100644 --- a/samples/wisp/intro.wisp +++ b/samples/wisp/intro.wisp @@ -258,7 +258,7 @@ My name is wisp!" ;; evaluating the reference to the value of the corresponding variable. foo -;; If you wish to refer to the literal symbol, rather then reference you +;; If you wish to refer to the literal symbol, rather than reference you ;; could use (quote foo) ;; or more usually diff --git a/samples/xBase/sample.ch b/samples/xBase/sample.ch new file mode 100644 index 00000000..308f1e1c --- /dev/null +++ b/samples/xBase/sample.ch @@ -0,0 +1,30 @@ +#ifndef __HARBOUR__ + #ifndef __XPP__ + #ifndef __CLIP__ + #ifndef FlagShip + #define __CLIPPER__ + #endif + #endif + #endif +#endif + +/* File create flags */ +#define FC_NORMAL 0 /* No file attributes are set */ +#define FC_READONLY 1 +#define FC_HIDDEN 2 +#define FC_SYSTEM 4 + +// New-style comment +#command SET DELETED => Set( _SET_DELETED, <(x)> ) +#command SET DELETED () => Set( _SET_DELETED, ) +#command @ , SAY [PICTURE ] [COLOR ] => ; + DevPos( , ) ; DevOutPict( , [, ] ) + +#command ENDIF <*x*> => endif + +#ifdef __CLIPPER__ + #xtranslate hb_MemoWrit( [] ) => MemoWrit( ) + #xtranslate hb_dbExists( ) => File( ) + #xtranslate hb_dbPack() => __dbPack() + #xtranslate hb_default( @, ) => iif( StrTran( ValType( ), "M", "C" ) == StrTran( ValType( ), "M", "C" ),, := , ) +#endif diff --git a/samples/xBase/sample.prg b/samples/xBase/sample.prg new file mode 100644 index 00000000..33d7a1e6 --- /dev/null +++ b/samples/xBase/sample.prg @@ -0,0 +1,167 @@ +#require "hbtest" + +#pragma linenumber=on + +#include "hbclass.ch" + +#stdout "stdout" +#warning "warning" + +#define MYCONST 100 +#undef MYCONST + +#ifdef __HARBOUR__ +#else +#endif + +#if defined( __HARBOUR__ ) .OR. .T. +#elif defined( __HARBOUR__ ) +#endif + +THREAD STATIC t_var := "thread" + +REQUEST AllTrim +ANNOUNCE my_module + +PROCEDURE Main() + + MEMVAR p_var, m_var + FIELD fld + + STATIC s_test := "static" + LOCAL o := TTest():New( "one", "two" ), tmp + LOCAL oError + LOCAL bBlock := {| tmp | QOut( tmp ) } + LOCAL hHash := { "name" => "value", "name2" => "value2", 2 => 1 } + PUBLIC p_var := "public" + PRIVATE m_var := "private" + PARAMETERS p1 + + Set( _SET_DATEFORMAT, "yyyy-mm-dd" ) + + CLS + @ 10, 10 SAY "Hello world!" + + ? hb_ValToExp( o ) + ? m->p1 + ? hHash[ "name" ], hHash[ 2 ] + + FOR tmp := 1 TO 10 STEP 2 + ? tmp + NEXT + + FOR EACH tmp IN { "a", "b" } DESCEND + ? tmp + NEXT + + ? 10.01 + 2 - 3 / 4 * 5 ^ 6 ** 1 + ? 2 < 1, 2 > 1, 2 >= 1, 2 <= 1, 2 == 1, 2 = 1, 2 != 1, 2 <> 1, 2 # 1 + ? -( 1 + 2 ), "a" $ "ab", 10 % 2 + + tmp := 0 + DO WHILE tmp < 2 + ? tmp++ + ENDDO + + tmp := 0 + WHILE tmp < 2 + ? ++tmp + IF tmp >= 0xFF + LOOP + ENDIF + EXIT + ENDDO + + --tmp + tmp-- + + IF tmp < -10.0 + ? NIL + ELSEIF .F. + ? 0d19800101 + ELSE + ? "string" + ENDIF + + DO CASE + CASE tmp == 1 + ? "A" + OTHERWISE + ? "B" + ENDCASE + + SWITCH tmp + CASE 1 + ? "A" + EXIT + OTHERWISE + ? "B" + ENDSWITCH + + BEGIN SEQUENCE WITH __BreakBlock() + BREAK + RECOVER USING oError + END /* SEQUENCE */ + + local_func( @hHash ) + + RETURN + +INIT PROCEDURE init_proc() + RETURN + +EXIT PROCEDURE exit_proc() + RETURN + +PROCEDURE returning_nothing() + RETURN + +FUNCTION pub_func() + RETURN .T. + +STATIC FUNCTION local_func() + RETURN .F. + +CREATE CLASS TTest INHERIT TParent + VAR One, Two + METHOD New( One ) + METHOD Test() INLINE QOut( "Hello" ) + METHOD MethProc() +ENDCLASS + +METHOD PROCEDURE MethProc() + RETURN + +METHOD New( One ) CLASS TTest + + ::super:New() + ::One := One + + RETURN Self + +CREATE CLASS TParent + VAR One + METHOD New() +ENDCLASS + +METHOD New() CLASS TParent + ? "TParent:New()" + RETURN Self + +// This is a comment +/* This is a comment */ +/* This is +a comment */ +* This is a comment +&& This is a comment +NOTE This is a comment +note This is a comment +NOTE + +FUNCTION pub_func2() + ? "hello world!" + ? 'hello world!' + ? "hello\world!" + ? "\" + ? "hello world!" + RETURN .T. diff --git a/script/convert-grammars b/script/convert-grammars index 7c45a7c8..ec3287db 100755 --- a/script/convert-grammars +++ b/script/convert-grammars @@ -188,14 +188,16 @@ def load_grammars(tmp_dir, source, all_scopes) scope = grammar['scopeName'] if all_scopes.key?(scope) - $stderr.puts "WARN: Duplicated scope #{scope}\n" + - " Current package: #{p.url}\n" + - " Previous package: #{all_scopes[scope]}" + unless all_scopes[scope] == p.url + $stderr.puts "WARN: Duplicated scope #{scope}\n" + + " Current package: #{p.url}\n" + + " Previous package: #{all_scopes[scope]}" + end next end all_scopes[scope] = p.url grammar - end + end.compact end def install_grammars(grammars, path) diff --git a/script/travis/before_install b/script/travis/before_install index 442f6718..516ec956 100755 --- a/script/travis/before_install +++ b/script/travis/before_install @@ -5,6 +5,8 @@ set -ex # Fetch all commits/refs needed to run our tests. git fetch origin master:master v2.0.0:v2.0.0 test/attributes:test/attributes test/master:test/master +sudo apt-get update + script/vendor-deb libicu48 libicu-dev if ruby -e 'exit RUBY_VERSION >= "2.0" && RUBY_VERSION < "2.1"'; then # Workaround for https://bugs.ruby-lang.org/issues/8074. We can't use this @@ -15,6 +17,9 @@ else bundle config build.charlock_holmes --with-icu-dir=$(pwd)/vendor/debs fi +# Replace SSH links to submodules by HTTPS links. +sed -i 's/git@github.com:/https:\/\/github.com\//' .gitmodules + git submodule init git submodule sync --quiet script/fast-submodule-update diff --git a/test/fixtures/Data/Modelines/fundamentalEmacs.c b/test/fixtures/Data/Modelines/fundamentalEmacs.c new file mode 100644 index 00000000..b384bc79 --- /dev/null +++ b/test/fixtures/Data/Modelines/fundamentalEmacs.c @@ -0,0 +1,6 @@ +// -*- fundamental -*- + +int main(int argc, char * argc[]) +{ + this should not be syntax highlighted, even though it looks like c. +} diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs1 b/test/fixtures/Data/Modelines/seeplusplusEmacs1 new file mode 100644 index 00000000..6c1b6e80 --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs1 @@ -0,0 +1,2 @@ +// -*-c++-*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs2 b/test/fixtures/Data/Modelines/seeplusplusEmacs2 new file mode 100644 index 00000000..3756149c --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs2 @@ -0,0 +1,2 @@ +// -*- c++ -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs3 b/test/fixtures/Data/Modelines/seeplusplusEmacs3 new file mode 100644 index 00000000..7a871e6a --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs3 @@ -0,0 +1,2 @@ +// -*- mode:C++ -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs4 b/test/fixtures/Data/Modelines/seeplusplusEmacs4 new file mode 100644 index 00000000..f020eb5a --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs4 @@ -0,0 +1,2 @@ +// -*- font:bar;mode:c++ -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs5 b/test/fixtures/Data/Modelines/seeplusplusEmacs5 new file mode 100644 index 00000000..49e9a7d6 --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs5 @@ -0,0 +1,2 @@ +// -*-foo:bar;mode:c++;bar:foo-*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs6 b/test/fixtures/Data/Modelines/seeplusplusEmacs6 new file mode 100644 index 00000000..305f7f77 --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs6 @@ -0,0 +1,2 @@ +// -*- foo : bar ; mode : c++ ; bar : foo -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs7 b/test/fixtures/Data/Modelines/seeplusplusEmacs7 new file mode 100644 index 00000000..236c3b8e --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs7 @@ -0,0 +1,2 @@ +// -*- mode : c++ ; bar : foo -*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs8 b/test/fixtures/Data/Modelines/seeplusplusEmacs8 new file mode 100644 index 00000000..f502058a --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs8 @@ -0,0 +1,2 @@ +// -*- font:x;foo : bar ; mode : C++ ; bar : foo ; foooooo:baaaaar;fo:ba-*- +template class { X i; }; diff --git a/test/fixtures/Data/Modelines/seeplusplusEmacs9 b/test/fixtures/Data/Modelines/seeplusplusEmacs9 new file mode 100644 index 00000000..953ca220 --- /dev/null +++ b/test/fixtures/Data/Modelines/seeplusplusEmacs9 @@ -0,0 +1,2 @@ +// -*-foo:bar;mode:c++;bar:foo;tyrell:corp-*- +template class { X i; }; diff --git a/test/fixtures/Data/sourcemap.v1.map b/test/fixtures/Data/sourcemap.v1.map new file mode 100644 index 00000000..35c9b29f --- /dev/null +++ b/test/fixtures/Data/sourcemap.v1.map @@ -0,0 +1,12 @@ +/** Begin line maps. **/{ “file”:”out.js”, "count": 2 } +[0,0,0,0,0,0,1,1,1,1,2] +[2,2,2,2,2,2,3,4,4,4,4,4] +/** Begin file information. **/ +[“a.js”, “b.js”] +[“b.js”, “c.js”, “d.js”] +/** Begin mapping definitions. **/ +["a.js", 1, 34] +["a.js", 5, 2] +["b.js", 1, 3, "event"] +["c.js", 1, 4] +["d.js", 3, 78, "foo"] diff --git a/test/fixtures/Data/sourcemap.v3.map b/test/fixtures/Data/sourcemap.v3.map new file mode 100644 index 00000000..7acd1b9d --- /dev/null +++ b/test/fixtures/Data/sourcemap.v3.map @@ -0,0 +1 @@ +{"version":3,"file":"out.js","sourceRoot":"","sources":["foo.js","bar.js"],"sourcesContent":[null,null],"names":["src","maps","are","fun"],"mappings":"A,AAAB;;ABCDE;"} diff --git a/test/fixtures/Generated/ABM8G.mod b/test/fixtures/Generated/ABM8G.mod new file mode 100644 index 00000000..15887130 --- /dev/null +++ b/test/fixtures/Generated/ABM8G.mod @@ -0,0 +1,50 @@ +PCBNEW-LibModule-V1 Wed 10 Aug 2011 05:57:27 PM COT +# encoding utf-8 +$INDEX +ABM8G +$EndINDEX +$MODULE ABM8G +Po 0 0 0 15 4E430CBD 4E430CC5 ~~ +Li ABM8G +Sc 4E430CC5 +AR +Op 0 0 0 +T0 591 -1378 354 354 0 39 N V 21 N "ABM8G" +T1 0 787 354 354 0 39 N V 21 N "VAL**" +DS -591 394 1299 394 79 21 +DS 1299 394 1299 -1063 79 21 +DS 1299 -1063 -472 -1063 79 21 +DS -472 -1063 -472 472 79 21 +DS -472 472 -472 551 79 21 +DS -472 551 -591 551 79 21 +DS -591 551 -591 433 79 21 +$PAD +Sh "1" R 551 472 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 0 0 +$EndPAD +$PAD +Sh "2" R 551 472 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 866 0 +$EndPAD +$PAD +Sh "3" R 551 472 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 866 -669 +$EndPAD +$PAD +Sh "4" R 551 472 0 0 0 +Dr 0 0 0 +At SMD N 00888000 +Ne 0 "" +Po 0 -669 +$EndPAD +$EndMODULE ABM8G +$EndLIBRARY diff --git a/test/fixtures/Generated/ms2.mod b/test/fixtures/Generated/ms2.mod new file mode 100644 index 00000000..1866c8d6 --- /dev/null +++ b/test/fixtures/Generated/ms2.mod @@ -0,0 +1,19 @@ +GFORTRAN module version '0' created from ms2.f90 on Thu Sep 5 10:09:19 2013 +MD5:8a80cd5db1bc612a28603959302dbf37 -- If you edit this, you'll get what you deserve. + +(() () () () () () () () () () () () () () () () () () () () () () () () +() () ()) + +() + +() + +() + +() + +(2 'ms2' 'ms2' 'ms2' 1 ((MODULE UNKNOWN-INTENT UNKNOWN-PROC UNKNOWN +UNKNOWN) (UNKNOWN 0 0 0 UNKNOWN ()) 0 0 () () 0 () () () 0 0) +) + +('ms2' 0 2) diff --git a/test/fixtures/SVG/alg_schema.link.svg b/test/fixtures/SVG/alg_schema.link.svg new file mode 120000 index 00000000..2f2cb2e4 --- /dev/null +++ b/test/fixtures/SVG/alg_schema.link.svg @@ -0,0 +1 @@ +alg_schema.svg \ No newline at end of file diff --git a/test/fixtures/SVG/alg_schema.svg b/test/fixtures/SVG/alg_schema.svg new file mode 100644 index 00000000..cd709914 --- /dev/null +++ b/test/fixtures/SVG/alg_schema.svg @@ -0,0 +1,269 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + Sequence KEY256 bits + + + + + Salt96 bits Counter32 bits + + + + + AES Cipher + + + + + + + Secure random data128 bits + + + Division by alphabet lengthrepeated passcode-length times. + + + + Passcode2-16 characters + + + + diff --git a/test/fixtures/Shell/_bashrc b/test/fixtures/Shell/_bashrc new file mode 100644 index 00000000..eaf623bc --- /dev/null +++ b/test/fixtures/Shell/_bashrc @@ -0,0 +1,175 @@ +# vim: set ft=sh: + +# encoding +export LC_CTYPE='en_US.UTF-8' +# terminal color +export TERM=xterm-256color +# prompt setup +current_branch() { + git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/' +} +parse_branch() { + git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' +} +PS1='${debian_chroot:+($debian_chroot)}\[\e[00;32m\]\u@\h:\[\e[01;34m\]\W\[\033[01;35m\]$(parse_branch)\[\e[01;35m\]\[\e[0m\] $ ' + +google () { + search="" + echo "Googling: $@" + for term in $@; do + search="$search%20$term" + done + xdg-open "http://www.google.com/search?q=$search" +} + +# alias +alias emacs='emacs -nw' +alias eshell='emacs --execute "(term \"`which zsh`\")"' + - () { + cd - +} +alias ..='cd ..' +alias ...='cd ../..' +alias _=sudo +alias afind='ack-grep -il' +alias c=clear +alias cd..='cd ..' +alias cd...='cd ../..' +alias cd....='cd ../../..' +alias cd.....='cd ../../../..' +alias d='dirs -v | head -10' +alias emacs='emacs -nw' +alias g=git +alias ga='git add' +alias gap='git add --patch' +alias gb='git branch' +alias gba='git branch -a' +alias gbr='git branch --remote' +alias gc='git commit -v' +alias 'gc!'='git commit -v --amend' +alias gca='git commit -v -a' +alias 'gca!'='git commit -v -a --amend' +alias gcl='git config --list' +alias gclean='git reset --hard && git clean -dfx' +alias gcln='git clone' +alias gcm='git checkout master' +alias gcmsg='git commit -m' +alias gco='git checkout' +alias gcount='git shortlog -sn' +alias gcp='git cherry-pick' +alias gcs='git commit -S' +alias gd='git diff' +alias gdc='git diff --cached' +alias gdt='git difftool' +alias gg='git gui citool' +alias gga='git gui citool --amend' +alias ggpnp='git pull origin $(current_branch) && git push origin $(current_branch)' +alias ggpull='git pull origin $(current_branch)' +alias ggpur='git pull --rebase origin $(current_branch)' +alias ggpush='git push origin $(current_branch)' +alias gmpush='git push wkentaro $(current_branch)' +alias gignore='git update-index --assume-unchanged' +alias gignored='git ls-files -v | grep "^[[:lower:]]"' +alias git=hub +alias git-svn-dcommit-push='git svn dcommit && git push github master:svntrunk' +alias gk='gitk --all --branches' +alias gl='git pull' +alias glg='git log --stat --max-count=10' +alias glgg='git log --graph --max-count=10' +alias glgga='git log --graph --decorate --all' +alias glo='git log --oneline --decorate --color' +alias globurl='noglob urlglobber ' +alias glog='git log --oneline --decorate --color --graph' +alias glp=_git_log_prettily +alias gm='git merge' +alias gmt='git mergetool --no-prompt' +alias gp='git push' +alias gpoat='git push origin --all && git push origin --tags' +alias gr='git remote' +alias grba='git rebase --abort' +alias grbc='git rebase --continue' +alias grbi='git rebase -i' +alias grh='git reset HEAD' +alias grhh='git reset HEAD --hard' +alias grmv='git remote rename' +alias grrm='git remote remove' +alias grset='git remote set-url' +alias grt='cd $(git rev-parse --show-toplevel || echo ".")' +alias grup='git remote update' +alias grv='git remote -v' +alias gsd='git svn dcommit' +alias gsps='git show --pretty=short --show-signature' +alias gsr='git svn rebase' +alias gss='git status -s' +alias gst='git status' +alias gsta='git stash' +alias gstd='git stash drop' +alias gstp='git stash pop' +alias gsts='git stash show --text' +alias gts='git tag -s' +alias gunignore='git update-index --no-assume-unchanged' +alias gunwip='git log -n 1 | grep -q -c "\-\-wip\-\-" && git reset HEAD~1' +alias gup='git pull --rebase' +alias gvt='git verify-tag' +alias gwc='git whatchanged -p --abbrev-commit --pretty=medium' +alias gwip='git add -A; git ls-files --deleted -z | xargs -r0 git rm; git commit -m "--wip--"' +alias h=history +alias history='fc -l 1' +alias ipy=ipython +alias sl='ls' +alias l='ls -lah' +alias la='ls -lAh' +alias ll='ls -lh' +alias lsa='ls -lah' +alias md='mkdir -p' +alias py=python +alias please=sudo +alias po=popd +alias pu=pushd +alias pyfind='find . -name "*.py"' +alias pygrep='grep --include="*.py"' +alias rd=rmdir +alias v=vim +alias vi=vim +alias which-command=whence +# hub +if which hub >/dev/null 2>&1; then + eval "$(hub alias -s)" +fi +# open +if which open >/dev/null 2>&1; then + alias o='open' + alias o.='open .' +elif which gnome-open >/dev/null 2>&1; then + alias open='gnome-open' + alias o='gnome-open' + alias o.='gnome-open .' +fi +# ls +if which dircolors >/dev/null 2>&1; then + eval `dircolors $HOME/.colorrc` + alias ls='ls --color=auto' +fi + [[ -s $HOME/.tmuxinator/scripts/tmuxinator ]] && source $HOME/.tmuxinator/scripts/tmuxinator + +cd () { + if [[ "x$*" = "x..." ]] + then + cd ../.. + elif [[ "x$*" = "x...." ]] + then + cd ../../.. + elif [[ "x$*" = "x....." ]] + then + cd ../../../.. + elif [[ "x$*" = "x......" ]] + then + cd ../../../../.. + elif [ -d ~/.autoenv ] + then + source ~/.autoenv/activate.sh + autoenv_cd "$@" + else + builtin cd "$@" + fi +} diff --git a/test/helper.rb b/test/helper.rb index a6a03672..ab3cc8fa 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -2,6 +2,7 @@ require "bundler/setup" require "minitest/autorun" require "mocha/setup" require "linguist" +require 'color-proximity' def fixtures_path File.expand_path("../fixtures", __FILE__) diff --git a/test/test_blob.rb b/test/test_blob.rb index d59e6794..976c83ff 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -216,6 +216,16 @@ class TestBlob < Minitest::Test assert sample_blob("C++/protocol-buffer.pb.cc").generated? assert sample_blob("Java/ProtocolBuffer.java").generated? assert sample_blob("Python/protocol_buffer_pb2.py").generated? + assert sample_blob("Go/api.pb.go").generated? + assert sample_blob("Go/embedded.go").generated? + + # Apache Thrift generated code + assert sample_blob("Python/gen-py-linguist-thrift.py").generated? + assert sample_blob("Go/gen-go-linguist-thrift.go").generated? + assert sample_blob("Java/gen-java-linguist-thrift.java").generated? + assert sample_blob("JavaScript/gen-js-linguist-thrift.js").generated? + assert sample_blob("Ruby/gen-rb-linguist-thrift.rb").generated? + assert sample_blob("Objective-C/gen-cocoa-linguist-thrift.m").generated? # Generated JNI assert sample_blob("C/jni_layer.h").generated? @@ -233,12 +243,18 @@ class TestBlob < Minitest::Test assert sample_blob("Zephir/filenames/exception.zep.php").generated? assert !sample_blob("Zephir/Router.zep").generated? - - assert Linguist::Generated.generated?("node_modules/grunt/lib/grunt.js", nil) + assert sample_blob("node_modules/grunt/lib/grunt.js").generated? # Godep saved dependencies assert sample_blob("Godeps/Godeps.json").generated? assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").generated? + + # Cython-generated C/C++ + assert sample_blob("C/sgd_fast.c").generated? + assert sample_blob("C++/wrapper_inner.cpp").generated? + + # Unity3D-generated metadata + assert sample_blob("Unity3D Asset/Tiles.meta").generated? end def test_vendored @@ -263,6 +279,9 @@ class TestBlob < Minitest::Test # Rails vendor/ assert sample_blob("vendor/plugins/will_paginate/lib/will_paginate.rb").vendored? + # Vendor/ + assert sample_blob("Vendor/my_great_file.h").vendored? + # 'thirdparty' directory assert sample_blob("thirdparty/lib/main.c").vendored? @@ -274,6 +293,8 @@ class TestBlob < Minitest::Test assert sample_blob("deps/http_parser/http_parser.c").vendored? assert sample_blob("deps/v8/src/v8.h").vendored? + assert sample_blob("tools/something/else.c").vendored? + # Chart.js assert sample_blob("some/vendored/path/Chart.js").vendored? assert !sample_blob("some/vendored/path/chart.js").vendored? @@ -284,6 +305,9 @@ class TestBlob < Minitest::Test # Debian packaging assert sample_blob("debian/cron.d").vendored? + # Erlang + assert sample_blob("rebar").vendored? + # Minified JavaScript and CSS assert sample_blob("foo.min.js").vendored? assert sample_blob("foo.min.css").vendored? @@ -292,6 +316,9 @@ class TestBlob < Minitest::Test assert !sample_blob("foomin.css").vendored? assert !sample_blob("foo.min.txt").vendored? + #.osx + assert sample_blob(".osx").vendored? + # Prototype assert !sample_blob("public/javascripts/application.js").vendored? assert sample_blob("public/javascripts/prototype.js").vendored? @@ -299,6 +326,9 @@ class TestBlob < Minitest::Test assert sample_blob("public/javascripts/controls.js").vendored? assert sample_blob("public/javascripts/dragdrop.js").vendored? + # Samples + assert sample_blob("Samples/Ruby/foo.rb").vendored? + # jQuery assert sample_blob("jquery.js").vendored? assert sample_blob("public/javascripts/jquery.js").vendored? @@ -396,6 +426,9 @@ class TestBlob < Minitest::Test # Normalize assert sample_blob("some/asset/path/normalize.css").vendored? + # Carthage + assert sample_blob('Carthage/blah').vendored? + # Cocoapods assert sample_blob('Pods/blah').vendored? @@ -406,6 +439,7 @@ class TestBlob < Minitest::Test # Test fixtures assert sample_blob("test/fixtures/random.rkt").vendored? assert sample_blob("Test/fixtures/random.rkt").vendored? + assert sample_blob("tests/fixtures/random.rkt").vendored? # Cordova/PhoneGap assert sample_blob("cordova.js").vendored? @@ -439,6 +473,22 @@ class TestBlob < Minitest::Test assert sample_blob("activator.bat").vendored? assert sample_blob("subproject/activator").vendored? assert sample_blob("subproject/activator.bat").vendored? + + assert_predicate fixture_blob(".google_apis/bar.jar"), :vendored? + assert_predicate fixture_blob("foo/.google_apis/bar.jar"), :vendored? + + # Sphinx docs + assert sample_blob("docs/_build/asset.doc").vendored? + assert sample_blob("docs/theme/file.css").vendored? + + # Vagrant + assert sample_blob("puphpet/file.pp").vendored? + + # Fabric.io + assert sample_blob("Fabric.framework/Fabric.h").vendored? + + # Crashlytics + assert sample_blob("Crashlytics.framework/Crashlytics.h").vendored? end def test_documentation @@ -448,13 +498,36 @@ class TestBlob < Minitest::Test refute_predicate fixture_blob("project/docs/foo.html"), :documentation? assert_predicate fixture_blob("Documentation/foo.md"), :documentation? - refute_predicate fixture_blob("project/Documentation/foo.md"), :documentation? + assert_predicate fixture_blob("documentation/foo.md"), :documentation? + assert_predicate fixture_blob("project/Documentation/foo.md"), :documentation? + assert_predicate fixture_blob("project/documentation/foo.md"), :documentation? + + assert_predicate fixture_blob("javadoc/foo.html"), :documentation? + assert_predicate fixture_blob("project/javadoc/foo.html"), :documentation? + + assert_predicate fixture_blob("man/foo.html"), :documentation? + refute_predicate fixture_blob("project/man/foo.html"), :documentation? assert_predicate fixture_blob("README"), :documentation? assert_predicate fixture_blob("README.md"), :documentation? assert_predicate fixture_blob("README.txt"), :documentation? assert_predicate fixture_blob("foo/README"), :documentation? + assert_predicate fixture_blob("CHANGE"), :documentation? + assert_predicate fixture_blob("CHANGE.md"), :documentation? + assert_predicate fixture_blob("CHANGE.txt"), :documentation? + assert_predicate fixture_blob("foo/CHANGE"), :documentation? + + assert_predicate fixture_blob("CHANGELOG"), :documentation? + assert_predicate fixture_blob("CHANGELOG.md"), :documentation? + assert_predicate fixture_blob("CHANGELOG.txt"), :documentation? + assert_predicate fixture_blob("foo/CHANGELOG"), :documentation? + + assert_predicate fixture_blob("CHANGES"), :documentation? + assert_predicate fixture_blob("CHANGES.md"), :documentation? + assert_predicate fixture_blob("CHANGES.txt"), :documentation? + assert_predicate fixture_blob("foo/CHANGES"), :documentation? + assert_predicate fixture_blob("CONTRIBUTING"), :documentation? assert_predicate fixture_blob("CONTRIBUTING.md"), :documentation? assert_predicate fixture_blob("CONTRIBUTING.txt"), :documentation? @@ -502,6 +575,8 @@ class TestBlob < Minitest::Test blob = fixture_blob(filepath) if language == 'Data' assert blob.language.nil?, "A language was found for #{filepath}" + elsif language == 'Generated' + assert blob.generated?, "#{filepath} is not a generated file" else assert blob.language, "No language for #{filepath}" assert_equal language, blob.language.name, blob.name diff --git a/test/test_color_proximity.rb b/test/test_color_proximity.rb new file mode 100644 index 00000000..2356e74a --- /dev/null +++ b/test/test_color_proximity.rb @@ -0,0 +1,23 @@ +require_relative "./helper" + +class TestColorProximity < Minitest::Test + include Linguist + + def cut_hash(color) + color[1..-1] if color.start_with?('#') + end + + def test_color_proximity + langs_with_colors = Language.all.reject { |language| language.color.nil? } + cp = ColorProximity.new(0.05, langs_with_colors.map { |lang| cut_hash(lang.color) }) + failing_threshold = langs_with_colors.map do |lang| + state = cp.past_threshold?(cut_hash(lang.color)) + if !state.first && lang.color != "##{state.last.first}" + "- #{lang} (#{lang.color}) is too close to #{state.last}" + end + end.compact + message = "The following #{failing_threshold.length} languages have failing color thresholds. Please modify the hex color.\n#{failing_threshold.join("\n")}" + + assert failing_threshold.empty?, message + end +end diff --git a/test/test_generated.rb b/test/test_generated.rb index b714e19e..164e1fc2 100644 --- a/test/test_generated.rb +++ b/test/test_generated.rb @@ -5,47 +5,69 @@ class TestGenerated < Minitest::Test class DataLoadedError < StandardError; end - def generated_without_loading_data(name) - blob = File.join(samples_path, name) + def generated_without_loading_data(blob) begin - assert Generated.generated?(blob, lambda { raise DataLoadedError.new }), "#{name} was not recognized as a generated file" + assert Generated.generated?(blob, lambda { raise DataLoadedError.new }), "#{blob} was not recognized as a generated file" rescue DataLoadedError - assert false, "Data was loaded when calling generated? on #{name}" + assert false, "Data was loaded when calling generated? on #{blob}" end end - def generated_loading_data(name) - blob = File.join(samples_path, name) - assert_raises(DataLoadedError, "Data wasn't loaded when calling generated? on #{name}") do + def generated_loading_data(blob) + assert_raises(DataLoadedError, "Data wasn't loaded when calling generated? on #{blob}") do Generated.generated?(blob, lambda { raise DataLoadedError.new }) end end - def test_check_generated_without_loading_data + def generated_fixture_without_loading_data(name) + generated_without_loading_data(File.join(fixtures_path, name)) + end + + def generated_fixture_loading_data(name) + generated_loading_data(File.join(fixtures_path, name)) + end + + def generated_sample_without_loading_data(name) + generated_without_loading_data(File.join(samples_path, name)) + end + + def generated_sample_loading_data(name) + generated_loading_data(File.join(samples_path, name)) + end + + def test_check_generated # Xcode project files - generated_without_loading_data("Binary/MainMenu.nib") - generated_without_loading_data("Dummy/foo.xcworkspacedata") - generated_without_loading_data("Dummy/foo.xcuserstate") + generated_sample_without_loading_data("Binary/MainMenu.nib") + generated_sample_without_loading_data("Dummy/foo.xcworkspacedata") + generated_sample_without_loading_data("Dummy/foo.xcuserstate") # .NET designer file - generated_without_loading_data("Dummu/foo.designer.cs") + generated_sample_without_loading_data("Dummu/foo.designer.cs") # Composer generated composer.lock file - generated_without_loading_data("JSON/composer.lock") + generated_sample_without_loading_data("JSON/composer.lock") # Node modules - generated_without_loading_data("Dummy/node_modules/foo.js") + generated_sample_without_loading_data("Dummy/node_modules/foo.js") # Godep saved dependencies - generated_without_loading_data("Godeps/Godeps.json") - generated_without_loading_data("Godeps/_workspace/src/github.com/kr/s3/sign.go") + generated_sample_without_loading_data("Godeps/Godeps.json") + generated_sample_without_loading_data("Godeps/_workspace/src/github.com/kr/s3/sign.go") # Generated by Zephir - generated_without_loading_data("C/exception.zep.c") - generated_without_loading_data("C/exception.zep.h") - generated_without_loading_data("PHP/exception.zep.php") + generated_sample_without_loading_data("C/exception.zep.c") + generated_sample_without_loading_data("C/exception.zep.h") + generated_sample_without_loading_data("PHP/exception.zep.php") # Minified files - generated_loading_data("JavaScript/jquery-1.6.1.min.js") + generated_sample_loading_data("JavaScript/jquery-1.6.1.min.js") + + # Source Map + generated_fixture_without_loading_data("Data/bootstrap.css.map") + generated_fixture_loading_data("Data/sourcemap.v3.map") + generated_fixture_loading_data("Data/sourcemap.v1.map") + + # Specflow + generated_fixture_without_loading_data("Features/BindingCulture.feature.cs") end end diff --git a/test/test_grammars.rb b/test/test_grammars.rb index 18cbce28..88624ae8 100644 --- a/test/test_grammars.rb +++ b/test/test_grammars.rb @@ -13,8 +13,7 @@ class TestGrammars < Minitest::Test # These grammars have no license but have been grandfathered in. New grammars # must have a license that allows redistribution. "vendor/grammars/Sublime-Lasso", - "vendor/grammars/Sublime-REBOL", - "vendor/grammars/x86-assembly-textmate-bundle", + "vendor/grammars/x86-assembly-textmate-bundle" ].freeze def setup diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index cadb35f6..8914e4c2 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -22,6 +22,17 @@ class TestHeuristcs < Minitest::Test assert_equal [], results end + def assert_heuristics(hash) + candidates = hash.keys.map { |l| Language[l] } + + hash.each do |language, blobs| + Array(blobs).each do |blob| + result = Heuristics.call(file_blob(blob), candidates) + assert_equal [Language[language]], result, "Failed for #{blob}" + end + end + end + # Candidate languages = ["C++", "Objective-C"] def test_obj_c_by_heuristics # Only calling out '.h' filenames as these are the ones causing issues @@ -47,8 +58,9 @@ class TestHeuristcs < Minitest::Test # Candidate languages = ["Perl", "Prolog"] def test_pl_prolog_perl_by_heuristics assert_heuristics({ - "Prolog" => "Prolog/turing.pl", - "Perl" => ["Perl/perl-test.t", "Perl/use5.pl"] + "Prolog" => all_fixtures("Prolog/*.pl"), + "Perl" => all_fixtures("Perl/*.pl") + ["Perl/perl-test.t"], + "Perl6" => all_fixtures("Perl6/*.pl") }) end @@ -60,11 +72,13 @@ class TestHeuristcs < Minitest::Test }) end - # Candidate languages = ["IDL", "Prolog"] - def test_pro_prolog_idl_by_heuristics + # Candidate languages = ["IDL", "Prolog", "QMake", "INI"] + def test_pro_by_heuristics assert_heuristics({ - "Prolog" => "Prolog/logic-problem.pro", - "IDL" => "IDL/mg_acosh.pro" + "Prolog" => all_fixtures("Prolog", "*.pro"), + "IDL" => all_fixtures("IDL", "*.pro"), + "INI" => all_fixtures("INI", "*.pro"), + "QMake" => all_fixtures("QMake", "*.pro") }) end @@ -73,7 +87,7 @@ class TestHeuristcs < Minitest::Test assert_heuristics({ "AsciiDoc" => "AsciiDoc/list.asc", "AGS Script" => "AGS Script/GlobalScript.asc", - "Public Key" => "Public Key/sunCert.asc" + "Public Key" => all_fixtures("Public Key", "*.asc") }) end @@ -119,7 +133,7 @@ class TestHeuristcs < Minitest::Test assert_heuristics({ "Frege" => all_fixtures("Frege"), "Forth" => all_fixtures("Forth"), - "Text" => all_fixtures("Text") + "Text" => all_fixtures("Text", "*.fr") }) end @@ -144,17 +158,6 @@ class TestHeuristcs < Minitest::Test }) end - def assert_heuristics(hash) - candidates = hash.keys.map { |l| Language[l] } - - hash.each do |language, blobs| - Array(blobs).each do |blob| - result = Heuristics.call(file_blob(blob), candidates) - assert_equal [Language[language]], result, "Failed for #{blob}" - end - end - end - def test_ls_by_heuristics assert_heuristics({ "LiveScript" => "LiveScript/hello.ls", @@ -168,4 +171,10 @@ class TestHeuristcs < Minitest::Test "XML" => all_fixtures("XML", "*.ts") }) end + + def test_ch_by_heuristics + assert_heuristics({ + "xBase" => all_fixtures("xBase") + }) + end end diff --git a/test/test_instrumentation.rb b/test/test_instrumentation.rb new file mode 100644 index 00000000..ab0615e5 --- /dev/null +++ b/test/test_instrumentation.rb @@ -0,0 +1,50 @@ +require_relative "./helper" + +class TestInstrumentation < Minitest::Test + include Linguist + + class LocalInstrumenter + Event = Struct.new(:name, :args) + + attr_reader :events + + def initialize + @events = [] + end + + def instrument(name, *args) + @events << Event.new(name, args) + yield if block_given? + end + end + + def setup + Linguist.instrumenter = LocalInstrumenter.new + end + + def teardown + Linguist.instrumenter = nil + end + + def test_detection_instrumentation_with_binary_blob + binary_blob = fixture_blob("Binary/octocat.ai") + Language.detect(binary_blob) + + # Shouldn't instrument this (as it's binary) + assert_equal 0, Linguist.instrumenter.events.size + end + + def test_modeline_instrumentation + blob = fixture_blob("Data/Modelines/ruby") + Language.detect(blob) + + detect_event = Linguist.instrumenter.events.last + detect_event_payload = detect_event[:args].first + + assert_equal 3, Linguist.instrumenter.events.size + assert_equal "linguist.detected", detect_event.name + assert_equal Language['Ruby'], detect_event_payload[:language] + assert_equal blob, detect_event_payload[:blob] + assert_equal Linguist::Strategy::Modeline, detect_event_payload[:strategy] + end +end diff --git a/test/test_language.rb b/test/test_language.rb index 1a39744e..3c204c0a 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -79,7 +79,6 @@ class TestLanguage < Minitest::Test assert_equal Language['Java'], Language['Java Server Pages'].group assert_equal Language['Python'], Language['Cython'].group assert_equal Language['Python'], Language['NumPy'].group - assert_equal Language['Shell'], Language['Batchfile'].group assert_equal Language['Shell'], Language['Gentoo Ebuild'].group assert_equal Language['Shell'], Language['Gentoo Eclass'].group assert_equal Language['Shell'], Language['Tcsh'].group @@ -155,10 +154,6 @@ class TestLanguage < Minitest::Test assert_equal :prose, Language['Org'].type end - def test_other - assert_nil Language['Brainfuck'].type - end - def test_searchable assert Language['Ruby'].searchable? assert !Language['Gettext Catalog'].searchable? @@ -192,7 +187,7 @@ class TestLanguage < Minitest::Test assert_equal [], Language.find_by_extension('foo.rb') assert_equal [Language['Ruby']], Language.find_by_extension('rb') assert_equal [Language['Ruby']], Language.find_by_extension('.rb') - assert_equal [Language['M'], Language['Mathematica'], Language['Matlab'], Language['Mercury'], Language['Objective-C']], Language.find_by_extension('.m') + assert_equal [Language['Limbo'], Language['M'], Language['MUF'], Language['Mathematica'], Language['Matlab'], Language['Mercury'], Language['Objective-C']], Language.find_by_extension('.m') end def test_find_all_by_extension @@ -290,9 +285,9 @@ class TestLanguage < Minitest::Test def test_color assert_equal '#701516', Language['Ruby'].color - assert_equal '#3581ba', Language['Python'].color + assert_equal '#3572A5', Language['Python'].color assert_equal '#f1e05a', Language['JavaScript'].color - assert_equal '#31859c', Language['TypeScript'].color + assert_equal '#2b7489', Language['TypeScript'].color assert_equal '#3d9970', Language['LSL'].color end @@ -358,6 +353,15 @@ class TestLanguage < Minitest::Test assert missing.empty?, message end + def test_all_languages_have_type + missing = Language.all.select { |language| language.type.nil? } + message = "The following languages do not have a type listed in grammars.yml. Please add types for all new languages.\n" + + width = missing.map { |language| language.name.length }.max + message << missing.map { |language| sprintf("%-#{width}s", language.name) }.sort.join("\n") + assert missing.empty?, message + end + def test_all_languages_have_a_valid_ace_mode ace_fixture_path = File.join('test', 'fixtures', 'ace_modes.json') skip("No ace_modes.json file") unless File.exist?(ace_fixture_path) diff --git a/test/test_modelines.rb b/test/test_modelines.rb index 6c68cc87..a2be5d3b 100644 --- a/test/test_modelines.rb +++ b/test/test_modelines.rb @@ -10,6 +10,16 @@ class TestModelines < Minitest::Test def test_modeline_strategy assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby") assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplus") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs1") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs2") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs3") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs4") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs5") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs6") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs7") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs8") + assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs9") + assert_modeline Language["Text"], fixture_blob("Data/Modelines/fundamentalEmacs.c") assert_modeline Language["Prolog"], fixture_blob("Data/Modelines/not_perl.pl") assert_modeline Language["Smalltalk"], fixture_blob("Data/Modelines/example_smalltalk.md") assert_modeline Language["PHP"], fixture_blob("Data/Modelines/iamphp.inc") @@ -18,6 +28,16 @@ class TestModelines < Minitest::Test def test_modeline_languages assert_equal Language["Ruby"], fixture_blob("Data/Modelines/ruby").language assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplus").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs1").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs2").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs3").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs4").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs5").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs6").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs7").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs8").language + assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs9").language + assert_equal Language["Text"], fixture_blob("Data/Modelines/fundamentalEmacs.c").language assert_equal Language["Prolog"], fixture_blob("Data/Modelines/not_perl.pl").language assert_equal Language["Smalltalk"], fixture_blob("Data/Modelines/example_smalltalk.md").language assert_equal Language["PHP"], fixture_blob("Data/Modelines/iamphp.inc").language diff --git a/test/test_pedantic.rb b/test/test_pedantic.rb index 0861b8d8..29b673ab 100644 --- a/test/test_pedantic.rb +++ b/test/test_pedantic.rb @@ -12,7 +12,7 @@ class TestPedantic < Minitest::Test def test_extensions_are_sorted LANGUAGES.each do |name, language| extensions = language['extensions'] - assert_sorted extensions[1..-1] if extensions && extensions.size > 1 + assert_sorted extensions[1..-1].map(&:downcase) if extensions && extensions.size > 1 end end diff --git a/test/test_samples.rb b/test/test_samples.rb index 0b0722dc..dc3524c2 100644 --- a/test/test_samples.rb +++ b/test/test_samples.rb @@ -34,6 +34,14 @@ class TestSamples < Minitest::Test assert !data["interpreters"].empty? end + def test_ext_or_shebang + Samples.each do |sample| + if sample[:extname].to_s.empty? && !sample[:filename] + assert sample[:interpreter], "#{sample[:path]} should have a file extension or a shebang, maybe it belongs in filenames/ subdir" + end + end + end + # Check that there aren't samples with extensions or interpreters that # aren't explicitly defined in languages.yml languages_yml = File.expand_path("../../lib/linguist/languages.yml", __FILE__) @@ -42,16 +50,15 @@ class TestSamples < Minitest::Test options['extensions'] ||= [] if extnames = Samples.cache['extnames'][name] extnames.each do |extname| - next if extname == '.script!' - assert options['extensions'].index { |x| x.end_with? extname }, "#{name} has a sample with extension (#{extname}) that isn't explicitly defined in languages.yml" + assert options['extensions'].index { |x| x.downcase.end_with? extname.downcase }, "#{name} has a sample with extension (#{extname.downcase}) that isn't explicitly defined in languages.yml" end end options['interpreters'] ||= [] if interpreters = Samples.cache['interpreters'][name] interpreters.each do |interpreter| - # next if extname == '.script!' - assert options['interpreters'].include?(interpreter), "#{name} has a sample with an interpreter (#{interpreter}) that isn't explicitly defined in languages.yml" + assert options['interpreters'].include?(interpreter), + "#{name} has a sample with an interpreter (#{interpreter}) that isn't explicitly defined in languages.yml" end end end @@ -67,7 +74,7 @@ class TestSamples < Minitest::Test if language_matches.length > 1 language_matches.each do |match| samples = "samples/#{match.name}/*#{extension}" - assert Dir.glob(samples).any?, "Missing samples in #{samples.inspect}. See https://github.com/github/linguist/blob/master/CONTRIBUTING.md" + assert Dir.glob(samples, File::FNM_CASEFOLD).any?, "Missing samples in #{samples.inspect}. See https://github.com/github/linguist/blob/master/CONTRIBUTING.md" end end end diff --git a/test/test_shebang.rb b/test/test_shebang.rb index a2d25117..de3344ec 100644 --- a/test/test_shebang.rb +++ b/test/test_shebang.rb @@ -38,6 +38,7 @@ class TestShebang < Minitest::Test assert_interpreter "perl", "#! perl" assert_interpreter "ruby", "#!/bin/sh\n\n\nexec ruby $0 $@" - end + assert_interpreter "sh", "#! /usr/bin/env A=003 B=149 C=150 D=xzd E=base64 F=tar G=gz H=head I=tail sh" + end end diff --git a/test/test_tokenizer.rb b/test/test_tokenizer.rb index 140e03b5..b8b486cb 100644 --- a/test/test_tokenizer.rb +++ b/test/test_tokenizer.rb @@ -35,6 +35,8 @@ class TestTokenizer < Minitest::Test assert_equal %w(foo), tokenize("foo\n# Comment") assert_equal %w(foo bar), tokenize("foo\n# Comment\nbar") assert_equal %w(foo), tokenize("foo\n// Comment") + assert_equal %w(foo), tokenize("foo\n-- Comment") + assert_equal %w(foo), tokenize("foo\n\" Comment") assert_equal %w(foo), tokenize("foo /* Comment */") assert_equal %w(foo), tokenize("foo /* \nComment\n */") assert_equal %w(foo), tokenize("foo ") @@ -86,16 +88,16 @@ class TestTokenizer < Minitest::Test end def test_shebang - assert_equal "SHEBANG#!sh", tokenize(:"Shell/sh.script!")[0] - assert_equal "SHEBANG#!bash", tokenize(:"Shell/bash.script!")[0] - assert_equal "SHEBANG#!zsh", tokenize(:"Shell/zsh.script!")[0] - assert_equal "SHEBANG#!perl", tokenize(:"Perl/perl.script!")[0] - assert_equal "SHEBANG#!python", tokenize(:"Python/python.script!")[0] - assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby.script!")[0] - assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby2.script!")[0] - assert_equal "SHEBANG#!node", tokenize(:"JavaScript/js.script!")[0] - assert_equal "SHEBANG#!php", tokenize(:"PHP/php.script!")[0] - assert_equal "SHEBANG#!escript", tokenize(:"Erlang/factorial.script!")[0] + assert_equal "SHEBANG#!sh", tokenize(:"Shell/sh")[0] + assert_equal "SHEBANG#!bash", tokenize(:"Shell/bash")[0] + assert_equal "SHEBANG#!zsh", tokenize(:"Shell/zsh")[0] + assert_equal "SHEBANG#!perl", tokenize(:"Perl/perl")[0] + assert_equal "SHEBANG#!python", tokenize(:"Python/python")[0] + assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby")[0] + assert_equal "SHEBANG#!ruby", tokenize(:"Ruby/ruby2")[0] + assert_equal "SHEBANG#!node", tokenize(:"JavaScript/js")[0] + assert_equal "SHEBANG#!php", tokenize(:"PHP/php")[0] + assert_equal "SHEBANG#!escript", tokenize(:"Erlang/factorial")[0] assert_equal "echo", tokenize(:"Shell/invalid-shebang.sh")[0] end diff --git a/vendor/grammars/AutoHotkey b/vendor/grammars/AutoHotkey index 9b42c86e..8a9bb555 160000 --- a/vendor/grammars/AutoHotkey +++ b/vendor/grammars/AutoHotkey @@ -1 +1 @@ -Subproject commit 9b42c86e75a78e0f3c37d87476c1d943803fa76e +Subproject commit 8a9bb5559786af2373261999d14b8909fe6d0c97 diff --git a/vendor/grammars/CLIPS-sublime b/vendor/grammars/CLIPS-sublime index f6904baa..6a11bc51 160000 --- a/vendor/grammars/CLIPS-sublime +++ b/vendor/grammars/CLIPS-sublime @@ -1 +1 @@ -Subproject commit f6904baa78b8b918a7815f4f467fe0ab51c38972 +Subproject commit 6a11bc512e3f22ae9636e64bc101e79334501089 diff --git a/vendor/grammars/ColdFusion b/vendor/grammars/ColdFusion index ee54c805..3e7e68b1 160000 --- a/vendor/grammars/ColdFusion +++ b/vendor/grammars/ColdFusion @@ -1 +1 @@ -Subproject commit ee54c80589c1618c5a8c55afdc83f770d7bdf44b +Subproject commit 3e7e68b14dc3f55082e4d449666d3fde3f024a02 diff --git a/vendor/grammars/Docker.tmbundle b/vendor/grammars/Docker.tmbundle index 8f28cd87..8ff6e62c 160000 --- a/vendor/grammars/Docker.tmbundle +++ b/vendor/grammars/Docker.tmbundle @@ -1 +1 @@ -Subproject commit 8f28cd8714072c1a6d3478e700948ee20143c561 +Subproject commit 8ff6e62c89c625829e86d9094c0dab873120408c diff --git a/vendor/grammars/Elm.tmLanguage b/vendor/grammars/Elm.tmLanguage index 1d2e0963..8137f5a4 160000 --- a/vendor/grammars/Elm.tmLanguage +++ b/vendor/grammars/Elm.tmLanguage @@ -1 +1 @@ -Subproject commit 1d2e0963012d4959d5517c3dd0dcf486b1ded74b +Subproject commit 8137f5a48c76c4303394d7da6f3a19bf61056cc6 diff --git a/vendor/grammars/Handlebars b/vendor/grammars/Handlebars index 7bbedb02..85c88773 160000 --- a/vendor/grammars/Handlebars +++ b/vendor/grammars/Handlebars @@ -1 +1 @@ -Subproject commit 7bbedb02585912c6e89bec59621aaf2950c28a09 +Subproject commit 85c88773e83e437187bc9c924257f8e41caa63cf diff --git a/vendor/grammars/IDL-Syntax b/vendor/grammars/IDL-Syntax index 3baeaeaf..ee1bded3 160000 --- a/vendor/grammars/IDL-Syntax +++ b/vendor/grammars/IDL-Syntax @@ -1 +1 @@ -Subproject commit 3baeaeafac9e30e8a4b0789105641e0b59da32a9 +Subproject commit ee1bded38ba22716c3fb916795ca6d18f766f014 diff --git a/vendor/grammars/InnoSetup b/vendor/grammars/InnoSetup index 875ba96c..e7ca1ee0 160000 --- a/vendor/grammars/InnoSetup +++ b/vendor/grammars/InnoSetup @@ -1 +1 @@ -Subproject commit 875ba96c32df269f5be92bd366d20260f811d844 +Subproject commit e7ca1ee0dd99a022dd0bd679f9bdad7cd610432e diff --git a/vendor/grammars/Julia.tmbundle b/vendor/grammars/Julia.tmbundle index 6541d86c..e2918776 160000 --- a/vendor/grammars/Julia.tmbundle +++ b/vendor/grammars/Julia.tmbundle @@ -1 +1 @@ -Subproject commit 6541d86c1f6f19a3a0a26917e9dd81b043b37bc3 +Subproject commit e2918776e14506e0bc100c2501c56188acfc2bd3 diff --git a/vendor/grammars/Lean.tmbundle b/vendor/grammars/Lean.tmbundle new file mode 160000 index 00000000..dc33b945 --- /dev/null +++ b/vendor/grammars/Lean.tmbundle @@ -0,0 +1 @@ +Subproject commit dc33b9450f71cb1cfb5b9b1ad53d5afd6f62fbef diff --git a/vendor/grammars/Modelica b/vendor/grammars/Modelica index e1fd8532..10c5dc64 160000 --- a/vendor/grammars/Modelica +++ b/vendor/grammars/Modelica @@ -1 +1 @@ -Subproject commit e1fd853290e4a560f20383103c786334da505772 +Subproject commit 10c5dc6484b6d851a109025af64a83ae0e6a6c73 diff --git a/vendor/grammars/NimLime b/vendor/grammars/NimLime index fac6b182..4acce8b6 160000 --- a/vendor/grammars/NimLime +++ b/vendor/grammars/NimLime @@ -1 +1 @@ -Subproject commit fac6b182e8a92a65c9e144c578948d7b51048f26 +Subproject commit 4acce8b67be537df6e23e9aab92c0427c37437a5 diff --git a/vendor/grammars/PHP-Twig.tmbundle b/vendor/grammars/PHP-Twig.tmbundle index ad0f5147..f4f7529a 160000 --- a/vendor/grammars/PHP-Twig.tmbundle +++ b/vendor/grammars/PHP-Twig.tmbundle @@ -1 +1 @@ -Subproject commit ad0f5147e6d7ae70469084659cffcfd22575869e +Subproject commit f4f7529ac2a07527caa7c9154b87c96d17e18aa1 diff --git a/vendor/grammars/SMT.tmbundle b/vendor/grammars/SMT.tmbundle new file mode 160000 index 00000000..5b8231f5 --- /dev/null +++ b/vendor/grammars/SMT.tmbundle @@ -0,0 +1 @@ +Subproject commit 5b8231f5165f0a2147445783705e99f468be7a84 diff --git a/vendor/grammars/Stylus b/vendor/grammars/Stylus index b9214d1f..8b1c77d0 160000 --- a/vendor/grammars/Stylus +++ b/vendor/grammars/Stylus @@ -1 +1 @@ -Subproject commit b9214d1ffd5031b60d77d07a6f315a934d4a473e +Subproject commit 8b1c77d0543d12984ebb872180d942629edc31ac diff --git a/vendor/grammars/Sublime-Coq b/vendor/grammars/Sublime-Coq index 964eb8f9..0909903a 160000 --- a/vendor/grammars/Sublime-Coq +++ b/vendor/grammars/Sublime-Coq @@ -1 +1 @@ -Subproject commit 964eb8f914cd65f107f55eef8e51372fdf77bd53 +Subproject commit 0909903a9ac9bb4771d78dc6e0a306196d0fe068 diff --git a/vendor/grammars/Sublime-Logos b/vendor/grammars/Sublime-Logos index 9a7aa2fb..5375dc53 160000 --- a/vendor/grammars/Sublime-Logos +++ b/vendor/grammars/Sublime-Logos @@ -1 +1 @@ -Subproject commit 9a7aa2fb92b52f0e422f50b60fd5608d935ef69b +Subproject commit 5375dc5394d72c36088d6eb1304f632bea232d83 diff --git a/vendor/grammars/Sublime-Modula-2 b/vendor/grammars/Sublime-Modula-2 new file mode 160000 index 00000000..9bd5077f --- /dev/null +++ b/vendor/grammars/Sublime-Modula-2 @@ -0,0 +1 @@ +Subproject commit 9bd5077f925ac7a3edc87d45d1f872593ff7377e diff --git a/vendor/grammars/Sublime-REBOL b/vendor/grammars/Sublime-REBOL index 977ba9bb..102402f7 160000 --- a/vendor/grammars/Sublime-REBOL +++ b/vendor/grammars/Sublime-REBOL @@ -1 +1 @@ -Subproject commit 977ba9bb5881e4eec0f144f9f8dc23b0137cae00 +Subproject commit 102402f71aa3a7770b0c06c0183eff1be78e7280 diff --git a/vendor/grammars/Sublime-Red b/vendor/grammars/Sublime-Red new file mode 160000 index 00000000..def7baed --- /dev/null +++ b/vendor/grammars/Sublime-Red @@ -0,0 +1 @@ +Subproject commit def7baed855873ab6730502baf07ce014b922ad9 diff --git a/vendor/grammars/Sublime-SQF-Language b/vendor/grammars/Sublime-SQF-Language index 0313fbe6..6d0f3f6c 160000 --- a/vendor/grammars/Sublime-SQF-Language +++ b/vendor/grammars/Sublime-SQF-Language @@ -1 +1 @@ -Subproject commit 0313fbe6fb962a21c337a327dcb72235af913536 +Subproject commit 6d0f3f6cee23a79f59af9ab263841c1533cd54f1 diff --git a/vendor/grammars/Sublime-Text-2-OpenEdge-ABL b/vendor/grammars/Sublime-Text-2-OpenEdge-ABL index 6e8231cc..dd14b342 160000 --- a/vendor/grammars/Sublime-Text-2-OpenEdge-ABL +++ b/vendor/grammars/Sublime-Text-2-OpenEdge-ABL @@ -1 +1 @@ -Subproject commit 6e8231cca124750b413ee50e8a4ee20e36636a03 +Subproject commit dd14b342cb436cde41752df6a014588110b9c1c0 diff --git a/vendor/grammars/Sublime-VimL b/vendor/grammars/Sublime-VimL index 366fdc64..4b23352c 160000 --- a/vendor/grammars/Sublime-VimL +++ b/vendor/grammars/Sublime-VimL @@ -1 +1 @@ -Subproject commit 366fdc64e3655207a0b2672f630d7167e6aac2c3 +Subproject commit 4b23352ce5e48a191d55d61883a9478211df91fd diff --git a/vendor/grammars/SublimeClarion b/vendor/grammars/SublimeClarion new file mode 160000 index 00000000..f070aadd --- /dev/null +++ b/vendor/grammars/SublimeClarion @@ -0,0 +1 @@ +Subproject commit f070aadd26c5376be522bd0c9a135ff85bb76f13 diff --git a/vendor/grammars/SublimePapyrus b/vendor/grammars/SublimePapyrus index 27313007..db148999 160000 --- a/vendor/grammars/SublimePapyrus +++ b/vendor/grammars/SublimePapyrus @@ -1 +1 @@ -Subproject commit 27313007d94fd4ae802702e5ca6b454e8a5e9468 +Subproject commit db1489994863ca9adda545bf7c728d9e4fb7382c diff --git a/vendor/grammars/abap.tmbundle b/vendor/grammars/abap.tmbundle index 5d8acce1..5973e78c 160000 --- a/vendor/grammars/abap.tmbundle +++ b/vendor/grammars/abap.tmbundle @@ -1 +1 @@ -Subproject commit 5d8acce13c54650b62556c0b307d9f30ea7ff538 +Subproject commit 5973e78c60d3d7f11fb264b5581bbe492486e771 diff --git a/vendor/grammars/ada.tmbundle b/vendor/grammars/ada.tmbundle index c45eed4d..59bfc502 160000 --- a/vendor/grammars/ada.tmbundle +++ b/vendor/grammars/ada.tmbundle @@ -1 +1 @@ -Subproject commit c45eed4d5f98fe3bcbbffbb9e436601ab5bbde4b +Subproject commit 59bfc50221b2dcdbdb8a98117f44e66e1c35ffcf diff --git a/vendor/grammars/ampl b/vendor/grammars/ampl new file mode 160000 index 00000000..2e399ebf --- /dev/null +++ b/vendor/grammars/ampl @@ -0,0 +1 @@ +Subproject commit 2e399ebf4aec6b5b81f01d4cbee965f77852ce86 diff --git a/vendor/grammars/api-blueprint-sublime-plugin b/vendor/grammars/api-blueprint-sublime-plugin new file mode 160000 index 00000000..e5289f42 --- /dev/null +++ b/vendor/grammars/api-blueprint-sublime-plugin @@ -0,0 +1 @@ +Subproject commit e5289f429be68c1ab5df4ca099578eaa84e41dc8 diff --git a/vendor/grammars/asciidoc.tmbundle b/vendor/grammars/asciidoc.tmbundle index 28063ea4..2d3f7a4f 160000 --- a/vendor/grammars/asciidoc.tmbundle +++ b/vendor/grammars/asciidoc.tmbundle @@ -1 +1 @@ -Subproject commit 28063ea46c1b47d7aec7da39801679763ab00825 +Subproject commit 2d3f7a4f58bf626ca7c47112cdf346128851e0d3 diff --git a/vendor/grammars/atom-fsharp b/vendor/grammars/atom-fsharp new file mode 160000 index 00000000..2a531a5f --- /dev/null +++ b/vendor/grammars/atom-fsharp @@ -0,0 +1 @@ +Subproject commit 2a531a5f7aeb8d7f6ccc99e4cbd6f564a47a7322 diff --git a/vendor/grammars/atom-language-purescript b/vendor/grammars/atom-language-purescript new file mode 160000 index 00000000..5fd5b646 --- /dev/null +++ b/vendor/grammars/atom-language-purescript @@ -0,0 +1 @@ +Subproject commit 5fd5b6460e906045625fb5bbe7644425c73a3798 diff --git a/vendor/grammars/ats.sublime b/vendor/grammars/ats.sublime index 2565468f..d6317b23 160000 --- a/vendor/grammars/ats.sublime +++ b/vendor/grammars/ats.sublime @@ -1 +1 @@ -Subproject commit 2565468fd437fbe436bc21509a72ba8bad35fc7c +Subproject commit d6317b2309055954d4f024479a6b6b6115acf3ba diff --git a/vendor/grammars/bro-sublime b/vendor/grammars/bro-sublime index 7a8983d9..8219f5ee 160000 --- a/vendor/grammars/bro-sublime +++ b/vendor/grammars/bro-sublime @@ -1 +1 @@ -Subproject commit 7a8983d93ecdb2535b00348b2ed15a964fe6884f +Subproject commit 8219f5ee09cff98756641dde8a93456ff77b9e92 diff --git a/vendor/grammars/carto-atom b/vendor/grammars/carto-atom index c00fb6c4..98959093 160000 --- a/vendor/grammars/carto-atom +++ b/vendor/grammars/carto-atom @@ -1 +1 @@ -Subproject commit c00fb6c461e17de53e9efaf5b495e5b7d877b9d6 +Subproject commit 989590932359d32462c4904c5a71180aeda409d2 diff --git a/vendor/grammars/ceylon-sublimetext b/vendor/grammars/ceylon-sublimetext index 07029801..67ae76cf 160000 --- a/vendor/grammars/ceylon-sublimetext +++ b/vendor/grammars/ceylon-sublimetext @@ -1 +1 @@ -Subproject commit 070298013e732cc7233c5169181a4a65c0ad6ef9 +Subproject commit 67ae76cfb1d992f4718ac121008f5d974b370cc2 diff --git a/vendor/grammars/chapel-tmbundle b/vendor/grammars/chapel-tmbundle index d52e9b14..03c5d256 160000 --- a/vendor/grammars/chapel-tmbundle +++ b/vendor/grammars/chapel-tmbundle @@ -1 +1 @@ -Subproject commit d52e9b1417a5aa41e417876e121adb880d6a1ff7 +Subproject commit 03c5d25641aef5809d0ce8ce28790c96afe174b5 diff --git a/vendor/grammars/css.tmbundle b/vendor/grammars/css.tmbundle index bef87ff9..94f7111c 160000 --- a/vendor/grammars/css.tmbundle +++ b/vendor/grammars/css.tmbundle @@ -1 +1 @@ -Subproject commit bef87ff98730f62cee3bb470f63bd2eb3fb2e4f9 +Subproject commit 94f7111c2953ac7b4cc42d313d9ad9b8701b8468 diff --git a/vendor/grammars/d.tmbundle b/vendor/grammars/d.tmbundle index a6931961..f7953e41 160000 --- a/vendor/grammars/d.tmbundle +++ b/vendor/grammars/d.tmbundle @@ -1 +1 @@ -Subproject commit a6931961dafe68349ca0c388d225987bcf2ce049 +Subproject commit f7953e41fdf40e49113852b07146478783f08139 diff --git a/vendor/grammars/dart-sublime-bundle b/vendor/grammars/dart-sublime-bundle index d55b1d42..8fe7c037 160000 --- a/vendor/grammars/dart-sublime-bundle +++ b/vendor/grammars/dart-sublime-bundle @@ -1 +1 @@ -Subproject commit d55b1d427845aa4c2f2fe5947121616b7f1160fa +Subproject commit 8fe7c0370b9d901d24b01cabc47ba7079c0cd5bd diff --git a/vendor/grammars/elixir-tmbundle b/vendor/grammars/elixir-tmbundle index 9c63ff09..56efe611 160000 --- a/vendor/grammars/elixir-tmbundle +++ b/vendor/grammars/elixir-tmbundle @@ -1 +1 @@ -Subproject commit 9c63ff09bd411d3e5c5a737145fc33d288804c9c +Subproject commit 56efe6116ff92a6979ba94ff2722486e3f440583 diff --git a/vendor/grammars/factor b/vendor/grammars/factor index ec896cd5..a5fbd7e3 160000 --- a/vendor/grammars/factor +++ b/vendor/grammars/factor @@ -1 +1 @@ -Subproject commit ec896cd5ad05d4ae9b837fa5a64cd9431d2a14d6 +Subproject commit a5fbd7e3f89b1f09bd03312aababefb440db99a6 diff --git a/vendor/grammars/fsharpbinding b/vendor/grammars/fsharpbinding deleted file mode 160000 index 0cd6439b..00000000 --- a/vendor/grammars/fsharpbinding +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0cd6439b513631c469d69b0e02a26804b068674b diff --git a/vendor/grammars/gap-tmbundle b/vendor/grammars/gap-tmbundle index 291a0469..ce4ff698 160000 --- a/vendor/grammars/gap-tmbundle +++ b/vendor/grammars/gap-tmbundle @@ -1 +1 @@ -Subproject commit 291a0469dd4eb7082b08e828edc8bf0cfbb9b599 +Subproject commit ce4ff698ebb4a692f0b9a3ab5e30853b87fd2b34 diff --git a/vendor/grammars/grace-tmbundle b/vendor/grammars/grace-tmbundle index acbf9a24..9e8bb893 160000 --- a/vendor/grammars/grace-tmbundle +++ b/vendor/grammars/grace-tmbundle @@ -1 +1 @@ -Subproject commit acbf9a247c6fae57d0e51c712669933b93ca4251 +Subproject commit 9e8bb893f0fa118db2335c2c1edd4147d7ea9d78 diff --git a/vendor/grammars/graphviz.tmbundle b/vendor/grammars/graphviz.tmbundle index 2760230b..d1d489f8 160000 --- a/vendor/grammars/graphviz.tmbundle +++ b/vendor/grammars/graphviz.tmbundle @@ -1 +1 @@ -Subproject commit 2760230b50dbec25906db1504604b37885a53fef +Subproject commit d1d489f893a0e6ef5d9021bf7dc1ffd08b3f9b90 diff --git a/vendor/grammars/haskell.tmbundle b/vendor/grammars/haskell.tmbundle index 30fa1e28..c3137ccc 160000 --- a/vendor/grammars/haskell.tmbundle +++ b/vendor/grammars/haskell.tmbundle @@ -1 +1 @@ -Subproject commit 30fa1e283244960e520694d8db6189d9b2bde9f5 +Subproject commit c3137ccc287c096f6436a80d71b32348df1102cc diff --git a/vendor/grammars/haxe-sublime-bundle b/vendor/grammars/haxe-sublime-bundle index 50c5aa0e..ece380e5 160000 --- a/vendor/grammars/haxe-sublime-bundle +++ b/vendor/grammars/haxe-sublime-bundle @@ -1 +1 @@ -Subproject commit 50c5aa0e10f277f83dfe3d0e269a1043271be4df +Subproject commit ece380e599b075255285ee7be0ec4b1a787fd6f8 diff --git a/vendor/grammars/html.tmbundle b/vendor/grammars/html.tmbundle index 4831b07b..e87e8de6 160000 --- a/vendor/grammars/html.tmbundle +++ b/vendor/grammars/html.tmbundle @@ -1 +1 @@ -Subproject commit 4831b07b7211d34ab5570bbf877690cf4fefc9ef +Subproject commit e87e8de6486a509bf304bba264a9fd2370f4ca64 diff --git a/vendor/grammars/idl.tmbundle b/vendor/grammars/idl.tmbundle index 95f17ac4..91baae91 160000 --- a/vendor/grammars/idl.tmbundle +++ b/vendor/grammars/idl.tmbundle @@ -1 +1 @@ -Subproject commit 95f17ac40b99ace47a26e7751c7b5de45b13b1c0 +Subproject commit 91baae9134c2de3b6f48f902c5fb64ed8b384894 diff --git a/vendor/grammars/jade-tmbundle b/vendor/grammars/jade-tmbundle index b061f52f..9ad91309 160000 --- a/vendor/grammars/jade-tmbundle +++ b/vendor/grammars/jade-tmbundle @@ -1 +1 @@ -Subproject commit b061f52fb369cc0b483cc1ddc4cd0fc088615754 +Subproject commit 9ad91309a4e5bbe87fdc0e1e660a82aa94be1794 diff --git a/vendor/grammars/java.tmbundle b/vendor/grammars/java.tmbundle index ccdebdf8..bed5760a 160000 --- a/vendor/grammars/java.tmbundle +++ b/vendor/grammars/java.tmbundle @@ -1 +1 @@ -Subproject commit ccdebdf888400c492ea55884e03a8f9d1b61de8b +Subproject commit bed5760ae0ca4784fc153e0323978a096ea656dc diff --git a/vendor/grammars/javadoc.tmbundle b/vendor/grammars/javadoc.tmbundle deleted file mode 160000 index 5276d7a9..00000000 --- a/vendor/grammars/javadoc.tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 5276d7a93f0cf53b7d425c39c6968b09ea9f2d40 diff --git a/vendor/grammars/jflex.tmbundle b/vendor/grammars/jflex.tmbundle new file mode 160000 index 00000000..12a7a88b --- /dev/null +++ b/vendor/grammars/jflex.tmbundle @@ -0,0 +1 @@ +Subproject commit 12a7a88b7a34bb9490b6077ad743332acf66a456 diff --git a/vendor/grammars/jquery-tmbundle b/vendor/grammars/jquery-tmbundle deleted file mode 160000 index ff14cd28..00000000 --- a/vendor/grammars/jquery-tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ff14cd28e36772d13de16606903b36a091ffeb33 diff --git a/vendor/grammars/kotlin-sublime-package b/vendor/grammars/kotlin-sublime-package index e8e18955..3ddc52e8 160000 --- a/vendor/grammars/kotlin-sublime-package +++ b/vendor/grammars/kotlin-sublime-package @@ -1 +1 @@ -Subproject commit e8e18955d7f18d42574dc55a37e6f31339036800 +Subproject commit 3ddc52e8dbc8bef1f1a534b94bd0f688bc2a4422 diff --git a/vendor/grammars/language-clojure b/vendor/grammars/language-clojure index bae6eee8..04e308ae 160000 --- a/vendor/grammars/language-clojure +++ b/vendor/grammars/language-clojure @@ -1 +1 @@ -Subproject commit bae6eee8557c2158592ac485a7168ccd10fc6dfb +Subproject commit 04e308ae4c70d00eb38cb4d4211b5c27ae5bdce5 diff --git a/vendor/grammars/language-coffee-script b/vendor/grammars/language-coffee-script index d86c8963..99f29d25 160000 --- a/vendor/grammars/language-coffee-script +++ b/vendor/grammars/language-coffee-script @@ -1 +1 @@ -Subproject commit d86c8963dcee0ab811da05a175b2218045d0c124 +Subproject commit 99f29d259f8c51c3a56b0798d3e5c95cca370421 diff --git a/vendor/grammars/language-crystal b/vendor/grammars/language-crystal new file mode 160000 index 00000000..75462302 --- /dev/null +++ b/vendor/grammars/language-crystal @@ -0,0 +1 @@ +Subproject commit 754623023bd556b2bcb927dd8c1fd1ae4153e386 diff --git a/vendor/grammars/language-csharp b/vendor/grammars/language-csharp index d07ba8f1..8745f4e5 160000 --- a/vendor/grammars/language-csharp +++ b/vendor/grammars/language-csharp @@ -1 +1 @@ -Subproject commit d07ba8f16818d95ff663929f8104f7c101cc3ae6 +Subproject commit 8745f4e5452d987baf3f84a5628b4e4c3a2b8efe diff --git a/vendor/grammars/language-gfm b/vendor/grammars/language-gfm index 5f5df306..6202c4e3 160000 --- a/vendor/grammars/language-gfm +++ b/vendor/grammars/language-gfm @@ -1 +1 @@ -Subproject commit 5f5df3064c9dccbfd8dac8d260b0d4a843ac88a5 +Subproject commit 6202c4e34d23fd288b639dce598f61e728224077 diff --git a/vendor/grammars/language-javascript b/vendor/grammars/language-javascript index d58edec6..6e9fb364 160000 --- a/vendor/grammars/language-javascript +++ b/vendor/grammars/language-javascript @@ -1 +1 @@ -Subproject commit d58edec65539e014fa13579461df6bebc24250c0 +Subproject commit 6e9fb364cbc0d1558ce6af404c3de114ee07e1d4 diff --git a/vendor/grammars/language-jsoniq b/vendor/grammars/language-jsoniq new file mode 160000 index 00000000..7a971acf --- /dev/null +++ b/vendor/grammars/language-jsoniq @@ -0,0 +1 @@ +Subproject commit 7a971acf1c2001e6b2e9afc7b69b6ff8a2ae39ce diff --git a/vendor/grammars/language-ncl b/vendor/grammars/language-ncl new file mode 160000 index 00000000..ae46014e --- /dev/null +++ b/vendor/grammars/language-ncl @@ -0,0 +1 @@ +Subproject commit ae46014e687be08bc4a47012fe3f21a31c081b61 diff --git a/vendor/grammars/language-python b/vendor/grammars/language-python index 8daa1008..7271315c 160000 --- a/vendor/grammars/language-python +++ b/vendor/grammars/language-python @@ -1 +1 @@ -Subproject commit 8daa10089a14bacf2346bb16f31d1189489696e0 +Subproject commit 7271315c858451ad302ebce2c5db2eee528013cc diff --git a/vendor/grammars/language-shellscript b/vendor/grammars/language-shellscript index 98397197..c09554aa 160000 --- a/vendor/grammars/language-shellscript +++ b/vendor/grammars/language-shellscript @@ -1 +1 @@ -Subproject commit 9839719721e3fb67c2df8461b2b296e6ff027e7f +Subproject commit c09554aa3c0917db42f90192501b17bad6d71073 diff --git a/vendor/grammars/language-xbase b/vendor/grammars/language-xbase new file mode 160000 index 00000000..86f0c6c3 --- /dev/null +++ b/vendor/grammars/language-xbase @@ -0,0 +1 @@ +Subproject commit 86f0c6c370c56c95d1b1ac9f3dbdca3b31d482bb diff --git a/vendor/grammars/language-yaml b/vendor/grammars/language-yaml index ce8b4414..ee5ab88f 160000 --- a/vendor/grammars/language-yaml +++ b/vendor/grammars/language-yaml @@ -1 +1 @@ -Subproject commit ce8b441467852f766a34d22ba6661099496e22e4 +Subproject commit ee5ab88f5907d9102524a70534e1f06f2f41ddfe diff --git a/vendor/grammars/latex.tmbundle b/vendor/grammars/latex.tmbundle index 669040b8..2cae8202 160000 --- a/vendor/grammars/latex.tmbundle +++ b/vendor/grammars/latex.tmbundle @@ -1 +1 @@ -Subproject commit 669040b8936375e54fb208dfb56e2ed4a3945d76 +Subproject commit 2cae820272e4b88141fe3f06adfab620951952fb diff --git a/vendor/grammars/lisp.tmbundle b/vendor/grammars/lisp.tmbundle index 0c1d1baa..6d116d77 160000 --- a/vendor/grammars/lisp.tmbundle +++ b/vendor/grammars/lisp.tmbundle @@ -1 +1 @@ -Subproject commit 0c1d1baa16db1889aa7081bcda8ce9e5b4be85cd +Subproject commit 6d116d77b6e3d6b04d863c558527008db482b48a diff --git a/vendor/grammars/mercury-tmlanguage b/vendor/grammars/mercury-tmlanguage index 1cb8e949..cb57d42d 160000 --- a/vendor/grammars/mercury-tmlanguage +++ b/vendor/grammars/mercury-tmlanguage @@ -1 +1 @@ -Subproject commit 1cb8e94922803658040bc29aa732c1671e2afe5b +Subproject commit cb57d42dbe343d3809c3dd7946f28f6354a2687e diff --git a/vendor/grammars/ocaml.tmbundle b/vendor/grammars/ocaml.tmbundle index 903fc455..81589400 160000 --- a/vendor/grammars/ocaml.tmbundle +++ b/vendor/grammars/ocaml.tmbundle @@ -1 +1 @@ -Subproject commit 903fc455163c90d38db77c47ca636392550967f0 +Subproject commit 8158940052861bcf90c28f343dff2c50ab440b3f diff --git a/vendor/grammars/openscad.tmbundle b/vendor/grammars/openscad.tmbundle new file mode 160000 index 00000000..4b2bc0a8 --- /dev/null +++ b/vendor/grammars/openscad.tmbundle @@ -0,0 +1 @@ +Subproject commit 4b2bc0a8e100d8f0350fd74f6c40dd956c118355 diff --git a/vendor/grammars/oracle.tmbundle b/vendor/grammars/oracle.tmbundle new file mode 160000 index 00000000..1da31563 --- /dev/null +++ b/vendor/grammars/oracle.tmbundle @@ -0,0 +1 @@ +Subproject commit 1da315635f75d1af57056c5c13221d4a95264e6f diff --git a/vendor/grammars/perl.tmbundle b/vendor/grammars/perl.tmbundle index 3396190b..fd81fe58 160000 --- a/vendor/grammars/perl.tmbundle +++ b/vendor/grammars/perl.tmbundle @@ -1 +1 @@ -Subproject commit 3396190be167310600d00da6ff9af7807cea4b12 +Subproject commit fd81fe586b928b4c2852b43472b37bdc45a6d074 diff --git a/vendor/grammars/php-smarty.tmbundle b/vendor/grammars/php-smarty.tmbundle index cbcdb59c..3e673e19 160000 --- a/vendor/grammars/php-smarty.tmbundle +++ b/vendor/grammars/php-smarty.tmbundle @@ -1 +1 @@ -Subproject commit cbcdb59cb3590417d63efd8f30f07ac9eaa8143d +Subproject commit 3e673e1980437e2fa394a3628258a61bf02d8ab7 diff --git a/vendor/grammars/php.tmbundle b/vendor/grammars/php.tmbundle index 7178a102..1cba1ac4 160000 --- a/vendor/grammars/php.tmbundle +++ b/vendor/grammars/php.tmbundle @@ -1 +1 @@ -Subproject commit 7178a102ce62352d3512301f62ddec8157cd0d8a +Subproject commit 1cba1ac4a9ffa301b1d92b735c298fcb60cc3e3a diff --git a/vendor/grammars/powershell b/vendor/grammars/powershell index 84fd9726..18c9f0e5 160000 --- a/vendor/grammars/powershell +++ b/vendor/grammars/powershell @@ -1 +1 @@ -Subproject commit 84fd97265c93abcd52de5915b4cf1179cc508373 +Subproject commit 18c9f0e553f68053713503b8dcca2c4712381ad6 diff --git a/vendor/grammars/r.tmbundle b/vendor/grammars/r.tmbundle index d602893b..44691a07 160000 --- a/vendor/grammars/r.tmbundle +++ b/vendor/grammars/r.tmbundle @@ -1 +1 @@ -Subproject commit d602893b72cb79611363b10efaeed8480a3e96d6 +Subproject commit 44691a07734715b11a130a4af409508f53f83aa1 diff --git a/vendor/grammars/restructuredtext.tmbundle b/vendor/grammars/restructuredtext.tmbundle index 43fc7b1f..608d8bcd 160000 --- a/vendor/grammars/restructuredtext.tmbundle +++ b/vendor/grammars/restructuredtext.tmbundle @@ -1 +1 @@ -Subproject commit 43fc7b1ff351d6733f7ce136aafe3091e77b4347 +Subproject commit 608d8bcdea179d4bf3def6244e0d9cf7705f2fea diff --git a/vendor/grammars/ruby-on-rails-tmbundle b/vendor/grammars/ruby-on-rails-tmbundle deleted file mode 160000 index 0981c4c2..00000000 --- a/vendor/grammars/ruby-on-rails-tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0981c4c2edac25b4451b396380d6bf48e0ef8bd0 diff --git a/vendor/grammars/sas.tmbundle b/vendor/grammars/sas.tmbundle index aefac510..43a05b10 160000 --- a/vendor/grammars/sas.tmbundle +++ b/vendor/grammars/sas.tmbundle @@ -1 +1 @@ -Subproject commit aefac51088df579fec4df0e3d8459f31b461d60f +Subproject commit 43a05b10fc76b34946a1188fd2a9c2171dbf3fe4 diff --git a/vendor/grammars/sass-textmate-bundle b/vendor/grammars/sass-textmate-bundle index 8444f979..95e492c5 160000 --- a/vendor/grammars/sass-textmate-bundle +++ b/vendor/grammars/sass-textmate-bundle @@ -1 +1 @@ -Subproject commit 8444f9796e7610f7f930e9ed7cae3093d5ce7805 +Subproject commit 95e492c5e85454ba005658cdb475710a2e96c63f diff --git a/vendor/grammars/smali-sublime b/vendor/grammars/smali-sublime new file mode 160000 index 00000000..b9eba913 --- /dev/null +++ b/vendor/grammars/smali-sublime @@ -0,0 +1 @@ +Subproject commit b9eba913977b95ac2880909d0c647003f1908172 diff --git a/vendor/grammars/sublime-better-typescript b/vendor/grammars/sublime-better-typescript index b956adec..8c0bd800 160000 --- a/vendor/grammars/sublime-better-typescript +++ b/vendor/grammars/sublime-better-typescript @@ -1 +1 @@ -Subproject commit b956adec0a0a48c6e637935bbb87fbe6155d46a8 +Subproject commit 8c0bd800d91a1c032f81d17055150482262085b5 diff --git a/vendor/grammars/sublime-idris b/vendor/grammars/sublime-idris index 5e936d1c..77166c0a 160000 --- a/vendor/grammars/sublime-idris +++ b/vendor/grammars/sublime-idris @@ -1 +1 @@ -Subproject commit 5e936d1c924c0edaead59a82bd9e9c1456eef61b +Subproject commit 77166c0ac40fbb9744b467976efa4969d9a7a65c diff --git a/vendor/grammars/sublime-mask b/vendor/grammars/sublime-mask index 6f12d284..819f743e 160000 --- a/vendor/grammars/sublime-mask +++ b/vendor/grammars/sublime-mask @@ -1 +1 @@ -Subproject commit 6f12d2841d008fb02eee912485cebcad7151d4f0 +Subproject commit 819f743efdcfa0d90a5b935cfaad799bd4ca7e6a diff --git a/vendor/grammars/sublime-netlinx b/vendor/grammars/sublime-netlinx new file mode 160000 index 00000000..a1093189 --- /dev/null +++ b/vendor/grammars/sublime-netlinx @@ -0,0 +1 @@ +Subproject commit a109318915751ff318de4b4d3bfc34ee57cec921 diff --git a/vendor/grammars/sublime-nginx b/vendor/grammars/sublime-nginx index eee371d7..ba28d29d 160000 --- a/vendor/grammars/sublime-nginx +++ b/vendor/grammars/sublime-nginx @@ -1 +1 @@ -Subproject commit eee371d7f4d688c6ccac0322c63506080e873131 +Subproject commit ba28d29de729f01d39a29fa214a6818112b48803 diff --git a/vendor/grammars/sublime-rust b/vendor/grammars/sublime-rust index 40df3591..386d8fcd 160000 --- a/vendor/grammars/sublime-rust +++ b/vendor/grammars/sublime-rust @@ -1 +1 @@ -Subproject commit 40df35916158b680eb3d9acb9080a03f7799144c +Subproject commit 386d8fcdc522d469c0d451f383f5b4aaaec7369f diff --git a/vendor/grammars/sublime-tea b/vendor/grammars/sublime-tea index b5f1025e..62b508c9 160000 --- a/vendor/grammars/sublime-tea +++ b/vendor/grammars/sublime-tea @@ -1 +1 @@ -Subproject commit b5f1025e074a29d3d1e133fc0e1b59b1adec986c +Subproject commit 62b508c948bd7c500a80a898a8fa05bdc311c9d1 diff --git a/vendor/grammars/sublime-text-ox b/vendor/grammars/sublime-text-ox index 10ca8836..ed96fb6a 160000 --- a/vendor/grammars/sublime-text-ox +++ b/vendor/grammars/sublime-text-ox @@ -1 +1 @@ -Subproject commit 10ca88362c6e4853744fc6b17ed06cc45dc033fa +Subproject commit ed96fb6afc0321c7d3ce219d69b56c591f0938a0 diff --git a/vendor/grammars/sublime-varnish b/vendor/grammars/sublime-varnish new file mode 160000 index 00000000..4915dcb3 --- /dev/null +++ b/vendor/grammars/sublime-varnish @@ -0,0 +1 @@ +Subproject commit 4915dcb3f130b0aedb96badffd963294194f1efe diff --git a/vendor/grammars/sublime_cobol b/vendor/grammars/sublime_cobol index 4be198de..e7ec606b 160000 --- a/vendor/grammars/sublime_cobol +++ b/vendor/grammars/sublime_cobol @@ -1 +1 @@ -Subproject commit 4be198de811d856e3f67ea04d7626ce82aff3dcb +Subproject commit e7ec606b51ddd69517f51fd40adb7eb15d1df961 diff --git a/vendor/grammars/text.tmbundle b/vendor/grammars/text.tmbundle deleted file mode 160000 index 961652ad..00000000 --- a/vendor/grammars/text.tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 961652ad957678e75b533406de1be5bd7f489063 diff --git a/vendor/grammars/textile.tmbundle b/vendor/grammars/textile.tmbundle deleted file mode 160000 index 6951fec2..00000000 --- a/vendor/grammars/textile.tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 6951fec27ccefe4245b76fda33987e746b91758a diff --git a/vendor/grammars/textmate.tmbundle b/vendor/grammars/textmate.tmbundle deleted file mode 160000 index 49270318..00000000 --- a/vendor/grammars/textmate.tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 49270318d53923faba4fa81d56f121b5618239f0 diff --git a/vendor/grammars/toml.tmbundle b/vendor/grammars/toml.tmbundle index cda2b74d..d261ef63 160000 --- a/vendor/grammars/toml.tmbundle +++ b/vendor/grammars/toml.tmbundle @@ -1 +1 @@ -Subproject commit cda2b74d0d40c841c573eae9c5e9edd7621d8d90 +Subproject commit d261ef630a6025c6ee518762715086bc22209c41 diff --git a/vendor/grammars/xc.tmbundle b/vendor/grammars/xc.tmbundle new file mode 160000 index 00000000..309d1f66 --- /dev/null +++ b/vendor/grammars/xc.tmbundle @@ -0,0 +1 @@ +Subproject commit 309d1f662ca32513d3eed19f44ce4ef1d6f5f611 From 4c66582f877c1846bdab00496543c3a038e867c6 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Wed, 29 Jul 2015 14:27:35 +0100 Subject: [PATCH 045/356] Grammars update --- vendor/grammars/Handlebars | 2 +- vendor/grammars/LiveScript.tmbundle | 2 +- vendor/grammars/SMT.tmbundle | 2 +- vendor/grammars/api-blueprint-sublime-plugin | 2 +- vendor/grammars/asciidoc.tmbundle | 2 +- vendor/grammars/atom-fsharp | 2 +- vendor/grammars/atom-salt | 2 +- vendor/grammars/chapel-tmbundle | 2 +- vendor/grammars/d.tmbundle | 2 +- vendor/grammars/dart-sublime-bundle | 2 +- vendor/grammars/factor | 2 +- vendor/grammars/haxe-sublime-bundle | 2 +- vendor/grammars/html.tmbundle | 2 +- vendor/grammars/jade-tmbundle | 2 +- vendor/grammars/java.tmbundle | 2 +- vendor/grammars/language-gfm | 2 +- vendor/grammars/language-javascript | 2 +- vendor/grammars/language-python | 2 +- vendor/grammars/language-xbase | 2 +- vendor/grammars/language-yaml | 2 +- vendor/grammars/llvm.tmbundle | 2 +- vendor/grammars/moonscript-tmbundle | 2 +- vendor/grammars/sublime-cirru | 2 +- vendor/grammars/sublime_cobol | 2 +- 24 files changed, 24 insertions(+), 24 deletions(-) diff --git a/vendor/grammars/Handlebars b/vendor/grammars/Handlebars index 85c88773..64f29314 160000 --- a/vendor/grammars/Handlebars +++ b/vendor/grammars/Handlebars @@ -1 +1 @@ -Subproject commit 85c88773e83e437187bc9c924257f8e41caa63cf +Subproject commit 64f293140c16666bc1fc7b91d14388d5c3f66d8c diff --git a/vendor/grammars/LiveScript.tmbundle b/vendor/grammars/LiveScript.tmbundle index 801cfac6..92d0a7c4 160000 --- a/vendor/grammars/LiveScript.tmbundle +++ b/vendor/grammars/LiveScript.tmbundle @@ -1 +1 @@ -Subproject commit 801cfac6023c43b03354bd6b0fb79aeb02ebd779 +Subproject commit 92d0a7c47cd7913fce9b81627adfce6594de1a92 diff --git a/vendor/grammars/SMT.tmbundle b/vendor/grammars/SMT.tmbundle index 5b8231f5..b72f1aef 160000 --- a/vendor/grammars/SMT.tmbundle +++ b/vendor/grammars/SMT.tmbundle @@ -1 +1 @@ -Subproject commit 5b8231f5165f0a2147445783705e99f468be7a84 +Subproject commit b72f1aef2c841ac2f9ff444e98a139011bd910b3 diff --git a/vendor/grammars/api-blueprint-sublime-plugin b/vendor/grammars/api-blueprint-sublime-plugin index e5289f42..550417b9 160000 --- a/vendor/grammars/api-blueprint-sublime-plugin +++ b/vendor/grammars/api-blueprint-sublime-plugin @@ -1 +1 @@ -Subproject commit e5289f429be68c1ab5df4ca099578eaa84e41dc8 +Subproject commit 550417b9bbbd833b57b5917b48ca0fef9ed52190 diff --git a/vendor/grammars/asciidoc.tmbundle b/vendor/grammars/asciidoc.tmbundle index 2d3f7a4f..0c93369d 160000 --- a/vendor/grammars/asciidoc.tmbundle +++ b/vendor/grammars/asciidoc.tmbundle @@ -1 +1 @@ -Subproject commit 2d3f7a4f58bf626ca7c47112cdf346128851e0d3 +Subproject commit 0c93369ddd920629bc97bf10e7270d8ec0d0463b diff --git a/vendor/grammars/atom-fsharp b/vendor/grammars/atom-fsharp index 2a531a5f..74270382 160000 --- a/vendor/grammars/atom-fsharp +++ b/vendor/grammars/atom-fsharp @@ -1 +1 @@ -Subproject commit 2a531a5f7aeb8d7f6ccc99e4cbd6f564a47a7322 +Subproject commit 74270382c47d3f0729ec52c3fdb875c1565e51d1 diff --git a/vendor/grammars/atom-salt b/vendor/grammars/atom-salt index 6d6bdc1b..77257d25 160000 --- a/vendor/grammars/atom-salt +++ b/vendor/grammars/atom-salt @@ -1 +1 @@ -Subproject commit 6d6bdc1be1a43201b5f78a4f89ea9bfc7416df11 +Subproject commit 77257d25b4aa8d99851b987c44bbd0e53f21f69d diff --git a/vendor/grammars/chapel-tmbundle b/vendor/grammars/chapel-tmbundle index 03c5d256..4c9bc68a 160000 --- a/vendor/grammars/chapel-tmbundle +++ b/vendor/grammars/chapel-tmbundle @@ -1 +1 @@ -Subproject commit 03c5d25641aef5809d0ce8ce28790c96afe174b5 +Subproject commit 4c9bc68a518330e6930ed7b9edfa04e6b5f7b149 diff --git a/vendor/grammars/d.tmbundle b/vendor/grammars/d.tmbundle index f7953e41..e6551b27 160000 --- a/vendor/grammars/d.tmbundle +++ b/vendor/grammars/d.tmbundle @@ -1 +1 @@ -Subproject commit f7953e41fdf40e49113852b07146478783f08139 +Subproject commit e6551b27e30960a272758afb7da323aa402d70e6 diff --git a/vendor/grammars/dart-sublime-bundle b/vendor/grammars/dart-sublime-bundle index 8fe7c037..3e3ac8cc 160000 --- a/vendor/grammars/dart-sublime-bundle +++ b/vendor/grammars/dart-sublime-bundle @@ -1 +1 @@ -Subproject commit 8fe7c0370b9d901d24b01cabc47ba7079c0cd5bd +Subproject commit 3e3ac8cc0366048a617a6056d7f6e2f1c8ccf4fe diff --git a/vendor/grammars/factor b/vendor/grammars/factor index a5fbd7e3..fba2eb9a 160000 --- a/vendor/grammars/factor +++ b/vendor/grammars/factor @@ -1 +1 @@ -Subproject commit a5fbd7e3f89b1f09bd03312aababefb440db99a6 +Subproject commit fba2eb9ace79bb49386bb5969ab8902adee07aef diff --git a/vendor/grammars/haxe-sublime-bundle b/vendor/grammars/haxe-sublime-bundle index ece380e5..8f2c0e6d 160000 --- a/vendor/grammars/haxe-sublime-bundle +++ b/vendor/grammars/haxe-sublime-bundle @@ -1 +1 @@ -Subproject commit ece380e599b075255285ee7be0ec4b1a787fd6f8 +Subproject commit 8f2c0e6d5e134cf5180ae95621c7d0f1765e4619 diff --git a/vendor/grammars/html.tmbundle b/vendor/grammars/html.tmbundle index e87e8de6..181a15de 160000 --- a/vendor/grammars/html.tmbundle +++ b/vendor/grammars/html.tmbundle @@ -1 +1 @@ -Subproject commit e87e8de6486a509bf304bba264a9fd2370f4ca64 +Subproject commit 181a15de244eb30f3d4df645dc1de38a7a420279 diff --git a/vendor/grammars/jade-tmbundle b/vendor/grammars/jade-tmbundle index 9ad91309..ad13ddaa 160000 --- a/vendor/grammars/jade-tmbundle +++ b/vendor/grammars/jade-tmbundle @@ -1 +1 @@ -Subproject commit 9ad91309a4e5bbe87fdc0e1e660a82aa94be1794 +Subproject commit ad13ddaad0a8e41abc3d188cff43feb6b7147cf9 diff --git a/vendor/grammars/java.tmbundle b/vendor/grammars/java.tmbundle index bed5760a..5f420457 160000 --- a/vendor/grammars/java.tmbundle +++ b/vendor/grammars/java.tmbundle @@ -1 +1 @@ -Subproject commit bed5760ae0ca4784fc153e0323978a096ea656dc +Subproject commit 5f4204576e13a73c9dfce525d8ced41a39d004c3 diff --git a/vendor/grammars/language-gfm b/vendor/grammars/language-gfm index 6202c4e3..13ca167d 160000 --- a/vendor/grammars/language-gfm +++ b/vendor/grammars/language-gfm @@ -1 +1 @@ -Subproject commit 6202c4e34d23fd288b639dce598f61e728224077 +Subproject commit 13ca167d14b5fc56a1404d214d22d113142b2399 diff --git a/vendor/grammars/language-javascript b/vendor/grammars/language-javascript index 6e9fb364..c2cb28f5 160000 --- a/vendor/grammars/language-javascript +++ b/vendor/grammars/language-javascript @@ -1 +1 @@ -Subproject commit 6e9fb364cbc0d1558ce6af404c3de114ee07e1d4 +Subproject commit c2cb28f520a1351f36387f3da4c5077e71c48d38 diff --git a/vendor/grammars/language-python b/vendor/grammars/language-python index 7271315c..80b45a83 160000 --- a/vendor/grammars/language-python +++ b/vendor/grammars/language-python @@ -1 +1 @@ -Subproject commit 7271315c858451ad302ebce2c5db2eee528013cc +Subproject commit 80b45a839ea86cacbec178d4e41b84a9b505012a diff --git a/vendor/grammars/language-xbase b/vendor/grammars/language-xbase index 86f0c6c3..3f77776e 160000 --- a/vendor/grammars/language-xbase +++ b/vendor/grammars/language-xbase @@ -1 +1 @@ -Subproject commit 86f0c6c370c56c95d1b1ac9f3dbdca3b31d482bb +Subproject commit 3f77776e98054b5ae53f13b14b4da1656497ce41 diff --git a/vendor/grammars/language-yaml b/vendor/grammars/language-yaml index ee5ab88f..3275f63c 160000 --- a/vendor/grammars/language-yaml +++ b/vendor/grammars/language-yaml @@ -1 +1 @@ -Subproject commit ee5ab88f5907d9102524a70534e1f06f2f41ddfe +Subproject commit 3275f63cb58ab37f925d9d3b64bfcdffc905e184 diff --git a/vendor/grammars/llvm.tmbundle b/vendor/grammars/llvm.tmbundle index 9f56fc54..9e3705a6 160000 --- a/vendor/grammars/llvm.tmbundle +++ b/vendor/grammars/llvm.tmbundle @@ -1 +1 @@ -Subproject commit 9f56fc54d3bc5c5cc8c202d9279e4bc61231086f +Subproject commit 9e3705a6e2bd51ae01d3963dd08bc42fc05d647f diff --git a/vendor/grammars/moonscript-tmbundle b/vendor/grammars/moonscript-tmbundle index 6f25231c..cf69300f 160000 --- a/vendor/grammars/moonscript-tmbundle +++ b/vendor/grammars/moonscript-tmbundle @@ -1 +1 @@ -Subproject commit 6f25231cfd1369293ea9c74db21c072bcb8ab2ce +Subproject commit cf69300f2a38d4c585bef4c5ad8543f5e258de8d diff --git a/vendor/grammars/sublime-cirru b/vendor/grammars/sublime-cirru index 4f34b670..c27a9604 160000 --- a/vendor/grammars/sublime-cirru +++ b/vendor/grammars/sublime-cirru @@ -1 +1 @@ -Subproject commit 4f34b67097262785277887151d04f9d67d3deb07 +Subproject commit c27a9604db7d3ddde6d91b16497532319058f7e0 diff --git a/vendor/grammars/sublime_cobol b/vendor/grammars/sublime_cobol index e7ec606b..bc8c0ff0 160000 --- a/vendor/grammars/sublime_cobol +++ b/vendor/grammars/sublime_cobol @@ -1 +1 @@ -Subproject commit e7ec606b51ddd69517f51fd40adb7eb15d1df961 +Subproject commit bc8c0ff073a91383aaa65024c105ad5e0755bcbf From 4b2abb2064787b7ff0321c43835014b33d5804bd Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Wed, 29 Jul 2015 14:50:11 +0100 Subject: [PATCH 046/356] Bumping to v4.5.10 --- lib/linguist/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index ef3f734c..42be58e7 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.5.9" + VERSION = "4.5.10" end From 1c73db499fc11a20d780770524be7d2d383e722a Mon Sep 17 00:00:00 2001 From: Radek Simko Date: Thu, 30 Jul 2015 11:31:06 +0100 Subject: [PATCH 047/356] Parse HCL as Ruby, not JavaScript --- lib/linguist/languages.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 02170a79..b92dd6a0 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1273,8 +1273,8 @@ HCL: extensions: - .hcl - .tf - ace_mode: javascript - tm_scope: source.json + ace_mode: ruby + tm_scope: source.ruby HTML: type: markup From 208ec3906ff1ad60fd869713a51adcf5ddc54407 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 4 Aug 2015 12:06:41 +0100 Subject: [PATCH 048/356] Fixing up some new heuristics --- lib/linguist/heuristics.rb | 6 +++--- test/test_heuristics.rb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index d3cbc167..66980945 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -329,7 +329,7 @@ module Linguist end end - disambiguate "Groff", "Nemerle" do |data| + disambiguate ".n" do |data| if /^[.']/.match(data) Language["Groff"] elsif /^(module|namespace|using)\s/.match(data) @@ -337,7 +337,7 @@ module Linguist end end - disambiguate "GAS", "Groff" do |data| + disambiguate ".ms" do |data| if /^[.'][a-z][a-z](\s|$)/i.match(data) Language["Groff"] elsif /((^|\s)move?[. ])|\.(include|globa?l)\s/.match(data) @@ -345,7 +345,7 @@ module Linguist end end - disambiguate "xBase", "Charity" do |data| + disambiguate ".ch" do |data| if /^\s*#\s*(if|ifdef|ifndef|define|command|xcommand|translate|xtranslate|include|pragma|undef)\b/i.match(data) Language["xBase"] end diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index 33bdf161..94418b3b 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -176,7 +176,7 @@ class TestHeuristcs < Minitest::Test def test_ch_by_heuristics assert_heuristics({ - "xBase" => all_fixtures("xBase") + "xBase" => all_fixtures("xBase", ".ch") }) end end From 6b283068a9171524bcbbe4a99b22d926ae269c4c Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 4 Aug 2015 12:20:15 +0100 Subject: [PATCH 049/356] Adding back R/Rebol heuristics --- lib/linguist/heuristics.rb | 8 ++++++++ test/test_heuristics.rb | 7 +++++++ 2 files changed, 15 insertions(+) diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 66980945..a6346005 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -350,5 +350,13 @@ module Linguist Language["xBase"] end end + + disambiguate ".r", ".R" do |data| + if /\bRebol\b/i.match(data) + Language["Rebol"] + elsif data.include?("<-") + Language["R"] + end + end end end diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index 94418b3b..59041e7b 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -179,4 +179,11 @@ class TestHeuristcs < Minitest::Test "xBase" => all_fixtures("xBase", ".ch") }) end + + def test_r_by_heuristics + assert_heuristics({ + "R" => all_fixtures("R", "*.r") + all_fixtures("R", "*.R"), + "Rebol" => all_fixtures("Rebol", "*.r") + }) + end end From cf8521a629bdb1cbf08e82c68aa8c4dedb49930a Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 4 Aug 2015 13:18:27 +0100 Subject: [PATCH 050/356] Grammar updates --- vendor/grammars/IDL-Syntax | 2 +- vendor/grammars/Lean.tmbundle | 2 +- vendor/grammars/NimLime | 2 +- vendor/grammars/SublimePapyrus | 2 +- vendor/grammars/Vala-TMBundle | 2 +- vendor/grammars/atom-fsharp | 2 +- vendor/grammars/factor | 2 +- vendor/grammars/haxe-sublime-bundle | 2 +- vendor/grammars/language-clojure | 2 +- vendor/grammars/language-coffee-script | 2 +- vendor/grammars/language-csharp | 2 +- vendor/grammars/language-gfm | 2 +- vendor/grammars/language-javascript | 2 +- vendor/grammars/language-python | 2 +- vendor/grammars/language-shellscript | 2 +- vendor/grammars/language-yaml | 2 +- vendor/grammars/swift.tmbundle | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/vendor/grammars/IDL-Syntax b/vendor/grammars/IDL-Syntax index ee1bded3..bb21604f 160000 --- a/vendor/grammars/IDL-Syntax +++ b/vendor/grammars/IDL-Syntax @@ -1 +1 @@ -Subproject commit ee1bded38ba22716c3fb916795ca6d18f766f014 +Subproject commit bb21604f07b5ad322757f04f7292df4f50442ad0 diff --git a/vendor/grammars/Lean.tmbundle b/vendor/grammars/Lean.tmbundle index dc33b945..fb115154 160000 --- a/vendor/grammars/Lean.tmbundle +++ b/vendor/grammars/Lean.tmbundle @@ -1 +1 @@ -Subproject commit dc33b9450f71cb1cfb5b9b1ad53d5afd6f62fbef +Subproject commit fb1151547aebacdb474c2e14ad74d2aa6548e2f0 diff --git a/vendor/grammars/NimLime b/vendor/grammars/NimLime index 4acce8b6..b0c92d3f 160000 --- a/vendor/grammars/NimLime +++ b/vendor/grammars/NimLime @@ -1 +1 @@ -Subproject commit 4acce8b67be537df6e23e9aab92c0427c37437a5 +Subproject commit b0c92d3faedeefcfe76c560f28980450811e2f5b diff --git a/vendor/grammars/SublimePapyrus b/vendor/grammars/SublimePapyrus index db148999..51807687 160000 --- a/vendor/grammars/SublimePapyrus +++ b/vendor/grammars/SublimePapyrus @@ -1 +1 @@ -Subproject commit db1489994863ca9adda545bf7c728d9e4fb7382c +Subproject commit 51807687119bab674996669a6f589bf94b911522 diff --git a/vendor/grammars/Vala-TMBundle b/vendor/grammars/Vala-TMBundle index bb84dccd..1c5ebb62 160000 --- a/vendor/grammars/Vala-TMBundle +++ b/vendor/grammars/Vala-TMBundle @@ -1 +1 @@ -Subproject commit bb84dccd11ef7edd01882367e241bdcbfcf164bc +Subproject commit 1c5ebb62d11e01d145b414355de72d4de8758ed8 diff --git a/vendor/grammars/atom-fsharp b/vendor/grammars/atom-fsharp index 74270382..121ff71b 160000 --- a/vendor/grammars/atom-fsharp +++ b/vendor/grammars/atom-fsharp @@ -1 +1 @@ -Subproject commit 74270382c47d3f0729ec52c3fdb875c1565e51d1 +Subproject commit 121ff71b30b4d78978fb52b331ef05600575c019 diff --git a/vendor/grammars/factor b/vendor/grammars/factor index fba2eb9a..abb8bd74 160000 --- a/vendor/grammars/factor +++ b/vendor/grammars/factor @@ -1 +1 @@ -Subproject commit fba2eb9ace79bb49386bb5969ab8902adee07aef +Subproject commit abb8bd74b97d7ed84ca0cd7bf03f8280f27682af diff --git a/vendor/grammars/haxe-sublime-bundle b/vendor/grammars/haxe-sublime-bundle index 8f2c0e6d..c1ef469b 160000 --- a/vendor/grammars/haxe-sublime-bundle +++ b/vendor/grammars/haxe-sublime-bundle @@ -1 +1 @@ -Subproject commit 8f2c0e6d5e134cf5180ae95621c7d0f1765e4619 +Subproject commit c1ef469bf3b1166180f64343f47d6cee73ddd4fa diff --git a/vendor/grammars/language-clojure b/vendor/grammars/language-clojure index 04e308ae..19522d6a 160000 --- a/vendor/grammars/language-clojure +++ b/vendor/grammars/language-clojure @@ -1 +1 @@ -Subproject commit 04e308ae4c70d00eb38cb4d4211b5c27ae5bdce5 +Subproject commit 19522d6acbb40d231a209338755bab71e4500fa0 diff --git a/vendor/grammars/language-coffee-script b/vendor/grammars/language-coffee-script index 99f29d25..e9f47f0f 160000 --- a/vendor/grammars/language-coffee-script +++ b/vendor/grammars/language-coffee-script @@ -1 +1 @@ -Subproject commit 99f29d259f8c51c3a56b0798d3e5c95cca370421 +Subproject commit e9f47f0f5517b77ebb1a3cb9bdbd4fdf97ff5caa diff --git a/vendor/grammars/language-csharp b/vendor/grammars/language-csharp index 8745f4e5..79fe8b57 160000 --- a/vendor/grammars/language-csharp +++ b/vendor/grammars/language-csharp @@ -1 +1 @@ -Subproject commit 8745f4e5452d987baf3f84a5628b4e4c3a2b8efe +Subproject commit 79fe8b57647c0e565af89a051b6b62137b094bbd diff --git a/vendor/grammars/language-gfm b/vendor/grammars/language-gfm index 13ca167d..c8158a6d 160000 --- a/vendor/grammars/language-gfm +++ b/vendor/grammars/language-gfm @@ -1 +1 @@ -Subproject commit 13ca167d14b5fc56a1404d214d22d113142b2399 +Subproject commit c8158a6d4b779842b5f3d95d023f96748904d551 diff --git a/vendor/grammars/language-javascript b/vendor/grammars/language-javascript index c2cb28f5..2766ff30 160000 --- a/vendor/grammars/language-javascript +++ b/vendor/grammars/language-javascript @@ -1 +1 @@ -Subproject commit c2cb28f520a1351f36387f3da4c5077e71c48d38 +Subproject commit 2766ff3052615016e53298ee715e221cd740b5a3 diff --git a/vendor/grammars/language-python b/vendor/grammars/language-python index 80b45a83..7d38baf8 160000 --- a/vendor/grammars/language-python +++ b/vendor/grammars/language-python @@ -1 +1 @@ -Subproject commit 80b45a839ea86cacbec178d4e41b84a9b505012a +Subproject commit 7d38baf80b89c1dc58e77f8a12763c5d18d5e1e5 diff --git a/vendor/grammars/language-shellscript b/vendor/grammars/language-shellscript index c09554aa..cb582fd0 160000 --- a/vendor/grammars/language-shellscript +++ b/vendor/grammars/language-shellscript @@ -1 +1 @@ -Subproject commit c09554aa3c0917db42f90192501b17bad6d71073 +Subproject commit cb582fd056f91f19d265a3d0db0e161da52031ed diff --git a/vendor/grammars/language-yaml b/vendor/grammars/language-yaml index 3275f63c..1f5a5b2d 160000 --- a/vendor/grammars/language-yaml +++ b/vendor/grammars/language-yaml @@ -1 +1 @@ -Subproject commit 3275f63cb58ab37f925d9d3b64bfcdffc905e184 +Subproject commit 1f5a5b2db026450d46c56c7263835634a4c886cc diff --git a/vendor/grammars/swift.tmbundle b/vendor/grammars/swift.tmbundle index 4b3af145..75a3dea1 160000 --- a/vendor/grammars/swift.tmbundle +++ b/vendor/grammars/swift.tmbundle @@ -1 +1 @@ -Subproject commit 4b3af145fedd1df488e28e6ae6249530d6a4389c +Subproject commit 75a3dea1841cd153c71101fa30841a269ab3c6a7 From 0a6165c4d94d451adaf6041ecf96c8748823ce1d Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 4 Aug 2015 13:27:21 +0100 Subject: [PATCH 051/356] Updating csharp scopes --- grammars.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/grammars.yml b/grammars.yml index a1bd7069..c64f08a9 100644 --- a/grammars.yml +++ b/grammars.yml @@ -320,6 +320,7 @@ vendor/grammars/language-coffee-script: vendor/grammars/language-crystal: - source.crystal vendor/grammars/language-csharp: +- source.cake - source.cs - source.csx - source.nant-build From 8ae32e1d479c72debd5dd28eadfb1c97d9b6d884 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 4 Aug 2015 13:29:52 +0100 Subject: [PATCH 052/356] Bumping version to v4.5.11 --- lib/linguist/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index 42be58e7..0265e2b0 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.5.10" + VERSION = "4.5.11" end From eb0bf16cce4b41c1ada6c031c37414c41deb9ceb Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Tue, 4 Aug 2015 17:28:52 +0200 Subject: [PATCH 053/356] Case-insensitive extension match for heuristic rules --- lib/linguist/heuristics.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index a6346005..fc8699c5 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -56,7 +56,7 @@ module Linguist # Internal: Check if this heuristic matches the candidate languages. def matches?(filename) - @extensions.any? { |ext| filename.end_with?(ext) } + @extensions.any? { |ext| filename.downcase.end_with?(ext) } end # Internal: Perform the heuristic @@ -351,7 +351,7 @@ module Linguist end end - disambiguate ".r", ".R" do |data| + disambiguate ".r" do |data| if /\bRebol\b/i.match(data) Language["Rebol"] elsif data.include?("<-") From d2297f55169b5f354ab9b6e06e622ee4be46966e Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 4 Aug 2015 21:56:11 +0100 Subject: [PATCH 054/356] Adding Slim tm_scope --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 04460e3b..a75a12fe 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3181,6 +3181,7 @@ Slim: color: "#ff8f77" extensions: - .slim + tm_scope: text.slim ace_mode: text Smali: From d94f427e125040493d82aff3c74afe4e3933d5c9 Mon Sep 17 00:00:00 2001 From: Arthur Helfstein Fragoso Date: Wed, 5 Aug 2015 05:06:11 -0300 Subject: [PATCH 055/356] xBase: Add aliases and extension .prw xBase: Add aliases: * advpl * clipper * foxpro And the extension .prw --- lib/linguist/languages.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index a75a12fe..1b31c0bb 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3822,8 +3822,13 @@ wisp: xBase: type: programming color: "#403a40" + aliases: + - advpl + - clipper + - foxpro extensions: - .prg + - .prw - .ch tm_scope: source.harbour ace_mode: text From 18eaf22cb912ea91dd3641cb4ba6e2d5065fd22a Mon Sep 17 00:00:00 2001 From: Arthur Helfstein Fragoso Date: Wed, 5 Aug 2015 05:19:41 -0300 Subject: [PATCH 056/356] Added xBase/AdvPL sample file --- samples/xBase/sample.prw | 512 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 512 insertions(+) create mode 100755 samples/xBase/sample.prw diff --git a/samples/xBase/sample.prw b/samples/xBase/sample.prw new file mode 100755 index 00000000..996e0218 --- /dev/null +++ b/samples/xBase/sample.prw @@ -0,0 +1,512 @@ + +/** + * This is a sample file for Linguist. + * It's written in AdvPL, a xBase Language. + * + * Author: Arthur Helfstein Fragoso + * + * This script has the specific use of integrating between a financial institution + * and other two companies in the process of creating Installment Bills for + * customers. + * + * The functions are called from the ERP Protheus TOTVS. + * + **/ + + + +#Include "TOPCONN.ch" +#include "tbiconn.ch" +#Include "Protheus.ch" +#Include "rwmake.ch" +#Include "FileIO.ch" +#Include "json.ch" +#Include "utils.ch" + + +//////////////////////// +// Faturando (Reparcelando) +// FA280 +// FA280_01 +// + +User Function FA280() + + //Executado uma vez para cada parcela + + If cEmpAnt == '06' + + SE5->(dbSelectArea("SE5")) + + cSet3Filter := "SE5->E5_FATURA == SE1->E1_NUM" + + SE5->(dbSetFilter( {|| &cSet3Filter }, cSet3Filter )) + SE5->(dbGoTOP()) + + aOrig06Tit := {} // = Todos os Titulos que ser�o reparcelados + nTotal := 0 + + While SE5->(!EOF()) + AADD(aOrig06Tit, {SE5->E5_PREFIXO, SE5->E5_NUMERO, SE5->E5_VALOR}) + nTotal += SE5->E5_VALOR + SE5->(dbSkip()) + End + + aNovoTitulo:= {;//{"E1_FILIAL" ,SE1ORIG->E1_FILIAL ,Nil},; + ;//{"E1_PREFIXO" ,SE1->E1_PREFIXO ,Nil},; + {"E1_NUM" ,SE1->E1_NUM ,Nil},; + {"E1_TIPO" ,SE1->E1_TIPO ,Nil},; + {"E1_PARCELA" ,SE1->E1_PARCELA ,Nil},; + {"E1_NATUREZ" ,SE1->E1_NATUREZ ,Nil},; + {"E1_CLIENTE" ,SE1->E1_CLIENTE ,Nil},; + {"E1_LOJA" ,SE1->E1_LOJA ,Nil},; + {"E1_NRDOC" ,SE1->E1_NRDOC ,Nil},; + ;//{"E1_X_COD" ,SE1->E1_NATUREZ ,Nil},; + {"E1_EMISSAO" ,SE1->E1_EMISSAO ,Nil},; + {"E1_VENCTO" ,SE1->E1_VENCTO ,Nil},; + {"E1_VENCREA" ,SE1->E1_VENCREA ,Nil},; + ;//{"E1_VALOR" ,SE1->E1_VALOR ,Nil},; + ;//{"E1_SALDO" ,SE1->E1_SALDO ,Nil},; + ;//{"E1_VLCRUZ" ,SE1->E1_VLCRUZ ,Nil},; + {"E1_PORTADO" ,SE1->E1_PORTADO ,Nil},; + {"E1_FATURA" ,SE1->E1_FATURA ,Nil},; + {"E1_X_DTPAV" ,SE1->E1_X_DTPAV ,Nil},; + {"E1_X_DTSAV" ,SE1->E1_X_DTSAV ,Nil},; + {"E1_X_DTTAV" ,SE1->E1_X_DTTAV ,Nil},; + {"E1_X_DTSPC" ,SE1->E1_X_DTSPC ,Nil},; + {"E1_X_DTPRO" ,SE1->E1_X_DTPRO ,Nil},; + {"E1_NUMBCO" ,SE1->E1_NUMBCO ,Nil},; + {"E1_X_DUDME" ,SE1->E1_X_DUDME ,Nil},; + {"E1_X_TIPOP" ,SE1->E1_X_TIPOP ,Nil},; + {"E1_X_DTCAN" ,SE1->E1_X_DTCAN ,Nil},; + {"E1_X_MOTIV" ,SE1->E1_X_MOTIV ,Nil},; + {"E1_X_DESPC" ,SE1->E1_X_DESPC ,Nil},; + {"E1_NUMNOTA" ,SE1->E1_NUMNOTA ,Nil},; + {"E1_SERIE" ,SE1->E1_SERIE ,Nil},; + {"E1_X_DEPRO" ,SE1->E1_X_DEPRO ,Nil},; + {"E1_X_TPPAI" ,SE1->E1_X_TPPAI ,Nil},; + {"E1_X_CGC" ,SE1->E1_X_CGC ,Nil},; + {"E1_XTPEMP" ,SE1->E1_XTPEMP ,Nil},; + {"E1_X_CTRIM" ,SE1->E1_X_CTRIM ,Nil}} + + StartJob("U_FA280_01",getenvserver(),.T., SE1->E1_PREFIXO ,SE1->E1_NUM, SE1->E1_TIPO, SE1->E1_VALOR, aOrig06Tit, nTotal, SE1->E1_PARCELA, aNovoTitulo) + + SE5->(dbClearFilter()) + + EndIf + +Return nil + + +User Function FA280_01(cE1PREFIXO, cE1NUM, cE1TIPO, nE1Valor, aOrig06Tit, nTotal, cE1PARCELA, aNovoTitulo) + Local nValPar := nil + Local aTit05 := {} + + RpcSetType(3) // Nao consome licensa + + //Prepare Environment Empresa "01" Filial '0102' + // Muda de empresa + While !RpcSetEnv('01', '0102',,,,GetEnvServer(),{}) + Sleep(400) + End + + nFileLog := u_OpenLog("\Logs\FA280_"+dToS(dDataBase)+".log") + + fWrite(nFileLog,"----- FA280 -----"+CRLF) + + fWrite(nFileLog,cE1NUM+CRLF) + + nParcelas := round(nTotal/nE1Valor, 0) + + cUltima := '0'+ chr(64+nParcelas) + + fWrite(nFileLog,"valor das parcelas: "+ cvaltochar(nE1Valor) +CRLF) + fWrite(nFileLog,"parcelas: "+ cvaltochar(nParcelas) +CRLF) + fWrite(nFileLog,"parcela atual: "+ cE1PARCELA +CRLF) + fWrite(nFileLog,"ultima parcela: "+ cUltima +CRLF) + + n0102total := 0 + n0105total := 0 + + //Loop entre todos os Titulos que serão Reparcelados + + For nI := 1 To len(aOrig06Tit) + + fWrite(nFileLog,"E5_NUMERO: "+aOrig06Tit[nI][2] +CRLF) + + cQuery := "select * from SE1010 where E1_PREFIXO = '"+ aOrig06Tit[nI][1] +"' and E1_NUM = '"+ aOrig06Tit[nI][2] +"' and E1_TIPO = 'FAT' and D_E_L_E_T_ <> '*'" + + fWrite(nFileLog,cQuery +CRLF) + + If select("SE1ORIG") > 0 + SE1ORIG->(DbCloseArea()) + endif + TcQuery cQuery New Alias 'SE1ORIG' + dbSelectArea("SE1ORIG") + SE1ORIG->(DBGOTOP()) + + While SE1ORIG->(!EOF()) //Loop entre as duas filiais: 0102, 0105 + fWrite(nFileLog,"SE1ORIG loop: "+SE1ORIG->E1_FILIAL +CRLF) + cFilAnt := SE1ORIG->E1_FILIAL + + //Faz a baixa + if alltrim(SE1ORIG->E1_STATUS) == 'A' + fWrite(nFileLog, SE1ORIG->E1_FILIAL+" : Fazendo baixa" +CRLF) + + aBaixa := {{"E1_FILIAL" ,SE1ORIG->E1_FILIAL ,Nil},; + {"E1_PREFIXO" ,SE1ORIG->E1_PREFIXO ,Nil},; + {"E1_NUM" ,SE1ORIG->E1_NUM ,Nil},; + {"E1_TIPO" ,SE1ORIG->E1_TIPO ,Nil},; + {"E1_PARCELA" ,SE1ORIG->E1_PARCELA ,Nil},; + {"E1_DESCONT" ,SE1ORIG->E1_DESCONT ,Nil},; + {"E1_JUROS" ,SE1ORIG->E1_JUROS ,Nil},; + {"E1_MULTA" ,SE1ORIG->E1_MULTA ,Nil},; + {"E1_VLRREAL" ,SE1ORIG->E1_VLRREAL ,Nil},; + {"AUTMOTBX" ,"FAT" ,Nil},; + {"AUTDTBAIXA" ,date() ,Nil},; + {"AUTDTCREDITO",date() ,Nil},; + {"AUTHIST" ,"Bx.Emis.Fat."+cE1NUM,Nil},; + {"AUTVALREC" ,SE1ORIG->E1_VALOR ,Nil}} + + + lMsErroAuto:=.F. //reseta lMsErroAuto + MSExecAuto ({|x,y| FINA070(x,y)},aBaixa, 3) + + If lMsErroAuto + + fWrite(nFileLog,SE1ORIG->E1_FILIAL+" : Não foi efetuada a baixa do titulo : "+CRLF+ MSErroString()+ CRLF + tojson(aBaixa) + CRLF) + return + else + + RECLOCK('SE5',.F.) + E5_FATURA := cE1NUM + E5_FATPREF:= cE1PREFIXO + //E5_LA = S + //E5_MOEDA = '' + //E5_TXMOEDA = 1 + MSUNLOCK() + RECLOCK('SE1',.F.) + E1_FATURA := cE1NUM + E1_FATPREF:= cE1PREFIXO + E1_TIPOFAT:= cE1TIPO + E1_FLAGFAT:= 'S' + E1_DTFATUR:= dDataBase + MSUNLOCK() + + fWrite(nFileLog,SE1ORIG->E1_FILIAL+" : baixa feita" +CRLF) + endif + + endif + + //calcula valor total de cada filial para poder calcular a Fatura + + if SE1ORIG->E1_FILIAL == '0102' + n0102total += SE1ORIG->E1_VALOR + elseif SE1ORIG->E1_FILIAL == '0105' + n0105total += SE1ORIG->E1_VALOR + else + fWrite(nFileLog,"Programa nao preparado para a filial "+SE1ORIG->E1_FILIAL +CRLF) + endif + + SE1ORIG->(dbskip()) + + End + + Next nI + + cFilAnt := '0102' + + fWrite(nFileLog,"Total 0102: "+cvaltochar(n0102total) +CRLF) + fWrite(nFileLog,"Total 0105: "+cvaltochar(n0105total) +CRLF) + + n0102val := round(nE1Valor * n0102total/nTotal, 2) + n0105val := nE1Valor - n0102val + + aFili := {} + + if n0102total > 0 + AADD(aFili,'0102') + endif + + if n0105total > 0 + AADD(aFili,'0105') + endif + + For nI := 1 To len(aFili) + + cQuery := "select COUNT(*) as QUANT, SUM(E1_VALOR) as TOTALINC from SE1010 where E1_NUM = '"+ cE1NUM +"' and E1_FILIAL='"+ aFili[nI] +"' and E1_PREFIXO = '"+ cE1PREFIXO +"' and D_E_L_E_T_ <> '*'" + + If select("PARC") > 0 + PARC->(DbCloseArea()) + endif + TcQuery cQuery New Alias 'PARC' + dbSelectArea("PARC") + + //verificamos se estamos na ultima parcela + if PARC->QUANT == nParcelas -1 //QUANT = quantidade de parcelas incluida + fWrite(nFileLog,"Ultima Parcela"+CRLF) + //o valor desta será o valor que resta + nValPar := SE1ORIG->E1_VALOR - PARC->TOTALINC + + if aFili[nI] == '0102' + n0102val := n0102total - PARC->TOTALINC + elseif aFili[nI] == '0105' + n0105val := n0105total - PARC->TOTALINC + endif + endif + + Next nI + + fWrite(nFileLog,"Total 0102: "+cvaltochar(n0102total) + " -> Parcela de: "+cvaltochar(n0102val) +CRLF) + fWrite(nFileLog,"Total 0105: "+cvaltochar(n0105total) + " -> Parcela de: "+cvaltochar(n0105val) +CRLF) + + ///////////////// + + For nI := 1 To len(aFili) + + if aFili[nI] == '0102' + nValPar := n0102val + elseif aFili[nI] == '0105' + nValPar := n0105val + endif + + aTitulo := ACLONE(aNovoTitulo) + + AADD(aTitulo, {"E1_PREFIXO" ,cE1PREFIXO ,Nil}) + AADD(aTitulo, {"E1_FILIAL" ,aFili[nI] ,Nil}) + AADD(aTitulo, {"E1_VALOR" ,nValPar ,Nil}) + AADD(aTitulo, {"E1_SALDO" ,nValPar ,Nil}) + AADD(aTitulo, {"E1_VLCRUZ" ,nValPar ,Nil}) + + lMsErroAuto := .F. + + if aFili[nI] == '0102' + + MSExecAuto({|x,y| FINA040(x,y)},aTitulo,3) //Inclusao + + If lMsErroAuto + fWrite(nFileLog,"Erro " + CRLF) + fWrite(nFileLog,"Erro ao incluir titulo: "+CRLF+ MSErroString()+ CRLF + tojson(aTitulo) + CRLF) + return + else + fWrite(nFileLog,"Sucesso "+ CRLF) + fWrite(nFileLog,"Titulo incluido: "+ aFili[nI] +" : " + cValToChar(nValPar) +CRLF) + endif + + elseif aFili[nI] == '0105' + fWrite(nFileLog,"Salvando titulos 05 para o final "+aFili[nI]+CRLF) + //StartJob("U_JOBF040",getenvserver(),.T., SE1ORIG->E1_FILIAL, aTitulo) + AADD(aTit05, aTitulo) + //fWrite(nFileLog,"passou pela thread "+CRLF) + else + fWrite(nFileLog,"Erro, filial nao tratada "+aFili[nI]+CRLF) + endif + + Next nI + + + Reset Environment + + While !RpcSetEnv('01', '0105',,,,GetEnvServer(),{}) + Sleep(400) + End + + For nI := 1 To len(aTit05) + + lMsErroAuto := .F. + + MSExecAuto({|x,y| FINA040(x,y)},aTit05[nI],3) //Inclusao + + If lMsErroAuto + fWrite(nFileLog,"Erro " + CRLF) + fWrite(nFileLog,"Erro ao incluir titulo: "+CRLF+ MSErroString()+ CRLF + tojson(aTit05[nI]) + CRLF) + return + else + fWrite(nFileLog,"Sucesso "+ CRLF) + fWrite(nFileLog,"Titulo incluido: "+CRLF) + endif + + Next nI + + Reset Environment + + fClose(nFileLog) + +Return + + + + +//////////////////////// +// Cancelamento da Fatura (Cancelamento do Reparcelamento) +// F280PCAN +// JOBF280C +// + +User Function F280PCAN() + + /** + * cFatCan - numero da fatura + * cPrefCan - prefixo + * cTipoCan - tipo + **/ + + If cEmpAnt == '06' + + StartJob("U_JOBF280C",getenvserver(),.T., cPrefCan, cFatCan, cTipoCan) + + EndIf + +Return .T. + + +User Function JOBF280C(cPrefCan, cFatCan, cTipoCan) + + RpcSetType(3) // Nao consome licensa + + While !RpcSetEnv('01', '0102',,,,GetEnvServer(),{}) + Sleep(400) + End + + nFileLog := u_OpenLog("\Logs\F280PCAN_"+dToS(dDataBase)+".log") + + fWrite(nFileLog,"----- F280PCAN -----"+CRLF) + + fWrite(nFileLog,"E1_PREFIXO = '"+ cPrefCan +"' and E1_NUM = '"+ cFatCan +"' and E1_TIPO = '"+ cTipoCan +"'"+CRLF) + + cQuery := "select * from SE1010 where E1_PREFIXO = '"+ cPrefCan +"' and E1_NUM = '"+ cFatCan +"' and E1_TIPO = '"+ cTipoCan +"' and D_E_L_E_T_ <> '*'" + + If select("SE1ORIG") > 0 + SE1ORIG->(DbCloseArea()) + endif + TcQuery cQuery New Alias 'SE1ORIG' + dbSelectArea("SE1ORIG") + SE1ORIG->(DBGOTOP()) + + While SE1ORIG->(!EOF()) //Loop entre todas as parcelas e filiais + + SE1->(dbselectarea("SE1")) + SE1->(dbSetOrder(1)) + + + fWrite(nFileLog,"dbseek" + CRLF) + if ! SE1->(dbSeek(SE1ORIG->E1_FILIAL+ SE1ORIG->E1_PREFIXO+ SE1ORIG->E1_NUM+ SE1ORIG->E1_PARCELA+ SE1ORIG->E1_TIPO)) + fWrite(nFileLog,"Erro dbseek" + CRLF) + Alert("Erro. Verificar F280PCAN() - dbseek") + fWrite(nFileLog,"Erro dbseek("+SE1ORIG->E1_FILIAL+ SE1ORIG->E1_PREFIXO+ SE1ORIG->E1_NUM+ SE1ORIG->E1_PARCELA+ SE1ORIG->E1_TIPO+")" + CRLF) + return .F. + endif + + cFilAnt := SE1ORIG->E1_FILIAL + + aFatura:= {{"E1_FILIAL" ,SE1ORIG->E1_FILIAL ,Nil},; + {"E1_PREFIXO" ,SE1ORIG->E1_PREFIXO ,Nil},; + {"E1_NUM" ,SE1ORIG->E1_NUM ,Nil},; + {"E1_PARCELA" ,SE1ORIG->E1_PARCELA ,Nil},; + {"E1_TIPO" ,SE1ORIG->E1_TIPO ,Nil}} + + lMsErroAuto := .F. + + MSExecAuto({|x,y| FINA040(x,y)},aFatura,5) //Exclus�o + + If lMsErroAuto + fWrite(nFileLog,"Erro " + CRLF) + fWrite(nFileLog,"Erro ao remover o titulo: "+CRLF+ MSErroString()+ CRLF + tojson(aFatura) + CRLF) + Alert("Erro ao remover o titulo. Verificar F280PCAN()") + return .F. + else + fWrite(nFileLog,"Sucesso "+ CRLF) + fWrite(nFileLog,"Titulo removido" +CRLF) + endif + + SE1ORIG->(dbskip()) + + end + + + ///////////////////////////////////////////// + /////// Cancela as baixas + /// + + fWrite(nFileLog,"- cancela baixas" + CRLF) + + cQuery := "select * from SE1060 where E1_FATURA = '"+ cFatCan +"' and D_E_L_E_T_ <> '*'" + + If select("SE1ORIG") > 0 + SE1ORIG->(DbCloseArea()) + endif + TcQuery cQuery New Alias 'SE1ORIG' + dbSelectArea("SE1ORIG") + SE1ORIG->(DBGOTOP()) + + aFili := {"0102", "0105"} + + While SE1ORIG->(!EOF()) //Loop entre todas as parcelas e filiais + + SE1->(dbselectarea("SE1")) + SE1->(dbSetOrder(1)) + + For nI := 1 To len(aFili) + + cFilAnt := aFili[nI] + + fWrite(nFileLog,"dbseek" + CRLF) + if ! SE1->(dbSeek(aFili[nI]+ SE1ORIG->E1_PREFIXO+ SE1ORIG->E1_NUM+ SE1ORIG->E1_PARCELA+ SE1ORIG->E1_TIPO)) + fWrite(nFileLog,"dbseek nao encontrou titulo para filial "+aFili[nI] + CRLF) + fWrite(nFileLog,"dbseek('"+aFili[nI]+ SE1ORIG->E1_PREFIXO+ SE1ORIG->E1_NUM+ SE1ORIG->E1_PARCELA+ SE1ORIG->E1_TIPO+"')" + CRLF) + LOOP + endif + + nSE5Recno := u_RetSQLOne("select R_E_C_N_O_ from SE5010 where E5_FILIAL = '"+SE1->E1_FILIAL+"' and E5_PREFIXO = '"+SE1->E1_PREFIXO+"' and E5_TIPO = '"+SE1->E1_TIPO+"' and E5_NUMERO = '"+SE1->E1_NUM+"' "+; + " and E5_FATURA = '"+SE1->E1_FATURA+"' and E5_FATPREF='"+SE1->E1_FATPREF+"' and D_E_L_E_T_ <> '*' ", "R_E_C_N_O_") + + //Removemos os Flags de Fatura para conseguirmos cancelar a baixa pelo FINA070 + RECLOCK('SE1',.F.) + E1_FATURA := '' + E1_FATPREF:= '' + E1_TIPOFAT:= '' + E1_FLAGFAT:= '' + E1_DTFATUR:= StoD('') + MSUNLOCK() + + SE5->(DbGoTo(nSE5Recno)) + RECLOCK('SE5',.F.) + E5_MOTBX := 'NOR' + //E5_FATURA := '' + //E5_FATPREF:= '' + MSUNLOCK() + + aBaixa := {{"E1_FILIAL" ,SE1->E1_FILIAL ,Nil},; + {"E1_PREFIXO" ,SE1->E1_PREFIXO ,Nil},; + {"E1_NUM" ,SE1->E1_NUM ,Nil},; + {"E1_TIPO" ,SE1->E1_TIPO ,Nil},; + {"E1_PARCELA" ,SE1->E1_PARCELA ,Nil},; + {"E1_DESCONT" ,SE1->E1_DESCONT ,Nil},; + {"E1_JUROS" ,SE1->E1_JUROS ,Nil},; + {"E1_MULTA" ,SE1->E1_MULTA ,Nil},; + {"E1_VLRREAL" ,SE1->E1_VLRREAL ,Nil},; + {"AUTMOTBX" ,"NOR" ,Nil},; + {"AUTDTBAIXA" ,date() ,Nil},; + {"AUTDTCREDITO",date() ,Nil},; + {"AUTHIST" ,"" ,Nil},; + {"AUTVALREC" ,SE1->E1_VALOR ,Nil}} + + + lMsErroAuto:=.F. //reseta lMsErroAuto + MSExecAuto ({|x,y| FINA070(x,y)},aBaixa, 5) + + If lMsErroAuto + fWrite(nFileLog,SE1->E1_FILIAL+" : Não foi efetuada o cancelamento de baixa : "+CRLF+ MSErroString()+ CRLF + tojson(aBaixa) + CRLF) + return + else + fWrite(nFileLog,SE1->E1_FILIAL+" : cancelamento de baixa feito" +CRLF) + endif + + Next nI + + SE1ORIG->(dbskip()) + end + + Reset Environment + +Return From f42afef6e09d3b431f1fbf092ed183abe7c25150 Mon Sep 17 00:00:00 2001 From: Arthur Helfstein Fragoso Date: Wed, 5 Aug 2015 05:58:02 -0300 Subject: [PATCH 057/356] order - .prw should come after .ch 1) Failure: TestPedantic#test_extensions_are_sorted [/home/arthur/Projects/linguist/test/test_pedantic.rb:15]: .prw should come after .ch --- lib/linguist/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 1b31c0bb..774fd3dd 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3828,7 +3828,7 @@ xBase: - foxpro extensions: - .prg - - .prw - .ch + - .prw tm_scope: source.harbour ace_mode: text From bc747844ea2a594ce533eeeb18676cfea230936c Mon Sep 17 00:00:00 2001 From: Berkeley Martinez Date: Wed, 5 Aug 2015 12:22:21 -0700 Subject: [PATCH 058/356] Add codemirror's demo directory This accounts for about ~150 html files throwing off the statistics of one of my projects --- lib/linguist/vendor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml index e9af74e6..e432af3c 100644 --- a/lib/linguist/vendor.yml +++ b/lib/linguist/vendor.yml @@ -122,7 +122,7 @@ - (^|/)Chart\.js$ # Codemirror -- (^|/)[Cc]ode[Mm]irror/(lib|mode|theme|addon|keymap) +- (^|/)[Cc]ode[Mm]irror/(lib|mode|theme|addon|keymap|demo) # SyntaxHighlighter - http://alexgorbatchev.com/ - (^|/)shBrush([^.]*)\.js$ From 3441a001c7ed6cb86c5158d795d234a6eb1a705d Mon Sep 17 00:00:00 2001 From: Roger Ignazio Date: Wed, 5 Aug 2015 14:00:08 -0700 Subject: [PATCH 059/356] Modify Puppet color based on style guide Prior to this commit, the Puppet language was colored to #332A77. The Puppet Labs style guide (https://puppetlabs.com/styleguide/brand) specifies Puppet Dark Purple to be #302B6D. Alternately, Puppet Purple, a lighter variant, may be used: #7C6AAB. Keeping with the dark purple theme, this commit modifies the Puppet language to use Puppet Dark Purple, hex #302B6D. --- lib/linguist/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 774fd3dd..33efb842 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2653,7 +2653,7 @@ Public Key: Puppet: type: programming - color: "#332A77" + color: "#302B6D" extensions: - .pp filenames: From f072cd96e3e9b4ffe45a3ed9f2ce37eef6e2a0eb Mon Sep 17 00:00:00 2001 From: Roger Ignazio Date: Wed, 5 Aug 2015 14:02:09 -0700 Subject: [PATCH 060/356] Add hiera_include() sample for the Puppet language Prior to this commit, some Puppet files were being incorrectly identified as Pascal when they contained only the following content: hiera_include('classes') This commit adds a hiera_include() sample to for the Puppet language to correct this behavior. --- samples/Puppet/hiera_include.pp | 1 + 1 file changed, 1 insertion(+) create mode 100644 samples/Puppet/hiera_include.pp diff --git a/samples/Puppet/hiera_include.pp b/samples/Puppet/hiera_include.pp new file mode 100644 index 00000000..7959e7b1 --- /dev/null +++ b/samples/Puppet/hiera_include.pp @@ -0,0 +1 @@ +hiera_include('classes') From dc0ddc82d66964354ab81272f478c2d4ba2b75e0 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Thu, 6 Aug 2015 10:08:30 +0200 Subject: [PATCH 061/356] Filename Makefile.inc for Makefile --- lib/linguist/languages.yml | 1 + samples/Makefile/filenames/Makefile.inc | 31 +++++++++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 samples/Makefile/filenames/Makefile.inc diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 774fd3dd..952aa6b2 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1933,6 +1933,7 @@ Makefile: - GNUmakefile - Kbuild - Makefile + - Makefile.inc - makefile interpreters: - make diff --git a/samples/Makefile/filenames/Makefile.inc b/samples/Makefile/filenames/Makefile.inc new file mode 100644 index 00000000..cc927063 --- /dev/null +++ b/samples/Makefile/filenames/Makefile.inc @@ -0,0 +1,31 @@ +# $OpenBSD: Makefile.inc,v 1.2 2003/11/14 20:09:20 drahn Exp $ +# $NetBSD: Makefile.inc,v 1.1 1996/09/30 16:34:59 ws Exp $ + +.if !defined(__stand_makefile_inc) +__stand_makefile_inc=1 + +KERN_AS= library + +S=$(.CURDIR)/../../../$(R) + +.if !make(libdep) && !make(sadep) && !make(salibdir) && !make(kernlibdir) && !make(obj) && !defined(NOMACHINE) +.BEGIN: + @([ -h machine ] || ln -s $(S)/arch/$(MACHINE)/include machine) +.endif + +# +EXTRACFLAGS= -msoft-float +REAL_VIRT?= -v +ENTRY?= _start + +INCLUDES+= -I. -I$(.OBJDIR) -I$(.CURDIR)/.. -I$(S)/arch -I$(S) +INCLUDES+= -I$(S)/lib/libsa +DEFS+= -DSTANDALONE +CFLAGS+= $(INCLUDES) $(DEFS) $(EXTRACFLAGS) +CFLAGS+= -fno-stack-protector +LDFLAGS?= -X -N -Ttext $(RELOC) -e $(ENTRY) + +cleandir: + rm -rf lib machine + +.endif From fd570d906a17c05e43bc110ca830737af7a769d0 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Fri, 7 Aug 2015 10:35:18 +0100 Subject: [PATCH 062/356] Adding examples path to documentation.yml --- lib/linguist/documentation.yml | 1 + test/test_blob.rb | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/lib/linguist/documentation.yml b/lib/linguist/documentation.yml index f95a547d..cd6d2074 100644 --- a/lib/linguist/documentation.yml +++ b/lib/linguist/documentation.yml @@ -13,6 +13,7 @@ - (^|/)[Dd]ocumentation/ - (^|/)javadoc/ - ^man/ +- ^[Ee]xamples/ ## Documentation files ## diff --git a/test/test_blob.rb b/test/test_blob.rb index 976c83ff..691b2149 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -517,7 +517,7 @@ class TestBlob < Minitest::Test assert_predicate fixture_blob("CHANGE.md"), :documentation? assert_predicate fixture_blob("CHANGE.txt"), :documentation? assert_predicate fixture_blob("foo/CHANGE"), :documentation? - + assert_predicate fixture_blob("CHANGELOG"), :documentation? assert_predicate fixture_blob("CHANGELOG.md"), :documentation? assert_predicate fixture_blob("CHANGELOG.txt"), :documentation? @@ -526,13 +526,16 @@ class TestBlob < Minitest::Test assert_predicate fixture_blob("CHANGES"), :documentation? assert_predicate fixture_blob("CHANGES.md"), :documentation? assert_predicate fixture_blob("CHANGES.txt"), :documentation? - assert_predicate fixture_blob("foo/CHANGES"), :documentation? - + assert_predicate fixture_blob("foo/CHANGES"), :documentation? + assert_predicate fixture_blob("CONTRIBUTING"), :documentation? assert_predicate fixture_blob("CONTRIBUTING.md"), :documentation? assert_predicate fixture_blob("CONTRIBUTING.txt"), :documentation? assert_predicate fixture_blob("foo/CONTRIBUTING"), :documentation? + assert_predicate fixture_blob("examples/some-file.pl"), :documentation? + assert_predicate fixture_blob("Examples/some-example-file.rb"), :documentation? + assert_predicate fixture_blob("LICENSE"), :documentation? assert_predicate fixture_blob("LICENCE.md"), :documentation? assert_predicate fixture_blob("LICENSE.txt"), :documentation? From 5d5550c48bac3a64ff0a729548f2a7b18f30e2e6 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Fri, 7 Aug 2015 10:42:31 +0100 Subject: [PATCH 063/356] Moving vendored definitions to documentation --- lib/linguist/documentation.yml | 3 +++ lib/linguist/vendor.yml | 17 ++++------------- test/test_blob.rb | 14 +++++++++++--- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/lib/linguist/documentation.yml b/lib/linguist/documentation.yml index cd6d2074..04649b5b 100644 --- a/lib/linguist/documentation.yml +++ b/lib/linguist/documentation.yml @@ -23,3 +23,6 @@ - (^|/)INSTALL(\.|$) - (^|/)LICEN[CS]E(\.|$) - (^|/)README(\.|$) + +# Samples folders +- ^[Ss]amples/ diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml index e432af3c..ed89eda8 100644 --- a/lib/linguist/vendor.yml +++ b/lib/linguist/vendor.yml @@ -179,6 +179,10 @@ # Fabric - Fabric.framework/ +# git config files +- gitattributes$ +- gitignore$ +- gitmodules$ ## Groovy ## @@ -224,19 +228,6 @@ # Html5shiv - (^|/)html5shiv\.js$ -# Samples folders -- ^[Ss]amples/ - -# LICENSE, README, git config files -- ^COPYING$ -- LICENSE$ -- License$ -- gitattributes$ -- gitignore$ -- gitmodules$ -- ^README$ -- ^readme$ - # Test fixtures - ^[Tt]ests?/fixtures/ diff --git a/test/test_blob.rb b/test/test_blob.rb index 691b2149..6c705379 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -308,6 +308,12 @@ class TestBlob < Minitest::Test # Erlang assert sample_blob("rebar").vendored? + # git config files + + assert_predicate fixture_blob("some/path/.gitattributes"), :vendored? + assert_predicate fixture_blob(".gitignore"), :vendored? + assert_predicate fixture_blob("special/path/.gitmodules"), :vendored? + # Minified JavaScript and CSS assert sample_blob("foo.min.js").vendored? assert sample_blob("foo.min.css").vendored? @@ -326,9 +332,6 @@ class TestBlob < Minitest::Test assert sample_blob("public/javascripts/controls.js").vendored? assert sample_blob("public/javascripts/dragdrop.js").vendored? - # Samples - assert sample_blob("Samples/Ruby/foo.rb").vendored? - # jQuery assert sample_blob("jquery.js").vendored? assert sample_blob("public/javascripts/jquery.js").vendored? @@ -552,6 +555,11 @@ class TestBlob < Minitest::Test assert_predicate fixture_blob("foo/INSTALL"), :documentation? refute_predicate fixture_blob("foo.md"), :documentation? + + # Samples + assert sample_blob("Samples/Ruby/foo.rb").documentation? + + assert_predicate fixture_blob("INSTALL.txt"), :documentation? end def test_language From 11f158cbb31e911e41a405e01042a9ab594a93c7 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Fri, 7 Aug 2015 11:12:30 -0700 Subject: [PATCH 064/356] Highlight Brewfile as Ruby --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index e05e13a1..d4d4f477 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2934,6 +2934,7 @@ Ruby: - .pryrc - Appraisals - Berksfile + - Brewfile - Buildfile - Deliverfile - Fastfile From 7a811e39e045faf08fc880f02bc3eee523385e26 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Fri, 7 Aug 2015 14:01:08 -0700 Subject: [PATCH 065/356] Add sample Brewfile --- samples/Ruby/filenames/Brewfile | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 samples/Ruby/filenames/Brewfile diff --git a/samples/Ruby/filenames/Brewfile b/samples/Ruby/filenames/Brewfile new file mode 100644 index 00000000..d8448e68 --- /dev/null +++ b/samples/Ruby/filenames/Brewfile @@ -0,0 +1,9 @@ +tap 'caskroom/cask' +tap 'telemachus/brew', 'https://telemachus@bitbucket.org/telemachus/brew.git' +brew 'emacs', args: ['with-cocoa', 'with-gnutls'] +brew 'redis', restart_service: true +brew 'mongodb' +brew 'sphinx' +brew 'imagemagick' +brew 'mysql' +cask 'google-chrome' From 54a2a47bc06af4bc45270e7be6a76eeb8bf8130d Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Sun, 9 Aug 2015 14:11:01 +0200 Subject: [PATCH 066/356] YAML-tmLanguage extension for YAML --- lib/linguist/languages.yml | 1 + samples/YAML/Ansible.YAML-tmLanguage | 38 ++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 samples/YAML/Ansible.YAML-tmLanguage diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 952aa6b2..db92065d 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3719,6 +3719,7 @@ YAML: - .reek - .rviz - .yaml + - .yaml-tmlanguage ace_mode: yaml Yacc: diff --git a/samples/YAML/Ansible.YAML-tmLanguage b/samples/YAML/Ansible.YAML-tmLanguage new file mode 100644 index 00000000..307696b3 --- /dev/null +++ b/samples/YAML/Ansible.YAML-tmLanguage @@ -0,0 +1,38 @@ +# [PackageDev] target_format: plist, ext: tmLanguage +--- +name: Ansible +scopeName: source.ansible +fileTypes: [] +uuid: 787ae642-b4ae-48b1-94e9-f935bec43a8f + +patterns: +- name: comment.line.number-sign.ansible + match: (?:^ *|\G *)((#).*) + captures: + '1': {name: comment.line.number-sign.ansible} + '2': {name: punctuation.definition.comment.line.ansible} + +- name: storage.type.ansible + match: (\{\{ *[^\{\}]+ *\}\})|(\$\{[^\{\}]+\}) + +- name: keyword.other.ansible + match: \- (name\:|include\:) (.*)|(^(- |\s*)\w+\:) + captures: + '2': {name: string.quoted.double.ansible} + +- name: variable.complex.ansible + contentName: string.other.ansible + begin: (\w+)(=)\"? + beginCaptures: + '1': {name: entity.other.attribute-name.ansible} + '2': {name: text} + end: \"?\s + patterns: + - include: $self + - name: constant.other.ansible + match: . + +- name: string.quoted.double.ansible + match: ^(\[[0-9a-zA-Z_-]+(((\:)children)*)\]) + captures: + '2': {name: variable.parameter.ansible} From 88b14ed455b98ef08eedd107b5d6a757d1c70523 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Sun, 9 Aug 2015 14:13:48 +0200 Subject: [PATCH 067/356] .syntax extension for YAML --- lib/linguist/languages.yml | 1 + samples/YAML/source.r-console.syntax | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 samples/YAML/source.r-console.syntax diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index db92065d..812b6f04 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3718,6 +3718,7 @@ YAML: - .yml - .reek - .rviz + - .syntax - .yaml - .yaml-tmlanguage ace_mode: yaml diff --git a/samples/YAML/source.r-console.syntax b/samples/YAML/source.r-console.syntax new file mode 100644 index 00000000..5c3eec39 --- /dev/null +++ b/samples/YAML/source.r-console.syntax @@ -0,0 +1,16 @@ +--- +name: R Console +fileTypes: [] + +scopeName: source.r-console +uuid: F629C7F3-823B-4A4C-8EEE-9971490C5710 +patterns: +- name: source.r.embedded.r-console + begin: "^> " + beginCaptures: + "0": + name: punctuation.section.embedded.r-console + end: \n|\z + patterns: + - include: source.r +keyEquivalent: ^~R From 4650368bc224804de85a451e0a3b0db3c432f829 Mon Sep 17 00:00:00 2001 From: Ammar Askar Date: Mon, 10 Aug 2015 00:38:24 -0500 Subject: [PATCH 068/356] Make regex for vim modeline more lenient This change allows the filetype/language to be retrieved from more complex vim modelines. The current regex strictly allows a set line which contains only the filetype/ft parameter and nothing else --- lib/linguist/strategy/modeline.rb | 2 +- test/fixtures/Data/Modelines/ruby2 | 3 +++ test/fixtures/Data/Modelines/ruby3 | 3 +++ test/test_modelines.rb | 4 ++++ 4 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/Data/Modelines/ruby2 create mode 100644 test/fixtures/Data/Modelines/ruby3 diff --git a/lib/linguist/strategy/modeline.rb b/lib/linguist/strategy/modeline.rb index 44155fc3..f995d940 100644 --- a/lib/linguist/strategy/modeline.rb +++ b/lib/linguist/strategy/modeline.rb @@ -2,7 +2,7 @@ module Linguist module Strategy class Modeline EmacsModeline = /-\*-\s*(?:(?!mode)[\w-]+\s*:\s*(?:[\w+-]+)\s*;?\s*)*(?:mode\s*:)?\s*([\w+-]+)\s*(?:;\s*(?!mode)[\w-]+\s*:\s*[\w+-]+\s*)*;?\s*-\*-/i - VimModeline = /vim:\s*set\s*(?:ft|filetype)=(\w+):/i + VimModeline = /vim:\s*set.*\s(?:ft|filetype)=(\w+)\s?.*:/i # Public: Detects language based on Vim and Emacs modelines # diff --git a/test/fixtures/Data/Modelines/ruby2 b/test/fixtures/Data/Modelines/ruby2 new file mode 100644 index 00000000..75177db1 --- /dev/null +++ b/test/fixtures/Data/Modelines/ruby2 @@ -0,0 +1,3 @@ +/* vim: set ts=8 sw=4 filetype=ruby tw=0: */ + +# Please help how do I into setting vim modlines diff --git a/test/fixtures/Data/Modelines/ruby3 b/test/fixtures/Data/Modelines/ruby3 new file mode 100644 index 00000000..003f71fe --- /dev/null +++ b/test/fixtures/Data/Modelines/ruby3 @@ -0,0 +1,3 @@ +/* vim: set ft=ruby ts=8 sw=4 tw=0: */ + +# I am not good at humor diff --git a/test/test_modelines.rb b/test/test_modelines.rb index a2be5d3b..fd259782 100644 --- a/test/test_modelines.rb +++ b/test/test_modelines.rb @@ -9,6 +9,8 @@ class TestModelines < Minitest::Test def test_modeline_strategy assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby") + assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby2") + assert_modeline Language["Ruby"], fixture_blob("Data/Modelines/ruby3") assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplus") assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs1") assert_modeline Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs2") @@ -27,6 +29,8 @@ class TestModelines < Minitest::Test def test_modeline_languages assert_equal Language["Ruby"], fixture_blob("Data/Modelines/ruby").language + assert_equal Language["Ruby"], fixture_blob("Data/Modelines/ruby2").language + assert_equal Language["Ruby"], fixture_blob("Data/Modelines/ruby3").language assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplus").language assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs1").language assert_equal Language["C++"], fixture_blob("Data/Modelines/seeplusplusEmacs2").language From 18ffdbaa65342c6d935a2a885539db29d0ef0bfb Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Mon, 10 Aug 2015 15:07:27 +0100 Subject: [PATCH 069/356] Grammar updates --- vendor/grammars/Elm.tmLanguage | 2 +- vendor/grammars/InnoSetup | 2 +- vendor/grammars/factor | 2 +- vendor/grammars/haxe-sublime-bundle | 2 +- vendor/grammars/language-javascript | 2 +- vendor/grammars/llvm.tmbundle | 2 +- vendor/grammars/php.tmbundle | 2 +- vendor/grammars/sublime-better-typescript | 2 +- vendor/grammars/vue-syntax-highlight | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/vendor/grammars/Elm.tmLanguage b/vendor/grammars/Elm.tmLanguage index 8137f5a4..e9fda7c7 160000 --- a/vendor/grammars/Elm.tmLanguage +++ b/vendor/grammars/Elm.tmLanguage @@ -1 +1 @@ -Subproject commit 8137f5a48c76c4303394d7da6f3a19bf61056cc6 +Subproject commit e9fda7c70f1bb8da8275b108420d8c492114b342 diff --git a/vendor/grammars/InnoSetup b/vendor/grammars/InnoSetup index e7ca1ee0..3906a8d2 160000 --- a/vendor/grammars/InnoSetup +++ b/vendor/grammars/InnoSetup @@ -1 +1 @@ -Subproject commit e7ca1ee0dd99a022dd0bd679f9bdad7cd610432e +Subproject commit 3906a8d2fbc2fd197373113536d8deb28d05ee4c diff --git a/vendor/grammars/factor b/vendor/grammars/factor index abb8bd74..49621511 160000 --- a/vendor/grammars/factor +++ b/vendor/grammars/factor @@ -1 +1 @@ -Subproject commit abb8bd74b97d7ed84ca0cd7bf03f8280f27682af +Subproject commit 496215111189a942cd5310635d71d00d1dc1d2c9 diff --git a/vendor/grammars/haxe-sublime-bundle b/vendor/grammars/haxe-sublime-bundle index c1ef469b..102acf66 160000 --- a/vendor/grammars/haxe-sublime-bundle +++ b/vendor/grammars/haxe-sublime-bundle @@ -1 +1 @@ -Subproject commit c1ef469bf3b1166180f64343f47d6cee73ddd4fa +Subproject commit 102acf66b921526401ce76f0a74c7f94edaca678 diff --git a/vendor/grammars/language-javascript b/vendor/grammars/language-javascript index 2766ff30..1aaf2ff8 160000 --- a/vendor/grammars/language-javascript +++ b/vendor/grammars/language-javascript @@ -1 +1 @@ -Subproject commit 2766ff3052615016e53298ee715e221cd740b5a3 +Subproject commit 1aaf2ff8eff25073dad9e81dde48ed05537f2a97 diff --git a/vendor/grammars/llvm.tmbundle b/vendor/grammars/llvm.tmbundle index 9e3705a6..203c955a 160000 --- a/vendor/grammars/llvm.tmbundle +++ b/vendor/grammars/llvm.tmbundle @@ -1 +1 @@ -Subproject commit 9e3705a6e2bd51ae01d3963dd08bc42fc05d647f +Subproject commit 203c955af9c8c48c2bb3808a9ebb547ce3cead1c diff --git a/vendor/grammars/php.tmbundle b/vendor/grammars/php.tmbundle index 1cba1ac4..baad8758 160000 --- a/vendor/grammars/php.tmbundle +++ b/vendor/grammars/php.tmbundle @@ -1 +1 @@ -Subproject commit 1cba1ac4a9ffa301b1d92b735c298fcb60cc3e3a +Subproject commit baad875878c402b7b404a63616531644e538bf0c diff --git a/vendor/grammars/sublime-better-typescript b/vendor/grammars/sublime-better-typescript index 8c0bd800..8266c06a 160000 --- a/vendor/grammars/sublime-better-typescript +++ b/vendor/grammars/sublime-better-typescript @@ -1 +1 @@ -Subproject commit 8c0bd800d91a1c032f81d17055150482262085b5 +Subproject commit 8266c06aabe5e473766bd9bb62dfeb106fe296a2 diff --git a/vendor/grammars/vue-syntax-highlight b/vendor/grammars/vue-syntax-highlight index b98484e7..7d35a53e 160000 --- a/vendor/grammars/vue-syntax-highlight +++ b/vendor/grammars/vue-syntax-highlight @@ -1 +1 @@ -Subproject commit b98484e787c8658c91832674dbd36c3c23277234 +Subproject commit 7d35a53e7e4380f01340ca5f508e9a8f8bc69ef0 From 851c93a1f7024dbede688829cafcf981f0a87213 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Mon, 10 Aug 2015 22:07:28 +0100 Subject: [PATCH 070/356] Don't blow up if empty string/nil passed to alias methods --- lib/linguist/language.rb | 2 ++ test/test_language.rb | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index 05c5f802..bc65a053 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -150,6 +150,7 @@ module Linguist # # Returns the Language or nil if none was found. def self.find_by_name(name) + return nil if name.to_s.empty? name && (@name_index[name.downcase] || @name_index[name.split(',').first.downcase]) end @@ -164,6 +165,7 @@ module Linguist # # Returns the Language or nil if none was found. def self.find_by_alias(name) + return nil if name.to_s.empty? name && (@alias_index[name.downcase] || @alias_index[name.split(',').first.downcase]) end diff --git a/test/test_language.rb b/test/test_language.rb index 3d1fd66c..176abac4 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -275,6 +275,11 @@ class TestLanguage < Minitest::Test assert_equal Language['Rust'], Language.find_by_alias('rust,no_run') end + def test_doesnt_blow_up_with_blank_lookup + assert_equal nil, Language.find_by_alias('') + assert_equal nil, Language.find_by_name(nil) + end + def test_name assert_equal 'Perl', Language['Perl'].name assert_equal 'Python', Language['Python'].name From 997c0fca10801af01f5de613ba1c2dbda82ef6fb Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 11 Aug 2015 06:48:54 +0100 Subject: [PATCH 071/356] Catching one more edge case --- lib/linguist/language.rb | 1 + test/test_language.rb | 1 + 2 files changed, 2 insertions(+) diff --git a/lib/linguist/language.rb b/lib/linguist/language.rb index bc65a053..07585bb0 100644 --- a/lib/linguist/language.rb +++ b/lib/linguist/language.rb @@ -242,6 +242,7 @@ module Linguist # # Returns the Language or nil if none was found. def self.[](name) + return nil if name.to_s.empty? name && (@index[name.downcase] || @index[name.split(',').first.downcase]) end diff --git a/test/test_language.rb b/test/test_language.rb index 176abac4..5da3b8c7 100644 --- a/test/test_language.rb +++ b/test/test_language.rb @@ -278,6 +278,7 @@ class TestLanguage < Minitest::Test def test_doesnt_blow_up_with_blank_lookup assert_equal nil, Language.find_by_alias('') assert_equal nil, Language.find_by_name(nil) + assert_equal nil, Language[""] end def test_name From d9509a1750cc87ce5a3b1e72028294bf5dbfa784 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 11 Aug 2015 07:01:05 +0100 Subject: [PATCH 072/356] Bumping version to v4.5.13 --- lib/linguist/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index 0265e2b0..f46a86f2 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.5.11" + VERSION = "4.5.13" end From 8d20c1fb593fc57b485a8641c618ddc161196683 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 11 Aug 2015 09:39:41 +0100 Subject: [PATCH 073/356] More inclusive documentation matches for License and Readme files --- lib/linguist/documentation.yml | 2 ++ test/test_blob.rb | 3 +++ 2 files changed, 5 insertions(+) diff --git a/lib/linguist/documentation.yml b/lib/linguist/documentation.yml index 04649b5b..230cd423 100644 --- a/lib/linguist/documentation.yml +++ b/lib/linguist/documentation.yml @@ -22,7 +22,9 @@ - (^|/)COPYING(\.|$) - (^|/)INSTALL(\.|$) - (^|/)LICEN[CS]E(\.|$) +- (^|/)[Ll]icen[cs]e(\.|$) - (^|/)README(\.|$) +- (^|/)[Rr]eadme(\.|$) # Samples folders - ^[Ss]amples/ diff --git a/test/test_blob.rb b/test/test_blob.rb index 6c705379..0a1cefe9 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -514,6 +514,8 @@ class TestBlob < Minitest::Test assert_predicate fixture_blob("README"), :documentation? assert_predicate fixture_blob("README.md"), :documentation? assert_predicate fixture_blob("README.txt"), :documentation? + assert_predicate fixture_blob("Readme"), :documentation? + assert_predicate fixture_blob("readme"), :documentation? assert_predicate fixture_blob("foo/README"), :documentation? assert_predicate fixture_blob("CHANGE"), :documentation? @@ -541,6 +543,7 @@ class TestBlob < Minitest::Test assert_predicate fixture_blob("LICENSE"), :documentation? assert_predicate fixture_blob("LICENCE.md"), :documentation? + assert_predicate fixture_blob("License.txt"), :documentation? assert_predicate fixture_blob("LICENSE.txt"), :documentation? assert_predicate fixture_blob("foo/LICENSE"), :documentation? From bea90b256ec84a6f92d07d0b4b026f9fbcedf86c Mon Sep 17 00:00:00 2001 From: Andrew Pennebaker Date: Tue, 11 Aug 2015 14:01:45 -0500 Subject: [PATCH 074/356] use st2-zonefile (MIT licensed) instead of Bind.tmbundle (unlicensed) --- .gitmodules | 6 +++--- grammars.yml | 2 +- st2-zonefile | 1 + vendor/grammars/st2-zonefile | 1 + 4 files changed, 6 insertions(+), 4 deletions(-) create mode 160000 st2-zonefile create mode 160000 vendor/grammars/st2-zonefile diff --git a/.gitmodules b/.gitmodules index cfaf6c66..0931bc8c 100644 --- a/.gitmodules +++ b/.gitmodules @@ -657,6 +657,6 @@ [submodule "vendor/grammars/jflex.tmbundle"] path = vendor/grammars/jflex.tmbundle url = https://github.com/jflex-de/jflex.tmbundle.git -[submodule "vendor/grammars/Bind.tmbundle"] - path = vendor/grammars/Bind.tmbundle - url = https://github.com/norm/Bind.tmbundle.git +[submodule "vendor/grammars/st2-zonefile"] + path = vendor/grammars/st2-zonefile + url = https://github.com/sixty4k/st2-zonefile diff --git a/grammars.yml b/grammars.yml index 13b63cf6..4f9f7f35 100644 --- a/grammars.yml +++ b/grammars.yml @@ -26,7 +26,7 @@ vendor/grammars/Alloy.tmbundle: - source.alloy vendor/grammars/AutoHotkey/: - source.ahk -vendor/grammars/Bind.tmbundle: +vendor/grammars/st2-zonefile: - source.untitled - text.zone vendor/grammars/BrightScript.tmbundle/: diff --git a/st2-zonefile b/st2-zonefile new file mode 160000 index 00000000..0d943fef --- /dev/null +++ b/st2-zonefile @@ -0,0 +1 @@ +Subproject commit 0d943fefb815262804f0ae309b08221f34eda054 diff --git a/vendor/grammars/st2-zonefile b/vendor/grammars/st2-zonefile new file mode 160000 index 00000000..0d943fef --- /dev/null +++ b/vendor/grammars/st2-zonefile @@ -0,0 +1 @@ +Subproject commit 0d943fefb815262804f0ae309b08221f34eda054 From 4f5825818642044970456fb2a87434659ca8fa69 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Wed, 12 Aug 2015 17:05:57 +0100 Subject: [PATCH 075/356] Removing erroneous submodule --- st2-zonefile | 1 - 1 file changed, 1 deletion(-) delete mode 160000 st2-zonefile diff --git a/st2-zonefile b/st2-zonefile deleted file mode 160000 index 0d943fef..00000000 --- a/st2-zonefile +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 0d943fefb815262804f0ae309b08221f34eda054 From 60e90bab23a030b30345d47e2ee8d5a0436b4d84 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Wed, 12 Aug 2015 17:06:39 +0100 Subject: [PATCH 076/356] Removing un-used Bind bundle --- vendor/grammars/Bind.tmbundle | 1 - 1 file changed, 1 deletion(-) delete mode 160000 vendor/grammars/Bind.tmbundle diff --git a/vendor/grammars/Bind.tmbundle b/vendor/grammars/Bind.tmbundle deleted file mode 160000 index ccc1e271..00000000 --- a/vendor/grammars/Bind.tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ccc1e2711a1238378b62d4045edae3f60679b703 From 7cf140940e5fcbbce8fe4706debd90acbf20cab4 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Wed, 12 Aug 2015 17:20:29 +0100 Subject: [PATCH 077/356] Fixing up the build --- grammars.yml | 5 ++--- lib/linguist/languages.yml | 14 +++++++------- samples/{zone => DNS Zone}/sneaky.net.zone | 0 3 files changed, 9 insertions(+), 10 deletions(-) rename samples/{zone => DNS Zone}/sneaky.net.zone (100%) diff --git a/grammars.yml b/grammars.yml index 5b2d376c..4da6c0e2 100644 --- a/grammars.yml +++ b/grammars.yml @@ -26,9 +26,6 @@ vendor/grammars/Alloy.tmbundle: - source.alloy vendor/grammars/AutoHotkey/: - source.ahk -vendor/grammars/st2-zonefile: -- source.untitled -- text.zone vendor/grammars/BrightScript.tmbundle/: - source.brightauthorproject - source.brightscript @@ -473,6 +470,8 @@ vendor/grammars/smalltalk-tmbundle: - source.smalltalk vendor/grammars/sql.tmbundle: - source.sql +vendor/grammars/st2-zonefile: +- text.zone_file vendor/grammars/standard-ml.tmbundle: - source.cm - source.ml diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 71ffe7d8..99a8a19d 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -750,6 +750,13 @@ DM: tm_scope: source.c++ ace_mode: c_cpp +DNS Zone: + type: data + extensions: + - .zone + tm_scope: text.zone_file + ace_mode: text + DTrace: type: programming aliases: @@ -790,13 +797,6 @@ Diff: tm_scope: source.diff ace_mode: diff -DNS zone: - type: data - extensions: - - .zone - tm_scope: text.zone - ace_mode: text - Dockerfile: type: data tm_scope: source.dockerfile diff --git a/samples/zone/sneaky.net.zone b/samples/DNS Zone/sneaky.net.zone similarity index 100% rename from samples/zone/sneaky.net.zone rename to samples/DNS Zone/sneaky.net.zone From 6a565a849be92a4e641dd5aca0668f6f32d53c60 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Thu, 13 Aug 2015 07:38:17 +0200 Subject: [PATCH 078/356] Add .arpa to DNS Zone. sample.arpa by Freeswitch project; Mozilla Public License 1.1. --- lib/linguist/languages.yml | 1 + samples/DNS Zone/sample.arpa | 13 +++++++++++++ 2 files changed, 14 insertions(+) create mode 100644 samples/DNS Zone/sample.arpa diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 99a8a19d..3ff88a03 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -754,6 +754,7 @@ DNS Zone: type: data extensions: - .zone + - .arpa tm_scope: text.zone_file ace_mode: text diff --git a/samples/DNS Zone/sample.arpa b/samples/DNS Zone/sample.arpa new file mode 100644 index 00000000..e48ecffe --- /dev/null +++ b/samples/DNS Zone/sample.arpa @@ -0,0 +1,13 @@ +$ORIGIN 0.0.0.c.2.1.0.3.0.0.2.1.e.f.f.3.ip6.arpa. +$TTL 60 +@ IN SOA ns root ( + 2002042901 ; SERIAL + 7200 ; REFRESH + 600 ; RETRY + 36000000 ; EXPIRE + 120 ; MINIMUM + ) + + NS ns.example.com. + +c.a.7.e.d.7.e.f.f.f.0.2.8.0.a.0 PTR sip01.example.com. From 7f5bb25542db166cc8b9232fe0cf18484efd709f Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Thu, 13 Aug 2015 16:56:21 +0200 Subject: [PATCH 079/356] Remove grammar for Prolog from TextMate bundle --- .gitmodules | 3 --- grammars.yml | 2 -- vendor/grammars/prolog.tmbundle | 1 - 3 files changed, 6 deletions(-) delete mode 160000 vendor/grammars/prolog.tmbundle diff --git a/.gitmodules b/.gitmodules index f4238e8b..aff647b7 100644 --- a/.gitmodules +++ b/.gitmodules @@ -397,9 +397,6 @@ [submodule "vendor/grammars/processing.tmbundle"] path = vendor/grammars/processing.tmbundle url = https://github.com/textmate/processing.tmbundle -[submodule "vendor/grammars/prolog.tmbundle"] - path = vendor/grammars/prolog.tmbundle - url = https://github.com/textmate/prolog.tmbundle [submodule "vendor/grammars/python-django.tmbundle"] path = vendor/grammars/python-django.tmbundle url = https://github.com/textmate/python-django.tmbundle diff --git a/grammars.yml b/grammars.yml index 4da6c0e2..33880871 100644 --- a/grammars.yml +++ b/grammars.yml @@ -431,8 +431,6 @@ vendor/grammars/powershell: - source.powershell vendor/grammars/processing.tmbundle: - source.processing -vendor/grammars/prolog.tmbundle: -- source.prolog vendor/grammars/protobuf-tmbundle: - source.protobuf vendor/grammars/puppet-textmate-bundle: diff --git a/vendor/grammars/prolog.tmbundle b/vendor/grammars/prolog.tmbundle deleted file mode 160000 index d955aca3..00000000 --- a/vendor/grammars/prolog.tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d955aca38b7aadce76e6815eb09487a370206742 From 8d216f0c43a21e6f5d3d4ac1a45aec40fc19b959 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Thu, 13 Aug 2015 17:15:04 +0200 Subject: [PATCH 080/356] Grammar for Prolog from Sublime Text package MPLv2 License is currently unrecognized --- .gitmodules | 3 +++ grammars.yml | 3 +++ lib/linguist/languages.yml | 1 + vendor/grammars/sublimeprolog | 1 + 4 files changed, 8 insertions(+) create mode 160000 vendor/grammars/sublimeprolog diff --git a/.gitmodules b/.gitmodules index aff647b7..566254e5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -668,3 +668,6 @@ [submodule "vendor/grammars/st2-zonefile"] path = vendor/grammars/st2-zonefile url = https://github.com/sixty4k/st2-zonefile +[submodule "vendor/grammars/sublimeprolog"] + path = vendor/grammars/sublimeprolog + url = https://github.com/alnkpa/sublimeprolog diff --git a/grammars.yml b/grammars.yml index 33880871..0de7915f 100644 --- a/grammars.yml +++ b/grammars.yml @@ -529,6 +529,9 @@ vendor/grammars/sublime_cobol: vendor/grammars/sublime_man_page_support: - source.man - text.groff +vendor/grammars/sublimeprolog/: +- source.prolog +- source.prolog.eclipse vendor/grammars/sublimetext-cuda-cpp: - source.cuda-c++ vendor/grammars/swift.tmbundle: diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 3ff88a03..54b8ab65 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2632,6 +2632,7 @@ Prolog: - .prolog interpreters: - swipl + tm_scope: source.prolog ace_mode: prolog Propeller Spin: diff --git a/vendor/grammars/sublimeprolog b/vendor/grammars/sublimeprolog new file mode 160000 index 00000000..465efc54 --- /dev/null +++ b/vendor/grammars/sublimeprolog @@ -0,0 +1 @@ +Subproject commit 465efc540e0e87787226a8563d65b15959e5a065 From 6226a46988523123e3ec2437a4ae668b7820a202 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Thu, 13 Aug 2015 17:35:01 +0200 Subject: [PATCH 081/356] Recognize the Mozilla Public License for grammars --- test/test_grammars.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/test_grammars.rb b/test/test_grammars.rb index 88624ae8..dc64c6e6 100644 --- a/test/test_grammars.rb +++ b/test/test_grammars.rb @@ -132,6 +132,12 @@ class TestGrammars < Minitest::Test "BSD" elsif content.include?("Permission is hereby granted") || content =~ /\bMIT\b/ "MIT" + elsif content.include?("Mozilla Public License") + if content.include?("version 2.0") + "MPLv2.0" + elsif content.include?("version 1.1") + "MPLv1.1" + end elsif content.include?("unlicense.org") "unlicense" elsif content.include?("http://www.wtfpl.net/txt/copying/") From 55aafa416dfd75b47083d6a0400ce6136338ba02 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Fri, 14 Aug 2015 13:56:28 +0200 Subject: [PATCH 082/356] Highlight LabVIEW files as XML --- lib/linguist/languages.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 3ff88a03..352542b0 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1718,8 +1718,8 @@ LabVIEW: type: programming extensions: - .lvproj - tm_scope: none - ace_mode: text + tm_scope: source.xml + ace_mode: xml Lasso: type: programming From 06997f0da240a482f5f2f70912f36c6446b02b2c Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Fri, 14 Aug 2015 14:17:32 +0200 Subject: [PATCH 083/356] Fix scope of grammar for LabVIEW --- lib/linguist/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 352542b0..a0ede441 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1718,7 +1718,7 @@ LabVIEW: type: programming extensions: - .lvproj - tm_scope: source.xml + tm_scope: text.xml ace_mode: xml Lasso: From 82410e07b272661149415eefc28cd72166fa35c1 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Fri, 14 Aug 2015 13:02:55 +0200 Subject: [PATCH 084/356] Add .sexp to Common Lisp. config.sexp by Jeremie Dimino; Apache License 2.0. rss.sexp by Dan Lentz; LGPL 2.1. --- lib/linguist/languages.yml | 1 + samples/Common Lisp/config.sexp | 2 + samples/Common Lisp/rss.sexp | 103 ++++++++++++++++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 samples/Common Lisp/config.sexp create mode 100644 samples/Common Lisp/rss.sexp diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index a0ede441..ed414121 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -616,6 +616,7 @@ Common Lisp: - .lsp - .ny - .podsl + - .sexp interpreters: - lisp - sbcl diff --git a/samples/Common Lisp/config.sexp b/samples/Common Lisp/config.sexp new file mode 100644 index 00000000..125892e5 --- /dev/null +++ b/samples/Common Lisp/config.sexp @@ -0,0 +1,2 @@ +((exe_name hello) + (link_order (world hello))) diff --git a/samples/Common Lisp/rss.sexp b/samples/Common Lisp/rss.sexp new file mode 100644 index 00000000..4898fb55 --- /dev/null +++ b/samples/Common Lisp/rss.sexp @@ -0,0 +1,103 @@ + +(:TURTLE + + (:@PREFIX "rdf:" "") + (:@PREFIX "owl:" "") + (:@PREFIX "dc:" "") + (:@PREFIX "xsd:" "") + (:@PREFIX "rdfs:" "") + + (:TRIPLES (:URIREF "") + + (:PREDICATE-OBJECT-LIST + (:URIREF #1="") + (:OBJECTS + (:QNAME "rdfs:Class"))) + + (:PREDICATE-OBJECT-LIST + (:QNAME "rdfs:comment") + (:OBJECTS + (:STRING "An RSS information channel."))) + + (:PREDICATE-OBJECT-LIST + (:QNAME "rdfs:isDefinedBy") + (:OBJECTS + (:URIREF ""))) + + (:PREDICATE-OBJECT-LIST + (:QNAME "rdfs:label") + (:OBJECTS + (:STRING "Channel")))) + + (:TRIPLES (:URIREF "") + + (:PREDICATE-OBJECT-LIST + (:URIREF #1#) + (:OBJECTS + (:QNAME "rdf:Property"))) + + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") + (:OBJECTS (:STRING "A short text description of the subject."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Description"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:description")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS image."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Image")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS item."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Item")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") + (:OBJECTS + (:STRING "Points to a list of rss:item elements that are members of the subject channel."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Items")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") + (:OBJECTS (:STRING "The URL to which an HTML rendering of the subject will link."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Link"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:identifier")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") + (:OBJECTS (:STRING "The text input field's (variable) name."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Name")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdfs:Class"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") (:OBJECTS (:STRING "An RSS text input."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Text Input")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") + (:OBJECTS (:STRING "A descriptive title for the channel."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "Title"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:title")))) + (:TRIPLES (:URIREF "") + (:PREDICATE-OBJECT-LIST (:URIREF #1#) (:OBJECTS (:QNAME "rdf:Property"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:comment") + (:OBJECTS + (:STRING + "The URL of the image to used in the 'src' attribute of the channel's image tag when rendered as HTML."))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:isDefinedBy") + (:OBJECTS (:URIREF ""))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:label") (:OBJECTS (:STRING "URL"))) + (:PREDICATE-OBJECT-LIST (:QNAME "rdfs:subPropertyOf") (:OBJECTS (:QNAME "dc:identifier"))))) From 152d49513f74ab4bd0b5368bb36a38effcfd6fe4 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Wed, 19 Aug 2015 00:11:34 +0200 Subject: [PATCH 085/356] Grammar for AspectJ from Sublime Text package --- .gitmodules | 3 +++ grammars.yml | 2 ++ lib/linguist/languages.yml | 2 +- vendor/grammars/sublime-aspectj | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) create mode 160000 vendor/grammars/sublime-aspectj diff --git a/.gitmodules b/.gitmodules index f4238e8b..47cf934f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -671,3 +671,6 @@ [submodule "vendor/grammars/st2-zonefile"] path = vendor/grammars/st2-zonefile url = https://github.com/sixty4k/st2-zonefile +[submodule "vendor/grammars/sublime-aspectj"] + path = vendor/grammars/sublime-aspectj + url = https://github.com/pchaigno/sublime-aspectj diff --git a/grammars.yml b/grammars.yml index 4da6c0e2..449030af 100644 --- a/grammars.yml +++ b/grammars.yml @@ -479,6 +479,8 @@ vendor/grammars/sublime-MuPAD: - source.mupad vendor/grammars/sublime-apl/: - source.apl +vendor/grammars/sublime-aspectj/: +- source.aspectj vendor/grammars/sublime-befunge: - source.befunge vendor/grammars/sublime-better-typescript: diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index ed414121..ef3b0968 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -214,7 +214,7 @@ AspectJ: color: "#a957b0" extensions: - .aj - tm_scope: none + tm_scope: source.aspectj ace_mode: text Assembly: diff --git a/vendor/grammars/sublime-aspectj b/vendor/grammars/sublime-aspectj new file mode 160000 index 00000000..888fefdd --- /dev/null +++ b/vendor/grammars/sublime-aspectj @@ -0,0 +1 @@ +Subproject commit 888fefdd2f8db57628d7bd36e2388f1f534c00a7 From 102f14d0e9cf26ace4e076396a21bdd3fe967e2a Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Wed, 19 Aug 2015 06:59:39 +0100 Subject: [PATCH 086/356] Grammars update --- grammars.yml | 1 + vendor/grammars/Elm.tmLanguage | 2 +- vendor/grammars/Lean.tmbundle | 2 +- vendor/grammars/NimLime | 2 +- vendor/grammars/SublimePapyrus | 2 +- vendor/grammars/abap.tmbundle | 2 +- vendor/grammars/atom-fsharp | 2 +- vendor/grammars/factor | 2 +- vendor/grammars/language-crystal | 2 +- vendor/grammars/language-gfm | 2 +- vendor/grammars/language-javascript | 2 +- vendor/grammars/language-xbase | 2 +- vendor/grammars/latex.tmbundle | 2 +- 13 files changed, 13 insertions(+), 12 deletions(-) diff --git a/grammars.yml b/grammars.yml index 449030af..88d21d39 100644 --- a/grammars.yml +++ b/grammars.yml @@ -331,6 +331,7 @@ vendor/grammars/language-hy: vendor/grammars/language-javascript: - source.js - source.js.regexp +- source.js.regexp.replacement vendor/grammars/language-jsoniq/: - source.jq - source.xq diff --git a/vendor/grammars/Elm.tmLanguage b/vendor/grammars/Elm.tmLanguage index e9fda7c7..f17b1914 160000 --- a/vendor/grammars/Elm.tmLanguage +++ b/vendor/grammars/Elm.tmLanguage @@ -1 +1 @@ -Subproject commit e9fda7c70f1bb8da8275b108420d8c492114b342 +Subproject commit f17b1914dd6447bb5f3168080d3aa8e95d051efb diff --git a/vendor/grammars/Lean.tmbundle b/vendor/grammars/Lean.tmbundle index fb115154..dd3e30f0 160000 --- a/vendor/grammars/Lean.tmbundle +++ b/vendor/grammars/Lean.tmbundle @@ -1 +1 @@ -Subproject commit fb1151547aebacdb474c2e14ad74d2aa6548e2f0 +Subproject commit dd3e30f0581b14b8a4830d6b46eaa86bf62058e8 diff --git a/vendor/grammars/NimLime b/vendor/grammars/NimLime index b0c92d3f..50d7344f 160000 --- a/vendor/grammars/NimLime +++ b/vendor/grammars/NimLime @@ -1 +1 @@ -Subproject commit b0c92d3faedeefcfe76c560f28980450811e2f5b +Subproject commit 50d7344f9b4f50823ac64d14c162982edf8b8056 diff --git a/vendor/grammars/SublimePapyrus b/vendor/grammars/SublimePapyrus index 51807687..2451bac8 160000 --- a/vendor/grammars/SublimePapyrus +++ b/vendor/grammars/SublimePapyrus @@ -1 +1 @@ -Subproject commit 51807687119bab674996669a6f589bf94b911522 +Subproject commit 2451bac8ef1c06b8d4c514d5a417dd6fd295dda4 diff --git a/vendor/grammars/abap.tmbundle b/vendor/grammars/abap.tmbundle index 5973e78c..08d6db92 160000 --- a/vendor/grammars/abap.tmbundle +++ b/vendor/grammars/abap.tmbundle @@ -1 +1 @@ -Subproject commit 5973e78c60d3d7f11fb264b5581bbe492486e771 +Subproject commit 08d6db92d0fddbf7a854584d1f568ca069e7d594 diff --git a/vendor/grammars/atom-fsharp b/vendor/grammars/atom-fsharp index 121ff71b..e7a4159f 160000 --- a/vendor/grammars/atom-fsharp +++ b/vendor/grammars/atom-fsharp @@ -1 +1 @@ -Subproject commit 121ff71b30b4d78978fb52b331ef05600575c019 +Subproject commit e7a4159fbf680ba4cafa9115ea7264a9cdba0fd0 diff --git a/vendor/grammars/factor b/vendor/grammars/factor index 49621511..ac5da311 160000 --- a/vendor/grammars/factor +++ b/vendor/grammars/factor @@ -1 +1 @@ -Subproject commit 496215111189a942cd5310635d71d00d1dc1d2c9 +Subproject commit ac5da311f73401db4adc28936c6aaae587a713ee diff --git a/vendor/grammars/language-crystal b/vendor/grammars/language-crystal index 75462302..93264691 160000 --- a/vendor/grammars/language-crystal +++ b/vendor/grammars/language-crystal @@ -1 +1 @@ -Subproject commit 754623023bd556b2bcb927dd8c1fd1ae4153e386 +Subproject commit 932646913b9ceabe96dd0c6dc5f3ef9a894902c2 diff --git a/vendor/grammars/language-gfm b/vendor/grammars/language-gfm index c8158a6d..9b95c2ad 160000 --- a/vendor/grammars/language-gfm +++ b/vendor/grammars/language-gfm @@ -1 +1 @@ -Subproject commit c8158a6d4b779842b5f3d95d023f96748904d551 +Subproject commit 9b95c2ad7c3c1261e54b11919f71ec3ad473aad9 diff --git a/vendor/grammars/language-javascript b/vendor/grammars/language-javascript index 1aaf2ff8..39fd6989 160000 --- a/vendor/grammars/language-javascript +++ b/vendor/grammars/language-javascript @@ -1 +1 @@ -Subproject commit 1aaf2ff8eff25073dad9e81dde48ed05537f2a97 +Subproject commit 39fd6989f78e1be265dc6ce9ba7a0ac450525864 diff --git a/vendor/grammars/language-xbase b/vendor/grammars/language-xbase index 3f77776e..ae860b3b 160000 --- a/vendor/grammars/language-xbase +++ b/vendor/grammars/language-xbase @@ -1 +1 @@ -Subproject commit 3f77776e98054b5ae53f13b14b4da1656497ce41 +Subproject commit ae860b3b02d08bd65827c0a5f0029e65e4df30b4 diff --git a/vendor/grammars/latex.tmbundle b/vendor/grammars/latex.tmbundle index 2cae8202..23e62234 160000 --- a/vendor/grammars/latex.tmbundle +++ b/vendor/grammars/latex.tmbundle @@ -1 +1 @@ -Subproject commit 2cae820272e4b88141fe3f06adfab620951952fb +Subproject commit 23e622349857b2e2181201e510c84fcec8e909d6 From 6995fc28b65d543342991d3ca5fd11c330f0f283 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Wed, 19 Aug 2015 07:01:07 +0100 Subject: [PATCH 087/356] v4.5.14 version bump --- lib/linguist/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index f46a86f2..1ba6a51b 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.5.13" + VERSION = "4.5.14" end From eca10056a87b6d82d1292aee746d3dfdee0c5b23 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Wed, 19 Aug 2015 17:29:35 +0200 Subject: [PATCH 088/356] Rename MemoryBlob to Blob --- lib/linguist/{memory_blob.rb => blob.rb} | 2 +- lib/linguist/file_blob.rb | 4 ++-- test/helper.rb | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) rename lib/linguist/{memory_blob.rb => blob.rb} (98%) diff --git a/lib/linguist/memory_blob.rb b/lib/linguist/blob.rb similarity index 98% rename from lib/linguist/memory_blob.rb rename to lib/linguist/blob.rb index c17cf3e2..8131d9b8 100644 --- a/lib/linguist/memory_blob.rb +++ b/lib/linguist/blob.rb @@ -4,7 +4,7 @@ module Linguist # A MemoryBlob is a wrapper around the content of a file to make it quack # like a Grit::Blob. It provides the basic interface: `name`, # `data`, `path` and `size`. - class MemoryBlob + class Blob include BlobHelper # Public: Initialize a new MemoryBlob. diff --git a/lib/linguist/file_blob.rb b/lib/linguist/file_blob.rb index 98ef3825..5f8bc373 100644 --- a/lib/linguist/file_blob.rb +++ b/lib/linguist/file_blob.rb @@ -1,11 +1,11 @@ require 'linguist/blob_helper' -require 'linguist/memory_blob' +require 'linguist/blob' module Linguist # A FileBlob is a wrapper around a File object to make it quack # like a Grit::Blob. It provides the basic interface: `name`, # `data`, `path` and `size`. - class FileBlob < MemoryBlob + class FileBlob < Blob include BlobHelper # Public: Initialize a new FileBlob from a path diff --git a/test/helper.rb b/test/helper.rb index 71594416..bac2a62c 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -3,7 +3,7 @@ require "minitest/autorun" require "mocha/setup" require "linguist" require 'color-proximity' -require "linguist/memory_blob" +require "linguist/blob" def fixtures_path File.expand_path("../fixtures", __FILE__) @@ -17,7 +17,7 @@ end def fixture_blob_memory(name) filepath = (name =~ /^\//)? name : File.join(fixtures_path, name) content = File.read(filepath) - Linguist::MemoryBlob.new(name, content) + Linguist::Blob.new(name, content) end def samples_path @@ -32,5 +32,5 @@ end def sample_blob_memory(name) filepath = (name =~ /^\//)? name : File.join(samples_path, name) content = File.read(filepath) - Linguist::MemoryBlob.new(name, content) + Linguist::Blob.new(name, content) end From 2c2b37bec3a78e30ee090894047b9d6f1302d57c Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Wed, 19 Aug 2015 18:07:42 +0200 Subject: [PATCH 089/356] Reorganize tests Rename test_memory_blob.rb to test_blob.rb for consistence with last commit --- test/test_blob.rb | 565 +++++++--------------------------- test/test_file_blob.rb | 638 ++++++++++++++++++++++++++++++++++++++- test/test_memory_blob.rb | 290 ------------------ 3 files changed, 745 insertions(+), 748 deletions(-) delete mode 100644 test/test_memory_blob.rb diff --git a/test/test_blob.rb b/test/test_blob.rb index 0a1cefe9..1ba856de 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -15,50 +15,47 @@ class TestBlob < Minitest::Test end def script_blob(name) - blob = sample_blob(name) + blob = sample_blob_memory(name) blob.instance_variable_set(:@name, 'script') blob end def test_name - assert_equal "foo.rb", sample_blob("foo.rb").name + assert_equal "foo.rb", sample_blob_memory("Ruby/foo.rb").name end def test_mime_type - assert_equal "application/postscript", fixture_blob("Binary/octocat.ai").mime_type - assert_equal "application/x-ruby", sample_blob("Ruby/grit.rb").mime_type - assert_equal "application/x-sh", sample_blob("Shell/script.sh").mime_type - assert_equal "application/xml", sample_blob("XML/bar.xml").mime_type - assert_equal "audio/ogg", fixture_blob("Binary/foo.ogg").mime_type - assert_equal "text/plain", fixture_blob("Data/README").mime_type + assert_equal "application/postscript", fixture_blob_memory("Binary/octocat.ai").mime_type + assert_equal "application/x-ruby", sample_blob_memory("Ruby/grit.rb").mime_type + assert_equal "application/x-sh", sample_blob_memory("Shell/script.sh").mime_type + assert_equal "text/plain", fixture_blob_memory("Data/README").mime_type end def test_content_type - assert_equal "application/pdf", fixture_blob("Binary/foo.pdf").content_type - assert_equal "audio/ogg", fixture_blob("Binary/foo.ogg").content_type - assert_equal "image/png", fixture_blob("Binary/foo.png").content_type - assert_equal "text/plain; charset=iso-8859-2", fixture_blob("Data/README").content_type + assert_equal "application/pdf", fixture_blob_memory("Binary/foo.pdf").content_type + assert_equal "image/png", fixture_blob_memory("Binary/foo.png").content_type + assert_equal "text/plain; charset=iso-8859-2", fixture_blob_memory("Data/README").content_type end def test_disposition - assert_equal "attachment; filename=foo+bar.jar", fixture_blob("Binary/foo bar.jar").disposition - assert_equal "attachment; filename=foo.bin", fixture_blob("Binary/foo.bin").disposition - assert_equal "attachment; filename=linguist.gem", fixture_blob("Binary/linguist.gem").disposition - assert_equal "attachment; filename=octocat.ai", fixture_blob("Binary/octocat.ai").disposition - assert_equal "inline", fixture_blob("Data/README").disposition - assert_equal "inline", sample_blob("Text/foo.txt").disposition - assert_equal "inline", sample_blob("Ruby/grit.rb").disposition - assert_equal "inline", fixture_blob("Binary/octocat.png").disposition + assert_equal "attachment; filename=foo+bar.jar", fixture_blob_memory("Binary/foo bar.jar").disposition + assert_equal "attachment; filename=foo.bin", fixture_blob_memory("Binary/foo.bin").disposition + assert_equal "attachment; filename=linguist.gem", fixture_blob_memory("Binary/linguist.gem").disposition + assert_equal "attachment; filename=octocat.ai", fixture_blob_memory("Binary/octocat.ai").disposition + assert_equal "inline", fixture_blob_memory("Data/README").disposition + assert_equal "inline", sample_blob_memory("Text/foo.txt").disposition + assert_equal "inline", sample_blob_memory("Ruby/grit.rb").disposition + assert_equal "inline", fixture_blob_memory("Binary/octocat.png").disposition end def test_data - assert_equal "module Foo\nend\n", sample_blob("Ruby/foo.rb").data + assert_equal "module Foo\nend\n", sample_blob_memory("Ruby/foo.rb").data end def test_lines - assert_equal ["module Foo", "end", ""], sample_blob("Ruby/foo.rb").lines - assert_equal ["line 1", "line 2", ""], sample_blob("Text/mac.txt").lines - assert_equal 475, sample_blob("Emacs Lisp/ess-julia.el").lines.length + assert_equal ["module Foo", "end", ""], sample_blob_memory("Ruby/foo.rb").lines + assert_equal ["line 1", "line 2", ""], sample_blob_memory("Text/mac.txt").lines + assert_equal 475, sample_blob_memory("Emacs Lisp/ess-julia.el").lines.length end def test_lines_maintains_original_encoding @@ -66,508 +63,170 @@ class TestBlob < Minitest::Test # earlier versions of the gem made implicit guarantees that the encoding of # each `line` is in the same encoding as the file was originally read (in # practice, UTF-8 or ASCII-8BIT) - assert_equal Encoding.default_external, fixture_blob("Data/utf16le").lines.first.encoding + assert_equal Encoding.default_external, fixture_blob_memory("Data/utf16le").lines.first.encoding end def test_size - assert_equal 15, sample_blob("Ruby/foo.rb").size + assert_equal 15, sample_blob_memory("Ruby/foo.rb").size end def test_loc - assert_equal 3, sample_blob("Ruby/foo.rb").loc + assert_equal 3, sample_blob_memory("Ruby/foo.rb").loc end def test_sloc - assert_equal 2, sample_blob("Ruby/foo.rb").sloc - assert_equal 3, fixture_blob("Data/utf16le-windows").sloc - assert_equal 1, fixture_blob("Data/iso8859-8-i").sloc + assert_equal 2, sample_blob_memory("Ruby/foo.rb").sloc + assert_equal 3, fixture_blob_memory("Data/utf16le-windows").sloc + assert_equal 1, fixture_blob_memory("Data/iso8859-8-i").sloc end def test_encoding - assert_equal "ISO-8859-2", fixture_blob("Data/README").encoding - assert_equal "ISO-8859-2", fixture_blob("Data/README").ruby_encoding - assert_equal "UTF-8", sample_blob("Text/foo.txt").encoding - assert_equal "UTF-8", sample_blob("Text/foo.txt").ruby_encoding - assert_equal "UTF-16LE", fixture_blob("Data/utf16le").encoding - assert_equal "UTF-16LE", fixture_blob("Data/utf16le").ruby_encoding - assert_equal "UTF-16LE", fixture_blob("Data/utf16le-windows").encoding - assert_equal "UTF-16LE", fixture_blob("Data/utf16le-windows").ruby_encoding - assert_equal "ISO-2022-KR", sample_blob("Text/ISO-2022-KR.txt").encoding - assert_equal "binary", sample_blob("Text/ISO-2022-KR.txt").ruby_encoding - assert_nil fixture_blob("Binary/dog.o").encoding + assert_equal "ISO-8859-2", fixture_blob_memory("Data/README").encoding + assert_equal "ISO-8859-2", fixture_blob_memory("Data/README").ruby_encoding + assert_equal "UTF-8", sample_blob_memory("Text/foo.txt").encoding + assert_equal "UTF-8", sample_blob_memory("Text/foo.txt").ruby_encoding + assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le").encoding + assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le").ruby_encoding + assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le-windows").encoding + assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le-windows").ruby_encoding + assert_equal "ISO-2022-KR", sample_blob_memory("Text/ISO-2022-KR.txt").encoding + assert_equal "binary", sample_blob_memory("Text/ISO-2022-KR.txt").ruby_encoding + assert_nil fixture_blob_memory("Binary/dog.o").encoding end def test_binary - # Large blobs aren't loaded - large_blob = sample_blob("git.exe") - large_blob.instance_eval do - def data; end - end - assert large_blob.binary? - - assert fixture_blob("Binary/git.deb").binary? - assert fixture_blob("Binary/git.exe").binary? - assert fixture_blob("Binary/hello.pbc").binary? - assert fixture_blob("Binary/linguist.gem").binary? - assert fixture_blob("Binary/octocat.ai").binary? - assert fixture_blob("Binary/octocat.png").binary? - assert fixture_blob("Binary/zip").binary? - assert !fixture_blob("Data/README").binary? - assert !sample_blob("Ruby/foo.rb").binary? - assert !sample_blob("Perl/script.pl").binary? + assert fixture_blob_memory("Binary/git.deb").binary? + assert fixture_blob_memory("Binary/hello.pbc").binary? + assert fixture_blob_memory("Binary/linguist.gem").binary? + assert fixture_blob_memory("Binary/octocat.ai").binary? + assert fixture_blob_memory("Binary/octocat.png").binary? + assert fixture_blob_memory("Binary/zip").binary? + assert !fixture_blob_memory("Data/README").binary? + assert !sample_blob_memory("Ruby/foo.rb").binary? + assert !sample_blob_memory("Perl/script.pl").binary? end def test_all_binary Samples.each do |sample| - blob = sample_blob(sample[:path]) + blob = sample_blob_memory(sample[:path]) assert ! (blob.likely_binary? || blob.binary?), "#{sample[:path]} is a binary file" end end def test_text - assert fixture_blob("Data/README").text? - assert fixture_blob("Data/md").text? - assert sample_blob("Shell/script.sh").text? - assert fixture_blob("Data/txt").text? + assert fixture_blob_memory("Data/README").text? + assert fixture_blob_memory("Data/md").text? + assert sample_blob_memory("Shell/script.sh").text? + assert fixture_blob_memory("Data/txt").text? end def test_image - assert fixture_blob("Binary/octocat.gif").image? - assert fixture_blob("Binary/octocat.jpeg").image? - assert fixture_blob("Binary/octocat.jpg").image? - assert fixture_blob("Binary/octocat.png").image? - assert !fixture_blob("Binary/octocat.ai").image? - assert !fixture_blob("Binary/octocat.psd").image? + assert fixture_blob_memory("Binary/octocat.png").image? + assert !fixture_blob_memory("Binary/octocat.ai").image? + assert !fixture_blob_memory("Binary/octocat.psd").image? end def test_solid - assert fixture_blob("Binary/cube.stl").solid? - assert fixture_blob("Data/cube.stl").solid? + assert fixture_blob_memory("Binary/cube.stl").solid? + assert fixture_blob_memory("Data/cube.stl").solid? end def test_csv - assert fixture_blob("Data/cars.csv").csv? + assert fixture_blob_memory("Data/cars.csv").csv? end def test_pdf - assert fixture_blob("Binary/foo.pdf").pdf? + assert fixture_blob_memory("Binary/foo.pdf").pdf? end def test_viewable - assert fixture_blob("Data/README").viewable? - assert sample_blob("Ruby/foo.rb").viewable? - assert sample_blob("Perl/script.pl").viewable? - assert !fixture_blob("Binary/linguist.gem").viewable? - assert !fixture_blob("Binary/octocat.ai").viewable? - assert !fixture_blob("Binary/octocat.png").viewable? + assert fixture_blob_memory("Data/README").viewable? + assert sample_blob_memory("Ruby/foo.rb").viewable? + assert sample_blob_memory("Perl/script.pl").viewable? + assert !fixture_blob_memory("Binary/linguist.gem").viewable? + assert !fixture_blob_memory("Binary/octocat.ai").viewable? + assert !fixture_blob_memory("Binary/octocat.png").viewable? end def test_generated - assert !fixture_blob("Data/README").generated? - - # Xcode project files - assert !sample_blob("XML/MainMenu.xib").generated? - assert fixture_blob("Binary/MainMenu.nib").generated? - assert !sample_blob("XML/project.pbxproj").generated? - - # Gemfile.lock is NOT generated - assert !sample_blob("Gemfile.lock").generated? + assert !fixture_blob_memory("Data/README").generated? # Generated .NET Docfiles - assert sample_blob("XML/net_docfile.xml").generated? + assert sample_blob_memory("XML/net_docfile.xml").generated? # Long line - assert !sample_blob("JavaScript/uglify.js").generated? + assert !sample_blob_memory("JavaScript/uglify.js").generated? # Inlined JS, but mostly code - assert !sample_blob("JavaScript/json2_backbone.js").generated? + assert !sample_blob_memory("JavaScript/json2_backbone.js").generated? # Minified JS - assert !sample_blob("JavaScript/jquery-1.6.1.js").generated? - assert sample_blob("JavaScript/jquery-1.6.1.min.js").generated? - assert sample_blob("JavaScript/jquery-1.4.2.min.js").generated? - - # CoffeeScript-generated JS - # TODO - - # TypeScript-generated JS - # TODO + assert !sample_blob_memory("JavaScript/jquery-1.6.1.js").generated? + assert sample_blob_memory("JavaScript/jquery-1.6.1.min.js").generated? + assert sample_blob_memory("JavaScript/jquery-1.4.2.min.js").generated? # Composer generated composer.lock file - assert sample_blob("JSON/composer.lock").generated? + assert sample_blob_memory("JSON/composer.lock").generated? # PEG.js-generated parsers - assert sample_blob("JavaScript/parser.js").generated? + assert sample_blob_memory("JavaScript/parser.js").generated? # Generated PostScript - assert !sample_blob("PostScript/sierpinski.ps").generated? + assert !sample_blob_memory("PostScript/sierpinski.ps").generated? # These examples are too basic to tell - assert !sample_blob("JavaScript/hello.js").generated? + assert !sample_blob_memory("JavaScript/hello.js").generated? - assert sample_blob("JavaScript/intro-old.js").generated? - assert sample_blob("JavaScript/classes-old.js").generated? + assert sample_blob_memory("JavaScript/intro-old.js").generated? + assert sample_blob_memory("JavaScript/classes-old.js").generated? - assert sample_blob("JavaScript/intro.js").generated? - assert sample_blob("JavaScript/classes.js").generated? + assert sample_blob_memory("JavaScript/intro.js").generated? + assert sample_blob_memory("JavaScript/classes.js").generated? # Protocol Buffer generated code - assert sample_blob("C++/protocol-buffer.pb.h").generated? - assert sample_blob("C++/protocol-buffer.pb.cc").generated? - assert sample_blob("Java/ProtocolBuffer.java").generated? - assert sample_blob("Python/protocol_buffer_pb2.py").generated? - assert sample_blob("Go/api.pb.go").generated? - assert sample_blob("Go/embedded.go").generated? + assert sample_blob_memory("C++/protocol-buffer.pb.h").generated? + assert sample_blob_memory("C++/protocol-buffer.pb.cc").generated? + assert sample_blob_memory("Java/ProtocolBuffer.java").generated? + assert sample_blob_memory("Python/protocol_buffer_pb2.py").generated? + assert sample_blob_memory("Go/api.pb.go").generated? + assert sample_blob_memory("Go/embedded.go").generated? # Apache Thrift generated code - assert sample_blob("Python/gen-py-linguist-thrift.py").generated? - assert sample_blob("Go/gen-go-linguist-thrift.go").generated? - assert sample_blob("Java/gen-java-linguist-thrift.java").generated? - assert sample_blob("JavaScript/gen-js-linguist-thrift.js").generated? - assert sample_blob("Ruby/gen-rb-linguist-thrift.rb").generated? - assert sample_blob("Objective-C/gen-cocoa-linguist-thrift.m").generated? + assert sample_blob_memory("Python/gen-py-linguist-thrift.py").generated? + assert sample_blob_memory("Go/gen-go-linguist-thrift.go").generated? + assert sample_blob_memory("Java/gen-java-linguist-thrift.java").generated? + assert sample_blob_memory("JavaScript/gen-js-linguist-thrift.js").generated? + assert sample_blob_memory("Ruby/gen-rb-linguist-thrift.rb").generated? + assert sample_blob_memory("Objective-C/gen-cocoa-linguist-thrift.m").generated? # Generated JNI - assert sample_blob("C/jni_layer.h").generated? + assert sample_blob_memory("C/jni_layer.h").generated? # Minified CSS - assert !sample_blob("CSS/bootstrap.css").generated? - assert sample_blob("CSS/bootstrap.min.css").generated? + assert !sample_blob_memory("CSS/bootstrap.css").generated? + assert sample_blob_memory("CSS/bootstrap.min.css").generated? # Generated VCR - assert sample_blob("YAML/vcr_cassette.yml").generated? + assert sample_blob_memory("YAML/vcr_cassette.yml").generated? # Generated by Zephir - assert sample_blob("Zephir/filenames/exception.zep.c").generated? - assert sample_blob("Zephir/filenames/exception.zep.h").generated? - assert sample_blob("Zephir/filenames/exception.zep.php").generated? - assert !sample_blob("Zephir/Router.zep").generated? - - assert sample_blob("node_modules/grunt/lib/grunt.js").generated? - - # Godep saved dependencies - assert sample_blob("Godeps/Godeps.json").generated? - assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").generated? + assert !sample_blob_memory("Zephir/Router.zep").generated? # Cython-generated C/C++ - assert sample_blob("C/sgd_fast.c").generated? - assert sample_blob("C++/wrapper_inner.cpp").generated? + assert sample_blob_memory("C/sgd_fast.c").generated? + assert sample_blob_memory("C++/wrapper_inner.cpp").generated? # Unity3D-generated metadata - assert sample_blob("Unity3D Asset/Tiles.meta").generated? + assert sample_blob_memory("Unity3D Asset/Tiles.meta").generated? end def test_vendored - assert !fixture_blob("Data/README").vendored? - assert !sample_blob("ext/extconf.rb").vendored? - - # Dependencies - assert sample_blob("dependencies/windows/headers/GL/glext.h").vendored? - - # Node dependencies - assert sample_blob("node_modules/coffee-script/lib/coffee-script.js").vendored? - - # Bower Components - assert sample_blob("bower_components/custom/custom.js").vendored? - assert sample_blob("app/bower_components/custom/custom.js").vendored? - assert sample_blob("vendor/assets/bower_components/custom/custom.js").vendored? - - # Go dependencies - assert !sample_blob("Godeps/Godeps.json").vendored? - assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").vendored? - - # Rails vendor/ - assert sample_blob("vendor/plugins/will_paginate/lib/will_paginate.rb").vendored? - - # Vendor/ - assert sample_blob("Vendor/my_great_file.h").vendored? - - # 'thirdparty' directory - assert sample_blob("thirdparty/lib/main.c").vendored? - - # 'extern(al)' directory - assert sample_blob("extern/util/__init__.py").vendored? - assert sample_blob("external/jquery.min.js").vendored? - - # C deps - assert sample_blob("deps/http_parser/http_parser.c").vendored? - assert sample_blob("deps/v8/src/v8.h").vendored? - - assert sample_blob("tools/something/else.c").vendored? - - # Chart.js - assert sample_blob("some/vendored/path/Chart.js").vendored? - assert !sample_blob("some/vendored/path/chart.js").vendored? - - # Codemirror deps - assert sample_blob("codemirror/mode/blah.js").vendored? - - # Debian packaging - assert sample_blob("debian/cron.d").vendored? - - # Erlang - assert sample_blob("rebar").vendored? - - # git config files - - assert_predicate fixture_blob("some/path/.gitattributes"), :vendored? - assert_predicate fixture_blob(".gitignore"), :vendored? - assert_predicate fixture_blob("special/path/.gitmodules"), :vendored? - - # Minified JavaScript and CSS - assert sample_blob("foo.min.js").vendored? - assert sample_blob("foo.min.css").vendored? - assert sample_blob("foo-min.js").vendored? - assert sample_blob("foo-min.css").vendored? - assert !sample_blob("foomin.css").vendored? - assert !sample_blob("foo.min.txt").vendored? - - #.osx - assert sample_blob(".osx").vendored? - - # Prototype - assert !sample_blob("public/javascripts/application.js").vendored? - assert sample_blob("public/javascripts/prototype.js").vendored? - assert sample_blob("public/javascripts/effects.js").vendored? - assert sample_blob("public/javascripts/controls.js").vendored? - assert sample_blob("public/javascripts/dragdrop.js").vendored? - - # jQuery - assert sample_blob("jquery.js").vendored? - assert sample_blob("public/javascripts/jquery.js").vendored? - assert sample_blob("public/javascripts/jquery.min.js").vendored? - assert sample_blob("public/javascripts/jquery-1.7.js").vendored? - assert sample_blob("public/javascripts/jquery-1.7.min.js").vendored? - assert sample_blob("public/javascripts/jquery-1.5.2.js").vendored? - assert sample_blob("public/javascripts/jquery-1.6.1.js").vendored? - assert sample_blob("public/javascripts/jquery-1.6.1.min.js").vendored? - assert sample_blob("public/javascripts/jquery-1.10.1.js").vendored? - assert sample_blob("public/javascripts/jquery-1.10.1.min.js").vendored? - assert !sample_blob("public/javascripts/jquery.github.menu.js").vendored? - - # jQuery UI - assert sample_blob("themes/ui-lightness/jquery-ui.css").vendored? - assert sample_blob("themes/ui-lightness/jquery-ui-1.8.22.custom.css").vendored? - assert sample_blob("themes/ui-lightness/jquery.ui.accordion.css").vendored? - assert sample_blob("ui/i18n/jquery.ui.datepicker-ar.js").vendored? - assert sample_blob("ui/i18n/jquery-ui-i18n.js").vendored? - assert sample_blob("ui/jquery.effects.blind.js").vendored? - assert sample_blob("ui/jquery-ui-1.8.22.custom.js").vendored? - assert sample_blob("ui/jquery-ui-1.8.22.custom.min.js").vendored? - assert sample_blob("ui/jquery-ui-1.8.22.js").vendored? - assert sample_blob("ui/jquery-ui-1.8.js").vendored? - assert sample_blob("ui/jquery-ui.min.js").vendored? - assert sample_blob("ui/jquery.ui.accordion.js").vendored? - assert sample_blob("ui/minified/jquery.effects.blind.min.js").vendored? - assert sample_blob("ui/minified/jquery.ui.accordion.min.js").vendored? - - # MooTools - assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat.js").vendored? - assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat-yc.js").vendored? - - # Dojo - assert sample_blob("public/javascripts/dojo.js").vendored? - - # MochiKit - assert sample_blob("public/javascripts/MochiKit.js").vendored? - - # YUI - assert sample_blob("public/javascripts/yahoo-dom-event.js").vendored? - assert sample_blob("public/javascripts/yahoo-min.js").vendored? - assert sample_blob("public/javascripts/yuiloader-dom-event.js").vendored? - - # WYS editors - assert sample_blob("public/javascripts/ckeditor.js").vendored? - assert sample_blob("public/javascripts/tiny_mce.js").vendored? - assert sample_blob("public/javascripts/tiny_mce_popup.js").vendored? - assert sample_blob("public/javascripts/tiny_mce_src.js").vendored? - - # AngularJS - assert sample_blob("public/javascripts/angular.js").vendored? - assert sample_blob("public/javascripts/angular.min.js").vendored? - - # D3.js - assert sample_blob("public/javascripts/d3.v3.js").vendored? - assert sample_blob("public/javascripts/d3.v3.min.js").vendored? - - # Modernizr - assert sample_blob("public/javascripts/modernizr-2.7.1.js").vendored? - assert sample_blob("public/javascripts/modernizr.custom.01009.js").vendored? - - # Fabric - assert sample_blob("fabfile.py").vendored? - - # WAF - assert sample_blob("waf").vendored? - - # Visual Studio IntelliSense - assert sample_blob("Scripts/jquery-1.7-vsdoc.js").vendored? - - # Microsoft Ajax - assert sample_blob("Scripts/MicrosoftAjax.debug.js").vendored? - assert sample_blob("Scripts/MicrosoftAjax.js").vendored? - assert sample_blob("Scripts/MicrosoftMvcAjax.debug.js").vendored? - assert sample_blob("Scripts/MicrosoftMvcAjax.js").vendored? - assert sample_blob("Scripts/MicrosoftMvcValidation.debug.js").vendored? - assert sample_blob("Scripts/MicrosoftMvcValidation.js").vendored? - - # jQuery validation plugin (MS bundles this with asp.net mvc) - assert sample_blob("Scripts/jquery.validate.js").vendored? - assert sample_blob("Scripts/jquery.validate.min.js").vendored? - assert sample_blob("Scripts/jquery.validate.unobtrusive.js").vendored? - assert sample_blob("Scripts/jquery.validate.unobtrusive.min.js").vendored? - assert sample_blob("Scripts/jquery.unobtrusive-ajax.js").vendored? - assert sample_blob("Scripts/jquery.unobtrusive-ajax.min.js").vendored? - - # NuGet Packages - assert sample_blob("packages/Modernizr.2.0.6/Content/Scripts/modernizr-2.0.6-development-only.js").vendored? - - # Font Awesome - assert sample_blob("some/asset/path/font-awesome.min.css").vendored? - assert sample_blob("some/asset/path/font-awesome.css").vendored? - - # Normalize - assert sample_blob("some/asset/path/normalize.css").vendored? - - # Carthage - assert sample_blob('Carthage/blah').vendored? - - # Cocoapods - assert sample_blob('Pods/blah').vendored? - - # Html5shiv - assert sample_blob("Scripts/html5shiv.js").vendored? - assert sample_blob("Scripts/html5shiv.min.js").vendored? - - # Test fixtures - assert sample_blob("test/fixtures/random.rkt").vendored? - assert sample_blob("Test/fixtures/random.rkt").vendored? - assert sample_blob("tests/fixtures/random.rkt").vendored? - - # Cordova/PhoneGap - assert sample_blob("cordova.js").vendored? - assert sample_blob("cordova.min.js").vendored? - assert sample_blob("cordova-2.1.0.js").vendored? - assert sample_blob("cordova-2.1.0.min.js").vendored? - - # Foundation js - assert sample_blob("foundation.js").vendored? - assert sample_blob("foundation.min.js").vendored? - assert sample_blob("foundation.abide.js").vendored? - - # Vagrant - assert sample_blob("Vagrantfile").vendored? - - # Gradle - assert sample_blob("gradlew").vendored? - assert sample_blob("gradlew.bat").vendored? - assert sample_blob("gradle/wrapper/gradle-wrapper.properties").vendored? - assert sample_blob("subproject/gradlew").vendored? - assert sample_blob("subproject/gradlew.bat").vendored? - assert sample_blob("subproject/gradle/wrapper/gradle-wrapper.properties").vendored? - - # Octicons - assert sample_blob("octicons.css").vendored? - assert sample_blob("public/octicons.min.css").vendored? - assert sample_blob("public/octicons/sprockets-octicons.scss").vendored? - - # Typesafe Activator - assert sample_blob("activator").vendored? - assert sample_blob("activator.bat").vendored? - assert sample_blob("subproject/activator").vendored? - assert sample_blob("subproject/activator.bat").vendored? - - assert_predicate fixture_blob(".google_apis/bar.jar"), :vendored? - assert_predicate fixture_blob("foo/.google_apis/bar.jar"), :vendored? - - # Sphinx docs - assert sample_blob("docs/_build/asset.doc").vendored? - assert sample_blob("docs/theme/file.css").vendored? - - # Vagrant - assert sample_blob("puphpet/file.pp").vendored? - - # Fabric.io - assert sample_blob("Fabric.framework/Fabric.h").vendored? - - # Crashlytics - assert sample_blob("Crashlytics.framework/Crashlytics.h").vendored? - end - - def test_documentation - assert_predicate fixture_blob("doc/foo.html"), :documentation? - assert_predicate fixture_blob("docs/foo.html"), :documentation? - refute_predicate fixture_blob("project/doc/foo.html"), :documentation? - refute_predicate fixture_blob("project/docs/foo.html"), :documentation? - - assert_predicate fixture_blob("Documentation/foo.md"), :documentation? - assert_predicate fixture_blob("documentation/foo.md"), :documentation? - assert_predicate fixture_blob("project/Documentation/foo.md"), :documentation? - assert_predicate fixture_blob("project/documentation/foo.md"), :documentation? - - assert_predicate fixture_blob("javadoc/foo.html"), :documentation? - assert_predicate fixture_blob("project/javadoc/foo.html"), :documentation? - - assert_predicate fixture_blob("man/foo.html"), :documentation? - refute_predicate fixture_blob("project/man/foo.html"), :documentation? - - assert_predicate fixture_blob("README"), :documentation? - assert_predicate fixture_blob("README.md"), :documentation? - assert_predicate fixture_blob("README.txt"), :documentation? - assert_predicate fixture_blob("Readme"), :documentation? - assert_predicate fixture_blob("readme"), :documentation? - assert_predicate fixture_blob("foo/README"), :documentation? - - assert_predicate fixture_blob("CHANGE"), :documentation? - assert_predicate fixture_blob("CHANGE.md"), :documentation? - assert_predicate fixture_blob("CHANGE.txt"), :documentation? - assert_predicate fixture_blob("foo/CHANGE"), :documentation? - - assert_predicate fixture_blob("CHANGELOG"), :documentation? - assert_predicate fixture_blob("CHANGELOG.md"), :documentation? - assert_predicate fixture_blob("CHANGELOG.txt"), :documentation? - assert_predicate fixture_blob("foo/CHANGELOG"), :documentation? - - assert_predicate fixture_blob("CHANGES"), :documentation? - assert_predicate fixture_blob("CHANGES.md"), :documentation? - assert_predicate fixture_blob("CHANGES.txt"), :documentation? - assert_predicate fixture_blob("foo/CHANGES"), :documentation? - - assert_predicate fixture_blob("CONTRIBUTING"), :documentation? - assert_predicate fixture_blob("CONTRIBUTING.md"), :documentation? - assert_predicate fixture_blob("CONTRIBUTING.txt"), :documentation? - assert_predicate fixture_blob("foo/CONTRIBUTING"), :documentation? - - assert_predicate fixture_blob("examples/some-file.pl"), :documentation? - assert_predicate fixture_blob("Examples/some-example-file.rb"), :documentation? - - assert_predicate fixture_blob("LICENSE"), :documentation? - assert_predicate fixture_blob("LICENCE.md"), :documentation? - assert_predicate fixture_blob("License.txt"), :documentation? - assert_predicate fixture_blob("LICENSE.txt"), :documentation? - assert_predicate fixture_blob("foo/LICENSE"), :documentation? - - assert_predicate fixture_blob("COPYING"), :documentation? - assert_predicate fixture_blob("COPYING.md"), :documentation? - assert_predicate fixture_blob("COPYING.txt"), :documentation? - assert_predicate fixture_blob("foo/COPYING"), :documentation? - - assert_predicate fixture_blob("INSTALL"), :documentation? - assert_predicate fixture_blob("INSTALL.md"), :documentation? - assert_predicate fixture_blob("INSTALL.txt"), :documentation? - assert_predicate fixture_blob("foo/INSTALL"), :documentation? - - refute_predicate fixture_blob("foo.md"), :documentation? - - # Samples - assert sample_blob("Samples/Ruby/foo.rb").documentation? - - assert_predicate fixture_blob("INSTALL.txt"), :documentation? + assert !fixture_blob_memory("Data/README").vendored? end def test_language Samples.each do |sample| - blob = sample_blob(sample[:path]) + blob = sample_blob_memory(sample[:path]) assert blob.language, "No language for #{sample[:path]}" assert_equal sample[:language], blob.language.name, blob.name end @@ -586,7 +245,7 @@ class TestBlob < Minitest::Test filepath = File.join(dirname, filename) next unless File.file?(filepath) - blob = fixture_blob(filepath) + blob = fixture_blob_memory(filepath) if language == 'Data' assert blob.language.nil?, "A language was found for #{filepath}" elsif language == 'Generated' @@ -600,7 +259,7 @@ class TestBlob < Minitest::Test end def test_minified_files_not_safe_to_highlight - assert !sample_blob("JavaScript/jquery-1.6.1.min.js").safe_to_colorize? + assert !sample_blob_memory("JavaScript/jquery-1.6.1.min.js").safe_to_colorize? end def test_empty @@ -613,27 +272,19 @@ class TestBlob < Minitest::Test end def test_include_in_language_stats - vendored = sample_blob("bower_components/custom/custom.js") - assert_predicate vendored, :vendored? - refute_predicate vendored, :include_in_language_stats? - - documentation = fixture_blob("README") - assert_predicate documentation, :documentation? - refute_predicate documentation, :include_in_language_stats? - - generated = sample_blob("CSS/bootstrap.min.css") + generated = sample_blob_memory("CSS/bootstrap.min.css") assert_predicate generated, :generated? refute_predicate generated, :include_in_language_stats? - data = sample_blob("Ant Build System/filenames/ant.xml") + data = sample_blob_memory("Ant Build System/filenames/ant.xml") assert_equal :data, data.language.type refute_predicate data, :include_in_language_stats? - prose = sample_blob("Markdown/tender.md") + prose = sample_blob_memory("Markdown/tender.md") assert_equal :prose, prose.language.type refute_predicate prose, :include_in_language_stats? - included = sample_blob("HTML/pages.html") + included = sample_blob_memory("HTML/pages.html") assert_predicate included, :include_in_language_stats? end end diff --git a/test/test_file_blob.rb b/test/test_file_blob.rb index 30d483fe..0ed58807 100644 --- a/test/test_file_blob.rb +++ b/test/test_file_blob.rb @@ -1,9 +1,645 @@ require_relative "./helper" -class TestFileBlob < Minitest::Test +class TestBlob < Minitest::Test + include Linguist + + def setup + # git blobs are normally loaded as ASCII-8BIT since they may contain data + # with arbitrary encoding not known ahead of time + @original_external = Encoding.default_external + Encoding.default_external = Encoding.find("ASCII-8BIT") + end + + def teardown + Encoding.default_external = @original_external + end + + def script_blob(name) + blob = sample_blob(name) + blob.instance_variable_set(:@name, 'script') + blob + end + def test_extensions assert_equal [".gitignore"], Linguist::FileBlob.new(".gitignore").extensions assert_equal [".xml"], Linguist::FileBlob.new("build.xml").extensions assert_equal [".html.erb", ".erb"], Linguist::FileBlob.new("dotted.dir/index.html.erb").extensions end + + def test_name + assert_equal "foo.rb", sample_blob("foo.rb").name + end + + def test_mime_type + assert_equal "application/postscript", fixture_blob("Binary/octocat.ai").mime_type + assert_equal "application/x-ruby", sample_blob("Ruby/grit.rb").mime_type + assert_equal "application/x-sh", sample_blob("Shell/script.sh").mime_type + assert_equal "application/xml", sample_blob("XML/bar.xml").mime_type + assert_equal "audio/ogg", fixture_blob("Binary/foo.ogg").mime_type + assert_equal "text/plain", fixture_blob("Data/README").mime_type + end + + def test_content_type + assert_equal "application/pdf", fixture_blob("Binary/foo.pdf").content_type + assert_equal "audio/ogg", fixture_blob("Binary/foo.ogg").content_type + assert_equal "image/png", fixture_blob("Binary/foo.png").content_type + assert_equal "text/plain; charset=iso-8859-2", fixture_blob("Data/README").content_type + end + + def test_disposition + assert_equal "attachment; filename=foo+bar.jar", fixture_blob("Binary/foo bar.jar").disposition + assert_equal "attachment; filename=foo.bin", fixture_blob("Binary/foo.bin").disposition + assert_equal "attachment; filename=linguist.gem", fixture_blob("Binary/linguist.gem").disposition + assert_equal "attachment; filename=octocat.ai", fixture_blob("Binary/octocat.ai").disposition + assert_equal "inline", fixture_blob("Data/README").disposition + assert_equal "inline", sample_blob("Text/foo.txt").disposition + assert_equal "inline", sample_blob("Ruby/grit.rb").disposition + assert_equal "inline", fixture_blob("Binary/octocat.png").disposition + end + + def test_data + assert_equal "module Foo\nend\n", sample_blob("Ruby/foo.rb").data + end + + def test_lines + assert_equal ["module Foo", "end", ""], sample_blob("Ruby/foo.rb").lines + assert_equal ["line 1", "line 2", ""], sample_blob("Text/mac.txt").lines + assert_equal 475, sample_blob("Emacs Lisp/ess-julia.el").lines.length + end + + def test_lines_maintains_original_encoding + # Even if the file's encoding is detected as something like UTF-16LE, + # earlier versions of the gem made implicit guarantees that the encoding of + # each `line` is in the same encoding as the file was originally read (in + # practice, UTF-8 or ASCII-8BIT) + assert_equal Encoding.default_external, fixture_blob("Data/utf16le").lines.first.encoding + end + + def test_size + assert_equal 15, sample_blob("Ruby/foo.rb").size + end + + def test_loc + assert_equal 3, sample_blob("Ruby/foo.rb").loc + end + + def test_sloc + assert_equal 2, sample_blob("Ruby/foo.rb").sloc + assert_equal 3, fixture_blob("Data/utf16le-windows").sloc + assert_equal 1, fixture_blob("Data/iso8859-8-i").sloc + end + + def test_encoding + assert_equal "ISO-8859-2", fixture_blob("Data/README").encoding + assert_equal "ISO-8859-2", fixture_blob("Data/README").ruby_encoding + assert_equal "UTF-8", sample_blob("Text/foo.txt").encoding + assert_equal "UTF-8", sample_blob("Text/foo.txt").ruby_encoding + assert_equal "UTF-16LE", fixture_blob("Data/utf16le").encoding + assert_equal "UTF-16LE", fixture_blob("Data/utf16le").ruby_encoding + assert_equal "UTF-16LE", fixture_blob("Data/utf16le-windows").encoding + assert_equal "UTF-16LE", fixture_blob("Data/utf16le-windows").ruby_encoding + assert_equal "ISO-2022-KR", sample_blob("Text/ISO-2022-KR.txt").encoding + assert_equal "binary", sample_blob("Text/ISO-2022-KR.txt").ruby_encoding + assert_nil fixture_blob("Binary/dog.o").encoding + end + + def test_binary + # Large blobs aren't loaded + large_blob = sample_blob("git.exe") + large_blob.instance_eval do + def data; end + end + assert large_blob.binary? + + assert fixture_blob("Binary/git.deb").binary? + assert fixture_blob("Binary/git.exe").binary? + assert fixture_blob("Binary/hello.pbc").binary? + assert fixture_blob("Binary/linguist.gem").binary? + assert fixture_blob("Binary/octocat.ai").binary? + assert fixture_blob("Binary/octocat.png").binary? + assert fixture_blob("Binary/zip").binary? + assert !fixture_blob("Data/README").binary? + assert !sample_blob("Ruby/foo.rb").binary? + assert !sample_blob("Perl/script.pl").binary? + end + + def test_all_binary + Samples.each do |sample| + blob = sample_blob(sample[:path]) + assert ! (blob.likely_binary? || blob.binary?), "#{sample[:path]} is a binary file" + end + end + + def test_text + assert fixture_blob("Data/README").text? + assert fixture_blob("Data/md").text? + assert sample_blob("Shell/script.sh").text? + assert fixture_blob("Data/txt").text? + end + + def test_image + assert fixture_blob("Binary/octocat.gif").image? + assert fixture_blob("Binary/octocat.jpeg").image? + assert fixture_blob("Binary/octocat.jpg").image? + assert fixture_blob("Binary/octocat.png").image? + assert !fixture_blob("Binary/octocat.ai").image? + assert !fixture_blob("Binary/octocat.psd").image? + end + + def test_solid + assert fixture_blob("Binary/cube.stl").solid? + assert fixture_blob("Data/cube.stl").solid? + end + + def test_csv + assert fixture_blob("Data/cars.csv").csv? + end + + def test_pdf + assert fixture_blob("Binary/foo.pdf").pdf? + end + + def test_viewable + assert fixture_blob("Data/README").viewable? + assert sample_blob("Ruby/foo.rb").viewable? + assert sample_blob("Perl/script.pl").viewable? + assert !fixture_blob("Binary/linguist.gem").viewable? + assert !fixture_blob("Binary/octocat.ai").viewable? + assert !fixture_blob("Binary/octocat.png").viewable? + end + + def test_generated + assert !fixture_blob("Data/README").generated? + + # Xcode project files + assert !sample_blob("XML/MainMenu.xib").generated? + assert fixture_blob("Binary/MainMenu.nib").generated? + assert !sample_blob("XML/project.pbxproj").generated? + + # Gemfile.lock is NOT generated + assert !sample_blob("Gemfile.lock").generated? + + # Generated .NET Docfiles + assert sample_blob("XML/net_docfile.xml").generated? + + # Long line + assert !sample_blob("JavaScript/uglify.js").generated? + + # Inlined JS, but mostly code + assert !sample_blob("JavaScript/json2_backbone.js").generated? + + # Minified JS + assert !sample_blob("JavaScript/jquery-1.6.1.js").generated? + assert sample_blob("JavaScript/jquery-1.6.1.min.js").generated? + assert sample_blob("JavaScript/jquery-1.4.2.min.js").generated? + + # CoffeeScript-generated JS + # TODO + + # TypeScript-generated JS + # TODO + + # Composer generated composer.lock file + assert sample_blob("JSON/composer.lock").generated? + + # PEG.js-generated parsers + assert sample_blob("JavaScript/parser.js").generated? + + # Generated PostScript + assert !sample_blob("PostScript/sierpinski.ps").generated? + + # These examples are too basic to tell + assert !sample_blob("JavaScript/hello.js").generated? + + assert sample_blob("JavaScript/intro-old.js").generated? + assert sample_blob("JavaScript/classes-old.js").generated? + + assert sample_blob("JavaScript/intro.js").generated? + assert sample_blob("JavaScript/classes.js").generated? + + # Protocol Buffer generated code + assert sample_blob("C++/protocol-buffer.pb.h").generated? + assert sample_blob("C++/protocol-buffer.pb.cc").generated? + assert sample_blob("Java/ProtocolBuffer.java").generated? + assert sample_blob("Python/protocol_buffer_pb2.py").generated? + assert sample_blob("Go/api.pb.go").generated? + assert sample_blob("Go/embedded.go").generated? + + # Apache Thrift generated code + assert sample_blob("Python/gen-py-linguist-thrift.py").generated? + assert sample_blob("Go/gen-go-linguist-thrift.go").generated? + assert sample_blob("Java/gen-java-linguist-thrift.java").generated? + assert sample_blob("JavaScript/gen-js-linguist-thrift.js").generated? + assert sample_blob("Ruby/gen-rb-linguist-thrift.rb").generated? + assert sample_blob("Objective-C/gen-cocoa-linguist-thrift.m").generated? + + # Generated JNI + assert sample_blob("C/jni_layer.h").generated? + + # Minified CSS + assert !sample_blob("CSS/bootstrap.css").generated? + assert sample_blob("CSS/bootstrap.min.css").generated? + + # Generated VCR + assert sample_blob("YAML/vcr_cassette.yml").generated? + + # Generated by Zephir + assert sample_blob("Zephir/filenames/exception.zep.c").generated? + assert sample_blob("Zephir/filenames/exception.zep.h").generated? + assert sample_blob("Zephir/filenames/exception.zep.php").generated? + assert !sample_blob("Zephir/Router.zep").generated? + + assert sample_blob("node_modules/grunt/lib/grunt.js").generated? + + # Godep saved dependencies + assert sample_blob("Godeps/Godeps.json").generated? + assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").generated? + + # Cython-generated C/C++ + assert sample_blob("C/sgd_fast.c").generated? + assert sample_blob("C++/wrapper_inner.cpp").generated? + + # Unity3D-generated metadata + assert sample_blob("Unity3D Asset/Tiles.meta").generated? + end + + def test_vendored + assert !fixture_blob("Data/README").vendored? + assert !sample_blob("ext/extconf.rb").vendored? + + # Dependencies + assert sample_blob("dependencies/windows/headers/GL/glext.h").vendored? + + # Node dependencies + assert sample_blob("node_modules/coffee-script/lib/coffee-script.js").vendored? + + # Bower Components + assert sample_blob("bower_components/custom/custom.js").vendored? + assert sample_blob("app/bower_components/custom/custom.js").vendored? + assert sample_blob("vendor/assets/bower_components/custom/custom.js").vendored? + + # Go dependencies + assert !sample_blob("Godeps/Godeps.json").vendored? + assert sample_blob("Godeps/_workspace/src/github.com/kr/s3/sign.go").vendored? + + # Rails vendor/ + assert sample_blob("vendor/plugins/will_paginate/lib/will_paginate.rb").vendored? + + # Vendor/ + assert sample_blob("Vendor/my_great_file.h").vendored? + + # 'thirdparty' directory + assert sample_blob("thirdparty/lib/main.c").vendored? + + # 'extern(al)' directory + assert sample_blob("extern/util/__init__.py").vendored? + assert sample_blob("external/jquery.min.js").vendored? + + # C deps + assert sample_blob("deps/http_parser/http_parser.c").vendored? + assert sample_blob("deps/v8/src/v8.h").vendored? + + assert sample_blob("tools/something/else.c").vendored? + + # Chart.js + assert sample_blob("some/vendored/path/Chart.js").vendored? + assert !sample_blob("some/vendored/path/chart.js").vendored? + + # Codemirror deps + assert sample_blob("codemirror/mode/blah.js").vendored? + + # Debian packaging + assert sample_blob("debian/cron.d").vendored? + + # Erlang + assert sample_blob("rebar").vendored? + + # git config files + + assert_predicate fixture_blob("some/path/.gitattributes"), :vendored? + assert_predicate fixture_blob(".gitignore"), :vendored? + assert_predicate fixture_blob("special/path/.gitmodules"), :vendored? + + # Minified JavaScript and CSS + assert sample_blob("foo.min.js").vendored? + assert sample_blob("foo.min.css").vendored? + assert sample_blob("foo-min.js").vendored? + assert sample_blob("foo-min.css").vendored? + assert !sample_blob("foomin.css").vendored? + assert !sample_blob("foo.min.txt").vendored? + + #.osx + assert sample_blob(".osx").vendored? + + # Prototype + assert !sample_blob("public/javascripts/application.js").vendored? + assert sample_blob("public/javascripts/prototype.js").vendored? + assert sample_blob("public/javascripts/effects.js").vendored? + assert sample_blob("public/javascripts/controls.js").vendored? + assert sample_blob("public/javascripts/dragdrop.js").vendored? + + # jQuery + assert sample_blob("jquery.js").vendored? + assert sample_blob("public/javascripts/jquery.js").vendored? + assert sample_blob("public/javascripts/jquery.min.js").vendored? + assert sample_blob("public/javascripts/jquery-1.7.js").vendored? + assert sample_blob("public/javascripts/jquery-1.7.min.js").vendored? + assert sample_blob("public/javascripts/jquery-1.5.2.js").vendored? + assert sample_blob("public/javascripts/jquery-1.6.1.js").vendored? + assert sample_blob("public/javascripts/jquery-1.6.1.min.js").vendored? + assert sample_blob("public/javascripts/jquery-1.10.1.js").vendored? + assert sample_blob("public/javascripts/jquery-1.10.1.min.js").vendored? + assert !sample_blob("public/javascripts/jquery.github.menu.js").vendored? + + # jQuery UI + assert sample_blob("themes/ui-lightness/jquery-ui.css").vendored? + assert sample_blob("themes/ui-lightness/jquery-ui-1.8.22.custom.css").vendored? + assert sample_blob("themes/ui-lightness/jquery.ui.accordion.css").vendored? + assert sample_blob("ui/i18n/jquery.ui.datepicker-ar.js").vendored? + assert sample_blob("ui/i18n/jquery-ui-i18n.js").vendored? + assert sample_blob("ui/jquery.effects.blind.js").vendored? + assert sample_blob("ui/jquery-ui-1.8.22.custom.js").vendored? + assert sample_blob("ui/jquery-ui-1.8.22.custom.min.js").vendored? + assert sample_blob("ui/jquery-ui-1.8.22.js").vendored? + assert sample_blob("ui/jquery-ui-1.8.js").vendored? + assert sample_blob("ui/jquery-ui.min.js").vendored? + assert sample_blob("ui/jquery.ui.accordion.js").vendored? + assert sample_blob("ui/minified/jquery.effects.blind.min.js").vendored? + assert sample_blob("ui/minified/jquery.ui.accordion.min.js").vendored? + + # MooTools + assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat.js").vendored? + assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat-yc.js").vendored? + + # Dojo + assert sample_blob("public/javascripts/dojo.js").vendored? + + # MochiKit + assert sample_blob("public/javascripts/MochiKit.js").vendored? + + # YUI + assert sample_blob("public/javascripts/yahoo-dom-event.js").vendored? + assert sample_blob("public/javascripts/yahoo-min.js").vendored? + assert sample_blob("public/javascripts/yuiloader-dom-event.js").vendored? + + # WYS editors + assert sample_blob("public/javascripts/ckeditor.js").vendored? + assert sample_blob("public/javascripts/tiny_mce.js").vendored? + assert sample_blob("public/javascripts/tiny_mce_popup.js").vendored? + assert sample_blob("public/javascripts/tiny_mce_src.js").vendored? + + # AngularJS + assert sample_blob("public/javascripts/angular.js").vendored? + assert sample_blob("public/javascripts/angular.min.js").vendored? + + # D3.js + assert sample_blob("public/javascripts/d3.v3.js").vendored? + assert sample_blob("public/javascripts/d3.v3.min.js").vendored? + + # Modernizr + assert sample_blob("public/javascripts/modernizr-2.7.1.js").vendored? + assert sample_blob("public/javascripts/modernizr.custom.01009.js").vendored? + + # Fabric + assert sample_blob("fabfile.py").vendored? + + # WAF + assert sample_blob("waf").vendored? + + # Visual Studio IntelliSense + assert sample_blob("Scripts/jquery-1.7-vsdoc.js").vendored? + + # Microsoft Ajax + assert sample_blob("Scripts/MicrosoftAjax.debug.js").vendored? + assert sample_blob("Scripts/MicrosoftAjax.js").vendored? + assert sample_blob("Scripts/MicrosoftMvcAjax.debug.js").vendored? + assert sample_blob("Scripts/MicrosoftMvcAjax.js").vendored? + assert sample_blob("Scripts/MicrosoftMvcValidation.debug.js").vendored? + assert sample_blob("Scripts/MicrosoftMvcValidation.js").vendored? + + # jQuery validation plugin (MS bundles this with asp.net mvc) + assert sample_blob("Scripts/jquery.validate.js").vendored? + assert sample_blob("Scripts/jquery.validate.min.js").vendored? + assert sample_blob("Scripts/jquery.validate.unobtrusive.js").vendored? + assert sample_blob("Scripts/jquery.validate.unobtrusive.min.js").vendored? + assert sample_blob("Scripts/jquery.unobtrusive-ajax.js").vendored? + assert sample_blob("Scripts/jquery.unobtrusive-ajax.min.js").vendored? + + # NuGet Packages + assert sample_blob("packages/Modernizr.2.0.6/Content/Scripts/modernizr-2.0.6-development-only.js").vendored? + + # Font Awesome + assert sample_blob("some/asset/path/font-awesome.min.css").vendored? + assert sample_blob("some/asset/path/font-awesome.css").vendored? + + # Normalize + assert sample_blob("some/asset/path/normalize.css").vendored? + + # Carthage + assert sample_blob('Carthage/blah').vendored? + + # Cocoapods + assert sample_blob('Pods/blah').vendored? + + # Html5shiv + assert sample_blob("Scripts/html5shiv.js").vendored? + assert sample_blob("Scripts/html5shiv.min.js").vendored? + + # Test fixtures + assert sample_blob("test/fixtures/random.rkt").vendored? + assert sample_blob("Test/fixtures/random.rkt").vendored? + assert sample_blob("tests/fixtures/random.rkt").vendored? + + # Cordova/PhoneGap + assert sample_blob("cordova.js").vendored? + assert sample_blob("cordova.min.js").vendored? + assert sample_blob("cordova-2.1.0.js").vendored? + assert sample_blob("cordova-2.1.0.min.js").vendored? + + # Foundation js + assert sample_blob("foundation.js").vendored? + assert sample_blob("foundation.min.js").vendored? + assert sample_blob("foundation.abide.js").vendored? + + # Vagrant + assert sample_blob("Vagrantfile").vendored? + + # Gradle + assert sample_blob("gradlew").vendored? + assert sample_blob("gradlew.bat").vendored? + assert sample_blob("gradle/wrapper/gradle-wrapper.properties").vendored? + assert sample_blob("subproject/gradlew").vendored? + assert sample_blob("subproject/gradlew.bat").vendored? + assert sample_blob("subproject/gradle/wrapper/gradle-wrapper.properties").vendored? + + # Octicons + assert sample_blob("octicons.css").vendored? + assert sample_blob("public/octicons.min.css").vendored? + assert sample_blob("public/octicons/sprockets-octicons.scss").vendored? + + # Typesafe Activator + assert sample_blob("activator").vendored? + assert sample_blob("activator.bat").vendored? + assert sample_blob("subproject/activator").vendored? + assert sample_blob("subproject/activator.bat").vendored? + + assert_predicate fixture_blob(".google_apis/bar.jar"), :vendored? + assert_predicate fixture_blob("foo/.google_apis/bar.jar"), :vendored? + + # Sphinx docs + assert sample_blob("docs/_build/asset.doc").vendored? + assert sample_blob("docs/theme/file.css").vendored? + + # Vagrant + assert sample_blob("puphpet/file.pp").vendored? + + # Fabric.io + assert sample_blob("Fabric.framework/Fabric.h").vendored? + + # Crashlytics + assert sample_blob("Crashlytics.framework/Crashlytics.h").vendored? + end + + def test_documentation + assert_predicate fixture_blob("doc/foo.html"), :documentation? + assert_predicate fixture_blob("docs/foo.html"), :documentation? + refute_predicate fixture_blob("project/doc/foo.html"), :documentation? + refute_predicate fixture_blob("project/docs/foo.html"), :documentation? + + assert_predicate fixture_blob("Documentation/foo.md"), :documentation? + assert_predicate fixture_blob("documentation/foo.md"), :documentation? + assert_predicate fixture_blob("project/Documentation/foo.md"), :documentation? + assert_predicate fixture_blob("project/documentation/foo.md"), :documentation? + + assert_predicate fixture_blob("javadoc/foo.html"), :documentation? + assert_predicate fixture_blob("project/javadoc/foo.html"), :documentation? + + assert_predicate fixture_blob("man/foo.html"), :documentation? + refute_predicate fixture_blob("project/man/foo.html"), :documentation? + + assert_predicate fixture_blob("README"), :documentation? + assert_predicate fixture_blob("README.md"), :documentation? + assert_predicate fixture_blob("README.txt"), :documentation? + assert_predicate fixture_blob("Readme"), :documentation? + assert_predicate fixture_blob("readme"), :documentation? + assert_predicate fixture_blob("foo/README"), :documentation? + + assert_predicate fixture_blob("CHANGE"), :documentation? + assert_predicate fixture_blob("CHANGE.md"), :documentation? + assert_predicate fixture_blob("CHANGE.txt"), :documentation? + assert_predicate fixture_blob("foo/CHANGE"), :documentation? + + assert_predicate fixture_blob("CHANGELOG"), :documentation? + assert_predicate fixture_blob("CHANGELOG.md"), :documentation? + assert_predicate fixture_blob("CHANGELOG.txt"), :documentation? + assert_predicate fixture_blob("foo/CHANGELOG"), :documentation? + + assert_predicate fixture_blob("CHANGES"), :documentation? + assert_predicate fixture_blob("CHANGES.md"), :documentation? + assert_predicate fixture_blob("CHANGES.txt"), :documentation? + assert_predicate fixture_blob("foo/CHANGES"), :documentation? + + assert_predicate fixture_blob("CONTRIBUTING"), :documentation? + assert_predicate fixture_blob("CONTRIBUTING.md"), :documentation? + assert_predicate fixture_blob("CONTRIBUTING.txt"), :documentation? + assert_predicate fixture_blob("foo/CONTRIBUTING"), :documentation? + + assert_predicate fixture_blob("examples/some-file.pl"), :documentation? + assert_predicate fixture_blob("Examples/some-example-file.rb"), :documentation? + + assert_predicate fixture_blob("LICENSE"), :documentation? + assert_predicate fixture_blob("LICENCE.md"), :documentation? + assert_predicate fixture_blob("License.txt"), :documentation? + assert_predicate fixture_blob("LICENSE.txt"), :documentation? + assert_predicate fixture_blob("foo/LICENSE"), :documentation? + + assert_predicate fixture_blob("COPYING"), :documentation? + assert_predicate fixture_blob("COPYING.md"), :documentation? + assert_predicate fixture_blob("COPYING.txt"), :documentation? + assert_predicate fixture_blob("foo/COPYING"), :documentation? + + assert_predicate fixture_blob("INSTALL"), :documentation? + assert_predicate fixture_blob("INSTALL.md"), :documentation? + assert_predicate fixture_blob("INSTALL.txt"), :documentation? + assert_predicate fixture_blob("foo/INSTALL"), :documentation? + + refute_predicate fixture_blob("foo.md"), :documentation? + + # Samples + assert sample_blob("Samples/Ruby/foo.rb").documentation? + + assert_predicate fixture_blob("INSTALL.txt"), :documentation? + end + + def test_language + Samples.each do |sample| + blob = sample_blob(sample[:path]) + assert blob.language, "No language for #{sample[:path]}" + assert_equal sample[:language], blob.language.name, blob.name + end + + # Test language detection for files which shouldn't be used as samples + root = File.expand_path('../fixtures', __FILE__) + Dir.entries(root).each do |language| + next if language == '.' || language == '..' || language == 'Binary' || + File.basename(language) == 'ace_modes.json' + + # Each directory contains test files of a language + dirname = File.join(root, language) + Dir.entries(dirname).each do |filename| + # By default blob search the file in the samples; + # thus, we need to give it the absolute path + filepath = File.join(dirname, filename) + next unless File.file?(filepath) + + blob = fixture_blob(filepath) + if language == 'Data' + assert blob.language.nil?, "A language was found for #{filepath}" + elsif language == 'Generated' + assert blob.generated?, "#{filepath} is not a generated file" + else + assert blob.language, "No language for #{filepath}" + assert_equal language, blob.language.name, blob.name + end + end + end + end + + def test_minified_files_not_safe_to_highlight + assert !sample_blob("JavaScript/jquery-1.6.1.min.js").safe_to_colorize? + end + + def test_empty + blob = Struct.new(:data) { include Linguist::BlobHelper } + + assert blob.new("").empty? + assert blob.new(nil).empty? + refute blob.new(" ").empty? + refute blob.new("nope").empty? + end + + def test_include_in_language_stats + vendored = sample_blob("bower_components/custom/custom.js") + assert_predicate vendored, :vendored? + refute_predicate vendored, :include_in_language_stats? + + documentation = fixture_blob("README") + assert_predicate documentation, :documentation? + refute_predicate documentation, :include_in_language_stats? + + generated = sample_blob("CSS/bootstrap.min.css") + assert_predicate generated, :generated? + refute_predicate generated, :include_in_language_stats? + + data = sample_blob("Ant Build System/filenames/ant.xml") + assert_equal :data, data.language.type + refute_predicate data, :include_in_language_stats? + + prose = sample_blob("Markdown/tender.md") + assert_equal :prose, prose.language.type + refute_predicate prose, :include_in_language_stats? + + included = sample_blob("HTML/pages.html") + assert_predicate included, :include_in_language_stats? + end end diff --git a/test/test_memory_blob.rb b/test/test_memory_blob.rb deleted file mode 100644 index 1ba856de..00000000 --- a/test/test_memory_blob.rb +++ /dev/null @@ -1,290 +0,0 @@ -require_relative "./helper" - -class TestBlob < Minitest::Test - include Linguist - - def setup - # git blobs are normally loaded as ASCII-8BIT since they may contain data - # with arbitrary encoding not known ahead of time - @original_external = Encoding.default_external - Encoding.default_external = Encoding.find("ASCII-8BIT") - end - - def teardown - Encoding.default_external = @original_external - end - - def script_blob(name) - blob = sample_blob_memory(name) - blob.instance_variable_set(:@name, 'script') - blob - end - - def test_name - assert_equal "foo.rb", sample_blob_memory("Ruby/foo.rb").name - end - - def test_mime_type - assert_equal "application/postscript", fixture_blob_memory("Binary/octocat.ai").mime_type - assert_equal "application/x-ruby", sample_blob_memory("Ruby/grit.rb").mime_type - assert_equal "application/x-sh", sample_blob_memory("Shell/script.sh").mime_type - assert_equal "text/plain", fixture_blob_memory("Data/README").mime_type - end - - def test_content_type - assert_equal "application/pdf", fixture_blob_memory("Binary/foo.pdf").content_type - assert_equal "image/png", fixture_blob_memory("Binary/foo.png").content_type - assert_equal "text/plain; charset=iso-8859-2", fixture_blob_memory("Data/README").content_type - end - - def test_disposition - assert_equal "attachment; filename=foo+bar.jar", fixture_blob_memory("Binary/foo bar.jar").disposition - assert_equal "attachment; filename=foo.bin", fixture_blob_memory("Binary/foo.bin").disposition - assert_equal "attachment; filename=linguist.gem", fixture_blob_memory("Binary/linguist.gem").disposition - assert_equal "attachment; filename=octocat.ai", fixture_blob_memory("Binary/octocat.ai").disposition - assert_equal "inline", fixture_blob_memory("Data/README").disposition - assert_equal "inline", sample_blob_memory("Text/foo.txt").disposition - assert_equal "inline", sample_blob_memory("Ruby/grit.rb").disposition - assert_equal "inline", fixture_blob_memory("Binary/octocat.png").disposition - end - - def test_data - assert_equal "module Foo\nend\n", sample_blob_memory("Ruby/foo.rb").data - end - - def test_lines - assert_equal ["module Foo", "end", ""], sample_blob_memory("Ruby/foo.rb").lines - assert_equal ["line 1", "line 2", ""], sample_blob_memory("Text/mac.txt").lines - assert_equal 475, sample_blob_memory("Emacs Lisp/ess-julia.el").lines.length - end - - def test_lines_maintains_original_encoding - # Even if the file's encoding is detected as something like UTF-16LE, - # earlier versions of the gem made implicit guarantees that the encoding of - # each `line` is in the same encoding as the file was originally read (in - # practice, UTF-8 or ASCII-8BIT) - assert_equal Encoding.default_external, fixture_blob_memory("Data/utf16le").lines.first.encoding - end - - def test_size - assert_equal 15, sample_blob_memory("Ruby/foo.rb").size - end - - def test_loc - assert_equal 3, sample_blob_memory("Ruby/foo.rb").loc - end - - def test_sloc - assert_equal 2, sample_blob_memory("Ruby/foo.rb").sloc - assert_equal 3, fixture_blob_memory("Data/utf16le-windows").sloc - assert_equal 1, fixture_blob_memory("Data/iso8859-8-i").sloc - end - - def test_encoding - assert_equal "ISO-8859-2", fixture_blob_memory("Data/README").encoding - assert_equal "ISO-8859-2", fixture_blob_memory("Data/README").ruby_encoding - assert_equal "UTF-8", sample_blob_memory("Text/foo.txt").encoding - assert_equal "UTF-8", sample_blob_memory("Text/foo.txt").ruby_encoding - assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le").encoding - assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le").ruby_encoding - assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le-windows").encoding - assert_equal "UTF-16LE", fixture_blob_memory("Data/utf16le-windows").ruby_encoding - assert_equal "ISO-2022-KR", sample_blob_memory("Text/ISO-2022-KR.txt").encoding - assert_equal "binary", sample_blob_memory("Text/ISO-2022-KR.txt").ruby_encoding - assert_nil fixture_blob_memory("Binary/dog.o").encoding - end - - def test_binary - assert fixture_blob_memory("Binary/git.deb").binary? - assert fixture_blob_memory("Binary/hello.pbc").binary? - assert fixture_blob_memory("Binary/linguist.gem").binary? - assert fixture_blob_memory("Binary/octocat.ai").binary? - assert fixture_blob_memory("Binary/octocat.png").binary? - assert fixture_blob_memory("Binary/zip").binary? - assert !fixture_blob_memory("Data/README").binary? - assert !sample_blob_memory("Ruby/foo.rb").binary? - assert !sample_blob_memory("Perl/script.pl").binary? - end - - def test_all_binary - Samples.each do |sample| - blob = sample_blob_memory(sample[:path]) - assert ! (blob.likely_binary? || blob.binary?), "#{sample[:path]} is a binary file" - end - end - - def test_text - assert fixture_blob_memory("Data/README").text? - assert fixture_blob_memory("Data/md").text? - assert sample_blob_memory("Shell/script.sh").text? - assert fixture_blob_memory("Data/txt").text? - end - - def test_image - assert fixture_blob_memory("Binary/octocat.png").image? - assert !fixture_blob_memory("Binary/octocat.ai").image? - assert !fixture_blob_memory("Binary/octocat.psd").image? - end - - def test_solid - assert fixture_blob_memory("Binary/cube.stl").solid? - assert fixture_blob_memory("Data/cube.stl").solid? - end - - def test_csv - assert fixture_blob_memory("Data/cars.csv").csv? - end - - def test_pdf - assert fixture_blob_memory("Binary/foo.pdf").pdf? - end - - def test_viewable - assert fixture_blob_memory("Data/README").viewable? - assert sample_blob_memory("Ruby/foo.rb").viewable? - assert sample_blob_memory("Perl/script.pl").viewable? - assert !fixture_blob_memory("Binary/linguist.gem").viewable? - assert !fixture_blob_memory("Binary/octocat.ai").viewable? - assert !fixture_blob_memory("Binary/octocat.png").viewable? - end - - def test_generated - assert !fixture_blob_memory("Data/README").generated? - - # Generated .NET Docfiles - assert sample_blob_memory("XML/net_docfile.xml").generated? - - # Long line - assert !sample_blob_memory("JavaScript/uglify.js").generated? - - # Inlined JS, but mostly code - assert !sample_blob_memory("JavaScript/json2_backbone.js").generated? - - # Minified JS - assert !sample_blob_memory("JavaScript/jquery-1.6.1.js").generated? - assert sample_blob_memory("JavaScript/jquery-1.6.1.min.js").generated? - assert sample_blob_memory("JavaScript/jquery-1.4.2.min.js").generated? - - # Composer generated composer.lock file - assert sample_blob_memory("JSON/composer.lock").generated? - - # PEG.js-generated parsers - assert sample_blob_memory("JavaScript/parser.js").generated? - - # Generated PostScript - assert !sample_blob_memory("PostScript/sierpinski.ps").generated? - - # These examples are too basic to tell - assert !sample_blob_memory("JavaScript/hello.js").generated? - - assert sample_blob_memory("JavaScript/intro-old.js").generated? - assert sample_blob_memory("JavaScript/classes-old.js").generated? - - assert sample_blob_memory("JavaScript/intro.js").generated? - assert sample_blob_memory("JavaScript/classes.js").generated? - - # Protocol Buffer generated code - assert sample_blob_memory("C++/protocol-buffer.pb.h").generated? - assert sample_blob_memory("C++/protocol-buffer.pb.cc").generated? - assert sample_blob_memory("Java/ProtocolBuffer.java").generated? - assert sample_blob_memory("Python/protocol_buffer_pb2.py").generated? - assert sample_blob_memory("Go/api.pb.go").generated? - assert sample_blob_memory("Go/embedded.go").generated? - - # Apache Thrift generated code - assert sample_blob_memory("Python/gen-py-linguist-thrift.py").generated? - assert sample_blob_memory("Go/gen-go-linguist-thrift.go").generated? - assert sample_blob_memory("Java/gen-java-linguist-thrift.java").generated? - assert sample_blob_memory("JavaScript/gen-js-linguist-thrift.js").generated? - assert sample_blob_memory("Ruby/gen-rb-linguist-thrift.rb").generated? - assert sample_blob_memory("Objective-C/gen-cocoa-linguist-thrift.m").generated? - - # Generated JNI - assert sample_blob_memory("C/jni_layer.h").generated? - - # Minified CSS - assert !sample_blob_memory("CSS/bootstrap.css").generated? - assert sample_blob_memory("CSS/bootstrap.min.css").generated? - - # Generated VCR - assert sample_blob_memory("YAML/vcr_cassette.yml").generated? - - # Generated by Zephir - assert !sample_blob_memory("Zephir/Router.zep").generated? - - # Cython-generated C/C++ - assert sample_blob_memory("C/sgd_fast.c").generated? - assert sample_blob_memory("C++/wrapper_inner.cpp").generated? - - # Unity3D-generated metadata - assert sample_blob_memory("Unity3D Asset/Tiles.meta").generated? - end - - def test_vendored - assert !fixture_blob_memory("Data/README").vendored? - end - - def test_language - Samples.each do |sample| - blob = sample_blob_memory(sample[:path]) - assert blob.language, "No language for #{sample[:path]}" - assert_equal sample[:language], blob.language.name, blob.name - end - - # Test language detection for files which shouldn't be used as samples - root = File.expand_path('../fixtures', __FILE__) - Dir.entries(root).each do |language| - next if language == '.' || language == '..' || language == 'Binary' || - File.basename(language) == 'ace_modes.json' - - # Each directory contains test files of a language - dirname = File.join(root, language) - Dir.entries(dirname).each do |filename| - # By default blob search the file in the samples; - # thus, we need to give it the absolute path - filepath = File.join(dirname, filename) - next unless File.file?(filepath) - - blob = fixture_blob_memory(filepath) - if language == 'Data' - assert blob.language.nil?, "A language was found for #{filepath}" - elsif language == 'Generated' - assert blob.generated?, "#{filepath} is not a generated file" - else - assert blob.language, "No language for #{filepath}" - assert_equal language, blob.language.name, blob.name - end - end - end - end - - def test_minified_files_not_safe_to_highlight - assert !sample_blob_memory("JavaScript/jquery-1.6.1.min.js").safe_to_colorize? - end - - def test_empty - blob = Struct.new(:data) { include Linguist::BlobHelper } - - assert blob.new("").empty? - assert blob.new(nil).empty? - refute blob.new(" ").empty? - refute blob.new("nope").empty? - end - - def test_include_in_language_stats - generated = sample_blob_memory("CSS/bootstrap.min.css") - assert_predicate generated, :generated? - refute_predicate generated, :include_in_language_stats? - - data = sample_blob_memory("Ant Build System/filenames/ant.xml") - assert_equal :data, data.language.type - refute_predicate data, :include_in_language_stats? - - prose = sample_blob_memory("Markdown/tender.md") - assert_equal :prose, prose.language.type - refute_predicate prose, :include_in_language_stats? - - included = sample_blob_memory("HTML/pages.html") - assert_predicate included, :include_in_language_stats? - end -end From fd9ce2d1cf1e738058be7f39505431a55a4ed9e6 Mon Sep 17 00:00:00 2001 From: Ben Balter Date: Wed, 19 Aug 2015 12:54:21 -0400 Subject: [PATCH 090/356] use licensee to classify submodule licenses --- github-linguist.gemspec | 2 + test/helper.rb | 1 + test/test_grammars.rb | 126 ++++++++++++++++++++++++++-------------- 3 files changed, 84 insertions(+), 45 deletions(-) diff --git a/github-linguist.gemspec b/github-linguist.gemspec index ce2303bf..548812a3 100644 --- a/github-linguist.gemspec +++ b/github-linguist.gemspec @@ -24,4 +24,6 @@ Gem::Specification.new do |s| s.add_development_dependency 'rake' s.add_development_dependency 'yajl-ruby' s.add_development_dependency 'color-proximity', '~> 0.2.1' + s.add_development_dependency 'licensee', '~> 4.7.3' + end diff --git a/test/helper.rb b/test/helper.rb index ab3cc8fa..80060c29 100644 --- a/test/helper.rb +++ b/test/helper.rb @@ -3,6 +3,7 @@ require "minitest/autorun" require "mocha/setup" require "linguist" require 'color-proximity' +require 'licensee' def fixtures_path File.expand_path("../fixtures", __FILE__) diff --git a/test/test_grammars.rb b/test/test_grammars.rb index 88624ae8..a510585c 100644 --- a/test/test_grammars.rb +++ b/test/test_grammars.rb @@ -3,12 +3,13 @@ require_relative "./helper" class TestGrammars < Minitest::Test ROOT = File.expand_path("../..", __FILE__) - LICENSE_WHITELIST = [ + PROJECT_WHITELIST = [ # This grammar's MIT license is inside a subdirectory. "vendor/grammars/SublimePapyrus", # This grammar has a nonstandard but acceptable license. "vendor/grammars/gap-tmbundle", + "vendor/grammars/factor", # These grammars have no license but have been grandfathered in. New grammars # must have a license that allows redistribution. @@ -16,6 +17,22 @@ class TestGrammars < Minitest::Test "vendor/grammars/x86-assembly-textmate-bundle" ].freeze + # List of allowed SPDX license names + LICENSE_WHITELIST = %w[ + apache-2.0 + bsd-2-clause + bsd-3-clause + cc-by-sa-3.0 + gpl-2.0 + gpl-3.0 + lgpl-3.0 + mit + textmate + unlicense + wtfpl + zlib + ].freeze + def setup @grammars = YAML.load(File.read(File.join(ROOT, "grammars.yml"))) end @@ -63,47 +80,35 @@ class TestGrammars < Minitest::Test end def test_submodules_have_licenses - categories = submodule_paths.group_by do |submodule| - files = Dir[File.join(ROOT, submodule, "*")] - license = files.find { |path| File.basename(path) =~ /\b(un)?licen[cs]e\b/i } || files.find { |path| File.basename(path) =~ /\bcopying\b/i } - if license.nil? - if readme = files.find { |path| File.basename(path) =~ /\Areadme\b/i } - license = readme if File.read(readme) =~ /\blicen[cs]e\b/i - end - end - if license.nil? - :unlicensed - elsif classify_license(license) - :licensed + submodule_licenses.each do |submodule, license| + next if PROJECT_WHITELIST.include?(submodule) + + license_file = Licensee::Project.new(submodule).license_file + submodule_name = submodule.split("/").last + + if license_file + assert license, "Submodule #{submodule_name} contains an unrecognized license. Please update #{__FILE__} to recognize the license" else - :unrecognized + assert license, "Submodule #{submodule_name} is unlicensed. All grammars must have a license that permits redistribution" end + + assert LICENSE_WHITELIST.include?(license), "Submodule #{submodule_name} is licensed under the #{license} license" end - unlicensed = categories[:unlicensed] || [] - unrecognized = categories[:unrecognized] || [] - disallowed_unlicensed = unlicensed - LICENSE_WHITELIST - disallowed_unrecognized = unrecognized - LICENSE_WHITELIST - extra_whitelist_entries = LICENSE_WHITELIST - (unlicensed | unrecognized) + unlicensed = submodule_licenses.select { |k,v| v.nil? } + unrecognized = submodule_licenses.select { |k,v| v.nil? && Licensee::Project.new(k).license_file} + licensed = submodule_licenses.reject { |k,v| v.nil? } + unapproved = licensed.reject { |k,v| LICENSE_WHITELIST.include?(v) } + extra_whitelist_entries = PROJECT_WHITELIST - unlicensed.keys - unrecognized.keys + assert unapproved.empty? - message = "" - if disallowed_unlicensed.any? - message << "The following grammar submodules don't seem to have a license. All grammars must have a license that permits redistribution.\n" - message << disallowed_unlicensed.sort.join("\n") - end - if disallowed_unrecognized.any? - message << "\n\n" unless message.empty? - message << "The following grammar submodules have an unrecognized license. Please update #{__FILE__} to recognize the license.\n" - message << disallowed_unrecognized.sort.join("\n") - end - if extra_whitelist_entries.any? - message << "\n\n" unless message.empty? - message << "The following grammar submodules are listed in LICENSE_WHITELIST but either have a license (yay!)\n" - message << "or have been removed from the repository. Please remove them from the whitelist.\n" - message << extra_whitelist_entries.sort.join("\n") - end + extra_whitelist_entries.each do |submodule| + license = submodule_licenses[submodule] + submodule_name = submodule.split("/").last - assert disallowed_unlicensed.empty? && disallowed_unrecognized.empty? && extra_whitelist_entries.empty?, message + assert_equal nil, license, "Submodule #{submodule_name} is listed in PROJECT_WHITELIST but has a license" + assert Dir.exists?(submodule), "Submodule #{submodule_name} is listed in PROJECT_WHITELIST but doesn't appear to be part of the project" + end end private @@ -112,30 +117,61 @@ class TestGrammars < Minitest::Test @submodule_paths ||= `git config --list --file "#{File.join(ROOT, ".gitmodules")}"`.lines.grep(/\.path=/).map { |line| line.chomp.split("=", 2).last } end + # Returns a hash of submodules in the form of submodule_path => license + def submodule_licenses + @submodule_licenses = begin + submodules = {} + submodule_paths.each { |submodule| submodules[submodule] = submodule_license(submodule) } + submodules + end + end + + # Given the path to a submodule, return its SPDX-compliant license key + def submodule_license(submodule) + # Prefer Licensee to detect a submodule's license + project = Licensee::Project.new(submodule) + return project.license.key if project.license + + # We know a license file exists, but Licensee wasn't able to detect the license, + # Let's try our own more permissive regex method + if project.license_file + path = File.expand_path project.license_file.path, submodule + license = classify_license(path) + return license if license + end + + # Neither Licensee nor our own regex was able to detect the license, lets check the readme + files = Dir[File.join(ROOT, submodule, "*")] + if readme = files.find { |path| File.basename(path) =~ /\Areadme\b/i } + classify_license(readme) + end + end + def classify_license(path) content = File.read(path) + return unless content =~ /\blicen[cs]e\b/i if content.include?("Apache License") && content.include?("2.0") - "Apache 2.0" + "apache-2.0" elsif content.include?("GNU") && content =~ /general/i && content =~ /public/i if content =~ /version 2/i - "GPLv2" + "gpl-2.0" elsif content =~ /version 3/i - "GPLv3" + "gpl-3.0" end elsif content.include?("GPL") && content.include?("http://www.gnu.org/licenses/gpl.html") - "GPLv3" - elsif content.include?("Creative Commons") - "CC" + "gpl-3.0" + elsif content.include?("Creative Commons Attribution-Share Alike 3.0") + "cc-by-sa-3.0" elsif content.include?("tidy-license.txt") || content.include?("If not otherwise specified (see below)") "textmate" elsif content =~ /^\s*[*-]\s+Redistribution/ || content.include?("Redistributions of source code") - "BSD" + "bsd" elsif content.include?("Permission is hereby granted") || content =~ /\bMIT\b/ - "MIT" + "mit" elsif content.include?("unlicense.org") "unlicense" elsif content.include?("http://www.wtfpl.net/txt/copying/") - "WTFPL" + "wtfpl" elsif content.include?("zlib") && content.include?("license") && content.include?("2. Altered source versions must be plainly marked as such") "zlib" end From 8a7ceaa84530cc9522a4b6d597522a95574fced0 Mon Sep 17 00:00:00 2001 From: Ben Balter Date: Wed, 19 Aug 2015 13:22:31 -0400 Subject: [PATCH 091/356] bump licensee to support ruby 1.9.3 --- github-linguist.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github-linguist.gemspec b/github-linguist.gemspec index 548812a3..87bbc8bf 100644 --- a/github-linguist.gemspec +++ b/github-linguist.gemspec @@ -24,6 +24,6 @@ Gem::Specification.new do |s| s.add_development_dependency 'rake' s.add_development_dependency 'yajl-ruby' s.add_development_dependency 'color-proximity', '~> 0.2.1' - s.add_development_dependency 'licensee', '~> 4.7.3' + s.add_development_dependency 'licensee', '~> 4.7.4' end From 0d7a264981d1bf43a7d13c7e577fd418f1d27aa7 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Wed, 19 Aug 2015 20:43:16 +0200 Subject: [PATCH 092/356] Update submodule for Prolog grammar --- vendor/grammars/sublimeprolog | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/grammars/sublimeprolog b/vendor/grammars/sublimeprolog index 465efc54..9fd46df4 160000 --- a/vendor/grammars/sublimeprolog +++ b/vendor/grammars/sublimeprolog @@ -1 +1 @@ -Subproject commit 465efc540e0e87787226a8563d65b15959e5a065 +Subproject commit 9fd46df4b63479a8672d184cd47374a044a11b11 From 7d91e4959a5efeaedfce4ad9b0c4a42c867327a9 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Wed, 19 Aug 2015 20:56:14 +0200 Subject: [PATCH 093/356] Dissociate ECLiPSe from Prolog ECLiPSe syntax is slightly different from Prolog syntax ECLiPSe is in the Prolog group so it will only be highlighted differently --- lib/linguist/heuristics.rb | 2 +- lib/linguist/languages.yml | 9 ++++++++- samples/{Prolog => ECLiPSe}/or-constraint.ecl | 0 test/test_heuristics.rb | 6 +++--- 4 files changed, 12 insertions(+), 5 deletions(-) rename samples/{Prolog => ECLiPSe}/or-constraint.ecl (100%) diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index fc8699c5..12104ee6 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -112,7 +112,7 @@ module Linguist disambiguate ".ecl" do |data| if /^[^#]+:-/.match(data) - Language["Prolog"] + Language["ECLiPSe"] elsif data.include?(":=") Language["ECL"] end diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 6ff194c9..fe37aacb 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -843,6 +843,14 @@ ECL: tm_scope: none ace_mode: text +ECLiPSe: + type: programming + group: prolog + extensions: + - .ecl + tm_scope: source.prolog.eclipse + ace_mode: prolog + Eagle: type: markup color: "#814C05" @@ -2628,7 +2636,6 @@ Prolog: color: "#74283c" extensions: - .pl - - .ecl - .pro - .prolog interpreters: diff --git a/samples/Prolog/or-constraint.ecl b/samples/ECLiPSe/or-constraint.ecl similarity index 100% rename from samples/Prolog/or-constraint.ecl rename to samples/ECLiPSe/or-constraint.ecl diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index 59041e7b..3448235b 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -66,11 +66,11 @@ class TestHeuristcs < Minitest::Test }) end - # Candidate languages = ["ECL", "Prolog"] - def test_ecl_prolog_by_heuristics + # Candidate languages = ["ECL", "ECLiPSe"] + def test_ecl_by_heuristics assert_heuristics({ "ECL" => all_fixtures("ECL", "*.ecl"), - "Prolog" => all_fixtures("Prolog", "*.ecl") + "ECLiPSe" => all_fixtures("ECLiPSe", "*.ecl") }) end From 5c2cfbc334a0a5efc3896cd69dc81e858308df75 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Wed, 19 Aug 2015 21:27:40 +0200 Subject: [PATCH 094/356] Remove Typescript grammar --- .gitmodules | 3 --- grammars.yml | 2 -- vendor/grammars/sublime-better-typescript | 1 - 3 files changed, 6 deletions(-) delete mode 160000 vendor/grammars/sublime-better-typescript diff --git a/.gitmodules b/.gitmodules index 47cf934f..dea29f0b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -169,9 +169,6 @@ [submodule "vendor/grammars/sublime-idris"] path = vendor/grammars/sublime-idris url = https://github.com/laughedelic/sublime-idris -[submodule "vendor/grammars/sublime-better-typescript"] - path = vendor/grammars/sublime-better-typescript - url = https://github.com/lavrton/sublime-better-typescript [submodule "vendor/grammars/moonscript-tmbundle"] path = vendor/grammars/moonscript-tmbundle url = https://github.com/leafo/moonscript-tmbundle diff --git a/grammars.yml b/grammars.yml index 88d21d39..4230142b 100644 --- a/grammars.yml +++ b/grammars.yml @@ -484,8 +484,6 @@ vendor/grammars/sublime-aspectj/: - source.aspectj vendor/grammars/sublime-befunge: - source.befunge -vendor/grammars/sublime-better-typescript: -- source.ts vendor/grammars/sublime-bsv: - source.bsv vendor/grammars/sublime-cirru: diff --git a/vendor/grammars/sublime-better-typescript b/vendor/grammars/sublime-better-typescript deleted file mode 160000 index 8266c06a..00000000 --- a/vendor/grammars/sublime-better-typescript +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8266c06aabe5e473766bd9bb62dfeb106fe296a2 From 519b169df0cafc8fcb14bb6b1d9dcab4b2bff51b Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Wed, 19 Aug 2015 21:30:24 +0200 Subject: [PATCH 095/356] New grammar for Typescript from Sublime Text package --- .gitmodules | 3 +++ grammars.yml | 3 +++ vendor/grammars/sublime-typescript | 1 + 3 files changed, 7 insertions(+) create mode 160000 vendor/grammars/sublime-typescript diff --git a/.gitmodules b/.gitmodules index dea29f0b..429acb57 100644 --- a/.gitmodules +++ b/.gitmodules @@ -671,3 +671,6 @@ [submodule "vendor/grammars/sublime-aspectj"] path = vendor/grammars/sublime-aspectj url = https://github.com/pchaigno/sublime-aspectj +[submodule "vendor/grammars/sublime-typescript"] + path = vendor/grammars/sublime-typescript + url = https://github.com/Microsoft/TypeScript-Sublime-Plugin diff --git a/grammars.yml b/grammars.yml index 4230142b..df137f86 100644 --- a/grammars.yml +++ b/grammars.yml @@ -522,6 +522,9 @@ vendor/grammars/sublime-text-ox/: - source.ox vendor/grammars/sublime-text-pig-latin/: - source.pig_latin +vendor/grammars/sublime-typescript/: +- source.ts +- source.tsx vendor/grammars/sublime-varnish: - source.varnish.vcl vendor/grammars/sublime_cobol: diff --git a/vendor/grammars/sublime-typescript b/vendor/grammars/sublime-typescript new file mode 160000 index 00000000..0d519e5a --- /dev/null +++ b/vendor/grammars/sublime-typescript @@ -0,0 +1 @@ +Subproject commit 0d519e5a5592bd4152523fe359d1a0ebbe9cc493 From 80e2d112b22281a965f31ec162e2a4d1c5c728ca Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Wed, 19 Aug 2015 22:07:23 +0200 Subject: [PATCH 096/356] tm_scope for RMarkdown --- lib/linguist/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index ef3b0968..6308fb34 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2813,7 +2813,7 @@ RMarkdown: ace_mode: markdown extensions: - .rmd - tm_scope: none + tm_scope: source.gfm Racket: type: programming From e214a52de5aed5baf2f6580d35a8a1641797e007 Mon Sep 17 00:00:00 2001 From: Alejandro Oviedo Date: Wed, 19 Aug 2015 19:15:05 -0300 Subject: [PATCH 097/356] relativize link in readme ...so it could link properly in other branches and forks. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 374851fb..4ca08af1 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ See [Troubleshooting](#troubleshooting) and [`CONTRIBUTING.md`](/CONTRIBUTING.md The Language stats bar is built by aggregating the languages of each file in that repository. If it is reporting a language that you don't expect: 0. Click on the name of the language in the stats bar to see a list of the files that are identified as that language. -0. If you see files that you didn't write, consider moving the files into one of the [paths for vendored code](https://github.com/github/linguist/blob/master/lib/linguist/vendor.yml), or use the [manual overrides](#overrides) feature to ignore them. +0. If you see files that you didn't write, consider moving the files into one of the [paths for vendored code](/lib/linguist/vendor.yml), or use the [manual overrides](#overrides) feature to ignore them. 0. If the files are being misclassified, search for [open issues][issues] to see if anyone else has already reported the issue. Any information you an add, especially links to public repositories, is helpful. 0. If there are no reported issues of this misclassification, [open an issue][new-issue] and include a link to the repository or a sample of the code that is being misclassified. From a74f3b3e460f42549a48b529d4c2657779fc15d0 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Thu, 20 Aug 2015 10:16:52 +0100 Subject: [PATCH 098/356] Adding Perl/Perl6 heuristic for '.t' --- lib/linguist/heuristics.rb | 4 ++-- test/test_heuristics.rb | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 12104ee6..7c523fa8 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -33,7 +33,7 @@ module Linguist # # Examples # - # disambiguate "Perl", "Prolog" do |data| + # disambiguate ".pm" do |data| # if data.include?("use strict") # Language["Perl"] # elsif /^[^#]+:-/.match(data) @@ -102,7 +102,7 @@ module Linguist end end - disambiguate ".pm" do |data| + disambiguate ".pm", ".t" do |data| if /^(use v6|(my )?class|module)/.match(data) Language["Perl6"] elsif /use strict|use\s+v?5\./.match(data) diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index 3448235b..cca48675 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -66,6 +66,16 @@ class TestHeuristcs < Minitest::Test }) end + # Candidate languages = ["Perl", "Perl6"] + def test_t_perl_by_heuristics + assert_heuristics({ + "Perl" => all_fixtures("Perl", "*.t"), + "Perl6" => ["Perl6/01-dash-uppercase-i.t", "Perl6/01-parse.t", "Perl6/advent2009-day16.t", + "Perl6/basic-open.t", "Perl6/calendar.t", "Perl6/for.t", "Perl6/hash.t", + "Perl6/listquote-whitespace.t"] + }) + end + # Candidate languages = ["ECL", "ECLiPSe"] def test_ecl_by_heuristics assert_heuristics({ From fbb3ab22920e2ffb305aa3e1806e8348b950e76b Mon Sep 17 00:00:00 2001 From: Ben Balter Date: Thu, 20 Aug 2015 11:38:31 -0400 Subject: [PATCH 099/356] batch license test output --- test/test_grammars.rb | 52 ++++++++++++++++++------------------------- 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/test/test_grammars.rb b/test/test_grammars.rb index a510585c..12b22bd6 100644 --- a/test/test_grammars.rb +++ b/test/test_grammars.rb @@ -79,36 +79,32 @@ class TestGrammars < Minitest::Test end end + def test_submodules_have_recognized_licenses + unrecognized = submodule_licenses.select { |k,v| v.nil? && Licensee::Project.new(k).license_file } + unrecognized.reject! { |k,v| PROJECT_WHITELIST.include?(k) } + assert_equal Hash.new, unrecognized, "The following submodules have unrecognized licenses:\n* #{unrecognized.keys.join("\n* ")}" + end + def test_submodules_have_licenses - submodule_licenses.each do |submodule, license| - next if PROJECT_WHITELIST.include?(submodule) + unlicensed = submodule_licenses.select { |k,v| v.nil? }.reject { |k,v| PROJECT_WHITELIST.include?(k) } + assert_equal Hash.new, unlicensed, "The following submodules don't have licenses:\n* #{unlicensed.keys.join("\n* ")}" + end - license_file = Licensee::Project.new(submodule).license_file - submodule_name = submodule.split("/").last + def test_submodules_have_approved_licenses + unapproved = submodule_licenses.reject { |k,v| LICENSE_WHITELIST.include?(v) || PROJECT_WHITELIST.include?(k) }.map { |k,v| "#{k}: #{v}"} + assert_equal [], unapproved, "The following submodules have unapproved licenses:\n* #{unapproved.join("\n* ")}" + end - if license_file - assert license, "Submodule #{submodule_name} contains an unrecognized license. Please update #{__FILE__} to recognize the license" - else - assert license, "Submodule #{submodule_name} is unlicensed. All grammars must have a license that permits redistribution" - end + def test_submodules_whitelist_has_no_extra_entries + extra_whitelist_entries = PROJECT_WHITELIST - submodule_licenses.select { |k,v| v.nil? }.keys + not_present = extra_whitelist_entries.reject { |k,v| Dir.exists?(k) } + licensed = extra_whitelist_entries.select { |k,v| submodule_licenses[k] } - assert LICENSE_WHITELIST.include?(license), "Submodule #{submodule_name} is licensed under the #{license} license" - end + msg = "The following whitelisted submodules don't appear to be part of the project:\n* #{not_present.join("\n* ")}" + assert_equal [], not_present, msg - unlicensed = submodule_licenses.select { |k,v| v.nil? } - unrecognized = submodule_licenses.select { |k,v| v.nil? && Licensee::Project.new(k).license_file} - licensed = submodule_licenses.reject { |k,v| v.nil? } - unapproved = licensed.reject { |k,v| LICENSE_WHITELIST.include?(v) } - extra_whitelist_entries = PROJECT_WHITELIST - unlicensed.keys - unrecognized.keys - assert unapproved.empty? - - extra_whitelist_entries.each do |submodule| - license = submodule_licenses[submodule] - submodule_name = submodule.split("/").last - - assert_equal nil, license, "Submodule #{submodule_name} is listed in PROJECT_WHITELIST but has a license" - assert Dir.exists?(submodule), "Submodule #{submodule_name} is listed in PROJECT_WHITELIST but doesn't appear to be part of the project" - end + msg = "The following whitelisted submodules actually have licenses and don't need to be whitelisted:\n* #{licensed.join("\n* ")}" + assert_equal [], licensed, msg end private @@ -119,7 +115,7 @@ class TestGrammars < Minitest::Test # Returns a hash of submodules in the form of submodule_path => license def submodule_licenses - @submodule_licenses = begin + @@submodule_licenses ||= begin submodules = {} submodule_paths.each { |submodule| submodules[submodule] = submodule_license(submodule) } submodules @@ -164,12 +160,8 @@ class TestGrammars < Minitest::Test "cc-by-sa-3.0" elsif content.include?("tidy-license.txt") || content.include?("If not otherwise specified (see below)") "textmate" - elsif content =~ /^\s*[*-]\s+Redistribution/ || content.include?("Redistributions of source code") - "bsd" elsif content.include?("Permission is hereby granted") || content =~ /\bMIT\b/ "mit" - elsif content.include?("unlicense.org") - "unlicense" elsif content.include?("http://www.wtfpl.net/txt/copying/") "wtfpl" elsif content.include?("zlib") && content.include?("license") && content.include?("2. Altered source versions must be plainly marked as such") From 62a0faa729593936cfd80b3996284f12da71dbf5 Mon Sep 17 00:00:00 2001 From: Ben Balter Date: Thu, 20 Aug 2015 12:23:52 -0400 Subject: [PATCH 100/356] let us --- test/test_grammars.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_grammars.rb b/test/test_grammars.rb index 12b22bd6..6aab2935 100644 --- a/test/test_grammars.rb +++ b/test/test_grammars.rb @@ -136,7 +136,7 @@ class TestGrammars < Minitest::Test return license if license end - # Neither Licensee nor our own regex was able to detect the license, lets check the readme + # Neither Licensee nor our own regex was able to detect the license, let's check the readme files = Dir[File.join(ROOT, submodule, "*")] if readme = files.find { |path| File.basename(path) =~ /\Areadme\b/i } classify_license(readme) From 16e65fe18953a0231ff6721939ded1a8e4677245 Mon Sep 17 00:00:00 2001 From: Blake Embrey Date: Thu, 20 Aug 2015 10:07:44 -0700 Subject: [PATCH 101/356] Make RAML a markup language RAML was originally merged as a data language, but this seems like an incorrect definition. I changed it to be markup instead, which will also result in RAML appearing in repo statistics. --- lib/linguist/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 8936b0f4..5b31ed4f 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2778,7 +2778,7 @@ R: ace_mode: r RAML: - type: data + type: markup ace_mode: yaml tm_scope: source.yaml color: "#77d9fb" From cb550a36623b0516262701b9cb7c4e2c1e5756aa Mon Sep 17 00:00:00 2001 From: Ben Balter Date: Thu, 20 Aug 2015 15:30:51 -0400 Subject: [PATCH 102/356] remove some random submodules --- vendor/grammars/prolog.tmbundle | 1 - vendor/grammars/sublime-better-typescript | 1 - 2 files changed, 2 deletions(-) delete mode 160000 vendor/grammars/prolog.tmbundle delete mode 160000 vendor/grammars/sublime-better-typescript diff --git a/vendor/grammars/prolog.tmbundle b/vendor/grammars/prolog.tmbundle deleted file mode 160000 index d955aca3..00000000 --- a/vendor/grammars/prolog.tmbundle +++ /dev/null @@ -1 +0,0 @@ -Subproject commit d955aca38b7aadce76e6815eb09487a370206742 diff --git a/vendor/grammars/sublime-better-typescript b/vendor/grammars/sublime-better-typescript deleted file mode 160000 index 8266c06a..00000000 --- a/vendor/grammars/sublime-better-typescript +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 8266c06aabe5e473766bd9bb62dfeb106fe296a2 From 96518d2d0f5bdfb01f6a0598193876d4bf942fad Mon Sep 17 00:00:00 2001 From: LeonaMorro Date: Fri, 21 Aug 2015 11:17:12 +0200 Subject: [PATCH 103/356] added *.lslp as LSL(Linden Scripting Language) --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 5b31ed4f..0d552ac7 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1719,6 +1719,7 @@ LSL: ace_mode: lsl extensions: - .lsl + - .lslp interpreters: - lsl color: '#3d9970' From e922b7c2cae45c1b93f35035c4dc6383fadddcfb Mon Sep 17 00:00:00 2001 From: LeonaMorro Date: Fri, 21 Aug 2015 11:44:23 +0200 Subject: [PATCH 104/356] added *.lslp to samples/LSL folder --- samples/LSL/LSL.lslp | 74 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 samples/LSL/LSL.lslp diff --git a/samples/LSL/LSL.lslp b/samples/LSL/LSL.lslp new file mode 100644 index 00000000..5d281b95 --- /dev/null +++ b/samples/LSL/LSL.lslp @@ -0,0 +1,74 @@ +/* + Testing syntax highlighting + for the Linden Scripting Language +*/ + +integer someIntNormal = 3672; +integer someIntHex = 0x00000000; +integer someIntMath = PI_BY_TWO; + +integer event = 5673;// 'event' is invalid.illegal + +key someKeyTexture = TEXTURE_DEFAULT; +string someStringSpecial = EOF; + +some_user_defined_function_without_return_type(string inputAsString) +{ + llSay(PUBLIC_CHANNEL, inputAsString); +} + +string user_defined_function_returning_a_string(key inputAsKey) +{ + return (string)inputAsKey; +} + +default +{ + state_entry() + { + key someKey = NULL_KEY; + someKey = llGetOwner(); + + string someString = user_defined_function_returning_a_string(someKey); + + some_user_defined_function_without_return_type(someString); + } + + touch_start(integer num_detected) + { + list agentsInRegion = llGetAgentList(AGENT_LIST_REGION, []); + integer numOfAgents = llGetListLength(agentsInRegion); + + integer index; // defaults to 0 + for (; index <= numOfAgents - 1; index++) // for each agent in region + { + llRegionSayTo(llList2Key(agentsInRegion, index), PUBLIC_CHANNEL, "Hello, Avatar!"); + } + } + + touch_end(integer num_detected) + { + someIntNormal = 3672; + someIntHex = 0x00000000; + someIntMath = PI_BY_TWO; + + event = 5673;// 'event' is invalid.illegal + + someKeyTexture = TEXTURE_DEFAULT; + someStringSpecial = EOF; + + llSetInventoryPermMask("some item", MASK_NEXT, PERM_ALL);// 'llSetInventoryPermMask' is reserved.godmode + + llWhisper(PUBLIC_CHANNEL, "Leaving \"default\" now..."); + state other; + } +} + +state other +{ + state_entry() + { + llWhisper(PUBLIC_CHANNEL, "Entered \"state other\", returning to \"default\" again..."); + state default; + } +} From 7025cbe760f191e00c30c4847ae0e4dd467e1fc8 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Fri, 21 Aug 2015 12:12:52 +0200 Subject: [PATCH 105/356] Fix CodeMirror regex for vendored files --- lib/linguist/vendor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml index ed89eda8..314fe956 100644 --- a/lib/linguist/vendor.yml +++ b/lib/linguist/vendor.yml @@ -122,7 +122,7 @@ - (^|/)Chart\.js$ # Codemirror -- (^|/)[Cc]ode[Mm]irror/(lib|mode|theme|addon|keymap|demo) +- (^|/)[Cc]ode[Mm]irror/(\d+\.\d+/)?(lib|mode|theme|addon|keymap|demo) # SyntaxHighlighter - http://alexgorbatchev.com/ - (^|/)shBrush([^.]*)\.js$ From 1d9faff4c60e33fbdd0de8907ad2758279b19dd8 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Fri, 21 Aug 2015 12:13:42 +0200 Subject: [PATCH 106/356] New JS vendored files --- lib/linguist/vendor.yml | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml index 314fe956..73b1071e 100644 --- a/lib/linguist/vendor.yml +++ b/lib/linguist/vendor.yml @@ -78,6 +78,9 @@ # Haxelib projects often contain a neko bytecode file named run.n - run.n$ +# Bootstrap Datepicker +- bootstrap-datepicker/ + ## Commonly Bundled JavaScript frameworks ## # jQuery @@ -88,6 +91,30 @@ - (^|/)jquery\-ui(\-\d\.\d+(\.\d+)?)?(\.\w+)?\.(js|css)$ - (^|/)jquery\.(ui|effects)\.([^.]*)\.(js|css)$ +# jQuery Gantt +- jquery.fn.gantt.js + +# jQuery fancyBox +- jquery.fancybox.js + +# Fuel UX +- fuelux.js + +# jQuery File Upload +- (^|/)jquery\.fileupload(-\w+)?\.js$ + +# Slick +- (^|/)slick\.(core|dataview|editors|formatters|grid|groupitemmetadataprovider|remotemodel)\.js$ + +# Leaflet plugins +- (^|/)Leaflet\.Coordinates-\d+\.\d+\.\d+\.src\.js$ +- leaflet.draw-src.js +- leaflet.draw.css +- Control.FullScreen.css +- Control.FullScreen.js +- leaflet.spin.js +- wicket-leaflet.js + # Prototype - (^|/)prototype(.*)\.js$ - (^|/)effects\.js$ From 4e6e69833d9b9c46395dbaecde66de1fe5916f0e Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Fri, 21 Aug 2015 12:15:17 +0200 Subject: [PATCH 107/356] Test for new CodeMirror regexp --- test/test_blob.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test_blob.rb b/test/test_blob.rb index 0a1cefe9..46869987 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -301,6 +301,7 @@ class TestBlob < Minitest::Test # Codemirror deps assert sample_blob("codemirror/mode/blah.js").vendored? + assert sample_blob("codemirror/5.0/mode/blah.js").vendored? # Debian packaging assert sample_blob("debian/cron.d").vendored? From e6b4428614664c5d72d7b799eb73d885e39f3cbc Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Fri, 21 Aug 2015 12:24:04 +0200 Subject: [PATCH 108/356] Tests for new vendored files --- test/test_blob.rb | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/test/test_blob.rb b/test/test_blob.rb index 46869987..ca9640c4 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -362,6 +362,26 @@ class TestBlob < Minitest::Test assert sample_blob("ui/minified/jquery.effects.blind.min.js").vendored? assert sample_blob("ui/minified/jquery.ui.accordion.min.js").vendored? + # jQuery Gantt + assert sample_blob("web-app/jquery-gantt/js/jquery.fn.gantt.js").vendored? + + # jQuery fancyBox + assert sample_blob("web-app/fancybox/jquery.fancybox.js").vendored? + + # Fuel UX + assert sample_blob("web-app/fuelux/js/fuelux.js").vendored? + + # jQuery File Upload + assert sample_blob("fileupload-9.0.0/jquery.fileupload-process.js").vendored? + + # Slick + assert sample_blob("web-app/slickgrid/controls/slick.columnpicker.js").vendored? + + # Leaflet plugins + assert sample_blob("leaflet-plugins/Leaflet.Coordinates-0.5.0.src.js").vendored? + assert sample_blob("leaflet-plugins/leaflet.draw-src.js").vendored? + assert sample_blob("leaflet-plugins/leaflet.spin.js").vendored? + # MooTools assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat.js").vendored? assert sample_blob("public/javascripts/mootools-core-1.3.2-full-compat-yc.js").vendored? From c0fff6c8a8e560188004b801d8cfe60da49e89e7 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Fri, 21 Aug 2015 12:30:01 +0200 Subject: [PATCH 109/356] Make Slick regexp more general --- lib/linguist/vendor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml index 73b1071e..cf312d89 100644 --- a/lib/linguist/vendor.yml +++ b/lib/linguist/vendor.yml @@ -104,7 +104,7 @@ - (^|/)jquery\.fileupload(-\w+)?\.js$ # Slick -- (^|/)slick\.(core|dataview|editors|formatters|grid|groupitemmetadataprovider|remotemodel)\.js$ +- (^|/)slick\.\w+.js$ # Leaflet plugins - (^|/)Leaflet\.Coordinates-\d+\.\d+\.\d+\.src\.js$ From 0d8e0a29702d94ae83f1e2003ca23bc8fc4468c0 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Mon, 24 Aug 2015 12:32:26 +0200 Subject: [PATCH 110/356] Sublime Text workspace files as vendored --- lib/linguist/vendor.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml index cf312d89..d5965bb2 100644 --- a/lib/linguist/vendor.yml +++ b/lib/linguist/vendor.yml @@ -115,6 +115,10 @@ - leaflet.spin.js - wicket-leaflet.js +# Sublime Text workspace files +- .sublime-project +- .sublime-workspace + # Prototype - (^|/)prototype(.*)\.js$ - (^|/)effects\.js$ From 25a1af3775fade12c9b3c024ac5137ac063a513c Mon Sep 17 00:00:00 2001 From: Louis Mandel Date: Mon, 24 Aug 2015 13:26:43 -0400 Subject: [PATCH 111/356] Add the X10 language (http://x10-lang.org/). --- .gitmodules | 3 + grammars.yml | 2 + lib/linguist/languages.yml | 10 ++ samples/X10/ArraySum.x10 | 72 ++++++++++++ samples/X10/Cancellation.x10 | 50 +++++++++ samples/X10/Fibonacci.x10 | 52 +++++++++ samples/X10/HeatTransfer_v0.x10 | 86 ++++++++++++++ samples/X10/HeatTransfer_v1.x10 | 114 +++++++++++++++++++ samples/X10/HelloWholeWorld.x10 | 44 ++++++++ samples/X10/HelloWorld.x10 | 23 ++++ samples/X10/Histogram.x10 | 45 ++++++++ samples/X10/Integrate.x10 | 55 +++++++++ samples/X10/KMeans.x10 | 151 +++++++++++++++++++++++++ samples/X10/KMeansDist.x10 | 147 ++++++++++++++++++++++++ samples/X10/KMeansDistPlh.x10 | 144 ++++++++++++++++++++++++ samples/X10/KMeansSPMD.x10 | 192 ++++++++++++++++++++++++++++++++ samples/X10/MontyPi.x10 | 42 +++++++ samples/X10/NQueensDist.x10 | 123 ++++++++++++++++++++ samples/X10/NQueensPar.x10 | 117 +++++++++++++++++++ samples/X10/QSort.x10 | 73 ++++++++++++ samples/X10/StructSpheres.x10 | 123 ++++++++++++++++++++ vendor/grammars/X10 | 1 + 22 files changed, 1669 insertions(+) create mode 100644 samples/X10/ArraySum.x10 create mode 100644 samples/X10/Cancellation.x10 create mode 100644 samples/X10/Fibonacci.x10 create mode 100644 samples/X10/HeatTransfer_v0.x10 create mode 100644 samples/X10/HeatTransfer_v1.x10 create mode 100644 samples/X10/HelloWholeWorld.x10 create mode 100644 samples/X10/HelloWorld.x10 create mode 100644 samples/X10/Histogram.x10 create mode 100644 samples/X10/Integrate.x10 create mode 100644 samples/X10/KMeans.x10 create mode 100644 samples/X10/KMeansDist.x10 create mode 100644 samples/X10/KMeansDistPlh.x10 create mode 100644 samples/X10/KMeansSPMD.x10 create mode 100644 samples/X10/MontyPi.x10 create mode 100644 samples/X10/NQueensDist.x10 create mode 100644 samples/X10/NQueensPar.x10 create mode 100644 samples/X10/QSort.x10 create mode 100644 samples/X10/StructSpheres.x10 create mode 160000 vendor/grammars/X10 diff --git a/.gitmodules b/.gitmodules index 35cc9de8..5f07d011 100644 --- a/.gitmodules +++ b/.gitmodules @@ -674,3 +674,6 @@ [submodule "vendor/grammars/sublime-typescript"] path = vendor/grammars/sublime-typescript url = https://github.com/Microsoft/TypeScript-Sublime-Plugin +[submodule "vendor/grammars/X10"] + path = vendor/grammars/X10 + url = git@github.com:x10-lang/x10-highlighting.git diff --git a/grammars.yml b/grammars.yml index ae9ff92c..42be3967 100644 --- a/grammars.yml +++ b/grammars.yml @@ -144,6 +144,8 @@ vendor/grammars/VBDotNetSyntax: - source.vbnet vendor/grammars/Vala-TMBundle: - source.vala +vendor/grammars/X10: +- source.x10 vendor/grammars/abap.tmbundle: - source.abap vendor/grammars/actionscript3-tmbundle: diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 5b31ed4f..311c8d79 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3567,6 +3567,16 @@ WebIDL: tm_scope: source.webidl ace_mode: text +X10: + type: programming + aliases: + - xten + ace_mode: text + extensions: + - .x10 + color: "#4B6BEF" + tm_scope: source.x10 + XC: type: programming color: "#99DA07" diff --git a/samples/X10/ArraySum.x10 b/samples/X10/ArraySum.x10 new file mode 100644 index 00000000..389d0e87 --- /dev/null +++ b/samples/X10/ArraySum.x10 @@ -0,0 +1,72 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.io.Console; + +/** + * A simple illustration of loop parallelization within a single place. + */ +public class ArraySum { + + var sum:Long; + val data:Rail[Long]; + + public def this(n:Long) { + // Create a Rail with n elements (0..(n-1)), all initialized to 1. + data = new Rail[Long](n, 1); + sum = 0; + } + + def sum(a:Rail[Long], start:Long, last:Long) { + var mySum: Long = 0; + for (i in start..(last-1)) { + mySum += a(i); + } + return mySum; + } + + def sum(numThreads:Long) { + val mySize = data.size/numThreads; + finish for (p in 0..(numThreads-1)) async { + val mySum = sum(data, p*mySize, (p+1)*mySize); + // Multiple activities will simultaneously update + // this location -- so use an atomic operation. + atomic sum += mySum; + } + } + + public static def main(args:Rail[String]) { + var size:Long = 5*1000*1000; + if (args.size >=1) + size = Long.parse(args(0)); + + Console.OUT.println("Initializing."); + val a = new ArraySum(size); + val P = [1,2,4]; + + //warmup loop + Console.OUT.println("Warming up."); + for (numThreads in P) + a.sum(numThreads); + + for (numThreads in P) { + Console.OUT.println("Starting with " + numThreads + " threads."); + a.sum=0; + var time: long = - System.nanoTime(); + a.sum(numThreads); + time += System.nanoTime(); + Console.OUT.println("For p=" + numThreads + + " result: " + a.sum + + ((size==a.sum)? " ok" : " bad") + + " (time=" + (time/(1000*1000)) + " ms)"); + } + } +} diff --git a/samples/X10/Cancellation.x10 b/samples/X10/Cancellation.x10 new file mode 100644 index 00000000..1e13bea1 --- /dev/null +++ b/samples/X10/Cancellation.x10 @@ -0,0 +1,50 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.xrx.Runtime; + +/** + * Demonstrate how to instantiate the X10 runtime as an executor service + * submit jobs to the runtime, wait jobs to complete and cancel all jobs + * + * Compile with: x10c -O -EXECUTOR_MODE=true Cancellation.x10 + * Run with: X10_CANCELLABLE=true X10_NPLACES=4 x10 -DX10RT_IMPL=JavaSockets Cancellation + */ +class Cancellation { + static def job(id:Long, iterations:Long) = ()=>{ + at (Place.places().next(here)) async { + for (i in 1..iterations) { + finish for (p in Place.places()) { + at (p) async Console.OUT.println(here+" says hello (job " + id + ", iteration " + i + ")"); + } + Console.ERR.println(); + System.sleep(200); + } + } + }; + + public static def main(args:Rail[String]):void { + val w1 = Runtime.submit(job(1, 5)); + w1.await(); Console.ERR.println("Job 1 completed\n"); + val w2 = Runtime.submit(job(2, 1000)); + System.threadSleep(1000); + val c1 = Runtime.cancelAll(); + try { w2.await(); } catch (e:Exception) { Console.ERR.println("Job 2 aborted with exception " + e +"\n"); } + c1.await(); // waiting for cancellation to be processed + System.threadSleep(1000); + Runtime.submit(job(3, 1000)); + Runtime.submit(job(4, 1000)); + System.threadSleep(1000); + val c2 = Runtime.cancelAll(); + c2.await(); + Console.ERR.println("Goodbye\n"); + } +} diff --git a/samples/X10/Fibonacci.x10 b/samples/X10/Fibonacci.x10 new file mode 100644 index 00000000..fc1466f1 --- /dev/null +++ b/samples/X10/Fibonacci.x10 @@ -0,0 +1,52 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.io.Console; + +/** + * This is a small program to illustrate the use of + * async and finish in a + * prototypical recursive divide-and-conquer algorithm. + * It is obviously not intended to show a efficient way to + * compute Fibonacci numbers in X10.

+ * + * The heart of the example is the run method, + * which directly embodies the recursive definition of + *

+ *   fib(n) = fib(n-1)+fib(n-2);
+ * 
+ * by using an async to compute fib(n-1) while + * the current activity computes fib(n-2). A finish + * is used to ensure that both computations are complete before + * their results are added together to compute fib(n) + */ +public class Fibonacci { + + public static def fib(n:long) { + if (n<=2) return 1; + + val f1:long; + val f2:long; + finish { + async { f1 = fib(n-1); } + f2 = fib(n-2); + } + return f1 + f2; + } + + public static def main(args:Rail[String]) { + val n = (args.size > 0) ? Long.parse(args(0)) : 10; + Console.OUT.println("Computing fib("+n+")"); + val f = fib(n); + Console.OUT.println("fib("+n+") = "+f); + } +} + diff --git a/samples/X10/HeatTransfer_v0.x10 b/samples/X10/HeatTransfer_v0.x10 new file mode 100644 index 00000000..5546fae8 --- /dev/null +++ b/samples/X10/HeatTransfer_v0.x10 @@ -0,0 +1,86 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.array.*; +import x10.compiler.Foreach; +import x10.compiler.Inline; + + +/** + * This is a sample program illustrating how to use + * X10's array classes. It also illustrates the use + * of foreach to acheive intra-place parallelism. + * + * The program solves a set of 2D partial differential + * equations by iteratively applying a 5-point stencil + * operation until convergence is reached. + */ +public class HeatTransfer_v0 { + static val EPSILON = 1.0e-5; + + val N:Long; + val A:Array_2[Double]{self!=null}; + val Tmp:Array_2[Double]{self!=null}; + + public def this(size:Long) { + N = size; + A = new Array_2[Double](N+2, N+2); // zero-initialized N+2 * N+2 array of doubles + for (j in 1..N) A(0, j) = 1; // set one border row to 1 + Tmp = new Array_2[Double](A); + } + + final @Inline def stencil(x:Long, y:Long):Double { + return (A(x-1,y) + A(x+1,y) + A(x,y-1) + A(x,y+1)) / 4; + } + + def run() { + val is = new DenseIterationSpace_2(1,1,N,N); + var delta:Double; + do { + // Compute new values, storing in tmp + delta = Foreach.blockReduce(is, + (i:Long, j:Long)=>{ + Tmp(i,j) = stencil(i,j); + // Reduce max element-wise delta (A now holds previous values) + return Math.abs(Tmp(i,j) - A(i,j)); + }, + (a:Double, b:Double)=>Math.max(a,b), 0.0 + ); + + // swap backing data of A and Tmp + Array.swap(A, Tmp); + } while (delta > EPSILON); + } + + def prettyPrintResult() { + for (i in 1..N) { + for (j in 1..N) { + Console.OUT.printf("%1.4f ",A(i,j)); + } + Console.OUT.println(); + } + } + + public static def main(args:Rail[String]) { + val n = args.size > 0 ? Long.parse(args(0)) : 8; + Console.OUT.println("HeatTransfer example with N="+n+" and epsilon="+EPSILON); + Console.OUT.println("Initializing data structures"); + val ht = new HeatTransfer_v0(n); + Console.OUT.println("Beginning computation..."); + val start = System.nanoTime(); + ht.run(); + val stop = System.nanoTime(); + Console.OUT.printf("...completed in %1.3f seconds.\n", ((stop-start) as double)/1e9); + if (n <= 10) { + ht.prettyPrintResult(); + } + } +} diff --git a/samples/X10/HeatTransfer_v1.x10 b/samples/X10/HeatTransfer_v1.x10 new file mode 100644 index 00000000..feeeebe6 --- /dev/null +++ b/samples/X10/HeatTransfer_v1.x10 @@ -0,0 +1,114 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.array.*; +import x10.compiler.Foreach; +import x10.util.Team; + +/** + * This is a sample program illustrating how to use + * X10's distributed array classes. It also illustrates the use + * of foreach to achieve intra-place parallelism and the mixture + * of APGAS finish/async/at with Team collective operations. + * + * This version of the program uses a vanilla DistArray without + * ghost regions. As a result, the stencil function does + * inefficient fine-grained neighbor communication to get individual values. + * Compare this to HeatTransfer_v2 which utilizes ghost regions and + * bulk ghost-region exchange functions. + * + * The program solves a set of 2D partial differential + * equations by iteratively applying a 5-point stencil + * operation until convergence is reached. + */ +public class HeatTransfer_v1 { + static val EPSILON = 1.0e-5; + + val N:Long; + val A:DistArray_BlockBlock_2[Double]{self!=null}; + val Tmp:DistArray_BlockBlock_2[Double]{self!=null}; + + public def this(size:Long) { + N = size; + val init = (i:Long, j:Long)=>i==0 ? 1.0 : 0.0; + A = new DistArray_BlockBlock_2[Double](N+2, N+2, init); + Tmp = new DistArray_BlockBlock_2[Double](N+2, N+2, init); + } + + final def stencil(x:Long, y:Long):Double { + val cls = (dx:Long, dy:Long)=>{ + val p = A.place(x+dx, y+dy); + p == here ? A(x+dx,y+dy) : at (p) A(x+dx,y+dy) + }; + val tmp = cls(-1,0) + cls(1,0) + cls(0,-1) + cls(0,1); + return tmp / 4; + } + + def run() { + val myTeam = new Team(A.placeGroup()); + finish for (p in A.placeGroup()) at (p) async { + // Compute the subset of the local indices on which + // we want to apply the stencil (the interior points of the N+2 x N+2 grid) + val li = A.localIndices(); + val interior = new DenseIterationSpace_2(li.min(0) == 0 ? 1 : li.min(0), + li.min(1) == 0 ? 1 : li.min(1), + li.max(0) == N+1 ? N : li.max(0), + li.max(1) == N+1 ? N : li.max(1)); + var delta:Double; + do { + // Compute new values, storing in tmp + val myDelta = Foreach.blockReduce(interior, + (i:Long, j:Long)=>{ + Tmp(i,j) = stencil(i,j); + // Reduce max element-wise delta (A now holds previous values) + return Math.abs(Tmp(i,j) - A(i,j)); + }, + (a:Double, b:Double)=>Math.max(a,b), 0.0 + ); + + myTeam.barrier(); + + // Unlike Array, DistArray doesn't provide an optimized swap. + // So, until it does, we have to copy the data elements. + Foreach.block(interior, (i:Long, j:Long)=>{ + A(i,j) = Tmp(i,j); + }); + + delta = myTeam.allreduce(myDelta, Team.MAX); + } while (delta > EPSILON); + } + } + + def prettyPrintResult() { + for (i in 1..N) { + for (j in 1..N) { + val x = at (A.place(i,j)) A(i,j); + Console.OUT.printf("%1.4f ", x); + } + Console.OUT.println(); + } + } + + public static def main(args:Rail[String]) { + val n = args.size > 0 ? Long.parse(args(0)) : 8; + Console.OUT.println("HeatTransfer example with N="+n+" and epsilon="+EPSILON); + Console.OUT.println("Initializing data structures"); + val ht = new HeatTransfer_v1(n); + Console.OUT.println("Beginning computation..."); + val start = System.nanoTime(); + ht.run(); + val stop = System.nanoTime(); + Console.OUT.printf("...completed in %1.3f seconds.\n", ((stop-start) as double)/1e9); + if (n <= 10) { + ht.prettyPrintResult(); + } + } +} diff --git a/samples/X10/HelloWholeWorld.x10 b/samples/X10/HelloWholeWorld.x10 new file mode 100644 index 00000000..4017ef9d --- /dev/null +++ b/samples/X10/HelloWholeWorld.x10 @@ -0,0 +1,44 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.io.Console; + +/** + * The classic hello world program, with a twist - prints a message + * from the command line at every Place. + * The messages from each Place may appear in any order, but the + * finish ensures that the last message printed will be "Goodbye" + *
+ * Typical output:
+ * [dgrove@linchen samples]$ ./HelloWholeWorld 'best wishes'
+ * Place(1) says hello and best wishes
+ * Place(2) says hello and best wishes
+ * Place(3) says hello and best wishes
+ * Place(0) says hello and best wishes
+ * Goodbye 
+ * [dgrove@linchen samples]$
+ * 
+ */ +class HelloWholeWorld { + public static def main(args:Rail[String]):void { + if (args.size < 1) { + Console.OUT.println("Usage: HelloWholeWorld message"); + return; + } + + finish for (p in Place.places()) { + at (p) async Console.OUT.println(here+" says hello and "+args(0)); + } + Console.OUT.println("Goodbye"); + } +} + + diff --git a/samples/X10/HelloWorld.x10 b/samples/X10/HelloWorld.x10 new file mode 100644 index 00000000..06743b4c --- /dev/null +++ b/samples/X10/HelloWorld.x10 @@ -0,0 +1,23 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.io.Console; + +/** + * The classic hello world program, shows how to output to the console. + */ +class HelloWorld { + public static def main(Rail[String]) { + Console.OUT.println("Hello World!" ); + } +} + + diff --git a/samples/X10/Histogram.x10 b/samples/X10/Histogram.x10 new file mode 100644 index 00000000..bf6ad2b1 --- /dev/null +++ b/samples/X10/Histogram.x10 @@ -0,0 +1,45 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +public class Histogram { + public static def compute(data:Rail[Int], numBins:Int) { + val bins = new Rail[Int](numBins); + finish for (i in data.range) async { + val b = data(i) % numBins; + atomic bins(b)++; + } + return bins; + } + + public static def run(N:Int, S:Int):Boolean { + val a = new Rail[Int](N, (i:long)=> i as int); + val b = compute(a, S); + val v = b(0); + var ok:Boolean = true; + for (x in b.range) ok &= (b(x)==v); + return ok; + } + + public static def main(args:Rail[String]) { + if (args.size != 2L) { + Console.OUT.println("Usage: Histogram SizeOfArray NumberOfBins"); + return; + } + val N = Int.parse(args(0)); + val S = Int.parse(args(1)); + val ok = run(N,S); + if (ok) { + Console.OUT.println("Test ok."); + } else { + Console.OUT.println("Test failed."); + } + } +} diff --git a/samples/X10/Integrate.x10 b/samples/X10/Integrate.x10 new file mode 100644 index 00000000..accf31b9 --- /dev/null +++ b/samples/X10/Integrate.x10 @@ -0,0 +1,55 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +/** + * This is a slightly more realistic example of the + * basic computational pattern of using async/finish + * to express recursive divide-and-conquer algorithms. + * The program does integration via Guassian Quadrature. + *

+ * It also can serve as an example of using a closure. + */ +public class Integrate { + static val epsilon = 1.0e-9; + + val fun:(double)=>double; + + public def this(f:(double)=>double) { fun = f; } + + public def computeArea(left:double, right:double) { + return recEval(left, fun(left), right, fun(right), 0); + } + + private def recEval(l:double, fl:double, r:double, fr:double, a:double) { + val h = (r - l) / 2; + val hh = h / 2; + val c = l + h; + val fc = fun(c); + val al = (fl + fc) * hh; + val ar = (fr + fc) * hh; + val alr = al + ar; + if (Math.abs(alr - a) < epsilon) return alr; + val expr1:double; + val expr2:double; + finish { + async { expr1 = recEval(c, fc, r, fr, ar); }; + expr2 = recEval(l, fl, c, fc, al); + } + return expr1 + expr2; + } + + public static def main(args:Rail[String]) { + val obj = new Integrate((x:double)=>(x*x + 1.0) * x); + val xMax = args.size > 0 ? Long.parse(args(0)) : 10; + val area = obj.computeArea(0, xMax); + Console.OUT.println("The area of (x*x +1) * x from 0 to "+xMax+" is "+area); + } +} diff --git a/samples/X10/KMeans.x10 b/samples/X10/KMeans.x10 new file mode 100644 index 00000000..475732b7 --- /dev/null +++ b/samples/X10/KMeans.x10 @@ -0,0 +1,151 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.io.Console; +import x10.util.Random; + +/** + * A KMeans object o can compute K means of a given set of + * points of dimension o.myDim. + *

+ * This class implements a sequential program, that is readily parallelizable. + * + * For a scalable, high-performance version of this benchmark see + * KMeans.x10 in the X10 Benchmarks (separate download from x10-lang.org) + */ +public class KMeans(myDim:Long) { + + static val DIM=2; + static val K=4; + static val POINTS=2000; + static val ITERATIONS=50; + static val EPS=0.01F; + + static type ValVector(k:Long) = Rail[Float]{self.size==k}; + static type ValVector = ValVector(DIM); + + static type Vector(k:Long) = Rail[Float]{self.size==k}; + static type Vector = Vector(DIM); + + static type SumVector(d:Long) = V{self.dim==d}; + static type SumVector = SumVector(DIM); + + /** + * V represents the sum of 'count' number of vectors of dimension 'dim'. + */ + static class V(dim:Long) implements (Long)=>Float { + var vec: Vector(dim); + var count:Int; + def this(dim:Long, init:(Long)=>Float): SumVector(dim) { + property(dim); + vec = new Rail[Float](this.dim, init); + count = 0n; + } + public operator this(i:Long) = vec(i); + def makeZero() { + for (i in 0..(dim-1)) + vec(i) =0.0F; + count=0n; + } + def addIn(a:ValVector(dim)) { + for (i in 0..(dim-1)) + vec(i) += a(i); + count++; + } + def div(f:Int) { + for (i in 0..(dim-1)) + vec(i) /= f; + } + def dist(a:ValVector(dim)):Float { + var dist:Float=0.0F; + for (i in 0..(dim-1)) { + val tmp = vec(i)-a(i); + dist += tmp*tmp; + } + return dist; + } + def dist(a:SumVector(dim)):Float { + var dist:Float=0.0F; + for (i in 0..(dim-1)) { + val tmp = vec(i)-a(i); + dist += tmp*tmp; + } + return dist; + } + def print() { + Console.OUT.println(); + for (i in 0..(dim-1)) { + Console.OUT.print((i>0? " " : "") + vec(i)); + } + } + def normalize() { div(count);} + def count() = count; + } + + + def this(myDim:Long):KMeans{self.myDim==myDim} { + property(myDim); + } + static type KMeansData(myK:Long, myDim:Long)= Rail[SumVector(myDim)]{self.size==myK}; + + /** + * Compute myK means for the given set of points of dimension myDim. + */ + def computeMeans(myK:Long, points:Rail[ValVector(myDim)]):KMeansData(myK, myDim) { + var redCluster : KMeansData(myK, myDim) = + new Rail[SumVector(myDim)](myK, (i:long)=> new V(myDim, (j:long)=>points(i)(j))); + var blackCluster: KMeansData(myK, myDim) = + new Rail[SumVector(myDim)](myK, (i:long)=> new V(myDim, (j:long)=>0.0F)); + for (i in 1..ITERATIONS) { + val tmp = redCluster; + redCluster = blackCluster; + blackCluster=tmp; + for (p in 0..(POINTS-1)) { + var closest:Long = -1; + var closestDist:Float = Float.MAX_VALUE; + val point = points(p); + for (k in 0..(myK-1)) { // compute closest mean in cluster. + val dist = blackCluster(k).dist(point); + if (dist < closestDist) { + closestDist = dist; + closest = k; + } + } + redCluster(closest).addIn(point); + } + for (k in 0..(myK-1)) + redCluster(k).normalize(); + + var b:Boolean = true; + for (k in 0..(myK-1)) { + if (redCluster(k).dist(blackCluster(k)) > EPS) { + b=false; + break; + } + } + if (b) + break; + for (k in 0..(myK-1)) + blackCluster(k).makeZero(); + } + return redCluster; + } + + public static def main (Rail[String]) { + val rnd = new Random(0); + val points = new Rail[ValVector](POINTS, + (long)=>new Rail[Float](DIM, (long)=>rnd.nextFloat())); + val result = new KMeans(DIM).computeMeans(K, points); + for (k in 0..(K-1)) result(k).print(); + } +} + +// vim: shiftwidth=4:tabstop=4:expandtab diff --git a/samples/X10/KMeansDist.x10 b/samples/X10/KMeansDist.x10 new file mode 100644 index 00000000..069cc374 --- /dev/null +++ b/samples/X10/KMeansDist.x10 @@ -0,0 +1,147 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.array.*; +import x10.io.Console; +import x10.util.Random; + +/** + * A low performance formulation of distributed KMeans using fine-grained asyncs. + * + * For a highly optimized and scalable, version of this benchmark see + * KMeans.x10 in the X10 Benchmarks (separate download from x10-lang.org) + */ +public class KMeansDist { + + static val DIM=2; + static val CLUSTERS=4; + static val POINTS=2000; + static val ITERATIONS=50; + + public static def main (Rail[String]) { + val world = Place.places(); + val local_curr_clusters = + PlaceLocalHandle.make[Array_2[Float]](world, () => new Array_2[Float](CLUSTERS, DIM)); + val local_new_clusters = + PlaceLocalHandle.make[Array_2[Float]](world, () => new Array_2[Float](CLUSTERS, DIM)); + val local_cluster_counts = + PlaceLocalHandle.make[Rail[Int]](world, ()=> new Rail[Int](CLUSTERS)); + + val rnd = PlaceLocalHandle.make[Random](world, () => new Random(0)); + val points = new DistArray_Block_2[Float](POINTS, DIM, world, (Long,Long)=>rnd().nextFloat()); + + val central_clusters = new Array_2[Float](CLUSTERS, DIM, (i:Long, j:Long) => { + at (points.place(i,j)) points(i,j) + }); + + val old_central_clusters = new Array_2[Float](CLUSTERS, DIM); + + val central_cluster_counts = new Rail[Int](CLUSTERS); + + for (iter in 1..ITERATIONS) { + + Console.OUT.println("Iteration: "+iter); + + finish { + // reset state + for (d in world) at (d) async { + for ([i,j] in central_clusters.indices()) { + local_curr_clusters()(i, j) = central_clusters(i, j); + local_new_clusters()(i, j) = 0f; + } + + local_cluster_counts().clear(); + } + } + + finish { + // compute new clusters and counters + for (p in 0..(POINTS-1)) { + at (points.place(p,0)) async { + var closest:Long = -1; + var closest_dist:Float = Float.MAX_VALUE; + for (k in 0..(CLUSTERS-1)) { + var dist : Float = 0; + for (d in 0..(DIM-1)) { + val tmp = points(p,d) - local_curr_clusters()(k, d); + dist += tmp * tmp; + } + if (dist < closest_dist) { + closest_dist = dist; + closest = k; + } + } + atomic { + for (d in 0..(DIM-1)) { + local_new_clusters()(closest,d) += points(p,d); + } + local_cluster_counts()(closest)++; + } + } + } + } + + for ([i,j] in old_central_clusters.indices()) { + old_central_clusters(i, j) = central_clusters(i, j); + central_clusters(i, j) = 0f; + } + + central_cluster_counts.clear(); + + finish { + val central_clusters_gr = GlobalRef(central_clusters); + val central_cluster_counts_gr = GlobalRef(central_cluster_counts); + val there = here; + for (d in world) at (d) async { + // access PlaceLocalHandles 'here' and then data will be captured by at and transfered to 'there' for accumulation + val tmp_new_clusters = local_new_clusters(); + val tmp_cluster_counts = local_cluster_counts(); + at (there) atomic { + for ([i,j] in tmp_new_clusters.indices()) { + central_clusters_gr()(i,j) += tmp_new_clusters(i,j); + } + for (j in 0..(CLUSTERS-1)) { + central_cluster_counts_gr()(j) += tmp_cluster_counts(j); + } + } + } + } + + for (k in 0..(CLUSTERS-1)) { + for (d in 0..(DIM-1)) { + central_clusters(k, d) /= central_cluster_counts(k); + } + } + + // TEST FOR CONVERGENCE + var b:Boolean = true; + for ([i,j] in old_central_clusters.indices()) { + if (Math.abs(old_central_clusters(i, j)-central_clusters(i, j))>0.0001) { + b = false; + break; + } + } + if (b) break; + + } + + for (d in 0..(DIM-1)) { + for (k in 0..(CLUSTERS-1)) { + if (k>0) + Console.OUT.print(" "); + Console.OUT.print(central_clusters(k,d)); + } + Console.OUT.println(); + } + } +} + +// vim: shiftwidth=4:tabstop=4:expandtab diff --git a/samples/X10/KMeansDistPlh.x10 b/samples/X10/KMeansDistPlh.x10 new file mode 100644 index 00000000..ca16aa59 --- /dev/null +++ b/samples/X10/KMeansDistPlh.x10 @@ -0,0 +1,144 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2015. + */ + +import x10.array.Array; +import x10.array.Array_2; +import x10.compiler.Foreach; +import x10.util.Random; + +/** + * A better formulation of distributed KMeans using coarse-grained asyncs to + * implement an allreduce pattern for cluster centers and counts. + * + * For a highly optimized and scalable, version of this benchmark see + * KMeans.x10 in the X10 Benchmarks (separate download from x10-lang.org) + */ +public class KMeansDistPlh { + + static val DIM=2; + static val CLUSTERS=4; + + static class ClusterState { + val clusters = new Array_2[Float](CLUSTERS, DIM); + val clusterCounts = new Rail[Int](CLUSTERS); + } + + public static def main(args:Rail[String]) { + val numPoints = args.size > 0 ? Long.parse(args(0)) : 2000; + val iterations = args.size > 1 ? Long.parse(args(1)) : 50; + val world = Place.places(); + + val clusterStatePlh = PlaceLocalHandle.make[ClusterState](world, () => new ClusterState()); + val currentClustersPlh = PlaceLocalHandle.make[Array_2[Float]](world, () => new Array_2[Float](CLUSTERS, DIM)); + val pointsPlh = PlaceLocalHandle.make[Array_2[Float]](world, () => { + val rand = new Random(here.id); + return new Array_2[Float](numPoints/world.size(), DIM, (Long,Long)=>rand.nextFloat()); + }); + + val centralCurrentClusters = new Array_2[Float](CLUSTERS, DIM); + val centralNewClusters = new Array_2[Float](CLUSTERS, DIM); + val centralClusterCounts = new Rail[Int](CLUSTERS); + + // arbitrarily initialize central clusters to first few points + for ([i,j] in centralCurrentClusters.indices()) { + centralCurrentClusters(i,j) = pointsPlh()(i,j); + } + + for (iter in 1..iterations) { + Console.OUT.println("Iteration: "+iter); + + finish { + for (place in world) async { + val placeClusters = at(place) { + val currentClusters = currentClustersPlh(); + Array.copy(centralCurrentClusters, currentClusters); + + val clusterState = clusterStatePlh(); + val newClusters = clusterState.clusters; + newClusters.clear(); + val clusterCounts = clusterState.clusterCounts; + clusterCounts.clear(); + + // compute new clusters and counters + val points = pointsPlh(); + + for (p in 0..(points.numElems_1-1)) { + var closest:Long = -1; + var closestDist:Float = Float.MAX_VALUE; + for (k in 0..(CLUSTERS-1)) { + var dist : Float = 0; + for (d in 0..(DIM-1)) { + val tmp = points(p,d) - currentClusters(k, d); + dist += tmp * tmp; + } + if (dist < closestDist) { + closestDist = dist; + closest = k; + } + } + + atomic { + for (d in 0..(DIM-1)) { + newClusters(closest,d) += points(p,d); + } + clusterCounts(closest)++; + } + } + clusterState + }; + + // combine place clusters to central + atomic { + for ([i,j] in centralNewClusters.indices()) { + centralNewClusters(i,j) += placeClusters.clusters(i,j); + } + for (j in 0..(CLUSTERS-1)) { + centralClusterCounts(j) += placeClusters.clusterCounts(j); + } + } + } + } + + for (k in 0..(CLUSTERS-1)) { + for (d in 0..(DIM-1)) { + centralNewClusters(k, d) /= centralClusterCounts(k); + } + } + + // TEST FOR CONVERGENCE + var b:Boolean = true; + for ([i,j] in centralCurrentClusters.indices()) { + if (Math.abs(centralCurrentClusters(i, j)-centralNewClusters(i, j)) > 0.0001) { + b = false; + break; + } + } + + Array.copy(centralNewClusters, centralCurrentClusters); + + if (b) break; + + centralNewClusters.clear(); + centralClusterCounts.clear(); + } + + for (d in 0..(DIM-1)) { + for (k in 0..(CLUSTERS-1)) { + if (k > 0) + Console.OUT.print(" "); + Console.OUT.print(centralCurrentClusters(k,d)); + } + Console.OUT.println(); + } + } +} + +// vim: shiftwidth=4:tabstop=4:expandtab diff --git a/samples/X10/KMeansSPMD.x10 b/samples/X10/KMeansSPMD.x10 new file mode 100644 index 00000000..f6530f24 --- /dev/null +++ b/samples/X10/KMeansSPMD.x10 @@ -0,0 +1,192 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.io.Console; +import x10.io.File; +import x10.io.Marshal; +import x10.io.IOException; +import x10.util.OptionsParser; +import x10.util.Option; +import x10.util.Team; + +/** + * An SPMD formulation of KMeans. + * + * For a highly optimized and scalable version of this benchmark see + * KMeans.x10 in the X10 Benchmarks (separate download from x10-lang.org) + */ +public class KMeansSPMD { + + public static def printClusters (clusters:Rail[Float], dims:long) { + for (d in 0..(dims-1)) { + for (k in 0..(clusters.size/dims-1)) { + if (k>0) + Console.OUT.print(" "); + Console.OUT.print(clusters(k*dims+d).toString()); + } + Console.OUT.println(); + } + } + + public static def main (args:Rail[String]) {here == Place.FIRST_PLACE } { + + val opts = new OptionsParser(args, [ + Option("q","quiet","just print time taken"), + Option("v","verbose","print out each iteration"), + Option("h","help","this information") + ], [ + Option("p","points","location of data file"), + Option("i","iterations","quit after this many iterations"), + Option("c","clusters","number of clusters to find"), + Option("d","dim","number of dimensions"), + Option("s","slices","factor by which to oversubscribe computational resources"), + Option("n","num","quantity of points") + ]); + if (opts.filteredArgs().size!=0L) { + Console.ERR.println("Unexpected arguments: "+opts.filteredArgs()); + Console.ERR.println("Use -h or --help."); + System.setExitCode(1n); + return; + } + if (opts("-h")) { + Console.OUT.println(opts.usage("")); + return; + } + + val fname = opts("-p", "points.dat"); + val num_clusters=opts("-c",4); + val num_slices=opts("-s",1); + val num_global_points=opts("-n", 2000); + val iterations=opts("-i",50); + val dim=opts("-d", 4); + val verbose = opts("-v"); + val quiet = opts("-q"); + + if (!quiet) + Console.OUT.println("points: "+num_global_points+" clusters: "+num_clusters+" dim: "+dim); + + // file is dimension-major + val file = new File(fname); + val fr = file.openRead(); + val init_points = (long) => Float.fromIntBits(Marshal.INT.read(fr).reverseBytes()); + val num_file_points = (file.size() / dim / 4) as Int; + val file_points = new Rail[Float](num_file_points*dim, init_points); + + val team = Team.WORLD; + + val num_slice_points = num_global_points / num_slices / Place.numPlaces(); + + finish { + for (h in Place.places()) at(h) async { + var compute_time:Long = 0; + var comm_time:Long = 0; + var barrier_time:Long = 0; + + val host_clusters = new Rail[Float](num_clusters*dim, (i:long)=>file_points(i)); + val host_cluster_counts = new Rail[Int](num_clusters); + + for (slice in 0..(num_slices-1)) { + // carve out local portion of points (point-major) + val offset = (slice*Place.numPlaces() + here.id) * num_slice_points; + if (verbose) + Console.OUT.println(h.toString()+" gets "+offset+" len "+num_slice_points); + val init = (i:long) => { + val p=i%num_slice_points; + val d=i/num_slice_points; + return file_points(offset+p+d*num_file_points); + }; + + // these are pretty big so allocate up front + val host_points = new Rail[Float](num_slice_points*dim, init); + val host_nearest = new Rail[Float](num_slice_points); + + val start_time = System.currentTimeMillis(); + + barrier_time -= System.nanoTime(); + team.barrier(); + barrier_time += System.nanoTime(); + + main_loop: for (iter in 0..(iterations-1)) { + + //if (offset==0) Console.OUT.println("Iteration: "+iter); + + val old_clusters = new Rail[Float](host_clusters.size); + Rail.copy(host_clusters, 0L, old_clusters, 0L, host_clusters.size); + + host_clusters.clear(); + host_cluster_counts.clear(); + + compute_time -= System.nanoTime(); + for (p in 0..(num_slice_points-1)) { + var closest:Long = -1; + var closest_dist:Float = Float.MAX_VALUE; + for (k in 0..(num_clusters-1)) { + var dist : Float = 0; + for (d in 0..(dim-1)) { + val tmp = host_points(p+d*num_slice_points) - old_clusters(k*dim+d); + dist += tmp * tmp; + } + if (dist < closest_dist) { + closest_dist = dist; + closest = k; + } + } + for (d in 0..(dim-1)) { + host_clusters(closest*dim+d) += host_points(p+d*num_slice_points); + } + host_cluster_counts(closest)++; + } + compute_time += System.nanoTime(); + + comm_time -= System.nanoTime(); + team.allreduce(host_clusters, 0L, host_clusters, 0L, host_clusters.size, Team.ADD); + team.allreduce(host_cluster_counts, 0L, host_cluster_counts, 0L, host_cluster_counts.size, Team.ADD); + comm_time += System.nanoTime(); + + for (k in 0..(num_clusters-1)) { + for (d in 0..(dim-1)) host_clusters(k*dim+d) /= host_cluster_counts(k); + } + + if (offset==0 && verbose) { + Console.OUT.println("Iteration: "+iter); + printClusters(host_clusters,dim); + } + + // TEST FOR CONVERGENCE + for (j in 0..(num_clusters*dim-1)) { + if (true/*||Math.abs(clusters_old(j)-host_clusters(j))>0.0001*/) continue main_loop; + } + + break; + + } // main_loop + + } // slice + + Console.OUT.printf("%d: computation %.3f s communication %.3f s (barrier %.3f s)\n", + here.id, compute_time/1E9, comm_time/1E9, barrier_time/1E9); + + team.barrier(); + + if (here.id == 0) { + Console.OUT.println("\nFinal results:"); + printClusters(host_clusters,dim); + } + + } // async + + } // finish + + } + +} + +// vim: shiftwidth=4:tabstop=4:expandtab diff --git a/samples/X10/MontyPi.x10 b/samples/X10/MontyPi.x10 new file mode 100644 index 00000000..951161ee --- /dev/null +++ b/samples/X10/MontyPi.x10 @@ -0,0 +1,42 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.array.DistArray_Unique; +import x10.io.Console; +import x10.util.Random; + +/** + * Calculation of an approximation to pi by using a Monte Carlo simulation + * (throwing darts into the unit square and determining the fraction that land + * in the unit circle). + */ +public class MontyPi { + public static def main(args:Rail[String]) { + if (args.size != 1L) { + Console.OUT.println("Usage: MontyPi "); + return; + } + val N = Long.parse(args(0)); + val initializer = () => { + val r = new Random(); + var result:Long = 0; + for(c in 1..N) { + val x = r.nextDouble(); + val y = r.nextDouble(); + if (x*x +y*y <= 1.0) result++; + } + result + }; + val result = new DistArray_Unique[Long](Place.places(), initializer); + val pi = (4.0*result.reduce((x:Long,y:Long) => x+y, 0) as Double)/(N*Place.numPlaces()); + Console.OUT.println("The value of pi is " + pi); + } +} diff --git a/samples/X10/NQueensDist.x10 b/samples/X10/NQueensDist.x10 new file mode 100644 index 00000000..1279d3ff --- /dev/null +++ b/samples/X10/NQueensDist.x10 @@ -0,0 +1,123 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + * (C) Copyright Australian National University 2011. + */ + +import x10.array.DistArray_Unique; + +/** + * A distributed version of NQueens. Runs over NUM_PLACES. + * Identical to NQueensPar, except that work is distributed + * over multiple places rather than shared between threads. + */ +public class NQueensDist { + public static val EXPECTED_SOLUTIONS = + [0, 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680, 14200, 73712, 365596, 2279184, 14772512]; + + val N:Long; + val P:Long; + val results:DistArray_Unique[Long]; + val R:LongRange; + + def this(N:Long, P:Long) { + this.N=N; + this.P=P; + this.results = new DistArray_Unique[Long](); + this.R = 0..(N-1); + } + def start() { + new Board().distSearch(); + } + def run():Long { + finish start(); + val result = results.reduce(((x:Long,y:Long) => x+y),0); + return result; + } + + class Board { + val q: Rail[Long]; + /** The number of low-rank positions that are fixed in this board for the purposes of search. */ + var fixed:Long; + def this() { + q = new Rail[Long](N); + fixed = 0; + } + + /** + * @return true if it is safe to put a queen in file j + * on the next rank after the last fixed position. + */ + def safe(j:Long) { + for (k in 0..(fixed-1)) { + if (j == q(k) || Math.abs(fixed-k) == Math.abs(j-q(k))) + return false; + } + return true; + } + + /** Search all positions for the current board. */ + def search() { + for (k in R) searchOne(k); + } + + /** + * Modify the current board by adding a new queen + * in file k on rank fixed, + * and search for all safe positions with this prefix. + */ + def searchOne(k:Long) { + if (safe(k)) { + if (fixed==(N-1)) { + // all ranks safely filled + atomic NQueensDist.this.results(here.id)++; + } else { + q(fixed++) = k; + search(); + fixed--; + } + } + } + + /** + * Search this board, dividing the work between all places + * using a block distribution of the current free rank. + */ + def distSearch() { + val work = R.split(Place.numPlaces()); + finish for (p in Place.places()) { + val myPiece = work(p.id); + at (p) async { + // implicit copy of 'this' made across the at divide + for (k in myPiece) { + searchOne(k); + } + } + } + } + } + + public static def main(args:Rail[String]) { + val n = args.size > 0 ? Long.parse(args(0)) : 8; + Console.OUT.println("N=" + n); + //warmup + //finish new NQueensPar(12, 1).start(); + val P = Place.numPlaces(); + val nq = new NQueensDist(n,P); + var start:Long = -System.nanoTime(); + val answer = nq.run(); + val result = answer==EXPECTED_SOLUTIONS(n); + start += System.nanoTime(); + start /= 1000000; + Console.OUT.println("NQueensDist " + nq.N + "(P=" + P + + ") has " + answer + " solutions" + + (result? " (ok)." : " (wrong).") + + "time=" + start + "ms"); + } +} diff --git a/samples/X10/NQueensPar.x10 b/samples/X10/NQueensPar.x10 new file mode 100644 index 00000000..bb841e13 --- /dev/null +++ b/samples/X10/NQueensPar.x10 @@ -0,0 +1,117 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + * (C) Copyright Australian National University 2011. + */ + +/** + * Compute the number of solutions to the N queens problem. + */ +public class NQueensPar { + public static val EXPECTED_SOLUTIONS = + [0, 1, 0, 0, 2, 10, 4, 40, 92, 352, 724, 2680, 14200, 73712, 365596, 2279184, 14772512]; + + val N:Int; + val P:Int; + var nSolutions:Int = 0n; + val R:IntRange; + + def this(N:Int, P:Int) { + this.N=N; + this.P=P; + this.R = 0n..(N-1n); + } + + def start() { + new Board().parSearch(); + } + + class Board { + val q: Rail[Int]; + /** The number of low-rank positions that are fixed in this board for the purposes of search. */ + var fixed:Int; + def this() { + q = new Rail[Int](N); + fixed = 0n; + } + + def this(b:Board) { + this.q = new Rail[Int](b.q); + this.fixed = b.fixed; + } + + /** + * @return true if it is safe to put a queen in file j + * on the next rank after the last fixed position. + */ + def safe(j:Int) { + for (k in 0n..(fixed-1n)) { + if (j == q(k) || Math.abs(fixed-k) == Math.abs(j-q(k))) + return false; + } + return true; + } + + /** Search all positions for the current board. */ + def search() { + for (k in R) searchOne(k); + } + + /** + * Modify the current board by adding a new queen + * in file k on rank fixed, + * and search for all safe positions with this prefix. + */ + def searchOne(k:Int) { + if (safe(k)) { + if (fixed==(N-1n)) { + // all ranks safely filled + atomic NQueensPar.this.nSolutions++; + } else { + q(fixed++) = k; + search(); + fixed--; + } + } + } + + /** + * Search this board, dividing the work between threads + * using a block distribution of the current free rank. + */ + def parSearch() { + for (work in R.split(P)) async { + val board = new Board(this); + for (w in work) { + board.searchOne(w); + } + } + } + } + + public static def main(args:Rail[String]) { + val n = args.size > 0 ? Int.parse(args(0)) : 8n; + Console.OUT.println("N=" + n); + //warmup + //finish new NQueensPar(12, 1).start(); + val ps = [1n,2n,4n]; + for (numTasks in ps) { + Console.OUT.println("starting " + numTasks + " tasks"); + val nq = new NQueensPar(n,numTasks); + var start:Long = -System.nanoTime(); + finish nq.start(); + val result = (nq.nSolutions as Long)==EXPECTED_SOLUTIONS(nq.N); + start += System.nanoTime(); + start /= 1000000; + Console.OUT.println("NQueensPar " + nq.N + "(P=" + numTasks + + ") has " + nq.nSolutions + " solutions" + + (result? " (ok)." : " (wrong).") + "time=" + start + "ms"); + } + } +} diff --git a/samples/X10/QSort.x10 b/samples/X10/QSort.x10 new file mode 100644 index 00000000..d96983b6 --- /dev/null +++ b/samples/X10/QSort.x10 @@ -0,0 +1,73 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + + +/** + * Straightforward quicksort implementation using + * naive partition-in-the-middle and not bothering with + * well-known optimizations such as using insertion sort + * once the partitions get small. This is only intended + * as a simple example of an array-based program that + * combines a recirsive divide and conquer algorithm + * with async and finish, not as a highly efficient + * sorting procedure.. + */ +public class QSort { + + private static def partition(data:Rail[int], left:long, right:long) { + var i:long = left; + var j:long = right; + var tmp:int; + var pivot:long = data((left + right) / 2); + + while (i <= j) { + while (data(i) < pivot) i++; + while (data(j) > pivot) j--; + if (i <= j) { + tmp = data(i); + data(i) = data(j); + data(j) = tmp; + i++; + j--; + } + } + + return i; + } + + public static def qsort(data:Rail[int], left:long, right:long) { + index:long = partition(data, left, right); + finish { + if (left < index - 1) + async qsort(data, left, index - 1); + + if (index < right) + qsort(data, index, right); + } + } + + public static def main(args:Rail[String]) { + val N = args.size>0 ? Long.parse(args(0)) : 100; + val r = new x10.util.Random(); + val data = new Rail[int](N, (long)=>r.nextInt(9999n)); + qsort(data, 0, N-1); + for (i in 0..(N-1)) { + Console.OUT.print(data(i)); + if (i%10 == 9) { + Console.OUT.println(); + } else { + Console.OUT.print(", "); + } + } + Console.OUT.println(); + } +} + diff --git a/samples/X10/StructSpheres.x10 b/samples/X10/StructSpheres.x10 new file mode 100644 index 00000000..6d833633 --- /dev/null +++ b/samples/X10/StructSpheres.x10 @@ -0,0 +1,123 @@ +/* + * This file is part of the X10 project (http://x10-lang.org). + * + * This file is licensed to You under the Eclipse Public License (EPL); + * You may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.opensource.org/licenses/eclipse-1.0.php + * + * (C) Copyright IBM Corporation 2006-2014. + */ + +import x10.io.Console; +import x10.util.Random; + +/** + * This class represents a real-world problem in graphics engines -- + * determining which objects in a large sprawling world are close enough to the + * camera to be considered for rendering. + * + * It illustrates the usage of X10 structs to define new primitive types. + * In Native X10, structs are allocated within their containing object/stack frame + * and thus using structs instead of classes for Vector3 and WorldObject greatly + * improves the memory efficiency of the computation. + * + * @Author Dave Cunningham + * @Author Vijay Saraswat + */ +class StructSpheres { + static type Real = Float; + + static struct Vector3(x:Real, y:Real, z:Real) { + public def getX () = x; + public def getY () = y; + public def getZ () = z; + + public def add (other:Vector3) + = Vector3(this.x+other.x, this.y+other.y, this.z+other.z); + + public def neg () = Vector3(-this.x, -this.y, -this.z); + + public def sub (other:Vector3) = add(other.neg()); + + public def length () = Math.sqrtf(length2()); + + public def length2 () = x*x + y*y + z*z; + } + + + static struct WorldObject { + + def this (x:Real, y:Real, z:Real, r:Real) { + pos = Vector3(x,y,z); + renderingDistance = r; + } + + public def intersects (home:Vector3) + = home.sub(pos).length2() < renderingDistance*renderingDistance; + + protected val pos:Vector3; + protected val renderingDistance:Real; + } + + + public static def compute():boolean { + + val reps = 7500; + + // The following correspond to a modern out-door computer game: + val num_objects = 50000; + val world_size = 6000; + val obj_max_size = 400; + + val ran = new Random(0); + + // the array can go on the heap + // but the elements ought to be /*inlined*/ in the array + val spheres = + new Rail[WorldObject](num_objects, (i:long) => { + val x = (ran.nextDouble()*world_size) as Real; + val y = (ran.nextDouble()*world_size) as Real; + val z = (ran.nextDouble()*world_size) as Real; + val r = (ran.nextDouble()*obj_max_size) as Real; + return WorldObject(x,y,z,r); + }); + + val time_start = System.nanoTime(); + + var counter : Long = 0; + + // HOT LOOP BEGINS + for (c in 1..reps) { + + val x = (ran.nextDouble()*world_size) as Real; + val y = (ran.nextDouble()*world_size) as Real; + val z = (ran.nextDouble()*world_size) as Real; + + val pos = Vector3(x,y,z); + + for (i in spheres.range()) { + if (spheres(i).intersects(pos)) { + counter++; + } + } + } + // HOT LOOP ENDS + + val time_taken = System.nanoTime() - time_start; + Console.OUT.println("Total time: "+time_taken/1E9); + + val expected = 109702; + val ok = counter == expected; + if (!ok) { + Console.ERR.println("number of intersections: "+counter + +" (expected "+expected+")"); + } + return ok; + } + + public static def main (Rail[String]) { + compute(); + } + +} diff --git a/vendor/grammars/X10 b/vendor/grammars/X10 new file mode 160000 index 00000000..05fc5c81 --- /dev/null +++ b/vendor/grammars/X10 @@ -0,0 +1 @@ +Subproject commit 05fc5c81cc9491f5785e896c9a5f43a61fac9073 From aa701c6766e269194cefd1b0888883b15213dabb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20T=C3=BD=C4=8D?= Date: Tue, 25 Aug 2015 01:09:42 +0200 Subject: [PATCH 112/356] Update languages.yml --- lib/linguist/languages.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 5b31ed4f..ab094d63 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1917,6 +1917,15 @@ M: - .m tm_scope: source.lisp ace_mode: lisp + +M4: + type: programming + extensions: + - .m4 + filenames: + - configure.ac + tm_scope: none + ace_mode: text MTML: type: markup From a2ca88651082e7f2a65fa10be8c0c143d24e2d48 Mon Sep 17 00:00:00 2001 From: Jacob Bandes-Storch Date: Tue, 25 Aug 2015 23:19:09 -0700 Subject: [PATCH 113/356] Vendored definitions for Xcode-related files --- lib/linguist/vendor.yml | 5 +++++ test/test_blob.rb | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml index ed89eda8..a984f520 100644 --- a/lib/linguist/vendor.yml +++ b/lib/linguist/vendor.yml @@ -164,6 +164,11 @@ ## Obj-C ## +# Xcode + +- \.xctemplate/ +- \.imageset/ + # Carthage - ^Carthage/ diff --git a/test/test_blob.rb b/test/test_blob.rb index 0a1cefe9..abce9934 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -492,6 +492,11 @@ class TestBlob < Minitest::Test # Crashlytics assert sample_blob("Crashlytics.framework/Crashlytics.h").vendored? + + # Xcode + assert sample_blob("myapp/My Template.xctemplate/___FILEBASENAME___.h").vendored? + assert sample_blob("myapp/My Images.xcassets/some/stuff.imageset/Contents.json").vendored? + assert !sample_blob("myapp/MyData.json").vendored? end def test_documentation From 0e9ded45dcd81498377566c0a505a389cedf0a86 Mon Sep 17 00:00:00 2001 From: Jacob Bandes-Storch Date: Wed, 26 Aug 2015 00:34:00 -0700 Subject: [PATCH 114/356] Fix typo in Obj-C heuristic keyword MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `synchronised` → `synchronized` --- lib/linguist/heuristics.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 7c523fa8..4d468bf0 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -65,7 +65,7 @@ module Linguist end # Common heuristics - ObjectiveCRegex = /^[ \t]*@(interface|class|protocol|property|end|synchronised|selector|implementation)\b/ + ObjectiveCRegex = /^[ \t]*@(interface|class|protocol|property|end|synchronized|selector|implementation)\b/ disambiguate ".bb" do |data| if /^\s*; /.match(data) || data.include?("End Function") From c9e43804d6723bddc01f5d914e6c328eac5cd03f Mon Sep 17 00:00:00 2001 From: Ben Balter Date: Wed, 26 Aug 2015 09:26:04 -0400 Subject: [PATCH 115/356] add some help text to license test --- test/test_grammars.rb | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/test/test_grammars.rb b/test/test_grammars.rb index 65a7e6de..82086db9 100644 --- a/test/test_grammars.rb +++ b/test/test_grammars.rb @@ -83,12 +83,16 @@ class TestGrammars < Minitest::Test def test_submodules_have_recognized_licenses unrecognized = submodule_licenses.select { |k,v| v.nil? && Licensee::Project.new(k).license_file } unrecognized.reject! { |k,v| PROJECT_WHITELIST.include?(k) } - assert_equal Hash.new, unrecognized, "The following submodules have unrecognized licenses:\n* #{unrecognized.keys.join("\n* ")}" + message = "The following submodules have unrecognized licenses:\n* #{unrecognized.keys.join("\n* ")}\n" + message << "Please ensure that the project's LICENSE file contains the full text of the license." + assert_equal Hash.new, unrecognized, message end def test_submodules_have_licenses unlicensed = submodule_licenses.select { |k,v| v.nil? }.reject { |k,v| PROJECT_WHITELIST.include?(k) } - assert_equal Hash.new, unlicensed, "The following submodules don't have licenses:\n* #{unlicensed.keys.join("\n* ")}" + message = "The following submodules don't have licenses:\n* #{unlicensed.keys.join("\n* ")}\n" + message << "Please ensure that the project has a LICENSE file, and that the LICENSE file contains the full text of the license." + assert_equal Hash.new, unlicensed, message end def test_submodules_have_approved_licenses From 13695a716c743ac9e9aa12c879889666ae084d8a Mon Sep 17 00:00:00 2001 From: Louis Mandel Date: Wed, 26 Aug 2015 09:46:02 -0400 Subject: [PATCH 116/356] Update X10 grammar license. --- vendor/grammars/X10 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/grammars/X10 b/vendor/grammars/X10 index 05fc5c81..a96e3f0a 160000 --- a/vendor/grammars/X10 +++ b/vendor/grammars/X10 @@ -1 +1 @@ -Subproject commit 05fc5c81cc9491f5785e896c9a5f43a61fac9073 +Subproject commit a96e3f0a352af9074a1086f092e8490022cb356c From 7c3e2650333f3d2ac10a48f8d41262281782e588 Mon Sep 17 00:00:00 2001 From: Ben Balter Date: Wed, 26 Aug 2015 12:31:29 -0400 Subject: [PATCH 117/356] also add help for unapproved licenses --- test/test_grammars.rb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/test_grammars.rb b/test/test_grammars.rb index 82086db9..569da5c9 100644 --- a/test/test_grammars.rb +++ b/test/test_grammars.rb @@ -97,7 +97,9 @@ class TestGrammars < Minitest::Test def test_submodules_have_approved_licenses unapproved = submodule_licenses.reject { |k,v| LICENSE_WHITELIST.include?(v) || PROJECT_WHITELIST.include?(k) }.map { |k,v| "#{k}: #{v}"} - assert_equal [], unapproved, "The following submodules have unapproved licenses:\n* #{unapproved.join("\n* ")}" + message = "The following submodules have unapproved licenses:\n* #{unapproved.join("\n* ")}\n" + message << "The license must be added to the LICENSE_WHITELIST in /test/test_grammars.rb once approved." + assert_equal [], unapproved, message end def test_submodules_whitelist_has_no_extra_entries From b1c6b330e9164116cc15273c7ace0452abbe3bef Mon Sep 17 00:00:00 2001 From: Louis Mandel Date: Wed, 26 Aug 2015 14:26:30 -0400 Subject: [PATCH 118/356] Switch to Apache License. --- vendor/grammars/X10 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/grammars/X10 b/vendor/grammars/X10 index a96e3f0a..2bae6e77 160000 --- a/vendor/grammars/X10 +++ b/vendor/grammars/X10 @@ -1 +1 @@ -Subproject commit a96e3f0a352af9074a1086f092e8490022cb356c +Subproject commit 2bae6e77fabcdceff753823477390c37305ca76c From 16e22b3b777ccb2ac123b0a79384af6003d2b3b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20T=C3=BD=C4=8D?= Date: Thu, 27 Aug 2015 15:37:32 +0200 Subject: [PATCH 119/356] Added M4 samples --- samples/M4/ax_ruby_devel.m4 | 172 ++++++++++++++++++++++++++++++++++++ samples/M4/configure.ac | 143 ++++++++++++++++++++++++++++++ samples/M4/list.m4 | 46 ++++++++++ 3 files changed, 361 insertions(+) create mode 100644 samples/M4/ax_ruby_devel.m4 create mode 100644 samples/M4/configure.ac create mode 100644 samples/M4/list.m4 diff --git a/samples/M4/ax_ruby_devel.m4 b/samples/M4/ax_ruby_devel.m4 new file mode 100644 index 00000000..3f68c119 --- /dev/null +++ b/samples/M4/ax_ruby_devel.m4 @@ -0,0 +1,172 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_ruby_devel.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_RUBY_DEVEL([version]) +# +# DESCRIPTION +# +# This macro checks for Ruby and tries to get the include path to +# 'ruby.h'. It provides the $(RUBY_CPPFLAGS) and $(RUBY_LDFLAGS) output +# variables. It also exports $(RUBY_EXTRA_LIBS) for embedding Ruby in your +# code. +# +# You can search for some particular version of Ruby by passing a +# parameter to this macro, for example "1.8.6". +# +# LICENSE +# +# Copyright (c) 2008 Rafal Rzepecki +# Copyright (c) 2008 Sebastian Huber +# Copyright (c) 2008 Alan W. Irwin +# Copyright (c) 2008 Rafael Laboissiere +# Copyright (c) 2008 Andrew Collier +# Copyright (c) 2008 Matteo Settenvini +# Copyright (c) 2008 Horst Knorr +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 11 + +AC_DEFUN([AX_RUBY_DEVEL],[ + AC_REQUIRE([AX_WITH_RUBY]) + AS_IF([test -n "$1"], [AX_PROG_RUBY_VERSION([$1])]) + + # + # Check if you have mkmf, else fail + # + AC_MSG_CHECKING([for the mkmf Ruby package]) + ac_mkmf_result=`$RUBY -rmkmf -e ";" 2>&1` + if test -z "$ac_mkmf_result"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([cannot import Ruby module "mkmf". +Please check your Ruby installation. The error was: +$ac_mkmf_result]) + fi + + # + # Check for Ruby include path + # + AC_MSG_CHECKING([for Ruby include path]) + if test -z "$RUBY_CPPFLAGS"; then + ruby_path=`$RUBY -rmkmf -e 'print Config::CONFIG[["archdir"]]'` + if test -n "${ruby_path}"; then + ruby_path="-I$ruby_path" + fi + RUBY_CPPFLAGS=$ruby_path + fi + AC_MSG_RESULT([$RUBY_CPPFLAGS]) + AC_SUBST([RUBY_CPPFLAGS]) + + # + # Check for Ruby library path + # + AC_MSG_CHECKING([for Ruby library path]) + if test -z "$RUBY_LDFLAGS"; then + RUBY_LDFLAGS=`$RUBY -rmkmf -e 'print Config::CONFIG[["LIBRUBYARG_SHARED"]]'` + fi + AC_MSG_RESULT([$RUBY_LDFLAGS]) + AC_SUBST([RUBY_LDFLAGS]) + + # + # Check for site packages + # + AC_MSG_CHECKING([for Ruby site-packages path]) + if test -z "$RUBY_SITE_PKG"; then + RUBY_SITE_PKG=`$RUBY -rmkmf -e 'print Config::CONFIG[["sitearchdir"]]'` + fi + AC_MSG_RESULT([$RUBY_SITE_PKG]) + AC_SUBST([RUBY_SITE_PKG]) + + # + # libraries which must be linked in when embedding + # + AC_MSG_CHECKING(ruby extra libraries) + if test -z "$RUBY_EXTRA_LIBS"; then + RUBY_EXTRA_LIBS=`$RUBY -rmkmf -e 'print Config::CONFIG[["SOLIBS"]]'` + fi + AC_MSG_RESULT([$RUBY_EXTRA_LIBS]) + AC_SUBST(RUBY_EXTRA_LIBS) + + # + # linking flags needed when embedding + # (is it even needed for Ruby?) + # + # AC_MSG_CHECKING(ruby extra linking flags) + # if test -z "$RUBY_EXTRA_LDFLAGS"; then + # RUBY_EXTRA_LDFLAGS=`$RUBY -rmkmf -e 'print Config::CONFIG[["LINKFORSHARED"]]'` + # fi + # AC_MSG_RESULT([$RUBY_EXTRA_LDFLAGS]) + # AC_SUBST(RUBY_EXTRA_LDFLAGS) + + # this flags breaks ruby.h, and is sometimes defined by KDE m4 macros + CFLAGS="`echo "$CFLAGS" | sed -e 's/-std=iso9899:1990//g;'`" + # + # final check to see if everything compiles alright + # + AC_MSG_CHECKING([consistency of all components of ruby development environment]) + AC_LANG_PUSH([C]) + # save current global flags + ac_save_LIBS="$LIBS" + LIBS="$ac_save_LIBS $RUBY_LDFLAGS" + ac_save_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$ac_save_CPPFLAGS $RUBY_CPPFLAGS" + AC_TRY_LINK([ + #include + ],[ + ruby_init(); + ],[rubyexists=yes],[rubyexists=no]) + + AC_MSG_RESULT([$rubyexists]) + + if test ! "$rubyexists" = "yes"; then + AC_MSG_ERROR([ + Could not link test program to Ruby. Maybe the main Ruby library has been + installed in some non-standard library path. If so, pass it to configure, + via the LDFLAGS environment variable. + Example: ./configure LDFLAGS="-L/usr/non-standard-path/ruby/lib" + ============================================================================ + ERROR! + You probably have to install the development version of the Ruby package + for your distribution. The exact name of this package varies among them. + ============================================================================ + ]) + RUBY_VERSION="" + fi + AC_LANG_POP + # turn back to default flags + CPPFLAGS="$ac_save_CPPFLAGS" + LIBS="$ac_save_LIBS" + + # + # all done! + # +]) diff --git a/samples/M4/configure.ac b/samples/M4/configure.ac new file mode 100644 index 00000000..e65c54b6 --- /dev/null +++ b/samples/M4/configure.ac @@ -0,0 +1,143 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.68) +AC_INIT([GARDEN], + [1.0.9], + [bubla@users.sourceforge.net]) +AC_CONFIG_AUX_DIR([build-aux]) +AM_INIT_AUTOMAKE([-Wall]) +AC_CONFIG_SRCDIR([src/input.h]) +AC_CONFIG_HEADERS([src/configure.h]) +AC_CONFIG_MACRO_DIR([m4]) + +AC_ARG_ENABLE([debug], + [AS_HELP_STRING([--enable-debug], + [Builds the debug version of the library [[default = no]]]) ], + [], + [enable_debug="no"]) + +AS_IF([test "x$enable_debug" = "xyes"], + [CFLAGS="${CFLAGS} -g -O0"]) + +# Checks for programs. +AC_PROG_CC +AC_PROG_LIBTOOL +LT_PROG_RC + +AC_CANONICAL_HOST + +dnl +dnl Check whether it makes sense to install a garden.desktop file +dnl +AC_CHECK_PROG([have_freedesktop], + [update-desktop-database], + [yes]) + +AM_CONDITIONAL([HAVE_FREEDESKTOP], + [test "x$have_freedesktop" = "xyes"]) + +AM_CONDITIONAL([WANT_FREEDESKTOP], + [test "x$enable_desktop_install" = "xyes"]) + +AC_ARG_ENABLE([desktop-install], + [AS_HELP_STRING([--enable-desktop-install], + [Whether you want to install the garden.desktop file if applicable. !!! DO NOT USE if you are a PACKAGER!!!])] + ) + +AS_CASE([$host], + [*mingw* | *cygwin*], + [AC_DEFINE([WINDOWS_VERSION], + [1], + [Define when building for Windows]) + windows_version="yes"]) + +AM_CONDITIONAL([WINDOWS_VERSION], + [test "x$windows_version" = "xyes" ]) + +dnl now the datadir specification, that is useful if one does want to play without installing +AC_ARG_ENABLE([datadir], + [AS_HELP_STRING([--enable-datadir=path-to-your-garden-datafiles], + [Normally you dont have to use this, but it is handy when you want to play the game without installing it or if you want to use already installed data. In the first case, use for instance --enable-datadir=`pwd`/data (if it makes sense)])], + [DATADIR_NAME="$enableval"], + [DATADIR_NAME='$(datadir)/'garden]) + +# Sets the data subdirectory +AC_SUBST([DATADIR_NAME]) + +# Checks for libraries. +AC_CHECK_HEADER([allegro.h], + [], + [have_allegro="no" + AC_MSG_ERROR([You don't even have Allegro headers... Get Allegro first!]) ]) + +AC_CHECK_LIB([m], [sin]) + +test "x$host_os" != "x$build_os" && CROSS_COMPILING="yes" + +try_link_allegro () +{ + LIBS_SAVE=$LIBS + LIBS="$LIBS $1" + AC_MSG_CHECKING([for Allegro using $1]) + AC_LINK_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT + [ #include ]], + [allegro_init();])END_OF_MAIN() ], + [have_allegro="yes"], + [have_allegro="no"]) + AC_MSG_RESULT([$have_allegro]) + LIBS=$LIBS_SAVE + AS_IF([test "x$have_allegro" == "xyes"], + [return 0], + [return 1]) +} +# first check for 'official allegro' +# The official allegro does not support cross-compiling, though... +AM_PATH_ALLEGRO([4.2.0]) + +try_link_allegro "$allegro_LIBS" +AS_IF([test "x$?" == "x0"], + [[LIBS="$LIBS $allegro_LIBS" + ALLEGRO_LIB=`echo $allegro_LIBS | sed -e 's/.*-l\([^[:blank:]]*\).*/\1/'` + have_allegro="yes"]]) + +ALLEGRO_RELEASE_LIBS="alleg alleg42 alleg44" +ALLEGRO_DEBUG_LIBS="alld42 alleg44-debug" +AS_IF([test "x$enable_debug" = "xyes"], + [ALLEGRO_LIBS="$ALLEGRO_DEBUG_LIBS $ALLEGRO_RELEASE_LIBS"], + [ALLEGRO_LIBS="$ALLEGRO_RELEASE_LIBS $ALLEGRO_DEBUG_LIBS"]) + +for lib in $ALLEGRO_LIBS +do + ldflag="-l$lib" + AS_IF([test "x$have_allegro" == "xyes"], + [break]) + try_link_allegro $ldflag + AS_IF([test "x$?" == "x0"], + [LIBS="$LIBS $ldflag" + ALLEGRO_LIB="$lib" + have_allegro="yes"]) +done + +AS_IF([test "x$have_allegro" != "xyes"], + [AC_MSG_ERROR([Unable to find Allegro game programming library 4.2, check out www.allegro.cc (or your distro repositories if you use a unix-like system)]) ]) + +# Checks for header files. +AC_CHECK_HEADERS([string.h sys/stat.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_C_INLINE +AC_HEADER_STDBOOL + +# Checks for library functions. + +AC_SUBST([ALLEGRO_LIB]) + +AC_CONFIG_FILES([Makefile + src/Makefile + data/Makefile + resources/Makefile + docs/garden.doxyfile + pkgs/w32/winstaller.nsi]) + +AC_OUTPUT diff --git a/samples/M4/list.m4 b/samples/M4/list.m4 new file mode 100644 index 00000000..397bd8ff --- /dev/null +++ b/samples/M4/list.m4 @@ -0,0 +1,46 @@ +m4_define([m4_list_declare], [m4_do( + [m4_define([$1_GET], [m4_expand([m4_list_nth([$1], $][1)])])], + [m4_define([$1_FOREACH], [m4_foreach([item], [m4_dquote_elt(m4_list_contents([$1]))], m4_quote($][1))])], +)]) + +m4_define([m4_list_add], [m4_do( + [m4_pushdef([_LIST_NAME], [[_LIST_$1]])], + [m4_ifndef(_LIST_NAME, + [m4_define(_LIST_NAME, m4_dquote(m4_escape([$2])))], + [m4_define(_LIST_NAME, m4_dquote(m4_list_contents([$1]), m4_escape([$2])))], + )], + [m4_popdef([_LIST_NAME])], +)]) + +m4_define([m4_list_contents], [m4_do( + [m4_pushdef([_LIST_NAME], [[_LIST_$1]])], + [m4_ifndef(_LIST_NAME, [], m4_quote(_LIST_NAME))], + [m4_popdef([_LIST_NAME])], +)]) + +m4_define([m4_list_nth], [m4_argn([$2], m4_list_contents([$1]))]) + +m4_define([m4_list_pop_front], [m4_do( + [m4_pushdef([_LIST_NAME], [[_LIST_$1]])], + [m4_car(m4_unquote(_LIST_NAME))], + [m4_define(_LIST_NAME, m4_cdr(m4_unquote(_LIST_NAME)))], + [m4_popdef([_LIST_NAME])], +)]) + +m4_define([m4_list_pop_back], [m4_do( + [m4_pushdef([_LIST_NAME], [[_LIST_$1]])], + [m4_define(_LIST_NAME, m4_dquote(m4_reverse(m4_unquote(_LIST_NAME))))], + [m4_list_pop_front([$1])], + [m4_define(_LIST_NAME, m4_dquote(m4_reverse(m4_unquote(_LIST_NAME))))], + [m4_popdef([_LIST_NAME])], +)]) + +dnl +dnl $1: List name +dnl $2: What +dnl $3: If contains +dnl $4: If not +m4_define([m4_list_contains], [m4_do( + [m4_foreach([item], m4_list_contents([$1]), m4_if(item, [$2], [[$3]], [[$4]]))] +)]) + From 59fb481138b1007aae0d842b815b42fbff8d8fe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20T=C3=BD=C4=8D?= Date: Thu, 27 Aug 2015 15:40:10 +0200 Subject: [PATCH 120/356] Added pure m4 example --- samples/M4/htmlgen.m4 | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 samples/M4/htmlgen.m4 diff --git a/samples/M4/htmlgen.m4 b/samples/M4/htmlgen.m4 new file mode 100644 index 00000000..9b7671fc --- /dev/null +++ b/samples/M4/htmlgen.m4 @@ -0,0 +1,38 @@ +dnl Took from https://en.wikipedia.org/wiki/M4_(computer_language) +divert(-1) + +M4 has multiple output queues that can be manipulated with the +`divert' macro. Valid queues range from 0 to 10, inclusive, with +the default queue being 0. + +Calling the `divert' macro with an invalid queue causes text to be +discarded until another call. Note that even while output is being +discarded, quotes around `divert' and other macros are needed to +prevent expansion. + +# Macros aren't expanded within comments, meaning that keywords such +# as divert and other built-ins may be used without consequence. + +# HTML utility macro: + +define(`H2_COUNT', 0) + +# The H2_COUNT macro is redefined every time the H2 macro is used: + +define(`H2', + `define(`H2_COUNT', incr(H2_COUNT))

H2_COUNT. $1

') + +divert(1)dnl +dnl +dnl The dnl macro causes m4 to discard the rest of the line, thus +dnl preventing unwanted blank lines from appearing in the output. +dnl +H2(First Section) +H2(Second Section) +H2(Conclusion) +dnl +divert(0)dnl +dnl + +undivert(1)dnl One of the queues is being pushed to output. + From cf5268a7d49301eefaf96c97f08ece68d928b24a Mon Sep 17 00:00:00 2001 From: Michael Fellinger Date: Fri, 28 Aug 2015 14:04:10 -0400 Subject: [PATCH 121/356] add Pony language --- .gitmodules | 3 + grammars.yml | 2 + lib/linguist/languages.yml | 7 + samples/Pony/circle.pony | 30 ++++ samples/Pony/counter.pony | 32 +++++ samples/Pony/gups-opt.pony | 261 ++++++++++++++++++++++++++++++++++ samples/Pony/hello-world.pony | 3 + samples/Pony/mandelbrot.pony | 188 ++++++++++++++++++++++++ samples/Pony/mixed.pony | 130 +++++++++++++++++ vendor/grammars/sublime-pony | 1 + 10 files changed, 657 insertions(+) create mode 100644 samples/Pony/circle.pony create mode 100644 samples/Pony/counter.pony create mode 100644 samples/Pony/gups-opt.pony create mode 100644 samples/Pony/hello-world.pony create mode 100644 samples/Pony/mandelbrot.pony create mode 100644 samples/Pony/mixed.pony create mode 160000 vendor/grammars/sublime-pony diff --git a/.gitmodules b/.gitmodules index 35cc9de8..582a9f9e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -674,3 +674,6 @@ [submodule "vendor/grammars/sublime-typescript"] path = vendor/grammars/sublime-typescript url = https://github.com/Microsoft/TypeScript-Sublime-Plugin +[submodule "vendor/grammars/sublime-pony"] + path = vendor/grammars/sublime-pony + url = https://github.com/CausalityLtd/sublime-pony diff --git a/grammars.yml b/grammars.yml index ae9ff92c..0fcdf052 100644 --- a/grammars.yml +++ b/grammars.yml @@ -505,6 +505,8 @@ vendor/grammars/sublime-nix: vendor/grammars/sublime-opal/: - source.opal - source.opalsysdefs +vendor/grammars/sublime-pony: +- source.pony vendor/grammars/sublime-robot-plugin: - text.robot vendor/grammars/sublime-rust: diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 5b31ed4f..7ef4cebc 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2604,6 +2604,13 @@ PogoScript: tm_scope: source.pogoscript ace_mode: text +Pony: + type: programming + extensions: + - .pony + tm_scope: source.pony + ace_mode: text + PostScript: type: markup extensions: diff --git a/samples/Pony/circle.pony b/samples/Pony/circle.pony new file mode 100644 index 00000000..06d734d7 --- /dev/null +++ b/samples/Pony/circle.pony @@ -0,0 +1,30 @@ +use "collections" + +class Circle + var _radius: F32 + + new create(radius': F32) => + _radius = radius' + + fun ref get_radius(): F32 => + _radius + + fun ref get_area(): F32 => + F32.pi() * _radius.pow(2) + + fun ref get_circumference(): F32 => + 2 * _radius * F32.pi() + +actor Main + new create(env: Env) => + + for i in Range[F32](1.0, 101.0) do + let c = Circle(i) + + var str = + "Radius: " + c.get_radius().string() + "\n" + + "Circumference: " + c.get_circumference().string() + "\n" + + "Area: " + c.get_area().string() + "\n" + + env.out.print(str) + end diff --git a/samples/Pony/counter.pony b/samples/Pony/counter.pony new file mode 100644 index 00000000..cbb583bd --- /dev/null +++ b/samples/Pony/counter.pony @@ -0,0 +1,32 @@ +use "collections" + +actor Counter + var _count: U32 + + new create() => + _count = 0 + + be increment() => + _count = _count + 1 + + be get_and_reset(main: Main) => + main.display(_count) + _count = 0 + +actor Main + var _env: Env + + new create(env: Env) => + _env = env + + var count: U32 = try env.args(1).u32() else 10 end + var counter = Counter + + for i in Range[U32](0, count) do + counter.increment() + end + + counter.get_and_reset(this) + + be display(result: U32) => + _env.out.print(result.string()) diff --git a/samples/Pony/gups-opt.pony b/samples/Pony/gups-opt.pony new file mode 100644 index 00000000..52fad32f --- /dev/null +++ b/samples/Pony/gups-opt.pony @@ -0,0 +1,261 @@ +use "options" +use "time" +use "collections" + +class Config + var logtable: U64 = 20 + var iterate: U64 = 10000 + var logchunk: U64 = 10 + var logactors: U64 = 2 + + fun ref apply(env: Env): Bool => + var options = Options(env) + + options + .add("logtable", "l", I64Argument) + .add("iterate", "i", I64Argument) + .add("chunk", "c", I64Argument) + .add("actors", "a", I64Argument) + + for option in options do + match option + | ("table", var arg: I64) => logtable = arg.u64() + | ("iterate", var arg: I64) => iterate = arg.u64() + | ("chunk", var arg: I64) => logchunk = arg.u64() + | ("actors", var arg: I64) => logactors = arg.u64() + | let err: ParseError => + err.report(env.out) + env.out.print( + """ + gups_opt [OPTIONS] + --table N log2 of the total table size. Defaults to 20. + --iterate N number of iterations. Defaults to 10000. + --chunk N log2 of the chunk size. Defaults to 10. + --actors N log2 of the actor count. Defaults to 2. + """ + ) + return false + end + end + + env.out.print( + "logtable: " + logtable.string() + + "\niterate: " + iterate.string() + + "\nlogchunk: " + logchunk.string() + + "\nlogactors: " + logactors.string() + ) + true + +actor Main + let _env: Env + let _config: Config = Config + + var _updates: U64 = 0 + var _confirm: U64 = 0 + let _start: U64 + var _actors: Array[Updater] val + + new create(env: Env) => + _env = env + + if _config(env) then + let actor_count = 1 << _config.logactors + let loglocal = _config.logtable - _config.logactors + let chunk_size = 1 << _config.logchunk + let chunk_iterate = chunk_size * _config.iterate + + _updates = chunk_iterate * actor_count + _confirm = actor_count + + var updaters = recover Array[Updater](actor_count) end + + for i in Range[U64](0, actor_count) do + updaters.push(Updater(this, actor_count, i, loglocal, chunk_size, + chunk_iterate * i)) + end + + _actors = consume updaters + _start = Time.nanos() + + for a in _actors.values() do + a.start(_actors, _config.iterate) + end + else + _start = 0 + _actors = recover Array[Updater] end + end + + be done() => + if (_confirm = _confirm - 1) == 1 then + for a in _actors.values() do + a.done() + end + end + + be confirm() => + _confirm = _confirm + 1 + + if _confirm == _actors.size() then + let elapsed = (Time.nanos() - _start).f64() + let gups = _updates.f64() / elapsed + + _env.out.print( + "Time: " + (elapsed / 1e9).string() + + "\nGUPS: " + gups.string() + ) + end + +actor Updater + let _main: Main + let _index: U64 + let _updaters: U64 + let _chunk: U64 + let _mask: U64 + let _loglocal: U64 + + let _output: Array[Array[U64] iso] + let _reuse: List[Array[U64] iso] = List[Array[U64] iso] + var _others: (Array[Updater] val | None) = None + var _table: Array[U64] + var _rand: U64 + + new create(main:Main, updaters: U64, index: U64, loglocal: U64, chunk: U64, + seed: U64) + => + _main = main + _index = index + _updaters = updaters + _chunk = chunk + _mask = updaters - 1 + _loglocal = loglocal + + _rand = PolyRand.seed(seed) + _output = _output.create(updaters) + + let size = 1 << loglocal + _table = Array[U64].undefined(size) + + var offset = index * size + + try + for i in Range[U64](0, size) do + _table(i) = i + offset + end + end + + be start(others: Array[Updater] val, iterate: U64) => + _others = others + iteration(iterate) + + be apply(iterate: U64) => + iteration(iterate) + + fun ref iteration(iterate: U64) => + let chk = _chunk + + for i in Range(0, _updaters) do + _output.push( + try + _reuse.pop() + else + recover Array[U64](chk) end + end + ) + end + + for i in Range(0, _chunk) do + var datum = _rand = PolyRand(_rand) + var updater = (datum >> _loglocal) and _mask + + try + if updater == _index then + _table(i) = _table(i) xor datum + else + _output(updater).push(datum) + end + end + end + + try + let to = _others as Array[Updater] val + + repeat + let data = _output.pop() + + if data.size() > 0 then + to(_output.size()).receive(consume data) + else + _reuse.push(consume data) + end + until _output.size() == 0 end + end + + if iterate > 1 then + apply(iterate - 1) + else + _main.done() + end + + be receive(data: Array[U64] iso) => + try + for i in Range(0, data.size()) do + let datum = data(i) + var j = (datum >> _loglocal) and _mask + _table(j) = _table(j) xor datum + end + + data.clear() + _reuse.push(consume data) + end + + be done() => + _main.confirm() + +primitive PolyRand + fun apply(prev: U64): U64 => + (prev << 1) xor if prev.i64() < 0 then _poly() else 0 end + + fun seed(from: U64): U64 => + var n = from % _period() + + if n == 0 then + return 1 + end + + var m2 = Array[U64].undefined(64) + var temp = U64(1) + + try + for i in Range(0, 64) do + m2(i) = temp + temp = this(temp) + temp = this(temp) + end + end + + var i: U64 = 64 - n.clz() + var r = U64(2) + + try + while i > 0 do + temp = 0 + + for j in Range(0, 64) do + if ((r >> j) and 1) != 0 then + temp = temp xor m2(j) + end + end + + r = temp + i = i - 1 + + if ((n >> i) and 1) != 0 then + r = this(r) + end + end + end + r + + fun _poly(): U64 => 7 + + fun _period(): U64 => 1317624576693539401 diff --git a/samples/Pony/hello-world.pony b/samples/Pony/hello-world.pony new file mode 100644 index 00000000..9f7258e2 --- /dev/null +++ b/samples/Pony/hello-world.pony @@ -0,0 +1,3 @@ +actor Main + new create(env: Env) => + env.out.print("Hello, world.") diff --git a/samples/Pony/mandelbrot.pony b/samples/Pony/mandelbrot.pony new file mode 100644 index 00000000..cae7ea1d --- /dev/null +++ b/samples/Pony/mandelbrot.pony @@ -0,0 +1,188 @@ +use "files" +use "options" +use "collections" + +actor Worker + new mandelbrot(main: Main, x: U64, y: U64, width: U64, iterations: U64, + limit: F32, real: Array[F32] val, imaginary: Array[F32] val) + => + var view: Array[U8] iso = + recover + Array[U8]((y - x) * (width >> 3)) + end + + let group_r = Array[F32].undefined(8) + let group_i = Array[F32].undefined(8) + + var row = x + + try + while row < y do + let prefetch_i = imaginary(row) + + var col: U64 = 0 + + while col < width do + var j: U64 = 0 + + while j < 8 do + group_r.update(j, real(col + j)) + group_i.update(j, prefetch_i) + j = j + 1 + end + + var bitmap: U8 = 0xFF + var n = iterations + + repeat + var mask: U8 = 0x80 + var k: U64 = 0 + + while k < 8 do + let r = group_r(k) + let i = group_i(k) + + group_r.update(k, ((r * r) - (i * i)) + real(col + k)) + group_i.update(k, (2.0 * r * i) + prefetch_i) + + if ((r * r) + (i * i)) > limit then + bitmap = bitmap and not mask + end + + mask = mask >> 1 + k = k + 1 + end + until (bitmap == 0) or ((n = n - 1) == 1) end + + view.push(bitmap) + + col = col + 8 + end + row = row + 1 + end + + main.draw(x * (width >> 3), consume view) + end + +actor Main + var iterations: U64 = 50 + var limit: F32 = 4.0 + var chunks: U64 = 16 + var width: U64 = 16000 + var actors: U64 = 0 + var header: U64 = 0 + var real: Array[F32] val = recover Array[F32] end + var imaginary: Array[F32] val = recover Array[F32] end + var outfile: (File | None) = None + + new create(env: Env) => + try + arguments(env) + + let length = width + let recip_width = 2.0 / width.f32() + + var r = recover Array[F32](length) end + var i = recover Array[F32](length) end + + for j in Range(0, width) do + r.push((recip_width * j.f32()) - 1.5) + i.push((recip_width * j.f32()) - 1.0) + end + + real = consume r + imaginary = consume i + + spawn_actors() + create_outfile() + end + + be draw(offset: U64, pixels: Array[U8] val) => + match outfile + | var out: File => + out.seek_start(header + offset) + out.write(pixels) + if (actors = actors - 1) == 1 then + out.dispose() + end + end + + fun ref create_outfile() => + match outfile + | var f: File => + f.print("P4\n " + width.string() + " " + width.string() + "\n") + header = f.size() + f.set_length((width * (width >> 3)) + header) + end + + fun ref spawn_actors() => + actors = ((width + (chunks - 1)) / chunks) + + var rest = width % chunks + + if rest == 0 then rest = chunks end + + var x: U64 = 0 + var y: U64 = 0 + + for i in Range(0, actors - 1) do + x = i * chunks + y = x + chunks + Worker.mandelbrot(this, x, y, width, iterations, limit, real, imaginary) + end + + Worker.mandelbrot(this, y, y + rest, width, iterations, limit, real, + imaginary) + + fun ref arguments(env: Env) ? => + let options = Options(env) + + options + .add("iterations", "i", I64Argument) + .add("limit", "l", F64Argument) + .add("chunks", "c", I64Argument) + .add("width", "w", I64Argument) + .add("output", "o", StringArgument) + + for option in options do + match option + | ("iterations", var arg: I64) => iterations = arg.u64() + | ("limit", var arg: F64) => limit = arg.f32() + | ("chunks", var arg: I64) => chunks = arg.u64() + | ("width", var arg: I64) => width = arg.u64() + | ("output", var arg: String) => + outfile = try File(FilePath(env.root, arg)) end + | let err: ParseError => err.report(env.out) ; usage(env) ; error + end + end + + fun tag usage(env: Env) => + env.out.print( + """ + mandelbrot [OPTIONS] + + The binary output can be converted to a BMP with the following command + (ImageMagick Tools required): + + convert JPEG:.jpg + + Available options: + + --iterations, -i Maximum amount of iterations to be done for each pixel. + Defaults to 50. + + --limit, -l Square of the limit that pixels need to exceed in order + to escape from the Mandelbrot set. + Defaults to 4.0. + + --chunks, -c Maximum line count of chunks the image should be + divided into for divide & conquer processing. + Defaults to 16. + + --width, -w Lateral length of the resulting mandelbrot image. + Defaults to 16000. + + --output, -o File to write the output to. + + """ + ) diff --git a/samples/Pony/mixed.pony b/samples/Pony/mixed.pony new file mode 100644 index 00000000..d55a161c --- /dev/null +++ b/samples/Pony/mixed.pony @@ -0,0 +1,130 @@ +use "collections" + +actor Worker + var _env: Env + + new create(env: Env) => + _env = env + + var a: U64 = 86028157 + var b: U64 = 329545133 + + var result = factorize(a*b) + + var correct = + try + (result.size() == 2) and + (result(0) == 86028157) and + (result(1) == 329545133) + else + false + end + + fun ref factorize(bigint: U64) : Array[U64] => + var factors = Array[U64](2) + + if bigint <= 3 then + factors.push(bigint) + else + var d: U64 = 2 + var i: U64 = 0 + var n = bigint + + while d < n do + if (n % d) == 0 then + i = i + 1 + factors.push(d) + n = n / d + else + d = if d == 2 then 3 else (d + 2) end + end + end + + factors.push(d) + end + + factors + +actor Ring + var _env: Env + var _size: U32 + var _pass: U32 + var _repetitions: U32 + var _next: Ring + + new create(env: Env, size: U32, pass: U32, repetitions: U32) => + _env = env + _size = size + _pass = pass + _repetitions = repetitions + _next = spawn_ring(_env, _size, _pass) + run() + + new neighbor(env: Env, next: Ring) => + _env = env + _next = next + _size = 0 + _pass = 0 + _repetitions = 0 + + be apply(i: U32) => + if i > 0 then + _next(i - 1) + else + run() + end + + fun ref run() => + if _repetitions > 0 then + _repetitions = _repetitions - 1 + _next(_pass * _size) + Worker(_env) + end + + fun tag spawn_ring(env: Env, size: U32, pass': U32) : Ring => + var next: Ring = this + + for i in Range[U32](0, size) do + next = Ring.neighbor(env, next) + end + + next + +actor Main + var _size: U32 = 50 + var _count: U32 = 20 + var _pass: U32 = 10000 + var _repetitions: U32 = 5 + var _env: Env + + new create(env: Env) => + _env = env + + try + arguments() + start_benchmark() + else + usage() + end + + fun ref arguments() ? => + _count = _env.args(1).u32() + _size = _env.args(2).u32() + _pass = _env.args(3).u32() + _repetitions = _env.args(4).u32() + + fun ref start_benchmark() => + for i in Range[U32](0, _count) do + Ring(_env, _size, _pass, _repetitions) + end + + fun ref usage() => + _env.out.print( + """ + mixed OPTIONS + N number of actors in each ring" + N number of rings" + N number of messages to pass around each ring" + N number of times to repeat" + """ + ) diff --git a/vendor/grammars/sublime-pony b/vendor/grammars/sublime-pony new file mode 160000 index 00000000..6197c402 --- /dev/null +++ b/vendor/grammars/sublime-pony @@ -0,0 +1 @@ +Subproject commit 6197c4028eb04dcb1c443160047e4c84c80d863e From 1d86f40fcda7ef0b302a55f6d94d8e99e7f3329e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20T=C3=BD=C4=8D?= Date: Sun, 30 Aug 2015 15:03:55 +0200 Subject: [PATCH 122/356] Added m4sugar language, moved samples to right locations. --- lib/linguist/languages.yml | 16 +++++++++++++++- samples/{M4 => M4Sugar}/ax_ruby_devel.m4 | 0 samples/{M4 => M4Sugar/filenames}/configure.ac | 0 samples/{M4 => M4Sugar}/list.m4 | 0 4 files changed, 15 insertions(+), 1 deletion(-) rename samples/{M4 => M4Sugar}/ax_ruby_devel.m4 (100%) rename samples/{M4 => M4Sugar/filenames}/configure.ac (100%) rename samples/{M4 => M4Sugar}/list.m4 (100%) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index ab094d63..0b882393 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1917,9 +1917,23 @@ M: - .m tm_scope: source.lisp ace_mode: lisp - + M4: type: programming + aliases: + - autoconf + extensions: + - .m4 + filenames: + - configure.ac + tm_scope: none + ace_mode: text + +M4Sugar: + type: programming + group: M4 + aliases: + - autoconf extensions: - .m4 filenames: diff --git a/samples/M4/ax_ruby_devel.m4 b/samples/M4Sugar/ax_ruby_devel.m4 similarity index 100% rename from samples/M4/ax_ruby_devel.m4 rename to samples/M4Sugar/ax_ruby_devel.m4 diff --git a/samples/M4/configure.ac b/samples/M4Sugar/filenames/configure.ac similarity index 100% rename from samples/M4/configure.ac rename to samples/M4Sugar/filenames/configure.ac diff --git a/samples/M4/list.m4 b/samples/M4Sugar/list.m4 similarity index 100% rename from samples/M4/list.m4 rename to samples/M4Sugar/list.m4 From 73b1737dc7fbf77629f3514a2e9a8fc82ec0467c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20T=C3=BD=C4=8D?= Date: Sun, 30 Aug 2015 15:09:45 +0200 Subject: [PATCH 123/356] Removed a typo --- lib/linguist/languages.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 0b882393..efa1dfb1 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1920,8 +1920,6 @@ M: M4: type: programming - aliases: - - autoconf extensions: - .m4 filenames: From 1068cfb4b5d791e522071d876044356e7eb4ecaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20T=C3=BD=C4=8D?= Date: Sun, 30 Aug 2015 15:25:42 +0200 Subject: [PATCH 124/356] Removed stray M4 attribute --- lib/linguist/languages.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index efa1dfb1..01065eb2 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1922,8 +1922,6 @@ M4: type: programming extensions: - .m4 - filenames: - - configure.ac tm_scope: none ace_mode: text From dd8eaf2893030d808fdf10553f79ac75ae5f596c Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Sun, 30 Aug 2015 12:32:33 +0200 Subject: [PATCH 125/356] Alphabetise heuristics. --- lib/linguist/heuristics.rb | 372 ++++++++++++++++++------------------- test/test_heuristics.rb | 208 ++++++++++----------- 2 files changed, 290 insertions(+), 290 deletions(-) diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 4d468bf0..dd1f8ee6 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -67,6 +67,16 @@ module Linguist # Common heuristics ObjectiveCRegex = /^[ \t]*@(interface|class|protocol|property|end|synchronized|selector|implementation)\b/ + disambiguate ".asc" do |data| + if /^(----[- ]BEGIN|ssh-(rsa|dss)) /.match(data) + Language["Public Key"] + elsif /^[=-]+(\s|\n)|{{[A-Za-z]/.match(data) + Language["AsciiDoc"] + elsif /^(\/\/.+|((import|export)\s+)?(function|int|float|char)\s+((room|repeatedly|on|game)_)?([A-Za-z]+[A-Za-z_0-9]+)\s*[;\(])/.match(data) + Language["AGS Script"] + end + end + disambiguate ".bb" do |data| if /^\s*; /.match(data) || data.include?("End Function") Language["BlitzBasic"] @@ -75,67 +85,9 @@ module Linguist end end - disambiguate ".cs" do |data| - if /![\w\s]+methodsFor: /.match(data) - Language["Smalltalk"] - elsif /^\s*namespace\s*[\w\.]+\s*{/.match(data) || /^\s*\/\//.match(data) - Language["C#"] - end - end - - disambiguate ".h" do |data| - if ObjectiveCRegex.match(data) - Language["Objective-C"] - elsif (/^\s*#\s*include <(cstdint|string|vector|map|list|array|bitset|queue|stack|forward_list|unordered_map|unordered_set|(i|o|io)stream)>/.match(data) || - /^\s*template\s* ")) - Language["GAP"] - # Heads up - we don't usually write heuristics like this (with no regex match) - else - Language["Scilab"] + disambiguate ".ch" do |data| + if /^\s*#\s*(if|ifdef|ifndef|define|command|xcommand|translate|xtranslate|include|pragma|undef)\b/i.match(data) + Language["xBase"] end end @@ -149,29 +101,29 @@ module Linguist end end - disambiguate ".php" do |data| - if data.include?("/.match(data) || + /^\s*template\s*)/.match(data) + Language["Lex"] + elsif /^\.[a-z][a-z](\s|$)/i.match(data) + Language["Groff"] + elsif /^\((de|class|rel|code|data|must)\s/.match(data) + Language["PicoLisp"] + end + end + + disambiguate ".ls" do |data| + if /^\s*package\s*[\w\.\/\*\s]*\s*{/.match(data) + Language["LoomScript"] + else + Language["LiveScript"] + end + end + + disambiguate ".lsp", ".lisp" do |data| + if /^\s*\((defun|in-package|defpackage) /i.match(data) + Language["Common Lisp"] + elsif /^\s*\(define /.match(data) + Language["NewLisp"] + end + end + disambiguate ".m" do |data| if ObjectiveCRegex.match(data) Language["Objective-C"] @@ -213,41 +216,113 @@ module Linguist end end - disambiguate ".gs" do |data| - Language["Gosu"] if /^uses java\./.match(data) - end - - disambiguate ".ls" do |data| - if /^\s*package\s*[\w\.\/\*\s]*\s*{/.match(data) - Language["LoomScript"] - else - Language["LiveScript"] + disambiguate ".ml" do |data| + if /(^\s*module)|let rec |match\s+(\S+\s)+with/.match(data) + Language["OCaml"] + elsif /=> |case\s+(\S+\s)+of/.match(data) + Language["Standard ML"] end end - disambiguate ".lsp", ".lisp" do |data| - if /^\s*\((defun|in-package|defpackage) /i.match(data) - Language["Common Lisp"] - elsif /^\s*\(define /.match(data) + disambiguate ".mod" do |data| + if data.include?(' |case\s+(\S+\s)+of/.match(data) - Language["Standard ML"] - end - end - - disambiguate ".mod" do |data| - if data.include?(' ")) + Language["GAP"] + # Heads up - we don't usually write heuristics like this (with no regex match) else - Language["NewLisp"] - end - end - - disambiguate ".rs" do |data| - if /^(use |fn |mod |pub |macro_rules|impl|#!?\[)/.match(data) - Language["Rust"] - elsif /#include|#pragma\s+(rs|version)|__attribute__/.match(data) - Language["RenderScript"] - end - end - - disambiguate ".l" do |data| - if /\(def(un|macro)\s/.match(data) - Language["Common Lisp"] - elsif /^(%[%{}]xs|<.*>)/.match(data) - Language["Lex"] - elsif /^\.[a-z][a-z](\s|$)/i.match(data) - Language["Groff"] - elsif /^\((de|class|rel|code|data|must)\s/.match(data) - Language["PicoLisp"] - end - end - - disambiguate ".n" do |data| - if /^[.']/.match(data) - Language["Groff"] - elsif /^(module|namespace|using)\s/.match(data) - Language["Nemerle"] - end - end - - disambiguate ".ms" do |data| - if /^[.'][a-z][a-z](\s|$)/i.match(data) - Language["Groff"] - elsif /((^|\s)move?[. ])|\.(include|globa?l)\s/.match(data) - Language["GAS"] - end - end - - disambiguate ".ch" do |data| - if /^\s*#\s*(if|ifdef|ifndef|define|command|xcommand|translate|xtranslate|include|pragma|undef)\b/i.match(data) - Language["xBase"] - end - end - - disambiguate ".r" do |data| - if /\bRebol\b/i.match(data) - Language["Rebol"] - elsif data.include?("<-") - Language["R"] + Language["Scilab"] end end end diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index cca48675..524a522a 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -33,6 +33,101 @@ class TestHeuristcs < Minitest::Test end end + def test_detect_still_works_if_nothing_matches + blob = Linguist::FileBlob.new(File.join(samples_path, "Objective-C/hello.m")) + match = Language.detect(blob) + assert_equal Language["Objective-C"], match + end + + # Candidate languages = ["AGS Script", "AsciiDoc", "Public Key"] + def test_asc_by_heuristics + assert_heuristics({ + "AsciiDoc" => all_fixtures("AsciiDoc", "*.asc"), + "AGS Script" => all_fixtures("AGS Script", "*.asc"), + "Public Key" => all_fixtures("Public Key", "*.asc") + }) + end + + def test_bb_by_heuristics + assert_heuristics({ + "BitBake" => all_fixtures("BitBake", "*.bb"), + "BlitzBasic" => all_fixtures("BlitzBasic", "*.bb") + }) + end + + def test_ch_by_heuristics + assert_heuristics({ + "xBase" => all_fixtures("xBase", ".ch") + }) + end + + def test_cl_by_heuristics + assert_heuristics({ + "Common Lisp" => all_fixtures("Common Lisp", "*.cl"), + "OpenCL" => all_fixtures("OpenCL", "*.cl") + }) + end + + def test_cs_by_heuristics + assert_heuristics({ + "C#" => all_fixtures("C#", "*.cs"), + "Smalltalk" => all_fixtures("Smalltalk", "*.cs") + }) + end + + # Candidate languages = ["ECL", "ECLiPSe"] + def test_ecl_by_heuristics + assert_heuristics({ + "ECL" => all_fixtures("ECL", "*.ecl"), + "ECLiPSe" => all_fixtures("ECLiPSe", "*.ecl") + }) + end + + def test_f_by_heuristics + assert_heuristics({ + "FORTRAN" => all_fixtures("FORTRAN", "*.f") + all_fixtures("FORTRAN", "*.for"), + "Forth" => all_fixtures("Forth", "*.f") + all_fixtures("Forth", "*.for") + }) + end + + def test_fr_by_heuristics + assert_heuristics({ + "Frege" => all_fixtures("Frege", "*.fr"), + "Forth" => all_fixtures("Forth", "*.fr"), + "Text" => all_fixtures("Text", "*.fr") + }) + end + + def test_fs_by_heuristics + assert_heuristics({ + "F#" => all_fixtures("F#", "*.fs"), + "Forth" => all_fixtures("Forth", "*.fs"), + "GLSL" => all_fixtures("GLSL", "*.fs") + }) + end + + # Candidate languages = ["Hack", "PHP"] + def test_hack_by_heuristics + assert_heuristics({ + "Hack" => all_fixtures("Hack", "*.php"), + "PHP" => all_fixtures("PHP", "*.php") + }) + end + + def test_ls_by_heuristics + assert_heuristics({ + "LiveScript" => all_fixtures("LiveScript", "*.ls"), + "LoomScript" => all_fixtures("LoomScript", "*.ls") + }) + end + + def test_lsp_by_heuristics + assert_heuristics({ + "Common Lisp" => all_fixtures("Common Lisp", "*.lsp") + all_fixtures("Common Lisp", "*.lisp"), + "NewLisp" => all_fixtures("NewLisp", "*.lsp") + all_fixtures("NewLisp", "*.lisp") + }) + end + # Candidate languages = ["C++", "Objective-C"] def test_obj_c_by_heuristics # Only calling out '.h' filenames as these are the ones causing issues @@ -43,12 +138,6 @@ class TestHeuristcs < Minitest::Test }) end - def test_detect_still_works_if_nothing_matches - blob = Linguist::FileBlob.new(File.join(samples_path, "Objective-C/hello.m")) - match = Language.detect(blob) - assert_equal Language["Objective-C"], match - end - # Candidate languages = ["Perl", "Perl6", "Prolog"] def test_pl_prolog_perl_by_heuristics assert_heuristics({ @@ -66,24 +155,6 @@ class TestHeuristcs < Minitest::Test }) end - # Candidate languages = ["Perl", "Perl6"] - def test_t_perl_by_heuristics - assert_heuristics({ - "Perl" => all_fixtures("Perl", "*.t"), - "Perl6" => ["Perl6/01-dash-uppercase-i.t", "Perl6/01-parse.t", "Perl6/advent2009-day16.t", - "Perl6/basic-open.t", "Perl6/calendar.t", "Perl6/for.t", "Perl6/hash.t", - "Perl6/listquote-whitespace.t"] - }) - end - - # Candidate languages = ["ECL", "ECLiPSe"] - def test_ecl_by_heuristics - assert_heuristics({ - "ECL" => all_fixtures("ECL", "*.ecl"), - "ECLiPSe" => all_fixtures("ECLiPSe", "*.ecl") - }) - end - # Candidate languages = ["IDL", "Prolog", "QMake", "INI"] def test_pro_by_heuristics assert_heuristics({ @@ -94,34 +165,10 @@ class TestHeuristcs < Minitest::Test }) end - # Candidate languages = ["AGS Script", "AsciiDoc", "Public Key"] - def test_asc_by_heuristics + def test_r_by_heuristics assert_heuristics({ - "AsciiDoc" => all_fixtures("AsciiDoc", "*.asc"), - "AGS Script" => all_fixtures("AGS Script", "*.asc"), - "Public Key" => all_fixtures("Public Key", "*.asc") - }) - end - - def test_cl_by_heuristics - assert_heuristics({ - "Common Lisp" => all_fixtures("Common Lisp", "*.cl"), - "OpenCL" => all_fixtures("OpenCL", "*.cl") - }) - end - - def test_f_by_heuristics - assert_heuristics({ - "FORTRAN" => all_fixtures("FORTRAN", "*.f") + all_fixtures("FORTRAN", "*.for"), - "Forth" => all_fixtures("Forth", "*.f") + all_fixtures("Forth", "*.for") - }) - end - - # Candidate languages = ["Hack", "PHP"] - def test_hack_by_heuristics - assert_heuristics({ - "Hack" => all_fixtures("Hack", "*.php"), - "PHP" => all_fixtures("PHP", "*.php") + "R" => all_fixtures("R", "*.r") + all_fixtures("R", "*.R"), + "Rebol" => all_fixtures("Rebol", "*.r") }) end @@ -133,47 +180,13 @@ class TestHeuristcs < Minitest::Test }) end - def test_fs_by_heuristics + # Candidate languages = ["Perl", "Perl6"] + def test_t_perl_by_heuristics assert_heuristics({ - "F#" => all_fixtures("F#", "*.fs"), - "Forth" => all_fixtures("Forth", "*.fs"), - "GLSL" => all_fixtures("GLSL", "*.fs") - }) - end - - def test_fr_by_heuristics - assert_heuristics({ - "Frege" => all_fixtures("Frege", "*.fr"), - "Forth" => all_fixtures("Forth", "*.fr"), - "Text" => all_fixtures("Text", "*.fr") - }) - end - - def test_bb_by_heuristics - assert_heuristics({ - "BitBake" => all_fixtures("BitBake", "*.bb"), - "BlitzBasic" => all_fixtures("BlitzBasic", "*.bb") - }) - end - - def test_lsp_by_heuristics - assert_heuristics({ - "Common Lisp" => all_fixtures("Common Lisp", "*.lsp") + all_fixtures("Common Lisp", "*.lisp"), - "NewLisp" => all_fixtures("NewLisp", "*.lsp") + all_fixtures("NewLisp", "*.lisp") - }) - end - - def test_cs_by_heuristics - assert_heuristics({ - "C#" => all_fixtures("C#", "*.cs"), - "Smalltalk" => all_fixtures("Smalltalk", "*.cs") - }) - end - - def test_ls_by_heuristics - assert_heuristics({ - "LiveScript" => all_fixtures("LiveScript", "*.ls"), - "LoomScript" => all_fixtures("LoomScript", "*.ls") + "Perl" => all_fixtures("Perl", "*.t"), + "Perl6" => ["Perl6/01-dash-uppercase-i.t", "Perl6/01-parse.t", "Perl6/advent2009-day16.t", + "Perl6/basic-open.t", "Perl6/calendar.t", "Perl6/for.t", "Perl6/hash.t", + "Perl6/listquote-whitespace.t"] }) end @@ -183,17 +196,4 @@ class TestHeuristcs < Minitest::Test "XML" => all_fixtures("XML", "*.ts") }) end - - def test_ch_by_heuristics - assert_heuristics({ - "xBase" => all_fixtures("xBase", ".ch") - }) - end - - def test_r_by_heuristics - assert_heuristics({ - "R" => all_fixtures("R", "*.r") + all_fixtures("R", "*.R"), - "Rebol" => all_fixtures("Rebol", "*.r") - }) - end end From 6e05edc3506800ab7139b169c16cb18eb6d6d405 Mon Sep 17 00:00:00 2001 From: James Kyle Date: Mon, 31 Aug 2015 10:26:29 -0700 Subject: [PATCH 126/356] Add .jsproj extension --- lib/linguist/languages.yml | 1 + samples/JSProj/JSBrowser.jsproj | 96 +++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 samples/JSProj/JSBrowser.jsproj diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 8a0bc395..02f73444 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3615,6 +3615,7 @@ XML: - .iml - .ivy - .jelly + - .jsproj - .kml - .launch - .mdpolicy diff --git a/samples/JSProj/JSBrowser.jsproj b/samples/JSProj/JSBrowser.jsproj new file mode 100644 index 00000000..78d2cb4d --- /dev/null +++ b/samples/JSProj/JSBrowser.jsproj @@ -0,0 +1,96 @@ + + + + + Debug + AnyCPU + + + Debug + ARM + + + Debug + x64 + + + Debug + x86 + + + Release + AnyCPU + + + Release + ARM + true + + + Release + x64 + true + + + Release + x86 + true + + + + 42fc11d8-64c6-4967-a15a-dfd787f68766 + + + + 14.0 + + + + + true + UAP + 10.0.10240.0 + 10.0.10240.0 + $(VersionNumberMajor).$(VersionNumberMinor) + en-US + + + + Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + From 9b8bf9068f2ec2ea2de37a29b3c8ad40c922215f Mon Sep 17 00:00:00 2001 From: James Kyle Date: Mon, 31 Aug 2015 11:35:01 -0700 Subject: [PATCH 127/356] Move jsproj example to xml directory --- samples/{JSProj => XML}/JSBrowser.jsproj | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename samples/{JSProj => XML}/JSBrowser.jsproj (100%) diff --git a/samples/JSProj/JSBrowser.jsproj b/samples/XML/JSBrowser.jsproj similarity index 100% rename from samples/JSProj/JSBrowser.jsproj rename to samples/XML/JSBrowser.jsproj From e62d0e19a52d93cd72b3c47e5ace405a4fcf044b Mon Sep 17 00:00:00 2001 From: Alhadis Date: Tue, 1 Sep 2015 07:12:18 +1000 Subject: [PATCH 128/356] Add ".geojson" as a JSON extension --- lib/linguist/languages.yml | 1 + samples/JSON/geo.geojson | 82 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 samples/JSON/geo.geojson diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 8a0bc395..19cd8ca9 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1546,6 +1546,7 @@ JSON: extensions: - .json - .lock + - .geojson filenames: - .jshintrc - composer.lock diff --git a/samples/JSON/geo.geojson b/samples/JSON/geo.geojson new file mode 100644 index 00000000..1c77693e --- /dev/null +++ b/samples/JSON/geo.geojson @@ -0,0 +1,82 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "name": "Australia Post - North Ryde BC", + "geo": [-33.787792, 151.13288], + "streetAddress": "11 Waterloo Road", + "addressLocality": "Macquarie Park", + "addressRegion": "New South Wales", + "addressCountry": "Australia", + "postalCode": "2113" + }, + "geometry": { + "type": "Point", + "coordinates": [151.13288, -33.787792, 0] + } + }, + + + { + "type": "Feature", + "properties": { + "name": "George Weston Foods Limited", + "geo": [-37.8263884, 144.9105381], + "streetAddress": "Level 3, 187 Todd Road", + "addressLocality": "Port Melbourne", + "addressRegion": "Victoria", + "addressCountry": "Australia", + "postalCode": "3207" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [144.9097088901841, -37.82622654171794, 0], + [144.9099724266943, -37.82679388891783, 0], + [144.9110127325916, -37.82651526396403, 0], + [144.9112227645738, -37.82655667152123, 0], + [144.9113739439796, -37.82618552508767, 0], + [144.9112740633105, -37.82615750100924, 0], + [144.9111355846674, -37.82584493693527, 0], + [144.9097088901841, -37.82622654171794, 0] + ] + ] + } + }, + + + { + "type": "Feature", + "properties": { + "name": "George Weston Foods Limited", + "geo": [-37.05202791502396, 144.2085614999388], + "streetAddress": "67 Richards Road", + "addressLocality": "Castlemaine", + "addressRegion": "Victoria", + "addressCountry": "Australia", + "postalCode": "3450" + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [144.2052428913937, -37.04906391287216, 0], + [144.205540392692, -37.05049727485623, 0], + [144.2059800881858, -37.05066835966983, 0], + [144.206490656024, -37.05279538900776, 0], + [144.2064525845008, -37.05366195881602, 0], + [144.2084322301922, -37.0538920493147, 0], + [144.2084811895712, -37.05266519735124, 0], + [144.2079784002005, -37.05041270555773, 0], + [144.2074017905817, -37.04817406993293, 0], + [144.2061363939852, -37.04834972871226, 0], + [144.2052428913937, -37.04906391287216, 0] + ] + ] + } + } + ] +} From b428bce1265a5b99454f2effaceaf29b1d9b381f Mon Sep 17 00:00:00 2001 From: Alhadis Date: Tue, 1 Sep 2015 07:19:06 +1000 Subject: [PATCH 129/356] Quote NCL language's colour value Without double-quotes, the hex colour is interpreted as a YAML comment. Originally added in 2d39258. --- lib/linguist/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 19cd8ca9..6f59cc19 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2128,7 +2128,7 @@ Myghty: NCL: type: programming - color: #28431f + color: "#28431f" extensions: - .ncl tm_scope: source.ncl From a167f852dd6a202cb2d28a8c1ed4bf83150c415b Mon Sep 17 00:00:00 2001 From: Alhadis Date: Tue, 1 Sep 2015 07:32:21 +1000 Subject: [PATCH 130/356] Alphabetise JSON extensions --- lib/linguist/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 6f59cc19..446c81c2 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1545,8 +1545,8 @@ JSON: searchable: false extensions: - .json - - .lock - .geojson + - .lock filenames: - .jshintrc - composer.lock From e4f5c0066a90a5e12a845d495196c051ad7bd038 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Mon, 31 Aug 2015 08:53:40 +0200 Subject: [PATCH 131/356] Add checks to keep heuristics alphabetised. --- test/test_pedantic.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/test_pedantic.rb b/test/test_pedantic.rb index 29b673ab..2d0372cc 100644 --- a/test/test_pedantic.rb +++ b/test/test_pedantic.rb @@ -32,6 +32,18 @@ class TestPedantic < Minitest::Test end end + def test_heuristics_are_sorted + file = File.expand_path("../../lib/linguist/heuristics.rb", __FILE__) + heuristics = open(file).each.grep(/^ *disambiguate/) + assert_sorted heuristics + end + + def test_heuristics_tests_are_sorted + file = File.expand_path("../test_heuristics.rb", __FILE__) + tests = open(file).each.grep(/^ *def test_[a-z_]+_by_heuristics/) + assert_sorted tests + end + def assert_sorted(list) list.each_cons(2) do |previous, item| flunk "#{previous} should come after #{item}" if previous > item From 5afdd2c533ccb6669eef2a9d848bcb6231380370 Mon Sep 17 00:00:00 2001 From: ismail-arilik Date: Tue, 1 Sep 2015 14:23:59 +0300 Subject: [PATCH 132/356] Add color for the PL/SQL language. I have added color to the PL/SQL language: #dad8d8. I take this color from a window background which evokes the interface of the language. --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 8a0bc395..f01f2c26 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2443,6 +2443,7 @@ PLSQL: type: programming ace_mode: sql tm_scope: source.plsql.oracle + color: "#dad8d8" extensions: - .pls - .pkb From 81ebef2e2906ebabbc70292e2901f6658503c801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20T=C3=BD=C4=8D?= Date: Tue, 1 Sep 2015 17:49:01 +0200 Subject: [PATCH 133/356] Added autoconf output, removed configure.ac --- lib/linguist/vendor.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml index ed89eda8..7b7b75f8 100644 --- a/lib/linguist/vendor.yml +++ b/lib/linguist/vendor.yml @@ -20,10 +20,16 @@ - ^deps/ - ^tools/ - (^|/)configure$ -- (^|/)configure.ac$ - (^|/)config.guess$ - (^|/)config.sub$ +# stuff autogenerated by autoconf - still C deps +- (^|/)libtool.m4 +- (^|/)ltoptions.m4 +- (^|/)ltsugar.m4 +- (^|/)ltversion.m4 +- (^|/)lt~obsolete.m4 + # Linters - cpplint.py From 26a35ea43dec04872f18c70b7733026abffd00f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C4=9Bj=20T=C3=BD=C4=8D?= Date: Tue, 1 Sep 2015 17:51:18 +0200 Subject: [PATCH 134/356] added aclocal to the generated files list --- lib/linguist/vendor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml index 7b7b75f8..1d58f467 100644 --- a/lib/linguist/vendor.yml +++ b/lib/linguist/vendor.yml @@ -24,6 +24,7 @@ - (^|/)config.sub$ # stuff autogenerated by autoconf - still C deps +- (^|/)aclocal.m4 - (^|/)libtool.m4 - (^|/)ltoptions.m4 - (^|/)ltsugar.m4 From f0242f6f97a2c439e868a3e4c3277bd7d56117bb Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 1 Sep 2015 19:12:27 +0100 Subject: [PATCH 135/356] Updating grammars --- vendor/grammars/Handlebars | 2 +- vendor/grammars/Lean.tmbundle | 2 +- vendor/grammars/Sublime-Nit | 2 +- vendor/grammars/Sublime-SQF-Language | 2 +- vendor/grammars/SublimePapyrus | 2 +- vendor/grammars/atom-fsharp | 2 +- vendor/grammars/dart-sublime-bundle | 2 +- vendor/grammars/factor | 2 +- vendor/grammars/haxe-sublime-bundle | 2 +- vendor/grammars/java.tmbundle | 2 +- vendor/grammars/language-gfm | 2 +- vendor/grammars/language-javascript | 2 +- vendor/grammars/language-python | 2 +- vendor/grammars/language-shellscript | 2 +- vendor/grammars/latex.tmbundle | 2 +- vendor/grammars/powershell | 2 +- vendor/grammars/sublime-aspectj | 2 +- vendor/grammars/sublime-rust | 2 +- vendor/grammars/sublime-typescript | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/vendor/grammars/Handlebars b/vendor/grammars/Handlebars index 64f29314..88a0836a 160000 --- a/vendor/grammars/Handlebars +++ b/vendor/grammars/Handlebars @@ -1 +1 @@ -Subproject commit 64f293140c16666bc1fc7b91d14388d5c3f66d8c +Subproject commit 88a0836abe8de6bf4a4f0ac878bcd3087f0fef95 diff --git a/vendor/grammars/Lean.tmbundle b/vendor/grammars/Lean.tmbundle index dd3e30f0..943ac84b 160000 --- a/vendor/grammars/Lean.tmbundle +++ b/vendor/grammars/Lean.tmbundle @@ -1 +1 @@ -Subproject commit dd3e30f0581b14b8a4830d6b46eaa86bf62058e8 +Subproject commit 943ac84bf69bfbcab54eeeebba6d66c90ed700ff diff --git a/vendor/grammars/Sublime-Nit b/vendor/grammars/Sublime-Nit index 7d8b3503..e1e5463c 160000 --- a/vendor/grammars/Sublime-Nit +++ b/vendor/grammars/Sublime-Nit @@ -1 +1 @@ -Subproject commit 7d8b3503923edb3dd0fa0f8e0684dd33e7897446 +Subproject commit e1e5463c9cc83d61e48617dbe370307e358162b2 diff --git a/vendor/grammars/Sublime-SQF-Language b/vendor/grammars/Sublime-SQF-Language index 6d0f3f6c..81c5be35 160000 --- a/vendor/grammars/Sublime-SQF-Language +++ b/vendor/grammars/Sublime-SQF-Language @@ -1 +1 @@ -Subproject commit 6d0f3f6cee23a79f59af9ab263841c1533cd54f1 +Subproject commit 81c5be35bff3d1f8d77d8abeb8ca1c2d7c124899 diff --git a/vendor/grammars/SublimePapyrus b/vendor/grammars/SublimePapyrus index 2451bac8..a9d818f0 160000 --- a/vendor/grammars/SublimePapyrus +++ b/vendor/grammars/SublimePapyrus @@ -1 +1 @@ -Subproject commit 2451bac8ef1c06b8d4c514d5a417dd6fd295dda4 +Subproject commit a9d818f0ac24d8576db3bf703b78c7c675705439 diff --git a/vendor/grammars/atom-fsharp b/vendor/grammars/atom-fsharp index e7a4159f..2cbcaca9 160000 --- a/vendor/grammars/atom-fsharp +++ b/vendor/grammars/atom-fsharp @@ -1 +1 @@ -Subproject commit e7a4159fbf680ba4cafa9115ea7264a9cdba0fd0 +Subproject commit 2cbcaca93cbb94319f249a35653e3f3a24571a32 diff --git a/vendor/grammars/dart-sublime-bundle b/vendor/grammars/dart-sublime-bundle index 3e3ac8cc..d61e6efc 160000 --- a/vendor/grammars/dart-sublime-bundle +++ b/vendor/grammars/dart-sublime-bundle @@ -1 +1 @@ -Subproject commit 3e3ac8cc0366048a617a6056d7f6e2f1c8ccf4fe +Subproject commit d61e6efcbdec3c7c4a47e5355ce31b57020b24c9 diff --git a/vendor/grammars/factor b/vendor/grammars/factor index ac5da311..b2a51dfe 160000 --- a/vendor/grammars/factor +++ b/vendor/grammars/factor @@ -1 +1 @@ -Subproject commit ac5da311f73401db4adc28936c6aaae587a713ee +Subproject commit b2a51dfeb2bc721c0c908d3f0fa56ddf9202d06c diff --git a/vendor/grammars/haxe-sublime-bundle b/vendor/grammars/haxe-sublime-bundle index 102acf66..c3b96f1c 160000 --- a/vendor/grammars/haxe-sublime-bundle +++ b/vendor/grammars/haxe-sublime-bundle @@ -1 +1 @@ -Subproject commit 102acf66b921526401ce76f0a74c7f94edaca678 +Subproject commit c3b96f1c754ebc91bacc2926412042567fabbb5a diff --git a/vendor/grammars/java.tmbundle b/vendor/grammars/java.tmbundle index 5f420457..64294ae0 160000 --- a/vendor/grammars/java.tmbundle +++ b/vendor/grammars/java.tmbundle @@ -1 +1 @@ -Subproject commit 5f4204576e13a73c9dfce525d8ced41a39d004c3 +Subproject commit 64294ae0b62b64b1183c401e3803679eaddb4946 diff --git a/vendor/grammars/language-gfm b/vendor/grammars/language-gfm index 9b95c2ad..597d382a 160000 --- a/vendor/grammars/language-gfm +++ b/vendor/grammars/language-gfm @@ -1 +1 @@ -Subproject commit 9b95c2ad7c3c1261e54b11919f71ec3ad473aad9 +Subproject commit 597d382a8c5a23a3f358f6edb81e3f0ff6e17a30 diff --git a/vendor/grammars/language-javascript b/vendor/grammars/language-javascript index 39fd6989..c5c381e3 160000 --- a/vendor/grammars/language-javascript +++ b/vendor/grammars/language-javascript @@ -1 +1 @@ -Subproject commit 39fd6989f78e1be265dc6ce9ba7a0ac450525864 +Subproject commit c5c381e37812219db84cb5916094ca3b8dce62db diff --git a/vendor/grammars/language-python b/vendor/grammars/language-python index 7d38baf8..8933c523 160000 --- a/vendor/grammars/language-python +++ b/vendor/grammars/language-python @@ -1 +1 @@ -Subproject commit 7d38baf80b89c1dc58e77f8a12763c5d18d5e1e5 +Subproject commit 8933c5239ab946c4d8f3417b04f6dfc2e3448968 diff --git a/vendor/grammars/language-shellscript b/vendor/grammars/language-shellscript index cb582fd0..a6823795 160000 --- a/vendor/grammars/language-shellscript +++ b/vendor/grammars/language-shellscript @@ -1 +1 @@ -Subproject commit cb582fd056f91f19d265a3d0db0e161da52031ed +Subproject commit a6823795885801b62c7fceca41adaa4bf4de7a69 diff --git a/vendor/grammars/latex.tmbundle b/vendor/grammars/latex.tmbundle index 23e62234..6358337b 160000 --- a/vendor/grammars/latex.tmbundle +++ b/vendor/grammars/latex.tmbundle @@ -1 +1 @@ -Subproject commit 23e622349857b2e2181201e510c84fcec8e909d6 +Subproject commit 6358337b629fd9c17ac8c92f00e88859e6577d4f diff --git a/vendor/grammars/powershell b/vendor/grammars/powershell index 18c9f0e5..982ae21d 160000 --- a/vendor/grammars/powershell +++ b/vendor/grammars/powershell @@ -1 +1 @@ -Subproject commit 18c9f0e553f68053713503b8dcca2c4712381ad6 +Subproject commit 982ae21d54b3affc498131515ebbfca6b186ac16 diff --git a/vendor/grammars/sublime-aspectj b/vendor/grammars/sublime-aspectj index 888fefdd..72b35f79 160000 --- a/vendor/grammars/sublime-aspectj +++ b/vendor/grammars/sublime-aspectj @@ -1 +1 @@ -Subproject commit 888fefdd2f8db57628d7bd36e2388f1f534c00a7 +Subproject commit 72b35f795c2d7800ea65eb91b32d7594748dc561 diff --git a/vendor/grammars/sublime-rust b/vendor/grammars/sublime-rust index 386d8fcd..cff9c9c1 160000 --- a/vendor/grammars/sublime-rust +++ b/vendor/grammars/sublime-rust @@ -1 +1 @@ -Subproject commit 386d8fcdc522d469c0d451f383f5b4aaaec7369f +Subproject commit cff9c9c1c60f2bb4dc720931ceb37bcc12598334 diff --git a/vendor/grammars/sublime-typescript b/vendor/grammars/sublime-typescript index 0d519e5a..cf0fe35e 160000 --- a/vendor/grammars/sublime-typescript +++ b/vendor/grammars/sublime-typescript @@ -1 +1 @@ -Subproject commit 0d519e5a5592bd4152523fe359d1a0ebbe9cc493 +Subproject commit cf0fe35e3653d1de1605ac1d20ecba43dbd29709 From 13702451abaa0c6d5d20c4902534399240334184 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 1 Sep 2015 19:13:02 +0100 Subject: [PATCH 136/356] Bumping to v4.5.15 --- lib/linguist/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index 1ba6a51b..dbdb7d7f 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.5.14" + VERSION = "4.5.15" end From 1b327e29baf00b63c34a00f4118141fb30827d8c Mon Sep 17 00:00:00 2001 From: ismail-arilik Date: Tue, 1 Sep 2015 21:51:48 +0300 Subject: [PATCH 137/356] Add colors for some languages. These are effected languages and the reason behind the proposed colors: - Ant Build System: The color of logo (http://ant.apache.org/images/project-logo.gif). - AppleScript: AppleScript editor logo (https://en.wikipedia.org/wiki/AppleScript#/media/File:AppleScript_Editor_Logo.png). - Batchfile: Batch file icon in Windows (https://en.wikipedia.org/wiki/Batch_file#/media/File:Batch_file_icon_in_Windows_Vista.png). - Bison: A color taken from a bison (https://en.wikipedia.org/wiki/Bison#/media/File:Americanbison.jpg). - Cucumber: Official logo color (https://cucumber.io/images/cucumber-logo.svg). - Cuda: Nvidia(creator of CUDA) logo color (http://www.nvidia.com/content/includes/redesign2010/images/redesign10/nvidia_logo.png). - Gradle: Official Gradle logo color (https://gradle.org/wp-content/uploads/2015/03/GradleLogoReg.png). - Hack: Hack logo color (http://hacklang.org/wp-content/themes/hack/hack.png). - Haml: Haml logo color (http://haml.info/images/haml.png). - LLVM: Eye color of the dragon logo of LLVM (http://llvm.org/img/DragonMedium.png). - Less: Less logo color (http://lesscss.org/public/img/logo.png). - Markdown: The Daring Fireball logo color (http://daringfireball.net/graphics/logos/). - Maven POM: The maven logo color (https://en.wikipedia.org/wiki/Apache_Maven#/media/File:Maven_logo.svg). - Nginx: The nginx logo color (http://nginx.org/nginx.png). - NumPy: The NumPy logo color (http://www.numpy.org/_static/numpy_logo.png). - RDoc: I couldn'd find any logo, so have used the color of the name of RDoc in the official site (http://docs.seattlerb.org/rdoc/). - SCSS: The Sass logo color (http://sass-lang.com/assets/img/logos/logo-b6e1ef6e.svg). - Sass: The Sass logo color (http://sass-lang.com/assets/img/logos/logo-b6e1ef6e.svg). - XML: A random color. - XSLT: A random color. - YAML: The color of the name of YAML in the official site (http://yaml.org/). - Yacc: A random color. - reStructuredText: The official logo color (http://docutils.sourceforge.net/rst.png). --- lib/linguist/languages.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 4d83e963..ae0584a1 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -153,6 +153,7 @@ Ant Build System: - ant.xml - build.xml ace_mode: xml + color: "#A82C7C" ApacheConf: type: markup @@ -182,6 +183,7 @@ AppleScript: interpreters: - osascript ace_mode: applescript + color: "#F2F1F1" Arc: type: programming @@ -289,6 +291,7 @@ Batchfile: - .cmd tm_scope: source.dosbatch ace_mode: batchfile + color: "#92C2FF" Befunge: type: programming @@ -303,6 +306,7 @@ Bison: extensions: - .bison ace_mode: text + color: "#6A463F" BitBake: type: programming @@ -690,6 +694,7 @@ Cucumber: aliases: - gherkin ace_mode: text + color: "#00A818" Cuda: type: programming @@ -698,6 +703,7 @@ Cuda: - .cuh tm_scope: source.cuda-c++ ace_mode: c_cpp + color: "#76B900" Cycript: type: programming @@ -1204,6 +1210,7 @@ Gradle: - .gradle tm_scope: source.groovy.gradle ace_mode: text + color: "#84BA40" Grammatical Framework: type: programming @@ -1355,6 +1362,7 @@ Hack: - .hh - .php tm_scope: text.html.php + color: "#878787" Haml: group: HTML @@ -1363,6 +1371,7 @@ Haml: - .haml - .haml.deface ace_mode: haml + color: "#ECE2A9" Handlebars: type: markup @@ -1705,6 +1714,7 @@ LLVM: extensions: - .ll ace_mode: text + color: "#689DD7" LOLCODE: type: programming @@ -1768,6 +1778,7 @@ Less: - .less tm_scope: source.css.less ace_mode: less + color: "#2A4D82" Lex: type: programming @@ -1977,6 +1988,7 @@ Markdown: - .mkdown - .ron tm_scope: source.gfm + color: "#DDDDDD" Mask: type: markup @@ -2015,6 +2027,7 @@ Maven POM: filenames: - pom.xml ace_mode: xml + color: "#FF6804" Max: type: programming @@ -2204,6 +2217,7 @@ Nginx: aliases: - nginx configuration file ace_mode: text + color: "#009900" Nimrod: type: programming @@ -2262,6 +2276,7 @@ NumPy: - .numsc tm_scope: none ace_mode: text + color: "#378EC8" OCaml: type: programming @@ -2794,6 +2809,7 @@ RDoc: extensions: - .rdoc tm_scope: text.rdoc + color: "#333333" REALbasic: type: programming @@ -2991,6 +3007,7 @@ SCSS: ace_mode: scss extensions: - .scss + color: "#CF649A" SMT: type: programming @@ -3093,6 +3110,7 @@ Sass: extensions: - .sass ace_mode: sass + color: "#CF649A" Scala: type: programming @@ -3676,6 +3694,7 @@ XML: - Web.Release.config - Web.config - packages.config + color: "#25AAE2" XPages: type: programming @@ -3721,6 +3740,7 @@ XSLT: - .xsl tm_scope: text.xml.xsl ace_mode: xml + color: "#0E76BD" Xojo: type: programming @@ -3753,6 +3773,7 @@ YAML: - .yaml - .yaml-tmlanguage ace_mode: yaml + color: "#FF0000" Yacc: type: programming @@ -3762,6 +3783,7 @@ Yacc: - .yy tm_scope: source.bison ace_mode: text + color: "#92278F" Zephir: type: programming @@ -3844,6 +3866,7 @@ reStructuredText: - .rst - .rest ace_mode: text + color: "#000000" wisp: type: programming From 114a331106d8da31041657345277a160bc8f99c4 Mon Sep 17 00:00:00 2001 From: Alhadis Date: Wed, 2 Sep 2015 07:04:51 +1000 Subject: [PATCH 138/356] Add ".topojson" as a JSON extension --- lib/linguist/languages.yml | 1 + samples/JSON/switzerland.topojson | 1 + 2 files changed, 2 insertions(+) create mode 100644 samples/JSON/switzerland.topojson diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 446c81c2..cc8a94ac 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1547,6 +1547,7 @@ JSON: - .json - .geojson - .lock + - .topojson filenames: - .jshintrc - composer.lock diff --git a/samples/JSON/switzerland.topojson b/samples/JSON/switzerland.topojson new file mode 100644 index 00000000..18ded47d --- /dev/null +++ b/samples/JSON/switzerland.topojson @@ -0,0 +1 @@ +{"type":"Topology","transform":{"scale":[0.00045364536453645373,0.00019901990199019923],"translate":[5.956,45.818]},"objects":{"cantons":{"type":"GeometryCollection","geometries":[{"type":"Polygon","arcs":[[0,1,2,3,4,5,6,7,8,9]],"id":"ZH","properties":{"name":"Zürich"}},{"type":"MultiPolygon","arcs":[[[10,11,12,13,14,15,16,17,18,19,20,21,22],[23],[24]],[[25,26]],[[27]],[[28,29]]],"id":"BE","properties":{"name":"Bern/Berne"}},{"type":"Polygon","arcs":[[-12,30,31,32,33,34]],"id":"LU","properties":{"name":"Luzern"}},{"type":"Polygon","arcs":[[35,36,37,38,-16,39,40,41]],"id":"UR","properties":{"name":"Uri"}},{"type":"Polygon","arcs":[[42,-33,43,-1,44,45,46,-42]],"id":"SZ","properties":{"name":"Schwyz"}},{"type":"MultiPolygon","arcs":[[[-13,-35,47]],[[-15,48,-40]]],"id":"OW","properties":{"name":"Obwalden"}},{"type":"Polygon","arcs":[[-34,-43,-41,-49,-14,-48]],"id":"NW","properties":{"name":"Nidwalden"}},{"type":"Polygon","arcs":[[49,-36,-47,50,51]],"id":"GL","properties":{"name":"Glarus"}},{"type":"Polygon","arcs":[[-32,52,-2,-44]],"id":"ZG","properties":{"name":"Zug"}},{"type":"MultiPolygon","arcs":[[[53,54,55,-27,56,-19],[57]],[[58]],[[59,60]],[[61]],[[62]]],"id":"FR","properties":{"name":"Fribourg"}},{"type":"MultiPolygon","arcs":[[[-30,63,64,65,-23]],[[66]],[[67,68,69]],[[70,71]]],"id":"SO","properties":{"name":"Solothurn"}},{"type":"Polygon","arcs":[[72,73]],"id":"BS","properties":{"name":"Basel-Stadt"}},{"type":"MultiPolygon","arcs":[[[74,-70,75,-71,76,-73,77,78,-65]],[[79,80,-68]]],"id":"BL","properties":{"name":"Basel-Landschaft"}},{"type":"MultiPolygon","arcs":[[[-7,81,82,83]],[[84,85]],[[-5,86]]],"id":"SH","properties":{"name":"Schaffhausen"}},{"type":"Polygon","arcs":[[87,88,89,90,91,92]],"id":"AR","properties":{"name":"Appenzell Ausserrhoden"}},{"type":"MultiPolygon","arcs":[[[93,-92]],[[94,-90]],[[-88,95]]],"id":"AI","properties":{"name":"Appenzell Innerrhoden"}},{"type":"MultiPolygon","arcs":[[[-51,-45,-10,96,97,98,-52],[99],[-94,-91,-95,-89,-96,-93]],[[100]]],"id":"SG","properties":{"name":"St. Gallen"}},{"type":"Polygon","arcs":[[101,-37,-50,-99,102]],"id":"GR","properties":{"name":"Graubünden/Grigioni"}},{"type":"Polygon","arcs":[[-53,-31,-11,-66,-79,103,-3]],"id":"AG","properties":{"name":"Aargau"}},{"type":"MultiPolygon","arcs":[[[-9,104,-83,105,-85,106,-97],[-101]],[[107]]],"id":"TG","properties":{"name":"Thurgau"}},{"type":"Polygon","arcs":[[108,-38,-102,109],[110]],"id":"TI","properties":{"name":"Ticino"}},{"type":"MultiPolygon","arcs":[[[111,112,113,114,115,-61,116,-54,-18,117,118],[-62],[119],[120]],[[-26,-56,121,-20,-57]]],"id":"VD","properties":{"name":"Vaud"}},{"type":"Polygon","arcs":[[-118,-17,-39,-109,122]],"id":"VS","properties":{"name":"Valais/Wallis"}},{"type":"Polygon","arcs":[[-122,-55,-117,-60,-116,123,124,-21]],"id":"NE","properties":{"name":"Neuchâtel"}},{"type":"MultiPolygon","arcs":[[[-114,125]],[[126]],[[127]]],"id":"GE","properties":{"name":"Genève"}},{"type":"Polygon","arcs":[[-64,-29,-22,-125,128,-80,-75]],"id":"JU","properties":{"name":"Jura"}}]}},"arcs":[[[6286,7049],[-33,10],[-114,-55],[-60,-45],[-9,-15],[-13,10],[-2,-5],[0,-5],[0,-5],[0,-6],[-2,0],[-5,-5],[-4,0],[-5,0],[-2,0],[-2,0],[0,-5],[-20,-45],[-6,-10],[-3,-5],[-2,-25],[2,-10],[3,-15],[8,-10],[9,-10],[5,-15],[0,-15]],[[6031,6763],[-9,-5],[-9,0],[-13,-10],[-7,-10],[-20,5],[-8,5],[-3,25],[0,25],[-2,0],[-2,0],[-2,0],[-5,-5],[-2,0],[-2,0],[-2,5],[-3,0],[-4,-5],[-9,0],[-2,0],[-2,-5],[-2,0],[-5,0],[-2,5],[0,5],[-2,5],[-7,0],[-2,0],[-4,0],[-3,0],[-4,0],[-2,0],[-2,0],[-5,0],[-2,5],[-2,0],[0,10],[2,5],[0,5],[2,0],[2,5],[3,5],[0,5],[-5,5],[0,5],[-2,10],[-4,10],[-5,5],[0,5],[0,5],[0,5],[0,5],[-4,5],[-2,0],[0,5],[0,5],[0,5],[-3,5],[0,5],[-2,11],[-2,5],[-2,5],[-3,5],[-2,0],[-2,5],[-2,0],[0,5],[-5,5],[-4,0],[-2,0],[-2,-5],[-3,-5],[-2,0],[-2,-5],[-2,0],[-2,0],[-3,5],[-2,5],[0,5],[2,5],[-2,5],[2,5],[0,5],[-4,5],[0,5],[-2,5],[-2,0],[-3,0],[-2,0],[-2,0],[-4,5],[-3,0],[-2,-5],[-2,-5],[-2,0],[-2,0],[-3,0],[-2,10],[0,5],[0,5],[2,10],[0,5],[-2,0],[-2,0],[-2,0],[-5,0],[0,5],[-2,0],[0,-5],[-6,-5],[-3,5],[-26,10],[-7,5],[-9,10],[-2,-5],[-15,-5],[-7,5],[-9,5],[-6,-10],[-9,5],[-2,-20],[-2,0],[-7,5],[-7,0],[-2,0],[-2,5],[-2,0],[-3,-5],[-15,0],[-2,-20],[-5,5],[-4,-10],[-7,5],[3,-5],[-9,-10],[-9,0],[-2,0],[-16,-5],[-13,-15],[-9,5],[-8,5],[-7,-5],[2,10],[-7,5],[0,5],[-6,0],[-2,5],[-14,0],[-8,25],[-9,-5],[-2,10],[-5,0],[-4,0],[0,5],[-2,5],[-3,5],[-4,0],[-7,10],[-8,-5],[-18,5],[-16,-10],[0,5],[0,5],[-2,5],[-2,0],[-2,0],[0,5],[0,5],[-2,10],[0,15],[0,5],[-3,10],[0,5],[0,5],[-2,0],[-2,5],[0,6],[4,0],[0,5],[-2,5],[-2,5],[-2,5],[-2,15],[-3,5],[-2,0]],[[5411,7185],[-2,5],[-4,10],[-11,15],[0,5],[0,5],[0,5],[0,5],[2,0],[0,5],[2,0],[0,5],[-2,5],[0,5],[-2,5],[-3,0],[-2,5],[0,5],[-2,0],[2,5],[0,5],[0,5],[2,5],[3,10],[0,5],[-3,5],[0,5],[-11,10],[-2,5],[-2,5],[0,5],[-2,0],[0,5],[-2,21],[-3,10],[-4,10],[-2,10],[6,5],[11,-15],[16,15],[0,5],[24,5],[9,10],[6,15],[16,15],[-2,0],[6,25],[-2,0],[-2,5],[7,5],[0,20],[8,10],[0,5],[11,5],[0,10],[11,10],[7,16],[2,15],[-2,0],[9,15],[-2,0],[6,25],[-2,5],[-2,-10],[-5,5],[-2,-20],[-13,-5],[-4,-10],[-11,0],[-5,-10],[-4,5],[-9,5],[-29,-15],[-2,10],[-4,5],[0,10],[8,25],[-2,10],[0,5],[-2,0],[-2,5],[-5,5],[-4,5],[-7,10],[0,10],[-6,15],[6,25],[5,15],[-5,5],[3,20],[-7,21],[7,15],[-3,15],[-15,5],[2,15],[-2,5],[-7,5],[0,5],[-2,0],[2,5],[0,5],[0,5],[-2,0],[-4,5],[0,5],[2,10],[0,15],[0,15],[0,5],[2,5],[2,0],[0,10],[-2,0],[-2,-5],[0,5],[-7,10],[-4,-5],[-2,0],[-11,0],[-3,-5],[-6,30],[-5,0],[-8,-5],[-18,0],[-7,10],[-2,6],[9,0],[2,-6],[5,11],[15,10],[2,-5],[2,-5],[3,-5],[6,10],[7,10],[-7,10],[-2,15],[9,15],[-7,10],[5,10],[6,-10],[11,20],[0,10],[-2,10],[-2,5],[-4,10],[0,5],[-7,0],[-2,0],[-5,5],[-6,0],[-5,0],[-4,5],[0,5],[0,5],[4,10],[5,-5],[2,0],[6,0],[3,10],[2,10],[-2,15],[-5,5],[-2,31],[2,0],[0,5],[5,5],[6,0],[-9,35],[-6,0],[-2,15],[-14,0],[-8,30],[-7,5],[0,5],[4,5],[0,5],[-4,5],[4,0],[9,0],[7,5],[-2,20],[-3,30],[-19,0],[-5,26],[2,25],[-4,25],[-7,5],[9,10],[2,10],[-8,0],[-3,5],[3,10],[0,10],[6,10],[-2,10],[4,5],[5,0],[2,0],[2,5],[2,-5],[0,5],[-2,0],[5,0],[4,-5],[2,5],[5,-5],[2,5],[4,0],[7,15],[-2,5],[2,0],[2,46],[7,15],[6,5],[7,-10],[-2,-5],[6,-5],[3,5],[6,10],[-2,15],[2,5],[16,5],[2,10],[-7,25],[7,-10],[4,10],[-2,10],[4,0],[3,10],[6,10],[16,0],[-7,10],[4,10],[-4,10],[-2,10],[9,20],[0,15],[-3,0],[3,15],[17,21]],[[5444,8793],[2,-5],[3,0],[2,0],[2,0],[5,0],[2,0],[6,0],[3,0],[2,0],[2,0],[2,5],[2,0],[5,5],[4,0],[2,5],[3,0],[8,5],[5,5],[2,0],[2,0],[2,0],[3,0],[4,0],[4,0],[3,0],[2,0],[2,0],[2,0],[2,5],[3,0],[2,0],[2,5],[2,0],[2,5],[3,0],[0,5],[4,0],[0,5],[2,0],[3,0],[0,5],[2,0],[2,0],[2,0],[2,0],[3,0],[2,-5],[2,0],[2,0],[2,0],[3,0],[2,5],[2,0],[2,5],[2,5],[5,0],[0,5],[2,0],[4,0],[-2,10],[-11,25],[-4,-5],[-9,0],[-2,0],[0,-5],[-2,-5],[-3,0],[-2,0],[-2,0],[-2,0],[-5,0],[-2,0],[-2,-5],[-2,5],[-3,0],[-2,0],[0,-5],[-2,0],[-2,0],[-2,0],[-5,20],[-4,0],[-7,0],[2,15],[0,10],[-4,15],[-4,5],[-3,15],[3,10],[6,0],[7,0],[6,5],[5,5],[0,6],[4,0],[2,10],[-2,5],[9,0],[2,0],[7,15],[0,5],[2,5],[-2,5],[2,5],[2,0],[3,-5],[4,0],[2,0],[2,5],[3,0],[0,-5],[2,0],[2,5],[2,0],[2,0],[5,0],[2,0],[0,-5],[2,0],[0,5],[2,0],[3,0],[2,0],[2,5],[2,0],[7,5],[2,0],[2,0],[5,0],[4,5],[-2,0],[2,0],[0,20],[-2,10],[9,-5],[4,0],[4,0],[0,10],[-4,0],[0,5],[0,5],[2,-5],[2,5],[0,5],[3,0],[-3,5],[0,10],[3,5],[0,10],[2,0],[9,0],[11,-10],[9,0],[4,0],[4,-5],[5,0],[4,0],[2,0],[0,-15],[0,-10],[9,5],[2,-10],[7,5],[4,-5],[5,0],[4,0],[9,0],[2,-5],[2,-5],[0,-5],[5,-5],[0,-5],[2,-5],[0,-5],[2,-5],[11,0],[3,0],[2,-5],[0,-5],[0,-5],[2,0],[0,-5],[0,-5],[7,0],[-3,-5],[-6,0],[-9,-5],[0,-15],[0,-10],[-5,-11],[-6,-10],[4,-5],[0,-5]],[[5746,8948],[-13,-10],[-2,-5],[0,-10],[-13,-10],[-5,5],[-6,-5],[-16,-20],[-6,-5],[4,-20],[-7,0],[0,-10],[5,0],[0,-10],[9,-5],[-5,0],[-6,-15],[11,-5],[11,5],[2,-5],[0,-15],[-9,-5],[2,-5],[5,-5],[6,-15],[2,-6],[3,-10],[0,-10],[2,-5],[0,-5],[0,-5],[4,-10],[5,-10],[2,-5],[4,0],[2,5],[3,0],[2,5],[2,10],[4,10],[0,5],[3,5],[2,5],[2,5],[2,5],[0,5],[3,6],[0,5],[2,5],[0,5],[0,15],[0,5],[4,10],[0,5],[2,0],[3,5],[4,0],[2,0],[5,0],[2,0],[0,5],[2,5],[-2,0],[0,5],[-2,10],[-5,15],[0,5],[0,10],[2,5],[0,5],[3,5],[4,5],[2,5],[2,5],[5,5],[4,0],[5,5],[4,0],[4,5],[3,0],[2,5],[0,5],[-2,10],[0,10],[2,0],[0,10],[2,11]],[[5819,8984],[0,5],[2,0],[2,0],[3,5],[2,0],[0,5],[2,0],[2,5],[2,5],[3,5],[0,5],[2,0],[0,5],[0,5],[0,5],[0,5],[-2,0],[0,5],[-3,5],[-2,5],[0,5],[-2,0],[0,5],[-2,5],[0,5],[-2,5],[0,5],[-3,5],[-2,10],[0,5],[0,5],[0,5],[0,5],[0,15],[-2,5],[0,5],[0,5],[-2,0],[0,5],[0,5],[0,5],[0,5],[2,0],[0,5],[2,0],[7,5],[2,0],[0,6],[2,0],[0,5],[2,0],[0,5],[0,5],[0,5],[3,5],[2,5],[2,0],[2,5],[0,-5],[2,0],[3,0],[2,-5],[2,0],[2,-5],[2,-5],[0,-5],[3,0],[0,-5],[0,-5],[0,-6],[0,-5],[-3,-5],[-2,0],[0,-5],[-2,0],[-2,0],[-2,0],[-3,0],[-2,0],[-2,0],[-2,0],[-2,0],[0,-5],[-3,0],[0,-5],[0,-5],[3,-5],[2,0],[0,-5],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[2,0],[3,5],[2,0],[2,0],[2,0],[3,0],[2,5],[2,0],[2,0],[2,5],[3,5],[2,0],[0,5],[2,5],[0,5],[2,0],[0,5],[2,6],[0,5],[3,5],[0,5],[2,0],[0,5],[0,5],[0,5],[0,5],[-2,0],[-3,5],[-4,10],[-2,0],[-2,5],[-3,5],[-2,5],[-4,0],[-2,5],[-3,0],[-2,5],[-4,5],[-3,-5],[-4,5],[-2,5],[-2,0],[0,5],[-3,0],[0,5],[-2,5],[0,5],[-2,10]],[[5841,9300],[2,0],[2,15],[5,0],[0,5],[2,10],[0,5],[4,5],[3,0],[0,5],[2,0],[4,-5],[0,-5],[3,0],[0,-5],[2,0],[4,0],[7,5],[2,0],[2,5],[2,5],[0,5],[0,5],[0,10],[-2,15],[-2,11],[-2,5],[0,15],[2,0],[0,5],[2,0],[5,0],[4,5],[2,0],[2,0],[5,0],[6,0],[3,0],[4,5],[7,5],[2,0],[2,-5],[2,0],[2,-5],[5,-5],[4,0],[2,-5],[9,-15],[5,-5],[6,-6],[5,0]],[[5967,9385],[2,0],[2,-5],[2,5],[3,-5],[2,0],[2,0],[2,0]],[[5982,9380],[-4,-35],[0,-10],[4,-5],[16,-15],[2,-15],[2,-10],[-2,-5],[0,-10],[4,-20],[2,-15],[9,-10],[5,-15],[4,-15],[11,-5],[13,-5],[7,-11],[13,-15],[5,10],[6,0],[2,-5],[3,0],[2,-5],[6,-5],[5,0],[9,10],[13,-5],[4,0],[9,0],[11,5],[2,-15],[7,-5],[4,10],[20,10],[5,16],[4,0],[7,15],[8,5],[9,0],[5,-5],[2,0],[4,10],[9,5],[9,15],[0,15],[2,15],[4,20],[9,0],[14,0],[8,0],[5,0],[-2,-5],[0,-15],[2,-5],[-2,-25],[2,-15],[11,0],[11,-10],[15,-5],[9,-10],[0,-16],[2,-10],[2,-10],[-6,-15],[-2,-15],[2,0],[-7,-10],[-4,-15],[-5,5],[0,-10],[-4,5],[-2,-5],[-5,-5],[3,-10],[-5,-10],[7,-10],[-7,-10],[5,-10],[-11,-10],[0,-5],[-9,0],[-2,-30],[-5,-26],[2,-5],[0,-5],[-4,5],[-7,0],[-6,0],[-14,5],[0,21],[3,5],[-5,10],[-20,15],[-6,0],[-2,10],[-11,0],[-18,15],[-9,0],[-2,-5],[-13,15],[-5,5],[-2,10],[-4,-5],[0,-45],[-5,0],[-4,-5],[-5,0],[-2,-20],[7,-5],[4,-21],[5,-15],[6,0],[-6,-15],[2,-5],[2,-20],[2,0],[5,5],[6,0],[3,0],[4,0],[9,0],[2,0],[4,0],[9,-5],[2,0],[3,0],[6,-5],[7,-5],[4,0],[0,-5],[2,0],[3,0],[2,0],[4,-5],[5,0],[19,-10],[9,-5],[18,-10],[0,-5],[-9,5],[-2,-10],[11,-5],[-2,-25],[6,-5],[-2,-10],[7,-5],[15,-5],[2,10],[5,-5],[0,5],[4,0],[0,5],[18,-10],[0,10],[2,5],[18,-15],[-3,-10],[3,0],[0,-20],[13,5],[-2,-16],[15,5],[0,-15],[-13,0],[-7,-5],[-6,-15],[-22,5],[2,-10],[-5,0],[5,-15],[2,-5],[-2,0],[2,-10],[2,-5],[0,-5],[5,-25],[4,0],[11,-30],[0,-20],[18,-10],[11,5],[4,-5],[13,0],[14,-5],[6,0],[7,-5],[6,-5],[7,-5],[0,5],[7,5],[6,-5],[5,0],[4,-5],[13,-5],[7,-10],[-4,-16],[-5,-10],[5,-5],[-3,-25],[5,-10],[-2,-30],[-5,-10],[-4,-10],[0,-30],[0,-5],[0,-5],[0,-5],[0,-20],[9,0],[0,-15],[-14,-11],[-13,-5],[0,-25],[-9,-10],[7,-5],[0,-20],[15,-5],[0,-5],[3,-10],[2,-5],[-2,0],[0,-5],[2,0],[6,-5],[0,-10],[0,-5],[0,-5],[5,-5],[4,-20],[9,-5],[11,-25],[-13,-20],[9,-26],[8,-10],[16,-5],[9,-5],[8,0],[3,0],[13,5],[0,-10],[-5,-10],[-8,-5],[-11,10],[-7,0],[-2,-5],[-2,5],[-9,-5],[-2,10],[-3,0],[-6,-15],[0,-5],[2,0],[9,-10],[0,-5],[-2,-5],[0,-5],[-3,-10],[9,-20],[-4,-10],[-2,-10],[2,-10],[-18,-40],[-2,-15],[2,0],[2,-6],[5,0],[4,6],[2,0],[3,-6],[2,0],[2,0],[4,-5],[5,0],[4,0],[5,-5],[4,-5],[2,-5],[2,0],[3,-5],[2,-5],[2,-5],[4,-10],[3,-5],[4,0],[5,-5],[4,-5],[9,-10],[2,-5],[2,-5],[0,-5],[-2,-5],[-4,-10],[-3,-5],[3,-5],[2,-5],[4,-10]],[[6586,7828],[2,-5],[5,0],[2,0],[0,-5],[2,-5],[2,0],[3,-5],[2,-5],[0,-15],[2,-5],[4,-10],[0,-10],[5,-11],[2,-10],[2,-5],[2,-5],[3,-5],[-3,-5],[0,-5],[3,0],[2,0],[2,0],[2,0],[5,0],[2,0],[6,-10],[5,0],[4,-20],[-2,-40],[13,-10],[-4,-30],[0,-25],[18,-41],[-23,-60],[-11,-5],[-6,0],[-7,0],[-15,-5],[-9,-30],[-2,-5],[0,-5],[-7,-15],[0,-10],[-4,0],[-2,-5],[-3,0],[-2,0],[-2,5],[-2,-5],[-2,0],[0,-5],[-5,0],[-2,-5],[-2,5],[-2,-5],[-3,0],[-2,0],[0,-5],[16,-20],[2,-10],[-2,-11],[6,0],[5,11],[4,0],[0,-16],[0,-5],[0,-10],[-2,-5],[-5,-5],[-2,-5],[-2,0],[-2,0],[-2,-5],[6,-15],[-2,-10],[-7,0],[3,-5],[-7,-10],[-4,-15],[-5,-5],[-2,-5],[-9,5],[-2,-5],[-35,-20],[-9,-5],[0,15],[-7,-10],[-13,0],[-4,-5],[-27,-5],[-26,-5],[2,-20],[-9,-5],[0,-10],[-7,-5],[-2,5],[-11,-10],[-2,5],[-2,0],[-2,0],[-3,5],[-2,0],[0,-5],[-2,5],[-2,0],[0,5],[-2,5],[0,5],[0,5],[-3,0],[0,10],[-15,-10],[0,-10],[-16,0],[-4,10],[-7,5],[-6,0],[-2,0],[-3,0],[-4,5],[-37,-15],[-14,-5],[-2,-10],[-6,-10],[0,-5],[-5,0],[-2,-16],[26,-90]],[[4119,7275],[0,-5],[7,-5],[-2,-5],[2,0],[-2,-5],[0,-5],[4,0],[2,-5],[-4,-5],[2,-15],[-2,-5],[2,0],[-2,-5],[-4,-5],[-3,-5],[5,-5],[2,0],[-2,-5],[-2,-5],[0,-5],[0,-5],[0,-5],[2,-5],[2,0],[0,-5],[0,-5],[4,0],[0,-5],[3,-5],[2,-5],[2,0],[2,-11],[5,-5],[6,-15]],[[4150,7114],[-4,-5],[0,-5],[0,-10],[-2,0],[2,-5],[0,-10],[0,-5],[0,-10],[7,-5],[2,-5],[4,-10],[2,-10],[3,0],[2,-5],[2,0],[0,-5],[0,-5],[0,-5],[2,-5],[2,-10],[0,-5],[3,-5],[2,-5],[2,-5],[2,-5],[2,-5],[-2,-5],[2,-5],[3,-5],[2,-5],[2,-5],[7,-5],[-3,-6],[3,-15],[0,-5],[-3,-5],[3,-5],[4,0],[2,0],[0,-10],[5,0],[0,-5],[0,-5],[4,0],[4,-10],[14,-10],[2,-5],[0,-5],[4,-10],[2,-5],[3,-5],[-3,-5],[3,-5],[0,-5],[4,-5],[2,-5],[-2,-5],[-4,-10],[-3,0],[-2,-10],[-2,-5],[-2,-5],[-2,-20],[2,-10],[0,-16],[2,-10],[0,-10],[2,-10],[5,-10],[2,-10],[4,0],[9,-15],[7,-15],[0,-10],[0,-20],[-5,-5],[5,-10],[-9,0],[0,-15],[0,-5],[-7,0],[-22,-15],[2,-10],[-6,-5],[-5,-5],[-2,-5],[0,-10],[0,-6],[7,0],[-5,-25],[14,-10],[-5,-25],[0,-10],[5,5],[2,-10],[-5,-20],[11,-10],[3,-10],[-5,-5],[5,-10],[2,-5],[2,-5],[-2,-15],[-5,-20],[5,0],[-5,-10],[-4,0],[4,-5],[-2,-26],[-4,-5],[2,-10],[-9,-25],[-4,-10],[0,-5],[2,0],[2,0],[2,-5],[-2,-5],[-2,-5],[-7,-10],[-2,-10],[-4,-15],[4,-5],[-2,-10],[2,-5],[0,-5],[2,-5],[-2,0],[7,-5],[2,-5],[7,-20],[4,0],[7,-5],[4,5],[5,-20],[-3,-11],[5,-10],[15,-15],[5,-10],[-3,-15],[5,-15],[11,-20],[0,-5],[-5,-15],[-2,-5],[5,-20],[6,-15],[7,5],[6,0],[5,5],[9,5],[4,0],[9,10],[6,0],[5,-5],[7,-20],[4,-5],[7,-5],[15,5],[2,0],[9,0],[7,5],[8,0],[9,-15],[-4,-5],[-5,-25],[-8,-16],[4,-35],[4,-30],[-17,-20],[2,-35],[2,-5],[-13,-20],[-9,-5],[-9,-10],[0,-56],[-6,-15],[-7,0],[-9,-5],[-2,-25],[-13,-35],[-7,-10],[-9,0],[-22,10],[-6,-5],[-5,-5],[-4,-5],[-2,0],[-5,-5],[-4,-5],[-11,-5],[0,-5],[-7,0],[-4,-5],[-2,-5],[-3,0],[-2,-5],[0,-5],[-2,0],[-2,-10],[-2,-10],[0,-5],[0,-5],[-3,0],[-2,-5],[0,-5],[-2,0],[0,-5],[0,-6],[2,0],[11,-5],[2,-5],[0,-5],[3,0],[2,0],[4,0],[2,0],[3,0],[4,-15],[2,0],[0,-5],[0,-15],[-6,-15],[0,-5],[4,0],[-9,-5],[-6,-15],[-5,-20],[0,-10],[-6,-5],[-5,-10],[-20,-10],[-6,-20],[4,-30],[0,-11],[-2,-10],[15,-10],[3,-15],[11,-10],[-7,-25],[2,-20],[-2,-20],[7,-20],[0,-15],[15,-35],[42,-31],[57,-55],[55,-75],[9,-25],[2,-10],[5,-10],[0,-5],[-2,-5],[2,-11],[4,-5],[2,-5],[3,0],[4,-5],[2,0],[2,-5],[3,-5],[2,0],[2,0],[2,-5],[2,0],[3,-5],[2,0],[0,-5],[0,-5],[2,-5],[2,-5],[7,-15],[13,-5],[9,-10],[20,20],[11,15],[15,10],[36,25],[22,5],[17,-10],[18,-5],[4,5]],[[4613,4873],[5,0],[8,0],[5,0],[6,-10],[20,15],[14,-10],[8,0],[7,0],[18,5],[2,-20],[13,-25],[7,-5],[4,-20],[7,-5],[20,0],[11,-10],[6,-5],[53,-75],[29,20],[20,35],[8,-10],[40,30],[13,-10],[27,5],[9,-15],[15,-15],[7,-10],[26,5],[11,40],[44,-30],[11,-20],[11,-30],[16,5],[15,-10],[18,25],[11,5],[4,15],[9,0],[31,40],[13,20],[24,35],[60,10],[9,5],[0,10],[11,10]],[[5319,4873],[4,0],[13,-10],[7,-15],[15,-25],[11,0],[7,-30]],[[5376,4793],[2,-35],[11,10],[16,15],[13,20],[9,0],[6,-5],[5,-10],[8,0],[0,5],[12,0],[11,0],[13,-10],[9,0],[0,-5],[-3,-10],[5,-10],[2,0]],[[5495,4758],[-7,-40],[-4,-15],[-7,5],[-4,-10],[7,-16],[2,-15],[-5,-20],[0,-30],[20,-35],[-6,-15],[2,-45],[-2,-15],[4,-15],[11,-6],[0,-15],[-4,-20],[6,-25],[0,-5],[-4,-20],[-2,-25],[-14,-10],[-11,-5],[-17,5],[-11,-5],[-18,5],[-4,0],[-7,0],[0,10],[-7,10],[-8,-5],[-18,15],[-2,-15],[2,-10],[-7,-20],[5,-20],[-2,-25],[0,-5],[6,-5],[2,-21],[14,-10],[4,-70]],[[5409,4195],[-24,5],[-9,-40],[-9,-10],[-24,-50],[-13,-5],[-3,0],[-8,-21],[-3,-20],[0,-25],[7,-5],[0,-25],[-7,-25],[-6,-25],[-7,-15],[-2,-15],[7,-30],[-7,-31],[9,-15],[-9,-25],[-20,-30],[-4,-15],[-16,-25],[-13,-15],[-44,-10],[-9,-25],[0,-10],[-22,-31],[-20,-5],[-15,-10],[-9,-25],[-9,-5],[-11,-5],[-11,-5],[-11,-10],[-13,-20],[-13,0],[-25,-10],[-8,0],[-14,0],[-11,0],[-15,-5],[-18,-5],[-13,-5],[-11,0],[-18,-5],[-15,-10],[-9,0],[-4,10],[-9,5],[-4,15],[4,15],[-2,5],[-11,0],[-13,5],[-9,-5],[-9,0],[-11,5],[-35,20],[-18,5],[-9,20],[-9,10],[-8,20],[-20,5],[-9,0],[-11,5],[-5,11],[-19,5],[-14,10],[-6,10],[-11,-10],[-18,-5],[-4,-10],[-16,25],[-24,5],[-18,15],[-2,10],[-9,0],[-11,0],[-20,5],[-33,-25],[-8,0],[-9,-10],[0,-10],[-16,-31],[-11,0],[-2,0],[-4,-5],[-5,0],[-13,-10],[-4,-20],[-11,-10],[0,-10],[4,-10],[4,-15],[-2,-5],[7,-10],[0,-10],[9,-15],[-7,-15],[2,-20],[-6,-20],[-7,0],[-24,-26],[-7,6],[-20,-6],[-15,-25],[-4,-25],[-11,-5],[-9,-10],[2,-10],[-5,-5],[-17,-5],[-9,-20],[-11,0],[-2,-5],[-9,-5],[-7,-10],[-6,-5],[-9,5],[-9,-10],[-22,-10],[-18,-5],[-13,0],[-28,0],[-7,5],[-9,-5],[-35,-40],[-7,-16],[-26,-20],[-7,-5],[-6,-5],[-18,-15],[-11,-20],[-11,-10],[-7,-15],[-11,-10],[-4,-20],[-13,-5],[-9,-10],[-5,0],[-11,-20],[-11,-5],[-2,-10],[-24,-25],[-5,-11],[-13,-10],[-9,-10],[-17,-5],[-9,-5],[-9,-25],[-9,-5],[-6,0],[-9,10],[-4,10],[-11,10],[-12,25],[-6,0],[-27,21],[-33,20],[-50,35],[-31,25],[-5,-10],[-2,-15],[-4,-10],[-9,0],[-15,-5],[-3,-10],[0,-15],[3,-15],[-9,-26],[-7,-5],[-7,0],[-4,-10],[4,-20],[0,-10],[-6,-5],[-7,-15],[-17,15],[-7,15],[-13,0],[-11,-10],[-13,-5],[-7,-5],[-2,-5],[-5,10],[-11,0],[-13,-10],[-20,0],[-13,-10],[-2,-15],[-9,-35],[26,-25],[14,-5],[17,-25],[-31,-26],[-6,-35],[-27,-15],[-42,10],[-11,-30],[-6,0],[-11,10],[-9,-10],[-7,5],[-4,5],[2,15],[-4,35],[-11,15],[-11,-5],[-2,-15],[-7,-15],[-13,0],[-5,-10],[-6,15],[0,5],[-5,10],[-31,5],[-11,15],[-8,-5],[-14,-20],[-24,-5],[-4,-5],[-25,-15],[-4,-10],[-4,15],[-16,-20],[-11,-20],[-4,0],[-9,-20],[-2,-5],[-7,5],[-9,-20],[-13,-15],[-11,-5],[-9,-20],[-11,-15],[-13,5],[-24,-20],[-29,-16],[-20,0],[-9,21],[-6,20],[0,10],[4,10],[-4,10],[2,5],[2,5],[5,15],[2,35],[-7,25],[-24,-40],[-9,-5],[-9,5],[-15,-10],[-49,-35],[0,-15],[0,-35],[-4,-21],[4,-30],[-4,-5],[-9,-20],[-6,-10],[-7,-5],[-7,-5],[-6,-5],[-22,-5],[-29,10]],[[2788,2567],[4,101],[-8,40],[2,0],[2,5],[4,5],[3,0],[2,0],[2,0],[2,0],[0,5],[2,5],[5,5],[-5,0],[-4,15],[-15,-15],[-7,0],[-13,40],[0,5],[-2,5],[-5,10],[0,5],[0,10],[0,5],[2,0],[0,5],[-4,0],[-9,0],[-17,0],[2,25],[6,26],[3,10],[4,10],[4,20],[5,15],[6,15],[-2,25],[7,40],[-7,25],[-9,10],[-6,10],[-2,21],[-14,25],[5,35],[15,0],[7,-10],[17,5],[22,10],[5,10],[2,10],[0,20],[0,10],[13,10],[-11,15],[7,15],[-2,5],[4,25],[-9,31],[0,10],[-4,15],[-2,50],[6,-5],[2,0],[5,5],[13,5],[0,25],[-7,10],[3,0],[2,0],[2,0],[2,5],[2,0],[3,0],[2,0],[2,5],[0,5],[2,5],[3,5],[2,0],[0,5],[0,5],[0,5],[0,5],[0,5],[2,0],[2,5],[2,5],[-2,0],[0,5],[0,6],[2,0],[0,5],[3,5],[0,5],[-3,5],[0,5],[0,5],[3,5],[2,10],[0,20],[-2,0],[0,5],[0,5],[0,10],[0,5],[-3,5],[0,5],[0,5],[0,5],[-2,0],[0,5],[-2,0],[0,5],[0,5],[2,10],[0,5],[0,5],[-2,5],[-2,5],[-2,5],[-3,5],[-6,15],[-5,5],[0,41]],[[2823,3698],[7,0],[13,10],[11,15],[9,5],[11,15],[18,55],[11,20],[8,15],[3,5],[6,5],[2,10],[9,-15],[9,-5],[5,0],[4,-5],[2,0],[2,0],[0,-5],[3,0],[4,0],[20,10],[11,40],[17,16],[-13,40],[7,80],[0,15],[-13,15],[2,76],[20,0],[8,10],[9,15],[-4,20],[-16,45],[3,0],[50,0],[11,-20],[-2,-10],[7,-10],[6,0],[3,-10],[-3,-15],[3,-15],[2,0],[4,25],[9,15],[7,10],[22,35],[-18,-5],[4,15],[3,20],[0,10],[2,15],[0,10],[9,31],[0,5],[-7,20],[11,20],[-4,20],[9,10],[-7,15],[-18,0],[-9,10],[-4,20],[-7,-5],[-33,5],[0,5],[0,5],[3,5],[2,5],[2,0],[0,10],[2,0],[0,5],[0,5],[2,5],[0,5],[-2,10],[0,6],[-2,5],[-4,0],[-3,0],[-2,0],[-4,5],[-7,0],[-2,0],[-4,0],[-7,5],[-2,0],[-2,0],[-3,5],[-4,0],[-2,5],[-3,0],[-2,0],[-4,0],[-2,0],[-5,0],[-2,0],[-2,0],[-9,0],[-7,5],[-2,0],[-2,0],[0,-5],[-2,0],[-5,5],[-2,0],[0,5],[-2,0],[0,5],[-4,5],[-3,5],[-2,0],[-4,5],[0,5],[0,5],[-2,10],[-3,10],[0,5],[0,5],[0,10],[0,20],[16,50],[2,15],[-2,5],[0,11],[0,5],[0,25],[0,5],[-5,5],[0,15],[-2,0],[-2,0],[-2,0],[2,5],[-2,5],[-7,0],[0,5],[-2,0],[0,5],[-2,5],[0,5],[0,5],[-2,5],[-3,0],[-2,0],[0,5],[5,5],[4,5],[2,5],[2,0],[0,5],[3,5],[2,0],[2,5],[4,5],[-2,0],[0,5],[2,5],[3,0],[2,5],[2,0],[0,5],[0,5],[-2,0],[-2,0],[0,5],[0,5],[0,5],[2,5],[0,5],[-2,5],[0,5],[0,6],[0,5],[2,5],[4,5],[2,0],[0,5],[0,5],[3,0],[0,5],[0,5],[2,5],[0,5],[2,5],[0,5],[0,5],[0,5],[2,5],[2,0],[0,10],[0,5],[3,0],[2,0],[2,5],[4,5],[0,5],[3,0],[2,5],[2,0],[2,5],[2,0],[0,5],[-4,5],[0,5],[4,5],[0,5],[0,10],[0,5],[-2,5],[0,5],[0,5],[2,0],[0,5],[5,5],[11,5],[2,0],[0,5],[5,10],[0,11],[-3,0],[0,5],[-15,30],[-33,30],[-5,15],[-8,10],[22,20],[0,15],[4,0],[-2,10],[2,0],[4,10],[5,-5],[-2,-5],[6,0],[9,0],[16,-15],[-7,-10],[-5,5],[-6,-10],[6,-15],[12,-5],[6,5],[2,-10],[5,5],[0,-5],[2,0],[0,5],[2,0],[2,0],[3,0],[2,5],[2,0],[2,0],[2,5],[3,0],[2,5],[2,0],[4,0],[3,0],[2,0],[0,5],[0,5],[2,5],[2,0],[0,5],[0,5],[2,5],[3,0],[4,5],[2,5],[0,5],[0,5],[-2,10],[0,5],[0,10],[0,5],[-2,0],[-2,5],[-3,0],[-2,5],[-2,5],[0,6],[-2,10],[0,5],[2,5],[0,10],[0,5],[0,5],[0,15],[2,5],[-2,5],[-2,5],[-7,5],[-17,10],[-7,0],[-7,5],[-2,0],[-2,0],[-2,5],[-5,0],[-4,5],[-2,0],[-3,0],[-2,0],[-4,0],[-2,0],[-3,0],[-4,-5],[-9,0],[-2,0],[-11,0],[-4,0],[-3,0],[-11,0],[-4,0],[-2,5],[-5,0],[-2,0],[-11,0],[-2,0],[-2,-5],[-2,0],[-3,0],[-4,-10],[-2,-5],[-5,0],[-2,0],[-4,0],[-3,5],[-4,0],[-2,5],[-5,5],[-2,0],[-2,0],[-2,0],[-2,0],[-3,5],[-2,0],[-6,10],[-3,5],[-2,0],[-2,5],[-4,0],[-3,0],[-2,0],[-4,5],[-2,0],[-3,0],[-2,0],[-4,0],[-2,0],[-5,5],[-2,0],[-2,0],[-2,-10],[-14,0],[-4,5],[-5,0],[-6,25],[-11,-5],[-5,0],[-4,-10],[-9,-15],[-11,20],[-9,5],[-17,-5],[-11,-15],[-16,5],[9,10],[2,5],[14,5],[19,25],[-4,20],[0,11],[2,5],[0,5],[0,10],[-2,5],[0,5],[-2,5],[2,0],[0,15],[11,0],[0,10],[4,5],[-2,15],[-4,0],[-2,10],[-14,20],[3,5],[-3,10],[16,15],[0,10],[0,5],[0,15],[-5,0],[0,10],[3,10],[0,5],[2,5],[2,6],[0,5],[-4,5],[-5,15],[-15,-5],[-7,5],[-4,5],[0,10],[4,0],[5,0],[17,0],[2,20],[14,-5],[2,20],[4,0],[0,10],[13,10],[-4,5],[13,15],[7,10],[4,10],[5,5],[4,5],[-2,10],[-13,15],[0,5],[-9,10],[-5,0],[3,5],[6,16],[-2,10],[-7,-5],[-2,20],[-11,25],[-4,-10],[-5,10],[-6,-15],[-11,10],[-11,-20],[-9,0],[2,-10],[-22,-15],[-18,-16],[-17,-15],[-22,-15],[-16,-10],[-15,-5],[-20,-10],[-97,-35],[-4,5],[-5,0],[-70,0],[-14,0]],[[2415,5823],[-26,15]],[[2389,5838],[-33,131],[2,0],[2,10],[5,10],[2,0],[4,15],[0,5],[5,15],[0,5],[0,10],[-2,20],[0,25],[0,10],[2,5],[6,15],[5,11],[26,30],[7,0],[2,5],[18,0],[6,5],[7,10],[2,5],[2,0],[3,5],[2,0],[2,5],[2,0],[5,5],[22,30],[4,10],[-4,10],[0,5],[-5,5],[-2,5],[-4,5],[0,5],[0,5],[-3,0],[-2,0],[0,10],[2,5],[0,10],[0,5],[-2,5],[-2,0],[-2,5],[-2,5],[22,31],[0,20],[-7,10],[-18,40],[-28,20],[-13,0],[-18,25],[-18,20],[-26,-25],[-13,40],[19,41],[18,20],[-4,15],[-18,0],[-9,-15],[-33,-5],[-7,5],[-24,-25],[-28,-11],[-27,-10],[-44,-10],[-9,-5],[-17,-15],[-3,5],[-6,-5],[-13,20],[-7,-20],[-20,-20],[-35,-35],[-35,-30],[-42,-35],[8,85],[23,30],[11,81],[6,35],[-62,176]],[[1994,6773],[5,10],[20,30],[11,-65],[4,-10],[2,-11],[-2,-5],[2,-10],[5,-5],[4,-15],[20,20],[29,15],[6,11],[16,20],[37,40],[11,20],[5,25],[2,25],[9,0],[15,10],[9,-15],[-7,-5],[7,-10],[11,5],[20,-5],[15,-30],[7,-5],[9,10],[6,10],[7,30],[11,15],[0,10],[2,20],[44,10],[16,5],[6,10],[9,21],[9,30],[2,10],[4,15],[16,45],[0,5],[6,20],[11,5],[16,15],[-7,30],[3,21],[2,5],[13,10],[9,0],[24,20],[2,-25],[11,10],[5,-5],[4,-10],[-7,-10],[5,-16],[17,0],[5,16],[9,15],[4,0],[5,0],[6,-5],[5,0],[4,0],[13,10],[22,5],[24,-10],[3,10],[11,0],[11,5],[4,5],[7,5],[-7,15],[-9,15],[7,5],[0,5],[-9,0],[-11,0],[0,20],[7,0],[2,5],[4,5],[0,5],[-4,0],[-2,10],[6,20],[5,5],[22,10],[17,15],[-2,31],[0,10],[5,0],[-3,15],[-8,0],[0,10],[8,15],[-13,10],[2,5],[11,5],[11,-5],[45,10],[26,0],[7,-5],[-7,-15],[9,-15],[6,5],[5,0],[20,-10],[17,0],[25,-15],[33,5],[0,5],[8,0],[7,0],[7,-5],[13,-10],[13,0],[13,5],[0,5],[14,0],[22,10],[11,0],[22,10],[13,30],[20,20],[11,25],[24,0],[4,0],[11,5],[22,15],[22,25],[7,5],[5,-5],[22,-5],[4,0],[31,0],[13,0],[2,-15],[16,-5],[2,-10],[11,5],[9,-5],[22,5],[4,5],[40,-10],[31,0],[4,0],[5,-10],[17,-15],[9,0],[15,5],[7,0],[2,5],[20,15],[27,35],[17,10],[42,20],[20,11]],[[3531,7557],[-22,-31],[0,-10],[-2,-40],[-18,-20],[2,-15],[-4,-10],[-13,-15],[-25,0],[-13,-5],[-44,-25],[0,-5],[-18,-15],[-4,0],[-15,-31],[-14,-40],[-9,-25],[-4,0],[-4,0],[-14,-5],[-13,-5],[-13,0],[-13,0],[-11,-15],[-18,-20],[-18,-5],[-6,-15],[2,-15],[2,-20],[7,-10],[-13,-15],[-7,5],[-7,-5],[-15,-26],[-9,-5],[-35,-25],[-11,-10],[-31,-35],[-4,0],[-5,0],[-2,0],[-2,5],[-5,0],[-33,-15],[11,-55],[5,0],[15,-76],[27,10],[4,-15],[15,-10],[7,-10],[7,-15],[24,-90],[-4,0],[-11,0],[-7,-5],[0,-5],[2,-15],[0,-5],[5,0],[4,0],[2,0],[2,0],[0,5],[3,0],[4,0],[2,-5],[2,5],[3,0],[8,10],[3,0],[2,0],[4,0],[5,0],[11,-5],[2,0],[4,5],[5,5],[2,5],[0,10],[2,10],[2,10],[2,0],[3,5],[2,0],[2,0],[5,5],[4,0],[4,5],[5,5],[4,5],[0,5],[0,5],[-2,15],[0,10],[2,5],[5,5],[4,0],[2,0],[2,0],[5,-15],[4,-5],[2,0],[7,0],[4,10],[5,5],[0,5],[-2,5],[-3,15],[3,0],[0,5],[2,0],[2,-5],[2,0],[5,0],[6,0],[5,0],[11,5],[13,5],[11,0],[4,-15],[-8,-10],[4,-15],[-9,-10],[7,-10],[2,0],[4,-10],[5,0],[4,-25],[11,10],[18,-15],[4,5],[2,-10],[-15,-20],[7,-15],[-11,-10],[-7,-5],[-7,-11],[-4,-15],[-2,-5],[-5,0],[-4,0],[-7,-10],[-9,-5],[-11,15],[-6,-5],[-2,10],[-9,5],[-11,0],[-22,-30],[2,-20],[-2,-10],[-7,0],[-6,0],[-7,-5],[-9,-10],[-2,-10],[-9,-15],[9,-25],[9,5],[2,-15],[9,10],[2,-10],[-2,-10],[-5,5],[0,-10],[16,-5],[0,-5],[-7,-5],[-4,5],[-11,0],[-2,0],[-3,0],[-13,-10],[-11,0],[-15,-10],[-9,-10],[-5,0],[-19,20],[-11,-10],[-3,10],[0,5],[-4,15],[-9,-15],[-4,0],[-5,5],[-9,-5],[-2,-5],[-6,5],[-3,-10],[5,-21],[-7,-5],[11,-20],[5,-20],[6,-10],[0,-5],[7,-30],[0,-15],[9,0],[6,-5],[3,-10],[13,0],[11,5],[9,5],[8,5],[7,5],[4,5],[14,10],[6,-10],[5,0],[17,10],[9,-30],[-4,0],[2,-10],[-4,-5],[0,-10],[-3,0],[5,-40],[4,-15],[7,-11],[2,-10],[4,0],[25,10],[0,-5],[4,0],[2,11],[2,0],[0,5],[3,0],[2,0],[4,5],[2,0],[5,0],[2,0],[4,0],[0,5],[5,10],[0,5],[2,5],[5,5],[2,5],[2,5],[0,5],[-2,5],[-2,0],[-5,10],[-9,25],[-11,35],[2,5],[-4,20],[31,20],[11,5],[26,20],[3,6],[11,15],[2,5],[2,0],[7,5],[2,0],[4,5],[5,5],[2,0],[2,5],[2,5],[2,5],[3,10],[2,5],[0,10],[0,5],[2,5],[2,5],[0,5],[3,5],[0,5],[2,0],[0,5],[4,5],[7,5],[0,5],[0,5],[0,5],[2,5],[0,5],[2,0],[2,5],[5,5],[2,0],[0,10],[-7,15],[-2,0],[-2,0],[-4,26],[-5,0],[0,5],[7,5],[9,0],[0,5],[11,5],[4,5],[2,-10],[9,5],[4,5],[9,-20],[9,10],[7,15],[15,15],[13,0],[-2,-10],[2,0],[0,-10],[3,0],[6,-5],[13,5],[11,-20],[3,0],[2,-5],[-2,-6],[2,0],[-2,-10],[4,0],[4,-35],[3,-5],[4,15],[2,0],[9,10],[11,-5],[15,5],[23,10],[2,5],[6,-10],[7,-5],[15,0],[5,5],[2,-5],[7,0],[2,-5],[2,5],[7,5],[2,-10],[9,-15],[2,5],[2,0],[7,0],[2,0],[0,5],[2,0],[2,5],[-2,20],[-2,0],[0,5],[4,21],[-2,5],[2,0],[16,30],[2,0],[9,5],[2,-5],[15,0],[0,20],[0,10],[7,10],[4,35],[-4,0],[0,5],[-7,0],[-2,0],[-2,5],[4,15],[3,5],[2,10],[-9,10],[2,10],[-6,-5],[0,10],[-7,0],[0,10],[-4,0],[-3,6],[-2,10],[-33,5],[9,25],[-5,15],[-2,5],[-4,20],[2,15],[2,5],[-17,15],[-3,10],[11,10],[-8,20],[-11,-15],[-3,10],[-6,-10],[-5,5],[-6,-10],[-7,20],[-4,-5],[-5,0],[-6,25],[-2,0],[-9,20],[-5,0],[0,11],[-6,-6],[-3,11],[-2,10],[-4,-5],[-7,15],[-4,0],[-2,5],[2,25],[2,15],[-9,50],[0,10],[-9,10],[-2,5],[-11,15],[-9,20],[60,20],[13,6],[31,5],[48,0],[7,5],[9,10],[9,10],[15,5],[5,5],[4,-5],[13,5],[18,25],[9,-20],[22,-20],[4,5],[11,-36],[2,6],[5,-11],[-2,-5],[6,-5],[-4,-5],[6,-10],[7,15],[22,-35],[0,-20],[18,-35],[11,5],[13,-15],[13,10],[16,-5],[11,25],[6,20],[20,0],[4,-30],[20,-25],[2,5],[12,15],[4,5],[11,25],[4,5],[3,5],[2,0],[2,0],[2,0],[2,0],[0,-5],[0,-5],[0,-5],[3,-5],[6,-5],[5,-5],[2,0],[2,0],[2,0],[5,0],[2,0],[2,0],[7,10],[4,5],[2,0],[0,5],[2,0]],[[3800,6758],[-5,-5],[0,-10],[-8,-26],[4,-5],[13,5],[18,-10],[9,31],[4,-6],[5,11],[4,5],[0,5],[-11,0],[-7,10],[-2,5],[-7,0],[3,10],[-9,-5],[0,-5],[-5,-5],[-4,-10],[-2,5]],[[2779,5577],[5,-20],[11,15],[2,-5],[9,10],[4,10],[9,-5],[0,20],[0,25],[-11,10],[-5,-5],[3,-10],[-27,-20],[5,-5],[-3,-5],[-2,5],[-2,-5],[2,-15]],[[2484,5416],[9,5],[0,10],[4,5],[-4,10],[8,5]],[[2501,5451],[5,-5],[4,5],[5,-15],[13,5],[2,-5],[-20,-20],[-9,-20],[-15,5],[-2,5],[0,10]],[[2601,5522],[0,-26],[6,-20],[-2,0],[-7,0],[-2,-5],[-13,-10],[-4,-10],[-5,-5],[-2,-10],[-7,5],[-2,5],[-2,15],[2,5],[-13,25],[2,10],[2,16],[22,15],[5,0],[-2,-5],[2,-5],[6,10],[11,0],[3,-10]],[[3531,7557],[-9,5],[-13,-5],[-35,-5],[-9,10],[13,50],[0,5],[35,35],[0,10],[5,10]],[[3518,7672],[11,-5],[0,-10],[6,0],[5,-5],[24,-60],[-4,-15],[-5,-10],[-15,-15],[-9,5]],[[4150,7114],[3,10],[4,0],[2,-10],[24,-10],[31,25],[58,26],[2,5],[33,5],[15,-20],[11,-11],[25,-10],[15,26],[13,10],[13,30],[5,5],[6,10],[9,10],[-4,10],[0,5],[0,5],[-2,0],[0,5],[-3,5],[-2,0],[-2,0],[0,5],[0,5],[0,5],[-2,5],[-2,5],[-3,5],[0,10],[-4,5],[0,5],[0,5],[-2,10],[4,0],[0,10],[11,10],[33,-5],[2,0],[3,-10],[4,5],[27,5],[17,31],[7,-11],[13,-25],[0,-10],[2,-10],[0,-10],[7,-10],[4,-10],[9,-15],[4,-10],[0,-5],[0,-5],[3,-5],[0,-5],[-3,-5],[0,-10],[0,-5],[0,-10],[0,-10],[-2,-15],[0,-5],[11,0],[5,-10],[9,0],[6,-5],[2,5],[44,15],[3,-5],[26,15],[-11,20],[-2,5],[0,10],[-2,10],[6,0],[0,5],[9,0],[7,-10],[2,0],[4,0],[9,0],[2,10],[7,5],[4,5],[-2,5],[9,5],[13,10],[24,-15],[16,-40],[0,-15],[6,-20],[25,-5],[11,-15],[11,10],[4,15],[9,5],[15,0],[16,5],[13,5],[5,0],[0,5],[4,-5],[33,20],[0,-5],[7,0],[4,-5],[2,-20],[-2,-5],[-4,-5],[-7,-25],[-9,0],[-2,10],[-4,-5],[-27,-11],[0,-5],[7,0],[6,-10],[0,-5],[-4,-5],[0,-5],[13,-20],[2,0],[5,-5],[6,0],[0,-5],[5,5],[-2,-15],[2,0],[4,-15],[22,5],[18,10],[-2,5],[4,0],[20,0],[2,0],[-2,20],[-2,0],[0,30],[4,0],[2,10],[-4,26],[9,25],[22,20],[2,0],[2,5],[18,100],[11,5],[4,-5],[16,-5],[-3,20],[5,0],[-2,15],[6,5],[0,6],[9,0],[0,15],[5,5],[0,5],[17,5],[7,-20],[20,0],[4,-10],[13,5],[0,-5],[18,-11],[15,-30],[9,-5],[5,-5],[0,-5],[-3,-5],[-2,0],[-2,0],[-2,-10],[-2,0],[0,-5],[0,-5],[0,-5],[2,-10],[0,-5],[0,-10],[2,0],[0,-5],[2,-5],[0,-5],[2,-5],[5,-15],[4,0],[2,0],[5,-5],[11,-30],[9,-25],[-3,-21],[3,-25],[8,-40],[5,-10],[-5,-25],[16,-5],[0,-5],[2,-15],[2,-25],[5,-10],[0,-10],[2,-26],[4,-15],[11,-25],[3,-20],[-3,-5],[0,-25],[7,-20],[0,-5],[7,-5],[4,-15],[0,-10],[7,-10],[-3,-5],[7,-10],[15,-31],[0,-20],[7,-5],[2,-30],[29,-15],[2,-20],[13,5],[2,0],[16,0],[7,-10],[6,5],[5,-5],[8,5],[7,-5],[7,5],[8,10]],[[5413,6647],[7,-25],[2,-15],[0,-10],[2,0],[-4,-20],[-2,-5],[2,-10],[7,-10],[0,5],[2,0],[2,0],[7,5],[2,-5],[2,5],[9,0],[2,-5],[9,10],[9,10],[9,10],[8,0],[5,5],[9,-81],[8,0],[7,5],[7,5],[4,0],[2,5],[2,0],[3,6],[0,5],[31,35],[28,-61],[-2,-70]],[[5592,6441],[-33,30],[-4,10],[0,5],[-3,10],[-2,5],[-7,0],[0,5],[-15,-10],[-9,5],[0,5],[-22,5],[-2,-15],[-4,0],[-3,0],[-4,5],[-4,-5],[-5,-5],[-2,0],[-2,0],[-2,-5],[0,-5],[0,-5],[0,-5],[-5,5],[-2,-5],[-4,0],[-9,-5],[-5,-5],[-4,0],[-2,-5],[-3,0],[-2,-5],[-17,-35],[-7,-5],[-2,-10],[2,-5],[0,-10],[4,-15],[-4,-15],[-9,-15],[-22,-36],[-15,-10],[0,-15],[4,-35],[20,-5],[7,5],[59,20],[2,0],[9,-5],[13,-5],[11,-15],[-4,-5],[4,-5],[14,-10],[22,-30],[4,-10],[15,-5],[9,-20],[5,-10],[13,-15],[13,-21],[7,-20],[11,-5],[9,-25],[13,5],[15,-15],[-2,-50],[-9,-40],[-9,0],[-8,-15],[-14,0],[-26,-20],[-20,-5],[-13,5]],[[5537,5924],[2,60],[-90,40],[-5,-70],[2,-20],[-2,-5],[-26,0],[-9,5],[-24,10],[-7,0],[-24,-15],[-5,15],[5,10],[-2,75],[-33,5],[-75,-151],[-36,56],[-11,-5],[-6,-5],[-13,0],[-7,5],[-4,-5],[-3,0],[-2,0],[-2,0],[-2,0],[-2,0],[-3,-10],[-6,0],[-5,-6],[-15,0],[-9,16],[-29,0],[-11,-10],[-11,-11],[-15,-35],[-9,-5],[-13,30],[-7,-5],[-13,5],[-2,-5],[-2,-5],[-5,-10],[-2,-10],[-2,0],[-2,-5],[-3,-10],[-4,-10],[-2,0],[11,-25],[13,-15]],[[5010,5803],[0,-15],[-7,-5],[-19,0],[-31,-10],[-36,25],[-11,-15],[-11,0],[-24,-15],[-9,-10],[-6,-15],[-9,-5],[0,-5],[-11,-5],[2,-26],[31,-70],[-18,-30],[-6,0],[-25,-30],[-11,-20],[-6,-5],[-20,-41],[-7,-25],[-13,-40],[-13,-40],[-7,10],[-4,15],[6,50],[-2,0],[-15,5],[-13,15],[-5,-10],[-9,-5],[-6,-15],[0,-10],[-7,-20],[-11,-15],[-11,0],[-6,-5],[0,-25],[-7,-15],[4,-30],[5,0],[0,-20],[2,-20],[-7,-16],[0,-10],[-6,-10],[2,-10],[0,-10],[-2,-15],[-9,-10],[-5,5],[-6,-5],[2,0],[0,-5],[-2,-5],[2,-5],[0,-5],[2,-5],[-6,-15],[-14,-25],[-8,-5],[-9,-35],[13,-26],[-2,-15],[9,-20],[28,-85],[0,-25],[-6,0],[0,-5],[-14,-15],[5,-15],[-2,-15],[-16,-26]],[[6566,5537],[18,-51],[2,-20],[11,-25],[9,0],[0,-15],[9,-50],[2,-35],[0,-5],[-4,-25],[-20,-11],[-11,-10],[-9,-15],[-11,-10],[-16,-10],[-8,-5],[-9,-10],[-9,0],[-11,5],[-9,-20],[-11,-15],[-6,-20],[-9,-10],[-9,-5],[-18,-10],[-6,-5],[-7,-5],[-9,-10],[7,-10],[0,-25],[15,-21],[2,-10],[-4,-45],[-9,-20],[0,-5],[2,-10]],[[6438,4999],[-6,-20],[-11,-10],[-20,-5],[-15,-30],[-11,-10],[0,-10],[0,-10],[-18,0],[-2,10],[-11,-5],[-5,-10],[-9,-6],[-2,-10],[0,-20],[5,-20],[-3,-15],[7,-25],[0,-15],[7,-20],[-7,-10],[-11,5],[-9,-10],[-9,-10],[0,-15],[-4,-10],[-2,-10],[-2,-10],[2,-11],[-5,-10],[-6,-25],[6,-35],[-19,-15],[-9,-15],[-9,5],[-5,0],[-13,-5],[-13,-15],[-2,15],[-9,5],[-9,40],[-6,5],[0,10],[0,5],[-9,5],[-20,-20],[-20,-25],[-9,-35],[11,-40],[-2,-15],[-11,-10],[-18,-10],[-13,-26],[-6,-5],[-18,-10],[-2,-15],[-18,-20],[-13,20],[-7,5],[-4,-5],[-7,0],[-4,-5],[-5,-5],[-4,-20],[-7,-15],[-4,5],[-4,0],[-9,0],[-5,-5],[-4,-10],[0,-20],[2,-15],[-4,-10],[-2,-5],[2,-5],[2,-5],[0,-15],[0,-30],[7,-16],[4,-20],[-29,-40],[-11,0],[-13,-30],[7,-15],[-5,-15],[5,-10],[-11,-15],[-5,-15],[13,-25],[3,-26],[13,-15],[4,-5],[5,-10],[6,0],[14,-5],[4,-15],[-2,-30],[4,-20],[-4,-10],[0,-30],[6,-15],[-2,-20],[5,-11],[-7,-30],[0,-20]],[[6002,3823],[-13,-5],[-13,-5],[-9,-15],[-7,-5],[-4,-10],[-9,-15],[-13,-10],[-11,-5],[-18,-5],[-9,10],[-4,25],[2,15],[-4,0],[-5,10],[-13,10],[-7,0],[-4,0],[-9,-15],[-22,-5],[-24,-5],[-13,20],[-7,0],[-9,25],[-9,10],[-17,-15],[-16,5],[-6,-5],[-16,5],[-20,25],[-6,-10],[-11,0],[-11,-20],[-2,-15],[-9,-5],[2,-10],[-5,-10],[3,-30],[-9,-15],[-5,-15],[-4,-10],[7,-20],[-5,-20],[9,-21],[4,-40],[-19,-10],[-9,-5],[-2,-5],[-9,0],[-7,-5],[-9,5],[-8,-10],[-18,-5],[-2,-10],[-9,-10]],[[5559,3567],[-11,5],[-18,35],[-15,-15],[-29,20],[-11,20],[-6,-5],[-5,0],[-4,15],[-9,0],[-5,20],[-4,21],[-4,20],[2,25],[-5,0],[-2,5],[-2,10],[0,15],[-7,25],[-15,30],[0,20],[-4,5],[0,10],[-5,10],[9,56],[-4,10],[0,10],[13,20],[6,30],[0,10],[7,15],[0,45],[4,10],[-2,5],[-4,41],[2,5],[2,45],[2,10],[-8,20],[-18,5]],[[5495,4758],[20,15],[11,5],[9,5],[6,-5],[7,-5],[22,10],[18,15],[-7,45],[-4,10],[-5,10],[-13,15],[9,26],[0,5],[-2,20],[-23,-15],[-6,10],[-7,0],[2,5],[-4,5],[18,-5],[22,20],[2,30],[-11,25],[4,5],[7,10],[2,15],[0,30],[7,25],[6,26],[31,25],[5,10],[-3,10],[5,0],[-11,15],[-9,30],[-9,-5],[-13,5],[-15,15],[-7,0],[-2,-10],[-11,0]],[[5546,5210],[-9,30],[6,35],[-2,15],[-6,21],[2,10],[9,5],[6,10],[9,15],[-4,25],[-9,15],[2,10],[-7,10],[-11,15],[-8,-5],[-7,10],[13,25],[7,5],[29,20],[6,15],[5,31],[11,5],[8,-5],[7,5],[11,-26],[29,21],[6,10],[2,15],[27,5],[26,20],[0,10],[7,10],[2,15],[-9,20],[11,0],[16,5],[0,-5],[6,5],[-6,5],[2,20],[-2,5],[2,10],[-2,15],[0,46],[-2,15],[11,15],[6,20],[-2,15],[13,10],[14,35],[0,10],[-11,30]],[[5760,5888],[28,15],[33,-15],[13,-15],[3,-25],[-7,-35],[7,-30],[0,-86],[33,0],[11,5],[9,-15],[6,0],[13,0],[7,0],[4,0],[0,-5],[7,0],[7,-5],[4,0],[9,-5],[2,0],[4,-5],[3,0],[2,0],[2,0],[7,0],[2,0],[4,-5],[3,0],[2,0],[2,-5],[2,0],[5,5],[2,0],[6,0],[3,5],[4,0],[4,0],[5,0],[4,0],[5,0],[6,5],[7,0],[9,-20],[6,-50],[-6,-20],[2,-15],[4,-15],[11,-10],[7,-20],[4,5],[7,5],[9,0],[4,5],[5,10],[4,10],[2,10],[11,10],[0,5],[5,0],[2,5],[6,-5],[5,20],[17,0],[-2,15],[2,0],[11,-10],[42,30],[5,5],[6,-5],[0,-10],[11,-25],[20,-15],[9,5],[13,30],[16,10],[13,10],[7,-10],[13,-10],[2,-5],[13,0],[0,-15],[7,-10],[-5,-30],[5,-5],[-5,-10],[0,-15],[18,-56],[13,5],[0,5],[3,5],[2,5],[4,0],[0,5],[2,0],[0,5],[3,0],[0,-5],[2,-5],[2,-10],[0,-5],[-2,-5],[0,-5],[-2,-5],[0,-10],[0,-10],[2,-5],[0,-25],[-2,-25],[11,-30],[2,5],[2,10],[4,5],[7,5],[2,10],[2,20],[7,-5],[15,0],[5,0],[17,15],[5,15],[6,5],[9,5],[9,0],[2,10],[5,0],[4,5],[2,10],[5,0],[4,0],[5,5],[6,0],[2,10],[11,0],[5,15],[6,0],[3,6],[6,0],[5,10],[8,5],[5,10],[4,0]],[[5760,5888],[-58,-50],[-53,0],[-48,-20],[-71,40],[7,66]],[[5592,6441],[62,-50],[4,0],[2,5],[3,0],[2,5],[4,0],[2,0],[3,0],[2,0],[4,0],[2,0],[5,0],[2,0],[2,0],[5,0],[4,10],[2,0],[2,0],[3,0],[4,0],[2,0],[5,0],[2,0],[2,0],[24,0],[0,-5],[5,-30],[-7,-20],[4,-5],[7,-5],[16,5],[8,15],[7,-5],[13,10],[7,0],[2,15],[9,10],[11,0],[6,0],[11,5],[3,15],[6,0],[49,-5],[6,-5],[18,15],[0,20],[9,15],[9,20],[15,20],[2,5],[-2,15],[24,5],[3,0],[0,5],[-3,6],[0,5],[3,0],[0,5],[2,5],[2,0],[2,0],[2,5],[3,0],[2,5],[-2,5],[2,0],[0,5],[2,0],[4,0],[3,0],[0,5],[0,10],[2,5],[4,5],[2,5],[-2,5],[-2,5],[4,10],[3,0],[0,5],[0,5],[-3,0],[-2,5],[-2,10],[0,5],[2,5],[2,5],[3,5],[2,5],[0,5],[4,5],[2,5],[3,0],[2,0],[2,5],[4,5],[3,0],[4,0],[2,5],[2,0],[-4,10],[0,10],[-2,10],[0,11],[-2,5],[-3,15],[-8,5]],[[6286,7049],[3,-10],[26,-35],[18,-15],[26,-5],[221,50],[11,0],[6,-5],[5,0],[4,0],[7,0],[6,0],[5,0],[6,5],[5,0],[2,0],[6,0],[3,-5],[2,0],[4,-20],[-11,-10],[-9,-66],[-15,6],[7,-61],[2,-15],[0,-10],[0,-10],[17,-5],[3,5],[4,0],[2,10],[9,0],[9,5],[11,-5],[11,-10],[7,-5],[6,-5],[-4,-5],[13,-15],[0,5],[4,-10]],[[6718,6808],[3,0],[-3,0]],[[6718,6808],[-26,-55],[-9,-21],[-26,-70],[-3,-5],[-2,-15],[-15,-15],[4,-15],[-2,0],[2,-20],[-9,-40],[5,-15],[11,-5],[4,-16],[-6,-15],[0,-10],[-5,-10],[5,-20],[-25,-20],[-8,-20],[-5,-10],[0,-15],[11,-5],[29,-15],[6,-5],[-4,-10],[-15,-10],[2,-10],[-5,-15],[-8,-6],[2,-5],[-2,-15],[-5,-10],[-2,-10],[-9,-10],[-6,-25],[-5,-30],[-2,-30],[-11,0],[-7,-10],[-2,-10],[-40,-35],[-11,5],[-4,5],[-26,-10],[-3,-11],[0,-20],[7,-25],[-20,-10],[0,-5],[-4,0],[0,-5],[2,-5],[2,-5],[2,0],[3,0],[2,0],[2,0],[4,0],[5,-5],[15,-15],[2,-25],[0,-15],[11,-10],[5,-25],[6,-10],[3,5],[15,-20],[7,-31],[6,-10],[3,0],[4,-10],[7,5],[0,-15],[-20,-15],[31,-75],[6,10],[16,-30],[26,-15],[7,-5],[-5,-5],[-4,0],[-7,-10],[-2,-6],[-2,-35],[-5,-5],[-11,-40],[3,-15],[4,-10],[2,-10],[5,0],[6,-15],[-2,-10],[-20,-5],[-2,-5],[-11,0],[-11,-15],[-7,0],[-11,-10]],[[5010,5803],[13,10],[13,-5],[9,0],[11,20],[7,10],[9,0],[9,0],[4,-10],[22,5],[20,-15],[17,5],[25,5],[13,-10],[0,-10],[7,-25],[-9,-65],[9,-21],[-25,-30],[-15,-30],[-9,-30],[16,-10],[13,-10],[2,-5],[7,-15],[2,0],[2,0],[2,0],[5,-5],[0,-5],[6,5],[5,-5],[4,5],[13,0],[33,20],[7,-15],[0,-25],[-7,-15],[9,-5],[2,-10],[-4,-31],[-9,-20],[-2,-10],[7,-30],[-3,-35],[-11,-20],[0,-25],[-11,-15],[5,-20],[-3,-11],[11,-20],[0,-15],[3,-20],[-9,-20],[0,-30],[-7,-25],[2,-20],[7,-10],[0,-30],[9,-6],[-2,-25],[-5,-10],[-15,-10],[-9,-20],[9,-25],[11,-10],[18,-35],[8,-10],[0,-10],[5,-10],[20,-25],[11,0],[6,-10],[16,-26]],[[5376,4793],[48,30],[20,-15],[0,10],[-2,25],[-11,25],[-2,10],[-20,5],[-9,10],[-9,16],[-11,0],[-17,35],[-9,10],[9,25],[-2,20],[-9,0],[-9,5],[-7,10],[-6,0],[2,5],[0,5],[2,0],[0,10],[2,10],[2,5],[0,5],[-2,5],[0,5],[0,5],[0,5],[-4,10],[0,5],[-2,0],[-3,10],[-2,6],[0,5],[-2,0],[0,5],[2,10],[0,5],[-4,15],[0,20],[-2,5],[0,10],[0,5],[0,5],[2,5],[2,0],[0,10],[0,5],[0,10],[-2,10],[-13,5],[-7,10],[7,25],[13,5],[0,15],[0,5],[6,16],[16,-5],[4,-11],[-4,-10],[11,-20],[-16,-20],[-6,-20],[0,-25],[-2,-15],[2,-10],[13,45],[7,-15],[9,15],[8,10],[16,30],[6,-5],[9,5],[7,20],[4,-5],[5,10],[4,-15],[7,-10],[4,-40],[-2,-10],[0,-10],[2,-5],[9,-5],[13,-5],[20,15],[11,5],[13,0],[11,0],[18,5],[6,5],[14,-5]],[[7258,5517],[-8,-11],[-5,-5],[-6,-25],[-11,0],[-18,-10],[-4,-20],[-16,-35],[-11,-15],[-4,-15],[-11,-10],[-5,-20],[-9,-10],[-19,-10],[-7,-15],[-11,10],[-13,5],[-53,5],[9,-30],[-9,-6],[-5,0],[-6,-5],[-2,-5],[-16,-45],[-13,-10],[-11,-5],[-4,-10],[-9,-10],[-7,0],[-13,-15],[-7,-10],[-13,15],[-2,35],[-20,40],[0,15],[-22,5],[-24,16],[-18,0],[-2,0],[-9,-5],[-7,-16],[-8,-20],[-14,0],[-4,0],[-2,-10],[-2,-45],[4,-30],[-13,-15],[-5,-10],[-8,-30],[0,-20],[-9,-11],[-7,-15],[-4,-20],[-9,-20],[-2,-25],[-9,-10],[-16,-20],[-13,-5],[-13,0],[-33,-10],[-11,0],[-24,-5],[-18,-15],[-7,5],[-4,0],[-4,-10],[-7,-5],[-11,0],[-4,-5],[-3,-10],[-13,-5],[-13,-10],[-7,10],[-15,0],[-7,5],[0,10],[0,15],[2,5],[-2,20],[0,10],[-17,-5],[-11,10],[-5,10],[-4,0],[-13,0],[-7,5],[-27,-10]],[[6718,6808],[3,0]],[[6721,6808],[0,5],[2,0],[6,-10],[51,-86],[40,-65],[9,-20],[28,-35],[5,-5],[6,0],[33,5],[16,5],[11,5],[6,0],[14,-10],[17,10],[44,-5],[27,-15],[92,-25],[-2,-36],[0,-25],[0,-10],[0,-5],[0,-5],[0,-5],[0,-5],[0,-5],[-2,-5],[0,-5],[-2,0],[0,-5],[0,-5],[-2,-5],[2,-10],[-2,0],[6,-30],[5,-5],[-5,-30],[7,-61],[-2,-5],[-14,-40],[-6,-30],[-16,-25],[-8,0],[-5,-15],[-18,-5],[-15,-10],[-15,-15],[-20,-25],[39,-46],[9,0],[9,-15],[9,0],[15,10],[3,-5],[11,-10],[46,45],[6,0],[7,5],[16,-15],[11,0],[4,0],[7,-15],[6,-10],[5,-10],[13,-10],[0,-10],[11,-25],[4,-10],[0,-40],[11,-35],[5,-26],[-7,0],[-4,-15],[4,-25],[-7,-25],[7,-15],[-2,-20],[0,-15],[-7,-30],[5,-15],[2,-25],[-2,-10],[-18,-6],[0,-40],[-2,-10],[6,-15],[3,-15],[17,-10],[5,-5],[6,-45],[-6,-15],[4,-10],[-7,-30]],[[5413,6647],[3,0],[2,5],[0,5],[2,15],[0,10],[-2,10],[-5,15],[0,5],[3,5],[2,10],[2,5],[0,6],[0,15],[0,5],[0,10],[0,5],[-2,10],[-2,10],[-3,15],[-2,5],[-2,5],[-2,5],[-7,0],[-4,0],[-2,5],[-3,0],[-2,15],[-2,10],[0,10],[0,15],[0,5],[2,0],[0,5],[2,10],[3,5],[2,0],[0,5],[2,0],[0,5],[2,5],[0,5],[-2,10],[-4,11],[-3,10],[0,15],[-2,5],[0,10],[-2,5],[0,5],[0,5],[2,5],[0,15],[0,5],[-2,5],[-2,5],[-2,5],[-5,5],[0,5],[0,5],[-2,5],[0,10],[0,5],[2,10],[2,10],[0,5],[3,0],[4,10],[4,5],[9,15],[2,5],[0,5],[0,11],[0,5],[3,5],[6,10],[0,10],[0,5]],[[2823,3698],[-17,-20],[-14,-11],[-4,-15],[-24,-55],[-7,-5],[-13,35],[0,10],[-20,25],[-20,-40],[-26,-30],[-27,-30],[-11,5],[-13,0],[-7,-5],[-2,-25],[-6,-10],[-3,-10],[-2,-10],[-4,-15],[-2,-26],[-7,-5],[-2,-10],[-7,-5],[-6,-5],[-3,-10],[-2,-10],[-13,-5],[-9,-10],[-9,-5],[-6,-15],[-5,-15],[-11,-10],[-4,10],[-20,-10],[-4,5],[-11,0],[-9,5],[-13,-15],[-14,15],[-11,-10],[-15,-20],[-7,-5],[-9,-20],[-15,-15],[-26,-41],[-3,-15],[-15,-25],[2,-5],[-6,-55],[-3,5],[-31,-25],[-22,-20],[-8,-5],[-11,0],[0,5],[2,5],[6,20],[9,25],[-4,20],[-18,30],[-4,0],[-2,25],[0,31],[-3,15],[5,10],[-7,10],[-2,5],[-2,5],[-2,5],[0,5],[-3,10],[0,5],[-2,0],[0,10],[2,0],[0,5],[-2,5],[0,5],[2,0],[0,5],[-2,0],[0,5],[-4,0],[-2,5],[-3,0],[-2,5],[-2,0],[-2,5],[-3,5],[-2,5],[-2,5],[-4,5],[-5,0],[-4,5],[0,5],[-5,5],[0,5],[-2,0],[-2,0],[-4,0],[-3,0],[-2,0],[-2,-5],[-4,0],[-3,0],[-2,5],[-2,0],[-4,-5],[-7,0],[-4,0],[-3,5],[-2,0],[0,5],[-4,5],[-2,0],[0,5],[-3,0],[-2,-5],[-2,5],[-2,0],[0,5],[0,5],[-2,0],[0,5],[-7,0],[-2,0],[-2,6],[-7,5],[-2,0],[-3,0],[-2,5],[-2,0],[0,5],[0,5],[-2,0],[-2,0],[-3,0],[0,-5],[-2,0],[-2,0],[-4,5],[-3,0],[-4,0],[-4,0],[0,-5],[-3,0],[0,-5],[-2,-5],[-2,-5],[-2,0],[0,-6],[-2,0],[0,-5],[-3,5],[0,6],[0,5],[3,5],[0,5],[0,5],[2,5],[0,5],[0,15],[0,5],[2,5],[-33,-35],[-2,0],[-20,-46],[-16,-15],[-6,-35],[-11,-5],[-22,5],[-7,15],[-6,0],[-11,15],[-3,10],[-6,15],[-2,15],[-5,21],[-13,0],[-13,25],[-7,25],[-9,15],[2,5],[3,5],[6,15],[2,5],[0,5],[3,5],[0,5],[0,5],[0,5],[2,5],[2,0],[2,5],[0,5],[5,10],[2,0],[2,5],[0,5],[5,0],[2,0],[-7,-20],[0,-5],[9,0],[2,0],[5,-5],[19,5],[22,15],[3,0],[2,0],[2,0],[2,0],[0,-5],[2,-5],[0,-5],[0,-5],[3,0],[2,-5],[2,0],[0,-5],[0,-5],[-2,-15],[2,0],[2,0],[2,0],[3,15],[0,5],[4,0],[0,10],[2,5],[-2,0],[2,10],[2,-5],[3,5],[2,5],[0,5],[2,5],[2,5],[5,5],[2,0],[2,5],[2,0],[0,10],[3,0],[2,0],[2,0],[2,11],[2,5],[5,10],[6,15],[3,0],[2,5],[2,5],[2,0],[2,-5],[3,0],[2,5],[0,5],[2,0],[2,5],[0,-5],[2,0],[3,5],[2,0],[2,0],[2,0],[2,0],[5,5],[-5,10],[-2,10],[2,5],[-2,5],[7,15],[-9,5],[-13,-15],[-9,0],[-4,-25],[-3,-5],[-13,25],[-11,-10],[-4,25],[-9,25],[-7,5],[2,5],[-4,5],[-15,10],[-9,10],[-5,-5],[-4,5],[0,5],[-2,0],[-2,0],[-3,0],[-2,0],[-2,-5],[-2,0],[-2,0],[-3,-10],[-2,0],[0,-5],[-2,0],[0,-5],[-2,0],[-2,0],[0,-5],[0,-5],[-3,0],[-2,-5],[-13,5],[0,5],[-7,5],[-4,-5],[-7,35],[-15,10],[0,-10],[-2,-5],[0,-5],[-3,-5],[0,-5],[3,-5],[0,-5],[-9,5],[-2,-5],[-7,0],[-2,-5],[-2,0],[0,-10],[-9,-5],[-9,5],[2,5],[0,5],[0,5],[0,5],[2,5],[3,0],[0,5],[2,5],[0,10],[0,5],[0,5],[2,10],[0,11],[0,5],[2,5],[-6,40],[8,5],[5,40],[-5,35],[3,0],[-3,15],[3,15],[-5,15],[2,15],[-2,0],[0,10],[-6,0],[-3,16],[5,35],[6,20],[3,0],[0,5],[2,5],[-11,10],[0,5],[6,0],[11,5],[9,0],[2,-5],[5,5],[2,-15],[7,5],[-3,5],[9,15],[16,40],[6,0],[5,10],[6,0],[5,5],[13,-10],[-4,-10],[13,-10],[13,-5],[7,5],[4,15],[9,-10],[4,0],[7,15],[0,10],[-9,10],[9,25],[9,16],[-9,10],[-7,5],[-4,25],[4,0],[0,10],[5,10],[4,5],[9,-15],[13,25],[5,10],[6,0],[9,20],[4,0],[7,30],[2,5],[-4,10],[13,25],[13,31],[2,0],[14,20],[8,5],[3,5],[2,-10],[7,20],[4,10],[26,40],[5,5],[0,25],[11,35],[-2,5],[-7,15],[-4,5],[-7,10],[0,6],[-2,0],[0,5],[-2,0],[-3,0],[-4,-5],[-7,-6],[-4,0],[0,-5],[-2,0],[-2,0],[-3,5],[-2,6],[-2,5],[-2,0],[-3,0],[0,-5],[-6,10],[-2,-10],[-5,10],[2,5],[-4,10],[13,25],[7,0],[0,-10],[7,-5],[19,35],[14,20],[-3,10],[-6,0],[4,10],[-2,0],[11,20],[4,15],[0,-5],[7,15],[9,5],[0,-5],[2,0],[0,-5],[2,0],[5,0],[4,10],[11,10],[0,15],[4,0],[-6,0],[0,16],[15,30],[9,20],[-9,10],[5,0],[-16,30],[2,5],[-4,15],[4,10],[7,5],[-9,10],[2,0],[5,15],[4,15],[7,10],[4,-5],[3,0],[2,-10],[2,0],[2,-5],[2,5],[3,-5],[2,0],[0,-5],[2,0],[2,0],[2,0],[16,-5],[4,15],[11,30],[0,10],[-13,11],[2,10],[-9,15],[3,5],[4,-5],[4,10],[-2,5],[5,5],[-3,0],[-4,5],[-4,10],[-3,-5],[-2,0],[-2,0],[-4,5],[2,5],[-7,10],[0,5],[2,5],[3,5],[-3,10],[7,15],[-9,15],[7,25],[4,10],[11,15],[-2,0],[7,10],[-7,16],[-7,20],[-11,20],[-4,5],[-4,10],[-9,0],[2,-10],[-11,-10],[-7,0],[-2,5],[-9,-15],[5,-15],[4,-5],[7,-15],[11,-36],[-11,-10],[-11,30],[-7,0],[-7,21],[-4,0],[-2,5],[2,0],[-2,10],[-2,5],[-3,0],[-6,20],[-9,5],[0,5],[0,5],[-2,0],[-2,5],[-3,0],[3,5],[-3,10],[-2,0],[-4,-5],[-7,15],[-9,5],[-6,0],[-5,5],[0,5],[3,5],[4,5],[2,5],[2,0],[0,5],[3,0],[0,5],[-3,0],[-2,5],[-2,0],[-2,5],[-7,10],[-2,5],[-57,101]],[[2072,5562],[72,140]],[[2144,5702],[71,-125],[9,-20],[9,-5],[6,-10],[2,5],[3,-5],[8,10],[5,-5],[13,-10],[4,-10],[-13,-21],[7,-10],[-9,-15],[4,0],[3,-5],[2,-5],[6,-15],[18,-30],[22,-35],[7,-10],[2,0],[-9,-15],[-2,0],[-11,-20],[-2,0],[-11,-15],[2,-5],[4,-5],[7,-15],[2,0],[2,0],[2,0],[3,0],[6,-6],[2,0],[3,6],[0,5],[2,0],[2,5],[0,-5],[2,5],[0,5],[3,0],[2,5],[2,-5],[2,0],[0,10],[0,5],[0,5],[13,-25],[7,10],[2,-5],[5,-5],[6,0],[5,0],[4,-10],[0,-6],[-4,-10],[0,-5],[-3,-5],[-2,-10],[0,-5],[-2,0],[22,-25],[-2,-10],[-13,-10],[2,-10],[-9,-10],[-2,-10],[6,-15],[3,5],[4,-10],[4,-5],[7,10],[7,-5],[8,25],[5,15],[2,0],[2,0],[2,5],[3,0],[2,0],[0,5],[2,0],[2,10],[0,5],[5,15],[4,5],[2,0],[3,10],[2,5],[2,0],[2,5],[5,5],[0,5],[2,5],[2,0],[4,16],[-4,10],[-4,10],[-3,-5],[-2,5],[5,5],[-3,10],[-8,-5],[0,20],[8,15],[11,5],[5,10],[-2,0],[17,20],[-2,5],[-7,-5],[-2,0],[0,10],[9,0],[9,0]],[[2501,5451],[5,20],[-7,5],[-13,25],[-53,121],[-4,10],[6,15],[0,35],[-2,15],[-9,15],[9,6],[-6,20],[4,0],[-2,10],[4,5],[-4,10],[6,5],[-2,15],[7,10],[0,5],[-2,0],[-3,5],[-2,0],[0,5],[-4,0],[-2,5],[-3,0],[-2,5],[-2,0],[-2,5],[-3,0]],[[2554,5517],[-2,-16],[-2,-10],[13,-25],[-2,-5],[2,-15],[2,-5],[7,-5],[2,10],[5,5],[4,10],[13,10],[2,5],[7,0],[2,0],[-6,20],[0,26],[-3,10],[-11,0],[-6,-10],[-2,5],[2,5],[-5,0],[-22,-15]],[[1897,4597],[-13,-25],[-4,-5],[-7,0],[-4,0],[-5,-5],[-4,5],[-9,-5],[-6,0],[-11,10],[0,5],[6,10],[0,10],[5,5],[2,10],[2,-5],[4,5],[3,-10],[13,15],[4,-10],[2,5],[3,0],[4,5],[2,0],[2,0],[5,0],[4,5],[2,5],[-4,10],[13,15],[2,15],[16,31],[2,5],[-4,0],[2,10],[18,25],[8,10],[7,10],[11,30],[-7,0],[7,20],[7,-5],[-3,-10],[7,0],[4,-10],[3,-10],[6,-10],[0,-10],[-4,-5],[2,-10],[2,0],[0,5],[2,0],[3,0],[4,5],[2,0],[7,-15],[9,-10],[11,-10],[-2,-10],[8,-11],[5,-10],[-9,-20],[-4,-10],[-23,-55],[0,-5],[3,-5],[-3,-10],[5,-5],[-7,-15],[-4,5],[-2,-5],[-7,5],[-4,0],[-11,0],[-14,10],[-17,25],[-11,10],[-7,0],[-4,0],[-25,-10]],[[1816,5200],[189,281]],[[2005,5481],[58,-110],[9,-20],[2,5],[2,-5],[2,0],[11,-20],[2,5],[5,-5],[9,10],[22,-51],[-22,-20],[-5,10],[-17,-15],[-7,5],[-13,-10],[9,-20],[17,15],[0,-5],[20,15],[7,-15],[4,0],[5,-15],[2,5],[2,-10],[4,0],[7,-20],[4,0],[3,-5],[2,-5],[-27,-30],[-17,-40],[-7,-20],[-11,-36],[4,-20],[7,-20],[2,-5],[-2,-5],[4,0],[-4,-10],[7,-15],[-14,-35],[5,-5],[9,-10],[11,20],[-3,5],[12,10],[4,-5],[2,0],[11,0],[0,-5],[2,-5],[3,0],[2,-5],[0,-5],[0,-5],[-2,-5],[-3,0],[-2,-5],[-2,-5],[0,-5],[-2,-5],[-2,0],[0,-5],[-3,0],[-4,-5],[-2,0],[0,-5],[0,-5],[-5,-10],[-2,-11],[0,-5],[-2,0],[0,-10],[-2,0],[2,-5],[0,-5],[0,-5],[-2,-5],[0,-5],[-3,0],[0,-5],[-4,0],[-2,-5],[-2,-5],[-7,10],[4,5],[-6,5],[-2,-5],[-3,-5],[-13,0],[2,-10],[-11,-5],[-2,-10],[-13,5],[-11,-5],[-7,-10],[-2,5],[-4,0],[-9,15],[-2,-5],[-5,5],[-4,0],[-9,10],[-4,10],[4,5],[-2,10],[-9,10],[-13,-15],[-2,5],[-7,-10],[4,-5],[-4,-10],[-4,0],[-9,-10],[-7,10],[-6,-25],[-9,-5],[-13,10],[-5,-20],[-13,25],[-2,0],[-3,0],[-4,0],[-2,5],[-2,-5],[0,5],[0,5],[-9,20],[-9,10],[-15,-15],[-14,20],[-19,31],[-5,0],[-9,-21],[-2,5],[2,10],[5,11],[17,30],[-6,15],[-11,-10],[-5,10],[-22,30],[-55,90],[84,131]],[[1829,4672],[0,-5],[-2,-5],[0,-40],[-4,-10],[2,-5],[-5,-15],[-11,-10],[-2,-15],[2,-5],[-13,-25],[-20,-20],[-6,25],[2,5],[-2,10],[-16,15],[-6,20],[4,10],[2,10],[2,5],[3,0],[11,0],[2,10],[17,25],[11,35],[7,-10],[4,5],[3,5],[15,-15]],[[2819,5602],[0,-20],[-9,5],[-4,-10],[-9,-10],[-2,5],[-11,-15],[-5,20],[-2,15],[2,5],[2,-5],[3,5],[-5,5],[27,20],[-3,10],[5,5],[11,-10],[0,-25]],[[3518,7672],[-18,15],[-9,-5],[-6,15],[8,30],[-2,20],[-13,0],[-4,16],[-11,0],[-11,10],[4,25],[2,5],[-2,5],[-11,0],[-42,0],[-13,-5],[-7,-5],[-9,0],[-17,5],[-7,0],[-15,-5],[-25,5],[-8,10],[-31,35],[-9,-10],[2,10]],[[3264,7848],[5,30],[11,15],[-3,30],[0,5],[-4,10],[2,10],[-2,5],[4,6],[3,0],[2,-6],[2,-5],[7,0],[2,5],[0,6],[0,5],[2,0],[4,5],[5,-5],[4,-5],[2,-6],[5,-5],[2,5],[2,0],[2,6],[3,0],[0,5],[2,0],[4,-5],[5,-6],[2,0],[4,-5],[5,5],[4,0],[2,0],[3,-5],[0,-20],[0,-10],[0,-5],[0,-5],[0,-5],[0,-5],[2,0],[2,-5],[9,0],[2,0],[0,-10],[13,-5],[2,-5],[9,0],[13,0],[9,10],[5,5],[2,5],[4,5],[14,-5],[4,-5],[22,65],[4,16],[0,5],[-11,20],[5,5],[-7,10],[2,0],[40,10],[24,0],[25,-5],[30,10],[-2,5],[0,5],[-2,5],[-2,0],[-5,5],[-2,0],[-2,0],[-2,0],[-2,0],[-5,10],[0,5],[-2,5],[0,5],[0,5],[0,10],[0,10],[2,5],[0,5],[0,20],[0,5],[16,5],[4,-10],[0,-15],[7,0],[-5,-10],[7,-5],[6,0],[16,20],[22,-10],[13,10],[9,0],[9,0],[0,10],[-2,15],[0,10],[4,10],[-2,16],[9,25],[0,15],[6,20],[-2,25],[4,0],[5,5],[-13,20],[-9,10],[-11,5],[-14,5],[7,20],[-4,5],[0,5],[0,5],[0,10],[4,10],[0,5],[0,6],[0,5],[-2,5],[0,5],[0,5],[-2,5],[13,-5],[4,5],[7,0],[26,-25],[14,0],[13,-6],[9,11],[6,-5],[16,15],[0,5],[-9,0],[9,10],[-9,5],[-5,5],[0,5],[5,10],[2,5],[2,0],[14,-5],[15,10],[0,-10],[-2,-15],[6,-25],[5,-10],[4,0],[5,0],[6,0],[16,-11],[13,-5],[13,0],[9,-5],[11,-25],[11,-35],[-4,0],[-3,-5],[-2,0],[-6,-20],[-3,-5],[-2,0],[-2,-5],[-2,-5],[0,-10],[0,-5],[0,-5],[0,-5],[-5,-5],[-6,0],[-3,0],[-2,-5],[-2,-5],[-2,-5],[-5,-5],[-4,-10],[-2,-5],[0,-5],[-2,-15],[-3,-11],[3,-5],[-3,-10],[7,-15],[0,-10],[-2,-15],[0,-15],[-9,-45],[-4,-5],[2,-5],[-9,-5],[-2,-5],[-27,-25],[-13,-5],[-53,5],[5,-46],[2,-45],[2,-30],[-9,-5],[0,-5],[0,-5],[7,-10],[13,0],[0,-15],[2,-10],[0,-15],[2,-30],[97,20],[27,5],[62,-15],[2,-10],[11,-46],[20,-40],[17,-30],[7,-5],[26,0],[7,-5],[0,-15],[29,5],[6,-5],[0,-10],[7,5],[13,5],[-2,5],[4,25],[0,5],[0,5],[0,15],[7,30],[9,25],[9,6],[35,5],[20,10],[6,10],[7,30],[7,5],[22,20],[19,10],[9,10],[11,-5],[18,20],[6,-5],[0,20],[-4,10],[-7,0],[-4,5],[-7,20],[14,15],[6,15],[5,6],[4,-6],[2,0],[0,26],[11,5],[29,-31],[7,6],[13,-21],[24,21],[7,0],[20,15],[8,15],[-4,20],[13,10],[9,5],[2,5],[5,0],[15,0],[2,5],[-4,0],[6,10],[11,15],[-4,10],[-22,40],[4,5],[-11,51],[3,10],[4,5],[7,15],[11,10],[-3,5],[3,10],[-3,5]],[[4410,8225],[5,0],[2,5],[0,5],[2,5],[2,10],[3,0],[2,0],[4,5],[0,5],[5,5],[13,-15],[7,-30],[-5,-10],[13,-15],[3,-15],[4,-15],[0,-16],[0,-15],[4,-20],[-2,-5],[5,-20],[-3,-25],[-4,0],[0,25],[-2,0],[-44,-30],[19,-15],[5,0],[7,-10],[11,-15],[6,0],[7,0],[4,0],[0,-5],[2,-10],[7,0],[11,-5],[9,-10],[4,0],[5,-5],[2,-15],[2,-10],[2,-11],[0,-20],[0,-5],[7,-5],[4,5],[5,0],[6,-5],[0,10],[16,0],[0,-15],[6,-30],[3,-15],[0,-5],[-3,0],[0,-10],[-2,-10],[2,-5],[-2,-5],[0,-5],[-2,-10],[0,-5],[-2,-10],[0,-10],[-2,-5],[0,5],[-5,-5],[2,0],[-2,-5],[0,-5],[-2,-5],[-7,-5],[-2,0],[-4,-10],[0,-6],[-3,0],[-4,-5],[-2,-5],[-2,-5],[-5,-5],[7,-15],[-2,-20],[-18,-25],[0,-5],[7,-25],[-5,-10],[-9,-10],[-13,-10],[-6,0],[-16,-25],[-2,10],[-20,-20],[2,-15],[-26,-10],[-16,-6],[-19,-10],[0,16],[-3,20],[5,25],[-2,15],[-20,-5],[-18,5],[-26,5],[-3,5],[-4,10],[-13,15],[2,5],[-2,5],[-7,0],[0,-10],[0,-5],[-2,0],[-2,-5],[-7,-15],[-2,-5],[-4,-15],[-3,-10],[-2,-5],[0,-5],[-2,-10],[0,-10],[2,-5],[0,-5],[5,-6],[-5,0],[-2,-5],[-2,-5],[-7,-10],[-2,0],[-2,-5],[-2,0],[-3,-10],[-2,-5],[-4,-5],[-2,0],[-7,0],[-9,5],[-7,0],[-6,-5],[-7,-10],[-6,-5],[-5,-5],[-2,0],[-4,-10],[-3,-15],[-4,-10],[-4,-15],[-9,-35],[-5,-5],[-2,-5],[-4,-15],[-5,-15],[0,-21],[-2,-5],[-4,-15],[-13,-20],[-5,-10],[-11,-5],[-7,-5]],[[3826,6763],[7,-10],[11,0],[0,-5],[-4,-5],[-5,-11],[-4,6],[-9,-31],[-18,10],[-13,-5],[-4,5],[8,26],[0,10],[5,5],[2,-5],[4,10],[5,5],[0,5],[9,5],[-3,-10],[7,0],[2,-5]],[[3130,8019],[6,35],[3,35],[6,10],[0,5],[-4,5]],[[3141,8109],[4,5],[7,-5],[15,15],[16,0],[6,5],[0,10],[9,10],[15,10],[14,16],[2,5]],[[3229,8180],[7,-10],[6,0],[24,10],[5,-15],[6,-11],[11,-15],[5,-15],[4,-20],[7,-10],[0,-5],[0,-10],[-7,-15],[-2,-15],[-2,-10],[-7,-15],[-20,-10],[-24,5],[-15,-15],[-14,0],[-57,15],[-13,-5],[-9,5],[-4,0]],[[3427,8466],[2,0],[0,-20],[5,0],[2,-5],[9,-5],[29,0],[0,-10],[2,-20],[6,0],[3,-30],[-9,-36],[-9,0],[-4,-20],[8,-65],[-30,0],[-7,0],[-5,-10],[-6,0],[-7,0],[-13,5],[-11,0],[-24,-15],[-9,-5],[-11,-5],[-16,-5],[-11,-15],[-17,-5],[-18,35],[-4,25]],[[3282,8260],[11,25],[11,15],[2,10],[0,5],[-2,0],[-11,10],[-5,-5],[-4,15],[-4,5],[-3,5],[-2,-5],[-11,10],[-11,5],[-6,5],[-7,-5],[-11,-5],[2,21],[9,20],[13,40],[7,10],[15,-15],[11,-10],[9,-15],[9,-5],[4,0],[11,0],[20,-46],[11,0],[27,10],[6,11],[7,20],[6,5],[11,5],[0,20],[20,15],[-4,25],[4,5]],[[3698,8757],[-2,0],[-9,5],[-4,-5],[-4,0],[-5,-5],[-2,0],[-7,-5],[-2,0],[0,-15],[0,-5],[0,-5],[7,-10],[2,-5],[0,-5],[0,-30],[-2,-10],[-2,-15],[-7,5],[-2,-5],[-5,0],[-2,-10],[0,-5],[-9,-5],[-6,-20],[0,-5],[-5,-5],[-4,-10],[-9,-15],[-11,-21],[-2,0],[-7,0],[0,5],[-2,16],[0,20],[0,5],[-4,0],[0,10],[-5,0],[-2,10],[7,25],[-3,10],[5,10],[-16,10],[-13,0],[-11,5],[-9,0],[-22,-5],[0,5],[7,40],[4,-5],[7,30],[-18,36]],[[3524,8778],[5,0],[4,20],[-7,10],[3,10],[17,15],[3,5],[19,-5],[9,5],[13,-5],[0,30],[9,40],[22,-15],[13,-10],[-2,-20],[2,-5],[0,-10],[3,0],[9,0],[6,0],[5,0],[6,0],[2,-5],[3,0],[2,5],[2,0],[7,5],[0,5],[2,0],[4,5],[13,25],[7,10],[7,10],[6,5],[-2,10],[0,5],[9,15],[6,-5],[5,0],[2,0],[9,-5],[4,0],[9,-5],[11,-10],[18,0],[2,5],[2,10],[9,10],[4,5],[5,5],[6,0],[9,5],[2,5],[3,0],[-9,-20],[-11,0],[-2,-5],[-9,-20],[-7,-5],[-11,-20],[0,-10],[20,-10],[0,-10],[2,-15],[5,-5],[0,-15],[4,-5],[7,-5],[2,-5],[-2,-5],[-3,-5],[-2,0],[0,-5],[-2,-5],[0,-5],[-7,10],[0,15],[-4,0],[-7,-10],[0,-5],[-6,-15],[4,0],[0,-6],[-2,-5],[-9,5],[0,11],[-4,0],[-11,-5],[-2,0],[-11,-6],[-5,-5],[-2,-5],[-2,0],[-16,-10],[-9,5],[-6,0],[-5,10],[-6,5],[-5,-15]],[[3264,7848],[-9,-5],[-42,5],[-4,5],[9,20],[-5,20],[3,25],[-5,0],[-9,5],[-2,0],[-4,0],[-9,10],[-2,0],[-5,0],[-6,31],[-16,0],[-11,45],[-11,5],[-6,5]],[[3229,8180],[7,15],[-3,10],[11,15],[0,15],[5,10],[9,0],[24,15]],[[3427,8466],[-4,35],[-13,20],[-9,10],[-2,25],[4,-5],[9,-25],[4,-5],[13,15],[12,0],[4,-10],[4,5],[3,-10],[2,0],[2,5],[0,20],[7,10],[2,5],[6,26],[0,5],[0,5],[-6,15],[-9,0],[-11,15],[-7,-10],[-13,-20],[-18,-5],[-2,10],[2,10],[-6,15],[-2,10],[2,15],[13,15],[7,10],[4,0],[0,-5],[20,10],[15,25],[-2,5],[16,10],[11,5],[4,10],[4,0],[14,25],[11,5],[6,11]],[[3698,8757],[5,-5],[2,0],[2,0],[0,-5],[2,0],[3,-5],[2,0],[0,-5],[2,0],[0,-5],[2,0],[5,-15],[2,-5],[2,-5],[2,-5],[0,-5],[2,0],[0,-5],[3,0],[2,-5],[2,0],[2,0],[0,-5],[3,0],[2,0],[6,0],[3,0],[2,0],[2,-5],[2,0],[0,-5],[2,-5],[0,-5],[0,-5],[3,0],[0,-5],[0,-5],[2,0],[0,-5],[2,-5],[2,0],[0,-5],[2,0],[3,0],[0,-5],[2,0],[2,0],[2,0],[5,-5],[2,0],[2,-5],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[2,0],[5,0],[2,-5],[2,0],[5,0],[2,0],[2,0],[2,0],[2,0],[5,5],[2,0],[2,0],[3,0],[2,0],[0,5],[2,0],[2,5],[5,5],[2,0],[4,0],[0,5],[2,0],[3,0],[6,10],[2,0],[3,0],[2,0]],[[3875,8647],[2,-15],[7,0],[4,0],[0,5],[0,-5],[2,0],[2,0],[0,-5],[5,5],[2,0],[0,-5],[2,-5],[2,-5],[3,0],[2,0],[2,0],[4,0],[3,-5],[2,-10],[6,-15],[7,0],[13,-10],[3,5],[6,-5],[2,0],[3,0],[0,5],[4,-5],[2,0],[5,0],[2,5],[2,-5],[4,0],[5,0],[4,-5],[2,0],[5,0],[13,-11],[2,0],[2,0],[7,-5],[2,0],[5,-5],[2,0],[2,0],[4,0],[3,0],[4,-5],[2,0],[0,-5],[0,-5],[0,-5],[-4,-5],[0,-5],[0,-5],[0,-5],[2,-5],[-2,-10],[2,-15],[2,-5],[7,-5],[-2,-5],[-2,-10],[4,0],[-7,-20],[-6,-15],[4,-5],[2,0],[11,15],[5,-5],[4,5],[-2,0],[-2,5],[0,5],[2,5],[2,0],[7,-10],[11,0],[17,40],[16,20],[4,0],[11,25],[7,5],[2,51],[0,25],[5,0],[2,10],[-5,0],[-2,10],[13,0],[14,-10],[4,5],[11,10],[11,-10],[13,-30],[0,-15],[2,-6],[0,-20],[11,0],[7,15],[7,5],[4,0],[-4,-25],[2,-25],[4,5],[14,-25],[17,-10],[5,-5],[2,-20],[6,-5],[5,-25],[11,-20],[-2,-25],[2,-5],[2,-5],[13,0],[13,-11],[11,-5],[9,5],[3,-5],[8,0],[3,-5],[19,16],[7,10],[4,-5],[3,-5],[-7,-6],[-2,-15],[2,-15],[-4,-40],[-7,-35],[20,10],[20,-25],[-3,-20]],[[3130,8019],[-29,5],[-13,0],[2,15],[-9,5],[-9,10],[-13,20],[0,5],[-6,5],[0,10],[-3,5],[-17,0],[-14,10],[0,5],[-2,5],[0,5],[2,5],[3,5],[0,5],[-3,10]],[[3019,8149],[9,5],[20,0],[11,-15],[2,-10],[5,-5],[20,-5],[28,0],[27,-10]],[[5841,9300],[0,5],[2,10],[-11,5],[-9,0],[-4,-20],[-2,0],[-2,-10],[-3,0],[-4,5],[-9,-10],[-2,0],[-2,-5],[-2,0],[-7,-10],[-2,0],[0,-5],[-2,0],[-3,0],[-2,0],[-2,0],[0,5],[-2,0],[-2,0],[-3,0],[-2,5],[-2,0],[0,5],[-4,-5],[-7,10],[-2,-5],[-5,15],[2,10],[-6,0],[-2,0],[-7,-5],[-4,0],[-7,0],[-7,-10],[-2,0],[-2,0],[0,5],[-11,-15],[-4,0],[0,-5],[-3,-5],[3,-10],[2,-10],[0,-5],[0,-5],[-2,5],[-11,5],[-3,5],[0,10],[-2,5],[-6,-10],[-7,-5],[2,-10],[2,0],[3,-5],[-3,-5],[0,-5],[3,-5],[2,-5],[0,-5],[2,0],[0,-5],[2,0],[0,-5],[2,0],[0,-5],[-2,-5],[0,-5],[-2,-5],[-2,0],[-2,0],[-3,0],[-2,0],[-2,-6],[-7,0],[-2,0],[-2,0],[-2,0],[-3,0],[0,6],[-2,0],[-2,0],[-2,0],[0,5],[-5,0],[-2,0],[-2,0],[-4,0],[-5,0],[-6,0],[-7,0],[-7,0],[-2,-5],[-9,5],[-4,0],[2,-11],[-2,-10],[2,-5],[-4,0],[0,5],[-5,-5],[-2,10],[-4,5],[-5,-5],[-4,0],[-4,11],[2,5],[-2,5],[0,5],[-11,5],[-5,0],[-2,-5],[0,-5],[2,-5],[5,0],[2,-5],[2,-6],[-9,-10],[-7,-5],[3,-5],[2,0],[4,0],[7,-5],[-9,-5],[0,-5],[-9,5],[-6,10],[-3,10],[-2,16],[-2,15],[4,20],[3,15],[-3,5],[-4,-5],[-4,-5],[-5,-5],[-6,-5],[-7,10],[-4,0],[-5,0],[-2,0],[-9,-5],[-9,10],[-4,5],[-4,0],[-5,15],[-4,5],[-14,20],[-4,5],[-2,5],[-13,-5],[-5,0],[-4,0],[-5,0],[-4,15],[-4,15],[-5,5],[0,10],[2,10],[5,10],[6,0],[9,5],[5,5],[0,10],[6,5],[-4,10],[-2,11],[-14,30],[-6,5],[-7,0],[-2,15],[-2,0],[2,5],[2,5],[5,10],[2,0],[0,5],[2,0],[2,5],[2,5],[7,10],[0,5],[2,0],[0,5],[2,5],[3,0],[2,0],[2,-5],[11,15],[2,-5],[11,15],[5,10],[4,5],[5,5],[2,0],[9,0],[-3,5],[-2,5],[7,10],[4,5],[5,0],[8,0],[9,-5],[0,5],[-2,5],[2,5],[0,11],[5,10],[0,5],[-3,0],[-6,0],[-5,15],[-2,25],[2,10],[3,5],[2,5],[6,5],[-2,5],[2,5],[0,5],[0,5],[0,5],[0,5],[3,0],[0,5],[2,0],[2,5],[2,0],[2,0],[3,0],[0,5],[2,0],[2,0],[2,5],[2,0],[0,5],[3,0],[0,5],[2,5],[0,5],[0,5],[2,5],[2,5],[0,5],[2,5],[3,5],[0,5],[2,0],[2,0],[0,5],[2,0],[3,5],[11,11],[2,0],[0,5],[2,0],[0,5],[2,0],[2,5],[3,5],[2,0],[4,5],[2,-5],[14,-5],[4,5],[9,10],[2,-5],[4,5],[9,0],[2,10],[14,-15],[6,-10],[2,-5],[0,5],[0,5],[3,0],[0,5],[2,0],[2,10],[0,5],[2,0],[3,5],[2,5],[2,0],[2,0],[2,0],[3,0],[2,0],[4,0],[7,10],[11,5],[6,0],[5,10],[6,0],[9,10],[9,-5],[4,-10],[7,-10],[2,0],[0,-10],[5,0],[2,0],[7,5],[6,5],[7,5],[4,5],[-2,5],[0,10],[-4,10],[2,15],[-7,0],[-9,5],[-9,5],[-2,0],[-2,5],[0,10],[0,10],[0,20],[4,20],[5,10],[4,6],[5,-11],[4,0],[2,0],[0,-5],[5,-5],[0,-10],[0,-10],[13,0],[15,15],[5,-10],[4,-10],[5,5],[8,10],[7,5],[13,-5],[9,0],[7,-5],[4,-10],[7,-5],[0,-5],[-2,-5],[4,-5],[4,0],[-4,-20],[0,-10],[-4,-10],[-5,0],[-2,-5],[0,-5],[0,-5],[0,-5],[2,0],[0,-5],[2,-5],[3,-5],[0,-5],[2,-5],[9,-5],[-5,-25],[-4,-10],[0,-16],[13,-15],[2,-10],[5,-15],[8,-5],[3,10],[8,10],[7,10],[2,0],[2,5],[7,-5],[0,5],[7,10],[-5,11],[7,5],[9,15],[-3,5],[-2,0],[-6,0],[0,10],[2,10],[2,15],[-2,15],[-2,5],[-7,10],[2,15],[2,15],[0,10],[5,0],[0,10],[0,5],[13,10],[4,0],[3,-10],[4,-10],[0,-10],[-2,-5],[-5,-5],[7,0],[5,0],[6,-10],[5,-10],[6,-5],[2,5],[7,-10],[4,0],[3,0],[2,5],[6,0],[-2,-10],[5,-5],[0,-5],[2,-15],[-2,-5],[2,-10],[4,-10],[2,0],[5,-5],[0,-5],[-5,-5],[-6,-5],[2,-5],[0,-5],[2,0],[0,-5],[2,-6],[0,-5],[3,-5],[0,-5],[0,-5],[0,-5],[2,0],[0,-5],[0,-5],[0,-5],[2,0],[2,-5],[2,-5],[5,-5],[4,0],[2,5],[5,0],[2,5],[0,10],[4,5],[3,-5],[11,20],[4,-5],[7,10],[4,0],[7,-5],[4,5],[5,-10],[2,5],[4,0],[-2,-5],[7,0],[4,-10],[7,-5],[-5,-10],[13,-15],[3,-5],[8,-5],[3,-5],[-3,-10],[3,-10],[-5,-10],[-11,5],[-6,-5],[-7,0],[-2,-5],[-7,5],[-4,-10],[-5,-15],[-13,-10],[2,-10],[-4,-10],[-2,-20],[-2,-5],[2,-5],[4,-5],[5,-16],[4,-15],[0,-5],[7,5],[4,-5],[4,0],[-2,-5],[11,-5],[2,0],[7,-5],[4,-5],[3,-5],[-3,-5],[-6,-20],[0,-5],[-5,-10],[3,0],[-5,-25],[-6,-30],[2,-10],[2,-10]],[[6110,9421],[-7,0],[-8,-5],[-7,-5]],[[6088,9411],[-2,5],[0,5],[0,10],[-5,0],[-8,5],[2,25],[-9,15],[0,20],[-2,10],[-2,-5],[-3,5],[3,0],[-3,10],[0,5],[-6,10],[-3,0],[-4,0],[-2,0],[-2,-5],[-16,-10],[0,-5],[0,-5],[0,-5],[-4,0],[-5,0],[-4,0],[-7,5],[-2,0],[0,5],[5,5],[-11,5],[-7,0],[-4,-10],[-3,0],[-4,0],[-4,10],[-7,0],[4,-25],[18,-15],[7,-35],[-3,-5],[-4,5],[0,-10],[-2,-5],[-2,0],[-5,-5],[-4,-5],[0,-5],[-7,0],[-15,-5],[4,0],[0,-10],[5,-5],[4,0],[0,-5],[-2,-6]],[[6434,9230],[-7,-5],[-11,10],[-4,0],[-4,-5],[-5,-5],[-6,-25],[-16,5],[-9,10],[-4,5],[11,20],[9,20],[-2,0],[-3,5],[-2,0],[-6,5],[-5,0],[-6,5],[-3,0],[-2,5],[-2,5],[0,5],[0,5],[-2,10],[-3,0],[-2,5],[-2,5],[-2,0],[-5,10],[-6,5],[-5,0],[-2,0],[-2,0],[-4,5],[-3,0],[-6,5],[-7,5],[-2,0],[-2,0],[-2,0],[-3,0],[-4,-5],[-2,0],[-2,0],[-3,0],[-4,5],[-2,0],[-2,0],[-5,0],[-6,-10],[-7,0]],[[6260,9335],[-7,15],[0,5],[5,20],[2,10],[2,11],[2,10],[5,10],[6,0],[7,0],[9,5],[-9,15],[-2,0],[-5,0],[-11,5],[3,10],[-3,15],[-2,5],[-7,5],[-2,0],[-2,5],[-2,0],[-2,0],[-7,0],[-9,0],[-6,5],[-11,0],[-7,5],[-7,0],[3,10],[2,5],[0,10],[4,5],[-4,10],[0,5],[-2,5],[0,5],[0,5],[4,-5],[7,5],[4,10],[-2,10],[11,-5],[2,5],[0,5],[2,0],[2,5],[0,5],[3,6],[2,-6],[4,11],[7,-5],[2,10],[16,-10],[0,10],[-7,30],[7,0],[0,5],[11,5],[2,5],[2,0],[2,-5],[0,-10],[2,-20],[9,-5],[-2,0],[2,-5],[-2,-5],[-7,-5],[-6,-6],[0,-10],[6,5],[7,-5],[4,0],[3,-5],[11,-25],[13,5],[2,-5],[-2,-5],[-5,-5],[-8,-10],[0,-5],[8,-5],[0,-5],[3,0],[6,5],[7,0],[2,5],[4,10],[3,-5],[2,0],[13,-5],[0,-5],[5,0],[6,-5],[0,-20],[7,-20],[9,10],[6,0],[5,-5],[6,0],[11,5],[5,0],[2,-5],[4,5],[5,-5],[-3,-5],[-4,-5],[2,-10],[7,-5],[4,-10],[-2,-15],[-7,0],[-11,0],[-4,-5],[-4,-5],[-3,5],[7,10],[2,5],[-6,15],[-3,-10],[-4,-5],[0,10],[-4,5],[-9,-10],[-7,5],[-2,-20],[4,0],[7,5],[4,-10],[-2,-20],[-6,-5],[0,-11],[-5,0],[-2,-5],[2,-10],[-2,-10],[2,0],[2,0],[3,0],[2,0],[2,0],[0,-5],[2,0],[2,0],[3,0],[4,5],[9,-10],[6,-15],[9,-20],[5,-10],[4,-35],[2,-10],[-2,-5],[0,-20],[0,-5]],[[5746,8948],[2,-5],[5,-5],[4,5],[3,0],[4,0],[9,-10],[4,5],[11,-5],[2,5],[5,10],[6,15],[5,-5],[2,5],[4,21],[7,0]],[[8072,8134],[-11,0],[-18,0],[-26,-15],[0,10],[-29,-5],[-2,-5],[-7,0],[-9,0],[-4,15],[-2,5],[0,5],[-2,0],[-3,-5],[-2,5],[-4,0],[2,-10],[-7,-5],[0,-5],[-6,-5],[0,-10],[2,-5],[2,0],[5,-10],[4,5],[9,-10],[4,5],[0,-10],[9,-5],[-4,-5],[2,-5],[-16,-10],[3,-5],[8,0],[3,0],[2,5],[2,0],[5,-5],[2,0],[4,-5],[2,0],[5,0],[-2,-25],[6,0],[2,-10],[-13,-10],[7,-5]],[[7995,7999],[0,-5],[-13,-10],[-7,-5],[4,-10],[-6,0],[-11,-10],[0,-6],[-3,0],[-2,0],[0,-5],[-2,-5],[-7,0],[-2,0],[-4,-5],[-2,-5],[-3,0],[-2,0],[-2,0]],[[7933,7933],[-2,5],[-5,5],[-2,0],[-2,5],[-2,5],[-2,11],[-3,5],[0,5],[-2,0],[-9,15],[14,10],[6,0],[5,-10],[8,0],[5,5],[6,0],[5,-5],[0,-5],[0,-5],[2,-5],[11,5],[9,5],[0,25],[-5,5],[12,10],[-16,10],[-9,-5],[-4,5],[-2,10],[-3,-5],[-2,0],[-4,0],[0,5],[-7,5],[0,15],[-4,0],[2,20],[-4,-5],[0,5],[-11,5],[-3,10],[-8,5],[-9,5],[0,-20],[-5,-10],[-4,-5],[-7,-5],[-4,0],[-9,-5],[-7,-10],[9,-30],[-4,0],[-5,-5],[11,-10],[-2,-10],[7,5],[7,0],[-16,-15],[-7,-10],[-15,0],[-11,-20],[2,-26],[-9,-5],[3,-5]],[[7832,7923],[-3,-10],[-4,-15],[-4,-10],[2,-5],[-2,-15],[-5,0],[5,-5],[-3,-20],[0,-20],[5,-5],[-13,-25],[4,-5],[-4,-20],[2,-10],[-2,0],[4,-6],[-2,-5],[0,-10],[4,-20],[2,-35]],[[7818,7682],[-15,10],[-20,5],[-18,-15],[-28,0],[-16,15],[-22,25],[-2,0],[-4,5],[-2,5],[-5,-5],[-6,5],[-5,-5],[-4,20],[-5,11],[-2,5],[-2,5],[-2,10],[-3,0],[0,5],[0,5],[0,5],[3,5],[0,5],[-20,-15],[-7,10],[-15,-5],[-13,20],[-3,0],[-2,0],[-4,5],[-2,5],[2,0],[0,5],[2,0],[-2,0],[0,5],[-2,0],[0,5],[-3,0],[-2,-5],[-2,5],[0,5],[-2,0],[-2,0],[-3,5],[-2,0],[-2,0],[-2,0],[-3,-5],[-2,-5],[-2,0],[-2,0],[-2,0],[-3,-5],[-2,0],[0,5],[0,5],[-4,5],[-5,0],[-4,0],[-2,5],[0,5],[0,5],[2,0],[0,5],[0,5],[0,5],[-2,0],[-2,0],[-3,5],[-2,0],[-2,-5],[-2,0],[0,-5],[-2,-5],[-3,0],[-4,5],[-2,0],[-2,0],[-5,0],[-2,-5],[-2,0],[-7,5],[-4,0],[-2,-5],[-3,0],[-4,0],[-9,-5],[2,-5],[5,0],[0,-5],[2,-5],[2,0],[7,-10],[0,-5],[2,0],[0,-5],[0,-10],[0,-5],[-4,-5],[0,-5],[2,0],[0,-5],[0,-5],[2,-5],[0,-5],[2,0],[2,0],[0,-5],[-2,-5],[0,-5],[2,-5],[3,0],[0,-11],[4,-5],[2,-5],[0,-5],[-2,0],[-18,-10],[-11,-5],[-15,-15],[-2,-10],[6,-25],[-6,0],[-9,-5],[-7,-10],[-4,-5],[-7,-25],[-4,-25],[-31,-20],[-9,-10],[-2,-10],[0,-10],[2,0],[7,0],[0,-6],[6,-20],[-4,-5],[2,-10],[5,-20],[-7,-15],[4,-20],[-2,0],[0,-5],[-2,-5],[-2,-10],[-2,-10],[0,-10],[0,-5],[0,-5],[2,-5],[2,-5],[2,-5],[2,0],[3,-5],[0,-5],[2,-5],[2,-5],[7,-10],[22,-66],[2,-35],[20,-70]],[[7466,7190],[-25,0],[-15,-10],[-4,0],[-11,5],[-9,20],[-11,10],[-5,10],[3,5],[2,5],[0,5],[-2,5],[-3,0],[-4,0],[-18,-15],[-11,20],[-4,-5],[-5,5],[0,5],[-2,5],[-6,15],[-3,-5],[-8,0],[-7,0],[-2,5],[11,5],[-9,5],[-4,10],[-7,-5],[-9,0],[-6,-10],[-3,-10],[-15,-10],[0,5],[-2,5],[-3,0],[-8,5],[-3,0],[-2,0],[-2,0],[-7,-5],[-6,0],[-9,0],[-4,5],[-5,0],[-2,0],[-2,5],[-5,0],[-2,0],[-2,5],[-9,5],[-6,5],[-3,5],[-4,0],[-2,0],[0,5],[-2,0],[-3,5],[-2,5],[-6,5],[-5,5],[-2,0],[-2,5],[4,15],[20,21],[11,30],[0,10],[7,5],[-3,0],[-2,5],[-2,5],[0,5],[-2,5],[-2,5],[-3,5],[-4,5],[0,5],[-2,5],[4,30],[-9,25],[3,10],[-5,15],[0,10],[-6,6],[2,5],[2,5],[4,0],[3,0],[0,5],[2,5],[2,0],[2,0],[2,5],[5,0],[6,5],[3,0],[2,5],[4,5],[2,0],[3,0],[4,5],[2,5],[0,5],[-17,50],[-7,5],[-7,-5],[-4,0],[-4,0],[-3,-5],[-2,0],[-2,0],[-2,0],[-5,-5],[-6,-5],[0,15],[-16,30],[18,40],[-5,10],[-2,-10],[-6,-5],[-11,-10],[-3,30],[-6,16],[15,-6],[20,6],[2,5],[9,10],[0,15],[9,10],[4,15],[5,0],[0,5],[0,5],[-2,0],[-3,5],[3,5],[2,5],[0,5],[0,5],[-2,0],[-3,10],[0,5],[0,5],[0,5],[3,0],[0,5],[4,5],[0,5],[2,-5],[2,0],[7,0],[2,0],[2,0],[3,0],[2,0],[0,5],[2,0],[0,10],[2,0],[0,5],[-2,5],[0,5],[0,5],[0,5],[0,5],[-4,5],[2,0],[2,5],[2,0],[0,-10],[2,0],[0,5],[3,0],[2,-5],[2,0],[2,0],[5,10],[4,0],[2,5],[2,0],[3,0],[2,0],[2,0],[2,0],[2,5],[5,5],[2,0],[4,0],[3,0],[2,0],[2,-5],[0,-5],[2,0],[16,10],[6,-10],[5,0],[4,10],[16,-5],[0,-10],[8,5],[25,-10],[2,-5],[6,0],[14,-5],[9,5],[13,5],[13,5],[7,5],[4,10],[2,-5],[0,5],[2,0],[3,0],[2,0],[2,0],[2,0],[2,-5],[3,0],[2,0],[2,0],[0,-5],[2,0],[5,5],[4,0],[4,0],[12,5],[6,6],[5,0],[4,10],[2,-5],[2,-5],[5,0],[6,10],[3,5],[4,0],[2,5],[2,0],[3,5],[6,0],[2,5],[5,-5],[2,0],[2,5],[2,-5],[3,0],[2,0],[2,0],[2,0],[2,-5],[3,0],[2,5],[2,-5],[4,0],[5,-5],[2,0],[2,-5],[0,-5],[0,-5],[2,0],[0,-6],[5,0],[4,0],[3,0],[2,0],[2,0],[9,0],[15,11],[9,10],[7,0],[22,10],[8,15],[-4,0],[2,15],[5,-10],[4,15],[-7,20],[7,5],[4,10],[0,25],[-6,20],[2,0],[2,10],[2,5],[0,5],[3,5],[4,0],[0,-5],[5,0],[0,-5],[2,0],[4,5],[2,0],[3,0],[2,0],[2,-5],[4,-5],[3,-5],[4,0],[2,5],[-2,0],[2,5],[2,0],[7,5],[4,0],[5,0],[4,5],[2,5],[5,5],[2,5],[2,0],[5,5],[2,0],[9,0],[6,5],[2,-5],[3,0],[2,0],[4,5],[2,0],[5,5],[13,5],[0,6],[13,5],[9,10],[11,10],[2,5],[7,5],[4,0],[3,0],[2,0],[4,5],[2,5],[3,0],[4,0],[2,0],[0,-5],[5,0],[2,5],[0,5],[2,5],[2,0],[2,0],[3,0],[2,0],[2,0],[-9,15],[-2,15],[0,10],[4,5],[5,10],[7,15],[22,5],[2,-10],[6,0],[0,-10],[-2,-5],[0,-5],[9,5],[7,5],[0,-5],[11,5],[8,-5],[0,-5],[11,0],[11,0],[12,0],[15,-5],[11,-15],[0,-5],[15,5],[3,-15],[15,-15],[11,-5],[4,-10],[22,-10],[3,-5],[17,-15],[3,-11],[-3,-10],[-8,-5],[-18,-10]],[[7818,7682],[0,-15],[0,-35],[-2,-35],[-4,-5],[2,0],[0,-5],[-2,-5],[-5,-41],[-11,-30],[7,-35],[-9,-10],[-6,-10],[2,-15],[-5,-20],[-2,-20],[2,-15],[-6,-20],[-9,-10],[-5,-11],[-6,-15],[-2,-10],[-5,-10],[-13,-20],[-4,-10],[-9,-15],[-7,-5],[-13,-15],[-13,-20],[-13,-15],[-5,-10],[-11,-5],[-15,-15],[-3,0],[-13,5],[-9,-10],[-28,-41],[-11,-5],[-11,0],[-22,-15],[-27,31],[-13,20],[-31,5],[-13,15],[-2,5]],[[7933,7933],[-4,-10],[0,-5],[-11,-5],[-7,10],[-4,0],[4,15],[-4,5],[0,5],[-20,-5],[-9,-5],[-22,-10],[-24,-5]],[[8072,8134],[-11,-15],[-9,0],[-4,-10],[-16,-15],[-26,-20],[2,-5],[2,-5],[-2,-10],[11,-5],[0,-5],[7,-5],[-3,-5],[9,0],[5,-5],[6,-10],[-11,-5],[-9,-10],[-13,5],[-15,-10]],[[6586,7828],[5,10],[8,10],[5,5],[2,0],[2,0],[2,5],[5,20],[9,-5],[6,5],[2,-5],[7,30],[9,0],[-2,10],[4,10],[0,10],[2,10],[2,0],[0,5],[-2,5],[2,6],[-4,10],[-2,0],[2,10],[2,0],[7,25],[11,5],[2,-5],[13,0],[5,15],[0,20],[2,10],[0,15],[-4,10],[2,5],[-2,15],[-5,5],[5,0],[8,0],[9,10],[0,10],[2,5],[9,-5],[16,5],[4,-10],[4,10],[11,10],[3,15],[4,10],[13,-25],[7,5],[7,10],[6,-10],[-6,-15],[8,10],[3,5],[-3,0],[-2,5],[0,5],[2,0],[0,5],[11,-5],[5,10],[0,-5],[2,5],[-2,6],[4,0],[0,5],[13,-5],[-2,5],[7,-5],[9,0],[-5,15],[5,0],[4,-5],[4,5],[-17,15],[-2,0],[0,5],[-5,5],[-6,5],[0,5],[-11,5],[-3,0],[-8,5],[-7,5],[-2,-5],[-11,10],[-7,5],[-2,10],[7,5],[2,5],[-2,15],[-3,5],[5,5],[-11,10],[-11,5],[-9,5],[-11,5],[-5,5],[7,10],[-7,5],[0,20],[-4,-5],[-2,10],[-5,0],[5,5],[2,5],[0,11],[2,-5],[7,5],[0,10],[-2,5],[4,5],[11,5],[7,-10],[13,10],[4,-5],[7,10],[9,5],[2,-5],[11,20],[-2,5],[4,0],[2,0],[0,-5],[11,-15],[5,0],[0,-10],[9,0],[4,-15],[9,10],[-2,5],[8,15],[5,-10],[4,0],[9,10],[7,0],[2,-5],[4,5],[7,10],[4,0],[7,-15],[-2,-5],[2,-5],[-2,-5],[4,-5],[9,-31],[18,11],[2,10],[2,-5],[9,-5],[20,0],[-3,-6],[5,0],[4,-15],[5,0],[9,0],[6,5],[-2,16],[4,0],[7,0],[18,10],[11,-10],[11,15],[13,0],[2,0],[4,5],[7,10],[9,35],[-5,15],[12,20],[2,0],[0,-10],[2,-5],[2,15],[7,-5],[-2,-5],[-5,-20],[9,-10],[2,-5],[2,0],[5,0],[4,5],[-2,5],[7,0],[4,-30],[13,10],[9,-10],[0,-10],[9,5],[4,-5],[25,0],[-7,-10],[2,-21],[-2,0],[7,-5],[-3,-10],[9,-5],[5,15],[6,11],[5,-6],[11,6],[6,-6],[2,6],[9,-6],[-2,-10],[11,0],[4,0],[5,-5],[9,0],[4,-20],[11,-5],[0,5],[13,-5],[11,0],[9,10],[11,5],[13,5],[3,10],[4,10],[4,0],[9,-5],[2,-10],[3,0],[0,-5],[17,0],[5,-10],[0,5],[9,5],[2,0],[2,5],[2,5],[2,0],[3,5],[0,5],[2,6],[13,10],[9,25],[4,0],[-2,5],[0,5],[-2,5],[0,5],[2,5],[0,5],[-2,5],[-2,5],[0,5],[-3,0],[-2,5],[-2,0],[-2,0],[0,-5],[-5,-5],[-2,-5],[-2,0],[-2,0],[-2,0],[0,5],[2,10],[-2,5],[-3,0],[5,20],[11,5],[2,-5],[4,15],[0,5],[-13,0],[-17,30],[-3,-10],[3,0],[0,-10],[-9,0],[-3,-15],[-6,5],[-7,-10],[0,-5],[-13,5],[0,-5],[-4,-5],[-3,0],[-2,0],[-2,0],[-11,10],[-9,0],[-6,20],[2,0],[4,0],[7,5],[6,-5],[0,-10],[5,0],[0,20],[6,0],[5,20],[-7,15],[2,0],[3,0],[2,0],[2,0],[4,5],[11,5],[3,0],[2,0],[2,6],[11,0],[5,10],[8,0],[11,-21],[3,0],[2,5],[0,11],[-5,15],[5,5],[6,0],[-4,5],[4,5],[5,0],[9,0],[2,-10],[11,-5],[2,10],[15,-5],[3,0],[4,15],[0,-25],[-4,-15],[4,0],[7,-21],[2,0],[2,0],[2,0],[3,0],[2,0],[4,0],[2,0],[3,0],[2,0],[4,0],[2,0],[0,-20],[-2,0],[-2,0],[-2,-5],[-2,0],[-3,0],[-2,-5],[-2,0],[-2,0],[-5,-10],[5,-5],[-11,-20],[-9,0],[-2,0],[-3,-20],[0,-10],[3,0],[2,10],[4,5],[11,-10],[14,-5],[8,-5],[0,10],[5,10],[13,-10],[9,-10],[2,5],[9,0],[2,-5],[0,-20],[-2,-10],[-9,0],[-2,-5],[-2,-5],[13,-10],[-5,-5],[-2,0],[-2,-10],[-4,-10],[13,5],[6,5],[7,0],[4,-5],[3,-5],[6,-16],[2,0],[5,0],[2,-5],[4,-10],[0,-15],[14,-5],[2,10],[2,5],[5,10],[2,10],[-5,5],[5,11],[-2,5],[6,5],[0,10],[5,10],[0,15],[8,0],[7,5],[0,10],[7,5],[11,-5],[2,5],[2,5],[4,15],[9,5],[2,5],[3,5],[2,5],[2,0],[2,0],[5,5],[147,201]],[[7818,8687],[27,-50],[37,-5],[42,5],[24,-161],[0,-5],[-2,-20],[0,-5],[5,-15],[2,-5],[4,-15],[11,-15],[11,-15],[7,-5],[2,-5],[16,-41],[6,-20],[0,-5],[2,-5],[5,-20],[2,-5],[2,-5],[0,-5],[7,0],[4,-5],[5,0],[2,0],[0,5],[4,0],[0,10],[2,5],[3,10],[0,10],[4,0],[2,0],[2,-5],[5,-10],[2,0],[4,-25],[3,-5],[4,-5],[2,-5],[5,-5],[6,-5],[9,0],[13,0],[9,-5],[11,0],[13,-5],[9,-5],[2,0],[3,-5],[2,0],[2,-5],[2,-5],[0,-5],[0,-5],[-4,-10],[-13,-20],[-11,-21],[-3,-5],[0,-5],[-2,-5],[0,-5],[2,-10],[0,-5],[3,-5],[6,-30],[2,-15],[0,-5],[0,-25],[3,-35],[0,-5],[0,-15],[6,-5],[5,-10],[2,-6],[0,-5],[2,0],[0,-5],[7,-10],[13,-10],[4,-5],[3,0],[4,-5],[4,-10],[0,-10],[0,-20],[0,-10],[-2,-10],[-6,-15],[-7,-15],[-9,-15],[-2,-5],[-9,-10],[-15,-5],[-3,0],[-6,0],[-7,0],[-2,0],[-4,0],[-16,-5],[-9,-5],[-4,0],[-2,0],[-2,-5],[-5,5],[-11,-15],[-13,-31],[-16,-25],[-8,-15],[-5,-15],[-2,-5],[-4,-25],[-3,-10],[-2,-20],[-6,-35],[-5,-25],[-4,-16],[0,-5],[-5,-15],[-6,-15],[-9,-10],[0,-5],[-18,-20],[-9,-5],[-2,-5],[-17,-25],[-3,0],[-2,-5],[-2,-5],[0,-5],[-2,-5],[0,-5],[-2,-20],[-3,-5],[-4,-25],[-2,-5],[-2,-5],[-3,-6],[-8,-10],[-9,-10],[-11,-10],[-7,-10],[-2,-5],[0,-10],[0,-25],[-2,-5],[-3,-15],[-17,-80],[-2,-10],[-20,-51],[-13,-35],[-3,-10],[-4,-15],[-2,-20],[0,-15],[-2,-10],[-7,-20],[-13,-46],[-2,-10],[-3,-30],[-4,-30],[0,-15],[0,-15],[9,-60],[4,-20],[7,-26],[9,-25],[11,-25],[6,-15],[5,-20],[8,-40],[5,-50],[4,-36],[7,-60],[0,-15],[-2,-15],[-7,-45],[-4,-5],[-5,-10],[-22,-25],[-24,-36],[-24,-20],[-11,-15],[-5,-10],[-2,-5],[0,-10],[9,-45]],[[7759,6200],[4,-15],[9,-25],[7,-20],[4,-10],[11,-21],[33,-80],[2,-5],[5,-30],[2,-5],[2,-10],[2,-5],[5,-10],[2,-5],[2,-10],[2,-5],[3,-5],[11,-20],[2,-6],[4,-10],[42,-80],[-11,-15],[-13,5],[-20,-10],[-4,0],[-9,-10],[-7,-15],[5,-15],[-3,-5],[0,-40],[-28,-11],[-5,-25],[-6,5],[-5,-25],[-4,-15],[0,-10],[-7,-5],[3,-5],[-16,-10],[-2,-30],[-13,-20],[-5,-25],[2,-25],[20,-21],[-13,-20],[-15,-10],[-9,-25],[-9,-5],[2,-15],[5,-30],[-7,-25],[-24,0],[-5,0],[0,-10],[5,-15],[-5,-20],[-2,-10],[-9,-11],[-17,31],[-7,5],[-11,25],[-11,5],[-7,10],[-8,5],[-5,0],[-2,5],[-4,0],[-11,10],[-9,0],[-7,0],[-9,0],[-2,5],[-2,0],[-4,0],[-9,10],[-11,10],[-11,5],[-31,0],[-16,-5],[-30,15],[-9,-10],[-9,20],[-20,0],[-18,-5],[-8,0],[-11,20],[-7,5],[-13,0],[-7,-5],[-18,10],[-4,0],[-11,-10],[-13,10],[-11,0],[-18,-15],[-24,20],[-5,25],[-11,16]],[[7699,8456],[-2,-15],[5,-5],[-5,-15],[5,-5],[0,-5],[8,0],[-2,-10],[7,0],[9,-5],[13,-5],[-5,-20],[0,5],[7,5],[4,5],[9,5],[2,5],[3,0],[2,0],[0,5],[-2,5],[-5,5],[-4,5],[-2,5],[-3,5],[-2,5],[-4,0],[-5,5],[-13,5],[-9,5],[-2,0],[-6,10],[-3,0]],[[7499,8491],[-7,5],[-2,5],[-2,5],[2,5],[7,0],[4,-5],[-2,-15]],[[7060,1768],[-13,0],[-31,45],[-7,5],[-8,21],[-3,20],[-26,60],[-18,25],[-48,35],[-2,5],[-9,40],[0,21],[-7,30],[-2,10],[-9,0],[-4,-5],[-7,20],[11,10],[5,110],[-14,41],[-17,25],[-3,15],[-11,30],[-8,50],[2,15],[11,10],[9,30],[8,21],[5,5],[4,5],[7,30],[-7,20],[-13,25],[-4,15],[4,10],[9,15],[-9,20],[9,25],[-2,15],[4,0],[24,21],[14,10],[2,15],[9,25],[2,30],[-2,20],[0,15],[4,10],[-4,20],[-5,35],[-9,26],[9,35],[11,20],[-9,15],[-4,20],[26,20],[-2,35],[-26,71],[-2,25],[2,0],[0,10],[-5,25],[9,20],[2,15],[3,20],[4,25],[-2,15],[-20,41],[0,20],[-13,15],[-11,10],[-29,-20],[-15,5],[-7,10],[-13,10],[6,15],[-4,15],[-2,5],[-11,10],[-2,10],[2,10],[-16,40],[-11,10],[-9,20],[-4,26],[2,30],[-4,25],[-2,20],[-7,5],[0,15],[11,10],[2,20],[-4,10],[-5,40],[14,36],[-5,15],[9,20],[0,20],[7,25],[6,15],[5,5],[0,15],[4,20],[16,5],[-5,10],[5,10],[-3,10],[-13,16],[-6,10],[0,30],[-14,-5],[-6,10],[-9,10],[-11,0],[-11,25],[-11,15],[-22,5],[-27,-15],[-24,-30],[-15,5],[-9,-5],[-5,40],[7,35],[-13,60],[-11,11],[-2,-11],[0,-30],[-20,-25],[-2,0],[-18,10],[-13,0],[-5,10],[-4,0],[-9,-15],[-15,-5],[-5,-10],[-6,-5],[-5,-20],[5,-30],[22,-45],[-5,-5],[2,-20],[-17,-26],[-11,-10],[-20,-15],[-13,-15],[-22,-10],[-5,-10],[-28,-10],[-9,-10],[-11,-5],[-24,-35],[-25,5],[-4,20],[0,15],[-64,-40],[-35,25],[-51,30],[-7,-5],[-8,5],[-9,10],[-11,-15],[-16,-5],[-24,25],[-7,-10],[-6,-10],[-7,0],[-2,-10],[-29,15],[-2,15],[-2,10],[-5,0],[-6,10],[-11,-5],[-16,0],[-11,-5],[-4,0]],[[7759,6200],[0,15],[13,5],[0,-15],[4,-15],[5,0],[2,10],[11,25],[7,-5],[6,-5],[3,0],[2,15],[9,-5],[17,0],[5,5],[6,15],[31,10],[20,10],[9,-5],[4,-10],[7,-5],[6,-10],[3,-10],[2,-30],[6,-10],[7,0],[11,10],[9,10],[9,0],[11,5],[6,-5],[16,10],[9,10],[4,0],[4,10],[5,0],[4,0],[7,15],[9,-5],[4,-5],[18,-30],[13,-5],[4,-5],[3,0],[0,-5],[2,0],[9,0],[13,5],[4,5],[5,5],[2,5],[4,20],[2,5],[3,0],[15,-5],[9,0],[2,-5],[2,0],[7,5],[4,5],[2,0],[12,-5],[4,0],[2,5],[7,5],[4,5],[2,0],[7,0],[0,-5],[0,-5],[0,-5],[13,-15],[0,-5],[2,0],[5,0],[4,-5],[2,-5],[9,-5],[5,0],[4,0],[4,5],[9,5],[0,-5],[2,-5],[-6,-10],[2,-10],[13,-10],[9,-5],[5,-5],[13,0],[2,0],[26,-10],[7,0],[0,5],[0,-5],[2,-5],[7,0],[0,-10],[4,-5],[7,-5],[4,0],[13,5],[9,0],[3,0],[13,5],[11,0],[13,0],[7,-5],[4,0],[0,-5],[4,-6],[3,0],[4,-5],[0,-5],[4,-10],[3,0],[4,-5],[4,-5],[11,-5],[9,-15],[0,-5],[3,0],[11,-15],[11,0],[15,-10],[2,-5],[13,-20],[5,0],[6,-10],[7,0],[2,5],[0,5],[2,0],[5,0],[6,5],[14,0],[4,5],[5,5],[2,5],[2,10],[2,10],[2,0],[3,0],[4,-5],[2,0],[9,0],[18,-5],[2,0],[2,0],[4,-15],[3,0],[-3,-5],[-6,-5],[-2,-5],[-3,-5],[-8,-5],[-3,0],[3,-5],[2,-10],[2,-10],[0,-10],[4,0],[14,-10],[2,-5],[15,-10],[0,-5],[0,-20],[0,-6],[2,-5],[3,-10],[0,-5],[2,-5],[-2,-10],[-7,-5],[-7,-10],[-4,-10],[4,-10],[-4,-5],[-9,-20],[-6,-10],[-3,-10],[3,-5],[0,-5],[0,-10],[-9,-15],[-2,-10],[13,-25],[4,-5],[-2,-21],[-2,-5],[-5,-10],[3,-10],[2,-35],[9,-5],[-5,-10],[-2,0],[0,-5],[-4,-10],[2,0],[6,0],[11,-10],[22,-5],[7,-10],[5,-10],[0,-5],[2,0],[2,0],[2,-5],[2,0],[9,0],[2,0],[7,0],[7,-5],[0,-5],[2,-10],[2,0],[15,-20],[29,-21],[7,0],[15,-5],[5,11],[4,0],[4,0],[14,5],[6,-11],[2,-10],[9,5],[11,5],[2,11],[9,-5],[5,0],[4,-21],[0,-25],[7,0],[6,0],[7,-15],[15,-5],[7,-5],[4,-5],[9,-5],[9,10],[11,0],[7,5],[0,-5],[2,-5],[4,-10],[2,-5],[5,0],[2,-5],[4,-5],[11,-35],[7,-5],[7,0],[4,-10],[2,-5],[5,-15],[4,-5],[5,0],[6,-10],[7,-10],[-5,-21],[-2,-5],[2,-5],[3,-30],[8,-10],[5,0],[0,-5],[4,0],[31,5],[22,-10],[7,5],[13,-10],[-2,-5],[0,-10],[0,-10],[0,-5],[0,-5],[13,-15],[9,-20],[6,-20],[14,5],[15,15],[2,5],[2,5],[5,5],[6,5],[12,-10],[11,0],[13,5],[2,5],[2,0],[5,15],[4,-5],[11,0],[4,0],[5,-10],[2,-5],[11,15],[13,0],[2,0],[7,15],[2,0],[5,0],[4,0],[7,10],[4,5],[2,10],[16,15],[9,20],[11,5],[11,-10],[33,10],[9,-5],[22,0],[-5,15],[2,15],[-2,21],[2,0],[0,5],[5,15],[0,25],[-2,5],[-5,10],[-2,5],[-7,5],[0,15],[-2,5],[0,15],[7,5],[2,5],[7,15],[6,55],[2,11],[0,5],[3,0],[4,10],[2,10],[0,10],[0,25],[0,5],[0,20],[38,-10],[8,0],[3,0],[9,-5],[24,-15],[26,-15],[7,-5],[2,0],[7,-10],[6,25],[5,0],[2,0],[13,5],[16,0],[2,20],[0,5],[-2,5],[-11,15],[-3,5],[-4,10],[-5,10],[0,10],[3,10],[2,15],[0,5],[0,5],[2,5],[2,0],[7,5],[7,5],[15,0],[9,10],[4,21],[0,25],[0,5],[2,5],[3,10],[4,10],[4,20],[11,25],[0,5],[0,15],[9,5],[7,30],[0,5],[4,5],[14,5],[11,0],[24,-5],[22,36],[2,5],[4,5],[5,5],[2,0],[4,0],[5,-5],[17,-15],[3,-11],[0,-10],[2,-5],[2,-10],[7,-10],[4,0],[2,-5],[5,-15],[2,-5],[7,-10],[6,0],[5,-5],[4,-5],[9,-10],[0,-5],[4,-5],[2,-5],[-2,-15],[0,-5],[0,-5],[-4,-10],[-2,-10],[0,-5],[-3,-10],[0,-5],[0,-5],[0,-5],[3,0],[4,-10],[2,0],[2,-5],[3,0],[2,0],[6,0],[3,-6],[2,0],[4,0],[2,0],[5,-5],[4,-5],[5,0],[4,0],[7,-5],[2,0],[7,0],[6,0],[2,-5],[3,-5],[2,0],[6,-5],[7,-5],[4,-5],[3,0],[4,-5],[2,-5],[2,-5],[3,-10],[11,-10],[2,-5],[4,0],[7,0],[9,-5],[-3,-10],[-2,0],[0,-5],[5,-5],[-5,-10],[0,-10],[2,-5],[3,-10],[0,-5],[0,-5],[0,-5],[-3,-10],[0,-5],[0,-5],[0,-5],[-2,-5],[0,-5],[0,-5],[0,-11],[-2,0],[-2,-10],[-2,0],[-3,0],[-2,-5],[-2,0],[-2,-5],[0,-5],[0,-5],[-2,-15],[0,-5],[0,-5],[-3,-5],[-2,-5],[0,-5],[0,-5],[0,-5],[0,-10],[0,-10],[-2,0],[0,-5],[-4,-10],[-3,-5],[-2,-5],[-2,-5],[-4,-5],[-5,-10],[-2,-5],[7,-10],[4,-10],[-2,-15],[4,-15],[0,-6],[0,-15],[-2,-15],[0,-5],[-2,-5],[-2,-15],[0,-5],[0,-5],[4,-25],[4,-30],[-6,-5],[-11,-35],[4,-10],[0,-15],[-6,-10],[-7,5],[-2,-16],[-5,-10],[7,-25],[-9,-15],[0,-20],[5,-5],[-7,-25],[-11,-40],[-4,-5],[0,-10],[-20,-15],[-9,-5],[-11,0],[-2,-10],[-5,-5],[2,-5],[-4,-21],[-7,0],[0,-5],[14,-10],[2,-10],[9,-10],[0,-10],[2,-5],[9,-20],[6,-15],[0,-25],[5,-25],[-3,-40],[-2,-11],[-15,6],[-29,-41],[-24,-20],[0,-10],[-24,-25],[6,-15],[11,-10],[5,-25],[9,-15],[8,-10],[-2,-20],[-2,-15],[-2,-16],[-16,-15],[-11,0],[-22,-80],[-11,-10],[-9,-5],[-4,-5],[2,-5],[5,-15],[8,-25],[5,-25],[-2,-21],[6,-35],[-4,-10],[2,-20],[4,0],[5,-10],[0,-20],[9,-15],[4,-25],[-4,-10],[4,-10],[16,-10],[24,15],[50,5],[7,10],[35,-40],[3,0],[46,-81],[11,-10],[7,0],[-3,-20],[-13,-30],[4,-35],[-6,-30],[2,-10],[7,-6],[-11,-40],[4,-20],[-9,-10],[-9,-20],[0,-15],[-4,-5],[-2,-20],[9,-30],[-16,-46],[0,-10],[2,-10],[-13,-10],[-15,-5],[0,-20],[-7,-10],[-9,-20],[-33,30],[-6,20],[-25,30],[-11,21],[-8,0],[-31,-31],[-7,-5],[-9,5],[-11,10],[-11,16],[-9,0],[-8,10],[-5,5],[-6,5],[-16,10],[-24,0],[-2,-15],[-3,-21],[-17,-25],[-9,-5],[-18,30],[-11,16],[-13,-21],[-6,0],[-11,-5],[-7,10],[-16,0],[-11,6],[-4,10],[2,15],[2,15],[-6,15],[-7,20],[-6,25],[-22,15],[-9,5],[-7,20],[-13,-5],[-22,-30],[-18,20],[-4,15],[-7,55],[0,11],[2,10],[7,20],[7,20],[8,10],[9,25],[7,10],[-5,10],[-26,50],[-11,25],[-2,26],[2,15],[-2,5],[-5,-5],[-4,-5],[0,-5],[-7,0],[-6,-5],[-5,-11],[-4,0],[-4,-5],[-3,-5],[-2,-5],[0,-5],[-4,-5],[0,-10],[0,-5],[-5,-15],[-4,-10],[-20,20],[-29,10],[-2,5],[0,5],[2,5],[-22,-10],[-42,-40],[-8,0],[-5,0],[-13,-5],[-18,-20],[-15,0],[-2,-15],[-5,0],[-13,-15],[-33,10],[-13,20],[-11,0],[-7,-30],[0,-10],[5,-10],[-7,-15],[-2,-20],[9,-26],[4,-15],[-11,-25],[-4,-20],[-38,-10],[2,-20],[11,-20],[-6,-20],[-9,-10],[-13,-10],[-5,-20],[-4,-25],[-9,-6],[-4,-15],[-33,-10],[-5,-20],[0,-5],[5,-15],[15,-20],[-7,-15],[7,-30],[-7,-50],[-8,-10],[-11,-5],[4,-31],[11,-20],[-7,-20],[-2,-10],[0,-20],[7,-10],[-11,-30],[0,-20],[4,-5],[13,-25],[3,-31],[4,-5],[-4,-25],[-11,-15],[0,-5],[-7,-5],[-4,-15],[0,-15],[-7,-10],[7,-20],[19,-10],[3,-5],[8,5],[5,-15],[0,-30],[4,-20],[9,-11],[15,11],[7,5],[7,-5],[6,-16],[-2,-10],[5,-10],[24,10],[11,-10],[9,0],[4,20],[7,0],[6,16],[18,-11],[4,16],[18,10],[4,5],[5,-5],[4,-10],[22,-5],[0,-6],[9,-20],[2,-35],[0,-10],[5,-5],[11,10],[4,5],[7,0],[15,-45],[-9,-10],[-2,-10],[4,-60],[-4,-20],[-13,-11],[-16,5],[-4,0],[-9,0],[-17,-20],[-16,-20],[0,-15],[-4,-25],[6,-30],[3,-15],[-14,-5],[-11,-15],[-11,-20],[-11,0],[0,-5],[0,-36],[-6,-15],[-3,-25],[0,-20],[18,-50],[9,-45],[15,-10],[20,-30],[13,-6],[-2,-20],[18,-30],[15,-5],[2,-5],[7,-20],[-7,-20],[18,-15],[-2,-25],[2,-10],[2,0],[0,-20],[11,-5],[9,-15],[9,-46],[-2,-15],[-53,-75],[-11,-50],[-31,-25],[-7,5],[-13,-11],[-9,6],[-22,5],[-13,10],[-9,0],[-9,5],[-13,-5],[-9,-10],[-8,-5],[-23,-41],[-6,5],[-5,10],[-6,0],[-9,26],[-7,0],[-8,15],[-7,-5],[0,5],[-11,10],[2,5],[9,10],[11,15],[0,30],[7,10],[0,15],[8,5],[-4,40],[-7,5],[5,5],[-9,46],[-22,15],[-11,15],[-7,5],[-17,20],[-42,15],[-29,20],[-9,55],[3,5],[6,0],[5,20],[6,0],[0,15],[-2,5],[-4,0],[-5,11],[9,15],[0,15],[-11,5],[-11,20],[-11,15],[-11,10],[6,25],[7,30],[9,20],[2,10],[11,10],[-2,15],[2,6],[-4,0],[4,25],[-4,5],[-20,0],[-2,5],[-14,20],[-8,5],[-7,15],[-15,15],[-18,50],[7,20],[-14,5],[-42,-20],[-4,-5],[-4,-10],[2,-15],[0,-5],[-13,-10],[-5,25],[-6,5],[-7,-10],[-20,55],[-17,-15],[-9,-5],[-20,-20],[-7,0],[0,-10],[-9,-15],[-26,-25],[-7,10],[-4,-5],[-2,0],[-11,0],[-7,-5],[-11,10],[-7,-15],[-8,0],[-5,0],[-4,-5],[-11,0],[-2,0],[-3,-15],[-8,-15],[-20,-25],[-7,0],[-13,-10],[-16,-21],[-19,-5],[-11,-10],[-7,0],[-15,-30],[-18,5],[-18,15],[-15,36],[-18,10],[-9,20],[-8,-10],[-5,5],[-31,-51],[11,-40],[-11,-10],[0,-10],[-8,-10],[-5,-15],[2,-10],[11,-5],[7,-5],[0,-35],[-2,-10],[-16,-25],[-6,-41],[0,-15],[-2,-10],[-27,-10],[-18,15],[-11,-5],[-15,20],[-2,15],[-11,15],[-11,-15],[-5,-20],[-11,5],[-9,-5],[-6,-5],[-5,-10],[-8,0],[-3,-5],[0,-10],[-11,-5],[-6,-10],[-13,-5],[-27,10],[-4,0],[-7,-5],[-20,40],[-6,-5],[-18,10],[-13,-10],[-7,5],[-15,-5],[-2,5],[-11,5],[-9,15],[-5,0],[-9,10],[-6,0],[-5,15],[-4,11],[-7,0],[-4,0],[-11,-21],[-26,36],[-5,10],[-4,5],[-7,15],[-2,5],[-5,10],[-4,5],[-4,15],[-14,25],[0,5],[0,5],[0,10],[-4,5],[-4,0],[-3,5],[0,10],[0,5],[-4,5],[-2,20],[0,15],[-2,5],[0,6],[-3,10],[0,10],[0,5],[-2,5],[-4,5],[-5,10],[-4,5],[-7,30],[-8,15],[-25,10],[-9,20],[-6,0],[-7,5],[-22,10],[-4,10],[4,20],[-4,15],[9,10],[6,26],[-4,10],[0,30],[-5,40],[-6,20],[-2,15],[-9,15],[-5,25],[9,56],[-2,25],[9,25],[-5,20],[3,25],[-3,30],[0,30],[11,15],[5,16],[-5,50],[-4,5],[-26,0],[-3,20],[27,5],[4,65],[-4,35],[4,15],[0,6],[-9,-6],[-8,-15],[-47,-35],[-11,-25],[-9,-20],[3,-15],[-5,-20],[0,-30],[-13,-15],[-11,-31],[-9,0],[-24,16],[-4,10],[-14,5],[-4,30],[-7,5],[0,10],[-6,0],[-5,10],[-4,0],[-9,25],[-7,0],[-4,35],[2,10],[7,5],[0,25],[-11,5],[-9,21],[-4,5],[-16,-31],[-9,5],[-26,-5],[-5,10],[-57,-10],[-13,-15],[-9,0],[-22,-20],[-18,0],[-8,-25],[0,-20],[-11,-20],[2,-10],[4,-15],[-2,-40],[-4,-5],[-3,-21],[5,-15],[6,-10],[-4,-10],[-9,-20],[-15,-20],[-7,-5],[-11,-5],[-13,0],[-5,-10],[-4,0],[4,-45],[-2,-25],[5,-10],[8,-15],[16,-21],[7,-15],[8,-5],[5,-10],[6,10],[5,0],[4,-25],[7,0],[2,-15],[0,-15],[4,-20],[-8,-10],[6,-5],[-4,-20],[-9,-15],[7,-30],[4,-10],[7,-6],[0,-10],[-7,-10],[-2,-15],[-5,0],[3,-10],[-3,-10],[-6,-5],[4,-10],[-2,-20],[4,-5],[11,-45],[16,-5],[13,-5],[4,-15],[-2,-15],[7,-31],[-16,-30],[-2,-10],[2,-20],[9,-20],[5,0],[-7,-20],[-2,-30],[-2,-5],[-20,-15],[-7,-25],[5,-15],[0,-41],[-27,-40],[-9,-40],[-19,-20],[0,-25],[-5,-20],[-15,-15],[4,0],[2,-21],[-9,-30],[5,-25],[-7,-20],[5,-15],[0,-25],[-5,-25],[-4,-10],[-16,0],[-8,5],[-22,-15],[-9,-5],[4,-26],[-6,-15],[-3,-35],[-11,-15],[-15,-5],[-11,-10],[-9,-45],[0,-15],[-7,-10],[0,-25],[7,-10],[-7,-15],[0,-26],[-17,-20],[-11,-25],[-20,5],[-11,5],[-16,-5],[-4,-5]],[[3875,8647],[0,5],[2,0],[2,0],[2,5],[3,0],[2,5],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[5,0],[4,5],[2,0],[5,0],[22,5],[6,0],[3,0],[2,0],[4,0],[2,0],[0,5],[3,0],[2,0],[2,0],[0,5],[2,0],[2,5],[3,5],[2,0],[2,5],[4,0],[3,0],[4,5],[2,0],[2,0],[5,5],[2,0],[2,0],[2,5],[3,0],[2,0],[2,0],[2,0],[2,0],[7,5],[4,0],[3,0],[2,0],[2,0],[0,5],[2,0],[2,0],[3,0],[2,5],[2,0],[2,0],[3,5],[2,0],[4,5],[2,0],[3,0],[0,5],[2,0],[0,5],[0,5],[2,5],[2,0],[0,5],[0,5],[2,0],[3,0],[0,5],[2,0],[0,6],[2,0],[2,0],[0,5],[2,0],[3,5],[2,0],[2,0],[0,5],[2,0],[2,0],[0,5],[3,0],[0,5],[2,5],[2,5],[0,10],[0,5],[2,0],[0,5],[0,5],[0,5],[0,5],[2,5],[0,5],[3,5],[2,10],[0,5],[2,5],[0,5],[2,0],[2,0],[3,5],[2,0],[2,0],[2,0],[2,0],[3,0],[4,-5],[4,0],[3,0],[2,0],[2,0],[0,-5],[2,0],[3,-5],[2,-5],[2,-5],[2,0],[0,-5],[2,0],[3,0],[2,0],[2,0],[4,0],[3,0],[2,0],[2,0],[2,5],[2,0],[3,0],[2,0],[2,0],[2,5],[5,5],[2,0],[2,0],[0,5],[2,0],[2,5],[3,0],[2,5],[2,0],[2,0],[2,0],[5,0],[4,0],[2,5],[3,0],[2,0],[2,0],[4,0],[3,0],[2,-5],[2,0],[2,0],[2,0],[5,5],[4,0],[3,0],[2,0],[2,0],[2,0],[2,-5],[3,0],[2,0],[2,0],[2,0],[0,-5],[2,0],[3,0],[0,-5],[2,0],[4,-5],[2,-5],[3,-5],[2,-5],[2,0],[2,-5],[2,0],[0,-5],[3,0],[2,-5],[2,-10],[2,0],[2,-5],[3,-15],[2,-5],[2,-5],[0,-5],[0,-5],[2,0],[0,-5],[-2,-5],[0,-5],[0,-5],[-2,0],[-2,-11],[-3,-5],[0,-5],[-2,0],[0,-5],[0,-5],[2,0],[0,-5],[0,-5],[0,-5],[3,-5],[0,-5],[2,-5],[0,-5],[2,0],[0,-5],[2,0],[2,-5],[3,0],[0,-5],[2,0],[2,-5],[2,0],[2,0],[0,-5],[3,0],[2,0],[2,0],[4,0],[5,0],[2,0],[2,0],[5,0],[2,0],[2,0],[2,0],[3,0],[2,0],[0,-5],[4,0],[5,-5],[4,0],[0,-5],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[2,0],[0,5],[3,0],[2,5],[2,5],[0,5],[2,0],[0,5],[0,5],[2,5],[0,5],[0,5],[0,5],[0,5],[3,0],[0,5],[2,0],[2,5],[2,0],[0,5],[2,0],[3,0],[2,0],[2,0],[2,0],[2,0],[3,0],[4,-5],[4,-5],[3,0],[2,0],[2,0],[2,0],[2,0],[3,-5],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[4,0],[5,0],[2,0],[2,0],[2,5],[3,0],[2,0],[2,0],[2,0],[2,0],[3,0],[6,0],[2,0],[5,0],[2,0],[2,0],[2,0],[3,0],[2,0],[6,-5],[3,0],[2,0],[2,-5],[4,-5],[3,0],[0,-5],[2,0],[2,0],[0,-5],[2,0],[2,0],[5,0],[2,-5],[2,0],[3,0],[2,5],[2,0],[2,0],[2,0],[0,5],[3,0],[2,0],[4,0],[2,0],[5,0],[2,0],[2,5],[2,0],[5,0],[2,0],[2,0],[2,5],[3,0],[2,0],[2,0],[7,5],[2,0],[0,5],[2,0],[2,5],[2,5],[3,0],[2,0],[2,5],[2,5],[2,0],[5,5],[0,5],[2,0],[0,5],[2,0],[2,5],[3,-5],[2,0],[2,0],[2,5],[3,0],[2,0],[2,0],[2,6],[2,0],[3,-6],[2,0],[2,0],[2,-5],[2,-5],[3,-5],[2,0],[2,-5],[2,0],[0,-5],[2,0],[3,0],[0,-5],[4,0],[2,0],[0,-5],[2,0],[3,0],[2,0],[2,0],[0,5],[2,0],[2,0],[3,0],[2,0],[2,0],[2,5],[2,0],[3,5],[2,0],[2,5],[2,5],[2,0],[0,5],[3,0],[0,5],[2,6],[0,5],[2,5],[0,10],[0,5],[0,5],[0,5],[0,5],[0,5],[2,5],[0,5],[0,5],[2,0],[0,5],[3,5],[2,5],[2,0],[0,5],[4,5],[3,0],[0,5],[2,0],[2,0],[2,5],[3,0],[2,0],[2,0],[2,0],[5,0],[8,-5],[3,0],[2,0],[2,0],[2,0],[2,5],[5,0],[4,0],[2,0],[3,0],[2,0],[2,0],[2,0],[0,5],[2,0],[0,5],[0,5],[0,5],[0,5],[0,5],[0,5],[3,0],[2,5],[2,0],[2,0],[2,0],[0,5],[3,0],[2,5],[2,0],[2,5],[2,0],[3,0],[2,0],[2,5],[2,0],[2,0],[3,0],[2,-5],[2,0],[2,0],[5,-5],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[0,5],[2,0],[3,5],[2,0],[2,5],[0,5],[2,0],[0,5],[2,5],[3,0],[0,5],[2,5],[2,0],[2,0],[2,5],[3,0],[2,0],[6,5],[3,0],[2,0],[0,6],[2,0],[2,5],[2,5],[0,5],[3,5],[2,5],[2,5],[2,10],[0,5],[2,0],[0,5],[3,5],[2,0],[0,5],[2,0],[2,5],[2,5],[3,0],[2,0],[0,5],[2,0],[5,0],[0,5],[2,0],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[2,0],[3,-5],[2,0],[2,0],[2,0],[2,-5],[3,0],[2,-5],[2,0],[2,0],[0,-5],[2,0],[0,-5],[0,-5],[3,0],[0,-5],[0,-5],[2,-5],[0,-5],[0,-5],[0,-5],[2,-5],[0,-5],[0,-5],[2,0],[0,-5],[2,0],[3,0],[2,0],[2,0],[2,5],[2,5],[3,0],[0,5],[2,0],[2,10],[2,0],[0,5],[2,0],[0,5],[3,0],[2,5],[2,0],[2,0],[2,0],[0,-5],[3,0],[2,0],[2,0],[2,5],[2,0],[3,0],[2,0],[4,5],[5,0],[2,5],[2,0],[2,0],[5,0],[2,0],[2,0],[2,0],[3,-5],[0,-5],[2,-5],[0,-5],[2,0],[0,-5],[2,0],[2,-5],[3,0],[2,0],[2,5],[2,0],[2,0],[3,0],[2,0],[2,0],[4,5],[3,0],[2,0],[2,0],[2,5],[2,0],[3,0],[0,-5],[4,0],[2,0],[2,0],[3,0],[2,0],[2,-5],[2,0],[2,0],[3,-5],[2,0],[4,-5],[3,0],[2,-5],[2,-5],[2,0],[0,-5],[-2,-6],[0,-5],[0,-5],[-2,-10],[0,-5],[-2,-10],[0,-5],[0,-5],[0,-5],[0,-5],[2,-5],[2,-5],[0,-5],[2,-5],[2,-5],[3,-5],[2,0],[0,-5],[2,0],[2,0],[2,-5],[3,0],[4,0],[2,-5],[2,0],[3,0],[2,-5],[2,-5],[2,0],[2,-5],[3,0],[0,-5],[2,-5],[2,0],[2,-5],[0,-5],[2,-5],[3,0],[2,-5],[2,-5],[2,-5],[2,0],[3,-5],[2,0],[2,0],[2,-5],[2,0],[3,0],[2,0],[2,0],[4,0],[3,-5],[2,0],[2,0],[7,0],[2,0],[2,5],[2,0],[3,0],[2,0],[4,0],[5,0],[4,0],[7,-5],[2,0],[4,0],[2,0],[3,0],[2,0],[2,0],[2,-5],[2,0],[3,0],[2,0],[2,0],[2,0],[5,-5],[2,0],[2,0],[2,0],[5,0],[4,0],[2,-5],[2,0],[3,0],[2,0],[2,-5],[4,0],[0,-5],[3,0],[0,5],[2,0],[2,5],[0,5],[2,0],[0,5],[0,5],[3,5],[0,5],[2,0],[0,5],[2,0],[0,5],[2,0],[0,5],[2,0],[3,5],[2,0],[2,5],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[2,-5],[3,0],[2,0],[2,0],[0,-5],[2,0],[2,0],[5,-5],[4,-5],[2,-5],[3,0],[2,0],[2,-5],[2,0],[5,-5],[2,0],[6,-5],[5,-5],[2,0],[2,0]],[[5982,9380],[2,0],[3,0],[0,5],[2,0],[2,0],[2,6],[2,0],[3,0],[2,0],[0,5],[2,0],[2,5],[2,0],[0,5],[5,5],[2,0],[4,5],[0,5],[3,0],[0,5],[2,0],[0,5],[2,0],[2,0],[2,0],[3,0],[2,0],[4,-5],[5,0],[2,-5],[2,0],[2,-5],[5,0],[0,-5],[2,0],[2,0],[2,-5],[3,0],[2,0],[2,0],[2,0],[2,-5],[3,0],[0,5],[2,0],[2,0],[2,0],[2,0],[3,0],[2,0],[2,5]],[[6110,9421],[4,0],[3,0],[2,0],[2,0],[2,0],[2,0],[3,-5],[2,0],[4,0],[2,0],[0,-5],[3,0],[2,0],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[2,0],[5,0],[2,-5],[2,0],[2,0],[3,0],[2,0],[2,0],[0,-5],[2,0],[2,0],[3,-5],[4,0],[2,0],[0,-5],[2,0],[3,0],[2,-6],[2,0],[2,0],[0,-5],[2,0],[3,0],[0,-5],[2,0],[0,-5],[2,-5],[2,0],[0,-5],[2,0],[3,0],[2,-5],[4,0],[2,-5],[3,0],[2,-5],[4,-5],[2,0],[3,0],[2,-5],[2,0],[2,0],[2,-5],[3,0],[2,0],[2,0],[2,0],[2,0],[3,0],[2,5]],[[6434,9230],[4,0],[3,0],[2,0],[4,0],[2,0],[3,0],[0,-5],[2,0],[2,-5],[2,-5],[2,0],[5,-5],[2,-5],[5,-5],[2,0],[0,-5],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[4,0],[5,5],[2,0],[2,0],[2,5],[5,0],[2,5],[2,0],[2,0],[5,0],[0,5],[4,0],[2,0],[3,0],[2,0],[4,5],[9,5],[11,5],[2,0],[2,5],[3,0],[11,0],[4,0],[2,0],[3,0],[0,5],[2,0],[2,0],[7,5],[2,5],[4,0],[7,10],[4,0],[2,5],[7,5],[4,0],[5,5],[2,5],[2,0],[2,0],[3,5],[2,0],[2,5],[4,5],[3,5],[2,0],[2,5],[4,5],[5,5],[2,5],[2,0],[2,5],[3,0],[2,5],[2,0],[5,5],[4,0],[11,10],[4,5],[3,5],[4,0],[2,0],[5,5],[2,0],[2,5],[4,0],[7,5],[7,5],[4,5],[4,0],[5,5],[2,0],[2,0],[5,0],[0,6],[2,0],[2,0],[2,0],[5,0],[2,0],[0,-6],[2,0],[2,0],[5,0],[11,-5],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[7,0],[4,0],[2,0],[5,0],[2,0],[2,0],[4,0],[3,0],[2,0],[2,-5],[2,0],[2,0],[3,0],[2,0],[2,-5],[2,0],[2,0],[3,0],[2,-5],[2,0],[2,-5],[2,0],[3,0],[2,-5],[2,-5],[2,0],[3,0],[2,0],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[4,0],[7,0],[2,0],[2,0],[3,0],[2,0],[6,0],[5,0],[2,0],[2,0],[7,-5],[4,-5],[2,0],[3,0],[2,-5],[2,0],[2,-5],[2,0],[3,-5],[2,0],[2,-5],[2,-5],[2,-5],[3,0],[2,-5],[2,0],[0,-5],[7,-5],[4,0],[2,0],[0,-5],[3,0],[2,0],[2,0],[2,0],[2,0],[3,0],[2,0],[0,-5],[2,0],[2,0],[2,0],[3,0],[2,0],[2,0],[2,-5],[2,0],[3,0],[2,-5],[2,0],[2,0],[2,0],[3,0],[0,5],[2,0],[2,0],[0,5],[4,5],[3,0],[0,5],[2,0],[2,0],[2,0],[2,0],[0,-5],[3,0],[6,0],[5,-5],[2,0],[0,-5],[2,0],[0,-5],[2,0],[0,-5],[0,-5],[2,0],[3,-5],[2,-5],[4,-5],[3,-5],[4,-5],[2,-5],[2,-5],[5,0],[6,5],[3,-10],[13,10],[2,0],[9,5],[17,-5],[16,-5],[2,0],[68,10],[31,10],[18,0],[26,-15],[391,-307],[17,-25],[110,-216]],[[7759,8396],[-2,0],[-3,0],[-2,-5],[-9,-5],[-4,-5],[-7,-5],[0,-5],[5,20],[-13,5],[-9,5],[-7,0],[2,10],[-8,0],[0,5],[-5,5],[5,15],[-5,5],[2,15],[3,0],[6,-10],[2,0],[9,-5],[13,-5],[5,-5],[4,0],[2,-5],[3,-5],[2,-5],[4,-5],[5,-5],[2,-5],[0,-5]],[[5354,3185],[-7,40],[9,10],[-2,20],[15,11],[0,5],[-4,5],[-2,15],[-7,15],[2,10],[18,35],[-7,35],[0,15],[7,-5],[9,0],[4,-10],[22,5],[7,10],[13,-10],[27,20],[24,-10],[4,10],[16,55],[8,0],[9,16],[13,35],[9,10],[7,15],[11,10],[0,15]],[[7060,1768],[-4,-40],[-16,-5],[-13,-15],[-7,-15],[-13,-10],[-4,-15],[-13,-25],[-14,-51],[-9,0],[-8,0],[-18,-15],[-9,-15],[-2,-10],[-7,0],[-17,-10],[-9,-10],[-13,-10],[-16,-15],[5,-15],[13,-50],[20,-76],[0,-15],[-11,-40],[-5,-10],[-8,-10],[0,-35],[0,-15],[-9,-15],[-31,-6],[-11,6],[-11,0],[-11,-16],[-11,0],[-24,-30],[-16,0],[-4,-5],[-7,-10],[-2,-15],[4,-10],[-2,-10],[-18,-30],[-4,-35],[4,-15],[18,-31],[13,-25],[5,-75],[6,-35],[-11,-5],[-2,-15],[-7,-10],[-2,0],[-11,5],[-4,-5],[0,-25],[-5,-5],[-2,-5],[-9,-6],[-19,0],[2,-30],[-2,-10],[-7,5],[-2,-5],[-2,-5],[-3,10],[0,-15],[11,-20],[44,-25],[3,-50],[4,-10],[-11,-25],[7,-15],[11,-5],[4,-11],[-7,-50],[18,5],[7,-15],[15,0],[13,10],[7,-15],[7,-10],[2,-5],[-2,-5],[4,0],[7,0],[4,0],[7,0],[2,0],[-2,-20],[19,-20],[0,-10],[5,-5],[0,10],[7,5],[8,-10],[0,-10],[-4,-15],[4,-36],[22,16],[5,-5],[-5,-11],[5,-10],[-9,-5],[-7,-20],[-8,0],[-3,-5],[7,-10],[-7,-10],[3,-10],[-14,-15],[-13,-35],[-2,5],[-18,-5],[-4,-5],[0,-10],[-5,-10],[3,-10],[-5,-5],[-6,-20],[0,-20],[4,-16],[2,-10],[-9,-5],[7,-5],[-13,-10],[-2,-15],[-7,0],[-4,-15],[0,-5],[-7,-5],[0,-10],[4,-25],[-8,-15],[2,-5],[-5,-30],[-4,0],[9,-10],[-7,-10],[-6,0],[-16,5],[-7,-15],[-2,-5],[-31,10],[-13,15],[-9,-5],[-2,5],[5,10],[2,35],[4,0],[-2,15],[-7,-5],[-8,5],[2,5],[-9,15],[-11,-15],[-13,5],[-3,-5],[3,-5],[-7,-15],[-2,5],[-5,-5],[-6,15],[-13,5],[2,15],[-13,15],[0,5],[-7,0],[-9,5],[-4,-5],[-18,-10],[-11,-10],[-4,-10],[0,-5],[-7,-5],[0,-10],[-18,5],[-19,-15],[4,55],[40,96],[15,15],[13,15],[-4,10],[-2,5],[-11,-10],[-7,15],[2,5],[-6,65],[-11,35],[-7,0],[-2,20],[-2,0],[-3,5],[5,5],[4,16],[0,10],[-11,30],[-9,25],[-4,20],[-13,0],[-27,45],[-6,25],[0,25],[9,26],[0,65],[-7,20],[-27,-10],[-13,10],[-15,10],[-9,20],[-11,5],[-13,20],[-11,15],[-5,15],[-6,10],[0,10],[-2,6],[-3,5],[-2,0],[-2,5],[-11,10],[-7,15],[-17,0],[-9,0],[-5,0],[-8,15],[-5,-5],[-2,0],[-9,5],[-15,0],[-7,5],[-7,0],[-2,0],[0,-5],[-2,-5],[-4,-5],[-9,0],[15,95],[9,20],[20,51],[31,15],[17,45],[5,40],[6,-5],[5,15],[-16,15],[16,20],[20,-15],[24,71],[-7,70],[-11,0],[-11,20],[-20,15],[-15,35],[-2,-5],[-5,10],[-2,5],[0,5],[-2,5],[-7,0],[0,5],[-6,10],[-5,5],[-15,15],[-9,-20],[-4,-10],[-38,-5],[-13,15],[-7,10],[-13,10],[-2,0],[-7,0],[-6,0],[-5,5],[-6,16],[-31,85],[-40,-60],[-20,-66],[-37,20],[-9,5],[-7,0],[-4,0],[-2,0],[-5,0],[-2,11],[-2,5],[-2,0],[-2,5],[0,10],[-5,0],[2,5],[0,5],[-4,5],[-4,-5],[-5,0],[-4,0],[-5,-5],[-4,0],[-24,20],[-5,15],[-17,35],[-60,-5],[-20,0],[0,5],[-4,20],[0,30],[-11,10],[-5,15],[-15,26],[-7,0],[3,5],[-3,5],[3,10],[6,5],[7,5],[0,5],[0,15],[2,0],[7,5],[-3,10],[-6,0],[-11,0],[-7,5],[-4,0],[-2,0],[-3,0],[3,10],[-5,5],[2,5],[-4,10],[-4,0],[-5,0],[-6,-5],[-3,0],[-2,5],[-4,5],[-5,5],[-6,60],[-14,36],[-11,10],[-11,0],[3,5],[-5,25],[-26,30],[-11,30],[-7,70],[-24,20],[-11,-10],[-7,0],[-9,10],[-17,21],[-20,15],[-13,5],[-20,0],[-22,15],[-5,15],[-2,25],[-2,20],[-7,0],[-13,10],[-17,5],[-7,5],[-2,15],[-2,10],[4,5],[4,15],[5,0],[0,15],[17,15],[-13,51],[-35,70],[0,20],[-13,30],[4,15],[5,5],[19,10],[-4,16],[7,15],[-3,30],[7,15],[22,10],[4,30],[9,10],[11,25],[-2,15],[0,40],[-4,46],[4,10],[2,10],[11,20],[-6,30],[-3,60],[-11,36],[22,45],[-15,35],[-2,15],[11,30],[-11,30],[-11,10],[-2,15],[0,10],[6,31],[-4,5],[0,15],[2,10],[11,10],[4,20],[-2,10],[-9,5],[3,25],[-11,10],[-9,10],[-2,20],[-5,15],[-9,10],[-15,-5],[-2,5],[-16,-5],[-22,-10],[-9,-10],[-6,0],[-16,-5],[-11,-15],[-13,0],[-6,-15],[-9,5],[-9,-5]],[[6637,728],[4,-5],[16,0],[6,45],[-4,5],[-2,20],[4,36],[-2,0],[-22,5],[-20,-96],[20,-10]],[[628,2642],[-62,46],[-13,10],[-11,0],[-5,5],[-4,20],[-7,5],[-11,-5],[-4,0],[-2,5],[-7,10],[-9,10],[-13,-15],[4,-10],[-11,-10],[5,-15],[4,-5],[13,-5],[12,-20],[6,5],[2,-5],[5,-5],[2,5],[4,0],[-4,-26],[24,-25],[0,5],[7,-10],[55,-35]],[[608,2577],[-27,-95]],[[581,2482],[-46,-141],[-62,50],[-24,20],[-15,5],[-5,10],[-22,20],[-13,21],[-2,10],[-13,15],[2,5],[-7,5],[2,5],[-2,0]],[[374,2507],[-2,10],[4,10],[9,10],[0,10],[7,15],[2,0],[2,20],[5,5],[2,0],[0,10],[-5,5],[3,5],[2,5],[-2,0],[2,5],[2,0],[2,5],[7,5],[4,0],[0,5],[7,5],[7,16],[0,5],[4,5],[7,10],[2,5],[0,15],[2,20],[2,0],[2,10],[20,30],[0,5],[-11,25],[-6,10],[-5,25],[-2,5],[-4,-10],[-3,0],[-4,-5],[-9,0],[-31,56],[-48,60],[-2,-5],[4,-10],[-2,0],[-11,10],[-7,5],[-13,25],[-4,20],[-69,30],[-6,5],[13,45],[9,16],[2,20],[20,40],[2,5],[2,10],[-4,20],[-20,30],[4,20],[-9,15],[3,15],[-3,15],[9,11],[44,70],[36,141],[17,35],[38,70],[11,-15],[2,0],[20,45],[-9,10],[15,30],[-39,66],[-60,95],[24,35],[9,25],[29,41],[7,5],[15,20],[11,10],[15,30],[11,0],[20,20],[9,10],[2,20],[20,25],[5,0],[11,15],[0,10],[11,21],[-3,0],[9,10],[5,-5],[4,5],[11,25],[9,5],[0,5],[4,10],[2,0],[18,15],[13,35],[51,75],[24,31],[0,10],[5,5],[2,0],[-5,5],[0,15],[3,0],[17,20],[11,15],[29,20],[4,0],[20,25],[38,35],[9,0],[30,20],[16,21],[6,5],[5,15],[6,10],[7,15],[11,-5],[4,5],[12,5],[-3,25],[-6,0],[4,5],[11,5],[9,0],[11,0],[2,5],[9,15],[7,15],[-3,15],[-6,10],[15,25],[13,15],[7,-5],[4,0],[25,16],[15,5],[13,15],[3,0],[17,30],[-2,5],[2,10],[0,5],[22,30],[7,5],[0,25],[13,45],[-35,51],[-16,15],[0,5],[-8,50],[22,20],[-3,40],[7,40],[37,101]],[[1110,5195],[12,-5],[2,-15],[35,-5],[64,35],[9,5],[17,10],[11,10],[22,40],[18,10],[13,20],[16,6],[9,10],[15,15],[11,5],[26,20],[14,0],[11,0],[17,15],[7,0],[13,10],[13,0],[14,0],[6,15],[36,70],[2,25],[33,36],[13,10],[37,30],[80,50],[-2,-10],[2,-10],[4,-5],[-13,-75],[0,-51],[9,-5],[42,-50],[0,-15],[-5,-35],[0,-5],[3,0],[2,5],[0,-5],[-2,-25],[-14,-56],[16,20],[31,-5],[6,-10],[51,-80]],[[2005,5481],[67,81]],[[2788,2567],[-44,-80],[-27,-46],[0,-45],[18,-30],[-6,-5],[2,-10],[-11,-5],[-9,-10],[6,-50],[0,-10],[-11,-10],[-6,-5],[-2,5],[-5,-5],[-13,-26],[0,-10],[-7,-5],[-15,-30],[-15,-5],[-7,-20],[-2,-25],[-2,-5],[-12,-10],[-4,-5],[-7,-10],[-11,-5],[-11,0],[-8,0],[-3,0],[-2,-20],[-4,-20],[-2,-20],[4,-6],[-7,-5],[-8,-20],[-3,-10],[-15,-25],[-9,-10],[-18,-15],[-17,-25],[-18,-10],[-4,-5],[-5,5],[-11,5],[-15,-10],[-11,-15],[-13,-10],[-3,-5],[-6,-5],[-9,-5],[-9,-5],[-2,-5],[-13,-5],[-2,-5],[-3,5],[0,5],[0,5],[-2,0],[-2,5],[-2,10],[-7,10],[-2,10],[-4,15],[-5,0],[-2,10],[-2,0],[-5,5],[-2,5],[-2,0],[-4,5],[0,10],[0,5],[-5,10],[0,10],[0,10],[0,10],[-2,10],[0,5],[0,10],[-2,0],[-3,5],[-4,0],[-2,0],[-2,5],[-3,5],[0,11],[0,5],[0,5],[0,5],[-2,5],[0,5],[-2,5],[-9,15],[-2,0],[0,5],[-2,10],[-2,5],[-3,10],[-2,5],[0,5],[-4,5],[-2,0],[0,5],[0,5],[-3,20],[0,5],[-2,5],[-9,15],[-8,10],[-14,25],[-4,5],[-2,5],[-7,16],[-4,5],[-3,5],[0,10],[-2,30],[0,5],[-2,10],[-2,10],[-2,10],[-3,0],[-6,15],[-5,10],[-11,10],[-2,5],[-6,5],[-5,5],[-6,5],[-5,10],[-4,10],[0,5],[0,5],[0,10],[0,5],[-2,11],[-3,5],[0,10],[0,10],[-2,5],[0,5],[-2,10],[0,5],[0,15],[0,10],[0,5],[0,10],[0,5],[0,5],[-2,10],[-2,10],[-5,10],[-6,10],[-5,10],[-4,5],[-2,5],[-3,5],[-2,0],[-2,0],[0,5],[-5,0],[-4,-5],[-2,0],[-2,0],[-5,0],[-6,0],[-5,0],[-6,0],[-3,0],[-2,0],[-2,0],[-2,5],[-2,0],[-3,5],[-2,5],[-6,26],[-5,10],[-2,5],[-4,5],[-3,0],[-2,5],[-2,5],[-2,5],[0,5],[0,5],[0,5],[9,30],[0,5],[2,5],[0,15],[-2,10],[0,5],[0,10],[-3,10],[-2,5],[-2,10],[-2,0],[-2,5],[-5,5],[-4,5],[-2,0],[-3,0],[-2,5],[-4,5],[-5,10],[-2,5],[-4,11],[-9,15],[-2,0],[-3,10],[-4,5],[-84,165]],[[1906,3059],[-306,136],[-359,10],[-205,-201],[-201,-60],[-181,-221],[-26,-81]],[[1847,4612],[-2,-10],[-5,-5],[0,-10],[-6,-10],[0,-5],[11,-10],[6,0],[9,5],[4,-5],[5,5],[4,0],[7,0],[4,5],[13,25],[25,10],[4,0],[7,0],[11,-10],[17,-25],[14,-10],[11,0],[4,0],[7,-5],[2,5],[4,-5],[7,15],[-5,5],[3,10],[-3,5],[0,5],[23,55],[4,10],[9,20],[-5,10],[-8,11],[2,10],[-11,10],[-9,10],[-7,15],[-2,0],[-4,-5],[-3,0],[-2,0],[0,-5],[-2,0],[-2,10],[4,5],[0,10],[-6,10],[-3,10],[-4,10],[-7,0],[3,10],[-7,5],[-7,-20],[7,0],[-11,-30],[-7,-10],[-8,-10],[-18,-25],[-2,-10],[4,0],[-2,-5],[-16,-31],[-2,-15],[-13,-15],[4,-10],[-2,-5],[-4,-5],[-5,0],[-2,0],[-2,0],[-4,-5],[-3,0],[-2,-5],[-4,10],[-13,-15],[-3,10],[-4,-5],[-2,5]],[[471,2653],[-6,-16],[11,-10],[2,0],[0,5],[-2,5],[0,5],[2,5],[2,6],[2,5],[16,-16],[4,11],[-18,25],[-4,-10],[-2,0],[-7,-15]],[[2144,5702],[161,171],[84,-35]],[[5354,3185],[-9,-5],[-4,0],[-9,10],[-9,0],[-9,-5],[-22,-20],[-6,-10],[-7,-25],[-18,-20],[-4,-15],[-7,-10],[-11,-10],[-11,-16],[-4,-10],[-9,0],[-7,0],[-8,-10],[-9,0],[-7,15],[-9,-15],[-4,-10],[-4,-20],[-5,-15],[-11,-20],[-9,-5],[5,-10],[4,0],[5,-10],[8,0],[11,-10],[5,-5],[9,10],[2,-10],[11,-15],[2,-10],[0,-10],[-7,-15],[0,-15],[11,-16],[-8,-10],[-3,-20],[-2,-15],[-13,-10],[-11,5],[-13,-25],[-18,-20],[-11,-15],[-20,15],[-22,-15],[-6,-15],[8,-20],[-2,-5],[5,-20],[-14,-15],[7,-15],[-7,-6],[-15,6],[-9,-6],[0,-20],[-18,-5],[-4,0],[-7,5],[-8,-15],[-18,-20],[2,-5],[-6,-15],[2,-5],[0,-10],[4,-5],[-6,-15],[-16,-15],[0,-20],[-9,-15],[3,-15],[-16,-20],[-13,-21],[-11,5],[-16,-10],[-17,-15],[-9,0],[-31,-10],[-9,5],[-20,20],[-15,5],[-7,0],[-24,-35],[-4,-5],[-11,-10],[-5,-25],[-6,-15],[-5,-15],[-15,-5],[-20,-45],[-24,-20],[0,-26],[-5,-5],[-6,0],[2,-15],[13,-20],[27,-5],[4,-15],[18,0],[6,-55],[7,-15],[9,0],[9,-30],[19,-20],[14,0],[8,-71],[18,-45],[2,-30],[-2,-5],[4,-25],[9,-5],[18,-41],[0,-25],[-15,-15],[-3,-25],[-13,-20],[-2,-20],[0,-20],[6,-15],[0,-30],[5,0],[-11,-36],[-13,-20],[-11,-10],[-7,10],[-22,-10],[-26,-25],[2,-15],[-2,-15],[2,-10],[-2,-25],[-9,-10],[-3,-10],[-4,-10],[-18,0],[-4,-10],[-4,0],[-14,-10],[-8,0],[-11,-5],[-7,0],[-15,5],[-20,-15],[-7,-5],[-20,0],[-11,-11],[-22,0],[-2,-10],[2,-20],[-9,-25],[0,-15],[-2,-30],[-15,-30],[2,-15],[-2,-10],[4,-15],[0,-20],[9,-36],[9,-45],[4,-5],[2,-10],[-6,-10],[-16,-5],[-6,-10],[-22,-40],[4,-5],[9,-25],[-16,-31],[5,-15],[-2,-20],[-11,-5],[-14,5],[-2,-20],[-13,-30],[0,-10],[-11,-20],[-26,15],[-7,0],[-13,-5],[-11,0],[-7,-5],[-4,-5],[-20,10],[-18,-5],[-17,-5],[-7,5],[-7,0],[-17,-5],[-22,5],[-7,-10],[0,-10],[-4,-20],[-7,-5],[-13,-30],[-2,-16],[-36,-30],[0,-5],[5,-10],[2,-30],[-7,-10],[0,-10],[-6,-10],[6,-20],[-2,-25],[-13,-5],[-7,-56],[7,-15],[13,-35],[-9,-30],[-4,-5],[-11,0],[-5,-15],[-13,20],[-17,-5],[-20,10],[-9,0],[-11,15],[-22,10],[-7,0],[-11,-15],[-9,-5],[-13,-20],[-9,-10],[-13,15],[-4,20],[-11,15],[-22,15],[-18,35],[-40,16],[-6,5],[-11,-46],[-16,-20],[-2,-20],[-33,0],[-15,25],[-3,20],[-8,10],[4,66],[-7,15],[-11,10],[-11,10],[-17,0],[-16,10],[-9,20],[-2,20],[-6,10],[-14,35],[-8,10],[-11,5],[-7,0],[-4,-10],[-9,0],[-14,-15],[-15,-10],[-37,10],[-14,0],[-8,-15],[-36,10],[-15,0],[-13,20],[0,25],[-5,26],[-9,10],[-17,0],[-11,-5],[-27,0],[-4,-5],[-5,-5],[-4,-21],[-4,-20],[2,-25],[6,-45],[-6,-25],[-11,-10],[-7,10],[-15,0],[-11,5],[-11,25],[-5,-5],[-9,-15],[-8,0],[-9,5],[-11,15],[-7,-10],[0,-15],[-9,-10],[-8,0],[-22,-15],[-7,-10],[-7,-15],[5,-40],[2,-16],[-7,-15],[-6,0],[-9,5],[-13,5],[-7,-15],[-22,-5],[-9,-15],[-2,-5],[-15,-40],[-16,-25],[-11,0],[-2,-15],[-13,-5],[-9,-10],[-11,0],[-9,10],[-9,-15],[0,-15],[-15,-31],[-18,-10],[-15,21],[-5,5],[-17,10],[-11,-5],[-11,20],[0,20],[-11,5],[-16,15],[-26,-20],[-18,-5],[-13,10],[-5,25],[-22,5],[-8,-5],[-9,15],[-7,10],[-9,-10],[-4,-10],[-9,-15],[0,-10],[-9,-25],[-9,-35],[-13,-5],[-31,-61],[-8,0],[-3,20],[-6,5],[-20,-15],[-16,5],[-8,5],[-7,-10],[-7,0],[-11,-5],[-4,-10],[0,-15],[-11,-10],[-2,-5],[-9,-5],[-4,-15],[-9,-5],[-5,-30],[0,-15],[7,-20],[-9,-15],[-13,-5],[-16,5],[-11,15],[-8,0],[-29,40],[0,10],[7,5],[-3,10],[-6,10],[-7,5],[-9,0],[-15,-10],[-13,-10],[-3,-5],[-6,0],[-7,-10],[-2,-20],[-7,-5],[-6,-10],[-9,-5],[-11,-20],[-9,0],[-2,-5],[-11,0],[-11,5],[-5,0],[-6,10],[-5,30],[-2,10],[-6,10],[4,10],[0,10],[-20,35],[-11,10],[-9,25],[3,25],[-9,0],[-7,15],[-13,11],[0,10],[0,35],[-7,20],[-17,10],[-5,15],[-4,5],[-2,5],[-3,5],[-2,0],[-2,5],[-7,45],[-6,10],[-7,25],[2,16],[0,15],[5,5],[0,10],[-5,30],[3,5],[-3,5],[-4,5],[-26,10],[-11,10],[-3,5],[-17,40],[2,20],[2,0],[9,10],[13,5],[5,10],[0,5],[0,5],[-3,6],[-4,5],[0,10],[-9,15],[-9,0],[0,10],[0,15],[-4,15],[2,10],[-11,20],[-2,0],[-9,-10],[-2,0],[-9,5],[-11,15],[-2,0],[-9,5],[-2,5],[0,5],[0,10],[-9,50],[0,10],[-22,31],[-9,25],[-9,0],[-17,55],[-11,50],[-16,-5],[-9,10],[-4,10],[-2,0],[-2,5],[0,10],[4,10],[-2,11],[4,5],[0,5],[-2,5],[-9,10],[-2,-10],[-9,-5],[-9,5],[-13,-31],[-7,-10],[-2,-10],[-4,-5],[-2,0],[0,-10],[-5,-5],[-4,-5],[-27,-10],[-6,-15],[-2,-15],[-9,15],[-9,-5],[-15,20],[0,5],[-7,15],[0,20],[18,66],[6,10],[9,10],[7,5],[-7,25],[7,15],[2,15],[-7,10],[-2,10],[-11,25],[0,5],[7,10],[2,5],[2,10],[7,16],[6,20],[2,5],[-4,25],[7,25],[2,15],[6,10],[-2,5],[-2,0],[-7,0],[-11,5],[-17,-10],[-5,0],[-8,15],[-16,-5],[-20,5],[-20,5],[-17,10],[-2,15],[-7,5],[-44,-10],[-9,-10],[-4,15],[-5,0],[-2,5],[-4,15],[-3,5],[-13,-10],[-6,10],[-7,56],[-11,30],[7,30],[-3,15],[31,50],[2,25],[11,15],[0,5],[-11,71],[-6,35],[9,40],[4,5],[0,10],[7,5],[8,25],[7,5],[4,10],[-2,36],[0,10],[14,10],[8,0],[14,35],[2,20],[4,15],[9,5],[7,5],[11,10],[6,15],[0,20],[11,36],[-2,40],[13,30],[0,5],[-2,10],[0,5],[-9,15],[-2,5],[0,10],[0,5],[-2,0],[-9,5],[-4,0],[-3,-10],[-8,0],[-5,5],[-2,15],[-9,5],[-9,10],[-4,15],[-7,0],[-4,5],[-2,10],[4,16],[-11,30],[-9,5],[-4,10],[-7,5],[-9,10],[-8,10],[-3,5],[-8,-5],[-3,0],[-2,0],[-2,5],[-4,25],[-3,5],[5,10],[-5,10],[-2,10],[-17,-5],[-7,5],[-2,0],[0,15],[-7,25],[-4,15],[-9,16],[-7,15],[-4,25],[4,30],[9,15],[11,10],[24,5],[20,40],[7,10],[4,15],[0,15],[-4,5],[-5,16],[3,25],[4,10],[35,165]],[[1110,5195],[3,50],[4,71],[2,70],[-13,55],[-24,50],[-13,36],[-11,20],[-7,30],[26,25],[31,50],[7,20],[18,35],[4,11],[2,5],[18,35],[11,15],[11,20],[13,15],[18,-40],[2,0],[29,25],[41,15],[34,20],[22,5],[11,10],[11,5],[24,30],[17,15],[9,10],[29,-10],[18,5],[2,0],[35,31],[13,25],[9,20],[20,70],[11,25],[44,45],[20,11],[22,0],[4,10],[7,5],[9,20],[6,5],[7,15],[13,15],[2,0],[3,5],[-16,5],[-4,5],[-5,20],[-2,0],[-6,5],[-9,0],[-5,15],[-4,5],[-4,0],[-7,15],[4,15],[14,5],[6,15],[7,5],[0,5],[-2,5],[6,16],[-11,10],[2,5],[7,5],[15,15],[0,5],[5,5],[13,5],[9,15],[11,-10],[18,0],[8,10],[7,20],[0,15],[-11,25],[-2,25],[4,5],[5,0],[8,0],[9,25],[29,26],[11,5],[11,0],[9,10],[24,15],[4,5],[14,10],[4,0],[11,5],[4,5],[5,20],[13,0],[4,15],[7,10],[11,10],[2,10],[7,10],[4,0],[20,20],[0,15],[2,5],[3,0],[15,10],[2,0],[5,16],[15,30]],[[1990,6768],[4,5]],[[581,2482],[47,-36],[4,-5],[2,0],[11,-10],[-4,-10],[4,-10],[-2,-10],[5,0],[-5,-10],[7,-5],[0,-5],[2,0],[2,-10],[-4,-10],[-5,-5],[-6,-10],[-5,0],[-4,0],[-4,-15],[-5,0],[2,-10],[-2,-15],[0,-5],[11,-15],[13,-51],[3,-5],[24,-35],[-2,-15],[8,-5],[7,-15],[27,15],[0,10],[13,10],[-2,5],[4,5],[13,30],[7,11],[4,-6],[-6,-30],[2,-10],[2,0],[11,-5],[4,0],[9,5],[7,0],[-2,-5],[-7,-20],[7,-5],[0,-15],[2,-15],[-35,-95],[-5,-11],[-35,-40],[-16,-10],[-6,0],[-27,-20],[-11,-20],[-6,10],[-2,0],[0,-10],[-5,0],[-6,0],[-7,5],[-7,0],[-9,-10],[-4,-5],[-2,-5],[-5,0],[-2,-5],[-4,0],[0,-10],[-9,-5],[-9,-20],[-2,0],[-2,-5],[-11,-5],[-11,-25],[-7,-10],[-2,-5],[-4,0],[-11,-16],[-5,0],[-6,-15],[6,-60],[-31,-40],[-15,-5],[-35,-25],[-9,-15],[-2,-15],[-5,-5],[-6,10],[-3,-10],[-9,-10],[-2,-11],[-20,-5],[-13,16],[-26,0],[-11,5],[-11,0],[-16,40],[-35,-15],[-2,0],[-7,5],[-44,5],[-6,-20],[-5,-20],[5,-11],[-3,0],[-4,-5],[-7,5],[-15,-20],[0,-10],[-2,10],[-3,-5],[0,10],[-2,5],[-2,-5],[0,5],[-7,0],[-2,5],[-6,0],[-3,5],[-2,5],[-17,6],[-5,-6],[-2,0],[-7,6],[-11,-6],[-22,11],[-2,0],[-2,0],[-11,-5],[-5,0],[-4,-6],[-2,-25],[-5,-5],[-8,-15],[-7,-5],[-7,0],[-11,-10],[-8,0],[-9,-10],[-2,20],[22,25],[2,10],[-5,15],[0,16],[9,35],[9,20],[7,20],[11,35],[2,30],[4,5],[2,0],[5,-15],[2,0],[4,20],[5,10],[0,10],[6,20],[-8,21],[-14,10],[-6,10],[-40,30],[0,5],[5,5],[4,5],[11,15],[-9,20],[11,40],[9,10],[15,0],[18,-10],[2,15],[-6,20],[11,0],[8,-5],[0,-5],[5,5],[11,10],[0,21],[7,5],[0,5],[8,0],[-2,10],[5,0],[4,5],[4,0],[14,5],[19,25],[18,-25],[9,-10],[11,20],[4,20],[16,30],[2,0],[4,5],[11,-20],[5,-5],[4,5],[2,-5],[3,10],[13,15],[6,-5],[3,10],[4,-5],[4,5],[0,-5],[31,-40],[9,15],[2,0],[5,-5],[2,0],[31,55],[0,10],[-7,5],[5,10],[-3,15],[-4,10],[-4,15],[4,6],[-7,5],[-2,0],[-13,20],[7,10],[-20,30],[2,30],[-7,5],[20,30],[5,15],[2,5],[6,-5],[5,0],[2,5],[-2,0],[0,5],[4,5],[-2,5],[4,10],[-6,10],[4,26],[-4,5],[2,20],[9,20],[0,5],[4,0]],[[502,2653],[-4,-11],[-16,16],[-2,-5],[-2,-6],[-2,-5],[0,-5],[2,-5],[0,-5],[-2,0],[-11,10],[6,16],[7,15],[2,0],[4,10],[18,-25]],[[628,2642],[-20,-65],[-55,35],[-7,10],[0,-5],[-24,25],[4,26],[-4,0],[-2,-5],[-5,5],[-2,5],[-6,-5],[-12,20],[-13,5],[-4,5],[-5,15],[11,10],[-4,10],[13,15],[9,-10],[7,-10],[2,-5],[4,0],[11,5],[7,-5],[4,-20],[5,-5],[11,0],[13,-10],[62,-46]],[[1990,6768],[0,5],[-11,5],[-11,-5],[-9,0],[-6,10],[-3,15],[9,10],[18,15],[2,5],[2,0],[5,0],[17,15],[5,20],[2,5],[15,0],[-2,25],[2,5],[0,10],[5,5],[4,10],[5,21],[13,20],[4,0],[2,5],[9,10],[29,35],[9,20],[2,0],[6,5],[20,15],[5,10],[2,5],[2,15],[11,10],[16,5],[6,15],[0,5],[2,15],[9,5],[9,16],[7,5],[2,5],[-7,15],[-11,15],[-2,15],[0,5],[7,10],[4,20],[0,10],[-4,20],[4,15],[-13,50],[-2,11],[-9,25],[9,15],[4,10],[13,5],[20,-5],[13,5],[11,-5],[5,0],[2,10],[2,15],[16,-5],[11,10],[17,-5],[16,25],[6,0],[2,0],[5,10],[2,25],[7,10],[4,20],[-4,30],[-9,6],[0,15],[35,10],[18,10],[20,-10],[6,5],[25,35],[-3,5],[-6,0],[0,10],[4,5],[9,10],[7,20],[-14,10],[-13,5],[2,15],[5,10],[-7,45],[-2,6],[-13,10],[-20,0],[0,20],[-2,10],[-11,-5],[-14,5],[-4,0],[-4,5],[0,10],[-7,0],[-4,-10],[-3,10],[-2,0],[-11,-25],[-22,-25],[-13,0],[-16,0],[-19,-16],[-3,0],[-4,5],[-7,-10],[-6,0],[-3,5],[-6,-5],[-18,0],[-4,5],[-20,-10],[-15,0],[-5,0],[-17,-10],[-9,-5],[-5,5],[-6,5],[-22,10],[-9,0],[-2,0],[-5,-5],[-6,5],[-5,-15],[-20,-15],[-11,-5],[-2,25],[9,26],[4,25],[-2,30],[27,35],[-3,10],[20,0],[2,5],[16,15],[4,15],[-4,5],[-5,30],[11,5],[7,31],[-9,10],[7,0],[4,5],[5,-5],[9,5],[28,0],[2,0],[5,30],[2,20],[-2,70],[-5,20],[36,5],[6,-5],[13,10],[5,10],[9,46],[6,0],[18,10],[9,-5],[9,0],[2,0],[9,5],[2,0],[15,25],[-2,10],[-7,5],[0,15],[7,10],[-2,10],[0,15],[-18,-5],[-2,10],[4,15],[-8,10],[-5,15],[5,25],[-3,31],[-4,25],[-7,5],[0,5],[7,0],[7,5],[24,20],[2,5],[35,20],[16,0],[6,-15],[20,-10],[2,-10],[18,5],[13,-15],[20,0],[24,-15],[3,-10],[6,-10],[11,5],[27,30],[11,0],[6,-5],[27,5],[9,10],[26,35],[4,-5],[18,-5],[27,-25],[6,-5],[9,-20],[4,-5],[3,-5],[4,0],[15,-5],[5,0],[33,10],[22,15],[11,0],[2,-10],[-24,-20],[0,-10],[-9,-16],[-4,-25],[-16,-50],[2,-20],[0,-5],[0,-10],[-2,-5],[0,-10],[-11,-60],[-6,-15],[22,-6],[26,-15],[9,-20],[22,0],[44,25],[13,-5],[9,-10],[7,-15],[-3,-20],[3,-5],[0,-5],[9,0],[4,-5],[0,-5],[2,-15],[0,-15],[18,20],[35,15],[29,40],[6,0],[14,-10],[8,10],[9,5],[7,15],[20,-5],[28,5],[2,5]]]} \ No newline at end of file From 9e3d8ac4e919d1eff026e94cbb9c69a21a25f9d0 Mon Sep 17 00:00:00 2001 From: ismail-arilik Date: Wed, 2 Sep 2015 09:58:14 +0300 Subject: [PATCH 139/356] Update Batchfile color. --- lib/linguist/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index ae0584a1..157ba092 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -291,7 +291,7 @@ Batchfile: - .cmd tm_scope: source.dosbatch ace_mode: batchfile - color: "#92C2FF" + color: "#A3D300" Befunge: type: programming From 827ad80311fe24b4cabd76769c8ccff584a31557 Mon Sep 17 00:00:00 2001 From: ismail-arilik Date: Wed, 2 Sep 2015 10:16:37 +0300 Subject: [PATCH 140/356] Update colors to fix collision. Colors basically incremented. --- lib/linguist/languages.yml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 157ba092..be44415d 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -631,7 +631,7 @@ Common Lisp: Component Pascal: type: programming - color: "#b0ce4e" + color: "#c1df5f" extensions: - .cp - .cps @@ -703,7 +703,7 @@ Cuda: - .cuh tm_scope: source.cuda-c++ ace_mode: c_cpp - color: "#76B900" + color: "#87CA11" Cycript: type: programming @@ -1210,7 +1210,7 @@ Gradle: - .gradle tm_scope: source.groovy.gradle ace_mode: text - color: "#84BA40" + color: "#95CB51" Grammatical Framework: type: programming @@ -1714,7 +1714,7 @@ LLVM: extensions: - .ll ace_mode: text - color: "#689DD7" + color: "#79AEE8" LOLCODE: type: programming @@ -1778,7 +1778,7 @@ Less: - .less tm_scope: source.css.less ace_mode: less - color: "#2A4D82" + color: "#3B5E93" Lex: type: programming @@ -1988,7 +1988,7 @@ Markdown: - .mkdown - .ron tm_scope: source.gfm - color: "#DDDDDD" + color: "#EEEEEE" Mask: type: markup @@ -2027,7 +2027,7 @@ Maven POM: filenames: - pom.xml ace_mode: xml - color: "#FF6804" + color: "#007915" Max: type: programming @@ -2217,7 +2217,7 @@ Nginx: aliases: - nginx configuration file ace_mode: text - color: "#009900" + color: "#11AA11" Nimrod: type: programming @@ -2276,7 +2276,7 @@ NumPy: - .numsc tm_scope: none ace_mode: text - color: "#378EC8" + color: "#489FD9" OCaml: type: programming @@ -2779,7 +2779,7 @@ QMake: R: type: programming - color: "#198ce7" + color: "#2A9DF8" aliases: - R - Rscript @@ -3694,7 +3694,7 @@ XML: - Web.Release.config - Web.config - packages.config - color: "#25AAE2" + color: "#36BBF3" XPages: type: programming @@ -3740,7 +3740,7 @@ XSLT: - .xsl tm_scope: text.xml.xsl ace_mode: xml - color: "#0E76BD" + color: "#1F87CE" Xojo: type: programming @@ -3773,7 +3773,7 @@ YAML: - .yaml - .yaml-tmlanguage ace_mode: yaml - color: "#FF0000" + color: "#001111" Yacc: type: programming @@ -3783,7 +3783,7 @@ Yacc: - .yy tm_scope: source.bison ace_mode: text - color: "#92278F" + color: "#A33890" Zephir: type: programming @@ -3866,7 +3866,7 @@ reStructuredText: - .rst - .rest ace_mode: text - color: "#000000" + color: "#444444" wisp: type: programming From dc41dd888d4f6b3754fe6461d683360d2ed212d4 Mon Sep 17 00:00:00 2001 From: ismail-arilik Date: Wed, 2 Sep 2015 13:31:51 +0300 Subject: [PATCH 141/356] Update Cuda color to fix closeness. --- lib/linguist/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index be44415d..3e0d1f8c 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -703,7 +703,7 @@ Cuda: - .cuh tm_scope: source.cuda-c++ ace_mode: c_cpp - color: "#87CA11" + color: "#98DB22" Cycript: type: programming From 9a76cfc85f8a30a79bcedefcb66e4f676f8a7b5a Mon Sep 17 00:00:00 2001 From: ismail-arilik Date: Wed, 2 Sep 2015 14:16:12 +0300 Subject: [PATCH 142/356] Update some colors to fix closeness. I have used syntactic color values with respect to the table below: A | B C | D | E | F G | H | I | J K | L M | N O | P Q | R S | T U | V W | X | Y Z 0 1 2 3 4 5 6 7 8 9 A B C D E F For example for Gradle the color should be 4B0283, for Cuda the color should be 1C201C(for six-letter CudaCu) and for reStructuredText the color should be B3BCBC(for six-letter reStru). --- lib/linguist/languages.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 3e0d1f8c..40ac5b40 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -703,7 +703,7 @@ Cuda: - .cuh tm_scope: source.cuda-c++ ace_mode: c_cpp - color: "#98DB22" + color: "#1C201C" Cycript: type: programming @@ -1210,7 +1210,7 @@ Gradle: - .gradle tm_scope: source.groovy.gradle ace_mode: text - color: "#95CB51" + color: "#4B0283" Grammatical Framework: type: programming @@ -1778,7 +1778,7 @@ Less: - .less tm_scope: source.css.less ace_mode: less - color: "#3B5E93" + color: "#83BB83" Lex: type: programming @@ -1988,7 +1988,7 @@ Markdown: - .mkdown - .ron tm_scope: source.gfm - color: "#EEEEEE" + color: "#80B729" Mask: type: markup @@ -2217,7 +2217,7 @@ Nginx: aliases: - nginx configuration file ace_mode: text - color: "#11AA11" + color: "#9469E9" Nimrod: type: programming @@ -2276,7 +2276,7 @@ NumPy: - .numsc tm_scope: none ace_mode: text - color: "#489FD9" + color: "#9C8AF9" OCaml: type: programming @@ -3694,7 +3694,7 @@ XML: - Web.Release.config - Web.config - packages.config - color: "#36BBF3" + color: "#E88E88" XPages: type: programming @@ -3740,7 +3740,7 @@ XSLT: - .xsl tm_scope: text.xml.xsl ace_mode: xml - color: "#1F87CE" + color: "#EB8CEB" Xojo: type: programming @@ -3783,7 +3783,7 @@ Yacc: - .yy tm_scope: source.bison ace_mode: text - color: "#A33890" + color: "#F011F0" Zephir: type: programming @@ -3866,7 +3866,7 @@ reStructuredText: - .rst - .rest ace_mode: text - color: "#444444" + color: "#B3BCBC" wisp: type: programming From 802de8112ccb3e9cd5696efe9dc5a2b8e6f9a3b9 Mon Sep 17 00:00:00 2001 From: ismail-arilik Date: Wed, 2 Sep 2015 14:39:19 +0300 Subject: [PATCH 143/356] Update some colors to fix closeness. --- lib/linguist/languages.yml | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 40ac5b40..2ccff3d2 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -153,7 +153,7 @@ Ant Build System: - ant.xml - build.xml ace_mode: xml - color: "#A82C7C" + color: "#C64A9A" ApacheConf: type: markup @@ -183,7 +183,7 @@ AppleScript: interpreters: - osascript ace_mode: applescript - color: "#F2F1F1" + color: "#101F1F" Arc: type: programming @@ -291,7 +291,7 @@ Batchfile: - .cmd tm_scope: source.dosbatch ace_mode: batchfile - color: "#A3D300" + color: "#C1F12E" Befunge: type: programming @@ -631,7 +631,7 @@ Common Lisp: Component Pascal: type: programming - color: "#c1df5f" + color: "#EFFD7D" extensions: - .cp - .cps @@ -694,7 +694,7 @@ Cucumber: aliases: - gherkin ace_mode: text - color: "#00A818" + color: "#2EC636" Cuda: type: programming @@ -703,7 +703,7 @@ Cuda: - .cuh tm_scope: source.cuda-c++ ace_mode: c_cpp - color: "#1C201C" + color: "#3A4E3A" Cycript: type: programming @@ -1714,7 +1714,7 @@ LLVM: extensions: - .ll ace_mode: text - color: "#79AEE8" + color: "#97CC06" LOLCODE: type: programming @@ -1778,7 +1778,7 @@ Less: - .less tm_scope: source.css.less ace_mode: less - color: "#83BB83" + color: "#A1D9A1" Lex: type: programming @@ -1988,7 +1988,7 @@ Markdown: - .mkdown - .ron tm_scope: source.gfm - color: "#80B729" + color: "#AED547" Mask: type: markup @@ -2525,7 +2525,7 @@ Parrot Internal Representation: Pascal: type: programming - color: "#b0ce4e" + color: "#DEEC6C" extensions: - .pas - .dfm @@ -2779,7 +2779,7 @@ QMake: R: type: programming - color: "#2A9DF8" + color: "#198CE7" aliases: - R - Rscript @@ -2809,7 +2809,7 @@ RDoc: extensions: - .rdoc tm_scope: text.rdoc - color: "#333333" + color: "#515151" REALbasic: type: programming @@ -3783,7 +3783,7 @@ Yacc: - .yy tm_scope: source.bison ace_mode: text - color: "#F011F0" + color: "#1E3F1E" Zephir: type: programming From 35884d482cc6b4813d9e6a4787a8cfd21ffea84d Mon Sep 17 00:00:00 2001 From: ismail-arilik Date: Wed, 2 Sep 2015 15:38:41 +0300 Subject: [PATCH 144/356] Update some colors to fix closeness. --- lib/linguist/languages.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 2ccff3d2..49aa2c75 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -694,7 +694,7 @@ Cucumber: aliases: - gherkin ace_mode: text - color: "#2EC636" + color: "#2EF336" Cuda: type: programming @@ -1714,7 +1714,7 @@ LLVM: extensions: - .ll ace_mode: text - color: "#97CC06" + color: "#185619" LOLCODE: type: programming @@ -1988,7 +1988,7 @@ Markdown: - .mkdown - .ron tm_scope: source.gfm - color: "#AED547" + color: "#DB0274" Mask: type: markup @@ -2525,7 +2525,7 @@ Parrot Internal Representation: Pascal: type: programming - color: "#DEEC6C" + color: "#0B1999" extensions: - .pas - .dfm @@ -2809,7 +2809,7 @@ RDoc: extensions: - .rdoc tm_scope: text.rdoc - color: "#515151" + color: "#8E84BF" REALbasic: type: programming @@ -3773,7 +3773,7 @@ YAML: - .yaml - .yaml-tmlanguage ace_mode: yaml - color: "#001111" + color: "#56789A" Yacc: type: programming @@ -3783,7 +3783,7 @@ Yacc: - .yy tm_scope: source.bison ace_mode: text - color: "#1E3F1E" + color: "#4B6C4B" Zephir: type: programming From ee61466042069db8a649a3e13444c3d079f1a685 Mon Sep 17 00:00:00 2001 From: ismail-arilik Date: Wed, 2 Sep 2015 15:58:46 +0300 Subject: [PATCH 145/356] Update some colors to fix closeness. --- lib/linguist/languages.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 49aa2c75..4094b18e 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -694,7 +694,7 @@ Cucumber: aliases: - gherkin ace_mode: text - color: "#2EF336" + color: "#5B2063" Cuda: type: programming @@ -1988,7 +1988,7 @@ Markdown: - .mkdown - .ron tm_scope: source.gfm - color: "#DB0274" + color: "#083FA1" Mask: type: markup @@ -2525,7 +2525,7 @@ Parrot Internal Representation: Pascal: type: programming - color: "#0B1999" + color: "#3846C6" extensions: - .pas - .dfm From cf834e8a2176d4dfaaa5e7aaf4c706c6ac756c15 Mon Sep 17 00:00:00 2001 From: ismail-arilik Date: Wed, 2 Sep 2015 16:23:33 +0300 Subject: [PATCH 146/356] Update some colors to fix closeness. --- lib/linguist/languages.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 4094b18e..87059633 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -631,7 +631,7 @@ Common Lisp: Component Pascal: type: programming - color: "#EFFD7D" + color: "#B0CE4E" extensions: - .cp - .cps @@ -2525,7 +2525,7 @@ Parrot Internal Representation: Pascal: type: programming - color: "#3846C6" + color: "#C1DF5F" extensions: - .pas - .dfm From 7e76d1cc6bafbf3357eaf8025b1836ac8744fd06 Mon Sep 17 00:00:00 2001 From: ismail-arilik Date: Wed, 2 Sep 2015 17:01:38 +0300 Subject: [PATCH 147/356] Update Pascal color to fix the closeness issue. --- lib/linguist/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 87059633..ad9ac132 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2525,7 +2525,7 @@ Parrot Internal Representation: Pascal: type: programming - color: "#C1DF5F" + color: "#E3F171" extensions: - .pas - .dfm From fc5ae1cfbcad8efa8fce84b4592fadf6b65fbfb2 Mon Sep 17 00:00:00 2001 From: ismail-arilik Date: Wed, 2 Sep 2015 17:53:58 +0300 Subject: [PATCH 148/356] Revert colors of some languages. Revert colors of some languages which have 'type: data' attribute. --- lib/linguist/languages.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index ad9ac132..496fbee3 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -153,7 +153,6 @@ Ant Build System: - ant.xml - build.xml ace_mode: xml - color: "#C64A9A" ApacheConf: type: markup @@ -1210,7 +1209,6 @@ Gradle: - .gradle tm_scope: source.groovy.gradle ace_mode: text - color: "#4B0283" Grammatical Framework: type: programming @@ -2027,7 +2025,6 @@ Maven POM: filenames: - pom.xml ace_mode: xml - color: "#007915" Max: type: programming @@ -3694,7 +3691,6 @@ XML: - Web.Release.config - Web.config - packages.config - color: "#E88E88" XPages: type: programming @@ -3773,7 +3769,6 @@ YAML: - .yaml - .yaml-tmlanguage ace_mode: yaml - color: "#56789A" Yacc: type: programming From 4d2b38497dda3ad2258af363e5bf51647c004097 Mon Sep 17 00:00:00 2001 From: ismail-arilik Date: Wed, 2 Sep 2015 18:53:29 +0300 Subject: [PATCH 149/356] Remove color attributes of 'type: data's. --- lib/linguist/languages.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 496fbee3..3d639833 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -795,7 +795,6 @@ Dart: Diff: type: data - color: "#88dddd" extensions: - .diff - .patch @@ -3461,7 +3460,6 @@ Unified Parallel C: Unity3D Asset: type: data ace_mode: yaml - color: "#ab69a1" extensions: - .anim - .asset @@ -3818,7 +3816,6 @@ eC: edn: type: data ace_mode: clojure - color: "#db5855" extensions: - .edn tm_scope: source.clojure From e4ce5bfe39bb7b29d416db16241b33acb5df7e2a Mon Sep 17 00:00:00 2001 From: Scott Nelson Date: Wed, 2 Sep 2015 12:52:25 -0400 Subject: [PATCH 150/356] Ignore spec fixtures --- lib/linguist/vendor.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml index 12473d85..ddbc6502 100644 --- a/lib/linguist/vendor.yml +++ b/lib/linguist/vendor.yml @@ -266,6 +266,7 @@ # Test fixtures - ^[Tt]ests?/fixtures/ +- ^[Ss]pecs?/fixtures/ # PhoneGap/Cordova - (^|/)cordova([^.]*)\.js$ From 580cfce7fbd1d7d3dbb06ab9a7fdea54c6527797 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Thu, 3 Sep 2015 14:39:27 +0100 Subject: [PATCH 151/356] Adding support for generated overrides --- lib/linguist/lazy_blob.rb | 30 +++++++++++++++++++++--------- test/test_repository.rb | 10 ++++++++++ 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/lib/linguist/lazy_blob.rb b/lib/linguist/lazy_blob.rb index 78f37b18..55c10309 100644 --- a/lib/linguist/lazy_blob.rb +++ b/lib/linguist/lazy_blob.rb @@ -4,7 +4,11 @@ require 'rugged' module Linguist class LazyBlob - GIT_ATTR = ['linguist-documentation', 'linguist-language', 'linguist-vendored'] + GIT_ATTR = ['linguist-documentation', + 'linguist-language', + 'linguist-vendored', + 'linguist-generated'] + GIT_ATTR_OPTS = { :priority => [:index], :skip_system => true } GIT_ATTR_FLAGS = Rugged::Repository::Attributes.parse_opts(GIT_ATTR_OPTS) @@ -31,14 +35,6 @@ module Linguist name, GIT_ATTR, GIT_ATTR_FLAGS) end - def vendored? - if attr = git_attributes['linguist-vendored'] - return boolean_attribute(attr) - else - return super - end - end - def documentation? if attr = git_attributes['linguist-documentation'] boolean_attribute(attr) @@ -47,6 +43,22 @@ module Linguist end end + def generated? + if attr = git_attributes['linguist-generated'] + boolean_attribute(attr) + else + super + end + end + + def vendored? + if attr = git_attributes['linguist-vendored'] + return boolean_attribute(attr) + else + super + end + end + def language return @language if defined?(@language) diff --git a/test/test_repository.rb b/test/test_repository.rb index fcdd4f0c..a1f9fc86 100644 --- a/test/test_repository.rb +++ b/test/test_repository.rb @@ -111,4 +111,14 @@ class TestRepository < Minitest::Test refute_predicate readme, :documentation? assert_predicate arduino, :documentation? end + + def test_linguist_override_generated? + attr_commit = "351c1cc8fd57340839bdb400d7812332af80e9bd" + repo = linguist_repo(attr_commit).read_index + + rakefile = Linguist::LazyBlob.new(rugged_repository, attr_commit, "Rakefile") + + # overridden .gitattributes + assert rakefile.generated? + end end From 4bfd65deb84c33b2e2deb60b6fadda4460985170 Mon Sep 17 00:00:00 2001 From: Paul Cantrell Date: Wed, 19 Aug 2015 11:42:21 -0500 Subject: [PATCH 152/356] #import "*.h" detection for Objective-C --- lib/linguist/heuristics.rb | 2 +- samples/Objective-C/Siesta.h | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 samples/Objective-C/Siesta.h diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index dd1f8ee6..1660d99f 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -65,7 +65,7 @@ module Linguist end # Common heuristics - ObjectiveCRegex = /^[ \t]*@(interface|class|protocol|property|end|synchronized|selector|implementation)\b/ + ObjectiveCRegex = /^\s*(@(interface|class|protocol|property|end|synchronised|selector|implementation)\b|#import\s+.+\.h[">])/ disambiguate ".asc" do |data| if /^(----[- ]BEGIN|ssh-(rsa|dss)) /.match(data) diff --git a/samples/Objective-C/Siesta.h b/samples/Objective-C/Siesta.h new file mode 100644 index 00000000..a48984e3 --- /dev/null +++ b/samples/Objective-C/Siesta.h @@ -0,0 +1,16 @@ +// +// Siesta.h +// Siesta +// +// Created by Paul on 2015/6/14. +// Copyright © 2015 Bust Out Solutions. MIT license. +// + +#import + +//! Project version number for Siesta. +FOUNDATION_EXPORT double SiestaVersionNumber; + +//! Project version string for Siesta. +FOUNDATION_EXPORT const unsigned char SiestaVersionString[]; + From b1dcdf34186d3088e6e45ed9a78ffe9af26e96b7 Mon Sep 17 00:00:00 2001 From: miksen Date: Fri, 4 Sep 2015 11:49:10 +0200 Subject: [PATCH 153/356] Language bar clarification in README.md Clarified what the percentages in the Language bar are based on. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4ca08af1..2a4d3c31 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ See [Troubleshooting](#troubleshooting) and [`CONTRIBUTING.md`](/CONTRIBUTING.md ![language stats bar](https://cloud.githubusercontent.com/assets/173/5562290/48e24654-8ddf-11e4-8fe7-735b0ce3a0d3.png) -The Language stats bar is built by aggregating the languages of each file in that repository. If it is reporting a language that you don't expect: +The Language stats bar displays languages percentages for the files in the repository. The percentages are calculated based on the bytes of code for each language as reported by the [List Languages](https://developer.github.com/v3/repos/#list-languages) API. If the bar is reporting a language that you don't expect: 0. Click on the name of the language in the stats bar to see a list of the files that are identified as that language. 0. If you see files that you didn't write, consider moving the files into one of the [paths for vendored code](/lib/linguist/vendor.yml), or use the [manual overrides](#overrides) feature to ignore them. From 1f46cfafa7ddf7e849f73e2472c558004b83f22c Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Sat, 5 Sep 2015 13:31:17 +0200 Subject: [PATCH 154/356] New JSX language under JavaScript group A specific grammar is needed to highlight .jsx files Thus, there are now in a distinct language but still in the JavaScript group --- .gitmodules | 3 +++ grammars.yml | 3 +++ lib/linguist/languages.yml | 9 ++++++++- samples/JSX/sample.jsx | 23 +++++++++++++++++++++++ vendor/grammars/language-babel | 1 + 5 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 samples/JSX/sample.jsx create mode 160000 vendor/grammars/language-babel diff --git a/.gitmodules b/.gitmodules index 5f07d011..87654b7e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -677,3 +677,6 @@ [submodule "vendor/grammars/X10"] path = vendor/grammars/X10 url = git@github.com:x10-lang/x10-highlighting.git +[submodule "vendor/grammars/language-babel"] + path = vendor/grammars/language-babel + url = https://github.com/gandm/language-babel diff --git a/grammars.yml b/grammars.yml index 42be3967..2a7a89e2 100644 --- a/grammars.yml +++ b/grammars.yml @@ -314,6 +314,9 @@ vendor/grammars/json.tmbundle: - source.json vendor/grammars/kotlin-sublime-package: - source.Kotlin +vendor/grammars/language-babel/: +- source.js.jsx +- source.regexp.babel vendor/grammars/language-clojure: - source.clojure vendor/grammars/language-coffee-script: diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index b2d75fa1..7be29046 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1575,6 +1575,14 @@ JSONiq: - .jq tm_scope: source.jq +JSX: + type: programming + group: JavaScript + extensions: + - .jsx + tm_scope: source.js.jsx + ace_mode: javascript + Jade: group: HTML type: markup @@ -1628,7 +1636,6 @@ JavaScript: - .jsfl - .jsm - .jss - - .jsx - .njs - .pac - .sjs diff --git a/samples/JSX/sample.jsx b/samples/JSX/sample.jsx new file mode 100644 index 00000000..2020618d --- /dev/null +++ b/samples/JSX/sample.jsx @@ -0,0 +1,23 @@ +'use strict'; + +const React = require('react') + +module.exports = React.createClass({ + render: function() { + let {feeds, log} = this.props; + + log.info(feeds); + return
+

News Feed's

+
    + {feeds.map(function(feed) { + return
  • + {feed.data && feed.data.length > 0 ? + {feed.name} ({feed.data.length}) + : 'feed.name' } +
  • + })} +
+
; + } +}); diff --git a/vendor/grammars/language-babel b/vendor/grammars/language-babel new file mode 160000 index 00000000..c79ac897 --- /dev/null +++ b/vendor/grammars/language-babel @@ -0,0 +1 @@ +Subproject commit c79ac8979cff724e7db8933044f00b975dc4f277 From b275b5d728fd0330f8df29513a8c935528e2bc36 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Fri, 4 Sep 2015 10:24:06 +0200 Subject: [PATCH 155/356] Soften memory pressure --- lib/linguist/generated.rb | 8 ++++++-- lib/linguist/heuristics.rb | 3 ++- lib/linguist/lazy_blob.rb | 4 ++++ lib/linguist/repository.rb | 7 +++++-- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lib/linguist/generated.rb b/lib/linguist/generated.rb index f1fb2d19..d107e737 100644 --- a/lib/linguist/generated.rb +++ b/lib/linguist/generated.rb @@ -241,22 +241,26 @@ module Linguist return lines[0].include?("Code generated by") end + PROTOBUF_EXTENSIONS = ['.py', '.java', '.h', '.cc', '.cpp'] + # Internal: Is the blob a C++, Java or Python source file generated by the # Protocol Buffer compiler? # # Returns true of false. def generated_protocol_buffer? - return false unless ['.py', '.java', '.h', '.cc', '.cpp'].include?(extname) + return false unless PROTOBUF_EXTENSIONS.include?(extname) return false unless lines.count > 1 return lines[0].include?("Generated by the protocol buffer compiler. DO NOT EDIT!") end + APACHE_THRIFT_EXTENSIONS = ['.rb', '.py', '.go', '.js', '.m', '.java', '.h', '.cc', '.cpp'] + # Internal: Is the blob generated by Apache Thrift compiler? # # Returns true or false def generated_apache_thrift? - return false unless ['.rb', '.py', '.go', '.js', '.m', '.java', '.h', '.cc', '.cpp'].include?(extname) + return false unless APACHE_THRIFT_EXTENSIONS.include?(extname) return false unless lines.count > 1 return lines[0].include?("Autogenerated by Thrift Compiler") || lines[1].include?("Autogenerated by Thrift Compiler") diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 1660d99f..11f58b28 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -56,7 +56,8 @@ module Linguist # Internal: Check if this heuristic matches the candidate languages. def matches?(filename) - @extensions.any? { |ext| filename.downcase.end_with?(ext) } + filename = filename.downcase + @extensions.any? { |ext| filename.end_with?(ext) } end # Internal: Perform the heuristic diff --git a/lib/linguist/lazy_blob.rb b/lib/linguist/lazy_blob.rb index 55c10309..28fb78f3 100644 --- a/lib/linguist/lazy_blob.rb +++ b/lib/linguist/lazy_blob.rb @@ -79,6 +79,10 @@ module Linguist @size end + def cleanup! + @data.clear if @data + end + protected # Returns true if the attribute is present and not the string "false". diff --git a/lib/linguist/repository.rb b/lib/linguist/repository.rb index 181ddf0e..01e595da 100644 --- a/lib/linguist/repository.rb +++ b/lib/linguist/repository.rb @@ -157,8 +157,11 @@ module Linguist blob = Linguist::LazyBlob.new(repository, delta.new_file[:oid], new, mode.to_s(8)) - next unless blob.include_in_language_stats? - file_map[new] = [blob.language.group.name, blob.size] + if blob.include_in_language_stats? + file_map[new] = [blob.language.group.name, blob.size] + end + + blob.cleanup! end end From b1bcabd6e6896b00dc06f6be9ef482729d645807 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 8 Sep 2015 12:25:05 +0100 Subject: [PATCH 156/356] Adding Handlebars to the HTML group --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 7be29046..8409337b 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1367,6 +1367,7 @@ Haml: Handlebars: type: markup color: "#01a9d6" + group: HTML aliases: - hbs - htmlbars From 13d1f662d1ec2bf1ce3af6eef2459f520f9701fe Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Fri, 4 Sep 2015 15:11:29 +0200 Subject: [PATCH 157/356] Add the `git-linguist` helper --- bin/git-linguist | 141 ++++++++++++++++++++++++++++++++++++++++ github-linguist.gemspec | 2 +- lib/linguist/version.rb | 2 +- 3 files changed, 143 insertions(+), 2 deletions(-) create mode 100755 bin/git-linguist diff --git a/bin/git-linguist b/bin/git-linguist new file mode 100755 index 00000000..f761cfaf --- /dev/null +++ b/bin/git-linguist @@ -0,0 +1,141 @@ +#!/usr/bin/env ruby + +require 'linguist' +require 'rugged' +require 'optparse' +require 'json' +require 'tmpdir' +require 'zlib' + +class GitLinguist + attr_reader :repo_path + attr_reader :commit_oid + attr_reader :incremental + + def initialize(path, commit_oid, incremental = true) + @repo_path = path + @commit_oid = commit_oid || rugged.head.target_id + @incremental = incremental + end + + def linguist + repo = Linguist::Repository.new(rugged, commit_oid) + + if incremental && stats = load_language_stats + old_commit_oid, old_stats = stats + + # A cache with NULL oid means that we want to froze + # these language stats in place and stop computing + # them (for performance reasons) + return old_stats if old_commit_oid == NULL_OID + repo.load_existing_stats(old_commit_oid, old_stats) + end + + result = yield repo + + save_language_stats(commit_oid, repo.cache) + result + end + + def load_language_stats + version, commit_oid, stats = load_cache + if version == LANGUAGE_STATS_CACHE_VERSION && commit_oid && stats + [commit_oid, stats] + end + end + + def save_language_stats(commit_oid, stats) + cache = [LANGUAGE_STATS_CACHE_VERSION, commit_oid, stats] + write_cache(cache) + end + + def clear_language_stats + File.unlink(cache_file) + end + + def disable_language_stats + save_language_stats(NULL_OID, {}) + end + + protected + NULL_OID = ("0" * 40).freeze + + LANGUAGE_STATS_CACHE = 'language-stats.cache' + LANGUAGE_STATS_CACHE_VERSION = "v3:#{Linguist::VERSION}" + + def rugged + @rugged ||= Rugged::Repository.bare(repo_path) + end + + def cache_file + File.join(repo_path, LANGUAGE_STATS_CACHE) + end + + def write_cache(object) + tmp_path = Dir::Tmpname.make_tmpname(cache_file, nil) + + File.open(tmp_path, "wb") do |f| + marshal = Marshal.dump(object) + f.write(Zlib::Deflate.deflate(marshal)) + end + + File.rename(tmp_path, cache_file) + tmp_path = nil + ensure + (File.unlink(tmp_path) rescue nil) if tmp_path + end + + def load_cache + marshal = File.open(cache_file, "rb") { |f| Zlib::Inflate.inflate(f.read) } + Marshal.load(marshal) + rescue SystemCallError, ::Zlib::DataError, ::Zlib::BufError, TypeError + nil + end +end + + +def git_linguist(args) + incremental = true + commit = nil + git_dir = nil + + parser = OptionParser.new do |opts| + opts.banner = "Usage: git-linguist [OPTIONS] stats|breakdown|dump-cache|clear|disable" + + opts.on("-f", "--force", "Force a full rescan") { incremental = false } + opts.on("--git-dir=DIR", "Path to the git repository") { |v| git_dir = v } + opts.on("--commit=COMMIT", "Commit to index") { |v| commit = v} + end + + parser.parse!(args) + + git_dir ||= begin + pwd = Dir.pwd + dotgit = File.join(pwd, ".git") + File.directory?(dotgit) ? dotgit : pwd + end + + wrapper = GitLinguist.new(git_dir, commit, incremental) + + case args.pop + when "stats" + wrapper.linguist do |linguist| + puts JSON.dump(linguist.languages) + end + when "breakdown" + wrapper.linguist do |linguist| + puts JSON.dump(linguist.breakdown_by_file) + end + when "dump-cache" + puts JSON.dump(wrapper.load_language_stats) + when "clear" + wrapper.clear_language_stats + when "disable" + wrapper.disable_language_stats + else + $stderr.print(parser.help) + exit 1 + end +end + +git_linguist(ARGV) diff --git a/github-linguist.gemspec b/github-linguist.gemspec index 87bbc8bf..8e043857 100644 --- a/github-linguist.gemspec +++ b/github-linguist.gemspec @@ -11,7 +11,7 @@ Gem::Specification.new do |s| s.license = "MIT" s.files = Dir['lib/**/*'] - ['lib/linguist/grammars.rb'] - s.executables << 'linguist' + s.executables = ['linguist', 'git-linguist'] s.add_dependency 'charlock_holmes', '~> 0.7.3' s.add_dependency 'escape_utils', '~> 1.1.0' diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index dbdb7d7f..0ee8b185 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.5.15" + VERSION = "4.6.0.rc3" end From c2c068e9db1fdb900716dcc9373e37ff5d2a4ca2 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Mon, 14 Sep 2015 08:43:10 -0700 Subject: [PATCH 158/356] Bump version to 4.6.0 --- lib/linguist/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index 0ee8b185..a90a01fa 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.6.0.rc3" + VERSION = "4.6.0" end From 0145a0adb2633d99255c01239fab90fe93dd13d2 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Wed, 16 Sep 2015 05:40:55 -0700 Subject: [PATCH 159/356] git-linguist: Delay loading @commit_oid --- bin/git-linguist | 29 ++++++++++++++--------------- lib/linguist/version.rb | 2 +- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/bin/git-linguist b/bin/git-linguist index f761cfaf..03408ee5 100755 --- a/bin/git-linguist +++ b/bin/git-linguist @@ -8,20 +8,19 @@ require 'tmpdir' require 'zlib' class GitLinguist - attr_reader :repo_path - attr_reader :commit_oid - attr_reader :incremental - def initialize(path, commit_oid, incremental = true) @repo_path = path - @commit_oid = commit_oid || rugged.head.target_id + @commit_oid = commit_oid @incremental = incremental end def linguist - repo = Linguist::Repository.new(rugged, commit_oid) + if @commit_oid.nil? + raise "git-linguist must be called with a specific commit OID to perform language computation" + end + repo = Linguist::Repository.new(rugged, @commit_oid) - if incremental && stats = load_language_stats + if @incremental && stats = load_language_stats old_commit_oid, old_stats = stats # A cache with NULL oid means that we want to froze @@ -33,19 +32,19 @@ class GitLinguist result = yield repo - save_language_stats(commit_oid, repo.cache) + save_language_stats(@commit_oid, repo.cache) result end def load_language_stats - version, commit_oid, stats = load_cache - if version == LANGUAGE_STATS_CACHE_VERSION && commit_oid && stats - [commit_oid, stats] + version, oid, stats = load_cache + if version == LANGUAGE_STATS_CACHE_VERSION && oid && stats + [oid, stats] end end - def save_language_stats(commit_oid, stats) - cache = [LANGUAGE_STATS_CACHE_VERSION, commit_oid, stats] + def save_language_stats(oid, stats) + cache = [LANGUAGE_STATS_CACHE_VERSION, oid, stats] write_cache(cache) end @@ -64,11 +63,11 @@ class GitLinguist LANGUAGE_STATS_CACHE_VERSION = "v3:#{Linguist::VERSION}" def rugged - @rugged ||= Rugged::Repository.bare(repo_path) + @rugged ||= Rugged::Repository.bare(@repo_path) end def cache_file - File.join(repo_path, LANGUAGE_STATS_CACHE) + File.join(@repo_path, LANGUAGE_STATS_CACHE) end def write_cache(object) diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index a90a01fa..7f5e1750 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.6.0" + VERSION = "4.6.1" end From b54a9c7412d7659f0920a8bc5f9e8447be87b50e Mon Sep 17 00:00:00 2001 From: wizawu Date: Mon, 21 Sep 2015 13:48:30 +0800 Subject: [PATCH 160/356] Add new extension .tsx for TypeScript TypeScript 1.6 has introduced a new .tsx file extension. --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 8409337b..ddb18e78 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3441,6 +3441,7 @@ TypeScript: - ts extensions: - .ts + - .tsx tm_scope: source.ts ace_mode: typescript From 6a2d33a4b345039661ff37167bbdceaaf8875306 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Mon, 21 Sep 2015 19:04:30 +0200 Subject: [PATCH 161/356] Bump language-javascript for syntax highlighting fix This is primarily to pull https://github.com/atom/language-javascript/pull/227 Full changelog: https://github.com/atom/language-javascript/compare/c5c381e...7b14bbb#diff-46d5c1ca71eaebb92619d6c7abc9388d --- vendor/grammars/language-javascript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/grammars/language-javascript b/vendor/grammars/language-javascript index c5c381e3..7b14bbb0 160000 --- a/vendor/grammars/language-javascript +++ b/vendor/grammars/language-javascript @@ -1 +1 @@ -Subproject commit c5c381e37812219db84cb5916094ca3b8dce62db +Subproject commit 7b14bbb041abcb39522defceca509cd35b6a7449 From 090ea576b956bc812498f99da2604e95b2e3ee70 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Mon, 21 Sep 2015 21:23:40 +0200 Subject: [PATCH 162/356] github-linguist-grammars 4.6.2 --- lib/linguist/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index 7f5e1750..60bc59e0 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.6.1" + VERSION = "4.6.2" end From a354eddf4bce62acbc5f4b140dd64da71750a751 Mon Sep 17 00:00:00 2001 From: Brandon Keepers Date: Tue, 22 Sep 2015 16:33:08 -0400 Subject: [PATCH 163/356] Update github-linguist.gemspec --- github-linguist.gemspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/github-linguist.gemspec b/github-linguist.gemspec index 8e043857..bdba3e6b 100644 --- a/github-linguist.gemspec +++ b/github-linguist.gemspec @@ -10,7 +10,7 @@ Gem::Specification.new do |s| s.homepage = "https://github.com/github/linguist" s.license = "MIT" - s.files = Dir['lib/**/*'] - ['lib/linguist/grammars.rb'] + s.files = Dir['lib/**/*'] - ['lib/linguist/grammars.rb'] + ['LICENSE'] s.executables = ['linguist', 'git-linguist'] s.add_dependency 'charlock_holmes', '~> 0.7.3' From c624d686283df346ab8b24efdb2a81c98aaf16cf Mon Sep 17 00:00:00 2001 From: Jared Petersen Date: Wed, 23 Sep 2015 20:29:07 -0700 Subject: [PATCH 164/356] Added .pck PLSQL file extension --- lib/linguist/languages.yml | 1 + samples/PLSQL/plsqlguide.pck | 90 ++++++++++++++++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 samples/PLSQL/plsqlguide.pck diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 8409337b..abac6618 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2456,6 +2456,7 @@ PLSQL: color: "#dad8d8" extensions: - .pls + - .pck - .pkb - .pks - .plb diff --git a/samples/PLSQL/plsqlguide.pck b/samples/PLSQL/plsqlguide.pck new file mode 100644 index 00000000..d31830ba --- /dev/null +++ b/samples/PLSQL/plsqlguide.pck @@ -0,0 +1,90 @@ +create or replace package plsqlguide is + +-- Author : Jared Petersen +-- Created : 9/22/2015 12:26:22 AM +-- Purpose : Basic PLSQL template/guide + +/* Procedures */ +procedure p_main; + +end plsqlguide; +/ +create or replace package body plsqlguide is + +/* Main entry point (homepage) */ +procedure p_main + is +begin + +htp.prn(' + + + + + + + + PL/SQL Sample Application + + + + + + + + + + + +
+ + + + + + + + +'); + +-- Fill out the parts table +for row in (select * from parts) loop + htp.prn(' + + + + + + + + '); +end loop; + +htp.prn(' +
#NameDescriptionQuantityPrice
'||row.pid||''||row.name||''||row.description||''||row.quantity||''||row.price||'
+
+ + + + + + + +'); + +end p_main; + +begin + -- Initialization + null; +end plsqlguide; +/ From 01bb6c37abe56263225a4bcd533dbbd8d82710f7 Mon Sep 17 00:00:00 2001 From: Ingo Blechschmidt Date: Fri, 25 Sep 2015 18:48:01 +0200 Subject: [PATCH 165/356] Detect Pickle data dumps (.p, .pkl, .pickle) --- lib/linguist/languages.yml | 9 +++ samples/Pickle/data.p | 24 ++++++++ .../neural-network-ce-l2reg-784-10-30.p | 60 +++++++++++++++++++ samples/Pickle/random.p | 36 +++++++++++ samples/Pickle/save.p | 10 ++++ 5 files changed, 139 insertions(+) create mode 100644 samples/Pickle/data.p create mode 100644 samples/Pickle/neural-network-ce-l2reg-784-10-30.p create mode 100644 samples/Pickle/random.p create mode 100644 samples/Pickle/save.p diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 8409337b..45c7e4c8 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2572,6 +2572,15 @@ Perl6: tm_scope: source.perl.6 ace_mode: perl +Pickle: + type: data + extensions: + - .p + - .pickle + - .pkl + tm_scope: none + ace_mode: text + PicoLisp: type: programming extensions: diff --git a/samples/Pickle/data.p b/samples/Pickle/data.p new file mode 100644 index 00000000..cf451f4f --- /dev/null +++ b/samples/Pickle/data.p @@ -0,0 +1,24 @@ +(dp0 +S'a' +p1 +(lp2 +I1 +aF2.0 +aI3 +ac__builtin__ +complex +p3 +(F4.0 +F6.0 +tp4 +Rp5 +asS'c' +p6 +NsS'b' +p7 +(S'string' +p8 +VUnicode string +p9 +tp10 +s. \ No newline at end of file diff --git a/samples/Pickle/neural-network-ce-l2reg-784-10-30.p b/samples/Pickle/neural-network-ce-l2reg-784-10-30.p new file mode 100644 index 00000000..2ad7bad3 --- /dev/null +++ b/samples/Pickle/neural-network-ce-l2reg-784-10-30.p @@ -0,0 +1,60 @@ +(cnumpy.core.multiarray +_reconstruct +p1 +(cnumpy +ndarray +p2 +(I0 +tS'b' +tRp3 +(I1 +(I10 +I784 +tcnumpy +dtype +p4 +(S'f8' +I0 +I1 +tRp5 +(I3 +S'<' +NNNI-1 +I-1 +I0 +tbI00 +S'B\xf9\xc2tq0\xed?\xe7\xcd\xa1\x01\xe7\xb9\xca\xbf\x19X;&x8\xea?\xa9V\xc7\xf2\x81\xd3\xd8\xbf\xaa\xa8fs\x88\xaa\xe6?\x1bC\xde\xe8,!\xf0?\xf3\x10%y\x89\x83\xe9\xbf\xc5\x9dY\t{\x94\xf4\xbf:/\x18\x10l\xd7\xe2?[g\x8f\xa8O\x99\xc9\xbf\xeb\x11g\x06\xe9\xd2\xe0\xbf\xd7\xe6R\x0b\xd5\x19\xe8\xbfF\x90\xef\xfe\x05>\xd9\xbf_\x82u\x8d\xa2\xd3\xae\xbf/\x91\x97\x8b>I\xca?f\x9a\xb7\x15O!\xd0\xbf|\xff\xfe\x98#\x1f\xd2\xbf\x98J@kO\xa6\xe4\xbf\x90\x94@ \x82\xbf\xd9?=2\x1f\xc7\xcbi\xf1?\xbc\x07\x9cJj\x96\xed\xbf\xc0\xf2c\x8f\xb4\xc3\xca\xbf\xb8):\x0f\x8e\x00\xe1?\xc6\xfe\xae\n\xc0M\xce?\xf0hf:]#\xd1?\xd6f9_\xf0\t\xe4?\xbd1\x8b\xf3T7\xf3?\xcfCX\xbfQ\xf5\xec\xbf\xaaP^\xaf\x00\xe0\x8e\xbf\xa4\x122FP!\xd4?\xcf\xa5>\xa6\xee\xc0\xd9\xbf\xeb\xae\x90\xd2*\x05\xdf?\xb2nPzh\xa0\xf3?d\xf8\xa8P\xf9d\xb6?\x1e\x8b\x1b\xfe\x9e\xf2\xc6?\xb8\x92.\x1c\\1\xd3?`hs\xc7;T\xd2?MQ\x99+\xfc\x9c\xf0?;\\F\xf40=\xb9?Y\xbc\xd4\xb5\xf9\xe6\xa5\xbf?\x02\xf4\xa6\xc6\x9d\xe5\xbf\xe0\x94\xf0\xef#\x7f\xd2\xbf\xf2\xd7\\I\x8eh\xc8?\xf1\xd9S\xf1-\xef\xda\xbf\x1e\xe9\xbeZ\xbav\xff?n\xb7erb\xdf\xbe\xbf\xc8\xa9d\xe9\xb1\x81\xf1\xbf\x0f\x81\xa5E{\xfc\xd1?*\x8d\xb8s\x05T\xef\xbf\xf3.s\xf0\x1e\xe8\xdd?\xcab\x0cT\x1bZ\xe9?\xc4\xf3\rQ\xdd\x10\xd8\xbf\x1eHe\xc2\xca\xca\xda?\xbdq\xe9p\x96{\xdf\xbfD\x05\x0eI\xe6V\xc9\xbf\xcf\xf5\\v\xce8\xea\xbfbV\xd5;\xb5k\xf2\xbf}\x90\x1b|\xd4g\xe0?\xce\xac\xc0\xa9\xe0\x9d\x90?+\xf3W(\x01u\xdb\xbf\xac\xa19"D\x7f\xdd?\x1d\xf2\xfbmJ\xb8\xdd?fv\x8c\x0bt\x18\xf0\xbf\xff\x94hIJ&\xe8?\x87\xf4\xb3K\xdbC\xdc\xbf\x1a9G\xc1p\xa0\xc2\xbf%^ZX\xaa\xbd\xda\xbf4\xdf\x9f\xac\x10!\xe2\xbf\xc8:$\x03\xb3\xce\xc4\xbf\xa7,\x11\xf4\xf9\x14\xe5\xbf\x97\xb2\x8ez\xe4w\xdc?T0\xedSI\xdf\xd5?\xc5\xd8W0^\xce\xc4?\xee`\x867\xdb\xb4\xe7\xbf\xc1F\xf1\x00B\x10\x03\xc0\xf1\xcd\xdeM\xb7P\xf1\xbf\x07\xb7\x80KIn\xf6\xbf\xeb2\xc3O\x95\x9b\xb7\xbf\xa7s^\xa5x\x05\xe2?^\xd3\x1b\xbbA?\xf4\xbf\xfc+U\xb0M\xa8\xd5?\x1d gm$\xf4\xda?\xa7"c\xaf\xbf\x04\xe1\xbf\xb6U7\xde3v\xb9\xbf\x81"\x95\xe7G\x14\xc4?!^S,\xb60\x01\xc0i\x08&\xf3\x8d\r\xd0\xbf2\x05^w\xe7\xdf\xb7?w\x84}n\xd6\xcd\xe1?\xb3\x98\xfbN\xfb\xa2\xee?S\xab/\xef\x7f\x12\xf3\xbfWw\xf4\xfez\xae\xeb?a\xa5~\x19&\xec\xf3?\xb1\x08\xfe\xdd-\'\xd3\xbf\xbe\xe5i\r\xca\x90\xe9?\xf0\'T\xe3\xd1j\xe3?uH\xe3\xea8\xcb\xc0?X\xaf\x86\xa6\xe3\xb7\xf4?\xb7\xcc\xael6\x7f\xda\xbf\x06\x87a\xe2\x0e\xf0\xb4\xbfnWl6\x1b\x9e\xe9?\x97\xfb\x91X2\xf6\xb0\xbfT[\xea\xc0\xdfr\xe0?\xba\xd5\x00U\xc5B\xe3?n\xa4V\xa8\xa4z\xd0?\xf4#/,!\x92\xf2\xbf\x82\x83\xae\r\xa6\xec\xea\xbf\xa7t\xbbi\xdb\xf5\xb2\xbf\xd4Wr\xc2\xb0\x93\xcc?\xe2\x03gt\x0cr\xf0\xbfJ\x03\xf6_\xe4\r\xdf?\x8a\x83u#\xfe\x85\xe4\xbf/lf\xbe\xf3\xde\x94?\xbd\x99#\x10\x0c\x90\xf7?\xfd\x832\xfa([\xe5?R\xd9\xa6\xbf-$\x19\xfa7W\xd8?\xe6\xc8\xc6\x8d\x19u\xe4\xbf*\xedf\xd1\xab\x82\xe2\xbf\\7<\x97\x84\x84\xcf?\xc8\xce\xdc\xfb\x1f\xca\xee?\x98\xcbC\xb7\xf2\xac\xe6??\tKt\xbc\x8f\xf9\xbft\x98\x15\xc2\x84\xac\xfa\xbf\x93\'\xc6\xe6\xc5\xc3\xf7\xbfv\x9eLu\xdbq\xf6?H\x85\xf5e\xf0\x85\x8b\xbf>\xd9\xfas\x15%\xf2\xbf\xe4\xcf\x9e\xad\xf6\x96\xf4?_(\xfa\x94o\xbc\xe6?\n\xb0\x0cC!\x8e\xfd?1\x04lY])\x01@4_\x1bdyP\xe6?\xf8\xf1CG\xfe\x91\xe0\xbfD\x8c,\xdb\xcf\x14\xc2?\xe9N\xf1\x926\n\xdb?\x01\xed,\xba\x1dp\xe1\xbf\x87\xed\xd2\xcb\xe6\xc5\xde?(\xca\x9f\x02\xb7\xba\xcb\xbf\x179\xf7\x9c\xca\xa1\xe5?\x1d\x93P\xdbV\x1f\xf0?\xe0\xd2\xb41;\xf1\xfa\xbf+\x81M9\x88\xa0\xf5?\x9b\x01\xdb\x14g\x85\xc4\xbf\x82\\\xd7\xad-\xc6\xee\xbf\x85\xc9\xa2i\x95\x03\xe1\xbf\x04\xa0\xcb\xc1\xc7{\xde\xbf\x84()\xa4\xd8\xe9\xf3\xbf\x97NY\x85\xa3\x8e\xe0?\x0f\xf5\xaa\x1c\x1a\xe8\x00@4\xf9+\xce\xab\xdc\xf6\xbf\xf1\x98D\xa6\x07\xe3\xe1\xbfT\xa3A\xa7\x95\x17\x01@\xc8iPOe\xc2\xfc?\xdb(l\xd7o\xd3\xff\xbf}\xd1\x17\xee \x00\x02@\x95\xe0\x93X&\'\xcf\xbfgF\xd9(\x9f\x02\xe0?p\x9a\x9a\xc2\x12\x8c\xf9?\x9c\x7f\xed\x93\x11R\x00@\xcby\xd3\x94\xc7\x91\xea\xbf)\xea\x93\xfa\xc1+\xf2?\xe0\xd5\xd7\xd2\x99\xe7\xe2\xbf\x0b\xdf=`T\xbf\xca\xbf\x84\xed\x92\xef\x8d\x0b\xd9?\xc7\xa9XI\xfeH\xeb\xbf\xebJ#\xbd\xa3`\xf0?\xc5\x82\xb8\xf7\x12\xb4\x01\xc0\x0c\xaa\xdb\xe5\xe6\xff\xf5\xbfx\xceQ\x11]\xee\x01\xc0\xba*\n/\xa7\x15\xc7\xbf\x89\x1bC\x8e\xe7\xc9\xec\xbf\x1e\xcb\xeb\xc3\xcdb\xe6\xbf\xcf\x9c\x1f\x0e\x04\xe0\xf0\xbfvV\x05>\x8c\x12\xd8?\x08b\xc9S\xd5\xd3\xff?\x80S\xe4\xddP\xed\xfc\xbf\x99\xa0W\xf7O\xa3\xce\xbfj\xe2\xde\xb2\x1c\x1f\xf4?\x13\x00p\xb7\xe72\xa9?\xdf\xaal\xcfo1\x06\xc0\x024}C\xdd?;Cr\xff\xd8\x11\xe6?\x10\x02k\x80U/\xf9?\x14\xc8_~1\xf1\xa3?0\xa0\xb76\x05\xa0\xe5\xbf@\xf8F\xfa\xe1\x84\xb0\xbf\xa4\x04\xadTx\x80\xc2\xbfP\x82F\xc0\x1eW\xde\xbf\xc8\xbd2K\x1e\xd6\xd4\xbf^X\x81\x0f\x99#\xf8\xbf\x07]}\x11\xff\x95\xd0?;\xafZ\x0e\xc8\xb6\xd5?*I\x9d\xb0\x9fU\xcd?ct}\x1f\r1\xef?\x08\xaa\xc1\xbdQB\xfa\xbf\xf7\x10\xce\xe4\xc7-\xe9\xbf\xfb\xack`w\xd2\x0c\xc0c\xf4<\x13\x8a\xf8\xce?]\x0ei\xe2Fu\xca\xbft\xadq\xe0\xa7\x04\xe9\xbf\x06|\xb1\x0b\x8a}\xe4?\x0e\xefe86M\x05\xc0\xa9n\x87\x1d\xc0U\xe2?\xc0\xc1\xc4x\x95\xb4\xbd\xbfR\xfc\xf4\x0b\xb4Q\xd5?\xfc#\x86\x0c\x8d \xf1\xbf\x1c75\xe1C\x8a\xf0?\xca\x9e\xa2\xd2\xd7\xa4\x04@\x9fP\xd1S\x12\xa9\x10@\xaaw\x94\x97\x95\x18\x00@\x9a\xb7Fz\xbcZ\xf0?g\xa9\x95\xb0=|\x93?s\x13\x9f\xf0}1\xa5?\xac\x8c\x95\x95\xd0w\xff\xbfJ$Sk;\x00\xec\xbf\xd4\xc5\x0e\xb6\xbb\xe4\xf1\xbf\xa8E\xf3\xbe7\xcc\x04@\x92+\xf2\xc2s\t\xe8\xbfN\x12\xf9\xcf\x91\x0e\xba\xbf\xda\xe0\x06\xcc\xd5\x1f\xc1?\x88\x027\x94\xa6\xd5\xd4\xbf\xe6\x95\x0cs\xf5O\x0b\xc0M\xad\x11<\x04r\xd0?\x8ac\xb8\x05\xa18\xf2?_>\xf7w\x843\xd0?\x03\x08a7\xd4\\\xfd\xbf\x8d\xd3\xaf]\xe5\x9c\xb0\xbfqZ\xb6AK/\xa7?)\x8f\xf9z\x8a\x96\xc9?\xeaE\x8er\x8d>\xf9?\xf8w\xed\xde\r\xed\xe9\xbf8\xf5\xbbD\x0e\xdd\xe1\xbf4\x82\x0c:\x0e]\xe5?\xa8\xc4\xad\xa0e\xbe\x06@\xbf>\xc6(\x81\x00\xed\xbf\xc7\x921\xc1*\xb0\x06@\xb2\xb6k\xc7\xfe\xe7\x15@\xdf\xa7\xb9\xc7\x03~\x0b@\xceP\x1f\';A\xf7?\xbe\x8eAL<\xfd\xf3\xbf\xf5\xd7\x87\xbf\x15\x13\x9e?+\xcc\xb4\xce\xfd\xad\xb2?b\xe5\x1e\x88o\xe3\xef\xbfim9aR\xc4\xf3\xbf6\xaakxf\x80\x93?\xb9\xa8\xfd\xa2\xe6~\xf5?g\xae\x19=yW\xfe\xbf\xbe"m\xe3\x85<\n\xc09\xdf]\xb7\x83\xa1\xda?\n\xb1\x89\x90\x9e\x97\r\xc0\x96\xad\x05\xc4@7\xc6\xbf\xee\xa6\xf6~\x95/\x10\xc0<\xb2\xd6\xfd\xa2\x86\xd3\xbf\x940\xfe\x93\xd51\x03@FS\xb9;"\xa7\xd3?9\x1f\r\xaa<\xb9\x0c\xc0z\xc4\rq\xc4\x1f\x03\xc0\xa6\x8e\x15_\xd0\xeb\x06\xc0\xf3\x0eX\xfc\xdd\xd4\x05\xc0\n\xf7J\xa6L&\xea\xbf\xa6\x87\x96\x18\xe4p\t\xc0\xd7\xdbPz\x1aN\xfc\xbf\xf7.-\xef\x95\xdd\xec?\x03\xfa\t4xh\x10@c\xc7s\xb4\xd5\xe8\x10@]\xe7!?\xb0\xec\xee?b\x8e\xb2A0\xf6\x01@K\xb7\xf811\x07\xdc\xbfi\xfaE\xf7\xa8\x16\xfc?\xeav\x84gWW\xf7\xbf\xc1\x99x\x8f\xbf\x1f\xd7\xbf\xfa\x98\x9e\xed\xac\xaf\xc0?C\x90\xd7\xb2\x13\x96\x0f\xc0\xba\r\xbfT\x07\xc4\x98?#\x80\x19\xf8y\xc8\x05\xc0v\xf0s\x97c\xca\x02\xc0\x99\x89A\x85\xfd\xce\xc4\xbf\xa6\xbeV{y\xd5\xde\xbfq45\x8d\xffu\x02\xc0N\x0f\xddt\xeb\xdc\xff\xbf\x0f\xad,b\x96.\xdb\xbff\xcf\xcf\xe5\r5\x07@\x06Q=qm\xcc\n@\x84\xdf\xbe{\t1\xf2\xbf\xc4\x8a:\xae:\x1d\n\xc0\xb0T\x1e~\x844\xf7\xbf\xc1m\xc2\xbe\xc0Z\xff\xbft\x1b\xea\nFT\xe5\xbfz\xed\'\xce\xbdA\xe8\xbf\xd5\xfc\xe2\xd1$\x98\xf2\xbfrI2\xa3\xca\x0c\x01\xc0J6~\x8548\xfd?\x8eH|\xf7\xcbL\x10@\xfc\x02e4x)\x01@\x80\xeb\xdf\x14\xfa\x95\xe9?\xce9\xce\x8f0*\xe5?\xaba\xb6;Y[\xed\xbf8\x89\xe12\xc7\xb0\xd4\xbfc\xfc\xa8eE\xc4\xf1?P\xba\x1f>z\xbd\xb2\xbf\xa7\xfb\x05\x13\xd3\xe7\x11\xc05a\x87\xc4\xea\x88\x0b\xc0g\xc3)\xd6M\xf2\xf9\xbf\xec\x18a\x10^w\x02\xc0\x0b\xa4\x12\xd8\x92\xf5\xea?\x97\xe1\'\'\x99\xa7\xe4?\x02c\xcd~\x1f\x11\x00\xc0a\x82\x85Q^\x97\x01@\x8d\x97|\xfdz\x03\x07@&\xeedI\xcb\xd5\xfe?\x07\x17\x1e\xb7\xed6\xdb\xbfv\xa4\xa5y\xc0\xe2\xf6\xbf\x0f\xb2:\xeb\x1f\xd3\xd7\xbf\xa2\x14M$}\xb6\t\xc0\xdf;g\xd8\xa2~\xed?#r\xdcR\x94\xfb\xf6\xbfc\x1f\x82\x17\x0e\xdc\xf9\xbf\x80\xe7\x08\xe26\x15\x0b\xc0M\x91\x1e\xd3\x99\x98\xf2?\x9fn\x81\xd7b\xb5\r@X\x93\xeb<2\x85\x03@\xc9r\xea\x00\xce\xb7\xf2?\x8c\xc4It\xb5\x8f\xb2\xbf\x0e\xe6\xf5\x81\xbc\xed\xce?\xac\xf0r\x0b\xa8\x8e\xf5?7E\x19\xaa\x115\xee\xbf\x9a~j\x97\x95)\xf1\xbf\x8de\x11\x9d\xad\x8e\xcf\xbfU\x18\x87\x9e\xd5\x9d\x05\xc0\x96\xb0\xde\x17\xab\x8f\xc4?\x19i\x1f.\x07$\xf0?\xa6Kv\xbdFh\xe4\xbf\xc4V\x99cCh\xf6\xbfiT\xfaXw\x8c\xc5\xbf\x8f$\x84\x8d\xcf\xea\xea?\xe7\x8e\x13\xf0\x936\xf9\xbfcn>\xd9\xaf\xfb\x00@r\xe8\xe1\xd3\xdbu\xf1?\xab\x82\xef\xd2\xfb;\xf6\xbfJ\xd2\xc3j\x7f\xbb\xf5\xbf\x07\x04\xb0C\xfb\xb7\x00\xc0\x0c\x82\x0e\xcc\xd8\xf9\xe8\xbf<\xfbh\xb5wJ\x0f\xc0h^\x83\x93\xc5\xe5\x11\xc0\xa1\x95\xfe\rqi\xfe\xbf\x03\xcb\xbd\xb4\xf0)\xf4\xbf\xc5\x17q\x89\x0cd\x08\xc0\xaa>_=\x05\x9f\xfc?\x99\xb9W\x89\xc2\xee\xf2?Qt\'C\xdb\x0e\xf5?\xbe\xac\x9f\xc4\x1c\xad\xe7\xbfd\xac\xa4.\xc9\xac\xe3\xbf\x15W>m\xd0\x0c\x99\xbfv\xf6./\x82y\xd0?(o+L\x17O\xd6\xbf\xec\xfd\xd1P\xb9A\xe4?QAY$v\xf3\xf2\xbf\x90<\xc4\nG=\xe9?\x04\xa7eI\x14\xd4\xcf\xbf\x033\xf4\xfbB\xad\xe1?\x03^$d\xa1\x9f\xc4\xbf\xed\x1c\xdb&\xd1q\xf9?\xab\x1b\xce\x8a\xcc\x05\xf0?A\x060\x87&\xa7\x08\xc0U\x08\x14\x0ci=\x0c@\x88\xde\x8e:[_\xfd?\x1d\xe4Ju\xe5?\xef?\xa0E(|z\xec4\xfd\xbf\xb9\xe0\xe37\xa2=\xd2\xbfh\x9c\xc0\xf3\xfa\x9b\xfb\xbf\xeb\x0c\xddR\x8e\r\xfc\xbf\xb0u\xf1>\xb9\'\x10\xc0\xc9I\x14\x935\xe0\xe5?\xe7\xcb\xcc\x86\x86+\r@\xcf]\xe6\xa1\xa2\xa4\xef?\xfc\x8c\x82\xd9\xc2\x9c\xd1?V\xacJ\xef\x13\x05\xec?\xf0\x08G\'e]\xe4\xbf\xda\x165\xf88]\xd1?\x8crAl\xec\xba\xf1\xbfW\x1c\x07G\x12\xb4\xfa?\x88\x108^\xd5\xcb\r@Y\xc6\x00\xad\xc8&\xf2?\xc0a\xd5\xefs\xaf\xc6\xbf\xef\xeb\x98\x85\x19\x04\x02\xc0b\xd9d\xb4i\xaa\xe7\xbfI\xa0\x96\xbf\x8f\x93\xb8?\x0c~$\xd8\xc0\x94\xf4\xbf\xa0]:\x1b\xf0\x1d\xf0?X\xf4G\x8a}\xfa\x03@:\xdd*\x0b_A\xea?\xda\x1a\xe1*|\x85\x00\xc0\x02\x10j\x14\x88\x10\x07\xc0\xa5\x84\xd1"<\xbd\xf3\xbf\xf0e\xf3\x85\x10c\xfd\xbfM\xdd+8\xff\xad\xf7\xbfb\x00\x1f\xbe\x0c\xef\xf9\xbf\xd6\xa2\x8d\xb9\x86\x83\xfe\xbf-\xe0\x1cuo\xee\xbe\xbf+[\xc7jL\x0b\xf4?\x89M#c\x1b7\xc6?\xd4\\\xdd\x836\xe5\x01@\xab\xeb\xfeB\x16V\xe9?\xe8\xfe\x95)=C\xf3?\x1f\xfb\xc3\xf4t\xba\xbd\xbf\x84\x10a\x13\xba/\xb4\xbf\xe4r\xb5l\x08\xd8\xa4?\x0cT\xa4\x07\xcaJ\xda\xbf\xd8\xa8|Q\xbd\x1d\x06@/\xcb4y\x82Q\x03@\xe8\xb8\xad6\xc7\xa7\x08@\xc9\x01\\\xc6\x1dn\x00@\xd2\x1f\xa3\xc1e\x81\xf1\xbf\xaa\x1e\x1cY\x9c\x91\xeb\xbf\xff\xd2w\xba\xbe(\xd8\xbfs\x10.\xfd;\x9a\xf2?\x90F\xb8\x9a\x89r\xee\xbf\x8265f\x1aL\xe9?\xb0n\xf3\x00\xdb*\xfa\xbfL\xbf\x877q\xb2\xe6?D\x13rg{\x91\x03\xc0:\xe0\xe9\xd2\xef\\\xaa\xbfz<\xb6\xa7E\xf6\xd6\xbfw\xde\xe2\xba\xc6\x01\x07\xc0q.\xd2\xda\x7ff\x10@"`\x9b\xc5\x90G\xb8\xbf*0rV\xd8O\xb9?\xee\xbf}v\x08=\xef?IH\xb5TBx\xf5?\x1a\xa3rh\x1a\n\xfb?\xb8U\x9c+\x9c\x9e\xdc\xbf\xb7\xc1c\xe1\xdb\r\xef\xbf\xe0/\x82QgZ\xb3?\xa6\xe2\x17\xbc\x05]\xdd?\xa9l\xdf?\xb1\x9e\xda?\x8c\n\xee!gd\xe7\xbfK\xac9>\xf5!\xe9?\x07Q\x02s\xdb\xfb\xe4?\xa2z#\x19\n\xd7\xeb?\xa6kC_\x9b\x8a\xe2?0\xcf\x94\xadg\xf1\x02@\xdei1\xcf@I\xf7?o\x8b\xf2$Z\x83\xe6?\xeeb\xd0\xb3\x91H\xd8\xbf\xd1\xc0\x0ck^\x95\x01\xc0\x96\xf21)`\xb9\xeb?l\xed\x89\xdf\xee\x08\xf0?\xddZ\xb5m\xfcQ\xf5?4\x18w\xa0\xbe\xf9\xf6\xbf\x1b\xa7\xff\x1d\x08\n\xec\xbf\xaa\x08\x85\'R\xac\xc3?\xcd\x8es\x87!T\xfe?X\xbb\x8e[\x9e\x89\xed?\xdf\x8b\xf9T\xe0G\x03@}\xcer}TM\xeb\xbf\xe1\xf8V\xb9\xd8J\x0f@\xe1Zv\x02\xa1m\x12@p\xb4\x0be\xf7\xa7\x10@\xc4\xb7\xf9!m\xb9\xf7?\xf2\x93\x83\\\xe6W\xff?@s\xc2\x92\xd9b\xee\xbf\x03\xeb%\x8b\xf0\xed\xc6\xbf\xa1\xe2\xc9\xcf\xfa`\xdd?y\xddyAR\xc5\xd2\xbf)\x9cScA\xd6\xc9?\xfc\xc4=4\xd5\x8f\xc7?\xd9]\xbd\xef\x01)\xe0\xbf\t\x05`j\xa11\x0f@\x8c\xb7\xf2\xfb\xea\xd0\x04@\xc5\xee\xf2\x9e\\i\xf0?\x1c\xc8\x01y4\\\x13@\xca,\xf74\xf3C\xff?-f\xac\x07\xdb\xce\xf6??\xef\x9b\xd2\xaa\xa1\xd9\xbf\xbc\x1d\x9a&v\xef\xa0\xbfC\xde+k\xa9s\xea\xbf/\x1b"c|\xd7\xe5?d=zH\tJ\xea?\xd2?\xb1rKp\xf0?4@;<\xc5l\x03@-\xd3r\x1co\xab\xed?p\xcb\x9e\xca\x94\xb8\xf9?X\x112\x18\x02H\xde\xbf+!\xa8I\xba.\x10@\xd7\xa3\xc3\xaf\xd8\xe5\x13@\xdf\x8c\xe5\xb4\x0fH\t@}Z\xb3m\x14\x9e\xeb\xbfJ\x1e.\xde\xc2@\x00@\x05\xa8\xd6\xc8\x1b\xa1\xce?\x9d\x12\xdd\xa3\x1b\xe4\xe8?\xeb\x03\x91\xb7\x1d\xb5\xd6?I\xa2V\x8b5\x1d\xf0?6U\x96\xafH;\xf5?63\xb9\xf4\xc0.\xe5?\x92\xe8\x9a0\xda\xe7\xf6?\xf9\x01T\x87UV\x11@\x8a\xd9\xcb!\xc1W\x18@\x94\x1f\x1e\xb40\x9a\x14@\xc8\x8be>-&\x12@\xc6\x9bx\x86\x15i\x06@\x06^\xcer\xb0\x94\x03@\xa2\x1er\x8f\xd8r\xff?\xb5\x06\x17\x81\xf6\x17\xc7\xbf$\xcc\xb2\x14\x03\xb4\xef?QY\xfe\xe3b\xc9\x0e@\xe8|\x8e\xcc\t \x05@\x05\xb4\xa2\x9bQZ\x04@\xb8\'\xa7Vrh\xfc?n\x82\x9c\xd7\xe7\x03\x08@)\xdeo\x07\x93-\x10@\x8aO\xe5\x97\xb56\t@\xd3\xcd\x12X\x01m\x0b@\xb2\x16H\xeb"\xb7\x06@,6\x91n\xcc\xcd\xd5?\xe9\xc1X\xf9\xf6\xa0\xf1?\xc3\x06\x056\xc3\xf0\x94?\xb7m\xef\x99\xc5%\xf3?1)\xb6\x17*\xb1\xf8\xbf\xbf\x95\xce\xd5\n\xe5\xdc\xbf\xd2\xeb\xfe\xeb\xbd\xbe\xd8?\xeeo~\x0b\x0cV\xf5?|\xf5\xf1\x13\x08?\xef?d\x0f\xc3\xbaN\x83\x01@\xbe\xcc\x8c\x91\xab\x1a\x12@\x99\x9e\x83\xda"\xb9\x04@\x86\xaa\xdd\x96qB\xff?\xac\xf2\x18`\xf7?P\t\x97%80\xff?\x8f_\x11\x0cEZ\xef?\x91\x8aR\x17\x1e?\x10@\xe7)}4\xe8\x15\x06@\xe1\xcf\xdb\xa2\xfc\xc3\n@\xd5\xd7\x99v\xdf\x9c\xf8\xbf0\x7f-T\xfb\xf0\xd1\xbf\xcf\xa7\x02T#r\xe6\xbfi6r=\x9b\x1ew\xbfW`C\x03l\xad\xdf?\xc4H\t\x16b\x10\xcf?\x1aj\xb1\x10\x95[\xd0\xbf2\x94\x06N\x98\xa4\xea?\t|Ql\x14#\xfd?\t\x813 \x1c\x80\xc9?\x99\xc0\xf7,\xc4K\x9f\xbfT#\xa1\x1c3\xbb\xea\xbf\xb6\x19\xf6\x98\x89\xd9\xf7?\x83\xf6\x87L\xca\x95\x02@\x8c\xe6\xe0\x9c\xd6\x81\xf1\xbf\t\x8a\n\x94#\xe2\xbb?\xe1\xb7\n\xf3\xc5\xe3\x00@6\xe1=<\xad\xc1\xd2?\x96.\x1bh\xd4l\xea?\x06\xb0*\x19\xd49\x01@\xd4\x90\xd0;\x1ak\x10@j \x02\'[:\xe0?\xc8\x10\x8aOW\xc3\x02@\x96\x00\xdd\xe6\x13\xc4\xe9?\xbf\x95\xd0\x0f\xba\xf1\xe6?\xb7-3\xa8-\x89\xf7?0\xe5?\xc0Y\xfb\xfc?\x1a\xe5:\x177E\x07@\xb5Xn%\x7f\xbd\xe6?\xb3:\x99\x1a\x83*\xf3?NvfY\x01h\xe4?\xd6@;\xe0\xc1\xff\xe7?BOi )A\xdc?!5\x1aT\xf1\xec\xd1\xbf7g\xf4@1x\xf3?\xee\xf8\xab\x1a&\xee\xee?\xd9&\xa0\x9e\xef9\xe2\xbfB\xf3\x0bC\xbbi\x00\xc0\x02V#\x1d\x1az\xf7\xbf\xd9a\x84\xdc\x8a\'\xbe?\xf4\x8dMWH\xb0\xe5?s\xee\x00\x80Q\x89\x04@\x15o\x1f\x03\x1d>\xd8\xbfq\xbb\x85\xd5\xd1\xf2\xff?<\x13T\xd19\xb6\x04@N\x17\x1c\xde\x08m\xfb?p\xd9h7\x1d\r\x14@\xa8v\xd0Z\xe7c\xe8?A\xf5\'\xc2\xceP\t@2\xf9\x9aZ>\x92\xec?"\xca\xc4\xac>"\x06@\xe8\x1d\xa0\xbe8\xab\xff?\xf0\x1aS\x99\x0bk\xf1?u)\xaa\x01\xbao\xf6\xbf\xb0_\xc8\x1cF\x9b\x03@x\x01Q\x02\x12\xdb\xcf\xbf\xf1\xe9C\\\xf7Y\xd5?\x12\xa6\x84\xea\xe9W\xc3\xbf\xf90\xa95\x05.\xdb?\x85}\xcc5\xfb\xaa\xce?\x0f \x83\xc2AP\xeb?b\x05\xef\xcc\xeeP\xb2?B\xdb\xf9\xe1\xf5\x9d\xcb\xbf\x8b\xa2/`\x0c\xe2\xc6\xbf`\xdd\xa1\xb4\xc5\x92\xf9\xbf=2\x1fL\xfe\xd2\t\xc0[\xf1nPhY\xff\xbf\x17\xbb|B\x94\xbb\x00\xc0\x99\x1f\x1bk\xc7\xce\xf9\xbf\x94\x02\x83\x96\xe6\x1f\xd3?\xaf\x1a\xa3B1\x95\xfe?_\xd5\x89r3e\xe3?\x85\xdaW\x83\x9dZ\xea\xbf]\xacJ\x1a\xb8\x07\xd5?\x00\x01\x1e\xd8YT\xe0\xbfR\x80\xa1\x90\x9bj\xf1?\xe3\xcd\x99n\xeb\t\xf9?`\xb7E\xe7U\xc1\xe6\xbf\x02\x88\x0c\xbc\xdc-\xe0\xbfk\xb4F\x17\xf7\xf8\xe4\xbf\xb6\xdf\xdfu\xfbf\xe1\xbf\xbf\xc5\xd3\x97!{\xf8\xbf\xd7\x90P\x8e\xf4m\xc5\xbf\x93\x1a\\\xd8\xb7\x90\xe2?)k\xbe\xefFW\xa3?\xaa\xcep\xb6\xcc\xee\xf3?\x81\x11\xb1\xd9mk\xe2\xbf+\xd0P]\x00p\xd0\xbf\xbb\xd2\xaf\xf8P\xbd\xf4\xbf\xf22n\x01\x01\xbc\xc2\xbf@\xdf\xb1\xce\xe1i\xd3\xbf++\x00\xd7\xbfo\xda?\xf9L\x03\xca\\*\xd6?\xe5\xbdS\xd5\xbe8\xc0\xbf\x95\x99Ui\xdaZ\x00\xc0q\x8a\xd2\x96\xe6\xd5\xf9\xbfm\xb9\x01[\x95\x10\x00\xc0\xbc\x10\x05x\x9f-\x13\xc0\xbbd\xbc\xb9\x8e\xfe\x05\xc0Y\xc9\xd91\xdc:\xea\xbf\xce\xf7(\xf8\x94\xdb\xeb\xbf\xea\xb8\xc9\xce\xab\x87\xb3?e\xc1\xae\xe5\x86>\x04\xc0Ks\xd0\xfcp\x87\xc2?;9\x1b\x0f4\xb8\xd8\xbf3\x86\xf6\xa5\x80\xae\xfd\xbf\x9a\xb8\xb3\x1c\x87\x9a\xe9\xbf9E\xa7\xfaq\xd4\xf2\xbf\xda\xdc\x874\x94\x91\xe6?\xd1g\xb8\xa4x\xad\xe4\xbf^\xbf_\xcd\xbf\xb0\xc6?<\x85&6R\xa5\xe5\xbf\xaa"\xcbG-\x1a\xf5\xbf\x88\xd2\x11T\xb5\xe5\xe2\xbf\xec\x127\x1f\xc5\xc0\xd9?\xdaB\xc5\x07\n\xe3\xe5?3\x0e\xc7_\x92\xeb\xf0?\x19\xb3\x1f\xeeRY\xc3?\xfa\x01\x9d\xa3\x9bf\xf2?W\xb6\x10\xfee\xab2?5A)\x05\x15\x83\xe6\xbf\x05\xb7\x0cO\x81\xdf\xd6\xbf\x0bim\xfb\xbcX\xf8?7\x8c\xfd\xea\xadQ\xd1\xbf@\xb7K\x18\x10$\xea\xbf\xb3\x8b\x86\xed\n\x98\xa4\xbf\xe7\x10\xa9-@\x06\xe5?E7\xb0\x83\xfe\xe5\xe6\xbf\xa9\xd3\xbf\xd0a\x04\xed\xbf\x069\xc1\xb46\x1a\xe4\xbf\xc9-\xf2\xc3\xac\xe9\xe3\xbf\xd5\x7fA\x8d\x97\xca\xec\xbfs\xf8\x8c\xbe\'\xf4\xc8?\xbd\xef\x8aM\xa23\xf3?\xe0U\xc4\xc3!\xfb\xc5\xbf\x8d\x8f\xaaO\x0fp\xe9\xbf\x8e#\x19\xb5\x0bO\xe6\xbf\x88,dLk\xf2\xf2?\\s\xf7=\x05\x8e\xd6\xbf*\x04\x8b,N\xfa\xe6\xbf,\xf8\xb8\xe9I\xda\xd4?l\xd19\x1dqJ\xf7\xbf\xdd\xc1u\x17 \xcf\xe0?\x00\xc4\x8a\xbc \x12\xc7?@\x02\xe3\xec4\x1b\xe7?\xa3,yQ\x02\x07\xc3\xbf\xbf\xc0\xa5\xb7\xc6K\xe6?\x8d\xf4\x02 vC\xe5?m\xe9Lf\xc7\x90\xf2\xbf3\xfb\xec\x1am\x1es\xbfP\xe7fr@\xc5\xeb?8\x8eu\xea\xd9\xeb\xea\xbfI\xbd\x9d\xde\xb30\xda?\x19\x89\x82\xef\xc5\xd7\xf4\xbf\xef\xaa\x9d#\x88$\xf6?\x05W\xe8V\xe6\xa3\xcf\xbf\xa4\xa9\xe8.\xfeE\xc6\xbf\xec\xd9m\x97\xdcI\xe1\xbf]F\xb2\x16B\xe7\xe2?,WR\t\xe5\xaf\xe2?\tK\xe9\x87$(\xea??\x0bM\xd9R\xba\xb6\xbf\x88F\xe3\xb2\xc3v\xef\xbf7^\x89\xd8j#\xc4\xbfY8c6\xc6\xdb\xe8\xbf\xca\to\xbf\xec\xf0\xd9?w\xe0\x13\xad\xb9\xeb\xe9?\xaa\xe8\xb7\x92A\xe9\xf7?\xcc/\xcb\xae\xb1T\xd3?\xf97e\xa4a\xab\xf5?\xd6\x06:nh\xb0\xde?R\xd6{\x89\x90\r\xf0\xbf\xa7\xd1\x0cD\xff\\\xef?$\r\xc6\x91\x16\xf1\xfc?\x9c\xca\xe3\xda/\xbb\x03\xc0j-S\xa7\x98?\xfe\xbf\xd0\xe5\x9b\x92\x11\x82\xd2?K\x88&\xbf\xc8\xee\xf6\xbfhB\xa6\x02\xe3\xb3\xe0\xbfC\xee(b\xda\xe6\xeb?\xfb!\xef\x1d\x12\x86\xe9\xbf&o8x7\xd1\xf0\xbfp\x16\xcc\xd4W\xeb\xfb?Ua\xa1i\t\x1e\xb7\xbf\xdb\x10\xc6\xc1vQ\xd4?N\xdc\xd7\x0f\xf7\xda\xb2?\xf1k\x0cF\xf5T\xca\xbf\x8f(q\xdbU\\\xdc?\x8b\xde\x162\x92\xbd\xc0\xbf8\xb80"\x88\x86\xdd\xbf\xdaa\x8b\xb21\xa4\xb3\xbfD\xb2\'\x859\xca\xd3?nw-\x98\x03\xc5\xd7\xbfaj\xb3\xacn \xe1\xbfr]\xff>V\x90\xda\xbf\xfa\xec\x1at\xd0x\xd3?.\x0b\xe5\x1a-]\xd0?5,\xbc\x87R?\xf5\xbf{P\x1a\xdc\xbe\xbc\xf0?\xe9\x86\xceHq\xe4\xd6?\xbd\xb0\\^w\xd6\xf2?\xa5\xe0\xf0\xaf\xf8\x99\xc4?\x02\'/\x11qy\xf3\xbf[\xda\x8e\xfd\xa2\xee\xe7\xbf*Wa\x96\xb8\xb8\xd0\xbf\xef\xb6\xed\x8d\x03\xa0\xe0?\xd9\x045\x1cR\xac\xd5?\xd0!\x9b\x9c\xb5!\xea\xbf#SgZ\x9a\xa0\xe2\xbf\x19\xc7\xf9\xf26\xe7\xc4\xbf\xe2\xd7`\xbd\xc0\x97\xe2\xbf\x95\xa4j\xb5f\xac\xc9\xbf\xc9\xc2\xdb\xf6Ka\xf5?^\xdbE\xa4\xdfb\xf4\xbf\xc7\x95\xd6\x01X\xcf\xb9\xbfsk\n\x9e\x9a\xf2\n@\x8c\xd4\xb6\x919\xb6\xf2\xbf\x1c\xce\xa6\x8b\x88\xb2\xc0\xbf\x86\xb8i=J\x85\xc9?\x9e\xfc\x94\xfa\x8c\xbe\xc9\xbf,i\x03C\x99\x87\xef\xbf\xe3\x04\xa5\xdb\xcd\xb0\x95\xbf\xa76\x00t\xcbL\xf2\xbf\x1d\xac\x86\xc7\x8e\x9a\xdf\xbfo_U\xd4)h\xda\xbf<>\xd0\xe5z:\xf5\xbf\x88\xccQ8\x943\xd8\xbf\xeb\x0fJi\xbe\xaa\xd6?q7\x06\xda\xb5r\xe1?&\x07\xcb\r\xeb\x8b\xd3?\xa4h\r\xc4I\x89\xb5?\x1dI\x00\x01|H\xb5?i\xba\xf1\x04\x1b\x07\xba\xbf\x1f\xc0L?\x11U\xdc\xbf\xe7\xf6I\x17u\xa6\xde?`\x19\x19\x8f\xad\x86\xe9?\xe2\x8e\x0c\xb3ag\xe7\xbf\x8d4\xdc\xe1%\xe1\xd6\xbf\xa8f\xea\xbfH\xe3x\x8b\xb0>\xb4?\xa0eT\xc14\x16\xe9\xbf\xdc\xb0\x91\xa0\x04\x18\x00\xc0\xd5\x19\xd7v\x96\x1c\x05\xc0$\x17\xed*\xef\xf6\x04\xc0|\xe8\xea\x04%\x05\x15\xc0\xb2&\x1e\x16\x14\xa3\x00\xc0\x8b\xf7\x8d\x896\xdf\xf9\xbf\xdd\x9a\x0c\xed"\xe5\x01\xc0x\xf2\xb5\x15\xc2\xfd\xdf\xbf\xca7!\x8cWY\xc6\xbf\x18\xa6\x9es\x96\xca\xe8\xbf\xaf7\x11\x14\x9c)\x08\xc0KZ\xd5\x90\x98\xe6\xb2\xbf\x91\xd2C\x18\xdde\x06\xc0U\xfe[>[ \xee\xbf\x8e\x19\x03\x9aj\xa2\xd4\xbf\x84\xd1\x984\x1b\x15\xf4?\x9c\x16\x05G\x8dx\xeb?\xef\x15MA\xac\xa6\xec?\xd5\x8e\x12wG\x9a\xf3\xbfZ\xe0r}q[\xbb?A\x13\xb1\x85\xd9C\xe5\xbfL\xaf\x00_\x8b\xfe\xe3?\xdeG~\xa1B\xbbp\xbfuCo3\xbf\xe6\xd4?\xab@\xb7\x9e\xf7:\xd0\xbf\x1d\xdf\xe7\nfs\x00@\xb2+\xa7\xb9\n\xd3\xdc?\xa3\n\x9b\x04\x9cv\xf2?o7.\xb9-\x0c\xfc\xbf\x9bk\x88\xd7o/\xf2\xbf\x1aD\xa818\xbf\x07\xc0\xb6Q{\xee;4\xf6\xbf\x1a\xe3z\xe0[\x13\xdc\xbf\x8a\xcdDU\xd5\x14\xf8?\x10\x89Aj\xc2\xdc\xee\xbfE\x05\xb1\x8b\xb6\xe0\xec\xbflR\xcb\x03\x0bQ\xf6\xbf\x89\xd9\xd2U\x92\x16\xed\xbf\x91\xdd\xc1\xe9,%\xf7\xbf>\xc5\xe5\x03j{\xa0\xbf\xf3\x98\xb5\xf7\x98e\xf3\xbfzY\xd0\x1b\x0f\x01\xf2\xbfdfH6\xbfT\xfc\xbfd\x98@9ii\xd0?\xc2\xa77\xce\x13\x0b\xd8\xbf\xe8\x11t\xf9h&\xf0?\x97\x82\xf3}\xf07\xfc?{\xd4\xe5\xd7\xb9\xe6\x00@3\x17f\xc0Q\xce\xe7\xbf\xd1Zf\xf7\xa5%\xec\xbf\x15\xe8\xe5\x9d\xdf\xf7\xcc\xbf\xc7v\x05\xce\x8fc\xf5\xbf\xa4=\x05LRs\xd0\xbf\xc0+\xd4n\xf4\xa1\xf0?Y\xd8\xaf\xf5\xaa\x17\xc1\xbf\xaf\x19dY\t\xbc\xc3?\xd7\xb7\x0e\x98\xce\xcb\xea?\xed\x9d\xec9\x0f\xa5\xfd\xbf\xb9\xd8<\xbb\x0e;\x04@(\xd1\xd9\xb5\x87G\xfd\xbf\xec\xf8<\x9d\xc7\xb3\xe5?4\xaf\x16F\xfe!\xbd?lX^-\xa7\xc9\x00\xc0\xd3Yfn/\xed\xe0?;t\xb6}\xac\xd3\x01\xc0\x1a`\xbd\xb8\xb1\xa0\xcc?\xcds\xb2\xde\xca\xfe\xd0?hA`\xdbD\xea\xdf\xbfE\xa6w\x91\x03+u?\xe7\xcf\x8c\xd3\x84\xa5\x03@\x94\x1d3\x82\x9f\xeb\xe0\xbf\xad\xe8{\xd7B\x16\xf8?+\'\x0eN\xf9.\r@!f\xbfa\xc0\xea\xf4?\x07\x87NO\x15\xc5\xb3\xbf\xcc\xb4A\xee\x08\x14\xf3?e\xa2\x8e\x08R\xb0\xb8\xbfY\xd4H\x10\x9f\t\xd6?\xd9\xf4\xef\xa9\x15\x06\xc0\xbf\xda\x83|y\xa8\x1d\xe6\xbfW\xdfG$W5\xd3?\x9f\xc6\x1f"\xd0O\xed?/\xf9_\xb6\xc3\xef\xe7?\xbd\x0c\xc9\x02k\xcb\xf3?n\x8c\xd2+\xbdL\xf2?!\x17x>\xa1\xeb\xfd?\xfe:\xfe\xa8\xfb\xa8\xe8?h\x90\xc3Ad\xc2\xe5\xbf\x85\x9fr\x1d\xb7#4\xbf\x90\x881\n\x13\x0c\x06@\xd7\x06^\xbe(\xdc\xf0?\xdf\x06\xaf0Ta\xf6?\xf7>\x9d\xedCR\xeb?\x99d\xf2\x1a\x9d\'\xce?\x1d\xa9oq\xa3\xd6\xf6?\xcb?=\x93B=\x06@Pc~\xcd\x03:\xf9?\x8c\x06&I\x83i\xf6?\x18\x83F&S\x81\xef\xbf\xaa\xd8\xa8;`\x99\x01@\xc2\xee\x82[\x1a,\xca?\x1c\x04\xc4\xb0\x92\x11\xff?\t\x93]B\x15\xdb\xf6?\xf0\x1dT\xff\n\x9e\xef?h@\x14\xae\x1b\x91\xec\xbfL\xd2k\x1e\x88_\xdd\xbf[[Z\x11\xd2\x15\xea\xbfc\xde\x91\xfcF\xd2\xe8?U\xeb\xd9\x13NY\xf5?\xd4wD\xff+;\xa6?\xbc\xfc\x85EY\xfa\xfe?\xeb\xec\xa9\xd5\xe7\x0c\xf5?x\xe9&%\x9e\xa6\x03@m\xcd4\x8acS\xe8?#\xbb\xad\x04\x9a\x96\xf0?\x86o\xa7\x16Fm\xe7\xbf\xa1U\xd0*r\xc8\x0b\xc0\x870.\x8e\x87L\xeb?\xd1\xa4\xb2Sd\xea\xd0\xbfB\xff\xf1\xa0\x9c*\xef?\x9b\xbc6\xbag\x04\xf5?\x7f\xc1[S\x1b\n\xf3?\xe3\x8c*\xd2\'~\xfa?V\xb0r\xac\x17\x0b\xf2?\xab\x18\xf5\xccG\x87\xe5?.pe\x9b\x04l\xe0\xbf\x80\x04\xc7\x85N\x18\xd9\xbfm!\xd3\xac\xa6\xb0\xc9\xbf\x90\x85\xa7<)\x8a\xe6\xbf\xbf`\xc0\xf83\xdf\xfb?\xd5\xd5\xf2\xad\xb6\x85\xf1?\x87\xa5-r\xb2\xdb\xb7?DJR_\xe6\xe6\xd5?\xf6\xb8\xa8]\xce%\xf5\xbf\x0c\xc5\xb2\x99\x1d\x17\xf0?\x15\r\xaf\n\x8a\x02\xf4?\xa9\xa1\x85a4\xe5\xe3\xbf(\x13\x8b\x9d\xee\xcb\xe9?`\xff]\t\x83\x1e\xf7?\xfc1\n\x80\xb9\xe1\xe7?.\xb0o\xf1\xd2\xae\xff\xbf!\xd4\xac\x8a\xc5\xcb\xfa\xbf\xaej$\x13\x10E\xf2?Y\xcf\xba&a\x95\x02@!\x11\xe0\x17\x88\xdb\xb3\xbf\xdc\x0b\x13\xb8B\xf1\xd3\xbf\x06\x9d\xea\x81\xc5\x91\t@\xaba\xa0m\xb5D\t@\xb4\x8bQ\x8b5\xf7\x14@\x9b\n\xc5C\xdd\x9e\n@a\xca\x18\x85%W\x01@_\xc1v\xfa\xde\xbf\xf2?\xfb\xf6\x84\xf4\xad\xd2\xf9?\x07\xeda#=\xfd\xe5?u\xeat\x08h\x1f\xff?>\xe3\xed\xdcM\x92\x97\xbf\xf0\x7f\x92\x8d\xc8 \xd4\xbf\xab\xb2\n\xda\x19\xed\xe6?/\xb0\xc1{\x1cE\x04@\n\xa7\xecG\xbb\x13\xe3?y\x8bJCEO\xd7?\xf8F\r\x1d\xf2\x06\xc7\xbf\xcb\x8d\x92\x0c\xcb\xd5\xd0?3r\xfeca=\x02@\x01wUn)l\xf5?\xc4.(\x89J\x15\xd7?0\x03\xed\x06\x8f~\xe3\xbf\x01\x94\xd9\xb0w\xa6\xc4\xbf\x83\xfd\xcce\x17\xbe\xe9?xvCy\xbcu\x00\xc0q\x03y\x01<\xbd\xd6?\x0e\xbeZ\xf38\xd4\xe0\xbfR\xd8\xd2\xbf\xd0#\xf7\xbf\x17}\x8d\xbc\xff\xaa\xa3\xbf\x12\x16\xfe\xa2\xe0\x82\xde?K\x15@z\xc63\xfd?\x17\x10\xc1<\x07\t\x00@\x14\xfb$\xe3\xf9\x1c\xf5?\xf2\xd5\xa9&\xadG\xf6\xbf\xf1\xa1\x864\xd4\xc4\x01@\x80x\xffc\xf4\xe7\xf5?\xf9Q\xff\x89\xf2\x94\x01@\xa3S\xd1s\xd9\x17\xfb?n%{\x1cK\xa6\xbc\xbf0:\xe6\x1f\x05\xe3\xf2?R\xb3.=\r\x85\xd4?8m@\n\xba+\xf6?\xd9\xc9HXV\xd2\xe5?\xe2\x87D\xad?~\xec\xbf\xe5\x96\x19|\xce\x9b\xd0\xbf\x01\x97m\xfbd\xb9\xce\xbf,`\xaf\rG\xcc\t@\xf9\xe0\xbcF\x06\x9f\x02@_\xbb/x\xc0\x9e\x06@\x05\r6\xc1\x81}\xcc?\xcd\xba\x93\x93\x8fO\xe3\xbf5\x9b\xc8\xbdN\xc8\x11@\xd8\x90{3\x9f\x90\xf2?\x0e\xe5\x99q$\xc9\x00\xc0\xd7(\xc7\xd9\xf3\xaf\xfc\xbf\xf2q+f.\xe1\x03\xc0\x9b<\xa6\xc55{\xec\xbfrlTN\xac\x1d\x06\xc0\x1a\xa4\xfb\x8d\x1a\x19\xea\xbf\xde\x1a\xdf\x8b\xfd\xbe\xe2\xbf\xbb\x87\xc5\xb3D\\\xd6\xbf\x9e\xb3\xed-\xbe\xf9\xf2\xbf\x90\t\x8e/b\xcc\xf5\xbf\xe0BpS\x819\x0f\xc0N\xd4\x19\x85\xf0\xaf\x02\xc0\xcb\xfc9S6:\x02\xc0\xde\xf3\xe5?\x94\x90\x01\xc0o\xc2gz:\x11\x10\xc0\xb0\x804\x1f\xca\x01\x0e\xc0\xaa\xdcI\xc4\xe0y\xff\xbf\x03\xc77\xf9:\x8e\xf2\xbf\xa9\x92\xd5\x852I\xbe?\xb4r\x1c\xa9 \x8a\xd6?\x13\x9bJ\xbc\xa1\x1a\xbf\xbf\xcaD\x0f2\xc1\xad\x8b?\nr)\xb4^S\xb0?}\xa0\x8b\xc1\x06\x98\n@\x88\xdc^wA\xcb\xf5?\x9d\xf3I\xdf\x81D\x91?sb\xa2k\xf4\x8d\x00\xc0~\x84\xbc\x84\xf0s\xf0?\xd9\xdeZ\xdf\xb8\x16\xdd?q\xcda\xb3\x94$\xf3?\xaa\r\xfc\xa8\xc9G\x0b\xc0\x1fg\xb3\x1ebP\xc2\xbfJwV\xe0\xde#\x00\xc0\xcf\x977Q\x8e\x06\xe6\xbfxYN\xb4"\xce\xf7\xbf\xf5w\xe2Y\xe29\xc0?G0\xc8\xcc\tS\x00\xc0\xd4\x83\xc7C\xe8\xc4\x07\xc02-*\xffU\xdf\x06\xc0\xb4\xff\xf9\x11\xb3\xa5\xf4\xbf\xa9\xcf\xa0\xf8r\x85\x04\xc0:\xce\x8fC\xd9?\x13\xc0\xc6\xeb`\xb2r\xc6\x08\xc0\xbe\xef\xfd\xa6\xd0r\xf7\xbf\xeemq\x91\xceE\xd6\xbf-\xdd\x08\x17>\xe3\xc0\xbf%\xc5\x1b\xb3\x82\x1c\xe9\xbf\xb68\xeap\xac\xb1\xd5?\xacD_+\xdd7\xdc\xbf\xf5\xd6\xe3\xac\xd6j\xf8?\x84\xda\xec\x83\x93\xcc\xf5?\xdc\xba\xabz\xda\xb7\x00@\xa7\xff\xed;8<\n@\xfdB_.\x1c \xb7?K\xeda\t(\xfc\xe1\xbf\xe5N}\xa087\xeb?\xc9kN\xbd\x9a\xe6\xd4\xbf\x80\xf1\xec=,\x14\x04\xc0%\x19*\xfb\xf2b\n\xc0\xf9\xe8N\x00b\x9d\xeb\xbf\xa1\x12\x9c\xec\xd2E\x0b\xc0\xcf\x84F9\xdc\n\xe7\xbf{\x89\x8aQW7\xf4\xbfG\xba\xbb\xee\x7f9\xd0\xbf1[F\xc9\xc4\xd5\xf3\xbf\xf0\xf9\xc2\xf1\x98\xdb\x03@\xa3\x1cD\xea\x83$\xfa?PB\xeaSz\xad\xf6?\xce\x8c\xb1 \x80l\xf4\xbf\x16\xcb\x93\x08\xca\xd5\xee\xbf"R\xb2\n7\xe5\xbe?;\x94\\\\\x9d\xf1\x05\xc0\xd4\x81NV\x8aX\xd6?\xd3\x15c\xed\xf3t\xf2?\x9c\x90\x87\xb7\x91\x85\xc9\xbf\xf4\xfa\xe8u\xde\xf3\xf6?\x82 B\xdf\xe0K\xf1?J\xd3\xc3\xf7\xf8G\xf1?Z\x91\xaew\xc3\xa1\xe7?&\x03\xf5)\x10 \xfe\xbf\x87,\xdd\xf2.1\x0f\xc0|\xd5\xe1\xed\t.\xc9\xbf\xe2\xb8\x8d\xfbH/\xe6?V5l\x12+I\x05\xc0\x062\x979\xb6\xe1\x08\xc0\x8bQ\xe6#z\xa3\xf5\xbf$\xf4\xae\x9d\x94\xa9\x93\xbfH\x7f\x07\x08\xe2\xac\xef\xbf\xd0\xc7v\xeb\x0e%\xef\xbf\x82\x9a\xfa7\x9c\xb4\xd5\xbf\xf6\x15.\xa4\x1e\xf5\xf9\xbf\x0c\xb2"\xc4h\\\xee\xbf\xbb\xff\xc4\xecB}\xaa?\x7f\x01\xe9\xac\xad]\x03@\xed\xcbVT\x04\xb5\xd7\xbf]2\xb5\xd2s0\xdb?\x9eQ\xe3\x1d\xa52\xce\xbfk\xeb\x06\'\x00\xeb\xef\xbf\x83U\x89%64\x03\xc0\x03\xadAk\xc4y\xb1?\x1f\x0f\x1f\x91\xa2i\xf6\xbf\xd3\x8d\xa0z\x12\x84\xcd?\xber\xb2\xff\x03G\xe2?\x17t\xe8d\x9a\xfb\xd5?F \xf4\x8cE\'\xe7?k\x07%\xdc4[\xf0\xbf\xe6\x04\x9d\x8bx\xc0\xe0\xbf/\xa8\x0f\xc6\xa6\x97\x01\xc0\x1c\x80&\x02\xba\xed\xfb\xbf\xd9\x1c\xfb\xde\xaa>\xe1\xbf\r\xac\x0b\xf3\x82\x19\xf4\xbf*\x89\xdb\'\xaa \x0b\xc0\x91r\x99s\xe7J\xe6?\xbe\xad\x87\xbb\x99\xd5\x04\xc0`7\x8b\xe8&v\x80\xbf\x9d4\xc9\xab6u\xea\xbfL\xdc\xc3\'\xaa\x9f\xd4?\xc9\xc2\xff\xf8\xfe&\xf3\xbf\xcf\x1b\x00\xd3f\x9a\xd4?oY9W@\xba\xe0\xbf\xda\x88&8\xf1\xc0\xd6\xbf\xac_\xad6\x1d\xa8\xfb\xbfs%\xf7*q\xe5\xe4\xbf\x82\x93j\xd1)=\xdd?\xc1\xe0q|E\xfc\xec?\xa7\x12\x90\xaf\xd2Q\xf9\xbfu*\xfc\x9a\xeb\x06\x03\xc0\xd7\x9f=\xd5\x98@\xf5\xbf\x1c\x00C\xa3\xb6\xa3\xfa\xbfj.;\x96\xf9\x96\xe4\xbfh\xb5n\xcdI\xff\xe7?\x19\xd0\xd4\x0f\xa5D\xe1?\xe4\x7fd\x7f\xc0\xc9\xef?\xefC\x1eF\xf9\xb8\xe1?\x880\xc3\xec\x93S\xfc\xbf]\x0f\xbb\xf1\xef\xf7\xaa\xbf7^\x90x_\x02\xf2?h\xbej$\xc51\xf6\xbf\x02\x1e\x0c6\xf4\x9c\x07\xc03\x7f\x13\x14\x1e\xb8\xc0\xbf\xe6\x0cd\x9d(\xe9\xf5\xbfG\xce\xd7V\xe6W\xe3?\xe6\xc5\x9f\x9a\xfeC\x00\xc0\xe6\xff\xe0\xe5\xc5\xde\xc0\xbfi\xe4\x12\xf0#`\xf7?\xf3\xe0\xaad$\xe2\xdb?\r\x7f3JY3\xd7?yT\xed\x8d\xe5f\xe5\xbf\x0f\xd8\x1e}z\xe7\xba?\xa7|\xa6\x13G_\xce?[6\x07{\xc6\xdc\xe8\xbf\xac\x1f\x15?\x18}\xf3?\xa3d\xf6-\xd93\xf9\xbf\x17\xcb\xfa\x86S0\x00\xc0\x11\x15\x19j\xe7\xfc\xee\xbf\x9d\xcb\xf8\x05\xa1\xfb\xfb\xbf\xf8\x80\xda\xd1kS\xf8\xbfl\xbb\xb5\xc1\xdb\x87\xf3\xbf\x18\xa6\x8b\x84$A\xee?\n\x0be!\xba\xcf\xc2\xbf;(\x90m\xef\x14\xea?\xe5%` \x88C\xc9?oL\xe3\x08\xbc\xb8\xf4\xbfqlnh=\xd0\xf5\xbfc\xc7\xab\xa8\xfb[\xf7\xbf`\xa6\x1d\x8b\xdb\xc9\xf6\xbf\xcf/rE\x84$\xea\xbf\xf9b\xac\xc2w8\xe0\xbfd_1x\xfe.\xe2?\x9b:H\xef,\xfd\xfb\xbf]\xcb\x11r\xceG\xf0\xbf\x1d\xa32&\xf7U\xdf?\xd4$\xdbK@\x0c\t@\xec5\x88,\xe2z\xd2?\x87\xbbkh\xed\x14\xa0?\xf3K\x87*\xd9\xfe\xf4\xbf;\x10\xbc\r\x82x\xf0\xbf\x97\xf9p\xd9\\o\xd9\xbf\x8eq\x90#,\xf6\xd0\xbf\x17\x97\xc7cXe\xe5?\x112\xd3\x91\x17\xe7\x00\xc0\xbfi[\xdb\xbe\x99\x0f\xc0\xdc>\xa2\x83\xe8y\x08\xc0\xf1+\x97C\x97\xff\xfc\xbf\xb1\x87V>;\xcc\xd5?\xb80\x11gz\x11\xc8\xbf%\x9f\n\xa6\x9b\x1f\x96?\x89A\x8c\xda\x7f!\xb0\xbf\x8d\xb89\xcc\x15I\xc2?\xefT\xa5\xf3\xce\x1b\xfe?\x01\xea\xf3\x9c\xb6\xae\xfd\xbfU\xac\xc2W\x95\x0b\xe1\xbfj\xcf\x94\xf6\x82\xb7\t\xc0\x04\x7f8\xfe\xbcG\xfa\xbfKIFpE\xd3\xf7?\x84\x8ex\xf4\xb3\x9f\xf4\xbf\xfb\x92\x15\x9cI\xba\xd7?\xe7\xa6\xf4c\xf5\xa5\xe5?\x17\t\xa6\x1e\xa0\xb8\xdb?K\xec\x1a+\x932\xf2?j\x9d\xef\xd3\xf1\n\xd4?\xbd,\xaf\x16\x8a\xd4\xf7?}\x98l\xfc`\x07\x03\xc0\x16\xb0A\x9cj\x08\xe3\xbf\x1d\xc3\xc9i\x01\xc0c\x05\x11\x00\x83\xc4\xcf?-\xfe\xc0v\xde#\xe2\xbfJ$F\x94\xe0T\xef?B\xf2\t\xcd\xbf\xcf\xde\xbfc\xbc4\xf1~\xf4\xe1\xbf\x14\xb0\x81\xcb\xebP\xd9?\xbe\xf1\x00\xf2\xca\x0b\xce\xbf\x1d\x85\xc8?M\x8a\x03\xc0\xd4\x0b\xfd$\xc3\xbf\xdc\xbf&F\x9f\xed0\xe6\n@\x1a\x10\xb8I\x81\x93\xe8\xbf\xcdLH\x98\xb2=\xe6?,\x0f\x920K\xd0\xda\xbf\x1f\xf7\xb0\x9aM\x05\xdf?\x97\x05m\x93\x80\x0b\xe7\xbf\xc9\x84\xd8n\x83)\x03\xc0\xd8(\xea\x15\xc3"\xf1\xbf\x8c`\xe0\x8b\x80\xbe\xea\xbfp\xeb$b\x12%\xf9?nb\xaa\x10\xcb!\x00@^#=h\xad\x04\xb7\xbf\xc9\x03\n\x9c.\xfc\xc1?\x1b \x10\'\x05\xb4\xd8\xbf\x18\xa5\x80\x86s\t\xd2\xbf\x17\x00s\x10\xb8\x06\t\xc04\xd1R\xe1\xa4*\xf4\xbfg\x17\xd1+$\xb3\x03\xc0\x05m\xfd\x082\xcb\xf5\xbf3?c\xaf`\x00\xf1\xbf\x06J\'\x07\x05\x84\xe8\xbf\x1d#\xb8\x0b1|\xd0?j\xf0\xa0#Z\x1c\xc2?bJ\xe1\xf5i;\xa1\xbf\xbd\t\\\xa9Em\xce?\x9c\xc2bkn\xc7\xe1\xbf\x07\xfb\xads2\xa2\xfe\xbfk.]\x90\x8eY\xee\xbf\xbf\nn\x8fL\xed\x02@\x0b3\x9c\xed\xc2\xb7\xed?\x84\xef-]5\n\xe1\xbfy\xa7\x80\xaeC\x8e\xee\xbf\x99\xb0\xbc\x9a\xfa:\xe5?\xd4\x80+\x9f\x10\xa4\xe5?\xec\xaf\x0f\x9bCg\xf0\xbf}0\xeb&f\t\xee?\x14[\x89\x18\xd3\xfd\xc0?\xb55\x98VR\xf3\xfe\xbf\xf9\xd0\x91\x11`\xb4\xdd\xbf\xbf\xf9\xeew\xb9\xd4\x06@\xd3\x0e\xab\xde\x15=\xfc?U\xdf\xf9}\xa8~\xf2\xbf\x11\x17\x90\x99)\x8d\x10\xc0\xbb\xf9\x86"[\x1b\xee\xbf\xa1S\x1c~\x90\xf2\xf1\xbf\xa2[\x12&\x15\x19\x01\xc0\xb3\xc8\x9cdD)\x01\xc0\x07\xbc`\xd9+\xf2l?\x90\x1f\x01\xf7\x1f0\xc0?\x95;a^\xe6\x80\xe2?\x9fQt\x98\x9f\xc3\xe9?\x93z\xe9\xe9:\xc6\xd3\xbf\xe3gR \xfb\xb0\xd4?\x93~\x9eB\x91D\xf6\xbfs\xdcO\x17\x8d\xdf\xed\xbf\xe2\x99\x18\x1e_\xf6\x00\xc0~\xb0\x16\x08\x83^\xe7?\x95q\x16&\x14\xa7\xec\xbfKa\x05\x1a\xbcH\xdf?\xb1\x9f\xed\xe8\xf0&\xed\xbf*6\x19\xe5\xb6\xf0\xf3\xbf\xbep\x17s\xa2\xdc\xf9\xbf\xc7`Ja\x12a\xd2\xbf\xb6\xf0\x11\xcaS\xda\xfe\xbf?\xc5a\xea\x9b0\xc8?\xa8K6E"\xc3\xf9\xbf!8\xb51\x7f\x83\xe8\xbfYW\x95N\xef\xee\x0c\xc0=\xd1\xf7\xd6O\x1b\xe6\xbf\xa8\xcdeVS\xa9\xfc\xbf\xde9\xcb\xb7(c\xf8\xbfcx\x96\xb0!R\xf2\xbf\xae\xc2L\xbb\x1d\x95\xe0\xbf\x93}\xb7U\x88\xcb\x00\xc0\xd1\xf6]\x18\xd9\xa9\xea\xbf\xb6\xe1*Tm\xd7\xe4\xbf8\xe1,\xd5\xbf\xdb\xb4\xbf\xba\x1b\x83\x93k\xdb\xf9?<\xfd\xfedL\x00\xf8\xbf\xf3}K=\xe2\x10\xee?\xefl2\xado9\xe1\xbfo(\x94\xd4X\xc1\xd9\xbf\x0e\xa1|5\xd8#\xe1?\xdc\x86\xb8\xca_e\xde\xbftG\x1em\xcbC\xe8\xbf\xa0\xb7\xd0v\x0f\xee\xe0\xbf\x8f\xe7\x1ez\x0f\x15\xf3\xbf\xd3\xac\x10p\xdaX\xd5?\xe7^\xbb\x96,\xb2\xe3\xbf\xfb\x86\xbfQ\x05\x89\xd7?\xfd\xd8&[\xcf#\xdc\xbfI1O\x05Q\xe6\xe8?&\xb1\x1a\xbc\xeb\x03\xe4\xbf\x17\x10\n\x8aW\xa6\xc4\xbf\x9bb\x13\x1cF\xc3\xf8\xbf\x16\x0f\x10\xf4\x00\xc8\xfd\xbf\xe88`\xd9\xbf\xdd\xf6\xbf\xd7\x0eU\xc2\xfa\xc4\xd2\xbf\x9b8\xa4Q<\xc1\xb0?R\nw\x1a\x91*\xd2?PQ\xd5\x94\xb7\xfd\xda\xbf\x83\xc8Q\xe0G\x92\x97?<\xb6\n\xbb\t\xfc\xe3?\x11\x8d\x16/\xb4\xfd\xc5\xbf\x98@#\xc9\x95[\xd1\xbf 4\xa3\xdc.\xda\xc6?yf\xc5a\xde\xf2\xe3\xbf\xfb\x1f\xa1s+\x18\xb4\xbf\xc8a\xdf\t\x18\xf2\xda?|\x9cEY-\xe6\xf6\xbf\xa4\'\x89c\xc9\x95\xe6\xbfs0\xd3\xc0M!\xfe\xbf\xee\x86Y\xc9i\xc1\xdf\xbfr;\xfbK\xc7\xa0\xf5\xbf\xe9\xaf\xee\xc3\x85\xd5\x08\xc0\xcdV$x\x9e\xb7\xe3\xbf\xff\xa3\x07\x1ft\x96\xe4?\xc9\x06\xdf\xa4sE\xff\xbfL\xce\xed\xce\x8b\xd0\xf6\xbfP\xef\x81;\x85\xdc\xed\xbfP]\x0b\xec\xb9\xab\xed\xbfU+}\xd1\xa9\xb8\xc9?\\*A\x8c.$\xe8?w\xae\x91\r\xc5\xa3\xb1\xbf\xa4\xbc\xbf\xfb\x1a\xeb\xe0\xbf\x1c\x07 \xed\x1a\xbf\xce\xbf\x87\xcb\x7f\x9d\x0c\xbd\xcb?r4`2\xfeO\xed?\xdfb\x1c\xf5r\x1f\xe2?50\xfd{\xc6\x19\xf2?dl\x9a%\xda\x02\xca\xbf\x9d\xae\xdc\xb2\x9d\xf1\xdc\xbfv\xb9\x03*\x8a\xe9\xd4\xbf\xbc\x9cFo\xad0\xd0?\xcaw\x05\x97\x982\xe7\xbf\xcek\x8d\xd5\x87G\xac\xbf\'\xc0\xee\x0f\xb8K\xdc?n\x14\xc4p\x18\xfc\xed\xbfL1G^*F\xe2?\n\x06\xfb4,W\xf2?\xe9\xe4\x1c\xcf\x91\x91\xe1?\t\xf8\xe7\xadJ\xb8\xc6\xbfW\xa2Mz\xc8\x92\xf2\xbf\'\xe0\x91\xcb\xcc\xf4\xc8?\xe1\xf3;\x15\x08M\xf2?S\x1e\xb0\x0e}!\xd1?\xb5<\x87\xddh-\xe5\xbf\x0bY\x06\xabBr\xcb\xbf&ME\xea)&\xe5?G\x0cN\xd5\x7f\xef\xf0?s\xdf\x9c\xd7\x87?\xe9\xbf\xcb(\x178\x9d\x08\xf0\xbf\xab\x11\xbfE\'\x90\xdd?\x92\xd5Cv\xaa\xa4\xdc\xbf\x05\x1bGS\xf8\x13\xf0\xbf\x91u\xd7\xdbDN\xd9?\x15[\x84\x90\xb3\xa8\xea\xbfo\xd9\xdcnx\x14\xe6?\x86k\x87\x04\x81\xb5\xc7\xbfO\xef\x14\x14\xc4\xce\xb2\xbf\xa7U\x9a\x03;\x0f\xe4?\xe4\x0c\xb6>LM\xd9?\xbb\xc8\xdfxX\x99\xe6\xbf\xbc}\x8e\x0cZ\x99\xe7\xbf\xb8P(u]y\xd4?C\xb6&X1\x19\xdc\xbfT\'vn\x8e\xfc\xfc\xbf\x12+\xdeC2\x91\xfa\xbf\xa0!\x80\x01\xce\xb5\xd3\xbfB\x82\xcc8\xa4j\xc2?\xc8\xba\xa4\nl\xc8\xb1\xbfn\xe74\xe5h\xcb\xe7\xbf\xea\xdcV\xa6l+\xb8\xbfP\xc9\x0e\xccnh\xc8?@/\xf6)B\x0f\xe1?\x93\xac\xa5\x98dj\xf4\xbf\x13\xfe\xfaJ6\x08\xde?\xe1N2\xe8\x84\xa8\xbc?\xc8[u\x94\xf8\x02\xe2?1\x9f5\x87t5\xe3\xbf\x00U~\xd3PD\xd3\xbf\xb8\r\xe8\x86dB\xb0?7<\xadhq\x89\xe1?\x97\xf0\xbd9\xd8\x98\xe4\xbf\xd7\xa1;\x84\x94P\xe2?/\xc6\x96\x8b\xe3\x1e\xd3\xbf\xd0G\xf1j\xf9\xef\xef?#\x99A5\xfb5\xf0\xbfPk\xe3\x07{\xbc\xde?\xbc\x12\xd5\x7f\xbe\xc6\xd1\xbf\xe11\xffb\xbb\xdb\xde?|\xde\x9a]w\x1f\xd2\xbf\x9d\x0e\xe5c\x01\xcb\xd2?\xc9\xf9\xe5\xb1\x8d\xf1\xdb\xbf\x8b\xda\x11\x17@\xb7\xd6?\x849a\xd2\x8cT\xe7?\x9e\xd9\xcc\x8ac\x07\xef\xbf\xa5sIz\x16K\xeb?\xfc\xb2(\x81S\xd5\xf5\xbf\x9a\xeb\xc6\x83N\x1d\xb9\xbfyZ\x99\x14\x0bB\xe5?\x1b\xcbin\x11R\xd8?\xbc\t\xbd\xb6\xb2R\xf4\xbfh\xef\xe1BQ2\xca?\xbf\x18\x1cH-F\xf5?\x92\x80\x95\x7f\x82[\xb8\xbf\xf5\xd4[G\xdc\x8c\x87\xbf"\x01\xf9:\x06|\xdd\xbf\xab\x08\xbf\x84DN\xf1\xbf\x96f\xe8\x1f\xd0\x1b\xdd\xbf6\x9aD\xb9\xd1\x8e\xe0?\xe61`\x1b~\xc2\xe1?\x10-F\xaaBk\xe6\xbf\x9d\xc1\xf6\xbc \xbe\xb9?$vk\xc1\xed\x0e\xe6?\xfa\x06\x08W*\xf7\xda\xbfF>G_{M\xe8?p(\x9fS\xb3\x92\xe8\xbf\xf4\xdf\x88W]\xb1\xe1\xbfP\xd5\xaeZ\xb0J\xdb\xbf$\xe3\xb8\x06\xb0\t\xe5?\x00A\x1c#\xfcw\xe0\xbf\xc2\xf7\x1ahm\x04\xc8?\xa1\x02\xee\x1c&\xfe\xed\xbf\x82\x04J3\xb0\xa2\xb6\xbf}\xa2\x99{\xb7\x97\xe3\xbfr&\xf4\xa8\xaf|\xdc?\xafj\xb6\x00\xe3p\xf7\xbf\xdb\x03\xe4j`{\xb3\xbf\xbe!\xe3\x84hR\x00\xc0\t\xa9\x02(\x8f\xdd\xe3\xbfE\xcd\x18\x8dw\x90\x02\xc0\xbc:W\x8a3\xbb\xf8\xbf\xae\xcf]\xa8\xbb\x87\xee\xbf\x00J\xe2\x1e\xac\xa3\xfd\xbf0g,\xa4%k\xeb\xbf\xaa[\xa5\xf7*\xfd\xf2\xbf\xe2\xb6\xa1\x14\x9f9\xc6\xbfK`\xb6k8\x98\x00\xc0\xbeM\xdc-\xbd\xa5\xef\xbf\xd7\x05\xbe\xf6\xb4T\xa3\xbf\xd1j\xcf,i\xe0\xe2?=\x7f\x06\xb4\x8a\x8d\xca?\xd79\xa8\xd9\xefX\x95\xbfr"\xcd\xc7\xcd\x13\xe8?w\xa4\xc1\\\x8b\xf9\xf1?\x15_\xcczc\x9d\xbd?\t3\x99z)\xc9\xee?\xfc\x8f\xc6\x85<\x9d\xdb?\x1c\xc29>\xd2e\x97\xbf\xef\xf9\xff\xad\x9b\xb1\xf8\xbf\x82O\xd6\x08\x90v\xee\xbf\xd5\xc6fK\x9fg\xd1?\xb5\xd3\xaaP\x90\x08\xd2\xbfI\xd8\xe0!\x8a\xb9\xde?\xfc\xc5*,\xaf<\xc9\xbflOV}%\xbe\xf7\xbf>\xe3\xa0\xe8\xf4*\r\xc0?\xbd\x808U\x87\x0e\xc0X\xde~\xaeYu\x1e\xc0?\xa4\x9b\xbd\x1a\x13\x1d\xc0\xb0"\xf4s\x07\xf5\x1f\xc0\t\xc4\x93&\xa3e\x1a\xc0\x12\x8bR\'\t\x04"\xc0PK\x9d&(\xa7\x19\xc0\x151g\x04\xd4\xc3\x18\xc0\xdf\xcd\x85N\xff[\r\xc0\xb5\xa9\x7f\x18\xf3J\xfe\xbf\xe2\x1dL\x93po\xff\xbf\xcc\x95MO{\xef\xe6?\xc6\xe6\xcc\xd3\xf37\xf7\xbf\x88\x04\x05\xdd"\'\xf8\xbf\xaa\xe8\xb88\xaco\xd2?bW\xb5\xd0\xf0\xf6\xc9?\x03\xc4\x03\xa6@\xc3\xda?\x15dhHTA\xf1?\xc7\xa8\xbbZ\xae\x12\xd1\xbfO\x92\xf3K\xdc\xff\x9a?\xc6\x97\xfa\rd\xa7\xd2?\xa0\xf2\xa1\xd3\x00\x94\x8a?\xc2\x87\xd2\xf0\x12\'\xf9\xbf|\xcds\xeb\xc0\xbb\xe6\xbf\xacXK\xf0U\xea\xb8?\xb3\xea\x9e\xa2\x9b\xbe\x08\xc0\xc1\xa9y:?\x11\r\xc0\x96y\x9c\x97p\x1d\x03\xc0\x95\xbe\\\xbbq\xbd\xc6?C\x8e \xbe\xd2Z\xab\xbfI\xeaT3}\xdd\x10\xc0\xa16>T\xbe;\xd4?\x95\xa5\xc2e\xc4r\xe3\xbfe\x95\xea\xbaw\xf6\xc6?\xed\xdf\x02u\x85\x16\xd0\xbft\x15\x13\x18=K\xd7\xbf\xd6\x87)\xb7\xfah\xf6\xbf\xd0\xea\xc5I\xe1J\xf8\xbf\xc1\x9c\xf2\xfe0\x10\xff\xbf\x0cF\x94\xe51z\xd3\xbf\xcd\x90\x11d7D\xd0\xbf2\xea\xe8\xfd\xde\x07\xff?\xce\x91\x99to\xb7\xa0\xbf\xac\x94\xc6\xa9\xcf0\xeb\xbf\x96\xd5\x97\xd8\x13\x9c\xd9?\xcff\xc2\xc8\xc3\x19\xdc\xbf\r\xa7\x87\xcd\x88\xa5\xa9?\x03\x0e\x06\x849&\xd0\xbf\xcce\xcbm\xd6\xa7\xf1\xbf\xcd\x82\xd3\x8f\xca\xfb\xd7?\x95_\xcd\x06?\xce\t\xc0\xcf\xe6Hm\xb7D\xf7\xbf\xda\xac\xe0\xfaT9\x01\xc0l\x97!\xdf\xb9\xff\xf7\xbf\xff\xf4\x0c\x0b\x08\x1d\xcd?\x17gv\xd3\xc8\xa7\xf7\xbf\xfc\xc9\x0c5\x8a\x80\xdc?\x9a\xab\x8eJ+/\xf3?}R\x81\x104\x91\xe4\xbf\x90\xe5\xafVw1\xdf\xbfq\xdd\xa6\x90:F\xa9\xbf\x00\xa6f\xc6l\xfe\xd7?\x02\xdaD\xd0\xd2\x84\xd4\xbf\x86\xadL\xf4\x1e\r\xe8?\xc2\r\xed7u\xe2\xdb\xbf\xfa\xcd_ \xb2\xf7\xfa?\xe3*\xb3\x87\xb0 \xf0?Z\x00s\xaa\xe6+\x00@\xad\x16\xea\xda_\xd7\xcc?o.p\xa3a\x8a\xd9\xbfJ\x02>\xedoY\xe2?z}\x1b\xa1>}\xef?h\xd8\xb3o\xc8\xde\xe4?\xddY\xa2\x8c\x0b\x9d\xe7?rLLl\xcd)\xa8\xbfh\xf8>\x07\xb9\xae\xd3?_\x07\xb6\xc1\x10j\xea\xbf\xf9t\xa7\xdc\xa6\xa1\xf3\xbf(\x80qoU\x95\xf7\xbf\x95b%\xe5\x0b(\x05\xc0_<\xc8\xe2\x11\x03\xc9?\xfd\xbd\xfc&\xcc\x98\xf0\xbf~\x9d\xcbB\x9e\x02\x00\xc0\x9e\xf8gwR\xba\xd7?\x8b\xbc\x89\xf6\x01\x8b\xdb\xbf2\x1e\xb3 \xef\xa5\xe4\xbf&pry\x1b\x00\xc6\xbf\xb9)\xe9N)k\xec\xbf\x1eN}\x0c\xd5\xa9\xe8?\xdab{\x01E\x83\xd1?\n\xfd\x96\x15J[\xf1?K\xd6\x84\xa4C\xaf\xf5\xbfI^\xc2Xh\xf3\xfa?/\xb2\xe37L\x87\xdc?\x87X\xdf#\x18L\xdb?\xf7\xee\x18\xbc\xc89\xe6?Gw\xde%\x7f\xe8\xf9?\x1df\xdcI\xdc\x90\xee?\x8f\xba\xdb\xb0\x00\xe8\xd7\xbf\xc6\xdf\x92\xbc\x16\xa9\xe5?W\xbfb\xfb\x1c\x83\xa8?\xb0\xf7J\x8d\xae\xb5\xb8?\x1dEp\x9a~\xfa\xbe?Cw\x85~\xfd\xa5\xc5\xbf\x9f\'\xa41p%\xba\xbfe\xa0\x1cf9\x11\x00\xc06\xba\x06\xf1\x96\xe6\xff\xbf\x8e\xae\xf1\\\xc8\x8b\x07\xc0\xca\x98+mCe\x03\xc0\xd5\xe4N\no\xf2\xf2?\xee\x0e\x8b\xd3S}\xb2?s\x02z\xaa\x02\r\xe8\xbfx\x85\xd4q\xad\xa2\xf5\xbf\x9e\xaba\xcf\xce\xce\xf0?\x03\x84y\x96\x98P\xfb\xbf\xfe\xa1\x05\xdbP\x8f\xf6\xbf\xfa\xda3\xeajn\xcf\xbf\x8d\xc20\x9d\xacg\xed\xbf\xae\x1c\xa3\x92\x83\x02\xd8?\xad!\xf1Ja\xa9\xe5\xbf\x9c\xf8\xef\xc2_\xc0\xf2?\'\xceC\xb2\x87\xf8\xce\xbf\xd5\xc5\xf2\xc0W\xf7\xf7?\x99\xddS\x1d\x83\xb9\xf7?\xa5P^\t\x1f\xcf\xed?^\xdf\xa4\x1c\xb1\xd1\xf9?\\\x05\x19\xf4\x07\xa0\xe8?K\xcf\xb2k\xf8\x87\xdd\xbf\x9bFZ\xe9\xb4\xfe\xf5?\x10\x9a]\x89%\xf4\xe1?\xde\x05.\xb1p\xf9\xf1\xbf\x85z\x91\x85O\xcc\xd5\xbf!\xc1f\x82\xaa\x87\xfb\xbf\x0c\xa1+\x1e\x00\x0e\x05\xc0h\xe0\x17Q\xa8\xa0\xfb\xbf\x86\x1e%\x81\x81\x91\xe5?d\x8e\xde\xfb\xdc\x99\xf6\xbf\xa4\x08\xfaX\x8a\xe0\x91?\xa5\xf6\xb7\xd3\xc6S\xf4\xbf\x03\xdbe?Db\xe8?\x0cW\xf4(\xe8(\xcf\xbf0\x9a-B\xad\x01\xdb\xbf>\xd3I\xd4\xaf\xd5\xef\xbf\xddE\xf1\xd9/4\xef\xbf\xdd\x9bIIy\xa3\xab\xbf\xc6\xcd\xecK\xdbs\xcf?\xf1\x16\x84{\x91\x99\xe1\xbf\xb7\xf4vr;\x98\xff?C\xee\xd2x\xccL\xa9\xbf^\xff\x06\xbb\xdd\xb2\xd6?j\xe2&\x8e\xeb%\xdb\xbf\x82\xe9J\xba\x9b\t\xdd\xbf\x89\x0b\xec\xcd:G\x08@SS6\xdd/\xc8\x10@\x8f\xa1m\xaa\x90\xb6\r@\x10kbJ8m\xf5?\x936\xa6\x02\x07\xd9\xe3?\xa0\x1f\x9b\xee\x91\xfa\xdc?lH\\\x17\xcd\x08\xf0\xbf^\x84\xe4H0\xfa\xdc\xbf\xa0b\x19\xdd\x88G\x02\xc0\x18(\xe3\xb5\xdd\x18\x0f\xc05@\xbe\xfax\xd4\xe1?\x87\\C\xfa\xb1\xfa\xd4\xbfx;\xde\xf4\x17\xd8\xed\xbf\x87n\x8bF-_\xb7?\xc0\x9a\x1d\x94\x9fL\xc2\xbf\x82\x81o\xb3\x90\xdd\xfd\xbf2\xc0\xcdol\x8d\xf3?\xf2\xee\x1a9^\x01\xe4?\xb9q+\x0cg\x85\xe7?\xe8\x1d\xdb\x0c\xbf\xfd\x0c\xc0\x96\x89\x15\x14\xe7\x95\n\xc0s\xcc\xb5\x1e[\xd5\xe3\xbf\xc2E\x9c\x904\x91\xc0?\xce^d\x10\xe9\xc4\xfc\xbf\xb5z\x10d\xf7\x10\xf4\xbf\xb0\xdb\xef\xdc\xcei\xf2?n\x91\xb6\xbb\xf0\xd2\xed\xbf\x8e\xb1m\xb3t\xb2\xe5?6\xd3\xdd\xb5\xefu\x04@\xb3,w\xcd\x98P\x05@n<\xbbR\x06\xc9\x11@{5\xc2\xe6\xef\xf6\xf5?\x9bp\xb0~F\xec\xec\xbf\x1d\x07\xbbR\xa3g\xbb?\x03C\xc2\xc1\x82\xb8\xd4\xbfD5H=\x06e\xf1\xbfx\xf7\x85\xa3\xc6\xc6\xed\xbf\x17>wuB\x94\xb9\xbf\x90h\xaa\x95\xa8\xb7\xe9\xbf6\xb4\x92W\x07*\xc3\xbf\x1f\xd1\xb0|`A\x03@Y\x85\xa6\xd4\x12\xa1\xd4?N\x9a\xa1\xf5\x00h\x10@\x87\x93d\xda\x00\xf4\x13@W\x90_U^\x8e\x0b@\xae(\xb6\x1f\xa0\xf5\r@\x8d\xb4\x95\xe4\x00\x8a\x05@%\xbfyI<\x8a\x06@\xad\xe6U\xa5\x14\xa0\xfa\xbf\xa6\x18NL&0\x04\xc07\xe9\x16/\x08\xf7\x04\xc0\x81\xd5\xc4K\xc7\x1b\xee?s\x05\xbd\xddR\xd3\xee\xbf\x19\x1c?\x0e/\xed\xf6\xbf\x11\x8a\x8c\x16\xa3\xa5\x01@\xcdK\xdd_\x87\xf8\xef\xbf4\xc36\x85\xbc\x0f\xec\xbf\x80e\xddq\x95\xea\x08@L\x18\xad\xfc\xa8\xf6\x11@\xf7\x17.\xf2\xbd\xa7\x03@\xed\x9c\xa9\x90\x89\xef\xbe?\x90\x08\x12&k\xff\xde\xbfO\x91qU\x1b\xb1\xe0\xbfc:o\xb1$\xa5\xf6\xbf\xa2i\x17S,\xc5\xf1\xbfD\xe9\xba\xd1]\xb2\x05@(\xaa}i\xd7\xe1\x0e@;x\x1e\x9c\xcd\xcc\x15@\xb9\xe1\x16\xe9\x9e\xf7\x1a@\xbf49-\xdd\xca\x1f@\x8a\xf1kV\x9c\xc2\r@QQ\xe0\xc6"\x1d\xfd?\xe0\xea\xcf\xe8\xd4S\x03@[\r\xc4\xfb`\xd6\xf6?{\xd7\x0e*\x84\x1d\xfd?\xe5\xddO\xd5\xb2`\xf8?h\xa4\x97rM\xe5\xd1?\xb4\xec\xfe\xd35\xd4\xfa?\xae\x93\xc1\x9b\x06\xf7\xfc\xbfE\xcf\x99k\xabDJ\xbf\x1b\xa0|\xf69@\xc8\xbf\x97\x8b\xff\xda\xf1l\x08\xc0I\x84\x087\x915\xfa\xbf\x1d,n8\nZ\xec\xbf\xde\x16+\xf4\xc3\xc1\x08\xc0J\x1c\xa09\x01\x1b\x07@\xee\xf0\x89-w\x06\x15@\x0b\\\xef!\xf6\x0b\x03@<&\x0e9\xbe\xea\xdb?\xa8F\xecl2\xa9\xe0?\x1fVU\xc3\xaf\xfe\xd3\xbf\xbd-\'\xaa\xdf\xa8\xd7?\xe0\xa5\x0c\xc2Ih\xd0\xbf\xaft\x90\x05td\x17@\xd4r\xff\x84y\xdc\x17@\x10D\xf8\xb0X\xa6\x15@\xee]\xab\x12\n|\x12@\xe3\xa6t\xea\x1b\xaa\xee?\xe9\xad\x01\x1eH\xd3\xf9?\x8e\xdaF\xd4\xdf\xef\xf7?9\xc4\t\xbb\xf01\xd2?D\xa1\xf6\t\xcb\xc1\xf6\xbf\x92{\x171\x84t\xf4?\x0cI\x9e\xf8\xe6`\xe6?\x03\x11\xf57\x8c=\xfb?9n\xf2s\xa9\x86\xf1\xbf\x80O!]\x90F\xef?\xe5\x1c\xc7{\xbf\x0b\xc9\xbfq\x91\xd7_\xaf;\x05@\x9fL\xb3F^b\xe7\xbfl\x99\xabfP\x1b\xf6?\x07\xe2`j\xf9\x19\x0c\xc0x\x0eE1\x0b&\r\xc0\x87W\xad\xd6"\xd2\x00\xc0\x93Ii\xfd\xcac\xf7?\x19\xd8\x0e\x84@\xbd\xfe?\x88\xef\xdb\x7f\xb7\xa2\xd5\xbf\xee\xe6\xa6\x1b\xfdO\xe6?\xd2/\xf3\xab2\x8f\xe9\xbf\xdfR\xd6\xcdn\xa3\xf5?\x010\xdcXSk\xb0?\x0b\xcf\xf48"q\x0f@\x89\xb3\xacg>c\x06@1\xaa\x819\x1f"\xe2\xbf\xc5$\xa2\xc6)\xc1\xb2\xbfq\xcc8\x7f\n0\xf6\xbf\x89\xcd{\xb1\xe1<\xac\xbfs\x10\x94l]\xd3\xd3?%\r\'\xdd\xda\x0e\xd7?\xcc\xd8\x80iSR\xf9?n\xa9\'\xf04\xeb\xe4?\xb3(\x95\xd0l\xff\xc8?\'$\xd0_\xddu\xfc?t\x03l&\xddk\xeb?\x1aa\x8f\x01\xc9\x01\xe6?_{@\xf9s\xde\xe4?\xfa\r\xcf\x07\xb8\x15\xfa?[\xb9b\x85\x06q\xf0?rz%}I%\xf0\xbf\xd2^\x95(1\xcb\xe6\xbf+1lT\xdea\x0b\xc0$\xb1;I\xb80\x10\xc0\x1a\x8e\xf7J[\xbc\xf2?rW\xd6\x04\xc40\xeb?Vzo\xd0\x17Q\xf6?\xbb\xc6\xe6\xbc\xf3\x96\xeb?\x9b\x88Z\xff\xb6w\xc0?\x13\x8c\x1cM8\x15\xe0?\x158\xf0\xfc\xc1C\xf9?\xfd\xb3F\xd0\x9f\xb1\xf0?\x8d\xd6Ph\xfco\x05\xc0J\x0b\xf6\x9b\xc5s\xe8\xbf\x86\x15JV#>\x04\xc0#\xa1%\xd3\x00o\xa1? \xd6\xe6\x89\xe6\xab\xe6\xbf,7\x94\x151\x12\xe4\xbf@\xf8x\xae\xe0F\xf8\xbf\x031\xce\xe5\xe7\n\xef?w\xb0\xe1\xbc\xb7B\xf8?Y\x0b\x96\x87\x1a%\xe6\xbf\tK~\xef\xed\xdc\xfd??\xb1t:\x05K\xf2?\xdak\xe6x\xcb\xae\xda?\x93\x01\x000\xd4y\xc5?51\xd8\xc0~\x9b\xcc\xbf\xb8\x18\x80(\x97\xba\xe5\xbf\xa2u\x89J\xdb\xed\xe1\xbfb\xb3\x1b\x8b\x9as\xd8\xbfs\xaby\xbd\xa0}\x01\xc0:\xe4(q\xea|\xcf?\x96FI\x91\xc0P\xe7?;H\xb6\x15\xcd)\xf0\xbf\xa1\xc7ei\x86\xda\xf9\xbf\xd0a>W\xa2W\xf4\xbf\x86=\x7fb>?\xe5\xbf\xc2@B9\x03A\xee\xbfwP<[f\xc3\xee\xbf\xf5\x10x\x06\x9f\xd8\xf8\xbf\x0b\x15\xfa\x9e\xfe\xaa\n\xc0\xdc\xa4\'\x1ev\xa5\x0b\xc0G\x17g\xaf\x07"\xea\xbf\xd6\x12!`\x9f\x1f\xe9?\x83\xa7P\x9b\x00\xb2\xb5\xbf\x11\x8a\xac\x82\x92\x83\xea?C\xc8\x03\xb7jx\xe2?\x8b\xe1t&\xf7\x1b\xf6?\xd3J\x01\x15\xb3x\xe8\xbf\x03u\x0eC\xd5\x8a\x04@&}G\'\xc4l\xc6\xbfS\xad\xc5\xee\t_\xf4?&NoP\xe2\xb0\xed\xbf\xa6\xb1cw\xc3\xa0\xc6?(.\xcf\x15On\xba?\xf2\x0c\x04\x98\x99\x93\xe6\xbf=\x93\xbbt\x1d\xd6\xfb\xbfZ\xc0sw\x05\xa7\x03\xc0\xd3\x14\x15YJ\x07\xfe\xbf\xb4\xa3\xda1`\x14\xc2?\xd7[\xa6\x8f\xb2\xca\xbd?lM\x7f\xf2\xa6\x19\xe5?McA\xa8\xe0\xeb\xe4?\xd9\xf1J\xe4\x11\\\xdf?P\x82\xe7\x8d\x8b\x7f\xd3?=\x8aR\xf5\xd5\xe3\xee\xbf\xb9\x03$\xb9\xc41\x00@*\xcf\xc0o\xbd\x96\xfa\xbf\xbc\xa8G\xd6\xd7\xb7\x01\xc0\x18\xe8\xe3F\x14\xc9\xd9?\xcfN\x97k\xf5\x7f\x00\xc0G\x1c\xfc\xc7(\xa4\xb0\xbf\x06\x1a\x06\x85C\xf1\x04\xc0\xac6\xc2\x9d\x8bG\xff\xbf\x1dL\x10\xb6H_\xd7\xbf\x84f\xf1P\xe6\xfc\xc6?\xdfu~\x98\x14\x11\xd0?\xed\xbe\xefPV1\xcd?\xf7\xffa\x17\xa36\xf8?\xcc\xc8\xa2\xe4\x11\xdb\xe2?\xac\x0b\x1b\xe8S\x8e\xa4?\x82 /\xd8\x10X\xc2\xbf\x11Z\xab\xb4^\x10\xfe\xbf\x93\xce\x18\xce\x91r\x03\xc0\xc8D|\x85\x93\xe1\xec?:\xaex=\xa1<\x00\xc0\xce\x07\x94\x16DS\xf9?\x95\x92\xe6\x07\x92p\x01@f\xf2\x97\x8a\xe8!\xee?`\xec\\\x8d\x0c9\xef\xbf\xb5\x02\xe9c,D\xd1?\x02\xf4h\x82,\xe4\xd4?\x02\x05~\xa5)\x14\xf4\xbf\x10<\xb1\x8c\t\xef\x00\xc04k\x9d7vt\xe5?\x98%\x01\t9\xd8\xfb?\x0fL\xe7\xfb"\x9e\xf2?\x96\xc0\xe4\xad=\xcd\xf8?D\xed\x86\xab\xff\xa5\xe5\xbfJ\xcb1U\xd7\x9a\x05\xc0\xf4\x81\xd9_^n\x08@F\x86\x1b\xe2\xc5\xed\xe9\xbf\xbc`\xbd\x95\x94\x18\xf0?\xcb\xd0\xbb\x81\x05\x87\xf2?\x0b\xb4~\xb1\xc1\x0f\xf8?Y#\xe0\xd4n\xdf\xc2?\x01\xc5Z\xb1M\x08\x04@\x01\xe2P\x14-\xd0\xeb?\x1fH$>,\xa0\xd5\xbfSyM-8\xa4\xf9\xbf\xa4x\xd8\xcf\xc8;\xcc?\xb5\xb51]Kn\xe1\xbfi\x8e\x8dI\xae\r\xf4\xbf|\xeb\xb8Ny%\xfd\xbf\xc2\x14\x92\xd0|\x12\xfb?5|\xbf\x95X\xb5\xec?\x07\xb8i\xc6\x94\xb4\xf0\xbfBI\xcc\xfc\x85?\xe5?\xb2\x9bXs\xbd\xe8\xb0?\x90i\xc3qn\xfc\xe0\xbf\xb3\x95\x03\xde\x1c\x0b\xc4?\xeb\xeb\x9d?\xda\xb3\xd8\xbfM\x18\xb9M\xfc\xfa\xf8\xbf\xb8\xa5\xe9\xc9\x86\xd2\xd0\xbf:\xa3\x129\xf5\x8f\xf8\xbf\x03\x80W\xba\x83\n\xf8?\x06\x99\xca1\xa8\x9a\xd2\xbf\xfa\xbf\xdf\x1d.\x10\xf1\xbf\n!A\x1a\x01\xa1\xdd\xbf\x89G\xe4\xf6\x0c3\xe9\xbfb\x03\x94\x15\x08\x93\xfa?\xbd\xd6O\x18\xe3\xec\xd4\xbf\xd0{k\x10\xc1\xb6\xe1\xbfQ\xd1\xd1\xd5\x9a\xb5\x06@E\xe0\x8aF\xd7E\x07\xc0\xa7\x8d\xb7.\xb2\xd3\xf6\xbf\x1fKTy\xd9\x99\xfd\xbfD\xf0N\x12\xbfA\xf4\xbfv\xff\x13 c\x0c\xfe\xbf\xa1r\x0b\x8e\xa7T\xe0?\x87\xc6]\x12\x93A\x07\xc0\xebS\x08\x97O\xe7\xf1\xbf9\x8bD\xea\xd9\xe4\xe2\xbfv0t\xa0J\xcb\xe6?\r\xa5"k\'\xe6\xf0\xbf\x07\x8d\x99\xc5C\xa8\xc9?1\xec~\xb6\x7f\x9d\xac\xbfp\xde\xe2\xc5\xce0\xd6?\x02Y\xd3#yQ\x88?\x05\xb9\xde\xb8e\x8b\xe5?))\x81i\xce\xc4\x05\xc0:\xd0\xadx\xe9\x1b\xd9\xbf\xeb\xf3e\x05\x7f\xc1\xe7\xbf\xd5i\x00\xa0\x1b\xfc\xda\xbf\x17\x070t;0\xc1?9U/\x18\x1c\xe4\xe8?XlF@\xf5\x1bD?\xf8\x96\xddM\xdb\x98\xdd?\xad\xb5\xa4\rp\xab\xf7\xbf\xd5=\x9d\x9aVX\xf2\xbfo\xcb\xfaG\xe8\'\xec\xbf\x96\xb8\x84\x8fo:\xf4\xbf\xe0\xba\xae\x07c\xb1\xfa\xbfxG\xcb\xb4Q_\xd5\xbf\xd2\x94c\xa0\xc3\xa2\x05\xc0\xab\xa3j\tN\x17\xf0\xbf,\xf2z\xaf9\x8d\x01\xc0D\xe4Ss\xdf\xe2\xfe\xbf\xda\xaf\xebM\x1b\x86\xe7\xbf\x99\xbd\xaf\xca\xf32\xde?\xd8 \xe3VPg\xf5\xbf\xb8\\\xdd\x8b\xf7_\xec\xbf\x19\xe0NF\xe6\x9c\xe1\xbf\xd8m\x0b(\xa1\xb1\xe1?\xa4#T2l\xf0\xf2\xbf\x1a\x91\xe3\x8e\xed5\xbf\xbf\xb3\x85\xa6\xec\xec\x9d\xc9?u\xa7?l^Y\xe2\xbfQ\x945\x16(H\xec\xbfT\xc9\x0er\x97"\x01\xc0\xfa\xa3\xe9\xb1\xf1\x88\xf9?\x06sd\x19\xae\xc8\xe0?\x93\xa8\xe6b}<\xd0\xbf\x8eF$XX\xb5\xf8?\xb8\xdf\xdf\xe1\xb5[\xf9\xbf\xa7\x0f\xe3\x8e\x87\xa0\x00\xc0\xa3\x9f\x10\xc1ax\xb8\xbf\\\x13\xb4{\xcfc\x04\xc0\xa0c{f\xce\xce\xd3?\x1fz\xa7\x14\xbeY\xf7\xbfa\xe8m\xef4c\xc0\xbfo\xbe\x9f\x83,\x8d\xba\xbf\xec\xe5\x87\xdbt\xd0\xe2?\x8d$L\x98\xe5B\xe7\xbf\x04C\t\x8e\xec\x1d\xd2\xbf\xb4&?3\xdd\xd8\xe9\xbf]\xeb\x89\x90O+\xf0\xbf\x92E\x98I\x15\xa6\xe7?\xc3FB\xc5\xce\xef\xf0\xbfV\xbeT\xb17\xb7\xe5\xbf\x91\xccF\xf8\x1a!\xc7?\xae\xc6TKDG\xe0\xbfZ\x00\xe8xF\xc3\xe2?\xe7\xa1m\x01\x82\xfe\xdc\xbf\x9b\xbcOn\xc0"\xe3?7\xceA\xd8\x815\xd0\xbfpt\x99\xdcG\xd3\x01\xc0|yZ\xa1\xf0\x84\xe9\xbf6%\xcdg\xb9\x9a\xa4\xbf\x19\xb9\x0bd\x92}\xec\xbf!\xf1\x98:\xb0\xa0\xf3\xbf\x93e\xbc[\xab!\xf9\xbf\xc2#\x0e6\x98S\xaf?\x92\xb7\x90\x07\xe3\x12\x07\xc04x\xe8\xb2o\xe9\xdd\xbff\x84\xcf\x1a\x1dn\xee\xbf\xdab*\xb4\xdac\xf1\xbf\x80\x92\xbb\xf3?\xc9\xe7?\x1d\xf5\x99\x00P?\xdc?2\\\xc8\xad\x1b\x86\xed?\xd1\x9a\x02\x14\x195\xc5?\x16>C\xb7F\x0f\xe9\xbf\xa3\xdb\t\x15\x87\x04\xd6\xbf[\xe7\xd4\xae\xfa\xdc\x00@\x13\xd1\xd4\xf2\xcc\x95\x05@"\x12\xc6\xebC\xda\xe6\xbf\xf7}\xb3\xe3\x15\x99\xd2?\x1d<\xdf]\x919\xe2\xbf\x10\xfeU]\x9c\xc3\xf1\xbf\xfb\x85\xc6q\x883\xe9\xbf8\xb2\xfb\xad6>\xea\xbft\xa5\xa7j\xa6<\x94\xbf\xdb~\x979B\xe9\xed?\xacg\x83\x91\x043\xa7?bN\x06\xf9n\xc1\xe6?\xbbu\x15\x93\x92\x1c\x00\xc0\xf3\xf0s\x94\xc4P\x81\xbf\xda\xcam\xa9K\xc5\xc1\xbf\xec\x9a\xcb\xc6\xd7E\xe0\xbf\xa3\'p\x0eDA\xe0?\x95\xe3\t\x1f\n\\\xce?\xfes\xfb\xe6\x99a\xf4?2^ZFw\x0c\xf0?\xd2\x17\xce\xe0\x9fsu?\x8b\x0e:\xd5=\x04\xc1?u\xf8\xd7\xeb\x7f\xdc\xd5\xbfM(\x9f\x82\x1f\x1d\x04\xc0\xef\xb3[6\xf5H\xb5\xbfK\xb8\x95k\x12\'\xf8?\x10|;\x1d\tM\x11@5.\xe3U\xc7\xb1\xe0\xbfy\x87\x91]\x0e\xb8\xf7?\x7f/\x97\t=\x97\x0b@v\x95E\xa9\x08O\xc7?\xf4\xc7N&\xfa~\xe8?E\x8e\xfb\x17\xab\xdb\xe3\xbf)\x9a\x967\x84\xe3\xeb\xbf\x81\xc2#p\x0b\x89\xdb?\x84\xado\xa9&\xd7\xf1\xbf\xb5l\xb7s\xca\x8d\xf6?\xe5dV\xa1]\xb8\xc6\xbf^\x96N\xdd\xb8\xb6\xd2?\x01\xfe<\x8e\r\xec\xe0\xbf\xcacd\xfd\xdd\x0e\xf5\xbf\xd4?,\x98\x13K\x04\xc0p\xa5\xb1\x8e\x90\xb2\xf5\xbf~\x90f\xcc\x05\xaa\xf0\xbf\xed\nz\xcc}\xf8\xe0\xbf=nu\xfb&x\x00\xc0Se\xcao\xa7\xd0\xc4?\ts`\x00\xf1\xc3\xf2\xbf\xb2\x95\xdd\x86\x01\x97\xc2\xbf\xb0\xd1@*\x0fp\xc7\xbf\x85\xf9\xd7\\\xb2\xa4\xf3?j\xcc\t\xed=\xb2\xf4\xbf\x88.\x8a\x97\xbc\xec\xae\xbf\x89\xbd\xda\xe3\x8f\xbd\xbd?\xdcy"\x0f\x10\x0b\xf8\xbf\xa7j\x94E\xf4\xc6\xee?\x15*\xf3\xc7\x9d\x9b\xff?\xa3\xaa1\xde\xf3!\x00@\xd8V\xea\xe6\x0c\x9f\xe4?P\x0bdA\xe7\x1e\x00@f\xb2e\x84k\xd6\xea\xbf\xc12\xaf\xd8,\xdc\xe6\xbf\x9dz\x13\xb7.\xa1\xf2?\xac\x1b\x01\x8d\xf1E\xdc\xbfNPG@`*\xb0\xbf{\xf9.\xc8ho\xf0\xbf%\xca\xb2z\xf0\xa6\xf4?\x16\xeb\x9f# (\xd9\xbf\xfb[\xff\xf0\x9e\xdf\xfd\xbf\xe0\r\xc0\xd0w\x07\x01\xc0\xdar\x1cV\xc5T\x00\xc0GQ\x93\xf9\xf1\x1c\xf9\xbf\xa8\xe5V D\xc6\xb8?\xb0\xf8\xac\x8a\x9b\'\xf3?;A\xfe\x94m\x1c\xf7\xbfM\x14YC\xc4\x0b\xf4\xbf\x0c\xa6$\xdc\xb6\xd6\xb6?\xb6N:R\x172\xea\xbf\xe5X\xe2W\xcc\'\xf5\xbf\x1b\xdf\xc2\x16\xc4J\xc4?&\x19D+0\xef\xe8\xbf\xd9\xeci("\xf2\xe4\xbf\x0e\xa0\xe3*\x96\xec\xff?7\x19\xd6\xc9R]\x0e@\xeb\xa7\xbbx\xfdp\xfd?\x8d9\x15O\xd07\xf6?\t\x97x\xa9y\x82\xf0?\xfbM\x083\x8e\x1f\xf1?\xb9\xc2\x96\xfaG\xbe\xee\xbf\x8b\x0e\x82TD\xda\xea\xbfa\x12\t\x99\xc1\xbf\x16\x9d>u\xef\xe5\xcb?\x94\xa0\t\xc6\xcf!\xc9?\xc0_\xd82\xa8R\xf2?\x10\x9a\x14\x90\x16\x82\xf7?\xab\x04\x08\xcd\xbd\xef\x03\xc0\xdf\x96e\xd7\x8e\x01\xc8?Bo\xb9\t\x85\x19\xd9\xbf\x15\xdc\xdf.\xb7\xf3\xc1\xbf\x9a\x9c\xfc\xe9\xe1Y\xf3\xbf\x0f1\x1c\xf6S\xaf\xf1\xbf\xbf\xed\xa1\x9e\xb0\xce\xe7?\x83@\x06\xc6\x0fv\x08\xc0wH9\xf3\xa1\x05\xf1\xbf\xc1\x05\xdc\t\xf1|\x00\xc0\xb4\x14Hy\xa8\xd5\xcb?\xad_\n>s\xf4\xf5\xbf\xdc\xe6\xc6\xa7vz\x01@l\xcb>\xf6\x94\xfa\xd0?|\x8d*\x8c\xc2\x8e\xe6\xbf\x19\xc5\xd7?\xbe.\xe2\xbf|2s\'0\x1c\xc3\xbf\x94\n|W\x8b-\xff\xbf\x1aD_t\x7f\xcf\xee?\x1e\xbf\x9c\x9dr\xc0\xf3?\xf3EW\xb9j.\xf2\xbfL\xd2\xb9Z=\xdf\xcc\xbfX\xf6\xee\xabqH\xf2?M\xb5G\xe4\xe1\xe7\xfb\xbf\x83*\r\xdc\\.\xc4\xbf\xa65\xa9h\xbf\x86\xf5\xbf\x04(\xc8x\xb3\xdb\xf6?\xb4\'*\xcc\x12\xa4\xe8\xbf\x95T\xbdl\xdeE\xe1\xbf/\xb06\x0f\x00\xe6\xe3?J&\r\x85\x97\xd6\xfb\xbf>\r\xcb\xacQ\x04\xdd?\xbfW0N\xaf\xc8\xe2\xbfS\xf2\xf1\xa8\x85\x1a\x04@_\xee\x1d\x12w\xf1\xe7?\xdc\xa9:\x10\x99\xd1\xe7\xbfp\xb4\x92\xafn\xeaY\xbf\x00\xa0\xbf\xddZQ\xe7?\xfe\xde\xfe\xc0I\x96\xbf\xbf"\xae\x0c\xef\xd4B\xef?l7H\xf8\x126\xd4\xbf\x12\xaa\xfa\xafh\x07\xd9\xbf\xc4\xben\xed\x1a-\xf6?\t#\xc6\xc9Fn\xab?\xed!\xf0^\xc4\x18\xe1\xbf \xe3]\xe2\x8bL\xe4\xbf\xfa\x18\x1d\xf8\xd8\xf3\xec?\x0f\xb4\xed\xb1\x88h\xd6?u\xa9\x91\x19\x86\x9e\xda\xbf\xc5)&\xd2<\xe4\xed?,B~\xc0\x05\r\xeb?*\x8bI\xde\xdfc\xe1\xbf\x88\xdc(\x80ES\xfe?/\x13R\xc6\xdf\xfa\xec\xbf\x8d\x01\x9e\xcb\xf8\xa4\xb4?-\x95\x83\xb7e\xc6\xd5?\x84;\xebk\x89N\xcd\xbf\xb1yG\x9bTE\x87\xbf\xe5\xf8<\xf3\xfas\xff?\xf7D\x96\x8b\xf2\xbc\xbf\xbf\xe6\x9f\x8b\xe82\xde\xe5\xbf\x98Mo}\x8aZ\xd1\xbf\xd4\xee\xc3\xbb:s\xc6\xbf}\xf0\x11\xea\xf4\xd6\xec\xbf#\xc5\xf0\x8e \x97\xd9?\x04\xfd\x19>\xa0K\xc2\xbfph\xc0\xbd\xae\xdc\xeb?\xe4o\x9d\x89\xeb\xab\xf2\xbflac\xe6\x06\x84\xc0\xbf\x1c\xb8T\x89\xfd\xed\xfa\xbfg\xc6|N\xa9\t\xd3?\xba\x90\x08\x1f\x9aF\xc1\xbf\xfaFX\x91d\xfe\xe6\xbf\x8b\xbf\x89\xeeH\r\xc4?\x1c\r\xa2\x17\x88l\xed\xbfR\x9dJ\xfc\xf9 \xe7?\x94\x83\xb2\xb3\xaf\x90\xd6\xbf\x8a,\xad\x8d\x10\xcb\xf0\xbfw\x16\xc3\x15\x1d\xdd\xef?,\xedA]\xd3\xd5\xf4?+?\x1c[\xf1\xcd\xf1\xbf\x87H\x14\x0b\x11=\xf4\xbf\x86$\xc4\x84\xac\xb9\xc8?s6\xa5u\xfe\xb8\xf2\xbf_3v\xc8Tp\xc0\xbfU\x85\xe4Yz%\xdf\xbf\xcep\x8aQf(\xe3?\xd2\x92\xf4mQ\xd7\xf2\xbf-!/\xf8<\xde\xd8?x%\x01\x19\xc0~\xed?\x1c\xcf\x84X\xd4\x8e\xf3\xbf}n\x0eq\xe9\xc4\xe3?\'9\x80,\x10*\xc7\xbf\xdd\x8ay\xca\xf1\xed\xdb\xbf\xb6\xfc\x84\x197S\xe4?\xa2\xe2\xff\x96z]\xe1?N\xba\xe0\xf7\xa4\xa4\xd2?O\x87\x03\xb8\xfdF\xdd\xbf\xbd\xf6_\xd2!\xe0\xf0\xbf\x8e\xbb\x8b\x01\xe2\x12\xf1\xbfs\x03\x10+\xfb1\xc1\xbf\nD\xc5\xf5\x11c\xb7?y\x85\xd4/:;\xdb\xbf\x1fYB\x10\xc7\xec\xd9?\x8b\xec\x84Jl\x13\xcb?\xbb\xe3U\x1e/\x94\xf2\xbf\xeb\xf8\xf12!\xd6\xf0\xbfT\xdc\x1c\xa3\xeb\x15\xc1\xbf\xbb\x94\xc99\xa4\x04\xce\xbf\x06\x98\x12\xd2\x08\x90\xd4\xbf\x06\xd3O\x9d\xda9\xe8?H/Y\xd2\xde\xeb\xd4\xbf\xe1\x83#\xd1\xf0\x93\xcf?\xf5\xe6\xdfU\xaf\xe2\xe6\xbf~\xbfK\x9ch8\xd2\xbfz\xc6)\xfa\x96\xe2\xd1\xbfmu\xb8\x8e\x86p\xec\xbfE\xd2X\xe1\'\x9e\xd8?\x8e\xb6\xda\x9c,\xe1\x9d\xbf.\xbc\x81?m\x90\xf9\xbf\xfe\x90\xa2\x9eH\xa4\xe3?L\xb6hJ\x05\x8a\xe7\xbf\x95\xa0\xa1\xe9&\x8d\xf7\xbfy\xd9\n\x07\xeba\xf4\xbf\x83\x85\x91\xc6\x08\xaf\xb5\xbf>\xd8\x96\x86\xf8\xd2\xe9\xbf\x93y\x10\xcc{9\xf2\xbf\xe5\x07E%\xc1\xcd\xec?S\x7f\x04\x8e\xd4\x1b\xd4\xbf\xeb?\x94\xa4\xffe\xea?b5\xde \xab&\xe6\xbf\x18J\x90\'\xb6\x87\xc9?\x99\x0c\xc7my*\xf4\xbf\xc0,\x7f\xabt\x0f\xcc\xbfQ\x1dj\x04\x97\x9f\xd8?\xb6\xa6)\xfc\xf5\xe5\xe5?\xc8\xd10u%\x9a\xc8\xbf\xe7g\xce\xaevI\xd1\xbf3\x9b\xef\x11l\x16\x97\xbf\xd3\xf9aT\xa0\x83\xe7?\x99(\x90v\x01e\xb6\xbf\xd3S\xa2\xcf\\O\xd1?"\xe1\x84\x13\x83l\xf6\xbf\x14\xa8\x11\xe8\x83\x0f\x00\xc0\xa1$y%\xc7$\xd3\xbf\x0fZE\x91s\xcb\xe7\xbfL\x1c\x18k2~\x0e\xc0O\xa2>h\xc9\x14\x0c\xc0\x12\xf0\x99\xc2\xf5\xe9\xcc\xbf\xaa\xb41\xd5\x05I\xf6\xbf\xfe\x1b\xa4J\xd0\xc8\x04\xc0i:D{\xc72\xf1\xbf\rMa\x8eta\xe4\xbf\x96\xa3v\x84U\xd3\xea?\x84=\xc3\xe7\xd3\x1c\xe5?)\xad\x02\n\xc0\x02\xf0\xbf\x9e\xe7\x0f\xf9~c\xf1\xbf\x08\xc8\xfa\x8c\xb7;\xfe\xbf\x8af6yQ\xcf\xf8\xbf$\xb8\xb5K\r@\xc2?f\xcb\x87\x92eO\xdd\xbf\x91_\xca\xb2\xae[\xe2?\x83\x8a\xf8a8\xb2\xcb?\x84\x8a\x11\xa6w\xb0\xec?\xed\x08\x08\x17r\xa6\xcf\xbfT\xe8\x92C\xf1\r\xe6?\xaf\xfa\x0e\xe1\xe5$\xf9?\x8bKS\xae8\x8c\xe3\xbfeL\x84\xe0\xa6$\xe4?@=V\xe4\xe2h`?\xda\xeb\xae\x0b\xf6D\xe8\xbf\x89-\xe7%\xc08\xcb?&Y4E~\x9f\xf1\xbfP-\xcb0\x96\xb6\xd8\xbfso:W\xadM\xc4?e\xfd\xe9\xbb/\xa4\xec\xbf\xaa^\x8f9\xb9\x80\xff?l\xcf8#\x06-\x05@\xafA\xc6\xacL\xd6\xf7?\xf5\xd8\xfa\x95\xf8^\xd9?\xb3?\xba\',\xf8\xfc?;\x94\xde<\x8b\x12\xb5?\xb9\xc7\xfa\xb1\x13@\x00\xc0\xa9\xbbC\xee\xdc\xcb\x00\xc0o=v7\xe3\x98\xf6\xbf\x1fW\xb7q\xd5\xb3\x03\xc0\x0b\xa7GI\x95\x97\xee\xbf\xc5\x9a\x17\xa6\x02\x85\xec\xbf\xa44j\x9b\x90\x10\xdb\xbf\xa1\xbc\xfb\xb7A<\xf4?}\xb0\xeef.\xa9\xc0?\x94)\xfc\x86\xb7\x91\xf2\xbf\x163g\xea\x9f\x1d\xe2\xbf\xba\xd2\x10\xa0\xcfo\xd5?\x7f\xf8\xec]Ad\xd4\xbf\xa4\xcf\xcdpf\xeb\xbf\xbf\x08\xaa\'\x93\x97\x88\xa2\xbfJiD\xa8\x96\x19\xfd?x\xb0\x81.am\xd6\xbf\xdc)\xe3\x0eM\xc7\xd1?\xacb\xddR\x98\xe6\x00@\xa5\x9d\xc0\xf4\x98\xd9\x05@T\xbd\xc3\x9f D\x01@\x8e`u\xdbH\xfb\xf8?\xe79\xa2\xef\x90O\xff?T*\x9c\xf8\xa9\xd0\xe3?\xd1_\xa7bJ\xef\n@\x04\x97\xee]\x14\x9b\xfb?\x16K%\xcfV1\xdf\xbf\x0b\xaa\x19\x17\x17\x00\xd8\xbf\x02\xf8d$\xbb.\xfa?\x82\x12[\x96p\x04\xe6?\xfbh\xc3\xaf\x88\'\xcf\xbf\x95\xd2Wsj\x80\x06\xc0O\xe4x?\xbb\xe7\x05\xc0X%2\x8eYY\t\xc0\xb1\xb2\x7fU\x90G\x02\xc0\x13C\x16\xd41\xb1\xfb?\xca\xe9(\x1cx|\xeb?_\xea\xd4}\x9d\x0c\x88?\xde\xb8\xeci\xc5\xfb\xc4?m\x17O\xd6\xc5V\xea?q\xa3\x7fN~7\xc6\xbfq\xdc__\xe2\x9b\xc1\xbf\xbbo\xbf\xd3\x92g\x03@\xc6M\xf9\xcb\x15k\x12@\xda&;jw\x0b\x0c@\xbc\xe2{<\x86\x0e\x04@\rX\xec\xe6\x14i\x9e?\x86}\x18\rb\x1e\xf2?{\xdb\x0ej\xfbn\x03@\xbd4\x13G~\\\xf7?\xa4j\xc6\x88\xd7P\xdc?\xd8\x04\xcdx\xb3n\xf0?\x9bz\x86P\xb2\x17\xe9?n\xad\xee\xdfh\xa0\xf4?L\xfc\x87\x95\x08!\xfa?B!n\x83\x8cY\xf1\xbf\x9f!A\x92\x8d=\xed?\xa1B\x81\x8c?\x15\xca\xbf\xa3\xf6f\t\xcc\xad\xd8\xbf\x1d\x1d\x97\xee\xa05\xaf\xbf\x8e\x893\xe1?\x07i\xa5\xb2:p\x00@\xb9z\x9cw\x9fw\xfc?c\x1cvrr\x90\xfc?Oz\xebW\xdaj\xff\xbf+?\x9a\x92\xc9\xe8\x00@\x83\xe9\xb7D\x89\xb2\xf4\xbf\xa6\x91\x89\x80\xf7t\xc1?Ox\xd1\x1ea\x01\xef?L\xb2\x1d\x02\xe31\xe9\xbf\xb0\x88\x12\xa7\xdc\xaf\xf7\xbfR\xc39\xa2+\xae\xf2\xbf?]\xb0\xc7\xc0\xc0\x02\xc0\xbe\x91\xb8K\xc3w\xb1\xbf\xb1\xd6n\xd7}\x82\xf6\xbf\xcb\x18UC\xdf\x92\xd7\xbf:\x08\xfbM\xaa\xb4\xd1?\x18=t\xe5\xb0m\xe2?\x01%^\xe7q\xb1\xf9?\xf7\x18j\xe8\xd67\x06@O\xbe.$Sf\xf9?\x02\x1b\xdf\xa7\x1c\xd4\xeb?!\x8a@9|(\xf0\xbf\x99\x89\xb1\x14\xd8#\xe5\xbf\xb3\x1e\xb1\x97\xcc`\xb4?\xd0\xdc\x99\xbe\xed\xb8\xd0\xbfj\xab\xb7S_*\x0c@[\x86r]0\xf6\x00@=\xda]\xf4\xcd\x97\xe6?\xee_\xbd\xe1E]\xc9?\xa8p\x8b~\xe1=\xf7?N7\x100\\v\xb6?(\xfb\xa3`\xe7*\xf3\xbf\xe5|\x10\xeb\x1e\x08\xe7?\xd1\xf7C\xaa\xd5q\xe7?\x1aq\xb1H\xb8C\xe2\xbf-\xc27k\xe9d\xfb\xbf\x7f&\xfc7\x1cX\xe5?\x0e NO\xf0\xe5\x10\xc0\xdd\xdb\xf4\xee\x90\x9b\x18\xc0\xce\xe9\xa6\x8b\xf4\x07\xfc\xbf\x8b\xad\xe5\xc5\xc2\x8e\xc2\xbf\xb6\xeaa@\xc4S\xf2?\x86yA\x13(P\xda\xbf\xf3\xa9\x97\x84\xc3\x13\xff?a\x98\xa7>\xad\x92\xf3?\xaf\xcc\x1ce\xaf^\xc7?]\r\x9c\x83!~\n@\x10:c\x08\xeaW\xf4?z"\xf74\x8f\xc6\xe2?T\xff"\xc4\xadp\xf0?\xff\xd7\x8e\xb0\x1e\x18\xfa\xbf\xa6\xc1,EE\x9d\xdc\xbf\xe2xn\xa9\xfdU\x05\xc0\ng-\x19\xbd\xc0\xeb\xbf\x95\x89y\xc54\x10\x0b@\x94\x0f\x90~,c\x02@\xd8\xa30\xae!9\xf9?\xfd\xebf\xbf\xe0\xea\xf0?\xc8>\x16A,o\xe5\xbfC\ts?\x82d\x02@\x100\xdf+\x8a\xdb\xd4\xbf\xf7\x9a\xce\xec\x86H\xf3?\xbb\x81\xbd5U\xb0\xea?\xf1&\xc0C\x8d\x11\x00@\xca\xdb\xa3\xfc\x07\xc3\xe6?\xdd\xb9\xceo:h\x12\xc0\xc2*\xea;\xa2\xca#\xc0\xb4\xe7\x1aq\x9b\xc7\x04\xc0!,\xaa\xe4\xa9;\xf2\xbf\xb6\x0cW\x92\x1d\xe3\xc0\xbf(\xc9\xd6\x00]\x01\xdc?@r\x93\xb8\xbfA\xd0?,s\x8f0\x84\x96\xe3\xbf\xc5\xdfD\xf2\x90\xa4\xff?\x1a\xc0\xb2/q\xb1\x1d@\r\xdb\xdax\xcb\xc9\x0b@:\xfb\x92\xa7A\xae\xb0?\x83\x94\'V\x93C\xeb?U\x95g|\r7\xcc?\x92\x15\xe0\x98\x03\xf7\xe9\xbfK\xe7B\x00\x8b\x12\xdc\xbf\xd2\xf9\xca//Y\x06\xc0\x9f\xc3\xfe\x11\xa9\x13\xb7\xbf\x0c\xf0\x9b\x85\xee\xaf\xe1?\xde$O\x08\x03\xe8\x11@g\xec\xec-lU\x11@8\xb2\xf0\x8e\xa8>\xbf\xbf\xe6\xd0\x10<\xa4\x8f\x02@\xb9\x92K\x81\xae\xe7\xf5?\x91m^\x8e\x8c\x9a\xf3\xbf\xa0|\xf6\xee\xdc|\xe7?\x07\x02O\x98d\xbf\x00\xc0M\xc1F\xa3\xd2\x00\x06@\x1f\x9a\xc8\x890\xba\x05\xc0\x13\n ~\x136"\xc0g\xfd\xbc\x9b\xa3\xa5\x07\xc0\xbd\xbb9`\xe4\xe6\xc2?\xff\x9a\x0e\x93\x9ac\xf3?\xf6P)\xf9O\xd8\x8c?\x85\x19xL\x88\x83\xcc?\x87>\x94*\xac\x92\xc9?\x86\xca\xbc*2>\xf7?X\n\xe7\x18\x95I\x0c@AB\x82\x9fi\xc4\xf8\xbfX\x9e\x80\xf4\xbfx\x18\xb1\xbe\xef\x10\xe6?R\x86\xffW\xf0\xd8\xe8\xbf\xde\x83aT\xb9\xa2\xe4\xbfUl\xa8\xc8\xd5\xd9\xe9?:\x18n\xf8\xea\xfd\xf1?\xb2\xa1\tP\xf83\xfb\xbf4\xaa/\\\x92/\x14\xc05\x86O\x98M\xec\r\xc0\xf9\x12\xc6\x1eYe\xdd\xbf\x90K\xfd\xe7Y\xed\xe5\xbf\x94=\xdf\xe6\x10\xfe\xe4\xbf-i\x0b\xfe\xe1\xa4\xec\xbf\xc8\xb1\xe38\xad\x1d\x10\xc05\x8cZ30\xd2\x11\xc0\x18\x19\x95\xc3\xff\xdd\x06@\xf1\xac\xa4/9S\xe9?\xbe0\xdfA\xbad\x00@j\x9e\x1f\x8f\xcb\xe5\xd6\xbf\xbc7Y\xe3\xa8\xe1\xe8?\x07\xd4r<\xaa\xf3\xc3?>W\xf2Z\x85\xc3\xd7\xbf"?\x87\x0c\xea\xc5\xec\xbf\xf7\x91\xcc]\xdc\x0e\x0c\xc0W\xd3\xbdl\x9a\x97\x0b\xc0\xdczo\xe5\xec\xd1\xf4\xbf\x16\x96,\xb7\xb40\xf6?\x99|\xb0\xfdl\x01\xd5\xbf\x9e\x0c(\x1aQF\xcb?\xfb\x93\x15\x07\xb9G\xb9?\x10\xcb!\xc8\xf6\xe0\xdc?\xb5\xd3\xff0\xc7v\xe2\xbfw\x7fP\xd4?K\xf1?\x15\rQ\xc1)\xbf\xe6?mS\xed\xf4\'\xa4\x16\xc0\x9f\xddLg\x8b@\x13\xc0\x7f#JR7\x1a\x0f\xc0.\x93}\x9e6N\xca\xbf\xc7:\xba]\xab\\\xf7\xbf\xa6X\xf2\xee:\x92\xdf\xbf\xaddw\xbd\xfaa\x04\xc0\xa3\xa9k\xb5B\xe0\x06\xc0u\xfd\x85\xfa\x8d\x17\xe9\xbfUD\xf1d\xc2=\x02@\xe1\xc8I\xb5\xa0r\xf2?\x18Iuq\x07\x97\xf4?\xc3H\x943c5\xf8?\x96\x03H\xf1\xece\xe7?\xb9YD\xb4\x92\xa4\xd4?\x05=\xd3W\x96\x96\xf2?ME\x1a\n8?\xf2\xbf\xf6\x91[6k\x8b\x0c\xc0\x13\x0c\xfc~U\x04\x0e\xc0\x88\x04W\xc4At\xcc\xbf\xbc(c=\x87\x0c\t@\xf3\t\xba\x80@\xe5\xf7?q\x0e\xee\x8cw\xb2\xea?\xc8\xb5\xd2Wc\xf7\xf0\xbf\xaaj\xc2t\xb9o\xe3?\xa1\x94\xde\x82\xdd\xac\xe6?\xf51/\xe7d-\xfb?\x1c\xa6_\x01=\xb9\xcd?\x1b[|g\xaa\x82\x11\xc0[\xf5\x88\xba\xee\xb1\x13\xc0\xfb\xc5\xac{\xb2x\xe5\xbf\xa4\xe3\x17\x02\xc7\xc5\x08\xc0\xb8V\xa0j\x90\xd8\xf6\xbfb\xe8q\xafA&\x05\xc0c%\x8e\xc1\'\x1a\x08\xc0hI\n\xca\xbd\xf3\xd2?\x0f-P\x08\xa9\x17\xe1\xbf\xcc\xf9\xc4E\x8eE\x03@\x97\x91\xa1\xbc\x9f\x04\xf1\xbf\x9eH\xee,\xcfK\xfb?\xe1$}\xda\xf6\xd9\xe3\xbfOu\xba\x94\x13n\x01@\x8d\xb9WFO.\xdd?p\xd5yY\x95|\xf8\xbf-\xcfm\x85\xc6\xf6\xf1?\x84\xfah\x1a|9\xff\xbf\xc8\x97\xae\xa0N$\t\xc0\x99\xae\x92\x1aW\xce\xe7\xbf\xf3\xc1\x81\xfc*\xb3\xff?\x00\x9b\x81\xf8\xde\xf1\x06@\xd3\xc0Q\x93\xa0\xb1\xe0?~\x07V\xec|\xb3\xd0?P\x9d\xf3*,\xdf\xa9?\x02\xdf\xb2_\xf6\x8b\xe9?G\xed\x92\x80e\x19\n@2\xe5Ie\xa3\xca\x04@\xdd\xe0\xfd\x9b\x04\x15\xfe?\xbez\t\xba\xbe\x93\xe6\xbf\x07Q\xd6\xba\xf1\n\x08\xc0\xed#u>\x19\x82\xd2\xbfo\x9f!mmd\xe9\xbfqy\xc0C\xf4\x8f\xfc\xbf\x98\xb2\x1d\x84>\xf2\xbb\xbf\xee\xa3\x04\x07\x0c\xea\xf8\xbf\xe7\xae>\x92u\x0e\x05@\xe8\xc4\xd8\x89-\xd0\xe1?\xdb\x0cz\x8e\x95\x1a\xf4?,\x84j\xef>\xd0\x11@5\xe1\x91\xd1\x95\x10\x80?%:\xe8\xc0\xc1\x13\xc9\xbf\x80\x1c\xbd$\xe3\xd2\xe4?\xf1\r\x1ac6_\xed\xbf\xe2\x81\xce\x1c/)\xf2\xbf\x12$vs\x1c\x80\xde\xbf\x0fp\x87\xbf;+\xff\xbfd\x16\x8e\xf8\xce9\xc7\xbf\x182in\xc8\xba\x06@}\x85\x80\x16TM\x04@\x94u+@\xe5Z\xf2?\x96\xfc\xa0\x98s\xfc\xfc\xbf#\x8a\xb7\xdb\x01\x05\xe3?w\xba\xec:\xbc(\xe1?\xa4\xb5\xb9\xb0\xcc\x16\xf5?LK\x93\xa6\x95\xa3\x01@%\x8bq\xa7Nq\t@\xd1E\x9by\xa5\x16\x03@\xf7`\xd4\x14\x9b\xea\xe8\xbf\xd2\xc2\x080\xddK\t\xc0x\xf8^\x83\xf3i\xf0?F\xecr\xc0\xce\xa4\xe4?\x0f\xcd1\x80\xbcv\x02\xc0z\x92\xad\x0b\x12\xab\xc1?&\x99\x16\xf6\xe7\xdf\xed?\x1d\x13;\xce\x9e%\x05@I\xdb\x07\x8d\xde!\xf4\xbf3\x0e\x84\xfe\'\x85\x02@\x02\x103Xwb\xc6\xbf\x99\xee\x11m\x10\xd9\xf7?SV\x872\x8f\xfa\xe7\xbf\xc4\xee\xc0\x8fb8\xfa?.B\xe6kW\x9b\xe0?[\x14\x0f\xc2\\\xed\xca?0`\xd8:\xbew\xe7?\x13Fi\xe0\xf1A\xf4?,\x0c\xb0Nd\x88\x11@JP\x14\x92\x15)\x04@\xe7\x91\\\x07\x0c\xec\xda?\xe9\x85\xe4\xbf\xe2\xda\x8b?ex\x83[\xbf\xb3\xd2?zv<\xf0\xbc\x12\xf1?\xe1\x8f4\'\x91\xb2\xfe?WIJX\xd1\x06\xee?\'\x19\x80\xe81\xb2\xe1?\xbb\xb1\xfe\xd62B\xd8\xbf\x15gz\x0b)\x07\xfa?8\xce\x86<\xc5\x87\xc9\xbf\xdaBz\xc7\xdc\xac\x01\xc0\xd8\x98\xad\xddv\xf5\x10\xc03\xa4\tT\xe9\xab\x0c\xc0(O\x91\xc1)\x0e\xec?\xd5\xea\x94\xf4\xf1\x9a\xfc?\xbfT\xceOVK\xe0\xbf\xebl\x8e\xf1$\x98\xcf\xbf[\xd5r\x15V\xa0\xc4\xbfm\xf2\xc5\x11\x8e^\xd6\xbf(\xde.\x96\xb0+\xe3\xbfS\x91\x1e\t\xb7\xa3\xea?\xcf\xe4Z\xcd)\x10\x04\xc0Gi\x19AT;\xe8\xbf\x81\xdeX\x1e\xf9C\xed\xbf\x9cA\x10\x05\xb6\xf4\xd5?91\x9c\xbfP\x19\xd2\xbf\xf9\x933\xcb\x038\x10@\xbd#\xdc\xbfl\xd8\xf8?R\x82GU\x06\xf7\xbd\xbf\xcdp?I\x9cY\xc3?\xee\x99o\x8d\xa6\xe1\xdc\xbf\xf0&\xed\xdd~q\xaf?\xfd\xc2\xa7Q\xdbN\xfd?\x1e\x81>\xb5f\xb9\xf6?C\xa2\xc7\xfb\xf3\xd9\xf2?\xc5q\xce\x9b\x85\t\x00@\x84\xaen*H3\xe2\xbf\x16zG\xc8\x974\xd2\xbf]\x95\xc9\x90\xb5\xe9\xf5\xbf\xd1\xfdR\xbeW*\xb1\xbf\xd5o9\x0e\xae\xf5\xfb\xbf\xa7\xe0\x85\xaeS\xbf\x12\xc0\xdf\xc3d\x9a\x90P\xa5?\x0fu5V\xc3K\x06@\x1e=S\xfc\xf4\x81\xd2?\xa0J\xa2\xf9\xe7\xcb\xc5\xbf\x00\xe3\x02e8\xb4\xf1\xbf\x1a\x053\xc3\xb7\xfe\xe3?#\x1d\xaf\x19\xc3\xfa\xd2?\xe5B\x81&;\xf0\xc3?kJI\xb0\x85\xf5\x00@\xee\xe0~\xac\xc2\xe7\xf6?\xe4hM\x15<\x01\x12@qN\x8a..:\xfd?t:\xb3\x95\xffP\x08@\xeaQ;\x1c\x14\x19\x07@g\\*\xaa\xeb\xb6\xfe?\x00\xe4L\xb7\x10K\xbb\xbf\x8d\xfb\xb1\xb6M\xbd\xf0?|\xae\x9b\xf5\xe1\xf5\xac\xbfU\x03\x95\xa4\x05\xef\xd8?C\xec\x98{\xa3\xcf\xee?Wp\xc1\r\xad@\xe1\xbf?"\xecV\xc3\xfc\r\xc0\x16\x84\x01\xfb\xa0?\xeb?\x86Kw\xcb2\xfc\xfe\xbf]\xa6n\n\x0e\xc2\xf0\xbfug\xfa\xe2\x05\x1f\x07\xc03{\xeeI\x07\t\xf5\xbfm\xe4\xb7\xc5\x05\x16\xe8\xbfK^hI\xfb\xc9\xe0\xbfpmq\x06\x90+\x97?\xbf\xa4\xfdr{\xb5\x00@\xf9+\x17 S)\xe8\xbf\xef~\xb5\x07\xedu\x04@=\xaa\xff4\xb3\x83\xf9?\xa8\x17\xcd\x0f\xca\xa0\xe5?\xebp\xd5\xa5"\x1d\xeb?\xcfku\xb6\xa2\x95\xbb?\xed\xfa*\x89\xc3\xa9\xd4?\x96\x95E&\xbd\x17\xf9?\xbc\xd0\x00\xfc\'\x07\xf3\xbf\x8amP\xa7\xf1\x1c\x0b@9\xc5\xafJ\xe6l\xf2?\xf25*\xb0N\xe6\xc7?\xbc\xbb\x1b\x82/i\xff?RP\xd7\xa1\x13h\xf5?W\xdbg@W^\xbe?\xfed\xd7\x90\x9c\x96\xec\xbfY(fY\xea<\x12@\xf6v\x1fa\x9c\xd0\xff\xbff\xf0\xf7]\x0f\x0f\xf0?\xde\x7fzJ\xa8P\x0b@H\xc1\x02\x90#,\xd6?Ybr)\xa78\x04@3{\x02\xd4h\xbd\xe1?\\2\x94\n\xb0v\xe0?\x15R\x10\x83hC\x07\xc0\x9d%\x01S3\x0c\xf6\xbf\xa4i\xf4\x0e\xdd\xca\xec\xbf\xba\xec\x17\x90<\xe0\xe4\xbf\x90\x90&\xea\xb8\xc7\xf5?\x87\xee\xa0\x8d\x97\xd8\xf7\xbfPO\x92\x1bt\xf9\xf2?\xed8\xa9\xe1_\x0e\xfb?D_\xf5 \x85y\xff?}\xcc\xd7\xdaw\xf5\xdb\xbfc\xebK\x82m\xdf\xb7?8a\x81a\xa2C\xf0\xbf\xeaOP6\xbb\x86\x04@\xaf\xf2\x00\t\x93\x85\x00@^\x99\xf0\xdau@\xdd?\xe8\xe1\xd3\xa9\xd4T\xee\xbf7\xcf\xadx\xff\x1b\xe8\xbf\x97\xd7\xc6D>\x1f\xce\xbfps;\x86Q\x9c\xef\xbf\xed\xce\xdc\x04\xc0\x08\x9df@\xd7_\xe1\xbf\x92\x1c\'c\xb0"\xf2?\x8dH\nN*]\xeb\xbf\xf6\xf7\x030\xed\xff\x96?\xfcR\x95okD\xed?5\x8a\xea\xfd\xb8\xbe\xca\xbf\x92\x1b%c\x0b\xb4\xe3\xbf\x80\xb6M\x18\x8a\xc7\x9c?k\x19u\xf2qny\xbfR+\x83\xdfJ\xde\xe2\xbf%U\x9cR\x02\x1a\xff?r\x11\xe9\xf9%\xe6\xcc?\xaalD\x0f\xa9\xc3\xe7?0\xfb\xbe\xfc#m\xc0?\xc0\xa3\x1c\xe5\x82D\x00\xc0\x01\xbe\xf6^\xa5|\xf9\xbf\xabN\xa7\xe1\x17\xfa\xc3?\xaaO\xc2\x8bF\xf5\xf2\xbfAY\xff2\x11\x80\xfc\xbf\x1b\xf0Ds\x7f\xe2\xe3\xbf:n\xb2[[\x91\xfe\xbf\x94\x7fy\xabz6\x04\xc0v\xa9\xbf!wQ\xe8\xbf\xc4vm\'\x8bc\xf3\xbf\x90\xa4\x89\xeaPv\xfa?$\x84\xaa\x10\xd1\x8e\xee?4o.\x14\x06r\xf4?G\x92y\xd1!\xd8\xf3\xbf\xd0\xa5\x15\xe5\xc3\x1b\xc3\xbfel1I\xbc\x1a\xe0\xbf\xc7,\xc7|\xa5\xf9\xe1?fQ?D\xb8c\xf5\xbf\xff-\xd6a\xad\xd6\xef?/V\x88K\xedk\xd4?\x02\xd0\xee\x9a\r\x95\xd9\xbf\xbe>}\xa7*\n\xec?\x8e\xdf\x87x`\x0e\xe4?\xd2\xfb\x82\xdae\xae\xea\xbf\xe5\x11d\xb3\x1f\xa3\xc7\xbf\xe8\xccxL\xb3\xd8\xe8\xbf\xec\xf6\'\xce]\x04\xff?N\x84\xd55\x9a@\x06@S\xf8\x8eB\x08\x81\xdc?\x96D\x92e\x04W\xf0\xbf\xdf1\xeb|\x05\xac\xcf\xbfR\xd0\x04)m`\xc8\xbf\xaf\x05\xca\xebT\xa8\xb6\xbf\xb8x\x1c\xbf\xd7i\xd2\xbf\xaf\x96\xe8\x12\xb5\xbc\xb9?0\xf0\x9f\xf4\x94W\xd7\xbf\xfe\xf6\x8d;\x87\x9a\n\xc0\x8e\x96\xdd\x0c\xc5\xc7\xff?E\x08\xe1\x98&\x8f\xc2?\xafcn\x92\xa5\x14\xbd?\n\xdc\x8bg\x0c\xb8\xe7?\x8ap9E@\x87\xda?\x11\xd0\xe4q\xe0!\xf9\xaa\xb4\xbfE\x92\xa7\x12\xe0\xf2\xa9?=\xa1\xea\x82\xed0\xf0?C\xa5\xba\x8e2,\xec\xbf\xe6\xf2\xb2\xa3#\x0e\xdf?\xccR\xb7JJ\x01\xea?\xcd\xa1\xb6G\\b\xe7?\x12\x0f\xf0\xa4\xf7J\xf7\xbf\xb82zFPz\xc1\xbf\x00n\xf9\xa6\x15i\xeb\xbf\xe8\xa2\x16\xa7Y#\xd7\xbf\x08\xd5]\xa4\r\x16\xd8\xbflh\x8d\xcf\xfdV\x8d?\xe9\x8d+\xd2\xd8\x08\xe6?\xe1\xf3./RN\xd7\xbfT\xf2,\x1a\xa9\xe5\xde?\x1e\\\xc8\x00\xb6B\xd0?^\xc5<&\x1c\xad\xe0\xbf\xfb\xf7F\xf9\x8d$\xc4\xbf+ \xc9\xd9\xec\x17\xc0?%\xfaU5\x0c\x94\xa8?\x80\x8c\x96\xb9]F\xee\xbf\xf2X\x89\xa4F\x10\xf2?E\x05L[\x99K\xe0?\xda\xf7P\x12<\xb9\xf1?\x9f\xf0\xcc3}\x7f\xe9?\x19U\xb0\xb5\x9a\x97\xd6?\xd6xb\x02X\x1d\x9d?\xcb\x11.\xed\x0c\xab\xf3?\x93\xe3\xaa\xe9Wq\xca\xbf~)uD\xae\xb0\xd3?\xd39\x96\xe1;\xcc\xd7\xbf)1\x93\xb4\xbba\xf0?\xae\xb0C\xb9n\x15\xe0?\x900\x98\xd9\x88\x8f\xe5?\x9b\xe3r\xdeQp\xb3\xbf\xff\xbe\xe3H\x96\xeb\xe2?\x1c\x90\xe3\xc0n\xed\xe8\xbf@\nI\xe4,\xec\xd1\xbf\x17\x9d\xd5p\x1d\xe6\xfb?\xcb\xe8\xf9rU\xfc\xba\xbfE\xed\xd2~\xc2\x1f\xb2\xbf\xf8_\xde6\xe1\r\xf8?\x08\xb3\xc5k(\x0e\xd6\xbfr\x83\x93Xl#\xde?\xe4o\xde\x06&\x08\xd0?\xac\x08\x82\x11\xba\xbd\xd0\xbf5\xcfA"\x13y\xf7?\xb4P\xc0f\xf2\x1b\xf4\xbf\xb66\x9c \x05\xfa\xd0?i\xa2\xb2\xf9\x1d\xee\xee\xbfV>\xec\xd8#\xb9\xd0\xbfn\xca\'{\x94\xcd?\x0b3\x96J\x16\xc2\xfe?\x02\xb5\xd2\xb5_\xe1\xe0?\x97G\xf2\xc9\xfe\xa2\xe8?#\xf1|\x8dX\xc0\xf7?A\xeb[\xbd?\x9a\x06@WqQ\xc7\xda\xc0\xf5? Rh\x11\x12/\xf8?k\xa0\xb3G:\x1a\xf7?#P\xba\xa3\xef<\x05@\t\xfb\x14SEW\xf7?\xfaY\x08\x1a:\x1d\xf6?\xe3\x84\x9b\xf4\x1e_\xf0?`\x87MRB6\xea?W\xa3RZ\x90z\xe3\xbf\xcb3\xf5;\xa9\x90\xe6\xbf\x08\x85\xb0\x97\xce\x9e\xf7?)\x1f\x9f\xbdS\xa3\xe8?[e\x9a\x9b+j\xdd?\x99\xd9\xae\xe0\xd0\xcf\xe0\xbf\x90\x07\xcbNOG\xed?\xc9j\xb2?\xbcT\xd1?\xdb;\x0bD\x8a\xd1\xe2?\xdb\xb24\xf0U\xc7\xc3\xbf\xf3&\xd8b\xca:\xdd?w\xdcBF\xcc\x0b\xdb\xbflw\x99&\xa34\xd2\xbf\xeec\x12\xd14\xae\xd6?\xa3K\xab\xad\x7f\xf0\xe3\xbf6\xc8W\xc1\xe3\xa0\xf2?$]\x17FU\xbf\xfb?\x11\xf1\x06\xe2\x84\xb9\xe0?\x14\x9bB\xcf\x94,\x02@\x12?E\xf5\xf2\xfe\xe7?\x14$\xbb\xae}\xd2\t@\\\x0f\xe3\xcc\xb6\xa1\t@\xee&fO\xfe\x84\xfb\xbf\xd9\xafg\\\x0c[\xe6\xbfM\xc2t\x9d\xf1\xab\xf6?\x8b\xff\xf6\xed\xa8\x17\xfe\xbf9t\x07\x91\xe6\xd2\xf3\xbf\xad(\xe5\xbd\xba\xce\xe2?@\xbc.P\xa5\x03\xde\xbf\x9d\x02\x0e7\xaa\xb0\xdd\xbf\x18T\xb6\x8dI?\xe0?%\x89zX\xa5K\xf6\xbfQTt\x97\xe7@\xc9\xbfs\xd1*x^<\x9c\xbf\xa6\x1a\xb2\x87\xbb\xed\xbb?\xc9\xa8a\xe2\\3\xb1\xbf\x85 \x11\x85\x88.\xf0\xbf9\xe3\xfd\x83\x15\x91\xe2\xbfxj\xa8\xa3\xfb\xa3\xe7\xbf\t_E\xfaDh\xeb\xbfol\xc9*\x96O\xdd\xbf?\xb3\xe2\x10\x83O\xdd\xbf\x9b\xcb6\xf2T\x11\xaf\xbfq\x02`H\xe5\xa2\xdd?\xff\x0e\x9b\xcf\x93\xc9\xf1?8\xcb\xd7\xc6/\x7f\xf0?t}d\x97\xdb.\xe2\xbf\x14\xc8\xa6\xdf\xde\xa3\xf4\xbf\x1e\xc4>\xe2\xf0\xe0\xc0\xbfXL\x05{\xb7\xf8\xeb?+\x89D\x93\xd5\xeb\xec\xbfQ\xben\x97\x1ad\xef?\x16I\xccRAB\xea\xbf\xbb\x9cL\'q\x82\xc9\xbf\\\xc2\x0b\xa8\xd5K\xe9?\x01\x8a\x9a{\x05\x88\xd3?\x90\xaf\xe5Rc.\xb5\xbf<\xa9>\xef\xc6\xb9\xa7?\xff8m\x01\xaf\x96\x00@\xa8\xc3\xe6_%Z\xf7?\x99P\xb3X\xd4\xca\x06\xc0\xe9]Nk\xd1\xd2\xe8\xbf\xe1\xef\x18\xcc;\xb6\xc9?\xfb\xcc?h~A\xbf?\xf4V\x14\xfe{\xbe\xe6?\xd9\xd3a\x83:\xcb\xd6\xbf\xff\xdb\x11d\xa6[\xe6\xbfp\x00\xee\xf2c \xea\xbf\xb0\xd9\xba\xd8\xcfy\xfe\xbf@y1%Q\xbb\xfa\xbf\x90\xe5\x99\x82\x9c\x18\x94?\xd3\x06\xe5\xa2\x85\xf3\xea?\x08s!\x1a\xab\x8d\xf3\xbf\xcd\xf2\xdb\x9cR>\xf6?\xb3F\xd1O\xabD\xe3?|\x01i\xe9j\xa7\xe7?:9M/\xfe\xd6~\xbf\xd0{\xa2\x1b]`\xf3?O\x83\xf0T(\x12\xdb?g^Q\x063\xd7\xf1\xbf\x8fC\xfeZ\x88\x8a\xdd\xbf\xb4\r\xf66\x9b0\x00@\t\x1c\n\xe7\xa6\xae\xfc\xbfx\xff:\xc3VB\xec\xbf\x83\x9e\xa3\x1c\xd8\xd9\xe3?\xa7\x86n\x8f\xa4\xea\x05\xc0\x94\x02=\x07*\xe6\xf7\xbf\x7f\xdbm\xca\x7f|\x02\xc0\x9a\x85\x1e\x1f\x0c\x9ch\xa8\xf5\xbf\x92\x0b\x01vLz\xea\xbf#\xef\x92\tF\x9d\xb4\xbf\xd9\xd8g\x01.\x92\xea\xbfx_\x9fhK\x86\xe6?\xfbYrm\xfa\xc9\xb7?\t\x81\x08E\x9ac\xa4\xbf\xf2yL\xb4\x89\xdd\xfd\xbf=]<6\xd9\xef\xe5?E^\xde^n\x80\xf7\xbf\xa8\xe7|\xc1\x8fB\xf2?\xe7\xb0\x8f?\xa9\n\xd9\xbf\x8c\xacGI\xc3\xdf\xe6?\xc0\xbc\x08De\x89\xf5\xbf\xdeB&\xd3%]\xe2\xbf\xcd3\xf2,\x9ds\xf4?\x9f\xaeU\xfe\xf0X\xd8\xbf\x19\x96\xb9j\xb7^\xe9\xbf-\xe0\xc7\x8f\xc0J\xfd?\xd9\x05L7,\xe9\xee\xbf\xb8i\xc6\xd5Ab\x86\xbf\xad\xc9\xf2q"V\xed?\\h\xfb\xcf\xa3\xf2\xfb\xbfVLk \x9cF\xb2\xbf\x93\x01\xfe8.\x94\xe0?\xc7F1\xa7,$\xc1\xbfs\xe8@\x06\xba\x0e\n\xc0\x97\xf7\xd5\xb7k<\x17\xc0j\x9cO}"\xb0\x00\xc0\xac\xae\xc8\xb5\xce\xa2\xdc\xbf\xcdz\x076\xa3\x83\x94\xbf\x05\xc7\xcbe\xa9\xe3\xe3?\xa0Q2\xa2\xb50\xe6\xbfw.\x98y\x1d\x03\x02@}Y_e\x86K\xdd?\xf4\xc3\xa61$^\xe8?\x02s\xce/\x1bl\xf0\xbf\x13\x8bz\xce\xa9\xe0\xf7\xbf\n%o\xed,\n\x04@\xe7\xc7UiU\xca\xa1?\xf2\xef\xaf\xcf\x18Y\x00@\xd0{LH14\xe7\xbfG\x04\x8f\xf1?\xaf\xb6\t\x82_r\xb1\xbf\xa5V=\xe3\x82p\xf3\xbf\xebO;\x9e\xd2\xa1\xde\xbf<\x89\xf2\xa6\xf8\xa1\x14\xc0\xba\xdc\xdb\xcdJ\x1a\x15\xc0v%\x1dK\x14\xa7\xf6\xbf\x98\xd1\xac\xeb\x1b\xb4\xf7\xbf2\xb5\xc3\x14\xcd\xc7\x17?\x91\x9bZ\n>k\xc3\xbf\xd1\x90(\x05u\xc3\xe8?\xec\xe0=B]A\xe7?y\xfa\x8bp\x12\x1d\xef\xbfk\xcbv\x15[k\xf2\xbfJ\xb5\xed\x8a\xc0\xc4\xd6\xbf\x1b\xe1E\xca\x02\xf6\xee\xbf\xbe\xd8\xb0\x04\xdb\xfe\x05\xc0a,\xe2^\xe1>\xd5\xbf\xfbq\xa1\xf1H\xc7\xdb\xbf\x9e\x1c\x1fY\x81\xc7\x05\xc0\xfb\x04\xda\xa7-9\xf1\xbf~\xda\xd2F\x968\x14\xc02\x1b\x18\xdd\xd3\xa9\x19\xc0e\xb6\xc6\xd3\x1b\xed\x10\xc0\xb6\x02.\xe0\x96u\xd5\xbf\xb3i\xe5\x18\xaf\xa2\xfa\xbf\x95m8\xa84\x03\xe5\xbf\xa7o\xeeT\xbcK\x01@\xa3fz;m\xb3\xe6?\x06\x07\xbdeh\x0c\x04@\xb6\xcfy\xc5\xa8\xef\n@\xea\x82p:\xdb\xd8\xdd?\x88\x10\x95\xee\xcf<\xd7?`\xec\x99\x11\x16\x13\x00\xc0]\x93\xf4\x84\x1a/\xcd\xbfV\xd5q\xbb\xa4P\xfe?\xfd\xc8 \xc8\x89:\xd0?;\x92\xf1\xc3\t.\xdf?|\xd0\x01\x1a\xf1Q\xd1\xbf\xbf^f9\xb6e\xb7?\xb4q\xfdyRC\xf5\xbfQ\x16\x8fK\xc2\x93\xc1?\xf4\x00\x00\xf1\xa0\x93\xda\xbf#\x95\xb2\x13n\xfc\xe7\xbfi\xeb\xc5\xa3\xea\xf6\xf1?\x11\x07\xcb@\xfd\x8d\xe7\xbf\xe6\x8cR\xb9PM\xfb\xbfY\x9c`\x98\xdfN\xfc\xbf\xb1\x18g\xc2\xd9\n\x08\xc0\xf8\xf3y\x15\xefb\xf3\xbf\xd2\x90\'\xcfR\x8d\x15\xc0\xfdE\x8b^pB\x0b\xc0\xfd\xc8\xa8\x15\t\n\x06\xc0\x8f\xf5|v\xb3>\xdf\xbf\x9b\x1f\xbf\x89C\xd8\xfd\xbf\x0c\x0bL:\xf2\x041?\xe1\xad\xdf\xc4C\xc6\xf0\xbfd\x017\xae\xf8\xc4\xcf?\x91h\x04Zw\x99\xff?s\x0e\'\'\xb9\x8f\r@g\x87\x88 \x93n\x08@@\xdfIm\x86\xc4\xd1\xbfk\x15\xc3\x08\x04\xb3\xfd?\xcd\x94\xc0\x99\x12)\xeb?\xa5\xe2\xb4Me\xbd\xee\xbf\xf8\x08\x04\xba\x06\xb3\xf5\xbf\xdcq\x9d\x8c|g\xf2\xbf9\x06\xb1Ia\xc4\xbb\xbfD]\xe7 ]\xc0\xe0\xbf\x0c\xa2Z\xe6\xd6T\xc3?\xfd,\xd5\xf7\xfc"\xf6\xbf\xd6x\xdd\x8c^l\xed\xbfN`\x0f\x03z\xc9\x03\xc0J"\xae\xa9c\x02\xde?#\xaa\xbcc\xc5\xc3\xd0\xbf\xd4u\x9eV9x\xf0\xbfY\xcb\x9a\xac\x8c\x0b\x12\xc0\xc4\xd9\xea\x1b7o\x0e\xc0.\x8d\xfd\x9clE\xea\xbf?*\x8f\xcd\x86\xf2\x13\xc0R\x9c2\xf8\x9a\xf7\x06\xc0A\xe6\x1e\xaf\xa0\xd3\xfe\xbf\x89OP\xb5\x0fb\x06\xc0=\xf9\x8bBy\xa9\x00\xc0>?9\xa8\x1a\xe7\x06\xc0\xfa\xf7\xe0\xa8\x8e\xe1\t@\xc7\x02zH\xe2u\xb2\xbf\\\xd1+\x0cS\x1f\x08@4\xce\xb4D\xf6s\x13@\xad\x18\x8e\x15eM\x05@\xf5\xa3>w4\x97\xf7?\xf3I\xb6\x96?\x1f\xe2?\xdc#6_\xbc\xfb\xbb?h6\xc7\x8d\xd8\xec\xbf\xbf\x8f\xf4\xc4\xd2\xb4\xe7\xf7?\xfc\xaaq\xc8h\x84\xef?;O,\xa0\xf6;\x02@2\xb1 \xf6\xfe[\xf9?\xa0WC\x06\xdf\xf7\n@\xe6\x10\x11rv\xaa\xfe?j7;Q\xe6\xf2\xf6\xbf]\x80:8\x80\xbf\xeb?G\x1c\xdf8]\xa0\xd3\xbf\xac\x02l\xd6"\x83\xdd\xbfj\xd5@\x97\x8c\x7f\x00\xc0\xad_\xf4y\xd7\xd9\xec\xbf\xaa\x03D\xdb\'h\xe6\xbfo\x0eu\x9e\x96\xe9\x08\xc0\xef\xb4V\x041\x9f\xf9\xbf\x95!\xf5\xf8\xa7g\x07\xc0Z{\xc3kj3\xf1?:\x11\x812d\x9e\xea\xbfa\xdcM\xd2\xfd\xcf\xf6?\xf1\xc1\x92\x87\xb7\xfb\xd4\xbf\xfd\xfajZ\xb8N\xc3?R\x19U\x0fT\x01\xf0?\x19\xa1\xa2\x0f\x07\xde\x03@B\x05D\x9a\x1e\x1f\x04@\x08o\x94(c\x94\xf1?\xe0\xf3\xf8pP\x1e\xd6?r\xcb"\xab\xder\xdb\xbf\xd5M\x00<\xe7\x89\xec\xbf\x04\xbd7\x86\xbc\x96\xef\xbf\xbe\xa7|\xab%\x9f\xd2?\x8bJ\xf2`\xcf\xea\x03@\xc9C\x075]{\x0b@d\xb8,\xabP\xb3\x14@A\xdc7\x8bn\xc9\x13@\x92h\x92?K\x1a\x07@}@\xd13$\xd7\xe1?\x85\xc8\xf0us&\xeb\xbf\x0f\tO\xf7\xaa1\xff\xbf\xf5.q\xdd+\xa6\x04\xc0=N\xd2\xdf\xf6\xbb\xf9\xbf\xf0e\x12,\xdb\xe1\xf8\xbf\x95w\xc5\xb1z\xeb\xf6\xbf_\x9a\x95g\x06\xba\x02\xc0\xdd\x93\x1bD\x86\xba\xe8?\xd6\n\xb0M#\xd9\xf6\xbf\x8f\xfc\x1c\x9b\xcd\xef\xf3?\xd36\xc4\r\x10c\xbc\xbfrAw\x1a\xe0\xd0\xbc?6\x96\xb3\x8d\xadg\xfa\xbf\xf0\x1b\xb9\x8f\xe4\x07\xbe\xbf\xcb\xa4\xc9}\x9f\xa2\x0b@S\xc3:@:\xee\x06@\xc1\n\xb0\xce1I\xeb?\x85!t\xbfb\xb2\xf0?\x03\x8d\x8f\x8c\xdc\xac\xe4?\x8bM\x9fW\xbao\xc8\xbf0vv\xcc\x05$\xc2\xbfe\xe1w\x10SQ\xf7?\xa5\xae\x08\x94ij\x00@\xad-\x17\xc1=A\x00@\xa7,f\xc1T\x19\x03@)\'n\x9dI\xe1\x0c@\x00\xba<&\xaa\xc8\x14@\xef\xc5Vv\xd1v\x14@\x89\xc8\x12\x01wT\xca?\x92S\x97\x17:\\\x0b\xc0\xbc\x1ffn\xeb\xb4\xf8\xbftu\xb9=\xc9\xef\t\xc0\xee\x18\xea\x93\xb6\x05\x05\xc0\x98\xfbb\xa6\xfcn\xe4\xbf\x92\x84\x06\xfc)\xbd\xc7?d6\xddb0\xd8\xf3?b0?O}y\xd5?\xd5\\\x07C\x9f\xf7\xf8?\x84\r\x98\xcf\x8e+\xff\xbf\x11\xd8z\xcc\x12\xc0\xf1?q>\x1cmk?\xaf?-\x8d\xfe\xd3\x8a\xdc\xd0?#lIH\x12 \x12@\xfa\xeb`\xdd\x062\x1a@\x8e\x014\x9f\xa2R\x04@\\\xa5\xb2\x1c\xb7a\x02@\x835\xb9G\xfa\x12\xd9\xbf\xf6`\xc2Ch\x84\xb5?\xde=\x0e\xea\x89\xab\xfa?)\r\xd3\xaej\x08\xd8\xbf\xe6\x19\xf5\n\xabI\xcc\xbf\x12y}\x975Z\xf7\xbf\xd3`M$>%\xe4?\xf3\x17\x7f\x06*\xb8\xf6?\xba$A\xf7\xa9\xb2\x0b@\x1f;\xe7\x08\xfa\xe9\x17@\xdb\xa2\x9b\xee\xb0\xf9\x1b@7r,\'LL\x0c@5\xbf}\x9e;\x95\x04@\xdc\xff\xdd\xc1\'\x98\xbb\xbf\xfc"p<\xf3\xb7\xd8?%\xd6\xf3O\x9bK\x00@\x9b\x02r\xed**\xf7?vn\x90\x05\x89\x16\xd5\xbf\xacM\xadi{\x87\xe3?&\xbdc\x127}\xf1?0\xdb\x18bW\xf1\xf3\xbfi\x97c\xa3\xdd\x15\xdf\xbfs\x0b\xe5\xc0\x8e\xba\xcb\xbf\xd7\xbc`\x990\x8e\xf2\xbfV\x93\xb8\x7f\\\xbd\x15@$\x89\x07\xe7\xf9-\x14@J\xf7\xe5\xe83v\xf4?\xb6\xc7\x0f.\xe7\xb7\xf4?7R~\xb3g\xe4\xb5?\x05d\xd3\x1c6\xcf\xea\xbfd\x98\x04\xb6\x8a\xdc\xe3?\xff\xfdw\xdf\xf1\xc2\xf5\xbfk\xa9\x04\xf7\xc4!\xf4?(r\xf2\x16\x90Q\xf6?E\xd6/\xd3\x17&\xfd\xbfFc\x13\x1e\x9d[\xf6?\x02V(6\xb1R\x07\xc0u\xca\x10\xa5\x05,\xc2?\x15:\x8c\n\x00\xe3\x1e@\xf5\xb4\xb8\xa2\x0b\x88\x10@\xbd\xe7H\x8eRl\x0e@\xac\x18L\x0f^(\x05@`g\x7f(\xeeu\xe1\xbff\x15\xf0\xc5\x94\x8c\xe3\xbf\xc1\xdc\x0bcw\xc9\xea?\xfd\x15\xb7\x07\x04\xf2\xd9?\xc0\xfbk\xd2\xb6\x8d\xd8?\xf5\xbd\x9c\t_|\xe2\xbf\r\xb0loQ\xbb\xe0?\xc1\x10\xf4\x15\xbb\x0e\xd7\xbf\xfbe1g\x8d\xe1\xca?V\x1b\xccr\xee+\xdb?\x1b\xcd\xd5\xeb\xab[\r@\xda\x8aWZ\xb5(\x00@I\x04\x06\xef\xc9\x86\xed\xbf \x106\xaa\xba\x06\xca\xbf\xf0k\x0c\x10\xfc]\xd9\xbf0t{\xd9\xe3\xe2\xee\xbf\x07\xc0j\x87\x9c\x00\xd2\xbf_\xdcd\xba\xd9\x9c\xe0\xbf\x8b}9\xe3\xfa\x9f\xc9?\x89;6\xf3e\xc1\xf8\xbf\xd2\x92\x91\xfe\x9f\xdd\x00\xc0(Yj\xe1\xbb8\xf0?y\xc37/:N\x80?\x91P\xa5_\xa0\xf6\xd9?6Q+\xceO\xa8\xfb\xbfsu\x07\xc8\xbez\x03@\xfbir\xca;\xa7\x0f@\x1a\x1c\xcd\x97\t\xdf\xe3?\xf4\x94\x87\x8fW|\x02@\x00\xe9\xe3\x15-\x85\x01\xc0Q\x1f\xbc\xc0\x1ad\xf9?\xe0\x85\xc3x-\x87\xed\xbf\xe7\xe9\x8a\xc28\x84\xe9\xbf\xfe_\xfe\xbf\xb0\xc6\x02\xc0&\x99-\xe9\xc3\x81\xf2?\x01\x97\xb6\xbdM\x91\xe2?\'Y\x100\xd6K\x05@\xcf\x11A?\x1eS\xd2?X\xa0\xe0\x9d?P\xf8?\x03\xc4E\xb9\xae\xf7\xe2?\xf0+LPP\x95\xe6\xbf\x14\xabd/Ha\xee?\xcc\xb2&)D\x14\xf2\xbf>\x8ap\xc4\x03\xc2\xe4\xbfNlW~:\xa7\xde?\xf05\x11I\x072\xf1?\xeb\xe5\xa4\xe6\x8a\xcd\x90?\x81A\x8e!\xac\x1e\xfa?9\xaa\xc6=jD\xde\xbf\x03F\xa1\x1d$\xc1\xfa?\xfc\xfbx\xe4~p\xe0\xbf\xa6Q\xb6U\x8d\xc3\xe1\xbfZ\x98|\xaca\xa4\x96?H6\xb11\xe9\xba\xf3?\xdb\x944z\xa8\xd0\xf7?\xfb\xf1\x05h\xca\x07\t@\xaa\x1d\x1f\x7f\xc99\xe5\xbf\xe8h\xb2`\x8d\xa4\xe9?G\xce\xcc\x89\xbc\x19\x03@5\x13\xa6\xd185\xe5\xbfv\xc6\xe2\xda\x95\xd6\xc7\xbf\x86L\xe1\xec\xfa_\xda?2\xbf\x9b\x1f1\xcb\xd9?\xfey\x02ZQ\xe9\xe7?(\x13\x04\xb7\xe3\xe2\xd6?\xb8&\x91\xd6$t\xee?M\x14?Gg\x96\x03@>\xb4\x8by]R\xcb\xbf\x0ck\x16\xb7j\xd4\xee\xbf\xde\x9e\xdf\xf0&\xa5\xe6\xbfW\x05G&\xc4\x8f\xe6?\x02B\x88\xf0\xe2G\xc0?i0mE\xc1B\xef?\xf6\xfb\xcf\xdb6\xdc\xdb?i\xd5\xd2\xb1\xb2D\xe8\xbf\xf3x\xa4\xbd\xb0\x82\xe8?\x8d\xc5\x05[\x0c@\xf3\xbf\x0b7\x0f\xcb\xa4-\xe0?c\xfc\xda\x84=:\xf8\xbf6\x0c\x18G\xf0x\x06@\x8dZU\x16_\n\xb9\xbf\xd7\x91\xd6\x1a2\\\xe9?\x05\xce\x9bhT\xc4\x02@/\xfc\xe9\x81\xc4\xc9\xd5\xbf\x1d\xdb\xb4L\x92\x0e\xed\xbf\xce\'\x9e\xad\xea\xa7\xff\xbf\xb7E\xc1\xcd\xa6\xb2\xd2\xbf\xce&6\xd5\x1a1\x90?\xec(\xcb\xdfK\xb0\xa9\xbf0>+e\x8e\x8a\xf8?\xd9\xaa\xb6e\x8d\xba\xe2?\x88\x9a\xf8}\x02\xf4\xea\xbf\x9f\x96\xdb\x8e%\xf5\xf2?\x03M\xeb\xd8\xd2_\xfe?\x03\x0b.\xe0J\xcc\xff?\xf7\xbe\x82@BX\xec?\xae^\x0f\xf58\x93\xe2?\x12-\xa3R\xcc|\xea\xbfi;j\xe6\xf3\x98\xef\xbf7\xfcq\x93\x91\x99\xd7?\xdc\xee\x18\xf7\xc5\xa5\xf5?\xf1\x9b\'\x08\xf8\xb4\xe7\xbf\x8e"k\x93\xeb9\xf6\xbfU\x9e=?\xf9G\xfe??\xf3\xf0D\xd0\x91\xc7?#3Uz\x95D\xc4?8\x84\x9el\x13\x12\xf2?I\x16\x83b\x8a\xe0\x81?_\xb0GX\xfc\x07\xdb\xbf\xc9\\\x04\x05\xc8Y\xd6\xbf\x03#\xe2\xe5-c\xe1?\xfe\xffS&\x945\x05@\xbd\x9e\xb6\xdb\x8c\xd8\xf2?\xeb\x0b\xd0\xe5\xac\xbf\xf0\xbf\x98\x1462Nv\xc1\xbfz3\xf2\x96\xde\x88\xc0?]_#S8\x07\xf0?\x960\xad5\xf2u\xe7\xbfV\xbe\xf6\xd3\x17\xb7\x08@(\x08O\x8f\xfex\xce\xbfL\xc3\xfa\x84\t\xe2\xfe?;"\xe7\x92\x16\xfd\x02@+\x88ro\x7f\x9a\xf5?\x12\xc4\xc4l\xea\xd7\xf4?\xfbn\x19l\xde+\xef\xbf\x9d\xe5\xc9\xae\xac\x08\xe3\xbf\xa8\xca\xeb\x87\x11\xdc\xf3\xbf\xfb\xdfz8\x92\xa3\xd5?>\xcedm\xc1N\xda\xbf\x86\xbe\xc8\x12\x82\x89\xf0\xbf\x169\x7f>0m\xe6\xbf\'\x90\xd2\x9fk\xcd\xed\xbf}\x92\x1d\xd3\xd1\xde\xd4?\x1b\x85\x84\x96\x03H\x04@\xf0KE\xe6\xafz\xf2\xbf5\xf4W\x987\xf6\xf7?/\x8d\xcah{\x06\xf2?Vq\xf2w!\x90\xee?\x05\xfas!n\x07\xe3?\xec\x936\xc5\xa4%\xe4\xbff\xec\x11(\x1c\xbf\xb2\xbf\x10Vv\x0b\x0c\xa4\xf6\xbf\x95c\xf1x\xb1:\xe9?d\xa9\x08)\xa1*\x04\xc0"!yi#$\xdf\xbf\t\xad\x00\xe1\xeb\xfc\xf9?^\x9eP\x95\x00\xe9\xf8?\x83\x1d2l\xae\xb8\x06@\xce\xa3\xc6\xed\x01\xbb\x05@V\x11\xeays/\x02@\xcf\xf0,\t#;\xee?]\xaf\xcfO(;\xeb?V\x1c\xbe\x8a\xca\xb0\xfb\xbf\xb1\x8eSo\xcaa\xd1\xbf\xb8\xf11\xd4%\xbd\xdf\xbf\xb9|\x05\xd8f\xc4\xf0?"1\xfdu\xcam\xe3\xbf\xe1\x07VG\xea\x91\xf7\xbf\x98\xbb\x13E\xa9\xd2\xfb\xbf\xed\x00@\xe3^\x86\xf1\xbf\xcd\xe0\x8f\xca\xbf}\xf9\xbf\xc5\xf9,\xe0\xf2{\xd6\xbf\x82\xb1D\x12\t&\x00\xc0&\x12R}C\xa1\xe8\xbf=Y\x19\xb6P\x9c\x01\xc0e\x03&\x9e3!\xdb\xbf\x92\xf3\x87\x88\xc1\x15\xee?{\xe6g\x85\xb7A\xf8?\x88.8\x8c\x97\xa1\x00@2\xe5\xbc\xba\x10\xab\xd2\xbf\xde\xca\x00f\xb0)\x02\xc0@\xcc\xfc\xbf\xe9f\xfa\xbf\xc7*\x8c\xe6u\xf3\xf1?\xbeWl\xd1\x0b\x02\xf3\xbf\xd1zi\xfaE-\xf2\xbf\x17\xc9"\xf2\x16t\xc4\xbf?7\xb0\x11\xafC\x03@\xbav\xb7B\xb38\xf7\xbfr\xd5P\x0f>g\xd3\xbf\xd1\xa8Z\xc4\xc4U\xf0?\xb3\xe4I\xda2x\xeb?\xf2\x9d|Yh\xe4\xca?W\xe0/K\xca\xbe\xe2\xbfWzO[jV\xda?\xb0\xb8r\xe7\x1d\x95\xc4\xbf\xfd%\xa0\xf2\x9b\x91\xe6\xbff\\\xa4\xb1\xee\n\xf3\xbf\xe3\x05;\xc5\x11\x17\xea?\xcb\xc3\xba\xcb\x94k\xda?\x86\x07\xb9\xc0X\xac\xd3?T\xd5S:\xa7\x86\xe0\xbf6\x856T\x93g\xf7\xbf\xe8\xb8\xdek@\x8a\xc8\xbf\x9e\xd6\xadMR9\xc8?\x17\xbf\x992\xafL\xec\xbf\x01\xdf\xf1\x8fn\xac\xf3\xbf\x18\xd9_\xdab&\xe8\xbf\x08}\xa6M]&\x0b@\xd3\xd6G\x06\xc4J\x07@\xf5\x89\xda\xe6\x8d\xc3\xd6?\xec\xab\x9b\x88bW\xd7?\x80\x16^\xe1\xf4\xc9\xee\xbf\xcf\xf1aIa\x98\xe6?p\xdc/\xf8\xb8\x1a\xd8?Y&y\x9f$9\xe3\xbf\x10\x1e\x05$2B\xe6\xbf\xa1\x86\'6\x8e\\\x00\xc0\x89\xad\xcd\x8a\xdb\x81\xf2\xbf\xd8\xff\x94\x84\x9b\x85\xb7\xbfc\x01\x1f\x97\xe7\xcd\xe3\xbfE\xe0j\xd2\xe7?\xde\xbf\x10\xb2?\x89:\x95\xf3\xbf\xe1\xbclY\xc1\xd9\xd4\xbf?c\xbb\xb7\xa0\x8f\xdb?h\x1ea\xb3\x8b\xfa\xe6?\xba0\xf7\xd0a2\xd3?\xbai\xf6sJ\xd6\xf0?\xfe\x97\xa8\xb8\'o\xcb?\xde\xab\xb8X&\xb0\xe4\xbf\x02hSh8<\xe6?I#\xa8\xfe\xe0t\xfb?\xa5L\\Q\xd7\xe3\xed?\xb8C\xf3WH4\xf4?{c\x84\x14\x97U\x07@\xc8U\xc9\xadb_\x02@\xb3\x8a\xb2\x05];\x05@\xe1\xa7b\x08\xd9q\xf2?7E\xcd\x90*\x88\x00@\x94\xac\xfe\x9f\xb4\x13\xa1\xbf\x19\x05-\x90\xe4\x03\xee?w\x054\x91\xce\x98\x9e?\x8e>\xcf\xd7\xdc\xb0\xe0?1{\x80\x92\'\xb3\xc8?[Z\xf0\xf6\xa7W\xd3?\xd3[p\xae\xbc\xfd\xb2\xbf\xf6\x80\rJ\x8d{\xc5\xbfs\x1e\xe1\x16sK\xbb\xbfL!\x10\xf0\xb8r\xd5\xbf,Q\x86\xd2\xf4\xd5\xd4\xbf\x02\x08\xd4F\x84\xc1\xe8?\xcd.\xc6\xa8\xa5\x17\xd8\xbfa\x896\x81\xb4\xd1\xcb?"4\x98g*\x0c\xc0\xbf\xfd\xc3o\x84\x15(\xe8?Q\x04\x13Xa\x90\xf3\xbf[\x18\xc8\xf6U\xd1\xe5\xbf\xd6;yS\xf1\x86\xd9?\x04\x99\xac"/\x1c\xe1\xbf\xb1_qnc\x8d\xe3?\xdc\x11\xa4\xb3\xc4\xa4\xe2?\x81\xda\x8eG\xd2\xcf\xd0?\x83n+-\x86\xa4\xd6\xbfb\xaf\x880\x871\xd7?\x1d\x8f\xaa\xac\xa6\x1b\xe2\xbf1\xa5\xee-\xe1\xe2\xe7?\x05\xd4\n\x00\xad\xa6\xe1\xbf\xd8\xbeq\x92\x88*\xc4\xbf\x02o@\xaa\xcf\xd0\xc2\xbf4\na\x8e\x90=\xa6?d\x18\xb9\xfc\x10i\xed\xbf\xe8D\x17\xca\x04\x06\xe3\xbf\rJ\xc0\xc9\xff\x8c\xfb\xbfq\x95pV\x01\x8e\xdd?\xb7\xf2\xdd\xb6{5\x02@\xfc\x08}\x98#{\xe4\xbf\x0b.\xbc(\xe5X\xca?\x1a\x93\xc4\xdb9\xe3\xc2\xbf/g\x18\x92\xea\xa1\xff\xbf\xc89\xed\xb9\xf7\xbf\xd9?\xdc\xd9\xf2Z\x95\x87\xd8?\x06\x8c)\xe1\xb7\xe0\xe3\xbfI\xba\x1d\x0e\xcbI\xc4\xbf\xf2N\xa1iLF\xf2\xbf\xff\x04\xc6qq1\xf3\xbf\xe7b\x8d\x95\xee\xf3\xea?E\xb7\xf3\xb8\xc7\xc0\xce?ag\x1dQ{\xb4\xf8\xbf\xce\xbeB\xae\xd3E\xc0?_\xddq\x12l\xac\xc9?\xc5X\\*~\r\x85\xbf>\x8e\xda\xb0\xe1\x18\xa3?\r\x01\x8e\xd3\xd8U\xb8?\xa6\x97zO\x1aX\xe1?s\t\xec\xf5o\x12\xc6\xbfu\x99y\xf8\xd7\x13\xbf?DX\x82\xf2H\xb3\xf7?\xd8\xb2\xf3\x8c-\xe0\x94?\x9d\x0f\xffk\xf7\xcb\xda?\xd2\x8bWp\xc3\x05\xd4\xbf\xa0\'DL&\xb9\xcb\xbf$%@\xff\xce%\xf5?\xdc\xc9h\xbc\x920\xf0\xbf\xf5U\xeb\xbc\x11Q\xee\xbf\xc45\xdd\x91+a\xc6?\xb1\xd5s\x88\xa7\xbd\xc9\xbf2.\xf5\xd9hX\xa5\xbf\xa8\xf5 )\x01\xf8\xf0?\x8e\x0c1\x1f\x8e\x7f\xf4\xbf\x14\x9d\xaeG<\xcc\xa2\xbf\xa6$\xe4\xe8K\xad\xe0?b*X\x0bG\x08\xc3?\xfe/\xf5Z\xd9\xc1\xef\xbf+\xbe\x80\x15zC\xe2?\xebo\x00\xa0\xbex\xe6\xbfX=\xf5\x85\xc9 \xdb?v\x07\xddxv\xb2\xe0?\x89\x88w\xac8\xa0\xe6\xbfy\x8bK\x8aG\x1a\xf6\xbf7\xadp\x8b\xf0\xb2\xe2\xbfq1e\x05i\xad\xcb\xbfW\xa8\xd8\x03\x9c\x9b\xed\xbfY77\xecZ(\xe3?\x88`*\xd8\xf0\x8f\xd6?i\x91\xed^\xe6\xb7\xf1\xbf\xa3p\x10\xa6\xe6\xbe\xbf\xbf\x8f{\xad\x19\xf7C\xf4\xbf\xdf\xba\xc2\xf9MN\xdb\xbft\xbf~k\xe3f\xd6\xbf5<\x97(\x0cW\xd6\xbf\xee\x87\xf2\xb9`\xd2\xb7?.\xf1+t\x9fB\xb5\xbf\x0fbe.\xe1\xf9\xc0?\x1a$X.\xad\xbd\xd9\xbf9K\xcc]\xbe+\xd7?\xac\xda\x91\xde\xb2\xbe\xd6\xbfZ\x84\x90<\x80Y\xf7?\x10x}\xbb\xd7\xb2\xb2?\xd2|\n\x0b\xd3\xc2\xf0?\x90\xf1\xd2N-j\xe2\xbf$\xbd\t\xaaZ?\xd8?~\x9b\x8cE\xe9\x84\xca\xbfEA\xbc\xc2@\x01\xe4?\xdc(4\x08;F\xf3\xbf\xe2\xd3\xda\x02\xb1\xe1\xd5?\x1b\xf9\x07\xe92\x80\xf1?\x1a\t\x98A\x11\xac\xfd\xbf\xc6\r\xde\xfc\xd1\x14\xc0\xbf\xd0*\x89T\x0fy\xdd\xbf\x7f~n\x9d\x13\\\xe2?\xcf\x08\xc8!\xe0@\x9f\xbf\xec\x93\xf1N\xc1)\xfa\xbfGjSug\xf8\xb8?id\xc3\x0f\x19\xeb\xc2\xbfD\x1f\xcd\xc7\xe7\x1d\xb3\xbf\xec\xd2M[\xb9B\xc4\xbf\xcek\x0e\x94\xa1h\xbf\xbf%\xd1\xcd6\xdcD\xef\xbf\xa6!\x88d_\xdc\xbc?\x13\xf3t\xce\xba\x9eF\xbfT>\xd9l\xbdp\xf1?\x82\xf3 \xee\xcbc\xff\xbf\xd7H\xb0,&,\xb8?\x0c\xce.\xe9\xd4\n\x8f\xbf\xc0\xa5\xcd~\x1d\x07\xe3\xbf"yX\xa9\xa2\x17\xe8\xbf\\\xbf\x0f\x9a>|\xfb\xbf\x95\xb9\x87\t\x88\xad\xe4\xbfC\x9e4\xaf\xe8\x8e\xe0?u0{\n\xf6\xfd\xef\xbf\x03\x1f\xaaa%\xc4\xf6?~\x9f4\xec=\xf9\xb2?1\x89\x9dCA\xbd\xed?\x98\xe6\xc1\xca\xb1\xb1\xf1?0u\x96\x90\xd7v\xfc?\xaa\x1fx\xc5\x05z\xe3?6\xad\xa1\x1e;\xbe\xb7?\xf7HDW\x19-\xea?\x0e\xf3a\x92m\xd9\xff?\x14\x13]\x0e\x82>\xf1?\x81\xfb|[g\xf3\xa4?\tn>\x81\xb2!\xdf\xbfc\xc5\x81z\xec\xd9\xee\xbf\x93\xb0\x87\x144\xc3\xf8?\x06l\x04\xaf2-\xba?\xe9\xf4Y\xb3\x12\x06\xdc\xbfm\x95\xbf-2<\xfc\xbfh\x82\xe0M\xe7\x1e\xf6\xbf\xae\x1a\x957\x988\xba\xbf\xf9\x85\x7f\xfdjo\xca\xbf/<\x9a(w\xf3\xa9\xbf\xdd\xbb\xd3\xdb8=\xc1?\xca\x9eDF\x0e\x81\xcf\xbf\x0b@\xb8\xbe\x17\x7f\xc8?\xf5\x7f1\x91\x9c\x95\xb8\xbf\xd6\xf3K]~\xe5\xe1?i\x1b\x11\x8c~\x84\xe9\xbf\xca\xe3)\xc1\x87\x03\xf7?*\x02\xfe\xed\x886\xf7?\x15\xab\xe5\xbe5%\xfa?\x1d\x81\x00/\x80k\xd8\xbf\x91\xe1\x03\xf4)\x8f\x04@t\x13\xe8V\r\xe0\x00@\xcbp\x92$\xb0B\xf2?U\xc6\xd0/\xa9\xf6\xdc?\x81%\x8a5\xb7\x99\xf8?*\x1aL\xfap\x9e\xff?\xc3\x9dO\x0e\x06:\xe9?5L\xf3/g\xcb\xd3?Q\xafs\xe3\x89\xf0\xf5\xbf\xd4\xb8\x82\xec\x1c\xd3\xf7\xbf\xa7-\x8bg\x9f\xed\xca\xbf\x01_\xef\x82\xe2\r\xf6?\x96H\xee\x0f\xf3Q\xf1?s\xe8H\x820;\xd3\xbf\xfd\x1d\xe2\xd6\xfcw\xe0\xbf\x89\xd9\x1e\xc0\x7f\x03\xcc?[\x8d\x80\xdbaz\xeb\xbf\xe2\xaf\xbadZO\xe7?V\xa9\xfb\xdf\xf8\x87\xd8\xbf\xf3.\xf9\xe0\x83\xa6\xf2?\x06^ik\xa1<\xe8\xbf5\x01\xc6\xbc\xf0+a?h\xe1 \xb2Y\x7f\xf0\xbfP\xa3\x06TW9\xf1?\xd3\x12CP\x172\xea?\xc1\x13\x15-K\x88\xf0?\xb5\xb0\x8em\xc2\x8b\xc2?xw%o2\x98\xeb\xbf\xe6\x8e\xa1\xa3e\xa1\xf5?){^\x99\xdf\xd2\x18\xc0\x0f\x9e\xb9\x02f\t\xf5\xbf\xf4\r\xc9\xf9|\xfd\xec?\xb1\xdcR\t\xa8E\xef?\xb3\x08\xb6-+\xce\xf3?4\x11\x05;1\xcc\xe3?\xc9=C\xa8%\x86\xe3\xbf\x89\xdb\x82\xa7\x1f<\x07\xc0\xe5\x1c\x8b\xd9i\xeb\xd7?\x82:|\\\xb9\xb2\xe3?=5\xda\x98\xeb\xba\xce?\xf9\x95\xe9\xb9\xc5\xbe\xd6\xbf@?/\x92x\x0b\xcc\xbf\xcf\x99eS\xb6\x91\xd0?F\xc7\xd0\xca\xa0\x87\xeb\xbf\x06@\xac\xd4\x11Q\xf6\xbf\xd9&t{ao\xbb?\x96\xcd\x10\x9b\x15\x9b\xeb?\xe9d\x81\xf0\x15r\xe0\xbf]\x94\xe3\xf6G\xa6\xd3?\r\x08\xea\x96LS\xf6?\x16q\xc1\xf2\xa9\xef\xd9\xbf\xa4J\x8e\xdfK\xb5\x03@\xac\xcd\x9a\xb5B\x8f\xf4?\x87\xf8\x7f\xf3;F\x10\xc0a\xb2\r\x84\x1f\xc9\x0b\xc0\xb4U\xef\xcd\xadD\x07\xc0\xa4\x1e\x9c\x14\x97\xd5\xfd\xbfc:\x00\xdfD\xe6\x06\xc0\xc2H\xca\x93\xc0\xd8\x10\xc0\xbeO-l\x88/\x0f\xc0\xe3\xd1=L.\xec\x11\xc0\n\xa0\x14l&\xb1\x0b\xc0\xfb\x1e^Gy_\x12\xc0\xcb\xf1\xd8\xa4\xf1\x92\x04\xc0Y\xfa\x14\x9e`\xd1\xcf?\x89\xb1,\x13\xfe;\xf0\xbf\xba\xae\x84C\x8d\x93\xf0?\x85}\xf3\x93\xfb\xe8\x12@\x02\x86a6\xf8\x1e\xf7?|\\\x81\x19Z\xaf\xe7?\xbf&T6\xf8\xf9\xc3\xbf.\xb2z_\xd7\xe2\xf0\xbf\xe8FI\xcd?\x95\xe0\xbfa\xffY\xb1\xde\xef\xe2\xbf\xcac^\x9d\x863\xf6?\xb2\xb3R\x14\xf7:\xc8\xbfw\x11U\xec\xa5r\xf8\xbf,S\x0cem\x16\x03@(\xbf\xa9\xa4\x90:\xe6\xbf\x85L\x88\xf5br\xd2?\xdcF\xe7M%\xfd\xdc?Lzi\x9a\xb5k\xf9\xbf\xd6\xbf\xee?L\xee\x00\xc0l\x18\xe0\xc2\xea\xbb\xf8\xbf\xf6`\xc4y\xbe\xe7\x0e\xc0\xcc\x0e[\'\x05X\x0c\xc0\x07\xd3~\x12\x92\x15\x17\xc0\x8c\xe1\x1f\x8d\x0f\xd2\x0e\xc0\xca\xe0\xbaWh\xaf\x12\xc0G?@\x02E\xd0\xfa\xbfE\xb4\xc1\x96g\x88\x00\xc0b\x8b\xe6\x89\xfe2\xe4\xbft\xec\xea`\xcf_\x14\xc0P\xe6\xe9\x8e}]\xe3\xbf\x9a.X\x92L}\x9e?C\xd5\xf4~\xaa\x83\x8f?2\x93@W\x0e\xec\x01@\x9c]\xaa<\xa9\t\x06@Ccs\x88\xe1.\xf5?\xaa\x0c\xcc\xe8IQ\xf4?\x14Oe\xfb\xd7\x9f\xe1\xbf\'\xc3Ai\xf3r\xd6?\xd2\x9f\tJ]\xba\xdf?Ge\xcc\x10\x93m\xcf?\xae"\xb4\xa465\xe2\xbf\x93\x1d\xc2{\xca\xec\xf7?\xd4\xb5\xf1\x1f0g\xd6\xbf\xe8}t#\x84\xfe\xd2?\xc08\x89\x1cp\x89\xf6\xbf\xb0\xeb\xc3\xd6\xbdt\xda\xbf/\xe2\xb0\x04\xc52\xd0?q\rgNc\n\x04\xc0r\xf7\ti\x99S\xfa\xbfQ\x1f&\xb5\xf5\x84\xf5\xbf\xa74H\xf1@\xed\x13\xc0\xd8\x89cs\xc2\x81\xd3\xbf\xbc\x84\xea;\x16\x80\x18\xc01\xaa\x0b\x10\xe2n\xe9\xbf\xf4\x9c\xec\x99\xf1\r\x03\xc0F\xd4\x00[\\\xf6\xf6\xbf\x1c\xe8\xb0z\x80!\xf5\xbf\'\x11j\xa8\xe2l\xa0?R\x99\xc6\x11\x1d,\xb9\xbf\xa4\xf6\x94V\xa3q\xd3?\xd3\x11v\xbb\xc6Q\xf2?1\xfa\x92f\'z\x02@\xab\x14r\x7f\x90(\xea?\xd01\xbb\x1b\xd8\xc9\xe0\xbf\x83\xf6\xa3F\x92\xbd\xbc\xbf\xa1\xbf|\x87.\x9a\xd4\xbfn\x12a\xda\xb0\xad\xf4?m\x7f7\x88\xcc\xd7\xd9\xbf\xaa\xfe\xe97\xd1\xf9\xdb\xbf\x9fM\x1a\x7f\xff\xce\x01@!#\xbb1)n\xf8\xbf8\xf9\xe0\xbe>8\xda\xbf~\xfd\xde\x97\x1f\xe9\xf6\xbf\x01\xb9\xe9jX\xf8\xf1\xbf\x04o\x1f\xb2\x1a\xbd\x06\xc0\xde\x9e\xfeMCc\xfa\xbfl(\xfb\xae\x9c\x8f\x06\xc0\x9b\xd9\\\xab\x9e\x9e\x01\xc0\x122\xb9d\xces\x17\xc0\xdcK\xd6\x0e7e\x17\xc0\xc8\xb9$Hx\xfd\xec?!r!9\xac\xb0\xde\xbf\xdbmZA\x851\xb2?\x01\xfbA\xe5N\x07\xc4\xbf\x0b\xc9\'\x90\xa1\x00\xe7?;_\xa1\xf9\x1dA\x06@\xd8;\xb5\xb9H\xbf\xd1\xbf>C\xd8\xf8\xf6\xbd\xdc\xbfW@{\xe1\xe7\xcd\x8a?\xd2"\xbaF\xfcT\xc8?\x18\x8a\x90\xb4\x08\xf3\xd5\xbf\x97\xdb\x00\x85\x91\xc5\xd6?Z\x1d\x06t8\xe4\xe8\xbfm>c\xd1\xbb%\xf0\xbf\x87^\xe0\xf6\x8c\xcf\xd2\xbf\xf5H-\xdbHB\x06\xc0ln\xdc>\xb4\xf6\xda\xbf\x1f\xc8\xd3\x9e\xa99\xd8?l\x11QA\x11\x18\xdc\xbfcm\x80\xd7(1\xf6\xbf\xf0\x13[\x10\xa6R\xf1\xbf\xb06\xc2o\xff\xe7\xef?A{}\xa7\xf0\xbc\xf0\xbf\xba\xb6\x1d\xd8\xdfs\xe7\xbf\xfb}\xdd\xc4\x9b\xd8\xe1\xbfb\x8e\xaa\xf63\xc4\x07\xc0\xd6{\x9a\x15\xf8\xf1\x1b\xc0\xd8N\xaf\xd9\xc0\x04\xee?\\!\'\x12g\xd1\x08\xc0\xfa\x1b\xcdo\xd2\xb4\x00@)\xe2\xacmT\xf6\xe2?\xe0\x9e\x0eA\xc9&\xe2?\xc1R\xb5\'\xd6_\xe6\xbfU\x00\x8420\x9b\xfb\xbf\xb5fo+\xeaV\xc7\xbf.\xf4\xfa7\xa2\x89\xfc\xbf\xe5tC\xdan\xb8\xe3\xbfg\x12+\xce=7\xe2?\x14~%\xa7~\xd7\xf1?\xb2\xa1J\xba\x9e\xb2\xd7?:lR\xbc\x93^\xf2?\x04\x1c\x90\x87\x8b"\xbb\xbf\xb3u\t\xd2\xd5+\xdd\xbfK\x1eZ\x8f\xf1\xe5\xc9\xbf\\\xf5\xd9\xecSH\xea\xbfiM,\xbc\x10\xee\x01\xc0\x13z`\xf7\xeb\xe7\xeb\xbf\xcco\xf6aT\xae\xf2\xbf:a\xe3\xdf\xde \xee\xbf\xdd\xa5[\x15\x7f\xba\xf5?\x1c\x0bq\x13\xc4\x0b\xe6\xbfL\xa2\xebl\xfdG\xee\xbfZ\x02\xfb\xb0c\xca\xdc?0\xf9\xda\xa9\xcc\xf5\x1d\xc0mRi\x02$\x91\x03\xc0\x85Z\xd5\x83\x94/\xf0?\x86"\x86\x9fE\x17\xe4?\xddj\xc8\xda\xf3D\x01\xc0\xdb\xc8\x9fEb\xee\x05\xc0U\xad\x85\xfa\x8f\x90\xf4\xbfj\xe4\x95pV\xce\x01\xc0\'Y\x8f\xc45\x00\x06\xc0\xe5i\x18\xc2s^\x0f\xc0\xf8;\xd8h\x1bm\x05\xc0\x86\x83\x04\x80ZD\xe3\xbfD\x86<\xd1!\x8c\xc6\xbf\xd5\xa5u.\x9a\xed\xd2\xbf\xe1z\xe7\xcfIE\xfd\xbf\x9c\x98\xab\te\x9e\xb9\xbf\x88\xfd.\xba\x80\x1f\xe1\xbf\x12\x12\xb4=\xa8W\xb6?I\xbb\x19\xee\xef\xe7\xf2\xbf\xb0\xd1\xb5J\xdc\xd3\x06\xc0\n]mR:\xa0\x0e\xc0f\x8d~\xf5\xfc~\xf8\xbf\x97n\x9f)\xa6\xf4\x01\xc0\xc8\xe1\x83\x07\xa0\xe3\xe6?\x19\x92\x11r\xb2V\xec\xbf\x8c\xabk\x8f\xc95\x08@q\xdd\xfd\x10\x8cT\x07@|~N\xb6B\x9a\x13@\x99\x01<\xa9\xc2Z\x0c@w\x84\x8d\xf1s\xbc\xe3\xbf\x1eL\\Te\xb0\xe1\xbf\xba\xd9w\xbbg\x9c\xf9?\xeeAR\x8c\x03+\x03\xc0\xd2\x92[&a\x90\xf1\xbfl\xb7 d\x13-\xf3\xbf\xf2DF\xbc\xad\x12\xf9\xbf\xee+\xafa\xabG\x03\xc0?x\x1a9T\x82\xf4\xbf\x08\x94\x0b\xfc\xdf\xfc\x07\xc0\x14\xe7~[GZ\xf3\xbf\xf0M\x15\x1a\xc7\xeb\xea\xbf\xdbm\x96\x87\xef\x9f\xe2\xbf:3Gv\\\xbd\xcb?\x1ea\xed}P\x8b\xc7\xbf\x01\xce\xc36\x85\xb2\xdb?\xd4\x9a\xa3{\xcc\x94\xe8?!\x1c\xb0\xcd@#\xfb\xbf\x7f\xf3\x1a+\xd8>\xf2\xbf\x1c\tj\xa0\x00!\xe4\xbf\x965\xa0J\x9cP\xfd?\xfc\x0e\xb1\x8e*E\xfa?\x91V\xef\x06\xd7\xaa\xd5\xbf\x8e\xa2\x0c\xcdC\x06\x07@\xdbQ\x9d\xe5+\xae\x0b@%/\xa3\xf0\xd9\xfa\x0f@\x8c\x19\xde\xeaze\x1d@\x02?\xc8n\x9c\xf5\x9c?c\xaf\xcbN\xb8\xec\x11\xc0\x19\'3\x94\x97*\x0b@\x97\xdd\x05T0z\xe4\xbf}g n\xf0>\xf4?\xe4\xa4\xaa\xd6\xc5\x82\xc1\xbf\xcf\xa0eo\n\xb5\xd3?\xc1\xb8\xb9\xd4\x0e\x7f\xc9\xbfb\xaaJ\xe9\xd5J{\xbff\x00\x87\xbd\x83a\xea\xbf\x92\xa2\xc5\x07\xb7\xd8\xdb\xbfO\xe0\xabd=\xde\xe0?\x84\xc8CG\x921\xc0?~\xb0\x80\xa6\r\x17\xf3?x\xc1Y\x96\x03\xa7\xe9?/2.\xa7T,\x84?[V]\xff\x93\x84\xee?\x82\xaeb\xb7\xfa\x9e\xe3\xbf\x04\xe9\xf6\xb2\xae\xf7\xdc\xbf\xef\xff,\xb5WH\xd4?\xe0_\x83\x9c\x04E\n@W*\xfc\xd9\xc9<\xe2\xbf\xe8\xc2\xf8%\xe3\x92\x11@\x0f\x9d\x11;\x9f\xbd\xe1?$^y\xf0{]\t@\xc2b\xc4\xa7\x11.\xed?\'\xbcj\xca\x16*\x14@\xb2\xe0\x9b@\x8fJ\x13@#\x82\xde\xe4\x06\n\xfe\xbf\r\xaf\xd6\x83\xcb\xa5\xf7\xbfaC\xdd\x97\xbd\xa4\xf5?\xff>c_p\x02\xd4?\xf9\x0fX{+\xf2\xfd?m\x07ZR\xf04\xff?\xae\xfc\xb1) :\xeb?Ty\x8d?E\x97\xfd?\xa9\xcf\xdaV\x18j\xb9\xbfy\x92\xce\xa3\xba \xe9\xbf\xd4\xfd\xef-?\x19\xf3?v\x04o*\xd9K\x03@1\xc0\xad\xe2*o\xed?\xad\x07\xd3\x1e\xab\xc8\xf2?\x87\xb7FVp\xcb\xe7?\x12Ew\t\xa7\x86\xb7?n\xbc\xd7Jh)\xe8?\x94\xb68[J^\xed?JT\xeb\xa9\xaa\x03\xc7\xbfb\x0b\x0e\xc4\x07\x1c\xdd?\xbd\x15\x9az*H\xf3?\x8aq\xf4\xa0 \x18\xe9?c3e\xd4\x8d\xc5\xf0?\xab\n\xab\xee\xcc\x05\x08@\xeek\xe4@\x17t\x12@\xe4\xdf\xbe\xf4\x7f!\xe4?*\xc8`9J\x14\xd7?\xca\xec\x82\'\xc7\xa0\x12@\x80lp\xee\x1d\xe2\xc4\xbf\xab\xdd\xeb^\xcev\x01@3`5\xdd\xf7 \xe4\xbfsn\x00\xea\x19\xbb\x11@\xec\xd0aH\x89\xc6\xe7?\xcc\xc8w\x81CZ\xf5\xbf\n\xf6H\xb7Ti\x00@\xbf\xb3\xe4\xf6\x01\x9b\xdf\xbf,\x9eZFZ\x18\xb6?6\x16\xe0\xcb8\x94\xf3?\x81+\x05\x0eJ`\x07@\x04&\x9e$i\x7f\xfc?AZ\x12^=-\xeb?M\xd7\'`\xde\x93\xf7?\x15?\xbd\xb2p\xc4\xdf\xbf\xa4CK\x12\x0f?\xea\xbf\xac\x83\xebo\x1a\xed\x95\xbf\x0c/\x04\xd0\xa9\x04\xc8\xbf\x8b\xeby\xcb\xbaw\xf8?\x8e\x84\xf3r\xb3\xeb\xbf?\xb5&\xc6\x0f\xd9\x1f\xca?\x8b\xe3\x1b\xd0\xab\xfb\x9c?T\x85\xec\xd2\xd8\xb8\xf3?\xba\x04\x0c@\xddu\xf0?$b\xab%\x00\xf3\xd2\xbf\xc0~~\x0f\xc2r\xdd?\x96\x99\x82B\x863V? @\xa5\xe2\xd2\t\xe6?\x14\xbb*\xcf)\xb5\xd3?\xfeJ\x02\xcf\xda?\x11@\x99\xbdx\x95\x1d\x8d\x14@\xa3V&\xed\xc7+\x05@w\x8b&\x112\x0c\x07@\\\xd4\xe3a\x93\xd4\x0c@\xbe\xf3\xfej\xe3V\x15@=\xd0,\xf7\xf3\xf6\xf2?\x99\x9f\xd9."\xbc\x01@\xfb\x82\xbb\x8e_[\xf1?\x17\x12:\\\x9eB\xf6?\x981\xf5z\x11\xe2\x03@o-\x8d\xa6\xd4#\x05@#\x0c`~\xd6\xc1\xe8\xbf\xd74\\\xb1\x1f\xc1\xce?\xc2\xccH*X\x8f\xe2\xbfC;\r\x12nw\xcf?e\xa6\xe4\xfd\x07\xe1\xf7\xbf\xb6\xfc\xea \xa9\xb7\xca\xbf\xfdyJ\xa0\xc6\x01\xf5?\xd8+\x97\xde\x1b$\xf3?\'\xcd\xe3\x13\x00\xe6\x02@\xc2\x8b\xf5\xe8\x1f*\x03@\x80\x04\x84\r\x87\xb8\x00@K\xc4\x12\xcb$\x02\xf7?\xc6|{\xa5\x81\x11\x00\xc0\xcd\x9f\xc9}a\x91\x00@\\\xc8\xc7^\xed\xa56?\xa5O\xb0\xa1\xa2J\xe6?\x07\xbe\xf78\xbf\x11\n@\xb0\xc0\x80\xc64\x8d\x02@\xfc\xca\xdb4L\xf5\xfb?\xfdAV\x9eC\xcc\xeb?\x04\xc4\x0b0\x04\xd8\xfa?\x17\xcf\x8f\xef\xf6\x1a\x91?4\xa8)\xf8_\xf5\xfe? \xa8\x8f\xd1?\n\x0b@\xf6\xd7\x84\xcc\xd7\x91\x0b@`\xb0"C.\xbf\xf5?\x96\xee\x8dP\xcd\x7f\xf0?\xb7\xae\xa8\xc7L \xef?M\x00\xf5\xb2\x9cm\xe9?\xa8\xf7~\xa4\xc53\xec?T\xb3#\xbe\xd7\xce\xc0\xbf\x1f\xd8\xb5\xf9[\xb7\x91?N\xac\xff\xa9\x1b=\xec\xbf\x8fg\x01\x87H\x82\xf3?\x01t\xb1\xbbZ#\x0b@b\x02\x86\xec\x1c\x1a\x13@\xbd\xe3oxc\x19\x05@\x85\x81\x99\xc43m\xde?`z\x85\x11\xc0\xd0\xe8?\x11\xcay$W\xa9\xd7\xbf\xf8Z\xae\x80?\x16\x05\xc0\xe1-\xb7:\x0c\xe3\xf3?/,\xac\xde\x1d:\x04@.N=l\xf6\x1f\xce?.m<^x\\\xf5?\xbd\xe1\x1dF\x06\xb6\xec?\x12Y\x883\xa8E\xfc?\x1f\xdb\x0c\x0c\xbd\x95\xfe\xbf\x1b\xb9\xfa\x16\x9b0\xfb?\x0e\x0eDei}\xd3\xbf\xf0\x80\xd1db\x1c\xf3?Zv\xa8\xd9\x13\xb9\xf5?\xe3\x06<\x91"\xef\x02@\x03\x94\x14\x02\xb8\xbe\x01@\xf2\xc2\xf1Y\x7f\x8e\x03@wE\xad\xa2\xaa~\xde?\xa6\x1c%\x0b\xec7\xdd?4m\\\x12\xbe\xac\xa6\xbf\xfc\x83\x94S\x97\xaa\xef\xbf\xdag+\x8e\xca\x80\xea?\xf4\x9awx\xb9\xdf\xf0\xbf\x1d\xb0N6\xc8\x1f\xe2?\x06\xba9\xe4\xd5v\xfb?\x9e\x81|\x18\xc4\xbf\x10@V\xd0\xe0\xb0\x96\xa9\xee?cl\xcb\xbb7\xd4\xea\xbf\xf7\x99QG\x00}\xfe\xbf\xb8\x19\x0c\xfes\x98\xe8\xbfI\xfa\x1e\xceM\x1b\xf5\xbf\x80\x96\x06\xe4\xdd\x91\x08@\xc40\x85\xde\xb4\x07\xd7\xbf\xde^}\xf3\xe8[\x0e@\xfaR>\xc2$\xb2\xfa?b\x83\xeeQ\x8a\xd5\x07@\xdf\xddm\'OZ\x05@9q\xe2Gq\xeb\xf1?\xfe"\xef\x9cHr\xfe?ho\xc1\x1f\xce\x95\x05\xc0\x85\x911Yg\x12\xd6\xbf\x00*\xac~\x14\xb5\xbd?op\xc7\xe2)\x88\xea?\\\xbd\xc4n\xc7\xd6\xfa?\x0c\xb7\xbb\'\xf2X\xdb?r)\xb9\x94\xc8\xef\xe3?\xbbn\xe9\x80u\xdf\xf8?v\x83\xb0\xad\xd7\x80\xcb\xbf\x9cW\xeb\x0e\x95\xea\xc3?\xefs\x9a\'8\x15\xf1\xbf\xb9\xd8\xea\xf4\xb4@\xe2\xbfi\xd6\x83\x91\xbe\x93\xd2\xbf\xc1\xa8\xfe=\x05\xe3\x07@\x16B\xa0\xa8\xf0\r\x05@.X\xae\xfftQ\xde?#\xf4\xf8\xe0\x8b\xb9\xf4?\x7f\x18\x15\xc5\xd5\xf6\xe3?`\xc3\xca\x86Y\xb9\xcd\xbf\xf0=\xf8G\xcba\xf1\xbf\xfd\xa9Q?\xad\x85\x02@\nrd\xc4j=\xf4?X#z\xc6~3\xc5\xbf?\xa6\xcfsm~\xa1?\xf7B\xd3\xbf\xd2\xe0\xf7?D7\xf9\x080]\xf6?\'U\xb8\xd9Ve\xf7?\xfb\xd8\xf9\xc7$v\xcd?\xe1t@\n\x16\xd1\x10\xc0/y\xe1\xda\xf7"\xf7\xbfo\x8e\xbd\x82\xcc\xb6\xdb\xbf\x82\xe8\xe9e\x15\x06\xf1\xbf\xffxs2g\x8f\xa2\xbfoXf~\x1e[\xe9\xbf\x9d\xa5\x98L\xafL\xa5?\x13\x84y]\xf5\xfb\xe2\xbf\x8b\xe2\xc0\xde\xb3\x99\xe7?c\x05\xa9\xe8O\xa2\xdd?\x990#\xad\x14Y\xe9?\x89\xc7/\xf5\x12\xc0\xe1?\xd6\\w\xda\xb3\x17\xe3?s\xdc\xff\xbe\xd1z\xf1?\x03q\xf6h\xa1\xee\x01\xc0YL\x1a\xc8~\xfb\x04\xc0"\x04\x1d\xbd\x88\x15\xf0\xbf\xc3\x91\x96Z@~\xe5?=\x02wU\xa5\x19\xf9\xbf\x9c\xe2.\xdaw\xed\xf8\xbf1]\xc8t\\\t\xf4?\xea\xfe\xf5.\xce\x7f\xd7\xbf\x04o\x96\xa7\x89\xf3\xc1\xbf7\xba\xbd\x8b\xff\xa0\xe4?\x97\xd3\xa6\x15\x80-\x07\xc0Jp\xc5oc\x17\xfa\xbf=\xe8YN\x90\xac\xec\xbf\xd2\x9e\xb0\x19s%\xf3\xbfEy\x9c\xdf\xd7\xd9\x04\xc0\xa2\x1e\x7fs\x1c \xf7\xbf\xb1\x85\xfcwTi\xf3\xbf\x18&P\x82|:\x00\xc0\x9b6i\xe7\xba%\xda\xbf\xca\xb4\xc0\x89\xe3\x1e\xe5\xbfF\xef`\x8d\xdb\x1c\xec?\x19I5D$\xb2\xd0?n0\x9c\x0e\x89\x9f\xd4\xbf\xf7Dfg7F\xe3\xbfOFP\xc7\xb2\x0e\xdd?%\x82K\xc6\x8b\x02\xd1\xbf}1\xa5\x1e-\x85\xeb\xbf\xde\x85Y\xf9;\xe9\xb7\xbf\x14\x9c&\xa7\xca\x17\x08\xc0q\x1d\x10\x03\x17\x13\x07\xc0\x80\x97\xb1"Rh\x01\xc0\xd6h(ko0\x13\xc0\xac\xaal\xd8\xd9y\xe2\xbf\xdc\x16\x1cn\xb5_\xf6\xbf\xef_\x0e)\xbb\x06\x04\xc0J\x04~^\xfc-\x12\xc00\xf2a\x18\x97D\xff\xbf\x8a\x000\xb9\x94\xa9\x0b\xc0V7\xcb\x05V\xfb\xe7\xbfGryM\x8bE\xfa\xbfYQ\xbc\'\xd0:\x00\xc0\xe9\xadX\xe7\xc2)\xe5\xbf:$N3\xa1-\xe4?\xfa\xbd\xc0w:\x91\xe9?dU\xdc\x97\xb4Q\x01\xc0\xebM\x01\xecC`\xf8\xbf=N\x1f\xb2\t\x11\x03\xc0Y\xa6\xd3`J\xc1\xf7\xbfL\xa4u}{C\xe0?\xa9\x1a\x164\xf6?\xe6?\xa8\xa8,Z\x17\x9d\xf1?\xa7\xe4\xc4e\xbe\x92\xd4\xbf\xb1\xd3\x80\x0c\xe9A\xf5\xbf\xc5\x8a\nh\x996\xf6?Ch\x8a[_\x83\xe4\xbf\x02\xd8\xc7$\xbc{\xee\xbf\xf2f{/\xf8-\x08\xc0\xb5\xd8\x1a\xcd\x95\xaa\x0b\xc0&z\x8a\x01\x0c\x0b\x03\xc0\xd7\xa7/\xa9\xce.\x01\xc02\x8f\x1d\xc3[\xbc\xf5\xbfz;\xf0\x18\x96\xe9\xfa\xbf\xfb\xae+h\x89c\x00\xc0\xc6\xf8|\xbbo9\xe9\xbfn\xa8\xf5\xf5\x19\xac\x06\xc0,T\x8ei">\xfe\xbfK\xaf\xd1:S@\x07\xc00\xf4il\x0f`\xf9\xbf\xf3\xa2%cS@\xed\xbf\x9aI8N\'\x18\xea?\xe4A_J#\x05\x03\xc0\x04\xd3\xbe9#\xae\xff?\xafmk\x95\x89(\xe2\xbf\xcf\x1a\xeck\xf8\xee\xfe\xbf\x1f\x0c\x075\xa0I\x08\xc0\xd7]p/!\x89\x04\xc0P\xfd\xc5\xe3)\x86\xec?\xc9 ;BVZ\xa1\xbf\xe8\xf6$\x91%\xd7\xd8\xbf\x9eA\xf9ot\x9c\xe9?\xe0cmc\xecq\xee\xbf$|-/=\x85\xc2\xbf\xb0\xed\xc5\x85\x8a\x06\xe2?Q?\xf8x7\x0c\x97?\xb0[q\xa3\x1c$\xcd?\x18N\x89\xc5\x19%\xf9\xbf\xfe\xa1\xb9c\xe9M\x05\xc0\xe8\x03\xack:\xa5\x04\xc0\xbbb\x990H+\xdd\xbf\xf6b\x90:\x00\x14\xf1\xbf\xef\xcc\xd73\xe2\xe9\x94\xbf<\xe7\xca\x81\xac\xce\xec\xbfjA\xdc7u\xf7\xe7?rNX\x87\x88\x8d\xbd?v|\xc9\xd2O\x80\xfa?q\x98s\x90\x1c\x06\xd9\xbf\xb7\x0e\xad[q\x8b\xd1\xbfP*\xe5\x07}\xa4t\xbf\x10\x94\xc0O-\xfc\xff?\x06\xd5"\xc2\xd1\xb8\xe2?\xea\x82\xa3\xf9@\x90\xe7\xbf\x81\'g\x82"\x00\xfd\xbf\x86\xed?,\xe0\x9b\x02\xc0\x9b\x93@\xd9\xc6^\xe4\xbf\x96Ij\x9bc\x85\xd9?J%?\x89\x00P\xd3\xbf\xcc\x89\xdbj\x95_\xe3\xbfI\xc0\x80!?D\xdd?\xb2\xda\xad\x82\xb0I\xe3?\x99\x81gi\xf1\xc6\xed\xbfJw\x01\x05\x9f\x8f\xb1\xbf`fC$\xb3@\xf1\xbf@p\xa1c\xda8\xf4\xbfz\xf59j<\xea\xfd\xbfj\xc0\xb7K\xe2v\x10\xc0\xac\x7f\xafP\r\xd0\x0f\xc0z\x88\xf0@\xadC\x11\xc0\xf8\xe1?\x0b\xb9\xa5\x12\xc0$\xcc\xa1\xacx\xe3\x03\xc0":\xae]\x13\xac\x12\xc0W\xe6-\xdfz\r\x03\xc0\xd5/x\x1a\xf5\x82\r\xc0\x1f\xef(\xb3\xff\xc8\xfa\xbf6\x00n\xe51j\x04\xc0|\xc0\x84z\x94\xda\xfe\xbf\x98\xd3}\xd0*j\x0f\xc0\xde\xc7\xe1\x00\x17e\x00\xc0I\x89xj\x18\xd9\x07\xc0&{\xcc\x13N\xd2\x08\xc0\xdb\xd1C\xee\x80\xbc\x03\xc0E\x94c7B\x90\xf3\xbf\xbf<8~\xb3l\xe4?\xf1iq\xfc\xa4\xce\xe8?\x19\xb9\xa0S`~\xda?\x8f{\x9f\x9dC\x89\xb0?B\xf8\x13\xe2\x0e\xed\xe5\xbf\x9f\x1by\xe9&U\xec?\\\xb39\xcc0J\xa5?fx\x93\xd9\t\x05\xec?d\xd1\x06T\xc5O\xda?l\x80W\xfc\x95\x95\xff\xbf-\xf5G\xb9N#\x04\xc0\xef\xc2\xb3\xfd\xd5\xa6\xf4\xbf\xc2\xf5\x8d\xe2\xed\x95\x07\xc0l\x11\xb2@\xa1}\x0c\xc0E\xbb\xd9\x9c\xd7-\x12\xc0\xb4#\x97\x85\xa9\xf1\x0c\xc0m\xe5\xea\xff\xd1n\x12\xc0\xfc\xea^\xb1\xef\x9a\x14\xc0#\xa5@\x14\xe2\x96\x1b\xc0\x8a\xac\xf2\xf5\x01b\x13\xc0zz\xc4.l\xcf\x10\xc0Tt\x1e\xc1\x18\xd4\x0b\xc0H\xf5Q\xe3\x85\x1d\x0f\xc0\x9d\xa3\xafb\x0bp\x0e\xc0\xf4\xd5D\xc6y{\xf2\xbf\xc6\x14|\x18f]\x01\xc0\xfcG?\x19\x04\x02\xf9\xbf\xd3\x85\x84\x04\x9f\xd3\xf2?]15\x8e\x8c\x03\xbf\xbf\xdeOyq3\xd0\xc1\xbf\xba\x06f\xecdH\xe0\xbf\x05\x93\xd2}m>\xd2?\x19\xef\x1f\xdc}\xaf\xe0?\x0b\xbc\x88\xe3\x98\xe5\xda?\xd4\xdf\x9c\x9f\xa32\xdc\xbfx\xb8\xa0\xb0\x92\xc3\x9f\xbf\xbe\xb4\x94\xeb\x87C\xfa?0\xfe\x0e\xaef\xec\xf3?\xd6\xb1\xe2e\x9e\xc8\xf2\xbf\xd5o \xf8\xef\xc0\xe5\xbf\xf8*D\'\x9b\xbd\xe8?\xd4\x07L\x1a\xd8\x0c\xf0\xbf\x97nh\xcb\xfd#\x99\xbf\xaeP\x80\x06\x9b\xae\xd5\xbf\xac\xd1\x0f#\x01\xa2\xfd\xbf\xeb\xad\xc0\xfe) \xe7\xbf<\xba\xa4C4\x1a\xf1\xbf\xdfa\x19\xe3l0\xe2\xbf\xdd\xd2\xd0\x01\xb5i\xf2?\xe8u\xcc\x1e\x86\x8a\xac\xbf87\xd6\xf4\x84<\xe9\xbf\x9dMB\xb2\xd2\xa9\xf7\xbf\xc8\x04\xd9\xfd\x8d_\xb8\xbf\xc9\x87/\xd0\xbf&\xa6Hi\xc8\x1e\xde\xbf\xfd\x83\xc9\x94\xe6\xd6\xdb?\x04\x1a+S\xd2\xf9\xc0?-\xc9b\xcc\xaf^y?\x164#\x83\xc2g\xe8?\xecR\x8b\x16\x1fv\xf1?\x97I\xad\xa0\x87\xdb\xe6?\x1e\xc0\x8b}R&\xe6\xbf\xca\x1c\x85[\xde\xf0\xdc?\xfd\x83\x00\xae\x190\xe0\xbf1\x92\xf8\xc4\xc0?\xe6?\xe1+\x90\xc8\xdap\xd2?g,\x18\x01\xb9\xf7\xf1?\xc5@\x9b\xad0E\xd0?L`\x9b\x95\x18=\xda?\xaf\x8d&\x17\xa3B\xf2\xbftM\xd0\xed\xc9\xf2\x9a\xbf\xc6(\xe7\xd8\x17\x87\x95\xbf1t\xbbEe\xfe\xf1?\x14\x89\xfcP\x0c\xed\xf1?\xd5\xa3\xecJ 3\xdc?E\xae\x1bH\xbc\xe3\xc1\xbf\x01\x91\xce3*y\xc0?\xe5\xabR\xfb\xeeQ\xba\xbf\xd2o"\x1dk"\xe6\xbf\x9e\xd7\x16\xf48\x82\xb3\xbfd\xa14$\x11Q\xb3?\xef\xcc18\x8a\xb9\xe2?\x0c\x96\xba=\xe4\xbb\xc0\xbf\xcf\xfd\xfb\xa3S\'\x8d\xbf<\x14\xae\xe4\xd0\xbb\xf2?F\t\xa34@\xd8\xea\xbf\x10\x9b( \x10\xbf\xbb?F\\&\x04K\xfc\xd3\xbf\x8e\xee\x8c\x04Y:\x88\xbf.\xeekP\x1cg\xf5\xbf\x9f\xdf\x81U\xa4\xd6\xdc?\x1c\xfa\xebr\xd1r\xf0\xbf|\xff\x7f\xc8\x86\x99\xe1\xbf\x8d\xfb\xb4\x03\x0b=\xac\xbfk\xf2\x87\xbb\x87\xdc\xc0\xbf\xb3M\xc5oh|\xf3?g\xe9\x8b\xa2eA\xf1?\xf1\xfc\xd2,V\xd6\xd2\xbf\x9d\xcf\xb0D\x84R\xd7\xbf\x89\xf6*\xb9\xa2\xcd\xe5?\x81wt\xf2\xc7\x8c\xfa?\xf7\xe4*\x93\x93\xbb\xf2?\x9e\xc8|%h/\xb6?\x03]\xc5\xff\xc6\xed\xfc?\xd7\xeb`\xfcSN\xd0?g\x93\xc7n\x18\x9e\xe9\xbfK\xe7N\xbeh\xfc\xf1\xbf\x90\xaf\xf2\xcdi4\xea?\xdc\xef5A\x10\xce\xc8?\x1a\x0c\xac\xb4\xd7B\xde\xbf%\xb94\xc2N\xe8\xbd\xbf^\x9bKT\x0e\x15\xe2\xbfY\xc7O\xd3\xb8C\xdb\xbf\n3\x9a\xb4l\xda\xf1?\xdc\xa9\x1fh\xa1,\xcf?k\xee\xd7\x90g\xea\xf2?5O\xa8\x89\x05\x80\xf0?\xc9i\x1d\xbb\x08\x1e\xe3\xbf\x95v8J\x94|\xe1?)\'\xe7\xea \x9c\xfb?Qu\xe9\xb4\xe6\xa7\xe6\xbf@\x93\xf1e\xb4\xa4\xf3\xbf\xa8&4\xa7^L\xee?\x14;|\xbb\x1c\xba\xa5?b\x8c\x89O\x9e(\xfa\xbfu\x18u\x02\xaav\xda\xbf\x08js\xa4\x02u\xf6?\xae\x82\x82\x83\xfe\x85\xcf?\x84\xfeyF\xe9V\xc4\xbf\x1d`\xf1\x1f8\x93\x01@\xcc\xac\xad\xcbf$\xe1?%`\xddT\x86\x98\xa4\xbf\x82N\xe4\xd4hE\xd6?\xed=\xea\xb8\x18\x13\xd4?\xcbjN\x8b\xf4\xdf\xef?\xacR\xd0\xd4d\x9b\xd3?\xe8\xf3} *\xe7\xe5\xbf+-\xc4\x9c\xf0{\xda?\x11vs\x02\xc6\xfc\xc4\xbfL\x0f\xc8\xe4^\x8c\xc8?16(\xa0\x8c\xc0\xde\xbfEq&\xb9\x97\x1a\xbd?O\xae\x8di8/\xda\xbf\x83\xd7K\xa3\x89\xaf\xf6\xbf\x0e\x97m\xe1\'l\xd7?\x12\xf4kb2I\xab\xbf\x89\xfd\x0b\xeb6\xcb\xcc\xbf\xec\xcf\x0b\xad`\x95\xd2\xbf\x1c\x10\xd8\xbcKN\xf4?p#\xd3\xdcj\xa1\xec?Q\xd0MC\xb7\xac\xf1\xbfVDJ\x8d\xb7\x07\x04\xc0^\xf6\xeb\xc0\xcb\x14\xe7?\xae\x8e\xb6\xcd[\x85\xc0\xbf\xfcV\xc6E9W\xfb?\x17^\x16\xcc&w\xd0?\xb2\x8eJC\xf4C\xc1\xbf\xd6\xd1yj\x04\x06\xe8\xbf\xca\x1d43\xad#\xfe\xbf-k\x1b\xb7\xc0\xf8\xed?e>\xcf\x1a\xc1\x03\x08@PH{\xc8[\t\xfd?\xc0\xceiNY\x9a\xf2?\xac-\xa04\xf6\x7f\xe0?\x15\xa8\x8d\n\x1a_\xe2?\xbdQpz\x8av\xe6?\x8e\xad\xa4}f\x18\xd1\xbf8\xa0\xea\xc4\x92\xbd\xd2\xbf\x00\xbd6\xf7\xe0a\xc6?L\x9c\xa3\xea\xd5:\xc2?CE\x89\xabkE\xa4?\xce];\xdf\x90\x94\xf3?\xc0rs\x97}e\xaa?\x8edS\xc9N\xfd\xe5?\x81\xb0I\xf8\xf1t\xe2\xbf\xb17Z\xdb\x05\'\xdc?\xcf\x86\xfc\xfa\x0c\xe6\xd0?\x96\xdat\xa4\x83Y\xe5\xbfVX\x96\xc9\xef:\xfa\xbf\xc5\xd9\x9d\xfb\xbaL\x00\xc0\\OFx\xe8\x8b\xfa\xbf\xdbu\x08\xd9\xaa4\x06\xc0\x02\x88\xe4Z\xf3\x08\xe7\xbfC\x03\xf76X?\xf9\xbf\xf5\xd6\xcb\x85\xb5\x90\xff\xbf\xb3i\xba\xb1\x06\x07\xe0?\x9c\x965\xff\xb7H\xcb\xbfx\xb4\x9b\xfcl\xdd\xdf\xbf\xb8\xdb\x8d\x06_I\xe6?\x06\x11\xea\xf3\xa55\xfe?h\xad\xb4\x88\xb8w\xa6\xbfK\x96\x02\xd9\x93A\xf9?\x8e\xe7\xe9Bj\xa7\xf7?,\x15\xa0\xd8\xca\xcd\xe5?w\xc8\xda*\xc6\xda\xec\xbf\xd28\xe39\xaaK\xd6?\x18\xc7\xf8@\xaa:\xe0?\x98\xacQ4\x18\x19\xec?\xb0\x0e\x12\x8e\\k\xb3? \xef\x0eG\xbf\x0b\xcd\xbf\xf1\x865\xcb\xb6a\xc4\xbf\x81\xe9q\x85\xbf\x88\xd9\xbf\xaa\xf6N>\xb8D\xd4\xbf\xee\xe9\xaa\x85\x14\xab\xf5\xbfc\xdd(\xe5\x9f\x99\xe1?\xa7#l\xafR\xb5\x05\xc0\xb2\xf0DU~\xd7\xf9\xbf\x7f\x0el]\xf7N\xda\xbf\xf1\xb5\x9e\xd8\xcc\x8a\x05\xc0\x14\x14\xd5\xeb\xc6B\xf6\xbf~\xc1#\xdc\xd4h\x00\xc0\xc5\xa6\xa1*M\x1b\x11\xc0\xd1\xb5z\'[\\\xeb\xbf\x1a\xd6\x08\xd5:\xda\x06\xc0\x89\xb6\x17\xa0\x96!\x06\xc0J\xae\r\xca\xc4\x12\xda\xbf\xcaY#)\xee\xd2\xe6\xbf\xbaa\x19\xc5\xd6\xa1\xed?\xed3\xdb\xdf\xa8\xa2\x00@\xe1\xec\x99\xe96\x9c\x07@#\xfbD\x88\x0e\xb6\xe1?x`\x97\xd6{q\xd9?\x02\x15\xf2kK\xfd\xfb\xbf\xc9q\xdd\xbc\xa0\n\xcd?wj\xa5\xec\x96\x95\xdf?\x94a\xf4\xf3i]\xe7?M\xe3\x9fK\x02%\xdf\xbf\x17\x1dQ\xcc\xb6)\xcd\xbf]\x9f^Q\xa2\xbc\xe5\xbf\xe7i\x9f\\\x02\xcc\xac\xbf\xfa\x08m\x05\xfa\xd8\xd9?\xe6\xba\xb2>\xee\xeb\x00\xc09\x00I`\x81Y\x04\xc0\xb25\x98\x85\x0b\xbe\t\xc0\xb0\x7f\x1fa\x06\x0b\xfe\xbf\xc3|B\xfc\xb5&\x06\xc0\xf2)\x92\xfc\n\x16\x06\xc0#\xdf\xee<\xee\xb5\xe9\xbf\xe2\xe93\xe1b2\xd1?\x92\xc4v\xe0\xfc\xfe\x81\xbf\xf5D\\\xbff\xae\xf7\xbfx3z\x83\xed(\xe5\xbf\xdc\x02M\xd9\r\x9e\xf0\xbf\\\x83\x15Q7u\xcd?\x88\x00D\xb7\xd2\xc3\xf6\xbf\x194A\x8dj\xaa7?\xdf5\xf0\xf4\xf2z\xf5\xbfx\xfb!yF3\xe6\xbftH\x9a\xf2t\xaf\xe6?\xa0\xbd\xfa~<\x0f\xf7\xbf\x0e\xf8\xcb\x9a A\xd8\xbf\x94+g\xa5t\n\xe8?F\xb1\x0cJ\xa2\n\xee\xbf\xdf\x8eD/z\xb2\xf0\xbfm\xa9\xa1\x12\xd3\xff\xba\xbf\t1\x86\x9dl6\xe8\xbf\x1b\xdd\x11q\x07\xc0\xc0\xbfQB\xa7\xdf8\x82\xfa\xbf#\x9f\xa8\x9a K\n\xc0A\xfc\x90.\x90\x13\x08\xc0\xf0\x8eX\x0b?m\x02\xc0=\x8ac\xde\xa1\\\xf4\xbf6\xb8M\xc1m@\xfa\xbf\x85\xc0N\x00D\xd2\x03\xc0X\xce8\x95\xc5h\xee\xbf\xea:g\xcd\x82\x99\xef\xbf0\x15\xcbPh\x0f\xfb\xbf\xcf\xe4\xac+\x02\xfc\x02@\xd2nM\x19m\xc5\xec\xbf\x03\xb7E\xfd\x98\x9f\xca?\xa5\x1fR\xd3\x1e\xe0\xe0\xbfx\x8dwh\x16\xb0\xd0\xbf\xce\xca\xf5Z \xf2\xe8?\xb80\xe2^\xa15\xe6\xbf5o\xda\xd1\xc3a\xbb?\x16j\x8f\x17\xe5\xab\x00\xc0\x07\x1cmnUn\xf1?\xed\x04\xd8\x93$\x1c\xec?\xbb\xab6mmd\xa5\xbfq\xac$\xde\xc5\x1e\xfb\xbfk@\x14\xe7\x9e\x96\xde\xbf\x04\xb3\xc8\r\xf3V\xc8?\xb0\xd4\xd9\xe2\xf8B\xd1\xbf\xc0\xfc1\xdf\xee\xae\xd1\xbf\xda@=\xd4\xcd\\\xfc\xbf\xbb\xdb\x00^rP\x00\xc0U\xeb\xacL46\xfc\xbf\xd3+\x8b\xf2\xb4\x99\x04\xc0\xa9S=F\xed\xf2\x0b\xc0x`+\xe1\x93\xba\x01\xc0l\x90\x00\xb1\xae\xbb\xf5\xbf\xbeL\x06\xe4sf\xe6\xbfG\xcc\x1a\xe8\xb9\xe3\xfd\xbfZ%\xa6\x0b{K\x03\xc0\xb45\x93m\xfa\r\xed\xbfwXi\x11\xbaH\xe9?E\t-\xda\x03\xe2\xb9?Q\xc4y\xa9\xcf\xb1\xef\xbf\'+\x9byQl\xd4?m\xf3\xc7\x93\xfbp\xf0?\xfd\x1f\xb8#\x18/\xe6\xbf\xc3;9\x13\xed\xfd\xe8\xbf\xb5\xcbQ\xc3\xe7\x02\xf7\xbf\x89V\xc2\x91\xd1(\xfc\xbf\xf0\xc4\xd9\xc4\xf1\xec\xfc\xbfj\x1c\xfa\xe0\x9aZ\xf0\xbf6\xe8r7\x10\x17\xf1\xbf\x13\xff\x9f\xcd^h\xf9\xbf}q\xda\'\xd3z\xf2\xbf\x12_;\xc0W\x95\xe2\xbf2\xd3;\xed*M\xdf?P\xdav\xe5\x87\xa1\xd0?\xd2\'#\xf4\xa8\x8f\xf8\xbf\x9b\x02c~\xd5\x95\x14\xc0\xc7$\x9a\x80\xc0\x11\x12\xc0\xd1p\x1a-)\xa0\xc7\xbfFA\xf6\xe2q\xeb\xf6\xbf-\x10C\x88\xe7]q?8\xef\xe1\xc3K\x96\xf9\xbf\x95c?\xcdE\xba\x96\xbf?\x18\x8a\xc4\xf3\xcd\xc3?Qq\'\xb3\xa5L\xbd\xbf\x04N\xc5\x9fh\x0b\xe1?`\xf7\xec\xb6W\x18\x06\xc0`\xf1\xcc\x07\\\x14\xf2\xbf\xde\x04{\xb6^\x08\xe3\xbf.\'\xe7\xfc\xefX\xf3\xbf!\x16\xc1\xecTN\xfa\xbfE\xfa<"d~\x02\xc0\x95Yv\xb2\x97\xccy?\xd4\xb7\x80\xb9Bj\xfc\xbf\x9d\xb3d\x86\xca&\x01\xc0\xcb}\xd0\x19\xc6q\x15\xc0\x9e\xfa\x15\x00\x1b\x95\x0c\xc0\xc2\xb1\xc5\x1c\n"\xee\xbf9\xb7\x08\x9a\\\xb3\xe1\xbf\xfdMxQ\t\xf1\xe6?\x99\xedM\xa5\xf9\xbd\xf4?\x9dk\x8elB\x0f\xd5?*\xde\x0ez\xd2\x86\xf4\xbf\xb9\x95O\x9a\xf5\xc2\x04\xc0z\xa3\xe1\x93\xd1\x93\x02\xc0P\xf7?i\xe6\x96\xfc\xbf\xd9\xf1\xe9C\xb1\xcd\xca?\x15\x03t\x15\r\xa0\xd9\xbf\x1cvZ\xf3\xdc\x01\xe4\xbf\xd2 \x11!\xac\xc9\xf6\xbf\xf8\xd3\xedb\x9e%\xd8\xbf\xe6\xd6\x985p\xba\xff\xbf\xd3\x7f0\x9c\xd0L\xa7?\xa3\x19\x03\xb73\xd5\x0b\xc0\xc0\x89\xdaY\x11{\xde\xbf"\x88|\xeb\xf3F\xe7?\xb2+\xdc0\x08\xcc\x08\xc0\x8c\x07\xdch\xb5\xd4\x06\xc0Z\x14\x05\x95\x82\xae\xe5\xbf$\xa6\xc1\x8e3 \xda\xbf\x11M[\xb0\x0c\xb9\xff\xbf\xe3@B\xf8D\x9d\xf0\xbf\x1aI\xca*\xbd#\xef\xbf \xc9\xbdj\xc7\xf7\x0f\xc07\'X\xb2\x8am\n\xc0A\xde\xf4\x16\x01\xa0\xfa\xbf\x15W\x818\xf9\xc2\xe5\xbfR\n/\xd99^\xe7\xbfY\x99\x10\x0e,\xa9\x83?D\xe2\xec7\xdeq\xdb\xbf\x06[\x8a\x8aP\xce\xb9\xbf\x163\xc9Z\x98\x8d\xf3\xbf\x13vx\x83\xe2\x7f\x00\xc0Zd8\x98\rZ\xf5\xbf\xe6\x8bm\x8dl\xf1\xd0\xbf4\xc9\xcb+\xcd\x95\xf0\xbfPhy\x01Q\xd3\xcf?{K2\xce\x085\xfc\xbf\xdaw3p\xa5\xe1\xe8\xbfE\x16%%\xd4n\x03\xc0w\xbd\xc4\xa6\x1f\x8e\xca?\x19[\\\xeah\x1c\xdd\xbf\xe6\xccB\x02\xb9}\xd1?\xea&\xc0z\xee\xd0\xed?\x1a\x9d[\x04\'\x15\xc8?\x9fP\xe6&c\xef\xe7\xbfM\xe1\xdc\xb9\xbc\xb7\xf2\xbf\xc1jY\xfc?\xd9\xd5\xbf\xdfdy\x8b9\xb1\xfd\xbf\x99\xd4\x89\x85\x15\x10\xf3\xbf\x17Uu\xf74\xf5\x02@uIuG\xae<\xdf\xbf\xea\xec \xf2<\xab\xf7\xbf/C0+YC\xfe\xbf\xfd\x0f-\xbbHw\xe4\xbf^a\xc4\xdc\xb4\x11\xd1?\t{p\xee6\x9c\xe6?\xce\xc7\x01\xa0\xb7w\xe6\xbf\xf3Se\x8d\xc7s\xf2\xbf\x14\xc99\x95\x95F\xdb\xbfd,\xb9\xea\x08\xa7\xe2\xbf\xb3\xc8\xb8\x03ef\xa2\xbf&\x14\xf4[\xf4\x11\x0e@:\xab}\xe7?\x85\x01@\xa6\x8f\xc7\xf6!\xde\x04@!t"?\x8dI\t@\x9e\xe1\xf9\xfb\x18\xdc\xeb?\x8a\xed\x0c\x06\xdf\xb4\xa8?\xc8\xfc);=}\xf3?\xb6\x16P\xc4\x92@\xfa?I\xb1\x868\xf3\xac\x08@\x0c5\xfb\x13\xaeg\x04@6\x8d\x1c\xc2\xf1d\xcd\xbf\xdc\xe2|\x13\x8d\xc4\x02\xc0D\xa3o\xdbF$\xd0\xbf\xff~\x96\x08:W\xc8\xbf\t\xb2\xb2\xfc\xa4\x86\xd2?\xa91]\xe1\xcfk\xe7\xbf\xb1\xdb\xbb\xd9\xd6\xdb\xf3\xbf\xbf\xdf{\xd0\xe45\x00@|\xe0(0\x82D\x00\xc0R\xb7\xb4\xf1]G\xf5\xbfH\xce\xfc\xb5E\xebc\x84\xfe?\x85p}^*y\xd8\xbf\rr#-V \xb0\xbf\xed\x88\xcf\xee\xd7&\xfe\xbf-\xfa[2+\x83\x00\xc0z:\xba\x03T\x13\xca\xbf\xb1\xe6\x849(j\xf2?\x15z,\\\xe0}\xf0\xbf\x88\xdd\xb1\xc0\x06r\xcb\xbf\x8ds\x95\xa5\xe9\x0b\xd7\xbf\x8d]\x04i\x98\xe2\xed\xbf\x86`\xb3\xa8\xfd\xe8\xec?\xe4\xb8\xe6/\xce\x1a\x03@\xfa\xf9\xad#\xbbn\x84\xbf\xd5\x81=^!U\xf7?>\xdf\xd1\x08^\x1c\xe9\xbf\xf7\xcd\xdf\x83\x93\xcf\xcc\xbf\xf7\xa2f\x86\xc3\x1a\x05@\xc3\xb7,9\xb6Q\xf5\xbf7\xe7d\xb2\x16f\xff?NG\xf3h6^\xf9?i\x04\x82\x93\xde\xed\xce\xbf\x08\x15\x86G\x993\xc7?j\xb1KQ\xc0\xc5\xe1?d\xedI\xb4\xe9\xaa\xeb\xbf\xe2\xe0\xad\xd2\xce\xf9\xf9\xbf,C\xfc%\n\xb8\x00\xc0Y\xac\xf1i2\x15\xc9?~\xa0\xb4jqh\xfb?\x1b\x06w5E\xb7\t\xc06M\xf1\xa6\xf7\xc4\x10\xc0\xfc\x95\xd4A\x90G\x05\xc0\xa4\xf5\\\x18\xf6\x15\x00\xc0a\xcf\x8d\xfe\xed\x11\xe8\xbf+\x17\x93\xba\xf1\xab\xea\xbf\x92H\xc1\xbb\xecJ\xe6?\x96\x81\x92.1\x0b\xe1\xbf"\xcd\xbc\x15\x0b9\xeb\xbf\xd16l\xf0V\xaf\x04\xc0Q\x00%\x17\xc2\xc5\x0c\xc0\xe0chP*1\x04@\xba\x0b\x87\xa4\xe6)\x11@\x1a\xc9\xe1\x9c\x7f)\xe9?\xc8\xb3\x8c\xb3\xec:\xd4\xbf\x0f\xe4\xc6I\x8d\xd6\xfa?b\xca\x92\x93\x8cq\xfc?\x8f\xbb\x85j!\x04\xf4?\xa0~4\xda\xa0Z\xb0\xbf\x19\ru\x9d3D\xef?O\xb1\x9f\xce\xf77\xf4?&\xc9\xe2\x9aX\xc9\xe1\xbf^\x08\xb6\x04cL\xdf\xbf\xad\xa4\xdf\xcaT\xab\xdc?UU\x8e\rs\xdf\xec?\xc2\x96\xbc~K`\xd4\xbf\xa4A\x12\x93\\q\xb8\xbf\xd6m\xc1\x99-\x9c\xff\xbf\x1d\x9d\xff8,\x97\x06\xc0\xf9\x8293Y\x17\x11\xc0Q\xd6\x8d:\xc4\x0c\xf9\xbf\x8f\xe6[t\xd5V\xf8\xbf\xe0\x16\xe7\xf9\x16\xbf\xed?=\xbe\x0c6&\xa0\xe1\xbf\xd1\xd0\xf9i.\xf9\xf7\xbfV3\x9a^\xe3\x06\xc1?&\xfeA\xc4\x92,\xdd\xbf\xd8\xce\xb6\x00k3\x08\xc06\xd3m\x1e\xa2b\x0f\xc0\x8b\x97\x90~\x04\xc5\xfd\xbf\xa0\xcf\xb9\xa4s+\xf2?/\xd8\xbb\xb0Ff\x03@]K\xcf\xf9\xe0y\x0e@\xcf\xff\x162\x81\xc8\xee?O\xbf\x8ePp\x14\xd5?0( \x80No\x9d\xbf0\xc75\x9ev\x7f\xe5?a\xeb\xb7\x18?\xa8\xfd?\xb8\x18\x8f\xb8\xc1\xee\xa8?o.sZ\x94\xb4\x01@^>\xf2\xcd\xd20\x01\xc0Z.\xbck\x08v\x01@])\x82\xdf\x94\xe9\xca?\x19I\xc2\x82\xd0\xd3\xe6\xbf\x1a\xf6\xeb\xb9\xa7\xd8\x04@\xc5\xf4L\tW/\xf8\xbf\xe8\x0b\x98\x07?\x02\t\xc0\xf3U\xa8\xc0\x96\xd6\x00\xc0\xd8\xecX\x05+\x13\xa0\xbf\x85`A\xf2\xe7\xa3\xf7?i"/ir\x1c\xd7?\x80\xd6\x83\xed{0\xc5?\xae\xb3\xa4\xc8\x88\xbc\xed\xbfts\xd5\x95l~\xcd?j\xcb\x84k\xdcE\xed\xbf\xbc\x06\xfe\xb5\x92<\x12\xc0s\xba\x1d\xbd\x81\x13\x0f\xc0\xf6\xea\x99\xfb\xcb\x18\x15\xc0\xfdHN\x89\x96s\x00\xc0\'/\x10#\x8c\xe9\xe1\xbf\x11[\xfc *\xe2\xfe\xbf\xa8I\xc9\xd7\n\xd0\xf3\xbf1^^\xa2\x175\xea?\xa7cv\x1b\xf6y\xe0?\xe8\n!\x9c\x80\x9b\x00@\xdc\x1f\xa1~\xf4d\xd3\xbf\xfc;\xfe,-n\xd2?\x17\xed\xeb\xce/U\xe8?@8\xba\x00\x1fS\xff\xbfS\xed\x95G\x17Y\xcb?{eK{\x00J\xeb\xbf_IY\xf4\x01\x81\xe7?\xd1\x82\xc8\xb8\xc3\xa7\xd9\xbfa\xcde\xaf\xeb\xf6\xe5\xbfS1\xff\xf1\x8al\x04\xc0\xeb\x06\xb0\x11\xc1\x10\xf0\xbf\xed~=\x1b\x9e\xb3\xe8\xbf\x8a\x06c\xbc\xc4\xf4\xff\xbf\xb7\xebn\xa0\xf5\xcd\xed\xbf7\xc9\x18\xff\x91:\xe7?\xc1\xbf\xd3\xa5\x83P\xf3?|\xf6\xd6M\x18\x9d\xf1\xbfw\xe3\xf0\xf5]\xe4\xc9?\x8c8=\x9a\x15G\x06\xc0vB\x98;\xe3:\x07\xc0\x94\xbd\xbed&{\x11\xc0\xccb\x90;\xeb\x16\x14\xc0\x07\x12+j\x02~\x0f\xc0Q\x91;Xn\xc7\xf8\xbf\xe6R\xd6I\xdf6\xe9?\x89\x0f?S\x88\x84\x00@\x9e\xa4D\xec\xdc\xc4\xd7\xbf\xaa\x9a;\x8fYh\xeb\xbf?t\xbc\xa3\xfe\xb2\xda?/\xc8\xb6\xb0\x05\x82\xf2?\xc8\xfa\xc7A3c\xf4?$\x0c\xf5\x97\x1c5\x0c@\xf1\xdb\xd9W?\x06\xc7?\xf2\xe9\xd0{<2\xfb?\\\x01\xb54\xc6\xaf\xf1?\xbe-~\xfej\x18\x02\xc0{\x81\x86\x0e\xf0\xe6\xed\xbf\xcfR\xacy\xe9\x83\xf0\xbf\xec\x12\xdbN\x15\xd8\xfc\xbf^\x9cs\x86I\xc4\xd4\xbff\xa7$\xc7\x08\x14\xd6\xbf}\x0fJ\xe1)S\xe1\xbf#f\x90\x9fe\x13\xdc\xbf\xb1\xaa\x03\x10\xf8B\xf0\xbf\x03\xb9\x12QI5\xe8?M>1\x9b\x19\xd7\xe9\xbf\x13\xb7\xee\xa5\x19\xfc\x01\xc0e\xc1~%s\x12\x04\xc0\xcd\xff\xe9\xf1mK\t\xc0sP\xbf\x0e\xf5\x94\x07\xc0\x14\\\xe69\x9e\x80\xfd\xbfp\xc63\xf6\xe8t\xf6\xbfP;\xc1V\xc4a\xe5\xbf\x1e0v\xec \x81\xd1\xbf9\xbc\x89\x8dK\x8b\xe0?\x89j\x8a\xab\xe6\xc7\xf2\xbfMXE\x99\xfa\xb1\x00@\xd5\xea\xf4\xc7\x85\xbd\xf3\xbf\x84\t.\xfc\xd9\xf1\xbf9N\x04ug(\xec?hV\x089\xc4\xfe\xe9\xbfi\x1d\xb7?U\xbf\xf9?\x15\x82\x1a\x9ci\xc2\x06@L\xae\xfd;\x8f\xbe\xa3?U\xd1*V\xb5\xd1\xf2?\x96\xd8)\x9f\x9dU\xfd?r5>:`\xc7\xf2\xbf\x02\xda\x82\xb3\x98\x1e\xf1\xbf\x8d\xffY"f\xfa\xea?n\x7f\x86Z\xa2u\x05\xc0n\xd2\xf3\xea\x0ey\xf4\xbf;n\xea\xae\x02\xe8\xe3?}wP\xc1=\xae\xfb\xbfCk\x1d\x9c=\n\xda\xbf\xfc`\rC\x87*\xdc\xbfi/\xd0\x02\xde\xad\xda?e\xddA\xad\xean\x07@\xb4#\xbf\xd1\xba\t\xfe?\xe7\xdd\xa9]\xbd\x1d\xb4?\xc4\x06F\xc0t\xfa\xf5?\xf6\xeb\xdf\xf7\xbe\x10\xe1\xbf\xbe\x97\x9c\xad\xb3`\xa9?5j\xc0\x7f3\xd3\xd8\xbf\x04]p\xcd\xbe\xb6\xf0\xbfI\x00\x13\xed\xad\xd4\x99?y\x99\xda\xc1\x1c\xf5\xee\xbf\xa4\x0e\x8c\x93\xe2\xbb\xe7\xbfo\xfd\x85\x1ax\r\xe9?\x02\x9c.>\x8c\xbd\xd5?"\xd6\x1fI\x03\xb1\xda\xbf\xd0\xab\xaa\r\xef6\xe9?\t\xa0A\xcen\xee\xdd\xbf\xdb\xd0\x89\\\xf7\xcc\xbd?q\x11+\xd9\x98\xf2\xea\xbf\xa6\x9a\xb1\xbc\x17\x9c\xe2?\x98\xbf2H\xe9\x0c\xec\xbf\xae\xaa\xf46\xec>\xe9\xbf\xe0L\xa2\x7f\xc1\xac\xff\xbf0\xeb,\x05\xcf1\x00\xc0x\xa7\x0b|\xb5\x97\xff\xbf.\\\xed\x9aP\xee\xe9\xbfK\xb2\xbc}\x89\xf6\xba\xbf\xa4\xf7"\xae\x8c\x16\xf0\xbf\xbcqF!\x16m\xb5?\xa5f\x83ND\xbc\xf7?\x0c[\xab,\xfb\xd9\x01@\x8a)\xc6ahf\xfc?R,R\x87Ad\xf6?[\x86\xb3\xd7tM\xce?\x12D\x00s\xabZ\xd9\xbf\x16\'e\x1br\xfa\xf4?#\x85|\xdf\x8f{\xe8?\x81\xd2\x97gwc\xcd?\x0b\xfbuD\xaeW\xe7\xbf\xad\x98\x83wh\x8a\xfa?\x9e\xe8\x9c\xed8\xfb\xe8\xbf2Db\xe0e\x87\xd8?KrL\xdf+\xe9\xf9?\x9d?\x14\xf0\xb07\xcf\xbfG}AY\x18`\xb2?v\xa1\xedt\x84\x89\xed?N\xc7\x89\x0c@\x8f\xe5\xbf\xca\ty\x9f\xb6_\xd4?\x0c\xb6\xce\xf6\xd2\x0b\xe0?\xc1\x11\xfd\xa5\x07p\xf4\xbf\x8a\x8e\xe6\xbah1\xcb??\x8e]\xce1h\xf3?\x99\x82\xa6\x0c\x11\xab\xf6\xbf\x95s\x80L\xf47\xf5\xbfYe\x1a\xea\xc6\x1b\xdb\xbf\xb2mH\x8f(p\x05\xc0"\xe8@z\xc2\x81\x00\xc0c\x02E_0\x87\xfd?\xe6\x8aF\xc56\xc5\x01@\x9a\xf7\n$\xfd\xb1\xf1?R:\\2\x81\xfe\xd6?\xe6\x13\x95\x8f\x02e\xca?\x10\xf2\xf0}d\x8d\xc4\xbf{\xd9\x89\xb1\xc0Z\xf4?,\xca\xb2\x1b\xa9V\xc7\xbf\x8d\xdb\xd6\xe5{\xbd\xde\xbfYv\xcc0\x97\xc0\xd1?\x89\x93\'\xf4\xb6\xf2\x95?\xbf\x0bQ&\x93\xc1\xec?\xd9z\xbf\x85\rh\xd3?\xba\x19\x82\xc6\xbe\xb2\xdd?\xc0\xf4\x80\xb0\xde\xcd\xb9\xbf\x0f$\x9a\xc34\xc7\xd8?\xbe6_\xc6\xfe\x97\xf2\xbf\x9c\xef\xfe\x9e\x15\xf1p\xbfL\xecWb\xa5\n\xe6\xbfP\xcaK\\O\x96\xc5?\xdd?yW\x9f\xae\xf3?\xe1\xa86\xa7>v\xf8\xbf*V*\xea04\xe3\xbf\nE\xf33\xe6&\x04\xc0\xa2&\x80\x1c\xfav\x11\xc0\x98|\x9a\xf2\'\xde\xec\xbf\x97\xb98m\x13\xe4\xed\xbf\xbc\xd5\x15\xc8\xe6\xca\t\xc0g\x91\x0fWu\xcb\xf3?\xa2\xb3\x0c\xcfA\x11\xb8?\x83\xb4\xcaN6\x89\xa6?WzTh@\xf3\xe3\xbf\xe0-\xbdJ\x8fu\xe8?G\xe8\xae\x1f\x8e\'\xf5?\x9d\x89/-w\x19\xc3\xbf\xa1\xb2@\x18\xfd\xed\xc0\xbf\x80\x90\x1d\xe6\xb5\x96\xc9?\xb0\x05\xac\xd2\xd2\xab\xbf?\x8a\xa1s\xd9~\x17\xd7\xbf\t\xb6\xba"\x06\xe6\xf1?v\x83zE\xf5\x1d\xea\xbf\x91\xe0<\xd6\xe2\x1c\xca\xbfb[\xa0\x17\xba\x13\xd2\xbf9r\xe7\n|\xf0\xf3?\x19\x88\xe2\x89\x83\x05\xdc?\x8b?f\xa6\x04\xed\xd7?\x91\xa5V\x14k\xad\xd6\xbf\x91s(`\\\x88\xe4?h|u\x9el\xcd\xf8?\x89\xc4G\xb8\xcc\x8c\xe6\xbfwC\xbbPZ\xcf\xcf\xbf\xf2r\x99k\x04\\\xa3?\x10\x81\x7f\xdff\xf5\xf1?\x0cm\\\xe5hw\xcf\xbf]%\x85\xfcu\x8c\xe0\xbfI6\xc4\x15\x19n\xcc\xbfc\xbc8\x1b\xa2\xf4\xde?%-\x98c\x1b\xec\xd5?j\xbc?\x9d]\xc1\xe4?q\xc68\xd86\xbc\xe7\xbf1\xc5\xe0\xfa\xf4\x8d\xbf?\xf05\t\xf9Hd\xb9\xbf\xc00\xe8\x05\x86x\xde\xbf\xa9\xf4\xa3\t#J\xf3?8\x01\x1b\x05\xea\x10\xe2?\x03|o\x9a\xb9[\xe0?;\x82\xf7e\x81D\xf0\xbf\xa9P\xa8\x17\xe0T\xc5?<\xa6.\n\t\xfd\xe6?\xc0\xb7\xb7\xcb\\\xda\xe2?h\x07\x11\xf3\x18h\xbc?Z-\xb3[*\xe4\xd9\xbf\xe0\xa8\x12\x9b>(\xb0?\xd3w\xd3Xye\xf0?\xad\xb2\\J\xab!\xaa\xbf8g\xc3@j\x8e\xa6\xbf\xe3p}-yv\xf9\xbf|PT\x0c\xbc&\xba?\x8f\xe9\xc1AK\x05\xdf?\n$+\xec\xf2\x81\xd4?\xa3oU\x1d\x9d\xd8\xcd?D\x8d\xfc/\xb5\xcd\xf4\xbf[@\xe5\x0bk\x0b\xe7\xbf\xf1\x98L):\x01\xb8\xbfA\xcb\xdaU\x16T\xeb\xbf\xa9\xf8\xc3\x8b\xee\xf6\xae\xbf\xca\x91\x87\x11\xf3m\xed\xbf\xaa\xb3\xeb\x82\x8b\x15\xea?X\xbd\xce\x9dDu\xa1\xbf\x97P\x92\xc0\x90\x98\xf1?\x96v\x03\x108\xa0\xd9?:\xd4\x13\xf6[6\xc5\xbf\xa1\xcd\xee\x10\xe0k\xf7\xbf\xc0}\x83E\xf1\x9e\xdf?\xcc\x1e\x0fRl\xbe\xd1\xbfo\x7fD\x1eR\xfa\xc7\xbf\xd8l\x93\xd4\xfaX\xe0\xbf\x0eHt\x91\xb7\xe5\xdf\xbf\xe8\x7f$\xd9\xe5%\xe5\xbf\xf2\x80\x1a\xf1\xb9#\xd3?\x1c3+\x94\xf5\x96\xdb\xbf\xe3\xbb\x82\xd6\xe3\x17\xe8?X(\xb2\xea\xad\xcf\xf7?Y\xa66]\xd2\xac\xe6?\x90\xf0\x08\n`*\xb1?U\x93P\x94\x8e\xc2\x8c?\xe0\xbb_)\xef/\xf5?\x9d\xf6"\x06\x94:\xde?\x83\xd4\xf9(w\xc9\xe2?s\xa3\xd7\x1c\x1d\x9a\xed\xbf;\xb5\xffl\x81\x12\xd6?t\n\xc0!p<\xc6?\xc1\xc3\x83\x80\xf0\xb2\xe4\xbfW\xe61\x9e\x1af\xf0?\xeco\x82\xe1\xe4q\xd0?S\xac\r\xf1\xfaq\xec?\xbc4Wx\xbf\xec\xf6?=\x8cj=/Q\xe4?B\x0eL_\xde;\xf6\xbf\xba\x14\xa3\xbb.\x9f\xe9\xbftv\x98\x8eDm\xcc\xbf\xf6\xb2B\xf6\x05E\xe2?6%}t&\x82\xd1\xbfB\x8c\xda\xa9^\xf8\xcf\xbf-\xeb\x0cm\x88M\xd6\xbf\xab\xc8\x89\xdf%\xe9\xc2?{C\\u\x88\x00\xe7?\xea\xd0\xe0|\x1bf\xeb?\xc7G\xc6\xb2\x1da\xf5?\xff\xdd\xcbGo\x9c\xee?\xbf\xd0v\xdb\xbb\xd4\xe9?e\xf8\x88\xa9\xd3Y\xea?\xbb\x83V)\xa6\xdd\xec?\x98\x13\xc6\xbe\xf4y\xcf?.5\xd0\xb4\xff\xbb\xde\xbf.\x07\x81`\xbb\xef\xe0\xbfd\xdd?`rU\xd8\xbf\xd6SQ\xd59D\xe1\xbf\x86?5\xaaG\x9e\xdf?S%\x88\x9d\xe8\xe2\xd1\xbf\xf5&/\xea1\xda\xe6\xbf\xcc\xe9\xc4%^;\xe9\xbf\\\x8a\xef"\x9b(\xe0\xbf\xb6\x8f\xfc\x9f-\x8a\xe4?\x86q\xc34\xa8\x16\xa2?\xbb)a\xc1+o\xf1?\xac\xb8K\xff\xc1\x03\xf7?\x9cO.\x94N\xec\xed?G\xa6HI -\xfa\xbf|V\xdd\x14#$\xeb?\x7f\xa2\x8e\xdd\xc9\xb3\xfa?\xdc\xe4\x95\xd4\xb1?\x9e4\x8c\xb5\xfd\xca\xe0\xbf\x9d\x92t{j,\xbc\xbf\x84(\xa14/\xb0\xab?\x87\xff\x08\xe2\x9c\xce\xee?\xe2\xda\x00\x94g\xe7\xc7?3\xe7O\xebZ\xb3\xe7?\x02\xf1\x95\xb2\x1e\xe1\xc6?\xb5\xe9\xb1\xb7`"\xea?\x07\xdc\x10\x8aI\x1d\xea?\xd2\xf5\xbf\xc0\xb2\xe5\xde?k)h\x1f2w\xf5?\x93\xba\xc8x[\xc2\x10@\xa4%=\xa4\xa5<\xf6?\x1e\xef\x9cTLn\xfa?\xde\x06l\x046N\x06@\xc1 \r\x9a9\x96\xc3?\xcf\x14*\\E\xe3\xf8?X\xeb\x1f\xb0\x8c|\xf2?\xf2=\x1d\xcd\xac\x00\xfb? {,C{U\xf3?\xcd\xcbD\xe6OD\xe7?o\x0c\x11\xb8\rC\xc0?TT{\x16\xff\xe4\xb7\xbfi.\x98\xfa\xc8I\xe6?R\\\xf9+\xfb\x16\xdf?a\xeb\t0\xfb\xf7\xaa?\xfb\xaf\xee\xae\xb8U\xbf?\x94\x90\xdb\x05[\x97\xce?T\xd5\'\x1cD\x11\xb2\xbf\xdaj\xf3V\x9at\xf0?=Q\xf14\xd5\xba\xd5\xbf\xc0\xa9\xf3\x9c\x85\x1c\xc9\xbf\x02\x1b\xd4d\xae\xaf\xc5?=\xf2\xfa*\x8d\xee\xec?\x02!\t\xfa{|\xfa?\xc0\xe6"|2&\xd5\xbf\x04?z\xd85Z\xf4?+\xaf\xab\xc4\xb5\x12\xf7?\x8a\xe7B\xaf\xdd/\xe6?\x04=Q\x93\xbdY\xcb?{\xd8\xc7dv\xf9\x06@}\xbe\xdc\x05x{\xed\xbfxXY%b\xbc\xf1?\xbbb\r\xed]\xb8\xdc?n\xeb,,}\xc2\xf6?,T\xc6\xce\x11\x89\xe1?7\x05\x03Vk>\xf3?4a\x11:!\xca\xf8?\xea\xb1\xcc.\xa0W\xf5?\xe6\x02\xd5P\x85\xaf\xf8?\xa8\xcd\xacV\x056\xc1\xbfn"\x1cA\xf8\x19\xf0?\x0e\x19\xfb\xfav\xca\xe1?\xe3a\x91\x1f\x99J\xe9\xbf2\x8ea\x06\x8es\xd5\xbf(\x96\xd8\xa17\xc4\x85?\xc6M\x18\xc3\xf4\x16\xba\xbf\x0fJ/\xbbb\x03\xb1\xbf\xda\xb97\xdeov\xe9?\xc7\x9c\xb1\xff\x96\x8e\xa7\xbf\xad\xfa\xf8\xf7M\x0b\xf0?\xf3\x86\x00\xea\xcc]\xf8\xbf\xe7\x04g%J4\xec?S7\x9e~\xab=\xfa?\x81\xd6\x7f\xa4\xf3E\xdc?\xb1^\xbd\xd0{\x84\xb6?\x0e+\x19H\xf5v\xfb\xbf\xd5<\xa1*\xf8\xde\xf9\xbf\x1b~#\xba&\x06\xea\xbf\xa0\xbb\xc7\xb9\xebl\xe9?J\xef\x88\x00\xdc\xa6\xe8?Z\xb7|\x0f\x01\xf1\xe7?\'\'s\xc3\xf0Q\xff?\x04\xe2\xa6\xc5Q\xd1\xf3?\xdf\xc46\xd8\xc0$\xe9?\n\x93\x0f\xd4[\xa4\xec?\xd5\xde%\xa7\x94@\xec\xbf:\x02*\xd3Df\xc2?\xf4\x13\x16\x1eg\xa7\xf4\xbft\x8c\xb1\x99K\x8d\xd0?\x0fG\x1fL\xc6\x1a\xcb?\x86\xedK\xb9C\xf7\x9f?\x12\xe8\x1a\x9b\xb2_\xd4?\xf4\xc7vGE\xbc\xe8?\x1ck\xfd\x1a\x89\xc5\xa4?$:\x0e\x972{\xeb?\xb8\xbcrD\xbe\\\x01@M\xe3(d\x86\xb1\x02@\t\xf2\xaf\x17\rT\xc7?5*\x0b0.\xdd\xb6?\x04T\xee\xff\xbdW\xe7?\xa9\x18]Z\xe1\x1f\xdb\xbf\x04H$\x14B"\xe9\xbf\x0c\x8bp\xf6\xa0\x86\x9d?\xac#\xbf(\x83\x8d\xb5\xbf\xf4O\x8c\x17\'\x96\xc6\xbf\xdd\x89\x9c*\xf3\xcc\xda\xbf\xa6bc\x02\x7f\x82\xb2?\x8a=\xf0\xc15y\xb1?\x02\x14`\xc5\xdd\xe9\xbf\xbf\xd9^C*\x06\x19\xd7\xbf4*\xf2T\x83;\xb0??\xbf\xc4\x95\xec-\xe9\xbf\xe5\xdd\xf6\x87$3\x01@\x02\x00?*/H\xe6\xbf\xc6\xd3X)\xdd\x93\xf3\xbf\xb6d\xa4\xb4\xad.\xca?WG\xd35q[\xf8?\x1d1p\xc3\xec%\xdf?\xe2\x01z\x11\xeeI\xeb?\xde\r\xb0\xf1R\xdc\xdc?j\x10\xb6HhO\xf1\xbf<\xd5|\xa6ER\xd4?\x93\x87\xc2\xa7@\xc7\xa2?94\xdeL\x98\xa0\xf5?c\x90\xae\xc4\t\x82\xec?\xc0\x06\x98!\x7f\xdb\xe3\xbf\xfekw\xfd\xa8[\xfc?\x91\xe9\xc0\xfaSa\xd6?\xf2\xd4/\x9f\x97\xa3\xf4\xbf\x94\xa4\xba\xc3\r\xe5\xe1?,\x8cV\xc3\x19\x9c\xf3\xbf7\xf5\x18\x88.\x14\xe2\xbf\xa2\xbbO\xc1Gl\xc2?\xf8\xbc\xdb\x92\xa9\xfe\xd5\xbf^u\x86=\xa8\xb2\xf2?+\x9f\xef\xba\xcd@\xf4\xbfr!\xddK\xa5<\xf7\xbf\xf9\xb4a\x15p\xd5\xe3\xbf\x06\\;\xab\xb5[\xcc?\xffdi\x84\x04\xf6\xb9?\x0b\xa1m\xf1\xe5\xd2\xe7?\xc7\tsW\xa0~\xf1?\xe6)o\xeb=d\xf8\xbf\xff&\xcf\xb4\x9f\x85\xf9\xbf1\xf0\xca\xc2\xc7\xe6\xda\xbf\x84\x08h{YN\xb8?v\x9ac\xe8\x16h\xe9\xbf\xa1"a\x83\x83K\xd7\xbf\x0eV\xf7i\x80\x95\xf1?\xf3.\x85\xf9\x02\xe0\xf5?\xdf#!\xce\xe4\x0f\xf6?\xe7vCv\xdaf\xee\xbfR\xab\xfa]\xafk\xeb\xbfWP\xa3kT0\xbf?\xf91S\xc8\xbe\xf1\xf1\xbf\xd6\x1a\x8a\xd0yM\xc6\xbf\x083\xe4n\xeek\xd5\xbf\x11v[t\n\xac\xd1\xbf\xcb\xfe\x05\xdab<\xde?\xf4\x88k\x9c\xd1F\xd7?\x088\xae\xa5\xe5>\xe9?\x90\xb9\xdf\xe7\xfc\xa2\xf8\xbf\x02y\x03\x8d\x03\xfb\xed\xbf\xc0b\xb8\x9e\xd2)\xf1?\x98\xe2\x9d\xc2x\x88\xd0\xbf\x97m\xdb\xb1\x02S\xd4?=C\x7f\xa9\xca\xf6\xeb\xbf\x9b\xdf\xdf\xd7\xdaq\xaf\xbfbDA\xed_\xde\xe4?\xaa\xea\x15\x8bU3\xd9\xbf\x8c\xe5\x96\x87\xab;\xf6\xbf\xb7\xf5\xa1\xe0\x81\xac\xe2\xbfhq\xdc}\xac\x8d\xde\xbfI\xb04`C\xc4\xd4?\xd5(jR\xbb\x7f\xdb?\xa8Cd\x8a\x88\x95\xf4??\x7f\xac,\xc3\x9e\xe9\xbf;\xa4\x10\xb4\xa5\x96\xdf\xbf\xaa\x81\x1f \xb4+\xdd?\xa16e\xe9\xf3!\xf9?Dw\n\xc5.7\xfe\xbf\xb9\x1e\xf6\xf4W)\xc5\xbf\xadV\'x\x92\xda\xfe\xbf4\xb8\x11\xa5\xf1\xcd\xe8?R\xb7C9\x11\t\xc9\xbf\xbe\xca\xe7)V\xfb\xee\xbfF\xba\xed^\x14\xc4\xdb\xbf=\x85g\xe3\x9d\xc2\xd5\xbf\x90\x80\x1dz\x9e\t\xf5\xbfQ\xd4?\xac;=\xe9\xbf\xe1\xf8S\xdc=\xc6\xfd\xbfF\xcc\xc6)Q[\xf9\xbf\xe9\xe4[%j?\xe5\xbf\xa5N\x9c\xd4\xbf3\xd1\xa9\xa8\x86\xa3\xf0?}\x0c\xbb\xef\x9b\xe0\xd7?\xfcu\x81\xbd\xd5\xf9\xdd?x\xbej\x0c\xba\x88\xf6?\xa1\x93\x07\x9d\xc5\xbd\xd5?D\xf9}\xf5\t\x10\xf7?ht\xc0\xb42\xe0\xec?\xad\x0c\xb3\x0f\xc0U\xf1\xbf\x0c\xc4\x83N\x07o\xf4?R\xdf5\x02B&\xd2\xbfQ\x95+f\x84\x14\xde?-md,Bb\xe4\xbf\xb5\xe2\xecS9\xdf\xd0\xbf\xb3S\xea{:\xd2\xaa\xbf\x8a\xd5\xc8\x87Ln\xa2?\xf9l4\xeaF\xc1\xd8\xbf.\xca\xb9]I\x8d\xdc?\xc9\xccn\xea\xe3\x7f\xa7?/\xb2\xfdh\xf0<\xcd?\xdfQB\xb3Yd\xe1\xbfs]\xffs\xbd\x0b\xb1?G\xbb\xb0\xac\x83\xd3\xd0?\xc67\x7f\xdd~u\xfa\xbf\xa1c\x9c\xfb\x867\x00\xc0\xcd\\\x14<<\xd7\xed\xbf\x10\xc0\xddg\xcd\x84\xd3?\xa4{\xba5\x93>\xf2?\x86:\xe8Q\xab\xbc\xac?\xe1\xbblI\x016\xed\xbfn\xc8\x1ay)\xe2\xf1?\x9c\x12o\xdc\xaa\x88\xa7\xbf\xf8\xcc\xb6[~\xc0\xed?C\x0f\x1c\x90l\x1fd?\xb5My\x1d\xb4\x19\xf2?\xd9\x9e\x1af\xbe\xb4\xe1?/\xe3\xa2\xc3^\x17\x02\xc0\x03R\x134\xf1\xc7\xe6\xbf9\xf6\xdf\x9fjQ\xee\xbf,\xd7\xda\xfb7\xa7\xd1?W\x96\xeeH\'\xf9\xb1\xbfy\x06\x1dlN\x1f\xfd\xbf\xc4&\xd3:-\xe3\xd7?\xc4Wf\xb7\x1a\xd2\xf1?\x1c\xc6!V\x9dd\xe1?d\xf4\x8d\x00G\xc1\xcb\xbf=\xd4\x8b\xbf\x87E\xfc?\xc5\x08\x8d\xc6\xb8\x88\xd5?\x07\x8c\x88\xf26\x1e\xd4\xbfK7\xb6\x8d_\xdc\xf1?\x80\xb2\xed\x83\xcc\x01\xec\xbfl\x1b^F\xf9\x07\xb8?\x10\xd0h\x8b\xb5\xfb\xe6\xbfU"@\x7f9\x80\xe5?\x9dUh\xd8\xe8h\xc9?\x1b\\)W\xe5\xa5\xf2\xbfsN\xd8*\x03$\xf0?\x1d\xb0\x18#\x10\xfb\xc1\xbf 6\x0e{1\xa3\xff?W\xe2|DK\xf4\xc5\xbf/\xec\n\x953\xbb\xc7?\x86\xbd\x8d\xb1\x95\xcf\xd7\xbf\xc2\xf5$S\x08\xf0\xe8?\xd3\xa6\xcc\xde\xeef\xc1\xbf9[\xa8\x91\xeb\xa6\xee\xbf\xc2tC\x95\xa2W\x00\xc0\xf8\x05X\xa5\xfb7\xe4\xbf\xf6X\xd3@\x0c\xc7\xc1?*\x1b#j\x93\xb8\xdb?\xb5\xa1\xb2\xfbg\xa4\xe4?\xd1\xd6\x05\xe1\xa2\t\xeb?\xb8x\xf1Y\x0c\xe7\xc8\xbf\x8cvT\x97:x\xd7\xbf\x8f\xd2sB\x83\x8c\xff?\x8e\x87\x84u\x80\x1c\xec\xbf).\xa1rM\xc7\xc7\xbf\t\xcax\xd0h(\xf9\xbf\xc7\xae\x8eG\x16\x0e\xec\xbfB\x13\x1b\x9b\x18S\xd3\xbf\x85\xc2\xc3\x1bF\xda\xec\xbf\'\x1c?\x86\x8b\x92\xcb\xbfB\x04\xb5\xbe\x15\xb9\xe9?\xc3G\xe7\xba\xe5\x11\xe4\xbf\x0b\xdb\x9c\xd6\x05\x8e\xd1\xbf)\xcc\xe9\xab\xd5?\xc9?5\x85D\x8f\xae\x12\xe7?8b\xc9\x1b$\xdd\xe7\xbf2\xa2\x11^\x84\xe5\xd8\xbf\xa0^n+\xa8\r\xc0?S\x12\xe4\xd7\xd6X\xd2?\xdeE\xa5\xbd\x8b*\xee\xbfr\xe5\xf3\xe2\x16\x11\xcc?\xea\xbd\xd5\xe3g3\xf1?\x0e\x1cj\xf8F3\xbc\xbfJp\xfc\xba\xb1|\xda\xbf\x9f\xb1\x13\x0c\xd1\x8b\xeb?\xdbXb\xc1\x87\xfc\xdf\xbf\xf6\xcf\xc5\x90Z\xb8\xf0\xbf\x81\xfc%\x92\xcd(\xd8?\xc9\xd0\xbdb\x1d\xe4\xaa?\x03\x9c7\xfaE\xb6\xe4\xbf\x92<\x84M\x01\x8e\xbb\xbf\xc0\xb4\xcf\x9a\xbeH\xe5\xbf\xa4\x05\xb1\x01X\xfc\xd9\xbf\xae\xd2\xe5A\xae\xdd\xed?\xf4\x01tH\x11R\xf1?\x1a\xfe\x94=)%\xed\xbf\x95\x81\n\x83\xcb\xe1\x01@\xb2\xc2s\xd4E\x04\xf5?Zh\xe6\xdd\xb3@\xf6\xbf\x8b\xc5R}\x12\'\xf0\xbf\x86(\x02m\x91\xfd\xf5\xbfh\x1b\xf3P\x04\x8c\xfb\xbf[\x9dm\xeaT\xca\xc5?1\x00A-|\xc1\xcb?\xfaA_n\xd2D\xee?\xee7 s=r\xc4\xbf\xdfqk\xeaI1\xe2\xbf\xf3i\x93\xc6)S\xe2\xbf\xb8E\xf9\xe6Y\xf6\xe4?[f\xe3.\x1fp\xc4?+z\x9d#+\xef\xaf\xbf\xf6\r?\xc5-h\xa5?\xec\xc3i:\x02i\xea\xbf\xf0\xdc\xe3\xe4N\xdd\xe0?~I]se\xe8\xda?\x8cgV"\xf7r\xc5?T]\xd3\xb1s\xb3\xe0\xbf\xa5\xab\xda\xa0\xcd \xeb?\x9f\xd9\xac\xbb\xcfQ\xe7\xbfkM\xbe\x8bA\x06\xe7\xbf\x04\xab\x9c\x8c\x13\xb5\xec?\xee\xde\xa2M\xb0\xaa\xe0\xbfwj\x8d\xea>\x01\xd5\xbf\xfd\xe4\xe8e\x13\xcd\x97\xbf~\xafQ\\\xebi\xcb\xbf[ZD7\xcd$\xe2\xbf\x02\xfbk>/XW?/\xf3B,q\x94\xf8\xbfR\xaaC|qT\xd8\xbf3eR\x16u?\xd1\xbf^S\xd2\x94c\xa6\xd5\xbf\x89\xaa\xf4\xaf0;\xe6?(1\x8e\xeb\xc73\xec\xbf\x0f\x90\xa3f\x91\xd1\xdd?&\x1e\'\xab\x93\xe7\xf1\xbf\'$\x86j\x9eD\xfa?\x04<\x10\x8b\x1b<\xe2?\xed\x03C\xe3\xd0\x11\xf5?\\\xa0v\x85i\xba\xd8?\x0eD9\xf5\x98\x1f\xd4?E\x135l\x87\xc8\xc3?\xba\xaf\xe0\x18\xcc7\xc7?J\xdb\xa4\xac0\x1e\xe4\xbf\x83\x8a\xbd\x11g\xc7\xfb?\x13aOK x\xe9?\xc3\'\xfb\x0f\xa1\xec\xe6\xbf\x90\x8b}\xb9\x86\x9d\xb5\xbfW%\xf6\xaa\xf6\x9d\xd2\xbf\xa5S\xf8\xa3u\xdf\xdb\xbf\xb1\x83\xbb\xe9\xd49\xf8\xbf3\x17\xd5\x16\xb5B\xe1\xbfo\x9f2M\x1d\x0c\xeb\xbf\x1d\xa6\xea\xfc\xecy\xe6?/\x9f\x88\x9f\x107\xd1?\x9f\x9bp\xc0\xf8\xb7\xe5\xbf5B\xff\xe0\x0cd\x03\xc0\xfc\xf9a\xf4Ut\xd2\xbf\xe3v\xfalH\x18\xf1\xbf\xbf;3~\xf7\xb4\xb2\xbfsJ\xc5\x1fV\xda\xcb?\x8a\x9ew\xf3\xff7\x06@\xbd\xed\xa9\xce\xf3\x9c\xd6\xbf\xca:\x90B&\xbf\xfb\xbf\x88\x08AAL_\xf1\xbfJ\xf8\x14^di\xf7\xbf\xfdYz\x1e\xa6\xfd\xfb?A^\x81\xe9\x1b9\xce\xbf\x86\xcb\x0fE2L~?\x85\x84IO0&\xfa?\xf8\xdd\xb7\x9c{\x7f\xd7?\xc2\xb2D\x86\xa1\xaf\xe1?uB\x0fDA\x7f\xe7\xbf\xb1%\x18)\x91\x06\xd2?e\xf9\xbd8\xcd7\xe5?\xe6\x0c\x94\xbf\x04\xad\xf9?0\xc1\xa8\x07L\xd7\xf1\xbf\x1b\x81a\xa3\x7f*\xe6?\x8d\x90\xc2\x10\x00\xf6\xe0\xbfP\x92Q\xb4\xd9\x16\xba?\x95\xc6P\xe7\x12b\xbb?\x11O\xfbw\x86\xa7\xfb?\xfe\xd1\x1d\x9e4\xf7\xf0?f\xdc\x90_\x87t\xe6?\xfa|\xe4\x83)\xde\x98\xbfc\xce\xa4\x96\xba\x04\xf4?\xa4\xb5\x896\x97\xd3\xfa\xbfc\xe7\xe4e\xe5\xc5\x86\xbf\xee\x07(\x13\x191\xe0\xbf\xa3;@~:.\xe7?luY2b\x01\xe4?c\xc78\x9cnn\xf1\xbf\xdb\x98oA\\f\x03\xc0v\xafB\xc8\xfd\xa2\xe2\xbf\xfb\x05\xcb\xf5\x95\xeb\xe6?2V`r\xa4<\xce?t\xa6Y_yu\xe5?\xb7@\xc3u2\xab\xdf?\xb1/\x01\x16\xc5\xe6\xe5?RL\xdb\xe4\xa6\xe8\xee\xbf\x95\xaa\x86$\x16D\xd7?\xf9\xbd\xf1K\xed\x85\xac?\xa2\xdb\xcd\xc5a\xdf\xf2?\xfe\x0b\xbe\x89\xfb\xe6\xf0?p\x94\x8c\xcf@:\xf2?7R\xc84Y\xa1\xeb?,\xff\'\xb1v\xdc\xdf?\xf3\xa8\xc1\\\xcc\xdd\xe1?\xb6I\xf2V\x03\xb8\x00\xc06\x9f\xb2J\x16\xa9\xdc\xbf\xa1\xe8W$f9\xae\xbf)\x9e\x86\x8a\xbf\xd5\xeb?\xe0\x85\xef\xfd\x93T\xfc?W1\xfd\xee\xb2x\xe9?\xf0"E\xe4\xa5\xb8\x03@0\x05\xd2[\xfe\x96\xcf\xbf5\x08-\x08v\xc7\xa9?\x1e\x7fg\xed\x9d\xcd\xb8\xbf+ke\xb6\x0e\xf4\xf9\xbf\xe8\x1bs\x8d{\xca\xcc?\xe8G\x81\xfa{\xed\xd2?\x0b\xcd3\xdf\x8e\xf7\xee?\x19\x06\xe1PR\'\xd7?\x0c-\xdc\xcd(~\xf9?\xc0\x99\x07\xe1-\xca\xc5?b\xf7\x80E|N\xd4?\xdd\xc3t?<\x98\xb2?\xc1m\xb9\x0e\xce\xf4\xf6?^\x11B\xef\x10\xdd\xba\xbfL\x9f\xf9\x17#\x03\xd5\xbf\x82\xdbxnF\xf1\xdb\xbf\x02~e\xf6Q\x0c\xf1?\x7f\xca=ht\\\xf4?k$bFl\xae\xf2?d\x874\x14_\x1c\xea?9\xa4\xa7\x19`n\xd0?\xc7\x97V{^\x03\xef?\xdf\xd0\xc7\xc2\\N\xee?\x91\xe7\xd8\x1dh|\xed?`"\x86\xde\xb4\x97\xfc?:\xdd\x94hD%\x06@-\xcf\xdc\xa2<\x84\x00@\x1f89\x9c4\xa4\x05@t\xba\\&\xbf\xec\x02@{\xad\x99xq\xc9\xf0?J\xcb\xc6AF\xb3\xfa?\xa2\xcaL\xf9=\x88\xd0?\x1dK\xec-\xae\x81\xe0?\xca\xfe\xdf\x12\x8cH\xda\xbf\xb4\x1c\x90\xfeu\xfe\xe0?v\x8br\xd2\xda\xc7\xe4?~(\xd4\xe7|T\x94?P\x17XeB\xd0\x94?\xe9\xea\x90*\x01\x90\xe0\xbfn\x03g%\xffZ\xe7\xbf\x86\x01z1\xd3\xe8\xb1?Z\xc7\x15\xd1i$\xe5?y\xaf\xb5\'\x1dE\xec\xbf\xd1\xa8\xe5\x8dS`\xf4?,\xd6\xfb\x9d\xea-\xe6\xbfX\x1f\n&G\xd5\xf8?_\x9d\xc9\x1a\x9d\x83\xfd?\x0bz\x07a\xcc\xc0\xeb?\xd4i\xf5\x0cF\x10\xfd?\x131=\xdc\x0e\xcc\xdf?N\xf0=\x1a\x04\x11\xd5?\xe9\x97t\x03\xa6\x0e\xf6?\x92\xde\xf5,\xd6\xfe\x04@eW\xba\x90C\x86\xf5?\x16\x87\xd9\x87_\xfe\x03@\x99R\xe9\xfc\xc9\xad\x03@\x9f\xc0!\n\xcdt\x03@\xfd\x92\x0b\n6\xec\xf5?\xe5z"\xff\xe5\x7f\xef?M\xc3\xd3\xe6\xfb\xd6\xe9?\xcc\x96.\xcd\xbe$\xdb?\xe3z\x8dh\x04\xd1\xca\xbf\xbf\xed\x02P\t\x8b\xec\xbf\xc6\x84\xf6\xef6\x01\xd8?\x1a-\xeaG6\x18\xed\xbf(\xa5!l\x93s\xdb\xbf\x9b\x13G\x12\xe3\xdb\xf4\xbf\xcd\x03r\x0b\x03j\xf3\xbf\xe6\xb3\xdc\xc5\xc0>\xe3\xbf+\xabw\xc2z\xe3\xce\xbf\xef<\xf2j\x07>\xed\xbfB\x9b\x8a\x16\x8bX\xad?\x18z\x96\x96#P\xf2?v\xab\xba\xd94\\\xb9?\x97\x16GT\xd6X\xfd?\x95\xf9\xd6A\xeb\x9e\xff?\x15B\xb8\x02\xf9[\x05@C\x18m\x8b\x15!\xed?k&\x84MHP\x04@\xb5\t\xb3\x8cdE\xf4?\x8f4\xdb\x8c\xaf\xb1\xf1?\xd8\x82\xa9\xe73\x1f\xe6?\xb9\xc1tl\x02\x13\x9e\xbfU*F\xd2d3\xe1?\xdf\x1bYr\x86t\xdb?\xfd5$S\xf8\xfb\xf8?\xf1\x94\xc5A\x95\x98\xf9?\xfc\xbd\xc6\x07\x82\x94\xe1?)\xbd\x17\xd1;:\xda?\xca\x07R \xd7\x1a\xcb?\xe7\xdf\xde\xc7~\x94\xf1\xbfu\xc5\xbd\xb6\xd7A\xc6\xbf\x9d\xde\xde\xa1S\x1c\xee\xbf\x84\x9b\xa6\x895\xc6\xec\xbf\xecp\\\xcb\xa3\x16\xf2?VE\x0bY\xd9\xf4\xc9?\xd8f\x95\xf3^\x06\xd9\xbfj\x94\xfb\\\xee\x1f\xe8?^n&R\xb1`\xf2?\xcc\x03\xd7\xcd1E\xe0?\x07\x0b\x85\xa8 q\xd5?\rf\xad9\xd3\x9d\xf0?\xd9/\xd4\xf6?\xa9\xe8?>4\xb9\xfa\xf1,\xf1?\xc4"]\xfeT\xcc\xda?\x1a2\xdd\xe64D\xf8?qr\x86V\x8b\xb1\xf0?H\xaaVE\x1a%\xd3?&Z\xa5\xd7_&\xe0?a\x91\xb4As\xfe\xe9?\x91\xa9\xab\xf0\x9d\xf4\xf1?|\xbf\xfd\xc4R\x82\xba\xbf\t\xfc\xcb&\xaf"\xc7\xbf\xda\xaa\x17>\x84:\xf4?\x8crg\xf3 \x17\xd9?\xef\xce\x08\xa8\xdf\xf2\xf5?\xac\xde\xfd\x93hr\xfe?V\\\xea\x848\xbc\xee??\xd7\x954\xa3^\xd1\xbf\xb0\xc7\xf8\x06s\\\xd2?\xadf\xf0\x81\x81\xb2\xf0?M\xbd9\xaf|\xa9\xc1?W\xb4\x89\xe0ZK\xc5?UL\xcb\x06\xc1\xed\xea?Z\xc6\xd9\x80\xb88\xdc\xbf\r\xa1\xbd4\xe9m\xda\xbf\xab\xe2lL\xa8{\xdc\xbf\xa0v\xa3\xe6Tu\xce\xbf\xd03f\x1d\xb3\xb3\xea?\x93\xc2\xcd\xae<\x8f\xea?\x08N\x97\xa1\xb8)\xc0\xbf\x99\x9a\x9f\x97\xab\xba\xd3?&Nl#\x82\x1e\xd5?\x1c\x02\xf9XL|\xa4?S\x99b q{\xf0?\xbeK\xec\xa4\xf0q\xdb?\x0fe\xed\xc4\xc3\x17\xe7?\xfa\x97\xb8(\xcc\x81\xf0?\xe1\xf3\xb7\xf6H\xa7\xf2\xbf\x84\x18T\xa3\x86\x08\xd1\xbf\xaf4\xa6DQ\xe2\xde?\xb5\xec\x9f\xbc\xfb4\xe0?\xe2\xa2\xcdJ,\xa5\xee?b\xd2\xda\x03\x9d\x1c\xe2\xbf\xa6\x8c\x1c9\x8cC\xe2?\xe6vzZ\x1f\x83\xf1\xbf\x16\xce\xb8\x85\xf3\xde\xf0\xbf\xe7\x05tJ\xca\x04\xbc\xbf\xcc;\xdc\xec\xb2d\xaf?\x1b\x88Rc|2\xf3?\x97\xb2w\xdfl\x10\xdb?e\\\xfeN\xe0M\xde\xbf\t\xe7\x98\xf2\xd6\xe1\xde?\\\xef\xb2M\xc2/\xc8\xbf\x90\x16M\xb8\xbb\xc2\xca?@\x11l\x8a\x1f\xff\xc6\xbf$\x03\xad\x1dF\x96\xdc\xbf\x8d\x14\xc0\x89\x99b\xf2?)\xda\x9d\xb3\t\xdb\xd9?\xcd#\x1e\xd2k\xc4\xd2\xbf\x0e?h\xab\xd5\xd6\xe2\xbfj\x95"\x98\x01D\xca?\x83\x91X\xf8\x8a"\xcb\xbf\'\x95\xff\x8da5\xe5\xbf\x9f\x8a\xb0=\xce\x87\xf7\xbf\xf6Y\xa3\xe9\x9fe\xe8\xbf\xa0}\xad*\x8f{\xb8\xbf<\xec\x19\x92\xc2\xb5\xee?i\'\xb9p\xdd\xbc\xdd? T\xfdv\xd4\xff\xdd?q\x14C\xbe-\x88\xf2?\xf0T\xcc\x8c`\x95\xf5?%L\xf9xY\xfd\xd5?\xc5\x1am/\xb6R\xed\xbf\x9c>\xd2\xd1u\xf4\xd5?S&\x07\xbfK\'\xdd\xbf*w\x83\xef\x90\xd8\xcd?W\x8co_\x7f\r\xf4?\xb0v\xf8\xf9\x82h\xf1\xbf\r\x15|=\xfcL\xbb?\xe9Dd\xdd\x7f\x93\xe9?\xc0\xf7\xe80\xdf(\xe6?o\xd3\xaf\xf2\x1f\x9e\xe5?z3a\xb6\x0f\x90\xc8\xbf\x93\'\x98\xe6(\x16\xd4\xbfmD\x9dX\xf1\xf4\xd7?n\x9a\xef\xe0^\xc6\xd7\xbf\x8c\x1aE#\xdb8\xb1\xbf\xf4\'\x87\xd1\x1eM\xd9\xbfCFD\xc7\xee"\xc1?Y\x92\xe5\xc6i\x18\xf3?\xa6\xc6\x9b6\xd5\x1b\xd8\xbf\x95\xddP\xa0\xb8\xcb\xf5?-/d0N\x92\xda\xbf)SZFh\x90\xd2\xbf\x9ex\xb7\x85)\xf3\xf1?\x98\xd0\x12\xab\xb0S\xd4?\xf2lt\x15\xc7sl\xbfleX\xf3\xcb\xae\xb3\xbf\x1aO\xee\xe4\x1a4\xd7?H\xad\xd2y\xe9\x85\xea?i\xbb9\x8cq,\xf5\xbf\xba\xbc\x83[\xca\'\xf1\xbf\xc58\xaf7c\xa2\xc6\xbfr\xa58\xe0\xcb%\xf1\xbf\xbb\xe8\x07\xf83t\xdc?\xc6m\xc3#!Z\xe6\xbf\xd8\x11\n\x97:]\xd5\xbf\xb2\xc5u\x86\xeb\x8a\x02@a\xcf\x81T\xfe\xe7\xe9?1\xddZ\xda\xf5\\\xed?ff\x19\xfa\x81i\xe1\xbf\x0b\x163\xdaK\x8d\xe3\xbfr\x9f\x12\x81\x01\x84\xd8?\xe53\xa0\x97Uw\xd6\xbfn\xe7YAFO\xbe?\x13\x8cj\xc0|\xc6\xdc?y\xd4\xbc~\xed\x10\xee?8\x87Mj\xb0\xda\xe8\xbf9\xad\xe2\xb4L\x8b\xf3\xbf\x05{\xd8\x97\x16l\xbc?\xe5\xea\xba\x8ah\x89\xe3\xbf4n\xc2\x06\x94\xa0\xf4?\x0f\xa0/\xd5\xe0\xa9\xe3?\xa4\x85Os/R\xc7\xbf\x8f\x06r\xfa\xdc\xd1\xd5\xbf\x93O\x04?%.\xe6?\xa3\x91\xb9\\h\x83\xe6\xbf\x04\xe0\xf1\xd0\x98\x1b\xd8?\x89d\xe8?\xf8\xb6\x1b\xda\xba\x7f\xb5\xbf@\x82m\xbf\xe4\xc7\xea?k\xf5\xc2\x1b\x99\xcb\xd9?\r\xb3\x83\xf3\xe4T\xdf?(/.}\xad\x7f\xdc\xbf\x8a\xff-\xfc\x06\n\xf5\xbf\xea\xa7\x1f\nke\xf0\xbf\x15\x1bp\x91\xc7\x84\xc1\xbf\xa2^\x0f\x9b\xc4\x84\xf1?\xbcu\xc3T\x83~\xf5?\xc8\xed\xc3\xa2K\x81\t@\x00S\x99~O%\x15@N9_U\xb9v\x0e@\xd4iC\xf8b\xeb\x06@ur2D\x93^\x06@\x843?\xa7\x1a\x08\x07@\x16\x1a\xbcl,\xfe\xfe?\xcc\x11}\xef\xbfO\xef\xbfW\xd7k8F\xb6\x00@\x87\xbaU.\xfa\xa4\xa4?\xf6\xe2\x8e\x95?C\xf6\xbf\xbe\xeb\xf3<\x1a\x91\xb5\xbf0\x1e\xe69\x8b\x87\xcc\xbf>\x02]\xadq\xc0\xed\xbfa\xfc\xa0\xa9e`\xe4?\xae\xe5\xb4\xb9\xe8\xa5\xdf?\x8d\x91+\x876\x16\xa8\xbfw\xb88\x8c\xaet\xe8?\xac}Q\xec;\xb7\x00\xc0\xe9\xb4.\x98\x16\xa4\xee?\xeby \x00\xcd>\x9a?\x9f\xd3\xf1:\x10\\\xe7\xbf\x98u\x8dp~m\x90\xbf\xc7\x82\xef\xdc.\xb2\xe5?\x08fN?q\xb1\xf3?\xfe\xb8\x15\xd3\xd0\xb0\xda?\xdb\x8b\x91\x115}\xbe\xbf\xec.\x19\xe0\x98u\xeb?\x06\x07\xe7\xd3\x080\x03@\xf3w\xef\xc4\xa1W\xe6\xbf\xbe\xcb\x18\xc9\xbd\xef\xe5\xbf\x90\xfdf>\xad@\xf0?>6\xc2\xe5\x8d)\x00\xc0\x9cG\x98$\r\xa4\xfc\xbf\x99\x1c\xf6\xbc(\xd8\xf6\xbf\xb1~\r<\x84\xd5\xe0\xbf2\n\x8b\xce\x9e\x85\xea\xbf\xf0!\t\x80\xc7\x95\xfa\xbf\x83\xd3\xee\x8d{\xeb\xb3?lY\xa7\xfe&\xf3\xff\xbfp/\xb0m\x8a\x97\xe1\xbf\x88\x0cv\xe8\xdb\x19\xea?b6*\xd4\xb2\xd2\xe7\xbf\x01Si\xc7\x11\xd6\xd4?\x82\x98\xb2hU\x95\xfd?\xde\xce=\x0c!\xa2\xf0\xbf\xc5joN?\xb1\x01\xc0\xad;\xc13\xd0j\xd7?\xcf\x97\xac\xad\x93V\xd9?,\x13\xa1\xa3\'\xaf\xe7\xbf\xf3\x12\x8e\x15\x8d\xa8\xb8\xbf\xce\x96\xa9\xb8\xec\xfa\xe4\xbf\xce\xb1"x[\x1b\xdd\xbfxCm\xfel@\xf8\xbf\x98\x99\xf0\xb6x\x0e\xf5\xbfb\xed\xc7\x02\xcf\xb0\xfb\xbf/\x7f\'+\x93\x98\xed\xbf\x8b@\x1b\x7f\xc7\xa5\x03\x13\xb5?\xf5l\xd8\x96\xcax\xf0\xbf\xfe\n\xc0\xa6\xd9\x1f\xc8\xbfe\xfe\x97\x1d\x90\x12\xed?w\xca\xf6\xbaR\x12\xe0\xbf\x96\xfc;\xd0n\x9e\xc1?:J\x14\xb3\xbd\xa5\xcc\xbf\xc2\xa8\xf73\xdb+\xe7\xbf\x01 &+\xa4B\xfe\xbf\x1f\xda\x1c\xb3\xe9M\xfd\xbf\xb9\xc6]\x97\x00\xb4\xe6?\xf3\x03/\xdf\x87>\xfc\xbf\x84\x19=\xa8\xeb\x90\xf0\xbf1\x8a$]s\xba\xee?D\'\x1b\x92\xd9v\xc8?\xdbF).\x8b\x1b\x06\xc0\xf3QW2F\xbe\xd8\xbf\x98\x9be}\xf8\xc5\xfc\xbf\xa0\xae\xff\xd9\xce\xdc\xf3\xbf&"{\xbe`\xd4\xee\xbf\x0bx.\x1ft\xfe\xf1\xbfZ\x84\xe89\x8e6\x03\xc0\xa1O2\xa6;\x1b\x02\xc0\x86)\xbb\xeb{O\xea\xbf\xfe\x8c\x7f\x1bD\xe3\xea\xbf~\xb5\n\x9e\x14\xb4\xf8?2\x90E=\xae\xc9\xf2?\xc9\xe4\x93X\xfa\x12\x07@7v4\xba@@\xc9\xbf\xbb\xe8\xbe8$!\xb8\xbf\x8f\xb1\x17\xb9\xba\xdd\xea\xbf4\xb3\xa4\'\xf0\xe2\xc8\xbf\x01%(\x83\xde\x17\xe8\xbf\xb0\xf5\xd1\x89\xd0\x02\xd1\xbf\xda\x18U\x81\xd1\x87\xf0\xbf\xf7\x80|\xbe\xe8\x19\xfe\xbf\xab;\xb7\xdd\xbe>\xf8\xbf\x16\xca\xbe\x11\xe4\xfc\xb1?}\x11m\x08a\r\xc6\xbf\r\x84\x99\x1d\x18\xc1\x04\xc0\xe2\x17\xb5\xd1\t\xd1\xd7\xbf\x9bxXf\x9a\x93\xf2?a\xac\xb4\xfb\x19R\xd0?\xc1\xd0BO\x90b\xe0\xbf\xb3_I;\xa9\xec\x04\xc0].\xa9}\xb2o\xe2\xbf\xe565\xcc\xe4u\xd2\xbf\x88\xd3\x9br\xeb\x1f\xf0\xbf\xee\x01}\x89\x1c\x12\xf6\xbf\xef\xaf\x08L\xd9\xa4\xf5\xbf\xbd\xe1}\xf7\x0f\x95\xf2\xbf{\xacg\xcf\xd9b\xf9\xbf/\xbc2#\xd9\xda\xfe\xbf+\xa6\xe3\xc5\n\xde\xf1\xbf\x84\xb8qk\xc6\xbe\x0b\xc0s\xa3\xc2\xaf\xfaQ\xec\xbf\xf2\xb8\x93)\x878\xc4?p\xc5\x06\x0f\x9cY\xfc\xbf\x9e\xef\x86\xd1\xd63\xd9\xbfx\x93Q\xe1\xa0\x13\xb8?rX4\xa6Q\'\xbe\xbf\xf6\x81\xb1I&\'\xd8?\xcez\xc0\x89\xf3H\xf0\xbfW\xb2\xae\x06}\x84\x08\xc0\x86T\x05\xe9[J\xf8?:wv\xcf\x90\xb1\xf1?\x84\xcf\x03\x18,f\xe0?\xb0T\xcdsw\xb6\xdd?2\x84\xd4\xa7\xad\xd0\xbf\xbf\xe1,\xff\r\x8a\x8b\xf8\xbfa\xf28\x92#:\xfe?\x07\x11\x8d\xd6\xe90\xeb\xbf\xbf\x87\x88\xaeI\x80\xfb\xbfsw\xed\xc09\xea\xe0\xbf\xd3\xe2qP\x0fb\xb9?\xec<\xe62\xc4\xd6\x13\xc0\'\x93\xaf(\xc4R\xd8?\x10p^\xa1\xcd\x1e\x12\xc0`;7\xfe\xbb\x19\x13\xc0\xef\x05u\xa8\xf4y\x03\xc0m\x12\x9dc\x97\xc0\x07\xc0T\xc1\r\xea\xdc\x10\x03\xc0c\x88\x96\x9f\xd3q\x16\xc07W\x9b\x17\xd3\x16\x0f\xc0\xd1Y)tVv\xc1\xbf\xe1Z\xd3f\xb6g\xec\xbf\xe9\\Fj\xe5i\xfe\xbf\x02\r\xbf\xc4C\xf4\xe9\xbf\xc2\xc3q\xf0A\x0b\xf2\xbfr\x0cM\x83\xb6\xa5\xf3?Y\xf5\xe5\xa4\x80\xf9\xe0\xbf\x13|\xbb\x1b\x7f\xea\xe4\xbf\xbc\xc2S(oh\x01@\xfd\xb9\x83\x95\xe7\x8f\xeb\xbf\xb0V\x0f\xb7\xdf>\xc2?\x95\t\xa5}z\xf0\xf5\xbf%v\xdf N.\xe8\xbf\\\x0bOl\xee5\xcc\xbf\xfbXI1\xbd\x0f\xfb?(\x15\x0fY\x83\xa5\xf1?\x8e\x8f(=l\'\xb7\xbf3cKZ_n\x00\xc0\xbb \xa3\xfb\xe2\xc8\xfe\xbf\xc0~\x81\x10E\x15\xfa\xbf`\x10\x0co\x8d\x9c\x0b\xc0*\x8e^\xb7\xb5\xca\x0e\xc0\x07,\xf0\x7fo\t\t\xc0\t\x1dg\xb2\x9d\xc0\x06\xc0\xdf\xc8\xce\xfd\x11\n\x05\xc07\x13|$\xda\xe4\x02\xc0\xc2\x13\x9c\x9fl2\x10\xc0\xee\xbe\x1ap\x81\x80\x06\xc0\x02\xbf\x9f\x03&\xf4\xe3?\xb6f\xec\x9b\x02\x18\xb7?A1\xcd\xf92\xab\xe7?8Tv\xae\x12_\xf6\xbf\x19\x9cUS\xba"\xdc\xbf\xa9nGz\x1eK\xea?I^Q=\x1e\x06\xf2\xbf\x8ez\xde \x15k\xe4\xbfw|\x04\x00X&\xe9?\x0b\x0b\xbe\x04\xc3X\xef\xbfD@Y\xcb\xac=\xeb?\xcc`\x80\x1a\x81\x85\xc8?\xcfb\xa5mh(\xf3?v\xdf+Y\xe5\x10\xf5\xbf\xd9\xfbl\xee\xf31\xd3?H\x1d\xc1\xfe\xa1a\xee\xbf\x08\xe7P\xfa\xc6\x02\x85?\xcd\xd1OF\xa8\xdb\xee\xbf\xf1w[\xa7}\x08\xfb\xbf\xc5\xda\x17\xba\x9a\x01\xfb\xbfX\xf1\xd3\x0c\x83\xb0\x05\xc0\x9b\xc6\x19\xb5\xbaD\x04\xc0!\xdaK\x1f\xc3\xa2\x05\xc0\x14\xeb~\x12E\x0e\xef\xbfL\xcaQBc\x8c\x05\xc0\x91\x185\xfa\x88\x8a\x02\xc0\xbfx\xa9\xd6[\x9b\xf7?1\xa3x\x7f\xc9\xdc\x92\xbfzV\xcfN\x1e\xf9\xb4?y \x9eC\xd6\xeb\xbf,\x12\xe2\xc7\xe3N\xe2?X\n\xb4F\x82\x05\xe1?\xca\xe3\xa4\x8c\xc4\xd0\xc4?\xa1\xf2dX\x12F\xd7\xf4\xbf\xd2\xbf\x94\xd8\xd5\x86\xf3\xbfQ\xfb\xb6\xda\xae3\x00\xc0\'\x19f\x00\xd4\xf0\x00\xc0\xbb\x17\x84h\x0e\xc3\x04\xc0\xe21@\x0c\xf5*\x05\xc0\x8d\xd0e\x06n\xc7\xf1\xbfe\xc8\x80\xc1\xe2\xfa\t\xc0\x8f\xfa\xf0\xd4\xa6\xce\x01\xc0G7M<\x1b\xd4\xf2?\x1f\xc9jHD\x0f\xaf?(aZ\x1d\xee^\xa1?\x10\x12\xdc\xbb\x83\x03\xf5\xbf8\xfdg\xe9\xc2\xff\xba?\x1f\xef\x8d\xe7\x1c2\n\xc05\xeaK\x1d\xd5A\xd0?\xf0\xe6\xcd\xd0\xc7f\xc5?\x0f\xd4\xd4\xa7\xb6\x87\xb1\xbf\x9f\xd1\xa9\xb5\xbe\xf5\xfa\xbf9\x1a\xa9\x18\x9f\x13\xf5?\xeb\x12\xc5T\xd0o\xf0\xbf\xcf\x14\xe5md\x8b\xfb\xbf\xfd\xd2\xec\x84\xf3\xa8\x01@\rEi\xd57\xc9\xeb\xbf3\x8fU\xfe\xb9B\xe1\xbf\x8e\x8a\xea\xd8\x08\x8f\xea\xbf\xad\x9e&~\xcao\xe4?w\xd2\\[\x92\x01\x00\xc0w\xad\xd4\xf8\xcc~\x11\xc0\x9c#\x01>\xa3\t\xfc\xbfJ\xc5\x90\xec\xa3\r\xf7\xbfec\x8d\xf9\xf2V\n\xc0T!\x05Q5N\xff\xbf:G\x1e\xf2\x17B\x01\xc0]7\xf3y\xbb\xcd\xd9\xbfj\xf5}\xc9\xd7\x86\xe8\xbf\xb5\xbc\xd7{\xeb1\xeb?w\xb0\xfa\xa7iQ\xf9?\x85f\xb7$\xf3\xd8\x05\xc0:\xa04qp\x1a\xe0?i|\xbf\x02\x80?\xe3\xbf\xe1n\xc6\xbdy<\xb4\xbf\x060\x8e&\x06"\xe3?\xf3\\\xccK\xedN\x81?r"\x19\x80U$\xf5?Y\xf3\xbf\xa0\xc3\xb4\xd2?\xc5\xd5^\xb2\x03\xbd\xf5?\x9dp\xb6\x0eX3\x01@\xb5\x0c\x8e\x84d\x0f\xe6\xbf\x9b\x9b\x1f\xb5\x94\xea\xe2?+\x806#\x1b\x9f\xe5\xbf\xa11JZ`X\xe1\xbfsUB\xc5Z\\\xca?DK\x16\xb6ny\xfc?\xba\x99\xdd\xa3X\x9c\xfb?`]\xb7Y\\K\xfa\xbf\x16\xc8G\xf0W\x11\t\xc0e\xe0V\xd0\x0f\xf6\x07\xc0E\xdd"\xbc\\\x07\xeb\xbfx\x0bS\xab\xf1\x1f\xe6\xbf\x0e\nq\x04\x83+\xe0\xbfO\xd0\xf9\xdfc\xd0\xdd\xbf\xf8a\xc0\x06m\xe9\xf0?\x0c\xfe/C1g\xbf?\xfc\x0f\xcf\xd3\xd1\xcd\xe2\xbf\xa3smS\xa2\'\x02@\xd2\xf8\x08_\x16R\x9a?\xe8\xdan\xca\x1aY\xe2?\x91\xbe\xa4\x83{\x80\x01\xc0l\xa1\xdc="y\xe3\xbf\x1cj)\xba\x99z\xf4\xbf\xeefP\xfa\x88\xce\xf6\xbf_\x86\x14\x1d\xa2=\xfb?\xf8\xd2\xcf\xc0\xeaa\xde\xbf\x8f\xc7\x97\xa7UX\xcc?\xdc\xe0K\x1ek+\xf8\xbf\x83\xb0#\r\xdf&\xd3?\x03\xed`w\x83\xaf\xeb?&e\x1cA{\xdb\xd5\xbfu\xfa\xf8\xb1\xc5"\xf2\xbf\x93\xab\x8e\x07\xd2\xd1\xc9?;\x07,\xd5)\x88\xf2?\xc9tZ|\x05\xad\xd3\xbf\xc2\x928u\x16I\x0c\xc0q\xfc|\x1c\x7f\x06\x02\xc0\x83u=\xf7\x12%\xb1\xbf\x84z\\\x9a\xf2\xd1\xec?\xc0\xb2&H>\xf4\xcf?\x85P\x8a\x82\xe1\x1f\xd6?\xeaj\x8d\xaa`\xbd\xed\xbf.p\xad\xb4\xccE\xd3?\x05@\xbc3\xbf{\xfc?B|s%\xb4\xac\xfd?\xf7\xfa\xb0\xa1\xb3K\r@\x0e\xd15Ri\x8b\xf8\xbf\x94\x0ca\'j\xb6\xe8\xbftk\x82\x1d+:\xd3\xbf\xc3k\xed\x92\xc2O\xea\xbf\xc8/\x06\xd2s\x01\xc2\xbf"\xee\xf0\xb7V\x8b\xe1\xbf\xdbH\x95vpH\xc7\xbf,\xb8\x9b(?\x1b\xf4?\n\xfe\x8e\xe7\xd4\xf7\xef?\x83*\xd9\xa6\xaf\xb0\xd8\xbf\xb0.)+\x81 \xe7?\xd6\x7f\x86r"\x11\xde?\xbe\xe4c\x88\xfc\xf2\xc4?\xea\xa1;g\x9d\xa5\xb3\xbf\xf6\x1d\x1d\xf8\xa9\x1c\xfa\xbfLG}\'H+\xe6\xbfe\xbc\x15\x8e!+\xf8?50"4_]\xf8\xbf\xee&!\xdbZ\x92\xe0\xbf\xd7X\xa6\x9e\xc3\x13\xf3?\xc2~(_\xdb\xd6\x00\xc0\x0c\xd4\xcf\x98^\xc9\n\xc0V\x17\xa2\'\x07\xae\xf8?z\x87\xbc\xee\xff\xbc\xe1?\x19a\x1c\xa7\xc7@\xe0\xbf\xce\x00\xd4U\xc2\xcc\xdf\xbf\x0f26\x04\xaf\xe4\x0b@\x14\xffpO\xd4\x98\x00@\x8d\xb7q\x95\x15\xc5\x01@\xda\x19\xbbx~j\xe6?8)\x15lR\xfa\x00\xc0C\x9a.\x04\x0e;\xc3\xbf\xbb}\x12\xb9\x91x\xfc?\xbd\xa2$\x0bw\xf6\xf4?\x14o\x00\x18\xe9\xec\xf4\xbffM)U\xab\x7f\xde?}\xc6\x81\xe0\x84\xd8\xe8?\x08T&\xab\xa0\xa6\xd5\xbf)\xf3Vx\xf5\x9a\x0c@[\xb1\x06KC\xb3\xe3?\xd4\x9c\x143nX\xe9\xbf\x92Oq\xd5\x92\xd5\xc1?A\x82mK\x17\x8c\xd4?\x887\xb0\xe5i\xf0\xe1?\x80-\x7f\xfbu2\xe8?L\x91\x80\xbc\xe0\xb8\xc1?\x1e\xee/\x1d\x027\x03\xc0\x83\x07\xd6\x0b=,\xef?\xc7\xb9\xc1\x96\\\xe4\xf1?\x8f\x96N\xae\x16\xb8\xea?\xd9[\x8di\xac%\xcf?\x99!\xcb\x05\xea,\x06@Q\x96\xbd\xfa\x9a\x7f\xe5\xbf\xa9\xefD\xae\x15D\xd3\xbf\xe1J\xb19t\x08\xd5\xbfH\xba\xe9\x1d\x16\\\x00@\xb7\\\x81\x11\xf0\xc7\xf7?\x10\x9aI;\xef\xbb\xf9\xbf\xa1\x1c\t\xed>M\xd6\xbf\xed?\x86j\xcd\xef\xf4\xbf\xde\xeeh\x9a\xf8\xff\xd7?zUM\x8d\xc9W\xfb?h\x17\xaee\x90\x8e\xcb\xbfN6\xbe\xb7\xa3\x1e\xf4?\xe8d\xf5\'\xbd{\xb5\xbfeLZ3\xae\xcc?\x8bX\xbf\x96[\xd6\x01@3\xb7\xd4\xf2\x92\x07\xdb?\x0b\x81^\x1eJ\x82\xf7?\xf1\xf9\xbd\x88\xeaM\xeb\xbf\xdal\xf3\x85 {\x03@Z\xb8\xec\x0cO\x81\xf5?\x89\x1a\x0b\x80m\x98\xf3?|\xd8\xd6\xcb\x9c7\xfc?\xdc\x14\xab\xc3\xb5\xf0\x98?\x04e\xe2\xa2\xcc\xe1\x02@\xe8l+\xe4\xf9\x81\xf4?\xc0\xcb\x93\xc0+\xf6\xec?nP\xc4\x1c\xe1\xc1\xc7\xbf\x85\xcex\xfd\xc0\x9b\xea\xbf\xe0)\x99\x17\x9e\xc9\xf7?\x84\x86\xf4q\xc2\xda\xd3?\xa0;\xc9\x96d]\xfe?!\x06.j\xb2\x91\xfe?\xf7\xb8\xe4\xd3\x0b6\xdc\xbf\xf9\x9b\xad.&\x84\xfc?\x1d8e%\xa7E\xe6?\x95\x0b\x06\xf8LG\x98?\xb8\xb8d`\x0b \xe2?\xc1Y\x0f\xe7\x04\x1f\xf9\xbf\xd7p%!\xecI\xa5\xbf\x01\x1b\xf3\x17>\t\xf8?\xfc\xbdR\n7&\xf4?\xcc@(?\xcb[\xdb?\xda\x9a\xedD\xbb\xae\xfa\xbfP\xa6O(\n"\x0e@\xd9l\xb8\xd8\xe1\xb5\xe1?{f\x9f\xa52\xe3\x15@\x9a\xce\xc2\xf0eJ\x0b@\xba\xaf\x84%\x1eA\xf4?5`W\x83\xfa[\xe2\xbf\xd0\xb9\xad\xc5js\x0c@)*\x9fd\xb0\x81\xfe?#\x8e\xa2\xfc&\xc7\x01@\\}\xca\xf7\xa1\xe8\xab\xbfal{x\xd8\xe5\xfd?\x1e\x1f\xbf\xe1h\xf9\xf9?\xfe\t|\x92\xe56\xc9\xbf%\\\x9e\x98\xfe\x07\xf7\xbfxu:\x88\x9a\x97\xf2?\x07|\x18\xf4\xf9|\x00@\x0e\xeb\x00\x05j\xcf\xf6?o\xb2\x88-\x84\xad\xf6\xbf\xfa\x1c\xf5\xed\xe2Z\xe5\xbf\xb2\x80\x1ba\xdau\xd3?\xf6i;\xd0\xe6\xae\xe2\xbf\x13Fh\xe3\xbf\x1da\xbf\tv\\<\xfc\xa9\xc6\xbf\x9fe\xc9\x17O\xf9\x03@\xd7%k\x12\xf0_\x10@\xd8\xd5\x8cs\xbf\xc2\xf8?G\x197=\xe7\x85\x05@\x1e\x0c\x16U\x87\x9a\x0c@\x11u\xe6\x94~\xfb\x04@\xd4n \x95 \xb7\xe3?M}*\xbe,+\x0e@\xad\xe0\xea\x1c\xf8\xb9\xdf?\';\x1f\xb2ll\xf7?QG\xec<\x80P\xd5\xbf\x8c1#\xb9\xfd}\xd1\xbf3\xc2e\x055\xb9\xf8?w\x9a\x1f\xafv2\xd7?n/#WB$\xd6\xbfg\x1cE`\xe4}\xf6?W\xe2\xf6\xd9\xc6\xa2\x92\xbf?\xf6*\x925\x99\xe7?\x12\xac\x8d\xd4|\xf9\xfa?X\xad\x7f\xcc\xaf\x97\xfd?\xbd>\xa0\x80C\xf5\xee?\x81\xfb\xc1\x06\xfb\xe9\xf7?\xca\x81%\x80\x1av\xfe?\x92\xa8j\xcc\x1e\xd2\xe3\xbf\x11\xf5\xe8\x0bs;\xb8\xbf\x94?\x96\x10\x89\x04\xe2\xbf2\xc8\x1b\xfb\xad\x87\xf0\xbf]\xce\xf8!3\n\xef?\xf1<]W\x97B\xd0\xbfJ\xa8le\xc8\x97\xf0\xbfV\x11\x00\x82t\xe6\xce?\xcf\x00\x17e8\x07\xf3?\xd8\xfe6\xa6Cc\xf9?\xcd\xaa\xbf\xc0Y\xbd\xfe?\x9b\x95#i\xaf\x95\xfd?E\x18i\xe2?\xd5\xf1?\x08F@\\\xe3\xfa\xfc?8\xc3\xfa\xaa\xc4\xe7\x04@\xf3\x80V\x0cS\xbc\x03@\xc0\n\xf6\xf4\xc8<\xe3\xbf\x00\x1a]:\xb9\xbe\xc1\xbf\x08\xc9\xb5\xb0\xf0\x8d\x03@=F\xc6\xe9\x90\xb5\x03@\x83\xb9\x9d4eS\xf4?\xedV\xb5pwQ\xf2?\xa1\xc3\xde\xf0X7\xd0\xbf\xbd\x0e)\xe0eb\xfd?\xad[3\xce\xc6}\x04@\xd7\x95\xa2\xbc\xd2e\xe1?\xedc\xd0\xf1.\x06\xc3\xbf\xbb\x98\xf1q\x0f\xb4\xec?\xf0\x06\x99~\xf2Z\xe2\xbf\xfc\x9d^\x19e\xe4\xd7\xbf\x03\xa67\x8bsD\xf2?\xb6\x99\xb8\xbb\x06\xb0\xda?\xa0\xf8\x92\xb8\xef!\xe5\xbfEE4\xfb\x0e\xeb\x00@\xd9Y}3\x92\xa0\x11@\xb2\xe5\x1e\x16\xcb-\xe0\xbf\xafS@w\xa2@\xc6\xbf\xbb\xc0\xc0B\x96e\xf0\xbf\r\xa1^\xc1\xbcF\xf1?b\xbaP\xef\x03\xee\xf6?N;\xc4\xad\xb2\xd5\xe2?C\x12\xb5\x8a\tL\xf0?\t\x8b\x99\xe6\xffE\xd9?\xa0(P\xb4A|\xec?\x0bM\x07\x9a\x01m\xfa?\xb5UX\n3\xe5\xbc\xbf\xaeA\x18\xd2\xca\xb5\x05@\xa8T\xf2`\x92\xfb\xe4\xbf\xa3_\xa8V9\xab\xa8\xbf\x82\xf4c\x19\xc4\xd0\x0b@\x11\xc8\xfb\x1f\x15\x02\xed?\xe5\xe7\x0c\x17\x96\x06\xf3\xbfz\xe7\xbd\xa2\xd7\x15\xee?W\x0f4X\xdb^\xd7\xbf\xe0\\\x83\xae]\x83\xfd?\x18d\xe2\xa29\x02\xe0\xbf\x0e3\x07i{\xe7v\xbf\xaf\x16\x0c\x882\xc3\xb5?o7\xbb\x02\xd7\t\xe1\xbf:\x10\xbf\'\xecW\xed\xbf\xb8\xda\xec\xe4\xbc4\xd7\xbf\x0e_\xa7\xa6P\x10\x9b\xbf\xc4\x9b\xde\xc7\x96D\xf4?\xe6\xb5\x12\xd9\xb1\x95\xfd?\x9ed\xe4a\xf7~\xcf?!\xeb]\x87\x95\xc3\xe0\xbf\xf6\xddq\xe0r\xa9\xd8? \xa5\x07>S\t\xe0\xbfB$\xb1\xc1\xd9`\xf9\xbf\xf4\xb4\xa1\xb9\x80\xa5\xec\xbf\xc0S\x87\x97\x90\x87\xe8\xbf\'\xb1\xee=\x08p\xd4?r\xddsB[\xdb\xf3?\xa7yldQ\x9f\xf1\xbfc\t\x11,g\x98\r\xc0\x17\xd3\r\x81=J\xf7\xbf,\xc5\xbd+\xa2x\xc1?\xee\xd0\x10\xfd\x13\x05\xc5?\xad\xf5\n8ZK\xf9?\xd2S\xe9\xa7uQ\xd2\xbf\xf5\\\xdf\x8a\'\x1d\xd8\xbf\xebC\xb3\x06E\xd4\xd5\xbf\xf3\x9c\xe9\x87\x83\r\xe0?\xedb5a\x85\x16\xcb?2[\xf7\xb2\xb9\x14\xd0\xbf\xdc\xef\xe1\xf5\x15\xfe\xeb?\x83\xdd\x88\xc3\xed\x8c\xf1\xbf\x8d-\x1c\x00\x86\xff\xdc?\xb5\xe4\x7f\xeb\xde8\xde?\xcf\x0b\xd0\x06\x05l\xd6?\x99$\xb4\'\x11`\xee?\xd12~{r\xf8\x03@qp\xc2y\x92e\xd5?\xd4\xd2\xe2(\x9d=\xf8\xbf\x00\xf4\x98\xe0xz\xda\xbf\xad\xe4\x9d\t\xa9\xe7\xec?r\xb6\xe2Y\xf1\xd7\xfe\xbf,6i\xa8`\x80\xe5\xbf\xf7z\xd2\xea\xbb\xc3\x0c\xc0\xab\xda\xfc+\xc7O\x03\xc0\x1cp\xfb\x1d\xba\xdd\xdf\xbf\xc1PS\x8f\xc0_\xb4\xbf\x073\xa9\xceR-\x02\xc0&|hU\xb8K\xf4?\x9c@\\\x82\xe4Y\xee\xbf@\x9f8\xd4UF\xf0\xbf\xb6\xd1\xbdC\xf8\xdc\xf7?\xa5\xf9\xf8I~\xe9\xe0\xbf`R\xb5\xbe\xe6\x10\xe6?<\xdb\x87C\x99\x10\xf6?\xc9\xca~\xc5\x1e\x88\xb6\xbf\x12\x12\xcc\xfeIA\xc8?\xe9u\xfa\x9fr\xe1\xdd\xbf\x87\t[\xe4\xb8\x96\xd7?%\xff\x83\x0e}\x10\xed?a\xda;\tg;\xc3?\x0f\xa0X\x9a%\xf9\xeb?R9N\xfd\\\x11\xfb\xbf\xc1\xc5\xba{B\xcc\xf2?\x8e\xa7\xa1\x16\r\x91\xec\xbf{\xdcO\xf5)\xba\xf2\xbf\r\xff\xde\x8e\x1a\x8e\xf0\xbf\x9dib\x84m\xd8\xfb\xbf>\x0c\xd5\x0fay\xed\xbf\xaf\xb8*\xfc\xc7o\xf9\xbf\xfe\x8b\xcd\x98\xeb\xb7\xe9?T\xea{\xbd\x10q\x05\xc0\xachi\x15\x88.\xf6\xbf\xb5T\xff^\xb3\x9a\x07\xc0\xa2\x85\xbc\x13\xd7e\x03\xc0\xd7&S\x9c}\xd4\xf3\xbf\xa4\xb2\xae/^\x1a\x01\xc0\xe9\x08\x04\x9ez\xc6\x04\xc0!\xe1\xa4)\xf9\xd1\xe9\xbf;\x1f\xb2\xff\xcbO\xe3?|\x9f\x96\xc7\x0b\xcb\xa5?\x8a~\x93qjA\xdb?\xb16\xa4B=U\x03@\xb0z\xb4a>\x93\xab\xbfP\xfb\xa6y4M\xa8?\xd3\x05x\x9d\xbf\xb8\xf1?4\xca\x1f\xee\xea\n\xcd?>d\x0c\xbb#P\xb2?MEQ\'\x0ff\xe1\xbf\xf1\xf2\xabRW\x9d\x96?L\xa8\xe2\xfdT\xac\xe7\xbf\xeby%\xab\x99A\xc9?D1\xe6\xa8\xa8\x85\xd0?\xbbq\xef\xd7\xbf\x81\xce\xbf\xc2#\x83\xb9B\x00\xfc?\xc3\xd92\xd0\xf7~\xe6\xbfF\xd0\xd8~/v\xf1\xbf\x87\xbb\xc0\xce\xd1u\xc6?\x06\x80 \xb3k\xe1\xea\xbf\x93\x91\xb2\'\xe2%\xf1\xbfr\xdeA\x14\x97\xeb\xcb?\xac6\xd7\xfc|\xce\xf1?\xd5\x84\x9b{\xdc\x9c\xe4\xbfYP\x85\x86\xc8>\xd8\xbf7\x014yJ\x11\xdb\xbf\x98\x9a{\xd3\x91\xe0\xec\xbf5"r-Ik\x98\xbf\x82TC?\x7f@\xe5?\x98l\xb4\x98\x9a2\xf2\xbf\xcb\x10JoH)\xd5\xbf\xd2\x9a\xf8\x85\x11\xe5\xd1?\xde5\x1fW\xc4l\xd8\xbf\xf8\xc1\xd5\xb0\xa1o\xb2\xbf\xc4l\xc4h\xc7\xfa\xc3?\xe0\x1f>/o\xf7\xd6?Gr^\x17\x83\xd1\xd2?\xf3\xd7\xc4\xd8XL\xb3\xbf\xdc\x96\xdd[?\x03\xb4\xbf#\x11\x8d\x8a\x03\xdb\xe6?\xc9\xe2\xb6\xa7\x19\xcb\xdc\xbfE\x14lz\xcb\\\xe6?\xcarY\x9b\x91\xc8\xe4?\x03\xc5T\xd1\x82\r\xe2\xbfN\x99\xcc\t\xe0e\xf1\xbf\xe5Ar\xb0_\xcc\xe6?^\xc3\x8a\x91\xf8\xa9\xa7\xbf\x85,\x19i\x1es\xc8?i\x84\x92\xb8\n\xe7\xb0\xbf\x1aZ\xeb\xca\x08\xec\xce?qF\xd9\x15)\xc7\xac\xbf\xe6K\xb9\x13\t\xa1\xdb?%l0\x10\x1d\xdf\xcb\xbfDkyn\xe9\x92\xe1?\xa0\xc7\xb5\xd1\xd3$\xe2?\x9b\xf0\x04\x1db\xde\xd9?S \xb01u\x90\xe8?\x80\xb8\xc6\xb0\xe6O\xf2?\xcb1\x17\xa4L\x8b\xeb?2\xa2q\x15 \xad\xcc\xbf\x03p\xd6\xfa\xd3\xa0\xad\xbf\xc9\xe9\xdd\xf9$\x80\xda\xbf\xff\xebt\xde\x01\xb3X\xbf\x93%\xe9#\t\xc5\xe9\xbfv)\x95\n \x14\xe5?\xb1\x0b\xc6\xee\xb0$\xe3\xbf#``\xfe\x0cq\xb4\xbf\xa0<\xfa\xde}\xaa\xf5?o\xda\xc2\x01\r\xf9\xd6?\x0e\xab\x163\x14]\xd1\xbf\xb0q>\xff\x014\xe8\xbfX\xa1r\x98\x95s\xe0\xbf\xb8\x8a\xd6$\x051\xf5\xbf\x84p\xd7.\xb4\xb3\xf6?\x11\xa1K\x16\xa4X\xf3\xbf\x02~\xc2\x12A\x81\xbf\xbfW\xcc\xc9UQ\xdb\xe0?\xdf\xeb\xe4\xc2\xa5F\xf8\xbf\xa3$Iw\xf6\xe2\xe3?\x01\x19\x7f\xac\xd7\x97\xe2?\xec\xcfH5\xc4e\xf0?d\x84?\xb5O`\xe3\xbf;\x1d\x96xuo\xd0\xbf\x90\xab\'\x81\x1f\xc8\xef\xbf\xae~V\xf8\x08\xef\xeb?2\x04j<\xb9\x0f\xed?~c[\xb2\x11\xa6\xe0\xbf\xab\xe73\xe3\x9a\xef\xcb?\xe7\x1b\\\x06\x04\xcd\xde?N\xcf|\xd6\xafj\xd2\xbf\x14\xa7`\x94\x15n\xf1?k\x81\x01\x89\x86\x82\xf7\xbf\x9ds\xe4\xe9\x81\xa8\xfb?\x07:\x90R\x8a\x19\xa5\xbfTQ\x0fB\x8eI\x93\xbf\xb9(\x1fk\x8a1\xf2\xbfo21aZ\x8d\xf2\xbf\xb86\xaa\xe3ze\xd8?a\x14\x83\xe9s\x04\xe7?\xcd\xc9\x0cV\xe4\xde\xe4\xbf\xd3M\xde\xad\xd3\x05\xeb\xbf=\x1b\x0f\xf2\xdb\xce\xe9\xbf\xb6\x82u\xaa\xf5\xa4\xc9\xbf\xb5\x8f\x9c\x86R\x9f\xea?\xc0\xa73kh6\xd6?\xdf\x1e"\xca\xac\x8e\xc9?<\x1d\xd5\x18g\x18\xe7\xbf="\x81:N\xdd\xed\xbf\xfd)\x85\x96\xee\x05\xe8?n\x1b\x80J\x16\xd4\xdd\xbf\x97\x1a\xd4\x07\x19r\xce?3\x13\x0e\xe2h\xec\xd6\xbf\x95\xbdHVa\xc7\xd1\xbf\xe0\xe13\xd3I+\xd5\xbfa\x00\x03\xc9\xd9\xf4\xf3?A\x8a\x16\xfaS\x1f\xe3\xbf\x06\xdf\xee\xba\xc0\x0b\xc5\xbfV\xd0o|vz\xfa\xbfc\xc4\xdfw\xe1\xfd\xdb\xbf1\x01Na\xe7\xc5\xe0?+\xe2\xaf\xe8\xa0:\xbe\xbf^M\xeb\xafX\xcf\xcd?\xd4\xef\xb2<\xae\xb1\xea\xbf\x89L.\xf9a4\xf9\xbf\x0c\x9a\xd8\x94\x017\xd2?$Y\n\x95\xe62\xd2\xbf&\x1f\xf787\xff\xf9\xbf\xdby\x0e\x13\xb7)\xe0\xbfn\xa6\x12U8\xff\xb2\xbf\xb6\xf0\x0b]:\xdb\xe3\xbf\x1d\xa9,\x9dJ_\xf4\xbf\x90&w\x86\xf37\xd3?@\xca\xa5\x9b1=\xf7\xbf\\U\x8a\x0b\x8e\xe3\xd6\xbf1!^\xe3\x03\x1e\x01\xc0\x13\\gwA\x05\xf5\xbfg\xe7\xeb#\x12\xc6\xec\xbfk\x94X\xc8\xcc\x07\xfc\xbf\xac:\xe8y\x87\x1d\xe1\xbf\x93Gz\xa3W{\xe9\xbf\xc3\x05-\x88\xf6L\xf7\xbf\xa8\x1b\xa1\x1b\x04\xe6\xaa?\xa0aC\xa4\x18\xdc\xfb\xbf\xa3\x8c\xf5-t\x7f\xda?\x85\xd7\xae\xc0\x04v\xd9\xbf\xb77\xb88\xd8\x19\xf4\xbf\xf8\x9dW\xdcJ\xac\xf9\xbf\xfd\xca\xfe,S\'\xe9\xbf\xfe\x1dd\xecf?\xf2?\xab><4\xb5\xa7\xa2?\x06\xf4\xdb\xf2\xec\x8d\xe1?~9\x94\xe4\xf7\xc7\xd7?F\x18\x98\xc3|\xbf\xf3\xbfu\x88\xbc\xbf\xa1\xdc\xd4\xbf\xbboEO\xf9\xf4\xbd?R8uFs\xd6\xfd\xbf\xc1\xac\xe4\xfaY\xd4\xdd?\xb7\xd6\x85~\x8f\x0b\xd2\xbfp\xee&\xae\x8b\xa7\xef?\xbc\xf1\x97\x8e\xa5\x98\x02@\x01\xde\xd0"\x17\xf3\xec?\xa2\x08W\xb1|?\xc9\xbfDeEd$\x1e\xf4?2/\xb0\xf0\xadR\xd9\xbf&\x9b$\xf2\xb6[\xe2?\xf1\x9e\xd6\xfa\xa5\x1a\x01\xc0\xcbU\xb9[\x8c\xa4\xfa\xbfi)p\x88\x88\xe5\xd2?"8\xe5\xb4@B\xf5\xbf(\x1e\xbb\xb2Jr\xe4?b{I"xb\xf1?\x1e\x0b\xf3\x12^\xd1\xc1?\xeaR\x9f\x911\x83\xe7?:\xf7\x0c\xf5\x0b\xb8\xf3?\xf7\xd6\x99OL\x89\xc7\xbfn\xf32\xc6\xb4\x86\xd6\xbf9\xd7\xa3i\x8c\xb7\xd5\xbfX\xd2\xa7G\xe6\x8a\xc4\xbf\x85\xb3\x8f\xcf\xbd\xc4\xd7?s\x97\xb3\x06rB\xda\xbf:\x1fY\xfe\x05\xaa\xe5?8\x13\x19\xbfO\xe6\xf4\xbf\xb7\x081~7Q\x00@\xc7<\x01\xf1\x0c\x8c\xc0\xbf}\xe8=F\xc6\xa5\xdc?\x91.\xb5\x10\xb5*\xe1\xbf\x8e\xc8[\xf9\xa7\xc1\xec?\xef\xcd&)\x19g\xfa\xbf\xbb W?ed\xd6\xbf\t\xd4\xd2i/ \xc6?\xa4W\xba\xac\xd2\x81\xeb\xbf\xea\x9c\x91\xf7\xb6\xbd\xfc\xbf\xda3 \x9a\xca1\xca?FG\xa3\xe7O\t\x05@\xe6\xb77\xeb\x07P\xe1?\xd2\xeb\xfb\xddB\xd7\xf6\xbfs\xfddD\t\xa9\xee\xbfa\xc5,\xe8\xb9?\xda?\xa9wr\xcf\xaeH\xe4?h\x9dw(\x11A\xf4?\xa3\xe8(\xb9=s\xd5\xbf\'\xff\x18\x9b\x83\xf7\xbd?\xd3p\xda\xb3\x94(\xd6?\xe8\xf8\x19\xdb+\xd7\xe1\xbf\x00\xc5}\x0c\xbd\xbc\xf5?M\x91{\xb4\xe6\x96\xf4\xbf\xf7\x97\xaa\x18L2\xf6?7\x04A\x8f\xf4\xc6\xe7?G\xf1\x9b\xf9fU\xfc?\xd3\xc04F\xed\xe4\xba\xbf\x04\xe7\x84j\xcb_\x91?,\xd6\x11~\t\x81\xef?L[\xfc\xe9q&\xe4?x]\xbf5\xe2~\xf4?\x0c\x15I\xb9\x14$\xfb?\x0f\x11\xb3\x83\xf4?\xd0?3\xd5\xb7\x0c\xbf\x10\xe2?\xd7o\xf0\x89u\xd4\xf7\xbf\x90\x1b\x1c\xa2\xdc\xaf\xd2\xbf\xcd\x11\x05)mG\x00@\xdd\xc9\xa6yV_\xec\xbfY\xb9\xfde\xa9/\xea?\x03\xf5\x03l\xa6m\xcf\xbfk\xd3\\\x11\x15\xa7\x00@5XE\xbe/\x9b\xa7?g\x1148\x13\x16\x85\xbf\xda^Q\xa6\x0e\xce\x00@Q\x94\xfe\xddK%\x06@FA\x1d\xb5q\x92\xdd\xbf\xd3\x85\x8ae\xd3O\xf4?\xc2\x93\x92;\xa0\x8a\xc9?[\x14\xa5\x17\xc11\xe1?\xe1\xe5\x08\xcd\xeb\xfd\xc5?\x9e\x0f\xd0\xa9\xe2\x0e\xea?n\x99G\xcfp\xd4\xf1?\xd5)\xe9\x91u\xee\xc9?\x01f\xd8~\xc4]\xf1?\x8e\xf8\xad\xce\xab\t\xf4?^\x0b\xe2t\xd1:\xef\xbf\xbfa\xe5\xf5\xad\x10\xf4?1\xc4U+\x86F\xc4\xbf6\xe2i\xdb\xd8d\xee\xbf\xcc\xa6\x12\xad\xeeb\xf0\xbflw\x0f\x07\x07)\xf1\xbfm\xce\xef\xbe\x14w\x00@f\xa7\xafo\x8d\xe0\xfa?\xf6\x12\xa1\xf3{;\x02\xc0\xc9\x01\xe5\xc1\x95\xe2\xc4\xbf\xc8iw\x01\x91D\xe0?\x19\x10\xec06\xa7\xe4\xbf\xd6\xbd\xe4@\xf4\x86\xf6?\xff\xde\xa7(k\x85\xfe?\x0c\xf0Z\xe4\xf2\xaf\xf8?\xf4\xf5.`\xf4\x8c\xcc\xbf \x86z\x005B\xf1?&\xd3[\xab\x8be\x13@/\x158\x9eX\x91\xf9?s\xf7\x02\xd1R\xc9\xf5?#\xd9\x1fi\x8d\xd7\xcb\xbf\x1d\xc7\xa8\xdb\xba\xc5\xd2?3:\xdb\xa6\xc1\xb6\xc8\xbf\x9f\xcc\xe4\x01\x19\xb9\xea?\x99E\x881y9\xeb?\xbb\x9a\xbf\x94\x1fB\xb6\xbf\xdf\x90\x1f\xc9\x1e\x1b\xca?5\xa9+\x07\xf4\x1a\xf0?\x1c\x7f\x1d\xae\x04\r\xc2?\xf1\x8c\xa6v\xe8\xd9\xf4\xe4?\xe9\xb9\xe9\xf0\t\x98\xda?\xf2\xde\xf3U\x073\xe2?\x869\x15 \x92\xf3\x05@\xaf\x83\x96\xa4^\xe4\xc2\xbf\xd0\xd0\xe8\x07/w\xdb?\x1b\xb90\xc1\x07\x83\x04@a\x8b\xcf\xc4\x80\x98\xf9?\xac\xc5<\xd0,\x95\xf9?U\xee\x8ay=\x9e\xd7?\x9ec\xe9\xe7\xc7H\x06@\xb9\xdbC\xe9\xec\xb3\x14@\xcfg\xdb\xad\xc4\'\xfd?\xd9\xf8 \xbd\x89\xd4\xec?d\xe9L\xeb$1\xd2?\x9e\x05\x87\x03\x87\xfe\xf3\xbfP\xd6\x1f\xa7|p\xda\xbf\x99\x815m>a\xe7?\x0b\x16\xc9J\xed\xf8\x03@o\xe6\xb3\xb6L]\x02\xc0\x12\x7f\xe4\x94\xadE\xd7\xbf\xc0\x94\xfe\xb3\xdc*\xdb\xbf\x0fH\x1f\xe1\x88%\xf5?\x90G\x86\x90\xcf\x99\xfe\xbf\xa1\x04\xf8\xf3\x17\x18\xf2?sY\xdaC\xbf\x96\xd7\xbf|\xb3W!-,\xd5?\xca\xec/\xa5\xa26\xfe?e\xa3G\x1d\x92\xfd\xee?\xa7\xad\x0e\xb2JN\xfa\xbf;\x9d\xd4\xf1\xfe#\xe4?\x90\xaf?\x96\xdb\xde\xf5\xbf^=\x1bb\xb7]\xe8\xbf\xdbiX\xb9 )\xfd\xbf0\xd62e\xe4=\xf2\xbf\xc1\x86\xaa\x93\xd6_\xd6?p\x9c\xcc\x15\x9d\x0f\xf6?\xb5-\xacN\xd3\x98\xb6?\xad\xc8Do\xbf\xfb\x11@\x8c\x98\x8e:!W\x19@\xc6jt4\x03v\t@\xb3\x08\x063\xf8\xa1\xe0?\xbb\xdc\xd6?P\xb0\xe5?r\xf1\xfa\xbaC\x82\xce?\xce\x8fn&!\x01\xfc?\xb3\xdb`\xd4\x80G\xdb?\x17\xab5\xde\xf6\x88\xe8?\xcf\xb2\xe2;\x16\'\x10\xc0:\xd2-\x97\x8b\xa9\xe5?i\xdfa\xb7\xa2L\xfb\xbfo\x1e\xc6\xf7\xc37\xa1?\xba\xc5kED\xc5\x80?S\x0e\x08\xacc\xc3\xef\xbf\x80C\x7f\x0f\x0e\n\xfc?\x8d\xf1*\x87\x8f\xfd\x83?\xc4]Wd\xa77\xc9?\xec\x060iu\x06\x00\xc0m\x9b\xae\x17]M\x00\xc0\xa3>a\x13\\\x19\xfe\xbf$\xdc-5\xf8p\xf1\xbf\xaf\xeb\xb3\x03\xc1i\xf0?/\x03,\xb5\xe6 \xff\xbf\x0f}\xda\xe1\x9f\xf0\r\xc0\x19\xec\xcc\x11\xb6\x88\r\xc0\x18j%\xecA|\x01\xc0\x8a\xd8\xe7B\x827\xce\xbf\x9e\xfa\x18]\xae\xcd\xee?\x05\xf1\xd2\xcb\x9e\xe0\xf6?\xf4e9\x07\xf0-\xf9?\xa2\xff\x8a\xc8\x84|\xea?\xa94>u\xc2Tp?\x84\xbd=BDG\xf0?9a\x84;4\xb3\xe9?\x86\x7f\x81\xa9\x94C\xf4?Ur\x1a\xd8\xfa\xaa\xea?\xe5\x7f\x82\xb7\x95\xe4\x05\xc0\xb5\x11:/|\x8c\x02@\x16lCft\xf6\xfd\xbfm\x82|\xb2f\t\xd3?\xda\xdb\x7f\x01\xb8}\xed\xbf\xfe\xe5\xa7f\x171\x01@\x13o/\xb9cq\xf2?\x80\xdf\x958d\xeb\xfb\xbfx\x80\x88\xce3\xeb\xec\xbf>j.\xddR\xcb\x02\xc0L\xb6m\\\x83h\xf5\xbf\xab\x10\xef\x13\xc7\xc8\x01\xc0\xb7\xfc`~\xdd!\x01\xc0\xb9m\x98rts\xf7\xbf\xdf\x1e\xe6\x8a\xf0\xc9\x07\xc0\xd6L4?\xa9\xd7\xf2\xbfV\x9d:\xf7q\xc7\x11\xc0\x134%\x81\xc7(\x03\xc0\n\xb7G[PF\t\xc08}\x93\xf8D\xd4\xf0\xbfY*\xef\x8c\x1d\x10\xf0\xbf\xe2\x9d\x0b\xed\xc0\x9d\xd3\xbf\xf4\xa9\x88\xf8\xe5\xb0\xb1?\xbe\xc9\x94\xa0\x87Q\xf1?\xf1\x10#\xb6Y\xfe\xf6?\xe9R\xd9W\xd3I\xa7?_\xf9\xde\x18(n\xf7?\xc377gRU\xe5\xbf\xba8H\xacM\xe8\xd5?\xeb\x82l:\x8c\xba\xc5?\x02\xe6\xf4\x06\xec\xc8\xda\xbf\x0e\xd4\xb8\xd52\x18\xd9\xbfs\xf8\x91\xe2\xc2\xb1\xfd?\x81\xbf\xc0\x84\xbfB\xc9?\x8bQ\xe8n\xcc\xb5\xdd\xbfZ\xd6\x95\xa7\x8e\xd4\x01\xc0\x0c\x19Y]o\xd3\xe0\xbf\xf1\xa6]m\x8c\xf0\xf4\xbf\x91\xf8\xe1q\xd1\x1a\x14\xc0\xda\xe9K\x1a_Y\x04\xc0\x7f\xcdB\xc5f\x87\x01\xc0\n(\x9a\xb7\xea\xcd\xe4\xbf\x1b\xbf\x03\xf6\xa8d\x01\xc0\x05\xf7\xa5\xb7\xd5\x8f\t\xc0\xb5\xb5>\x15S|\xf5\xbf\x06\xd6\x90,\xe96\xf6\xbf\xd3\xd6\xef\xb8\x93\xe0\xf2\xbfv\x11\xe4[1|\xfc\xbfT\xb1\x165J\x10\xea?\x95\t`\xe0DJ\xe2\xbfH\xde;\xba\xf0B\x96\xbf\xb5\xe1\xc7\xc7\x8d\xc2\xde?\xee2o\x95\xf0\\\xeb\xbfm\xa4\xce~\xe5\xa0\xf0\xbfI\xb1\xcd!\x8d\xf5\xdd\xbfJ-\xb2\xdf>\x0e\xd4\xbf\xe8\xc9\'\xee$\xa9\xe7?\xf1YW\x92\x15\x0f\xfa?\xe8Aj\xab\x87g\x00@\x94ig1{D\x12@V\x8a\x9b\xb5\x9e\x03\xff?\xe4\xb4\x0cN\x81\x99\x00@Gu3\xd1\x98\xa3\x03\xc0X\xf8+0\xa4}\xf0\xbfq\xefOR\xe0\xff\x01\xc0\x0c\xfd\xf2\x93\xbc\x8e\t\xc0{Ua~x\x7f\xf7\xbf\xfa\t\xa9\xb6\xcd\xdc\n\xc0 \x90.\xb5\x19Z\xf5\xbf\x9dt\xd6#\x02\x1e\xdf?\xff\xcf\xb7\x8fV\xa0\x0b\xc0\x03\xa6Y\xa1\xaf$\xfa?\xeb\x95\xaa\xf2\x9fx\xf6?\x92bL\x88p\xc0\n@N\xc03\xf2\x9cb\xfd?+\xc5\x07\xbd\xc6R\xea?mJN\x97\xfa\xe3\x01\xc0.$\xba\xe8A\x9a\x8f\xbf\xe9!\xdc\xfe\x81G\xe6?\xcd\xf3"H~\xa0\xd0?\xf3\xee|\xe6jd\xeb\xbf\x10\xf4\tt\x98\xae\xf2\xbf\xd2\xf7\xd3\xff\xd0\x93\xee\xbf\xd02\xf7\xd8\x91\x1b\x04@\xdbO\xef\xe6\x1a\xa9\x0b@\xc6\xf0N~#\x16\x04@,Jum\rP\xfc\xbf\xd2\xd5n\x93\xca\x9e\xfa?\xe7h\xdd\x8b\xfb\xa9\xeb\xbf\xa0\x94\xcb\xf1\x8d\xc2\xe4?2\x018@\xd8\xd7\x0b\xc0\xd9\x14:^;`\xf7\xbfi\x94\xe5c\x0f[\xee\xbf\xf7j\x98\xe1O\xa4\x08\xc0R\xf4\x19\xba\xfd\x06\x0e\xc0\'\t\xd5\x9d\xed.\x04\xc0\xca\x95\xcf\x9a\xad\xaf\x0b\xc0>\x1fR\x15\x1c.\x07\xc0\xa8\x9e\xf2\xb3Di\x0b@\xd1\x92\xfa\xc8\xd0\\\x13@\x9e\x02\x1e\x01*\xcb\xca\xbf\x81\xa8|f\tI\xc8?\x10\x80\x94\xa9"g\x08@\xd8(}u\x14\x13\x02@%\x0f\x90\xc7\x85U\x04\xc0\xa7\xe6^<\xb7i\xec\xbff\xe9\xd6\xee\x95\xa3\xec\xbf\x13\xf7Z\xadx\xe2\xe5\xbf\x16]}\x07\x84\x1b\xf7?\xdb\xa24A\\\x15\xe4?#/(\x850\xed\xe5\xbf5w\xaf\xa0\x80r\x02@\x83AD\xcd/_\x04@\x08Q\x92\x14i\x06\xe9?\xe4\x0cn\x98\xe9j\x06\xc0\x08\x98}r\xdc\xdc\x05\xc00\x14S\xf4\xdc4\x0f\xc0\x99\x19\xe3~\xfaA\x03\xc0\xf2LD\xf5\x93\xfd\xf9\xbf4\xa2r\x17\x80\xb1\xfb\xbfM\xea\xe6\x1f\x89\xc0\x00\xc0\x9b\x89\x82\x8e9}\x13\xc0]\xd2\x97\xd4\x1bG\x06\xc0\xcd\x1e6\x90\xbc\x81\x04\xc0\xe5\xf41w\xe5"\xe5?\xff\xfb\xac\x86\x8a\xa6\x03@\xfb\x95\xdfmPl\x03@O\x94\xf3\xd2\xce\xfa\xf4?\x91\xbe\xbb\x18@A\x03@BS\x91J\xe6\x93\x0c@\x02\x84\xd8\xdf\xd8J\xc3\xbf\x8a}@\xeaR\x9c\x01@\xd3>\x19\xe3\xf0\x0f\x07\xc0\x9d\x8a#D\xac?\xe0\xbf\x9e\xa2\x1dTc:\xac?\xdarL\x0fo#\xde?)#\xbeR\xa8\x8e\xe4\xbf\x08\xb5f\xfd\x08\x99\xb7?\xb7c\x86\xc9g\xe1\xd6?\xee\xa2\x81\x8e\x14<\x02@v\xaeh\xedjG\x12@\xf2\x8dx\x0c3d\xd6?\xeaaO\x86\x03\xc9\x04\xc0\x1c\x9c3\xadi\t\x13\xc0\x8e\x19\x96\\b\x13\xfe\xbf\xd8\xb2\x92\xf4K\x01\x15\xc0-\x1e\',_:\x10\xc0\xf3T;\xdf-\xf2\x04\xc0\x14,=\x89d\xb8\x1f\xc0\x06wZ\xcd\xb7\xcd\x1c\xc0\xe9\x96@ \xb8!\x0e\xc0\x15\x91\xf9\xd3<\xa2\xc4?\x9b\x95\xdd\x84E5\x06@\x96\tE\xc0\xf2\xf8\x10@%\xe8~\x86\x88\xd7\xfa?@\xf7\r0H~\xf8?\xeb\x88\x1e)\xb53\xd6\xbf\x10\xfd$SH\x99\x01@=;\x8a\xb9\xa7\xd6\xcf?\t\x02\x98*\xa8\xbf\xe8\xbf<"T\x8a\xe00\xb2\xbf\xcb{\xe6\x15?\x9d\xd3\xf4?\xb8dE7\x14\xcb\xde?\xf45\x89gZl\x03@\xab#\x0559\xa0\xad\xbfj\'\xfd\xd5\x94^\x07@\xf26\xc0\xa2\xd6[\x00@\xa6\x9c\xeaT$\xc3\xf1?\xbd5\xee\xa7\xcb@\xea?\x18\xaa\x908B\xdd\xeb?\xfe\xc2r\xa2R\xaf\x9a\xbf\x081\xd1\x928\xfc\x04@\xcb\xaaD\xcd\xe9\xeb\xf9?(\x16;5_u\x03@m\xc9~\x8b\xe0\xc5\xf9\xbf\x90\x85\x1d\x9a\xdal\xce\xbf\xa1\xe8\xac\x07\xb0\x9e\xea?\xea*C\x97o8\xd1?\xb5l&\xe1\x99\xc8\x01@H\x84\xd5\x086J\xd7?=\x9e\xed\x08+\x95\xe1\xbf\xdao@\x94\x18U\xeb?\xcd\xd7\xc1\xd8(\x0e\xdb?P\x15|}f\xa2\xcf?\xce\xde(*B\xe6\xe9\xbf\xc6\x81\x86\x98\x86\x07\xeb\xbfU\x1b\xb3=\xdcn\xe6\xbf\xa9\xfc\xb2\xc0\x11L\xde?\xfb\xefFV\t\'\xf9?^!\xfe#\xc2\xdb\xe3\xbfL\x91\x05g\xb2y\x03@Ea\xba\xe4.\x10\xe7?"Ue\xd40c\xf4?\xa8\x80X\xe7r\xc9\xeb\xbfb-M\xec\xc0\t\xf2\xbf\xa1\xf3"\xa0\xee \xf3?\x07\x91O\x86\x9c\xa5\xd9?\xa0\x06\x92\xd7\x0fX\xfd?\x82\x16\x81R-J\x07@\xbb\xf3$B\xcc\x02\x02@\xe6:\xc5\x9a\xac\xfc\xeb\xbf.b\xab\xdd\x1b\xad\xe4\xbf\xfa\x98\xbc\xa0,|\xe6\xbf?\xd4?\xac&p\xe3?9\xe3:\xde;\xe9\xe3\xbf\x9b[\xc7\xf2\x9f\xa5\xb2\xbf\x02\xb5\x89\x11\xfe\xc2\xce?[\x1b\x9blo\x8a\xa1\xbf5\xa2\x89\xa9a"\xbc\xbfIDn\xd6\x1a\n\xd0\xbfLy\xa9z\xd1\xe9\xf4?\xa7{\xb5\x0b:}\xda?\xb1\x0e\xdf\x95{\x03\xfe?5\x8a\x0c\xa1\x0f\x9f\xfb?\x87\xc8\xb9\xa1p\x0b\xaa\xbf\xd3\xdb\x0b~\xbd\xbe\xe2?\x9d\xc8X\x07Y\xd6\xf0?v\x84\x9f\x1b\x05\xe8\xf9?\xc9.Px\xc9Z\x01@\xc3\x1c;\xe9\xce\xcf\xd5?\xd3\xe5L\xcc\x91\x13\xd6\xbf\x0e\xa5\xc63T2\xf6?K\x11\xe6\xba\xe6\x89\xf0?>\xc8|\xa6JG\xed\xbf|^\xc3\xeb\xe8\xe7\xbf\xbf\xb6\x9dO\x88\xfeu\x03\xc0V\xaf\xcb\xc3\xc5\xf3\x01\xc0\x99!J\xd6L\x1b\xab\xbf\xcc\xda\xbc\xa5=/\xfc\xbf5\x93f\xf1\r*\xdd\xbf\x8cK\xe7\xefm\xed\xac\xbf\x07\xe3Z\xc0\xad\xb5\xe2\xbf:\xae\xc9\xa9o\x0e\xe2\xbf4\xa9\xc2\x0eQ \\\xbf\xfe\xba\xca\xd6\x10"\xe1?\x0c\x03\x97X8`\xf3\xbf\xbd\x8ePaj\x9c\xf0?\x04hl.\x95\x00\xb4\xbfl\xc8zp\xe9\xb5\xcb?\xc4\xdb6\xb0\x13\xc3\xf9?q\xd8[{\xb3\xeb\xf3?\x1fu\xb6[\xd8\t\xf7?h\xac\x1b\x01\xf2\xaf\xeb\xbf\xf1\xf8;\xdch?\xe8?5\xbd\xa2\xcb\x14\xc2\x12@"\xd0\xe3\xd4\xbb\xe3\xf3?Xv\xd6\x19-P\xc0?sY%xml\xd3?*\xc6\xac\x19\x91\xe6\xe8\xbf\x1b\x7f\xf0G\x8e\xb9\xfd?\x81\xedK\xe7\x04a\xe1?\xd1\xd3\x05\x9e\xc94\xd4?\xe9\xd3v\xf9c\x8b\xec?\xd4,\xcfX\xf9\xb8\xe4?\x0f \x1a\x92\xd0\xbd\x05\xc0B\xf6\x82\xc7\xae\xe8\xe0?J)\n\xadG\x9e\xce\xbfFA\xb5_!\xfc\xca\xbfm$\xbd2\x85\xbe\xd6\xbf\xb0\x16\x10\t\x01N\xea?\xd9K\x98\xf7\xc5z\xf2?F\xfa\xa3\x1c\xafJ\xe3\xbf\x9c6m#%\xb7\xd9\xbfj,\xe1\x11\r\xa1\xeb?C\xa4\x0eJ\xc7v\xeb?\xdc9[\xfc\xcfP\xdb\xbf]`7F%\xc7\xf2?\xe6\x96z]\xd3\xfa\xe8?\xca\xe4\xe2\'\x0b\x93\xe3?\xf1\xd8\x9c\xed\x0f\xe8\x07@\xd161\xc7\xd8\xc8\xe5?_\xab~\x0e\xd8_\xef?=\x0e|\x83\x84\xfe\x00@F\xc1\xc1\x1e\x1f\x08\xed?\x83\xb2\xb1\xa5$\\\x00@\xe8f\x8d/\'\x15\xd0\xfc?\x9e}\x8c\x8b\xb9\x9a\xaa?\xd20\xc5\xc6\x99\xcd\xec\xbf\xffc\xd4[\xc0\xc4\xaf?C\\r\xa5\xcbZ\xc9\xbf\xdb\x01<\xcc\xe0P\xfd?\xba\xb1\x85\xe4\xdb$\x01@5u\x9e\xcc;\xb5\xe7?\x15R\x06>S\xbd\xf6?\x1a\xb3y\x86\r\xc7\xfd?\x13\xb6\xf4\xc0\x12\xee\t@\x07\x1a\xd3\xc0\xf6\xe8\x92\xbf\x1b\x90\xb9\x94\xfeB\xe5?\x7f\x08b\x97\xd8M\x02@\xb8\xef\xb2\xdc\'\x03\xe0?w\x84\x83->D\xd4?d\x96\xf3\xd7\xb5\t\xc2\xbf\xc10\x01w\xe4\x91\xef\xbf\x96\x88\x04j$l\xe5\xbf]\xc26\x03dG\xeb\xbf\x9a\xe1^\xa1\xff\x01\xf2\xbf\xa5\x0b6\x9c9\xb5\xc0?\xa4\xca\xc5\xa5\x14m\xe1?\xa1wf_U\xd5\xb6?_\xa3\x05\x86x\x9c\xd9?5\x8d\xc1]%v\xf4\xbfv\xf8_\n\xd2\x07\xde\xbf\xd8\xbf$L\x7f\xd9\xc1\xa0\x00\xc0\x96\xf0m\x8d0\xb6\x00@_7\xe3\x82\x87\x8f\t\xc0\xc23\xb9M+{\x04\xc0\xee\xb7\xdc1\xac\xb5\xff?\xa8\xeff\xa8\xa1X\xd1\xbfLC(8\xee\x97\xbd?\xc7m\xcb\xef\xbc\xf4\x1c@U\xfa_p\x8bV\x00@`\xa3\xb5\xa5u\xc9\x11@\xf42\xe2#\xc0t\x17\xc0\xaeM\x18WT\xea\xf8\xbf5\x98\xcb\x01\r* @\xb9\xe5\x85\xc7L*\x00@\xdc!\xa5a\xd4\xf9\r@d\x01*6\xa4\x8d\r\xc0\xac\x007\xfc\xa1\xfe\x0b\xc0zj\xc0l\xa55\xdb?\xb5\xd4\x9d\xde\x84\xd0b?s\xff:9\xf3j\x15\xc0\x96\x1c\x0b\xd2\'\x1c\xf2?F\x06w\xc6\x02\x98\x1a@F\x04u%8\x95\xfa?\xa1\xbd\xa3<\xea\xc2\x01\xc0K\x9a\x8d\xe2\x8c\x0f\t\xc0]G\x16\x9d\xb5\x14\x1b\xc0\xad@\xc1v\xa3\xec\xee?\xe1\xcb\x82[\x8f\xb0\xf8?h\x7f\xb0H\x12\xca\x0f@\xab\x08\x0b][\xbe\n@i\xaa\xd8\xce\xb6r\x16@"\t\x8a\xdfA\x91\xf9\xbf\xdd\x1f\xa8\xba\x9dM\x1b\xc0\xb1\x97\xb2W\xd1\xd3\x12@\\\xaf\xa6m\x99\x87\xfc\xbfO\x8c\xd2\xe3\xae#\xbf?\x81n\xeb\x04\xf7\xba\xe1?\xc6\xee\xd9\xb8\xc01\xf9\xbf\xd5\x1f\xe7\xa8\xfdY\t\xc0\x8f\x87\x04\x1bZ\x9b\xfb?\xe7\xf6\xf7\xa1]\xc7\xf8\xbf\x00\xffCh\xb0\x9f\xe7?\xf1\x87Q\xc9m\\\x17@\xe4C\x82\xe1\x80\t\x05\xc0\x7f\xde\x92z{{\x0b@W\xe6\xc2\xdby^\x03\xc0\xcc\xf0\n}\xdbx\x05\xc0=\xa6\xf3\xa9\xfdE\xfd\xbf4q\x85=.\xbe\x05\xc0\xc2\xa0\x19\x10\xdcl\x08@\x14\xaa4\xce\x14\x86\xfa\xbf\xaf\xcc5G\xf0\xd5\x1e\xc0P.$^\x94\x9d\x11\xc0\xc8\xaa\xca(\x8f{\x0f\xc0:q\xad\x1b\xf9Q\x01@}\xde\xf6\xa3\x1a\x1b\xea?\xeb\x19\xc0J\x11\xb2\xb8\xbf\x92\x8f8\xfb\xdf\xe6\x1b\xc0q*\x02e*\xa1\x06@\xd4\xa7\xc5F\\\x18\x02\xc0\xe96\x10\xe4\xb4D\x0f\xc0N\xfc\xc8\xfd:\xf6\xdb\xbf' +tbg1 +(g2 +(I0 +tS'b' +tRp7 +(I1 +(I10 +I1 +tg5 +I00 +S'\xad\xe6(\x12\xef\xd0\xaa\xbf\x7f\xbdB\xa0\x82\x8c\x1f@\xe6\xd7\xef\x00q\xbc\xf1?\x1d\xab\xfa\x9a;\xe9\xb0?E\x0b24\x10)\xf9?\xf9P\x86\xf7\x00\xd0\x10@\xde\x89\xf0\xf1\x8c\xa5\x0b@\x18\xeb\xf4N\xf1\xaa\xf3?\xd64\xd7\xc7\xf2F\x00\xc0N\n\xdf\x08\x14x)@' +tbg1 +(g2 +(I0 +tS'b' +tRp8 +(I1 +(I10 +I1 +tg5 +I00 +S'\xcd(\xef\xf6\xae`\x0c\xc0\xd83\x80\x90`\x9e0\xc0\xb9\xdc1\x80X^\x1a\xc0\xcc).\x98Y\xe0\x11\xc0myx\x94\xf6\xba&\xc0\xde3M%\xd2\x8f$\xc0\xacQx\x89\x06\xc1%\xc0\xfb\xaa \xec\x9en\xf3\xbf\x1b\x8b\xf0H/\xf0 \xc0\x90\xf7\x0c$\xc3\xa9\x94?' +tbt. \ No newline at end of file diff --git a/samples/Pickle/random.p b/samples/Pickle/random.p new file mode 100644 index 00000000..ff3ab064 --- /dev/null +++ b/samples/Pickle/random.p @@ -0,0 +1,36 @@ +cnumpy.core.multiarray +_reconstruct +p0 +(cnumpy +ndarray +p1 +(I0 +tp2 +S'b' +p3 +tp4 +Rp5 +(I1 +(I100 +tp6 +cnumpy +dtype +p7 +(S'f8' +p8 +I0 +I1 +tp9 +Rp10 +(I3 +S'<' +p11 +NNNI-1 +I-1 +I0 +tp12 +bI00 +S'\x1cc~\xc3\xa7r\xed?\xe5${\xec\xd6\xcd\xed?\x809-\x02%\xa9\xa2?F\x0f\x1d\xe8\xef\xa3\xdb?\xfe\xd1\x0c\xb7\x83\x13\xef?\xe0\xfcO\xe5?Y\x97\xcb"\xa7%\xe7?\x9b\x8d\x16\xda\x97\xe1\xeb?T\x14\xbd\xfe|\xf4\xd0?\x18\xdfH\xc56A\xba?\x90\xc5\xfb\xc63:\xe5?\xbf%\xad\xe5.\x86\xe9?\xc6\x0c\xa9\x8c\xd7\xd5\xe9?\xf8\xafc:\x84g\xd7?\xf8\x98\x879\x9a\x16\xee?\xba\xdf\x88\x8az\x06\xe2?~g-\xeb\xc8\xed\xee?\x08A\xcc\x8c\xe7>\xef?\xceD\xc4ar\n\xdc?\x92w\xbb\xa34\xb1\xd9?\x88\xb9\xc0{u\xa3\xdc?d\x1a\xad\xe8\xf3\x14\xdd?\x9c\x95\x13\x96o?\xe5?\x9cT[\xb8r\xa9\xe5?0\xf1\x01+(\x0f\xdf?W\xbdjqD&\xed?c\xcf1-W\xe6\xe1?\xce\xbc\xe1{zW\xd9?"d\xcf\xd7\x13\x93\xde?\xf2P\xf6\xc3\xd6\x87\xd5?\xc2\x0e\x92q\x89\xda\xd5?\xc0:B\x1bb\x00\x9e?Y\xafHmr\x80\xe3?\x1co\xa7\xba\xa5/\xe4?\xa2\xbc \x9c\xddB\xd0?\xd2L\x935\x17\'\xee?|\x8cM\xeb\x97=\xe8?\x0f0xN*V\xea?\x81p\xe3,!\xf2\xee?\xf5w\xed\x10\x9eu\xe0?\xc5\x16\\LR\xb5\xe1?\xbeh\x04\xa4g\xe5\xd6?\xea\xc0\xb9\xf0\xb2\xd8\xd9?\xac\x9c\xeep\x1a\xa9\xd8?@W9hp\x16\xb1?\xc4\xedS\xd6V\xa1\xed?\x93,!\xdc\xa1\x8b\xe9?\x80)\xb1\xa6[T\xc9?\xac\xbc\x8a\xd21\xdd\xc5?\x80\x9c.g\xf1\xf2\xc6?\tLu\xc3\xf7U\xe9?n\'\x9f?\xbe\xf9\xe9?\xa3\xe7K\x1c\xb3\xa9\xea?X\x98\x1a\xcb\xa0\xcd\xd3? \xb6O\x9c\x1bQ\xc2?"\x89[\xad1\x8e\xea?\xdd\x8f\xa0P\xc7\x0e\xe2?c\xa4j\xa3\r\xac\xef?\xba\xb6\x0f\x8emo\xef?\xe0\xed\xa0\xc5R9\xab?U\xf1\xcd\xcf\xbf\xcb\xea?\x89*#\x06\xb0|\xe8?d\xa3\xad\xcd\xe0]\xcc?\xb5\xe78\xa7w\x13\xe3?\xce\x99\x98\xefS%\xd7?\xb1\xf8\xd8\x8eI\x13\xef?\x91`]\x93\xd4 \xec?\xc0\rPz\xee\xbd\xe7?7\x92\xd4\x0fP\x8f\xe1?L\x0f\xaf\xa9\xc3\x19\xdd?\\}\x15X\x870\xc7? ~ t\xcat\xb1?@?\xec\x97u\x05\xe9?F\x8d:\xac4D\xdb?qY\xe1Qk|\xe2? \xaf\xeaj\xa5\x04\xab?J[\x1al;\x00\xd5?\x00^{n\xc2\xf1S?\xb0\x82dN\xda\xb5\xc7?\xe0 \x07\xe1?R\x92?\xc4\r\x08+\x99J\xe1?I|&U\x19\xc4\xe1?|*\xf9\xebq\x7f\xed?\xbc*\x93\x89k\xab\xe9?oiL\x90;\xe0\xef?\x96\xcd\x9b\xff\x18g\xdc?pt\xb4\xa5\x9c\xa2\xbc?Nu]w*\xb7\xd2?\x88k\xac\xd0\xfd\xbf\xd5?Q\x02$b\xfeH\xea?5\xf6\t\xb6K\x1a\xee?' +p13 +tp14 +b. \ No newline at end of file diff --git a/samples/Pickle/save.p b/samples/Pickle/save.p new file mode 100644 index 00000000..13889c0c --- /dev/null +++ b/samples/Pickle/save.p @@ -0,0 +1,10 @@ +(dp0 +S'lion' +p1 +S'yellow' +p2 +sS'kitty' +p3 +S'red' +p4 +s. \ No newline at end of file From 040af5dad204b01cd312ac0434e90b90bc753e77 Mon Sep 17 00:00:00 2001 From: Ingo Blechschmidt Date: Fri, 25 Sep 2015 19:14:40 +0200 Subject: [PATCH 166/356] Clarify that only nonprimary extensions should be sorted --- lib/linguist/languages.yml | 3 ++- test/test_pedantic.rb | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 8409337b..0de559ee 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -8,7 +8,8 @@ # Use "text" if a mode does not exist. # wrap - Boolean wrap to enable line wrapping (default: false) # extensions - An Array of associated extensions (the first one is -# considered the primary extension) +# considered the primary extension, the others should be +# listed alphabetically) # interpreters - An Array of associated interpreters # searchable - Boolean flag to enable searching (defaults to true) # search_term - Deprecated: Some languages maybe indexed under a diff --git a/test/test_pedantic.rb b/test/test_pedantic.rb index 2d0372cc..d34f292e 100644 --- a/test/test_pedantic.rb +++ b/test/test_pedantic.rb @@ -9,7 +9,7 @@ class TestPedantic < Minitest::Test assert_sorted LANGUAGES.keys end - def test_extensions_are_sorted + def test_nonprimary_extensions_are_sorted LANGUAGES.each do |name, language| extensions = language['extensions'] assert_sorted extensions[1..-1].map(&:downcase) if extensions && extensions.size > 1 From 41911d6921d7277c6606b6054dcf12ed5a599cd9 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Fri, 25 Sep 2015 08:26:27 -0700 Subject: [PATCH 167/356] git-linguist: Properly handle $GIT_DIR from git --- bin/git-linguist | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/bin/git-linguist b/bin/git-linguist index 03408ee5..170406de 100755 --- a/bin/git-linguist +++ b/bin/git-linguist @@ -96,24 +96,18 @@ end def git_linguist(args) incremental = true commit = nil - git_dir = nil parser = OptionParser.new do |opts| opts.banner = "Usage: git-linguist [OPTIONS] stats|breakdown|dump-cache|clear|disable" opts.on("-f", "--force", "Force a full rescan") { incremental = false } - opts.on("--git-dir=DIR", "Path to the git repository") { |v| git_dir = v } opts.on("--commit=COMMIT", "Commit to index") { |v| commit = v} end parser.parse!(args) - git_dir ||= begin - pwd = Dir.pwd - dotgit = File.join(pwd, ".git") - File.directory?(dotgit) ? dotgit : pwd - end - + git_dir = `git rev-parse --git-dir`.strip + raise "git-linguist must be ran in a Git repository" unless $?.success? wrapper = GitLinguist.new(git_dir, commit, incremental) case args.pop From 41d438b47e8ee83a66705f6c04106662e6ea922f Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Fri, 25 Sep 2015 08:35:34 -0700 Subject: [PATCH 168/356] repository: Do not attempt to scan large repos --- lib/linguist/repository.rb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/linguist/repository.rb b/lib/linguist/repository.rb index 01e595da..51040734 100644 --- a/lib/linguist/repository.rb +++ b/lib/linguist/repository.rb @@ -126,12 +126,13 @@ module Linguist end protected + MAX_TREE_SIZE = 100_000 def compute_stats(old_commit_oid, cache = nil) + return {} if current_tree.count_recursive(MAX_TREE_SIZE) >= MAX_TREE_SIZE + old_tree = old_commit_oid && Rugged::Commit.lookup(repository, old_commit_oid).tree - read_index - diff = Rugged::Tree.diff(repository, old_tree, current_tree) # Clear file map and fetch full diff if any .gitattributes files are changed From 7c759d4d293412d23de180e5fd54a4192ac4382f Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Mon, 28 Sep 2015 01:45:04 -0700 Subject: [PATCH 169/356] git-linguist: Do not write cache if repo is gone --- bin/git-linguist | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/bin/git-linguist b/bin/git-linguist index 170406de..9541cf82 100755 --- a/bin/git-linguist +++ b/bin/git-linguist @@ -71,17 +71,20 @@ class GitLinguist end def write_cache(object) - tmp_path = Dir::Tmpname.make_tmpname(cache_file, nil) + return unless File.directory? @repo_path - File.open(tmp_path, "wb") do |f| - marshal = Marshal.dump(object) - f.write(Zlib::Deflate.deflate(marshal)) + begin + tmp_path = Dir::Tmpname.make_tmpname(cache_file, nil) + File.open(tmp_path, "wb") do |f| + marshal = Marshal.dump(object) + f.write(Zlib::Deflate.deflate(marshal)) + end + + File.rename(tmp_path, cache_file) + rescue => e + (File.unlink(tmp_path) rescue nil) + raise e end - - File.rename(tmp_path, cache_file) - tmp_path = nil - ensure - (File.unlink(tmp_path) rescue nil) if tmp_path end def load_cache From d8e3bec499a16eefc0f191db463b291d10204c9c Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Fri, 25 Sep 2015 08:36:20 -0700 Subject: [PATCH 170/356] Bump version --- lib/linguist/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index 60bc59e0..3de24f3d 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.6.2" + VERSION = "4.6.3" end From 3426165621a5ff0261b10f70947841117fe82dbf Mon Sep 17 00:00:00 2001 From: wizawu Date: Wed, 30 Sep 2015 13:45:38 +0800 Subject: [PATCH 171/356] Add a TypeScript sample with .tsx extension --- samples/TypeScript/app.tsx | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 samples/TypeScript/app.tsx diff --git a/samples/TypeScript/app.tsx b/samples/TypeScript/app.tsx new file mode 100644 index 00000000..43155ceb --- /dev/null +++ b/samples/TypeScript/app.tsx @@ -0,0 +1,9 @@ +import * as React from 'react'; + +export class App extends React.Component { + + render() { + return + + + + + + + + relativeNode + + + + + + + + RelativeTo="Size" + RelativeTo="ParentSize" + RelativeTo="Keyboard" + RelativeTo="PositionChange" + RelativeNode="relativeNode" + + + + + + + + + + + + + + + + + + + diff --git a/samples/XML/MyApp.ux b/samples/XML/MyApp.ux new file mode 100644 index 00000000..0e7b0088 --- /dev/null +++ b/samples/XML/MyApp.ux @@ -0,0 +1,11 @@ + + + + + + + This is an example of EdgeNavigator! + + + + From ab69fd01acfe0a5802a6a4b8d331d0ba6c7caed9 Mon Sep 17 00:00:00 2001 From: Eyal Dechter Date: Mon, 22 Feb 2016 15:03:26 -0500 Subject: [PATCH 328/356] Add .yap ext and yap interpreter for Prolog lang --- lib/linguist/languages.yml | 2 + samples/Prolog/queues.yap | 280 +++++++++++++++++++++++++++++++++++++ 2 files changed, 282 insertions(+) create mode 100644 samples/Prolog/queues.yap diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index b497d88b..aae87ce8 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2751,8 +2751,10 @@ Prolog: - .pl - .pro - .prolog + - .yap interpreters: - swipl + - yap tm_scope: source.prolog ace_mode: prolog diff --git a/samples/Prolog/queues.yap b/samples/Prolog/queues.yap new file mode 100644 index 00000000..b464152e --- /dev/null +++ b/samples/Prolog/queues.yap @@ -0,0 +1,280 @@ +% This file has been included as an YAP library by Vitor Santos Costa, 1999 + +% File : QUEUES.PL +% Author : R.A.O'Keefe +% Updated: Friday November 18th, 1983, 8:09:31 pm +% Purpose: define queue operations +% Needs : lib(lists) for append/3. + +/** @defgroup Queues Queues +@ingroup library +@{ + +The following queue manipulation routines are available once +included with the `use_module(library(queues))` command. Queues are +implemented with difference lists. + +*/ + +/** + + @pred make_queue(+ _Queue_) + + +Creates a new empty queue. It should only be used to create a new queue. + + +*/ + + +/** @pred empty_queue(+ _Queue_) + + +Tests whether the queue is empty. + + +*/ +/** @pred head_queue(+ _Queue_, ? _Head_) + + +Unifies Head with the first element of the queue. + + +*/ +/** @pred join_queue(+ _Element_, + _OldQueue_, - _NewQueue_) + + +Adds the new element at the end of the queue. + + +*/ +/** @pred jump_queue(+ _Element_, + _OldQueue_, - _NewQueue_) + + +Adds the new element at the front of the list. + + +*/ +/** @pred length_queue(+ _Queue_, - _Length_) + + +Counts the number of elements currently in the queue. + + +*/ +/** @pred list_join_queue(+ _List_, + _OldQueue_, - _NewQueue_) + + +Ads the new elements at the end of the queue. + + +*/ +/** @pred list_jump_queue(+ _List_, + _OldQueue_, + _NewQueue_) + + +Adds all the elements of _List_ at the front of the queue. + + +*/ +/** @pred list_to_queue(+ _List_, - _Queue_) + + +Creates a new queue with the same elements as _List._ + + +*/ +/** @pred queue_to_list(+ _Queue_, - _List_) + + +Creates a new list with the same elements as _Queue_. + + + + + */ +/** @pred serve_queue(+ _OldQueue_, + _Head_, - _NewQueue_) + + +Removes the first element of the queue for service. + + +*/ +:- module(queues, [ + make_queue/1, % create empty queue + join_queue/3, % add element to end of queue + list_join_queue/3, % add many elements to end of queue + jump_queue/3, % add element to front of queue + list_jump_queue/3, % add many elements to front of queue + head_queue/2, % look at first element of queue + serve_queue/3, % remove first element of queue + length_queue/2, % count elements of queue + empty_queue/1, % test whether queue is empty + list_to_queue/2, % convert list to queue + queue_to_list/2 % convert queue to list + ]). + +:- use_module(library(lists), [append/3]). + +/* +:- mode + make_queue(-), + join_queue(+, +, -), + list_join_queue(+, +, -), + jump_queue(+, +, -), + list_jump_queue(+, +, -), + head_queue(+, ?), + serve_queue(+, ?, -), + length_queue(+, ?), + length_queue(+, +, +, -), + empty_queue(+), + list_to_queue(+, -), + queue_to_list(+, -), + queue_to_list(+, +, -). +*/ + +/* In this package, a queue is represented as a term Front-Back, where + Front is a list and Back is a tail of that list, and is normally a + variable. join_queue will only work when the Back is a variable, + the other routines will accept any tail. The elements of the queue + are the list difference, that is, all the elements starting at Front + and stopping at Back. Examples: + + [a,b,c,d,e|Z]-Z has elements a,b,c,d,e + [a,b,c,d,e]-[d,e] has elements a,b,c + Z-Z has no elements + [1,2,3]-[1,2,3] has no elements +*/ + +% make_queue(Queue) +% creates a new empty queue. It will also match empty queues, but +% because Prolog doesn't do the occurs check, it will also match +% other queues, creating circular lists. So this should ONLY be +% used to make new queues. + +make_queue(X-X). + + + +% join_queue(Element, OldQueue, NewQueue) +% adds the new element at the end of the queue. The old queue is +% side-effected, so you *can't* do +% join_queue(1, OldQ, NewQ1), +% join_queue(2, OldQ, NewQ2). +% There isn't any easy way of doing that, sensible though it might +% be. You *can* do +% join_queue(1, OldQ, MidQ), +% join_queue(2, MidQ, NewQ). +% See list_join_queue. + +join_queue(Element, Front-[Element|Back], Front-Back). + + + +% list_join_queue(List, OldQueue, NewQueue) +% adds the new elements at the end of the queue. The elements are +% added in the same order that they appear in the list, e.g. +% list_join_queue([y,z], [a,b,c|M]-M, [a,b,c,y,z|N]-N). + +list_join_queue(List, Front-OldBack, Front-NewBack) :- + append(List, OldBack, NewBack). + + + +% jump_queue(Element, OldQueue, NewQueue) +% adds the new element at the front of the list. Unlike join_queue, +% jump_queue(1, OldQ, NewQ1), +% jump_queue(2, OldQ, NewQ2) +% *does* work, though if you add things at the end of NewQ1 they +% will also show up in NewQ2. Note that +% jump_queue(1, OldQ, MidQ), +% jump_queue(2, MidQ, NewQ) +% makes NewQ start 2, 1, ... + +jump_queue(Element, Front-Back, [Element|Front]-Back). + + + +% list_jump_queue(List, OldQueue, NewQueue) +% adds all the elements of List at the front of the queue. There are +% two ways we might do this. We could add all the elements one at a +% time, so that they would appear at the beginning of the queue in the +% opposite order to the order they had in the list, or we could add +% them in one lump, so that they have the same order in the queue as +% in the list. As you can easily add the elements one at a time if +% that is what you want, I have chosen the latter. + +list_jump_queue(List, OldFront-Back, NewFront-Back) :- + append(List, OldFront, NewFront). +% reverse(List, OldFront, NewFront). % for the other definition + + + +% head_queue(Queue, Head) +% unifies Head with the first element of the queue. The tricky part +% is that we might be at the end of a queue: Back-Back, with Back a +% variable, and in that case this predicate should not succeed, as we +% don't know what that element is or whether it exists yet. + +head_queue(Front-Back, Head) :- + Front \== Back, % the queue is not empty + Front = [Head|_]. + + + +% serve_queue(OldQueue, Head, NewQueue) +% removes the first element of the queue for service. + +serve_queue(OldFront-Back, Head, NewFront-Back) :- + OldFront \== Back, + OldFront = [Head|NewFront]. + + + +% empty_queue(Queue) +% tests whether the queue is empty. If the back of a queue were +% guaranteed to be a variable, we could have +% empty_queue(Front-Back) :- var(Front). +% but I don't see why you shouldn't be able to treat difference +% lists as queues if you want to. + +empty_queue(Front-Back) :- + Front == Back. + + + +% length_queue(Queue, Length) +% counts the number of elements currently in the queue. Note that +% we have to be careful in checking for the end of the list, we +% can't test for [] the way length(List) does. + +length_queue(Front-Back, Length) :- + length_queue(Front, Back, 0, N), + Length = N. + +length_queue(Front, Back, N, N) :- + Front == Back, !. +length_queue([_|Front], Back, K, N) :- + L is K+1, + length_queue(Front, Back, L, N). + + + +% list_to_queue(List, Queue) +% creates a new queue with the same elements as List. + +list_to_queue(List, Front-Back) :- + append(List, Back, Front). + + + +% queue_to_list(Queue, List) +% creates a new list with the same elements as Queue. + +queue_to_list(Front-Back, List) :- + queue_to_list(Front, Back, List). + +queue_to_list(Front, Back, Ans) :- + Front == Back, !, Ans = []. +queue_to_list([Head|Front], Back, [Head|Tail]) :- + queue_to_list(Front, Back, Tail). + From bfa7eced4469926fe2fe967f32dedb0eeddb03fc Mon Sep 17 00:00:00 2001 From: William Claude Tumeo Date: Fri, 26 Feb 2016 00:31:58 -0300 Subject: [PATCH 329/356] Try fix "Ren'Py being detected as Python" - Remove Ren'Py from Python group - Add .rpy to Python + sample --- lib/linguist/heuristics.rb | 8 ++++++ lib/linguist/languages.yml | 2 +- samples/Python/simpleclient.rpy | 49 +++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 samples/Python/simpleclient.rpy diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 0806ce1f..af6c5e83 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -321,6 +321,14 @@ module Linguist end end + disambiguate ".rpy" do |data| + if /(^(import|from)[\s\S])/m.match(data) + Language["Python"] + else + Language["Ren'Py"] + end + end + disambiguate ".rs" do |data| if /^(use |fn |mod |pub |macro_rules|impl|#!?\[)/.match(data) Language["Rust"] diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index e9c63ef1..4a348bc2 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2831,6 +2831,7 @@ Python: - .pyp - .pyt - .pyw + - .rpy - .tac - .wsgi - .xpy @@ -3004,7 +3005,6 @@ Redcode: Ren'Py: type: programming - group: Python aliases: - renpy color: "#ff7f7f" diff --git a/samples/Python/simpleclient.rpy b/samples/Python/simpleclient.rpy new file mode 100644 index 00000000..ceb5f991 --- /dev/null +++ b/samples/Python/simpleclient.rpy @@ -0,0 +1,49 @@ + +# Copyright (c) Twisted Matrix Laboratories. +# See LICENSE for details. + + +""" +An example client. Run simpleserv.py first before running this. +""" + +from twisted.internet import reactor, protocol + + +# a client protocol + +class EchoClient(protocol.Protocol): + """Once connected, send a message, then print the result.""" + + def connectionMade(self): + self.transport.write("hello, world!") + + def dataReceived(self, data): + "As soon as any data is received, write it back." + print "Server said:", data + self.transport.loseConnection() + + def connectionLost(self, reason): + print "connection lost" + +class EchoFactory(protocol.ClientFactory): + protocol = EchoClient + + def clientConnectionFailed(self, connector, reason): + print "Connection failed - goodbye!" + reactor.stop() + + def clientConnectionLost(self, connector, reason): + print "Connection lost - goodbye!" + reactor.stop() + + +# this connects the protocol to a server running on port 8000 +def main(): + f = EchoFactory() + reactor.connectTCP("localhost", 8000, f) + reactor.run() + +# this only runs if the module was *not* imported +if __name__ == '__main__': + main() From db994a119767f5f497a7f5fa674729b3d8c9d510 Mon Sep 17 00:00:00 2001 From: Farbod Salamat-Zadeh Date: Sat, 27 Feb 2016 00:42:03 +0000 Subject: [PATCH 330/356] Remove .txt extension for CSV format --- lib/linguist/languages.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 4fe4390e..4296c4df 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -481,7 +481,6 @@ CSV: tm_scope: none extensions: - .csv - - .txt Cap'n Proto: type: programming From 9bfbd0550c9d8761b434dec3864e13d1bbeb5f85 Mon Sep 17 00:00:00 2001 From: Farbod Salamat-Zadeh Date: Sat, 27 Feb 2016 14:32:50 +0000 Subject: [PATCH 331/356] Move cars.csv from test/fixtures/Data to samples/CSV --- {test/fixtures/Data => samples/CSV}/cars.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename {test/fixtures/Data => samples/CSV}/cars.csv (63%) diff --git a/test/fixtures/Data/cars.csv b/samples/CSV/cars.csv similarity index 63% rename from test/fixtures/Data/cars.csv rename to samples/CSV/cars.csv index 73280e55..3c504cd2 100644 --- a/test/fixtures/Data/cars.csv +++ b/samples/CSV/cars.csv @@ -1,3 +1,3 @@ Year,Make,Model,Length 1997,Ford,E350,2.34 -2000,Mercury,Cougar,2.38 \ No newline at end of file +2000,Mercury,Cougar,2.38 From 3be007526cf43cc0a91504fe86d83af7db3e663a Mon Sep 17 00:00:00 2001 From: Farbod Salamat-Zadeh Date: Sat, 27 Feb 2016 15:30:22 +0000 Subject: [PATCH 332/356] Fix fixture_blob("Data/cars.csv") Changes `fixture_blob("Data/cars.csv")` to `sample_blob("CSV/cars.csv")` --- test/test_file_blob.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test_file_blob.rb b/test/test_file_blob.rb index 08e2e49b..ebb0b7fc 100644 --- a/test/test_file_blob.rb +++ b/test/test_file_blob.rb @@ -152,7 +152,7 @@ class TestBlob < Minitest::Test end def test_csv - assert fixture_blob("Data/cars.csv").csv? + assert sample_blob("CSV/cars.csv").csv? end def test_pdf From 40413dfcc709c847f2d0051c9f694b02d296c096 Mon Sep 17 00:00:00 2001 From: William Tumeo Date: Sat, 27 Feb 2016 23:55:53 -0300 Subject: [PATCH 333/356] Add `class` and `def` to regex --- lib/linguist/heuristics.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index af6c5e83..895bfa20 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -322,7 +322,7 @@ module Linguist end disambiguate ".rpy" do |data| - if /(^(import|from)[\s\S])/m.match(data) + if /(^(import|from|class|def)[\s\S])/m.match(data) Language["Python"] else Language["Ren'Py"] From 6b60e5e786d5bda9b34084c4321ce4637bb57c9d Mon Sep 17 00:00:00 2001 From: William Tumeo Date: Sat, 27 Feb 2016 23:57:46 -0300 Subject: [PATCH 334/356] Remove wrong line in the sample --- samples/Ren'Py/example.rpy | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/samples/Ren'Py/example.rpy b/samples/Ren'Py/example.rpy index 90c3c286..71e34b97 100644 --- a/samples/Ren'Py/example.rpy +++ b/samples/Ren'Py/example.rpy @@ -1421,7 +1421,4 @@ init: # $ renpy.pause(1.0) # hide text with dissolve # -# return - - -Return to the tutorial. +# return \ No newline at end of file From 8fea8a0b47fc547b7a9c4fad10e91aa0da9d1322 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Mon, 29 Feb 2016 07:53:48 -0700 Subject: [PATCH 335/356] Grammar update --- vendor/grammars/Sublime-Inform/.gitignore | 2 + .../Inform7/book.sublime-snippet | 6 + .../Inform7/chapter.sublime-snippet | 6 + .../Inform7/door.sublime-snippet | 7 + .../Inform7/inform7.JSON-tmLanguage | 34 ++ .../Sublime-Inform/Inform7/inform7.tmLanguage | 74 +++ .../Inform7/object.sublime-snippet | 8 + .../Inform7/part.sublime-snippet | 6 + .../Inform7/room.sublime-snippet | 7 + .../Inform7/scene.sublime-snippet | 11 + .../Inform7/section.sublime-snippet | 6 + .../Inform7/volume.sublime-snippet | 6 + vendor/grammars/Sublime-Inform/LICENSE.txt | 21 + vendor/grammars/Sublime-Inform/README.md | 8 + .../Commands/Save to CSS.tmCommand | 47 ++ .../Commands/Save to Minified CSS.tmCommand | 47 ++ .../Insert inline Image.tmDragCommand | 38 ++ .../Preferences/Comment.tmPreferences | 36 ++ vendor/grammars/less.tmbundle/README.md | 25 + .../less.tmbundle/Syntaxes/LESS.tmLanguage | 434 ++++++++++++++++++ vendor/grammars/less.tmbundle/info.plist | 26 ++ 21 files changed, 855 insertions(+) create mode 100644 vendor/grammars/Sublime-Inform/.gitignore create mode 100644 vendor/grammars/Sublime-Inform/Inform7/book.sublime-snippet create mode 100644 vendor/grammars/Sublime-Inform/Inform7/chapter.sublime-snippet create mode 100644 vendor/grammars/Sublime-Inform/Inform7/door.sublime-snippet create mode 100644 vendor/grammars/Sublime-Inform/Inform7/inform7.JSON-tmLanguage create mode 100755 vendor/grammars/Sublime-Inform/Inform7/inform7.tmLanguage create mode 100644 vendor/grammars/Sublime-Inform/Inform7/object.sublime-snippet create mode 100644 vendor/grammars/Sublime-Inform/Inform7/part.sublime-snippet create mode 100644 vendor/grammars/Sublime-Inform/Inform7/room.sublime-snippet create mode 100644 vendor/grammars/Sublime-Inform/Inform7/scene.sublime-snippet create mode 100644 vendor/grammars/Sublime-Inform/Inform7/section.sublime-snippet create mode 100644 vendor/grammars/Sublime-Inform/Inform7/volume.sublime-snippet create mode 100644 vendor/grammars/Sublime-Inform/LICENSE.txt create mode 100644 vendor/grammars/Sublime-Inform/README.md create mode 100644 vendor/grammars/less.tmbundle/Commands/Save to CSS.tmCommand create mode 100644 vendor/grammars/less.tmbundle/Commands/Save to Minified CSS.tmCommand create mode 100644 vendor/grammars/less.tmbundle/DragCommands/Insert inline Image.tmDragCommand create mode 100644 vendor/grammars/less.tmbundle/Preferences/Comment.tmPreferences create mode 100644 vendor/grammars/less.tmbundle/README.md create mode 100644 vendor/grammars/less.tmbundle/Syntaxes/LESS.tmLanguage create mode 100644 vendor/grammars/less.tmbundle/info.plist diff --git a/vendor/grammars/Sublime-Inform/.gitignore b/vendor/grammars/Sublime-Inform/.gitignore new file mode 100644 index 00000000..9bea4330 --- /dev/null +++ b/vendor/grammars/Sublime-Inform/.gitignore @@ -0,0 +1,2 @@ + +.DS_Store diff --git a/vendor/grammars/Sublime-Inform/Inform7/book.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/book.sublime-snippet new file mode 100644 index 00000000..d00b609b --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/book.sublime-snippet @@ -0,0 +1,6 @@ + + + book + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/chapter.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/chapter.sublime-snippet new file mode 100644 index 00000000..344ae92d --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/chapter.sublime-snippet @@ -0,0 +1,6 @@ + + + chapter + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/door.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/door.sublime-snippet new file mode 100644 index 00000000..9504585b --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/door.sublime-snippet @@ -0,0 +1,7 @@ + + + door + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/inform7.JSON-tmLanguage b/vendor/grammars/Sublime-Inform/Inform7/inform7.JSON-tmLanguage new file mode 100644 index 00000000..e5b6e92b --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/inform7.JSON-tmLanguage @@ -0,0 +1,34 @@ +{ "name": "Inform7", + "scopeName": "source.Inform7", + "fileTypes": ["i7x"], + "patterns": [ + { "name": "keyword.control.Inform7", + "match": "\\b(Include|Release)\\b" + }, + { "name" : "comment.block.Inform7", + "begin" : "\\[", + "end" : "\\]", + "comment" : "All comments in Inform7 are delimited this way." + }, + { "name" : "string.quoted.double.Inform7", + "begin" : "\"", + "end" : "\"", + "patterns": [ + { "name" : "keyword.operator.Inform7", + "begin" : "\\[", + "end" : "\\]", + "comment" : "For logic inside of strings." + } + ] + }, + { "name" : "storage.type.Inform7", + "match" : "(Volume|Book|Chapter|Part|Section|Table)\\s+\\d?\\s+-?\\s+((?:\\w|\\s|-)*)", + "comment": "Matches headings for major sections in Inform7" + }, + { "name": "constant.numeric.Inform7", + "match": "([0-9])+", + "comment":"Gotta call out the numbers!" + } + ], + "uuid": "0c4cbdee-beb7-4ea6-af56-27246d479373" +} \ No newline at end of file diff --git a/vendor/grammars/Sublime-Inform/Inform7/inform7.tmLanguage b/vendor/grammars/Sublime-Inform/Inform7/inform7.tmLanguage new file mode 100755 index 00000000..5609885e --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/inform7.tmLanguage @@ -0,0 +1,74 @@ + + + + + fileTypes + + i7x + inform + ni + + name + Inform7 + patterns + + + match + \b(Include|Release)\b + name + keyword.control.Inform7 + + + begin + \[ + comment + All comments in Inform7 are delimited this way. + end + \] + name + comment.block.Inform7 + + + begin + " + end + " + name + string.quoted.double.Inform7 + patterns + + + begin + \[ + comment + For logic inside of strings. + end + \] + name + keyword.operator.Inform7 + + + + + comment + Matches headings for major sections in Inform7 + match + (Volume|Book|Chapter|Part|Section|Table)\s+\d?\s+-?\s+((?:\w|\s|-)*) + name + storage.type.Inform7 + + + comment + Gotta call out the numbers! + match + ([0-9])+ + name + constant.numeric.Inform7 + + + scopeName + source.Inform7 + uuid + 0c4cbdee-beb7-4ea6-af56-27246d479373 + + diff --git a/vendor/grammars/Sublime-Inform/Inform7/object.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/object.sublime-snippet new file mode 100644 index 00000000..65f040af --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/object.sublime-snippet @@ -0,0 +1,8 @@ + + + object + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/part.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/part.sublime-snippet new file mode 100644 index 00000000..9e161cca --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/part.sublime-snippet @@ -0,0 +1,6 @@ + + + part + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/room.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/room.sublime-snippet new file mode 100644 index 00000000..b6abef45 --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/room.sublime-snippet @@ -0,0 +1,7 @@ + + + room + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/scene.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/scene.sublime-snippet new file mode 100644 index 00000000..fd4be030 --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/scene.sublime-snippet @@ -0,0 +1,11 @@ + + + scene + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/section.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/section.sublime-snippet new file mode 100644 index 00000000..7ab043cb --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/section.sublime-snippet @@ -0,0 +1,6 @@ + + + section + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/Inform7/volume.sublime-snippet b/vendor/grammars/Sublime-Inform/Inform7/volume.sublime-snippet new file mode 100644 index 00000000..0721fcbf --- /dev/null +++ b/vendor/grammars/Sublime-Inform/Inform7/volume.sublime-snippet @@ -0,0 +1,6 @@ + + + volume + source.Inform7 + diff --git a/vendor/grammars/Sublime-Inform/LICENSE.txt b/vendor/grammars/Sublime-Inform/LICENSE.txt new file mode 100644 index 00000000..cda6f052 --- /dev/null +++ b/vendor/grammars/Sublime-Inform/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Nate Dickson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/grammars/Sublime-Inform/README.md b/vendor/grammars/Sublime-Inform/README.md new file mode 100644 index 00000000..3b907f1e --- /dev/null +++ b/vendor/grammars/Sublime-Inform/README.md @@ -0,0 +1,8 @@ +#Inform7 Package for Sublime Text 2 +This package has a lot of little files that make Inform7 easier to edit in Sublime Text 2. that's why it's called what it is, you see. +##Usage +Grab the zip file, unzip it, and put it in your ```Packages``` Directory. +That's pretty much it. Open an ```i7x``` file in Sublime Text 2 and it'll be all highlighted and there's a bunch of snippets you can use and all that. + +##Want to submit a pull request for this readme file? +Please, please do. \ No newline at end of file diff --git a/vendor/grammars/less.tmbundle/Commands/Save to CSS.tmCommand b/vendor/grammars/less.tmbundle/Commands/Save to CSS.tmCommand new file mode 100644 index 00000000..9f8e7561 --- /dev/null +++ b/vendor/grammars/less.tmbundle/Commands/Save to CSS.tmCommand @@ -0,0 +1,47 @@ + + + + + beforeRunningCommand + saveActiveFile + command + #!/usr/bin/env ruby18 + +file = ENV["TM_FILEPATH"] +target = file.sub(/\.less$/, ".css") +system("lessc \"#{file}\" \"#{target}\"") +puts "Compiled CSS to '#{target}'" + input + document + inputFormat + text + keyEquivalent + @b + name + Save to CSS + outputCaret + afterOutput + outputFormat + text + outputLocation + toolTip + requiredCommands + + + command + lessc + locations + + /opt/local/bin/lessc + /usr/local/bin/lessc + + + + scope + source.css.less + uuid + 78788223-5E5E-434E-98BE-17BCDF600611 + version + 2 + + diff --git a/vendor/grammars/less.tmbundle/Commands/Save to Minified CSS.tmCommand b/vendor/grammars/less.tmbundle/Commands/Save to Minified CSS.tmCommand new file mode 100644 index 00000000..fc8fe21f --- /dev/null +++ b/vendor/grammars/less.tmbundle/Commands/Save to Minified CSS.tmCommand @@ -0,0 +1,47 @@ + + + + + beforeRunningCommand + saveActiveFile + command + #!/usr/bin/env ruby18 + +file = ENV["TM_FILEPATH"] +target = file.sub(/\.less$/, ".css") +system("lessc -x \"#{file}\" \"#{target}\"") +puts "Compiled Minified CSS to '#{target}'" + input + document + inputFormat + text + keyEquivalent + ~@b + name + Save to Minified CSS + outputCaret + afterOutput + outputFormat + text + outputLocation + toolTip + requiredCommands + + + command + lessc + locations + + /opt/local/bin/lessc + /usr/local/bin/lessc + + + + scope + source.css.less + uuid + 448D3A8D-260E-4949-BA33-654886ECDCAF + version + 2 + + diff --git a/vendor/grammars/less.tmbundle/DragCommands/Insert inline Image.tmDragCommand b/vendor/grammars/less.tmbundle/DragCommands/Insert inline Image.tmDragCommand new file mode 100644 index 00000000..21ce88f4 --- /dev/null +++ b/vendor/grammars/less.tmbundle/DragCommands/Insert inline Image.tmDragCommand @@ -0,0 +1,38 @@ + + + + + beforeRunningCommand + nop + command + #!/usr/bin/env php +<?php +$path = getenv('TM_DROPPED_FILE'); +$path_parts = pathinfo($path); +$info = getimagesize($path); +list($width, $height) = $info; +$mime = $info['mime']; +$contents = base64_encode(file_get_contents($path)); + +echo "@gfx-{$path_parts['filename']}: \"data:{$mime};base64,{$contents}\";\n"; +echo "@gfx-{$path_parts['filename']}-width: {$width}px;\n"; +echo "@gfx-{$path_parts['filename']}-height: {$height}px;"; + draggedFileExtensions + + png + jpeg + jpg + gif + + input + selection + name + Insert inline Image + output + insertAsSnippet + scope + source.css.less + uuid + 7B0CA307-CC1C-4EE2-9F63-4825800ACDA7 + + diff --git a/vendor/grammars/less.tmbundle/Preferences/Comment.tmPreferences b/vendor/grammars/less.tmbundle/Preferences/Comment.tmPreferences new file mode 100644 index 00000000..1d8bf1fe --- /dev/null +++ b/vendor/grammars/less.tmbundle/Preferences/Comment.tmPreferences @@ -0,0 +1,36 @@ + + + + + name + Comments + scope + source.css.less + settings + + shellVariables + + + name + TM_COMMENT_START + value + // + + + name + TM_COMMENT_START_2 + value + /* + + + name + TM_COMMENT_END_2 + value + */ + + + + uuid + D0CC551B-751D-4A7C-A738-2513E3C7F285 + + diff --git a/vendor/grammars/less.tmbundle/README.md b/vendor/grammars/less.tmbundle/README.md new file mode 100644 index 00000000..ed6ac672 --- /dev/null +++ b/vendor/grammars/less.tmbundle/README.md @@ -0,0 +1,25 @@ +# Installation + +You can install this bundle in TextMate by opening the preferences and going to the bundles tab. After installation it will be automatically updated for you. + +# License (MIT) + +Copyright (c) 2010 Scott Kyle and Rasmus Andersson + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/grammars/less.tmbundle/Syntaxes/LESS.tmLanguage b/vendor/grammars/less.tmbundle/Syntaxes/LESS.tmLanguage new file mode 100644 index 00000000..ac6ff8ba --- /dev/null +++ b/vendor/grammars/less.tmbundle/Syntaxes/LESS.tmLanguage @@ -0,0 +1,434 @@ + + + + + comment + LeSS + fileTypes + + less + + foldingStartMarker + /\*\*(?!\*)|\{\s*($|/\*(?!.*?\*/.*\S)) + foldingStopMarker + (?<!\*)\*\*/|^\s*\} + keyEquivalent + ^~L + name + LESS + patterns + + + match + \b(a|abbr|acronym|address|applet|article|area|audio|video|b|base|big|blockquote|body|br|button|caption|canvas|center|cite|code|col|colgroup|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figure|figcaption|form|frame|frameset|(h[1-6])|head|hr|html|i|iframe|img|input|ins|kbd|label|legend|li|link|map|mark|meta|menu|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|q|ruby|s|samp|script|select|small|span|strike|strong|style|sub|sup|summary|svg|table|tbody|td|textarea|tfoot|th|thead|title|tr|tt|u|ul|var|header|section|footer|aside|hgroup|time)\b + name + keyword.control.html.elements + + + begin + " + beginCaptures + + 0 + + name + punctuation.definition.string.begin.css + + + end + " + endCaptures + + 0 + + name + punctuation.definition.string.end.css + + + name + string.quoted.double.css + patterns + + + match + \\. + name + constant.character.escaped.css + + + + + begin + ' + beginCaptures + + 0 + + name + punctuation.definition.string.begin.css + + + end + ' + endCaptures + + 0 + + name + punctuation.definition.string.end.css + + + name + string.quoted.single.css + patterns + + + match + \\. + name + constant.character.escaped.css + + + + + captures + + 1 + + name + entity.other.attribute-name.class.css + + + match + (\.[a-zA-Z0-9_-]+) + + + begin + url\( + contentName + variable.parameter.url + end + \) + name + support.function.any-method.builtin.css + + + match + (#)([0-9a-fA-F]{3}|[0-9a-fA-F]{6})\b + name + constant.other.rgb-value.css + + + captures + + 0 + + name + entity.other.attribute-name.id + + + match + #[a-zA-Z0-9_:\(\)-]+ + name + meta.selector.css + + + begin + /\* + beginCaptures + + 0 + + name + punctuation.definition.comment.begin.css + + + end + \*/ + endCaptures + + 0 + + name + punctuation.definition.comment.end.css + + + name + comment.block.css + + + match + (-|\+)?\s*[0-9]+(\.[0-9]+)? + name + constant.numeric.css + + + match + (?<=[\d])(px|pt|cm|mm|in|em|ex|pc)\b|% + name + keyword.other.unit.css + + + captures + + 1 + + name + entity.other.attribute-name.pseudo-element.css + + + match + (:+(after|before|not|last-child|nth-of-type|nth-child|first-child|first-letter|first-line|selection|root)) + + + captures + + 1 + + name + entity.other.attribute-name.pseudo-class.css + + + match + (:+(active|hover|link|visited|focus)) + + + captures + + 1 + + name + punctuation.definition.entity.css + + 2 + + name + entity.other.attribute-name.attribute.css + + 3 + + name + punctuation.separator.operator.css + + 4 + + name + string.unquoted.attribute-value.css + + 5 + + name + string.quoted.double.attribute-value.css + + 6 + + name + punctuation.definition.string.begin.css + + 7 + + name + punctuation.definition.string.end.css + + + match + (?i)(\[)\s*(-?[_a-z\\[[:^ascii:]]][_a-z0-9\-\\[[:^ascii:]]]*)(?:\s*([~|^$*]?=)\s*(?:(-?[_a-z\\[[:^ascii:]]][_a-z0-9\-\\[[:^ascii:]]]*)|((?>(['"])(?:[^\\]|\\.)*?(\6)))))?\s*(\]) + name + meta.attribute-selector.css + + + captures + + 1 + + name + keyword.control.at-rule.import.css + + 2 + + name + punctuation.definition.keyword.css + + + match + ^\s*((@)import\b) + name + meta.at-rule.import.css + + + captures + + 1 + + name + support.type.property-name.css.vendor + + + match + (-(?:webkit|moz|khtml|o|icab|ms)-(?:background-size|border-radius|box-shadow|opacity|border-image))\s*: + + + captures + + 1 + + name + support.type.property-name.css + + + match + \b(azimuth|background-attachment|background-color|background-clip|background-image|background-position|background-repeat|background-size|background|behavior|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border-radius|border|box-shadow|bottom|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|filter|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow(-[xy])?|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|pre-wrap|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|word-wrap|z-index|zoom) + + + match + \b(absolute|all-scroll|always|auto|baseline|below|bidi-override|block|bold|bolder|both|bottom|break-all|break-word|capitalize|center|char|circle|col-resize|collapse|crosshair|dashed|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|groove|hand|help|hidden|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|keep-all|left|lighter|line-edge|line-through|line|linear|list-item|loose|lower-alpha|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|padding-box)\b + name + support.constant.property-value.css + + + match + (\b(?i:arial|century|comic|courier|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace)\b) + name + support.constant.font-name.css + + + comment + http://www.w3.org/TR/CSS21/syndata.html#value-def-color + match + \b(aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow)\b + name + support.constant.color.w3c-standard-color-name.css + + + match + \b(saturate|desaturate|lighten|darken|grayscale)\b + name + support.function.any-method.builtin.less + + + match + \b(rgb|rgba|hsl|hsla|url)\b + name + support.function.any-method.builtin.css + + + captures + + 1 + + name + support.function.any-method.vendor.css + + + match + (-(?:webkit|moz|khtml|o|icab)-(?:gradient|linear-gradient)) + + + match + \b(color-stop|from|to)\b + name + support.function.any-method.webkit.gradient.css + + + captures + + 1 + + name + support.function.less + + + match + (\.[a-zA-Z0-9_-]+)\s*(;|\() + + + begin + (^[ \t]+)?(?=//) + beginCaptures + + 1 + + name + punctuation.whitespace.comment.leading.less + + + end + (?!\G) + patterns + + + begin + // + beginCaptures + + 0 + + name + punctuation.definition.comment.less + + + end + \n + name + comment.line.double-slash.less + + + + + match + @[a-zA-Z0-9_-][\w-]* + name + variable.other.less + + + match + \$|%|&|\*|\-\-|\-|\+\+|\+|~|===|==|=|!=|!==|<=|>=|<<=|>>=|>>>=|<>|<|>|!|&&|\|\||\?\:|\*=|(?<!\()/=|%=|\+=|\-=|&=|\^=|\/\b + name + keyword.operator.less + + + captures + + 1 + + name + punctuation.section.property-list.begin.css + + 2 + + name + punctuation.section.property-list.end.css + + + comment + Match empty braces to give proper ↩ action + match + (\{)(\}) + name + meta.brace.curly.less + + + match + \{|\} + name + meta.brace.curly.less + + + match + \(|\) + name + meta.brace.round.less + + + match + \[|\] + name + meta.brace.square.less + + + scopeName + source.css.less + uuid + 9343D324-75A1-4733-A5C0-5D1D4B6182D0 + + diff --git a/vendor/grammars/less.tmbundle/info.plist b/vendor/grammars/less.tmbundle/info.plist new file mode 100644 index 00000000..e555f0ba --- /dev/null +++ b/vendor/grammars/less.tmbundle/info.plist @@ -0,0 +1,26 @@ + + + + + contactEmailRot13 + zfurrgf@juvgrsnyyf.bet + contactName + Michael Sheets + description + Extends CSS with dynamic behavior such as variables, mixins, operations and functions. + mainMenu + + items + + 78788223-5E5E-434E-98BE-17BCDF600611 + 448D3A8D-260E-4949-BA33-654886ECDCAF + + submenus + + + name + LESS + uuid + D1D51EE5-E89F-4B14-8AE4-FC364E540B47 + + From 54fab9eb4ed6a3a9bfa36d1c28aaff2aaeea51a8 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Mon, 29 Feb 2016 07:55:43 -0700 Subject: [PATCH 336/356] Bumping to v4.7.6 --- lib/linguist/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index bc1707a9..7bb4af7b 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.7.5" + VERSION = "4.7.6" end From ae27c71d5a9416a0c85f8ca96f0e772355d4133d Mon Sep 17 00:00:00 2001 From: Michael Zhou Date: Mon, 29 Feb 2016 20:35:57 -0500 Subject: [PATCH 337/356] Add BUCK filename to Python in languages.yml BUCK is the filename for the build files of the Facebook Buck build system. BUCK files are valid Python files. Eg.: https://github.com/GerritCodeReview/gerrit/blob/master/BUCK Also add a missing sample for Pants / Bazel BUILD files. They are also valid Python files. --- lib/linguist/languages.yml | 3 ++- samples/Python/filenames/BUCK | 31 +++++++++++++++++++++++ samples/Python/filenames/BUILD | 45 ++++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) create mode 100644 samples/Python/filenames/BUCK create mode 100644 samples/Python/filenames/BUILD diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 49194cbf..a4f4d3a6 100755 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -474,7 +474,7 @@ CSS: color: "#563d7c" extensions: - .css - + CSV: type: data ace_mode: text @@ -2854,6 +2854,7 @@ Python: - .wsgi - .xpy filenames: + - BUCK - BUILD - SConscript - SConstruct diff --git a/samples/Python/filenames/BUCK b/samples/Python/filenames/BUCK new file mode 100644 index 00000000..9657ff3a --- /dev/null +++ b/samples/Python/filenames/BUCK @@ -0,0 +1,31 @@ +include_defs('//tools/build.defs') + +gerrit_war(name = 'gerrit') +gerrit_war(name = 'gwtgerrit', ui = 'ui_dbg') +gerrit_war(name = 'headless', ui = None) +gerrit_war(name = 'chrome', ui = 'ui_chrome') +gerrit_war(name = 'firefox', ui = 'ui_firefox') +gerrit_war(name = 'safari', ui = 'ui_safari') +gerrit_war(name = 'polygerrit', ui = 'polygerrit') +gerrit_war(name = 'withdocs', docs = True) +gerrit_war(name = 'release', ui = 'ui_optdbg_r', docs = True, context = ['//plugins:core'], visibility = ['//tools/maven:']) + +API_DEPS = [ + '//gerrit-acceptance-framework:acceptance-framework', + '//gerrit-acceptance-framework:acceptance-framework-src', + '//gerrit-acceptance-framework:acceptance-framework-javadoc', + '//gerrit-extension-api:extension-api', + '//gerrit-extension-api:extension-api-src', + '//gerrit-extension-api:extension-api-javadoc', + '//gerrit-plugin-api:plugin-api', + '//gerrit-plugin-api:plugin-api-src', + '//gerrit-plugin-api:plugin-api-javadoc', + '//gerrit-plugin-gwtui:gwtui-api', + '//gerrit-plugin-gwtui:gwtui-api-src', + '//gerrit-plugin-gwtui:gwtui-api-javadoc', +] + +zip_file( + name = 'api', + srcs = API_DEPS, +) diff --git a/samples/Python/filenames/BUILD b/samples/Python/filenames/BUILD new file mode 100644 index 00000000..92057751 --- /dev/null +++ b/samples/Python/filenames/BUILD @@ -0,0 +1,45 @@ +package(default_visibility = ["//scripts/release:__pkg__"]) + +filegroup( + name = "git", + srcs = glob([".git/**"]), +) + +filegroup( + name = "dummy", + visibility = ["//visibility:public"], +) + +filegroup( + name = "srcs", + srcs = glob( + ["**"], + exclude = [ + "bazel-*/**", + "output/**", + ".*/**", + ], + ) + [ + "//examples:srcs", + "//scripts:srcs", + "//site:srcs", + "//src:srcs", + "//tools:srcs", + "//third_party:srcs", + ], + visibility = ["//visibility:private"], +) + +load("//tools/build_defs/pkg:pkg.bzl", "pkg_tar") + +pkg_tar( + name = "bazel-srcs", + files = [":srcs"], + strip_prefix = ".", + # Public but bazel-only visibility. + visibility = ["//:__subpackages__"], +) + +load("//tools/build_rules/go:def.bzl", "go_prefix") + +go_prefix("github.com/bazelbuild/bazel") From ca4ea03828b0444c046e6f5526b147a070a365ea Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Thu, 3 Mar 2016 19:15:09 -0500 Subject: [PATCH 338/356] Recognizing Jenkinsfile as Groovy source. --- lib/linguist/languages.yml | 2 ++ lib/linguist/vendor.yml | 3 ++ samples/Groovy/filenames/Jenkinsfile | 46 ++++++++++++++++++++++++++++ test/test_file_blob.rb | 3 ++ 4 files changed, 54 insertions(+) create mode 100644 samples/Groovy/filenames/Jenkinsfile diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 49194cbf..117f2f79 100755 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1310,6 +1310,8 @@ Groovy: - .gvy interpreters: - groovy + filenames: + - Jenkinsfile Groovy Server Pages: type: programming diff --git a/lib/linguist/vendor.yml b/lib/linguist/vendor.yml index 294f312b..15001e98 100644 --- a/lib/linguist/vendor.yml +++ b/lib/linguist/vendor.yml @@ -302,3 +302,6 @@ # Android Google APIs - (^|/)\.google_apis/ + +# Jenkins Pipeline +- ^Jenkinsfile$ diff --git a/samples/Groovy/filenames/Jenkinsfile b/samples/Groovy/filenames/Jenkinsfile new file mode 100644 index 00000000..582306c4 --- /dev/null +++ b/samples/Groovy/filenames/Jenkinsfile @@ -0,0 +1,46 @@ +jettyUrl = 'http://localhost:8081/' + +def servers + +stage 'Dev' +node { + checkout scm + servers = load 'servers.groovy' + mvn '-o clean package' + dir('target') {stash name: 'war', includes: 'x.war'} +} + +stage 'QA' +parallel(longerTests: { + runTests(servers, 30) +}, quickerTests: { + runTests(servers, 20) +}) + +stage name: 'Staging', concurrency: 1 +node { + servers.deploy 'staging' +} + +input message: "Does ${jettyUrl}staging/ look good?" + +stage name: 'Production', concurrency: 1 +node { + sh "wget -O - -S ${jettyUrl}staging/" + echo 'Production server looks to be alive' + servers.deploy 'production' + echo "Deployed to ${jettyUrl}production/" +} + +def mvn(args) { + sh "${tool 'Maven 3.x'}/bin/mvn ${args}" +} + +def runTests(servers, duration) { + node { + checkout scm + servers.runWithServer {id -> + mvn "-o -f sometests test -Durl=${jettyUrl}${id}/ -Dduration=${duration}" + } + } +} diff --git a/test/test_file_blob.rb b/test/test_file_blob.rb index ebb0b7fc..1b83a0fb 100644 --- a/test/test_file_blob.rb +++ b/test/test_file_blob.rb @@ -522,6 +522,9 @@ class TestBlob < Minitest::Test assert sample_blob("myapp/My Template.xctemplate/___FILEBASENAME___.h").vendored? assert sample_blob("myapp/My Images.xcassets/some/stuff.imageset/Contents.json").vendored? assert !sample_blob("myapp/MyData.json").vendored? + + # Jenkins + assert sample_blob("Jenkinsfile").vendored? end def test_documentation From b2e3ea233468a1a30ac1b67a3980fea67838948b Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Tue, 8 Mar 2016 21:56:01 -0600 Subject: [PATCH 339/356] Adding ace_mode back for M4Sugar --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 27aaa75e..442117a0 100755 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -2024,6 +2024,7 @@ M4Sugar: filenames: - configure.ac tm_scope: none + ace_mode: text MAXScript: type: programming From 5b72b4d3533fd931b183756c262158c10540d670 Mon Sep 17 00:00:00 2001 From: Mike Linksvayer Date: Tue, 8 Mar 2016 21:05:55 -0800 Subject: [PATCH 340/356] move note about grammar repos from LICENSE to README.md --- LICENSE | 6 ------ README.md | 8 ++++++++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/LICENSE b/LICENSE index 7981307b..f09a7d0a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,9 +1,3 @@ -The language grammars included in this gem are covered by their repositories' -respective licenses. See https://github.com/github/linguist/blob/master/grammars.yml -to determine the repository for each grammar. - -All other files are covered by the following license: - Copyright (c) 2011-2014 GitHub, Inc. Permission is hereby granted, free of charge, to any person diff --git a/README.md b/README.md index c2c803a8..2a5e7520 100644 --- a/README.md +++ b/README.md @@ -194,3 +194,11 @@ If you are the current maintainer of this gem: 0. Merge github/linguist PR 0. Tag and push: `git tag vx.xx.xx; git push --tags` 0. Push to rubygems.org -- `gem push github-linguist-3.0.0.gem` + +## License + +The language grammars included in this gem are covered by their repositories' +respective licenses. `grammars.yml` specifies the repository for each grammar. + +All other files are covered by the MIT license, see `LICENSE`. + From eacc48e8c7ad5c595b26268ab64fabae7eee7ea1 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Mon, 4 May 2015 09:29:38 +0200 Subject: [PATCH 341/356] Add .me to Groff file extensions. --- lib/linguist/languages.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 442117a0..6f0bf16e 100755 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1290,6 +1290,7 @@ Groff: - '.8' - '.9' - .l + - .me - .ms - .n - .rno From 11a3b5b73cf0029e51e50b48a29bdb2ee3524ec7 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Wed, 9 Mar 2016 10:37:41 +0100 Subject: [PATCH 342/356] Support for Text extension .nb (Norwegian text) --- lib/linguist/languages.yml | 1 + samples/Text/aptitude-defaults.nb | 41 ++ samples/Text/tutor.nb | 973 ++++++++++++++++++++++++++++++ 3 files changed, 1015 insertions(+) create mode 100644 samples/Text/aptitude-defaults.nb create mode 100644 samples/Text/tutor.nb diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 442117a0..0171e1aa 100755 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3572,6 +3572,7 @@ Text: extensions: - .txt - .fr + - .nb - .ncl tm_scope: none ace_mode: text diff --git a/samples/Text/aptitude-defaults.nb b/samples/Text/aptitude-defaults.nb new file mode 100644 index 00000000..67c37f59 --- /dev/null +++ b/samples/Text/aptitude-defaults.nb @@ -0,0 +1,41 @@ +Pakker uten en bestemt bolk\n Disse pakkene tilhører ingen bestemt bolk. Kanskje det er noe feil ved dem? +Virtuelle pakker\n Disse pakkene finnes ikke, de er navn som andre pakker bruker for å oppnå en eller annen egenskap. +Pakker som setter opp systemet ditt til å utføre en bestemt oppgave\n Pakkene i bolken «oppgaver» inneholder ingen filer, det kan hende de bare er avhengige av andre pakker. Disse pakkene gjør det mulig å installere pakker for en bestemt oppgave på en lett måte. +Administrative verktøy\n Pakkene i bolken «admin» gjør det mulig å utføre administrative oppgaver, som å installere programmer, opprette eller slette brukere, vise informasjon om systemet eller nettverkstrafikken osv. +Pakker som er laget av pakker i et annet format (rpm, tgz mm)\n Pakkene i bolken «alien» ble laget av programmet «alien» fra et annet format enn Debians eget pakkeformat, f.eks fra RPM-pakker +Debians grunnsystem\n Pakkene i bolken «grunnsystem» hører med til første del av Debian-installasjonen. +Programmer for faksmodem og andre kommunikasjonsenheter\n Pakkene i bolken «Kommunikasjon» brukes til å styre modemer og andre enheter på maskinen, deriblant programvare for styring av faksmodemer (for eksempel, PPP for oppringt internettforbindelse og programmer som opprinnelig er skrevet for dette, slik som zmodem og kermit), og programmer for å styre mobiltelefoner, snakke med FidoNet og kjøre et BBS. +Verktøy og programmer for programvareutvikling\n Pakker i seksjonen «utvikling» blir brukt til å skrive nye programmer og for å jobbe med videre med programmer som allerede er laget. Vanlige brukere som ikke kompilerer (setter sammen) sine egne programmer trenger neppe så mange programmer herfra.\n .\n Her finner du kompilatorer, avlusingsverktøy, skriveprogrammer som hjelper til med programmeringen, verktøy for håndtering av kildekode og andre ting som har med utvikling av programmer å gjøre. +Dokumentasjon og spesialiserte program for visning av dokumentasjon\n Pakker i «dok»-seksjonen dokumenterer deler av Debian-systemet eller viser fram dokumenter i forskjellige format. +Skriveprogram og tekstbehandlere\n Pakker i bolken «skriveprogram» lar deg redigere ren ASCII-tekst. Dette er nødvendigvis ikke tekstbehandlere, selv om du kan finne noen av dem her i denne bolken. +Program for å jobba med elektronikk og elektriske kretser\n Pakker i «elektronikk»-seksjonen inneholder verktøy for design av elektriske kretser, simulatorer og assemblere for mikrokontrollere og andre liknende programmer. +Programmer for innebygde systemer\nPakker i bolken «innebygd» er ment til å kjøre på innebygde systemer. Dette er spesialisert maskinvare med mye mindre datakraft enn en typisk skrivebordssystem, for eksempel en PDA, en mobiltelefon eller en Tivo. +Skrivebordssystemet GNOME\n GNOME er en samling programvare som danner et lettbrukt skrivbordsmiljø for Linux. Pakker i «gnome»-bolken er enten deler av GNOME-miljøet eller tett sammenvevd med det. +Spill, leketøy og andre programmer som bare er for gøy\n Pakker i «spill»-bolken er stort sett bare til for underholdningens skyld. +Verktøy for å lage, vise og redigere grafikkfiler\n Pakker i «grafikk»-bolken er programmer for visning av bildefiler, bildebehandlingsprogrammer, støtteprogrammer for forskjellig utstyr (som videokort, skanner og digitalt kamera) og programmeringsverktøy for å håndtere grafikk. +Programvare for radioamatører\n Pakker i «hamradio»-bolken er stort sett ment for radioamatører. +Programmer som kjører skriptspråk\n Pakker i «tolkeprogram»-bolken er programmer som kompilerer og kjører språk som Python, Perl og Ruby, og som sørger for standardbibliotek for disse språkene. +Skrivebordssystemet KDE\n KDE er en samling programvare som danner et lettbrukt skrivbordsmiljø for Linux. Pakker i «kde»-bolken er enten deler av KDE-miljøet eller tett sammenvevd med det. +Utviklingsfiler for biblioteker\n Pakker i «libdevel»-bolken inneholder filer som trengs for å lage programmer som bruker biblioteker i «libs»-bolken. Du trenger ikke pakker fra denne bolken hvis du ikke har tenkt å lage programmer selv. +Samling av programvarerutiner\n Pakker i «libs»-seksjonen sørger for nødvendige funksjoner som er felles for andre programmer på maskinen. Med svært få unntak skal det ikke værenødvendig å be om at slike pakker blir installert. Pakkesystemet sørger for å installere dem når de andre programmene trenger dem. +Perl-tolker og biblioteker\n Pakker i «perl»-bolken sørger for programmeringsspråket Perl og mange tredjeparts-biblioteker til Perl. Hvis du ikke er Perl-programmerer selv, så trenger du ikke uttrykkelig installere pakker fra denne bolken, pakkesystemet installerer dem selv hvis det er nødvendig. +Python-tolker og biblioteker\n Pakker i «python»-bolken sørger for programmeringsspråket Python og mange tredjeparts-biblioteker til det. Hvis du ikke er Python-programmerer selv, så trenger du ikke uttrykkelig installere pakker fra denne bolken, pakkesystemet installerer dem selv hvis det er nødvendig. +Program for å skrive, sende og omdirigere epostmeldinger\n Pakker i «epost»-bolken inneholder epostlesere, nisser som flytter eposten dit den skal, programvare for epostlister og filter for søppelpost. Det fins også diverse andre programmer som gjør noe med elektronisk post, men som ikke er så lette å plassere i grupper. +Numerisk analyse og andre matematikkrelaterte programmer\n Blant pakker i «matte»-bolken fins kalkulatorer, språk for matematiske utregninger, symbolsk algebra og programmer for å tegne ut matematiske objekter. +Ymse programvare\n Pakker i «ymse»-bolken er ofte vanskelige å klassifisere, men det betyr ikke at de ikke finnes. +Programmer for å koble til og tilby ulike tjenester i et nettverk\n Blant pakker i «nett»-bolken finner du klienter og tjenere for mange protokoller, verktøy for å manipulere og avluse lavnivå nettverksprotokoller, system for direkte meldingstjeneste og andre nettverksrelaterte programmer. +Klienter og tjenere for Usenet\n Pakker i bolken «nyheter» henger sammen med til det distribuerte nyhetssystemet Usenet. Seksjonen tjenere og leseprogrammer (klienter) for dette systemet. +Foreldede programbibliotek\n Pakker i bolken «gamle bibliotek» er foreldede og bør ikke brukes i ny programvare. De er tilgjengelige for at eldre programmer som er avhengige av programmene her fortsatt skal kunne virke.\n .\n Du skal normalt ikke behøve å be om å få installert pakker herfra. Pakkesystemet vil ta med disse pakkene når andre pakker krever det. +Programmer som etterlikner andre datasystemer og og programmer som hjelper deg med å lese fremmede filsystem\n Pakker i bolken «andreosfs» etterlikner maskinvare og operativsystem og tilbyr verktøy for å overføre data mellom ulike operativsystem og maskinvareplattformer. (For eksempel verktøy for å lese DOS-disketter, og verktøy til å kommunisere med håndholdte maskiner som Palm Pilot)\n .\n Programmer for å brenne CD-plater er også med i denne seksjonen. +Programvare for vitenskaplig arbeid\n Pakker i «vitenskap»-bolken er verktøy for astronomi, biologi og kjemi, pluss andre programmer man bruker i vitenskapelig arbeide. +Kommandoskall og alternative konsollmiljø\n Pakker i «skall» er programmer som tilbyr grensesnitt med kommandolinje. +Verktøy for å spille av og ta opp lyd\nI «lyd»-bolken finner du lydavspillere, opptakere, lydkomprimeringsprogram for mange format, miksere og lydstyring, program for MIDI-sekvenser og program for å lage noter. Her finner du også drivere for lydkort og programmer for lydprosessering. +TeX typografi-systemet\n Pakker i bolken «tex» er deler i et system for å produsere utskrifter og andre slags utdata med høy typografisk kvalitet. Det omfatter selve TeX, TeX-pakker, skriveprogrammer som hjelper deg med å lage dokumenter i TeX, verktøy for å gjøre om TeX og TeX utdatafiler til ulike andre format, TeX-skrifttyper og annen programvare knyttet TeX. +Tekstverktøy\n I bolken «tekst» finner du skriveprogrammer og tekstfiltere, stavekontroll, ordbøker og verktøy for å oversette mellom tegnkoding og tekst-filformater (for eksempel Unix og DOS) og programmer for å formatere, skrive ut og redigere som ren tekst. +Forskjellige systemverktøy\n Pakkene i bolken «verktøy» har oppgaver som faller utenfor de andre kategoriene. +Nettlesere, tjenere, mellomtjenere og andre verktøy\n I bolken «nett» finner du blant annet nettlesere, tjenere og mellomtjenere, programmer for å skrive CGI-skript eller nettbaserte programmer og andre programmer som har med verdensveven å gjøre. +Vindussystemet «X» og beslektede programmer\n Pakkene i bolken «X11» inneholder også grunnpakka for vindussystemet «X», vindusbehandlere, verktøy for X og andre programmer med en X-grensesnitt som ble plassert her fordi de ikke passet inn noen andre steder. +Debians hovedarkiv\n Selve Debian-distribusjonen består av pakker fra hovedbolken. Alle pakkene her er fri programvare.\n .\n For mer informasjon om hva Debian mener med «fri programvare», se http://www.debian.org/social_contract#guidelines + Programmer som avhenger av programvare utenfor Debian.\n Pakker i bolken«bidrag» er ikke med i Debian.\n\n Disse pakkene er fri programvare, men de avhenger av programmer som ikke er en del av Debian. Dette kan skyldes at de ikke er fri programvare og ligger i bolken «ufri» i pakkearkivet, og disse kan Debian slett ikke distribuere, eller - i noen sjeldne tilfeller - at ingen har laget en pakke av dette ennå.\n .\n For mer informasjon om hva Debian mener med «fri programvare», se http://www.debian.org/social_contract#guidelines +Programmer som ikke er fri programvare \n Pakkene i bolken «ufri» er ikke en del av Debian\n .\n Disse pakkene passet ikke med en eller flere av betingelsene i Debians retningslinjer for fri programvare (Debian Free Software Guidelines; se nedenfor). Du bør lese lisensen for programmene i denne bolken for å være sikker på at du har rett til å bruke dem slik du har tenkt.\n .\n For mer informasjon om hva Debian mener med «Fri programvare», se http://www.debian.org/social_contract#guidelines +Programmer som er lagret utenfor USA på grunn av eksportforbud.\n Det er stor sjanse for at pakkene i «utenfor USA» inneholder kryptografi, og noen få av dem inneholder patenterte algoritmer. På grunn av dette kan de ikke eksporteres ut av USA, og lagres derfor på en tjener i «den frie verden».\n .\n Merk: Debian-prosjektet er, etter samtale med eksperter på rettsvesenet om nye endringer i eksporteringsreglene, i ferd med å flette kryptografiske programmer inn i de USA-baserte arkivene. De fleste pakkene som før lå i denne bolken er derfor flyttet til «hoved». \ No newline at end of file diff --git a/samples/Text/tutor.nb b/samples/Text/tutor.nb new file mode 100644 index 00000000..242119c7 --- /dev/null +++ b/samples/Text/tutor.nb @@ -0,0 +1,973 @@ +=============================================================================== += V e l k o m m e n t i l i n n f ø r i n g e n i V i m -- Ver. 1.7 = +=============================================================================== + + Vim er en meget kraftig editor med mange kommandoer, alt for mange til å + kunne gå gjennom alle i en innføring som denne. Den er beregnet på å + sette deg inn i bruken av nok kommandoer så du vil være i stand til lett + å kunne bruke Vim som en editor til alle formål. + + Tiden som kreves for å gå gjennom denne innføringen tar ca. 25-30 + minutter, avhengig av hvor mye tid du bruker til eksperimentering. + + MERK: + Kommandoene i leksjonene vil modifisere teksten. Lag en kopi av denne + filen som du kan øve deg på (hvis du kjørte Ŧvimtutorŧ-kommandoen, er + dette allerede en kopi). + + Det er viktig å huske at denne innføringen er beregnet på læring gjennom + bruk. Det betyr at du må utføre kommandoene for å lære dem skikkelig. + Hvis du bare leser teksten, vil du glemme kommandoene! + + Først av alt, sjekk at ŦCaps Lockŧ IKKE er aktiv og trykk Ŧjŧ-tasten for + å flytte markøren helt til leksjon 1.1 fyller skjermen. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.1: FLYTTING AV MARKØREN + + + ** For å flytte markøren, trykk tastene h, j, k, l som vist. ** + ^ + k Tips: h-tasten er til venstre og flytter til venstre. + < h l > l-tasten er til høyre og flytter til høyre. + j j-tasten ser ut som en pil som peker nedover. + v + 1. Flytt markøren rundt på skjermen til du har fått det inn i fingrene. + + 2. Hold inne nedovertasten (j) til den repeterer. + Nå vet du hvordan du beveger deg til neste leksjon. + + 3. Gå til leksjon 1.2 ved hjelp av nedovertasten. + +Merk: Hvis du blir usikker på noe du har skrevet, trykk for å gå til + normalmodus. Skriv deretter kommandoen du ønsket på nytt. + +Merk: Piltastene skal også virke. Men ved å bruke hjkl vil du være i stand til + å bevege markøren mye raskere når du er blitt vant til det. Helt sant! + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.2: AVSLUTTE VIM + + + !! MERK: Før du utfører noen av punktene nedenfor, les hele leksjonen!! + + 1. Trykk -tasten (for å forsikre deg om at du er i normalmodus). + + 2. Skriv: :q! . + Dette avslutter editoren og FORKASTER alle forandringer som du har gjort. + + 3. Når du ser kommandolinjen i skallet, skriv kommandoen som startet denne + innføringen. Den er: vimtutor + + 4. Hvis du er sikker på at du husker dette, utfør punktene 1 til 3 for å + avslutte og starte editoren på nytt. + +MERK: :q! forkaster alle forandringer som du gjorde. I løpet av noen + få leksjoner vil du lære hvordan du lagrer forandringene til en fil. + + 5. Flytt markøren ned til leksjon 1.3. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.3: REDIGERING AV TEKST -- SLETTING + + + ** Trykk x for å slette tegnet under markøren. ** + + 1. Flytt markøren til den første linjen merket med --->. + + 2. For å ordne feilene på linjen, flytt markøren til den er oppå tegnet som + skal slettes. + + 3. Trykk tasten x for å slette det uønskede tegnet. + + 4. Repeter punkt 2 til 4 til setningen er lik den som er under. + +---> Hessstennnn brrråsnudddde ii gaaata. +---> Hesten bråsnudde i gata. + + 5. Nå som linjen er korrekt, gå til leksjon 1.4. + +MERK: Når du går gjennom innføringen, ikke bare prøv å huske kommandoene, men + bruk dem helt til de sitter. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.4: REDIGERING AV TEKST -- INNSETTING + + + ** Trykk i for å sette inn tekst. ** + + 1. Flytt markøren til den første linjen som er merket med --->. + + 2. For å gjøre den første linjen lik den andre, flytt markøren til den står + på tegnet ETTER posisjonen der teksten skal settes inn. + + 3. Trykk i og skriv inn teksten som mangler. + + 4. Etterhvert som hver feil er fikset, trykk for å returnere til + normalmodus. Repeter punkt 2 til 4 til setningen er korrekt. + +---> Det er tkst som mnglr . +---> Det er ganske mye tekst som mangler her. + + 5. Når du føler deg komfortabel med å sette inn tekst, gå til oppsummeringen + nedenfor. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.5: REDIGERING AV TEKST -- LEGGE TIL + + + ** Trykk A for å legge til tekst. ** + + 1. Flytt markøren til den første linjen nedenfor merket --->. + Det har ikke noe å si hvor markøren er plassert på den linjen. + + 2. Trykk A og skriv inn det som skal legges til. + + 3. Når teksten er lagt til, trykk for å returnere til normalmodusen. + + 4. Flytt markøren til den andre linjen markert med ---> og repeter steg 2 og + 3 for å reparere denne setningen. + +---> Det mangler noe tekst p + Det mangler noe tekst på denne linjen. +---> Det mangler også litt tek + Det mangler også litt tekst på denne linjen. + + 5. Når du føler at du behersker å legge til tekst, gå til leksjon 1.6. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.6: REDIGERE EN FIL + + + ** Bruk :wq for å lagre en fil og avslutte. ** + + !! MERK: Før du utfører noen av stegene nedenfor, les hele denne leksjonen!! + + 1. Avslutt denne innføringen som du gjorde i leksjon 1.2: :q! + + 2. Skriv denne kommandoen på kommandolinja: vim tutor + Ŧvimŧ er kommandoen for å starte Vim-editoren, Ŧtutorŧ er navnet på fila + som du vil redigere. Bruk en fil som kan forandres. + + 3. Sett inn og slett tekst som du lærte i de foregående leksjonene. + + 4. Lagre filen med forandringene og avslutt Vim med: :wq + + 5. Start innføringen på nytt og flytt ned til oppsummeringen som følger. + + 6. Etter å ha lest og forstått stegene ovenfor: Sett i gang. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 1 + + + 1. Markøren beveges ved hjelp av piltastene eller hjkl-tastene. + h (venstre) j (ned) k (opp) l (høyre) + + 2. For å starte Vim fra skall-kommandolinjen, skriv: vim FILNAVN + + 3. For å avslutte Vim, skriv: :q! for å forkaste endringer. + ELLER skriv: :wq for å lagre forandringene. + + 4. For å slette tegnet under markøren, trykk: x + + 5. For å sette inn eller legge til tekst, trykk: + i skriv innsatt tekst sett inn før markøren + A skriv tillagt tekst legg til på slutten av linjen + +MERK: Når du trykker går du til normalmodus eller du avbryter en uønsket + og delvis fullført kommando. + + Nå kan du gå videre til leksjon 2. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.1: SLETTEKOMMANDOER + + + ** Trykk dw for å slette et ord. ** + + 1. Trykk for å være sikker på at du er i normalmodus. + + 2. Flytt markøren til den første linjen nedenfor merket --->. + + 3. Flytt markøren til begynnelsen av ordet som skal slettes. + + 4. Trykk dw og ordet vil forsvinne. + +MERK: Bokstaven d vil komme til syne på den nederste linjen på skjermen når + du skriver den. Vim venter på at du skal skrive w . Hvis du ser et annet + tegn enn d har du skrevet noe feil; trykk og start på nytt. + +---> Det er agurk tre ord eple som ikke hører pære hjemme i denne setningen. +---> Det er tre ord som ikke hører hjemme i denne setningen. + + 5. Repeter punkt 3 og 4 til den første setningen er lik den andre. Gå + deretter til leksjon 2.2. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.2: FLERE SLETTEKOMMANDOER + + + ** Trykk d$ for å slette til slutten av linjen. ** + + 1. Trykk for å være sikker på at du er i normalmodus. + + 2. Flytt markøren til linjen nedenfor merket --->. + + 3. Flytt markøren til punktet der linjen skal kuttes (ETTER første punktum). + + 4. Trykk d$ for å slette alt til slutten av linjen. + +---> Noen skrev slutten på linjen en gang for mye. linjen en gang for mye. + + 5. Gå til leksjon 2.3 for å forstå hva som skjer. + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.3: OM OPERATORER OG BEVEGELSER + + + Mange kommandoer som forandrer teksten er laget ut i fra en operator og en + bevegelse. Formatet for en slettekommando med sletteoperatoren d er: + + d bevegelse + + Der: + d - er sletteoperatoren. + bevegelse - er hva operatoren vil opere på (listet nedenfor). + + En kort liste med bevegelser: + w - til starten av det neste ordet, UNNTATT det første tegnet. + e - til slutten av det nåværende ordet, INKLUDERT det siste tegnet. + $ - til slutten av linjen, INKLUDERT det siste tegnet. + + Ved å skrive de vil altså alt fra markøren til slutten av ordet bli + slettet. + +MERK: Ved å skrive kun bevegelsen i normalmodusen uten en operator vil + markøren flyttes som spesifisert. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + LEKSJON 2.4: BRUK AV TELLER FOR EN BEVEGELSE + + + ** Ved å skrive et tall foran en bevegelse repeterer den så mange ganger. ** + + 1. Flytt markøren til starten av linjen markert ---> nedenfor. + + 2. Skriv 2w for å flytte markøren to ord framover. + + 3. Skriv 3e for å flytte markøren framover til slutten av det tredje + ordet. + + 4. Skriv 0 (null) for å flytte til starten av linjen. + + 5. Repeter steg 2 og 3 med forskjellige tall. + +---> Dette er en linje med noen ord som du kan bevege deg rundt på. + + 6. Gå videre til leksjon 2.5. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.5: BRUK AV ANTALL FOR Å SLETTE MER + + + ** Et tall sammen med en operator repeterer den så mange ganger. ** + + I kombinasjonen med sletteoperatoren og en bevegelse nevnt ovenfor setter du + inn antall før bevegelsen for å slette mer: + d nummer bevegelse + + 1. Flytt markøren til det første ordet med STORE BOKSTAVER på linjen markert + med --->. + + 2. Skriv 2dw for å slette de to ordene med store bokstaver. + + 3. Repeter steg 1 og 2 med forskjelling antall for å slette de etterfølgende + ordene som har store bokstaver. + +---> Denne ABC DE linjen FGHI JK LMN OP er nå Q RS TUV litt mer lesbar. + +MERK: Et antall mellom operatoren d og bevegelsen virker på samme måte som å + bruke bevegelsen uten en operator. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.6: OPERERE PÅ LINJER + + + ** Trykk dd for å slette en hel linje. ** + + På grunn av at sletting av linjer er mye brukt, fant utviklerne av Vi ut at + det vil være lettere å rett og slett trykke to d-er for å slette en linje. + + 1. Flytt markøren til den andre linjen i verset nedenfor. + 2. Trykk dd å slette linjen. + 3. Flytt deretter til den fjerde linjen. + 4. Trykk 2dd for å slette to linjer. + +---> 1) Roser er røde, +---> 2) Gjørme er gøy, +---> 3) Fioler er blå, +---> 4) Jeg har en bil, +---> 5) Klokker viser tiden, +---> 6) Druer er søte +---> 7) Og du er likeså. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.7: ANGRE-KOMMANDOEN + + + ** Trykk u for å angre siste kommando, U for å fikse en hel linje. ** + + 1. Flytt markøren til linjen nedenfor merket ---> og plasser den på den + første feilen. + 2. Trykk x for å slette det første uønskede tegnet. + 3. Trykk så u for å angre den siste utførte kommandoen. + 4. Deretter ordner du alle feilene på linjene ved å bruke kommandoen x . + 5. Trykk nå en stor U for å sette linjen tilbake til det den var + originalt. + 6. Trykk u noen ganger for å angre U og foregående kommandoer. + 7. Deretter trykker du CTRL-R (hold CTRL nede mens du trykker R) noen + ganger for å gjenopprette kommandoene (omgjøre angrekommandoene). + +---> RReparer feiilene påå denne linnnjen oog erssstatt dem meed angre. + + 8. Dette er meget nyttige kommandoer. Nå kan du gå til oppsummeringen av + leksjon 2. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 2 + + + 1. For å slette fra markøren fram til det neste ordet, trykk: dw + 2. For å slette fra markøren til slutten av en linje, trykk: d$ + 3. For å slette en hel linje, trykk: dd + + 4. For å repetere en bevegelse, sett et nummer foran: 2w + 5. Formatet for en forandringskommando er: + operator [nummer] bevegelse + der: + operator - hva som skal gjøres, f.eks. d for å slette + [nummer] - et valgfritt antall for å repetere bevegelsen + bevegelse - hva kommandoen skal operere på, eksempelvis w (ord), + $ (til slutten av linjen) og så videre. + + 6. For å gå til starten av en linje, bruk en null: 0 + + 7. For å angre tidligere endringer, skriv: u (liten u) + For å angre alle forandringer på en linje, skriv: U (stor U) + For å omgjøre angringen, trykk: CTRL-R + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.1: ŦLIM INNŧ-KOMMANDOEN + + + ** Trykk p for å lime inn tidligere slettet tekst etter markøren ** + + 1. Flytt markøren til den første linjen med ---> nedenfor. + + 2. Trykk dd for å slette linjen og lagre den i et Vim-register. + + 3. Flytt markøren til c)-linjen, OVER posisjonen linjen skal settes inn. + + 4. Trykk p for å legge linjen under markøren. + + 5. Repeter punkt 2 til 4 helt til linjene er i riktig rekkefølge. + +---> d) Kan du også lære? +---> b) Fioler er blå, +---> c) Intelligens må læres, +---> a) Roser er røde, + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.2: ŦERSTATTŧ-KOMMANDOEN + + + ** Trykk rx for å erstatte tegnet under markøren med x. ** + + 1. Flytt markøren til den første linjen nedenfor merket --->. + + 2. Flytt markøren så den står oppå den første feilen. + + 3. Trykk r og deretter tegnet som skal være der. + + 4. Repeter punkt 2 og 3 til den første linjen er lik den andre. + +---> Da dfnne lynjxn ble zkrevet, var det nøen som tjykket feite taster! +---> Da denne linjen ble skrevet, var det noen som trykket feile taster! + + 5. Gå videre til leksjon 3.2. + +MERK: Husk at du bør lære ved å BRUKE, ikke pugge. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.3: ŦFORANDREŧ-OPERATOREN + + + ** For å forandre til slutten av et ord, trykk ce . ** + + 1. Flytt markøren til den første linjen nedenfor som er merket --->. + + 2. Plasser markøren på u i Ŧlubjwrŧ. + + 3. Trykk ce og det korrekte ordet (i dette tilfellet, skriv Ŧinjenŧ). + + 4. Trykk og gå til det neste tegnet som skal forandres. + + 5. Repeter punkt 3 og 4 helt til den første setningen er lik den andre. + +---> Denne lubjwr har noen wgh som må forkwåp med Ŧforækzryasŧ-kommandoen. +---> Denne linjen har noen ord som må forandres med Ŧforandreŧ-kommandoen. + +Vær oppmerksom på at ce sletter ordet og går inn i innsettingsmodus. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.4: FLERE FORANDRINGER VED BRUK AV c + + + ** Forandringskommandoen blir brukt med de samme bevegelser som Ŧslettŧ. ** + + 1. Forandringsoperatoren fungerer på samme måte som Ŧslettŧ. Formatet er: + + c [nummer] bevegelse + + 2. Bevegelsene er de samme, som for eksempel w (ord) og $ (slutten av en + linje). + + 3. Gå til den første linjen nedenfor som er merket --->. + + 4. Flytt markøren til den første feilen. + + 5. Skriv c$ og skriv resten av linjen lik den andre og trykk . + +---> Slutten på denne linjen trenger litt hjelp for å gjøre den lik den neste. +---> Slutten på denne linjen trenger å bli rettet ved bruk av c$-kommandoen. + +MERK: Du kan bruke slettetasten for å rette feil mens du skriver. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 3 + + + 1. For å legge tilbake tekst som nettopp er blitt slettet, trykk p . Dette + limer inn den slettede teksten ETTER markøren (hvis en linje ble slettet + vil den bli limt inn på linjen under markøren). + + 2. For å erstatte et tegn under markøren, trykk r og deretter tegnet som + du vil ha der. + + 3. Forandringsoperatoren lar deg forandre fra markøren til dit bevegelsen + tar deg. Det vil si, skriv ce for å forandre fra markøren til slutten + av ordet, c$ for å forandre til slutten av linjen. + + 4. Formatet for Ŧforandreŧ er: + + c [nummer] bevegelse + +Nå kan du gå til neste leksjon. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.1: POSISJONERING AV MARKØREN OG FILSTATUS + + ** Trykk CTRL-G for å vise posisjonen i filen og filstatusen. + Trykk G for å gå til en spesifikk linje i filen. ** + + Merk: Les hele leksjonen før du utfører noen av punktene! + + 1. Hold nede Ctrl-tasten og trykk g . Vi kaller dette CTRL-G. En melding + vil komme til syne på bunnen av skjermen med filnavnet og posisjonen i + filen. Husk linjenummeret for bruk i steg 3. + +Merk: Du kan se markørposisjonen i nederste høyre hjørne av skjermen. Dette + skjer når Ŧrulerŧ-valget er satt (forklart i leksjon 6). + + 2. Trykk G for å gå til bunnen av filen. + Skriv gg for å gå til begynnelsen av filen. + + 3. Skriv inn linjenummeret du var på og deretter G . Dette vil føre deg + tilbake til linjen du var på da du først trykket CTRL-G. + + 4. Utfør steg 1 til 3 hvis du føler deg sikker på prosedyren. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.2: SØKEKOMMANDOEN + + ** Skriv / etterfulgt av en søkestreng som du vil lete etter. ** + + 1. Trykk / når du er i normalmodusen. Legg merke til at skråstreken og + markøren kommer til syne på bunnen av skjermen i likhet med + Ŧ:ŧ-kommandoene. + + 2. Skriv Ŧfeeeiilŧ og trykk . Dette er teksten du vil lete etter. + + 3. For å finne neste forekomst av søkestrengen, trykk n . + For å lete etter samme søketeksten i motsatt retning, trykk N . + + 4. For å lete etter en tekst bakover i filen, bruk ? istedenfor / . + + 5. For å gå tilbake til der du kom fra, trykk CTRL-O (Hold Ctrl nede mens + du trykker bokstaven o ). Repeter for å gå enda lengre tilbake. CTRL-I + går framover. + +---> Ŧfeeeiilŧ er ikke måten å skrive Ŧfeilŧ på, feeeiil er helt feil. +Merk: Når søkingen når slutten av filen, vil den fortsette fra starten unntatt + hvis Ŧwrapscanŧ-valget er resatt. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.3: FINN SAMSVARENDE PARENTESER + + + ** Trykk % for å finne en samsvarende ), ] eller } . ** + + 1. Plasser markøren på en (, [ eller { på linjen nedenfor merket --->. + + 2. Trykk % . + + 3. Markøren vil gå til den samsvarende parentesen eller hakeparentesen. + + 4. Trykk % for å flytte markøren til den andre samsvarende parentesen. + + 5. Flytt markøren til en annen (, ), [, ], { eller } og se hva % gjør. + +---> Dette ( er en testlinje med (, [ ] og { } i den )). + +Merk: Dette er veldig nyttig til feilsøking i programmer som har ubalansert + antall parenteser! + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.4: ERSTATT-KOMMANDOEN + + + ** Skriv :s/gammel/ny/g for å erstatte Ŧgammelŧ med Ŧnyŧ. ** + + 1. Flytt markøren til linjen nedenfor som er merket med --->. + + 2. Skriv :s/deen/den/ . Legg merke til at denne kommandoen bare + forandrer den første forekomsten av Ŧdeenŧ på linjen. + + 3. Skriv :s/deen/den/g . Når g-flagget legges til, betyr dette global + erstatning på linjen og erstatter alle forekomster av Ŧdeenŧ på linjen. + +---> deen som kan kaste deen tyngste steinen lengst er deen beste + + 4. For å erstatte alle forekomster av en tekststreng mellom to linjer, + skriv :#,#s/gammel/ny/g der #,# er linjenumrene på de to linjene for + linjeområdet erstatningen skal gjøres. + Skriv :%s/gammel/ny/g for å erstatte tekst i hele filen. + Skriv :%s/gammel/ny/gc for å finne alle forekomster i hele filen, og + deretter spørre om teksten skal erstattes eller + ikke. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 4 + + + 1. Ctrl-G viser nåværende posisjon i filen og filstatusen. + G går til slutten av filen. + nummer G går til det linjenummeret. + gg går til den første linjen. + + 2. Skriv / etterfulgt av en søketekst for å lete FRAMOVER etter teksten. + Skriv ? etterfulgt av en søketekst for å lete BAKOVER etter teksten. + Etter et søk kan du trykke n for å finne neste forekomst i den samme + retningen eller N for å lete i motsatt retning. + CTRL-O tar deg tilbake til gamle posisjoner, CTRL-I til nyere posisjoner. + + 3. Skriv % når markøren står på en (, ), [, ], { eller } for å finne den + som samsvarer. + + 4. Erstatte Ŧgammelŧ med første Ŧnyŧ på en linje: :s/gammel/ny + Erstatte alle Ŧgammelŧ med Ŧnyŧ på en linje: :s/gammel/ny/g + Erstatte tekst mellom to linjenumre: :#,#s/gammel/ny/g + Erstatte alle forekomster i en fil: :%s/gammel/ny/g + For å godkjenne hver erstatning, legg til Ŧcŧ: :%s/gammel/ny/gc +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.1: HVORDAN UTFØRE EN EKSTERN KOMMANDO + + + ** Skriv :! etterfulgt av en ekstern kommando for å utføre denne. ** + + 1. Skriv den velkjente kommandoen : for å plassere markøren på bunnen av + skjermen. Dette lar deg skrive en kommandolinjekommando. + + 2. Nå kan du skrive tegnet ! . Dette lar deg utføre en hvilken som helst + ekstern kommando. + + 3. Som et eksempel, skriv ls etter utropstegnet og trykk . Du vil + nå få en liste over filene i katalogen, akkurat som om du hadde kjørt + kommandoen direkte fra kommandolinjen i skallet. Eller bruk :!dir hvis + Ŧlsŧ ikke virker. + +MERK: Det er mulig å kjøre alle eksterne kommandoer på denne måten, også med + parametere. + +MERK: Alle Ŧ:ŧ-kommandoer må avsluttes med . Fra dette punktet er det + ikke alltid vi nevner det. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.2: MER OM LAGRING AV FILER + + + ** For å lagre endringene gjort i en tekst, skriv :w FILNAVN. ** + + 1. Skriv :!dir eller :!ls for å få en liste over filene i katalogen. Du + vet allerede at du må trykke etter dette. + + 2. Velg et filnavn på en fil som ikke finnes, som for eksempel TEST . + + 3. Skriv :w TEST (der TEST er filnavnet du velger). + + 4. Dette lagrer hele filen (denne innføringen) under navnet TEST . For å + sjekke dette, skriv :!dir eller :!ls igjen for å se innholdet av + katalogen. + +Merk: Hvis du nå hadde avsluttet Vim og startet på nytt igjen med Ŧvim TESTŧ, + ville filen vært en eksakt kopi av innføringen da du lagret den. + + 5. Fjern filen ved å skrive :!rm TEST hvis du er på et Unix-lignende + operativsystem, eller :!del TEST hvis du bruker MS-DOS. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.3: VELGE TEKST SOM SKAL LAGRES + + + ** For å lagre en del av en fil, skriv v bevegelse :w FILNAVN ** + + 1. Flytt markøren til denne linjen. + + 2. Trykk v og flytt markøren til det femte elementet nedenfor. Legg merke + til at teksten blir markert. + + 3. Trykk : (kolon). På bunnen av skjermen vil :'<,'> komme til syne. + + 4. Trykk w TEST , der TEST er et filnavn som ikke finnes enda. Kontroller + at du ser :'<,'>w TEST før du trykker Enter. + + 5. Vim vil skrive de valgte linjene til filen TEST. Bruk :!dir eller :!ls + for å se den. Ikke slett den enda! Vi vil bruke den i neste leksjon. + +MERK: Ved å trykke v startes visuelt valg. Du kan flytte markøren rundt for + å gjøre det valgte området større eller mindre. Deretter kan du bruke en + operator for å gjøre noe med teksten. For eksempel sletter d teksten. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.4: HENTING OG SAMMENSLÅING AV FILER + + + ** For å lese inn en annen fil inn i nåværende buffer, skriv :r FILNAVN ** + + 1. Plasser markøren like over denne linjen. + +MERK: Etter å ha utført steg 2 vil du se teksten fra leksjon 5.3. Gå deretter + NED for å se denne leksjonen igjen. + + 2. Hent TEST-filen ved å bruke kommandoen :r TEST der TEST er navnet på + filen du brukte. Filen du henter blir plassert nedenfor markørlinjen. + + 3. For å sjekke at filen ble hentet, gå tilbake og se at det er to kopier av + leksjon 5.3, originalen og denne versjonen. + +MERK: Du kan også lese utdataene av en ekstern kommando. For eksempel, :r !ls + leser utdataene av ls-kommandoen og legger dem nedenfor markøren. + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 5 + + + 1. :!kommando utfører en ekstern kommandio. + + Noen nyttige eksempler er: + (MS-DOS) (Unix) + :!dir :!ls - List filene i katalogen. + :!del FILNAVN :!rm FILNAVN - Slett filen FILNAVN. + + 2. :w FILNAVN skriver den nåværende Vim-filen disken med navnet FILNAVN . + + 3. v bevegelse :w FILNAVN lagrer de visuelt valgte linjene til filen + FILNAVN. + + 4. :r FILNAVN henter filen FILNAVN og legger den inn nedenfor markøren. + + 5. :r !dir leser utdataene fra Ŧdirŧ-kommandoen og legger dem nedenfor + markørposisjonen. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.1: ŦÅPNE LINJEŧ-KOMMANDOEN + + + ** Skriv o for å Ŧåpne oppŧ for en ny linje etter markøren og gå til + innsettingsmodus ** + + 1. Flytt markøren til linjen nedenfor merket --->. + + 2. Skriv o (liten o) for å åpne opp en linje NEDENFOR markøren og gå inn i + innsettingsmodus. + + 3. Skriv litt tekst og trykk for å gå ut av innsettingsmodusen. + +---> Etter at o er skrevet blir markøren plassert på den tomme linjen. + + 4. For å åpne en ny linje OVER markøren, trykk rett og slett en stor O + istedenfor en liten o . Prøv dette på linjen nedenfor. + +---> Lag ny linje over denne ved å trykke O mens markøren er på denne linjen. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.2: ŦLEGG TILŧ-KOMMANDOEN + + + ** Skriv a for å legge til tekst ETTER markøren. ** + + 1. Flytt markøren til starten av linjen merket ---> nedenfor. + + 2. Trykk e til markøren er på slutten av Ŧliŧ. + + 3. Trykk a (liten a) for å legge til tekst ETTER markøren. + + 4. Fullfør ordet sånn som på linjen nedenfor. Trykk for å gå ut av + innsettingsmodusen. + + 5. Bruk e for å gå til det neste ufullstendige ordet og repeter steg 3 og + 4. + +---> Denne li lar deg øve på å leg til tek på en linje. +---> Denne linjen lar deg øve på å legge til tekst på en linje. + +Merk: a, i og A går alle til den samme innsettingsmodusen, den eneste + forskjellen er hvor tegnene blir satt inn. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.3: EN ANNEN MÅTE Å ERSTATTE PÅ + + + ** Skriv en stor R for å erstatte mer enn ett tegn. ** + + 1. Flytt markøren til den første linjen nedenfor merket --->. Flytt markøren + til begynnelsen av den første Ŧxxxŧ-en. + + 2. Trykk R og skriv inn tallet som står nedenfor på den andre linjen så + det erstatter xxx. + + 3. Trykk for å gå ut av erstatningsmodusen. Legg merke til at resten + av linjen forblir uforandret. + + 4. Repeter stegene for å erstatte den gjenværende xxx. + +---> Ved å legge 123 til xxx får vi xxx. +---> Ved å legge 123 til 456 får vi 579. + +MERK: Erstatningsmodus er lik insettingsmodus, men hvert tegn som skrives + erstatter et eksisterende tegn. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.4: KOPIERE OG LIME INN TEKST + + + ** Bruk y-operatoren for å kopiere tekst og p for å lime den inn ** + + 1. Gå til linjen merket ---> nedenfor og plasser markøren etter Ŧa)ŧ. + + 2. Gå inn i visuell modus med v og flytt markøren til like før Ŧførsteŧ. + + 3. Trykk y for å kopiere (engelsk: Ŧyankŧ) den uthevede teksten. + + 4. Flytt markøren til slutten av den neste linjen: j$ + + 5. Trykk p for å lime inn teksten. Trykk deretter: a andre . + + 6. Bruk visuell modus for å velge Ŧ valget.ŧ, kopier det med y , gå til + slutten av den neste linjen med j$ og legg inn teksten der med p . + +---> a) Dette er det første valget. + b) + +Merk: Du kan også bruke y som en operator; yw kopierer ett ord. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.5: SETT VALG + + + ** Sett et valg så søk eller erstatning ignorerer store/små bokstaver. ** + + 1. Let etter Ŧignoreŧ ved å skrive: /ignore + Repeter flere ganger ved å trykke n . + + 2. Sett Ŧicŧ-valget (Ignore Case) ved å skrive: :set ic + + 3. Søk etter Ŧignoreŧ igjen ved å trykke n . + Legg merke til at både ŦIgnoreŧ og ŦIGNOREŧ blir funnet. + + 4. Sett Ŧhlsearchŧ- og Ŧincsearchŧ-valgene: :set hls is + + 5. Skriv søkekommandoen igjen og se hva som skjer: /ignore + + 6. For å slå av ignorering av store/små bokstaver, skriv: :set noic + +Merk: For å fjerne uthevingen av treff, skriv: :nohlsearch +Merk: Hvis du vil ignorere store/små bokstaver for kun en søkekommando, bruk + \c i uttrykket: /ignore\c +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 6 + + 1. Trykk o for å legge til en linje NEDENFOR markøren og gå inn i + innsettingsmodus. + Trykk O for å åpne en linje OVER markøren. + + 2. Skriv a for å sette inn tekst ETTER markøren. + Skriv A for å sette inn tekst etter slutten av linjen. + + 3. Kommandoen e går til slutten av et ord. + + 4. Operatoren y (Ŧyankŧ) kopierer tekst, p (Ŧpasteŧ) limer den inn. + + 5. Ved å trykke R går du inn i erstatningsmodus helt til trykkes. + + 6. Skriv Ŧ:set xxxŧ for å sette valget Ŧxxxŧ. Noen valg er: + Ŧicŧ Ŧignorecaseŧ ignorer store/små bokstaver under søk + Ŧisŧ Ŧincsearchŧ vis delvise treff for en søketekst + Ŧhlsŧ Ŧhlsearchŧ uthev alle søketreff + + 7. Legg til Ŧnoŧ foran valget for å slå det av: :set noic + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 7.1: FÅ HJELP + + + ** Bruk det innebygde hjelpesystemet. ** + + Vim har et omfattende innebygget hjelpesystem. For å starte det, prøv en av + disse måtene: + - Trykk Hjelp-tasten (hvis du har en) + - Trykk F1-tasten (hvis du har en) + - Skriv :help + + Les teksten i hjelpevinduet for å finne ut hvordan hjelpen virker. + Skriv CTRL-W CTRL-W for å hoppe fra et vindu til et annet + Skriv :q for å lukke hjelpevinduet. + + Du kan få hjelp for omtrent alle temaer om Vim ved å skrive et parameter til + Ŧ:helpŧ-kommandoen. Prøv disse (ikke glem å trykke ): + + :help w + :help c_CTRL-D + :help insert-index + :help user-manual +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 7.2: LAG ET OPPSTARTSSKRIPT + + + ** Slå på funksjoner i Vim ** + + Vim har mange flere funksjoner enn Vi, men flesteparten av dem er slått av + som standard. For å begynne å bruke flere funksjoner må du lage en + Ŧvimrcŧ-fil. + + 1. Start redigeringen av Ŧvimrcŧ-filen. Dette avhenger av systemet ditt: + :e ~/.vimrc for Unix + :e $VIM/_vimrc for MS Windows + + 2. Les inn eksempelfilen for Ŧvimrcŧ: + :r $VIMRUNTIME/vimrc_example.vim + + 3. Lagre filen med: + :w + + Neste gang du starter Vim vil den bruke syntaks-utheving. Du kan legge til + alle dine foretrukne oppsett i denne Ŧvimrcŧ-filen. + For mer informasjon, skriv :help vimrc-intro +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 7.3: FULLFØRING + + + ** Kommandolinjefullføring med CTRL-D og ** + + 1. Vær sikker på at Vim ikke er i Vi-kompatibel modus: :set nocp + + 2. Se hvilke filer som er i katalogen: :!ls eller :!dir + + 3. Skriv starten på en kommando: :e + + 4. Trykk CTRL-D og Vim vil vise en liste over kommandoer som starter med + Ŧeŧ. + + 5. Trykk og Vim vil fullføre kommandonavnet til Ŧ:editŧ. + + 6. Legg til et mellomrom og starten på et eksisterende filnavn: :edit FIL + + 7. Trykk . Vim vil fullføre navnet (hvis det er unikt). + +MERK: Fullføring fungerer for mange kommandoer. Prøv ved å trykke CTRL-D og + . Det er spesielt nyttig for bruk sammen med :help . +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 7 + + + 1. Skriv :help eller trykk eller for å åpne et hjelpevindu. + + 2. Skriv :help kommando for å få hjelp om kommando . + + 3. Trykk CTRL-W CTRL-W for å hoppe til et annet vindu. + + 4. Trykk :q for å lukke hjelpevinduet. + + 5. Opprett et vimrc-oppstartsskript for å lagre favorittvalgene dine. + + 6. Når du skriver en Ŧ:ŧ-kommando, trykk CTRL-D for å se mulige + fullføringer. Trykk for å bruke en fullføring. + + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Her slutter innføringen i Vim. Den var ment som en rask oversikt over + editoren, akkurat nok til å la deg sette i gang med enkel bruk. Den er på + langt nær komplett, da Vim har mange flere kommandoer. Les bruksanvisningen + ved å skrive :help user-manual . + + For videre lesing og studier, kan denne boken anbefales: + ŦVim - Vi Improvedŧ av Steve Oualline + Utgiver: New Riders + Den første boken som er fullt og helt dedisert til Vim. Spesielt nyttig for + nybegynnere. Inneholder mange eksempler og illustrasjoner. + Se http://iccf-holland.org/click5.html + + Denne boken er eldre og handler mer om Vi enn Vim, men anbefales også: + ŦLearning the Vi Editorŧ av Linda Lamb + Utgiver: O'Reilly & Associates Inc. + Det er en god bok for å få vite omtrent hva som helst om Vi. + Den sjette utgaven inneholder også informasjon om Vim. + + Denne innføringen er skrevet av Michael C. Pierce og Robert K. Ware, + Colorado School of Mines med idéer av Charles Smith, Colorado State + University. E-mail: bware@mines.colorado.edu . + + Modifisert for Vim av Bram Moolenaar. + Oversatt av Øyvind A. Holm. E-mail: vimtutor _AT_ sunbase.org + Id: tutor.no 406 2007-03-18 22:48:36Z sunny + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +vim: set ts=8 : From eeedd53f323aa5bd49f087a5476079f150e59a73 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Wed, 9 Mar 2016 10:38:47 +0100 Subject: [PATCH 343/356] Support for Text extension .no (Norwegian text) --- lib/linguist/languages.yml | 1 + samples/Text/tutor.no | 973 +++++++++++++++++++++++++++++++++++++ 2 files changed, 974 insertions(+) create mode 100644 samples/Text/tutor.no diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 0171e1aa..a78b40ae 100755 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3574,6 +3574,7 @@ Text: - .fr - .nb - .ncl + - .no tm_scope: none ace_mode: text diff --git a/samples/Text/tutor.no b/samples/Text/tutor.no new file mode 100644 index 00000000..f9d49c2a --- /dev/null +++ b/samples/Text/tutor.no @@ -0,0 +1,973 @@ +=============================================================================== += V e l k o m m e n t i l i n n f ø r i n g e n i V i m -- Ver. 1.7 = +=============================================================================== + + Vim er en meget kraftig editor med mange kommandoer, alt for mange til å + kunne gå gjennom alle i en innføring som denne. Den er beregnet på å + sette deg inn i bruken av nok kommandoer så du vil være i stand til lett + å kunne bruke Vim som en editor til alle formål. + + Tiden som kreves for å gå gjennom denne innføringen tar ca. 25-30 + minutter, avhengig av hvor mye tid du bruker til eksperimentering. + + MERK: + Kommandoene i leksjonene vil modifisere teksten. Lag en kopi av denne + filen som du kan øve deg på (hvis du kjørte «vimtutor»-kommandoen, er + dette allerede en kopi). + + Det er viktig å huske at denne innføringen er beregnet på læring gjennom + bruk. Det betyr at du må utføre kommandoene for å lære dem skikkelig. + Hvis du bare leser teksten, vil du glemme kommandoene! + + Først av alt, sjekk at «Caps Lock» IKKE er aktiv og trykk «j»-tasten for + å flytte markøren helt til leksjon 1.1 fyller skjermen. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.1: FLYTTING AV MARKØREN + + + ** For å flytte markøren, trykk tastene h, j, k, l som vist. ** + ^ + k Tips: h-tasten er til venstre og flytter til venstre. + < h l > l-tasten er til høyre og flytter til høyre. + j j-tasten ser ut som en pil som peker nedover. + v + 1. Flytt markøren rundt på skjermen til du har fått det inn i fingrene. + + 2. Hold inne nedovertasten (j) til den repeterer. + Nå vet du hvordan du beveger deg til neste leksjon. + + 3. Gå til leksjon 1.2 ved hjelp av nedovertasten. + +Merk: Hvis du blir usikker på noe du har skrevet, trykk for å gå til + normalmodus. Skriv deretter kommandoen du ønsket på nytt. + +Merk: Piltastene skal også virke. Men ved å bruke hjkl vil du være i stand til + å bevege markøren mye raskere når du er blitt vant til det. Helt sant! + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.2: AVSLUTTE VIM + + + !! MERK: Før du utfører noen av punktene nedenfor, les hele leksjonen!! + + 1. Trykk -tasten (for å forsikre deg om at du er i normalmodus). + + 2. Skriv: :q! . + Dette avslutter editoren og FORKASTER alle forandringer som du har gjort. + + 3. Når du ser kommandolinjen i skallet, skriv kommandoen som startet denne + innføringen. Den er: vimtutor + + 4. Hvis du er sikker på at du husker dette, utfør punktene 1 til 3 for å + avslutte og starte editoren på nytt. + +MERK: :q! forkaster alle forandringer som du gjorde. I løpet av noen + få leksjoner vil du lære hvordan du lagrer forandringene til en fil. + + 5. Flytt markøren ned til leksjon 1.3. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.3: REDIGERING AV TEKST -- SLETTING + + + ** Trykk x for å slette tegnet under markøren. ** + + 1. Flytt markøren til den første linjen merket med --->. + + 2. For å ordne feilene på linjen, flytt markøren til den er oppå tegnet som + skal slettes. + + 3. Trykk tasten x for å slette det uønskede tegnet. + + 4. Repeter punkt 2 til 4 til setningen er lik den som er under. + +---> Hessstennnn brrråsnudddde ii gaaata. +---> Hesten bråsnudde i gata. + + 5. Nå som linjen er korrekt, gå til leksjon 1.4. + +MERK: Når du går gjennom innføringen, ikke bare prøv å huske kommandoene, men + bruk dem helt til de sitter. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.4: REDIGERING AV TEKST -- INNSETTING + + + ** Trykk i for å sette inn tekst. ** + + 1. Flytt markøren til den første linjen som er merket med --->. + + 2. For å gjøre den første linjen lik den andre, flytt markøren til den står + på tegnet ETTER posisjonen der teksten skal settes inn. + + 3. Trykk i og skriv inn teksten som mangler. + + 4. Etterhvert som hver feil er fikset, trykk for å returnere til + normalmodus. Repeter punkt 2 til 4 til setningen er korrekt. + +---> Det er tkst som mnglr . +---> Det er ganske mye tekst som mangler her. + + 5. Når du føler deg komfortabel med å sette inn tekst, gå til oppsummeringen + nedenfor. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.5: REDIGERING AV TEKST -- LEGGE TIL + + + ** Trykk A for å legge til tekst. ** + + 1. Flytt markøren til den første linjen nedenfor merket --->. + Det har ikke noe å si hvor markøren er plassert på den linjen. + + 2. Trykk A og skriv inn det som skal legges til. + + 3. Når teksten er lagt til, trykk for å returnere til normalmodusen. + + 4. Flytt markøren til den andre linjen markert med ---> og repeter steg 2 og + 3 for å reparere denne setningen. + +---> Det mangler noe tekst p + Det mangler noe tekst på denne linjen. +---> Det mangler også litt tek + Det mangler også litt tekst på denne linjen. + + 5. Når du føler at du behersker å legge til tekst, gå til leksjon 1.6. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 1.6: REDIGERE EN FIL + + + ** Bruk :wq for å lagre en fil og avslutte. ** + + !! MERK: Før du utfører noen av stegene nedenfor, les hele denne leksjonen!! + + 1. Avslutt denne innføringen som du gjorde i leksjon 1.2: :q! + + 2. Skriv denne kommandoen på kommandolinja: vim tutor + «vim» er kommandoen for å starte Vim-editoren, «tutor» er navnet på fila + som du vil redigere. Bruk en fil som kan forandres. + + 3. Sett inn og slett tekst som du lærte i de foregående leksjonene. + + 4. Lagre filen med forandringene og avslutt Vim med: :wq + + 5. Start innføringen på nytt og flytt ned til oppsummeringen som følger. + + 6. Etter å ha lest og forstått stegene ovenfor: Sett i gang. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 1 + + + 1. Markøren beveges ved hjelp av piltastene eller hjkl-tastene. + h (venstre) j (ned) k (opp) l (høyre) + + 2. For å starte Vim fra skall-kommandolinjen, skriv: vim FILNAVN + + 3. For å avslutte Vim, skriv: :q! for å forkaste endringer. + ELLER skriv: :wq for å lagre forandringene. + + 4. For å slette tegnet under markøren, trykk: x + + 5. For å sette inn eller legge til tekst, trykk: + i skriv innsatt tekst sett inn før markøren + A skriv tillagt tekst legg til på slutten av linjen + +MERK: Når du trykker går du til normalmodus eller du avbryter en uønsket + og delvis fullført kommando. + + Nå kan du gå videre til leksjon 2. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.1: SLETTEKOMMANDOER + + + ** Trykk dw for å slette et ord. ** + + 1. Trykk for å være sikker på at du er i normalmodus. + + 2. Flytt markøren til den første linjen nedenfor merket --->. + + 3. Flytt markøren til begynnelsen av ordet som skal slettes. + + 4. Trykk dw og ordet vil forsvinne. + +MERK: Bokstaven d vil komme til syne på den nederste linjen på skjermen når + du skriver den. Vim venter på at du skal skrive w . Hvis du ser et annet + tegn enn d har du skrevet noe feil; trykk og start på nytt. + +---> Det er agurk tre ord eple som ikke hører pære hjemme i denne setningen. +---> Det er tre ord som ikke hører hjemme i denne setningen. + + 5. Repeter punkt 3 og 4 til den første setningen er lik den andre. Gå + deretter til leksjon 2.2. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.2: FLERE SLETTEKOMMANDOER + + + ** Trykk d$ for å slette til slutten av linjen. ** + + 1. Trykk for å være sikker på at du er i normalmodus. + + 2. Flytt markøren til linjen nedenfor merket --->. + + 3. Flytt markøren til punktet der linjen skal kuttes (ETTER første punktum). + + 4. Trykk d$ for å slette alt til slutten av linjen. + +---> Noen skrev slutten på linjen en gang for mye. linjen en gang for mye. + + 5. Gå til leksjon 2.3 for å forstå hva som skjer. + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.3: OM OPERATORER OG BEVEGELSER + + + Mange kommandoer som forandrer teksten er laget ut i fra en operator og en + bevegelse. Formatet for en slettekommando med sletteoperatoren d er: + + d bevegelse + + Der: + d - er sletteoperatoren. + bevegelse - er hva operatoren vil opere på (listet nedenfor). + + En kort liste med bevegelser: + w - til starten av det neste ordet, UNNTATT det første tegnet. + e - til slutten av det nåværende ordet, INKLUDERT det siste tegnet. + $ - til slutten av linjen, INKLUDERT det siste tegnet. + + Ved å skrive de vil altså alt fra markøren til slutten av ordet bli + slettet. + +MERK: Ved å skrive kun bevegelsen i normalmodusen uten en operator vil + markøren flyttes som spesifisert. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + LEKSJON 2.4: BRUK AV TELLER FOR EN BEVEGELSE + + + ** Ved å skrive et tall foran en bevegelse repeterer den så mange ganger. ** + + 1. Flytt markøren til starten av linjen markert ---> nedenfor. + + 2. Skriv 2w for å flytte markøren to ord framover. + + 3. Skriv 3e for å flytte markøren framover til slutten av det tredje + ordet. + + 4. Skriv 0 (null) for å flytte til starten av linjen. + + 5. Repeter steg 2 og 3 med forskjellige tall. + +---> Dette er en linje med noen ord som du kan bevege deg rundt på. + + 6. Gå videre til leksjon 2.5. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.5: BRUK AV ANTALL FOR Å SLETTE MER + + + ** Et tall sammen med en operator repeterer den så mange ganger. ** + + I kombinasjonen med sletteoperatoren og en bevegelse nevnt ovenfor setter du + inn antall før bevegelsen for å slette mer: + d nummer bevegelse + + 1. Flytt markøren til det første ordet med STORE BOKSTAVER på linjen markert + med --->. + + 2. Skriv 2dw for å slette de to ordene med store bokstaver. + + 3. Repeter steg 1 og 2 med forskjelling antall for å slette de etterfølgende + ordene som har store bokstaver. + +---> Denne ABC DE linjen FGHI JK LMN OP er nå Q RS TUV litt mer lesbar. + +MERK: Et antall mellom operatoren d og bevegelsen virker på samme måte som å + bruke bevegelsen uten en operator. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.6: OPERERE PÅ LINJER + + + ** Trykk dd for å slette en hel linje. ** + + På grunn av at sletting av linjer er mye brukt, fant utviklerne av Vi ut at + det vil være lettere å rett og slett trykke to d-er for å slette en linje. + + 1. Flytt markøren til den andre linjen i verset nedenfor. + 2. Trykk dd å slette linjen. + 3. Flytt deretter til den fjerde linjen. + 4. Trykk 2dd for å slette to linjer. + +---> 1) Roser er røde, +---> 2) Gjørme er gøy, +---> 3) Fioler er blå, +---> 4) Jeg har en bil, +---> 5) Klokker viser tiden, +---> 6) Druer er søte +---> 7) Og du er likeså. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 2.7: ANGRE-KOMMANDOEN + + + ** Trykk u for å angre siste kommando, U for å fikse en hel linje. ** + + 1. Flytt markøren til linjen nedenfor merket ---> og plasser den på den + første feilen. + 2. Trykk x for å slette det første uønskede tegnet. + 3. Trykk så u for å angre den siste utførte kommandoen. + 4. Deretter ordner du alle feilene på linjene ved å bruke kommandoen x . + 5. Trykk nå en stor U for å sette linjen tilbake til det den var + originalt. + 6. Trykk u noen ganger for å angre U og foregående kommandoer. + 7. Deretter trykker du CTRL-R (hold CTRL nede mens du trykker R) noen + ganger for å gjenopprette kommandoene (omgjøre angrekommandoene). + +---> RReparer feiilene påå denne linnnjen oog erssstatt dem meed angre. + + 8. Dette er meget nyttige kommandoer. Nå kan du gå til oppsummeringen av + leksjon 2. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 2 + + + 1. For å slette fra markøren fram til det neste ordet, trykk: dw + 2. For å slette fra markøren til slutten av en linje, trykk: d$ + 3. For å slette en hel linje, trykk: dd + + 4. For å repetere en bevegelse, sett et nummer foran: 2w + 5. Formatet for en forandringskommando er: + operator [nummer] bevegelse + der: + operator - hva som skal gjøres, f.eks. d for å slette + [nummer] - et valgfritt antall for å repetere bevegelsen + bevegelse - hva kommandoen skal operere på, eksempelvis w (ord), + $ (til slutten av linjen) og så videre. + + 6. For å gå til starten av en linje, bruk en null: 0 + + 7. For å angre tidligere endringer, skriv: u (liten u) + For å angre alle forandringer på en linje, skriv: U (stor U) + For å omgjøre angringen, trykk: CTRL-R + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.1: «LIM INN»-KOMMANDOEN + + + ** Trykk p for å lime inn tidligere slettet tekst etter markøren ** + + 1. Flytt markøren til den første linjen med ---> nedenfor. + + 2. Trykk dd for å slette linjen og lagre den i et Vim-register. + + 3. Flytt markøren til c)-linjen, OVER posisjonen linjen skal settes inn. + + 4. Trykk p for å legge linjen under markøren. + + 5. Repeter punkt 2 til 4 helt til linjene er i riktig rekkefølge. + +---> d) Kan du også lære? +---> b) Fioler er blå, +---> c) Intelligens må læres, +---> a) Roser er røde, + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.2: «ERSTATT»-KOMMANDOEN + + + ** Trykk rx for å erstatte tegnet under markøren med x. ** + + 1. Flytt markøren til den første linjen nedenfor merket --->. + + 2. Flytt markøren så den står oppå den første feilen. + + 3. Trykk r og deretter tegnet som skal være der. + + 4. Repeter punkt 2 og 3 til den første linjen er lik den andre. + +---> Da dfnne lynjxn ble zkrevet, var det nøen som tjykket feite taster! +---> Da denne linjen ble skrevet, var det noen som trykket feile taster! + + 5. Gå videre til leksjon 3.2. + +MERK: Husk at du bør lære ved å BRUKE, ikke pugge. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.3: «FORANDRE»-OPERATOREN + + + ** For å forandre til slutten av et ord, trykk ce . ** + + 1. Flytt markøren til den første linjen nedenfor som er merket --->. + + 2. Plasser markøren på u i «lubjwr». + + 3. Trykk ce og det korrekte ordet (i dette tilfellet, skriv «injen»). + + 4. Trykk og gå til det neste tegnet som skal forandres. + + 5. Repeter punkt 3 og 4 helt til den første setningen er lik den andre. + +---> Denne lubjwr har noen wgh som må forkwåp med «forækzryas»-kommandoen. +---> Denne linjen har noen ord som må forandres med «forandre»-kommandoen. + +Vær oppmerksom på at ce sletter ordet og går inn i innsettingsmodus. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 3.4: FLERE FORANDRINGER VED BRUK AV c + + + ** Forandringskommandoen blir brukt med de samme bevegelser som «slett». ** + + 1. Forandringsoperatoren fungerer på samme måte som «slett». Formatet er: + + c [nummer] bevegelse + + 2. Bevegelsene er de samme, som for eksempel w (ord) og $ (slutten av en + linje). + + 3. Gå til den første linjen nedenfor som er merket --->. + + 4. Flytt markøren til den første feilen. + + 5. Skriv c$ og skriv resten av linjen lik den andre og trykk . + +---> Slutten på denne linjen trenger litt hjelp for å gjøre den lik den neste. +---> Slutten på denne linjen trenger å bli rettet ved bruk av c$-kommandoen. + +MERK: Du kan bruke slettetasten for å rette feil mens du skriver. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 3 + + + 1. For å legge tilbake tekst som nettopp er blitt slettet, trykk p . Dette + limer inn den slettede teksten ETTER markøren (hvis en linje ble slettet + vil den bli limt inn på linjen under markøren). + + 2. For å erstatte et tegn under markøren, trykk r og deretter tegnet som + du vil ha der. + + 3. Forandringsoperatoren lar deg forandre fra markøren til dit bevegelsen + tar deg. Det vil si, skriv ce for å forandre fra markøren til slutten + av ordet, c$ for å forandre til slutten av linjen. + + 4. Formatet for «forandre» er: + + c [nummer] bevegelse + +Nå kan du gå til neste leksjon. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.1: POSISJONERING AV MARKØREN OG FILSTATUS + + ** Trykk CTRL-G for å vise posisjonen i filen og filstatusen. + Trykk G for å gå til en spesifikk linje i filen. ** + + Merk: Les hele leksjonen før du utfører noen av punktene! + + 1. Hold nede Ctrl-tasten og trykk g . Vi kaller dette CTRL-G. En melding + vil komme til syne på bunnen av skjermen med filnavnet og posisjonen i + filen. Husk linjenummeret for bruk i steg 3. + +Merk: Du kan se markørposisjonen i nederste høyre hjørne av skjermen. Dette + skjer når «ruler»-valget er satt (forklart i leksjon 6). + + 2. Trykk G for å gå til bunnen av filen. + Skriv gg for å gå til begynnelsen av filen. + + 3. Skriv inn linjenummeret du var på og deretter G . Dette vil føre deg + tilbake til linjen du var på da du først trykket CTRL-G. + + 4. Utfør steg 1 til 3 hvis du føler deg sikker på prosedyren. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.2: SØKEKOMMANDOEN + + ** Skriv / etterfulgt av en søkestreng som du vil lete etter. ** + + 1. Trykk / når du er i normalmodusen. Legg merke til at skråstreken og + markøren kommer til syne på bunnen av skjermen i likhet med + «:»-kommandoene. + + 2. Skriv «feeeiil» og trykk . Dette er teksten du vil lete etter. + + 3. For å finne neste forekomst av søkestrengen, trykk n . + For å lete etter samme søketeksten i motsatt retning, trykk N . + + 4. For å lete etter en tekst bakover i filen, bruk ? istedenfor / . + + 5. For å gå tilbake til der du kom fra, trykk CTRL-O (Hold Ctrl nede mens + du trykker bokstaven o ). Repeter for å gå enda lengre tilbake. CTRL-I + går framover. + +---> «feeeiil» er ikke måten å skrive «feil» på, feeeiil er helt feil. +Merk: Når søkingen når slutten av filen, vil den fortsette fra starten unntatt + hvis «wrapscan»-valget er resatt. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.3: FINN SAMSVARENDE PARENTESER + + + ** Trykk % for å finne en samsvarende ), ] eller } . ** + + 1. Plasser markøren på en (, [ eller { på linjen nedenfor merket --->. + + 2. Trykk % . + + 3. Markøren vil gå til den samsvarende parentesen eller hakeparentesen. + + 4. Trykk % for å flytte markøren til den andre samsvarende parentesen. + + 5. Flytt markøren til en annen (, ), [, ], { eller } og se hva % gjør. + +---> Dette ( er en testlinje med (, [ ] og { } i den )). + +Merk: Dette er veldig nyttig til feilsøking i programmer som har ubalansert + antall parenteser! + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 4.4: ERSTATT-KOMMANDOEN + + + ** Skriv :s/gammel/ny/g for å erstatte «gammel» med «ny». ** + + 1. Flytt markøren til linjen nedenfor som er merket med --->. + + 2. Skriv :s/deen/den/ . Legg merke til at denne kommandoen bare + forandrer den første forekomsten av «deen» på linjen. + + 3. Skriv :s/deen/den/g . Når g-flagget legges til, betyr dette global + erstatning på linjen og erstatter alle forekomster av «deen» på linjen. + +---> deen som kan kaste deen tyngste steinen lengst er deen beste + + 4. For å erstatte alle forekomster av en tekststreng mellom to linjer, + skriv :#,#s/gammel/ny/g der #,# er linjenumrene på de to linjene for + linjeområdet erstatningen skal gjøres. + Skriv :%s/gammel/ny/g for å erstatte tekst i hele filen. + Skriv :%s/gammel/ny/gc for å finne alle forekomster i hele filen, og + deretter spørre om teksten skal erstattes eller + ikke. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 4 + + + 1. Ctrl-G viser nåværende posisjon i filen og filstatusen. + G går til slutten av filen. + nummer G går til det linjenummeret. + gg går til den første linjen. + + 2. Skriv / etterfulgt av en søketekst for å lete FRAMOVER etter teksten. + Skriv ? etterfulgt av en søketekst for å lete BAKOVER etter teksten. + Etter et søk kan du trykke n for å finne neste forekomst i den samme + retningen eller N for å lete i motsatt retning. + CTRL-O tar deg tilbake til gamle posisjoner, CTRL-I til nyere posisjoner. + + 3. Skriv % når markøren står på en (, ), [, ], { eller } for å finne den + som samsvarer. + + 4. Erstatte «gammel» med første «ny» på en linje: :s/gammel/ny + Erstatte alle «gammel» med «ny» på en linje: :s/gammel/ny/g + Erstatte tekst mellom to linjenumre: :#,#s/gammel/ny/g + Erstatte alle forekomster i en fil: :%s/gammel/ny/g + For å godkjenne hver erstatning, legg til «c»: :%s/gammel/ny/gc +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.1: HVORDAN UTFØRE EN EKSTERN KOMMANDO + + + ** Skriv :! etterfulgt av en ekstern kommando for å utføre denne. ** + + 1. Skriv den velkjente kommandoen : for å plassere markøren på bunnen av + skjermen. Dette lar deg skrive en kommandolinjekommando. + + 2. Nå kan du skrive tegnet ! . Dette lar deg utføre en hvilken som helst + ekstern kommando. + + 3. Som et eksempel, skriv ls etter utropstegnet og trykk . Du vil + nå få en liste over filene i katalogen, akkurat som om du hadde kjørt + kommandoen direkte fra kommandolinjen i skallet. Eller bruk :!dir hvis + «ls» ikke virker. + +MERK: Det er mulig å kjøre alle eksterne kommandoer på denne måten, også med + parametere. + +MERK: Alle «:»-kommandoer må avsluttes med . Fra dette punktet er det + ikke alltid vi nevner det. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.2: MER OM LAGRING AV FILER + + + ** For å lagre endringene gjort i en tekst, skriv :w FILNAVN. ** + + 1. Skriv :!dir eller :!ls for å få en liste over filene i katalogen. Du + vet allerede at du må trykke etter dette. + + 2. Velg et filnavn på en fil som ikke finnes, som for eksempel TEST . + + 3. Skriv :w TEST (der TEST er filnavnet du velger). + + 4. Dette lagrer hele filen (denne innføringen) under navnet TEST . For å + sjekke dette, skriv :!dir eller :!ls igjen for å se innholdet av + katalogen. + +Merk: Hvis du nå hadde avsluttet Vim og startet på nytt igjen med «vim TEST», + ville filen vært en eksakt kopi av innføringen da du lagret den. + + 5. Fjern filen ved å skrive :!rm TEST hvis du er på et Unix-lignende + operativsystem, eller :!del TEST hvis du bruker MS-DOS. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.3: VELGE TEKST SOM SKAL LAGRES + + + ** For å lagre en del av en fil, skriv v bevegelse :w FILNAVN ** + + 1. Flytt markøren til denne linjen. + + 2. Trykk v og flytt markøren til det femte elementet nedenfor. Legg merke + til at teksten blir markert. + + 3. Trykk : (kolon). På bunnen av skjermen vil :'<,'> komme til syne. + + 4. Trykk w TEST , der TEST er et filnavn som ikke finnes enda. Kontroller + at du ser :'<,'>w TEST før du trykker Enter. + + 5. Vim vil skrive de valgte linjene til filen TEST. Bruk :!dir eller :!ls + for å se den. Ikke slett den enda! Vi vil bruke den i neste leksjon. + +MERK: Ved å trykke v startes visuelt valg. Du kan flytte markøren rundt for + å gjøre det valgte området større eller mindre. Deretter kan du bruke en + operator for å gjøre noe med teksten. For eksempel sletter d teksten. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 5.4: HENTING OG SAMMENSLÅING AV FILER + + + ** For å lese inn en annen fil inn i nåværende buffer, skriv :r FILNAVN ** + + 1. Plasser markøren like over denne linjen. + +MERK: Etter å ha utført steg 2 vil du se teksten fra leksjon 5.3. Gå deretter + NED for å se denne leksjonen igjen. + + 2. Hent TEST-filen ved å bruke kommandoen :r TEST der TEST er navnet på + filen du brukte. Filen du henter blir plassert nedenfor markørlinjen. + + 3. For å sjekke at filen ble hentet, gå tilbake og se at det er to kopier av + leksjon 5.3, originalen og denne versjonen. + +MERK: Du kan også lese utdataene av en ekstern kommando. For eksempel, :r !ls + leser utdataene av ls-kommandoen og legger dem nedenfor markøren. + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 5 + + + 1. :!kommando utfører en ekstern kommandio. + + Noen nyttige eksempler er: + (MS-DOS) (Unix) + :!dir :!ls - List filene i katalogen. + :!del FILNAVN :!rm FILNAVN - Slett filen FILNAVN. + + 2. :w FILNAVN skriver den nåværende Vim-filen disken med navnet FILNAVN . + + 3. v bevegelse :w FILNAVN lagrer de visuelt valgte linjene til filen + FILNAVN. + + 4. :r FILNAVN henter filen FILNAVN og legger den inn nedenfor markøren. + + 5. :r !dir leser utdataene fra «dir»-kommandoen og legger dem nedenfor + markørposisjonen. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.1: «ÅPNE LINJE»-KOMMANDOEN + + + ** Skriv o for å «åpne opp» for en ny linje etter markøren og gå til + innsettingsmodus ** + + 1. Flytt markøren til linjen nedenfor merket --->. + + 2. Skriv o (liten o) for å åpne opp en linje NEDENFOR markøren og gå inn i + innsettingsmodus. + + 3. Skriv litt tekst og trykk for å gå ut av innsettingsmodusen. + +---> Etter at o er skrevet blir markøren plassert på den tomme linjen. + + 4. For å åpne en ny linje OVER markøren, trykk rett og slett en stor O + istedenfor en liten o . Prøv dette på linjen nedenfor. + +---> Lag ny linje over denne ved å trykke O mens markøren er på denne linjen. + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.2: «LEGG TIL»-KOMMANDOEN + + + ** Skriv a for å legge til tekst ETTER markøren. ** + + 1. Flytt markøren til starten av linjen merket ---> nedenfor. + + 2. Trykk e til markøren er på slutten av «li». + + 3. Trykk a (liten a) for å legge til tekst ETTER markøren. + + 4. Fullfør ordet sånn som på linjen nedenfor. Trykk for å gå ut av + innsettingsmodusen. + + 5. Bruk e for å gå til det neste ufullstendige ordet og repeter steg 3 og + 4. + +---> Denne li lar deg øve på å leg til tek på en linje. +---> Denne linjen lar deg øve på å legge til tekst på en linje. + +Merk: a, i og A går alle til den samme innsettingsmodusen, den eneste + forskjellen er hvor tegnene blir satt inn. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.3: EN ANNEN MÅTE Å ERSTATTE PÅ + + + ** Skriv en stor R for å erstatte mer enn ett tegn. ** + + 1. Flytt markøren til den første linjen nedenfor merket --->. Flytt markøren + til begynnelsen av den første «xxx»-en. + + 2. Trykk R og skriv inn tallet som står nedenfor på den andre linjen så + det erstatter xxx. + + 3. Trykk for å gå ut av erstatningsmodusen. Legg merke til at resten + av linjen forblir uforandret. + + 4. Repeter stegene for å erstatte den gjenværende xxx. + +---> Ved å legge 123 til xxx får vi xxx. +---> Ved å legge 123 til 456 får vi 579. + +MERK: Erstatningsmodus er lik insettingsmodus, men hvert tegn som skrives + erstatter et eksisterende tegn. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.4: KOPIERE OG LIME INN TEKST + + + ** Bruk y-operatoren for å kopiere tekst og p for å lime den inn ** + + 1. Gå til linjen merket ---> nedenfor og plasser markøren etter «a)». + + 2. Gå inn i visuell modus med v og flytt markøren til like før «første». + + 3. Trykk y for å kopiere (engelsk: «yank») den uthevede teksten. + + 4. Flytt markøren til slutten av den neste linjen: j$ + + 5. Trykk p for å lime inn teksten. Trykk deretter: a andre . + + 6. Bruk visuell modus for å velge « valget.», kopier det med y , gå til + slutten av den neste linjen med j$ og legg inn teksten der med p . + +---> a) Dette er det første valget. + b) + +Merk: Du kan også bruke y som en operator; yw kopierer ett ord. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 6.5: SETT VALG + + + ** Sett et valg så søk eller erstatning ignorerer store/små bokstaver. ** + + 1. Let etter «ignore» ved å skrive: /ignore + Repeter flere ganger ved å trykke n . + + 2. Sett «ic»-valget (Ignore Case) ved å skrive: :set ic + + 3. Søk etter «ignore» igjen ved å trykke n . + Legg merke til at både «Ignore» og «IGNORE» blir funnet. + + 4. Sett «hlsearch»- og «incsearch»-valgene: :set hls is + + 5. Skriv søkekommandoen igjen og se hva som skjer: /ignore + + 6. For å slå av ignorering av store/små bokstaver, skriv: :set noic + +Merk: For å fjerne uthevingen av treff, skriv: :nohlsearch +Merk: Hvis du vil ignorere store/små bokstaver for kun en søkekommando, bruk + \c i uttrykket: /ignore\c +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 6 + + 1. Trykk o for å legge til en linje NEDENFOR markøren og gå inn i + innsettingsmodus. + Trykk O for å åpne en linje OVER markøren. + + 2. Skriv a for å sette inn tekst ETTER markøren. + Skriv A for å sette inn tekst etter slutten av linjen. + + 3. Kommandoen e går til slutten av et ord. + + 4. Operatoren y («yank») kopierer tekst, p («paste») limer den inn. + + 5. Ved å trykke R går du inn i erstatningsmodus helt til trykkes. + + 6. Skriv «:set xxx» for å sette valget «xxx». Noen valg er: + «ic» «ignorecase» ignorer store/små bokstaver under søk + «is» «incsearch» vis delvise treff for en søketekst + «hls» «hlsearch» uthev alle søketreff + + 7. Legg til «no» foran valget for å slå det av: :set noic + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 7.1: FÅ HJELP + + + ** Bruk det innebygde hjelpesystemet. ** + + Vim har et omfattende innebygget hjelpesystem. For å starte det, prøv en av + disse måtene: + - Trykk Hjelp-tasten (hvis du har en) + - Trykk F1-tasten (hvis du har en) + - Skriv :help + + Les teksten i hjelpevinduet for å finne ut hvordan hjelpen virker. + Skriv CTRL-W CTRL-W for å hoppe fra et vindu til et annet + Skriv :q for å lukke hjelpevinduet. + + Du kan få hjelp for omtrent alle temaer om Vim ved å skrive et parameter til + «:help»-kommandoen. Prøv disse (ikke glem å trykke ): + + :help w + :help c_CTRL-D + :help insert-index + :help user-manual +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 7.2: LAG ET OPPSTARTSSKRIPT + + + ** Slå på funksjoner i Vim ** + + Vim har mange flere funksjoner enn Vi, men flesteparten av dem er slått av + som standard. For å begynne å bruke flere funksjoner må du lage en + «vimrc»-fil. + + 1. Start redigeringen av «vimrc»-filen. Dette avhenger av systemet ditt: + :e ~/.vimrc for Unix + :e $VIM/_vimrc for MS Windows + + 2. Les inn eksempelfilen for «vimrc»: + :r $VIMRUNTIME/vimrc_example.vim + + 3. Lagre filen med: + :w + + Neste gang du starter Vim vil den bruke syntaks-utheving. Du kan legge til + alle dine foretrukne oppsett i denne «vimrc»-filen. + For mer informasjon, skriv :help vimrc-intro +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + Leksjon 7.3: FULLFØRING + + + ** Kommandolinjefullføring med CTRL-D og ** + + 1. Vær sikker på at Vim ikke er i Vi-kompatibel modus: :set nocp + + 2. Se hvilke filer som er i katalogen: :!ls eller :!dir + + 3. Skriv starten på en kommando: :e + + 4. Trykk CTRL-D og Vim vil vise en liste over kommandoer som starter med + «e». + + 5. Trykk og Vim vil fullføre kommandonavnet til «:edit». + + 6. Legg til et mellomrom og starten på et eksisterende filnavn: :edit FIL + + 7. Trykk . Vim vil fullføre navnet (hvis det er unikt). + +MERK: Fullføring fungerer for mange kommandoer. Prøv ved å trykke CTRL-D og + . Det er spesielt nyttig for bruk sammen med :help . +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + OPPSUMMERING AV LEKSJON 7 + + + 1. Skriv :help eller trykk eller for å åpne et hjelpevindu. + + 2. Skriv :help kommando for å få hjelp om kommando . + + 3. Trykk CTRL-W CTRL-W for å hoppe til et annet vindu. + + 4. Trykk :q for å lukke hjelpevinduet. + + 5. Opprett et vimrc-oppstartsskript for å lagre favorittvalgene dine. + + 6. Når du skriver en «:»-kommando, trykk CTRL-D for å se mulige + fullføringer. Trykk for å bruke en fullføring. + + + + + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Her slutter innføringen i Vim. Den var ment som en rask oversikt over + editoren, akkurat nok til å la deg sette i gang med enkel bruk. Den er på + langt nær komplett, da Vim har mange flere kommandoer. Les bruksanvisningen + ved å skrive :help user-manual . + + For videre lesing og studier, kan denne boken anbefales: + «Vim - Vi Improved» av Steve Oualline + Utgiver: New Riders + Den første boken som er fullt og helt dedisert til Vim. Spesielt nyttig for + nybegynnere. Inneholder mange eksempler og illustrasjoner. + Se http://iccf-holland.org/click5.html + + Denne boken er eldre og handler mer om Vi enn Vim, men anbefales også: + «Learning the Vi Editor» av Linda Lamb + Utgiver: O'Reilly & Associates Inc. + Det er en god bok for å få vite omtrent hva som helst om Vi. + Den sjette utgaven inneholder også informasjon om Vim. + + Denne innføringen er skrevet av Michael C. Pierce og Robert K. Ware, + Colorado School of Mines med idéer av Charles Smith, Colorado State + University. E-mail: bware@mines.colorado.edu . + + Modifisert for Vim av Bram Moolenaar. + Oversatt av Øyvind A. Holm. E-mail: vimtutor _AT_ sunbase.org + Id: tutor.no 406 2007-03-18 22:48:36Z sunny + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +vim: set ts=8 : From 3ccb548b6d3aa4353921ebacfa05b9b8aad586f8 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Wed, 9 Mar 2016 11:29:25 +0100 Subject: [PATCH 344/356] Support for YAML .sublime-syntax extension --- lib/linguist/languages.yml | 1 + samples/YAML/HexInspect.sublime-syntax | 29 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 samples/YAML/HexInspect.sublime-syntax diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 442117a0..abe558a4 100755 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3963,6 +3963,7 @@ YAML: - .yml - .reek - .rviz + - .sublime-syntax - .syntax - .yaml - .yaml-tmlanguage diff --git a/samples/YAML/HexInspect.sublime-syntax b/samples/YAML/HexInspect.sublime-syntax new file mode 100644 index 00000000..76f97bd1 --- /dev/null +++ b/samples/YAML/HexInspect.sublime-syntax @@ -0,0 +1,29 @@ +%YAML 1.2 +--- +# http://www.sublimetext.com/docs/3/syntax.html +name: Hex Inspect +file_extensions: [] +hidden: true +scope: source.inspect +contexts: + main: + - match: '([\w\-]+)\s*(:)\s*' + captures: + 1: support.function.key.inspect + 2: support.function.punctuation.inspect + push: + - meta_scope: item.inspect + - match: '([\d\-\w]+)' + captures: + 1: data.inspect + pop: true + - match: '^(\s*[\w\-\s]+)\s*(:)\s*' + captures: + 1: keyword.title.inspect + 2: keyword.title-punctuation.inspect + push: + - meta_scope: item.inspect + - match: $ + pop: true + - match: '[\w\s]+' + scope: title-info.inspect From 8cd80801e81072f3ccd085c596b6a1e702baad4f Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Wed, 9 Mar 2016 06:15:41 -0600 Subject: [PATCH 345/356] Fixing indentation --- lib/linguist/heuristics.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 895bfa20..5c27ca03 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -322,9 +322,9 @@ module Linguist end disambiguate ".rpy" do |data| - if /(^(import|from|class|def)[\s\S])/m.match(data) + if /(^(import|from|class|def)[\s\S])/m.match(data) Language["Python"] - else + else Language["Ren'Py"] end end From b032886c21d8397ca0be56fa91b5454e2f16d7c1 Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Tue, 12 May 2015 13:22:10 +0200 Subject: [PATCH 346/356] Add .me and other text filenames. click.me by Bram Moolenaar; VIM license. --- lib/linguist/languages.yml | 11 +++++++++++ samples/Text/filenames/README.me | 1 + samples/Text/filenames/click.me | 9 +++++++++ samples/Text/filenames/delete.me | 1 + samples/Text/filenames/keep.me | 1 + samples/Text/filenames/read.me | 1 + samples/Text/filenames/test.me | 1 + 7 files changed, 25 insertions(+) create mode 100644 samples/Text/filenames/README.me create mode 100644 samples/Text/filenames/click.me create mode 100644 samples/Text/filenames/delete.me create mode 100644 samples/Text/filenames/keep.me create mode 100644 samples/Text/filenames/read.me create mode 100644 samples/Text/filenames/test.me diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 6f0bf16e..ae730da5 100755 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -3574,6 +3574,17 @@ Text: - .txt - .fr - .ncl + filenames: + - COPYING + - INSTALL + - LICENSE + - NEWS + - README.me + - click.me + - delete.me + - keep.me + - read.me + - test.me tm_scope: none ace_mode: text diff --git a/samples/Text/filenames/README.me b/samples/Text/filenames/README.me new file mode 100644 index 00000000..82a79018 --- /dev/null +++ b/samples/Text/filenames/README.me @@ -0,0 +1 @@ +Please read me. diff --git a/samples/Text/filenames/click.me b/samples/Text/filenames/click.me new file mode 100644 index 00000000..c2ed4691 --- /dev/null +++ b/samples/Text/filenames/click.me @@ -0,0 +1,9 @@ + +To run the "Conway's game of life" macros: + + 1. Type ":so life.vim". This loads the macros. + 2. Type "g" to run the macros. + 3. Type CTRL-C to interrupt. + 4. Type ":q!" to get out. + +See life.vim for more advanced usage. diff --git a/samples/Text/filenames/delete.me b/samples/Text/filenames/delete.me new file mode 100644 index 00000000..8f0b7e42 --- /dev/null +++ b/samples/Text/filenames/delete.me @@ -0,0 +1 @@ +Delete me. diff --git a/samples/Text/filenames/keep.me b/samples/Text/filenames/keep.me new file mode 100644 index 00000000..23913ab5 --- /dev/null +++ b/samples/Text/filenames/keep.me @@ -0,0 +1 @@ +Keep me. diff --git a/samples/Text/filenames/read.me b/samples/Text/filenames/read.me new file mode 100644 index 00000000..a6e6af0d --- /dev/null +++ b/samples/Text/filenames/read.me @@ -0,0 +1 @@ +Read me now! diff --git a/samples/Text/filenames/test.me b/samples/Text/filenames/test.me new file mode 100644 index 00000000..58ebd8a9 --- /dev/null +++ b/samples/Text/filenames/test.me @@ -0,0 +1 @@ +Test me. From 6f8a7d1070dfd847ab12a6ba093cd1c7e589b65b Mon Sep 17 00:00:00 2001 From: Lars Brinkhoff Date: Tue, 12 May 2015 14:04:29 +0200 Subject: [PATCH 347/356] Exclude 'filenames' from all_fixtures. --- test/test_heuristics.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index 702320e9..7021e20b 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -13,7 +13,8 @@ class TestHeuristcs < Minitest::Test end def all_fixtures(language_name, file="*") - Dir.glob("#{samples_path}/#{language_name}/#{file}") + Dir.glob("#{samples_path}/#{language_name}/#{file}") - + ["#{samples_path}/#{language_name}/filenames"] end def test_no_match From 56ee61b17ce3cf712837e15eb9b6ad289118c45c Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Wed, 9 Mar 2016 12:46:43 +0000 Subject: [PATCH 348/356] make .hlsl the primary extension for HLSL When I submitted the HLSL-language, I accidentally missed that the first extension was the primary one (as is documented in the source code, which I unfortunately missed), and instead alphabetized the whole list. The primary extension should be .hlsl, so let's remedy this. --- lib/linguist/languages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 7ee17bb0..7e682d6f 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -1326,9 +1326,9 @@ HCL: HLSL: type: programming extensions: + - .hlsl - .fx - .fxh - - .hlsl - .hlsli ace_mode: text tm_scope: none From 6af499e3525a69f95b896793ae9138641d00fea6 Mon Sep 17 00:00:00 2001 From: Peter Jas Date: Sun, 6 Mar 2016 20:18:57 +0000 Subject: [PATCH 349/356] Classification of props file * Initially treat as XML * Disambiguate from ini (key-value pair style with `=`) * If the file is neither XML-style nor INI, classify as SQL --- lib/linguist/heuristics.rb | 8 ++++++++ lib/linguist/languages.yml | 1 + samples/XML/Default.props | 29 +++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 samples/XML/Default.props diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 0806ce1f..b8e9c2fb 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -313,6 +313,14 @@ module Linguist end end + disambiguate ".props" do |data| + if /^(\s*)( + + + + + + + + Windows Phone Silverlight 8.1 + 6.3 + v120 + + <_PlatformToolsetFriendlyNameFor_v120>Windows Phone Silverlight 8.1 (v120) + <_PlatformToolsetShortNameFor_v120>Windows Phone Silverlight 8.1 + + + + + From 6812a2270698282c5f1e7ef3459ac63bbc050e10 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Thu, 10 Mar 2016 06:50:48 -0600 Subject: [PATCH 350/356] Slimming down Terra samples --- samples/Terra/abouttocompile.t | 22 -- samples/Terra/addlanguage1.t | 17 - samples/Terra/aggregatearr.t | 18 - samples/Terra/ainline.t | 24 -- samples/Terra/alignment.t | 7 - samples/Terra/and.t | 9 - samples/Terra/anon.t | 26 -- samples/Terra/anon3.t | 18 - samples/Terra/anonstruct.t | 12 - samples/Terra/anonstruct2.t | 7 - samples/Terra/antiquote1.t | 12 - samples/Terra/antiquote2.t | 13 - samples/Terra/antiquote3.t | 16 - samples/Terra/antiquote4.t | 11 - samples/Terra/antiquote5.t | 21 - samples/Terra/array.t | 60 --- samples/Terra/arraylit.t | 29 -- samples/Terra/arrayt2.t | 82 ---- samples/Terra/arrptr.t | 5 - samples/Terra/asm.t | 28 -- samples/Terra/atoi.t | 7 - samples/Terra/avxhadd.t | 32 -- samples/Terra/badname.t | 4 - samples/Terra/benchmark_fannkuchredux.t | 148 ------- samples/Terra/bf.t | 60 --- samples/Terra/blankexp.t | 7 - samples/Terra/blockescape.t | 23 -- samples/Terra/blocking.t | 57 --- samples/Terra/blocking2-fixed.t | 68 ---- samples/Terra/blocking2.t | 81 ---- samples/Terra/blocking3.t | 85 ----- samples/Terra/bounce.t | 23 -- samples/Terra/bug.t | 20 - samples/Terra/bug2.t | 20 - samples/Terra/bug3.t | 15 - samples/Terra/bug4.t | 14 - samples/Terra/calc.t | 33 -- samples/Terra/call.t | 53 --- samples/Terra/callbackcache.t | 9 - samples/Terra/canon.t | 45 --- samples/Terra/canon2.t | 41 -- samples/Terra/cast.t | 11 - samples/Terra/cbool.t | 13 - samples/Terra/cconv.t | 488 ------------------------ samples/Terra/cfgbug.t | 14 - samples/Terra/clanginfo.t | 1 - samples/Terra/class.t | 235 ------------ samples/Terra/class2.t | 45 --- samples/Terra/class3.t | 36 -- samples/Terra/class4.t | 22 -- samples/Terra/class5.t | 54 --- samples/Terra/class6.t | 66 ---- samples/Terra/classifyfloatstructs.t | 137 ------- samples/Terra/clean.t | 17 - samples/Terra/cnames.t | 25 -- samples/Terra/cnamespace.t | 24 -- samples/Terra/cnamespaces.t | 32 -- samples/Terra/compilecallback.t | 16 - samples/Terra/completec.t | 13 - samples/Terra/conflict.t | 12 - samples/Terra/constant.t | 35 -- samples/Terra/constant2.t | 21 - samples/Terra/constructor.t | 12 - samples/Terra/coverage.t | 47 --- samples/Terra/coverage2.t | 209 ---------- samples/Terra/coverage3.t | 107 ------ samples/Terra/crash1.t | 1 - samples/Terra/crash2.t | 1 - samples/Terra/cstruct.t | 20 - samples/Terra/cstruct2.t | 8 - samples/Terra/cudaagg.t | 56 --- samples/Terra/cudaaggregate.t | 45 --- samples/Terra/cudaatomic.t | 39 -- samples/Terra/cudaconst2.t | 14 - samples/Terra/cudaglobal.t | 48 --- samples/Terra/cudahello.t | 30 -- samples/Terra/cudaoffline.t | 65 ---- samples/Terra/cudaoo.t | 20 - samples/Terra/cudaprintf.t | 50 --- samples/Terra/cudashared.t | 47 --- samples/Terra/cudatest.t | 47 --- samples/Terra/cudatex.t | 59 --- samples/Terra/cunion.t | 34 -- samples/Terra/cunion2.t | 35 -- samples/Terra/customline.t | 10 - samples/Terra/customtable.t | 10 - samples/Terra/cvar.t | 9 - samples/Terra/debugcallback.t | 23 -- samples/Terra/declerrors.t | 29 -- samples/Terra/decltwice.t | 18 - samples/Terra/def1.t | 16 - samples/Terra/defaultoperator.t | 9 - samples/Terra/defer.t | 111 ------ samples/Terra/deferbreak.t | 35 -- samples/Terra/defercond.t | 82 ---- samples/Terra/defergoto.t | 35 -- samples/Terra/dgemm.t | 143 ------- samples/Terra/dgemm2.t | 163 -------- samples/Terra/dgemm3.t | 213 ----------- samples/Terra/dgemmpaper.t | 75 ---- samples/Terra/diffuse.t | 237 ------------ samples/Terra/dynlib.t | 47 --- samples/Terra/eager.t | 10 - samples/Terra/emptycalls.t | 31 -- samples/Terra/emptyname.t | 5 - samples/Terra/emptystruct.t | 30 -- samples/Terra/enumc.t | 14 - samples/Terra/evenodd.t | 20 - samples/Terra/examplecompiler1.t | 41 -- samples/Terra/examplelanguage1.t | 7 - samples/Terra/exampleparser1.t | 22 -- samples/Terra/exittest.t | 9 - samples/Terra/explicitcast.t | 11 - samples/Terra/exportdynamic.t | 9 - samples/Terra/expvec.t | 34 -- samples/Terra/f2.t | 17 - samples/Terra/fact.t | 16 - samples/Terra/fakeasm.t | 31 -- samples/Terra/falsespec.t | 8 - samples/Terra/fastcall.t | 24 -- samples/Terra/fib.t | 26 -- samples/Terra/fib2.t | 27 -- samples/Terra/fnames.t | 5 - samples/Terra/fncalltest.t | 16 - samples/Terra/fnpointer.t | 24 -- samples/Terra/fnptr.t | 7 - samples/Terra/fnptrc.t | 25 -- samples/Terra/foo.t | 1 - samples/Terra/for.t | 31 -- samples/Terra/for2.t | 31 -- samples/Terra/forbreak.t | 17 - samples/Terra/forlist.t | 24 -- samples/Terra/forlist2.t | 37 -- samples/Terra/forp.t | 21 - samples/Terra/forsym.t | 24 -- samples/Terra/forwardtodef.t | 7 - samples/Terra/functionnoproto.t | 6 - samples/Terra/gctest.t | 18 - samples/Terra/gemm.t | 207 ---------- samples/Terra/getmethod.t | 19 - samples/Terra/gettype.t | 18 - samples/Terra/globals.t | 26 -- samples/Terra/goto.t | 16 - samples/Terra/goto2.t | 18 - samples/Terra/gvarfault.t | 24 -- samples/Terra/hasbeenfrozen.t | 33 -- samples/Terra/hello.t | 8 - samples/Terra/hello2.t | 10 - samples/Terra/hexf.t | 9 - samples/Terra/huge.t | 7 - samples/Terra/ifelse.t | 17 - samples/Terra/includec.t | 42 -- samples/Terra/includetwice.t | 21 - samples/Terra/incomplete.t | 32 -- samples/Terra/incomplete2.t | 25 -- samples/Terra/incomplete3.t | 29 -- samples/Terra/incomplete4.t | 22 -- samples/Terra/incomplete5.t | 65 ---- samples/Terra/incompletetypetest.t | 13 - samples/Terra/incompletetypetest2.t | 13 - samples/Terra/incompletetypetest3.t | 13 - samples/Terra/indexing64.t | 10 - samples/Terra/indexingbug.t | 31 -- samples/Terra/interface.t | 33 -- samples/Terra/interface2.t | 38 -- samples/Terra/intrinsic.t | 21 - samples/Terra/isvolatile.t | 7 - samples/Terra/labelbug.t | 5 - samples/Terra/latelink.t | 24 -- samples/Terra/lazycstring.t | 21 - samples/Terra/lazylog.t | 61 --- samples/Terra/leaktest.t | 27 -- samples/Terra/let1.t | 15 - samples/Terra/let2.t | 64 ---- samples/Terra/linkllvm.t | 13 - samples/Terra/localenv.t | 46 --- samples/Terra/localenv2.t | 7 - samples/Terra/logical.t | 33 -- samples/Terra/luabridge.t | 18 - samples/Terra/luabridge2.t | 92 ----- samples/Terra/luabridgefn.t | 23 -- samples/Terra/luabridgerec.t | 10 - samples/Terra/luabridgeunion.t | 14 - samples/Terra/luaterramethod.t | 40 -- samples/Terra/lvaluepointer.t | 10 - samples/Terra/lvaluequote.t | 22 -- samples/Terra/lvaluetreelist.t | 9 - samples/Terra/macro.t | 50 --- samples/Terra/macro2.t | 14 - samples/Terra/macro3.t | 14 - samples/Terra/macrokey.t | 9 - samples/Terra/macrolet.t | 17 - samples/Terra/macroselect.t | 11 - samples/Terra/macrotest.t | 9 - samples/Terra/malloc.t | 23 -- samples/Terra/mathlib.t | 9 - samples/Terra/metatype.t | 16 - samples/Terra/method.t | 42 -- samples/Terra/methodantiquote.t | 18 - samples/Terra/methodmissing.t | 17 - samples/Terra/methodrvalue.t | 18 - samples/Terra/methodsugar.t | 15 - samples/Terra/missingfields.t | 14 - samples/Terra/mixed.t | 13 - samples/Terra/multiconstructor.t | 17 - samples/Terra/multimacro.t | 17 - samples/Terra/multiterra.t | 79 ---- samples/Terra/names.t | 16 - samples/Terra/nestedcalls.t | 11 - samples/Terra/nestextract.t | 40 -- samples/Terra/nestnoerror.t | 17 - samples/Terra/new.t | 14 - samples/Terra/nillocal.t | 6 - samples/Terra/niltype.t | 9 - samples/Terra/nojit.t | 20 - samples/Terra/nolengthop.t | 2 - samples/Terra/nonprototypec.t | 12 - samples/Terra/nontemporal.t | 7 - samples/Terra/numliteral.t | 14 - samples/Terra/objc.t | 25 -- samples/Terra/objc2.t | 42 -- samples/Terra/objtest.t | 45 --- samples/Terra/offsetcalc.t | 33 -- samples/Terra/opaquealloc.t | 19 - samples/Terra/or.t | 9 - samples/Terra/ordercomplete.t | 25 -- samples/Terra/output.t | 16 - samples/Terra/overload.t | 17 - samples/Terra/overload2.t | 15 - samples/Terra/overload3.t | 15 - samples/Terra/overloadcall.t | 12 - samples/Terra/overloadmethod.t | 24 -- samples/Terra/overloadmethod2.t | 17 - samples/Terra/overloadmethod3.t | 18 - samples/Terra/overloadproduct.t | 65 ---- samples/Terra/overloadrecv.t | 20 - samples/Terra/painfulrecstruct.t | 22 -- samples/Terra/paren.t | 5 - samples/Terra/parsecrash.t | 7 - samples/Terra/parsefail.t | 35 -- samples/Terra/parsefail2.t | 5 - samples/Terra/pattern.t | 43 --- samples/Terra/point.t | 13 - samples/Terra/pointerarith.t | 31 -- samples/Terra/pointerlike.t | 7 - samples/Terra/pow.t | 28 -- samples/Terra/ppltalk.t | 18 - samples/Terra/ppnil.t | 4 - samples/Terra/pratttest1.t | 4 - samples/Terra/prec.t | 4 - samples/Terra/prec2.t | 2 - samples/Terra/pretty.t | 69 ---- samples/Terra/printd.t | 5 - samples/Terra/printfarray.t | 12 - samples/Terra/printfloat.t | 7 - samples/Terra/proxystruct.t | 19 - samples/Terra/pt.t | 18 - samples/Terra/pthreads.t | 47 --- samples/Terra/quote.t | 10 - samples/Terra/quote10.t | 13 - samples/Terra/quote2.t | 9 - samples/Terra/quote3.t | 13 - samples/Terra/quote4.t | 9 - samples/Terra/quote5.t | 20 - samples/Terra/quote6.t | 12 - samples/Terra/quote7.t | 23 -- samples/Terra/quote8.t | 19 - samples/Terra/quote9.t | 19 - samples/Terra/quoteblock.t | 12 - samples/Terra/quoteenv.t | 25 -- samples/Terra/quoteselect.t | 12 - samples/Terra/rd.t | 1 - samples/Terra/receivercasts.t | 22 -- samples/Terra/recfn.t | 10 - samples/Terra/recoverfromerror.t | 15 - samples/Terra/recstruct.t | 33 -- samples/Terra/recstruct2.t | 17 - samples/Terra/rename.t | 8 - samples/Terra/renaming.t | 21 - samples/Terra/requiretwice.t | 3 - samples/Terra/rvaluerecv.t | 30 -- samples/Terra/scope.t | 13 - samples/Terra/selectoverload.t | 25 -- samples/Terra/setname.t | 7 - samples/Terra/setter.t | 39 -- samples/Terra/sgemm-old.t | 205 ---------- samples/Terra/sgemm.t | 162 -------- samples/Terra/sgemm3.t | 124 ------ samples/Terra/sgemmkernel.t | 164 -------- samples/Terra/shallowfreeze.t | 24 -- samples/Terra/sharedlib.t | 22 -- samples/Terra/shift.t | 7 - samples/Terra/signext.t | 12 - samples/Terra/simple.t | 6 - samples/Terra/simpleadd.t | 15 - samples/Terra/simpleapply.t | 19 - samples/Terra/simpleglobal.t | 19 - samples/Terra/simplerec.t | 25 -- samples/Terra/simplestruct.t | 10 - samples/Terra/simplevec.t | 12 - samples/Terra/sintable.t | 17 - samples/Terra/special.t | 61 --- samples/Terra/speed.t | 30 -- samples/Terra/splitprimary.t | 19 - samples/Terra/ssimple.t | 477 ----------------------- samples/Terra/staticmethod.t | 9 - samples/Terra/stattest.t | 13 - samples/Terra/stencil.t | 134 ------- samples/Terra/strerror.t | 9 - samples/Terra/string.t | 15 - samples/Terra/struct.t | 50 --- samples/Terra/structarg.t | 9 - samples/Terra/structcast.t | 38 -- samples/Terra/structconstructor.t | 9 - samples/Terra/structrvalue.t | 16 - samples/Terra/structsyntax.t | 14 - samples/Terra/sugar.t | 15 - samples/Terra/sumlanguage1.t | 2 - samples/Terra/sumlanguage2.t | 4 - samples/Terra/symbolmangling.t | 4 - samples/Terra/symbolvar.t | 11 - samples/Terra/symbolvar2.t | 16 - samples/Terra/symbolvar3.t | 16 - samples/Terra/symbolvar4.t | 16 - samples/Terra/symbolvar5.t | 16 - samples/Terra/symbolvar6.t | 16 - samples/Terra/symbolvar7.t | 15 - samples/Terra/symparam.t | 9 - samples/Terra/symparam2.t | 9 - samples/Terra/symparam3.t | 15 - samples/Terra/template.t | 6 - samples/Terra/terracast.t | 15 - samples/Terra/terralua.t | 32 -- samples/Terra/terraluamethod.t | 16 - samples/Terra/terranew.t | 19 - samples/Terra/testdebug.t | 57 --- samples/Terra/testimport.t | 6 - samples/Terra/testlang1.t | 21 - samples/Terra/testlang2.t | 4 - samples/Terra/testlog.t | 8 - samples/Terra/testrequire.t | 14 - samples/Terra/teststd.t | 45 --- samples/Terra/testvector.t | 57 --- samples/Terra/torturechain.t | 67 ---- samples/Terra/toterraexpression.t | 8 - samples/Terra/twolang.t | 23 -- samples/Terra/typeexp.t | 9 - samples/Terra/union.t | 26 -- samples/Terra/unm.t | 20 - samples/Terra/unpacktuple.t | 30 -- samples/Terra/unsafesym.t | 14 - samples/Terra/unstrict.t | 5 - samples/Terra/usercast.t | 24 -- samples/Terra/varargcstring.t | 2 - samples/Terra/vars.t | 23 -- samples/Terra/vars2.t | 17 - samples/Terra/vec.t | 27 -- samples/Terra/vecarith.t | 138 ------- samples/Terra/veclit.t | 29 -- samples/Terra/vecobj.t | 54 --- samples/Terra/vecptr.t | 4 - samples/Terra/vecsize.t | 5 - samples/Terra/vtablerec.t | 30 -- samples/Terra/zeroargs.t | 5 - samples/Terra/zeroreturn.t | 18 - samples/Terra/zeroreturn2.t | 17 - 366 files changed, 11582 deletions(-) delete mode 100644 samples/Terra/abouttocompile.t delete mode 100755 samples/Terra/addlanguage1.t delete mode 100644 samples/Terra/aggregatearr.t delete mode 100644 samples/Terra/ainline.t delete mode 100644 samples/Terra/alignment.t delete mode 100644 samples/Terra/and.t delete mode 100644 samples/Terra/anon.t delete mode 100644 samples/Terra/anon3.t delete mode 100644 samples/Terra/anonstruct.t delete mode 100644 samples/Terra/anonstruct2.t delete mode 100644 samples/Terra/antiquote1.t delete mode 100644 samples/Terra/antiquote2.t delete mode 100644 samples/Terra/antiquote3.t delete mode 100644 samples/Terra/antiquote4.t delete mode 100644 samples/Terra/antiquote5.t delete mode 100644 samples/Terra/array.t delete mode 100644 samples/Terra/arraylit.t delete mode 100644 samples/Terra/arrayt2.t delete mode 100644 samples/Terra/arrptr.t delete mode 100644 samples/Terra/asm.t delete mode 100644 samples/Terra/atoi.t delete mode 100644 samples/Terra/avxhadd.t delete mode 100644 samples/Terra/badname.t delete mode 100644 samples/Terra/benchmark_fannkuchredux.t delete mode 100644 samples/Terra/bf.t delete mode 100644 samples/Terra/blankexp.t delete mode 100644 samples/Terra/blockescape.t delete mode 100644 samples/Terra/blocking.t delete mode 100644 samples/Terra/blocking2-fixed.t delete mode 100644 samples/Terra/blocking2.t delete mode 100644 samples/Terra/blocking3.t delete mode 100644 samples/Terra/bounce.t delete mode 100644 samples/Terra/bug.t delete mode 100644 samples/Terra/bug2.t delete mode 100644 samples/Terra/bug3.t delete mode 100644 samples/Terra/bug4.t delete mode 100644 samples/Terra/calc.t delete mode 100644 samples/Terra/call.t delete mode 100644 samples/Terra/callbackcache.t delete mode 100644 samples/Terra/canon.t delete mode 100644 samples/Terra/canon2.t delete mode 100644 samples/Terra/cast.t delete mode 100644 samples/Terra/cbool.t delete mode 100644 samples/Terra/cconv.t delete mode 100644 samples/Terra/cfgbug.t delete mode 100644 samples/Terra/clanginfo.t delete mode 100644 samples/Terra/class.t delete mode 100644 samples/Terra/class2.t delete mode 100644 samples/Terra/class3.t delete mode 100644 samples/Terra/class4.t delete mode 100644 samples/Terra/class5.t delete mode 100644 samples/Terra/class6.t delete mode 100644 samples/Terra/classifyfloatstructs.t delete mode 100644 samples/Terra/clean.t delete mode 100644 samples/Terra/cnames.t delete mode 100644 samples/Terra/cnamespace.t delete mode 100644 samples/Terra/cnamespaces.t delete mode 100644 samples/Terra/compilecallback.t delete mode 100644 samples/Terra/completec.t delete mode 100644 samples/Terra/conflict.t delete mode 100644 samples/Terra/constant.t delete mode 100644 samples/Terra/constant2.t delete mode 100644 samples/Terra/constructor.t delete mode 100644 samples/Terra/coverage.t delete mode 100644 samples/Terra/coverage2.t delete mode 100644 samples/Terra/coverage3.t delete mode 100644 samples/Terra/crash1.t delete mode 100644 samples/Terra/crash2.t delete mode 100644 samples/Terra/cstruct.t delete mode 100644 samples/Terra/cstruct2.t delete mode 100644 samples/Terra/cudaagg.t delete mode 100644 samples/Terra/cudaaggregate.t delete mode 100644 samples/Terra/cudaatomic.t delete mode 100644 samples/Terra/cudaconst2.t delete mode 100644 samples/Terra/cudaglobal.t delete mode 100644 samples/Terra/cudahello.t delete mode 100644 samples/Terra/cudaoffline.t delete mode 100644 samples/Terra/cudaoo.t delete mode 100644 samples/Terra/cudaprintf.t delete mode 100644 samples/Terra/cudashared.t delete mode 100644 samples/Terra/cudatest.t delete mode 100644 samples/Terra/cudatex.t delete mode 100644 samples/Terra/cunion.t delete mode 100644 samples/Terra/cunion2.t delete mode 100644 samples/Terra/customline.t delete mode 100644 samples/Terra/customtable.t delete mode 100644 samples/Terra/cvar.t delete mode 100644 samples/Terra/debugcallback.t delete mode 100644 samples/Terra/declerrors.t delete mode 100644 samples/Terra/decltwice.t delete mode 100755 samples/Terra/def1.t delete mode 100644 samples/Terra/defaultoperator.t delete mode 100644 samples/Terra/defer.t delete mode 100644 samples/Terra/deferbreak.t delete mode 100644 samples/Terra/defercond.t delete mode 100644 samples/Terra/defergoto.t delete mode 100644 samples/Terra/dgemm.t delete mode 100644 samples/Terra/dgemm2.t delete mode 100644 samples/Terra/dgemm3.t delete mode 100644 samples/Terra/dgemmpaper.t delete mode 100644 samples/Terra/diffuse.t delete mode 100644 samples/Terra/dynlib.t delete mode 100644 samples/Terra/eager.t delete mode 100644 samples/Terra/emptycalls.t delete mode 100644 samples/Terra/emptyname.t delete mode 100644 samples/Terra/emptystruct.t delete mode 100644 samples/Terra/enumc.t delete mode 100644 samples/Terra/evenodd.t delete mode 100755 samples/Terra/examplecompiler1.t delete mode 100755 samples/Terra/examplelanguage1.t delete mode 100644 samples/Terra/exampleparser1.t delete mode 100644 samples/Terra/exittest.t delete mode 100644 samples/Terra/explicitcast.t delete mode 100644 samples/Terra/exportdynamic.t delete mode 100644 samples/Terra/expvec.t delete mode 100644 samples/Terra/f2.t delete mode 100644 samples/Terra/fact.t delete mode 100644 samples/Terra/fakeasm.t delete mode 100644 samples/Terra/falsespec.t delete mode 100644 samples/Terra/fastcall.t delete mode 100644 samples/Terra/fib.t delete mode 100644 samples/Terra/fib2.t delete mode 100644 samples/Terra/fnames.t delete mode 100644 samples/Terra/fncalltest.t delete mode 100644 samples/Terra/fnpointer.t delete mode 100644 samples/Terra/fnptr.t delete mode 100644 samples/Terra/fnptrc.t delete mode 100644 samples/Terra/foo.t delete mode 100644 samples/Terra/for.t delete mode 100644 samples/Terra/for2.t delete mode 100644 samples/Terra/forbreak.t delete mode 100644 samples/Terra/forlist.t delete mode 100644 samples/Terra/forlist2.t delete mode 100644 samples/Terra/forp.t delete mode 100644 samples/Terra/forsym.t delete mode 100644 samples/Terra/forwardtodef.t delete mode 100644 samples/Terra/functionnoproto.t delete mode 100644 samples/Terra/gctest.t delete mode 100644 samples/Terra/gemm.t delete mode 100644 samples/Terra/getmethod.t delete mode 100644 samples/Terra/gettype.t delete mode 100644 samples/Terra/globals.t delete mode 100644 samples/Terra/goto.t delete mode 100644 samples/Terra/goto2.t delete mode 100644 samples/Terra/gvarfault.t delete mode 100644 samples/Terra/hasbeenfrozen.t delete mode 100644 samples/Terra/hello.t delete mode 100644 samples/Terra/hello2.t delete mode 100644 samples/Terra/hexf.t delete mode 100644 samples/Terra/huge.t delete mode 100644 samples/Terra/ifelse.t delete mode 100644 samples/Terra/includec.t delete mode 100644 samples/Terra/includetwice.t delete mode 100644 samples/Terra/incomplete.t delete mode 100644 samples/Terra/incomplete2.t delete mode 100644 samples/Terra/incomplete3.t delete mode 100644 samples/Terra/incomplete4.t delete mode 100644 samples/Terra/incomplete5.t delete mode 100644 samples/Terra/incompletetypetest.t delete mode 100644 samples/Terra/incompletetypetest2.t delete mode 100644 samples/Terra/incompletetypetest3.t delete mode 100644 samples/Terra/indexing64.t delete mode 100644 samples/Terra/indexingbug.t delete mode 100644 samples/Terra/interface.t delete mode 100644 samples/Terra/interface2.t delete mode 100644 samples/Terra/intrinsic.t delete mode 100644 samples/Terra/isvolatile.t delete mode 100644 samples/Terra/labelbug.t delete mode 100644 samples/Terra/latelink.t delete mode 100644 samples/Terra/lazycstring.t delete mode 100644 samples/Terra/lazylog.t delete mode 100644 samples/Terra/leaktest.t delete mode 100644 samples/Terra/let1.t delete mode 100644 samples/Terra/let2.t delete mode 100644 samples/Terra/linkllvm.t delete mode 100644 samples/Terra/localenv.t delete mode 100644 samples/Terra/localenv2.t delete mode 100644 samples/Terra/logical.t delete mode 100644 samples/Terra/luabridge.t delete mode 100644 samples/Terra/luabridge2.t delete mode 100644 samples/Terra/luabridgefn.t delete mode 100644 samples/Terra/luabridgerec.t delete mode 100644 samples/Terra/luabridgeunion.t delete mode 100644 samples/Terra/luaterramethod.t delete mode 100644 samples/Terra/lvaluepointer.t delete mode 100644 samples/Terra/lvaluequote.t delete mode 100644 samples/Terra/lvaluetreelist.t delete mode 100644 samples/Terra/macro.t delete mode 100644 samples/Terra/macro2.t delete mode 100644 samples/Terra/macro3.t delete mode 100644 samples/Terra/macrokey.t delete mode 100644 samples/Terra/macrolet.t delete mode 100644 samples/Terra/macroselect.t delete mode 100644 samples/Terra/macrotest.t delete mode 100644 samples/Terra/malloc.t delete mode 100644 samples/Terra/mathlib.t delete mode 100644 samples/Terra/metatype.t delete mode 100644 samples/Terra/method.t delete mode 100644 samples/Terra/methodantiquote.t delete mode 100644 samples/Terra/methodmissing.t delete mode 100644 samples/Terra/methodrvalue.t delete mode 100644 samples/Terra/methodsugar.t delete mode 100644 samples/Terra/missingfields.t delete mode 100644 samples/Terra/mixed.t delete mode 100644 samples/Terra/multiconstructor.t delete mode 100644 samples/Terra/multimacro.t delete mode 100644 samples/Terra/multiterra.t delete mode 100644 samples/Terra/names.t delete mode 100644 samples/Terra/nestedcalls.t delete mode 100644 samples/Terra/nestextract.t delete mode 100644 samples/Terra/nestnoerror.t delete mode 100644 samples/Terra/new.t delete mode 100644 samples/Terra/nillocal.t delete mode 100644 samples/Terra/niltype.t delete mode 100644 samples/Terra/nojit.t delete mode 100644 samples/Terra/nolengthop.t delete mode 100644 samples/Terra/nonprototypec.t delete mode 100644 samples/Terra/nontemporal.t delete mode 100644 samples/Terra/numliteral.t delete mode 100644 samples/Terra/objc.t delete mode 100644 samples/Terra/objc2.t delete mode 100644 samples/Terra/objtest.t delete mode 100644 samples/Terra/offsetcalc.t delete mode 100644 samples/Terra/opaquealloc.t delete mode 100644 samples/Terra/or.t delete mode 100644 samples/Terra/ordercomplete.t delete mode 100644 samples/Terra/output.t delete mode 100644 samples/Terra/overload.t delete mode 100644 samples/Terra/overload2.t delete mode 100644 samples/Terra/overload3.t delete mode 100644 samples/Terra/overloadcall.t delete mode 100644 samples/Terra/overloadmethod.t delete mode 100644 samples/Terra/overloadmethod2.t delete mode 100644 samples/Terra/overloadmethod3.t delete mode 100644 samples/Terra/overloadproduct.t delete mode 100644 samples/Terra/overloadrecv.t delete mode 100644 samples/Terra/painfulrecstruct.t delete mode 100644 samples/Terra/paren.t delete mode 100644 samples/Terra/parsecrash.t delete mode 100644 samples/Terra/parsefail.t delete mode 100644 samples/Terra/parsefail2.t delete mode 100644 samples/Terra/pattern.t delete mode 100644 samples/Terra/point.t delete mode 100644 samples/Terra/pointerarith.t delete mode 100644 samples/Terra/pointerlike.t delete mode 100644 samples/Terra/pow.t delete mode 100644 samples/Terra/ppltalk.t delete mode 100644 samples/Terra/ppnil.t delete mode 100755 samples/Terra/pratttest1.t delete mode 100644 samples/Terra/prec.t delete mode 100644 samples/Terra/prec2.t delete mode 100644 samples/Terra/pretty.t delete mode 100644 samples/Terra/printd.t delete mode 100644 samples/Terra/printfarray.t delete mode 100644 samples/Terra/printfloat.t delete mode 100644 samples/Terra/proxystruct.t delete mode 100644 samples/Terra/pt.t delete mode 100644 samples/Terra/pthreads.t delete mode 100644 samples/Terra/quote.t delete mode 100644 samples/Terra/quote10.t delete mode 100644 samples/Terra/quote2.t delete mode 100644 samples/Terra/quote3.t delete mode 100644 samples/Terra/quote4.t delete mode 100644 samples/Terra/quote5.t delete mode 100644 samples/Terra/quote6.t delete mode 100644 samples/Terra/quote7.t delete mode 100644 samples/Terra/quote8.t delete mode 100644 samples/Terra/quote9.t delete mode 100644 samples/Terra/quoteblock.t delete mode 100644 samples/Terra/quoteenv.t delete mode 100644 samples/Terra/quoteselect.t delete mode 100644 samples/Terra/rd.t delete mode 100644 samples/Terra/receivercasts.t delete mode 100644 samples/Terra/recfn.t delete mode 100644 samples/Terra/recoverfromerror.t delete mode 100644 samples/Terra/recstruct.t delete mode 100644 samples/Terra/recstruct2.t delete mode 100644 samples/Terra/rename.t delete mode 100644 samples/Terra/renaming.t delete mode 100644 samples/Terra/requiretwice.t delete mode 100644 samples/Terra/rvaluerecv.t delete mode 100644 samples/Terra/scope.t delete mode 100644 samples/Terra/selectoverload.t delete mode 100644 samples/Terra/setname.t delete mode 100644 samples/Terra/setter.t delete mode 100644 samples/Terra/sgemm-old.t delete mode 100644 samples/Terra/sgemm.t delete mode 100644 samples/Terra/sgemm3.t delete mode 100644 samples/Terra/sgemmkernel.t delete mode 100644 samples/Terra/shallowfreeze.t delete mode 100644 samples/Terra/sharedlib.t delete mode 100644 samples/Terra/shift.t delete mode 100644 samples/Terra/signext.t delete mode 100644 samples/Terra/simple.t delete mode 100644 samples/Terra/simpleadd.t delete mode 100644 samples/Terra/simpleapply.t delete mode 100644 samples/Terra/simpleglobal.t delete mode 100644 samples/Terra/simplerec.t delete mode 100644 samples/Terra/simplestruct.t delete mode 100644 samples/Terra/simplevec.t delete mode 100644 samples/Terra/sintable.t delete mode 100644 samples/Terra/special.t delete mode 100644 samples/Terra/speed.t delete mode 100644 samples/Terra/splitprimary.t delete mode 100644 samples/Terra/ssimple.t delete mode 100644 samples/Terra/staticmethod.t delete mode 100644 samples/Terra/stattest.t delete mode 100644 samples/Terra/stencil.t delete mode 100644 samples/Terra/strerror.t delete mode 100644 samples/Terra/string.t delete mode 100644 samples/Terra/struct.t delete mode 100644 samples/Terra/structarg.t delete mode 100644 samples/Terra/structcast.t delete mode 100644 samples/Terra/structconstructor.t delete mode 100644 samples/Terra/structrvalue.t delete mode 100644 samples/Terra/structsyntax.t delete mode 100644 samples/Terra/sugar.t delete mode 100755 samples/Terra/sumlanguage1.t delete mode 100755 samples/Terra/sumlanguage2.t delete mode 100644 samples/Terra/symbolmangling.t delete mode 100644 samples/Terra/symbolvar.t delete mode 100644 samples/Terra/symbolvar2.t delete mode 100644 samples/Terra/symbolvar3.t delete mode 100644 samples/Terra/symbolvar4.t delete mode 100644 samples/Terra/symbolvar5.t delete mode 100644 samples/Terra/symbolvar6.t delete mode 100644 samples/Terra/symbolvar7.t delete mode 100644 samples/Terra/symparam.t delete mode 100644 samples/Terra/symparam2.t delete mode 100644 samples/Terra/symparam3.t delete mode 100644 samples/Terra/template.t delete mode 100644 samples/Terra/terracast.t delete mode 100644 samples/Terra/terralua.t delete mode 100644 samples/Terra/terraluamethod.t delete mode 100644 samples/Terra/terranew.t delete mode 100644 samples/Terra/testdebug.t delete mode 100644 samples/Terra/testimport.t delete mode 100755 samples/Terra/testlang1.t delete mode 100755 samples/Terra/testlang2.t delete mode 100644 samples/Terra/testlog.t delete mode 100644 samples/Terra/testrequire.t delete mode 100644 samples/Terra/teststd.t delete mode 100644 samples/Terra/testvector.t delete mode 100644 samples/Terra/torturechain.t delete mode 100644 samples/Terra/toterraexpression.t delete mode 100644 samples/Terra/twolang.t delete mode 100644 samples/Terra/typeexp.t delete mode 100644 samples/Terra/union.t delete mode 100644 samples/Terra/unm.t delete mode 100644 samples/Terra/unpacktuple.t delete mode 100644 samples/Terra/unsafesym.t delete mode 100644 samples/Terra/unstrict.t delete mode 100644 samples/Terra/usercast.t delete mode 100644 samples/Terra/varargcstring.t delete mode 100644 samples/Terra/vars.t delete mode 100644 samples/Terra/vars2.t delete mode 100644 samples/Terra/vec.t delete mode 100644 samples/Terra/vecarith.t delete mode 100644 samples/Terra/veclit.t delete mode 100644 samples/Terra/vecobj.t delete mode 100644 samples/Terra/vecptr.t delete mode 100644 samples/Terra/vecsize.t delete mode 100644 samples/Terra/vtablerec.t delete mode 100644 samples/Terra/zeroargs.t delete mode 100644 samples/Terra/zeroreturn.t delete mode 100644 samples/Terra/zeroreturn2.t diff --git a/samples/Terra/abouttocompile.t b/samples/Terra/abouttocompile.t deleted file mode 100644 index f6f9f6c8..00000000 --- a/samples/Terra/abouttocompile.t +++ /dev/null @@ -1,22 +0,0 @@ -struct A { - a : int; - b : int; -} - -function A.metamethods.__getentries(self) - print("GET ENTRIES") - for i,e in ipairs(self.entries) do - e.field = "foo"..e.field - end - return self.entries -end - -terra foo() - var a : A - a.fooa = 3 - a.foob = 4 - return a.fooa + a.foob -end - - -assert(foo() == 7) \ No newline at end of file diff --git a/samples/Terra/addlanguage1.t b/samples/Terra/addlanguage1.t deleted file mode 100755 index ad383d9e..00000000 --- a/samples/Terra/addlanguage1.t +++ /dev/null @@ -1,17 +0,0 @@ -do -import "lib/addlanguage" -local a = 4 -local b = add a,3,4+5,(function() terra one() return a end return one() end)() end -local inception = add add 3,4,a end,4 end -local test = require("test") - - -test.eq(b,20) -test.eq(inception,15) -end - -do -import "lib/addlanguage" -local c = add 4,5 end -assert(9 == c) -end \ No newline at end of file diff --git a/samples/Terra/aggregatearr.t b/samples/Terra/aggregatearr.t deleted file mode 100644 index b54f3dc3..00000000 --- a/samples/Terra/aggregatearr.t +++ /dev/null @@ -1,18 +0,0 @@ - - -a = terralib.new(int[4]) - -terra foo() - a[3] = 4 -end - -foo() -assert(4 == a[3]) - - -terra bar() - a = array(5,6,7,8) -end - -bar() -assert(a[3] == 8) diff --git a/samples/Terra/ainline.t b/samples/Terra/ainline.t deleted file mode 100644 index 4f6dcabe..00000000 --- a/samples/Terra/ainline.t +++ /dev/null @@ -1,24 +0,0 @@ - -C = terralib.includec("stdio.h") -terra foo() - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") - C.printf("hello, world\n") -end - -foo:getdefinitions()[1]:setinlined(true) - -terra bar() - foo() - return 4 -end - -bar:compile() -bar:disas() diff --git a/samples/Terra/alignment.t b/samples/Terra/alignment.t deleted file mode 100644 index 08b648f8..00000000 --- a/samples/Terra/alignment.t +++ /dev/null @@ -1,7 +0,0 @@ -local alignment = 16 -local aligned = terralib.aligned -terra foobar(a : &float) - terralib.attrstore(a,terralib.attrload(a+3,{ align = alignment }), { align = alignment }) -end - -foobar:disas() \ No newline at end of file diff --git a/samples/Terra/and.t b/samples/Terra/and.t deleted file mode 100644 index 87ea0284..00000000 --- a/samples/Terra/and.t +++ /dev/null @@ -1,9 +0,0 @@ -local test = require("test") - -terra foo(a : double, b : double, c : double) : bool - return a < b and b < c -end - -test.eq(foo(1,2,3),true) -test.eq(foo(1,2,1),false) -test.eq(foo(2,1,2),false) \ No newline at end of file diff --git a/samples/Terra/anon.t b/samples/Terra/anon.t deleted file mode 100644 index c5d3315f..00000000 --- a/samples/Terra/anon.t +++ /dev/null @@ -1,26 +0,0 @@ -local test = require("test") - -local Num = int - -local fib = -terra(a : Num) : Num - var i,c,p = 0,1,1 - while i < a do - c,p = c + p,c - i = i + 1 - end - return c -end - -function fib2(a) - local i,c,p = 0,1,1 - while i < a do - c,p = c + p,c - i = i + 1 - end - return c -end -for i = 0,10 do - print(fib(i)) - test.eq(fib(i),fib2(i)) -end \ No newline at end of file diff --git a/samples/Terra/anon3.t b/samples/Terra/anon3.t deleted file mode 100644 index 5d37c7c7..00000000 --- a/samples/Terra/anon3.t +++ /dev/null @@ -1,18 +0,0 @@ -C,T = terralib.includecstring [[ - struct D { - struct { int a; struct { int c; } c; } b; - } c; - typedef struct {int c;} B; - typedef struct { - struct { int a; } a; - struct { int b; } b; - B c; - } A; -]] - -terra foo(a : &C.A) - var c = a.a - var b = a.b.b - return c.a + b + a.c.c; -end -foo:compile() \ No newline at end of file diff --git a/samples/Terra/anonstruct.t b/samples/Terra/anonstruct.t deleted file mode 100644 index 5f661249..00000000 --- a/samples/Terra/anonstruct.t +++ /dev/null @@ -1,12 +0,0 @@ - -local C = tuple(int,tuple(int,int)) -terra anon() - var c : tuple(int,tuple(int,int)) = { 1, {2,3} } - var d : C = c - d._0 = 2 - return d._0 + c._1._0 + c._1._1 -end - -test = require("test") - -test.eq(anon(),7) \ No newline at end of file diff --git a/samples/Terra/anonstruct2.t b/samples/Terra/anonstruct2.t deleted file mode 100644 index 156e2a8b..00000000 --- a/samples/Terra/anonstruct2.t +++ /dev/null @@ -1,7 +0,0 @@ - -struct A { a : &A } - -terra foo() - var a : A -end -foo() \ No newline at end of file diff --git a/samples/Terra/antiquote1.t b/samples/Terra/antiquote1.t deleted file mode 100644 index 8bddcf3e..00000000 --- a/samples/Terra/antiquote1.t +++ /dev/null @@ -1,12 +0,0 @@ - - -function omgfunc() - return 2 -end - -terra foo() - return 1 + [{omgfunc()}] + [omgfunc()] -end - -local test = require("test") -test.eq(foo(),5) \ No newline at end of file diff --git a/samples/Terra/antiquote2.t b/samples/Terra/antiquote2.t deleted file mode 100644 index 7ad4f86d..00000000 --- a/samples/Terra/antiquote2.t +++ /dev/null @@ -1,13 +0,0 @@ - - -function omgfunc() - return 4 -end - -local what = `[ {2,3} ] -terra foo() - return [{3,`[ {2,3} ]}] -end - -local test = require("test") -test.meq({3,2,3},foo()) diff --git a/samples/Terra/antiquote3.t b/samples/Terra/antiquote3.t deleted file mode 100644 index 1d34ef7e..00000000 --- a/samples/Terra/antiquote3.t +++ /dev/null @@ -1,16 +0,0 @@ - - -function omgfunc() - return 2 -end - -a = global(0) - -terra foo() - [quote a = a + 1 end]; - [{quote a = a + 1 end,quote a = a + 1 end}] - return a -end - -local test = require("test") -test.eq(foo(),3) \ No newline at end of file diff --git a/samples/Terra/antiquote4.t b/samples/Terra/antiquote4.t deleted file mode 100644 index d6585edc..00000000 --- a/samples/Terra/antiquote4.t +++ /dev/null @@ -1,11 +0,0 @@ - - -terra foo() - var a = 4 - return [a] -end - -foo:printpretty() - -local test = require("test") -test.eq(foo(),4) \ No newline at end of file diff --git a/samples/Terra/antiquote5.t b/samples/Terra/antiquote5.t deleted file mode 100644 index 9ebbbed4..00000000 --- a/samples/Terra/antiquote5.t +++ /dev/null @@ -1,21 +0,0 @@ - - -function makeloop(N,body) - return quote - for i = 0, N do - body - end - end -end - - -terra stuff() - var a = 0; - [makeloop(10,quote - a = a + 1 - end)] - return a -end - - -print(stuff()) \ No newline at end of file diff --git a/samples/Terra/array.t b/samples/Terra/array.t deleted file mode 100644 index 28040709..00000000 --- a/samples/Terra/array.t +++ /dev/null @@ -1,60 +0,0 @@ - -terra bar() - var a : int[2] - a[0] = 1 - a[1] = 2 - return a -end - -terra foo() - var a : int[4] - a[1], a[2] = 4,2 - return a[1] + a[2] -end - -terra foo2() - var b = bar() - return b[0] + b[1] -end - -terra foo3() - return (bar())[0] -end - -terra foo4() - var a : int[4] - a[3] = 7 - var b = &a[0] - b[2] = 8 - return b[2] + b[3] -end - -terra bar2(a : &int) - a[1] = 100 - return a[0] -end - -terra foo5() - var a : int[4] - bar2(a) - return a[1] -end - -terra foo6() - return bar2(bar()) -end - - -terra foo7() - var a = array(1,2,3,4) - return a[1]+a[2] -end -local test = require("test") - -test.eq(6,foo()) -test.eq(3,foo2()) -test.eq(1,foo3()) -test.eq(15,foo4()) -test.eq(100,foo5()) -test.eq(1,foo6()) -test.eq(5,foo7()) \ No newline at end of file diff --git a/samples/Terra/arraylit.t b/samples/Terra/arraylit.t deleted file mode 100644 index 3731a367..00000000 --- a/samples/Terra/arraylit.t +++ /dev/null @@ -1,29 +0,0 @@ - -terra foo() - var a = array(1,2,3) - return a[0] + a[1] + a[2] -end - -terra foo2() - var a = array(1,2.5,3) - return a[1] -end -terra what() - return 3,4.5 -end -local expand = macro(function(a) return {`a._0,`a._1} end) -terra foo3() - var w = what() - var a = array(1,2.5,expand(w)) - return a[3] -end -terra foo4() - var a = array("what","magic","is","this") - return a[1][1] -end - -local test = require("test") -test.eq(foo(),6) -test.eq(foo2(),2.5) -test.eq(foo3(),4.5) -test.eq(foo4(),97) \ No newline at end of file diff --git a/samples/Terra/arrayt2.t b/samples/Terra/arrayt2.t deleted file mode 100644 index 8b6c9f2f..00000000 --- a/samples/Terra/arrayt2.t +++ /dev/null @@ -1,82 +0,0 @@ -local f = assert(io.popen("uname", 'r')) -local s = assert(f:read('*a')) -f:close() - -if s~="Darwin\n" then - print("Warning, not running test b/c this isn't a mac") - return -end - -C = terralib.includecstring [[ - #include - #include -]] -local arraytypes = {} -function Array(T) - if arraytypes[T] then return arraytypes[T] end - local struct ArrayImpl { - data : &T; - N : int; - } - arraytypes[T] = ArrayImpl - terra ArrayImpl:init(N : int) - self.data = [&T](C.malloc(N*sizeof(T))) - self.N = N - end - terra ArrayImpl:free() - C.free(self.data) - end - ArrayImpl.metamethods.__apply = macro(function(self,idx) - return `self.data[idx] - end) - ArrayImpl.metamethods.__methodmissing = macro(function(methodname,selfexp,...) - local args = terralib.newlist {...} - local params = args:map(function(a) return symbol(a:gettype()) end) - local terra elemfn(a : &T, [params]) - return a:[methodname](params) - end - local RT = elemfn:gettype().returntype - return quote - var self = selfexp - var r : Array(RT) - r:init(self.N) - for i = 0,r.N do - r.data[i] = elemfn(&self.data[i],args) - end - in - r - end - end) - return ArrayImpl -end - -local OC = require("lib/objc") -local IO = terralib.includec("stdio.h") - -struct Rect { - a : double, - b : double, - c : double, - d : double -} - -terra str(data : &uint8) - return OC.NSString:stringWithUTF8String(data) -end - -terra main() - OC.NSAutoreleasePool:new() - var app = OC.NSApplication:sharedApplication() - var rec = Rect {0,0,200,200} - var windows : Array(OC.ID) - windows:init(2) - windows(0) = OC.NSWindow - windows(1) = OC.NSWindow - windows = windows:alloc():initWithContentRect_styleMask_backing_defer(rec,1,2,false) - windows:makeKeyAndOrderFront(nil) - IO.printf("entering run loop\n") - app:run() -end - -terralib.linklibrary("/System/Library/Frameworks/Cocoa.framework/Cocoa") -main:compile() diff --git a/samples/Terra/arrptr.t b/samples/Terra/arrptr.t deleted file mode 100644 index 55b6a918..00000000 --- a/samples/Terra/arrptr.t +++ /dev/null @@ -1,5 +0,0 @@ -a = &int[4] -a = (&int)[4] -local test = require("test") -test.eq(false,a:ispointer()) -test.eq(true,a:isarray()) \ No newline at end of file diff --git a/samples/Terra/asm.t b/samples/Terra/asm.t deleted file mode 100644 index 803b6882..00000000 --- a/samples/Terra/asm.t +++ /dev/null @@ -1,28 +0,0 @@ -local a = ... -if not a then - --force MCJIT - os.execute("../terra -m asm.t true") - return -end - -C = terralib.includec("stdio.h") - -struct Vendor { - maxV : int; - b : int; - c : int; - d : int; -} - -terra foo() - var r = terralib.asm(Vendor,"cpuid","={eax},={ebx},={ecx},={edx},{eax},~{dirflag},~{fpsr},~{flags}",false,0) - r.c,r.d = r.d,r.c - C.printf("%.12s\n", &r.b) -end -foo() - - -terra addone(a : int) - return terralib.asm(int,"addl $$1,$1","=r,0",true,a) -end -assert(addone(3) == 4) \ No newline at end of file diff --git a/samples/Terra/atoi.t b/samples/Terra/atoi.t deleted file mode 100644 index 929f9672..00000000 --- a/samples/Terra/atoi.t +++ /dev/null @@ -1,7 +0,0 @@ -c = terralib.includec("stdlib.h") - -terra what() - return c.atoi("52") -end - -print(what()) diff --git a/samples/Terra/avxhadd.t b/samples/Terra/avxhadd.t deleted file mode 100644 index d1e762b7..00000000 --- a/samples/Terra/avxhadd.t +++ /dev/null @@ -1,32 +0,0 @@ -local haddavx = terralib.intrinsic("llvm.x86.avx.hadd.ps.256", { vector(float,8), vector(float,8) } -> vector(float,8)) - -terra hadd(v : vector(float,8)) - var v1 = haddavx(v,v) - var v2 = haddavx(v1,v1) - return v2[0] + v2[4] -end - -ffi = require("ffi") - -local stdio = terralib.includec("stdio.h") - -terra foobar(a : &float) - return hadd(@[&vector(float,8)](a)) -end - -dat = ffi.new("float[?] __attribute__((aligned(32)))",8) - -for i = 1,8 do - dat[i-1] = i -end - -if terralib.llvmversion == 31 then - print("ignoring...") -else - foobar:compile() - local test = require("test") - test.eq(foobar(dat),36) -end - ---terralib.saveobj("avxhadd",{main = foobar}) ---os.execute("./avxhadd") \ No newline at end of file diff --git a/samples/Terra/badname.t b/samples/Terra/badname.t deleted file mode 100644 index a2436c12..00000000 --- a/samples/Terra/badname.t +++ /dev/null @@ -1,4 +0,0 @@ ---tostring on a type should never error, so we assign it its original name if it does -struct A {} -A.metamethods.__typename = error -print(A) \ No newline at end of file diff --git a/samples/Terra/benchmark_fannkuchredux.t b/samples/Terra/benchmark_fannkuchredux.t deleted file mode 100644 index 2ec27e6e..00000000 --- a/samples/Terra/benchmark_fannkuchredux.t +++ /dev/null @@ -1,148 +0,0 @@ ---[[ - The Computer Language Benchmarks Game - http://shootout.alioth.debian.org/ - - contributed by Ledrug Katz - - ]] - - -local C = { - printf = terralib.externfunction("printf", terralib.types.funcpointer(rawstring,int,true)), - exit = terralib.externfunction("exit", int -> {}), - atoi = terralib.externfunction("atoi", rawstring -> int) -} - --- this depends highly on the platform. It might be faster to use --- char type on 32-bit systems; it might be faster to use unsigned. - -elem = int - -s = global(elem[16]) -t = global(elem[16]) - -maxflips = global(int) -max_n = global(int) -odd = global(bool) -checksum = global(int) - -terra flip() - var i = max_n - var x : &elem = t - var y : &elem = s - var c : elem - - while i > 0 do - i = i - 1 - @x = @y - x = x + 1 - y = y + 1 - end - - i = 1 - - repeat - x = t - y = t + t[0] - while x < y do - c = @x - @x = @y - x = x + 1 - @y = c - y = y - 1 - end - i = i + 1 - until t[t[0]] == 0 - --C.printf("flip %d\n",i); - return i -end - - -terra rotate(n : int) - var c = s[0] - for i = 0,n do - s[i] = s[i+1] - end - s[n] = c - --C.printf("rotate(%d) %d\n",n,c); -end - - -terra tk(n : int) - var i = 0 - var f : int - var c : elem[16] - - for i = 0,16 do - c[i] = 0 - end - - while i < n do - rotate(i) - if c[i] >= i then - c[i] = 0 - i = i + 1 - goto continue - end - - c[i] = c[i] + 1 - i = 1 - odd = not odd - if s[0] ~= 0 then - if s[s[0]] ~= 0 then - f = flip() - else - f = 1 - end - if f > maxflips then - maxflips = f - end - --C.printf("f = %d\n",f) - if odd then - checksum = checksum - f - else - checksum = checksum + f - end - end - ::continue:: - end - -end - - -terra doit(N : int) - maxflips = 0 - odd = false - checksum = 0 - max_n = N - if max_n < 3 or max_n > 15 then - C.printf("range: must be 3 <= n <= 12\n") - C.exit(1) - end - - for i = 0,max_n do - s[i] = i - end - tk(max_n) - C.printf("%d\nPfannkuchen(%d) = %d\n", checksum, max_n, maxflips) - return checksum -end - -terra main(argc : int, v : &&int8) - if argc < 2 then - C.printf("usage: %s number\n", v[0]) - C.exit(1); - end - - doit(C.atoi(v[1])) - return 0 -end - -local test = require("test") - -doit:compile() -print(test.time(function() - test.eq(doit(10),73196) -end)) - -terralib.saveobj("benchmark_fannkuchredux", { main = main } ) diff --git a/samples/Terra/bf.t b/samples/Terra/bf.t deleted file mode 100644 index 84b99b5a..00000000 --- a/samples/Terra/bf.t +++ /dev/null @@ -1,60 +0,0 @@ - -local C = terralib.includec("stdio.h") - -local function compile(code,N) - local function body(data,ptr) - local stmts = terralib.newlist() - local jumpstack = {} - for i = 1,#code do - local c = code:sub(i,i) - local stmt - if c == ">" then - stmt = quote ptr = ptr + 1 end - elseif c == "<" then - stmt = quote ptr = ptr - 1 end - elseif c == "+" then - stmt = quote data[ptr] = data[ptr] + 1 end - elseif c == "-" then - stmt = quote data[ptr] = data[ptr] - 1 end - elseif c == "." then - stmt = quote C.putchar(data[ptr]) end - elseif c == "," then - stmt = quote data[ptr] = C.getchar() end - elseif c == "[" then - local target = { before = symbol(), after = symbol() } - table.insert(jumpstack,target) - stmt = quote - ::[target.before]:: - if data[ptr] == 0 then - goto [target.after] - end - end - elseif c == "]" then - local target = table.remove(jumpstack) - assert(target) - stmt = quote - goto [target.before] - :: [target.after] :: - end - else - error("unknown character "..c) - end - stmts:insert(stmt) - end - return stmts - end - return terra() - var data : int[N] - for i = 0, N do - data[i] = 0 - end - var ptr = 0; - [ body(data,ptr) ] - end -end - -local helloworld = "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>." - -local fn = compile(helloworld,256) - -fn() \ No newline at end of file diff --git a/samples/Terra/blankexp.t b/samples/Terra/blankexp.t deleted file mode 100644 index e53242c1..00000000 --- a/samples/Terra/blankexp.t +++ /dev/null @@ -1,7 +0,0 @@ -local a = quote - while false do end -end -terra foo() - return a -end -foo() \ No newline at end of file diff --git a/samples/Terra/blockescape.t b/samples/Terra/blockescape.t deleted file mode 100644 index eb475932..00000000 --- a/samples/Terra/blockescape.t +++ /dev/null @@ -1,23 +0,0 @@ -terra foo() - var c = 3 - escape - local a = 1 - for i = 1,10 do - emit quote c = c + a end - end - end - return c -end - -assert(foo() == 13) - -terra foo2() - return escape emit(1) end -end - -assert(1 == foo2()) - -a = terralib.newlist() -a:insert quote - foo() -end \ No newline at end of file diff --git a/samples/Terra/blocking.t b/samples/Terra/blocking.t deleted file mode 100644 index 8ee19e3e..00000000 --- a/samples/Terra/blocking.t +++ /dev/null @@ -1,57 +0,0 @@ -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 1,I do - r[i] = symmat(name..tostring(i),...) - end - return r -end - -terra min(a : int, b : int) - return terralib.select(a < b, a, b) -end - -function blockedloop(bounds,sizes,bodyfn) - local indexes = symmat("i",#sizes,#bounds) - --local makeloop --bug local function doesn't add to set of live variables... - local function makeloop(s,b) - if s > #sizes then - return bodyfn(unpack(indexes[#sizes])) - elseif b > #bounds then - return makeloop(s + 1, 1) - else - local topbound = bounds[b] - local blocksize = sizes[s] - local begin,bound - if s == 1 then - begin,bound = 0, topbound - else - begin,bound = indexes[s-1][b], sizes[s-1] - end - local step = sizes[s] - return quote - for [indexes[s][b]] = begin,min(begin+bound,topbound),step do - [ makeloop(s,b+1) ] - end - end - end - end - return makeloop(1,1) -end - -IO = terralib.includec("stdio.h") - -terra main() - - var M,N = 30,40; - - [blockedloop({M,N}, {10,1}, function(m,n) - return quote - IO.printf("%d %d\n",m,n) - end - end)] - -end - -main:printpretty() -main() \ No newline at end of file diff --git a/samples/Terra/blocking2-fixed.t b/samples/Terra/blocking2-fixed.t deleted file mode 100644 index 10ff5a6d..00000000 --- a/samples/Terra/blocking2-fixed.t +++ /dev/null @@ -1,68 +0,0 @@ -C = terralib.includec("stdio.h") - -terra min(a: int, b: int) : int - if a < b then return a - else return b end -end -std = terralib.includec("stdlib.h") -function Image(PixelType) - local struct ImageImpl { - data : &PixelType, - N : int - } - terra ImageImpl:init(N: int): {} --returns nothing - self.data = [&PixelType]( - std.malloc(N*N*sizeof(PixelType))) - self.N = N - end - terra ImageImpl:get(x: int, y: int) : PixelType - return self.data[x*self.N + y] - end - - - terra ImageImpl:set(x: int, y: int, v : PixelType) - self.data[x*self.N + y] = v - end - terra ImageImpl:save(i : rawstring) - for i = 0, 2 do for j = 0, 2 do - C.printf("%d %d %f\n", i,j,self:get(i,j)) - end end - end - terra ImageImpl:load(i : rawstring) self:init(16) - for i = 0, 4 do for j = 0, 4 do - self:set(i,j,(i*4+j)%3) - --C.printf("%f\n",self:get(i,j)) - end end - end - terra ImageImpl:free() end - - --omitted methods for: set, save, load, free - return ImageImpl -end -GreyscaleImage = Image(float) -terra laplace(img: &GreyscaleImage, - out: &GreyscaleImage) : {} - --shrink result, do not calculate boundaries - var newN = img.N - 2 - out:init(newN) - for i = 0,newN do - for j = 0,newN do - var v = img:get(i+0,j+1) + img:get(i+2,j+1) - + img:get(i+1,j+2) + img:get(i+1,j+0) - - 4 * img:get(i+1,j+1) - out:set(i,j,v) - end - end -end -terra runlaplace(input: rawstring, - output: rawstring) : {} - var i: GreyscaleImage, o : GreyscaleImage - i:load(input) - laplace(&i,&o) - o:save(output) - i:free(); o:free() -end - -runlaplace("myinput","myoutput") - terralib.saveobj("runlaplace.o", - {runlaplace = runlaplace}) diff --git a/samples/Terra/blocking2.t b/samples/Terra/blocking2.t deleted file mode 100644 index 2b0b3b71..00000000 --- a/samples/Terra/blocking2.t +++ /dev/null @@ -1,81 +0,0 @@ -terra min(a : int, b : int) - return terralib.select(a < b, a, b) -end -function blockedloop(N,blocksizes,bodyfn) - local function generatelevel(n,ii,jj,bb) - if n > #blocksizes then - return bodyfn(ii,jj) - end - local blocksize = blocksizes[n] - return quote - for i = ii,min(ii+bb,N),blocksize do - for j = jj,min(jj+bb,N),blocksize do - [ generatelevel(n+1,i,j,blocksize) ] - end - end - end - end - return generatelevel(1,0,0,N) -end - -IO = terralib.includec("stdio.h") -stdlib = terralib.includec("stdlib.h") - -terra main() - - var a : int[8][8] - var c = 0 - var N = 8 - [blockedloop(N, {4,2,1}, function(i,j) - return quote - --IO.printf("%d %d\n",i,j) - a[i][j] = c - c = c + 1 - end - end)] - for i = 0,N do - for j = 0,N do - IO.printf("%d\t",a[i][j]) - end - IO.printf("\n") - end -end - -main() - - - -function Image(Spectrum) - local struct ImageImpl { - data : &Spectrum, - N : int - } - terra ImageImpl:init(N : int) - self.data = [&float](stdlib.malloc(N*N*sizeof(Spectrum))) - self.N = N - end - ImageImpl.methods.pixel = macro(function(self,x,y) - return `self.data[x*self.N + y] - end) - return ImageImpl -end - -GreyScaleImage = Image(float) - -terra laplace(input : &GreyScaleImage, output : &GreyScaleImage) - var newN = input.N - 2 --shrink result since we do not calculate boundaries - output:init(newN); - [blockedloop(newN,{32,1},function(i,j) - return quote - output:pixel(i,j) = - input:pixel(i+0,j+1) - + input:pixel(i+2,j+1) - + input:pixel(i+1,j+2) - + input:pixel(i+1,j+0) - - 4 * input:pixel(i+1,j+1) - end - end)] -end - -laplace:compile() -laplace:printpretty() \ No newline at end of file diff --git a/samples/Terra/blocking3.t b/samples/Terra/blocking3.t deleted file mode 100644 index c7b99b98..00000000 --- a/samples/Terra/blocking3.t +++ /dev/null @@ -1,85 +0,0 @@ -C = terralib.includec("stdio.h") - -function blockedloop(N,blocksizes,bodyfn) - local function generatelevel(n,ii,jj,bb) - if n > #blocksizes then - return bodyfn(ii,jj) - end - local blocksize = blocksizes[n] - return quote - for i = ii,min(ii+bb,N),blocksize do - for j = jj,min(jj+bb,N),blocksize do - [ generatelevel(n+1,i,j,blocksize) ] - end - end - end - end - return generatelevel(1,0,0,N) -end - -terra min(a: int, b: int) : int - if a < b then return a - else return b end -end -std = terralib.includec("stdlib.h") -function Image(PixelType) - local struct ImageImpl { - data : &PixelType, - N : int - } - terra ImageImpl:init(N: int): {} --returns nothing - self.data = - [&PixelType](std.malloc(N*N*sizeof(PixelType))) - self.N = N - end - terra ImageImpl:get(x: int, y: int) : PixelType - return self.data[x*self.N + y] - end - - - terra ImageImpl:set(x: int, y: int, v : PixelType) - self.data[x*self.N + y] = v - end - terra ImageImpl:save(i : rawstring) - for i = 0, 8 do for j = 0, 8 do - C.printf("%d %d %f\n", i,j,self:get(i,j)) - end end - end - terra ImageImpl:load(i : rawstring) self:init(16) - for i = 0, 10 do for j = 0, 10 do - self:set(i,j,(i*4+j)%3) - --C.printf("%f\n",self:get(i,j)) - end end - end - terra ImageImpl:free() end - - --omitted methods for: set, save, load, free - return ImageImpl -end -GreyscaleImage = Image(float) -terra laplace(img: &GreyscaleImage, - out: &GreyscaleImage) : {} - --shrink result, do not calculate boundaries - var newN = img.N - 2 - out:init(newN); - [blockedloop(newN,{4,2,1}, function(i,j) - return quote - var v = img:get(i+0,j+1) + img:get(i+2,j+1) - + img:get(i+1,j+2) + img:get(i+1,j+0) - - 4 * img:get(i+1,j+1) - out:set(i,j,v) - end - end)] -end -terra runlaplace(input: rawstring, - output: rawstring) : {} - var i: GreyscaleImage, o : GreyscaleImage - i:load(input) - laplace(&i,&o) - o:save(output) - i:free(); o:free() -end - -runlaplace("myinput","myoutput") - terralib.saveobj("runlaplace.o", - {runlaplace = runlaplace}) diff --git a/samples/Terra/bounce.t b/samples/Terra/bounce.t deleted file mode 100644 index 85e7400c..00000000 --- a/samples/Terra/bounce.t +++ /dev/null @@ -1,23 +0,0 @@ -local io = terralib.includec("stdio.h") - -struct Count { value : int } -function luafn(a) - print("lua:",a.value) - a.value = a.value + 1 - terrafn(a) -end -terra terrafn(a : &Count) - io.printf("terra: %d\n",a.value) - if a.value < 100 then - luafn(a) - end - return a.value -end - -terra begin() - var c = Count {0} - return terrafn(&c) -end - -local test = require("test") -test.eq(begin(),100) \ No newline at end of file diff --git a/samples/Terra/bug.t b/samples/Terra/bug.t deleted file mode 100644 index 5d2f860d..00000000 --- a/samples/Terra/bug.t +++ /dev/null @@ -1,20 +0,0 @@ -local f = assert(io.popen("uname", 'r')) -local s = assert(f:read('*a')) -f:close() - -if s~="Darwin\n" then - print("Warning, not running test b/c this isn't a mac") -else - - -local OC = require("lib/objc") -local OCR = terralib.includec("objc/runtime.h") - -terra main() - var nsobject = OC.NSObject - OCR.objc_allocateClassPair([&OCR.objc_class](nsobject.data),nil,0) -end - -main:compile() - -end \ No newline at end of file diff --git a/samples/Terra/bug2.t b/samples/Terra/bug2.t deleted file mode 100644 index 91b77cbd..00000000 --- a/samples/Terra/bug2.t +++ /dev/null @@ -1,20 +0,0 @@ -ffi = require("ffi") -cstdio = terralib.includec("stdio.h") - -local vec4 = &vector(float,4) - -local align = terralib.aligned -terra lol( w : &float, out : &float) - var a = terralib.attrload(vec4(w),{align = 4}) - terralib.attrstore(vec4(out), a, {align = 4}) -end - -dat = ffi.new("float[?]",32) -for i=0,31 do dat[i]=i end -datO = ffi.new("float[?]",32) - -lol:compile() -lol:disas() - -lol(dat, datO) - diff --git a/samples/Terra/bug3.t b/samples/Terra/bug3.t deleted file mode 100644 index e58be1df..00000000 --- a/samples/Terra/bug3.t +++ /dev/null @@ -1,15 +0,0 @@ - - -local S = terralib.types.newstruct("mystruct") - -struct A { - v : int -} - -S.entries:insert( { type = A, field = "what" } ) -terra foo() - var v : S - return v.what.v -end - -foo:compile() diff --git a/samples/Terra/bug4.t b/samples/Terra/bug4.t deleted file mode 100644 index 2690b028..00000000 --- a/samples/Terra/bug4.t +++ /dev/null @@ -1,14 +0,0 @@ -c = terralib.includecstring [[ - #include - #include -]] -struct exception { slug : int8[60]; code : int; msg : int8[960]; } -EXC_INFO = terralib.new(exception) -terra bar() c.memcpy(EXC_INFO.slug + 0, 'foobar', 7); c.printf('%s\n', EXC_INFO.slug + 0); end -bar() - -terra zoo() EXC_INFO.slug[0] = 65; EXC_INFO.slug[1] = 0; c.printf('%s\n', EXC_INFO.slug + 0); end -zoo() - -terra zoo2() EXC_INFO.slug[0] = 65; EXC_INFO.slug[1] = 0; return EXC_INFO.slug[0] end -assert(zoo2() == 65) \ No newline at end of file diff --git a/samples/Terra/calc.t b/samples/Terra/calc.t deleted file mode 100644 index 2167f2b8..00000000 --- a/samples/Terra/calc.t +++ /dev/null @@ -1,33 +0,0 @@ -function makecalcfn(inst) - local stk = {} - for i,v in ipairs(inst) do - if type(v) == "number" then - table.insert(stk,`v) - else - local b = table.remove(stk) - local a = table.remove(stk) - - if v == "+" then - table.insert(stk,`a + b) - elseif v == "-" then - table.insert(stk,`a - b) - elseif v == "*" then - table.insert(stk,`a * b) - elseif v == "/" then - table.insert(stk,`a / b) - end - end - end - - local result = table.remove(stk) - - local terra wrapper() - return result - end - - return wrapper -end - -local calcfn = makecalcfn({5,4,"*",5,"-",3,"+"}) -local test = require("test") -test.eq(calcfn(),18) diff --git a/samples/Terra/call.t b/samples/Terra/call.t deleted file mode 100644 index 4bf49c62..00000000 --- a/samples/Terra/call.t +++ /dev/null @@ -1,53 +0,0 @@ - -terra bar(a : int, b : int) : int - return a + b -end -terra foo(a : int,b : int) : int - return bar(a,b) + 1 -end - -terra baz(a : int, b : int) : int - var f,c,d = 4,baz2(a,b) - return f + c + d -end and -terra baz2(a : int, b : int) : {int, int} - return a + 1, b + 2 -end - -terra two(a : int, b : int) : int - return a + b -end -terra baz3() : int - var a,b = baz2(1,2) - return two(a,b) -end -terra baz4() : int - return two(5,(baz2(1,2))._0) -end - -terra baz5() - var a,b = baz2(0,0) - return 1,2,a,b -end - -terra baz6() - var a,b,c,d = baz5() - var e = (baz5()._0) - return a + b + c + d + e -end - -terra baz7(a : int) - if a < 3 then - return 1,(baz5())._0 - else - return 100,2 - end -end -local test = require("test") - -test.eq(foo(2,3),6) -test.eq(baz(1,2),10) -test.eq(baz3(),6) -test.eq(baz4(),7) -test.eq(baz6(),7) -test.meq({100,2},baz7(10)) \ No newline at end of file diff --git a/samples/Terra/callbackcache.t b/samples/Terra/callbackcache.t deleted file mode 100644 index 06450cf3..00000000 --- a/samples/Terra/callbackcache.t +++ /dev/null @@ -1,9 +0,0 @@ - - -for i = 1,10 do - local terra doprint() - print(1,2) - print(3) - end - doprint() -end \ No newline at end of file diff --git a/samples/Terra/canon.t b/samples/Terra/canon.t deleted file mode 100644 index c07ffaae..00000000 --- a/samples/Terra/canon.t +++ /dev/null @@ -1,45 +0,0 @@ - -struct B { - a : A -} and -struct A { - b : &B -} - - - - -struct C { - i : int -} -local U = struct { c : C } -local UP = &U - - -local FP = UP -> int -local FP2 = UP -> int - -local FI = int -> int -local FI2 = int -> int -terra anon() - var b : B - b.a.b = &b - return 4 -end - -terra anon2() - var u = U { C {3} } - - var fp : FP, fi : FI - var fi2 : FI2 = fi - var fp2 : FP2 = fp - var up : UP = &u - return up.c.i -end - - - -test = require("test") - -test.eq(anon(),4) -test.eq(anon2(),3) \ No newline at end of file diff --git a/samples/Terra/canon2.t b/samples/Terra/canon2.t deleted file mode 100644 index a73b8577..00000000 --- a/samples/Terra/canon2.t +++ /dev/null @@ -1,41 +0,0 @@ -local C = terralib.includecstring [[ - typedef union { - float v[2]; - struct { - float x; - float y; - }; - } float2; - static float2 a; - void doit() { - a.x = 4; - a.y = 5; - } - float2* what() { return &a; } -]] - -C.float2:printpretty() - -local anonstructgetter = macro(function(name,self) - for i,e in pairs(self:gettype():getfields()) do - if e.key:match("_%d+") and e.type:getfield(name) then - return `self.[e.key].[name] - end - end - error("no field "..name.." in struct of type "..tostring(T)) -end) - -C.float2.metamethods.__entrymissing = anonstructgetter - -terra foo(pa : &C.float2) - var a = @C.what() - return a.v[0],a.v[1],a.x,a.y -end - -C.doit() - -local a = foo(C.what()) -assert(4 == a._0) -assert(5 == a._1) -assert(4 == a._2) -assert(5 == a._3) \ No newline at end of file diff --git a/samples/Terra/cast.t b/samples/Terra/cast.t deleted file mode 100644 index 6de7f79d..00000000 --- a/samples/Terra/cast.t +++ /dev/null @@ -1,11 +0,0 @@ -terra bar(a : int) : int - return a + 1 -end -terra foo(a : int) : int - - return a -end - -local test = require("test") -test.eq(foo(2),2) -test.eq(bar(2),3) diff --git a/samples/Terra/cbool.t b/samples/Terra/cbool.t deleted file mode 100644 index cfa7cd4a..00000000 --- a/samples/Terra/cbool.t +++ /dev/null @@ -1,13 +0,0 @@ - - -C = terralib.includecstring [[ - _Bool And(_Bool a, _Bool b) { return a && b; } -]] - - -terra foobar(a : bool, b : bool) - return C.And(a,b) -end - -assert(foobar(false,true) == false) -assert(foobar(true,true) == true) \ No newline at end of file diff --git a/samples/Terra/cconv.t b/samples/Terra/cconv.t deleted file mode 100644 index ba12b5e9..00000000 --- a/samples/Terra/cconv.t +++ /dev/null @@ -1,488 +0,0 @@ - -local test = require("test") - -terra f1(a : int) - return a -end - -terra c1() - return 1 + f1(4),f1(4) -end - -terra f2(a : int, b : float) - return a + b -end - -terra c2() - return f2(3,4) + 1, f2(3,4) -end - - -terra f3() - return 3,4 -end - -terra c3() - var r = f3() - return f3()._0 + 1,unpackstruct(r) -end - -terra f4() : {float,float} - return 3.25,4.25 -end - -terra c4() - var r = f4() - return f4()._0 + 1, unpackstruct(r) -end - - -terra f5(a : int) : {uint8,uint8,uint8,uint8} - return 0,1,a,3 -end - -terra c5() - var r = f5(8) - return f5(8)._0 + 1, unpackstruct(r) -end - -terra f6() : {double, double, int} - return 3.25, 4.25, 3 -end - -terra c6() - var r = f6() - return f6()._0 + 1, unpackstruct(r) -end -test.meq({4.25, 3.25,4.25,3},c6()) - -terra f7(a : int) : {double, double, int} - return 3.25, 4.25, a -end - -terra c7() - var r = f7(4) - return f7(4)._0 + 1, unpackstruct(r) -end -test.meq({4.25,3.25,4.25,4},c7()) - -terra f8() : {double, double} - return 3.25, 4.25 -end - -terra c8() - var r= f8() - return f8()._0 + 1, unpackstruct(r) -end - -test.meq({4.25,3.25,4.25},c8()) - -struct S1 { - a : int; - b : int; -} - -terra f9(a : S1) - return a.a+1,a.b+2 -end - -terra c9() - var a = S1 { 4, 5} - var r = f9(a) - return f9(a)._0 + 1, unpackstruct(r) -end -test.meq({6,5,7},c9()) - -struct S2 { - a : int; - b : double; - c : double; -} - -terra f10(a : S2) - return a.a, a.b, a.c -end - -terra c10() - var s2 = S2 { 4,5,6 } - var r = f10(s2) - return f10(s2)._0 + 1, unpackstruct(r) -end - -test.meq({5,4,5,6},c10()) - -C = terralib.includec("stdio.h") - -terra f11(a : int) - C.printf("f11 %d\n",a) -end - - -terra c11() - f11(7) -end -c11() - -struct S3 { - a : vector(float,2); - b : double; -} - -struct S4 { - b : double; - a : vector(float,2); -} - -struct S5 { - a : vector(uint8,4); - b : int; -} - -terra f12a(a : S3) - return a.a[0] + a.a[1], a.b -end - -terra c12a() - var a = S3 { vector(2.25f, 3.25f), 4 } - var r = f12a(a) - return f12a(a)._0 + 1, unpackstruct(r) -end -test.meq({6.5,5.5,4},c12a()) - -terra f12b(a : S4) - return a.a[0] + a.a[1], a.b -end - -terra c12b() - var a = S4 { 4, vector(2.25f, 3.25f) } - var r = f12b(a) - return f12b(a)._0 + 1, unpackstruct(r) -end -test.meq({6.5,5.5,4},c12b()) - - -terra f12() - var a = S3 { vector(8.f,2.f), 3.0 } - var b = S4 { 3.0, vector(8.f,2.f) } - var c,d = f12a(a) - var e,f = f12b(b) - return c,d,e,f -end - -terra f13a(a : S5) - return a.a[0] + a.a[1] + a.a[2] + a.a[3], a.b -end - -terra f13() - var a = S5 { vectorof(int8, 1,2,3,4), 5 } - return f13a(a) -end - - -struct S6 { - a : float; - aa : float; - b : float -} - -struct S7a { - a : int; - b : int; -} -struct S7 { - a : int; - b : S7a; - c : int; -} - -terra f14(a : S6) - return a.a,a.aa,a.b -end - -terra c14() - var a = S6 { 4,2,3} - var r = f14(a) - return f14(a)._0 + 1, unpackstruct(r) -end -test.meq({5,4,2,3},c14()) - -terra f15(a : S7) - return a.a, a.b.a, a.b.b, a.c -end - -terra c15() - var a = S7 {1, S7a { 2,3 }, 4} - var r = f15(a) - return f15(a)._0 + 1, unpackstruct(r) -end - -test.meq({2,1,2,3,4}, c15()) - -struct S8 { - a : uint8[7]; -} - -terra f16(a : S8) - return a.a[0],a.a[6] -end - -terra c16() - var a = S8 { arrayof(uint8, 1,2,3,4,5,6,7) } - var r = f16(a) - return f16(a)._0 + 1, unpackstruct(r) -end - -test.meq({2,1,7},c16()) - -struct S9 { - a : uint8[9]; -} - -terra f17(a : S9) - return a.a[0],a.a[8] -end - -terra c17() - var a = S9 { arrayof(uint8, 1,2,3,4,5,6,7,8,9) } - var r = f17(a) - return f17(a)._0 + 1, unpackstruct(r) -end - - -test.meq({2,1,9},c17()) - - -struct S10 { - a : double; - b : int64 -} - - -terra f18a(a0 : int, a1 : int, a2 : int, a3 : int, a4: int, a5 : int, a : S10) - return a.a, a.b -end - -terra c18a() - var r = f18a(1,2,3,4,5,6,S10{7,8}) - return f18a(1,2,3,4,5,6,S10{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8},c18a()) - - -terra f18b(a0 : int, a1 : int, a2 : int, a3 : int, a4: int, a : S10) - return a.a, a.b -end - -terra c18b() - var r = f18b(1,2,3,4,5,S10{7,8}) - return f18b(1,2,3,4,5,S10{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8},c18b()) - -terra f18c(a0 : int, a1 : int, a2 : int, a3 : int, a4: int, a : S10) - return a.a, a.b, a0, a1, a2 -end -terra c18c() - var r = f18c(1,2,3,4,5,S10 {7,8}) - return f18c(1,2,3,4,5,S10{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8,1,2,3},c18c()) - -struct S11 { - a : float; - b : int; -} - -terra f18d(a0 : int, a1 : int, a2 : int, a3 : int, a4: int, a5 : int, a : S11) - return a.a, a.b -end -terra c18d() - var r = f18d(1,2,3,4,5,6,S11{7,8}) - return f18d(1,2,3,4,5,6,S11{7,8})._0 + 1, unpackstruct(r) -end -test.meq({8,7,8},c18d()) - - -terra f18e(a0 : int, a1 : int, a2 : int, a3 : int, a4: int, a : S11) - return a.a, a.b -end - -terra c18e() - var r = f18e(1,2,3,4,5,S11{7,8}) - return f18e(1,2,3,4,5,S11{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8},c18e()) - -terra f18f(a0 : int, a1 : int, a2 : int, a3 : int, a4: int, a : S11) - return a.a, a.b, a0, a1, a2 -end - -terra c18f() - var r = f18f(1,2,3,4,5,S11{7,8}) - return f18f(1,2,3,4,5,S11{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8,1,2,3},c18f()) - - -terra f18g(a0 : float, a1 : float, a2 : float, a3 : float, a4: float, a5 : float, a6 : float, a7 : float, a : S10) - return a.a, a.b -end - -terra c18g() - var r = f18g(1,2,3,4,5,6,9,10,S10{7,8}) - return f18g(1,2,3,4,5,6,9,10,S10{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8},c18g()) - -terra f18h(a0 : float, a1 : float, a2 : float, a3 : float, a4: float, a5 : float, a6 : float, a : S10) - return a.a, a.b -end - -terra c18h() - var r = f18h(1,2,3,4,5,6,9,S10{7,8}) - return f18h(1,2,3,4,5,6,9,S10{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8},c18h()) - -terra f18i(a0 : float, a1 : float, a2 : float, a3 : float, a4: float, a5 : float, a6 : float, a : S10) - return a.a, a.b, a0, a1, a2 -end - -terra c18i() - var r = f18i(1,2,3,4,5,6,9,S10{7,8}) - return f18i(1,2,3,4,5,6,9,S10{7,8})._0 + 1, unpackstruct(r) -end - -test.meq({8,7,8,1,2,3},c18i()) - -struct S12 { - a : float; - b : int; -} - -terra f19(a : S12) - return a.a, a.b -end -terra c19() - var a = S12 { 3,5 } - var r = f19(a) - return f19(a)._0 + 1, unpackstruct(r) -end -test.meq({4,3,5},c19()) - - - -terra f20(a : S10, b : int) - return a.a,a.b,b -end -terra c20() - var r = f20(S10{1,2},3) - return f20(S10{1,2},3)._0 + 1, unpackstruct(r) -end -test.meq({2,1,2,3},c20()) - - -terra f21() - return -end -f21() - -terra f22() - return S12 { 3, 4} -end -terra c22() - return f22().a, f22() -end -local s22_0, s22_1 = terralib.unpackstruct(c22()) -test.eq(s22_0,3) -test.eq(s22_1.a,3) -test.eq(s22_1.b,4) - -terra f23() - return S10 { 1, 2} -end - -terra c23() - return f23().a, f23() -end -local s23_0, s23_1 = terralib.unpackstruct(c23()) -test.eq(s23_0,1) -test.eq(s23_1.a,1) -test.eq(s23_1.b,2) - -terra f24() - return S2 { 1,2,3} -end - -terra c24() - return f24().a, f24() -end -local s24_0, s24_1 = terralib.unpackstruct(c24()) -test.eq(s24_0,1) -test.eq(s24_1.a,1) -test.eq(s24_1.b,2) -test.eq(s24_1.c,3) - - -local s22 = f22() -test.eq(s22.a,3) -test.eq(s22.b,4) - -local s23 = f23() -test.eq(s23.a,1) -test.eq(s23.b,2) - - -local s24 = f24() - -test.eq(s24.a,1) -test.eq(s24.b,2) -test.eq(s24.c,3) - - -test.meq({1,2,3},f20({1,2},3)) - - -test.eq(f1(3),3) -test.eq(f2(4,5),9) -test.meq({3,4},f3()) -test.meq({3.25,4.25},f4()) -test.meq({0,1,2,3},f5(2)) -test.meq({3.25,4.25,3},f6()) -test.meq({3.25,4.25,4},f7(4)) -test.meq({3.25,4.25},f8()) -test.meq({3,5},f9({2,3})) -test.meq({1,2.5,3.5},f10({1,2.5,3.5})) -f11(3) -test.meq({10,3,10,3},f12()) -test.meq({10,5},f13()) -test.meq({4,5,6},f14({4,5,6})) -test.meq({1,2,3,4},f15({1,{2,3},4})) -test.meq({1,7},f16({{1,2,3,4,5,6,7}})) -test.meq({1,9},f17({{1,2,3,4,5,6,7,8,9}})) -test.meq({7,8},f18a(1,2,3,4,5,6,{7,8})) -test.meq({7,8},f18b(1,2,3,4,5,{7,8})) -test.meq({7,8,1,2,3},f18c(1,2,3,4,5,{7,8})) - -test.meq({7,8},f18d(1,2,3,4,5,6,{7,8})) -test.meq({7,8},f18e(1,2,3,4,5,{7,8})) -test.meq({7,8,1,2,3},f18f(1,2,3,4,5,{7,8})) - -test.meq({9,10},f18g(1,2,3,4,5,6,7,8,{9,10})) -test.meq({9,10},f18h(1,2,3,4,5,6,7,{9,10})) -test.meq({9,10,1,2,3},f18i(1,2,3,4,5,6,7,{9,10})) - -test.meq({4,5}, f19({4,5})) - -test.meq({5,4},c1()) -test.meq({8,7},c2()) -test.meq({4,3,4},c3()) -test.meq({4.25,3.25,4.25},c4()) -test.meq({1,0,1,8,3},c5()) \ No newline at end of file diff --git a/samples/Terra/cfgbug.t b/samples/Terra/cfgbug.t deleted file mode 100644 index b1f9b31c..00000000 --- a/samples/Terra/cfgbug.t +++ /dev/null @@ -1,14 +0,0 @@ -local struct Type { - field: int -} - -local terra foo(obj: Type) end -foo:setinlined(false) - -local terra bar() - var obj: Type - defer foo(obj) - return -end - -bar() \ No newline at end of file diff --git a/samples/Terra/clanginfo.t b/samples/Terra/clanginfo.t deleted file mode 100644 index b1d27a70..00000000 --- a/samples/Terra/clanginfo.t +++ /dev/null @@ -1 +0,0 @@ -terralib.includec("stdio.h",{"-v"}) diff --git a/samples/Terra/class.t b/samples/Terra/class.t deleted file mode 100644 index e02546d9..00000000 --- a/samples/Terra/class.t +++ /dev/null @@ -1,235 +0,0 @@ - -IO = terralib.includec("stdio.h") -local Class = require("lib/javalike") - -struct A { - a : int -} -terra A:times2() : int - return self.a*2 -end - -struct B { - b : int -} -Class.extends(B,A) - -terra B:combine(a : int) : int - return self.b + self.a + a -end - - -struct C { - c : double -} -Class.extends(C,B) - -terra C:combine(a : int) : int - return self.c + self.a + self.b + a -end -terra C:times2() : double - return self.a * 4 -end - -terra doubleAnA(a : &A) - return a:times2() -end - -terra combineAB(b : &B) - return b:combine(3) -end - -terra returnA(a : A) - return a -end -terra foobar1() - var c = C.alloc() - c.a,c.b,c.c = 1,2,3.5 - return c:times2() -end - -assert(foobar1() == 4) - -terra foobar() - - var a = A.alloc() - a.a = 1 - var b = B.alloc() - b.a,b.b = 1,2 - - var c = C.alloc() - c.a,c.b,c.c = 1,2,3.5 - - var r = doubleAnA(a) + doubleAnA(b) + doubleAnA(c) + combineAB(b) + combineAB(c) - - a:free() - b:free() - c:free() - - return r -end - -assert(23 == foobar()) - -Doubles = Class.interface { times2 = {} -> int } - -Adds = Class.interface { add = int -> int } - -struct D { - data : int -} -Class.implements(D,Doubles) -Class.implements(D,Adds) - - -terra D:times2() : int - return self.data * 2 -end - -terra D:add(a : int) : int - return self.data + a -end - - -terra aDoubles(a : &Doubles) - return a:times2() -end - -terra aAdds(a : &Adds) - return a:add(3) -end - -terra foobar2() - var a : D - a:init() - a.data = 3 - return aDoubles(&a) + aAdds(&a) -end - -assert(12 == foobar2()) - - -local IO = terralib.includec("stdio.h") -struct Animal { - data : int -} -terra Animal:speak() : {} - IO.printf("... %d\n",self.data) -end - -struct Dog { -} -Class.extends(Dog,Animal) -terra Dog:speak() : {} - IO.printf("woof! %d\n",self.data) -end - -struct Cat { -} - -Class.extends(Cat,Animal) - -terra Cat:speak() : {} - IO.printf("meow! %d\n",self.data) -end - -terra dospeak(a : &Animal) - a:speak() -end - -terra barnyard() - var c : Cat - var d : Dog - c:init() - d:init() - c.data,d.data = 0,1 - - dospeak(&c) - dospeak(&d) -end -barnyard() - - -local Add = Class.interface { add = int -> int } - -local Sub = Class.interface { sub = int -> int } - -local struct P { - data : int -} -Class.implements(P,Add) - -local struct C { - data2 : int -} -Class.extends(C,P) -Class.implements(C,Sub) - -terra P:add(b : int) : int - self.data = self.data + b - return self.data -end - -terra C:sub(b : int) : int - return self.data2 - b -end - -terra doadd(a : &Add) - return a:add(1) -end - -terra dopstuff(p : &P) - return p:add(2) + doadd(p) -end - -terra dosubstuff(s : &Sub) - return s:sub(1) -end - -terra dotests() - var p : P - p:init() - var c : C - c:init() - p.data = 1 - c.data = 1 - c.data2 = 2 - return dopstuff(&p) + dopstuff(&c) + dosubstuff(&c) -end - -assert(dotests() == 15) - -terra timeadd(a :&P, N : int) - IO.printf("%p\n",a) - for i = 0, N,10 do - a:add(1) - a:add(1) - a:add(1) - a:add(1) - a:add(1) - a:add(1) - a:add(1) - a:add(1) - a:add(1) - a:add(1) - end - return a -end - -local a = global(C) - -terra doinit() : &P - a:init() - a.data = 0 - return &a -end - -local v = doinit() -timeadd:compile() - -local b = terralib.currenttimeinseconds() ---timeadd(v,100000000) -local e = terralib.currenttimeinseconds() -print(e - b) -print(v.data) - diff --git a/samples/Terra/class2.t b/samples/Terra/class2.t deleted file mode 100644 index 1af0da25..00000000 --- a/samples/Terra/class2.t +++ /dev/null @@ -1,45 +0,0 @@ -local Interface = require("lib/golike") - -local I = Interface.create { - get = {} -> int; - set = int -> {}; -} - -struct A { - data : int -} - -terra A:get() - return self.data -end - -terra A:set(a : int) - self.data = a -end - -struct B { - data : int -} - -terra B:get() - return self.data + 1 -end - -terra B:set(a : int) - self.data = self.data + a -end - - -terra anInterface(a : I) - a:set(3) - return a:get() -end - -terra foo() - var a = A { 0 } - var b = B { 2 } - return anInterface(&a) + anInterface(&b) -end - -local test = require("test") -test.eq(foo(),9) \ No newline at end of file diff --git a/samples/Terra/class3.t b/samples/Terra/class3.t deleted file mode 100644 index 8ecc6963..00000000 --- a/samples/Terra/class3.t +++ /dev/null @@ -1,36 +0,0 @@ - -C = terralib.includec("stdio.h") - -local Class = require("lib/javalike") - - -local Prints = Class.interface { print = {} -> {} } - -struct Leaf { - data : int -} -Class.implements(Leaf,Prints) - -terra Leaf:print() : {} - C.printf("%d\n",self.data) -end - - -struct Node { - next : &Leaf -} -Class.extends(Node,Leaf) - -terra Node:print() : {} - C.printf("%d\n",self.data) - self.next:print() -end - -terra test() - var a,b = Leaf.alloc(), Node.alloc() - a.data,b.data,b.next = 1,2,a - var p : &Prints = b - p:print() -end - -test() \ No newline at end of file diff --git a/samples/Terra/class4.t b/samples/Terra/class4.t deleted file mode 100644 index f369adba..00000000 --- a/samples/Terra/class4.t +++ /dev/null @@ -1,22 +0,0 @@ -J = require("lib/javalike") - -struct Shape { - foo : int -} - -Drawable = J.interface { draw = {} -> {} } - -struct Square { - length : int -} -J.extends(Square,Shape) -J.implements(Square,Drawable) - -terra Square:draw() : {} end - -terra bar() - var a : &Square = Square.alloc() - a:draw() -end - -bar() \ No newline at end of file diff --git a/samples/Terra/class5.t b/samples/Terra/class5.t deleted file mode 100644 index ab021c59..00000000 --- a/samples/Terra/class5.t +++ /dev/null @@ -1,54 +0,0 @@ - -IO = terralib.includec("stdio.h") -local Class = require("lib/javalike") - -struct A { - a : int; - bb : &B -} and struct B { - b : int; - aa : &A -} -Class.extends(B,A) - - -terra A:times2() : int - return self.a*2 -end - -terra B:combine(a : int) : int - return self.b + self.a + a -end - - -struct C { - c : double -} -Class.extends(C,B) - -terra C:combine(a : int) : int - return self.c + self.a + self.b + a -end -terra C:times2() : double - return self.a * 4 -end - -terra doubleAnA(a : &A) - return a:times2() -end - -terra combineAB(b : &B) - return b:combine(3) -end - -terra returnA(a : A) - return a -end -terra foobar1() - var c = C.alloc() - c.a,c.b,c.c = 1,2,3.5 - return c:times2() -end - -assert(foobar1() == 4) - diff --git a/samples/Terra/class6.t b/samples/Terra/class6.t deleted file mode 100644 index 008610db..00000000 --- a/samples/Terra/class6.t +++ /dev/null @@ -1,66 +0,0 @@ - -IO = terralib.includec("stdio.h") -local Class = require("lib/javalikesimple") - -struct A { - a : int -} -terra A:times2() : int - return self.a*2 -end - -struct B { - b : int -} -Class.extends(B,A) - -terra B:combine(a : int) : int - return self.b + self.a + a -end - -struct C { - c : double -} -Class.extends(C,B) - -terra C:combine(a : int) : int - return self.c + self.a + self.b + a -end -terra C:times2() : double - return self.a * 4 -end - -terra doubleAnA(a : &A) - return a:times2() -end - -terra combineAB(b : &B) - return b:combine(3) -end - -terra foobar1() - var c : C - c:init() - c.a,c.b,c.c = 1,2,3.5 - return c:times2() -end - -assert(foobar1() == 4) - -terra foobar() - - var a : A, b : B, c : C - a:init(); b:init(); c:init() - - a.a = 1 - b.a,b.b = 1,2 - c.a,c.b,c.c = 1,2,3.5 - - var r = b:times2() + doubleAnA(&a) + doubleAnA(&b) + doubleAnA(&c) + combineAB(&b) + combineAB(&c) - - return r -end - - -assert(25 == foobar()) - diff --git a/samples/Terra/classifyfloatstructs.t b/samples/Terra/classifyfloatstructs.t deleted file mode 100644 index e9c4d66b..00000000 --- a/samples/Terra/classifyfloatstructs.t +++ /dev/null @@ -1,137 +0,0 @@ --- reading and returning by reference produces far more compact assembly --- in terra than reading and returning by value, even when a by-value function --- is embedded in a by-reference wrapper. Also, optimization behavior varies --- wildly. Here's a demonstration: - -local float4 = tuple(float,float,float,float) - --- first, comparing assembly code size of stand-alone functions which all do --- the same operation, in different styles. This is after aggressive --- optimization by the LLVM backend --------------------------------------------------------------------------------- - --- read by value, return by value --- 26 instructions, 120 bytes -local terra add4_val_val(a : float4, b : float4) : float4 - return { - a._0+b._0, - a._1+b._1, - a._2+b._2, - a._3+b._3 - } -end - --- read by value, return by reference --- 24 instructions, 103 bytes -local terra add4_val_ref(c : &float4, a : float4, b: float4) : {} - c._0 = a._0 + b._0 - c._1 = a._1 + b._1 - c._2 = a._2 + b._2 - c._3 = a._3 + b._3 -end - --- read by reference, return by value --- 14 instructions, 74 bytes -local terra add4_ref_val(a : &float4, b : &float4) : float4 - return { - a._0+b._0, - a._1+b._1, - a._2+b._2, - a._3+b._3 - } -end - --- read by reference, return by reference --- 12 instructions, 57 bytes -local terra add4_ref_ref(c : &float4, a : &float4, b: &float4) : {} - c._0 = a._0 + b._0 - c._1 = a._1 + b._1 - c._2 = a._2 + b._2 - c._3 = a._3 + b._3 -end - --- read by reference, return by reference, BUT use temporary variables --- 4 instructions, 12 bytes (!!!) --- what happens here is that the tempvars are understood and treated --- as a single SIMD register, and so only one addition is executed. --- this is already reflected in the bytecode passed to LLVM, so I suppose --- terra does this optimization. -local terra add4_ref_ref_tempvar(c : &float4, a : &float4, b: &float4) : {} - var x = a._0 + b._0 - var y = a._1 + b._1 - var z = a._2 + b._2 - var w = a._3 + b._3 - c._0 = x - c._1 = y - c._2 = z - c._3 = w -end - --- turn on always-inline for later -add4_val_val:setinlined(true) -add4_val_ref:setinlined(true) -add4_ref_val:setinlined(true) -add4_ref_ref:setinlined(true) - --- uncomment to look at individual LLVM bytecode & disassembly -add4_val_val:disas() --- add4_val_ref:disas() --- add4_ref_val:disas() --- add4_ref_ref:disas() --- add4_ref_ref_tempvar:disas() - - -if terralib.lookupsymbol and require("ffi").os ~= "Windows" then - terra sizecheck() - var si : terralib.SymbolInfo - terralib.lookupsymbol(add4_val_val,&si) - return si.size - end - assert(sizecheck() < 16) -end --------------------------------------------------------------------------------- - --- up to this point, one could argue that functions are always inlined into --- other functions, and that the instructions dissolve in the greater scheme --- of things. - --- if that is true, let's attempt to convert one style into another and see --- if the optimizations catch up. - --- read by value, return by value -> read by reference, return by reference --- the clunky solution to the slim interface --- 38 instructions (!), 193 bytes (!!), so it gets *worse* -local terra add4_val_val_to_ref_ref(c : &float4, a : &float4, b: &float4) : {} - @c = add4_val_val(@a, @b) -end - --- read by reference, return by reference -> read by value, return by value --- the slim solution to the clunky interface --- 13 instructions, 61 bytes with tempvar -- wow, that's better than --- the original function with the actual code in it! -local terra add4_ref_ref_to_val_val(a : float4, b : float4) : float4 - var c : float4 - add4_ref_ref_tempvar(&c, &a, &b) - return c -end - --- so what happens if we do a conversion back to the by-reference interface? --- 41 instructions, 194 bytes -local terra add4_ref_ref_to_val_val_to_ref_ref(c : &float4, a : &float4, b: &float4) : {} - @c = add4_ref_ref_to_val_val(@a, @b) -end - --- and nest it once more, back to the by-value interface --- 47 instructions, 208 bytes --- so once we pass structs by-value, we'll never recover. -local terra add4_ref_ref_to_val_val_to_ref_ref_to_val_val(a : float4, b : float4) : float4 - var c : float4 - add4_ref_ref_to_val_val_to_ref_ref(&c, &a, &b) - return c -end - --- uncomment to look at individual disassembly --- add4_val_val_to_ref_ref:disas() --- add4_ref_ref_to_val_val:disas() --- add4_ref_ref_to_val_val_to_ref_ref:disas() --- add4_ref_ref_to_val_val_to_ref_ref_to_val_val:disas() \ No newline at end of file diff --git a/samples/Terra/clean.t b/samples/Terra/clean.t deleted file mode 100644 index 078a3963..00000000 --- a/samples/Terra/clean.t +++ /dev/null @@ -1,17 +0,0 @@ -local c = terralib.includec("stdio.h") - -iamclean = macro(function(arg) - return quote - var a = 3 - return a,arg - end -end) - -terra doit() - var a = 4 - iamclean(a) -end - -local a = doit() -local test = require("test") -test.meq({3,4}, a) \ No newline at end of file diff --git a/samples/Terra/cnames.t b/samples/Terra/cnames.t deleted file mode 100644 index 5a487ce2..00000000 --- a/samples/Terra/cnames.t +++ /dev/null @@ -1,25 +0,0 @@ -struct Foo { - c : float; -} -Foo.displayname = "struct.Foo" -terra useFoo() - var a : Foo - a.c = 4.5 - return a.c -end -assert(4.5 == useFoo()) - -C = terralib.includecstring [[ -typedef struct { int a; int b; } Foo; -]] - -terra stuff() - var a : Foo - var b : C.Foo - b.a = 1 - b.b = 2 - a.c = 4.5 - return b.a + b.b + a.c -end - -assert(7.5 == stuff()) diff --git a/samples/Terra/cnamespace.t b/samples/Terra/cnamespace.t deleted file mode 100644 index dc3c6cc2..00000000 --- a/samples/Terra/cnamespace.t +++ /dev/null @@ -1,24 +0,0 @@ -G,T = terralib.includecstring [[ - typedef struct { - double c; - } A; - struct A { - int b; - }; -]] - -G2,T2 = terralib.includecstring [[ - struct A; - typedef struct C A; -]] - -assert(T2.A == T.A) -assert(G2.A ~= T2.A and G2.A ~= G.A) -terra foo() - var a : G.A - var b : T.A - a.c = 4.5 - b.b = 4.5 - return a.c + b.b -end -assert(8.5 == foo()) \ No newline at end of file diff --git a/samples/Terra/cnamespaces.t b/samples/Terra/cnamespaces.t deleted file mode 100644 index 54ad3cd0..00000000 --- a/samples/Terra/cnamespaces.t +++ /dev/null @@ -1,32 +0,0 @@ -C,T = terralib.includecstring [[ - - struct Foo { - int a; - }; - typedef int Foo; - typedef struct Foo * Bar; - typedef Foo * Bar2; - Bar bar(struct Foo * a, Bar2 b) { return (Bar)0; } -]] - -terra what() - var f = T.Foo { 3 } - var a : C.Bar = &f - return a.a -end - -assert(3 == what()) - -C,T = terralib.includecstring [[ - typedef struct { int a; } Foo; - typedef Foo * FooPtr; - int returna(FooPtr a) { return a->a; } -]] - -terra what2() - var a : C.Foo = C.Foo { 3 } - var ap : C.FooPtr = &a - return C.returna(ap) -end - -assert(3 == what2()) diff --git a/samples/Terra/compilecallback.t b/samples/Terra/compilecallback.t deleted file mode 100644 index 147fdb0e..00000000 --- a/samples/Terra/compilecallback.t +++ /dev/null @@ -1,16 +0,0 @@ - -local a = 0 -local foo = macro(function(arg) - bar:gettype(function() - a = bar() - end) - a = 1 - return 3 -end) - -terra bar() - return foo() -end - -assert(bar() == 3) -assert(a == 3) \ No newline at end of file diff --git a/samples/Terra/completec.t b/samples/Terra/completec.t deleted file mode 100644 index 0b16091e..00000000 --- a/samples/Terra/completec.t +++ /dev/null @@ -1,13 +0,0 @@ -C = terralib.includecstring [[ - struct A { - int a; - }; - static struct A foo; - struct A * getfoo() { - foo.a = 4; - return &foo; - } -]] - -assert(C.getfoo().a == 4) - diff --git a/samples/Terra/conflict.t b/samples/Terra/conflict.t deleted file mode 100644 index ac871735..00000000 --- a/samples/Terra/conflict.t +++ /dev/null @@ -1,12 +0,0 @@ - -terra foo() -end - -foo:compile() -terralib.dumpmodule() - -terralib.includecstring [[ - int foo() { - return 4; - } -]] \ No newline at end of file diff --git a/samples/Terra/constant.t b/samples/Terra/constant.t deleted file mode 100644 index 6f44ee87..00000000 --- a/samples/Terra/constant.t +++ /dev/null @@ -1,35 +0,0 @@ - - -local foo = terralib.constant(terralib.new(int[4],{1,2,3,4})) - -struct A { - a : int; - b : float -} - -local mystr = terralib.new(A,{3,4.5}) -local const = constant(mystr) - - -terra bar() - return foo[3] + mystr.a -end - -terra bar2() - return foo[1] + mystr.b -end - -function wrapper(a) - return a + 1 -end - -local p1 = terralib.constant(int -> int, wrapper) - -terra doit() - return p1(3) -end - -local test = require("test") -test.eq(bar(),7) -test.eq(bar2(),6.5) -test.eq(doit(),4) diff --git a/samples/Terra/constant2.t b/samples/Terra/constant2.t deleted file mode 100644 index bc18b2ca..00000000 --- a/samples/Terra/constant2.t +++ /dev/null @@ -1,21 +0,0 @@ - - -local a = terralib.new(int,3) -local b = terralib.new(int8,4) -local c = terralib.new(int64,5) -local d = terralib.new(float,3.25) -local e = terralib.new(double,4.25) - -f = global(4) -terra foo() - return &f -end - -local pf = foo() - -terra bar() - return a + b + c + d + e + @pf -end - -local test = require("test") -test.eq(bar(),23.5) \ No newline at end of file diff --git a/samples/Terra/constructor.t b/samples/Terra/constructor.t deleted file mode 100644 index 87161fe9..00000000 --- a/samples/Terra/constructor.t +++ /dev/null @@ -1,12 +0,0 @@ - -local b = 1 -local dd = "d" -local c = symbol() - -terra foo() - var a = { _0 = [b], [c] = 2, [dd] = 3, r = 4} - return a._0 + a.[c] + a.d + a.r -end - -local test = require("test") -test.eq(foo(),10) \ No newline at end of file diff --git a/samples/Terra/coverage.t b/samples/Terra/coverage.t deleted file mode 100644 index e865d664..00000000 --- a/samples/Terra/coverage.t +++ /dev/null @@ -1,47 +0,0 @@ -function failit(match,fn) - local success,msg = pcall(fn) - if success then - error("failed to fail.",2) - elseif not string.match(msg,match) then - error("failed wrong: "..msg,2) - end -end -local test = require("test") -local erd = "Errors reported during" - -local terra f1() - return test -end - -failit(erd,function() -f1:compile() -end) -failit("referencing a function which failed to compile",function() -f1:compile() -end) -failit(erd,function() - local terra foo() - f1() - end - foo() -end) - - -local struct A { - a : int -} - -A.metamethods.__getentries = function(self) - error("I AM BAD") -end - -failit(erd,function() - A:complete() -end) - -failit(erd,function() - local terra foo() - var a : A - end - foo() -end) diff --git a/samples/Terra/coverage2.t b/samples/Terra/coverage2.t deleted file mode 100644 index b74377f7..00000000 --- a/samples/Terra/coverage2.t +++ /dev/null @@ -1,209 +0,0 @@ -function failit(match,fn) - local success,msg = pcall(fn) - if success then - error("failed to fail.",2) - elseif not string.match(msg,match) then - error("failed wrong: "..msg,2) - end -end -local test = require("test") -local erd = "Errors reported during" - -failit(erd,function() -local aglobal = 5 -local terra foo() - return [ (function() aglobal = 4; return 3 end)() ] -end -foo() -end) - -A = terralib.types.newstruct() -A.entries:insert{ field = "a", type = int[2] } - -A.metamethods.__getentries = function() error("NOPE") end - -failit(erd,function() - A:complete() -end) -local terra foo() - var a : int[2] - return 3 -end -foo:compile() -local a = 0 -foo:gettype(function() - a = a + 1 -end) -assert(a == 1) - -local terra errored -failit(erd,function() - terra errored() - return A - end - errored:compile() -end) -failit("referencing a function which failed to compile",function() - errored() -end) - -local terra ol(a : int) return a end -terra ol(a : int, b : int) return a + b end - -assert(ol(3) == 3) -assert(ol(3,4) == 7) - -failit("bad argument #1",function() - ol("a") -end) - -ol:printstats() -NSE = terralib.types.newstruct() - -failit(erd,function() - NSE.entries:insert { field = "a", type = "b" } - NSE:complete() -end) - -SICS = terralib.types.newstruct() -SICS.entries:insert { field = symbol(), type = int } -a = 1 -SICS.metamethods.__staticinitialize = function() a = a + 1 end -print(terralib.new(SICS,{3})) - -NSF = terralib.types.newstruct() -NSF.entries:insert { type = int , field = 3 } - -failit(erd,function() - NSF:complete() -end) -SICS:complete() -assert(a == 2) -struct SF { - a : SF2 -} and struct SF2 { - a : int -} -SF2.metamethods.__getentries = function(self) SF:complete() end -failit(erd,function() -SF:complete() -end) -failit("Attempting to get a property of a type that previously resulted in an error.",function() -SF:complete() -end) - -failit(erd,function() - struct SF { b : int } -end) - - -struct C { - a : int -} - -C.metamethods.__cast = function() return error("CAST ERROR") end - -local terra casttest() - return int(C { 3 }) -end -failit(erd,function() -casttest() -end) - -local terra shiftcheck() - var r = 1 << vector(1,2,3,4) - var r2 = vector(1,2,3,4) << 1 - return r[0],r[1],r[2],r[3],r2[0],r2[1],r2[2],r2[3] -end - -test.meq({2,4,8,16,2,4,6,8},shiftcheck()) - -failit(erd,function() - local terra foo() - return terralib.select(3,4,5) - end - foo() -end) -failit(erd,function() - local terra foo() - return (4):foo() - end - foo() -end) -failit(erd,function() - local terra foo() - return (C {3}):foo() - end - foo() -end) -failit(erd,function() - local a = { a = 4} - local terra foo() - return a() - end - foo() -end) -local saveit -local foom = macro(function(arg) saveit = arg; arg:astype(); end) -failit(erd,function() - local terra foo() - return foom(4) - end - foo() -end) - -failit(erd,function() - local terra foo() - return saveit - end - foo() -end) -failit(erd,function() - local struct A { - a : 3 - } -end) - -failit(erd,function() - local terra foo - local bar = macro(function() foo:compile() end) - terra foo() - return bar() - end - foo() -end) - -struct ATF { - a : int -} - -ATF.metamethods.__getentries = function(self) - local terra foo() - var a : ATF - return a.a - end - foo:compile() -end - -failit(erd,function() - ATF:complete() -end) - -struct FA { - a : &FA2 -} and struct FA2 { - a : int -} - -FA.metamethods.__staticinitialize = function() a = a + 1 end - -FA2.metamethods.__staticinitialize = function(self) - FA:complete() -end - -FA:complete() - -assert(a == 3) ---[[ -freezing asynchronus needs to be called -]] \ No newline at end of file diff --git a/samples/Terra/coverage3.t b/samples/Terra/coverage3.t deleted file mode 100644 index 495d6251..00000000 --- a/samples/Terra/coverage3.t +++ /dev/null @@ -1,107 +0,0 @@ -function failit(match,fn) - local success,msg = pcall(fn) - if success then - error("failed to fail.",2) - elseif not string.match(msg,match) then - error("failed wrong: "..msg,2) - end -end -local test = require("test") -local erd = "Errors reported during" - -terra foo() -end -foo:compile() -failit("inlining",function() foo:setinlined(false) end) - -terra bar -failit("attempting to call",function() -bar:compile() end) - -failit("expected a name",function() - terralib.intrinsic("far","far") -end) - -print((&int)[4]) - -struct A { - a : int[4]; - b : ∫ - union { c : int; d : int}; - e : int -> int; -} -A:printpretty() - -terra rv() return vector(1,2,3) end - -terra varg(a : vector(int,3)) - - return a[0] + a[1] + a[2] -end - -assert (6 == varg(rv())) - -local something = nil -failit(erd,function() -local terra a([something]) -end -end) - -failit(erd,function() -local terra what() - var a = A { ee = 4 } -end -what:compile() -end) - -A.metamethods.__getmethod = function(self,methodname) - return 1 -end - -failit(erd,function() -local terra what() - var a : A - A.something() -end -what:compile() -end) - -C = terralib.includec("stdio.h") - ---TODO: __sputc isn't consistent across architectures, so this is a bad test ---failit("cannot import",function() ---local a = C.__sputc ---end) - -failit("not found",function() -local a = C.nothing -end) - -terra up() return unpackstruct(3) end -assert(3 == up()) - -failit(erd,function() -local terra aloads(a : &int) - return terralib.attrload(a),terralib.attrload(nil,{3}),terralib.attrstore(a,nil) -end -aloads:compile() -end) - -terra f() end -terra f(a:int) end -failit("overloaded", function() -terralib.saveobj("err.o", { f = f}) -end) - -terra nop() end -terra nilcall(a : tuple(), b : int) - return b,a -end -terra nilstuff() - var a = nop() - var c,b = nilcall(a,4) - return c -end -assert(4 == nilstuff()) - -nilcall:disas() \ No newline at end of file diff --git a/samples/Terra/crash1.t b/samples/Terra/crash1.t deleted file mode 100644 index 91732c22..00000000 --- a/samples/Terra/crash1.t +++ /dev/null @@ -1 +0,0 @@ -a = &int \ No newline at end of file diff --git a/samples/Terra/crash2.t b/samples/Terra/crash2.t deleted file mode 100644 index 789ad7ac..00000000 --- a/samples/Terra/crash2.t +++ /dev/null @@ -1 +0,0 @@ -a = global( struct { a : int } ) \ No newline at end of file diff --git a/samples/Terra/cstruct.t b/samples/Terra/cstruct.t deleted file mode 100644 index 6f4f0d9d..00000000 --- a/samples/Terra/cstruct.t +++ /dev/null @@ -1,20 +0,0 @@ -local C = terralib.includecstring [[ - -struct teststruct { - int idata; - float fdata; -}; - -void makeitlive(struct teststruct * s) {} - -]] - - -terra foo() - var a : C.teststruct - a.idata = 3 - a.fdata = 3.5 - return a.idata + a.fdata -end - -assert(foo() == 6.5) \ No newline at end of file diff --git a/samples/Terra/cstruct2.t b/samples/Terra/cstruct2.t deleted file mode 100644 index 8b557c8a..00000000 --- a/samples/Terra/cstruct2.t +++ /dev/null @@ -1,8 +0,0 @@ - - -C = terralib.includecstring [[ - typedef struct { int x; int y; } Point; - Point mkpoint() { Point p; p.x = p.y = 3; return p; } -]] - -assert(C.mkpoint().x == 3) \ No newline at end of file diff --git a/samples/Terra/cudaagg.t b/samples/Terra/cudaagg.t deleted file mode 100644 index 12fcf4ed..00000000 --- a/samples/Terra/cudaagg.t +++ /dev/null @@ -1,56 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) -local ntid = cudalib.nvvm_read_ptx_sreg_ntid_x -- terralib.intrinsic("llvm.nvvm.read.ptx.sreg.ntid.x",{} -> int) - - -struct OneFloat { - a : int; -} - -fn = terra(result : &float, bar : int[5]) - result[tid()] = bar[0] + bar[1] + bar[2] + bar[3] + bar[4] -end -fn:setinlined(false) - ---our very simple cuda kernel ---more work needs to be done to expose the right CUDA intrinsics ---to do more complicated things -foo = terra(result : &float) - fn(result, array(tid(),tid()+1,tid()+2,tid()+3,tid()+4) ) -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - -local C = terralib.includecstring [[ -#include "cuda_runtime.h" -#include -#include -]] -local R = terralib.cudacompile({ bar = foo }) - -terra doit(N : int) - var data : &float - C.cudaMalloc([&&opaque](&data),sizeof(float)*N) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.bar(&launch,data) - var results : &float = [&float](C.malloc(sizeof(float)*N)) - C.cudaMemcpy(results,data,sizeof(float)*N,2) - var result = 0.f - for i = 0,N do - result = result + results[i] - end - return result -end - -local test = require("test") -local N = 16 - -function s(n) return (n - 1) * n / 2 end -function ex(i) return s(N+i) - s(i) end -local expected = ex(0) + ex(1) + ex(2) + ex(3) + ex(4) -test.eq(doit(N),expected) - diff --git a/samples/Terra/cudaaggregate.t b/samples/Terra/cudaaggregate.t deleted file mode 100644 index 9d6070d7..00000000 --- a/samples/Terra/cudaaggregate.t +++ /dev/null @@ -1,45 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) -local ntid = cudalib.nvvm_read_ptx_sreg_ntid_x -- terralib.intrinsic("llvm.nvvm.read.ptx.sreg.ntid.x",{} -> int) - -struct A { - a : int - b : int - c : int[2] -} -terra foo(result : &float,a : A, c : int, d : int[2]) - var t = tid() - result[t] = t + a.a + a.b + c + a.c[0] + a.c[1] + d[0] + d[1] -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - -local C = terralib.includecstring [[ -#include "cuda_runtime.h" -#include -#include -]] -local R = terralib.cudacompile({ bar = foo }) - -terra doit(N : int) - var data : &float - C.cudaMalloc([&&opaque](&data),sizeof(float)*N) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.bar(&launch,data, A { 1,2, array(3,4) },5,array(6,7)) - var results : &float = [&float](C.malloc(sizeof(float)*N)) - C.cudaMemcpy(results,data,sizeof(float)*N,2) - var result = 0.f - for i = 0,N do - result = result + results[i] - end - return result -end - -local test = require("test") -local N = 16 -local expected = (N - 1)*N/2 + N*(1 + 2 + 3 + 4 + 5 + 6 + 7) -test.eq(doit(N),expected) diff --git a/samples/Terra/cudaatomic.t b/samples/Terra/cudaatomic.t deleted file mode 100644 index ebe3425d..00000000 --- a/samples/Terra/cudaatomic.t +++ /dev/null @@ -1,39 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) - -foo = terra(result : &int) - var t = tid() - terralib.asm(terralib.types.unit,"red.global.max.u32 [$0], $1;","l,r",true,result,t) -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - - -local C = terralib.includecstring [[ -#include "cuda_runtime.h" -#include -#include -]] - -sync = terralib.externfunction("cudaThreadSynchronize", {} -> int) - -local R = terralib.cudacompile({ bar = foo },true) - -terra doit(N : int) - var data = 0 - var location : &int - C.cudaMalloc([&&opaque](&location),sizeof(int)) - C.cudaMemcpy(location,&data,sizeof(int),1) - - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.bar(&launch,location) - var data2 = -1 - C.cudaMemcpy(&data2,location,sizeof(int),2) - return data2 -end - -assert(doit(32) == 31) diff --git a/samples/Terra/cudaconst2.t b/samples/Terra/cudaconst2.t deleted file mode 100644 index 6ca8eead..00000000 --- a/samples/Terra/cudaconst2.t +++ /dev/null @@ -1,14 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local const = cudalib.constantmemory(float, 1) - -local terra kernel(data: &float) -end - -local M = terralib.cudacompile({ - kernel = kernel, - const = const -}) diff --git a/samples/Terra/cudaglobal.t b/samples/Terra/cudaglobal.t deleted file mode 100644 index 53564f4f..00000000 --- a/samples/Terra/cudaglobal.t +++ /dev/null @@ -1,48 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) -local ntid = cudalib.nvvm_read_ptx_sreg_ntid_x -- terralib.intrinsic("llvm.nvvm.read.ptx.sreg.ntid.x",{} -> int) - - -theone = global(0) - -theconst = cudalib.constantmemory(int,1) - -terra foo(result : &float) - result[tid()] = tid() + theone + theconst[0] -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - -local C = terralib.includecstring [[ -#include "cuda_runtime.h" -#include -#include -]] -local R = terralib.cudacompile({ foo = foo, aone = theone, theconst = theconst }) - -terra doit(N : int) - var data : &float - C.cudaMalloc([&&opaque](&data),sizeof(float)*N) - var one = 1 - var two = 2 - C.cudaMemcpy(R.aone,&one,sizeof(int),1) - C.cudaMemcpy(R.theconst,&two,sizeof(int),1) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.foo(&launch,data) - var results : &float = [&float](C.malloc(sizeof(float)*N)) - C.cudaMemcpy(results,data,sizeof(float)*N,2) - var result = 0.f - for i = 0,N do - result = result + results[i] - end - return result -end - -local test = require("test") -local N = 16 -local expected = (N - 1)*N/2 + 3*N -test.eq(doit(N),expected) diff --git a/samples/Terra/cudahello.t b/samples/Terra/cudahello.t deleted file mode 100644 index 96b68462..00000000 --- a/samples/Terra/cudahello.t +++ /dev/null @@ -1,30 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) - -C = terralib.includec("stdio.h") -vprintf = terralib.externfunction("cudart:vprintf", {&int8,&int8} -> int) - -foo = terra(result : &float) - var t = tid() - vprintf("%d\n",[&int8](&t)) -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - - -sync = terralib.externfunction("cudaThreadSynchronize", {} -> int) - -local R = terralib.cudacompile({ bar = foo }) - -terra doit(N : int) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.bar(&launch,nil) - sync() - C.printf("and were done\n") -end - -doit(3) diff --git a/samples/Terra/cudaoffline.t b/samples/Terra/cudaoffline.t deleted file mode 100644 index f750027b..00000000 --- a/samples/Terra/cudaoffline.t +++ /dev/null @@ -1,65 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x -local ntid = cudalib.nvvm_read_ptx_sreg_ntid_x - -theone = global(0) - -theconst = cudalib.constantmemory(int,1) - -terra foo(result : &float) - result[tid()] = tid() + theone + theconst[0] -end - -local C = terralib.includecstring [[ -#include "cuda_runtime.h" -#include -#include -]] - -local R,L = terralib.cudacompile({ foo = foo, aone = theone, theconst = theconst },nil,nil,false) - -terra doit(N : int) - var data : &float - C.cudaMalloc([&&opaque](&data),sizeof(float)*N) - var one = 1 - var two = 2 - C.cudaMemcpy(R.aone,&one,sizeof(int),1) - C.cudaMemcpy(R.theconst,&two,sizeof(int),1) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.foo(&launch,data) - var results : &float = [&float](C.malloc(sizeof(float)*N)) - C.cudaMemcpy(results,data,sizeof(float)*N,2) - var result = 0.f - for i = 0,N do - result = result + results[i] - end - return result -end - - -terra main() : int - if L(nil,nil,nil,0) ~= 0 then - C.printf("WHAT\n") - end - var N = 16 - var expected = (N - 1)*N/2 + 3*N - return terralib.select(doit(N) == expected,0,1) -end - - -local ffi = require 'ffi' -local path = ({ OSX = "/lib", Linux = "/lib64", Windows = "\\lib\\x64" })[ffi.os] -path = terralib.cudahome..path - - -local args = ffi.os == "Windows" and {path.."\\cuda.lib", path.."\\cudart.lib"} - or {"-L"..path, "-Wl,-rpath,"..path, "-lcuda", "-lcudart"} - -local name = ffi.os == "Windows" and ".\\cudaoffline.exe" or "./cudaoffline" -terralib.saveobj(name,{ main = main },args) -assert(os.execute(name) == 0) - diff --git a/samples/Terra/cudaoo.t b/samples/Terra/cudaoo.t deleted file mode 100644 index 65b16688..00000000 --- a/samples/Terra/cudaoo.t +++ /dev/null @@ -1,20 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end -C = terralib.includec("cuda_runtime.h") - -cudalib.linkruntime() - -terra foo() - var stuff : &opaque - C.cudaMalloc(&stuff,sizeof(int)) - return stuff -end - -local a = foo() - -terra blank() end -terralib.cudacompile { blank = blank } - -assert(0 == C.cudaMemset(a,0,4)) diff --git a/samples/Terra/cudaprintf.t b/samples/Terra/cudaprintf.t deleted file mode 100644 index b9ef9b73..00000000 --- a/samples/Terra/cudaprintf.t +++ /dev/null @@ -1,50 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) - -vprintf = terralib.externfunction("cudart:vprintf", {&int8,&int8} -> int) -local function createbuffer(args) - local Buf = terralib.types.newstruct() - return quote - var buf : Buf - escape - for i,e in ipairs(args) do - local typ = e:gettype() - local field = "_"..tonumber(i) - typ = typ == float and double or typ - table.insert(Buf.entries,{field,typ}) - emit quote - buf.[field] = e - end - end - end - in - [&int8](&buf) - end -end -printf = macro(function(fmt,...) - local buf = createbuffer({...}) - return `vprintf(fmt,buf) -end) - -foo = terra(result : &float) - var t = tid() - printf("a = %d, b = %f, c = %d\n",t,1.0 + t,t + 2) -end - -sync = terralib.externfunction("cuStreamSynchronize", {&opaque} -> int) - -annotations = { {"maxntidx",43}, {"minctasm",8}} -- example of annotating cuda kernel with launch bounds -local R = terralib.cudacompile({ bar = { kernel = foo, annotations = annotations }}) - -terra doit(N : int) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.bar(&launch,nil) - sync(nil) -end - -doit(3) - diff --git a/samples/Terra/cudashared.t b/samples/Terra/cudashared.t deleted file mode 100644 index cde12737..00000000 --- a/samples/Terra/cudashared.t +++ /dev/null @@ -1,47 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) - -N = 1024 - -somedata = cudalib.sharedmemory(int,N) - -terra bar(result : &int) - var t = tid() - somedata[t] = t - cudalib.nvvm_barrier0() - result[t] = somedata[N - 1 - t] -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - -local C = terralib.includecstring [[ -#include "cuda_runtime.h" -#include -#include -]] - -local R = terralib.cudacompile({ bar = bar },true) - - -terra doit(N : int) - var data : &int - C.cudaMalloc([&&opaque](&data),sizeof(int)*N) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.bar(&launch,data) - var results : &int = [&int](C.malloc(sizeof(int)*N)) - C.cudaMemcpy(results,data,sizeof(int)*N,2) - var result = 0 - for i = 0,N do - --C.printf("result = %d\n",results[i]) - result = result + results[i] - end - return result -end - -local test = require("test") -local expected = (N - 1)*N/2 -test.eq(doit(N),expected) diff --git a/samples/Terra/cudatest.t b/samples/Terra/cudatest.t deleted file mode 100644 index a15d54fc..00000000 --- a/samples/Terra/cudatest.t +++ /dev/null @@ -1,47 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) -local ntid = cudalib.nvvm_read_ptx_sreg_ntid_x -- terralib.intrinsic("llvm.nvvm.read.ptx.sreg.ntid.x",{} -> int) - -fn = terra(result : &float) - var t = tid() - result[t] = t -end -fn:setinlined(false) ---our very simple cuda kernel ---more work needs to be done to expose the right CUDA intrinsics ---to do more compilicated things -foo = terra(result : &float) - fn(result) -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - -local C = terralib.includecstring [[ -#include "cuda_runtime.h" -#include -#include -]] -local R = terralib.cudacompile({ bar = foo }) - -terra doit(N : int) - var data : &float - C.cudaMalloc([&&opaque](&data),sizeof(float)*N) - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.bar(&launch,data) - var results : &float = [&float](C.malloc(sizeof(float)*N)) - C.cudaMemcpy(results,data,sizeof(float)*N,2) - var result = 0.f - for i = 0,N do - result = result + results[i] - end - return result -end - -local test = require("test") -local N = 16 -local expected = (N - 1)*N/2 -test.eq(doit(N),expected) diff --git a/samples/Terra/cudatex.t b/samples/Terra/cudatex.t deleted file mode 100644 index cebb6079..00000000 --- a/samples/Terra/cudatex.t +++ /dev/null @@ -1,59 +0,0 @@ -if not terralib.cudacompile then - print("CUDA not enabled, not performing test...") - return -end - -local tid = cudalib.nvvm_read_ptx_sreg_tid_x--terralib.intrinsic("llvm.nvvm.read.ptx.sreg.tid.x",{} -> int) - -C = terralib.includecstring [[ -#include -#include -#include -#include -]] - -vprintf = terralib.externfunction("cudart:vprintf", {&int8,&int8} -> int) - -foo = terra(result : C.cudaTextureObject_t) - var t = tid() - var r = terralib.asm([tuple(float,float,float,float)], - "tex.1d.v4.f32.s32 {$0,$1,$2,$3}, [$4, {$5}];", - "=f,=f,=f,=f,l,r",false,result,t) - var rr : double = r._0 - vprintf("%f\n",[&int8](&rr)) -end - -terralib.includepath = terralib.includepath..";/usr/local/cuda/include" - -sync = terralib.externfunction("cudaThreadSynchronize", {} -> int) - -local R = terralib.cudacompile({ foo = foo }) - -terra doit(N : int) - var d_buffer : &double - C.cudaMalloc([&&opaque](&d_buffer),N*sizeof(float)) - - var h_buffer = arrayof(float,0,1,2,3,4,5,6,7,8,9,10) - C.cudaMemcpy(d_buffer,&h_buffer[0],sizeof(float)*N, C.cudaMemcpyHostToDevice) - - var resDesc : C.cudaResourceDesc - C.memset(&resDesc,0,sizeof(C.cudaResourceDesc)) - resDesc.resType = C.cudaResourceTypeLinear; - resDesc.res.linear.devPtr = d_buffer; - resDesc.res.linear.desc.f = C.cudaChannelFormatKindFloat; - resDesc.res.linear.desc.x = 32; -- bits per channel - resDesc.res.linear.sizeInBytes = N*sizeof(float); - var texDesc : C.cudaTextureDesc - C.memset(&texDesc, 0, sizeof(C.cudaTextureDesc)); - texDesc.readMode = C.cudaReadModeElementType; - - var tex : C.cudaTextureObject_t - C.cudaCreateTextureObject(&tex, &resDesc, &texDesc, nil); - - var launch = terralib.CUDAParams { 1,1,1, N,1,1, 0, nil } - R.foo(&launch,tex) - sync() - C.printf("and were done\n") -end - -doit(10) diff --git a/samples/Terra/cunion.t b/samples/Terra/cunion.t deleted file mode 100644 index 7077d4d0..00000000 --- a/samples/Terra/cunion.t +++ /dev/null @@ -1,34 +0,0 @@ -local C = terralib.includecstring [[ - -union testunion { - int idata; - float fdata; -}; - -typedef - union { - int a; - float b; - } S; - -void setUnion(union testunion * u, S * s){ - u->idata = 3; -} -int getUnionInt(union testunion * u){ - return u->idata; -} - -]] - -terra foo() : int - var u : C.testunion - C.setUnion(&u,nil) - var s : C.S - return C.getUnionInt(&u) -end - - -terralib.tree.printraw(C.S) - -local test = require("test") -test.eq(foo(),3) \ No newline at end of file diff --git a/samples/Terra/cunion2.t b/samples/Terra/cunion2.t deleted file mode 100644 index 08a4e3e5..00000000 --- a/samples/Terra/cunion2.t +++ /dev/null @@ -1,35 +0,0 @@ -local C = terralib.includecstring [[ - -union testunion { - int idata; - float fdata; -}; - -void setUnionI(union testunion * u){ - u->idata = 3; -} -void setUnionF(union testunion * u){ - u->fdata = 4.f; -} - -]] - -terra foo() : int - var u : C.testunion - C.setUnionI(&u) - var f = u.idata - C.setUnionF(&u) - var f2 = u.fdata - return f + f2 -end - -terra foo2() - var a : C.testunion - a.fdata = -3.0 - a.idata = a.idata and not (1 << 31) - return a.fdata -end - -local test = require("test") -test.eq(foo(),7) -test.eq(foo2(),3) \ No newline at end of file diff --git a/samples/Terra/customline.t b/samples/Terra/customline.t deleted file mode 100644 index c70ecff6..00000000 --- a/samples/Terra/customline.t +++ /dev/null @@ -1,10 +0,0 @@ -terra foo(c : int, b : int) - terralib.debuginfo("../src/terralib.lua",300) - var a = b + c - terralib.debuginfo("../src/terralib.lua",301) - return a + a -end - -foo(3,4) - ---terralib.dumpmodule() \ No newline at end of file diff --git a/samples/Terra/customtable.t b/samples/Terra/customtable.t deleted file mode 100644 index 18649347..00000000 --- a/samples/Terra/customtable.t +++ /dev/null @@ -1,10 +0,0 @@ - - -struct A { -} - -A.metamethods.__luametatable = { __index = function(self,idx) return 4 end } -A.methods.foo = function() return 5 end -a = terralib.new(A) - -assert(a.foo == 4) \ No newline at end of file diff --git a/samples/Terra/cvar.t b/samples/Terra/cvar.t deleted file mode 100644 index aaa3398f..00000000 --- a/samples/Terra/cvar.t +++ /dev/null @@ -1,9 +0,0 @@ -C = terralib.includecstring [[ - int foo = 4; - const int foo2 = 5; -]] -terra t() - C.foo = C.foo + 1; - return C.foo + C.foo2 -end -assert(t() == 10) \ No newline at end of file diff --git a/samples/Terra/debugcallback.t b/samples/Terra/debugcallback.t deleted file mode 100644 index 2e236650..00000000 --- a/samples/Terra/debugcallback.t +++ /dev/null @@ -1,23 +0,0 @@ - -terralib.settypeerrordebugcallback(function(o) - o:printpretty() -end) - - -local function dosomecomplicatedstuff(a) - return `@a -end - -local s,e = pcall(function() - - local terra what(a : &opaque) - var b = [dosomecomplicatedstuff(a)] - return b - end - what:compile() - -end) - -assert(not s) -print(e) -assert(e:match("Errors reported during")) \ No newline at end of file diff --git a/samples/Terra/declerrors.t b/samples/Terra/declerrors.t deleted file mode 100644 index 58d24477..00000000 --- a/samples/Terra/declerrors.t +++ /dev/null @@ -1,29 +0,0 @@ -function failit(fn,err) - local success,msg = pcall(fn) - if success then - error("failed to fail.",2) - elseif not string.match(msg,err or "Errors reported during") then - error("failed wrong: "..msg,2) - end -end - - -failit(function() -local A = {} -terra A:foo() end -end,"expected a struct") - - -failit(function() -terra A.b() end -end,"failed attempting to index field") - -failit(function() -terra A.b.c() end -end,"failed attempting to index field") - - -failit(function() -local A = 4 -struct A.b {} -end,"failed attempting to index field") \ No newline at end of file diff --git a/samples/Terra/decltwice.t b/samples/Terra/decltwice.t deleted file mode 100644 index b56eab60..00000000 --- a/samples/Terra/decltwice.t +++ /dev/null @@ -1,18 +0,0 @@ - -terra mything - -terra mybar() - return mything(4) -end - -terra mything(a : int) - return a -end - -terra mything - -terra mybar2() - return mything(4) -end - -assert(mybar() == mybar2()) \ No newline at end of file diff --git a/samples/Terra/def1.t b/samples/Terra/def1.t deleted file mode 100755 index 2ce3ba06..00000000 --- a/samples/Terra/def1.t +++ /dev/null @@ -1,16 +0,0 @@ -import "lib/def" - -local c = 3 -local a = 4 -local b = def(a) a + c -local d = b(10) - -def e(a) a + c -local def f(a) a + c - -print(d, e(10), f(10)) - -local test = require("test") -test.eq(d,13) -test.eq(e(10),13) -test.eq(f(10),13) diff --git a/samples/Terra/defaultoperator.t b/samples/Terra/defaultoperator.t deleted file mode 100644 index fe1f6c79..00000000 --- a/samples/Terra/defaultoperator.t +++ /dev/null @@ -1,9 +0,0 @@ - -local a = "+" -local b = "__sub" -local ops = {4,5} -terra foobar() - return operator(b,operator(a,3,operator("+",ops))) -end - -assert(foobar() == -12) diff --git a/samples/Terra/defer.t b/samples/Terra/defer.t deleted file mode 100644 index 4d8c7a84..00000000 --- a/samples/Terra/defer.t +++ /dev/null @@ -1,111 +0,0 @@ -C = terralib.includec("stdio.h") - - -cur = global(int) - -terra d(a : int) - if cur ~= a then - C.printf("found %d while expecting %d\n",a,cur) - error(cur) - end - cur = cur + 1 - --C.printf("d%d\n",a) -end -d:setinlined(false) - -terra side(a : int, b : {}) - d(a) -end - -terra doit() - d(0) - defer side(3,d(1)) - d(2) -end -cur:set(0) -doit() - - -terra doit2() - d(0) - var i = 100 - defer d(203) - repeat - defer d(2*(100-i)+2) - d(2*(100-i)+1) - i = i - 1 - until i == 0 - defer d(202) - do defer d(201) end -end -cur:set(0) -doit2() - -terra doit3() - d(0) - defer d(11) - for i = 0,10 do - defer d(i+1) - end -end - -cur:set(0) -doit3() - -terra doit4() - d(0) - defer d(5) - if true then - defer d(2) - d(1) - end - if false then - else - defer d(3) - end - d(4) -end -cur:set(0) -doit4() - -struct A { -} - -A.methods.stackalloc = macro(function() - return quote - var a : A - defer a:free() - in - &a - end -end) -terra A:free() - d(1) - --C.printf("freeing A (%p)\n",self) -end -terra A:print() - d(0) - --C.printf("printing A (%p)\n",self) -end -terra doit5() - var a = A.stackalloc() - a:print() -end -cur:set(0) -doit5() - -terra doit6(a : int) - defer d(2) - d(0) - if a == 0 then - defer d(1) - return 4 - end - d(1) - return 3 -end -cur:set(0) -doit6(0) - -cur:set(0) -doit6(1) diff --git a/samples/Terra/deferbreak.t b/samples/Terra/deferbreak.t deleted file mode 100644 index eeac802d..00000000 --- a/samples/Terra/deferbreak.t +++ /dev/null @@ -1,35 +0,0 @@ -C = terralib.includec("stdio.h") - -cur = global(int) - -terra d(a : int) - if cur ~= a then - C.printf("found %d while expecting %d\n",a,cur) - error(cur) - end - cur = cur + 1 - C.printf("d%d\n",a) -end -d:setinlined(false) - -terra side(a : int, b : {}) - d(a) -end - -terra doit() - d(0) - for i = 0,10 do - defer d(2*i+2) - if true then - defer d(2*i + 1) - if i == 8 then - break - end - end - end - d(19) -end -cur:set(0) -doit() -doit:printpretty() - diff --git a/samples/Terra/defercond.t b/samples/Terra/defercond.t deleted file mode 100644 index 8de1901c..00000000 --- a/samples/Terra/defercond.t +++ /dev/null @@ -1,82 +0,0 @@ -c = global(int,0) - -terra up() - c = c + 1 -end - -terra foo() - var a = 0 - while([quote do defer up() end in a < 10 end]) do - a = a + 1 - end -end - -foo() -assert(c:get() == 11) - -terra foo2() - var a = 0 - while(a < 10 and [quote do defer up() end in true end]) do - a = a + 1 - end -end - -foo2() -assert(c:get() == 21) - -terra foo3() - var a = 0 - while true do - var r = a < 10 and [quote do defer up() end in true end] - if not r then break end - a = a + 1 - end -end -foo3() -assert(c:get() == 31) - -function failit(match,fn) - local success,msg = pcall(fn) - if success then - error("failed to fail.",2) - elseif not string.match(msg,match) then - error("failed wrong: "..msg,2) - end -end -local df = "defer statements are not allowed in conditional expressions" -failit(df,function() - local terra foo() - if [quote defer up() in true end] then end - end - foo() -end) -failit(df,function() - local terra foo() - while [quote defer up() in true end] do end - end - foo() -end) -failit(df,function() - local terra foo() - repeat until [quote defer up() in true end] do end - end - foo() -end) -failit(df,function() - local terra foo() - var a = true or [quote defer up() in true end] - end - foo() -end) - -failit(df,function() - local terra foo() - var a = [quote defer up() in true end] and true - end - foo() -end) - local terra foo() - var a = [quote defer up() in 1 end] and 2 - end - foo() - assert(c:get() == 32) \ No newline at end of file diff --git a/samples/Terra/defergoto.t b/samples/Terra/defergoto.t deleted file mode 100644 index 5f73670f..00000000 --- a/samples/Terra/defergoto.t +++ /dev/null @@ -1,35 +0,0 @@ -C = terralib.includec("stdio.h") -cur = global(int) - -terra d(a : int) - if cur ~= a then - C.printf("found %d while expecting %d\n",a,cur) - error(cur) - end - cur = cur + 1 - C.printf("d%d\n",a) -end -d:setinlined(false) - -terra foo() - d(0) - defer d(14) - var a = 0 - ::begin:: - defer d(terralib.select(a == 10,13,a + 1)) - if a >= 10 then - defer d(11) - goto theend - end - a = a + 1 - goto begin - ::theend:: - defer d(12) - return a -end - -foo:printpretty() -cur:set(0) - -test = require("test") -test.eq(foo(),10) \ No newline at end of file diff --git a/samples/Terra/dgemm.t b/samples/Terra/dgemm.t deleted file mode 100644 index 4cf577b9..00000000 --- a/samples/Terra/dgemm.t +++ /dev/null @@ -1,143 +0,0 @@ - -local IO = terralib.includec("stdio.h") -local stdlib = terralib.includec("stdlib.h") - -local function isinteger(x) return math.floor(x) == x end - - - -local NB = 48 -terra naivel1matmul(A : &double, B : &double, C : &double, lda : int, ldb : int, ldc : int, alpha : double) - - for m = 0, NB do - for n = 0, NB do - C[m*ldc + n] = alpha * C[m*ldc + n] - for k = 0, NB do - C[m*ldc + n] = C[m*ldc + n] + A[m*lda + k] * B[k*ldb + n] - end - end - end - -end - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end - - -function genl1matmul(NB, NK, RM, RN, V,prefetch) - - assert(isinteger(NB / (RN*V))) - assert(isinteger(NB / RM)) - - local VP = &vector(double,V) - local terra vecload(data : &double, idx : int) - var addr = &data[idx] - return @VP(addr) - end - local terra vecstore(data : &double, idx : int, v : vector(double,V)) - var addr = &data[idx] - @VP(addr) = v - end - - local A,B,C,mm,nn, alpha = symbol("A"),symbol("B"),symbol("C"),symbol("mn"),symbol("nn"),symbol("alpha") - local lda,ldb,ldc = symbol("lda"),symbol("ldb"), symbol("ldc") - local a,b,c = symmat("a",NB/V,RM), symmat("b",NB,RN), symmat("c",RM,RN) - local kk = symbol("kk") - - local loadc,storec = terralib.newlist(),terralib.newlist() - - for m = 0, RM-1 do - for n = 0, RN-1 do - loadc:insert(quote - var [c[m][n]] = alpha * vecload(C,(mm+m)*ldc + nn + n*V) - end) - storec:insert(quote - vecstore(C,(mm+m)*ldc + nn + n*V,[c[m][n]]) - end) - end - end - - local calcc = terralib.newlist() - - for kb = 0, NK/V-1 do - local kbV = kb*V - for m = 0, RM-1 do - calcc:insert(quote - var [a[kb][m]] = vecload(A,(mm+m)*lda + kk + kbV) - end) - end - for v = 0, V-1 do - local k = kbV+v - if not prefetch or (v == 0 and kb == 0) then - for n = 0, RN-1 do - calcc:insert(quote - var [b[k][n]] = vecload(B,(kk + k)*ldb + nn + n*V) - end) - end - end - for m = 0, RM-1 do - for n = 0, RN-1 do - calcc:insert(quote - [c[m][n]] = [c[m][n]] + [a[kb][m]][v] * [b[k][n]] - end) - if prefetch and not (v == V-1 and kb == NK/V-1) and m == RM-1 then --prefetch the next b - calcc:insert(quote - var [b[k+1][n]] = vecload(B,(kk + k + 1)*ldb + nn + n*V) - end) - end - end - end - end - end - - return terra([A] : &double, [B] : &double, [C] : &double, [lda] : int, [ldb] : int, [ldc] : int, [alpha] : double) - for [mm] = 0, NB, RM do - for [nn] = 0, NB,RN*V do - [loadc]; - for [kk] = 0, NB, NK do - [calcc]; - end - [storec]; - end - end - end -end - - - -local NB2 = 8 * NB -local l1matmul = genl1matmul(NB,4, 3, 2, 4) - - - -terra min(a : int, b : int) - return terralib.select(a < b, a, b) -end - -terra my_dgemm(gettime : {} -> double, M : int, N : int, K : int, alpha : double, A : &double, lda : int, B : &double, ldb : int, - beta : double, C : &double, ldc : int) - for mm = 0,M,NB2 do - for nn = 0,N,NB2 do - for kk = 0,K, NB2 do - for m = mm,min(mm+NB2,M),NB do - for n = nn,min(nn+NB2,N),NB do - for k = kk,min(kk+NB2,K),NB do - l1matmul(A + m*lda + k, - B + k*ldb + n, - C + m*ldc + n, - lda,ldb,ldc, terralib.select(k == 0,0,1)) - end - end - end - end - end - end -end - -terralib.saveobj("my_dgemm.o", {my_dgemm = my_dgemm}) \ No newline at end of file diff --git a/samples/Terra/dgemm2.t b/samples/Terra/dgemm2.t deleted file mode 100644 index 55ab3a92..00000000 --- a/samples/Terra/dgemm2.t +++ /dev/null @@ -1,163 +0,0 @@ - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end - - -function genkernel(NB, RM, RN, V,alpha) - - local terra vecload(data : &double, idx : int) - var addr = &data[idx] - return @addr:as(&vector(double,V)) - end - local terra vecstore(data : &double, idx : int, v : vector(double,V)) - var addr = &data[idx] - @addr:as(&vector(double,V)) = v - end - - local A,B,C,mm,nn = symbol("A"),symbol("B"),symbol("C"),symbol("mn"),symbol("nn") - local lda,ldb,ldc = NB,NB,NB - local a,b,c,caddr = symmat("a",RM), symmat("b",RN), symmat("c",RM,RN), symmat("caddr",RM,RN) - local k = symbol("k") - - local loadc,storec = terralib.newlist(),terralib.newlist() - local VT = vector(double,V) - local VP = &VT - for m = 0, RM-1 do - for n = 0, RN-1 do - loadc:insert(quote - var [caddr[m][n]] = C + (mm+m)*ldc + nn + n*V - var [c[m][n]] = alpha * @VP([caddr[m][n]]) - end) - storec:insert(quote - @VP([caddr[m][n]]) = [c[m][n]] - end) - end - end - - local calcc = terralib.newlist() - - for n = 0, RN-1 do - calcc:insert(quote - var [b[n]] = @VP(&B[k*ldb + nn + n*V]) - end) - end - for m = 0, RM-1 do - calcc:insert(quote - var [a[m]] = VT(A[(mm+m)*lda + k]) - end) - end - for m = 0, RM-1 do - for n = 0, RN-1 do - calcc:insert(quote - [c[m][n]] = [c[m][n]] + [a[m]] * [b[n]] - end) - end - end - - - return terra([A] : &double, [B] : &double, [C] : &double) - for [mm] = 0, NB, RM do - for [nn] = 0, NB,RN*V do - [loadc]; - for [k] = 0, NB do - [calcc]; - end - [storec]; - end - end - end -end - -local NB = 48 -local NB2 = 8 * NB - -local V = 4 - -l1dgemm0 = genkernel(NB,2,4,V,0) -l1dgemm1 = genkernel(NB,2,4,V,1) - -terra min(a : int, b : int) - return terralib.select(a < b, a, b) -end - -local stdlib = terralib.includec("stdlib.h") -local IO = terralib.includec("stdio.h") -local VP = &vector(double,V) - -terra my_dgemm(gettime : {} -> double, M : int, N : int, K : int, alpha : double, A : &double, lda : int, B : &double, ldb : int, - beta : double, C : &double, ldc : int) - - var AA = [&double](stdlib.malloc(sizeof(double)*M*K)) - var BB = [&double](stdlib.malloc(sizeof(double)*K*N)) - var CC = [&double](stdlib.malloc(sizeof(double)*M*N)) - - var i = 0 - for mm = 0,M,NB do - for kk = 0,K,NB do - for m = mm,mm+NB do - for k = kk,kk+NB,V do - @VP(&AA[i]) = @VP(&A[m*lda + k]) - i = i + V - end - end - end - end - i = 0 - for kk = 0,K,NB do - for nn = 0,N,NB do - for k = kk,kk+NB do - for n = nn,nn+NB,V do - @VP(&BB[i]) = @VP(&B[k*ldb + n]) - i = i + V - end - end - end - end - - for mm = 0,M,NB2 do - for nn = 0,N,NB2 do - for kk = 0,K, NB2 do - for m = mm,min(mm+NB2,M),NB do - for n = nn,min(nn+NB2,N),NB do - for k = kk,min(kk+NB2,K),NB do - --IO.printf("%d %d starting at %d\n",m,k,m*lda + NB*k) - if k == 0 then - l1dgemm0(AA + (m*lda + NB*k), - BB + (k*ldb + NB*n), - CC + (m*ldc + NB*n)) - else - l1dgemm1(AA + (m*lda + NB*k), - BB + (k*ldb + NB*n), - CC + (m*ldc + NB*n)) - end - end - end - end - end - end - end - - i = 0 - for mm = 0,M,NB do - for nn = 0,N,NB do - for m = mm,mm+NB do - for n = nn,nn+NB,V do - @VP(&C[m*ldc + n]) = @VP(&CC[i]) - i = i + V - end - end - end - end - - stdlib.free(AA) - stdlib.free(BB) - stdlib.free(CC) -end - -terralib.saveobj("my_dgemm.o", { my_dgemm = my_dgemm }) \ No newline at end of file diff --git a/samples/Terra/dgemm3.t b/samples/Terra/dgemm3.t deleted file mode 100644 index 29319e84..00000000 --- a/samples/Terra/dgemm3.t +++ /dev/null @@ -1,213 +0,0 @@ - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end - - -local function isinteger(x) return math.floor(x) == x end - -llvmprefetch = terralib.intrinsic("llvm.prefetch",{&opaque,int,int,int} -> {}) - -local function alignedload(addr) - return `terralib.attrload(addr, { align = 8 }) -end -local function alignedstore(addr,v) - return `terralib.attrstore(addr,v, { align = 8 }) -end -alignedload,alignedstore = macro(alignedload),macro(alignedstore) -function genkernel(NB, RM, RN, V,alpha,boundary) - - local M,N,K, boundaryargs - if boundary then - M,N,K = symbol(int64,"M"),symbol(int64,"N"),symbol(int64,"K") - boundaryargs = terralib.newlist({M,N,K}) - else - boundaryargs = terralib.newlist() - M,N,K = NB,NB,NB - end - - local A,B,C,mm,nn,ld = symbol("A"),symbol("B"),symbol("C"),symbol("mn"),symbol("nn"),symbol("ld") - local lda,ldb,ldc = symbol("lda"),symbol("ldb"),symbol("ldc") - local a,b,c,caddr = symmat("a",RM), symmat("b",RN), symmat("c",RM,RN), symmat("caddr",RM,RN) - local k = symbol("k") - - local loadc,storec = terralib.newlist(),terralib.newlist() - local VT = vector(double,V) - local VP = &VT - for m = 0, RM-1 do - for n = 0, RN-1 do - loadc:insert(quote - var [caddr[m][n]] = C + m*ldc + n*V - var [c[m][n]] = alpha * alignedload(VP([caddr[m][n]])) - end) - storec:insert(quote - alignedstore(VP([caddr[m][n]]),[c[m][n]]) - end) - end - end - - local calcc = terralib.newlist() - - for n = 0, RN-1 do - calcc:insert(quote - var [b[n]] = alignedload(VP(&B[n*V])) - end) - end - for m = 0, RM-1 do - calcc:insert(quote - var [a[m]] = VT(A[m*lda]) - end) - end - for m = 0, RM-1 do - for n = 0, RN-1 do - calcc:insert(quote - [c[m][n]] = [c[m][n]] + [a[m]] * [b[n]] - end) - end - end - - - local result = terra([A] : &double, [B] : &double, [C] : &double, [lda] : int64,[ldb] : int64,[ldc] : int64,[boundaryargs]) - for [mm] = 0, M, RM do - for [nn] = 0, N,RN*V do - [loadc]; - for [k] = 0, K do - llvmprefetch(B + 4*ldb,0,3,1); - [calcc]; - B = B + ldb - A = A + 1 - end - [storec]; - A = A - K - B = B - ldb*K + RN*V - C = C + RN*V - end - C = C + RM * ldb - N - B = B - N - A = A + lda*RM - end - end - return result -end - - -local stdlib = terralib.includec("stdlib.h") -local IO = terralib.includec("stdio.h") - - -function generatedgemm(NB,NBF,RM,RN,V) - - if not isinteger(NB/(RN*V)) then - return false - end - if not isinteger(NB/RM) then - return false - end - - local NB2 = NBF * NB - local l1dgemm0 = genkernel(NB,RM,RN,V,0,false) - local l1dgemm1 = genkernel(NB,RM,RN,V,1,false) - - - local l1dgemm0b = genkernel(NB,1,1,1,0,true) - local l1dgemm1b = genkernel(NB,1,1,1,1,true) - - local terra min(a : int, b : int) - return terralib.select(a < b, a, b) - end - - return terra(gettime : {} -> double, M : int, N : int, K : int, alpha : double, A : &double, lda : int, B : &double, ldb : int, - beta : double, C : &double, ldc : int) - for mm = 0,M,NB2 do - for nn = 0,N,NB2 do - for kk = 0,K, NB2 do - for m = mm,min(mm+NB2,M),NB do - for n = nn,min(nn+NB2,N),NB do - for k = kk,min(kk+NB2,K),NB do - --IO.printf("%d %d starting at %d\n",m,k,m*lda + NB*k) - var MM,NN,KK = min(M-m,NB),min(N-n,NB),min(K-k,NB) - var isboundary = MM < NB or NN < NB or KK < NB - var AA,BB,CC = A + (m*lda + k),B + (k*ldb + n),C + (m*ldc + n) - if k == 0 then - if isboundary then - --IO.printf("b0 %d %d %d\n",MM,NN,KK) - l1dgemm0b(AA,BB,CC,lda,ldb,ldc,MM,NN,KK) - - --IO.printf("be %d %d %d\n",MM,NN,KK) - else - l1dgemm0(AA,BB,CC,lda,ldb,ldc) - end - else - if isboundary then - - --IO.printf("b %d %d %d\n",MM,NN,KK) - l1dgemm1b(AA,BB,CC,lda,ldb,ldc,MM,NN,KK) - - --IO.printf("be %d %d %d\n",MM,NN,KK) - else - l1dgemm1(AA,BB,CC,lda,ldb,ldc) - end - end - end - end - end - end - end - end - end -end - --- - -local blocksizes = {16,24,32,40,48,56,64} -local regblocks = {1,2,4} -local vectors = {1,2,4,8} - ---local best = { gflops = 0, b = 56, rm = 4, rn = 1, v = 8 } -local best = { gflops = 0, b = 40, rm = 4, rn = 2, v = 4 } - - -if false then - local tunefor = 1024 - local harness = require("lib/matrixtestharness") - for _,b in ipairs(blocksizes) do - for _,rm in ipairs(regblocks) do - for _,rn in ipairs(regblocks) do - for _,v in ipairs(vectors) do - local my_dgemm = generatedgemm(b,5,rm,rn,v) - if my_dgemm then - print(b,rm,rn,v) - my_dgemm:compile() - local i = math.floor(tunefor / b) * b - local avg = 0 - local s, times = harness.timefunctions("double",i,i,i,function(M,K,N,A,B,C) - my_dgemm(nil,M,N,K,1.0,A,K,B,N,0.0,C,N) - end) - if not s then - print("") - break - end - print(i,unpack(times)) - local avg = times[1] - if best.gflops < avg then - best = { gflops = avg, b = b, rm = rm, rn = rn, v = v } - terralib.tree.printraw(best) - end - end - end - end - end - end -end - -terralib.tree.printraw(best) - -local my_dgemm = generatedgemm(best.b, 5, best.rm, best.rn, best.v) - ---my_dgemm:disas() -terralib.saveobj("my_dgemm.o", { my_dgemm = my_dgemm }) \ No newline at end of file diff --git a/samples/Terra/dgemmpaper.t b/samples/Terra/dgemmpaper.t deleted file mode 100644 index e415236c..00000000 --- a/samples/Terra/dgemmpaper.t +++ /dev/null @@ -1,75 +0,0 @@ - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end -prefetch = terralib.intrinsic("llvm.prefetch",{&opaque,int,int,int} -> {}) - - -function genkernel(NB, RM, RN, V,alpha) - local A,B,C = symbol("A"),symbol("B"),symbol("C") - local mm,nn = symbol("mn"),symbol("nn") - local lda,ldb,ldc = symbol("lda"),symbol("ldb"),symbol("ldc") - local a,b = symmat("a",RM), symmat("b",RN) - local c,caddr = symmat("c",RM,RN), symmat("caddr",RM,RN) - local k = symbol("k") - local loadc,storec = terralib.newlist(),terralib.newlist() - local VT = vector(double,V) - local VP = &VT - for m = 0, RM-1 do for n = 0, RN-1 do - loadc:insert(quote - var [caddr[m][n]] = C + m*ldc + n*V - var [c[m][n]] = - alpha * @VP([caddr[m][n]]) - end) - storec:insert(quote - @VP([caddr[m][n]]) = [c[m][n]] - end) - end end - local calcc = terralib.newlist() - for n = 0, RN-1 do - calcc:insert(quote - var [b[n]] = @VP(&B[n*V]) - end) - end - for m = 0, RM-1 do - calcc:insert(quote - var [a[m]] = VT(A[m*lda]) - end) - end - for m = 0, RM-1 do for n = 0, RN-1 do - calcc:insert(quote - [c[m][n]] = [c[m][n]] + [a[m]] * [b[n]] - end) - end end - return terra([A] : &double, [B] : &double, [C] : &double, - [lda] : int64,[ldb] : int64,[ldc] : int64) - for [mm] = 0, NB, RM do - for [nn] = 0, NB, RN*V do - [loadc]; - for [k] = 0, NB do - prefetch(B + 4*ldb,0,3,1); - [calcc]; - B,A = B + ldb,A + 1 - end - [storec]; - A,B,C = A - NB,B - ldb*NB + RN*V,C + RN*V - end - A,B,C = A + lda*RM, B - NB, C + RM * ldb - NB - end - end -end - -local a = genkernel(40,4,2,8,1) -a:compile() -a:printpretty() - -terra short_saxpy(a : float, - x : vector(float,4), y : vector(float,4)) - return a*x + y -end -short_saxpy:printpretty() \ No newline at end of file diff --git a/samples/Terra/diffuse.t b/samples/Terra/diffuse.t deleted file mode 100644 index ddf33dbe..00000000 --- a/samples/Terra/diffuse.t +++ /dev/null @@ -1,237 +0,0 @@ - -local C = terralib.includecstring [[ -#include -#include -#ifndef _WIN32 -#include -static double CurrentTimeInSeconds() { - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec + tv.tv_usec / 1000000.0; -} -#else -#include -static double CurrentTimeInSeconds() { - return time(NULL); -} -#endif - -int CalcTime(int * times, double * start) { - if(*times == 0) { - *start = CurrentTimeInSeconds(); - } else { - double elapsed = CurrentTimeInSeconds() - *start; - if(elapsed > 0.1f && *times >= 1) { - *start = elapsed / *times; - return 0; - } - } - (*times)++; - return 1; -} -]] - -alignedloads = global(0) -loads = global(0) -NI,NJ = 1,1 -V = 4 -local VP = &vector(float,V) -terra uload(d : &float) - --if d:as(uint64) % 16 == 0 then - -- alignedloads = alignedloads + 1 - --end - --loads = loads + 1 - return terralib.attrload(VP(d),{ align = 4 }) -end -terra ustore(d : &float, v : vector(float,V)) - terralib.attrstore(VP(d),v, { align = 4 }) -end - -terra diffuse_reference(output : &float, N : int, M : int, stride : int, x : &float, x0 : &float, a : float) - var invD = 1.f / (1 + 4.f*a) - var nextline = stride - N - for i = 0, M do - for j = 0,N do - var r = - (x0[0] - + (x[ - stride] - + x[stride] - + x[ - 1] - + x[1] )*a) * invD - output[0] = r - x0 = x0 + 1 - x = x + 1 - output = output + 1 - end - x0 = x0 + nextline --- stride - x = x + nextline --- stride - output = output + nextline --- stride - end - -end - -terra diffuse(output : &float, N : int, M : int, stride : int, x : &float, x0 : &float, a : float) - var invD = 1.f / (1 + 4.f*a) - var nextline = stride - N - for i = 0, M do - - for j = 0,N,V do - var r = - (uload(x0) - + (uload(x - stride) - + uload(x + stride) - + uload(x - 1) - + uload(x + 1) )*a) * invD - --C.printf("%d %d\n",i,j) - --llvmprefetch(x + 4 * stride,0,3,1) - --llvmprefetch(x0 + 3 * stride,0,3,1) - - ustore(output,r) - x0 = x0 + V - x = x + V - output = output + V - end - - x0 = x0 + nextline --- stride - x = x + nextline --- stride - output = output + nextline --- stride - end - -end - -llvmprefetch = terralib.intrinsic("llvm.prefetch",{&uint8,int,int,int} -> {}) - -terra diffuse2(output : &float, N : int, M : int, stride : int, x : &float, x0 : &float, a : float,xi : &float) - var invD = 1.f / (1 + 4.f*a) - var nextline = stride - N - var xi0,xi1,xi2 = xi - stride, xi, xi + stride - var x02 = x0 - for i = 0, M + 1 do - - if i < M then - for j = 0,N,V do - var r = - (uload(x0) - + (uload(x - stride) - + uload(x + stride) - + uload(x - 1) - + uload(x + 1) )*a) * invD - --C.printf("%d %d\n",i,j) - --llvmprefetch(x + 2 * stride,0,3,1) - ustore(xi,r) - x0 = x0 + V - x = x + V - xi = xi + V - end - - x0 = x0 + nextline --- stride - x = x + nextline --- stride - xi = xi + nextline --- stride - if i % 3 == 1 then - xi = xi - stride*3 - end - end - - if i >= 1 then - for j = 0,N,V do - var r = - (uload(x02) - + (uload(xi0) - + uload(xi2) - + uload(xi1 - 1) - + uload(xi1 + 1) )*a) * invD - --C.printf("%d %d\n",i,j) - ustore(output,r) - x02 = x02 + V - xi0 = xi0 + V - xi1 = xi1 + V - xi2 = xi2 + V - output = output + V - end - - x02 = x02 + nextline --- stride - xi0,xi1,xi2 = xi1 - N,xi2 - N, xi0 - N - output = output + nextline --- stride - end - end - -end - - -terra doit(thea : float) - var enlarge = 1 - var N = 1024/8 - var M = 1024*8 - var N1 = (N + 2*enlarge) - var M1 = (M + 2*enlarge) - - var NA = N1 - var x = [&float](C.malloc(NA*M1*sizeof(float))) - var x0 = [&float](C.malloc(NA*M1*sizeof(float))) - - var ro1 = [&float](C.malloc(NA*M1*sizeof(float))) - var ro2 = [&float](C.malloc(NA*M1*sizeof(float))) - - var to1 = [&float](C.malloc(NA*M1*sizeof(float))) - var to2 = [&float](C.malloc(NA*M1*sizeof(float))) - - - for i = 0, N1 do - for j = 0, N1 do - x[i*N1+j] = C.rand() % 10 - x0[i*N1+j] = C.rand() % 10 - ro1[i*N1+j] = -42 - ro2[i*N1+j] = -43 - to1[i*N1+j] = -44 - to2[i*N1+j] = -45 - end - end - var stride = N1 - var start = enlarge*stride + enlarge - - diffuse_reference(ro1 + start,N,M,stride,x + start,x0 + start,thea) - diffuse_reference(ro2 + start,N,M,stride,ro1 + start,x0 + start,thea) - - - - var times = 0 - var mytime : double - - var fuse = true - while C.CalcTime(×,&mytime) ~= 0 do - if not fuse then - diffuse(to1 + start,N,M,stride,x + start,x0 + start,thea) - diffuse(to2 + start,N,M,stride,to1 + start,x0 + start,thea) - else - diffuse2(to2 + start,N,M,stride,x + start,x0 + start,thea,to1 + start) - end - end - - C.printf("times = %d\n",times) - for i = enlarge+1, M1-enlarge-1 do - for j = enlarge+1,N1-enlarge-1 do - if ro2[i*stride+j] ~= to2[i*stride+j] then - C.printf("wrong! %d %d %f %f\n",i,j,ro2[i*stride+j],to2[i*stride+j]) - goto out - else - --C.printf("right! %d %d %f %f\n",i,j,ro1[i*N1+j],to1[i*N1+j]) - end - end - end - ::out:: - var togiga = 1.0/(1024*1024*1024) - var pixels = N*M - C.printf("%f %f %f\n", mytime, 2*pixels*4*3 *togiga / mytime, 2*6*pixels * togiga / mytime) - -end - -terra getloads() - return alignedloads,loads -end - -doit(1) -diffuse:disas() -doit(1) - -local al,loads = terralib.unpackstruct(getloads()) -print(al/loads) \ No newline at end of file diff --git a/samples/Terra/dynlib.t b/samples/Terra/dynlib.t deleted file mode 100644 index 2d67bbab..00000000 --- a/samples/Terra/dynlib.t +++ /dev/null @@ -1,47 +0,0 @@ -local ffi = require 'ffi' --- test that the dynamic library for terra was built correctly --- by compiling a new program that links against it and running it -terralib.includepath = terralib.terrahome.."/include/terra" -C = terralib.includecstring [[ -#include -#include "terra.h" -]] - -local libpath = terralib.terrahome.."/lib" - -terra doerror(L : &C.lua_State) - C.printf("%s\n",C.luaL_checklstring(L,-1,nil)) -end - -local thecode = "terra foo() return 1 end print(foo())" - -terra main(argc : int, argv : &rawstring) - var L = C.luaL_newstate(); - C.luaL_openlibs(L); - if C.terra_init(L) ~= 0 then - doerror(L) - end - if C.terra_loadstring(L,thecode) ~= 0 or C.lua_pcall(L, 0, -1, 0) ~= 0 then - doerror(L) - end - return 0; -end - -if ffi.os ~= "Windows" then - print(libpath) - local flags = terralib.newlist {"-L", libpath,"-Wl,-rpath,"..libpath,"-lterra_dynamic"} - if require("ffi").os == "OSX" then - flags:insertall {"-pagezero_size","10000", "-image_base", "100000000"} - end - - terralib.saveobj("dynlib",{main = main},flags) - - assert(0 == os.execute("./dynlib")) - -else - local putenv = terralib.externfunction("_putenv", rawstring -> int) - local flags = {libpath.."\\terra.lib",libpath.."\\lua51.lib"} - terralib.saveobj("dynlib.exe",{main = main},flags) - putenv("Path="..os.getenv("Path")..";"..terralib.terrahome.."\\bin") --make dll search happy - assert(0 == os.execute(".\\dynlib.exe")) -end \ No newline at end of file diff --git a/samples/Terra/eager.t b/samples/Terra/eager.t deleted file mode 100644 index 7218d811..00000000 --- a/samples/Terra/eager.t +++ /dev/null @@ -1,10 +0,0 @@ - - -local fn = terra() return 0 end - -for i = 1,10 do - fn = terra() return fn() + 1 end -end - -local test = require("test") -test.eq(fn(),10) \ No newline at end of file diff --git a/samples/Terra/emptycalls.t b/samples/Terra/emptycalls.t deleted file mode 100644 index 2c7f8b34..00000000 --- a/samples/Terra/emptycalls.t +++ /dev/null @@ -1,31 +0,0 @@ -terra f(x : {}) - return x -end - - -print(f({})) - -terra f2(x : {}) - return x,x -end - -print(f2({})._0) - -terra f3(x : {}, a : int) - return a + 1 -end - -assert(f3({},3) == 4) - -terra f4(x : {}) - return x,4 -end - -a = f4({}) -assert(a._1 == 4) - -terra f5() - return f({}) -end - -f5() \ No newline at end of file diff --git a/samples/Terra/emptyname.t b/samples/Terra/emptyname.t deleted file mode 100644 index b6f200aa..00000000 --- a/samples/Terra/emptyname.t +++ /dev/null @@ -1,5 +0,0 @@ -struct A {} -A.metamethods.__typename = function() return "" end -struct B {} -B.metamethods.__typename = function() return "" end -print(A:cstring(),B:cstring()) \ No newline at end of file diff --git a/samples/Terra/emptystruct.t b/samples/Terra/emptystruct.t deleted file mode 100644 index 5dc75028..00000000 --- a/samples/Terra/emptystruct.t +++ /dev/null @@ -1,30 +0,0 @@ -terra f(x : {}) - return x -end - -print(f({})) - -terra f2(x : {}) - return x,x -end - -print(f2({})) - -terra f3(x : {}, a : int) - return a + 1 -end - -assert(f3({},3) == 4) - -terra f4(x : {}) - return x,4 -end - -a = f4({}) -assert(a._1 == 4) - -terra f5() - return f({}) -end - -f5() \ No newline at end of file diff --git a/samples/Terra/enumc.t b/samples/Terra/enumc.t deleted file mode 100644 index 575e8c13..00000000 --- a/samples/Terra/enumc.t +++ /dev/null @@ -1,14 +0,0 @@ -C = terralib.includecstring [[ - enum Foo { - A_VALUE = -1, - B_VALUE = 4, - C_VALUE = 2 << 1, - D_VALUE = (1 << 31) - 1, - E_VALUE = (1 << 44) - }; -]] -assert(C.A_VALUE == -1) -assert(C.B_VALUE == 4) -assert(C.C_VALUE == 4) -assert(C.D_VALUE == 2147483647) -assert(C.E_VALUE == -2147483648) \ No newline at end of file diff --git a/samples/Terra/evenodd.t b/samples/Terra/evenodd.t deleted file mode 100644 index f226c17a..00000000 --- a/samples/Terra/evenodd.t +++ /dev/null @@ -1,20 +0,0 @@ -terra iseven(a : uint) : bool - if a == 0 then - return true - else - return isodd(a - 1) - end -end and -terra isodd(a : uint) : bool - if a == 0 then - return false - else - return iseven(a - 1) - end -end - -local test = require("test") -test.eq(iseven(3),false) -test.eq(iseven(2),true) -test.eq(isodd(3),true) -test.eq(isodd(2),false) diff --git a/samples/Terra/examplecompiler1.t b/samples/Terra/examplecompiler1.t deleted file mode 100755 index e98d3dcc..00000000 --- a/samples/Terra/examplecompiler1.t +++ /dev/null @@ -1,41 +0,0 @@ -import "lib/examplecompiler" -foo = {} - - -local def foo2(b : eg.number) : eg.number return 2 + b end - - -assert(foo2(3) == 5) - -def foo.bar(a : eg.number) : eg.number - return 1 + -2 * 3 + 1 + a - foo2(a) -end - -assert(-6 == foo.bar(4)) - -local c = def(c : eg.number) : eg.number return 4 end - -assert(4 == c(1)) - -def sign(a : eg.number) : eg.number - if a < 0 then - return -1 - else - return 1 - end -end - -def usev(a : eg.number) : eg.number - var b = 1 - return a + b -end - -def what(a : eg.number) : eg.number - var c = usev - return c(a) -end - -assert(usev(4) == 5) -assert(sign(4) == 1) -assert(sign(-3) == -1) -assert(what(4) == 5) \ No newline at end of file diff --git a/samples/Terra/examplelanguage1.t b/samples/Terra/examplelanguage1.t deleted file mode 100755 index f9f46373..00000000 --- a/samples/Terra/examplelanguage1.t +++ /dev/null @@ -1,7 +0,0 @@ -import "lib/examplelanguage" - -local a,b = 1,2 -c = 3 -local d = sum a,b,c done - -print(d) \ No newline at end of file diff --git a/samples/Terra/exampleparser1.t b/samples/Terra/exampleparser1.t deleted file mode 100644 index 98882fbb..00000000 --- a/samples/Terra/exampleparser1.t +++ /dev/null @@ -1,22 +0,0 @@ -import "lib.exampleparser" - -P exp -1 + 1 * (2 - 3) -P exp not true or false and 3 -P exp a.b.c[d]()(a,b,c) -P exp (a + 3)(4) -P exp {a,3,4, d = 4, [1+3] = 3} -P exp [ 3 + 4 ] -P statement var a,b,c:int = 3 -P statement do - if a then b else c end - if a then b end - if a then b elseif c then d end - while 3 + 3 do end - repeat - until a + b - for a,b,c:int = 1,3 do end - for a,b,c:int in 1,3 do end - a = b - a - a,c = d,e -end \ No newline at end of file diff --git a/samples/Terra/exittest.t b/samples/Terra/exittest.t deleted file mode 100644 index 0f24e5ce..00000000 --- a/samples/Terra/exittest.t +++ /dev/null @@ -1,9 +0,0 @@ - -C = { exit = terralib.externfunction("exit", int -> {}) } - - -terra moo() - C.exit(0) -end - -moo() \ No newline at end of file diff --git a/samples/Terra/explicitcast.t b/samples/Terra/explicitcast.t deleted file mode 100644 index 15d7aab2..00000000 --- a/samples/Terra/explicitcast.t +++ /dev/null @@ -1,11 +0,0 @@ - -terra foo() - var a : int64 = 256+3 - var c = intptr(&a) - var d = [&int64](c) - var fi = int(true) - var what = @[&int8](&a) - return @d,fi,what -end -local test = require("test") -test.meq({256+3,1,3},foo()) \ No newline at end of file diff --git a/samples/Terra/exportdynamic.t b/samples/Terra/exportdynamic.t deleted file mode 100644 index 3bbd63b3..00000000 --- a/samples/Terra/exportdynamic.t +++ /dev/null @@ -1,9 +0,0 @@ -terralib.includepath = terralib.terrahome.."/include/terra" -C = terralib.includecstring [[ - #include "lua.h" - #include "lauxlib.h" -]] - -local s = C.luaL_newstate() -assert(C.lua_gettop(s) == 0) - diff --git a/samples/Terra/expvec.t b/samples/Terra/expvec.t deleted file mode 100644 index 94154777..00000000 --- a/samples/Terra/expvec.t +++ /dev/null @@ -1,34 +0,0 @@ - -if require("ffi").os == "Windows" then - print("Not consistent on windows") - return -end -local C = terralib.includecstring[[ - #include - void dostuff(__m128 what) {} - void dostuff2() { __m128 a; dostuff(a); } -]] - -local V = 1 -local exp = terralib.intrinsic(("llvm.exp.v%df32"):format(V),vector(float,V) -> vector(float,V)) - -terra foo(N : int) - - var d = vector(0.f,1.f,3.f,4.f) - - C.dostuff(d) - - --var v = vector(0.f,1.f,2.f,3.f,4.f,5.f,6.f,7.f) - var v = vector(0.f) - for i = 0, N do - v = exp(v) - end - return v[0],v[1],v[2],v[3] -end - -C.dostuff:printpretty() - -local begin = terralib.currenttimeinseconds() -print(foo(100000000)) -local endd = terralib.currenttimeinseconds() -print(endd - begin) \ No newline at end of file diff --git a/samples/Terra/f2.t b/samples/Terra/f2.t deleted file mode 100644 index a7507f08..00000000 --- a/samples/Terra/f2.t +++ /dev/null @@ -1,17 +0,0 @@ -local C = terralib.includecstring [[ - typedef struct { - int a; - int b; - } Foo; -]] -for i,e in ipairs(C.Foo.entries) do - print(e.field,e.type) -end - -terra useFoo() - var f : C.Foo - f.a = 1 - f.b = 2 -end - -useFoo() \ No newline at end of file diff --git a/samples/Terra/fact.t b/samples/Terra/fact.t deleted file mode 100644 index 284bb512..00000000 --- a/samples/Terra/fact.t +++ /dev/null @@ -1,16 +0,0 @@ -local test = require("test") - -local Num = int -local terra fact(a : Num) : Num - var c,i = 1,1 - while i <= a do - c = c * i - i = i + 1 - end - return c -end - - -test.eq(fact(1),1) -test.eq(fact(2),2) -test.eq(fact(3),6) \ No newline at end of file diff --git a/samples/Terra/fakeasm.t b/samples/Terra/fakeasm.t deleted file mode 100644 index 09998825..00000000 --- a/samples/Terra/fakeasm.t +++ /dev/null @@ -1,31 +0,0 @@ - - -local op = setmetatable({},{ __index = function(self,idx) - return idx -end }) -C = terralib.includec("stdio.h") -local function emit(buf,...) - local str = "" - local operands = {} - for i = 1,select("#",...) do - local v = select(i,...) - local cv,e = v:asvalue() - str = str .. (e and "%d" or tostring(cv)) .. " " - if e then table.insert(operands,v) end - end - str = str.."\n" - return `C.sprintf(buf,str,operands) -end -emit = macro(emit) - -local c = "as28" -terra what(buf : rawstring) - var b = 3 - emit(buf,1,3,4,3+3,op.what,b + 3) -end - -local buf = terralib.new(int8[128]) -what(buf) -local ffi = require("ffi") -local s = ffi.string(buf) -assert("1 3 4 6 what 6 \n" == s) diff --git a/samples/Terra/falsespec.t b/samples/Terra/falsespec.t deleted file mode 100644 index 970a9695..00000000 --- a/samples/Terra/falsespec.t +++ /dev/null @@ -1,8 +0,0 @@ - - -terra derp() - var a = [false] - return a -end - -assert(derp() == false) \ No newline at end of file diff --git a/samples/Terra/fastcall.t b/samples/Terra/fastcall.t deleted file mode 100644 index 1cef49bb..00000000 --- a/samples/Terra/fastcall.t +++ /dev/null @@ -1,24 +0,0 @@ - -terra foo() - return 1 -end - - -assert(1 == foo()) -assert(rawget(foo,"fastcall") == foo:getdefinitions()[1].ffiwrapper) -assert(1 == foo()) - - -terra foo2() - return 1,2 -end -local a,b = terralib.unpackstruct(foo2()) -assert(a == 1 and b == 2) -assert(rawget(foo2,"fastcall") == foo2:getpointer()) -local a,b = unpackstruct(foo2()) -assert(a == 1 and b == 2) - -terra foo(a : int) -end - -assert(rawget(foo,"fastcall") == nil) \ No newline at end of file diff --git a/samples/Terra/fib.t b/samples/Terra/fib.t deleted file mode 100644 index c2fb5fe2..00000000 --- a/samples/Terra/fib.t +++ /dev/null @@ -1,26 +0,0 @@ -local test = require("test") - -local Num = int - -local base = {} -terra base.fib(a : Num) : Num - var i,c,p = 0,1,1 - while i < a do - c,p = c + p,c - i = i + 1 - end - return c -end - -function fib2(a) - local i,c,p = 0,1,1 - while i < a do - c,p = c + p,c - i = i + 1 - end - return c -end -for i = 0,10 do - print(base.fib(i)) - test.eq(base.fib(i),fib2(i)) -end \ No newline at end of file diff --git a/samples/Terra/fib2.t b/samples/Terra/fib2.t deleted file mode 100644 index 29d8127e..00000000 --- a/samples/Terra/fib2.t +++ /dev/null @@ -1,27 +0,0 @@ -local test = require("test") - -local Num = int - -terra fib(a : Num) : Num - if a == 0 then - return 1 - elseif a == 1 then - return 1 - else - return fib(a - 1) + fib(a - 2) - end -end - -function fib2(a) - if a == 0 then - return 1 - elseif a == 1 then - return 1 - else - return fib2(a - 1) + fib2(a - 2) - end -end -for i = 0,10 do - print(fib(i)) - test.eq(fib(i),fib2(i)) -end diff --git a/samples/Terra/fnames.t b/samples/Terra/fnames.t deleted file mode 100644 index befb5e4d..00000000 --- a/samples/Terra/fnames.t +++ /dev/null @@ -1,5 +0,0 @@ -foo = terra(a : int) end -foo:setname("bar") - -assert(foo:getname() == "bar") -foo:disas() \ No newline at end of file diff --git a/samples/Terra/fncalltest.t b/samples/Terra/fncalltest.t deleted file mode 100644 index dcf18907..00000000 --- a/samples/Terra/fncalltest.t +++ /dev/null @@ -1,16 +0,0 @@ - - - -terra foo() - -end - - -terra bar() - foo() - var what = foo - --what() -end - -bar:compile() - diff --git a/samples/Terra/fnpointer.t b/samples/Terra/fnpointer.t deleted file mode 100644 index 042af355..00000000 --- a/samples/Terra/fnpointer.t +++ /dev/null @@ -1,24 +0,0 @@ - -terra foo() - return 4LL -end - -terra bar() - return 5LL -end - -terra bar3(fn: {} -> int64) - return fn() -end - -terra baz(a : int64) - var afn = foo - if a > 2 then - afn = bar - end - return bar3(afn) -end - -local test = require("test") -test.eq(baz(1),4) -test.eq(baz(3),5) \ No newline at end of file diff --git a/samples/Terra/fnptr.t b/samples/Terra/fnptr.t deleted file mode 100644 index baaad41a..00000000 --- a/samples/Terra/fnptr.t +++ /dev/null @@ -1,7 +0,0 @@ -terra baz() return 1 end -bp = baz:getpointer() -terra foo() - return bp() -end - -assert(foo() == 1) \ No newline at end of file diff --git a/samples/Terra/fnptrc.t b/samples/Terra/fnptrc.t deleted file mode 100644 index 935c3341..00000000 --- a/samples/Terra/fnptrc.t +++ /dev/null @@ -1,25 +0,0 @@ - -C = terralib.includecstring [[ - struct Foo { - int (*bar)(int); - }; - int runptr(int (*bar)(int), int a) { - return bar(a); - } -]] - -terra add1(a : int) return a + 1 end - -terra what0() - return C.runptr(add1,1) -end - -assert(what0() == 2) - -terra what() - var c : C.Foo - c.bar = add1 - return c.bar(1) -end - -assert(what() == 2) \ No newline at end of file diff --git a/samples/Terra/foo.t b/samples/Terra/foo.t deleted file mode 100644 index 0aa5252f..00000000 --- a/samples/Terra/foo.t +++ /dev/null @@ -1 +0,0 @@ -a = global( struct { real : float, imag : float }) \ No newline at end of file diff --git a/samples/Terra/for.t b/samples/Terra/for.t deleted file mode 100644 index 41e4d893..00000000 --- a/samples/Terra/for.t +++ /dev/null @@ -1,31 +0,0 @@ - -terra foo(a : int, s : int) - var r = 0 - for i = 0,a,s do - r = r + i - end - return r -end - -terra foo2(a : int) - var r = 0 - for i = 0,a do - r = r + i - end - return r -end - -terra foo3(a : int) - var r = 0 - for i = a,0,-1 do - r = r + i - end - return r -end - -local test = require("test") -test.eq(foo(10,1),45) -test.eq(foo(10,2),20) -test.eq(foo(0,1),0) -test.eq(foo2(10),45) -test.eq(foo3(10),55) \ No newline at end of file diff --git a/samples/Terra/for2.t b/samples/Terra/for2.t deleted file mode 100644 index 3bd8f374..00000000 --- a/samples/Terra/for2.t +++ /dev/null @@ -1,31 +0,0 @@ - -terra foo(a : uint64, s : uint64) - var r = 0 - for i : uint64 = 0,a,s do - r = r + i - end - return r -end - -terra foo2(a : int) - var r = 0 - for i : int = 0.f,a do - r = r + i - end - return r -end -terra foo3(a : int) - var r = 0 - for i = a,0,-1 do - r = r + i - end - return r -end - - -local test = require("test") -test.eq(foo(10,1),45) -test.eq(foo(10,2),20) -test.eq(foo(0,1),0) -test.eq(foo2(10),45) -test.eq(foo3(10),55) diff --git a/samples/Terra/forbreak.t b/samples/Terra/forbreak.t deleted file mode 100644 index d14b056f..00000000 --- a/samples/Terra/forbreak.t +++ /dev/null @@ -1,17 +0,0 @@ - -terra foo(a : int, s : int) - var r = 0 - for i = 0,a,s do - if i == 8 then - break - end - r = r + i - - end - return r -end - -local test = require("test") -test.eq(foo(10,1),28) -test.eq(foo(10,2),12) -test.eq(foo(0,1),0) \ No newline at end of file diff --git a/samples/Terra/forlist.t b/samples/Terra/forlist.t deleted file mode 100644 index da427475..00000000 --- a/samples/Terra/forlist.t +++ /dev/null @@ -1,24 +0,0 @@ - - -struct Range { - a : int; - b : int; -} -Range.metamethods.__for = function(syms,iter,body) - return syms, quote - var it = iter - for [syms[1]] = it.a,it.b do - body - end - end -end - -terra foo() - var a = 0 - for i in Range {0,10} do - a = a + i - end - return a -end - -assert(foo() == 10*9/2) \ No newline at end of file diff --git a/samples/Terra/forlist2.t b/samples/Terra/forlist2.t deleted file mode 100644 index a09b6d73..00000000 --- a/samples/Terra/forlist2.t +++ /dev/null @@ -1,37 +0,0 @@ - - -struct Array { - data : int[3]; -} -Array.metamethods.__for = function(syms,iter,body) - local pe = symbol() - local e = `@pe - return {e}, quote - var it = &iter - for i = 0,3 do - var [pe] = &it.data[i] - body - end - end -end - -terra foo() - var a = Array{ array(1,2,3) } - for i in a do - i = i + 1 - end - return a.data[0] + a.data[1] + a.data[2] -end - -terra foo2() - var a = Array{ array(1,2,3) } - var s = 0 - for i : double in a do - s = s + i - end - return s -end - -assert(foo() == 9) - -assert(foo2() == 6) \ No newline at end of file diff --git a/samples/Terra/forp.t b/samples/Terra/forp.t deleted file mode 100644 index 2db2c3e9..00000000 --- a/samples/Terra/forp.t +++ /dev/null @@ -1,21 +0,0 @@ -struct Range { - a : int; - b : int; -} -Range.metamethods.__for = function(syms,iter,body) - return syms, quote - var it = iter - for [syms[1]] = it.a,it.b do - body - end - end -end - -terra foo() - var v = Range { 0, 3 } - var vp = &v - var i = 0 - for e in vp do i = i + e end - return i -end -assert(3 == foo()) \ No newline at end of file diff --git a/samples/Terra/forsym.t b/samples/Terra/forsym.t deleted file mode 100644 index 10857a48..00000000 --- a/samples/Terra/forsym.t +++ /dev/null @@ -1,24 +0,0 @@ - -terra foo(a : int, s : int) - var r = 0 - for i = 0,a,s do - r = r + i - end - return r -end - -local i = symbol() - -terra foo2(a : int) - var r = 0 - for [i] = 0,a do - r = r + [i] - end - return r -end - -local test = require("test") -test.eq(foo(10,1),45) -test.eq(foo(10,2),20) -test.eq(foo(0,1),0) -test.eq(foo2(10),45) \ No newline at end of file diff --git a/samples/Terra/forwardtodef.t b/samples/Terra/forwardtodef.t deleted file mode 100644 index 228ad86a..00000000 --- a/samples/Terra/forwardtodef.t +++ /dev/null @@ -1,7 +0,0 @@ - - -terra foo() - return 1 -end -foo:setinlined(true) -foo:disas() \ No newline at end of file diff --git a/samples/Terra/functionnoproto.t b/samples/Terra/functionnoproto.t deleted file mode 100644 index 1ce9bad8..00000000 --- a/samples/Terra/functionnoproto.t +++ /dev/null @@ -1,6 +0,0 @@ -C = terralib.includecstring [[ - typedef int (*PROC)(); - PROC what() { return 0; } -]] - -assert(C.what() == nil) \ No newline at end of file diff --git a/samples/Terra/gctest.t b/samples/Terra/gctest.t deleted file mode 100644 index 12342798..00000000 --- a/samples/Terra/gctest.t +++ /dev/null @@ -1,18 +0,0 @@ - - - - -local terra foo() -end - -local terra bar() -end - -foo:compile() -bar:compile() -foo = nil - -collectgarbage() -collectgarbage() - -print("HERE") \ No newline at end of file diff --git a/samples/Terra/gemm.t b/samples/Terra/gemm.t deleted file mode 100644 index 5993ae22..00000000 --- a/samples/Terra/gemm.t +++ /dev/null @@ -1,207 +0,0 @@ -local number = double -local alignment = 8 -local dotune = false - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end - -local function isinteger(x) return math.floor(x) == x end - -llvmprefetch = terralib.intrinsic("llvm.prefetch",{&opaque,int,int,int} -> {}) -local function unalignedload(addr) - return `terralib.attrload(addr, { align = alignment }) -end -local function unalignedstore(addr,v) - return `terralib.attrstore(addr,v, { align = alignment }) -end - -unalignedload,unalignedstore = macro(unalignedload),macro(unalignedstore) - -function genkernel(NB, RM, RN, V,alpha,boundary) - - local M,N,K, boundaryargs - if boundary then - M,N,K = symbol(int64,"M"),symbol(int64,"N"),symbol(int64,"K") - boundaryargs = terralib.newlist({M,N,K}) - else - boundaryargs = terralib.newlist() - M,N,K = NB,NB,NB - end - - local A,B,C,mm,nn,ld = symbol("A"),symbol("B"),symbol("C"),symbol("mn"),symbol("nn"),symbol("ld") - local lda,ldb,ldc = symbol("lda"),symbol("ldb"),symbol("ldc") - local a,b,c,caddr = symmat("a",RM), symmat("b",RN), symmat("c",RM,RN), symmat("caddr",RM,RN) - local k = symbol("k") - - local loadc,storec = terralib.newlist(),terralib.newlist() - local VT = vector(number,V) - local VP = &VT - for m = 0, RM-1 do - for n = 0, RN-1 do - loadc:insert(quote - var [caddr[m][n]] = C + m*ldc + n*V - var [c[m][n]] = alpha * unalignedload(VP([caddr[m][n]])) - end) - storec:insert(quote - unalignedstore(VP([caddr[m][n]]),[c[m][n]]) - end) - end - end - - local calcc = terralib.newlist() - - for n = 0, RN-1 do - calcc:insert(quote - var [b[n]] = unalignedload(VP(&B[n*V])) - end) - end - for m = 0, RM-1 do - calcc:insert(quote - var [a[m]] = VT(A[m*lda]) - end) - end - for m = 0, RM-1 do - for n = 0, RN-1 do - calcc:insert(quote - [c[m][n]] = [c[m][n]] + [a[m]] * [b[n]] - end) - end - end - - local result = terra([A] : &number, [B] : &number, [C] : &number, [lda] : int64,[ldb] : int64,[ldc] : int64,[boundaryargs]) - for [mm] = 0, M, RM do - for [nn] = 0, N,RN*V do - [loadc]; - for [k] = 0, K do - llvmprefetch(B + 4*ldb,0,3,1); - [calcc]; - B = B + ldb - A = A + 1 - end - [storec]; - A = A - K - B = B - ldb*K + RN*V - C = C + RN*V - end - C = C + RM * ldb - N - B = B - N - A = A + lda*RM - end - end - return result -end - -local stdlib = terralib.includec("stdlib.h") -local IO = terralib.includec("stdio.h") - -local terra min(a : int, b : int) - return terralib.select(a < b, a, b) -end -function blockedloop(N,M,K,blocksizes,bodyfn) - local function generatelevel(n,ii,jj,kk,bb0,bb1,bb2) - if n > #blocksizes then - return bodyfn(ii,jj,kk) - end - local blocksize = blocksizes[n] - return quote for i = ii,min(ii+bb0,N),blocksize do - for j = jj,min(jj+bb1,M),blocksize do - for k = kk,min(kk+bb2,K),blocksize do - [ generatelevel(n+1,i,j,k,blocksize,blocksize,blocksize) ] - end end end end - end - return generatelevel(1,0,0,0,N,M,K) -end - -function generatedgemm(NB,NBF,RM,RN,V) - if not isinteger(NB/(RN*V)) or not isinteger(NB/RM) then - return false - end - - local NB2 = NBF * NB - local l1dgemm0 = genkernel(NB,RM,RN,V,0,false) - local l1dgemm1 = genkernel(NB,RM,RN,V,1,false) - local l1dgemm0b = genkernel(NB,1,1,1,0,true) - local l1dgemm1b = genkernel(NB,1,1,1,1,true) - - return terra(gettime : {} -> double, M : int, N : int, K : int, alpha : number, A : &number, lda : int, B : &number, ldb : int, - beta : number, C : &number, ldc : int) - [ blockedloop(N,M,K,{NB2,NB},function(m,n,k) return quote - var MM,NN,KK = min(M-m,NB),min(N-n,NB),min(K-k,NB) - var isboundary = MM < NB or NN < NB or KK < NB - var AA,BB,CC = A + (m*lda + k),B + (k*ldb + n),C + (m*ldc + n) - if k == 0 then - if isboundary then - --IO.printf("b0 %d %d %d\n",MM,NN,KK) - l1dgemm0b(AA,BB,CC,lda,ldb,ldc,MM,NN,KK) - - --IO.printf("be %d %d %d\n",MM,NN,KK) - else - l1dgemm0(AA,BB,CC,lda,ldb,ldc) - end - else - if isboundary then - - --IO.printf("b %d %d %d\n",MM,NN,KK) - l1dgemm1b(AA,BB,CC,lda,ldb,ldc,MM,NN,KK) - - --IO.printf("be %d %d %d\n",MM,NN,KK) - else - l1dgemm1(AA,BB,CC,lda,ldb,ldc) - end - end - end end) ] - end -end - -local blocksizes = {16,24,32,40,48,56,64} -local regblocks = {1,2,4} -local vectors = {1,2,4,8,16} ---local best = { gflops = 0, b = 56, rm = 4, rn = 1, v = 8 } -local best = { gflops = 0, b = 40, rm = 4, rn = 2, v = 4 } ---local best = { gflops = 0, b = 40, rm = 1, rn = 1, v = 1 } - -if dotune then - local tunefor = 1024 - local harness = require("lib/matrixtestharness") - for _,b in ipairs(blocksizes) do - for _,rm in ipairs(regblocks) do - for _,rn in ipairs(regblocks) do - for _,v in ipairs(vectors) do - local my_dgemm = generatedgemm(b,5,rm,rn,v) - if my_dgemm then - print(b,rm,rn,v) - my_dgemm:compile() - local i = math.floor(tunefor / b) * b - local avg = 0 - local ctyp - local s, times = harness.timefunctions(tostring(number),i,i,i,function(M,K,N,A,B,C) - my_dgemm(nil,M,N,K,1.0,A,K,B,N,0.0,C,N) - end) - if not s then - print("") - break - end - print(i,unpack(times)) - local avg = times[1] - if best.gflops < avg then - best = { gflops = avg, b = b, rm = rm, rn = rn, v = v } - terralib.tree.printraw(best) - end - end - end - end - end - end -end -local my_dgemm = generatedgemm(best.b, 5, best.rm, best.rn, best.v) -if number == double then - terralib.saveobj("my_dgemm.o", { my_dgemm = my_dgemm }) -else - terralib.saveobj("my_sgemm.o", { my_sgemm = my_dgemm }) -end \ No newline at end of file diff --git a/samples/Terra/getmethod.t b/samples/Terra/getmethod.t deleted file mode 100644 index 5d93531a..00000000 --- a/samples/Terra/getmethod.t +++ /dev/null @@ -1,19 +0,0 @@ - - -struct A {} - - -A.metamethods.__getmethod = function(self,methodname) - local c = methodname:sub(1,1):byte() - return terra(a : &A) - return c - end -end - - -terra foo() - var a : A - return a:a() + a:b() -end - -assert(foo() == ("a"):byte() + ("b"):byte()) \ No newline at end of file diff --git a/samples/Terra/gettype.t b/samples/Terra/gettype.t deleted file mode 100644 index dacd2b39..00000000 --- a/samples/Terra/gettype.t +++ /dev/null @@ -1,18 +0,0 @@ - - - -function makestuff(a) - local T = a:gettype() - local struct ST { - a : T - } - return `ST { a } -end - -makestuff = macro(makestuff) - -terra useit() - return makestuff(true).a,makestuff(3.0).a -end -local test = require("test") -test.meq({true,3},useit()) \ No newline at end of file diff --git a/samples/Terra/globals.t b/samples/Terra/globals.t deleted file mode 100644 index 9dc6d6ba..00000000 --- a/samples/Terra/globals.t +++ /dev/null @@ -1,26 +0,0 @@ - -struct A { a : int } -local a = terralib.global(A) -a:set({3}) -local b = terralib.global(true) -local c = terralib.global(int[3]) -local d = terralib.global(3.5) - -terra foobar() - c[0] = 3 - return a.a + d -end - -e = global(int) -terra doihaveaname() - e = 10 - return e -end - -assert(doihaveaname() == 10) -assert(6.5 == foobar()) -print("HERE") -assert(true == b:get()) -assert(3 == c:get()[0]) - -print("TODO - fix handling of initializers for array-like things and literal strings") \ No newline at end of file diff --git a/samples/Terra/goto.t b/samples/Terra/goto.t deleted file mode 100644 index 241adf0c..00000000 --- a/samples/Terra/goto.t +++ /dev/null @@ -1,16 +0,0 @@ - - -terra foo() - var a = 0 - ::begin:: - if a >= 10 then - goto theend - end - a = a + 1 - goto begin - ::theend:: - return a -end - -test = require("test") -test.eq(foo(),10) \ No newline at end of file diff --git a/samples/Terra/goto2.t b/samples/Terra/goto2.t deleted file mode 100644 index f8f430da..00000000 --- a/samples/Terra/goto2.t +++ /dev/null @@ -1,18 +0,0 @@ - -local begin = symbol() -local theend = symbol() - -terra foo() - var a = 0 - ::[begin]:: - if a >= 10 then - goto [theend] - end - a = a + 1 - goto [begin] - ::[theend]:: - return a -end - -test = require("test") -test.eq(foo(),10) \ No newline at end of file diff --git a/samples/Terra/gvarfault.t b/samples/Terra/gvarfault.t deleted file mode 100644 index 6702563b..00000000 --- a/samples/Terra/gvarfault.t +++ /dev/null @@ -1,24 +0,0 @@ -if require("ffi").os == "Windows" then - print("Disabled on windows (uses unistd.h)") - return -end -local C = terralib.includecstring( -[[ -#include -#include -#include -#include -#include -]] -) - -local gstr = global(&int8, "some text") - -terra fun1() - C.printf("gstr: %s \n", gstr) - return 0 -end - -fun1:printpretty() - -fun1() \ No newline at end of file diff --git a/samples/Terra/hasbeenfrozen.t b/samples/Terra/hasbeenfrozen.t deleted file mode 100644 index c1c40866..00000000 --- a/samples/Terra/hasbeenfrozen.t +++ /dev/null @@ -1,33 +0,0 @@ -struct A { - a : int; - b : int; - c : &B -} and struct B { - a : &A -} - -local a = global(A) - - -terra foo() - var b : B - return a.a + a.b -end - -function A.metamethods.__staticinitialize(self) - print("A") - assert(A:iscomplete()) - a:get().a = 4 -end - -function B.metamethods.__staticinitialize(self) - print("B") - assert(B:iscomplete()) - a:get().b = 3 - foo:gettype(function() - assert(foo() == 7) - a:get().a = a:get().a + 1 - end) -end - -assert(foo() == 8) \ No newline at end of file diff --git a/samples/Terra/hello.t b/samples/Terra/hello.t deleted file mode 100644 index 81af8917..00000000 --- a/samples/Terra/hello.t +++ /dev/null @@ -1,8 +0,0 @@ -local c = terralib.includec("stdio.h") - -terra hello() - c.printf("hello, world\n") -end - -terralib.saveobj("hello",{main = hello}) -hello() diff --git a/samples/Terra/hello2.t b/samples/Terra/hello2.t deleted file mode 100644 index 638b5e15..00000000 --- a/samples/Terra/hello2.t +++ /dev/null @@ -1,10 +0,0 @@ - -local c = terralib.includec("stdio.h") - -terralib.tree.printraw(getmetatable(c).errors) - -terra main() - c.printf("hello, world\n") -end - -main() \ No newline at end of file diff --git a/samples/Terra/hexf.t b/samples/Terra/hexf.t deleted file mode 100644 index 6b767b49..00000000 --- a/samples/Terra/hexf.t +++ /dev/null @@ -1,9 +0,0 @@ - - -assert(0xf == 15) - -terra foo() - return 0xf -end - -assert(foo() == 15) \ No newline at end of file diff --git a/samples/Terra/huge.t b/samples/Terra/huge.t deleted file mode 100644 index e52733db..00000000 --- a/samples/Terra/huge.t +++ /dev/null @@ -1,7 +0,0 @@ - - -terra returnhuge() - return math.huge -end - -assert(returnhuge() == math.huge) \ No newline at end of file diff --git a/samples/Terra/ifelse.t b/samples/Terra/ifelse.t deleted file mode 100644 index 2f3d83a0..00000000 --- a/samples/Terra/ifelse.t +++ /dev/null @@ -1,17 +0,0 @@ - -terra foo(a : int) - return terralib.select(a > 0, 1,-1) -end - - -terra foo2(a : int) - var c = vector(a > 0, a > 1, a > 2) - var d = terralib.select(c,vector(1,2,3),vector(4,5,6)) - return d[0], d[1], d[2] -end -local test = require("test") - -test.eq(foo(1),1) -test.eq(foo(-1),-1) - -test.meq({1,5,6},foo2(1)) \ No newline at end of file diff --git a/samples/Terra/includec.t b/samples/Terra/includec.t deleted file mode 100644 index 3ebb9f4d..00000000 --- a/samples/Terra/includec.t +++ /dev/null @@ -1,42 +0,0 @@ - -local c = terralib.includec("mytest.h") - -terra foo() - var a : int = 3 - return c.myfoobarthing(1,2,3.5,&a) + a -end - -terra bar() - return c.myotherthing(4,5) -end - -terra bar2() - return c.myfnptr(bar) -end - -terra bar3() - var a : c.size_t = 3 - return a -end - -terra bar4() - var opaquething : c.MyStruct2 - var my = c.MyStruct { 3, 4} - return my.a + my.b -end - -terra writefile() - c.printf("%f %f %f\n",3.0,4.0,5.0) - var f = c.fopen("afile.txt","w") - c.fputs("a string\n",f) - c.fclose(f) -end - -local test = require("test") - -test.eq(foo(),15) -test.eq(c.myotherthing(1,2),3) -test.eq(bar2(),9) -test.eq(bar3(),3) -test.eq(bar4(),7) -writefile() diff --git a/samples/Terra/includetwice.t b/samples/Terra/includetwice.t deleted file mode 100644 index eeba70d4..00000000 --- a/samples/Terra/includetwice.t +++ /dev/null @@ -1,21 +0,0 @@ - - -local C1 = terralib.includecstring [[ - typedef struct { int a; } A; - int geta(A* a) { return a->a; } -]] -local C2 = terralib.includecstring [[ - typedef struct { int a; } A; - void seta(A* a, int v) { a->a = v; } -]] - -assert(C1.A == C2.A) - - -terra usethem() - var a = C1.A { 1 } - C2.seta(&a,C1.geta(&a) + 3) - return a.a -end - -assert(usethem() == 4) \ No newline at end of file diff --git a/samples/Terra/incomplete.t b/samples/Terra/incomplete.t deleted file mode 100644 index 8b1d4662..00000000 --- a/samples/Terra/incomplete.t +++ /dev/null @@ -1,32 +0,0 @@ - - -struct A - -terra foo(a : &A) - return a -end - -assert(nil == foo(nil)) -assert(false == A:iscomplete()) - - -struct A { - b : int -} - -terra foo2(a : &A) - a.b = 6 - return @a -end - -foo2:compile() -assert(true == A:iscomplete()) - -local ptr = terralib.new(A) - -ptr.b = 4 - -local r = foo2(ptr) - -assert(r.b == 6) -assert(ptr.b == 6) \ No newline at end of file diff --git a/samples/Terra/incomplete2.t b/samples/Terra/incomplete2.t deleted file mode 100644 index 17223680..00000000 --- a/samples/Terra/incomplete2.t +++ /dev/null @@ -1,25 +0,0 @@ - -struct A { - b : &B -} and -struct B - - -terra foo() - var a : A - a.b = nil - return a -end - -local a = foo() - - -struct B { - a : int -} - -terra foo2(a : &A) - a.b = a.b + 1 -end - -foo2(a) diff --git a/samples/Terra/incomplete3.t b/samples/Terra/incomplete3.t deleted file mode 100644 index c23bb9be..00000000 --- a/samples/Terra/incomplete3.t +++ /dev/null @@ -1,29 +0,0 @@ - -struct A { - b : B -> C -} and -struct B and struct C - - -terra foo() - var a : A - a.b = nil - return a -end - -local a = foo() - - -struct B { - a : int -} -struct C { - b : int -} - -terra foo2(a : &A) - var ptrb : &B - var c = a.b(@ptrb) -end - -foo2:compile() \ No newline at end of file diff --git a/samples/Terra/incomplete4.t b/samples/Terra/incomplete4.t deleted file mode 100644 index 765eadc1..00000000 --- a/samples/Terra/incomplete4.t +++ /dev/null @@ -1,22 +0,0 @@ - - -struct A - -terra foo(a : &A) - return a -end - -assert(nil == foo(nil)) -assert(false == A:iscomplete()) - - -struct A { - b : int -} - -terra foo2(a : &A) - return a.b -end - -foo2:compile() -assert(true == A:iscomplete()) diff --git a/samples/Terra/incomplete5.t b/samples/Terra/incomplete5.t deleted file mode 100644 index 444b451e..00000000 --- a/samples/Terra/incomplete5.t +++ /dev/null @@ -1,65 +0,0 @@ - - - ---terra things that should complete the type -local ct = {} - ---terra things that should not complete the type -local dct = {} - - - -function ct.a(A) - return terra(a : A) return a end -end - -function ct.b(A) - return terra() var a : A end -end - -function ct.c(A) - return terra(a : &A) return a + 1 end -end -function ct.d(A) - local at = A[3] - return terra(a : A[3]) return a[0] end -end -function ct.e(A) - local struct B { a : A } - return terra(a : B) end -end - -function dct.c(A) - local at = A[3] - return terra(a : &A[3]) return a end -end - -function dct.b(A) - return terra(a : &A) return a end -end - -function dct.d(A) - local struct B { - a : &A; - b : int - } - return terra(a : &B) return a.b end -end - - -local function testthem(stuff,completestype) - for k,v in pairs(stuff) do - local struct A - if completestype then - struct A { - a : int - } - end - local result = v(A) - result:compile() - assert(A:iscomplete() == completestype) - end -end - -testthem(ct,true) -testthem(dct,false) \ No newline at end of file diff --git a/samples/Terra/incompletetypetest.t b/samples/Terra/incompletetypetest.t deleted file mode 100644 index e35cfd90..00000000 --- a/samples/Terra/incompletetypetest.t +++ /dev/null @@ -1,13 +0,0 @@ - - -struct A { - a : int -} - - -terra what() - var a : &A = nil - return &a[4] -end - -what:compile() \ No newline at end of file diff --git a/samples/Terra/incompletetypetest2.t b/samples/Terra/incompletetypetest2.t deleted file mode 100644 index 9f48c53e..00000000 --- a/samples/Terra/incompletetypetest2.t +++ /dev/null @@ -1,13 +0,0 @@ - - -struct A { - a : int -} - - -terra what() - var a : &A = nil - return a + 4 -end - -what:compile() \ No newline at end of file diff --git a/samples/Terra/incompletetypetest3.t b/samples/Terra/incompletetypetest3.t deleted file mode 100644 index bae8aa2f..00000000 --- a/samples/Terra/incompletetypetest3.t +++ /dev/null @@ -1,13 +0,0 @@ - - -struct A { - a : int -} - - -terra what() - var a : &A = nil - return a - a -end - -what:compile() \ No newline at end of file diff --git a/samples/Terra/indexing64.t b/samples/Terra/indexing64.t deleted file mode 100644 index 4c87ff73..00000000 --- a/samples/Terra/indexing64.t +++ /dev/null @@ -1,10 +0,0 @@ - - -terra foo() - var a : int[5] - a[2] = 2 - var b = [int64](2) - return a[b] -end - -assert(foo() == 2) \ No newline at end of file diff --git a/samples/Terra/indexingbug.t b/samples/Terra/indexingbug.t deleted file mode 100644 index 0f9cee13..00000000 --- a/samples/Terra/indexingbug.t +++ /dev/null @@ -1,31 +0,0 @@ -arr = terralib.new(int[256]) - -arr[252] = 12 - -terra foo(arr : &int) - var idx = [uint8](252) - return arr[idx] -end - -terra foo2(arr : &int) - var idx = [uint8](252) - return @(arr + idx) -end - -terra foo3(arr : &int) - var idx = [int8](-3) - arr = arr + 255 - return @(arr + idx) -end - - -terra foo4(arr : &int) - var idx = [int8](-3) - arr = arr + 255 - return arr[idx] -end - -assert(foo2(arr) == 12) -assert(foo(arr) == 12) -assert(foo3(arr) == 12) -assert(foo4(arr) == 12) \ No newline at end of file diff --git a/samples/Terra/interface.t b/samples/Terra/interface.t deleted file mode 100644 index d837aa60..00000000 --- a/samples/Terra/interface.t +++ /dev/null @@ -1,33 +0,0 @@ - -IO = terralib.includec("stdio.h") -local Class = require("lib/javalike") - -struct A { - a : int -} - -terra A:foo(a : int) : int - return self.a + a -end - -local m = A.methods.foo:getdefinitions()[1] - -HasFoo = Class.interface({ foo = int -> int }) - -Class.implements(A,HasFoo) - -terra hasfoo(a : &HasFoo) - return a:foo(3) -end - -terra testit() - var a = A.alloc() - a.a = 4 - return hasfoo(a) + a:foo(5) -end - -print(m:getpointer()) -testit:compile() -print("DONE") - -assert(testit() == 16) \ No newline at end of file diff --git a/samples/Terra/interface2.t b/samples/Terra/interface2.t deleted file mode 100644 index bdb9a02d..00000000 --- a/samples/Terra/interface2.t +++ /dev/null @@ -1,38 +0,0 @@ - -IO = terralib.includec("stdio.h") -local Class = require("lib/javalike") - -HasFoo = Class.interface({ foo = int -> int }) - -struct A { - a : int -} - -terra A:foo(a : int) : int - return 1 -end -Class.implements(A,HasFoo) - -struct B {} -Class.extends(B,A) - - -struct C {} -Class.extends(C,B) - -terra C:foo(a : int) : int - return 3 -end - -terra hasfoo(a : &HasFoo) - return a:foo(3) -end - -terra testit() - var a = A.alloc() - var b = B.alloc() - var c = C.alloc() - return hasfoo(a) + hasfoo(b) + hasfoo(c) -end - -assert(testit() == 5) \ No newline at end of file diff --git a/samples/Terra/intrinsic.t b/samples/Terra/intrinsic.t deleted file mode 100644 index 8617ce5c..00000000 --- a/samples/Terra/intrinsic.t +++ /dev/null @@ -1,21 +0,0 @@ -local sqrt = terralib.intrinsic("llvm.sqrt.f32",float -> float) -local sqrt2 = terralib.intrinsic("llvm.sqrt.v4f32",vector(float,4) -> vector(float,4)) - -local sqrt3 = terralib.intrinsic(function(types) - if #types == 1 and types[1]:isvector() and types[1].type == float then - local N = types[1].N - return ("llvm.sqrt.v%df32"):format(N), vector(float,N) -> vector(float,N) - elseif #types == 1 and types[1] == float then - return "llvm.sqrt.f32",float -> float - end -end) - -terra foo() - var v = vector(1.f,2.f,3.f,4.f) - var c = sqrt2(vector(1,2,3,4)) - return sqrt(4) + c[3] + sqrt3(v)[3] + sqrt3(4.f) -end - -local test = require("test") - -test.eq(foo(),8) \ No newline at end of file diff --git a/samples/Terra/isvolatile.t b/samples/Terra/isvolatile.t deleted file mode 100644 index f293fb96..00000000 --- a/samples/Terra/isvolatile.t +++ /dev/null @@ -1,7 +0,0 @@ - - -terra foobar(a : &vector(float,4),b : vector(int,4)) - terralib.attrstore(a,b,{ isvolatile = true }) -end - -foobar:disas() diff --git a/samples/Terra/labelbug.t b/samples/Terra/labelbug.t deleted file mode 100644 index 4d996e4f..00000000 --- a/samples/Terra/labelbug.t +++ /dev/null @@ -1,5 +0,0 @@ - -terra foo() - ::alabel:: ;; - return 0 -end \ No newline at end of file diff --git a/samples/Terra/latelink.t b/samples/Terra/latelink.t deleted file mode 100644 index 43a64765..00000000 --- a/samples/Terra/latelink.t +++ /dev/null @@ -1,24 +0,0 @@ -C = terralib.includecstring [[ - typedef struct { - int a; - } S; - typedef struct { - S a; - } A; -]] -C2 = terralib.includecstring [[ - typedef struct { - int a; - } S; - typedef struct { - S a; - } B; -]] - -terra second() - var a : C2.B - var b : C.A - - a.a = b.a -end -second:disas() \ No newline at end of file diff --git a/samples/Terra/lazycstring.t b/samples/Terra/lazycstring.t deleted file mode 100644 index 3b3270a1..00000000 --- a/samples/Terra/lazycstring.t +++ /dev/null @@ -1,21 +0,0 @@ - -struct A { - a : int -} - - -print(A:cstring()) - -terra foo() - return A { 1 } -end - -struct B { - a : int -} - -terra foo2() - return B { 1 } -end - -assert(foo().a == foo2().a) \ No newline at end of file diff --git a/samples/Terra/lazylog.t b/samples/Terra/lazylog.t deleted file mode 100644 index 84bba0fa..00000000 --- a/samples/Terra/lazylog.t +++ /dev/null @@ -1,61 +0,0 @@ -local function gentrees(depth) - local function treetostring(tree) - if type(tree) == "string" then return tree - elseif tree.rhs then return "(" .. treetostring(tree.lhs) .. " " .. tree.op .. " " .. treetostring(tree.rhs) .. ")" - else return "(" .. tree.op .. " " .. treetostring(tree.lhs) .. ")" end - end - local function gendepth(depth) - local trees = {} - table.insert(trees, "%s") - if depth == 0 then return trees end - local subtrees = gendepth(depth - 1) - for _,t0 in ipairs(subtrees) do - table.insert(trees, { lhs = t0, op = "not" }) - for _,t1 in ipairs(subtrees) do - table.insert(trees, { lhs = t0, rhs = t1, op = "and" }) - table.insert(trees, { lhs = t0, rhs = t1, op = "or" }) - end - end - return trees - end - local trees = gendepth(depth) - local nargs = 2 ^ depth - local argassign = "local i0" - local targs = "return terra(i0 : bool" - local args = {"i0"} - for i = 1, nargs - 1 do - local arg = "i"..tostring(i) - table.insert(args,arg) - argassign = argassign .. ", " .. arg - targs = targs .. ", " .. arg .. " : bool" - end - argassign = argassign .. " = ..." - targs = targs .. ")" - - argassign = argassign .. "\nreturn " - targs = targs .. "\nreturn " - for treeno,t in ipairs(trees) do - local line = string.format(treetostring(t),unpack(args)) - io.write(string.format("\r%3d%% %s",treeno/#trees * 100,line)) - local lcode = argassign .. line - local tcode = targs .. line .. " end" - local lfn = assert(loadstring(lcode)) - local tfn = assert(terralib.loadstring(tcode))() - tfn:compile() - local states = 2 ^ nargs - local actuals = {} - local band = bit.band - local blshift = bit.lshift - for i = 0, states - 1 do - for s = 1, nargs do - actuals[s] = 0 ~= band(i,blshift(1,s-1)) - end - local result = lfn(unpack(actuals)) - local result2 = tfn(unpack(actuals)) - assert(result == result2) - end - end - io.write("\n") -end - -gentrees(2) \ No newline at end of file diff --git a/samples/Terra/leaktest.t b/samples/Terra/leaktest.t deleted file mode 100644 index d49ff6bb..00000000 --- a/samples/Terra/leaktest.t +++ /dev/null @@ -1,27 +0,0 @@ -local leak = require "lib.leak" - -function make() - local terra a(x:int) - return x+1 - end - - local terra b(x:int) - return a(x) - end - - return b(12),leak.track(b) -end -nan = 0/0 -res,t=make() -assert(res == 13) -local gcd, path = leak.find(t) -if gcd then - print(path) - assert(false) -end - -l = leak.track(leak) -foo = 0/0 -local f,p = leak.find(l) -assert(f) -assert(p == "$locals.leak") \ No newline at end of file diff --git a/samples/Terra/let1.t b/samples/Terra/let1.t deleted file mode 100644 index 2363cc7f..00000000 --- a/samples/Terra/let1.t +++ /dev/null @@ -1,15 +0,0 @@ - - -terra foo() - return (1),(2) -end - -terra bar() - var c = [quote var a = 3 in a end] - var d = 5 - c = c + 10 - return [quote var a = 3 in [quote var b = 4 in a + b + c + d end] end] -end -local test = require("test") -test.meq({1,2},foo()) -assert(25 == bar()) diff --git a/samples/Terra/let2.t b/samples/Terra/let2.t deleted file mode 100644 index 273984a2..00000000 --- a/samples/Terra/let2.t +++ /dev/null @@ -1,64 +0,0 @@ - - -local a = -quote - var b = 1 -in - b + 0, b + 1 -end - -terra f0() - return (a) -end -terra f1() - return a -end -terra f2() - a -end -local test = require("test") -test.meq({1,2},f0()) -test.meq({1,2},f1()) - -local c = symbol() -local b = -quote - var [c] = 3 -in - c,c+1 -end - -terra f3() - b - return ([c]) -end -assert(f3() == 3) - -a = global(1) -local emptyexp = quote - a = a + 1 -end - -local emptystmts = {4,3} - -local both = quote -in 4,[quote a = a + 1 in 3 end] -end - -terra bar(a : int, b : int) - return a + b -end -terra bar2(a : int, b : int, c : {}) - return a + b -end -terra f4() - return bar(emptystmts) + bar2(1,2,emptyexp) + a -end - -assert(f4() == 12) - -terra f5() - return bar(both._0,both._0) + a -end - -assert(f5() == 12) \ No newline at end of file diff --git a/samples/Terra/linkllvm.t b/samples/Terra/linkllvm.t deleted file mode 100644 index 852f503f..00000000 --- a/samples/Terra/linkllvm.t +++ /dev/null @@ -1,13 +0,0 @@ - - -terra add(a : int, b : int) - return a + b -end - - -terralib.saveobj("add.bc",{ add = add }) - -local addlib = terralib.linkllvm("add.bc") -add2 = addlib:extern("add", {int,int} -> int) - -assert(add2(3,4) == 7) \ No newline at end of file diff --git a/samples/Terra/localenv.t b/samples/Terra/localenv.t deleted file mode 100644 index da37d91a..00000000 --- a/samples/Terra/localenv.t +++ /dev/null @@ -1,46 +0,0 @@ - -local a = 4 -b = 3 -local terra foo() - return a + b -end -local terra bar() - return foo() -end -local test = require("test") - -test.eq(foo(),7) -test.eq(bar(),7) - -terra nested() - return [ (function(a) return a + b end)(8) ] -end -terra nested2() - return [ a + b ] -end -local c = {} -local d = {} -local vv = {} -local b = 3 -local e = 8 -g = 1 -local dd = 8 - aa = global(10) -terra nested3() - var luav = 8 - return [ (function() - local b = 5 - function c.b() return 7 end - local f = 7 - vv.bb = global(aa:get()) - terra d.c() return e + f + g + vv.bb + [ `dd ] end - return b + a - end)() ] -end - -test.eq(nested(),11) - -test.eq(nested2(),7) -test.eq(nested3(),9) -test.eq(c.b(),7) -test.eq(d.c(),34) \ No newline at end of file diff --git a/samples/Terra/localenv2.t b/samples/Terra/localenv2.t deleted file mode 100644 index 355602ba..00000000 --- a/samples/Terra/localenv2.t +++ /dev/null @@ -1,7 +0,0 @@ - -local dd = 8 -terra nested3() - return [ `dd ] -end -local test = require("test") -test.eq(nested3(),8) \ No newline at end of file diff --git a/samples/Terra/logical.t b/samples/Terra/logical.t deleted file mode 100644 index 7e4f7523..00000000 --- a/samples/Terra/logical.t +++ /dev/null @@ -1,33 +0,0 @@ - - -local T = true -local F = false - -terra check() - var a = true - return not true == false -end - -assert(check() == true) - -terra check2() - return not T == F -end - -assert(check2() == true) - -terra check3() - return not T == not not T -end - -assert(check3() == false) - -terra check4() - return not not T == T and not not F == F and true == T and false == F -end - -assert(check4() == true) - -terra foo() return not false end - -assert(foo() == true) \ No newline at end of file diff --git a/samples/Terra/luabridge.t b/samples/Terra/luabridge.t deleted file mode 100644 index d7fcb285..00000000 --- a/samples/Terra/luabridge.t +++ /dev/null @@ -1,18 +0,0 @@ -struct A { a : int, b : double } - -terra foo(a : A) - return a.a + a.b -end - - -terra foo2(a : A) - return a.a + a.b,a.a -end - -local test = require("test") - -test.eq( foo( {a = 1,b = 2.3} ), 3.3 ) -test.eq( foo( {1,2.3} ), 3.3 ) -test.eq( foo( {b = 1, a = 2.3} ),3 ) - -test.meq({3.3,1},foo2( { a = 1, b = 2.3} )) \ No newline at end of file diff --git a/samples/Terra/luabridge2.t b/samples/Terra/luabridge2.t deleted file mode 100644 index f4d86412..00000000 --- a/samples/Terra/luabridge2.t +++ /dev/null @@ -1,92 +0,0 @@ -struct A { a : int, b : double } - -terra returnstruct() - var a = A { 1, 2.5} - return a -end -terra returnstruct2() - var a = A { 1, 2.5} - var b = A { 2, 3.5} - return a,b -end - -terra returnarray() - var a : int[4] = array(1,2,3,4) - return a -end -terra returnarray2() - var a : int[4] = array(1,2,3,4) - var b : int[4] = array(5,6,7,8) - return a,b -end - -terra returnaos() - var a : A[2] = arrayof(A, {1,2.5}, {2,3.5} ) - return a -end -struct B { a : int[4] } -terra returnsoa() - var a = B { array(1,2,3,4) } - return a -end - -global_a = global(A) -global_a:set( {3, 4.5}) - -terra retstructptr() - return &global_a -end -terra structptr(a : &A) - return a.a + a.b -end - -global_arr = global(int[2]) -global_arr:set({3,4}) - -terra retarrptr() - return &global_arr -end -terra arrptr(a : &int[2]) - return (@a)[0] + a[0][1] -end - -local test = require("test") -local a0 = returnstruct() -test.eq(a0.a,1) -test.eq(a0.b,2.5) -local a1,b1 = terralib.unpackstruct(returnstruct2()) -test.eq(a1.a,1) -test.eq(a1.b,2.5) -test.eq(b1.a,2) -test.eq(b1.b,3.5) ---[[ C doesn't actually allow you to return arrays directly -local arr = returnarray() -test.eq(arr[0],1) -test.eq(arr[1],2) -test.eq(arr[2],3) -test.eq(arr[3],4) -local arr2,arr3 = returnarray2() -test.eq(arr2[0],1) -test.eq(arr2[1],2) -test.eq(arr2[2],3) -test.eq(arr2[3],4) -test.eq(arr3[0],5) -test.eq(arr3[1],6) -test.eq(arr3[2],7) -test.eq(arr3[3],8) -local arr4 = returnaos() -test.eq(arr4[0].a,1) -test.eq(arr4[1].b,3.5) -]] - -local arr5 = returnsoa() -test.eq(arr5.a[0],1) -test.eq(arr5.a[3],4) -local ptrret = retstructptr() -test.eq(ptrret[0].a,3) -test.eq(ptrret[0].b,4.5) -test.eq(structptr(ptrret),7.5) -local ptrarr = retarrptr() -test.eq(ptrarr[0][0],3) -test.eq(ptrarr[0][1],4) -test.eq(arrptr(ptrarr),7) \ No newline at end of file diff --git a/samples/Terra/luabridgefn.t b/samples/Terra/luabridgefn.t deleted file mode 100644 index 488e4f9e..00000000 --- a/samples/Terra/luabridgefn.t +++ /dev/null @@ -1,23 +0,0 @@ - -terra plus1(a : int) - return a + int(1) -end - -terra afn() : int -> int - return plus1 -end - -terra doit(a : int, b : int -> int) - return b(a) -end - -local test = require("test") - -local foobar = afn() -test.eq(foobar(3),4) -test.eq(doit(4,foobar),5) -local function whatwhat(a) - print("I GOT A ", a) - return a + 3 -end -test.eq(doit(5,whatwhat),8) diff --git a/samples/Terra/luabridgerec.t b/samples/Terra/luabridgerec.t deleted file mode 100644 index b5a5ad23..00000000 --- a/samples/Terra/luabridgerec.t +++ /dev/null @@ -1,10 +0,0 @@ - -struct A { a : &A, b : int } - -terra foo(a : A) - return a.b -end - -local test = require("test") - -test.eq(foo({b = 5}),5) diff --git a/samples/Terra/luabridgeunion.t b/samples/Terra/luabridgeunion.t deleted file mode 100644 index 8866866f..00000000 --- a/samples/Terra/luabridgeunion.t +++ /dev/null @@ -1,14 +0,0 @@ -struct A { union {a : int, b : double}, c : int } - -terra foo(a : A) - return a.a + a.c -end -terra foo2(a : A) - return a.b + a.c -end - - -local test = require("test") - -test.eq( foo({a = 4, c = 6}), 10) -test.eq( foo2({b = 4.4, c = 6}), 10.4) \ No newline at end of file diff --git a/samples/Terra/luaterramethod.t b/samples/Terra/luaterramethod.t deleted file mode 100644 index 8cad2f52..00000000 --- a/samples/Terra/luaterramethod.t +++ /dev/null @@ -1,40 +0,0 @@ - - -struct Foo { - a : int; - b : int; -} - -terra Foo:bar() - self.a = self.a + 1 - return self.a + self.b -end - -Foo.methods.baz = function(self) print(self.a,self.b) end -Foo.methods.mac = macro(function() return `1 end) - -terra usemethod() - var a = Foo { 3, 4} - a:baz() - return a:bar() -end -assert(8 == usemethod()) - -obj = terralib.new(Foo[1], {{3,4}}) - -assert(8 == obj[0]:bar()) -assert(9 == obj[0]:bar()) -obj[0]:baz() - -local a,b = pcall(function() -obj[0]:mac() -end) -assert(not a) -assert(string.match(b,"not supported")) - -local a,b = pcall(function() -obj[0]:maz() -end) - -assert(not a) -assert(string.match(b,"attempt to call method")) \ No newline at end of file diff --git a/samples/Terra/lvaluepointer.t b/samples/Terra/lvaluepointer.t deleted file mode 100644 index 1e3855ba..00000000 --- a/samples/Terra/lvaluepointer.t +++ /dev/null @@ -1,10 +0,0 @@ - - -terra foo() - var a : int = 5 - var pa = &a - @pa = 4 - @[&float](pa) = 5 -end - -foo() \ No newline at end of file diff --git a/samples/Terra/lvaluequote.t b/samples/Terra/lvaluequote.t deleted file mode 100644 index 56f4536e..00000000 --- a/samples/Terra/lvaluequote.t +++ /dev/null @@ -1,22 +0,0 @@ - - -checkl = macro(function(a) - assert(a:islvalue()) - return a -end) - -checkr = macro(function(a) - assert(not a:islvalue()) - return a -end) - - -terra testit() - - var a = checkr(4) - var b = checkr(checkl(a) + 3) - var c = checkl([quote var d = 5 in d end]) - return a + b + c -end - -assert(4+7+5 == testit()) diff --git a/samples/Terra/lvaluetreelist.t b/samples/Terra/lvaluetreelist.t deleted file mode 100644 index cfc01a57..00000000 --- a/samples/Terra/lvaluetreelist.t +++ /dev/null @@ -1,9 +0,0 @@ - - -terra foobar() - var a = 4 - @&[quote in a end] = 5 - return a -end - -assert(foobar() == 5) \ No newline at end of file diff --git a/samples/Terra/macro.t b/samples/Terra/macro.t deleted file mode 100644 index 3c8afcf5..00000000 --- a/samples/Terra/macro.t +++ /dev/null @@ -1,50 +0,0 @@ - -local bar = terralib.internalmacro(function(ctx,tree,typ) - return terralib.newtree(typ.tree, { kind = terralib.kinds.literal, type = double, value = 4.0 }) - -end) - -local bar2 = macro(function(typ) - return typ - -end) - - -local bar3 = macro(function(a,b) - return {a.tree,b.tree} -end) - -terra up(v : &int) - @v = @v + 1 -end - -local bar4 = macro(function() - local terra myfn() - return 42 - end - return myfn -end) - -moo = global(int,3) - -local bar4 = macro(function() - local terra myfn() - return 42 - end - return myfn -end) - -local bar5 = macro(function() - return moo -end) - -terra foo() : int - var a : int = bar(int,int16,int32) - bar2(a) = bar2(a) + 5 - bar3(up(&a),up(&a)) - bar5() = bar5() + 1 - return a + bar4()() + moo -end - -local test = require("test") -test.eq(57,foo()) diff --git a/samples/Terra/macro2.t b/samples/Terra/macro2.t deleted file mode 100644 index c910bb14..00000000 --- a/samples/Terra/macro2.t +++ /dev/null @@ -1,14 +0,0 @@ - -local bar2 = macro(function(typ) - return typ - -end) - -terra foo() : int - var a = 3 - bar2(a) = bar2(a) + 5 - return a -end - -local test = require("test") -test.eq(8,foo()) diff --git a/samples/Terra/macro3.t b/samples/Terra/macro3.t deleted file mode 100644 index 9b1015c8..00000000 --- a/samples/Terra/macro3.t +++ /dev/null @@ -1,14 +0,0 @@ - - -foo = macro(function() - local terra bar() - return 3 - end - return bar -end) - -terra baz() - return foo()() -end - -assert(baz() == 3) \ No newline at end of file diff --git a/samples/Terra/macrokey.t b/samples/Terra/macrokey.t deleted file mode 100644 index 329b92aa..00000000 --- a/samples/Terra/macrokey.t +++ /dev/null @@ -1,9 +0,0 @@ - -what = function() return "abcd" end - -terra foo() - var a = { [what()] = 4 } - return a.abcd -end -local test = require("test") -test.eq(foo(),4) \ No newline at end of file diff --git a/samples/Terra/macrolet.t b/samples/Terra/macrolet.t deleted file mode 100644 index f6343823..00000000 --- a/samples/Terra/macrolet.t +++ /dev/null @@ -1,17 +0,0 @@ - - -twice = macro(function(a) - return quote - var v = a - in - v + v - end -end) - - -terra foobar() - var what = 1 - return twice([quote what = what + 1 in what end]) + what -end - -assert(6 == foobar()) \ No newline at end of file diff --git a/samples/Terra/macroselect.t b/samples/Terra/macroselect.t deleted file mode 100644 index 31c18f6c..00000000 --- a/samples/Terra/macroselect.t +++ /dev/null @@ -1,11 +0,0 @@ - -struct A { a : int, b : int } - -local c = "b" -terra foo() - var a = A {1,2} - return a.[c] -end - -local test = require("test") -test.eq(foo(),2) \ No newline at end of file diff --git a/samples/Terra/macrotest.t b/samples/Terra/macrotest.t deleted file mode 100644 index 707e6b6e..00000000 --- a/samples/Terra/macrotest.t +++ /dev/null @@ -1,9 +0,0 @@ -C = terralib.includecstring [[ -#define foo 1 -#define foo2 -3.4 -#undef foo -#define foo 3 -]] - -assert(C.foo == 3) -assert(C.foo2 == -3.4) \ No newline at end of file diff --git a/samples/Terra/malloc.t b/samples/Terra/malloc.t deleted file mode 100644 index 6672bfdd..00000000 --- a/samples/Terra/malloc.t +++ /dev/null @@ -1,23 +0,0 @@ -local c = terralib.includecstring [[ - #include - #include -]] - -local N = 10 -terra foo() - c.printf("size = %d\n",int(sizeof(int))) - var list = [&int](c.malloc(sizeof(int)*N)) - for i = 0,N do - list[i] = i + 1 - end - var result = 0 - for i = 0,N do - c.printf("%d = %d\n",int(i),list[i]) - result = result + list[i] - end - c.free([&uint8](list)) - return result -end - -local test = require("test") -test.eq(foo(),N*(1 + N)/2) diff --git a/samples/Terra/mathlib.t b/samples/Terra/mathlib.t deleted file mode 100644 index 26af6cc8..00000000 --- a/samples/Terra/mathlib.t +++ /dev/null @@ -1,9 +0,0 @@ -local c = terralib.includec("math.h") - -terra mysqrt(a : float) - return c.sqrtf(a) -end - -local test = require("test") -test.eq(mysqrt(4),2) -test.eq(mysqrt(9),3) \ No newline at end of file diff --git a/samples/Terra/metatype.t b/samples/Terra/metatype.t deleted file mode 100644 index bd8cdd64..00000000 --- a/samples/Terra/metatype.t +++ /dev/null @@ -1,16 +0,0 @@ -local function foo(T) - terra T:what() - return self.a + self.b - end -end -struct A(foo) { - a : int; - b : int; -} - -terra test() - var a = A {1,2} - return a:what() -end - -assert(test() == 3) \ No newline at end of file diff --git a/samples/Terra/method.t b/samples/Terra/method.t deleted file mode 100644 index 7e38fa45..00000000 --- a/samples/Terra/method.t +++ /dev/null @@ -1,42 +0,0 @@ ---the zero line -struct A { b : B } and -struct B {a : int, b : int} - -B.methods.foo = terra(b : B) - return b.a -end -terra bar() - var b = B { 1,2 } - return b:foo() -end - - -B.methods.foo2 = terra(b : &B) - b.a = 6 -end - -terra bar2() - var b = B { 1,2 } - b:foo2() - return b.a -end - -B.methods.foo3 = terra(b : B) - return b.a -end - -terra bar3() - var b = B { 1,2 } - return (&b):foo3() -end -terra bar4() - var b = B { 1,2 } - (&b):foo2() - return b.a -end - -test = require("test") -test.eq(bar(),1) -test.eq(bar2(),6) -test.eq(bar3(),1) -test.eq(bar4(),6) \ No newline at end of file diff --git a/samples/Terra/methodantiquote.t b/samples/Terra/methodantiquote.t deleted file mode 100644 index 6fbb79ad..00000000 --- a/samples/Terra/methodantiquote.t +++ /dev/null @@ -1,18 +0,0 @@ ---the zero line -M = {} -struct M.B {a : int, b : int} - -terra M.B:foo(a : int) - return self.a + a -end - - -local avar = "foo" - -terra bar() - var b = M.B { 1,2 } - return b:[avar](3) -end - -test = require("test") -test.eq(bar(),4) diff --git a/samples/Terra/methodmissing.t b/samples/Terra/methodmissing.t deleted file mode 100644 index b60cd5cf..00000000 --- a/samples/Terra/methodmissing.t +++ /dev/null @@ -1,17 +0,0 @@ - - -struct A { - a : int -} - -A.metamethods.__methodmissing = macro(function(methodname,obj,anarg) - print(methodname) - return `anarg + [string.byte(methodname,1,1)] -end) - -terra foobar() - var a : A - return a:a(3) + a:b(4) -end - -assert(foobar() == 202) \ No newline at end of file diff --git a/samples/Terra/methodrvalue.t b/samples/Terra/methodrvalue.t deleted file mode 100644 index 13513b98..00000000 --- a/samples/Terra/methodrvalue.t +++ /dev/null @@ -1,18 +0,0 @@ ---the zero line -M = {} -struct M.B {a : int, b : int} - -terra M.B:foo(a : int) - return self.a + a -end - -terra rify() - var a = M.B { 1,2} - return a -end -terra bar() - return (rify()):foo(3) -end - -test = require("test") -test.eq(bar(),4) diff --git a/samples/Terra/methodsugar.t b/samples/Terra/methodsugar.t deleted file mode 100644 index 473f9521..00000000 --- a/samples/Terra/methodsugar.t +++ /dev/null @@ -1,15 +0,0 @@ ---the zero line -M = {} -struct M.B {a : int, b : int} - -terra M.B:foo(a : int) - return self.a + a -end - -terra bar() - var b = M.B { 1,2 } - return b:foo(3) -end - -test = require("test") -test.eq(bar(),4) diff --git a/samples/Terra/missingfields.t b/samples/Terra/missingfields.t deleted file mode 100644 index acd09f2d..00000000 --- a/samples/Terra/missingfields.t +++ /dev/null @@ -1,14 +0,0 @@ -test = terralib.includecstring([[ - typedef struct {} emptyanon; - typedef struct foo foobar; - void test(struct foo * f); - struct foo { int x; }; - union ufoo; - typedef union { int a; int b; } anonunion; -]]) -terra main() - var s : test.foo - s.x = 1 -end - -main() \ No newline at end of file diff --git a/samples/Terra/mixed.t b/samples/Terra/mixed.t deleted file mode 100644 index 267bf814..00000000 --- a/samples/Terra/mixed.t +++ /dev/null @@ -1,13 +0,0 @@ -a = terra() return 4 end -local d = {} -do - struct A{} - and local terra a() return 5 end - and terra d.d(a : B) end - and terra B:a() end - and struct B {} - and terra c() end - and struct C {} - assert(a() == 5) -end -assert(a() == 4) \ No newline at end of file diff --git a/samples/Terra/multiconstructor.t b/samples/Terra/multiconstructor.t deleted file mode 100644 index b9bdd6d1..00000000 --- a/samples/Terra/multiconstructor.t +++ /dev/null @@ -1,17 +0,0 @@ - -terra foo() : {double, double} - return 1.0,3.0 -end - -struct A {c : int, a : int, b : double } - -terra bar() - var r = foo() - var a = A {1,unpackstruct(r)} - var b = A {1,2,(foo())._0} - var c = A {c = 1,a = 2,b = foo()._0} - return a.c + a.a + a.b + b.c + c.c -end - -local test = require("test") -test.eq(7,bar()) \ No newline at end of file diff --git a/samples/Terra/multimacro.t b/samples/Terra/multimacro.t deleted file mode 100644 index b0d72374..00000000 --- a/samples/Terra/multimacro.t +++ /dev/null @@ -1,17 +0,0 @@ - -local bar = terralib.internalmacro(function(ctx,tree,typ,x) - return {terralib.newtree(typ.tree, { kind = terralib.kinds.literal, type = double, value = 4.0 }), x } -end) - -local x,y,z = 1,2,3 - -terra foo() : int - var a,b = bar(int,x + y + z) - var c = bar(int,0)._0 + 1 - --bar2(int) = bar2(int) + 5 - --bar3(up(&a),up(&a)) - return a + b + c -end - -local test = require("test") -test.eq(15,foo()) diff --git a/samples/Terra/multiterra.t b/samples/Terra/multiterra.t deleted file mode 100644 index 28a97b42..00000000 --- a/samples/Terra/multiterra.t +++ /dev/null @@ -1,79 +0,0 @@ -local ffi = require("ffi") - -C = terralib.includecstring [[ -#ifndef _WIN32 -#include -#endif -#include -typedef struct lua_State lua_State; -lua_State * luaL_newstate(); -int terra_init(lua_State * L); -int luaL_openlibs(lua_State * L); -int luaL_loadstring(lua_State * L, const char *); -int lua_close(lua_State * L); -void lua_call(lua_State * L, int,int); -int lua_pushnumber(lua_State * L, double); -int terra_loadstring(lua_State *L, const char *s); -double luaL_checknumber(lua_State * L,int); -]] - -if ffi.os == "Windows" then - -- fake it on windows - C.pthread_t = int - C.pthread_create = terra(t : &int, stuff : &opaque,fn : &opaque -> &opaque, data : &opaque) - return fn(data) - end - C.pthread_join = terra(t : int, stuff : &opaque) - end -end - - -N = 4 - -local acc = global(int[N]) - -terra forkedFn(args : &opaque) : &opaque - var threadid = @[&int](args) - C.printf("threadid %d\n",threadid) - - var L = C.luaL_newstate(); - if L == nil then - C.printf("can't initialize luajit\n") - end - - C.luaL_openlibs(L) - C.terra_init(L) - - C.terra_loadstring(L, [[ a = ...; C = terralib.includec("stdio.h"); terra foo () C.printf("new terra %d\n",a) return a end; return foo() ]]) - C.lua_pushnumber(L,threadid) - C.lua_call(L,1,1) - acc[threadid] = C.luaL_checknumber(L,-1) - C.lua_close(L) - - return nil -end - -terra foo() - var thread : C.pthread_t[N] - for i = 0,N do - acc[i] = -1 - end - - var args : int[N] - for i = 0,N do - args[i] = i - C.pthread_create(&thread[i],nil,forkedFn,&args[i]) - end - - for i = 0,N do - C.pthread_join(thread[i],nil) - end - var sum = 0 - for i = 0,N do - sum = sum + acc[i] - end - return sum -end - -print(foo()) -assert(foo() == N * (N - 1) / 2) \ No newline at end of file diff --git a/samples/Terra/names.t b/samples/Terra/names.t deleted file mode 100644 index 3bfd6187..00000000 --- a/samples/Terra/names.t +++ /dev/null @@ -1,16 +0,0 @@ -struct A { -} - -local B = (function() - local struct A {} - return A -end)() -C = terralib.types.newstruct("A$1") -D = terralib.types.newstruct("A$1") - -local names = {} -for i,t in ipairs {A,B,C,D} do - local n = tostring(t) - assert(not names[n]) - names[n] = true -end \ No newline at end of file diff --git a/samples/Terra/nestedcalls.t b/samples/Terra/nestedcalls.t deleted file mode 100644 index d9410798..00000000 --- a/samples/Terra/nestedcalls.t +++ /dev/null @@ -1,11 +0,0 @@ - -terra foo3(a : &int) : &int - return a -end - -terra bar2(a : int) - return @(foo3(&a)) -end - -local test = require("test") -test.eq(bar2(42),42) \ No newline at end of file diff --git a/samples/Terra/nestextract.t b/samples/Terra/nestextract.t deleted file mode 100644 index 13a15db3..00000000 --- a/samples/Terra/nestextract.t +++ /dev/null @@ -1,40 +0,0 @@ - - -struct A { - a : int -} - -count = global(int,0) - -terra twoAs(a : int) - return A {a}, A { a } -end - -function A.metamethods.__cast(fromt,tot,exp) - if tot == A and fromt == int then - return `twoAs(exp)._0 - end - error("what") -end - -terra twoInts() - count = count + 1 - return count,2 -end - -terra takesAnA(a : A) - return a.a -end - -dotwice = macro(function(exp) - return {exp,exp} -end) - -terra doit() - return dotwice(takesAnA((twoInts()._0))) -end - - -doit:printpretty() -local test = require("test") -test.meq({1,2},doit()) diff --git a/samples/Terra/nestnoerror.t b/samples/Terra/nestnoerror.t deleted file mode 100644 index c0a41500..00000000 --- a/samples/Terra/nestnoerror.t +++ /dev/null @@ -1,17 +0,0 @@ - - -terra haserror() - return (1):foo() -end - -local m = macro(function() - local success = pcall(function() haserror:compile() end) - assert(not success) - return 1 -end) - -terra noerror() - return m() -end - -assert(1 == noerror()) \ No newline at end of file diff --git a/samples/Terra/new.t b/samples/Terra/new.t deleted file mode 100644 index 0029c19d..00000000 --- a/samples/Terra/new.t +++ /dev/null @@ -1,14 +0,0 @@ -local c = terralib.includec("stdlib.h") - -new = macro(function(typquote) - local typ = typquote:astype() - return `[&typ](c.malloc(sizeof(typ))) -end) - -local typ = int -terra doit() - var a : &int = new(int) - return a -end - -doit() \ No newline at end of file diff --git a/samples/Terra/nillocal.t b/samples/Terra/nillocal.t deleted file mode 100644 index 93c415c0..00000000 --- a/samples/Terra/nillocal.t +++ /dev/null @@ -1,6 +0,0 @@ - -a = 4 -local a = nil - -terra foo() return [assert(not a)] end -assert(foo() == true) \ No newline at end of file diff --git a/samples/Terra/niltype.t b/samples/Terra/niltype.t deleted file mode 100644 index b8b0000d..00000000 --- a/samples/Terra/niltype.t +++ /dev/null @@ -1,9 +0,0 @@ - -terra foo() - var a : &int = nil - var b = nil - return a == b -end - -local test = require("test") -test.eq(foo(),true) \ No newline at end of file diff --git a/samples/Terra/nojit.t b/samples/Terra/nojit.t deleted file mode 100644 index 46b66331..00000000 --- a/samples/Terra/nojit.t +++ /dev/null @@ -1,20 +0,0 @@ - - ---var a = 4 + 5 -a = global(4 + 5) -terra foo() - return a -end - - -foo:gettype() ---we currently don't track what initializers need to be run after a nojit compile ---hopefully we can just remove the need to have nojit entirely ---otherwise we need to seperate the calling of variable initializers from the compilation process ---so that they can be called when jit is invoked -a:gettype() - -local test = require("test") -test.eq(foo(),9) - - diff --git a/samples/Terra/nolengthop.t b/samples/Terra/nolengthop.t deleted file mode 100644 index ceac4581..00000000 --- a/samples/Terra/nolengthop.t +++ /dev/null @@ -1,2 +0,0 @@ -local a,b = terralib.loadstring([[terra g() return #a]]) -assert(b:find("operator not supported")) \ No newline at end of file diff --git a/samples/Terra/nonprototypec.t b/samples/Terra/nonprototypec.t deleted file mode 100644 index 36256bb6..00000000 --- a/samples/Terra/nonprototypec.t +++ /dev/null @@ -1,12 +0,0 @@ -C = terralib.includecstring [[ - int foobar() { - return 3; - } -]] - - -terra doit() - return C.foobar() -end - -print(doit()) \ No newline at end of file diff --git a/samples/Terra/nontemporal.t b/samples/Terra/nontemporal.t deleted file mode 100644 index 2e634783..00000000 --- a/samples/Terra/nontemporal.t +++ /dev/null @@ -1,7 +0,0 @@ - - -terra foobar(a : &vector(float,4),b : vector(int,4)) - terralib.attrstore(a,b,{ nontemporal = true }) -end - -foobar:disas() diff --git a/samples/Terra/numliteral.t b/samples/Terra/numliteral.t deleted file mode 100644 index 9d5183ec..00000000 --- a/samples/Terra/numliteral.t +++ /dev/null @@ -1,14 +0,0 @@ - -terra thetest() - var a,b,c,d,e = 3,3.0,3.f,3LL, 3ULL - return a,b,c,d,e -end - -local exp = { "int32", "double", "float", "int64", "uint64" } - -local test = require("test") -thetest:compile() -local typ = thetest.definitions[1]:gettype() -for i,e in ipairs(typ.returntype:getentries()) do - test.eq(tostring(e.type),exp[i]) -end \ No newline at end of file diff --git a/samples/Terra/objc.t b/samples/Terra/objc.t deleted file mode 100644 index 134f5a48..00000000 --- a/samples/Terra/objc.t +++ /dev/null @@ -1,25 +0,0 @@ -local f = assert(io.popen("uname", 'r')) -local s = assert(f:read('*a')) -f:close() - -if s~="Darwin\n" then - print("Warning, not running test b/c this isn't a mac") -else - -local OC = require("lib/objc") - -terra main() - OC.NSAutoreleasePool:new() - var str = OC.NSString:stringWithUTF8String("the number of hacks is overwhelming...") - var err = OC.NSError:errorWithDomain_code_userInfo(str,12,nil) - var alert = OC.NSAlert:alertWithError(err) - - var imgname = OC.NSString:stringWithUTF8String("foo.png") - var img = OC.NSImage:alloc():initByReferencingFile(imgname) - alert:setIcon(img) - alert:runModal() -end - -terralib.saveobj("objc",{main = main}, { "-framework", "Foundation", "-framework", "Cocoa" }) - -end \ No newline at end of file diff --git a/samples/Terra/objc2.t b/samples/Terra/objc2.t deleted file mode 100644 index d92e1bde..00000000 --- a/samples/Terra/objc2.t +++ /dev/null @@ -1,42 +0,0 @@ -local f = assert(io.popen("uname", 'r')) -local s = assert(f:read('*a')) -f:close() - -if s~="Darwin\n" then - print("Warning, not running test b/c this isn't a mac") -else - - -local OC = require("lib/objc") -local IO = terralib.includec("stdio.h") - -struct Rect { - a : double, - b : double, - c : double, - d : double -} - -terra str(data : &uint8) - return OC.NSString:stringWithUTF8String(data) -end - -terra main() - OC.NSAutoreleasePool:new() - var app = OC.NSApplication:sharedApplication() - var rec = Rect {0,0,200,200} - var window = OC.NSWindow:alloc():initWithContentRect_styleMask_backing_defer(rec,1,2,false) - window:makeKeyAndOrderFront(nil) - --[[var img = OC.NSImage:alloc():initByReferencingFile(str("objc2.jpg")) - var imgView = OC.NSImageView:alloc():initWithFrame(rec) - imgView:setImage(img) - window:setContentView(imgView) - IO.printf("entering run loop\n")--]] - app:run() -end - -terralib.saveobj("objc2", {main = main}, {"-framework","Cocoa"}) - ---os.execute("./objc2") - -end \ No newline at end of file diff --git a/samples/Terra/objtest.t b/samples/Terra/objtest.t deleted file mode 100644 index f429f0fe..00000000 --- a/samples/Terra/objtest.t +++ /dev/null @@ -1,45 +0,0 @@ -C = terralib.includec("stdio.h") ---the zero line -struct A { a : int } - -terra A:foo1() - self.a = self.a + 1 - return self.a -end - -terra A.methods.foo2(self : &A) - self.a = self.a + 1 - return self.a -end - -terra A.methods.foo3(self : A) - self.a = self.a + 1 - return self.a -end - -terra bar() - var a = A { 0 } - var ptra = &a - - var v0 = a.a - var v1 = a:foo1() - var v2 = a.a - var v3 = a:foo2() - var v4 = a.a - var v5 = a:foo3() - var v6 = a.a - - ptra.a = 0 - var p0 = ptra.a - var p1 = ptra:foo1() - var p2 = ptra.a - var p3 = ptra:foo2() - var p4 = ptra.a - var p5 = ptra:foo3() - var p6 = ptra.a - - return v0,v1,v2,v3,v4,v5,v6,p0,p1,p2,p3,p4,p5,p6 -end - -test = require("test") -test.meq({0,1,1,2,2,3,2,0,1,1,2,2,3,2},bar()) \ No newline at end of file diff --git a/samples/Terra/offsetcalc.t b/samples/Terra/offsetcalc.t deleted file mode 100644 index ec6b0c9b..00000000 --- a/samples/Terra/offsetcalc.t +++ /dev/null @@ -1,33 +0,0 @@ -local offsetinbytescache = {} -function offsetinbytes(structtype,key) - local typetable = offsetinbytescache[structtype] or {} - local value = typetable[key] - if value then - return value - end - offsetinbytescache[structtype] = typetable - - local terra offsetcalc() : int - var a : &structtype = [&structtype](0) - return [&int8](&a.[key]) - [&int8](a) - end - - local result = offsetcalc() - - typetable[key] = result - return result -end - - -struct A { a : int8, c : int8, b : int } - - -terra foo() - return 4LL -end - -local test = require("test") - -test.eq(offsetinbytes(A,"b"),4) - - diff --git a/samples/Terra/opaquealloc.t b/samples/Terra/opaquealloc.t deleted file mode 100644 index 91f07604..00000000 --- a/samples/Terra/opaquealloc.t +++ /dev/null @@ -1,19 +0,0 @@ - - - -local r,e = pcall(function() - local struct A { - a : opaque - } - local v = terralib.new(A) -end) - -assert(not r and e:match("Errors reported during")) - - -local r,e = pcall(function() - local v = terralib.new(opaque) -end) - - -assert(not r and e:match("attempting to use an opaque type")) \ No newline at end of file diff --git a/samples/Terra/or.t b/samples/Terra/or.t deleted file mode 100644 index 98a95761..00000000 --- a/samples/Terra/or.t +++ /dev/null @@ -1,9 +0,0 @@ -local test = require("test") - -terra foo(a : double, b : double, c : double) : bool - return a < b or b < c -end - -test.eq(foo(1,2,1),true) -test.eq(foo(2,1,2),true) -test.eq(foo(3,2,1),false) \ No newline at end of file diff --git a/samples/Terra/ordercomplete.t b/samples/Terra/ordercomplete.t deleted file mode 100644 index eb451822..00000000 --- a/samples/Terra/ordercomplete.t +++ /dev/null @@ -1,25 +0,0 @@ - - -struct A { - a : int -} - -struct B { - a : A -} - -function A.metamethods.__staticinitialize() - print("STATIC INIT A") - local terra what(b : B) - end - what:gettype(true) -end - -function B.metamethods.__staticinitialize() - print("STATIC INIT B") -end - -terra foo(b : B) -end - -foo:compile() \ No newline at end of file diff --git a/samples/Terra/output.t b/samples/Terra/output.t deleted file mode 100644 index bb2b17b8..00000000 --- a/samples/Terra/output.t +++ /dev/null @@ -1,16 +0,0 @@ -C = terralib.includec("stdio.h") -terra main() - C.printf("hello world\n") -end -local m = { main = main } -terralib.saveobj("output.o",m) -local a = terralib.saveobj(nil,"object",m) -terralib.saveobj("output2.bc",m) -local b = terralib.saveobj(nil,"bitcode",m) -terralib.saveobj("output.ll",m) -local c = terralib.saveobj(nil,"llvmir",m) -terralib.saveobj("output",m) -terralib.saveobj("output2","executable",m) - -assert(a:match("hello world")) -assert(c:match("hello world")) \ No newline at end of file diff --git a/samples/Terra/overload.t b/samples/Terra/overload.t deleted file mode 100644 index 57483413..00000000 --- a/samples/Terra/overload.t +++ /dev/null @@ -1,17 +0,0 @@ - -terra foo(a : int) - return 1 -end - -terra foo(a : &int8) - return 2 -end - -print(#foo.definitions) - -terra doit() - return foo(1) + foo("what") -end - -local test = require("test") -test.eq(doit(),3) \ No newline at end of file diff --git a/samples/Terra/overload2.t b/samples/Terra/overload2.t deleted file mode 100644 index 417d5aab..00000000 --- a/samples/Terra/overload2.t +++ /dev/null @@ -1,15 +0,0 @@ - -terra foo(a : int) - return 1 -end - -terra foo(a : double) - return 2 -end - -terra doit() - return foo(2.5) -end - -local test = require("test") -test.eq(doit(),2) \ No newline at end of file diff --git a/samples/Terra/overload3.t b/samples/Terra/overload3.t deleted file mode 100644 index 93a516c6..00000000 --- a/samples/Terra/overload3.t +++ /dev/null @@ -1,15 +0,0 @@ - -terra foo(a : {int} ) - return 1 -end - -terra foo(a : {int,int} ) - return 2 -end - -terra doit() - return foo({1,2}) + foo({1,2}) -end - -local test = require("test") -test.eq(doit(),4) \ No newline at end of file diff --git a/samples/Terra/overloadcall.t b/samples/Terra/overloadcall.t deleted file mode 100644 index 343deb84..00000000 --- a/samples/Terra/overloadcall.t +++ /dev/null @@ -1,12 +0,0 @@ - - -terra foo(a : int) - return a -end - -terra foo(a : int, b : int) - return a + b -end - -local test = require("test") -test.eq(foo(1) + foo(3,4), 8) \ No newline at end of file diff --git a/samples/Terra/overloadmethod.t b/samples/Terra/overloadmethod.t deleted file mode 100644 index 226842b8..00000000 --- a/samples/Terra/overloadmethod.t +++ /dev/null @@ -1,24 +0,0 @@ - -struct A { a : int } -terra A:foo(a : int) - return self.a + a -end - -terra A:foo(a : &int8) - return self.a -end - - -terra doit() - var a = A { 3 } - return a:foo(1) + a:foo("what") -end -terra doit2() - var a = A { 3 } - var pa = &a - return pa:foo(1) + pa:foo("what") -end - -local test = require("test") -test.eq(doit(),7) -test.eq(doit2(),7) \ No newline at end of file diff --git a/samples/Terra/overloadmethod2.t b/samples/Terra/overloadmethod2.t deleted file mode 100644 index f3c411ec..00000000 --- a/samples/Terra/overloadmethod2.t +++ /dev/null @@ -1,17 +0,0 @@ - -struct A { a : int } -A.methods.foo = terra(self : A, a : int) - return self.a + a -end - -terra A:foo() - return self.a -end - - -terra doit() - var a = A { 3 } - return a:foo() + a:foo(1) -end -local test = require("test") -test.eq(doit(),7) \ No newline at end of file diff --git a/samples/Terra/overloadmethod3.t b/samples/Terra/overloadmethod3.t deleted file mode 100644 index 87290ade..00000000 --- a/samples/Terra/overloadmethod3.t +++ /dev/null @@ -1,18 +0,0 @@ - -struct A { a : int } -A.methods.foo = terra(self : A) - return 2 -end - -terra A:foo() - return 1 -end - - -terra doit() - var a = A { 3 } - var pa = &a - return a:foo() + pa:foo() -end -local test = require("test") -test.eq(doit(),4) \ No newline at end of file diff --git a/samples/Terra/overloadproduct.t b/samples/Terra/overloadproduct.t deleted file mode 100644 index 85230e29..00000000 --- a/samples/Terra/overloadproduct.t +++ /dev/null @@ -1,65 +0,0 @@ - -local ans = { -{1,1,1,1}; -{2,2,2,2}; -{1,2,1,2}; -{3,3,3,3}; -{1,1,3,3}; -{0,2,3,0}; -{1,2,3,0}; -{4,4,4,4}; -{1,0,0,4}; -{2,2,4,4}; -{1,2,0,4}; -{3,4,3,4}; -{1,0,3,4}; -{0,2,3,4}; -{1,2,3,4}; -} -function create(foo,a,b,c,d) - if a then - terra foo(a : int, b : int) - return 1 - end - end - if b then - terra foo(a : int, b : double) - return 2 - end - end - if c then - terra foo(a : double, b : int) - return 3 - end - end - if d then - terra foo(a : double, b : double) - return 4 - end - end -end - -local function bitset(i,b) - return bit.band(bit.rshift(i,b),1) == 1 -end - -for i = 1,15 do - local terra foo - local a,b,c,d = bitset(i,0),bitset(i,1),bitset(i,2),bitset(i,3) - create(foo, a,b,c,d) - local function trycall(arg1,arg2) - local r = 0 - pcall(function() - local terra testit() - var a : arg1, b : arg2 = 0,0 - return foo(a,b) - end - r = testit() - end) - return r - end - local r = {trycall(int,int),trycall(int,double),trycall(double,int),trycall(double,double)} - for j,rr in ipairs(r) do - assert(rr == ans[i][j]) - end -end \ No newline at end of file diff --git a/samples/Terra/overloadrecv.t b/samples/Terra/overloadrecv.t deleted file mode 100644 index a07a8bbf..00000000 --- a/samples/Terra/overloadrecv.t +++ /dev/null @@ -1,20 +0,0 @@ - - -struct A { - a : int -} - -terra A:foo(a : int, b : uint8) - return 1 -end -terra A:foo(a : double, b : uint8) - return 2 -end - -terra useit() - var a = A { 3 } - var pa = &a - return a:foo(1,1) + a:foo(1.1,1) + pa:foo(1,1) + pa:foo(1.1,1) -end - -assert(6 == useit()) \ No newline at end of file diff --git a/samples/Terra/painfulrecstruct.t b/samples/Terra/painfulrecstruct.t deleted file mode 100644 index 1b2026b6..00000000 --- a/samples/Terra/painfulrecstruct.t +++ /dev/null @@ -1,22 +0,0 @@ - - -struct A { - a : A -> int; - b : int -} - -terra foo(a : A) - return a.b -end - -terra callit(a : A) - return a.a(a) -end - -terra bar() - var a = A { foo, 3 } - return callit(a) -end - -local test = require("test") -test.eq(bar(),3) \ No newline at end of file diff --git a/samples/Terra/paren.t b/samples/Terra/paren.t deleted file mode 100644 index bcd40960..00000000 --- a/samples/Terra/paren.t +++ /dev/null @@ -1,5 +0,0 @@ -terra foo(a : int) - return a + (a) -end - -foo(3) \ No newline at end of file diff --git a/samples/Terra/parsecrash.t b/samples/Terra/parsecrash.t deleted file mode 100644 index 1ce8c06d..00000000 --- a/samples/Terra/parsecrash.t +++ /dev/null @@ -1,7 +0,0 @@ -local result,err = terralib.loadstring [[ -terra result() - [startXNeeded] = a + strip*L.stripWidth - [endXNeeded] = 1 -end -]] -assert(result ~= nil) \ No newline at end of file diff --git a/samples/Terra/parsefail.t b/samples/Terra/parsefail.t deleted file mode 100644 index 491ce0f2..00000000 --- a/samples/Terra/parsefail.t +++ /dev/null @@ -1,35 +0,0 @@ - -local self = 1 -local Rt = 1 -local i = 1 -local j = 1 -terra bar() -var a = Rt.MatrixDouble{[&double](self.ptr) , i,j} -end - -local r,e = terralib.loadstring[[ - - terra foo() - var a = { [&double](4) = 3 } - end -]] - -assert(r == nil and e:match("unexpected symbol near '='")) - -terra foo() - var a = { [""] = 3 } -end - -local s = symbol() - -local function getsym() - return s -end -terra foo2() - var [getsym()] = 3 - var a = { [getsym()] = 4, _1 = [getsym()] } - return a.[getsym()] + a._1 -end - -assert(7 == foo2()) - diff --git a/samples/Terra/parsefail2.t b/samples/Terra/parsefail2.t deleted file mode 100644 index 74119074..00000000 --- a/samples/Terra/parsefail2.t +++ /dev/null @@ -1,5 +0,0 @@ -terra foo() - var a : int[4] @&a[0] = 3 - return a[0] -end -assert(3 == foo()) \ No newline at end of file diff --git a/samples/Terra/pattern.t b/samples/Terra/pattern.t deleted file mode 100644 index dfb23037..00000000 --- a/samples/Terra/pattern.t +++ /dev/null @@ -1,43 +0,0 @@ - -terra foobar() - return 1,2 -end - -terra what() - var _,a,b = 1,foobar() - a,b = foobar() - return a + b -end -terra what2() - var a = foobar() - var b,c = unpackstruct(a) - return b+c -end - -assert(what() == 3) -assert(what2() == 3) - - -struct A { - a : int - b : int -} - -terra what3() : A - var a = A {1,2} - return unpacktuple(a) -end -assert(what3().b == 2) - -terra what4() - var a = A {1,2} - var c,d = unpackstruct(a) - return c+d -end -assert(what4() == 3) - -local terra ra() return A {1,2} end -local a,b = unpackstruct(foobar()) -assert(a == 1 and b == 2) -assert(unpacktuple(ra()).a == 1) -assert(unpackstruct(ra()) == 1) \ No newline at end of file diff --git a/samples/Terra/point.t b/samples/Terra/point.t deleted file mode 100644 index 088e3702..00000000 --- a/samples/Terra/point.t +++ /dev/null @@ -1,13 +0,0 @@ - -terra bar(a : &int) - @a = @a + 1 -end -terra foo(a : int) : int - var b : int - b = a - bar(&b) - return b -end - -local test = require("test") -test.eq(foo(4),5) \ No newline at end of file diff --git a/samples/Terra/pointerarith.t b/samples/Terra/pointerarith.t deleted file mode 100644 index d59c9b59..00000000 --- a/samples/Terra/pointerarith.t +++ /dev/null @@ -1,31 +0,0 @@ -terra foo(a : &int) : ptrdiff - var b : &int b = a + 10 - return b-a -end - -terra bar() - var b:int = 10; - return foo(&b) -end - -terra foo2(a : &int) : &int - a = a + 6 - a = 3 + a - a = a + 10 - return a -end - -terra foo3(a : &int) : &int - a = a - 11 - a = 2 + a - a = a - 10 - return a -end - -terra bar2(a : int) - return @(foo3(foo2(&a))) -end - -local test = require("test") -test.eq(bar(),10) -test.eq(bar2(42),42) diff --git a/samples/Terra/pointerlike.t b/samples/Terra/pointerlike.t deleted file mode 100644 index 2d3d8542..00000000 --- a/samples/Terra/pointerlike.t +++ /dev/null @@ -1,7 +0,0 @@ - -terra foo() - var a : int[4] - var b : &int = a - return a + 1, a - a, b - a, a - b, 1 + a -end -foo() \ No newline at end of file diff --git a/samples/Terra/pow.t b/samples/Terra/pow.t deleted file mode 100644 index 701c8247..00000000 --- a/samples/Terra/pow.t +++ /dev/null @@ -1,28 +0,0 @@ -local N = 4 -- N is a Lua variable -terra powN(a : double) - var r = 1 - for i = 0, N do - r = r * a - end - return r -end - - - - -local math = {} -for N = 1,10 do - math["pow"..tostring(N)] = terra(a : double) - var r = 1 - for i = 0, N do - r = r * a - end - return r - end -end - -local test = require("test") -test.eq(powN(3),81) -test.eq(math.pow1(2),2) -test.eq(math.pow2(2),4) -test.eq(math.pow3(2),8) \ No newline at end of file diff --git a/samples/Terra/ppltalk.t b/samples/Terra/ppltalk.t deleted file mode 100644 index d9e29868..00000000 --- a/samples/Terra/ppltalk.t +++ /dev/null @@ -1,18 +0,0 @@ - ---this is a comment. ---top level is Lua code: -function min(a,b) - if a < b then return a - else return b end -end - -print(min(3,4)) --3 - -terra mint(a : int, b : int) : int -if a < b then return a -else return b end -end - -print(mint(3,4)) --3 - -mint:disas() \ No newline at end of file diff --git a/samples/Terra/ppnil.t b/samples/Terra/ppnil.t deleted file mode 100644 index 93e6e561..00000000 --- a/samples/Terra/ppnil.t +++ /dev/null @@ -1,4 +0,0 @@ -terra foo() - return nil -end -foo:printpretty() \ No newline at end of file diff --git a/samples/Terra/pratttest1.t b/samples/Terra/pratttest1.t deleted file mode 100755 index 95b9f739..00000000 --- a/samples/Terra/pratttest1.t +++ /dev/null @@ -1,4 +0,0 @@ -import "lib/pratttest" -local a = goexp 1 + 3 * 4 ^ 5 ^ 6/(2 - 4 + -a) + -b(c) - -terralib.tree.printraw(a) diff --git a/samples/Terra/prec.t b/samples/Terra/prec.t deleted file mode 100644 index b6afe988..00000000 --- a/samples/Terra/prec.t +++ /dev/null @@ -1,4 +0,0 @@ -local a = &double -> double -assert(a:ispointer()) -assert(a.type:isfunction()) -assert(a.type.parameters[1]:ispointer()) \ No newline at end of file diff --git a/samples/Terra/prec2.t b/samples/Terra/prec2.t deleted file mode 100644 index 99a8974b..00000000 --- a/samples/Terra/prec2.t +++ /dev/null @@ -1,2 +0,0 @@ -terra foo(a : float, b : float, c : float, d : float) return a * (b - c) end -foo:printpretty() \ No newline at end of file diff --git a/samples/Terra/pretty.t b/samples/Terra/pretty.t deleted file mode 100644 index 3953c97a..00000000 --- a/samples/Terra/pretty.t +++ /dev/null @@ -1,69 +0,0 @@ - - -terra bar(a : int) - return 4,5 -end -terra takebar(a : double, b : int) - return 1 -end -terra baz() -end -function whatwhat() -end -struct A { data : int } -terra A:moo() end -Aptr = terralib.new(A) -terra foo() - var aa : A - - baz() - whatwhat() - do - end - ::what:: - goto what - while 4 < 3 do - break - terralib.attrload(&aa,{}) - var d = terralib.attrstore(&aa,aa,{}) - return 3,4,4,bar(aa.data) - end - var a = 0.0 - if a < 3 then - a = -(a + 1) - end - - if a < 3 then - a = -a + 1 - elseif a > 4 then - a = a - 1 - end - repeat - a = a + 1 - until a > 55 - var b,c = 4,5 - a,b = 5,c - var d = array(1,2,3) - b = (&a)[1] - var e : int = a - var g = terralib.select(true,0,1) - var ee = sizeof(int) - var more = { a = 5, c = 4, _2 = 3} - baz() - var bbb = bar(1) - var bb = takebar(bbb._0,bbb._1) - var vv = vector(3,4) - var vvv = Aptr - var vvvv = Aptr:moo() - return 3,4,ee,bar(1) -end - -foo:compile() -foo:printpretty(false) --before compilation -foo:printpretty() --after compilation - -local a = `1 + 2 -local b = quote var c = a + a in a + 1 end - -a:printpretty() -b:printpretty() \ No newline at end of file diff --git a/samples/Terra/printd.t b/samples/Terra/printd.t deleted file mode 100644 index d9a9f85d..00000000 --- a/samples/Terra/printd.t +++ /dev/null @@ -1,5 +0,0 @@ -a = .4 - -terra foo() return a end - -foo:printpretty(false) \ No newline at end of file diff --git a/samples/Terra/printfarray.t b/samples/Terra/printfarray.t deleted file mode 100644 index 98c21bef..00000000 --- a/samples/Terra/printfarray.t +++ /dev/null @@ -1,12 +0,0 @@ - - -C = terralib.includec("stdio.h") - -terra char(a : &int8) : int8 - return a[0] -end -terra foobar() - var a = arrayof(int8,char("a"),0) - C.printf("%s\n",a) -end -foobar() \ No newline at end of file diff --git a/samples/Terra/printfloat.t b/samples/Terra/printfloat.t deleted file mode 100644 index 37927f54..00000000 --- a/samples/Terra/printfloat.t +++ /dev/null @@ -1,7 +0,0 @@ -local IO = terralib.includec("stdio.h") - -terra foobar() - IO.printf("%f\n",3.3f) -end - -foobar() \ No newline at end of file diff --git a/samples/Terra/proxystruct.t b/samples/Terra/proxystruct.t deleted file mode 100644 index bde53457..00000000 --- a/samples/Terra/proxystruct.t +++ /dev/null @@ -1,19 +0,0 @@ -local c = terralib.includecstring [[ - #include - #include -]] - - -struct Node { - next : &Node; - v : int; -} - -terra foo() - var cur : &Node = [&Node](c.malloc(sizeof(Node))) - cur.v = 3 - return cur.v -end - -local test = require("test") -test.eq(foo(),3) diff --git a/samples/Terra/pt.t b/samples/Terra/pt.t deleted file mode 100644 index 6212d290..00000000 --- a/samples/Terra/pt.t +++ /dev/null @@ -1,18 +0,0 @@ - - -local a = global(double) - -terra getptr() - return &a -end - -local b = getptr() -local c = terralib.pointertolightuserdata(b) -print(b,c,a) - -terra foo(a : &&int) - -end - -foo(c) -print("DONE") \ No newline at end of file diff --git a/samples/Terra/pthreads.t b/samples/Terra/pthreads.t deleted file mode 100644 index b903dcdb..00000000 --- a/samples/Terra/pthreads.t +++ /dev/null @@ -1,47 +0,0 @@ -local ffi = require("ffi") -if ffi.os == "Windows" then - return -end - -C = terralib.includecstring [[ -#include -#include -]] - -acc = global(int[4]) - -terra forkedFn(args : &opaque) : &opaque - var threadid = @[&int](args) - C.printf("threadid %d\n",threadid) - acc[threadid] = threadid - return nil -end - -terra foo() - var thread0 : C.pthread_t - var thread1 : C.pthread_t - var thread2 : C.pthread_t - var thread3 : C.pthread_t - - acc[0]=-42 - acc[1]=-42 - acc[2]=-42 - acc[3]=-42 - - var args = arrayof(int,0,1,2,3) - - C.pthread_create(&thread0,nil,forkedFn,&args[0]) - C.pthread_create(&thread1,nil,forkedFn,&args[1]) - C.pthread_create(&thread2,nil,forkedFn,&args[2]) - C.pthread_create(&thread3,nil,forkedFn,&args[3]) - - C.pthread_join(thread0,nil) - C.pthread_join(thread1,nil) - C.pthread_join(thread2,nil) - C.pthread_join(thread3,nil) - - return acc[0]+acc[1]+acc[2]+acc[3] -end - -local test = require("test") -test.eq(foo(),0+1+2+3) \ No newline at end of file diff --git a/samples/Terra/quote.t b/samples/Terra/quote.t deleted file mode 100644 index 6110380e..00000000 --- a/samples/Terra/quote.t +++ /dev/null @@ -1,10 +0,0 @@ - -local c = `10 -local a = `4 + c -terra doit() - var c = 3 - return a + a -end - -local test = require("test") -test.eq(doit(),28) \ No newline at end of file diff --git a/samples/Terra/quote10.t b/samples/Terra/quote10.t deleted file mode 100644 index f32e9e22..00000000 --- a/samples/Terra/quote10.t +++ /dev/null @@ -1,13 +0,0 @@ - -terra foo() - return 1,2 -end - -local q = `foo() - -terra bar() - return q -end - -local test = require("test") -test.meq({1,2},bar()) \ No newline at end of file diff --git a/samples/Terra/quote2.t b/samples/Terra/quote2.t deleted file mode 100644 index 378510a3..00000000 --- a/samples/Terra/quote2.t +++ /dev/null @@ -1,9 +0,0 @@ - -local c = `10 -local a = `4 + c -terra doit() - return a -end - -local test = require("test") -test.eq(doit(),14) \ No newline at end of file diff --git a/samples/Terra/quote3.t b/samples/Terra/quote3.t deleted file mode 100644 index 9f24b51f..00000000 --- a/samples/Terra/quote3.t +++ /dev/null @@ -1,13 +0,0 @@ -c = global(0) -terra count() - c = c + 1 - return c -end -foo = macro(function(a,b) return `a + a + a + b + count() end) -terra doit() - var a = -100 - return foo(count(),4) -end - -local test = require("test") -test.eq(doit(),14) \ No newline at end of file diff --git a/samples/Terra/quote4.t b/samples/Terra/quote4.t deleted file mode 100644 index 29f5150f..00000000 --- a/samples/Terra/quote4.t +++ /dev/null @@ -1,9 +0,0 @@ - -local str2 = `{a = 4} -local str = `str2 -terra doit() - return str.a -end - -local test = require("test") -test.eq(doit(),4) \ No newline at end of file diff --git a/samples/Terra/quote5.t b/samples/Terra/quote5.t deleted file mode 100644 index 23539bc4..00000000 --- a/samples/Terra/quote5.t +++ /dev/null @@ -1,20 +0,0 @@ - -c = global(0) -terra foo(a : int) - c = c + a -end - -local stmts = quote - foo(5) - foo(6) - foo(7) -end - -local stmts2 = {stmts,stmts} -terra doit() - stmts - stmts2 - return c -end -local test = require("test") -test.eq(doit(),54) \ No newline at end of file diff --git a/samples/Terra/quote6.t b/samples/Terra/quote6.t deleted file mode 100644 index 59a2b83f..00000000 --- a/samples/Terra/quote6.t +++ /dev/null @@ -1,12 +0,0 @@ -function mymacro() - return {`4,`5} -end -mymacro = macro(mymacro) - -local exps = {`2,`3, `mymacro()} - -terra doit() - return exps -end -local test = require("test") -test.meq({2,3,4,5},doit()) \ No newline at end of file diff --git a/samples/Terra/quote7.t b/samples/Terra/quote7.t deleted file mode 100644 index cbd4cb3b..00000000 --- a/samples/Terra/quote7.t +++ /dev/null @@ -1,23 +0,0 @@ -a = {} - -local c = terralib.includec("stdio.h") - - -a.c = quote - c.printf("hello\n") -end - -a.b = quote - var d = 4 - a.c - return d -end - - -terra foo() - a.c - a.b -end - -local test = require("test") -test.eq(foo(),4) \ No newline at end of file diff --git a/samples/Terra/quote8.t b/samples/Terra/quote8.t deleted file mode 100644 index afec0869..00000000 --- a/samples/Terra/quote8.t +++ /dev/null @@ -1,19 +0,0 @@ -a = {} - -local c = terralib.includec("stdio.h") - - -a.c = {`1,`2,`3} - -a.b = quote - return a.c,a.c -end - - -terra foo() - a.b -end - - -local test = require("test") -test.meq({1,2,3,1,2,3},foo()) diff --git a/samples/Terra/quote9.t b/samples/Terra/quote9.t deleted file mode 100644 index 834a4afd..00000000 --- a/samples/Terra/quote9.t +++ /dev/null @@ -1,19 +0,0 @@ -a = {} - -local c = terralib.includec("stdio.h") - - -a.c = {`1,`2,`3} - -a.b = quote - return a.c._0,(a.c)._0 -end - - -terra foo() - a.b -end - - -local test = require("test") -test.meq({1,1}, foo()) \ No newline at end of file diff --git a/samples/Terra/quoteblock.t b/samples/Terra/quoteblock.t deleted file mode 100644 index 3833dbbf..00000000 --- a/samples/Terra/quoteblock.t +++ /dev/null @@ -1,12 +0,0 @@ - -local a = symbol() -local myquote = quote - var [a] = 3 -end - -terra bar() - [myquote]; - return [a] -end - -print(bar()) \ No newline at end of file diff --git a/samples/Terra/quoteenv.t b/samples/Terra/quoteenv.t deleted file mode 100644 index 607631a1..00000000 --- a/samples/Terra/quoteenv.t +++ /dev/null @@ -1,25 +0,0 @@ ---quotes, unlike functions bind symbols eagerly ---function have :compile() to bind their symbols, but no similar thing exists ---for quotes, making it hard to control ---furthermore there aren't many use cases for late-binding quotes, ---but a bunch exist for needing early-bound quotes, like below: - - -function times5(x) - local c = `0 - for i = 1,5 do - c = `c + x - end - return c -end -times5 = macro(times5) - -terra foo() - var a = 3 - return times5(a) -end - -foo:printpretty() -foo:disas() -local test = require("test") -test.eq(foo(),15) diff --git a/samples/Terra/quoteselect.t b/samples/Terra/quoteselect.t deleted file mode 100644 index 46864e34..00000000 --- a/samples/Terra/quoteselect.t +++ /dev/null @@ -1,12 +0,0 @@ - -local a = {} - -local c = terralib.includec("stdio.h") - -b = `c.printf("hello\n") - -terra foo() - return b -end - -foo() \ No newline at end of file diff --git a/samples/Terra/rd.t b/samples/Terra/rd.t deleted file mode 100644 index c80487fc..00000000 --- a/samples/Terra/rd.t +++ /dev/null @@ -1 +0,0 @@ -C = terralib.includec("stdarg.h") \ No newline at end of file diff --git a/samples/Terra/receivercasts.t b/samples/Terra/receivercasts.t deleted file mode 100644 index 384c7bce..00000000 --- a/samples/Terra/receivercasts.t +++ /dev/null @@ -1,22 +0,0 @@ - -struct A { a : int } - -terra A.methods.foo(a : int) - return a + 1 -end - -function A.metamethods.__cast(from,to,exp) - if from == A and to == int then - return `exp.a - end - error("what") -end - - - -terra testit() - var a = A { 5 } - return a:foo() -end - -assert(6 == testit()) \ No newline at end of file diff --git a/samples/Terra/recfn.t b/samples/Terra/recfn.t deleted file mode 100644 index 3a0d757f..00000000 --- a/samples/Terra/recfn.t +++ /dev/null @@ -1,10 +0,0 @@ -local terra foo() : {} - bar() -end and -local terra bar() : {} - foo() -end - -bar = nil - -foo:printpretty() \ No newline at end of file diff --git a/samples/Terra/recoverfromerror.t b/samples/Terra/recoverfromerror.t deleted file mode 100644 index 92ef01a5..00000000 --- a/samples/Terra/recoverfromerror.t +++ /dev/null @@ -1,15 +0,0 @@ - - -terra what() - return " " / 1 -end - -dostuff = macro(function() - pcall(what.compile,what) - return 4 -end) - -terra foobar() - return dostuff() -end -assert(4 == foobar()) \ No newline at end of file diff --git a/samples/Terra/recstruct.t b/samples/Terra/recstruct.t deleted file mode 100644 index dff75679..00000000 --- a/samples/Terra/recstruct.t +++ /dev/null @@ -1,33 +0,0 @@ -local c = terralib.includecstring [[ - #include - #include -]] - - -struct Node { - next : &Node; - v : int; -} - -local N = 10 -terra foo() - var cur : &Node = nil - for i = 0, N do - var n = [&Node](c.malloc(sizeof(Node))) - n.v = i - n.next = cur - cur = n - end - var sum = 0 - while cur ~= nil do - c.printf("%d\n",cur.v) - sum = sum + cur.v - var old = cur - cur = cur.next - c.free(old) - end - return sum -end - -local test = require("test") -test.eq(foo(),N * (N - 1) / 2) \ No newline at end of file diff --git a/samples/Terra/recstruct2.t b/samples/Terra/recstruct2.t deleted file mode 100644 index 0c92d4d8..00000000 --- a/samples/Terra/recstruct2.t +++ /dev/null @@ -1,17 +0,0 @@ - - -local struct A { b : &B } - and struct B { a : &A } - -struct C { a : &A, b : &B, c : &C } - -local struct D {} - -terra foo() - var a : A, b : B, c : C - a.b = &b - b.a = &a - c.c = &c -end - -foo() \ No newline at end of file diff --git a/samples/Terra/rename.t b/samples/Terra/rename.t deleted file mode 100644 index 323c09d7..00000000 --- a/samples/Terra/rename.t +++ /dev/null @@ -1,8 +0,0 @@ -terralib.includecstring [[ - int foo() { return 3; } -]] - -terra what() return 4 end - - -terralib.saveobj("foo.o",{foo = what}) \ No newline at end of file diff --git a/samples/Terra/renaming.t b/samples/Terra/renaming.t deleted file mode 100644 index c0674d6f..00000000 --- a/samples/Terra/renaming.t +++ /dev/null @@ -1,21 +0,0 @@ - -C = terralib.includec("stdio.h") -terra main() - C.printf("what\n") -end -main:setinlined(false) - -terra realmain() - main() -end - -terra foo() -end -and terra foo(a : int) -end - -foo:compile() - -terralib.saveobj("renamed",{ main = realmain }) - -terralib.dumpmodule() \ No newline at end of file diff --git a/samples/Terra/requiretwice.t b/samples/Terra/requiretwice.t deleted file mode 100644 index 4999edc6..00000000 --- a/samples/Terra/requiretwice.t +++ /dev/null @@ -1,3 +0,0 @@ -A = require("lib.golike") -B = require("lib.golike") -assert(A == B) \ No newline at end of file diff --git a/samples/Terra/rvaluerecv.t b/samples/Terra/rvaluerecv.t deleted file mode 100644 index 5ccad573..00000000 --- a/samples/Terra/rvaluerecv.t +++ /dev/null @@ -1,30 +0,0 @@ -struct A { a : int } - -terra A:foo() - self.a = self.a + 1 - return self.a -end - -terra A.methods.foo2(self : A) - self.a = self.a + 1 - return self.a -end - - -mya = global(A) -mya:set({0}) - -terra geta() - return mya -end - -terra bar() - var v0 = mya.a - var v1 = geta():foo() - var v2 = mya.a - var v3 = geta():foo2() - var v4 = mya.a - return v0,v1,v2,v3,v4 -end -test = require("test") -test.meq({0,1,0,1,0},bar()) \ No newline at end of file diff --git a/samples/Terra/scope.t b/samples/Terra/scope.t deleted file mode 100644 index 866d7e26..00000000 --- a/samples/Terra/scope.t +++ /dev/null @@ -1,13 +0,0 @@ -terra scope() - var a = 4 - var b = 0 - b = b + a - do - var a = 5 - b = b + a - end - b = b + a - return b -end -local test = require('test') -test.eq(scope(),13) \ No newline at end of file diff --git a/samples/Terra/selectoverload.t b/samples/Terra/selectoverload.t deleted file mode 100644 index b4b33d96..00000000 --- a/samples/Terra/selectoverload.t +++ /dev/null @@ -1,25 +0,0 @@ -struct Vec { data : float[3] } - - -local get = {} -get.x = terra(self : &Vec) - return self.data[0] -end -get.y = macro(function(self) - return `self.data[1] -end) - -Vec.metamethods.__entrymissing = macro(function(name,self) - return `[get[name]](&self) -end) - -terra bar() - var a = Vec { array(1.f,2.f,3.f) } - a.y = a.y + 1 - var pa = &a - return a.x + a.y + pa.x -end - -local test = require("test") -test.eq(bar(),5) - diff --git a/samples/Terra/setname.t b/samples/Terra/setname.t deleted file mode 100644 index 06c15855..00000000 --- a/samples/Terra/setname.t +++ /dev/null @@ -1,7 +0,0 @@ - -two = terra() - return 1 + 1 -end -two:setname("two") - -two:disas() \ No newline at end of file diff --git a/samples/Terra/setter.t b/samples/Terra/setter.t deleted file mode 100644 index abd55acc..00000000 --- a/samples/Terra/setter.t +++ /dev/null @@ -1,39 +0,0 @@ - -struct A { -a : int; -b : int; -} - -terra A.metamethods.__update(self : &A, a : int, b : int) - self.a = a - self.b = b -end -terra A.metamethods.__apply(self : &A, a : int) - return a + self.b -end - -struct B { - a : int -} - - -B.metamethods.__update = macro(function(me,arg,arg2,rhs) - return quote me.a = arg + arg2 + rhs end -end) - -B.metamethods.__setentry = macro(function(field,self,rhs) - field = field:sub(2) - return quote self.[field] = self.[field] + rhs end -end) - -terra foo() - var a : A - a(4) = 5 - var b : B - b(3,4) = 5 - b._a = 1 - return a.a + a.b + a(3) + b.a -end - ---foo:printpretty() -assert(foo() == 9+8+3+4+5+1) diff --git a/samples/Terra/sgemm-old.t b/samples/Terra/sgemm-old.t deleted file mode 100644 index 36d58007..00000000 --- a/samples/Terra/sgemm-old.t +++ /dev/null @@ -1,205 +0,0 @@ - -local IO = terralib.includec("stdio.h") -local stdlib = terralib.includec("stdlib.h") - - - -local NB = 64 -local V = 8 - -terra vecload(data : &float, idx : int) - var addr = &data[idx] - return @[&vector(float,V)](addr) -end - -haddavx = terralib.intrinsic("llvm.x86.avx.hadd.ps.256", { vector(float,8), vector(float,8) } -> vector(float,8)) -terra hadd(v : vector(float,8)) - var v1 = haddavx(v,v) - var v2 = haddavx(v1,v1) - return v2[0] + v2[4] -end - - -local AR = 2 -local BR = 2 -local KR = 2 -local NK = 64 - -local BLOCKB = true -local BLOCKA = true - -local function isinteger(x) return math.floor(x) == x end - -assert(isinteger(NK / (KR * V))) -assert(isinteger(NB / AR )) -assert(isinteger(NB / BR )) - - - -blockregisters = macro(function(C,A,B,K,lda,ldc,mm,nn,kk,m,n) - local function mkmatrix(nm,I,J) - local r = {} - for i = 0,I-1 do - r[i] = {} - for j = 0,J-1 do - r[i][j] = symbol(nm..tostring(i)..tostring(j)) - end - end - return r - end - local as,bs,cs = mkmatrix("a",AR,KR),mkmatrix("b",BR,KR),mkmatrix("c",AR,BR) - local stmts = terralib.newlist() - for i = 0, AR-1 do - for j = 0, BR-1 do - stmts:insert(quote var [cs[i][j]] : vector(float,V) = 0.f end) - end - end - - local k = symbol("k") - local kloopbody = terralib.newlist() - - local alreadyloaded = {} - local function get(vs,i,j,loadfn) - if not alreadyloaded[vs[i][j]] then - alreadyloaded[vs[i][j]] = true - kloopbody:insert(loadfn(vs[i][j])) - end - return vs[i][j] - end - - local function getA(i,j) - return get(as,i,j,function(sym) - local result - if BLOCKA then - result = quote - var [sym] = vecload(A, mm * K + NB*(kk + m - mm + i) + k - kk + j *V) - end - else - result = quote - var [sym] = vecload(A, (m + i) * lda + k + j * V) - end - end - return result - end) - end - - local function getB(i,j) - return get(bs,i,j,function(sym) - local result - if BLOCKB then - result = quote - var [sym] = vecload(B, nn * K + NB*(kk + n - nn + i) + k - kk + j * V) - end - else - result = quote - var [sym] = vecload(B, (n + i) * K + k + j * V) - end - end - return result - end) - end - - for l = 0, KR-1 do - for i = 0, AR-1 do - for j = 0, BR-1 do - local aa = getA(i,l) - local bb = getB(j,l) - kloopbody:insert(quote - [cs[i][j]] = [cs[i][j]] + aa * bb - end) - end - end - end - - stmts:insert(quote - for [k] = kk, kk + NK, V*KR do - kloopbody - end - end) - - for i = 0, AR-1 do - for j = 0, BR-1 do - local function getsum(b,e) - if b + 1 == e then - return `[cs[i][j]][b] - else - local mid = (e + b)/2 - assert(math.floor(mid) == mid) - local lhs = getsum(b,mid) - local rhs = getsum(mid,e) - return `lhs + rhs - end - end - local sum - if V == 8 and false then - sum = `hadd([cs[i][j]]) - else - sum = getsum(0,V) - end - stmts:insert(quote - var r = sum - if kk == 0 then - C[(m + i)*ldc + (n + j)] = r - else - C[(m + i)*ldc + (n + j)] = C[(m + i)*ldc + (n + j)] + r - end - end) - end - end - - return stmts -end) - -terra my_sgemm(gettime : {} -> double, M : int, N : int, K : int, alpha : float, A : &float, lda : int, B : &float, ldb : int, - beta : float, C : &float, ldc : int) - - var TB = [&float](stdlib.malloc(K * N * sizeof(float))) - var TA = A - for kk = 0,K,NK do - for nn = 0,N,NB do - for k = kk,kk+NK do - for n = nn,nn+NB do - if BLOCKB then - TB[nn * K + NB*(kk + n - nn) + k - kk] = B[k*ldb + n] - else - TB[n*K + k] = B[k*ldb + n] - end - end - end - end - end - - if BLOCKA then - TA = [&float](stdlib.malloc(M * K * sizeof(float))) - for mm = 0,M,NB do - for kk = 0,K,NK do - for m = mm,mm+NB do - for k = kk,kk+NK do - TA[mm * K + NB*(kk + m - mm) + k - kk] = A[m*lda + k] - end - end - end - end - end - - for mm = 0,M,NB do - for nn = 0, N,NB do - for kk = 0, K, NK do - for m = mm,mm+NB,AR do - for n = nn,nn+NB,BR do - blockregisters(C,TA,TB,K,lda,ldc,mm,nn,kk,m,n) - end - end - end - end - end - stdlib.free(TB) - if BLOCKA then - stdlib.free(TA) - end -end - -my_sgemm:compile() -my_sgemm:printpretty() - -terralib.saveobj("my_sgemm.o", {my_sgemm = my_sgemm}) \ No newline at end of file diff --git a/samples/Terra/sgemm.t b/samples/Terra/sgemm.t deleted file mode 100644 index c5121daa..00000000 --- a/samples/Terra/sgemm.t +++ /dev/null @@ -1,162 +0,0 @@ - -local IO = terralib.includec("stdio.h") -local stdlib = terralib.includec("stdlib.h") - - - -local NB = 72 -local V = 8 - -terra vecload(data : &float, idx : int) - var addr = &data[idx] - return @[&vector(float,V)](addr) -end - -haddavx = terralib.intrinsic("llvm.x86.avx.hadd.ps.256", { vector(float,8), vector(float,8) } -> vector(float,8)) -terra hadd(v : vector(float,8)) - var v1 = haddavx(v,v) - var v2 = haddavx(v1,v1) - return v2[0] + v2[4] -end - - -local AR = 2 -local BR = 4 -local KR = 1 -local NK = 72 - - -local function isinteger(x) return math.floor(x) == x end - -assert(isinteger(NK / (KR * V))) -assert(isinteger(NB / AR )) -assert(isinteger(NB / BR )) - - - -blockregisters = macro(function(C,A,B,K,lda,ldc,m,n,kk) - local function mkmatrix(nm,I,J) - local r = {} - for i = 0,I-1 do - r[i] = {} - for j = 0,J-1 do - r[i][j] = symbol(nm..tostring(i)..tostring(j)) - end - end - return r - end - local as,bs,cs = mkmatrix("a",AR,KR),mkmatrix("b",BR,KR),mkmatrix("c",AR,BR) - local stmts = terralib.newlist() - for i = 0, AR-1 do - for j = 0, BR-1 do - stmts:insert(quote var [cs[i][j]] : vector(float,V) = 0.f end) - end - end - - local k = symbol("k") - local kloopbody = terralib.newlist() - - local alreadyloaded = {} - local function get(vs,i,j,loadfn) - if not alreadyloaded[vs[i][j]] then - alreadyloaded[vs[i][j]] = true - kloopbody:insert(loadfn(vs[i][j])) - end - return vs[i][j] - end - - local function getA(i,j) - return get(as,i,j,function(sym) - return quote - var [sym] = vecload(A, (m + i) * lda + k + j * V) - end - end) - end - - local function getB(i,j) - return get(bs,i,j,function(sym) - return quote - var [sym] = vecload(B, (n + i) * K + k + j * V) - end - end) - end - - for l = 0, KR-1 do - for i = 0, AR-1 do - for j = 0, BR-1 do - local aa = getA(i,l) - local bb = getB(j,l) - kloopbody:insert(quote - [cs[i][j]] = [cs[i][j]] + aa * bb - end) - end - end - end - - stmts:insert(quote - for [k] = kk, kk + NK, V*KR do - kloopbody - end - end) - - for i = 0, AR-1 do - for j = 0, BR-1 do - local function getsum(b,e) - if b + 1 == e then - return `[cs[i][j]][b] - else - local mid = (e + b)/2 - assert(math.floor(mid) == mid) - local lhs = getsum(b,mid) - local rhs = getsum(mid,e) - return `lhs + rhs - end - end - local sum - if V == 8 and terralib.llvmversion ~= 31 then - sum = `hadd([cs[i][j]]) - else - sum = getsum(0,V) - end - stmts:insert(quote - var r = sum - if kk == 0 then - C[(m + i)*ldc + (n + j)] = r - else - C[(m + i)*ldc + (n + j)] = C[(m + i)*ldc + (n + j)] + r - end - end) - end - end - - return stmts -end) - -terra my_sgemm(gettime : {} -> double, M : int, N : int, K : int, alpha : float, A : &float, lda : int, B : &float, ldb : int, - beta : float, C : &float, ldc : int) - - var TB = [&float](stdlib.malloc(K * N * sizeof(float))) - for k = 0,K do - for n = 0,N do - TB[n*K + k] = B[k*ldb + n] - end - end - - for mm = 0,M,NB do - for nn = 0, N,NB do - for kk = 0, K, NK do - for m = mm,mm+NB,AR do - for n = nn,nn+NB,BR do - blockregisters(C,A,TB,K,lda,ldc,m,n,kk) - end - end - end - end - end - stdlib.free(TB) -end - -my_sgemm:compile() -my_sgemm:printpretty() - -terralib.saveobj("my_sgemm.o", {my_sgemm = my_sgemm}) diff --git a/samples/Terra/sgemm3.t b/samples/Terra/sgemm3.t deleted file mode 100644 index 4c625cb6..00000000 --- a/samples/Terra/sgemm3.t +++ /dev/null @@ -1,124 +0,0 @@ - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end - - -llvmprefetch = terralib.intrinsic("llvm.prefetch",{&opaque,int,int,int} -> {}) - - - -function genkernel(NB, RM, RN, V,alpha) - - local A,B,C,mm,nn,ld = symbol("A"),symbol("B"),symbol("C"),symbol("mn"),symbol("nn"),symbol("ld") - local lda,ldb,ldc = ld,ld,ld - local a,b,c,caddr = symmat("a",RM), symmat("b",RN), symmat("c",RM,RN), symmat("caddr",RM,RN) - local k = symbol("k") - - local loadc,storec = terralib.newlist(),terralib.newlist() - local VT = vector(float,V) - local VP = &VT - for m = 0, RM-1 do - for n = 0, RN-1 do - loadc:insert(quote - var [caddr[m][n]] = C + m*ldc + n*V - var [c[m][n]] = alpha * @VP([caddr[m][n]]) - end) - storec:insert(quote - @VP([caddr[m][n]]) = [c[m][n]] - end) - end - end - - local calcc = terralib.newlist() - - for n = 0, RN-1 do - calcc:insert(quote - var [b[n]] = @VP(&B[n*V]) - end) - end - for m = 0, RM-1 do - calcc:insert(quote - var [a[m]] = VT(A[m*lda]) - end) - end - for m = 0, RM-1 do - for n = 0, RN-1 do - calcc:insert(quote - [c[m][n]] = [c[m][n]] + [a[m]] * [b[n]] - end) - end - end - - - return terra([A] : &float, [B] : &float, [C] : &float, [ld] : int64) - for [mm] = 0, NB, RM do - for [nn] = 0, NB,RN*V do - [loadc]; - for [k] = 0, NB do - llvmprefetch(B + 4*ldb,0,3,1); - [calcc]; - B = B + ldb - A = A + 1 - end - [storec]; - A = A - NB - C = C + RN*V - B = B - ldb*NB + RN*V - end - C = C + RM * ldb - NB - B = B - NB - A = A + lda*RM - end - end -end - -local NB = 48 -local NB2 = 5 * NB - -local V = 1 - -l1dgemm0 = genkernel(NB,1,1,V,0) -l1dgemm1 = genkernel(NB,1,1,V,1) - -terra min(a : int, b : int) - return terralib.select(a < b, a, b) -end - -local stdlib = terralib.includec("stdlib.h") -local IO = terralib.includec("stdio.h") - -terra my_sgemm(gettime : {} -> double, M : int, N : int, K : int, alpha : float, A : &float, lda : int, B : &float, ldb : int, - beta : float, C : &float, ldc : int) - - - for mm = 0,M,NB2 do - for nn = 0,N,NB2 do - for kk = 0,K, NB2 do - for m = mm,min(mm+NB2,M),NB do - for n = nn,min(nn+NB2,N),NB do - for k = kk,min(kk+NB2,K),NB do - --IO.printf("%d %d starting at %d\n",m,k,m*lda + NB*k) - if k == 0 then - l1dgemm0(A + (m*lda + k), - B + (k*ldb + n), - C + (m*ldc + n),lda) - else - l1dgemm1(A + (m*lda + k), - B + (k*ldb + n), - C + (m*ldc + n),lda) - end - end - end - end - end - end - end -end - -terralib.saveobj("my_sgemm.o", { my_sgemm = my_sgemm }) \ No newline at end of file diff --git a/samples/Terra/sgemmkernel.t b/samples/Terra/sgemmkernel.t deleted file mode 100644 index 46c21454..00000000 --- a/samples/Terra/sgemmkernel.t +++ /dev/null @@ -1,164 +0,0 @@ - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end - - -function genkernel(NB, RM, RN, V,alpha) - - local terra vecload(data : &float, idx : int) - var addr = &data[idx] - return @[&vector(float,V)](addr) - end - local terra vecstore(data : &float, idx : int, v : vector(float,V)) - var addr = &data[idx] - @[&vector(float,V)](addr) = v - end - - local A,B,C,mm,nn = symbol("A"),symbol("B"),symbol("C"),symbol("mn"),symbol("nn") - local lda,ldb,ldc = NB,NB,NB - local a,b,c,caddr = symmat("a",RM), symmat("b",RN), symmat("c",RM,RN), symmat("caddr",RM,RN) - local k = symbol("k") - - local loadc,storec = terralib.newlist(),terralib.newlist() - local VT = vector(float,V) - local VP = &VT - for m = 0, RM-1 do - for n = 0, RN-1 do - loadc:insert(quote - var [caddr[m][n]] = C + (mm+m)*ldc + nn + n*V - var [c[m][n]] = alpha * @VP([caddr[m][n]]) - end) - storec:insert(quote - @VP([caddr[m][n]]) = [c[m][n]] - end) - end - end - - local calcc = terralib.newlist() - - for n = 0, RN-1 do - calcc:insert(quote - var [b[n]] = @VP(&B[k*ldb + nn + n*V]) - end) - end - for m = 0, RM-1 do - calcc:insert(quote - var [a[m]] = VT(A[(mm+m)*lda + k]) - end) - end - for m = 0, RM-1 do - for n = 0, RN-1 do - calcc:insert(quote - [c[m][n]] = [c[m][n]] + [a[m]] * [b[n]] - end) - end - end - - - return terra([A] : &float, [B] : &float, [C] : &float) - for [mm] = 0, NB, RM do - for [nn] = 0, NB,RN*V do - [loadc]; - for [k] = 0, NB do - [calcc]; - end - [storec]; - end - end - end -end - -local NB = 32 -local NB2 = 8 * NB - -local V = 8 - -l1sgemm0 = genkernel(NB,2,4,V,0) -l1sgemm1 = genkernel(NB,2,4,V,1) - -terra min(a : int, b : int) - return terralib.select(a < b, a, b) -end - -local stdlib = terralib.includec("stdlib.h") -local IO = terralib.includec("stdio.h") - -local VT = vector(float,V) - -terra my_sgemm(gettime : {} -> double, M : int, N : int, K : int, alpha : double, A : &float, lda : int, B : &float, ldb : int, - beta : float, C : &float, ldc : int) - - var AA = [&float](stdlib.malloc(sizeof(float)*M*K)) - var BB = [&float](stdlib.malloc(sizeof(float)*K*N)) - var CC = [&float](stdlib.malloc(sizeof(float)*M*N)) - - var i = 0 - for mm = 0,M,NB do - for kk = 0,K,NB do - for m = mm,mm+NB do - for k = kk,kk+NB,V do - @[&VT](&AA[i]) = @[&VT](&A[m*lda + k]) - i = i + V - end - end - end - end - i = 0 - for kk = 0,K,NB do - for nn = 0,N,NB do - for k = kk,kk+NB do - for n = nn,nn+NB,V do - @[&VT](&BB[i]) = @[&VT](&B[k*ldb + n]) - i = i + V - end - end - end - end - - for mm = 0,M,NB2 do - for nn = 0,N,NB2 do - for kk = 0,K, NB2 do - for m = mm,min(mm+NB2,M),NB do - for n = nn,min(nn+NB2,N),NB do - for k = kk,min(kk+NB2,K),NB do - --IO.printf("%d %d starting at %d\n",m,k,m*lda + NB*k) - if k == 0 then - l1sgemm0(AA + (m*lda + NB*k), - BB + (k*ldb + NB*n), - CC + (m*ldc + NB*n)) - else - l1sgemm1(AA + (m*lda + NB*k), - BB + (k*ldb + NB*n), - CC + (m*ldc + NB*n)) - end - end - end - end - end - end - end - - i = 0 - for mm = 0,M,NB do - for nn = 0,N,NB do - for m = mm,mm+NB do - for n = nn,nn+NB,V do - @[&VT](&C[m*ldc + n]) = @[&VT](&CC[i]) - i = i + V - end - end - end - end - - stdlib.free(AA) - stdlib.free(BB) - stdlib.free(CC) -end - -terralib.saveobj("my_sgemmkernel.o", { my_sgemm = my_sgemm }) \ No newline at end of file diff --git a/samples/Terra/shallowfreeze.t b/samples/Terra/shallowfreeze.t deleted file mode 100644 index 7d5b3d9e..00000000 --- a/samples/Terra/shallowfreeze.t +++ /dev/null @@ -1,24 +0,0 @@ - - -struct B { - d : int -} -struct A { - b : &B; - c : int; - d : int; - e : int; -} - - -terra foo() : A - return A {nil} -end - -foo:disas() - -print(foo()) - - - -terralib.dumpmodule() \ No newline at end of file diff --git a/samples/Terra/sharedlib.t b/samples/Terra/sharedlib.t deleted file mode 100644 index 64a7afe9..00000000 --- a/samples/Terra/sharedlib.t +++ /dev/null @@ -1,22 +0,0 @@ - - -terra foo(a : int, b : int) - return a + b -end - -local ffi = require 'ffi' - -local name = (ffi.os == "Windows" and "foo.dll" or "foo.so") - -local args = {} - -if ffi.os == "Windows" then - args = {"/IMPLIB:foo.lib","/EXPORT:foo" } -end - -terralib.saveobj(name,{ foo = foo }, args) - -local foo2 = terralib.externfunction("foo", {int,int} -> int ) -terralib.linklibrary("./"..name) - -assert(4 == foo2(1,3)) diff --git a/samples/Terra/shift.t b/samples/Terra/shift.t deleted file mode 100644 index 67794ebd..00000000 --- a/samples/Terra/shift.t +++ /dev/null @@ -1,7 +0,0 @@ -local test = require("test") - -terra foo(a : int) - return 1 << 2, a >> 1, -4 >> 1, uint32(-a) >> 1 -end - -test.meq({4,2,-2,2147483646},foo(4)) diff --git a/samples/Terra/signext.t b/samples/Terra/signext.t deleted file mode 100644 index a9a17096..00000000 --- a/samples/Terra/signext.t +++ /dev/null @@ -1,12 +0,0 @@ - - -terra bar() - var a : uint8 = 255 - var b = foo(a) - return a == b -end and -terra foo(a : uint8) - return a -end - -print(bar()) \ No newline at end of file diff --git a/samples/Terra/simple.t b/samples/Terra/simple.t deleted file mode 100644 index 8d21c5eb..00000000 --- a/samples/Terra/simple.t +++ /dev/null @@ -1,6 +0,0 @@ - -terra simple(a : int) - return a + a -end -local test = require("test") -test.eq(simple(2),4) \ No newline at end of file diff --git a/samples/Terra/simpleadd.t b/samples/Terra/simpleadd.t deleted file mode 100644 index dd8e42cd..00000000 --- a/samples/Terra/simpleadd.t +++ /dev/null @@ -1,15 +0,0 @@ -struct Complex { real : float, imag : float } - -terra Complex.metamethods.__add(a : Complex, b : Complex) - return Complex { a.real + b.real, a.imag + b.imag } -end - - -terra foo() - var a = Complex { 1, 2 } - var b = Complex { 3, 4 } - var c = a + b - return c.real,c.imag -end - -print(foo()) \ No newline at end of file diff --git a/samples/Terra/simpleapply.t b/samples/Terra/simpleapply.t deleted file mode 100644 index e6a67034..00000000 --- a/samples/Terra/simpleapply.t +++ /dev/null @@ -1,19 +0,0 @@ -struct Vec { data : int[4] } -Vec.metamethods.__apply = terra(self : &Vec, i : int) - return self.data[i] -end - -struct Vec2 { data : int[4] } -Vec2.metamethods.__apply = macro(function(self,b) - return `self.data[b] -end) - -terra bar() - var a = Vec { array(1,2,3,4) } - var b = Vec2 { array(1,2,3,4) } - b(2) = b(2) + 1 - return b(2) + a(2) -end - -local test = require("test") -test.eq(bar(),7) \ No newline at end of file diff --git a/samples/Terra/simpleglobal.t b/samples/Terra/simpleglobal.t deleted file mode 100644 index ff8964ce..00000000 --- a/samples/Terra/simpleglobal.t +++ /dev/null @@ -1,19 +0,0 @@ - -local a = terralib.global(int) -local b = terralib.global(5) -local c = terralib.global(int,3) -terra foo() - a = 4 -end - - -terra bar() - return c + a + b -end - -foo() -assert(bar() == 12) - -b:set(4) - -assert(bar() == 11) \ No newline at end of file diff --git a/samples/Terra/simplerec.t b/samples/Terra/simplerec.t deleted file mode 100644 index 5d0b98ff..00000000 --- a/samples/Terra/simplerec.t +++ /dev/null @@ -1,25 +0,0 @@ - - - -local terra bar() - return 1 -end -and struct A { - a : int -} -and local struct B { - a : int -} -and terra B:foo() - return self.a -end -and terra foo() - var b , a = B{4}, A{5} - return 1 + b:foo() -end -and local terra mydecl -and struct mystructdecl - -print(bar()) - -print(foo()) diff --git a/samples/Terra/simplestruct.t b/samples/Terra/simplestruct.t deleted file mode 100644 index fc0b5ac8..00000000 --- a/samples/Terra/simplestruct.t +++ /dev/null @@ -1,10 +0,0 @@ - -struct A { - a : int -} - -terra foo(a : &A) - return a -end - -print(foo(terralib.new(A,{3}))) diff --git a/samples/Terra/simplevec.t b/samples/Terra/simplevec.t deleted file mode 100644 index b75f3d1a..00000000 --- a/samples/Terra/simplevec.t +++ /dev/null @@ -1,12 +0,0 @@ - -terra sum(input : &float, N : int) - var acc : vector(float,4) = vector(0.f,0.f,0.f,0.f) - for i = 0,N,4 do - --cast the floats to float4s and load - var entry = @[&vector(float,4)](input + i) - acc = acc + entry - end - return acc[0] + acc[1] + acc[2] + acc[3] -end - -sum:disas() diff --git a/samples/Terra/sintable.t b/samples/Terra/sintable.t deleted file mode 100644 index c1606563..00000000 --- a/samples/Terra/sintable.t +++ /dev/null @@ -1,17 +0,0 @@ -local N = 32 -local tbl = terralib.new(float[N]) -for i = 1,N do - tbl[i-1] = math.sin( 2 * math.pi * (i-1)/N) -end - -local ctable = terralib.constant(tbl) - -terra sintable(a : float) : float - var idx = int(a / (2 * math.pi) * N) - return ctable[idx] -end - -sintable:disas() - -print(sintable(0)) -print(sintable(math.pi/4)) \ No newline at end of file diff --git a/samples/Terra/special.t b/samples/Terra/special.t deleted file mode 100644 index 218aa3a2..00000000 --- a/samples/Terra/special.t +++ /dev/null @@ -1,61 +0,0 @@ - -local test = require("test") - -function mkspecial(N) - local terra pow(a : double) - var i,r = 0,1.0 - while i < N do - r = r * a - i = i + 1 - end - return r - end - return pow -end - - -local pow2 = mkspecial(2) -local pow3 = mkspecial(3) - -test.eq(pow2(2),4) -test.eq(pow3(2),8) - - -function mkor(T) - local terra fn(a : T, b : T) : T - return a or b - end - return fn -end - -local lor = mkor(bool) -local aor = mkor(int) - -test.eq(lor(1,2),true) -test.eq(aor(1,2),3) - - ---[[ -function my_lua_fun() - - val my_list = new_list() - defer delete(my_list) - - - - return { ["a"] = 1, ["b"] = 2 } -end ---wess weimer PhD on controlling actions -a:my_method(b) - -a.my_method(a,b) - -var a : T -a:my_method(b) -T.my_method(a,b) - -Pair = typedef(struct { a = int, b = int}) - -var a : Pair = { 1, 3 } -var a : Pair = my_lua_fun() -]] \ No newline at end of file diff --git a/samples/Terra/speed.t b/samples/Terra/speed.t deleted file mode 100644 index ceca0264..00000000 --- a/samples/Terra/speed.t +++ /dev/null @@ -1,30 +0,0 @@ -local c = terralib.includecstring [[ - #include - #include -]] - -terra doit(N : int64) - var cur,last = 1ULL,1ULL - for i = 0ULL, (N-2ULL) do - cur,last = cur+last,cur - end - return cur -end -terra main(argc : int, argv : &&int8) - var N = 4ULL - if argc == 2 then - N = c.atoi(argv[1]) - end - var result = doit(N) - c.printf("%lld\n",result) -end - -terra what() - return c.atoi("54") -end - -local test = require("test") -print(what()) -print(test.time( function() doit:compile() end)) -print(test.time( function() doit(100000000) end)) -print(test.time( function() terralib.saveobj("speed",{main = main}) end)) diff --git a/samples/Terra/splitprimary.t b/samples/Terra/splitprimary.t deleted file mode 100644 index aed90417..00000000 --- a/samples/Terra/splitprimary.t +++ /dev/null @@ -1,19 +0,0 @@ -r = 1 -local function foo(a) - r = a - return r -end -local b = foo(1) -(foo)(3) -assert(b + r == 4) - -terra testescapes() - var a = [4] - [ quote - a = a + 1 - end - ] - return [ `&a ][0] -end - -assert(testescapes() == 5) \ No newline at end of file diff --git a/samples/Terra/ssimple.t b/samples/Terra/ssimple.t deleted file mode 100644 index a50f90a8..00000000 --- a/samples/Terra/ssimple.t +++ /dev/null @@ -1,477 +0,0 @@ -function failit(fn) - local success,msg = pcall(fn) - if success then - error("failed to fail.",2) - elseif not string.match(msg,"Errors reported during") then - error("failed wrong: "..msg,2) - end -end - -terra foo() - return 1 -end - -a = 4 -terra foo2() - return a -end -b = 4.5 -terra foo3() - return b -end - -terra foo4() - var a = 3 - return a -end - - - -sa = symbol("myname") - -terra foo5() - var [sa] = 5 - return sa -end - -whatwhat = `3 + b - -terra foo6() - return whatwhat -end - -local whatwhat2 = {4,5} - -terra foo7() - return 3,4,5,whatwhat,whatwhat2 -end - -terra foo8() - return whatwhat2,4 -end - -local test = require("test") -assert(foo() == 1) -assert(foo2() == 4) -assert(foo3() == 4.5) -assert(foo4() == 3) -assert(foo5() == 5) -assert(foo6() == 7.5) -test.meq({3,4,5,7.5,4,5},foo7()) -test.meq({4,5,4},foo8()) - -local a = { b = {c = 4}} -terra foo9() - return a.["b"].c -end -print(foo9()) - -struct A { a : int } - -A.methods.what = terra() return 4 end - - -terra foo10() - return A.what() -end - -assert(foo10() == 4) - - -terra foo11() - var c = 3 - return [4 + 5 + a.b.c] + [c] -end - -assert(foo11() == 16) - -failit(function() - local terra missingvar() - return missing - end -end) -local b = coroutine.create(failit) -failit(function() - return `sa.foobar,`b.e -end) -failit(function() - return `a.d -end) -failit(function() - return `a.[1+"nope"] -end) -failit(function() - return `a.[1] -end) - -over = symbol() - -anint = symbol(int) - -terra foo13() - var [anint] - anint = 3 - return anint -end -assert(foo13() == 3) - -terra foo12() - goto [over] - while true do - end - ::[over]:: -end - -foo12() - - -terra foo14() : {int,double} - return 3.5,4.5 -end - -test.meq({3,4.5},foo14()) - -terra foo15() : int - return 3.5 -end -assert(foo15() == 3) - -failit(function() - local terra foo16() : 3 - end -end) - -terra foo16() - var r = 0 - for i = 0,10 do - r = r + 2 - end - return r -end - -assert(foo16() == 20) - -terra foo17() - var i = 0 - repeat - i = i + 1 - var b = i + 1 - until b == 10 - repeat - until true - return i -end -assert(foo17() == 9) - -local terra foo18() - var a : int, b : double = 2.5,2.5 - return a,b -end - -test.meq({2,2.5},foo18()) - -failit(function() - local function doit() - return 1 + {} - end - return `[doit()] -end) - -failit(function() -local terra foo19() - var a : 3, b : double = 2.5,2.5 - return a,b -end -foo19() -end) - -failit(function() -local terra foo20() - var a : int, a : double = 2.5,2.5 - return a,a -end -foo20() -end) - -foo21s = symbol() - -local terra foo21() - var [foo21s],b = 3,4 - return b + foo21s -end -assert(foo21() == 7) - -failit(function() -local terra foo20() - var ["a"] : int, ["b"] = 4,5 - return a -end -end) - -failit(function() - return quote var a end -end) - -astring = "astring" - -local terra foo22() - return astring[0] -end - -assert(foo22() == 97) - -local aquote = `7 -local atree = aquote.tree - -terra foo23() - return atree -end - -assert(foo23() == 7) - -terra foo24(a : int) - return 3,4 + a -end - -terra foo25() - var c,a,b = 4,foo24(3) - return a + b + c -end - - - -assert(foo25() == 14) - -local obfuscate = { foo24 } -terra foo26() - var c,a,b = 4,obfuscate(3) - return a + b + c -end - -local obfuscate2 = { `foo24(3) } -terra foo27() - obfuscate2 - foo24(3) -end -foo27() - -assert(foo26() == 14) - -failit(function() -local terra foo26a(a : int) - if a == 0 then - return a - else - return foo26a(a - 1) + 1 - end -end -foo26a(3) -end) - -local terra foo26b(a : int) : int - if a == 0 then - return a - else - var foo26bptr = foo26b - return foo26b(a - 1) + foo26bptr(0) + 1 - end -end - -assert(foo26b(3) == 3) - - -failit(function() - (terra() return (3)(4) end)() -end) - -failit(function() - local terra notdefined - local terra callnotdefined() - return notdefined(1) - end - callnotdefined() -end) - - - local terra norets() - end - local terra callnotdefined() - return (norets()) - end - callnotdefined() - -local terra returns2() return 1,2 end - -terra foo29(a : int) - if a > 1 then - return (returns2()._0) - else - return 5 - end -end - -assert(foo29(3) == 1 and foo29(0) == 5) - - -terra foo30() - print(4) -end - -foo30() - - -local terra notdefined -local terra definedtwice(a : int) return a end -terra definedtwice(a : int, b : int) return a + b end - -failit(function() -local terra foo31() - return (notdefined), (definedtwice) -end -foo31() -end) - -terra foo35() - return definedtwice(3) + definedtwice(3,4) -end - - -local terra foo36() - var r = returns2() - return definedtwice(unpackstruct(r)) -end -assert(3 == foo36()) - -assert(foo35() == 10) - -struct B { - a : int; - b : double; -} - -terra B:add() - return self.a + self.b -end - -terra B:inc(v : int) - self.a = self.a + v -end - -B.metamethods.__apply = terra(self : &B, v :int) - return v + v -end - -B.metamethods.__entrymissing = macro(function() return 8 end) - -struct C { - a : int; -} - -terra B.metamethods.__add(self : &B, a : int, b : int) - return self.a + a -end -terra B.metamethods.__add(self : &B, a : int, b : int, c : int) - return self.a + a -end - - -function myvoid() - print("CALLED") -end -terra testcallvoid() - myvoid() -end -print("BEFORE") -testcallvoid() -print("AFTER") - -terra C.metamethods.__add(b : &B, c : &C) - return b.a + c.a -end - -terra foo40() - var b = B { 5,6 } - var c = C { 3 } - var ptrb = &b - b:inc(3) - ptrb:inc(3) - return b:add() + ptrb:add() + b(3) + ptrb(3) + b.foo + ptrb.foo + (b + c) -end - -assert(foo40() == 8 + 8 + 6 + 6 + 6 + 11 + 6 + 11 + 3 + 11) -B.metamethods.__add = macro(function(b,c) return `b.a + c.a + 1 end) -terra foo41() - var b = B { 5,6 } - var c = C { 3 } - var ptrb = &b - b:inc(3) - ptrb:inc(3) - return b:add() + ptrb:add() + b(3) + ptrb(3) + b.foo + ptrb.foo + (b + c) -end - -assert(foo41() == 8 + 8 + 6 + 6 + 6 + 11 + 6 + 11 + 3 + 11 + 1) - -terra foo32() - var a = B { b = 3, a = 4 } - var ptra = &a - a.b = a.b + 1 - ptra.a = ptra.a + (@ptra).a + 1 - return a.a, a.b -end - -test.meq({9,4},foo32()) - -terra foo33() - return (vector(3,4,5) + vectorof(double,3,4,5))[0] + sizeof(double) -end - -local notinscope = symbol() - -failit(function() - local terra foo34() - return notinscope - end - foo34() -end) - -local gbl = global(int) - -terra foo37() - gbl = 4 -end -foo37() - -assert(gbl:get() == 4) -assert(foo33() == 14) - -local C = terralib.includec("stdio.h") - -terra foo38() - C.printf("hello, world %f\n", 3.5f) -end -foo38() -local twice = macro(function(exp,call) - return quote - exp = exp + 1 + call._0 - exp = exp + 1 + call._0 - end -end) -terra foo39() - var a = 4 - twice(a,returns2()) - return a -end - -assert(foo39() == 8) ---checkexp truncate and allowluaobjects behavior ---global variable resolution ---select/pointerselect/__get ---expression macro 1 return ---expression macro truncated ---expression macro expanded ---expression macro that returns a multi-ret function ---expression macro that returns a multi-ret function that was an argument ---function call, function call with multi-return, ---function call to overloaded function/undef function ---overloaded operator with mixed macro/function stuff ---reciever cast stuff \ No newline at end of file diff --git a/samples/Terra/staticmethod.t b/samples/Terra/staticmethod.t deleted file mode 100644 index 0ce91a4c..00000000 --- a/samples/Terra/staticmethod.t +++ /dev/null @@ -1,9 +0,0 @@ -struct A { -} -A.metamethods.__getmethod = function(self,idx) - return tonumber(string.sub(idx,2,-1)) -end -terra foo() - return A.f33 + A.b34 -end -assert(67 == foo()) \ No newline at end of file diff --git a/samples/Terra/stattest.t b/samples/Terra/stattest.t deleted file mode 100644 index 71380d2d..00000000 --- a/samples/Terra/stattest.t +++ /dev/null @@ -1,13 +0,0 @@ -local ffi = require("ffi") -if ffi.os == "Windows" then - return -end - -C,T = terralib.includec("sys/stat.h") -terra dostat() - var s : T.stat - C.stat("stattest.t",&s) - return s.st_size -end - -assert(dostat() == 210) diff --git a/samples/Terra/stencil.t b/samples/Terra/stencil.t deleted file mode 100644 index 1ce4d732..00000000 --- a/samples/Terra/stencil.t +++ /dev/null @@ -1,134 +0,0 @@ - -local C = terralib.includecstring [[ -#include -#include -#ifndef _WIN32 -#include -static double CurrentTimeInSeconds() { - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec + tv.tv_usec / 1000000.0; -} -#else -#include -static double CurrentTimeInSeconds() { - return time(NULL); -} -#endif - -int CalcTime(int * times, double * start) { - if(*times == 0) { - *start = CurrentTimeInSeconds(); - } else { - double elapsed = CurrentTimeInSeconds() - *start; - if(elapsed > 0.1f && *times >= 3) { - *start = elapsed / *times; - return 0; - } - } - (*times)++; - return 1; -} -]] - - -function symmat(name,I,...) - if not I then return symbol(name) end - local r = {} - for i = 0,I-1 do - r[i] = symmat(name..tostring(i),...) - end - return r -end - - - -local IO = terralib.includec("stdio.h") - - - -NI,NJ = 1,4 -V = 8 -terra uload(d : &float) - return terralib.attrload([&vector(float,V)](d), { align = 4 }) -end -terra ustore(d : &float, v : vector(float,V)) - terralib.attrstore([&vector(float,V)](d), v, { align = 4 }) -end - -terra runit(N : int, input : &float, output : &float) - input = input + N*NI + V*NJ - output = output + N*NI + V*NJ - for i = NI, N-NI,NI do - for j = V*NJ, N-V*NJ,V*NJ do - [(function() - local C = symmat("C",NI,NJ) - local stmts = terralib.newlist() - for iii = 0,NI-1 do for jjj = 0,NJ-1 do - stmts:insert(quote - var [C[iii][jjj]] : vector(float,V) = 0 - end) - end end - - for ii = -1,1 do - for jj = -1,1 do - for iii = 0,NI-1 do for jjj = 0,NJ-1 do - if math.abs(ii) + math.abs(jj) ~= 2 then - stmts:insert(quote - var d = uload(input + N * (ii + iii) + jj + V*jjj); - [C[iii][jjj]] = [C[iii][jjj]] + d - end) - end - end end - end - end - for iii = 0,NI-1 do for jjj = 0,NJ-1 do - stmts:insert(quote - ustore(output + N * (iii) + V*jjj, [C[iii][jjj]]) - end) - end end - return stmts - end)()] - input = input + V*NJ - output = output + V*NJ - end - input = input + 2*V*NJ - output = output + 2*V*NJ - end -end - -terra doit() - var N = 2048 - var img = [&float](C.malloc(N*N*sizeof(float))) - var img2 = [&float](C.malloc(N*N*sizeof(float))) - - for i = 0, N do - for j = 0, N do - img[i*N+j] = 1 - end - end - - var times = 0 - var mytime : double - while C.CalcTime(×,&mytime) ~= 0 do - runit(N,img,img2) - end - - C.printf("times = %d\n",times) - for i = NI, N-NI do - for j = V*NJ, N-V*NJ do - if img2[i*N+j] ~= 5 then - C.printf("wrong! %d %d %f\n",i,j,img2[i*N+j]) - goto out - end - end - end - ::out:: - var togiga = 1.0/(1024*1024*1024) - var pixels = (N-NI)*(N-V*NJ) - C.printf("%f %f %f\n", mytime, pixels*4*2 *togiga / mytime, 5*pixels * togiga / mytime) - -end -doit() -runit:disas() -doit() diff --git a/samples/Terra/strerror.t b/samples/Terra/strerror.t deleted file mode 100644 index 6eb0b83f..00000000 --- a/samples/Terra/strerror.t +++ /dev/null @@ -1,9 +0,0 @@ -string=terralib.includec("string.h") -buf=terralib.new(int8[1024]) -ffi = require "ffi" -if ffi.os == "Windows" then - string.strerror_s(buf,1024,1) -else - string.strerror_r(1,buf,1024) -end -print(ffi.string(buf)) diff --git a/samples/Terra/string.t b/samples/Terra/string.t deleted file mode 100644 index d44388eb..00000000 --- a/samples/Terra/string.t +++ /dev/null @@ -1,15 +0,0 @@ - -local c = terralib.includec("stdio.h") - -terra foo() - var a = "whatwhat\n" - return c.puts(a) -end - -local test = require("test") -local ffi = require("ffi") -if ffi.os == "Windows" then - test.eq(foo(),0) -else - test.eq(foo(),10) -end \ No newline at end of file diff --git a/samples/Terra/struct.t b/samples/Terra/struct.t deleted file mode 100644 index 5c3f96cd..00000000 --- a/samples/Terra/struct.t +++ /dev/null @@ -1,50 +0,0 @@ ---the zero line -struct A { b : B } and -struct B {a : int, b : int} - -terra bar(a : B) - a.a = a.a + 1 - return a,3 -end - -terra foo() - var a : B - a.a = 4; - --(bar(a)).a = 3, TODO: why is the offset == 0 for this value? - var c,d = bar(a) - return c.a + a.a + d -end - - -terra baz(a : &B) - a.a = 1 - a.b = 2 - return a.a -end - - -terra foo2() - var a : B - var d = baz(&a) - return a.a + a.b + d -end -local test = require("test") - -test.eq(foo(),12) -test.eq(foo2(),4) - - -local C = tuple(int, int) - -local D = tuple(int, int) - -terra anon() - var c : C - c._0 = 3 - c._1 = 4 - var d : D = c - --var b : B = d - return d._0 + d._1 -end - -test.eq(anon(),7) \ No newline at end of file diff --git a/samples/Terra/structarg.t b/samples/Terra/structarg.t deleted file mode 100644 index c3d1f4ed..00000000 --- a/samples/Terra/structarg.t +++ /dev/null @@ -1,9 +0,0 @@ -terra foobar() - var a = { a=3,b=4} - var b = {a=5,b=6.0} - b = a - return a.a -end - -local test = require("test") -test.eq(foobar(),3) \ No newline at end of file diff --git a/samples/Terra/structcast.t b/samples/Terra/structcast.t deleted file mode 100644 index 9b84a258..00000000 --- a/samples/Terra/structcast.t +++ /dev/null @@ -1,38 +0,0 @@ -struct A { a : int } -struct B {a : int, b : A} - -local D = tuple(double, A) - -terra anon() - var b : B - b.a = 4 - b.b.a = 3 - - var d : D - d._0 = 1.0 - d._1.a = 2 - - b = B(d) - - return b.a + b.b.a -end - -terra anon2() - var b = B { b = A{ 2.0 }, a = 4 } - var b2 = B { a = 4, b = A{ 2.0 } } - var b3 = B{ 4, A{2.0} } - return b.a + b.b.a + b2.a + b2.b.a + b3.a + b3.b.a -end - -terra anon3() - return {5,A{6}} -end - -terra anon4() - var b = B(anon3()) - return b.a + b.b.a -end -test = require("test") -test.eq(anon(),3) -test.eq(anon2(),18) -test.eq(anon4(),11) \ No newline at end of file diff --git a/samples/Terra/structconstructor.t b/samples/Terra/structconstructor.t deleted file mode 100644 index 8a9bd5c9..00000000 --- a/samples/Terra/structconstructor.t +++ /dev/null @@ -1,9 +0,0 @@ -struct A { a : int, b : int} - -terra foobar() - var a = A { 3, 4} - return a.b -end - -local test = require("test") -test.eq(foobar(),4) \ No newline at end of file diff --git a/samples/Terra/structrvalue.t b/samples/Terra/structrvalue.t deleted file mode 100644 index 31c0f6eb..00000000 --- a/samples/Terra/structrvalue.t +++ /dev/null @@ -1,16 +0,0 @@ ---the zero line -struct A { b : B } and -struct B {a : int, b : int} - - -terra foo() - var b = B {1,2} - return b -end - -terra bar() - return foo().b -end - -local test = require("test") -test.eq(bar(),2) \ No newline at end of file diff --git a/samples/Terra/structsyntax.t b/samples/Terra/structsyntax.t deleted file mode 100644 index 43d1b06a..00000000 --- a/samples/Terra/structsyntax.t +++ /dev/null @@ -1,14 +0,0 @@ -struct A { - a : int - b : float - union { - c : int - d : float - } -} - -terra foo() - return A { a = 4, b = 5, c = 3} -end - -assert(foo().c == 3) \ No newline at end of file diff --git a/samples/Terra/sugar.t b/samples/Terra/sugar.t deleted file mode 100644 index 6870fde5..00000000 --- a/samples/Terra/sugar.t +++ /dev/null @@ -1,15 +0,0 @@ - -local foo = &int - - -local a = int -> {bool,int} - -print(a.name) - -terra foo2() - -end - - - -local test = require("test") diff --git a/samples/Terra/sumlanguage1.t b/samples/Terra/sumlanguage1.t deleted file mode 100755 index 84889622..00000000 --- a/samples/Terra/sumlanguage1.t +++ /dev/null @@ -1,2 +0,0 @@ -import "lib/sumlanguage" -assert((sum 1.0f,2LL,2ULL,3.0,1U,1 done)==10) \ No newline at end of file diff --git a/samples/Terra/sumlanguage2.t b/samples/Terra/sumlanguage2.t deleted file mode 100755 index 7c84b980..00000000 --- a/samples/Terra/sumlanguage2.t +++ /dev/null @@ -1,4 +0,0 @@ -import "lib/sumlanguage2" -a = 2 -local b = 3 -assert(sum 1,a,b done == 6) \ No newline at end of file diff --git a/samples/Terra/symbolmangling.t b/samples/Terra/symbolmangling.t deleted file mode 100644 index 70c5ad79..00000000 --- a/samples/Terra/symbolmangling.t +++ /dev/null @@ -1,4 +0,0 @@ -C = terralib.includecstring [[ - #include -]] -C.fopen("broken.t","r") diff --git a/samples/Terra/symbolvar.t b/samples/Terra/symbolvar.t deleted file mode 100644 index 4d4b0cbd..00000000 --- a/samples/Terra/symbolvar.t +++ /dev/null @@ -1,11 +0,0 @@ - - -local a = symbol() - -terra foo() - var [a] = 3 - return [a] -end - -local test = require("test") -test.eq(3,foo()) \ No newline at end of file diff --git a/samples/Terra/symbolvar2.t b/samples/Terra/symbolvar2.t deleted file mode 100644 index 1195e539..00000000 --- a/samples/Terra/symbolvar2.t +++ /dev/null @@ -1,16 +0,0 @@ - - -local a = symbol() - -local q = quote - [a] = [a] + 1 -end - -terra foo() - var [a] = 2 - q - return [a] -end - -local test = require("test") -test.eq(3,foo()) \ No newline at end of file diff --git a/samples/Terra/symbolvar3.t b/samples/Terra/symbolvar3.t deleted file mode 100644 index 5eed2aaa..00000000 --- a/samples/Terra/symbolvar3.t +++ /dev/null @@ -1,16 +0,0 @@ - - -local a = symbol() - -local q = quote - var [a] = 2 - [a] = [a] + 1 -end - -terra foo() - q - return [a] -end - -local test = require("test") -test.eq(3,foo()) \ No newline at end of file diff --git a/samples/Terra/symbolvar4.t b/samples/Terra/symbolvar4.t deleted file mode 100644 index 1db5c832..00000000 --- a/samples/Terra/symbolvar4.t +++ /dev/null @@ -1,16 +0,0 @@ -local a = symbol() -local b = symbol(int) - -local c = symbol(int) -local d = symbol() - - -terra foo() - var [a],[b] = 1.25,1.25 - var [c],[d] = 3.25,3.25 - return [a] + [b] + [c] + [d] -end - -local test = require("test") - -test.eq(foo(),8.50) \ No newline at end of file diff --git a/samples/Terra/symbolvar5.t b/samples/Terra/symbolvar5.t deleted file mode 100644 index 6028bb13..00000000 --- a/samples/Terra/symbolvar5.t +++ /dev/null @@ -1,16 +0,0 @@ -local a = symbol() -local b = { symbol(int), symbol(int) } - -local c = symbol(int) -local d = { symbol(), symbol() } - - -terra foo() - var [a],[b] = 1.25,1.25,1.25 - var [c],[d] = 3.25,3.25,3.25 - return [a] + [b[1]] + [b[2]] + [c] + [d[1]] + [d[2]] -end - -local test = require("test") - -test.eq(foo(),12.75) \ No newline at end of file diff --git a/samples/Terra/symbolvar6.t b/samples/Terra/symbolvar6.t deleted file mode 100644 index efd07137..00000000 --- a/samples/Terra/symbolvar6.t +++ /dev/null @@ -1,16 +0,0 @@ -local a = symbol() -local b = {} - -local c = symbol(int) -local d = {} - - -terra foo() - var [a],[b] = 1.25 - var [c],[d] = 3.25 - return [a] + [c] -end - -local test = require("test") - -test.eq(foo(),4.25) \ No newline at end of file diff --git a/samples/Terra/symbolvar7.t b/samples/Terra/symbolvar7.t deleted file mode 100644 index 5c0bc621..00000000 --- a/samples/Terra/symbolvar7.t +++ /dev/null @@ -1,15 +0,0 @@ -local a = symbol() -local b = { symbol(int), symbol(int) } - -local c = symbol(int) -local d = symbol(double) - -terra foo() - var [a] : double,[b] = 1.25,1.25,1.25 - var [c] : double,[d] : int = 3.25,3.25 - return [a] + [b[1]] + [b[2]] + [c] + [d] -end - -local test = require("test") - -test.eq(foo(),9.50) \ No newline at end of file diff --git a/samples/Terra/symparam.t b/samples/Terra/symparam.t deleted file mode 100644 index 9aea4d3a..00000000 --- a/samples/Terra/symparam.t +++ /dev/null @@ -1,9 +0,0 @@ - -local a = symbol() -terra foo([a] : int, b : int) - return [a] + b -end - -local test = require("test") - -test.eq(foo(1,2),3) \ No newline at end of file diff --git a/samples/Terra/symparam2.t b/samples/Terra/symparam2.t deleted file mode 100644 index f6c7e393..00000000 --- a/samples/Terra/symparam2.t +++ /dev/null @@ -1,9 +0,0 @@ - -local a = symbol(int) -terra foo([a], [a], b : int) - return [a] + b -end - -local test = require("test") - -test.eq(foo(1,2,4),6) \ No newline at end of file diff --git a/samples/Terra/symparam3.t b/samples/Terra/symparam3.t deleted file mode 100644 index 35b3e40b..00000000 --- a/samples/Terra/symparam3.t +++ /dev/null @@ -1,15 +0,0 @@ - -local a = symbol(int) -local c = {} -terra foo([a], b : int, [c]) - return [a] + b -end -local d = {symbol(int),symbol(int)} -terra foo2([a], b : int, [d]) - return [a] + b + [d[1]] + [d[2]] -end - -local test = require("test") - -test.eq(foo2(1,2,3,4),10) -test.eq(foo(1,2),3) \ No newline at end of file diff --git a/samples/Terra/template.t b/samples/Terra/template.t deleted file mode 100644 index b305aeb9..00000000 --- a/samples/Terra/template.t +++ /dev/null @@ -1,6 +0,0 @@ - -terra foo() - -end - -local test = require("test") diff --git a/samples/Terra/terracast.t b/samples/Terra/terracast.t deleted file mode 100644 index 05df48f7..00000000 --- a/samples/Terra/terracast.t +++ /dev/null @@ -1,15 +0,0 @@ - - - -function addone(a) - return a + 1 -end - - -local a1 = terralib.cast(int -> int, addone) - -terra dofn(a : int -> int) - return a(3) -end -local test = require("test") -test.eq(dofn(a1),4) \ No newline at end of file diff --git a/samples/Terra/terralua.t b/samples/Terra/terralua.t deleted file mode 100644 index 8084f68c..00000000 --- a/samples/Terra/terralua.t +++ /dev/null @@ -1,32 +0,0 @@ -function dog(...) - print("Hi. This is Dog.",...) -end - -terra foo() - dog() -end - -terra passanarg() - dog(3,4,5,nil) -end - -function takesastruct(a) - print(a.a,a.b) - a.a = a.a + 1 -end -struct A { a : int , b : double } -terra passastruct() - var a = A {1,3.4} - --takesastruct(a) luajit doesn't like having structs passed to its callbacks by value? - var b = a.a - takesastruct(&a) - var c = a.a - return b + c -end - -foo() -passanarg() - -local test = require("test") - -test.eq(passastruct(),3) diff --git a/samples/Terra/terraluamethod.t b/samples/Terra/terraluamethod.t deleted file mode 100644 index 09de7b2d..00000000 --- a/samples/Terra/terraluamethod.t +++ /dev/null @@ -1,16 +0,0 @@ -struct A { a : int } - -A.methods.up = function(self,b) - self.a = self.a + 1 + (b or 0) -end - -terra foo() - var a = A { 1 } - a:up() - var b = &a - b:up(4) - return a.a -end - -local test = require("test") -test.eq(foo(),7) \ No newline at end of file diff --git a/samples/Terra/terranew.t b/samples/Terra/terranew.t deleted file mode 100644 index 67336e38..00000000 --- a/samples/Terra/terranew.t +++ /dev/null @@ -1,19 +0,0 @@ - - -A = terralib.new(int[4],{1,2,3,4}) - -terra foo(a : &int) - var sum = 0 - for i = 0,4 do - sum = sum + a[i] - end - return sum,a -end - -local test = require("test") - -local a,b = terralib.unpackstruct(foo(A)) - -test.eq(a,10) -test.eq(terralib.typeof(A),int[4]) -test.eq(terralib.typeof(b),&int) \ No newline at end of file diff --git a/samples/Terra/testdebug.t b/samples/Terra/testdebug.t deleted file mode 100644 index b155e795..00000000 --- a/samples/Terra/testdebug.t +++ /dev/null @@ -1,57 +0,0 @@ -if not terralib.traceback then return end ---this test require debug on, if it is not on, relaunch with it on -if 0 == terralib.isdebug then - assert(0 == os.execute(terralib.terrahome.."/bin/terra -g testdebug.t")) - return -end -C = terralib.includec("stdio.h") - -terra foo(a : int, b : int) - var c = a + b - return c * 2 -end - -local ptr = terralib.cast(rawstring,foo:getdefinitions()[1]:getpointer()) - -terra findptr(a : &opaque) - var si : terralib.SymbolInfo - var li : terralib.LineInfo - terralib.lookupsymbol(a,&si) - C.printf("p = %p, addr = %p, sz = %d, nm = %.*s\n",a,si.addr,[int](si.size), si.namelength,si.name) - terralib.lookupline(si.addr,a, &li) - C.printf("line = %.*s:%d\n",li.namelength,li.name,[int](li.linenum)) - return li.linenum -end -assert(11 == findptr(ptr+6)) -assert(10 == findptr(ptr+4)) -local ra = terralib.intrinsic("llvm.returnaddress", int32 -> &opaque ) -local fa = terralib.intrinsic("llvm.frameaddress", int32 -> &opaque ) -terra testbt3() - var frames : (&opaque)[128] - terralib.traceback(nil) - var N = terralib.backtrace(frames,128,ra(0),fa(1)) - for i = 0,N do - C.printf("%p ",frames[i]) - var nm : rawstring - var nmL : uint64 - var si : terralib.SymbolInfo - if terralib.lookupsymbol(frames[i],&si) then - C.printf("frame %.*s\n", si.namelength, si.name) - else - C.printf("\n") - end - end -end -testbt3:setinlined(false) -terra fn2() - testbt3() - C.printf("fn2\n") - return 1 -end -terra what() - fn2() - C.printf("what\n") -end -fn2:setinlined(false) -what() -terralib.disas(terralib.traceback,5,5) \ No newline at end of file diff --git a/samples/Terra/testimport.t b/samples/Terra/testimport.t deleted file mode 100644 index e2ef63db..00000000 --- a/samples/Terra/testimport.t +++ /dev/null @@ -1,6 +0,0 @@ - -local r,e = terralib.loadstring [[ -import "lib.fakeimport" -]] - -assert(e:match("stack traceback")) \ No newline at end of file diff --git a/samples/Terra/testlang1.t b/samples/Terra/testlang1.t deleted file mode 100755 index 89496035..00000000 --- a/samples/Terra/testlang1.t +++ /dev/null @@ -1,21 +0,0 @@ -import "lib/testlang" - -print("hello") -local a = image "astring" -image 4 -image and,or,& -image image -image akeyword -image foobar -print(a) -image bar 3 -print(bar,bar1) - -local image what 4 3 -print(what) -local a = 4 -local b = 5 -c = 6 -print(foolist { a, b, c}) ---test eos token -image diff --git a/samples/Terra/testlang2.t b/samples/Terra/testlang2.t deleted file mode 100755 index b4d1229f..00000000 --- a/samples/Terra/testlang2.t +++ /dev/null @@ -1,4 +0,0 @@ -import "lib/testlang" - -local a = image "astring" -print(a) diff --git a/samples/Terra/testlog.t b/samples/Terra/testlog.t deleted file mode 100644 index 2e015773..00000000 --- a/samples/Terra/testlog.t +++ /dev/null @@ -1,8 +0,0 @@ -terra foo(a : bool, b : bool, c : bool) return a and b or c end - -foo:disas() -terra callfoo() - var r = foo(true,false,true) - return r -end -assert(callfoo()) \ No newline at end of file diff --git a/samples/Terra/testrequire.t b/samples/Terra/testrequire.t deleted file mode 100644 index e72084de..00000000 --- a/samples/Terra/testrequire.t +++ /dev/null @@ -1,14 +0,0 @@ -local f = assert(io.popen("uname", 'r')) -local s = assert(f:read('*a')) -f:close() - -if s~="Darwin\n" then - print("Warning, not running test b/c this isn't a mac") -else - -local A = require("lib.objc") -local B = require("lib.objc") - -assert(A == B) - -end \ No newline at end of file diff --git a/samples/Terra/teststd.t b/samples/Terra/teststd.t deleted file mode 100644 index 8df604a9..00000000 --- a/samples/Terra/teststd.t +++ /dev/null @@ -1,45 +0,0 @@ -local S = require "std" - -c = global(int,0) - -struct A(S.Object) { - a : int; - b : int[5]; -} -struct C { - a : int -} -struct B(S.Object) { - a : A; - b : A[2]; - c : C[3]; - c2 : C; - c3 : C[2]; -} - -terra A:__destruct() - S.printf("A dtor!\n") - c = c + 1 -end -terra B:__destruct() - c = c + 10 -end -terra foo() - var a = A.salloc() -end - -foo() -assert(c:get() == 1) - -terra bar() - var b = B.salloc() -end -bar() -assert(c:get() == 14) - -terra baz() - var b = B.alloc() - b:delete() -end -baz() -assert(c:get() == 27) \ No newline at end of file diff --git a/samples/Terra/testvector.t b/samples/Terra/testvector.t deleted file mode 100644 index 7ba46c2b..00000000 --- a/samples/Terra/testvector.t +++ /dev/null @@ -1,57 +0,0 @@ - -local S = require "std" - -local floatv = S.Vector(int) -terra foo() - var a = floatv.salloc():init() - for i = 0,100 do - a:insert(i) - end - for i = 0,50 do - a:insert(0,i) - end - for i = 0,50 do - a:insert(1,2,i) - end - for i = 0ULL,a:size() do - a(i) = a(i) + 1 - end - for i = 0ULL,50 do - @a:insert() = 5 - end - var s = 0 - for i = 0ULL,a:size() do - s = s + a(i) - end - var z = a:size() - S.assert(a:remove() == 5) - S.assert(a:size() == z - 1) - S.assert(a:remove(0) == 50) - S.assert(a:remove(0) == 50) - S.assert(a:remove(0) == 50) - S.assert(a(1) == 49) - return s -end -assert(foo() == 8875 + 5 *50) - -local g = global(int,0) - -struct A (S.Object) { - a : int -} - -terra A:__destruct() - g = g + self.a -end - -assert(S.Vector(int) == S.Vector(int)) - -terra foo2() - var a = [S.Vector(A)].salloc():init() - for i = 0,50 do - a:insert().a = i - end -end - -foo2() -assert(g:get() == 49*50/2) \ No newline at end of file diff --git a/samples/Terra/torturechain.t b/samples/Terra/torturechain.t deleted file mode 100644 index 91af6a06..00000000 --- a/samples/Terra/torturechain.t +++ /dev/null @@ -1,67 +0,0 @@ - -terra foo() - return 8.0,9 -end - -local torturechain = quote - var a = 3.0 -in - [quote - var b = 4 - in - [quote - var c = 5.0 - in - a,b,c, [quote - var d = 6 - in - [quote - var e = 7.0 - in - d,e,foo() - end] - end] - end] - end] -end - -terra bindit() - var a,b,c,r1 = torturechain - var d,e,r2 = r1 - var f,g = r2 - return a + b + c + d + e + f + g -end - -local sum = 3+4+5+6+7+8+9 -assert(sum == bindit()) - -terra foo(z : int, a : int, b : int, c : int, d : int, e : int, f : int, g : int) - return z + a + b + c + d + e + f + g -end - - -terra overloadit(a : int, b : int, c : int, d : int, e : int, f : int) - return 0 -end - -terra overloadit(a : double, b : int, c : int, d : int, e : int, f : int) - return 1 -end - - -terra callit() - var a,b,c,r1 = torturechain - var d,e,r2 = r1 - var f,g = r2 - return foo(0,a,b,c,d,e,f,g) -end - -terra callol() - var a,b,c,r1 = torturechain - var d,e,r2 = r1 - var f,g = r2 - return overloadit(a,b,c,e,f,g) -end - -assert(callit() == sum) -assert(callol() == 1) diff --git a/samples/Terra/toterraexpression.t b/samples/Terra/toterraexpression.t deleted file mode 100644 index ba31fb7a..00000000 --- a/samples/Terra/toterraexpression.t +++ /dev/null @@ -1,8 +0,0 @@ -local x = setmetatable({a = 4}, { __toterraexpression = function(self) return self.a end}) - - -local terra foo() - return x -end - -assert(foo() == 4) \ No newline at end of file diff --git a/samples/Terra/twolang.t b/samples/Terra/twolang.t deleted file mode 100644 index fddc25e6..00000000 --- a/samples/Terra/twolang.t +++ /dev/null @@ -1,23 +0,0 @@ - -do -import "lib/foolang" -a = foo bar -import "lib/barlang" -b = bar foo -assert( foo bar + bar foo == 3) -assert(a + b == 3) -end - -local function failparse(str,match) - local r,msg = terralib.loadstring(str) - assert(not r) - local match = msg:match(match) - if not match then print(msg) end - assert(match) -end - -failparse("return (foo bar + bar foo)", "near 'bar'") -failparse('import "lib/foolang";return (foo bar + bar foo)', "near foo") -failparse('import "lib/foolang"; import "lib/foolang";',"entrypoint 'foo' already defined") - -do import "lib/foolang" end do import "lib/foolang" end \ No newline at end of file diff --git a/samples/Terra/typeexp.t b/samples/Terra/typeexp.t deleted file mode 100644 index 6f29586e..00000000 --- a/samples/Terra/typeexp.t +++ /dev/null @@ -1,9 +0,0 @@ -atype = int -terra foo(a : atype) - var b : &atype = &a - return @b -end - -local test = require("test") - -test.eq(foo(3),3) \ No newline at end of file diff --git a/samples/Terra/union.t b/samples/Terra/union.t deleted file mode 100644 index eb18b998..00000000 --- a/samples/Terra/union.t +++ /dev/null @@ -1,26 +0,0 @@ - -struct A { a : int, union { c : int8[6], b : int }, d : float, union { e : int, f : float }, g : int } -struct B { union { b : int , c : int8[6] }, a : int } -local C = struct { union { union { b : int} , c : int8[6] }, w : int } -terra foo() - var a : A - var b : B - var c : C - a.b = 4 - a.a = 5 - a.c[4] = 3 - a.d = 4 - return a.a + a.b + a.c[4] + a.d -end - -struct Stuff { union { a : int, b : float } } - -terra what() - var a : Stuff, b : Stuff - a.a,b.a = 3,4 - return a.b/b.b --== .75, this is the best bad interview question -end - -local test = require("test") -test.eq(foo(),16) -test.eq(what(),.75) \ No newline at end of file diff --git a/samples/Terra/unm.t b/samples/Terra/unm.t deleted file mode 100644 index 665e2060..00000000 --- a/samples/Terra/unm.t +++ /dev/null @@ -1,20 +0,0 @@ - - -struct A { - a : int -} - -A.metamethods.__unm = terra(self : &A) - return A { -self.a } -end - -A.metamethods.__sub = terra(self : &A, rhs : &A) - return A { self.a - rhs.a } -end - -terra doit() - var a,b = A { 1 } , A { 2 } - return (-(a - b)).a -end - -assert(doit() == 1) \ No newline at end of file diff --git a/samples/Terra/unpacktuple.t b/samples/Terra/unpacktuple.t deleted file mode 100644 index 7701455f..00000000 --- a/samples/Terra/unpacktuple.t +++ /dev/null @@ -1,30 +0,0 @@ - - -terra foo() - return 1,2 -end - -terra foo2() - return {a = 1, b = 2} -end - -assert(unpacktuple(1) == 1) -assert(unpacktuple(foo()) == 1) - -assert(unpacktuple(foo(),2) == 2) - -assert(unpacktuple(foo(),nil,1) == 1) -assert(unpacktuple(foo2()).a == 1) - -assert(2 == #{unpacktuple(foo())}) - -assert(1 == #{unpacktuple(foo(),2)}) - -terra usefoo() - var a = foo() - var c,d = unpacktuple(a) - var e = unpacktuple(a,2) - return e -end - -assert(usefoo() == 2) \ No newline at end of file diff --git a/samples/Terra/unsafesym.t b/samples/Terra/unsafesym.t deleted file mode 100644 index c8d2f2f2..00000000 --- a/samples/Terra/unsafesym.t +++ /dev/null @@ -1,14 +0,0 @@ - -local mymacro = macro(function(a) - a = a:asvalue() - print(a, terralib.issymbol(a), terralib.unsafetypeofsymbol(a)) - return {} -end) - - - -terra foo(a : int) - mymacro(a) -end - -foo:compile() \ No newline at end of file diff --git a/samples/Terra/unstrict.t b/samples/Terra/unstrict.t deleted file mode 100644 index a4292ec0..00000000 --- a/samples/Terra/unstrict.t +++ /dev/null @@ -1,5 +0,0 @@ -Strict.__newindex,Strict.__index = nil,nil - -print(b) -terra foo() end -print(c) \ No newline at end of file diff --git a/samples/Terra/usercast.t b/samples/Terra/usercast.t deleted file mode 100644 index f35bec84..00000000 --- a/samples/Terra/usercast.t +++ /dev/null @@ -1,24 +0,0 @@ - -struct A { a : int, b : float } - -function A.metamethods.__cast(from,to,exp) - if from == int and to == A then - return `A {exp, 1.f } - elseif from == float and to == A then - return `A { 1, exp } - end - error("invalid") -end - - -terra moo(a : A) - return a.a + a.b -end - -terra bar() - return moo(1) + moo(1.f) -end - -local test = require("test") - -test.eq(bar(), 4) \ No newline at end of file diff --git a/samples/Terra/varargcstring.t b/samples/Terra/varargcstring.t deleted file mode 100644 index a9406390..00000000 --- a/samples/Terra/varargcstring.t +++ /dev/null @@ -1,2 +0,0 @@ -C = terralib.includec("stdio.h") -C.printf("hello, %d\n",3) \ No newline at end of file diff --git a/samples/Terra/vars.t b/samples/Terra/vars.t deleted file mode 100644 index a8f38d3b..00000000 --- a/samples/Terra/vars.t +++ /dev/null @@ -1,23 +0,0 @@ - - -a = {} -a.b, a.c = global(3),global(double,4) -d = global(5) ---print(a.b) - ---a.b:gettype(nil) - -terra bar() - a.b = a.b + 1 - a.c = a.c + 1 - d = d + 1 -end -terra foo() - return a.b,a.c,d -end - - -local test = require("test") - -bar() -test.meq({4,5,6},foo()) \ No newline at end of file diff --git a/samples/Terra/vars2.t b/samples/Terra/vars2.t deleted file mode 100644 index e3556663..00000000 --- a/samples/Terra/vars2.t +++ /dev/null @@ -1,17 +0,0 @@ - -a = global(int) --testing variable with no initializer - - -terra foo() - a = 3 -end - -terra bar() - return a -end - - -local test = require("test") - -foo() -test.eq(bar(),3) \ No newline at end of file diff --git a/samples/Terra/vec.t b/samples/Terra/vec.t deleted file mode 100644 index b3d6790c..00000000 --- a/samples/Terra/vec.t +++ /dev/null @@ -1,27 +0,0 @@ - -terra foo(a : double) - var v0 : vector(double,3) = a - var v1 : vector(int,3) = 4 - var v2 = v0 / v1 - var v3 = (v0 <= v1) or (v1 >= v0) - var ptr = [&double](&v2) - return v3[0] or v3[1] or v3[2] - --return ptr[0] + ptr[1] + ptr[2] -end - - -N = 64 -terra addsomevecs(a : vector(double,N), b : vector(double,N), c : vector(double,N) ) - return (a + b) / c -end - - -terra foo2(a : double, b : double) - var c = addsomevecs(a,b,b) - return c[0] + c[1] -end - -local test = require("test") - -test.eq(foo(3), true) -test.eq(foo2(3,4), 3.5) \ No newline at end of file diff --git a/samples/Terra/vecarith.t b/samples/Terra/vecarith.t deleted file mode 100644 index 6a21b9ba..00000000 --- a/samples/Terra/vecarith.t +++ /dev/null @@ -1,138 +0,0 @@ ---[[ - -- -+ - -* -/ -% - -^ -and -or -~= == < > >= <= -<< >> - -]] - - -N = 2 - -types = {int,int64,uint64,float,double} -names = {"i","l","u","f","d"} -max = 16 - -for i = 1,#types do - local fenv = getfenv() - for j = 0,max do - local x = global(vector(types[i],N)); - (terra() x = j end)() - fenv[names[i]..j] = x - end -end - - -d375 = global(vector(double,N)) -d175 = global(vector(double,N)) -terra init() - d375 = 3.75 - d175 = 1.75 -end -init() - -terra test0() - var a = i1 + i3 - var b = l1 + l2 - var c = u1 + u2 - var d = f1 + f2 - var e = d1 + d2 - return (a + b + c + d + e)[1] -end - -terra test1() - var a = i1 - i3 - var b = l1 - l2 - var c = u1 - u2 - var d = f1 - f2 - var e = d1 - d2 - return (a - b - c - d - e)[1] -end - -terra test2() - var a = i2 * i3 - var b = l3 * l2 - var c = u3 * u2 - var d = f1 * f2 - var e = d3 * d2 - return (a * b * c * d * e)[1] -end - -terra test3() - var a = i2 / i3 + i1 - var b = l3 / l2 + i1 - var c = u3 / u2 - var d = f1 / f2 - var e = d3 / d2 - return (a * b * c * d * e)[1] -end - -terra test4() - var a = i2 % i3 - var b = l3 % l4 - var c = u3 % u2 - var d = f1 % f2 - var e = d375 % d2 - return ((a == i2) and (b == l3) and (d == f1) and (e == d175))[1] -end - -terra test5() - var a = i2 ^ i3 - var b = l3 ^ l4 - var c = u3 ^ u2 - return ((a == 1) and (b == l7) and (c == u1))[1] -end - -terra test6() - var a = i2 and i3 - var b = l3 and l4 - var c = u3 and u2 - return ((a == 2) and (b == l0) and (c == u2))[1] -end - -terra test7() - var a = i2 or i3 - var b = l3 or l4 - var c = u3 or u2 - return ((a == 3) and (b == l7) and (c == u3))[1] -end - - -terra test8() - var a0,a1 = i2 ~= i3, i2 == i3 - var b0,b1 = i2 < i3, i2 >= i3 - var c0,c1 = i2 > i3, i2 <= i3 - - return (a0 and not a1 and b0 and not b1 and not c0 and c1)[1] -end - -terra test9() - var a0, a1 = i8 >> i1, i8 << i1 - var b0, b1 = -i8 >> i1, -i8 << i1 - return (a0 == i4 and a1 == i16 and b0 == -i4 and b1 == -i16)[1] -end - - -local test = require("test") - -test.eq(test0(),16) -test.eq(test1(),2) -test.eq(test2(),2592) -test.eq(test3(),1.5) - -test.eq(test4(),true) - -test.eq(test5(),true) -test.eq(test6(),true) -test.eq(test7(),true) -test.eq(test8(),true) -test.eq(test9(),true) \ No newline at end of file diff --git a/samples/Terra/veclit.t b/samples/Terra/veclit.t deleted file mode 100644 index 20e9aee8..00000000 --- a/samples/Terra/veclit.t +++ /dev/null @@ -1,29 +0,0 @@ - -terra foo() - var a = 2* vector(1,2,3) - return a[0] + a[1] + a[2] -end - -terra foo2() - var a = vector(1,2.5,3) - return a[1] -end -terra what() - return 3,4.5 -end -expwhat = macro(function(a) return {`a._0, `a._1} end) -terra foo3() - var a = vector(1,2.5,expwhat(what())) - return a[3] -end - -terra foo4() - var a = vectorof(int,1,2.5,3) - return a[1] -end - -local test = require("test") -test.eq(foo(),12) -test.eq(foo2(),2.5) -test.eq(foo3(),4.5) -test.eq(foo4(),2) \ No newline at end of file diff --git a/samples/Terra/vecobj.t b/samples/Terra/vecobj.t deleted file mode 100644 index 59eab9fa..00000000 --- a/samples/Terra/vecobj.t +++ /dev/null @@ -1,54 +0,0 @@ -local Vec = terralib.memoize(function(typ,N) - N = assert(tonumber(N),"expected a number") - local ops = { "__sub","__add","__mul","__div" } - local struct VecType { - data : typ[N] - } - VecType.metamethods.type, VecType.metamethods.N = typ,N - VecType.metamethods.__typename = function(self) return ("%s_%d"):format(tostring(self.metamethods.type),self.metamethods.N) end - for i, op in ipairs(ops) do - local i = symbol("i") - local function template(ae,be) - return quote - var c : VecType - for [i] = 0,N do - c.data[i] = operator(op,ae,be) - end - return c - end - end - local terra doop(a : VecType, b : VecType) [template(`a.data[i],`b.data[i])] end - terra doop(a : typ, b : VecType) [template(`a,`b.data[i])] end - terra doop(a : VecType, b : typ) [template(`a.data[i],`b)] end - VecType.metamethods[op] = doop - end - terra VecType.methods.FromConstant(x : typ) - var c : VecType - for i = 0,N do - c.data[i] = x - end - return c - end - VecType.metamethods.__apply = macro(function(self,idx) return `self.data[idx] end) - VecType.metamethods.__cast = function(from,to,exp) - if from:isarithmetic() and to == VecType then - return `VecType.FromConstant(exp) - end - error(("unknown conversion %s to %s"):format(tostring(from),tostring(to))) - end - return VecType -end) - -terra foo(v : Vec(float,4), w : Vec(float,4)) - var z : Vec(float,4) = 1 - var x = (v*4)+w+1 - for i = 0,4 do - print(x(i)) - end - return x(2) -end - -foo:printpretty(true,false) -foo:disas() - -assert(20 == foo({{1,2,3,4}},{{5,6,7,8}})) \ No newline at end of file diff --git a/samples/Terra/vecptr.t b/samples/Terra/vecptr.t deleted file mode 100644 index c853065f..00000000 --- a/samples/Terra/vecptr.t +++ /dev/null @@ -1,4 +0,0 @@ -terra foo(a : &float) - var b = [&vector(float,4)](a) -end -foo:compile() \ No newline at end of file diff --git a/samples/Terra/vecsize.t b/samples/Terra/vecsize.t deleted file mode 100644 index 08043aee..00000000 --- a/samples/Terra/vecsize.t +++ /dev/null @@ -1,5 +0,0 @@ - -assert(terralib.sizeof(int)*3 <= terralib.sizeof(vector(int,3))) -assert(terralib.sizeof(vector(int,1)) == 4) -assert(terralib.sizeof(vector(int,4)) == 16) -assert(terralib.sizeof(vector(int,5)) == 32) \ No newline at end of file diff --git a/samples/Terra/vtablerec.t b/samples/Terra/vtablerec.t deleted file mode 100644 index 75e9ea56..00000000 --- a/samples/Terra/vtablerec.t +++ /dev/null @@ -1,30 +0,0 @@ - -struct V { - entry : {&A} -> {} -} and -struct A { - vtable : &V -} - -terra what(a : &A) : {} -end - -what:compile() - -terra bar() - var v : V - v.entry = what -end - -bar:compile() - ---[[ -{&A}->{} -&A -A -&V -V -&{&A}->{} -{&A}->{} - -]] \ No newline at end of file diff --git a/samples/Terra/zeroargs.t b/samples/Terra/zeroargs.t deleted file mode 100644 index 59b4356d..00000000 --- a/samples/Terra/zeroargs.t +++ /dev/null @@ -1,5 +0,0 @@ -local b = {} -terra foo() - return 1,b -end -foo() \ No newline at end of file diff --git a/samples/Terra/zeroreturn.t b/samples/Terra/zeroreturn.t deleted file mode 100644 index 406a3245..00000000 --- a/samples/Terra/zeroreturn.t +++ /dev/null @@ -1,18 +0,0 @@ - - -local b = global(0) - -terra foo(a : int) - if a > 3 then - return - end - b = a -end - -terra getb() return b end - -local test = require("test") -foo(4) -test.eq(getb(),0) -foo(2) -test.eq(getb(),2) \ No newline at end of file diff --git a/samples/Terra/zeroreturn2.t b/samples/Terra/zeroreturn2.t deleted file mode 100644 index 82f8e6df..00000000 --- a/samples/Terra/zeroreturn2.t +++ /dev/null @@ -1,17 +0,0 @@ - -a = global(0) - -terra doit() - a = a + 1 -end -terra geta() - return a -end - -terra bar() - return doit() -end - -bar() -local test = require("test") -test.eq(geta(),1) \ No newline at end of file From 2448ff83142a1d80927dc94791ca68563a73ac78 Mon Sep 17 00:00:00 2001 From: Vicent Marti Date: Fri, 11 Mar 2016 10:27:10 +0100 Subject: [PATCH 351/356] git-linguist: Print PWD --- bin/git-linguist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/git-linguist b/bin/git-linguist index 37d46b64..9e525bb5 100755 --- a/bin/git-linguist +++ b/bin/git-linguist @@ -111,7 +111,7 @@ def git_linguist(args) parser.parse!(args) git_dir = `git rev-parse --git-dir`.strip - raise "git-linguist must be ran in a Git repository" unless $?.success? + raise "git-linguist must be ran in a Git repository (#{Dir.pwd})" unless $?.success? wrapper = GitLinguist.new(git_dir, commit, incremental) case args.pop From faec60188f30e89b991dd3e5600cdeffc16b25d5 Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Sat, 12 Mar 2016 11:04:53 +0100 Subject: [PATCH 352/356] Tests for .sql heuristic rules --- test/test_heuristics.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/test_heuristics.rb b/test/test_heuristics.rb index 7021e20b..c3a1c608 100644 --- a/test/test_heuristics.rb +++ b/test/test_heuristics.rb @@ -189,6 +189,16 @@ class TestHeuristcs < Minitest::Test }) end + # Candidate languages = ["SQL", "PLpgSQL", "SQLPL", "PLSQL"] + def test_sql_by_heuristics + assert_heuristics({ + "SQL" => ["SQL/create_stuff.sql", "SQL/db.sql", "SQL/dual.sql"], + "PLpgSQL" => all_fixtures("PLpgSQL", "*.sql"), + "SQLPL" => ["SQLPL/trigger.sql"], + "PLSQL" => all_fixtures("PLSQL", "*.sql") + }) + end + # Candidate languages = ["Perl", "Perl6"] def test_t_perl_by_heuristics assert_heuristics({ From 2a0b0e9f934573d5f61cedb6445202f242038bfa Mon Sep 17 00:00:00 2001 From: Paul Chaignon Date: Sat, 12 Mar 2016 11:17:29 +0100 Subject: [PATCH 353/356] Fix heuristic rule for PLpgSQL --- lib/linguist/heuristics.rb | 2 +- samples/PLpgSQL/procedures.sql | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 samples/PLpgSQL/procedures.sql diff --git a/lib/linguist/heuristics.rb b/lib/linguist/heuristics.rb index 666397d8..cbbcd03a 100644 --- a/lib/linguist/heuristics.rb +++ b/lib/linguist/heuristics.rb @@ -354,7 +354,7 @@ module Linguist end disambiguate ".sql" do |data| - if /^\\i\b|AS \$\$|LANGUAGE '+plpgsql'+/i.match(data) || /SECURITY (DEFINER|INVOKER)/i.match(data) || /BEGIN( WORK| TRANSACTION)?;/i.match(data) + if /^\\i\b|AS \$\$|LANGUAGE '?plpgsql'?/i.match(data) || /SECURITY (DEFINER|INVOKER)/i.match(data) || /BEGIN( WORK| TRANSACTION)?;/i.match(data) #Postgres Language["PLpgSQL"] elsif /(alter module)|(language sql)|(begin( NOT)+ atomic)/i.match(data) || /signal SQLSTATE '[0-9]+'/i.match(data) diff --git a/samples/PLpgSQL/procedures.sql b/samples/PLpgSQL/procedures.sql new file mode 100644 index 00000000..51b6bc94 --- /dev/null +++ b/samples/PLpgSQL/procedures.sql @@ -0,0 +1,31 @@ +load 'plpgsql'; +load 'plpgsql_lint'; + +DROP FUNCTION IF EXISTS list_sites(); +CREATE OR REPLACE FUNCTION list_sites() RETURNS TABLE (fc json) AS +$func$ +BEGIN +RETURN QUERY SELECT row_to_json(feat_col) FROM ( + SELECT 'FeatureCollection' AS type, array_to_json(array_agg(feat)) AS features FROM ( + SELECT DISTINCT ON (new_id) 'Feature' AS type, ST_ASGeoJSON(loc.geom)::json AS geometry, row_to_json( + (SELECT prop FROM (SELECT new_id) AS prop)) AS properties FROM location loc) AS feat) AS feat_col; +END; +$func$ LANGUAGE plpgsql; + + +DROP FUNCTION IF EXISTS get_observations(character varying, integer); +CREATE OR REPLACE FUNCTION get_observations(kind varchar, site_id integer) RETURNS TABLE (fc json) AS +$func$ +BEGIN + IF kind = 'o2_abs' THEN + RETURN QUERY SELECT array_to_json(array_agg(row_to_json(obs))) FROM ( + SELECT observation_date AS date, o2_abs AS value FROM oxygen WHERE new_id = site_id) AS obs; + ELSIF kind = 'o2_rel' THEN + RETURN QUERY SELECT array_to_json(array_agg(row_to_json(obs))) FROM ( + SELECT observation_date AS date, o2_rel AS value FROM oxygen WHERE new_id = site_id) AS obs; + ELSIF kind = 'temp' THEN + RETURN QUERY SELECT array_to_json(array_agg(row_to_json(obs))) FROM ( + SELECT observation_date AS date, temp AS value FROM oxygen WHERE new_id = site_id) AS obs; + END IF; +END; +$func$ LANGUAGE plpgsql; From d2c7d27d13affd542d318a1f51ae77d96cb9c652 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Wed, 16 Mar 2016 21:30:18 -0600 Subject: [PATCH 354/356] Grammar update --- vendor/grammars/AutoHotkey | 2 +- vendor/grammars/Elm.tmLanguage | 2 +- vendor/grammars/Lean.tmbundle | 2 +- vendor/grammars/MagicPython | 2 +- vendor/grammars/NimLime | 2 +- vendor/grammars/Vala-TMBundle | 2 +- vendor/grammars/apache.tmbundle | 2 +- vendor/grammars/api-blueprint-sublime-plugin | 2 +- vendor/grammars/atom-language-stan | 2 +- vendor/grammars/ats.sublime | 2 +- vendor/grammars/chapel-tmbundle | 2 +- vendor/grammars/factor | 2 +- vendor/grammars/gap-tmbundle | 2 +- vendor/grammars/haxe-sublime-bundle | 2 +- vendor/grammars/jade-tmbundle | 2 +- vendor/grammars/kotlin-sublime-package | 2 +- vendor/grammars/language-babel | 2 +- vendor/grammars/language-clojure | 2 +- vendor/grammars/language-csharp | 2 +- vendor/grammars/language-gfm | 2 +- vendor/grammars/language-javascript | 2 +- vendor/grammars/language-renpy | 2 +- vendor/grammars/latex.tmbundle | 2 +- vendor/grammars/mathematica-tmbundle | 2 +- vendor/grammars/sas.tmbundle | 2 +- vendor/grammars/smali-sublime | 2 +- vendor/grammars/sublime-nginx | 2 +- vendor/grammars/sublime-robot-plugin | 2 +- vendor/grammars/sublime-rust | 2 +- vendor/grammars/sublime-typescript | 2 +- vendor/grammars/sublime_cobol | 2 +- vendor/grammars/vue-syntax-highlight | 2 +- 32 files changed, 32 insertions(+), 32 deletions(-) diff --git a/vendor/grammars/AutoHotkey b/vendor/grammars/AutoHotkey index 4da62de2..d31adb91 160000 --- a/vendor/grammars/AutoHotkey +++ b/vendor/grammars/AutoHotkey @@ -1 +1 @@ -Subproject commit 4da62de23dc705bf9b95e76cf5e8e51aa1e68fea +Subproject commit d31adb9184fb14f970995c12ad3a29f288c9bc0f diff --git a/vendor/grammars/Elm.tmLanguage b/vendor/grammars/Elm.tmLanguage index 437033bd..155ce91c 160000 --- a/vendor/grammars/Elm.tmLanguage +++ b/vendor/grammars/Elm.tmLanguage @@ -1 +1 @@ -Subproject commit 437033bd48350b49bc0dfa734206bfa0ba5de337 +Subproject commit 155ce91c81a3b98fdf2785fe69b5460a3075d9f0 diff --git a/vendor/grammars/Lean.tmbundle b/vendor/grammars/Lean.tmbundle index 943ac84b..a1a3818e 160000 --- a/vendor/grammars/Lean.tmbundle +++ b/vendor/grammars/Lean.tmbundle @@ -1 +1 @@ -Subproject commit 943ac84bf69bfbcab54eeeebba6d66c90ed700ff +Subproject commit a1a3818ecfdd1365ec01ac3894106b5a70b455ac diff --git a/vendor/grammars/MagicPython b/vendor/grammars/MagicPython index 82c76aff..7d07d6f5 160000 --- a/vendor/grammars/MagicPython +++ b/vendor/grammars/MagicPython @@ -1 +1 @@ -Subproject commit 82c76aff704192fb9ed1f505360635f575f13b5a +Subproject commit 7d07d6f5b052785603e1e8cfbf771ccd442d2975 diff --git a/vendor/grammars/NimLime b/vendor/grammars/NimLime index 4db349dd..0c6c6207 160000 --- a/vendor/grammars/NimLime +++ b/vendor/grammars/NimLime @@ -1 +1 @@ -Subproject commit 4db349dda5219a37e99a0375e2a5d8a001fbf20e +Subproject commit 0c6c6207a62929054d50f242c4f0b3e32084e2f6 diff --git a/vendor/grammars/Vala-TMBundle b/vendor/grammars/Vala-TMBundle index 1c5ebb62..935bd21c 160000 --- a/vendor/grammars/Vala-TMBundle +++ b/vendor/grammars/Vala-TMBundle @@ -1 +1 @@ -Subproject commit 1c5ebb62d11e01d145b414355de72d4de8758ed8 +Subproject commit 935bd21c13068158435f64b3dbd8423c8d812c92 diff --git a/vendor/grammars/apache.tmbundle b/vendor/grammars/apache.tmbundle index a4a494e8..a12e8955 160000 --- a/vendor/grammars/apache.tmbundle +++ b/vendor/grammars/apache.tmbundle @@ -1 +1 @@ -Subproject commit a4a494e8455ca98bde8591a7f068c3384babb09a +Subproject commit a12e895533700b0200cca20f169be63727efff8c diff --git a/vendor/grammars/api-blueprint-sublime-plugin b/vendor/grammars/api-blueprint-sublime-plugin index 550417b9..076ee9bd 160000 --- a/vendor/grammars/api-blueprint-sublime-plugin +++ b/vendor/grammars/api-blueprint-sublime-plugin @@ -1 +1 @@ -Subproject commit 550417b9bbbd833b57b5917b48ca0fef9ed52190 +Subproject commit 076ee9bd62d68ee07831c87f2e7c7eeec732dd0f diff --git a/vendor/grammars/atom-language-stan b/vendor/grammars/atom-language-stan index f8d855ea..2fa2745d 160000 --- a/vendor/grammars/atom-language-stan +++ b/vendor/grammars/atom-language-stan @@ -1 +1 @@ -Subproject commit f8d855eab960b4dd140c0f469a809401544850b8 +Subproject commit 2fa2745da7ab9de0ba42a9743d1942becb5e4c32 diff --git a/vendor/grammars/ats.sublime b/vendor/grammars/ats.sublime index a3f24abb..fd6bd223 160000 --- a/vendor/grammars/ats.sublime +++ b/vendor/grammars/ats.sublime @@ -1 +1 @@ -Subproject commit a3f24abbe7043adc0ad798711467edae33cf89f0 +Subproject commit fd6bd223d17e384f2a7dc93ce01c6e786fd452c2 diff --git a/vendor/grammars/chapel-tmbundle b/vendor/grammars/chapel-tmbundle index 469476b2..d6c9e926 160000 --- a/vendor/grammars/chapel-tmbundle +++ b/vendor/grammars/chapel-tmbundle @@ -1 +1 @@ -Subproject commit 469476b285adf6c4a09973fd12e97ec831afd050 +Subproject commit d6c9e926e78b4b8fd1631fc059307a87fb73d33e diff --git a/vendor/grammars/factor b/vendor/grammars/factor index 97d1ec75..d99c9e16 160000 --- a/vendor/grammars/factor +++ b/vendor/grammars/factor @@ -1 +1 @@ -Subproject commit 97d1ec759eb9fa2ace83c62685b6b36faec05981 +Subproject commit d99c9e16632d2eb1e5a8862182529d3dcc6b7c56 diff --git a/vendor/grammars/gap-tmbundle b/vendor/grammars/gap-tmbundle index 52c8fafb..cf05fa8d 160000 --- a/vendor/grammars/gap-tmbundle +++ b/vendor/grammars/gap-tmbundle @@ -1 +1 @@ -Subproject commit 52c8fafb664fb7909223f92403e26fe3bfde0cdc +Subproject commit cf05fa8df13f8b1f46fc07e6c17270d899a69926 diff --git a/vendor/grammars/haxe-sublime-bundle b/vendor/grammars/haxe-sublime-bundle index 94cc8eea..e9559a2c 160000 --- a/vendor/grammars/haxe-sublime-bundle +++ b/vendor/grammars/haxe-sublime-bundle @@ -1 +1 @@ -Subproject commit 94cc8eea31127365556ef9bbb1db78ef6bfdd2e5 +Subproject commit e9559a2c538c83d5dca09e410915834e9bdcd3cb diff --git a/vendor/grammars/jade-tmbundle b/vendor/grammars/jade-tmbundle index d27b61d1..81093433 160000 --- a/vendor/grammars/jade-tmbundle +++ b/vendor/grammars/jade-tmbundle @@ -1 +1 @@ -Subproject commit d27b61d1780ff594b43d9ad04a9e896ea92b393b +Subproject commit 81093433d6c371657c237ed8be3c47f3e98e3a66 diff --git a/vendor/grammars/kotlin-sublime-package b/vendor/grammars/kotlin-sublime-package index 3ddc52e8..535967fd 160000 --- a/vendor/grammars/kotlin-sublime-package +++ b/vendor/grammars/kotlin-sublime-package @@ -1 +1 @@ -Subproject commit 3ddc52e8dbc8bef1f1a534b94bd0f688bc2a4422 +Subproject commit 535967fd2c53d299289d3b045097ea08dbe9764f diff --git a/vendor/grammars/language-babel b/vendor/grammars/language-babel index e2fd09d7..5f63df46 160000 --- a/vendor/grammars/language-babel +++ b/vendor/grammars/language-babel @@ -1 +1 @@ -Subproject commit e2fd09d7d9caf1f336b3a35581e55387723dcbf3 +Subproject commit 5f63df46ccae53d3aa07e41e647e8e91f18177b6 diff --git a/vendor/grammars/language-clojure b/vendor/grammars/language-clojure index a0193ad2..fa482c39 160000 --- a/vendor/grammars/language-clojure +++ b/vendor/grammars/language-clojure @@ -1 +1 @@ -Subproject commit a0193ad2a9797033649e665083f09249d2d098fc +Subproject commit fa482c39a323624189240910cd7eb81dfd97e445 diff --git a/vendor/grammars/language-csharp b/vendor/grammars/language-csharp index f635e67e..96ab79f4 160000 --- a/vendor/grammars/language-csharp +++ b/vendor/grammars/language-csharp @@ -1 +1 @@ -Subproject commit f635e67edef4e2fe68c3526e1ad26ed66f01aa62 +Subproject commit 96ab79f45bfb6875c9aa2ac702934a385df35de3 diff --git a/vendor/grammars/language-gfm b/vendor/grammars/language-gfm index 298a8a3e..1472c976 160000 --- a/vendor/grammars/language-gfm +++ b/vendor/grammars/language-gfm @@ -1 +1 @@ -Subproject commit 298a8a3eb180f1fa6b8a8bc77c2147e355c8cafd +Subproject commit 1472c976c5c5cbc842bb7cce7fc6e19de9b926a6 diff --git a/vendor/grammars/language-javascript b/vendor/grammars/language-javascript index f68e4bfe..b28af094 160000 --- a/vendor/grammars/language-javascript +++ b/vendor/grammars/language-javascript @@ -1 +1 @@ -Subproject commit f68e4bfe54a3b9d16450223f401d2fb16453897f +Subproject commit b28af094cc31a7e2423c474845e506ce33aa3a57 diff --git a/vendor/grammars/language-renpy b/vendor/grammars/language-renpy index cc2f1c69..c259c5d3 160000 --- a/vendor/grammars/language-renpy +++ b/vendor/grammars/language-renpy @@ -1 +1 @@ -Subproject commit cc2f1c69f0b1c1d121aa5648422fc70d86dca7cf +Subproject commit c259c5d3acc0a27dc2a28abc2a2229acf9adde1b diff --git a/vendor/grammars/latex.tmbundle b/vendor/grammars/latex.tmbundle index 82986b93..bec21c8b 160000 --- a/vendor/grammars/latex.tmbundle +++ b/vendor/grammars/latex.tmbundle @@ -1 +1 @@ -Subproject commit 82986b93a4f4ae7aab52445d8b7742b9af635d05 +Subproject commit bec21c8bcd3e977c157e41f8e4d3f6c53862dbe8 diff --git a/vendor/grammars/mathematica-tmbundle b/vendor/grammars/mathematica-tmbundle index 3b4b826d..5067a25b 160000 --- a/vendor/grammars/mathematica-tmbundle +++ b/vendor/grammars/mathematica-tmbundle @@ -1 +1 @@ -Subproject commit 3b4b826dbe60f1dba4484fdeacf0047681b9b82e +Subproject commit 5067a25b9b1c2b9a8bb0ed9fcfd63c73ff11277e diff --git a/vendor/grammars/sas.tmbundle b/vendor/grammars/sas.tmbundle index 3759a197..ba5c7462 160000 --- a/vendor/grammars/sas.tmbundle +++ b/vendor/grammars/sas.tmbundle @@ -1 +1 @@ -Subproject commit 3759a19719d3c4c4979087be12adbcaa02a7bca3 +Subproject commit ba5c74624c477d657698ffd515fa6f670ee147b9 diff --git a/vendor/grammars/smali-sublime b/vendor/grammars/smali-sublime index 28a43364..60a1fdb3 160000 --- a/vendor/grammars/smali-sublime +++ b/vendor/grammars/smali-sublime @@ -1 +1 @@ -Subproject commit 28a4336421bff627d76c8dc27b991a4ed53a6747 +Subproject commit 60a1fdb3442cd7082036f1a02e403a5f725ed837 diff --git a/vendor/grammars/sublime-nginx b/vendor/grammars/sublime-nginx index fcf644ec..e72eb758 160000 --- a/vendor/grammars/sublime-nginx +++ b/vendor/grammars/sublime-nginx @@ -1 +1 @@ -Subproject commit fcf644ecea021ab8a6bc171f415f8df0b005b31e +Subproject commit e72eb758149317de9b79a14aee91e778b3dbd929 diff --git a/vendor/grammars/sublime-robot-plugin b/vendor/grammars/sublime-robot-plugin index bf5dc7fa..07069ebf 160000 --- a/vendor/grammars/sublime-robot-plugin +++ b/vendor/grammars/sublime-robot-plugin @@ -1 +1 @@ -Subproject commit bf5dc7fa9f431f4990a02518f89fe45a2beaa5e8 +Subproject commit 07069ebf20c82663eee24e4c7d82cccca020e8e9 diff --git a/vendor/grammars/sublime-rust b/vendor/grammars/sublime-rust index 621e4f61..f75f2b10 160000 --- a/vendor/grammars/sublime-rust +++ b/vendor/grammars/sublime-rust @@ -1 +1 @@ -Subproject commit 621e4f6117531d8fe299eb5584a6be766df1822e +Subproject commit f75f2b102632eb2f29124c055cdcc9fa7776886d diff --git a/vendor/grammars/sublime-typescript b/vendor/grammars/sublime-typescript index 26fd717a..2da61f59 160000 --- a/vendor/grammars/sublime-typescript +++ b/vendor/grammars/sublime-typescript @@ -1 +1 @@ -Subproject commit 26fd717a79d1984e76bbe6d958c5c4bbf0179049 +Subproject commit 2da61f59d231b5442e1a7136aedcb9705ad099e2 diff --git a/vendor/grammars/sublime_cobol b/vendor/grammars/sublime_cobol index 3d2b6dbc..7c60c108 160000 --- a/vendor/grammars/sublime_cobol +++ b/vendor/grammars/sublime_cobol @@ -1 +1 @@ -Subproject commit 3d2b6dbcd1b27023150ff9d8ab47953706d070b8 +Subproject commit 7c60c10849c45a55203b352dcf0b212113a61caf diff --git a/vendor/grammars/vue-syntax-highlight b/vendor/grammars/vue-syntax-highlight index f20c9bab..fbcccaee 160000 --- a/vendor/grammars/vue-syntax-highlight +++ b/vendor/grammars/vue-syntax-highlight @@ -1 +1 @@ -Subproject commit f20c9bab7e71738f421e6edc1aab8839ee05d85a +Subproject commit fbcccaee1043af3e6269a1e674fc89ede2cc941b From c1e71dc215a72bce5661be978cefdc85b03bae61 Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Wed, 16 Mar 2016 21:44:20 -0600 Subject: [PATCH 355/356] Bumping to v4.8.0 --- lib/linguist/version.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/linguist/version.rb b/lib/linguist/version.rb index 7bb4af7b..2e14f12f 100644 --- a/lib/linguist/version.rb +++ b/lib/linguist/version.rb @@ -1,3 +1,3 @@ module Linguist - VERSION = "4.7.6" + VERSION = "4.8.0" end From f0c7380132465bd4a378b4e174f6bee896a96f1e Mon Sep 17 00:00:00 2001 From: Arfon Smith Date: Thu, 17 Mar 2016 10:27:39 -0600 Subject: [PATCH 356/356] Updating sublime-terra grammar --- vendor/grammars/sublime-terra | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/grammars/sublime-terra b/vendor/grammars/sublime-terra index 2a73bf7d..d77b0341 160000 --- a/vendor/grammars/sublime-terra +++ b/vendor/grammars/sublime-terra @@ -1 +1 @@ -Subproject commit 2a73bf7dfd996d00d13ee9059b400f65069a6407 +Subproject commit d77b0341d26f0989b2dc918ce9fb5cb8a5c7202b