Use the following data to produce 1 table of summary information and 2-3 graphs.

Notes on the data: the total, professional, and computer_all job groups are available for all four years of data. Focus on these if you want to produce graphs of jobs over time. The individual occupations change from one year to the next, so you will not be able to graph them over time (with the exception of computer programmers). You may, however, filter one year of data and make a bar or point plot for each occupation in that year.

The All variable is measured as total jobs in that category, while Women, Black, Asian, and Latino are the percent of workers who identify with each group. You cannot put All on the same plot as one of these variables, since they are measured in different units.

The goal of the assignment is not only to practice making plots: your task is to present the data in a clear and meaningful way. Points will be deducted, for example, from plots that are hard to read or understand. You are also encouraged to think about how to use colors, labels, and themes effectively. Graphs with multiple groups must have a legend.

Although you will need to filter the data, it does not need to be cleaned up too much in order to be graphed. Don’t overthink it!

library(dplyr)

Attaching package: ‘dplyr’

The following objects are masked from ‘package:stats’:

    filter, lag

The following objects are masked from ‘package:base’:

    intersect, setdiff, setequal, union
library(ggplot2)

install.packages("grafify")
trying URL 'https://cran.rstudio.com/bin/macosx/big-sur-arm64/contrib/4.3/grafify_4.0.1.tgz'
Content type 'application/x-gzip' length 4335968 bytes (4.1 MB)
==================================================
downloaded 4.1 MB

The downloaded binary packages are in
    /var/folders/br/x7ljhm5n45dbkdhv_z2qsx180000gp/T//Rtmp6ARG3Q/downloaded_packages
library(grafify)
Registered S3 method overwritten by 'data.table':
  method           from
  print.data.table     
job_cateogry <- data %>%
  filter(job_type %in% c("total", "computer_all"))

summary_job <- job_cateogry %>%
  group_by(year, job_type) %>%
  summarise(
    Total_Workers = sum(All, na.rm = TRUE),
    Women_Average = mean(Women, na.rm = TRUE),
    Black_Average = mean(Black, na.rm = TRUE),
    Asian_Average = mean(Asian, na.rm = TRUE),
    Hispanic_Latino_Average = mean(Hispanic.Latino, na.rm = TRUE)
  )
`summarise()` has grouped output by 'year'. You can override using the `.groups` argument.

print(summary_job)

Based on the summary information for the total and computer_all categories, we can infer that throughout the past 15 years, we have seen little growth in the total workers for all computer occupations. While we see bigger growth for computer occupations every five years, we only saw around a 50% around for the past 15 years. On average, the women in the field had decreased going from an average of 27% down to 25.2%. Despite that, people of color have seen a higher percentage of people in the field, with Asians almost doubling since 2005, going from 14.7% to 23%. On average, Black, Hispanic, and Latino people did not see the same growth jump, though, there were was an average of a 3% increase in the past 15 years. Based on this table summary, we see that there are some growth of minorities in computer occupations, but in the past 15 years, these growths are pretty minimal. We can also infer that the total has stayed relatively the same for women, but the computer occupations with women has decreased , showing that despite seeing some increases, it doesn’t apply to all.

specific_occupation <- data %>%
  filter(description %in% c("Web developers", "Information security analysts"))

summary_jobs <- specific_occupation %>%
  group_by(year, job_type, description) %>%
  summarise(
    Total_Workers = sum(All, na.rm = TRUE),
    Women_Average = mean(Women, na.rm = TRUE),
    Black_Average = mean(Black, na.rm = TRUE),
    Asian_Average = mean(Asian, na.rm = TRUE),
    Hispanic_Latino_Average = mean(Hispanic.Latino, na.rm = TRUE)
  )
`summarise()` has grouped output by 'year', 'job_type'. You can override using the `.groups` argument.

print(summary_jobs)

Based on the specific occupations from 2015 to 2020, we can see the changes in the past 5 years for Information Security Analysts and Web developers in the computer occupations. Based on this table summary, it can be noted that information security analysts saw almost a 50% growth in the total workers while web developers saw a 50% loss in total workers. Some of these loses can be noted for the percentage of women, Black, and Hispanic/Latino in the web developer occupation. Women were the greatest loss going from 34.3% to 27.% in just five years, while the average of Black people that left came into a close second going from 9.1% in 2015 down to 3.7% in 2020. Hispanic and Latino saw loses though not at the same impact as women and black. In comparison, the percentage of Asian nearly doubled, going from 9.6% to 16.2%, despite all the other minorities and the total workers seeing decreases. While information security analysts saw almost a double increase in the total workers, we can see decreases in women from 19.7% down to 11.4%. In comparison, minorities saw increases, the most being from Black people from a 3% to 11.9%, almost quadrupling. Hispanics and Latinos saw a slightly lower same rate of growth from 5.2% to 15.8%. While Asians saw some growth, it wasn’t nearly as big, but had still doubled in the percentage in the information security analysts field. Based on all these, we can see why the total workers had doubled for information security analysts, and why web developers had lost half of its total workers.

The two graphs focused on the job types over time and a specific year’s individual job totals. Job types over time would show me the trends throughout the past 15 years. As suspected, the lines stayed relatively straight for all computer applications, while the professional job types shows a steep growth. We see non-linear growth for total jobs, which started with a decrease from 2005 to 2010 before making a decent growth for the next five years and then having a more steeper growth after. Though, if we were to compare from just 2005 to 2020, excluding the movements it made, we see very minimal growth. The second graph looked into the total individual occupations in the year 2020. This shows us where all the workers tend to be gathered at. Based on the graph, software developers dominated the graph with over 1500 employees, while Mathematicians had close to 0. Everything else on average typically had no more than 250 total workers.

LS0tCnRpdGxlOiAiSGFycCAzMjUgTWlkdGVybSIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKVXNlIHRoZSBmb2xsb3dpbmcgZGF0YSB0byBwcm9kdWNlIDEgdGFibGUgb2Ygc3VtbWFyeSBpbmZvcm1hdGlvbiBhbmQgMi0zIGdyYXBocy4gCgpOb3RlcyBvbiB0aGUgZGF0YTogdGhlIHRvdGFsLCBwcm9mZXNzaW9uYWwsIGFuZCBjb21wdXRlcl9hbGwgam9iIGdyb3VwcyBhcmUgYXZhaWxhYmxlIGZvciBhbGwgZm91ciB5ZWFycyBvZiBkYXRhLiBGb2N1cyBvbiB0aGVzZSBpZiB5b3Ugd2FudCB0byBwcm9kdWNlIGdyYXBocyBvZiBqb2JzIG92ZXIgdGltZS4gVGhlIGluZGl2aWR1YWwgb2NjdXBhdGlvbnMgY2hhbmdlIGZyb20gb25lIHllYXIgdG8gdGhlIG5leHQsIHNvIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGdyYXBoIHRoZW0gb3ZlciB0aW1lICh3aXRoIHRoZSBleGNlcHRpb24gb2YgY29tcHV0ZXIgcHJvZ3JhbW1lcnMpLiBZb3UgbWF5LCBob3dldmVyLCBmaWx0ZXIgb25lIHllYXIgb2YgZGF0YSBhbmQgbWFrZSBhIGJhciBvciBwb2ludCBwbG90IGZvciBlYWNoIG9jY3VwYXRpb24gaW4gdGhhdCB5ZWFyLiAKClRoZSBBbGwgdmFyaWFibGUgaXMgbWVhc3VyZWQgYXMgdG90YWwgam9icyBpbiB0aGF0IGNhdGVnb3J5LCB3aGlsZSBXb21lbiwgQmxhY2ssIEFzaWFuLCBhbmQgTGF0aW5vIGFyZSB0aGUgcGVyY2VudCBvZiB3b3JrZXJzIHdobyBpZGVudGlmeSB3aXRoIGVhY2ggZ3JvdXAuIFlvdSBjYW5ub3QgcHV0IEFsbCBvbiB0aGUgc2FtZSBwbG90IGFzIG9uZSBvZiB0aGVzZSB2YXJpYWJsZXMsIHNpbmNlIHRoZXkgYXJlIG1lYXN1cmVkIGluIGRpZmZlcmVudCB1bml0cy4gCgpUaGUgZ29hbCBvZiB0aGUgYXNzaWdubWVudCBpcyBub3Qgb25seSB0byBwcmFjdGljZSBtYWtpbmcgcGxvdHM6IHlvdXIgdGFzayBpcyB0byBwcmVzZW50IHRoZSBkYXRhIGluIGEgY2xlYXIgYW5kIG1lYW5pbmdmdWwgd2F5LiBQb2ludHMgd2lsbCBiZSBkZWR1Y3RlZCwgZm9yIGV4YW1wbGUsIGZyb20gcGxvdHMgdGhhdCBhcmUgaGFyZCB0byByZWFkIG9yIHVuZGVyc3RhbmQuIFlvdSBhcmUgYWxzbyBlbmNvdXJhZ2VkIHRvIHRoaW5rIGFib3V0IGhvdyB0byB1c2UgY29sb3JzLCBsYWJlbHMsIGFuZCB0aGVtZXMgZWZmZWN0aXZlbHkuIEdyYXBocyB3aXRoIG11bHRpcGxlIGdyb3VwcyBtdXN0IGhhdmUgYSBsZWdlbmQuIAoKQWx0aG91Z2ggeW91IHdpbGwgbmVlZCB0byBmaWx0ZXIgdGhlIGRhdGEsIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgY2xlYW5lZCB1cCB0b28gbXVjaCBpbiBvcmRlciB0byBiZSBncmFwaGVkLiBEb24ndCBvdmVydGhpbmsgaXQhCgpgYGB7cn0Kc2V0d2QoIn4vRG9jdW1lbnRzL0RvY3VtZW50cyAtIEplc3MncyBNYWNCb29rIEFpci9ESURBIDMyNSIpCmRhdGEgPC0gcmVhZC5jc3YoIi9Vc2Vycy9qZXNzL0RvY3VtZW50cy9Eb2N1bWVudHMgLSBKZXNzJ3MgTWFjQm9vayBBaXIvRElEQSAzMjUvb2NjdXBhdGlvbl9nZW5kZXJfcmFjZS5jc3YiKQoKbGlicmFyeShkcGx5cikKbGlicmFyeShnZ3Bsb3QyKQoKaW5zdGFsbC5wYWNrYWdlcygiZ3JhZmlmeSIpCmxpYnJhcnkoZ3JhZmlmeSkKCmBgYAoKCmBgYCB7cn0KI2NyZWF0ZSAxIHRhYmxlIG9mIHN1bW1hcnkgaW5mb3JtYXRpb24gZm9yIHRoZSB0b3RhbCBhbmQgY29tcHV0ZXJfYWxsIGNhdGVnb3JpZXMKCiNZb3Ugc2hvdWxkICBpbmNsdWRlIGEgcGFyYWdyYXBoIG9yIHR3byB3aXRoIHlvdXIgYW5hbHlzaXMgdGhhdCBzdW1tYXJpemVzIGtleSBmaW5kaW5ncyBmcm9tIHlvdXIgd29yay4gCgpqb2JfY2F0ZW9ncnkgPC0gZGF0YSAlPiUKICBmaWx0ZXIoam9iX3R5cGUgJWluJSBjKCJ0b3RhbCIsICJjb21wdXRlcl9hbGwiKSkKCnN1bW1hcnlfam9iIDwtIGpvYl9jYXRlb2dyeSAlPiUKICBncm91cF9ieSh5ZWFyLCBqb2JfdHlwZSkgJT4lCiAgc3VtbWFyaXNlKAogICAgVG90YWxfV29ya2VycyA9IHN1bShBbGwsIG5hLnJtID0gVFJVRSksCiAgICBXb21lbl9BdmVyYWdlID0gbWVhbihXb21lbiwgbmEucm0gPSBUUlVFKSwKICAgIEJsYWNrX0F2ZXJhZ2UgPSBtZWFuKEJsYWNrLCBuYS5ybSA9IFRSVUUpLAogICAgQXNpYW5fQXZlcmFnZSA9IG1lYW4oQXNpYW4sIG5hLnJtID0gVFJVRSksCiAgICBIaXNwYW5pY19MYXRpbm9fQXZlcmFnZSA9IG1lYW4oSGlzcGFuaWMuTGF0aW5vLCBuYS5ybSA9IFRSVUUpCiAgKQoKcHJpbnQoc3VtbWFyeV9qb2IpCgoKYGBgCgpCYXNlZCBvbiB0aGUgc3VtbWFyeSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRvdGFsIGFuZCBjb21wdXRlcl9hbGwgY2F0ZWdvcmllcywgd2UgY2FuIGluZmVyIHRoYXQgdGhyb3VnaG91dCB0aGUgcGFzdCAxNSB5ZWFycywgd2UgaGF2ZSBzZWVuIGxpdHRsZSBncm93dGggaW4gdGhlIHRvdGFsIHdvcmtlcnMgZm9yIGFsbCBjb21wdXRlciBvY2N1cGF0aW9ucy4gV2hpbGUgd2Ugc2VlIGJpZ2dlciBncm93dGggZm9yIGNvbXB1dGVyIG9jY3VwYXRpb25zIGV2ZXJ5IGZpdmUgeWVhcnMsIHdlIG9ubHkgc2F3IGFyb3VuZCBhIDUwJSBhcm91bmQgZm9yIHRoZSBwYXN0IDE1IHllYXJzLiBPbiBhdmVyYWdlLCB0aGUgd29tZW4gaW4gdGhlIGZpZWxkIGhhZCBkZWNyZWFzZWQgZ29pbmcgZnJvbSBhbiBhdmVyYWdlIG9mIDI3JSBkb3duIHRvIDI1LjIlLiBEZXNwaXRlIHRoYXQsIHBlb3BsZSBvZiBjb2xvciBoYXZlIHNlZW4gYSBoaWdoZXIgcGVyY2VudGFnZSBvZiBwZW9wbGUgaW4gdGhlIGZpZWxkLCB3aXRoIEFzaWFucyBhbG1vc3QgZG91Ymxpbmcgc2luY2UgMjAwNSwgZ29pbmcgZnJvbSAxNC43JSB0byAyMyUuIE9uIGF2ZXJhZ2UsIEJsYWNrLCBIaXNwYW5pYywgYW5kIExhdGlubyBwZW9wbGUgZGlkIG5vdCBzZWUgdGhlIHNhbWUgZ3Jvd3RoIGp1bXAsIHRob3VnaCwgdGhlcmUgd2VyZSB3YXMgYW4gYXZlcmFnZSBvZiBhIDMlIGluY3JlYXNlIGluIHRoZSBwYXN0IDE1IHllYXJzLiBCYXNlZCBvbiB0aGlzIHRhYmxlIHN1bW1hcnksIHdlIHNlZSB0aGF0IHRoZXJlIGFyZSBzb21lIGdyb3d0aCBvZiBtaW5vcml0aWVzIGluIGNvbXB1dGVyIG9jY3VwYXRpb25zLCBidXQgaW4gdGhlIHBhc3QgMTUgeWVhcnMsIHRoZXNlIGdyb3d0aHMgYXJlIHByZXR0eSBtaW5pbWFsLiBXZSBjYW4gYWxzbyBpbmZlciB0aGF0IHRoZSB0b3RhbCBoYXMgc3RheWVkIHJlbGF0aXZlbHkgdGhlIHNhbWUgZm9yIHdvbWVuLCBidXQgdGhlIGNvbXB1dGVyIG9jY3VwYXRpb25zIHdpdGggd29tZW4gaGFzIGRlY3JlYXNlZCAsIHNob3dpbmcgdGhhdCBkZXNwaXRlIHNlZWluZyBzb21lIGluY3JlYXNlcywgaXQgZG9lc24ndCBhcHBseSB0byBhbGwuIAoKCmBgYHtyfQojc3VtbWFyeSB0YWJsZSBmb3IgMS0yIG9jY3VwYXRpb25zOiAKCnNwZWNpZmljX29jY3VwYXRpb24gPC0gZGF0YSAlPiUKICBmaWx0ZXIoZGVzY3JpcHRpb24gJWluJSBjKCJXZWIgZGV2ZWxvcGVycyIsICJJbmZvcm1hdGlvbiBzZWN1cml0eSBhbmFseXN0cyIpKQoKc3VtbWFyeV9qb2JzIDwtIHNwZWNpZmljX29jY3VwYXRpb24gJT4lCiAgZ3JvdXBfYnkoeWVhciwgam9iX3R5cGUsIGRlc2NyaXB0aW9uKSAlPiUKICBzdW1tYXJpc2UoCiAgICBUb3RhbF9Xb3JrZXJzID0gc3VtKEFsbCwgbmEucm0gPSBUUlVFKSwKICAgIFdvbWVuX0F2ZXJhZ2UgPSBtZWFuKFdvbWVuLCBuYS5ybSA9IFRSVUUpLAogICAgQmxhY2tfQXZlcmFnZSA9IG1lYW4oQmxhY2ssIG5hLnJtID0gVFJVRSksCiAgICBBc2lhbl9BdmVyYWdlID0gbWVhbihBc2lhbiwgbmEucm0gPSBUUlVFKSwKICAgIEhpc3BhbmljX0xhdGlub19BdmVyYWdlID0gbWVhbihIaXNwYW5pYy5MYXRpbm8sIG5hLnJtID0gVFJVRSkKICApCgpwcmludChzdW1tYXJ5X2pvYnMpCgoKYGBgCkJhc2VkIG9uIHRoZSBzcGVjaWZpYyBvY2N1cGF0aW9ucyBmcm9tIDIwMTUgdG8gMjAyMCwgd2UgY2FuIHNlZSB0aGUgY2hhbmdlcyBpbiB0aGUgcGFzdCA1IHllYXJzIGZvciBJbmZvcm1hdGlvbiBTZWN1cml0eSBBbmFseXN0cyBhbmQgV2ViIGRldmVsb3BlcnMgaW4gdGhlIGNvbXB1dGVyIG9jY3VwYXRpb25zLiBCYXNlZCBvbiB0aGlzIHRhYmxlIHN1bW1hcnksIGl0IGNhbiBiZSBub3RlZCB0aGF0IGluZm9ybWF0aW9uIHNlY3VyaXR5IGFuYWx5c3RzIHNhdyBhbG1vc3QgYSA1MCUgZ3Jvd3RoIGluIHRoZSB0b3RhbCB3b3JrZXJzIHdoaWxlIHdlYiBkZXZlbG9wZXJzIHNhdyBhIDUwJSBsb3NzIGluIHRvdGFsIHdvcmtlcnMuIFNvbWUgb2YgdGhlc2UgbG9zZXMgY2FuIGJlIG5vdGVkIGZvciB0aGUgcGVyY2VudGFnZSBvZiB3b21lbiwgQmxhY2ssIGFuZCBIaXNwYW5pYy9MYXRpbm8gaW4gdGhlIHdlYiBkZXZlbG9wZXIgb2NjdXBhdGlvbi4gV29tZW4gd2VyZSB0aGUgZ3JlYXRlc3QgbG9zcyBnb2luZyBmcm9tIDM0LjMlIHRvIDI3LiUgaW4ganVzdCBmaXZlIHllYXJzLCB3aGlsZSB0aGUgYXZlcmFnZSBvZiBCbGFjayBwZW9wbGUgdGhhdCBsZWZ0IGNhbWUgaW50byBhIGNsb3NlIHNlY29uZCBnb2luZyBmcm9tIDkuMSUgaW4gMjAxNSBkb3duIHRvIDMuNyUgaW4gMjAyMC4gSGlzcGFuaWMgYW5kIExhdGlubyBzYXcgbG9zZXMgdGhvdWdoIG5vdCBhdCB0aGUgc2FtZSBpbXBhY3QgYXMgd29tZW4gYW5kIGJsYWNrLiBJbiBjb21wYXJpc29uLCB0aGUgcGVyY2VudGFnZSBvZiBBc2lhbiBuZWFybHkgZG91YmxlZCwgZ29pbmcgZnJvbSA5LjYlIHRvIDE2LjIlLCBkZXNwaXRlIGFsbCB0aGUgb3RoZXIgbWlub3JpdGllcyBhbmQgdGhlIHRvdGFsIHdvcmtlcnMgc2VlaW5nIGRlY3JlYXNlcy4gV2hpbGUgaW5mb3JtYXRpb24gc2VjdXJpdHkgYW5hbHlzdHMgc2F3IGFsbW9zdCBhIGRvdWJsZSBpbmNyZWFzZSBpbiB0aGUgdG90YWwgd29ya2Vycywgd2UgY2FuIHNlZSBkZWNyZWFzZXMgaW4gd29tZW4gZnJvbSAxOS43JSBkb3duIHRvIDExLjQlLiBJbiBjb21wYXJpc29uLCBtaW5vcml0aWVzIHNhdyBpbmNyZWFzZXMsIHRoZSBtb3N0IGJlaW5nIGZyb20gQmxhY2sgcGVvcGxlIGZyb20gYSAzJSB0byAxMS45JSwgYWxtb3N0IHF1YWRydXBsaW5nLiBIaXNwYW5pY3MgYW5kIExhdGlub3Mgc2F3IGEgc2xpZ2h0bHkgbG93ZXIgc2FtZSByYXRlIG9mIGdyb3d0aCBmcm9tIDUuMiUgdG8gMTUuOCUuIFdoaWxlIEFzaWFucyBzYXcgc29tZSBncm93dGgsIGl0IHdhc24ndCBuZWFybHkgYXMgYmlnLCBidXQgaGFkIHN0aWxsIGRvdWJsZWQgaW4gdGhlIHBlcmNlbnRhZ2UgaW4gdGhlIGluZm9ybWF0aW9uIHNlY3VyaXR5IGFuYWx5c3RzIGZpZWxkLiBCYXNlZCBvbiBhbGwgdGhlc2UsIHdlIGNhbiBzZWUgd2h5IHRoZSB0b3RhbCB3b3JrZXJzIGhhZCBkb3VibGVkIGZvciBpbmZvcm1hdGlvbiBzZWN1cml0eSBhbmFseXN0cywgYW5kIHdoeSB3ZWIgZGV2ZWxvcGVycyBoYWQgbG9zdCBoYWxmIG9mIGl0cyB0b3RhbCB3b3JrZXJzLiAKCmBgYHtyfQogIyAyLTMgcGxvdHMgdXNpbmcgdGhlIGdncGxvdDIgcGFja2FnZSBpbiBSCgpqb2JfdHJlbmQgPC0gYygidG90YWwiLCAicHJvZmVzc2lvbmFsIiwgImNvbXB1dGVyX2FsbCIpCm92ZXJfdGltZSA8LSBkYXRhICU+JQogIGZpbHRlcihqb2JfdHlwZSAlaW4lIGpvYl90cmVuZCkKCgpnZ3Bsb3Qob3Zlcl90aW1lLCBhZXMoeCA9IHllYXIsIHkgPSBBbGwsIGNvbG9yID0gam9iX3R5cGUsIGdyb3VwID0gam9iX3R5cGUpKSArCiAgZ2VvbV9saW5lKCkgKwogIGxhYnModGl0bGUgPSAiVG90YWwsIFByb2Zlc3Npb25hbCwgYW5kIEFsbCBDb21wdXRlciBKb2IgVHJlbmRzIE92ZXIgVGltZSIsCiAgICAgICB4ID0gIlllYXIiLCB5ID0gIlRvdGFsIEpvYnMiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoInRvdGFsIiA9ICJwbHVtMSIsICJwcm9mZXNzaW9uYWwiID0gInB1cnBsZSIsICJjb21wdXRlcl9hbGwiID0gInN0ZWVsYmx1ZTEiKSkgKwogIHRoZW1lX21pbmltYWwoKQoKYGBgCgpgYGB7cn0KCgp5ZWFycyA8LSBjKDIwMjApCgpvY2N1cGF0aW9uX2RhdGEgPC0gZGF0YSAlPiUKICBmaWx0ZXIoeWVhciAlaW4lIHllYXJzLCBqb2JfdHlwZSAlaW4lIGMoImNvbXB1dGVyIikpCgoKZ2dwbG90KG9jY3VwYXRpb25fZGF0YSwgYWVzKHggPSBkZXNjcmlwdGlvbiwgeSA9IEFsbCwgZmlsbCA9IGZhY3Rvcih5ZWFyKSkpICsKICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgcG9zaXRpb24gPSAic3RhY2siKSArCiAgbGFicyh0aXRsZSA9ICJDb21wYXJpc29uIG9mIFRvdGFsIEpvYnMgYnkgT2NjdXBhdGlvbiBpbiAyMDIwIiwKICAgICAgIHggPSAiT2NjdXBhdGlvbiIsIHkgPSAiVG90YWwgSm9icyIpICsKICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCIyMDIwIiA9ICJwb3dkZXJibHVlIiksIG5hbWUgPSAiWWVhciIpICsKICB0aGVtZV9taW5pbWFsKCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0PTEgKSkKI2hhZCBzb21lIGlzc3VlcyB3aXRoIHRoZSB4LWF4aXMgaW50ZXJmZXJpbmcgd2l0aCB0aGUgZ3JhcGgsIGFuZCB1c2VkIHRoaXMgZm9yIGhlbHAgZm9yIGxpbmUgMTEzOmh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEzMzA5ODkvcm90YXRpbmctYW5kLXNwYWNpbmctYXhpcy1sYWJlbHMtaW4tZ2dwbG90MgoKYGBgClRoZSB0d28gZ3JhcGhzIGZvY3VzZWQgb24gdGhlIGpvYiB0eXBlcyBvdmVyIHRpbWUgYW5kIGEgc3BlY2lmaWMgeWVhcidzIGluZGl2aWR1YWwgam9iIHRvdGFscy4gSm9iIHR5cGVzIG92ZXIgdGltZSB3b3VsZCBzaG93IG1lIHRoZSB0cmVuZHMgdGhyb3VnaG91dCB0aGUgcGFzdCAxNSB5ZWFycy4gQXMgc3VzcGVjdGVkLCB0aGUgbGluZXMgc3RheWVkIHJlbGF0aXZlbHkgc3RyYWlnaHQgZm9yIGFsbCBjb21wdXRlciBhcHBsaWNhdGlvbnMsIHdoaWxlIHRoZSBwcm9mZXNzaW9uYWwgam9iIHR5cGVzIHNob3dzIGEgc3RlZXAgZ3Jvd3RoLiBXZSBzZWUgbm9uLWxpbmVhciBncm93dGggZm9yIHRvdGFsIGpvYnMsIHdoaWNoIHN0YXJ0ZWQgd2l0aCBhIGRlY3JlYXNlIGZyb20gMjAwNSB0byAyMDEwIGJlZm9yZSBtYWtpbmcgYSBkZWNlbnQgZ3Jvd3RoIGZvciB0aGUgbmV4dCBmaXZlIHllYXJzIGFuZCB0aGVuIGhhdmluZyBhIG1vcmUgc3RlZXBlciBncm93dGggYWZ0ZXIuIFRob3VnaCwgaWYgd2Ugd2VyZSB0byBjb21wYXJlIGZyb20ganVzdCAyMDA1IHRvIDIwMjAsIGV4Y2x1ZGluZyB0aGUgbW92ZW1lbnRzIGl0IG1hZGUsIHdlIHNlZSB2ZXJ5IG1pbmltYWwgZ3Jvd3RoLiBUaGUgc2Vjb25kIGdyYXBoIGxvb2tlZCBpbnRvIHRoZSB0b3RhbCBpbmRpdmlkdWFsIG9jY3VwYXRpb25zIGluIHRoZSB5ZWFyIDIwMjAuIFRoaXMgc2hvd3MgdXMgd2hlcmUgYWxsIHRoZSB3b3JrZXJzIHRlbmQgdG8gYmUgZ2F0aGVyZWQgYXQuIEJhc2VkIG9uIHRoZSBncmFwaCwgc29mdHdhcmUgZGV2ZWxvcGVycyBkb21pbmF0ZWQgdGhlIGdyYXBoIHdpdGggb3ZlciAxNTAwIGVtcGxveWVlcywgd2hpbGUgTWF0aGVtYXRpY2lhbnMgaGFkIGNsb3NlIHRvIDAuIEV2ZXJ5dGhpbmcgZWxzZSBvbiBhdmVyYWdlIHR5cGljYWxseSBoYWQgbm8gbW9yZSB0aGFuIDI1MCB0b3RhbCB3b3JrZXJzLiAK