LyogQ29weXJpZ2h0IDIwMDcsIEdvb2dsZSBJbmMuICovCgojaW5jbHVkZSA8ZGVidWcuaD4KI2luY2x1ZGUgPGRldi9ncGlvLmg+CiNpbmNsdWRlIDxrZXJuZWwvdGhyZWFkLmg+CiNpbmNsdWRlIDxtZGRpLmg+CgojZGVmaW5lIE1ERElfQ0xJRU5UX0NPUkVfQkFTRSAgMHgxMDgwMDAKI2RlZmluZSBMQ0RfQ09OVFJPTF9CTE9DS19CQVNFIDB4MTEwMDAwCiNkZWZpbmUgU1BJX0JMT0NLX0JBU0UJCSAweDEyMDAwMAojZGVmaW5lIEkyQ19CTE9DS19CQVNFCQkgMHgxMzAwMDAKI2RlZmluZSBQV01fQkxPQ0tfQkFTRQkJIDB4MTQwMDAwCiNkZWZpbmUgR1BJT19CTE9DS19CQVNFCQkweDE1MDAwMAojZGVmaW5lIFNZU1RFTV9CTE9DSzFfQkFTRQkgMHgxNjAwMDAKI2RlZmluZSBTWVNURU1fQkxPQ0syX0JBU0UJIDB4MTcwMDAwCgoKI2RlZmluZQlNRERJQ0FQMAkoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MDApCiNkZWZpbmUJTURESUNBUDEJKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDA0KQojZGVmaW5lCU1ERElDQVAyCShNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgwOCkKI2RlZmluZQlNRERJQ0FQMwkoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MEMpCiNkZWZpbmUJTURDQVBDSEcJKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDEwKQojZGVmaW5lCU1EQ1JDRVJDCShNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgxNCkKI2RlZmluZQlUVEJVU1NFTAkoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MTgpCiNkZWZpbmUJRFBTRVQwCSAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDFDKQojZGVmaW5lCURQU0VUMQkgIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgyMCkKI2RlZmluZQlEUFNVUwkgICAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MjQpCiNkZWZpbmUJRFBSVU4JICAgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDI4KQojZGVmaW5lCVNZU0NLRU5BCShNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgyQykKI2RlZmluZQlURVNUTU9ERQkoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4MzApCiNkZWZpbmUJRklGT01PTkkJKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDM0KQojZGVmaW5lCUlOVE1PTkkJIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHgzOCkKI2RlZmluZQlNRElPQklTVAkoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4M0MpCiNkZWZpbmUJTURJT1BTRVQJKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDQwKQojZGVmaW5lCUJJVE1BUDAJIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHg0NCkKI2RlZmluZQlCSVRNQVAxCSAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4NDgpCiNkZWZpbmUJQklUTUFQMgkgKE1ERElfQ0xJRU5UX0NPUkVfQkFTRXwweDRDKQojZGVmaW5lCUJJVE1BUDMJIChNRERJX0NMSUVOVF9DT1JFX0JBU0V8MHg1MCkKI2RlZmluZQlCSVRNQVA0CSAoTURESV9DTElFTlRfQ09SRV9CQVNFfDB4NTQpCgoKI2RlZmluZQlTUlNUCQkoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDAwKQojZGVmaW5lCVBPUlRfRU5CCShMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MDQpCiNkZWZpbmUJU1RBUlQJICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgwOCkKI2RlZmluZQlQT1JUCQkoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDBDKQojZGVmaW5lCUNNTgkJIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MTApCiNkZWZpbmUJR0FNTUEJICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgxNCkKI2RlZmluZQlJTlRGTEcJICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDE4KQojZGVmaW5lCUlOVE1TSwkgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MUMpCiNkZWZpbmUJTVBMRkJVRgkgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgyMCkKI2RlZmluZQlIREVfTEVGVAkoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDI0KQojZGVmaW5lCVZERV9UT1AJIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MjgpCgojZGVmaW5lCVBYTAkJIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4MzApCiNkZWZpbmUJSENZQ0xFCSAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHgzNCkKI2RlZmluZQlIU1cJCSAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDM4KQojZGVmaW5lCUhERV9TVEFSVCAgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4M0MpCiNkZWZpbmUJSERFX1NJWkUJKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg0MCkKI2RlZmluZQlWQ1lDTEUJICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDQ0KQojZGVmaW5lCVZTVwkJIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NDgpCiNkZWZpbmUJVkRFX1NUQVJUICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg0QykKI2RlZmluZQlWREVfU0laRQkoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDUwKQojZGVmaW5lCVdBS0VVUAkgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NTQpCiNkZWZpbmUJV1NZTl9ETFkJKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg1OCkKI2RlZmluZQlSRUdFTkIJICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDVDKQojZGVmaW5lCVZTWU5JRgkgIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NjApCiNkZWZpbmUJV1JTVEIJICAgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg2NCkKI2RlZmluZQlSRFNUQgkgICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDY4KQojZGVmaW5lCUFTWV9EQVRBCShMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NkMpCiNkZWZpbmUJQVNZX0RBVEIJKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg3MCkKI2RlZmluZQlBU1lfREFUQwkoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDc0KQojZGVmaW5lCUFTWV9EQVRECShMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4NzgpCiNkZWZpbmUJQVNZX0RBVEUJKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg3QykKI2RlZmluZQlBU1lfREFURgkoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDgwKQojZGVmaW5lCUFTWV9EQVRHCShMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4ODQpCiNkZWZpbmUJQVNZX0RBVEgJKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHg4OCkKI2RlZmluZQlBU1lfQ01EU0VUICAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweDhDKQoKI2RlZmluZQlNT05JCQkoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweEIwKQoKI2RlZmluZQlDdXJyZW50CSAoTENEX0NPTlRST0xfQkxPQ0tfQkFTRXwweEMwKQojZGVmaW5lCUxDRAkJIChMQ0RfQ09OVFJPTF9CTE9DS19CQVNFfDB4QzQpCiNkZWZpbmUJQ09NTUFORAkgKExDRF9DT05UUk9MX0JMT0NLX0JBU0V8MHhDOCkKCgojZGVmaW5lCVNTSUNUTAkgIChTUElfQkxPQ0tfQkFTRXwweDAwKQojZGVmaW5lCVNTSVRJTUUJIChTUElfQkxPQ0tfQkFTRXwweDA0KQojZGVmaW5lCVNTSVRYCSAgIChTUElfQkxPQ0tfQkFTRXwweDA4KQojZGVmaW5lCVNTSVJYCSAgIChTUElfQkxPQ0tfQkFTRXwweDBDKQojZGVmaW5lCVNTSUlOVEMJIChTUElfQkxPQ0tfQkFTRXwweDEwKQojZGVmaW5lCVNTSUlOVFMJIChTUElfQkxPQ0tfQkFTRXwweDE0KQojZGVmaW5lCVNTSURCRzEJIChTUElfQkxPQ0tfQkFTRXwweDE4KQojZGVmaW5lCVNTSURCRzIJIChTUElfQkxPQ0tfQkFTRXwweDFDKQojZGVmaW5lCVNTSUlECSAgIChTUElfQkxPQ0tfQkFTRXwweDIwKQoKCiNkZWZpbmUJSTJDU0VUVVAJKEkyQ19CTE9DS19CQVNFfDB4MDApCiNkZWZpbmUJSTJDQ1RSTAkJKEkyQ19CTE9DS19CQVNFfDB4MDQpCgoKI2RlZmluZQlUSU1FUjBMT0FECSAgKFBXTV9CTE9DS19CQVNFfDB4MDApCiNkZWZpbmUJVElNRVIwVkFMVUUJICAoUFdNX0JMT0NLX0JBU0V8MHgwNCkKI2RlZmluZQlUSU1FUjBDT05UUk9MIChQV01fQkxPQ0tfQkFTRXwweDA4KQojZGVmaW5lCVRJTUVSMElOVENMUiAgKFBXTV9CTE9DS19CQVNFfDB4MEMpCiNkZWZpbmUJVElNRVIwUklTCSAgKFBXTV9CTE9DS19CQVNFfDB4MTApCiNkZWZpbmUJVElNRVIwTUlTCSAgKFBXTV9CTE9DS19CQVNFfDB4MTQpCiNkZWZpbmUJVElNRVIwQkdMT0FEICAoUFdNX0JMT0NLX0JBU0V8MHgxOCkKI2RlZmluZQlQV00wT0ZGCQkgIChQV01fQkxPQ0tfQkFTRXwweDFDKQojZGVmaW5lCVRJTUVSMUxPQUQJICAoUFdNX0JMT0NLX0JBU0V8MHgyMCkKI2RlZmluZQlUSU1FUjFWQUxVRQkgIChQV01fQkxPQ0tfQkFTRXwweDI0KQojZGVmaW5lCVRJTUVSMUNPTlRST0wgKFBXTV9CTE9DS19CQVNFfDB4MjgpCiNkZWZpbmUJVElNRVIxSU5UQ0xSICAoUFdNX0JMT0NLX0JBU0V8MHgyQykKI2RlZmluZQlUSU1FUjFSSVMJICAoUFdNX0JMT0NLX0JBU0V8MHgzMCkKI2RlZmluZQlUSU1FUjFNSVMJICAoUFdNX0JMT0NLX0JBU0V8MHgzNCkKI2RlZmluZQlUSU1FUjFCR0xPQUQgIChQV01fQkxPQ0tfQkFTRXwweDM4KQojZGVmaW5lCVBXTTFPRkYJCSAgKFBXTV9CTE9DS19CQVNFfDB4M0MpCiNkZWZpbmUJVElNRVJJVENSCSAgKFBXTV9CTE9DS19CQVNFfDB4NjApCiNkZWZpbmUJVElNRVJJVE9QCSAgKFBXTV9CTE9DS19CQVNFfDB4NjQpCiNkZWZpbmUJUFdNQ1IJCSAgKFBXTV9CTE9DS19CQVNFfDB4NjgpCiNkZWZpbmUJUFdNSUQJCSAgKFBXTV9CTE9DS19CQVNFfDB4NkMpCiNkZWZpbmUJUFdNTU9OCQkgIChQV01fQkxPQ0tfQkFTRXwweDcwKQoKCiNkZWZpbmUJR1BJT0RBVEEJKEdQSU9fQkxPQ0tfQkFTRXwweDAwKQojZGVmaW5lCUdQSU9ESVIJIChHUElPX0JMT0NLX0JBU0V8MHgwNCkKI2RlZmluZQlHUElPSVMJICAoR1BJT19CTE9DS19CQVNFfDB4MDgpCiNkZWZpbmUJR1BJT0lCRQkgKEdQSU9fQkxPQ0tfQkFTRXwweDBDKQojZGVmaW5lCUdQSU9JRVYJIChHUElPX0JMT0NLX0JBU0V8MHgxMCkKI2RlZmluZQlHUElPSUUJICAoR1BJT19CTE9DS19CQVNFfDB4MTQpCiNkZWZpbmUJR1BJT1JJUwkgKEdQSU9fQkxPQ0tfQkFTRXwweDE4KQojZGVmaW5lCUdQSU9NSVMJIChHUElPX0JMT0NLX0JBU0V8MHgxQykKI2RlZmluZQlHUElPSUMJICAoR1BJT19CTE9DS19CQVNFfDB4MjApCiNkZWZpbmUJR1BJT09NUwkgKEdQSU9fQkxPQ0tfQkFTRXwweDI0KQojZGVmaW5lCUdQSU9QQwkgIChHUElPX0JMT0NLX0JBU0V8MHgyOCkKCiNkZWZpbmUJR1BJT0lECSAgKEdQSU9fQkxPQ0tfQkFTRXwweDMwKQoKCiNkZWZpbmUJV0tSRVEJICAgKFNZU1RFTV9CTE9DSzFfQkFTRXwweDAwKQojZGVmaW5lCUNMS0VOQgkgIChTWVNURU1fQkxPQ0sxX0JBU0V8MHgwNCkKI2RlZmluZQlEUkFNUFdSCSAoU1lTVEVNX0JMT0NLMV9CQVNFfDB4MDgpCiNkZWZpbmUJSU5UTUFTSwkgKFNZU1RFTV9CTE9DSzFfQkFTRXwweDBDKQojZGVmaW5lCUdQSU9TRUwJIChTWVNURU1fQkxPQ0syX0JBU0V8MHgwMCkKCnN0cnVjdCBpbml0X3RhYmxlIHsKCXVuc2lnbmVkIGludCByZWc7Cgl1bnNpZ25lZCBpbnQgdmFsOwp9OwoKc3RhdGljIHN0cnVjdCBpbml0X3RhYmxlIHRvc2hpYmFfNDgweDY0MF9pbml0X3RhYmxlW10gPSB7Cgl7IERQU0VUMCwJCQkgICAweDRCRUMwMDY2IH0sICAvLyAjIE1EQy5EUFNFVDAgICMgU2V0dXAgRFBMTCBwYXJhbWV0ZXJzCgl7IERQU0VUMSwJCQkgICAweDAwMDAwMTEzIH0sICAvLyAgICMgTURDLkRQU0VUMQoJeyBEUFNVUywJCQkJMHgwMDAwMDAwMCB9LCAgLy8gICAjIE1EQy5EUFNVUyAgIyBTZXQgRFBMTCBvc2NpbGxhdGlvbiBlbmFibGUKCXsgRFBSVU4sCQkJCTB4MDAwMDAwMDEgfSwgIC8vICAgIyBNREMuRFBSVU4gICMgUmVsZWFzZSByZXNldCBzaWduYWwgZm9yIERQTEwKCXsgMCwJCQkJCTE0CQkgfSwgIC8vIHdhaXRfbXMoMTQpOwoJeyBTWVNDS0VOQSwJCQkgMHgwMDAwMDAwMSB9LCAgLy8gICAjIE1EQy5TWVNDS0VOQSAgIyBFbmFibGUgc3lzdGVtIGNsb2NrIG91dHB1dAoJeyBDTEtFTkIsCQkJICAgMHgwMDAwMDBFRiB9LCAgLy8gICAjIFNZUy5DTEtFTkIgICMgRW5hYmxlIGNsb2NrcyBmb3IgZWFjaCBtb2R1bGUgKHdpdGhvdXQgRENMSyAsIGkyY0NMSykKCXsgR1BJT19CTE9DS19CQVNFLAkgIDB4MDNGRjAwMDAgfSwgIC8vICAgIyBHUEkgLkdQSU9EQVRBICAjIEdQSU8yKFJFU0VUX0xDRF9OKSBzZXQgdG8gMCAsIEdQSU8zKGVEUkFNX1Bvd2VyKSBzZXQgdG8gMAoJeyBHUElPRElSLAkJCSAgMHgwMDAwMDI0RCB9LCAgLy8gICAjIEdQSSAuR1BJT0RJUiAgIyBTZWxlY3QgZGlyZWN0aW9uIG9mIEdQSU8gcG9ydCAoMCwyLDMsNiw5IG91dHB1dCkKCXsgU1lTVEVNX0JMT0NLMl9CQVNFLCAgIDB4MDAwMDAxNzMgfSwgIC8vICAgIyBTWVMuR1BJT1NFTCAgIyBHUElPIHBvcnQgbXVsdGlwbGV4aW5nIGNvbnRyb2wKCXsgR1BJT1BDLAkJCSAgIDB4MDNDMzAwQzAgfSwgIC8vICAgIyBHUEkgLkdQSU9QQyAgIyBHUElPMiwzIFBEIGN1dAoJeyBTWVNURU1fQkxPQ0sxX0JBU0UsICAgMHgwMDAwMDAwMCB9LCAgLy8gICAjIFNZUy5XS1JFUSAgIyBXYWtlLXVwIHJlcXVlc3QgZXZlbnQgaXMgVlNZTkMgYWxpZ25tZW50Cgl7IEdQSU9JUywJCQkgICAweDAwMDAwMDAwIH0sICAvLyAgICMgR1BJIC5HUElPSVMgICMgU2V0IGludGVycnVwdCBzZW5zZSBvZiBHUElPCgl7IEdQSU9JRVYsCQkJICAweDAwMDAwMDAxIH0sICAvLyAgICMgR1BJIC5HUElPSUVWICAjIFNldCBpbnRlcnJ1cHQgZXZlbnQgb2YgR1BJTwoJeyBHUElPSUMsCQkJICAgMHgwMDAwMDNGRiB9LCAgLy8gICAjIEdQSSAuR1BJT0lDICAjIEdQSU8gaW50ZXJydXB0IGNsZWFyCgl7IEdQSU9fQkxPQ0tfQkFTRSwJICAweDAwMDYwMDA2IH0sICAvLyAgICMgR1BJIC5HUElPREFUQSAgIyBSZWxlYXNlIExDREQgcmVzZXQKCXsgR1BJT19CTE9DS19CQVNFLAkgIDB4MDAwODAwMDggfSwgIC8vICAgIyBHUEkgLkdQSU9EQVRBICAjIGVEUkFNIFZEIHN1cHBseQoJeyBHUElPX0JMT0NLX0JBU0UsCSAgMHgwMjAwMDIwMCB9LCAgLy8gICAjIEdQSSAuR1BJT0RBVEEgICMgVEVTVCBMRUQgT04KCXsgRFJBTVBXUiwJCQkgIDB4MDAwMDAwMDEgfSwgIC8vICAgIyBTWVMuRFJBTVBXUiAgIyBlRFJBTSBwb3dlciB1cAoJeyBUSU1FUjBDT05UUk9MLAkJMHgwMDAwMDA2MCB9LCAgLy8gICAjIFBXTS5UaW1lcjBDb250cm9sICAjIFBXTTAgb3V0cHV0IHN0b3AKCXsgUFdNX0JMT0NLX0JBU0UsCSAgIDB4MDAwMDEzODggfSwgIC8vICAgIyBQV00uVGltZXIwTG9hZCAgIyBQV00wIDEwa0h6ICwgRHV0eSA5OSAoQmFja0xpZ2h0IE9GRikKCS8ve1BXTTBPRkYsCQkJICAgMHgwMDAwMDAwMSB9LCAgLy8gICAjIFBXTS5QV00wT0ZGCiNpZiAwCgl7IFBXTTBPRkYsCQkJICAweDAwMDAxMzg3IH0sIC8vIFNVUkYgMTAwJSBiYWNrbGlnaHQKCXsgUFdNME9GRiwJCQkgIDB4MDAwMDAwMDAgfSwgLy8gRkZBIDEwMCUgYmFja2xpZ2h0CiNlbmRpZgoJeyBQV00wT0ZGLAkJCSAgMHgwMDAwMDlDMyB9LCAvLyA1MCUgQkwKCXsgVElNRVIxQ09OVFJPTCwJCTB4MDAwMDAwNjAgfSwgIC8vICAgIyBQV00uVGltZXIxQ29udHJvbCAgIyBQV00xIG91dHB1dCBzdG9wCgl7IFRJTUVSMUxPQUQsCQkgICAweDAwMDAxMzg4IH0sICAvLyAgICMgUFdNLlRpbWVyMUxvYWQgICMgUFdNMSAxMGtIeiAsIER1dHkgOTkgKEJhY2tMaWdodCBPRkYpCgkvL3tQV00xT0ZGLAkJCSAgIDB4MDAwMDAwMDEgfSwgIC8vICAgIyBQV00uUFdNMU9GRgoJeyBQV00xT0ZGLAkJCSAgMHgwMDAwMTM4NyB9LAoJeyBUSU1FUjBDT05UUk9MLAkJMHgwMDAwMDBFMCB9LCAgLy8gICAjIFBXTS5UaW1lcjBDb250cm9sICAjIFBXTTAgb3V0cHV0IHN0YXJ0Cgl7IFRJTUVSMUNPTlRST0wsCQkweDAwMDAwMEUwIH0sICAvLyAgICMgUFdNLlRpbWVyMUNvbnRyb2wgICMgUFdNMSBvdXRwdXQgc3RhcnQKCXsgUFdNQ1IsCQkJCTB4MDAwMDAwMDMgfSwgIC8vICAgIyBQV00uUFdNQ1IgICMgUFdNIG91dHB1dCBlbmFibGUKCXsgMCwJCQkJCTEJCSAgfSwgIC8vICB3YWl0X21zKDEpOwoJeyBTUElfQkxPQ0tfQkFTRSwJICAgMHgwMDAwMDc5OSB9LCAgLy8gICAjIFNQSSAuU1NJQ1RMICAjIFNQSSBvcGVyYXRpb24gbW9kZSBzZXR0aW5nCgl7IFNTSVRJTUUsCQkJICAweDAwMDAwMTAwIH0sICAvLyAgICMgU1BJIC5TU0lUSU1FICAjIFNQSSBzZXJpYWwgaW50ZXJmYWNlIHRpbWluZyBzZXR0aW5nCgl7IFNQSV9CTE9DS19CQVNFLAkgICAweDAwMDAwNzliIH0sICAvLyAgICMgU1BJIC5TU0lDVEwgICMgU2V0IFNQSSBhY3RpdmUgbW9kZQoKCXsgU1NJVFgsCQkJCTB4MDAwMDAwMDAgfSwgIC8vICAgIyBTUEkuU1NJVFggICMgUmVsZWFzZSBmcm9tIERlZXAgU3RhbmJ5IG1vZGUKCXsgMCwJCQkJCTEJCSAgfSwgIC8vICB3YWl0X21zKDEpOwoJeyBTU0lUWCwJCQkJMHgwMDAwMDAwMCB9LCAgLy8gICAjIFNQSS5TU0lUWAoJeyAwLAkJCQkJMQkJICB9LCAgLy8gIHdhaXRfbXMoMSk7Cgl7IFNTSVRYLAkJCQkweDAwMDAwMDAwIH0sICAvLyAgICMgU1BJLlNTSVRYCgl7IDAsCQkJCQkxCQkgIH0sICAvLyAgd2FpdF9tcygxKTsKCXsgU1NJVFgsCQkJCTB4MDAwODAwQkEgfSwgIC8vICAgIyBTUEkuU1NJVFgJCSAgKk5PVEUgMSAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTExIH0sICAvLwkgIyBEaXNwbGF5IG1vZGUgc2V0dXAoMSkgOiBOb3JtYWx5IEJsYWNrCgl7IFNTSVRYLAkJCQkweDAwMDgwMDM2IH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTAwIH0sICAvLwkgIyBNZW1vcnkgYWNjZXNzIGNvbnRyb2wKCXsgMCwJCQkJCTIJCSAgfSwgIC8vICB3YWl0X21zKDIpOwkvLwkgICMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKCXsgU1NJVFgsCQkJCTB4MDAwODAwQkIgfSwgIC8vICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTAwIH0sICAvLyAgICMgRGlzcGxheSBtb2RlIHNldHVwKDIpCgl7IFNTSVRYLAkJCQkweDAwMDgwMDNBIH0sICAvLyAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDAwMDE2MCB9LCAgLy8gICAjIFJHQiBJbnRlcmZhY2UgZGF0YSBmb3JtYXQKCXsgMCwJCQkJCTIJCSAgfSwgIC8vICB3YWl0X21zKDIpOwkgIC8vCSMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKCXsgU1NJVFgsCQkJCTB4MDAwODAwQkYgfSwgIC8vICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTAwIH0sICAvLyAgICMgRHJpdm5pZyBtZXRob2QKCXsgU1NJVFgsCQkJCTB4MDAwODAwQjEgfSwgIC8vICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTVEIH0sICAvLyAgICMgQm9vc3RlciBvcGVyYXRpb24gc2V0dXAKCXsgMCwJCQkJCTIJCSAgfSwgIC8vICB3YWl0X21zKDIpOwkgIC8vCSMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKCXsgU1NJVFgsCQkJCTB4MDAwODAwQjIgfSwgIC8vICAgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTMzIH0sICAvLyAgICMgQm9vc3RlciBtb2RlIHNldHVwCgl7IFNTSVRYLAkJCQkweDAwMDgwMEIzIH0sICAvLyAgICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDAwMDEyMiB9LCAgLy8JICMgQm9vc3RlciBmcmVxdWVuY2llcyBzZXR1cAoJeyAwLAkJCQkJMgkJICB9LCAgLy8gIHdhaXRfbXMoMik7CSAgLy8JIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQoJeyBTU0lUWCwJCQkJMHgwMDA4MDBCNCB9LCAgLy8JICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDAwMDEwMiB9LCAgLy8JICMgT1AtYW1wIGNhcGFiaWxpdHkvU3lzdGVtIGNsb2NrIGZyZXEuIGRpdmlzaW9uIHNldHVwCgl7IFNTSVRYLAkJCQkweDAwMDgwMEI1IH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTFGIH0sICAvLwkgIyBWQ1MgVm9sdGFnZSBhZGp1c3RtZW50ICAoMUMtPjFGIGZvciBSZXYgMikKCXsgMCwJCQkJCTIJCSAgfSwgIC8vICB3YWl0X21zKDIpOwkgIC8vCSMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKCXsgU1NJVFgsCQkJCTB4MDAwODAwQjYgfSwgIC8vCSAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKCXsgU1NJVFgsCQkJCTB4MDAwMDAxMjggfSwgIC8vCSAjIFZDT00gVm9sdGFnZSBhZGp1c3RtZW50Cgl7IFNTSVRYLAkJCQkweDAwMDgwMEI3IH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTAzIH0sICAvLwkgIyBDb25maWd1cmUgYW4gZXh0ZXJuYWwgZGlzcGxheSBzaWduYWwKCXsgMCwJCQkJCTIJCSAgfSwgIC8vICB3YWl0X21zKDIpOwkgIC8vCSMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKCXsgU1NJVFgsCQkJCTB4MDAwODAwQjkgfSwgIC8vCSAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKCXsgU1NJVFgsCQkJCTB4MDAwMDAxMjAgfSwgIC8vCSAjIERDQ0svRENFViB0aW1pbmcgc2V0dXAKCXsgU1NJVFgsCQkJCTB4MDAwODAwQkQgfSwgIC8vCSAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKCXsgU1NJVFgsCQkJCTB4MDAwMDAxMDIgfSwgIC8vCSAjIEFTVyBzaWduYWwgY29udHJvbAoJeyAwLAkJCQkJMgkJICB9LCAgLy8gIHdhaXRfbXMoMik7CSAgLy8JIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQoJeyBTU0lUWCwJCQkJMHgwMDA4MDBCRSB9LCAgLy8JICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDAwMDEwMCB9LCAgLy8JICMgRHVtbXkgZGlzcGxheSAod2hpdGUvYmxhY2spIGNvdW50IHNldHVwIGZvciBRVUFEIERhdGEgb3BlcmF0aW9uCgl7IFNTSVRYLAkJCQkweDAwMDgwMEMwIH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTExIH0sICAvLwkgIyB3YWl0X21zKC1vdXQgRlIgY291bnQgc2V0dXAgKEEpCgl7IDAsCQkJCQkyCQkgIH0sICAvLyAgd2FpdF9tcygyKTsJICAvLwkjICBXYWl0IFNQSSBmaWZvIGVtcHR5Cgl7IFNTSVRYLAkJCQkweDAwMDgwMEMxIH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTExIH0sICAvLwkgIyB3YWl0X21zKC1vdXQgRlIgY291bnQgc2V0dXAgKEIpCgl7IFNTSVRYLAkJCQkweDAwMDgwMEMyIH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTExIH0sICAvLwkgIyB3YWl0X21zKC1vdXQgRlIgY291bnQgc2V0dXAgKEMpCgl7IDAsCQkJCQkyCQkgIH0sICAvLyAgd2FpdF9tcygyKTsJICAvLwkjICBXYWl0IFNQSSBmaWZvIGVtcHR5Cgl7IFNTSVRYLAkJCQkweDAwMDgwMEMzIH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDgwMTBBIH0sICAvLwkgIyB3YWl0X21zKC1pbiBsaW5lIGNsb2NrIGNvdW50IHNldHVwIChEKQoJeyBTU0lUWCwJCQkJMHgwMDAwMDEwQSB9LCAgLy8KCXsgMCwJCQkJCTIJCSAgfSwgIC8vICB3YWl0X21zKDIpOwkgIC8vCSMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKCXsgU1NJVFgsCQkJCTB4MDAwODAwQzQgfSwgIC8vCSAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKCXsgU1NJVFgsCQkJCTB4MDAwODAxNjAgfSwgIC8vCSAjIFNlZXAtaW4gbGluZSBjbG9jayBjb3VudCBzZXR1cCAoRSkKCXsgU1NJVFgsCQkJCTB4MDAwMDAxNjAgfSwgIC8vCgl7IDAsCQkJCQkyCQkgIH0sICAvLyAgd2FpdF9tcygyKTsJICAvLwkjICBXYWl0IFNQSSBmaWZvIGVtcHR5Cgl7IFNTSVRYLAkJCQkweDAwMDgwMEM1IH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDgwMTYwIH0sICAvLwkgIyB3YWl0X21zKC1pbiBsaW5lIGNsb2NrIGNvdW50IHNldHVwIChGKQoJeyBTU0lUWCwJCQkJMHgwMDAwMDE2MCB9LCAgLy8KCXsgMCwJCQkJCTIJCSAgfSwgIC8vICB3YWl0X21zKDIpOwkgIC8vCSMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKCXsgU1NJVFgsCQkJCTB4MDAwODAwQzYgfSwgIC8vCSAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKCXsgU1NJVFgsCQkJCTB4MDAwODAxNjAgfSwgIC8vCSAjIHdhaXRfbXMoLWluIGxpbmUgY2xvY2sgc2V0dXAgKEcpCgl7IFNTSVRYLAkJCQkweDAwMDAwMTYwIH0sICAvLwoJeyAwLAkJCQkJMgkJICB9LCAgLy8gIHdhaXRfbXMoMik7CSAgLy8JIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQoJeyBTU0lUWCwJCQkJMHgwMDA4MDBDNyB9LCAgLy8JICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDA4MDEzMyB9LCAgLy8JICMgR2FtbWEgMSBmaW5lIHR1bmluZyAoMSkKCXsgU1NJVFgsCQkJCTB4MDAwMDAxNDMgfSwgIC8vCgl7IDAsCQkJCQkyCQkgIH0sICAvLyAgd2FpdF9tcygyKTsJICAvLwkjICBXYWl0IFNQSSBmaWZvIGVtcHR5Cgl7IFNTSVRYLAkJCQkweDAwMDgwMEM4IH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTQ0IH0sICAvLwkgIyBHYW1tYSAxIGZpbmUgdHVuaW5nICgyKQoJeyBTU0lUWCwJCQkJMHgwMDA4MDBDOSB9LCAgLy8JICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDAwMDEzMyB9LCAgLy8JICMgR2FtbWEgMSBpbmNsaW5hdGlvbiBhZGp1c3RtZW50Cgl7IDAsCQkJCQkyCQkgIH0sICAvLyAgd2FpdF9tcygyKTsJICAvLwkjICBXYWl0IFNQSSBmaWZvIGVtcHR5Cgl7IFNTSVRYLAkJCQkweDAwMDgwMENBIH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTAwIH0sICAvLwkgIyBHYW1tYSAxIGJsdWUgb2Zmc2V0IGFkanVzdG1lbnQKCXsgMCwJCQkJCTIJCSAgfSwgIC8vICB3YWl0X21zKDIpOwkgIC8vCSMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKCXsgU1NJVFgsCQkJCTB4MDAwODAwRUMgfSwgIC8vCSAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKCXsgU1NJVFgsCQkJCTB4MDAwODAxMDIgfSwgIC8vCSAjIFRvdGFsIG51bWJlciBvZiBob3Jpem9udGFsIGNsb2NrIGN5Y2xlcyAoMSkgW1BDTEsgU3luYy4gVkdBIHNldHRpbmddCgl7IFNTSVRYLAkJCQkweDAwMDAwMTE4IH0sICAvLwoJeyAwLAkJCQkJMgkJICB9LCAgLy8gIHdhaXRfbXMoMik7CSAgLy8JIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQoJeyBTU0lUWCwJCQkJMHgwMDA4MDBDRiB9LCAgLy8JICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDAwMDEwMSB9LCAgLy8JICMgQmxhbmtpbmcgcGVyaW9kIGNvbnRyb2wgKDEpIFtQQ0xLIFN5bmMuIFRhYmxlMSBmb3IgVkdBXQoJeyAwLAkJCQkJMgkJICB9LCAgLy8gIHdhaXRfbXMoMik7CSAgLy8JIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQoJeyBTU0lUWCwJCQkJMHgwMDA4MDBEMCB9LCAgLy8JICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDA4MDExMCB9LCAgLy8JICMgQmxhbmtpbmcgcGVyaW9kIGNvbnRyb2wgKDIpIFtQQ0xLIFN5bmMuIFRhYmxlMSBmb3IgVkdBXQoJeyBTU0lUWCwJCQkJMHgwMDAwMDEwNCB9LCAgLy8KCXsgMCwJCQkJCTIJCSAgfSwgIC8vICB3YWl0X21zKDIpOwkgIC8vCSMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKCXsgU1NJVFgsCQkJCTB4MDAwODAwRDEgfSwgIC8vCSAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKCXsgU1NJVFgsCQkJCTB4MDAwMDAxMDEgfSwgIC8vCSAjIENLViB0aW1pbmcgY29udHJvbCBvbi9vZmYgW1BDTEsgU3luYy4gVGFibGUxIGZvciBWR0FdCgl7IDAsCQkJCQkyCQkgIH0sICAvLyAgd2FpdF9tcygyKTsJICAvLwkjICBXYWl0IFNQSSBmaWZvIGVtcHR5Cgl7IFNTSVRYLAkJCQkweDAwMDgwMEQyIH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDgwMTAwIH0sICAvLwkgIyBDS1YxLDIgdGltaW5nIGNvbnRyb2wgW1BDTEsgU3luYy4gVGFibGUxIGZvciBWR0FdCgl7IFNTSVRYLAkJCQkweDAwMDAwMTNBIH0sICAvLwoJeyAwLAkJCQkJMgkJICB9LCAgLy8gIHdhaXRfbXMoMik7CSAgLy8JIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQoJeyBTU0lUWCwJCQkJMHgwMDA4MDBEMyB9LCAgLy8JICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDA4MDEwMCB9LCAgLy8JICMgT0VWIHRpbWluZyBjb250cm9sIFtQQ0xLIFN5bmMuIFRhYmxlMSBmb3IgVkdBXQoJeyBTU0lUWCwJCQkJMHgwMDAwMDEzQSB9LCAgLy8KCXsgMCwJCQkJCTIJCSAgfSwgIC8vICB3YWl0X21zKDIpOwkgIC8vCSMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKCXsgU1NJVFgsCQkJCTB4MDAwODAwRDQgfSwgIC8vCSAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKCXsgU1NJVFgsCQkJCTB4MDAwODAxMjQgfSwgIC8vCSAjIEFTVyB0aW1pbmcgY29udHJvbCAoMSkgW1BDTEsgU3luYy4gVGFibGUxIGZvciBWR0FdCgl7IFNTSVRYLAkJCQkweDAwMDAwMTZFIH0sICAvLwoJeyAwLAkJCQkJMQkJICB9LCAgLy8gIHdhaXRfbXMoMSk7CSAgLy8JIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQoJeyBTU0lUWCwJCQkJMHgwMDA4MDBENSB9LCAgLy8JICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDAwMDEyNCB9LCAgLy8JICMgQVNXIHRpbWluZyBjb250cm9sICgyKSBbUENMSyBTeW5jLiBUYWJsZTEgZm9yIFZHQV0KCXsgMCwJCQkJCTIJCSAgfSwgIC8vICB3YWl0X21zKDIpOwkgIC8vCSMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKCXsgU1NJVFgsCQkJCTB4MDAwODAwRUQgfSwgIC8vCSAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKCXsgU1NJVFgsCQkJCTB4MDAwODAxMDEgfSwgIC8vCSAjIFRvdGFsIG51bWJlciBvZiBob3Jpem9udGFsIGNsb2NrIGN5Y2xlcyAoMikgW1BDTEsgU3luYy4gVGFibGUxIGZvciBRVkdBIF0KCXsgU1NJVFgsCQkJCTB4MDAwMDAxMEEgfSwgIC8vCgl7IDAsCQkJCQkyCQkgIH0sICAvLyAgd2FpdF9tcygyKTsJICAvLwkjICBXYWl0IFNQSSBmaWZvIGVtcHR5Cgl7IFNTSVRYLAkJCQkweDAwMDgwMEQ2IH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTAxIH0sICAvLwkgIyBCbGFua2luZyBwZXJpb2QgY29udHJvbCAoMSkgW1BDTEsgU3luYy4gVGFibGUyIGZvciBRVkdBXQoJeyAwLAkJCQkJMgkJICB9LCAgLy8gIHdhaXRfbXMoMik7CSAgLy8JIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQoJeyBTU0lUWCwJCQkJMHgwMDA4MDBENyB9LCAgLy8JICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDA4MDExMCB9LCAgLy8JICMgQmxhbmtpbmcgcGVyaW9kIGNvbnRyb2wgKDIpIFtQQ0xLIFN5bmMuIFRhYmxlMiBmb3IgUVZHQV0KCXsgU1NJVFgsCQkJCTB4MDAwMDAxMEEgfSwgIC8vCgl7IDAsCQkJCQkyCQkgIH0sICAvLyAgd2FpdF9tcygyKTsJICAvLwkjICBXYWl0IFNQSSBmaWZvIGVtcHR5Cgl7IFNTSVRYLAkJCQkweDAwMDgwMEQ4IH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTAxIH0sICAvLwkgIyBDS1YgdGltaW5nIGNvbnRyb2wgb24vb2ZmIFtQQ0xLIFN5bmMuIFRhYmxlMiBmb3IgUVZHQV0KCXsgMCwJCQkJCTIJCSAgfSwgIC8vICB3YWl0X21zKDIpOwkgIC8vCSMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKCXsgU1NJVFgsCQkJCTB4MDAwODAwRDkgfSwgIC8vCSAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKCXsgU1NJVFgsCQkJCTB4MDAwODAxMDAgfSwgIC8vCSAjIENLVjEsMiB0aW1pbmcgY29udHJvbCBbUENMSyBTeW5jLiBUYWJsZTIgZm9yIFFWR0FdCgl7IFNTSVRYLAkJCQkweDAwMDAwMTE0IH0sICAvLwoJeyAwLAkJCQkJMgkJICB9LCAgLy8gIHdhaXRfbXMoMik7CSAgLy8JIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQoJeyBTU0lUWCwJCQkJMHgwMDA4MDBERSB9LCAgLy8JICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDA4MDEwMCB9LCAgLy8JICMgT0VWIHRpbWluZyBjb250cm9sIFtQQ0xLIFN5bmMuIFRhYmxlMiBmb3IgUVZHQV0KCXsgU1NJVFgsCQkJCTB4MDAwMDAxMTQgfSwgIC8vCgl7IDAsCQkJCQkyCQkgIH0sICAvLyAgd2FpdF9tcygyKTsJICAvLwkjICBXYWl0IFNQSSBmaWZvIGVtcHR5Cgl7IFNTSVRYLAkJCQkweDAwMDgwMERGIH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDgwMTEyIH0sICAvLwkgIyBBU1cgdGltaW5nIGNvbnRyb2wgKDEpIFtQQ0xLIFN5bmMuIFRhYmxlMiBmb3IgUVZHQV0KCXsgU1NJVFgsCQkJCTB4MDAwMDAxM0YgfSwgIC8vCgl7IDAsCQkJCQkyCQkgIH0sICAvLyAgd2FpdF9tcygyKTsJICAvLwkjICBXYWl0IFNQSSBmaWZvIGVtcHR5Cgl7IFNTSVRYLAkJCQkweDAwMDgwMEUwIH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTBCIH0sICAvLwkgIyBBU1cgdGltaW5nIGNvbnRyb2wgKDIpIFtQQ0xLIFN5bmMuIFRhYmxlMiBmb3IgUVZHQV0KCXsgU1NJVFgsCQkJCTB4MDAwODAwRTIgfSwgIC8vCSAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKCXsgU1NJVFgsCQkJCTB4MDAwMDAxMDEgfSwgIC8vCSAjIEJ1aWx0LWluIG9zY2lsbGF0b3IgZnJlcXVlbmN5IGRpdmlzaW9uIHNldHVwIFtGcmVxdWVuY3kgZGl2aXNpb24gcmF0aW8gOiAyICg2MEhxKQoJeyAwLAkJCQkJMgkJICB9LCAgLy8gIHdhaXRfbXMoMik7CSAgLy8JIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQoJeyBTU0lUWCwJCQkJMHgwMDA4MDBFMyB9LCAgLy8JICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDAwMDEzNiB9LCAgLy8JICMgQnVpbHQtaW4gb3NjaWxsYXRvciBjbG9jayBjb3VudCBzZXR1cAoJeyAwLAkJCQkJMgkJICB9LCAgLy8gIHdhaXRfbXMoMik7CSAgLy8JIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQoJeyBTU0lUWCwJCQkJMHgwMDA4MDBFNCB9LCAgLy8JICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDA4MDEwMCB9LCAgLy8JICMgQ0tWIHRpbWluZyBjb250cm9sIGZvciB1c2luZyBidWlsZC1pbiBvc2MKCXsgU1NJVFgsCQkJCTB4MDAwMDAxMDMgfSwgIC8vCgl7IDAsCQkJCQkyCQkgIH0sICAvLyAgd2FpdF9tcygyKTsJICAvLwkjICBXYWl0IFNQSSBmaWZvIGVtcHR5Cgl7IFNTSVRYLAkJCQkweDAwMDgwMEU1IH0sICAvLwkgIyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDgwMTAyIH0sICAvLwkgIyBPRVYgdGltaW5nIGNvbnRyb2wgZm9yIHVzaW5nIGJ1aWxkLWluIG9zYwoJeyBTU0lUWCwJCQkJMHgwMDAwMDEwNCB9LCAgLy8KCXsgMCwJCQkJCTIJCSAgfSwgIC8vICB3YWl0X21zKDIpOwkgIC8vCSMgIFdhaXQgU1BJIGZpZm8gZW1wdHkKCXsgU1NJVFgsCQkJCTB4MDAwODAwRTYgfSwgIC8vCSAjIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKCXsgU1NJVFgsCQkJCTB4MDAwMDAxMDMgfSwgIC8vCSAjIERDRVYgdGltaW5nIGNvbnRyb2wgZm9yIHVzaW5nIGJ1aWxkLWluIG9zYwoJeyAwLAkJCQkJMgkJICB9LCAgLy8gIHdhaXRfbXMoMik7CSAgLy8JIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQoJeyBTU0lUWCwJCQkJMHgwMDA4MDBFNyB9LCAgLy8JICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDA4MDEwNCB9LCAgLy8JICMgQVNXIHRpbWluZyBzZXR1cCBmb3IgdXNpbmcgYnVpbGQtaW4gb3NjKDEpCgl7IFNTSVRYLAkJCQkweDAwMDAwMTBBIH0sICAvLwoJeyAwLAkJCQkJMgkJICB9LCAgLy8gIHdhaXRfbXMoMik7CSAgLy8JIyAgV2FpdCBTUEkgZmlmbyBlbXB0eQoJeyBTU0lUWCwJCQkJMHgwMDA4MDBFOCB9LCAgLy8JICMgQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDAwMDEwNCB9LCAgLy8JICMgQVNXIHRpbWluZyBzZXR1cCBmb3IgdXNpbmcgYnVpbGQtaW4gb3NjKDIpCgoKCXsgQ0xLRU5CLAkJCSAgIDB4MDAwMDAxRUYgfSwgIC8vICAgIyBTWVMuQ0xLRU5CICAjIERDTEsgZW5hYmxlCgl7IFNUQVJULAkJCQkweDAwMDAwMDAwIH0sICAvLyAgICMgTENELlNUQVJUICAjIExDREMgd2FpdF9tcyggbW9kZQoJeyBXUlNUQiwJCQkJMHgwMDAwMDAzRiB9LCAgLy8gICAjIExDRC5XUlNUQiAgIyB3cml0ZV9jbGllbnRfcmVnKCBzdHJvYmUKCXsgUkRTVEIsCQkJCTB4MDAwMDA0MzIgfSwgIC8vICAgIyBMQ0QuUkRTVEIgICMgUmVhZCBzdHJvYmUKCXsgUE9SVF9FTkIsCQkJIDB4MDAwMDAwMDIgfSwgIC8vICAgIyBMQ0QuUE9SVF9FTkIgICMgQXN5bmNocm9ub3VzIHBvcnQgZW5hYmxlCgl7IFZTWU5JRiwJCQkgICAweDAwMDAwMDAwIH0sICAvLyAgICMgTENELlZTWU5DSUYgICMgVlNZTkMgSS9GIG1vZGUgc2V0Cgl7IEFTWV9EQVRBLAkJCSAweDgwMDAwMDAwIH0sICAvLyAgICMgTENELkFTWV9EQVR4ICAjIEluZGV4IHNldHRpbmcgb2YgU1VCIExDREQKCXsgQVNZX0RBVEIsCQkJIDB4MDAwMDAwMDEgfSwgIC8vCSAjIE9zY2lsbGF0b3Igc3RhcnQKCXsgQVNZX0NNRFNFVCwJCSAgIDB4MDAwMDAwMDUgfSwgIC8vICAgIyBMQ0QuQVNZX0NNRFNFVCAgIyBEaXJlY3QgY29tbWFuZCB0cmFuc2ZlciBlbmFibGUKCXsgQVNZX0NNRFNFVCwJCSAgIDB4MDAwMDAwMDQgfSwgIC8vICAgIyBMQ0QuQVNZX0NNRFNFVCAgIyBEaXJlY3QgY29tbWFuZCB0cmFuc2ZlciBkaXNhYmxlCgl7IDAsCQkJCQkxMAkJIH0sICAvLyAgd2FpdF9tcygxMCk7Cgl7IEFTWV9EQVRBLAkJCSAweDgwMDAwMDAwIH0sICAvLyAgICMgTENELkFTWV9EQVR4ICAjIERVTU1ZIHdyaXRlX2NsaWVudF9yZWcogUAqTk9URTIKCXsgQVNZX0RBVEIsCQkJIDB4ODAwMDAwMDAgfSwgIC8vCgl7IEFTWV9EQVRDLAkJCSAweDgwMDAwMDAwIH0sICAvLwoJeyBBU1lfREFURCwJCQkgMHg4MDAwMDAwMCB9LCAgLy8KCXsgQVNZX0NNRFNFVCwJCSAgIDB4MDAwMDAwMDkgfSwgIC8vICAgIyBMQ0QuQVNZX0NNRFNFVAoJeyBBU1lfQ01EU0VULAkJICAgMHgwMDAwMDAwOCB9LCAgLy8gICAjIExDRC5BU1lfQ01EU0VUCgl7IEFTWV9EQVRBLAkJCSAweDgwMDAwMDA3IH0sICAvLyAgICMgTENELkFTWV9EQVR4ICAjIEluZGV4IHNldHRpbmcgb2YgU1VCIExDREQKCXsgQVNZX0RBVEIsCQkJIDB4MDAwMDQwMDUgfSwgIC8vCSAjIExDRCBkcml2ZXIgY29udHJvbAoJeyBBU1lfQ01EU0VULAkJICAgMHgwMDAwMDAwNSB9LCAgLy8gICAjIExDRC5BU1lfQ01EU0VUICAjIERpcmVjdCBjb21tYW5kIHRyYW5zZmVyIGVuYWJsZQoJeyBBU1lfQ01EU0VULAkJICAgMHgwMDAwMDAwNCB9LCAgLy8gICAjIExDRC5BU1lfQ01EU0VUICAjIERpcmVjdCBjb21tYW5kIHRyYW5zZmVyIGRpc2FibGUKCXsgMCwJCQkJCTIwCQkgfSwgIC8vICB3YWl0X21zKDIwKTsKCXsgQVNZX0RBVEEsCQkJIDB4ODAwMDAwNTkgfSwgIC8vICAgIyBMQ0QuQVNZX0RBVHggICMgSW5kZXggc2V0dGluZyBvZiBTVUIgTENERAoJeyBBU1lfREFUQiwJCQkgMHgwMDAwMDAwMCB9LCAgLy8JICMgTFRQUyBJL0YgY29udHJvbAoJeyBBU1lfQ01EU0VULAkJICAgMHgwMDAwMDAwNSB9LCAgLy8gICAjIExDRC5BU1lfQ01EU0VUICAjIERpcmVjdCBjb21tYW5kIHRyYW5zZmVyIGVuYWJsZQoJeyBBU1lfQ01EU0VULAkJICAgMHgwMDAwMDAwNCB9LCAgLy8gICAjIExDRC5BU1lfQ01EU0VUICAjIERpcmVjdCBjb21tYW5kIHRyYW5zZmVyIGRpc2FibGUKCgl7IFZTWU5JRiwJCQkgICAweDAwMDAwMDAxIH0sICAvLyAgICMgTENELlZTWU5DSUYgICMgVlNZTkMgSS9GIG1vZGUgT0ZGCgl7IFBPUlRfRU5CLAkJCSAweDAwMDAwMDAxIH0sICAvLyAgICMgTENELlBPUlRfRU5CICAjIFNZTkMgSS9GICBvdXRwdXQgc2VsZWN0CgoJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgl7IFZTWU5JRiwJCQkgICAweDAwMDAwMDAxIH0sICAvLyBWU1lOQyBJL0YgbW9kZSBPRkYKCXsgUE9SVF9FTkIsCQkJIDB4MDAwMDAwMDEgfSwgIC8vIFNZTkMgSS9GIG1vZGUgT04KCgl7IEJJVE1BUDEsCQkJICAweDAxRTAwMEYwIH0sICAvLyBNREMuQklUTUFQMiAgKTsgLy8gU2V0dXAgb2YgUElUQ0ggc2l6ZSB0byBGcmFtZSBidWZmZXIxCgl7IEJJVE1BUDIsCQkJICAweDAxRTAwMEYwIH0sICAvLyBNREMuQklUTUFQMyAgKTsgLy8gU2V0dXAgb2YgUElUQ0ggc2l6ZSB0byBGcmFtZSBidWZmZXIyCgl7IEJJVE1BUDMsCQkJICAweDAxRTAwMEYwIH0sICAvLyBNREMuQklUTUFQNCAgKTsgLy8gU2V0dXAgb2YgUElUQ0ggc2l6ZSB0byBGcmFtZSBidWZmZXIzCgl7IEJJVE1BUDQsCQkJICAweDAwREMwMEIwIH0sICAvLyBNREMuQklUTUFQNSAgKTsgLy8gU2V0dXAgb2YgUElUQ0ggc2l6ZSB0byBGcmFtZSBidWZmZXI0Cgl7IENMS0VOQiwJCQkgICAweDAwMDAwMUVGIH0sICAvLyBTWVMuQ0xLRU5CICApOyAvLyBEQ0xLIHN1cHBseQoJeyBQT1JUX0VOQiwJCQkgMHgwMDAwMDAwMSB9LCAgLy8gTENELlBPUlRfRU5CICApOyAvLyBTeW5jaHJvbm91cyBwb3J0IGVuYWJsZQoJeyBQT1JULAkJCQkgMHgwMDAwMDAwNCB9LCAgLy8gTENELlBPUlQgICk7IC8vIFBvbGFyaXR5IG9mIERFIGlzIHNldCB0byBoaWdoIGFjdGl2ZQoJeyBQWEwsCQkJCSAgMHgwMDAwMDAwMiB9LCAgLy8gTENELlBYTCAgKTsgLy8gQUNUTU9ERSAyIHNldCAoMXN0IGZyYW1lIGJsYWNrIGRhdGEgb3V0cHV0KQoJeyBNUExGQlVGLAkJCSAgMHgwMDAwMDAwMCB9LCAgLy8gTENELk1QTEZCVUYgICk7IC8vIFNlbGVjdCB0aGUgcmVhZGluZyBidWZmZXIKCXsgSENZQ0xFLAkJCSAgIDB4MDAwMDAxMGIgfSwgIC8vIExDRC5IQ1lDTEUgICk7IC8vIFNldHVwIHRvIFZHQSBzaXplCgl7IEhTVywJCQkJICAweDAwMDAwMDAzIH0sICAvLyBMQ0QuSFNXCgl7IEhERV9TVEFSVCwJCQkweDAwMDAwMDA3IH0sICAvLyBMQ0QuSERFX1NUQVJUCgl7IEhERV9TSVpFLAkJCSAweDAwMDAwMEVGIH0sICAvLyBMQ0QuSERFX1NJWkUKCXsgVkNZQ0xFLAkJCSAgIDB4MDAwMDAyODUgfSwgIC8vIExDRC5WQ1lDTEUKCXsgVlNXLAkJCQkgIDB4MDAwMDAwMDEgfSwgIC8vIExDRC5WU1cKCXsgVkRFX1NUQVJULAkJCTB4MDAwMDAwMDMgfSwgIC8vIExDRC5WREVfU1RBUlQKCXsgVkRFX1NJWkUsCQkJIDB4MDAwMDAyN0YgfSwgIC8vIExDRC5WREVfU0laRQoKCXsgU1RBUlQsCQkJCTB4MDAwMDAwMDEgfSwgIC8vIExDRC5TVEFSVCAgKTsgLy8gTENEQyAtIFBpeGVsIGRhdGEgdHJhbnNmZXIgc3RhcnQKCgl7IDAsCQkJCQkxMAkJIH0sICAvLyAgd2FpdF9tcyggMTAgICk7Cgl7IFNTSVRYLAkJCQkweDAwMDgwMEJDIH0sICAvLyBTUEkuU1NJVFggICk7IC8vIENvbW1hbmQgc2V0dGluZyBvZiBTUEkgYmxvY2sKCXsgU1NJVFgsCQkJCTB4MDAwMDAxODAgfSwgIC8vIERpc3BsYXkgZGF0YSBzZXR1cAoJeyBTU0lUWCwJCQkJMHgwMDA4MDAzQiB9LCAgLy8gQ29tbWFuZCBzZXR0aW5nIG9mIFNQSSBibG9jawoJeyBTU0lUWCwJCQkJMHgwMDAwMDEwMCB9LCAgLy8gUXVhZCBEYXRhIGNvbmZpZ3VyYXRpb24gLSBWR0EKCXsgMCwJCQkJCTEJCSAgfSwgIC8vICB3YWl0X21zKCAxCQkgICk7IC8vICBXYWl0IFNQSSBmaWZvIGVtcHR5Cgl7IFNTSVRYLAkJCQkweDAwMDgwMEIwIH0sICAvLyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDAwMTE2IH0sICAvLyBQb3dlciBzdXBwbHkgT04vT0ZGIGNvbnRyb2wKCXsgMCwJCQkJCTEJCSAgfSwgIC8vICB3YWl0X21zKCAxCQkgICk7IC8vICBXYWl0IFNQSSBmaWZvIGVtcHR5Cgl7IFNTSVRYLAkJCQkweDAwMDgwMEI4IH0sICAvLyBDb21tYW5kIHNldHRpbmcgb2YgU1BJIGJsb2NrCgl7IFNTSVRYLAkJCQkweDAwMDgwMUZGIH0sICAvLyBPdXRwdXQgY29udHJvbAoJeyBTU0lUWCwJCQkJMHgwMDAwMDFGNSB9LAoJeyAwLAkJCQkJMQkJICB9LCAgLy8gIHdhaXRfbXMoIDEpOwkJIC8vICBXYWl0IFNQSSBmaWZvIGVtcHR5Cgl7IFNTSVRYLAkJCQkweDAwMDAwMDExIH0sICAvLyB3YWl0X21zKC1vdXQgKENvbW1hbmQgb25seSkKCXsgU1NJVFgsCQkJCTB4MDAwMDAwMjkgfSwgIC8vIERpc3BsYXkgb24gKENvbW1hbmQgb25seSkKCgl7IFNZU1RFTV9CTE9DSzFfQkFTRSwgICAweDAwMDAwMDAyIH0sICAvLwkjIHdha2VSRVEgLT4gR1BJTwoKCXsgMCwgMCB9Cn07CgpzdGF0aWMgdm9pZCBfcGFuZWxfaW5pdChzdHJ1Y3QgaW5pdF90YWJsZSAqaW5pdF90YWJsZSkKewoJdW5zaWduZWQgbjsKCglkcHJpbnRmKElORk8sICJwYW5lbF9pbml0KClcbiIpOwoKCW4gPSAwOwoJd2hpbGUgKGluaXRfdGFibGVbbl0ucmVnICE9IDAgfHwgaW5pdF90YWJsZVtuXS52YWwgIT0gMCkgewoJCWlmIChpbml0X3RhYmxlW25dLnJlZyAhPSAwKQoJCQltZGRpX3JlbW90ZV93cml0ZShpbml0X3RhYmxlW25dLnZhbCwgaW5pdF90YWJsZVtuXS5yZWcpOwoJCWVsc2UKCQkJbWRlbGF5KGluaXRfdGFibGVbbl0udmFsKTsKCQluKys7Cgl9CgoJZHByaW50ZihJTkZPLCAicGFuZWxfaW5pdCgpIGRvbmVcbiIpOwp9Cgp2b2lkIHBhbmVsX2luaXQoc3RydWN0IG1kZGlfY2xpZW50X2NhcHMgKmNsaWVudF9jYXBzKQp7Cglzd2l0Y2goY2xpZW50X2NhcHMtPm1hbnVmYWN0dXJlcl9uYW1lKSB7CgljYXNlIDB4ZDI2MzogLy8gVG9zaGliYQoJCWRwcmludGYoSU5GTywgIkZvdW5kIFRvc2hpYmEgcGFuZWxcbiIpOwoJCV9wYW5lbF9pbml0KHRvc2hpYmFfNDgweDY0MF9pbml0X3RhYmxlKTsKCQlicmVhazsKCWNhc2UgMHg0NDc0OiAvLz8/CgkJaWYgKGNsaWVudF9jYXBzLT5wcm9kdWN0X2NvZGUgPT0gMHhjMDY1KQoJCQlkcHJpbnRmKElORk8sICJGb3VuZCBXVkdBIHBhbmVsXG4iKTsKCQlicmVhazsKCX0KfQoKdm9pZCBwYW5lbF9wb3dlcm9uKHZvaWQpCnsKCWdwaW9fc2V0KDg4LCAwKTsKCWdwaW9fY29uZmlnKDg4LCBHUElPX09VVFBVVCk7Cgl1ZGVsYXkoMTApOwoJZ3Bpb19zZXQoODgsIDEpOwoJbWRlbGF5KDEwKTsKCgkvL21kZWxheSgxMDAwKTsgLy8gdW5jb21tZW50IGZvciBzZWNvbmQgc3RhZ2UgYm9vdAp9Cgp2b2lkIHBhbmVsX2JhY2tsaWdodChpbnQgb24pCnt9Cg==