eyes_selenium 3.17.1 → 3.17.2
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.
- checksums.yaml +4 -4
- data/lib/applitools/selenium/browser_types.rb +3 -1
- data/lib/applitools/selenium/browsers_info.rb +2 -2
- data/lib/applitools/selenium/configuration.rb +18 -4
- data/lib/applitools/selenium/orientations.rb +5 -0
- data/lib/applitools/selenium/visual_grid/chrome_emulation_info.rb +42 -11
- data/lib/applitools/selenium/visual_grid/desktop_browser_info.rb +43 -0
- data/lib/applitools/selenium/visual_grid/emulation_base_info.rb +1 -8
- data/lib/applitools/selenium/visual_grid/i_render_browser_info.rb +19 -0
- data/lib/applitools/selenium/visual_grid/ios_device_info.rb +45 -0
- data/lib/applitools/selenium/visual_grid/ios_device_name.rb +30 -0
- data/lib/applitools/selenium/visual_grid/ios_screen_orientation.rb +14 -0
- data/lib/applitools/selenium/visual_grid/render_info.rb +2 -1
- data/lib/applitools/selenium/visual_grid/render_request.rb +1 -1
- data/lib/applitools/selenium/visual_grid/render_task.rb +3 -1
- data/lib/applitools/version.rb +1 -1
- data/lib/eyes_selenium.rb +1 -1
- metadata +9 -5
- data/lib/applitools/selenium/visual_grid/render_browser_info.rb +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8bbe944af9ea20d3d0afde5ae4e96b6b33d42e4e171e4bfb1d4dc0a4866e1056
|
4
|
+
data.tar.gz: 1cfc9ec471f9f02944189c0e442c59530e8ea37e8a586e04128191ef401316ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6e40409125ded5b69be42f291a23a7dc61b61c54420eaaa5ca397b279e8d4b33931b446ffdd2f03c20a28ebd73dfc2d9d9c21dd6fd8e65e81707f649d574c50
|
7
|
+
data.tar.gz: abd633ddeaef17adf5f937c00a149956b4b5587356bc2ec5467e88e4374f99716b47f7e964f35a1553776a5ac0e36267e51df947f7c8c05c365b874c31f496e1
|
@@ -12,6 +12,7 @@ module BrowserTypes
|
|
12
12
|
SAFARI = :'safari-0'
|
13
13
|
SAFARI_ONE_VERSION_BACK = :'safari-1'
|
14
14
|
SAFARI_TWO_VERSIONS_BACK = :'safari-2'
|
15
|
+
IOS_SAFARI = :safari
|
15
16
|
|
16
17
|
EDGE_CHROMIUM = :'edgechromium'
|
17
18
|
EDGE_CHROMIUM_ONE_VERSION_BACK = :'edgechromium-1'
|
@@ -52,7 +53,8 @@ module BrowserTypes
|
|
52
53
|
EDGE_LEGACY,
|
53
54
|
IE_10,
|
54
55
|
EDGE_CHROMIUM,
|
55
|
-
EDGE_CHROMIUM_ONE_VERSION_BACK
|
56
|
+
EDGE_CHROMIUM_ONE_VERSION_BACK,
|
57
|
+
IOS_SAFARI
|
56
58
|
]
|
57
59
|
end
|
58
60
|
end
|
@@ -4,7 +4,7 @@ module Applitools
|
|
4
4
|
module Selenium
|
5
5
|
class BrowsersInfo < Set
|
6
6
|
def add(obj)
|
7
|
-
return super if obj.is_a? Applitools::Selenium::
|
7
|
+
return super if obj.is_a? Applitools::Selenium::IRenderBrowserInfo
|
8
8
|
raise(
|
9
9
|
Applitools::EyesIllegalArgument,
|
10
10
|
'It is expected the value to be an Applitools::Selenium::RenderBrowserInfo instance,' \
|
@@ -15,7 +15,7 @@ module Applitools
|
|
15
15
|
def each(viewport_size = nil)
|
16
16
|
return super() unless empty?
|
17
17
|
return unless viewport_size
|
18
|
-
default = Applitools::Selenium::
|
18
|
+
default = Applitools::Selenium::DesktopBrowserInfo.new.tap do |bi|
|
19
19
|
bi.viewport_size = viewport_size
|
20
20
|
bi.browser_type = BrowserTypes::CHROME
|
21
21
|
end
|
@@ -36,11 +36,17 @@ module Applitools
|
|
36
36
|
|
37
37
|
def add_browser(*args)
|
38
38
|
case args.size
|
39
|
-
when 0
|
39
|
+
when 0
|
40
|
+
browser = Applitools::Selenium::DesktopBrowserInfo.new
|
41
|
+
when 1
|
40
42
|
b = args[0]
|
41
|
-
|
43
|
+
raise(
|
44
|
+
Applitools::EyesIllegalArgument,
|
45
|
+
'Expected :browser to be an IRenderBrowserInfo instance!'
|
46
|
+
) unless b.is_a? IRenderBrowserInfo
|
47
|
+
browser = b
|
42
48
|
when 3
|
43
|
-
browser = Applitools::Selenium::
|
49
|
+
browser = Applitools::Selenium::DesktopBrowserInfo.new.tap do |bi|
|
44
50
|
bi.viewport_size = Applitools::RectangleSize.new(args[0], args[1])
|
45
51
|
bi.browser_type = args[2]
|
46
52
|
end
|
@@ -51,11 +57,18 @@ module Applitools
|
|
51
57
|
self
|
52
58
|
end
|
53
59
|
|
60
|
+
def add_browsers(browsers)
|
61
|
+
browsers.each do |browser|
|
62
|
+
add_browser(browser)
|
63
|
+
end
|
64
|
+
self
|
65
|
+
end
|
66
|
+
|
54
67
|
def add_device_emulation(device_name, orientation = Orientations::PORTRAIT)
|
55
68
|
Applitools::ArgumentGuard.not_nil device_name, 'device_name'
|
56
69
|
raise Applitools::EyesIllegalArgument, 'Wrong device name!' unless Devices.enum_values.include? device_name
|
57
70
|
emu = Applitools::Selenium::ChromeEmulationInfo.new(device_name, orientation)
|
58
|
-
add_browser
|
71
|
+
add_browser emu
|
59
72
|
end
|
60
73
|
|
61
74
|
def viewport_size
|
@@ -66,6 +79,7 @@ module Applitools
|
|
66
79
|
return from_browsers_info.viewport_size if from_browsers_info
|
67
80
|
nil
|
68
81
|
end
|
82
|
+
|
69
83
|
end
|
70
84
|
end
|
71
85
|
end
|
@@ -1,20 +1,51 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
2
|
+
require_relative 'emulation_base_info'
|
3
|
+
require_relative 'i_render_browser_info'
|
3
4
|
module Applitools
|
4
5
|
module Selenium
|
5
|
-
class ChromeEmulationInfo <
|
6
|
-
|
6
|
+
class ChromeEmulationInfo < IRenderBrowserInfo
|
7
|
+
DEFAULT_CONFIG = proc do
|
8
|
+
{
|
9
|
+
platform: 'linux',
|
10
|
+
browser_type: BrowserTypes::CHROME,
|
11
|
+
# size_mode: 'full-page',
|
12
|
+
viewport_size: Applitools::RectangleSize.from_any_argument(width: 0, height: 0)
|
13
|
+
}
|
14
|
+
end
|
15
|
+
class << self
|
16
|
+
def default_config
|
17
|
+
DEFAULT_CONFIG.call
|
18
|
+
end
|
19
|
+
end
|
7
20
|
|
8
|
-
def initialize(
|
9
|
-
super(
|
10
|
-
|
21
|
+
def initialize(*args)
|
22
|
+
super()
|
23
|
+
case args[0]
|
24
|
+
when String
|
25
|
+
self.emulation_info = EmulationInfo.new.tap do |ei|
|
26
|
+
ei.device_name = args[0]
|
27
|
+
ei.screen_orientation = args[1] || Orientations::PORTRAIT
|
28
|
+
end
|
29
|
+
when Hash
|
30
|
+
self.emulation_info = EmulationInfo.new.tap do |ei|
|
31
|
+
ei.device_name = args[0][:device_name]
|
32
|
+
ei.screen_orientation = args[0][:screen_orientation] || Orientations::PORTRAIT
|
33
|
+
end
|
34
|
+
end
|
11
35
|
end
|
12
36
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
37
|
+
private
|
38
|
+
|
39
|
+
class EmulationInfo < Applitools::Selenium::EmulationBaseInfo
|
40
|
+
enum_field :device_name, Devices.enum_values
|
41
|
+
enum_field :screen_orientation, Orientations.enum_values
|
42
|
+
|
43
|
+
def json_data
|
44
|
+
{
|
45
|
+
:'deviceName' => device_name,
|
46
|
+
:'screenOrientation' => screen_orientation
|
47
|
+
}
|
48
|
+
end
|
18
49
|
end
|
19
50
|
end
|
20
51
|
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'applitools/selenium/browser_types'
|
3
|
+
|
4
|
+
module Applitools
|
5
|
+
module Selenium
|
6
|
+
class DesktopBrowserInfo < IRenderBrowserInfo
|
7
|
+
DEFAULT_CONFIG = proc do
|
8
|
+
{
|
9
|
+
platform: 'linux',
|
10
|
+
browser_type: BrowserTypes::CHROME,
|
11
|
+
# size_mode: 'full-page',
|
12
|
+
viewport_size: Applitools::RectangleSize.from_any_argument(width: 0, height: 0)
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
class << self
|
17
|
+
def default_config
|
18
|
+
DEFAULT_CONFIG.call
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def initialize(options = {})
|
23
|
+
super()
|
24
|
+
if options[:width] && options[:height]
|
25
|
+
self.viewport_size = Applitools::RectangleSize.from_any_argument(width: options[:width], height: options[:height])
|
26
|
+
end
|
27
|
+
self.browser_type = options[:browser_type] if options[:browser_type]
|
28
|
+
end
|
29
|
+
|
30
|
+
def platform
|
31
|
+
case browser_type
|
32
|
+
when BrowserTypes::EDGE_LEGACY, BrowserTypes::EDGE_CHROMIUM, BrowserTypes::EDGE_CHROMIUM_ONE_VERSION_BACK
|
33
|
+
'windows'
|
34
|
+
else
|
35
|
+
'linux'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
Applitools::Selenium::RenderBrowserInfo = Applitools::Selenium::DesktopBrowserInfo
|
@@ -1,14 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
module Applitools
|
3
3
|
module Selenium
|
4
|
-
class EmulationBaseInfo
|
5
|
-
extend Applitools::Helpers
|
6
|
-
attr_accessor :screen_orientation
|
7
|
-
abstract_attr_accessor :device_name
|
8
|
-
|
9
|
-
def initialize(screen_orientation)
|
10
|
-
self.screen_orientation = screen_orientation
|
11
|
-
end
|
4
|
+
class EmulationBaseInfo < Applitools::AbstractConfiguration
|
12
5
|
end
|
13
6
|
end
|
14
7
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Applitools
|
2
|
+
module Selenium
|
3
|
+
class IRenderBrowserInfo < ::Applitools::AbstractConfiguration
|
4
|
+
|
5
|
+
object_field :viewport_size, Applitools::RectangleSize
|
6
|
+
enum_field :browser_type, BrowserTypes.enum_values
|
7
|
+
string_field :platform
|
8
|
+
string_field :size_mode
|
9
|
+
string_field :baseline_env_name
|
10
|
+
object_field :emulation_info, Applitools::Selenium::EmulationBaseInfo
|
11
|
+
object_field :ios_device_info, Applitools::Selenium::EmulationBaseInfo
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
return "#{viewport_size} (#{browser_type})" unless emulation_info
|
15
|
+
"#{emulation_info.device_name} - #{emulation_info.screen_orientation}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require_relative 'ios_device_name'
|
2
|
+
require_relative 'ios_screen_orientation'
|
3
|
+
module Applitools
|
4
|
+
module Selenium
|
5
|
+
class IosDeviceInfo < IRenderBrowserInfo
|
6
|
+
DEFAULT_CONFIG = proc do
|
7
|
+
{
|
8
|
+
platform: 'ios',
|
9
|
+
browser_type: BrowserTypes::IOS_SAFARI,
|
10
|
+
# size_mode: 'full-page',
|
11
|
+
viewport_size: Applitools::RectangleSize.from_any_argument(width: 0, height: 0)
|
12
|
+
}
|
13
|
+
end
|
14
|
+
class << self
|
15
|
+
def default_config
|
16
|
+
DEFAULT_CONFIG.call
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
def initialize(options = {})
|
22
|
+
super()
|
23
|
+
self.ios_device_info = EmulationInfo.new.tap do |ei|
|
24
|
+
ei.device_name = options[:device_name]
|
25
|
+
ei.screen_orientation = options[:screen_orientation] || IosScreenshotOrientations::PORTRAIT
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
class EmulationInfo < EmulationBaseInfo
|
32
|
+
enum_field :device_name, IosDeviceName.enum_values
|
33
|
+
enum_field :screen_orientation, IosScreenshotOrientations.enum_values
|
34
|
+
|
35
|
+
def json_data
|
36
|
+
{
|
37
|
+
name: device_name,
|
38
|
+
screenOrientation: screen_orientation,
|
39
|
+
version: 'latest'
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module IosDeviceName
|
2
|
+
extend self
|
3
|
+
IPhone_11_Pro = 'iPhone 11 Pro'
|
4
|
+
IPhone_11_Pro_Max = 'iPhone 11 Pro Max'
|
5
|
+
IPhone_11 = 'iPhone 11'
|
6
|
+
IPhone_XR = 'iPhone XR'
|
7
|
+
IPhone_XS = 'iPhone Xs'
|
8
|
+
IPhone_X = 'iPhone X'
|
9
|
+
IPhone_8 = 'iPhone 8'
|
10
|
+
IPhone_7 = 'iPhone 7'
|
11
|
+
IPad_Pro_3 = 'iPad Pro (12.9-inch) (3rd generation)'
|
12
|
+
IPad_7 = 'iPad (7th generation)'
|
13
|
+
IPad_Air_2 = 'iPad Air (2nd generation)'
|
14
|
+
|
15
|
+
def enum_values
|
16
|
+
[
|
17
|
+
IPhone_11_Pro,
|
18
|
+
IPhone_11_Pro_Max,
|
19
|
+
IPhone_11,
|
20
|
+
IPhone_XR,
|
21
|
+
IPhone_XS,
|
22
|
+
IPhone_X,
|
23
|
+
IPhone_8,
|
24
|
+
IPhone_7,
|
25
|
+
IPad_Pro_3,
|
26
|
+
IPad_7,
|
27
|
+
IPad_Air_2
|
28
|
+
]
|
29
|
+
end
|
30
|
+
end
|
@@ -3,7 +3,7 @@ module Applitools
|
|
3
3
|
module Selenium
|
4
4
|
class RenderInfo
|
5
5
|
include Applitools::Jsonable
|
6
|
-
json_fields :width, :height, :sizeMode, :emulationInfo, :region, :selector
|
6
|
+
json_fields :width, :height, :sizeMode, :emulationInfo, :region, :selector, :IosDeviceInfo
|
7
7
|
# , :region, :emulationInfo
|
8
8
|
|
9
9
|
def json_data
|
@@ -13,6 +13,7 @@ module Applitools
|
|
13
13
|
sizeMode: size_mode
|
14
14
|
}
|
15
15
|
result['emulationInfo'] = json_value(emulation_info) if emulation_info
|
16
|
+
result['iosDeviceInfo'] = json_value(ios_device_info) if ios_device_info
|
16
17
|
result['region'] = json_value(region) if size_mode == 'region'
|
17
18
|
result['selector'] = json_value(region) if size_mode == 'selector'
|
18
19
|
result
|
@@ -8,7 +8,7 @@ module Applitools
|
|
8
8
|
json_fields :renderId, :webhook, :url, :dom, :resources, :scriptHooks,
|
9
9
|
:selectorsToFindRegionsFor, :sendDom, :agentId
|
10
10
|
|
11
|
-
json_fields :renderInfo, :browser
|
11
|
+
json_fields :renderInfo, :browser, :platform
|
12
12
|
|
13
13
|
def initialize(*args)
|
14
14
|
options = Applitools::Utils.extract_options! args
|
@@ -249,6 +249,7 @@ module Applitools
|
|
249
249
|
r.size_mode = size_mode
|
250
250
|
r.region = region_to_check
|
251
251
|
r.emulation_info = running_test.browser_info.emulation_info if running_test.browser_info.emulation_info
|
252
|
+
r.ios_device_info = running_test.browser_info.ios_device_info if running_test.browser_info.ios_device_info
|
252
253
|
end
|
253
254
|
|
254
255
|
requests << Applitools::Selenium::RenderRequest.new(
|
@@ -257,7 +258,8 @@ module Applitools
|
|
257
258
|
dom: dom,
|
258
259
|
resources: request_resources,
|
259
260
|
render_info: r_info,
|
260
|
-
browser: { name: running_test.browser_info.browser_type
|
261
|
+
browser: { name: running_test.browser_info.browser_type },
|
262
|
+
platform: { name: running_test.browser_info.platform },
|
261
263
|
script_hooks: script_hooks,
|
262
264
|
selectors_to_find_regions_for: region_selectors,
|
263
265
|
send_dom: if running_test.eyes.configuration.send_dom.nil?
|
data/lib/applitools/version.rb
CHANGED
data/lib/eyes_selenium.rb
CHANGED
@@ -20,8 +20,8 @@ end
|
|
20
20
|
|
21
21
|
Applitools::Selenium.require_dir 'selenium/concerns'
|
22
22
|
Applitools::Selenium.require_dir 'selenium/scripts'
|
23
|
-
Applitools::Selenium.require_dir 'selenium/visual_grid'
|
24
23
|
Applitools::Selenium.require_dir 'selenium'
|
24
|
+
Applitools::Selenium.require_dir 'selenium/visual_grid'
|
25
25
|
Applitools::Selenium.require_dir 'selenium/dom_capture'
|
26
26
|
Applitools::Selenium.require_dir 'selenium/css_parser'
|
27
27
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eyes_selenium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.17.
|
4
|
+
version: 3.17.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Applitools Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05
|
11
|
+
date: 2020-06-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: eyes_core
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 3.17.
|
19
|
+
version: 3.17.2
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 3.17.
|
26
|
+
version: 3.17.2
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: selenium-webdriver
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,9 +150,13 @@ files:
|
|
150
150
|
- lib/applitools/selenium/viewport_screenshot.rb
|
151
151
|
- lib/applitools/selenium/viewport_size.rb
|
152
152
|
- lib/applitools/selenium/visual_grid/chrome_emulation_info.rb
|
153
|
+
- lib/applitools/selenium/visual_grid/desktop_browser_info.rb
|
153
154
|
- lib/applitools/selenium/visual_grid/emulation_base_info.rb
|
154
155
|
- lib/applitools/selenium/visual_grid/eyes_connector.rb
|
155
|
-
- lib/applitools/selenium/visual_grid/
|
156
|
+
- lib/applitools/selenium/visual_grid/i_render_browser_info.rb
|
157
|
+
- lib/applitools/selenium/visual_grid/ios_device_info.rb
|
158
|
+
- lib/applitools/selenium/visual_grid/ios_device_name.rb
|
159
|
+
- lib/applitools/selenium/visual_grid/ios_screen_orientation.rb
|
156
160
|
- lib/applitools/selenium/visual_grid/render_info.rb
|
157
161
|
- lib/applitools/selenium/visual_grid/render_request.rb
|
158
162
|
- lib/applitools/selenium/visual_grid/render_requests.rb
|
@@ -1,43 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
require 'applitools/selenium/browser_types'
|
3
|
-
|
4
|
-
module Applitools
|
5
|
-
module Selenium
|
6
|
-
class RenderBrowserInfo < ::Applitools::AbstractConfiguration
|
7
|
-
DEFAULT_CONFIG = proc do
|
8
|
-
{
|
9
|
-
platform: 'linux',
|
10
|
-
browser_type: BrowserTypes::CHROME,
|
11
|
-
# size_mode: 'full-page',
|
12
|
-
viewport_size: Applitools::RectangleSize.from_any_argument(width: 0, height: 0)
|
13
|
-
}
|
14
|
-
end
|
15
|
-
class << self
|
16
|
-
def default_config
|
17
|
-
DEFAULT_CONFIG.call
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
object_field :viewport_size, Applitools::RectangleSize
|
22
|
-
enum_field :browser_type, BrowserTypes.enum_values
|
23
|
-
string_field :platform
|
24
|
-
string_field :size_mode
|
25
|
-
string_field :baseline_env_name
|
26
|
-
object_field :emulation_info, Applitools::Selenium::EmulationBaseInfo
|
27
|
-
|
28
|
-
def platform
|
29
|
-
case browser_type
|
30
|
-
when BrowserTypes::EDGE_LEGACY, BrowserTypes::EDGE_CHROMIUM, BrowserTypes::EDGE_CHROMIUM_ONE_VERSION_BACK
|
31
|
-
'windows'
|
32
|
-
else
|
33
|
-
'linux'
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def to_s
|
38
|
-
return "#{viewport_size} (#{browser_type})" unless emulation_info
|
39
|
-
"#{emulation_info.device_name} - #{emulation_info.screen_orientation}"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|