jekyll/History.markdown

117 KiB

IyMgSEVBRAoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFVzZSBgTGlxdWlkOjpEcm9wYHMgaW5zdGVhZCBvZiBgSGFzaGBlcyBpbiBgI3RvX2xpcXVpZGAgKCM0Mjc3KQogICogQWRkICdzYW1wbGUnIExpcXVpZCBmaWx0ZXIgRXF1aXZhbGVudCB0byBBcnJheSNzYW1wbGUgZnVuY3Rpb25hbGl0eSAoIzQyMjMpCiAgKiBDYWNoZSBwYXJzZWQgaW5jbHVkZSBmaWxlIHRvIHNhdmUgbGlxdWlkIHBhcnNpbmcgdGltZS4gKCM0MTIwKQogICogU2xpZ2h0bHkgc3BlZWQgdXAgdXJsIHNhbml0aXphdGlvbiBhbmQgaGFuZGxlIG11bHRpcGxlcyBvZiAvLy8uICgjNDE2OCkKICAqIFByaW50IGRlYnVnIG1lc3NhZ2Ugd2hlbiBhIGRvY3VtZW50IGlzIHNraXBwZWQgZnJvbSByZWFkaW5nICgjNDE4MCkKICAqIEluY2x1ZGUgdGFnIHNob3VsZCBhY2NlcHQgbXVsdGlwbGUgdmFyaWFibGVzIGluIHRoZSBpbmNsdWRlIG5hbWUgKCM0MTgzKQogICogQWRkIGAtb2Agb3B0aW9uIHRvIHNlcnZlIGNvbW1hbmQgd2hpY2ggb3BlbnMgc2VydmVyIFVSTCAoIzQxNDQpCiAgKiBBZGQgQ29kZUNsaW1hdGUgcGxhdGZvcm0gZm9yIGJldHRlciBjb2RlIHF1YWxpdHkuICgjNDIyMCkKICAqIEdlbmVyYWwgaW1wcm92ZW1lbnRzIGZvciBXRUJyaWNrIHZpYSBqZWt5bGwgc2VydmUgc3VjaCBhcyBTU0wgJiBjdXN0b20gaGVhZGVycyAoIzQyMjQsICM0MjI4KQogICogQWRkIGEgZGVmYXVsdCBjaGFyc2V0IHRvIGNvbnRlbnQtdHlwZSBvbiB3ZWJyaWNrLiAoIzQyMzEpCiAgKiBTd2l0Y2ggYFBsdWdpbk1hbmFnZXJgIHRvIHVzZSBgcmVxdWlyZV93aXRoX2dyYWNlZnVsX2ZhaWxgIGZvciBiZXR0ZXIgVVggKCM0MjMzKQogICogQWxsb3cgcXVvdGVkIGRhdGUgaW4gZnJvbnQgbWF0dGVyIGRlZmF1bHRzICgjNDE4NCkKICAqIEFkZCBhIEpla3lsbCBkb2N0b3Igd2FybmluZyBmb3IgVVJMcyB0aGF0IG9ubHkgZGlmZmVyIGJ5IGNhc2UgKCMzMTcxKQogICogZHJvcHM6IGNyZWF0ZSBvbmUgYmFzZSBEcm9wIGNsYXNzIHdoaWNoIGNhbiBiZSBzZXQgYXMgbXV0YWJsZSBvciBub3QgKCM0Mjg1KQogICogZHJvcHM6IHByb3ZpZGUgYCN0b19oYCB0byBhbGxvdyBmb3IgaGFzaCBpbnRyb3NwZWN0aW9uICgjNDI4MSkKICAqIFNoaW0gc3ViY29tbWFuZHMgd2l0aCBpbmRpY2F0aW9uIG9mIGdlbSBwb3NzaWJseSByZXF1aXJlZCBzbyB1c2VycyBrbm93IGhvdyB0byB1c2UgdGhlbSAoIzQyNTQpCgojIyMgQnVnIEZpeGVzCgogICogUGFzcyBidWlsZCBvcHRpb25zIGludG8gYGNsZWFuYCBjb21tYW5kICgjNDE3NykKICAqIEFsbG93IHVzZXJzIHRvIHVzZSAuaHRtIGFuZCAueGh0bWwgKFhIVE1MNS4pICgjNDE2MCkKICAqIFByZXZlbnQgU2hlbGwgSW5qZWN0aW9uLiAoIzQyMDApCiAgKiBDb252ZXJ0aWJsZSBzaG91bGQgbWFrZSBsYXlvdXQgZGF0YSBhY2Nlc3NpYmxlIHZpYSBgbGF5b3V0YCBpbnN0ZWFkIG9mIGBwYWdlYCAoIzQyMDUpCiAgKiBBdm9pZCB1c2luZyBgRGlyLmdsb2JgIHdpdGggYWJzb2x1dGUgcGF0aCB0byBhbGxvdyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIHBhdGggKCM0MTUwKQogICogSGFuZGxlIGVtcHR5IGNvbmZpZyBmaWxlcyAoIzQwNTIpCiAgKiBSZW5hbWUgYEBvcHRpb25zYCBzbyB0aGF0IGl0IGRvZXMgbm90IGltcGFjdCBMaXF1aWQuICgjNDE3MykKICAqIHV0aWxzL2Ryb3BzOiB1cGRhdGUgRHJvcCB0byBzdXBwb3J0IGBVdGlscy5kZWVwX21lcmdlX2hhc2hlc2AgKCM0Mjg5KQogICogTWFrZSBzdXJlIGpla3lsbC9kcm9wcy9kcm9wIGlzIGxvYWRlZCBmaXJzdC4gKCM0MjkyKQogICogQ29udmVydGlibGUvUGFnZS9SZW5kZXJlcjogdXNlIHBheWxvYWQgaGFzaCBhY2Nlc3NvciAmIHNldHRlciBzeW50YXggZm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5ICgjNDMxMSkKICAqIERyb3A6IGZpeCBoYXNoIHNldHRlciBwcmVjZW5kZW5jZSAoIzQzMTIpCiAgKiB1dGlsczogYGhhc195YW1sX2hlYWRlcj9gIHNob3VsZCBhY2NlcHQgZmlsZXMgd2l0aCBleHRyYW5lb3VzIHNwYWNlcyAoIzQyOTApCiAgKiBFc2NhcGUgaHRtbCBmcm9tIHNpdGUudGl0bGUgYW5kIHBhZ2UudGl0bGUgaW4gc2l0ZSB0ZW1wbGF0ZSAoIzQzMDcpCgojIyMgRGV2ZWxvcG1lbnQgRml4ZXMKCiAgKiBgamVreWxsLWRvY3NgIHNob3VsZCBiZSBlYXNpbHkgcmVsZWFzZS1hYmxlICgjNDE1MikKICAqIEFsbG93IHVzZSBvZiBDdWN1bWJlciAyLjEgb3IgZ3JlYXRlciAoIzQxODEpCiAgKiBNb2Rlcm5pemUgS3JhbWRvd24gZm9yIE1hcmtkb3duIGNvbnZlcnRlci4gKCM0MTA5KQogICogQ2hhbmdlIFRlc3REb2N0b3JDb21tYW5kIHRvIEpla3lsbFVuaXRUZXN0Li4uICgjNDI2MykKICAqIENyZWF0ZSBuYW1lc3BhY2VkIHJha2UgdGFza3MgaW4gc2VwYXJhdGUgYC5yYWtlYCBmaWxlcyB1bmRlciBgbGliL3Rhc2tzYCAoIzQyODIpCiAgKiBtYXJrZG93bjogcmVmYWN0b3IgZm9yIGdyZWF0ZXIgcmVhZGFiaWxpdHkgJiBlZmZpY2llbmN5ICgjMzc3MSkKICAqIEZpeCBtYW55IFJ1Ym9jb3Agc3R5bGUgZXJyb3JzICgjNDMwMSkKICAqIEZpeCBzcGVsbGluZyBvZiAiR2l0SHViIiBpbiBkb2NzIGFuZCBoaXN0b3J5ICgjNDMyMikKICAqIFJlb3JnYW5pemUgYW5kIGNsZWFudXAgdGhlIEdlbWZpbGUsIHNob3J0ZW4gcmVxdWlyZWQgZGVwZW5kcy4gKCM0MzE4KQoKIyMjIFNpdGUgRW5oYW5jZW1lbnRzCgogICogQWRkIHRocmVlIHBsdWdpbnMgdG8gZGlyZWN0b3J5ICgjNDE2MykKICAqIEFkZCB1cGdyYWRpbmcgZG9jcyBmcm9tIDIueCB0byAzLnggKCM0MTU3KQogICogQWRkIGBwcm90ZWN0X2VtYWlsYCB0byB0aGUgcGx1Z2lucyBpbmRleC4gKCM0MTY5KQogICogQWRkIGBqZWt5bGwtZGVwbG95YCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCM0MTc5KQogICogQ2xhcmlmeSBwbHVnaW4gZG9jcyAoIzQxNTQpCiAgKiBBZGQgS2lja3N0ZXIgdG8gZGVwbG95bWVudCBtZXRob2RzIGluIGRvY3VtZW50YXRpb24gKCM0MTkwKQogICogQWRkIERhdmlkQnVyZWxhJ3MgdHV0b3JpYWwgZm9yIFdpbmRvd3MgdG8gV2luZG93cyBkb2NzIHBhZ2UgKCM0MjEwKQogICogQ2hhbmdlIEdpdEh1YiBjb2RlIGJsb2NrIHRvIGhpZ2hsaWdodCB0YWcgdG8gYXZvaWQgaXQgb3ZlcmxhcHMgcGFyZW50IGRpdiAoIzQxMjEpCiAgKiBVcGRhdGUgRm9ybUtlZXAgbGluayB0byBiZSBzb21ldGhpbmcgbW9yZSBzcGVjaWZpYyB0byBKZWt5bGwgKCM0MjQzKQogICogUmVtb3ZlIGV4YW1wbGUgUm9nZXIgQ2hhcG1hbiBzaXRlLCBhcyB0aGUgZG9tYWluIGRvZXNuJ3QgZXhpc3QgKCM0MjQ5KQogICogQWRkZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBgZHJhZnRfcG9zdHNgIHRvIGNvbmZpZ3VyYXRpb24gZG9jcyAoIzQyNTEpCiAgKiBGaXggY2hlY2tsaXN0IGluIGBfYXNzZXRzLm1kYCAoIzQyNTkpCiAgKiBBZGQgTWFya2Rvd24gZXhhbXBsZXMgdG8gUGFnZXMgZG9jcyAoIzQyNzUpCiAgKiBBZGQgamVreWxsLXBhZ2luYXRlLWNhdGVnb3J5IHRvIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzQyNzMpCiAgKiBBZGQgYGpla3lsbC1yZXNwb25zaXZlX2ltYWdlYCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCM0Mjg2KQogICogQWRkIGBqZWt5bGwtY29tbW9ubWFya2AgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjNDI5OSkKICAqIEFkZCBkb2N1bWVudGF0aW9uIGZvciBpbmNyZW1lbnRhbCByZWdlbmVyYXRpb24gKCM0MjkzKQogICogQWRkIG5vdGUgYWJvdXQgcmVtb3ZhbCBvZiByZWxhdGl2ZSBwZXJtYWxpbmsgc3VwcG9ydCBpbiB1cGdyYWRpbmcgZG9jcyAoIzQzMDMpCiAgKiBBZGQgUHJvIFRpcCB0byB1c2UgZnJvbnQgbWF0dGVyIHZhcmlhYmxlIHRvIGNyZWF0ZSBjbGVhbiBVUkxzICgjNDI5NikKICAqIEZpeCBncmFtbWFyIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvciBwb3N0cy4gKCM0MzMwKQoKIyMgMy4wLjEgLyAyMDE1LTExLTE3CgojIyMgQnVnIEZpeGVzCgogICogRG9jdW1lbnQ6IG9ubHkgc3VwZXJkaXJlY3RvcmllcyBvZiB0aGUgY29sbGVjdGlvbiBhcmUgY2F0ZWdvcmllcyAoIzQxMTApCiAgKiBgQ29udmVydGlibGUjcmVuZGVyX2xpcXVpZGAgc2hvdWxkIHVzZSBgcmVuZGVyIWAgdG8gY2F1c2UgZmFpbHVyZSBvbiBiYWQgTGlxdWlkICgjNDA3NykKICAqIERvbid0IGdlbmVyYXRlIGAuamVreWxsLW1ldGFkYXRhYCBpbiBub24taW5jcmVtZW50YWwgYnVpbGQgKCM0MDc5KQogICogU2V0IGBoaWdobGlnaHRlcmAgY29uZmlnIHZhbCB0byBga3JhbWRvd24uc3ludGF4X2hpZ2hsaWdodGVyYCAoIzQwOTApCiAgKiBBbGlnbiBob29rcyBpbXBsZW1lbnRhdGlvbiB3aXRoIGRvY3VtZW50YXRpb24gKCM0MTA0KQogICogRml4IHRoZSBkZXByZWNhdGlvbiB3YXJuaW5nIGluIHRoZSBkb2N0b3IgY29tbWFuZCAoIzQxMTQpCiAgKiBGaXggY2FzZSBpbiBgOnRpdGxlYCBhbmQgYWRkIGA6c2x1Z2Agd2hpY2ggaXMgZG93bmNhc2VkICgjNDEwMCkKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIEZpeCB0ZXN0IHdhcm5pbmdzIHdoZW4gZG9pbmcgcmFrZSB7dGVzdCxzcGVjfSBvciBzY3JpcHQvdGVzdCAoIzQwNzgpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBVcGRhdGUgbm9ybWFsaXplLmNzcyB0byB2My4wLjMuICgjNDA4NSkKICAqIFVwZGF0ZSBGb250IEF3ZXNvbWUgdG8gdjQuNC4wLiAoIzQwODYpCiAgKiBBZGRzIGEgbm90ZSBhYm91dCBpbnN0YWxsaW5nIHRoZSBqZWt5bGwtZ2lzdCBnZW0gdG8gbWFrZSBnaXN0IHRhZyB3b3JrICgjNDEwMSkKICAqIEFsaWduIGhvb2tzIGRvY3VtZW50YXRpb24gd2l0aCBpbXBsZW1lbnRhdGlvbiAoIzQxMDQpCiAgKiBBZGQgSmVreWxsIEZsaWNrciBQbHVnaW4gdG8gdGhlIGxpc3Qgb2YgdGhpcmQgcGFydHkgcGx1Z2lucyAoIzQxMTEpCiAgKiBSZW1vdmUgbGluayB0byBub3ctZGVsZXRlZCBibG9nIHBvc3QgKCM0MTI1KQogICogVXBkYXRlIHRoZSBsaXF1aWQgc3ludGF4IGluIHRoZSBwYWdpbmF0aW9uIGRvY3MgKCM0MTMwKQogICogQWRkIGpla3lsbC1sYW5ndWFnZS1wbHVnaW4gdG8gcGx1Z2lucy5tZCAoIzQxMzQpCiAgKiBVcGRhdGVkIHRvIHJlZmxlY3QgZmVlZGJhY2sgaW4gIzQxMjkgKCM0MTM3KQogICogQ2xhcmlmeSBhc3NldHMubWQgYmFzZWQgb24gZmVlZGJhY2sgb2YgIzQxMjkgKCM0MTQyKQogICogUmUtY29ycmVjdCB0aGUgbGlxdWlkIHN5bnRheCBpbiB0aGUgcGFnaW5hdGlvbiBkb2NzICgjNDE0MCkKCiMjIDMuMC4wIC8gMjAxNS0xMC0yNgoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIExpcXVpZCBwcm9maWxlciAoaS5lLiBrbm93IGhvdyBmYXN0IG9yIHNsb3cgeW91ciB0ZW1wbGF0ZXMgcmVuZGVyKSAoIzM3NjIpCiAgKiBJbmNyZW1lbnRhbCByZWdlbmVyYXRpb24gKCMzMTE2KQogICogQWRkIEhvb2tzOiBhIG5ldyBraW5kIG9mIHBsdWdpbiAoIzM1NTMpCiAgKiBVcGdyYWRlIHRvIExpcXVpZCAzLjAuMCAoIzMwMDIpCiAgKiBgc2l0ZS5wb3N0c2AgaXMgbm93IGEgQ29sbGVjdGlvbiBpbnN0ZWFkIG9mIGFuIEFycmF5ICgjNDA1NSkKICAqIEFkZCBiYXNpYyBzdXBwb3J0IGZvciBKUnVieSAoY29tbWl0OiAwZjQ0NzcpCiAgKiBEcm9wIHN1cHBvcnQgZm9yIFJ1YnkgMS45LjMuICgjMzIzNSkKICAqIFN1cHBvcnQgUnVieSB2Mi4yICgjMzIzNCkKICAqIFN1cHBvcnQgUkRpc2NvdW50IDIgKCMyNzY3KQogICogUmVtb3ZlIG1vc3QgcnVudGltZSBkZXBzICgjMzMyMykKICAqIE1vdmUgdG8gUm91Z2UgYXMgZGVmYXVsdCBoaWdobGlnaHRlciAoIzMzMjMpCiAgKiBNaW1pYyBHaXRIdWIgUGFnZXMgYC5odG1sYCBleHRlbnNpb24gc3RyaXBwaW5nIGJlaGF2aW9yIGluIFdFQnJpY2sgKCMzNDUyKQogICogQWx3YXlzIGluY2x1ZGUgZmlsZSBleHRlbnNpb24gb24gb3V0cHV0IGZpbGVzICgjMzQ5MCkKICAqIEltcHJvdmVkIHBlcm1hbGlua3MgZm9yIHBhZ2VzIGFuZCBjb2xsZWN0aW9ucyAoIzM1MzgpCiAgKiBTdW5zZXQgKGkuZS4gcmVtb3ZlKSBNYXJ1a3UgKCMzNjU1KQogICogUmVtb3ZlIHN1cHBvcnQgZm9yIHJlbGF0aXZlIHBlcm1hbGlua3MgKCMzNjc5KQogICogSXRlcmF0ZSBvdmVyIGBzaXRlLmNvbGxlY3Rpb25zYCBhcyBhbiBhcnJheSBpbnN0ZWFkIG9mIGEgaGFzaC4gKCMzNjcwKQogICogQWRhcHQgU3RhdGljRmlsZSBmb3IgY29sbGVjdGlvbnMsIGNvbmZpZyBkZWZhdWx0cyAoIzM4MjMpCiAgKiBBZGQgYSBDb2RlIG9mIENvbmR1Y3QgZm9yIHRoZSBKZWt5bGwgcHJvamVjdCAoIzM5MjUpCiAgKiBBZGRlZCBwZXJtYWxpbmsgdGltZSB2YXJpYWJsZXMgKCMzOTkwKQogICogQWRkIGAtLWluY3JlbWVudGFsYCBmbGFnIHRvIGVuYWJsZSBpbmNyZW1lbnRhbCByZWdlbiAoZGlzYWJsZWQgYnkgZGVmYXVsdCkgKCM0MDU5KQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIERlcHJlY2F0ZSBhY2Nlc3MgdG8gRG9jdW1lbnQjZGF0YSBwcm9wZXJ0aWVzIGFuZCBDb2xsZWN0aW9uI2RvY3MgbWV0aG9kcyAoIzQwNTgpCiAgKiBTb3J0IHN0YXRpYyBmaWxlcyBqdXN0IG9uY2UsIGFuZCBjYWxsIGBzaXRlX3BheWxvYWRgIG9uY2UgZm9yIGFsbCBjb2xsZWN0aW9ucyAoIzMyMDQpCiAgKiBTZXBhcmF0ZSBgamVreWxsIGRvY3NgIGFuZCBvcHRpbWl6ZSBleHRlcm5hbCBnZW0gaGFuZGxpbmcgKCMzMjQxKQogICogSW1wcm92ZSBgU2l0ZSNnZXRDb252ZXJ0ZXJJbXBsYCBhbmQgY2FsbCBpdCBgU2l0ZSNmaW5kX2NvbnZlcnRlcl9pbnN0YW5jZWAgKCMzMjQwKQogICogVXNlIHJlbGF0aXZlIHBhdGggZm9yIGBwYXRoYCBMaXF1aWQgdmFyaWFibGUgaW4gRG9jdW1lbnRzIGZvciBjb25zaXN0ZW5jeSAoIzI5MDgpCiAgKiBHZW5lcmFsaXplIGBVdGlscyNzbHVnaWZ5YCBmb3IgYW55IHNjcmlwdHMgKCMzMDQ3KQogICogQWRkZWQgYmFzaWMgbWljcm9kYXRhIHRvIHBvc3QgdGVtcGxhdGUgaW4gc2l0ZSB0ZW1wbGF0ZSAoIzMxODkpCiAgKiBTdG9yZSBsb2cgbWVzc2FnZXMgaW4gYW4gYXJyYXkgb2YgbWVzc2FnZXMuICgjMzI0NCkKICAqIEFsbG93IGNvbGxlY3Rpb24gZG9jdW1lbnRzIHRvIG92ZXJyaWRlIGBvdXRwdXRgIHByb3BlcnR5IGluIGZyb250IG1hdHRlciAoIzMxNzIpCiAgKiBLZWVwIGZpbGUgbW9kaWZpY2F0aW9uIHRpbWVzIGJldHdlZW4gYnVpbGRzIGZvciBzdGF0aWMgZmlsZXMgKCMzMjIwKQogICogT25seSBkb3duY2FzZSBtaXhlZC1jYXNlIGNhdGVnb3JpZXMgZm9yIHRoZSBVUkwgKCMyNTcxKQogICogQWRkZWQgcGVyIHBvc3QgYGV4Y2VycHRfc2VwYXJhdG9yYCBmdW5jdGlvbmFsaXR5ICgjMzI3NCkKICAqIEFsbG93IGNvbGxlY3Rpb25zIFlBTUwgdG8gZW5kIHdpdGggdGhyZWUgZG90cyAoIzMxMzQpCiAgKiBBZGQgbW9kZSBwYXJhbWV0ZXIgdG8gYHNsdWdpZnlgIExpcXVpZCBmaWx0ZXIgKCMyOTE4KQogICogUGVyZjogYE1hcmtkb3duI21hdGNoZXNgIHNob3VsZCBhdm9pZCByZWdleHAgKCMzMzIxKQogICogUGVyZjogVXNlIGZyb3plbiByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBgVXRpbHMjc2x1Z2lmeWAgKCMzMzIxKQogICogU3BsaXQgb2ZmIFRleHRpbGUgc3VwcG9ydCBpbnRvIGpla3lsbC10ZXh0aWxlLWNvbnZlcnRlciAoIzMzMTkpCiAgKiBJbXByb3ZlIHRoZSBuYXZpZ2F0aW9uIG1lbnUgYWxpZ25tZW50IGluIHRoZSBzaXRlIHRlbXBsYXRlIG9uIHNtYWxsIHNjcmVlbnMgKCMzMzMxKQogICogU2hvdyB0aGUgcmVnZW5lcmF0aW9uIHRpbWUgYWZ0ZXIgdGhlIGluaXRpYWwgZ2VuZXJhdGlvbiAoIzMzNzgpCiAgKiBTaXRlIHRlbXBsYXRlOiBTd2l0Y2ggZGVmYXVsdCBmb250IHRvIEhlbHZldGljYSBOZXVlICgjMzM3NikKICAqIE1ha2UgdGhlIGBpbmNsdWRlYCB0YWcgYSB0ZWVuc3kgYml0IGZhc3Rlci4gKCMzMzkxKQogICogQWRkIGBwa2lsbCAtZiBqZWt5bGxgIHRvIHdheXMgdG8ga2lsbC4gKCMzMzk3KQogICogU2l0ZSB0ZW1wbGF0ZTogY29sbGFwc2VkLCB2YXJpYWJsZS1kcml2ZW4gZm9udCBkZWNsYXJhdGlvbiAoIzMzNjApCiAgKiBTaXRlIHRlbXBsYXRlOiBEb24ndCBhbHdheXMgc2hvdyB0aGUgc2Nyb2xsYmFyIGluIGNvZGUgYmxvY2tzICgjMzQxOSkKICAqIFNpdGUgdGVtcGxhdGU6IFJlbW92ZSB1bmRlZmluZWQgYHRleHRgIGNsYXNzIGZyb20gYHBgIGVsZW1lbnQgKCMzNDQwKQogICogU2l0ZSB0ZW1wbGF0ZTogT3B0aW1pemUgdGV4dCByZW5kZXJpbmcgZm9yIGxlZ2liaWxpdHkgKCMzMzgyKQogICogQWRkIGBkcmFmdD9gIG1ldGhvZCB0byBpZGVudGlmeSBpZiBQb3N0IGlzIGEgRHJhZnQgJiBleHBvc2UgdG8gTGlxdWlkICgjMzQ1NikKICAqIFdyaXRlIHJlZ2VuZXJhdGlvbiBtZXRhZGF0YSBldmVuIG9uIGZ1bGwgcmVidWlsZCAoIzM0NjQpCiAgKiBQZXJmOiBVc2UgYFN0cmluZyNlbmRfd2l0aD8oIi8iKWAgaW5zdGVhZCBvZiByZWdleHAgd2hlbiBjaGVja2luZyBwYXRocyAoIzM1MTYpCiAgKiBEb2NzOiBkb2N1bWVudCAnb3JkaW5hbCcgYnVpbHQtaW4gcGVybWFsaW5rIHN0eWxlICgjMzUzMikKICAqIFVwZ3JhZGUgbGlxdWlkLWMgdG8gMy54ICgjMzUzMSkKICAqIFVzZSBjb25zaXN0ZW50IHN5bnRheCBmb3IgZGVwcmVjYXRpb24gd2FybmluZyAoIzM1MzUpCiAgKiBBZGRlZCBidWlsZCAtLWRlc3RpbmF0aW9uIGFuZCAtLXNvdXJjZSBmbGFncyAoIzM0MTgpCiAgKiBTaXRlIHRlbXBsYXRlOiByZW1vdmUgdW51c2VkIGBwYWdlLm1ldGFgIGF0dHJpYnV0ZSAoIzM1MzcpCiAgKiBJbXByb3ZlIHRoZSBlcnJvciBtZXNzYWdlIHdoZW4gc29ydGluZyBudWxsIG9iamVjdHMgKCMzNTIwKQogICogQWRkZWQgbGlxdWlkLW1kNSBwbHVnaW4gKCMzNTk4KQogICogRG9jdW1lbnRhdGlvbjogUlIgcmVwbGFjZWQgd2l0aCBSU3BlYyBNb2NrcyAoIzM2MDApCiAgKiBEb2N1bWVudGF0aW9uOiBGaXggc3VicGF0aC4gKCMzNTk5KQogICogQ3JlYXRlICd0bXAnIGRpciBmb3IgdGVzdF90YWdzIGlmIGl0IGRvZXNuJ3QgZXhpc3QgKCMzNjA5KQogICogRXh0cmFjdCByZWFkaW5nIG9mIGRhdGEgZnJvbSBgU2l0ZWAgdG8gcmVkdWNlIHJlc3BvbnNpYmlsaXRpZXMuICgjMzU0NSkKICAqIFJlbW92ZWQgdGhlIHdvcmQgJ0pla3lsbCcgYSBmZXcgdGltZXMgZnJvbSB0aGUgY29tbWVudHMgKCMzNjE3KQogICogYGJpbi9qZWt5bGxgOiB3aXRoIG5vIGFyZ3MsIGV4aXQgd2l0aCBleGl0IGNvZGUgMSAoIzM2MTkpCiAgKiBJbmNyZW1lbnRhbCBidWlsZCBpZiBkZXN0aW5hdGlvbiBmaWxlIG1pc3NpbmcgKCMzNjE0KQogICogU3RhdGljIGZpbGVzIGBtdGltZWAgbGlxdWlkIHNob3VsZCByZXR1cm4gYSBgVGltZWAgb2JqICgjMzU5NikKICAqIFVzZSBgSmVreWxsOjpQb3N0YHMgZm9yIGJvdGggTFNJIGluZGV4aW5nIGFuZCBsb29rdXAuICgjMzYyOSkKICAqIEFkZCBgY2hhcnNldD11dGYtOGAgZm9yIEhUTUwgYW5kIFhNTCBwYWdlcyBpbiBXRUJyaWNrICgjMzY0OSkKICAqIFNldCBsb2cgbGV2ZWwgdG8gZGVidWcgd2hlbiB2ZXJib3NlIGZsYWcgaXMgc2V0ICgjMzY2NSkKICAqIEFkZGVkIGEgbWVudGlvbiBvbiB0aGUgR2VtZmlsZSB0byBjb21wbGV0ZSB0aGUgaW5zdHJ1Y3Rpb25zICgjMzY3MSkKICAqIFBlcmY6IENhY2hlIGBEb2N1bWVudCN0b19saXF1aWRgIGFuZCBpbnZhbGlkYXRlIHdoZXJlIG5lY2Vzc2FyeSAoIzM2OTMpCiAgKiBQZXJmOiBgSmVreWxsOjpDbGVhbmVyI2V4aXN0aW5nX2ZpbGVzYDogQ2FsbCBga2VlcF9maWxlX3JlZ2V4YCBhbmQgYGtlZXBfZGlyc2Agb25seSBvbmNlLCBub3Qgb25jZSBwZXIgaXRlcmF0aW9uICgjMzY5NikKICAqIE9taXQgamVreWxsL2pla3lsbC1oZWxwIGZyb20gbGlzdCBvZiByZXNvdXJjZXMuICgjMzY5OCkKICAqIEFkZCBiYXNpYyBgamVreWxsIGRvY3RvcmAgdGVzdCB0byBkZXRlY3QgZnNub3RpZnkgKE9TWCkgYW5vbWFsaWVzLiAoIzM3MDQpCiAgKiBBZGRlZCB0YWxrLmpla3lsbHJiLmNvbSB0byAiSGF2ZSBxdWVzdGlvbnM/IiAoIzM2OTQpCiAgKiBQZXJmb3JtYW5jZTogU29ydCBmaWxlcyBvbmx5IG9uY2UgKCMzNzA3KQogICogUGVyZm9ybWFuY2U6IE1hcnNoYWwgbWV0YWRhdGEgKCMzNzA2KQogICogVXBncmFkZSBoaWdobGlnaHQgd3JhcHBlciBmcm9tIGBkaXZgIHRvIGBmaWd1cmVgICgjMzc3OSkKICAqIFVwZ3JhZGUgbWltZS10eXBlcyB0byBgfj4gMi42YCAoIzM3OTUpCiAgKiBVcGRhdGUgd2luZG93cy5tZCB3aXRoIFJ1YnkgdmVyc2lvbiBpbmZvICgjMzgxOCkKICAqIE1ha2UgdGhlIGRpcmVjdG9yeSBmb3IgaW5jbHVkZXMgY29uZmlndXJhYmxlICgjMzc4MikKICAqIFJlbmFtZSBkaXJlY3RvcnkgY29uZmlndXJhdGlvbnMgdG8gbWF0Y2ggYCpfZGlyYCBjb252ZW50aW9uIGZvciBjb25zaXN0ZW5jeSAoIzM3ODIpCiAgKiBJbnRlcm5hbDogdHJpZ2dlciBob29rcyBieSBvd25lciBzeW1ib2wgKCMzODcxKQogICogVXBkYXRlIE1JTUUgdHlwZXMgZnJvbSBtaW1lLWRiICgjMzkzMykKICAqIEFkZCBoZWFkZXIgdG8gc2l0ZSB0ZW1wbGF0ZSBgX2NvbmZpZy55bWxgIGZvciBjbGFyaXR5ICYgZGlyZWN0aW9uICgjMzk5NykKICAqIFNpdGUgdGVtcGxhdGU6IGFkZCB0aW1lem9uZSBvZmZzZXQgdG8gcG9zdCBkYXRlIGZyb250bWF0dGVyICgjNDAwMSkKICAqIE1ha2UgYSBjb25zdGFudCBmb3IgdGhlIHJlZ2V4IHRvIGZpbmQgaGlkZGVuIGZpbGVzICgjNDAzMikKICAqIFNpdGUgdGVtcGxhdGU6IHJlZmFjdG9yIGdpdGh1YiAmIHR3aXR0ZXIgaWNvbnMgaW50byBpbmNsdWRlcyAoIzQwNDkpCiAgKiBTaXRlIHRlbXBsYXRlOiBhZGQgYmFja2dyb3VuZCB0byBLcmFtZG93biBSb3VnZS1pZmllZCBiYWNrdGljayBjb2RlIGJsb2NrcyAoIzQwNTMpCgojIyMgQnVnIEZpeGVzCgogICogYHBvc3RfdXJsYDogZml4IGFjY2VzcyBkZXByZWNhdGlvbiB3YXJuaW5nICYgZml4IGRlcHJlY2F0aW9uIG1zZyAoIzQwNjApCiAgKiBQZXJmb3JtIGpla3lsbC1wYWdpbmF0ZSBkZXByZWNhdGlvbiB3YXJuaW5nIGNvcnJlY3RseS4gKCMzNTgwKQogICogTWFrZSBwZXJtYWxpbmsgcGFyc2luZyBjb25zaXN0ZW50IHdpdGggcGFnZXMgKCMzMDE0KQogICogYHRpbWUoKWBwcmUtZmlsdGVyIG1ldGhvZCBzaG91bGQgYWNjZXB0IGEgYERhdGVgIG9iamVjdCAoIzMyOTkpCiAgKiBSZW1vdmUgdW5uZWVkZWQgZW5kIHRhZyBmb3IgYGxpbmtgIGluIHNpdGUgdGVtcGxhdGUgKCMzMjM2KQogICogS3JhbWRvd246IFVzZSBgZW5hYmxlX2NvZGVyYXlgIGtleSBpbnN0ZWFkIG9mIGB1c2VfY29kZXJheWAgKCMzMjM3KQogICogVW5lc2NhcGUgYERvY3VtZW50YCBvdXRwdXQgcGF0aCAoIzI5MjQpCiAgKiBGaXggbmF2IGl0ZW1zIGFsaWdubWVudCB3aGVuIG9uIG11bHRpcGxlIHJvd3MgKCMzMjY0KQogICogSGlnaGxpZ2h0OiBPbmx5IFN0cmlwIE5ld2xpbmVzL0NhcnJpYWdlIFJldHVybnMsIG5vdCBTcGFjZXMgKCMzMjc4KQogICogRmluZCB2YXJpYWJsZXMgaW4gZnJvbnQgbWF0dGVyIGRlZmF1bHRzIGJ5IHNlYXJjaGluZyB3aXRoIHJlbGF0aXZlIGZpbGUgcGF0aC4gKCMyNzc0KQogICogQWxsb3cgdmFyaWFibGVzIChlLmcgYDpjYXRlZ29yaWVzYCkgaW4gWUFNTCBmcm9udCBtYXR0ZXIgcGVybWFsaW5rcyAoIzMzMjApCiAgKiBIYW5kbGUgbmlsIFVSTCBwbGFjZWhvbGRlcnMgaW4gcGVybWFsaW5rcyAoIzMzMjUpCiAgKiBUZW1wbGF0ZTogRml4IG5hdiBpdGVtcyBhbGlnbm1lbnQgd2hlbiBpbiAiYnVyZ2VyIiBtb2RlICgjMzMyOSkKICAqIFRlbXBsYXRlOiBSZW1vdmUgYCFpbXBvcnRhbnRgIGZyb20gbmF2IFNDU1MgaW50cm9kdWNlZCBpbiAjMzMyOSAoIzMzNzUpCiAgKiBUaGUgYDp0aXRsZWAgVVJMIHBsYWNlaG9sZGVyIGZvciBjb2xsZWN0aW9ucyBzaG91bGQgYmUgdGhlIGZpbGVuYW1lIHNsdWcuICgjMzM4MykKICAqIFRyaW0gdGhlIGdlbmVyYXRlIHRpbWUgZGlmZiB0byBqdXN0IDMgcGxhY2VzIHBhc3QgdGhlIGRlY2ltYWwgcGxhY2UgKCMzNDE1KQogICogVGhlIGhpZ2hsaWdodCB0YWcgc2hvdWxkIG9ubHkgY2xpcCB0aGUgbmV3bGluZXMgYmVmb3JlIGFuZCBhZnRlciB0aGUgKmVudGlyZSogYmxvY2ssIG5vdCBpbiBiZXR3ZWVuICgjMzQwMSkKICAqIGhpZ2hsaWdodDogZml4IHByb2JsZW0gd2l0aCBsaW5lbm9zIGFuZCByb3VnZS4gKCMzNDM2KQogICogYFNpdGUjcmVhZF9kYXRhX2ZpbGVgOiByZWFkIENTVidzIHdpdGggcHJvcGVyIGZpbGUgZW5jb2RpbmcgKCMzNDU1KQogICogSWdub3JlIGAuamVreWxsLW1ldGFkYXRhYCBpbiBzaXRlIHRlbXBsYXRlICgjMzQ5NikKICAqIFRlbXBsYXRlOiBQb2ludCBkb2N1bWVudGF0aW9uIGxpbmsgdG8gdGhlIGRvY3VtZW50YXRpb24gcGFnZXMgKCMzNTAyKQogICogUmVtb3ZlZCB0aGUgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZXhhbXBsZSBgL2Jsb2dgIGJhc2V1cmwgY29tbWVudCAoIzM0ODUpCiAgKiBDbGVhciB0aGUgcmVnZW5lcmF0b3IgY2FjaGUgZXZlcnkgdGltZSB3ZSBwcm9jZXNzICgjMzU5MikKICAqIFJlYWRkIChicmluZyBiYWNrKSBtaW5pdGVzdC1wcm9maWxlICgjMzYyOCkKICAqIEFkZCBXT0ZGMiBmb250IE1JTUUgdHlwZSB0byBKZWt5bGwgc2VydmVyIE1JTUUgdHlwZXMgKCMzNjQ3KQogICogQmUgc21hcnRlciBhYm91dCBleHRyYWN0aW5nIHRoZSBleHRuYW1lIGluIGBTdGF0aWNGaWxlYCAoIzM2MzIpCiAgKiBQcm9jZXNzIG1ldGFkYXRhIGZvciBhbGwgZGVwZW5kZW5jaWVzICgjMzYwOCkKICAqIFNob3cgZXJyb3IgbWVzc2FnZSBpZiB0aGUgWUFNTCBmcm9udCBtYXR0ZXIgb24gYSBwYWdlL3Bvc3QgaXMgaW52YWxpZC4gKCMzNjQzKQogICogVXBncmFkZSByZWRjYXJwZXQgdG8gMy4yIChTZWN1cml0eSBmaXg6IE9TVkRCLTEyMDQxNSkgKCMzNjUyKQogICogQ3JlYXRlICNtb2NrX2V4cGVjdHMgdGhhdCBnb2VzIGRpcmVjdGx5IHRvIFJTcGVjIE1vY2tzLiAoIzM2NTgpCiAgKiBPcGVuIGAuamVreWxsLW1ldGFkYXRhYCBpbiBiaW5hcnkgbW9kZSB0byByZWFkIGJpbmFyeSBNYXJzaGFsIGRhdGEgKCMzNzEzKQogICogSW5jcmVtZW50YWwgcmVnZW5lcmF0aW9uOiBoYW5kbGUgZGVsZXRlZCwgcmVuYW1lZCwgYW5kIG1vdmVkIGRlcGVuZGVuY2llcyAoIzM3MTcpCiAgKiBGaXggdHlwbyBvbiBsaW5lIDE5IG9mIHBhZ2luYXRpb24ubWQgKCMzNzYwKQogICogRml4IGl0IHNvIHRoYXQgJ2Jsb2cuaHRtbCcgbWF0Y2hlcyAnYmxvZy5odG1sJyAoIzM3MzIpCiAgKiBSZW1vdmUgb2NjYXNpb25hbGx5LXByb2JsZW1hdGljIGBlbnN1cmVgIGluIGBMaXF1aWRSZW5kZXJlcmAgKCMzODExKQogICogRml4ZWQgYW4gdW5jbGVhciBjb2RlIGNvbW1lbnQgaW4gc2l0ZSB0ZW1wbGF0ZSBTQ1NTICgjMzgzNykKICAqIEZpeCByZWFkaW5nIG9mIGJpbmFyeSBtZXRhZGF0YSBmaWxlICgjMzg0NSkKICAqIFJlbW92ZSB2YXIgY29sbGlzaW9uIHdpdGggc2l0ZSB0ZW1wbGF0ZSBoZWFkZXIgbWVudSBpdGVyYXRpb24gdmFyaWFibGUgKCMzODM4KQogICogQ2hhbmdlIG5vbi1leGlzdGVudCBgaGxfbGluZW5vc2AgdG8gYGhsX2xpbmVzYCB0byBhbGxvdyBwYXNzdGhyb3VnaCBpbiBzYWZlIG1vZGUgKCMzNzg3KQogICogQWRkIG1pc3NpbmcgZmxhZyB0byBkaXNhYmxlIHRoZSB3YXRjaGVyICgjMzgyMCkKICAqIFVwZGF0ZSBDSSBndWlkZSB0byBpbmNsdWRlIG1vcmUgZGlyZWN0IGV4cGxhbmF0aW9ucyBvZiB0aGUgZmxvdyAoIzM4OTEpCiAgKiBTZXQgYGZ1dHVyZWAgdG8gYGZhbHNlYCBpbiB0aGUgZGVmYXVsdCBjb25maWcgKCMzODkyKQogICogZmlsdGVyczogYHdoZXJlYCBzaG91bGQgY29tcGFyZSBzdHJpbmdpZmllZCB2ZXJzaW9ucyBvZiBpbnB1dCAmIGNvbXBhcmF0b3IgKCMzOTM1KQogICogUmVhZCBidWlsZCBvcHRpb25zIGZvciBgamVreWxsIGNsZWFuYCBjb21tYW5kICgjMzgyOCkKICAqIEZpeCAjMzk3MDogVXNlIEdlbTo6VmVyc2lvbiB0byBjb21wYXJlIHZlcnNpb25zLCBub3QgYD5gLgogICogQWJvcnQgaWYgbm8gc3ViY29tbWFuZC4gRml4ZXMgY29uZnVzaW5nIG1lc3NhZ2UuICgjMzk5MikKICAqIFdob2xlLXBvc3QgZXhjZXJwdHMgc2hvdWxkIG1hdGNoIHRoZSBwb3N0IGNvbnRlbnQgKCM0MDA0KQogICogQ2hhbmdlIGRlZmF1bHQgZm9udCB3ZWlnaHQgdG8gNDAwIHRvIGZpeCBib2xkL3N0cm9uZyB0ZXh0IGlzc3VlcyAoIzQwNTApCiAgKiBEb2N1bWVudDogT25seSBhdXRvLWdlbmVyYXRlIHRoZSBleGNlcnB0IGlmIGl0J3Mgbm90IG92ZXJyaWRkZW4gKCM0MDYyKQogICogVXRpbHM6IGBkZWVwX21lcmdlX2hhc2hlc2Agc2hvdWxkIGFsc28gbWVyZ2UgYGRlZmF1bHRfcHJvY2AgKDQ1ZjY5YmIpCiAgKiBEZWZhdWx0czogY29tcGFyZSBwYXRocyBpbiBgYXBwbGllc19wYXRoP2AgYXMgYFN0cmluZ2BzIHRvIGF2b2lkIGNvbmZ1c2lvbiAoN2I4MWYwMCkKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIFJlbW92ZSBsb2FkZXIucmIgYW5kICJtb2Rlcm5pemUiIGBzY3JpcHQvdGVzdGAuICgjMzU3NCkKICAqIEltcHJvdmUgdGhlIGdyYW1tYXIgaW4gdGhlIGRvY3VtZW50YXRpb24gKCMzMjMzKQogICogVXBkYXRlIHRoZSBMSUNFTlNFIHRleHQgdG8gbWF0Y2ggdGhlIE1JVCBsaWNlbnNlIGV4YWN0bHkgKCMzMjUzKQogICogVXBkYXRlIHJha2UgdGFzayBgc2l0ZTpwdWJsaXNoYCB0byBmaXggbWlub3IgYnVncy4gKCMzMjU0KQogICogU3dpdGNoIHRvIHNoaWVsZHMuaW8gZm9yIHRoZSBSRUFETUUgYmFkZ2VzLiAoIzMyNTUpCiAgKiBVc2UgYEZpbGVMaXN0YCBpbnN0ZWFkIG9mIGBEaXIuZ2xvYmAgaW4gYHNpdGU6cHVibGlzaGAgcmFrZSB0YXNrICgjMzI2MSkKICAqIEZpeCB0ZXN0IHNjcmlwdCB0byBiZSBwbGF0Zm9ybS1pbmRlcGVuZGVudCAoIzMyNzkpCiAgKiBJbnN0ZWFkIG9mIHN5bWxpbmtpbmcgYC90bXBgLCBjcmVhdGUgYW5kIHN5bWxpbmsgYSBsb2NhbCBgdG1wYCBpbiB0aGUgdGVzdHMgKCMzMjU4KQogICogRml4IHNvbWUgc3BhY2luZyAoIzMzMTIpCiAgKiBGaXggY29tbWVudCB0eXBvIGluIGBsaWIvamVreWxsL2Zyb250bWF0dGVyX2RlZmF1bHRzLnJiYCAoIzMzMjIpCiAgKiBNb3ZlIGFsbCBgcmVnZW5lcmF0ZT9gIGNoZWNraW5nIHRvIGBSZWdlbmVyYXRvcmAgKCMzMzI2KQogICogRmFjdG9yIG91dCBhIGByZWFkX2RhdGFfZmlsZWAgY2FsbCB0byBrZWVwIHRoaW5ncyBjbGVhbiAoIzMzODApCiAgKiBQcm9vZiB0aGUgc2l0ZSB3aXRoIENpcmNsZUNJLiAoIzM0MjcpCiAgKiBVcGRhdGUgTElDRU5TRSB0byAyMDE1LiAoIzM0NzcpCiAgKiBVcGdyYWRlIHRlc3RzIHRvIHVzZSBNaW5pdGVzdCAoIzM0OTIpCiAgKiBSZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSAoIzM0OTcpCiAgKiBVc2UgYGZpeHR1cmVfc2l0ZWAgZm9yIERvY3VtZW50IHRlc3RzICgjMzUxMSkKICAqIFJlbW92ZSBhZGFwdGVycyBkZXByZWNhdGlvbiB3YXJuaW5nICgjMzUyOSkKICAqIE1pbm9yIGZpeGVzIHRvIGB1cmwucmJgIHRvIGZvbGxvdyBHaXRIdWIgc3R5bGUgZ3VpZGUgKCMzNTQ0KQogICogTWlub3IgY2hhbmdlcyB0byByZXNvbHZlIGRlcHJlY2F0aW9uIHdhcm5pbmdzICgjMzU0NykKICAqIENvbnZlcnQgcmVtYWluaW5nIHRleHRpbGUgdGVzdCBkb2N1bWVudHMgdG8gbWFya2Rvd24gKCMzNTI4KQogICogTWlncmF0ZSB0aGUgdGVzdHMgdG8gdXNlIHJzcGVjLW1vY2tzICgjMzU1MikKICAqIFJlbW92ZSBgYWN0aXZlc3VwcG9ydGAgKCMzNjEyKQogICogQWRkZWQgdGVzdHMgZm9yIGBKZWt5bGw6U3RhdGljRmlsZWAgKCMzNjMzKQogICogRm9yY2UgbWluaXRlc3QgdmVyc2lvbiB0byA1LjUuMSAoIzM2NTcpCiAgKiBVcGRhdGUgdGhlIHdheSBjdWN1bWJlciBhY2Nlc3NlcyBNaW5pdGVzdCBhc3NlcnRpb25zICgjMzY3OCkKICAqIEFkZCBgc2NyaXB0L3J1Ynlwcm9mYCB0byBnZW5lcmF0ZSBjYWNoZWdyaW5kIGNhbGxncmFwaHMgKCMzNjkyKQogICogVXBncmFkZSBjdWN1bWJlciB0byAyLnggKCMzNzk1KQogICogVXBkYXRlIEtyYW1kb3duLiAoIzM4NTMpCiAgKiBVcGRhdGVkIHRoZSBzY3JpcHRzIHNoZWJhbmcgZm9yIHBvcnRhYmlsaXR5ICgjMzg1OCkKICAqIFVwZGF0ZSBKUnVieSB0ZXN0aW5nIHRvIDlLIChbM2FiMzg2Zl0oaHR0cHM6Ly9naXRodWIuY29tL2pla3lsbC9qZWt5bGwvY29tbWl0LzNhYjM4NmYxYjA5NmJlMjVhMjRmZTAzOGZjNzBmZDBmYjA4ZDU0NWQpKQogICogT3JnYW5pemUgZGVwZW5kZW5jaWVzIGludG8gZGV2IGFuZCB0ZXN0IGdyb3Vwcy4gKCMzODUyKQogICogQ29udHJpYnV0aW5nLm1kIHNob3VsZCByZWZlciB0byBgc2NyaXB0L2N1Y3VtYmVyYCAoIzM4OTQpCiAgKiBVcGRhdGUgY29udHJpYnV0aW5nIGRvY3VtZW50YXRpb24gdG8gcmVmbGVjdCB3b3JrZmxvdyB1cGRhdGVzICgjMzg5NSkKICAqIEFkZCBzY3JpcHQgdG8gdmVuZG9yIG1pbWUgdHlwZXMgKCMzOTMzKQogICogSWdub3JlIC5idW5kbGUgZGlyIGluIFNpbXBsZUNvdiAoIzQwMzMpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBBZGQgJ2luZm8nIGxhYmVscyB0byBjZXJ0YWluIG5vdGVzIGluIGNvbGxlY3Rpb25zIGRvY3MgKCMzNjAxKQogICogUmVtb3ZlIGV4dHJhIHNwYWNlcywgbWFrZSB0aGUgbGFzdCBzZW50ZW5jZSBsZXNzIGF3a3dhcmQgaW4gcGVybWFsaW5rIGRvY3MgKCMzNjAzKQogICogVXBkYXRlIHRoZSBwZXJtYWxpbmtzIGRvY3VtZW50YXRpb24gdG8gcmVmbGVjdCB0aGUgdXBkYXRlcyBmb3IgMy4wICgjMzU1NikKICAqIEFkZCBibG9nIHBvc3QgYW5ub3VuY2luZyBKZWt5bGwgSGVscCAoIzM1MjMpCiAgKiBBZGQgSmVreWxsIFRhbGsgdG8gSGVscCBwYWdlIG9uIHNpdGUgKCMzNTE4KQogICogQ2hhbmdlIEFqYXggcGFnaW5hdGlvbiByZXNvdXJjZSBsaW5rIHRvIHVzZSBIVFRQUyAoIzM1NzApCiAgKiBGaXhpbmcgdGhlIGRlZmF1bHQgaG9zdCBvbiBkb2NzICgjMzIyOSkKICAqIEFkZCBgamVreWxsLXRodW1ibmFpbC1maWx0ZXJgIHRvIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzI3OTApCiAgKiBBZGQgbGluayB0byAnQWRkaW5nIEFqYXggcGFnaW5hdGlvbiB0byBKZWt5bGwnIHRvIFJlc291cmNlcyBwYWdlICgjMzE4NikKICAqIEFkZCBhIFJlc291cmNlcyBsaW5rIHRvIHR1dG9yaWFsIG9uIGJ1aWxkaW5nIGR5bmFtaWMgbmF2YmFycyAoIzMxODUpCiAgKiBTZW1hbnRpYyBzdHJ1Y3R1cmUgaW1wcm92ZW1lbnRzIHRvIHRoZSBwb3N0IGFuZCBwYWdlIGxheW91dHMgKCMzMjUxKQogICogQWRkIG5ldyBBc2NpaURvYyBwbHVnaW4gdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zLiAoIzMyNzcpCiAgKiBTcGVjaWZ5IHRoYXQgYWxsIHRyYW5zZm9ybWFibGUgY29sbGVjdGlvbiBkb2N1bWVudHMgbXVzdCBjb250YWluIFlBTUwgZnJvbnQgbWF0dGVyICgjMzI3MSkKICAqIEFzc29ydGVkIGFjY2Vzc2liaWxpdHkgZml4ZXMgKCMzMjU2KQogICogVXBkYXRlIGNvbmZpZ3VyYXRpb24gZG9jcyB0byBtZW50aW9uIGBrZWVwX2ZpbGVzYCBmb3IgYGRlc3RpbmF0aW9uYCAoIzMyODgsICMzMjk2KQogICogQnJlYWsgd2hlbiB3ZSBzdWNjZXNzZnVsbHkgZ2VuZXJhdGUgbmF2IGxpbmsgdG8gc2F2ZSBDUFUgY3ljbGVzLiAoIzMyOTEpCiAgKiBVcGRhdGUgdXNhZ2UgZG9jcyB0byBtZW50aW9uIGBrZWVwX2ZpbGVzYCBhbmQgYSB3YXJuaW5nIGFib3V0IGBkZXN0aW5hdGlvbmAgY2xlYW5pbmcgKCMzMjk1KQogICogQWRkIGxvZ2ljIHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgdGhlIGBuZXh0X3NlY3Rpb25gIGFuZCBgcHJldl9zZWN0aW9uYCBuYXZpZ2F0aW9uIGl0ZW1zICgjMzI5MikKICAqIFNvbWUgc21hbGwgZml4ZXMgZm9yIHRoZSBQbHVnaW5zIFRPQy4gKCMzMzA2KQogICogQWRkZWQgdmVyc2lvbmluZyBjb21tZW50IHRvIGNvbmZpZ3VyYXRpb24gZmlsZSAoIzMzMTQpCiAgKiBBZGQgYGpla3lsbC1taW5pZmllcmAgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMzMzMykKICAqIEFkZCBibG9nIHBvc3QgYWJvdXQgdGhlIEpla3lsbCBtZWV0LXVwICgjMzMzMikKICAqIFVzZSBgaGlnaGxpZ2h0YCBMaXF1aWQgdGFnIGluc3RlYWQgb2YgdGhlIGZvdXItc3BhY2UgdGFicyBmb3IgY29kZSAoIzMzMzYpCiAgKiAzLjAuMC5iZXRhMSByZWxlYXNlIHBvc3QgKCMzMzQ2KQogICogQWRkIGB0d2FgIHRvIHRoZSBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMzMzg0KQogICogUmVtb3ZlIGV4dHJhIHNwYWNlcyAoIzMzODgpCiAgKiBGaXggc21hbGwgZ3JhbW1hciBlcnJvcnMgb24gYSBjb3VwbGUgcGFnZXMgKCMzMzk2KQogICogRml4IHR5cG8gb24gVGVtcGxhdGVzIGRvY3MgcGFnZSAoIzM0MjApCiAgKiBzL3RocmVlL2ZvdXIgZm9yIHBsdWdpbiB0eXBlIGxpc3QgKCMzNDI0KQogICogUmVsZWFzZSBqZWt5bGxyYi5jb20gYXMgYSBsb2NhbGx5LWNvbXBpbGVkIHNpdGUuICgjMzQyNikKICAqIEFkZCBhIGpla3lsbHJiLmNvbS9oZWxwIHBhZ2Ugd2hpY2ggZWx1Y2lkYXRlcyBwbGFjZXMgZnJvbSB3aGljaCB0byBnZXQgaGVscCAoIzM0MjgpCiAgKiBSZW1vdmUgZXh0cmFuZW91cyBkYXNoIG9uIFBsdWdpbnMgZG9jIHBhZ2Ugd2hpY2ggY2F1c2VkIGEgZm9ybWF0dGluZyBlcnJvciAoIzM0MzEpCiAgKiBGaXggYnJva2VuIGxpbmsgdG8gSm9yZGFuIFRob3JucXVlc3QncyB3ZWJzaXRlLiAoIzM0MzgpCiAgKiBDaGFuZ2UgdGhlIGxpbmsgdG8gYW4gZXh0ZW5zaW9uICgjMzQ1NykKICAqIEZpeCBUd2l0dGVyIGxpbmsgb24gdGhlIGhlbHAgcGFnZSAoIzM0NjYpCiAgKiBGaXggd29yZGluZyBpbiBjb2RlIHNuaXBwZXQgaGlnaGxpZ2h0aW5nIHNlY3Rpb24gKCMzNDc1KQogICogQWRkIGEgYC9gIHRvIGBwYWdpbmF0ZV9wYXRoYCBpbiB0aGUgUGFnaW5hdGlvbiBkb2N1bWVudGF0aW9uICgjMzQ3OSkKICAqIEFkZCBhIGxpbmsgb24gYWxsIHRoZSBkb2NzIHBhZ2VzIHRvICJJbXByb3ZlIHRoaXMgcGFnZSIuICgjMzUxMCkKICAqIEFkZCBqZWt5bGwtYXV0by1pbWFnZSBnZW5lcmF0b3IgdG8gdGhlIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzM0ODkpCiAgKiBSZXBsYWNlIGxpbmsgdG8gdGhlIHByb3Bvc2VkIGBwaWN0dXJlYCBlbGVtZW50IHNwZWMgKCMzNTMwKQogICogQWRkIGZyb250bWF0dGVyIGRhdGUgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiAoIzM0NjkpCiAgKiBJbXByb3ZlIGNvbnNpc3RlbmN5IGFuZCBjbGFyaXR5IG9mIHBsdWdpbnMgb3B0aW9ucyBub3RlICgjMzU0NikKICAqIEFkZCBwZXJtYWxpbmsgd2FybmluZyB0byBwYWdpbmF0aW9uIGRvY3MgKCMzNTUxKQogICogRml4IGdyYW1tYXIgaW4gQ29sbGVjdGlvbnMgZG9jcyBBUEkgc3RhYmlsaXR5IHdhcm5pbmcgKCMzNTYwKQogICogUmVzdHJ1Y3R1cmUgYGV4Y2VycHRfc2VwYXJhdG9yYCBkb2N1bWVudGF0aW9uIGZvciBjbGFyaXR5ICgjMzU1MCkKICAqIEZpeCBhY2NpZGVudGFsIGxpbmUgYnJlYWsgaW4gY29sbGVjdGlvbnMgZG9jcyAoIzM1ODUpCiAgKiBBZGQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGAuamVreWxsLW1ldGFkYXRhYCBmaWxlICgjMzU5NykKICAqIERvY3VtZW50IGFkZGl0aW9uIG9mIHZhcmlhYmxlIHBhcmFtZXRlcnMgdG8gYW4gaW5jbHVkZSAoIzM1ODEpCiAgKiBBZGQgYGpla3lsbC1maWxlc2AgdG8gdGhlIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucy4gKCMzNTg2KQogICogRGVmaW5lIHRoZSBgaW5zdGFsbGAgc3RlcCBpbiB0aGUgQ0kgZXhhbXBsZSBgLnRyYXZpcy55bWxgICgjMzYyMikKICAqIEV4cGFuZCBjb2xsZWN0aW9ucyBkb2N1bWVudGF0aW9uLiAoIzM2MzgpCiAgKiBBZGQgdGhlICJ3YXJuaW5nIiBub3RlIGxhYmVsIHRvIGV4Y2x1ZGluZyBgdmVuZG9yYCBpbiB0aGUgQ0kgZG9jcyBwYWdlICgjMzYyMykKICAqIFVwZ3JhZGUgcGllY2VzIG9mIHRoZSBVZ3JhZGluZyBndWlkZSBmb3IgSmVreWxsIDMgKCMzNjA3KQogICogU2hvd2luZyBob3cgdG8gYWNjZXNzIHNwZWNpZmljIGRhdGEgaXRlbXMgKCMzNDY4KQogICogQ2xhcmlmeSBwYWdpbmF0aW9uIHdvcmtzIGZyb20gd2l0aGluIEhUTUwgZmlsZXMgKCMzNDY3KQogICogQWRkIG5vdGUgdG8gYGV4Y2VycHRfc2VwYXJhdG9yYCBkb2N1bWVudGF0aW9uIHRoYXQgaXQgY2FuIGJlIHNldCBnbG9iYWxseSAoIzM2NjcpCiAgKiBGaXggc29tZSBuYW1lcyBvbiBUcm91Ymxlc2hvb3RpbmcgcGFnZSAoIzM2ODMpCiAgKiBBZGQgYHJlbW90ZV9maWxlX2NvbnRlbnRgIHRhZyBwbHVnaW4gdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMzY5MSkKICAqIFVwZGF0ZSB0aGUgUmVkY2FycGV0IHZlcnNpb24gb24gdGhlIENvbmZpZ3VyYXRpb24gcGFnZS4gKCMzNzQzKQogICogVXBkYXRlIHRoZSBsaW5rIGluIHRoZSB3ZWxjb21lIHBvc3QgdG8gcG9pbnQgdG8gSmVreWxsIFRhbGsgKCMzNzQ1KQogICogVXBkYXRlIGxpbmsgZm9yIG5hdmJhcnMgd2l0aCBkYXRhIGF0dHJpYnV0ZXMgdHV0b3JpYWwgKCMzNzI4KQogICogQWRkIGBqZWt5bGwtYXNjaWluZW1hYCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMzNzUwKQogICogVXBkYXRlIHBhZ2luYXRpb24gZXhhbXBsZSB0byBiZSBhZ25vc3RpYyB0byBmaXJzdCBwYWdpbmF0aW9uIGRpciAoIzM3NjMpCiAgKiBEZXRhaWxlZCBpbnN0cnVjdGlvbnMgZm9yIHJzeW5jIGRlcGxveW1lbnQgbWV0aG9kICgjMzg0OCkKICAqIEFkZCBKZWt5bGwgUG9ydGZvbGlvIEdlbmVyYXRvciB0byBsaXN0IG9mIHBsdWdpbnMgKCMzODgzKQogICogQWRkIGBzaXRlLmh0bWxfZmlsZXNgIHRvIHZhcmlhYmxlcyBkb2NzICgjMzg4MCkKICAqIEFkZCBTdGF0aWMgUHVibGlzaGVyIHRvb2wgdG8gbGlzdCBvZiBkZXBsb3ltZW50IG1ldGhvZHMgKCMzODY1KQogICogRml4IGEgZmV3IHR5cG9zLiAoIzM4OTcpCiAgKiBBZGQgYGpla3lsbC15b3V0dWJlYCB0byB0aGUgbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMzkzMSkKICAqIEFkZCBWaWV3cyBSb3V0ZXIgcGx1Z2luICgjMzk1MCkKICAqIFVwZGF0ZSBpbnN0YWxsIGRvY3MgKENvcmUgZGVwZW5kZW5jaWVzLCBXaW5kb3dzIHJlcXMsIGV0YykgKCMzNzY5KQogICogVXNlIEpla3lsbCBGZWVkIGZvciBqZWt5bGxyYi5jb20gKCMzNzM2KQogICogQWRkIGpla3lsbC11bWxhdXRzIHRvIHBsdWdpbnMubWQgKCQzOTY2KQogICogVHJvdWJsZXNob290aW5nOiBmaXggYnJva2VuIGxpbmssIGFkZCBvdGhlciBtYWMtc3BlY2lmaWMgaW5mbyAoIzM5NjgpCiAgKiBBZGQgYSBuZXcgc2l0ZSBmb3IgbGVhcm5pbmcgcHVycG9zZXMgKCMzOTE3KQogICogQWRkZWQgZG9jdW1lbnRhdGlvbiBmb3IgSmVreWxsIGVudmlyb25tZW50IHZhcmlhYmxlcyAoIzM5ODkpCiAgKiBGaXggYnJva2VuIGNvbmZpZ3VyYXRpb24gZG9jdW1lbnRhdGlvbiBwYWdlICgjMzk5NCkKICAqIEFkZCB0cm91Ymxlc2hvb3RpbmcgZG9jcyBmb3IgaW5zdGFsbGluZyBvbiBFbCBDYXBpdGFuICgjMzk5OSkKICAqIEFkZCBMYXp5IFR3ZWV0IEVtYmVkZGluZyB0byB0aGUgbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjNDAxNSkKICAqIEFkZCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZvciAyIG9mIDMgb3B0aW9ucyBmb3IgcGx1Z2lucyAoIzQwMTMpCiAgKiBBZGQgYWx0ZXJuYXRpdmUgamVreWxsIGdlbSBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zICgjNDAxOCkKICAqIEZpeCBhIGZldyB0eXBvcyBhbmQgZm9ybWF0dGluZyBwcm9ibGVtcy4gKCM0MDIyKQogICogRml4IHByZXR0eSBwZXJtYWxpbmsgZXhhbXBsZSAoIzQwMjkpCiAgKiBOb3RlIHRoYXQgYF9jb25maWcueW1sYCBpcyBub3QgcmVsb2FkZWQgZHVyaW5nIHJlZ2VuZXJhdGlvbiAoIzQwMzQpCiAgKiBBcHBseSBjb2RlIGJsb2NrIGZpZ3VyZSBzeW50YXggdG8gYmxvY2tzIGluIENPTlRSSUJVVElORyAoIzQwNDYpCiAgKiBBZGQgamVreWxsLXNtYXJ0aWZ5IHRvIHRoZSBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMzNTcyKQoKIyMgMi41LjMgLyAyMDE0LTEyLTIyCgojIyMgQnVnIEZpeGVzCgogICogV2hlbiBjaGVja2luZyBhIE1hcmtkb3duIGV4dG5hbWUsIGluY2x1ZGUgcG9zaXRpb24gb2YgdGhlIGAuYCAoIzMxNDcpCiAgKiBGaXggYGpzb25pZnlgIExpcXVpZCBmaWx0ZXIgaGFuZGxpbmcgb2YgYm9vbGVhbiB2YWx1ZXMgKCMzMTU0KQogICogQWRkIGNvbW1hIHRvIHZhbHVlIG9mIGB2aWV3cG9ydGAgbWV0YSB0YWcgKCMzMTcwKQogICogU2V0IHRoZSBsaW5rIHR5cGUgZm9yIHRoZSBSU1MgZmVlZCB0byBgYXBwbGljYXRpb24vcnNzK3htbGAgKCMzMTc2KQogICogUmVmYWN0b3IgYCNhc19saXF1aWRgICgjMzE1OCkKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIEV4Y2x1ZGUgYnVpbHQtaW4gYnVuZGxlcyBmcm9tIGJlaW5nIGFkZGVkIHRvIGNvdmVyYWdlIHJlcG9ydCAoIzMxODApCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBBZGQgYEBhbGZyZWR4aW5nYCB0byB0aGUgYEBqZWt5bGwvY29yZWAgdGVhbS4gOnRhZGE6ICgjMzIxOCkKICAqIERvY3VtZW50IHRoZSBgLXFgIG9wdGlvbiBmb3IgdGhlIGBidWlsZGAgYW5kIGBzZXJ2ZWAgY29tbWFuZHMgKCMzMTQ5KQogICogRml4IHNvbWUgbWlub3IgdHlwb3MvZmxvdyBmaXhlcyBpbiBkb2N1bWVudGF0aW9uIHdlYnNpdGUgY29udGVudCAoIzMxNjUpCiAgKiBBZGQgYGtlZXBfZmlsZXNgIHRvIGNvbmZpZ3VyYXRpb24gZG9jdW1lbnRhdGlvbiAoIzMxNjIpCiAgKiBSZXBlYXQgd2FybmluZyBhYm91dCBjbGVhbmluZyBvZiB0aGUgYGRlc3RpbmF0aW9uYCBkaXJlY3RvcnkgKCMzMTYxKQogICogQWRkIGpla3lsbC01MDBweC1lbWJlZCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMzMTYzKQogICogU2ltcGxpZmllZCBwbGF0Zm9ybSBkZXRlY3Rpb24gaW4gR2VtZmlsZSBleGFtcGxlIGZvciBXaW5kb3dzICgjMzE3NykKICAqIEFkZCB0aGUgYGpla3lsbC1qYWxhbGlgIHBsdWdpbiBhZGRlZCB0byB0aGUgbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zLiAoIzMxOTgpCiAgKiBBZGQgVGFibGUgb2YgQ29udGVudHMgdG8gVHJvdWJsZXNob290aW5nIHBhZ2UgKCMzMTk2KQogICogQWRkIGBpbmxpbmVfaGlnaGxpZ2h0YCBwbHVnaW4gdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMzIxMikKICAqIEFkZCBgamVreWxsLW1lcm1haWRgIHBsdWdpbiB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMzMjIyKQoKIyMgMi41LjIgLyAyMDE0LTExLTE3CgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogYHBvc3RfdXJsYCBzaG91bGQgbWF0Y2ggYHBvc3QubmFtZWAgaW5zdGVhZCBvZiBzbHVncyBhbmQgZGF0ZXMgKCMzMDU4KQoKIyMjIEJ1ZyBGaXhlcwoKICAqIEZpeCBidW5kbGUgcmVxdWlyZSBmb3IgYDpqZWt5bGxfcGx1Z2luc2AgKCMzMTE5KQogICogUmVtb3ZlIGR1cGxpY2F0ZSByZWdleHAgcGhyYXNlOiBgXlxBYCAoIzMwODkpCiAgKiBSZW1vdmUgZHVwbGljYXRlIGBDb252ZXJzaW9uIGVycm9yOmAgbWVzc2FnZSBpbiBgQ29udmVydGlibGVgICgjMzA4OCkKICAqIFByaW50IGZ1bGwgY29udmVyc2lvbiBlcnJvciBtZXNzYWdlIGluIGBSZW5kZXJlciNjb252ZXJ0YCAoIzMwOTApCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBDaGFuZ2UgdmFyaWFibGUgbmFtZXMgaW4gR29vZ2xlIEFuYWx5dGljcyBzY3JpcHQgKCMzMDkzKQogICogTWVudGlvbiBDU1YgZmlsZXMgaW4gdGhlIGRvY3MgZm9yIGRhdGEgZmlsZXMgKCMzMTAxKQogICogQWRkIHRyYWlsaW5nIHNsYXNoIHRvIGBwYWdpbmF0ZV9wYXRoYCBleGFtcGxlLiAoIzMwOTEpCiAgKiBHZXQgcmlkIG9mIG5vaWZuaW9mIChgZXhjZXJwdF9zZXBhcmF0b3JgKSAoIzMwOTQpCiAgKiBTYXNzIGltcHJvdmVtZW50cywgYXJvdW5kIG5lc3RpbmcgbW9zdGx5LiAoIzMxMjMpCiAgKiBBZGQgd2VibWVudGlvbnMuaW8gcGx1Z2luIHRvIHRoZSBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMzMTI3KQogICogQWRkIFNhc3MgbWl4aW5zIGFuZCB1c2UgdGhlbS4gKCMyOTA0KQogICogU2xpZ2h0bHkgY29tcHJlc3MgamVreWxsLXN0aWNrZXIuanBnLiAoIzMxMzMpCiAgKiBVcGRhdGUgZ3JpZGlzbSBhbmQgc2VwYXJhdGUgb3V0IHJlbGF0ZWQgYnV0IGN1c3RvbSBzdHlsZXMuICgjMzEzMikKICAqIEFkZCByZW1vdGUtaW5jbHVkZSBwbHVnaW4gdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMzEzNikKCiMjIDIuNS4xIC8gMjAxNC0xMS0wOQoKIyMjIEJ1ZyBGaXhlcwoKICAqIEZpeCBwYXRoIHNhbml0YXRpb24gYnVnIHJlbGF0ZWQgdG8gV2luZG93cyBkcml2ZSBuYW1lcyAoIzMwNzcpCgojIyMgRGV2ZWxvcG1lbnQgRml4ZXMKCiAgKiBBZGQgZGV2ZWxvcG1lbnQgdGltZSBkZXBlbmRlbmNpZXMgb24gbWluaXRlc3QgYW5kIHRlc3QtdW5pdCB0byBnZW1zcGVjIGZvciBjeWd3aW4gKCMzMDY0KQogICogVXNlIFRyYXZpcydzIGJ1aWx0LWluIGNhY2hpbmcuICgjMzA3NSkKCiMjIDIuNS4wIC8gMjAxNC0xMS0wNgoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFJlcXVpcmUgZ2VtcyBpbiBgOmpla3lsbF9wbHVnaW5zYCBHZW1maWxlIGdyb3VwIHVubGVzcyBgSkVLWUxMX05PX0JVTkRMRVJfUkVRVUlSRWAgaXMgc3BlY2lmaWVkIGluIHRoZSBlbnZpcm9ubWVudC4gKCMyODY1KQogICogQ2VudHJhbGl6ZSBwYXRoIHNhbml0YXRpb24gaW4gdGhlIGBTaXRlYCBvYmplY3QgKCMyODgyKQogICogQWxsb3cgcGxhY2Vob2xkZXJzIGluIHBlcm1hbGlua3MgKCMzMDMxKQogICogQWxsb3cgdXNlcnMgdG8gc3BlY2lmeSB0aGUgbG9nIGxldmVsIHZpYSBgSkVLWUxMX0xPR19MRVZFTGAuICgjMzA2NykKICAqIEZhbmN5IEluZGV4aW5nIHdpdGggV0VCcmljayAoIzMwMTgpCiAgKiBBbGxvdyBFbnVtZXJhYmxlcyB0byBiZSB1c2VkIHdpdGggYHdoZXJlYCBmaWx0ZXIuICgjMjk4NikKICAqIE1ldGEgZGVzY3JpcHRpb25zIGluIHRoZSBzaXRlIHRlbXBsYXRlIG5vdyB1c2UgYHBhZ2UuZXhjZXJwdGAgaWYgaXQncyBhdmFpbGFibGUgKCMyOTY0KQogICogQ2hhbmdlIGluZGVudGF0aW9uIGluIGBoZWFkLmh0bWxgIG9mIHNpdGUgdGVtcGxhdGUgdG8gMiBzcGFjZXMgZnJvbSA0ICgjMjk3MykKICAqIFVzZSBhIGAkY29udGVudC13aWR0aGAgdmFyaWFibGUgaW5zdGVhZCBvZiBhIGZpeGVkIHZhbHVlIGluIHRoZSBzaXRlIHRlbXBsYXRlIENTUyAoIzI5NzIpCiAgKiBTdHJpcCBuZXdsaW5lcyBpbiBzaXRlIHRlbXBsYXRlIGA8bWV0YT5gIGRlc2NyaXB0aW9uLiAoIzI5ODIpCiAgKiBBZGQgbGluayB0byBhdG9tIGZlZWQgaW4gYGhlYWRgIG9mIHNpdGUgdGVtcGxhdGUgZmlsZXMgKCMyOTk2KQogICogUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucyAoIzI5OTQpCiAgKiBVc2UgYEhhc2gjZWFjaF9rZXlgIGluc3RlYWQgb2YgYEhhc2gja2V5cy5lYWNoYCB0byBzcGVlZCB1cCBpdGVyYXRpb24gb3ZlciBoYXNoIGtleXMuICgjMzAxNykKICAqIEZ1cnRoZXIgbWlub3IgcGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzLiAoIzMwMjIpCiAgKiBBZGQgJ2InIGFuZCAncycgYWxpYXNlcyBmb3IgYnVpbGQgYW5kIHNlcnZlLCByZXNwZWN0aXZlbHkgKCMzMDY1KQoKIyMjIEJ1ZyBGaXhlcwoKICAqIEZpeCBSb3VnZSdzIFJlZENhcnBldCBwbHVnaW4gaW50ZXJmYWNlIGludGVncmF0aW9uICgjMjk1MSkKICAqIFJlbW92ZSBgLS13YXRjaGAgZnJvbSB0aGUgc2l0ZSB0ZW1wbGF0ZSBibG9nIHBvc3Qgc2luY2UgaXQgZGVmYXVsdHMgdG8gd2F0Y2hpbmcgaW4gaW4gMi40LjAgKCMyOTIyKQogICogRml4IGNvZGUgZm9yIG1lZGlhIHF1ZXJ5IG1peGluIGluIHNpdGUgdGVtcGxhdGUgKCMyOTQ2KQogICogQWxsb3cgcG9zdCBVUkwncyB0byBoYXZlIGAuaHRtYCBleHRlbnNpb25zICgjMjkyNSkKICAqIGBVdGlscy5zbHVnaWZ5YDogRG9uJ3QgY3JlYXRlIG5ldyBvYmplY3RzIHdoZW4gZ3N1YmJpbmcgKCMyOTk3KQogICogVGhlIGpzb25pZnkgZmlsdGVyIHNob3VsZCBkZWVwLWNvbnZlcnQgdG8gTGlxdWlkIHdoZW4gZ2l2ZW4gYW4gQXJyYXkuICgjMzAzMikKICAqIEFwcGx5IGBqc29uaWZ5YCBmaWx0ZXIgdG8gSGFzaGVzIGRlZXBseSBhbmQgZWZmZWN0aXZlbHkgKCMzMDYzKQogICogVXNlIGAxMjcuMC4wLjFgIGFzIGRlZmF1bHQgaG9zdCBpbnN0ZWFkIG9mIGAwLjAuMC4wYCAoIzMwNTMpCiAgKiBJbiB0aGUgY2FzZSB0aGF0IGEgR2VtZmlsZSBkb2VzIG5vdCBleGlzdCwgZW5zdXJlIEpla3lsbCBkb2Vzbid0IGZhaWwgb24gcmVxdWlyaW5nIHRoZSBHZW1maWxlIGdyb3VwICgjMzA2NikKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIEZpeCBhIHR5cG8gaW4gdGhlIGRvYyBibG9jayBmb3IgYEpla3lsbDo6VVJMLmVzY2FwZV9wYXRoYCAoIzMwNTIpCiAgKiBBZGQgaW50ZWdyYXRpb24gdGVzdCBmb3IgYGpla3lsbCBuZXcgLS1ibGFua2AgaW4gVGVzdFVuaXQgKCMyOTEzKQogICogQWRkIHVuaXQgdGVzdCBmb3IgYGpla3lsbCBuZXcgLS1mb3JjZWAgbG9naWMgKCMyOTI5KQogICogVXBkYXRlIG91dGRhdGVkIGNvbW1lbnQgZm9yIGBDb252ZXJ0aWJsZSN0cmFuc2Zvcm1gICgjMjk1NykKICAqIEFkZCBIYWtpcmkgYmFkZ2UgdG8gUkVBRE1FLiAoIzI5NTMpCiAgKiBBZGQgc29tZSBzaW1wbGUgYmVuY2htYXJraW5nIHRvb2xzLiAoIzI5OTMpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBgTk9LT0dJUklfVVNFX1NZU1RFTV9MSUJSQVJJRVM9dHJ1ZWAgKipkZWNyZWFzZXMqKiBpbnN0YWxsYXRpb24gdGltZS4gKCMzMDQwKQogICogQWRkIEZvcm1LZWVwIHRvIHJlc291cmNlcyBhcyBKZWt5bGwgZm9ybSBiYWNrZW5kICgjMzAxMCkKICAqIEZpeGluZyBhIG1pc3Rha2UgaW4gdGhlIG5hbWUgb2YgdGhlIG5ldyBMaXF1aWQgdGFnICgjMjk2OSkKICAqIFVwZGF0ZSBGb250IEF3ZXNvbWUgdG8gdjQuMi4wLiAoIzI4OTgpCiAgKiBGaXggbGluayB0byAjMjg5NSBpbiAyLjQuMCByZWxlYXNlIHBvc3QuICgjMjg5OSkKICAqIEFkZCBCaWcgRm9vdG5vdGVzIGZvciBLcmFtZG93biBwbHVnaW4gdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjkxNikKICAqIFJlbW92ZSB3YXJuaW5nIHJlZ2FyZGluZyBHSFAgdXNlIG9mIHNpbmd1bGFyIHR5cGVzIGZvciBmcm9udCBtYXR0ZXIgZGVmYXVsdHMgKCMyOTE5KQogICogRml4IHF1b3RlIGNoYXJhY3RlciB0eXBvIGluIHNpdGUgZG9jdW1lbnRhdGlvbiBmb3IgdGVtcGxhdGVzICgjMjkxNykKICAqIFBvaW50IExpcXVpZCBsaW5rcyB0byBMaXF1aWTigJlzIEdpdEh1YiB3aWtpICgjMjg4NykKICAqIEFkZCBIVFRQIEJhc2ljIEF1dGggKC5odGFjY2VzcykgcGx1Z2luIHRvIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzI5MzEpCiAgKiAoTWlub3IpIEdyYW1tYXIgJiBgX2NvbmZpZy55bWxgIGZpbGVuYW1lIGZpeGVzICgjMjkxMSkKICAqIEFkZGVkIGBtYXRobWwucmJgIHRvIHRoZSBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMuICgjMjkzNykKICAqIEFkZCBgLS1mb3JjZV9wb2xsaW5nYCB0byB0aGUgbGlzdCBvZiBjb25maWd1cmF0aW9uIG9wdGlvbnMgKCMyOTQzKQogICogRXNjYXBlIHVuaWNvZGUgY2hhcmFjdGVycyBpbiBzaXRlIENTUyAoIzI5MDYpCiAgKiBBZGQgbm90ZSBhYm91dCB1c2luZyB0aGUgZ2l0aHViLXBhZ2VzIGdlbSB2aWEgcGFnZXMuZ2l0aHViLmNvbS92ZXJzaW9ucy5qc29uICgjMjkzOSkKICAqIFVwZGF0ZSB1c2FnZSBkb2N1bWVudGF0aW9uIHRvIHJlZmxlY3QgMi40IGF1dG8tZW5hYmxpbmcgb2YgYC0td2F0Y2hgLiAoIzI5NTQpCiAgKiBBZGQgYC0tc2tpcC1pbml0aWFsLWJ1aWxkYCB0byBjb25maWd1cmF0aW9uIGRvY3MgKCMyOTQ5KQogICogRml4IGEgbWlub3IgdHlwbyBpbiBUZW1wbGF0ZXMgZG9jcyBwYWdlICgjMjk1OSkKICAqIEFkZCBhIGRpdGFhLWRpdGFhIHBsdWdpbiB1bmRlciBPdGhlciBzZWN0aW9uIG9uIHRoZSBQbHVnaW5zIHBhZ2UgKCMyOTY3KQogICogQWRkIGBidWlsZC9zZXJ2ZSAtVmAgb3B0aW9uIHRvIGNvbmZpZ3VyYXRpb24gZG9jdW1lbnRhdGlvbiAoIzI5NDgpCiAgKiBBZGQgJ0pla3lsbCBUd2l0dGVyIFBsdWdpbicgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjk3OSkKICAqIERvY3M6IFVwZGF0ZSBub3JtYWxpemUuY3NzIHRvIHYzLjAuMi4gKCMyOTgxKQogICogRml4IHR5cG8gaW4gQ29udGludW91cyBJbnRlZ3JhdGlvbiBkb2N1bWVudGF0aW9uICgjMjk4NCkKICAqIENsYXJpZnkgYmVoYXZpb3Igb2YgYDpjYXRlZ29yaWVzYCBpbiBwZXJtYWxpbmtzICgjMzAxMSkKCiMjIDIuNC4wIC8gMjAxNC0wOS0wOQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFN1cHBvcnQgYSBuZXcgYHJlbGF0aXZlX2luY2x1ZGVgIHRhZyAoIzI4NzApCiAgKiBBdXRvLWVuYWJsZSB3YXRjaCBvbiAnc2VydmUnICgjMjg1OCkKICAqIFJlbmRlciBMaXF1aWQgaW4gQ29mZmVlU2NyaXB0IGZpbGVzICgjMjgzMCkKICAqIEFycmF5IExpcXVpZCBmaWx0ZXJzOiBgcHVzaGAsIGBwb3BgLCBgdW5zaGlmdGAsIGBzaGlmdGAgKCMyODk1KQogICogQWRkIGA6dGl0bGVgIHRvIGNvbGxlY3Rpb24gVVJMIHRlbXBsYXRlIGZpbGxlcnMgKCMyODY0KQogICogQWRkIHN1cHBvcnQgZm9yIENTViBmaWxlcyBpbiB0aGUgYF9kYXRhYCBkaXJlY3RvcnkgKCMyNzYxKQogICogQWRkIHRoZSBgbmFtZWAgdmFyaWFibGUgdG8gY29sbGVjdGlvbiBwZXJtYWxpbmtzICgjMjc5OSkKICAqIEFkZCBgaW5zcGVjdGAgbGlxdWlkIGZpbHRlci4gKCMyODY3KQogICogQWRkIGEgYHNsdWdpZnlgIExpcXVpZCBmaWx0ZXIgKCMyODgwKQoKIyMjIEJ1ZyBGaXhlcwoKICAqIFVzZSBgSmVreWxsLnNhbml0aXplZF9wYXRoYCB3aGVuIGFkZGluZyBzdGF0aWMgZmlsZXMgdG8gQ29sbGVjdGlvbnMgKCMyODQ5KQogICogRml4IGVuY29kaW5nIG9mIGBtYWluLnNjc3NgIGluIHNpdGUgdGVtcGxhdGUgKCMyNzcxKQogICogRml4IG9yaWVudGF0aW9uIGJ1Z3MgaW4gZGVmYXVsdCBzaXRlIHRlbXBsYXRlICgjMjg2MikKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIFVwZGF0ZSBzaW1wbGVjb3YgZ2VtIHRvIDAuOSAoIzI3NDgpCiAgKiBSZW1vdmUgYGRvY3MvYCBkaXIgKCMyNzY4KQogICogYWRkIGNsYXNzIGA8PCBzZWxmYCBpZGlvbSB0byBgTmV3YCBjb21tYW5kICgjMjgxNykKICAqIEFsbG93IFRyYXZpcyB0byAncGFyYWxsZWxpemUnIG91ciB0ZXN0cyAoIzI4NTkpCiAgKiBGaXggdGVzdCBmb3IgTGlxdWlkIHJlbmRlcmluZyBpbiBTYXNzICgjMjg1NikKICAqIEZpeGluZyAidmVydHljYWwiIHR5cG8gaW4gc2l0ZSB0ZW1wbGF0ZSdzIGBfYmFzZS5zY3NzYCAoIzI4ODkpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBEb2N1bWVudCB0aGUgYG5hbWVgIHZhcmlhYmxlIGZvciBjb2xsZWN0aW9uIHBlcm1hbGlua3MgKCMyODI5KQogICogQWRkcyBpbmZvIGFib3V0IGluc3RhbGxpbmcgamVreWxsIGluIGN1cnJlbnQgZGlyICgjMjgzOSkKICAqIFJlbW92ZSBkZXByZWNhdGVkIGBqZWt5bGwtcHJvamVjdGxpc3RgIHBsdWdpbiBmcm9tIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzI3NDIpCiAgKiBSZW1vdmUgdGFnIHBsdWdpbnMgdGhhdCBhcmUgYnVpbHQgaW4gdG8gSmVreWxsICgjMjc1MSkKICAqIEFkZCBgbWFya2Rvd24td3JpdGVyYCBwYWNrYWdlIGZvciBBdG9tIEVkaXRvciB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMyNzYzKQogICogRml4IHR5cG8gaW4gc2l0ZSBkb2N1bWVudGF0aW9uIGZvciBjb2xsZWN0aW9ucyAoIzI3NjQpCiAgKiBGaXggbWlub3IgdHlwbyBvbiBwbHVnaW5zIGRvY3MgcGFnZSAoIzI3NjUpCiAgKiBSZXBsYWNlIG1hcmtkb3duIHdpdGggSFRNTCBpbiBgc2Fzc19kaXJgIG5vdGUgb24gYXNzZXRzIHBhZ2UgKCMyNzkxKQogICogRml4ZWQgImJlbGxvdyIgdHlwbyBpbiBkYXRhZmlsZXMgZG9jcyAoIzI4NzkpCiAgKiBGaXggY29kZS9tYXJrZG93biBpc3N1ZSBpbiBkb2N1bWVudGF0aW9uIGZvciB2YXJpYWJsZXMgKCMyODc3KQogICogUmVtb3ZlIEdvb2QgSW5jbHVkZSB0aGlyZC1wYXJ0eSBwbHVnaW4gZnJvbSBwbHVnaW5zIHBhZ2UgKCMyODgxKQogICogQWRkIHNvbWUgbW9yZSBkb2NzIG9uIGBpbmNsdWRlX3JlbGF0aXZlYCAoIzI4ODQpCgojIyAyLjMuMCAvIDIwMTQtMDgtMTAKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBBbGxvdyBDb252ZXJ0aWJsZXMgdG8gYmUgY29udmVydGVkIGJ5ID49IDEgY29udmVydGVycyAoIzI3MDQpCiAgKiBBbGxvdyBTYXNzIGZpbGVzIHRvIGJlIHJlbmRlcmVkIGluIExpcXVpZCwgYnV0IG5ldmVyIHBsYWNlIHRoZW0gaW4gbGF5b3V0cy4gKCMyNzMzKQogICogQWRkIGBqZWt5bGwgaGVscGAgY29tbWFuZCAoIzI3MDcpCiAgKiBVc2UgYC5zY3NzYCBmb3IgYHNpdGVfdGVtcGxhdGVgIHN0eWxlcy4gKCMyNjY3KQogICogRG9uJ3QgcmVxdWlyZSB0aGUgYHNjb3BlYCBrZXkgaW4gZnJvbnQgbWF0dGVyIGRlZmF1bHRzICgjMjY1OSkKICAqIE5vIGxvbmdlciBzZXQgYHBlcm1hbGluazogcHJldHR5YCBpbiB0aGUgYF9jb25maWcueW1sYCBmb3IgdGhlIHNpdGUgdGVtcGxhdGUgKCMyNjgwKQogICogUmV3b3JrIHNpdGUgdGVtcGxhdGUgdG8gdXRpbGl6ZSBTYXNzICgjMjY4NykKICAqIE5vdGlmeSB0aGUgdXNlciB3aGVuIGF1dG8tcmVnZW5lcmF0aW9uIGlzIGRpc2FibGVkLiAoIzI2OTYpCiAgKiBBbGxvdyBwYXJ0aWFsIHZhcmlhYmxlcyBpbiBpbmNsdWRlIHRhZyBmaWxlbmFtZSBhcmd1bWVudCAoIzI2OTMpCiAgKiBNb3ZlIGluc3RhbmNlcyBvZiBgVGltZS5wYXJzZWAgaW50byBhIFV0aWxzIG1ldGhvZCAoIzI2ODIpCiAgKiBJZ25vcmUgc3ViZm9sZGVycyBpbiB0aGUgYF9wb3N0c2AgZm9sZGVyICgjMjcwNSkgUkVWRVJUUyAoIzI2MzMpCiAgKiBGcm9udCBNYXR0ZXIgZGVmYXVsdCB0eXBlcyBzaG91bGQgYWx3YXlzIGJlIHBsdXJhbGl6ZWQgKCMyNzMyKQogICogUmVhZCBpbiBzdGF0aWMgZmlsZXMgaW50byBgY29sbGVjdGlvbi5maWxlc2AgYXMgYFN0YXRpY0ZpbGVgcyAoIzI3MzcpCiAgKiBBZGQgYHNhc3NpZnlgIGFuZCBgc2Nzc2lmeWAgTGlxdWlkIGZpbHRlcnMgKCMyNzM5KQogICogUmVwbGFjZSBgY2xhc3NpZmllcmAgZ2VtIHdpdGggYGNsYXNzaWZpZXItcmVib3JuYCAoIzI3MjEpCgojIyMgQnVnIEZpeGVzCgogICogVXNlIG9ubHkgdGhlIGxhc3QgZXh0bmFtZSB3aGVuIG11bHRpcGxlIGNvbnZlcnRlcnMgZXhpc3QgKCMyNzIyKQogICogQ2FsbCBgI3RvX2xpcXVpZGAgYmVmb3JlIGNhbGxpbmcgYCN0b19qc29uYCBpbiBqc29uaWZ5IGZpbHRlciAoIzI3MjkpCiAgKiBVc2Ugbm9uIHBhZGRlZCBjb25maWcgaW4gYHN0cmZ0aW1lYCB0byBhdm9pZCBwYXJzZSBzdHJpbmcgdHdpY2UgKCMyNjczKQogICogUmVwbGFjZSBkZXByZWNhdGVkIFJ1YnkgbWV0aG9kcyB3aXRoIHVuZGVwcmVjYXRlZCBvbmVzICgjMjY2NCkKICAqIENhdGNoIGVycm9ycyB3aGVuIHBhcnNpbmcgUG9zdCBgZGF0ZWAgZnJvbnQgbWF0dGVyIHZhbHVlICYgcHJvZHVjZSBuaWNlIGVycm9yIG1lc3NhZ2UgKCMyNjQ5KQogICogQWxsb3cgc3RhdGljIGZpbGVzIGluIENvbGxlY3Rpb25zICgjMjYxNSkKICAqIEZpeGVkIHR5cG8gaW4gYERlcHJlY2F0b3IjZ3JhY2VmdWxseV9yZXF1aXJlYCBlcnJvciBtZXNzYWdlICgjMjY5NCkKICAqIFJlbW92ZSBwcmVlbXB0aXZlIGxvYWRpbmcgb2YgdGhlICdjbGFzc2lmaWVyJyBnZW0uICgjMjY5NykKICAqIFVzZSBjYXNlLWluc2Vuc2l0aXZlIGNoZWNraW5nIGZvciB0aGUgZmlsZSBleHRlbnNpb25zIHdoZW4gbG9hZGluZyBjb25maWcgZmlsZXMgKCMyNzE4KQogICogV2hlbiBSZWFkaW5nIERvY3VtZW50cywgUmVzcGVjdCBgZW5jb2RpbmdgIE9wdGlvbiAoIzI3MjApCiAgKiBSZWZhY3RvciBiYXNlZCBvbiBqZWt5bGwtd2F0Y2ggY2xlYW4tdXAuICgjMjcxNikKICAqIGBEb2N1bWVudCN0b19zYCBzaG91bGQgcHJvZHVjZSBqdXN0IHRoZSBjb250ZW50IG9mIHRoZSBkb2N1bWVudCAoIzI3MzEpCgojIyMgRGV2ZWxvcG1lbnQgRml4ZXMKCiAgKiBPbmx5IGluY2x1ZGUgbGliIGZpbGVzIGluIHRoZSBnZW0gKCMyNjcxKQogICogRml4IGBnaXQgZGlmZmAgY29tbWFuZCBpbiBgcHJvb2ZgIHNjcmlwdCAoIzI2NzIpCiAgKiBNYWtlIGRlZmF1bHQgcmFrZSB0YXNrIGEgbXVsdGl0YXNrIHNvIHRlc3RzIHJ1biBpbiBwYXJhbGxlbCAoIzI3MzUpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBVc2UgU2FzcyBhbmQgYSBEb2NzIENvbGxlY3Rpb24gKCMyNjUxKQogICogQWRkIGBsYXRlc3RfdmVyc2lvbi50eHRgIGZpbGUgdG8gdGhlIHNpdGUgKCMyNzQwKQogICogQmUgbW9yZSBhbWJpZ3VvdXMgYWJvdXQgYHBhZ2UuY29udGVudGAuIEJ1dCBtb3JlIHRyYW5zcGFyZW50LiAoIzI1MjIpCiAgKiBTdHJlYW1saW5pbmcgZnJvbnQgbWF0dGVyIHdvcmRpbmcgKGluc3RlYWQgb2YgZnJvbnQtbWF0dGVyL2Zyb250bWF0dGVyKSAoIzI2NzQpCiAgKiBBZGQgbm90ZSB0aGF0IHNvdXJjZSBkaXJlY3RvcnkgY2Fubm90IGJlIG1vZGlmaWVkIGluIEdpdEh1YiBQYWdlcyAoIzI2NjkpCiAgKiBGaXggbGlua3MgZnJvbSAjMjY2OSB0byBiZSBhY3R1YWwgSFRNTC4gV2hvb3BzLiAoIzI2NzkpCiAgKiBBZGQgbGluayB0byBgamVreWxsLXNsaW1gIGluIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzI2ODkpCiAgKiBBZGQgQmFycnkgQ2xhcmsncyBTbWFzaGluZyBNYWdhemluZSB0dXRvcmlhbCB0byByZXNvdXJjZXMgcGFnZSAoIzI2ODgpCiAgKiBSZW9yZ2FuaXplIGFuZCB1cGRhdGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIHNldHRpbmdzICgjMjQ1NikKICAqIEZpeGluZyBpbmRlbnRhdGlvbiBpbiB0aGUgY29uZmlndXJhdGlvbiBkb2NzIGFib3V0IFJlZGNhcnBldCBleHRzICgjMjcxNykKICAqIFVzZSBgbnVsbGAgaW4gWUFNTCBpbnN0ZWFkIG9mIGBuaWxgIGluIGRlZmF1bHQgY29uZmlnIGxpc3QgKCMyNzE5KQogICogRml4IHR5cG8gaW4gQ29udGludW91cyBJbnRlZ3JhdGlvbiBkb2NzICgjMjcwOCkKCiMjIDIuMi4wIC8gMjAxNC0wNy0yOQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFRocm93IGEgd2FybmluZyBpZiB0aGUgc3BlY2lmaWVkIGxheW91dCBkb2VzIG5vdCBleGlzdCAoIzI2MjApCiAgKiBXaGl0ZWxpc3QgUHlnbWVudHMgb3B0aW9ucyBpbiBzYWZlIG1vZGUgKCMyNjQyKQoKIyMjIEJ1ZyBGaXhlcwoKICAqIFJlbW92ZSB1bm5lY2Vzc2FyeSBgSmVreWxsOjpUYWdzOjpJbmNsdWRlVGFnI2JsYW5rP2AgbWV0aG9kICgjMjYyNSkKICAqIENhdGVnb3JpZXMgaW4gdGhlIHBhdGggYXJlIGlnbm9yZWQgKCMyNjMzKQoKIyMjIERldmVsb3BtZW50IEZpeGVzCgogICogUmVmYWN0b3JpbmcgRXJyb3JzICYgUmVxdWlyZXMgb2YgVGhpcmQtUGFydHkgc3R1ZmYgKCMyNTkxKQogICogQWRkIGZ1cnRoZXIgdGVzdHMgZm9yIGNhdGVnb3JpZXMgKCMyNTg0KQogICogUHJvb2Ygc2l0ZSB3aXRoIGh0bWwtcHJvb2ZlciBvbiBjaGFuZ2UgKCMyNjA1KQogICogRml4IHVwIGJ1ZyBpbiAjMjYwNSB3aGljaCBjYXVzZWQgcHJvb2ZpbmcgdGhlIHNpdGUgbm90IHRvIGZ1bmN0aW9uICgjMjYwOCkKICAqIFVzZSBgYnVuZGxlIGV4ZWNgIGluIGBzY3JpcHQvcHJvb2ZgICgjMjYxMCkKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIFVwZGF0ZSBLcmFtZG93biB1cmxzICgjMjU4OCkKICAqIEFkZCBgSmVreWxsOjpBdXRvbGlua0VtYWlsYCBhbmQgYEpla3lsbDo6R2l0TWV0YWRhdGFgIHRvIHRoZSBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMyNTk2KQogICogRml4IGEgYnVuY2ggb2YgYnJva2VuIGxpbmtzIGluIHRoZSBzaXRlICgjMjYwMSkKICAqIFJlcGxhY2UgZGVhZCBsaW5rcyB3aXRoIHdvcmtpbmcgbGlua3MgKCMyNjExKQogICogQWRkIGpla3lsbC1ob29rIHRvIGRlcGxveW1lbnQgbWV0aG9kcyAoIzI2MTcpCiAgKiBBZGRlZCBrcmFtZG93bi13aXRoLXB5Z21lbnRzIHBsdWdpbiB0byB0aGUgbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjYyMykKICAqIFVwZGF0ZSBvdXRkYXRlZCAiRXh0cmFzIiBwYWdlIGFuZCByZW1vdmUgZHVwbGljYXRlIGRvY3VtZW50YXRpb24gKCMyNjIyKQogICogQWRkIGNvMiBwbHVnaW4gdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjYzOSkKICAqIEF0dGVtcHQgdG8gY2xhcmlmeSB0aGUgd2F5IFNhc3MgaW1wb3J0cyBoYXBwZW4gKCMyNjQyKQoKIyMgMi4xLjEgLyAyMDE0LTA3LTAxCgojIyMgQnVnIEZpeGVzCgogICogUGF0Y2ggcmVhZCB2dWxuZXJhYmlsaXRpZXMgZm9yIGRhdGEgJiBjb25maXJtIG5vbmUgZm9yIGxheW91dHMgKCMyNTYzKQogICogVXBkYXRlIE1hcnVrdSBkZXBlbmRlbmN5IHRvIGFsbG93IHVzZSBvZiB0aGUgbGF0ZXN0IHZlcnNpb24gKCMyNTc2KQogICogUmVtb3ZlIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgZnJvbSBkb2N1bWVudCBVUkwgdG8gcHJldmVudCBzdGFsZSB1cmxzICgjMjU3NSkKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIEFkZCB2ZXJ0aWNhbCBtYXJnaW4gdG8gYGhpZ2hsaWdodGAgdG8gc2VwYXJhdGUgY29kZSBibG9ja3MgKCMyNTU4KQogICogQWRkIGBodG1sX3BhZ2VzYCB0byBWYXJpYWJsZXMgZG9jcyAoIzI1NjcpCiAgKiBGaXhlZCBicm9rZW4gbGluayB0byBQZXJtYWxpbmtzIHBhZ2UgKCMyNTcyKQogICogVXBkYXRlIGxpbmsgdG8gV2luZG93cyBpbnN0YWxsYXRpb24gZ3VpZGUgKCMyNTc4KQoKIyMgMi4xLjAgLyAyMDE0LTA2LTI4CgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogQnVtcCB0byB0aGUgbGF0ZXN0IExpcXVpZCB2ZXJzaW9uLCAyLjYuMSAoIzI0OTUpCiAgKiBBZGQgc3VwcG9ydCBmb3IgSlNPTiBmaWxlcyBpbiB0aGUgYF9kYXRhYCBkaXJlY3RvcnkgKCMyMzY5KQogICogQWxsb3cgc3ViY2xhc3NlcyB0byBvdmVycmlkZSBgRVhDRVJQVF9BVFRSSUJVVEVTX0ZPUl9MSVFVSURgICgjMjQwOCkKICAqIEFkZCBgSmVreWxsLmVudmAgYW5kIGBqZWt5bGwuZW52aXJvbm1lbnRgICh0aGUgTGlxdWlkIHZhcikgKCMyNDE3KQogICogVXNlIGBfY29uZmlnLnlhbWxgIG9yIGBfY29uZmlnLnltbGAgKGAueW1sYCB0YWtlcyBwcmVjZWRlbmNlKSAoIzI0MDYpCiAgKiBPdmVycmlkZSBjb2xsZWN0aW9uIHVybCB0ZW1wbGF0ZSAoIzI0MTgpCiAgKiBBbGxvdyBzdWJkaXJlY3RvcmllcyBpbiBgX2RhdGFgICgjMjM5NSkKICAqIEV4dHJhY3QgUGFnaW5hdGlvbiBHZW5lcmF0b3IgaW50byBnZW06IGBqZWt5bGwtcGFnaW5hdGVgICgjMjQ1NSkKICAqIFV0aWxpemUgYGRhdGVfdG9fcmZjODIyYCBmaWx0ZXIgaW4gc2l0ZSB0ZW1wbGF0ZSAoIzI0MzcpCiAgKiBBZGQgY2F0ZWdvcmllcywgbGFzdCBidWlsZCBkYXRldGltZSwgYW5kIGdlbmVyYXRvciB0byBzaXRlIHRlbXBsYXRlIGZlZWQgKCMyNDM4KQogICogQ29uZmlndXJhYmxlLCByZXBsYWNlYWJsZSBMb2dnZXItY29tcGxpYW50IGxvZ2dlciAoIzI0NDQpCiAgKiBFeHRyYWN0IGBnaXN0YCB0YWcgaW50byBhIHNlcGFyYXRlIGdlbSAoIzI0NjkpCiAgKiBBZGQgYGNvbGxlY3Rpb25gIGF0dHJpYnV0ZSB0byBgRG9jdW1lbnQjdG9fbGlxdWlkYCB0byBhY2Nlc3MgdGhlIGRvY3VtZW50J3MgY29sbGVjdGlvbiBsYWJlbC4gKCMyNDM2KQogICogVXBncmFkZSBsaXN0ZW4gdG8gYDIuNy42IDw9IHggPCAzLjAuMGAgKCMyNDkyKQogICogQWxsb3cgY29uZmlndXJhdGlvbiBvZiBkaWZmZXJlbnQgVHdpdHRlciBhbmQgR2l0SHViIHVzZXJuYW1lcyBpbiBzaXRlIHRlbXBsYXRlICgjMjQ4NSkKICAqIEJ1bXAgUHlnbWVudHMgdG8gdjAuNi4wICgjMjUwNCkKICAqIEZyb250IG1hdHRlciBkZWZhdWx0cyBmb3IgZG9jdW1lbnRzIGluIGNvbGxlY3Rpb25zICgjMjQxOSkKICAqIEluY2x1ZGUgZmlsZXMgd2l0aCBhIHVybCB3aGljaCBlbmRzIGluIGAvYCBpbiB0aGUgYHNpdGUuaHRtbF9wYWdlc2AgbGlzdCAoIzI1MjQpCiAgKiBNYWtlIGBoaWdobGlnaHRgIHRhZyB1c2UgYGxhbmd1YWdlLWAgcHJlZml4IGluIENTUyBjbGFzcyAoIzI1MTEpCiAgKiBMb29rdXAgaXRlbSBwcm9wZXJ0eSB2aWEgYGl0ZW0jdG9fbGlxdWlkYCBiZWZvcmUgYCNkYXRhYCBvciBgI1tdYCBpbiBmaWx0ZXJzICgjMjQ5MykKICAqIFNraXAgaW5pdGlhbCBidWlsZCBvZiBzaXRlIG9uIHNlcnZlIHdpdGggZmxhZyAoIzI0NzcpCiAgKiBBZGQgc3VwcG9ydCBmb3IgYGhsX2xpbmVzYCBpbiBgaGlnaGxpZ2h0YCB0YWcgKCMyNTMyKQogICogU3Bpa2Ugb3V0IGAtLXdhdGNoYCBmbGFnIGludG8gYSBzZXBhcmF0ZSBnZW0gKCMyNTUwKQoKIyMjIEJ1ZyBGaXhlcwoKICAqIExpcXVpZCBgc29ydGAgZmlsdGVyIHNob3VsZCBzb3J0IGV2ZW4gaWYgb25lIG9mIHRoZSB2YWx1ZXMgaXMgYG5pbGAgKCMyMzQ1KQogICogUmVtb3ZlIHBhZGRpbmcgb24gYHByZSBjb2RlYCBpbiB0aGUgc2l0ZSB0ZW1wbGF0ZSBDU1MgKCMyMzgzKQogICogU2V0IGBsb2dfbGV2ZWxgIGVhcmxpZXIgdG8gc2lsZW5jZSBpbmZvIGxldmVsIGNvbmZpZ3VyYXRpb24gb3V0cHV0ICgjMjM5MykKICAqIE9ubHkgbGlzdCBwYWdlcyB3aGljaCBoYXZlIGB0aXRsZWAgaW4gc2l0ZSB0ZW1wbGF0ZSAoIzI0MTEpCiAgKiBBY2NlcHQgYE51bWVyaWNgIHZhbHVlcyBmb3IgZGF0ZXMsIG5vdCBgTnVtYmVyYCB2YWx1ZXMgKCMyMzc3KQogICogUHJldmVudCBjb2RlIGZyb20gb3ZlcmZsb3dpbmcgY29udGFpbmVyIGluIHNpdGUgdGVtcGxhdGUgKCMyNDI5KQogICogRW5jb2RlIFVSTHMgaW4gVVRGLTggd2hlbiBlc2NhcGluZyBhbmQgdW5lc2NhcGluZyAoIzI0MjApCiAgKiBObyBMYXlvdXRzIG9yIExpcXVpZCBmb3IgQXNzZXQgRmlsZXMgKCMyNDMxKQogICogQWxsb3cgZnJvbnQgbWF0dGVyIGRlZmF1bHRzIHRvIHNldCBwb3N0IGNhdGVnb3JpZXMgKCMyMzczKQogICogRml4IGNvbW1hbmQgaW4gc3ViY29tbWFuZCBkZXByZWNhdGlvbiB3YXJuaW5nICgjMjQ1NykKICAqIEtlZXAgYWxsIHBhcmVudCBkaXJlY3RvcmllcyBvZiBmaWxlcy9kaXJzIGluIGBrZWVwX2ZpbGVzYCAoIzI0NTgpCiAgKiBXaGVuIHVzaW5nIFJlZENhcnBldCBhbmQgUm91Z2Ugd2l0aG91dCBSb3VnZSBpbnN0YWxsZWQsIGZpeGVkIGVycm9uZW91cyBlcnJvciB3aGljaCBzdGF0ZWQgdGhhdCByZWRjYXJwZXQgd2FzIG1pc3NpbmcsIG5vdCByb3VnZS4gKCMyNDY0KQogICogSWdub3JlICphbGwqIGRpcmVjdG9yaWVzIGFuZCBmaWxlcyB0aGF0IG1lcml0IGl0IG9uIGF1dG8tZ2VuZXJhdGlvbiAoIzI0NTkpCiAgKiBCZWZvcmUgY29weWluZyBmaWxlLCBleHBsaWNpdGx5IHJlbW92ZSB0aGUgb2xkIG9uZSAoIzI1MzUpCiAgKiBNZXJnZSBmaWxlIHN5c3RlbSBjYXRlZ29yaWVzIHdpdGggY2F0ZWdvcmllcyBmcm9tIFlBTUwuICgjMjUzMSkKICAqIERlZXAgbWVyZ2UgZnJvbnQgbWF0dGVyIGRlZmF1bHRzICgjMjQ5MCkKICAqIEVuc3VyZSBleGNsdWRlIGFuZCBpbmNsdWRlIGFycmF5cyBhcmUgYXJyYXlzIG9mIHN0cmluZ3MgKCMyNTQyKQogICogQWxsb3cgY29sbGVjdGlvbnMgdG8gaGF2ZSBkb3RzIGluIHRoZWlyIGZpbGVuYW1lcyAoIzI1NTIpCiAgKiBDb2xsZWN0aW9ucyBzaG91bGRuJ3QgdHJ5IHRvIHJlYWQgaW4gZGlyZWN0b3JpZXMgYXMgZmlsZXMgKCMyNTUyKQogICogQmUgcXVpZXQgdmVyeSBxdWlja2x5LiAoIzI1MjApCgojIyMgRGV2ZWxvcG1lbnQgRml4ZXMKCiAgKiBUZXN0IFJ1YnkgMi4xLjIgaW5zdGVhZCBvZiAyLjEuMSAoIzIzNzQpCiAgKiBBZGQgdGVzdCBmb3Igc29ydGluZyBVVEYtOCBjaGFyYWN0ZXJzICgjMjM4NCkKICAqIFVzZSBgaHR0cHNgIGZvciBHaXRIdWIgbGlua3MgaW4gZG9jdW1lbnRhdGlvbiAoIzI0NzApCiAgKiBSZW1vdmUgY292ZXJhZ2UgcmVwb3J0aW5nIHdpdGggQ292ZXJhbGxzICgjMjQ5NCkKICAqIEZpeCBhIGJpdCBvZiBtaXNzaW5nIFRvbURvYyB0byBgSmVreWxsOjpDb21tYW5kczo6QnVpbGQjYnVpbGRgICgjMjU1NCkKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIFNldCBgdGltZXpvbmVgIHRvIGBBbWVyaWNhL0xvc19BbmdlbGVzYCAoIzIzOTQpCiAgKiBJbXByb3ZlIEphdmFTY3JpcHQgaW4gYGFuY2hvcl9saW5rcy5odG1sYCAoIzIzNjgpCiAgKiBSZW1vdmUgbm90ZSBvbiBRdWlja3N0YXJ0IHBhZ2UgYWJvdXQgZGVmYXVsdCBtYXJrZG93biBjb252ZXJ0ZXIgKCMyMzg3KQogICogUmVtb3ZlIGJyb2tlbiBsaW5rIGluIGV4dHJhcy5tZCB0byBhIE1hcnVrdSBmb3JrICgjMjQwMSkKICAqIFVwZGF0ZSBGb250IEF3ZXNvbWUgdG8gdjQuMS4wLiAoIzI0MTApCiAgKiBGaXggYnJva2VuIGxpbmsgb24gSW5zdGFsbGF0aW9uIHBhZ2UgdG8gVGVtcGxhdGVzIHBhZ2UgKCMyNDIxKQogICogUHJldmVudCB0YWJsZSBmcm9tIGV4dGVuZGluZyBwYXJlbnQgd2lkdGggaW4gcGVybWFsaW5rIHN0eWxlIHRhYmxlICgjMjQyNCkKICAqIEFkZCBjb2xsZWN0aW9ucyB0byBpbmZvIGFib3V0IHBhZ2luYXRpb24gc3VwcG9ydCAoIzIzODkpCiAgKiBBZGQgYGpla3lsbF9naXRodWJfc2FtcGxlYCBwbHVnaW4gdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjQ2MykKICAqIENsYXJpZnkgZG9jdW1lbnRhdGlvbiBhcm91bmQgZnJvbnQgbWF0dGVyIGRlZmF1bHRzIGFuZCBhZGQgZGV0YWlscyBhYm91dCBkZWZhdWx0cyBmb3IgY29sbGVjdGlvbnMuICgjMjQzOSkKICAqIEFkZCBKZWt5bGwgUHJvamVjdCBWZXJzaW9uIFRhZyB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMyNDY4KQogICogVXNlIGBodHRwc2AgZm9yIEdpdEh1YiBsaW5rcyBhY3Jvc3Mgd2hvbGUgc2l0ZSAoIzI0NzApCiAgKiBBZGQgU3RpY2tlck11bGUgKyBKZWt5bGwgcG9zdCAoIzI0NzYpCiAgKiBBZGQgSmVreWxsIEFzc2V0IFBpcGVsaW5lIFJlYm9ybiB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMyNDc5KQogICogQWRkIGxpbmsgdG8gamVreWxsLWNvbXByZXNzLWh0bWwgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjUxNCkKICAqIEFkZCBQaXdpZ28gR2FsbGVyeSB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMyNTI2KQogICogU2V0IGBzaG93X2RyYWZ0c2AgdG8gYGZhbHNlYCBpbiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gbGlzdGluZyAoIzI1MzYpCiAgKiBQcm92aWRlIGFuIHVwZGF0ZWQgbGluayBmb3IgV2luZG93cyBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zICgjMjU0NCkKICAqIFJlbW92ZSBgdXJsYCBmcm9tIGNvbmZpZ3VyYXRpb24gZG9jcyAoIzI1NDcpCiAgKiBEb2N1bWVudGF0aW9uIGZvciBDb250aW51b3VzIEludGVncmF0aW9uIGZvciB5b3VyIEpla3lsbCBTaXRlICgjMjQzMikKCiMjIDIuMC4zIC8gMjAxNC0wNS0wOAoKIyMjIEJ1ZyBGaXhlcwoKICAqIFByb3Blcmx5IHByZWZpeCBsaW5rcyBpbiBzaXRlIHRlbXBsYXRlIHdpdGggVVJMIG9yIGJhc2V1cmwgZGVwZW5kaW5nIHVwb24gbmVlZC4gKCMyMzE5KQogICogVXBkYXRlIGdpc3QgdGFnIGNvbW1lbnRzIGFuZCBlcnJvciBtZXNzYWdlIHRvIHJlcXVpcmUgdXNlcm5hbWUgKCMyMzI2KQogICogRml4IGBwZXJtYWxpbmtgIHNldHRpbmcgaW4gc2l0ZSB0ZW1wbGF0ZSAoIzIzMzEpCiAgKiBEb24ndCBmYWlsIGlmIGFueSBvZiB0aGUgcGF0aCBvYmplY3RzIGFyZSBuaWwgKCMyMzI1KQogICogSW5zdGFudGlhdGUgYWxsIGRlc2NlbmRhbnRzIGZvciBjb252ZXJ0ZXJzIGFuZCBnZW5lcmF0b3JzLCBub3QganVzdCBkaXJlY3Qgc3ViY2xhc3NlcyAoIzIzMzQpCiAgKiBSZXBsYWNlIGFsbCBpbnN0YW5jZXMgb2YgYHNpdGUubmFtZWAgd2l0aCBgc2l0ZS50aXRsZWAgaW4gc2l0ZSB0ZW1wbGF0ZSAoIzIzMjQpCiAgKiBgSmVreWxsOjpGaWx0ZXJzI3RpbWVgIG5vdyBhY2NlcHRzIFVOSVggdGltZXN0YW1wcyBpbiBzdHJpbmcgb3IgbnVtYmVyIGZvcm0gKCMyMzM5KQogICogVXNlIGBpdGVtX3Byb3BlcnR5YCBmb3IgYHdoZXJlYCBmaWx0ZXIgc28gaXQgZG9lc24ndCBicmVhayBvbiBjb2xsZWN0aW9ucyAoIzIzNTkpCiAgKiBSZXNjdWUgZXJyb3JzIHRocm93biBzbyBgLS13YXRjaGAgZG9lc24ndCBmYWlsICgjMjM2NCkKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIEFkZCBtaXNzaW5nICJhcyIgdG8gYXNzZXRzIGRvY3MgcGFnZSAoIzIzMzcpCiAgKiBVcGRhdGUgZG9jcyB0byByZWZsZWN0IG5ldyBgYmFzZXVybGAgZGVmYXVsdCAoIzIzNDEpCiAgKiBBZGQgbGlua3MgdG8gaGVhZGVycyB3aG8gaGF2ZSBhbiBJRC4gKCMyMzQyKQogICogVXNlIHN5bWJvbCBpbnN0ZWFkIG9mIEhUTUwgbnVtYmVyIGluIGB1cGdyYWRpbmcubWRgICgjMjM1MSkKICAqIEZpeCBsaW5rIHRvIGZyb250IG1hdHRlciBkZWZhdWx0cyBkb2NzICgjMjM1MykKICAqIEZpeCBmb3IgYEhpc3RvcnkubWFya2Rvd25gIGluIG9yZGVyIHRvIGZpeCBoaXN0b3J5IHBhZ2UgaW4gZG9jcyAoIzIzNjMpCgojIyAyLjAuMiAvIDIwMTQtMDUtMDcKCiMjIyBCdWcgRml4ZXMKCiAgKiBDb3JyZWN0IHVzZSBvZiBgdXJsYCBhbmQgYGJhc2V1cmxgIGluIHRoZSBzaXRlIHRlbXBsYXRlLiAoIzIzMTcpCiAgKiBEZWZhdWx0IGBiYXNldXJsYCB0byBgIiJgICgjMjMxNykKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIENvcnJlY3QgZG9jcyBmb3IgdGhlIGBnaXN0YCBwbHVnaW4gc28gaXQgYWx3YXlzIGluY2x1ZGVzIHRoZSB1c2VybmFtZS4gKCMyMzE0KQogICogQ2xhcmlmeSBuZXcgKGRlZmF1bHRzLCBgd2hlcmVgIGZpbHRlcikgZmVhdHVyZXMgaW4gZG9jcyAoIzIzMTYpCgojIyAyLjAuMSAvIDIwMTQtMDUtMDYKCiMjIyBCdWcgRml4ZXMKCiAgKiBSZXF1aXJlIGBrcmFtZG93bmAgZ2VtIGluc3RlYWQgb2YgYG1hcnVrdWAgZ2VtCgojIyAyLjAuMCAvIDIwMTQtMDUtMDYKCiMjIyBNYWpvciBFbmhhbmNlbWVudHMKCiAgKiBBZGQgIkNvbGxlY3Rpb25zIiBmZWF0dXJlICgjMjE5OSkKICAqIEFkZCBnZW0tYmFzZWQgcGx1Z2luIHdoaXRlbGlzdCB0byBzYWZlIG1vZGUgKCMxNjU3KQogICogUmVwbGFjZSB0aGUgY29tbWFuZGVyIGNvbW1hbmQgbGluZSBwYXJzZXIgd2l0aCBhIG1vcmUgcm9idXN0IHNvbHV0aW9uIGZvciBvdXIgbmVlZHMgY2FsbGVkIGBtZXJjZW5hcnlgICgjMTcwNikKICAqIFJlbW92ZSBzdXBwb3J0IGZvciBSdWJ5IDEuOC54ICgjMTc4MCkKICAqIE1vdmUgdG8gamVreWxsL2pla3lsbCBmcm9tIG1vam9tYm8vamVreWxsICgjMTgxNykKICAqIEFsbG93IGN1c3RvbSBtYXJrZG93biBwcm9jZXNzb3JzICgjMTg3MikKICAqIFByb3ZpZGUgc3VwcG9ydCBmb3IgdGhlIFJvdWdlIHN5bnRheCBoaWdobGlnaHRlciAoIzE4NTkpCiAgKiBQcm92aWRlIHN1cHBvcnQgZm9yIFNhc3MgKCMxOTMyKQogICogUHJvdmlkZSBhIDMwMCUgaW1wcm92ZW1lbnQgd2hlbiBnZW5lcmF0aW5nIHNpdGVzIHRoYXQgdXNlIGBQb3N0I25leHRgIG9yIGBQb3N0I3ByZXZpb3VzYCAoIzE5ODMpCiAgKiBQcm92aWRlIHN1cHBvcnQgZm9yIENvZmZlZVNjcmlwdCAoIzE5OTEpCiAgKiBSZXBsYWNlIE1hcnVrdSB3aXRoIEtyYW1kb3duIGFzIERlZmF1bHQgTWFya2Rvd24gUHJvY2Vzc29yICgjMTk4OCkKICAqIEV4cG9zZSBgc2l0ZS5zdGF0aWNfZmlsZXNgIHRvIExpcXVpZCAoIzIwNzUpCiAgKiBDb21wbGV0ZSByZWRlc2lnbiBvZiB0aGUgdGVtcGxhdGUgc2l0ZSBnZW5lcmF0ZWQgYnkgYGpla3lsbCBuZXdgICgjMjA1MCkKICAqIFVwZGF0ZSBMaXN0ZW4gZnJvbSAxLnggdG8gMi54ICgjMjA5NykKICAqIEZyb250IG1hdHRlciBkZWZhdWx0cyAoIzIyMDUpCiAgKiBEZXByZWNhdGUgYHJlbGF0aXZlX3Blcm1hbGlua3NgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIChkZWZhdWx0IHRvIGBmYWxzZWApICgjMjMwNykKICAqIEV4Y2x1ZGUgZmlsZXMgYmFzZWQgb24gcHJlZml4IGFzIHdlbGwgYXMgYGZubWF0Y2g/YCAoIzIzMDMpCgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogTW92ZSB0aGUgRW50cnlGaWx0ZXIgY2xhc3MgaW50byB0aGUgSmVreWxsIG1vZHVsZSB0byBhdm9pZCBwb2xsdXRpbmcgdGhlIGdsb2JhbCBuYW1lc3BhY2UgKCMxODAwKQogICogQWRkIGBncm91cF9ieWAgTGlxdWlkIGZpbHRlciBjcmVhdGUgbGlzdHMgb2YgaXRlbXMgZ3JvdXBlZCBieSBhIGNvbW1vbiBwcm9wZXJ0eSdzIHZhbHVlICgjMTc4OCkKICAqIEFkZCBzdXBwb3J0IGZvciBNYXJ1a3UncyBgZmVuY2VkX2NvZGVfYmxvY2tzYCBvcHRpb24gKCMxNzk5KQogICogVXBkYXRlIFJlZGNhcnBldCBkZXBlbmRlbmN5IHRvIH4+IDMuMCAoIzE4MTUpCiAgKiBBdXRvbWF0aWNhbGx5IHNvcnQgYWxsIHBhZ2VzIGJ5IG5hbWUgKCMxODQ4KQogICogQmV0dGVyIGVycm9yIG1lc3NhZ2Ugd2hlbiB0aW1lIGlzIG5vdCBwYXJzZWFibGUgKCMxODQ3KQogICogQWxsb3cgYGluY2x1ZGVgIHRhZyB2YXJpYWJsZSBhcmd1bWVudHMgdG8gdXNlIGZpbHRlcnMgKCMxODQxKQogICogYHBvc3RfdXJsYCB0YWcgc2hvdWxkIHJhaXNlIGBBcmd1bWVudEVycm9yYCBmb3IgaW52YWxpZCBuYW1lICgjMTgyNSkKICAqIEJ1bXAgZGVwZW5kZW5jeSBgbWVyY2VuYXJ5YCB0byBgfj4gMC4yLjBgICgjMTg3OSkKICAqIEJ1bXAgZGVwZW5kZW5jeSBgc2FmZV95YW1sYCB0byBgfj4gMS4wYCAoIzE4ODYpCiAgKiBBbGxvdyBzb3J0aW5nIG9mIGNvbnRlbnQgYnkgY3VzdG9tIHByb3BlcnRpZXMgKCMxODQ5KQogICogQWRkIGAtLXF1aWV0YCBmbGFnIHRvIHNpbGVuY2Ugb3V0cHV0IGR1cmluZyBidWlsZCBhbmQgc2VydmUgKCMxODk4KQogICogQWRkIGEgYHdoZXJlYCBmaWx0ZXIgdG8gZmlsdGVyIGFycmF5cyBiYXNlZCBvbiBhIGtleS92YWx1ZSBwYWlyICgjMTg3NSkKICAqIFJvdXRlIDQwNCBlcnJvcnMgdG8gYSBjdXN0b20gNDA0IHBhZ2UgaW4gZGV2ZWxvcG1lbnQgKCMxODk5KQogICogRXhjbHVkZXMgYXJlIG5vdyByZWxhdGl2ZSB0byB0aGUgc2l0ZSBzb3VyY2UgKCMxOTE2KQogICogQnJpbmcgTUlNRSBUeXBlcyBmaWxlIGZvciBgamVreWxsIHNlcnZlYCB0byBjb21wbGV0ZSBwYXJpdHkgd2l0aCBHSCBQYWdlcyBzZXJ2ZXJzICgjMTk5MykKICAqIEFkZGluZyBCcmVha3BvaW50IHRvIG1ha2UgbmV3IHNpdGUgdGVtcGxhdGUgbW9yZSByZXNwb25zaXZlICgjMjAzOCkKICAqIERlZmF1bHQgdG8gdXNpbmcgdGhlIFVURi04IGVuY29kaW5nIHdoZW4gcmVhZGluZyBmaWxlcy4gKCMyMDMxKQogICogVXBkYXRlIFJlZGNhcnBldCBkZXBlbmRlbmN5IHRvIH4+IDMuMSAoIzIwNDQpCiAgKiBSZW1vdmUgc3VwcG9ydCBmb3IgUnVieSAxLjkuMiAoIzIwNDUpCiAgKiBBZGQgYC5ta2Rvd25gIGFzIHZhbGlkIE1hcmtkb3duIGV4dGVuc2lvbiAoIzIwNDgpCiAgKiBBZGQgYGluZGV4LnhtbGAgdG8gdGhlIGxpc3Qgb2YgV0VCcmljayBkaXJlY3RvcnkgaW5kZXggZmlsZXMgKCMyMDQxKQogICogTWFrZSB0aGUgYGxheW91dHNgIGNvbmZpZyBrZXkgcmVsYXRpdmUgdG8gQ1dEIG9yIHRvIHNvdXJjZSAoIzIwNTgpCiAgKiBVcGRhdGUgS3JhbWRvd24gdG8gYH4+IDEuM2AgKCMxODk0KQogICogUmVtb3ZlIHVubmVjZXNzYXJ5IHJlZmVyZW5jZXMgdG8gYHNlbGZgICgjMjA5MCkKICAqIFVwZGF0ZSB0byBNZXJjZW5hcnkgdjAuMy54ICgjMjA4NSkKICAqIFNoaXAgU2FzcyBzdXBwb3J0IGFzIGEgc2VwYXJhdGUgZ2VtICgjMjA5OCkKICAqIEV4dHJhY3QgY29yZSBleHRlbnNpb25zIGludG8gYSBVdGlscyBtb2R1bGUgKCMyMTEyKQogICogUmVmYWN0b3IgQ0xJICYgQ29tbWFuZHMgRm9yIEdyZWF0ZXIgSGFwcGluZXNzICgjMjE0MykKICAqIFByb3ZpZGUgdXNlZnVsIGVycm9yIHdoZW4gUHlnbWVudHMgcmV0dXJucyBgbmlsYCBhbmQgZXJyb3Igb3V0ICgjMjE0OCkKICAqIEFkZCBzdXBwb3J0IGZvciB1bnB1Ymxpc2hlZCBkcmFmdHMgKCMyMTY0KQogICogQWRkIGBmb3JjZV9wb2xsaW5nYCBvcHRpb24gdG8gdGhlIGBzZXJ2ZWAgY29tbWFuZCAoIzIxNjUpCiAgKiBDbGVhbiB1cCB0aGUgYDxoZWFkPmAgaW4gdGhlIHNpdGUgdGVtcGxhdGUgKCMyMTg2KQogICogUGVybWl0IFlBTUwgYmxvY2tzIHRvIGVuZCB3aXRoIHRocmVlIGRvdHMgdG8gYmV0dGVyIGNvbmZvcm0gd2l0aCB0aGUgWUFNTCBzcGVjICgjMjExMCkKICAqIFVzZSBgRmlsZS5leGlzdD9gIGluc3RlYWQgb2YgZGVwcmVjYXRlZCBgRmlsZS5leGlzdHM/YCAoIzIyMTQpCiAgKiBSZXF1aXJlIG5ld2xpbmUgYWZ0ZXIgc3RhcnQgb2YgWUFNTCBGcm9udCBNYXR0ZXIgaGVhZGVyICgjMjIxMSkKICAqIEFkZCB0aGUgYWJpbGl0eSBmb3IgcGFnZXMgdG8gYmUgbWFya2VkIGFzIGBwdWJsaXNoZWQ6IGZhbHNlYCAoIzE0OTIpCiAgKiBBZGQgYEpla3lsbDo6TGlxdWlkRXh0ZW5zaW9uc2Agd2l0aCBgLmxvb2t1cF92YXJpYWJsZWAgbWV0aG9kIGZvciBlYXN5IGxvb2tpbmcgdXAgb2YgdmFyaWFibGUgdmFsdWVzIGluIGEgTGlxdWlkIGNvbnRleHQuICgjMjI1MykKICAqIFJlbW92ZSBsaXRlcmFsIGxhbmcgbmFtZSBmcm9tIGNsYXNzICgjMjI5MikKICAqIFJldHVybiBgdXRmLThgIGVuY29kaW5nIGluIGhlYWRlciBmb3Igd2VicmljayBlcnJvciBwYWdlIHJlc3BvbnNlICgjMjI4OSkKICAqIE1ha2UgdGVtcGxhdGUgc2l0ZSBlYXNpZXIgdG8gY3VzdG9taXplICgjMjI2OCkKICAqIEFkZCB0d28tZGlnaXQgeWVhciB0byBwZXJtYWxpbmsgdGVtcGxhdGUgb3B0aW9uICgjMjMwMSkKICAqIEFkZCBgc2l0ZS5kb2N1bWVudHNgIHRvIExpcXVpZCBwYXlsb2FkIChsaXN0IG9mIGFsbCBkb2NzKSAoIzIyOTUpCiAgKiBUYWtlIGludG8gYWNjb3VudCBtaXNzaW5nIHZhbHVlcyBpbiB0aGUgTGlxdWlkIHNvcnQgZmlsdGVyICgjMjI5OSkKCiMjIyBCdWcgRml4ZXMKCiAgKiBEb24ndCBhbGxvdyBuaWwgZW50cmllcyB3aGVuIGxvYWRpbmcgcG9zdHMgKCMxNzk2KQogICogUmVtb3ZlIHRoZSBzY3JvbGxiYXIgdGhhdCdzIGFsd2F5cyBkaXNwbGF5ZWQgaW4gbmV3IHNpdGVzIGdlbmVyYXRlZCBmcm9tIHRoZSBzaXRlIHRlbXBsYXRlICgjMTgwNSkKICAqIEFkZCBgI3BhdGhgIHRvIHJlcXVpcmVkIG1ldGhvZHMgaW4gYEpla3lsbDo6Q29udmVydGlibGVgICgjMTg2NikKICAqIERlZmF1bHQgTWFydWt1IGZlbmNlZCBjb2RlIGJsb2NrcyB0byBPTiBmb3IgMi4wLjAtZGV2ICgjMTgzMSkKICAqIENoYW5nZSBzaG9ydCBvcHRzIGZvciBob3N0IGFuZCBwb3J0IGZvciBgamVreWxsIGRvY3NgIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBzdWJjb21tYW5kcyAoIzE4NzcpCiAgKiBGaXggdHlwb3MgKCMxOTEwKQogICogTG9jayBNYXJ1a3UgYXQgMC43LjAgdG8gcHJldmVudCBidWdzIGNhdXNlZCBieSBNYXJ1a3UgMC43LjEgKCMxOTU4KQogICogRml4ZXMgZnVsbCBwYXRoIGxlYWsgdG8gc291cmNlIGRpcmVjdG9yeSB3aGVuIHVzaW5nIGluY2x1ZGUgdGFnICgjMTk1MSkKICAqIERvbid0IGdlbmVyYXRlIHBhZ2VzIHRoYXQgYXJlbid0IGJlaW5nIHB1Ymxpc2hlZCAoIzE5MzEpCiAgKiBVc2UgYFNhZmVZQU1MLmxvYWRgIHRvIGF2b2lkIGNvbmZsaWN0cyB3aXRoIG90aGVyIHByb2plY3RzICgjMTk4MikKICAqIFJlbGF0aXZlIHBvc3RzIHNob3VsZCBuZXZlciBmYWlsIHRvIGJ1aWxkICgjMTk3NikKICAqIFJlbW92ZSBleGVjdXRhYmxlIGJpdHMgb2Ygbm9uIGV4ZWN1dGFibGUgZmlsZXMgKCMyMDU2KQogICogYCNwYXRoYCBmb3IgYSBkcmFmdCBpcyBub3cgYF9kcmFmdHNgIGluc3RlYWQgb2YgYF9wb3N0c2AgKCMyMDQyKQogICogUGF0Y2ggYSBjb3VwbGUgc2hvdy1zdG9wcGluZyBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMgKCMxOTQ2KQogICogU2FuaXRpemUgcGF0aHMgdW5pZm9ybWx5LCBpbiBhIFdpbmRvd3MtZnJpZW5kbHkgd2F5ICgjMjA2NSwgIzIxMDkpCiAgKiBVcGRhdGUgZ2VtIGJ1aWxkIHN0ZXBzIHRvIHdvcmsgY29ycmVjdGx5IG9uIFdpbmRvd3MgKCMyMTE4KQogICogUmVtb3ZlIG9ic29sZXRlIGBub3JtYWxpemVfb3B0aW9uc2AgbWV0aG9kIGNhbGwgZnJvbSBgYmluL2pla3lsbGAgKCMyMTIxKS4KICAqIFJlbW92ZSBgK2AgY2hhcmFjdGVycyBmcm9tIFB5Z21lbnRzIGxleGVyIG5hbWVzIHdoZW4gYWRkaW5nIGFzIGEgQ1NTIGNsYXNzICgjOTk0KQogICogUmVtb3ZlIHNvbWUgY29kZSB0aGF0IGNhdXNlZCBSdWJ5IGludGVycHJldGVyIHdhcm5pbmdzICgjMjE3OCkKICAqIE9ubHkgc3RyaXAgdGhlIGRyaXZlIG5hbWUgaWYgaXQgYmVnaW5zIHRoZSBzdHJpbmcgKCMyMTc1KQogICogUmVtb3ZlIGRlZmF1bHQgcG9zdCB3aXRoIGludmFsaWQgZGF0ZSBmcm9tIHNpdGUgdGVtcGxhdGUgKCMyMjAwKQogICogRml4IGBQb3N0I3VybGAgYW5kIGBQYWdlI3VybGAgZXNjYXBlICgjMTU2OCkKICAqIFN0cmlwIG5ld2xpbmVzIGZyb20gdGhlIGB7JSBoaWdobGlnaHQgJX1gIGJsb2NrIGNvbnRlbnQgKCMxODIzKQogICogTG9hZCBpbiBgcm91Z2VgIG9ubHkgd2hlbiBpdCdzIGJlZW4gcmVxdWVzdGVkIGFzIHRoZSBoaWdobGlnaHRlciAoIzIxODkpCiAgKiBDb252ZXJ0IGlucHV0IHRvIHN0cmluZyBiZWZvcmUgWE1MIGVzY2FwaW5nIChgeG1sX2VzY2FwZWAgbGlxdWlkIGZpbHRlcikgKCMyMjQ0KQogICogTW9kaWZ5IGNvbmZpZ3VyYXRpb24ga2V5IGZvciBDb2xsZWN0aW9ucyBhbmQgcmVzZXQgcHJvcGVybHkuICgjMjIzOCkKICAqIEF2b2lkIGR1cGxpY2F0ZWQgb3V0cHV0IHVzaW5nIGBoaWdobGlnaHRgIHRhZyAoIzIyNjQpCiAgKiBPbmx5IHVzZSBKZWt5bGwubG9nZ2VyIGZvciBvdXRwdXQgKCMyMzA3KQogICogQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBpbiBgaGFzX3lhbWxfaGVhZGVyP2AgKCMyMzEwKQogICogQWRkIGBvdXRwdXRgIHRvIGBEb2N1bWVudGAgbGlxdWlkIG91dHB1dCBoYXNoICgjMjMwOSkKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIEFkZCBhIGxpbmsgdG8gdGhlIHNpdGUgaW4gdGhlIFJFQURNRS5tZCBmaWxlICgjMTc5NSkKICAqIEFkZCBpbiBIaXN0b3J5IGFuZCBzaXRlIGNoYW5nZXMgZnJvbSBgdjEtc3RhYmxlYCBicmFuY2ggKCMxODM2KQogICogVGVzdGluZyBhZGRpdGlvbnMgb24gdGhlIEV4Y2VycHQgY2xhc3MgKCMxODkzKQogICogRml4IHRoZSBgaGlnaGxpZ2h0YCB0YWcgZmVhdHVyZSAoIzE4NTkpCiAgKiBUZXN0IEpla3lsbCB1bmRlciBSdWJ5IDIuMS4wICgjMTkwMCkKICAqIEFkZCBzY3JpcHQvY2lidWlsZCBmb3IgZnVuIGFuZCBwcm9maXQgKCMxOTEyKQogICogVXNlIGBGb3J3YXJkYWJsZWAgZm9yIGRlbGVnYXRpb24gYmV0d2VlbiBgRXhjZXJwdGAgYW5kIGBQb3N0YCAoIzE5MjcpCiAgKiBSZW5hbWUgYHJlYWRfdGhpbmdzYCB0byBgcmVhZF9jb250ZW50YCAoIzE5MjgpCiAgKiBBZGQgYHNjcmlwdC9icmFuZGluZ2Agc2NyaXB0IGZvciBBU0NJSSBhcnQgbG92aW4nICgjMTkzNikKICAqIFVwZGF0ZSB0aGUgUkVBRE1FIHRvIHJlZmxlY3QgdGhlIHJlcG8gbW92ZSAoIzE5NDMpCiAgKiBBZGQgdGhlIHByb2plY3QgdmlzaW9uIHRvIHRoZSBSRUFETUUgKCMxOTM1KQogICogU3BlZWQgdXAgVHJhdmlzIENJIGJ1aWxkcyBieSB1c2luZyBSZWJ1bmQgKCMxOTg1KQogICogVXNlIFlhcnAgYXMgYSBHZW0gcHJveHkgZm9yIFRyYXZpcyBDSSAoIzE5ODQpCiAgKiBSZW1vdmUgWWFycCBhcyBhIEdlbSBwcm94eSBmb3IgVHJhdmlzIENJICgjMjAwNCkKICAqIE1vdmUgdGhlIHJlYWRpbmcgb2YgbGF5b3V0cyBpbnRvIGl0cyBvd24gY2xhc3MgKCMyMDIwKQogICogVGVzdCBTYXNzIGltcG9ydCAoIzIwMDkpCiAgKiBTd2l0Y2ggTWFydWt1IGFuZCBLcmFtZG93biBpbiBsaXN0cyBvZiBSdW50aW1lIHZzLiBEZXZlbG9wbWVudCBkZXBlbmRlbmNpZXMgKCMyMDQ5KQogICogQ2xlYW4gdXAgdGhlIGdlbXNwZWMgZm9yIHRoZSBwcm9qZWN0ICgjMjA5NSkKICAqIEFkZCBKYXBhbmVzZSB0cmFuc2xhdGlvbiBvZiBSRUFETUUgYW5kIENPTlRSSUJVVElORyBkb2NzLiAoIzIwODEpCiAgKiBSZS1hbGlnbiB0aGUgdGFibGVzIGluIEN1Y3VtYmVyICgjMjEwOCkKICAqIFRyaW0gdHJhaWxpbmcgc3BhY2VzIGFuZCBjb252ZXJ0IHRhYnMgdG8gc3BhY2VzICgjMjEyMikKICAqIEZpeCB0aGUgZmFpbGluZyBUcmF2aXMgc2NlbmFyaW9zIGR1ZSB0byBDdWN1bWJlciBpc3N1ZXMgKCMyMTU1KQogICogV3JhcCBgYnVuZGxlIGluc3RhbGxgIGluIGB0cmF2aXNfcmV0cnlgIHRvIHJldHJ5IHdoZW4gUnVieUdlbXMgZmFpbHMgKCMyMTYwKQogICogUmVmYWN0b3IgdGFncyBhbmQgY2F0ZWdvcmllcyAoIzE2MzkpCiAgKiBFeHRyYWN0IHBsdWdpbiBtYW5hZ2VtZW50IGludG8gaXRzIG93biBjbGFzcyAoIzIxOTcpCiAgKiBBZGQgbWlzc2luZyB0ZXN0cyBmb3IgYENvbW1hbmRgICgjMjIxNikKICAqIFVwZGF0ZSBgcnJgIGxpbmsgaW4gQ09OVFJJQlVUSU5HIGRvYyAoIzIyNDcpCiAgKiBTdHJlYW1saW5lIEN1Y3VtYmVyIGV4ZWN1dGlvbiBvZiBgamVreWxsYCBzdWJjb21tYW5kcyAoIzIyNTgpCiAgKiBSZWZhY3RvciBgQ29tbWFuZHM6OlNlcnZlYC4gKCMyMjY5KQogICogUmVmYWN0b3IgYGhpZ2hsaWdodGAgdGFnICgjMjE1NCkKICAqIFVwZGF0ZSBgVXRpbGAgaGFzaCBmdW5jdGlvbnMgd2l0aCBsYXRlc3QgZnJvbSBSYWlscyAoIzIyNzMpCiAgKiBXb3JrYXJvdW5kIGZvciBUcmF2aXMgYnVnICgjMjI5MCkKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIERvY3VtZW50IEtyYW1kb3duJ3MgR0ZNIHBhcnNlciBvcHRpb24gKCMxNzkxKQogICogTW92ZSBDU1MgdG8gaW5jbHVkZXMgJiB1cGRhdGUgbm9ybWFsaXplLmNzcyB0byB2Mi4xLjMgKCMxNzg3KQogICogTWluaWZ5IENTUyBvbmx5IGluIHByb2R1Y3Rpb24gKCMxODAzKQogICogRml4IGJyb2tlbiBsaW5rIHRvIGluc3RhbGxhdGlvbiBvZiBSdWJ5IG9uIE1vdW50YWluIExpb24gYmxvZyBwb3N0IG9uIFRyb3VibGVzaG9vdGluZyBkb2NzIHBhZ2UgKCMxNzk3KQogICogRml4IGlzc3VlcyB3aXRoIDEuNC4xIHJlbGVhc2UgYmxvZyBwb3N0ICgjMTgwNCkKICAqIEFkZCBub3RlIGFib3V0IGRlcGxveWluZyB0byBPcGVuU2hpZnQgKCMxODEyKQogICogQ29sbGVjdCBhbGwgV2luZG93cy1yZWxhdGVkIGRvY3Mgb250byBvbmUgcGFnZSAoIzE4MTgpCiAgKiBGaXhlZCB0eXBvIGluIGRhdGFmaWxlcyBkb2MgcGFnZSAoIzE4NTQpCiAgKiBDbGFyaWZ5IGhvdyB0byBhY2Nlc3MgYHNpdGVgIGluIGRvY3MgKCMxODY0KQogICogQWRkIGNsb3NpbmcgYDxjb2RlPmAgdGFnIHRvIGBjb250ZXh0LnJlZ2lzdGVyc1s6c2l0ZV1gIG5vdGUgKCMxODY3KQogICogRml4IGxpbmsgdG8gQG1vam9tYm8ncyBzaXRlIHNvdXJjZSAoIzE4OTcpCiAgKiBBZGQgYHBhZ2luYXRlOiBuaWxgIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiBkb2NzICgjMTg5NikKICAqIEFkZCBsaW5rIHRvIG91ciBMaWNlbnNlIGluIHRoZSBzaXRlIGZvb3RlciAoIzE4ODkpCiAgKiBBZGQgYSBjaGFyc2V0IG5vdGUgaW4gIldyaXRpbmcgUG9zdHMiIGRvYyBwYWdlICgjMTkwMikKICAqIERpc2FsbG93IHNlbGVjdGlvbiBvZiBwYXRoIGFuZCBwcm9tcHQgaW4gYmFzaCBleGFtcGxlcwogICogQWRkIGpla3lsbC1jb21wYXNzIHRvIHRoZSBwbHVnaW4gbGlzdCAoIzE5MjMpCiAgKiBBZGQgbm90ZSBpbiBQb3N0cyBkb2NzIGFib3V0IHN0cmlwcGluZyBgPHA+YCB0YWdzIGZyb20gZXhjZXJwdCAoIzE5MzMpCiAgKiBBZGQgYWRkaXRpb25hbCBpbmZvIGFib3V0IHRoZSBuZXcgZXhjbHVkZSBiZWhhdmlvciAoIzE5MzgpCiAgKiBMaW5raWZ5ICdhd2Vzb21lIGNvbnRyaWJ1dG9ycycgdG8gcG9pbnQgdG8gdGhlIGNvbnRyaWJ1dG9ycyBncmFwaCBvbiBHaXRIdWIgKCMxOTQwKQogICogVXBkYXRlIGBkb2NzL3NpdGVzLm1kYCBsaW5rIHRvIEdpdEh1YiBUcmFpbmluZyBtYXRlcmlhbHMgKCMxOTQ5KQogICogVXBkYXRlIGBtYXN0ZXJgIHdpdGggdGhlIHJlbGVhc2UgaW5mbyBmcm9tIDEuNC4zICgjMTk0NykKICAqIERlZmluZSBkb2NzIG5hdiBpbiBkYXRhZmlsZSAoIzE5NTMpCiAgKiBDbGFyaWZ5IHRoZSBkb2NzIGFyb3VuZCB0aGUgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHBvc3RzICgjMTk3MSkKICAqIEFkZCBtaXNzaW5nIGBuZXh0YCBhbmQgYHByZXZpb3VzYCBkb2NzIGZvciBwb3N0IGxheW91dHMgYW5kIHRlbXBsYXRlcyAoIzE5NzApCiAgKiBBZGQgbm90ZSB0byBgV3JpdGluZyBwb3N0c2AgcGFnZSBhYm91dCBob3cgdG8gc3RyaXAgaHRtbCBmcm9tIGV4Y2VycHQgKCMxOTYyKQogICogQWRkIGBqZWt5bGwtaHVtYW5pemVgIHBsdWdpbiB0byBwbHVnaW4gbGlzdCAoIzE5OTgpCiAgKiBBZGQgYGpla3lsbC1mb250LWF3ZXNvbWVgIHBsdWdpbiB0byBwbHVnaW4gbGlzdCAoIzE5OTkpCiAgKiBBZGQgYHN1YmxpbWUtamVreWxsYCB0byBsaXN0IG9mIEVkaXRvciBwbHVnaW5zICgjMjAwMSkKICAqIEFkZCBgdmltLWpla3lsbGAgdG8gdGhlIGxpc3Qgb2YgRWRpdG9yIHBsdWdpbnMgKCMyMDA1KQogICogRml4IG5vbi1zZW1hbnRpYyBuZXN0aW5nIG9mIGBwYCB0YWdzIGluIGBuZXdzX2l0ZW1gIGxheW91dCAoIzIwMTMpCiAgKiBEb2N1bWVudCBkZXN0aW5hdGlvbiBmb2xkZXIgY2xlYW5pbmcgKCMyMDE2KQogICogVXBkYXRlZCBpbnN0cnVjdGlvbnMgZm9yIE5lYXJseUZyZWVTcGVlY2guTkVUIGluc3RhbGxhdGlvbiAoIzIwMTUpCiAgKiBVcGRhdGUgbGluayB0byByYWNrLWpla3lsbCBvbiAiRGVwbG95bWVudCBNZXRob2RzIiBwYWdlICgjMjA0NykKICAqIEZpeCB0eXBvIGluIC9kb2NzL2NvbmZpZ3VyYXRpb24gKCMyMDczKQogICogRml4IGNvdW50IGluIGRvY3MgZm9yIGBzaXRlLnN0YXRpY19maWxlc2AgKCMyMDc3KQogICogVXBkYXRlIGNvbmZpZ3VyYXRpb24gZG9jcyB0byBpbmRpY2F0ZSB1dGYtOCBpcyB0aGUgZGVmYXVsdCBmb3IgMi4wLjAgYW5kIEFTQ0lJIGZvciAxLjkuMyAoIzIwNzQpCiAgKiBBZGQgaW5mbyBhYm91dCB1bnJlbGVhc2VkIGZlYXR1cmUgdG8gdGhlIHNpdGUgKCMyMDYxKQogICogQWRkIHdoaXRlc3BhY2UgdG8gbGlxdWlkIGV4YW1wbGUgaW4gR2l0SHViIFBhZ2VzIGRvY3MgKCMyMDg0KQogICogQ2xhcmlmeSB0aGUgd2F5IFNhc3MgYW5kIENvZmZlZVNjcmlwdCBmaWxlcyBhcmUgcmVhZCBpbiBhbmQgb3V0cHV0ICgjMjA2NykKICAqIEFkZCBseWNoZSBnYWxsZXJ5IHRhZyBwbHVnaW4gbGluayB0byBsaXN0IG9mIHBsdWdpbnMgKCMyMDk0KQogICogQWRkIEpla3lsbCBQYWdlcyBEaXJlY3RvcnkgcGx1Z2luIHRvIGxpc3Qgb2YgcGx1Z2lucyAoIzIwOTYpCiAgKiBVcGRhdGUgQ29uZmlndXJhdGlvbiBkb2NzIHBhZ2Ugd2l0aCBuZXcgbWFya2Rvd24gZXh0ZW5zaW9uICgjMjEwMikKICAqIEFkZCBgamVreWxsLWltYWdlLXNldGAgdG8gdGhlIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzIxMDUpCiAgKiBMb3NzbGVzc2x5IGNvbXByZXNzIGltYWdlcyAoIzIxMjgpCiAgKiBVcGRhdGUgbm9ybWFsaXplLmNzcyB0byAzLjAuMCAoIzIxMjYpCiAgKiBVcGRhdGUgbW9kZXJuaXpyIHRvIHYyLjcuMSAoIzIxMjkpCiAgKiBBZGQgYGpla3lsbC1vcmRpbmFsYCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMyMTUwKQogICogQWRkIGBqZWt5bGxfZmlndXJlYCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMyMTU4KQogICogQ2xhcmlmeSB0aGUgZG9jdW1lbnRhdGlvbiBmb3Igc2FmZSBtb2RlICgjMjE2MykKICAqIFNvbWUgSFRNTCB0aWR5aW5nICgjMjEzMCkKICAqIFJlbW92ZSBtb2Rlcm5penIgYW5kIHVzZSBodG1sNXNoaXYuanMgZGlyZWN0bHkgZm9yIElFIGxlc3MgdGhhbiB2OSAoIzIxMzEpCiAgKiBSZW1vdmUgdW51c2VkIGltYWdlcyAoIzIxODcpCiAgKiBVc2UgYGFycmF5X3RvX3NlbnRlbmNlX3N0cmluZ2AgZmlsdGVyIHdoZW4gb3V0cHV0dGluZyBuZXdzIGl0ZW0gY2F0ZWdvcmllcyAoIzIxOTEpCiAgKiBBZGQgbGluayB0byBIZWxwIHJlcG8gaW4gcHJpbWFyeSBuYXZpZ2F0aW9uIGJhciAoIzIxNzcpCiAgKiBTd2l0Y2ggdG8gdXNpbmcgYW4gaWNvIGZpbGUgZm9yIHRoZSBzaG9ydGN1dCBpY29uICgjMjE5MykKICAqIFVzZSBudW1iZXJzIHRvIHNwZWNpZnkgZm9udCB3ZWlnaHRzIGFuZCBvbmx5IGJyaW5nIGluIGZvbnQgd2VpZ2h0cyB1c2VkICgjMjE4NSkKICAqIEFkZCBhIGxpbmsgdG8gdGhlIGxpc3Qgb2YgYWxsIHR6IGRhdGFiYXNlIHRpbWUgem9uZXMgKCMxODI0KQogICogQ2xlYW4tdXAgYW5kIGltcHJvdmUgZG9jdW1lbnRhdGlvbiBgZmVlZC54bWxgICgjMjE5MikKICAqIFJlbW92ZSBkdXBsaWNhdGUgZW50cnkgaW4gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjIwNikKICAqIFJlZHVjZSB0aGUgd2hpdGVzcGFjZSBpbiB0aGUgZmF2aWNvbi4gKCMyMjEzKQogICogQWRkIGBqZWt5bGwtcGFnZS1jb2xsZWN0aW9uc2AgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjIxNSkKICAqIEFkZCBhIGNyb3NzLXJlZmVyZW5jZSBhYm91dCBgcG9zdF91cmxgICgjMjI0MykKICAqIEFkZCBgamVreWxsLWxpdmUtdGlsZXNgIHRvIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzIyNTApCiAgKiBGaXhlZCBicm9rZW4gbGluayB0byBHaXRIdWIgdHJhaW5pbmcgbWF0ZXJpYWwgc2l0ZSBzb3VyY2UgKCMyMjU3KQogICogVXBkYXRlIGxpbmsgdG8gaGVscCByZXBvLCBub3cgY2FsbGVkIGBqZWt5bGwtaGVscGAgKCMyMjc3KQogICogRml4IGNhcGl0YWxpemF0aW9uIG9mICdKZWt5bGwnIG9uIERlcGxveW1lbnQgTWV0aG9kcyBwYWdlICgjMjI5MSkKICAqIEluY2x1ZGUgcGx1Z2lucyBieSBzb25ueW0gaW4gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjI5NykKICAqIEFkZCBkZXByZWNhdGVkIGFydGljbGVzIGtlZXBlciBmaWx0ZXIgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMjMwMCkKICAqIFNpbXBsaWZ5IGFuZCBpbXByb3ZlIG91ciBDU1MuICgjMjEyNykKICAqIFVzZSBibGFjayB0ZXh0IGNvbG9yIGZvciB0aGUgbW9iaWxlIG5hdmJhciAoIzIzMDYpCiAgKiBVc2UgdGhlIGJ1aWx0IGluIGRhdGUgZmlsdGVyIGFuZCBgc2l0ZS50aW1lYCBmb3IgdGhlIGNvcHlyaWdodCB5ZWFyLiAoIzIzMDUpCiAgKiBVcGRhdGUgaHRtbDVzaGl2IHRvIHYzLjcuMiAoIzIzMDQpCiAgKiBBZGQgMi4wLjAgcmVsZWFzZSBwb3N0ICgjMjI5OCkKICAqIEFkZCBkb2NzIGZvciBjdXN0b20gbWFya2Rvd24gcHJvY2Vzc29ycyAoIzIyOTgpCiAgKiBBZGQgZG9jcyBmb3IgYHdoZXJlYCBhbmQgYGdyb3VwX2J5YCBMaXF1aWQgZmlsdGVycyAoIzIyOTgpCiAgKiBSZW1vdmUgbm90ZXMgaW4gZG9jcyBmb3IgdW5yZWxlYXNlZCBmZWF0dXJlcyAoIzIzMDkpCgojIyAxLjUuMSAvIDIwMTQtMDMtMjcKCiMjIyBCdWcgRml4ZXMKCiAgKiBPbmx5IHN0cmlwIHRoZSBkcml2ZSBuYW1lIGlmIGl0IGJlZ2lucyB0aGUgc3RyaW5nICgjMjE3NikKCiMjIDEuNS4wIC8gMjAxNC0wMy0yNAoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIExvb3NlbiBgc2FmZV95YW1sYCBkZXBlbmRlbmN5IHRvIGB+PiAxLjBgICgjMjE2NykKICAqIEJ1bXAgYHNhZmVfeWFtbGAgZGVwZW5kZW5jeSB0byBgfj4gMS4wLjBgICgjMTk0MikKCiMjIyBCdWcgRml4ZXMKCiAgKiBGaXggaXNzdWUgd2hlcmUgZmlsZXN5c3RlbSB0cmF2ZXJzYWwgcmVzdHJpY3Rpb24gYnJva2UgV2luZG93cyAoIzIxNjcpCiAgKiBMb2NrIGBtYXJ1a3VgIGF0IGAwLjcuMGAgKCMyMTY3KQoKIyMjIERldmVsb3BtZW50IEZpeGVzCgogICogTG9jayBgY3VjdW1iZXJgIGF0IGAxLjMuMTFgICgjMjE2NykKCiMjIDEuNC4zIC8gMjAxNC0wMS0xMwoKIyMjIEJ1ZyBGaXhlcwoKICAqIFBhdGNoIHNob3ctc3RvcHBpbmcgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzICgjMTk0NCkKCiMjIDEuNC4yIC8gMjAxMy0xMi0xNgoKIyMjIEJ1ZyBGaXhlcwoKICAqIFR1cm4gb24gTWFydWt1IGZlbmNlZCBjb2RlIGJsb2NrcyBieSBkZWZhdWx0ICgjMTgzMCkKCiMjIDEuNC4xIC8gMjAxMy0xMi0wOQoKIyMjIEJ1ZyBGaXhlcwoKICAqIERvbid0IGFsbG93IG5pbCBlbnRyaWVzIHdoZW4gbG9hZGluZyBwb3N0cyAoIzE3OTYpCgojIyAxLjQuMCAvIDIwMTMtMTItMDcKCiMjIyBNYWpvciBFbmhhbmNlbWVudHMKCiAgKiBBZGQgc3VwcG9ydCBmb3IgVE9NTCBjb25maWcgZmlsZXMgKCMxNzY1KQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFNvcnQgcGx1Z2lucyBhcyBhIHdheSB0byBlc3RhYmxpc2ggYSBsb2FkIG9yZGVyICgjMTY4MikKICAqIFVwZGF0ZSBNYXJ1a3UgdG8gMC43LjAgKCMxNzc1KQoKIyMjIEJ1ZyBGaXhlcwoKICAqIEFkZCBhIHNwYWNlIGJldHdlZW4gdHdvIHdvcmRzIGluIGEgUGFnaW5hdGlvbiB3YXJuaW5nIG1lc3NhZ2UgKCMxNzY5KQogICogVXBncmFkZSBgdG9tbGAgZ2VtIHRvIGB2MC4xLjBgIHRvIG1haW50YWluIGNvbXBhdCB3aXRoIFJ1YnkgMS44LjcgKCMxNzc4KQoKIyMjIERldmVsb3BtZW50IEZpeGVzCgogICogUmVtb3ZlIHNvbWUgd2hpdGVzcGFjZSBpbiB0aGUgY29kZSAoIzE3NTUpCiAgKiBSZW1vdmUgc29tZSBkdXBsaWNhdGlvbiBpbiB0aGUgcmVhZGluZyBvZiBwb3N0cyBhbmQgZHJhZnRzICgjMTc3OSkKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIEZpeGVkIGNhc2Ugb2YgYSB3b3JkIGluIHRoZSBKZWt5bGwgdjEuMy4wIHJlbGVhc2UgcG9zdCAoIzE3NjIpCiAgKiBGaXhlZCB0aGUgbWltZSB0eXBlIGZvciB0aGUgZmF2aWNvbiAoIzE3NzIpCgojIyAxLjMuMSAvIDIwMTMtMTEtMjYKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBBZGQgYSBgLS1wcmVmaXhgIG9wdGlvbiB0byBwYXNzdGhyb3VnaCBmb3IgdGhlIGltcG9ydGVycyAoIzE2NjkpCiAgKiBQdXNoIHRoZSBwYWdpbmF0b3IgcGx1Z2luIGxvd2VyIGluIHRoZSBwbHVnaW4gcHJpb3JpdHkgb3JkZXIgc28gb3RoZXIgcGx1Z2lucyBydW4gYmVmb3JlIGl0ICgjMTc1OSkKCiMjIyBCdWcgRml4ZXMKCiAgKiBGaXggdGhlIGluY2x1ZGUgdGFnIHdoZW4gcmFuIGluIGEgbG9vcCAoIzE3MjYpCiAgKiBGaXggZXJyb3JzIHdoZW4gdXNpbmcgYC0td2F0Y2hgIG9uIDEuOC43ICgjMTczMCkKICAqIFNwZWNpZnkgd2hlcmUgdGhlIGluY2x1ZGUgaXMgY2FsbGVkIGZyb20gaWYgYW4gaW5jbHVkZWQgZmlsZSBpcyBtaXNzaW5nICgjMTc0NikKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIEV4dHJhY3QgYFNpdGUjZmlsdGVyX2VudHJpZXNgIGludG8gaXRzIG93biBvYmplY3QgKCMxNjk3KQogICogRW5hYmxlIFRyYXZpcycgYnVuZGxlIGNhY2hpbmcgKCMxNzM0KQogICogUmVtb3ZlIHRyYWlsaW5nIHdoaXRlc3BhY2UgaW4gc29tZSBmaWxlcyAoIzE3MzYpCiAgKiBGaXggYSBkdXBsaWNhdGUgdGVzdCBuYW1lICgjMTc1NCkKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIFVwZGF0ZSBsaW5rIHRvIGV4YW1wbGUgUmFrZWZpbGUgdG8gcG9pbnQgdG8gc3BlY2lmaWMgY29tbWl0ICgjMTc0MSkKICAqIEZpeCBkcmFmdHMgZG9jcyB0byBpbmRpY2F0ZSB0aGF0IGRyYWZ0IHRpbWUgaXMgYmFzZWQgb24gZmlsZSBtb2RpZmljYXRpb24gdGltZSwgbm90IGBUaW1lLm5vd2AgKCMxNjk1KQogICogQWRkIGBqZWt5bGwtbW9udGhseS1hcmNoaXZlLXBsdWdpbmAgYW5kIGBqZWt5bGwtY2F0ZWdvcnktYXJjaGl2ZS1wbHVnaW5gIHRvIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucyAoIzE2OTMpCiAgKiBBZGQgYGpla3lsbC1hc3NldC1wYXRoLXBsdWdpbmAgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMTY3MCkKICAqIEFkZCBgZW1vamktZm9yLWpla3lsbGAgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0IHBsdWdpbnMgKCMxNzA4KQogICogRml4IHByZXZpb3VzIHNlY3Rpb24gbGluayBvbiBwbHVnaW5zIHBhZ2UgdG8gcG9pbnQgdG8gcGFnaW5hdGlvbiBwYWdlICgjMTcwNykKICAqIEFkZCBgb3JnLW1vZGVgIGNvbnZlcnRlciBwbHVnaW4gdG8gdGhpcmQtcGFydHkgcGx1Z2lucyAoIzE3MTEpCiAgKiBQb2ludCAiQmxvZyBtaWdyYXRpb25zIiBwYWdlIHRvIGh0dHA6Ly9pbXBvcnQuamVreWxscmIuY29tICgjMTczMikKICAqIEFkZCBkb2NzIGZvciBgcG9zdF91cmxgIHdoZW4gcG9zdHMgYXJlIGluIHN1YmRpcmVjdG9yaWVzICgjMTcxOCkKICAqIFVwZGF0ZSB0aGUgZG9jcyB0byBwb2ludCB0byBgZXhhbXBsZS5jb21gICgjMTQ0OCkKCiMjIDEuMy4wIC8gMjAxMy0xMS0wNAoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIEFkZCBzdXBwb3J0IGZvciBhZGRpbmcgZGF0YSBhcyBZQU1MIGZpbGVzIHVuZGVyIGEgc2l0ZSdzIGBfZGF0YWAgZGlyZWN0b3J5ICgjMTAwMykKICAqIEFsbG93IHZhcmlhYmxlcyB0byBiZSB1c2VkIHdpdGggYGluY2x1ZGVgIHRhZ3MgKCMxNDk1KQogICogQWxsb3cgdXNpbmcgZ2VtcyBmb3IgcGx1Z2luIG1hbmFnZW1lbnQgKCMxNTU3KQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIERlY3JlYXNlIHRoZSBzcGVjaWZpY2l0eSBpbiB0aGUgc2l0ZSB0ZW1wbGF0ZSBDU1MgKCMxNTc0KQogICogQWRkIGBlbmNvZGluZ2AgY29uZmlndXJhdGlvbiBvcHRpb24gKCMxNDQ5KQogICogUHJvdmlkZSBiZXR0ZXIgZXJyb3IgaGFuZGxpbmcgZm9yIEpla3lsbCdzIGN1c3RvbSBMaXF1aWQgdGFncyAoIzE1MTQpCiAgKiBJZiBhbiBpbmNsdWRlZCBmaWxlIGNhdXNlcyBhIExpcXVpZCBlcnJvciwgYWRkIHRoZSBwYXRoIHRvIHRoZSBpbmNsdWRlIGZpbGUgdGhhdCBjYXVzZWQgdGhlIGVycm9yIHRvIHRoZSBlcnJvciBtZXNzYWdlICgjMTU5NikKICAqIElmIGEgbGF5b3V0IGNhdXNlcyBhIExpcXVpZCBlcnJvciwgY2hhbmdlIHRoZSBlcnJvciBtZXNzYWdlIHNvIHRoYXQgd2Uga25vdyBpdCBjb21lcyBmcm9tIHRoZSBsYXlvdXQgKCMxNjAxKQogICogVXBkYXRlIEtyYW1kb3duIGRlcGVuZGVuY3kgdG8gYH4+IDEuMmAgKCMxNjEwKQogICogVXBkYXRlIGBzYWZlX3lhbWxgIGRlcGVuZGVuY3kgdG8gYH4+IDAuOS43YCAoIzE2MDIpCiAgKiBBbGxvdyBsYXlvdXRzIHRvIGJlIGluIHN1YmZvbGRlcnMgbGlrZSBpbmNsdWRlcyAoIzE2MjIpCiAgKiBTd2l0Y2ggdG8gbGlzdGVuIGZvciBzaXRlIHdhdGNoaW5nIHdoaWxlIHNlcnZpbmcgKCMxNTg5KQogICogQWRkIGEgYGpzb25gIGxpcXVpZCBmaWx0ZXIgdG8gYmUgdXNlZCBpbiBzaXRlcyAoIzE2NTEpCiAgKiBQb2ludCBwZW9wbGUgdG8gdGhlIG1pZ3JhdGlvbiBkb2NzIHdoZW4gdGhlIGBqZWt5bGwtaW1wb3J0YCBnZW0gaXMgbWlzc2luZyAoIzE2NjIpCgojIyMgQnVnIEZpeGVzCgogICogRml4IHVwIG1hdGNoaW5nIGFnYWluc3Qgc291cmNlIGFuZCBkZXN0aW5hdGlvbiB3aGVuIHRoZSB0d28gbG9jYXRpb25zIGFyZSBzaW1pbGFyICgjMTU1NikKICAqIEZpeCB0aGUgbWlzc2luZyBgcGF0aG5hbWVgIHJlcXVpcmUgaW4gY2VydGFpbiBjYXNlcyAoIzEyNTUpCiAgKiBVc2UgYCtgIGluc3RlYWQgb2YgYEFycmF5I2NvbmNhdGAgd2hlbiBidWlsZGluZyBgUG9zdGAgYXR0cmlidXRlIGxpc3QgKCMxNTcxKQogICogUHJpbnQgc2VydmVyIGFkZHJlc3Mgd2hlbiBsYXVuY2hpbmcgYSBzZXJ2ZXIgKCMxNTg2KQogICogRG93bmdyYWRlIHRvIE1hcnVrdSBgfj4gMC42LjBgIGluIG9yZGVyIHRvIGF2b2lkIGNoYW5nZXMgaW4gcmVuZGVyaW5nICgjMTU5OCkKICAqIEZpeCBlcnJvciB3aXRoIGZhaWxpbmcgaW5jbHVkZSB0YWcgd2hlbiB2YXJpYWJsZSB3YXMgZmlsZSBuYW1lICgjMTYxMykKICAqIERvd25jYXNlIGxleGVycyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHB5Z21lbnRzICgjMTYxNSkKICAqIENhcGl0YWxpemUgdGhlIHNob3J0IHZlcmJvc2Ugc3dpdGNoIGJlY2F1c2UgaXQgY29uZmxpY3RzIHdpdGggdGhlIGJ1aWx0LWluIENvbW1hbmRlciBzd2l0Y2ggKCMxNjYwKQogICogRml4IGNvbXBhdGliaWxpdHkgd2l0aCAxLjgueCAoIzE2NjUpCiAgKiBGaXggYW4gZXJyb3Igd2l0aCB0aGUgbmV3IGZpbGUgd2F0Y2hpbmcgY29kZSBkdWUgdG8gbGlicmFyeSB2ZXJzaW9uIGluY29tcGF0aWJpbGl0aWVzICgjMTY4NykKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIEFkZCBjb3ZlcmFnZSByZXBvcnRpbmcgd2l0aCBDb3ZlcmFsbHMgKCMxNTM5KQogICogUmVmYWN0b3IgdGhlIExpcXVpZCBgaW5jbHVkZWAgdGFnICgjMTQ5MCkKICAqIFVwZGF0ZSBsYXVuY2h5IGRlcGVuZGVuY3kgdG8gYH4+IDIuM2AgKCMxNjA4KQogICogVXBkYXRlIHJyIGRlcGVuZGVuY3kgdG8gYH4+IDEuMWAgKCMxNjA0KQogICogVXBkYXRlIGN1Y3VtYmVyIGRlcGVuZGVuY3kgdG8gYH4+IDEuM2AgKCMxNjA3KQogICogVXBkYXRlIGNvdmVyYWxscyBkZXBlbmRlbmN5IHRvIGB+PiAwLjcuMGAgKCMxNjA2KQogICogVXBkYXRlIHJha2UgZGVwZW5kZW5jeSB0byBgfj4gMTAuMWAgKCMxNjAzKQogICogQ2xlYW4gdXAgYHNpdGUucmJgIGNvbW1lbnRzIHRvIGJlIG1vcmUgY29uY2lzZS91bmlmb3JtICgjMTYxNikKICAqIFVzZSB0aGUgbWFzdGVyIGJyYW5jaCBmb3IgdGhlIGJ1aWxkIGJhZGdlIGluIHRoZSByZWFkbWUgKCMxNjM2KQogICogUmVmYWN0b3IgU2l0ZSNyZW5kZXIgKCMxNjM4KQogICogUmVtb3ZlIGR1cGxpY2F0aW9uIGluIGNvbW1hbmQgbGluZSBvcHRpb25zICgjMTYzNykKICAqIEFkZCB0ZXN0cyBmb3IgYWxsIHRoZSBjb2RlcmF5IG9wdGlvbnMgKCMxNTQzKQogICogSW1wcm92ZSBzb21lIG9mIHRoZSBDdWN1bWJlciB0ZXN0IGNvZGUgKCMxNDkzKQogICogSW1wcm92ZSBjb21wYXJpc29ucyBvZiB0aW1lc3RhbXBzIGJ5IGlnbm9yaW5nIHRoZSBzZWNvbmRzICgjMTU4MikKCiMjIyBTaXRlIEVuaGFuY2VtZW50cwoKICAqIEZpeCBwYXJhbXMgZm9yIGBKZWt5bGxJbXBvcnQ6OldvcmRQcmVzcy5wcm9jZXNzYCBhcmd1bWVudHMgKCMxNTU0KQogICogQWRkIGBqZWt5bGwtc3VnZ2VzdGVkLXR3ZWV0YCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMxNTU1KQogICogTGluayB0byBMaXF1aWQncyBkb2NzIGZvciB0YWdzIGFuZCBmaWx0ZXJzICgjMTU1MykKICAqIEFkZCBub3RlIGFib3V0IGluc3RhbGxpbmcgWGNvZGUgb24gdGhlIE1hYyBpbiB0aGUgSW5zdGFsbGF0aW9uIGRvY3MgKCMxNTYxKQogICogU2ltcGxpZnkvZ2VuZXJhbGl6ZSBwYWdpbmF0aW9uIGRvY3MgKCMxNTc3KQogICogQWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSBuZXcgZGF0YSBzb3VyY2VzIGZlYXR1cmUgKCMxNTAzKQogICogQWRkIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGNyZWF0ZSBnZW5lcmF0b3JzICgjMTU5MCwgIzE1OTIpCiAgKiBJbXByb3ZlIHRoZSBpbnN0cnVjdGlvbnMgZm9yIG1pbWlja2luZyBHaXRIdWIgRmxhdm9yZWQgTWFya2Rvd24gKCMxNjE0KQogICogQWRkIGBqZWt5bGwtaW1wb3J0YCB3YXJuaW5nIG5vdGUgb2YgbWlzc2luZyBkZXBlbmRlbmNpZXMgKCMxNjI2KQogICogRml4IGdyYW1tYXIgaW4gdGhlIFVzYWdlIHNlY3Rpb24gKCMxNjM1KQogICogQWRkIGRvY3VtZW50YXRpb24gZm9yIHRoZSB1c2Ugb2YgZ2VtcyBhcyBwbHVnaW5zICgjMTY1NikKICAqIERvY3VtZW50IHRoZSBleGlzdGVuY2Ugb2YgYSBmZXcgYWRkaXRpb25hbCBwbHVnaW5zICgjMTQwNSkKICAqIERvY3VtZW50IHRoYXQgdGhlIGBkYXRlX3RvX3N0cmluZ2AgYWx3YXlzIHJldHVybnMgYSB0d28gZGlnaXQgZGF5ICgjMTY2MykKICAqIEZpeCBuYXZpZ2F0aW9uIGluIHRoZSAiV29ya2luZyB3aXRoIERyYWZ0cyIgcGFnZSAoIzE2NjcpCiAgKiBGaXggYW4gZXJyb3Igd2l0aCB0aGUgZGF0YSBkb2N1bWVudGF0aW9uICgjMTY5MSkKCiMjIDEuMi4xIC8gMjAxMy0wOS0xNAoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFByaW50IGJldHRlciBtZXNzYWdlcyBmb3IgZGV0YWNoZWQgc2VydmVyLiBNdXRlIG91dHB1dCBvbiBkZXRhY2guICgjMTUxOCkKICAqIERpc2FibGUgcmV2ZXJzZSBsb29rdXAgd2hlbiBydW5uaW5nIGBqZWt5bGwgc2VydmVgICgjMTM2MykKICAqIFVwZ3JhZGUgUmVkQ2FycGV0IGRlcGVuZGVuY3kgdG8gYH4+IDIuMy4wYCAoIzE1MTUpCiAgKiBVcGdyYWRlIHRvIExpcXVpZCBgPj0gMi41LjIsIDwgMi42YCAoIzE1MzYpCgojIyMgQnVnIEZpeGVzCgogICogRml4IGZpbGUgZGlzY3JlcGFuY3kgaW4gZ2Vtc3BlYyAoIzE1MjIpCiAgKiBGb3JjZSByZW5kZXJpbmcgb2YgSW5jbHVkZSB0YWcgKCMxNTI1KQoKIyMjIERldmVsb3BtZW50IEZpeGVzCgogICogQWRkIGEgcmFrZSB0YXNrIHRvIGdlbmVyYXRlIGEgbmV3IHJlbGVhc2UgcG9zdCAoIzE0MDQpCiAgKiBNdXRlIExTSSBvdXRwdXQgaW4gdGVzdHMgKCMxNTMxKQogICogVXBkYXRlIGNvbnRyaWJ1dG9yIGRvY3VtZW50YXRpb24gKCMxNTM3KQoKIyMjIFNpdGUgRW5oYW5jZW1lbnRzCgogICogRml4IGEgY291cGxlIG9mIHZhbGlkYXRpb24gZXJyb3JzIG9uIHRoZSBzaXRlICgjMTUxMSkKICAqIE1ha2UgbmF2aWdhdGlvbiBtZW51cyByZXVzYWJsZSAoIzE1MDcpCiAgKiBGaXggbGluayB0byBIaXN0b3J5IHBhZ2UgZnJvbSBSZWxlYXNlIHYxLjIuMCBub3RlcyBwb3N0LgogICogRml4IG1hcmt1cCBpbiBIaXN0b3J5IGZpbGUgZm9yIGNvbW1hbmQgbGluZSBvcHRpb25zICgjMTUxMikKICAqIEV4cGFuZCAxLjIgcmVsZWFzZSBwb3N0IHRpdGxlIHRvIDEuMi4wICgjMTUxNikKCiMjIDEuMi4wIC8gMjAxMy0wOS0wNgoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIERpc2FibGUgYXV0b21hdGljYWxseS1nZW5lcmF0ZWQgZXhjZXJwdHMgd2hlbiBgZXhjZXJwdF9zZXBhcmF0b3JgIGlzIGAiImAuICgjMTM4NikKICAqIEFkZCBjaGVja2luZyBmb3IgVVJMIGNvbmZsaWN0cyB3aGVuIHJ1bm5pbmcgYGpla3lsbCBkb2N0b3JgICgjMTM4OSkKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBDYXRjaCBhbmQgZml4IGludmFsaWQgYHBhZ2luYXRlYCB2YWx1ZXMgKCMxMzkwKQogICogUmVtb3ZlIHN1cGVyZmx1b3VzIGBkaXYuY29udGFpbmVyYCBmcm9tIHRoZSBkZWZhdWx0IGh0bWwgdGVtcGxhdGUgZm9yIGBqZWt5bGwgbmV3YCAoIzEzMTUpCiAgKiBBZGQgYC1EYCBzaG9ydC1mb3JtIHN3aXRjaCBmb3IgdGhlIGRyYWZ0cyBvcHRpb24gKCMxMzk0KQogICogVXBkYXRlIHRoZSBsaW5rcyBpbiB0aGUgc2l0ZSB0ZW1wbGF0ZSBmb3IgVHdpdHRlciBhbmQgR2l0SHViICgjMTQwMCkKICAqIFVwZGF0ZSBkdW1teSBlbWFpbCBhZGRyZXNzIHRvIGV4YW1wbGUuY29tIGRvbWFpbiAoIzE0MDgpCiAgKiBVcGRhdGUgbm9ybWFsaXplLmNzcyB0byB2Mi4xLjIgYW5kIG1pbmlmeTsgYWRkIHJha2UgdGFzayB0byB1cGRhdGUgbm9ybWFsaXplLmNzcyB3aXRoIGdyZWF0ZXIgZWFzZS4gKCMxNDMwKQogICogQWRkIHRoZSBhYmlsaXR5IHRvIGRldGFjaCB0aGUgc2VydmVyIHJhbiBieSBgamVreWxsIHNlcnZlYCBmcm9tIGl0J3MgY29udHJvbGxpbmcgdGVybWluYWwgKCMxNDQzKQogICogSW1wcm92ZSBwZXJtYWxpbmsgZ2VuZXJhdGlvbiBmb3IgVVJMcyB3aXRoIHNwZWNpYWwgY2hhcmFjdGVycyAoIzk0NCkKICAqIEV4cG9zZSB0aGUgY3VycmVudCBKZWt5bGwgdmVyc2lvbiB0byBwb3N0cyBhbmQgcGFnZXMgdmlhIGEgbmV3IGBqZWt5bGwudmVyc2lvbmAgdmFyaWFibGUgKCMxNDgxKQoKIyMjIEJ1ZyBGaXhlcwoKICAqIE1hcmtkb3duIGV4dGVuc2lvbiBtYXRjaGluZyBtYXRjaGVzIG9ubHkgZXhhY3QgbWF0Y2hlcyAoIzEzODIpCiAgKiBGaXhlZCBOb01ldGhvZEVycm9yIHdoZW4gbWVzc2FnZSBwYXNzZWQgdG8gYFN0ZXZlbnNvbiNtZXNzYWdlYCBpcyBuaWwgKCMxMzg4KQogICogVXNlIGJpbmFyeSBtb2RlIHdoZW4gd3JpdGluZyBmaWxlICgjMTM2NCkKICAqIEZpeCAndW5kZWZpbmVkIG1ldGhvZCBgZW5jb2RpbmdgIGZvciAibWFpbHRvIicgZXJyb3JzIHcvIFJ1YnkgMS44IGFuZCBLcmFtZG93biA+IDAuMTQuMCAoIzEzOTcpCiAgKiBEbyBub3QgZm9yY2UgdGhlIHBlcm1hbGluayB0byBiZSBhIGRpciBpZiBpdCBlbmRzIG9uIC5odG1sICgjOTYzKQogICogV2hlbiBhIExpcXVpZCBFeGNlcHRpb24gaXMgY2F1Z2h0LCBzaG93IHRoZSBmdWxsIHBhdGggcmVsLiB0byBzaXRlIHNvdXJjZSAoIzE0MTUpCiAgKiBQcm9wZXJseSByZWFkIGluIHRoZSBjb25maWcgb3B0aW9ucyB3aGVuIHNlcnZpbmcgdGhlIGRvY3MgbG9jYWxseSAoIzE0NDQpCiAgKiBGaXhlZCBgLS1sYXlvdXRzYCBvcHRpb24gZm9yIGBidWlsZGAgYW5kIGBzZXJ2ZWAgY29tbWFuZHMgKCMxNDU4KQogICogUmVtb3ZlIGtyYW1kb3duIGFzIGEgcnVudGltZSBkZXBlbmRlbmN5IHNpbmNlIGl0J3Mgb3B0aW9uYWwgKCMxNDk4KQogICogUHJvdmlkZSBwcm9wZXIgZXJyb3IgaGFuZGxpbmcgZm9yIGludmFsaWQgZmlsZSBuYW1lcyBpbiB0aGUgaW5jbHVkZSB0YWcgKCMxNDk0KQoKIyMjIERldmVsb3BtZW50IEZpeGVzCgogICogUmVtb3ZlIHJlZHVuZGFudCBhcmd1bWVudCB0byBKZWt5bGw6OkNvbW1hbmRzOjpOZXcjc2NhZmZvbGRfcG9zdF9jb250ZW50ICgjMTM1NikKICAqIEFkZCBuZXcgZGVwZW5kZW5jaWVzIHRvIHRoZSBSRUFETUUgKCMxMzYwKQogICogRml4IGxpbmsgdG8gY29udHJpYnV0aW5nIHBhZ2UgaW4gUkVBRE1FICgjMTQyNCkKICAqIFVwZGF0ZSBUb21Eb2MgaW4gUGFnZXIjaW5pdGlhbGl6ZSB0byBtYXRjaCBwYXJhbXMgKCMxNDQxKQogICogUmVmYWN0b3IgYFNpdGUjY2xlYW51cGAgaW50byBgSmVreWxsOjpTaXRlOjpDbGVhbmVyYCBjbGFzcyAoIzE0MjkpCiAgKiBTZXZlcmFsIG90aGVyIHNtYWxsIG1pbm9yIHJlZmFjdG9yaW5ncyAoIzEzNDEpCiAgKiBJZ25vcmUgYF9zaXRlYCBpbiBqZWt5bGxyYi5jb20gZGVwbG95ICgjMTQ4MCkKICAqIEFkZCBHZW0gdmVyc2lvbiBhbmQgZGVwZW5kZW5jeSBiYWRnZSB0byBSRUFETUUgKCMxNDk3KQoKIyMjIFNpdGUgRW5oYW5jZW1lbnRzCgogICogQWRkIGluZm8gYWJvdXQgbmV3IHJlbGVhc2VzICgjMTM1MykKICAqIFVwZGF0ZSBwbHVnaW4gbGlzdCB3aXRoIGpla3lsbC1yc3MgcGx1Z2luICgjMTM1NCkKICAqIFVwZGF0ZSB0aGUgc2l0ZSBsaXN0IHBhZ2Ugd2l0aCBSdWJ5J3Mgb2ZmaWNpYWwgc2l0ZSAoIzEzNTgpCiAgKiBBZGQgYGpla3lsbC1kaXRhYWAgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMTM3MCkKICAqIEFkZCBgcG9zdGZpbGVzYCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMxMzczKQogICogRm9yIGludGVybmFsIGxpbmtzLCB1c2UgZnVsbCBwYXRoIGluY2x1ZGluZyB0cmFpbGluZyBgL2AgKCMxNDExKQogICogVXNlIGN1cmx5IGFwb3N0cm9waGVzIGluIHRoZSBkb2NzICgjMTQxOSkKICAqIFVwZGF0ZSB0aGUgZG9jcyBmb3IgUmVkY2FycGV0IGluIEpla3lsbCAoIzE0MTgpCiAgKiBBZGQgYHBsdXJhbGl6ZWAgYW5kIGByZWFkaW5nX3RpbWVgIGZpbHRlcnMgdG8gZG9jcyAoIzE0MzkpCiAgKiBGaXggbWFya3VwIGZvciB0aGUgS3JhbWRvd24gb3B0aW9ucyAoIzE0NDUpCiAgKiBGaXggdHlwb3MgaW4gdGhlIEhpc3RvcnkgZmlsZSAoIzE0NTQpCiAgKiBBZGQgdHJhaWxpbmcgc2xhc2ggdG8gc2l0ZSdzIHBvc3QgVVJMICgjMTQ2MikKICAqIENsYXJpZnkgdGhhdCBgLS1jb25maWdgIHdpbGwgdGFrZSBtdWx0aXBsZSBmaWxlcyAoIzE0NzQpCiAgKiBGaXggZG9jcy90ZW1wbGF0ZXMubWQgcHJpdmF0ZSBnaXN0IGV4YW1wbGUgKCMxNDc3KQogICogVXNlIGBzaXRlLnJlcG9zaXRvcnlgIGZvciBKZWt5bGwncyBHaXRIdWIgVVJMICgjMTQ2MykKICAqIEFkZCBgamVreWxsLXBhZ2VsZXNzLXJlZGlyZWN0c2AgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMTQ4NikKICAqIENsYXJpZnkgdGhhdCBgZGF0ZV90b194bWxzY2hlbWFgIHJldHVybnMgYW4gSVNPIDg2MDEgc3RyaW5nICgjMTQ4OCkKICAqIEFkZCBgamVreWxsLWdvb2QtaW5jbHVkZWAgdG8gbGlzdCBvZiB0aGlyZC1wYXJ0eSBwbHVnaW5zICgjMTQ5MSkKICAqIFhNTCBlc2NhcGUgdGhlIGJsb2cgcG9zdCB0aXRsZSBpbiBvdXIgZmVlZCAoIzE1MDEpCiAgKiBBZGQgYGpla3lsbC10b2MtZ2VuZXJhdG9yYCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMgKCMxNTA2KQoKIyMgMS4xLjIgLyAyMDEzLTA3LTI1CgojIyMgQnVnIEZpeGVzCgogICogUmVxdWlyZSBMaXF1aWQgMi41LjEgKCMxMzQ5KQoKIyMgMS4xLjEgLyAyMDEzLTA3LTI0CgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogUmVtb3ZlIHN1cGVyZmx1b3VzIGB0YWJsZWAgc2VsZWN0b3IgZnJvbSBtYWluLmNzcyBpbiBgamVreWxsIG5ld2AgdGVtcGxhdGUgKCMxMzI4KQogICogQWJvcnQgd2l0aCBub24temVybyBleGl0IGNvZGVzICgjMTMzOCkKCiMjIyBCdWcgRml4ZXMKCiAgKiBGaXggdXAgdGhlIHJlbmRlcmluZyBvZiBleGNlcnB0cyAoIzEzMzkpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBBZGQgSmVreWxsIEltYWdlIFRhZyB0byB0aGUgcGx1Z2lucyBsaXN0ICgjMTMwNikKICAqIFJlbW92ZSBlcnJvbmVvdXMgc3RhdGVtZW50IHRoYXQgYHNpdGUucGFnZXNgIGFyZSBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkuCiAgKiBBZGQgaW5mbyBhYm91dCB0aGUgYF9kcmFmdHNgIGRpcmVjdG9yeSB0byB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBkb2NzICgjMTMyMCkKICAqIEltcHJvdmUgdGhlIGxheW91dCBvZiB0aGUgcGx1Z2luIGxpc3RpbmcgYnkgb3JnYW5pemluZyBpdCBpbnRvIGNhdGVnb3JpZXMgKCMxMzEwKQogICogQWRkIGdlbmVyYXRvci1qZWt5bGxyYiBhbmQgZ3J1bnQtamVreWxsIHRvIHBsdWdpbnMgcGFnZSAoIzEzMzApCiAgKiBNZW50aW9uIEtyYW1kb3duIGFzIG9wdGlvbiBmb3IgbWFya2Rvd24gcGFyc2VyIG9uIEV4dHJhcyBwYWdlICgjMTMxOCkKICAqIFVwZGF0ZSBRdWljay1TdGFydCBwYWdlIHRvIGluY2x1ZGUgcmVtaW5kZXIgdGhhdCBhbGwgcmVxdWlyZW1lbnRzIG11c3QgYmUgaW5zdGFsbGVkICgjMTMyNykKICAqIENoYW5nZSBmaWxlbmFtZSBpbiBgaW5jbHVkZWAgZXhhbXBsZSB0byBhbiBIVE1MIGZpbGUgc28gYXMgbm90IHRvIGluZGljYXRlIHRoYXQgSmVreWxsIHdpbGwgYXV0b21hdGljYWxseSBjb252ZXJ0IHRoZW0uICgjMTMwMykKICAqIEFkZCBhbiBSU1MgZmVlZCBmb3IgY29tbWl0cyB0byBKZWt5bGwgKCMxMzQzKQoKIyMgMS4xLjAgLyAyMDEzLTA3LTE0CgojIyMgTWFqb3IgRW5oYW5jZW1lbnRzCgogICogQWRkIGBkb2NzYCBzdWJjb21tYW5kIHRvIHJlYWQgSmVreWxsJ3MgZG9jcyB3aGVuIG9mZmxpbmUuICgjMTA0NikKICAqIFN1cHBvcnQgcGFzc2luZyBwYXJhbWV0ZXJzIHRvIHRlbXBsYXRlcyBpbiBgaW5jbHVkZWAgdGFnICgjMTIwNCkKICAqIEFkZCBzdXBwb3J0IGZvciBMaXF1aWQgdGFncyB0byBwb3N0IGV4Y2VycHRzICgjMTMwMikKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBTZWFyY2ggdGhlIGhpZXJhcmNoeSBvZiBwYWdpbmF0aW9uIHBhdGggdXAgdG8gc2l0ZSByb290IHRvIGRldGVybWluZSB0ZW1wbGF0ZSBwYWdlIGZvciBwYWdpbmF0aW9uLiAoIzExOTgpCiAgKiBBZGQgdGhlIGFiaWxpdHkgdG8gZ2VuZXJhdGUgYSBuZXcgSmVreWxsIHNpdGUgd2l0aG91dCBhIHRlbXBsYXRlICgjMTE3MSkKICAqIFVzZSByZWRjYXJwZXQgYXMgdGhlIGRlZmF1bHQgbWFya2Rvd24gZW5naW5lIGluIG5ld2x5IGdlbmVyYXRlZCBzaXRlcyAoIzEyNDUsICMxMjQ3KQogICogQWRkIGByZWRjYXJwZXRgIGFzIGEgcnVudGltZSBkZXBlbmRlbmN5IHNvIGBqZWt5bGwgYnVpbGRgIHdvcmtzIG91dC1vZi10aGUtYm94IGZvciBuZXcgc2l0ZXMuICgjMTI0NykKICAqIEluIHRoZSBnZW5lcmF0ZWQgc2l0ZSwgcmVtb3ZlIGZpbGVzIHRoYXQgd2lsbCBiZSByZXBsYWNlZCBieSBhIGRpcmVjdG9yeSAoIzExMTgpCiAgKiBGYWlsIGxvdWRseSBpZiBhIHVzZXItc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gZmlsZSBkb2Vzbid0IGV4aXN0ICgjMTA5OCkKICAqIEFsbG93IGZvciBhbGwgb3B0aW9ucyBmb3IgS3JhbWRvd24gSFRNTCBDb252ZXJ0ZXIgKCMxMjAxKQoKIyMjIEJ1ZyBGaXhlcwoKICAqIEZpeCBwYWdpbmF0aW9uIGluIHN1YmRpcmVjdG9yaWVzLiAoIzExOTgpCiAgKiBGaXggYW4gaXNzdWUgd2l0aCBkaXJlY3RvcmllcyBhbmQgcGVybWFsaW5rcyB0aGF0IGhhdmUgYSBwbHVzIHNpZ24gKCspIGluIHRoZW0gKCMxMjE1KQogICogUHJvdmlkZSBiZXR0ZXIgZXJyb3IgcmVwb3J0aW5nIHdoZW4gZ2VuZXJhdGluZyBzaXRlcyAoIzEyNTMpCiAgKiBMYXRlc3QgcG9zdHMgZmlyc3QgaW4gbm9uLUxTSSBgcmVsYXRlZF9wb3N0c2AgKCMxMjcxKQoKIyMjIERldmVsb3BtZW50IEZpeGVzCgogICogTWVyZ2UgdGhlIHRoZW1lIGFuZCBsYXlvdXQgQ3VjdW1iZXIgc3RlcHMgaW50byBvbmUgc3RlcCAoIzExNTEpCiAgKiBSZXN0cmljdCBhY3RpdmVzdXBwb3J0IGRlcGVuZGVuY3kgdG8gcHJlLTQuMC4wIHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCBgPD0gMS45LjJgCiAgKiBJbmNsdWRlL2V4Y2x1ZGUgZGVwcmVjYXRpb24gaGFuZGxpbmcgc2ltcGxpZmljYXRpb24gKCMxMjg0KQogICogQ29udmVydCBSRUFETUUgdG8gTWFya2Rvd24uICgjMTI2NykKICAqIFJlZmFjdG9yIEpla3lsbDo6U2l0ZSAoIzExNDQpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBBZGQgIk5ld3MiIHNlY3Rpb24gZm9yIHJlbGVhc2Ugbm90ZXMsIGFsb25nIHdpdGggYW4gUlNTIGZlZWQgKCMxMDkzLCAjMTI4NSwgIzEyODYpCiAgKiBBZGQgIkhpc3RvcnkiIHBhZ2UuCiAgKiBSZXN0cnVjdHVyZWQgZG9jcyBzZWN0aW9ucyB0byBpbmNsdWRlICJNZXRhIiBzZWN0aW9uLgogICogQWRkIG1lc3NhZ2UgdG8gIlRlbXBsYXRlcyIgcGFnZSB0aGF0IHNwZWNpZmllcyB0aGF0IFB5dGhvbiBtdXN0IGJlIGluc3RhbGxlZCBpbiBvcmRlciB0byB1c2UgUHlnbWVudHMuICgjMTE4MikKICAqIFVwZGF0ZSBsaW5rIHRvIHRoZSBvZmZpY2lhbCBNYXJ1a3UgcmVwbyAoIzExNzUpCiAgKiBBZGQgZG9jdW1lbnRhdGlvbiBhYm91dCBgcGFnaW5hdGVfcGF0aGAgdG8gIlRlbXBsYXRlcyIgcGFnZSBpbiBkb2NzICgjMTEyOSkKICAqIEdpdmUgdGhlIHF1aWNrLXN0YXJ0IGd1aWRlIGl0cyBvd24gcGFnZSAoIzExOTEpCiAgKiBVcGRhdGUgUHJvVGlwIG9uIEluc3RhbGxhdGlvbiBwYWdlIGluIGRvY3MgdG8gcG9pbnQgdG8gYWxsIHRoZSBpbmZvIGFib3V0IFB5Z21lbnRzIGFuZCB0aGUgJ2hpZ2hsaWdodCcgdGFnLiAoIzExOTYpCiAgKiBSdW4gYHNpdGUvaW1nYCB0aHJvdWdoIEltYWdlT3B0aW0gKHRoYW5rcyBAcXJ1c2ghKSAoIzEyMDgpCiAgKiBBZGRlZCBKYWRlIENvbnZlcnRlciB0byBgc2l0ZS9kb2NzL3BsdWdpbnNgICgjMTIxMCkKICAqIEZpeCBsb2NhdGlvbiBvZiBkb2NzIHBhZ2VzIGluIENvbnRyaWJ1dGluZyBwYWdlcyAoIzEyMTQpCiAgKiBBZGQgUmVhZEluWE1pbnV0ZXMgcGx1Z2luIHRvIHRoZSBwbHVnaW4gbGlzdCAoIzEyMjIpCiAgKiBSZW1vdmUgcGx1Z2lucyBmcm9tIHRoZSBwbHVnaW4gbGlzdCB0aGF0IGhhdmUgZXF1aXZhbGVudHMgaW4gSmVreWxsIHByb3BlciAoIzEyMjMpCiAgKiBBZGQgamVreWxsLWFzc2V0cyB0byB0aGUgcGx1Z2luIGxpc3QgKCMxMjI1KQogICogQWRkIGpla3lsbC1wYW5kb2MtbXVsaXRwbGUtZm9ybWF0cyB0byB0aGUgcGx1Z2luIGxpc3QgKCMxMjI5KQogICogUmVtb3ZlIGRlYWQgbGluayB0byAiVXNpbmcgR2l0IHRvIG1haW50YWluIHlvdXIgYmxvZyIgKCMxMjI3KQogICogVGlkeSB1cCB0aGUgdGhpcmQtcGFydHkgcGx1Z2lucyBsaXN0aW5nICgjMTIyOCkKICAqIFVwZGF0ZSBjb250cmlidXRvciBpbmZvcm1hdGlvbiAoIzExOTIpCiAgKiBVcGRhdGUgVVJMIG9mIGFydGljbGUgYWJvdXQgQmxvZ2dlciBtaWdyYXRpb24gKCMxMjQyKQogICogU3BlY2lmeSB0aGF0IFJlZENhcnBldCBpcyB0aGUgZGVmYXVsdCBmb3IgbmV3IEpla3lsbCBzaXRlcyBvbiBRdWlja3N0YXJ0IHBhZ2UgKCMxMjQ3KQogICogQWRkZWQgYHNpdGUucGFnZXNgIHRvIFZhcmlhYmxlcyBwYWdlIGluIGRvY3MgKCMxMjUxKQogICogQWRkIFlvdWt1IGFuZCBUdWRvdSBFbWJlZCBsaW5rIG9uIFBsdWdpbnMgcGFnZS4gKCMxMjUwKQogICogQWRkIG5vdGUgdGhhdCBgZ2lzdGAgdGFnIHN1cHBvcnRzIHByaXZhdGUgZ2lzdHMuICgjMTI0OCkKICAqIEFkZCBgamVreWxsLXRpbWVhZ29gIHRvIGxpc3Qgb2YgdGhpcmQtcGFydHkgcGx1Z2lucy4gKCMxMjYwKQogICogQWRkIGBqZWt5bGwtc3dmb2JqZWN0YCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMuICgjMTI2MykKICAqIEFkZCBgamVreWxsLXBpY3R1cmUtdGFnYCB0byBsaXN0IG9mIHRoaXJkLXBhcnR5IHBsdWdpbnMuICgjMTI4MCkKICAqIFVwZGF0ZSB0aGUgR2l0SHViIFBhZ2VzIGRvY3VtZW50YXRpb24gcmVnYXJkaW5nIHJlbGF0aXZlIFVSTHMgKCMxMjkxKQogICogVXBkYXRlIHRoZSBTMyBkZXBsb3ltZW50IGRvY3VtZW50YXRpb24gKCMxMjk0KQogICogQWRkIHN1Z2dlc3Rpb24gZm9yIFhjb2RlIENMVCBpbnN0YWxsIHRvIHRyb3VibGVzaG9vdGluZyBwYWdlIGluIGRvY3MgKCMxMjk2KQogICogQWRkICdXb3JraW5nIHdpdGggZHJhZnRzJyBwYWdlIHRvIGRvY3MgKCMxMjg5KQogICogQWRkIGluZm9ybWF0aW9uIGFib3V0IHRpbWUgem9uZXMgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIGEgcGFnZSdzIGRhdGUgKCMxMzA0KQoKIyMgMS4wLjMgLyAyMDEzLTA2LTA3CgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogQWRkIHN1cHBvcnQgdG8gZ2lzdCB0YWcgZm9yIHByaXZhdGUgZ2lzdHMuICgjMTE4OSkKICAqIEZhaWwgbG91ZGx5IHdoZW4gTWFydWt1IGVycm9ycyBvdXQgKCMxMTkwKQogICogTW92ZSB0aGUgYnVpbGRpbmcgb2YgcmVsYXRlZCBwb3N0cyBpbnRvIHRoZWlyIG93biBjbGFzcyAoIzEwNTcpCiAgKiBSZW1vdmVkIHRyYWlsaW5nIHNwYWNlcyBpbiBzZXZlcmFsIHBsYWNlcyB0aHJvdWdob3V0IHRoZSBjb2RlICgjMTExNikKICAqIEFkZCBhIGAtLWZvcmNlYCBvcHRpb24gdG8gYGpla3lsbCBuZXdgICgjMTExNSkKICAqIENvbnZlcnQgSURzIGluIHRoZSBzaXRlIHRlbXBsYXRlIHRvIGNsYXNzZXMgKCMxMTcwKQoKIyMjIEJ1ZyBGaXhlcwoKICAqIEZpeCB0eXBvIGluIFN0ZXZlbnNvbiBjb25zdGFudCAiRVJST1IiLiAoIzExNjYpCiAgKiBSZW5hbWUgSmVreWxsOjpMb2dnZXIgdG8gSmVreWxsOjpTdGV2ZW5zb24gdG8gZml4IGluaGVyaXRhbmNlIGlzc3VlICgjMTEwNikKICAqIEV4aXQgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZSB3aGVuIGRlYWxpbmcgd2l0aCBhIExpcXVpZCBlcnJvciAoIzExMjEpCiAgKiBNYWtlIHRoZSBgZXhjbHVkZWAgYW5kIGBpbmNsdWRlYCBvcHRpb25zIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdpdGggdmVyc2lvbnMgb2YgSmVreWxsIHByaW9yIHRvIDEuMCAoIzExMTQpCiAgKiBGaXggcGFnaW5hdGlvbiBvbiBXaW5kb3dzICgjMTA2MykKICAqIEZpeCB0aGUgYXBwbGljYXRpb24gb2YgUHlnbWVudHMnIEdlbmVyaWMgT3V0cHV0IHN0eWxlIHRvIEdvIGNvZGUgKCMxMTU2KQoKIyMjIFNpdGUgRW5oYW5jZW1lbnRzCgogICogQWRkIGEgUHJvIFRpcCB0byBkb2NzIGFib3V0IGZyb250IG1hdHRlciB2YXJpYWJsZXMgYmVpbmcgb3B0aW9uYWwgKCMxMTQ3KQogICogQWRkIGNoYW5nZWxvZyB0byBzaXRlIGFzIEhpc3RvcnkgcGFnZSBpbiAvZG9jcy8gKCMxMDY1KQogICogQWRkIG5vdGUgdG8gVXBncmFkaW5nIHBhZ2UgYWJvdXQgbmV3IGNvbmZpZyBvcHRpb25zIGluIDEuMC54ICgjMTE0NikKICAqIERvY3VtZW50YXRpb24gZm9yIGBkYXRlX3RvX3JmYzgyMmAgYW5kIGB1cmlfZXNjYXBlYCAoIzExNDIpCiAgKiBEb2N1bWVudGF0aW9uIGhpZ2hsaWdodCBib3hlcyBzaG91bGRuJ3Qgc2hvdyBzY3JvbGxiYXJzIGlmIG5vdCBuZWNlc3NhcnkgKCMxMTIzKQogICogQWRkIGxpbmsgdG8gamVreWxsLW1pbmlidW5kbGUgaW4gdGhlIGRvYydzIHBsdWdpbnMgbGlzdCAoIzEwMzUpCiAgKiBRdWljayBwYXRjaCBmb3IgaW1wb3J0ZXJzIGRvY3VtZW50YXRpb24KICAqIEZpeCBwcmVmaXggZm9yIFdvcmRwcmVzc0RvdENvbSBpbXBvcnRlciBpbiBkb2NzICgjMTEwNykKICAqIEFkZCBqZWt5bGwtY29udGVudGJsb2NrcyBwbHVnaW4gdG8gZG9jcyAoIzEwNjgpCiAgKiBNYWtlIGNvZGUgYml0cyBpbiBub3RlcyBsb29rIG1vcmUgbmF0dXJhbCwgbW9yZSByZWFkYWJsZSAoIzEwODkpCiAgKiBGaXggbG9naWMgZm9yIGByZWxhdGl2ZV9wZXJtYWxpbmtzYCBpbnN0cnVjdGlvbnMgb24gVXBncmFkaW5nIHBhZ2UgKCMxMTAxKQogICogQWRkIGRvY3MgZm9yIHBvc3QgZXhjZXJwdCAoIzEwNzIpCiAgKiBBZGQgZG9jcyBmb3IgZ2lzdCB0YWcgKCMxMDcyKQogICogQWRkIGRvY3MgaW5kaWNhdGluZyB0aGF0IFB5Z21lbnRzIGRvZXMgbm90IG5lZWQgdG8gYmUgaW5zdGFsbGVkIHNlcGFyYXRlbHkgKCMxMDk5LCAjMTExOSkKICAqIFVwZGF0ZSB0aGUgbWlncmF0b3IgZG9jcyB0byBiZSBjdXJyZW50ICgjMTEzNikKICAqIEFkZCB0aGUgSmVreWxsIEdhbGxlcnkgUGx1Z2luIHRvIHRoZSBwbHVnaW4gbGlzdCAoIzExNDMpCgojIyMgRGV2ZWxvcG1lbnQgRml4ZXMKCiAgKiBVc2UgSmVreWxsLmxvZ2dlciBpbnN0ZWFkIG9mIEpla3lsbDo6U3RldmVuc29uIHRvIGxvZyB0aGluZ3MgKCMxMTQ5KQogICogRml4IHBlc2t5IEN1Y3VtYmVyIGluZmluaXRlIGxvb3AgKCMxMTM5KQogICogRG8gbm90IHdyaXRlIHBvc3RzIHdpdGggdGltZXpvbmVzIGluIEN1Y3VtYmVyIHRlc3RzICgjMTEyNCkKICAqIFVzZSBJU08gZm9ybWF0dGVkIGRhdGVzIGluIEN1Y3VtYmVyIGZlYXR1cmVzICgjMTE1MCkKCiMjIDEuMC4yIC8gMjAxMy0wNS0xMgoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIEFkZCBgamVreWxsIGRvY3RvcmAgY29tbWFuZCB0byBjaGVjayBzaXRlIGZvciBhbnkga25vd24gY29tcGF0aWJpbGl0eSBwcm9ibGVtcyAoIzEwODEpCiAgKiBCYWNrd2FyZHMtY29tcGF0aWJpbGl6ZSByZWxhdGl2ZSBwZXJtYWxpbmtzICgjMTA4MSkKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBBZGQgYSBgZGF0YS1sYW5nPSI8bGFuZz4iYCBhdHRyaWJ1dGUgdG8gUmVkY2FycGV0IGNvZGUgYmxvY2tzICgjMTA2NikKICAqIERlcHJlY2F0ZSBvbGQgY29uZmlnIGBzZXJ2ZXJfcG9ydGAsIG1hdGNoIHRvIGBwb3J0YCBpZiBgcG9ydGAgaXNuJ3Qgc2V0ICgjMTA4NCkKICAqIFVwZGF0ZSBweWdtZW50cy5yYiB2ZXJzaW9uIHRvIDAuNS4wICgjMTA2MSkKICAqIFVwZGF0ZSBLcmFtZG93biB2ZXJzaW9uIHRvIDEuMC4yICgjMTA2NykKCiMjIyBCdWcgRml4ZXMKCiAgKiBGaXggaXNzdWUgd2hlbiBjYXRlZ29yaWVzIGFyZSBudW1iZXJzICgjMTA3OCkKICAqIENhdGNoaW5nIHRoYXQgUmVkY2FycGV0IGdlbSBpc24ndCBpbnN0YWxsZWQgKCMxMDU5KQoKIyMjIFNpdGUgRW5oYW5jZW1lbnRzCgogICogQWRkIGRvY3VtZW50YXRpb24gYWJvdXQgYHJlbGF0aXZlX3Blcm1hbGlua3NgICgjMTA4MSkKICAqIFJlbW92ZSBweWdtZW50cy1pbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLCBhcyBweWdtZW50cy5yYiBpcyBidW5kbGVkIHdpdGggaXQgKCMxMDc5KQogICogTW92ZSBwYWdlcyB0byBiZSBQYWdlcyBmb3IgcmVhbHogKCM5ODUpCiAgKiBVcGRhdGVkIGxpbmtzIHRvIExpcXVpZCBkb2N1bWVudGF0aW9uICgjMTA3MykKCiMjIDEuMC4xIC8gMjAxMy0wNS0wOAoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIERvIG5vdCBmb3JjZSB1c2Ugb2YgYHRvY190b2tlbmAgd2hlbiB1c2luZyBgZ2VuZXJhdGVfdG9rYCBpbiBSRGlzY291bnQgKCMxMDQ4KQogICogQWRkIG5ld2VyIGBsYW5ndWFnZS1gIGNsYXNzIG5hbWUgcHJlZml4IHRvIGNvZGUgYmxvY2tzICgjMTAzNykKICAqIENvbW1hbmRlciBlcnJvciBtZXNzYWdlIG5vdyBwcmVmZXJyZWQgb3ZlciBwcm9jZXNzIGFib3J0IHdpdGggaW5jb3JyZWN0IGFyZ3MgKCMxMDQwKQoKIyMjIEJ1ZyBGaXhlcwoKICAqIE1ha2UgUmVkY2FycGV0IHJlc3BlY3QgdGhlIHB5Z21lbnRzIGNvbmZpZ3VyYXRpb24gb3B0aW9uICgjMTA1MykKICAqIEZpeCB0aGUgaW5kZXggYnVpbGQgd2l0aCBMU0kgKCMxMDQ1KQogICogRG9uJ3QgcHJpbnQgZGVwcmVjYXRpb24gd2FybmluZyB3aGVuIG5vIGFyZ3VtZW50cyBhcmUgc3BlY2lmaWVkLiAoIzEwNDEpCiAgKiBBZGQgbWlzc2luZyBgPC9kaXY+YCB0byBzaXRlIHRlbXBsYXRlIHVzZWQgYnkgYG5ld2Agc3ViY29tbWFuZCwgZml4ZWQgdHlwb3MgaW4gY29kZSAoIzEwMzIpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBDaGFuZ2VkIGh0dHBzIHRvIGh0dHAgaW4gdGhlIEdpdEh1YiBQYWdlcyBsaW5rICgjMTA1MSkKICAqIFJlbW92ZSBDU1MgY3J1ZnQsIGZpeCB0eXBvcywgZml4IEhUTUwgZXJyb3JzICgjMTAyOCkKICAqIFJlbW92aW5nIG1hbnVhbCBpbnN0YWxsIG9mIFBpcCBhbmQgRGlzdHJpYnV0ZSAoIzEwMjUpCiAgKiBVcGRhdGVkIFVSTCBmb3IgTWFya2Rvd24gcmVmZXJlbmNlcyBwbHVnaW4gKCMxMDIyKQoKIyMjIERldmVsb3BtZW50IEZpeGVzCgogICogTWFya2Rvd25pZnkgaGlzdG9yeSBmaWxlICgjMTAyNykKICAqIFVwZGF0ZSBsaW5rcyBvbiBSRUFETUUgdG8gcG9pbnQgdG8gbmV3IGpla3lsbHJiLmNvbSAoIzEwMTgpCgojIyAxLjAuMCAvIDIwMTMtMDUtMDYKCiMjIyBNYWpvciBFbmhhbmNlbWVudHMKCiAgKiBBZGQgYGpla3lsbCBuZXdgIHN1YmNvbW1hbmQ6IGdlbmVyYXRlIGEgSmVreWxsIHNjYWZmb2xkICgjNzY0KQogICogUmVmYWN0b3JlZCBKZWt5bGwgY29tbWFuZHMgaW50byBzdWJjb21tYW5kczogYnVpbGQsIHNlcnZlLCBhbmQgbWlncmF0ZS4gKCM2OTApCiAgKiBSZW1vdmVkIGltcG9ydGVycy9taWdyYXRvcnMgZnJvbSBtYWluIHByb2plY3QsIG1pZ3JhdGVkIHRvIGpla3lsbC1pbXBvcnQgc3ViLWdlbSAoIzc5MykKICAqIEFkZGVkIGFiaWxpdHkgdG8gcmVuZGVyIGRyYWZ0cyBpbiBgX2RyYWZ0c2AgZm9sZGVyIHZpYSBjb21tYW5kIGxpbmUgKCM4MzMpCiAgKiBBZGQgb3JkaW5hbCBkYXRlIHBlcm1hbGluayBzdHlsZSAoLzpjYXRlZ29yaWVzLzp5ZWFyLzp5X2RheS86dGl0bGUuaHRtbCkgKCM5MjgpCgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogU2l0ZSB0ZW1wbGF0ZSBIVE1MNS1pZmllZCAoIzk2NCkKICAqIFVzZSBwb3N0J3MgZGlyZWN0b3J5IHBhdGggd2hlbiBtYXRjaGluZyBmb3IgdGhlIGBwb3N0X3VybGAgdGFnICgjOTk4KQogICogTG9vc2VuIGRlcGVuZGVuY3kgb24gUHlnbWVudHMgc28gaXQncyBvbmx5IHJlcXVpcmVkIHdoZW4gaXQncyBuZWVkZWQgKCMxMDE1KQogICogUGFyc2Ugc3RyaW5ncyBpbnRvIFRpbWUgb2JqZWN0cyBmb3IgZGF0ZS1yZWxhdGVkIExpcXVpZCBmaWx0ZXJzICgjMTAxNCkKICAqIFRlbGwgdGhlIHVzZXIgaWYgdGhlcmUgaXMgbm8gc3ViY29tbWFuZCBzcGVjaWZpZWQgKCMxMDA4KQogICogRnJlYWsgb3V0IGlmIHRoZSBkZXN0aW5hdGlvbiBvZiBgamVreWxsIG5ld2AgZXhpc3RzIGFuZCBpcyBub24tZW1wdHkgKCM5ODEpCiAgKiBBZGQgYHRpbWV6b25lYCBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3IgY29tcGlsYXRpb24gKCM5NTcpCiAgKiBBZGQgZGVwcmVjYXRpb24gbWVzc2FnZXMgZm9yIHByZS0xLjAgQ0xJIG9wdGlvbnMgKCM5NTkpCiAgKiBSZWZhY3RvciBhbmQgY29sb3JpemUgbG9nZ2luZyAoIzk1OSkKICAqIFJlZmFjdG9yIE1hcmtkb3duIHBhcnNpbmcgKCM5NTUpCiAgKiBBZGRlZCBhcHBsaWNhdGlvbi92bmQuYXBwbGUucGtwYXNzIHRvIG1pbWUudHlwZXMgc2VydmVkIGJ5IFdFQnJpY2sgKCM5MDcpCiAgKiBNb3ZlIHRlbXBsYXRlIHNpdGUgdG8gZGVmYXVsdCBtYXJrZG93biByZW5kZXJlciAoIzk2MSkKICAqIEV4cG9zZSBuZXcgYXR0cmlidXRlIHRvIExpcXVpZCB2aWEgYHBhZ2VgOiBgcGFnZS5wYXRoYCAoIzk1MSkKICAqIEFjY2VwdCBtdWx0aXBsZSBjb25maWcgZmlsZXMgZnJvbSBjb21tYW5kIGxpbmUgKCM5NDUpCiAgKiBBZGQgcGFnZSB2YXJpYWJsZSB0byBsaXF1aWQgY3VzdG9tIHRhZ3MgYW5kIGJsb2NrcyAoIzQxMykKICAqIEFkZCBgcGFnaW5hdG9yLnByZXZpb3VzX3BhZ2VfcGF0aGAgYW5kIGBwYWdpbmF0b3IubmV4dF9wYWdlX3BhdGhgICgjOTQyKQogICogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yICdhdXRvJyAoIzgyMSwgIzkzNCkKICAqIEFkZGVkIGRhdGVfdG9fcmZjODIyIHVzZWQgb24gUlNTIGZlZWRzICgjODkyKQogICogVXBncmFkZSB2ZXJzaW9uIG9mIHB5Z21lbnRzLnJiIHRvIDAuNC4yICgjOTI3KQogICogQWRkZWQgc2hvcnQgbW9udGggKGUuZy4gIlNlcCIpIHRvIHBlcm1hbGluayBzdHlsZSBvcHRpb25zIGZvciBwb3N0cyAoIzg5MCkKICAqIEV4cG9zZSBzaXRlLmJhc2V1cmwgdG8gTGlxdWlkIHRlbXBsYXRlcyAoIzg2OSkKICAqIEFkZHMgZXhjZXJwdCBhdHRyaWJ1dGUgdG8gcG9zdHMgd2hpY2ggY29udGFpbnMgZmlyc3QgcGFyYWdyYXBoIG9mIGNvbnRlbnQgKCM4MzcpCiAgKiBBY2NlcHQgY3VzdG9tIGNvbmZpZ3VyYXRpb24gZmlsZSB2aWEgQ0xJICgjODYzKQogICogTG9hZCBpbiBHaXRIdWIgUGFnZXMgTUlNRSBUeXBlcyBvbiBgamVreWxsIHNlcnZlYCAoIzg0NywgIzg3MSkKICAqIEltcHJvdmUgZGVidWdhYmlsaXR5IG9mIGVycm9yIG1lc3NhZ2UgZm9yIGEgbWFsZm9ybWVkIGhpZ2hsaWdodCB0YWcgKCM3ODUpCiAgKiBBbGxvdyBzeW1saW5rZWQgZmlsZXMgaW4gdW5zYWZlIG1vZGUgKCM4MjQpCiAgKiBBZGQgJ2dpc3QnIExpcXVpZCB0YWcgdG8gY29yZSAoIzgyMiwgIzg2MSkKICAqIE5ldyBmb3JtYXQgb2YgSmVreWxsIG91dHB1dCAoIzc5NSkKICAqIFJlaW5zdGF0ZSBgLS1saW1pdF9wb3N0c2AgYW5kIGAtLWZ1dHVyZWAgc3dpdGNoZXMgKCM3ODgpCiAgKiBSZW1vdmUgYW1iaWd1aXR5IGZyb20gY29tbWFuZCBkZXNjcmlwdGlvbnMgKCM4MTUpCiAgKiBGaXggU2FmZVlBTUwgV2FybmluZ3MgKCM4MDcpCiAgKiBSZWxheGVkIEtyYW1kb3duIHZlcnNpb24gdG8gMC4xNCAoIzgwOCkKICAqIEFsaWFzZWQgYGpla3lsbCBzZXJ2ZXJgIHRvIGBqZWt5bGwgc2VydmVgLiAoIzc5MikKICAqIFVwZGF0ZWQgZ2VtIHZlcnNpb25zIGZvciBLcmFtZG93biwgUmFrZSwgU2hvdWxkYSwgQ3VjdW1iZXIsIGFuZCBSZWRDYXJwZXQuICgjNzQ0KQogICogUmVmYWN0b3JlZCBKZWt5bGwgc3ViY29tbWFuZHMgaW50byBKZWt5bGw6OkNvbW1hbmRzIHN1Ym1vZHVsZSwgd2hpY2ggbm93IGNvbnRhaW5zIHRoZW0gKCM3NjgpCiAgKiBSZXNjdWUgZnJvbSBpbXBvcnQgZXJyb3JzIGluIFdvcmRwcmVzcy5jb20gbWlncmF0b3IgKCM2NzEpCiAgKiBNYXNzaXZlbHkgYWNjZWxlcmF0ZSBMU0kgcGVyZm9ybWFuY2UgKCM2NjQpCiAgKiBUcnVuY2F0ZSBwb3N0IHNsdWdzIHdoZW4gaW1wb3J0aW5nIGZyb20gVHVtYmxyICgjNDk2KQogICogQWRkIGdsb2Igc3VwcG9ydCB0byBpbmNsdWRlLCBleGNsdWRlIG9wdGlvbiAoIzc0MykKICAqIExheW91dCBvZiBQYWdlIG9yIFBvc3QgZGVmYXVsdHMgdG8gJ3BhZ2UnIG9yICdwb3N0JywgcmVzcGVjdGl2ZWx5ICgjNTgwKSBSRVBFQUxFRCBieSAoIzk3NykKICAqICJLZWVwIGZpbGVzIiBmZWF0dXJlICgjNjg1KQogICogT3V0cHV0IGZ1bGwgcGF0aCAmIG5hbWUgZm9yIGZpbGVzIHRoYXQgZG9uJ3QgcGFyc2UgKCM3NDUpCiAgKiBBZGQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBkaXJlY3RvcnkgcHJvdGVjdGlvbiAoIzUzNSkKICAqIEJldHRlciBZQU1MIGVycm9yIG1lc3NhZ2UgKCM3MTgpCiAgKiBCdWcgRml4ZXMKICAqIFBhZ2luYXRlIGluIHN1YmRpcmVjdG9yaWVzIHByb3Blcmx5ICgjMTAxNikKICAqIEVuc3VyZSBwb3N0IGFuZCBwYWdlIFVSTHMgaGF2ZSBhIGxlYWRpbmcgc2xhc2ggKCM5OTIpCiAgKiBDYXRjaCBhbGwgZXhjZXB0aW9ucywgbm90IGp1c3QgU3RhbmRhcmRFcnJvciBkZXNjZW5kZW50cyAoIzEwMDcpCiAgKiBCdWxsZXQtcHJvb2YgYGxpbWl0X3Bvc3RzYCBvcHRpb24gKCMxMDA0KQogICogUmVhZCBpbiBZQU1MIGFzIFVURi04IHRvIGFjY2VwdCBub24tQVNDSUkgY2hhcnMgKCM4MzYpCiAgKiBGaXggdGhlIENMSSBvcHRpb24gYC0tcGx1Z2luc2AgdG8gYWN0dWFsbHkgYWNjZXB0IGRpcnMgYW5kIGZpbGVzICgjOTkzKQogICogQWxsb3cgJ2V4Y2VycHQnIGluIFlBTUwgZnJvbnQgbWF0dGVyIHRvIG92ZXJyaWRlIHRoZSBleHRyYWN0ZWQgZXhjZXJwdCAoIzk0NikKICAqIEZpeCBjYXNjYWRlIHByb2JsZW0gd2l0aCBzaXRlLmJhc2V1cmwsIHNpdGUucG9ydCBhbmQgc2l0ZS5ob3N0LiAoIzkzNSkKICAqIEZpbHRlciBvdXQgZGlyZWN0b3JpZXMgd2l0aCB2YWxpZCBwb3N0IG5hbWVzICgjODc1KQogICogRml4IHN5bWxpbmtlZCBzdGF0aWMgZmlsZXMgbm90IGJlaW5nIGNvcnJlY3RseSBidWlsdCBpbiB1bnNhZmUgbW9kZSAoIzkwOSkKICAqIEZpeCBpbnRlZ3JhdGlvbiB3aXRoIGRpcmVjdG9yeV93YXRjaGVyIDEuNC54ICgjOTE2KQogICogQWNjZXB0aW5nIHN0cmluZ3MgYXMgYXJndW1lbnRzIHRvIGpla3lsbC1pbXBvcnQgY29tbWFuZCAoIzkxMCkKICAqIEZvcmNlIHVzYWdlIG9mIG9sZGVyIGRpcmVjdG9yeV93YXRjaGVyIGdlbSBhcyAxLjUgaXMgYnJva2VuICgjODgzKQogICogRW5zdXJlIGFsbCBQb3N0IGNhdGVnb3JpZXMgYXJlIGRvd25jYXNlICgjODQyLCAjODcyKQogICogRm9yY2UgZW5jb2Rpbmcgb2YgdGhlIHJkaXNjb3VudCBUT0MgdG8gVVRGOCB0byBhdm9pZCBjb252ZXJzaW9uIGVycm9ycyAoIzU1NSkKICAqIFBhdGNoIGZvciBtdWx0aWJ5dGUgVVJJIHByb2JsZW0gd2l0aCBgamVreWxsIHNlcnZlYCAoIzcyMykKICAqIE9yZGVyIHBsdWdpbiBleGVjdXRpb24gYnkgcHJpb3JpdHkgKCM4NjQpCiAgKiBGaXhlZCBQYWdlI2RpciBhbmQgUGFnZSN1cmwgZm9yIGVkZ2UgY2FzZXMgKCM1MzYpCiAgKiBGaXggYnJva2VuIGBwb3N0X3VybGAgd2l0aCBwb3N0cyB3aXRoIGEgdGltZSBpbiB0aGVpciBZQU1MIGZyb250IG1hdHRlciAoIzgzMSkKICAqIExvb2sgZm9yIHBsdWdpbnMgdW5kZXIgdGhlIHNvdXJjZSBkaXJlY3RvcnkgKCM2NTQpCiAgKiBUdW1ibHIgTWlncmF0b3I6IGZpbmRzIGBfcG9zdHNgIGRpciBjb3JyZWN0bHksIGZpeGVzIHRydW5jYXRpb24gb2YgbG9uZyBwb3N0IG5hbWVzICgjNzc1KQogICogRm9yY2UgQ2F0ZWdvcmllcyB0byBiZSBTdHJpbmdzICgjNzY3KQogICogU2FmZSBZQU1MIHBsdWdpbiB0byBwcmV2ZW50IHZ1bG5lcmFiaWxpdHkgKCM3NzcpCiAgKiBBZGQgU1ZHIHN1cHBvcnQgdG8gSmVreWxsL1dFQnJpY2suICgjNDA3LCAjNDA2KQogICogUHJldmVudCBjdXN0b20gZGVzdGluYXRpb24gZnJvbSBjYXVzaW5nIGNvbnRpbnVvdXMgcmVnZW4gb24gd2F0Y2ggKCM1MjgsICM4MjAsICM4NjIpCgojIyMgU2l0ZSBFbmhhbmNlbWVudHMKCiAgKiBSZXNwb25zaWZ5ICgjODYwKQogICogRml4IHNwZWxsaW5nLCBwdW5jdHVhdGlvbiBhbmQgcGhyYXNhbCBlcnJvcnMgKCM5ODkpCiAgKiBVcGRhdGUgcXVpY2tzdGFydCBpbnN0cnVjdGlvbnMgd2l0aCBgbmV3YCBjb21tYW5kICgjOTY2KQogICogQWRkIGRvY3MgZm9yIHBhZ2UuZXhjZXJwdCAoIzk1NikKICAqIEFkZCBkb2NzIGZvciBwYWdlLnBhdGggKCM5NTEpCiAgKiBDbGVhbiB1cCBzaXRlIGRvY3MgdG8gcHJlcGFyZSBmb3IgMS4wIHJlbGVhc2UgKCM5MTgpCiAgKiBCcmluZyBzaXRlIGludG8gbWFzdGVyIGJyYW5jaCB3aXRoIGJldHRlciBwcmV2aWV3L2RlcGxveSAoIzcwOSkKICAqIFJlZGVzaWduZWQgc2l0ZSAoIzU4MykKCiMjIyBEZXZlbG9wbWVudCBGaXhlcwoKICAqIEV4Y2x1ZGUgQ3VjdW1iZXIgMS4yLjQsIHdoaWNoIGNhdXNlcyB0ZXN0cyB0byBmYWlsIGluIDEuOS4yICgjOTM4KQogICogQWRkZWQgImZlYXR1cmVzOmh0bWwiIHJha2UgdGFzayBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLCBjbGVhbmVkIHVwIEN1Y3VtYmVyIHByb2ZpbGVzICgjODMyKQogICogRXhwbGljaXRseSByZXF1aXJlIEhUVFBTIHJ1YnlnZW1zIHNvdXJjZSBpbiBHZW1maWxlICgjODI2KQogICogQ2hhbmdlZCBSdWJ5IHZlcnNpb24gZm9yIGRldmVsb3BtZW50IHRvIDEuOS4zLXAzNzQgZnJvbSBwMzYyICgjODAxKQogICogSW5jbHVkaW5nIGEgbGluayB0byB0aGUgR2l0SHViIFJ1Ynkgc3R5bGUgZ3VpZGUgaW4gQ09OVFJJQlVUSU5HLm1kICgjODA2KQogICogQWRkZWQgc2NyaXB0L2Jvb3RzdHJhcCAoIzc3NikKICAqIFJ1bm5pbmcgU2ltcGxlY292IHVuZGVyIDIgY29uZGl0aW9uczogRU5WKENPVkVSQUdFKT10cnVlIGFuZCB3aXRoIFJ1YnkgdmVyc2lvbiBvZiBncmVhdGVyIHRoYW4gMS45ICgjNzcxKQogICogU3dpdGNoIHRvIFNpbXBsZWNvdiBmb3IgY292ZXJhZ2UgcmVwb3J0ICgjNzY1KQoKIyMgMC4xMi4xIC8gMjAxMy0wMi0xOQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFVwZGF0ZSBLcmFtZG93biB2ZXJzaW9uIHRvIDAuMTQuMSAoIzc0NCkKICAqIFRlc3QgRW5oYW5jZW1lbnRzCiAgKiBVcGRhdGUgUmFrZSB2ZXJzaW9uIHRvIDEwLjAuMyAoIzc0NCkKICAqIFVwZGF0ZSBTaG91bGRhIHZlcnNpb24gdG8gMy4zLjIgKCM3NDQpCiAgKiBVcGRhdGUgUmVkY2FycGV0IHZlcnNpb24gdG8gMi4yLjIgKCM3NDQpCgojIyAwLjEyLjAgLyAyMDEyLTEyLTIyCgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogQWRkIGFiaWxpdHkgdG8gZXhwbGljaXRseSBzcGVjaWZ5IGluY2x1ZGVkIGZpbGVzICgjMjYxKQogICogQWRkIGAtLWRlZmF1bHQtbWltZXR5cGVgIG9wdGlvbiAoIzI3OSkKICAqIEFsbG93IHNldHRpbmcgb2YgUmVkQ2xvdGggb3B0aW9ucyAoIzI4NCkKICAqIEFkZCBgcG9zdF91cmxgIExpcXVpZCB0YWcgZm9yIGludGVybmFsIHBvc3QgbGlua2luZyAoIzM2OSkKICAqIEFsbG93IG11bHRpcGxlIHBsdWdpbiBkaXJzIHRvIGJlIHNwZWNpZmllZCAoIzQzOCkKICAqIElubGluZSBUT0MgdG9rZW4gc3VwcG9ydCBmb3IgUkRpc2NvdW50ICgjMzMzKQogICogQWRkIHRoZSBvcHRpb24gdG8gc3BlY2lmeSB0aGUgcGFnaW5hdGVkIHVybCBmb3JtYXQgKCMzNDIpCiAgKiBTd2FwIG91dCBhbGJpbm8gZm9yIHB5Z21lbnRzLnJiICgjNTY5KQogICogU3VwcG9ydCBSZWRjYXJwZXQgMiBhbmQgZmVuY2VkIGNvZGUgYmxvY2tzICgjNjE5KQogICogQmV0dGVyIHJlcG9ydGluZyBvZiBMaXF1aWQgZXJyb3JzICgjNjI0KQogICogQnVnIEZpeGVzCiAgKiBBbGxvdyBzb21lIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBoaWdobGlnaHQgbmFtZXMKICAqIFVSTCBlc2NhcGUgY2F0ZWdvcnkgbmFtZXMgaW4gVVJMIGdlbmVyYXRpb24gKCMzNjApCiAgKiBGaXggZXJyb3Igd2l0aCBgbGltaXRfcG9zdHNgICgjNDQyKQogICogUHJvcGVybHkgc2VsZWN0IGRvdGZpbGUgZHVyaW5nIGRpcmVjdG9yeSBzY2FuICgjMzYzLCAjNDMxLCAjMzc3KQogICogQWxsb3cgc2V0dGluZyBvZiBLcmFtZG93biBgc21hcnRfcXVvdGVzYCAoIzQ4MikKICAqIEVuc3VyZSBmcm9udCBtYXR0ZXIgaXMgYXQgc3RhcnQgb2YgZmlsZSAoIzU2MikKCiMjIDAuMTEuMiAvIDIwMTEtMTItMjcKCiAgKiBCdWcgRml4ZXMKICAqIEZpeCBnZW1zcGVjCgojIyAwLjExLjEgLyAyMDExLTEyLTI3CgogICogQnVnIEZpeGVzCiAgKiBGaXggZXh0cmEgYmxhbmsgbGluZSBpbiBoaWdobGlnaHQgYmxvY2tzICgjNDA5KQogICogVXBkYXRlIGRlcGVuZGVuY2llcwoKIyMgMC4xMS4wIC8gMjAxMS0wNy0xMAoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIEFkZCBjb21tYW5kIGxpbmUgaW1wb3J0ZXIgZnVuY3Rpb25hbGl0eSAoIzI1MykKICAqIEFkZCBSZWRjYXJwZXQgTWFya2Rvd24gc3VwcG9ydCAoIzMxOCkKICAqIE1ha2UgbWFya2Rvd24vdGV4dGlsZSBleHRlbnNpb25zIGNvbmZpZ3VyYWJsZSAoIzMxMikKICAqIEFkZCBgbWFya2Rvd25pZnlgIGZpbHRlcgoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFN3aXRjaCB0byBBbGJpbm8gZ2VtCiAgKiBCdW5kbGVyIHN1cHBvcnQKICAqIFVzZSBFbmdsaXNoIGxpYnJhcnkgdG8gYXZvaWQgaG9vcHMgKCMyOTIpCiAgKiBBZGQgUG9zdGVyb3VzIGltcG9ydGVyICgjMjU0KQogICogRml4ZXMgZm9yIFdvcmRwcmVzcyBpbXBvcnRlciAoIzI3NCwgIzI1MiwgIzI3MSkKICAqIEJldHRlciBlcnJvciBtZXNzYWdlIGZvciBpbnZhbGlkIHBvc3QgZGF0ZSAoIzI5MSkKICAqIFByaW50IGZvcm1hdHRlZCBmYXRhbCBleGNlcHRpb25zIHRvIHN0ZG91dCBvbiBidWlsZCBmYWlsdXJlCiAgKiBBZGQgVHVtYmxyIGltcG9ydGVyICgjMzIzKQogICogQWRkIEVua2kgaW1wb3J0ZXIgKCMzMjApCiAgKiBCdWcgRml4ZXMKICAqIFNlY3VyZSBhZGRpdGlvbmFsIHBhdGggZXhwbG9pdHMKCiMjIDAuMTAuMCAvIDIwMTAtMTItMTYKCiAgKiBCdWcgRml4ZXMKICAqIEFkZCBgLS1uby1zZXJ2ZXJgIG9wdGlvbi4KCiMjIDAuOS4wIC8gMjAxMC0xMi0xNQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIFVzZSBPcHRpb25QYXJzZXIncyBgW25vLV1gIGZ1bmN0aW9uYWxpdHkgZm9yIGJldHRlciBib29sZWFuIHBhcnNpbmcuCiAgKiBBZGQgRHJ1cGFsIG1pZ3JhdG9yICgjMjQ1KQogICogQ29tcGxhaW4gYWJvdXQgWUFNTCBhbmQgTGlxdWlkIGVycm9ycyAoIzI0OSkKICAqIFJlbW92ZSBvcnBoYW5lZCBmaWxlcyBkdXJpbmcgcmVnZW5lcmF0aW9uICgjMjQ3KQogICogQWRkIE1hcmxleSBtaWdyYXRvciAoIzI4KQoKIyMgMC44LjAgLyAyMDEwLTExLTIyCgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogQWRkIHdvcmRwcmVzcy5jb20gaW1wb3J0ZXIgKCMyMDcpCiAgKiBBZGQgYC0tbGltaXQtcG9zdHNgIGNsaSBvcHRpb24gKCMyMTIpCiAgKiBBZGQgYHVyaV9lc2NhcGVgIGZpbHRlciAoIzIzNCkKICAqIEFkZCBgLS1iYXNlLXVybGAgY2xpIG9wdGlvbiAoIzIzNSkKICAqIEltcHJvdmUgTVQgbWlncmF0b3IgKCMyMzgpCiAgKiBBZGQga3JhbWRvd24gc3VwcG9ydCAoIzIzOSkKICAqIEJ1ZyBGaXhlcwogICogRml4ZWQgZmlsZW5hbWUgYmFzZW5hbWUgZ2VuZXJhdGlvbiAoIzIwOCkKICAqIFNldCBtb2RlIHRvIFVURjggb24gU2VxdWVsIGNvbm5lY3Rpb25zICgjMjM3KQogICogUHJldmVudCBgX2luY2x1ZGVzYCBkaXIgZnJvbSBiZWluZyBhIHN5bWxpbmsKCiMjIDAuNy4wIC8gMjAxMC0wOC0yNAoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIEFkZCBzdXBwb3J0IGZvciByZGlzY291bnQgZXh0ZW5zaW9ucyAoIzE3MykKICAqIEJ1ZyBGaXhlcwogICogSGlnaGxpZ2h0IHNob3VsZCBub3QgYmUgYWJsZSB0byByZW5kZXIgbG9jYWwgZmlsZXMKICAqIFRoZSBzaXRlIGNvbmZpZ3VyYXRpb24gbWF5IG5vdCBhbHdheXMgcHJvdmlkZSBhICd0aW1lJyBzZXR0aW5nICgjMTg0KQoKIyMgMC42LjIgLyAyMDEwLTA2LTI1CgogICogQnVnIEZpeGVzCiAgKiBGaXggUmFrZWZpbGUgJ3JlbGVhc2UnIHRhc2sgKHRhZyBwdXNoaW5nIHdhcyBtaXNzaW5nIG9yaWdpbikKICAqIEVuc3VyZSB0aGF0IFJlZENsb3RoIGlzIGxvYWRlZCB3aGVuIHRleHRpbGl6ZSBmaWx0ZXIgaXMgdXNlZCAoIzE4MykKICAqIEV4cGFuZCBzb3VyY2UsIGRlc3RpbmF0aW9uLCBhbmQgcGx1Z2luIHBhdGhzICgjMTgwKQogICogRml4IGBwYWdlLnVybGAgdG8gaW5jbHVkZSBmdWxsIHJlbGF0aXZlIHBhdGggKCMxODEpCgojIyAwLjYuMSAvIDIwMTAtMDYtMjQKCiAgKiBCdWcgRml4ZXMKICAqIEZpeCBNYXJrZG93biBQeWdtZW50cyBwcmVmaXggYW5kIHN1ZmZpeCAoIzE3OCkKCiMjIDAuNi4wIC8gMjAxMC0wNi0yMwoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIFByb3BlciBwbHVnaW4gc3lzdGVtICgjMTksICMxMDApCiAgKiBBZGQgc2FmZSBtb2RlIHNvIHVuc2FmZSBjb252ZXJ0ZXJzL2dlbmVyYXRvcnMgY2FuIGJlIGFkZGVkCiAgKiBNYXJ1a3UgaXMgbm93IHRoZSBvbmx5IHByb2Nlc3NvciBkZXBlbmRlbmN5IGluc3RhbGxlZCBieSBkZWZhdWx0LiBPdGhlciBwcm9jZXNzb3JzIHdpbGwgYmUgbGF6eS1sb2FkZWQgd2hlbiBuZWNlc3NhcnkgKGFuZCBwcm9tcHQgdGhlIHVzZXIgdG8gaW5zdGFsbCB0aGVtIHdoZW4gbmVjZXNzYXJ5KSAoIzU3KQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIEluY2x1c2lvbi9leGNsdXNpb24gb2YgZnV0dXJlIGRhdGVkIHBvc3RzICgjNTkpCiAgKiBHZW5lcmF0aW9uIGZvciBhIHNwZWNpZmljIHRpbWUgKCM1OSkKICAqIEFsbG9jYXRlIGBzaXRlLnRpbWVgIG9uIHJlbmRlciBub3QgcGVyIHNpdGVfcGF5bG9hZCBpbnZvY2F0aW9uICgjNTkpCiAgKiBQYWdlcyBub3cgcHJlc2VudCBpbiB0aGUgc2l0ZSBwYXlsb2FkIGFuZCBjYW4gYmUgdXNlZCB0aHJvdWdoIHRoZSBgc2l0ZS5wYWdlc2AgYW5kIGBzaXRlLmh0bWxfcGFnZXNgIHZhcmlhYmxlcwogICogR2VuZXJhdGUgcGhhc2UgYWRkZWQgdG8gc2l0ZSNwcm9jZXNzIGFuZCBwYWdpbmF0aW9uIGlzIG5vdyBhIGdlbmVyYXRvcgogICogU3dpdGNoIHRvIFJha2VHZW0gZm9yIGJ1aWxkL3Rlc3QgcHJvY2VzcwogICogT25seSByZWdlbmVyYXRlIHN0YXRpYyBmaWxlcyB3aGVuIHRoZXkgaGF2ZSBjaGFuZ2VkICgjMTQyKQogICogQWxsb3cgYXJiaXRyYXJ5IG9wdGlvbnMgdG8gUHlnbWVudHMgKCMzMSkKICAqIEFsbG93IFVSTCB0byBiZSBzZXQgdmlhIGNvbW1hbmQgbGluZSBvcHRpb24gKCMxNDcpCiAgKiBCdWcgRml4ZXMKICAqIFJlbmRlciBoaWdobGlnaHRlZCBjb2RlIGZvciBub24gbWFya2Rvd24vdGV4dGlsZSBwYWdlcyAoIzExNikKICAqIEZpeCBoaWdobGlnaHRpbmcgb24gUnVieSAxLjkgKCM2NSkKICAqIEZpeCBleHRlbnNpb24gbXVuZ2luZyB3aGVuIHByZXR0eSBwZXJtYWxpbmtzIGFyZSBlbmFibGVkICgjNjQpCiAgKiBTdG9wIHNvcnRpbmcgY2F0ZWdvcmllcyAoIzMzKQogICogUHJlc2VydmUgZ2VuZXJhdGVkIGF0dHJpYnV0ZXMgb3ZlciBmcm9udCBtYXR0ZXIgKCMxMTkpCiAgKiBGaXggc291cmNlIGRpcmVjdG9yeSBiaW5kaW5nIHVzaW5nIGBEaXIucHdkYCAoIzc1KQoKIyMgMC41LjcgLyAyMDEwLTAxLTEyCgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogQWxsb3cgb3ZlcnJpZGluZyBvZiBwb3N0IGRhdGUgaW4gdGhlIGZyb250IG1hdHRlciAoIzYyLCAjMzgpCiAgKiBCdWcgRml4ZXMKICAqIENhdGVnb3JpZXMgaXNuJ3QgYWx3YXlzIGFuIGFycmF5ICgjNzMpCiAgKiBFbXB0eSB0YWdzIGNhdXNlcyBlcnJvciBpbiByZWFkX3Bvc3RzICgjODQpCiAgKiBGaXggcGFnaW5hdGlvbiB0byBhZGhlcmUgdG8gcmVhZC9yZW5kZXIvd3JpdGUgcGFyYWRpZ20KICAqIFRlc3QgRW5oYW5jZW1lbnQKICAqIEN1Y3VtYmVyIGZlYXR1cmVzIG5vIGxvbmdlciB1c2Ugc2l0ZS5wb3N0cy5maXJzdCB3aGVyZSBhIGJldHRlciBhbHRlcm5hdGl2ZSBpcyBhdmFpbGFibGUKCiMjIDAuNS42IC8gMjAxMC0wMS0wOAoKICAqIEJ1ZyBGaXhlcwogICogUmVxdWlyZSByZWRjbG90aCA+PSA0LjIuMSBpbiB0ZXN0cyAoIzkyKQogICogRG9uJ3QgYnJlYWsgb24gdHJpcGxlIGRhc2hlcyBpbiB5YW1sIGZyb250IG1hdHRlciAoIzkzKQoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIEFsbG93IC5ta2QgYXMgbWFya2Rvd24gZXh0ZW5zaW9uCiAgKiBVc2UgJHN0ZG91dC9lcnIgaW5zdGVhZCBvZiBjb25zdGFudHMgKCM5OSkKICAqIFByb3Blcmx5IHdyYXAgY29kZSBibG9ja3MgKCM5MSkKICAqIEFkZCBqYXZhc2NyaXB0IG1pbWUgdHlwZSBmb3Igd2VicmljayAoIzk4KQoKIyMgMC41LjUgLyAyMDEwLTAxLTA4CgogICogQnVnIEZpeGVzCiAgKiBGaXggcGFnaW5hdGlvbiAlIDAgYnVnICgjNzgpCiAgKiBFbnN1cmUgYWxsIHBvc3RzIGFyZSBwcm9jZXNzZWQgZmlyc3QgKCM3MSkgIyMgTk9URQogICogQWZ0ZXIgdGhpcyBwb2ludCBJIHdpbGwgbm8gbG9uZ2VyIGJlIGdpdmluZyBjcmVkaXQgaW4gdGhlIGhpc3Rvcnk7IHRoYXQgaXMgd2hhdCB0aGUgY29tbWl0IGxvZyBpcyBmb3IuCgojIyAwLjUuNCAvIDIwMDktMDgtMjMKCiAgKiBCdWcgRml4ZXMKICAqIERvIG5vdCBhbGxvdyBzeW1saW5rcyAoc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSkKCiMjIDAuNS4zIC8gMjAwOS0wNy0xNAoKICAqIEJ1ZyBGaXhlcwogICogU29sdmluZyB0aGUgcGVybWFsaW5rIGJ1ZyB3aGVyZSBub24taHRtbCBmaWxlcyB3b3VsZG4ndCB3b3JrIChAamVmZnJ5ZGVncmFuZGUpCgojIyAwLjUuMiAvIDIwMDktMDYtMjQKCiAgKiBFbmhhbmNlbWVudHMKICAqIEFkZGVkIC0tcGFnaW5hdGUgb3B0aW9uIHRvIHRoZSBleGVjdXRhYmxlIGFsb25nIHdpdGggYSBwYWdpbmF0b3Igb2JqZWN0IGZvciB0aGUgcGF5bG9hZCAoQGNhbGF2ZXJhKQogICogVXBncmFkZWQgUmVkQ2xvdGggdG8gNC4yLjEsIHdoaWNoIG1ha2VzIGA8bm90ZXh0aWxlPmAgdGFncyB3b3JrIG9uY2UgYWdhaW4uCiAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgc2V0IGluIGNvbmZpZy55bWwgYXJlIG5vdyBhdmFpbGFibGUgdGhyb3VnaCB0aGUgc2l0ZSBwYXlsb2FkIChAdmlsY2FucykKICAqIFBvc3RzIGNhbiBub3cgaGF2ZSBhbiBlbXB0eSBZQU1MIGZyb250IG1hdHRlciBvciBub25lIGF0IGFsbCAoQCBiYWh1dnJpaGkpCiAgKiBCdWcgRml4ZXMKICAqIEZpeGluZyBSdWJ5IDEuOSBpc3N1ZSB0aGF0IHJlcXVpcmVzIGAjdG9fc2Agb24gdGhlIGVyciBvYmplY3QgKEBDaHJvbm9uYXV0KQogICogRml4ZXMgZm9yIHBhZ2luYXRpb24gYW5kIG9yZGVyaW5nIHBvc3RzIG9uIHRoZSBzYW1lIGRheSAoQHVqaCkKICAqIE1hZGUgcGFnZXMgcmVzcGVjdCBwZXJtYWxpbmtzIHN0eWxlIGFuZCBwZXJtYWxpbmtzIGluIHltbCBmcm9udCBtYXR0ZXIgKEBldWdlbmVib2xzaGFrb3YpCiAgKiBJbmRleC5odG1sIGZpbGUgc2hvdWxkIGFsd2F5cyBoYXZlIGluZGV4Lmh0bWwgcGVybWFsaW5rIChAZXVnZW5lYm9sc2hha292KQogICogQWRkZWQgdHJhaWxpbmcgc2xhc2ggdG8gcHJldHR5IHBlcm1hbGluayBzdHlsZSBzbyBBcGFjaGUgaXMgaGFwcHkgKEBldWdlbmVib2xzaGFrb3YpCiAgKiBCYWQgbWFya2Rvd24gcHJvY2Vzc29yIGluIGNvbmZpZyBmYWlscyBzb29uZXIgYW5kIHdpdGggYmV0dGVyIG1lc3NhZ2UgKEAgZ2Nub3Z1cykKICAqIEFsbG93IENSTEZzIGluIHlhbWwgZnJvbnQgbWF0dGVyIChAanVyZXR0YSkKICAqIEFkZGVkIERhdGUjeG1sc2NoZW1hIGZvciBSdWJ5IHZlcnNpb25zIDwgMS45CgojIyAwLjUuMSAvIDIwMDktMDUtMDYKCiMjIyBNYWpvciBFbmhhbmNlbWVudHMKCiAgKiBOZXh0L3ByZXZpb3VzIHBvc3RzIGluIHNpdGUgcGF5bG9hZCAoQHBhbnR1bGlzLCBAdG9tbykKICAqIFBlcm1hbGluayB0ZW1wbGF0aW5nIHN5c3RlbQogICogTW92ZWQgbW9zdCBvZiB0aGUgUkVBRE1FIG91dCB0byB0aGUgR2l0SHViIHdpa2kKICAqIEV4Y2x1ZGUgb3B0aW9uIGluIGNvbmZpZ3VyYXRpb24gc28gc3BlY2lmaWVkIGZpbGVzIHdvbid0IGJlIGJyb3VnaHQgb3ZlciB3aXRoIGdlbmVyYXRlZCBzaXRlIChAZHVyaXRvbmcpCiAgKiBCdWcgRml4ZXMKICAqIE1ha2luZyBzdXJlIGNvbmZpZy55YW1sIHJlZmVyZW5jZXMgYXJlIGFsbCBnb25lLCB1c2luZyBvbmx5IGNvbmZpZy55bWwKICAqIEZpeGVkIHN5bnRheCBoaWdobGlnaHRpbmcgYnJlYWtpbmcgZm9yIFVURi04IGNvZGUgKEBoZW5yaWspCiAgKiBXb3JrZWQgYXJvdW5kIFJEaXNjb3VudCBidWcgdGhhdCBwcmV2ZW50cyBNYXJrZG93biBmcm9tIGdldHRpbmcgcGFyc2VkIGFmdGVyIGhpZ2hsaWdodCAoQGhlbnJpaykKICAqIENHSSBlc2NhcGVkIHBvc3QgdGl0bGVzIChAQ2hyb25vbmF1dCkKCiMjIDAuNS4wIC8gMjAwOS0wNC0wNwoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIEFiaWxpdHkgdG8gc2V0IHBvc3QgY2F0ZWdvcmllcyB2aWEgWUFNTCAoQHFydXNoKQogICogQWJpbGl0eSB0byBzZXQgcHJldmVudCBhIHBvc3QgZnJvbSBwdWJsaXNoaW5nIHZpYSBZQU1MIChAcXJ1c2gpCiAgKiBBZGQgdGV4dGlsaXplIGZpbHRlciAoQHdpbGxjb2RlZm9yZm9vKQogICogQWRkICdwcmV0dHknIHBlcm1hbGluayBzdHlsZSBmb3Igd29yZHByZXNzLWxpa2UgdXJscyAoQGR5c2luZ2VyKQogICogTWFkZSBpdCBwb3NzaWJsZSB0byBlbnRlciBjYXRlZ29yaWVzIGZyb20gWUFNTCBhcyBhbiBhcnJheSAoQENocm9ub25hdXQpCiAgKiBJZ25vcmUgRW1hY3MgYXV0b3NhdmUgZmlsZXMgKEBDaHJvbm9uYXV0KQogICogQnVnIEZpeGVzCiAgKiBVc2UgYmxvY2sgc3ludGF4IG9mIHBvcGVuNCB0byBlbnN1cmUgdGhhdCBzdWJwcm9jZXNzZXMgYXJlIHByb3Blcmx5IGRpc3Bvc2VkIChAanFyKQogICogQ2xvc2Ugb3BlbjQgc3RyZWFtcyB0byBwcmV2ZW50IHpvbWJpZXMgKEBydG9tYXlrbykKICAqIE9ubHkgcXVlcnkgcmVxdWlyZWQgZmllbGRzIGZyb20gdGhlIFdQIERhdGFiYXNlIChAYXJpZWphbikKICAqIFByZXZlbnQgYF9wb3N0c2AgZnJvbSBiZWluZyBjb3BpZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSAoQGJkaW1jaGVmZikKICAqIFJlZmFjdG9ycwogICogRmFjdG9yZWQgdGhlIGZpbHRlcmluZyBjb2RlIGludG8gYSBtZXRob2QgKEBDaHJvbm9uYXV0KQogICogRml4IHRlc3RzIGFuZCBjb252ZXJ0IHRvIFNob3VsZGEgKEBxcnVzaCwgQHRlY2huaWNhbHBpY2tsZXMpCiAgKiBBZGQgQ3VjdW1iZXIgYWNjZXB0YW5jZSB0ZXN0IHN1aXRlIChAcXJ1c2gsIEB0ZWNobmljYWxwaWNrbGVzKQoKIyMgMC40LjEKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBDaGFuZ2VkIGRhdGUgZm9ybWF0IG9uIHdvcmRwcmVzcyBjb252ZXJ0ZXIgKHplcm9wYWRkaW5nKSAoQGR5c2luZ2VyKQogICogQnVnIEZpeGVzCiAgKiBBZGQgSmVreWxsIGJpbmFyeSBhcyBleGVjdXRhYmxlIHRvIGdlbXNwZWMgKEBkeXNpbmdlcikKCiMjIDAuNC4wIC8gMjAwOS0wMi0wMwoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIFN3aXRjaCB0byBKZXdlbGVyIGZvciBwYWNrYWdpbmcgdGFza3MKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBUeXBlIGltcG9ydGVyIChAY29kZXNsaW5nZXIpCiAgKiBgc2l0ZS50b3BpY3NgIGFjY2Vzc29yIChAYmF6KQogICogQWRkIGBhcnJheV90b19zZW50ZW5jZV9zdHJpbmdgIGZpbHRlciAoQG1jaHVuZykKICAqIEFkZCBhIGNvbnZlcnRlciBmb3IgdGV4dHBhdHRlcm4gKEBQZXJmZWN0bHlOb3JtYWwpCiAgKiBBZGQgYSB3b3JraW5nIE1lcGhpc3RvIC8gTXlTUUwgY29udmVydGVyIChAaXZleSkKICAqIEFsbG93aW5nIC5odGFjY2VzcyBmaWxlcyB0byBiZSBjb3BpZWQgb3ZlciBpbnRvIHRoZSBnZW5lcmF0ZWQgc2l0ZSAoQGJyaWFuZG9sbCkKICAqIEFkZCBvcHRpb24gdG8gbm90IHB1dCBmaWxlIGRhdGUgaW4gcGVybWFsaW5rIFVSTCAoQG1yZWlkKQogICogQWRkIGxpbmUgbnVtYmVyIGNhcGFiaWxpdGllcyB0byBoaWdobGlnaHQgYmxvY2tzIChAamNvbikKICAqIEJ1ZyBGaXhlcwogICogRml4IHBlcm1hbGluayBiZWhhdmlvciAoQGNhdmFsbGUpCiAgKiBGaXhlZCBhbiBpc3N1ZSB3aXRoIHB5Z21lbnRzLCBtYXJrZG93biwgYW5kIG5ld2xpbmVzIChAenBpbnRlcikKICAqIEFtcGVyc2FuZHMgbmVlZCB0byBiZSBlc2NhcGVkIChAcHVmdXdvenUsIEBhcCkKICAqIFRlc3QgYW5kIGZpeCB0aGUgc2l0ZS5jYXRlZ29yaWVzIGhhc2ggKEB6em90KQogICogRml4IHNpdGUgcGF5bG9hZCBhdmFpbGFibGUgdG8gZmlsZXMgKEBtYXRyaXg5MTgwKQoKIyMgMC4zLjAgLyAyMDA4LTEyLTI0CgojIyMgTWFqb3IgRW5oYW5jZW1lbnRzCgogICogQWRkZWQgYC0tc2VydmVyYCBvcHRpb24gdG8gc3RhcnQgYSBzaW1wbGUgV0VCcmljayBzZXJ2ZXIgb24gZGVzdGluYXRpb24gZGlyZWN0b3J5IChAam9obnJlaWxseSBhbmQgQG1jaHVuZykKCiMjIyBNaW5vciBFbmhhbmNlbWVudHMKCiAgKiBBZGRlZCBwb3N0IGNhdGVnb3JpZXMgYmFzZWQgb24gZGlyZWN0b3JpZXMgY29udGFpbmluZyBgX3Bvc3RzYCAoQG1yZWlkKQogICogQWRkZWQgcG9zdCB0b3BpY3MgYmFzZWQgb24gZGlyZWN0b3JpZXMgdW5kZXJuZWF0aCBgX3Bvc3RzYAogICogQWRkZWQgbmV3IGRhdGUgZmlsdGVyIHRoYXQgc2hvd3MgdGhlIGZ1bGwgbW9udGggbmFtZSAoQG1yZWlkKQogICogTWVyZ2UgUG9zdCdzIFlBTUwgZnJvbnQgbWF0dGVyIGludG8gaXRzIHRvX2xpcXVpZCBwYXlsb2FkIChAcmVtaSkKICAqIFJlc3RyaWN0IGluY2x1ZGVzIHRvIHJlZ3VsYXIgZmlsZXMgdW5kZXJuZWF0aCBgX2luY2x1ZGVzYAogICogQnVnIEZpeGVzCiAgKiBDaGFuZ2UgWUFNTCBkZWxpbWl0ZXIgbWF0Y2hlciBzbyBhcyB0byBub3QgY2hldyB1cCAybmQgbGV2ZWwgbWFya2Rvd24gaGVhZGVycyAoQG1yZWlkKQogICogRml4IGJ1ZyB0aGF0IG1lYW50IHBhZ2UgZGF0YSAoc3VjaCBhcyB0aGUgZGF0ZSkgd2FzIG5vdCBhdmFpbGFibGUgaW4gdGVtcGxhdGVzIChAbXJlaWQpCiAgKiBQcm9wZXJseSByZWplY3QgZGlyZWN0b3JpZXMgaW4gYF9sYXlvdXRzYAoKIyMgMC4yLjEgLyAyMDA4LTEyLTE1CgogICogTWFqb3IgQ2hhbmdlcwogICogVXNlIE1hcnVrdSAocHVyZSBSdWJ5KSBmb3IgTWFya2Rvd24gYnkgZGVmYXVsdCAoQG1yZWlkKQogICogQWxsb3cgdXNlIG9mIFJEaXNjb3VudCB3aXRoIGAtLXJkaXNjb3VudGAgZmxhZwoKIyMjIE1pbm9yIEVuaGFuY2VtZW50cwoKICAqIERvbid0IGxvYWQgZGlyZWN0b3J5X3dhdGNoZXIgdW5sZXNzIGl0J3MgbmVlZGVkIChAcGpoeWV0dCkKCiMjIDAuMi4wIC8gMjAwOC0xMi0xNAoKICAqIE1ham9yIENoYW5nZXMKICAqIHJlbGF0ZWRfcG9zdHMgaXMgbm93IGZvdW5kIGluIGBzaXRlLnJlbGF0ZWRfcG9zdHNgCgojIyAwLjEuNiAvIDIwMDgtMTItMTMKCiAgKiBNYWpvciBGZWF0dXJlcwogICogSW5jbHVkZSBmaWxlcyBpbiBgX2luY2x1ZGVzYCB3aXRoIGB7JSBpbmNsdWRlIHgudGV4dGlsZSAlfWAKCiMjIDAuMS41IC8gMjAwOC0xMi0xMgoKIyMjIE1ham9yIEVuaGFuY2VtZW50cwoKICAqIENvZGUgaGlnaGxpZ2h0aW5nIHdpdGggUHlnbWVudHMgaWYgYC0tcHlnbWVudHNgIGlzIHNwZWNpZmllZAogICogRGlzYWJsZSB0cnVlIExTSSBieSBkZWZhdWx0LCBlbmFibGUgd2l0aCBgLS1sc2lgCgojIyMgTWlub3IgRW5oYW5jZW1lbnRzCgogICogT3V0cHV0IGluZm9ybWF0aXZlIG1lc3NhZ2UgaWYgUkRpc2NvdW50IGlzIG5vdCBhdmFpbGFibGUgKEBKYWNrRGFuZ2VyKQogICogQnVnIEZpeGVzCiAgKiBQcmV2ZW50IEpla3lsbCBmcm9tIHBpY2tpbmcgdXAgdGhlIG91dHB1dCBkaXJlY3RvcnkgYXMgYSBzb3VyY2UgKEBKYWNrRGFuZ2VyKQogICogU2tpcCBgcmVsYXRlZF9wb3N0c2Agd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBwb3N0IChASmFja0RhbmdlcikKCiMjIDAuMS40IC8gMjAwOC0xMi0wOAoKICAqIEJ1ZyBGaXhlcwogICogREFUQSBkb2VzIG5vdCB3b3JrIHByb3Blcmx5IHdpdGggcnVieWdlbXMKCiMjIDAuMS4zIC8gMjAwOC0xMi0wNgoKICAqIE1ham9yIEZlYXR1cmVzCiAgKiBNYXJrZG93biBzdXBwb3J0IChAdmFucGVsdCkKICAqIE1lcGhpc3RvIGFuZCBDU1YgY29udmVydGVycyAoQHZhbnBlbHQpCiAgKiBDb2RlIGhpbGlnaHRpbmcgKEB2YW5wZWx0KQogICogQXV0b2J1aWxkCiAgKiBCdWcgRml4ZXMKICAqIEFjY2VwdCBib3RoIGBcclxuYCBhbmQgYFxuYCBpbiBZQU1MIGhlYWRlciAoQHZhbnBlbHQpCgojIyAwLjEuMiAvIDIwMDgtMTEtMjIKCiAgKiBNYWpvciBGZWF0dXJlcwogICogQWRkIGEgcmVhbCAicmVsYXRlZCBwb3N0cyIgaW1wbGVtZW50YXRpb24gdXNpbmcgQ2xhc3NpZmllcgogICogQ29tbWFuZCBMaW5lIENoYW5nZXMKICAqIEFsbG93IGNsaSB0byBiZSBjYWxsZWQgd2l0aCAwLCAxLCBvciAyIGFyZ3MgaW50dWl0aW5nIGRpciBwYXRocyBpZiB0aGV5IGFyZSBvbWl0dGVkCgojIyAwLjEuMSAvIDIwMDgtMTEtMjIKCiAgKiBNaW5vciBBZGRpdGlvbnMKICAqIFBvc3RzIG5vdyBzdXBwb3J0IGludHJvc3BlY3Rpb25hbCBkYXRhIGUuZy4gYHt7IHBhZ2UudXJsIH19YAoKIyMgMC4xLjAgLyAyMDA4LTExLTA1CgogICogRmlyc3QgcmVsZWFzZQogICogQ29udmVydHMgcG9zdHMgd3JpdHRlbiBpbiBUZXh0aWxlCiAgKiBDb252ZXJ0cyByZWd1bGFyIHNpdGUgcGFnZXMKICAqIFNpbXBsZSBjb3B5IG9mIGJpbmFyeSBmaWxlcwoKIyMgMC4wLjAgLyAyMDA4LTEwLTE5CgogICogQmlydGhkYXkhCg==