Introduction Data Science

Profil Mahasiswa - Anindya Kristianingputri
Foto Profil Anindya Kristianingputri

Anindya Kristianingputri

NIM: 52250025

Student Major Data Science

Institut Teknologi Sains Bandung

Dosen: Bakti Siregar, M.Sc., CDS

R Programming Data Science Programming I Introduction Data Science

In this Assigment, I present my responses and personal perspectives on several aspects of data science. The discussion focuses on four main points. First is The purpose of studying data science programming, Second, the reasons why this field is important to learn, Third, the tools that should be understood to develop skills in data science, and last but not least the domain knowledge that interests me the most. Through this Assigment, I aim to share my current understanding of data science.

What is Data Science? (biru·cream)

What is Data Science ?

Data Science is a branch of study that combines computer science, mathematics, and statistics. It includes programming, advanced analysis, artificial intelligence, and machine learning. This helps us to have a deeper understanding of a specific discipline and to uncover insights derived from both structured and unstructured data, which are used for planning and decision-making on related issues.

1 What is the Main Purpose of Data Science Programming ?

What is Data Science? (biru·cream)

The main purpose of learning data science programming is to develop the ability to manage and analyze data efficiently in order to generate meaningful insights. Programming serves as a foundational skill that supports the processes of collecting, cleaning, and analyzing data. Without programming skills, these tasks would be difficult and time-consuming. By learning programming, Us can work with large datasets more effectively, build and test basic machine learning models, and visualize analytical results. In addition, programming knowledge helps learners understand data collection techniques such as web scraping and the importance of data cleaning to ensure accuracy and reliability. Therefore, programming becomes a fundamental tool for build strong competence in data science and prepare for future professional roles in this field.

2 Why Do We Learn about it ?

What is Data Science? (biru·cream)

The reason why we learning data science programming is to develop the ability to manage and analyze data efficiently in order to generate meaningful insights. Programming supports important processes such as collecting, cleaning, and analyzing data, which would otherwise be difficult and time-consuming. By mastering programming skills, we can work with large datasets, build and test basic machine learning models, and visualize results effectively. In addition, understanding programming helps us learn data collection techniques like web scraping and ensures data accuracy through proper cleaning. Therefore, programming is a fundamental skill for building strong competence in data science and preparing for future careers in this field..

3 What Tools to have to expert about ?

Python, R, SQL

Python · R · SQL

Python
Classified as a flexible tool with a large number of users worldwide. Python has a strong focus on machine learning, web development, and data visualization. It is supported by various libraries such as pandas, numpy, and scikit-learn.
  • pandas
  • numpy
  • scikit-learn
R
Known as a tool that excels in statistical analysis and data visualization, as well as being flexible in data manipulation. R is popular for its libraries such as dplyr, ggplot2, and tidyr. Additionally, it is strong for advanced statistical analysis, text mining, and social network analysis.
  • dplyr
  • ggplot2
  • tidyr
SQL
Highly effective for managing and querying relational databases, and supports data cleaning and transformation processes efficiently. SQL excels in processing structured data and managing large datasets. It is also easy to integrate with other programming languages.

4 Give your interest domain knowledge of the data science

What is Data Science? (biru·cream)

A compelling aspect of domain knowledge that I find particularly engaging lies in the intersection of marketing and business, where data science serves as a powerful tool for strategic insight. In this context, data science can identify differences in consumer behavior patterns based on demographic and psychographic characteristics, as well as purchasing trends, to create optimal market segmentation. For example, machine learning can be applied to predict customer churn by analyzing transaction histories and customer interactions, enabling companies to automatically provide targeted special offers to maintain customer loyalty. However, the resulting strategies must be validated through A/B testing to scientifically assess whether the new approach generates a statistically significant impact on key metrics such as conversion rate, thereby leading to well founded and effective strategic decision making.

5 Conclusion

Data Science is an interdisciplinary field that integrates computer science, mathematics, and statistics to analyze both structured and unstructured data in order to generate meaningful insights for decision-making. Programming plays a fundamental role in this process, as it enables efficient data collection, cleaning, analysis, visualization, and the development of basic machine learning models. By mastering programming skills, individuals can manage large datasets effectively and ensure data accuracy and reliability.

Furthermore, the application of data science in marketing and business demonstrates its strategic value, particularly in understanding consumer behavior, optimizing market segmentation, predicting customer churn, and validating strategies through A/B testing. Therefore, programming competence combined with domain knowledge forms a strong foundation for building professional expertise in data science and supporting data-driven strategic decisions.

LS0tDQp0aXRsZTogIkludHJvZHVjdGlvbiBEYXRhIFNjaWVuY2UiICAgICAgICAgICAgIyBNYWluIHRpdGxlIG9mIHRoZSBkb2N1bWVudA0KYXV0aG9yOiAiQW5pbmR5YSBLcmlzdGlhbmluZ3B1dHJpICg1MjI1MDAyNSkiICAgICAgIyBSZXBsYWNlIHdpdGggeW91ciBmdWxsIG5hbWUNCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiICMgQXV0byBkaXNwbGF5cyB0aGUgY3VycmVudCBkYXRlDQpvdXRwdXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICMgT3V0cHV0IHNlY3Rpb24gZGVmaW5lcyB0aGUgZm9ybWF0IGFuZCBsYXlvdXQgDQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOiAgICAgICMgaHR0cHM6Ly9naXRodWIuY29tL2p1YmEvcm1kZm9ybWF0cw0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlICAgICAgICAjIEVtYmVkcyBhbGwgcmVzb3VyY2VzIChDU1MsIEpTLCBpbWFnZXMpIA0KICAgIHRodW1ibmFpbHM6IHRydWUgICAgICAgICAgICAjIERpc3BsYXlzIGltYWdlIHRodW1ibmFpbHMgaW4gdGhlIGRvYw0KICAgIGxpZ2h0Ym94OiB0cnVlICAgICAgICAgICAgICAjIEVuYWJsZXMgY2xpY2sgdG8gZW5sYXJnZSBpbWFnZXMNCiAgICBnYWxsZXJ5OiB0cnVlICAgICAgICAgICAgICAgIyBHcm91cHMgaW1hZ2VzIGludG8gYW4gaW50ZXJhY3RpdmUgZ2FsbGVyeQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZSAgICAgICAjIEF1dG9tYXRpY2FsbHkgbnVtYmVycyBhbGwgc2VjdGlvbnMNCiAgICBsaWJfZGlyOiBsaWJzICAgICAgICAgICAgICAgIyBEaXJlY3Rvcnkgd2hlcmUgSmF2YVNjcmlwdC9DU1MgbGlicmFyaWVzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCIgICAgICAgICAgICMgRGlzcGxheXMgZGF0YSBmcmFtZXMgYXMgaW50ZXJhY3RpdmUgcGFnZWQgDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyIgICAgICAgICMgQWxsb3dzIGZvbGRpbmcvdW5mb2xkaW5nIFIgY29kZSBibG9ja3MgDQogICAgY29kZV9kb3dubG9hZDogeWVzICAgICAgICAgICMgQWRkcyBhIGJ1dHRvbiB0byBkb3dubG9hZCBhbGwgUiBjb2RlDQotLS0NCg0KYGBgez1odG1sfQ0KPHN0eWxlPg0KaDEudGl0bGUgew0KICBmb250LXNpemU6IDQ3cHggIWltcG9ydGFudDsNCiAgZm9udC13ZWlnaHQ6IDgwMDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsICJQYWxhdGlubyBMaW5vdHlwZSIsIHNlcmlmOw0KICBmb250LXN0eWxlOiBpdGFsaWMgIWltcG9ydGFudDsNCiAgbWFyZ2luLWJvdHRvbTogMjBweCAhaW1wb3J0YW50Ow0KICBsaW5lLWhlaWdodDogMS4yOw0KICBwb3NpdGlvbjogcmVsYXRpdmU7DQogIHBhZGRpbmctYm90dG9tOiAxNXB4ICFpbXBvcnRhbnQ7DQp9DQoNCmgxLnRpdGxlOjphZnRlciB7DQogIGNvbnRlbnQ6ICIiOw0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIGJvdHRvbTogMDsNCiAgbGVmdDogNTAlOw0KICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7DQogIHdpZHRoOiAxNTBweDsNCiAgaGVpZ2h0OiAycHg7DQogIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsNCiAgb3BhY2l0eTogMC4zOw0KfQ0KDQoucGVyZmVjdC1jZW50ZXItYm94IHsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBwYWRkaW5nOiAyNXB4IDQwcHggIWltcG9ydGFudDsNCiAgbWFyZ2luOiAyMHB4IGF1dG8gIWltcG9ydGFudDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBkaXNwbGF5OiB0YWJsZTsNCiAgYmFja2dyb3VuZDogd2hpdGU7DQogIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7DQogIGJvcmRlci1yYWRpdXM6IDEycHg7DQogIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLDAsMCwwLjEpOw0KICBtYXgtd2lkdGg6IDUwMHB4Ow0KfQ0KDQoucGVyZmVjdC1jZW50ZXItYm94OjpiZWZvcmUsDQoucGVyZmVjdC1jZW50ZXItYm94OjphZnRlciB7DQogIGNvbnRlbnQ6ICIiOw0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQogIHdpZHRoOiAxOHB4Ow0KICBoZWlnaHQ6IDE4cHg7DQogIGJvcmRlcjogMnB4IHNvbGlkIGJsYWNrOw0KICBvcGFjaXR5OiAwLjM7DQogIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQp9DQoNCi5wZXJmZWN0LWNlbnRlci1ib3g6OmJlZm9yZSB7DQogIHRvcDogOHB4Ow0KICBsZWZ0OiA4cHg7DQogIGJvcmRlci1yaWdodDogbm9uZTsNCiAgYm9yZGVyLWJvdHRvbTogbm9uZTsNCn0NCg0KLnBlcmZlY3QtY2VudGVyLWJveDo6YWZ0ZXIgew0KICBib3R0b206IDhweDsNCiAgcmlnaHQ6IDhweDsNCiAgYm9yZGVyLWxlZnQ6IG5vbmU7DQogIGJvcmRlci10b3A6IG5vbmU7DQp9DQoNCi5wZXJmZWN0LWNlbnRlci1ib3g6aG92ZXI6OmJlZm9yZSwNCi5wZXJmZWN0LWNlbnRlci1ib3g6aG92ZXI6OmFmdGVyIHsNCiAgd2lkdGg6IDIycHg7DQogIGhlaWdodDogMjJweDsNCiAgb3BhY2l0eTogMC41Ow0KfQ0KDQoud2Vlay1udW1iZXIgew0KICBmb250LXNpemU6IDE4cHggIWltcG9ydGFudDsNCiAgZm9udC13ZWlnaHQ6IDcwMDsNCiAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4Ow0KICBtYXJnaW4tYm90dG9tOiA1cHggIWltcG9ydGFudDsNCiAgbGluZS1oZWlnaHQ6IDEuMzsNCn0NCg0KLmFzc2lnbm1lbnQtdGl0bGUgew0KICBmb250LXNpemU6IDE0cHggIWltcG9ydGFudDsNCiAgZm9udC13ZWlnaHQ6IDUwMDsNCiAgcG9zaXRpb246IHJlbGF0aXZlOw0KICBwYWRkaW5nLXRvcDogOHB4ICFpbXBvcnRhbnQ7DQogIG1hcmdpbi10b3A6IDVweCAhaW1wb3J0YW50Ow0KICBsaW5lLWhlaWdodDogMS4zOw0KfQ0KDQouYXNzaWdubWVudC10aXRsZTo6YmVmb3JlIHsNCiAgY29udGVudDogIiI7DQogIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgdG9wOiAwOw0KICBsZWZ0OiA1MCU7DQogIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsNCiAgd2lkdGg6IDkwcHg7DQogIGhlaWdodDogMXB4Ow0KICBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7DQogIG9wYWNpdHk6IDAuMzsNCn0NCg0KLmNvbnRhaW5lciB7DQogIG1hcmdpbjogMCAhaW1wb3J0YW50Ow0KICBwYWRkaW5nOiAyMHB4ICFpbXBvcnRhbnQ7DQp9DQoNCi5jb250ZW50LXdyYXBwZXIgew0KICBkaXNwbGF5OiBmbGV4Ow0KICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOw0KICBnYXA6IDE1cHggIWltcG9ydGFudDsNCiAgYWxpZ24taXRlbXM6IGNlbnRlcjsNCn0NCjwvc3R5bGU+DQpgYGANCg0KYGBgez1odG1sfQ0KPCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJpZCI+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+DQogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPg0KICAgIDx0aXRsZT5Qcm9maWwgTWFoYXNpc3dhIC0gQW5pbmR5YSBLcmlzdGlhbmluZ3B1dHJpPC90aXRsZT4NCiAgICA8c3R5bGU+DQogICAgICAgICogew0KICAgICAgICAgICAgbWFyZ2luOiAwOw0KICAgICAgICAgICAgcGFkZGluZzogMDsNCiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7DQogICAgICAgIH0NCg0KICAgICAgICBib2R5IHsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCBzeXN0ZW0tdWksIHNhbnMtc2VyaWY7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMGMyNDYxIDAlLCAjMWUzNzk5IDUwJSwgIzRhNjliZCAxMDAlKTsNCiAgICAgICAgICAgIGNvbG9yOiAjMzMzOw0KICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsNCiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7DQogICAgICAgIH0NCg0KICAgICAgICAuY29udGFpbmVyIHsNCiAgICAgICAgICAgIG1heC13aWR0aDogOTAwcHg7DQogICAgICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgxMiwgMzYsIDk3LCAwLjMpOw0KICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsNCiAgICAgICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICM0YTY5YmQ7DQogICAgICAgIH0NCg0KICAgICAgICAuaGVhZGVyIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzFlMzc5OSwgIzRhNjliZCk7DQogICAgICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICAgICAgICBwYWRkaW5nOiAzMHB4Ow0KICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgICAgICB9DQoNCiAgICAgICAgLnByb2ZpbGUtY29udGVudCB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7DQogICAgICAgICAgICBnYXA6IDIwcHg7DQogICAgICAgIH0NCg0KICAgICAgICAucGhvdG8tY29udGFpbmVyIHsNCiAgICAgICAgICAgIHdpZHRoOiAxNTBweDsNCiAgICAgICAgICAgIGhlaWdodDogMTUwcHg7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7DQogICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOw0KICAgICAgICAgICAgYm9yZGVyOiA0cHggc29saWQgIzgyY2NkZDsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAxNXB4IHJnYmEoMTMwLCAyMDQsIDIyMSwgMC41KTsNCiAgICAgICAgfQ0KDQogICAgICAgIC5wcm9maWxlLXBob3RvIHsNCiAgICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7DQogICAgICAgIH0NCg0KICAgICAgICAubmFtZSB7DQogICAgICAgICAgICBmb250LXNpemU6IDI4cHg7DQogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4Ow0KICAgICAgICAgICAgY29sb3I6ICNmZmZmZmY7DQogICAgICAgICAgICB0ZXh0LXNoYWRvdzogMXB4IDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjMpOw0KICAgICAgICB9DQoNCiAgICAgICAgLm5pbSB7DQogICAgICAgICAgICBmb250LXNpemU6IDE4cHg7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDEzMCwgMjA0LCAyMjEsIDAuOSk7DQogICAgICAgICAgICBjb2xvcjogIzBjMjQ2MTsNCiAgICAgICAgICAgIHBhZGRpbmc6IDZweCAxNXB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjBweDsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEwcHg7DQogICAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICB9DQoNCiAgICAgICAgLnN0dWR5LWluZm8gew0KICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4Ow0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogNXB4Ow0KICAgICAgICAgICAgY29sb3I6ICNlNmY3ZmY7DQogICAgICAgIH0NCg0KICAgICAgICAuZG9zZW4taW5mbyB7DQogICAgICAgICAgICBmb250LXNpemU6IDE2cHg7DQogICAgICAgICAgICBtYXJnaW4tdG9wOiAxMHB4Ow0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICAgICAgICAgIGNvbG9yOiAjODJjY2RkOw0KICAgICAgICB9DQoNCiAgICAgICAgLnNraWxscy1zZWN0aW9uIHsNCiAgICAgICAgICAgIHBhZGRpbmc6IDQwcHggMzBweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGY4ZmY7DQogICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgICAgICBib3JkZXItdG9wOiAycHggc29saWQgIzRhNjliZDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5za2lsbHMtbGlzdCB7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7DQogICAgICAgICAgICBnYXA6IDIwcHg7DQogICAgICAgIH0NCg0KICAgICAgICAuc2tpbGwtaXRlbSB7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICM0YTY5YmQsICM2YTg5Y2MpOw0KICAgICAgICAgICAgY29sb3I6IHdoaXRlOw0KICAgICAgICAgICAgcGFkZGluZzogMTVweCAzMHB4Ow0KICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogMjVweDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMxZTM3OTk7DQogICAgICAgICAgICBib3gtc2hhZG93OiAwIDNweCA4cHggcmdiYSg3NCwgMTA1LCAxODksIDAuMik7DQogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOw0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsNCiAgICAgICAgICAgIG1pbi13aWR0aDogMTgwcHg7DQogICAgICAgIH0NCg0KICAgICAgICAuc2tpbGwtaXRlbTpob3ZlciB7DQogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCk7DQogICAgICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICMxZTM3OTksICM0YTY5YmQpOw0KICAgICAgICAgICAgYm94LXNoYWRvdzogMCA1cHggMTVweCByZ2JhKDc0LCAxMDUsIDE4OSwgMC4zKTsNCiAgICAgICAgfQ0KDQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgew0KICAgICAgICAgICAgLmhlYWRlciB7DQogICAgICAgICAgICAgICAgcGFkZGluZzogMjVweCAyMHB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAucGhvdG8tY29udGFpbmVyIHsNCiAgICAgICAgICAgICAgICB3aWR0aDogMTMwcHg7DQogICAgICAgICAgICAgICAgaGVpZ2h0OiAxMzBweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLm5hbWUgew0KICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMjRweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLnNraWxsLWl0ZW0gew0KICAgICAgICAgICAgICAgIHBhZGRpbmc6IDEycHggMjVweDsNCiAgICAgICAgICAgICAgICBtaW4td2lkdGg6IDE2MHB4Ow0KICAgICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTVweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA0ODBweCkgew0KICAgICAgICAgICAgYm9keSB7DQogICAgICAgICAgICAgICAgcGFkZGluZzogMTBweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLmhlYWRlciB7DQogICAgICAgICAgICAgICAgcGFkZGluZzogMjBweCAxNXB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAubmFtZSB7DQogICAgICAgICAgICAgICAgZm9udC1zaXplOiAyMnB4Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAubmltIHsNCiAgICAgICAgICAgICAgICBmb250LXNpemU6IDE2cHg7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIC5za2lsbHMtbGlzdCB7DQogICAgICAgICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsNCiAgICAgICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgICAgIGdhcDogMTVweDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLnNraWxsLWl0ZW0gew0KICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgICAgICAgIG1heC13aWR0aDogMjUwcHg7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICA8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICAgICAgPGhlYWRlciBjbGFzcz0iaGVhZGVyIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2ZpbGUtY29udGVudCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGhvdG8tY29udGFpbmVyIj4NCiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9IkQ6L0JhY2t1cCBDL0Rlc2t0b3AvdHVnYXMgc3RhdGlzdGlrYS9wcm9maWxlLnBuZyIgDQogICAgICAgICAgICAgICAgICAgICAgICAgYWx0PSJGb3RvIFByb2ZpbCBBbmluZHlhIEtyaXN0aWFuaW5ncHV0cmkiIA0KICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJwcm9maWxlLXBob3RvIj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9maWxlLWluZm8iPg0KICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9Im5hbWUiPkFuaW5keWEgS3Jpc3RpYW5pbmdwdXRyaTwvaDE+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5pbSI+TklNOiA1MjI1MDAyNTwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdHVkeS1pbmZvIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlN0dWRlbnQgTWFqb3IgRGF0YSBTY2llbmNlPC9wPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHA+SW5zdGl0dXQgVGVrbm9sb2dpIFNhaW5zIEJhbmR1bmc8L3A+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkb3Nlbi1pbmZvIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkRvc2VuOiBCYWt0aSBTaXJlZ2FyLCBNLlNjLiwgQ0RTPC9wPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2hlYWRlcj4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJza2lsbHMtc2VjdGlvbiI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJza2lsbHMtbGlzdCI+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNraWxsLWl0ZW0iPlIgUHJvZ3JhbW1pbmc8L3NwYW4+DQogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNraWxsLWl0ZW0iPkRhdGEgU2NpZW5jZSBQcm9ncmFtbWluZyBJPC9zcGFuPg0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJza2lsbC1pdGVtIj5JbnRyb2R1Y3Rpb24gRGF0YSBTY2llbmNlPC9zcGFuPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0KYGBgDQoNCg0KDQo6Ojp7c3R5bGU9ImJhY2tncm91bmQtY29sb3I6I0ZGRjVFMTsgYm9yZGVyLWxlZnQ6NnB4IHNvbGlkICMxRTkwRkY7IHBhZGRpbmc6MTJweDsgYm9yZGVyLXJhZGl1czo4cHg7IG1hcmdpbjoyMHB4IDA7IHRleHQtYWxpZ246IGp1c3RpZnk7In0NCg0KKipJbiB0aGlzIEFzc2lnbWVudCwgSSBwcmVzZW50IG15IHJlc3BvbnNlcyBhbmQgcGVyc29uYWwgcGVyc3BlY3RpdmVzIG9uIHNldmVyYWwgYXNwZWN0cyBvZiBkYXRhIHNjaWVuY2UuIFRoZSBkaXNjdXNzaW9uIGZvY3VzZXMgb24gZm91ciBtYWluIHBvaW50cy4gIEZpcnN0IGlzIFRoZSBwdXJwb3NlIG9mIHN0dWR5aW5nIGRhdGEgc2NpZW5jZSBwcm9ncmFtbWluZywgU2Vjb25kLCB0aGUgcmVhc29ucyB3aHkgdGhpcyBmaWVsZCBpcyBpbXBvcnRhbnQgdG8gbGVhcm4sIFRoaXJkLCB0aGUgdG9vbHMgdGhhdCBzaG91bGQgYmUgdW5kZXJzdG9vZCB0byBkZXZlbG9wIHNraWxscyBpbiBkYXRhIHNjaWVuY2UsIGFuZCBsYXN0IGJ1dCBub3QgbGVhc3QgdGhlIGRvbWFpbiBrbm93bGVkZ2UgdGhhdCBpbnRlcmVzdHMgbWUgdGhlIG1vc3QuIFRocm91Z2ggdGhpcyBBc3NpZ21lbnQsIEkgYWltIHRvIHNoYXJlIG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiBkYXRhIHNjaWVuY2UuKioNCg0KOjo6DQoNCmBgYHs9aHRtbH0NCjwhRE9DVFlQRSBodG1sPg0KPGh0bWwgbGFuZz0iaWQiPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4NCiAgICA8dGl0bGU+V2hhdCBpcyBEYXRhIFNjaWVuY2U/IChiaXJ1wrdjcmVhbSk8L3RpdGxlPg0KICAgIDxzdHlsZT4NCiAgICAgICAgYm9keSwgaHRtbCB7DQogICAgICAgICAgICBtYXJnaW46IDA7DQogICAgICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7DQogICAgICAgIH0NCiAgICAgICAgLmRhdGEtc2NpZW5jZS10ZWtzIHsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlMmVkZjc7DQogICAgICAgICAgICBjb2xvcjogIzJiNGE2ZjsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2VvcmdpYScsICdUaW1lcyBOZXcgUm9tYW4nLCBzZXJpZjsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMS4zcmVtOw0KICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsNCiAgICAgICAgICAgIHBhZGRpbmc6IDEuOHJlbSAyLjJyZW07DQogICAgICAgICAgICBtYXgtd2lkdGg6IDkwMHB4Ow0KICAgICAgICAgICAgbWFyZ2luOiAwIGF1dG87DQogICAgICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7DQogICAgICAgICAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5Ow0KICAgICAgICB9DQogICAgICAgIC5kYXRhLXNjaWVuY2UtdGVrcyBoMSB7DQogICAgICAgICAgICBtYXJnaW46IDAgMCAwLjVyZW0gMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBmb250LXNpemU6IDIuNHJlbTsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7DQogICAgICAgICAgICBjb2xvcjogIzFmNDk3MzsNCiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7DQogICAgICAgIH0NCiAgICAgICAgLmRhdGEtc2NpZW5jZS10ZWtzIHAgew0KICAgICAgICAgICAgbWFyZ2luOiAwOw0KICAgICAgICAgICAgcGFkZGluZzogMDsNCiAgICAgICAgfQ0KICAgIDwvc3R5bGU+DQo8L2hlYWQ+DQo8Ym9keT4NCiAgICA8ZGl2IGNsYXNzPSJkYXRhLXNjaWVuY2UtdGVrcyI+DQogICAgICAgIDxoMT5XaGF0IGlzIERhdGEgU2NpZW5jZSA/PC9oMT4NCiAgICAgICAgPHA+RGF0YSBTY2llbmNlIGlzIGEgYnJhbmNoIG9mIHN0dWR5IHRoYXQgY29tYmluZXMgY29tcHV0ZXIgc2NpZW5jZSwgbWF0aGVtYXRpY3MsIGFuZCBzdGF0aXN0aWNzLiBJdCBpbmNsdWRlcyBwcm9ncmFtbWluZywgYWR2YW5jZWQgYW5hbHlzaXMsIGFydGlmaWNpYWwgaW50ZWxsaWdlbmNlLCBhbmQgbWFjaGluZSBsZWFybmluZy4gVGhpcyBoZWxwcyB1cyB0byBoYXZlIGEgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgYSBzcGVjaWZpYyBkaXNjaXBsaW5lIGFuZCB0byB1bmNvdmVyIGluc2lnaHRzIGRlcml2ZWQgZnJvbSBib3RoIHN0cnVjdHVyZWQgYW5kIHVuc3RydWN0dXJlZCBkYXRhLCB3aGljaCBhcmUgdXNlZCBmb3IgcGxhbm5pbmcgYW5kIGRlY2lzaW9uLW1ha2luZyBvbiByZWxhdGVkIGlzc3Vlcy48L3A+DQogICAgPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQpgYGANCg0KIyBXaGF0IGlzIHRoZSBNYWluIFB1cnBvc2Ugb2YgRGF0YSBTY2llbmNlIFByb2dyYW1taW5nID8NCg0KYGBgez1odG1sfQ0KPCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJpZCI+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+DQogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPg0KICAgIDx0aXRsZT5XaGF0IGlzIERhdGEgU2NpZW5jZT8gKGJpcnXCt2NyZWFtKTwvdGl0bGU+DQogICAgPHN0eWxlPg0KICAgICAgICBib2R5LCBodG1sIHsNCiAgICAgICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICAgICAgfQ0KICAgICAgICAuZGF0YS1zY2llbmNlLXRla3Mgew0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZWRmNzsNCiAgICAgICAgICAgIGNvbG9yOiAjMmI0YTZmOw0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdHZW9yZ2lhJywgJ1RpbWVzIE5ldyBSb21hbicsIHNlcmlmOw0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjNyZW07DQogICAgICAgICAgICBsaW5lLWhlaWdodDogMS42Ow0KICAgICAgICAgICAgcGFkZGluZzogMS44cmVtIDIuMnJlbTsNCiAgICAgICAgICAgIG1heC13aWR0aDogOTAwcHg7DQogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsNCiAgICAgICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsNCiAgICAgICAgICAgIHRleHQtYWxpZ246IGp1c3RpZnk7DQogICAgICAgIH0NCiAgICAgICAgLmRhdGEtc2NpZW5jZS10ZWtzIGgxIHsNCiAgICAgICAgICAgIG1hcmdpbjogMCAwIDAuNXJlbSAwOw0KICAgICAgICAgICAgcGFkZGluZzogMDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMi40cmVtOw0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsNCiAgICAgICAgICAgIGNvbG9yOiAjMWY0OTczOw0KICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsNCiAgICAgICAgfQ0KICAgICAgICAuZGF0YS1zY2llbmNlLXRla3MgcCB7DQogICAgICAgICAgICBtYXJnaW46IDA7DQogICAgICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgICB9DQogICAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KICAgIDxkaXYgY2xhc3M9ImRhdGEtc2NpZW5jZS10ZWtzIj4NCiAgICAgICAgPGgxPjwvaDE+DQogICAgICAgIDxwPlRoZSBtYWluIHB1cnBvc2Ugb2YgbGVhcm5pbmcgZGF0YSBzY2llbmNlIHByb2dyYW1taW5nIGlzIHRvIGRldmVsb3AgdGhlIGFiaWxpdHkgdG8gbWFuYWdlIGFuZCBhbmFseXplIGRhdGEgZWZmaWNpZW50bHkgaW4gb3JkZXIgdG8gZ2VuZXJhdGUgbWVhbmluZ2Z1bCBpbnNpZ2h0cy4gUHJvZ3JhbW1pbmcgc2VydmVzIGFzIGEgZm91bmRhdGlvbmFsIHNraWxsIHRoYXQgc3VwcG9ydHMgdGhlIHByb2Nlc3NlcyBvZiBjb2xsZWN0aW5nLCBjbGVhbmluZywgYW5kIGFuYWx5emluZyBkYXRhLiBXaXRob3V0IHByb2dyYW1taW5nIHNraWxscywgdGhlc2UgdGFza3Mgd291bGQgYmUgZGlmZmljdWx0IGFuZCB0aW1lLWNvbnN1bWluZy4gQnkgbGVhcm5pbmcgcHJvZ3JhbW1pbmcsIFVzIGNhbiB3b3JrIHdpdGggbGFyZ2UgZGF0YXNldHMgbW9yZSBlZmZlY3RpdmVseSwgYnVpbGQgYW5kIHRlc3QgYmFzaWMgbWFjaGluZSBsZWFybmluZyBtb2RlbHMsIGFuZCB2aXN1YWxpemUgYW5hbHl0aWNhbCByZXN1bHRzLiBJbiBhZGRpdGlvbiwgcHJvZ3JhbW1pbmcga25vd2xlZGdlIGhlbHBzIGxlYXJuZXJzIHVuZGVyc3RhbmQgZGF0YSBjb2xsZWN0aW9uIHRlY2huaXF1ZXMgc3VjaCBhcyB3ZWIgc2NyYXBpbmcgYW5kIHRoZSBpbXBvcnRhbmNlIG9mIGRhdGEgY2xlYW5pbmcgdG8gZW5zdXJlIGFjY3VyYWN5IGFuZCByZWxpYWJpbGl0eS4gVGhlcmVmb3JlLCBwcm9ncmFtbWluZyBiZWNvbWVzIGEgZnVuZGFtZW50YWwgdG9vbCBmb3IgYnVpbGQgc3Ryb25nIGNvbXBldGVuY2UgaW4gZGF0YSBzY2llbmNlIGFuZCBwcmVwYXJlIGZvciBmdXR1cmUgcHJvZmVzc2lvbmFsIHJvbGVzIGluIHRoaXMgZmllbGQuPC9wPg0KICAgIDwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0KYGBgDQoNCiMgV2h5IERvIFdlIExlYXJuIGFib3V0IGl0ID8NCg0KYGBgez1odG1sfQ0KPCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJpZCI+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+DQogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPg0KICAgIDx0aXRsZT5XaGF0IGlzIERhdGEgU2NpZW5jZT8gKGJpcnXCt2NyZWFtKTwvdGl0bGU+DQogICAgPHN0eWxlPg0KICAgICAgICBib2R5LCBodG1sIHsNCiAgICAgICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICAgICAgfQ0KICAgICAgICAuZGF0YS1zY2llbmNlLXRla3Mgew0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZWRmNzsNCiAgICAgICAgICAgIGNvbG9yOiAjMmI0YTZmOw0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdHZW9yZ2lhJywgJ1RpbWVzIE5ldyBSb21hbicsIHNlcmlmOw0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjNyZW07DQogICAgICAgICAgICBsaW5lLWhlaWdodDogMS42Ow0KICAgICAgICAgICAgcGFkZGluZzogMS44cmVtIDIuMnJlbTsNCiAgICAgICAgICAgIG1heC13aWR0aDogOTAwcHg7DQogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsNCiAgICAgICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsNCiAgICAgICAgICAgIHRleHQtYWxpZ246IGp1c3RpZnk7DQogICAgICAgIH0NCiAgICAgICAgLmRhdGEtc2NpZW5jZS10ZWtzIGgxIHsNCiAgICAgICAgICAgIG1hcmdpbjogMCAwIDAuNXJlbSAwOw0KICAgICAgICAgICAgcGFkZGluZzogMDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMi40cmVtOw0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsNCiAgICAgICAgICAgIGNvbG9yOiAjMWY0OTczOw0KICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsNCiAgICAgICAgfQ0KICAgICAgICAuZGF0YS1zY2llbmNlLXRla3MgcCB7DQogICAgICAgICAgICBtYXJnaW46IDA7DQogICAgICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgICB9DQogICAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KICAgIDxkaXYgY2xhc3M9ImRhdGEtc2NpZW5jZS10ZWtzIj4NCiAgICAgICAgPGgxPjwvaDE+DQogICAgICAgIDxwPlRoZSByZWFzb24gd2h5IHdlIGxlYXJuaW5nIGRhdGEgc2NpZW5jZSBwcm9ncmFtbWluZyBpcyB0byBkZXZlbG9wIHRoZSBhYmlsaXR5IHRvIG1hbmFnZSBhbmQgYW5hbHl6ZSBkYXRhIGVmZmljaWVudGx5IGluIG9yZGVyIHRvIGdlbmVyYXRlIG1lYW5pbmdmdWwgaW5zaWdodHMuIFByb2dyYW1taW5nIHN1cHBvcnRzIGltcG9ydGFudCBwcm9jZXNzZXMgc3VjaCBhcyBjb2xsZWN0aW5nLCBjbGVhbmluZywgYW5kIGFuYWx5emluZyBkYXRhLCB3aGljaCB3b3VsZCBvdGhlcndpc2UgYmUgZGlmZmljdWx0IGFuZCB0aW1lLWNvbnN1bWluZy4gQnkgbWFzdGVyaW5nIHByb2dyYW1taW5nIHNraWxscywgd2UgY2FuIHdvcmsgd2l0aCBsYXJnZSBkYXRhc2V0cywgYnVpbGQgYW5kIHRlc3QgYmFzaWMgbWFjaGluZSBsZWFybmluZyBtb2RlbHMsIGFuZCB2aXN1YWxpemUgcmVzdWx0cyBlZmZlY3RpdmVseS4gSW4gYWRkaXRpb24sIHVuZGVyc3RhbmRpbmcgcHJvZ3JhbW1pbmcgaGVscHMgdXMgbGVhcm4gZGF0YSBjb2xsZWN0aW9uIHRlY2huaXF1ZXMgbGlrZSB3ZWIgc2NyYXBpbmcgYW5kIGVuc3VyZXMgZGF0YSBhY2N1cmFjeSB0aHJvdWdoIHByb3BlciBjbGVhbmluZy4gVGhlcmVmb3JlLCBwcm9ncmFtbWluZyBpcyBhIGZ1bmRhbWVudGFsIHNraWxsIGZvciBidWlsZGluZyBzdHJvbmcgY29tcGV0ZW5jZSBpbiBkYXRhIHNjaWVuY2UgYW5kIHByZXBhcmluZyBmb3IgZnV0dXJlIGNhcmVlcnMgaW4gdGhpcyBmaWVsZC4uPC9wPg0KICAgIDwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0KYGBgDQoNCiMgV2hhdCBUb29scyB0byBoYXZlIHRvIGV4cGVydCBhYm91dCA/DQoNCmBgYHs9aHRtbH0NCjwhRE9DVFlQRSBodG1sPg0KPGh0bWwgbGFuZz0iZW4iPg0KPGhlYWQ+DQogICAgPG1ldGEgY2hhcnNldD0iVVRGLTgiPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4NCiAgICA8dGl0bGU+UHl0aG9uLCBSLCBTUUw8L3RpdGxlPg0KICAgIDxzdHlsZT4NCiAgICAgICAgLyogV1JBUFBFUiBVTklLIC0gc2VtdWEgZ2F5YSBkaWJ1bmdrdXMgZGFsYW0gc2VsZWN0b3IgLnB5dGhvbi1yLXNxbC1zZWN0aW9uICovDQogICAgICAgIC5weXRob24tci1zcWwtc2VjdGlvbiB7DQogICAgICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiAnU2Vnb2UgVUknLCBzeXN0ZW0tdWksIHNhbnMtc2VyaWY7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5weXRob24tci1zcWwtc2VjdGlvbiAqIHsNCiAgICAgICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucHl0aG9uLXItc3FsLXNlY3Rpb24gew0KICAgICAgICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgIzBjMjQ2MSAwJSwgIzFlMzc5OSA1MCUsICM0YTY5YmQgMTAwJSk7DQogICAgICAgICAgICBjb2xvcjogIzMzMzsNCiAgICAgICAgICAgIHBhZGRpbmc6IDIwcHg7DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOw0KICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5weXRob24tci1zcWwtc2VjdGlvbiAuY29udGFpbmVyIHsNCiAgICAgICAgICAgIG1heC13aWR0aDogMTEwMHB4Ow0KICAgICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsNCiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxNXB4Ow0KICAgICAgICAgICAgYm94LXNoYWRvdzogMCAxMHB4IDMwcHggcmdiYSgxMiwgMzYsIDk3LCAwLjMpOw0KICAgICAgICAgICAgcGFkZGluZzogMnJlbSAycmVtIDIuNXJlbSAycmVtOw0KICAgICAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzRhNjliZDsNCiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5weXRob24tci1zcWwtc2VjdGlvbiBoMSB7DQogICAgICAgICAgICBmb250LXdlaWdodDogNzAwOw0KICAgICAgICAgICAgZm9udC1zaXplOiAycmVtOw0KICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOw0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCAiUGFsYXRpbm8gTGlub3R5cGUiLCBzZXJpZjsNCiAgICAgICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7DQogICAgICAgICAgICBsaW5lLWhlaWdodDogMS4yOw0KICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICAgICAgcGFkZGluZy1ib3R0b206IDE1cHg7DQogICAgICAgICAgICBjb2xvcjogIzBjMjQ2MTsNCiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5weXRob24tci1zcWwtc2VjdGlvbiBoMTo6YWZ0ZXIgew0KICAgICAgICAgICAgY29udGVudDogIiI7DQogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgICAgICBib3R0b206IDA7DQogICAgICAgICAgICBsZWZ0OiA1MCU7DQogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7DQogICAgICAgICAgICB3aWR0aDogMTUwcHg7DQogICAgICAgICAgICBoZWlnaHQ6IDJweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICM0YTY5YmQ7DQogICAgICAgICAgICBvcGFjaXR5OiAwLjM7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5weXRob24tci1zcWwtc2VjdGlvbiAuY2FyZHMgew0KICAgICAgICAgICAgZGlzcGxheTogZmxleDsNCiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsNCiAgICAgICAgICAgIGdhcDogMS44cmVtOw0KICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7DQogICAgICAgICAgICBtYXJnaW4tdG9wOiAzMHB4Ow0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucHl0aG9uLXItc3FsLXNlY3Rpb24gLmNhcmQgew0KICAgICAgICAgICAgZmxleDogMSAxIDI4MHB4Ow0KICAgICAgICAgICAgbWluLXdpZHRoOiAyNjBweDsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNmMGY4ZmY7DQogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4Ow0KICAgICAgICAgICAgcGFkZGluZzogMS44cmVtIDEuNXJlbTsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLDAsMCwwLjEpOw0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsNCiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5weXRob24tci1zcWwtc2VjdGlvbiAuY2FyZDo6YmVmb3JlLA0KICAgICAgICAucHl0aG9uLXItc3FsLXNlY3Rpb24gLmNhcmQ6OmFmdGVyIHsNCiAgICAgICAgICAgIGNvbnRlbnQ6ICIiOw0KICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgICAgd2lkdGg6IDE4cHg7DQogICAgICAgICAgICBoZWlnaHQ6IDE4cHg7DQogICAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjNGE2OWJkOw0KICAgICAgICAgICAgb3BhY2l0eTogMC4zOw0KICAgICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnB5dGhvbi1yLXNxbC1zZWN0aW9uIC5jYXJkOjpiZWZvcmUgew0KICAgICAgICAgICAgdG9wOiA4cHg7DQogICAgICAgICAgICBsZWZ0OiA4cHg7DQogICAgICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7DQogICAgICAgICAgICBib3JkZXItYm90dG9tOiBub25lOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucHl0aG9uLXItc3FsLXNlY3Rpb24gLmNhcmQ6OmFmdGVyIHsNCiAgICAgICAgICAgIGJvdHRvbTogOHB4Ow0KICAgICAgICAgICAgcmlnaHQ6IDhweDsNCiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiBub25lOw0KICAgICAgICAgICAgYm9yZGVyLXRvcDogbm9uZTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLnB5dGhvbi1yLXNxbC1zZWN0aW9uIC5jYXJkOmhvdmVyOjpiZWZvcmUsDQogICAgICAgIC5weXRob24tci1zcWwtc2VjdGlvbiAuY2FyZDpob3Zlcjo6YWZ0ZXIgew0KICAgICAgICAgICAgd2lkdGg6IDIycHg7DQogICAgICAgICAgICBoZWlnaHQ6IDIycHg7DQogICAgICAgICAgICBvcGFjaXR5OiAwLjU7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5weXRob24tci1zcWwtc2VjdGlvbiAuY2FyZDpob3ZlciB7DQogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTVweCk7DQogICAgICAgICAgICBib3gtc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoNzQsIDEwNSwgMTg5LCAwLjMpOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAucHl0aG9uLXItc3FsLXNlY3Rpb24gLnRpdGxlIHsNCiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7DQogICAgICAgICAgICBmb250LXNpemU6IDEuNnJlbTsNCiAgICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOw0KICAgICAgICAgICAgbWFyZ2luLWJvdHRvbTogMS4yNXJlbTsNCiAgICAgICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgIzRhNjliZDsNCiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMC44cmVtOw0KICAgICAgICAgICAgY29sb3I6ICMwYzI0NjE7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5weXRob24tci1zcWwtc2VjdGlvbiAuZGVzYyB7DQogICAgICAgICAgICBjb2xvcjogIzMzMzsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMXJlbTsNCiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206IDEuNXJlbTsNCiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5weXRob24tci1zcWwtc2VjdGlvbiAubGlicmFyeS1saXN0IHsNCiAgICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7DQogICAgICAgICAgICBtYXJnaW4tdG9wOiAwLjhyZW07DQogICAgICAgICAgICBkaXNwbGF5OiBmbGV4Ow0KICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOw0KICAgICAgICAgICAgZ2FwOiAwLjVyZW07DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5weXRob24tci1zcWwtc2VjdGlvbiAubGlicmFyeS1saXN0IGxpIHsNCiAgICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzRhNjliZCwgIzZhODljYyk7DQogICAgICAgICAgICBjb2xvcjogd2hpdGU7DQogICAgICAgICAgICBtYXJnaW46IDA7DQogICAgICAgICAgICBwYWRkaW5nOiAwLjVyZW0gMXJlbTsNCiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDI1cHg7DQogICAgICAgICAgICBmb250LXNpemU6IDAuODVyZW07DQogICAgICAgICAgICBmb250LXdlaWdodDogNTAwOw0KICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzFlMzc5OTsNCiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgM3B4IDhweCByZ2JhKDc0LCAxMDUsIDE4OSwgMC4yKTsNCiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIC5weXRob24tci1zcWwtc2VjdGlvbiAubGlicmFyeS1saXN0IGxpOmhvdmVyIHsNCiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtM3B4KTsNCiAgICAgICAgICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzFlMzc5OSwgIzRhNjliZCk7DQogICAgICAgICAgICBib3gtc2hhZG93OiAwIDVweCAxNXB4IHJnYmEoNzQsIDEwNSwgMTg5LCAwLjMpOw0KICAgICAgICB9DQogICAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KICAgIDxkaXYgY2xhc3M9InB5dGhvbi1yLXNxbC1zZWN0aW9uIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICAgICAgICAgIDxoMT5QeXRob24gwrcgUiDCtyBTUUw8L2gxPg0KDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkcyI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZCI+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj5QeXRob248L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVzYyI+DQogICAgICAgICAgICAgICAgICAgICAgICBDbGFzc2lmaWVkIGFzIGEgZmxleGlibGUgdG9vbCB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIHVzZXJzIHdvcmxkd2lkZS4gUHl0aG9uIGhhcyBhIHN0cm9uZyBmb2N1cyBvbiBtYWNoaW5lIGxlYXJuaW5nLCB3ZWIgZGV2ZWxvcG1lbnQsIGFuZCBkYXRhIHZpc3VhbGl6YXRpb24uIEl0IGlzIHN1cHBvcnRlZCBieSB2YXJpb3VzIGxpYnJhcmllcyBzdWNoIGFzIHBhbmRhcywgbnVtcHksIGFuZCBzY2lraXQtbGVhcm4uDQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImxpYnJhcnktbGlzdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8bGk+cGFuZGFzPC9saT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT5udW1weTwvbGk+DQogICAgICAgICAgICAgICAgICAgICAgICA8bGk+c2Npa2l0LWxlYXJuPC9saT4NCiAgICAgICAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+UjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXNjIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIEtub3duIGFzIGEgdG9vbCB0aGF0IGV4Y2VscyBpbiBzdGF0aXN0aWNhbCBhbmFseXNpcyBhbmQgZGF0YSB2aXN1YWxpemF0aW9uLCBhcyB3ZWxsIGFzIGJlaW5nIGZsZXhpYmxlIGluIGRhdGEgbWFuaXB1bGF0aW9uLiBSIGlzIHBvcHVsYXIgZm9yIGl0cyBsaWJyYXJpZXMgc3VjaCBhcyBkcGx5ciwgZ2dwbG90MiwgYW5kIHRpZHlyLiBBZGRpdGlvbmFsbHksIGl0IGlzIHN0cm9uZyBmb3IgYWR2YW5jZWQgc3RhdGlzdGljYWwgYW5hbHlzaXMsIHRleHQgbWluaW5nLCBhbmQgc29jaWFsIG5ldHdvcmsgYW5hbHlzaXMuDQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImxpYnJhcnktbGlzdCI+DQogICAgICAgICAgICAgICAgICAgICAgICA8bGk+ZHBseXI8L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPmdncGxvdDI8L2xpPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpPnRpZHlyPC9saT4NCiAgICAgICAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQiPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aXRsZSI+U1FMPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRlc2MiPg0KICAgICAgICAgICAgICAgICAgICAgICAgSGlnaGx5IGVmZmVjdGl2ZSBmb3IgbWFuYWdpbmcgYW5kIHF1ZXJ5aW5nIHJlbGF0aW9uYWwgZGF0YWJhc2VzLCBhbmQgc3VwcG9ydHMgZGF0YSBjbGVhbmluZyBhbmQgdHJhbnNmb3JtYXRpb24gcHJvY2Vzc2VzIGVmZmljaWVudGx5LiBTUUwgZXhjZWxzIGluIHByb2Nlc3Npbmcgc3RydWN0dXJlZCBkYXRhIGFuZCBtYW5hZ2luZyBsYXJnZSBkYXRhc2V0cy4gSXQgaXMgYWxzbyBlYXN5IHRvIGludGVncmF0ZSB3aXRoIG90aGVyIHByb2dyYW1taW5nIGxhbmd1YWdlcy4NCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQo8L2JvZHk+DQo8L2h0bWw+DQpgYGANCg0KDQojIEdpdmUgeW91ciBpbnRlcmVzdCBkb21haW4ga25vd2xlZGdlIG9mIHRoZSBkYXRhIHNjaWVuY2UNCg0KYGBgez1odG1sfQ0KPCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJpZCI+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+DQogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPg0KICAgIDx0aXRsZT5XaGF0IGlzIERhdGEgU2NpZW5jZT8gKGJpcnXCt2NyZWFtKTwvdGl0bGU+DQogICAgPHN0eWxlPg0KICAgICAgICBib2R5LCBodG1sIHsNCiAgICAgICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICAgICAgfQ0KICAgICAgICAuZGF0YS1zY2llbmNlLXRla3Mgew0KICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZWRmNzsNCiAgICAgICAgICAgIGNvbG9yOiAjMmI0YTZmOw0KICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdHZW9yZ2lhJywgJ1RpbWVzIE5ldyBSb21hbicsIHNlcmlmOw0KICAgICAgICAgICAgZm9udC1zaXplOiAxLjNyZW07DQogICAgICAgICAgICBsaW5lLWhlaWdodDogMS42Ow0KICAgICAgICAgICAgcGFkZGluZzogMS44cmVtIDIuMnJlbTsNCiAgICAgICAgICAgIG1heC13aWR0aDogOTAwcHg7DQogICAgICAgICAgICBtYXJnaW46IDAgYXV0bzsNCiAgICAgICAgICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsNCiAgICAgICAgICAgIHRleHQtYWxpZ246IGp1c3RpZnk7DQogICAgICAgIH0NCiAgICAgICAgLmRhdGEtc2NpZW5jZS10ZWtzIGgxIHsNCiAgICAgICAgICAgIG1hcmdpbjogMCAwIDAuNXJlbSAwOw0KICAgICAgICAgICAgcGFkZGluZzogMDsNCiAgICAgICAgICAgIGZvbnQtc2l6ZTogMi40cmVtOw0KICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsNCiAgICAgICAgICAgIGNvbG9yOiAjMWY0OTczOw0KICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDEuMjsNCiAgICAgICAgfQ0KICAgICAgICAuZGF0YS1zY2llbmNlLXRla3MgcCB7DQogICAgICAgICAgICBtYXJnaW46IDA7DQogICAgICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgICB9DQogICAgPC9zdHlsZT4NCjwvaGVhZD4NCjxib2R5Pg0KICAgIDxkaXYgY2xhc3M9ImRhdGEtc2NpZW5jZS10ZWtzIj4NCiAgICAgICAgPGgxPjwvaDE+DQogICAgICAgIDxwPkEgY29tcGVsbGluZyBhc3BlY3Qgb2YgZG9tYWluIGtub3dsZWRnZSB0aGF0IEkgZmluZCBwYXJ0aWN1bGFybHkgZW5nYWdpbmcgbGllcyBpbiB0aGUgaW50ZXJzZWN0aW9uIG9mIG1hcmtldGluZyBhbmQgYnVzaW5lc3MsIHdoZXJlIGRhdGEgc2NpZW5jZSBzZXJ2ZXMgYXMgYSBwb3dlcmZ1bCB0b29sIGZvciBzdHJhdGVnaWMgaW5zaWdodC4gSW4gdGhpcyBjb250ZXh0LCBkYXRhIHNjaWVuY2UgY2FuIGlkZW50aWZ5IGRpZmZlcmVuY2VzIGluIGNvbnN1bWVyIGJlaGF2aW9yIHBhdHRlcm5zIGJhc2VkIG9uIGRlbW9ncmFwaGljIGFuZCBwc3ljaG9ncmFwaGljIGNoYXJhY3RlcmlzdGljcywgYXMgd2VsbCBhcyBwdXJjaGFzaW5nIHRyZW5kcywgdG8gY3JlYXRlIG9wdGltYWwgbWFya2V0IHNlZ21lbnRhdGlvbi4gRm9yIGV4YW1wbGUsIG1hY2hpbmUgbGVhcm5pbmcgY2FuIGJlIGFwcGxpZWQgdG8gcHJlZGljdCBjdXN0b21lciBjaHVybiBieSBhbmFseXppbmcgdHJhbnNhY3Rpb24gaGlzdG9yaWVzIGFuZCBjdXN0b21lciBpbnRlcmFjdGlvbnMsIGVuYWJsaW5nIGNvbXBhbmllcyB0byBhdXRvbWF0aWNhbGx5IHByb3ZpZGUgdGFyZ2V0ZWQgc3BlY2lhbCBvZmZlcnMgdG8gbWFpbnRhaW4gY3VzdG9tZXIgbG95YWx0eS4gSG93ZXZlciwgdGhlIHJlc3VsdGluZyBzdHJhdGVnaWVzIG11c3QgYmUgdmFsaWRhdGVkIHRocm91Z2ggQS9CIHRlc3RpbmcgdG8gc2NpZW50aWZpY2FsbHkgYXNzZXNzIHdoZXRoZXIgdGhlIG5ldyBhcHByb2FjaCBnZW5lcmF0ZXMgYSBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGltcGFjdCBvbiBrZXkgbWV0cmljcyBzdWNoIGFzIGNvbnZlcnNpb24gcmF0ZSwgdGhlcmVieSBsZWFkaW5nIHRvIHdlbGwgZm91bmRlZCBhbmQgZWZmZWN0aXZlIHN0cmF0ZWdpYyBkZWNpc2lvbiBtYWtpbmcuPC9wPg0KICAgIDwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg0KYGBgDQoNCiMgQ29uY2x1c2lvbiANCg0KOjo6e3N0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNGRkY1RTE7IGJvcmRlci1sZWZ0OjZweCBzb2xpZCAjMUU5MEZGOyBwYWRkaW5nOjEycHg7IGJvcmRlci1yYWRpdXM6OHB4OyBtYXJnaW46MjBweCAwOyB0ZXh0LWFsaWduOiBqdXN0aWZ5OyJ9DQoNCkRhdGEgU2NpZW5jZSBpcyBhbiBpbnRlcmRpc2NpcGxpbmFyeSBmaWVsZCB0aGF0IGludGVncmF0ZXMgY29tcHV0ZXIgc2NpZW5jZSwgbWF0aGVtYXRpY3MsIGFuZCBzdGF0aXN0aWNzIHRvIGFuYWx5emUgYm90aCBzdHJ1Y3R1cmVkIGFuZCB1bnN0cnVjdHVyZWQgZGF0YSBpbiBvcmRlciB0byBnZW5lcmF0ZSBtZWFuaW5nZnVsIGluc2lnaHRzIGZvciBkZWNpc2lvbi1tYWtpbmcuIFByb2dyYW1taW5nIHBsYXlzIGEgZnVuZGFtZW50YWwgcm9sZSBpbiB0aGlzIHByb2Nlc3MsIGFzIGl0IGVuYWJsZXMgZWZmaWNpZW50IGRhdGEgY29sbGVjdGlvbiwgY2xlYW5pbmcsIGFuYWx5c2lzLCB2aXN1YWxpemF0aW9uLCBhbmQgdGhlIGRldmVsb3BtZW50IG9mIGJhc2ljIG1hY2hpbmUgbGVhcm5pbmcgbW9kZWxzLiBCeSBtYXN0ZXJpbmcgcHJvZ3JhbW1pbmcgc2tpbGxzLCBpbmRpdmlkdWFscyBjYW4gbWFuYWdlIGxhcmdlIGRhdGFzZXRzIGVmZmVjdGl2ZWx5IGFuZCBlbnN1cmUgZGF0YSBhY2N1cmFjeSBhbmQgcmVsaWFiaWxpdHkuDQoNCkZ1cnRoZXJtb3JlLCB0aGUgYXBwbGljYXRpb24gb2YgZGF0YSBzY2llbmNlIGluIG1hcmtldGluZyBhbmQgYnVzaW5lc3MgZGVtb25zdHJhdGVzIGl0cyBzdHJhdGVnaWMgdmFsdWUsIHBhcnRpY3VsYXJseSBpbiB1bmRlcnN0YW5kaW5nIGNvbnN1bWVyIGJlaGF2aW9yLCBvcHRpbWl6aW5nIG1hcmtldCBzZWdtZW50YXRpb24sIHByZWRpY3RpbmcgY3VzdG9tZXIgY2h1cm4sIGFuZCB2YWxpZGF0aW5nIHN0cmF0ZWdpZXMgdGhyb3VnaCBBL0IgdGVzdGluZy4gVGhlcmVmb3JlLCBwcm9ncmFtbWluZyBjb21wZXRlbmNlIGNvbWJpbmVkIHdpdGggZG9tYWluIGtub3dsZWRnZSBmb3JtcyBhIHN0cm9uZyBmb3VuZGF0aW9uIGZvciBidWlsZGluZyBwcm9mZXNzaW9uYWwgZXhwZXJ0aXNlIGluIGRhdGEgc2NpZW5jZSBhbmQgc3VwcG9ydGluZyBkYXRhLWRyaXZlbiBzdHJhdGVnaWMgZGVjaXNpb25zLg0KDQo6OjoNCg==