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)
- 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
- 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.
- 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.
- 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.
- 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.
- 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")
- 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