Concept Questions

You can submit your answers to these in a separate document from the data questions below or you can use markdown to write equations using similar syntax to LaTex. (c.f. https://rmd4sci.njtierney.com/math)

  1. In a bargaining model of household decision-making, the couple jointly maximizes the following utility function: \(U=[U(C_m)- T_m]*[U(C_f)- T_f]\)

Subject to \(Y= C_m+C_f\), where Y is total family income

Person f is the female partner and m is the male partner

1.1 In Nancy Qian’s paper, which variable in the preceding model changes as a direct consequence of an increase in tea prices in China?

From Nancy Qian’s explain, an increase in Y corresponds is directly to a rise in tea prices in China.

1.2 What other model variables will be affected following this change?

Since Y increases, will cause ( C_f ) will increase, so the U(C_f) and U will also increase following the chanes.

1.3 What do Qian’s findings regarding girls’ survival suggest about the female partner’s preferences in this model?

Qian’s finding on girls’ survival suggested an increase in female-specific income will improve mothers’ bargaining power within households, then it will result in a higher girl’s survival rates if mothers prefer girls over fathers. so it’s a positive relationship.

1.4 How does Qian justify rejecting the unitary model of household decision-making in this paper?

She justifies rejecting the unitary model of household decision-making by her analysis of whether the effect of an increase in tea prices on educational attainment for girls was the same. An increase in prices for orchard products on education attainment for boys was done to test the joint hypothesis. She believes the households were unitary and parents viewed children as a future investment. Higher female income was related to higher educational attainment for all children but a higher male income was related to lower educational attainment for girls and no relationship with educational attainment for boys.

Her analysis showed that when there were positive returns to education, results were only in line with a unitary model which means households are income pooling. and the investment is an incentive to the household if there were positive returns to cultivating tea for both boys and girls, no returns to cultivating orchards for boys, and negative returns for girls.

I think although her analysis make a bit sense on the man-perferal in China as a working force labor, it still need further investigated and improvement on her model. It is necessary to use the bargaining power concept in the non-unitary model to explain this case. In the event that mothers value education more than farther and incur a higher cost for neglecting either gender, the increase in female bargaining power will equalize the treatment for boys and girls, which will then increase female survival rates at the end.

Data Analysis Questions

These questions refer to the data set “1% sample Ethiopia ever-married women age 15+” available via the Econ 448 class account from ipums.org (class code is W0NV72). Please download the data and answer the following questions.

pacman::p_load(fixest,ivreg,doBy,htmltools,shiny,DT, coefplot)

getwd()
[1] "/home/jovyan/ECON-448_COURSE_MATERIALS"
library(ggplot2)
library(tidyr)
library(ivreg)
library(dplyr)
library(fixest)
library(doBy)
library(stargazer)
library(ipumsr)
library(coefplot)
ddi <- read_ipums_ddi("ipumsi_00007.xml")  ##Use whatever title your file has when it downloads, but the name here should be correct for this exercise.
ipumsr::ipums_view(ddi)
df_ipums <- read_ipums_micro(ddi)  
Use of data from IPUMS-International is subject to conditions including that
users should cite the data appropriately. Use command `ipums_conditions()` for
more details.
df_analysis <-as.data.frame(df_ipums)
head(df_analysis)
tail(df_analysis)
NA
  1. Clean your data, as shown in the IPUMS and Child Mortality Labs. Create a formatted table of summary statistics (mean, std dev, max, min) for all variables that you use in your analysis (Hint: wait until you answer all of the other questions before finalizing this part). Write one paragraph describing your data using the numbers in this table.

I start cleaning data and some of it is irrelevant for me running the model. all the variables I choose falls into 3 big catagories, educational level, living condition, and mortality rate.

stargazer(df_analysis[c("AGE","HHWT", "LIT", "POPDENSGEO1","ELECTRIC", "URBAN", "YRSCHOOL","YRSCHOOL_SP", "CHBORNF", "CHBORNM", "CHSURVF", "CHSURVM", "CHSURVM", "DHS_IPUMSI_ET")], title = "Table 0: Table of Ethipia ever-married women age 15+ Summary Statistics", type = "text")
Warning: the condition has length > 1 and only the first element will be usedWarning: the condition has length > 1 and only the first element will be used

Table 0: Table of Ethipia ever-married women age 15+ Summary Statistics
=====================================================
Statistic       N     Mean   St. Dev.  Min     Max   
-----------------------------------------------------
AGE           28,759 35.923   15.240   15      97    
HHWT          28,759 538.784  41.668  0.000 1,470.230
LIT           28,759  1.196   0.397     1       2    
POPDENSGEO1   28,759 274.231 950.202  0.000 5,123.660
ELECTRIC      28,759  1.749   0.552     0       2    
URBAN         28,759  1.158   0.365     1       2    
YRSCHOOL      28,759  1.863   9.314     0      95    
YRSCHOOL_SP   19,933  5.561   18.043    0      95    
CHBORNF       28,759  1.831   1.764     0       9    
CHBORNM       28,759  2.026   1.849     0       9    
CHSURVF       28,759  1.548   1.501     0       9    
CHSURVM       28,759  1.670   1.552     0       9    
CHSURVM.1     28,759  1.670   1.552     0       9    
DHS_IPUMSI_ET 28,759  4.659   2.683     1      17    
-----------------------------------------------------
df_analysis <- df_analysis %>% dplyr::na_if(99)
df_analysis$URBAN <- ifelse(df_analysis$URBAN == 2, 1, 0) 

df_analysis<-filter(df_analysis, CHBORNM<31)
df_analysis<-filter(df_analysis, CHBORNF<31)
df_analysis<-transform(df_analysis, CHILDREN=CHBORNF+CHBORNM)
df_analysis<-transform(df_analysis, CMR=(CHBORNF+CHBORNM-CHSURVF-CHSURVM)/CHILDREN)
df_analysis<- filter(df_analysis, CHILDREN>0)

df_analysis$LIT<-ifelse(df_analysis$LIT==1,2,0)

df_analysis$ELECTRIC<-ifelse(df_analysis$ELECTRIC==2,1,0)

df_analysis<-filter(df_analysis, YRSCHOOL<90)
df_analysis<-filter(df_analysis, YRSCHOOL_SP<90)

stargazer(df_analysis[c("AGE","HHWT", "LIT", "POPDENSGEO1","ELECTRIC", "URBAN", "YRSCHOOL","YRSCHOOL_SP", "CHBORNF", "CHBORNM", "CHSURVF", "CHSURVM", "CHSURVM", "DHS_IPUMSI_ET", "CMR")], title = "Table 1: Cleaned Table of Ethipia ever-married women age 15+ Summary Statistics", type = "text")
Warning: the condition has length > 1 and only the first element will be usedWarning: the condition has length > 1 and only the first element will be used

Table 1: Cleaned Table of Ethipia ever-married women age 15+ Summary Statistics
=====================================================
Statistic       N     Mean   St. Dev.  Min     Max   
-----------------------------------------------------
AGE           16,715 33.416   12.001   15      97    
HHWT          16,715 540.187  43.516  0.000 1,470.230
LIT           16,715  1.654   0.757     0       2    
POPDENSGEO1   16,715 226.948 827.778  0.000 5,123.660
ELECTRIC      16,715  0.838   0.368     0       1    
URBAN         16,715  0.122   0.328     0       1    
YRSCHOOL      16,715  0.899   2.462     0      13    
YRSCHOOL_SP   16,715  1.849   3.265     0      13    
CHBORNF       16,715  2.089   1.683     0       9    
CHBORNM       16,715  2.333   1.758     0       9    
CHSURVF       16,715  1.818   1.455     0       9    
CHSURVM       16,715  1.988   1.503     0       9    
CHSURVM.1     16,715  1.988   1.503     0       9    
DHS_IPUMSI_ET 16,715  4.656   2.498     1      17    
CMR           16,715  0.100   0.191   0.000   1.000  
-----------------------------------------------------

From the above table we can see data age has a range from 15-97, after cleaning all the irelavant data, the largest mean of 33.416 and standard deviation of 12.001. CMR has the lowest mean of 0.1 and standard deviation of 0.191. so we can see the distribution shape are mostly focused on the left end of the distribution. While year of schooling indicate that most of people are rarely educated, and a lot of them is only having 1-2 years of education. that they are very uneducated. Urban is the only categorical that defines whether the people lives in urban area with 0 and 1.

  1. Regress child mortality rate on women’s education, include control variables for age, urban residence (create a dummy variable for residence in an urban area), and at least one other control variable of your choosing.Tell me why you included that control variable and what you expect the sign to be for the the coefficients on that control variable.

df_analysis.lm <- lm(CMR~ YRSCHOOL + AGE+ URBAN + ELECTRIC +LIT , data=df_analysis)

summary(df_analysis.lm)

Call:
lm(formula = CMR ~ YRSCHOOL + AGE + URBAN + ELECTRIC + LIT, data = df_analysis)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.34744 -0.09512 -0.06499  0.02926  1.01061 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.0369283  0.0083632  -4.416 1.01e-05 ***
YRSCHOOL    -0.0042500  0.0010064  -4.223 2.42e-05 ***
AGE          0.0037659  0.0001203  31.295  < 2e-16 ***
URBAN       -0.0055356  0.0060673  -0.912 0.361589    
ELECTRIC     0.0191374  0.0051344   3.727 0.000194 ***
LIT         -0.0000330  0.0030869  -0.011 0.991472    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1843 on 16709 degrees of freedom
Multiple R-squared:  0.06624,   Adjusted R-squared:  0.06596 
F-statistic: 237.1 on 5 and 16709 DF,  p-value: < 2.2e-16

From the above regression model, I used ELECTRIC and LIT as my controlled variables for the regression, since I believe URBAN area are in better condition for ELECTRIC. I suspect a negative relationship between URBAN are and child mortality because with better education, women can afford living in URBAN AREA, so they will have less kid and they spend a lot of them working and having more outside option then in marriage and having kid. While electricity represent if a household had access to electricity. it has a positive relationship because ELECTRIC as an necessity, a secured living environment can help women to have more children because they don’t have to worry about suffering form no electric. and the stable environment can increase women to have more babies. so women can have more child mortality. whiile LIT represent if the respondent could read and write in any language, so I expect a negative relationship because a person considered “Literacy” will be more educated or st least have more then primary education, so it will decrease child mortality rate, but the data doesn’t match with my guess, and we can see the correlation is extremely small, which can be insignificant to our model.

  1. Display your regression results from 2 in a table. Label your variables in the table and give your table a title. Were the signs on the coefficients as expected?
stargazer(df_analysis.lm, covariate.labels = c("Years of schooling", "AGE", "Urban-rural status","Access to Electricity", "Literacy"), title = "Table 1: Regression child mortality rate", type = "text")

No, the regression result is extremely small that makes it statistically insignificant, the correlation between two variables is very close to 0, (that is 0.019*** and -0.00003) that did not match with my expectation. but the +/- can be a small indicator about my hypothesis. I need to further investigate the data.

  1. Why might the estimated relationship between child mortality and women’s education you estimated above be biased? Even though this is the data science section, draw on at least one of the course readings to support your argument.

Although it’s the data science section, based on Qian’s study, the increase in income of females while holding the income of males constantly improves the survival rates for girls, and lowering the child mortality rate. However because women’s education is positively correlated with their wage, it is a omitted variables that might be endogenous and cause bias in the OLS model. also as Parental Investments in Children, acrodding to Gertler, P the Conditional Cash Transfers to Improve Child HealthAlso Miller’s study From Problem set 2 also indicated that some of the contraceptive use on a woman’s fertility potentially cause the data be biased.

  1. Using her spouse’s education as an instrumental variable for a woman’s education, perform two stage least squares. Display the results of your second stage in a table that meets the same criteria as the table you created in 3.

model5 <- lm(YRSCHOOL ~ YRSCHOOL_SP + AGE+ URBAN + ELECTRIC +LIT, model=TRUE, data = df_analysis )

stargazer(model5, type = "text")

model5.5 <- ivreg(CMR ~ YRSCHOOL + AGE + URBAN + ELECTRIC +LIT | YRSCHOOL_SP + AGE+ URBAN + URBAN + ELECTRIC +LIT, data = df_analysis)

stargazer(model5.5, type = "text")

stargazer(model5.5, covariate.labels = c("Years of schooling", "AGE", "Urban-rural status"," Access to Electricity", "Literacy"), title = "Table 2: Instrumental Regression result of CMR on education", type = "text")
  1. Write one paragraph discussing how the results you found in your OLS and two stage least squares regressions (#2 and #5) relate to the theoretical model(s) learned in the course. Think of this as a practice run for your paper.

The variables of women’s education can be endogenous and causing bias in the OLS model, So to lower the effect on education and making it more precise, I used Years of schooling [of spouse] as the third variable to decrease the bias. Since YRSCHOOL_SP only indicates the highest grade/level of schooling the person had completed, in years. and only formal schooling is counted in the variable, YRSCHOOL_SP 0.200*** vs Years of schooling -0.005*, the different went from positive realtionship to a negative relationship and the correlation is a lot smaller when when comparing them. It is more official and a better method to determinant the education level as the data and the model is less biased.

For the Stage 1 of IV Estimation Procedure, we predict the effect of Z on T.Here, we see that the effect of ‘YRSCHOOL_SP’ on YRSCHOOL is positive and statistically significant. We also see that the F-statistic is 8,221.258. with a degree of freedom of 5, A standard benchmark for relevance is F>30. After Stage 2, now we see the relationship between ‘Years of schooling’ and ‘CMR’ is negative. it matches with my assumption of education having negative relationship in CMR. So people with higher schooling will have lower child mortality rate, as people’s time are limited, they can’t spend time in education while having a lot of children. Base on Qian’s argument, the survival rate of girls is positively correlated with female income, it represent as women’s income increases, the child mortality rate decreases, the positive relationship between women’s income and educational attainment, the theory implies that women’s education and child mortality rate are negatively correlated.

It is possible that interrelationships between the above variables may also cause the coefficient on education to be biased in the OLS model, so we built a two-stage least squares model. Since women with higher education are more likely to marry men with higher education, women’s spouse education is positively related to women’s education. As men’s education is likely not correlated with CMR, in the first step, we use the spouse’s number of years of schooling as an instrumental variable and regress the year’s of schooling for the women on the years of schooling their spouse had, women’s age, urban-rural status, Access to Electricity andLiteracy get a predicted value for the women’s year’s of schooling. We predict CMR on the predicted value of women’s education and the same controlled variables to obtain an unbiased estimate. Both models produce significant negative correlations between the two variables.

Another way to improve the bias According to Miller is to improve the process for collecting the data, when collecting the data can be provided equally to everyone voluntarily, free of discrimination, coercion or violence (based on individual choice) that a female can be more independent on their fertility choice and the bias on the data itself will be lower and can reflect better on women’s choice. Also on Maccini, Sharon, and Dean Yang. 2009’s paper of “Under the Weather: Health, Schooling, and Economic Consequences of Early-Life Rainfall.” they had an interesting research looking at how the weather on Early-Life Rainfall will affect the Health, Schooling, and Economic Consequences of a person later in life. they focus on shocks that occur at the very beginning of life, and ask how sensitive long-run individual well-being is to environmental conditions around the time of birth. they examine the effect of weather shocks around the time of birth on the adult health, but their search may be bias as well since teasing out the causal impacts of nutritional shocks at different points in the life cycle is difficult given the strong correlation of deprivation across the vulnerable periods in the life cycle (Glewwe and King 2001). the idea that environmental conditions in a certain sensitive period of life may have long-run, irreversible effects is known as “critical-period programming.” The “fetal origins hypothesis” stresses that nutritional deprivation in utero permanently reduces body size in adulthood, while the effect of nutritional deprivation in later periods is more muted (Barker 1998). it’s hard to find the crucial period of Early-Life. and caused a bias toward their paper. it can be extremely hard to identify and cause an omitted variable problem If rainfall is serially correlated over time, then it could be that rainfall in some years before or after the birth year has the actual impact on adult outcomes. the coefficients on birth year rainfall in regressions in Table 2 might simply reflect the fact that other years’ rainfall was not included in the regressions.

LS0tCnRpdGxlOiAiRWNvbiA0NDgiCmF1dGhvcjogIldhaXdhbmcgTGFtIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclbS8lZC8lWScpYCIKb3V0cHV0OiBodG1sX25vdGVib29rCnN1YnRpdGxlOiAiUHJvYmxlbSBTZXQgNCAtIER1ZSAxMi8xMS8yMDIyIEAxMTo1OXBtIgotLS0KCiMjIENvbmNlcHQgUXVlc3Rpb25zCgpZb3UgY2FuIHN1Ym1pdCB5b3VyIGFuc3dlcnMgdG8gdGhlc2UgaW4gYSBzZXBhcmF0ZSBkb2N1bWVudCBmcm9tIHRoZSBkYXRhIHF1ZXN0aW9ucyBiZWxvdyBvciB5b3UgY2FuIHVzZSBtYXJrZG93biB0byB3cml0ZSBlcXVhdGlvbnMgdXNpbmcgc2ltaWxhciBzeW50YXggdG8gTGFUZXguIChjLmYuIDxodHRwczovL3JtZDRzY2kubmp0aWVybmV5LmNvbS9tYXRoPikKCjEuICBJbiBhIGJhcmdhaW5pbmcgbW9kZWwgb2YgaG91c2Vob2xkIGRlY2lzaW9uLW1ha2luZywgdGhlIGNvdXBsZSBqb2ludGx5IG1heGltaXplcyB0aGUgZm9sbG93aW5nIHV0aWxpdHkgZnVuY3Rpb246ICRVPVtVKENfbSktIFRfbV0qW1UoQ19mKS0gVF9mXSQKClN1YmplY3QgdG8gJFk9IENfbStDX2YkLCB3aGVyZSBZIGlzIHRvdGFsIGZhbWlseSBpbmNvbWUKClBlcnNvbiBmIGlzIHRoZSBmZW1hbGUgcGFydG5lciBhbmQgbSBpcyB0aGUgbWFsZSBwYXJ0bmVyCgoxLjEgSW4gTmFuY3kgUWlhbidzIHBhcGVyLCB3aGljaCB2YXJpYWJsZSBpbiB0aGUgcHJlY2VkaW5nIG1vZGVsIGNoYW5nZXMgYXMgYSBkaXJlY3QgY29uc2VxdWVuY2Ugb2YgYW4gaW5jcmVhc2UgaW4gdGVhIHByaWNlcyBpbiBDaGluYT8KCkZyb20gTmFuY3kgUWlhbidzIGV4cGxhaW4sIGFuIGluY3JlYXNlIGluIFkgY29ycmVzcG9uZHMgaXMgZGlyZWN0bHkgdG8gYSByaXNlIGluIHRlYSBwcmljZXMgaW4gQ2hpbmEuCgoxLjIgV2hhdCBvdGhlciBtb2RlbCB2YXJpYWJsZXMgd2lsbCBiZSBhZmZlY3RlZCBmb2xsb3dpbmcgdGhpcyBjaGFuZ2U/CgpTaW5jZSBZIGluY3JlYXNlcywgd2lsbCBjYXVzZSAoIENfZiApIHdpbGwgaW5jcmVhc2UsIHNvIHRoZSBVKENfZikgYW5kIFUgd2lsbCBhbHNvIGluY3JlYXNlIGZvbGxvd2luZyB0aGUgY2hhbmVzLgoKMS4zIFdoYXQgZG8gUWlhbidzIGZpbmRpbmdzIHJlZ2FyZGluZyBnaXJscycgc3Vydml2YWwgc3VnZ2VzdCBhYm91dCB0aGUgZmVtYWxlIHBhcnRuZXIncyBwcmVmZXJlbmNlcyBpbiB0aGlzIG1vZGVsPwoKUWlhbidzIGZpbmRpbmcgb24gZ2lybHMnIHN1cnZpdmFsIHN1Z2dlc3RlZCBhbiBpbmNyZWFzZSBpbiBmZW1hbGUtc3BlY2lmaWMgaW5jb21lIHdpbGwgaW1wcm92ZSBtb3RoZXJzJyBiYXJnYWluaW5nIHBvd2VyIHdpdGhpbiBob3VzZWhvbGRzLCB0aGVuIGl0IHdpbGwgcmVzdWx0IGluIGEgaGlnaGVyIGdpcmwncyBzdXJ2aXZhbCByYXRlcyBpZiBtb3RoZXJzIHByZWZlciBnaXJscyBvdmVyIGZhdGhlcnMuIHNvIGl0J3MgYSBwb3NpdGl2ZSByZWxhdGlvbnNoaXAuCgoxLjQgSG93IGRvZXMgUWlhbiBqdXN0aWZ5IHJlamVjdGluZyB0aGUgdW5pdGFyeSBtb2RlbCBvZiBob3VzZWhvbGQgZGVjaXNpb24tbWFraW5nIGluIHRoaXMgcGFwZXI/CgpTaGUganVzdGlmaWVzIHJlamVjdGluZyB0aGUgdW5pdGFyeSBtb2RlbCBvZiBob3VzZWhvbGQgZGVjaXNpb24tbWFraW5nIGJ5IGhlciBhbmFseXNpcyBvZiB3aGV0aGVyIHRoZSBlZmZlY3Qgb2YgYW4gaW5jcmVhc2UgaW4gdGVhIHByaWNlcyBvbiBlZHVjYXRpb25hbCBhdHRhaW5tZW50IGZvciBnaXJscyB3YXMgdGhlIHNhbWUuIEFuIGluY3JlYXNlIGluIHByaWNlcyBmb3Igb3JjaGFyZCBwcm9kdWN0cyBvbiBlZHVjYXRpb24gYXR0YWlubWVudCBmb3IgYm95cyB3YXMgZG9uZSB0byB0ZXN0IHRoZSBqb2ludCBoeXBvdGhlc2lzLiBTaGUgYmVsaWV2ZXMgdGhlIGhvdXNlaG9sZHMgd2VyZSB1bml0YXJ5IGFuZCBwYXJlbnRzIHZpZXdlZCBjaGlsZHJlbiBhcyBhIGZ1dHVyZSBpbnZlc3RtZW50LiBIaWdoZXIgZmVtYWxlIGluY29tZSB3YXMgcmVsYXRlZCB0byBoaWdoZXIgZWR1Y2F0aW9uYWwgYXR0YWlubWVudCBmb3IgYWxsIGNoaWxkcmVuIGJ1dCBhIGhpZ2hlciBtYWxlIGluY29tZSB3YXMgcmVsYXRlZCB0byBsb3dlciBlZHVjYXRpb25hbCBhdHRhaW5tZW50IGZvciBnaXJscyBhbmQgbm8gcmVsYXRpb25zaGlwIHdpdGggZWR1Y2F0aW9uYWwgYXR0YWlubWVudCBmb3IgYm95cy4KCkhlciBhbmFseXNpcyBzaG93ZWQgdGhhdCB3aGVuIHRoZXJlIHdlcmUgcG9zaXRpdmUgcmV0dXJucyB0byBlZHVjYXRpb24sIHJlc3VsdHMgd2VyZSBvbmx5IGluIGxpbmUgd2l0aCBhIHVuaXRhcnkgbW9kZWwgd2hpY2ggbWVhbnMgaG91c2Vob2xkcyBhcmUgaW5jb21lIHBvb2xpbmcuIGFuZCB0aGUgaW52ZXN0bWVudCBpcyBhbiBpbmNlbnRpdmUgdG8gdGhlIGhvdXNlaG9sZCBpZiB0aGVyZSB3ZXJlIHBvc2l0aXZlIHJldHVybnMgdG8gY3VsdGl2YXRpbmcgdGVhIGZvciBib3RoIGJveXMgYW5kIGdpcmxzLCBubyByZXR1cm5zIHRvIGN1bHRpdmF0aW5nIG9yY2hhcmRzIGZvciBib3lzLCBhbmQgbmVnYXRpdmUgcmV0dXJucyBmb3IgZ2lybHMuCgpJIHRoaW5rIGFsdGhvdWdoIGhlciBhbmFseXNpcyBtYWtlIGEgYml0IHNlbnNlIG9uIHRoZSBtYW4tcGVyZmVyYWwgaW4gQ2hpbmEgYXMgYSB3b3JraW5nIGZvcmNlIGxhYm9yLCBpdCBzdGlsbCBuZWVkIGZ1cnRoZXIgaW52ZXN0aWdhdGVkIGFuZCBpbXByb3ZlbWVudCBvbiBoZXIgbW9kZWwuIEl0IGlzIG5lY2Vzc2FyeSB0byB1c2UgdGhlIGJhcmdhaW5pbmcgcG93ZXIgY29uY2VwdCBpbiB0aGUgbm9uLXVuaXRhcnkgbW9kZWwgdG8gZXhwbGFpbiB0aGlzIGNhc2UuIEluIHRoZSBldmVudCB0aGF0IG1vdGhlcnMgdmFsdWUgZWR1Y2F0aW9uIG1vcmUgdGhhbiBmYXJ0aGVyIGFuZCBpbmN1ciBhIGhpZ2hlciBjb3N0IGZvciBuZWdsZWN0aW5nIGVpdGhlciBnZW5kZXIsIHRoZSBpbmNyZWFzZSBpbiBmZW1hbGUgYmFyZ2FpbmluZyBwb3dlciB3aWxsIGVxdWFsaXplIHRoZSB0cmVhdG1lbnQgZm9yIGJveXMgYW5kIGdpcmxzLCB3aGljaCB3aWxsIHRoZW4gaW5jcmVhc2UgZmVtYWxlIHN1cnZpdmFsIHJhdGVzIGF0IHRoZSBlbmQuCgojIyBEYXRhIEFuYWx5c2lzIFF1ZXN0aW9ucwoKVGhlc2UgcXVlc3Rpb25zIHJlZmVyIHRvIHRoZSBkYXRhIHNldCAiMSUgc2FtcGxlIEV0aGlvcGlhIGV2ZXItbWFycmllZCB3b21lbiBhZ2UgMTUrIiBhdmFpbGFibGUgdmlhIHRoZSBFY29uIDQ0OCBjbGFzcyBhY2NvdW50IGZyb20gaXB1bXMub3JnIChjbGFzcyBjb2RlIGlzIFcwTlY3MikuIFBsZWFzZSBkb3dubG9hZCB0aGUgZGF0YSBhbmQgYW5zd2VyIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLgoKYGBge1J9CnBhY21hbjo6cF9sb2FkKGZpeGVzdCxpdnJlZyxkb0J5LGh0bWx0b29scyxzaGlueSxEVCwgY29lZnBsb3QpCgpnZXR3ZCgpCgpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkodGlkeXIpCmxpYnJhcnkoaXZyZWcpCmxpYnJhcnkoZHBseXIpCmxpYnJhcnkoZml4ZXN0KQpsaWJyYXJ5KGRvQnkpCmxpYnJhcnkoc3RhcmdhemVyKQpsaWJyYXJ5KGlwdW1zcikKbGlicmFyeShjb2VmcGxvdCkKCmBgYAoKYGBge1J9CmRkaSA8LSByZWFkX2lwdW1zX2RkaSgiaXB1bXNpXzAwMDA3LnhtbCIpICAjI1VzZSB3aGF0ZXZlciB0aXRsZSB5b3VyIGZpbGUgaGFzIHdoZW4gaXQgZG93bmxvYWRzLCBidXQgdGhlIG5hbWUgaGVyZSBzaG91bGQgYmUgY29ycmVjdCBmb3IgdGhpcyBleGVyY2lzZS4KaXB1bXNyOjppcHVtc192aWV3KGRkaSkKZGZfaXB1bXMgPC0gcmVhZF9pcHVtc19taWNybyhkZGkpICAKZGZfYW5hbHlzaXMgPC1hcy5kYXRhLmZyYW1lKGRmX2lwdW1zKQpoZWFkKGRmX2FuYWx5c2lzKQp0YWlsKGRmX2FuYWx5c2lzKQoKYGBgCgoxLiAgQ2xlYW4geW91ciBkYXRhLCBhcyBzaG93biBpbiB0aGUgSVBVTVMgYW5kIENoaWxkIE1vcnRhbGl0eSBMYWJzLiBDcmVhdGUgYSBmb3JtYXR0ZWQgdGFibGUgb2Ygc3VtbWFyeSBzdGF0aXN0aWNzIChtZWFuLCBzdGQgZGV2LCBtYXgsIG1pbikgZm9yIGFsbCB2YXJpYWJsZXMgdGhhdCB5b3UgdXNlIGluIHlvdXIgYW5hbHlzaXMgKEhpbnQ6IHdhaXQgdW50aWwgeW91IGFuc3dlciBhbGwgb2YgdGhlIG90aGVyIHF1ZXN0aW9ucyBiZWZvcmUgZmluYWxpemluZyB0aGlzIHBhcnQpLiBXcml0ZSBvbmUgcGFyYWdyYXBoIGRlc2NyaWJpbmcgeW91ciBkYXRhIHVzaW5nIHRoZSBudW1iZXJzIGluIHRoaXMgdGFibGUuCgpJIHN0YXJ0IGNsZWFuaW5nIGRhdGEgYW5kIHNvbWUgb2YgaXQgaXMgaXJyZWxldmFudCBmb3IgbWUgcnVubmluZyB0aGUgbW9kZWwuIGFsbCB0aGUgdmFyaWFibGVzIEkgY2hvb3NlIGZhbGxzIGludG8gMyBiaWcgY2F0YWdvcmllcywgZWR1Y2F0aW9uYWwgbGV2ZWwsIGxpdmluZyBjb25kaXRpb24sIGFuZCBtb3J0YWxpdHkgcmF0ZS4KCmBgYHtSfQpzdGFyZ2F6ZXIoZGZfYW5hbHlzaXNbYygiQUdFIiwiSEhXVCIsICJMSVQiLCAiUE9QREVOU0dFTzEiLCJFTEVDVFJJQyIsICJVUkJBTiIsICJZUlNDSE9PTCIsIllSU0NIT09MX1NQIiwgIkNIQk9STkYiLCAiQ0hCT1JOTSIsICJDSFNVUlZGIiwgIkNIU1VSVk0iLCAiQ0hTVVJWTSIsICJESFNfSVBVTVNJX0VUIildLCB0aXRsZSA9ICJUYWJsZSAwOiBUYWJsZSBvZiBFdGhpcGlhIGV2ZXItbWFycmllZCB3b21lbiBhZ2UgMTUrIFN1bW1hcnkgU3RhdGlzdGljcyIsIHR5cGUgPSAidGV4dCIpCgpkZl9hbmFseXNpcyA8LSBkZl9hbmFseXNpcyAlPiUgZHBseXI6Om5hX2lmKDk5KQpkZl9hbmFseXNpcyRVUkJBTiA8LSBpZmVsc2UoZGZfYW5hbHlzaXMkVVJCQU4gPT0gMiwgMSwgMCkgCgpkZl9hbmFseXNpczwtZmlsdGVyKGRmX2FuYWx5c2lzLCBDSEJPUk5NPDMxKQpkZl9hbmFseXNpczwtZmlsdGVyKGRmX2FuYWx5c2lzLCBDSEJPUk5GPDMxKQpkZl9hbmFseXNpczwtdHJhbnNmb3JtKGRmX2FuYWx5c2lzLCBDSElMRFJFTj1DSEJPUk5GK0NIQk9STk0pCmRmX2FuYWx5c2lzPC10cmFuc2Zvcm0oZGZfYW5hbHlzaXMsIENNUj0oQ0hCT1JORitDSEJPUk5NLUNIU1VSVkYtQ0hTVVJWTSkvQ0hJTERSRU4pCmRmX2FuYWx5c2lzPC0gZmlsdGVyKGRmX2FuYWx5c2lzLCBDSElMRFJFTj4wKQoKZGZfYW5hbHlzaXMkTElUPC1pZmVsc2UoZGZfYW5hbHlzaXMkTElUPT0xLDIsMCkKCmRmX2FuYWx5c2lzJEVMRUNUUklDPC1pZmVsc2UoZGZfYW5hbHlzaXMkRUxFQ1RSSUM9PTIsMSwwKQoKZGZfYW5hbHlzaXM8LWZpbHRlcihkZl9hbmFseXNpcywgWVJTQ0hPT0w8OTApCmRmX2FuYWx5c2lzPC1maWx0ZXIoZGZfYW5hbHlzaXMsIFlSU0NIT09MX1NQPDkwKQoKc3RhcmdhemVyKGRmX2FuYWx5c2lzW2MoIkFHRSIsIkhIV1QiLCAiTElUIiwgIlBPUERFTlNHRU8xIiwiRUxFQ1RSSUMiLCAiVVJCQU4iLCAiWVJTQ0hPT0wiLCJZUlNDSE9PTF9TUCIsICJDSEJPUk5GIiwgIkNIQk9STk0iLCAiQ0hTVVJWRiIsICJDSFNVUlZNIiwgIkNIU1VSVk0iLCAiREhTX0lQVU1TSV9FVCIsICJDTVIiKV0sIHRpdGxlID0gIlRhYmxlIDE6IENsZWFuZWQgVGFibGUgb2YgRXRoaXBpYSBldmVyLW1hcnJpZWQgd29tZW4gYWdlIDE1KyBTdW1tYXJ5IFN0YXRpc3RpY3MiLCB0eXBlID0gInRleHQiKQoKYGBgCgpGcm9tIHRoZSBhYm92ZSB0YWJsZSB3ZSBjYW4gc2VlIGRhdGEgYWdlIGhhcyBhIHJhbmdlIGZyb20gMTUtOTcsIGFmdGVyIGNsZWFuaW5nIGFsbCB0aGUgaXJlbGF2YW50IGRhdGEsIHRoZSBsYXJnZXN0IG1lYW4gb2YgMzMuNDE2IGFuZCBzdGFuZGFyZCBkZXZpYXRpb24gb2YgMTIuMDAxLiBDTVIgaGFzIHRoZSBsb3dlc3QgbWVhbiBvZiAwLjEgYW5kIHN0YW5kYXJkIGRldmlhdGlvbiBvZiAwLjE5MS4gc28gd2UgY2FuIHNlZSB0aGUgZGlzdHJpYnV0aW9uIHNoYXBlIGFyZSBtb3N0bHkgZm9jdXNlZCBvbiB0aGUgbGVmdCBlbmQgb2YgdGhlIGRpc3RyaWJ1dGlvbi4gV2hpbGUgeWVhciBvZiBzY2hvb2xpbmcgaW5kaWNhdGUgdGhhdCBtb3N0IG9mIHBlb3BsZSBhcmUgcmFyZWx5IGVkdWNhdGVkLCBhbmQgYSBsb3Qgb2YgdGhlbSBpcyBvbmx5IGhhdmluZyAxLTIgeWVhcnMgb2YgZWR1Y2F0aW9uLiB0aGF0IHRoZXkgYXJlIHZlcnkgdW5lZHVjYXRlZC4gVXJiYW4gaXMgdGhlIG9ubHkgY2F0ZWdvcmljYWwgdGhhdCBkZWZpbmVzIHdoZXRoZXIgdGhlIHBlb3BsZSBsaXZlcyBpbiB1cmJhbiBhcmVhIHdpdGggMCBhbmQgMS4KCjIuICBSZWdyZXNzIGNoaWxkIG1vcnRhbGl0eSByYXRlIG9uIHdvbWVuJ3MgZWR1Y2F0aW9uLCBpbmNsdWRlIGNvbnRyb2wgdmFyaWFibGVzIGZvciBhZ2UsIHVyYmFuIHJlc2lkZW5jZSAoY3JlYXRlIGEgZHVtbXkgdmFyaWFibGUgZm9yIHJlc2lkZW5jZSBpbiBhbiB1cmJhbiBhcmVhKSwgYW5kIGF0IGxlYXN0IG9uZSBvdGhlciBjb250cm9sIHZhcmlhYmxlIG9mIHlvdXIgY2hvb3NpbmcuVGVsbCBtZSB3aHkgeW91IGluY2x1ZGVkIHRoYXQgY29udHJvbCB2YXJpYWJsZSBhbmQgd2hhdCB5b3UgZXhwZWN0IHRoZSBzaWduIHRvIGJlIGZvciB0aGUgdGhlIGNvZWZmaWNpZW50cyBvbiB0aGF0IGNvbnRyb2wgdmFyaWFibGUuCgpgYGB7Un0KCmRmX2FuYWx5c2lzLmxtIDwtIGxtKENNUn4gWVJTQ0hPT0wgKyBBR0UrIFVSQkFOICsgRUxFQ1RSSUMgK0xJVCAsIGRhdGE9ZGZfYW5hbHlzaXMpCgpzdW1tYXJ5KGRmX2FuYWx5c2lzLmxtKQoKYGBgCgpGcm9tIHRoZSBhYm92ZSByZWdyZXNzaW9uIG1vZGVsLCBJIHVzZWQgRUxFQ1RSSUMgYW5kIExJVCBhcyBteSBjb250cm9sbGVkIHZhcmlhYmxlcyBmb3IgdGhlIHJlZ3Jlc3Npb24sIHNpbmNlIEkgYmVsaWV2ZSBVUkJBTiBhcmVhIGFyZSBpbiBiZXR0ZXIgY29uZGl0aW9uIGZvciBFTEVDVFJJQy4gSSBzdXNwZWN0IGEgbmVnYXRpdmUgcmVsYXRpb25zaGlwIGJldHdlZW4gVVJCQU4gYXJlIGFuZCBjaGlsZCBtb3J0YWxpdHkgYmVjYXVzZSB3aXRoIGJldHRlciBlZHVjYXRpb24sIHdvbWVuIGNhbiBhZmZvcmQgbGl2aW5nIGluIFVSQkFOIEFSRUEsIHNvIHRoZXkgd2lsbCBoYXZlIGxlc3Mga2lkIGFuZCB0aGV5IHNwZW5kIGEgbG90IG9mIHRoZW0gd29ya2luZyBhbmQgaGF2aW5nIG1vcmUgb3V0c2lkZSBvcHRpb24gdGhlbiBpbiBtYXJyaWFnZSBhbmQgaGF2aW5nIGtpZC4gV2hpbGUgZWxlY3RyaWNpdHkgcmVwcmVzZW50IGlmIGEgaG91c2Vob2xkIGhhZCBhY2Nlc3MgdG8gZWxlY3RyaWNpdHkuIGl0IGhhcyBhIHBvc2l0aXZlIHJlbGF0aW9uc2hpcCBiZWNhdXNlIEVMRUNUUklDIGFzIGFuIG5lY2Vzc2l0eSwgYSBzZWN1cmVkIGxpdmluZyBlbnZpcm9ubWVudCBjYW4gaGVscCB3b21lbiB0byBoYXZlIG1vcmUgY2hpbGRyZW4gYmVjYXVzZSB0aGV5IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgc3VmZmVyaW5nIGZvcm0gbm8gZWxlY3RyaWMuIGFuZCB0aGUgc3RhYmxlIGVudmlyb25tZW50IGNhbiBpbmNyZWFzZSB3b21lbiB0byBoYXZlIG1vcmUgYmFiaWVzLiBzbyB3b21lbiBjYW4gaGF2ZSBtb3JlIGNoaWxkIG1vcnRhbGl0eS4gd2hpaWxlIExJVCByZXByZXNlbnQgaWYgdGhlIHJlc3BvbmRlbnQgY291bGQgcmVhZCBhbmQgd3JpdGUgaW4gYW55IGxhbmd1YWdlLCBzbyBJIGV4cGVjdCBhIG5lZ2F0aXZlIHJlbGF0aW9uc2hpcCBiZWNhdXNlIGEgcGVyc29uIGNvbnNpZGVyZWQgIkxpdGVyYWN5IiB3aWxsIGJlIG1vcmUgZWR1Y2F0ZWQgb3Igc3QgbGVhc3QgaGF2ZSBtb3JlIHRoZW4gcHJpbWFyeSBlZHVjYXRpb24sIHNvIGl0IHdpbGwgZGVjcmVhc2UgY2hpbGQgbW9ydGFsaXR5IHJhdGUsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IG1hdGNoIHdpdGggbXkgZ3Vlc3MsIGFuZCB3ZSBjYW4gc2VlIHRoZSBjb3JyZWxhdGlvbiBpcyBleHRyZW1lbHkgc21hbGwsIHdoaWNoIGNhbiBiZSBpbnNpZ25pZmljYW50IHRvIG91ciBtb2RlbC4KCjMuICBEaXNwbGF5IHlvdXIgcmVncmVzc2lvbiByZXN1bHRzIGZyb20gMiBpbiBhIHRhYmxlLiBMYWJlbCB5b3VyIHZhcmlhYmxlcyBpbiB0aGUgdGFibGUgYW5kIGdpdmUgeW91ciB0YWJsZSBhIHRpdGxlLiBXZXJlIHRoZSBzaWducyBvbiB0aGUgY29lZmZpY2llbnRzIGFzIGV4cGVjdGVkPwoKYGBge1J9CnN0YXJnYXplcihkZl9hbmFseXNpcy5sbSwgY292YXJpYXRlLmxhYmVscyA9IGMoIlllYXJzIG9mIHNjaG9vbGluZyIsICJBR0UiLCAiVXJiYW4tcnVyYWwgc3RhdHVzIiwiQWNjZXNzIHRvIEVsZWN0cmljaXR5IiwgIkxpdGVyYWN5IiksIHRpdGxlID0gIlRhYmxlIDE6IFJlZ3Jlc3Npb24gY2hpbGQgbW9ydGFsaXR5IHJhdGUiLCB0eXBlID0gInRleHQiKQoKYGBgCgpObywgdGhlIHJlZ3Jlc3Npb24gcmVzdWx0IGlzIGV4dHJlbWVseSBzbWFsbCB0aGF0IG1ha2VzIGl0IHN0YXRpc3RpY2FsbHkgaW5zaWduaWZpY2FudCwgdGhlIGNvcnJlbGF0aW9uIGJldHdlZW4gdHdvIHZhcmlhYmxlcyBpcyB2ZXJ5IGNsb3NlIHRvIDAsICh0aGF0IGlzIDAuMDE5XCpcKlwqIGFuZCAtMC4wMDAwMykgdGhhdCBkaWQgbm90IG1hdGNoIHdpdGggbXkgZXhwZWN0YXRpb24uIGJ1dCB0aGUgKy8tIGNhbiBiZSBhIHNtYWxsIGluZGljYXRvciBhYm91dCBteSBoeXBvdGhlc2lzLiBJIG5lZWQgdG8gZnVydGhlciBpbnZlc3RpZ2F0ZSB0aGUgZGF0YS4KCjQuICBXaHkgbWlnaHQgdGhlIGVzdGltYXRlZCByZWxhdGlvbnNoaXAgYmV0d2VlbiBjaGlsZCBtb3J0YWxpdHkgYW5kIHdvbWVuJ3MgZWR1Y2F0aW9uIHlvdSBlc3RpbWF0ZWQgYWJvdmUgYmUgYmlhc2VkPyBFdmVuIHRob3VnaCB0aGlzIGlzIHRoZSBkYXRhIHNjaWVuY2Ugc2VjdGlvbiwgZHJhdyBvbiBhdCBsZWFzdCBvbmUgb2YgdGhlIGNvdXJzZSByZWFkaW5ncyB0byBzdXBwb3J0IHlvdXIgYXJndW1lbnQuCgpBbHRob3VnaCBpdCdzIHRoZSBkYXRhIHNjaWVuY2Ugc2VjdGlvbiwgYmFzZWQgb24gUWlhbidzIHN0dWR5LCB0aGUgaW5jcmVhc2UgaW4gaW5jb21lIG9mIGZlbWFsZXMgd2hpbGUgaG9sZGluZyB0aGUgaW5jb21lIG9mIG1hbGVzIGNvbnN0YW50bHkgaW1wcm92ZXMgdGhlIHN1cnZpdmFsIHJhdGVzIGZvciBnaXJscywgYW5kIGxvd2VyaW5nIHRoZSBjaGlsZCBtb3J0YWxpdHkgcmF0ZS4gSG93ZXZlciBiZWNhdXNlIHdvbWVuJ3MgZWR1Y2F0aW9uIGlzIHBvc2l0aXZlbHkgY29ycmVsYXRlZCB3aXRoIHRoZWlyIHdhZ2UsIGl0IGlzIGEgb21pdHRlZCB2YXJpYWJsZXMgdGhhdCBtaWdodCBiZSBlbmRvZ2Vub3VzIGFuZCBjYXVzZSBiaWFzIGluIHRoZSBPTFMgbW9kZWwuIGFsc28gYXMgUGFyZW50YWwgSW52ZXN0bWVudHMgaW4gQ2hpbGRyZW4sIGFjcm9kZGluZyB0byBHZXJ0bGVyLCBQIHRoZSBDb25kaXRpb25hbCBDYXNoIFRyYW5zZmVycyB0byBJbXByb3ZlIENoaWxkIEhlYWx0aEFsc28gTWlsbGVyJ3Mgc3R1ZHkgRnJvbSBQcm9ibGVtIHNldCAyIGFsc28gaW5kaWNhdGVkIHRoYXQgc29tZSBvZiB0aGUgY29udHJhY2VwdGl2ZSB1c2Ugb24gYSB3b21hbidzIGZlcnRpbGl0eSBwb3RlbnRpYWxseSBjYXVzZSB0aGUgZGF0YSBiZSBiaWFzZWQuCgo1LiAgVXNpbmcgaGVyIHNwb3VzZSdzIGVkdWNhdGlvbiBhcyBhbiBpbnN0cnVtZW50YWwgdmFyaWFibGUgZm9yIGEgd29tYW4ncyBlZHVjYXRpb24sIHBlcmZvcm0gdHdvIHN0YWdlIGxlYXN0IHNxdWFyZXMuIERpc3BsYXkgdGhlIHJlc3VsdHMgb2YgeW91ciBzZWNvbmQgc3RhZ2UgaW4gYSB0YWJsZSB0aGF0IG1lZXRzIHRoZSBzYW1lIGNyaXRlcmlhIGFzIHRoZSB0YWJsZSB5b3UgY3JlYXRlZCBpbiAzLgoKYGBge1J9Cgptb2RlbDUgPC0gbG0oWVJTQ0hPT0wgfiBZUlNDSE9PTF9TUCArIEFHRSsgVVJCQU4gKyBFTEVDVFJJQyArTElULCBtb2RlbD1UUlVFLCBkYXRhID0gZGZfYW5hbHlzaXMgKQoKc3RhcmdhemVyKG1vZGVsNSwgdHlwZSA9ICJ0ZXh0IikKCm1vZGVsNS41IDwtIGl2cmVnKENNUiB+IFlSU0NIT09MICsgQUdFICsgVVJCQU4gKyBFTEVDVFJJQyArTElUIHwgWVJTQ0hPT0xfU1AgKyBBR0UrIFVSQkFOICsgVVJCQU4gKyBFTEVDVFJJQyArTElULCBkYXRhID0gZGZfYW5hbHlzaXMpCgpzdGFyZ2F6ZXIobW9kZWw1LjUsIHR5cGUgPSAidGV4dCIpCgpzdGFyZ2F6ZXIobW9kZWw1LjUsIGNvdmFyaWF0ZS5sYWJlbHMgPSBjKCJZZWFycyBvZiBzY2hvb2xpbmciLCAiQUdFIiwgIlVyYmFuLXJ1cmFsIHN0YXR1cyIsIiBBY2Nlc3MgdG8gRWxlY3RyaWNpdHkiLCAiTGl0ZXJhY3kiKSwgdGl0bGUgPSAiVGFibGUgMjogSW5zdHJ1bWVudGFsIFJlZ3Jlc3Npb24gcmVzdWx0IG9mIENNUiBvbiBlZHVjYXRpb24iLCB0eXBlID0gInRleHQiKQoKYGBgCgo2LiAgV3JpdGUgb25lIHBhcmFncmFwaCBkaXNjdXNzaW5nIGhvdyB0aGUgcmVzdWx0cyB5b3UgZm91bmQgaW4geW91ciBPTFMgYW5kIHR3byBzdGFnZSBsZWFzdCBzcXVhcmVzIHJlZ3Jlc3Npb25zICgjMiBhbmQgIzUpIHJlbGF0ZSB0byB0aGUgdGhlb3JldGljYWwgbW9kZWwocykgbGVhcm5lZCBpbiB0aGUgY291cnNlLiBUaGluayBvZiB0aGlzIGFzIGEgcHJhY3RpY2UgcnVuIGZvciB5b3VyIHBhcGVyLgoKVGhlIHZhcmlhYmxlcyBvZiB3b21lbidzIGVkdWNhdGlvbiBjYW4gYmUgZW5kb2dlbm91cyBhbmQgY2F1c2luZyBiaWFzIGluIHRoZSBPTFMgbW9kZWwsIFNvIHRvIGxvd2VyIHRoZSBlZmZlY3Qgb24gZWR1Y2F0aW9uIGFuZCBtYWtpbmcgaXQgbW9yZSBwcmVjaXNlLCBJIHVzZWQgWWVhcnMgb2Ygc2Nob29saW5nIFtvZiBzcG91c2VdIGFzIHRoZSB0aGlyZCB2YXJpYWJsZSB0byBkZWNyZWFzZSB0aGUgYmlhcy4gU2luY2UgWVJTQ0hPT0xfU1Agb25seSBpbmRpY2F0ZXMgdGhlIGhpZ2hlc3QgZ3JhZGUvbGV2ZWwgb2Ygc2Nob29saW5nIHRoZSBwZXJzb24gaGFkIGNvbXBsZXRlZCwgaW4geWVhcnMuIGFuZCBvbmx5IGZvcm1hbCBzY2hvb2xpbmcgaXMgY291bnRlZCBpbiB0aGUgdmFyaWFibGUsIFlSU0NIT09MX1NQIDAuMjAwXCpcKlwqIHZzIFllYXJzIG9mIHNjaG9vbGluZyAtMC4wMDVcKiwgdGhlIGRpZmZlcmVudCB3ZW50IGZyb20gcG9zaXRpdmUgcmVhbHRpb25zaGlwIHRvIGEgbmVnYXRpdmUgcmVsYXRpb25zaGlwIGFuZCB0aGUgY29ycmVsYXRpb24gaXMgYSBsb3Qgc21hbGxlciB3aGVuIHdoZW4gY29tcGFyaW5nIHRoZW0uIEl0IGlzIG1vcmUgb2ZmaWNpYWwgYW5kIGEgYmV0dGVyIG1ldGhvZCB0byBkZXRlcm1pbmFudCB0aGUgZWR1Y2F0aW9uIGxldmVsIGFzIHRoZSBkYXRhIGFuZCB0aGUgbW9kZWwgaXMgbGVzcyBiaWFzZWQuCgpGb3IgdGhlIFN0YWdlIDEgb2YgSVYgRXN0aW1hdGlvbiBQcm9jZWR1cmUsIHdlIHByZWRpY3QgdGhlIGVmZmVjdCBvZiBaIG9uIFQuSGVyZSwgd2Ugc2VlIHRoYXQgdGhlIGVmZmVjdCBvZiAnWVJTQ0hPT0xfU1AnIG9uIFlSU0NIT09MIGlzIHBvc2l0aXZlIGFuZCBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50LiBXZSBhbHNvIHNlZSB0aGF0IHRoZSBGLXN0YXRpc3RpYyBpcyA4LDIyMS4yNTguIHdpdGggYSBkZWdyZWUgb2YgZnJlZWRvbSBvZiA1LCBBIHN0YW5kYXJkIGJlbmNobWFyayBmb3IgcmVsZXZhbmNlIGlzIEZcPjMwLiBBZnRlciBTdGFnZSAyLCBub3cgd2Ugc2VlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiAnWWVhcnMgb2Ygc2Nob29saW5nJyBhbmQgJ0NNUicgaXMgbmVnYXRpdmUuIGl0IG1hdGNoZXMgd2l0aCBteSBhc3N1bXB0aW9uIG9mIGVkdWNhdGlvbiBoYXZpbmcgbmVnYXRpdmUgcmVsYXRpb25zaGlwIGluIENNUi4gU28gcGVvcGxlIHdpdGggaGlnaGVyIHNjaG9vbGluZyB3aWxsIGhhdmUgbG93ZXIgY2hpbGQgbW9ydGFsaXR5IHJhdGUsIGFzIHBlb3BsZSdzIHRpbWUgYXJlIGxpbWl0ZWQsIHRoZXkgY2FuJ3Qgc3BlbmQgdGltZSBpbiBlZHVjYXRpb24gd2hpbGUgaGF2aW5nIGEgbG90IG9mIGNoaWxkcmVuLiBCYXNlIG9uIFFpYW4ncyBhcmd1bWVudCwgdGhlIHN1cnZpdmFsIHJhdGUgb2YgZ2lybHMgaXMgcG9zaXRpdmVseSBjb3JyZWxhdGVkIHdpdGggZmVtYWxlIGluY29tZSwgaXQgcmVwcmVzZW50IGFzIHdvbWVuJ3MgaW5jb21lIGluY3JlYXNlcywgdGhlIGNoaWxkIG1vcnRhbGl0eSByYXRlIGRlY3JlYXNlcywgdGhlIHBvc2l0aXZlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHdvbWVuJ3MgaW5jb21lIGFuZCBlZHVjYXRpb25hbCBhdHRhaW5tZW50LCB0aGUgdGhlb3J5IGltcGxpZXMgdGhhdCB3b21lbidzIGVkdWNhdGlvbiBhbmQgY2hpbGQgbW9ydGFsaXR5IHJhdGUgYXJlIG5lZ2F0aXZlbHkgY29ycmVsYXRlZC4KCkl0IGlzIHBvc3NpYmxlIHRoYXQgaW50ZXJyZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGFib3ZlIHZhcmlhYmxlcyBtYXkgYWxzbyBjYXVzZSB0aGUgY29lZmZpY2llbnQgb24gZWR1Y2F0aW9uIHRvIGJlIGJpYXNlZCBpbiB0aGUgT0xTIG1vZGVsLCBzbyB3ZSBidWlsdCBhIHR3by1zdGFnZSBsZWFzdCBzcXVhcmVzIG1vZGVsLiBTaW5jZSB3b21lbiB3aXRoIGhpZ2hlciBlZHVjYXRpb24gYXJlIG1vcmUgbGlrZWx5IHRvIG1hcnJ5IG1lbiB3aXRoIGhpZ2hlciBlZHVjYXRpb24sIHdvbWVuJ3Mgc3BvdXNlIGVkdWNhdGlvbiBpcyBwb3NpdGl2ZWx5IHJlbGF0ZWQgdG8gd29tZW4ncyBlZHVjYXRpb24uIEFzIG1lbidzIGVkdWNhdGlvbiBpcyBsaWtlbHkgbm90IGNvcnJlbGF0ZWQgd2l0aCBDTVIsIGluIHRoZSBmaXJzdCBzdGVwLCB3ZSB1c2UgdGhlIHNwb3VzZSdzIG51bWJlciBvZiB5ZWFycyBvZiBzY2hvb2xpbmcgYXMgYW4gaW5zdHJ1bWVudGFsIHZhcmlhYmxlIGFuZCByZWdyZXNzIHRoZSB5ZWFyJ3Mgb2Ygc2Nob29saW5nIGZvciB0aGUgd29tZW4gb24gdGhlIHllYXJzIG9mIHNjaG9vbGluZyB0aGVpciBzcG91c2UgaGFkLCB3b21lbidzIGFnZSwgdXJiYW4tcnVyYWwgc3RhdHVzLCBBY2Nlc3MgdG8gRWxlY3RyaWNpdHkgYW5kTGl0ZXJhY3kgZ2V0IGEgcHJlZGljdGVkIHZhbHVlIGZvciB0aGUgd29tZW4ncyB5ZWFyJ3Mgb2Ygc2Nob29saW5nLiBXZSBwcmVkaWN0IENNUiBvbiB0aGUgcHJlZGljdGVkIHZhbHVlIG9mIHdvbWVuJ3MgZWR1Y2F0aW9uIGFuZCB0aGUgc2FtZSBjb250cm9sbGVkIHZhcmlhYmxlcyB0byBvYnRhaW4gYW4gdW5iaWFzZWQgZXN0aW1hdGUuIEJvdGggbW9kZWxzIHByb2R1Y2Ugc2lnbmlmaWNhbnQgbmVnYXRpdmUgY29ycmVsYXRpb25zIGJldHdlZW4gdGhlIHR3byB2YXJpYWJsZXMuCgpBbm90aGVyIHdheSB0byBpbXByb3ZlIHRoZSBiaWFzIEFjY29yZGluZyB0byBNaWxsZXIgaXMgdG8gaW1wcm92ZSB0aGUgcHJvY2VzcyBmb3IgY29sbGVjdGluZyB0aGUgZGF0YSwgd2hlbiBjb2xsZWN0aW5nIHRoZSBkYXRhIGNhbiBiZSBwcm92aWRlZCBlcXVhbGx5IHRvIGV2ZXJ5b25lIHZvbHVudGFyaWx5LCBmcmVlIG9mIGRpc2NyaW1pbmF0aW9uLCBjb2VyY2lvbiBvciB2aW9sZW5jZSAoYmFzZWQgb24gaW5kaXZpZHVhbCBjaG9pY2UpIHRoYXQgYSBmZW1hbGUgY2FuIGJlIG1vcmUgaW5kZXBlbmRlbnQgb24gdGhlaXIgZmVydGlsaXR5IGNob2ljZSBhbmQgdGhlIGJpYXMgb24gdGhlIGRhdGEgaXRzZWxmIHdpbGwgYmUgbG93ZXIgYW5kIGNhbiByZWZsZWN0IGJldHRlciBvbiB3b21lbidzIGNob2ljZS4gQWxzbyBvbiBNYWNjaW5pLCBTaGFyb24sIGFuZCBEZWFuIFlhbmcuIDIwMDkncyBwYXBlciBvZiAiVW5kZXIgdGhlIFdlYXRoZXI6IEhlYWx0aCwgU2Nob29saW5nLCBhbmQgRWNvbm9taWMgQ29uc2VxdWVuY2VzIG9mIEVhcmx5LUxpZmUgUmFpbmZhbGwuIiB0aGV5IGhhZCBhbiBpbnRlcmVzdGluZyByZXNlYXJjaCBsb29raW5nIGF0IGhvdyB0aGUgd2VhdGhlciBvbiBFYXJseS1MaWZlIFJhaW5mYWxsIHdpbGwgYWZmZWN0IHRoZSBIZWFsdGgsIFNjaG9vbGluZywgYW5kIEVjb25vbWljIENvbnNlcXVlbmNlcyBvZiBhIHBlcnNvbiBsYXRlciBpbiBsaWZlLiB0aGV5IGZvY3VzIG9uIHNob2NrcyB0aGF0IG9jY3VyIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBvZiBsaWZlLCBhbmQgYXNrIGhvdyBzZW5zaXRpdmUgbG9uZy1ydW4gaW5kaXZpZHVhbCB3ZWxsLWJlaW5nIGlzIHRvIGVudmlyb25tZW50YWwgY29uZGl0aW9ucyBhcm91bmQgdGhlIHRpbWUgb2YgYmlydGguIHRoZXkgZXhhbWluZSB0aGUgZWZmZWN0IG9mIHdlYXRoZXIgc2hvY2tzIGFyb3VuZCB0aGUgdGltZSBvZiBiaXJ0aCBvbiB0aGUgYWR1bHQgaGVhbHRoLCBidXQgdGhlaXIgc2VhcmNoIG1heSBiZSBiaWFzIGFzIHdlbGwgc2luY2UgdGVhc2luZyBvdXQgdGhlIGNhdXNhbCBpbXBhY3RzIG9mIG51dHJpdGlvbmFsIHNob2NrcyBhdCBkaWZmZXJlbnQgcG9pbnRzIGluIHRoZSBsaWZlIGN5Y2xlIGlzIGRpZmZpY3VsdCBnaXZlbiB0aGUgc3Ryb25nIGNvcnJlbGF0aW9uIG9mIGRlcHJpdmF0aW9uIGFjcm9zcyB0aGUgdnVsbmVyYWJsZSBwZXJpb2RzIGluIHRoZSBsaWZlIGN5Y2xlIChHbGV3d2UgYW5kIEtpbmcgMjAwMSkuIHRoZSBpZGVhIHRoYXQgZW52aXJvbm1lbnRhbCBjb25kaXRpb25zIGluIGEgY2VydGFpbiBzZW5zaXRpdmUgcGVyaW9kIG9mIGxpZmUgbWF5IGhhdmUgbG9uZy1ydW4sIGlycmV2ZXJzaWJsZSBlZmZlY3RzIGlzIGtub3duIGFzICJjcml0aWNhbC1wZXJpb2QgcHJvZ3JhbW1pbmcuIiBUaGUgImZldGFsIG9yaWdpbnMgaHlwb3RoZXNpcyIgc3RyZXNzZXMgdGhhdCBudXRyaXRpb25hbCBkZXByaXZhdGlvbiBpbiB1dGVybyBwZXJtYW5lbnRseSByZWR1Y2VzIGJvZHkgc2l6ZSBpbiBhZHVsdGhvb2QsIHdoaWxlIHRoZSBlZmZlY3Qgb2YgbnV0cml0aW9uYWwgZGVwcml2YXRpb24gaW4gbGF0ZXIgcGVyaW9kcyBpcyBtb3JlIG11dGVkIChCYXJrZXIgMTk5OCkuIGl0J3MgaGFyZCB0byBmaW5kIHRoZSBjcnVjaWFsIHBlcmlvZCBvZiBFYXJseS1MaWZlLiBhbmQgY2F1c2VkIGEgYmlhcyB0b3dhcmQgdGhlaXIgcGFwZXIuIGl0IGNhbiBiZSBleHRyZW1lbHkgaGFyZCB0byBpZGVudGlmeSBhbmQgY2F1c2UgYW4gb21pdHRlZCB2YXJpYWJsZSBwcm9ibGVtIElmIHJhaW5mYWxsIGlzIHNlcmlhbGx5IGNvcnJlbGF0ZWQgb3ZlciB0aW1lLCB0aGVuIGl0IGNvdWxkIGJlIHRoYXQgcmFpbmZhbGwgaW4gc29tZSB5ZWFycyBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGJpcnRoIHllYXIgaGFzIHRoZSBhY3R1YWwgaW1wYWN0IG9uIGFkdWx0IG91dGNvbWVzLiB0aGUgY29lZmZpY2llbnRzIG9uIGJpcnRoIHllYXIgcmFpbmZhbGwgaW4gcmVncmVzc2lvbnMgaW4gVGFibGUgMiBtaWdodCBzaW1wbHkgcmVmbGVjdCB0aGUgZmFjdCB0aGF0IG90aGVyIHllYXJzJyByYWluZmFsbCB3YXMgbm90IGluY2x1ZGVkIGluIHRoZSByZWdyZXNzaW9ucy4K