IwojIE1ha2VmaWxlIGZvciBGcmVlVHlwZTIgbGluayBsaWJyYXJ5IHVzaW5nIHBwYy1tb3JwaG9zLWdjYy0yLjk1LjMtYmluLnRnegojIChnY2MgMi45NS4zIGhvc3RlZCBvbiA2OGstQW1pZ2EgcHJvZHVjaW5nIE1vcnBoT1MtUFBDLWJpbmFyaWVzIGZyb20KIyBodHRwOi8vd3d3Lm1vcnBob3MuZGUpCiMKCgojIENvcHlyaWdodCAyMDA1LCAyMDA2LCAyMDA3IGJ5CiMgV2VybmVyIExlbWJlcmcgYW5kIERldGxlZiBX/HJrbmVyLgojCiMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEZyZWVUeXBlIHByb2plY3QsIGFuZCBtYXkgb25seSBiZSB1c2VkLCBtb2RpZmllZCwKIyBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsCiMgTElDRU5TRS5UWFQuICBCeSBjb250aW51aW5nIHRvIHVzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoaXMgZmlsZSB5b3UKIyBpbmRpY2F0ZSB0aGF0IHlvdSBoYXZlIHJlYWQgdGhlIGxpY2Vuc2UgYW5kIHVuZGVyc3RhbmQgYW5kIGFjY2VwdCBpdAojIGZ1bGx5LgoKCiMKIyB0byBidWlsZCBmcm9tIHRoZSBidWlsZHMvYW1pZ2EgZGlyZWN0b3J5IGNhbGwKIwojICBtYWtlIGFzc2lnbgojICBtYWtlCiMKIyBZb3VyIHByb2dyYW1zIHNvdXJjZSBjb2RlIHNob3VsZCBzdGFydCB3aXRoIHRoaXMKIyAodW5jb21tZW50IHRoZSBwYXJ0cyB5b3UgZG8gbm90IG5lZWQgdG8ga2VlcCB0aGUgcHJvZ3JhbSBzbWFsbCk6CiMgLS0tODwtLS0KI2RlZmluZSBGVF9VU0VfQVVUT0ZJVCAvLyBhdXRvZml0dGVyCiNkZWZpbmUgRlRfVVNFX1JBU1RFUiAgLy8gbW9ub2Nocm9tZSByYXN0ZXJpemVyCiNkZWZpbmUgRlRfVVNFX1NNT09USCAgLy8gYW50aS1hbGlhc2luZyByYXN0ZXJpemVyCiNkZWZpbmUgRlRfVVNFX1RUICAgICAgLy8gdHJ1ZXR5cGUgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfVDEgICAgICAvLyB0eXBlMSBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9UNDIgICAgIC8vIHR5cGU0MiBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9UMUNJRCAgIC8vIGNpZC1rZXllZCB0eXBlMSBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9DRkYgICAgIC8vIG9wZW50eXBlIGZvbnQgZHJpdmVyCiNkZWZpbmUgRlRfVVNFX0JERiAgICAgLy8gYmRmIGJpdG1hcCBmb250IGRyaXZlcgojZGVmaW5lIEZUX1VTRV9QQ0YgICAgIC8vIHBjZiBiaXRtYXAgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfUEZSICAgICAvLyBwZnIgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfV0lORk5UICAvLyB3aW5kb3dzIC5mbnR8LmZvbiBiaXRtYXAgZm9udCBkcml2ZXIKI2RlZmluZSBGVF9VU0VfT1RWICAgICAvLyBvcGVudHlwZSB2YWxpZGF0b3IKI2RlZmluZSBGVF9VU0VfR1hWICAgICAvLyB0cnVldHlwZSBneCB2YWxpZGF0b3IKI2luY2x1ZGUgIkZUOnNyYy9iYXNlL2Z0aW5pdC5jIgojIC0tLTg8LS0tCiMKIyBsaW5rIHlvdXIgcHJvZ3JhbXMgd2l0aCBsaWJmdDJfcHBjLmEgYW5kIGVpdGhlciBmdHN5c3RlbS5wcGMubyBvciBmdHN5c3RlbXB1cmUucHBjLm8KIyAoYW5kIGVpdGhlciBmdGRlYnVnLnBwYy5vIG9yIGZ0ZGVidWdwdXJlLnBwYy5vIGlmIHlvdSBlbmFibGVkIEZUX0RFQlVHX0xFVkVMX0VSUk9SIG9yCiMgRlRfREVCVUdfTEVWRUxfVFJBQ0UgaW4gaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaCkuCgphbGw6CWxpYmZ0Ml9wcGMuYSBmdHN5c3RlbS5wcGMubyBmdHN5c3RlbXB1cmUucHBjLm8KCmFzc2lnbjoKCWFzc2lnbiBGVDogLy8KCkZUU1JDID0gL0ZUL3NyYwoKQ0MgPSAgICAgcHBjLW1vcnBob3MtZ2NjCkFSID0gICAgIHBwYy1tb3JwaG9zLWFyIHJjClJBTkxJQiA9IHBwYy1tb3JwaG9zLXJhbmxpYgpMRCA9ICAgICBwcGMtbW9ycGhvcy1sZApDRkxBR1MgPSAtREZUMl9CVUlMRF9MSUJSQVJZIC1PMiAtSS9lbXUvZW11bGluY2x1ZGUvaW5jbHVkZWdjYyAtSS9lbXUvaW5jbHVkZSAtSWluY2x1ZGUgLUkkKEZUU1JDKSAtSS9GVC9pbmNsdWRlCgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgYmFzZQojCmZ0YmFzZS5wcGMubzogJChGVFNSQykvYmFzZS9mdGJhc2UuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgpmdGluaXQucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnRpbml0LmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAoKZnRzeXN0ZW0ucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnRzeXN0ZW0uYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgojIHB1cmUgdmVyc2lvbiBmb3IgdXNlIGluIHJ1bi10aW1lIGxpYnJhcnkgZXRjCmZ0c3lzdGVtcHVyZS5wcGMubzogc3JjL2Jhc2UvZnRzeXN0ZW0uYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgpmdGRlYnVnLnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0ZGVidWcuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgojIHB1cmUgdmVyc2lvbiBmb3IgdXNlIGluIHJ1bi10aW1lIGxpYnJhcnkgZXRjCmZ0ZGVidWdwdXJlLnBwYy5vOiBzcmMvYmFzZS9mdGRlYnVnLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IGJhc2UgZXh0ZW5zaW9ucwojCmZ0YmJveC5wcGMubzogJChGVFNSQykvYmFzZS9mdGJib3guYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgpmdGJkZi5wcGMubzogJChGVFNSQykvYmFzZS9mdGJkZi5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKCmZ0Yml0bWFwLnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0Yml0bWFwLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAoKZnRnYXNwLnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0Z2FzcC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKCmZ0Z2x5cGgucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnRnbHlwaC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKCmZ0Z3h2YWwucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnRneHZhbC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKCmZ0bGNkZmlsLnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0bGNkZmlsLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAoKZnRtbS5wcGMubzogJChGVFNSQykvYmFzZS9mdG1tLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAoKZnRvdHZhbC5wcGMubzogJChGVFNSQykvYmFzZS9mdG90dmFsLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAoKZnRwZnIucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnRwZnIuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgpmdHN0cm9rZS5wcGMubzogJChGVFNSQykvYmFzZS9mdHN0cm9rZS5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKCmZ0c3ludGgucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnRzeW50aC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKCmZ0dHlwZTEucHBjLm86ICQoRlRTUkMpL2Jhc2UvZnR0eXBlMS5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKCmZ0d2luZm50LnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0d2luZm50LmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAoKZnR4Zjg2LnBwYy5vOiAkKEZUU1JDKS9iYXNlL2Z0eGY4Ni5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBhdXRvZml0dGluZyBtb2R1bGUKIwphdXRvZml0LnBwYy5vOiAkKEZUU1JDKS9hdXRvZml0L2F1dG9maXQuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgcG9zdHNjcmlwdCBoaW50aW5nIG1vZHVsZQojCnBzaGludGVyLnBwYy5vOiAkKEZUU1JDKS9wc2hpbnRlci9wc2hpbnRlci5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBQUyBzdXBwb3J0IG1vZHVsZQojCnBzYXV4LnBwYy5vOiAkKEZUU1JDKS9wc2F1eC9wc2F1eC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBQUyBnbHlwaCBuYW1lcyBtb2R1bGUKIwpwc25hbWVzLnBwYy5vOiAkKEZUU1JDKS9wc25hbWVzL3BzbmFtZXMuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgbW9ub2Nocm9tZSByYXN0ZXIgbW9kdWxlCiMKcmFzdGVyLnBwYy5vOiAkKEZUU1JDKS9yYXN0ZXIvcmFzdGVyLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IGFudGktYWxpYXNpbmcgcmFzdGVyIG1vZHVsZQojCnNtb290aC5wcGMubzogJChGVFNSQykvc21vb3RoL3Ntb290aC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSAnc2ZudCcgbW9kdWxlCiMKc2ZudC5wcGMubzogJChGVFNSQykvc2ZudC9zZm50LmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IGdseXBoIGFuZCBpbWFnZSBjYWNoaW5nIHN5c3RlbQojCmZ0Y2FjaGUucHBjLm86ICQoRlRTUkMpL2NhY2hlL2Z0Y2FjaGUuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgT3BlblR5cGUgZm9udCBkcml2ZXIKIwpjZmYucHBjLm86ICQoRlRTUkMpL2NmZi9jZmYuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgVHJ1ZVR5cGUgZm9udCBkcml2ZXIKIwp0cnVldHlwZS5wcGMubzogJChGVFNSQykvdHJ1ZXR5cGUvdHJ1ZXR5cGUuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgVHlwZTEgZm9udCBkcml2ZXIKIwp0eXBlMS5wcGMubzogJChGVFNSQykvdHlwZTEvdHlwZTEuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgVHlwZTQyIGZvbnQgZHJpdmVyCiMKdHlwZTQyLnBwYy5vOiAkKEZUU1JDKS90eXBlNDIvdHlwZTQyLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IENJRC1rZXllZCBUeXBlMSBmb250IGRyaXZlcgojCnR5cGUxY2lkLnBwYy5vOiAkKEZUU1JDKS9jaWQvdHlwZTFjaWQuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgQkRGIGJpdG1hcCBmb250IGRyaXZlcgojCmJkZi5wcGMubzogJChGVFNSQykvYmRmL2JkZi5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBQQ0YgYml0bWFwIGZvbnQgZHJpdmVyCiMKcGNmLnBwYy5vOiAkKEZUU1JDKS9wY2YvcGNmLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IGd6aXAgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBQQ0YgYml0bWFwIGZvbnRzCiMKZ3ppcC5wcGMubzogJChGVFNSQykvZ3ppcC9mdGd6aXAuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgY29tcHJlc3Mgc3VwcG9ydCBmb3IgY29tcHJlc3NlZCBQQ0YgYml0bWFwIGZvbnRzCiMKbHp3LnBwYy5vOiAkKEZUU1JDKS9sencvZnRsencuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgojCiMgRnJlZVR5cGUyIGxpYnJhcnkgUEZSIGZvbnQgZHJpdmVyCiMKcGZyLnBwYy5vOiAkKEZUU1JDKS9wZnIvcGZyLmMKCSQoQ0MpIC1jICQoQ0ZMQUdTKSAtbyAkQCAkPAoKIwojIEZyZWVUeXBlMiBsaWJyYXJ5IFdpbmRvd3MgRk5UL0ZPTiBiaXRtYXAgZm9udCBkcml2ZXIKIwp3aW5mbnQucHBjLm86ICQoRlRTUkMpL3dpbmZvbnRzL3dpbmZudC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBUcnVlVHlwZUdYIFZhbGlkYXRvcgojCmd4dmFsaWQucHBjLm86ICQoRlRTUkMpL2d4dmFsaWQvZ3h2YWxpZC5jCgkkKENDKSAtYyAkKENGTEFHUykgLW8gJEAgJDwKCiMKIyBGcmVlVHlwZTIgbGlicmFyeSBPcGVuVHlwZSB2YWxpZGF0b3IKIwpvdHZhbGlkLnBwYy5vOiAkKEZUU1JDKS9vdHZhbGlkL290dmFsaWQuYwoJJChDQykgLWMgJChDRkxBR1MpIC1vICRAICQ8CgpCQVNFUFBDID0gZnRiYXNlLnBwYy5vIGZ0YmJveC5wcGMubyBmdGJkZi5wcGMubyBmdGJpdG1hcC5wcGMubyAgICAgIFwKCSAgZnRnYXNwLnBwYy5vIGZ0Z2x5cGgucHBjLm8gZnRneHZhbGlkLnBwYy5vIGZ0bGNkZmlsLnBwYy5vIFwKCSAgZnRtbS5wcGMubyBmdG90dmFsLnBwYy5vIGZ0cGZyLnBwYy5vIGZ0c3Ryb2tlLnBwYy5vICAgICAgIFwKCSAgZnRzeW50aC5wcGMubyBmdHR5cGUxLnBwYy5vIGZ0d2luZm50LnBwYy5vIGZ0eGY4Ni5wcGMubwoKREVCVUdQUEMgPSBmdGRlYnVnLnBwYy5vIGZ0ZGVidWdwdXJlLnBwYy5vCgpBRklUUFBDID0gYXV0b2ZpdC5wcGMubwoKR1hWUFBDID0gZ3h2YWxpZC5wcGMubwoKT1RWUFBDID0gb3R2YWxpZC5wcGMubwoKUFNQUEMgPSBwc2F1eC5wcGMubyBwc25hbWVzLnBwYy5vIHBzaGludGVyLnBwYy5vCgpSQVNURVJQUEMgPSByYXN0ZXIucHBjLm8gc21vb3RoLnBwYy5vCgpGT05URFBQQyA9IGNmZi5wcGMubyB0eXBlMS5wcGMubyB0eXBlNDIucHBjLm8gdHlwZTFjaWQucHBjLm8gdHJ1ZXR5cGUucHBjLm9cCgkgICBiZGYucHBjLm8gcGNmLnBwYy5vIHBmci5wcGMubyB3aW5mbnQucHBjLm8KCmxpYmZ0Ml9wcGMuYTogICAgJChCQVNFUFBDKSAkKEFGSVRQUEMpICQoR1hWUFBDKSAkKE9UVlBQQykgJChQU1BQQykgJChSQVNURVJQUEMpIHNmbnQucHBjLm8gZnRjYWNoZS5wcGMubyAkKEZPTlREUFBDKSBnemlwLnBwYy5vIGx6dy5wcGMubwoJJChBUikgJEAgJChCQVNFUFBDKSAkKEFGSVRQUEMpICQoR1hWUFBDKSAkKE9UVlBQQykgJChQU1BQQykgJChSQVNURVJQUEMpIHNmbnQucHBjLm8gZnRjYWNoZS5wcGMubyAkKEZPTlREUFBDKSBnemlwLnBwYy5vIGx6dy5wcGMubwoJLUAgKCQoUkFOTElCKSAkQCB8fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKCiNMb2NhbCBWYXJpYWJsZXM6CiNjb2Rpbmc6IGxhdGluLTEKI0VuZDoK