IwojIEZyZWVUeXBlIDIgY29uZmlndXJhdGlvbiBmaWxlIHRvIGRldGVjdCBhIFdpbjMyIGhvc3QgcGxhdGZvcm0uCiMKCgojIENvcHlyaWdodCAxOTk2LTIwMTUgYnkKIyBEYXZpZCBUdXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiMKIyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsIG1vZGlmaWVkLAojIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQojIGluZGljYXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGl0CiMgZnVsbHkuCgoKLlBIT05ZOiBzZXR1cAoKCmlmZXEgKCQoUExBVEZPUk0pLGFuc2kpCgogICMgRGV0ZWN0aW5nIFdpbmRvd3MgTlQgaXMgZWFzeSwgYXMgdGhlIE9TIHZhcmlhYmxlIG11c3QgYmUgZGVmaW5lZCBhbmQKICAjIGNvbnRhaW5zIGBXaW5kb3dzX05UJy4gIFRoaXMgYWxzbyB3b3JrcyB3aXRoIFdpbmRvd3MgMjAwMCBhbmQgWFAuCiAgIwogIGlmZXEgKCQoT1MpLFdpbmRvd3NfTlQpCgogICAgUExBVEZPUk0gOj0gd2luZG93cwoKICBlbHNlCgogICAgIyBEZXRlY3RpbmcgV2luZG93cyA5WAoKICAgICMgV2UgdXNlZCB0byBydW4gdGhlIGB2ZXInIGNvbW1hbmQgdG8gc2VlIGlmIGl0cyBvdXRwdXQgY29udGFpbnMgdGhlCiAgICAjIHdvcmQgYFdpbmRvd3MnLiAgSWYgdGhpcyBpcyB0cnVlLCB3ZSBhcmUgcnVubmluZyBXaW5kb3dzIDk1IG9yIGxhdGVyOgogICAgIwogICAgIyAgIGlmZGVmIENPTVNQRUMKICAgICMgICAgICMgRmlyc3QsIGNoZWNrIGlmIHdlIGhhdmUgdGhlIENPTVNQRUMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHdoaWNoCiAgICAjICAgICAjIGluZGljYXRlcyB3ZSBjYW4gdXNlIENPTU1BTkQuQ09NJ3MgaW50ZXJuYWwgY29tbWFuZHMKICAgICMgICAgIGlzX3dpbmRvd3MgOj0gJChmaW5kc3RyaW5nIFdpbmRvd3MsJChzdHJpcCAkKHNoZWxsIHZlcikpKQogICAgIyAgIGVuZGlmCiAgICAjCiAgICAjIFVuZm9ydHVuYXRlbHksIHRoaXMgYWxzbyBkZXRlY3RzIHRoZSBjYXNlIHdoZW4gb25lIGlzIHJ1bm5pbmcKICAgICMgRE9TIDcueCAodGhlIE1TLURPUyB2ZXJzaW9uIHRoYXQgbGllcyBiZWxvdyBXaW5kb3dzKSB3aXRob3V0IGFjdHVhbGx5CiAgICAjIGxhdW5jaGluZyB0aGUgR1VJLgogICAgIwogICAgIyBBIGJldHRlciB0ZXN0IGlzIHRvIGNoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIGJvdGggdGhlIGVudmlyb25tZW50CiAgICAjIHZhcmlhYmxlcyBgd2luYm9vdGRpcicgYW5kIGB3aW5kaXInLiAgVGhlIGZpcnN0IGluZGljYXRlcyBhbgogICAgIyB1bmRlcmx5aW5nIERPUyA3LngsIHdoaWxlIHRoZSBzZWNvbmQgaXMgc2V0IG9ubHkgaWYgd2luZG93cyBpcwogICAgIyBhdmFpbGFibGUuCiAgICAjCiAgICAjIE5vdGUgdGhhdCBvbiBXaW5kb3dzIE5ULCBzdWNoIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgbm90IGJlIHNlZW4KICAgICMgZnJvbSBET1MtYmFzZWQgdG9vbHMgbGlrZSBESkdQUCdzIG1ha2U7IHRoaXMgaXMgbm90IGFjdHVhbGx5IGEgcHJvYmxlbQogICAgIyBzaW5jZSBOVCBpcyBkZXRlY3RlZCBpbmRlcGVuZGVudGx5IGFib3ZlLiAgQnV0IGRvIG5vdCB0cnkgdG8gYmUgY2xldmVyIQogICAgIwogICAgaWZkZWYgd2luYm9vdGRpcgogICAgICBpZmRlZiB3aW5kaXIKCiAgICAgICAgUExBVEZPUk0gOj0gd2luZG93cwoKICAgICAgZW5kaWYKICAgIGVuZGlmCgogIGVuZGlmICAjIHRlc3QgTlQKCmVuZGlmICMgdGVzdCBQTEFURk9STSBhbnNpCgppZmVxICgkKFBMQVRGT1JNKSx3aW5kb3dzKQoKICBERUxFVEUgOj0gZGVsCiAgQ0FUICAgIDo9IHR5cGUKICBTRVAgICAgOj0gJChCQUNLU0xBU0gpCgogICMgU2V0dGluZyBDT1BZIGlzIGEgYml0IHRyaWNraWVyLiAgUGxhaW4gQ09QWSBvbiBOVCB3aWxsIG5vdCB3b3JrCiAgIyBjb3JyZWN0bHksIGJlY2F1c2UgaXQgd2lsbCB1cHBlcmNhc2UgOC4zIGZpbGVuYW1lcywgY3JlYXRpbmcgYQogICMgYENPTkZJRy5NSycgZmlsZSB3aGljaCBpc24ndCBmb3VuZCBsYXRlciBvbiBieSBgbWFrZScuCiAgIyBTaW5jZSB3ZSBkbyBub3Qgd2FudCB0aGF0LCB3ZSBuZWVkIHRvIGZvcmNlIGV4ZWN1dGlvbiBvZiBDTUQuRVhFLgogICMgVW5mb3J0dW5hdGVseSwgQ01ELkVYRSBpcyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MgOVguCiAgIyBTbyB3ZSBuZWVkIHRvIGhhY2suCiAgIwogICMgS3Vkb3MgdG8gRWxpIFphcmV0c2tpaSAoREpHUFAgZ3VydSkgdGhhdCBoZWxwZWQgZGVidWcgaXQuCiAgIyBEZXRhaWxzIGFyZSBhdmFpbGFibGUgaW4gdGhyZWFkcyBvZiB0aGUgZnJlZXR5cGUgbWFpbGluZyBsaXN0CiAgIyAoMjAwNC0xMS0xMSksIGFuZCB0aGVuIGluIHRoZSBkZXZlbCBtYWlsaW5nIGxpc3QgKDIwMDQtMTEtMjAgdG8gLTIzKS4KICAjCiAgaWZlcSAoJChPUyksV2luZG93c19OVCkKICAgIENPUFkgOj0gY21kLmV4ZSAvYyBjb3B5CiAgZWxzZQogICAgQ09QWSA6PSBjb3B5CiAgZW5kaWYgICMgdGVzdCBOVAoKCiAgIyBnY2MgTWFrZWZpbGUgYnkgZGVmYXVsdAogIENPTkZJR19GSUxFIDo9IHczMi1nY2MubWsKICBpZmVxICgkKGZpcnN0d29yZCAkKENDKSksY2MpCiAgICBDQyAgICAgICAgOj0gZ2NjCiAgZW5kaWYKCiAgaWZuZXEgKCQoZmluZHN0cmluZyBsaXN0LCQoTUFLRUNNREdPQUxTKSksKSAgIyB0ZXN0IGZvciB0aGUgImxpc3QiIHRhcmdldAogICAgZHVtcF90YXJnZXRfbGlzdDoKCSAgICBAZWNobyD/CgkgICAgQGVjaG8gJChQUk9KRUNUX1RJVExFKSBidWlsZCBzeXN0ZW0gLS0gc3VwcG9ydGVkIGNvbXBpbGVycwoJICAgIEBlY2hvIP8KCSAgICBAZWNobyBTZXZlcmFsIGNvbW1hbmQtbGluZSBjb21waWxlcnMgYXJlIHN1cHBvcnRlZCBvbiBXaW4zMjoKCSAgICBAZWNobyD/CgkgICAgQGVjaG8g//9tYWtlIHNldHVw////////////////////////////Z2NjICh3aXRoIE1pbmd3KQoJICAgIEBlY2hvIP//bWFrZSBzZXR1cCB2aXN1YWxj/////////////////01pY3Jvc29mdCBWaXN1YWwgQysrCgkgICAgQGVjaG8g//9tYWtlIHNldHVwIGJjYzMy////////////////////Qm9ybGFuZCBDL0MrKwoJICAgIEBlY2hvIP//bWFrZSBzZXR1cCBsY2P//////////////////////1dpbjMyLUxDQwoJICAgIEBlY2hvIP//bWFrZSBzZXR1cCBpbnRlbGP//////////////////0ludGVsIEMvQysrCgkgICAgQGVjaG8g/woKICAgIHNldHVwOiBkdW1wX3RhcmdldF9saXN0CiAgICAuUEhPTlk6IGR1bXBfdGFyZ2V0X2xpc3QgbGlzdAogIGVsc2UKICAgIHNldHVwOiBkb3Nfc2V0dXAKICBlbmRpZgoKICAjIGFkZGl0aW9uYWxseSwgd2UgcHJvdmlkZSBob29rcyBmb3IgdmFyaW91cyBvdGhlciBjb21waWxlcnMKICAjCiAgaWZuZXEgKCQoZmluZHN0cmluZyB2aXN1YWxjLCQoTUFLRUNNREdPQUxTKSksKSAgICAgIyBWaXN1YWwgQy9DKysKICAgIENPTkZJR19GSUxFIDo9IHczMi12Y2MubWsKICAgIENDICAgICAgICAgIDo9IGNsCiAgICB2aXN1YWxjOiBzZXR1cAogICAgLlBIT05ZOiB2aXN1YWxjCiAgZW5kaWYKCiAgaWZuZXEgKCQoZmluZHN0cmluZyBpbnRlbGMsJChNQUtFQ01ER09BTFMpKSwpICAgICAgIyBJbnRlbCBDL0MrKwogICAgQ09ORklHX0ZJTEUgOj0gdzMyLWludGwubWsKICAgIENDICAgICAgICAgIDo9IGNsCiAgICB2aXN1YWxjOiBzZXR1cAogICAgLlBIT05ZOiBpbnRlbGMKICBlbmRpZgoKICBpZm5lcSAoJChmaW5kc3RyaW5nIHdhdGNvbSwkKE1BS0VDTURHT0FMUykpLCkgICAgICAjIFdhdGNvbSBDL0MrKwogICAgQ09ORklHX0ZJTEUgOj0gdzMyLXdhdC5tawogICAgQ0MgICAgICAgICAgOj0gd2NjMzg2CiAgICB3YXRjb206IHNldHVwCiAgICAuUEhPTlk6IHdhdGNvbQogIGVuZGlmCgogIGlmbmVxICgkKGZpbmRzdHJpbmcgdmlzdWFsYWdlLCQoTUFLRUNNREdPQUxTKSksKSAgICMgVmlzdWFsIEFnZSBDKysKICAgIENPTkZJR19GSUxFIDo9IHczMi1pY2MubWsKICAgIENDICAgICAgICAgIDo9IGljYwogICAgdmlzdWFsYWdlOiBzZXR1cAogICAgLlBIT05ZOiB2aXN1YWxhZ2UKICBlbmRpZgoKICBpZm5lcSAoJChmaW5kc3RyaW5nIGxjYywkKE1BS0VDTURHT0FMUykpLCkgICAgICAgICAjIExDQy1XaW4zMgogICAgQ09ORklHX0ZJTEUgOj0gdzMyLWxjYy5tawogICAgQ0MgICAgICAgICAgOj0gbGNjCiAgICBsY2M6IHNldHVwCiAgICAuUEhPTlk6IGxjYwogIGVuZGlmCgogIGlmbmVxICgkKGZpbmRzdHJpbmcgbWluZ3czMiwkKE1BS0VDTURHT0FMUykpLCkgICAgICMgbWluZ3czMgogICAgQ09ORklHX0ZJTEUgOj0gdzMyLW1pbmd3MzIubWsKICAgIENDICAgICAgICAgIDo9IGdjYwogICAgbWluZ3czMjogc2V0dXAKICAgIC5QSE9OWTogbWluZ3czMgogIGVuZGlmCgogIGlmbmVxICgkKGZpbmRzdHJpbmcgYmNjMzIsJChNQUtFQ01ER09BTFMpKSwpICAgICAgICMgQm9ybGFuZCBDKysKICAgIENPTkZJR19GSUxFIDo9IHczMi1iY2MubWsKICAgIENDICAgICAgICAgIDo9IGJjYzMyCiAgICBiY2MzMjogc2V0dXAKICAgIC5QSE9OWTogYmNjMzIKICBlbmRpZgoKICBpZm5lcSAoJChmaW5kc3RyaW5nIGRldmVsLWJjYywkKE1BS0VDTURHT0FMUykpLCkgICAjIGRldmVsb3BtZW50IHRhcmdldAogICAgQ09ORklHX0ZJTEUgOj0gdzMyLWJjY2QubWsKICAgIENDICAgICAgICAgIDo9IGJjYzMyCiAgICBkZXZlbC1iY2M6IHNldHVwCiAgICAuUEhPTlk6IGRldmVsLWJjYwogIGVuZGlmCgogIGlmbmVxICgkKGZpbmRzdHJpbmcgZGV2ZWwtZ2NjLCQoTUFLRUNNREdPQUxTKSksKSAgICMgZGV2ZWxvcG1lbnQgdGFyZ2V0CiAgICBDT05GSUdfRklMRSA6PSB3MzItZGV2Lm1rCiAgICBDQyAgICAgICAgICA6PSBnY2MKICAgIGRldmVsLWdjYzogc2V0dXAKICAgIC5QSE9OWTogZGV2ZWwtZ2NjCiAgZW5kaWYKCmVuZGlmICAgIyB0ZXN0IFBMQVRGT1JNIHdpbmRvd3MKCgojIEVPRgo=