About

Clearly show and organise your work. Each answer should appear below the question marked in red. Where necessary execute the already included code chunk, and add yours to perform required calculations.

Problem 1: Linear Programming Optimization (15 points)

A manufacturing company produces two types of hiking shoes, the Deer and the Stern models. The manufacturing consists of two principal departments: fabrication and finishing. Fabrication has 12 workers each of whom works 7 hours per day. Finishing has 3 workers, who also work a 7-hour shift. Each pair of Deer shoes requires 3.5 labor hours in fabrication and 1 labor-hour in finishing. The Stern model requires 4 hours in fabrication and 1.5 hours in finishing. The company operates 5 days per week and makes a net profit of \(\$50\) on the Deer model and \(\$65\) on the Stern. The company expects selling at least twice as many Stern models as Deer models. The company wants to determine how many of each model should be produced on daily basis to optimize its net profit (15 points)

1A) Write the mathematical formulation of the objective function and state the type of optimization. Define the constraints in a tabular or matrix form. Clearly identify the decision variables (no coding required) (5pts) you are saying no coding is required, so I wil not code to create a matrix/table. I will be displaying the data like this. You want to maximize profits for the company. 65x1+50x2=z MAXIMIZE Constaints 4x1+3.5x2<=84 fabricating hours limit 1.5x1+1x1<=21 finishing hours limit -1x1+2x2=0 must sell 2x more sterns than deer 1x1<=0 units sold must be positive 1x2<=0 units sold must be postive The decision variables are the number of hours of fabrication and finishing available, and selling 2x as many stern as deer models.

1B) Implement the linear optimization model to find the optimal solution. The code to load the required package is included for your convenience. Add the necessary code to complete, and make sure to display your final results showing the optimum values (5pts)

# Require will load the package only if not installed 
# Dependencies = TRUE makes sure that dependencies are install
if(!require("lpSolveAPI",quietly = TRUE))
  install.packages("lpSolveAPI",dependencies = TRUE, repos = "https://cloud.r-project.org")
lpmark = make.lp(0, 2)


dummy = lp.control(lpmark, sense="max") 
set.objfn(lpmark, c(65, 50))
add.constraint(lpmark, c(-1, 2), "=", 0)
add.constraint(lpmark, c(1,0),">=",0)
add.constraint(lpmark, c(0,1), ">=",0)
add.constraint(lpmark, c(4,3.5), "<=",84)
add.constraint(lpmark, c(1.5,1), "<=",21)
lpmark
Model name: 
            C1    C2        
Maximize    65    50        
R1          -1     2   =   0
R2           1     0  >=   0
R3           0     1  >=   0
R4           4   3.5  <=  84
R5         1.5     1  <=  21
Kind       Std   Std        
Type      Real  Real        
Upper      Inf   Inf        
Lower        0     0        
solve(lpmark)
[1] 0
get.objective(lpmark)
[1] 945
# display the decision variables optimum values
get.variables(lpmark)
[1] 10.50  5.25

optimum sales/day is 945, would sell 10.5 sterns a day and 5.25 deers a day. 1C) Identify the binding constraint(s) and calculate corresponding marginal value (3pts)

get.sensitivity.rhs(lpmark) 
$duals
[1]  2.5  0.0  0.0  0.0 45.0  0.0  0.0

$dualsfrom
[1] -1.4e+01 -1.0e+30 -1.0e+30 -1.0e+30  0.0e+00
[6] -1.0e+30 -1.0e+30

$dualstill
[1] 4.200000e+01 1.000000e+30 1.000000e+30
[4] 1.000000e+30 2.921739e+01 1.000000e+30
[7] 1.000000e+30

The binding contraints are the ones that have nonzero values. In this case, it is the first constraint, (must sell 2x more sterns than deer, -1x1+2x1=0) and the 5th contraint (only have 21 finishing hours a day and sterns take 1.5 and deers take 1 hour, 1.5x1+1x2<=21)

The marginal value of the fifth constraint means that if the number of fabricating hours increased by 1 (21 to 22) the sales would increase by $45. The marginal value of the first constraint means that if the contraint were to increase by 1, then sales would increase by 2.5 dollars. 1D)Identify the non-binding constraint(s) and calculate corresponding surplus/slack (2pts) The nonbinding contraints are the second (x1>=0), third (x2>=0), and forth (4x1+3.5x2<=84). This means that if the constraint increases by one (84 to 85), the sales will not increase. Surplus: constraint 2 slack: 10.5 10.5-0= 10.5 constraint 3 slack: 5.35 5.25-0= 5.25 constraint 4 slack: 24.5 10.54+3.55

84-(10.5*4+3.5*5)
[1] 24.5

Problem 2: Simple Linear Regression (10 points)

A college bookstore must order books two months before each semester starts. It is believed that the number of books that will ultimately be sold for any particular course is related to the number of students registered for the course when the books are ordered. They would like to develop a linear regression model to help plan how many books to order. From past records, the bookstore obtains the number of students registered, and the number of books actually sold for a course, for 12 different semesters. The data is read from a file.

mydata = read.csv("books.csv", header=TRUE, sep=",")
head(mydata)
students = mydata$Students
books = mydata$Books

2A) Draw a scatter plot. Make sure to label the X-axis with the independent (explanatory) variable and the Y-axis with the dependent (response) variable (3pts)

plot(students, books, xlab = "# students", ylab= "# books")

2B) Develop a simple linear regression model to describe the relationship between the two variables. Add the fitted line to the plot (3pts)

linear_model = lm(books ~ students)
summary(linear_model)

Call:
lm(formula = books ~ students)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.51818 -0.60000  0.01818  0.60455  3.13636 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   9.3000     3.4346   2.708    0.022 *  
students      0.6727     0.1032   6.518 6.74e-05 ***
---
Signif. codes:  
0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.531 on 10 degrees of freedom
Multiple R-squared:  0.8095,    Adjusted R-squared:  0.7904 
F-statistic: 42.48 on 1 and 10 DF,  p-value: 6.741e-05
plot(students,books)
#Add a trend line plot using the reg linear model 
abline(linear_model, col="blue", lwd=2)

2C) Interpret the coefficients of the regression model, the intercept and the slope,in terms of this problem (2pts) y=9.3000+ 0.6727x The coefficients mean: that for each 1 student, they should get .6727 books. This means that for each student they are getting .6727 books. This could mean students are sharing books or not buying them. The 9.3 means that for 0 students, there should be 0 books. This does not make sense, as if there are zero students, there should be zero books.

2D) Predict the number of books that would be sold in a semester when 35 students have registered. Calculate the corresponding error squared (2pts)

9.3+.6727*35
[1] 32.8445

actual sata observed is 34

(34-32.8445)^2
[1] 1.33518

error squared

LS0tDQp0aXRsZTogIkV4YW0gMiINCmF1dGhvcjogIkxhdXJlbiBLcm9sbCINCmRhdGU6ICJBcHJpbCA5dGgsIDIwMjAiDQpvdXRwdXQ6DQogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQNCiAgaHRtbF9kb2N1bWVudDogZGVmYXVsdA0KICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQNCnN1YnRpdGxlOiBCU0FEIDM0M0gsIEJ1c2luZXNzIEFuYWx5dGljcywgU3ByaW5nIDIwMjANCi0tLQ0KDQojIyMgQWJvdXQgDQpDbGVhcmx5IHNob3cgYW5kIG9yZ2FuaXNlIHlvdXIgd29yay4gRWFjaCBhbnN3ZXIgc2hvdWxkIGFwcGVhciBiZWxvdyB0aGUgcXVlc3Rpb24gbWFya2VkIGluIHJlZC4gV2hlcmUgbmVjZXNzYXJ5IGV4ZWN1dGUgdGhlIGFscmVhZHkgaW5jbHVkZWQgIGNvZGUgY2h1bmssIGFuZCBhZGQgeW91cnMgdG8gcGVyZm9ybSByZXF1aXJlZCBjYWxjdWxhdGlvbnMuIA0KDQojIyMgUHJvYmxlbSAxOiBMaW5lYXIgUHJvZ3JhbW1pbmcgT3B0aW1pemF0aW9uICgxNSBwb2ludHMpDQoNCkEgbWFudWZhY3R1cmluZyBjb21wYW55IHByb2R1Y2VzIHR3byB0eXBlcyBvZiBoaWtpbmcgc2hvZXMsIHRoZSBEZWVyIGFuZCB0aGUgU3Rlcm4gbW9kZWxzLiBUaGUgbWFudWZhY3R1cmluZyBjb25zaXN0cyBvZiB0d28gcHJpbmNpcGFsIGRlcGFydG1lbnRzOiBmYWJyaWNhdGlvbiBhbmQgZmluaXNoaW5nLiBGYWJyaWNhdGlvbiBoYXMgMTIgd29ya2VycyBlYWNoIG9mIHdob20gd29ya3MgNyBob3VycyBwZXIgZGF5LiBGaW5pc2hpbmcgaGFzIDMgd29ya2Vycywgd2hvIGFsc28gd29yayBhIDctaG91ciBzaGlmdC4gRWFjaCBwYWlyIG9mIERlZXIgc2hvZXMgcmVxdWlyZXMgMy41IGxhYm9yIGhvdXJzIGluIGZhYnJpY2F0aW9uIGFuZCAxIGxhYm9yLWhvdXIgaW4gZmluaXNoaW5nLiBUaGUgU3Rlcm4gbW9kZWwgcmVxdWlyZXMgNCBob3VycyBpbiBmYWJyaWNhdGlvbiBhbmQgMS41IGhvdXJzIGluIGZpbmlzaGluZy4gIFRoZSBjb21wYW55IG9wZXJhdGVzIDUgZGF5cyBwZXIgd2VlayBhbmQgbWFrZXMgYSBuZXQgcHJvZml0IG9mICRcJDUwJCBvbiB0aGUgRGVlciBtb2RlbCBhbmQgJFwkNjUkIG9uIHRoZSBTdGVybi4gVGhlIGNvbXBhbnkgZXhwZWN0cyBzZWxsaW5nIGF0IGxlYXN0IHR3aWNlIGFzIG1hbnkgU3Rlcm4gbW9kZWxzIGFzIERlZXIgbW9kZWxzLiBUaGUgY29tcGFueSB3YW50cyB0byBkZXRlcm1pbmUgaG93IG1hbnkgb2YgZWFjaCBtb2RlbCBzaG91bGQgYmUgcHJvZHVjZWQgb24gZGFpbHkgYmFzaXMgdG8gb3B0aW1pemUgaXRzIG5ldCBwcm9maXQgKDE1IHBvaW50cykNCg0KPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+DQoxQSkgV3JpdGUgdGhlIG1hdGhlbWF0aWNhbCBmb3JtdWxhdGlvbiBvZiB0aGUgb2JqZWN0aXZlIGZ1bmN0aW9uIGFuZCBzdGF0ZSB0aGUgdHlwZSBvZiBvcHRpbWl6YXRpb24uIERlZmluZSB0aGUgY29uc3RyYWludHMgaW4gYSB0YWJ1bGFyIG9yIG1hdHJpeCBmb3JtLiAgQ2xlYXJseSBpZGVudGlmeSB0aGUgZGVjaXNpb24gdmFyaWFibGVzIChubyBjb2RpbmcgcmVxdWlyZWQpICg1cHRzKQ0KPC9zcGFuPg0KeW91IGFyZSBzYXlpbmcgbm8gY29kaW5nIGlzIHJlcXVpcmVkLCBzbyBJIHdpbCBub3QgY29kZSB0byBjcmVhdGUgYSBtYXRyaXgvdGFibGUuIEkgd2lsbCBiZSBkaXNwbGF5aW5nIHRoZSBkYXRhIGxpa2UgdGhpcy4NCllvdSB3YW50IHRvIG1heGltaXplIHByb2ZpdHMgZm9yIHRoZSBjb21wYW55Lg0KNjV4MSs1MHgyPXogTUFYSU1JWkUNCkNvbnN0YWludHMNCjR4MSszLjV4Mjw9ODQgZmFicmljYXRpbmcgaG91cnMgbGltaXQNCjEuNXgxKzF4MTw9MjEgZmluaXNoaW5nIGhvdXJzIGxpbWl0DQotMXgxKzJ4Mj0wIG11c3Qgc2VsbCAyeCBtb3JlIHN0ZXJucyB0aGFuIGRlZXINCjF4MTw9MCB1bml0cyBzb2xkIG11c3QgYmUgcG9zaXRpdmUNCjF4Mjw9MCB1bml0cyBzb2xkIG11c3QgYmUgcG9zdGl2ZQ0KVGhlIGRlY2lzaW9uIHZhcmlhYmxlcyBhcmUgdGhlIG51bWJlciBvZiBob3VycyBvZiBmYWJyaWNhdGlvbiBhbmQgZmluaXNoaW5nIGF2YWlsYWJsZSwgYW5kIHNlbGxpbmcgMnggYXMgbWFueSBzdGVybiBhcyBkZWVyIG1vZGVscy4NCg0KPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+DQogMUIpIEltcGxlbWVudCB0aGUgbGluZWFyIG9wdGltaXphdGlvbiBtb2RlbCB0byBmaW5kIHRoZSBvcHRpbWFsIHNvbHV0aW9uLiBUaGUgY29kZSB0byBsb2FkIHRoZSByZXF1aXJlZCBwYWNrYWdlIGlzIGluY2x1ZGVkIGZvciB5b3VyIGNvbnZlbmllbmNlLiBBZGQgdGhlIG5lY2Vzc2FyeSBjb2RlIHRvIGNvbXBsZXRlLCBhbmQgbWFrZSBzdXJlIHRvIGRpc3BsYXkgeW91ciBmaW5hbCByZXN1bHRzIHNob3dpbmcgdGhlIG9wdGltdW0gdmFsdWVzICg1cHRzKQ0KPC9zcGFuPg0KDQpgYGB7cn0NCiMgUmVxdWlyZSB3aWxsIGxvYWQgdGhlIHBhY2thZ2Ugb25seSBpZiBub3QgaW5zdGFsbGVkIA0KIyBEZXBlbmRlbmNpZXMgPSBUUlVFIG1ha2VzIHN1cmUgdGhhdCBkZXBlbmRlbmNpZXMgYXJlIGluc3RhbGwNCmlmKCFyZXF1aXJlKCJscFNvbHZlQVBJIixxdWlldGx5ID0gVFJVRSkpDQogIGluc3RhbGwucGFja2FnZXMoImxwU29sdmVBUEkiLGRlcGVuZGVuY2llcyA9IFRSVUUsIHJlcG9zID0gImh0dHBzOi8vY2xvdWQuci1wcm9qZWN0Lm9yZyIpDQpgYGANCg0KDQpgYGB7cn0NCmxwbWFyayA9IG1ha2UubHAoMCwgMikNCg0KDQpkdW1teSA9IGxwLmNvbnRyb2wobHBtYXJrLCBzZW5zZT0ibWF4IikgDQpzZXQub2JqZm4obHBtYXJrLCBjKDY1LCA1MCkpDQpgYGANCg0KYGBge3J9DQphZGQuY29uc3RyYWludChscG1hcmssIGMoLTEsIDIpLCAiPSIsIDApDQphZGQuY29uc3RyYWludChscG1hcmssIGMoMSwwKSwiPj0iLDApDQphZGQuY29uc3RyYWludChscG1hcmssIGMoMCwxKSwgIj49IiwwKQ0KYWRkLmNvbnN0cmFpbnQobHBtYXJrLCBjKDQsMy41KSwgIjw9Iiw4NCkNCmFkZC5jb25zdHJhaW50KGxwbWFyaywgYygxLjUsMSksICI8PSIsMjEpDQpgYGANCmBgYHtyfQ0KbHBtYXJrDQpzb2x2ZShscG1hcmspDQpgYGANCmBgYHtyfQ0KZ2V0Lm9iamVjdGl2ZShscG1hcmspDQoNCiMgZGlzcGxheSB0aGUgZGVjaXNpb24gdmFyaWFibGVzIG9wdGltdW0gdmFsdWVzDQpnZXQudmFyaWFibGVzKGxwbWFyaykNCmBgYA0Kb3B0aW11bSBzYWxlcy9kYXkgaXMgOTQ1LCB3b3VsZCBzZWxsIDEwLjUgc3Rlcm5zIGEgZGF5IGFuZCA1LjI1IGRlZXJzIGEgZGF5Lg0KPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+DQogMUMpIElkZW50aWZ5IHRoZSBiaW5kaW5nIGNvbnN0cmFpbnQocykgYW5kIGNhbGN1bGF0ZSBjb3JyZXNwb25kaW5nIG1hcmdpbmFsIHZhbHVlICgzcHRzKQ0KPC9zcGFuPg0KYGBge3J9DQpnZXQuc2Vuc2l0aXZpdHkucmhzKGxwbWFyaykgDQpgYGANClRoZSBiaW5kaW5nIGNvbnRyYWludHMgYXJlIHRoZSBvbmVzIHRoYXQgaGF2ZSBub256ZXJvIHZhbHVlcy4gSW4gdGhpcyBjYXNlLCBpdCBpcyB0aGUgZmlyc3QgY29uc3RyYWludCwgKG11c3Qgc2VsbCAyeCBtb3JlIHN0ZXJucyB0aGFuIGRlZXIsIC0xeDErMngxPTApIGFuZCB0aGUgNXRoIGNvbnRyYWludCAob25seSBoYXZlIDIxIGZpbmlzaGluZyBob3VycyBhIGRheSBhbmQgc3Rlcm5zIHRha2UgMS41IGFuZCBkZWVycyB0YWtlIDEgaG91ciwgMS41eDErMXgyPD0yMSkNCg0KVGhlIG1hcmdpbmFsIHZhbHVlIG9mIHRoZSBmaWZ0aCBjb25zdHJhaW50IG1lYW5zIHRoYXQgaWYgdGhlIG51bWJlciBvZiBmYWJyaWNhdGluZyBob3VycyBpbmNyZWFzZWQgYnkgMSAoMjEgdG8gMjIpIHRoZSBzYWxlcyB3b3VsZCBpbmNyZWFzZSBieSAkNDUuIFRoZSBtYXJnaW5hbCB2YWx1ZSBvZiB0aGUgZmlyc3QgY29uc3RyYWludCBtZWFucyB0aGF0IGlmIHRoZSBjb250cmFpbnQgd2VyZSB0byBpbmNyZWFzZSBieSAxLCB0aGVuIHNhbGVzIHdvdWxkIGluY3JlYXNlIGJ5IDIuNSBkb2xsYXJzLg0KPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+DQogMUQpSWRlbnRpZnkgdGhlIG5vbi1iaW5kaW5nIGNvbnN0cmFpbnQocykgYW5kIGNhbGN1bGF0ZSBjb3JyZXNwb25kaW5nIHN1cnBsdXMvc2xhY2sgKDJwdHMpDQpUaGUgbm9uYmluZGluZyBjb250cmFpbnRzIGFyZSB0aGUgc2Vjb25kICh4MT49MCksIHRoaXJkICh4Mj49MCksIGFuZCBmb3J0aCAoNHgxKzMuNXgyPD04NCkuIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgY29uc3RyYWludCBpbmNyZWFzZXMgYnkgb25lICg4NCB0byA4NSksIHRoZSBzYWxlcyB3aWxsIG5vdCBpbmNyZWFzZS4NClN1cnBsdXM6DQpjb25zdHJhaW50IDIgc2xhY2s6IDEwLjUNCjEwLjUtMD0gMTAuNQ0KY29uc3RyYWludCAzIHNsYWNrOiA1LjM1DQo1LjI1LTA9IDUuMjUNCmNvbnN0cmFpbnQgNCBzbGFjazogMjQuNQ0KMTAuNSo0KzMuNSo1DQpgYGB7cn0NCjg0LSgxMC41KjQrMy41KjUpDQpgYGANCg0KPC9zcGFuPg0KDQoNCiMjIyBQcm9ibGVtIDI6IFNpbXBsZSBMaW5lYXIgUmVncmVzc2lvbiAoMTAgcG9pbnRzKQ0KDQpBIGNvbGxlZ2UgYm9va3N0b3JlIG11c3Qgb3JkZXIgYm9va3MgdHdvIG1vbnRocyBiZWZvcmUgZWFjaCBzZW1lc3RlciBzdGFydHMuIEl0IGlzIGJlbGlldmVkIHRoYXQgdGhlIG51bWJlciBvZiBib29rcyB0aGF0IHdpbGwgdWx0aW1hdGVseSBiZSBzb2xkIGZvciBhbnkgcGFydGljdWxhciBjb3Vyc2UgaXMgcmVsYXRlZCB0byB0aGUgbnVtYmVyIG9mIHN0dWRlbnRzIHJlZ2lzdGVyZWQgZm9yIHRoZSBjb3Vyc2Ugd2hlbiB0aGUgYm9va3MgYXJlIG9yZGVyZWQuIFRoZXkgd291bGQgbGlrZSB0byBkZXZlbG9wIGEgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgdG8gaGVscCBwbGFuIGhvdyBtYW55IGJvb2tzIHRvIG9yZGVyLiBGcm9tIHBhc3QgcmVjb3JkcywgdGhlIGJvb2tzdG9yZSBvYnRhaW5zIHRoZSBudW1iZXIgb2Ygc3R1ZGVudHMgcmVnaXN0ZXJlZCwgYW5kIHRoZSBudW1iZXIgb2YgYm9va3MgYWN0dWFsbHkgc29sZCBmb3IgYSBjb3Vyc2UsIGZvciAxMiBkaWZmZXJlbnQgc2VtZXN0ZXJzLiBUaGUgZGF0YSBpcyByZWFkIGZyb20gYSBmaWxlLiANCg0KYGBge3J9DQpteWRhdGEgPSByZWFkLmNzdigiYm9va3MuY3N2IiwgaGVhZGVyPVRSVUUsIHNlcD0iLCIpDQpoZWFkKG15ZGF0YSkNCmBgYA0KYGBge3J9DQpzdHVkZW50cyA9IG15ZGF0YSRTdHVkZW50cw0KYm9va3MgPSBteWRhdGEkQm9va3MNCmBgYA0KDQo8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4NCiAyQSkgRHJhdyBhIHNjYXR0ZXIgcGxvdC4gTWFrZSBzdXJlIHRvIGxhYmVsIHRoZSBYLWF4aXMgd2l0aCB0aGUgaW5kZXBlbmRlbnQgKGV4cGxhbmF0b3J5KSB2YXJpYWJsZSBhbmQgdGhlIFktYXhpcyB3aXRoIHRoZSBkZXBlbmRlbnQgKHJlc3BvbnNlKSB2YXJpYWJsZSAoM3B0cykNCiA8L3NwYW4+DQpgYGB7cn0NCnBsb3Qoc3R1ZGVudHMsIGJvb2tzLCB4bGFiID0gIiMgc3R1ZGVudHMiLCB5bGFiPSAiIyBib29rcyIpDQpgYGANCg0KIA0KIA0KIA0KPHNwYW4gc3R5bGU9ImNvbG9yOnJlZCI+IA0KMkIpIERldmVsb3AgYSBzaW1wbGUgbGluZWFyIHJlZ3Jlc3Npb24gbW9kZWwgdG8gZGVzY3JpYmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB0d28gdmFyaWFibGVzLiBBZGQgdGhlIGZpdHRlZCBsaW5lIHRvIHRoZSBwbG90ICgzcHRzKQ0KPC9zcGFuPg0KYGBge3J9DQpsaW5lYXJfbW9kZWwgPSBsbShib29rcyB+IHN0dWRlbnRzKQ0KYGBgDQpgYGB7cn0NCnN1bW1hcnkobGluZWFyX21vZGVsKQ0KYGBgDQoNCmBgYHtyfQ0KcGxvdChzdHVkZW50cyxib29rcykNCiNBZGQgYSB0cmVuZCBsaW5lIHBsb3QgdXNpbmcgdGhlIHJlZyBsaW5lYXIgbW9kZWwgDQphYmxpbmUobGluZWFyX21vZGVsLCBjb2w9ImJsdWUiLCBsd2Q9MikNCmBgYA0KDQo8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4NCjJDKSBJbnRlcnByZXQgdGhlIGNvZWZmaWNpZW50cyBvZiB0aGUgcmVncmVzc2lvbiBtb2RlbCwgdGhlIGludGVyY2VwdCBhbmQgdGhlIHNsb3BlLGluIHRlcm1zIG9mIHRoaXMgcHJvYmxlbSAoMnB0cykNCjwvc3Bhbj4NCnk9OS4zMDAwKyAwLjY3Mjd4DQpUaGUgY29lZmZpY2llbnRzIG1lYW46IHRoYXQgZm9yIGVhY2ggMSBzdHVkZW50LCB0aGV5IHNob3VsZCBnZXQgLjY3MjcgYm9va3MuIFRoaXMgbWVhbnMgdGhhdCBmb3IgZWFjaCBzdHVkZW50IHRoZXkgYXJlIGdldHRpbmcgLjY3MjcgYm9va3MuIFRoaXMgY291bGQgbWVhbiBzdHVkZW50cyBhcmUgc2hhcmluZyBib29rcyBvciBub3QgYnV5aW5nIHRoZW0uIFRoZSA5LjMgbWVhbnMgdGhhdCBmb3IgMCBzdHVkZW50cywgdGhlcmUgc2hvdWxkIGJlIDAgYm9va3MuIFRoaXMgZG9lcyBub3QgbWFrZSBzZW5zZSwgYXMgaWYgdGhlcmUgYXJlIHplcm8gc3R1ZGVudHMsIHRoZXJlIHNob3VsZCBiZSB6ZXJvIGJvb2tzLiANCg0KDQo8c3BhbiBzdHlsZT0iY29sb3I6cmVkIj4NCjJEKSBQcmVkaWN0IHRoZSBudW1iZXIgb2YgYm9va3MgdGhhdCB3b3VsZCBiZSBzb2xkIGluIGEgc2VtZXN0ZXIgd2hlbiAzNSBzdHVkZW50cyBoYXZlIHJlZ2lzdGVyZWQuIENhbGN1bGF0ZSB0aGUgY29ycmVzcG9uZGluZyBlcnJvciBzcXVhcmVkICgycHRzKQ0KYGBge3J9DQo5LjMrLjY3MjcqMzUNCmBgYA0KYWN0dWFsIHNhdGEgb2JzZXJ2ZWQgaXMgMzQNCmBgYHtyfQ0KKDM0LTMyLjg0NDUpXjINCmBgYA0KZXJyb3Igc3F1YXJlZA0KPC9zcGFuPg0KDQoNCg0KDQoNCg0K