Cj09PT0KTkVXUwo9PT09CgotIDEuNC4xOSAtCgogICogYWRkZWQgc3VwcG9ydCBmb3IgSWYtUmFuZ2U6IDxkYXRlPiAoIzEzNDYpCiAgKiBhZGRlZCBzdXBwb3J0IGZvciBtYXRjaGluZyAkSFRUUFsic2NoZW1lIl0gaW4gY29uZmlncwogICogZml4ZWQgaW5pdGdyb3VwcygpIGNhbGxlZCBhZnRlciBjaHJvb3QgKCMxMzg0KQogICogZml4ZWQgY2FzZS1zZW5zaXRpdmUgY2hlY2sgZm9yIEF1dGgtTWV0aG9kICgjMTQ1NikKICAqIGV4ZWN1dGUgZmNnaSBhcHAgd2l0aG91dCAvYmluL3NoIGlmIHVzZWQgYXMgYXJndW1lbnQgdG8gc3Bhd24tZmNnaSAoIzE0MjgpCiAgKiBmaXhlZCBhIGJ1ZyB0aGF0IG1hZGUgLy1wcmVmaXhlZCBleHRlbnNpb25zIGJlaW5nIGhhbmRsZWQgYWxzbyB3aGVuCiAgICBtYXRjaGluZyB0aGUgZW5kIG9mIHRoZSB1cmkgaW4gZmNnaSxzY2dpIGFuZCBwcm94eSBtb2R1bGVzICgjMTQ4OSkKICAqIHByaW50IGVycm9yIGlmIFgtTElHSFRUUEQtc2VuZC1maWxlIGNhbm5vdCBiZSBkb25lOyByZXNldCBoZWFkZXIKICAgIENvbnRlbnQtTGVuZ3RoIGZvciBzZW5kLWZpbGUuIFBhdGNoZXMgYnkgU3RlZmFuIEJ1ZWhsZXIKICAqIHByZXZlbnQgY3Jhc2ggaW4gY2VydGFpbiBwaHAtZmNnaSBjb25maWd1cmF0aW9ucyAoIzg0MSkKICAqIGFkZCBJZGxlU2VydmVycyBhbmQgU2NvcmVib2FyZCBkaXJlY3RpdmVzIGluID9hdXRvIG1vZGUgZm9yIG1vZF9zdGF0dXMgKCMxNTA3KQogICogb3BlbiBsb2cgaW1tZWRpYXRlbHkgYWZ0ZXIgZGFlbW9uaXppbmcsIGZpeGVzIFNJR1BJUEVzIG9uIHN0YXJ0dXAgICgjMTY1KQogICogSFRUUFMgZW52IHZhciBzaG91bGQgYmUgIm9uIiB3aGVuIHVzaW5nIG1vZF9leHRmb3J3YXJkIGFuZCB0aGUgWC1Gb3J3YXJkZWQtUHJvdG8gaGVhZGVyIGlzIHNldC4gKCMxNDk5KQogICogZ2VuZXJhdGUgRVRhZyBhbmQgTGFzdC1Nb2RpZmllZCBoZWFkZXJzIGZvciBtb2Rfc3NpIGJhc2VkIG9uIG5ld2VzdCBtb2RpZmllZCBpbmNsdWRlICgjMTQ5MSkKICAqIHN1cHBvcnQgbGV0dGVyaG9tZXMgaW4gbW9kX3VzZXJkaXIgKCMxNDczKQogICogc3VwcG9ydCBjaGFpbmVkIHByb3hpZXMgaW4gbW9kX2V4dGZvcndhcmQgKCMxNTI4KQogICogZml4ZWQgYm9ndXMgImNnaSBkaWVkID8iIGlmIHdlIGtpbGwgdGhlIENHSSBwcm9jZXNzIG9uIHNodXRkb3duCiAgKiBmaXhlZCBFQ09OTlJFU0VUIGhhbmRsaW5nIGluIG5ldHdvcmstb3BlbnNzbAogICogZml4ZWQgaGFuZGxpbmcgb2YgRUFHQUlOIGluIG5ldHdvcmstbGludXgtc2VuZGZpbGUgKCM2NTcpCiAgKiByZXNldCBjb25kaXRpb25hbCBjYWNoZSAoIzExNjQpCiAgKiBjcmVhdGUgZGlyZWN0b3JpZXMgaW4gbW9kX2NvbXByZXNzICh3YXMgYnJva2VuIHdpdGggYWxpYXMvdXNlcmRpcikgKCMxMDI3KQogICogZml4ZWQgb3V0IG9mIHJhbmdlIGFjY2VzcyBpbiBmZCBhcnJheSAoIzE1NjIsICMzNzIpIChDVkUtMjAwOC0wOTgzKQogICogbW9kX2NvbXByZXNzIHNob3VsZCBjaGVjayBpZiB0aGUgcmVxdWVzdCBpcyBhbHJlYWR5IGhhbmRsZWQsIGUuZy4gYnkgZmFzdGNnaSAoIzE1NjUpCiAgKiByZW1vdmUgYnJva2VuIHdvcmthcm91bmQgZm9yIGJ1Z2d5IE9wZXJhIHZlcnNpb24gd2l0aCBzc2wvY2h1bmtlZCBlbmNvZGluZyAoIzI4NSkKICAqIGdlbmVyYXRlIGV0YWcvbGFzdC1tb2RpZmllZCBoZWFkZXIgZm9yIG9uLXRoZS1mbHktY29tcHJlc3NlZCBmaWxlcyAoIzExNzEpCiAgKiByZXEtbWV0aG9kIE9QVElPTlM6IGRvIG5vdCBpbnNlcnQgZGVmYXVsdCByZXNwb25zZSBpZiByZXF1ZXN0IHdhcyBkZW5pZWQsIGRvIG5vdCBkZW55IE9QVElPTlMgYnkgZGVmYXVsdCAoIzEzMjQpCiAgKiBmaXhlZCBtZW1vcnkgbGVhayBvbiB3aW5kb3dzICgjMTM0NykKICAqIGZpeGVkIGJ1aWxkaW5nIG91dHNpZGUgb2YgdGhlIHNyYyBkaXIgKCMxMzQ5KQogICogZml4ZWQgaW5jbHVkaW5nIG9mIHN0ZGludC5oL2ludHR5cGVzLmggaW4gZXRhZy5jICgjMTQxMykKICAqIGRvIG5vdCBhZGQgQWNjZXB0LVJhbmdlcyBoZWFkZXIgaWYgcmFuZ2UtcmVxdWVzdCBpcyBkaXNhYmxlZCAoIzE0NDkpCiAgKiBsb2cgdGhlIGlwIG9mIGZhaWxlZCBhdXRoIHRyaWVzIGluIGVycm9yLmxvZyAoZW5oYW5jZW1lbnQgIzE1NDQpCiAgKiBmaXhlZCBSb3VuZFJvYmluIGluIG1vZF9wcm94eSAoIzUxNikKICAqIGNoZWNrIGZvciBzeW1saW5rcyBhZnRlciBzdWNjZXNzZnVsIHBhdGhpbmZvIG1hdGNoaW5nICgjMTU3NCkKICAqIGZpeGVkIG1vZC1wcm94eS50IHRvIHJ1biB3aXRoIGEgYnVpbGRkaXIgb3V0c2lkZSBvZiB0aGUgc3JjIGRpcgogICogZG8gbm90IHN1cHByZXNzIGNvbnRlbnQgb24gIjMwNyBUZW1wb3JhcnkgUmVkaXJlY3QiICgjMTQxMikKICAqIGZpeGVkIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBpZiByZXNwb25zZSBib2R5IGdldHMgcmVtb3ZlZCBpbiBjb25uZWN0aW9ucy5jICgjMTQxMiwgcGFydCAyKQogICogZG8gbm90IGdlbmVyYXRlIGEgIkNvbnRlbnQtTGVuZ3RoOiAwIiBoZWFkZXIgZm9yIEhFQUQgcmVxdWVzdHMsIGFkZGVkIHRlc3QgdG9vCiAgKiByZW1vdmUgY29tcHJlc3MgY2FjaGUgZmlsZSBpZiBjb21wcmVzc2lvbiBvciB3cml0ZSBmYWlsZWQgKCMxMTUwKQogICogZml4ZWQgYm9keSBoYW5kbGluZyBvZiBzdGF0dXMgMzAwIHJlcXVlc3RzIAogICogc3Bhd24tZmNnaTogb25seSB0cnkgdG8gY29ubmVjdCB0byB1bml4IHNvY2tldCAobm90IHRjcCkgYmVmb3JlIHNwYXduaW5nICgjMTU3NSkKICAqIGZpeCBzZW5kaW5nIHNvdXJjZSBvZiBjZ2kgc2NyaXB0IGluc3RlYWQgb2YgNTAwIGVycm9yIGlmIGZvcmsgZmFpbHMgKENWRS0yMDA4LTExMTEpCiAgKiBmaXggbWluLXByb2NzIGhhbmRsaW5nIGluIG1vZF9zY2dpLmMsIGp1c3Qgc2V0IHRvIG1heC1wcm9jcyAocGF0Y2ggZnJvbSAjNjIzKQogICogZml4IHNlbmRpbmcgIjQwOCAtIFRpbWVvdXQiIGluc3RlYWQgb2YgIjQxMCAtIEdvbmUiIGZvciB0aW1lZG91dCB1cmxzIGluIG1vZF9zZWNkb3dubG9hZCAoIzE0NDApCiAgKiB3b3JrYXJvdW5kICMxNTg3OiByZXF1aXJlIHVzZXJkaXIucGF0aCB0byBiZSBzZXQgdG8gZW5hYmxlIG1vZF91c2VyZGlyIChlbXB0eSBzdHJpbmcgYWxsb3dlZCkgKENWRS0yMDA4LTEyNzApCiAgKiBtYWtlIGNvbmZpZ3VyZSBjaGVja3MgZm9yIC0td2l0aC1wY3JlLCAtLXdpdGgtemxpYiBhbmQgLS13aXRoLWJ6aXAyIGZhaWxpbmcgaWYgdGhlIGhlYWRlcnMgYXJlbid0IGZvdW5kCiAgKiBmaXhlZCBoYW5kbGluZyBvZiB3YWl0cGlkKCkgPT0gRUlOVFIgbW9kX3NzaSBvbiBzb2xhcmlzIAoKLSAxLjQuMTggLSAyMDA3LTA5LTA5CgogICogZml4ZWQgY29tcGlsZSBlcnJvciBvbiBJUklYIDYuNS54IG9uIHByY3RsKCkgKCMxMzMzKQogICogZml4ZWQgZm9yd2FyZGluZyBhIFNJR0lOVCBhbmQgU0lHSFVQIHdoZW4gdXNpbmcgbWF4LXdvcmtlcnMgKCM5MDIpCiAgKiBmaXhlZCBGYXN0Q0dJIGhlYWRlciBvdmVycnVuIGluIG1vZF9mYXN0Y2dpIChyZXBvcnRlZCBieSBtYXR0aWFzQHNlY3dlYi5zZSkKICAqIGZpeGVkIGhhbmdpbmcgcmVkaXJlY3RzIHdpdGgga2VlcC1hbGl2ZSBkdWUgdG8gbWlzc2luZwogICAgIkNvbnRlbnQtTGVuZ3RoOiAwIiBoZWFkZXJzCiAgKiBmaXhlZCBjcmFzaGluZyB3aGVuIHVzaW5nIHVuZGVmaW5lZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gdGhlIGNvbmZpZwogICogZml4ZWQgY29tcGlsYXRpb24gb2YgbW9kX215c3FsX3Zob3N0IG9uIGlyaXggKCMxMzQxKQoKLSAxLjQuMTcgLSAyMDA3LTA4LTI5CgogICogYWRkZWQgZGlyLWxpc3Rpbmcuc2V0LWZvb3RlciBpbiBtb2RfZGlybGlzdGluZyAoIzEyNzcpCiAgKiBhZGRlZCBzZW5kaW5nIFVJRCBhbmQgUElEIGZvciBTSUdURVJNIGFuZCBTSUdJTlQgdG8gdGhlIGxvZ3MKICAqIGZpeGVkIGhhcmRjb2RlZCBmb250LXNpemVzIGluIG1vZF9kaXJsaXN0aW5nICgjMTI2NykKICAqIGZpeGVkIGRpZmZlcmVudCBFVGFnIGxlbmd0aCBvbiAzMi82NCBwbGF0Zm9ybXMgKCMxMjc5KQogICogZml4ZWQgY29tcHJlc3Npb24gb2YgZmlsZXMgPCAxMjggYnl0ZXMgYnkgZGlzYWJsaW5nIGNvbXByZXNzaW9uICgjMTI0MSkKICAqIGZpeGVkIG15c3FsIHNlcnZlciByZWNvbm5lY3RzICgjNTE4KQogICogZml4ZWQgZGlzYWJsZWQga2VlcC1hbGl2ZSBmb3IgZHluYW1pYyBjb250ZW50IHdpdGggSFRUUC8xLjAgKCMxMTY2KQogICogZml4ZWQgY3Jhc2ggb24gbWl4ZWQgRU9MIHNlcXVlbmNlcyBpbiBtb2RfY2dpCiAgKiBmaXhlZCBrZXkgY29tcGFyZSAoIzEyODcpCiAgKiBmaXhlZCBpbnZhbGlkIGNoYXIgaW4gaGVhZGVyIHZhbHVlcyAoIzEyODYpCiAgKiBmaXhlZCBpbnZhbGlkICIzMDQgTm90IE1vZGlmaWVkIiBvbiBicm9rZW4gdGltZXN0YW1wcwogICogZml4ZWQgZW5kbGVzcyBsb29wIG9uIHNocmlua2VkIGZpbGVzIHdpdGggc2VuZGZpbGUoKSBvbiBCU0QgKCMxMjg5KQogICogZml4ZWQgY291bnRlciBvdmVycnVuIGluID9hdXRvIGluIG1vZF9zdGF0dXMgKCM5MDkpCiAgKiBmaXhlZCB0b28gYWdncmVzaXZlIGNhY2hpbmcgb2YgbmVzdGVkIGNvbmRpdGlvbmFscyAoIzQxKQogICogZml4ZWQgcG9zc2libGUgb3ZlcmZsb3cgaW4gdW5peC1zb2NrZXQgcGF0aCBjaGVja3Mgb24gQlNEICgjNzEzKQogICogZml4ZWQgZXh0cmEgQ29udGVudC1MZW5ndGggaGVhZGVyIG9uIDF4eCwgMjA0IGFuZCAzMDQgKCMxMDAyKQogICogZml4ZWQgaGFuZGxpbmcgb2YgZHVwbGljYXRlIElmLU1vZGlmaWVkLVNpbmNlIHRvIHJldHVybiAzMDQgCiAgKiBmaXhlZCBleHRyYWN0aW5nIHN0YXR1cyBjb2RlIGZyb20gTlBIIHNjcmlwdHMgKCMxMTI1KQogICogZml4ZWQgcHJjdGwoKSB1c2FnZSAoIzEzMTApCiAgKiByZW1vdmVkIGNvbmZpZy1jaGVjayBpZiBwYXNzd2QgZmlsZXMgZXhpc3QgKCMxMTg4KQogICogZml4ZWQgY3Jhc2ggd2hlbiBldGFncyBhcmUgZGlzYWJsZWQgYnV0IHRoZSBjbGllbnQgc2VuZHMgb25lICgjMTMyMikKICAqIGZpeGVkIGNyYXNoIHdoZW4gZnJlZWluZyB0aGUgY29uZmlnIGluIG1vZF9hbGlhcwogICogZml4ZWQgc2VydmVyLmVycm9yLWhhbmRsZXItNDA0IGJyZWFrYWdlIGZyb20gMS40LjE2ICgjMTI3MCkKICAqIGZpeGVkIGVudGVyaW5nIDQwNC1oYW5kbGVyIGZyb20gZHluYW1pYyBjb250ZW50ICgjOTQ4KQogICogYWRkZWQgbW9yZSBkZWJ1ZyBpbmZvcyBmb3IgRkFNIGJhc2VkIHN0YXQtY2FjaGUKICAqIHVzZSBtb3JlIExTQiBsaWtlIHBhdGhzIGluIHRoZSBzYW1wbGUgY29uZmlnICgjMTI0MikKCi0gMS40LjE2IC0gMjAwNy0wNy0yNQoKICAqIGFkZGVkIHN0YXRpYy1maWxlLmV0YWdzLCBldGFnLnVzZS1pbm9kZSwgZXRhZy51c2UtbXRpbWUsIGV0YWcudXNlLXNpemUKICAgIHRvIGN1c3RvbWl6ZSB0aGUgZ2VuZXJhdGlvbiBvZiBFVGFncyBmb3Igc3RhdGljIGZpbGVzLiAoIzEyMDkpIAogICAgKHBhdGNoIGJ5IDxZdXN1ZmdAZ21haWwuY29tPikKICAqIGZpeGVkIHR5cGVjYXN0IG9mIE5VTEwgb24gZXhlY2woKSAoIzEyMzUpCiAgICAocGF0Y2ggYnkgRi4gRGVuaXMpCiAgKiBmaXhlZCBjaXJjdW12ZW50aW5nIHVybC5hY2Nlc3MtZGVueSBieSB0cmFpbGluZyBzbGFzaCAoIzEyMzApCiAgKiBmaXhlZCBjcmFzaCBvbiBkdXBsaWNhdGUgaGVhZGVycyB3aXRoIHRyYWlsaW5nIFdTICgjMTIzMikKICAqIGZpeGVkIGFjY2VwdGluZyBtb3JlIGNvbm5lY3Rpb25zIHRoZW4gcmVxdWVzdGVkICgjMTIxNikKICAqIGZpeGVkIG1lbS1sZWFrIGluIG1vZF9hdXRoIChyZXBvcnRlZCBieSBTdGVmYW4gRXNzZXIpCiAgKiBmaXhlZCBjcmFzaCB3aXRoIG1kNS1zZXNzIGFuZCBjbm9uY2Ugbm90IHNldCBpbiBtb2RfYXV0aCAocmVwb3J0ZWQgYnkgU3RlZmFuIEVzc2VyKQogICogZml4ZWQgbWlzc2luZyBjaGVjayBmb3IgYmFzZTY0IGVuY29kZWQgc3RyaW5nIGluIG1vZF9hdXRoIGFuZCBCYXNpYyBhdXRoCiAgICAocmVwb3J0ZWQgYnkgU3RlZmFuIEVzc2VyKQogICogZml4ZWQgcG9zc2libGUgY3Jhc2ggaW4gQXV0aC1EaWdlc3QgaGVhZGVyIHBhcnNlciBvbiB0cmFpbGluZyBXUyBpbiAKICAgIG1vZF9hdXRoIChyZXBvcnRlZCBieSBTdGVmYW4gRXNzZXIpIAogICogZml4ZWQgY2hlY2sgb24gc3RhbGUgZXJybm8gdmFsdWVzLCB3aGljaCBicm9rZSBoYW5kbGluZyBvZiBicm9rZW4gZmFzdGNnaQogICAgYXBwbGljYXRpb25zLiAoIzEyNDUpCiAgKiBmaXhlZCBjcmFzaCBvbiAzMmJpdCBhcmNocyB3aGVuIGRlYnVnLW1zZ3MgYXJlIHByaW50ZWQgaW4gbW9kX3NjZ2ksIG1vZF9mYXN0Y2dpIAogICAgYW5kIG1vZF93ZWJkYXYgKCMxMjYzKQoKLSAxLjQuMTUgLSAyMDA3LTA0LTEzCgogICogZml4ZWQgYnJva2VuIFNldC1Db29raWUgaGVhZGVycwoKLSAxLjQuMTQgLSAyMDA3LTA0LTEzCgogICogZml4IGNyYXNoIGlmIGdldGhvc3RieWFkZHIoKSBmYWlsZWQgb24gcmVkaXJlY3QgWzE3MThdCiAgKiBwcm9wZXJseSBoYW5kbGUgMjA2IHJlc3BvbnNlcyBnZW5lcmF0ZWQgYnkgKmNnaSBzY3JpcHRzLiAoIzc1NSkgWzE3MTZdCiAgKiBhZGRlZCBIVFRQUz1vbiB0byB0aGUgZW52aXJvbm1lbnQgb2YgY2dpIHNjcmlwdHMgKCM4NjEpIFsxNjg0XQogICogZml4IGhhbmRsaW5nIG9mIDMwMyAoIzEwNDUpIFsxNjc4XQogICogbWFkZSB0aGUgY29uZmlndXJlIGNoZWNrIGZvciBsdWEgbW9yZSBwb3J0YWJsZSBbMTY3N10KICAqIGFkZGVkIG1vZF9leHRmb3J3YXJkIG1vZHVsZSBbMTY2NV0KICAqIHJlZmVyZW5jZXMgdG8gdGhlIGZhbSBzdGF0IGNhY2hlIGVuZ2luZSBzaG91bGQgYmUgY29uZGl0aW9uYWwgKCMxMDM5KSBbMTY2NF0KICAqIGZpeCBodHRwIDUwMCBlcnJvcnMgKGNvbGluLnN0ZXBoZW4vYXQvbzIuY29tKSAjMTA0MSBbMTY2M10KICAqIHByZXZlbnQgd3JvbmcgcGlkZmlsZSB1bmxpbmtpbmcgb24gZ3JhY2VmdWwgcmVzdGFydCAoQ2hyaXMgV2ViYikgWzE2NTZdCiAgKiBpZ25vcmUgZW1wdHkgcGFja2V0cyBmcm9tIFNUREVSUiBzdHJlYW0uICM5OTgKICAqIGZpeCBhIGNyYXNoIGZvciBmaWxlcyB3aXRoIGFuIG10aW1lIG9mIDAgcmVwb3J0ZWQgYnkgY3ViaXEgb24gaXJjIFsxNTE5XQogICAgQ1ZFLTIwMDctMTg3MAogICogYWxsb3cgZW1wdHkgcGFzc3dvcmRzIHdpdGggbGRhcCAoSvZyZyBTb25uZW5iZXJnZXIpIFsxNTE2XQogICogbW9kX3NjZ2kuYyBzZWdmYXVsdCBmaXggIzk2NCBbMTUwMV0KICAqIEFkZGVkIHJvdW5kLXJvYmluIHN1cHBvcnQgdG8gbW9kX2Zhc3RjZ2kgWzE1MDBdCiAgKiBIYW5kbGUgRHJhZ29uRmx5QlNEIHRoZSBzYW1lIHdheSBhcyBGcmVlYnNkIChK9nJnIFNvbm5lbmJlcmdlcikgWzE0OTIsMTY3Nl0KICAqIGFkZGVkIG5vdyBhbmQgd2Vla3Mgc3VwcG9ydCB0byBtb2RfZXhwaXJlLiAjOTQzCiAgKiBmaXggY3B1IGhvZyBpbiBjZXJ0YWluIHJlcXVlc3RzIFsxNDczXSBDVkUtMjAwNy0xODY5CiAgKiBmaXggZm9yIGhhbmRsaW5nIGhvc3RuYW1lcyB3aXRoIHRyYWlsaW5nIGRvdCBbMTQwNl0KICAqIGZpeGVkIGhlYWRlci1pbmplY3Rpb24gdmlhIHNlcnZlci50YWcgKCMxMTA2KQogICogZGlzYWJsZWQgY2FjaGluZyBvZiBmaWxlcyB3aXRob3V0IGEgY29udGVudC10eXBlIHRvIHNvbHZlIHRoZQogICAgYWdncmVzc2l2ZSBjYWNoaW5nIG9mIEZGCiAgKiByZW1vdmUgdHJhaWxpbmcgd2hpdGUtc3BhY2VzIGZyb20gSFRUUC1yZXF1ZXN0cyBiZWZvcmUgcGFyc2luZyAoIzEwOTgpCiAgKiBmaXhlZCBhY2Nlc3Nsb2cudXNlLXN5c2xvZyBpbiBhIGNvbmRpdGlvbmFsIGFuZCB0aGUgY2FjaGluZyBvZiB0aGUKICAgIGFjY2Vzc2xvZyBmb3IgZmlsZXMgKGZpeGVzICMxMDY0KQogICogZml4ZWQgdmFyaW91cyBjcmFzaGVzIGF0IHN0YXJ0dXAgb24gYnJva2VuIGFjY2Vzc2xvZy5mb3JtYXQgc3RyaW5ncyAoIzEwMDApCiAgKiBmaXhlZCBoYW5kbGluZyBvZiAlJSBpbiBhY2Nlc3Nsb2cuZm9ybWF0CiAgKiBmaXhlZCBjb25kaXRpb25hbCBkaXItbGlzdGluZy5leGNsdWRlICgjOTMwKQogICogcmVkdWNlZCBkZWZhdWx0IFBBVEhfTUFYIHRvIDI1NSAoIzgyNikKICAqIEVDT05OQUJPUlRFRCBpcyBub3Qga25vd24gb24gY3lnd2luICgjODYzKQogICogZml4ZWQgY3Jhc2ggb24gdXJsLnJlZGlyZWN0IGFuZCB1cmwucmV3cml0ZSBpZiAlMCBpcyB1c2VkIGluIGEgZ2xvYmFsIGNvbnRleHQKICAgICgjODAwKQogICogZml4ZWQgcG9zc2libGUgY3Jhc2ggaW4gZGVidWctbWVzc2FnZSBpbiBtb2RfZXh0Zm9yd2FyZAogICogZml4ZWQgY29tcGlsYXRpb24gb2YgbW9kX2V4dGZvcndhcmQgb24gZ2xpYmMgPCAyLjMuNAogICogZml4ZWQgaW5jbHVkZSBvZiBlbXB0eSBpbiB0aGUgY29uZmlnZmlsZXMgKCMxMDc2KQogICogc2VuZCBTSUdVU1IxIHRvIGZhc3RjZ2kgY2hpbGRyZW4gYmVmb3JlIFNJR1RFUk0uIGxpYmZjZ2kgd2FudHMgU0lHVVNSMS4gKCM3MzcpCiAgKiBmaXhlZCBtaXNzaW5nIEFVVEhfVFlQRSBlbnRyeSBpbiB0aGUgZmFzdGNnaSBlbnZpcm9ubWVudC4gKCM4ODkpCiAgKiBmaXhlZCBjb21waWxhdGlvbiBpbiBuZXR3b3JrX3dyaXRldi5jIG9uIE1hY09TIFggMTAuMy45ICgjOTAzKQogICogYWRkZWQga2lsbC1zaWduYWwgYXMgYW5vdGhlciBzZXR0aW5nIGZvciBmYXN0Y2dpIGJhY2tlbmRzLiBTZWUgdGhlIHdpa2kgZm9yIG1vcmUuCgotIDEuNC4xMyAtIDIwMDYtMTAtMDkKCiAgKiBhZGRlZCBpbml0Z3JvdXBzIGluIHNwYXduLWZjZ2kgKCM4NzEpCiAgKiBhZGRlZCBhcHIxIHN1cHBvcnQgaHRwYXNzd2QgaW4gbW9kLWF1dGggKCM4NzApCiAgKiBhZGRlZCBsaWdodHkuc3RhdCgpIHRvIG1vZF9tYWduZXQKICAqIGZpeGVkIHNlZ2ZhdWx0IGluIHNwbGl0dGVkIENSTEYgQ1JMRiBzZXF1ZW5jZXMKICAgIChpbnRyb2R1Y2VkIGluIDEuNC4xMikgKCM4NzYpCiAgKiBmaXhlZCBjb21waWxhdGlvbiBvZiBMT0NLIHN1cHBvcnQgaW4gbW9kLXdlYmRhdgogICogZml4ZWQgZnJhZ21lbnRzIGluIHJlcXVlc3QtVVJMcyAoIzg2OSkKICAqIGZpeGVkIHBrZy1jb25maWcgY2hlY2sgZm9yIGx1YTUuMSBvbiBkZWJpYW4KICAqIGZpeGVkIENvbnRlbnQtTGVuZ3RoID0gMCBvbiBIRUFEIHJlcXVlc3RzIHdpdGhvdXQKICAgIGEga25vd24gQ29udGVudC1MZW5ndGggKCMxMTkpCiAgKiBmaXhlZCBta2RpcigpIGZvcmNpbmcgMDcwMCAoIzg4NCkKICAqIGZpeGVkIHdyaXRldigpIG9uIEZyZWVCU0QgNC54IGFuZCBvbGRlciAoIzg3NSkKICAqIHJlbW92ZWQgd2FybmluZyBhYm91dCBhIDQwNC1lcnJvci1oYW5kbGVyCiAgICByZXR1cm5lZCA0MDQKICAqIGJhY2twb3J0ZWQgYW5kIGZpeGVkIHRoZSBidWlsZHN5c3RlbSBjaGFuZ2VzIGZvcgogICAgd2ViZGF2IGxvY2tzCiAgKiBmaXhlZCBwbHVnaW4gbG9hZGluZyBzbyB3ZSBjYW4gZmluYWxseSBsb2FkIGx1YQogICAgZXh0ZW5zaW9ucyBpbiBtb2RfbWFnbmV0IHNjcmlwdHMKICAqIGZpeGVkIGxhcmdlIHVwbG9hZHMgaWYgeGF0dHIgaXMgZW5hYmxlZAoKLSAxLjQuMTIgLSAyMDA2LTA5LTIzCgogICogYWRkZWQgZXhwZXJpbWVudGFsIExPQ0sgc3VwcG9ydCBmb3Igd2ViZGF2CiAgKiBhZGRlZCBDb250ZW50LVJhbmdlIHN1cHBvcnQgZm9yIFBVVCBpbiB3ZWJkYXYKICAqIGFkZGVkIHN1cHBvcnQgZm9yICs9IG9uIGVtcHR5IGFycmF5cyBpbiBjb25maWctZmlsZXMKICAqIGFkZGVkIHNzbC5jaXBoZXItbGlzdCBhbmQgc3NsLnVzZS1zc2x2MgogICogYWRkZWQgJEhUVFBbInF1ZXJ5c3RyaW5nIl0gY29uZGl0aW9uYWwKICAqIGFkZGVkIG1vZF9tYWduZXQgYXMgbG9uZy10ZXJtIHJlcGxhY2VtZW50IGZvciBtb2RfY21sCiAgKiBhZGRlZCB3b3JrLWFyb3VuZCBmb3IgYSBPcGVyYSBCdWcgd2l0aCBTU0wgKyBDaHVua2VkLUVuY29kaW5nCiAgKiBjaGFuZ2VkIC0tcHJpbnQtY29uZmlnIHRvIHByaW50IHRvIHN0ZG91dCBpbnN0ZWFkIG9mIHN0ZGVycgogICogY2hhbmdlZCBubyBsb25nZXIgdXNlIDA2MDAgZm9yIG5ldyBmaWxlcyB3aXRoIHdlYmRhdi4gdW1hc2sgaXMKICAgIGhvbm9yZWQuIE1ha2Ugc3VyZSB5b3UgaGF2ZSBzZXQgYSBwcm9wZXIgdW1hc2suCiAgKiBmaXhlZCB1cGxvYWQgaGFuZ3Mgd2l0aCBTU0wKICAqIGZpeGVkIGNvbm5lY3Rpb24gZHJvcHMgd2l0aCBTU0wgKGFrYSBiYWQgcmV0cnkpCiAgKiBmaXhlZCBwYXRoIHRyYXZlcnNhbCB3aXRoIFwgb24gY3lnd2luCiAgKiBmaXhlZCBtZW0tbGVhayBpbiBtb2RfZmx2X3N0cmVhbWluZwogICogZml4ZWQgcmVxdWlyZWQgdHJhaWxpbmcgbmV3bGluZSBpbiBjb25maWdmaWxlcyAoIzE0MikKICAqIGZpeGVkIHF1b3RpbmcgdGhlIGF1dG9jb25mIGZpbGVzICgjNDY2KQogICogZml4ZWQgZW1wdHkgSG9zdDogKyAkSFRUUFsiaG9zdCJdIGhhbmRsaW5nICgjNDU4KQogICogZml4ZWQgaGFuZGxpbmcgb2YgSWYtTW9kaWZpZWQtU2luY2UgaWYgRVRhZyBpcyBub3Qgc2V0CiAgKiBmaXhlZCBkZWZhdWx0LXNoZWxsIGlmIFNIRUxMIGlzIG5vdCBzZXQgKCM0NDEpCiAgKiBmaXhlZCBhcHBlbmRpbmcgYW5kIGFzc2lnbmluZyBvZiBlbnYuKiB2YXJzCiAgKiBmaXhlZCBlbXB0eSBGQ0dJX1NUREVSUiBwYWNrZXRzCiAgKiBmaXhlZCBjb25kaXRpb25hbCBzZXJ2ZXIuYWxsb3ctaHR0cC0xMQogICogZml4ZWQgaGFuZGxpbmcgb2YgZm9sbG93LXN5bWxpbmsgKyBsc3RhdCgpCiAgKiBmaXhlZCBTSUdIVVAgaGFuZGxpbmcgaWYgbWF4LXdvcmtlcnMgaXMgdXNlZAogICogZml4ZWQgIlNvZnR3YXJlIGNhdXNlZCBjb25uZWN0aW9uIGFib3J0IiBtZXNzYWdlcyBvbiBGcmVlQlNECgotIDEuNC4xMSAtIDIwMDYtMDMtMDkKCiAgKiBhZGRlZCBhYmlsaXR5IHRvIHNwZWNpZnkgd2hpY2ggaXAgYWRkcmVzcyBzcGF3bi1mY2kgbGlzdGVucyBvbgogICAgKGFna3IvYXQvcG9ib3guY29tKQogICogYWRkZWQgbW9kX2Zsdl9zdHJlYW1pbmcgdG8gc3RyZWFtaW5nIEZsYXNoIE1vdmllcyBlZmZpY2llbnRseQogICogZml4ZWQgaGFuZGxpbmcgb2YgZXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgbW9kX2Rhdl9zdm4gYmVoaW5nIGEKICAgIG1vZF9wcm94eQogICogZml4ZWQgZXJyb3ItbWVzc2FnZXMgaW4gbW9kX2F1dGggYW5kIG1vZF9mYXN0Y2dpCiAgKiBmaXhlZCByZS1lbmFibGluZyBvdmVybG9hZGVkIGxvY2FsIGZhc3RjZ2kgYmFja2VuZHMKICAqIGZpeGVkIGhhbmRsaW5nIG9mIGRlbGV0ZWQgZmlsZXMgaW4gbGludXgtc2VuZGZpbGUKICAqIGZpeGVkIGNvbXBpbGF0aW9uIG9uIEJTRCBhbmQgTWFjT1NYCiAgKiBmaXhlZCAkU0VSVkVSWyJzb2NrZXQiXSBvbiBhIGFscmVhZHkgYm91bmQgc29ja2V0CiAgKiBmaXhlZCBsb2NhbCBzb3VyY2UgcmV0cmlldmFsIG9uIHdpbmRvd3MKICAgIChzZWN1bmlhKQogICogZml4ZWQgaGFuZ2luZyBjZ2kgaWYgcmVtb3RlIHNpZGUgaXMgZGllaW5nIHdoaWxlIHJlYWRpbmcKICAgIGZyb20gdGhlIHBpcGUgKHNhbmR5L2F0L21lZWJvLmNvbSkKCi0gMS40LjEwIC0gMjAwNi0wMi0wOAoKICAqIGFkZGVkIGRvY3MgZm9yIG1vZF9kaXJsaXN0aW5nCiAgKiBhZGRlZCBmYXN0Y2dpLm1hcC1leHRlbnNpb25zIHRvIG1vZF9mYXN0Y2dpCiAgKiBmaXhlZCBsb2FkIGJhbGFuY2luZyBmb3IgbW9kX2Zhc3RjZ2kKICAqIGZpeGVkIGV4dHJhIG5ld2xpbmUgZm9yIHN5c2xvZygpIGluIG1vZF9hY2Nlc3Nsb2cKICAqIGZpeGVkIHVzZXItdHJhY2sgY29va2llIGZvciBJRSBpbiBtb2RfdXNlcnRyYWNrCiAgKiBmaXhlZCBjcmFzaCBpbiBkaWdlc3QgaGFuZGxpbmcgaW4gbW9kX2F1dGgKICAqIGZpeGVkIGhhbmRsaW5nIG9mIDMwMSByZXNwb25zZS1ib2RpZXMgZnJvbSBhIG1vZF9wcm94eSBiYWNrZW5kCiAgKiBmaXhlZCBsb2FkaW5nIG9mIGJhc2UgbW9kdWxlcyBpZiBzZXJ2ZXIubW9kdWxlcyBpcyBub3Qgc2V0CiAgKiBmaXhlZCBicm9rZW4gY2dpIGlmIG1vZF9zY2dpIGlzIGxvYWRlZAoKLSAxLjQuOSAtIDIwMDYtMDEtMTQKCiAgKiBhZGRlZCBzZXJ2ZXIuY29yZS1maWxlcyBvcHRpb24gKHNhbmR5IDxzYW5keS9hdC9tZWViby5jb20+KQogICogYWRkZWQgZG9jcyBmb3IgbW9kX3N0YXR1cwogICogYWRkZWQgbW9kX2V2YXNpdmUgdG8gbGltaXQgdGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyBieSBJUCAoPHcxenphcmQvYXQvdGVjaHBvd2VydXAuY29tPikKICAqIGFkZGVkIHRoZSBwb3dlci1tYWduZXQgdG8gbW9kX2NtbAogICogYWRkZWQgaW50ZXJuYWwgc3RhdGlzdGljcyB0byBtb2RfZmFzdGNnaQogICogYWRkZWQgc2VydmVyLnN0YXRpc3RpY3MtdXJsIHRvIGdldCBpbnRlcm5hbCBzdGF0aXN0aWNzIGZyb20gbW9kX3N0YXR1cwogICogYWRkZWQgc3VwcG9ydCBmb3IgY29uZGl0aW9uYWwgcmFuZ2UtcmVxdWVzdHMgdGhyb3VnaCBJZi1SYW5nZQogICogYWRkZWQgc3RhdGljIGJ1aWxkaW5nIHZpYSBzY29ucwogICogZml4ZWQgMTAwJSBjcHUgbG9vcHMgaW4gbW9kX2NnaSAoInNhbmR5IiA8c2plbi9hdC9jcy5zdGFuZm9yZC5lZHU+KQogICogZml4ZWQgaGFuZGxpbmcgZm9yIHNlY3VyZS1kb3dubG9hZC50aW1lb3V0IChqYW1pcy9hdC8zN3NpZ25hbHMuY29tKQogICogZml4ZWQgSUUgYnVnIGluIGNvbnRlbnQtY2hhcnNldCBpbiB0aGUgb3V0cHV0IG9mIG1vZF9kaXJsaXN0aW5nIChzbmlwZXIvYXQvcGhwLm5ldCkKICAqIGZpeGVkIHR5cG9zIGFuZCBsYW5ndWFnZSBpbiB0aGUgZG9jcyAocnlhbi0yMDA1L2F0L3J5YW5kZXNpZ24uY29tKQogICogZml4ZWQgYXNzZXJ0aW9uIGluIG1vZF9jZ2kgb24gSEVBRCByZXF1ZXN0IGlzIENvbnRlbnQtTGVuZ3RoICg8c2FuZHkvYXQvbWVlYm8uY29tPikKICAqIGZpeGVkIGhhbmRsaW5nIGlmIGVxdWFsIGJ1dCBkdXBsaWNhdGUgSWYtTW9kaWZpZWQtU2luY2UgcmVxdWVzdCBoZWFkZXJzCiAgKiBmaXhlZCBlbmRsZXNzIGxvb3BzIGluIG1vZF9mYXN0Y2dpIGlmIGJhY2tlbmQgaXMgZGVhZAogICogZml4ZWQgRGVwdGg6IDEgaGFuZGxpbmcgaW4gUFJPUEZJTkQgcmVxdWVzdHMgb24gZW1wdHkgZGlycwogICogZml4ZWQgZW5jb2Rpbmcgb2YgVVRGOCBlbmNvZGVkIGRpcmxpc3RpbmdzIChKYW5pIFRhc2tpbmVuIDxzbmlwZXIvYXQvaWtpLmZpPikKICAqIGZpeGVkIGluaXRpYWwgYmluZCB0byBhIHVuaXgtZG9tYWluIHNvY2tldCB0aHJvdWdoIHNlcnZlci5iaW5kCiAgKiBmaXhlZCBoYW5kbGluZyBvZiBsb3dlcmNhc2UgZmlsZXN5c3RlbXMKICAqIGZpeGVkIGR1cGxpY2F0ZSByZXF1ZXN0IGhlYWRlcnMgY2F1c2UgYnkgbW9kX3NldGVudgoKLSAxLjQuOCAtIDIwMDUtMTEtMjMKCiAgKiBhZGRlZCBhdXRvLXJlY29ubmVjdCB0byBsZGFwLXNlcnZlciBpbiBtb2RfYXV0aAogICAgKGpvZXJnL2F0L25ldGJzZC5vcmcpCiAgKiBjaGFuZ2VkIGF1dGgubGRhcC1jYWZpbGUgdG8gYmUgb3B0aW9uYWwKICAgIChqb2VyZy9hdC9uZXRic2Qub3JnKQogICogYWRkZWQgc3RyaXBfcmVxdWVzdF91cmkgaW4gbW9kX2Zhc3RjZ2kKICAqIGFkZGVkIG1vcmUgWC0qIGhlYWRlcnMgdG8gbW9kX3Byb3h5CiAgICAoQmVuIEdyaW1tIDxiZW5ncmltbS9hdC9nbWFpbC5jb20+KQogICogYWRkZWQgJ2RlYnVnJyB0byBzaW1wbGUtdmhvc3QgdG8gc3VwcHJlc3MgdGhlCiAgICAobW9kX3NpbXBsZV92aG9zdC5jLjE1NykgTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSAvc2VydmVycy93dy5saWdodHRwZC5uZXQvcGFnZXMvCiAgICBtZXNzYWdlcyBieSBkZWZhdWx0CiAgKiBhZGRlZCBzdXBwb3J0IHRvIGxldCB0aGUgc2VydmVyIGxpc3RlbiBvbiBVTklYLXNvY2tldAogICogY2hhbmdlZCBkZWZhdWx0IHN0YXQtY2FjaGUtZW5naW5lIHRvICdzaW1wbGUnCiAgKiByZW1vdmVkIGRlYmlhbi8gZGlyIGZyb20gc291cmNlIHBhY2thZ2Ugb24gcmVxdWVzdCBieSBwYWNrYWdlcgogICogZml4ZWQgbWF4LWFnZSB0aW1lc3RhbXBzIGluIG1vZF9leHBpcmUKICAqIGZpeGVkIGVuY29kaW5nIHRoZSBmaWxlbmFtZXMgaW4gUFJPUEZJTkQgaW4gbW9kX3dlYmRhdgogICogZml4ZWQgcmFuZ2UgcmVxdWVzdCBoYW5kbGluZyBpbiBuZXR3b3JrX3dyaXRldgogICogZml4ZWQgcmV0cnkgb24gY29ubmVjdCBlcnJvciBpbiBtb2RfZmFzdGNnaQogICAgKFJvYmVydCBHLiBKYWthYm9za3kgPGJvYmJ5L2F0L2FscGhhdHJhZGUuY29tPikKICAqIGZpeGVkIHBvc3NpYmxlIGNyYXNoIGluIG1vZF93ZWJkYXYgaWYgc3FsaXRlMyBzdXBwb3J0CiAgICBpcyBhdmFpbGFibGUgYnV0IG5vdCB1c2UKICAqIGZpeGVkIGZkdmVudC1oYW5kbGVyIGluaXQgaWYgc2VydmVyLm1heC13b3JrZXIgd2FzIHVzZWQKICAgIChTaWRkaGFydGggVmlqYXlha3Jpc2huYW4gPG1haWwvYXQvYmx1ZWZpcmV3b3Jrcy5uZXQ+KQogICogZml4ZWQgbWlzc2luZyBjbGVhbnVwIGluIG15c3FsX3Zob3N0CiAgKiBmaXhlZCBhc3NlcnQoKSBpbiAiY29ubmVjdGlvbnMuYzo5NjI6CiAgICAgIGNvbm5lY3Rpb25faGFuZGxlX3JlYWRfc3RhdGU6IEFzc2VydGlvbiAnYy0+bWVtLT51c2VkJyBmYWlsZWQuIgogICogZml4ZWQgNjRiaXQgaXNzdWUgaW4gbWQ1CiAgKiBmaXhlZCBjcmFzaCBpbiBtb2Rfc3RhdHVzCiAgKiBmaXhlZCBkdXBsaWNhdGUgaGVhZGVycyBpbiBtb2RfcHJveHkKICAqIGZpeGVkIENvbnRlbnQtTGVuZ3RoIGluIEhFQUQgcmVxdWVzdCBpbiBtb2RfcHJveHkKICAqIGZpeGVkIHVuc2lnbmVkL3NpZ25lZCBjb21wYXJpc2lvbnMKICAqIGZpeGVkIHN0cmVhbWluZyBpbiBtb2RfY2dpCiAgKiBmaXhlZCBwb3NzaWJsZSBvdmVyZmxvdyBpbiBwYXNzd29yZC1zYWx0IGhhbmRsaW5nCiAgICAocmVwb3J0ZWQgb24gc2xhc2hkb3QgYnkgamFtZXMtd2ViL2F0L2FuZC5vcmcpCiAgKiBmaXhlZCBzZXJ2ZXItdHJhZmZpYy1saW1pdCBpZiBjb25uZWN0aW9uIGxpbWl0IGlzIG5vdCBzZXQKCi0gMS40LjcgLSAyMDA1LTExLTAyCgogICogYWRkZWQgRkRfQ0xPRVhFQyB0byBmZHMgd2hpY2ggYXJlIGtlcHQgb3BlbiBmb3IgYSBsb25nZXIgdGltZQogICogYWRkZWQgc21hbGxlciwgbW92aW5nIG1tYXBlZCB3aW5kb3dzIHRvIG5ldHdvcmtfd3JpdGV2CiAgKiBhZGRlZCBtYWR2aXNlKCkgdG8gaW5zdHJ1Y3QgdGhlIGtlcm5lbCB0aGUgZG8gcHJvcGVyIHJlYWQtYWhlYWQgaW4gbmV0d29ya193cml0ZXYKICAqIGFkZGVkIHN1cHBvcnQgZm9yICVJIGluIG1vZF9hY2Nlc3Nsb2cKICAqIGFkZGVkIGJldHRlciBjb21wYXQgdG8gQXBhY2hlIGZvciA/YXV0byBpbiBtb2Rfc3RhdHVzCiAgKiBhZGRlZCBzdXBwb3J0IGZvciB1c2VyZGlycyB3aXRob3V0IGEgZW50cnkgaW4gL2V0Yy9wYXNzd2QgaW4gbW9kX3VzZXJkaXIKICAgIChyb2IvYXQvaW52ZXJzZXBhdGguY29tKQogICogYWRkZWQgc3RhcnR1cC10aW1lIHNlbGVjdGFibGUgbmV0d29yay1iYWNrZW5kCiAgKiBhZGRlZCBsb2NhdGlvbiBvZiB1cGxvYWQtZmlsZXMgdG8gY29uZmlnIGFzIGFycmF5CiAgKiBhZGRlZCB3ZWJkYXYubG9nLXhtbCBmb3IgbG9nZ2luZyB4bWwtY29udGVudCBpbiBtb2Rfd2ViZGF2CiAgKiBhZGRlZCBDYWNoZS1Db250cm9sOiBtYXgtYWdlIHRvIG1vZF9leHBpcmUKICAqIHdvcmthcm91bmQgbWlzc2luZyBjbGllbnQtYnVnIGJ5IGFzc3VtaW5nIHdlIHJlY2VpdmVkIGEgY2xvc2Utbm90aWZ5IG9uCiAgICBub24ta2VlcC1hbGl2ZSByZXF1ZXN0cyBpbiBTU0wgcmVxdWVzdAogICogZGlzYWJsZWQga2VyYmVyb3M1IHN1cHBvcnQgYnkgZGVmYXVsdCB0byBmaXggY29tcGlsYXRpb24gb24gUkhFTAogICogZml4ZWQgb3JkZXIgb2YgbGlicmFyeSBjaGVja3MgdG8gZml4IGNvbXBpbGF0aW9uIG9uIFNvbGFyaXMgOQogICogZml4ZWQgb3BlbiBmaWxlLWRlc2NyaXB0b3JzIG9uIHJlYWQtZXJyb3IKICAqIGZpeGVkIGNyYXNoIGlmIC92YXIvdG1wIGlzIG5vdCB3cml0YWJsZQoKLSAxLjQuNiAtIDIwMDUtMTAtMDkKCiAgKiBmaXhlZCBjb21waWxhdGlvbiBvbiBNYWNPUyBYIGFuZCBjeWd3aW4KICAqIGZpeGVkIGNvbXByZXNzZWQgb3V0cHV0IGlmIGNhY2hpbmcgd2FzIGRpc2FibGVkIChzZWVuIGluIElFIGFuZCBPcGVyYSkKICAqIGZpeGVkIHJhbmdlLXJlcXVlc3Qgb3B0aW9uCiAgKiBmaXhlZCBteXNxbC12aG9zdCBtb2R1bGUgKHdhcyBicm9rZW4gaW4gMS40LjUpCiAgKiBmaXhlZCBmYWxzZSBwb3NpdGl2ZSBpbiB0aGUgZGV0ZWN0aW9uIG9mIGNhc2UtaW5zZW5zaXRpdmUgRlMKCi0gMS40LjUgLSAyMDA1LTEwLTAyCgogICogYWRkZWQgYWxsIERlbHRhViBtZXRob2RzIGFzIGtub3duIG1ldGhvZHMKICAqIGFkZGVkIGJ1ZmZlci10by1kaXNrIG9mIHJlcXVlc3QgY29udGVudAogICogYWRkZWQgd2FybmluZyBmb3IgdW51c2VkIHZhcmlhYmxlcyBpbiBjb25kaXRpb25hbHMKICAqIGFkZGVkIGdsb2JhbCBpbmRleC1nZW5lcmF0b3JzIHRvIG1vZF9pbmRleGZpbGUKICAqIGZpeGVkIGNhY2hpbmcgZm9yIHJlbW90ZS1pcCBjb25kaXRpb25hbHMgd2l0aCBrZWVwLWFsaXZlCiAgKiBmaXhlZCByZWRpcmVjdHMgd2l0aCBjb250ZW50CiAgKiBmaXhlZCBpbmZpbml0ZSBsb29wIGluIGV4ZWMtY21kIGluIG1vZF9zc2kKICAqIGZpeGVkIHNlZ2ZhdWx0IGluIGNvbmZpZyBoYW5kbGluZyBmb3IgbW9kX215c3FsX3Zob3N0CiAgKiBmaXhlZCBzZWdmYXVsdCBvbiBGSUZPcy9Tb2NrZXRzCiAgKiBmaXhlZCBwb3NzaWJsZSBjcmFzaCBvbiB1bmluaXQgbWVtb3J5IGlmIElmLU1vZGlmaWVkLVNpbmNlIHdhcyB0b28gbG9uZwogICogZml4ZWQgYWNjb3VudGluZyBvZiBtZW0tY2h1bmtzCiAgKiBmaXhlZCBzdGFydmluZyBvZiBjb25uZWN0aW9ucyBvbiBoaWdoIGxvYWQKICAqIGZpeGVkIGNyYyBlcnJvcnMgaW4gbW9kX2NvbXByZXNzIG9uIDY0Yml0IHBsYXRmb3JtcwogICogZml4ZWQgaGFuZGxpbmcgb2Ygb3ZlcmxhcHBpbmcgZmFzdGNnaSBwYWNrZXRzIChidWcgYWRkZWQgaW4gMS40LjQpCiAgKiBmaXhlZCBsb2dpYyBvZiBjb25kaXRpb25hbHMgaWYgYSBoZWFkZXIgd2FzIG5vdCBzZXQKICAqIGZpeGVkIGEgc2VnZmF1bHQgaW4gbW9kX3Jld3JpdGUgaWYgJTEgcmVmZXJlbmNlcyB3ZXJlIHVzZWQKICAqIGZpeGVkIGhhbmRsaW5nIG9mIGVtcHR5IHJlcXVlc3QgVVJJcyBpbiBIVFRQIHJlcXVlc3RzCgotIDEuNC40IC0gMjAwNS0wOS0xNgogICogYWRkZWQgc3VwcG9ydCBmb3IgJVYgaW4gbW9kX2FjY2Vzc2xvZwogICogYWRkZWQgYSBvcHRpb24gZm9yIGEgRmFzdENHSSByZXNwb25zZXIgdG8gc2VuZCBzdGF0aWMgZmlsZXMKICAqIGFkZGVkIG1kNSBhbmQgYmxvd2Zpc2ggaGFzaGVzIHRvIGh0cGFzc3dkCiAgKiBmaXhlZCBNRVRIT0QgaW4gbW9kX2FjY2Vzc2xvZyBvZiBXZWJEQVYgbWV0aG9kcwogICogZml4ZWQgY2hlY2sgZm9yIHBlcm1pc3Npb24gYmVmb3JlIGZpbGVzIGluIHNlbnQKICAqIGZpeGVkIG1vZC1wcm94eSBhbmQgY29udGVudCBmb3Igbm9uLVBPU1QgcmVxdWVzdHMKICAqIGZpeGVkIGNvbXBpbGF0aW9uIG9mIG1vZF9jbWwgb24gTWFjT1MgWAogICogZml4ZWQgU1NMIGVycm1zZyBhZnRlciBhY2NlcHQoKQogICogZml4ZWQgbWVtbGVhayBpbiBzdGF0LWNhY2hlCiAgKiBmaXhlZCBhYm9ydGVkIGNvbm5lY3Rpb25zIGlmIGZpbGUgd2FzIG1vdmVkIHdoaWxlIGluIHRyYW5zZmVyCiAgKiBmaXhlZCBtZW0tdXNhZ2UgZm9yIGxhcmdlIEZhc3RDR0kgdHJhbnNmZXJzCgotIDEuNC4zIC0gMjAwNS0wOS0wMQoKICAqIGFkZGVkIGdyYWNlZnVsbCBzaHV0ZG93bgogICogYWRkZWQgc2VydmVyLm1heC1jb25uZWN0aW9ucwogICogZml4ZWQgY29tcGlsYXRpb24gb24gYWxsIEJTRCBwbGF0Zm9ybXMKICAqIGZpeGVkIGluaXQgb2Yga3F1ZXVlIGFuZCAvZGV2L3BvbGwgYWZ0ZXIgZGFlbW9uaXplCiAgKiBmaXhlZCBzZWdmYXVsdCBpZiBzZWxlY3QoKSBpcyBldmVudC1oYW5kbGVyIGFuZCBtb3JlIHRoYW4gRkRfU0VUU0laRQogICAgZmRzIGFyZSBvcGVuZWQKICAqIGZpeGVkIGNvbXBpbGF0aW9uIG9mIG1vZF9jbWwKICAqIGZpeGVkIGJpbi1jb3B5LWVudiBpbiBtb2RfZmFzdGNnaQoKLSAxLjQuMiAtIDIwMDUtMDgtMjkKCiAgKiBmaXhlZCBtaW1ldHlwZSBkZXRlY3Rpb24gb24gdXBwZXJjYXNlIGV4dGVuc2lvbnMKICAqIGZpeGVkIG1lbWxlYWsgaW4gc3RhdC1jYWNoZQogICogZml4ZWQgaW5maW5pdGUgbG9vcCBpbiBtb2RfY2dpCiAgKiBmaXhlZCBhbGlnbm1lbnQgY3Jhc2hlcyBvbiBzcGFyYzY0IGFuZCBhbHBoYTY0CiAgKiBmaXhlZCB0ZXN0IHN5c3RlbSBmb3IgZ2VudG9vIGVidWlsZAogICogZml4ZWQgaW5maW5pdGUgbG9vcCBpbiBTU0wKICAqIGZpeGVkIHJhbmdlIHJlcXVlc3QgZm9yIGZpbGVzID4gMkdiCgotIDEuNC4xIC0gMjAwNS0wOC0yMgoKICAqIGFkZGVkIGEgY29tcGxldGUgQ2xhc3MgMSBjb21wbGllbnQgbW9kX3dlYmRhdgogICogZml4ZWQgc3NsIHN1cHBvcnQgKGVzcGVjaWFsbHkgb24gT3BlbkJTRCkKICAqIGZpeGVkIHJlc3BvbnNlIGhlYWRlciBpbiBib2R5IHByb2JsZW0gaW4gbW9kX2NnaQogICogZml4ZWQgbnVtYmVycyBiZWZvcmUgYm9keSBwcm9ibGVtCiAgKiBmaXhlZCBjb21waWxhdGlvbiBvbiBTb2xhcmlzIGFuZCBGcmVlQlNECiAgKiBmaXhlZCBjb25kaXRpb25hbCBvcHRpb25zIGluIG1vZF9kaXJsaXN0aW5nCiAgKiBmaXhlZCBzZWdmYXVsdCBpbiBtb2RfZGlybGlzdGluZyBmb3IgTkZTIGRpcmVjdG9yaWVzCiAgKiBmaXhlZCBjaGVjayBmb3IgZG9jcm9vdCBpbiBjaGFuZ2Utcm9vdCBlbnZpcm9ubWVudHMKCi0gMS40LjAgLSAyMDA1LTA4LTE3CgogICogYWRkZWQgbmVzdGVkIGNvbmRpdGlvbmFscwogICogYWRkZWQgcmVtb3RlLWlwIHRvICRIVFRQCiAgKiBhZGRlZCBzdXBwb3J0IGZvciBzdGF0LWNhY2hlIHZpYSBGQU0KICAqIGFkZGVkIGEgcmVhZC1vbmx5IFdlYkRBViBtb2R1bGUKICAqIGZpeGVkIGNsZWFudXAgaW4gbW9kX3Byb3h5IGFuZCBtb2RfZmFzdGNnaQogICogZml4ZWQgaGFuZGxpbmcgb2YgZmlsZW5hbWVzIG9uIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbXMKCi0gMS4zLjE2IC0gMjAwNS0wNy0zMQoKICAqIGFkZGVkIERhdGU6IGhlYWRlcnMgdG8gZHluYW1pYyBIVFRQLzEuMCByZXF1ZXN0cwogICogYWRkZWQgc3VwcG9ydCBmb3IgT1BUSU9OICogSFRUUC8xLjEKICAqIGFkZGVkIHN1cHBvcnQgZm9yIGFjY2Vzc2xvZyB0byBzeXNsb2cKICAqIGFkZGVkIHN1cHBvcnQgZm9yIFBBVEhfSU5GTyBndWVzc2luZyBpZiBjaGVjay1sb2NhbCBpcyBkaXNhYmxlZCBpbgogICAgICBtb2RfZmFzdGNnaQogICogYWRkZWQgc3dpdGNoIHRvIGRpc2FibGUgcmFuZ2UtcmVxdWVzdHMKICAqIGFkZGVkIHZhbGlkLXVzZXIgb3B0aW9uIGZvciBtb2RfYXV0aCAodGlnZ2VyIGF0IGdlbnRvby5vcmcpCiAgKiBhZGRlZCBKYXZhU2NyaXB0IGJhc2VkIHNvcnRpbmcgdG8gbW9kX3N0YXR1cyAoZXJpaykKICAqIGFkZGVkIHNlbGVjdGl2ZSBUQ1BfQ09SSyAoQ2hyaXN0aWFuIHZvbiBSb3F1ZXMpCiAgKiBicmVhayB1cCBlbmRsZXNzIGxvb3BzIHdpdGggU3RhdHVzOiA1MDAKICAqIGZpeGVkIGVuZGxlc3MgbG9vcHMgaW4gbW9kX3Jld3JpdGUKICAqIG1hcHBlZCB1cmwucmV3cml0ZSBhbmQgdXJsLnJld3JpdGUtZmluYWwgdG8gdXJpLnJld3JpdGUtb25jZQogICogZml4ZWQgY29tcGlsYXRpb24gZm9yIG1vZF90cmlnZ2VyX2I0X2RsCiAgKiBmaXhlZCAnY2FuJ3QgcmVhY2ggaG9zdCcgaW4gbW9kX3Byb3h5CiAgKiBlcnJvci1oYW5kbGVyLTQwNCBkZWZhdWx0cyB0byBTdGF0dXM6IDIwMCBhbmQgc3RhdGljIGZpbGVzIHdvcmsgbm93CgotIDEuMy4xNSAtIDIwMDUtMDctMTUKCiAgKiBhZGRlZCBtb2RfY21sCiAgKiBhZGRlZCBtb2RfdHJpZ2dlcl9iNF9kbAogICogYWRkZWQgZW5jb2RpbmcgdG8gbW9kX2Rpcmxpc3RpbmcKICAqIGFkZGVkID9hdXRvIHRvIG1vZF9zdGF0dXMKICAqIHJlbGF4ZWQgaGFuZGxpbmcgb2YgY2hhcmFjdGVycyBpbiBVUklzIGV2ZW4gbW9yZQogICogZml4ZWQgZGV0ZWN0aW9uIG9mIHNlbmRmaWxlKCkgb24gTGludXggMi40LngKICAqIGZpeGVkIGNvbXBhcmlzaW9uIG9mIGJ1ZmZlcnMgZm9yIHNob3J0IHN0cmluZ3MKICAqIHNlcnZlci5lcnJvcmZpbGUtcHJlZml4IGlzIG5vdyBjb25kaXRpb25hbAogICogZml4ZWQgbW9kX3JyZHRvb2wgdG8gY2xvc2UgU1RERVJSCgotIDEuMy4xNCAtIDIwMDUtMDYtMTUKCiAgKiBhZGRlZCBTQ0dJIHN1cHBvcnQgdmlhIG1vZF9zY2dpCiAgKiBhZGRlZCBoYXNoLWJhc2VkIGFuZCByb3VuZC1yb2JpbiBsb2FkIGJhbGFuY2luZyB0byBtb2RfcHJveHkKICAqIGZpeGVkIHJhbmdlIHJlcXVlc3RzIGxhcmdlciB0aGFuIDJHYgogICogZml4ZWQgY29tcGlsYXRpb24gb24gU29sYXJpcwogICogZml4ZWQgZW5kbGVzcyBsb29wcyBpbiBtb2RfZmFzdGNnaSwgbW9kX2NnaSBhbmQgbW9kX3Byb3h5CiAgKiBmaXhlZCBoYW5kbGluZyBvZiBVUklzIGZvciAnKycgYW5kIGNoYXJhY3RlcnMgPiAxMjcKCi0gMS4zLjEzIC0gMjAwNS0wMy0wNgoKICAqIGFkZGVkIGN1c3RvbWl6YWJsZSBkaXJlY3RvcnkgbGlzdGluZ3MKICAqIGZpeGVkIGNvbXBpbGUgZXJyb3Igb24gYWxsIEJTRCB1bml4ZXMKICAqIGZpeGVkIFBBVEhJTkZPIGhhbmRsaW5nIGZvciBGYXN0Q0dJCiAgKiBmaXhlZCBoYW5kbGluZyBvZiByZW1vdGUtY2xvc2Ugb24gRnJlZUJTRCBhbmQgT3BlblNTTAoKLSAxLjMuMTIgLSAyMDA1LTAzLTAyCgogICogYWRkZWQgc3NsLmNhLWZpbGUKICAqIGFkZGVkIHN1cHBvcnQgZm9yIFxuXG4gYXMgdGVybWluYXRvcgogICogcmV3cm90ZSB0ZXN0LWZyYW1ld29yayBhbmQgYWRkZWQgbW9yZSB0ZXN0cwogICogZml4ZWQgY2dpLmFzc2lnbiB3aXRoIGVtcHR5IGhhbmRsZXIKICAqIGZpeGVkIHNlZ2ZhdWx0IGluIGRlYnVnLWNvZGUKICAqIGZpeGVkIG1vZF9leHBpcmUgaWYgbW9kaWZpY2F0aW9uLXRpbWVzdGFtcHMgYXJlIHVzZWQKICAqIGZpeGVkIHNlZ2ZhdWx0IG9uIGR1cGxpY2F0aW9uIEhvc3QtaGVhZGVycwogICogZml4ZWQgZW5kbGVzcyBsb29wIGluIG1vZF9mYXN0Y2dpCiAgKiBmaXhlZCBoYW5kbGluZyBvZiBkZWFkIGZhc3RjZ2ktcHJvY2Vzc2VzCgotIDEuMy4xMSAtIDIwMDUtMDItMjAKCiAgKiBhZGRlZCBSRU1PVEVfUE9SVCBhbmQgU0VSVkVSX0FERFIgdG8gQ0dJLWVudgogICogcmVsYXhlZCBoYW5kbGluZyBvZiBuZXdsaW5lcyBiZWZvcmUga2VlcC1hbGl2ZSByZXF1ZXN0cwogICogcmVsYXhlZCB1cmktcGFyc2VyIGFnYWluCiAgKiBmaXhlZCBQSFBfU0VMRiBmb3IgcGhwCiAgKiBmaXhlZCBjb21waWxhdGlvbiBvbiBNYWNPUyBYCiAgKiBmaXhlZCBoYW5kbGluZyBvZiBFUElQRSBhbmQgRUNPTk5SRVNFVAogICogZml4ZWQgY3Jhc2ggaW4gbW9kX2F1dGggaWYgY29uZmlnLW9wdGlvbnMgYXJlIG1pc3NpbmcKICAqIGZpeGVkIGhhbmRsaW5nIG9mIG1pc3NpbmcgdHJhaWxpbmcgLyBpbiBtb2RfdXNlcmRpcgogICogZml4ZWQgY29uZGl0aW9uYWwgc2VjZG93bmxvYWQuc2VjcmV0CiAgKiBmaXhlZCBSRVBPUlQgTUUgZXJyb3IgZHVlIHRvIGZhaWxlZCByZWNvbm5lY3RzIGluIG1vZF9mYXN0Y2dpCiAgKiBmaXhlZCBjbWRsaW5lIGhhbmRsaW5nIGluIG1vZF9mYXN0Y2dpCgotIDEuMy4xMCAtIDIwMDUtMDItMDYKCiAgKiBhZGRlZCBzdXBwb3J0IGZvciBmdWxsIGNvbW1hbmRsaW5lIGluIHNwYXduLWZjZ2kKICAqIGZpeGVkIG1pc3NpbmcgY2hlY2sgZm9yIElQLWFkZHJlc3MgaW4gbW9kX2Zhc3RjZ2kKICAqIGZpeGVkIGNvbXBpbGUgZXJyb3Igd2l0aCBvcGVuc3NsIGluIG1vZF9mYXN0Y2dpCiAgKiByZW1vdmVkIGEgZGVidWctbWVzc2FnZSBmcm9tIG5ldHdvcmstZnVuY3Rpb25zCgotIDEuMy45IC0gMjAwNS0wMi0wNgoKICAqIGFkZGVkIGEgc3RyaWN0ZXIgVVJJIHBhcnNlcgogICogYWRkZWQgYSBjaGVjayB0byB0aGUgQ0dJIHNwYXduZXIgaWYgdGhlIGNnaS1oYW5kbGVyIGV4aXN0cwogICogYWRkZWQgZG9jdW1lbnRhdGlvbiBmb3IgU1NMIGFuZCBtb2Rfc3RhdHVzCiAgKiBhZGRlZCBoYW5kbGluZyBvZiBzdGFydHVwIGVudmlyb25tZW50IHRvIEZhc3RDR0kKICAqIGltcHJvdmVkIHBlcmZvcm1hbmNlIGluIEZhc3RDR0kgaW4gYnVpbGRpbmQgdGhlIEZhc3RDR0kgaGVhZGVyCiAgKiBmaXhlZCBtaW4tcHJvY3MgYW5kIG1heC1wcm9jcyBpbiBGYXN0Q0dJIG9uIFBvd2VyUEMKICAqIGZpeGVkIGNyYXNoIGluIHNldGVudi5hZGQtcmVzcG9uc2UtaGVhZGVyCiAgKiBmaXhlZCBoYW5kbGluZyBvZiBucGgtc2NyaXB0cyBpbiBDR0kKICAqIGZpeGVkIGFjY2lkZW50bHkgc2VuZGluZyBvdXQgcGh5c2ljYWwgZmlsZSBpbiBDR0kgb24gZXJyb3IKICAqIGZpeGVkIGN5Z3dpbiBzdXBwb3J0CiAgKiBmaXhlZCBoYW5kbGluZyBvZiBtaXNzaW5nIGZpbGVzCiAgKiBmaXhlZCBIRUFEIHJlcXVlc3RzIGZvciBkeW5hbWljIHJlcXVlc3RzCgotIDEuMy44IC0gMjAwNS0wMS0zMAoKICAqIGFkZGVkIHRyYWZmaWMgc2hhcGluZyBieSByZW1vdGUgaG9zdCBhbmQgdmlydHVhbCBzZXJ2ZXIKICAqIGFkZGVkIGF1dG8tc3Bhd25pbmcgb2YgRmFzdENHSSBwcm9jZXNzIG9uIGRlbWFuZAogICogYWRkZWQgdmlydHVhbCBob3N0IGJhc2VkIG9uIE15U1FMCiAgKiBhZGRlZCBtb2Rfc2V0ZW52IHRvIGFkZCBlbnZpcm5vbWVudCBhbmQgaHR0cCBoZWFkZXJzIG9uIHRoZSBmbHkKICAqIGFkZGVkIHN1cHBvcnQgZm9yIHN5c2xvZyBpbiBtb2RfYWNjZXNzbG9nCiAgKiBpbXByb3ZlZCBvdXRwdXQgb2YgbW9kX3N0YXR1cwogICogaW1wcm92ZWQgZGVidWcgb3V0cHV0IGluIHJlcXVlc3QgaGFuZGxpbmcKICAqIGZpeGVkIGJ1aWxkIHByb2JsZW1zIG9uIG5ldGJzZCAxLjQueCBhbmQgMS41LngKICAqIGZpeGVkIHN0YXR1cy51cmwgY29uZmlndXJhdGlvbgogICogZml4ZWQgaGFuZGxpbmcgb2YgIT0gYW5kICF+IGluIGNvbmZpZ3V0YXRpb24KICAqIGZpeGVkIHNwZWNpYWwgY2FzZXMgaW4ga2VlcC1hbGl2ZSBoYW5kbGluZwogICogZml4ZWQgdGltZW91dCBoYW5kbGluZyBpbiBoYW5kbGluZyBQT1NUIHJlcXVlc3RzCiAgKiBmaXhlZCBtb2RlIEFVVEhPUklaRVIgaW4gRmFzdENHSQogICogZml4ZWQgaGFuZGxpbmcgaWYgaW50ZXJuYWwgcmVkaXJlY3RzIGlmIG5vIEhvc3Q6IGlzIHN1cHBsaWVkCiAgKiBmaXhlZCBtb2RfYWxpYXMgKyBwYXRoaW5mbwogICogZml4ZWQgZGlyZWN0b3J5IGluZGV4ZXMgYW5kIHBlcm1pc3Npb25zCiAgKiBlbmFibGVkIHNlbmRpbmcgZXJyb3Jsb2cgdG8gc3lzbG9nIGFnYWluCgotIDEuMy43IC0gMjAwNC0xMi0xMQoKICAqIGFkZGVkIHJldHJpZXMgZm9yIGEgZmFzdGNnaSBjb25uZWN0IGlmIGEgcGhwLWNoaWxkcwogICAgZGllcyBhdCBzdGFydHVwCiAgKiB1cGRhdGUgdGhlIGRlYmlhbiBkaXJlY3RvcnkKICAqIGFkZGVkIHNldGdyb3VwcygpIHRvIGRyb3AgYWxsIGdyb3VwLXByaXZzCiAgKiBhZGRlZCBuYXRpdmUgcG9ydCB0byB3aW5kb3dzIHZpYSBtaW5ndzMyCiAgKiBhZGRlZCBzZXJ2ZXIudGFnID0gJy4uLicKICAqIGFkZGVkIHN1cHBvcnQgZm9yICR7Li4ufSBpbiBtb2Rfc3NpCiAgKiBwb3J0ZWQgYWxsIHBsdWdpbnMgdG8gY29uZGl0aW9uYWwgc3VwcG9ydAogICogZml4ZWQgbXVsdGlwYXJ0IGhhbmRsaW5nIGluIGNnaQogICogZml4ZWQga3F1ZXVlIGV2ZW50LWhhbmRsZXIKICAqIGZpeGVkIHdyYXAtYXJvdW5kIGluIG1vZF9zdGF0dXMKICAqIGZpeGVkIGNyYXNoIHdpdGggU1NMICsgRmFzdENHSQogICogZml4ZWQgZGV0ZWN0aW9uIG9mIFNTTCBoZWFkZXJzCiAgKiBmaXhlZCBoYW5kbGluZyBvZiBkYW5nbGluZyBTU0xfc2h1dGRvd24KICAqIGZpeGVkIGRldGVjdGlvbiBvZiBrZWVwLWFsaXZlIG9mIEZpcmVmb3gKCi0gMS4zLjYgLSAyMDA0LTExLTAzCgogICogYWRkZWQgc3Bhd24tZmNnaSB0byB0aGUgZGlzdHJpYnV0aW9uCiAgKiBhZGRlZCBzdXBwb3J0IGluIGZhc3RjZ2kgbW9kdWxlIHRvIHNwYXduIGZhc3RjZ2kKICAgIHByb2Nlc3NlcyBpdHNlbGYKICAqIGZpeGVkIGxvZ2ZpbGUgY3ljbGluZyBpZiBleHRlcm5hbCBsb2dnaW5nIGlzIHVzZWQKICAqIGZpeGVkIGNvbm5lY3Rpb24gaGFuZGxpbmcgaW4gZmFzdGNnaSBpZiBubyBjaHVuawogICAgZW5jb2RpbmcgaXMgdXNlZAogICogZml4ZWQgaW50ZXJuYWwgcmVkaXJlY3RzIG9uIGRpcmVjdG9yaWVzIGlmIGEgcXVlcnkKICAgIHN0cmluZyBpcyBzdXBwbGllZAogICogZml4ZWQgY2dpLW1vZHVsZSBmb3IgUE9TVCByZXF1ZXN0IGFib3ZlIDRrCiAgKiBmaXhlZCBtb2RfYWxpYXMgYW5kIGZvbGxvdy1zeW1saW5rCgotIDEuMy41IC0gMjAwNC0xMC0zMQoKICAqIGFkZGVkIG1vZF9hbGlhcwogICogYWRkZWQgbW9kX3VzZXJkaXIKICAqIGFkZGVkIHRoZSBleGVjIGNvbW1hbmQgdG8gdGhlIFNTSSBoYW5kbGVyCiAgKiBhZGRlZCBhIHN3aXRjaCB0byBkaXNhYmxlIGZvbGxvdy1zeW1saW5rcwogICogYWRkZWQgYSBzd2l0Y2ggdG8gZGlzYWJsZSBJUHY2IGF0IGNvbXBpbGUtdGltZQogICogZml4ZWQgY29tcGlsYXRpb24gb24gRnJlZUJTRCBhbmQgTmV0QlNEIDEuMy54CiAgKiBmaXhlZCBzZWdmYXVsdCBpbiBwaXBlbGluaW5nCiAgKiBmaXhlZCBhIHNlZ2ZhdWx0IGluIHdyaXRldigpIGhhbmRsZXIgaWYgTEZTIGlzIHVzZWQKCi0gMS4zLjQgLSAyMDA0LTEwLTI0CgogICogYWRkZWQgbGltaXRlciBmb3Igb3BlbiBmaWxlcwogICogYWRkZWQgbG9nZ2luZyBvZiB1c2VyIHN1cHBsaWVkIGRhdGEgdG8gYWNjZXNzbG9ncwogICogYWRkZWQgYnVpbGQgdGFyZ2V0IGZvciBPcGVuV1JUCiAgKiBhZGRlZCBwbGFpbiBiYWNrZW5kIHN1cHBvcnQgZm9yIGF1dGgtZGlnZXN0CiAgKiBmaXhlZCBoYW5kbGluZyB0aGUgZXh0ZXJuYWwgYWNjZXNzbG9nIHByb2Nlc3NlcwogICogZml4ZWQgU0VSVkVSX05BTUUgaW4gQ0dJIGFuZCBGYXN0Q0dJCgotIDEuMy4zIC0gMjAwNC0xMC0xNgoKICAqIGFkZGVkIHN1cHBvcnQgZm9yIE5MIHRlcm1pbmF0b3JzIGluIENHSS1zY3JpcHRzCiAgKiBhZGRlZCBzdXBwb3J0IGZvciBjb25kaXRpb25hbHMgaW4gbW9kX2F1dGgsCiAgICBtb2Rfc2ltcGxlX3Zob3N0IGFuZCBtb2RfZXZob3N0CiAgKiBhZGRlZCBhIGVycm9yLWhhbmRsZXIgZm9yIDQwNCBjb2RlcwogICogZml4ZWQgcmVxdWVzdCBjb3VudGVyIGluIHRoZSBycmR0b29sIG1vZHVsZQogICogZml4ZWQgbG9nLWZpbGUgY3ljbGluZwogICogZml4ZWQgc2VnLWZhdWx0CgotIDEuMy4yIC0gMjAwNC0wOS0zMAoKICAqIGZpeGVkIGZpbGUtY2FjaGUKCi0gMS4zLjEgLSAyMDA0LTA5LTMwCgogICogZml4ZWQgZmlsZS1jYWNoZQogICogZml4ZWQgcGFyc2luZyBvZiBJUHY2IGFkcmVzc2VzCiAgKiBmaXhlZCBjZ2kgZm9yIGN5Z3dpbgogICogZml4ZWQgdGVzdC1zdWl0ZSBmb3IgRnJlZUJTRCBhbmQgSVJJWAogICogZml4ZWQgaGFuZGxpbmcgb2Ygc2hyaW5rZWQgZmlsZXMKICAqIGZpeGVkIGhhbmRsaW5nIG9mIFJFUVVFU1RfVVJJIGFmdGVyIHJld3JpdGUKCi0gMS4zLjAgLSAyMDA0LTA5LTE3CgogICogYWRkZWQgYnVpbGQgZm9yIE1hY09TIFggYW5kIEN5Z3dpbgogICogYWRkZWQgaGFuZGxpbmcgb2YgbW9yZSB0aGFuIG9uZSBzb2NrZXQKICAqIGFkZGVkIGNvbmZpZy1jb25kaXRpb25zIGZvciBVc2VyLUFnZW50IGFuZCBSZWZlcmVyCiAgKiBhZGRlZCBmaW5hbCByZXdyaXRlLXJ1bGVzCgotIDEuMi44IC0gMjAwNC0wOS0xMQoKICAqIGFkZGVkIGEgY2FjaGUgZm9yIG1pbWV0eXBlcwogICogYWRkZWQgWC1Gb3J3YXJkZWQtRm9yIGZvciBtb2RfcHJveHkKICAqIGZpeGVkIGhhbmRsaW5nIG9mIGNvbW1lbnRzIGluIElmLU1vZGlmaWVkLVNpbmNlCiAgKiBmaXhlZCBlcnJvciBoYW5kbGluZyBpbiBGYXN0Q0dJIGNvZGUKICAqIGZpeGVkIGV4cGlyZSBwbHVnaW4gZm9yIHNlY29uZCBFeHBpcmUgaGVhZGVyCgotIDEuMi43IC0gMjAwNC0wOS0wNAoKICAqIGFkZGVkIG1vZF9ycmR0b29sIGZvciBpbnRlcm5hbCBzdGF0aXN0aWNzCiAgKiBhZGRlZCB4YXR0ciBzdXBwb3J0CiAgKiBhZGRlZCB1c2VyLWNvbnRyb2xhYmxlIHRpbWVvdXRzCiAgKiBpbXByb3ZlZCBkb2N1bWVudGF0aW9uIGZvciBtYW55IHBsdWdpbnMKICAqIGZpeGVkIFBPU1QgcmVxdWVzdHMgZm9yIG1vZF9wcm94eQogICogZml4ZWQgcmFyZSBoYW5nIHdpdGggQ0dJCiAgKiBmaXhlZCBzZWctZmF1bHQgaWYgbm8gY29uZmlnZmlsZSBpcyBzcGVjaWZpZWQKICAqIGZpeGVkIHJhcmUgcHJvYmxlbSBpbiBGYXN0Q0dJIGhlYWRlciBnZW5lcmF0aW9uCgotIDEuMi42IC0gMjAwNC0wOC0yNgoKICAqIGFkZGVkIGFwYWNoZS1saWtlIGFjY2Vzc2xvZyBkZWZpbml0aW9uCiAgKiBlbmFibGVkIHRpbWVzdGFtcCBjYWNoZSBhZ2FpbgogICogaW1wcm92ZWQgcGVyZm9ybWFuY2UgaW4gdGhlIHN0cmluZyBjb21wYXJlIGZ1bmN0aW9ucwogICogZml4ZWQgZG91YmxlLWZyZWUgaW4gZmFzdGNnaSBoYW5kbGVyCiAgKiBmaXhlZCBlcnJvci1oYW5kbGluZyBpbiBjZ2kgaGFuZGxlcgoKLSAxLjIuNSAtIDIwMDQtMDgtMTAKCiAgKiBhZGRlZCBza2VsZXRvbiBmb3Igc29sYXJpcyAxMCBwb3J0LUFQSQogICogYWRkZWQgY29tcHJlc3Npb24gc3VwcG9ydCBldmVuIGlmIG5vIGNhY2hlZGlyIGlzIHNldAogICogYWRkZWQgY29uZGl0aW9uYWwgY29uZmlnb3B0aW9ucwogICogZml4ZWQgY29tcGlsYXRpb24gb24gT3BlbkJTRAogICogZml4ZWQga3F1ZXVlIHN1cHBvcnQKICAqIGZpeGVkIHBpcGVsaW5pbmcgYnVnCiAgKiBmaXhlZCBwYXJhbGxlbCBidWlsZCAodHJpZ2dlcmVkIGJ5IEdlbnRvbykKICAqIHVwZGF0ZWQgZGViaWFuIHBvc3RpbnN0CgotIDEuMi40IC0gMjAwNC0wNy0zMQoKICAqIGFkZGVkIGtxdWV1ZSBzdXBwb3J0CiAgKiBhZGRlZCBzZXJ2ZXItc2lkZSBpbmNsdWRlcyAobW9kX3NzaSkKICAqIGZpeGVkIGxhcmdlIHBvc3QgdXBsb2FkcyBpbiBmYXN0Y2dpCiAgKiBmaXhlZCBydC1zaWduYWxzIGhhbmRsaW5nIG9mIGRlbGF5ZWQgZXZlbnRzCgotIDEuMi4zIC0gMjAwNC0wNy0xMAoKICAqIGFkZGVkIGEgcHJveHkgbW9kdWxlIGZvciBKYXZhIGFuZCBmcmllbmRzCiAgKiBhZGRlZCBzdXBwb3J0IHRvIHBhc3MgYWNjZXNzbG9nIHRocm91Z2ggYW4gZXh0ZXJuYWwgcHJvZ3JhbW0KICAqIGFkZGVkIG1pbWV0eXBlcyBmb3IgdGV4dC9jc3MgYW5kIHRleHQvamF2YXNjcmlwdAogICogZml4ZWQgaW5kZXgtZmlsZXMgZm9yIEZhc3RDR0kgaWYgd2Vic2VydmVyIGlzIGluIGNocm9vdAogICogZml4ZWQgZXJyb3IgbWVzc2FnZXMgb2YgQ0dJIHByb2Nlc3MgZmFpbHMgdG8gZXhlYygpCiAgKiBmaXhlZCBkZXRlY3Rpb24gb2YgcGNyZSBvbiBJUklYIGFuZCBGcmVlQlNECiAgKiBmaXhlZCB0aW1lc3RhbXBzIGluIExhc3QtTW9kaWZpZWQgY2hlY2tzCiAgKiBmaXhlZCA2NGJpdCBidWlsZHMKICAqIGZpeGVkIG1tYXAtY2FjaGluZyBvZiBsYXJnZSBmaWxlcwogICogcmVsYXhlZCB0aGUgSFRUUCBwYXJzZXIgb24gZW1wdHkgaGVhZGVyZmllbGRzCgotIDEuMi4yIC0gMjAwNC0wNi0xNQoKICAqIGFkZGVkIHN1cHBvcnQgZm9yIHVuaXggZG9tYWluIHNvY2tldHMgaW4gRmFzdENHSQogICogZml4ZWQgbW1hcCBjYWNoaW5nCiAgKiBmaXhlZCBjb21waWxlLXRpbWUgY2hlY2sgZm9yIGxpbnV4IHNlbmRmaWxlKCkKICAqIGZpeGVkIGNoZWNrIGZvciBwY3JlLmggb24gRmVkb3JhIENvcmUgMgoKLSAxLjIuMSAtIDIwMDQtMDUtMzAKCiAgKiBhZGRlZCBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgQUlYIHNlbmRfZmlsZSgpCiAgKiBhZGRlZCBhbiBtbWFwIGNhY2hlIHRvIHRoZSBmaWxlaGFuZGxlIGNhY2hlCiAgKiBlbmFibGVkIEZyZWVCU0Qgc2VuZGZpbGUgc3VwcG9ydCBhZ2FpbgogICogYWRkZWQgc3VwcG9ydCBmb3IgY2FsbGluZyBDR0kgYmluYXJpZXMgZGlyZWN0bHkKICAqIGZpeGVkIHBpcGVsaW5pbmcgZm9yIFBPU1QgcmVxdWVzdHMKICAqIGZpeGVkIHNvbWUgc2VnLWZhdWx0cyBpZiBubyBjb25maWdmaWxlIGlzIHVzZWQKCi0gMS4yLjAgLSAyMDA0LTA1LTE3CgogICogYWRkZWQgY29uZm9ybWluZyBFeHBlY3Q6IGhhbmRsaW5nCiAgKiBhZGRlZCBhIG1vZHVsZSBmb3Igc2VjdXJlIGFuZCBmYXN0IGRvd25sb2FkaW5nCiAgKiByZXdyb3RlIHRoZSBldmVudCBoYW5kbGluZyBpbnRlcmZhY2UKICAqIGZpeGVkIGFycmF5IGhhbmRsaW5nIHdoaWNoIG1pZ2h0IGxlYWQgdG8gJ21pc3NpbmcgaGVhZGVyJwogICogZml4ZWQgcGlwZWxpbmluZyBzdXBwb3J0CiAgKiBmaXhlZCBidWlsZCBvZiB0aGUgbG9jYWxpemVyIGV4dGVuc2lvbgogICogZml4ZWQgY2dpIGhhbmRsaW5nIGZvciBoZWFkZXJzIHdoaWNoIGFyZSBmbHVzaGVkIHRvIG9mdGVuCiAgKiBmaXhlZCBjb21waWxhdGlvbiBvbiBTb2xhcmlzIDIuNQoKLSAxLjEuOSAtIDIwMDQtMDQtMjkKCiAgKiBhZGRlZCBBVVRIT1JJWkVSIG1vZGUgdG8gdGhlIEZhc3RDR0kgbW9kdWxlCiAgKiBhZGRlZCAnY2hlY2stbG9jYWwnIG9wdGlvbiB0byBkaXNhYmxlIGxvY2FsIHN0YXQoKSBpbiB0aGUgRmFzdENHSSBtb2R1bGUKICAqIGFkZGVkIHByZWZpeC1ub3RhdGlvbiBmb3IgRmFzdENHSSBtb2R1bGUKICAqIGFkZGVkICdtb2RfdXNlcnRyYWNrJwogICogaW1wcm92ZWQgQ0dJL0Zhc3RDR0kgc3BlYyBjb25mb3JtYW5jZQogICogbW9yZSBjb2RlIGNsZWFudXAKICAqIGZpeGVkIEhUVFAvMS4xIGNodW5rIGhlYWRlcnMKICAqIGZpeGVkIFBPU1QgaGFuZGxpbmcKICAqIGZpeGVkIFNTTCBuZXR3b3JrIGhhbmRsZXIKICAqIGZpeGVkIHdyaXRldigpIG5ldHdvcmsgaGFuZGxlcgoKLSAxLjEuOCAtIDIwMDQtMDQtMTYKCiAgKiBjb2RlIGNsZWFudXAKICAqIGxpbWl0aW5nIHRoZSBzaXplIG9mIHRoZSByZXF1ZXN0LWJvZHkgYW5kIHRoZSByZXF1ZXN0LWhlYWRlcgogICogbWlub3Igc3BlZWQgaW1wcm92ZW1lbnRzCiAgKiB0aWdodGVuZCB0aGUgSFRUUC1QYXJzZXIgYWdhaW4KCi0gMS4xLjcgLSAyMDA0LTA0LTEyCgogICogYWRkZWQgUkVNT1RFX1VTRVIgdG8gdGhlIFNlcnZlci0+RmFzdENHSSBwYXJhbWV0ZXJzCiAgKiBhZGRlZCBiemlwMiBjb21wcmVzc2lvbgogICogaW1wcm92ZWQgdGhlIGVycm9yLW1lc3NhZ2VzIGZyb20gdGhlIG5ldyBjb25maWdmaWxlIHBhcnNlcgogICogZml4ZWQgYWNjZXNzbG9nIHdyaXRpbmcgZm9yIGVycm9ybm91cyByZXF1ZXN0cwogICogZml4ZWQgTEZTICg2NGJpdCBmaWxlc2l6ZXMpIGhhbmRsaW5nCiAgKiBmaXhlZCBDb250ZW50LUxlbmd0aCBmb3IgSEVBRCByZXF1ZXN0cwogICogZml4ZWQgc29tZSBtZW1vcnkgbGVha3MgaW4gdGhlIGNvbmZpZ2ZpbGUgcGFyc2VyCgotIDEuMS42IC0gMjAwNC0wNC0xMAoKICAqIHRpZ2h0ZW5kIHRoZSBIVFRQLVBhcnNlcgogICogcmV3cm90ZSB0aGUgY29uZmlnZmlsZSBwYXJzZXIgKGJhc2VkIG9uIGxlbW9uKQogICogZml4ZWQgb3BlbnNzbCBzdXBwb3J0CiAgKiBmaXhlZCBtbWFwK3dyaXRlIHN1cHBvcnQKICAqIHVzZSBsb2NhbHRpbWUgaW4gYWNjZXNzbG9nIGlmIHBvc3NpYmxlCgotIDEuMS41IC0gMjAwNC0wNC0wNwoKICAqIGFkZGVkIGxkYXAgYmFja2VuZCB0byB0aGUgYXV0aAogICogYWRkZWQgYSBtb2RfZXhwaXJlCiAgKiBhZGRlZCBkZWJpYW4gcGFja2FnaW5nIHN0cnVjdHVyZQogICogbWVyZ2VkIHJlZGhhdCBhbmQgc3VzZSBzcGVjLWZpbGUKICAqIGZpeGVkIGV2ZW50aGFuZGxlciBmb3Igc29sYXJpcwogICogZml4ZWQgNjRiaXQgZmlsZW9mZnNldHMKICAqIGZpeGVkIHBlcm1pc3Npb25zIG9mIHRoZSBQSUQtZmlsZQoKLSAxLjEuNCAtIDIwMDQtMDQtMDQKCiAgKiBhZGRlZCBzZXJ2ZXIucGlkLWZpbGUKICAqIGFkZGVkIHN1cHBvcnQgZm9yIHNvbGFyaXMgL2Rldi9wb2xsIGFuZCBzb2xhcmlzIHNlbmRmaWxldigpCiAgKiBhZGRlZCBzdXBwb3J0IGZvciB3cml0ZXYoKQogICogYWRkZWQgUEFUSElORk8gc3VwcG9ydCAoYWdhaW4pCiAgKiBmaXhlZCBDTEYgbG9nZmlsZSB3cml0aW5nCgotIDEuMS4zIC0gMjAwNC0wMy0yNQoKICAqIHNldCBkZWZhdWx0IGV2ZW50LWhhbmRsZXIgdG8gJ3BvbGwnCiAgKiBmaXhlZCBsb2djeWNsaW5nIGluIGNocm9vdCgpCiAgKiBmaXhlZCBob3N0bmFtZSBkZXRlY3Rpb24KICAqIGFkZGVkIHN5c2xvZygpIGFzIGZhbGxiYWNrIGZvciBlcnJvci1sb2dnaW5nCgotIDEuMS4yIC0gMjAwNC0wMy0yMgoKICAqIGFkZGVkIGEgImRvY3Jvb3QiIHNldHRpbmcgZm9yIGZhc3RjZ2kgcHJvY2Vzc2VzCiAgKiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMKICAqIGltcHJvdmVkIGNvbmZpZ3VyZSBzY3JpcHQKICAqIHJld3JvdGUgdGhlIGZhc3RjZ2kgY29uZmlnIHBhcnNlcgogICogYWRkZWQgYSByYy1zY3JpcHQgZm9yIFJlZEhhdAogICogYWRkZWQgZXBvbGwoKSBzdXBwb3J0IGZvciBMaW51eCAyLjYueAoKLSAxLjEuMSAtIDIwMDQtMDMtMTUKCiAgKiBhZGRlZCBsb2NhbGl6ZXIgbW9kdWxlCiAgKiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMKICAqIGNvZGUgY2xlYW51cAoKLSAxLjEuMCAtIDIwMDQtMDMtMDYKCiAgKiBjaGFuZ2VkIHNvbWUgY29uZmlndXJhdGlvbiBrZXlzIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkKICAqIG1vdmVkIHRoZSB2aXJ0dWFsLWhvc3QgY29kZSB0byBtb2Rfc2ltcGxlX3Zob3N0CiAgKiBhZGRlZCBlbmhhbmNlZCB2aXJ0dWFsIGhvc3QgcGx1Z2luIGZyb20gQ2hyaXN0aWFuIEtydXNlCiAgKiBhZGRlZCB0d28gbmV3IGF1dGgtYmFja2VuZHMgKGh0cGFzc3dkLCBodGRpZ2VzdCkKICAqIGZpeGVkIGFuZCBpbXByb3ZlZCBhdXRoZW50aWZpY2F0aW9uCiAgKiBzdHJpY3RlciBwYXJzaW5nIG9mIHRoZSBIb3N0OiBmaWVsZAogICogYWRkZWQgYSB3YXJuaW5nIGZvciB1bnVzZWQgY29uZmlndXJhdGlvbiBrZXlzCiAgKiBpbXByb3ZlZCBGYXN0Q0dJIGRvY3VtZW50YXRpb24KCi0gMS4wLjMgLSAyMDA0LTAyLTEzCgogICogYSBzdGFydHVwIHNjcmlwdCBoYXMgYmVlbiBhZGRlZCAoTFNCIGNvbXBsaWFudCkKICAqIEhFQUQgcmVxdWVzdHMgd2VyZSBzdWJtaXR0aW5nIHRoZSBjb250ZW50IGxpa2UgYSBHRVQgcmVxdWVzdAogICogdGhlIHZpcnR1YWwgZGlyZWN0b3J5IGxpc3RpbmcgZ290IGEgZmFjZS1saWZ0aW5nIGFuZCBmaXhlcwogICogcmVxdWVzdC1oZWFkZXJzIGFyZSBub3cgaGFuZGxlZCBjYXNlLWluLXNlbnNpdGl2ZSBhcyByZXF1aXJlZAogICAgYnkgdGhlIHN0YW5kYXJkLiB0aGlzIGZpeGVzIFBPU1QgcmVxdWVzdHMgZm9yIHczbSBhbmQgc29tZSBQcm94aWVzLgoKLSAxLjAuMiAtIDIwMDQtMDItMDcKCiAgKiByZWFycmFuZ2VtZW50IG9mIHRoZSBkZWZhdWx0IGNvbmZpZ2ZpbGUKICAqIHNvbWUgdXBkYXRlcyBpbiB0aGUgZG9jdW1lbnRhdGlvbgogICogYSBlbnRyeSBpbiB0aGUgZXJyb3ItbG9nIGZvciBhIDQwNAogICogc3Rkb3V0IGlzIG5vIGxvbmdlciB0aGUgZGVmYXVsdCBmb3IgdGhlIGFjY2Vzc2xvZwo=