2.10 Question No. 1

  1. Use the help function to explore what the series gold, woolyrnq and gas represent.

ANSWER:

For question one, the author is asking to use exploratory data techniques to get insight and visualize each time series.

Gold

We can confirm that the Gold dataset is a Time Series dataset by applying the class method. The result “ts” confirms that the dataset is a time series.

## [1] "ts"

The function help gives more details about the time series.

## starting httpd help server ... done

Below is the output from the help documentation on the series:

Gold

Daily morning gold prices
Description
Daily morning gold prices in US dollars. 1 January 1985- 31 March 1989.

Usage
gold
Format
Time series data

The “summary” function gives us basic descriptive statistics for the time series including the number of null values (“NA’s”) which is 34.

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##   285.0   337.7   403.2   392.5   443.7   593.7      34

The “head” and “tail” functions show us the firt and last six entries as well as the frequency of the time series. In this case, it’s a monthly time series.

## Time Series:
## Start = 1 
## End = 6 
## Frequency = 1 
## [1] 306.25 299.50 303.45 296.75 304.40 298.35
## Time Series:
## Start = 1103 
## End = 1108 
## Frequency = 1 
## [1]     NA     NA 391.25 383.30 384.00 382.30



The same exploratory analysis is performed on the other time series.

woolyrnq

## [1] "ts"

Quarterly production of woollen yarn in Australia
Description
Quarterly production of woollen yarn in Australia: tonnes. Mar 1965 – Sep 1994.

Usage
woolyrnq
Format
Time series data

Source Time Series Data Library. https://pkg.yangzhuoranyang.com/tsdl/

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    3324    4882    5466    5658    6646    7819
##      Qtr1 Qtr2 Qtr3 Qtr4
## 1965 6172 6709 6633 6660
## 1966 6786 6800
##      Qtr1 Qtr2 Qtr3 Qtr4
## 1993      4588 5309 4732
## 1994 4837 6135 6396

We see with this time series that it’s a quarterly time series from 1965 though the 3rd quarter of 1994.



gas

## [1] "ts"

Australian monthly gas production
Description
Australian monthly gas production: 1956–1995.

Usage
gas
Format
Time series data

Source
Australian Bureau of Statistics.

##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1646    2675   16788   21415   38629   66600
##       Jan  Feb  Mar  Apr  May  Jun
## 1956 1709 1646 1794 1878 2173 2321
##        Mar   Apr   May   Jun   Jul   Aug
## 1995 46287 49013 56624 61739 66600 60054

We see that the time series is monthly from 1956 to 1995.

Next, we use autoplot() to plot each of these in separate plots.

GOLD:

WOOLYRNQ:

GAS:

b. What is the frequency of each series? Hint: apply the frequency() function

The frequency of the gold,woolyrnq,and gas time serieses is daily, quarterly, and monthly respectively.

## [1] 1
## [1] 4
## [1] 12

c. Use which.max() to spot the outlier in the gold series. Which observation was it?

## [1] "The observation at: 770 shows that the maximum price of gold (outlier) is: 593.7"

2.10 Question No. 2

For this question, the author tasks us with loading data from a csv file and converting it into a time series using the function, “ts”.

Here, the frequency argument of the ts function is set to “4” for quarterly analysis.

When we plot the series with autoplot and set the “facets” argument to “TRUE”, the plot shows different scales on the Y-axis for the Sales, AdBudget, and GDP data.

When the facets argument is set to FALSE, there’s a common y-axis for all three datasets.

2.10 Question No. 3

For this question, the author tasks us to read in an excel file containing Australian retail data.

The autoplot shows monthly liquor sales from April 1982 to December 2013. The plot shows an increasing trend in sales along with a strong seasonality component which grows in strength.

The ggseasonplot and ggsubseriesplot show the seasonality of liquor sales. The earlier years starting from 1982 are at the bottom of the plot with the later years at the top. The graph shows the yearly increase in sales and towards the last two months of the year, sales tend to spike.

Setting the polar attribute to TRUE for the ggseasonplot further deomonstrates the seasonal nature of liquor sales with a spike in December sales

Over the next two plots, the gglagplot and the ggACF plot, we see how observations are plotted against earlier observations or lags against itself. Lag 12 supports the finding that sales spike in the 12 month which is shown in the ggacf plot.

2.10 Question No. 6

Sales of one-family houses

Sales of one-family houses
Description
Monthly sales of new one-family houses sold in the USA since 1973.

Usage
hsales
Format
Time series data

Source
Makridakis, Wheelwright and Hyndman (1998) Forecasting: methods and applications, John Wiley & Sons: New York. Chapter 3.

##      Jan Feb Mar Apr May Jun
## 1973  55  60  68  63  65  61
##      Jun Jul Aug Sep Oct Nov
## 1995  64  64  63  55  54  44
##         Peak     Trough
## 1 1973-11-01 1975-03-01
## 2 1980-01-01 1980-07-01
## 3 1981-07-01 1982-11-01
## 4 1990-07-01 1991-03-01

Analysis of Sales of one-family house

The above plots show that there is no trend for the sales of one family houses from 1973 to 1995. However, there are cyclic and seasonal trends. We can see the downward trends for sales matching downturns in the economy. From the seasonal plots, we can clearly see that sales are strongest in the months of March, April, and May. Finally from the lag plots, we can see that the most recent prior period (lag=1) is strongly correlated to the current period. Lags that are further out, esp. lags at 18 to 21, are not as well correlated. This shows that housing sales have recency bias.

Accidential Deaths in USA

Accidental deaths in USA
Description
Monthly accidental deaths in USA.

Usage
usdeaths
Format
Time series data

Source
Makridakis, Wheelwright and Hyndman (1998) Forecasting: methods and applications, John Wiley & Sons: New York. Exercises 2.3 and 2.4.

##        Jan   Feb   Mar   Apr   May   Jun
## 1973  9007  8106  8928  9137 10017 10826
##        Jul   Aug   Sep   Oct   Nov   Dec
## 1978 10484  9827  9110  9070  8633  9240
## [1] 12

Analysis of Accidental deaths in USA

The strongest signal in the data is a seasonal trend for accidental deaths. Intuition tells us that since these are the summer months for most of the USA, more people are on the roads driving which is probably the leading cause of accidental deaths. There does not appear to be any cyclical or other trends.

Quarterly clay brick production

Quarterly clay brick production
Description
Australian quarterly clay brick production: 1956–1994.

Usage
bricksq
Format
Time series data

Source
Makridakis, Wheelwright and Hyndman (1998) Forecasting: methods and applications, John Wiley & Sons: New York. Chapter 1 and Exercise 2.3.

##      Qtr1 Qtr2 Qtr3 Qtr4
## 1956  189  204  208  197
## 1957  187  214
##      Qtr1 Qtr2 Qtr3 Qtr4
## 1993       462  476  443
## 1994  421  472  494
## [1] 4

Analysis of Quarterly clay brick production

There is a long term growth trend for clay brick production from 1956 to 1994 along with a slight seasonal trend which shows higher production in quarters 2 and 3. The most interesting item is that there is a strong auto correlation with prior periods of time. A 20 period lag is still correlated above .5.

Annual average sunspot area (1875-2015)

Annual average sunspot area (1875-2015)
Description
Annual averages of the daily sunspot areas (in units of millionths of a hemisphere) for the full sun. Sunspots are magnetic regions that appear as dark spots on the surface of the sun. The Royal Greenwich Observatory compiled daily sunspot observations from May 1874 to 1976. Later data are from the US Air Force and the US National Oceanic and Atmospheric Administration. The data have been calibrated to be consistent across the whole history of observations.

Format
Annual time series of class ts.

Source
NASA

## Time Series:
## Start = 1875 
## End = 1880 
## Frequency = 1 
## [1] 213.13333 109.28333  92.85833  22.21667  36.33333 446.75000
## [1] "ts"
## Time Series:
## Start = 2010 
## End = 2015 
## Frequency = 1 
## [1]  214.2917  749.5667  796.8833  860.7750 1252.1500  618.8083
## [1] 1

Analysis of Annual average sunspot area (1875-2015)

Since the data is collected on an annual basis, there is no seasonal component to it. There is no trend, but there is a cycle in the data. It seems as though in odd numbered years, there is more sunspot activity. There also seems to be negative correlations between lags.

US finished motor gasoline product supplied

US finished motor gasoline product supplied.
Description
Weekly data beginning 2 February 1991, ending 20 January 2017. Units are “million barrels per day”.

Format
Time series object of class ts.

Source
US Energy Information Administration.

## Time Series:
## Start = 1991.1 
## End = 1991.19582477755 
## Frequency = 52.1785714285714 
## [1] 6.621 6.433 6.582 7.224 6.875 6.947
## Time Series:
## Start = 2016.95352498289 
## End = 2017.04934976044 
## Frequency = 52.1785714285714 
## [1] 9.269 9.278 8.465 8.470 8.069 8.039
## [1] 52.17857

Analysis of US finished motor gasoline product supplied

There is an increasing trend in the US finished motor gasoline product supplied from 1991 to 2017. The seasonality trend shows an uptick in the middle of a year during the summer months and lower in the winter months. Perhaps the most important item is the very strong auto correlation between the lags.

LS0tDQp0aXRsZTogIkNVTlkgREFUQSA2MjQgU3ByaW5nIDIwMjEgSFcxIg0KYXV0aG9yOiAiSm9obiBLLiBIYW5jb2NrIg0KZGF0ZTogIjIvMTEvMjAyMSINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IHNob3cNCiAgICBoaWdobGlnaHQ6IHB5Z21lbnRzDQogICAgbnVtYmVyX3NlY3Rpb25zOiBubw0KICAgIHRoZW1lOiBmbGF0bHkNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogIHBkZl9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeSgnZnBwMicpDQpsaWJyYXJ5KHN0cmluZ3IpIA0KbGlicmFyeSh0aWR5dmVyc2UpIA0KbGlicmFyeShIbWlzYykNCmRhdGEoImdvbGQiKQ0KZGF0YSgid29vbHlybnEiKQ0KZGF0YSgiZ2FzIikNCg0KYGBgDQoNCg0KIyMgMi4xMCBRdWVzdGlvbiBOby4gMQ0KDQphLiBVc2UgdGhlIGhlbHAgZnVuY3Rpb24gdG8gZXhwbG9yZSB3aGF0IHRoZSBzZXJpZXMgZ29sZCwgd29vbHlybnEgYW5kIGdhcyByZXByZXNlbnQuDQoNCjxpPkFOU1dFUjo8L2k+DQoNCkZvciBxdWVzdGlvbiBvbmUsIHRoZSBhdXRob3IgaXMgYXNraW5nIHRvIHVzZSBleHBsb3JhdG9yeSBkYXRhIHRlY2huaXF1ZXMgdG8gZ2V0IGluc2lnaHQgYW5kIHZpc3VhbGl6ZSBlYWNoIHRpbWUgc2VyaWVzLiANCg0KDQo8Yj5Hb2xkPC9iPg0KDQpXZSBjYW4gY29uZmlybSB0aGF0IHRoZSBHb2xkIGRhdGFzZXQgaXMgYSBUaW1lIFNlcmllcyBkYXRhc2V0IGJ5IGFwcGx5aW5nIHRoZSBjbGFzcyBtZXRob2QuICBUaGUgcmVzdWx0ICJ0cyIgY29uZmlybXMgdGhhdCB0aGUgZGF0YXNldCBpcyBhIHRpbWUgc2VyaWVzLg0KDQpgYGB7cn0NCmNsYXNzKGdvbGQpDQpgYGANCg0KVGhlIGZ1bmN0aW9uIGhlbHAgZ2l2ZXMgbW9yZSBkZXRhaWxzIGFib3V0IHRoZSB0aW1lIHNlcmllcy4NCg0KYGBge3J9DQpoZWxwKGdvbGQpDQpgYGANCg0KQmVsb3cgaXMgdGhlIG91dHB1dCBmcm9tIHRoZSBoZWxwIGRvY3VtZW50YXRpb24gb24gdGhlIHNlcmllczoNCg0KPGI+R29sZDwvYj4NCg0KRGFpbHkgbW9ybmluZyBnb2xkIHByaWNlczxicj4NCkRlc2NyaXB0aW9uPGJyPg0KRGFpbHkgbW9ybmluZyBnb2xkIHByaWNlcyBpbiBVUyBkb2xsYXJzLiAxIEphbnVhcnkgMTk4NS0gMzEgTWFyY2ggMTk4OS48YnI+DQoNClVzYWdlPGJyPg0KZ29sZDxicj4NCkZvcm1hdDxicj4NClRpbWUgc2VyaWVzIGRhdGENCg0KDQpUaGUgInN1bW1hcnkiIGZ1bmN0aW9uIGdpdmVzIHVzIGJhc2ljIGRlc2NyaXB0aXZlIHN0YXRpc3RpY3MgZm9yIHRoZSB0aW1lIHNlcmllcyBpbmNsdWRpbmcgdGhlIG51bWJlciBvZiBudWxsIHZhbHVlcyAoIk5BJ3MiKSB3aGljaCBpcyAzNC4gIA0KDQpgYGB7cn0NCnN1bW1hcnkoZ29sZCkNCmBgYA0KDQoNClRoZSAiaGVhZCIgYW5kICJ0YWlsIiBmdW5jdGlvbnMgc2hvdyB1cyB0aGUgZmlydCBhbmQgbGFzdCBzaXggZW50cmllcyBhcyB3ZWxsIGFzIHRoZSBmcmVxdWVuY3kgb2YgdGhlIHRpbWUgc2VyaWVzLiAgSW4gdGhpcyBjYXNlLCBpdCdzIGEgbW9udGhseSB0aW1lIHNlcmllcy4gDQoNCmBgYHtyfQ0KaGVhZChnb2xkKQ0KYGBgDQoNCmBgYHtyfQ0KdGFpbChnb2xkKQ0KYGBgDQoNCg0KPGJyPg0KPGJyPg0KDQpUaGUgc2FtZSBleHBsb3JhdG9yeSBhbmFseXNpcyBpcyBwZXJmb3JtZWQgb24gdGhlIG90aGVyIHRpbWUgc2VyaWVzLg0KDQoNCjxiPndvb2x5cm5xPC9iPg0KDQpgYGB7cn0NCmNsYXNzKHdvb2x5cm5xKQ0KYGBgDQoNCmBgYHtyfQ0KaGVscCh3b29seXJucSkNCmBgYA0KUXVhcnRlcmx5IHByb2R1Y3Rpb24gb2Ygd29vbGxlbiB5YXJuIGluIEF1c3RyYWxpYTxicj4NCkRlc2NyaXB0aW9uPGJyPg0KUXVhcnRlcmx5IHByb2R1Y3Rpb24gb2Ygd29vbGxlbiB5YXJuIGluIEF1c3RyYWxpYTogdG9ubmVzLiBNYXIgMTk2NSDigJMgU2VwIDE5OTQuPGJyPg0KDQpVc2FnZTxicj4NCndvb2x5cm5xPGJyPg0KRm9ybWF0PGJyPg0KVGltZSBzZXJpZXMgZGF0YTxicj4NCg0KU291cmNlDQpUaW1lIFNlcmllcyBEYXRhIExpYnJhcnkuIGh0dHBzOi8vcGtnLnlhbmd6aHVvcmFueWFuZy5jb20vdHNkbC8NCg0KDQoNCg0KYGBge3J9DQpzdW1tYXJ5KHdvb2x5cm5xKQ0KYGBgDQoNCmBgYHtyfQ0KaGVhZCh3b29seXJucSkNCmBgYA0KDQpgYGB7cn0NCnRhaWwod29vbHlybnEpDQpgYGANCg0KV2Ugc2VlIHdpdGggdGhpcyB0aW1lIHNlcmllcyB0aGF0IGl0J3MgYSBxdWFydGVybHkgdGltZSBzZXJpZXMgZnJvbSAxOTY1IHRob3VnaCB0aGUgM3JkIHF1YXJ0ZXIgb2YgMTk5NC4NCg0KPGJyPg0KPGJyPg0KDQoNCjxiPmdhczwvYj4NCg0KYGBge3J9DQpjbGFzcyhnYXMpDQpgYGANCg0KDQpgYGB7cn0NCmhlbHAoZ2FzKQ0KYGBgDQoNCkF1c3RyYWxpYW4gbW9udGhseSBnYXMgcHJvZHVjdGlvbjxicj4NCkRlc2NyaXB0aW9uPGJyPg0KQXVzdHJhbGlhbiBtb250aGx5IGdhcyBwcm9kdWN0aW9uOiAxOTU24oCTMTk5NS48YnI+DQoNClVzYWdlPGJyPg0KZ2FzPGJyPg0KRm9ybWF0PGJyPg0KVGltZSBzZXJpZXMgZGF0YTxicj4NCg0KU291cmNlPGJyPg0KQXVzdHJhbGlhbiBCdXJlYXUgb2YgU3RhdGlzdGljcy4NCg0KDQpgYGB7cn0NCnN1bW1hcnkoZ2FzKQ0KYGBgDQoNCg0KYGBge3J9DQpoZWFkKGdhcykNCmBgYA0KDQpgYGB7cn0NCnRhaWwoZ2FzKQ0KYGBgDQoNCldlIHNlZSB0aGF0IHRoZSB0aW1lIHNlcmllcyBpcyBtb250aGx5IGZyb20gMTk1NiB0byAxOTk1Lg0KDQoNCk5leHQsIHdlIHVzZSBhdXRvcGxvdCgpIHRvIHBsb3QgZWFjaCBvZiB0aGVzZSBpbiBzZXBhcmF0ZSBwbG90cy4NCg0KDQo8Yj5HT0xEOjwvYj4NCg0KYGBge3J9DQphdXRvcGxvdChnb2xkKSArDQogICAgZ2d0aXRsZSgiRGFpbHkgTW9ybmluZyBHb2xkIFByaWNlcyIpICsNCiAgICB4bGFiKCJEYXRlIFJhbmdlOiAxLzEvMTk4NSB0byAzLzMxLzE5ODkiKSArDQogICAgeWxhYigiUHJpY2VzIGluIFVTIERvbGxhcnMgJCIpDQpgYGANCg0KDQo8Yj5XT09MWVJOUTo8L2I+DQoNCmBgYHtyfQ0KYXV0b3Bsb3Qod29vbHlybnEpICsNCiAgICBnZ3RpdGxlKCJRdWFydGVybHkgcHJvZHVjdGlvbiBvZiB3b29sbGVuIHlhcm4gaW4gQXVzdHJhbGlhIikgKw0KICAgIHhsYWIoIk1hciAxOTY1IHRvIFNlcCAxOTk0IikgKw0KICAgIHlsYWIoIldvb2xsZW4gWWFybiBpbiBUb25uZXMuIikNCmBgYA0KDQoNCjxiPkdBUzo8L2I+DQoNCmBgYHtyfQ0KYXV0b3Bsb3QoZ2FzKSArDQogICAgZ2d0aXRsZShzdHJfdG9fdGl0bGUoIkF1c3RyYWxpYW4gbW9udGhseSBnYXMgcHJvZHVjdGlvbiIpKSArDQogICAgeGxhYihzdHJfdG9fdGl0bGUoIm1vbnRobHkgZ2FzIHByb2R1Y3Rpb246IDE5NTbigJMxOTk1IikpICsNCiAgICB5bGFiKCJVbml0cy4iKQ0KYGBgDQoNCg0KIyMjIyBiLiBXaGF0IGlzIHRoZSBmcmVxdWVuY3kgb2YgZWFjaCBzZXJpZXM/IEhpbnQ6IGFwcGx5IHRoZSBmcmVxdWVuY3koKSBmdW5jdGlvbg0KDQpUaGUgZnJlcXVlbmN5IG9mIHRoZSBnb2xkLHdvb2x5cm5xLGFuZCBnYXMgdGltZSBzZXJpZXNlcyBpcyBkYWlseSwgcXVhcnRlcmx5LCBhbmQgbW9udGhseSByZXNwZWN0aXZlbHkuIA0KDQpgYGB7cn0NCmZyZXF1ZW5jeShnb2xkKQ0KYGBgDQoNCg0KYGBge3J9DQpmcmVxdWVuY3kod29vbHlybnEpDQpgYGANCg0KYGBge3J9DQpmcmVxdWVuY3koZ2FzKQ0KYGBgDQoNCg0KIyMjIyBjLiBVc2Ugd2hpY2gubWF4KCkgdG8gc3BvdCB0aGUgb3V0bGllciBpbiB0aGUgZ29sZCBzZXJpZXMuIFdoaWNoIG9ic2VydmF0aW9uIHdhcyBpdD8NCg0KYGBge3J9DQpvYnNlcnZhdGlvbiA9IHdoaWNoLm1heChnb2xkKQ0KbWF4X3ByaWNlIDwtIGdvbGRbYyhvYnNlcnZhdGlvbildDQoNCnByaW50KHBhc3RlMCgiVGhlIG9ic2VydmF0aW9uIGF0OiAiLCAgb2JzZXJ2YXRpb24sICIgc2hvd3MgdGhhdCB0aGUgbWF4aW11bSBwcmljZSBvZiBnb2xkIChvdXRsaWVyKSBpczogIiwgIG1heF9wcmljZSAgKSkNCg0KDQpgYGANCg0KDQoNCg0KIyMgMi4xMCBRdWVzdGlvbiBOby4gMg0KDQpGb3IgdGhpcyBxdWVzdGlvbiwgdGhlIGF1dGhvciB0YXNrcyB1cyB3aXRoIGxvYWRpbmcgZGF0YSBmcm9tIGEgY3N2IGZpbGUgYW5kIGNvbnZlcnRpbmcgaXQgaW50byBhIHRpbWUgc2VyaWVzIHVzaW5nIHRoZSBmdW5jdGlvbiwgInRzIi4NCg0KDQpgYGB7cn0NCnR1dGUxIDwtIHJlYWQuY3N2KCJ0dXRlMS5jc3YiLCBoZWFkZXI9VFJVRSkNClZpZXcodHV0ZTEpDQpgYGANCg0KSGVyZSwgdGhlIGZyZXF1ZW5jeSBhcmd1bWVudCBvZiB0aGUgdHMgZnVuY3Rpb24gaXMgc2V0IHRvICI0IiBmb3IgcXVhcnRlcmx5IGFuYWx5c2lzLg0KDQpgYGB7cn0NCm15dGltZXNlcmllcyA8LSB0cyh0dXRlMVssLTFdLCBzdGFydD0xOTgxLCBmcmVxdWVuY3k9NCkNCmBgYA0KDQpXaGVuIHdlIHBsb3QgdGhlIHNlcmllcyB3aXRoIGF1dG9wbG90IGFuZCBzZXQgdGhlICJmYWNldHMiIGFyZ3VtZW50IHRvICJUUlVFIiwgdGhlIHBsb3Qgc2hvd3MgZGlmZmVyZW50IHNjYWxlcyBvbiB0aGUgWS1heGlzIGZvciB0aGUgU2FsZXMsIEFkQnVkZ2V0LCBhbmQgR0RQIGRhdGEuIA0KDQpXaGVuIHRoZSBmYWNldHMgYXJndW1lbnQgaXMgc2V0IHRvIEZBTFNFLCB0aGVyZSdzIGEgY29tbW9uIHktYXhpcyBmb3IgYWxsIHRocmVlIGRhdGFzZXRzLg0KDQoNCmBgYHtyfQ0KYXV0b3Bsb3QobXl0aW1lc2VyaWVzLCBmYWNldHM9VFJVRSkNCmBgYA0KDQpgYGB7cn0NCmF1dG9wbG90KG15dGltZXNlcmllcywgZmFjZXRzPUZBTFNFKQ0KYGBgDQoNCg0KDQojIyAyLjEwIFF1ZXN0aW9uIE5vLiAzDQoNCkZvciB0aGlzIHF1ZXN0aW9uLCB0aGUgYXV0aG9yIHRhc2tzIHVzIHRvIHJlYWQgaW4gYW4gZXhjZWwgZmlsZSBjb250YWluaW5nIEF1c3RyYWxpYW4gcmV0YWlsIGRhdGEuICANCg0KYGBge3J9DQpyZXRhaWxkYXRhIDwtIHJlYWR4bDo6cmVhZF9leGNlbCgicmV0YWlsLnhsc3giLCBza2lwPTEpDQpgYGANCg0KYGBge3J9DQpsaXF1b3Jfc2FsZXMgPC0gdHMocmV0YWlsZGF0YVssIkEzMzQ5NDE0UiJdLA0KICBmcmVxdWVuY3k9MTIsIHN0YXJ0PWMoMTk4Miw0KSkNCmBgYA0KDQpUaGUgYXV0b3Bsb3Qgc2hvd3MgbW9udGhseSBsaXF1b3Igc2FsZXMgZnJvbSBBcHJpbCAxOTgyIHRvIERlY2VtYmVyIDIwMTMuICBUaGUgcGxvdCBzaG93cyBhbiBpbmNyZWFzaW5nIHRyZW5kIGluIHNhbGVzIGFsb25nIHdpdGggYSBzdHJvbmcgc2Vhc29uYWxpdHkgY29tcG9uZW50IHdoaWNoIGdyb3dzIGluIHN0cmVuZ3RoLiANCg0KYGBge3J9DQphdXRvcGxvdChsaXF1b3Jfc2FsZXMpICsNCiAgICBnZ3RpdGxlKHN0cl90b190aXRsZSgiVmljdG9yaWEsIEF1c3RyYWxpYSAgbW9udGhseSBsaXF1b3Igc2FsZXMiKSkgKw0KICAgIHhsYWIoIkFwcmlsIDE5ODIgdG8gRGVjZW1iZXIgMjAxMyIpICsNCiAgICB5bGFiKCJVbml0cy4iKQ0KYGBgDQoNClRoZSBnZ3NlYXNvbnBsb3QgYW5kIGdnc3Vic2VyaWVzcGxvdCBzaG93IHRoZSBzZWFzb25hbGl0eSBvZiBsaXF1b3Igc2FsZXMuIFRoZSBlYXJsaWVyIHllYXJzIHN0YXJ0aW5nIGZyb20gMTk4MiBhcmUgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcGxvdCB3aXRoIHRoZSBsYXRlciB5ZWFycyBhdCB0aGUgdG9wLiBUaGUgZ3JhcGggc2hvd3MgdGhlIHllYXJseSBpbmNyZWFzZSBpbiBzYWxlcyBhbmQgdG93YXJkcyB0aGUgbGFzdCB0d28gbW9udGhzIG9mIHRoZSB5ZWFyLCBzYWxlcyB0ZW5kIHRvIHNwaWtlLiANCg0KDQoNCmBgYHtyfQ0KZ2dzZWFzb25wbG90KGxpcXVvcl9zYWxlcykNCmBgYA0KDQoNCg0KDQpgYGB7cn0NCmdnc3Vic2VyaWVzcGxvdChsaXF1b3Jfc2FsZXMpDQpgYGANCg0KU2V0dGluZyB0aGUgcG9sYXIgYXR0cmlidXRlIHRvIFRSVUUgZm9yIHRoZSBnZ3NlYXNvbnBsb3QgZnVydGhlciBkZW9tb25zdHJhdGVzIHRoZSBzZWFzb25hbCBuYXR1cmUgb2YgbGlxdW9yIHNhbGVzIHdpdGggYSBzcGlrZSBpbiBEZWNlbWJlciBzYWxlcw0KDQpgYGB7cn0NCmdnc2Vhc29ucGxvdChsaXF1b3Jfc2FsZXMsIHllYXIubGFiZWxzPUZBTFNFLCBjb250aW51b3VzPVRSVUUsIHBvbGFyID0gVFJVRSkNCmBgYA0KDQoNCk92ZXIgdGhlIG5leHQgdHdvIHBsb3RzLCB0aGUgZ2dsYWdwbG90IGFuZCB0aGUgZ2dBQ0YgcGxvdCwgd2Ugc2VlIGhvdyBvYnNlcnZhdGlvbnMgYXJlIHBsb3R0ZWQgYWdhaW5zdCBlYXJsaWVyIG9ic2VydmF0aW9ucyBvciBsYWdzIGFnYWluc3QgaXRzZWxmLiBMYWcgMTIgc3VwcG9ydHMgdGhlIGZpbmRpbmcgdGhhdCBzYWxlcyBzcGlrZSBpbiB0aGUgMTIgbW9udGggd2hpY2ggaXMgc2hvd24gaW4gdGhlIGdnYWNmIHBsb3QuICAgDQoNCg0KYGBge3J9DQpnZ2xhZ3Bsb3QobGlxdW9yX3NhbGVzKQ0KYGBgDQoNCmBgYHtyfQ0KZ2dBY2YobGlxdW9yX3NhbGVzKQ0KYGBgDQoNCiMjIDIuMTAgUXVlc3Rpb24gTm8uIDYNCg0KIyMjIDx1PjxiPlNhbGVzIG9mIG9uZS1mYW1pbHkgaG91c2VzPC9iPjwvdT4NCg0KYGBge3J9DQpoZWxwKCdoc2FsZXMnKQ0KDQpgYGANCg0KDQpTYWxlcyBvZiBvbmUtZmFtaWx5IGhvdXNlcyA8YnI+DQpEZXNjcmlwdGlvbjxicj4NCk1vbnRobHkgc2FsZXMgb2YgbmV3IG9uZS1mYW1pbHkgaG91c2VzIHNvbGQgaW4gdGhlIFVTQSBzaW5jZSAxOTczLjxicj4NCg0KVXNhZ2U8YnI+DQpoc2FsZXM8YnI+DQpGb3JtYXQ8YnI+DQpUaW1lIHNlcmllcyBkYXRhPGJyPg0KDQpTb3VyY2U8YnI+DQpNYWtyaWRha2lzLCBXaGVlbHdyaWdodCBhbmQgSHluZG1hbiAoMTk5OCkgRm9yZWNhc3Rpbmc6IG1ldGhvZHMgYW5kIGFwcGxpY2F0aW9ucywgSm9obiBXaWxleSAmIFNvbnM6IE5ldyBZb3JrLiBDaGFwdGVyIDMuDQoNCmBgYHtyfQ0KaGVhZChoc2FsZXMpDQpgYGANCg0KYGBge3J9DQp0YWlsKGhzYWxlcykNCmBgYA0KDQoNCmBgYHtyfQ0KcmVjZXNzaW9ucyA9IHJlYWQudGFibGUodGV4dENvbm5lY3Rpb24oDQoiUGVhaywgVHJvdWdoDQoxOTczLTExLTAxLCAxOTc1LTAzLTAxDQoxOTgwLTAxLTAxLCAxOTgwLTA3LTAxDQoxOTgxLTA3LTAxLCAxOTgyLTExLTAxDQoxOTkwLTA3LTAxLCAxOTkxLTAzLTAxIiksIHNlcD0nLCcsDQpjb2xDbGFzc2VzPWMoJ0RhdGUnLCAnRGF0ZScpLCBoZWFkZXI9VFJVRSkNCmBgYA0KDQoNCmBgYHtyfQ0KcmVjZXNzaW9ucw0KYGBgDQoNCg0KYGBge3J9DQphdXRvcGxvdChoc2FsZXMpICsNCiAgICBnZ3RpdGxlKCJVU0EgU2FsZXMgb2YgT25lLUZhbWlseSBIb3VzZXMiKSArDQogICAgeGxhYihzdHJfdG9fdGl0bGUoIm1vbnRobHkgc2FsZXMgZnJvbSAxOTczIHRvIDE5OTYiKSkgKw0KICAgIHlsYWIoIk5vLiBvZiBIb3VzZSBTYWxlcyIpDQoNCg0KYGBgDQoNCg0KDQpgYGB7cn0NCmdnc2Vhc29ucGxvdChoc2FsZXMpDQpgYGANCg0KDQpgYGB7cn0NCmdnc3Vic2VyaWVzcGxvdChoc2FsZXMpDQpgYGANCg0KDQpgYGB7cn0NCmdnbGFncGxvdChoc2FsZXMsIGxhZ3MgPSAyNCApDQpgYGANCg0KDQpgYGB7cn0NCmdnQWNmKGhzYWxlcykNCmBgYA0KDQojIyMjIEFuYWx5c2lzIG9mIFNhbGVzIG9mIG9uZS1mYW1pbHkgaG91c2UNCg0KVGhlIGFib3ZlIHBsb3RzIHNob3cgdGhhdCB0aGVyZSBpcyBubyB0cmVuZCBmb3IgdGhlIHNhbGVzIG9mIG9uZSBmYW1pbHkgaG91c2VzIGZyb20gMTk3MyB0byAxOTk1LiBIb3dldmVyLCB0aGVyZSBhcmUgY3ljbGljIGFuZCBzZWFzb25hbCB0cmVuZHMuIFdlIGNhbiBzZWUgdGhlIGRvd253YXJkIHRyZW5kcyBmb3Igc2FsZXMgbWF0Y2hpbmcgZG93bnR1cm5zIGluIHRoZSBlY29ub215LiBGcm9tIHRoZSBzZWFzb25hbCBwbG90cywgIHdlIGNhbiBjbGVhcmx5IHNlZSB0aGF0IHNhbGVzIGFyZSBzdHJvbmdlc3QgaW4gdGhlIG1vbnRocyBvZiBNYXJjaCwgQXByaWwsIGFuZCBNYXkuICBGaW5hbGx5IGZyb20gdGhlIGxhZyBwbG90cywgd2UgY2FuIHNlZSB0aGF0IHRoZSBtb3N0IHJlY2VudCBwcmlvciBwZXJpb2QgKGxhZz0xKSBpcyBzdHJvbmdseSBjb3JyZWxhdGVkIHRvIHRoZSBjdXJyZW50IHBlcmlvZC4gTGFncyB0aGF0IGFyZSBmdXJ0aGVyIG91dCwgZXNwLiBsYWdzIGF0IDE4IHRvIDIxLCBhcmUgbm90IGFzIHdlbGwgY29ycmVsYXRlZC4gVGhpcyBzaG93cyB0aGF0IGhvdXNpbmcgc2FsZXMgaGF2ZSByZWNlbmN5IGJpYXMuIA0KDQoNCg0KIyMjIDx1PjxiPkFjY2lkZW50aWFsIERlYXRocyBpbiBVU0E8L2I+PC91Pjxicj4NCg0KYGBge3J9DQpoZWxwKCd1c2RlYXRocycpDQoNCmBgYA0KDQpBY2NpZGVudGFsIGRlYXRocyBpbiBVU0EgPGJyPg0KRGVzY3JpcHRpb248YnI+DQpNb250aGx5IGFjY2lkZW50YWwgZGVhdGhzIGluIFVTQS48YnI+DQoNClVzYWdlPGJyPg0KdXNkZWF0aHM8YnI+DQpGb3JtYXQ8YnI+DQpUaW1lIHNlcmllcyBkYXRhPGJyPg0KDQpTb3VyY2U8YnI+DQpNYWtyaWRha2lzLCBXaGVlbHdyaWdodCBhbmQgSHluZG1hbiAoMTk5OCkgRm9yZWNhc3Rpbmc6IG1ldGhvZHMgYW5kIGFwcGxpY2F0aW9ucywgSm9obiBXaWxleSAmIFNvbnM6IE5ldyBZb3JrLiBFeGVyY2lzZXMgMi4zIGFuZCAyLjQuDQoNCmBgYHtyfQ0KaGVhZCh1c2RlYXRocykNCmBgYA0KDQpgYGB7cn0NCnRhaWwodXNkZWF0aHMpDQpgYGANCg0KYGBge3J9DQpmcmVxdWVuY3kodXNkZWF0aHMpDQpgYGANCg0KDQpgYGB7cn0NCmF1dG9wbG90KHVzZGVhdGhzKSArDQogICAgZ2d0aXRsZSgiQWNjaWRlbnRhbCBkZWF0aHMgaW4gdGhlIFVTQSIpICsNCiAgICB4bGFiKCJNb250aGx5IDE5NzMgdDAgMTk3OCIpICsNCiAgICB5bGFiKCJOby4gb2YgQWNjaWRlbnRhbCBEZWF0aHMiKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmdnc2Vhc29ucGxvdCh1c2RlYXRocykNCmBgYA0KDQoNCmBgYHtyfQ0KZ2dzdWJzZXJpZXNwbG90KHVzZGVhdGhzKQ0KYGBgDQoNCg0KYGBge3J9DQpnZ2xhZ3Bsb3QodXNkZWF0aHMsIGxhZ3MgPSAxMikNCmBgYA0KDQoNCmBgYHtyfQ0KZ2dBY2YodXNkZWF0aHMpDQpgYGANCg0KDQojIyMjIEFuYWx5c2lzIG9mIEFjY2lkZW50YWwgZGVhdGhzIGluIFVTQSANCg0KVGhlIHN0cm9uZ2VzdCBzaWduYWwgaW4gdGhlIGRhdGEgaXMgYSBzZWFzb25hbCB0cmVuZCBmb3IgYWNjaWRlbnRhbCBkZWF0aHMuIEludHVpdGlvbiB0ZWxscyB1cyB0aGF0IHNpbmNlIHRoZXNlIGFyZSB0aGUgc3VtbWVyIG1vbnRocyBmb3IgbW9zdCBvZiB0aGUgVVNBLCBtb3JlIHBlb3BsZSBhcmUgb24gdGhlIHJvYWRzIGRyaXZpbmcgd2hpY2ggaXMgcHJvYmFibHkgdGhlIGxlYWRpbmcgY2F1c2Ugb2YgYWNjaWRlbnRhbCBkZWF0aHMuIFRoZXJlIGRvZXMgbm90IGFwcGVhciB0byBiZSBhbnkgY3ljbGljYWwgb3Igb3RoZXIgdHJlbmRzLiANCg0KDQoNCg0KDQojIyMgPHU+PGI+UXVhcnRlcmx5IGNsYXkgYnJpY2sgcHJvZHVjdGlvbjwvYj48L3U+PGJyPg0KDQpgYGB7cn0NCmhlbHAoYnJpY2tzcSkNCg0KYGBgDQoNClF1YXJ0ZXJseSBjbGF5IGJyaWNrIHByb2R1Y3Rpb248YnI+DQpEZXNjcmlwdGlvbjxicj4NCkF1c3RyYWxpYW4gcXVhcnRlcmx5IGNsYXkgYnJpY2sgcHJvZHVjdGlvbjogMTk1NuKAkzE5OTQuPGJyPg0KDQpVc2FnZTxicj4NCmJyaWNrc3E8YnI+DQpGb3JtYXQ8YnI+DQpUaW1lIHNlcmllcyBkYXRhPGJyPg0KDQpTb3VyY2U8YnI+DQpNYWtyaWRha2lzLCBXaGVlbHdyaWdodCBhbmQgSHluZG1hbiAoMTk5OCkgRm9yZWNhc3Rpbmc6IG1ldGhvZHMgYW5kIGFwcGxpY2F0aW9ucywgSm9obiBXaWxleSAmIFNvbnM6IE5ldyBZb3JrLiBDaGFwdGVyIDEgYW5kIEV4ZXJjaXNlIDIuMy4NCg0KYGBge3J9DQpoZWFkKGJyaWNrc3EpDQpgYGANCg0KYGBge3J9DQp0YWlsKGJyaWNrc3EpDQpgYGANCg0KYGBge3J9DQpmcmVxdWVuY3koYnJpY2tzcSkNCmBgYA0KDQoNCmBgYHtyfQ0KYXV0b3Bsb3QoYnJpY2tzcSkgKw0KICAgIGdndGl0bGUoc3RyX3RvX3RpdGxlKCJRdWFydGVybHkgY2xheSBicmljayBwcm9kdWN0aW9uIikpKw0KICAgIHhsYWIoIlF1YXJ0ZXJseSAxOTU2IHRvIDE5OTQiKSArDQogICAgeWxhYigiVW5pdHMiKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmdnc2Vhc29ucGxvdChicmlja3NxKQ0KYGBgDQoNCg0KYGBge3J9DQpnZ3N1YnNlcmllc3Bsb3QoYnJpY2tzcSkNCmBgYA0KDQoNCmBgYHtyfQ0KZ2dsYWdwbG90KGJyaWNrc3EsIGxhZ3MgPSAyMSkNCmBgYA0KDQoNCmBgYHtyfQ0KZ2dBY2YoYnJpY2tzcSkNCmBgYA0KDQojIyMjIEFuYWx5c2lzIG9mIFF1YXJ0ZXJseSBjbGF5IGJyaWNrIHByb2R1Y3Rpb24gDQoNClRoZXJlIGlzIGEgbG9uZyB0ZXJtIGdyb3d0aCB0cmVuZCBmb3IgY2xheSBicmljayBwcm9kdWN0aW9uIGZyb20gMTk1NiB0byAxOTk0IGFsb25nIHdpdGggYSBzbGlnaHQgc2Vhc29uYWwgdHJlbmQgd2hpY2ggc2hvd3MgaGlnaGVyIHByb2R1Y3Rpb24gaW4gcXVhcnRlcnMgMiBhbmQgMy4gIFRoZSBtb3N0IGludGVyZXN0aW5nIGl0ZW0gaXMgdGhhdCB0aGVyZSBpcyBhIHN0cm9uZyBhdXRvIGNvcnJlbGF0aW9uIHdpdGggcHJpb3IgcGVyaW9kcyBvZiB0aW1lLiBBIDIwIHBlcmlvZCBsYWcgaXMgc3RpbGwgY29ycmVsYXRlZCBhYm92ZSAuNS4gIA0KDQoNCg0KDQoNCiMjIyA8dT5Bbm51YWwgYXZlcmFnZSBzdW5zcG90IGFyZWEgKDE4NzUtMjAxNSk8L3U+PGJyPg0KDQpgYGB7cn0NCmhlbHAoc3Vuc3BvdGFyZWEpDQoNCmBgYA0KDQpBbm51YWwgYXZlcmFnZSBzdW5zcG90IGFyZWEgKDE4NzUtMjAxNSkgPGJyPg0KRGVzY3JpcHRpb248YnI+DQpBbm51YWwgYXZlcmFnZXMgb2YgdGhlIGRhaWx5IHN1bnNwb3QgYXJlYXMgKGluIHVuaXRzIG9mIG1pbGxpb250aHMgb2YgYSBoZW1pc3BoZXJlKSBmb3IgdGhlIGZ1bGwgc3VuLiBTdW5zcG90cyBhcmUgbWFnbmV0aWMgcmVnaW9ucyB0aGF0IGFwcGVhciBhcyBkYXJrIHNwb3RzIG9uIHRoZSBzdXJmYWNlIG9mIHRoZSBzdW4uIFRoZSBSb3lhbCBHcmVlbndpY2ggT2JzZXJ2YXRvcnkgY29tcGlsZWQgZGFpbHkgc3Vuc3BvdCBvYnNlcnZhdGlvbnMgZnJvbSBNYXkgMTg3NCB0byAxOTc2LiBMYXRlciBkYXRhIGFyZSBmcm9tIHRoZSBVUyBBaXIgRm9yY2UgYW5kIHRoZSBVUyBOYXRpb25hbCBPY2VhbmljIGFuZCBBdG1vc3BoZXJpYyBBZG1pbmlzdHJhdGlvbi4gVGhlIGRhdGEgaGF2ZSBiZWVuIGNhbGlicmF0ZWQgdG8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIHdob2xlIGhpc3Rvcnkgb2Ygb2JzZXJ2YXRpb25zLjxicj4NCg0KRm9ybWF0PGJyPg0KQW5udWFsIHRpbWUgc2VyaWVzIG9mIGNsYXNzIHRzLjxicj4NCg0KU291cmNlPGJyPg0KTkFTQTxicj4NCg0KYGBge3J9DQpoZWFkKHN1bnNwb3RhcmVhKQ0KYGBgDQoNCmBgYHtyfQ0KY2xhc3Moc3Vuc3BvdGFyZWEpDQpgYGANCg0KDQoNCmBgYHtyfQ0KdGFpbChzdW5zcG90YXJlYSkNCmBgYA0KDQpgYGB7cn0NCmZyZXF1ZW5jeShzdW5zcG90YXJlYSkNCmBgYA0KDQoNCmBgYHtyfQ0KYXV0b3Bsb3Qoc3Vuc3BvdGFyZWEpICsNCiAgICBnZ3RpdGxlKHN0cl90b190aXRsZSgiQW5udWFsIGF2ZXJhZ2Ugc3Vuc3BvdCBhcmVhIikpKw0KICAgIHhsYWIoIjE4NzUgdG8gMjAxMCIpICsNCiAgICB5bGFiKCJVbml0cyIpDQpgYGANCg0KDQoNCmBgYHtyfQ0KI2dnc2Vhc29ucGxvdChzdW5zcG90YXJlYSkNCmBgYA0KDQoNCmBgYHtyfQ0KI2dnc3Vic2VyaWVzcGxvdChzdW5zcG90YXJlYSkNCmBgYA0KDQoNCmBgYHtyfQ0KZ2dsYWdwbG90KHN1bnNwb3RhcmVhKQ0KYGBgDQoNCg0KYGBge3J9DQpnZ0FjZihzdW5zcG90YXJlYSkNCmBgYA0KDQojIyMjIEFuYWx5c2lzIG9mIEFubnVhbCBhdmVyYWdlIHN1bnNwb3QgYXJlYSAoMTg3NS0yMDE1KQ0KDQpTaW5jZSB0aGUgZGF0YSBpcyBjb2xsZWN0ZWQgb24gYW4gYW5udWFsIGJhc2lzLCB0aGVyZSBpcyBubyBzZWFzb25hbCBjb21wb25lbnQgdG8gaXQuIFRoZXJlIGlzIG5vIHRyZW5kLCBidXQgdGhlcmUgaXMgYSBjeWNsZSBpbiB0aGUgZGF0YS4gSXQgc2VlbXMgYXMgdGhvdWdoIGluIG9kZCBudW1iZXJlZCB5ZWFycywgdGhlcmUgaXMgbW9yZSBzdW5zcG90IGFjdGl2aXR5LiBUaGVyZSBhbHNvIHNlZW1zIHRvIGJlIG5lZ2F0aXZlIGNvcnJlbGF0aW9ucyBiZXR3ZWVuIGxhZ3MuDQoNCg0KIyMjIDx1PjxiPlVTIGZpbmlzaGVkIG1vdG9yIGdhc29saW5lIHByb2R1Y3Qgc3VwcGxpZWQ8L2I+PC91Pg0KDQoNCmBgYHtyfQ0KaGVscChnYXNvbGluZSkNCg0KYGBgDQpVUyBmaW5pc2hlZCBtb3RvciBnYXNvbGluZSBwcm9kdWN0IHN1cHBsaWVkLjxicj4NCkRlc2NyaXB0aW9uPGJyPg0KV2Vla2x5IGRhdGEgYmVnaW5uaW5nIDIgRmVicnVhcnkgMTk5MSwgZW5kaW5nIDIwIEphbnVhcnkgMjAxNy4gVW5pdHMgYXJlICJtaWxsaW9uIGJhcnJlbHMgcGVyIGRheSIuPGJyPg0KDQpGb3JtYXQ8YnI+DQpUaW1lIHNlcmllcyBvYmplY3Qgb2YgY2xhc3MgdHMuPGJyPg0KDQpTb3VyY2U8YnI+DQpVUyBFbmVyZ3kgSW5mb3JtYXRpb24gQWRtaW5pc3RyYXRpb24uDQoNCmBgYHtyfQ0KaGVhZChnYXNvbGluZSkNCmBgYA0KDQpgYGB7cn0NCnRhaWwoZ2Fzb2xpbmUpDQpgYGANCg0KYGBge3J9DQpmcmVxdWVuY3koZ2Fzb2xpbmUpDQpgYGANCg0KDQpgYGB7cn0NCmF1dG9wbG90KGdhc29saW5lKSArDQogICAgZ2d0aXRsZShzdHJfdG9fdGl0bGUoIlVTIGZpbmlzaGVkIG1vdG9yIGdhc29saW5lIHByb2R1Y3Qgc3VwcGxpZWQuIikpKw0KICAgIHhsYWIoIldlZWtseSAxOTkxIHRvIDIwMTciKSArDQogICAgeWxhYigiVW5pdHMiKQ0KYGBgDQoNCg0KDQpgYGB7cn0NCmdnc2Vhc29ucGxvdChnYXNvbGluZSkNCmBgYA0KDQoNCmBgYHtyfQ0KI2dnc3Vic2VyaWVzcGxvdChnYXNvbGluZSkNCmBgYA0KDQoNCmBgYHtyfQ0KZ2dsYWdwbG90KGdhc29saW5lKQ0KYGBgDQoNCg0KYGBge3J9DQpnZ0FjZihnYXNvbGluZSwgbGFnLm1heCA9IDUyKQ0KYGBgDQoNCiMjIyMgQW5hbHlzaXMgb2YgVVMgZmluaXNoZWQgbW90b3IgZ2Fzb2xpbmUgcHJvZHVjdCBzdXBwbGllZA0KDQpUaGVyZSBpcyBhbiBpbmNyZWFzaW5nIHRyZW5kIGluIHRoZSBVUyBmaW5pc2hlZCBtb3RvciBnYXNvbGluZSBwcm9kdWN0IHN1cHBsaWVkIGZyb20gMTk5MSB0byAyMDE3LiBUaGUgc2Vhc29uYWxpdHkgdHJlbmQgc2hvd3MgYW4gdXB0aWNrIGluIHRoZSBtaWRkbGUgb2YgYSB5ZWFyIGR1cmluZyB0aGUgc3VtbWVyIG1vbnRocyBhbmQgbG93ZXIgaW4gdGhlIHdpbnRlciBtb250aHMuIFBlcmhhcHMgdGhlIG1vc3QgaW1wb3J0YW50IGl0ZW0gaXMgdGhlIHZlcnkgc3Ryb25nIGF1dG8gY29ycmVsYXRpb24gYmV0d2VlbiB0aGUgbGFncy4gDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==