VQ0NCgAAAADLuIxj8BYAAOMAAAAAAAAAAAAAAAAAAAAABAAAAEAAAABzJAAAAEcAZABkAYQAZAFlAIMDWgFHAGQCZAOEAGQDZQCDA1oCZARTACkFYwAAAAAAAAAAAAAAAAAAAAACAAAAQAAAAHM4AAAAZQBaAWQAWgJkAVoDZAJkA4QAWgRkBGQFhABaBWQGZAeEAFoGZAhkCYQAWgdkCmQLhABaCGQMUwApDdoQQWJzdHJhY3RQcm92aWRlcnpBRGVsZWdhdGUgY2xhc3MgdG8gcHJvdmlkZSByZXF1aXJlbWVudCBpbnRlcmZhY2UgZm9yIHRoZSByZXNvbHZlci5jAgAAAAAAAAAAAAAAAgAAAAEAAABDAAAAcwgAAAB0AIIBZAFTACkCertHaXZlbiBhIHJlcXVpcmVtZW50LCByZXR1cm4gYW4gaWRlbnRpZmllciBmb3IgaXQuCgogICAgICAgIFRoaXMgaXMgdXNlZCB0byBpZGVudGlmeSBhIHJlcXVpcmVtZW50LCBlLmcuIHdoZXRoZXIgdHdvIHJlcXVpcmVtZW50cwogICAgICAgIHNob3VsZCBoYXZlIHRoZWlyIHNwZWNpZmllciBwYXJ0cyBtZXJnZWQuCiAgICAgICAgTqkB2hNOb3RJbXBsZW1lbnRlZEVycm9yKQLaBHNlbGZaGHJlcXVpcmVtZW50X29yX2NhbmRpZGF0ZakAcgUAAAD6RC90bXAvcGlwLXVucGFja2VkLXdoZWVsLWlrdnRxc3kxL3BpcC9fdmVuZG9yL3Jlc29sdmVsaWIvcHJvdmlkZXJzLnB52ghpZGVudGlmeQQAAABzAgAAAAAGehlBYnN0cmFjdFByb3ZpZGVyLmlkZW50aWZ5YwYAAAAAAAAAAAAAAAYAAAABAAAAQwAAAHMIAAAAdACCAWQBUwApAmHjCAAAUHJvZHVjZSBhIHNvcnQga2V5IGZvciBnaXZlbiByZXF1aXJlbWVudCBiYXNlZCBvbiBwcmVmZXJlbmNlLgoKICAgICAgICBUaGUgcHJlZmVyZW5jZSBpcyBkZWZpbmVkIGFzICJJIHRoaW5rIHRoaXMgcmVxdWlyZW1lbnQgc2hvdWxkIGJlCiAgICAgICAgcmVzb2x2ZWQgZmlyc3QiLiBUaGUgbG93ZXIgdGhlIHJldHVybiB2YWx1ZSBpcywgdGhlIG1vcmUgcHJlZmVycmVkCiAgICAgICAgdGhpcyBncm91cCBvZiBhcmd1bWVudHMgaXMuCgogICAgICAgIDpwYXJhbSBpZGVudGlmaWVyOiBBbiBpZGVudGlmaWVyIGFzIHJldHVybmVkIGJ5IGBgaWRlbnRpZnkoKWBgLiBUaGlzCiAgICAgICAgICAgIGlkZW50aWZpZXMgdGhlIGRlcGVuZGVuY3kgbWF0Y2hlcyBvZiB3aGljaCBzaG91bGQgYmUgcmV0dXJuZWQuCiAgICAgICAgOnBhcmFtIHJlc29sdXRpb25zOiBNYXBwaW5nIG9mIGNhbmRpZGF0ZXMgY3VycmVudGx5IHBpbm5lZCBieSB0aGUKICAgICAgICAgICAgcmVzb2x2ZXIuIEVhY2gga2V5IGlzIGFuIGlkZW50aWZpZXIsIGFuZCB0aGUgdmFsdWUgYSBjYW5kaWRhdGUuCiAgICAgICAgICAgIFRoZSBjYW5kaWRhdGUgbWF5IGNvbmZsaWN0IHdpdGggcmVxdWlyZW1lbnRzIGZyb20gYGBpbmZvcm1hdGlvbmBgLgogICAgICAgIDpwYXJhbSBjYW5kaWRhdGVzOiBNYXBwaW5nIG9mIGVhY2ggZGVwZW5kZW5jeSdzIHBvc3NpYmxlIGNhbmRpZGF0ZXMuCiAgICAgICAgICAgIEVhY2ggdmFsdWUgaXMgYW4gaXRlcmF0b3Igb2YgY2FuZGlkYXRlcy4KICAgICAgICA6cGFyYW0gaW5mb3JtYXRpb246IE1hcHBpbmcgb2YgcmVxdWlyZW1lbnQgaW5mb3JtYXRpb24gb2YgZWFjaCBwYWNrYWdlLgogICAgICAgICAgICBFYWNoIHZhbHVlIGlzIGFuIGl0ZXJhdG9yIG9mICpyZXF1aXJlbWVudCBpbmZvcm1hdGlvbiouCiAgICAgICAgOnBhcmFtIGJhY2t0cmFja19jYXVzZXM6IFNlcXVlbmNlIG9mIHJlcXVpcmVtZW50IGluZm9ybWF0aW9uIHRoYXQgd2VyZQogICAgICAgICAgICB0aGUgcmVxdWlyZW1lbnRzIHRoYXQgY2F1c2VkIHRoZSByZXNvbHZlciB0byBtb3N0IHJlY2VudGx5IGJhY2t0cmFjay4KCiAgICAgICAgQSAqcmVxdWlyZW1lbnQgaW5mb3JtYXRpb24qIGluc3RhbmNlIGlzIGEgbmFtZWQgdHVwbGUgd2l0aCB0d28gbWVtYmVyczoKCiAgICAgICAgKiBgYHJlcXVpcmVtZW50YGAgc3BlY2lmaWVzIGEgcmVxdWlyZW1lbnQgY29udHJpYnV0aW5nIHRvIHRoZSBjdXJyZW50CiAgICAgICAgICBsaXN0IG9mIGNhbmRpZGF0ZXMuCiAgICAgICAgKiBgYHBhcmVudGBgIHNwZWNpZmllcyB0aGUgY2FuZGlkYXRlIHRoYXQgcHJvdmlkZXMgKGRlcGVuZGVuZCBvbikgdGhlCiAgICAgICAgICByZXF1aXJlbWVudCwgb3IgYGBOb25lYGAgdG8gaW5kaWNhdGUgYSByb290IHJlcXVpcmVtZW50LgoKICAgICAgICBUaGUgcHJlZmVyZW5jZSBjb3VsZCBkZXBlbmQgb24gYSB2YXJpb3VzIG9mIGlzc3VlcywgaW5jbHVkaW5nIChub3QKICAgICAgICBuZWNlc3NhcmlseSBpbiB0aGlzIG9yZGVyKToKCiAgICAgICAgKiBJcyB0aGlzIHBhY2thZ2UgcGlubmVkIGluIHRoZSBjdXJyZW50IHJlc29sdXRpb24gcmVzdWx0PwogICAgICAgICogSG93IHJlbGF4ZWQgaXMgdGhlIHJlcXVpcmVtZW50PyBTdHJpY3RlciBvbmVzIHNob3VsZCBwcm9iYWJseSBiZQogICAgICAgICAgd29ya2VkIG9uIGZpcnN0PyAoSSBkb24ndCBrbm93LCBhY3R1YWxseS4pCiAgICAgICAgKiBIb3cgbWFueSBwb3NzaWJpbGl0aWVzIGFyZSB0aGVyZSB0byBzYXRpc2Z5IHRoaXMgcmVxdWlyZW1lbnQ/IFRob3NlCiAgICAgICAgICB3aXRoIGZldyBsZWZ0IHNob3VsZCBsaWtlbHkgYmUgd29ya2VkIG9uIGZpcnN0LCBJIGd1ZXNzPwogICAgICAgICogQXJlIHRoZXJlIGFueSBrbm93biBjb25mbGljdHMgZm9yIHRoaXMgcmVxdWlyZW1lbnQ/IFdlIHNob3VsZAogICAgICAgICAgcHJvYmFibHkgd29yayBvbiB0aG9zZSB3aXRoIHRoZSBtb3N0IGtub3duIGNvbmZsaWN0cy4KCiAgICAgICAgQSBzb3J0YWJsZSB2YWx1ZSBzaG91bGQgYmUgcmV0dXJuZWQgKHRoaXMgd2lsbCBiZSB1c2VkIGFzIHRoZSBgYGtleWBgCiAgICAgICAgcGFyYW1ldGVyIG9mIHRoZSBidWlsdC1pbiBzb3J0aW5nIGZ1bmN0aW9uKS4gVGhlIHNtYWxsZXIgdGhlIHZhbHVlIGlzLAogICAgICAgIHRoZSBtb3JlIHByZWZlcnJlZCB0aGlzIHJlcXVpcmVtZW50IGlzIChpLmUuIHRoZSBzb3J0aW5nIGZ1bmN0aW9uCiAgICAgICAgaXMgY2FsbGVkIHdpdGggYGByZXZlcnNlPUZhbHNlYGApLgogICAgICAgIE5yAgAAACkGcgQAAADaCmlkZW50aWZpZXJaC3Jlc29sdXRpb25z2gpjYW5kaWRhdGVzWgtpbmZvcm1hdGlvbloQYmFja3RyYWNrX2NhdXNlc3IFAAAAcgUAAAByBgAAANoOZ2V0X3ByZWZlcmVuY2UMAAAAcwIAAAAAMXofQWJzdHJhY3RQcm92aWRlci5nZXRfcHJlZmVyZW5jZWMEAAAAAAAAAAAAAAAEAAAAAQAAAEMAAABzCAAAAHQAggFkAVMAKQJhigUAAEZpbmQgYWxsIHBvc3NpYmxlIGNhbmRpZGF0ZXMgdGhhdCBzYXRpc2Z5IGdpdmVuIGNvbnN0cmFpbnRzLgoKICAgICAgICA6cGFyYW0gaWRlbnRpZmllcjogQW4gaWRlbnRpZmllciBhcyByZXR1cm5lZCBieSBgYGlkZW50aWZ5KClgYC4gVGhpcwogICAgICAgICAgICBpZGVudGlmaWVzIHRoZSBkZXBlbmRlbmN5IG1hdGNoZXMgb2Ygd2hpY2ggc2hvdWxkIGJlIHJldHVybmVkLgogICAgICAgIDpwYXJhbSByZXF1aXJlbWVudHM6IEEgbWFwcGluZyBvZiByZXF1aXJlbWVudHMgdGhhdCBhbGwgcmV0dXJuZWQKICAgICAgICAgICAgY2FuZGlkYXRlcyBtdXN0IHNhdGlzZnkuIEVhY2gga2V5IGlzIGFuIGlkZW50aWZpZXIsIGFuZCB0aGUgdmFsdWUKICAgICAgICAgICAgYW4gaXRlcmF0b3Igb2YgcmVxdWlyZW1lbnRzIGZvciB0aGF0IGRlcGVuZGVuY3kuCiAgICAgICAgOnBhcmFtIGluY29tcGF0aWJpbGl0aWVzOiBBIG1hcHBpbmcgb2Yga25vd24gaW5jb21wYXRpYmlsaXRpZXMgb2YKICAgICAgICAgICAgZWFjaCBkZXBlbmRlbmN5LiBFYWNoIGtleSBpcyBhbiBpZGVudGlmaWVyLCBhbmQgdGhlIHZhbHVlIGFuCiAgICAgICAgICAgIGl0ZXJhdG9yIG9mIGluY29tcGF0aWJpbGl0aWVzIGtub3duIHRvIHRoZSByZXNvbHZlci4gQWxsCiAgICAgICAgICAgIGluY29tcGF0aWJpbGl0aWVzICptdXN0KiBiZSBleGNsdWRlZCBmcm9tIHRoZSByZXR1cm4gdmFsdWUuCgogICAgICAgIFRoaXMgc2hvdWxkIHRyeSB0byBnZXQgY2FuZGlkYXRlcyBiYXNlZCBvbiB0aGUgcmVxdWlyZW1lbnRzJyB0eXBlcy4KICAgICAgICBGb3IgVkNTLCBsb2NhbCwgYW5kIGFyY2hpdmUgcmVxdWlyZW1lbnRzLCB0aGUgb25lLWFuZC1vbmx5IG1hdGNoIGlzCiAgICAgICAgcmV0dXJuZWQsIGFuZCBmb3IgYSAibmFtZWQiIHJlcXVpcmVtZW50LCB0aGUgaW5kZXgoZXMpIHNob3VsZCBiZQogICAgICAgIGNvbnN1bHRlZCB0byBmaW5kIGNvbmNyZXRlIGNhbmRpZGF0ZXMgZm9yIHRoaXMgcmVxdWlyZW1lbnQuCgogICAgICAgIFRoZSByZXR1cm4gdmFsdWUgc2hvdWxkIHByb2R1Y2UgY2FuZGlkYXRlcyBvcmRlcmVkIGJ5IHByZWZlcmVuY2U7IHRoZQogICAgICAgIG1vc3QgcHJlZmVycmVkIGNhbmRpZGF0ZSBzaG91bGQgY29tZSBmaXJzdC4gVGhlIHJldHVybiB0eXBlIG1heSBiZSBvbmUKICAgICAgICBvZiB0aGUgZm9sbG93aW5nOgoKICAgICAgICAqIEEgY2FsbGFibGUgdGhhdCByZXR1cm5zIGFuIGl0ZXJhdG9yIHRoYXQgeWllbGRzIGNhbmRpZGF0ZXMuCiAgICAgICAgKiBBbiBjb2xsZWN0aW9uIG9mIGNhbmRpZGF0ZXMuCiAgICAgICAgKiBBbiBpdGVyYWJsZSBvZiBjYW5kaWRhdGVzLiBUaGlzIHdpbGwgYmUgY29uc3VtZWQgaW1tZWRpYXRlbHkgaW50byBhCiAgICAgICAgICBsaXN0IG9mIGNhbmRpZGF0ZXMuCiAgICAgICAgTnICAAAAKQRyBAAAAHIIAAAA2gxyZXF1aXJlbWVudHNaEWluY29tcGF0aWJpbGl0aWVzcgUAAAByBQAAAHIGAAAA2gxmaW5kX21hdGNoZXM/AAAAcwIAAAAAG3odQWJzdHJhY3RQcm92aWRlci5maW5kX21hdGNoZXNjAwAAAAAAAAAAAAAAAwAAAAEAAABDAAAAcwgAAAB0AIIBZAFTACkCYRoBAABXaGV0aGVyIHRoZSBnaXZlbiByZXF1aXJlbWVudCBjYW4gYmUgc2F0aXNmaWVkIGJ5IGEgY2FuZGlkYXRlLgoKICAgICAgICBUaGUgY2FuZGlkYXRlIGlzIGd1YXJlbnRlZWQgdG8gaGF2ZSBiZWVuIGdlbmVyYXRlZCBmcm9tIHRoZQogICAgICAgIHJlcXVpcmVtZW50LgoKICAgICAgICBBIGJvb2xlYW4gc2hvdWxkIGJlIHJldHVybmVkIHRvIGluZGljYXRlIHdoZXRoZXIgYGBjYW5kaWRhdGVgYCBpcyBhCiAgICAgICAgdmlhYmxlIHNvbHV0aW9uIHRvIHRoZSByZXF1aXJlbWVudC4KICAgICAgICBOcgIAAAApA3IEAAAA2gtyZXF1aXJlbWVudNoJY2FuZGlkYXRlcgUAAAByBQAAAHIGAAAA2g9pc19zYXRpc2ZpZWRfYnlcAAAAcwIAAAAACXogQWJzdHJhY3RQcm92aWRlci5pc19zYXRpc2ZpZWRfYnljAgAAAAAAAAAAAAAAAgAAAAEAAABDAAAAcwgAAAB0AIIBZAFTACkCeppHZXQgZGVwZW5kZW5jaWVzIG9mIGEgY2FuZGlkYXRlLgoKICAgICAgICBUaGlzIHNob3VsZCByZXR1cm4gYSBjb2xsZWN0aW9uIG9mIHJlcXVpcmVtZW50cyB0aGF0IGBjYW5kaWRhdGVgCiAgICAgICAgc3BlY2lmaWVzIGFzIGl0cyBkZXBlbmRlbmNpZXMuCiAgICAgICAgTnICAAAAKQJyBAAAAHIOAAAAcgUAAAByBQAAAHIGAAAA2hBnZXRfZGVwZW5kZW5jaWVzZwAAAHMCAAAAAAZ6IUFic3RyYWN0UHJvdmlkZXIuZ2V0X2RlcGVuZGVuY2llc04pCdoIX19uYW1lX1/aCl9fbW9kdWxlX1/aDF9fcXVhbG5hbWVfX9oHX19kb2NfX3IHAAAAcgoAAAByDAAAAHIPAAAAchAAAAByBQAAAHIFAAAAcgUAAAByBgAAAHIBAAAAAQAAAHMMAAAACAEEAggICDMIHQgLcgEAAABjAAAAAAAAAAAAAAAAAAAAAAIAAABAAAAAcyQAAABlAFoBZABaAmQBWgNlBFoFZAJkA4QAWgZkBGQFhABaB2QGUwApB9oQQWJzdHJhY3RSZXNvbHZlcnozVGhlIHRoaW5nIHRoYXQgcGVyZm9ybXMgdGhlIGFjdHVhbCByZXNvbHV0aW9uIHdvcmsuYwMAAAAAAAAAAAAAAAMAAAACAAAAQwAAAHMQAAAAfAF8AF8AfAJ8AF8BZABTACkBTikC2ghwcm92aWRlctoIcmVwb3J0ZXIpA3IEAAAAchYAAAByFwAAAHIFAAAAcgUAAAByBgAAANoIX19pbml0X191AAAAcwQAAAAAAQYBehlBYnN0cmFjdFJlc29sdmVyLl9faW5pdF9fYwIAAAAAAAAAAAAAAAMAAAABAAAASwAAAHMIAAAAdACCAWQBUwApAmHoAQAAVGFrZSBhIGNvbGxlY3Rpb24gb2YgY29uc3RyYWludHMsIHNwaXQgb3V0IHRoZSByZXNvbHV0aW9uIHJlc3VsdC4KCiAgICAgICAgVGhpcyByZXR1cm5zIGEgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZpbmFsIHJlc29sdXRpb24gc3RhdGUsIHdpdGggb25lCiAgICAgICAgZ3VhcmVudGVlZCBhdHRyaWJ1dGUgYGBtYXBwaW5nYGAgdGhhdCBjb250YWlucyByZXNvbHZlZCBjYW5kaWRhdGVzIGFzCiAgICAgICAgdmFsdWVzLiBUaGUga2V5cyBhcmUgdGhlaXIgcmVzcGVjdGl2ZSBpZGVudGlmaWVycy4KCiAgICAgICAgOnBhcmFtIHJlcXVpcmVtZW50czogQSBjb2xsZWN0aW9uIG9mIGNvbnN0cmFpbnRzLgogICAgICAgIDpwYXJhbSBrd2FyZ3M6IEFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgdGhhdCBzdWJjbGFzc2VzIG1heSBhY2NlcHQuCgogICAgICAgIDpyYWlzZXM6IGBgc2VsZi5iYXNlX2V4Y2VwdGlvbmBgIG9yIGl0cyBzdWJjbGFzcy4KICAgICAgICBOcgIAAAApA3IEAAAAcgsAAADaBmt3YXJnc3IFAAAAcgUAAAByBgAAANoHcmVzb2x2ZXkAAABzAgAAAAAMehhBYnN0cmFjdFJlc29sdmVyLnJlc29sdmVOKQhyEQAAAHISAAAAchMAAAByFAAAANoJRXhjZXB0aW9uWg5iYXNlX2V4Y2VwdGlvbnIYAAAAchoAAAByBQAAAHIFAAAAcgUAAAByBgAAAHIVAAAAcAAAAHMIAAAACAEEAgQCCARyFQAAAE4pA9oGb2JqZWN0cgEAAAByFQAAAHIFAAAAcgUAAAByBQAAAHIGAAAA2gg8bW9kdWxlPgEAAABzAgAAABBv