ruby2js 1.8.0 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/ruby2js.rb +1 -0
- data/lib/ruby2js/converter.rb +14 -2
- data/lib/ruby2js/converter/begin.rb +38 -0
- data/lib/ruby2js/converter/class.rb +3 -19
- data/lib/ruby2js/converter/defs.rb +22 -4
- data/lib/ruby2js/converter/dstr.rb +18 -1
- data/lib/ruby2js/filter/angularrb.rb +5 -1
- data/lib/ruby2js/version.rb +1 -1
- data/ruby2js.gemspec +5 -5
- metadata +58 -59
- checksums.yaml +0 -15
data/lib/ruby2js.rb
CHANGED
@@ -19,6 +19,7 @@ module Ruby2JS
|
|
19
19
|
def on_attr(node); on_send(node); end
|
20
20
|
def on_autoreturn(node); on_return(node); end
|
21
21
|
def on_constructor(node); on_def(node); end
|
22
|
+
def on_defp(node); on_defs(node); end
|
22
23
|
def on_method(node); on_send(node); end
|
23
24
|
def on_prop(node); on_array(node); end
|
24
25
|
def on_prototype(node); on_begin(node); end
|
data/lib/ruby2js/converter.rb
CHANGED
@@ -100,9 +100,21 @@ module Parser
|
|
100
100
|
class Node
|
101
101
|
def is_method?
|
102
102
|
return false if type == :attr
|
103
|
-
return true if children.length > 2
|
104
103
|
return true unless loc
|
105
|
-
|
104
|
+
|
105
|
+
if loc.respond_to? :selector
|
106
|
+
return true if children.length > 2
|
107
|
+
selector = loc.selector
|
108
|
+
elsif type == :defs
|
109
|
+
return true if children[1] =~ /[!?]$/
|
110
|
+
return true if children[2].children.length > 0
|
111
|
+
selector = loc.name
|
112
|
+
elsif type == :def
|
113
|
+
return true if children[0] =~ /[!?]$/
|
114
|
+
return true if children[1].children.length > 0
|
115
|
+
selector = loc.name
|
116
|
+
end
|
117
|
+
|
106
118
|
return true unless selector.source_buffer
|
107
119
|
selector.source_buffer.source[selector.end_pos] == '('
|
108
120
|
end
|
@@ -7,7 +7,45 @@ module Ruby2JS
|
|
7
7
|
|
8
8
|
handle :begin do |*statements|
|
9
9
|
state = @state
|
10
|
+
props = false
|
11
|
+
|
12
|
+
statements.map! do |statement|
|
13
|
+
case statement and statement.type
|
14
|
+
when :defs, :defp
|
15
|
+
props = true
|
16
|
+
@ast = statement
|
17
|
+
transform_defs(*statement.children)
|
18
|
+
when :prop
|
19
|
+
props = true
|
20
|
+
statement
|
21
|
+
else
|
22
|
+
statement
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
if props
|
27
|
+
combine_properties(statements) if props
|
28
|
+
statements.compact!
|
29
|
+
end
|
30
|
+
|
10
31
|
statements.map{ |statement| parse statement, state }.join(@sep)
|
11
32
|
end
|
33
|
+
|
34
|
+
def combine_properties(body)
|
35
|
+
for i in 0...body.length-1
|
36
|
+
next unless body[i] and body[i].type == :prop
|
37
|
+
for j in i+1...body.length
|
38
|
+
break unless body[j] and body[j].type == :prop
|
39
|
+
if body[i].children[0] == body[j].children[0]
|
40
|
+
merge = Hash[(body[i].children[1].to_a+body[j].children[1].to_a).
|
41
|
+
group_by {|name, value| name.to_s}.map {|name, values|
|
42
|
+
[name, values.map(&:last).reduce(:merge)]}]
|
43
|
+
body[j] = s(:prop, body[j].children[0], merge)
|
44
|
+
body[i] = nil
|
45
|
+
break
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
12
50
|
end
|
13
51
|
end
|
@@ -35,10 +35,7 @@ module Ruby2JS
|
|
35
35
|
{enumerable: s(:true), configurable: s(:true),
|
36
36
|
set: s(:block, s(:send, nil, :proc), *m.children[1..-1])})
|
37
37
|
else
|
38
|
-
if m.
|
39
|
-
m.children.first !~ /!/ and m.loc and m.loc.name and
|
40
|
-
m.loc.name.source_buffer.source[m.loc.name.end_pos] != '('
|
41
|
-
|
38
|
+
if not m.is_method?
|
42
39
|
# property getter
|
43
40
|
s(:prop, s(:attr, name, :prototype), m.children.first =>
|
44
41
|
{enumerable: s(:true), configurable: s(:true),
|
@@ -133,21 +130,8 @@ module Ruby2JS
|
|
133
130
|
|
134
131
|
body.flatten!
|
135
132
|
|
136
|
-
# merge
|
137
|
-
|
138
|
-
next unless body[i] and body[i].type == :prop
|
139
|
-
for j in i+1...body.length
|
140
|
-
break unless body[j] and body[j].type == :prop
|
141
|
-
if body[i].children[0] == body[j].children[0]
|
142
|
-
merge = Hash[(body[i].children[1].to_a+body[j].children[1].to_a).
|
143
|
-
group_by(&:first).map {|name, values|
|
144
|
-
[name, values.map(&:last).reduce(:merge)]}]
|
145
|
-
body[j] = s(:prop, body[j].children[0], merge)
|
146
|
-
body[i] = nil
|
147
|
-
break
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
133
|
+
# merge property definitions
|
134
|
+
combine_properties(body)
|
151
135
|
|
152
136
|
if inheritance
|
153
137
|
body.unshift s(:send, name, :prototype=,
|
@@ -1,13 +1,31 @@
|
|
1
1
|
module Ruby2JS
|
2
2
|
class Converter
|
3
3
|
|
4
|
-
# (
|
4
|
+
# (defs (self) :foo
|
5
5
|
# (args)
|
6
6
|
# (...)
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
# NOTE: defp is only produced by filters
|
9
|
+
|
10
|
+
handle :defs, :defp do |target, method, args, body|
|
11
|
+
parse transform_defs(target, method, args, body)
|
12
|
+
end
|
13
|
+
|
14
|
+
def transform_defs(target, method, args, body)
|
15
|
+
if not @ast.is_method? or @ast.type == :defp
|
16
|
+
s(:prop, target, method.to_s =>
|
17
|
+
{enumerable: s(:true), configurable: s(:true),
|
18
|
+
get: s(:block, s(:send, nil, :proc), args,
|
19
|
+
s(:autoreturn, body))})
|
20
|
+
elsif method =~ /=$/
|
21
|
+
s(:prop, target, method.to_s.sub('=', '') =>
|
22
|
+
{enumerable: s(:true), configurable: s(:true),
|
23
|
+
set: s(:block, s(:send, nil, :proc), args,
|
24
|
+
body)})
|
25
|
+
else
|
26
|
+
s(:send, target, "#{method}=",
|
27
|
+
s(:block, s(:send, nil, :lambda), args, body))
|
28
|
+
end
|
11
29
|
end
|
12
30
|
end
|
13
31
|
end
|
@@ -10,7 +10,24 @@ module Ruby2JS
|
|
10
10
|
# (...))
|
11
11
|
|
12
12
|
handle :dstr, :dsym do |*children|
|
13
|
-
children.map
|
13
|
+
children.map! do |child|
|
14
|
+
if child.type == :begin and child.children.length == 1
|
15
|
+
child = child.children.first
|
16
|
+
end
|
17
|
+
|
18
|
+
if child.type == :send
|
19
|
+
op_index = operator_index child.children[1]
|
20
|
+
if op_index >= operator_index(:+)
|
21
|
+
group child
|
22
|
+
else
|
23
|
+
parse child
|
24
|
+
end
|
25
|
+
else
|
26
|
+
parse child
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
children.join(' + ')
|
14
31
|
end
|
15
32
|
end
|
16
33
|
end
|
@@ -542,7 +542,11 @@ module Ruby2JS
|
|
542
542
|
# convert instance method definitions in controllers to $scope
|
543
543
|
def on_def(node)
|
544
544
|
if @ngContext == :controller
|
545
|
-
|
545
|
+
if node.is_method?
|
546
|
+
process s(:defs, s(:gvar, :$scope), *node.children)
|
547
|
+
else
|
548
|
+
process s(:defp, s(:gvar, :$scope), *node.children)
|
549
|
+
end
|
546
550
|
else
|
547
551
|
super
|
548
552
|
end
|
data/lib/ruby2js/version.rb
CHANGED
data/ruby2js.gemspec
CHANGED
@@ -2,22 +2,22 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "ruby2js"
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.9.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Sam Ruby"]
|
9
|
-
s.date = "2014-04-
|
9
|
+
s.date = "2014-04-07"
|
10
10
|
s.description = " The base package maps Ruby syntax to JavaScript semantics.\n Filters may be provided to add Ruby-specific or framework specific\n behavior.\n"
|
11
11
|
s.email = "rubys@intertwingly.net"
|
12
|
-
s.files = ["ruby2js.gemspec", "README.md", "lib/ruby2js", "lib/ruby2js/
|
12
|
+
s.files = ["ruby2js.gemspec", "README.md", "lib/ruby2js", "lib/ruby2js/sinatra.rb", "lib/ruby2js/converter.rb", "lib/ruby2js/filter", "lib/ruby2js/filter/angular-route.rb", "lib/ruby2js/filter/jquery.rb", "lib/ruby2js/filter/return.rb", "lib/ruby2js/filter/underscore.rb", "lib/ruby2js/filter/angularrb.rb", "lib/ruby2js/filter/strict.rb", "lib/ruby2js/filter/functions.rb", "lib/ruby2js/filter/angular-resource.rb", "lib/ruby2js/converter", "lib/ruby2js/converter/ivasgn.rb", "lib/ruby2js/converter/self.rb", "lib/ruby2js/converter/prototype.rb", "lib/ruby2js/converter/undef.rb", "lib/ruby2js/converter/casgn.rb", "lib/ruby2js/converter/nil.rb", "lib/ruby2js/converter/logical.rb", "lib/ruby2js/converter/ivar.rb", "lib/ruby2js/converter/super.rb", "lib/ruby2js/converter/class.rb", "lib/ruby2js/converter/for.rb", "lib/ruby2js/converter/arg.rb", "lib/ruby2js/converter/literal.rb", "lib/ruby2js/converter/cvasgn.rb", "lib/ruby2js/converter/dstr.rb", "lib/ruby2js/converter/return.rb", "lib/ruby2js/converter/defined.rb", "lib/ruby2js/converter/boolean.rb", "lib/ruby2js/converter/next.rb", "lib/ruby2js/converter/array.rb", "lib/ruby2js/converter/def.rb", "lib/ruby2js/converter/args.rb", "lib/ruby2js/converter/regexp.rb", "lib/ruby2js/converter/var.rb", "lib/ruby2js/converter/defs.rb", "lib/ruby2js/converter/if.rb", "lib/ruby2js/converter/masgn.rb", "lib/ruby2js/converter/hash.rb", "lib/ruby2js/converter/cvar.rb", "lib/ruby2js/converter/whilepost.rb", "lib/ruby2js/converter/break.rb", "lib/ruby2js/converter/opasgn.rb", "lib/ruby2js/converter/begin.rb", "lib/ruby2js/converter/xstr.rb", "lib/ruby2js/converter/vasgn.rb", "lib/ruby2js/converter/block.rb", "lib/ruby2js/converter/send.rb", "lib/ruby2js/converter/sym.rb", "lib/ruby2js/converter/case.rb", "lib/ruby2js/converter/kwbegin.rb", "lib/ruby2js/converter/const.rb", "lib/ruby2js/converter/module.rb", "lib/ruby2js/converter/until.rb", "lib/ruby2js/converter/untilpost.rb", "lib/ruby2js/converter/blockpass.rb", "lib/ruby2js/converter/while.rb", "lib/ruby2js/cgi.rb", "lib/ruby2js/version.rb", "lib/ruby2js/rails.rb", "lib/ruby2js.rb"]
|
13
13
|
s.homepage = "http://github.com/rubys/ruby2js"
|
14
14
|
s.licenses = ["MIT"]
|
15
15
|
s.require_paths = ["lib"]
|
16
|
-
s.rubygems_version = "
|
16
|
+
s.rubygems_version = "1.8.11"
|
17
17
|
s.summary = "Minimal yet extensible Ruby to JavaScript conversion."
|
18
18
|
|
19
19
|
if s.respond_to? :specification_version then
|
20
|
-
s.specification_version =
|
20
|
+
s.specification_version = 3
|
21
21
|
|
22
22
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
23
23
|
s.add_runtime_dependency(%q<parser>, [">= 0"])
|
metadata
CHANGED
@@ -1,29 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby2js
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.9.0
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Sam Ruby
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2014-04-
|
12
|
+
date: 2014-04-07 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: parser
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &15788320 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
16
18
|
requirements:
|
17
19
|
- - ! '>='
|
18
20
|
- !ruby/object:Gem::Version
|
19
21
|
version: '0'
|
20
22
|
type: :runtime
|
21
23
|
prerelease: false
|
22
|
-
version_requirements:
|
23
|
-
requirements:
|
24
|
-
- - ! '>='
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
24
|
+
version_requirements: *15788320
|
27
25
|
description: ! " The base package maps Ruby syntax to JavaScript semantics.\n Filters
|
28
26
|
may be provided to add Ruby-specific or framework specific\n behavior.\n"
|
29
27
|
email: rubys@intertwingly.net
|
@@ -33,88 +31,89 @@ extra_rdoc_files: []
|
|
33
31
|
files:
|
34
32
|
- ruby2js.gemspec
|
35
33
|
- README.md
|
36
|
-
- lib/ruby2js/
|
37
|
-
- lib/ruby2js/
|
38
|
-
- lib/ruby2js/
|
39
|
-
- lib/ruby2js/
|
40
|
-
- lib/ruby2js/
|
34
|
+
- lib/ruby2js/sinatra.rb
|
35
|
+
- lib/ruby2js/converter.rb
|
36
|
+
- lib/ruby2js/filter/angular-route.rb
|
37
|
+
- lib/ruby2js/filter/jquery.rb
|
38
|
+
- lib/ruby2js/filter/return.rb
|
39
|
+
- lib/ruby2js/filter/underscore.rb
|
40
|
+
- lib/ruby2js/filter/angularrb.rb
|
41
|
+
- lib/ruby2js/filter/strict.rb
|
42
|
+
- lib/ruby2js/filter/functions.rb
|
43
|
+
- lib/ruby2js/filter/angular-resource.rb
|
44
|
+
- lib/ruby2js/converter/ivasgn.rb
|
45
|
+
- lib/ruby2js/converter/self.rb
|
41
46
|
- lib/ruby2js/converter/prototype.rb
|
42
|
-
- lib/ruby2js/converter/
|
43
|
-
- lib/ruby2js/converter/
|
44
|
-
- lib/ruby2js/converter/args.rb
|
45
|
-
- lib/ruby2js/converter/defs.rb
|
46
|
-
- lib/ruby2js/converter/literal.rb
|
47
|
-
- lib/ruby2js/converter/array.rb
|
48
|
-
- lib/ruby2js/converter/if.rb
|
47
|
+
- lib/ruby2js/converter/undef.rb
|
48
|
+
- lib/ruby2js/converter/casgn.rb
|
49
49
|
- lib/ruby2js/converter/nil.rb
|
50
50
|
- lib/ruby2js/converter/logical.rb
|
51
|
-
- lib/ruby2js/converter/
|
52
|
-
- lib/ruby2js/converter/
|
53
|
-
- lib/ruby2js/converter/
|
54
|
-
- lib/ruby2js/converter/arg.rb
|
55
|
-
- lib/ruby2js/converter/case.rb
|
56
|
-
- lib/ruby2js/converter/break.rb
|
57
|
-
- lib/ruby2js/converter/hash.rb
|
51
|
+
- lib/ruby2js/converter/ivar.rb
|
52
|
+
- lib/ruby2js/converter/super.rb
|
53
|
+
- lib/ruby2js/converter/class.rb
|
58
54
|
- lib/ruby2js/converter/for.rb
|
55
|
+
- lib/ruby2js/converter/arg.rb
|
56
|
+
- lib/ruby2js/converter/literal.rb
|
57
|
+
- lib/ruby2js/converter/cvasgn.rb
|
58
|
+
- lib/ruby2js/converter/dstr.rb
|
59
|
+
- lib/ruby2js/converter/return.rb
|
60
|
+
- lib/ruby2js/converter/defined.rb
|
59
61
|
- lib/ruby2js/converter/boolean.rb
|
60
|
-
- lib/ruby2js/converter/
|
61
|
-
- lib/ruby2js/converter/
|
62
|
-
- lib/ruby2js/converter/
|
63
|
-
- lib/ruby2js/converter/
|
64
|
-
- lib/ruby2js/converter/until.rb
|
62
|
+
- lib/ruby2js/converter/next.rb
|
63
|
+
- lib/ruby2js/converter/array.rb
|
64
|
+
- lib/ruby2js/converter/def.rb
|
65
|
+
- lib/ruby2js/converter/args.rb
|
65
66
|
- lib/ruby2js/converter/regexp.rb
|
66
|
-
- lib/ruby2js/converter/
|
67
|
+
- lib/ruby2js/converter/var.rb
|
68
|
+
- lib/ruby2js/converter/defs.rb
|
69
|
+
- lib/ruby2js/converter/if.rb
|
67
70
|
- lib/ruby2js/converter/masgn.rb
|
68
|
-
- lib/ruby2js/converter/
|
71
|
+
- lib/ruby2js/converter/hash.rb
|
72
|
+
- lib/ruby2js/converter/cvar.rb
|
73
|
+
- lib/ruby2js/converter/whilepost.rb
|
74
|
+
- lib/ruby2js/converter/break.rb
|
75
|
+
- lib/ruby2js/converter/opasgn.rb
|
76
|
+
- lib/ruby2js/converter/begin.rb
|
77
|
+
- lib/ruby2js/converter/xstr.rb
|
78
|
+
- lib/ruby2js/converter/vasgn.rb
|
69
79
|
- lib/ruby2js/converter/block.rb
|
70
|
-
- lib/ruby2js/converter/super.rb
|
71
|
-
- lib/ruby2js/converter/ivar.rb
|
72
80
|
- lib/ruby2js/converter/send.rb
|
73
|
-
- lib/ruby2js/converter/vasgn.rb
|
74
|
-
- lib/ruby2js/converter/defined.rb
|
75
|
-
- lib/ruby2js/converter/def.rb
|
76
81
|
- lib/ruby2js/converter/sym.rb
|
77
|
-
- lib/ruby2js/converter/
|
78
|
-
- lib/ruby2js/converter/
|
79
|
-
- lib/ruby2js/converter/
|
80
|
-
- lib/ruby2js/converter/
|
81
|
-
- lib/ruby2js/converter/
|
82
|
-
- lib/ruby2js/converter/
|
83
|
-
- lib/ruby2js/converter/
|
82
|
+
- lib/ruby2js/converter/case.rb
|
83
|
+
- lib/ruby2js/converter/kwbegin.rb
|
84
|
+
- lib/ruby2js/converter/const.rb
|
85
|
+
- lib/ruby2js/converter/module.rb
|
86
|
+
- lib/ruby2js/converter/until.rb
|
87
|
+
- lib/ruby2js/converter/untilpost.rb
|
88
|
+
- lib/ruby2js/converter/blockpass.rb
|
89
|
+
- lib/ruby2js/converter/while.rb
|
84
90
|
- lib/ruby2js/cgi.rb
|
85
|
-
- lib/ruby2js/
|
86
|
-
- lib/ruby2js/
|
87
|
-
- lib/ruby2js/filter/strict.rb
|
88
|
-
- lib/ruby2js/filter/angularrb.rb
|
89
|
-
- lib/ruby2js/filter/underscore.rb
|
90
|
-
- lib/ruby2js/filter/angular-resource.rb
|
91
|
-
- lib/ruby2js/filter/functions.rb
|
92
|
-
- lib/ruby2js/filter/jquery.rb
|
93
|
-
- lib/ruby2js/filter/angular-route.rb
|
94
|
-
- lib/ruby2js/sinatra.rb
|
91
|
+
- lib/ruby2js/version.rb
|
92
|
+
- lib/ruby2js/rails.rb
|
95
93
|
- lib/ruby2js.rb
|
96
94
|
homepage: http://github.com/rubys/ruby2js
|
97
95
|
licenses:
|
98
96
|
- MIT
|
99
|
-
metadata: {}
|
100
97
|
post_install_message:
|
101
98
|
rdoc_options: []
|
102
99
|
require_paths:
|
103
100
|
- lib
|
104
101
|
required_ruby_version: !ruby/object:Gem::Requirement
|
102
|
+
none: false
|
105
103
|
requirements:
|
106
104
|
- - ! '>='
|
107
105
|
- !ruby/object:Gem::Version
|
108
106
|
version: '0'
|
109
107
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
110
109
|
requirements:
|
111
110
|
- - ! '>='
|
112
111
|
- !ruby/object:Gem::Version
|
113
112
|
version: '0'
|
114
113
|
requirements: []
|
115
114
|
rubyforge_project:
|
116
|
-
rubygems_version:
|
115
|
+
rubygems_version: 1.8.11
|
117
116
|
signing_key:
|
118
|
-
specification_version:
|
117
|
+
specification_version: 3
|
119
118
|
summary: Minimal yet extensible Ruby to JavaScript conversion.
|
120
119
|
test_files: []
|
checksums.yaml
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
---
|
2
|
-
!binary "U0hBMQ==":
|
3
|
-
metadata.gz: !binary |-
|
4
|
-
ZTQ1ZGU1ZTI0NWQ4ZmMwNzNiMjExYjk1MWY5YWJkNTY1MzYzNTQwYg==
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
MmI0MjVhYjkwNzg5YTUxZTgzMDhhYWE3NjM0MmU2NmIyNjQ4MGJkYw==
|
7
|
-
!binary "U0hBNTEy":
|
8
|
-
metadata.gz: !binary |-
|
9
|
-
NzZmNjgxYzU1YmFjZTU4ZmI0MWJkY2I1YmZjN2YxN2RmOTkzOGRhYzNmN2Rm
|
10
|
-
ZWIzMTIxYWM1NmYxOTRjOTI5MjA5NzY3MTc4Yjk4MWM0MDQ0YTNjMTc3NGEy
|
11
|
-
NDk0NGE1ZjFkOTQ3YzRlNzAzNmVkYjZmMTAxNmIzZTNkYTlhODU=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
OTc5OTkwNmY2Yzc1MzgxMWNkN2M5YjFlYzAyNDE3N2M5MTllMTE4ZjA0MWI3
|
14
|
-
NjlmOWM0ODQ3NTAzZWY1YzFiNWFkMWVhOTE5OThiNmY1Y2UwZjRmYmVkNzll
|
15
|
-
MTU0OTQ0YTU3NzVkNGQ1NGJlNzYzMjgzNzBkMWYwMWM1ZjAxOWE=
|