Introduction
This assignment looks at the conceptual understanding of decomposing
time series and forecasting with decomposing. We want to enhance our
conceptual understanding of methods of decomposition and forecasting.
Also want to find the appropriate training size to produce the best
performance.
Data Description
- Month- Month of the year (in numbers. Ex: 1-Jan, 2-Feb…)
- Year- The year it was
- LowTemp- Lowest temperature
- HighTemp- Highest temperature
- WarmestMin- The lowest warm temperature
- ColdestHigh- The highest cold temperature
- AveMin-The average minimum temperature
- AveMax- The average maximum temperature
- meanTemp- The mean temperature
- TotPrecip- The total precipitation
- TotSnow- The total snow
- Max24hrPrecip- The maximum amount of precipitation in 24 hours
Define time series
object
Since this is monthly data, frequency =12 will be used the define the
time series object.
Forecasting with
Decomposing
The following visual representations show the different behaviors of
the two methods of decomposition.
The second model seems to be better at visualizing the trends of the
data. Looking at the decomposition visuals we can see that there is a
maximum around 2015 and a minimum around 2018. Looking at the graphs
both look easy to interpret but the second one has a more simple
approach to showing you the trend. The second decomposing model has a
more smooth way of showing us the data compared to the first.
We next perform error analysis.
Error comparison between forecast results with different sample
sizes
| n.144 |
0.1555844 |
0.0001788 |
| n.109 |
0.1603712 |
0.0001822 |
| n. 73 |
0.1732466 |
0.0001917 |
| n. 48 |
0.1981214 |
0.0002088 |

Now we can see the values for the MSE and MAPE. We used the same
algorithm with 4 different sample sizes and compared the resulting
accuracy measures. The sample size of 144 gives the lowest MSE and
lowest MAPE. This means that it is the best model due to its lower
error. It seems like the n=144 model outperforms the rest of the models.
We are confident that the larger sample size (n=144) will be a good
representative of the data. We do not have any concerns of things like
over fitting since we have a large sample size.
Conclusion
We just showed the initial time series, the decomposition of the time
series, and the error analysis. We concluded which graph we thought was
better and then talked about the best value for n that gave us the
lowest error which was n=144.
LS0tCnRpdGxlOiAiU2VhdHRsZSBXZWF0aGVyIFRpbWUgU2VyaWVzIgphdXRob3I6ICJSeWFuIExlYm8iCmRhdGU6ICIyMDI0LTExLTI3IgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwogICAgZmlnX3dpZHRoOiA0CiAgICBmaWdfY2FwdGlvbjogeWVzCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcwogICAgdG9jX2NvbGxhcHNlZDogeWVzCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGNvZGVfZG93bmxvYWQ6IHllcwogICAgc21vb3RoX3Njcm9sbDogeWVzCiAgICB0aGVtZTogbHVtZW4KICB3b3JkX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgZmlnX2NhcHRpb246IHllcwogICAga2VlcF9tZDogeWVzCiAgcGRmX2RvY3VtZW50OgogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgZmlnX2NhcHRpb246IHllcwogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIGZpZ193aWR0aDogMwogICAgZmlnX2hlaWdodDogMwplZGl0b3Jfb3B0aW9uczoKICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lCnNsd2F5c19hbGxvd19odG1sOiB0cnVlCi0tLQoKYGBgez1odG1sfQoKPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCi8qIENhc2NhZGluZyBTdHlsZSBTaGVldHMgKENTUykgaXMgYSBzdHlsZXNoZWV0IGxhbmd1YWdlIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHByZXNlbnRhdGlvbiBvZiBhIGRvY3VtZW50IHdyaXR0ZW4gaW4gSFRNTCBvciBYTUwuIGl0IGlzIGEgc2ltcGxlIG1lY2hhbmlzbSBmb3IgYWRkaW5nIHN0eWxlIChlLmcuLCBmb250cywgY29sb3JzLCBzcGFjaW5nKSB0byBXZWIgZG9jdW1lbnRzLiAqLwoKaDEudGl0bGUgeyAgLyogVGl0bGUgLSBmb250IHNwZWNpZmljYXRpb25zIG9mIHRoZSByZXBvcnQgdGl0bGUgKi8KICBmb250LXNpemU6IDI0cHg7CiAgY29sb3I6IERhcmtSZWQ7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGZvbnQtZmFtaWx5OiAiR2lsbCBTYW5zIiwgc2Fucy1zZXJpZjsKfQpoNC5hdXRob3IgeyAvKiBIZWFkZXIgNCAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgZm9yIGF1dGhvcnMgICovCiAgZm9udC1zaXplOiAyMHB4OwogIGZvbnQtZmFtaWx5OiBzeXN0ZW0tdWk7CiAgY29sb3I6IERhcmtSZWQ7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9Cmg0LmRhdGUgeyAvKiBIZWFkZXIgNCAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgZm9yIHRoZSBkYXRlICAqLwogIGZvbnQtc2l6ZTogMThweDsKICBmb250LWZhbWlseTogc3lzdGVtLXVpOwogIGNvbG9yOiBEYXJrQmx1ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KaDEgeyAvKiBIZWFkZXIgMSAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgZm9yIGxldmVsIDEgc2VjdGlvbiB0aXRsZSAgKi8KICAgIGZvbnQtc2l6ZTogMjJweDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IG5hdnk7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KaDIgeyAvKiBIZWFkZXIgMiAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgZm9yIGxldmVsIDIgc2VjdGlvbiB0aXRsZSAqLwogICAgZm9udC1zaXplOiAyMHB4OwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogbmF2eTsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCmgzIHsgLyogSGVhZGVyIDMgLSBmb250IHNwZWNpZmljYXRpb25zIG9mIGxldmVsIDMgc2VjdGlvbiB0aXRsZSAgKi8KICAgIGZvbnQtc2l6ZTogMThweDsKICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOwogICAgY29sb3I6IG5hdnk7CiAgICB0ZXh0LWFsaWduOiBsZWZ0Owp9CgpoNCB7IC8qIEhlYWRlciA0IC0gZm9udCBzcGVjaWZpY2F0aW9ucyBvZiBsZXZlbCA0IHNlY3Rpb24gdGl0bGUgICovCiAgICBmb250LXNpemU6IDE4cHg7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBkYXJrcmVkOwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKYm9keSB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0KCi5oaWdobGlnaHRtZSB7IGJhY2tncm91bmQtY29sb3I6eWVsbG93OyB9CgpwIHsgYmFja2dyb3VuZC1jb2xvcjp3aGl0ZTsgfQoKPC9zdHlsZT4KYGBgCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQojIERldGVjdCwgaW5zdGFsbCwgYW5kIGxvYWQgcGFja2FnZXMgaWYgbmVlZGVkLgppZiAoIXJlcXVpcmUoImtuaXRyIikpIHsKICAgaW5zdGFsbC5wYWNrYWdlcygia25pdHIiKQogICBsaWJyYXJ5KGtuaXRyKQp9CmlmICghcmVxdWlyZSgibGVhZmxldCIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoImxlYWZsZXQiKQogICBsaWJyYXJ5KGxlYWZsZXQpCn0KaWYgKCFyZXF1aXJlKCJFbnZTdGF0cyIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoIkVudlN0YXRzIikKICAgbGlicmFyeShFbnZTdGF0cykKfQppZiAoIXJlcXVpcmUoIk1BU1MiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJNQVNTIikKICAgbGlicmFyeShNQVNTKQp9CmlmICghcmVxdWlyZSgicGh5dG9vbHMiKSkgewogICBpbnN0YWxsLnBhY2thZ2VzKCJwaHl0b29scyIpCiAgIGxpYnJhcnkocGh5dG9vbHMpCn0KaWYgKCFyZXF1aXJlKCJtbGJlbmNoIikpIHsKICAgaW5zdGFsbC5wYWNrYWdlcygibWxiZW5jaCIpCiAgIGxpYnJhcnkobWxiZW5jaCkKfQppZiAoIXJlcXVpcmUoInBhbmRlciIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoInBhbmRlciIpCiAgIGxpYnJhcnkocGFuZGVyKQp9CmlmICghcmVxdWlyZSgiSVN3UiIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoIklTd1IiKQogICBsaWJyYXJ5KElTd1IpCn0KaWYgKCFyZXF1aXJlKCJnZ3Bsb3QyIikpIHsKICAgaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpCiAgIGxpYnJhcnkoZ2dwbG90MikKfQppZiAoIXJlcXVpcmUoImZvcmVjYXN0IikpIHsKICAgaW5zdGFsbC5wYWNrYWdlcygiZm9yZWNhc3QiKQogICBsaWJyYXJ5KGZvcmVjYXN0KQp9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsICAKICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgPSBGQUxTRSwgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsICAKICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBUUlVFLCAgCiAgICAgICAgICAgICAgICAgICBjb21tZW50ID0gRkFMU0UgICAKICAgICAgICAgICAgICAgICAgICAgICkgICAKYGBgCgpgYGB7cn0Kc193ZWF0aCA8LSByZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL1J5YW5MZWJvL1NUQS0zMjEvcmVmcy9oZWFkcy9tYWluL3NlYXR0bGVfd2VhdGhlci5jc3YiLCBoZWFkZXIgPSBUUlVFKQpuLnJvdyA9IGRpbShzX3dlYXRoKVsxXQpkYXRhLnNlYS53ZWF0aCA9IHNfd2VhdGhbKG4ucm93LTE1MCk6bi5yb3csIF0KYGBgCgojIEludHJvZHVjdGlvbgpUaGlzIGFzc2lnbm1lbnQgbG9va3MgYXQgdGhlIGNvbmNlcHR1YWwgdW5kZXJzdGFuZGluZyBvZiBkZWNvbXBvc2luZyB0aW1lIHNlcmllcyBhbmQgZm9yZWNhc3Rpbmcgd2l0aCBkZWNvbXBvc2luZy4gV2Ugd2FudCB0byBlbmhhbmNlIG91ciBjb25jZXB0dWFsIHVuZGVyc3RhbmRpbmcgb2YgbWV0aG9kcyBvZiBkZWNvbXBvc2l0aW9uIGFuZCBmb3JlY2FzdGluZy4gQWxzbyB3YW50IHRvIGZpbmQgdGhlIGFwcHJvcHJpYXRlIHRyYWluaW5nIHNpemUgdG8gcHJvZHVjZSB0aGUgYmVzdCBwZXJmb3JtYW5jZS4KCiMjIERhdGEgRGVzY3JpcHRpb24KCiogTW9udGgtIE1vbnRoIG9mIHRoZSB5ZWFyIChpbiBudW1iZXJzLiBFeDogMS1KYW4sIDItRmViLi4uKQoqIFllYXItIFRoZSB5ZWFyIGl0IHdhcwoqIExvd1RlbXAtIExvd2VzdCB0ZW1wZXJhdHVyZSAKKiBIaWdoVGVtcC0gSGlnaGVzdCB0ZW1wZXJhdHVyZSAKKiBXYXJtZXN0TWluLSBUaGUgbG93ZXN0IHdhcm0gdGVtcGVyYXR1cmUgCiogQ29sZGVzdEhpZ2gtIFRoZSBoaWdoZXN0IGNvbGQgdGVtcGVyYXR1cmUgCiogQXZlTWluLVRoZSBhdmVyYWdlIG1pbmltdW0gdGVtcGVyYXR1cmUKKiBBdmVNYXgtIFRoZSBhdmVyYWdlIG1heGltdW0gdGVtcGVyYXR1cmUKKiBtZWFuVGVtcC0gVGhlIG1lYW4gdGVtcGVyYXR1cmUKKiBUb3RQcmVjaXAtIFRoZSB0b3RhbCBwcmVjaXBpdGF0aW9uCiogVG90U25vdy0gVGhlIHRvdGFsIHNub3cKKiBNYXgyNGhyUHJlY2lwLSBUaGUgbWF4aW11bSBhbW91bnQgb2YgcHJlY2lwaXRhdGlvbiBpbiAyNCBob3VycwoKCiMgRGVmaW5lIHRpbWUgc2VyaWVzIG9iamVjdAoKU2luY2UgdGhpcyBpcyBtb250aGx5IGRhdGEsIGZyZXF1ZW5jeSA9MTIgd2lsbCBiZSB1c2VkIHRoZSBkZWZpbmUgdGhlIHRpbWUgc2VyaWVzIG9iamVjdC4KCmBgYHtyICBmaWcuYWxpZ249J2NlbnRlcicsIGZpZy53aWR0aD01LCBmaWcuaGVpZ2h0PSAzLCBmaWcuY2FwPSJVUyBib25kIG1vbnRobHkgcmF0ZXMifQpzZWF3ZWF0aC50cyA9IHRzKGRhdGEuc2VhLndlYXRoWyw5XSwgZnJlcXVlbmN5ID0gMTIsIHN0YXJ0ID0gYygyMDA4LCAxKSkKcGFyKG1hcj1jKDIsMiwyLDIpKQpwbG90KHNlYXdlYXRoLnRzLCBtYWluPSJTZWF0dGxlIE1vbnRobHkgTWVhbiBUZW1wZXJhdHVyZSAiLCB5bGFiPSJNZWFuVGVtcCIsIHhsYWI9InllYXIiKQpgYGAKCiMjIEZvcmVjYXN0aW5nIHdpdGggRGVjb21wb3NpbmcKClRoZSBmb2xsb3dpbmcgdmlzdWFsIHJlcHJlc2VudGF0aW9ucyBzaG93IHRoZSBkaWZmZXJlbnQgYmVoYXZpb3JzIG9mIHRoZSB0d28gbWV0aG9kcyBvZiBkZWNvbXBvc2l0aW9uLgoKYGBge3IgZmlnLmFsaWduPSdjZW50ZXInLCBmaWcuY2FwPSAiQ2xhc3NpY2FsIGRlY29tcG9zaXRpb24gb2YgYWRkaXRpdmUgdGltZSBzZXJpZXMiLCBmaWcud2lkdGg9NiwgZmlnLmhlaWdodD00fQpzZWEuZGVjb21wID0gZGVjb21wb3NlKHNlYXdlYXRoLnRzKQpwYXIobWFyPWMoMiwyLDIsMikpCnBsb3Qoc2VhLmRlY29tcCwgeGxhYj0iIikKYGBgCgoKCmBgYHtyIGZpZy5hbGlnbj0nY2VudGVyJywgZmlnLmNhcD0gIlNUTCBkZWNvbXBvc2l0aW9uIG9mIGFkZGl0aXZlIHRpbWUgc2VyaWVzIiwgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9NH0Kc2VhMi5kZWNvbXA9c3RsKHNlYXdlYXRoLnRzLCBzLndpbmRvdyA9IDEyKQpwYXIobWFyPWMoMiwyLDIsMikpCnBsb3Qoc2VhMi5kZWNvbXApCmBgYAoKVGhlIHNlY29uZCBtb2RlbCBzZWVtcyB0byBiZSBiZXR0ZXIgYXQgdmlzdWFsaXppbmcgdGhlIHRyZW5kcyBvZiB0aGUgZGF0YS4gTG9va2luZyBhdCB0aGUgZGVjb21wb3NpdGlvbiB2aXN1YWxzIHdlIGNhbiBzZWUgdGhhdCB0aGVyZSBpcyBhIG1heGltdW0gYXJvdW5kIDIwMTUgYW5kIGEgbWluaW11bSBhcm91bmQgMjAxOC4gTG9va2luZyBhdCB0aGUgZ3JhcGhzIGJvdGggbG9vayBlYXN5IHRvIGludGVycHJldCBidXQgdGhlIHNlY29uZCBvbmUgaGFzIGEgbW9yZSBzaW1wbGUgYXBwcm9hY2ggdG8gc2hvd2luZyB5b3UgdGhlIHRyZW5kLiBUaGUgc2Vjb25kIGRlY29tcG9zaW5nIG1vZGVsIGhhcyBhIG1vcmUgc21vb3RoIHdheSBvZiBzaG93aW5nIHVzIHRoZSBkYXRhIGNvbXBhcmVkIHRvIHRoZSBmaXJzdC4gCgoKYGBge3J9CmluaS5kYXRhID0gZGF0YS5zZWEud2VhdGhbLDJdCm4wID0gbGVuZ3RoKGluaS5kYXRhKQojIwp0cmFpbi5kYXRhMDEgPSBkYXRhLnNlYS53ZWF0aFsxOihuMC03KSwgMl0KdHJhaW4uZGF0YTAyID0gZGF0YS5zZWEud2VhdGhbMzc6KG4wLTcpLCAyXQp0cmFpbi5kYXRhMDMgPSBkYXRhLnNlYS53ZWF0aFs3MzoobjAtNyksIDJdCnRyYWluLmRhdGEwNCA9IGRhdGEuc2VhLndlYXRoWzk3OihuMC03KSwgMl0KIyMgbGFzdCA3IG9ic2VydmF0aW9ucwp0ZXN0LmRhdGEgPSBkYXRhLnNlYS53ZWF0aFsobjAtNik6bjAsMl0KIyMKdHJhaW4wMS50cyA9IHRzKHRyYWluLmRhdGEwMSwgZnJlcXVlbmN5ID0gMTIsIHN0YXJ0ID0gYygyMDA4LCAxKSkKdHJhaW4wMi50cyA9IHRzKHRyYWluLmRhdGEwMiwgZnJlcXVlbmN5ID0gMTIsIHN0YXJ0ID0gYygyMDExLCAxKSkKdHJhaW4wMy50cyA9IHRzKHRyYWluLmRhdGEwMywgZnJlcXVlbmN5ID0gMTIsIHN0YXJ0ID0gYygyMDE0LCAxKSkKdHJhaW4wNC50cyA9IHRzKHRyYWluLmRhdGEwNCwgZnJlcXVlbmN5ID0gMTIsIHN0YXJ0ID0gYygyMDE2LCAxKSkKIyMKc3RsMDEgPSBzdGwodHJhaW4wMS50cywgcy53aW5kb3cgPSAxMikKc3RsMDIgPSBzdGwodHJhaW4wMi50cywgcy53aW5kb3cgPSAxMikKc3RsMDMgPSBzdGwodHJhaW4wMy50cywgcy53aW5kb3cgPSAxMikKc3RsMDQgPSBzdGwodHJhaW4wNC50cywgcy53aW5kb3cgPSAxMikKIyMgRm9yZWNhc3Qgd2l0aCBkZWNvbXBvc2luZwpmY3N0MDEgPSBmb3JlY2FzdChzdGwwMSxoPTcsIG1ldGhvZD0ibmFpdmUiKQpmY3N0MDIgPSBmb3JlY2FzdChzdGwwMixoPTcsIG1ldGhvZD0ibmFpdmUiKQpmY3N0MDMgPSBmb3JlY2FzdChzdGwwMyxoPTcsIG1ldGhvZD0ibmFpdmUiKQpmY3N0MDQgPSBmb3JlY2FzdChzdGwwNCxoPTcsIG1ldGhvZD0ibmFpdmUiKQpgYGAKCldlIG5leHQgcGVyZm9ybSBlcnJvciBhbmFseXNpcy4KCmBgYHtyfQojIyBUbyBjb21wYXJlIGRpZmZlcmVudCBlcnJvcnMsIHdlIHdpbGwgbm90IHVzZSB0aGUgcGVyY2VudGFnZSBmb3IgTUFQRQpQRTAxPSh0ZXN0LmRhdGEtZmNzdDAxJG1lYW4pL2Zjc3QwMSRtZWFuClBFMDI9KHRlc3QuZGF0YS1mY3N0MDIkbWVhbikvZmNzdDAyJG1lYW4KUEUwMz0odGVzdC5kYXRhLWZjc3QwMyRtZWFuKS9mY3N0MDMkbWVhbgpQRTA0PSh0ZXN0LmRhdGEtZmNzdDA0JG1lYW4pL2Zjc3QwNCRtZWFuCiMjIwpNQVBFMSA9IG1lYW4oYWJzKFBFMDEpKQpNQVBFMiA9IG1lYW4oYWJzKFBFMDIpKQpNQVBFMyA9IG1lYW4oYWJzKFBFMDMpKQpNQVBFNCA9IG1lYW4oYWJzKFBFMDQpKQojIyMKRTE9dGVzdC5kYXRhLWZjc3QwMSRtZWFuCkUyPXRlc3QuZGF0YS1mY3N0MDIkbWVhbgpFMz10ZXN0LmRhdGEtZmNzdDAzJG1lYW4KRTQ9dGVzdC5kYXRhLWZjc3QwNCRtZWFuCiMjCk1TRTE9bWVhbihFMV4yKQpNU0UyPW1lYW4oRTJeMikKTVNFMz1tZWFuKEUzXjIpCk1TRTQ9bWVhbihFNF4yKQojIyMKTVNFPWMoTVNFMSwgTVNFMiwgTVNFMywgTVNFNCkKTUFQRT1jKE1BUEUxLCBNQVBFMiwgTUFQRTMsIE1BUEU0KQphY2N1cmFjeT1jYmluZChNU0U9TVNFLCBNQVBFPU1BUEUpCnJvdy5uYW1lcyhhY2N1cmFjeSk9Yygibi4xNDQiLCAibi4xMDkiLCAibi4gNzMiLCAibi4gNDgiKQprYWJsZShhY2N1cmFjeSwgY2FwdGlvbj0iRXJyb3IgY29tcGFyaXNvbiBiZXR3ZWVuIGZvcmVjYXN0IHJlc3VsdHMgd2l0aCBkaWZmZXJlbnQgc2FtcGxlIHNpemVzIikKYGBgCgoKCmBgYHtyfQpwYXIobWZyb3c9YygxLDIpKQpwbG90KDE6NCwgTVNFLCB0eXBlPSJiIiwgY29sPSJkYXJrcmVkIiwgeWxhYj0iRXJyb3IiLCB4bGFiPSIiLAogICAKICAgICBtYWluPSJNU0UiLCBheGVzPUZBTFNFKQpsYWJzPWMoIm49MTQ0IiwgIm49MTA5IiwgIm49NzMiLCAibj00OCIpCmF4aXMoMSwgYXQ9MTo0LCBsYWJlbD1sYWJzKQpheGlzKDIpCgp0ZXh0KDE6NCwgTUFQRSswLjAzLCBhcy5jaGFyYWN0ZXIocm91bmQoTUFQRSw0KSksIGNvbD0iYmx1ZSIsIGNleD0wLjcpCnRleHQoMTo0LCBNU0UtMC4wMywgYXMuY2hhcmFjdGVyKHJvdW5kKE1TRSw0KSksIGNvbD0iZGFya3JlZCIsIGNleD0wLjcpCmxlZ2VuZCgxLjUsIDAuNjMsIGMoIk1TRSIsICJNQVBFIiksIGNvbD1jKCJkYXJrcmVkIiwiYmx1ZSIpLCBsdHk9MSwgYnR5PSJuIiwgY2V4PTAuNykKCnBsb3QoMTo0LCBNQVBFLCB0eXBlPSJiIiwgY29sPSJkYXJrcmVkIiwgeWxhYj0iRXJyb3IiLCB4bGFiPSIiLAogIAogICAgIG1haW49Ik1BUEUiLCBheGVzPUZBTFNFKQpsYWJzPWMoIm49MTQ0IiwgIm49MTA5IiwgIm49NzMiLCAibj00OCIpCmF4aXMoMSwgYXQ9MTo0LCBsYWJlbD1sYWJzKQpheGlzKDIpCgpgYGAKCk5vdyB3ZSBjYW4gc2VlIHRoZSB2YWx1ZXMgZm9yIHRoZSBNU0UgYW5kIE1BUEUuIFdlIHVzZWQgdGhlIHNhbWUgYWxnb3JpdGhtIHdpdGggNCBkaWZmZXJlbnQgc2FtcGxlIHNpemVzIGFuZCBjb21wYXJlZCB0aGUgcmVzdWx0aW5nIGFjY3VyYWN5IG1lYXN1cmVzLiBUaGUgc2FtcGxlIHNpemUgb2YgMTQ0IGdpdmVzIHRoZSBsb3dlc3QgTVNFIGFuZCBsb3dlc3QgTUFQRS4gVGhpcyBtZWFucyB0aGF0IGl0IGlzIHRoZSBiZXN0IG1vZGVsIGR1ZSB0byBpdHMgbG93ZXIgZXJyb3IuIEl0IHNlZW1zIGxpa2UgdGhlIG49MTQ0IG1vZGVsIG91dHBlcmZvcm1zIHRoZSByZXN0IG9mIHRoZSBtb2RlbHMuIFdlIGFyZSBjb25maWRlbnQgdGhhdCB0aGUgbGFyZ2VyIHNhbXBsZSBzaXplIChuPTE0NCkgd2lsbCBiZSBhIGdvb2QgcmVwcmVzZW50YXRpdmUgb2YgdGhlIGRhdGEuIFdlIGRvIG5vdCBoYXZlIGFueSBjb25jZXJucyBvZiB0aGluZ3MgbGlrZSBvdmVyIGZpdHRpbmcgc2luY2Ugd2UgaGF2ZSBhIGxhcmdlIHNhbXBsZSBzaXplLgoKIyBDb25jbHVzaW9uCgpXZSBqdXN0IHNob3dlZCB0aGUgaW5pdGlhbCB0aW1lIHNlcmllcywgdGhlIGRlY29tcG9zaXRpb24gb2YgdGhlIHRpbWUgc2VyaWVzLCBhbmQgdGhlIGVycm9yIGFuYWx5c2lzLiBXZSBjb25jbHVkZWQgd2hpY2ggZ3JhcGggd2UgdGhvdWdodCB3YXMgYmV0dGVyIGFuZCB0aGVuIHRhbGtlZCBhYm91dCB0aGUgYmVzdCB2YWx1ZSBmb3IgbiB0aGF0IGdhdmUgdXMgdGhlIGxvd2VzdCBlcnJvciB3aGljaCB3YXMgbj0xNDQuCgoKCgo=