From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 24557 invoked by alias); 29 Jan 2003 08:36:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 24535 invoked by uid 71); 29 Jan 2003 08:36:00 -0000 Resent-Date: 29 Jan 2003 08:36:00 -0000 Resent-Message-ID: <20030129083600.24534.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org, panagiotis.issaris@mech.kuleuven.ac.be Resent-Reply-To: gcc-gnats@gcc.gnu.org, takis@lumumba.luc.ac.be Received: (qmail 19782 invoked by uid 48); 29 Jan 2003 08:26:55 -0000 Message-Id: <20030129082654.19781.qmail@sources.redhat.com> Date: Wed, 29 Jan 2003 08:36:00 -0000 From: takis@lumumba.luc.ac.be Reply-To: takis@lumumba.luc.ac.be To: gcc-gnats@gcc.gnu.org Cc: panagiotis.issaris@mech.kuleuven.ac.be X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) X-GNATS-Notify: panagiotis.issaris@mech.kuleuven.ac.be Subject: c/9495: Segfault when crosscompiling for PPC on x86 X-SW-Source: 2003-01/txt/msg01656.txt.bz2 List-Id: >Number: 9495 >Category: c >Synopsis: Segfault when crosscompiling for PPC on x86 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Wed Jan 29 08:36:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: Panagiotis Issaris >Release: 2.95.3 >Organization: >Environment: Debian GNU/Linux >Description: When cross-compiling Kaffe 1.07 for PowerPC on a x86 system, the GCC C cross-compiler gives an ICE. /bin/sh ../../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../../config -I../../include -I../../kaffe/ kaffevm/systems/unix-jthreads -Iintrp -I./intrp -I../../libltdl -DINTERPRETER -I../../kaffe/xprof -DKVER='"1. 0.7"' -I/usr/local/src/kaffe-1.0.7/./kaffe/kaffevm -I/usr/local/src/kaffe-1.0.7/./kaffe/kaffevm/systems/unix-j threads -I../../config -I../../include -I/usr/local/include -g -O2 -fsigned-char -c support.c gcc -DHAVE_CONFIG_H -I. -I. -I../../config -I../../include -I../../kaffe/kaffevm/systems/unix-jthreads -Iintrp -I./intrp -I../../libltdl -DINTERPRETER -I../../kaffe/xprof -DKVER=\"1.0.7\" -I/usr/local/src/kaffe-1.0.7/./k affe/kaffevm -I/usr/local/src/kaffe-1.0.7/./kaffe/kaffevm/systems/unix-jthreads -I../../config -I../../include -I/usr/local/include -g -O2 -fsigned-char -c support.c -fPIC -DPIC -o support.lo support.c: In function `sysdepCallMethod': support.c:1053: Internal compiler error: support.c:1053: internal error--insn does not satisfy its constraints: (insn 998 995 507 (set (reg/v:DF 40 f8) (mem:DF (plus:SI (reg:SI 31 r31) (const_int 8 [0x8])) 0)) 441 {*movdf_softfloat32} (nil) (nil)) make[3]: *** [support.lo] Error 1 make[3]: Leaving directory `/usr/local/src/kaffe-1.0.7/kaffe/kaffevm' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/usr/local/src/kaffe-1.0.7/kaffe/kaffevm' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/usr/local/src/kaffe-1.0.7/kaffe' make: *** [all-recursive] Error 1 >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: text/x-csrc; name="support.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="support.c" LyoKICogc3VwcG9ydC5jCiAqIE5hdGl2ZSBsYW5ndWFnZSBzdXBwb3J0IChleGNsdWRpbmcgc3Ry aW5nIHJvdXRpbmVzKS4KICoKICogQ29weXJpZ2h0IChjKSAxOTk2LCAxOTk3CiAqCVRyYW5zdmly dHVhbCBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqCiAqIFNlZSB0 aGUgZmlsZSAibGljZW5zZS50ZXJtcyIgZm9yIGluZm9ybWF0aW9uIG9uIHVzYWdlIGFuZCByZWRp c3RyaWJ1dGlvbiAKICogb2YgdGhpcyBmaWxlLiAKICovCgojaW5jbHVkZSAiZGVidWcuaCIKI2lu Y2x1ZGUgImNvbmZpZy5oIgojaW5jbHVkZSAiY29uZmlnLXN0ZC5oIgojaW5jbHVkZSAiY29uZmln LW1lbS5oIgojaW5jbHVkZSAiam5pLmgiCiNpbmNsdWRlIDxzdGRhcmcuaD4KI2luY2x1ZGUgImVy cm9ycy5oIgojaW5jbHVkZSAianR5cGVzLmgiCiNpbmNsdWRlICJhY2Nlc3MuaCIKI2luY2x1ZGUg Im9iamVjdC5oIgojaW5jbHVkZSAiY29uc3RhbnRzLmgiCiNpbmNsdWRlICJiYXNlQ2xhc3Nlcy5o IgojaW5jbHVkZSAic3RyaW5nU3VwcG9ydC5oIgojaW5jbHVkZSAibG9va3VwLmgiCiNpbmNsdWRl ICJleGNlcHRpb24uaCIKI2luY2x1ZGUgInNsb3RzLmgiCiNpbmNsdWRlICJzdXBwb3J0LmgiCiNp Zm5kZWYgSEFWRV9MSUJGRkkKIyBkZWZpbmUgTkVFRF9zeXNkZXBDYWxsTWV0aG9kIDEKI2VuZGlm IC8qIEhBVkVfTElCRkZJICovCiNpbmNsdWRlICJjbGFzc01ldGhvZC5oIgojaW5jbHVkZSAibWFj aGluZS5oIgojaW5jbHVkZSAibWQuaCIKI2luY2x1ZGUgIml0eXBlcy5oIgojaW5jbHVkZSAiZXh0 ZXJuYWwuaCIKI2luY2x1ZGUgInRocmVhZC5oIgojaW5jbHVkZSAianRocmVhZC5oIgojaW5jbHVk ZSAibG9ja3MuaCIKCiNpZiAhZGVmaW5lZChIQVZFX0dFVFRJTUVPRkRBWSkKI2luY2x1ZGUgPHN5 cy90aW1lYi5oPgojZW5kaWYKCiNkZWZpbmUJTUFYRVhDRVBUSU9OTEVOCQkyMDAKI2RlZmluZQlF UlJPUl9TSUdOQVRVUkUwCSIoKVYiCiNkZWZpbmUJRVJST1JfU0lHTkFUVVJFCQkiKExqYXZhL2xh bmcvU3RyaW5nOylWIgoKLyogQW5jaG9yIHBvaW50IGZvciB1c2VyIGRlZmluZWQgcHJvcGVydGll cyAqLwp1c2VyUHJvcGVydHkqIHVzZXJQcm9wZXJ0aWVzOwoKI2lmIGRlZmluZWQoTk9fU0hBUkVE X0xJQlJBUklFUykKLyogSW50ZXJuYWwgbmF0aXZlIGZ1bmN0aW9ucyAqLwpzdGF0aWMgbmF0aXZl RnVuY3Rpb24gbnVsbF9mdW5jc1sxXTsKbmF0aXZlRnVuY3Rpb24qIG5hdGl2ZV9mdW5jcyA9IG51 bGxfZnVuY3M7CiNlbmRpZgoKZXh0ZXJuIHN0cnVjdCBKTklFbnZfIEthZmZlX0pOSUVudjsKCiNp ZmRlZiBIQVZFX0xJQkZGSQojaW5jbHVkZSA8ZmZpLmg+CnN0YXRpYyBpbmxpbmUgZmZpX3R5cGUg KmoyZmZpKGNoYXIgdHlwZSkKewoJZmZpX3R5cGUgKmZ0eXBlOwoKCXN3aXRjaCAodHlwZSkgewoJ Y2FzZSAnSic6CgkJZnR5cGUgPSAmZmZpX3R5cGVfc2ludDY0OwoJCWJyZWFrOwoJY2FzZSAnRCc6 CgkJZnR5cGUgPSAmZmZpX3R5cGVfZG91YmxlOwoJCWJyZWFrOwoJY2FzZSAnRic6CgkJZnR5cGUg PSAmZmZpX3R5cGVfZmxvYXQ7CgkJYnJlYWs7CglkZWZhdWx0OgoJCWZ0eXBlID0gJmZmaV90eXBl X3VpbnQ7Cgl9CglyZXR1cm4gZnR5cGU7Cn0KCiNkZWZpbmUgc3lzZGVwQ2FsbE1ldGhvZChDQUxM KQkJCQkJCVwKZG8gewkJCQkJCQkJCVwKCWludCBpOwkJCQkJCQkJXAoJZmZpX2NpZiBjaWY7CQkJ CQkJCVwKCWZmaV90eXBlICpydHlwZTsJCQkJCQlcCglmZmlfdHlwZSAqYXJndHlwZXNbKENBTEwp LT5ucmFyZ3MgKyAxXTsJCQkJXAoJdm9pZCAqYXJndmFsc1soQ0FMTCktPm5yYXJncyArIDFdOwkJ CQlcCglpbnQgZmFyZ3MgPSAwOwkJCQkJCQlcCglmb3IgKGkgPSAwOyBpIDwgKENBTEwpLT5ucmFy Z3M7IGkrKykgewkJCQlcCgkJc3dpdGNoICgoQ0FMTCktPmNhbGxzaXplW2ldKSB7CQkJCVwKCQlj YXNlIDE6CQkJCQkJCVwKCQkJYXJndHlwZXNbZmFyZ3NdID0gajJmZmkoKENBTEwpLT5jYWxsdHlw ZVtpXSk7CVwKCQkJYXJndmFsc1tmYXJnc10gPSAmKChDQUxMKS0+YXJnc1tpXS5pKTsJCVwKCQkJ ZmFyZ3MrKzsJCQkJCVwKCQkJYnJlYWs7CQkJCQkJXAoJCWNhc2UgMjoJCQkJCQkJXAoJCQlhcmd0 eXBlc1tmYXJnc10gPSBqMmZmaSgoQ0FMTCktPmNhbGx0eXBlW2ldKTsJXAoJCQlhcmd2YWxzW2Zh cmdzXSA9ICYoKENBTEwpLT5hcmdzW2ldLmopOwkJXAoJCQlmYXJncysrOwkJCQkJXAoJCWRlZmF1 bHQ6CQkJCQkJXAoJCQlicmVhazsJCQkJCQlcCgkJfQkJCQkJCQlcCgl9CQkJCQkJCQlcCglydHlw ZSA9IGoyZmZpICgoQ0FMTCktPnJldHR5cGUpOwkJCQlcCglpZiAoZmZpX3ByZXBfY2lmKCZjaWYs IEZGSV9ERUZBVUxUX0FCSSwgZmFyZ3MsCQkJXAoJICAgIHJ0eXBlLCBhcmd0eXBlcykgPT0gRkZJ X09LKSB7CQkJCVwKCQlmZmlfY2FsbCgmY2lmLCAoQ0FMTCktPmZ1bmN0aW9uLCAoQ0FMTCktPnJl dCwgYXJndmFscyk7CVwKCX0JCQkJCQkJCVwKCWVsc2UJCQkJCQkJCVwKCQlBQk9SVCgpOwkJCQkJ CVwKfSB3aGlsZSAoMCk7CiNlbmRpZiAvKiBIQVZFX0xJQkZGSSAqLwoKLyoKICogQ2FsbCBhIEph dmEgbWV0aG9kIGZyb20gbmF0aXZlIGNvZGUuCiAqLwpqdmFsdWUKZG9fZXhlY3V0ZV9qYXZhX21l dGhvZF92KHZvaWQqIG9iaiwgY29uc3QgY2hhciogbWV0aG9kX25hbWUsIGNvbnN0IGNoYXIqIHNp Z25hdHVyZSwgTWV0aG9kKiBtYiwgaW50IGlzU3RhdGljQ2FsbCwgdmFfbGlzdCBhcmdwdHIpCnsK CWp2YWx1ZSByZXR2YWw7CgllcnJvckluZm8gaW5mbzsKCglpZiAob2JqID09IDAgJiYgKCEgaXNT dGF0aWNDYWxsIHx8ICEgbWIpKSB7CgkJdGhyb3dFeGNlcHRpb24oTnVsbFBvaW50ZXJFeGNlcHRp b24pOwoJfQoKCWlmIChtYiA9PSAwKSB7CgkJYXNzZXJ0KG1ldGhvZF9uYW1lICE9IDAgJiYgc2ln bmF0dXJlICE9IDApOwoJCWlmIChpc1N0YXRpY0NhbGwpIHsKCQkJbWIgPSBsb29rdXBDbGFzc01l dGhvZCgoSGphdmFfbGFuZ19DbGFzcyopb2JqLCBtZXRob2RfbmFtZSwgc2lnbmF0dXJlLCAmaW5m byk7CgkJfQoJCWVsc2UgewoJCQltYiA9IGxvb2t1cE9iamVjdE1ldGhvZCgoSGphdmFfbGFuZ19P YmplY3QqKW9iaiwgbWV0aG9kX25hbWUsIHNpZ25hdHVyZSwgJmluZm8pOwoJCX0KCX0KCgkvKiBO byBtZXRob2Qgb3Igd3JvbmcgdHlwZSAtIHRocm93IGV4Y2VwdGlvbiAqLwoJaWYgKG1iID09IDAp IHsKCQl0aHJvd0Vycm9yKCZpbmZvKTsKCX0KCWVsc2UgaWYgKGlzU3RhdGljQ2FsbCAmJiAobWIt PmFjY2ZsYWdzICYgQUNDX1NUQVRJQykgPT0gMCkgewoJCXRocm93RXhjZXB0aW9uKE5vU3VjaE1l dGhvZEVycm9yKG1ldGhvZF9uYW1lKSk7Cgl9CgllbHNlIGlmICghaXNTdGF0aWNDYWxsICYmICht Yi0+YWNjZmxhZ3MgJiBBQ0NfU1RBVElDKSAhPSAwKSB7CgkJdGhyb3dFeGNlcHRpb24oTm9TdWNo TWV0aG9kRXJyb3IobWV0aG9kX25hbWUpKTsKCX0KCgljYWxsTWV0aG9kVihtYiwgTUVUSE9EX0lO RElSRUNUTUVUSE9EKG1iKSwgb2JqLCBhcmdwdHIsICZyZXR2YWwpOwoKCXJldHVybiAocmV0dmFs KTsKfQoKanZhbHVlCmRvX2V4ZWN1dGVfamF2YV9tZXRob2Qodm9pZCogb2JqLCBjb25zdCBjaGFy KiBtZXRob2RfbmFtZSwgY29uc3QgY2hhciogc2lnbmF0dXJlLCBNZXRob2QqIG1iLCBpbnQgaXNT dGF0aWNDYWxsLCAuLi4pCnsKCXZhX2xpc3QgYXJncHRyOwoJanZhbHVlIHJldHZhbDsKCglhc3Nl cnQobWV0aG9kX25hbWUgIT0gMCB8fCBtYiAhPSAwKTsKCgl2YV9zdGFydChhcmdwdHIsIGlzU3Rh dGljQ2FsbCk7CglyZXR2YWwgPSBkb19leGVjdXRlX2phdmFfbWV0aG9kX3Yob2JqLCBtZXRob2Rf bmFtZSwgc2lnbmF0dXJlLCBtYiwgaXNTdGF0aWNDYWxsLCBhcmdwdHIpOwoJdmFfZW5kKGFyZ3B0 cik7CgoJcmV0dXJuIChyZXR2YWwpOwp9CgovKgogKiBDYWxsIGEgSmF2YSBzdGF0aWMgbWV0aG9k IG9uIGEgY2xhc3MgZnJvbSBuYXRpdmUgY29kZS4KICovCmp2YWx1ZQpkb19leGVjdXRlX2phdmFf Y2xhc3NfbWV0aG9kX3YoY29uc3QgY2hhciogY25hbWUsCglIamF2YV9sYW5nX0NsYXNzTG9hZGVy KiBsb2FkZXIsIGNvbnN0IGNoYXIqIG1ldGhvZF9uYW1lLAoJY29uc3QgY2hhciogc2lnbmF0dXJl LCB2YV9saXN0IGFyZ3B0cikKewoJSGphdmFfbGFuZ19DbGFzcyogY2xheno7CgllcnJvckluZm8g aW5mbzsKCU1ldGhvZCogbWIgPSAwOwoJanZhbHVlIHJldHZhbDsKCWNoYXIgKmJ1ZjsKCgkvKiBD b252ZXJ0ICIuIiB0byAiLyIgYW5kIGxvb2t1cCBjbGFzcyAqLwoJYnVmID0gY2hlY2tQdHIoS01B TExPQyhzdHJsZW4oY25hbWUpICsgMSkpOwoJY2xhc3NuYW1lMnBhdGhuYW1lKGNuYW1lLCBidWYp OwoJY2xhenogPSBsb29rdXBDbGFzcyhidWYsIGxvYWRlciwgJmluZm8pOwoJS0ZSRUUoYnVmKTsK CgkvKiBHZXQgbWV0aG9kICovCglpZiAoY2xhenogIT0gMCkgewoJCW1iID0gbG9va3VwQ2xhc3NN ZXRob2QoY2xhenosIG1ldGhvZF9uYW1lLCBzaWduYXR1cmUsICZpbmZvKTsKCX0KCWlmIChtYiA9 PSAwKSB7CgkJdGhyb3dFcnJvcigmaW5mbyk7Cgl9CgoJLyogTWV0aG9kIG11c3QgYmUgc3RhdGlj IHRvIGludm9rZSBpdCBoZXJlICovCglpZiAoKG1iLT5hY2NmbGFncyAmIEFDQ19TVEFUSUMpID09 IDApIHsKCQl0aHJvd0V4Y2VwdGlvbihOb1N1Y2hNZXRob2RFcnJvcihtZXRob2RfbmFtZSkpOwoJ fQoKCS8qIE1ha2UgdGhlIGNhbGwgKi8KCWNhbGxNZXRob2RWKG1iLCBNRVRIT0RfSU5ESVJFQ1RN RVRIT0QobWIpLCAwLCBhcmdwdHIsICZyZXR2YWwpOwoKCXJldHVybiAocmV0dmFsKTsKfQoKanZh bHVlCmRvX2V4ZWN1dGVfamF2YV9jbGFzc19tZXRob2QoY29uc3QgY2hhciogY25hbWUsIEhqYXZh X2xhbmdfQ2xhc3NMb2FkZXIqbG9hZGVyLAoJY29uc3QgY2hhciogbWV0aG9kX25hbWUsIGNvbnN0 IGNoYXIqIHNpZ25hdHVyZSwgLi4uKQp7Cgl2YV9saXN0IGFyZ3B0cjsKCWp2YWx1ZSByZXR2YWw7 CgoJdmFfc3RhcnQoYXJncHRyLCBzaWduYXR1cmUpOwoJcmV0dmFsID0gZG9fZXhlY3V0ZV9qYXZh X2NsYXNzX21ldGhvZF92KGNuYW1lLCBsb2FkZXIsIG1ldGhvZF9uYW1lLCBzaWduYXR1cmUsIGFy Z3B0cik7Cgl2YV9lbmQoYXJncHRyKTsKCglyZXR1cm4gKHJldHZhbCk7Cn0KCi8qCiAqIEFsbG9j YXRlIGFuIG9iamVjdCBhbmQgZXhlY3V0ZSB0aGUgY29uc3RydWN0b3IuCiAqLwpIamF2YV9sYW5n X09iamVjdCoKZXhlY3V0ZV9qYXZhX2NvbnN0cnVjdG9yX3YoY29uc3QgY2hhciogY25hbWUsIEhq YXZhX2xhbmdfQ2xhc3NMb2FkZXIqIGxvYWRlciwKCUhqYXZhX2xhbmdfQ2xhc3MqIGNjLCBjb25z dCBjaGFyKiBzaWduYXR1cmUsIHZhX2xpc3QgYXJncHRyKQp7CglIamF2YV9sYW5nX09iamVjdCog b2JqOwoJTWV0aG9kKiBtYjsKCWp2YWx1ZSByZXR2YWw7CgllcnJvckluZm8gaW5mbzsKCVV0ZjhD b25zdCogc2lnOwoKCWlmIChjYyA9PSAwKSB7CgkJY2hhciAqYnVmOwoKCQkvKiBDb252ZXJ0ICIu IiB0byAiLyIgYW5kIGxvb2t1cCBjbGFzcyAqLwoJCWJ1ZiA9IGNoZWNrUHRyKEtNQUxMT0Moc3Ry bGVuKGNuYW1lKSArIDEpKTsKCQljbGFzc25hbWUycGF0aG5hbWUoY25hbWUsIGJ1Zik7CgkJY2Mg PSBsb29rdXBDbGFzcyhidWYsIGxvYWRlciwgJmluZm8pOwoJCUtGUkVFKGJ1Zik7CgkJaWYgKCFj YykgewoJCQl0aHJvd0Vycm9yKCZpbmZvKTsKCQl9Cgl9CgoJLyogV2UgY2Fubm90IGNvbnN0cnVj dCBpbnRlcmZhY2VzIG9yIGFic3RyYWN0IGNsYXNzZXMgKi8KCWlmIChDTEFTU19JU19JTlRFUkZB Q0UoY2MpIHx8IENMQVNTX0lTX0FCU1RSQUNUKGNjKSkgewoJCXRocm93RXhjZXB0aW9uKEluc3Rh bnRpYXRpb25FeGNlcHRpb24oY2MtPm5hbWUtPmRhdGEpKTsKCX0KCglpZiAoY2MtPnN0YXRlIDwg Q1NUQVRFX1VTQUJMRSkgewoJCWlmIChwcm9jZXNzQ2xhc3MoY2MsIENTVEFURV9DT01QTEVURSwg JmluZm8pID09IGZhbHNlKSB7CgkJCXRocm93RXJyb3IoJmluZm8pOwoJCX0KCX0KCglzaWcgPSBj aGVja1B0cih1dGY4Q29uc3ROZXcoc2lnbmF0dXJlLCAtMSkpOwoJbWIgPSBmaW5kTWV0aG9kTG9j YWwoY2MsIGNvbnN0cnVjdG9yX25hbWUsIHNpZyk7Cgl1dGY4Q29uc3RSZWxlYXNlKHNpZyk7Cglp ZiAobWIgPT0gMCkgewoJCXRocm93RXhjZXB0aW9uKE5vU3VjaE1ldGhvZEVycm9yKGNvbnN0cnVj dG9yX25hbWUtPmRhdGEpKTsKCX0KCglvYmogPSBuZXdPYmplY3QoY2MpOwoJYXNzZXJ0KG9iaiAh PSAwKTsKCgkvKiBNYWtlIHRoZSBjYWxsICovCgljYWxsTWV0aG9kVihtYiwgTUVUSE9EX0lORElS RUNUTUVUSE9EKG1iKSwgb2JqLCBhcmdwdHIsICZyZXR2YWwpOwoKCXJldHVybiAob2JqKTsKfQoK SGphdmFfbGFuZ19PYmplY3QqCmV4ZWN1dGVfamF2YV9jb25zdHJ1Y3Rvcihjb25zdCBjaGFyKiBj bmFtZSwgSGphdmFfbGFuZ19DbGFzc0xvYWRlciogbG9hZGVyLAoJSGphdmFfbGFuZ19DbGFzcyog Y2MsIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSwgLi4uKQp7Cgl2YV9saXN0IGFyZ3B0cjsKCUhqYXZh X2xhbmdfT2JqZWN0KiBvYmo7CgoJdmFfc3RhcnQoYXJncHRyLCBzaWduYXR1cmUpOwoJb2JqID0g ZXhlY3V0ZV9qYXZhX2NvbnN0cnVjdG9yX3YoY25hbWUsIGxvYWRlciwgY2MsIHNpZ25hdHVyZSwg YXJncHRyKTsKCXZhX2VuZChhcmdwdHIpOwoKCXJldHVybiAob2JqKTsKfQoKLyogVGhpcyBpcyBk ZWZpbmVkIGluIHRoZSBhbHBoYSBwb3J0LiAgSXQgY2F1c2VzIGFsbCBpbnRlZ2VyIGFyZ3VtZW50 cwogICB0byBiZSBwcm9tb3RlZCB0byBqbG9uZywgYW5kIGFsbCBqZmxvYXRzIHRvIGJlIHByb21v dGVkIHRvIGpkb3VibGUsCiAgIHVubGVzcyBleHBsaWNpdGx5IG92ZXJyaWRkZW4uICBJdCBpbXBs aWVzIE5PX0hPTEVTLCB1bmxlc3MKICAgZXhwbGljaXRseSBkZWZpbmVkIG90aGVyd2lzZS4gICov CiNpZiBQUk9NT1RFX1RPXzY0Yml0cwojIGlmbmRlZiBQUk9NT1RFX2ppbnQyamxvbmcKIyAgZGVm aW5lIFBST01PVEVfamludDJqbG9uZyAxCiMgZW5kaWYKIyBpZm5kZWYgUFJPTU9URV9qZmxvYXQy amRvdWJsZQojICBkZWZpbmUgUFJPTU9URV9qZmxvYXQyamRvdWJsZSAxCiMgZW5kaWYKLyogTk9f SE9MRVMgY2F1c2VzIGFsbCB0eXBlcyB0byBvY2N1cHkgb25seSBvbmUgc2xvdCBpbiBjYWxsYXJn cywgYnV0CiAgIG5vdCBhZmZlY3RpbmcgdGhlaXIgY2FsbHNpemVzLCB0aGF0IGNhbiBzdGlsbCBi ZSB1c2VkIHRvCiAgIGRpc3Rpbmd1aXNoIGFtb25nIHR5cGVzLiAgKi8KIyBpZm5kZWYgTk9fSE9M RVMKIyAgZGVmaW5lIE5PX0hPTEVTIDEKIyBlbmRpZgojZW5kaWYKCi8qIElmIFBST01PVEVfamlu dDJqbG9uZyBpcyBlbmFibGVkLCBhbGwgaW50ZWdlciB2YWx1ZXMgYXJlIHRvIGJlCiAgIHBhc3Nl ZCBhcyBqbG9uZ3MuICBJdCBpcyBvbmx5IHNldCBieSBQUk9NT1RFX1RPXzY0Yml0cy4gICovCiNp ZiBQUk9NT1RFX2ppbnQyamxvbmcKIyBkZWZpbmUgUFJPTV9pIGoKI2Vsc2UKIyBkZWZpbmUgUFJP TV9pIGkKI2VuZGlmCgovKiBJZiBQUk9NT1RFX2pmbG9hdDJqZG91YmxlIGlzIGVuYWJsZWQsIGpm bG9hdHMgYXJlIHRvIGJlIHBhc3NlZCBhcwogICBqZG91Ymxlcy4gIE5vdGUgdGhhdCwgd2hlbiBh IGpmbG9hdCBpcyBwcm9tb3RlZCwgaXRzIGNhbGx0eXBlIHdpbGwKICAgYmUgbWFya2VkIGFzICdE Jy4gIE5vIGtub3duIHBvcnQgdXNlcyB0aGlzLiAgSW4gZmFjdCwgYWxwaGEgbXVzdAogICBleHBs aWNpdGx5IHNldCBpdCB0byAwLCB0byBwcmV2ZW50IFBST01PVEVfVE9fNjRiaXRzIGZyb20gZW5h YmxpbmcKICAgaXQuICAqLwojaWYgUFJPTU9URV9qZmxvYXQyamRvdWJsZQojIGRlZmluZSBQUk9N X2YgZAojZWxzZQojIGRlZmluZSBQUk9NX2YgZgojZW5kaWYKCi8qIFRoaXMgaXMgY3VycmVudGx5 IGRlZmluZWQgaW4gdGhlIE1JUFMgTzMyIHBvcnQuICBJdCBjYXVzZXMgamxvbmdzCiAgIGFuZCBq ZG91YmxlcyB0byBiZSBmb3JjZWQgaW50byBldmVuIGFyZ3VtZW50cywgYnkgaW50cm9kdWNpbmcg YQogICBwYWRkaW5nIGludGVnZXIgYXJndW1lbnQuIFRoZSBhcmd1bWVudCBETyBpcyB1c2VkIHRv IGFkanVzdCB0aGUKICAgaW5wdXQgYXJndW1lbnQgbGlzdC4gICovCiNpZiBBTElHTl9BVF82NGJp dHMKIyBpZiBOT19IT0xFUwojICBlcnJvciAiQUxJR05fQVRfNjRiaXRzIGlzIGluY29tcGF0aWJs ZSB3aXRoIE5PX0hPTEVTIgojIGVuZGlmCiMgZGVmaW5lIEVOU1VSRV9BTElHTjY0KERPKSBkbyB7 IGlmIChjYWxsLmNhbGxzaXplW2ldID09IDIgJiYgKGkgJiAxKSkgeyBjYWxsLmNhbGxzaXplW2ld ID0gMDsgY2FsbC5jYWxsdHlwZVtpXSA9ICdJJzsgRE87ICsraTsgKytzOyBjYWxsLmNhbGxzaXpl W2ldID0gMjsgfSB9IHdoaWxlICgwKQojZWxzZQojIGRlZmluZSBFTlNVUkVfQUxJR042NChETykg ZG8ge30gd2hpbGUgKDApCiNlbmRpZgoKLyoKICogR2VuZXJpYyByb3V0aW5lIHRvIGNhbGwgYSBu YXRpdmUgb3IgSmF2YSBtZXRob2QgKGFycmF5IHN0eWxlKS4KICovCnZvaWQKY2FsbE1ldGhvZEEo TWV0aG9kKiBtZXRoLCB2b2lkKiBmdW5jLCB2b2lkKiBvYmosIGp2YWx1ZSogYXJncywganZhbHVl KiByZXQsCgkgICAgaW50IHByb21vdGVkKQp7CglpbnQgaTsKCWludCBqOwoJaW50IHM7CgkvKiBY WFggY2FsbC5jYWxsc2l6ZSBhbmQgY2FsbC5jYWxsdHlwZSBhcnJheXMgYXJlIHN0YXRpY2FsbHkg c2l6ZWQgCgkgICBhbmQgYXJlIG5vdCBjaGVja2VkIGZvciBydW5uaW5nIG91dCBvZiBib3VuZHMg Ki8KCWNhbGxNZXRob2RJbmZvIGNhbGw7CQoJanZhbHVlIGluW01BWE1BUkdTXTsKCWp2YWx1ZSB0 bXA7CgoJaWYgKHJldCA9PSAwKSB7CgkJcmV0ID0gJnRtcDsKCX0KCWkgPSAwOwoJcyA9IDA7Cgoj aWYgZGVmaW5lZChJTlRFUlBSRVRFUikKCS8qCgkgKiBJZiB0aGUgbWV0aG9kIGlzIG5hdGl2ZSwg d2UgbXVzdCBmaW5kIGl0IHNvIHRoYXQgd2Uga25vdyB3aGV0aGVyCgkgKiBpdCBpcyBhIEpOSSBt ZXRob2Qgb3Igbm90LiAgSWYgaXQgaXMgb25lLCBBQ0NfSk5JIHdpbGwgYmUgc2V0CgkgKiB1cG9u IHJldHVybiBmcm9tIG5hdGl2ZSBhbmQgd2Ugd2lsbCBhZGQgYWRkaXRpb25hbCBwYXJhbWV0ZXJz IAoJICogYWNjb3JkaW5nIHRvIHRoZSBKTkkgY2FsbGluZyBjb252ZW50aW9uLgoJICovCgltZXRo ID0gKE1ldGhvZCopZnVuYzsKCWlmIChtZXRoLT5hY2NmbGFncyAmIEFDQ19OQVRJVkUpIHsKCQlp ZiAoIU1FVEhPRF9UUkFOU0xBVEVEKG1ldGgpKSB7CgkJCWVycm9ySW5mbyBpbmZvOwoJCQlpZiAo bmF0aXZlKG1ldGgsICZpbmZvKSA9PSBmYWxzZSkgewoJCQkJdGhyb3dFcnJvcigmaW5mbyk7CgkJ CX0KCQl9CgkJY2FsbC5mdW5jdGlvbiA9IE1FVEhPRF9OQVRJVkVDT0RFKG1ldGgpOwoJfQoKCS8q IEluc2VydCB0aGUgSk5JIGVudmlyb25tZW50ICovCglpZiAobWV0aC0+YWNjZmxhZ3MgJiBBQ0Nf Sk5JKSB7CgkJY2FsbC5jYWxsc2l6ZVtpXSA9IFBUUl9UWVBFX1NJWkUgLyBTSVpFT0ZfSU5UOwoJ CWNhbGwuY2FsbHR5cGVbaV0gPSAnTCc7CgkJaW5baV0ubCA9ICh2b2lkKikmS2FmZmVfSk5JRW52 OwoJCXMgKz0gY2FsbC5jYWxsc2l6ZVtpXTsKCQlpKys7CgkJYXJncy0tOyAvKiBiZWNhdXNlIGFy Z3NbaV0gd291bGQgYmUgb2ZmIGJ5IG9uZSAqLwoKCQkvKiBJZiBtZXRob2QgaXMgc3RhdGljIHdl IG11c3QgaW5zZXJ0IHRoZSBjbGFzcyBhcyBhbiBhcmd1bWVudCAqLwoJCWlmIChtZXRoLT5hY2Nm bGFncyAmIEFDQ19TVEFUSUMpIHsKCQkJY2FsbC5jYWxsc2l6ZVtpXSA9IFBUUl9UWVBFX1NJWkUg LyBTSVpFT0ZfSU5UOwoJCQlzICs9IGNhbGwuY2FsbHNpemVbaV07CgkJCWNhbGwuY2FsbHR5cGVb aV0gPSAnTCc7CgkJCWluW2ldLmwgPSBtZXRoLT5jbGFzczsKCQkJaSsrOwoJCQlhcmdzLS07IC8q IGJlY2F1c2UgYXJnc1tpXSB3b3VsZCBiZSBvZmYgYnkgb25lICovCgkJfQoJfSAKI2VuZGlmCgoJ LyogSWYgdGhpcyBtZXRob2QgaXNuJ3Qgc3RhdGljLCB3ZSBtdXN0IGluc2VydCB0aGUgb2JqZWN0 IGFzCgkgKiBhbiBhcmd1bWVudC4KIAkgKi8KCWlmICgobWV0aC0+YWNjZmxhZ3MgJiBBQ0NfU1RB VElDKSA9PSAwKSB7CgkJY2FsbC5jYWxsc2l6ZVtpXSA9IFBUUl9UWVBFX1NJWkUgLyBTSVpFT0Zf SU5UOwoJCXMgKz0gY2FsbC5jYWxsc2l6ZVtpXTsKCQljYWxsLmNhbGx0eXBlW2ldID0gJ0wnOwoJ CWluW2ldLmwgPSBvYmo7CgkJaSsrOwoJCWFyZ3MtLTsgLyogYmVjYXVzZSBhcmdzW2ldIHdvdWxk IGJlIG9mZiBieSBvbmUgKi8KCX0KCglmb3IgKGogPSAwOyBqIDwgTUVUSE9EX05BUkdTKG1ldGgp OyBpKyssIGorKykgewoJCWNhbGwuY2FsbHR5cGVbaV0gPSAqTUVUSE9EX0FSR19UWVBFKG1ldGgs IGopOwoJCXN3aXRjaCAoY2FsbC5jYWxsdHlwZVtpXSkgewoJCWNhc2UgJ1onOgoJCQlpZiAocHJv bW90ZWQpIGdvdG8gdXNlX2ludDsKCQkJY2FsbC5jYWxsc2l6ZVtpXSA9IDE7CgkJCWluW2ldLlBS T01faSA9IGFyZ3NbaV0uejsKCQkJYnJlYWs7CgoJCWNhc2UgJ1MnOgoJCQlpZiAocHJvbW90ZWQp IGdvdG8gdXNlX2ludDsKCQkJY2FsbC5jYWxsc2l6ZVtpXSA9IDE7CgkJCWluW2ldLlBST01faSA9 IGFyZ3NbaV0uczsKCQkJYnJlYWs7CgoJCWNhc2UgJ0InOgoJCQlpZiAocHJvbW90ZWQpIGdvdG8g dXNlX2ludDsKCQkJY2FsbC5jYWxsc2l6ZVtpXSA9IDE7CgkJCWluW2ldLlBST01faSA9IGFyZ3Nb aV0uYjsKCQkJYnJlYWs7CgoJCWNhc2UgJ0MnOgoJCQlpZiAocHJvbW90ZWQpIGdvdG8gdXNlX2lu dDsKCQkJY2FsbC5jYWxsc2l6ZVtpXSA9IDE7CgkJCWluW2ldLlBST01faSA9IGFyZ3NbaV0uYzsK CQkJYnJlYWs7CgoJCWNhc2UgJ0YnOgoJCQljYWxsLmNhbGxzaXplW2ldID0gMTsKCQkJaW5baV0u UFJPTV9mID0gYXJnc1tpXS5mOwojaWYgUFJPTU9URV9qZmxvYXQyamRvdWJsZQoJCQljYWxsLmNh bGx0eXBlW2ldID0gJ0QnOwojZW5kaWYKCQkJYnJlYWs7CgkJY2FzZSAnSSc6CgkJdXNlX2ludDoK CQkJY2FsbC5jYWxsc2l6ZVtpXSA9IDE7CgkJCWluW2ldLlBST01faSA9IGFyZ3NbaV0uaTsKCQkJ YnJlYWs7CgkJY2FzZSAnRCc6CgkJY2FzZSAnSic6CgkJCWNhbGwuY2FsbHNpemVbaV0gPSAyOwoJ CQlFTlNVUkVfQUxJR042NCgtLWFyZ3MpOwoJCQlpbltpXSA9IGFyZ3NbaV07CiNpZiBOT19IT0xF UwoJCQkrK2FyZ3M7IC8qIFNpbmNlIHdlJ2xsIG5vdCBiZSBpbmNyZW1lbnRpbmcgaSAqLwojZWxz ZQoJCQlzICs9IGNhbGwuY2FsbHNpemVbaV07CgkJCWluW2krMV0uaSA9ICgmYXJnc1tpXS5pKVsx XTsKCQkJaSsrOwoJCQljYWxsLmNhbGx0eXBlW2ldID0gMDsKCQkJY2FsbC5jYWxsc2l6ZVtpXSA9 IDA7CiNlbmRpZgoJCQlicmVhazsKCQljYXNlICdbJzoKCQkJY2FsbC5jYWxsdHlwZVtpXSA9ICdM JzsKCQkJLyogZmFsbCB0aHJvdWdoICovCgkJY2FzZSAnTCc6CgkJCWNhbGwuY2FsbHNpemVbaV0g PSBQVFJfVFlQRV9TSVpFIC8gU0laRU9GX0lOVDsKCQkJaW5baV0gPSBhcmdzW2ldOwoJCQlicmVh azsKCQlkZWZhdWx0OgoJCQlBQk9SVCgpOwoJCX0KCQlzICs9IGNhbGwuY2FsbHNpemVbaV07Cgl9 CgojaWYgZGVmaW5lZChTVEFDS19MSU1JVCkKCWNhbGwuY2FsbHR5cGVbaV0gPSAnTCc7CgljYWxs LmNhbGxzaXplW2ldID0gUFRSX1RZUEVfU0laRSAvIFNJWkVPRl9JTlQ7CglpbltpXS5sID0ganRo cmVhZF9zdGFja2xpbWl0KCk7CglzICs9IFBUUl9UWVBFX1NJWkUgLyBTSVpFT0ZfSU5UOwoJaSsr OwojZW5kaWYKCgkvKiBSZXR1cm4gaW5mbyAqLwoJY2FsbC5yZXR0eXBlID0gKk1FVEhPRF9SRVRf VFlQRShtZXRoKTsKCXN3aXRjaCAoY2FsbC5yZXR0eXBlKSB7CgljYXNlICdbJzoKCQljYWxsLnJl dHR5cGUgPSAnTCc7CgkJLyogZmFsbCB0aHJvdWdoICovCgljYXNlICdMJzoKCQljYWxsLnJldHNp emUgPSBQVFJfVFlQRV9TSVpFIC8gU0laRU9GX0lOVDsKCQlicmVhazsKCWNhc2UgJ1YnOgoJCWNh bGwucmV0c2l6ZSA9IDA7CgkJYnJlYWs7CgljYXNlICdEJzoKCWNhc2UgJ0onOgoJCWNhbGwucmV0 c2l6ZSA9IDI7CgkJYnJlYWs7CglkZWZhdWx0OgoJCWNhbGwucmV0c2l6ZSA9IDE7CgkJYnJlYWs7 Cgl9CgoJLyogQ2FsbCBpbmZvIGFuZCBhcmd1bWVudHMgKi8KCWNhbGwubnJhcmdzID0gaTsKCWNh bGwuYXJnc2l6ZSA9IHM7CgljYWxsLmFyZ3MgPSBpbjsKCWNhbGwucmV0ID0gcmV0OwoKCiNpZiBk ZWZpbmVkKFRSQU5TTEFUT1IpCgljYWxsLmZ1bmN0aW9uID0gZnVuYzsKCgkvKiBHQ0RJQUcgd2lw ZXMgZnJlZSBtZW1vcnkgd2l0aCAweGY0Li4uICovCglhc3NlcnQoY2FsbC5mdW5jdGlvbik7Cglh c3NlcnQoKih1aW50MzIqKShjYWxsLmZ1bmN0aW9uKSAhPSAweGY0ZjRmNGY0KTsKCgkvKiBNYWtl IHRoZSBjYWxsIC0gc3lzdGVtIGRlcGVuZGVudCAqLwoJc3lzZGVwQ2FsbE1ldGhvZCgmY2FsbCk7 CiNlbmRpZgojaWYgZGVmaW5lZChJTlRFUlBSRVRFUikKCWlmICgobWV0aC0+YWNjZmxhZ3MgJiBB Q0NfTkFUSVZFKSA9PSAwKSB7CgkJdmlydHVhbE1hY2hpbmUobWV0aCwgKHNsb3RzKiljYWxsLmFy Z3MsIChzbG90cyopY2FsbC5yZXQsIGdldEN1cnJlbnRUaHJlYWQoKSk7Cgl9CgllbHNlIHsKCQlI amF2YV9sYW5nX09iamVjdCogc3luY29iaiA9IDA7CgkJdm1FeGNlcHRpb24gbWpidWY7CgkJSGph dmFfbGFuZ19UaHJlYWQqIHRpZCA9IGdldEN1cnJlbnRUaHJlYWQoKTsKCgkJaWYgKG1ldGgtPmFj Y2ZsYWdzICYgQUNDX1NZTkNIUk9OSVNFRCkgewoJCQlpZiAobWV0aC0+YWNjZmxhZ3MgJiBBQ0Nf U1RBVElDKSB7CgkJCQlzeW5jb2JqID0gJm1ldGgtPmNsYXNzLT5oZWFkOwoJCQl9CgkJCWVsc2Ug ewoJCQkJc3luY29iaiA9IChIamF2YV9sYW5nX09iamVjdCopY2FsbC5hcmdzWzBdLmw7CgkJCX0K CQkJbG9ja09iamVjdChzeW5jb2JqKTsKCQl9CgoJCW1qYnVmLnBjID0gMDsKCQltamJ1Zi5tb2Jq ID0gc3luY29iajsKCQltamJ1Zi5tZXRoID0gbWV0aDsKCQlpZiAodGlkICE9IE5VTEwgJiYgdW5o YW5kKHRpZCktPlByaXZhdGVJbmZvICE9IDApIHsKCQkJbWpidWYucHJldiA9ICh2bUV4Y2VwdGlv biopdW5oYW5kKHRpZCktPmV4Y2VwdFB0cjsKCQkJdW5oYW5kKHRpZCktPmV4Y2VwdFB0ciA9IChz dHJ1Y3QgSGthZmZlX3V0aWxfUHRyKikmbWpidWY7CgkJfQoKCQkvKiBNYWtlIHRoZSBjYWxsIC0g c3lzdGVtIGRlcGVuZGVudCAqLwoJCXN5c2RlcENhbGxNZXRob2QoJmNhbGwpOwoKCQlpZiAoc3lu Y29iaiAhPSAwKSB7CgkJCXVubG9ja09iamVjdChzeW5jb2JqKTsKCQl9CgoJCWlmICh0aWQgIT0g TlVMTCAmJiB1bmhhbmQodGlkKS0+UHJpdmF0ZUluZm8gIT0gMCkgewoJCQl1bmhhbmQodGlkKS0+ ZXhjZXB0UHRyID0gKHN0cnVjdCBIa2FmZmVfdXRpbF9QdHIqKW1qYnVmLnByZXY7CgkJfQoJfQoj ZW5kaWYKCWlmICghcHJvbW90ZWQgJiYgY2FsbC5yZXRzaXplID09IDEpIHsKCQlzd2l0Y2ggKGNh bGwucmV0dHlwZSkgewoJCWNhc2UgJ1onOgoJCQlyZXQtPnogPSByZXQtPmk7CgkJCWJyZWFrOwoJ CWNhc2UgJ1MnOgoJCQlyZXQtPnMgPSByZXQtPmk7CgkJCWJyZWFrOwoJCWNhc2UgJ0InOgoJCQly ZXQtPmIgPSByZXQtPmk7CgkJCWJyZWFrOwoJCWNhc2UgJ0MnOgoJCQlyZXQtPmMgPSByZXQtPmk7 CgkJCWJyZWFrOwoJCX0KCX0KfQoKLyoKICogR2VuZXJpYyByb3V0aW5lIHRvIGNhbGwgYSBuYXRp dmUgb3IgSmF2YSBtZXRob2QgKHZhcmFyZ3Mgc3R5bGUpLgogKi8Kdm9pZApjYWxsTWV0aG9kVihN ZXRob2QqIG1ldGgsIHZvaWQqIGZ1bmMsIHZvaWQqIG9iaiwgdmFfbGlzdCBhcmdzLCBqdmFsdWUq IHJldCkKewogIC8qIGNvbnN0IGNoYXIqIHNpZzsgRklYTUUgKi8KCWludCBpOwoJaW50IHM7Cglp bnQgajsKCS8qIFhYWCBjYWxsLmNhbGxzaXplIGFuZCBjYWxsLmNhbGx0eXBlIGFycmF5cyBhcmUg c3RhdGljYWxseSBzaXplZCAKCSAgIGFuZCBhcmUgbm90IGNoZWNrZWQgZm9yIHJ1bm5pbmcgb3V0 IG9mIGJvdW5kcyAqLwoJY2FsbE1ldGhvZEluZm8gY2FsbDsKCWp2YWx1ZSBpbltNQVhNQVJHU107 CglqdmFsdWUgdG1wOwoKCWlmIChyZXQgPT0gMCkgewoJCXJldCA9ICZ0bXA7Cgl9CglpID0gMDsK CXMgPSAwOwoKI2lmIGRlZmluZWQoSU5URVJQUkVURVIpCgltZXRoID0gKE1ldGhvZCopZnVuYzsK CWlmIChtZXRoLT5hY2NmbGFncyAmIEFDQ19OQVRJVkUpIHsKICAgICAgICAgICAgICAgIGlmIChN RVRIT0RfTkFUSVZFQ09ERShtZXRoKSA9PSAwKSB7CgkJCWVycm9ySW5mbyBpbmZvOwoJCQlpZiAo bmF0aXZlKG1ldGgsICZpbmZvKSA9PSBmYWxzZSkgewoJCQkJdGhyb3dFcnJvcigmaW5mbyk7CgkJ CX0KICAgICAgICAgICAgICAgIH0KCQljYWxsLmZ1bmN0aW9uID0gTUVUSE9EX05BVElWRUNPREUo bWV0aCk7Cgl9CgoJLyogSW5zZXJ0IHRoZSBKTkkgZW52aXJvbm1lbnQgKi8KCWlmIChtZXRoLT5h Y2NmbGFncyAmIEFDQ19KTkkpIHsKCQljYWxsLmNhbGxzaXplW2ldID0gUFRSX1RZUEVfU0laRSAv IFNJWkVPRl9JTlQ7CgkJY2FsbC5jYWxsdHlwZVtpXSA9ICdMJzsKCQlpbltpXS5sID0gKHZvaWQq KSZLYWZmZV9KTklFbnY7CgkJcyArPSBjYWxsLmNhbGxzaXplW2ldOwoJCWkrKzsKCgkJLyogSWYg bWV0aG9kIGlzIHN0YXRpYyB3ZSBtdXN0IGluc2VydCB0aGUgY2xhc3MgYXMgYW4gCgkJICogYXJn dW1lbnQgCgkJICovCgkJaWYgKG1ldGgtPmFjY2ZsYWdzICYgQUNDX1NUQVRJQykgewoJCQljYWxs LmNhbGxzaXplW2ldID0gUFRSX1RZUEVfU0laRSAvIFNJWkVPRl9JTlQ7CgkJCXMgKz0gY2FsbC5j YWxsc2l6ZVtpXTsKCQkJY2FsbC5jYWxsdHlwZVtpXSA9ICdMJzsKCQkJaW5baV0ubCA9IG1ldGgt PmNsYXNzOwoJCQlpKys7CgkJfQoJfQojZW5kaWYKCgkvKiBJZiB0aGlzIG1ldGhvZCBpc24ndCBz dGF0aWMsIHdlIG11c3QgaW5zZXJ0IHRoZSBvYmplY3QgYXMKCSAqIHRoZSBmaXJzdCBhcmd1bWVu dCBhbmQgZ2V0IHRoZSBmdW5jdGlvbiBjb2RlLgogCSAqLwoJaWYgKChtZXRoLT5hY2NmbGFncyAm IEFDQ19TVEFUSUMpID09IDApIHsKCQljYWxsLmNhbGxzaXplW2ldID0gUFRSX1RZUEVfU0laRSAv IFNJWkVPRl9JTlQ7CgkJcyArPSBjYWxsLmNhbGxzaXplW2ldOwoJCWNhbGwuY2FsbHR5cGVbaV0g PSAnTCc7CgkJaW5baV0ubCA9IG9iajsKCQlpKys7Cgl9CgoJZm9yIChqID0gMDsgaiA8IE1FVEhP RF9OQVJHUyhtZXRoKTsgaSsrLCBqKyspIHsKCQljYWxsLmNhbGx0eXBlW2ldID0gKk1FVEhPRF9B UkdfVFlQRShtZXRoLCBqKTsKCQlzd2l0Y2ggKGNhbGwuY2FsbHR5cGVbaV0pIHsKCQljYXNlICdJ JzoKCQljYXNlICdaJzoKCQljYXNlICdTJzoKCQljYXNlICdCJzoKCQljYXNlICdDJzoKCQkJY2Fs bC5jYWxsc2l6ZVtpXSA9IDE7CgkJCWluW2ldLlBST01faSA9IHZhX2FyZyhhcmdzLCBqaW50KTsK CQkJYnJlYWs7CgkJY2FzZSAnRic6CgkJCWNhbGwuY2FsbHNpemVbaV0gPSAxOwoJCQlpbltpXS5Q Uk9NX2YgPSAoamZsb2F0KXZhX2FyZyhhcmdzLCBqZG91YmxlKTsKI2lmIFBST01PVEVfVE9fNjRi aXRzCgkJCWNhbGwuY2FsbHR5cGVbaV0gPSAnRCc7CiNlbmRpZgoJCQlicmVhazsKCQljYXNlICdE JzoKCQkJY2FsbC5jYWxsc2l6ZVtpXSA9IDI7CgkJCUVOU1VSRV9BTElHTjY0KHt9KTsKCQkJaW5b aV0uZCA9IHZhX2FyZyhhcmdzLCBqZG91YmxlKTsKCQkJZ290byBzZWNvbmRfd29yZDsKCQljYXNl ICdKJzoKCQkJY2FsbC5jYWxsc2l6ZVtpXSA9IDI7CgkJCUVOU1VSRV9BTElHTjY0KHt9KTsKCQkJ aW5baV0uaiA9IHZhX2FyZyhhcmdzLCBqbG9uZyk7CgkJc2Vjb25kX3dvcmQ6CiNpZiAhIE5PX0hP TEVTCgkJCXMgKz0gY2FsbC5jYWxsc2l6ZVtpXTsKCQkJaW5baSsxXS5pID0gKCZpbltpXS5pKVsx XTsKCQkJaSsrOwoJCQljYWxsLmNhbGxzaXplW2ldID0gMDsKI2VuZGlmCgkJCWJyZWFrOwoJCWNh c2UgJ1snOgoJCQljYWxsLmNhbGx0eXBlW2ldID0gJ0wnOwoJCQkvKiBmYWxsIHRocm91Z2ggKi8K CQljYXNlICdMJzoKCQkJY2FsbC5jYWxsc2l6ZVtpXSA9IFBUUl9UWVBFX1NJWkUgLyBTSVpFT0Zf SU5UOwoJCQlpbltpXS5sID0gdmFfYXJnKGFyZ3MsIGpyZWYpOwoJCQlicmVhazsKCQlkZWZhdWx0 OgoJCQlBQk9SVCgpOwoJCX0KCQlzICs9IGNhbGwuY2FsbHNpemVbaV07Cgl9CgojaWYgZGVmaW5l ZChTVEFDS19MSU1JVCkKCWNhbGwuY2FsbHR5cGVbaV0gPSAnTCc7CgljYWxsLmNhbGxzaXplW2ld ID0gUFRSX1RZUEVfU0laRSAvIFNJWkVPRl9JTlQ7CglpbltpXS5sID0ganRocmVhZF9zdGFja2xp bWl0KCk7CglzICs9IFBUUl9UWVBFX1NJWkUgLyBTSVpFT0ZfSU5UOwoJaSsrOwojZW5kaWYKCgkv KiBSZXR1cm4gaW5mbyAqLwoJY2FsbC5yZXR0eXBlID0gKk1FVEhPRF9SRVRfVFlQRShtZXRoKTsK CXN3aXRjaCAoY2FsbC5yZXR0eXBlKSB7CgljYXNlICdbJzoKCQljYWxsLnJldHR5cGUgPSAnTCc7 CgkJLyogZmFsbCB0aHJvdWdoICovCgljYXNlICdMJzoKCQljYWxsLnJldHNpemUgPSBQVFJfVFlQ RV9TSVpFIC8gU0laRU9GX0lOVDsKCQlicmVhazsKCWNhc2UgJ1YnOgoJCWNhbGwucmV0c2l6ZSA9 IDA7CgkJYnJlYWs7CgljYXNlICdEJzoKCWNhc2UgJ0onOgoJCWNhbGwucmV0c2l6ZSA9IDI7CgkJ YnJlYWs7CglkZWZhdWx0OgoJCWNhbGwucmV0c2l6ZSA9IDE7CgkJYnJlYWs7Cgl9CgoJLyogQ2Fs bCBpbmZvIGFuZCBhcmd1bWVudHMgKi8KCWNhbGwubnJhcmdzID0gaTsKCWNhbGwuYXJnc2l6ZSA9 IHM7CgljYWxsLmFyZ3MgPSBpbjsKCWNhbGwucmV0ID0gcmV0OwoKI2lmIGRlZmluZWQoVFJBTlNM QVRPUikKCWFzc2VydCgoZnVuYyA9PSAoTUVUSE9EX05BVElWRUNPREUobWV0aCkpKQoJICAgICAg IHx8IChmdW5jID09ICgoKEhqYXZhX2xhbmdfT2JqZWN0KilvYmopLT5kdGFibGUtPm1ldGhvZFtt ZXRoLT5pZHhdKSkpOwoJY2FsbC5mdW5jdGlvbiA9IGZ1bmM7CgoJLyogR0NESUFHIHdpcGVzIGZy ZWUgbWVtb3J5IHdpdGggMHhmNC4uLiAqLwoJYXNzZXJ0KGNhbGwuZnVuY3Rpb24pOwoJYXNzZXJ0 KCoodWludDMyKikoY2FsbC5mdW5jdGlvbikgIT0gMHhmNGY0ZjRmNCk7CgoJLyogTWFrZSB0aGUg Y2FsbCAtIHN5c3RlbSBkZXBlbmRlbnQgKi8KCXN5c2RlcENhbGxNZXRob2QoJmNhbGwpOwojZW5k aWYKI2lmIGRlZmluZWQoSU5URVJQUkVURVIpCglpZiAoKG1ldGgtPmFjY2ZsYWdzICYgQUNDX05B VElWRSkgPT0gMCkgewoJCXZpcnR1YWxNYWNoaW5lKG1ldGgsIChzbG90cyopY2FsbC5hcmdzLCAo c2xvdHMqKWNhbGwucmV0LCBnZXRDdXJyZW50VGhyZWFkKCkpOwoJfQoJZWxzZSB7CgkJSGphdmFf bGFuZ19PYmplY3QqIHN5bmNvYmogPSAwOwoJCXZtRXhjZXB0aW9uIG1qYnVmOwoJCUhqYXZhX2xh bmdfVGhyZWFkKiB0aWQgPSBnZXRDdXJyZW50VGhyZWFkKCk7CgoJCWlmIChtZXRoLT5hY2NmbGFn cyAmIEFDQ19TWU5DSFJPTklTRUQpIHsKCQkJaWYgKG1ldGgtPmFjY2ZsYWdzICYgQUNDX1NUQVRJ QykgewoJCQkJc3luY29iaiA9ICZtZXRoLT5jbGFzcy0+aGVhZDsKCQkJfQoJCQllbHNlIHsKCQkJ CXN5bmNvYmogPSAoSGphdmFfbGFuZ19PYmplY3QqKWNhbGwuYXJnc1swXS5sOwoJCQl9CgkJCWxv Y2tPYmplY3Qoc3luY29iaik7CgkJfQoKCQltamJ1Zi5wYyA9IDA7CgkJbWpidWYubW9iaiA9IHN5 bmNvYmo7CgkJbWpidWYubWV0aCA9IG1ldGg7CgkJaWYgKHRpZCAhPSBOVUxMICYmIHVuaGFuZCh0 aWQpLT5Qcml2YXRlSW5mbyAhPSAwKSB7CgkJCW1qYnVmLnByZXYgPSAodm1FeGNlcHRpb24qKXVu aGFuZCh0aWQpLT5leGNlcHRQdHI7CgkJCXVuaGFuZCh0aWQpLT5leGNlcHRQdHIgPSAoc3RydWN0 IEhrYWZmZV91dGlsX1B0ciopJm1qYnVmOwoJCX0KCgkJLyogTWFrZSB0aGUgY2FsbCAtIHN5c3Rl bSBkZXBlbmRlbnQgKi8KCQlzeXNkZXBDYWxsTWV0aG9kKCZjYWxsKTsKCgkJaWYgKHN5bmNvYmog IT0gMCkgewoJCQl1bmxvY2tPYmplY3Qoc3luY29iaik7CgkJfQoKCQlpZiAodGlkICE9IE5VTEwg JiYgdW5oYW5kKHRpZCktPlByaXZhdGVJbmZvICE9IDApIHsKCQkJdW5oYW5kKHRpZCktPmV4Y2Vw dFB0ciA9IChzdHJ1Y3QgSGthZmZlX3V0aWxfUHRyKiltamJ1Zi5wcmV2OwoJCX0KCX0KI2VuZGlm Cn0KCi8qCiAqIExvb2t1cCBhIG1ldGhvZCBnaXZlbiBjbGFzcywgbmFtZSBhbmQgc2lnbmF0dXJl LgogKi8KTWV0aG9kKgpsb29rdXBDbGFzc01ldGhvZChIamF2YV9sYW5nX0NsYXNzKiBjbHMsIGNv bnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHNpZywgZXJyb3JJbmZvICplaW5mbykKewoJTWV0 aG9kICptZXRoOwoJVXRmOENvbnN0ICpuYW1lX3V0ZjgsICpzaWdfdXRmODsKCglhc3NlcnQoY2xz ICE9IDAgJiYgbmFtZSAhPSAwICYmIHNpZyAhPSAwKTsKCgluYW1lX3V0ZjggPSB1dGY4Q29uc3RO ZXcobmFtZSwgLTEpOwoJaWYgKCFuYW1lX3V0ZjgpIHsKCQlwb3N0T3V0T2ZNZW1vcnkoZWluZm8p OwoJCXJldHVybiAwOwoJfQoJc2lnX3V0ZjggPSB1dGY4Q29uc3ROZXcoc2lnLCAtMSk7CglpZiAo IXNpZ191dGY4KSB7CgkJdXRmOENvbnN0UmVsZWFzZShuYW1lX3V0ZjgpOwoJCXBvc3RPdXRPZk1l bW9yeShlaW5mbyk7CgkJcmV0dXJuIDA7Cgl9CgltZXRoID0gZmluZE1ldGhvZChjbHMsIG5hbWVf dXRmOCwgc2lnX3V0ZjgsIGVpbmZvKTsKCXV0ZjhDb25zdFJlbGVhc2UobmFtZV91dGY4KTsKCXV0 ZjhDb25zdFJlbGVhc2Uoc2lnX3V0ZjgpOwoJcmV0dXJuKG1ldGgpOwp9CgovKgogKiBMb29rdXAg YSBtZXRob2QgZ2l2ZW4gb2JqZWN0LCBuYW1lIGFuZCBzaWduYXR1cmUuCiAqLwpNZXRob2QqCmxv b2t1cE9iamVjdE1ldGhvZChIamF2YV9sYW5nX09iamVjdCogb2JqLCBjb25zdCBjaGFyKiBuYW1l LCBjb25zdCBjaGFyKiBzaWcsIGVycm9ySW5mbyAqZWluZm8pCnsKCWFzc2VydChvYmogIT0gMCAm JiBuYW1lICE9IDAgJiYgc2lnICE9IDApOwoJcmV0dXJuIChsb29rdXBDbGFzc01ldGhvZChPQkpF Q1RfQ0xBU1Mob2JqKSwgbmFtZSwgc2lnLCBlaW5mbykpOwp9CgovKgogKiBTaWduYWwgYW4gZXJy b3IgYnkgY3JlYXRpbmcgdGhlIG9iamVjdCBhbmQgdGhyb3dpbmcgdGhlIGV4Y2VwdGlvbi4KICog U2VlIGFsc28gU2lnbmFsRXJyb3JmCiAqLwp2b2lkClNpZ25hbEVycm9yKGNvbnN0IGNoYXIqIGNu YW1lLCBjb25zdCBjaGFyKiBzdHIpCnsKCUhqYXZhX2xhbmdfVGhyb3dhYmxlKiBvYmo7CgoJaWYg KHN0ciA9PSBOVUxMIHx8ICpzdHIgPT0gJ1wwJykgewoJCW9iaiA9IChIamF2YV9sYW5nX1Rocm93 YWJsZSopZXhlY3V0ZV9qYXZhX2NvbnN0cnVjdG9yKGNuYW1lLAoJCQkwLCAwLCBFUlJPUl9TSUdO QVRVUkUwKTsKCX0gZWxzZSB7CgkJb2JqID0gKEhqYXZhX2xhbmdfVGhyb3dhYmxlKilleGVjdXRl X2phdmFfY29uc3RydWN0b3IoY25hbWUsCgkJCTAsIDAsIEVSUk9SX1NJR05BVFVSRSwgY2hlY2tQ dHIoc3RyaW5nQzJKYXZhKHN0cikpKTsKCX0KCXRocm93RXhjZXB0aW9uKG9iaik7Cn0KCi8qCiAq IFNpZ25hbCBhbiBlcnJvciBieSBjcmVhdGluZyB0aGUgb2JqZWN0IGFuZCB0aHJvd2luZyB0aGUg ZXhjZXB0aW9uLgogKiBhbGxvd3MgZm9yIHByaW50Zi1saWtlIG1zZyBmb3JtYXQgd2l0aCBhZGRp dGlvbmFsIHBhcmFtZXRlcnMuCiAqLwp2b2lkClNpZ25hbEVycm9yZihjb25zdCBjaGFyKiBjbmFt ZSwgY29uc3QgY2hhciogZm10LCAuLi4pCnsKCWVycm9ySW5mbyBpbmZvOwoJdmFfbGlzdCBhcmdz OwoKCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Cgl2cG9zdEV4Y2VwdGlvbk1lc3NhZ2UoJmluZm8sIGNu YW1lLCBmbXQsIGFyZ3MpOwoJdmFfZW5kKGFyZ3MpOwoJdGhyb3dFcnJvcigmaW5mbyk7Cn0KCnN0 YXRpYyB2b2lkCnJlcGxhY2VjaGFyKGNvbnN0IGNoYXIqIGZyb20sIGNoYXIqIHRvLCBjaGFyIG9s ZCwgY2hhciBuZXcpCnsKCWludCBpOwoKCS8qIENvbnZlcnQgYW55ICdvbGQnIGluIG5hbWUgdG8g J25ldycgKi8KCWZvciAoaSA9IDA7IGZyb21baV0gIT0gMDsgaSsrKSB7CgkJaWYgKGZyb21baV0g PT0gb2xkKSB7CgkJCXRvW2ldID0gbmV3OwoJCX0KCQllbHNlIHsKCQkJdG9baV0gPSBmcm9tW2ld OwoJCX0KCX0KCXRvW2ldID0gMDsKfQoKLyoKICogQ29udmVydCBhIGNsYXNzIG5hbWUgdG8gYSBw YXRoIG5hbWUuCiAqLwp2b2lkCmNsYXNzbmFtZTJwYXRobmFtZShjb25zdCBjaGFyKiBmcm9tLCBj aGFyKiB0bykKewoJcmVwbGFjZWNoYXIoZnJvbSwgdG8sICcuJywgJy8nKTsKfQoKLyoKICogQ29u dmVydCBhIHBhdGggbmFtZSB0byBhIGNsYXNzIG5hbWUuCiAqLwp2b2lkCnBhdGhuYW1lMmNsYXNz bmFtZShjb25zdCBjaGFyKiBmcm9tLCBjaGFyKiB0bykKewoJcmVwbGFjZWNoYXIoZnJvbSwgdG8s ICcvJywgJy4nKTsKfQoKLyoKICogUmV0dXJuIGN1cnJlbnQgdGltZSBpbiBtaWxsaXNlY29uZHMu CiAqLwpqbG9uZwpjdXJyZW50VGltZSh2b2lkKQp7CglqbG9uZyB0bWU7CgojaWYgZGVmaW5lZChI QVZFX0dFVFRJTUVPRkRBWSkKCXN0cnVjdCB0aW1ldmFsIHRtOwoJZ2V0dGltZW9mZGF5KCZ0bSwg MCk7Cgl0bWUgPSAoKChqbG9uZyl0bS50dl9zZWMgKiAoamxvbmcpMTAwMCkgKyAoKGpsb25nKXRt LnR2X3VzZWMgLyAoamxvbmcpMTAwMCkpOwojZWxpZiBkZWZpbmVkKEhBVkVfRlRJTUUpCglzdHJ1 Y3QgdGltZWIgdG07CglmdGltZSgmdG0pOwoJdG1lID0gKCgoamxvbmcpdG0udGltZSAqIChqbG9u ZykxMDAwKSArIChqbG9uZyl0bS5taWxsaXRtKTsKI2VsaWYgZGVmaW5lZChIQVZFX19GVElNRSkK CXN0cnVjdCB0aW1lYiB0bTsKCV9mdGltZSgmdG0pOwoJdG1lID0gKCgoamxvbmcpdG0udGltZSAq IChqbG9uZykxMDAwKSArIChqbG9uZyl0bS5taWxsaXRtKTsKI2VsaWYgZGVmaW5lZChIQVZFX1RJ TUUpCgl0bWUgPSAoamxvbmcpMTAwMCAqIChqbG9uZyl0aW1lKDApOwojZWxzZQoJdG1lID0gMDsK I2VuZGlmCglyZXR1cm4gKHRtZSk7Cn0KCi8qCiAqIFNldCBhIHByb3BlcnR5IHRvIGEgdmFsdWUu CiAqLwp2b2lkCnNldFByb3BlcnR5KHZvaWQqIHByb3BlcnRpZXMsIGNoYXIqIGtleSwgY2hhciog dmFsdWUpCnsKCUhqYXZhX2xhbmdfU3RyaW5nKiBqa2V5OwoJSGphdmFfbGFuZ19TdHJpbmcqIGp2 YWx1ZTsKCglqa2V5ID0gY2hlY2tQdHIoc3RyaW5nQzJKYXZhKGtleSkpOwoJanZhbHVlID0gY2hl Y2tQdHIoc3RyaW5nQzJKYXZhKHZhbHVlKSk7CgoJZG9fZXhlY3V0ZV9qYXZhX21ldGhvZChwcm9w ZXJ0aWVzLCAicHV0IiwKCQkiKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylM amF2YS9sYW5nL09iamVjdDsiLAoJCTAsIGZhbHNlLCBqa2V5LCBqdmFsdWUpOwp9CgovKgogKiBB bGxvY2F0ZSBhIG5ldyBvYmplY3Qgb2YgdGhlIGdpdmVuIGNsYXNzIG5hbWUuCiAqLwpIamF2YV9s YW5nX09iamVjdCoKQWxsb2NPYmplY3QoY29uc3QgY2hhciogY2xhc3NuYW1lLCBIamF2YV9sYW5n X0NsYXNzTG9hZGVyKiBsb2FkZXIpCnsKCUhqYXZhX2xhbmdfQ2xhc3MqIGNsYXp6OwoJZXJyb3JJ bmZvIGluZm87CgoJY2xhenogPSBsb29rdXBDbGFzcyhjbGFzc25hbWUsIGxvYWRlciwgJmluZm8p OwoJaWYgKGNsYXp6ID09IDApIHsKCQl0aHJvd0Vycm9yKCZpbmZvKTsKCX0KCXJldHVybiAobmV3 T2JqZWN0KGNsYXp6KSk7Cn0KCi8qCiAqIEFsbG9jYXRlIGEgbmV3IGFycmF5IG9mIGEgZ2l2ZW4g c2l6ZSBhbmQgdHlwZS4KICovCkhqYXZhX2xhbmdfT2JqZWN0KgpBbGxvY0FycmF5KGludCBsZW4s IGludCB0eXBlKQp7CglyZXR1cm4gKG5ld0FycmF5KFRZUEVfQ0xBU1ModHlwZSksIGxlbikpOwp9 CgovKgogKiBBbGxvY2F0ZSBhIG5ldyBhcnJheSBvZiB0aGUgZ2l2ZW4gc2l6ZSBhbmQgY2xhc3Mg bmFtZS4KICovCkhqYXZhX2xhbmdfT2JqZWN0KgpBbGxvY09iamVjdEFycmF5KGludCBzeiwgY29u c3QgY2hhciogY2xhc3NuYW1lLCBIamF2YV9sYW5nX0NsYXNzTG9hZGVyKiBsb2FkZXIpCnsKCUhq YXZhX2xhbmdfQ2xhc3MgKmVsY2xhc3M7CgllcnJvckluZm8gaW5mbzsKCglpZiAoc3ogPCAwKSB7 CgkJdGhyb3dFeGNlcHRpb24oTmVnYXRpdmVBcnJheVNpemVFeGNlcHRpb24pOwoJfQogICAgICAg IGVsY2xhc3MgPSBnZXRDbGFzc0Zyb21TaWduYXR1cmUoY2xhc3NuYW1lLCBsb2FkZXIsICZpbmZv KTsKCWlmIChlbGNsYXNzID09IDApIHsKCQl0aHJvd0Vycm9yKCZpbmZvKTsKCX0KICAgICAgICBy ZXR1cm4gKG5ld0FycmF5KGVsY2xhc3MsIHN6KSk7Cgp9CgovKgogKiBVc2VkIHRvIGdlbmVyYXRl IGV4Y2VwdGlvbiBmb3IgdW5pbXBsZW1lbnRlZCBmZWF0dXJlcy4KICovCnZvaWQKdW5pbXAoY29u c3QgY2hhciogbWVzcykKewoJU2lnbmFsRXJyb3IoImphdmEubGFuZy5JbnRlcm5hbEVycm9yIiwg bWVzcyk7Cn0KCi8qCiAqIFByaW50IG1lc3NhZ2VzLgogKi8Kdm9pZAprcHJpbnRmKEZJTEUqIG91 dCwgY29uc3QgY2hhciogbWVzcywgLi4uKQp7Cgl2YV9saXN0IGFyZ3B0cjsKCgl2YV9zdGFydChh cmdwdHIsIG1lc3MpOwoJdmZwcmludGYob3V0LCBtZXNzLCBhcmdwdHIpOwoJdmFfZW5kKGFyZ3B0 cik7Cn0KCi8qCiAqIEVudGVyL2xlYXZlIGNyaXRpY2FsIHJlZ2lvbi4gIFRoaXMgaW50ZXJmYWNl IGlzIGV4cG9ydGVkIHRvIAogKiBuYXRpdmUgbGlicmFyaWVzIHRvIHByb3RlY3QgY2FsbHMgdG8g bm9uLXJlZW50cmFudCBmdW5jdGlvbnMuCiAqIEl0IHdvcmtzIGFzIGEgZ2xvYmFsIG1hc3Rlcmxv Y2sgZm9yIEMgbGlicmFyaWVzIHRoYXQgYXJlIG5vdAogKiB0aHJlYWQtc2FmZS4KICovCnZvaWQg CmVudGVyVW5zYWZlUmVnaW9uKHZvaWQpCnsKCWp0aHJlYWRfc3Bpbm9uKDApOwp9Cgp2b2lkIAps ZWF2ZVVuc2FmZVJlZ2lvbih2b2lkKQp7CglqdGhyZWFkX3NwaW5vZmYoMCk7Cn0KCiNpZiBkZWZp bmVkKE5PX1NIQVJFRF9MSUJSQVJJRVMpCi8qCiAqIFJlZ2lzdGVyIGFuIHVzZXIgZnVuY3Rpb24g c3RhdGljYWxseSBsaW5rZWQgaW4gdGhlIGJpbmFyeS4KICovCnZvaWQKYWRkTmF0aXZlTWV0aG9k KGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqIGZ1bmMpCnsKCXN0YXRpYyBpbnQgZnVuY3NfbnIgPSAw OwoJc3RhdGljIGludCBmdW5jc19tYXggPSAwOwoKCS8qIElmIHdlIHJ1biBvdXQgb2Ygc3BhY2Us IHJlYWxsb2NhdGUgKi8KCWlmIChmdW5jc19uciArIDEgPj0gZnVuY3NfbWF4KSB7CgkJZnVuY3Nf bWF4ICs9IE5BVElWRV9GVU5DX0lOQ1JFTUVOVDsKCQlpZiAobmF0aXZlX2Z1bmNzICE9IG51bGxf ZnVuY3MpIHsKCQkJbmF0aXZlX2Z1bmNzID0gS1JFQUxMT0MobmF0aXZlX2Z1bmNzLCBmdW5jc19t YXggKiBzaXplb2YobmF0aXZlRnVuY3Rpb24pKTsKCQl9CgkJZWxzZSB7CgkJCW5hdGl2ZV9mdW5j cyA9IEtNQUxMT0MoTkFUSVZFX0ZVTkNfSU5DUkVNRU5UICogc2l6ZW9mKG5hdGl2ZUZ1bmN0aW9u KSk7CgkJfQoJfQoJbmF0aXZlX2Z1bmNzW2Z1bmNzX25yXS5uYW1lID0gS01BTExPQyhzdHJsZW4o bmFtZSkgKyAxKTsKCXN0cmNweShuYXRpdmVfZnVuY3NbZnVuY3NfbnJdLm5hbWUsIG5hbWUpOwoJ bmF0aXZlX2Z1bmNzW2Z1bmNzX25yXS5mdW5jID0gZnVuYzsKCWZ1bmNzX25yKys7CgluYXRpdmVf ZnVuY3NbZnVuY3NfbnJdLm5hbWUgPSAwOwoJbmF0aXZlX2Z1bmNzW2Z1bmNzX25yXS5mdW5jID0g MDsKfQojZW5kaWYK