Conceptual Questions
1,It took Finland about 50 years to go through its demographic
transition around the turn of the 20th century. For this question, go to
populationpyramid.net, choose a country in Asia, Africa, or Central or
South America that is currently in the third stage or later of its
demographic transition. Look back in time to find a year in which it was
in the second stage. Then figure out approximately how many years it
took the country to enter the third stage In your answer, tell me: Name
of the country, year it was in the second stage, years to third stage.
Did this country take more or less time than Finland. Try to think of at
least two reasons why that might be the case and write a short
description of your reasoning. Note: If you can’t find when the country
was in its second stage, look for a different country.
The country I found is China, it’s started it’s third state in 2015
to now, The year for cHINA in second stage is around 1991. the
population growth for age group 0-4 is around 5.9% for males and 5.4%
for females. you can see a clear boom in its fertility rate around 1991.
and China takes a lot less time than Finland to enter it’s third stage
around 2015. which is just 25 years compare to finland. the fertality
rate had a steady fall since 2015.
first reason is the end of China’s one-child policy in 1979. After
almost 10 years of fertality constractuion happening in China, Chinese
people finally get to started reportduce a lot of kid once again to have
enough kid to help labour fource. Back then China is a huge aggreculture
society, more kids means better return in aggreculture. So we can see
they get into
I belive the best reason is the trememdious growth cause by political
reason happening in China since 1992. China decided to open their market
to global investors and largely subsidized on it’s manufacture industry.
Which lead to a trememdious growth in it’s GDP. The overall economny had
a super boom since then. That caused their citizen to focus on it’s
economy growth and ignored the fertality. So As China economy getting
stronger and stronger, the fertaliuty rate doped to around 2.5 % for
both males and females. and We can see China eneter into the third stage
around 2015.
Another reason is the influcture isn’t build enough for this huge
growth in kid and GDP. As population is relatively huge, but the
infscture isnt enough for the population, People are frastured about
having a kid and are not able to raise them because of the expencise
cost. you can also see the furtality rate droped a lot since 2015 when
it’s GDP are very high.
- The Millennium Development Goals (https://www.who.int/news-room/fact-sheets/detail/millennium-development-goals-(mdgs))
were 8 goals set forth by the United Nations in the late 1990s that were
meant to serve as a framework for reducing extreme poverty along
multiple dimensions by 2015. Consult the file
“africa-millennium-development-goals.xlsx” found in github or at https://data.humdata.org/dataset/africa-millennium-development-goals.
Choose one goal and two countries. State the goal, the countries, the
measures used to assess progress in the goal, and compare and contrast
the progress of the two countries toward achieving that goal.
country<-"UKR"
births_by_year <- readHMDweb(CNTRY="UKR", item="Births",username="knoxm@uw.edu", password="Pat01edd!")
mortality_by_year_age <- readHMDweb(CNTRY= "UKR", item="Deaths_1x1",username="knoxm@uw.edu", password="Pat01edd!")
view(mortality_by_year_age)
DF<- data.frame(africa_millennium_development_goals)
I choose Millennium Development Goal 1: Eradicate extreme poverty and
hunger, and the two countries I want to compare is Gambia and Botswana.
the measures used to assess progress in the goal is Prevalence of
underweight children under-five years of age iun % and we can see that
Gambia is doing a lot better than Botswana in Goal 1, we can see the
value for all Gambia value is a lot more than Botswana. you can see the
value for Botswana’s Goal 1 is a lot smaller than Gmabia, Botswana’s
value is mostly 3.4,5 single numbers, but for Gambia, it’s a lot better,
and the value is mostly around 30-60, And we can see Gambia are doing
better in achieving the goal. and from the Employment to population
ratio 15-24 yrs (%), the is a lot better in Gambia too. So I believe
Gambia is doing a lot better than Botswana.
You are a young RA working at the World Bank. It’s 4:55 and your
boss just came into your cubicle to tell you that he has a meeting at 8
am to discuss new anti-poverty strategies in the fictional country of
Portlandia. He hands you the following information and asks for a
poverty profile. Oh, and he has a tennis game in 20 minutes, so could
you include some policy recommendations and have the report on his desk
by the morning?
The paper he hands you says:
Portlandia is a small, poor country where the people are divided into
four equal sized groups consisting of 1000 people each. One group earns
$100 a year, one earns $500 a year, one earns $900 a year, and the final
group earns $1500 a year. The poverty line is set at $1000. We have a
budget of $300,000 for poverty
alleviation.
3.1 Please calculate the Head Count Ratio, and Income Gap Ratio for
this country. (Include code, but this could just be simple
calculations.)
3 groups only with income $100 a year, $500 a year, and $900 a
year.
Head_Count_Ratio_Portlandia<- (3000/4000)
Head_Count_Ratio_Portlandia
[1] 0.75
p<- 1000
q<-3000
Income_Gap_Ratio <- (((p-100)/p*1000+(p-500)/p*1000+(p-900)/p*1000)/q)
Income_Gap_Ratio
[1] 0.5
new_head_count_ratio <- (1000+600)/4000
view(new_head_count_ratio)
3.2 The World Bank\'s policy is to minimize head count ratio. What will your recommendation be? What will the new head count ratio be? (Include code)
I will purpose to reduce the income from the 1500 high income group,
we can higher their tax, and even have tax cut for the lower income
group, with them lowering their income, We can have a better asset
allocation, we can narrower income gap. so the new head count ratio will
be (1000+600)/4000=0.4
new_head_count_ratio <- (1000+600)/4000
new_head_count_ratio
[1] 0.4
3.3 Do you think this is the correct approach to poverty alleviation? Why or why not?
I think it's a correct approach to poverty alleviation, as rich people is making a lot more money than the poor, the tax cut we provide to lower income group will have more incentives for them to work better and they have higher potential to have higher income. and if the rich are paying more tax, we will have more money to provide more subsidy to the poor. they may have more education, better nutriction. it's a good way to poverty alleviation.
- Calculate Total Fertility Rates The female population (in thousands)
and births by mother’s age group in Brazil in 2005 are in the table
below. (The first chunk is the data, the second is there to display it
nicely.) Use this data to calculate the Total Fertility Rate for Brazil
at this time.
fertility_brazil<-as.data.frame(matrix(c(8128,8531,8844, 8118, 7209, 6715, 6409,367.9,530.2,449.6, 264.4, 126.5, 38.4, 6.8), nrow=7, ncol=2, dimnames=list(c("15-19","20-24","25-29","30-34","35-39","40-44","45-49"), c("Population_Thousands","Births_Thousands"))))
fertility_brazil
total_fertility_Brazil <- 5*(367.9/8128+530.2/8531+449.6/8844+264.4/8118+126.5/7209+38.4/6715+6.8/6409)
total_fertility_Brazil
[1] 1.075732
- For this question, we will practice reading in some real data from
the Human Mortality Database at UC Berkeley. Follow the steps in the lab
to get an account and access the data you need. Modify the code in the
lab exercise above to calculate and then plot the Age Specific Mortality
Rates for a single year for a country other than the US. (Note: The list
of countries is here https://www.mortality.org/Data/DataAvailability. They
are mostly western countries, and I recommend picking a Scandinavian
country to get a long and more interesting time series.)
Hint: Rather than aggregating over all deaths, you are going to
filter the data for one year only, then calculate ASMR for that
year.
| The country I choose is from UKR, we can see the summary for the
mortality thats goup by years. |
| Year Crude_Deaths |
| Min. :1959 Min. :296171 |
| 1st Qu.:1972 1st Qu.:446195 |
| Median :1986 Median :600590 |
| Mean :1986 Mean :579948 |
| 3rd Qu.:2000 3rd Qu.:740416 |
| Max. :2013 Max. :792587 |
births_by_year <- readHMDweb(CNTRY="UKR", item="Births", username="knoxm@uw.edu", password="Pat01edd!" )
mortality_by_year_age <- readHMDweb(CNTRY="UKR", item="Deaths_1x1", username="knoxm@uw.edu", password="Pat01edd!")
head(mortality_by_year_age)
mortality_by_year<-mortality_by_year_age %>%
group_by(Year) %>%
summarise(Crude_Deaths =sum(Total))
head(mortality_by_year)
summary(mortality_by_year)
Year Crude_Deaths
Min. :1959 Min. :296171
1st Qu.:1972 1st Qu.:446195
Median :1986 Median :600590
Mean :1986 Mean :579948
3rd Qu.:2000 3rd Qu.:740416
Max. :2013 Max. :792587
mortality_by_year_age_1960 <- filter(mortality_by_year_age, Year==1960)
head(mortality_by_year_age_1960)
mortality_by_year_age <- readHMDweb(CNTRY="UKR", item="Deaths_1x1", username="knoxm@uw.edu", password="Pat01edd!")
mortality_by_year <- aggregate(x=mortality_by_year_age[3:5], by=list(Year=mortality_by_year_age$Year), FUN=sum)
mortality_by_year <- dplyr::select(mortality_by_year, Year, Total)
mortality_by_year <- dplyr::rename(mortality_by_year, Crude_Deaths=Total)
head(mortality_by_year)
ASMR_CHINA<-matrix(c(22,60, 18,8,3,43), nrow=3, ncol=2, dimnames=list(c("<15","15-64",">64"), c("Pop_Percent","Deaths_per_1000")))
population_by_year_age <- readHMDweb(CNTRY="UKR", item="Population", username="knoxm@uw.edu", password="Pat01edd!")
pop_by_year<-population_by_year_age %>%
group_by(Year) %>%
summarise(Population_Total =sum(Total1))
head(pop_by_year)
NA
malthus <- merge(pop_by_year, mortality_by_year, by='Year', all=FALSE)
malthus <- merge(malthus, births_by_year, by='Year')
births_by_year <- readHMDweb(CNTRY="UKR", item="Births", username="knoxm@uw.edu", password="Pat01edd!")
births_by_year <- dplyr::select(births_by_year, Year, Total)
births_by_year <- dplyr::rename(births_by_year, Crude_Births=Total)
head(births_by_year)
population_by_year_age <- readHMDweb(CNTRY="UKR", item="Population", username="knoxm@uw.edu", password="Pat01edd!")
pop_by_year <- aggregate(x=population_by_year_age[4:9], by=list(Year=population_by_year_age$Year), FUN=sum)
pop_by_year <- aggregate(x = population_by_year_age[4:9], by=list(Year=population_by_year_age$Year), FUN = sum)
pop_by_year <- dplyr::select(pop_by_year, Year, Total1)%>%
dplyr::rename(Population_Total=Total1)
head(pop_by_year)
#Merge both Birth date and Death rate into a data frame malthus.
malthus <- merge(pop_by_year, mortality_by_year_age_1960, by='Year', all=FALSE)
malthus <- merge(pop_by_year, mortality_by_year, by='Year', all=FALSE)
malthus <- merge(malthus, births_by_year, by='Year', all = FALSE)
malthus <- merge(malthus, mortality_by_year$Crude_Deaths, all = FALSE)
malthus$CBR <- malthus$Crude_Births/malthus$Population_Total
malthus$CMR <- malthus$Crude_Deaths/malthus$Population_Total
head(malthus)
NA
#PLOT THE GRAPH for "malthus Plot for UKR"
malthus %>% ggplot(aes(x=CMR, y= CBR))+geom_point()+ ggtitle("malthus Plot for UKR")

#plot a smoothed line on the data
malthus %>%
ggplot(aes(x=CMR, y=CBR))+geom_point()+geom_smooth(method=lm, formula= y~poly(x,3))+ggtitle("Malthus Plot for UKR with Fitted Polynomial")

6, Using the data you downloaded for problem 5, calculate the crude
mortality rate for the country and year chosen.
#the year I choose for UKR is 1960
mortality_by_year_age_1960 <- filter(mortality_by_year_age, Year==1960)
head(mortality_by_year_age_1960)
crude_m_rate_1960 <- filter(malthus, Year==1960)
#we can see the CMR for 1960 is 0.006974601
head(crude_m_rate_1960)
head(malthus)
NA
LS0tDQp0aXRsZTogIjQ0OCBQcm9ibGVtIFNldCAxIg0KYXV0aG9yOiAiV2Fpd2FuZyBMYW0iDQpkYXRlOiAnMjAyMi0xMC0yNScNCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KDQppZiAoIXJlcXVpcmUoInBhY21hbiIpKSBpbnN0YWxsLnBhY2thZ2VzKCJwYWNtYW4iKQ0KcGFjbWFuOjpwX2xvYWQoSE1ESEZEcGx1cywgdGlkeXZlcnNlLCBnZ3Bsb3QyLCBkcGx5ciwgbGF0dGljZSkNCg0KbGlicmFyeSgiZ2dwbG90MiIpDQpsaWJyYXJ5KCJkcGx5ciIpDQpsaWJyYXJ5KCJITURIRkRwbHVzIikNCg0KYGBgDQoNCiMjIyBDb25jZXB0dWFsIFF1ZXN0aW9ucw0KDQoxLEl0IHRvb2sgRmlubGFuZCBhYm91dCA1MCB5ZWFycyB0byBnbyB0aHJvdWdoIGl0cyBkZW1vZ3JhcGhpYyB0cmFuc2l0aW9uIGFyb3VuZCB0aGUgdHVybiBvZiB0aGUgMjB0aCBjZW50dXJ5LiBGb3IgdGhpcyBxdWVzdGlvbiwgZ28gdG8gcG9wdWxhdGlvbnB5cmFtaWQubmV0LCBjaG9vc2UgYSBjb3VudHJ5IGluIEFzaWEsIEFmcmljYSwgb3IgQ2VudHJhbCBvciBTb3V0aCBBbWVyaWNhIHRoYXQgaXMgY3VycmVudGx5IGluIHRoZSB0aGlyZCBzdGFnZSBvciBsYXRlciBvZiBpdHMgZGVtb2dyYXBoaWMgdHJhbnNpdGlvbi4gTG9vayBiYWNrIGluIHRpbWUgdG8gZmluZCBhIHllYXIgaW4gd2hpY2ggaXQgd2FzIGluIHRoZSBzZWNvbmQgc3RhZ2UuIFRoZW4gZmlndXJlIG91dCBhcHByb3hpbWF0ZWx5IGhvdyBtYW55IHllYXJzIGl0IHRvb2sgdGhlIGNvdW50cnkgdG8gZW50ZXIgdGhlIHRoaXJkIHN0YWdlIEluIHlvdXIgYW5zd2VyLCB0ZWxsIG1lOiBOYW1lIG9mIHRoZSBjb3VudHJ5LCB5ZWFyIGl0IHdhcyBpbiB0aGUgc2Vjb25kIHN0YWdlLCB5ZWFycyB0byB0aGlyZCBzdGFnZS4gRGlkIHRoaXMgY291bnRyeSB0YWtlIG1vcmUgb3IgbGVzcyB0aW1lIHRoYW4gRmlubGFuZC4gVHJ5IHRvIHRoaW5rIG9mIGF0IGxlYXN0IHR3byByZWFzb25zIHdoeSB0aGF0IG1pZ2h0IGJlIHRoZSBjYXNlIGFuZCB3cml0ZSBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHlvdXIgcmVhc29uaW5nLiBOb3RlOiBJZiB5b3UgY2FuJ3QgZmluZCB3aGVuIHRoZSBjb3VudHJ5IHdhcyBpbiBpdHMgc2Vjb25kIHN0YWdlLCBsb29rIGZvciBhIGRpZmZlcmVudCBjb3VudHJ5Lg0KDQpUaGUgY291bnRyeSBJIGZvdW5kIGlzIENoaW5hLCBpdCdzIHN0YXJ0ZWQgaXQncyB0aGlyZCBzdGF0ZSBpbiAyMDE1IHRvIG5vdywgVGhlIHllYXIgZm9yIGNISU5BIGluIHNlY29uZCBzdGFnZSBpcyBhcm91bmQgMTk5MS4gdGhlIHBvcHVsYXRpb24gZ3Jvd3RoIGZvciBhZ2UgZ3JvdXAgMC00IGlzIGFyb3VuZCA1LjklIGZvciBtYWxlcyBhbmQgNS40JSBmb3IgZmVtYWxlcy4geW91IGNhbiBzZWUgYSBjbGVhciBib29tIGluIGl0cyBmZXJ0aWxpdHkgcmF0ZSBhcm91bmQgMTk5MS4gYW5kIENoaW5hIHRha2VzIGEgbG90IGxlc3MgdGltZSB0aGFuIEZpbmxhbmQgdG8gZW50ZXIgaXQncyB0aGlyZCBzdGFnZSBhcm91bmQgMjAxNS4gd2hpY2ggaXMganVzdCAyNSB5ZWFycyBjb21wYXJlIHRvIGZpbmxhbmQuIHRoZSBmZXJ0YWxpdHkgcmF0ZSBoYWQgYSBzdGVhZHkgZmFsbCBzaW5jZSAyMDE1Lg0KDQpmaXJzdCByZWFzb24gaXMgdGhlIGVuZCBvZiBDaGluYSdzIG9uZS1jaGlsZCBwb2xpY3kgaW4gMTk3OS4gQWZ0ZXIgYWxtb3N0IDEwIHllYXJzIG9mIGZlcnRhbGl0eSBjb25zdHJhY3R1aW9uIGhhcHBlbmluZyBpbiBDaGluYSwgQ2hpbmVzZSBwZW9wbGUgZmluYWxseSBnZXQgdG8gc3RhcnRlZCByZXBvcnRkdWNlIGEgbG90IG9mIGtpZCBvbmNlIGFnYWluIHRvIGhhdmUgZW5vdWdoIGtpZCB0byBoZWxwIGxhYm91ciBmb3VyY2UuIEJhY2sgdGhlbiBDaGluYSBpcyBhIGh1Z2UgYWdncmVjdWx0dXJlIHNvY2lldHksIG1vcmUga2lkcyBtZWFucyBiZXR0ZXIgcmV0dXJuIGluIGFnZ3JlY3VsdHVyZS4gU28gd2UgY2FuIHNlZSB0aGV5IGdldCBpbnRvDQoNCkkgYmVsaXZlIHRoZSBiZXN0IHJlYXNvbiBpcyB0aGUgdHJlbWVtZGlvdXMgZ3Jvd3RoIGNhdXNlIGJ5IHBvbGl0aWNhbCByZWFzb24gaGFwcGVuaW5nIGluIENoaW5hIHNpbmNlIDE5OTIuIENoaW5hIGRlY2lkZWQgdG8gb3BlbiB0aGVpciBtYXJrZXQgdG8gZ2xvYmFsIGludmVzdG9ycyBhbmQgbGFyZ2VseSBzdWJzaWRpemVkIG9uIGl0J3MgbWFudWZhY3R1cmUgaW5kdXN0cnkuIFdoaWNoIGxlYWQgdG8gYSB0cmVtZW1kaW91cyBncm93dGggaW4gaXQncyBHRFAuIFRoZSBvdmVyYWxsIGVjb25vbW55IGhhZCBhIHN1cGVyIGJvb20gc2luY2UgdGhlbi4gVGhhdCBjYXVzZWQgdGhlaXIgY2l0aXplbiB0byBmb2N1cyBvbiBpdCdzIGVjb25vbXkgZ3Jvd3RoIGFuZCBpZ25vcmVkIHRoZSBmZXJ0YWxpdHkuIFNvIEFzIENoaW5hIGVjb25vbXkgZ2V0dGluZyBzdHJvbmdlciBhbmQgc3Ryb25nZXIsIHRoZSBmZXJ0YWxpdXR5IHJhdGUgZG9wZWQgdG8gYXJvdW5kIDIuNSAlIGZvciBib3RoIG1hbGVzIGFuZCBmZW1hbGVzLiBhbmQgV2UgY2FuIHNlZSBDaGluYSBlbmV0ZXIgaW50byB0aGUgdGhpcmQgc3RhZ2UgYXJvdW5kIDIwMTUuDQoNCkFub3RoZXIgcmVhc29uIGlzIHRoZSBpbmZsdWN0dXJlIGlzbid0IGJ1aWxkIGVub3VnaCBmb3IgdGhpcyBodWdlIGdyb3d0aCBpbiBraWQgYW5kIEdEUC4gQXMgcG9wdWxhdGlvbiBpcyByZWxhdGl2ZWx5IGh1Z2UsIGJ1dCB0aGUgaW5mc2N0dXJlIGlzbnQgZW5vdWdoIGZvciB0aGUgcG9wdWxhdGlvbiwgUGVvcGxlIGFyZSBmcmFzdHVyZWQgYWJvdXQgaGF2aW5nIGEga2lkIGFuZCBhcmUgbm90IGFibGUgdG8gcmFpc2UgdGhlbSBiZWNhdXNlIG9mIHRoZSBleHBlbmNpc2UgY29zdC4geW91IGNhbiBhbHNvIHNlZSB0aGUgZnVydGFsaXR5IHJhdGUgZHJvcGVkIGEgbG90IHNpbmNlIDIwMTUgd2hlbiBpdCdzIEdEUCBhcmUgdmVyeSBoaWdoLg0KDQoyLiAgVGhlIE1pbGxlbm5pdW0gRGV2ZWxvcG1lbnQgR29hbHMgKFtodHRwczovL3d3dy53aG8uaW50L25ld3Mtcm9vbS9mYWN0LXNoZWV0cy9kZXRhaWwvbWlsbGVubml1bS1kZXZlbG9wbWVudC1nb2Fscy0obWRncyldKGh0dHBzOi8vd3d3Lndoby5pbnQvbmV3cy1yb29tL2ZhY3Qtc2hlZXRzL2RldGFpbC9taWxsZW5uaXVtLWRldmVsb3BtZW50LWdvYWxzLShtZGdzKSl7LnVyaX0pIHdlcmUgOCBnb2FscyBzZXQgZm9ydGggYnkgdGhlIFVuaXRlZCBOYXRpb25zIGluIHRoZSBsYXRlIDE5OTBzIHRoYXQgd2VyZSBtZWFudCB0byBzZXJ2ZSBhcyBhIGZyYW1ld29yayBmb3IgcmVkdWNpbmcgZXh0cmVtZSBwb3ZlcnR5IGFsb25nIG11bHRpcGxlIGRpbWVuc2lvbnMgYnkgMjAxNS4gQ29uc3VsdCB0aGUgZmlsZSAiYWZyaWNhLW1pbGxlbm5pdW0tZGV2ZWxvcG1lbnQtZ29hbHMueGxzeCIgZm91bmQgaW4gZ2l0aHViIG9yIGF0IDxodHRwczovL2RhdGEuaHVtZGF0YS5vcmcvZGF0YXNldC9hZnJpY2EtbWlsbGVubml1bS1kZXZlbG9wbWVudC1nb2Fscz4uDQoNCkNob29zZSBvbmUgZ29hbCBhbmQgdHdvIGNvdW50cmllcy4gU3RhdGUgdGhlIGdvYWwsIHRoZSBjb3VudHJpZXMsIHRoZSBtZWFzdXJlcyB1c2VkIHRvIGFzc2VzcyBwcm9ncmVzcyBpbiB0aGUgZ29hbCwgYW5kIGNvbXBhcmUgYW5kIGNvbnRyYXN0IHRoZSBwcm9ncmVzcyBvZiB0aGUgdHdvIGNvdW50cmllcyB0b3dhcmQgYWNoaWV2aW5nIHRoYXQgZ29hbC4NCg0KYGBge1J9DQpjb3VudHJ5PC0iVUtSIg0KDQpiaXJ0aHNfYnlfeWVhciA8LSByZWFkSE1Ed2ViKENOVFJZPSJVS1IiLCBpdGVtPSJCaXJ0aHMiLHVzZXJuYW1lPSJrbm94bUB1dy5lZHUiLCBwYXNzd29yZD0iUGF0MDFlZGQhIikgDQoNCm1vcnRhbGl0eV9ieV95ZWFyX2FnZSA8LSByZWFkSE1Ed2ViKENOVFJZPSAiVUtSIiwgaXRlbT0iRGVhdGhzXzF4MSIsdXNlcm5hbWU9Imtub3htQHV3LmVkdSIsIHBhc3N3b3JkPSJQYXQwMWVkZCEiKQ0KDQp2aWV3KG1vcnRhbGl0eV9ieV95ZWFyX2FnZSkNCg0KREY8LSBkYXRhLmZyYW1lKGFmcmljYV9taWxsZW5uaXVtX2RldmVsb3BtZW50X2dvYWxzKQ0KDQoNCmBgYA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KSSBjaG9vc2UgTWlsbGVubml1bSBEZXZlbG9wbWVudCBHb2FsIDE6IEVyYWRpY2F0ZSBleHRyZW1lIHBvdmVydHkgYW5kIGh1bmdlciwgYW5kIHRoZSB0d28gY291bnRyaWVzIEkgd2FudCB0byBjb21wYXJlIGlzIEdhbWJpYSBhbmQgQm90c3dhbmEuIHRoZSBtZWFzdXJlcyB1c2VkIHRvIGFzc2VzcyBwcm9ncmVzcyBpbiB0aGUgZ29hbCBpcyBQcmV2YWxlbmNlIG9mIHVuZGVyd2VpZ2h0IGNoaWxkcmVuIHVuZGVyLWZpdmUgeWVhcnMgb2YgYWdlIGl1biAlIGFuZCB3ZSBjYW4gc2VlIHRoYXQgR2FtYmlhIGlzIGRvaW5nIGEgbG90IGJldHRlciB0aGFuIEJvdHN3YW5hIGluIEdvYWwgMSwgd2UgY2FuIHNlZSB0aGUgdmFsdWUgZm9yIGFsbCBHYW1iaWEgdmFsdWUgaXMgYSBsb3QgbW9yZSB0aGFuIEJvdHN3YW5hLiB5b3UgY2FuIHNlZSB0aGUgdmFsdWUgZm9yIEJvdHN3YW5hJ3MgR29hbCAxIGlzIGEgbG90IHNtYWxsZXIgdGhhbiBHbWFiaWEsIEJvdHN3YW5hJ3MgdmFsdWUgaXMgbW9zdGx5IDMuNCw1IHNpbmdsZSBudW1iZXJzLCBidXQgZm9yIEdhbWJpYSwgaXQncyBhIGxvdCBiZXR0ZXIsIGFuZCB0aGUgdmFsdWUgaXMgbW9zdGx5IGFyb3VuZCAzMC02MCwgQW5kIHdlIGNhbiBzZWUgR2FtYmlhIGFyZSBkb2luZyBiZXR0ZXIgaW4gYWNoaWV2aW5nIHRoZSBnb2FsLiBhbmQgZnJvbSB0aGUgRW1wbG95bWVudCB0byBwb3B1bGF0aW9uIHJhdGlvIDE1LTI0IHlycyAoJSksIHRoZSBpcyBhIGxvdCBiZXR0ZXIgaW4gR2FtYmlhIHRvby4gU28gSSBiZWxpZXZlIEdhbWJpYSBpcyBkb2luZyBhIGxvdCBiZXR0ZXIgdGhhbiBCb3Rzd2FuYS4NCg0KMy4gIFlvdSBhcmUgYSB5b3VuZyBSQSB3b3JraW5nIGF0IHRoZSBXb3JsZCBCYW5rLiBJdCdzIDQ6NTUgYW5kIHlvdXIgYm9zcyBqdXN0IGNhbWUgaW50byB5b3VyIGN1YmljbGUgdG8gdGVsbCB5b3UgdGhhdCBoZSBoYXMgYSBtZWV0aW5nIGF0IDggYW0gdG8gZGlzY3VzcyBuZXcgYW50aS1wb3ZlcnR5IHN0cmF0ZWdpZXMgaW4gdGhlIGZpY3Rpb25hbCBjb3VudHJ5IG9mIFBvcnRsYW5kaWEuIEhlIGhhbmRzIHlvdSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCBhc2tzIGZvciBhIHBvdmVydHkgcHJvZmlsZS4gT2gsIGFuZCBoZSBoYXMgYSB0ZW5uaXMgZ2FtZSBpbiAyMCBtaW51dGVzLCBzbyBjb3VsZCB5b3UgaW5jbHVkZSBzb21lIHBvbGljeSByZWNvbW1lbmRhdGlvbnMgYW5kIGhhdmUgdGhlIHJlcG9ydCBvbiBoaXMgZGVzayBieSB0aGUgbW9ybmluZz8NCg0KICAgIFRoZSBwYXBlciBoZSBoYW5kcyB5b3Ugc2F5czoNCg0KICAgIFBvcnRsYW5kaWEgaXMgYSBzbWFsbCwgcG9vciBjb3VudHJ5IHdoZXJlIHRoZSBwZW9wbGUgYXJlIGRpdmlkZWQgaW50byBmb3VyIGVxdWFsIHNpemVkIGdyb3VwcyBjb25zaXN0aW5nIG9mIDEwMDAgcGVvcGxlIGVhY2guIE9uZSBncm91cCBlYXJucyBcJDEwMCBhIHllYXIsIG9uZSBlYXJucyBcJDUwMCBhIHllYXIsIG9uZSBlYXJucyBcJDkwMCBhIHllYXIsIGFuZCB0aGUgZmluYWwgZ3JvdXAgZWFybnMgXCQxNTAwIGEgeWVhci4gVGhlIHBvdmVydHkgbGluZSBpcyBzZXQgYXQgXCQxMDAwLiBXZSBoYXZlIGEgYnVkZ2V0IG9mIFwkMzAwLDAwMCBmb3IgcG92ZXJ0eVwNCiAgICBhbGxldmlhdGlvbi4NCg0KICAgIDMuMSBQbGVhc2UgY2FsY3VsYXRlIHRoZSBIZWFkIENvdW50IFJhdGlvLCBhbmQgSW5jb21lIEdhcCBSYXRpbyBmb3IgdGhpcyBjb3VudHJ5LiAoSW5jbHVkZSBjb2RlLCBidXQgdGhpcyBjb3VsZCBqdXN0IGJlIHNpbXBsZSBjYWxjdWxhdGlvbnMuKQ0KDQogICAgMyBncm91cHMgb25seSB3aXRoIGluY29tZSBcJDEwMCBhIHllYXIsIFwkNTAwIGEgeWVhciwgYW5kIFwkOTAwIGEgeWVhci4NCg0KYGBge3J9DQoNCkhlYWRfQ291bnRfUmF0aW9fUG9ydGxhbmRpYTwtICgzMDAwLzQwMDApDQpIZWFkX0NvdW50X1JhdGlvX1BvcnRsYW5kaWENCg0KcDwtIDEwMDANCnE8LTMwMDANCg0KSW5jb21lX0dhcF9SYXRpbyA8LSAoKChwLTEwMCkvcCoxMDAwKyhwLTUwMCkvcCoxMDAwKyhwLTkwMCkvcCoxMDAwKS9xKQ0KSW5jb21lX0dhcF9SYXRpbw0KDQpuZXdfaGVhZF9jb3VudF9yYXRpbyA8LSAoMTAwMCs2MDApLzQwMDANCnZpZXcobmV3X2hlYWRfY291bnRfcmF0aW8pDQoNCmBgYA0KDQogICAgMy4yIFRoZSBXb3JsZCBCYW5rXCdzIHBvbGljeSBpcyB0byBtaW5pbWl6ZSBoZWFkIGNvdW50IHJhdGlvLiBXaGF0IHdpbGwgeW91ciByZWNvbW1lbmRhdGlvbiBiZT8gV2hhdCB3aWxsIHRoZSBuZXcgaGVhZCBjb3VudCByYXRpbyBiZT8gKEluY2x1ZGUgY29kZSkNCg0KSSB3aWxsIHB1cnBvc2UgdG8gcmVkdWNlIHRoZSBpbmNvbWUgZnJvbSB0aGUgMTUwMCBoaWdoIGluY29tZSBncm91cCwgd2UgY2FuIGhpZ2hlciB0aGVpciB0YXgsIGFuZCBldmVuIGhhdmUgdGF4IGN1dCBmb3IgdGhlIGxvd2VyIGluY29tZSBncm91cCwgd2l0aCB0aGVtIGxvd2VyaW5nIHRoZWlyIGluY29tZSwgV2UgY2FuIGhhdmUgYSBiZXR0ZXIgYXNzZXQgYWxsb2NhdGlvbiwgd2UgY2FuIG5hcnJvd2VyIGluY29tZSBnYXAuIHNvIHRoZSBuZXcgaGVhZCBjb3VudCByYXRpbyB3aWxsIGJlICgxMDAwKzYwMCkvNDAwMD0wLjQNCg0KYGBge1J9DQoNCm5ld19oZWFkX2NvdW50X3JhdGlvIDwtICgxMDAwKzYwMCkvNDAwMA0KDQpuZXdfaGVhZF9jb3VudF9yYXRpbw0KDQpgYGANCg0KICAgIDMuMyBEbyB5b3UgdGhpbmsgdGhpcyBpcyB0aGUgY29ycmVjdCBhcHByb2FjaCB0byBwb3ZlcnR5IGFsbGV2aWF0aW9uPyBXaHkgb3Igd2h5IG5vdD8NCg0KICAgIEkgdGhpbmsgaXQncyBhIGNvcnJlY3QgYXBwcm9hY2ggdG8gcG92ZXJ0eSBhbGxldmlhdGlvbiwgYXMgcmljaCBwZW9wbGUgaXMgbWFraW5nIGEgbG90IG1vcmUgbW9uZXkgdGhhbiB0aGUgcG9vciwgdGhlIHRheCBjdXQgd2UgcHJvdmlkZSB0byBsb3dlciBpbmNvbWUgZ3JvdXAgd2lsbCBoYXZlIG1vcmUgaW5jZW50aXZlcyBmb3IgdGhlbSB0byB3b3JrIGJldHRlciBhbmQgdGhleSBoYXZlIGhpZ2hlciBwb3RlbnRpYWwgdG8gaGF2ZSBoaWdoZXIgaW5jb21lLiBhbmQgaWYgdGhlIHJpY2ggYXJlIHBheWluZyBtb3JlIHRheCwgd2Ugd2lsbCBoYXZlIG1vcmUgbW9uZXkgdG8gcHJvdmlkZSBtb3JlIHN1YnNpZHkgdG8gdGhlIHBvb3IuIHRoZXkgbWF5IGhhdmUgbW9yZSBlZHVjYXRpb24sIGJldHRlciBudXRyaWN0aW9uLiBpdCdzIGEgZ29vZCB3YXkgdG8gcG92ZXJ0eSBhbGxldmlhdGlvbi4gDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQo0LiAgQ2FsY3VsYXRlIFRvdGFsIEZlcnRpbGl0eSBSYXRlcyBUaGUgZmVtYWxlIHBvcHVsYXRpb24gKGluIHRob3VzYW5kcykgYW5kIGJpcnRocyBieSBtb3RoZXIncyBhZ2UgZ3JvdXAgaW4gQnJhemlsIGluIDIwMDUgYXJlIGluIHRoZSB0YWJsZSBiZWxvdy4gKFRoZSBmaXJzdCBjaHVuayBpcyB0aGUgZGF0YSwgdGhlIHNlY29uZCBpcyB0aGVyZSB0byBkaXNwbGF5IGl0IG5pY2VseS4pIFVzZSB0aGlzIGRhdGEgdG8gY2FsY3VsYXRlIHRoZSBUb3RhbCBGZXJ0aWxpdHkgUmF0ZSBmb3IgQnJhemlsIGF0IHRoaXMgdGltZS4NCg0KYGBge3J9DQoNCmZlcnRpbGl0eV9icmF6aWw8LWFzLmRhdGEuZnJhbWUobWF0cml4KGMoODEyOCw4NTMxLDg4NDQsIDgxMTgsIDcyMDksIDY3MTUsIDY0MDksMzY3LjksNTMwLjIsNDQ5LjYsIDI2NC40LCAxMjYuNSwgMzguNCwgNi44KSwgbnJvdz03LCBuY29sPTIsIGRpbW5hbWVzPWxpc3QoYygiMTUtMTkiLCIyMC0yNCIsIjI1LTI5IiwiMzAtMzQiLCIzNS0zOSIsIjQwLTQ0IiwiNDUtNDkiKSwgYygiUG9wdWxhdGlvbl9UaG91c2FuZHMiLCJCaXJ0aHNfVGhvdXNhbmRzIikpKSkNCg0KZmVydGlsaXR5X2JyYXppbA0KDQp0b3RhbF9mZXJ0aWxpdHlfQnJhemlsIDwtIDUqKDM2Ny45LzgxMjgrNTMwLjIvODUzMSs0NDkuNi84ODQ0KzI2NC40LzgxMTgrMTI2LjUvNzIwOSszOC40LzY3MTUrNi44LzY0MDkpDQoNCnRvdGFsX2ZlcnRpbGl0eV9CcmF6aWwNCg0KYGBgDQoNCjUuICBGb3IgdGhpcyBxdWVzdGlvbiwgd2Ugd2lsbCBwcmFjdGljZSByZWFkaW5nIGluIHNvbWUgcmVhbCBkYXRhIGZyb20gdGhlIEh1bWFuIE1vcnRhbGl0eSBEYXRhYmFzZSBhdCBVQyBCZXJrZWxleS4gRm9sbG93IHRoZSBzdGVwcyBpbiB0aGUgbGFiIHRvIGdldCBhbiBhY2NvdW50IGFuZCBhY2Nlc3MgdGhlIGRhdGEgeW91IG5lZWQuIE1vZGlmeSB0aGUgY29kZSBpbiB0aGUgbGFiIGV4ZXJjaXNlIGFib3ZlIHRvIGNhbGN1bGF0ZSBhbmQgdGhlbiBwbG90IHRoZSBBZ2UgU3BlY2lmaWMgTW9ydGFsaXR5IFJhdGVzIGZvciBhIHNpbmdsZSB5ZWFyIGZvciBhIGNvdW50cnkgb3RoZXIgdGhhbiB0aGUgVVMuIChOb3RlOiBUaGUgbGlzdCBvZiBjb3VudHJpZXMgaXMgaGVyZSA8aHR0cHM6Ly93d3cubW9ydGFsaXR5Lm9yZy9EYXRhL0RhdGFBdmFpbGFiaWxpdHk+LiBUaGV5IGFyZSBtb3N0bHkgd2VzdGVybiBjb3VudHJpZXMsIGFuZCBJIHJlY29tbWVuZCBwaWNraW5nIGEgU2NhbmRpbmF2aWFuIGNvdW50cnkgdG8gZ2V0IGEgbG9uZyBhbmQgbW9yZSBpbnRlcmVzdGluZyB0aW1lIHNlcmllcy4pDQoNCkhpbnQ6IFJhdGhlciB0aGFuIGFnZ3JlZ2F0aW5nIG92ZXIgYWxsIGRlYXRocywgeW91IGFyZSBnb2luZyB0byBmaWx0ZXIgdGhlIGRhdGEgZm9yIG9uZSB5ZWFyIG9ubHksIHRoZW4gY2FsY3VsYXRlIEFTTVIgZm9yIHRoYXQgeWVhci4NCg0KLS0tDQpUaGUgY291bnRyeSBJIGNob29zZSBpcyBmcm9tIFVLUiwgd2UgY2FuIHNlZSB0aGUgc3VtbWFyeSBmb3IgdGhlIG1vcnRhbGl0eSB0aGF0cyBnb3VwIGJ5IHllYXJzLiANCiAgICBZZWFyICAgICAgIENydWRlX0RlYXRocyAgIA0KIE1pbi4gICA6MTk1OSAgIE1pbi4gICA6Mjk2MTcxICANCiAxc3QgUXUuOjE5NzIgICAxc3QgUXUuOjQ0NjE5NSAgDQogTWVkaWFuIDoxOTg2ICAgTWVkaWFuIDo2MDA1OTAgIA0KIE1lYW4gICA6MTk4NiAgIE1lYW4gICA6NTc5OTQ4ICANCiAzcmQgUXUuOjIwMDAgICAzcmQgUXUuOjc0MDQxNiAgDQogTWF4LiAgIDoyMDEzICAgTWF4LiAgIDo3OTI1ODcgDQotLS0NCg0KYGBge1J9DQpiaXJ0aHNfYnlfeWVhciA8LSByZWFkSE1Ed2ViKENOVFJZPSJVS1IiLCBpdGVtPSJCaXJ0aHMiLCB1c2VybmFtZT0ia25veG1AdXcuZWR1IiwgcGFzc3dvcmQ9IlBhdDAxZWRkISIgKQ0KDQptb3J0YWxpdHlfYnlfeWVhcl9hZ2UgPC0gcmVhZEhNRHdlYihDTlRSWT0iVUtSIiwgaXRlbT0iRGVhdGhzXzF4MSIsIHVzZXJuYW1lPSJrbm94bUB1dy5lZHUiLCBwYXNzd29yZD0iUGF0MDFlZGQhIikNCg0KaGVhZChtb3J0YWxpdHlfYnlfeWVhcl9hZ2UpDQogDQptb3J0YWxpdHlfYnlfeWVhcjwtbW9ydGFsaXR5X2J5X3llYXJfYWdlICU+JQ0KICBncm91cF9ieShZZWFyKSAlPiUNCiAgc3VtbWFyaXNlKENydWRlX0RlYXRocyA9c3VtKFRvdGFsKSkNCg0KaGVhZChtb3J0YWxpdHlfYnlfeWVhcikNCg0Kc3VtbWFyeShtb3J0YWxpdHlfYnlfeWVhcikNCiANCmBgYA0KDQpgYGB7Un0NCg0KbW9ydGFsaXR5X2J5X3llYXJfYWdlXzE5NjAgPC0gZmlsdGVyKG1vcnRhbGl0eV9ieV95ZWFyX2FnZSwgWWVhcj09MTk2MCkNCg0KaGVhZChtb3J0YWxpdHlfYnlfeWVhcl9hZ2VfMTk2MCkNCg0KbW9ydGFsaXR5X2J5X3llYXJfYWdlIDwtIHJlYWRITUR3ZWIoQ05UUlk9IlVLUiIsIGl0ZW09IkRlYXRoc18xeDEiLCB1c2VybmFtZT0ia25veG1AdXcuZWR1IiwgcGFzc3dvcmQ9IlBhdDAxZWRkISIpDQoNCm1vcnRhbGl0eV9ieV95ZWFyIDwtIGFnZ3JlZ2F0ZSh4PW1vcnRhbGl0eV9ieV95ZWFyX2FnZVszOjVdLCBieT1saXN0KFllYXI9bW9ydGFsaXR5X2J5X3llYXJfYWdlJFllYXIpLCBGVU49c3VtKSANCg0KbW9ydGFsaXR5X2J5X3llYXIgPC0gZHBseXI6OnNlbGVjdChtb3J0YWxpdHlfYnlfeWVhciwgWWVhciwgVG90YWwpDQoNCm1vcnRhbGl0eV9ieV95ZWFyIDwtIGRwbHlyOjpyZW5hbWUobW9ydGFsaXR5X2J5X3llYXIsIENydWRlX0RlYXRocz1Ub3RhbCkgIA0KDQpoZWFkKG1vcnRhbGl0eV9ieV95ZWFyKQ0KYGBgDQoNCmBgYHtyfQ0KDQpBU01SX0NISU5BPC1tYXRyaXgoYygyMiw2MCwgMTgsOCwzLDQzKSwgbnJvdz0zLCBuY29sPTIsIGRpbW5hbWVzPWxpc3QoYygiPDE1IiwiMTUtNjQiLCI+NjQiKSwgICBjKCJQb3BfUGVyY2VudCIsIkRlYXRoc19wZXJfMTAwMCIpKSkNCg0KcG9wdWxhdGlvbl9ieV95ZWFyX2FnZSA8LSByZWFkSE1Ed2ViKENOVFJZPSJVS1IiLCBpdGVtPSJQb3B1bGF0aW9uIiwgdXNlcm5hbWU9Imtub3htQHV3LmVkdSIsIHBhc3N3b3JkPSJQYXQwMWVkZCEiKSANCg0KcG9wX2J5X3llYXI8LXBvcHVsYXRpb25fYnlfeWVhcl9hZ2UgJT4lDQogIGdyb3VwX2J5KFllYXIpICU+JQ0KICBzdW1tYXJpc2UoUG9wdWxhdGlvbl9Ub3RhbCA9c3VtKFRvdGFsMSkpDQoNCmhlYWQocG9wX2J5X3llYXIpDQoNCmBgYA0KDQpgYGB7cn0NCg0KbWFsdGh1cyA8LSBtZXJnZShwb3BfYnlfeWVhciwgbW9ydGFsaXR5X2J5X3llYXIsIGJ5PSdZZWFyJywgYWxsPUZBTFNFKSANCm1hbHRodXMgPC0gbWVyZ2UobWFsdGh1cywgYmlydGhzX2J5X3llYXIsIGJ5PSdZZWFyJykNCg0KYmlydGhzX2J5X3llYXIgPC0gcmVhZEhNRHdlYihDTlRSWT0iVUtSIiwgaXRlbT0iQmlydGhzIiwgdXNlcm5hbWU9Imtub3htQHV3LmVkdSIsIHBhc3N3b3JkPSJQYXQwMWVkZCEiKSANCmJpcnRoc19ieV95ZWFyIDwtIGRwbHlyOjpzZWxlY3QoYmlydGhzX2J5X3llYXIsIFllYXIsIFRvdGFsKQ0KYmlydGhzX2J5X3llYXIgPC0gZHBseXI6OnJlbmFtZShiaXJ0aHNfYnlfeWVhciwgQ3J1ZGVfQmlydGhzPVRvdGFsKQ0KDQpoZWFkKGJpcnRoc19ieV95ZWFyKQ0KYGBgDQoNCmBgYHtSfQ0KDQpwb3B1bGF0aW9uX2J5X3llYXJfYWdlIDwtIHJlYWRITUR3ZWIoQ05UUlk9IlVLUiIsIGl0ZW09IlBvcHVsYXRpb24iLCB1c2VybmFtZT0ia25veG1AdXcuZWR1IiwgcGFzc3dvcmQ9IlBhdDAxZWRkISIpIA0KDQpwb3BfYnlfeWVhciA8LSBhZ2dyZWdhdGUoeD1wb3B1bGF0aW9uX2J5X3llYXJfYWdlWzQ6OV0sIGJ5PWxpc3QoWWVhcj1wb3B1bGF0aW9uX2J5X3llYXJfYWdlJFllYXIpLCBGVU49c3VtKSANCg0KcG9wX2J5X3llYXIgPC0gYWdncmVnYXRlKHggPSBwb3B1bGF0aW9uX2J5X3llYXJfYWdlWzQ6OV0sIGJ5PWxpc3QoWWVhcj1wb3B1bGF0aW9uX2J5X3llYXJfYWdlJFllYXIpLCBGVU4gPSBzdW0pDQoNCnBvcF9ieV95ZWFyIDwtIGRwbHlyOjpzZWxlY3QocG9wX2J5X3llYXIsIFllYXIsIFRvdGFsMSklPiUNCiAgDQpkcGx5cjo6cmVuYW1lKFBvcHVsYXRpb25fVG90YWw9VG90YWwxKQ0KDQpoZWFkKHBvcF9ieV95ZWFyKQ0KYGBgDQoNCmBgYHtSfQ0KI01lcmdlIGJvdGggQmlydGggZGF0ZSBhbmQgRGVhdGggcmF0ZSBpbnRvIGEgZGF0YSBmcmFtZSBtYWx0aHVzLg0KDQptYWx0aHVzIDwtIG1lcmdlKHBvcF9ieV95ZWFyLCBtb3J0YWxpdHlfYnlfeWVhcl9hZ2VfMTk2MCwgYnk9J1llYXInLCBhbGw9RkFMU0UpDQoNCm1hbHRodXMgPC0gbWVyZ2UocG9wX2J5X3llYXIsIG1vcnRhbGl0eV9ieV95ZWFyLCBieT0nWWVhcicsIGFsbD1GQUxTRSkNCg0KbWFsdGh1cyA8LSBtZXJnZShtYWx0aHVzLCBiaXJ0aHNfYnlfeWVhciwgYnk9J1llYXInLCBhbGwgPSBGQUxTRSkNCg0KbWFsdGh1cyA8LSBtZXJnZShtYWx0aHVzLCBtb3J0YWxpdHlfYnlfeWVhciRDcnVkZV9EZWF0aHMsIGFsbCA9IEZBTFNFKQ0KDQptYWx0aHVzJENCUiA8LSBtYWx0aHVzJENydWRlX0JpcnRocy9tYWx0aHVzJFBvcHVsYXRpb25fVG90YWwNCm1hbHRodXMkQ01SIDwtIG1hbHRodXMkQ3J1ZGVfRGVhdGhzL21hbHRodXMkUG9wdWxhdGlvbl9Ub3RhbA0KDQpoZWFkKG1hbHRodXMpDQoNCmBgYA0KDQpgYGB7Un0NCg0KI1BMT1QgVEhFIEdSQVBIIGZvciAibWFsdGh1cyBQbG90IGZvciBVS1IiDQoNCm1hbHRodXMgJT4lIGdncGxvdChhZXMoeD1DTVIsIHk9IENCUikpK2dlb21fcG9pbnQoKSsgZ2d0aXRsZSgibWFsdGh1cyBQbG90IGZvciBVS1IiKQ0KDQpgYGANCg0KYGBge1J9DQoNCiNwbG90IGEgc21vb3RoZWQgbGluZSBvbiB0aGUgZGF0YQ0KDQptYWx0aHVzICU+JQ0KICBnZ3Bsb3QoYWVzKHg9Q01SLCB5PUNCUikpK2dlb21fcG9pbnQoKStnZW9tX3Ntb290aChtZXRob2Q9bG0sIGZvcm11bGE9IHl+cG9seSh4LDMpKStnZ3RpdGxlKCJNYWx0aHVzIFBsb3QgZm9yIFVLUiB3aXRoIEZpdHRlZCBQb2x5bm9taWFsIikNCg0KYGBgDQoNCjYsIFVzaW5nIHRoZSBkYXRhIHlvdSBkb3dubG9hZGVkIGZvciBwcm9ibGVtIDUsIGNhbGN1bGF0ZSB0aGUgY3J1ZGUgbW9ydGFsaXR5IHJhdGUgZm9yIHRoZSBjb3VudHJ5IGFuZCB5ZWFyIGNob3Nlbi4NCg0KYGBge1J9DQojdGhlIHllYXIgSSBjaG9vc2UgZm9yIFVLUiBpcyAxOTYwDQoNCm1vcnRhbGl0eV9ieV95ZWFyX2FnZV8xOTYwIDwtIGZpbHRlcihtb3J0YWxpdHlfYnlfeWVhcl9hZ2UsIFllYXI9PTE5NjApDQoNCmhlYWQobW9ydGFsaXR5X2J5X3llYXJfYWdlXzE5NjApDQoNCmNydWRlX21fcmF0ZV8xOTYwIDwtIGZpbHRlcihtYWx0aHVzLCBZZWFyPT0xOTYwKQ0KDQojd2UgY2FuIHNlZSB0aGUgQ01SIGZvciAxOTYwIGlzIDAuMDA2OTc0NjAxDQoNCmhlYWQoY3J1ZGVfbV9yYXRlXzE5NjApDQoNCmhlYWQobWFsdGh1cykNCg0KYGBgDQo=