IyA9PT09PT09PT09PT1MSUNFTlNFX1NUQVJUPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIG9yZy5vbmFwLmFhaQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgQ29weXJpZ2h0IKkgMjAxNy0yMDE4IEFUJlQgSW50ZWxsZWN0dWFsIFByb3BlcnR5LiBBbGwgcmlnaHRzIHJlc2VydmVkLgojIENvcHlyaWdodCCpIDIwMTctMjAxOCBFdXJvcGVhbiBTb2Z0d2FyZSBNYXJrZXRpbmcgTHRkLgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CiMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgojIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAogKgojICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgojIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAojIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgojIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIyA9PT09PT09PT09PT1MSUNFTlNFX0VORD09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiNUaGlzIGZpbGUgaXMgdXNlZCBmb3IgZGVmaW5pbmcgQUpTQyBzeXN0ZW0gcHJvcGVydGllcyBmb3IgZGlmZmVyZW50IGNvbmZpZ3VyYXRpb24gc2NoZW1lcyBhbmQgaXMgbmVjZXNzYXJ5IGZvciB0aGUgQUpTQyB0byBydW4gcHJvcGVybHkuCiNUaGUgc3lzLXByb3BzLnByb3BlcnRpZXMgZmlsZSBpcyB1c2VkIGZvciBydW5uaW5nIGxvY2FsbHkuIFRoZSB0ZW1wbGF0ZS5zeXMtcHJvcHMucHJvcGVydGllcyBmaWxlIHdpbGwgYmUgdXNlZCB3aGVuIGRlcGxveWVkCiN0byBhIFNPQS9DU0kgQ2xvdWQgbm9kZS4gCgojQUpTQyBTeXN0ZW0gUHJvcGVydGllcy4gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFyZSByZXF1aXJlZCBmb3IgQUxMIEFKU0Mgc2VydmljZXMuIElmIHlvdSBhcmUgYWRkaW5nIFN5c3RlbSBQcm9wZXJ0aWVzIGZvciB5b3VyCiNwYXJ0aWN1bGFyIHNlcnZpY2UsIHBsZWFzZSBhZGQgdGhlbSBBRlRFUiBhbGwgQUpTQyByZWxhdGVkIFN5c3RlbSBQcm9wZXJ0aWVzLiAKCiNGb3IgQ2FkaSBBdXRob3JpemF0aW9uLCB1c2UgdmFsdWU9ImF1dGhlbnRpY2F0aW9uLXNjaGVtZS0xCkNhZGlBdXRoTj1hdXRoZW50aWNhdGlvbi1zY2hlbWUtMQoKI0ZvciBCYXNpYyBBdXRob3JpemF0aW9uLCB1c2UgdmFsdWU9ImF1dGhlbnRpY2F0aW9uLXNjaGVtZS0xCmF1dGhOPWF1dGhlbnRpY2F0aW9uLXNjaGVtZS0yCgojUGVyc2lzdGVuY2UgdXNlZCBmb3IgQUpTQyBtZXRhLWRhdGEgc3RvcmFnZS4gRm9yIG1vc3QgZW52aXJvbm1lbnRzLCAiZmlsZSIgc2hvdWxkIGJlIHVzZWQuCmFqc2NQZXJzaXN0ZW5jZT1maWxlCgojRm9yIERpcmVjdCBJbnZvY2F0aW9uIHRvIGJlIGVuYWJsZWQgKHZhbHVlcz10cnVlL2ZhbHNlKQpkaXJlY3RJbnZvY2F0aW9uRW5hYmxlPWZhbHNlCgojIElmIHVzaW5nIGhhd3RpbyBmb3IgbG9jYWwgZGV2ZWxvcG1lbnQsIHRoZXNlIHByb3BlcnRpZXMgd2lsbCBhbGxvdyBmb3IgZmFzdGVyIHNlcnZlciBzdGFydHVwIGFuZCB1c2FnZSBmb3IgbG9jYWwgZGV2ZWxvcG1lbnQKCmhhd3Rpby5hdXRoZW50aWNhdGlvbkVuYWJsZWQ9ZmFsc2UKaGF3dGlvLmNvbmZpZy5wdWxsT25TdGFydHVwPWZhbHNlCgojUmVtb3ZlcyB0aGUgZXh0cmFuZW91cyByZXN0bGV0IGNvbnNvbGUgb3V0cHV0Cm9yZy5yZXN0bGV0LmVuZ2luZS5sb2dnZXJGYWNhZGVDbGFzcz1vcmcucmVzdGxldC5leHQuc2xmNGouU2xmNGpMb2dnZXJGYWNhZGUKCiNzZXJ2ZXIuaG9zdCBwcm9wZXJ0eSB0byBiZSBlbmFibGVkIGZvciBsb2NhbCBETUUyIHJlbGF0ZWQgdGVzdGluZwojc2VydmVyLmhvc3Q9PFlvdXIgbmV0d29yayBJUCBhZGRyZXNzPiAKCiNFbmFibGUvZGlzYWJsZSBTU0wgKHZhbHVlcz10cnVlL2ZhbHNlKS4gVGhpcyBwcm9wZXJ0eSBhbHNvIGRldGVybWluZXMgd2hpY2ggcHJvdG9jb2wgdG8gdXNlIChodHRwcyBpZiB0cnVlLCBodHRwIG90aGVyd2lzZSksIHRvIHJlZ2lzdGVyIHNlcnZpY2VzIGludG8gR1JNIHRocm91Z2ggRE1FMi4KZW5hYmxlU1NMPXRydWUKCgojRW5hYmxlL2Rpc2FibGUgRUpCIENvbnRhaW5lcgpFTkFCTEVfRUpCPWZhbHNlCgojRW5hYmxlL2Rpc2FibGUgT1NHSQppc09TR0lFbmFibGU9ZmFsc2UKCiNHZW5lcmF0ZS9Ta2lwIGFwaSBkb2NzCmlzQXBpRG9jPWZhbHNlCgojQ1NJIHJlbGF0ZWQgdmFyaWFibGVzIGZvciBDU00gZnJhbWV3b3JrCmNzbS5ob3N0bmFtZT1zZXJ2ZXJuYW1lCgoKI1NPQV9DTE9VRF9FTlYgaXMgdXNlZCB0byByZWdpc3RlciB5b3VyIHNlcnZpY2Ugd2l0aCBkbWUyIGFuZCBjYW4gYmUgdHVybmVkIG9mZiBmb3IgbG9jYWwgZGV2ZWxvcG1lbnQgKHZhbHVlcz10cnVlL2ZhbHNlKS4KU09BX0NMT1VEX0VOVj1mYWxzZQoKI0NPTlRJTlVFX09OX0xJU1RFTkVSX0VYQ0VQVElPTiB3aWxsIGV4aXQgdGhlIGFwcGxpY2F0aW9uIGlmIHRoZXJlIGlzIGEgRE1FMiBleGNlcHRpb24gYXQgdGhlIHRpbWUgb2YgcmVnaXN0cmF0aW9uLgpDT05USU5VRV9PTl9MSVNURU5FUl9FWENFUFRJT049ZmFsc2UKCiNKZXR0eSBDb250YWluZXIgVGhyZWFkQ291bnQgQ29uZmlndXJhdGlvbiBWYXJpYWJsZXMKQUpTQ19KRVRUWV9UaHJlYWRDb3VudF9NSU49MQpBSlNDX0pFVFRZX1RocmVhZENvdW50X01BWD0yMDAKQUpTQ19KRVRUWV9JRExFVElNRV9NQVg9MzAwMAoKI0NhbWVsIENvbnRleHQgbGV2ZWwgZGVmYXVsdCB0aHJlYWRQb29sIFByb2ZpbGUgY29uZmlndXJhdGlvbgpDQU1FTF9QT09MX1NJWkU9MTAKQ0FNRUxfTUFYX1BPT0xfU0laRT0yMApDQU1FTF9LRUVQX0FMSVZFX1RJTUU9NjAKQ0FNRUxfTUFYX1FVRVVFX1NJWkU9MTAwMAoKI0dSTS9ETUUyIFN5c3RlbSBQcm9wZXJ0aWVzCkFGVF9ETUUyX0NPTk5fSURMRV9USU1FT1VUTVM9NTAwMApBSlNDX0VOVj1TT0FDTE9VRAoKU09BQ0xPVURfTkFNRVNQQUNFPQpTT0FDTE9VRF9FTlZfQ09OVEVYVD1ERVYKU09BQ0xPVURfUFJPVE9DT0w9aHR0cApTT0FDTE9VRF9ST1VURV9PRkZFUj1ERUZBVUxUCgpBRlRfTEFUSVRVREU9CkFGVF9MT05HSVRVREU9CkFGVF9FTlZJUk9OTUVOVD0KCiNSZXN0bGV0IENvbXBvbmVudCBEZWZhdWx0IFByb3BlcnRpZXMKUkVTVExFVF9DT01QT05FTlRfQ09OVFJPTExFUl9EQUVNT049dHJ1ZQpSRVNUTEVUX0NPTVBPTkVOVF9DT05UUk9MTEVSX1NMRUVQX1RJTUVfTVM9MTAwClJFU1RMRVRfQ09NUE9ORU5UX0lOQk9VTkRfQlVGRkVSX1NJWkU9ODE5MgpSRVNUTEVUX0NPTVBPTkVOVF9NSU5fVEhSRUFEUz0xClJFU1RMRVRfQ09NUE9ORU5UX01BWF9USFJFQURTPTEwClJFU1RMRVRfQ09NUE9ORU5UX0xPV19USFJFQURTPTgKUkVTVExFVF9DT01QT05FTlRfTUFYX1FVRVVFRD0wClJFU1RMRVRfQ09NUE9ORU5UX01BWF9DT05ORUNUSU9OU19QRVJfSE9TVD0tMQpSRVNUTEVUX0NPTVBPTkVOVF9NQVhfVE9UQUxfQ09OTkVDVElPTlM9LTEKUkVTVExFVF9DT01QT05FTlRfT1VUQk9VTkRfQlVGRkVSX1NJWkU9ODE5MgpSRVNUTEVUX0NPTVBPTkVOVF9QRVJTSVNUSU5HX0NPTk5FQ1RJT05TPXRydWUKUkVTVExFVF9DT01QT05FTlRfUElQRUxJTklOR19DT05ORUNUSU9OUz1mYWxzZQpSRVNUTEVUX0NPTVBPTkVOVF9USFJFQURfTUFYX0lETEVfVElNRV9NUz02MDAwMApSRVNUTEVUX0NPTVBPTkVOVF9VU0VfRk9SV0FSREVEX0hFQURFUj1mYWxzZQpSRVNUTEVUX0NPTVBPTkVOVF9SRVVTRV9BRERSRVNTPXRydWUKCiNFeHRlcm5hbGl6ZWQgamFyIGFuZCBwcm9wZXJ0aWVzIGZpbGUgbG9jYXRpb24uIEluIENTSSBlbnZpcm9ubWVudHMsIHRoZXJlIGFyZSBhIGZldyBsaWJzIHRoYXQgaGF2ZSBiZWVuIGV4dGVybmFsaXplZCB0byBhaWQKI2luIENTVEVNIG1haW50ZW5hbmNlIG9mIHRoZSB2ZXJzaW9ucyBvZiB0aGVzZSBsaWJzLiBUaGUgbW9zdCBpbXBvcnRhbnQgdG8gdGhlIEFKU0MgaXMgdGhlIERNRTIgbGliLiBOb3Qgb25seSBpcyB0aGlzIGxpYiBuZWNlc3NhcnkKI2ZvciBwcm9wZXIgcmVnaXN0cmF0aW9uIG9mIHlvdXIgQUpTQyBzZXJ2aWNlIG9uIGEgbm9kZSwgYnV0IGl0IGlzIGFsc28gbmVjZXNzYXJ5IGZvciBydW5uaW5nIGxvY2FsbHkgYXMgd2VsbC4gQW5vdGhlciBmcmFtZXdvcmsKI3VzZWQgaW4gQ1NJIGVudnMgaXMgdGhlIENTTSBmcmFtZXdvcmsuIFRoZXNlIDIgZnJhbWV3b3JrIGxpYnMgYXJlIHNob3duIGFzICJwcm92aWRlZCIgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgcG9tLnhtbC4gVGhlc2UKI2RlcGVuZGVuY2llcyB3aWxsIGJlIGNvcGllZCBpbnRvIHRoZSB0YXJnZXQvY29tbW9uTGlicyBmb2xkZXIgd2l0aCB0aGUgbm9ybWFsICJtdm4gY2xlYW4gcGFja2FnZSIgZ29hbCBvZiB0aGUgQUpTQy4gVGhleSB3aWxsCiN0aGVuIGJlIGFkZGVkIHRvIHRoZSBjbGFzc3BhdGggdmlhIEFKU0NfRVhURVJOQUxfTElCX0ZPTERFUlMgc3lzdGVtIHByb3BlcnR5LiBBbnkgZmlsZXMgKG1haW5seSBwcm9wZXJ0eSBmaWxlcykgdGhhdCBuZWVkCiN0byBiZSBvbiB0aGUgY2xhc3NwYXRoIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgQUpTQ19FWFRFUk5BTF9QUk9QRVJUSUVTX0ZPTERFUlMgc3lzdGVtIHByb3BlcnR5LiBUaGUgZGVmYXVsdCBzY2VuYXJpbyB3aGVuIAojdGVzdGluZyB5b3VyIEFKU0Mgc2VydmljZSBsb2NhbGx5IHdpbGwgdXRpbGl6ZSB0aGUgdGFyZ2V0L2NvbW1vbkxpYnMgZGlyZWN0b3J5IGZvciBETUUyIGFuZCBDU00gcmVsYXRlZCBhcnRpZmFjdHMgYW5kIDIgCiNkZWZhdWx0IGNzbSBwcm9wZXJ0aWVzIGZpbGVzIHdpbGwgYmUgdXNlZCBmb3IgbG9jYWwgdGVzdGluZyB3aXRoIGFueXRoaW5nIENTTSBrbm9yZWxhdGVkLgojTk9URTogd2UgYXJlIHVzaW5nIG1hdmVuLXJlcGxhY2VyLXBsdWdpbiB0byByZXBsYWNlICIoZG91YmxlVW5kZXJzY29yZSliYXNlZGlyKGRvdWJsZVVuZGVyc2NvcmUpIiB3aXRoICR7YmFzZWRpcn0gd2l0aGluIHRoZSAKI3RhcmdldCBkaXJlY3RvcnkgZm9yIHJ1bm5pbmcgbG9jYWxseS4gTXVsdGlwbGUgZm9sZGVyIGxvY2F0aW9ucyBjYW4gYmUgc2VwYXJhdGVkIGJ5IHRoZSBwaXBlICgifCIpIGNoYXJhY3Rlci4KI1BsZWFzZSwgTk9URTogZm9yIHJ1bm5pbmcgbG9jYWxseSwgd2UgYXJlIHNldHRpbmcgdGhpcyBzeXN0ZW0gcHJvcGVydHkgaW4gdGhlIGFudEJ1aWxkL2J1aWxkLnhtbCAicnVuTG9jYWwiIHRhcmdldCBhbmQgaW4gdGhlIAojInJ1bkFqc2MiIHByb2ZpbGUgd2l0aGluIHRoZSBwb20ueG1sLiBUaGlzIGlzIHRvIG1vc3QgZWZmZWN0aXZlbHkgdXNlIG1hdmVuIHZhcmlhYmxlcyAoJHtiYXNlZGlyfSwgbW9zdCBzcGVjaWZpY2FsbHkuIFRoZXJlZm9yZSwKI3doZW4gcnVubmluZyBsb2NhbGx5LCB0aGUgZm9sbG93aW5nIDIgcHJvcGVydGllcyBzaG91bGQgYmUgc2V0IHdpdGhpbiB0aGUgcHJvZmlsZShzKSB0aGVtc2VsdmVzLiAKI0V4YW1wbGU6IHRhcmdldC9jb21tb25MaWJzfHRhcmdldC9vdGhlckxpYnMKI0FKU0NfRVhURVJOQUxfTElCX0ZPTERFUlM9X19iYXNlZGlyX18vdGFyZ2V0L2NvbW1vbkxpYnMKI0FKU0NfRVhURVJOQUxfUFJPUEVSVElFU19GT0xERVJTPV9fYmFzZWRpcl9fL2Fqc2Mtc2hhcmVkLWNvbmZpZy9ldGMKI0VuZCBvZiBBSlNDIFN5c3RlbSBQcm9wZXJ0aWVzCgojU2VydmljZSBTeXN0ZW0gUHJvcGVydGllcy4gUGxlYXNlLCBwbGFjZSBhbnkgU2VydmljZSByZWxhdGVkIFN5c3RlbSBQcm9wZXJ0aWVzIGJlbG93Lg==