Ci8vIENvcHlyaWdodCAoQykgMjAwMCBKb2huIE1hZGRvY2sgKGpvaG5fbWFkZG9ja0Bjb21wdXNlcnZlLmNvbSkKLy8gQ29weXJpZ2h0IChDKSAyMDAwIEplcmVteSBTaWVrIChqc2lla0Bsc2MubmQuZWR1KQovLyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAgSmFha2tvIEqEcnZpIChqYWFra28uamFydmlAY3MudXR1LmZpKQovLwovLyBQZXJtaXNzaW9uIHRvIGNvcHkgYW5kIHVzZSB0aGlzIHNvZnR3YXJlIGlzIGdyYW50ZWQsIAovLyBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzLiAKLy8gUGVybWlzc2lvbiB0byBtb2RpZnkgdGhlIGNvZGUgYW5kIHRvIGRpc3RyaWJ1dGUgbW9kaWZpZWQgY29kZSBpcyBncmFudGVkLCAKLy8gcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgYW5kIGEgbm90aWNlIAovLyB0aGF0IHRoZSBjb2RlIHdhcyBtb2RpZmllZCBpcyBpbmNsdWRlZCB3aXRoIHRoZSBjb3B5cmlnaHQgbm90aWNlLgovLwovLyBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHksIAovLyBhbmQgd2l0aCBubyBjbGFpbSBhcyB0byBpdHMgc3VpdGFiaWxpdHkgZm9yIGFueSBwdXJwb3NlLgovLwoKI2lmbmRlZiBCT09TVF9DT05WRVJTSU9OX1RZUEVfVFJBSVRTX0hQUAojZGVmaW5lIEJPT1NUX0NPTlZFUlNJT05fVFlQRV9UUkFJVFNfSFBQCgojaWZuZGVmIEJPT1NUX0lDRV9UWVBFX1RSQUlUU19IUFAKI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2ljZS5ocHA+CiNlbmRpZgojaWZuZGVmIEJPT1NUX0ZXRF9UWVBFX1RSQUlUU19IUFAKI2luY2x1ZGUgPGJvb3N0L3R5cGVfdHJhaXRzL2Z3ZC5ocHA+CiNlbmRpZgojaWZuZGVmIEJPT1NUX0FSSVRITUVUSUNfVFlQRV9UUkFJVFNfSFBQCiNpbmNsdWRlIDxib29zdC90eXBlX3RyYWl0cy9hcml0aG1ldGljX3RyYWl0cy5ocHA+CiNlbmRpZgovLwovLyBpcyBvbmUgdHlwZSBjb252ZXJ0YWJsZSB0byBhbm90aGVyPwovLwovLyB0aGVyZSBhcmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIGlzX2NvbnZlcnRpYmxlCi8vIHRlbXBsYXRlLCBhbG1vc3QgZXZlcnkgY29tcGlsZXIgc2VlbXMgdG8gcmVxdWlyZSBpdHMKLy8gb3duIHZlcnNpb24uCi8vCi8vIFRoYW5rcyB0byBBbmRyZWkgQWxleGFuZHJlc2N1IGZvciB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUKLy8gY29udmVyc2lvbiBkZXRlY3Rpb24gdGVjaG5pcXVlIQovLwoKbmFtZXNwYWNlIGJvb3N0ewoKI2lmZGVmIEJPT1NUX01TVkMKCi8vCi8vIE1TIHNwZWNpZmljIHZlcnNpb246Ci8vCm5hbWVzcGFjZSBkZXRhaWx7CgogICAvLyBUaGlzIHdvcmthcm91bmQgaXMgbmVjZXNzYXJ5IHRvIGhhbmRsZSB3aGVuIEZyb20gaXMgdm9pZAogICAvLyB3aGljaCBpcyBub3JtYWxseSB0YWtlbiBjYXJlIG9mIGJ5IHRoZSBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uCiAgIC8vIG9mIHRoZSBpc19jb252ZXJ0aWJsZSBjbGFzcy4KICAgdXNpbmcgOjpib29zdDo6dHlwZV90cmFpdHM6Onllc190eXBlOwogICB1c2luZyA6OmJvb3N0Ojp0eXBlX3RyYWl0czo6bm9fdHlwZTsKCiAgc3RydWN0IGZyb21fbm90X3ZvaWRfY29udmVyc2lvbiB7CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgRnJvbSwgY2xhc3MgVG8+CiAgICBzdHJ1Y3Qgbl9iaW5kIHsKICAgICAgc3RhdGljIG5vX3R5cGUgQk9PU1RfVFRfREVDTCBfbV9jaGVjayguLi4pOwogICAgICBzdGF0aWMgeWVzX3R5cGUgQk9PU1RfVFRfREVDTCBfbV9jaGVjayhUbyk7CiAgICBwdWJsaWM6CiAgICAgIHZvaWQgZm9vKCk7IC8vIGF2b2lkIHdhcm5pbmcgYWJvdXQgYWxsIG1lbWJlcnMgYmVpbmcgcHJpdmF0ZQogICAgICBzdGF0aWMgRnJvbSBfbV9mcm9tOwogICAgICBlbnVtIHsgZXhpc3RzID0gc2l6ZW9mKCBfbV9jaGVjayhfbV9mcm9tKSApID09IHNpemVvZih5ZXNfdHlwZSkgfTsKICAgIH07CiAgfTsKICBzdHJ1Y3QgZnJvbV9pc192b2lkX2NvbnZlcnNpb24gewogICAgdGVtcGxhdGUgPGNsYXNzIEZyb20sIGNsYXNzIFRvPgogICAgc3RydWN0IG5fYmluZCB7CiAgICAgICBlbnVtIHsgZXhpc3RzID0gOjpib29zdDo6aXNfdm9pZDxUbz46OnZhbHVlIH07CiAgICB9OwogIH07CgogIHRlbXBsYXRlIDxjbGFzcyBGcm9tPgogIHN0cnVjdCBjb252ZXJzaW9uX2hlbHBlciB7CiAgICB0eXBlZGVmIGZyb21fbm90X3ZvaWRfY29udmVyc2lvbiB0eXBlOwogIH07CiAgdGVtcGxhdGUgPD4KICBzdHJ1Y3QgY29udmVyc2lvbl9oZWxwZXI8dm9pZD4gewogICAgdHlwZWRlZiBmcm9tX2lzX3ZvaWRfY29udmVyc2lvbiB0eXBlOwogIH07Cn0gLy8gbmFtZXNwYWNlIGRldGFpbAoKdGVtcGxhdGUgPGNsYXNzIEZyb20sIGNsYXNzIFRvPgpzdHJ1Y3QgaXNfY29udmVydGlibGUKewogdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmNvbnZlcnNpb25faGVscGVyPEZyb20+Ojp0eXBlIFNlbGVjdG9yOwogdHlwZWRlZiB0eXBlbmFtZSBTZWxlY3Rvcjo6dGVtcGxhdGUgbl9iaW5kPEZyb20sVG8+IENvbnZlcnNpb247CnB1YmxpYzoKIGVudW0geyB2YWx1ZSA9IENvbnZlcnNpb246OmV4aXN0cyB9Owp9OwoKI2VsaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCi8vCi8vIHNwZWNpYWwgdmVyc2lvbiBmb3IgQm9ybGFuZCBjb21waWxlcnMKLy8gdGhpcyB2ZXJzaW9uIGJyZWFrcyB3aGVuIHVzZWQgZm9yIHNvbWUKLy8gVURUIGNvbnZlcnNpb25zOgovLwp0ZW1wbGF0ZSA8Y2xhc3MgRnJvbSwgY2xhc3MgVG8+CnN0cnVjdCBpc19jb252ZXJ0aWJsZQp7CnByaXZhdGU6CiNwcmFnbWEgb3B0aW9uIHB1c2ggLXctODA3NAogICAvLyBUaGlzIHdvcmthcm91bmQgZm9yIEJvcmxhbmQgYnJlYWtzIHRoZSBFREcgQysrIGZyb250ZW5kLAogICAvLyBzbyB3ZSBvbmx5IHVzZSBpdCBmb3IgQm9ybGFuZC4KICAgdGVtcGxhdGUgPGNsYXNzIFQ+CiAgIHN0cnVjdCBjaGVja2VyCiAgIHsKICAgICAgc3RhdGljIHR5cGVfdHJhaXRzOjpub190eXBlIEJPT1NUX1RUX0RFQ0wgX21fY2hlY2soLi4uKTsKICAgICAgc3RhdGljIHR5cGVfdHJhaXRzOjp5ZXNfdHlwZSBCT09TVF9UVF9ERUNMIF9tX2NoZWNrKFQpOwogICB9OwogICBzdGF0aWMgRnJvbSBfbV9mcm9tOwpwdWJsaWM6CiAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKCBjaGVja2VyPFRvPjo6X21fY2hlY2soX21fZnJvbSkgKSA9PSBzaXplb2YodHlwZV90cmFpdHM6Onllc190eXBlKTsKCiAgIHZvaWQgZm9vKCk7IC8vIGF2b2lkIHdhcm5pbmcgYWJvdXQgYWxsIG1lbWJlcnMgYmVpbmcgcHJpdmF0ZQojcHJhZ21hIG9wdGlvbiBwb3AKfTsKCiNlbGlmIGRlZmluZWQoX19HTlVDX18pCi8vCi8vIHNwZWNpYWwgdmVyc2lvbiBmb3IgZ2NjIGNvbXBpbGVyCi8vCm5hbWVzcGFjZSBkZXRhaWx7CiAgIHN0cnVjdCBhbnlfY29udmVyc2lvbgogICB7CiAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgICBhbnlfY29udmVyc2lvbihjb25zdCBUJik7CiAgICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgICBhbnlfY29udmVyc2lvbihUJik7CiAgIH07CiAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICBzdHJ1Y3QgY2hlY2tlcgogICB7CiAgICAgIHN0YXRpYyBib29zdDo6dHlwZV90cmFpdHM6Om5vX3R5cGUgX21fY2hlY2soYW55X2NvbnZlcnNpb24gLi4uKTsKICAgICAgc3RhdGljIGJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUgX21fY2hlY2soVCwgaW50KTsKICAgfTsKfSAvLyBuYW1lc3BhY2UgZGV0YWlsCnRlbXBsYXRlIDxjbGFzcyBGcm9tLCBjbGFzcyBUbz4Kc3RydWN0IGlzX2NvbnZlcnRpYmxlCnsKcHJpdmF0ZToKICAgc3RhdGljIEZyb20gX21fZnJvbTsKcHVibGljOgogICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHNpemVvZiggZGV0YWlsOjpjaGVja2VyPFRvPjo6X21fY2hlY2soX21fZnJvbSwgMCkgKSA9PSBzaXplb2YodHlwZV90cmFpdHM6Onllc190eXBlKTsKCiAgIHZvaWQgZm9vKCk7IC8vIGF2b2lkIHdhcm5pbmcgYWJvdXQgYWxsIG1lbWJlcnMgYmVpbmcgcHJpdmF0ZQp9OwoKLy8gRGVjbGFyZSBzcGVjaWFsaXphdGlvbnMgb2YgaXNfY29udmVydGlibGUgZm9yIGFsbCBvZiB0aGUgZmxvYXRpbmcKLy8gdHlwZXMgdG8gYWxsIG9mIHRoZSBpbnRlZ3JhbCB0eXBlcy4gVGhpcyBzdXBwcmVzc2VzIHNvbWUgbmFzdHkKLy8gd2FybmluZ3MKCiMgZGVmaW5lIEJPT1NUX0lTX0NPTlZFUlRJQkxFKFQxLFQyKSB0ZW1wbGF0ZTw+c3RydWN0IGlzX2NvbnZlcnRpYmxlPFQxLFQyPntzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZT10cnVlO307CiMgZGVmaW5lIEJPT1NUX0lTX0NPTlZFUlRJQkxFMihUMSxUMikgICAgICAgIFwKICAgICAgICBCT09TVF9JU19DT05WRVJUSUJMRShUMSxzaWduZWQgVDIpICAgXAogICAgICAgIEJPT1NUX0lTX0NPTlZFUlRJQkxFKFQxLHVuc2lnbmVkIFQyKQogICAgICAgICAgICAKIyBkZWZpbmUgQk9PU1RfRkxPQVRfSVNfQ09OVkVSVElCTEUoRikgIFwKICAgQk9PU1RfSVNfQ09OVkVSVElCTEUoRixjaGFyKSAgICAgICAgIFwKICAgQk9PU1RfSVNfQ09OVkVSVElCTEUyKEYsY2hhcikgICAgICAgIFwKICAgQk9PU1RfSVNfQ09OVkVSVElCTEUyKEYsc2hvcnQpICAgICAgIFwKICAgQk9PU1RfSVNfQ09OVkVSVElCTEUyKEYsaW50KSAgICAgICAgIFwKICAgQk9PU1RfSVNfQ09OVkVSVElCTEUyKEYsbG9uZykgICAgICAgIFwKICAgQk9PU1RfSVNfQ09OVkVSVElCTEUyKEYsbG9uZyBsb25nKQoKQk9PU1RfRkxPQVRfSVNfQ09OVkVSVElCTEUoZmxvYXQpCkJPT1NUX0ZMT0FUX0lTX0NPTlZFUlRJQkxFKGRvdWJsZSkKQk9PU1RfRkxPQVRfSVNfQ09OVkVSVElCTEUobG9uZyBkb3VibGUpCkJPT1NUX0ZMT0FUX0lTX0NPTlZFUlRJQkxFKGZsb2F0IGNvbnN0KQpCT09TVF9GTE9BVF9JU19DT05WRVJUSUJMRShkb3VibGUgY29uc3QpCkJPT1NUX0ZMT0FUX0lTX0NPTlZFUlRJQkxFKGxvbmcgZG91YmxlIGNvbnN0KQpCT09TVF9GTE9BVF9JU19DT05WRVJUSUJMRShmbG9hdCB2b2xhdGlsZSkKQk9PU1RfRkxPQVRfSVNfQ09OVkVSVElCTEUoZG91YmxlIHZvbGF0aWxlKQpCT09TVF9GTE9BVF9JU19DT05WRVJUSUJMRShsb25nIGRvdWJsZSB2b2xhdGlsZSkKQk9PU1RfRkxPQVRfSVNfQ09OVkVSVElCTEUoZmxvYXQgY29uc3Qgdm9sYXRpbGUpCkJPT1NUX0ZMT0FUX0lTX0NPTlZFUlRJQkxFKGRvdWJsZSBjb25zdCB2b2xhdGlsZSkKQk9PU1RfRkxPQVRfSVNfQ09OVkVSVElCTEUobG9uZyBkb3VibGUgY29uc3Qgdm9sYXRpbGUpCiMgdW5kZWYgQk9PU1RfRkxPQVRfSVNfQ09OVkVSVElCTEUKIyB1bmRlZiBCT09TVF9JU19DT05WRVJUSUJMRTIKIyB1bmRlZiBCT09TVF9JU19DT05WRVJUSUJMRQojZWxzZQoKdGVtcGxhdGUgPGNsYXNzIEZyb20sIGNsYXNzIFRvPgpzdHJ1Y3QgaXNfY29udmVydGlibGUKewpwcml2YXRlOgogICBzdGF0aWMgdHlwZV90cmFpdHM6Om5vX3R5cGUgQk9PU1RfVFRfREVDTCBfbV9jaGVjayguLi4pOwogICBzdGF0aWMgdHlwZV90cmFpdHM6Onllc190eXBlIEJPT1NUX1RUX0RFQ0wgX21fY2hlY2soVG8pOwogICBzdGF0aWMgRnJvbSBfbV9mcm9tOwpwdWJsaWM6CiAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHNpemVvZiggX21fY2hlY2soX21fZnJvbSkgKSA9PSBzaXplb2YodHlwZV90cmFpdHM6Onllc190eXBlKSk7CiAgIHZvaWQgZm9vKCk7IC8vIGF2b2lkIHdhcm5pbmcgYWJvdXQgYWxsIG1lbWJlcnMgYmVpbmcgcHJpdmF0ZQp9OwoKI2lmbmRlZiBCT09TVF9OT19JTkNMQVNTX01FTUJFUl9JTklUSUFMSVpBVElPTgovLyAgQSBkZWZpbml0aW9uIGlzIHJlcXVpcmVkIGV2ZW4gZm9yIGludGVncmFsIHN0YXRpYyBjb25zdGFudHMKdGVtcGxhdGUgPGNsYXNzIEZyb20sIGNsYXNzIFRvPgpjb25zdCBib29sIGlzX2NvbnZlcnRpYmxlPEZyb20sIFRvPjo6dmFsdWU7CiNlbmRpZgoKCiNlbmRpZiAvLyBpc19jb252ZXJ0aWJsZQoKLy8KLy8gTm93IGFkZCB0aGUgZnVsbCBhbmQgcGFydGlhbCBzcGVjaWFsaXNhdGlvbnMKLy8gZm9yIHZvaWQgdHlwZXMsIHRoZXNlIGFyZSBjb21tb24gdG8gYWxsIHRoZQovLyBpbXBsZW1lbnRhdGlvbiBhYm92ZToKLy8KI2lmbmRlZiBCT09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OCnRlbXBsYXRlIDxjbGFzcyBGcm9tPgpzdHJ1Y3QgaXNfY29udmVydGlibGU8RnJvbSwgdm9pZD4KewogICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSBmYWxzZSk7Cn07CiNpZm5kZWYgQk9PU1RfTk9fQ1ZfVk9JRF9TUEVDSUFMSVpBVElPTlMKdGVtcGxhdGUgPGNsYXNzIEZyb20+CnN0cnVjdCBpc19jb252ZXJ0aWJsZTxGcm9tLCBjb25zdCB2b2lkPgp7CiAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IGZhbHNlKTsKfTsKdGVtcGxhdGUgPGNsYXNzIEZyb20+CnN0cnVjdCBpc19jb252ZXJ0aWJsZTxGcm9tLCB2b2xhdGlsZSB2b2lkPgp7CiAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IGZhbHNlKTsKfTsKdGVtcGxhdGUgPGNsYXNzIEZyb20+CnN0cnVjdCBpc19jb252ZXJ0aWJsZTxGcm9tLCBjb25zdCB2b2xhdGlsZSB2b2lkPgp7CiAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IGZhbHNlKTsKfTsKI2VuZGlmIC8vIEJPT1NUX05PX0NWX1ZPSURfU1BFQ0lBTElaQVRJT05TCgp0ZW1wbGF0ZSA8Y2xhc3MgVG8+CnN0cnVjdCBpc19jb252ZXJ0aWJsZTx2b2lkLCBUbz4KewogICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSBmYWxzZSk7Cn07CiNpZm5kZWYgQk9PU1RfTk9fQ1ZfVk9JRF9TUEVDSUFMSVpBVElPTlMKdGVtcGxhdGUgPGNsYXNzIFRvPgpzdHJ1Y3QgaXNfY29udmVydGlibGU8Y29uc3Qgdm9pZCwgVG8+CnsKICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gZmFsc2UpOwp9Owp0ZW1wbGF0ZSA8Y2xhc3MgVG8+CnN0cnVjdCBpc19jb252ZXJ0aWJsZTx2b2xhdGlsZSB2b2lkLCBUbz4KewogICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSBmYWxzZSk7Cn07CnRlbXBsYXRlIDxjbGFzcyBUbz4Kc3RydWN0IGlzX2NvbnZlcnRpYmxlPGNvbnN0IHZvbGF0aWxlIHZvaWQsIFRvPgp7CiAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IGZhbHNlKTsKfTsKI2VuZGlmCiNlbmRpZiAvLyBCT09TVF9OT19URU1QTEFURV9QQVJUSUFMX1NQRUNJQUxJWkFUSU9OCgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgaXNfY29udmVydGlibGU8dm9pZCwgdm9pZD4KewogICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsKfTsKI2lmbmRlZiBCT09TVF9OT19DVl9WT0lEX1NQRUNJQUxJWkFUSU9OUwp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgaXNfY29udmVydGlibGU8dm9pZCwgY29uc3Qgdm9pZD4KewogICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsKfTsKdGVtcGxhdGUgPD4Kc3RydWN0IGlzX2NvbnZlcnRpYmxlPHZvaWQsIHZvbGF0aWxlIHZvaWQ+CnsKICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7Cn07CnRlbXBsYXRlIDw+CnN0cnVjdCBpc19jb252ZXJ0aWJsZTx2b2lkLCBjb25zdCB2b2xhdGlsZSB2b2lkPgp7CiAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOwp9Owp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgaXNfY29udmVydGlibGU8Y29uc3Qgdm9pZCwgY29uc3Qgdm9pZD4KewogICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsKfTsKdGVtcGxhdGUgPD4Kc3RydWN0IGlzX2NvbnZlcnRpYmxlPGNvbnN0IHZvaWQsIHZvbGF0aWxlIHZvaWQ+CnsKICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7Cn07CnRlbXBsYXRlIDw+CnN0cnVjdCBpc19jb252ZXJ0aWJsZTxjb25zdCB2b2lkLCBjb25zdCB2b2xhdGlsZSB2b2lkPgp7CiAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOwp9Owp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgaXNfY29udmVydGlibGU8dm9sYXRpbGUgdm9pZCwgY29uc3Qgdm9pZD4KewogICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsKfTsKdGVtcGxhdGUgPD4Kc3RydWN0IGlzX2NvbnZlcnRpYmxlPHZvbGF0aWxlIHZvaWQsIHZvbGF0aWxlIHZvaWQ+CnsKICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7Cn07CnRlbXBsYXRlIDw+CnN0cnVjdCBpc19jb252ZXJ0aWJsZTx2b2xhdGlsZSB2b2lkLCBjb25zdCB2b2xhdGlsZSB2b2lkPgp7CiAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOwp9Owp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgaXNfY29udmVydGlibGU8Y29uc3Qgdm9sYXRpbGUgdm9pZCwgY29uc3Qgdm9pZD4KewogICBCT09TVF9TVEFUSUNfQ09OU1RBTlQoYm9vbCwgdmFsdWUgPSB0cnVlKTsKfTsKdGVtcGxhdGUgPD4Kc3RydWN0IGlzX2NvbnZlcnRpYmxlPGNvbnN0IHZvbGF0aWxlIHZvaWQsIHZvbGF0aWxlIHZvaWQ+CnsKICAgQk9PU1RfU1RBVElDX0NPTlNUQU5UKGJvb2wsIHZhbHVlID0gdHJ1ZSk7Cn07CnRlbXBsYXRlIDw+CnN0cnVjdCBpc19jb252ZXJ0aWJsZTxjb25zdCB2b2xhdGlsZSB2b2lkLCBjb25zdCB2b2xhdGlsZSB2b2lkPgp7CiAgIEJPT1NUX1NUQVRJQ19DT05TVEFOVChib29sLCB2YWx1ZSA9IHRydWUpOwp9OwojZW5kaWYKCn0gLy8gbmFtZXNwYWNlIGJvb3N0CgojZW5kaWYgIC8vIGluY2x1ZGUgZ3VhcmQKCgo=