© 2018 MapR Technologies 1
Streaming Architecture:
Surprising Advantages
Ellen Friedman, PhD @Ellen_Friedman
Principal Technologist
26 March 2018 #BayAreaACM
© 2018 MapR Technologies 2
Contact Information
Ellen Friedman, PhD
Principal Technologist, MapR Technologies
Committer Apache Drill & Apache Mahout projects
O’Reilly author
Email efriedman@mapr.com ellenf@apache.org
Twitter @Ellen_Friedman #BayAreaACM
© 2018 MapR Technologies 3
A Shift in Thinking
•  https://%
Image 2018 by SpaceX used under creative commons lisc
https://en.wikipedia.org/wiki/File:Elon_Musk%27s_Tesla_Roadster_(40143096241).jpg
Left Image credit: Astronaut Harrison H. Schmitt. Image NASA
© 2018 MapR Technologies 4
Use	
  a	
  stream	
  instead	
  of	
  
database	
  as	
  shared	
  truth	
  	
  
© 2018 MapR Technologies 5
Traditional Solution – Use a Profile Database
POS
1..n
Fraud
detector
Last card
use
© 2018 MapR Technologies 6
What Happens as You Scale Up?
POS
1..n
Fraud
detector
Last card
use
POS
1..n
Fraud
detector
POS
1..n
Fraud
detector
© 2018 MapR Technologies 7
Shared Database Can Be A Problem
POS
1..n
Fraud
detector
Last card
use
POS
1..n
Fraud
detector
POS
1..n
Fraud
detector
Shared database
causes problems
Big problem is
disagreement about
schema and indexing
© 2018 MapR Technologies 8
Alternative: Use a Stream to Isolate Services
POS
1..n
Fraud
detector
Last card
use
Updater
card activity
© 2018 MapR Technologies 9
Add New Services via the Stream
POS
1..n
Fraud
detector
Last card
use
Updater
Card
location
history
Other
card activity
© 2018 MapR Technologies 10
Changing Implementation Through Isolation
POS
1..n
Last card
use
Updater
POS
1..n
Last card
use
Updater
card activity
Fraud
detector
Fraud
detector
© 2018 MapR Technologies 11
Changing Implementation Through Isolation
POS
1..n
Last card
use
Updater
POS
1..n
Last card
use
Updater
card activity
Fraud
detector
Fraud
detector
© 2018 MapR Technologies 12
Stream	
  transport	
  supports	
  
microservices	
  	
  	
  
© 2018 MapR Technologies 13
Stream-1st Architecture
Real-time
analytics
EMR
Patient Facilities
management
Insurance
audit
A
B
Medical tests
C
Medical test
results
People often start with event
data streamed to a real-time
application (A)
Image © 2016 Ted Dunning & Ellen Friedman from Chap 1 O’Reilly book Streaming Architecture
used with permission
© 2018 MapR Technologies 14
Heart of Stream-1st Architecture: Message Transport
Real-time
analytics
EMR
Patient Facilities
management
Insurance
audit
A
B
Medical tests
C
Medical test
results
The right messaging tool
supports other classes of use
cases (B & C)
Image © 2016 Ted Dunning & Ellen Friedman Ch 1 O’Reilly book Streaming Architecture used with permission
© 2018 MapR Technologies 15
Stream Transport that Decouples Producers & Consumers
P
P
P
C
C
C
Transport Processing
Kafka /
MapR Streams
© 2018 MapR Technologies 16
Features of Good Streaming
•  Persistent
•  Performant
•  Pervasive
© 2018 MapR Technologies 17
Legacy Applications
How Does MapR Solve This?
Big Data 1.0 Applications Next-Gen Applications
MapR Converged Data Platform
High Availability Real Time Unified Security Multi-tenancy Disaster Recovery Global Namespace
Real-Time NoQL Database Stream TransportWeb-Scale Storage
© 2018 MapR Technologies 18
Example
Files
Table
Streams
Directories
Cluster
Volume mount point
© 2018 MapR Technologies 19
With MapR, Geo-Distributed Data Appears Local
stream
Data
source
Consumer
© 2018 MapR Technologies 20
With MapR, Geo-Distributed Data Appears Local
stream
stream
Data
source
Consumer
© 2018 MapR Technologies 21
With MapR, Geo-distributed Data Appears Local
stream
stream
Data
source
ConsumerGlobal Data Center
Regional Data Center
© 2018 MapR Technologies 22
Build a Global Data Fabric
Flexibility & agility to respond as life changes
© 2018 MapR Technologies 23
MapR Streams: Replication Across Data Centers
•  Replication across data centers with
preserved offsets (unlike Kafka)
•  Opens new use cases
Example: Shared inventory in
ad-tech industry
Inventory
model
Global
analytics
Database
Local
state
Inventory
model
Local
state
Data center 1 Data center 2
Central data center
© 2018 MapR Technologies 24
Use Case: Telecommunications
Callers
Towers
cdr data
© 2018 MapR Technologies 25
Streaming in Telecom
•  Data collection & handling happens at different levels
–  tower, local data center, central data center)
•  Batch: Can take 30 minutes per level
•  Streaming: Latency drops to seconds or sub-seconds per level
•  Ability to respond as events occur
•  MapR Streams enables stream replication with offsets across data
centers
© 2018 MapR Technologies 26
Unique to MapR: Manage Topics at Stream Level
•  Many more topics on MapR cluster
•  Topics are grouped together in Stream (different from Kafka)
•  Policies set at the Stream level such as time-to-live, ACEs (controlled
access at this level is different than Kafka)
•  Geo-distributed stream replication (different from Kafka)
Stream
Topic 1
Topic 3
Topic 2
Image © 2016 Ted Dunning & Ellen Friedman from Chap 5 of O’Reilly book Streaming Architecture used with permission
© 2018 MapR Technologies 27
Use Case: Each pump has many sensors
pump
data
Dashboard
C2
topic = p1
p2
p3
p4
p5
p1
p1
p5
© 2018 MapR Technologies 28
Use topics as an organizing principle
© 2018 MapR Technologies 29
Use Case: Financial Services
Data
generator
Transactions
by_stock
by_sender
by_recipient
Transaction
exploder
stock_idx
sender_idx
recipient_idx
Query
service
© 2018 MapR Technologies 30
Modern Manufacturing
Boeing AMRC, University Sheffield
•  IoT enabled “smart tools” on
manufacture floor
•  Respond quickly to new requirements
Images by Bond Bryan Architecture, used with permission
© 2018 MapR Technologies 31
Stream vs Database
•  Can be better for flexibility and multi-tenancy
•  Streams can be 50 – 100x faster than db (no mutation)
•  Faster means less arguments about performance optimization
•  Operations are simpler so works better to share data
•  Don’t have to commit to one type of db: push updates through
stream and let each group use the db they want
© 2018 MapR Technologies 32
MapR Edge Processing with Stream Replication
Data
source
Data
source
Data
source
Report
Data
source
•  Designed to sit at IoT edge
•  Intended to run right next to data- producing
device
© 2018 MapR Technologies 33
MapR Edge
•  Small footprint cluster for remote processing
•  Intended to run right next to the data producing device
–  Unified end-to-end security policy
–  Reliable replication to cloud and data center, even with occasional
connections
•  Small but full MapR data services (files, tables, streams)
–  Normal data protection (snapshots, mirroring, replication)
–  Normal management capabilities (volumes, fine-grained access
control, monitoring)
© 2018 MapR Technologies 34
Who needs MapR Edge?
•  Connected car industry
•  Telecommunications industry
•  Hospitals and medical testing facilities
•  Anyone who benefits from global learning but needs local action
© Ellen Friedman
© Ellen Friedman
©WesAbrams
© 2018 MapR Technologies 35
MapR Edge: Improves Time to Insight
Before Edge With Edge
•  Oil & gas
•  Medical device
•  Car test & dev
48 hours
12 hours
24 hours
< 2 hours
< 15 minutes
< 5 minutes
© 2018 MapR Technologies 36
Additional Resources on Streaming:
O’Reilly book by Ted Dunning & Ellen Friedman © 2016
Read free courtesy of MapR:
https://mapr.com/streaming-architecture-using-apache-kafka-
mapr-streams/
“Streaming Microservices” by Ted Dunning & Ellen Friedman, in
Encyclopedia of Big Data Technologies. Sherif Sakr and Albert
Zomaya, editors. Springer International Publishing, in press 2018.
and
© 2018 MapR Technologies 37
Machine Learning is Everywhere
Image courtesy Mtell used with permission.Images © Ellen Friedman
● ● ●● ●● ●
●
●
●
●● ● ●●●● ●
●
●●● ●● ●●
●
●
●●
●●
●●
●
●
●
●●
●●
●
●
● ●● ●
●
●●
●
● ●● ● ●●
●
●
● ●
●
● ●
●
● ●
●
● ●● ●
●
●●
●
●
●● ●
●
●
●
●
●
● ●● ●●●● ●
●
● ●● ●
●
●
●
●
●
●
●
●
●● ● ●● ●●
●
● ● ● ●●●● ● ●●
●
● ●●●
●
●
●
●
● ●●
●
●● ●●● ● ●
●
●● ●
●
●●
●
●
●
●
●●●●
●
●
● ●
●
●
●
●
●
●
●
●● ●● ●
●
●
● ● ● ●● ●●●●●
●
●
●● ●
● ●
●
● ●●● ●● ●
●
● ●
●
●
●
● ● ●●
●
●
●
● ●
●
●
●●
●
●
●
●
●
● ●
●
●
● ● ●● ● ●● ● ●● ●
●
●
●
●
●
● ●●
●
●
●
●●
●
●● ● ●●
●
●
●● ●● ● ●●
●
●●●
●
● ●●●
●
● ●●● ●
●
●
●
●
●
●
●
●● ●
●
●●
●
●
●
●
●
● ●●
●
● ●●● ● ● ●
● ● ● ●● ●●●
●
● ●
●
●● ● ●●● ● ●●
●
●
●
●
●● ●
●
●
●●● ●
●
●
●● ● ● ●●●●
●
● ●
●
●● ●
●
●
● ●
●
●
●
●● ●●
●
●● ●
●
●● ● ● ●●●● ●● ●● ●●
●
● ●● ● ●
●
●
●●●
●
●
●
●
●
● ●● ●●●
●
● ●●
●
● ●● ●●● ●
●
● ●●
●
●
● ●●● ●● ● ●
●
●
●
●●●
●
●
●● ●●
●
● ● ●
●
● ●●●●
●
●
●
●
●
●
●
●● ●
●
●
●
●● ● ●
●
●
●
●
●
●
●● ●
●
● ●
●
●
●
● ● ● ●● ● ● ●●●● ●●● ●● ●● ●●
●
●
●
●
● ●● ●●
●
●
● ●● ●●● ●● ●● ●●●●
●
●
●●
●
●● ●
●
● ●●●●
●●
●● ●● ●●
●
●● ● ● ●● ●● ●
●
●● ●
●
●
●●
●
●● ● ●
●● ● ●●● ●●● ● ●● ●
●
● ●●
●
● ●● ● ● ●
●●
●●
● ● ●
●
● ●●
●
● ● ●
●
●
●
●●● ● ●●● ●● ● ●●
●
● ●
● ●●
●
● ●
●
● ●● ●●● ●● ●
●
●
●
●● ●
●●
● ●●● ●● ●●
●
●●●● ●● ●
●
●
● ● ●● ●●● ● ● ●
●
●● ●
●
●● ●
●
● ●● ●
●
●● ●●● ●
●
●●● ● ●● ●
●
●
●
●●
●
●
●
● ●● ●●● ●●
●
●
●
●
●
●
●
●
●
●
●●● ●●●● ●●
●
●●●
●
● ●●● ● ●● ●●
●
● ● ● ●
●
●●
●
●●●● ●
●
●● ●●●
●
●●
●
● ●● ●
●
●
●
●
●●
●
●●●● ●● ●
●
●●
●
● ● ● ●
●
●●●●
●
●●●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●● ● ●
●
●
●
●●●
●
●
●
●
●●●● ●●
● ●
●
●
●● ● ●●
●
●● ●● ●
●
●●
●
●●
●
●● ●●
●
●
●
●
●
● ●●
●
● ● ● ●● ●●●● ● ●●● ● ●●
●
●
●
●
●
● ●
●
●●
●
● ●
●
●
●
●
●
● ● ● ●●●
●
●
●●
●
●
●
● ● ●● ●
●
● ● ● ●
● ●
●
●
●
●
● ●● ●●
●●
●●
●
●● ● ●
●
●
●
● ●● ●●●● ●
●
●
●● ●●
●
●●
●
●●● ●●
●
●●
●
● ●
●
●
●
●
●
● ● ●●●
●
●●
●●●●
●
● ●
●
●●
●
●
●
●
●● ● ●●●
●
●
● ●
●
●
●●
●
●
● ●
●
●● ●
●
●● ●● ●● ●●
●
● ●● ● ●
●
●
●
●●
●
●
●
● ●
●
● ● ●●
●
● ●●
●
● ●
●
●
●
●●● ●●
●
●●●● ●●● ●● ●● ● ●● ● ● ●●
●
●● ● ● ●●● ●●
● ●
●
● ● ●●●●
●●●●● ●●● ● ●●● ●● ● ●● ●●
●
●
●
●● ●●●
●
● ●
●
●
●
●
●
●●●●
●
● ●●● ● ●●● ●●● ●● ●● ●
●●●
●
● ●●●● ●●
●
● ●● ●
●
●● ●
●
●● ●●
●
● ●
●
● ●
●
● ●● ●
●
● ●●●●●● ● ●
●
●
●● ●● ●
●
●
●●
●
●● ●
●
●●●
●
●●● ● ●● ●● ●● ●●● ● ●●●
●
●●
●
●
●● ●●● ●●
●
● ●●●● ● ●●
●
●
●● ●●
●
●● ●● ●● ●
●
●●●
●
●●
●
● ● ●●●●● ● ●●
●
●
●
●● ● ●●● ●● ●●
●
●
●
●
●
● ●●●
●
● ●
●
●●● ● ●
●
●
●
● ●
●
●
●
● ●● ●● ●● ● ●
●
●● ●●
●
●●
● ●
●
●
●
●
●
●
● ●● ● ●●● ● ●
●
●●● ●
●
●
●
●
●
●●● ●
●
● ●
●
●
●
●●●
●
● ●
●
●
●
●
● ● ● ●● ●
●
●●● ●● ●●
●
●
●
● ● ●●
●●●
●
●
●
●
● ● ●● ●
●
●
● ●● ●●
●
●
●
●●
●
●● ●
●
●
●●●
●
●● ● ●● ● ●● ●●●
●
●
●
● ● ●
●
●● ●●
●●
●
● ●●●●
●
● ●
●
●
●●
●
●
●
●
●
● ●●
●●
●●
●
●
●●
● ●
●
●●● ● ●
●
●
● ●
●
●●● ●
●
●●● ●● ● ●
●
●● ●
●
●
●
● ●
●
●
● ● ●●
●
●
●
●●● ● ●
●
●
●
●●● ●●
●
●
● ●
●
●●
●
● ●
●
●
● ●
●
●● ● ●● ● ●
●
●● ●●●
●
●● ●
● ●
●
●
●● ●
●
● ●● ● ●● ●● ●●
●
● ● ●●
●
●
●
● ●●
●
●● ● ●● ●●● ●●●● ●
●
● ●●● ● ●
●
● ● ●●● ● ●
●
● ● ●
●
●●● ●● ●●● ●●
●
●●
●● ●●● ●● ●
●
● ●
● ●● ●
●
●
●● ●
●
●
●● ●●
●
●
●
●●
●
●●● ●
●
●
●
●
●
●
● ●
●
● ●●●● ●
●
●●● ● ●●
●
●●● ●● ● ●●
●
●
●
●● ●●
●
●
●● ●
●
●
●
● ●●●
●
●
●
●
●
● ●●
●
● ●●●● ●
●
●
●
●●
●
●● ● ●● ●
●
●
●
●
●●●● ●
●
●
●
● ●● ●
●
●
●
●●
●
●
● ●
●
●
●
●● ●● ●●●●
●
● ● ●
●
● ●● ●
●
●
● ●●● ●
●
● ● ●
●
●
● ●
●
● ●●●
●
● ●
●
●●
●
● ● ●●
●
● ●● ●●●
●
●
●
● ● ●● ●●
●
●
● ●● ●●
●
●●●● ● ●● ●
●
●● ● ●● ● ●● ●
●
●
●
●
●● ●
●
●
●
●
●
●
●
●
●
●● ● ● ●
● ●
●
● ●●●● ● ●● ● ● ●● ●
●
●
●
● ●● ●●●
●
●
● ●
●
●●●
●
●
● ●
●
●
● ● ●● ●●● ●●● ●
●
●
●●
●
●● ●
●
●
●
●
●
●●
●
●
●
●
● ●●●●
●
●
● ●●●●
●
● ●●● ● ●● ●● ●●
●
●
●
●
● ●●● ● ●● ● ● ●
●
●
●
●●● ●
●
●
●●●● ●●●
●
●● ● ●
●●
●
● ●
●
●●
●
●●●
●
● ●● ●● ● ● ●
● ●
●
●●
●
● ●●● ● ●
●
●
●●
●
● ● ●●
●
● ●
●
●●● ●
●
● ● ●
●●
●● ● ●● ●●● ●● ●●●
●
● ●●●
●
● ●●● ● ●
●
●
● ●●● ●●
●●
●
●
● ●
●
●
●
●●● ● ● ●●●
●
●
●
●
●
●
●●
●
● ●●
●
●●●● ●● ●● ● ●● ● ●●●
●
● ● ●
●
●●
●
● ●● ●●●
●
● ●
●
● ● ●●●
●
●
●
●
●
●
●
●● ●
●
●● ●
●
●
●
●●
●
● ●
●
●●●● ●● ●●● ●
●
● ●●
●
●●
●
●● ●
●
● ●●
●
●
●
●
● ●
●
●
●
●
●
●
●●
●
●
●●
●
● ●● ●
●
●
●
●
●
●
● ● ●
●
●
●●● ●●●● ●● ● ●● ● ●●● ●●
●
● ●● ●
●
●●
●●●● ●
●
● ●●● ● ●
●
●
●●● ● ●
●
●●● ● ●● ●
●
●
● ●● ●●
●
●
●
●● ●● ●
●●
●
●
●
● ●●● ●
●
●
● ●
● ●●●● ●●
●
●
●
●
●●● ● ●●●
●
● ●●● ●● ● ● ●● ●● ●● ●
●
●● ●●
●
●
●
●
● ● ●● ●
●
●
●●●● ●
●
●● ●●● ●●
●
● ●●● ●● ●
●
●
● ●●●
●
● ●●
●
●●● ●
●
● ●● ●● ●● ● ●
●
●●●● ●
●
● ●●
●
●● ●● ● ●
●
●
●● ●● ●● ● ● ●● ●
●
●
●
● ●
●
● ●
●
●
●
●
●
●
●
●●
●
●●
● ●● ●●● ● ●●
●
●
● ●
●
●
●
●
●●●
●
● ●
●
●
●
●
●
●
●
●
●●●
●
● ●●
●
●●●● ●
●
●●
●
●
●
●● ● ●●● ●●● ● ●
●
●
●● ●● ●●
●
●● ●●●
●
●
●
●
●● ●●
●
● ● ●
●
● ●
●
●● ●●
●
●
●
●
●
●
●
●
●
●
●●●● ●●● ●●●
●
●● ●●
●
●
●
●
●
●
●
●●● ●
●
● ●●● ● ●●●●●
●
●●● ●
● ●●● ● ●
● ●
●
●● ●● ●●
●
● ●●
●
●●
●
●
●
●
●
●
●
●
● ●
●
●●●
●
● ● ●●● ●
●
● ●● ●●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
● ●● ●
●
●●
●
● ●
●
● ●● ●●● ●
●
●
● ●● ● ● ●● ●● ●
●
●
● ●●● ●●
●
● ●● ● ●●
●
●●
●
● ●●
●
●
●● ●● ●
●
●
●
●●
●
●
●●
● ●
●
●●●● ●
●
●
●
●●●
●
●●●●● ● ●● ● ●
●
●●
●
●
●●● ●●
●
●●
● ●
●
●
●●
● ●
●● ● ● ●
●
● ● ●
●
● ●
●
●●●
●
●●
●
●●● ●●●●
●
●●●
●
●
●● ●●● ● ●
●
●
●
●
●●
●
●● ●● ● ● ●●● ●● ●● ● ●●
●
● ●● ● ●●
●
● ●●
●
●
●
●
●
●
●
●
●
● ●●
●
●●● ● ●
●
●
●
●
●
●● ●●●● ●● ●●
●
●● ●
●
● ●●●
●
●●
●
● ●
●●● ● ●● ●● ● ●
●
● ●●
●
●
● ● ●●● ● ●● ●●● ●●●
●
●
●
●
● ●●
●
●● ● ●
●
●● ●●● ●● ●●● ●
●
●
●
●● ● ●● ● ●
●
●●
●
● ●●
●
●●●● ●
●
●●● ● ●● ●●● ●●
●
●● ●●
●
●
●
●● ●●
●
● ● ●●●●
●
●
●
● ● ●●
●
●● ●
●
●● ●●
●
● ●● ●●
●
●
●●
●
● ●● ●●
●
●
●
● ●●
●
●
●
●
●
● ●●
●
●
●
●
● ● ●● ●●
●
●
●
●
● ●● ●● ●
●
●●● ●●
●
●●
●
● ●
●
●
●● ●●
●
●● ●● ● ● ●
●
●
●
●
●
● ●●
●
●●●
●
●
●
●
●
● ●●● ●●●
●
● ●
●
●● ● ● ●
● ●●● ●● ●●●
●
● ● ●●● ●● ● ●● ●●● ● ●● ●
●
●●
●
●
●
●
● ●
●
●
●●●
●
● ● ●●●●
●
●
●
●●
●
● ●● ●● ● ●
●
●●
●
●
●● ●● ●
●
●
●
●
●
●
●● ●●
●
●
●
● ●●●●
●
●
●
●
●● ●●
●
●● ● ●● ●● ●●
●
●
● ●●● ●● ● ●●●
●
●
●
● ●
●
●
●
●●● ●● ● ●● ● ●
●
●●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
● ●●● ●
●
●●● ● ●● ●
●
●
●
●
●
●
●● ●●● ● ●
●
●● ● ● ●● ● ●
●
● ●●● ●● ●
●
● ●●
●
●
●
●
● ●
●
●
●● ●●●
●
●
●
●●
● ●
●
●● ● ●● ●● ● ●
●
●●●
●
●● ●● ● ●
●
● ●
●
●
●● ● ●●● ●
●
● ●
●
●
●
●● ● ●●
●
●● ● ●
●●
●
●
●
●
●●● ●●● ●●
●
●
●
● ●
●
● ●●
●
●●
●
●
●●
●
●
●
●
●
●●
●
●●
●
●●●
●
●
●● ●
●
● ●●● ●
●
●
●
●
●
● ●
●
● ●● ● ●
●
● ●
●
●
●
●●●● ●●●
●
●
●
●●
●●
●●
●
●
● ●
●
●
●●●
●
●
●
● ● ●
●
●●● ●
●
●● ● ●● ●● ●● ●
●●
●●
●
● ●
●
●
●
● ●● ●
●
●
●
●
●
●
●
●● ●● ● ●● ●
●
● ●
●
● ●
●
●●●
●
●
● ●
●
● ● ● ●
●
●
●● ● ●● ●●
●
●
●
●
● ● ● ●● ●
●
● ●● ●● ●● ● ●
●
●●
●
●
●
●● ●● ●● ●
●
●
●● ●● ●●●●
●
●
●●
●●
●●
●
●
● ● ●● ●
●●
●●●
●
●
●
●
●
●
●●
●
● ●● ●●● ●●
●
●
● ●
●●
●
●
●
●● ●● ● ● ●● ●●
●
● ●●
●
● ●
●
● ●●●●
●
●●
●
● ●● ●● ●
●
● ●● ●
●
●
●
● ●●● ● ●●●●●
●
●●
●
●●
●
● ●●● ● ●
●
● ●●
●
●
●
●
● ●● ●● ●
●
●● ●
●
●
●●● ●●
●
●
●
●
●
●
●
● ●
●
●
● ● ●●● ●●● ●● ● ●● ●● ●●
●
●
●
●
● ●●● ●●● ●● ● ● ●●● ●
●
● ●
●
●●
●
●
●●
●●
●
●●●
●
●●●
●
● ●
●
●
●●●● ● ●● ●● ●● ●●
●
●
●
●●
●
●
●● ●
●
●●
●
● ● ●● ●●●
●
●
●
●
●
●●
●
●
●
● ● ● ● ●● ●●
●
●
●
●
●
●
● ●● ●● ● ●
●
●●
●
●
●
●
●
●
●● ●● ●● ●
●
●
●
●
●
●
●
●●● ●●●●
●
●
● ●
●
●
● ●
●
●● ●●
●
●
●● ● ●
●
● ●
●
●
●
●
●
●
●
●
● ●●● ●
●
●●
●
●●
●
●●● ●
●
● ●● ●● ●
●
●
●●●
●
●● ●
●
●
●
●
● ●●● ●●●● ●●●
●
●
●
●
●
●● ●
●
● ●
●
●
●
● ●●●●
●
● ●
●
●●
●
●
●● ●●●
●
●●●● ● ●●
●
●
● ● ●●
●
●
● ●●
●
●
●
●
●● ●
●
●
●
●
● ● ●●● ●●
●
●
●
●
●
● ●●
●
● ●
●
● ●● ●
●
●● ●● ●●
●
● ●
●
●
●
● ●● ●●
●
●● ●●● ● ●●●●
●
● ● ●●
●
● ●
●
●
●
●● ●● ●●
●
● ●● ●
●
●● ●
●
●
● ●
●
●
●
●
●
●
●●
●
● ●
●
●
● ●● ●●● ●●● ● ● ●●●
●
●●● ● ●
●
●●
●
●
●
● ●
●
● ●
●
●
● ● ●
●
● ●●●●
●
● ●● ● ●● ●●● ●● ●● ● ●● ●●● ●●● ●
●
●● ●● ●
●
● ●●
●
●
● ● ●●●
●
●● ●● ●● ●●
●
● ●● ●●
●
●
●
●●
●
● ●●● ●● ● ●
●
●● ●
●
● ●
●
●●● ●
●●
●●
●
● ●●
●
●
●
●
●●
●
●
●
●
● ●●
●
●
●
●
●
●
●● ●●●
●
●● ●
●
● ●●
●●
● ●
●●●
● ●●●●● ●● ● ●● ● ●● ●
●
● ●●●● ●● ● ●●●
●
●●● ●
●
● ●
●
● ●
●
●
●
● ●●●
●●
●
●
●
●
●
● ●
●●●
● ●●●
●
●
●
●
●
● ●
●
●
●●● ●●● ●●
●
●
●
●
● ● ●● ●
●
●●● ● ●●● ● ●● ● ●●
●
●●
●
●●●●●
●
●
●
● ●
●
● ●● ●
●
●
●
●
●
●
● ●●
●
●
●
●
● ●
●
● ●●●
●
●
●
● ● ●●● ● ● ●●
●
●
●
● ● ●
●
●
● ●● ● ●
●
● ●
●
●● ●● ●● ●●● ●
●
●● ●●●
●
●
● ●
●
● ●● ● ●●
●●●
●
●
●●● ● ●●
●
● ●● ●
●
● ●● ●● ●● ● ● ● ●
●
● ●●
●
●
●
●● ●●●●
●
●●
●
●
●
●
●
●●● ●
●
●● ●●●● ●●
●
●● ●
●●
● ●● ●● ●● ●●
●
● ●● ●● ●
●
●
●
● ●
●
●
● ●
●
●●
●
● ● ●
●
●
●
●
●●
●
●
●
● ●
●
●●
●
● ●● ●
●
● ●
●●● ●●●● ●● ● ● ●
●
● ●● ●●
●
●●● ●
●
●
●
●
●
●
●
●
●●● ● ●● ●●● ●●● ●● ● ●● ● ● ●● ●● ●
●
●
●
●
●
●
● ● ●● ● ●
●
●
●
●●
●
●
●●
●
●
●
●
●●
●
●
●
●
●
●●
●
●●
●
●
● ●
●
● ●●●
●
●
●
●
●● ●●
●●
●●● ●● ●● ●● ●
●
●●● ● ●● ● ●● ●●● ●● ●●
●
●●● ● ●● ●
●
●●● ●
●
● ● ●●● ● ●
●
● ●
●
●●● ● ● ●●● ●
●
●
●● ●●
●
●● ●●
●
●●●
●
●
●●
●
● ●
●
●● ●
●
● ●
●
● ●
●
●
●
●● ●
●
●●● ● ● ●●● ● ●
●
●● ●●● ● ●● ● ●
●
●
●
●
●
● ●●
●
●
●
●
●
● ● ●
●
● ● ●
●
● ●●
●
●
●
● ●● ● ●
●
● ●
●
●
● ●● ●● ●●●
●
● ●●
●
●● ● ●●● ● ●
●
●
●
● ●● ●
●
●●●● ●
●
● ● ● ●●● ●●
●
● ●
●
●
●
● ●
●
●● ●● ●●
●
● ●● ●● ●
●
●
● ●●
●
● ●●●●
●
●
●
●
●
●
●
●
●
●
●
● ●●● ●● ●
●
●● ● ●● ● ● ●● ●●●
●
●
●
● ●●
●●
●
●● ●
●
● ●●● ●● ● ●
●
●● ● ●●
●●●
●
●
●
● ●
●
●●
●
●
●
●
●● ●● ● ●●●●
●
●●
●
●
● ●● ●● ●
●
●● ● ●●
●
●
●
●● ● ●● ●●●●●
●
● ●●
●
● ●●● ● ●● ●● ●●
●
● ●●
●
● ●
●
●
●
● ●
●
● ●●●
●
●
●
●
●
● ●● ●
●
●
●
●
●●
●
● ●● ●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●●●●●● ●● ● ●●
●
● ● ●
●
●
●
● ●
●
● ●● ●●
●
●●
●● ●
●
● ● ●● ●● ●●
●
●
●
●●● ● ●● ● ●●● ● ●● ●● ●● ●
●
● ●●● ● ●●
●
● ●
●
● ●●
●
● ●●●
●
●
●
●●●
●
●
●● ● ●● ● ●●●●
●
● ●●
●
●
●
●
●
●●●● ● ●● ●
●
● ●
●
●
●
●
●
●
●● ●●
●
● ●
●
●● ●●● ●●●●
●
●
●● ●●● ● ●
●
●
●
●●
●
●
●
●
●
●
● ●●
●
●
● ●● ●
●
●● ●
●
●
●
●
●
●
●
●
●
●
●
● ● ●●● ●●
●
● ● ●
●
●● ●● ● ●● ● ●● ●●● ●
●
●
●
●●●●
●
●
●●●● ● ●
●
●
●
●
●● ●
●
●
● ●
●
● ●●● ● ● ●● ●● ●●
●
●
●
●● ●
●
●
●
● ●●
●
●●
●
●
●
●
●● ● ● ●● ●● ●
●
●● ●●
●
●● ● ● ●●●
●
●
●
● ●
●
● ●●● ●●● ●● ● ● ●
●
● ●
●
● ●● ●●● ● ●● ●●●
●
●●
●
●
●●
●
●● ● ●
●
●
●● ●
●
●
●
●
●
●
●● ● ● ●●
●
●
●
●
●
●
●
● ● ● ●● ●● ● ●●●●●●● ● ●
●
●●
●
●● ●● ● ●
●
● ●
●● ●●●●
●
●
●
●
●
●
●●
●
● ●●●
●
●
● ● ●
●
●
●
●
●
●
●
●
●
●
● ●●
●
● ●
●
● ● ●
●
● ●●
●
●●● ●●● ●●● ●
●
●
●●● ● ●
●
● ●● ● ●● ●
●●●●
●
● ●
● ●
●●
●
●● ●
●
● ●● ● ●●
●
● ●●●
●
● ●● ●● ●
●
●●
●
●● ●● ●
●
● ●
●
● ●● ●
●
●●●
●
●●
●●
●●
●
●● ● ●
●
●
●●●● ●
●
● ●● ●●
●
● ● ● ● ●●
●
● ●
●
● ●●● ●● ● ●
●●
●
●● ●● ●● ● ●●
●
●
●
●●●
●
●
●
●
●
●
●
● ●
●
●
●
●
●●● ● ●● ● ●
●
●●●● ●●● ●●●●● ● ● ●
● ● ●●● ● ●●
●
●● ●●
●
●
●●
●
●
●
●
● ● ●
● ● ●●●● ● ●
●
●●
●
●
●
●
● ●●● ●● ●● ●
●●
● ● ●●
●●●●
●
● ●
●
●●● ● ●
●
●
● ● ●● ●● ● ●●●
●
●● ●● ●●● ●
●
● ●
●
●
●
●● ● ●● ●●● ●●●●● ● ● ●
●
●
●
●● ● ●
●
●
●
●
●● ●●●●●● ●●
●
●●
●
●
●
●● ● ●●● ●
●
●
●
●
●
●
●
●● ●
●
●
●
●
●
●
●●
●
●
●
● ● ●
●
●
● ●● ● ●● ●
●
●●
●
●● ●
●
●●●
●
●●●●● ●●
●
●
●
●
●
●
●●●
●
●●
●
●●●●● ●●
●
●●● ●●
●
●
●●●● ●
●
●
●
●
●
●●
● ● ● ●
●●● ●● ●
●
●● ● ●
●
●● ●●
●
●● ●●●●●● ●
●
●
●●
●
●●
●
●
●
● ●● ●
●
●●● ●● ●
●
● ● ●
●
●
●● ●●
●
●
●
● ●●●
●
●
●
● ●●
●
●●●
●
●
●
●
●
●●
●
●
●
●
●●
●
● ●
●
●
●
●
●
●
●●
●
●
●● ● ●● ●● ●● ●●●
●
●
●●● ●
●
●
● ●● ●● ● ●●● ●●
●
●
●
●
●●
●
●
●
●●
●
● ● ●●
●
● ●● ● ●● ●
●
● ●●● ● ●●
● ●
●
●
●
●
●
● ● ●● ●
●
●●●
●
●●● ●
●
● ● ●●
●
●
●
●
●
●
●
●
●
●
● ● ●●●● ● ●● ●●● ● ● ●
●●
●
●
● ●●● ●●●
●
● ● ●●
●
● ●
●
●● ● ●
●
●
●●
●●
● ●●● ●●● ●
●
●
●● ● ●●● ●
●
● ● ●●● ●
●
● ●●
●
●
●
●
●
●
●● ●●
●
●●
●
●
● ●●● ●●
● ●●
● ●●
●
●● ● ●●●
●
● ●● ●● ●●
●
●●
●●
● ● ●
●
●●
●
●
●
●●● ●
●
●
●
● ●
●
● ● ●
● ●
●
● ●●
●
●●●● ●●
●
●
●
●
●
●
●● ●●
● ●
●
●
●●● ●● ● ●
●
● ●
●
●
●
● ●
●
●
● ●● ● ●● ● ●●● ●
●
●● ●
●
●
●
●
●●
●
●
●●●
●
●
●●
●
● ● ●● ●● ●●● ●● ●
●
●●
●
●
●
●
●
●
●
●
●
●●
●
● ●
●
●
● ● ●● ●
●
● ●
●
●● ● ● ● ●
●
●●
●
●
●
● ●
●
● ●● ● ●● ● ● ●● ●
●
● ●●
●
●● ●
●
●
● ●●
●
●
●●● ●●
● ●
● ● ●●● ● ●●●
●
●● ●● ●●● ●●● ●
●
●
● ● ●
●
● ●
●
● ● ●
●
●
●●
●
●
● ●● ●● ●●● ● ●
●
●
●
●
●●● ● ●● ●
●
●● ●●●●
●
●●
●
●●
●
● ●
●●●● ●●
●
● ●●●
●
● ●● ● ●●●
●
●●
●
● ●
●
●
●●●
●
● ●● ●
●
●
●
●●
●
● ●●
●
●
● ●●
●
● ●
●
● ●●
●
●
●
●
●
●● ●●
●
● ●● ●● ●● ●● ●
●
● ●
●
●
●
●
●● ●
●
●
● ● ●●● ●
●
●
●
●●
●
● ● ●
●
●
●
●● ●
●
●
● ● ●
●
●
●●
●
●● ● ●●●
●
● ●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
● ●
●
●
●
●●
●
● ●
●
●
● ●
●
●
●● ●●●● ●● ●●● ●● ●● ●
●
●● ●
●
●
●
●
●
●
●
●
● ● ●● ● ●●● ●● ●●
●
●●
●
●
●
● ●
●
● ●●●● ●●● ●● ●●
●
● ●●
●
●
●
●
●●● ●
●
●
●
●●
●
●●● ● ●● ●● ●
●
●
●
●
●
●● ●
●
● ●●
●
●
●
●● ●
●
●● ● ●
●
●
●
● ●
●
● ●● ●
●
●
● ●
●● ●
●
●●●
●
●●
●
● ● ●● ● ●
●
●
●
●● ●● ●● ●
● ●
●●
●
●
●
● ●● ●● ●
●
● ●●●● ●● ●
●
●● ● ● ●● ●●
●
●
●
● ●●● ●● ●●●
●
●
●
●
●
●
●
●
● ● ●●
●
● ●●● ●
●
●
●
●●
●
●●● ●
●
●
●● ●● ●●● ●
●
●
●
●
●
●●
●
●
●
● ●● ● ●● ●●● ● ●
●
●
● ●
●
● ●● ●●●
●
● ●
●
●● ● ●● ●● ●●● ●
●
● ● ●● ●●
●
●●
●
●● ●● ●● ●
●
●
●
●
●
●●● ●●
●
●●● ●●
●
●●
●
●
●●●● ●
●
●
● ●●●
●
● ● ●● ●● ●●
●
●
●
●
●●
●●
●
●●
●
●● ●
●
●
●
●
●
●
●● ●
●
● ●●●
●
●●
●
●
●●● ●● ● ●● ● ●●●●● ●●
●
●●● ● ●● ●●●
●
●●● ●
●
●●●
●
●
●
●
●●● ●● ●
●
●
●
●● ●●
●
●
●●
●●
●
●
●●
●
●●● ●●● ●
●
● ●
●
● ●● ●
●
● ●
●
●
●●
●
●●
●
●●●
●
●
●
● ●
●
● ●
●
●
● ● ●●●● ●
●
●● ●● ●● ●
●
●●● ● ●● ●
●
●● ●● ●● ●● ●
●
●
●
●● ●●●● ●● ●
●●●
●
●
●●
●
●
●
● ●
●
●● ●
●
●
●●● ● ●● ●●●● ● ●● ●● ●●● ●● ● ●
●
●
●
● ●●● ●●
●
●
●
●
●
●
● ●●● ● ●● ●● ●●● ●●
●
●●
●
●●●●
●
●● ●
●
●
●
● ● ●●●● ●●● ● ●●● ●●
●
●●
●
●
●
● ●
●
● ●
●
●●
●
● ●●
●
●
●●
●
●
●
●● ●●
●
●●● ●
●
● ●● ●●
●
●● ●
●
●● ●
●
●
● ●● ●
●
●●
●
●
●
●●
●
●●
●
●
● ● ●●
●
●
●
●●
●
● ●
●
●● ●●
●
● ● ● ●●● ●●
●
●
●
●
● ●● ●
●
●● ●
●
●
●
●
●
●
●
● ● ●
●
●● ● ●
●
●●
●
● ●●
●
●
●
●
●●
● ● ●● ●●● ●
●
●
●
●
●
●
●●● ●
●
●
● ●
●
● ●
●
●
●
●
●
●
● ●● ●● ● ●●● ●●
●
●
●●
●
●
●
●● ●● ● ●● ●
●
●
●
●
●● ●
●
●●
●
●
● ● ●● ●●● ●● ●● ●●● ● ● ●●
●●●●● ● ●●●● ●
●
●●
●
● ●● ●● ● ●● ● ●● ●●
●
●
●
●● ● ●●●
● ●
●
●
●
●
●
●
●
● ●
●
●●● ●● ●●●● ●●
●
●
●
●
● ●● ●● ● ●●
●
●
● ●●
●
●
●
● ● ●● ●
●
●●
●
●
●
● ● ●●● ●
●
●
●
●●
●
● ●●● ●●●
●
● ●● ●●●●
●
● ●●
●
● ● ●●●
●
●● ●●● ●
●
● ●● ● ●
●
●
●
●●
●
● ● ●
●
●
●
●
●
● ●●● ●
●
● ● ●
●●
●
●
● ●●● ● ●
●
●●● ● ●●
●
● ●● ● ●●
●
●● ●●● ● ●●● ●
●
●
●
● ●● ●● ●● ●
●
● ●
●
●
● ●
● ●●● ●●
●
● ●
●
●
●
●
●
● ●●
●●●●
●
●●
●
● ● ●
●●
●
●● ●●
●
●
●
●
●
●
● ●●
●
●
●
●
● ●● ●● ●● ● ● ●
●
●
●
●● ●● ●●●● ●
●
●
●
●
●
●● ●●● ●● ●● ● ●
●
●●
●
●
● ●
●
● ●●
●
● ●
●
●●
●
●
● ●● ●●
●
●● ●
●
●
●
● ●
●
●● ●
●
●●
●
●
● ●
● ●
●
●
●
●● ●
●
●● ●●● ● ●●
●
●
●
● ●● ●●●● ●
●
●
●
●
● ●
●
●● ● ●● ● ●
●
● ● ●●● ●●●
●
●
● ●
●●
● ●
●
●
●
●
●●
●
●
● ●● ●●●
●
●● ●● ● ● ● ●● ●●● ●● ●● ●
●
● ● ●●
●
●●
●
●
●
●
●
●
● ●●●
●
●● ●● ●●●
●
● ●● ● ● ●
●
●●● ● ●● ●●●● ●●
●
●
●
●● ●●
●
●
● ● ●● ●
●
●
●
● ●
●
●
●
●
●
●
●
●
●●● ● ●
●
●
●
●
● ●● ● ●
●
●
●
●●● ● ●
●
●
●
●
●
●
●
●
●● ●● ●●
●
●
●
● ●●●
●
●
●
●
● ●●
●
●
●
● ●
●
●● ●
●
● ●● ●
●
● ●● ●●
●
●●●●
●
●
●
●
●●●
●
● ●● ●
●
●
●●
●
●● ●
●
●
●●●
●
●● ● ●● ●●
●
●● ● ●● ●● ●
●
● ● ●● ● ●● ● ●
●
●●● ●●
●
●
●
●
● ● ●●● ●
●
●●
●
●●●
● ●
● ●
●
●
●
●●
●
●
●
●
●
●
●● ●
●
● ●● ●●●
● ●
● ●● ●● ● ●●
●
●●● ●●
●
●
●
●
●
●
●
●
● ●● ●●●●● ● ●● ●● ●●
●●
●● ● ● ●● ● ●● ●
●
●
●
●
●
●
● ● ●● ● ● ● ●
● ●● ● ●
●
●● ● ●
●
●● ●●
●
● ● ●●●●
●
● ●
●
●
●
●
●
●● ●● ●
●
● ● ●
●
● ●●
●
●●
●
●
●
●
●
●● ●●
●
● ● ●● ●
●●●
●
● ● ●● ●
●
●
● ●
●
●● ●●
●
●●● ●●● ● ●●
●
● ●●●
●
● ● ●
●●
●
●
● ●●● ● ● ●
●
●
●
●●
●
●● ●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
● ● ●
●
●
●
●
●
●
●● ●● ●
●
●●● ●
●
●
●
●● ●●
●
● ●
●
● ● ●●● ●
●
●
●
●
●
●
●
● ● ● ●
●
●● ● ●
●
●● ●●●● ●● ●
●
● ●● ●● ● ●
●
●●
●
●
●● ●
●
● ●
●
●
●
●●
●
●● ● ● ●●
●
●
●
● ●
●
● ●
●
●
● ● ●●
● ●
● ●● ●●● ●
●
●
● ● ●●
●
●
●
● ●●
●
●
●
● ●
●
●● ●●
●
●●
●
●●● ●
●
●
●● ●●● ●●
●
●●
●
●
● ●
●
●● ●●● ●●● ●● ●
●
●
●
●
●
●
●
●
●●● ● ●●● ●● ●● ●
●
●
●
●
● ●●● ● ●
●●●●● ●● ●● ●
●
● ● ●
●
● ●●
●
●
●
●●
●
●● ● ● ● ●● ●
●
●
● ●●
●●
●
●
●
●●
●
● ● ●
●
●● ●● ●●
●
●
●
●
●
●
●
● ●●●●●
●
● ●● ● ●
●
●
●
●● ● ●●
●
● ●●
●
●
●
● ●●
●
●
●
●
● ●
●
●
●
●●●
●
●
● ●● ●●
●
●●●●
●
● ● ●● ●● ●●
●
●
●
●
● ●● ●●●
●
●
●
●● ●
●
●●
●
● ●● ●● ●●● ●●●
●
● ●
●
● ● ●
●
● ●
● ●● ●● ●●
●
●
●
●
● ●
●
● ●●● ●
●
●
●●●
●
●
●
●● ●● ● ●● ● ●
●
● ●
●
●
● ●
●
● ● ●
●
●
●
●● ●●
●
●
●
●
● ●●
●
●
●● ●
●
●●●
●
●
●
● ●● ●●●
●
●
●
●●●● ●● ● ●
●
●
●
●● ● ● ● ●●
●
●
●
●
●
●
● ● ●
●
●●
●
● ●
●
●
●
●● ●
●
● ● ●●● ● ●
●
●
●●
●
●●
●
●
● ●●● ●●● ●● ●● ●●
●
● ●●●●● ●
●
●
●●
●●● ● ● ●● ●
●
● ● ●●●
●
● ●
●
●
● ●●
●●
●
●
●
●
●
●● ●●●●●
●
● ●
●
● ●●
●
●●● ●
●
● ● ●
●
● ●
●
●●● ●
●
● ● ●● ● ●● ● ●●
●
●
● ● ●●
●
●
●●
● ●
●
●
●
●
●● ●
●
●● ●
●
●
● ●
●
●●●
●
● ●●
●
●
●
●
●
●
●
●
●●●
●
● ●● ●
●
●●
●
●
●
●
●
●●●
●
●
●
● ●
●
●
●●● ● ●● ● ●● ●● ● ●
●
●
●
●
●
●●
●●
●
●●● ●●● ●
●
● ● ●
●
●● ●
●
●●
● ●
●● ●
●
●●● ●
●
● ●
●
●
● ● ●
●
● ●●●
●
●●
● ● ●● ●●●●
●
●● ●
●
●
●●
●
● ●● ●● ●● ●●●
●
●
●●●
●
●● ●
●
●● ●●
●
●
●
●●
●
●
●
●
●
●
● ● ● ● ●●
●
●● ●●● ● ● ●●
●
●
●
●
●
●
● ●●
●
●●
●
●● ●
●
●
●
●
●
●● ● ●●● ● ● ●
●
●
●
● ●●●● ●● ●● ● ●●● ● ●● ●●● ● ●
●
●
●
●
●● ● ●●●●
●
●
●
●
●
● ● ●●● ●●
●
● ●●●●
●
● ●●
●
●
●
● ●● ● ●
●
●
● ●
●
● ● ●●● ●● ●
●
●
●
● ●●
●
● ● ●●● ●
●
● ●
●
●
●
● ●
●
●
●
● ●● ● ●● ●●
●
●
●
●
●
● ●●●
●
● ●●
●
●●
●
●● ● ● ●●●
●
●
●
●
●
● ●● ●
●
●
● ●●●
●
●
●
●
●●● ●●● ●●
●
●● ●
●
●
● ● ●
●
●
●
● ●
●
●
●
● ● ●●
●
● ●
●
●
●
● ●● ●● ● ●●● ● ●
●
●● ●● ● ●
●
●
●
●● ●● ●●
●
●
●● ● ●
●
● ●●●
●
●
● ●● ● ●●● ● ● ●●
●
●
●● ●
●
● ●
●
●
●
●
●
● ●●● ●●
●
● ●
●
●● ●
●
●
●● ●
● ●
●●
●
●● ●●
●
●
●
●● ●● ●
●
● ●● ●●●
●
●
●
● ●
●
●
●
● ●
●
●● ●
●
●
● ●● ●● ● ●● ●
●
●
● ●
●
● ● ●● ● ●●●
●
●●
●
●
●
●● ●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
● ●
●
●●●● ●
●
● ●● ●
●
●● ●
●
●
●
●● ● ●
●
● ●● ●
●
●● ●●
●
●
●● ●● ● ●
●
●
● ● ● ●●● ● ●●
●
●●
●
●●
●
●
●
● ●● ●
●
● ●●● ● ● ●
●
●●● ●● ●
●
●
●
● ●●
● ●
●
●
●
●●
●●
●
●
●●● ●● ●●● ● ●● ●● ●●
●
●●● ●
●
●
●● ● ● ●●
●
● ●●● ●
●
●●● ●●● ● ●● ● ● ●
●●
●● ● ●
●
●
●
●
● ●● ● ●
●
● ●●
●
● ●●
●
●●●
●
● ●● ●●
●
●
●
● ●
●
● ●
●
●●●●● ●● ● ●●●
●
● ●●
●
●
−2 0 2 4
0246
Raw Scores
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
● ●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●●
●
●
●
●
●
●
● ●
●
●
●
●
●
●●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
●
0.0 0.5 1.0
0.00.51.0
Q−Q plot
© 2018 MapR Technologies 38
How do you make machine learning
successful?
© 2018 MapR Technologies 39
Is it the algorithm? the model? the ML tool?
https://mapr.com/blog/tensorflow-mxnet-caffe-h2o-which-ml-best/
© 2018 MapR Technologies 40
90% of effort in successful
machine learning isn’t the
algorithm or the model…
It’s the logistics
© 2018 MapR Technologies 41
New book: how to manage machine learning models
Download free pdf or read free online via @MapR:
https://mapr.com/ebook/machine-learning-logistics/
“Rendezvous Architecture” by Ted Dunning & Ellen Friedman, in
Encyclopedia of Big Data Technologies. Sherif Sakr and Albert
Zomaya, editors. Springer International Publishing, in press 2018.
and
© 2018 MapR Technologies 42
Please support women in tech – help build
girls’ dreams of what they can accomplish
© Ellen Friedman 2015#womenintech #datawomen
© 2018 MapR Technologies 43
From one “woman in tech”:
Thank You !
Image © Ellen Friedman
© 2018 MapR Technologies 44
Contact Information
Ellen Friedman, PhD
Principal Technologist, MapR Technologies
Committer Apache Drill & Apache Mahout projects
O’Reilly author
Email efriedman@mapr.com ellenf@apache.org
Twitter @Ellen_Friedman #BayAreaACM

More Related Content

PPTX
Machine Learning Logistics
PPTX
Streaming Architecture including Rendezvous for Machine Learning
PPTX
Machine Learning logistics
PPTX
Tensor Abuse - how to reuse machine learning frameworks
PPTX
ML Workshop 1: A New Architecture for Machine Learning Logistics
PPTX
Machine Learning for Chickens, Autonomous Driving and a 3-year-old Who Won’t ...
PDF
Live Machine Learning Tutorial: Churn Prediction
PDF
Applying Machine Learning to Live Patient Data
Machine Learning Logistics
Streaming Architecture including Rendezvous for Machine Learning
Machine Learning logistics
Tensor Abuse - how to reuse machine learning frameworks
ML Workshop 1: A New Architecture for Machine Learning Logistics
Machine Learning for Chickens, Autonomous Driving and a 3-year-old Who Won’t ...
Live Machine Learning Tutorial: Churn Prediction
Applying Machine Learning to Live Patient Data

What's hot (14)

PDF
Graph Databases and Machine Learning | November 2018
PDF
Graph Gurus Episode 3: Anti Fraud and AML Part 1
PDF
Graph Gurus Episode 1: Enterprise Graph
PDF
Plume - A Code Property Graph Extraction and Analysis Library
PPTX
Hadoop and R Go to the Movies
PDF
Graph Gurus 21: Integrating Real-Time Deep-Link Graph Analytics with Spark AI
PDF
Graph Gurus 15: Introducing TigerGraph 2.4
PDF
Fast Parallel Similarity Calculations with FPGA Hardware
PDF
Using Graph Algorithms for Advanced Analytics - Part 2 Centrality
PDF
Transform Your Telecom Operations with Graph Technologies
PDF
Network and IT Ops Series: Build Production Solutions
PPTX
Charles sonigo - Demuxed 2018 - How to be data-driven when you aren't Netflix...
PDF
Neo4j GraphDay Seattle- Sept19- in the enterprise
PDF
Graph Gurus Episode 9: How Visa Optimizes Network and IT Resources with a Nat...
Graph Databases and Machine Learning | November 2018
Graph Gurus Episode 3: Anti Fraud and AML Part 1
Graph Gurus Episode 1: Enterprise Graph
Plume - A Code Property Graph Extraction and Analysis Library
Hadoop and R Go to the Movies
Graph Gurus 21: Integrating Real-Time Deep-Link Graph Analytics with Spark AI
Graph Gurus 15: Introducing TigerGraph 2.4
Fast Parallel Similarity Calculations with FPGA Hardware
Using Graph Algorithms for Advanced Analytics - Part 2 Centrality
Transform Your Telecom Operations with Graph Technologies
Network and IT Ops Series: Build Production Solutions
Charles sonigo - Demuxed 2018 - How to be data-driven when you aren't Netflix...
Neo4j GraphDay Seattle- Sept19- in the enterprise
Graph Gurus Episode 9: How Visa Optimizes Network and IT Resources with a Nat...
Ad

Similar to Surprising Advantages of Streaming - ACM March 2018 (20)

PDF
DataOps: An Agile Method for Data-Driven Organizations
PDF
Big Data LDN 2018: 7 SUCCESSFUL HABITS FOR DATA-INTENSIVE APPLICATIONS IN PRO...
PDF
Big Data LDN 2018: DATA OPERATIONS PROBLEMS CREATED BY DEEP LEARNING, AND HOW...
PDF
Container and Kubernetes without limits
PDF
7 Habits for Big Data in Production - keynote Big Data London Nov 2018
PPTX
Designing data pipelines for analytics and machine learning in industrial set...
PDF
Big Data LDN 2017: Real World Impact of a Global Data Fabric
PDF
Containers and Kubernetes without limits
PPTX
MapR Edge : Act Locally Learn Globally
PPTX
Where is Data Going? - RMDC Keynote
PPTX
How to Get Going with Kubernetes
PDF
Big Data LDN 2018: PROGRESS FOR BIG DATA IN KUBERNETES
PPTX
Geo-Distributed Big Data and Analytics
PDF
Graph Gurus Episode 8: Location, Location, Location - Geospatial Analysis wit...
PPTX
CEP - simplified streaming architecture - Strata Singapore 2016
PDF
Streaming Goes Mainstream: New Architecture & Emerging Technologies for Strea...
PPTX
Machine Learning Success: The Key to Easier Model Management
PDF
Predictive Maintenance Using Recurrent Neural Networks
PDF
Streaming patterns revolutionary architectures
PDF
Streaming in the Extreme
DataOps: An Agile Method for Data-Driven Organizations
Big Data LDN 2018: 7 SUCCESSFUL HABITS FOR DATA-INTENSIVE APPLICATIONS IN PRO...
Big Data LDN 2018: DATA OPERATIONS PROBLEMS CREATED BY DEEP LEARNING, AND HOW...
Container and Kubernetes without limits
7 Habits for Big Data in Production - keynote Big Data London Nov 2018
Designing data pipelines for analytics and machine learning in industrial set...
Big Data LDN 2017: Real World Impact of a Global Data Fabric
Containers and Kubernetes without limits
MapR Edge : Act Locally Learn Globally
Where is Data Going? - RMDC Keynote
How to Get Going with Kubernetes
Big Data LDN 2018: PROGRESS FOR BIG DATA IN KUBERNETES
Geo-Distributed Big Data and Analytics
Graph Gurus Episode 8: Location, Location, Location - Geospatial Analysis wit...
CEP - simplified streaming architecture - Strata Singapore 2016
Streaming Goes Mainstream: New Architecture & Emerging Technologies for Strea...
Machine Learning Success: The Key to Easier Model Management
Predictive Maintenance Using Recurrent Neural Networks
Streaming patterns revolutionary architectures
Streaming in the Extreme
Ad

Recently uploaded (20)

PPTX
Topic 5 Presentation 5 Lesson 5 Corporate Fin
PDF
Introduction to Data Science and Data Analysis
PDF
Systems Analysis and Design, 12th Edition by Scott Tilley Test Bank.pdf
PDF
OneRead_20250728_1808.pdfhdhddhshahwhwwjjaaja
PDF
Optimise Shopper Experiences with a Strong Data Estate.pdf
PDF
Global Data and Analytics Market Outlook Report
PDF
Transcultural that can help you someday.
DOCX
Factor Analysis Word Document Presentation
PPTX
Business_Capability_Map_Collection__pptx
PPTX
retention in jsjsksksksnbsndjddjdnFPD.pptx
PPTX
DS-40-Pre-Engagement and Kickoff deck - v8.0.pptx
PDF
Microsoft 365 products and services descrption
PDF
REAL ILLUMINATI AGENT IN KAMPALA UGANDA CALL ON+256765750853/0705037305
PDF
Data Engineering Interview Questions & Answers Data Modeling (3NF, Star, Vaul...
PDF
Introduction to the R Programming Language
PDF
Navigating the Thai Supplements Landscape.pdf
PPTX
Pilar Kemerdekaan dan Identi Bangsa.pptx
PPT
Image processing and pattern recognition 2.ppt
PPTX
New ISO 27001_2022 standard and the changes
PPT
Predictive modeling basics in data cleaning process
Topic 5 Presentation 5 Lesson 5 Corporate Fin
Introduction to Data Science and Data Analysis
Systems Analysis and Design, 12th Edition by Scott Tilley Test Bank.pdf
OneRead_20250728_1808.pdfhdhddhshahwhwwjjaaja
Optimise Shopper Experiences with a Strong Data Estate.pdf
Global Data and Analytics Market Outlook Report
Transcultural that can help you someday.
Factor Analysis Word Document Presentation
Business_Capability_Map_Collection__pptx
retention in jsjsksksksnbsndjddjdnFPD.pptx
DS-40-Pre-Engagement and Kickoff deck - v8.0.pptx
Microsoft 365 products and services descrption
REAL ILLUMINATI AGENT IN KAMPALA UGANDA CALL ON+256765750853/0705037305
Data Engineering Interview Questions & Answers Data Modeling (3NF, Star, Vaul...
Introduction to the R Programming Language
Navigating the Thai Supplements Landscape.pdf
Pilar Kemerdekaan dan Identi Bangsa.pptx
Image processing and pattern recognition 2.ppt
New ISO 27001_2022 standard and the changes
Predictive modeling basics in data cleaning process

Surprising Advantages of Streaming - ACM March 2018

  • 1. © 2018 MapR Technologies 1 Streaming Architecture: Surprising Advantages Ellen Friedman, PhD @Ellen_Friedman Principal Technologist 26 March 2018 #BayAreaACM
  • 2. © 2018 MapR Technologies 2 Contact Information Ellen Friedman, PhD Principal Technologist, MapR Technologies Committer Apache Drill & Apache Mahout projects O’Reilly author Email efriedman@mapr.com ellenf@apache.org Twitter @Ellen_Friedman #BayAreaACM
  • 3. © 2018 MapR Technologies 3 A Shift in Thinking •  https://% Image 2018 by SpaceX used under creative commons lisc https://en.wikipedia.org/wiki/File:Elon_Musk%27s_Tesla_Roadster_(40143096241).jpg Left Image credit: Astronaut Harrison H. Schmitt. Image NASA
  • 4. © 2018 MapR Technologies 4 Use  a  stream  instead  of   database  as  shared  truth    
  • 5. © 2018 MapR Technologies 5 Traditional Solution – Use a Profile Database POS 1..n Fraud detector Last card use
  • 6. © 2018 MapR Technologies 6 What Happens as You Scale Up? POS 1..n Fraud detector Last card use POS 1..n Fraud detector POS 1..n Fraud detector
  • 7. © 2018 MapR Technologies 7 Shared Database Can Be A Problem POS 1..n Fraud detector Last card use POS 1..n Fraud detector POS 1..n Fraud detector Shared database causes problems Big problem is disagreement about schema and indexing
  • 8. © 2018 MapR Technologies 8 Alternative: Use a Stream to Isolate Services POS 1..n Fraud detector Last card use Updater card activity
  • 9. © 2018 MapR Technologies 9 Add New Services via the Stream POS 1..n Fraud detector Last card use Updater Card location history Other card activity
  • 10. © 2018 MapR Technologies 10 Changing Implementation Through Isolation POS 1..n Last card use Updater POS 1..n Last card use Updater card activity Fraud detector Fraud detector
  • 11. © 2018 MapR Technologies 11 Changing Implementation Through Isolation POS 1..n Last card use Updater POS 1..n Last card use Updater card activity Fraud detector Fraud detector
  • 12. © 2018 MapR Technologies 12 Stream  transport  supports   microservices      
  • 13. © 2018 MapR Technologies 13 Stream-1st Architecture Real-time analytics EMR Patient Facilities management Insurance audit A B Medical tests C Medical test results People often start with event data streamed to a real-time application (A) Image © 2016 Ted Dunning & Ellen Friedman from Chap 1 O’Reilly book Streaming Architecture used with permission
  • 14. © 2018 MapR Technologies 14 Heart of Stream-1st Architecture: Message Transport Real-time analytics EMR Patient Facilities management Insurance audit A B Medical tests C Medical test results The right messaging tool supports other classes of use cases (B & C) Image © 2016 Ted Dunning & Ellen Friedman Ch 1 O’Reilly book Streaming Architecture used with permission
  • 15. © 2018 MapR Technologies 15 Stream Transport that Decouples Producers & Consumers P P P C C C Transport Processing Kafka / MapR Streams
  • 16. © 2018 MapR Technologies 16 Features of Good Streaming •  Persistent •  Performant •  Pervasive
  • 17. © 2018 MapR Technologies 17 Legacy Applications How Does MapR Solve This? Big Data 1.0 Applications Next-Gen Applications MapR Converged Data Platform High Availability Real Time Unified Security Multi-tenancy Disaster Recovery Global Namespace Real-Time NoQL Database Stream TransportWeb-Scale Storage
  • 18. © 2018 MapR Technologies 18 Example Files Table Streams Directories Cluster Volume mount point
  • 19. © 2018 MapR Technologies 19 With MapR, Geo-Distributed Data Appears Local stream Data source Consumer
  • 20. © 2018 MapR Technologies 20 With MapR, Geo-Distributed Data Appears Local stream stream Data source Consumer
  • 21. © 2018 MapR Technologies 21 With MapR, Geo-distributed Data Appears Local stream stream Data source ConsumerGlobal Data Center Regional Data Center
  • 22. © 2018 MapR Technologies 22 Build a Global Data Fabric Flexibility & agility to respond as life changes
  • 23. © 2018 MapR Technologies 23 MapR Streams: Replication Across Data Centers •  Replication across data centers with preserved offsets (unlike Kafka) •  Opens new use cases Example: Shared inventory in ad-tech industry Inventory model Global analytics Database Local state Inventory model Local state Data center 1 Data center 2 Central data center
  • 24. © 2018 MapR Technologies 24 Use Case: Telecommunications Callers Towers cdr data
  • 25. © 2018 MapR Technologies 25 Streaming in Telecom •  Data collection & handling happens at different levels –  tower, local data center, central data center) •  Batch: Can take 30 minutes per level •  Streaming: Latency drops to seconds or sub-seconds per level •  Ability to respond as events occur •  MapR Streams enables stream replication with offsets across data centers
  • 26. © 2018 MapR Technologies 26 Unique to MapR: Manage Topics at Stream Level •  Many more topics on MapR cluster •  Topics are grouped together in Stream (different from Kafka) •  Policies set at the Stream level such as time-to-live, ACEs (controlled access at this level is different than Kafka) •  Geo-distributed stream replication (different from Kafka) Stream Topic 1 Topic 3 Topic 2 Image © 2016 Ted Dunning & Ellen Friedman from Chap 5 of O’Reilly book Streaming Architecture used with permission
  • 27. © 2018 MapR Technologies 27 Use Case: Each pump has many sensors pump data Dashboard C2 topic = p1 p2 p3 p4 p5 p1 p1 p5
  • 28. © 2018 MapR Technologies 28 Use topics as an organizing principle
  • 29. © 2018 MapR Technologies 29 Use Case: Financial Services Data generator Transactions by_stock by_sender by_recipient Transaction exploder stock_idx sender_idx recipient_idx Query service
  • 30. © 2018 MapR Technologies 30 Modern Manufacturing Boeing AMRC, University Sheffield •  IoT enabled “smart tools” on manufacture floor •  Respond quickly to new requirements Images by Bond Bryan Architecture, used with permission
  • 31. © 2018 MapR Technologies 31 Stream vs Database •  Can be better for flexibility and multi-tenancy •  Streams can be 50 – 100x faster than db (no mutation) •  Faster means less arguments about performance optimization •  Operations are simpler so works better to share data •  Don’t have to commit to one type of db: push updates through stream and let each group use the db they want
  • 32. © 2018 MapR Technologies 32 MapR Edge Processing with Stream Replication Data source Data source Data source Report Data source •  Designed to sit at IoT edge •  Intended to run right next to data- producing device
  • 33. © 2018 MapR Technologies 33 MapR Edge •  Small footprint cluster for remote processing •  Intended to run right next to the data producing device –  Unified end-to-end security policy –  Reliable replication to cloud and data center, even with occasional connections •  Small but full MapR data services (files, tables, streams) –  Normal data protection (snapshots, mirroring, replication) –  Normal management capabilities (volumes, fine-grained access control, monitoring)
  • 34. © 2018 MapR Technologies 34 Who needs MapR Edge? •  Connected car industry •  Telecommunications industry •  Hospitals and medical testing facilities •  Anyone who benefits from global learning but needs local action © Ellen Friedman © Ellen Friedman ©WesAbrams
  • 35. © 2018 MapR Technologies 35 MapR Edge: Improves Time to Insight Before Edge With Edge •  Oil & gas •  Medical device •  Car test & dev 48 hours 12 hours 24 hours < 2 hours < 15 minutes < 5 minutes
  • 36. © 2018 MapR Technologies 36 Additional Resources on Streaming: O’Reilly book by Ted Dunning & Ellen Friedman © 2016 Read free courtesy of MapR: https://mapr.com/streaming-architecture-using-apache-kafka- mapr-streams/ “Streaming Microservices” by Ted Dunning & Ellen Friedman, in Encyclopedia of Big Data Technologies. Sherif Sakr and Albert Zomaya, editors. Springer International Publishing, in press 2018. and
  • 37. © 2018 MapR Technologies 37 Machine Learning is Everywhere Image courtesy Mtell used with permission.Images © Ellen Friedman ● ● ●● ●● ● ● ● ● ●● ● ●●●● ● ● ●●● ●● ●● ● ● ●● ●● ●● ● ● ● ●● ●● ● ● ● ●● ● ● ●● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ●● ●●●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ●● ●● ● ● ● ● ●●●● ● ●● ● ● ●●● ● ● ● ● ● ●● ● ●● ●●● ● ● ● ●● ● ● ●● ● ● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ●● ●●●●● ● ● ●● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ●● ● ●● ● ● ●● ●● ● ●● ● ●●● ● ● ●●● ● ● ●●● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ●● ● ● ●●● ● ● ● ● ● ● ●● ●●● ● ● ● ● ●● ● ●●● ● ●● ● ● ● ● ●● ● ● ● ●●● ● ● ● ●● ● ● ●●●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ●● ● ●● ● ● ●● ● ● ●●●● ●● ●● ●● ● ● ●● ● ● ● ● ●●● ● ● ● ● ● ● ●● ●●● ● ● ●● ● ● ●● ●●● ● ● ● ●● ● ● ● ●●● ●● ● ● ● ● ● ●●● ● ● ●● ●● ● ● ● ● ● ● ●●●● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●●● ●●● ●● ●● ●● ● ● ● ● ● ●● ●● ● ● ● ●● ●●● ●● ●● ●●●● ● ● ●● ● ●● ● ● ● ●●●● ●● ●● ●● ●● ● ●● ● ● ●● ●● ● ● ●● ● ● ● ●● ● ●● ● ● ●● ● ●●● ●●● ● ●● ● ● ● ●● ● ● ●● ● ● ● ●● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●●● ● ●●● ●● ● ●● ● ● ● ● ●● ● ● ● ● ● ●● ●●● ●● ● ● ● ● ●● ● ●● ● ●●● ●● ●● ● ●●●● ●● ● ● ● ● ● ●● ●●● ● ● ● ● ●● ● ● ●● ● ● ● ●● ● ● ●● ●●● ● ● ●●● ● ●● ● ● ● ● ●● ● ● ● ● ●● ●●● ●● ● ● ● ● ● ● ● ● ● ● ●●● ●●●● ●● ● ●●● ● ● ●●● ● ●● ●● ● ● ● ● ● ● ●● ● ●●●● ● ● ●● ●●● ● ●● ● ● ●● ● ● ● ● ● ●● ● ●●●● ●● ● ● ●● ● ● ● ● ● ● ●●●● ● ●●● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ●● ● ● ● ● ● ●●● ● ● ● ● ●●●● ●● ● ● ● ● ●● ● ●● ● ●● ●● ● ● ●● ● ●● ● ●● ●● ● ● ● ● ● ● ●● ● ● ● ● ●● ●●●● ● ●●● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ●● ●● ● ●● ● ● ● ● ● ● ●● ●●●● ● ● ● ●● ●● ● ●● ● ●●● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ●●●● ● ● ● ● ●● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ●● ●● ●● ●● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ●●● ●● ● ●●●● ●●● ●● ●● ● ●● ● ● ●● ● ●● ● ● ●●● ●● ● ● ● ● ● ●●●● ●●●●● ●●● ● ●●● ●● ● ●● ●● ● ● ● ●● ●●● ● ● ● ● ● ● ● ● ●●●● ● ● ●●● ● ●●● ●●● ●● ●● ● ●●● ● ● ●●●● ●● ● ● ●● ● ● ●● ● ● ●● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ●●●●●● ● ● ● ● ●● ●● ● ● ● ●● ● ●● ● ● ●●● ● ●●● ● ●● ●● ●● ●●● ● ●●● ● ●● ● ● ●● ●●● ●● ● ● ●●●● ● ●● ● ● ●● ●● ● ●● ●● ●● ● ● ●●● ● ●● ● ● ● ●●●●● ● ●● ● ● ● ●● ● ●●● ●● ●● ● ● ● ● ● ● ●●● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ● ●● ●● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ●●● ● ● ● ●●● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●● ●● ●● ● ● ● ● ● ●● ●●● ● ● ● ● ● ● ●● ● ● ● ● ●● ●● ● ● ● ●● ● ●● ● ● ● ●●● ● ●● ● ●● ● ●● ●●● ● ● ● ● ● ● ● ●● ●● ●● ● ● ●●●● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●● ●● ● ● ●● ● ● ● ●●● ● ● ● ● ● ● ● ●●● ● ● ●●● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●●● ● ● ● ● ● ●●● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ●● ●●● ● ●● ● ● ● ● ● ●● ● ● ● ●● ● ●● ●● ●● ● ● ● ●● ● ● ● ● ●● ● ●● ● ●● ●●● ●●●● ● ● ● ●●● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ●●● ●● ●●● ●● ● ●● ●● ●●● ●● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ●● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ●●● ● ●● ● ●●● ●● ● ●● ● ● ● ●● ●● ● ● ●● ● ● ● ● ● ●●● ● ● ● ● ● ● ●● ● ● ●●●● ● ● ● ● ●● ● ●● ● ●● ● ● ● ● ● ●●●● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ●● ●●●● ● ● ● ● ● ● ●● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ●● ● ● ● ●● ● ● ●● ●●● ● ● ● ● ● ●● ●● ● ● ● ●● ●● ● ●●●● ● ●● ● ● ●● ● ●● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●●●● ● ●● ● ● ●● ● ● ● ● ● ●● ●●● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ●● ●●● ●●● ● ● ● ●● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ●●●● ● ● ● ●●●● ● ● ●●● ● ●● ●● ●● ● ● ● ● ● ●●● ● ●● ● ● ● ● ● ● ●●● ● ● ● ●●●● ●●● ● ●● ● ● ●● ● ● ● ● ●● ● ●●● ● ● ●● ●● ● ● ● ● ● ● ●● ● ● ●●● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ●●● ● ● ● ● ● ●● ●● ● ●● ●●● ●● ●●● ● ● ●●● ● ● ●●● ● ● ● ● ● ●●● ●● ●● ● ● ● ● ● ● ● ●●● ● ● ●●● ● ● ● ● ● ● ●● ● ● ●● ● ●●●● ●● ●● ● ●● ● ●●● ● ● ● ● ● ●● ● ● ●● ●●● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ●●●● ●● ●●● ● ● ● ●● ● ●● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●●●● ●● ● ●● ● ●●● ●● ● ● ●● ● ● ●● ●●●● ● ● ● ●●● ● ● ● ● ●●● ● ● ● ●●● ● ●● ● ● ● ● ●● ●● ● ● ● ●● ●● ● ●● ● ● ● ● ●●● ● ● ● ● ● ● ●●●● ●● ● ● ● ● ●●● ● ●●● ● ● ●●● ●● ● ● ●● ●● ●● ● ● ●● ●● ● ● ● ● ● ● ●● ● ● ● ●●●● ● ● ●● ●●● ●● ● ● ●●● ●● ● ● ● ● ●●● ● ● ●● ● ●●● ● ● ● ●● ●● ●● ● ● ● ●●●● ● ● ● ●● ● ●● ●● ● ● ● ● ●● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ●● ●●● ● ●● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ●● ● ●●●● ● ● ●● ● ● ● ●● ● ●●● ●●● ● ● ● ● ●● ●● ●● ● ●● ●●● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ●●●● ●●● ●●● ● ●● ●● ● ● ● ● ● ● ● ●●● ● ● ● ●●● ● ●●●●● ● ●●● ● ● ●●● ● ● ● ● ● ●● ●● ●● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ●●● ● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ●● ●●● ● ● ● ● ●● ● ● ●● ●● ● ● ● ● ●●● ●● ● ● ●● ● ●● ● ●● ● ● ●● ● ● ●● ●● ● ● ● ● ●● ● ● ●● ● ● ● ●●●● ● ● ● ● ●●● ● ●●●●● ● ●● ● ● ● ●● ● ● ●●● ●● ● ●● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ● ●●● ●●●● ● ●●● ● ● ●● ●●● ● ● ● ● ● ● ●● ● ●● ●● ● ● ●●● ●● ●● ● ●● ● ● ●● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ●● ●●●● ●● ●● ● ●● ● ● ● ●●● ● ●● ● ● ● ●●● ● ●● ●● ● ● ● ● ●● ● ● ● ● ●●● ● ●● ●●● ●●● ● ● ● ● ● ●● ● ●● ● ● ● ●● ●●● ●● ●●● ● ● ● ● ●● ● ●● ● ● ● ●● ● ● ●● ● ●●●● ● ● ●●● ● ●● ●●● ●● ● ●● ●● ● ● ● ●● ●● ● ● ● ●●●● ● ● ● ● ● ●● ● ●● ● ● ●● ●● ● ● ●● ●● ● ● ●● ● ● ●● ●● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ●● ●● ● ● ●●● ●● ● ●● ● ● ● ● ● ●● ●● ● ●● ●● ● ● ● ● ● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ●●● ●●● ● ● ● ● ●● ● ● ● ● ●●● ●● ●●● ● ● ● ●●● ●● ● ●● ●●● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ●●● ● ● ● ●●●● ● ● ● ●● ● ● ●● ●● ● ● ● ●● ● ● ●● ●● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●●●● ● ● ● ● ●● ●● ● ●● ● ●● ●● ●● ● ● ● ●●● ●● ● ●●● ● ● ● ● ● ● ● ● ●●● ●● ● ●● ● ● ● ●●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●●● ● ● ●●● ● ●● ● ● ● ● ● ● ● ●● ●●● ● ● ● ●● ● ● ●● ● ● ● ● ●●● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ●●● ● ● ● ●● ● ● ● ●● ● ●● ●● ● ● ● ●●● ● ●● ●● ● ● ● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ●● ● ●● ● ●● ● ● ●● ● ● ● ● ●●● ●●● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ●● ● ● ● ● ● ●● ● ●● ● ●●● ● ● ●● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●●●● ●●● ● ● ● ●● ●● ●● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ●●● ● ● ●● ● ●● ●● ●● ● ●● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ●● ● ●● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ●● ● ● ● ● ● ● ● ●● ● ● ● ●● ●● ●● ● ● ● ●● ● ● ● ●● ●● ●● ● ● ● ●● ●● ●●●● ● ● ●● ●● ●● ● ● ● ● ●● ● ●● ●●● ● ● ● ● ● ● ●● ● ● ●● ●●● ●● ● ● ● ● ●● ● ● ● ●● ●● ● ● ●● ●● ● ● ●● ● ● ● ● ● ●●●● ● ●● ● ● ●● ●● ● ● ● ●● ● ● ● ● ● ●●● ● ●●●●● ● ●● ● ●● ● ● ●●● ● ● ● ● ●● ● ● ● ● ● ●● ●● ● ● ●● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●●● ●● ● ●● ●● ●● ● ● ● ● ● ●●● ●●● ●● ● ● ●●● ● ● ● ● ● ●● ● ● ●● ●● ● ●●● ● ●●● ● ● ● ● ● ●●●● ● ●● ●● ●● ●● ● ● ● ●● ● ● ●● ● ● ●● ● ● ● ●● ●●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ●● ●● ● ● ● ●● ● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ● ● ● ●●● ●●●● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ●● ● ●● ● ●●● ● ● ● ●● ●● ● ● ● ●●● ● ●● ● ● ● ● ● ● ●●● ●●●● ●●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●●●● ● ● ● ● ●● ● ● ●● ●●● ● ●●●● ● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ●● ●● ●● ● ● ● ● ● ● ● ●● ●● ● ●● ●●● ● ●●●● ● ● ● ●● ● ● ● ● ● ● ●● ●● ●● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●●● ●●● ● ● ●●● ● ●●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ●● ● ●● ●●● ●● ●● ● ●● ●●● ●●● ● ● ●● ●● ● ● ● ●● ● ● ● ● ●●● ● ●● ●● ●● ●● ● ● ●● ●● ● ● ● ●● ● ● ●●● ●● ● ● ● ●● ● ● ● ● ● ●●● ● ●● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●●● ● ●● ● ● ● ●● ●● ● ● ●●● ● ●●●●● ●● ● ●● ● ●● ● ● ● ●●●● ●● ● ●●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ●●● ● ●●● ● ● ● ● ● ● ● ● ● ●●● ●●● ●● ● ● ● ● ● ● ●● ● ● ●●● ● ●●● ● ●● ● ●● ● ●● ● ●●●●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ●●● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●● ●● ●●● ● ● ●● ●●● ● ● ● ● ● ● ●● ● ●● ●●● ● ● ●●● ● ●● ● ● ●● ● ● ● ●● ●● ●● ● ● ● ● ● ● ●● ● ● ● ●● ●●●● ● ●● ● ● ● ● ● ●●● ● ● ●● ●●●● ●● ● ●● ● ●● ● ●● ●● ●● ●● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ●●● ●●●● ●● ● ● ● ● ● ●● ●● ● ●●● ● ● ● ● ● ● ● ● ● ●●● ● ●● ●●● ●●● ●● ● ●● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ●●● ● ● ● ● ●● ●● ●● ●●● ●● ●● ●● ● ● ●●● ● ●● ● ●● ●●● ●● ●● ● ●●● ● ●● ● ● ●●● ● ● ● ● ●●● ● ● ● ● ● ● ●●● ● ● ●●● ● ● ● ●● ●● ● ●● ●● ● ●●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●● ● ● ●●● ● ● ● ●● ●●● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ●● ●●● ● ● ●● ● ●● ● ●●● ● ● ● ● ● ● ●● ● ● ●●●● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ●● ●● ● ● ● ● ●● ● ● ●●●● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ●● ● ●● ● ● ●● ●●● ● ● ● ● ●● ●● ● ●● ● ● ● ●●● ●● ● ● ● ●● ● ●● ●●● ● ● ● ● ● ● ●● ● ● ● ● ●● ●● ● ●●●● ● ●● ● ● ● ●● ●● ● ● ●● ● ●● ● ● ● ●● ● ●● ●●●●● ● ● ●● ● ● ●●● ● ●● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●●●● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●● ●● ● ● ● ● ●● ●● ●● ● ● ● ●●● ● ●● ● ●●● ● ●● ●● ●● ● ● ● ●●● ● ●● ● ● ● ● ● ●● ● ● ●●● ● ● ● ●●● ● ● ●● ● ●● ● ●●●● ● ● ●● ● ● ● ● ● ●●●● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●● ●●● ●●●● ● ● ●● ●●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ●● ●● ● ●● ● ●● ●●● ● ● ● ● ●●●● ● ● ●●●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●●● ● ● ●● ●● ●● ● ● ● ●● ● ● ● ● ● ●● ● ●● ● ● ● ● ●● ● ● ●● ●● ● ● ●● ●● ● ●● ● ● ●●● ● ● ● ● ● ● ● ●●● ●●● ●● ● ● ● ● ● ● ● ● ●● ●●● ● ●● ●●● ● ●● ● ● ●● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●●●●●●● ● ● ● ●● ● ●● ●● ● ● ● ● ● ●● ●●●● ● ● ● ● ● ● ●● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ●●● ●●● ●●● ● ● ● ●●● ● ● ● ● ●● ● ●● ● ●●●● ● ● ● ● ● ●● ● ●● ● ● ● ●● ● ●● ● ● ●●● ● ● ●● ●● ● ● ●● ● ●● ●● ● ● ● ● ● ● ●● ● ● ●●● ● ●● ●● ●● ● ●● ● ● ● ● ●●●● ● ● ● ●● ●● ● ● ● ● ● ●● ● ● ● ● ● ●●● ●● ● ● ●● ● ●● ●● ●● ● ●● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ● ● ● ●●●● ●●● ●●●●● ● ● ● ● ● ●●● ● ●● ● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ●●●● ● ● ● ●● ● ● ● ● ● ●●● ●● ●● ● ●● ● ● ●● ●●●● ● ● ● ● ●●● ● ● ● ● ● ● ●● ●● ● ●●● ● ●● ●● ●●● ● ● ● ● ● ● ● ●● ● ●● ●●● ●●●●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ●●●●●● ●● ● ●● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ●● ● ●● ● ● ●●● ● ●●●●● ●● ● ● ● ● ● ● ●●● ● ●● ● ●●●●● ●● ● ●●● ●● ● ● ●●●● ● ● ● ● ● ● ●● ● ● ● ● ●●● ●● ● ● ●● ● ● ● ●● ●● ● ●● ●●●●●● ● ● ● ●● ● ●● ● ● ● ● ●● ● ● ●●● ●● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ●●● ● ● ● ● ●● ● ●●● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ●● ●● ●● ●●● ● ● ●●● ● ● ● ● ●● ●● ● ●●● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ● ● ●● ● ●● ● ● ● ●●● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ●●● ● ●●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ●● ●●● ● ● ● ●● ● ● ● ●●● ●●● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ●● ●● ● ●●● ●●● ● ● ● ●● ● ●●● ● ● ● ● ●●● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ●● ● ● ● ●●● ●● ● ●● ● ●● ● ●● ● ●●● ● ● ●● ●● ●● ● ●● ●● ● ● ● ● ●● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●●●● ●● ● ● ● ● ● ● ●● ●● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ● ●●● ● ● ●● ● ● ● ● ● ●● ● ● ●●● ● ● ●● ● ● ● ●● ●● ●●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ●● ● ● ● ●● ● ●● ● ● ● ● ●● ● ● ●●● ●● ● ● ● ● ●●● ● ●●● ● ●● ●● ●●● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ●● ●●● ● ● ● ● ● ● ●●● ● ●● ● ● ●● ●●●● ● ●● ● ●● ● ● ● ●●●● ●● ● ● ●●● ● ● ●● ● ●●● ● ●● ● ● ● ● ● ●●● ● ● ●● ● ● ● ● ●● ● ● ●● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ●● ●● ● ● ●● ●● ●● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●●● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ●●●● ●● ●●● ●● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●●● ●● ●● ● ●● ● ● ● ● ● ● ● ●●●● ●●● ●● ●● ● ● ●● ● ● ● ● ●●● ● ● ● ● ●● ● ●●● ● ●● ●● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ●●● ● ●● ● ● ● ●● ● ● ● ● ● ●● ●● ●● ● ● ● ●● ● ● ● ● ●● ●● ● ● ● ●●●● ●● ● ● ●● ● ● ●● ●● ● ● ● ● ●●● ●● ●●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ●●● ● ● ● ● ●● ● ●●● ● ● ● ●● ●● ●●● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ●● ●●● ● ● ● ● ● ● ● ● ●● ●●● ● ● ● ● ●● ● ●● ●● ●●● ● ● ● ● ●● ●● ● ●● ● ●● ●● ●● ● ● ● ● ● ● ●●● ●● ● ●●● ●● ● ●● ● ● ●●●● ● ● ● ● ●●● ● ● ● ●● ●● ●● ● ● ● ● ●● ●● ● ●● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ●●● ● ●● ● ● ●●● ●● ● ●● ● ●●●●● ●● ● ●●● ● ●● ●●● ● ●●● ● ● ●●● ● ● ● ● ●●● ●● ● ● ● ● ●● ●● ● ● ●● ●● ● ● ●● ● ●●● ●●● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ●● ●● ●● ● ● ●●● ● ●● ● ● ●● ●● ●● ●● ● ● ● ● ●● ●●●● ●● ● ●●● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●●● ● ●● ●●●● ● ●● ●● ●●● ●● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ●●● ● ●● ●● ●●● ●● ● ●● ● ●●●● ● ●● ● ● ● ● ● ● ●●●● ●●● ● ●●● ●● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ●● ● ● ● ●● ●● ● ●●● ● ● ● ●● ●● ● ●● ● ● ●● ● ● ● ● ●● ● ● ●● ● ● ● ●● ● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ●● ●● ● ● ● ● ●●● ●● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ●● ● ● ● ● ●● ● ● ●● ●●● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●●● ●● ● ● ●● ● ● ● ●● ●● ● ●● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ●● ●●● ●● ●● ●●● ● ● ●● ●●●●● ● ●●●● ● ● ●● ● ● ●● ●● ● ●● ● ●● ●● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ●● ●●●● ●● ● ● ● ● ● ●● ●● ● ●● ● ● ● ●● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ●●● ● ● ● ● ●● ● ● ●●● ●●● ● ● ●● ●●●● ● ● ●● ● ● ● ●●● ● ●● ●●● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ●● ● ● ● ●●● ● ● ● ●●● ● ●● ● ● ●● ● ●● ● ●● ●●● ● ●●● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ● ● ● ● ●● ●●●● ● ●● ● ● ● ● ●● ● ●● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ● ●● ●● ●●●● ● ● ● ● ● ● ●● ●●● ●● ●● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ●● ●● ● ●● ● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ●● ●●● ● ●● ● ● ● ● ●● ●●●● ● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ●●● ●●● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●● ●●● ● ●● ●● ● ● ● ●● ●●● ●● ●● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ●●● ● ●● ●● ●●● ● ● ●● ● ● ● ● ●●● ● ●● ●●●● ●● ● ● ● ●● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ● ● ●●● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ●● ● ●●●● ● ● ● ● ●●● ● ● ●● ● ● ● ●● ● ●● ● ● ● ●●● ● ●● ● ●● ●● ● ●● ● ●● ●● ● ● ● ● ●● ● ●● ● ● ● ●●● ●● ● ● ● ● ● ● ●●● ● ● ●● ● ●●● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ●● ●●● ● ● ● ●● ●● ● ●● ● ●●● ●● ● ● ● ● ● ● ● ● ● ●● ●●●●● ● ●● ●● ●● ●● ●● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ●● ● ● ● ●●●● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ●● ●● ● ● ● ●● ● ●●● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ●●● ●●● ● ●● ● ● ●●● ● ● ● ● ●● ● ● ● ●●● ● ● ● ● ● ● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ●●● ● ● ● ● ●● ●● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ●●●● ●● ● ● ● ●● ●● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ●● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ●● ●●● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ●● ●● ● ●● ● ●●● ● ● ● ●● ●●● ●● ● ●● ● ● ● ● ● ●● ●●● ●●● ●● ● ● ● ● ● ● ● ● ● ●●● ● ●●● ●● ●● ● ● ● ● ● ● ●●● ● ● ●●●●● ●● ●● ● ● ● ● ● ● ● ●● ● ● ● ●● ● ●● ● ● ● ●● ● ● ● ● ●● ●● ● ● ● ●● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ● ● ● ●●●●● ● ● ●● ● ● ● ● ● ●● ● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ●● ●● ● ●●●● ● ● ● ●● ●● ●● ● ● ● ● ● ●● ●●● ● ● ● ●● ● ● ●● ● ● ●● ●● ●●● ●●● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ●● ● ● ● ● ● ● ● ● ●●● ● ● ● ●●● ● ● ● ●● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ●● ● ● ●● ● ● ●●● ● ● ● ● ●● ●●● ● ● ● ●●●● ●● ● ● ● ● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ●● ● ● ● ● ●●● ● ● ● ● ●● ● ●● ● ● ● ●●● ●●● ●● ●● ●● ● ● ●●●●● ● ● ● ●● ●●● ● ● ●● ● ● ● ● ●●● ● ● ● ● ● ● ●● ●● ● ● ● ● ● ●● ●●●●● ● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ●● ● ●● ● ●● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ●● ● ● ●● ● ● ● ● ● ● ●●● ● ● ●● ● ● ● ● ● ● ● ● ●●● ● ● ●● ● ● ●● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ●●● ● ●● ● ●● ●● ● ● ● ● ● ● ● ●● ●● ● ●●● ●●● ● ● ● ● ● ● ●● ● ● ●● ● ● ●● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ●● ● ● ●● ●●●● ● ●● ● ● ● ●● ● ● ●● ●● ●● ●●● ● ● ●●● ● ●● ● ● ●● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ●●● ● ● ●● ● ● ● ● ● ● ● ●● ● ●● ● ●● ● ● ● ● ● ● ●● ● ●●● ● ● ● ● ● ● ● ●●●● ●● ●● ● ●●● ● ●● ●●● ● ● ● ● ● ● ●● ● ●●●● ● ● ● ● ● ● ● ●●● ●● ● ● ●●●● ● ● ●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ● ●● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●● ●● ● ● ● ● ● ● ●●● ● ● ●● ● ●● ● ●● ● ● ●●● ● ● ● ● ● ● ●● ● ● ● ● ●●● ● ● ● ● ●●● ●●● ●● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ●● ● ●●● ● ● ● ●● ●● ● ● ● ● ● ●● ●● ●● ● ● ●● ● ● ● ● ●●● ● ● ● ●● ● ●●● ● ● ●● ● ● ●● ● ● ● ● ● ● ● ● ● ● ●●● ●● ● ● ● ● ●● ● ● ● ●● ● ● ● ●● ● ●● ●● ● ● ● ●● ●● ● ● ● ●● ●●● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ●● ● ●● ● ● ● ● ● ● ● ● ●● ● ●●● ● ●● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●●● ● ● ● ●● ● ● ●● ● ● ● ● ●● ● ● ● ● ●● ● ● ●● ●● ● ● ●● ●● ● ● ● ● ● ● ● ●●● ● ●● ● ●● ● ●● ● ● ● ● ●● ● ● ● ●●● ● ● ● ● ●●● ●● ● ● ● ● ● ●● ● ● ● ● ● ●● ●● ● ● ●●● ●● ●●● ● ●● ●● ●● ● ●●● ● ● ● ●● ● ● ●● ● ● ●●● ● ● ●●● ●●● ● ●● ● ● ● ●● ●● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ●● ● ●●● ● ● ●● ●● ● ● ● ● ● ● ● ● ● ●●●●● ●● ● ●●● ● ● ●● ● ● −2 0 2 4 0246 Raw Scores ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● 0.0 0.5 1.0 0.00.51.0 Q−Q plot
  • 38. © 2018 MapR Technologies 38 How do you make machine learning successful?
  • 39. © 2018 MapR Technologies 39 Is it the algorithm? the model? the ML tool? https://mapr.com/blog/tensorflow-mxnet-caffe-h2o-which-ml-best/
  • 40. © 2018 MapR Technologies 40 90% of effort in successful machine learning isn’t the algorithm or the model… It’s the logistics
  • 41. © 2018 MapR Technologies 41 New book: how to manage machine learning models Download free pdf or read free online via @MapR: https://mapr.com/ebook/machine-learning-logistics/ “Rendezvous Architecture” by Ted Dunning & Ellen Friedman, in Encyclopedia of Big Data Technologies. Sherif Sakr and Albert Zomaya, editors. Springer International Publishing, in press 2018. and
  • 42. © 2018 MapR Technologies 42 Please support women in tech – help build girls’ dreams of what they can accomplish © Ellen Friedman 2015#womenintech #datawomen
  • 43. © 2018 MapR Technologies 43 From one “woman in tech”: Thank You ! Image © Ellen Friedman
  • 44. © 2018 MapR Technologies 44 Contact Information Ellen Friedman, PhD Principal Technologist, MapR Technologies Committer Apache Drill & Apache Mahout projects O’Reilly author Email efriedman@mapr.com ellenf@apache.org Twitter @Ellen_Friedman #BayAreaACM