IyBwaG9uZXRpYyBzdWdnZXN0aW9ucyBieSBQSE9ORSBhbmQgb3B0aW9uYWwgcGggZmllbGQgb2YgZGljdGlvbmFyeSB3b3JkcwojIERvY3VtZW50YXRpb25vIG9mIFBIT05FOiBodHRwOi8vYXNwZWxsLm5ldC9tYW4taHRtbC9QaG9uZXRpYy1Db2RlLmh0bWwKCiMgICBwaG9uZXRpY19lbmdsaXNoLmggLSBwaG9uZXRpYyB0cmFuc2Zvcm1hdGlvbiBydWxlcyBmb3IgdXNlIHdpdGggcGhvbmV0aWMuYwojICAgQ29weXJpZ2h0IChDKSAyMDAwIEJqw7ZybiBKYWNrZQojCiMgICBUaGlzIHJ1bGUgc2V0IGlzIGJhc2VkIG9uIExhd3JlbmNlIFBoaWxsaXBzIG9yaWdpbmFsIG1ldGFwaG9uZSAKIyAgIGFsZ29yaXRobSB3aXRoIG1vZGlmaWNhdGlvbnMgbWFkZSBieSBNaWNoYWVsIEt1aG4gaW4gaGlzCiMgICBDIGltcGxhbnRhdGlvbiwgbW9yZSBtb2RpZmljYXRpb25zIGJ5IEJqw7ZybiBKYWNrZSB3aGVuCiMgICBjb252ZXJ0aW5nIHRoZSBhbGdvcml0aG0gdG8gYSBydWxlIHNldCBhbmQgbWlub3IgCiMgICB0b3VjaCB1cHMgYnkgS2V2aW4gQXRraW5zb24KIwojICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgojICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwojICAgTGljZW5zZSB2ZXJzaW9uIDIuMSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKIwojICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKIyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKIyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKIwojICAgQmrDtnJuIEphY2tlIG1heSBiZSByZWFjaGVkIGJ5IGVtYWlsIGF0IGJqb2Vybi5qYWNrZUBnbXguZGUKIwojICAgQ2hhbmdlbG9nOgojCiMgICAyMDAwLTAxLTA1ICBCasO2cm4gSmFja2UgPGJqb2Vybi5qYWNrZUBnbXguZGU+CiMgICAgICAgICAgICAgICAtIGZpcnN0IHZlcnNpb24gd2l0aCB0cmFuc2xhdGlvbiBydWxlcyBkZXJpdmVkIGZyb20KIyAgICAgICAgICAgICAgICAgbWV0YXBob25lLmNjIGRpc3RyaWJ1dGVkIHdpdGggYXNwZWxsIDAuMjguMwojICAgICAgICAgICAgICAgLSAiVEgiIGlzIG5vdyByZXByZXNlbnRhdGVkIGFzICJAIiBiZWNhdXNlICIwIiBpcyBhCiMgICAgICAgICAgICAgICAgIG1ldGEgY2hhcmFjdGVyCiMgICAgICAgICAgICAgICAtIHJlbW92ZWQgVEgoIXZvd2VsKSAtLT4gVDsgYWx3YXlzIHVzZSBUSCAtLT4gIyBpbnN0ZWFkCiMgICAgICAgICAgICAgICAtIGRyb3BwZWQgIl5BRSIgLT4gIkUiIChyZWR1bmRhbnQpCiMgICAgICAgICAgICAgICAtICJpbmciIGlzIHRyYW5zZm9ybWVkIHRvICJOIiwgbm90ICJOSyIKIyAgICAgICAgICAgICAgIC0gIlNDSChFTykiIHRyYW5zZm9ybXMgdG8gIlNLIiBub3cKIyAgICAgICAgICAgICAgIC0gYWRkZWQgUiAtLT4gU0lMRU5UIGlmIChhZnRlciBhIHZvd2VsKSBhbmQgbm8gKHZvd2VsIG9yCiMgICAgICAgICAgICAgICAgICJ5IiBmb2xsb3dzKSBsaWtlIGluICJNYXJjeSIgb3IgImFib3J0IgojICAgICAgICAgICAgICAgLSBIIGlzIFNJTEVOVCBpbiBSSCBhdCBiZWdpbm5pbmcgb2Ygd29yZHMKIyAgICAgICAgICAgICAgIC0gSCBpcyBTSUxFTlQgaWYgdm93ZWwgbGVhZHMgYW5kICJZIiBmb2xsb3dzCiMgICAgICAgICAgICAgICAtIHNvbWUgIi5PVUdILi4iICAtLT4gLi4uRiBleGNlcHRpb25zIGFkZGVkCiMgICAgICAgICAgICAgICAtICJeViIgdHJhbnNmb3JtcyB0byAiVyIKIyAgIDIwMDAtMDEtMDcgIEtldmluIEF0a2luc29uIDxrZXZpbmF0a0Bob21lLmNvbT4KIyAgICAgICAgICAgICAgIENvbnZlcnRlZCBmcm9tIGhlYWRlciB0byBkYXRhIGZpbGUuCiMKIyAgIDIwMDctMDgtMjMgIEzDoXN6bMOzIE7DqW1ldGggPG5lbWV0aCBBVCBPT28+CiMgICAgICAgICAgICAgICBBZGQgUEhPTkUgaGVhZGVyIGFuZCBQSE9ORSBrZXl3b3JkcwojCiMgdmVyc2lvbiAxLjEKClBIT05FIDEwNQpQSE9ORSBBSChBRUlPVVkpLV4gICAgICAgICAqSApQSE9ORSBBUihBRUlPVVkpLV4gICAgICAgICAqUgpQSE9ORSBBKEhSKV4gICAgICAgICAgICAgICAqClBIT05FIEFeICAgICAgICAgICAgICAgICAgICoKUEhPTkUgQUgoQUVJT1VZKS0gICAgICAgICAgSApQSE9ORSBBUihBRUlPVVkpLSAgICAgICAgICBSClBIT05FIEEoSFIpICAgICAgICAgICAgICAgIF8KUEhPTkUgQkItICAgICAgICAgICAgICAgICAgXwpQSE9ORSBCICAgICAgICAgICAgICAgICAgICBCClBIT05FIENRLSAgICAgICAgICAgICAgICAgIF8KUEhPTkUgQ0lBICAgICAgICAgICAgICAgICAgWApQSE9ORSBDSCAgICAgICAgICAgICAgICAgICBYClBIT05FIEMoRUlZKS0gICAgICAgICAgICAgIFMKUEhPTkUgQ0sgICAgICAgICAgICAgICAgICAgSwpQSE9ORSBDT1VHSF4gICAgICAgICAgICAgICBLRgpQSE9ORSBDQzwgICAgICAgICAgICAgICAgICBDClBIT05FIEMgICAgICAgICAgICAgICAgICAgIEsKUEhPTkUgREcoRUlZKSAgICAgICAgICAgICAgSwpQSE9ORSBERC0gICAgICAgICAgICAgICAgICBfClBIT05FIEQgICAgICAgICAgICAgICAgICAgIFQKUEhPTkUgyTwgICAgICAgICAgICAgICAgICAgRQpQSE9ORSBFSChBRUlPVVkpLV4gICAgICAgICAqSApQSE9ORSBFUihBRUlPVVkpLV4gICAgICAgICAqUgpQSE9ORSBFKEhSKV4gICAgICAgICAgICAgICAqClBIT05FIEVOT1VHSF4kICAgICAgICAgICAgICpORgpQSE9ORSBFXiAgICAgICAgICAgICAgICAgICAqClBIT05FIEVIKEFFSU9VWSktICAgICAgICAgIEgKUEhPTkUgRVIoQUVJT1VZKS0gICAgICAgICAgUgpQSE9ORSBFKEhSKSAgICAgICAgICAgICAgICBfClBIT05FIEZGLSAgICAgICAgICAgICAgICAgIF8KUEhPTkUgRiAgICAgICAgICAgICAgICAgICAgRgpQSE9ORSBHTl4gICAgICAgICAgICAgICAgICBOClBIT05FIEdOJCAgICAgICAgICAgICAgICAgIE4KUEhPTkUgR05TJCAgICAgICAgICAgICAgICAgTlMKUEhPTkUgR05FRCQgICAgICAgICAgICAgICAgTgpQSE9ORSBHSChBRUlPVVkpLSAgICAgICAgICBLClBIT05FIEdIICAgICAgICAgICAgICAgICAgIF8KUEhPTkUgR0c5ICAgICAgICAgICAgICAgICAgSwpQSE9ORSBHICAgICAgICAgICAgICAgICAgICBLClBIT05FIEggICAgICAgICAgICAgICAgICAgIEgKUEhPTkUgSUgoQUVJT1VZKS1eICAgICAgICAgKkgKUEhPTkUgSVIoQUVJT1VZKS1eICAgICAgICAgKlIKUEhPTkUgSShIUileICAgICAgICAgICAgICAgKgpQSE9ORSBJXiAgICAgICAgICAgICAgICAgICAqClBIT05FIElORzYgICAgICAgICAgICAgICAgIE4KUEhPTkUgSUgoQUVJT1VZKS0gICAgICAgICAgSApQSE9ORSBJUihBRUlPVVkpLSAgICAgICAgICBSClBIT05FIEkoSFIpICAgICAgICAgICAgICAgIF8KUEhPTkUgSiAgICAgICAgICAgICAgICAgICAgSwpQSE9ORSBLTl4gICAgICAgICAgICAgICAgICBOClBIT05FIEtLLSAgICAgICAgICAgICAgICAgIF8KUEhPTkUgSyAgICAgICAgICAgICAgICAgICAgSwpQSE9ORSBMQVVHSF4gICAgICAgICAgICAgICBMRgpQSE9ORSBMTC0gICAgICAgICAgICAgICAgICBfClBIT05FIEwgICAgICAgICAgICAgICAgICAgIEwKUEhPTkUgTUIkICAgICAgICAgICAgICAgICAgTQpQSE9ORSBNTSAgICAgICAgICAgICAgICAgICBNClBIT05FIE0gICAgICAgICAgICAgICAgICAgIE0KUEhPTkUgTk4tICAgICAgICAgICAgICAgICAgXwpQSE9ORSBOICAgICAgICAgICAgICAgICAgICBOClBIT05FIE9IKEFFSU9VWSktXiAgICAgICAgICpIClBIT05FIE9SKEFFSU9VWSktXiAgICAgICAgICpSClBIT05FIE8oSFIpXiAgICAgICAgICAgICAgICoKUEhPTkUgT14gICAgICAgICAgICAgICAgICAgKgpQSE9ORSBPSChBRUlPVVkpLSAgICAgICAgICBIClBIT05FIE9SKEFFSU9VWSktICAgICAgICAgIFIKUEhPTkUgTyhIUikgICAgICAgICAgICAgICAgXwpQSE9ORSBQSCAgICAgICAgICAgICAgICAgICBGClBIT05FIFBOXiAgICAgICAgICAgICAgICAgIE4KUEhPTkUgUFAtICAgICAgICAgICAgICAgICAgXwpQSE9ORSBQICAgICAgICAgICAgICAgICAgICBQClBIT05FIFEgICAgICAgICAgICAgICAgICAgIEsKUEhPTkUgUkheICAgICAgICAgICAgICAgICAgUgpQSE9ORSBST1VHSF4gICAgICAgICAgICAgICBSRgpQSE9ORSBSUi0gICAgICAgICAgICAgICAgICBfClBIT05FIFIgICAgICAgICAgICAgICAgICAgIFIKUEhPTkUgU0NIKEVPVSktICAgICAgICAgICAgU0sKUEhPTkUgU0MoSUVZKS0gICAgICAgICAgICAgUwpQSE9ORSBTSCAgICAgICAgICAgICAgICAgICBYClBIT05FIFNJKEFPKS0gICAgICAgICAgICAgIFgKUEhPTkUgU1MtICAgICAgICAgICAgICAgICAgXwpQSE9ORSBTICAgICAgICAgICAgICAgICAgICBTClBIT05FIFRJKEFPKS0gICAgICAgICAgICAgIFgKUEhPTkUgVEggICAgICAgICAgICAgICAgICAgQApQSE9ORSBUQ0gtLSAgICAgICAgICAgICAgICBfClBIT05FIFRPVUdIXiAgICAgICAgICAgICAgIFRGClBIT05FIFRULSAgICAgICAgICAgICAgICAgIF8KUEhPTkUgVCAgICAgICAgICAgICAgICAgICAgVApQSE9ORSBVSChBRUlPVVkpLV4gICAgICAgICAqSApQSE9ORSBVUihBRUlPVVkpLV4gICAgICAgICAqUgpQSE9ORSBVKEhSKV4gICAgICAgICAgICAgICAqClBIT05FIFVeICAgICAgICAgICAgICAgICAgICoKUEhPTkUgVUgoQUVJT1VZKS0gICAgICAgICAgSApQSE9ORSBVUihBRUlPVVkpLSAgICAgICAgICBSClBIT05FIFUoSFIpICAgICAgICAgICAgICAgIF8KUEhPTkUgVl4gICAgICAgICAgICAgICAgICAgVwpQSE9ORSBWICAgICAgICAgICAgICAgICAgICBGClBIT05FIFdSXiAgICAgICAgICAgICAgICAgIFIKUEhPTkUgV0heICAgICAgICAgICAgICAgICAgVwpQSE9ORSBXKEFFSU9VKS0gICAgICAgICAgICBXClBIT05FIFheICAgICAgICAgICAgICAgICAgIFMKUEhPTkUgWCAgICAgICAgICAgICAgICAgICAgS1MKUEhPTkUgWShBRUlPVSktICAgICAgICAgICAgWQpQSE9ORSBaWi0gICAgICAgICAgICAgICAgICBfClBIT05FIFogICAgICAgICAgICAgICAgICAgIFMKCiNUaGUgcnVsZXMgaW4gYSBkaWZmZXJlbnQgdmlldzoKIwojIEV4Y2VwdGlvbnM6CiMKIyAgQmVnaW5uaW5nIG9mIHdvcmQ6ICJnbiIsICJrbi0iLCAicG4tIiwgIndyLSIgIC0tLS0+IGRyb3AgZmlyc3QgbGV0dGVyCiMgICAgICAgICAgICAgICAgICAgICAiQWViZXJzb2xkIiwgIkduYWd5IiwgIktudXRoIiwgIlBuaWV3c2tpIiwgIldyaWdodCIKIwojICBCZWdpbm5pbmcgb2Ygd29yZDogIngiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tPiBjaGFuZ2UgdG8gInMiCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgaW4gIkRlbmcgWGlhb3BlbmciCiMKIyAgQmVnaW5uaW5nIG9mIHdvcmQ6ICJ3aC0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLT4gY2hhbmdlIHRvICJ3IgojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGluICJXaGFsZW4iCiMgIEJlZ2lubmluZyBvZiB3b3JkOiBsZWFkaW5nIHZvd2VscyBhcmUgdHJhbnNmb3JtZWQgdG8gIioiCiMKIyAgIltjcnRdb3VnaCIgYW5kICJlbm91Z2giIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiAiRiIgc291bmQKIwojCiMgIEEgLS0+IEEgICAgICBhdCBiZWdpbm5pbmcKIyAgICAgICAgICBfICAgICAgb3RoZXJ3aXNlCiMKIyAgQiAtLT4gQiAgICAgIHVubGVzcyBhdCB0aGUgZW5kIG9mIHdvcmQgYWZ0ZXIgIm0iLCBhcyBpbiAiZHVtYiIsICJNY0NvbWIiCiMKIyAgQyAtLT4gWCAgICAgIChzaCkgaWYgIi1jaWEtIiBvciAiLWNoLSIKIyAgICAgICAgICBTICAgICAgaWYgIi1jaS0iLCAiLWNlLSIsIG9yICItY3ktIgojICAgICAgICAgICAgICAgICBTSUxFTlQgaWYgIi1zY2ktIiwgIi1zY2UtIiwgb3IgIi1zY3ktIiwgb3IgIi1jcS0iCiMgICAgICAgICAgSyAgICAgIG90aGVyd2lzZSwgaW5jbHVkaW5nIGluICItc2NoLSIKIwojICBEIC0tPiBLICAgICAgaWYgaW4gIi1kZ2UtIiwgIi1kZ3ktIiwgb3IgIi1kZ2ktIgojICAgICAgICAgIFQgICAgICBvdGhlcndpc2UKIwojICBFIC0tPiBBICAgICAgYXQgYmVnaW5uaWcKIyAgICAgICAgICBfICAgICAgU0lMRU5UIG90aGVyd2lzZQojICAKIyAgRiAtLT4gRgojCiMgIEcgLS0+ICAgICAgICBTSUxFTlQgaWYgaW4gIi1naC0iIGFuZCBub3QgYXQgZW5kIG9yIGJlZm9yZSBhIHZvd2VsCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gIi1nbiIgb3IgIi1nbmVkIiBvciAiLWducyIKIyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluICItZGdlLSIgZXRjLiwgYXMgaW4gYWJvdmUgcnVsZQojICAgICAgICAgIEsgICAgICBpZiBiZWZvcmUgImkiLCBvciAiZSIsIG9yICJ5IiBpZiBub3QgZG91YmxlICJnZyIKIwojICAgICAgICAgIEsgICAgICBvdGhlcndpc2UgKGluY2wuICJHRyIhKQojCiMgIEggLS0+ICAgICAgICBTSUxFTlQgaWYgYWZ0ZXIgdm93ZWwgYW5kIG5vIHZvd2VsIG9yICJZIiBmb2xsb3dzCiMgICAgICAgICAgICAgICAgICAgICAgICBvciBhZnRlciAiLWNoLSIsICItc2gtIiwgIi1waC0iLCAiLXRoLSIsICItZ2gtIgojICAgICAgICAgICAgICAgICAgICAgICAgb3IgYWZ0ZXIgInJoLSIgYXQgYmVnaW5uaW5nCiMgICAgICAgICAgSCAgICAgIG90aGVyd2lzZQojCiMgIEkgLS0+IEEgICAgICBhdCBiZWdpbm5pbmcKIyAgICAgICAgICBfICAgICAgU0lMRU5UIG90aGVyd2lzZQojCiMgIEogLS0+IEsKIwojICBLIC0tPiAgICAgICAgU0lMRU5UIGlmIGFmdGVyICJjIgojICAgICAgICAgIEsgICAgICBvdGhlcndpc2UKIwojICBMIC0tPiBMCiMKIyAgTSAtLT4gTQojICAKIyAgTiAtLT4gTgojCiMgIE8gLS0+IEEgICAgICBhdCBiZWdpbm5pbmcKIyAgICAgICAgICBfICAgICAgU0lMRU5UIG90aGVyd2lzZQojCiMgIFAgLS0+IEYgICAgICBpZiBiZWZvcmUgImgiCiMgICAgICAgICAgUCAgICAgIG90aGVyd2lzZQojCiMgIFEgLS0+IEsKIwojICBSIC0tPiAgICAgICAgU0lMRU5UIGlmIGFmdGVyIHZvd2VsIGFuZCBubyB2b3dlbCBvciAiWSIgZm9sbG93cwojICAgICAgICAgIFIgICAgICBvdGhlcndpc2UKIwojICBTIC0tPiBYICAgICAgKHNoKSBpZiBiZWZvcmUgImgiIG9yIGluICItc2lvLSIgb3IgIi1zaWEtIgojICAgICAgICAgIFNLICAgICBpZiBmb2xsb3dlZCBieSAiY2goZW8pIiAoU0NIKEVPKSkKIyAgICAgICAgICBTICAgICAgb3RoZXJ3aXNlCiMKIyAgVCAtLT4gWCAgICAgIChzaCkgaWYgIi10aWEtIiBvciAiLXRpby0iCiMgICAgICAgICAgMCAgICAgICh0aCkgaWYgYmVmb3JlICJoIgojICAgICAgICAgICAgICAgICBzaWxlbnQgaWYgaW4gIi10Y2gtIgojICAgICAgICAgIFQgICAgICBvdGhlcndpc2UKIwojICBVIC0tPiBBICAgICAgYXQgYmVnaW5uaW5nCiMgICAgICAgICAgXyAgICAgIFNJTEVOVCBvdGhlcndpc2UKIwojICBWIC0tPiBWICAgICAgaWYgZmlyc3QgbGV0dGVyIG9mIHdvcmQKIyAgICAgICAgICBGICAgICAgb3RoZXJ3aXNlCiMKIyAgVyAtLT4gICAgICAgIFNJTEVOVCBpZiBub3QgZm9sbG93ZWQgYnkgYSB2b3dlbAojICAgICAgICAgIFcgICAgICBpZiBmb2xsb3dlZCBieSBhIHZvd2VsCiMKIyAgWCAtLT4gS1MKIwojICBZIC0tPiAgICAgICAgU0lMRU5UIGlmIG5vdCBmb2xsb3dlZCBieSBhIHZvd2VsCiMgICAgICAgICAgWSAgICAgIGlmIGZvbGxvd2VkIGJ5IGEgdm93ZWwKIyAKIyAgWiAtLT4gUwo=