I2lmIGRlZmluZWQoX19TVU5QUk9fQykgJiYgZGVmaW5lZChfX3NwYXJjdjkpCiMgZGVmaW5lIEFCSTY0ICAvKiBUaGV5J3ZlIHNhaWQgLXhhcmNoPXY5IGF0IGNvbW1hbmQgbGluZSAqLwojZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fYXJjaDY0X18pCiMgZGVmaW5lIEFCSTY0ICAvKiBUaGV5J3ZlIHNhaWQgLW02NCBhdCBjb21tYW5kIGxpbmUgKi8KI2VuZGlmCgojaWZkZWYgQUJJNjQKICAucmVnaXN0ZXIJJWcyLCNzY3JhdGNoCiAgLnJlZ2lzdGVyCSVnMywjc2NyYXRjaAojIGRlZmluZQlGUkFNRQktMTkyCiMgZGVmaW5lCUJJQVMJMjA0NwojZWxzZQojIGRlZmluZQlGUkFNRQktOTYKIyBkZWZpbmUJQklBUwkwCiNlbmRpZgoKLnRleHQKLmFsaWduCTMyCi5nbG9iYWwJT1BFTlNTTF93aXBlX2NwdQoudHlwZQlPUEVOU1NMX3dpcGVfY3B1LCNmdW5jdGlvbgohIEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgZG9lcyBub3QgZXhjdXNlIHVzIGZyb20gd2lwaW5nIHRoZSBzdGFjayEKISBUaGlzIHJvdXRpbmUgd2lwZXMgcmVnaXN0ZXJzLCBidXQgbm90IHRoZSBiYWNraW5nIHN0b3JlIFt3aGljaAohIHJlc2lkZXMgb24gdGhlIHN0YWNrLCB0b3dhcmQgbG93ZXIgYWRkcmVzc2VzXS4gVG8gZmFjaWxpdGF0ZSBmb3IKISBzdGFjayB3aXBpbmcgSSByZXR1cm4gcG9pbnRlciB0byB0aGUgdG9wIG9mIHN0YWNrIG9mIHRoZSAqY2FsbGVyKi4KT1BFTlNTTF93aXBlX2NwdToKCXNhdmUJJXNwLEZSQU1FLCVzcAoJbm9wCiNpZmRlZiBfX3N1bgojaW5jbHVkZSA8c3lzL3RyYXAuaD4KCXRhCVNUX0NMRUFOX1dJTkRPV1MKI2Vsc2UKCWNhbGwJLndhbGsucmVnLndpbnMKI2VuZGlmCglub3AKCWNhbGwJLlBJQy56ZXJvLnVwCgltb3YJLnplcm8tKC4tNCksJW8wCglsZGQJWyVvMF0sJWYwCgoJc3ViY2MJJWcwLDEsJW8wCgkhIEZvbGxvd2luZyBpcyBWOSAicmQgJWNjciwlbzAiIGluc3RydWN0aW9uLiBIb3dldmVyISBWOAoJISBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBpdCAoInJkICVhc3IyLCVvMCIgaW4gVjggdGVybXMpIGRvZXMKCSEgbm90IGNhdXNlIGlsbGVnYWxfaW5zdHJ1Y3Rpb24gdHJhcC4gSXQgdGhlcmVmb3JlIGNhbiBiZSB1c2VkCgkhIHRvIGRldGVybWluZSBpZiB0aGUgQ1BVIHRoZSBjb2RlIGlzIGV4ZWN1dGluZyBvbiBpcyBWOC0gb3IKCSEgVjktY29tcGxpYW50LCBhcyBWOSByZXR1cm5zIGEgZGlzdGluY3QgdmFsdWUgb2YgMHg5OSwKCSEgIm5lZ2F0aXZlIiBhbmQgImJvcnJvdyIgYml0cyBzZXQgaW4gYm90aCAlaWNjIGFuZCAleGNjLgoJLndvcmQJMHg5MTQwODAwMAkhcmQJJWNjciwlbzAKCWNtcAklbzAsMHg5OQoJYm5lCS52OAoJbm9wCgkJCSEgRXZlbiB0aG91Z2ggd2UgZG8gbm90IHVzZSAlZnAgcmVnaXN0ZXIgYmFuaywKCQkJISB3ZSB3aXBlIGl0IGFzIG1lbWNweSBtaWdodCBoYXZlIHVzZWQgaXQuLi4KCQkJLndvcmQJMHhiZmEwMDA0MAkhZm1vdmQJJWYwLCVmNjIKCQkJLndvcmQJMHhiYmEwMDA0MAkhLi4uCgkJCS53b3JkCTB4YjdhMDAwNDAKCQkJLndvcmQJMHhiM2EwMDA0MAoJCQkud29yZAkweGFmYTAwMDQwCgkJCS53b3JkCTB4YWJhMDAwNDAKCQkJLndvcmQJMHhhN2EwMDA0MAoJCQkud29yZAkweGEzYTAwMDQwCgkJCS53b3JkCTB4OWZhMDAwNDAKCQkJLndvcmQJMHg5YmEwMDA0MAoJCQkud29yZAkweDk3YTAwMDQwCgkJCS53b3JkCTB4OTNhMDAwNDAKCQkJLndvcmQJMHg4ZmEwMDA0MAoJCQkud29yZAkweDhiYTAwMDQwCgkJCS53b3JkCTB4ODdhMDAwNDAKCQkJLndvcmQJMHg4M2EwMDA0MAkhZm1vdmQJJWYwLCVmMzIKLnY4OgkJCWZtb3ZzCSVmMSwlZjMxCgljbHIJJW8wCgkJCWZtb3ZzCSVmMCwlZjMwCgljbHIJJW8xCgkJCWZtb3ZzCSVmMSwlZjI5CgljbHIJJW8yCgkJCWZtb3ZzCSVmMCwlZjI4CgljbHIJJW8zCgkJCWZtb3ZzCSVmMSwlZjI3CgljbHIJJW80CgkJCWZtb3ZzCSVmMCwlZjI2CgljbHIJJW81CgkJCWZtb3ZzCSVmMSwlZjI1CgljbHIJJW83CgkJCWZtb3ZzCSVmMCwlZjI0CgljbHIJJWwwCgkJCWZtb3ZzCSVmMSwlZjIzCgljbHIJJWwxCgkJCWZtb3ZzCSVmMCwlZjIyCgljbHIJJWwyCgkJCWZtb3ZzCSVmMSwlZjIxCgljbHIJJWwzCgkJCWZtb3ZzCSVmMCwlZjIwCgljbHIJJWw0CgkJCWZtb3ZzCSVmMSwlZjE5CgljbHIJJWw1CgkJCWZtb3ZzCSVmMCwlZjE4CgljbHIJJWw2CgkJCWZtb3ZzCSVmMSwlZjE3CgljbHIJJWw3CgkJCWZtb3ZzCSVmMCwlZjE2CgljbHIJJWkwCgkJCWZtb3ZzCSVmMSwlZjE1CgljbHIJJWkxCgkJCWZtb3ZzCSVmMCwlZjE0CgljbHIJJWkyCgkJCWZtb3ZzCSVmMSwlZjEzCgljbHIJJWkzCgkJCWZtb3ZzCSVmMCwlZjEyCgljbHIJJWk0CgkJCWZtb3ZzCSVmMSwlZjExCgljbHIJJWk1CgkJCWZtb3ZzCSVmMCwlZjEwCgljbHIJJWcxCgkJCWZtb3ZzCSVmMSwlZjkKCWNscgklZzIKCQkJZm1vdnMJJWYwLCVmOAoJY2xyCSVnMwoJCQlmbW92cwklZjEsJWY3CgljbHIJJWc0CgkJCWZtb3ZzCSVmMCwlZjYKCWNscgklZzUKCQkJZm1vdnMJJWYxLCVmNQoJCQlmbW92cwklZjAsJWY0CgkJCWZtb3ZzCSVmMSwlZjMKCQkJZm1vdnMJJWYwLCVmMgoKCWFkZAklZnAsQklBUywlaTAJISByZXR1cm4gcG9pbnRlciB0byBjYWxsZXK0cyB0b3Agb2Ygc3RhY2sKCglyZXQKCXJlc3RvcmUKCi56ZXJvOgkubG9uZwkweDAsMHgwCi5QSUMuemVyby51cDoKCXJldGwKCWFkZAklbzAsJW83LCVvMAojaWZkZWYgREVCVUcKLmdsb2JhbAl3YWxrX3JlZ193aW5zCi50eXBlCXdhbGtfcmVnX3dpbnMsI2Z1bmN0aW9uCndhbGtfcmVnX3dpbnM6CiNlbmRpZgoud2Fsay5yZWcud2luczoKCXNhdmUJJXNwLEZSQU1FLCVzcAoJY21wCSVpNywlbzcKCWJlCTJmCgljbHIJJW8wCgljbXAJJW83LDAJISBjb21waWxlciBuZXZlciBjbGVhbnMgJW83Li4uCgliZQkxZgkhIGNvdWxkIGhhdmUgYmVlbiBhIGxlYWYgZnVuY3Rpb24uLi4KCWNscgklbzEKCWNhbGwJLndhbGsucmVnLndpbnMKCW5vcAoxOgljbHIJJW8yCgljbHIJJW8zCgljbHIJJW80CgljbHIJJW81CgljbHIJJW83CgljbHIJJWwwCgljbHIJJWwxCgljbHIJJWwyCgljbHIJJWwzCgljbHIJJWw0CgljbHIJJWw1CgljbHIJJWw2CgljbHIJJWw3CglhZGQJJW8wLDEsJWkwCSEgdXNlZCBmb3IgZGVidWdnaW5nCjI6CXJldAoJcmVzdG9yZQouc2l6ZQlPUEVOU1NMX3dpcGVfY3B1LC4tT1BFTlNTTF93aXBlX2NwdQoKLmdsb2JhbAlPUEVOU1NMX2F0b21pY19hZGQKLnR5cGUJT1BFTlNTTF9hdG9taWNfYWRkLCNmdW5jdGlvbgpPUEVOU1NMX2F0b21pY19hZGQ6CiNpZm5kZWYgQUJJNjQKCXN1YmNjCSVnMCwxLCVvMgoJLndvcmQJMHg5NTQwODAwMAkhcmQJJWNjciwlbzIsIHNlZSBjb21tZW50IGFib3ZlCgljbXAJJW8yLDB4OTkKCWJlCS52OQoJbm9wCglzYXZlCSVzcCxGUkFNRSwlc3AKCWJhCS5lbnRlcgoJbm9wCiNpZmRlZiBfX3N1bgohIE5vdGUgdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBsaW5rIHdpdGggbGlidGhyZWFkIHRvIGNhbGwgdGhyX3lpZWxkLAohIGFzIGxpYmMgcHJvdmlkZXMgYSBzdHViLCB3aGljaCBpcyBvdmVybG9hZGVkIHRoZSBtb21lbnQgeW91IGxpbmsKISB3aXRoICplaXRoZXIqIGxpYnB0aHJlYWQgb3IgbGlidGhyZWFkLi4uCiNkZWZpbmUJWUlFTERfQ1BVCXRocl95aWVsZAojZWxzZQohIGFwcGxpZXMgYXQgbGVhc3QgdG8gTGludXggYW5kIEZyZWVCU0QuLi4gRmVlZGJhY2sgZXhwZWN0ZWQuLi4KI2RlZmluZQlZSUVMRF9DUFUJc2NoZWRfeWllbGQKI2VuZGlmCi5zcGluOgljYWxsCVlJRUxEX0NQVQoJbm9wCi5lbnRlcjoJbGQJWyVpMF0sJWkyCgljbXAJJWkyLC00MDk2CgliZQkuc3BpbgoJbW92CS0xLCVpMgoJc3dhcAlbJWkwXSwlaTIKCWNtcAklaTIsLTEKCWJlCS5zcGluCglhZGQJJWkyLCVpMSwlaTIKCXN0YmFyCglzdAklaTIsWyVpMF0KCXNyYQklaTIsJWcwLCVpMAoJcmV0CglyZXN0b3JlCi52OToKI2VuZGlmCglsZAlbJW8wXSwlbzIKMToJYWRkCSVvMSwlbzIsJW8zCgkud29yZAkweGQ3ZTIxMDBhCSFjYXMgWyVvMF0sJW8yLCVvMywgY29tcGFyZSBbJW8wXSB3aXRoICVvMiBhbmQgc3dhcCAlbzMKCWNtcAklbzIsJW8zCglibmUJMWIKCW1vdgklbzMsJW8yCQkhIGNhcyBpcyBhbHdheXMgZmV0Y2hpbmcgdG8gZGVzdC4gcmVnaXN0ZXIKCWFkZAklbzEsJW8yLCVvMAkhIE9wZW5TU0wgZXhwZWN0cyB0aGUgbmV3IHZhbHVlCglyZXRsCglzcmEJJW8wLCVnMCwlbzAJISB3ZSByZXR1cm4gc2lnbmVkIGludCwgcmVtZW1iZXI/Ci5zaXplCU9QRU5TU0xfYXRvbWljX2FkZCwuLU9QRU5TU0xfYXRvbWljX2FkZAoKLmdsb2JhbAlPUEVOU1NMX3JkdHNjCglzdWJjYwklZzAsMSwlbzAKCS53b3JkCTB4OTE0MDgwMDAJIXJkCSVjY3IsJW8wCgljbXAJJW8wLDB4OTkKCWJuZQkubm90c2MKCXhvcgklbzAsJW8wLCVvMAoJc2F2ZQklc3AsRlJBTUUtMTYsJXNwCgltb3YJNTEzLCVvMAkJIVNJX1BMQVRGT1JNCglhZGQJJXNwLEJJQVMrMTYsJW8xCgljYWxsCXN5c2luZm8KCW1vdgkyNTYsJW8yCgoJYWRkCSVzcCxCSUFTLTE2LCVvMQoJbGQJWyVvMV0sJWwwCglsZAlbJW8xKzRdLCVsMQoJbGQJWyVvMSs4XSwlbDIKCW1vdgklbG8oJ1NVTlcnKSwlbDMKCXJldAoJcmVzdG9yZQoubm90c2M6CglyZXRsCglub3AKLnR5cGUJT1BFTlNTTF9yZHRzYywjZnVuY3Rpb24KLnNpemUJT1BFTlNTTF9yZHRzYywuLU9QRU5TU0xfYXRvbWljX2FkZAo=