forex 0.2.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0805a3b1ecebdfe37fb068a85dc133dd9e500007
4
- data.tar.gz: 735001cf921eeeda36f4c1235adce750aff8000b
3
+ metadata.gz: 3d4e71d9ae4fd8181b15ac9ef5b5ffc05eaa84d7
4
+ data.tar.gz: 4437bea32a9afb382343f3e92e2f1569f69c8ce6
5
5
  SHA512:
6
- metadata.gz: 5cca23e919fe8b9745119b06430c644e7c33d4c5867bd9e844db861984f9a8d405661a0d3a3c2f2d560a19917a88198ac025e5e8b7e23c30fd6ae12c0cd2b23f
7
- data.tar.gz: 5e7980edf74dd90a048f833ee74c1c3c280c26bcb223f6137fe45333aa1e6d83df87e5e8324e5c8b99daa6485c9f2b61d307282b05983b429fa72e26e35b3570
6
+ metadata.gz: e551f4d0a50a8d981a25df40ebcf56eb4eec6a219d4009e34df081a78616c0694eb96e10215acc0503fc2441c6f6f51dcfdcb26a1fd7ab9f70d21e5611a66679
7
+ data.tar.gz: 8b6ab4840fa681573f7ee57668232573beae5c71bb70a0c927a9fb5989218d4a61d3218415e0bd021168bf34d6070b1f7fa3a08a12c6ff058af014ac10204e3f
data/README.md CHANGED
@@ -31,9 +31,10 @@ contents:
31
31
  ```ruby
32
32
 
33
33
  Forex::Trader.define "NCB" do |t|
34
- t.base_currency = "JMD"
35
- t.name = "National Commercial Bank"
36
- t.endpoint = "http://www.jncb.com/rates/foreignexchangerates"
34
+ t.base_currency = "JMD"
35
+ t.name = "National Commercial Bank"
36
+ t.endpoint = "http://www.jncb.com/rates/foreignexchangerates"
37
+ t.twitter_handle = "@ncbja"
37
38
 
38
39
  t.rates_parser = ->(doc) do # doc is a nokogiri document
39
40
  # process the doc and return rates hash in the following format
@@ -63,7 +64,7 @@ For example:
63
64
 
64
65
  ```ruby
65
66
  #...
66
-
67
+
67
68
  translations = {
68
69
  'US$' => 'USD',
69
70
  'TT$' => 'TTD',
data/Rakefile CHANGED
@@ -1 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
+
3
+ Dir.glob('lib/tasks/*.rake').each {|r| import r}
4
+
5
+ task :console do
6
+ require 'pry'
7
+ require 'forex'
8
+ ARGV.clear
9
+ Pry.start
10
+ end
@@ -2,7 +2,7 @@ module Forex
2
2
  class TabularRates
3
3
  NoSuchColumn = Class.new(StandardError)
4
4
 
5
- attr_accessor :table, :options
5
+ attr_accessor :table, :columns
6
6
 
7
7
  COLUMN_LABELS = [
8
8
  :buy_cash,
@@ -11,35 +11,55 @@ module Forex
11
11
  :sell_draft
12
12
  ]
13
13
 
14
- DEFAULT_OPTIONS = {
14
+ DEFAULT_COLUMNS = {
15
15
  currency_code: 0,
16
16
  }.merge(Hash[(COLUMN_LABELS).zip(1..COLUMN_LABELS.size)])
17
17
 
18
- def initialize(table, options = DEFAULT_OPTIONS)
18
+ def initialize(table, columns = DEFAULT_COLUMNS)
19
19
  @table = table
20
- @options = options.symbolize_keys
20
+ @columns = columns.symbolize_keys
21
21
  end
22
22
 
23
23
  def parse_rates(translations = {})
24
- currency = options.delete(:currency_code) || 0
24
+ table.css('tr').each_with_object(cached_currencies) do |tr, currencies|
25
+ table_row = tr.css('td')
25
26
 
26
- table.css('tr').each_with_object({}) do |tr, currencies|
27
- cells = tr.css('td')
28
- next if cells.empty?
27
+ next unless (currency_code = parse_currency_code(table_row, translations))
29
28
 
30
- currency_code = CurrencyCode.new(cells[currency.to_i].content, translations)
29
+ currencies[currency_code] = COLUMN_LABELS.each_with_object({}) do |column_label, rates|
30
+ rates.merge! parse_currency_rates(table_row, column_label)
31
+ end
32
+ end
33
+ end
31
34
 
32
- next if currencies.has_key?(currency_code.to_s) || currency_code.invalid?
35
+ private
33
36
 
34
- currencies[currency_code.to_s] = COLUMN_LABELS.each_with_object({}) do |column_label, rates|
35
- next unless rate_column = options[column_label]
37
+ def cached_currencies
38
+ @cached_currencies ||= {}
39
+ end
36
40
 
37
- rate_node = cells[rate_column.to_i]
38
- raise NoSuchColumn, "#{column_label} (#{rate_column}) does not exist in table" unless rate_node
41
+ def currency_column
42
+ @currency_column ||= columns.delete(:currency_code) || 0
43
+ end
39
44
 
40
- rates[column_label.to_sym] = Currency.new(rate_node.content).value
41
- end
42
- end
45
+ def parse_currency_code(table_row, translations)
46
+ return if table_row.empty?
47
+
48
+ currency_code = CurrencyCode.new(table_row[currency_column.to_i].content, translations)
49
+ return if currency_code.invalid? ||
50
+ cached_currencies.has_key?(parsed_currency_string = currency_code.to_s)
51
+
52
+ parsed_currency_string
53
+ end
54
+
55
+ def parse_currency_rates(table_row, column_label)
56
+ return {} unless rate_column = columns[column_label]
57
+
58
+ rate_node = table_row[rate_column.to_i]
59
+
60
+ raise NoSuchColumn, "#{column_label} (#{rate_column}) does not exist in table" unless rate_node
61
+
62
+ { column_label.to_sym => Currency.new(rate_node.content).value }
43
63
  end
44
64
 
45
65
  end
@@ -7,7 +7,8 @@ module Forex
7
7
  :base_currency,
8
8
  :endpoint,
9
9
  :rates_parser,
10
- :rates
10
+ :rates,
11
+ :twitter_handle
11
12
 
12
13
  class << self
13
14
  attr_accessor :all
@@ -1,7 +1,8 @@
1
1
  Forex::Trader.define "BNS" do |t|
2
- t.base_currency = "JMD"
3
- t.name = "Bank of Nova Scotia"
4
- t.endpoint = "http://www4.scotiabank.com/cgi-bin/ratesTool/depdisplay.cgi?pid=56"
2
+ t.base_currency = "JMD"
3
+ t.name = "Bank of Nova Scotia"
4
+ t.twitter_handle = "@ScotiabankJM"
5
+ t.endpoint = "http://www4.scotiabank.com/cgi-bin/ratesTool/depdisplay.cgi?pid=56"
5
6
 
6
7
  t.rates_parser = ->(doc) do # doc is a nokogiri document
7
8
 
@@ -5,13 +5,6 @@ Forex::Trader.define "COK" do |t|
5
5
 
6
6
  t.rates_parser = ->(doc) do # doc is a nokogiri document
7
7
 
8
- options = {
9
- currency_code: 0,
10
- buy_cash: 3,
11
- buy_draft: 2,
12
- sell_cash: 1,
13
- }
14
-
15
8
  table = doc.css(".table-bordered").first
16
9
 
17
10
  translations = {
@@ -19,6 +12,6 @@ Forex::Trader.define "COK" do |t|
19
12
  'Euro' => 'EUR',
20
13
  }
21
14
 
22
- Forex::TabularRates.new(table, options).parse_rates(translations)
15
+ Forex::TabularRates.new(table).parse_rates(translations)
23
16
  end
24
17
  end
@@ -1,7 +1,8 @@
1
1
  Forex::Trader.define "FGB" do |t|
2
- t.base_currency = "JMD"
3
- t.name = "First Global Bank"
4
- t.endpoint = "http://www.firstglobal-bank.com/"
2
+ t.base_currency = "JMD"
3
+ t.name = "First Global Bank"
4
+ t.twitter_handle = "@First_Global"
5
+ t.endpoint = "http://www.firstglobal-bank.com/"
5
6
 
6
7
  t.rates_parser = ->(doc) do # doc is a nokogiri document
7
8
  options = {
@@ -1,7 +1,8 @@
1
1
  Forex::Trader.define "JMMB" do |t|
2
- t.base_currency = "JMD"
3
- t.name = "Jamaica Money Market Brokers"
4
- t.endpoint = "http://www.jmmb.com/full_rates.php"
2
+ t.base_currency = "JMD"
3
+ t.name = "Jamaica Money Market Brokers"
4
+ t.twitter_handle = "@JMMBGROUP"
5
+ t.endpoint = "http://www.jmmb.com/full_rates.php"
5
6
 
6
7
  t.rates_parser = ->(doc) do # doc is a nokogiri document
7
8
 
@@ -9,7 +10,7 @@ Forex::Trader.define "JMMB" do |t|
9
10
  currency_code: 0,
10
11
  buy_cash: 1,
11
12
  buy_draft: 3,
12
- sell_cash: 2,
13
+ sell_cash: 4,
13
14
  sell_draft: 4
14
15
  }
15
16
 
@@ -1,7 +1,8 @@
1
1
  Forex::Trader.define "JNBS" do |t|
2
- t.base_currency = "JMD"
3
- t.name = "Jamaica National Building Society"
4
- t.endpoint = "http://www.jnbs.com/fx-rates-2"
2
+ t.base_currency = "JMD"
3
+ t.name = "Jamaica National Building Society"
4
+ t.twitter_handle = "@JamaicaNational"
5
+ t.endpoint = "http://www.jnbs.com/fx-rates-2"
5
6
 
6
7
  t.rates_parser = ->(doc) do # doc is a nokogiri document
7
8
 
@@ -1,7 +1,8 @@
1
1
  Forex::Trader.define "NCB" do |t|
2
- t.base_currency = "JMD"
3
- t.name = "National Commercial Bank"
4
- t.endpoint = "http://www.jncb.com/rates/foreignexchangerates"
2
+ t.base_currency = "JMD"
3
+ t.name = "National Commercial Bank"
4
+ t.endpoint = "http://www.jncb.com/rates/foreignexchangerates"
5
+ t.twitter_handle = "@ncbja"
5
6
 
6
7
  t.rates_parser = ->(doc) do # doc is a nokogiri document
7
8
 
@@ -1,7 +1,8 @@
1
1
  Forex::Trader.define "Sagicor" do |t|
2
- t.base_currency = "JMD"
3
- t.name = "Sagicor Bank"
4
- t.endpoint = "http://www.gopancaribbean.com/personal-banking"
2
+ t.base_currency = "JMD"
3
+ t.name = "Sagicor Bank"
4
+ t.twitter_handle = "@SagicorJa"
5
+ t.endpoint = "http://www.gopancaribbean.com/personal-banking"
5
6
 
6
7
  t.rates_parser = ->(doc) do # doc is a nokogiri document
7
8
  table = doc.css("table .data").first
@@ -1,3 +1,3 @@
1
1
  module Forex
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -0,0 +1,28 @@
1
+ desc "build rates for missing traders"
2
+ task :build_expected_rates do
3
+ require 'yaml'
4
+ require 'vcr'
5
+ require 'forex'
6
+
7
+ VCR.configure do |c|
8
+ c.cassette_library_dir = 'spec/vcr'
9
+ c.hook_into :webmock
10
+ end
11
+
12
+ Forex::Trader.all.each do |short_name, trader|
13
+ expected_rates_file_path = "spec/rates/#{short_name.downcase}.yml"
14
+
15
+ unless File.exists?(expected_rates_file_path)
16
+ VCR.use_cassette(['traders', short_name].join('/')) do
17
+ puts "Adding expected rates to #{expected_rates_file_path}"
18
+
19
+ File.open(expected_rates_file_path, 'w') do |f|
20
+ f.write(trader.fetch && trader.rates.to_yaml)
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ end
27
+
28
+
@@ -0,0 +1,51 @@
1
+ ---
2
+ USD:
3
+ :buy_cash: 101.3
4
+ :buy_draft: 103.3
5
+ :sell_cash: 105.0
6
+ :sell_draft: 105.0
7
+ GBP:
8
+ :buy_cash: 166.06
9
+ :buy_draft: 169.48
10
+ :sell_cash: 173.16
11
+ :sell_draft: 173.16
12
+ CAD:
13
+ :buy_cash: 94.3
14
+ :buy_draft: 96.71
15
+ :sell_cash: 99.5
16
+ :sell_draft: 99.5
17
+ EUR:
18
+ :buy_cash: 135.01
19
+ :buy_draft: 138.05
20
+ :sell_cash: 143.82
21
+ :sell_draft: 143.82
22
+ BBD:
23
+ :buy_cash: 46.23
24
+ :buy_draft: 50.25
25
+ :sell_cash: 54.62
26
+ :sell_draft: 54.62
27
+ KYD:
28
+ :buy_cash: 112.4
29
+ :buy_draft: 117.09
30
+ :sell_cash: 127.13
31
+ :sell_draft: 127.13
32
+ XCD:
33
+ :buy_cash: 34.59
34
+ :buy_draft: 36.41
35
+ :sell_cash: 40.46
36
+ :sell_draft: 40.46
37
+ JPY:
38
+ :buy_cash: 0.9341
39
+ :buy_draft: 0.9833
40
+ :sell_cash: 1.0573
41
+ :sell_draft: 1.0573
42
+ CHF:
43
+ :buy_cash: 106.8
44
+ :buy_draft: 110.67
45
+ :sell_cash: 119.64
46
+ :sell_draft: 119.64
47
+ TTD:
48
+ :buy_cash: 15.26
49
+ :buy_draft: 16.06
50
+ :sell_cash: 17.65
51
+ :sell_draft: 17.65
@@ -1,20 +1,26 @@
1
+ ---
1
2
  USD:
2
- buy_cash: 103.4
3
- buy_draft: 101.8
4
- sell_cash: 105.65
5
- GBP:
6
- buy_cash: 165.8
7
- buy_draft: 162.0
8
- sell_cash: 172.3
3
+ :buy_cash: 106.45
4
+ :buy_draft: 104.2
5
+ :sell_cash: 108.85
6
+ :sell_draft: 109.4
9
7
  CAD:
10
- buy_cash: 95.75
11
- buy_draft: 93.5
12
- sell_cash: 98.45
8
+ :buy_cash: 93.15
9
+ :buy_draft: 91.9
10
+ :sell_cash: 97.0
11
+ :sell_draft: 98.35
12
+ GBP:
13
+ :buy_cash: 175.1
14
+ :buy_draft: 162.0
15
+ :sell_cash: 180.1
16
+ :sell_draft: 181.4
13
17
  KYD:
14
18
  :buy_cash: 116.3
15
19
  :buy_draft: 100.0
16
- :sell_cash: 120.4
20
+ :sell_cash: 123.4
21
+ :sell_draft: 122.25
17
22
  EUR:
18
- :buy_cash: 139.5
23
+ :buy_cash: 143.0
19
24
  :buy_draft: 130.2
20
- :sell_cash: 144.0
25
+ :sell_cash: 147.0
26
+ :sell_draft: 148.0
@@ -1,25 +1,26 @@
1
+ ---
1
2
  USD:
2
- buy_cash: 103.45
3
- buy_draft: 104.45
4
- sell_draft: 106.0
5
- sell_cash:
3
+ :buy_cash: 103.45
4
+ :buy_draft: 104.45
5
+ :sell_cash: 106.0
6
+ :sell_draft: 106.0
6
7
  TTD:
7
- buy_cash: 14.55
8
- buy_draft: 15.01
9
- sell_draft: 16.92
10
- sell_cash:
8
+ :buy_cash: 14.55
9
+ :buy_draft: 15.01
10
+ :sell_cash: 16.92
11
+ :sell_draft: 16.92
11
12
  GBP:
12
- buy_cash: 167.74
13
- buy_draft: 168.74
14
- sell_draft: 174.53
15
- sell_cash:
13
+ :buy_cash: 167.74
14
+ :buy_draft: 168.74
15
+ :sell_cash: 174.53
16
+ :sell_draft: 174.53
16
17
  EUR:
17
- buy_cash: 138.81
18
- buy_draft: 140.31
19
- sell_draft: 145.68
20
- sell_cash:
18
+ :buy_cash: 138.81
19
+ :buy_draft: 140.31
20
+ :sell_cash: 145.68
21
+ :sell_draft: 145.68
21
22
  CAD:
22
- buy_cash: 95.59
23
- buy_draft: 96.59
24
- sell_draft: 100.56
25
- sell_cash:
23
+ :buy_cash: 95.59
24
+ :buy_draft: 96.59
25
+ :sell_cash: 100.56
26
+ :sell_draft: 100.56
@@ -0,0 +1,21 @@
1
+ ---
2
+ USD:
3
+ :buy_cash: 102.7
4
+ :buy_draft: 103.2
5
+ :sell_cash: 105.25
6
+ GBP:
7
+ :buy_cash: 167.96
8
+ :buy_draft: 168.71
9
+ :sell_cash: 173.85
10
+ CAD:
11
+ :buy_cash: 96.16
12
+ :buy_draft: 96.91
13
+ :sell_cash: 99.79
14
+ KYD:
15
+ :buy_cash: 95.0
16
+ :buy_draft:
17
+ :sell_cash: 104.5
18
+ EUR:
19
+ :buy_cash: 135.21
20
+ :buy_draft: 136.21
21
+ :sell_cash: 144.71
@@ -0,0 +1,45 @@
1
+ ---
2
+ USD:
3
+ :buy_cash: 102.0
4
+ :buy_draft: 103.5
5
+ :sell_cash: 105.0
6
+ GBP:
7
+ :buy_cash: 165.5
8
+ :buy_draft: 169.0
9
+ :sell_cash: 173.0
10
+ CAD:
11
+ :buy_cash: 95.5
12
+ :buy_draft: 98.0
13
+ :sell_cash: 101.0
14
+ EUR:
15
+ :buy_cash: 139.5
16
+ :buy_draft: 141.0
17
+ :sell_cash: 143.5
18
+ BBD:
19
+ :buy_cash:
20
+ :buy_draft:
21
+ :sell_cash:
22
+ BZD:
23
+ :buy_cash:
24
+ :buy_draft: 49.27
25
+ :sell_cash: 51.73
26
+ KYD:
27
+ :buy_cash: 106.5
28
+ :buy_draft:
29
+ :sell_cash: 110.0
30
+ XCD:
31
+ :buy_cash:
32
+ :buy_draft:
33
+ :sell_cash:
34
+ TTD:
35
+ :buy_cash: 14.55
36
+ :buy_draft: 15.0
37
+ :sell_cash: 16.4
38
+ CHF:
39
+ :buy_cash: 109.17
40
+ :buy_draft: 109.47
41
+ :sell_cash: 114.94
42
+ JPY:
43
+ :buy_cash: 0.96
44
+ :buy_draft: 0.97
45
+ :sell_cash: 1.01
@@ -0,0 +1,21 @@
1
+ ---
2
+ USD:
3
+ :buy_cash: 103.5
4
+ :buy_draft: 104.5
5
+ :sell_cash: 105.8
6
+ :sell_draft: 105.9
7
+ CAD:
8
+ :buy_cash: 94.5
9
+ :buy_draft: 95.5
10
+ :sell_cash: 100.0
11
+ :sell_draft: 100.5
12
+ GBP:
13
+ :buy_cash: 168.5
14
+ :buy_draft: 169.5
15
+ :sell_cash: 174.0
16
+ :sell_draft: 174.5
17
+ EUR:
18
+ :buy_cash: 138.0
19
+ :buy_draft: 139.0
20
+ :sell_cash: 144.4
21
+ :sell_draft: 145.0
@@ -15,15 +15,18 @@ describe "Traders" do
15
15
  expected_rates_file_path = "spec/rates/#{short_name.downcase}.yml"
16
16
 
17
17
  unless File.exists?(expected_rates_file_path)
18
- pending "Create expected rates YAML for #{short_name} at #{expected_rates_file_path}"
18
+ error_message = "Create expected rates YAML for #{short_name} at #{expected_rates_file_path}"
19
+ raise error_message
19
20
  end
20
21
 
21
- YAML.load(File.read(expected_rates_file_path)). # read file
22
- each_with_object({}) do |(currency,txns), rates| # make txn type a symbol
23
- rates[currency] = txns.each_with_object({}) do |(txn, price), txn_price|
24
- txn_price[txn.to_sym] = price
25
- end
22
+ expected_rates_yaml = File.read(expected_rates_file_path)
23
+ expected_rates = YAML.load(expected_rates_yaml)
24
+
25
+ expected_rates.each_with_object({}) do |(currency,txns), rates|
26
+ rates[currency] = txns.each_with_object({}) do |(txn, price), txn_price|
27
+ txn_price[txn.to_sym] = price
26
28
  end
29
+ end
27
30
  end
28
31
 
29
32
  end
@@ -21,7 +21,7 @@ http_interactions:
21
21
  message: OK
22
22
  headers:
23
23
  Date:
24
- - Sat, 14 Dec 2013 18:14:15 GMT
24
+ - Sun, 16 Mar 2014 11:37:34 GMT
25
25
  Server:
26
26
  - Apache
27
27
  X-Pingback:
@@ -30,8 +30,10 @@ http_interactions:
30
30
  - <http://www.cokcu.com/?p=1700>; rel=shortlink
31
31
  Vary:
32
32
  - Accept-Encoding
33
- Transfer-Encoding:
34
- - chunked
33
+ Content-Length:
34
+ - '8508'
35
+ Connection:
36
+ - close
35
37
  Content-Type:
36
38
  - text/html; charset=UTF-8
37
39
  body:
@@ -398,284 +400,288 @@ http_interactions:
398
400
  IGN1cnZlZCBjdXJ2ZWQtaHotMSI+DQogICAgICAgICAgICAgICAgICAgICAg
399
401
  ICA8dWwgY2xhc3M9InNsaWRlcyI+DQoJCQkJCQk8bGkgPjxpbWcgc3JjPSJo
400
402
  dHRwOi8vd3d3LmNva2N1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvb3RoZXIt
401
- YmFubmVyLmpwZyIgd2lkdGg9IjExNzAiIGhlaWdodD0iMCIgLz48L2xpPg0K
402
- ICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgICAg
403
- ICAgICAgPC9kaXY+PCEtLSBlbmQgI2ZsZXhzbGlkZXIgLS0+DQoNCgkJCTwv
404
- ZGl2Pg0KCQkJDQoJCQk8ZGl2IGNsYXNzPSJ6bl9oZWFkZXJfYm90dG9tX3N0
405
- eWxlIj48L2Rpdj48IS0tIGhlYWRlciBib3R0b20gc3R5bGUgLS0+DQoJCQkN
406
- CiAgICAgICAgPC9kaXY+PCEtLSBlbmQgc2xpZGVzaG93IC0tPg0KCQo8c2Vj
407
- dGlvbiBpZD0iY29udGVudCI+PGRpdiBjbGFzcz0iY29udGFpbmVyIj48ZGl2
408
- IGNsYXNzPSJtYWluYm9keSB6bl9oYXNfc2lkZWJhciI+PGRpdiBjbGFzcz0i
409
- cm93ICI+PGRpdiBjbGFzcz0ic3Bhbjkgem5fY29udGVudCI+PGgxIGNsYXNz
410
- PSJwYWdlLXRpdGxlIj5DYW1iaW88L2gxPjxkaXYgY2xhc3M9InNwYW40IHpu
411
- X2NvbnRlbnQiPgo8cD48YSBocmVmPSJodHRwOi8vd3d3LmNva2N1LmNvbS93
412
- cC1jb250ZW50L3VwbG9hZHMvQ2FtYmlvLUV4Y2hhbmdlLnBuZyIgY2xhc3M9
413
- ImhvdmVyQm9yZGVyIGFsaWdubm9uZSIgcmVsPSJwcmV0dHlQaG90b1tpZnJh
414
- bWVzXSI+PGltZyBjbGFzcz0iIHNpemUtbWVkaXVtIHdwLWltYWdlLTMwOTEi
415
- IGFsdD0iQ2FtYmlvIEV4Y2hhbmdlIiBzcmM9Imh0dHA6Ly93d3cuY29rY3Uu
416
- Y29tL3dwLWNvbnRlbnQvdXBsb2Fkcy9DYW1iaW8tRXhjaGFuZ2UtMzAweDYy
417
- LnBuZyIgd2lkdGg9IjMwMCIgaGVpZ2h0PSI2MiIgLz48L2E+PC9wPgo8cD4m
418
- bmJzcDs8L3A+CjxwPkNPSyBvZmZlcnMgY2FtYmlvIHNlcnZpY2VzIGF0IGFs
419
- bCA1IGxvY2F0aW9uczsgQ3Jvc3Nyb2FkcywgSGFsZi1XYXktVHJlZSwgUG9y
420
- dG1vcmUsIE1hbmRldmlsbGUgYW5kIE1vbnRlZ28gQmF5LiBXZSBvZmZlciBj
421
- b21wZXRpdGl2ZSByYXRlcywgZmFzdCBhbmQgZWZmaWNpZW50IHNlcnZpY2Uu
422
- IE91ciBjYW1iaW8gc2VydmljZXMgaXMgYXZhaWxhYmxlIHRvIGJvdGggbWVt
423
- YmVycyBhbmQgbm9uLW1lbWJlcnMuPC9wPgo8cD5Gb3IgbW9yZSBpbmZvcm1h
424
- dGlvbiwgY29udGFjdCA8c3Ryb25nPlBhdHJpY2UgVGhvbWFzPC9zdHJvbmc+
425
- LCBvdXIgRm9yZWlnbiBFeGNoYW5nZSBUcmFkZXIsIGVtYWlsIDxhIGhyZWY9
426
- Im1haWx0bzpwdGhvbWFzQGNva2N1LmNvbSIgdGFyZ2V0PSJfYmxhbmsiPnB0
427
- aG9tYXNAY29rY3UuY29tPC9hPiBvciBkaWFsIDEtODc2LTk2MC1JQ0FOICg5
428
- NjAtNDIyNiksIGV4dGVuc2lvbnMgMTU0OSBvciAxNTQ4LjwvcD4KPC9kaXY+
429
- CjxkaXYgY2xhc3M9InNwYW40IHpuX2NvbnRlbnQiPgo8aDQgY2xhc3M9Im1f
430
- dGl0bGUiPkZvcmVpZ24gRXhjaGFuZ2UgcmF0ZXM8L2g0Pgo8dGFibGUgY2xh
431
- c3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIj4KPHRoZWFkPgo8dHI+Cjx0aD48
432
- L3RoPgo8dGg+U2VsbGluZyAoQ2FzaCk8L3RoPgo8dGg+QnV5aW5nIChDaGVx
433
- dWUpPC90aD4KPHRoPkJ1eWluZyAoQ2FzaCk8L3RoPgo8L3RyPgo8L3RoZWFk
434
- Pgo8dGJvZHkgY2xhc3M9InRhYmxlLWhvdmVyIj4KPHRyPgo8dGQ+PHN0cm9u
435
- Zz5VU0Q8L3N0cm9uZz48L3RkPgo8dGQ+MTA1LjY1PC90ZD4KPHRkPjEwMS44
436
- MDwvdGQ+Cjx0ZD4xMDMuNDA8L3RkPgo8L3RyPgo8dHI+Cjx0ZD48c3Ryb25n
437
- PkdCUDwvc3Ryb25nPjwvdGQ+Cjx0ZD4xNzIuMzA8L3RkPgo8dGQ+MTYyLjAw
438
- PC90ZD4KPHRkPjE2NS44MDwvdGQ+CjwvdHI+Cjx0cj4KPHRkPjxzdHJvbmc+
439
- Q0FEPC9zdHJvbmc+PC90ZD4KPHRkPjk4LjQ1PC90ZD4KPHRkPjkzLjUwPC90
440
- ZD4KPHRkPjk1Ljc1PC90ZD4KPC90cj4KPHRyPgo8dGQ+PHN0cm9uZz5DSTwv
441
- c3Ryb25nPjwvdGQ+Cjx0ZD4xMjAuNDA8L3RkPgo8dGQ+MTAwLjAwPC90ZD4K
442
- PHRkPjExNi4zMDwvdGQ+CjwvdHI+Cjx0cj4KPHRkPjxzdHJvbmc+RXVybzwv
443
- c3Ryb25nPjwvdGQ+Cjx0ZD4xNDQuMDA8L3RkPgo8dGQ+MTMwLjIwPC90ZD4K
444
- PHRkPjEzOS41MDwvdGQ+CjwvdHI+CjwvdGJvZHk+CjwvdGFibGU+CjwvZGl2
445
- Pgo8L2Rpdj48ZGl2IGNsYXNzPSJzcGFuMyI+PGRpdiBpZD0ic2lkZWJhciIg
446
- Y2xhc3M9InNpZGViYXIgc2lkZWJhci1yaWdodCAiPjxkaXYgaWQ9Im5hdl9t
447
- ZW51LTUiIGNsYXNzPSJ3aWRnZXQgd2lkZ2V0X25hdl9tZW51Ij48ZGl2IGNs
448
- YXNzPSJtZW51LXNlcnZpY2VzLW1lbnUtY29udGFpbmVyIj48dWwgaWQ9Im1l
449
- bnUtc2VydmljZXMtbWVudSIgY2xhc3M9Im1lbnUiPjxsaSBpZD0ibWVudS1p
450
- dGVtLTI0MDAiIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtcG9z
451
- dF90eXBlIG1lbnUtaXRlbS1vYmplY3QtcGFnZSBjdXJyZW50LXBhZ2UtYW5j
452
- ZXN0b3IgY3VycmVudC1wYWdlLXBhcmVudCBtZW51LWl0ZW0tMjQwMCI+PGEg
453
- aHJlZj0iaHR0cDovL3d3dy5jb2tjdS5jb20vb3RoZXJzZXJ2aWNlcy8iPk90
454
- aGVyIFNlcnZpY2VzPC9hPjwvbGk+CjxsaSBpZD0ibWVudS1pdGVtLTI0MDEi
455
- IGNsYXNzPSJtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtcG9zdF90eXBlIG1l
456
- bnUtaXRlbS1vYmplY3QtcGFnZSBtZW51LWl0ZW0tMjQwMSI+PGEgaHJlZj0i
457
- aHR0cDovL3d3dy5jb2tjdS5jb20vb3RoZXJzZXJ2aWNlcy9hdG0vIj5BY2Nl
458
- c3MgUGx1cyBBVE0gQ2FyZDwvYT48L2xpPgo8bGkgaWQ9Im1lbnUtaXRlbS0y
459
- NDAyIiBjbGFzcz0ibWVudS1pdGVtIG1lbnUtaXRlbS10eXBlLXBvc3RfdHlw
460
- ZSBtZW51LWl0ZW0tb2JqZWN0LXBhZ2UgbWVudS1pdGVtLTI0MDIiPjxhIGhy
461
- ZWY9Imh0dHA6Ly93d3cuY29rY3UuY29tL290aGVyc2VydmljZXMvaGVhbHRo
462
- LyI+SGVhbHRoIEluc3VyYW5jZTwvYT48L2xpPgo8bGkgaWQ9Im1lbnUtaXRl
463
- bS0yNDAzIiBjbGFzcz0ibWVudS1pdGVtIG1lbnUtaXRlbS10eXBlLXBvc3Rf
464
- dHlwZSBtZW51LWl0ZW0tb2JqZWN0LXBhZ2UgY3VycmVudC1tZW51LWl0ZW0g
465
- cGFnZV9pdGVtIHBhZ2UtaXRlbS0xNzAwIGN1cnJlbnRfcGFnZV9pdGVtIG1l
466
- bnUtaXRlbS0yNDAzIGFjdGl2ZSI+PGEgaHJlZj0iaHR0cDovL3d3dy5jb2tj
467
- dS5jb20vb3RoZXJzZXJ2aWNlcy9jYW1iaW8vIj5DYW1iaW88L2E+PC9saT4K
468
- PGxpIGlkPSJtZW51LWl0ZW0tMjQwNCIgY2xhc3M9Im1lbnUtaXRlbSBtZW51
469
- LWl0ZW0tdHlwZS1wb3N0X3R5cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIG1l
470
- bnUtaXRlbS0yNDA0Ij48YSBocmVmPSJodHRwOi8vd3d3LmNva2N1LmNvbS9v
471
- dGhlcnNlcnZpY2VzL2Nvay1yZW1pdHRhbmNlLXNlcnZpY2VzLyI+Q09LIFJl
472
- bWl0dGFuY2UgU2VydmljZXM8L2E+PC9saT4KPGxpIGlkPSJtZW51LWl0ZW0t
473
- MjQwNSIgY2xhc3M9Im1lbnUtaXRlbSBtZW51LWl0ZW0tdHlwZS1wb3N0X3R5
474
- cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIG1lbnUtaXRlbS0yNDA1Ij48YSBo
475
- cmVmPSJodHRwOi8vd3d3LmNva2N1LmNvbS9vdGhlcnNlcnZpY2VzL2ZpcC8i
476
- PkZhbWlseSBJbmRlbW5pdHkgUGxhbjwvYT48L2xpPgo8L3VsPjwvZGl2Pjwv
477
- ZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pjwvc2VjdGlvbj48
478
- IS0tIGVuZCAjY29udGVudCAtLT4JCQkJCgkNCgk8Zm9vdGVyIGlkPSJmb290
479
- ZXIiPg0KCQk8ZGl2IGNsYXNzPSJjb250YWluZXIiPg0KDQoJCQk8ZGl2IGNs
480
- YXNzPSJyb3ciPjxkaXYgY2xhc3M9InNwYW4zIj48L2Rpdj48ZGl2IGNsYXNz
481
- PSJzcGFuMyI+PC9kaXY+PGRpdiBjbGFzcz0ic3BhbjMiPjwvZGl2PjxkaXYg
482
- Y2xhc3M9InNwYW4zIj48L2Rpdj48L2Rpdj48IS0tIGVuZCByb3cgLS0+CQ0K
483
- CQkJDQoJCQk8ZGl2IGNsYXNzPSJyb3ciPg0KCQkJCTxkaXYgY2xhc3M9InNw
484
- YW4xMiI+DQoJCQkJCTxkaXYgY2xhc3M9ImJvdHRvbSBmaXhjbGVhciI+DQoJ
485
- CQkJCQ0KCQkJCQk8dWwgY2xhc3M9InNvY2lhbC1pY29ucyBjb2xvcmVkIGZp
486
- eGNsZWFyIj48bGkgY2xhc3M9InRpdGxlIj5HRVQgU09DSUFMPC9saT48bGkg
487
- Y2xhc3M9InNvY2lhbC1mYWNlYm9vayI+PGEgaHJlZj0iaHR0cHM6Ly93d3cu
488
- ZmFjZWJvb2suY29tL3BhZ2VzL0NPSy1Tb2RhbGl0eS1Dby1vcGVyYXRpdmUt
489
- Q3JlZGl0LVVuaW9uLzMzNjM3NDgyNDM2NSIgdGFyZ2V0PSJfYmxhbmsiPkZh
490
- Y2Vib29rPC9hPjwvbGk+PGxpIGNsYXNzPSJzb2NpYWwtdHdpdHRlciI+PGEg
491
- aHJlZj0iIyIgdGFyZ2V0PSJfYmxhbmsiPlR3aXR0ZXI8L2E+PC9saT48L3Vs
492
- PgkJCQkJDQoJCQkJCQkJCQkJCQ0KCQkJCQkJPGRpdiBjbGFzcz0iY29weXJp
493
- Z2h0Ij4NCgkJCQkJCQkNCgkJCQkJCQkNCgkJCQkJCQk8YSBocmVmPSJodHRw
494
- Oi8vd3d3LmNva2N1LmNvbSI+PGltZyBzcmM9Imh0dHA6Ly93d3cuY29rY3Uu
495
- Y29tL3dwLWNvbnRlbnQvdXBsb2Fkcy9mb290ZXJsb2dvMi5wbmciIGFsdD0i
496
- IiAvPjwvYT48cD7CqSBDT0sgU29kYWxpdHkgQ28tb3BlcmF0aXZlIENyZWRp
497
- dCBVbmlvbiBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuPGJyLz4NCkRlc2ln
498
- bmVkICYgRGV2ZWxvcGVkIGJ5IDxhIGhyZWY9Imh0dHA6Ly93d3cuemlwdGVj
499
- aG5vbG9naWVzLmNvbS8iPlppcFRlY2hub2xvZ2llcy5jb208L2E+IC0gPGEg
500
- aHJlZj0iaHR0cDovL3d3dy5jb2tjdS5jb20vcHJpdmFjeS1wb2xpY3kvIj5Q
501
- cml2YWN5PC9hPiAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuY29rY3UuY29tL3Rl
502
- cm1zLW9mLXVzZS8iPlRlcm1zIG9mIFVzZTwvYT4gLSA8YSBocmVmPSJodHRw
503
- Oi8vd3d3LndvY2N1Lm9yZy8iPldPQ0NVPC9hPjwvcD4JCQkJCQkJDQoJCQkJ
504
- CQkJDQoJCQkJCQk8L2Rpdj48IS0tIGVuZCBjb3B5cmlnaHQgLS0+DQoJCQkJ
505
- CQkJDQoJCQkJCQkJCQkJCQ0KDQoJCQkJCTwvZGl2PjwhLS0gZW5kIGJvdHRv
506
- bSAtLT4NCgkJCQk8L2Rpdj4NCgkJCTwvZGl2PjwhLS0gZW5kIHJvdyAtLT4N
507
- CgkJCQ0KCQk8L2Rpdj4NCgk8L2Zvb3Rlcj4NCgkgICAgPC9kaXY+PCEtLSBl
508
- bmQgcGFnZV93cmFwcGVyIC0tPg0KCQ0KICAgIDxhIGhyZWY9IiMiIGlkPSJ0
509
- b3RvcCI+VE9QPC9hPiANCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
510
- Ij4NCg0KICB2YXIgX2dhcSA9IF9nYXEgfHwgW107DQogIF9nYXEucHVzaChb
511
- J19zZXRBY2NvdW50JywgJ1VBLTQzMTQyMDIwLTEnXSk7DQogIF9nYXEucHVz
512
- aChbJ190cmFja1BhZ2V2aWV3J10pOw0KDQogIChmdW5jdGlvbigpIHsNCiAg
513
- ICB2YXIgZ2EgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsg
514
- Z2EudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOyBnYS5hc3luYyA9IHRydWU7
515
- DQogICAgZ2Euc3JjID0gKCdodHRwczonID09IGRvY3VtZW50LmxvY2F0aW9u
516
- LnByb3RvY29sID8gJ2h0dHBzOi8vJyA6ICdodHRwOi8vJykgKyAnc3RhdHMu
517
- Zy5kb3VibGVjbGljay5uZXQvZGMuanMnOw0KICAgIHZhciBzID0gZG9jdW1l
518
- bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpWzBdOyBzLnBhcmVu
519
- dE5vZGUuaW5zZXJ0QmVmb3JlKGdhLCBzKTsNCiAgfSkoKTsNCg0KPC9zY3Jp
520
- cHQ+DQoNCg0KDQoNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz
521
- cmM9Imh0dHA6Ly9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LWxhdGVzdC5taW4u
522
- anMiPjwvc2NyaXB0Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
523
- IHNyYz0iaHR0cDovL2Nkbi5qc2RlbGl2ci5uZXQvanF1ZXJ5LmNvb2tpZS8x
524
- LjMuMS9qcXVlcnkuY29va2llLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgdHlw
525
- ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly93d3cuY29rY3UuY29t
526
- L3dwLWNvbnRlbnQvdGhlbWVzL2thbGx5YXMvYWRkb25zL3ByZXR0eXBob3Rv
527
- L2pxdWVyeS5wcmV0dHlQaG90by5qcyI+PC9zY3JpcHQ+DQoNCg0KPHNjcmlw
528
- dCA+DQoNCmNvbnNvbGUuZGVidWcoJC5jb29raWUoInN1cnZleSIgKSk7DQoN
529
- CmlmKCQuY29va2llKCdzdXJ2ZXknKSAhPSAnb2xkJyl7DQoJJC5jb29raWUo
530
- InN1cnZleSIsICJuZXciICk7DQoJY29uc29sZS5kZWJ1ZygkLmNvb2tpZSgi
531
- c3VydmV5IiApKTt9DQoJDQppZigkLmNvb2tpZSgnc3VydmV5JykgPT0gJ25l
532
- dycgJiYgZG9jdW1lbnQuVVJMICE9ICdodHRwOi8vd3d3LmNva2N1LmNvbS9j
533
- b250YWN0LXVzL3N1cnZleS8nKXsNCgkNCgkJJC5mbi5wcmV0dHlQaG90byh7
534
- IHNvY2lhbF90b29sczogZmFsc2UgfSk7DQoJCSQucHJldHR5UGhvdG8ub3Bl
535
- bignaHR0cDovL3d3dy5jb2tjdS5jb20vc3VydmV5Lmh0bWw/aWZyYW1lPXRy
536
- dWUmd2lkdGg9NDAyJmhlaWdodD05NCcsICcnLCAnJyk7DQoJCQ0KCQkkLmNv
537
- b2tpZSgic3VydmV5IiwgIm9sZCIgKTsNCiB9DQo8L3NjcmlwdD4NCg0KPHNj
538
- cmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL2FqYXgu
539
- YXNwbmV0Y2RuLmNvbS9hamF4L2pxdWVyeS52YWxpZGF0ZS8xLjExLjEvanF1
540
- ZXJ5LnZhbGlkYXRlLmpzJz48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSd0ZXh0
541
- L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL3d3dy5jb2tjdS5jb20vd3AtY29u
542
- dGVudC9wbHVnaW5zL3dwZ2Zvcm0vanMvanF1ZXJ5LmNvbHVtbml6ZXIuanMn
543
- Pjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+Ci8q
544
- IDwhW0NEQVRBWyAqLwp2YXIgd3BnZm9ybV9zY3JpcHRfdmFycyA9IHsicmVx
545
- dWlyZWQiOiJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIsInJlbW90ZSI6IlBs
546
- ZWFzZSBmaXggdGhpcyBmaWVsZC4iLCJlbWFpbCI6IlBsZWFzZSBlbnRlciBh
547
- IHZhbGlkIGVtYWlsIGFkZHJlc3MuIiwidXJsIjoiUGxlYXNlIGVudGVyIGEg
548
- dmFsaWQgVVJMLiIsImRhdGUiOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRl
549
- LiIsImRhdGVJU08iOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBkYXRlIChJU08p
550
- LiIsIm51bWJlciI6IlBsZWFzZSBlbnRlciBhIHZhbGlkIG51bWJlci4iLCJk
551
- aWdpdHMiOiJQbGVhc2UgZW50ZXIgb25seSBkaWdpdHMuIiwiY3JlZGl0Y2Fy
552
- ZCI6IlBsZWFzZSBlbnRlciBhIHZhbGlkIGNyZWRpdCBjYXJkIG51bWJlci4i
553
- LCJlcXVhbFRvIjoiUGxlYXNlIGVudGVyIHRoZSBzYW1lIHZhbHVlIGFnYWlu
554
- LiwiLCJhY2NlcHQiOiJQbGVhc2UgZW50ZXIgYSB2YWx1ZSB3aXRoIGEgdmFs
555
- aWQgZXh0ZW5zaW9uLiIsIm1heGxlbmd0aCI6IlBsZWFzZSBlbnRlciBubyBt
556
- b3JlIHRoYW4gezB9IGNoYXJhY3RlcnMuIiwibWlubGVuZ3RoIjoiUGxlYXNl
557
- IGVudGVyIGF0IGxlYXN0IHswfSBjaGFyYWN0ZXJzLiIsInJhbmdlbGVuZ3Ro
558
- IjoiUGxlYXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiB7MH0gYW5kIHsxfSBj
559
- aGFyYWN0ZXJzIGxvbmcuIiwicmFuZ2UiOiJQbGVhc2UgZW50ZXIgYSB2YWx1
560
- ZSBiZXR3ZWVuIHswfSBhbmQgezF9LiIsIm1heCI6IlBsZWFzZSBlbnRlciBh
561
- IHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB7MH0uIiwibWluIjoiUGxl
562
- YXNlIGVudGVyIGEgdmFsdWUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHsw
563
- fS4ifTsKLyogXV0+ICovCjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQv
564
- amF2YXNjcmlwdCcgc3JjPSdodHRwOi8vd3d3LmNva2N1LmNvbS93cC1jb250
565
- ZW50L3BsdWdpbnMvd3BnZm9ybS9qcy93cGdmb3JtLmpzJz48L3NjcmlwdD4K
566
- PHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL3d3
567
- dy5jb2tjdS5jb20vd3AtY29udGVudC9wbHVnaW5zL2NvbnRhY3QtZm9ybS03
568
- L2luY2x1ZGVzL2pzL2pxdWVyeS5mb3JtLm1pbi5qcyc+PC9zY3JpcHQ+Cjxz
569
- Y3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KLyogPCFbQ0RBVEFbICov
570
- CnZhciBfd3BjZjcgPSB7ImxvYWRlclVybCI6Imh0dHA6XC9cL3d3dy5jb2tj
571
- dS5jb21cL3dwLWNvbnRlbnRcL3BsdWdpbnNcL2NvbnRhY3QtZm9ybS03XC9p
572
- bWFnZXNcL2FqYXgtbG9hZGVyLmdpZiIsInNlbmRpbmciOiJTZW5kaW5nIC4u
573
- LiJ9OwovKiBdXT4gKi8KPC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9q
574
- YXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly93d3cuY29rY3UuY29tL3dwLWNvbnRl
575
- bnQvcGx1Z2lucy9jb250YWN0LWZvcm0tNy9pbmNsdWRlcy9qcy9zY3JpcHRz
576
- LmpzJz48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQn
577
- IHNyYz0naHR0cDovL3d3dy5jb2tjdS5jb20vd3AtY29udGVudC90aGVtZXMv
578
- a2FsbHlhcy9zbGlkZXJzL2ZsZXhfc2xpZGVyL2pzL2pxdWVyeS5mbGV4c2xp
579
- ZGVyLW1pbi5qcyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZh
580
- c2NyaXB0JyBzcmM9J2h0dHA6Ly93d3cuY29rY3UuY29tL3dwLWNvbnRlbnQv
581
- dGhlbWVzL2thbGx5YXMvanMvYm9vdHN0cmFwLm1pbi5qcyc+PC9zY3JpcHQ+
582
- CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly93
583
- d3cuY29rY3UuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2thbGx5YXMvanMvcGx1
584
- Z2lucy5qcyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2Ny
585
- aXB0JyBzcmM9J2h0dHA6Ly93d3cuY29rY3UuY29tL3dwLWNvbnRlbnQvdGhl
586
- bWVzL2thbGx5YXMvYWRkb25zL3N1cGVyZmlzaF9yZXNwb25zaXZlL3N1cGVy
587
- ZmlzaF9tZW51LmpzJz48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSd0ZXh0L2ph
588
- dmFzY3JpcHQnIHNyYz0naHR0cDovL3d3dy5jb2tjdS5jb20vd3AtY29udGVu
589
- dC90aGVtZXMva2FsbHlhcy9hZGRvbnMvcHJldHR5cGhvdG8vanF1ZXJ5LnBy
590
- ZXR0eVBob3RvLmpzJz48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSd0ZXh0L2ph
591
- dmFzY3JpcHQnPgovKiA8IVtDREFUQVsgKi8KdmFyIHpuX2RvX2xvZ2luID0g
592
- eyJhamF4dXJsIjoiaHR0cDpcL1wvd3d3LmNva2N1LmNvbVwvd3AtYWRtaW5c
593
- L2FkbWluLWFqYXgucGhwIn07Ci8qIF1dPiAqLwo8L3NjcmlwdD4KPHNjcmlw
594
- dCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL3d3dy5jb2tj
595
- dS5jb20vd3AtY29udGVudC90aGVtZXMva2FsbHlhcy9qcy96bnNjcmlwdC5q
596
- cyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBz
597
- cmM9J2h0dHA6Ly93d3cuY29rY3UuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy9j
598
- bGlja2Rlc2stbGl2ZS1zdXBwb3J0LWNoYXQtcGx1Z2luL2pzL3dpZGdldC5q
599
- cyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4K
600
- CQkJCQkJKGZ1bmN0aW9uKCQpeyAKCQkJCQkJCSQoZG9jdW1lbnQpLnJlYWR5
601
- KGZ1bmN0aW9uKCl7CgkJCQkJCQkJLyogQWN0aXZhdGUgU3VwZXJmaXNoIE1l
602
- bnUgKi8KCQkJCQkJCQl2YXIgc2ZEZWxheSA9IDYwMDsKCQkJCQkJCQlpZigk
603
- KCdodG1sJykuaGFzQ2xhc3MoJ2lzaWUnKSkKCQkJCQkJCQkJc2ZEZWxheSA9
604
- IDMwMDsKCQkJCQkJCQkkKCcjbWFpbl9tZW51ID4gdWwnKQoJCQkJCQkJCS5z
605
- dXBlcnN1YnMoeyAKCQkJCQkJCQkJbWluV2lkdGg6ICAgIDEyLCAgIC8vIG1p
606
- bmltdW0gd2lkdGggb2Ygc3ViLW1lbnVzIGluIGVtIHVuaXRzIAoJCQkJCQkJ
607
- CQltYXhXaWR0aDogICAgMjcsICAgLy8gbWF4aW11bSB3aWR0aCBvZiBzdWIt
608
- bWVudXMgaW4gZW0gdW5pdHMgCgkJCQkJCQkJCWV4dHJhV2lkdGg6ICAxICAg
609
- ICAvLyBleHRyYSB3aWR0aCBjYW4gZW5zdXJlIGxpbmVzIGRvbid0IHNvbWV0
610
- aW1lcyB0dXJuIG92ZXIgCgkJCQkJCQkJfSkuc3VwZXJmaXNoKHsKCQkJCQkJ
611
- CQkJZGVsYXk6c2ZEZWxheSwKCQkJCQkJCQkJZHJvcFNoYWRvd3M6ZmFsc2Us
612
- CgkJCQkJCQkJCWF1dG9BcnJvd3M6dHJ1ZSwKCQkJCQkJCQkJc3BlZWQ6MzAw
613
- CgkJCQkJCQkJfSk7CgkJCQkJCQl9KTsKCQkJCQkJCQoJCQkJCQkJCgkJCQkJ
614
- CQkkKHdpbmRvdykucmVzaXplKGZ1bmN0aW9uKCkgewoJCQkJCQkJCSQoJyNt
615
- YWluX21lbnUgPiB1bCcpCgkJCQkJCQkJLnN1cGVyc3Vicyh7IAoJCQkJCQkJ
616
- CQltaW5XaWR0aDogICAgMTIsICAgLy8gbWluaW11bSB3aWR0aCBvZiBzdWIt
617
- bWVudXMgaW4gZW0gdW5pdHMgCgkJCQkJCQkJCW1heFdpZHRoOiAgICAyNywg
618
- ICAvLyBtYXhpbXVtIHdpZHRoIG9mIHN1Yi1tZW51cyBpbiBlbSB1bml0cyAK
619
- CQkJCQkJCQkJZXh0cmFXaWR0aDogIDEgICAgIC8vIGV4dHJhIHdpZHRoIGNh
620
- biBlbnN1cmUgbGluZXMgZG9uJ3Qgc29tZXRpbWVzIHR1cm4gb3ZlciAKCQkJ
621
- CQkJCQl9KTsKCQkJCQkJCX0pOwoJCQkJCQkJCgkJCQkJCX0pKGpRdWVyeSk7
622
- CgkJCQkJCQ0KCQkJCQkJCShmdW5jdGlvbigkKSB7DQoJCQkJCQkJCSQod2lu
623
- ZG93KS5sb2FkKGZ1bmN0aW9uKCl7DQoJCQkJCQkJCQ0KCQkJCQkJCQkJZnVu
624
- Y3Rpb24gc2xpZGVDb21wbGV0ZXpuX25vcm1hbF9mbGV4KGFyZ3MpIHsNCgkJ
625
- CQkJCQkJCQl2YXIgY2FwdGlvbiA9ICQoYXJncy5jb250YWluZXIpLmZpbmQo
626
- Jy5mbGV4LWNhcHRpb24nKS5hdHRyKCdzdHlsZScsICcnKSwNCgkJCQkJCQkJ
627
- CQkJdGhpc0NhcHRpb24gPSAkKCcuZmxleHNsaWRlci56bl9ub3JtYWxfZmxl
628
- eCAuc2xpZGVzID4gbGkuZmxleC1hY3RpdmUtc2xpZGUnKS5maW5kKCcuZmxl
629
- eC1jYXB0aW9uJyk7DQoJCQkJCQkJCQkJdGhpc0NhcHRpb24uYW5pbWF0ZSh7
630
- bGVmdDoyMCwgb3BhY2l0eToxfSwgNTAwLCAnZWFzZU91dFF1aW50Jyk7DQoJ
631
- CQkJCQkJCQl9DQoJCQkJCQkJCQ0KCQkJCQkJCQkJaWYgKCBqUXVlcnkoJy5m
632
- bGV4c2xpZGVyLnpuX25vcm1hbF9mbGV4JykuaGFzQ2xhc3MoJ3puX2hhc190
633
- aHVtYnMnKSApIHsNCgkJCQkJCQkJCQl0aHVtYnMgPSAndGh1bWJuYWlscyc7
634
- DQoJCQkJCQkJCQl9DQoJCQkJCQkJCQllbHNlIHsNCgkJCQkJCQkJCQl0aHVt
635
- YnMgPSB0cnVlOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJDQoJCQkJCQkJCQl0
636
- cmFuc2l0aW9uID0galF1ZXJ5KCIuZmxleHNsaWRlci56bl9ub3JtYWxfZmxl
637
- eCIpLmF0dHIoJ2RhdGEtdHJhbnNpdGlvbicpOw0KCQkJCQkJCQkJDQoJCQkJ
638
- CQkJCQkkKCIuZmxleHNsaWRlci56bl9ub3JtYWxfZmxleCIpLmZsZXhzbGlk
639
- ZXIoew0KCQkJCQkJCQkJCWFuaW1hdGlvbjogdHJhbnNpdGlvbiwJCQkJLy9T
640
- dHJpbmc6IFNlbGVjdCB5b3VyIGFuaW1hdGlvbiB0eXBlLCAiZmFkZSIgb3Ig
641
- InNsaWRlIg0KCQkJCQkJCQkJCXNsaWRlRGlyZWN0aW9uOiAiaG9yaXpvbnRh
642
- bCIsCS8vU3RyaW5nOiBTZWxlY3QgdGhlIHNsaWRpbmcgZGlyZWN0aW9uLCAi
643
- aG9yaXpvbnRhbCIgb3IgInZlcnRpY2FsIg0KCQkJCQkJCQkJCXNsaWRlc2hv
644
- dzogdHJ1ZSwJCQkJLy9Cb29sZWFuOiBBbmltYXRlIHNsaWRlciBhdXRvbWF0
645
- aWNhbGx5DQoJCQkJCQkJCQkJc2xpZGVzaG93U3BlZWQ6IDcwMDAsCQkJLy9J
646
- bnRlZ2VyOiBTZXQgdGhlIHNwZWVkIG9mIHRoZSBzbGlkZXNob3cgY3ljbGlu
647
- ZywgaW4gbWlsbGlzZWNvbmRzDQoJCQkJCQkJCQkJYW5pbWF0aW9uRHVyYXRp
648
- b246IDYwMCwJCQkvL0ludGVnZXI6IFNldCB0aGUgc3BlZWQgb2YgYW5pbWF0
649
- aW9ucywgaW4gbWlsbGlzZWNvbmRzDQoJCQkJCQkJCQkJZGlyZWN0aW9uTmF2
650
- OiB0cnVlLAkJCQkvL0Jvb2xlYW46IENyZWF0ZSBuYXZpZ2F0aW9uIGZvciBw
651
- cmV2aW91cy9uZXh0IG5hdmlnYXRpb24/ICh0cnVlL2ZhbHNlKQ0KCQkJCQkJ
652
- CQkJCWNvbnRyb2xOYXY6IHRodW1icywJCQkJLy9Cb29sZWFuOiBDcmVhdGUg
653
- bmF2aWdhdGlvbiBmb3IgcGFnaW5nIGNvbnRyb2wgb2YgZWFjaCBjbGlkZT8g
654
- Tm90ZTogTGVhdmUgdHJ1ZSBmb3IgbWFudWFsQ29udHJvbHMgdXNhZ2UNCgkJ
655
- CQkJCQkJCQlrZXlib2FyZE5hdjogdHJ1ZSwJCQkJLy9Cb29sZWFuOiBBbGxv
656
- dyBzbGlkZXIgbmF2aWdhdGluZyB2aWEga2V5Ym9hcmQgbGVmdC9yaWdodCBr
657
- ZXlzDQoJCQkJCQkJCQkJbW91c2V3aGVlbDogZmFsc2UsCQkJCS8ve1VQREFU
658
- RUR9IEJvb2xlYW46IFJlcXVpcmVzIGpxdWVyeS5tb3VzZXdoZWVsLmpzICho
659
- dHRwczovL2dpdGh1Yi5jb20vYnJhbmRvbmFhcm9uL2pxdWVyeS1tb3VzZXdo
660
- ZWVsKSAtIEFsbG93cyBzbGlkZXIgbmF2aWdhdGluZyB2aWEgbW91c2V3aGVl
661
- bA0KCQkJCQkJCQkJCXNtb290aEhlaWdodDogdHJ1ZSwNCgkJCQkJCQkJCQly
662
- YW5kb21pemU6IGZhbHNlLAkJCQkvL0Jvb2xlYW46IFJhbmRvbWl6ZSBzbGlk
663
- ZSBvcmRlcg0KCQkJCQkJCQkJCXNsaWRlVG9TdGFydDogMCwJCQkJLy9JbnRl
664
- Z2VyOiBUaGUgc2xpZGUgdGhhdCB0aGUgc2xpZGVyIHNob3VsZCBzdGFydCBv
665
- bi4gQXJyYXkgbm90YXRpb24gKDAgPSBmaXJzdCBzbGlkZSkNCgkJCQkJCQkJ
666
- CQlhbmltYXRpb25Mb29wOiB0cnVlLAkJCS8vQm9vbGVhbjogU2hvdWxkIHRo
667
- ZSBhbmltYXRpb24gbG9vcD8gSWYgZmFsc2UsIGRpcmVjdGlvbk5hdiB3aWxs
668
- IHJlY2VpdmVkICJkaXNhYmxlIiBjbGFzc2VzIGF0IGVpdGhlciBlbmQNCgkJ
669
- CQkJCQkJCQlwYXVzZU9uQWN0aW9uOiB0cnVlLAkJCS8vQm9vbGVhbjogUGF1
670
- c2UgdGhlIHNsaWRlc2hvdyB3aGVuIGludGVyYWN0aW5nIHdpdGggY29udHJv
671
- bCBlbGVtZW50cywgaGlnaGx5IHJlY29tbWVuZGVkLg0KCQkJCQkJCQkJCXBh
672
- dXNlT25Ib3ZlcjogZmFsc2UsCQkJLy9Cb29sZWFuOiBQYXVzZSB0aGUgc2xp
673
- ZGVzaG93IHdoZW4gaG92ZXJpbmcgb3ZlciBzbGlkZXIsIHRoZW4gcmVzdW1l
674
- IHdoZW4gbm8gbG9uZ2VyIGhvdmVyaW5nDQoJCQkJCQkJCQkJc3RhcnQ6IHNs
675
- aWRlQ29tcGxldGV6bl9ub3JtYWxfZmxleCwNCgkJCQkJCQkJCQlhZnRlcjog
676
- c2xpZGVDb21wbGV0ZXpuX25vcm1hbF9mbGV4DQoJCQkJCQkJCQl9KTsNCgkJ
677
- CQkJCQkJfSk7DQoJCQkJCQkJfSkoalF1ZXJ5KTsNCgkJCQkJCTwvc2NyaXB0
678
- PjwvYm9keT4NCjwvaHRtbD4=
403
+ YmFubmVyMi0xMTcweDIyMy5qcGciIHdpZHRoPSIxMTcwIiBoZWlnaHQ9IjIy
404
+ MyIgLz48L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgPC91bD4NCiAg
405
+ ICAgICAgICAgICAgICAgICAgPC9kaXY+PCEtLSBlbmQgI2ZsZXhzbGlkZXIg
406
+ LS0+DQoNCgkJCTwvZGl2Pg0KCQkJDQoJCQk8ZGl2IGNsYXNzPSJ6bl9oZWFk
407
+ ZXJfYm90dG9tX3N0eWxlIj48L2Rpdj48IS0tIGhlYWRlciBib3R0b20gc3R5
408
+ bGUgLS0+DQoJCQkNCiAgICAgICAgPC9kaXY+PCEtLSBlbmQgc2xpZGVzaG93
409
+ IC0tPg0KCQo8c2VjdGlvbiBpZD0iY29udGVudCI+PGRpdiBjbGFzcz0iY29u
410
+ dGFpbmVyIj48ZGl2IGNsYXNzPSJtYWluYm9keSB6bl9oYXNfc2lkZWJhciI+
411
+ PGRpdiBjbGFzcz0icm93ICI+PGRpdiBjbGFzcz0ic3Bhbjkgem5fY29udGVu
412
+ dCI+PGgxIGNsYXNzPSJwYWdlLXRpdGxlIj5DYW1iaW88L2gxPjxkaXYgY2xh
413
+ c3M9InNwYW40IHpuX2NvbnRlbnQiPgo8cD48YSBocmVmPSJodHRwOi8vd3d3
414
+ LmNva2N1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvQ2FtYmlvLUV4Y2hhbmdl
415
+ LnBuZyIgY2xhc3M9ImhvdmVyQm9yZGVyIGFsaWdubm9uZSIgcmVsPSJwcmV0
416
+ dHlQaG90b1tpZnJhbWVzXSI+PGltZyBjbGFzcz0iIHNpemUtbWVkaXVtIHdw
417
+ LWltYWdlLTMwOTEiIGFsdD0iQ2FtYmlvIEV4Y2hhbmdlIiBzcmM9Imh0dHA6
418
+ Ly93d3cuY29rY3UuY29tL3dwLWNvbnRlbnQvdXBsb2Fkcy9DYW1iaW8tRXhj
419
+ aGFuZ2UtMzAweDYyLnBuZyIgd2lkdGg9IjMwMCIgaGVpZ2h0PSI2MiIgLz48
420
+ L2E+PC9wPgo8cD4mbmJzcDs8L3A+CjxwPkNPSyBvZmZlcnMgY2FtYmlvIHNl
421
+ cnZpY2VzIGF0IGFsbCA1IGxvY2F0aW9uczsgQ3Jvc3Nyb2FkcywgSGFsZi1X
422
+ YXktVHJlZSwgUG9ydG1vcmUsIE1hbmRldmlsbGUgYW5kIE1vbnRlZ28gQmF5
423
+ LiBXZSBvZmZlciBjb21wZXRpdGl2ZSByYXRlcywgZmFzdCBhbmQgZWZmaWNp
424
+ ZW50IHNlcnZpY2UuIE91ciBjYW1iaW8gc2VydmljZXMgaXMgYXZhaWxhYmxl
425
+ IHRvIGJvdGggbWVtYmVycyBhbmQgbm9uLW1lbWJlcnMuPC9wPgo8cD5Gb3Ig
426
+ bW9yZSBpbmZvcm1hdGlvbiwgY29udGFjdCA8c3Ryb25nPlBhdHJpY2UgVGhv
427
+ bWFzPC9zdHJvbmc+LCBvdXIgRm9yZWlnbiBFeGNoYW5nZSBUcmFkZXIsIGVt
428
+ YWlsIDxhIGhyZWY9Im1haWx0bzpwdGhvbWFzQGNva2N1LmNvbSIgdGFyZ2V0
429
+ PSJfYmxhbmsiPnB0aG9tYXNAY29rY3UuY29tPC9hPiBvciBkaWFsIDEtODc2
430
+ LTk2MC1JQ0FOICg5NjAtNDIyNiksIGV4dGVuc2lvbnMgMTU0OSBvciAxNTQ4
431
+ LjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InNwYW40IHpuX2NvbnRlbnQiPgo8
432
+ aDQgY2xhc3M9Im1fdGl0bGUiPkZvcmVpZ24gRXhjaGFuZ2UgcmF0ZXM8L2g0
433
+ Pgo8dGFibGUgY2xhc3M9InRhYmxlIHRhYmxlLWJvcmRlcmVkIj4KPHRoZWFk
434
+ Pgo8dHI+Cjx0aCBjb2xzcGFuPSIzIj5CdXlpbmc8L3RoPgo8dGggY29sc3Bh
435
+ bj0iMiI+U2VsbGluZzwvdGg+CjwvdHI+CjwvdGhlYWQ+Cjx0Ym9keSBjbGFz
436
+ cz0idGFibGUtaG92ZXIiPgo8dHI+Cjx0aD48L3RoPgo8dGg+Q2FzaDwvdGg+
437
+ Cjx0aD5DaGVxdWVzIC8gV2lyZTwvdGg+Cjx0aD5DYXNoPC90aD4KPHRoPkNo
438
+ ZXF1ZXMgLyBXaXJlPC90aD4KPC90cj4KPHRyPgo8dGQ+PHN0cm9uZz5VU0Q8
439
+ L3N0cm9uZz48L3RkPgo8dGQ+MTA2LjQ1PC90ZD4KPHRkPjEwNC4yMDwvdGQ+
440
+ Cjx0ZD4xMDguODU8L3RkPgo8dGQ+MTA5LjQwPC90ZD4KPC90cj4KPHRyPgo8
441
+ dGQ+PHN0cm9uZz5DQUQ8L3N0cm9uZz48L3RkPgo8dGQ+OTMuMTU8L3RkPgo8
442
+ dGQ+OTEuOTA8L3RkPgo8dGQ+OTcuMDA8L3RkPgo8dGQ+OTguMzU8L3RkPgo8
443
+ L3RyPgo8dHI+Cjx0ZD48c3Ryb25nPkdCUDwvc3Ryb25nPjwvdGQ+Cjx0ZD4x
444
+ NzUuMTA8L3RkPgo8dGQ+MTYyLjAwPC90ZD4KPHRkPjE4MC4xMDwvdGQ+Cjx0
445
+ ZD4xODEuNDA8L3RkPgo8L3RyPgo8dHI+Cjx0ZD48c3Ryb25nPkNJPC9zdHJv
446
+ bmc+PC90ZD4KPHRkPjExNi4zMDwvdGQ+Cjx0ZD4xMDAuMDA8L3RkPgo8dGQ+
447
+ MTIzLjQwPC90ZD4KPHRkPjEyMi4yNTwvdGQ+CjwvdHI+Cjx0cj4KPHRkPjxz
448
+ dHJvbmc+RXVybzwvc3Ryb25nPjwvdGQ+Cjx0ZD4xNDMuMDA8L3RkPgo8dGQ+
449
+ MTMwLjIwPC90ZD4KPHRkPjE0Ny4wMDwvdGQ+Cjx0ZD4xNDguMDA8L3RkPgo8
450
+ L3RyPgo8L3Rib2R5Pgo8L3RhYmxlPgo8cD5FZmZlY3RpdmU6IE1hcmNoIDE0
451
+ LCAyMDE0PC9wPgo8L2Rpdj4KPC9kaXY+PGRpdiBjbGFzcz0ic3BhbjMiPjxk
452
+ aXYgaWQ9InNpZGViYXIiIGNsYXNzPSJzaWRlYmFyIHNpZGViYXItcmlnaHQg
453
+ Ij48ZGl2IGlkPSJuYXZfbWVudS01IiBjbGFzcz0id2lkZ2V0IHdpZGdldF9u
454
+ YXZfbWVudSI+PGRpdiBjbGFzcz0ibWVudS1zZXJ2aWNlcy1tZW51LWNvbnRh
455
+ aW5lciI+PHVsIGlkPSJtZW51LXNlcnZpY2VzLW1lbnUiIGNsYXNzPSJtZW51
456
+ Ij48bGkgaWQ9Im1lbnUtaXRlbS0yNDAwIiBjbGFzcz0ibWVudS1pdGVtIG1l
457
+ bnUtaXRlbS10eXBlLXBvc3RfdHlwZSBtZW51LWl0ZW0tb2JqZWN0LXBhZ2Ug
458
+ Y3VycmVudC1wYWdlLWFuY2VzdG9yIGN1cnJlbnQtcGFnZS1wYXJlbnQgbWVu
459
+ dS1pdGVtLTI0MDAiPjxhIGhyZWY9Imh0dHA6Ly93d3cuY29rY3UuY29tL290
460
+ aGVyc2VydmljZXMvIj5PdGhlciBTZXJ2aWNlczwvYT48L2xpPgo8bGkgaWQ9
461
+ Im1lbnUtaXRlbS0yNDAxIiBjbGFzcz0ibWVudS1pdGVtIG1lbnUtaXRlbS10
462
+ eXBlLXBvc3RfdHlwZSBtZW51LWl0ZW0tb2JqZWN0LXBhZ2UgbWVudS1pdGVt
463
+ LTI0MDEiPjxhIGhyZWY9Imh0dHA6Ly93d3cuY29rY3UuY29tL290aGVyc2Vy
464
+ dmljZXMvYXRtLyI+QWNjZXNzIFBsdXMgQVRNIENhcmQ8L2E+PC9saT4KPGxp
465
+ IGlkPSJtZW51LWl0ZW0tMjQwMiIgY2xhc3M9Im1lbnUtaXRlbSBtZW51LWl0
466
+ ZW0tdHlwZS1wb3N0X3R5cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIG1lbnUt
467
+ aXRlbS0yNDAyIj48YSBocmVmPSJodHRwOi8vd3d3LmNva2N1LmNvbS9vdGhl
468
+ cnNlcnZpY2VzL2hlYWx0aC8iPkhlYWx0aCBJbnN1cmFuY2U8L2E+PC9saT4K
469
+ PGxpIGlkPSJtZW51LWl0ZW0tMjQwMyIgY2xhc3M9Im1lbnUtaXRlbSBtZW51
470
+ LWl0ZW0tdHlwZS1wb3N0X3R5cGUgbWVudS1pdGVtLW9iamVjdC1wYWdlIGN1
471
+ cnJlbnQtbWVudS1pdGVtIHBhZ2VfaXRlbSBwYWdlLWl0ZW0tMTcwMCBjdXJy
472
+ ZW50X3BhZ2VfaXRlbSBtZW51LWl0ZW0tMjQwMyBhY3RpdmUiPjxhIGhyZWY9
473
+ Imh0dHA6Ly93d3cuY29rY3UuY29tL290aGVyc2VydmljZXMvY2FtYmlvLyI+
474
+ Q2FtYmlvPC9hPjwvbGk+CjxsaSBpZD0ibWVudS1pdGVtLTI0MDQiIGNsYXNz
475
+ PSJtZW51LWl0ZW0gbWVudS1pdGVtLXR5cGUtcG9zdF90eXBlIG1lbnUtaXRl
476
+ bS1vYmplY3QtcGFnZSBtZW51LWl0ZW0tMjQwNCI+PGEgaHJlZj0iaHR0cDov
477
+ L3d3dy5jb2tjdS5jb20vb3RoZXJzZXJ2aWNlcy9jb2stcmVtaXR0YW5jZS1z
478
+ ZXJ2aWNlcy8iPkNPSyBSZW1pdHRhbmNlIFNlcnZpY2VzPC9hPjwvbGk+Cjxs
479
+ aSBpZD0ibWVudS1pdGVtLTI0MDUiIGNsYXNzPSJtZW51LWl0ZW0gbWVudS1p
480
+ dGVtLXR5cGUtcG9zdF90eXBlIG1lbnUtaXRlbS1vYmplY3QtcGFnZSBtZW51
481
+ LWl0ZW0tMjQwNSI+PGEgaHJlZj0iaHR0cDovL3d3dy5jb2tjdS5jb20vb3Ro
482
+ ZXJzZXJ2aWNlcy9maXAvIj5GYW1pbHkgSW5kZW1uaXR5IFBsYW48L2E+PC9s
483
+ aT4KPC91bD48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48
484
+ L2Rpdj48L3NlY3Rpb24+PCEtLSBlbmQgI2NvbnRlbnQgLS0+CQkJCQoJDQoJ
485
+ PGZvb3RlciBpZD0iZm9vdGVyIj4NCgkJPGRpdiBjbGFzcz0iY29udGFpbmVy
486
+ Ij4NCg0KCQkJPGRpdiBjbGFzcz0icm93Ij48ZGl2IGNsYXNzPSJzcGFuMyI+
487
+ PC9kaXY+PGRpdiBjbGFzcz0ic3BhbjMiPjwvZGl2PjxkaXYgY2xhc3M9InNw
488
+ YW4zIj48L2Rpdj48ZGl2IGNsYXNzPSJzcGFuMyI+PC9kaXY+PC9kaXY+PCEt
489
+ LSBlbmQgcm93IC0tPgkNCgkJCQ0KCQkJPGRpdiBjbGFzcz0icm93Ij4NCgkJ
490
+ CQk8ZGl2IGNsYXNzPSJzcGFuMTIiPg0KCQkJCQk8ZGl2IGNsYXNzPSJib3R0
491
+ b20gZml4Y2xlYXIiPg0KCQkJCQkNCgkJCQkJPHVsIGNsYXNzPSJzb2NpYWwt
492
+ aWNvbnMgY29sb3JlZCBmaXhjbGVhciI+PGxpIGNsYXNzPSJ0aXRsZSI+R0VU
493
+ IFNPQ0lBTDwvbGk+PGxpIGNsYXNzPSJzb2NpYWwtZmFjZWJvb2siPjxhIGhy
494
+ ZWY9Imh0dHBzOi8vd3d3LmZhY2Vib29rLmNvbS9wYWdlcy9DT0stU29kYWxp
495
+ dHktQ28tb3BlcmF0aXZlLUNyZWRpdC1Vbmlvbi8zMzYzNzQ4MjQzNjUiIHRh
496
+ cmdldD0iX2JsYW5rIj5GYWNlYm9vazwvYT48L2xpPjxsaSBjbGFzcz0ic29j
497
+ aWFsLXR3aXR0ZXIiPjxhIGhyZWY9IiMiIHRhcmdldD0iX2JsYW5rIj5Ud2l0
498
+ dGVyPC9hPjwvbGk+PC91bD4JCQkJCQ0KCQkJCQkJCQkJCQkNCgkJCQkJCTxk
499
+ aXYgY2xhc3M9ImNvcHlyaWdodCI+DQoJCQkJCQkJDQoJCQkJCQkJDQoJCQkJ
500
+ CQkJPGEgaHJlZj0iaHR0cDovL3d3dy5jb2tjdS5jb20iPjxpbWcgc3JjPSJo
501
+ dHRwOi8vd3d3LmNva2N1LmNvbS93cC1jb250ZW50L3VwbG9hZHMvZm9vdGVy
502
+ bG9nbzIucG5nIiBhbHQ9IiIgLz48L2E+PHA+wqkgQ09LIFNvZGFsaXR5IENv
503
+ LW9wZXJhdGl2ZSBDcmVkaXQgVW5pb24gTHRkLiBBbGwgUmlnaHRzIFJlc2Vy
504
+ dmVkLjxici8+DQpEZXNpZ25lZCAmIERldmVsb3BlZCBieSA8YSBocmVmPSJo
505
+ dHRwOi8vd3d3LnppcHRlY2hub2xvZ2llcy5jb20vIj5aaXBUZWNobm9sb2dp
506
+ ZXMuY29tPC9hPiAtIDxhIGhyZWY9Imh0dHA6Ly93d3cuY29rY3UuY29tL3By
507
+ aXZhY3ktcG9saWN5LyI+UHJpdmFjeTwvYT4gLSA8YSBocmVmPSJodHRwOi8v
508
+ d3d3LmNva2N1LmNvbS90ZXJtcy1vZi11c2UvIj5UZXJtcyBvZiBVc2U8L2E+
509
+ IC0gPGEgaHJlZj0iaHR0cDovL3d3dy53b2NjdS5vcmcvIj5XT0NDVTwvYT48
510
+ L3A+CQkJCQkJCQ0KCQkJCQkJCQ0KCQkJCQkJPC9kaXY+PCEtLSBlbmQgY29w
511
+ eXJpZ2h0IC0tPg0KCQkJCQkJCQ0KCQkJCQkJCQkJCQkNCg0KCQkJCQk8L2Rp
512
+ dj48IS0tIGVuZCBib3R0b20gLS0+DQoJCQkJPC9kaXY+DQoJCQk8L2Rpdj48
513
+ IS0tIGVuZCByb3cgLS0+DQoJCQkNCgkJPC9kaXY+DQoJPC9mb290ZXI+DQoJ
514
+ ICAgIDwvZGl2PjwhLS0gZW5kIHBhZ2Vfd3JhcHBlciAtLT4NCgkNCiAgICA8
515
+ YSBocmVmPSIjIiBpZD0idG90b3AiPlRPUDwvYT4gDQo8c2NyaXB0IHR5cGU9
516
+ InRleHQvamF2YXNjcmlwdCI+DQoNCiAgdmFyIF9nYXEgPSBfZ2FxIHx8IFtd
517
+ Ow0KICBfZ2FxLnB1c2goWydfc2V0QWNjb3VudCcsICdVQS00MzE0MjAyMC0x
518
+ J10pOw0KICBfZ2FxLnB1c2goWydfdHJhY2tQYWdldmlldyddKTsNCg0KICAo
519
+ ZnVuY3Rpb24oKSB7DQogICAgdmFyIGdhID0gZG9jdW1lbnQuY3JlYXRlRWxl
520
+ bWVudCgnc2NyaXB0Jyk7IGdhLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0Jzsg
521
+ Z2EuYXN5bmMgPSB0cnVlOw0KICAgIGdhLnNyYyA9ICgnaHR0cHM6JyA9PSBk
522
+ b2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCA/ICdodHRwczovLycgOiAnaHR0
523
+ cDovLycpICsgJ3N0YXRzLmcuZG91YmxlY2xpY2submV0L2RjLmpzJzsNCiAg
524
+ ICB2YXIgcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3Jp
525
+ cHQnKVswXTsgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnYSwgcyk7DQog
526
+ IH0pKCk7DQoNCjwvc2NyaXB0Pg0KDQoNCg0KDQo8c2NyaXB0IHR5cGU9InRl
527
+ eHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vY29kZS5qcXVlcnkuY29tL2px
528
+ dWVyeS1sYXRlc3QubWluLmpzIj48L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0i
529
+ dGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9jZG4uanNkZWxpdnIubmV0
530
+ L2pxdWVyeS5jb29raWUvMS4zLjEvanF1ZXJ5LmNvb2tpZS5qcyI+PC9zY3Jp
531
+ cHQ+DQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRw
532
+ Oi8vd3d3LmNva2N1LmNvbS93cC1jb250ZW50L3RoZW1lcy9rYWxseWFzL2Fk
533
+ ZG9ucy9wcmV0dHlwaG90by9qcXVlcnkucHJldHR5UGhvdG8uanMiPjwvc2Ny
534
+ aXB0Pg0KDQoNCjxzY3JpcHQgPg0KDQpjb25zb2xlLmRlYnVnKCQuY29va2ll
535
+ KCJzdXJ2ZXkiICkpOw0KDQppZigkLmNvb2tpZSgnc3VydmV5JykgIT0gJ29s
536
+ ZCcpew0KCSQuY29va2llKCJzdXJ2ZXkiLCAibmV3IiApOw0KCWNvbnNvbGUu
537
+ ZGVidWcoJC5jb29raWUoInN1cnZleSIgKSk7fQ0KCQ0KaWYoJC5jb29raWUo
538
+ J3N1cnZleScpID09ICduZXcnICYmIGRvY3VtZW50LlVSTCAhPSAnaHR0cDov
539
+ L3d3dy5jb2tjdS5jb20vY29udGFjdC11cy9zdXJ2ZXkvJyl7DQoJDQoJCSQu
540
+ Zm4ucHJldHR5UGhvdG8oeyBzb2NpYWxfdG9vbHM6IGZhbHNlIH0pOw0KCQkk
541
+ LnByZXR0eVBob3RvLm9wZW4oJ2h0dHA6Ly93d3cuY29rY3UuY29tL3N1cnZl
542
+ eS5odG1sP2lmcmFtZT10cnVlJndpZHRoPTQwMiZoZWlnaHQ9OTQnLCAnJywg
543
+ JycpOw0KCQkNCgkJJC5jb29raWUoInN1cnZleSIsICJvbGQiICk7DQogfQ0K
544
+ PC9zY3JpcHQ+DQoNCjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBz
545
+ cmM9J2h0dHA6Ly9hamF4LmFzcG5ldGNkbi5jb20vYWpheC9qcXVlcnkudmFs
546
+ aWRhdGUvMS4xMS4xL2pxdWVyeS52YWxpZGF0ZS5qcyc+PC9zY3JpcHQ+Cjxz
547
+ Y3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly93d3cu
548
+ Y29rY3UuY29tL3dwLWNvbnRlbnQvcGx1Z2lucy93cGdmb3JtL2pzL2pxdWVy
549
+ eS5jb2x1bW5pemVyLmpzJz48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSd0ZXh0
550
+ L2phdmFzY3JpcHQnPgovKiA8IVtDREFUQVsgKi8KdmFyIHdwZ2Zvcm1fc2Ny
551
+ aXB0X3ZhcnMgPSB7InJlcXVpcmVkIjoiVGhpcyBmaWVsZCBpcyByZXF1aXJl
552
+ ZC4iLCJyZW1vdGUiOiJQbGVhc2UgZml4IHRoaXMgZmllbGQuIiwiZW1haWwi
553
+ OiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLiIsInVybCI6
554
+ IlBsZWFzZSBlbnRlciBhIHZhbGlkIFVSTC4iLCJkYXRlIjoiUGxlYXNlIGVu
555
+ dGVyIGEgdmFsaWQgZGF0ZS4iLCJkYXRlSVNPIjoiUGxlYXNlIGVudGVyIGEg
556
+ dmFsaWQgZGF0ZSAoSVNPKS4iLCJudW1iZXIiOiJQbGVhc2UgZW50ZXIgYSB2
557
+ YWxpZCBudW1iZXIuIiwiZGlnaXRzIjoiUGxlYXNlIGVudGVyIG9ubHkgZGln
558
+ aXRzLiIsImNyZWRpdGNhcmQiOiJQbGVhc2UgZW50ZXIgYSB2YWxpZCBjcmVk
559
+ aXQgY2FyZCBudW1iZXIuIiwiZXF1YWxUbyI6IlBsZWFzZSBlbnRlciB0aGUg
560
+ c2FtZSB2YWx1ZSBhZ2Fpbi4sIiwiYWNjZXB0IjoiUGxlYXNlIGVudGVyIGEg
561
+ dmFsdWUgd2l0aCBhIHZhbGlkIGV4dGVuc2lvbi4iLCJtYXhsZW5ndGgiOiJQ
562
+ bGVhc2UgZW50ZXIgbm8gbW9yZSB0aGFuIHswfSBjaGFyYWN0ZXJzLiIsIm1p
563
+ bmxlbmd0aCI6IlBsZWFzZSBlbnRlciBhdCBsZWFzdCB7MH0gY2hhcmFjdGVy
564
+ cy4iLCJyYW5nZWxlbmd0aCI6IlBsZWFzZSBlbnRlciBhIHZhbHVlIGJldHdl
565
+ ZW4gezB9IGFuZCB7MX0gY2hhcmFjdGVycyBsb25nLiIsInJhbmdlIjoiUGxl
566
+ YXNlIGVudGVyIGEgdmFsdWUgYmV0d2VlbiB7MH0gYW5kIHsxfS4iLCJtYXgi
567
+ OiJQbGVhc2UgZW50ZXIgYSB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8g
568
+ ezB9LiIsIm1pbiI6IlBsZWFzZSBlbnRlciBhIHZhbHVlIGdyZWF0ZXIgdGhh
569
+ biBvciBlcXVhbCB0byB7MH0uIn07Ci8qIF1dPiAqLwo8L3NjcmlwdD4KPHNj
570
+ cmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnIHNyYz0naHR0cDovL3d3dy5j
571
+ b2tjdS5jb20vd3AtY29udGVudC9wbHVnaW5zL3dwZ2Zvcm0vanMvd3BnZm9y
572
+ bS5qcyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0
573
+ JyBzcmM9J2h0dHA6Ly93d3cuY29rY3UuY29tL3dwLWNvbnRlbnQvcGx1Z2lu
574
+ cy9jb250YWN0LWZvcm0tNy9pbmNsdWRlcy9qcy9qcXVlcnkuZm9ybS5taW4u
575
+ anMnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCc+
576
+ Ci8qIDwhW0NEQVRBWyAqLwp2YXIgX3dwY2Y3ID0geyJsb2FkZXJVcmwiOiJo
577
+ dHRwOlwvXC93d3cuY29rY3UuY29tXC93cC1jb250ZW50XC9wbHVnaW5zXC9j
578
+ b250YWN0LWZvcm0tN1wvaW1hZ2VzXC9hamF4LWxvYWRlci5naWYiLCJzZW5k
579
+ aW5nIjoiU2VuZGluZyAuLi4ifTsKLyogXV0+ICovCjwvc2NyaXB0Pgo8c2Ny
580
+ aXB0IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vd3d3LmNv
581
+ a2N1LmNvbS93cC1jb250ZW50L3BsdWdpbnMvY29udGFjdC1mb3JtLTcvaW5j
582
+ bHVkZXMvanMvc2NyaXB0cy5qcyc+PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0n
583
+ dGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly93d3cuY29rY3UuY29tL3dw
584
+ LWNvbnRlbnQvdGhlbWVzL2thbGx5YXMvc2xpZGVycy9mbGV4X3NsaWRlci9q
585
+ cy9qcXVlcnkuZmxleHNsaWRlci1taW4uanMnPjwvc2NyaXB0Pgo8c2NyaXB0
586
+ IHR5cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vd3d3LmNva2N1
587
+ LmNvbS93cC1jb250ZW50L3RoZW1lcy9rYWxseWFzL2pzL2Jvb3RzdHJhcC5t
588
+ aW4uanMnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3RleHQvamF2YXNjcmlw
589
+ dCcgc3JjPSdodHRwOi8vd3d3LmNva2N1LmNvbS93cC1jb250ZW50L3RoZW1l
590
+ cy9rYWxseWFzL2pzL3BsdWdpbnMuanMnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5
591
+ cGU9J3RleHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vd3d3LmNva2N1LmNv
592
+ bS93cC1jb250ZW50L3RoZW1lcy9rYWxseWFzL2FkZG9ucy9zdXBlcmZpc2hf
593
+ cmVzcG9uc2l2ZS9zdXBlcmZpc2hfbWVudS5qcyc+PC9zY3JpcHQ+CjxzY3Jp
594
+ cHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9J2h0dHA6Ly93d3cuY29r
595
+ Y3UuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2thbGx5YXMvYWRkb25zL3ByZXR0
596
+ eXBob3RvL2pxdWVyeS5wcmV0dHlQaG90by5qcyc+PC9zY3JpcHQ+CjxzY3Jp
597
+ cHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0Jz4KLyogPCFbQ0RBVEFbICovCnZh
598
+ ciB6bl9kb19sb2dpbiA9IHsiYWpheHVybCI6Imh0dHA6XC9cL3d3dy5jb2tj
599
+ dS5jb21cL3dwLWFkbWluXC9hZG1pbi1hamF4LnBocCJ9OwovKiBdXT4gKi8K
600
+ PC9zY3JpcHQ+CjxzY3JpcHQgdHlwZT0ndGV4dC9qYXZhc2NyaXB0JyBzcmM9
601
+ J2h0dHA6Ly93d3cuY29rY3UuY29tL3dwLWNvbnRlbnQvdGhlbWVzL2thbGx5
602
+ YXMvanMvem5zY3JpcHQuanMnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9J3Rl
603
+ eHQvamF2YXNjcmlwdCcgc3JjPSdodHRwOi8vd3d3LmNva2N1LmNvbS93cC1j
604
+ b250ZW50L3BsdWdpbnMvY2xpY2tkZXNrLWxpdmUtc3VwcG9ydC1jaGF0LXBs
605
+ dWdpbi9qcy93aWRnZXQuanMnPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRl
606
+ eHQvamF2YXNjcmlwdCI+CgkJCQkJCShmdW5jdGlvbigkKXsgCgkJCQkJCQkk
607
+ KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewoJCQkJCQkJCS8qIEFjdGl2
608
+ YXRlIFN1cGVyZmlzaCBNZW51ICovCgkJCQkJCQkJdmFyIHNmRGVsYXkgPSA2
609
+ MDA7CgkJCQkJCQkJaWYoJCgnaHRtbCcpLmhhc0NsYXNzKCdpc2llJykpCgkJ
610
+ CQkJCQkJCXNmRGVsYXkgPSAzMDA7CgkJCQkJCQkJJCgnI21haW5fbWVudSA+
611
+ IHVsJykKCQkJCQkJCQkuc3VwZXJzdWJzKHsgCgkJCQkJCQkJCW1pbldpZHRo
612
+ OiAgICAxMiwgICAvLyBtaW5pbXVtIHdpZHRoIG9mIHN1Yi1tZW51cyBpbiBl
613
+ bSB1bml0cyAKCQkJCQkJCQkJbWF4V2lkdGg6ICAgIDI3LCAgIC8vIG1heGlt
614
+ dW0gd2lkdGggb2Ygc3ViLW1lbnVzIGluIGVtIHVuaXRzIAoJCQkJCQkJCQll
615
+ eHRyYVdpZHRoOiAgMSAgICAgLy8gZXh0cmEgd2lkdGggY2FuIGVuc3VyZSBs
616
+ aW5lcyBkb24ndCBzb21ldGltZXMgdHVybiBvdmVyIAoJCQkJCQkJCX0pLnN1
617
+ cGVyZmlzaCh7CgkJCQkJCQkJCWRlbGF5OnNmRGVsYXksCgkJCQkJCQkJCWRy
618
+ b3BTaGFkb3dzOmZhbHNlLAoJCQkJCQkJCQlhdXRvQXJyb3dzOnRydWUsCgkJ
619
+ CQkJCQkJCXNwZWVkOjMwMAoJCQkJCQkJCX0pOwoJCQkJCQkJfSk7CgkJCQkJ
620
+ CQkKCQkJCQkJCQoJCQkJCQkJJCh3aW5kb3cpLnJlc2l6ZShmdW5jdGlvbigp
621
+ IHsKCQkJCQkJCQkkKCcjbWFpbl9tZW51ID4gdWwnKQoJCQkJCQkJCS5zdXBl
622
+ cnN1YnMoeyAKCQkJCQkJCQkJbWluV2lkdGg6ICAgIDEyLCAgIC8vIG1pbmlt
623
+ dW0gd2lkdGggb2Ygc3ViLW1lbnVzIGluIGVtIHVuaXRzIAoJCQkJCQkJCQlt
624
+ YXhXaWR0aDogICAgMjcsICAgLy8gbWF4aW11bSB3aWR0aCBvZiBzdWItbWVu
625
+ dXMgaW4gZW0gdW5pdHMgCgkJCQkJCQkJCWV4dHJhV2lkdGg6ICAxICAgICAv
626
+ LyBleHRyYSB3aWR0aCBjYW4gZW5zdXJlIGxpbmVzIGRvbid0IHNvbWV0aW1l
627
+ cyB0dXJuIG92ZXIgCgkJCQkJCQkJfSk7CgkJCQkJCQl9KTsKCQkJCQkJCQoJ
628
+ CQkJCQl9KShqUXVlcnkpOwoJCQkJCQkNCgkJCQkJCQkoZnVuY3Rpb24oJCkg
629
+ ew0KCQkJCQkJCQkkKHdpbmRvdykubG9hZChmdW5jdGlvbigpew0KCQkJCQkJ
630
+ CQkNCgkJCQkJCQkJCWZ1bmN0aW9uIHNsaWRlQ29tcGxldGV6bl9ub3JtYWxf
631
+ ZmxleChhcmdzKSB7DQoJCQkJCQkJCQkJdmFyIGNhcHRpb24gPSAkKGFyZ3Mu
632
+ Y29udGFpbmVyKS5maW5kKCcuZmxleC1jYXB0aW9uJykuYXR0cignc3R5bGUn
633
+ LCAnJyksDQoJCQkJCQkJCQkJCXRoaXNDYXB0aW9uID0gJCgnLmZsZXhzbGlk
634
+ ZXIuem5fbm9ybWFsX2ZsZXggLnNsaWRlcyA+IGxpLmZsZXgtYWN0aXZlLXNs
635
+ aWRlJykuZmluZCgnLmZsZXgtY2FwdGlvbicpOw0KCQkJCQkJCQkJCXRoaXND
636
+ YXB0aW9uLmFuaW1hdGUoe2xlZnQ6MjAsIG9wYWNpdHk6MX0sIDUwMCwgJ2Vh
637
+ c2VPdXRRdWludCcpOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkNCgkJCQkJCQkJ
638
+ CWlmICggalF1ZXJ5KCcuZmxleHNsaWRlci56bl9ub3JtYWxfZmxleCcpLmhh
639
+ c0NsYXNzKCd6bl9oYXNfdGh1bWJzJykgKSB7DQoJCQkJCQkJCQkJdGh1bWJz
640
+ ID0gJ3RodW1ibmFpbHMnOw0KCQkJCQkJCQkJfQ0KCQkJCQkJCQkJZWxzZSB7
641
+ DQoJCQkJCQkJCQkJdGh1bWJzID0gdHJ1ZTsNCgkJCQkJCQkJCX0NCgkJCQkJ
642
+ CQkJCQ0KCQkJCQkJCQkJdHJhbnNpdGlvbiA9IGpRdWVyeSgiLmZsZXhzbGlk
643
+ ZXIuem5fbm9ybWFsX2ZsZXgiKS5hdHRyKCdkYXRhLXRyYW5zaXRpb24nKTsN
644
+ CgkJCQkJCQkJCQ0KCQkJCQkJCQkJJCgiLmZsZXhzbGlkZXIuem5fbm9ybWFs
645
+ X2ZsZXgiKS5mbGV4c2xpZGVyKHsNCgkJCQkJCQkJCQlhbmltYXRpb246IHRy
646
+ YW5zaXRpb24sCQkJCS8vU3RyaW5nOiBTZWxlY3QgeW91ciBhbmltYXRpb24g
647
+ dHlwZSwgImZhZGUiIG9yICJzbGlkZSINCgkJCQkJCQkJCQlzbGlkZURpcmVj
648
+ dGlvbjogImhvcml6b250YWwiLAkvL1N0cmluZzogU2VsZWN0IHRoZSBzbGlk
649
+ aW5nIGRpcmVjdGlvbiwgImhvcml6b250YWwiIG9yICJ2ZXJ0aWNhbCINCgkJ
650
+ CQkJCQkJCQlzbGlkZXNob3c6IHRydWUsCQkJCS8vQm9vbGVhbjogQW5pbWF0
651
+ ZSBzbGlkZXIgYXV0b21hdGljYWxseQ0KCQkJCQkJCQkJCXNsaWRlc2hvd1Nw
652
+ ZWVkOiA3MDAwLAkJCS8vSW50ZWdlcjogU2V0IHRoZSBzcGVlZCBvZiB0aGUg
653
+ c2xpZGVzaG93IGN5Y2xpbmcsIGluIG1pbGxpc2Vjb25kcw0KCQkJCQkJCQkJ
654
+ CWFuaW1hdGlvbkR1cmF0aW9uOiA2MDAsCQkJLy9JbnRlZ2VyOiBTZXQgdGhl
655
+ IHNwZWVkIG9mIGFuaW1hdGlvbnMsIGluIG1pbGxpc2Vjb25kcw0KCQkJCQkJ
656
+ CQkJCWRpcmVjdGlvbk5hdjogdHJ1ZSwJCQkJLy9Cb29sZWFuOiBDcmVhdGUg
657
+ bmF2aWdhdGlvbiBmb3IgcHJldmlvdXMvbmV4dCBuYXZpZ2F0aW9uPyAodHJ1
658
+ ZS9mYWxzZSkNCgkJCQkJCQkJCQljb250cm9sTmF2OiB0aHVtYnMsCQkJCS8v
659
+ Qm9vbGVhbjogQ3JlYXRlIG5hdmlnYXRpb24gZm9yIHBhZ2luZyBjb250cm9s
660
+ IG9mIGVhY2ggY2xpZGU/IE5vdGU6IExlYXZlIHRydWUgZm9yIG1hbnVhbENv
661
+ bnRyb2xzIHVzYWdlDQoJCQkJCQkJCQkJa2V5Ym9hcmROYXY6IHRydWUsCQkJ
662
+ CS8vQm9vbGVhbjogQWxsb3cgc2xpZGVyIG5hdmlnYXRpbmcgdmlhIGtleWJv
663
+ YXJkIGxlZnQvcmlnaHQga2V5cw0KCQkJCQkJCQkJCW1vdXNld2hlZWw6IGZh
664
+ bHNlLAkJCQkvL3tVUERBVEVEfSBCb29sZWFuOiBSZXF1aXJlcyBqcXVlcnku
665
+ bW91c2V3aGVlbC5qcyAoaHR0cHM6Ly9naXRodWIuY29tL2JyYW5kb25hYXJv
666
+ bi9qcXVlcnktbW91c2V3aGVlbCkgLSBBbGxvd3Mgc2xpZGVyIG5hdmlnYXRp
667
+ bmcgdmlhIG1vdXNld2hlZWwNCgkJCQkJCQkJCQlzbW9vdGhIZWlnaHQ6IHRy
668
+ dWUsDQoJCQkJCQkJCQkJcmFuZG9taXplOiBmYWxzZSwJCQkJLy9Cb29sZWFu
669
+ OiBSYW5kb21pemUgc2xpZGUgb3JkZXINCgkJCQkJCQkJCQlzbGlkZVRvU3Rh
670
+ cnQ6IDAsCQkJCS8vSW50ZWdlcjogVGhlIHNsaWRlIHRoYXQgdGhlIHNsaWRl
671
+ ciBzaG91bGQgc3RhcnQgb24uIEFycmF5IG5vdGF0aW9uICgwID0gZmlyc3Qg
672
+ c2xpZGUpDQoJCQkJCQkJCQkJYW5pbWF0aW9uTG9vcDogdHJ1ZSwJCQkvL0Jv
673
+ b2xlYW46IFNob3VsZCB0aGUgYW5pbWF0aW9uIGxvb3A/IElmIGZhbHNlLCBk
674
+ aXJlY3Rpb25OYXYgd2lsbCByZWNlaXZlZCAiZGlzYWJsZSIgY2xhc3NlcyBh
675
+ dCBlaXRoZXIgZW5kDQoJCQkJCQkJCQkJcGF1c2VPbkFjdGlvbjogdHJ1ZSwJ
676
+ CQkvL0Jvb2xlYW46IFBhdXNlIHRoZSBzbGlkZXNob3cgd2hlbiBpbnRlcmFj
677
+ dGluZyB3aXRoIGNvbnRyb2wgZWxlbWVudHMsIGhpZ2hseSByZWNvbW1lbmRl
678
+ ZC4NCgkJCQkJCQkJCQlwYXVzZU9uSG92ZXI6IGZhbHNlLAkJCS8vQm9vbGVh
679
+ bjogUGF1c2UgdGhlIHNsaWRlc2hvdyB3aGVuIGhvdmVyaW5nIG92ZXIgc2xp
680
+ ZGVyLCB0aGVuIHJlc3VtZSB3aGVuIG5vIGxvbmdlciBob3ZlcmluZw0KCQkJ
681
+ CQkJCQkJCXN0YXJ0OiBzbGlkZUNvbXBsZXRlem5fbm9ybWFsX2ZsZXgsDQoJ
682
+ CQkJCQkJCQkJYWZ0ZXI6IHNsaWRlQ29tcGxldGV6bl9ub3JtYWxfZmxleA0K
683
+ CQkJCQkJCQkJfSk7DQoJCQkJCQkJCX0pOw0KCQkJCQkJCX0pKGpRdWVyeSk7
684
+ DQoJCQkJCQk8L3NjcmlwdD48L2JvZHk+DQo8L2h0bWw+
679
685
  http_version:
680
- recorded_at: Sat, 14 Dec 2013 18:14:15 GMT
686
+ recorded_at: Sun, 16 Mar 2014 11:37:34 GMT
681
687
  recorded_with: VCR 2.8.0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: forex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcel Morgan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-15 00:00:00.000000000 Z
11
+ date: 2014-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -194,10 +194,15 @@ files:
194
194
  - lib/forex/traders/jm/ncb.rb
195
195
  - lib/forex/traders/jm/sagicor.rb
196
196
  - lib/forex/version.rb
197
+ - lib/tasks/build_expected_rates.rake
198
+ - spec/rates/bns.yml
197
199
  - spec/rates/cok.yml
198
200
  - spec/rates/fgb.yml
199
201
  - spec/rates/fxtraders.yml
200
202
  - spec/rates/jmmb.yml
203
+ - spec/rates/jnbs.yml
204
+ - spec/rates/ncb.yml
205
+ - spec/rates/sagicor.yml
201
206
  - spec/rates/sagicore.yml
202
207
  - spec/spec_helper.rb
203
208
  - spec/support/vcr.rb
@@ -239,10 +244,14 @@ test_files:
239
244
  - features/step_definitions/tabular_rates_steps.rb
240
245
  - features/support/env.rb
241
246
  - features/tabular_rates.feature
247
+ - spec/rates/bns.yml
242
248
  - spec/rates/cok.yml
243
249
  - spec/rates/fgb.yml
244
250
  - spec/rates/fxtraders.yml
245
251
  - spec/rates/jmmb.yml
252
+ - spec/rates/jnbs.yml
253
+ - spec/rates/ncb.yml
254
+ - spec/rates/sagicor.yml
246
255
  - spec/rates/sagicore.yml
247
256
  - spec/spec_helper.rb
248
257
  - spec/support/vcr.rb