1 Case 1

Assume you have collected some data set from ABC Property as we can see in the following table:

Id             <- (1:10000)
Marketing_Name <- rep(c("Angel","Sherly","Vanessa","Irene","Julian",
                        "Jeffry","Nikita","Kefas","Siana","Lala",
                        "Fallen","Ardifo","Kevin","Juen","Jerrel",
                        "Imelda","Widi","Theodora","Elvani","Jonathan",
                        "Sofia","Abraham","Siti","Niko","Sefli",
                        "Bene", "Diana", "Pupe", "Andi", "Tatha",
                        "Endri", "Monika", "Hans", "Debora","Hanifa",
                        "James", "Jihan", "Friska","Ardiwan", "Bakti",
                        "Anthon","Amry", "Wiwik", "Bastian", "Budi",
                        "Leo","Simon","Matius","Arry", "Eliando"), 200)
Work_Exp       <- rep(c(1.3,2.4,2.5,3.6,3.7,4.7,5.7,6.7,7.7,7.3,
                        5.3,5.3,10,9.3,3.3,3.3,3.4,3.4,3.5,5.6,
                        3.5,4.6,4.6,5.7,6.2,4.4,6.4,6.4,3.5,7.5,
                        4.6,3.7,4.7,4.3,5.2,6.3,7.4,2.4,3.4,8.2,
                        6.4,7.2,1.5,7.5,10,4.5,6.5,7.2,7.1,7.6),200)
City           <- sample(c("Jakarta","Bogor","Depok","Tengerang","Bekasi"),10000, replace = T)
Cluster        <- sample(c("Victoria","Palmyra","Winona","Tiara", "Narada",
                           "Peronia","Lavesh","Alindra","Sweethome", "Asera",
                           "Teradamai","Albasia", "Adara","Neon","Arana",
                           "Asoka", "Primadona", "Mutiara","Permata","Alamanda" ), 10000, replace=T)
Price          <- sample(c(7000:15000),10000, replace = T)
Date_Sales     <- sample(seq(as.Date("2018/01/01"), by = "day", length.out = 1000),10000, replace = T)
Advertisement  <- sample(c(1:20), 10000, replace = T)
Data           <- data.frame(Id, 
                             Marketing_Name,
                             Work_Exp,
                             City,
                             Cluster,
                             Price,
                             Date_Sales,
                             Advertisement)
library(DT)
datatable(Data)

1.1 Task 1

Categorize the Price into three groups:

  • \(\text{High} > 1200\)
  • \(1000 \le \text{Medium} \le 12000\)
  • \(\text{Low} < 10000\)

Assign it into a new variable called Class by using If and else if statement.

1.2 Task 2

Categorize the Price into six groups:

  • 5 % Booking fee if the \(\text{Price} < 8000\)
  • 6 % Booking fee if the \(8000 \le \text{Price} < 9000\)
  • 7 % Booking fee if the \(9000 \le \text{Price} < 10000\)
  • 8 % Booking fee if the \(10000 \le \text{Price} < 11000\)
  • 9 % Booking fee if the \(11000 \le \text{Price} < 13000\)
  • 10 % Booking fee if the \(13000 \le \text{Price} \le 15000\)

Assign it into a new variable called Booking_fee by using if and else if statements.

1.3 Task 3

According to the final date set that you have created at task 2, I assume you have been working as marketing at ABC Property company, how could you collected all information about your sales by using for statement.

1.4 Task 4

If you will get pay 2% bonus of the Booking fee per-unit as marketing and also get an extra 1% bonus if you have been working at this company for more than 3 years. Please calculate the total bonus by using if, for, and break statements.

1.5 Task 5

In this section your are expected to be able to use all statements that you just learn earlier. So, please answer the following questions:

  • Who is the best marketing?
  • Which City and Cluster is the most profitable?
  • Calculate your total advertisement cost, if you have to pay them $4 once.
  • Calculate the average advertisement cost for each marketing.
  • Calculate the Total Revenue (in Monthly)

2 Case 2

Suppose you have a market research project to maintain some potential customers at your company. Let’s assume you are working at ABC insurance company. To do so, you want to collect the following data set:

  • Marital_Status : assign random marital status (“Yes”, “No”)
  • Address : assign random address (JABODETABEK)
  • Work_Location : assign random working location (JABODETABEK)
  • Age : assign a sequence of random numbers (from 19 to 60)
  • Academic : assign random academic levels (“J.School”,“H.School”, “Undergraduate”, “Master”, “Phd”)
  • Job : 10 random jobs for each academic levels
  • Grade : 5 random grades for each Jobs
  • Income : assign the possible income for each Jobs
  • Spending : assign the possible spending for each Jobs
  • Number_of_children: assign a random number in between 0 and 10 (according to marital status)
  • Private_vehicle : assign the possible private vehicle for each person (“Car”, “motorcycle”, “Public”)
  • Home : “Rent”, “Own”, “Credit”

2.1 Task 1

Please provide me a data set about the information of 50000 customers refers to each variable above!

2.2 Task 2

What kind of important summary statistics you can get from your data set?

2.3 Task 3

According to your calculations and analysis, which customers are potential for you to maintain?

2.4 Task 4

The following types of insurance are available in Indonesia:

  • Life insurance
  • Health Insurance
  • Vehicle Insurance
  • Home and property insurance
  • Education insurance
  • Business Insurance
  • General insurance
  • Credit Insurance
  • Marine Insurance
  • Travel Insurance

Which insurance product will you provide to your customers?

# Calculation & Analysis (to make your answer below are reasonable)
# Add new variable to your data set (assign product for each customers)
LS0tDQp0aXRsZTogIk1pZHRlcm0gRXhhbSB+IERhdGEgU3RydWN0dXJlcyBhbmQgQWxnb3JpdGhtcyINCmF1dGhvcjogIkJha3RpIFNpcmVnYXIsIFMuU2kuLCBNLlNjIg0KZGF0ZTogImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0OiAgDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgaGlnaGxpZ2h0OiBweWdtZW50cw0KICAgIHRoZW1lOiBzcGFjZWxhYg0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6IHllcw0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogaGlkZSANCi0tLQ0KDQpgYGB7ciBMb2dvLCBlY2hvPUZBTFNFLGZpZy5hbGlnbj0nY2VudGVyJywgb3V0LndpZHRoID0gJzQwJSd9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiaHR0cHM6Ly9naXRodWIuY29tL0Jha3RpLVNpcmVnYXIvaW1hZ2VzL2Jsb2IvbWFzdGVyL2xvZ28ucG5nP3Jhdz10cnVlIikNCmBgYA0KDQoNCiMgQ2FzZSAxDQoNCkFzc3VtZSB5b3UgaGF2ZSBjb2xsZWN0ZWQgc29tZSBkYXRhIHNldCBmcm9tIGBBQkMgUHJvcGVydHlgIGFzIHdlIGNhbiBzZWUgaW4gdGhlIGZvbGxvd2luZyB0YWJsZToNCg0KYGBge3IsIG1lc3NhZ2U9Rn0NCklkICAgICAgICAgICAgIDwtICgxOjEwMDAwKQ0KTWFya2V0aW5nX05hbWUgPC0gcmVwKGMoIkFuZ2VsIiwiU2hlcmx5IiwiVmFuZXNzYSIsIklyZW5lIiwiSnVsaWFuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJKZWZmcnkiLCJOaWtpdGEiLCJLZWZhcyIsIlNpYW5hIiwiTGFsYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiRmFsbGVuIiwiQXJkaWZvIiwiS2V2aW4iLCJKdWVuIiwiSmVycmVsIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICJJbWVsZGEiLCJXaWRpIiwiVGhlb2RvcmEiLCJFbHZhbmkiLCJKb25hdGhhbiIsDQogICAgICAgICAgICAgICAgICAgICAgICAiU29maWEiLCJBYnJhaGFtIiwiU2l0aSIsIk5pa28iLCJTZWZsaSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiQmVuZSIsICJEaWFuYSIsICJQdXBlIiwgIkFuZGkiLCAiVGF0aGEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkVuZHJpIiwgIk1vbmlrYSIsICJIYW5zIiwgIkRlYm9yYSIsIkhhbmlmYSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiSmFtZXMiLCAiSmloYW4iLCAiRnJpc2thIiwiQXJkaXdhbiIsICJCYWt0aSIsDQogICAgICAgICAgICAgICAgICAgICAgICAiQW50aG9uIiwiQW1yeSIsICJXaXdpayIsICJCYXN0aWFuIiwgIkJ1ZGkiLA0KICAgICAgICAgICAgICAgICAgICAgICAgIkxlbyIsIlNpbW9uIiwiTWF0aXVzIiwiQXJyeSIsICJFbGlhbmRvIiksIDIwMCkNCldvcmtfRXhwICAgICAgIDwtIHJlcChjKDEuMywyLjQsMi41LDMuNiwzLjcsNC43LDUuNyw2LjcsNy43LDcuMywNCiAgICAgICAgICAgICAgICAgICAgICAgIDUuMyw1LjMsMTAsOS4zLDMuMywzLjMsMy40LDMuNCwzLjUsNS42LA0KICAgICAgICAgICAgICAgICAgICAgICAgMy41LDQuNiw0LjYsNS43LDYuMiw0LjQsNi40LDYuNCwzLjUsNy41LA0KICAgICAgICAgICAgICAgICAgICAgICAgNC42LDMuNyw0LjcsNC4zLDUuMiw2LjMsNy40LDIuNCwzLjQsOC4yLA0KICAgICAgICAgICAgICAgICAgICAgICAgNi40LDcuMiwxLjUsNy41LDEwLDQuNSw2LjUsNy4yLDcuMSw3LjYpLDIwMCkNCkNpdHkgICAgICAgICAgIDwtIHNhbXBsZShjKCJKYWthcnRhIiwiQm9nb3IiLCJEZXBvayIsIlRlbmdlcmFuZyIsIkJla2FzaSIpLDEwMDAwLCByZXBsYWNlID0gVCkNCkNsdXN0ZXIgICAgICAgIDwtIHNhbXBsZShjKCJWaWN0b3JpYSIsIlBhbG15cmEiLCJXaW5vbmEiLCJUaWFyYSIsICJOYXJhZGEiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIlBlcm9uaWEiLCJMYXZlc2giLCJBbGluZHJhIiwiU3dlZXRob21lIiwgIkFzZXJhIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXJhZGFtYWkiLCJBbGJhc2lhIiwgIkFkYXJhIiwiTmVvbiIsIkFyYW5hIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJBc29rYSIsICJQcmltYWRvbmEiLCAiTXV0aWFyYSIsIlBlcm1hdGEiLCJBbGFtYW5kYSIgKSwgMTAwMDAsIHJlcGxhY2U9VCkNClByaWNlICAgICAgICAgIDwtIHNhbXBsZShjKDcwMDA6MTUwMDApLDEwMDAwLCByZXBsYWNlID0gVCkNCkRhdGVfU2FsZXMgICAgIDwtIHNhbXBsZShzZXEoYXMuRGF0ZSgiMjAxOC8wMS8wMSIpLCBieSA9ICJkYXkiLCBsZW5ndGgub3V0ID0gMTAwMCksMTAwMDAsIHJlcGxhY2UgPSBUKQ0KQWR2ZXJ0aXNlbWVudCAgPC0gc2FtcGxlKGMoMToyMCksIDEwMDAwLCByZXBsYWNlID0gVCkNCkRhdGEgICAgICAgICAgIDwtIGRhdGEuZnJhbWUoSWQsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXJrZXRpbmdfTmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV29ya19FeHAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENpdHksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsdXN0ZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByaWNlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlX1NhbGVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZHZlcnRpc2VtZW50KQ0KbGlicmFyeShEVCkNCmRhdGF0YWJsZShEYXRhKQ0KYGBgDQoNCiMjIFRhc2sgMSANCg0KQ2F0ZWdvcml6ZSB0aGUgYFByaWNlYCBpbnRvIHRocmVlIGdyb3VwczogDQoNCiogJFx0ZXh0e0hpZ2h9ID4gMTIwMCQNCiogJDEwMDAgXGxlIFx0ZXh0e01lZGl1bX0gXGxlIDEyMDAwJA0KKiAkXHRleHR7TG93fSA8IDEwMDAwJA0KDQpBc3NpZ24gaXQgaW50byBhIG5ldyB2YXJpYWJsZSBjYWxsZWQgYENsYXNzYCBieSB1c2luZyBgSWZgIGFuZCBgZWxzZSBpZmAgc3RhdGVtZW50LiANCg0KYGBge3J9DQoNCmBgYA0KDQoNCiMjIFRhc2sgMg0KDQpDYXRlZ29yaXplIHRoZSBgUHJpY2VgIGludG8gc2l4IGdyb3VwczogDQoNCiogNSAlIEJvb2tpbmcgZmVlIGlmIHRoZSAkXHRleHR7UHJpY2V9IDwgODAwMCQNCiogNiAlIEJvb2tpbmcgZmVlIGlmIHRoZSAkODAwMCBcbGUgXHRleHR7UHJpY2V9IDwgOTAwMCQNCiogNyAlIEJvb2tpbmcgZmVlIGlmIHRoZSAkOTAwMCBcbGUgXHRleHR7UHJpY2V9IDwgMTAwMDAkDQoqIDggJSBCb29raW5nIGZlZSBpZiB0aGUgJDEwMDAwIFxsZSBcdGV4dHtQcmljZX0gPCAxMTAwMCQNCiogOSAlIEJvb2tpbmcgZmVlIGlmIHRoZSAkMTEwMDAgXGxlIFx0ZXh0e1ByaWNlfSA8IDEzMDAwJA0KKiAxMCAlIEJvb2tpbmcgZmVlIGlmIHRoZSAkMTMwMDAgXGxlIFx0ZXh0e1ByaWNlfSBcbGUgMTUwMDAkDQoNCkFzc2lnbiBpdCBpbnRvIGEgbmV3IHZhcmlhYmxlIGNhbGxlZCBgQm9va2luZ19mZWVgIGJ5IHVzaW5nIGBpZmAgYW5kIGBlbHNlIGlmYCBzdGF0ZW1lbnRzLiANCg0KYGBge3J9DQoNCmBgYA0KDQoNCiMjIFRhc2sgMyANCg0KQWNjb3JkaW5nIHRvIHRoZSBmaW5hbCBkYXRlIHNldCB0aGF0IHlvdSBoYXZlIGNyZWF0ZWQgYXQgdGFzayAyLCBJIGFzc3VtZSB5b3UgaGF2ZSBiZWVuIHdvcmtpbmcgYXMgbWFya2V0aW5nIGF0IGBBQkMgUHJvcGVydHlgIGNvbXBhbnksIGhvdyBjb3VsZCB5b3UgY29sbGVjdGVkIGFsbCBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHNhbGVzIGJ5IHVzaW5nIGBmb3JgIHN0YXRlbWVudC4NCg0KYGBge3J9DQoNCmBgYA0KDQoNCiMjIFRhc2sgNCANCg0KSWYgeW91IHdpbGwgZ2V0IHBheSAyJSBib251cyBvZiB0aGUgYEJvb2tpbmcgZmVlYCBwZXItdW5pdCBhcyBtYXJrZXRpbmcgYW5kIGFsc28gZ2V0IGFuIGV4dHJhIDElIGJvbnVzIGlmIHlvdSBoYXZlIGJlZW4gd29ya2luZyBhdCB0aGlzIGNvbXBhbnkgZm9yIG1vcmUgdGhhbiAzIHllYXJzLiBQbGVhc2UgY2FsY3VsYXRlIHRoZSB0b3RhbCBib251cyBieSB1c2luZyBgaWYsIGZvciwgYW5kIGJyZWFrYCBzdGF0ZW1lbnRzLiANCg0KYGBge3J9DQoNCmBgYA0KDQoNCiMjIFRhc2sgNQ0KDQpJbiB0aGlzIHNlY3Rpb24geW91ciBhcmUgZXhwZWN0ZWQgdG8gYmUgYWJsZSB0byB1c2UgYWxsIHN0YXRlbWVudHMgdGhhdCB5b3UganVzdCBsZWFybiBlYXJsaWVyLiBTbywgcGxlYXNlIGFuc3dlciB0aGUgZm9sbG93aW5nIHF1ZXN0aW9uczoNCg0KKiBXaG8gaXMgdGhlIGJlc3QgbWFya2V0aW5nPw0KKiBXaGljaCBDaXR5IGFuZCBDbHVzdGVyIGlzIHRoZSBtb3N0IHByb2ZpdGFibGU/DQoqIENhbGN1bGF0ZSB5b3VyIHRvdGFsIGFkdmVydGlzZW1lbnQgY29zdCwgaWYgeW91IGhhdmUgdG8gcGF5IHRoZW0gJDQgb25jZS4gICANCiogQ2FsY3VsYXRlIHRoZSBhdmVyYWdlIGFkdmVydGlzZW1lbnQgY29zdCBmb3IgZWFjaCBtYXJrZXRpbmcuDQoqIENhbGN1bGF0ZSB0aGUgVG90YWwgUmV2ZW51ZSAoaW4gTW9udGhseSkgDQoNCg0KIyBDYXNlIDINCg0KU3VwcG9zZSB5b3UgaGF2ZSBhIG1hcmtldCByZXNlYXJjaCBwcm9qZWN0IHRvIG1haW50YWluIHNvbWUgcG90ZW50aWFsIGN1c3RvbWVycyBhdCB5b3VyIGNvbXBhbnkuIExldCdzIGFzc3VtZSB5b3UgYXJlIHdvcmtpbmcgYXQgQUJDIGluc3VyYW5jZSBjb21wYW55LiBUbyBkbyBzbywgeW91IHdhbnQgdG8gY29sbGVjdCB0aGUgZm9sbG93aW5nIGRhdGEgc2V0Og0KDQoqICoqTWFyaXRhbF9TdGF0dXMqKiAgICA6IGFzc2lnbiByYW5kb20gbWFyaXRhbCBzdGF0dXMgKCJZZXMiLCAiTm8iKQ0KKiAqKkFkZHJlc3MqKiAgICAgICAgICAgOiBhc3NpZ24gcmFuZG9tIGFkZHJlc3MgKEpBQk9ERVRBQkVLKQ0KKiAqKldvcmtfTG9jYXRpb24qKiAgICAgOiBhc3NpZ24gcmFuZG9tIHdvcmtpbmcgbG9jYXRpb24gKEpBQk9ERVRBQkVLKQ0KKiAqKkFnZSoqICAgICAgICAgICAgICAgOiBhc3NpZ24gYSBzZXF1ZW5jZSBvZiByYW5kb20gbnVtYmVycyAoZnJvbSAxOSB0byA2MCkgDQoqICoqQWNhZGVtaWMqKiAgICAgICAgICA6IGFzc2lnbiByYW5kb20gYWNhZGVtaWMgbGV2ZWxzICgiSi5TY2hvb2wiLCJILlNjaG9vbCIsICJVbmRlcmdyYWR1YXRlIiwgIk1hc3RlciIsICJQaGQiKQ0KKiAqKkpvYioqICAgICAgICAgICAgICAgOiAxMCByYW5kb20gam9icyBmb3IgZWFjaCBhY2FkZW1pYyBsZXZlbHMgDQoqICoqR3JhZGUqKiAgICAgICAgICAgICA6IDUgcmFuZG9tIGdyYWRlcyBmb3IgZWFjaCBKb2JzDQoqICoqSW5jb21lKiogICAgICAgICAgICA6IGFzc2lnbiB0aGUgcG9zc2libGUgaW5jb21lIGZvciBlYWNoIEpvYnMgDQoqICoqU3BlbmRpbmcqKiAgICAgICAgICA6IGFzc2lnbiB0aGUgcG9zc2libGUgc3BlbmRpbmcgZm9yIGVhY2ggSm9icw0KKiAqKk51bWJlcl9vZl9jaGlsZHJlbioqOiBhc3NpZ24gYSByYW5kb20gbnVtYmVyIGluIGJldHdlZW4gMCBhbmQgMTAgKGFjY29yZGluZyB0byBtYXJpdGFsIHN0YXR1cykNCiogKipQcml2YXRlX3ZlaGljbGUqKiAgIDogYXNzaWduIHRoZSBwb3NzaWJsZSBwcml2YXRlIHZlaGljbGUgZm9yIGVhY2ggcGVyc29uICgiQ2FyIiwgIm1vdG9yY3ljbGUiLCAiUHVibGljIikNCiogKipIb21lKiogICAgICAgICAgICAgIDogIlJlbnQiLCAiT3duIiwgIkNyZWRpdCINCg0KIyMgVGFzayAxDQoNClBsZWFzZSBwcm92aWRlIG1lIGEgZGF0YSBzZXQgYWJvdXQgdGhlIGluZm9ybWF0aW9uIG9mIDUwMDAwIGN1c3RvbWVycyByZWZlcnMgdG8gZWFjaCB2YXJpYWJsZSBhYm92ZSENCg0KYGBge3J9DQoNCmBgYA0KDQoNCiMjIFRhc2sgMiANCg0KV2hhdCBraW5kIG9mIGltcG9ydGFudCBzdW1tYXJ5IHN0YXRpc3RpY3MgeW91IGNhbiBnZXQgZnJvbSB5b3VyIGRhdGEgc2V0Pw0KDQpgYGB7cn0NCg0KYGBgDQoNCg0KIyMgVGFzayAzDQoNCkFjY29yZGluZyB0byB5b3VyIGNhbGN1bGF0aW9ucyBhbmQgYW5hbHlzaXMsIHdoaWNoIGN1c3RvbWVycyBhcmUgcG90ZW50aWFsIGZvciB5b3UgdG8gbWFpbnRhaW4/DQoNCmBgYHtyfQ0KDQpgYGANCg0KIyMgVGFzayA0DQoNClRoZSBmb2xsb3dpbmcgW3R5cGVzIG9mIGluc3VyYW5jZV0oaHR0cHM6Ly93d3cuY2FyLmNvLmlkL2lkL3J1YW5nLXB1Ymxpay90aXBzLXRyaWsvY2FyZWluc3VyYW5jZS9qZW5pcy1qZW5pcy1hc3VyYW5zaSkgYXJlIGF2YWlsYWJsZSBpbiBJbmRvbmVzaWE6DQoNCiogTGlmZSBpbnN1cmFuY2UNCiogSGVhbHRoIEluc3VyYW5jZQ0KKiBWZWhpY2xlIEluc3VyYW5jZQ0KKiBIb21lIGFuZCBwcm9wZXJ0eSBpbnN1cmFuY2UNCiogRWR1Y2F0aW9uIGluc3VyYW5jZQ0KKiBCdXNpbmVzcyBJbnN1cmFuY2UNCiogR2VuZXJhbCBpbnN1cmFuY2UNCiogQ3JlZGl0IEluc3VyYW5jZQ0KKiBNYXJpbmUgSW5zdXJhbmNlDQoqIFRyYXZlbCBJbnN1cmFuY2UNCg0KV2hpY2ggaW5zdXJhbmNlIHByb2R1Y3Qgd2lsbCB5b3UgcHJvdmlkZSB0byB5b3VyIGN1c3RvbWVycz8gDQoNCmBgYHtyfQ0KIyBDYWxjdWxhdGlvbiAmIEFuYWx5c2lzICh0byBtYWtlIHlvdXIgYW5zd2VyIGJlbG93IGFyZSByZWFzb25hYmxlKQ0KDQpgYGANCg0KDQpgYGB7cn0NCiMgQWRkIG5ldyB2YXJpYWJsZSB0byB5b3VyIGRhdGEgc2V0IChhc3NpZ24gcHJvZHVjdCBmb3IgZWFjaCBjdXN0b21lcnMpDQoNCmBgYA0KDQoNCg0K