Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
DELIVERING MOBILE APPS
TO THE FIELD WITH ORACLE
Simon Haslam
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
ABOUT ME
Simon Haslam
• Platform / Infrastructure
Architect
• Focus includes HA, DR,
security, automation
Relevant to this session
• Worked on a mobile
project before “mobile”
and “app” where things ☺
• Technical lead on:
MAF projects from 6/2017
JET project from 7/2018
@simon_haslam
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
ABOUT EPROSEED
• Focussed only on Oracle technology
• Globally distributed with centralised delivery
management and local resources
• 5 active ACE Directors, 2 Dev Champions, 8 OCM
• 19 Oracle Excellence Awards in 8 years
25 Oracle Specializations… and counting.
Local offices in UK, NL, PT…
& Head Office in Luxembourg
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
3 Membership Tiers
• Oracle ACE Director
• Oracle ACE
• Oracle ACE Associate
bit.ly/OracleACEProgram
500+ Technical Experts
Helping Peers Globally
Connect:
Nominate yourself or someone you know: acenomination.oracle.com
@oracleace
Facebook.com/oracleaces
oracle-ace_ww@oracle.com
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
5
• Real-world ‘field’ environments & Oracle technologies
• Oracle MAF
• Apache Cordova
• Oracle JET for mobile apps
• User experience
• Learning points & summary
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
WHY APPS FOR MOBILE DEVICES?
• Nature of work - desktop or laptop is not suitable for many job roles:
– Outside, materials handling, etc (e.g. warehouse)
– Highly mobile (e.g. sales rep, ticket collector/issuer)
– Hazardous or clinical conditions (e.g. doctor or electrician)
• Reduce barrier for customer interaction
• Bring your own device - extending corporate IT
• Tablet might simply be better means of interacting with IT
6
Photo from
https://www.pexels.com
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
BUT FIRSTLY: HOW RETAIL “APPS” HAVE EVOLVED
7
UK car importer/
distributor
App calculates personalised finance terms
for a customer, e.g. at end of test drive
IT to assist salesperson
in a car showroom
1997
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
AGENDA
• Real-world ‘field’ environments
• Oracle JET for mobile apps
• Typical integration challenges
• User experience
• Learning points & summary
8
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
WHAT DO YOU NEED FOR A MOBILE ENTERPRISE APP?
9
Data services
‘Functional’ services
Offline
persistence
App dev
tools
Mobile
Device
Management
SDLC
tools
Security
tools
Notification
services
Tracking &
analytics
Operating
System inc app
packaging
Device-specific
features
Identity services
A
P
I
….and this is before you consider microservices!
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
ORACLE PRODUCTS TO MEET THESE NEEDS
10
Data services
‘Functional’ services
Offline
persistence
App dev
tools
Mobile
Device
Management
SDLC
tools
Security
tools
Notification
services
Tracking &
analytics
Operating
System inc app
packaging
Device-specific
features
Identity services
Mobile Cloud Service
Mobile
Cloud
Service
Integration
Cloud
SOA
Suite Service Bus
Identity
Cloud
Service
ADF
ERP
JET
MAF
MAF
(CDM)
Persist.
Toolkit
DevCSAPI
Platform
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
TYPES OF MOBILE APP
11
Native Hybrid
Progressive
Web Apps
Platform-specific
(multiple teams
for different platforms)
Cross-platform Cross-platform
Ultimate performance
Usually acceptable
performance
Expected to be acceptable
performance
Native APIs Cordova Cordova(?)
This presentation
PLATFORMSSPEED
DEVICE/OS
FEATURES
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
WHAT DO YOU NEED* TO DEVELOP HYBRID MOBILE APP?
Cordova
JET
PackagingOffline
Phone photo by Terje Sollie from Pexels
MAF
or
* Oracle tools - other tools are available!
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
OFFLINE PERSISTENCE
• Offline is required in many/most mobile apps to either:
– give illusion of better performance
– provide application functionality under all network conditions (variable or
none)
• Biggest challenge is cache coherency across devices
– May not be as bad as you think – perhaps first or last “wins”
• You may not need to provide offline capability for all functions
– Most functions may be read-only anyway; transactional ones may have to wait
for connectivity if rare
13
MAF: Container Data Model (fka AMPA)
built-in
JET: use Oracle’s offline persistence toolkit
https://github.com/oracle/offline-
persistence-toolkit
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
14
• Real-world ‘field’ environments & Oracle technologies
• Oracle MAF
• Apache Cordova
• Oracle JET for mobile apps
• User experience
• Learning points & summary
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
TRADITIONAL ORACLE TOOL FOR MOBILE APP DEV
Mobile Application Framework
• Declarative dev env, similar to ADF
• JDeveloper IDE (MAF extension)
• Java-based (mostly)
• Pre-integrated Cordova
• Built in navigation, security, login
• Model (binding) layer that integrates
nicely with SOAP & REST
• Discovery feature when using ADF BC
exposed as REST APIs
• Offline persistence built-in (uses
encrypted SQLite database)15
2014 / 4 years ago:
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential17
MAF: 02. An Introduction to Oracle Mobile Application Framework (Oracle MAF)
https://www.youtube.com/watch?v=4rN1kQncy0E
2014
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
MAF DEMO
18
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
FIRST TWO APPS: MAF OUTCOMES
• Lots of new technologies for the team (ADF supported by MAF consultant):
– Android SDK, standard PC build
– Emulator, building, deploying to .apk / device
– Build server integration
– JavaScript (Cordova plus some fixes like the “enter” button on Android keyboard)
• App 1: Lots of Java bean & persistence layer debugging
– Sub-optimal REST APIs (following data model)
– A couple of bugs (fixed in MAF 2.5.1+)
• App 2: Much smoother
– Reworked both data model & APIs, simplifying app
• Once through pilot, rollout was fast & no bug fixes needed
19
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
20
• Real-world ‘field’ environments & Oracle technologies
• Oracle MAF
• Apache Cordova
• Oracle JET for mobile apps
• User experience
• Learning points & summary
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
CORDOVA ARCHITECTURE
Bluetooth Serial
Barcode Receiver
https://cordova.apache.org/docs/en/latest/guide/overview/index.html
JavaScript
JavaScript
Android: Java
Physical
connection
to hardware
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
THE LASER SCANNER
• Scanner is proprietary feature of the Honeywell hardware
– Including hardware buttons on both sides of device
• Honeywell-customised flavour of Android
– Android Intent (android.scan) for successful scan completed
• We used the cordova-plugin-battery-status as an
example/starting point for our custom Cordova plug-in
https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-battery-status/
We could add more features of the Honeywell APIs/SDK to
the plug-in, e.g. enable/disable scan button, multi-scan
22
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
THE BLUETOOTH PRINTER
• Used BluetoothSerial plug in to communicate with printer
https://github.com/don/BluetoothSerial & in npm
• Bluetooth needs to be paired
• Error handling left a lot to be desired – we’ve made some
improvements (PR imminent)
Printer control language feels
like a step back in time!
23
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
24
• Real-world ‘field’ environments & Oracle technologies
• Oracle MAF
• Apache Cordova
• Oracle JET for mobile apps
• User experience
• Learning points & summary
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
MODERN ORACLE TOOLS FOR MOBILE APP DEV
25
• JavaScript Extension Toolkit (JET)
– Integrated & stable collection of open
source frameworks
– Oracle contributions for visual elements
– Many IDEs available for JavaScript
– Oracle offline persistence toolkit
– Apache Cordova is used to access device
features
– Deployment to iOS, Android as hybrid
apps, but also regular web apps e.g. for
desktop usage
• Visual Builder Cloud Service (VBCS)
– Low-code tool, highly graphical
– Runs in the cloud, has a runtime
component
– Builds regular web apps, but can also
build mobile apps to run from cloud
– Access to full range of JET components
– Export JavaScript code so you can use as
JET if you need to go deeper
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
JET DEMO
26
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
30
• Real-world ‘field’ environments & Oracle technologies
• Oracle MAF
• Apache Cordova
• Oracle JET for mobile apps
• User experience
• Learning points & summary
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
BACK TO BASICS: OUR USERS
• Who are our users?
• How IT-literate are they?
• What is their working process?
– How much focus do they have on the app
– How does “happy path” compare to non-standard flows?
– Quick wins and process improvement
31
➢Importance of Business Sponsor & Product Owner
➢Mobile app usage means lots of opinions!
➢Management of expectations
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
MOCK-UPS
32
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
THE DEVICE
Don't underestimate device requirements, even if you think app is simple!
Consider:
• Processor speed & memory
• Screen brightness
• Features, e.g. pen, scanning, bluetooth, NFC
• Battery life
– Replacement batteries
– Charging docks
• Physical resilience
– Drop resistance
– Water resistance (or even hygiene, e.g. for hospital use)
• Supported lifespan: service & spare parts34
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
35
• Real-world ‘field’ environments & Oracle technologies
• Oracle MAF
• Apache Cordova
• Oracle JET for mobile apps
• User experience
• Learning points & summary
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
LEARNING POINTS
• Tool choice is very important, especially due to pace of change
• We love the JET cookbook & training, e.g. MOOC
• Do mock-ups early and carefully, ahead of dev sprints
• Cordova plug-in dev: create test harness to reduce debug scope/cycle time
• Give developers real devices – emulators only go so far
• CI, automated build & deployment
• Automated testing, especially WAN simulation if possible
36
Credit: https://gfycat.com/CompleteDimpledGoitered
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
SUMMARY
• Plenty of quick win scenarios where employees need to
access IT through mobile devices
• Oracle JET or MAF, coupled with Cordova, provides mature
means to build mobile apps.
JET re-uses of JavaScript & desktop skills
• Hybrid mobile apps offer good compromise between
development flexibility and cost. Keep an eye out for
Progressive Web Apps though
• Various integration options & cloud services – some overlap
so consider carefully
• Positive user experience is central to success of your project
– consider usage, device, convenience, etc
37
Copyright © 2018, eProseed and/or its affiliates. All rights reserved. | Confidential
IF YOU LIKED THIS YOU MIGHT LIKE…
38
In this room next:
HIGHLY RECOMMENDED!
Delivering Mobile Apps to the Field with Oracle

Delivering Mobile Apps to the Field with Oracle

  • 1.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential DELIVERING MOBILE APPS TO THE FIELD WITH ORACLE Simon Haslam
  • 2.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential ABOUT ME Simon Haslam • Platform / Infrastructure Architect • Focus includes HA, DR, security, automation Relevant to this session • Worked on a mobile project before “mobile” and “app” where things ☺ • Technical lead on: MAF projects from 6/2017 JET project from 7/2018 @simon_haslam
  • 3.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential ABOUT EPROSEED • Focussed only on Oracle technology • Globally distributed with centralised delivery management and local resources • 5 active ACE Directors, 2 Dev Champions, 8 OCM • 19 Oracle Excellence Awards in 8 years 25 Oracle Specializations… and counting. Local offices in UK, NL, PT… & Head Office in Luxembourg
  • 4.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential 3 Membership Tiers • Oracle ACE Director • Oracle ACE • Oracle ACE Associate bit.ly/OracleACEProgram 500+ Technical Experts Helping Peers Globally Connect: Nominate yourself or someone you know: acenomination.oracle.com @oracleace Facebook.com/oracleaces oracle-ace_ww@oracle.com
  • 5.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential 5 • Real-world ‘field’ environments & Oracle technologies • Oracle MAF • Apache Cordova • Oracle JET for mobile apps • User experience • Learning points & summary
  • 6.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential WHY APPS FOR MOBILE DEVICES? • Nature of work - desktop or laptop is not suitable for many job roles: – Outside, materials handling, etc (e.g. warehouse) – Highly mobile (e.g. sales rep, ticket collector/issuer) – Hazardous or clinical conditions (e.g. doctor or electrician) • Reduce barrier for customer interaction • Bring your own device - extending corporate IT • Tablet might simply be better means of interacting with IT 6 Photo from https://www.pexels.com
  • 7.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential BUT FIRSTLY: HOW RETAIL “APPS” HAVE EVOLVED 7 UK car importer/ distributor App calculates personalised finance terms for a customer, e.g. at end of test drive IT to assist salesperson in a car showroom 1997
  • 8.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential AGENDA • Real-world ‘field’ environments • Oracle JET for mobile apps • Typical integration challenges • User experience • Learning points & summary 8
  • 9.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential WHAT DO YOU NEED FOR A MOBILE ENTERPRISE APP? 9 Data services ‘Functional’ services Offline persistence App dev tools Mobile Device Management SDLC tools Security tools Notification services Tracking & analytics Operating System inc app packaging Device-specific features Identity services A P I ….and this is before you consider microservices!
  • 10.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential ORACLE PRODUCTS TO MEET THESE NEEDS 10 Data services ‘Functional’ services Offline persistence App dev tools Mobile Device Management SDLC tools Security tools Notification services Tracking & analytics Operating System inc app packaging Device-specific features Identity services Mobile Cloud Service Mobile Cloud Service Integration Cloud SOA Suite Service Bus Identity Cloud Service ADF ERP JET MAF MAF (CDM) Persist. Toolkit DevCSAPI Platform
  • 11.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential TYPES OF MOBILE APP 11 Native Hybrid Progressive Web Apps Platform-specific (multiple teams for different platforms) Cross-platform Cross-platform Ultimate performance Usually acceptable performance Expected to be acceptable performance Native APIs Cordova Cordova(?) This presentation PLATFORMSSPEED DEVICE/OS FEATURES
  • 12.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential WHAT DO YOU NEED* TO DEVELOP HYBRID MOBILE APP? Cordova JET PackagingOffline Phone photo by Terje Sollie from Pexels MAF or * Oracle tools - other tools are available!
  • 13.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential OFFLINE PERSISTENCE • Offline is required in many/most mobile apps to either: – give illusion of better performance – provide application functionality under all network conditions (variable or none) • Biggest challenge is cache coherency across devices – May not be as bad as you think – perhaps first or last “wins” • You may not need to provide offline capability for all functions – Most functions may be read-only anyway; transactional ones may have to wait for connectivity if rare 13 MAF: Container Data Model (fka AMPA) built-in JET: use Oracle’s offline persistence toolkit https://github.com/oracle/offline- persistence-toolkit
  • 14.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential 14 • Real-world ‘field’ environments & Oracle technologies • Oracle MAF • Apache Cordova • Oracle JET for mobile apps • User experience • Learning points & summary
  • 15.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential TRADITIONAL ORACLE TOOL FOR MOBILE APP DEV Mobile Application Framework • Declarative dev env, similar to ADF • JDeveloper IDE (MAF extension) • Java-based (mostly) • Pre-integrated Cordova • Built in navigation, security, login • Model (binding) layer that integrates nicely with SOAP & REST • Discovery feature when using ADF BC exposed as REST APIs • Offline persistence built-in (uses encrypted SQLite database)15 2014 / 4 years ago:
  • 16.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential17 MAF: 02. An Introduction to Oracle Mobile Application Framework (Oracle MAF) https://www.youtube.com/watch?v=4rN1kQncy0E 2014
  • 17.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential MAF DEMO 18
  • 18.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential FIRST TWO APPS: MAF OUTCOMES • Lots of new technologies for the team (ADF supported by MAF consultant): – Android SDK, standard PC build – Emulator, building, deploying to .apk / device – Build server integration – JavaScript (Cordova plus some fixes like the “enter” button on Android keyboard) • App 1: Lots of Java bean & persistence layer debugging – Sub-optimal REST APIs (following data model) – A couple of bugs (fixed in MAF 2.5.1+) • App 2: Much smoother – Reworked both data model & APIs, simplifying app • Once through pilot, rollout was fast & no bug fixes needed 19
  • 19.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential 20 • Real-world ‘field’ environments & Oracle technologies • Oracle MAF • Apache Cordova • Oracle JET for mobile apps • User experience • Learning points & summary
  • 20.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential CORDOVA ARCHITECTURE Bluetooth Serial Barcode Receiver https://cordova.apache.org/docs/en/latest/guide/overview/index.html JavaScript JavaScript Android: Java Physical connection to hardware
  • 21.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential THE LASER SCANNER • Scanner is proprietary feature of the Honeywell hardware – Including hardware buttons on both sides of device • Honeywell-customised flavour of Android – Android Intent (android.scan) for successful scan completed • We used the cordova-plugin-battery-status as an example/starting point for our custom Cordova plug-in https://cordova.apache.org/docs/en/latest/reference/cordova-plugin-battery-status/ We could add more features of the Honeywell APIs/SDK to the plug-in, e.g. enable/disable scan button, multi-scan 22
  • 22.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential THE BLUETOOTH PRINTER • Used BluetoothSerial plug in to communicate with printer https://github.com/don/BluetoothSerial & in npm • Bluetooth needs to be paired • Error handling left a lot to be desired – we’ve made some improvements (PR imminent) Printer control language feels like a step back in time! 23
  • 23.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential 24 • Real-world ‘field’ environments & Oracle technologies • Oracle MAF • Apache Cordova • Oracle JET for mobile apps • User experience • Learning points & summary
  • 24.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential MODERN ORACLE TOOLS FOR MOBILE APP DEV 25 • JavaScript Extension Toolkit (JET) – Integrated & stable collection of open source frameworks – Oracle contributions for visual elements – Many IDEs available for JavaScript – Oracle offline persistence toolkit – Apache Cordova is used to access device features – Deployment to iOS, Android as hybrid apps, but also regular web apps e.g. for desktop usage • Visual Builder Cloud Service (VBCS) – Low-code tool, highly graphical – Runs in the cloud, has a runtime component – Builds regular web apps, but can also build mobile apps to run from cloud – Access to full range of JET components – Export JavaScript code so you can use as JET if you need to go deeper
  • 25.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential JET DEMO 26
  • 26.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential 30 • Real-world ‘field’ environments & Oracle technologies • Oracle MAF • Apache Cordova • Oracle JET for mobile apps • User experience • Learning points & summary
  • 27.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential BACK TO BASICS: OUR USERS • Who are our users? • How IT-literate are they? • What is their working process? – How much focus do they have on the app – How does “happy path” compare to non-standard flows? – Quick wins and process improvement 31 ➢Importance of Business Sponsor & Product Owner ➢Mobile app usage means lots of opinions! ➢Management of expectations
  • 28.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential MOCK-UPS 32
  • 29.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential THE DEVICE Don't underestimate device requirements, even if you think app is simple! Consider: • Processor speed & memory • Screen brightness • Features, e.g. pen, scanning, bluetooth, NFC • Battery life – Replacement batteries – Charging docks • Physical resilience – Drop resistance – Water resistance (or even hygiene, e.g. for hospital use) • Supported lifespan: service & spare parts34
  • 30.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential 35 • Real-world ‘field’ environments & Oracle technologies • Oracle MAF • Apache Cordova • Oracle JET for mobile apps • User experience • Learning points & summary
  • 31.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential LEARNING POINTS • Tool choice is very important, especially due to pace of change • We love the JET cookbook & training, e.g. MOOC • Do mock-ups early and carefully, ahead of dev sprints • Cordova plug-in dev: create test harness to reduce debug scope/cycle time • Give developers real devices – emulators only go so far • CI, automated build & deployment • Automated testing, especially WAN simulation if possible 36 Credit: https://gfycat.com/CompleteDimpledGoitered
  • 32.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential SUMMARY • Plenty of quick win scenarios where employees need to access IT through mobile devices • Oracle JET or MAF, coupled with Cordova, provides mature means to build mobile apps. JET re-uses of JavaScript & desktop skills • Hybrid mobile apps offer good compromise between development flexibility and cost. Keep an eye out for Progressive Web Apps though • Various integration options & cloud services – some overlap so consider carefully • Positive user experience is central to success of your project – consider usage, device, convenience, etc 37
  • 33.
    Copyright © 2018,eProseed and/or its affiliates. All rights reserved. | Confidential IF YOU LIKED THIS YOU MIGHT LIKE… 38 In this room next: HIGHLY RECOMMENDED!