Iw0KIyBGcmVlVHlwZSAyIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBkZXRlY3QgYSBXaW4zMiBob3N0IHBsYXRmb3JtLg0KIw0KDQoNCiMgQ29weXJpZ2h0IDE5OTYtMjAxNSBieQ0KIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuDQojDQojIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsDQojIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwNCiMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UNCiMgaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQNCiMgZnVsbHkuDQoNCg0KLlBIT05ZOiBzZXR1cA0KDQoNCmlmZXEgKCQoUExBVEZPUk0pLGFuc2kpDQoNCiAgIyBEZXRlY3RpbmcgV2luZG93cyBOVCBpcyBlYXN5LCBhcyB0aGUgT1MgdmFyaWFibGUgbXVzdCBiZSBkZWZpbmVkIGFuZA0KICAjIGNvbnRhaW5zIGBXaW5kb3dzX05UJy4gIFRoaXMgYWxzbyB3b3JrcyB3aXRoIFdpbmRvd3MgMjAwMCBhbmQgWFAuDQogICMNCiAgaWZlcSAoJChPUyksV2luZG93c19OVCkNCg0KICAgIFBMQVRGT1JNIDo9IHdpbmRvd3MNCg0KICBlbHNlDQoNCiAgICAjIERldGVjdGluZyBXaW5kb3dzIDlYDQoNCiAgICAjIFdlIHVzZWQgdG8gcnVuIHRoZSBgdmVyJyBjb21tYW5kIHRvIHNlZSBpZiBpdHMgb3V0cHV0IGNvbnRhaW5zIHRoZQ0KICAgICMgd29yZCBgV2luZG93cycuICBJZiB0aGlzIGlzIHRydWUsIHdlIGFyZSBydW5uaW5nIFdpbmRvd3MgOTUgb3IgbGF0ZXI6DQogICAgIw0KICAgICMgICBpZmRlZiBDT01TUEVDDQogICAgIyAgICAgIyBGaXJzdCwgY2hlY2sgaWYgd2UgaGF2ZSB0aGUgQ09NU1BFQyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgd2hpY2gNCiAgICAjICAgICAjIGluZGljYXRlcyB3ZSBjYW4gdXNlIENPTU1BTkQuQ09NJ3MgaW50ZXJuYWwgY29tbWFuZHMNCiAgICAjICAgICBpc193aW5kb3dzIDo9ICQoZmluZHN0cmluZyBXaW5kb3dzLCQoc3RyaXAgJChzaGVsbCB2ZXIpKSkNCiAgICAjICAgZW5kaWYNCiAgICAjDQogICAgIyBVbmZvcnR1bmF0ZWx5LCB0aGlzIGFsc28gZGV0ZWN0cyB0aGUgY2FzZSB3aGVuIG9uZSBpcyBydW5uaW5nDQogICAgIyBET1MgNy54ICh0aGUgTVMtRE9TIHZlcnNpb24gdGhhdCBsaWVzIGJlbG93IFdpbmRvd3MpIHdpdGhvdXQgYWN0dWFsbHkNCiAgICAjIGxhdW5jaGluZyB0aGUgR1VJLg0KICAgICMNCiAgICAjIEEgYmV0dGVyIHRlc3QgaXMgdG8gY2hlY2sgd2hldGhlciB0aGVyZSBhcmUgYm90aCB0aGUgZW52aXJvbm1lbnQNCiAgICAjIHZhcmlhYmxlcyBgd2luYm9vdGRpcicgYW5kIGB3aW5kaXInLiAgVGhlIGZpcnN0IGluZGljYXRlcyBhbg0KICAgICMgdW5kZXJseWluZyBET1MgNy54LCB3aGlsZSB0aGUgc2Vjb25kIGlzIHNldCBvbmx5IGlmIHdpbmRvd3MgaXMNCiAgICAjIGF2YWlsYWJsZS4NCiAgICAjDQogICAgIyBOb3RlIHRoYXQgb24gV2luZG93cyBOVCwgc3VjaCBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIG5vdCBiZSBzZWVuDQogICAgIyBmcm9tIERPUy1iYXNlZCB0b29scyBsaWtlIERKR1BQJ3MgbWFrZTsgdGhpcyBpcyBub3QgYWN0dWFsbHkgYSBwcm9ibGVtDQogICAgIyBzaW5jZSBOVCBpcyBkZXRlY3RlZCBpbmRlcGVuZGVudGx5IGFib3ZlLiAgQnV0IGRvIG5vdCB0cnkgdG8gYmUgY2xldmVyIQ0KICAgICMNCiAgICBpZmRlZiB3aW5ib290ZGlyDQogICAgICBpZmRlZiB3aW5kaXINCg0KICAgICAgICBQTEFURk9STSA6PSB3aW5kb3dzDQoNCiAgICAgIGVuZGlmDQogICAgZW5kaWYNCg0KICBlbmRpZiAgIyB0ZXN0IE5UDQoNCmVuZGlmICMgdGVzdCBQTEFURk9STSBhbnNpDQoNCmlmZXEgKCQoUExBVEZPUk0pLHdpbmRvd3MpDQoNCiAgREVMRVRFIDo9IGRlbA0KICBDQVQgICAgOj0gdHlwZQ0KICBTRVAgICAgOj0gJChCQUNLU0xBU0gpDQoNCiAgIyBTZXR0aW5nIENPUFkgaXMgYSBiaXQgdHJpY2tpZXIuICBQbGFpbiBDT1BZIG9uIE5UIHdpbGwgbm90IHdvcmsNCiAgIyBjb3JyZWN0bHksIGJlY2F1c2UgaXQgd2lsbCB1cHBlcmNhc2UgOC4zIGZpbGVuYW1lcywgY3JlYXRpbmcgYQ0KICAjIGBDT05GSUcuTUsnIGZpbGUgd2hpY2ggaXNuJ3QgZm91bmQgbGF0ZXIgb24gYnkgYG1ha2UnLg0KICAjIFNpbmNlIHdlIGRvIG5vdCB3YW50IHRoYXQsIHdlIG5lZWQgdG8gZm9yY2UgZXhlY3V0aW9uIG9mIENNRC5FWEUuDQogICMgVW5mb3J0dW5hdGVseSwgQ01ELkVYRSBpcyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MgOVguDQogICMgU28gd2UgbmVlZCB0byBoYWNrLg0KICAjDQogICMgS3Vkb3MgdG8gRWxpIFphcmV0c2tpaSAoREpHUFAgZ3VydSkgdGhhdCBoZWxwZWQgZGVidWcgaXQuDQogICMgRGV0YWlscyBhcmUgYXZhaWxhYmxlIGluIHRocmVhZHMgb2YgdGhlIGZyZWV0eXBlIG1haWxpbmcgbGlzdA0KICAjICgyMDA0LTExLTExKSwgYW5kIHRoZW4gaW4gdGhlIGRldmVsIG1haWxpbmcgbGlzdCAoMjAwNC0xMS0yMCB0byAtMjMpLg0KICAjDQogIGlmZXEgKCQoT1MpLFdpbmRvd3NfTlQpDQogICAgQ09QWSA6PSBjbWQuZXhlIC9jIGNvcHkNCiAgZWxzZQ0KICAgIENPUFkgOj0gY29weQ0KICBlbmRpZiAgIyB0ZXN0IE5UDQoNCg0KICAjIGdjYyBNYWtlZmlsZSBieSBkZWZhdWx0DQogIENPTkZJR19GSUxFIDo9IHczMi1nY2MubWsNCiAgaWZlcSAoJChmaXJzdHdvcmQgJChDQykpLGNjKQ0KICAgIENDICAgICAgICA6PSBnY2MNCiAgZW5kaWYNCg0KICBpZm5lcSAoJChmaW5kc3RyaW5nIGxpc3QsJChNQUtFQ01ER09BTFMpKSwpICAjIHRlc3QgZm9yIHRoZSAibGlzdCIgdGFyZ2V0DQogICAgZHVtcF90YXJnZXRfbGlzdDoNCgkgICAgQGVjaG8g/w0KCSAgICBAZWNobyAkKFBST0pFQ1RfVElUTEUpIGJ1aWxkIHN5c3RlbSAtLSBzdXBwb3J0ZWQgY29tcGlsZXJzDQoJICAgIEBlY2hvIP8NCgkgICAgQGVjaG8gU2V2ZXJhbCBjb21tYW5kLWxpbmUgY29tcGlsZXJzIGFyZSBzdXBwb3J0ZWQgb24gV2luMzI6DQoJICAgIEBlY2hvIP8NCgkgICAgQGVjaG8g//9tYWtlIHNldHVw////////////////////////////Z2NjICh3aXRoIE1pbmd3KQ0KCSAgICBAZWNobyD//21ha2Ugc2V0dXAgdmlzdWFsY/////////////////9NaWNyb3NvZnQgVmlzdWFsIEMrKw0KCSAgICBAZWNobyD//21ha2Ugc2V0dXAgYmNjMzL///////////////////9Cb3JsYW5kIEMvQysrDQoJICAgIEBlY2hvIP//bWFrZSBzZXR1cCBsY2P//////////////////////1dpbjMyLUxDQw0KCSAgICBAZWNobyD//21ha2Ugc2V0dXAgaW50ZWxj//////////////////9JbnRlbCBDL0MrKw0KCSAgICBAZWNobyD/DQoNCiAgICBzZXR1cDogZHVtcF90YXJnZXRfbGlzdA0KICAgIC5QSE9OWTogZHVtcF90YXJnZXRfbGlzdCBsaXN0DQogIGVsc2UNCiAgICBzZXR1cDogZG9zX3NldHVwDQogIGVuZGlmDQoNCiAgIyBhZGRpdGlvbmFsbHksIHdlIHByb3ZpZGUgaG9va3MgZm9yIHZhcmlvdXMgb3RoZXIgY29tcGlsZXJzDQogICMNCiAgaWZuZXEgKCQoZmluZHN0cmluZyB2aXN1YWxjLCQoTUFLRUNNREdPQUxTKSksKSAgICAgIyBWaXN1YWwgQy9DKysNCiAgICBDT05GSUdfRklMRSA6PSB3MzItdmNjLm1rDQogICAgQ0MgICAgICAgICAgOj0gY2wNCiAgICB2aXN1YWxjOiBzZXR1cA0KICAgIC5QSE9OWTogdmlzdWFsYw0KICBlbmRpZg0KDQogIGlmbmVxICgkKGZpbmRzdHJpbmcgaW50ZWxjLCQoTUFLRUNNREdPQUxTKSksKSAgICAgICMgSW50ZWwgQy9DKysNCiAgICBDT05GSUdfRklMRSA6PSB3MzItaW50bC5taw0KICAgIENDICAgICAgICAgIDo9IGNsDQogICAgdmlzdWFsYzogc2V0dXANCiAgICAuUEhPTlk6IGludGVsYw0KICBlbmRpZg0KDQogIGlmbmVxICgkKGZpbmRzdHJpbmcgd2F0Y29tLCQoTUFLRUNNREdPQUxTKSksKSAgICAgICMgV2F0Y29tIEMvQysrDQogICAgQ09ORklHX0ZJTEUgOj0gdzMyLXdhdC5taw0KICAgIENDICAgICAgICAgIDo9IHdjYzM4Ng0KICAgIHdhdGNvbTogc2V0dXANCiAgICAuUEhPTlk6IHdhdGNvbQ0KICBlbmRpZg0KDQogIGlmbmVxICgkKGZpbmRzdHJpbmcgdmlzdWFsYWdlLCQoTUFLRUNNREdPQUxTKSksKSAgICMgVmlzdWFsIEFnZSBDKysNCiAgICBDT05GSUdfRklMRSA6PSB3MzItaWNjLm1rDQogICAgQ0MgICAgICAgICAgOj0gaWNjDQogICAgdmlzdWFsYWdlOiBzZXR1cA0KICAgIC5QSE9OWTogdmlzdWFsYWdlDQogIGVuZGlmDQoNCiAgaWZuZXEgKCQoZmluZHN0cmluZyBsY2MsJChNQUtFQ01ER09BTFMpKSwpICAgICAgICAgIyBMQ0MtV2luMzINCiAgICBDT05GSUdfRklMRSA6PSB3MzItbGNjLm1rDQogICAgQ0MgICAgICAgICAgOj0gbGNjDQogICAgbGNjOiBzZXR1cA0KICAgIC5QSE9OWTogbGNjDQogIGVuZGlmDQoNCiAgaWZuZXEgKCQoZmluZHN0cmluZyBtaW5ndzMyLCQoTUFLRUNNREdPQUxTKSksKSAgICAgIyBtaW5ndzMyDQogICAgQ09ORklHX0ZJTEUgOj0gdzMyLW1pbmd3MzIubWsNCiAgICBDQyAgICAgICAgICA6PSBnY2MNCiAgICBtaW5ndzMyOiBzZXR1cA0KICAgIC5QSE9OWTogbWluZ3czMg0KICBlbmRpZg0KDQogIGlmbmVxICgkKGZpbmRzdHJpbmcgYmNjMzIsJChNQUtFQ01ER09BTFMpKSwpICAgICAgICMgQm9ybGFuZCBDKysNCiAgICBDT05GSUdfRklMRSA6PSB3MzItYmNjLm1rDQogICAgQ0MgICAgICAgICAgOj0gYmNjMzINCiAgICBiY2MzMjogc2V0dXANCiAgICAuUEhPTlk6IGJjYzMyDQogIGVuZGlmDQoNCiAgaWZuZXEgKCQoZmluZHN0cmluZyBkZXZlbC1iY2MsJChNQUtFQ01ER09BTFMpKSwpICAgIyBkZXZlbG9wbWVudCB0YXJnZXQNCiAgICBDT05GSUdfRklMRSA6PSB3MzItYmNjZC5taw0KICAgIENDICAgICAgICAgIDo9IGJjYzMyDQogICAgZGV2ZWwtYmNjOiBzZXR1cA0KICAgIC5QSE9OWTogZGV2ZWwtYmNjDQogIGVuZGlmDQoNCiAgaWZuZXEgKCQoZmluZHN0cmluZyBkZXZlbC1nY2MsJChNQUtFQ01ER09BTFMpKSwpICAgIyBkZXZlbG9wbWVudCB0YXJnZXQNCiAgICBDT05GSUdfRklMRSA6PSB3MzItZGV2Lm1rDQogICAgQ0MgICAgICAgICAgOj0gZ2NjDQogICAgZGV2ZWwtZ2NjOiBzZXR1cA0KICAgIC5QSE9OWTogZGV2ZWwtZ2NjDQogIGVuZGlmDQoNCmVuZGlmICAgIyB0ZXN0IFBMQVRGT1JNIHdpbmRvd3MNCg0KDQojIEVPRg0K