Office Rating and Viewership Trends over time
The office is one of the most popular TV shows every made so how did
viewership effect its ratings and popularity over time?
The data used in this project and for all visualizations is sourced
from https://github.com/rfordatascience/tidytuesday/blob/master/data/2020/2020-03-17/readme.md
and https://en.wikipedia.org/wiki/List_of_The_Office_(American_TV_series)_episodes
library(tidyverse)
We are using tidyverse to create the visualizations
We are using library DT to better show data visuals on the
visualizations
datatable(office_ratings)
This is the data we will be using for the visualizations It has 7
total variables and 186 entries. These 7 and their explanation are
Season (season number), episode (episode number), Title (episode title),
viewers (number of viewers in millions), imdb_rating( average fan rating
from 1-10), total_votes(number of votes on imdb), and lastly
air_date(date episode originally aired.)
The Office trends and peaks in viewership, rating, and total
votes
ggplot(data = office_ratings) +
geom_point(mapping = aes(x = viewers, y = total_votes, color = imdb_rating)) +
labs(x = "Viewers (Office_Rating)",
y = "Total Votes (Office_Rating)",
color = "Average Rating",
title = "Office episode rating vs Viewership",
captaions ="")

On average the trend for the graph follows the pattern that the more
people that watch the episode the better its liked. This trend stays
true for almost every point of the graph. But there are some major
outliers that sit outside of the predicted trend.
So why do we have such large outliers that don’t match the
pattern?
Adressing outliers
ggplot(data = office_ratings) +
geom_point(mapping = aes(y = viewers, x = episode, color = season)) +
labs(x = "episode number",
y = "Viewers (In Millions)",
color = "Season",
title = "Office episode episodes vs viewership")

This graph which now breaks down the viewership by each episode to
better see our outlier. Here we can see our major outlier is episode 13
of season 5. Which if we go to The Office wiki (https://en.wikipedia.org/wiki/List_of_The_Office_(American_TV_series)_episodes)
page we can find that season 5 episode 13 was a 2 part episode but the
viewership was added together which explains its high viewership but
lower rating and votes.
Our other outlier had low viewership but high ratings and high votes.
This episode was the series finale. It being an outlier is most likely
explained by only long time fans watching the finale. This correlates
with the fact that the long term fans are more likely to leave reviews
and vote on an episode.
Viewership and rating trends
ggplot(data = office_ratings) +
geom_point(mapping = aes(x = viewers, y = total_votes, color = imdb_rating)) +
geom_smooth(mapping = aes(x = viewers, y = total_votes), se = FALSE) +
labs(x = "Viewers (Millions)",
y = "Total Votes (Office_Rating)",
color = "Average Rating",
title = "Office episode rating vs Viewership",
captaions ="")

NA
Here we can see the trend line of our views vs total votes for each
episode. We can see a general upwards trend where the more views a
episode gets the more votes it gets. I think a more interesting question
is why is there a large bump at the start of the graph. This question I
don’t have a great answer for perhaps these episodes were not very good
and so many people voted but not many watched.
How did the show’s popularity change over time?
ggplot(data = office_ratings) +
geom_boxplot(mapping = aes(y = viewers, x = season)) +
labs(y = "Viewers (Millions)",
x = "season",
color = "Average Rating",
title = "Office season viewership over time",
captaions ="")

We can see from the box plot that the median viewers for each season
followed a fairly predicable popularity curve with the popularity of The
Office peaking around season 3,4 and 5 before starting to fall off
during season 7 through 9.
ggplot(data = office_ratings) +
geom_boxplot(mapping = aes(y = total_votes, x = season)) +
labs(y = "total votes",
x = "season",
title = "Office season voter count over time",
captaions ="")

This trend can also be seen in the number of votes on IMDB, with a
steady decrease over time with some larger outliers talked about
earlier. The average number of votes declined as time went on. As time
went on it seems like the show appealed less to the average view and
more to those who were true fans. That stayed to watch and leave votes
and reviews.
ggplot(data = office_ratings) +
geom_boxplot(mapping = aes(x = season, y = imdb_rating)) +
labs(y = "Rating",
x = "Season",
title = "The Office rating by season",
captaions ="")

We can see this shown in a box plot of the average rating by season
peaking in season 3 through 5 and then decreasing from season 5 onward.
Showing that as time went on less and less people watch and voted which
looks to be because the views didn’t like seasons 6,7,8, and 9.
Conclusion
Overall based on the data we know that The Office’s viewership and
popularity stayed roughly the same through its lifespan with its large
decrease in viewership later in season 7,8, and 9, however I think the
most interesting thing about its viewership and data is how its voter
count peaks in the first season and then stays on a negative trend until
the last season. Which I believe is due to the show changing over time
and driving away long time fans who are more likely to go online and
leave reviews of the show. Maybe the viewers grew bored or didn’t like
how the show changed? But this shows that The Office kept its popularity
throughout is run but its appeal to longer time fans faded as time went
on. I think that more data would be necessary to further prove my
proposed answer. Such as counting repeated voters or having a poll that
asks viewers if and why they stopped watching. But I think with the data
available its a good answer.
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQphdXRob3I6IE5vYWggU3phcmVqa28NCmRhdGU6IDkvOS8yMDI0DQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIyMgT2ZmaWNlIFJhdGluZyBhbmQgVmlld2Vyc2hpcCBUcmVuZHMgb3ZlciB0aW1lDQoNClRoZSBvZmZpY2UgaXMgb25lIG9mIHRoZSBtb3N0IHBvcHVsYXIgVFYgc2hvd3MgZXZlcnkgbWFkZSBzbyBob3cgZGlkIHZpZXdlcnNoaXAgZWZmZWN0IGl0cyByYXRpbmdzIGFuZCBwb3B1bGFyaXR5IG92ZXIgdGltZT8NCg0KDQpUaGUgZGF0YSB1c2VkIGluIHRoaXMgcHJvamVjdCBhbmQgZm9yIGFsbCB2aXN1YWxpemF0aW9ucyBpcyBzb3VyY2VkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Jmb3JkYXRhc2NpZW5jZS90aWR5dHVlc2RheS9ibG9iL21hc3Rlci9kYXRhLzIwMjAvMjAyMC0wMy0xNy9yZWFkbWUubWQgYW5kIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfVGhlX09mZmljZV8oQW1lcmljYW5fVFZfc2VyaWVzKV9lcGlzb2Rlcw0KYGBge3J9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmBgYA0KV2UgYXJlIHVzaW5nIHRpZHl2ZXJzZSB0byBjcmVhdGUgdGhlIHZpc3VhbGl6YXRpb25zIA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KbGlicmFyeShEVCkNCmBgYA0KV2UgYXJlIHVzaW5nIGxpYnJhcnkgRFQgdG8gYmV0dGVyIHNob3cgZGF0YSB2aXN1YWxzIG9uIHRoZSB2aXN1YWxpemF0aW9ucw0KYGBge3J9DQpkYXRhdGFibGUob2ZmaWNlX3JhdGluZ3MpDQpgYGANClRoaXMgaXMgdGhlIGRhdGEgd2Ugd2lsbCBiZSB1c2luZyBmb3IgdGhlIHZpc3VhbGl6YXRpb25zDQpJdCBoYXMgNyB0b3RhbCB2YXJpYWJsZXMgYW5kIDE4NiBlbnRyaWVzLiBUaGVzZSA3IGFuZCB0aGVpciBleHBsYW5hdGlvbiBhcmUgU2Vhc29uIChzZWFzb24gbnVtYmVyKSwgZXBpc29kZSAoZXBpc29kZSBudW1iZXIpLCBUaXRsZSAoZXBpc29kZSB0aXRsZSksIHZpZXdlcnMgKG51bWJlciBvZiB2aWV3ZXJzIGluIG1pbGxpb25zKSwgaW1kYl9yYXRpbmcoIGF2ZXJhZ2UgZmFuIHJhdGluZyBmcm9tIDEtMTApLCB0b3RhbF92b3RlcyhudW1iZXIgb2Ygdm90ZXMgb24gaW1kYiksIGFuZCBsYXN0bHkgYWlyX2RhdGUoZGF0ZSBlcGlzb2RlIG9yaWdpbmFsbHkgYWlyZWQuKQ0KDQojIFRoZSBPZmZpY2UgdHJlbmRzIGFuZCBwZWFrcyBpbiB2aWV3ZXJzaGlwLCByYXRpbmcsIGFuZCB0b3RhbCB2b3Rlcw0KIA0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IG9mZmljZV9yYXRpbmdzKSArDQogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh4ID0gdmlld2VycywgeSA9IHRvdGFsX3ZvdGVzLCBjb2xvciA9IGltZGJfcmF0aW5nKSkgKyANCiAgbGFicyh4ID0gIlZpZXdlcnMgKE9mZmljZV9SYXRpbmcpIiwNCiAgICAgICB5ID0gIlRvdGFsIFZvdGVzIChPZmZpY2VfUmF0aW5nKSIsDQogICAgICAgY29sb3IgPSAiQXZlcmFnZSBSYXRpbmciLA0KICAgICAgIHRpdGxlID0gIk9mZmljZSBlcGlzb2RlIHJhdGluZyB2cyBWaWV3ZXJzaGlwIiwNCiAgICAgICBjYXB0YWlvbnMgPSIiKQ0KYGBgDQogT24gYXZlcmFnZSB0aGUgdHJlbmQgZm9yIHRoZSBncmFwaCBmb2xsb3dzIHRoZSBwYXR0ZXJuIHRoYXQgdGhlIG1vcmUgcGVvcGxlIHRoYXQgd2F0Y2ggdGhlIGVwaXNvZGUgdGhlIGJldHRlciBpdHMgbGlrZWQuIFRoaXMgdHJlbmQgc3RheXMgdHJ1ZSBmb3IgYWxtb3N0IGV2ZXJ5IHBvaW50IG9mIHRoZSBncmFwaC4gQnV0IHRoZXJlIGFyZSBzb21lIG1ham9yIG91dGxpZXJzIHRoYXQgc2l0IG91dHNpZGUgb2YgdGhlIHByZWRpY3RlZCB0cmVuZC4NCiANCiBTbyB3aHkgZG8gd2UgaGF2ZSBzdWNoIGxhcmdlIG91dGxpZXJzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIHBhdHRlcm4/DQoNCiMgQWRyZXNzaW5nIG91dGxpZXJzIA0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IG9mZmljZV9yYXRpbmdzKSArDQogIGdlb21fcG9pbnQobWFwcGluZyA9IGFlcyh5ID0gdmlld2VycywgeCA9IGVwaXNvZGUsIGNvbG9yID0gc2Vhc29uKSkgKyANCiAgbGFicyh4ID0gImVwaXNvZGUgbnVtYmVyIiwNCiAgICAgICB5ID0gIlZpZXdlcnMgKEluIE1pbGxpb25zKSIsDQogICAgICAgY29sb3IgPSAiU2Vhc29uIiwNCiAgICAgICB0aXRsZSA9ICJPZmZpY2UgZXBpc29kZSBlcGlzb2RlcyB2cyB2aWV3ZXJzaGlwIikNCmBgYA0KVGhpcyBncmFwaCB3aGljaCBub3cgYnJlYWtzIGRvd24gdGhlIHZpZXdlcnNoaXAgYnkgZWFjaCBlcGlzb2RlIHRvIGJldHRlciBzZWUgb3VyIG91dGxpZXIuIEhlcmUgd2UgY2FuIHNlZSBvdXIgbWFqb3Igb3V0bGllciBpcyBlcGlzb2RlIDEzIG9mIHNlYXNvbiA1LiBXaGljaCBpZiB3ZSBnbyB0byBUaGUgT2ZmaWNlIHdpa2kgKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfVGhlX09mZmljZV8oQW1lcmljYW5fVFZfc2VyaWVzKV9lcGlzb2RlcykgcGFnZSB3ZSBjYW4gZmluZCB0aGF0IHNlYXNvbiA1IGVwaXNvZGUgMTMgd2FzIGEgMiBwYXJ0IGVwaXNvZGUgYnV0IHRoZSB2aWV3ZXJzaGlwIHdhcyBhZGRlZCB0b2dldGhlciB3aGljaCBleHBsYWlucyBpdHMgaGlnaCB2aWV3ZXJzaGlwIGJ1dCBsb3dlciByYXRpbmcgYW5kIHZvdGVzLiANCg0KT3VyIG90aGVyIG91dGxpZXIgaGFkIGxvdyB2aWV3ZXJzaGlwIGJ1dCBoaWdoIHJhdGluZ3MgYW5kIGhpZ2ggdm90ZXMuIFRoaXMgZXBpc29kZSB3YXMgdGhlIHNlcmllcyBmaW5hbGUuIEl0IGJlaW5nIGFuIG91dGxpZXIgaXMgbW9zdCBsaWtlbHkgZXhwbGFpbmVkIGJ5IG9ubHkgbG9uZyB0aW1lIGZhbnMgd2F0Y2hpbmcgdGhlIGZpbmFsZS4gVGhpcyBjb3JyZWxhdGVzIHdpdGggdGhlIGZhY3QgdGhhdCB0aGUgbG9uZyB0ZXJtIGZhbnMgYXJlIG1vcmUgbGlrZWx5IHRvIGxlYXZlIHJldmlld3MgYW5kIHZvdGUgb24gYW4gZXBpc29kZS4gDQoNCg0KDQojIyBWaWV3ZXJzaGlwIGFuZCByYXRpbmcgdHJlbmRzIA0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gb2ZmaWNlX3JhdGluZ3MpICsNCiAgZ2VvbV9wb2ludChtYXBwaW5nID0gYWVzKHggPSB2aWV3ZXJzLCB5ID0gdG90YWxfdm90ZXMsIGNvbG9yID0gaW1kYl9yYXRpbmcpKSArDQogIGdlb21fc21vb3RoKG1hcHBpbmcgPSBhZXMoeCA9IHZpZXdlcnMsIHkgPSB0b3RhbF92b3RlcyksIHNlID0gRkFMU0UpICsgDQogIGxhYnMoeCA9ICJWaWV3ZXJzIChNaWxsaW9ucykiLA0KICAgICAgIHkgPSAiVG90YWwgVm90ZXMgKE9mZmljZV9SYXRpbmcpIiwNCiAgICAgICBjb2xvciA9ICJBdmVyYWdlIFJhdGluZyIsDQogICAgICAgdGl0bGUgPSAiT2ZmaWNlIGVwaXNvZGUgcmF0aW5nIHZzIFZpZXdlcnNoaXAiLA0KICAgICAgIGNhcHRhaW9ucyA9IiIpDQogIA0KYGBgDQpIZXJlIHdlIGNhbiBzZWUgdGhlIHRyZW5kIGxpbmUgb2Ygb3VyIHZpZXdzIHZzIHRvdGFsIHZvdGVzIGZvciBlYWNoIGVwaXNvZGUuIFdlIGNhbiBzZWUgYSBnZW5lcmFsIHVwd2FyZHMgdHJlbmQgd2hlcmUgdGhlIG1vcmUgdmlld3MgYSBlcGlzb2RlIGdldHMgdGhlIG1vcmUgdm90ZXMgaXQgZ2V0cy4gSSB0aGluayBhIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXMgd2h5IGlzIHRoZXJlIGEgbGFyZ2UgYnVtcCBhdCB0aGUgc3RhcnQgb2YgdGhlIGdyYXBoLiBUaGlzIHF1ZXN0aW9uIEkgZG9uJ3QgaGF2ZSBhIGdyZWF0IGFuc3dlciBmb3IgcGVyaGFwcyB0aGVzZSBlcGlzb2RlcyB3ZXJlIG5vdCB2ZXJ5IGdvb2QgYW5kIHNvIG1hbnkgcGVvcGxlIHZvdGVkIGJ1dCBub3QgbWFueSB3YXRjaGVkLiAgDQogIA0KICANCiMgSG93IGRpZCB0aGUgc2hvd+KAmXMgcG9wdWxhcml0eSBjaGFuZ2Ugb3ZlciB0aW1lPw0KYGBge3J9DQpnZ3Bsb3QoZGF0YSA9IG9mZmljZV9yYXRpbmdzKSArDQogIGdlb21fYm94cGxvdChtYXBwaW5nID0gYWVzKHkgPSB2aWV3ZXJzLCB4ID0gc2Vhc29uKSkgKw0KICBsYWJzKHkgPSAiVmlld2VycyAoTWlsbGlvbnMpIiwNCiAgICAgICB4ID0gInNlYXNvbiIsDQogICAgICAgY29sb3IgPSAiQXZlcmFnZSBSYXRpbmciLA0KICAgICAgIHRpdGxlID0gIk9mZmljZSBzZWFzb24gdmlld2Vyc2hpcCBvdmVyIHRpbWUiLA0KICAgICAgIGNhcHRhaW9ucyA9IiIpDQpgYGANCldlIGNhbiBzZWUgZnJvbSB0aGUgYm94IHBsb3QgdGhhdCB0aGUgbWVkaWFuIHZpZXdlcnMgZm9yIGVhY2ggc2Vhc29uIGZvbGxvd2VkIGEgZmFpcmx5IHByZWRpY2FibGUgcG9wdWxhcml0eSBjdXJ2ZSB3aXRoIHRoZSBwb3B1bGFyaXR5IG9mIFRoZSBPZmZpY2UgcGVha2luZyBhcm91bmQgc2Vhc29uIDMsNCBhbmQgNSBiZWZvcmUgc3RhcnRpbmcgdG8gZmFsbCBvZmYgZHVyaW5nIHNlYXNvbiA3IHRocm91Z2ggOS4gDQoNCmBgYHtyfQ0KZ2dwbG90KGRhdGEgPSBvZmZpY2VfcmF0aW5ncykgKw0KICBnZW9tX2JveHBsb3QobWFwcGluZyA9IGFlcyh5ID0gdG90YWxfdm90ZXMsIHggPSBzZWFzb24pKSArDQogIGxhYnMoeSA9ICJ0b3RhbCB2b3RlcyIsDQogICAgICAgeCA9ICJzZWFzb24iLA0KICAgICAgIHRpdGxlID0gIk9mZmljZSBzZWFzb24gdm90ZXIgY291bnQgb3ZlciB0aW1lIiwNCiAgICAgICBjYXB0YWlvbnMgPSIiKQ0KYGBgDQpUaGlzIHRyZW5kIGNhbiBhbHNvIGJlIHNlZW4gaW4gdGhlIG51bWJlciBvZiB2b3RlcyBvbiBJTURCLCB3aXRoIGEgc3RlYWR5IGRlY3JlYXNlIG92ZXIgdGltZSB3aXRoIHNvbWUgbGFyZ2VyIG91dGxpZXJzIHRhbGtlZCBhYm91dCBlYXJsaWVyLiBUaGUgYXZlcmFnZSBudW1iZXIgb2Ygdm90ZXMgZGVjbGluZWQgYXMgdGltZSB3ZW50IG9uLiBBcyB0aW1lIHdlbnQgb24gaXQgc2VlbXMgbGlrZSB0aGUgc2hvdyBhcHBlYWxlZCBsZXNzIHRvIHRoZSBhdmVyYWdlIHZpZXcgYW5kIG1vcmUgdG8gdGhvc2Ugd2hvIHdlcmUgdHJ1ZSBmYW5zLiBUaGF0IHN0YXllZCB0byB3YXRjaCBhbmQgbGVhdmUgdm90ZXMgYW5kIHJldmlld3MuIA0KDQpgYGB7cn0NCmdncGxvdChkYXRhID0gb2ZmaWNlX3JhdGluZ3MpICsNCiAgZ2VvbV9ib3hwbG90KG1hcHBpbmcgPSBhZXMoeCA9IHNlYXNvbiwgeSA9IGltZGJfcmF0aW5nKSkgKw0KICBsYWJzKHkgPSAiUmF0aW5nIiwNCiAgICAgICB4ID0gIlNlYXNvbiIsDQogICAgICAgdGl0bGUgPSAiVGhlIE9mZmljZSByYXRpbmcgYnkgc2Vhc29uIiwNCiAgICAgICBjYXB0YWlvbnMgPSIiKQ0KYGBgDQpXZSBjYW4gc2VlIHRoaXMgc2hvd24gaW4gYSBib3ggcGxvdCBvZiB0aGUgYXZlcmFnZSByYXRpbmcgYnkgc2Vhc29uIHBlYWtpbmcgaW4gc2Vhc29uIDMgdGhyb3VnaCA1IGFuZCB0aGVuIGRlY3JlYXNpbmcgZnJvbSBzZWFzb24gNSBvbndhcmQuIFNob3dpbmcgdGhhdCBhcyB0aW1lIHdlbnQgb24gbGVzcyBhbmQgbGVzcyBwZW9wbGUgd2F0Y2ggYW5kIHZvdGVkIHdoaWNoIGxvb2tzIHRvIGJlIGJlY2F1c2UgdGhlIHZpZXdzIGRpZG4ndCBsaWtlIHNlYXNvbnMgNiw3LDgsIGFuZCA5LiAgDQoNCg0KIyMgQ29uY2x1c2lvbiANCiANCiBPdmVyYWxsIGJhc2VkIG9uIHRoZSBkYXRhIHdlIGtub3cgdGhhdCBUaGUgT2ZmaWNlJ3Mgdmlld2Vyc2hpcCBhbmQgcG9wdWxhcml0eSBzdGF5ZWQgcm91Z2hseSB0aGUgc2FtZSB0aHJvdWdoIGl0cyBsaWZlc3BhbiB3aXRoIGl0cyBsYXJnZSBkZWNyZWFzZSBpbiB2aWV3ZXJzaGlwIGxhdGVyIGluIHNlYXNvbiA3LDgsIGFuZCA5LCBob3dldmVyIEkgdGhpbmsgdGhlIG1vc3QgaW50ZXJlc3RpbmcgdGhpbmcgYWJvdXQgaXRzIHZpZXdlcnNoaXAgYW5kIGRhdGEgaXMgaG93IGl0cyB2b3RlciBjb3VudCBwZWFrcyBpbiB0aGUgZmlyc3Qgc2Vhc29uIGFuZCB0aGVuIHN0YXlzIG9uIGEgbmVnYXRpdmUgdHJlbmQgdW50aWwgdGhlIGxhc3Qgc2Vhc29uLiBXaGljaCBJIGJlbGlldmUgaXMgZHVlIHRvIHRoZSBzaG93IGNoYW5naW5nIG92ZXIgdGltZSBhbmQgZHJpdmluZyBhd2F5IGxvbmcgdGltZSBmYW5zIHdobyBhcmUgbW9yZSBsaWtlbHkgdG8gZ28gb25saW5lIGFuZCBsZWF2ZSByZXZpZXdzIG9mIHRoZSBzaG93LiBNYXliZSB0aGUgdmlld2VycyBncmV3IGJvcmVkIG9yIGRpZG4ndCBsaWtlIGhvdyB0aGUgc2hvdyBjaGFuZ2VkPyBCdXQgdGhpcyBzaG93cyB0aGF0IFRoZSBPZmZpY2Uga2VwdCBpdHMgcG9wdWxhcml0eSB0aHJvdWdob3V0IGlzIHJ1biBidXQgaXRzIGFwcGVhbCB0byBsb25nZXIgdGltZSBmYW5zIGZhZGVkIGFzIHRpbWUgd2VudCBvbi4gSSB0aGluayB0aGF0IG1vcmUgZGF0YSB3b3VsZCBiZSBuZWNlc3NhcnkgdG8gZnVydGhlciBwcm92ZSBteSBwcm9wb3NlZCBhbnN3ZXIuIFN1Y2ggYXMgY291bnRpbmcgcmVwZWF0ZWQgdm90ZXJzIG9yIGhhdmluZyBhIHBvbGwgdGhhdCBhc2tzIHZpZXdlcnMgaWYgYW5kIHdoeSB0aGV5IHN0b3BwZWQgd2F0Y2hpbmcuIEJ1dCBJIHRoaW5rIHdpdGggdGhlIGRhdGEgYXZhaWxhYmxlIGl0cyBhIGdvb2QgYW5zd2VyLiAgDQoNCg0K