Mw0NCn2EhGPyKwQA4wAAAAAAAAAAAAAAAKIAAABAAAAAcwYPAABkAFoAZAFaAWQCWgJkA1oDZARkBWwEWgRkBGQGbAVtBloHAQBkBGQFbAhaCGQEZAVsCVoJZARkBWwKWgpkBGQFbAtaC2QEZAVsDFoMZARkBWwNWg1kBGQFbA5aDmQEZAVsD1oPZARkBWwQWhBkBGQHbBFtEVoRAQBkBGQIbBJtE1oTAQBkBGQFbBRaFGQEZAlsFW0WWhYBAGQEZApsF20YWhgBAHkQZARkC2wUbRlaGQEAVwBuIAQAZRprCnLUAQABAAEAZARkDGwUbRtaGQEAWQBuAlgAeRBkBGQNbBxtHVodAQBXAG4iBABlGmsKkAFyCAEAAQABAGQEZA1sHm0dWh0BAFkAbgJYAHkgZARkDmwfbSBaIAEAZARkD2wfbSFaIW0iWiIBAFcAbjIEAGUaawqQAXJcAQABAAEAZARkDmwNbSBaIAEAZARkD2wNbSFaIW0iWiIBAFkAbgJYAHkQZARkEGwNbSNaJAEAVwBuQgQAZRprCpABcrABAAEAAQB5EGQEZBBsJW0jWiQBAFcAbhoEAGUaawqQAXKqAQABAAEAZAVaJFkAbgJYAFkAbgJYAHkQZARkEWwQbSZaJgEAVwBuJAQAZRprCpABcuYBAAEAAQBHAGQSZBOEAGQTgwJaJlkAbgJYAGUmgwBaJ2QUZSdfAGQVZSdfKGUmgwBaKWQWZSlfAGQXZSlfKmQXZSlfK2QXZSlfLGQXZSlfLWQXZSlfLmQYZBmEAGUvZSmDAUQAgwFlKV8wZBpkG4QAWjFlMWUpXzJkHGQdZB5kH2QgZCFkImQjZCRkJWQmZCdkKGQpZCpkK2QsZC1kLmQvZDBkMWQyZDNkNGQ1ZDZkN2Q4ZDlkOmQ7ZDxkPWQ+ZD9kQGRBZEJkQ2REZEVkRmRHZEhkSWRKZEtkTGRNZE5kT2RQZFFkUmRTZFRkVWRWZFdkWGRZZFpkW2RcZF1kXmRfZGBkYWRiZGNkZGRlZGZkZ2RoZGlkamRrZGxkbWRuZG9kcGRxZHJkc2R0ZHVkdmR3ZHhkeWR6ZHtkfGR9ZH5kf2SAZIFkgmSDZIRkhWSGZIdkiGSJZIpki2SMZI1kjmSPZ3RaM2U0ZQlqNYMBZAVkkIUCGQBaNmU2ZAQZAGSQawJaN2U3kANyiGUJajhaOWU6WjtlPFo9ZTpaPmU6Wj9lQGVBZUJlQ2VEZTRlRWVGZUdlSGVJZwtaSm5iZQlqS1o5ZUxaTWSRZJKEAFo/ZwBaSmQEZAVsTlpOeEJkk2pPgwBEAF02WlB5FGVKalFlUmVOZVCDAoMBAQBXAG4aBABlU2sKkANy4gEAAQABAJADd7BZAG4CWACQA3GwVwBlVGSUZJWEAGVNZJaDAUQAgwGDAVpVZJdkmIQAWlZlBGpXZQRqWBcAWllkmVpaZVpkmhcAWltlWWVaFwBaXGU8ZJuDAVpdZJxqXmSdZJWEAGUEal9EAIMBgwFaYJABZGFknmSOhAFaYUcAZJ9kOYQAZDllYoMDWmNHAGSgZDuEAGQ7ZWODA1pkRwBkoWQ9hABkPWVjgwNaZUcAZKJkP4QAZD9lZYMDWmZHAGSjZEKEAGRCZWKDA1pnRwBkpGSlhABkpWVogwNaaUcAZKZkPoQAZD5laIMDWmplIWprZWqDAQEAZKdkVoQAWmxkqGRnhABabWSpZGSEAFpuZKpkq4QAWm9krGSthABacGSuZK+EAFpxZLBkboQAWnKQAWRiZLJks4QBWnNHAGS0ZECEAGRAZWiDA1p0RwBktWS2hABktmV0gwNadUcAZLdkSIQAZEhldIMDWnZHAGS4ZCiEAGQoZXaDA1p3RwBkuWQzhABkM2V2gwNaeEcAZLpkMIQAZDBldoMDWnlHAGS7ZLyEAGS8ZXmDA1p6ZXlae2V5ZXRffEcAZL1kLYQAZC1ldoMDWn1HAGS+ZCOEAGQjZXmDA1p+RwBkv2QihABkImV9gwNaf0cAZMBkiYQAZIlldoMDWoBHAGTBZEuEAGRLZXaDA1qBRwBkwmTDhABkw2WBgwNagkcAZMRkT4QAZE9lgoMDWoNHAGTFZEOEAGRDZXaDA1qERwBkxmRBhABkQWV2gwNahUcAZMdkJIQAZCRldoMDWoZHAGTIZEqEAGRKZXaDA1qHRwBkyWTKhABkymV2gwNaiEcAZMtkK4QAZCtliIMDWolHAGTMZC+EAGQvZYiDA1qKRwBkzWQuhABkLmWIgwNai0cAZM5kRoQAZEZliIMDWoxHAGTPZEWEAGRFZYiDA1qNRwBk0GRNhABkTWWIgwNajkcAZNFkTIQAZExliIMDWo9HAGTSZDyEAGQ8ZXSDA1qQRwBk02QhhABkIWWQgwNakUcAZNRkOIQAZDhlkIMDWpJHAGTVZDKEAGQyZZCDA1qTRwBk1mQnhABkJ2WQgwNalEcAZNdkOoQAZDpldIMDWpVHAGTYZCmEAGQpZZWDA1qWRwBk2WQxhABkMWWVgwNal0cAZNpkNIQAZDRllYMDWphHAGTbZNyEAGTcZZWDA1qZRwBk3WQ1hABkNWWZgwNamkcAZN5kToQAZE5lmYMDWptHAGTfZOCEAGTgZWiDA1qcRwBk4WQ3hABkN2WVgwNanUcAZOJkRIQAZERllYMDWp5HAGTjZCqEAGQqZZWDA1qfRwBk5GRJhABkSWWVgwNaoEcAZOVkJYQAZCVloIMDWqFHAGTmZCyEAGQsZaCDA1qiRwBk52QmhABkJmWggwNao0cAZOhkR4QAZEdloIMDWqRHAGTpZDaEAGQ2ZWiDA1qlZOpkf4QAWqaQAWRjZOxkXYQBWqeQAWRkZO1kWYQBWqhk7mTvhABaqWTwZGyEAFqqZPFka4QAWqtk8mTzhABarJABZGVk9GRwhAFarWT1ZF6EAFqukAFkZmT2ZISEAVqvZPdkhYQAWrBk+GSHhABasWV3gwBqsmRggwFas2WKgwBqsmRmgwFatGWLgwBqsmRlgwFatWWMgwBqsmR+gwFatmWNgwBqsmR9gwFat2WBZV1k+WSxZPqNA2q4ZPtk/IQAgwFauWWEZP2DAWq4ZP5k/IQAgwFaumWEZP+DAWq4kAFkAGT8hACDAVq7ZbllukIAZbtCAGWGkAFkAWSWZPqNAkIAWrxlomW8ZaSQAWQCgwEXAGW8FwCDAVq9ZXmQAWQDgwFlnZABZASDAWq+kAFkBYMBFwBlomWaZb1lvEIAgwGDAWq+kAFkBoMBFwCQAWQHFwBav5ABZAhkfIQAWsCQAWQJZGqEAFrBkAFkCmR5hABawpABZAtkd4QAWsOQAWQMZIqEAFrEZcSQAWQNZPyEAIMBWsVlxJABZA5k/IQAgwFaxmWkkAFkD4MBZaSQAWQQgwFmApABZBGQAWQShAFax5ABZBNkaIQAWsiQAWQUZGmEAFrJkAFkFWSChABaymVogwBlyl/LkAFkZ5ABZBZkiIQBWsxlJoMAWs1laIMAZc1fzmVogwBlzV/PZaSQAWQXgwFlpJABZBiDAWYCkAFkGWSGhAFa0GXQWtFloWWEkAFkGoMBkAFkGxcAgwFqspABZByDAVrSZaFlhJABZB2DAZABZB4XAIMBarKQAWQfgwFa02WhZYSQAWQagwGQAWQbFwBlhJABZB2DAZABZB4XAEIAgwFqspABZCCDAVrUZaFle5ABZCGDAWXUagiDABcAgwFqspABZCKDAVrVkAFkF5ABZBhkBWXUagiDAGYEkAFkI2RthAFa1pABZGiQAWQkZIOEAVrXZcCQAWQlgwFa2GXAkAFkJoMBWtllyGWBZVllXJABZCcXAIMCarKQAWQogwGDAVwCWtpa22XcZd2QAWQpak+DAJABZCqDAoMBWt5lhJABZCuQAWQsal5l3mrfgwCDARcAkAFkLRcAgwFqspABZC6DAVrgkAFkL2R4hABa4WWhZYSQAWQwgwGQAWQxFwCDAWqykAFkMoMBWuJlhJABZDODAWqykAFkNIMBWuNlhJABZDWDAWrkgwBqspABZDaDAVrlZYSQAWQ3gwFqspABZDiDAVrmZaFlhJABZDCDAZABZDEXAGXmQgCDAWqykAFkOYMBWudl51roZYSQAWQ6gwFqspABZDuDAVrpZaFlmmWBZWBk65ABZDyNAmWdZYGQAWQ9gwFleWTrgwEPABcAZYuDAA8AFwCDARcAgwGDAWrqgwBqspABZD6DAVrrZadlnWXUagiDAGXrQgBknJABZD+NAoMBarJkV4MBWuxHAJABZEBki4QAZIuDAlrtRwCQAWRBkAFkQoQAkAFkQmVogwNa7kcAkAFkQ2SNhABkjWVogwNa70cAkAFkRGSMhABkjGXvgwNa8GXwavFq8mrzZfBq8Wr0avMXAGXwavFq9WrzFwBl8GrxX/NlN5ANcphl9mXwkAFkRWXwaveDAwEAZfZl8JABZEZl8Gr4gwMBAGX2ZfCQAWRHZfBq+YMDAQBl9mXwkAFkSGXwavqDAwEAZfZl8JABZEll8Gr7gwMBAGX2ZfCQAWRKZfBq8YMDAQBl9mXwavGQAWRLZfBq8WrygwMBAGX2ZfBq8ZABZExl8GrxavWDAwEAZfZl8GrxkAFkTWXwavFq9IMDAQBl9mXwkAFkTmXwavyDAwEAZfZl8JABZE9l8Gr9gwMBAGX2ZfCQAWRQZfBq/oMDAQBHAJABZFGQAWRShACQAWRSgwJa/5ABZQCQAWRTawKQD3ICZX6QAWRUgwGQAVoBZX6QAWRVgwGQAVoCZYFlWWVckAFkVhcAgwKQAVoDZaeQAWUDkAFkV2QVkAFkWI0DarhlxYMBkAFaBGWiZaeQAWUEgwGDAWqykAFkWYMBkAFaBZABZFqQAWUFQgCQAVoGZaeQAWUDkAFkV2QVkAFkWI0DarhlxYMBkAFaB2WiZaeQAWUHgwGDAWqykAFkW4MBkAFaCJABZQGQAWRcgwGQAWUGkAFkWYMBFwCQAWUCFwCQAWUIkAFkW4MBFwCQAVoJkAFlCZABagqQAWRdgwEBAGXtkAFqC5ABagqQAWRegwEBAGXtkAFqDJABagqQAWRegwEBAGXtkAFqDZABagqQAWRfgwEBAGQEZAWQAWwOkAFaDmXtkAFqDmq4ZcSQAWUOkAFqD4MBgwEBAGXtkAFqDpABagqQAWRggwEBAGQFUwAoaQEAAGHXCgAACnB5cGFyc2luZyBtb2R1bGUgLSBDbGFzc2VzIGFuZCBtZXRob2RzIHRvIGRlZmluZSBhbmQgZXhlY3V0ZSBwYXJzaW5nIGdyYW1tYXJzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGUgcHlwYXJzaW5nIG1vZHVsZSBpcyBhbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byBjcmVhdGluZyBhbmQKZXhlY3V0aW5nIHNpbXBsZSBncmFtbWFycywgdnMuIHRoZSB0cmFkaXRpb25hbCBsZXgveWFjYyBhcHByb2FjaCwgb3IgdGhlCnVzZSBvZiByZWd1bGFyIGV4cHJlc3Npb25zLiAgV2l0aCBweXBhcnNpbmcsIHlvdSBkb24ndCBuZWVkIHRvIGxlYXJuCmEgbmV3IHN5bnRheCBmb3IgZGVmaW5pbmcgZ3JhbW1hcnMgb3IgbWF0Y2hpbmcgZXhwcmVzc2lvbnMgLSB0aGUgcGFyc2luZwptb2R1bGUgcHJvdmlkZXMgYSBsaWJyYXJ5IG9mIGNsYXNzZXMgdGhhdCB5b3UgdXNlIHRvIGNvbnN0cnVjdCB0aGUKZ3JhbW1hciBkaXJlY3RseSBpbiBQeXRob24uCgpIZXJlIGlzIGEgcHJvZ3JhbSB0byBwYXJzZSAiSGVsbG8sIFdvcmxkISIgKG9yIGFueSBncmVldGluZyBvZiB0aGUgZm9ybQpgYCI8c2FsdXRhdGlvbj4sIDxhZGRyZXNzZWU+ISJgYCksIGJ1aWx0IHVwIHVzaW5nIDpjbGFzczpgV29yZGAsCjpjbGFzczpgTGl0ZXJhbGAsIGFuZCA6Y2xhc3M6YEFuZGAgZWxlbWVudHMKKHRoZSA6Y2xhc3M6YCcrJzxQYXJzZXJFbGVtZW50Ll9fYWRkX18+YCBvcGVyYXRvcnMgY3JlYXRlIDpjbGFzczpgQW5kYCBleHByZXNzaW9ucywKYW5kIHRoZSBzdHJpbmdzIGFyZSBhdXRvLWNvbnZlcnRlZCB0byA6Y2xhc3M6YExpdGVyYWxgIGV4cHJlc3Npb25zKTo6CgogICAgZnJvbSBwaXAuX3ZlbmRvci5weXBhcnNpbmcgaW1wb3J0IFdvcmQsIGFscGhhcwoKICAgICMgZGVmaW5lIGdyYW1tYXIgb2YgYSBncmVldGluZwogICAgZ3JlZXQgPSBXb3JkKGFscGhhcykgKyAiLCIgKyBXb3JkKGFscGhhcykgKyAiISIKCiAgICBoZWxsbyA9ICJIZWxsbywgV29ybGQhIgogICAgcHJpbnQgKGhlbGxvLCAiLT4iLCBncmVldC5wYXJzZVN0cmluZyhoZWxsbykpCgpUaGUgcHJvZ3JhbSBvdXRwdXRzIHRoZSBmb2xsb3dpbmc6OgoKICAgIEhlbGxvLCBXb3JsZCEgLT4gWydIZWxsbycsICcsJywgJ1dvcmxkJywgJyEnXQoKVGhlIFB5dGhvbiByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ3JhbW1hciBpcyBxdWl0ZSByZWFkYWJsZSwgb3dpbmcgdG8gdGhlCnNlbGYtZXhwbGFuYXRvcnkgY2xhc3MgbmFtZXMsIGFuZCB0aGUgdXNlIG9mICcrJywgJ3wnIGFuZCAnXicgb3BlcmF0b3JzLgoKVGhlIDpjbGFzczpgUGFyc2VSZXN1bHRzYCBvYmplY3QgcmV0dXJuZWQgZnJvbQo6Y2xhc3M6YFBhcnNlckVsZW1lbnQucGFyc2VTdHJpbmdgIGNhbiBiZQphY2Nlc3NlZCBhcyBhIG5lc3RlZCBsaXN0LCBhIGRpY3Rpb25hcnksIG9yIGFuIG9iamVjdCB3aXRoIG5hbWVkCmF0dHJpYnV0ZXMuCgpUaGUgcHlwYXJzaW5nIG1vZHVsZSBoYW5kbGVzIHNvbWUgb2YgdGhlIHByb2JsZW1zIHRoYXQgYXJlIHR5cGljYWxseQp2ZXhpbmcgd2hlbiB3cml0aW5nIHRleHQgcGFyc2VyczoKCiAgLSBleHRyYSBvciBtaXNzaW5nIHdoaXRlc3BhY2UgKHRoZSBhYm92ZSBwcm9ncmFtIHdpbGwgYWxzbyBoYW5kbGUKICAgICJIZWxsbyxXb3JsZCEiLCAiSGVsbG8gICwgIFdvcmxkICAhIiwgZXRjLikKICAtIHF1b3RlZCBzdHJpbmdzCiAgLSBlbWJlZGRlZCBjb21tZW50cwoKCkdldHRpbmcgU3RhcnRlZCAtCi0tLS0tLS0tLS0tLS0tLS0tClZpc2l0IHRoZSBjbGFzc2VzIDpjbGFzczpgUGFyc2VyRWxlbWVudGAgYW5kIDpjbGFzczpgUGFyc2VSZXN1bHRzYCB0bwpzZWUgdGhlIGJhc2UgY2xhc3NlcyB0aGF0IG1vc3Qgb3RoZXIgcHlwYXJzaW5nCmNsYXNzZXMgaW5oZXJpdCBmcm9tLiBVc2UgdGhlIGRvY3N0cmluZ3MgZm9yIGV4YW1wbGVzIG9mIGhvdyB0bzoKCiAtIGNvbnN0cnVjdCBsaXRlcmFsIG1hdGNoIGV4cHJlc3Npb25zIGZyb20gOmNsYXNzOmBMaXRlcmFsYCBhbmQKICAgOmNsYXNzOmBDYXNlbGVzc0xpdGVyYWxgIGNsYXNzZXMKIC0gY29uc3RydWN0IGNoYXJhY3RlciB3b3JkLWdyb3VwIGV4cHJlc3Npb25zIHVzaW5nIHRoZSA6Y2xhc3M6YFdvcmRgCiAgIGNsYXNzCiAtIHNlZSBob3cgdG8gY3JlYXRlIHJlcGV0aXRpdmUgZXhwcmVzc2lvbnMgdXNpbmcgOmNsYXNzOmBaZXJvT3JNb3JlYAogICBhbmQgOmNsYXNzOmBPbmVPck1vcmVgIGNsYXNzZXMKIC0gdXNlIDpjbGFzczpgJysnPEFuZD5gLCA6Y2xhc3M6YCd8JzxNYXRjaEZpcnN0PmAsIDpjbGFzczpgJ14nPE9yPmAsCiAgIGFuZCA6Y2xhc3M6YCcmJzxFYWNoPmAgb3BlcmF0b3JzIHRvIGNvbWJpbmUgc2ltcGxlIGV4cHJlc3Npb25zIGludG8KICAgbW9yZSBjb21wbGV4IG9uZXMKIC0gYXNzb2NpYXRlIG5hbWVzIHdpdGggeW91ciBwYXJzZWQgcmVzdWx0cyB1c2luZwogICA6Y2xhc3M6YFBhcnNlckVsZW1lbnQuc2V0UmVzdWx0c05hbWVgCiAtIGFjY2VzcyB0aGUgcGFyc2VkIGRhdGEsIHdoaWNoIGlzIHJldHVybmVkIGFzIGEgOmNsYXNzOmBQYXJzZVJlc3VsdHNgCiAgIG9iamVjdAogLSBmaW5kIHNvbWUgaGVscGZ1bCBleHByZXNzaW9uIHNob3J0LWN1dHMgbGlrZSA6Y2xhc3M6YGRlbGltaXRlZExpc3RgCiAgIGFuZCA6Y2xhc3M6YG9uZU9mYAogLSBmaW5kIG1vcmUgdXNlZnVsIGNvbW1vbiBleHByZXNzaW9ucyBpbiB0aGUgOmNsYXNzOmBweXBhcnNpbmdfY29tbW9uYAogICBuYW1lc3BhY2UgY2xhc3MKegUyLjQuN3oVMzAgTWFyIDIwMjAgMDA6NDMgVVRDeipQYXVsIE1jR3VpcmUgPHB0bWNnQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD7pAAAAAE4pAdoDcmVmKQHaCGRhdGV0aW1lKQHaCml0ZW1nZXR0ZXIpAdoFd3JhcHMpAdoOY29udGV4dG1hbmFnZXIpAdoLZmlsdGVyZmFsc2UpAdoMaWZpbHRlcmZhbHNlKQHaBVJMb2NrKQHaCEl0ZXJhYmxlKQLaDk11dGFibGVNYXBwaW5n2gdNYXBwaW5nKQHaC09yZGVyZWREaWN0KQHaD1NpbXBsZU5hbWVzcGFjZWMAAAAAAAAAAAAAAAABAAAAQAAAAHMMAAAAZQBaAWQAWgJkAVMAKQJyDgAAAE4pA9oIX19uYW1lX1/aCl9fbW9kdWxlX1/aDF9fcXVhbG5hbWVfX6kAchIAAAByEgAAAPqGL2hvbWUvdWV0bGhyL0RvY3VtZW50cy9TZXJtb1Bsb3RfYmFja2VuZC9kcmFmdF9TUkFNX2JsYWNrYm94L1VFVFJWX0VTb0NfdjIvdmVudi9saWI2NC9weXRob24zLjYvc2l0ZS1wYWNrYWdlcy9waXAvX3ZlbmRvci9weXBhcnNpbmcucHlyDgAAAJYAAABzAgAAAAgAcg4AAABhQQIAAAogICAgQSBjcm9zcy12ZXJzaW9uIGNvbXBhdGliaWxpdHkgY29uZmlndXJhdGlvbiBmb3IgcHlwYXJzaW5nIGZlYXR1cmVzIHRoYXQgd2lsbCBiZQogICAgcmVsZWFzZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4gQnkgc2V0dGluZyB2YWx1ZXMgaW4gdGhpcyBjb25maWd1cmF0aW9uIHRvIFRydWUsCiAgICB0aG9zZSBmZWF0dXJlcyBjYW4gYmUgZW5hYmxlZCBpbiBwcmlvciB2ZXJzaW9ucyBmb3IgY29tcGF0aWJpbGl0eSBkZXZlbG9wbWVudAogICAgYW5kIHRlc3RpbmcuCgogICAgIC0gY29sbGVjdF9hbGxfQW5kX3Rva2VucyAtIGZsYWcgdG8gZW5hYmxlIGZpeCBmb3IgSXNzdWUgIzYzIHRoYXQgZml4ZXMgZXJyb25lb3VzIGdyb3VwaW5nCiAgICAgICBvZiByZXN1bHRzIG5hbWVzIHdoZW4gYW4gQW5kIGV4cHJlc3Npb24gaXMgbmVzdGVkIHdpdGhpbiBhbiBPciBvciBNYXRjaEZpcnN0OyBzZXQgdG8KICAgICAgIFRydWUgdG8gZW5hYmxlIGJ1Z2ZpeCByZWxlYXNlZCBpbiBweXBhcnNpbmcgMi4zLjAsIG9yIEZhbHNlIHRvIHByZXNlcnZlCiAgICAgICBwcmUtMi4zLjAgaGFuZGxpbmcgb2YgbmFtZWQgcmVzdWx0cwpUYZMDAAAKRGlhZ25vc3RpYyBjb25maWd1cmF0aW9uIChhbGwgZGVmYXVsdCB0byBGYWxzZSkKICAgICAtIHdhcm5fbXVsdGlwbGVfdG9rZW5zX2luX25hbWVkX2FsdGVybmF0aW9uIC0gZmxhZyB0byBlbmFibGUgd2FybmluZ3Mgd2hlbiBhIHJlc3VsdHMKICAgICAgIG5hbWUgaXMgZGVmaW5lZCBvbiBhIE1hdGNoRmlyc3Qgb3IgT3IgZXhwcmVzc2lvbiB3aXRoIG9uZSBvciBtb3JlIEFuZCBzdWJleHByZXNzaW9ucwogICAgICAgKG9ubHkgd2FybnMgaWYgX19jb21wYXRfXy5jb2xsZWN0X2FsbF9BbmRfdG9rZW5zIGlzIEZhbHNlKQogICAgIC0gd2Fybl91bmdyb3VwZWRfbmFtZWRfdG9rZW5zX2luX2NvbGxlY3Rpb24gLSBmbGFnIHRvIGVuYWJsZSB3YXJuaW5ncyB3aGVuIGEgcmVzdWx0cwogICAgICAgbmFtZSBpcyBkZWZpbmVkIG9uIGEgY29udGFpbmluZyBleHByZXNzaW9uIHdpdGggdW5ncm91cGVkIHN1YmV4cHJlc3Npb25zIHRoYXQgYWxzbwogICAgICAgaGF2ZSByZXN1bHRzIG5hbWVzCiAgICAgLSB3YXJuX25hbWVfc2V0X29uX2VtcHR5X0ZvcndhcmQgLSBmbGFnIHRvIGVuYWJsZSB3YXJuaW5ncyB3aGFuIGEgRm9yd2FyZCBpcyBkZWZpbmVkCiAgICAgICB3aXRoIGEgcmVzdWx0cyBuYW1lLCBidXQgaGFzIG5vIGNvbnRlbnRzIGRlZmluZWQKICAgICAtIHdhcm5fb25fbXVsdGlwbGVfc3RyaW5nX2FyZ3NfdG9fb25lb2YgLSBmbGFnIHRvIGVuYWJsZSB3YXJuaW5ncyB3aGFuIG9uZU9mIGlzCiAgICAgICBpbmNvcnJlY3RseSBjYWxsZWQgd2l0aCBtdWx0aXBsZSBzdHIgYXJndW1lbnRzCiAgICAgLSBlbmFibGVfZGVidWdfb25fbmFtZWRfZXhwcmVzc2lvbnMgLSBmbGFnIHRvIGF1dG8tZW5hYmxlIGRlYnVnIG9uIGFsbCBzdWJzZXF1ZW50CiAgICAgICBjYWxscyB0byBQYXJzZXJFbGVtZW50LnNldE5hbWUoKQpGYwEAAAAAAAAAAgAAAAQAAABDAAAAcyQAAABnAHwAXRx9AXwBagBkAIMBcxx8AWoAZAGDAXIEfAGRAnEEUwApAloHZW5hYmxlX1oFd2Fybl8pAdoKc3RhcnRzd2l0aCkC2gIuMNoCbm1yEgAAAHISAAAAchMAAAD6CjxsaXN0Y29tcD68AAAAcwIAAAAGAHIXAAAAYwAAAAAAAAAAAAAAAAIAAABDAAAAcxwAAABkAXQAXwFkAXQAXwJkAXQAXwNkAXQAXwRkAFMAKQJOVCkF2ghfX2RpYWdfX9opd2Fybl9tdWx0aXBsZV90b2tlbnNfaW5fbmFtZWRfYWx0ZXJuYXRpb27aKXdhcm5fdW5ncm91cGVkX25hbWVkX3Rva2Vuc19pbl9jb2xsZWN0aW9u2h53YXJuX25hbWVfc2V0X29uX2VtcHR5X0ZvcndhcmTaJXdhcm5fb25fbXVsdGlwbGVfc3RyaW5nX2FyZ3NfdG9fb25lb2ZyEgAAAHISAAAAchIAAAByEwAAANoUX2VuYWJsZV9hbGxfd2FybmluZ3O+AAAAcwgAAAAAAQYBBgEGAXIdAAAA2gtfX3ZlcnNpb25fX9oPX192ZXJzaW9uVGltZV9f2gpfX2F1dGhvcl9f2gpfX2NvbXBhdF9fchgAAADaA0FuZNoPQ2FzZWxlc3NLZXl3b3Jk2g9DYXNlbGVzc0xpdGVyYWzaCkNoYXJzTm90SW7aB0NvbWJpbmXaBERpY3TaBEVhY2jaBUVtcHR52gpGb2xsb3dlZEJ52gdGb3J3YXJk2gpHb1RvQ29sdW1u2gVHcm91cNoHS2V5d29yZNoHTGluZUVuZNoJTGluZVN0YXJ02gdMaXRlcmFs2gpQcmVjZWRlZEJ52gpNYXRjaEZpcnN02gdOb01hdGNo2gZOb3RBbnnaCU9uZU9yTW9yZdoIT25seU9uY2XaCE9wdGlvbmFs2gJPctoSUGFyc2VCYXNlRXhjZXB0aW9u2hNQYXJzZUVsZW1lbnRFbmhhbmNl2g5QYXJzZUV4Y2VwdGlvbtoPUGFyc2VFeHByZXNzaW9u2hNQYXJzZUZhdGFsRXhjZXB0aW9u2gxQYXJzZVJlc3VsdHPaFFBhcnNlU3ludGF4RXhjZXB0aW9u2g1QYXJzZXJFbGVtZW502gxRdW90ZWRTdHJpbmfaGVJlY3Vyc2l2ZUdyYW1tYXJFeGNlcHRpb27aBVJlZ2V42gZTa2lwVG/aCVN0cmluZ0VuZNoLU3RyaW5nU3RhcnTaCFN1cHByZXNz2gVUb2tlbtoOVG9rZW5Db252ZXJ0ZXLaBVdoaXRl2gRXb3Jk2gdXb3JkRW5k2glXb3JkU3RhcnTaClplcm9Pck1vcmXaBENoYXLaCWFscGhhbnVtc9oGYWxwaGFz2gphbHBoYXM4Yml02gthbnlDbG9zZVRhZ9oKYW55T3BlblRhZ9oNY1N0eWxlQ29tbWVudNoDY29s2hJjb21tYVNlcGFyYXRlZExpc3TaEGNvbW1vbkhUTUxFbnRpdHnaDGNvdW50ZWRBcnJhedoPY3BwU3R5bGVDb21tZW502g9kYmxRdW90ZWRTdHJpbmfaD2RibFNsYXNoQ29tbWVudNoNZGVsaW1pdGVkTGlzdNoGZGljdE9m2g5kb3duY2FzZVRva2Vuc9oFZW1wdHnaB2hleG51bXPaC2h0bWxDb21tZW502hBqYXZhU3R5bGVDb21tZW502gRsaW5l2gdsaW5lRW5k2glsaW5lU3RhcnTaBmxpbmVub9oMbWFrZUhUTUxUYWdz2gttYWtlWE1MVGFnc9oObWF0Y2hPbmx5QXRDb2zaEW1hdGNoUHJldmlvdXNFeHBy2hRtYXRjaFByZXZpb3VzTGl0ZXJhbNoKbmVzdGVkRXhwctoPbnVsbERlYnVnQWN0aW9u2gRudW1z2gVvbmVPZtoHb3BBc3NvY9oSb3BlcmF0b3JQcmVjZWRlbmNl2gpwcmludGFibGVz2ghwdW5jOGJpdNoScHl0aG9uU3R5bGVDb21tZW502gxxdW90ZWRTdHJpbmfaDHJlbW92ZVF1b3Rlc9oRcmVwbGFjZUhUTUxFbnRpdHnaC3JlcGxhY2VXaXRo2gpyZXN0T2ZMaW5l2g9zZ2xRdW90ZWRTdHJpbmfaBnNyYW5nZdoJc3RyaW5nRW5k2gtzdHJpbmdTdGFydNoQdHJhY2VQYXJzZUFjdGlvbtoNdW5pY29kZVN0cmluZ9oMdXBjYXNlVG9rZW5z2g13aXRoQXR0cmlidXRl2g1pbmRlbnRlZEJsb2Nr2g9vcmlnaW5hbFRleHRGb3LaB3VuZ3JvdXDaDWluZml4Tm90YXRpb27aC2xvY2F0ZWRFeHBy2gl3aXRoQ2xhc3PaCkNsb3NlTWF0Y2jaCHRva2VuTWFw2hBweXBhcnNpbmdfY29tbW9u2hFweXBhcnNpbmdfdW5pY29kZdoLdW5pY29kZV9zZXTaFmNvbmRpdGlvbkFzUGFyc2VBY3Rpb27aAnJl6QMAAABjAQAAAAAAAAADAAAACwAAAEMAAABzYAAAAHQAfAB0AYMCcg58AFMAeQh0AnwAgwFTAAQAdANrCnJaAQABAAEAdAF8AIMBagR0BWoGgwBkAYMCfQF0B2QCgwF9AnwCaghkA2QEhACDAQEAfAJqCXwBgwFTAFgAZAVTACkGYR8BAABEcm9wLWluIHJlcGxhY2VtZW50IGZvciBzdHIob2JqKSB0aGF0IHRyaWVzIHRvIGJlIFVuaWNvZGUKICAgICAgICBmcmllbmRseS4gSXQgZmlyc3QgdHJp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ICAgICAgIC0gZXhjIC0gZXhjZXB0aW9uIHJhaXNlZCBkdXJpbmcgcGFyc2luZyAobmVlZCBub3QgYmUgYSBQYXJzZUV4Y2VwdGlvbiwgaW4gc3VwcG9ydAogICAgICAgICAgIG9mIFB5dGhvbiBleGNlcHRpb25zIHRoYXQgbWlnaHQgYmUgcmFpc2VkIGluIGEgcGFyc2UgYWN0aW9uKQogICAgICAgICAtIGRlcHRoIChkZWZhdWx0PTE2KSAtIG51bWJlciBvZiBsZXZlbHMgYmFjayBpbiB0aGUgc3RhY2sgdHJhY2UgdG8gbGlzdCBleHByZXNzaW9uCiAgICAgICAgICAgYW5kIGZ1bmN0aW9uIG5hbWVzOyBpZiBOb25lLCB0aGUgZnVsbCBzdGFjayB0cmFjZSBuYW1lcyB3aWxsIGJlIGxpc3RlZDsgaWYgMCwgb25seQogICAgICAgICAgIHRoZSBmYWlsaW5nIGlucHV0IGxpbmUsIG1hcmtlciwgYW5kIGV4Y2VwdGlvbiBzdHJpbmcgd2lsbCBiZSBzaG93bgoKICAgICAgICBSZXR1cm5zIGEgbXVsdGktbGluZSBzdHJpbmcgbGlzdGluZyB0aGUgUGFyc2VyRWxlbWVudHMgYW5kL29yIGZ1bmN0aW9uIG5hbWVzIGluIHRoZQogICAgICAgIGV4Y2VwdGlvbidzIHN0YWNrIHRyYWNlLgoKICAgICAgICBOb3RlOiB0aGUgZGlhZ25vc3RpYyBvdXRwdXQgd2lsbCBpbmNsdWRlIHN0cmluZyByZXByZXNlbnRhdGlvbnMgb2YgdGhlIGV4cHJlc3Npb25zCiAgICAgICAgdGhhdCBmYWlsZWQgdG8gcGFyc2UuIFRoZXNlIHJlcHJlc2VudGF0aW9ucyB3aWxsIGJlIG1vcmUgaGVscGZ1bCBpZiB5b3UgdXNlIGBzZXROYW1lYCB0bwogICAgICAgIGdpdmUgaWRlbnRpZmlhYmxlIG5hbWVzIHRvIHlvdXIgZXhwcmVzc2lvbnMuIE90aGVyd2lzZSB0aGV5IHdpbGwgdXNlIHRoZSBkZWZhdWx0IHN0cmluZwogICAgICAgIGZvcm1zLCB3aGljaCBtYXkgYmUgY3J5cHRpYyB0byByZWFkLgoKICAgICAgICBleHBsYWluKCkg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ZyByZXR1cm5zIGEgUGFyc2VSZXN1bHRzIG9iamVjdAogICAgICAgIHJlc3VsdCA9IGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikKCiAgICAgICAgZGVmIHRlc3QocywgZm49cmVwcik6CiAgICAgICAgICAgIHByaW50KCIlcyAtPiAlcyIgJSAocywgZm4oZXZhbChzKSkpKQogICAgICAgIHRlc3QoImxpc3QocmVzdWx0KSIpCiAgICAgICAgdGVzdCgicmVzdWx0WzBdIikKICAgICAgICB0ZXN0KCJyZXN1bHRbJ21vbnRoJ10iKQogICAgICAgIHRlc3QoInJlc3VsdC5kYXkiKQogICAgICAgIHRlc3QoIidtb250aCcgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCInbWludXRlcycgaW4gcmVzdWx0IikKICAgICAgICB0ZXN0KCJyZXN1bHQuZHVtcCgpIiwgc3RyKQoKICAgIHByaW50czo6CgogICAgICAgIGxpc3QocmVzdWx0KSAtPiBbJzE5OTknLCAnLycsICcxMicsICcvJywgJzMxJ10KICAgICAgICByZXN1bHRbMF0gLT4gJzE5OTknCiAgICAgICAgcmVzdWx0Wydtb250aCddIC0+ICcxMicKICAgICAgICByZXN1bHQuZGF5IC0+ICczMScKICAgICAgICAnbW9udGgnIGluIHJlc3VsdCAtPiBUcnVlCiAgICAgICAgJ21pbnV0ZXMnIGluIHJlc3VsdCAtPiBGYWxzZQogICAgICAgIHJlc3VsdC5kdW1wKCkgLT4gWycxOTk5JywgJy8nLCAnMTInLCAnLycsICczMSddCiAgICAgICAgLSBkYXk6IDMxCiAgICAgICAgLSBtb250aDogMTIKICAgICAgICAtIHllYXI6IDE5OTkKICAgIE5UYwUAAAAAAAAABgAAAAMAAABDAAAAcyIAAAB0AHwBfACDAnIOfAFTAHQBagJ8AIMBfQVkAXwFXwN8BVMAKQJOVCkEcpoAAADaBm9iamVjdNoHX19uZXdfX9oVX1BhcnNlUmVzdWx0c19fZG9pbml0KQZyxgAAANoHdG9rbGlzdNoEbmFtZdoGYXNMaXN02gVtb2RhbFoGcmV0b2JqchIAAAByEgAAAHIT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bnMgaXRlbSBhdCBzcGVjaWZpZWQgaW5kZXggKGRlZmF1bHQ9IGBgbGFzdGBgKS4KICAgICAgICBTdXBwb3J0cyBib3RoIGBgbGlzdGBgIGFuZCBgYGRpY3RgYCBzZW1hbnRpY3MgZm9yIGBgcG9wKClgYC4gSWYKICAgICAgICBwYXNzZWQgbm8gYXJndW1lbnQgb3IgYW4gaW50ZWdlciBhcmd1bWVudCwgaXQgd2lsbCB1c2UgYGBsaXN0YGAKICAgICAgICBzZW1hbnRpY3MgYW5kIHBvcCB0b2tlbnMgZnJvbSB0aGUgbGlzdCBvZiBwYXJzZWQgdG9rZW5zLiBJZiBwYXNzZWQKICAgICAgICBhIG5vbi1pbnRlZ2VyIGFyZ3VtZW50IChtb3N0IGxpa2VseSBhIHN0cmluZyksIGl0IHdpbGwgdXNlIGBgZGljdGBgCiAgICAgICAgc2VtYW50aWNzIGFuZCBwb3AgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUgZnJvbSBhbnkgZGVmaW5lZCByZXN1bHRzCiAgICAgICAgbmFtZXMuIEEgc2Vjb25kIGRlZmF1bHQgcmV0dXJuIHZhbHVlIGFyZ3VtZW50IGlzIHN1cHBvcnRlZCwganVzdCBhcyBpbgogICAgICAgIGBgZGljdC5wb3AoKWBgLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGRlZiByZW1vdmVfZmlyc3QodG9rZW5zKToKICAgICAgICAgICAgICAgIHRva2Vucy5wb3AoMCkKICAgICAgICAgICAgcHJpbnQoT25lT3JNb3JlKFdvcmQobnVtcykpLnBhcnNlU3RyaW5nKCIwIDEyMyAzMjEiKSkgIyAtPiBbJzAnLCAnMTIzJywgJzMyMSddCiAgICAgICAgICAgIHByaW50KE9uZU9yTW9yZShXb3JkKG51bXMpKS5hZGRQYXJzZUFjdGlvbihyZW1vdmVfZmlyc3QpLnBhcnNlU3RyaW5nKCIwIDEyMyAzMjEiKSkgIyAtPiBbJzEyMycsICczMjEnXQoKICAgICAgICAgICAgbGFiZWwgPSBXb3JkKGFscGhhcykKICAgICAgICAgICAgcGF0dCA9IGxhYmVsKCJMQUJFTCIpICsgT25lT3JNb3JlKFdvcmQobnVtcykpCiAgICAgICAgICAgIHByaW50KHBhdHQucGFyc2VTdHJpbmcoIkFBQiAxMjMgMzIxIikuZHVtcCgpKQoKICAgICAgICAgICAgIyBVc2UgcG9wKCkgaW4gYSBwYXJzZSBhY3Rpb24gdG8gcmVtb3ZlIG5hbWVkIHJlc3VsdCAobm90ZSB0aGF0IGNvcnJlc3BvbmRpbmcgdmFsdWUgaXMgbm90CiAgICAgICAgICAgICMgcmVtb3ZlZCBmcm9tIGxpc3QgZm9ybSBvZiByZXN1bHRzKQogICAgICAgICAgICBkZWYgcmVtb3ZlX0xBQkVMKHRva2Vucyk6CiAgICAgICAgICAgICAgICB0b2tlbnMucG9wKCJMQUJFTCIpCiAgICAgICAgICAgICAgICByZXR1cm4gdG9rZW5zCiAgICAgICAgICAgIHBhdHQuYWRkUGFyc2VBY3Rpb24ocmVtb3ZlX0xBQkVMKQogICAgICAgICAgICBwcmludChwYXR0LnBhcnNlU3RyaW5nKCJBQUIgMTIzIDMyMSIpLmR1bXAoKSkKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIFsnQUFCJywgJzEyMycsICczMjEnXQogICAgICAgICAgICAtIExBQkVMOiBBQUIKCiAgICAgICAgICAgIFsnQUFCJywgJzEyMycsICczMjEnXQogICAgICAgIHKUAAAA2gdkZWZhdWx0cgEAAAB6LXBvcCgpIGdvdCBhbiB1bmV4cGVjdGVkIGtleXdvcmQgYXJndW1lbnQgJyVzJ05ylQAAACkFchsBAAByEAEAAHKaAAAAcpcAAAByzQAAACkIcsMAAABywgAAANoGa3dhcmdzchUBAAByEgEAANoFaW5kZXhypAAAAFoMZGVmYXVsdHZhbHVlchIAAAByEgAAAHITAAAA2gNwb3C9AgAAcx4AAAAAJQQBBgESAQgBDgIQAQ4BDAEMAQgBCAEGAQQCCAF6EFBhcnNlUmVzdWx0cy5wb3BjAwAAAAAAAAADAAAAAgAAAEMAAABzGAAAAHwBfABrBnIQfAB8ARkAUwB8AlMAZAFTACkCYVsCAAAKICAgICAgICBSZXR1cm5zIG5hbWVkIHJlc3VsdCBtYXRjaGluZyB0aGUgZ2l2ZW4ga2V5LCBvciBpZiB0aGVyZSBpcyBubwogICAgICAgIHN1Y2ggbmFtZSwgdGhlbiByZXR1cm5zIHRoZSBnaXZlbiBgYGRlZmF1bHRWYWx1ZWBgIG9yIGBgTm9uZWBgIGlmIG5vCiAgICAgICAgYGBkZWZhdWx0VmFsdWVgYCBpcyBzcGVjaWZpZWQuCgogICAgICAgIFNpbWlsYXIgdG8gYGBkaWN0LmdldCgpYGAuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICAgICAgZGF0ZV9zdHIgPSBpbnRlZ2VyKCJ5ZWFyIikgKyAnLycgKyBpbnRlZ2VyKCJtb250aCIpICsgJy8nICsgaW50ZWdlcigiZGF5IikKCiAgICAgICAgICAgIHJlc3VsdCA9IGRhdGVfc3RyLnBhcnNlU3RyaW5nKCIxOTk5LzEyLzMxIikKICAgICAgICAgICAgcHJpbnQocmVzdWx0LmdldCgieWVhciIpKSAjIC0+ICcxOTk5JwogICAgICAgICAgICBwcmludChyZXN1bHQuZ2V0KCJob3VyIiwgIm5vdCBzcGVjaWZpZWQiKSkgIyAtPiAnbm90IHNwZWNpZmllZCcKICAgICAgICAgICAgcHJpbnQocmVzdWx0LmdldCgiaG91ciIpKSAjIC0+IE5vbmUKICAgICAgICBOchIAAAApA3LDAAAA2gNrZXnaDGRlZmF1bHRWYWx1ZXISAAAAchIAAAByEwAAAHLrAAAA9AIAAHMGAAAAABIIAQgCehBQYXJzZVJlc3VsdHMuZ2V0YwMAAAAAAAAACAAAAAcAAABDAAAAc1oAAAB8AGoAagF8AXwCgwIBAHhGfABqAmoDgwBEAF04XAJ9A30EeC50BHwEgwFEAF0iXAJ9BVwCfQZ9B3QFfAZ8B3wHfAFrBBcAgwJ8BHwFPABxLFcAcRpXAGQBUwApAmEZAgAACiAgICAgICAgSW5zZXJ0cyBuZXcgZWxlbWVudCBhdCBsb2NhdGlvbiBpbmRleCBpbiB0aGUgbGlzdCBvZiBwYXJzZWQgdG9rZW5zLgoKICAgICAgICBTaW1pbGFyIHRvIGBgbGlzdC5pbnNlcnQoKWBgLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIHByaW50KE9uZU9yTW9yZShXb3JkKG51bXMpKS5wYXJzZVN0cmluZygiMCAxMjMgMzIxIikpICMgLT4gWycwJywgJzEyMycsICczMjEnXQoKICAgICAgICAgICAgIyB1c2UgYSBwYXJzZSBhY3Rpb24gdG8gaW5zZXJ0IHRoZSBwYXJzZSBsb2NhdGlvbiBpbiB0aGUgZnJvbnQgb2YgdGhlIHBhcnNlZCByZXN1bHRzCiAgICAgICAgICAgIGRlZiBpbnNlcnRfbG9jbihsb2NuLCB0b2tlbnMpOgogICAgICAgICAgICAgICAgdG9rZW5zLmluc2VydCgwLCBsb2NuKQogICAgICAgICAgICBwcmludChPbmVPck1vcmUoV29yZChudW1zKSkuYWRkUGFyc2VBY3Rpb24oaW5zZXJ0X2xvY24pLnBhcnNlU3RyaW5nKCIwIDEyMyAzMjEiKSkgIyAtPiBbMCwgJzAnLCAnMTIzJywgJzMyMSddCiAgICAgICAgTikGcgoBAADaBmluc2VydHINAQAAchsBAABy6QAAAHL4AAAAKQhywwAAAHIzAQAAWgZpbnNTdHJyAQEAAHIcAQAAchUBAAByHgEAAHIfAQAAchIAAAByEgAAAHITAAAAcjcBAAALAwAAcwgAAAAADw4CFAEWAXoTUGFyc2VSZXN1bHRzLmluc2VydGMCAAAAAAAAAAIAAAACAAAAQwAAAHMQAAAAfABqAGoBfAGDAQEAZAFTACkCYfMBAAAKICAgICAgICBBZGQgc2luZ2xlIGVsZW1lbnQgdG8gZW5kIG9mIFBhcnNlUmVzdWx0cyBsaXN0IG9mIGVsZW1lbnRzLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIHByaW50KE9uZU9yTW9yZShXb3JkKG51bXMpKS5wYXJzZVN0cmluZygiMCAxMjMgMzIxIikpICMgLT4gWycwJywgJzEyMycsICczMjEnXQoKICAgICAgICAgICAgIyB1c2UgYSBwYXJzZSBhY3Rpb24gdG8gY29tcHV0ZSB0aGUgc3VtIG9mIHRoZSBwYXJzZWQgaW50ZWdlcnMsIGFuZCBhZGQgaXQgdG8gdGhlIGVuZAogICAgICAgICAgICBkZWYgYXBwZW5kX3N1bSh0b2tlbnMpOgogICAgICAgICAgICAgICAgdG9rZW5zLmFwcGVuZChzdW0obWFwKGludCwgdG9rZW5zKSkpCiAgICAgICAgICAgIHByaW50KE9uZU9yTW9yZShXb3JkKG51bXMpKS5hZGRQYXJzZUFjdGlvbihhcHBlbmRfc3VtKS5wYXJzZVN0cmluZygiMCAxMjMgMzIxIikpICMgLT4gWycwJywgJzEyMycsICczMjEnLCA0NDRdCiAgICAgICAgTikCcgoBAABy5AAAACkCcsMAAADaBGl0ZW1yEgAAAHISAAAAchMAAABy5AAAACADAABzAgAAAAANehNQYXJzZVJlc3VsdHMuYXBwZW5kYwIAAAAAAAAAAgAAAAMAAABDAAAAcyYAAAB0AHwBdAGDAnIWfABqAnwBgwEBAG4MfABqA2oEfAGDAQEAZAFTACkCYQkCAAAKICAgICAgICBBZGQgc2VxdWVuY2Ugb2YgZWxlbWVudHMgdG8gZW5kIG9mIFBhcnNlUmVzdWx0cyBsaXN0IG9mIGVsZW1lbnRzLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIHBhdHQgPSBPbmVPck1vcmUoV29yZChhbHBoYXMpKQoKICAgICAgICAgICAgIyB1c2UgYSBwYXJzZSBhY3Rpb24gdG8gYXBwZW5kIHRoZSByZXZlcnNlIG9mIHRoZSBtYXRjaGVkIHN0cmluZ3MsIHRvIG1ha2UgYSBwYWxpbmRyb21lCiAgICAgICAgICAgIGRlZiBtYWtlX3BhbGluZHJvbWUodG9rZW5zKToKICAgICAgICAgICAgICAgIHRva2Vucy5leHRlbmQocmV2ZXJzZWQoW3RbOjotMV0gZm9yIHQgaW4gdG9rZW5zXSkpCiAgICAgICAgICAgICAgICByZXR1cm4gJycuam9pbih0b2tlbnMpCiAgICAgICAgICAgIHByaW50KHBhdHQuYWRkUGFyc2VBY3Rpb24obWFrZV9wYWxpbmRyb21lKS5wYXJzZVN0cmluZygibHNrZGogc2Rsa2pmIGxrc2QiKSkgIyAtPiAnbHNrZGpzZGxramZsa3NkZHNrbGZqa2xkc2pka3NsJwogICAgICAgIE4pBXKaAAAAcj8AAADaCF9faWFkZF9fcgoBAADaBmV4dGVuZCkCcsMAAABaB2l0ZW1zZXFyEgAAAHISAAAAchMAAAByOgEAAC8DAABzBgAAAAAOCgEMAnoTUGFyc2VSZXN1bHRzLmV4dGVuZGMBAAAAAAAAAAEAAAADAAAAQwAAAHMaAAAAfABqAGQBZAGFAj0AfABqAWoCgwABAGQBUwApAno3CiAgICAgICAgQ2xlYXIgYWxsIGVsZW1lbnRzIGFuZCByZXN1bHRzIG5hbWVzLgogICAgICAgIE4pA3IKAQAAcg0BAADaBWNsZWFyKQFywwAAAHISAAAAchIAAAByEwAAAHI7AQAAQgMAAHMEAAAAAAQMAXoSUGFyc2VSZXN1bHRzLmNsZWFyYwIAAAAAAAAAAgAAAAsAAABDAAAAcyIAAAB5CHwAfAEZAFMABAB0AGsKchwBAAEAAQBkAVMAWABkAFMAKQJOcrIAAAApAXIPAQAAKQJywwAAAHIBAQAAchIAAAByEgAAAHITAAAAcssAAABJAwAAcwgAAAAAAQIBCAEOAXoYUGFyc2VSZXN1bHRzLl9fZ2V0YXR0cl9fYwIAAAAAAAAAAwAAAAIAAABDAAAAcxQAAAB8AGoAgwB9AnwCfAE3AH0CfAJTACkBTikB2gRjb3B5KQNywwAAANoFb3RoZXJypAAAAHISAAAAchIAAAByEwAAANoHX19hZGRfX08DAABzBgAAAAABCAEIAXoUUGFyc2VSZXN1bHRzLl9fYWRkX19jAgAAAAAAAAAGAAAABAAAAAMAAABzkAAAAHwBagBybnQBfABqAoMBiQGHAWYBZAFkAoQIiQB8AWoAagODAH0ChwBmAWQDZASECHwCRACDAX0DeDR8A0QAXSxcAn0EfQV8BXwAfAQ8AHQEfAVkBRkAdAWDAnI+dAZ8AIMBfAVkBRkAXwdxPlcAfAAEAGoCfAFqAjcAAgBfAnwAaghqCXwBagiDAQEAfABTACkGTmMBAAAAAAAAAAEAAAACAAAAEwAAAHMUAAAAfABkAWsAcgyIAFMAfACIABcAUwApAk5yAQAAAHISAAAAKQHaAWEpAdoGb2Zmc2V0chIAAAByEwAAAHKZAAAAVwMAAHMAAAAAeidQYXJzZVJlc3VsdHMuX19pYWRkX18uPGxvY2Fscz4uPGxhbWJkYT5jAQAAAAAAAAAEAAAACQAAABMAAABzNAAAAGcAfABdLFwCfQF9AnwCRABdHn0DfAF0AHwDZAAZAIgAfANkARkAgwGDAmYCkQNxEHEEUwApAnIBAAAAcpQAAAApAXL4AAAAKQRyFQAAAHIVAQAA2gV2bGlzdHISAQAAKQHaCWFkZG9mZnNldHISAAAAchMAAAByFwAAAFkDAABzAgAAAAYBeilQYXJzZVJlc3VsdHMuX19pYWRkX18uPGxvY2Fscz4uPGxpc3Rjb21wPnIBAAAAKQpyDQEAAHLNAAAAcgoBAAByGwEAAHKaAAAAcj8AAAByFAEAAHIFAQAAcgYBAADaBnVwZGF0ZSkGcsMAAAByPQEAAFoKb3RoZXJpdGVtc1oOb3RoZXJkaWN0aXRlbXNyFQEAAHISAQAAchIAAAApAnJCAQAAckABAAByEwAAAHI5AQAAVAMAAHMaAAAAAAEGAQoBDAEKAQoBCAEOAQgBDgESAhABDgF6FVBhcnNlUmVzdWx0cy5fX2lhZGRfX2MCAAAAAAAAAAIAAAADAAAAQwAAAHMmAAAAdAB8AXQBgwJyGnwBZAFrAnIafABqAoMAUwB8AXwAFwBTAGQAUwApAk5yAQAAACkDcpoAAABylwAAAHI8AQAAKQJywwAAAHI9AQAAchIAAAByEgAAAHITAAAA2ghfX3JhZGRfX2QDAABzBgAAAAABEgIIA3oVUGFyc2VSZXN1bHRzLl9fcmFkZF9fYwEAAAAAAAAAAQAAAAQAAABDAAAAcxgAAABkAXQAfABqAYMBdAB8AGoCgwFmAhYAUwApAk56CCglcywgJXMpKQNy+wAAAHIKAQAAcg0BAAApAXLDAAAAchIAAAByEgAAAHITAAAAcs8AAABsAwAAcwIAAAAAAXoVUGFyc2VSZXN1bHRzLl9fcmVwcl9fYwEAAAAAAAAAAQAAAAQAAABDAAAAcx4AAABkAWQCagBkA2QEhAB8AGoBRACDAYMBFwBkBRcAUwApBk76AVt6AiwgYwEAAAAAAAAAAgAAAAQAAABzAAAAcygAAAB8AF0gfQF0AHwBdAGDAnIYdAJ8AYMBbgZ0A3wBgwFWAAEAcQJkAFMAKQFOKQRymgAAAHI/AAAAcqUAAABy+wAAACkCchUAAABy8gAAAHISAAAAchIAAAByEwAAAHKnAAAAcAMAAHMCAAAABAB6J1BhcnNlUmVzdWx0cy5fX3N0cl9fLjxsb2NhbHM+LjxnZW5leHByPvoBXSkCctEAAAByCgEAACkBcsMAAAByEgAAAHISAAAAchMAAAByzgAAAG8DAABzAgAAAAABehRQYXJzZVJlc3VsdHMuX19zdHJfX3KyAAAAYwIAAAAAAAAABAAAAAQAAABDAAAAc1AAAABnAH0CeEZ8AGoARABdPH0DfAJyInwBciJ8AmoBfAGDAQEAdAJ8A3QDgwJyOnwCfANqBIMANwB9AnEMfAJqAXQFfAODAYMBAQBxDFcAfAJTACkBTikGcgoBAABy5AAAAHKaAAAAcj8AAADaDV9hc1N0cmluZ0xpc3RypQAAACkEcsMAAADaA3NlcNoDb3V0cjgBAAByEgAAAHISAAAAchMAAAByRwEAAHIDAABzEAAAAAABBAEMAQgBCgEKAQ4CEgF6GlBhcnNlUmVzdWx0cy5fYXNTdHJpbmdMaXN0YwEAAAAAAAAAAQAAAAIAAABDAAAAcxAAAABkAWQChAB8AGoARACDAVMAKQNheAIAAAogICAgICAgIFJldHVybnMgdGhlIHBhcnNlIHJlc3VsdHMgYXMgYSBuZXN0ZWQgbGlzdCBvZiBtYXRjaGluZyB0b2tlbnMsIGFsbCBjb252ZXJ0ZWQgdG8gc3RyaW5ncy4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBwYXR0ID0gT25lT3JNb3JlKFdvcmQoYWxwaGFzKSkKICAgICAgICAgICAgcmVzdWx0ID0gcGF0dC5wYXJzZVN0cmluZygic2xka2ogbHNka2ogc2xka2oiKQogICAgICAgICAgICAjIGV2ZW4gdGhvdWdoIHRoZSByZXN1bHQgcHJpbnRzIGluIHN0cmluZy1saWtlIGZvcm0sIGl0IGlzIGFjdHVhbGx5IGEgcHlwYXJzaW5nIFBhcnNlUmVzdWx0cwogICAgICAgICAgICBwcmludCh0eXBlKHJlc3VsdCksIHJlc3VsdCkgIyAtPiA8Y2xhc3MgJ3B5cGFyc2luZy5QYXJzZVJlc3VsdHMnPiBbJ3NsZGtqJywgJ2xzZGtqJywgJ3NsZGtqJ10KCiAgICAgICAgICAgICMgVXNlIGFzTGlzdCgpIHRvIGNyZWF0ZSBhbiBhY3R1YWwgbGlzdAogICAgICAgICAgICByZXN1bHRfbGlzdCA9IHJlc3VsdC5hc0xpc3QoKQogICAgICAgICAgICBwcmludCh0eXBlKHJlc3VsdF9saXN0KSwgcmVzdWx0X2xpc3QpICMgLT4gPGNsYXNzICdsaXN0Jz4gWydzbGRraicsICdsc2RraicsICdzbGRraiddCiAgICAgICAgYwEAAAAAAAAAAgAAAAUAAABTAAAAcyIAAABnAHwAXRp9AXQAfAF0AYMCchp8AWoCgwBuAnwBkQJxBFMAchIAAAApA3KaAAAAcj8AAAByAgEAACkCchUAAADaA3Jlc3ISAAAAchIAAAByEwAAAHIXAAAAjAMAAHMCAAAABgB6J1BhcnNlUmVzdWx0cy5hc0xpc3QuPGxvY2Fscz4uPGxpc3Rjb21wPikBcgoBAAApAXLDAAAAchIAAAByEgAAAHITAAAAcgIBAAB9AwAAcwIAAAAAD3oTUGFyc2VSZXN1bHRzLmFzTGlzdGMBAAAAAAAAAAIAAAAEAAAAAwAAAHM2AAAAdAByDHwAagF9AW4GfABqAn0BhwBmAWQBZAKECIkAdAOHAGYBZANkBIQIfAGDAEQAgwGDAVMAKQVhrAMAAAogICAgICAgIFJldHVybnMgdGhlIG5hbWVkIHBhcnNlIHJlc3VsdHMgYXMgYSBuZXN0ZWQgZGljdGlvbmFyeS4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIoInllYXIiKSArICcvJyArIGludGVnZXIoIm1vbnRoIikgKyAnLycgKyBpbnRlZ2VyKCJkYXkiKQoKICAgICAgICAgICAgcmVzdWx0ID0gZGF0ZV9zdHIucGFyc2VTdHJpbmcoJzEyLzMxLzE5OTknKQogICAgICAgICAgICBwcmludCh0eXBlKHJlc3VsdCksIHJlcHIocmVzdWx0KSkgIyAtPiA8Y2xhc3MgJ3B5cGFyc2luZy5QYXJzZVJlc3VsdHMnPiAoWycxMicsICcvJywgJzMxJywgJy8nLCAnMTk5OSddLCB7J2RheSc6IFsoJzE5OTknLCA0KV0sICd5ZWFyJzogWygnMTInLCAwKV0sICdtb250aCc6IFsoJzMxJywgMildfSkKCiAgICAgICAgICAgIHJlc3VsdF9kaWN0ID0gcmVzdWx0LmFzRGljdCgpCiAgICAgICAgICAgIHByaW50KHR5cGUocmVzdWx0X2RpY3QpLCByZXByKHJlc3VsdF9kaWN0KSkgIyAtPiA8Y2xhc3MgJ2RpY3QnPiB7J2RheSc6ICcxOTk5JywgJ3llYXInOiAnMTInLCAnbW9udGgnOiAnMzEnfQoKICAgICAgICAgICAgIyBldmVuIHRob3VnaCBhIFBhcnNlUmVzdWx0cyBzdXBwb3J0cyBkaWN0LWxpa2UgYWNjZXNzLCBzb21ldGltZSB5b3UganVzdCBuZWVkIHRvIGhhdmUgYSBkaWN0CiAgICAgICAgICAgIGltcG9ydCBqc29uCiAgICAgICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0KSkgIyAtPiBFeGNlcHRpb246IFR5cGVFcnJvcjogLi4uIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZQogICAgICAgICAgICBwcmludChqc29uLmR1bXBzKHJlc3VsdC5hc0RpY3QoKSkpICMgLT4geyJtb250aCI6ICIzMSIsICJkYXkiOiAiMTk5OSIsICJ5ZWFyIjogIjEyIn0KICAgICAgICBjAQAAAAAAAAABAAAAAwAAABMAAABzNgAAAHQAfAB0AYMCci58AGoCgwByGnwAagODAFMAhwBmAWQBZAKECHwARACDAVMAbgR8AFMAZABTACkDTmMBAAAAAAAAAAIAAAAEAAAAEwAAAHMUAAAAZwB8AF0MfQGIAHwBgwGRAnEEUwByEgAAAHISAAAAKQJyFQAAAHISAQAAKQHaBnRvSXRlbXISAAAAchMAAAByFwAAAKwDAABzAgAAAAYAejdQYXJzZVJlc3VsdHMuYXNEaWN0Ljxsb2NhbHM+LnRvSXRlbS48bG9jYWxzPi48bGlzdGNvbXA+KQRymgAAAHI/AAAAcjABAADaBmFzRGljdCkBcqMAAAApAXJLAQAAchIAAAByEwAAAHJLAQAApwMAAHMKAAAAAAEKAQgBCAIUAnojUGFyc2VSZXN1bHRzLmFzRGljdC48bG9jYWxzPi50b0l0ZW1jAQAAAAAAAAADAAAABAAAADMAAABzHgAAAHwAXRZcAn0BfQJ8AYgAfAKDAWYCVgABAHECZABTACkBTnISAAAAKQNyFQAAAHIVAQAAchIBAAApAXJLAQAAchIAAAByEwAAAHKnAAAAsAMAAHMCAAAABAB6JlBhcnNlUmVzdWx0cy5hc0RpY3QuPGxvY2Fscz4uPGdlbmV4cHI+KQTaBFBZXzNyGwEAAHIvAQAAcgwBAAApAnLDAAAAWgdpdGVtX2ZuchIAAAApAXJLAQAAchMAAAByTAEAAI4DAABzCgAAAAAUBAEIAgYCDAl6E1BhcnNlUmVzdWx0cy5hc0RpY3RjAQAAAAAAAAACAAAAAgAAAEMAAABzPAAAAHQAfABqAYMBfQF0AnwAagNqBIMAgwF8AV8DfABqBXwBXwV8AWoGagd8AGoGgwEBAHwAagh8AV8IfAFTACkBekcKICAgICAgICBSZXR1cm5zIGEgbmV3IGNvcHkgb2YgYSA6Y2xhc3M6YFBhcnNlUmVzdWx0c2Agb2JqZWN0LgogICAgICAgICkJcj8AAAByCgEAAHIMAQAAcg0BAAByGwEAAHIFAQAAcgYBAAByQwEAAHIEAQAAKQJywwAAAHKkAAAAchIAAAByEgAAAHITAAAAcjwBAACyAwAAcwwAAAAABAoBEAEIAQ4BCAF6EVBhcnNlUmVzdWx0cy5jb3B5RmMFAAAAAAAAAA4AAAALAAAAQwAAAHNQAQAAZAF9BWcAfQZ0AGQCZAOEAHwAagFqAoMARACDAYMBfQd8A2QEFwB9CHwEczhkBX0DZAV9CGQFfQVkBn0JfAFkBmsJckp8AX0Jbgx8AGoDclZ8AGoDfQl8CXNmfAJyYmQFUwBkB30JfAZ8BXwDZAh8CWQJZwU3AH0GeLp0BHwAagWDAUQAXaxcAn0KfQt0BnwLdAeDAnLifAp8B2sGcsJ8BnwLagh8B3wKGQB8Am+0fAFkBmsIfAh8BIMEZwE3AH0Gbh58BnwLaghkBnwCb9R8AWQGawh8CHwEgwRnATcAfQZxhGQGfQx8CnwHawZy9nwHfAoZAH0MfAyQAXMKfAKQAXIGcYRuBGQHfQx0CXQKfAuDAYMBfQ18BnwFfAhkCHwMZAl8DWQKfAxkCWcJNwB9BnGEVwB8BnwFfANkCnwJZAlnBTcAfQZkBWoLfAaDAVMAKQt6hwogICAgICAgIChEZXByZWNhdGVkKSBSZXR1cm5zIHRoZSBwYXJzZSByZXN1bHRzIGFzIFhNTC4gVGFncyBhcmUgY3JlYXRlZCBmb3IgdG9rZW5zIGFuZCBsaXN0cyB0aGF0IGhhdmUgZGVmaW5lZCByZXN1bHRzIG5hbWVzLgogICAgICAgIHLhAAAAYwEAAAAAAAAABAAAAAQAAABzAAAAcygAAAB8AF0gXAJ9AX0CfAJEAF0SfQN8A2QAGQB8AWYCVgABAHEOcQJkAVMAKQJylAAAAE5yEgAAACkEchUAAAByFQEAAHJBAQAAchIBAAByEgAAAHISAAAAchMAAABypwAAAMMDAABzBAAAAAQABgF6JVBhcnNlUmVzdWx0cy5hc1hNTC48bG9jYWxzPi48Z2VuZXhwcj56AiAgcrIAAABOWgRJVEVN+gE8+gE+egI8LykMcgwBAAByDQEAAHIbAQAAcgQBAABy6QAAAHIKAQAAcpoAAAByPwAAANoFYXNYTUxyrwAAAHKlAAAActEAAAApDnLDAAAAWgZkb2N0YWdaDm5hbWVkSXRlbXNPbmx52gZpbmRlbnTaCWZvcm1hdHRlZNoCbmxySQEAAFoKbmFtZWRJdGVtc1oPbmV4dExldmVsSW5kZW50WgdzZWxmVGFncvIAAABySgEAAFoGcmVzVGFnWgt4bWxCb2R5VGV4dHISAAAAchIAAAByEwAAAHJQAQAAvQMAAHNUAAAAAAQEAQQBGAIIAwQBBAEEAQQCBAEIAQYCBgEGAgQBBAEEAgQCEgIUAQoBCAEMAQoBAgEMAggBCgECAQwDBAEIAQgBBgEGAQQCBAEMAQwBAgEQAhIBehJQYXJzZVJlc3VsdHMuYXNYTUxjAgAAAAAAAAAGAAAABAAAAEMAAABzOgAAAHg0fABqAGoBgwBEAF0mXAJ9An0DeBx8A0QAXRRcAn0EfQV8AXwEawhyGnwCUwBxGlcAcQxXAGQAUwApAU4pAnINAQAAchsBAAApBnLDAAAAchYBAAByFQEAAHJBAQAAchIBAAByvwAAAHISAAAAchIAAAByEwAAAFoIX19sb29rdXD6AwAAcwoAAAAAARQBDgEIAQwBehVQYXJzZVJlc3VsdHMuX19sb29rdXBjAQAAAAAAAAACAAAAAwAAAEMAAABzgAAAAHwAagByDHwAagBTAHwAagFyLnwAagGDAH0BfAFyKHwBagJ8AIMBUwBkAVMAbk50A3wAgwFkAmsCcnh0A3wAagSDAWQCawJyeHQFdAZ8AGoEageDAIMBgwFkAxkAZAIZAGQFawZyeHQFdAZ8AGoEagiDAIMBgwFTAGQBUwBkAVMAKQZhHQMAAAogICAgICAgIFJldHVybnMgdGhlIHJlc3VsdHMgbmFtZSBmb3IgdGhpcyB0b2tlbiBleHByZXNzaW9uLiBVc2VmdWwgd2hlbiBzZXZlcmFsCiAgICAgICAgZGlmZmVyZW50IGV4cHJlc3Npb25zIG1pZ2h0IG1hdGNoIGF0IGEgcGFydGljdWxhciBsb2NhdGlvbi4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgICAgICBzc25fZXhwciA9IFJlZ2V4KHIiXGRcZFxkLVxkXGQtXGRcZFxkXGQiKQogICAgICAgICAgICBob3VzZV9udW1iZXJfZXhwciA9IFN1cHByZXNzKCcjJykgKyBXb3JkKG51bXMsIGFscGhhbnVtcykKICAgICAgICAgICAgdXNlcl9kYXRhID0gKEdyb3VwKGhvdXNlX251bWJlcl9leHByKSgiaG91c2VfbnVtYmVyIikKICAgICAgICAgICAgICAgICAgICAgICAgfCBHcm91cChzc25fZXhwcikoInNzbiIpCiAgICAgICAgICAgICAgICAgICAgICAgIHwgR3JvdXAoaW50ZWdlcikoImFnZSIpKQogICAgICAgICAgICB1c2VyX2luZm8gPSBPbmVPck1vcmUodXNlcl9kYXRhKQoKICAgICAgICAgICAgcmVzdWx0ID0gdXNlcl9pbmZvLnBhcnNlU3RyaW5nKCIyMiAxMTEtMjItMzMzMyAjMjIxQiIpCiAgICAgICAgICAgIGZvciBpdGVtIGluIHJlc3VsdDoKICAgICAgICAgICAgICAgIHByaW50KGl0ZW0uZ2V0TmFtZSgpLCAnOicsIGl0ZW1bMF0pCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBhZ2UgOiAyMgogICAgICAgICAgICBzc24gOiAxMTEtMjItMzMzMwogICAgICAgICAgICBob3VzZV9udW1iZXIgOiAyMjFCCiAgICAgICAgTnKUAAAAcgEAAABylQAAACkCcgEAAABylQAAACkJcgQBAAByBQEAANoVX1BhcnNlUmVzdWx0c19fbG9va3Vwcs0AAAByDQEAANoE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c2VkIHJlc3VsdHMgYXMgYSBsaXN0LCB1c2luZyB0aGUKICAgICAgICBgcHByaW50IDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHByaW50Lmh0bWw+YF8gbW9kdWxlLgogICAgICAgIEFjY2VwdHMgYWRkaXRpb25hbCBwb3NpdGlvbmFsIG9yIGtleXdvcmQgYXJncyBhcyBkZWZpbmVkIGZvcgogICAgICAgIGBwcHJpbnQucHByaW50IDxodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvcHByaW50Lmh0bWwjcHByaW50LnBwcmludD5gXyAuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgaWRlbnQgPSBXb3JkKGFscGhhcywgYWxwaGFudW1zKQogICAgICAgICAgICBudW0gPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGZ1bmMgPSBGb3J3YXJkKCkKICAgICAgICAgICAgdGVybSA9IGlkZW50IHwgbnVtIHwgR3JvdXAoJygnICsgZnVuYyArICcpJykKICAgICAgICAgICAgZnVuYyA8PD0gaWRlbnQgKyBHcm91cChPcHRpb25hbChkZWxpbWl0ZWRMaXN0KHRlcm0pKSkKICAgICAgICAgICAgcmVzdWx0ID0gZnVuYy5wYXJzZVN0cmluZygiZm5hIGEsYiwoZm5iIGMsZCwyMDApLDEwMCIpCiAgICAgICAgICAgIHJlc3VsdC5wcHJpbnQod2lkdGg9NDApCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBbJ2ZuYScsCiAgICAgICAgICAgICBbJ2EnLAogICAgICAgICAgICAgICdiJywKICAgICAgICAgICAgICBbJygnLCAnZm5iJywgWydjJywgJ2QnLCAnMjAwJ10sICcpJ10sCiAgICAgICAgICAgICAgJzEwMCddXQogICAgICAgIE4pAtoGcHByaW50cgIBAAApA3LDAAAAcsIAAAByMgEAAHISAAAAchIAAAByEwAAAHJgAQAAagQAAHMCAAAAABl6E1BhcnNlUmVzdWx0cy5wcHJpbnRjAQAAAAAAAAABAAAABQAAAEMAAABzLgAAAHwAagB8AGoBagKDAHwAagNk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IGV4cHJlc3Npb24sIG1ha2VzIGRlYnVnZ2luZyBhbmQgZXhjZXB0aW9uIG1lc3NhZ2VzIGNsZWFyZXIuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgV29yZChudW1zKS5wYXJzZVN0cmluZygiQUJDIikgICMgLT4gRXhjZXB0aW9uOiBFeHBlY3RlZCBXOigwMTIzLi4uKSAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCiAgICAgICAgICAgIFdvcmQobnVtcykuc2V0TmFtZSgiaW50ZWdlciIpLnBhcnNlU3RyaW5nKCJBQkMiKSAgIyAtPiBFeGNlcHRpb246IEV4cGVjdGVkIGludGVnZXIgKGF0IGNoYXIgMCksIChsaW5lOjEsIGNvbDoxKQogICAgICAgIHoJRXhwZWN0ZWQgKQVyAQEAAHKhAQAAchgAAADaIWVuYWJsZV9kZWJ1Z19vbl9uYW1lZF9leHByZXNzaW9uc9oIc2V0RGVidWcpAnLDAAAAcgEBAAByEgAAAHISAAAAchMAAADaB3NldE5hbWWsBQAAcwoAAAAACQYBDAEGAQgBehVQYXJzZXJFbGVtZW50LnNldE5hbWVjAwAAAAAAAAADAAAAAwAAAEMAAABzDAAAAHwAagB8AXwCgwJTACkBYU8DAAAKICAgICAgICBEZWZpbmUgbmFtZSBmb3IgcmVmZXJlbmNpbmcgbWF0Y2hpbmcgdG9rZW5zIGFzIGEgbmVzdGVkIGF0dHJpYnV0ZQogICAgICAgIG9mIHRoZSByZXR1cm5lZCBwYXJzZSByZXN1bHRzLgogICAgICAgIE5PVEU6IHRoaXMgcmV0dXJucyBhICpjb3B5KiBvZiB0aGUgb3JpZ2luYWwgOmNsYXNzOmBQYXJzZXJFbGVtZW50YCBvYmplY3Q7CiAgICAgICAgdGhpcyBpcyBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIGRlZmluZSBhIGJhc2ljIGVsZW1lbnQsIHN1Y2ggYXMgYW4KICAgICAgICBpbnRlZ2VyLCBhbmQgcmVmZXJlbmNlIGl0IGluIG11bHRpcGxlIHBsYWNlcyB3aXRoIGRpZmZlcmVudCBuYW1lcy4KCiAgICAgICAgWW91IGNhbiBhbHNvIHNldCByZXN1bHRzIG5hbWVzIHVzaW5nIHRoZSBhYmJyZXZpYXRlZCBzeW50YXgsCiAgICAgICAgYGBleHByKCJuYW1lIilgYCBpbiBwbGFjZSBvZiBgYGV4cHIuc2V0UmVzdWx0c05hbWUoIm5hbWUiKWBgCiAgICAgICAgLSBzZWUgOmNsYXNzOmBfX2NhbGxfX2AuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgZGF0ZV9zdHIgPSAoaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgieWVhciIpICsgJy8nCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRSZXN1bHRzTmFtZSgibW9udGgiKSArICcvJwogICAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIuc2V0UmVzdWx0c05hbWUoImRheSIpKQoKICAgICAgICAgICAgIyBlcXVpdmFsZW50IGZvcm06CiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlcigieWVhciIpICsgJy8nICsgaW50ZWdlcigibW9udGgiKSArICcvJyArIGludGVnZXIoImRheSIpCiAgICAgICAgKQHaD19zZXRSZXN1bHRzTmFtZSkDcsMAAAByAQEAANoObGlzdEFsbE1hdGNoZXNyEgAAAHISAAAAchMAAADaDnNldFJlc3VsdHNOYW1luwUAAHMCAAAAABV6HFBhcnNlckVsZW1lbnQuc2V0UmVzdWx0c05hbWVjAwAAAAAAAAAEAAAAAwAAAEMAAABzNAAAAHwAagCDAH0DfAFqAWQBgwFyInwBZABkBIUCGQB9AWQDfQJ8AXwDXwJ8AgwAfANfA3wDUwApBU7aASpylAAAAFRylQAAACkEcjwBAADaCGVuZHN3aXRocpYBAAByogEAACkEcsMAAAByAQEAAHKrAQAAWgduZXdzZWxmchIAAAByEgAAAHITAAAAcqoBAADSBQAAcw4AAAAAAQgBCgEMAQQBBgEIAXodUGFyc2VyRWxlbWVudC5fc2V0UmVzdWx0c05hbWVUYwIAAAAAAAAAAwAAAAQAAAADAAAAc0AAAAB8AXImfABqAIkAZAWHAGYBZAJkA4QJfQKIAHwCXwF8AnwAXwBuFnQCfABqAGQEgwJyPHwAagBqAXwAXwB8AFMAKQZ6p01ldGhvZCB0byBpbnZva2UgdGhlIFB5dGhvbiBwZGIgZGVidWdnZXIgd2hlbiB0aGlzIGVsZW1lbnQgaXMKICAgICAgICAgICBhYm91dCB0byBiZSBwYXJzZWQuIFNldCBgYGJyZWFrRmxhZ2BgIHRvIFRydWUgdG8gZW5hYmxlLCBGYWxzZSB0bwogICAgICAgICAgIGRpc2FibGUuCiAgICAgICAgVGMEAAAAAAAAAAUAAAAFAAAAEwAAAHMeAAAAZAFkAGwAfQR8BGoBgwABAIgAfAB8AXwCfAODBFMAKQJOcgEAAAApAtoDcGRiWglzZXRfdHJhY2UpBXJvAQAAcr8AAADaCWRvQWN0aW9uc9oMY2FsbFByZVBhcnNlcq8BAAApAdoMX3BhcnNlTWV0aG9kchIAAAByEwAAANoHYnJlYWtlcuIFAABzBgAAAAABCAIIAXonUGFyc2VyRWxlbWVudC5zZXRCcmVhay48bG9jYWxzPi5icmVha2Vy2hRfb3JpZ2luYWxQYXJzZU1ldGhvZCkCVFQpA9oGX3BhcnNlcrQBAAByKAEAACkDcsMAAABaCWJyZWFrRmxhZ3KzAQAAchIAAAApAXKyAQAAchMAAADaCHNldEJyZWFr2wUAAHMQAAAAAAUEAQYBDgUGAQgCDAEKAXoWUGFyc2VyRWxlbWVudC5zZXRCcmVha2MBAAAAAAAAAAMAAAAFAAAATwAAAHNWAAAAdAB8AYMBZAFnAWsCchZnAHwAXwFuPHQCZAJkA4QAfAFEAIMBgwFzMHQDZASDAYIBdAB0BHQFdAB8AYMBgwKDAXwAXwF8AmoGZAVkBoMCfABfB3wAUwApB2GSBwAACiAgICAgICAgRGVmaW5lIG9uZSBvciBtb3JlIGFjdGlvbnMgdG8gcGVyZm9ybSB3aGVuIHN1Y2Nlc3NmdWxseSBtYXRjaGluZyBwYXJzZSBlbGVtZW50IGRlZmluaXRpb24uCiAgICAgICAgUGFyc2UgYWN0aW9uIGZuIGlzIGEgY2FsbGFibGUgbWV0aG9kIHdpdGggMC0zIGFyZ3VtZW50cywgY2FsbGVkIGFzIGBgZm4ocywgbG9jLCB0b2tzKWBgICwKICAgICAgICBgYGZuKGxvYywgdG9rcylgYCAsIGBgZm4odG9rcylgYCAsIG9yIGp1c3QgYGBmbigpYGAgLCB3aGVyZToKCiAgICAgICAgLSBzICAgPSB0aGUgb3JpZ2luYWwgc3RyaW5nIGJlaW5nIHBhcnNlZCAoc2VlIG5vdGUgYmVsb3cpCiAgICAgICAgLSBsb2MgPSB0aGUgbG9jYXRpb24gb2YgdGhlIG1hdGNoaW5nIHN1YnN0cmluZwogICAgICAgIC0gdG9rcyA9IGEgbGlzdCBvZiB0aGUgbWF0Y2hlZCB0b2tlbnMsIHBhY2thZ2VkIGFzIGEgOmNsYXNzOmBQYXJzZVJlc3VsdHNgIG9iamVjdAoKICAgICAgICBJZiB0aGUgZnVuY3Rpb25zIGluIGZucyBtb2RpZnkgdGhlIHRva2VucywgdGhleSBjYW4gcmV0dXJuIHRoZW0gYXMgdGhlIHJldHVybgogICAgICAgIHZhbHVlIGZyb20gZm4sIGFuZCB0aGUgbW9kaWZpZWQgbGlzdCBvZiB0b2tlbnMgd2lsbCByZXBsYWNlIHRoZSBvcmlnaW5hbC4KICAgICAgICBPdGhlcndpc2UsIGZuIGRvZXMgbm90IG5lZWQgdG8gcmV0dXJuIGFueSB2YWx1ZS4KCiAgICAgICAgSWYgTm9uZSBpcyBwYXNzZWQgYXMgdGhlIHBhcnNlIGFjdGlvbiwgYWxsIHByZXZpb3VzbHkgYWRkZWQgcGFyc2UgYWN0aW9ucyBmb3IgdGhpcwogICAgICAgIGV4cHJlc3Npb24gYXJlIGNsZWFyZWQuCgogICAgICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzOgogICAgICAgIC0gY2FsbER1cmluZ1RyeSA9IChkZWZhdWx0PSBgYEZhbHNlYGApIGluZGljYXRlIGlmIHBhcnNlIGFjdGlvbiBzaG91bGQgYmUgcnVuIGR1cmluZyBsb29rYWhlYWRzIGFuZCBhbHRlcm5hdGUgdGVzdGluZwoKICAgICAgICBOb3RlOiB0aGUgZGVmYXVsdCBwYXJzaW5nIGJlaGF2aW9yIGlzIHRvIGV4cGFuZCB0YWJzIGluIHRoZSBpbnB1dCBzdHJpbmcKICAgICAgICBiZWZvcmUgc3RhcnRpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy4gIFNlZSA6Y2xhc3M6YHBhcnNlU3RyaW5nIGZvciBtb3Jl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ZCB0byByZXR1cm4gYm9vbGVhbiBzdWNjZXNzL2ZhaWwgb2YgdGhlIGNvbmRpdGlvbi4KCiAgICAgICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHM6CiAgICAgICAgLSBtZXNzYWdlID0gZGVmaW5lIGEgY3VzdG9tIG1lc3NhZ2UgdG8gYmUgdXNlZCBpbiB0aGUgcmFpc2VkIGV4Y2VwdGlvbgogICAgICAgIC0gZmF0YWwgICA9IGlmIFRydWUsIHdpbGwgcmFpc2UgUGFyc2VGYXRhbEV4Y2VwdGlvbiB0byBzdG9wIHBhcnNpbmcgaW1tZWRpYXRlbHk7IG90aGVyd2lzZSB3aWxsIHJhaXNlIFBhcnNlRXhjZXB0aW9uCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykuc2V0UGFyc2VBY3Rpb24obGFtYmRhIHRva3M6IGludCh0b2tzWzBdKSkKICAgICAgICAgICAgeWVhcl9pbnQgPSBpbnRlZ2VyLmNvcHkoKQogICAgICAgICAgICB5ZWFyX2ludC5hZGRDb25kaXRpb24obGFtYmRhIHRva3M6IHRva3NbMF0gPj0gMjAwMCwgbWVzc2FnZT0iT25seSBzdXBwb3J0IHllYXJzIDIwMDAgYW5kIGxhdGVyIikKICAgICAgICAgICAgZGF0ZV9zdHIgPSB5ZWFyX2ludCArICcvJyArIGludGVnZXIgKyAnLycgKyBpbnRlZ2VyCgogICAgICAgICAgICByZXN1bHQgPSBkYXRlX3N0ci5wYXJzZVN0cmluZygiMTk5OS8xMi8zMSIpICAjIC0+IEV4Y2VwdGlvbjogT25seSBzdXBwb3J0IHllYXJzIDIwMDAgYW5kIGxhdGVyIChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKICAgICAgICByvQAAAHK+AAAARikCcr0AAAByvgAAAHKlAQAAKQVykwEAAHLkAAAAco8AAABy6wAAAHKlAQAAKQRywwAAAHK6AQAAcjIBAAByuQAAAHISAAAAchIAAAByEwAAANoMYWRkQ29uZGl0aW9uKQYAAHMKAAAAABIKARIBFgIUAXoaUGFyc2VyRWxlbWVudC5hZGRDb25kaXRpb25jAgAA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ICB0aGUgY2FjaGUgc2l6ZSB3aWxsIGJlIHVuYm91bmRlZDsgaWYgMCBpcyBwYXNzZWQsIHRoZSBjYWNoZSB3aWxsCiAgICAgICAgICAgICBiZSBlZmZlY3RpdmVseSBkaXNhYmxlZC4KCiAgICAgICAgICAgVGhpcyBzcGVlZHVwIG1heSBicmVhayBleGlzdGluZyBwcm9ncmFtcyB0aGF0IHVzZSBwYXJzZSBhY3Rpb25zIHRoYXQKICAgICAgICAgICBoYXZlIHNpZGUtZWZmZWN0cy4gIEZvciB0aGlzIHJlYXNvbiwgcGFja3JhdCBwYXJzaW5nIGlzIGRpc2FibGVkIHdoZW4KICAgICAgICAgICB5b3UgZmlyc3QgaW1wb3J0IHB5cGFyc2luZy4gIFRvIGFjdGl2YXRlIHRoZSBwYWNrcmF0IGZlYXR1cmUsIHlvdXIKICAgICAgICAgICBwcm9ncmFtIG11c3QgY2FsbCB0aGUgY2xhc3MgbWV0aG9kIDpjbGFzczpgUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0YC4KICAgICAgICAgICBGb3IgYmVzdCByZXN1bHRzLCBjYWxsIGBgZW5hYmxlUGFja3JhdCgpYGAgaW1tZWRpYXRlbHkgYWZ0ZXIKICAgICAgICAgICBpbXBvcnRpbmcgcHlwYXJzaW5nLgoKICAgICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgICAgIGZyb20gcGlwLl92ZW5kb3IgaW1wb3J0IHB5cGFyc2luZwogICAgICAgICAgICAgICBweXBhcnNpbmcuUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0KCkKICAgICAgICBUTikHckEAAADaD19wYWNrcmF0RW5hYmxlZHLQAQAActoBAABy1AEAAHLdAQAAcrUBAAApAVoQY2FjaGVfc2l6ZV9saW1pdHISAAAAchIAAAByEwAAANoNZW5hYmxlUGFja3JhdEoHAABzDAAAAAAbBgEGAQgBDAIMAXobUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0YwMAAAAAAAAACAAAABAAAABDAAAAc9AAAAB0AGoBgwABAHwAagJzFnwAagODAAEAeBZ8AGoERABdDH0DfANqA4MAAQBxHlcAfABqBXM8fAFqBoMAfQF5PHwAagd8AWQBgwJcAn0EfQV8AnJ2fABqCHwBfASDAn0EdAmDAHQKgwAXAH0GfAZqB3wBfASDAgEAVwBuTgQAdAtrCnLGAQB9BwEAejJ0AGoMcpSCAG4idA18B2QCZAODA2QDawlysnwAag58B2oPgwF8B18PfAeCAVcAWQBkA2QDfQd+B1gAbgZYAHwFUwBkA1MAKQRh+wUAAAogICAgICAgIEV4ZWN1dGUgdGhlIHBhcnNlIGV4cHJlc3Npb24gd2l0aCB0aGUgZ2l2ZW4gc3RyaW5nLgogICAgICAgIFRoaXMgaXMgdGhlIG1haW4gaW50ZXJmYWNlIHRvIHRoZSBjbGllbnQgY29kZSwgb25jZSB0aGUgY29tcGxldGUKICAgICAgICBleHByZXNzaW9uIGhhcyBiZWVuIGJ1aWx0LgoKICAgICAgICBSZXR1cm5zIHRoZSBwYXJzZWQgZGF0YSBhcyBhIDpjbGFzczpgUGFyc2VSZXN1bHRzYCBvYmplY3QsIHdoaWNoIG1heSBiZQogICAgICAgIGFjY2Vzc2VkIGFzIGEgbGlzdCwgb3IgYXMgYSBkaWN0IG9yIG9iamVjdCB3aXRoIGF0dHJpYnV0ZXMgaWYgdGhlIGdpdmVuIHBhcnNlcgogICAgICAgIGluY2x1ZGVzIHJlc3VsdHMgbmFtZXMuCgogICAgICAgIElmIHlvdSB3YW50IHRoZSBncmFtbWFyIHRvIHJlcXVpcmUgdGhhdCB0aGUgZW50aXJlIGlucHV0IHN0cmluZyBiZQogICAgICAgIHN1Y2Nlc3NmdWxseSBwYXJzZWQsIHRoZW4gc2V0IGBgcGFyc2VBbGxgYCB0byBUcnVlIChlcXVpdmFsZW50IHRvIGVuZGluZwogICAgICAgIHRoZSBncmFtbWFyIHdpdGggYGBTdHJpbmdFbmQoKWBgKS4KCiAgICAgICAgTm90ZTogYGBwYXJzZVN0cmluZ2BgIGltcGxpY2l0bHkgY2FsbHMgYGBleHBhbmR0YWJzKClgYCBvbiB0aGUgaW5wdXQgc3RyaW5nLAogICAgICAgIGluIG9yZGVyIHRvIHJlcG9ydCBwcm9wZXIgY29sdW1uIG51bWJlcnMgaW4gcGFyc2UgYWN0aW9ucy4KICAgICAgICBJZiB0aGUgaW5wdXQgc3RyaW5nIGNvbnRhaW5zIHRhYnMgYW5kCiAgICAgICAgdGhlIGdyYW1tYXIgdXNlcyBwYXJzZSBhY3Rpb25zIHRoYXQgdXNlIHRoZSBgYGxvY2BgIGFyZ3VtZW50IHRvIGluZGV4IGludG8gdGhlCiAgICAgICAgc3RyaW5nIGJlaW5nIHBhcnNlZCwgeW91IGNhbiBlbnN1cmUgeW91IGhhdmUgYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIGlucHV0CiAgICAgICAgc3RyaW5nIGJ5OgoKICAgICAgICAtIGNhbGxpbmcgYGBwYXJzZVdpdGhUYWJzYGAgb24geW91ciBncmFtbWFyIGJlZm9yZSBjYWxsaW5nIGBgcGFyc2VTdHJpbmdgYAogICAgICAgICAgKHNlZSA6Y2xhc3M6YHBhcnNlV2l0aFRhYnNgKQogICAgICAgIC0gZGVmaW5lIHlvdXIgcGFyc2UgYWN0aW9uIHVzaW5nIHRoZSBmdWxsIGBgKHMsIGxvYywgdG9rcylgYCBzaWduYXR1cmUsIGFuZAogICAgICAgICAgcmVmZXJlbmNlIHRoZSBpbnB1dCBzdHJpbmcgdXNpbmcgdGhlIHBhcnNlIGFjdGlvbidzIGBgc2BgIGFyZ3VtZW50CiAgICAgICAgLSBleHBsaWN0bHkgZXhwYW5kIHRoZSB0YWJzIGluIHlvdXIgaW5wdXQgc3RyaW5nIGJlZm9yZSBjYWxsaW5nCiAgICAgICAgICBgYHBhcnNlU3RyaW5nYGAKCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBXb3JkKCdhJykucGFyc2VTdHJpbmcoJ2FhYWFhYmFhYScpICAjIC0+IFsnYWFhYWEnXQogICAgICAgICAgICBXb3JkKCdhJykucGFyc2VTdHJpbmcoJ2FhYWFhYmFhYScsIHBhcnNlQWxsPVRydWUpICAjIC0+IEV4Y2VwdGlvbjogRXhwZWN0ZWQgZW5kIG9mIHRleHQKICAgICAgICByAQAAAHLnAAAATikQckEAAABy3gEAAHKfAQAA2gpzdHJlYW1saW5lcp0BAABynAEAANoKZXhwYW5kdGFic3K1AQAAcsIBAAByKQAAAHJGAAAAcjoAAADaEnZlcmJvc2Vfc3RhY2t0cmFjZXKJAQAAcpIBAABy5wAAACkIcsMAAABybwEAANoIcGFyc2VBbGxyvgEAAHK/AAAAcscBAABaAnNlcu8AAAByEgAAAHISAAAAchMAAADaC3BhcnNlU3RyaW5nbQcAAHMoAAAAACEIAQYBCAIMAQwBBgEIAQIBEAEEAQwBDAEQARABBgEEAxABDgEWAnoZUGFyc2VyRWxlbWVudC5wYXJzZVN0cmluZ2MEAAAAAAAAAA8AAAARAAAAYwAAAHNgAQAAfABqAHMOfABqAYMAAQB4FnwAagJEAF0MfQR8BGoBgwABAHEWVwB8AGoDczh0BHwBgwFqBYMAfQF0BnwBgwF9BWQBfQZ8AGoHfQd8AGoIfQh0CWoKgwABAGQBfQl5qnikfAZ8BWsBb258CXwCawCQAXICeSB8B3wBfAaDAn0KfAh8AXwKZAJkA40DXAJ9C30MVwBuHAQAdAtrCnKuAQABAAEAfApkBBcAfQZZAHFgWAB8C3wGawRy+HwJZAQ3AH0JfAx8CnwLZgNWAAEAfANy8nwHfAF8BoMCfQ18DXwGawRy6HwLfQZx9nwGZAQ3AH0GbgR8C30GcWB8CmQEFwB9BnFgVwBXAG5UBAB0DGsKkAFyWgEAfQ4BAHo2dAlqDZABciaCAG4kdA58DmQFZAaDA2QGawmQAXJGfABqD3wOahCDAXwOXxB8DoIBVwBZAGQGZAZ9Dn4OWABuAlgAZAZTACkHYXEEAAAKICAgICAgICBTY2FuIHRoZSBpbnB1dCBzdHJpbmcgZm9yIGV4cHJlc3Npb24gbWF0Y2hlcy4gIEVhY2ggbWF0Y2ggd2lsbCByZXR1cm4gdGhlCiAgICAgICAgbWF0Y2hpbmcgdG9rZW5zLCBzdGFydCBsb2NhdGlvbiwgYW5kIGVuZCBsb2NhdGlvbi4gIE1heSBiZSBjYWxsZWQgd2l0aCBvcHRpb25hbAogICAgICAgIGBgbWF4TWF0Y2hlc2BgIGFyZ3VtZW50LCB0byBjbGlwIHNjYW5uaW5nIGFmdGVyICduJyBtYXRjaGVzIGFyZSBmb3VuZC4gIElmCiAgICAgICAgYGBvdmVybGFwYGAgaXMgc3BlY2lmaWVkLCB0aGVuIG92ZXJsYXBwaW5nIG1hdGNoZXMgd2lsbCBiZSByZXBvcnRlZC4KCiAgICAgICAgTm90ZSB0aGF0IHRoZSBzdGFydCBhbmQgZW5kIGxvY2F0aW9ucyBhcmUgcmVwb3J0ZWQgcmVsYXRpdmUgdG8gdGhlIHN0cmluZwogICAgICAgIGJlaW5nIHBhcnNlZC4gIFNlZSA6Y2xhc3M6YHBhcnNlU3RyaW5nYCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBwYXJzaW5nCiAgICAgICAgc3RyaW5ncyB3aXRoIGVtYmVkZGVkIHRhYnMuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgc291cmNlID0gInNsZGpmMTIzbHNkamprZjM0NXNsZGtqZjg3OWxranNmZDk4NyIKICAgICAgICAgICAgcHJpbnQoc291cmNlKQogICAgICAgICAgICBmb3IgdG9rZW5zLCBzdGFydCwgZW5kIGluIFdvcmQoYWxwaGFzKS5zY2FuU3RyaW5nKHNvdXJjZSk6CiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyAnXicqKGVuZC1zdGFydCkpCiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyB0b2tlbnNbMF0pCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBzbGRqZjEyM2xzZGpqa2YzNDVzbGRramY4Nzlsa2pzZmQ5ODcKICAgICAgICAgICAgXl5eXl4KICAgICAgICAgICAgc2xkamYKICAgICAgICAgICAgICAgICAgICBeXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgbHNkamprZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xka2pmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsa2pzZmQKICAgICAgICByAQAAAEYpAXKxAQAAcpQAAABy5wAAAE4pEXKfAQAAcuIBAABynQEAAHKcAQAAcqUAAABy4wEAAHLNAAAAcsIBAABytQEAAHJBAAAAct4BAAByPAAAAHI6AAAAcuQBAAByiQEAAHKSAQAAcucAAAApD3LD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AAQAAAAQAAAAQwAAAHNuAAAAeRp0AGQBZAKEAHwAagF8AXwCgwJEAIMBgwFTAAQAdAJrCnJoAQB9AwEAejJ0A2oEcjaCAG4idAV8A2QDZASDA2QEawlyVHwAagZ8A2oHgwF8A18HfAOCAVcAWQBkBGQEfQN+A1gAbgJYAGQEUwApBWGgAwAACiAgICAgICAgQW5vdGhlciBleHRlbnNpb24gdG8gOmNsYXNzOmBzY2FuU3RyaW5nYCwgc2ltcGxpZnlpbmcgdGhlIGFjY2VzcyB0byB0aGUgdG9rZW5zIGZvdW5kCiAgICAgICAgdG8gbWF0Y2ggdGhlIGdpdmVuIHBhcnNlIGV4cHJlc3Npb24uICBNYXkgYmUgY2FsbGVkIHdpdGggb3B0aW9uYWwKICAgICAgICBgYG1heE1hdGNoZXNgYCBhcmd1bWVudCwgdG8gY2xpcCBzZWFyY2hpbmcgYWZ0ZXIgJ24nIG1hdGNoZXMgYXJlIGZvdW5kLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgICMgYSBjYXBpdGFsaXplZCB3b3JkIHN0YXJ0cyB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBsb3dlcmNhc2UgbGV0dGVycwogICAgICAgICAgICBjYXBfd29yZCA9IFdvcmQoYWxwaGFzLnVwcGVyKCksIGFscGhhcy5sb3dlcigpKQoKICAgICAgICAgICAgcHJpbnQoY2FwX3dvcmQuc2VhcmNoU3RyaW5nKCJNb3JlIHRoYW4gSXJvbiwgbW9yZSB0aGFuIExlYWQsIG1vcmUgdGhhbiBHb2xkIEkgbmVlZCBFbGVjdHJpY2l0eSIpKQoKICAgICAgICAgICAgIyB0aGUgc3VtKCkgYnVpbHRpbiBjYW4gYmUgdXNlZCB0byBtZXJnZSByZXN1bHRzIGludG8gYSBzaW5nbGUgUGFyc2VSZXN1bHRzIG9iamVjdAogICAgICAgICAgICBwcmludChzdW0oY2FwX3dvcmQuc2VhcmNoU3RyaW5nKCJNb3JlIHRoYW4gSXJvbiwgbW9yZSB0aGFuIExlYWQsIG1vcmUgdGhhbiBHb2xkIEkgbmVlZCBFbGVjdHJpY2l0eSIpKSkKCiAgICAg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cykuc2V0TmFtZSgibnVtd29yZCIpCiAgICAgICAgICAgIHRlcm0gPSB3ZCB8IGludGVnZXIKCiAgICAgICAgICAgICMgdHVybiBvbiBkZWJ1Z2dpbmcgZm9yIHdkCiAgICAgICAgICAgIHdkLnNldERlYnVnKCkKCiAgICAgICAgICAgIE9uZU9yTW9yZSh0ZXJtKS5wYXJzZVN0cmluZygiYWJjIDEyMyB4eXogODkwIikKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMCgxLDEpCiAgICAgICAgICAgIE1hdGNoZWQgYWxwaGF3b3JkIC0+IFsnYWJjJ10KICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAzKDEsNCkKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgNCksIChsaW5lOjEsIGNvbDo1KQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDcoMSw4KQogICAgICAgICAgICBNYXRjaGVkIGFscGhhd29yZCAtPiBbJ3h5eiddCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMTEoMSwxMikKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgMTIpLCAobGluZToxLCBjb2w6MTMpCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgMTUoMSwxNikKICAgICAgICAgICAgRXhjZXB0aW9uIHJhaXNlZDpFeHBlY3RlZCBhbHBoYXdvcmQgKGF0IGNoYXIgMTUpLCAobGluZToxLCBjb2w6MTYpCgogICAgICAgIFRoZSBvdXRwdXQgc2hvd24gaXMgdGhhdCBwcm9kdWNlZCBieSB0aGUgZGVmYXVsdCBkZWJ1ZyBhY3Rpb25zIC0gY3VzdG9tIGRlYnVnIGFjdGlvbnMgY2FuIGJlCiAgICAgICAgc3BlY2lmaWVkIHVzaW5nIDpjbGFzczpgc2V0RGVidWdBY3Rpb25zYC4gUHJpb3IgdG8gYXR0ZW1wdGlu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FwB8ExcAgwEBAG4YfBBqEWQKfBJqGRQAZAwXAHwTFwCDAQEAfBBqEWQNdAR8EoMBFwCDAQEAfAyQAW+IfAZ9DHwSfRFXAFkAZAFkAX0SfhJYAJABbhQEAHQbawqQAXLiAQB9FAEAeiZ8EGoRZA50BHwUgwEXAIMBAQB8DJABb8x8Bn0MfBR9EVcAWQBkAWQBfRR+FFgAbtJYAHwMkAFv7nwGDAB9DHwHZAFrCZACcqJ5UnwHfA98EYMCfRV8FWQBawmQAnI8dAB8FXQcgwKQAnIsfBBqEXwVah2DAIMBAQBuDnwQahF0BHwVgwGDAQEAbg58EGoRfBFqHYMAgwEBAFcAblIEAHQbawqQAnKeAQB9FgEAejR8EGoRfBFqHXwEZA+NAYMBAQB8EGoRZBBqHnwHah90IHwWgwFqH3wWgwODAQEAVwBZAGQBZAF9Fn4WWABuAlgAbhJ8EGoRfBFqHXwEZA+NAYMBAQB8BZACcth8BJACcsp8EGoRZAeDAQEAfAlkBGoSfBCDAYMBAQB8CmoRfA98EWYCgwEBAHF4VwB8DHwKZgJTACkRYXMNAAAKICAgICAgICBFeGVjdXRlIHRoZSBwYXJzZSBleHByZXNzaW9uIG9uIGEgc2VyaWVzIG9mIHRlc3Qgc3RyaW5ncywgc2hvd2luZyBlYWNoCiAgICAgICAgdGVzdCwgdGhlIHBhcnNlZCByZXN1bHRzIG9yIHdoZXJlIHRoZSBwYXJzZSBmYWlsZWQuIFF1aWNrIGFuZCBlYXN5IHdheSB0bwogICAgICAgIHJ1biBhIHBhcnNlIGV4cHJlc3Npb24gYWdhaW5zdCBhIGxpc3Qgb2Ygc2FtcGxlIHN0cmluZ3MuCgogICAgICAgIFBhcmFtZXRlcnM6CiAgICAgICAgIC0gdGVzdHMgLSBhIGxpc3Qgb2Ygc2VwYXJhdGUgdGVzdCBzdHJpbmdzLCBvciBhIG11bHRpbGluZSBzdHJpbmcgb2YgdGVzdCBzdHJpbmdzCiAgICAgICAgIC0gcGFyc2VBbGwgLSAoZGVmYXVsdD0gYGBUcnVlYGApIC0gZmxhZyB0byBwYXNzIHRvIDpjbGFzczpgcGFyc2VTdHJpbmdgIHdoZW4gcnVubmluZyB0ZXN0cwogICAgICAgICAtIGNvbW1lbnQgLSAoZGVmYXVsdD0gYGAnIydgYCkgLSBleHByZXNzaW9uIGZvciBpbmRpY2F0aW5nIGVtYmVkZGVkIGNvbW1lbnRzIGluIHRoZSB0ZXN0CiAgICAgICAgICAgICAgc3RyaW5nOyBwYXNzIE5vbmUgdG8gZGlzYWJsZSBjb21tZW50IGZpbHRlcmluZwogICAgICAgICAtIGZ1bGxEdW1wIC0gKGRlZmF1bHQ9IGBgVHJ1ZWBgKSAtIGR1bXAgcmVzdWx0cyBhcyBsaXN0IGZvbGxvd2VkIGJ5IHJlc3VsdHMgbmFtZXMgaW4gbmVzdGVkIG91dGxpbmU7CiAgICAgICAgICAgICAgaWYgRmFsc2UsIG9ubHkgZHVtcCBuZXN0ZWQgbGlzdAogICAgICAgICAtIHByaW50UmVzdWx0cyAtIChkZWZhdWx0PSBgYFRydWVgYCkgcHJpbnRzIHRlc3Qgb3V0cHV0IHRvIHN0ZG91dAogICAgICAgICAtIGZhaWx1cmVUZXN0cyAtIChkZWZhdWx0PSBgYEZhbHNlYGApIGluZGljYXRlcyBpZiB0aGVzZSB0ZXN0cyBhcmUgZXhwZWN0ZWQgdG8gZmFpbCBwYXJzaW5nCiAgICAgICAgIC0gcG9zdFBhcnNlIC0gKGRlZmF1bHQ9IGBgTm9uZWBgKSBvcHRpb25hbCBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBwYXJzZSByZXN1bHRzOyBjYWxsZWQgYXMKICAgICAgICAgICAgICBgZm4odGVzdF9zdHJpbmcsIHBhcnNlX3Jlc3VsdHMpYCBhbmQgcmV0dXJucyBhIHN0cmluZyB0byBiZSBhZGRlZCB0byB0aGUgdGVzdCBvdXRwdXQKICAgICAgICAgLSBmaWxlIC0gKGRlZmF1bHQ9YGBOb25lYGApIG9wdGlvbmFsIGZpbGUtbGlrZSBvYmplY3QgdG8gd2hpY2ggdGVzdCBvdXRwdXQgd2lsbCBiZSB3cml0dGVuOwogICAgICAgICAgICAgIGlmIE5vbmUsIHdpbGwgZGVmYXVsdCB0byBgYHN5cy5zdGRvdXRgYAoKICAgICAgICBSZXR1cm5zOiBhIChzdWNjZXNzLCByZXN1bHRzKSB0dXBsZSwgd2hlcmUgc3VjY2VzcyBpbmRpY2F0ZXMgdGhhdCBhbGwgdGVzdHMgc3VjY2VlZGVkCiAgICAgICAgKG9yIGZhaWxlZCBpZiBgYGZhaWx1cmVUZXN0c2BgIGlzIFRydWUpLCBhbmQgdGhlIHJlc3VsdHMgY29udGFpbiBhIGxpc3Qgb2YgbGluZXMgb2YgZWFjaAogICAgICAgIHRlc3QncyBvdXRwdXQKCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBudW1iZXJfZXhwciA9IHB5cGFyc2luZ19jb21tb24ubnVtYmVyLmNvcHkoKQoKICAgICAgICAgICAgcmVzdWx0ID0gbnVtYmVyX2V4cHIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgICAgIDEwMAogICAgICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgICAgICcnJykKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKCiAgICAgICAgICAgIHJlc3VsdCA9IG51bWJlcl9leHByLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAgICAgIyBzdHJheSBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgIDEwMFoKICAgICAgICAgICAgICAgICMgbWlzc2luZyBsZWFkaW5nIGRpZ2l0IGJlZm9yZSAnLicKICAgICAgICAgICAgICAgIC0uMTAwCiAgICAgICAgICAgICAgICAjIHRvbyBtYW55ICcuJwogICAgICAgICAgICAgICAgMy4xNC4xNTkKICAgICAgICAgICAgICAgICcnJywgZmFpbHVyZVRlc3RzPVRydWUpCiAgICAgICAgICAgIHByaW50KCJTdWNjZXNzIiBpZiByZXN1bHRbMF0gZWxzZSAiRmFpbGVkISIpCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIFsxMDBdCgogICAgICAgICAgICAjIG5lZ2F0aXZlIGludGVnZXIKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICBbLTEwMF0KCiAgICAgICAgICAgICMgZmxvYXQgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgIDYuMDJlMjMKICAgICAgICAgICAgWzYuMDJlKzIzXQoKICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICBbMWUtMTJdCgogICAgICAgICAgICBTdWNjZXNzCgogICAgICAgICAgICAjIHN0cmF5IGNoYXJhY3RlcgogICAgICAgICAgICAxMDBaCiAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgMyksIChsaW5lOjEsIGNvbDo0KQoKICAgICAgICAgICAgIyBtaXNzaW5nIGxlYWRpbmcgZGlnaXQgYmVmb3JlICcuJwogICAgICAgICAgICAtLjEwMAogICAgICAgICAgICBeCiAgICAgICAgICAgIEZBSUw6IEV4cGVjdGVkIHtyZWFsIG51bWJlciB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24gfCByZWFsIG51bWJlciB8IHNpZ25lZCBpbnRlZ2VyfSAoYXQgY2hhciAwKSwgKGxpbmU6MSwgY29sOjEpCgogICAgICAgICAgICAjIHRvbyBtYW55ICcuJwogICAgICAgICAgICAzLjE0LjE1OQogICAgICAgICAgICAgICAgXgogICAgICAgICAgICBGQUlMOiBFeHBlY3RlZCBlbmQgb2YgdGV4dCAoYXQgY2hhciA0KSwgKGxpbmU6MSwgY29sOjUpCgogICAgICAgICAgICBTdWNjZXNzCgogICAgICAgIEVhY2ggdGVzdCBzdHJpbmcgbXVzdCBiZSBvbiBhIHNp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AVoFhwAEAFoGUwApCnKKAAAAYZwFAABBIHZhcmlhdGlvbiBvbiA6Y2xhc3M6YExpdGVyYWxgIHdoaWNoIG1hdGNoZXMgImNsb3NlIiBtYXRjaGVzLAogICAgdGhhdCBpcywgc3RyaW5ncyB3aXRoIGF0IG1vc3QgJ24nIG1pc21hdGNoaW5nIGNoYXJhY3RlcnMuCiAgICA6Y2xhc3M6YENsb3NlTWF0Y2hgIHRha2VzIHBhcmFtZXRlcnM6CgogICAgIC0gYGBtYXRjaF9zdHJpbmdgYCAtIHN0cmluZyB0byBiZSBtYXRjaGVkCiAgICAgLSBgYG1heE1pc21hdGNoZXNgYCAtIChgYGRlZmF1bHQ9MWBgKSBtYXhpbXVtIG51bWJlciBvZgogICAgICAgbWlzbWF0Y2hlcyBhbGxvd2VkIHRvIGNvdW50IGFzIGEgbWF0Y2gKCiAgICBUaGUgcmVzdWx0cyBmcm9tIGEgc3VjY2Vzc2Z1bCBwYXJzZSB3aWxsIGNvbnRhaW4gdGhlIG1hdGNoZWQgdGV4dAogICAgZnJvbSB0aGUgaW5wdXQgc3RyaW5nIGFuZCB0aGUgZm9sbG93aW5nIG5hbWVkIHJlc3VsdHM6CgogICAgIC0gYGBtaXNtYXRjaGVzYGAgLSBhIGxpc3Qgb2YgdGhlIHBvc2l0aW9ucyB3aXRoaW4gdGhlCiAgICAgICBtYXRjaF9zdHJpbmcgd2hlcmUgbWlzbWF0Y2hlcyB3ZXJlIGZvdW5kCiAgICAgLSBgYG9yaWdpbmFsYGAgLSB0aGUgb3JpZ2luYWwgbWF0Y2hfc3RyaW5nIHVzZWQgdG8gY29tcGFyZQogICAgICAgYWdhaW5zdCB0aGUgaW5wdXQgc3RyaW5nCgogICAgSWYgYGBtaXNtYXRjaGVzYGAgaXMgYW4gZW1wdHkgbGlzdCwgdGhlbiB0aGUgbWF0Y2ggd2FzIGFuIGV4YWN0CiAgICBtYXRjaC4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgcGF0dCA9IENsb3NlTWF0Y2goIkFUQ0FUQ0dBQVRHR0EiKQogICAgICAgIHBhdHQucGFyc2VTdHJpbmcoIkFUQ0FUQ0dBQVhHR0EiKSAjIC0+IChbJ0FUQ0FUQ0dBQVhHR0EnXSwgeydtaXNtYXRjaGVzJzog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ICBtYXhpbXVtLCBhbmQvb3IgZXhhY3QgbGVuZ3RoLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIGBgbWluYGAgaXMKICAgIDEgKGEgbWluaW11bSB2YWx1ZSA8IDEgaXMgbm90IHZhbGlkKTsgdGhlIGRlZmF1bHQgdmFsdWVzIGZvcgogICAgYGBtYXhgYCBhbmQgYGBleGFjdGBgIGFyZSAwLCBtZWFuaW5nIG5vIG1heGltdW0gb3IgZXhhY3QKICAgIGxlbmd0aCByZXN0cmljdGlvbi4gQW4gb3B0aW9uYWwgYGBleGNsdWRlQ2hhcnNgYCBwYXJhbWV0ZXIgY2FuCiAgICBsaXN0IGNoYXJhY3RlcnMgdGhhdCBtaWdodCBiZSBmb3VuZCBpbiB0aGUgaW5wdXQgYGBib2R5Q2hhcnNgYAogICAgc3RyaW5nOyB1c2VmdWwgdG8gZGVmaW5lIGEgd29yZCBvZiBhbGwgcHJpbnRhYmxlcyBleGNlcHQgZm9yIG9uZSBvcgogICAgdHdvIGNoYXJhY3RlcnMsIGZvciBpbnN0YW5jZS4KCiAgICA6Y2xhc3M6YHNyYW5nZWAgaXMgdXNlZnVsIGZvciBkZWZpbmluZyBjdXN0b20gY2hhcmFjdGVyIHNldCBzdHJpbmdzCiAgICBmb3IgZGVmaW5pbmcgYGBXb3JkYGAgZXhwcmVzc2lvbnMsIHVzaW5nIHJhbmdlIG5vdGF0aW9uIGZyb20KICAgIHJlZ3VsYXIgZXhwcmVzc2lvbiBjaGFyYWN0ZXIgc2V0cy4KCiAgICBBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHVzZSA6Y2xhc3M6YFdvcmRgIHRvIG1hdGNoIGEgc3BlY2lmaWMgbGl0ZXJhbAogICAgc3RyaW5nLCBhcyBpbiBgYFdvcmQoIkFkZHJlc3MiKWBgLiBSZW1lbWJlciB0aGF0IDpjbGFzczpgV29yZGAKICAgIHVzZXMgdGhlIHN0cmluZyBhcmd1bWVudCB0byBkZWZpbmUgKnNldHMqIG9mIG1hdGNoYWJsZSBjaGFyYWN0ZXJzLgogICAgVGhpcyBleHByZXNzaW9uIHdvdWxkIG1hdGNoICJBZGQiLCAiQUFBIiwgImRBcmVkIiwgb3IgYW55IG90aGVyIHdvcmQKICAgIG1hZGUgdXAgb2YgdGhlIGNoYXJhY3RlcnMgJ0EnLCAnZCcsICdyJywgJ2UnLCBhbmQgJ3MnLiBUbyBtYXRjaCBhbgogICAgZXhhY3QgbGl0ZXJhbCBzdHJpbmcsIHVzZSA6Y2xhc3M6YExpdGVyYWxgIG9yIDpjbGFzczpgS2V5d29yZGAuCgogICAgcHlwYXJzaW5nIGluY2x1ZGVzIGhlbHBlciBzdHJpbmdzIGZvciBidWlsZGluZyBXb3JkczoKCiAgICAgLSA6Y2xhc3M6YGFscGhhc2AKICAgICAtIDpjbGFzczpgbnVtc2AKICAgICAtIDpjbGFzczpgYWxwaGFudW1zYAogICAgIC0gOmNsYXNzOmBoZXhudW1zYAogICAgIC0gOmNsYXNzOmBhbHBoYXM4Yml0YCAoYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIGluIEFTQ0lJIHJhbmdlIDEyOC0yNTUKICAgICAgIC0gYWNjZW50ZWQsIHRpbGRlZCwgdW1sYXV0ZWQsIGV0Yy4pCiAgICAgLSA6Y2xhc3M6YHB1bmM4Yml0YCAobm9uLWFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZQogICAgICAgMTI4LTI1NSAtIGN1cnJlbmN5LCBzeW1ib2xzLCBzdXBlcnNjcmlwdHMsIGRpYWNyaXRpY2FscywgZXRjLikKICAgICAtIDpjbGFzczpgcHJpbnRhYmxlc2AgKGFueSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIpCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgYSB3b3JkIGNvbXBvc2VkIG9mIGRpZ2l0cwogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpICMgZXF1aXZhbGVudCB0byBXb3JkKCIwMTIzNDU2Nzg5Iikgb3IgV29yZChzcmFuZ2UoIjAtOSIpKQoKICAgICAgICAjIGEgd29yZCB3aXRoIGEgbGVhZGluZyBjYXBpdGFsLCBhbmQgemVybyBvciBtb3JlIGxvd2VyY2FzZQogICAgICAgIGNhcGl0YWxfd29yZCA9IFdvcmQoYWxwaGFzLnVwcGVyKCksIGFscGhhcy5sb3dlcigpKQoKICAgICAgICAjIGhvc3RuYW1lcyBhcmUgYWxwaGFudW1l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AAAAAAAAAAAGAAAAAAAAAHM4AAAAZQBaAWQAWgJkAVoDZAuHAGYBZAVkBoQJWgRkDGQHZAiEAVoFhwBmAWQJZAqECFoGhwAEAFoHUwApDXJCAAAAYSYGAAAKICAgIFRva2VuIGZvciBtYXRjaGluZyBzdHJpbmdzIHRoYXQgYXJlIGRlbGltaXRlZCBieSBxdW90aW5nIGNoYXJhY3RlcnMuCgogICAgRGVmaW5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKCiAgICAgICAgLSBxdW90ZUNoYXIgLSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgY2hhcmFjdGVycyBkZWZpbmluZyB0aGUKICAgICAgICAgIHF1b3RlIGRlbGltaXRpbmcgc3RyaW5nCiAgICAgICAgLSBlc2NDaGFyIC0gY2hhcmFjdGVyIHRvIGVzY2FwZSBxdW90ZXMsIHR5cGljYWxseSBiYWNrc2xhc2gKICAgICAgICAgIChkZWZhdWx0PSBgYE5vbmVgYCkKICAgICAgICAtIGVzY1F1b3RlIC0gc3BlY2lhbCBxdW90ZSBzZXF1ZW5jZSB0byBlc2NhcGUgYW4gZW1iZWRkZWQgcXVvdGUKICAgICAgICAgIHN0cmluZyAoc3VjaCBhcyBTUUwncyBgYCIiYGAgdG8gZXNjYXBlIGFuIGVtYmVkZGVkIGBgImBgKQogICAgICAgICAgKGRlZmF1bHQ9IGBgTm9uZWBgKQogICAgICAgIC0gbXVsdGlsaW5lIC0gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgcXVvdGVzIGNhbiBzcGFuCiAgICAgICAgICBtdWx0aXBsZSBsaW5lcyAoZGVmYXVsdD0gYGBGYWxzZWBgKQogICAgICAgIC0gdW5xdW90ZVJlc3VsdHMgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbWF0Y2hlZCB0ZXh0CiAgICAgICAgICBzaG91bGQgYmUgdW5xdW90ZWQgKGRlZmF1bHQ9IGBgVHJ1ZWBgKQogICAgICAgIC0gZW5kUXVvdGVDaGFyIC0gc3RyaW5nIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgZGVmaW5pbmcgdGhlCiAgICAgICAgICBlbmQgb2YgdGhl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HoQJWgVkI2QgZCGEAVoGhwAEAFoHUwApJHJLAAAAYZkBAABTcGVjaWFsIG1hdGNoaW5nIGNsYXNzIGZvciBtYXRjaGluZyB3aGl0ZXNwYWNlLiAgTm9ybWFsbHksCiAgICB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQgYnkgcHlwYXJzaW5nIGdyYW1tYXJzLiAgVGhpcyBjbGFzcyBpcyBpbmNsdWRlZAogICAgd2hlbiBzb21lIHdoaXRlc3BhY2Ugc3RydWN0dXJlcyBhcmUgc2lnbmlmaWNhbnQuICBEZWZpbmUgd2l0aAogICAgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRvIGJlIG1hdGNoZWQ7IGRlZmF1bHQKICAgIGlzIGBgIiBcdFxyXG4iYGAuICBBbHNvIHRha2VzIG9wdGlvbmFsIGBgbWluYGAsCiAgICBgYG1heGBgLCBhbmQgYGBleGFjdGBgIGFyZ3VtZW50cywgYXMgZGVmaW5lZCBmb3IgdGhlCiAgICA6Y2xhc3M6YFdvcmRgIGNsYXNzLgogICAgegQ8U1A+egU8VEFCPnoEPExGPnoEPENSPnoEPEZGPnoGPE5CU1A+ehI8T0dIQU1fU1BBQ0VfTUFSSz56GzxNT05HT0xJQU5fVk9XRUxfU0VQQVJBVE9SPnoJPEVOX1FVQUQ+egk8RU1fUVVBRD56CjxFTl9TUEFDRT56CjxFTV9TUEFDRT56FDxUSFJFRS1QRVItRU1fU1BBQ0U+ehM8Rk9VUi1QRVItRU1fU1BBQ0U+ehI8U0lYLVBFUi1FTV9TUEFDRT56DjxGSUdVUkVfU1BBQ0U+ehM8UFVOQ1RVQVRJT05fU1BBQ0U+egw8VEhJTl9TUEFDRT56DDxIQUlSX1NQQUNFPnoSPFpFUk9fV0lEVEhfU1BBQ0U+egc8Tk5CU1A+egY8TU1TUD56EzxJREVPR1JBUEhJQ19TUEFDRT4pF3LaAAAAcncCAABy4QAAAHJ5AgAAcngCAAD1AgAAAMKgdQMAAADhmoB1AwAAAOGgjnUDAAAA4oCAdQMAAADigIF1AwAAAOKAgnUDAAAA4oCDdQMAAADigIR1AwAAAOKAhXUDAAAA4oCGdQMAAADigId1AwAAAOKAiHUDAAAA4oCJdQMAAADigIp1AwAAAOKAi3UDAAAA4oCvdQMAAADigZ91AwAAAOOAgPoEIAkNCnKUAAAAcgEAAABjBQAAAAAAAAAFAAAABQAAAAMAAABzkgAAAHQAdAGIAIMCagKDAAEAfAGIAF8DiABqBGQBagWHAGYBZAJkA4QIiABqBkQAgwGDAYMBAQBkAWoFZARkA4QAiABqA0QAgwGDAYgAXwdkBYgAXwhkBogAagcXAIgAXwl8AogAXwp8A2QHawRydHwDiABfC24GdAyIAF8LfARkB2sEco58BIgAXwt8BIgAXwpkAFMAKQhOcrIAAABjAQAAAAAAAAACAAAAAwAAADMAAABzHAAAAHwAXRR9AXwBiABqAGsHcgJ8AVYAAQBxAmQAUwApAU4pAdoKbWF0Y2hXaGl0ZSkCchUAAABytQAAACkBcsMAAAByEgAAAHITAAAAcqcAAABZDgAAcwIAAAAEAHohV2hpdGUuX19pbml0X18uPGxvY2Fscz4uPGdlbmV4cHI+YwEAAAAAAAAAAgAAAAMAAABzAAAAcxgAAAB8AF0QfQF0AGoBfAEZAFYAAQBxAmQAUwApAU4pAnJLAAAA2gl3aGl0ZVN0cnMpAnIVAAAAcrUAAAByEgAAAHISAAAAchMAAABypwAAAFsOAABzAgAAAAQAVHoJRXhwZWN0ZWQgcgEAAAApDXIsAgAAcksAAAByxQAAAHJ+AgAAcgkCAABy0QAAAHKZAQAAcgEBAABymwEAAHKhAQAAcksCAAByTAIAAHIrAgAAKQVywwAAANoCd3NyVAIAAHJVAgAAclYCAAApAXKHAQAAKQFywwAAAHITAAAAcsUAAABWDgAAcxoAAAAAAQ4BBgEgAhgBBgEMAgYCCAEIAgYCCAEGAXoOV2hpdGUuX19pbml0X19UYwQAAAAAAAAABgAAAAUAAABDAAAAc5QAAAB8AXwCGQB8AGoAawdyHnQBfAF8AnwAagJ8AIMEggF8An0EfAJkATcAfQJ8BHwAagMXAH0FdAR8BXQFfAGDAYMCfQV4InwCfAVrAHJkfAF8AhkAfABqAGsGcmR8AmQBNwB9AnFEVwB8AnwEGAB8AGoGawByhHQBfAF8AnwAagJ8AIMEggF8AnwBfAR8AoUCGQBmAlMAKQJOcpQAAAApB3J+AgAAcjwAAAByoQEAAHJMAgAAclQCAAByzQAAAHJLAgAAKQZywwAAAHJvAQAAcr8AAABysAEAAHJAAgAAckECAAByEgAAAHISAAAAchMAAABy3QAAAGoOAABzFgAAAAABDgEQAQQBCAEKAQ4BGAEMAg4BEAJ6D1doaXRlLnBhcnNlSW1wbCkEcn0CAABylAAAAHIBAAAAcgEAAAApAVQpCHIPAAAAchAAAAByEQAAAHLXAAAAcn8CAAByxQAAAHLdAAAAcjACAAByEgAAAHISAAAAKQFyhwEAAHITAAAAcksAAAA0DgAAczQAAAAICAQCAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAgEIAg4UYwAAAAAAAAAAAAAAAAMAAAAAAAAAcxwAAABlAFoBZABaAocAZgFkAWQChAhaA4cABABaBFMAKQPaDl9Qb3NpdGlvblRva2VuYwEAAAAAAAAAAQAAAAMAAAADAAAAcygAAAB0AHQBfACDAmoCgwABAHwAagNqBHwAXwVkAXwAXwZkAnwAXwdkAFMAKQNOVEYpCHIsAgAAcoECAAByxQAAAHKHAQAAcg8AAAByAQEAAHKbAQAAcqABAAApAXLDAAAAKQFyhwEAAHISAAAAchMAAAByxQAAAHsOAABzCAAAAAABDgEKAQYBehdfUG9zaXRpb25Ub2tlbi5fX2luaXRfXykFcg8AAAByEAAAAHIRAAAAcsUAAAByMAIAAHISAAAAchIAAAApAXKHAQAAchMAAABygQIAAHoOAABzAgAAAAgBcoECAABjAAAAAAAAAAAAAAAAAwAAAAAAAABzMgAAAGUAWgFkAFoCZAFaA4cAZgFkAmQDhAhaBGQEZAWEAFoFZAlkB2QIhAFaBocABABaB1MAKQpyLAAAAHphVG9rZW4gdG8gYWR2YW5jZSB0byBhIHNwZWNpZmljIGNvbHVtbiBvZiBpbnB1dCB0ZXh0OyB1c2VmdWwgZm9yCiAgICB0YWJ1bGFyIHJlcG9ydCBzY3JhcGluZy4KICAgIGMCAAAAAAAAAAIAAAADAAAAAwAAAHMYAAAAdAB0AXwAgwJqAoMAAQB8AXwAXwNkAFMAKQFOKQRyLAIAAHIsAAAAcsUAAAByVwAAACkCcsMAAADaBWNvbG5vKQFyhwEAAHISAAAAchMAAAByxQAAAIUOAABzBAAAAAABDgF6E0dvVG9Db2x1bW4uX19pbml0X19jAwAAAAAAAAAEAAAAAwAAAEMAAABzYAAAAHQAfAJ8AYMCfABqAGsDclx0AXwBgwF9A3wAagJyKnwAagN8AXwCgwJ9AngwfAJ8A2sAclp8AXwCGQBqBIMAclp0AHwCfAGDAnwAagBrA3JafAJkATcAfQJxLFcAfAJTACkCTnKUAAAAKQVyVwAAAHLNAAAAcp0BAABywAEAANoHaXNzcGFjZSkEcsMAAABybwEAAHK/AAAAcsEBAAByEgAAAHISAAAAchMAAABywgEAAIkOAABzDgAAAAABEAEIAQYBDAEmAQwBehNHb1RvQ29sdW1uLnByZVBhcnNlVGMEAAAAAAAAAAcAAAAFAAAAQwAAAHNEAAAAdAB8AnwBgwJ9BHwEfABqAGsEciJ0AXwBfAJkAXwAgwSCAXwCfABqABcAfAQYAH0FfAF8AnwFhQIZAH0GfAV8BmYCUwApAk56G1RleHQgbm90IGluIGV4cGVjdGVkIGNvbHVtbikCclcAAAByPAAAACkHcsMAAABybwEAAHK/AAAAcrABAABaB3RoaXNjb2xaBm5ld2xvY3KkAAAAchIAAAByEgAAAHITAAAAct0AAACSDgAAcwwAAAAAAQoBCgEOAQ4BDAF6FEdvVG9Db2x1bW4ucGFyc2VJbXBsKQFUKQhyDwAAAHIQAAAAchEAAABy1wAAAHLFAAAAcsIBAABy3QAAAHIwAgAAchIAAAByEgAAACkBcocBAAByEwAAAHIsAAAAgQ4AAHMIAAAACAMEAQwECAljAAAAAAAAAAAAAAAAAwAAAAAAAABzKgAAAGUAWgFkAFoCZAFaA4cAZgFkAmQDhAhaBGQHZAVkBoQBWgWHAAQAWgZTACkIcjAAAABhsQEAAE1hdGNoZXMgaWYgY3VycmVudCBwb3NpdGlvbiBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSB3aXRoaW4KICAgIHRoZSBwYXJzZSBzdHJpbmcKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgdGVzdCA9ICcnJ1wKICAgICAgICBBQUEgdGhpcyBsaW5lCiAgICAgICAgQUFBIGFuZCB0aGlzIGxpbmUKICAgICAgICAgIEFBQSBidXQgbm90IHRoaXMgb25lCiAgICAgICAgQiBBQUEgYW5kIGRlZmluaXRlbHkgbm90IHRoaXMgb25lCiAgICAgICAgJycnCgogICAgICAgIGZvciB0IGluIChMaW5lU3RhcnQoKSArICdBQUEnICsgcmVzdE9mTGluZSkuc2VhcmNoU3RyaW5nKHRlc3QpOgogICAgICAgICAgICBwcmludCh0KQoKICAgIHByaW50czo6CgogICAgICAgIFsnQUFBJywgJyB0aGlzIGxpbmUnXQogICAgICAgIFsnQUFBJywgJyBhbmQgdGhpcyBsaW5lJ10KCiAgICBjAQAAAAAAAAABAAAAAwAAAAMAAABzGAAAAHQAdAF8AIMCagKDAAEAZAF8AF8DZABTACkCTnoWRXhwZWN0ZWQgc3RhcnQgb2YgbGluZSkEciwCAAByMAAAAHLFAAAAcqEBAAApAXLDAAAAKQFyhwEAAHISAAAAchMAAAByxQAAALEOAABzBAAAAAABDgF6EkxpbmVTdGFydC5fX2luaXRfX1RjBAAAAAAAAAAEAAAABQAAAEMAAABzKgAAAHQAfAJ8AYMCZAFrAnIWfAJnAGYCUwB0AXwBfAJ8AGoCfACDBIIBZABTACkCTnKUAAAAKQNyVwAAAHI8AAAAcqEBAAApBHLDAAAAcm8BAAByvwAAAHKwAQAAchIAAAByEgAAAHITAAAAct0AAAC1DgAAcwYAAAAAAQ4BCAF6E0xpbmVTdGFydC5wYXJzZUltcGwpAVQpB3IPAAAAchAAAAByEQAAAHLXAAAAcsUAAABy3QAAAHIwAgAAchIAAAByEgAAACkBcocBAAByEwAAAHIwAAAAmw4AAHMGAAAACBUEAQwEYwAAAAAAAAAAAAAAAAMAAAAAAAAAcyoAAABlAFoBZABaAmQBWgOHAGYBZAJkA4QIWgRkB2QFZAaEAVoFhwAEAFoGUwApCHIvAAAAelRNYXRjaGVzIGlmIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZiBhIGxpbmUgd2l0aGluIHRoZQogICAgcGFyc2Ugc3RyaW5nCiAgICBjAQAAAAAAAAABAAAABAAAAAMAAABzLAAAAHQAdAF8AIMCagKDAAEAfABqA3QEagVqBmQBZAKDAoMBAQBkA3wAXwdkAFMAKQROcuEAAABysgAAAHoURXhwZWN0ZWQgZW5kIG9mIGxpbmUpCHIsAgAAci8AAAByxQAAAHIJAgAAckEAAAByjAEAAHKtAAAAcqEBAAApAXLDAAAAKQFyhwEAAHISAAAAchMAAAByxQAAAL4OAABzBgAAAAABDgEUAXoQTGluZUVuZC5fX2luaXRfX1RjBAAAAAAAAAAEAAAABQAAAEMAAABzYgAAAHwCdAB8AYMBawByNnwBfAIZAGQBawJyJHwCZAIXAGQBZgJTAHQBfAF8AnwAagJ8AIMEggFuKHwCdAB8AYMBawJyTnwCZAIXAGcAZgJTAHQBfAF8AnwAagJ8AIMEggFkAFMAKQNOcuEAAABylAAAACkDcs0AAAByPAAAAHKhAQAAKQRywwAAAHJvAQAAcr8AAABysAEAAHISAAAAchIAAAByEwAAAHLdAAAAww4AAHMOAAAAAAEMAQwBDAISAQwBDAJ6EUxpbmVFbmQucGFyc2VJbXBsKQFUKQdyDwAAAHIQAAAAchEAAABy1wAAAHLFAAAAct0AAAByMAIAAHISAAAAchIAAAApAXKHAQAAchMAAAByLwAAALoOAABzBgAAAAgDBAEMBWMAAAAAAAAAAAAAAAADAAAAAAAAAHMqAAAAZQBaAWQAWgJkAVoDhwBmAWQCZAOECFoEZAdkBWQGhAFaBYcABABaBlMAKQhyRwAAAHpMTWF0Y2hlcyBpZiBjdXJyZW50IHBvc2l0aW9uIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhcnNlCiAgICBzdHJpbmcKICAgIGMBAAAAAAAAAAEAAAADAAAAAwAAAHMYAAAAdAB0AXwAgwJqAoMAAQBkAXwAXwNkAFMAKQJOehZFeHBlY3RlZCBzdGFydCBvZiB0ZXh0KQRyLAIAAHJHAAAAcsUAAAByoQEAACkBcsMAAAApAXKHAQAAchIAAAByEwAAAHLFAAAA0g4AAHMEAAAAAAEOAXoUU3RyaW5nU3RhcnQuX19pbml0X19UYwQAAAAAAAAABAAAAAUAAABDAAAAczAAAAB8AmQBawNyKHwCfABqAHwBZAGDAmsDcih0AXwBfAJ8AGoCfACDBIIBfAJnAGYCUwApAk5yAQAAACkDcsIBAAByPAAAAHKhAQAAKQRywwAAAHJvAQAAcr8AAABysAEAAHISAAAAchIAAAByEwAAAHLdAAAA1g4AAHMIAAAAAAEIAhABEAF6FVN0cmluZ1N0YXJ0LnBhcnNlSW1wbCkBVCkHcg8AAAByEAAAAHIRAAAActcAAAByxQAAAHLdAAAAcjACAAByEgAAAHISAAAAKQFyhwEAAHITAAAAckcAAADODgAAcwYAAAAIAwQBDARjAAAAAAAAAAAAAAAAAwAAAAAAAABzKgAAAGUAWgFkAFoCZAFaA4cAZgFkAmQDhAhaBGQHZAVkBoQBWgWHAAQAWgZTACkIckYAAAB6Qk1hdGNoZXMgaWYgY3VycmVudCBwb3NpdGlvbiBpcyBhdCB0aGUgZW5kIG9mIHRoZSBwYXJzZSBzdHJpbmcKICAgIGMBAAAAAAAAAAEAAAADAAAAAwAAAHMYAAAAdAB0AXwAgwJqAoMAAQBkAXwAXwNkAFMAKQJOehRFeHBlY3RlZCBlbmQgb2YgdGV4dCkEciwCAAByRgAAAHLFAAAAcqEBAAApAXLDAAAAKQFyhwEAAHISAAAAchMAAAByxQAAAOAOAABzBAAAAAABDgF6ElN0cmluZ0VuZC5fX2luaXRfX1RjBAAAAAAAAAAEAAAABQAAAEMAAABzXgAAAHwCdAB8AYMBawByHnQBfAF8AnwAagJ8AIMEggFuPHwCdAB8AYMBawJyNnwCZAEXAGcAZgJTAHwCdAB8AYMBawRySnwCZwBmAlMAdAF8AXwCfABqAnwAgwSCAWQAUwApAk5ylAAAACkDcs0AAAByPAAAAHKhAQAAKQRywwAAAHJvAQAAcr8AAABysAEAAHISAAAAchIAAAByEwAAAHLdAAAA5A4AAHMOAAAAAAEMARIBDAEMAQwBCAJ6E1N0cmluZ0VuZC5wYXJzZUltcGwpAVQpB3IPAAAAchAAAAByEQAAAHLXAAAAcsUAAABy3QAAAHIwAgAAchIAAAByEgAAACkBcocBAAByEwAAAHJGAAAA3Q4AAHMGAAAACAIEAQwEYwAAAAAAAAAAAAAAAAQAAAAAAAAAcy4AAABlAFoBZABaAmQBWgNlBGYBhwBmAWQCZAOECVoFZAdkBWQGhAFaBocABABaB1MAKQhyTgAAAGF5AQAATWF0Y2hlcyBpZiB0aGUgY3VycmVudCBwb3NpdGlvbiBpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgV29yZCwKICAgIGFuZCBpcyBub3QgcHJlY2VkZWQgYnkgYW55IGNoYXJhY3RlciBpbiBhIGdpdmVuIHNldCBvZgogICAgYGB3b3JkQ2hhcnNgYCAoZGVmYXVsdD0gYGBwcmludGFibGVzYGApLiBUbyBlbXVsYXRlIHRoZQogICAgYGAIYGAgYmVoYXZpb3Igb2YgcmVndWxhciBleHByZXNzaW9ucywgdXNlCiAgICBgYFdvcmRTdGFydChhbHBoYW51bXMpYGAuIGBgV29yZFN0YXJ0YGAgd2lsbCBhbHNvIG1hdGNoIGF0CiAgICB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgYmVpbmcgcGFyc2VkLCBvciBhdCB0aGUgYmVnaW5uaW5nIG9mCiAgICBhIGxpbmUuCiAgICBjAgAAAAAAAAACAAAAAwAAAAMAAABzIgAAAHQAdAF8AIMCagKDAAEAdAN8AYMBfABfBGQBfABfBWQAUwApAk56Gk5vdCBhdCB0aGUgc3RhcnQgb2YgYSB3b3JkKQZyLAIAAHJOAAAAcsUAAABy6AAAANoJd29yZENoYXJzcqEBAAApAnLDAAAAcoQCAAApAXKHAQAAchIAAAByEwAAAHLFAAAA9w4AAHMGAAAAAAEOAQoBehJXb3JkU3RhcnQuX19pbml0X19UYwQAAAAAAAAABAAAAAUAAABDAAAAc0AAAAB8AmQBawNyOHwBfAJkAhgAGQB8AGoAawZzKHwBfAIZAHwAagBrB3I4dAF8AXwCfABqAnwAgwSCAXwCZwBmAlMAKQNOcgEAAABylAAAACkDcoQCAAByPAAAAHKhAQAAKQRywwAAAHJvAQAAcr8AAABysAEAAHISAAAAchIAAAByEwAAAHLdAAAA/A4AAHMKAAAAAAEIARIBDgEQAXoTV29yZFN0YXJ0LnBhcnNlSW1wbCkBVCkIcg8AAAByEAAAAHIRAAAActcAAABydAAAAHLFAAAAct0AAAByMAIAAHISAAAAchIAAAApAXKHAQAAchMAAAByTgAAAO4OAABzBgAAAAgIBAEQBWMAAAAAAAAAAAAAAAAEAAAAAAAAAHMuAAAAZQBaAWQAWgJkAVoDZQRmAYcAZgFkAmQDhAlaBWQHZAVkBoQBWgaHAAQAWgdTACkIck0AAABhXwEAAE1hdGNoZXMgaWYgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgYXQgdGhlIGVuZCBvZiBhIFdvcmQsIGFuZCBpcwogICAgbm90IGZvbGxvd2VkIGJ5IGFueSBjaGFyYWN0ZXIgaW4gYSBnaXZlbiBzZXQgb2YgYGB3b3JkQ2hhcnNgYAogICAgKGRlZmF1bHQ9IGBgcHJpbnRhYmxlc2BgKS4gVG8gZW11bGF0ZSB0aGUgYGAIYGAgYmVoYXZpb3Igb2YKICAgIHJlZ3VsYXIgZXhwcmVzc2lvbnMsIHVzZSBgYFdvcmRFbmQoYWxwaGFudW1zKWBgLiBgYFdvcmRFbmRgYAogICAgd2lsbCBhbHNvIG1hdGNoIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyBiZWluZyBwYXJzZWQsIG9yIGF0IHRoZSBlbmQKICAgIG9mIGEgbGluZS4KICAgIGMCAAAAAAAAAAIAAAADAAAAAwAAAHMoAAAAdAB0AXwAgwJqAoMAAQB0A3wBgwF8AF8EZAF8AF8FZAJ8AF8GZABTACkDTkZ6GE5vdCBhdCB0aGUgZW5kIG9mIGEgd29yZCkHciwCAAByTQAAAHLFAAAAcugAAAByhAIAAHKYAQAAcqEBAAApAnLDAAAAcoQCAAApAXKHAQAAchIAAAByEwAAAHLFAAAACw8AAHMIAAAAAAEOAQoBBgF6EFdvcmRFbmQuX19pbml0X19UYwQAAAAAAAAABQAAAAUAAABDAAAAc1AAAAB0AHwBgwF9BHwEZAFrBHJIfAJ8BGsAckh8AXwCGQB8AGoBawZzOHwBfAJkAhgAGQB8AGoBawdySHQCfAF8AnwAagN8AIMEggF8AmcAZgJTACkDTnIBAAAAcpQAAAApBHLNAAAAcoQCAAByPAAAAHKhAQAAKQVywwAAAHJvAQAAcr8AAABysAEAAHLBAQAAchIAAAByEgAAAHITAAAAct0AAAARDwAAcwwAAAAAAQgBEAEOARIBEAF6EVdvcmRFbmQucGFyc2VJbXBsKQFUKQhyDwAAAHIQAAAAchEAAABy1wAAAHJ0AAAAcsUAAABy3QAAAHIwAgAAchIAAAByEgAAACkBcocBAAByEwAAAHJNAAAAAw8AAHMGAAAACAcEARAGYwAAAAAAAAAAAAAAAAQAAAAAAAAAc3oAAABlAFoBZABaAmQBWgNkFocAZgFkA2QEhAlaBGQFZAaEAFoFZAdkCIQAWgaHAGYBZAlkCoQIWgeHAGYBZAtkDIQIWgiHAGYBZA1kDoQIWglkF2QQZBGEAVoKhwBmAWQSZBOECFoLZBiHAGYBZBRkFYQJWgyHAAQAWg1TACkZcj0AAAB6XUFic3RyYWN0IHN1YmNsYXNzIG9mIFBhcnNlckVsZW1lbnQsIGZvciBjb21iaW5pbmcgYW5kCiAgICBwb3N0LXByb2Nlc3NpbmcgcGFyc2VkIHRva2Vucy4KICAgIEZjAwAAAAAAAAADAAAACwAAAAMAAABzyAAAAHQAdAGIAIMCagJ8AoMBAQB0A3wBdASDAnIidAV8AYMBfQF0A3wBdAaDAnI8iABqB3wBgwFnAYgAXwhugnQDfAF0CYMCclB8AWcBiABfCG5udAN8AXQKgwJyknQFfAGDAX0BdAtkAWQChAB8AUQAgwGDAXKGhwBmAWQDZAKECHwBRACDAX0BdAV8AYMBiABfCG4seQ50BXwBgwGIAF8IVwBuHAQAdAxrCnK8AQABAAEAfAFnAYgAXwhZAG4CWABkBIgAXw1kAFMAKQVOYwEAAAAAAAAAAgAAAAQAAABzAAAAcxgAAAB8AF0QfQF0AHwBdAGDAlYAAQBxAmQAUwApAU4pAnKaAAAAcg4BAAApAnIVAAAAcnABAAByEgAAAHISAAAAchMAAABypwAAACoPAABzAgAAAAQAeitQYXJzZUV4cHJlc3Npb24uX19pbml0X18uPGxvY2Fscz4uPGdlbmV4cHI+YwEAAAAAAAAAAgAAAAQAAAAzAAAAcyYAAAB8AF0efQF0AHwBdAGDAnIaiABqAnwBgwFuAnwBVgABAHECZABTACkBTikDcpoAAAByDgEAAHKPAQAAKQJyFQAAAHK+AQAAKQFywwAAAHISAAAAchMAAABypwAAACsPAABzAgAAAAQARikOciwCAAByPQAAAHLFAAAAcpoAAAByCwEAAHIJAQAAcg4BAAByjwEAANoFZXhwcnNyQQAAAHIKAAAAcl4BAAByEAEAAHKkAQAAKQNywwAAAHKFAgAAcqYBAAApAXKHAQAAKQFywwAAAHITAAAAcsUAAAAeDwAAcyIAAAAAARABCgEIAgoBEAEKAQoBCgEIAhIBEgEMAgIBDgEOAQ4BehhQYXJzZUV4cHJlc3Npb24uX19pbml0X19jAgAAAAAAAAACAAAAAgAAAEMAAABzFgAAAHwAagBqAXwBgwEBAGQAfABfAnwAUwApAU4pA3KFAgAAcuQAAABylQEAACkCcsMAAAByPQEAAHISAAAAchIAAAByEwAAAHLkAAAANA8AAHMGAAAAAAEMAQYBehZQYXJzZUV4cHJlc3Npb24uYXBwZW5kYwEAAAAAAAAAAgAAAAIAAABDAAAAczQAAABkAXwAXwBkAmQDhAB8AGoBRACDAXwAXwF4FnwAagFEAF0MfQF8AWoCgwABAHEgVwB8AFMAKQR6gEV4dGVuZHMgYGBsZWF2ZVdoaXRlc3BhY2VgYCBkZWZpbmVkIGluIGJhc2UgY2xhc3MsIGFuZCBhbHNvIGludm9rZXMgYGBsZWF2ZVdoaXRlc3BhY2VgYCBvbgogICAgICAgICAgIGFsbCBjb250YWluZWQgZXhwcmVzc2lvbnMuRmMBAAAAAAAAAAIAAAADAAAAUwAAAHMUAAAAZwB8AF0MfQF8AWoAgwCRAnEEUwByEgAAACkBcjwBAAApAnIVAAAAcr4BAAByEgAAAHISAAAAchMAAAByFwAAAD0PAABzAgAAAAYAejNQYXJzZUV4cHJlc3Npb24ubGVhdmVXaGl0ZXNwYWNlLjxsb2NhbHM+LjxsaXN0Y29tcD4pA3KYAQAAcoUCAAByCAIAACkCcsMAAAByvgEAAHISAAAAchIAAAByEwAAAHIIAgAAOQ8AAHMKAAAAAAMGARIBDAEMAXofUGFyc2VFeHByZXNzaW9uLmxlYXZlV2hpdGVzcGFjZWMCAAAAAAAAAAMAAAAEAAAAAwAAAHN6AAAAdAB8AXQBgwJyRnwBfABqAmsHcnZ0A3QEfACDAmoFfAGDAQEAeFB8AGoGRABdFH0CfAJqBXwAagJkAhkAgwEBAHEsVwBuMHQDdAR8AIMCagV8AYMBAQB4HnwAagZEAF0UfQJ8AmoFfABqAmQDGQCDAQEAcV5XAHwAUwApBE5ylAAAAHKVAAAAcpUAAAApB3KaAAAAckgAAABynQEAAHIsAgAAcj0AAAByCwIAAHKFAgAAKQNywwAAAHI9AQAAcr4BAAApAXKHAQAAchIAAAByEwAAAHILAgAAQg8AAHMSAAAAAAEKAQoBEAEMARYCEAEMARQBehZQYXJzZUV4cHJlc3Npb24uaWdub3JlYwEAAAAAAAAAAQAAAAwAAAADAAAAc0wAAAB5DnQAdAF8AIMCagKDAFMABAB0A2sKciIBAAEAAQBZAG4CWAB8AGoEZABrCHJGZAF8AGoFagZ0B3wAagiDAWYCFgB8AF8EfABqBFMAKQJOegclczooJXMpKQlyLAIAAHI9AAAAcs4AAAByZQEAAHKVAQAAcocBAAByDwAAAHKlAAAAcoUCAAApAXLDAAAAKQFyhwEAAHISAAAAchMAAAByzgAAAE4PAABzDgAAAAABAgEOAQ4BBgIKARgBehdQYXJzZUV4cHJlc3Npb24uX19zdHJfX2MBAAAAAAAAAAMAAAAEAAAAAwAAAHMwAQAAdAB0AXwAgwJqAoMAAQB4FnwAagNEAF0MfQF8AWoCgwABAHEWVwB0BHwAagODAWQBawKQAXIefABqA2QCGQB9AnQFfAJ8AGoGgwJyqHwCagcMAHKofAJqCGQAawhyqHwCagkMAHKofAJqA2QAZACFAhkAfABqA2QDGQBnARcAfABfA2QAfABfCnwABABqC3wCagtPAAIAXwt8AAQAagx8AmoMTwACAF8MfABqA2QFGQB9AnQFfAJ8AGoGgwJv1nwCagcMAG/WfAJqCGQAawhv1nwCagkMAJABch58AGoDZABkBoUCGQB8AmoDZABkAIUCGQAXAHwAXwNkAHwAXwp8AAQAagt8AmoLTwACAF8LfAAEAGoMfAJqDE8AAgBfDGQEdA18AIMBFwB8AF8OfABTACkHTnKTAAAAcgEAAABylAAAAHoJRXhwZWN0ZWQgcpUAAABylQAAACkPciwCAAByPQAAAHLiAQAAcoUCAAByzQAAAHKaAAAAcocBAABykwEAAHKWAQAAcp4BAABylQEAAHKbAQAAcqABAABypQAAAHKhAQAAKQNywwAAAHK+AQAAcj0BAAApAXKHAQAAchIAAAByEwAAAHLiAQAAWA8AAHMwAAAAAAEOAgwBDAUQAQoBDAEIAQoBCAEcAQYBEAEQAgoBDAEIAQoBCgEeAQYBEAEQAg4CehpQYXJzZUV4cHJlc3Npb24uc3RyZWFtbGluZU5jAgAAAAAAAAAEAAAAAwAAAEMAAABzRgAAAHwBZABrCXIMfAFuAmcAZABkAIUCGQB8AGcBFwB9AngYfABqAEQAXQ59A3wDagF8AoMBAQBxJlcAfABqAmcAgwEBAGQAUwApAU4pA3KFAgAAchACAAByDgIAACkEcsMAAAByDwIAANoDdG1wcr4BAAByEgAAAHISAAAAchMAAAByEAIAAHoPAABzCAAAAAABHgEMAQ4BehhQYXJzZUV4cHJlc3Npb24udmFsaWRhdGVjAQAAAAAAAAACAAAAAwAAAAMAAABzJAAAAHQAdAF8AIMCagKDAH0BZAFkAoQAfABqA0QAgwF8AV8DfAFTACkDTmMBAAAAAAAAAAIAAAADAAAAUwAAAHMUAAAAZwB8AF0MfQF8AWoAgwCRAnEEUwByEgAAACkBcjwBAAApAnIVAAAAcr4BAAByEgAAAHISAAAAchMAAAByFwAAAIIPAABzAgAAAAYAeihQYXJzZUV4cHJlc3Npb24uY29weS48bG9jYWxzPi48bGlzdGNvbXA+KQRyLAIAAHI9AAAAcjwBAAByhQIAACkCcsMAAABypAAAACkBcocBAAByEgAAAHITAAAAcjwBAACADwAAcwYAAAAAAQ4BEgF6FFBhcnNlRXhwcmVzc2lvbi5jb3B5YwMAAAAAAAAABAAAAAcAAAADAAAAc1oAAAB0AGoBckh4QHwAagJEAF02fQN0A3wDdASDAnIOfANqBXIOdAZqB2QBaghkAnwBdAl8AIMBagp8A2oFgwRkA2QEjQIBAHEOVwB0C3QMfACDAmoNfAF8AoMCUwApBU56XXswfTogc2V0dGluZyByZXN1bHRzIG5hbWUgezEhcn0gb24gezJ9IGV4cHJlc3Npb24gY29sbGlkZXMgd2l0aCB7MyFyfSBvbiBjb250YWluZWQgZXhwcmVzc2lvbnIaAAAAcpEAAAApAXLvAQAAKQ5yGAAAAHIaAAAAcoUCAABymgAAAHJBAAAAcpYBAABy8gEAAHLzAQAAcuUAAABy1QAAAHIPAAAAciwCAAByPQAAAHKqAQAAKQRywwAAAHIBAQAAcqsBAAByvgEAACkBcocBAAByEgAAAHITAAAAcqoBAACFDwAAcxQAAAAAAQYBDAEQAQgBAgECAQgBBgEMAnofUGFyc2VFeHByZXNzaW9uLl9zZXRSZXN1bHRzTmFtZSkBRikBTikBRikOcg8AAAByEAAAAHIRAAAActcAAAByxQAAAHLkAAAAcggCAAByCwIAAHLOAAAAcuIBAAByEAIAAHI8AQAAcqoBAAByMAIAAHISAAAAchIAAAApAXKHAQAAchMAAAByPQAAABoPAABzFAAAAAgDBAEOFggFCAkMDAwKDCIKBgwFYwAAAAAAAAAAAAAAAAQAAAAAAAAAc2AAAABlAFoBZABaAmQBWgNHAGQCZAOEAGQDZQSDA1oFZBGHAGYBZAVkBoQJWgaHAGYBZAdkCIQIWgdkEmQJZAqEAVoIZAtkDIQAWglkDWQOhABaCmQPZBCEAFoLhwAEAFoMUwApE3IiAAAAYR0CAAAKICAgIFJlcXVpcmVzIGFsbCBnaXZlbiA6Y2xhc3M6YFBhcnNlRXhwcmVzc2lvbmAgcyB0byBiZSBmb3VuZCBpbiB0aGUgZ2l2ZW4gb3JkZXIuCiAgICBFeHByZXNzaW9ucyBtYXkgYmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuCiAgICBNYXkgYmUgY29uc3RydWN0ZWQgdXNpbmcgdGhlIGBgJysnYGAgb3BlcmF0b3IuCiAgICBNYXkgYWxzbyBiZSBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgYGAnLSdgYCBvcGVyYXRvciwgd2hpY2ggd2lsbAogICAgc3VwcHJlc3MgYmFja3RyYWNraW5nLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIG5hbWVfZXhwciA9IE9uZU9yTW9yZShXb3JkKGFscGhhcykpCgogICAgICAgIGV4cHIgPSBBbmQoW2ludGVnZXIoImlkIiksIG5hbWVfZXhwcigibmFtZSIpLCBpbnRlZ2VyKCJhZ2UiKV0pCiAgICAgICAgIyBtb3JlIGVhc2lseSB3cml0dGVuIGFzOgogICAgICAgIGV4cHIgPSBpbnRlZ2VyKCJpZCIpICsgbmFtZV9leHByKCJuYW1lIikgKyBpbnRlZ2VyKCJhZ2UiKQogICAgYwAAAAAAAAAAAAAAAAMAAAAAAAAAcxwAAABlAFoBZABaAocAZgFkAWQChAhaA4cABABaBFMAKQN6DkFuZC5fRXJyb3JTdG9wYwEAAAAAAAAAAwAAAAMAAAAPAAAAcyYAAAB0AHQBagJ8AIMCagN8AXwCjgEBAGQBfABfBHwAagWDAAEAZABTACkCTvoBLSkGciwCAAByIgAAAHL1AQAAcsUAAAByAQEAAHIIAgAAKQNywwAAAHLCAAAAcjIBAAApAXKHAQAAchIAAAByEwAAAHLFAAAApg8AAHMGAAAAAAEUAQYBehdBbmQuX0Vycm9yU3RvcC5fX2luaXRfXykFcg8AAAByEAAAAHIRAAAAcsUAAAByMAIAAHISAAAAchIAAAApAXKHAQAAchMAAABy9QEAAKUPAABzAgAAAAgBcvUBAABUYwMAAAAAAAAABwAAAAUAAAADAAAAc+QAAAB0AHwBgwF9AXwBcpJ0AXwBawZykmcAfQN4bHQCfAGDAUQAXWBcAn0EfQV8BXQBawhyeHwEdAN8AYMBZAEYAGsAcm50BIMAfAF8BGQBFwAZABcAagVkCBkAfQZ8A2oGdAd8BoMBZAKDAYMBAQBxgnQIZAODAYIBcSJ8A2oGfAWDAQEAcSJXAHwDfAFkAGQAhQI8AHQJdAp8AIMCagt8AXwCgwIBAHQMZARkBYQAfABqBUQAgwGDAXwAXw18AGoOfABqBWQGGQBqD4MBAQB8AGoFZAYZAGoQfABfEGQHfABfEWQAUwApCU5ylAAAAHoJX3NraXBwZWQqejBjYW5ub3QgY29uc3RydWN0IEFuZCB3aXRoIHNlcXVlbmNlIGVuZGluZyBpbiAuLi5jAQAAAAAAAAACAAAAAgAAAHMAAABzFAAAAHwAXQx9AXwBagBWAAEAcQJkAFMAKQFOKQFymwEAACkCchUAAAByvgEAAHISAAAAchIAAAByEwAAAHKnAAAAug8AAHMCAAAABAB6H0FuZC5fX2luaXRfXy48bG9jYWxzPi48Z2VuZXhwcj5yAQAAAFRylQAAACkScgkBAABy8AEAAHLpAAAAcs0AAAByKQAAAHKFAgAAcuQAAAByRQAAAHJlAQAAciwCAAByIgAAAHLFAAAAcrgBAABymwEAAHIJAgAAcpkBAABymAEAAHKkAQAAKQdywwAAAHKFAgAAcqYBAAByhgIAAHLyAAAAcnABAABaCnNraXB0b19hcmcpAXKHAQAAchIAAAByEwAAAHLFAAAAqw8AAHMgAAAAAAEIAQwBBAESAQgBEAEYARQCCgIOAQwBEgEWARIBDgF6DEFuZC5fX2luaXRfX2MBAAAAAAAAAAMAAAAFAAAAAwAAAHPSAAAAfABqAHKqdAFkAWQChAB8AGoAZABkB4UCGQBEAIMBgwFyqnh0dAJ8AGoAZABkCIUCGQCDAUQAXV5cAn0BfQJ8AmQAawhySHE2dAN8AnQEgwJyNnwCagByNnQDfAJqAGQJGQB0BYMCcjZ8AmoAZAoZAHwAagB8AWQDFwAZABcAfAJqAGQLPABkAHwAagB8AWQDFwA8AHE2VwBkBGQFhAB8AGoARACDAXwAXwB0BnQHfACDAmoIgwABAHQJZAZkAoQAfABqAEQAgwGDAXwAXwp8AFMAKQxOYwEAAAAAAAAAAgAAAAQAAABzAAAAcy4AAAB8AF0mfQF0AHwBdAGDAm8kfAFqAm8kdAB8AWoCZAIZAHQDgwJWAAEAcQJkAVMAKQNylAAAAE5ylQAAACkEcpoAAAByPQAAAHKFAgAAcvEBAAApAnIVAAAAcr4BAAByEgAAAHISAAAAchMAAABypwAAAMIPAABzAgAAAAQBeiFBbmQuc3RyZWFtbGluZS48bG9jYWxzPi48Z2VuZXhwcj5ylAAAAGMBAAAAAAAAAAIAAAAEAAAAUwAAAHMYAAAAZwB8AF0QfQF8AWQAawlyBHwBkQJxBFMAKQFOchIAAAApAnIVAAAAcr4BAAByEgAAAHISAAAAchMAAAByFwAAAMsPAABzAgAAAAYAeiJBbmQuc3RyZWFtbGluZS48bG9jYWxzPi48bGlzdGNvbXA+YwEAAAAAAAAAAgAAAAIAAABzAAAAcxQAAAB8AF0MfQF8AWoAVgABAHECZABTACkBTikBcpsBAAApAnIVAAAAcr4BAAByEgAAAHISAAAAchMAAABypwAAAM4PAABzAgAAAAQAcpUAAABylQAAAHKVAAAAcpUAAABylQAAACkLcoUCAAByXgEAAHLpAAAAcpoAAAByPQAAAHLxAQAAciwCAAByIgAAAHLiAQAAcrgBAABymwEAACkDcsMAAABy8gAAAHK+AQAAKQFyhwEAAHISAAAAchMAAABy4gEAAL8PAABzHAAAAAACBgEIARQBHAEIAQIBCgEWAR4BEgESAg4BFgF6DkFuZC5zdHJlYW1saW5lYwQAAAAAAAAACQAAABEAAABDAAAAcwIBAAB8AGoAZAEZAGoBfAF8AnwDZAJkA40EXAJ9An0EZAJ9BXjYfABqAGQEZACFAhkARABdxn0GdAJ8BnQDagSDAnJGZAV9BXEwfAVy0HkWfAZqAXwBfAJ8A4MDXAJ9An0HVwBx4gQAdAVrCnJ2AQABAAEAggBZAHHiBAB0BmsKcqYBAH0IAQB6FmQAfAhfB3QFagh8CIMBggFXAFkAZABkAH0IfghYAHHiBAB0CWsKcswBAAEAAQB0BXwBdAp8AYMBfABqC3wAgwSCAVkAceJYAG4SfAZqAXwBfAJ8A4MDXAJ9An0HfAdz7nwHagyDAHIwfAR8BzcAfQRxMFcAfAJ8BGYCUwApBk5yAQAAAEYpAXKxAQAAcpQAAABUKQ1yhQIAAHK1AQAAcpoAAAByIgAAAHL1AQAAckAAAAByOgAAAHLnAAAAcsgAAAByEQEAAHLNAAAAcqEBAAByMAEAACkJcsMAAABybwEAAHK/AAAAcrABAADaCnJlc3VsdGxpc3RaCWVycm9yU3RvcHK+AQAAWgpleHBydG9rZW5zcscAAAByEgAAAHISAAAAchMAAABy3QAAANEPAABzKAAAAAADHAEEARQBDAEEAQIBBAECARYBDgEGARABBgEaAQ4BHAISAQwBDAF6DUFuZC5wYXJzZUltcGxjAgAAAAAAAAACAAAAAwAAAEMAAABzHgAAAHQAfAF0AYMCchR8AGoCfAGDAX0BfABqA3wBgwFTACkBTikEcpoAAAByDgEAAHKPAQAAcuQAAAApAnLDAAAAcj0BAAByEgAAAHISAAAAchMAAAByOQEAAOoPAABzBgAAAAABCgEKAXoMQW5kLl9faWFkZF9fYwIAAAAAAAAABAAAAAMAAABDAAAAczgAAAB8AWQAZACFAhkAfABnARcAfQJ4IHwAagBEAF0WfQN8A2oBfAKDAQEAfANqAnMaUABxGlcAZABTACkBTikDcoUCAAByDgIAAHKbAQAAKQRywwAAAHL3AAAA2g9zdWJSZWNDaGVja0xpc3RyvgEAAHISAAAAchIAAAByEwAAAHIOAgAA7w8AAHMKAAAAAAESAQwBCgEGAXoSQW5kLmNoZWNrUmVjdXJzaW9uYwEAAAAAAAAAAQAAAAQAAABDAAAAc0AAAAB0AHwAZAGDAnIQfABqAVMAfABqAmQAawhyOmQCZANqA2QEZAWEAHwAagREAIMBgwEXAGQGFwB8AF8CfABqAlMAKQdOcgEBAAD6AXty2gAAAGMBAAAAAAAAAAIAAAADAAAAcwAAAHMWAAAAfABdDn0BdAB8AYMBVgABAHECZABTACkBTikBcqUAAAApAnIVAAAAcr4BAAByEgAAAHISAAAAchMAAABypwAAAPsPAABzAgAAAAQAeh5BbmQuX19zdHJfXy48bG9jYWxzPi48Z2VuZXhwcj76AX0pBXIoAQAAcgEBAABylQEAAHLRAAAAcoUCAAApAXLDAAAAchIAAAByEgAAAHITAAAAcs4AAAD2DwAAcwoAAAAAAQoBBgIKASACegtBbmQuX19zdHJfXykBVCkBVCkNcg8AAAByEAAAAHIRAAAActcAAAByKQAAAHL1AQAAcsUAAABy4gEAAHLdAAAAcjkBAAByDgIAAHLOAAAAcjACAAByEgAAAHISAAAAKQFyhwEAAHITAAAAciIAAACTDwAAcxAAAAAIEAQCEAYOFAwSChkIBQgHYwAAAAAAAAAAAAAAAAQAAAAAAAAAc14AAABlAFoBZABaAmQBWgNkEocAZgFkA2QEhAlaBIcAZgFkBWQGhAhaBWQTZAhkCYQBWgZkCmQLhABaB2QMZA2EAFoIZA5kD4QAWglkFIcAZgFkEGQRhAlaCocABABaC1MAKRVyOQAAAGG/AQAAUmVxdWlyZXMgdGhhdCBhdCBsZWFzdCBvbmUgOmNsYXNzOmBQYXJzZUV4cHJlc3Npb25gIGlzIGZvdW5kLiBJZgogICAgdHdvIGV4cHJlc3Npb25zIG1hdGNoLCB0aGUgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMgdGhlIGxvbmdlc3QKICAgIHN0cmluZyB3aWxsIGJlIHVzZWQuIE1heSBiZSBjb25zdHJ1Y3RlZCB1c2luZyB0aGUgYGAnXidgYAogICAgb3BlcmF0b3IuCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgY29uc3RydWN0IE9yIHVzaW5nICdeJyBvcGVyYXRvcgoKICAgICAgICBudW1iZXIgPSBXb3JkKG51bXMpIF4gQ29tYmluZShXb3JkKG51bXMpICsgJy4nICsgV29yZChudW1zKSkKICAgICAgICBwcmludChudW1iZXIuc2VhcmNoU3RyaW5nKCIxMjMgMy4xNDE2IDc4OSIpKQoKICAgIHByaW50czo6CgogICAgICAgIFtbJzEyMyddLCBbJzMuMTQxNiddLCBbJzc4OSddXQogICAgRmMDAAAAAAAAAAMAAAADAAAAAwAAAHM6AAAAdAB0AXwAgwJqAnwBfAKDAgEAfABqA3IwdARkAWQChAB8AGoDRACDAYMBfABfBW4GZAN8AF8FZABTACkETmMBAAAAAAAAAAIAAAACAAAAcwAAAHMUAAAAfABdDH0BfAFqAFYAAQBxAmQAUwApAU4pAXKbAQAAKQJyFQAAAHK+AQAAchIAAAByEgAAAHITAAAAcqcAAAAUEAAAcwIAAAAEAHoeT3IuX19pbml0X18uPGxvY2Fscz4uPGdlbmV4cHI+VCkGciwCAAByOQAAAHLFAAAAcoUCAAByXgEAAHKbAQAAKQNywwAAAHKFAgAAcqYBAAApAXKHAQAAchIAAAByEwAAAHLFAAAAERAAAHMIAAAAAAESAQYBGAJ6C09yLl9faW5pdF9fYwEAAAAAAAAAAQAAAAMAAAADAAAAcy4AAAB0AHQBfACDAmoCgwABAHQDagRyKnQFZAFkAoQAfABqBkQAgwGDAXwAXwd8AFMAKQNOYwEAAAAAAAAAAgAAAAIAAABzAAAAcxQAAAB8AF0MfQF8AWoAVgABAHECZABTACkBTikBcpcBAAApAnIVAAAAcr4BAAByEgAAAHISAAAAchMAAABypwAAABsQAABzAgAAAAQAeiBPci5zdHJlYW1saW5lLjxsb2NhbHM+LjxnZW5leHByPikIciwCAAByOQAAAHLiAQAAciEAAADaFmNvbGxlY3RfYWxsX0FuZF90b2tlbnNyXgEAAHKFAgAAcpcBAAApAXLDAAAAKQFyhwEAAHISAAAAchMAAABy4gEAABgQAABzCAAAAAABDgEGARYBeg1Pci5zdHJlYW1saW5lVGMEAAAAAAAAAA8AAAARAAAAQwAAAHPGAQAAZAZ9BGQAfQVnAH0GeKR8AGoARABdmn0HeRB8B2oBfAF8AoMCfQhXAG52BAB0AmsKcmQBAH0JAQB6IGQAfAlfA3wJagR8BGsEclR8CX0FfAlqBH0EVwBZAGQAZAB9CX4JWABxFAQAdAVrCnKeAQABAAEAdAZ8AYMBfARrBHKadAJ8AXQGfAGDAXwHagd8AIMEfQV0BnwBgwF9BFkAcRRYAHwGagh8CHwHZgKDAQEAcRRXAHwGkAFynHwGagl0CmQCgwFkA2QEjQIBAHwDc+h8BmQCGQBkARkAfQp8CmoLfAF8AnwDgwNTAGQIfQt4oHwGRABdmFwCfQx9DXwMfAtkAhkAawGQAXIMfAtTAHkWfA1qC3wBfAJ8A4MDXAJ9CH0OVwBuQAQAdAJrCpABcmIBAH0JAQB6ImQAfAlfA3wJagR8BGsEkAFyUnwJfQV8CWoEfQRXAFkAZABkAH0JfglYAHHyWAB8CHwMawWQAXJ2fAh8DmYCUwB8CHwLZAIZAGsEcvJ8CHwOZgJ9C3HyVwB8C2QKawOQAXKcfAtTAHwFZABrCZABcrR8AGoHfAVfDHwFggFuDnQCfAF8AmQFfACDBIIBZABTACkLTnKUAAAAcgEAAABUKQJyNQEAAHIaAQAAeiBubyBkZWZpbmVkIGFsdGVybmF0aXZlcyB0byBtYXRjaHKVAAAAcpUAAAApAnKVAAAATnKVAAAAKQJylQAAAE4pDXKFAgAAcskBAAByPAAAAHLnAAAAcr8AAAByEQEAAHLNAAAAcqEBAABy5AAAANoEc29ydHIEAAAAcrUBAAByugAAACkPcsMAAABybwEAAHK/AAAAcrABAADaCW1heEV4Y0xvY9oMbWF4RXhjZXB0aW9ucugBAAByvgEAAFoEbG9jMnLIAQAAWgliZXN0X2V4cHJaB2xvbmdlc3RaBGxvYzFaBWV4cHIxcnMBAAByEgAAAHISAAAAchMAAABy3QAAAB4QAABzVAAAAAABBAEEAQQBDAECARABEAEGAQoBBAEWAQ4BDAEUAQ4DEgIGAxICBAMMAQ4CBAEOAQ4CBAICARYBEgEGAQwBBAEYAgoBCAIMAQwCCgEEAgoBCAEGAnoMT3IucGFyc2VJbXBsYwIAAAAAAAAAAgAAAAMAAABDAAAAcx4AAAB0AHwBdAGDAnIUfABqAnwBgwF9AXwAagN8AYMBUwApAU4pBHKaAAAAcg4BAAByjwEAAHLkAAAAKQJywwAAAHI9AQAAchIAAAByEgAAAHITAAAA2ghfX2l4b3JfX1sQAABzBgAAAAABCgEKAXoLT3IuX19peG9yX19jAQAAAAAAAAABAAAABAAAAEMAAABzQAAAAHQAfABkAYMCchB8AGoBUwB8AGoCZABrCHI6ZAJkA2oDZARkBYQAfABqBEQAgwGDARcAZAYXAHwAXwJ8AGoCUwApB05yAQEAAHKKAgAAegMgXiBjAQAAAAAAAAACAAAAAwAAAHMAAABzFgAAAHwAXQ59AXQAfAGDAVYAAQBxAmQAUwApAU4pAXKlAAAAKQJyFQAAAHK+AQAAchIAAAByEgAAAHITAAAAcqcAAABlEAAAcwIAAAAEAHodT3IuX19zdHJfXy48bG9jYWxzPi48Z2VuZXhwcj5yiwIAACkFcigBAAByAQEAAHKVAQAActEAAAByhQIAACkBcsMAAAByEgAAAHISAAAAchMAAAByzgAAAGAQAABzCgAAAAABCgEGAgoBIAJ6Ck9yLl9fc3RyX19jAgAAAAAAAAAEAAAAAwAAAEMAAABzMAAAAHwBZABkAIUCGQB8AGcBFwB9AngYfABqAEQAXQ59A3wDagF8AoMBAQBxGlcAZABTACkBTikCcoUCAAByDgIAACkEcsMAAABy9wAAAHKJAgAAcr4BAAByEgAAAHISAAAAchMAAAByDgIAAGkQAABzBgAAAAABEgEMAXoRT3IuY2hlY2tSZWN1cnNpb25jAwAAAAAAAAADAAAABgAAAAMAAABzUgAAAHQAagEMAHJAdAJqA3JAdARkAWQChAB8AGoFRACDAYMBckB0BmoHZANqCGQEfAF0CXwAgwFqCoMDZAVkBo0CAQB0C3QMfACDAmoNfAF8AoMCUwApB05jAQAAAAAAAAACAAAABAAAAHMAAABzGAAAAHwAXRB9AXQAfAF0AYMCVgABAHECZABTACkBTikCcpoAAAByIgAAACkCchUAAAByvgEAAHISAAAAchIAAAByEwAAAHKnAAAAcRAAAHMCAAAABAB6JU9yLl9zZXRSZXN1bHRzTmFtZS48bG9jYWxzPi48Z2VuZXhwcj56lnswfTogc2V0dGluZyByZXN1bHRzIG5hbWUgezEhcn0gb24gezJ9IGV4cHJlc3Npb24gbWF5IG9ubHkgcmV0dXJuIGEgc2luZ2xlIHRva2VuIGZvciBhbiBBbmQgYWx0ZXJuYXRpdmUsIGluIGZ1dHVyZSB3aWxsIHJldHVybiB0aGUgZnVsbCBsaXN0IG9mIHRva2Vuc3IZAAAAcpEAAAApAXLvAQAAKQ5yIQAAAHKMAgAAchgAAAByGQAAAHJeAQAAcoUCAABy8gEAAHLzAQAAcuUAAABy1QAAAHIPAAAAciwCAAByOQAAAHKqAQAAKQNywwAAAHIBAQAAcqsBAAApAXKHAQAAchIAAAByEwAAAHKqAQAAbhAAAHMOAAAAAAEIAQYBFAEIAw4BCAJ6Ek9yLl9zZXRSZXN1bHRzTmFtZSkBRikBVCkBRikMcg8AAAByEAAAAHIRAAAActcAAAByxQAAAHLiAQAAct0AAABykAIAAHLOAAAAcg4CAAByqgEAAHIwAgAAchIAAAByEgAAACkBcocBAAByEwAAAHI5AAAAABAAAHMQAAAACBAEAQ4HDAYKPQgFCAkIBWMAAAAAAAAAAAAAAAAEAAAAAAAAAHNeAAAAZQBaAWQAWgJkAVoDZBKHAGYBZANkBIQJWgSHAGYBZAVkBoQIWgVkE2QIZAmEAVoGZApkC4QAWgdkDGQNhABaCGQOZA+EAFoJZBSHAGYBZBBkEYQJWgqHAAQAWgtTACkVcjMAAABhuAIAAFJlcXVpcmVzIHRoYXQgYXQgbGVhc3Qgb25lIDpjbGFzczpgUGFyc2VFeHByZXNzaW9uYCBpcyBmb3VuZC4gSWYKICAgIHR3byBleHByZXNzaW9ucyBtYXRjaCwgdGhlIGZpcnN0IG9uZSBsaXN0ZWQgaXMgdGhlIG9uZSB0aGF0IHdpbGwKICAgIG1hdGNoLiBNYXkgYmUgY29uc3RydWN0ZWQgdXNpbmcgdGhlIGBgJ3wnYGAgb3BlcmF0b3IuCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgY29uc3RydWN0IE1hdGNoRmlyc3QgdXNpbmcgJ3wnIG9wZXJhdG9yCgogICAgICAgICMgd2F0Y2ggdGhlIG9yZGVyIG9mIGV4cHJlc3Npb25zIHRvIG1hdGNoCiAgICAgICAgbnVtYmVyID0gV29yZChudW1zKSB8IENvbWJpbmUoV29yZChudW1zKSArICcuJyArIFdvcmQobnVtcykpCiAgICAgICAgcHJpbnQobnVtYmVyLnNlYXJjaFN0cmluZygiMTIzIDMuMTQxNiA3ODkiKSkgIyAgRmFpbCEgLT4gW1snMTIzJ10sIFsnMyddLCBbJzE0MTYnXSwgWyc3ODknXV0KCiAgICAgICAgIyBwdXQgbW9yZSBzZWxlY3RpdmUgZXhwcmVzc2lvbiBmaXJzdAogICAgICAgIG51bWJlciA9IENvbWJpbmUoV29yZChudW1zKSArICcuJyArIFdvcmQobnVtcykpIHwgV29yZChudW1zKQogICAgICAgIHByaW50KG51bWJlci5zZWFyY2hTdHJpbmcoIjEyMyAzLjE0MTYgNzg5IikpICMgIEJldHRlciAtPiBbWycxMjMnXSwgWyczLjE0MTYnXSwgWyc3ODknXV0KICAgIEZjAwAAAAAAAAADAAAAAwAAAAMAAABzOgAAAHQAdAF8AIMCagJ8AXwCgwIBAHwAagNyMHQEZAFkAoQAfABqA0QAgwGDAXwAXwVuBmQDfABfBWQAUwApBE5jAQAAAAAAAAACAAAAAgAAAHMAAABzFAAAAHwAXQx9AXwBagBWAAEAcQJkAFMAKQFOKQFymwEAACkCchUAAAByvgEAAHISAAAAchIAAAByEwAAAHKnAAAAjxAAAHMCAAAABAB6Jk1hdGNoRmlyc3QuX19pbml0X18uPGxvY2Fscz4uPGdlbmV4cHI+VCkGciwCAAByMwAAAHLFAAAAcoUCAAByXgEAAHKbAQAAKQNywwAAAHKFAgAAcqYBAAApAXKHAQAAchIAAAByEwAAAHLFAAAAjBAAAHMIAAAAAAESAQYBGAJ6E01hdGNoRmlyc3QuX19pbml0X19jAQAAAAAAAAABAAAAAwAAAAMAAABzLgAAAHQAdAF8AIMCagKDAAEAdANqBHIqdAVkAWQChAB8AGoGRACDAYMBfABfB3wAUwApA05jAQAAAAAAAAACAAAAAgAAAHMAAABzFAAAAHwAXQx9AXwBagBWAAEAcQJkAFMAKQFOKQFylwEAACkCchUAAAByvgEAAHISAAAAchIAAAByEwAAAHKnAAAAlhAAAHMCAAAABAB6KE1hdGNoRmlyc3Quc3RyZWFtbGluZS48bG9jYWxzPi48Z2VuZXhwcj4pCHIsAgAAcjMAAABy4gEAAHIhAAAAcowCAAByXgEAAHKFAgAAcpcBAAApAXLDAAAAKQFyhwEAAHISAAAAchMAAABy4gEAAJMQAABzCAAAAAABDgEGARYBehVNYXRjaEZpcnN0LnN0cmVhbWxpbmVUYwQAAAAAAAAACQAAABEAAABDAAAAc8QAAABkA30EZAB9BXi2fABqAEQAXYh9BnkSfAZqAXwBfAJ8A4MDfQd8B1MABAB0AmsKclwBAH0IAQB6GnwIagN8BGsEckx8CH0FfAhqA30EVwBZAGQAZAB9CH4IWABxEAQAdARrCnKWAQABAAEAdAV8AYMBfARrBHKSdAJ8AXQFfAGDAXwGagZ8AIMEfQV0BXwBgwF9BFkAcRBYAHEQVwB8BWQAawlysnwAagZ8BV8HfAWCAW4OdAJ8AXwCZAJ8AIMEggFkAFMAKQROcpQAAAB6IG5vIGRlZmluZWQgYWx0ZXJuYXRpdmVzIHRvIG1hdGNocpUAAAApCHKFAgAAcrUBAAByPAAAAHK/AAAAchEBAAByzQAAAHKhAQAAcroAAAApCXLDAAAAcm8BAAByvwAAAHKwAQAAco4CAAByjwIAAHK+AQAAcqQAAAByyAEAAHISAAAAchIAAAByEwAAAHLdAAAAmRAAAHMkAAAAAAEEAQQBDAECAQ4BBAEQAQoBBAEWAQ4BDAEUARIECAEIAQYCehRNYXRjaEZpcnN0LnBhcnNlSW1wbGMCAAAAAAAAAAIAAAADAAAAQwAAAHMeAAAAdAB8AXQBgwJyFHwAagJ8AYMBfQF8AGoDfAGDAVMAKQFOKQRymgAAAHIOAQAAco8BAABy5AAAACkCcsMAAAByPQEAAHISAAAAchIAAAByEwAAANoHX19pb3JfX7EQAABzBgAAAAABCgEKAXoSTWF0Y2hGaXJzdC5fX2lvcl9fYwEAAAAAAAAAAQAAAAQAAABDAAAAc0AAAAB0AHwAZAGDAnIQfABqAVMAfABqAmQAawhyOmQCZANqA2QEZAWEAHwAagREAIMBgwEXAGQGFwB8AF8CfABqAlMAKQdOcgEBAAByigIAAHoDIHwgYwEAAAAAAAAAAgAAAAMAAABzAAAAcxYAAAB8AF0OfQF0AHwBgwFWAAEAcQJkAFMAKQFOKQFypQAAACkCchUAAAByvgEAAHISAAAAchIAAAByEwAAAHKnAAAAuxAAAHMCAAAABAB6JU1hdGNoRmlyc3QuX19zdHJfXy48bG9jYWxzPi48Z2VuZXhwcj5yiwIAACkFcigBAAByAQEAAHKVAQAActEAAAByhQIAACkBcsMAAAByEgAAAHISAAAAchMAAAByzgAAALYQAABzCgAAAAABCgEGAgoBIAJ6Ek1hdGNoRmlyc3QuX19zdHJfX2MCAAAAAAAAAAQAAAADAAAAQwAAAHMwAAAAfAFkAGQAhQIZAHwAZwEXAH0CeBh8AGoARABdDn0DfANqAXwCgwEBAHEaVwBkAFMAKQFOKQJyhQIAAHIOAgAAKQRywwAAAHL3AAAAcokCAAByvgEAAHISAAAAchIAAAByEwAAAHIOAgAAvxAAAHMGAAAAAAESAQwBehlNYXRjaEZpcnN0LmNoZWNrUmVjdXJzaW9uYwMAAAAAAAAAAwAAAAYAAAADAAAAc1IAAAB0AGoBDAByQHQCagNyQHQEZAFkAoQAfABqBUQAgwGDAXJAdAZqB2QDaghkBHwBdAl8AIMBagqDA2QFZAaNAgEAdAt0DHwAgwJqDXwBfAKDAlMAKQdOYwEAAAAAAAAAAgAAAAQAAABzAAAAcxgAAAB8AF0QfQF0AHwBdAGDAlYAAQBxAmQAUwApAU4pAnKaAAAAciIAAAApAnIVAAAAcr4BAAByEgAAAHISAAAAchMAAABypwAAAMcQAABzAgAAAAQAei1NYXRjaEZpcnN0Ll9zZXRSZXN1bHRzTmFtZS48bG9jYWxzPi48Z2VuZXhwcj56lnswfTogc2V0dGluZyByZXN1bHRzIG5hbWUgezEhcn0gb24gezJ9IGV4cHJlc3Npb24gbWF5IG9ubHkgcmV0dXJuIGEgc2luZ2xlIHRva2VuIGZvciBhbiBBbmQgYWx0ZXJuYXRpdmUsIGluIGZ1dHVyZSB3aWxsIHJldHVybiB0aGUgZnVsbCBsaXN0IG9mIHRva2Vuc3IZAAAAcpEAAAApAXLvAQAAKQ5yIQAAAHKMAgAAchgAAAByGQAAAHJeAQAAcoUCAABy8gEAAHLzAQAAcuUAAABy1QAAAHIPAAAAciwCAAByMwAAAHKqAQAAKQNywwAAAHIBAQAAcqsBAAApAXKHAQAAchIAAAByEwAAAHKqAQAAxBAAAHMOAAAAAAEIAQYBFAEIAw4BCAJ6Gk1hdGNoRmlyc3QuX3NldFJlc3VsdHNOYW1lKQFGKQFUKQFGKQxyDwAAAHIQAAAAchEAAABy1wAAAHLFAAAAcuIBAABy3QAAAHKRAgAAcs4AAAByDgIAAHKqAQAAcjACAAByEgAAAHISAAAAKQFyhwEAAHITAAAAcjMAAAB7EAAAcxAAAAAIEAQBDgcMBgoYCAUICQgFYwAAAAAAAAAAAAAAAAQAAAAAAAAAc0gAAABlAFoBZABaAmQBWgNkDYcAZgFkA2QEhAlaBIcAZgFkBWQGhAhaBWQOZAdkCIQBWgZkCWQKhABaB2QLZAyEAFoIhwAEAFoJUwApD3IoAAAAYXMHAABSZXF1aXJlcyBhbGwgZ2l2ZW4gOmNsYXNzOmBQYXJzZUV4cHJlc3Npb25gIHMgdG8gYmUgZm91bmQsIGJ1dCBpbgogICAgYW55IG9yZGVyLiBFeHByZXNzaW9ucyBtYXkgYmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuCgogICAgTWF5IGJlIGNvbnN0cnVjdGVkIHVzaW5nIHRoZSBgYCcmJ2BgIG9wZXJhdG9yLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBjb2xvciA9IG9uZU9mKCJSRUQgT1JBTkdFIFlFTExPVyBHUkVFTiBCTFVFIFBVUlBMRSBCTEFDSyBXSElURSBCUk9XTiIpCiAgICAgICAgc2hhcGVfdHlwZSA9IG9uZU9mKCJTUVVBUkUgQ0lSQ0xFIFRSSUFOR0xFIFNUQVIgSEVYQUdPTiBPQ1RBR09OIikKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIHNoYXBlX2F0dHIgPSAic2hhcGU6IiArIHNoYXBlX3R5cGUoInNoYXBlIikKICAgICAgICBwb3NuX2F0dHIgPSAicG9zbjoiICsgR3JvdXAoaW50ZWdlcigieCIpICsgJywnICsgaW50ZWdlcigieSIpKSgicG9zbiIpCiAgICAgICAgY29sb3JfYXR0ciA9ICJjb2xvcjoiICsgY29sb3IoImNvbG9yIikKICAgICAgICBzaXplX2F0dHIgPSAic2l6ZToiICsgaW50ZWdlcigic2l6ZSIpCgogICAgICAgICMgdXNlIEVhY2ggKHVzaW5nIG9wZXJhdG9yICcmJykgdG8gYWNjZXB0IGF0dHJpYnV0ZXMgaW4gYW55IG9yZGVyCiAgICAgICAgIyAoc2hhcGUgYW5kIHBvc24gYXJlIHJlcXVpcmVkLCBjb2xvciBhbmQgc2l6ZSBhcmUgb3B0aW9uYWwpCiAgICAgICAgc2hhcGVfc3BlYyA9IHNoYXBlX2F0dHIgJiBwb3NuX2F0dHIgJiBPcHRpb25hbChjb2xvcl9hdHRyKSAmIE9wdGlvbmFsKHNpemVfYXR0cikKCiAgICAgICAgc2hhcGVfc3BlYy5ydW5UZXN0cygnJycKICAgICAgICAgICAgc2hhcGU6IFNRVUFSRSBjb2xvcjogQkxBQ0sgcG9zbjogMTAwLCAxMjAKICAgICAgICAgICAgc2hhcGU6IENJUkNMRSBzaXplOiA1MCBjb2xvcjogQkxVRSBwb3NuOiA1MCw4MAogICAgICAgICAgICBjb2xvcjpHUkVFTiBzaXplOjIwIHNoYXBlOlRSSUFOR0xFIHBvc246MjAsNDAKICAgICAgICAgICAgJycnCiAgICAgICAgICAgICkKCiAgICBwcmludHM6OgoKICAgICAgICBzaGFwZTogU1FVQVJFIGNvbG9yOiBCTEFDSyBwb3NuOiAxMDAsIDEyMAogICAgICAgIFsnc2hhcGU6JywgJ1NRVUFSRScsICdjb2xvcjonLCAnQkxBQ0snLCAncG9zbjonLCBbJzEwMCcsICcsJywgJzEyMCddXQogICAgICAgIC0gY29sb3I6IEJMQUNLCiAgICAgICAgLSBwb3NuOiBbJzEwMCcsICcsJywgJzEyMCddCiAgICAgICAgICAtIHg6IDEwMAogICAgICAgICAgLSB5OiAxMjAKICAgICAgICAtIHNoYXBlOiBTUVVBUkUKCgogICAgICAgIHNoYXBlOiBDSVJDTEUgc2l6ZTogNTAgY29sb3I6IEJMVUUgcG9zbjogNTAsODAKICAgICAgICBbJ3NoYXBlOicsICdDSVJDTEUnLCAnc2l6ZTonLCAnNTAnLCAnY29sb3I6JywgJ0JMVUUnLCAncG9zbjonLCBbJzUwJywgJywnLCAnODAnXV0KICAgICAgICAtIGNvbG9yOiBCTFVFCiAgICAgICAgLSBwb3NuOiBbJzUwJywgJywnLCAnODAnXQogICAgICAgICAgLSB4OiA1MAogICAgICAgICAgLSB5OiA4MAogICAgICAgIC0gc2hhcGU6IENJUkNMRQogICAgICAgIC0gc2l6ZTogNTAKCgogICAgICAgIGNvbG9yOiBHUkVFTiBzaXplOiAyMCBzaGFwZTogVFJJQU5HTEUgcG9zbjogMjAsNDAKICAgICAgICBbJ2NvbG9yOicsICdHUkVFTicsICdzaXplOicsICcyMCcsICdzaGFwZTonLCAnVFJJQU5HTEUnLCAncG9zbjonLCBbJzIwJywgJywnLCAnNDAnXV0KICAgICAgICAtIGNvbG9yOiBHUkVFTgogICAgICAgIC0gcG9zbjogWycyMCcsICcsJywgJzQwJ10KICAgICAgICAgIC0geDogMjAKICAgICAgICAgIC0geTogNDAKICAgICAgICAtIHNoYXBl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cnNlIGV4cHJlc3Npb24KICAgIG1hdGNoZXMgcHJpb3IgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24uICBgYFByZWNlZGVkQnlgYCBhbHdheXMKICAgIHJldHVybnMgYSBudWxsIHRva2VuIGxpc3QsIGJ1dCBpZiBhIHJlc3VsdHMgbmFtZSBpcyBkZWZpbmVkIG9uIHRoZQogICAgZ2l2ZW4gZXhwcmVzc2lvbiwgaXQgaXMgcmV0dXJuZWQuCgogICAgUGFyYW1ldGVyczoKCiAgICAgLSBleHByIC0gZXhwcmVzc2lvbiB0aGF0IG11c3QgbWF0Y2ggcHJpb3IgdG8gdGhlIGN1cnJlbnQgcGFyc2UKICAgICAgIGxvY2F0aW9uCiAgICAgLSByZXRyZWF0IC0gKGRlZmF1bHQ9IGBgTm9uZWBgKSAtIChpbnQpIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMKICAgICAgIHRvIGxvb2tiZWhpbmQgcHJpb3IgdG8gdGhlIGN1cnJlbnQgcGFyc2UgbG9jYXRpb24KCiAgICBJZiB0aGUgbG9va2JlaGluZCBleHByZXNzaW9uIGlzIGEgc3RyaW5nLCBMaXRlcmFsLCBLZXl3b3JkLCBvcgogICAgYSBXb3JkIG9yIENoYXJzTm90SW4gd2l0aCBhIHNwZWNpZmllZCBleGFjdCBvciBtYXhpbXVtIGxlbmd0aCwgdGhlbgogICAgdGhlIHJldHJlYXQgcGFyYW1ldGVyIGlzIG5vdCByZXF1aXJlZC4gT3RoZXJ3aXNlLCByZXRyZWF0IG11c3QgYmUKICAgIHNwZWNpZmllZCB0byBnaXZlIGEgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBsb29rIGJhY2sgZnJvbQogICAgdGhlIGN1cnJlbnQgcGFyc2UgcG9zaXRpb24gZm9yIGEgbG9va2JlaGluZCBtYXRjaC4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgIyBWQi1zdHlsZSB2YXJpYWJsZSBuYW1lcyB3aXRoIHR5cGUgcHJlZml4ZXMKICAgICAgICBpbnRfdmFyID0gUHJlY2VkZWRCeSgiIyIpICsgcHlwYXJzaW5nX2NvbW1vbi5pZGVudGlmaWVyCiAgICAgICAg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chMAAABymwIAAD8SAABzCAAAAAgBDggIBgodcpsCAABjAAAAAAAAAAAAAAAAAgAAAEAAAABzGAAAAGUAWgFkAFoCZAFaA2QCZAOEAFoEZARTACkFcjYAAABhagQAAFJlcGV0aXRpb24gb2Ygb25lIG9yIG1vcmUgb2YgdGhlIGdpdmVuIGV4cHJlc3Npb24uCgogICAgUGFyYW1ldGVyczoKICAgICAtIGV4cHIgLSBleHByZXNzaW9uIHRoYXQgbXVzdCBtYXRjaCBvbmUgb3IgbW9yZSB0aW1lcwogICAgIC0gc3RvcE9uIC0gKGRlZmF1bHQ9IGBgTm9uZWBgKSAtIGV4cHJlc3Npb24gZm9yIGEgdGVybWluYXRpbmcgc2VudGluZWwKICAgICAgICAgIChvbmx5IHJlcXVpcmVkIGlmIHRoZSBzZW50aW5lbCB3b3VsZCBvcmRpbmFyaWx5IG1hdGNoIHRoZSByZXBldGl0aW9uCiAgICAgICAgICBleHByZXNzaW9uKQoKICAgIEV4YW1wbGU6OgoKICAgICAgICBkYXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKCiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IEJMQUNLIgogICAgICAgIE9uZU9yTW9yZShhdHRyX2V4cHIpLnBhcnNlU3RyaW5nKHRleHQpLnBwcmludCgpICAjIEZhaWwhIHJlYWQgJ2NvbG9yJyBhcyBkYXRhIGluc3RlYWQgb2YgbmV4dCBsYWJlbCAtPiBbWydzaGFwZScsICdTUVVBUkUgY29sb3InXV0KCiAgICAgICAgIyB1c2Ugc3RvcE9uIGF0dHJpYnV0ZSBmb3IgT25lT3JNb3JlIHRvIGF2b2lkIHJlYWRpbmcgbGFiZWwgc3RyaW5nIGFzIHBhcnQgb2YgdGhlIGRhdGEKICAgICAgICBhdHRyX2V4cHIgPSBHcm91cChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKICAgICAgICBPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5wcHJpbnQoKSAjIEJldHRlciAtPiBbWydzaGFwZScsICdTUVVBUkUnXSwgWydwb3NuJywgJ3VwcGVyIGxlZnQnXSwgWydjb2xvcicsICdCTEFDSyddXQoKICAgICAgICAjIGNvdWxkIGFsc28gYmUgd3JpdHRlbiBhcwogICAgICAgIChhdHRyX2V4cHIgKiAoMSwpKS5wYXJzZVN0cmluZyh0ZXh0KS5wcHJpbnQoKQogICAgYwEAAAAAAAAAAQAAAAMAAABDAAAAczQAAAB0AHwAZAGDAnIQfABqAVMAfABqAmQAawhyLmQCdAN8AGoEgwEXAGQDFwB8AF8CfABqAlMAKQROcgEBAAByigIAAHoEfS4uLikFcigBAAByAQEAAHKVAQAAcqUAAABycAEAACkBcsMAAAByEgAAAHISAAAAchMAAAByzgAAAJMSAABzCgAAAAABCgEGAgoBFAJ6EU9uZU9yTW9yZS5fX3N0cl9fTikFcg8AAAByEAAAAHIRAAAActcAAAByzgAAAHISAAAAchIAAAByEgAAAHITAAAAcjYAAAB5EgAAcwQAAAAIGAQCYwAAAAAAAAAAAAAAAAQAAAAAAAAAczgAAABlAFoBZABaAmQBWgNkCocAZgFkA2QEhAlaBGQLhwBmAWQGZAeECVoFZAhkCYQAWgaHAAQAWgdTACkMck8AAABhawEAAE9wdGlvbmFsIHJlcGV0aXRpb24gb2YgemVybyBvciBtb3JlIG9mIHRoZSBnaXZlbiBleHByZXNzaW9uLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gZXhwcmVzc2lvbiB0aGF0IG11c3QgbWF0Y2ggemVybyBvciBtb3JlIHRpbWVzCiAgICAgLSBzdG9wT24gLSAoZGVmYXVsdD0gYGBOb25lYGApIC0gZXhwcmVzc2lvbiBmb3IgYSB0ZXJtaW5hdGluZyBzZW50aW5lbAogICAgICAgICAgKG9ubHkgcmVxdWlyZWQgaWYgdGhlIHNlbnRpbmVsIHdvdWxkIG9yZGluYXJpbHkgbWF0Y2ggdGhlIHJlcGV0aXRpb24KICAgICAgICAgIGV4cHJlc3Npb24pCgogICAgRXhhbXBsZTogc2ltaWxhciB0byA6Y2xhc3M6YE9uZU9yTW9yZWAKICAgIE5jAwAAAAAAAAADAAAABAAAAAMAAABzHgAAAHQAdAF8AIMCagJ8AXwCZAGNAgEAZAJ8AF8DZABTACkDTikBcpwCAABUKQRyLAIAAHJPAAAAcsUAAABymwEAACkDcsMAAABycAEAAHKcAgAAKQFyhwEAAHISAAAAchMAAAByxQAAAKcSAABzBAAAAAABFAF6E1plcm9Pck1vcmUuX19pbml0X19UYwQAAAAAAAAABAAAAAwAAAADAAAAczYAAAB5FHQAdAF8AIMCagJ8AXwCfAODA1MABAB0A3QEZgJrCnIwAQABAAEAfAJnAGYCUwBYAGQAUwApAU4pBXIsAgAAck8AAABy3QAAAHI8AAAAchEBAAApBHLDAAAAcm8BAAByvwAAAHKwAQAAKQFyhwEAAHISAAAAchMAAABy3QAAAKsSAABzCAAAAAABAgEUARIBehRaZXJvT3JNb3JlLnBhcnNlSW1wbGMBAAAAAAAAAAEAAAADAAAAQwAAAHM0AAAAdAB8AGQBgwJyEHwAagFTAHwAagJkAGsIci5kAnQDfABqBIMBFwBkAxcAfABfAnwAagJTACkETnIBAQAAckUBAAB6BF0uLi4pBXIoAQAAcgEBAABylQEAAHKlAAAAcnABAAApAXLDAAAAchIAAAByEgAAAHITAAAAcs4AAACxEgAAcwoAAAAAAQoBBgIKARQCehJaZXJvT3JNb3JlLl9fc3RyX18pAU4pAVQpCHIPAAAAchAAAAByEQAAAHLXAAAAcsUAAABy3QAAAHLOAAAAcjACAAByEgAAAHISAAAAKQFyhwEAAHITAAAAck8AAACcEgAAcwgAAAAICgQBDgQOBmMAAAAAAAAAAAAAAAACAAAAQAAAAHMgAAAAZQBaAWQAWgJkAWQChABaA2UDWgRkA2QEhABaBWQFUwApBtoKX051bGxUb2tlbmMBAAAAAAAAAAEAAAABAAAAQwAAAHMEAAAAZAFTACkCTkZyEgAAACkBcsMAAAByEgAAAHISAAAAchMAAAByIwEAALwSAABzAgAAAAABehNfTnVsbFRva2VuLl9fYm9vbF9fYwEAAAAAAAAAAQAAAAEAAABDAAAAcwQAAABkAVMAKQJOcrIAAAByEgAAACkBcsMAAAByEgAAAHISAAAAchMAAAByzgAAAL8SAABzAgAAAAABehJfTnVsbFRva2VuLl9fc3RyX19OKQZyDwAAAHIQAAAAchEAAAByIwEAAHJpAQAAcs4AAAByEgAAAHISAAAAchIAAAByEwAAAHKfAgAAuxIAAHMGAAAACAEIAgQBcp8CAABjAAAAAAAAAAAAAAAABAAAAAAAAABzPAAAAGUAWgFkAFoCZAFaA2UEgwBaBWUFZgGHAGYBZAJkA4QJWgZkCWQFZAaEAVoHZAdkCIQAWgiHAAQAWglTACkKcjgAAABhRwMAAE9wdGlvbmFsIG1hdGNoaW5nIG9mIHRoZSBnaXZlbiBleHByZXNzaW9uLgoKICAgIFBhcmFtZXRlcnM6CiAgICAgLSBleHByIC0gZXhwcmVzc2lvbiB0aGF0IG11c3QgbWF0Y2ggemVybyBvciBtb3JlIHRpbWVzCiAgICAgLSBkZWZhdWx0IChvcHRpb25hbCkgLSB2YWx1ZSB0byBiZSByZXR1cm5lZCBpZiB0aGUgb3B0aW9uYWwgZXhwcmVzc2lvbiBpcyBub3QgZm91bmQuCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgVVMgcG9zdGFsIGNvZGUgY2FuIGJlIGEgNS1kaWdpdCB6aXAsIHBsdXMgb3B0aW9uYWwgNC1kaWdpdCBxdWFsaWZpZXIKICAgICAgICB6aXAgPSBDb21iaW5lKFdvcmQobnVtcywgZXhhY3Q9NSkgKyBPcHRpb25hbCgnLScgKyBXb3JkKG51bXMsIGV4YWN0PTQpKSkKICAgICAgICB6aXAucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgdHJhZGl0aW9uYWwgWklQIGNvZGUKICAgICAgICAgICAgMTIzNDUKCiAgICAgICAgICAgICMgWklQKzQgZm9ybQogICAgICAgICAgICAxMjEwMS0wMDAxCgogICAgICAgICAgICAjIGludmFsaWQgWklQCiAgICAgICAgICAgIDk4NzY1LQogICAgICAgICAgICAnJycpCgogICAgcHJpbnRzOjoKCiAgICAgICAgIyB0cmFkaXRpb25hbCBaSVAgY29kZQogICAgICAgIDEyMzQ1CiAgICAgICAgWycxMjM0NSddCgogICAgICAgICMgWklQKzQgZm9ybQogICAgICAgIDEyMTAxLTAwMDEKICAgICAgICBbJzEyMTAxLTAwMDEnXQoKICAgICAgICAjIGludmFsaWQgWklQCiAgICAgICAgOTg3NjUtCiAgICAgICAgICAgICBeCiAgICAgICAgRkFJTDogRXhwZWN0ZWQgZW5kIG9mIHRleHQgKGF0IGNoYXIgNSksIChsaW5lOjEsIGNvbDo2KQogICAgYwMAAAAAAAAAAwAAAAQAAAADAAAAcy4AAAB0AHQBfACDAmoCfAFkAWQCjQIBAHwAagNqBHwAXwR8AnwAXwVkA3wAXwZkAFMAKQRORikBcqYBAABUKQdyLAIAAHI4AAAAcsUAAABycAEAAHKXAQAAcjYBAABymwEAACkDcsMAAABycAEAAHIxAQAAKQFyhwEAAHISAAAAchMAAAByxQAAAOkSAABzCAAAAAABFAEKAQYBehFPcHRpb25hbC5fX2luaXRfX1RjBAAAAAAAAAAFAAAADAAAAEMAAABzfAAAAHkcfABqAGoBfAF8AnwDZAFkAo0EXAJ9An0EVwBuVgQAdAJ0A2YCawpycgEAAQABAHwAagR8AGoFawlyanwAagBqBnJgdAd8AGoEZwGDAX0EfABqBHwEfABqAGoGPABxbnwAagRnAX0EbgRnAH0EWQBuAlgAfAJ8BGYCUwApA05GKQFysQEAACkIcnABAABytQEAAHI8AAAAchEBAAByNgEAANodX09wdGlvbmFsX19vcHRpb25hbE5vdE1hdGNoZWRylgEAAHI/AAAAKQVywwAAAHJvAQAAcr8AAABysAEAAHLHAQAAchIAAAByEgAAAHITAAAAct0AAADvEgAAcxQAAAAAAQIBHAESAQwBCAEMARACCgIKAXoST3B0aW9uYWwucGFyc2VJbXBsYwEAAAAAAAAAAQAAAAMAAABDAAAAczQAAAB0AHwAZAGDAnIQfABqAVMAfABqAmQAawhyLmQCdAN8AGoEgwEXAGQDFwB8AF8CfABqAlMAKQROcgEBAAByRQEAAHJGAQAAKQVyKAEAAHIBAQAAcpUBAABypQAAAHJwAQAAKQFywwAAAHISAAAAchIAAAByEwAAAHLOAAAA/RIAAHMKAAAAAAEKAQYCCgEUAnoQT3B0aW9uYWwuX19zdHJfXykBVCkKcg8AAAByEAAAAHIRAAAActcAAABynwIAAHKgAgAAcsUAAABy3QAAAHLOAAAAcjACAAByEgAAAHISAAAAKQFyhwEAAHITAAAAcjgAAADCEgAAcwoAAAAIJAQBBgIQBgoOYwAAAAAAAAAAAAAAAAQAAAAAAAAAcywAAABlAFoBZABaAmQBWgNkCYcAZgFkBGQFhAlaBGQKZAdkCIQBWgWHAAQAWgZTACkLckUAAABh+AkAAFRva2VuIGZvciBza2lwcGluZyBvdmVyIGFsbCB1bmRlZmluZWQgdGV4dCB1bnRpbCB0aGUgbWF0Y2hlZAogICAgZXhwcmVzc2lvbiBpcyBmb3VuZC4KCiAgICBQYXJhbWV0ZXJzOgogICAgIC0gZXhwciAtIHRhcmdldCBleHByZXNzaW9uIG1hcmtpbmcgdGhlIGVuZCBvZiB0aGUgZGF0YSB0byBiZSBza2lwcGVkCiAgICAgLSBpbmNsdWRlIC0gKGRlZmF1bHQ9IGBgRmFsc2VgYCkgaWYgVHJ1ZSwgdGhlIHRhcmdldCBleHByZXNzaW9uIGlzIGFsc28gcGFyc2VkCiAgICAgICAgICAodGhlIHNraXBwZWQgdGV4dCBhbmQgdGFyZ2V0IGV4cHJlc3Npb24gYXJlIHJldHVybmVkIGFzIGEgMi1lbGVtZW50IGxpc3QpLgogICAgIC0gaWdub3JlIC0gKGRlZmF1bHQ9IGBgTm9uZWBgKSB1c2VkIHRvIGRlZmluZSBncmFtbWFycyAodHlwaWNhbGx5IHF1b3RlZCBzdHJpbmdzIGFuZAogICAgICAgICAgY29tbWVudHMpIHRoYXQgbWlnaHQgY29udGFpbiBmYWxzZSBtYXRjaGVzIHRvIHRoZSB0YXJnZXQgZXhwcmVzc2lvbgogICAgIC0gZmFpbE9uIC0gKGRlZmF1bHQ9IGBgTm9uZWBgKSBkZWZpbmUgZXhwcmVzc2lvbnMgdGhhdCBhcmUgbm90IGFsbG93ZWQgdG8gYmUKICAgICAgICAgIGluY2x1ZGVkIGluIHRoZSBza2lwcGVkIHRlc3Q7IGlmIGZvdW5kIGJlZm9yZSB0aGUgdGFyZ2V0IGV4cHJlc3Npb24gaXMgZm91bmQsCiAgICAgICAgICB0aGUgU2tpcFRvIGlzIG5vdCBhIG1hdGNoCgogICAgRXhhbXBsZTo6CgogICAgICAgIHJlcG9ydCA9ICcnJwogICAgICAgICAgICBPdXRzdGFuZGluZyBJc3N1ZXMgUmVwb3J0IC0gMSBKYW4gMjAwMAoKICAgICAgICAgICAgICAgIyB8IFNldmVyaXR5IHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgRGF5cyBPcGVuCiAgICAgICAgICAgIC0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLQogICAgICAgICAgICAgMTAxIHwgQ3JpdGljYWwgfCBJbnRlcm1pdHRlbnQgc3lzdGVtIGNyYXNoICAgICAgICAgICAgICAgICB8ICAgICAgICAgIDYKICAgICAgICAgICAgICA5NCB8IENvc21ldGljIHwgU3BlbGxpbmcgZXJyb3Igb24gTG9naW4gKCdsb2d8bicpICAgICAgICAgfCAgICAgICAgIDE0CiAgICAgICAgICAgICAgNzkgfCBNaW5vciAgICB8IFN5c3RlbSBzbG93IHdoZW4gcnVubmluZyB0b28gbWFueSByZXBvcnRzIHwgICAgICAgICA0NwogICAgICAgICAgICAnJycKICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKQogICAgICAgIFNFUCA9IFN1cHByZXNzKCd8JykKICAgICAgICAjIHVzZSBTa2lwVG8gdG8gc2ltcGx5IG1hdGNoIGV2ZXJ5dGhpbmcgdXAgdW50aWwgdGhlIG5leHQgU0VQCiAgICAgICAgIyAtIGlnbm9yZSBxdW90ZWQgc3RyaW5ncywgc28gdGhhdCBhICd8JyBjaGFyYWN0ZXIgaW5zaWRlIGEgcXVvdGVkIHN0cmluZyBkb2VzIG5vdCBtYXRjaAogICAgICAgICMgLSBwYXJzZSBhY3Rpb24gd2lsbCBjYWxsIHRva2VuLnN0cmlwKCkgZm9yIGVhY2ggbWF0Y2hlZCB0b2tlbiwgaS5lLiwgdGhlIGRlc2NyaXB0aW9uIGJvZHkKICAgICAgICBzdHJpbmdfZGF0YSA9IFNraXBUbyhTRVAsIGlnbm9yZT1xdW90ZWRTdHJpbmcpCiAgICAgICAgc3RyaW5nX2RhdGEuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoc3RyLnN0cmlwKSkKICAgICAgICB0aWNrZXRfZXhwciA9IChpbnRlZ2VyKCJpc3N1ZV9udW0iKSArIFNFUAogICAgICAgICAgICAgICAgICAgICAgKyBzdHJpbmdfZGF0YSgic2V2IikgKyBTRVAKICAgICAgICAgICAgICAgICAgICAgICsgc3RyaW5nX2RhdGEoImRlc2MiKSArIFNFUAogICAgICAgICAgICAgICAgICAgICAgKyBpbnRlZ2VyKCJkYXlzX29wZW4iKSkKCiAgICAgICAgZm9yIHRrdCBpbiB0aWNrZXRfZXhwci5zZWFyY2hTdHJpbmcocmVwb3J0KToKICAgICAgICAgICAgcHJpbnQgdGt0LmR1bXAoKQoKICAgIHByaW50czo6CgogICAgICAgIFsnMTAxJywgJ0NyaXRpY2FsJywgJ0ludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2gnLCAnNiddCiAgICAgICAgLSBkYXlzX29wZW46IDYKICAgICAgICAtIGRlc2M6IEludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2gKICAgICAgICAtIGlzc3VlX251bTogMTAxCiAgICAgICAgLSBzZXY6IENyaXRpY2FsCiAgICAgICAgWyc5NCcsICdDb3NtZXRpYycsICJTcGVsbGluZyBlcnJvciBvbiBMb2dpbiAoJ2xvZ3xuJykiLCAnMTQnXQogICAgICAgIC0gZGF5c19vcGVuOiAxNAogICAgICAgIC0gZGVzYzogU3BlbGxpbmcgZXJyb3Igb24gTG9naW4gKCdsb2d8bicpCiAgICAgICAgLSBpc3N1ZV9udW06IDk0CiAgICAgICAgLSBzZXY6IENvc21ldGljCiAgICAgICAgWyc3OScsICdNaW5vcicsICdTeXN0ZW0gc2xvdyB3aGVuIHJ1bm5pbmcgdG9vIG1hbnkgcmVwb3J0cycsICc0NyddCiAgICAgICAgLSBkYXlzX29wZW46IDQ3CiAg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IGNhbiBhbHNvIGJlIHJlZmVyZW5jZWQgdXNpbmcgdGhlIGZpcnN0CiAgICB0b2tlbiBpbiB0aGUgZXhwcmVzc2lvbiBhcyBpdHMga2V5LiBVc2VmdWwgZm9yIHRhYnVsYXIgcmVwb3J0CiAgICBzY3JhcGluZyB3aGVuIHRoZSBmaXJzdCBjb2x1bW4gY2FuIGJlIHVzZWQgYXMgYSBpdGVtIGtleS4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgZGF0YV93b3JkID0gV29yZChhbHBoYXMpCiAgICAgICAgbGFiZWwgPSBkYXRhX3dvcmQgKyBGb2xsb3dlZEJ5KCc6JykKICAgICAgICBhdHRyX2V4cHIgPSBHcm91cChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCgogICAgICAgIHRleHQgPSAic2hhcGU6IFNRVUFSRSBwb3NuOiB1cHBlciBsZWZ0IGNvbG9yOiBsaWdodCBibHVlIHRleHR1cmU6IGJ1cmxhcCIKICAgICAgICBhdHRyX2V4cHIgPSAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikpCgogICAgICAgICMgcHJpbnQgYXR0cmlidXRlcyBhcyBwbGFpbiBncm91cHMKICAgICAgICBwcmludChPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5kdW1wKCkpCgogICAgICAgICMgaW5zdGVhZCBvZiBPbmVPck1vcmUoZXhwciksIHBhcnNlIHVzaW5nIERpY3QoT25lT3JNb3JlKEdyb3VwKGV4cHIpKSkgLSBEaWN0IHdpbGwgYXV0by1hc3NpZ24gbmFtZXMKICAgICAgICByZXN1bHQgPSBEaWN0KE9uZU9yTW9yZShHcm91cChhdHRyX2V4cHIpKSkucGFyc2VTdHJpbmcodGV4dCkKICAgICAgICBwcmludChyZXN1bHQuZHVtcCgpKQoKICAgICAgICAjIGFjY2VzcyBuYW1lZCBmaWVsZHMgYXMgZGljdCBl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gwFkCxgAawCQAXIyfAZ8BxkAfQh4bHQOfAZ8B2QLFwBkDIUCGQCDAUQAXUxcAn0JfQp8BHwKfAiDApAAcv58BnwHfAkXAGQLFwA9AFAAcdh8BXwIfAqDAnLYfAZ8B3wJFwBkCxcAPQB8BmoPfAd8CoMCAQBQAHHYVwB8B2QLNwB9B3GoVwB8AZABcDx8AwwAkAFy2HwCkAFy2HlodA18BoMBdA1kDWoQfAaDAYMBawKQAXKKdBFkDmQNahBkD2QQhAB8BkQAgwGDARYAgwFqEmQRahB8BoMBgwFTAHQRZBJqEGQTZBCEAHwGRACDAYMBgwFqEmQRahB8BoMBgwFTAFcAbiYEAHQTawqQAXLWAQABAAEAdAJqA2QUdAtkAmQDjQMBAFkAbgJYAHQUhwBmAWQVZBCECHwGRACDAYMBahJkEWoQfAaDAYMBUwApFmGDBAAASGVscGVyIHRvIHF1aWNrbHkgZGVmaW5lIGEgc2V0IG9mIGFsdGVybmF0aXZlIExpdGVyYWxzLCBhbmQgbWFrZXMKICAgIHN1cmUgdG8gZG8gbG9uZ2VzdC1maXJzdCB0ZXN0aW5nIHdoZW4gdGhlcmUgaXMgYSBjb25mbGljdCwKICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIGlucHV0IG9yZGVyLCBidXQgcmV0dXJucwogICAgYSA6Y2xhc3M6YE1hdGNoRmlyc3RgIGZvciBiZXN0IHBlcmZvcm1hbmNlLgoKICAgIFBhcmFtZXRlcnM6CgogICAgIC0gc3RycyAtIGEgc3RyaW5nIG9mIHNwYWNlLWRlbGltaXRlZCBsaXRlcmFscywgb3IgYSBjb2xsZWN0aW9uIG9mCiAgICAgICBzdHJpbmcgbGl0ZXJhbHMKICAgICAtIGNhc2VsZXNzIC0gKGRlZmF1bHQ9IGBgRmFsc2VgYCkgLSB0cmVhdCBhbGwgbGl0ZXJhbHMgYXMKICAgICAgIGNhc2VsZXNzCiAgICAgLSB1c2VSZWdleCAtIChkZWZhdWx0PSBgYFRydWVgYCkgLSBhcyBhbiBvcHRpbWl6YXRpb24sIHdpbGwKICAgICAgIGdlbmVyYXRlIGEgUmVnZXggb2JqZWN0OyBvdGhlcndpc2UsIHdpbGwgZ2VuZXJhdGUKICAgICAgIGEgOmNsYXNzOmBNYXRjaEZpcnN0YCBvYmplY3QgKGlmIGBgY2FzZWxlc3M9VHJ1ZWBgIG9yIGBgYXNLZXl3b3JkPVRydWVgYCwgb3IgaWYKICAgICAgIGNyZWF0aW5nIGEgOmNsYXNzOmBSZWdleGAgcmFpc2VzIGFuIGV4Y2VwdGlvbikKICAgICAtIGFzS2V5d29yZCAtIChkZWZhdWx0PWBgRmFsc2VgYCkgLSBlbmZvcmNlIEtleXdvcmQtc3R5bGUgbWF0Y2hpbmcgb24gdGhlCiAgICAgICBnZW5lcmF0ZWQgZXhwcmVzc2lvbnMKCiAgICBFeGFtcGxlOjoKCiAgICAgICAgY29tcF9vcGVyID0gb25lT2YoIjwgPSA+IDw9ID49ICE9IikKICAgICAgICB2YXIgPSBXb3JkKGFscGhhcykKICAgICAgICBudW1iZXIgPSBXb3JkKG51bXMpCiAgICAgICAgdGVybSA9IHZhciB8IG51bWJlcgogICAgICAgIGNvbXBhcmlzb25fZXhwciA9IHRlcm0gKyBjb21wX29wZXIgKyB0ZXJtCiAgICAgICAgcHJpbnQoY29tcGFyaXNvbl9leHByLnNlYXJjaFN0cmluZygiQiA9IDEyICBBQT0yMyBCPD1BQSBBQT4xMiIpKQoKICAgIHByaW50czo6CgogICAgICAgIFtbJ0InLCAnPScsICcxMiddLCBbJ0FBJywgJz0nLCAnMjMnXSwgWydCJywgJzw9JywgJ0FBJ10sIFsnQUEnLCAnPicsICcxMiddXQogICAgel9Nb3JlIHRoYW4gb25lIHN0cmluZyBhcmd1bWVudCBwYXNzZWQgdG8gb25lT2YsIHBhc3MgY2hvaWNlcyBhcyBhIGxpc3Qgb3Igc3BhY2UtZGVsaW1pdGVkIHN0cmluZ3KTAAAAKQFy7wEAAGMCAAAAAAAAAAIAAAACAAAAUwAAAHMQAAAAfABqAIMAfAFqAIMAawJTACkBTikBcjgCAAApAnI/AQAA2gFichIAAAByEgAAAHITAAAAcpkAAAB7FQAAcwAAAAB6F29uZU9mLjxsb2NhbHM+LjxsYW1iZGE+YwIAAAAAAAAAAgAAAAIAAABTAAAAcxIAAAB8AWoAgwBqAXwAagCDAIMBUwApAU4pAnI4AgAAchQAAAApAnI/AQAAcr0CAAByEgAAAHISAAAAchMAAABymQAAAHwVAABzAAAAAGMCAAAAAAAAAAIAAAACAAAAUwAAAHMIAAAAfAB8AWsCUwApAU5yEgAAACkCcj8BAAByvQIAAHISAAAAchIAAAByEwAAAHKZAAAAfxUAAHMAAAAAYwIAAAAAAAAAAgAAAAIAAABTAAAAcwoAAAB8AWoAfACDAVMAKQFOKQFyFAAAACkCcj8BAAByvQIAAHISAAAAchIAAAByEwAAAHKZAAAAgBUAAHMAAAAAejZJbnZhbGlkIGFyZ3VtZW50IHRvIG9uZU9mLCBleHBlY3RlZCBzdHJpbmcgb3IgaXRlcmFibGVyAQAAAHKUAAAATnKyAAAAegRbJXNdYwEAAAAAAAAAAgAAAAMAAABzAAAAcxYAAAB8AF0OfQF0AHwBgwFWAAEAcQJkAFMAKQFOKQFyTgIAACkCchUAAADaA3N5bXISAAAAchIAAAByEwAAAHKnAAAAoxUAAHMCAAAABAB6GG9uZU9mLjxsb2NhbHM+LjxnZW5leHByPnoDIHwg+gF8YwEAAAAAAAAAAgAAAAMAAABzAAAAcxgAAAB8AF0QfQF0AGoBfAGDAVYAAQBxAmQAUwApAU4pAnKQAAAAclACAAApAnIVAAAAcr4CAAByEgAAAHISAAAAchMAAABypwAAAKUVAABzAgAAAAQAejdFeGNlcHRpb24gY3JlYXRpbmcgUmVnZXggZm9yIG9uZU9mLCBidWlsZGluZyBNYXRjaEZpcnN0YwEAAAAAAAAAAgAAAAMAAAAzAAAAcxYAAAB8AF0OfQGIAHwBgwFWAAEAcQJkAFMAKQFOchIAAAApAnIVAAAAcr4CAAApAdoRcGFyc2VFbGVtZW50Q2xhc3NyEgAAAHITAAAAcqcAAACrFQAAcwIAAAAEACkVcpoAAAByDgEAAHLyAQAAcvMBAAByIwAAAHIkAAAAci4AAAByMQAAAHKrAAAAcgoAAAByCQEAAHL0AQAAcjQAAAByzQAAAHLpAAAAcjcBAABy0QAAAHJEAAAAcqkBAAByZQEAAHIzAAAAKQvaBHN0cnNyNwIAAFoIdXNlUmVnZXhyTQIAAFoHaXNlcXVhbFoFbWFza3NaB3N5bWJvbHNy8gAAAFoDY3Vych0BAAByPQEAAHISAAAAKQFywAIAAHITAAAAcnEAAABWFQAAc1IAAAAAIAoBBgEIAgQBCAEIAQ4CCAEIAQwCBAEKAQoBCgEKAgYBCgEEAQYCBgMEARQBCAEeAQwBDgEEAQoBDgEMAQYCDAIUAgIBGAEoAigBEAEGARADYwIAAAAAAAAAAgAAAAUAAABDAAAAcxQAAAB0AHQBdAJ8AHwBFwCDAYMBgwFTACkBYekFAABIZWxwZXIgdG8gZWFzaWx5IGFuZCBjbGVhcmx5IGRlZmluZSBhIGRpY3Rpb25hcnkgYnkgc3BlY2lmeWluZwogICAgdGhlIHJlc3BlY3RpdmUgcGF0dGVybnMgZm9yIHRoZSBrZXkgYW5kIHZhbHVlLiAgVGFrZXMgY2FyZSBvZgogICAgZGVmaW5pbmcgdGhlIDpjbGFzczpgRGljdGAsIDpjbGFzczpgWmVyb09yTW9yZWAsIGFuZAogICAgOmNsYXNzOmBHcm91cGAgdG9rZW5zIGluIHRoZSBwcm9wZXIgb3JkZXIuICBUaGUga2V5IHBhdHRlcm4KICAgIGNhbiBpbmNsdWRlIGRlbGltaXRpbmcgbWFya2VycyBvciBwdW5jdHVhdGlvbiwgYXMgbG9uZyBhcyB0aGV5IGFyZQogICAgc3VwcHJlc3NlZCwgdGhlcmVieSBsZWF2aW5nIHRoZSBzaWduaWZpY2FudCBrZXkgdGV4dC4gIFRoZSB2YWx1ZQogICAgcGF0dGVybiBjYW4gaW5jbHVkZSBuYW1lZCByZXN1bHRzLCBzbyB0aGF0IHRoZSA6Y2xhc3M6YERpY3RgIHJlc3VsdHMKICAgIGNhbiBpbmNsdWRlIG5hbWVkIHRva2VuIGZpZWxkcy4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgdGV4dCA9ICJzaGFwZTogU1FVQVJFIHBvc246IHVwcGVyIGxlZnQgY29sb3I6IGxpZ2h0IGJsdWUgdGV4dHVyZTogYnVybGFwIgogICAgICAgIGF0dHJfZXhwciA9IChsYWJlbCArIFN1cHByZXNzKCc6JykgKyBPbmVPck1vcmUoZGF0YV93b3JkLCBzdG9wT249bGFiZWwpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKSkKICAgICAgICBwcmludChPbmVPck1vcmUoYXR0cl9leHByKS5wYXJzZVN0cmluZyh0ZXh0KS5kdW1wKCkpCgogICAgICAgIGF0dHJfbGFiZWwgPSBsYWJlbAogICAgICAgIGF0dHJfdmFsdWUgPSBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcE9uPWxhYmVsKS5zZXRQYXJzZUFjdGlvbignICcuam9pbikKCiAgICAgICAgIyBzaW1pbGFyIHRvIERpY3QsIGJ1dCBzaW1wbGVyIGNhbGwgZm9ybWF0CiAgICAgICAgcmVzdWx0ID0gZGljdE9mKGF0dHJfbGFiZWwsIGF0dHJfdmFsdWUpLnBhcnNlU3RyaW5nKHRleHQpCiAgICAgICAgcHJpbnQocmVzdWx0LmR1bXAoKSkKICAgICAgICBwcmludChyZXN1bHRbJ3NoYXBlJ10pCiAgICAgICAgcHJpbnQocmVzdWx0LnNoYXBlKSAgIyBvYmplY3QgYXR0cmlidXRlIGFjY2VzcyB3b3JrcyB0b28KICAgICAgICBwcmludChyZXN1bHQuYXNEaWN0KCkpCgogICAgcHJpbnRzOjoKCiAgICAgICAgW1snc2hhcGUnLCAnU1FVQVJFJ10sIFsncG9zbicsICd1cHBlciBsZWZ0J10sIFsnY29sb3InLCAnbGlnaHQgYmx1ZSddLCBbJ3RleHR1cmUnLCAnYnVybGFwJ11dCiAgICAgICAgLSBjb2xvcjogbGlnaHQgYmx1ZQogICAgICAgIC0gcG9zbjogdXBwZXIgbGVmdAogICAgICAgIC0gc2hhcGU6IFNRVUFSRQogICAgICAgIC0gdGV4dHVyZTogYnVybGFwCiAgICAgICAgU1FVQVJFCiAgICAgICAgU1FVQVJFCiAgICAgICAgeydjb2xvcic6ICdsaWdodCBibHVlJywgJ3NoYXBlJzogJ1NRVUFSRScsICdwb3NuJzogJ3VwcGVyIGxlZnQnLCAndGV4dHVyZSc6ICdidXJsYXAnfQogICAgKQNyJwAAAHI2AAAAci0AAAApAnI1AQAAch4BAAByEgAAAHISAAAAchMAAAByXwAAAK0VAABzAgAAAAAlYwIAAAAAAAAABgAAAAMAAABDAAAAc14AAAB0AIMAagFkAWQChACDAX0CfAJqAoMAfQNkA3wDXwN8AmQEgwF8ABcAfANkBYMBFwB9BHwBckBkBmQChAB9BW4IZAdkCIQAfQV8BGoBfAWDAQEAfABqBHwEXwR8BFMAKQlhlwQAAEhlbHBlciB0byByZXR1cm4gdGhlIG9yaWdpbmFsLCB1bnRva2VuaXplZCB0ZXh0IGZvciBhIGdpdmVuCiAgICBleHByZXNzaW9uLiAgVXNlZnVsIHRvIHJlc3RvcmUgdGhlIHBhcnNlZCBmaWVsZHMgb2YgYW4gSFRNTCBzdGFydAogICAgdGFnIGludG8gdGhlIHJhdyB0YWcgdGV4dCBpdHNlbGYsIG9yIHRvIHJldmVydCBzZXBhcmF0ZSB0b2tlbnMgd2l0aAogICAgaW50ZXJ2ZW5pbmcgd2hpdGVzcGFjZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCBtYXRjaGluZyBpbnB1dCB0ZXh0LiBCeQogICAgZGVmYXVsdCwgcmV0dXJucyBhc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHBhcnNlZCB0ZXh0LgoKICAgIElmIHRoZSBvcHRpb25hbCBgYGFzU3RyaW5nYGAgYXJndW1lbnQgaXMgcGFzc2VkIGFzCiAgICBgYEZhbHNlYGAsIHRoZW4gdGhlIHJldHVybiB2YWx1ZSBpcwogICAgYSA6Y2xhc3M6YFBhcnNlUmVzdWx0c2AgY29udGFpbmluZyBhbnkgcmVzdWx0cyBuYW1lcyB0aGF0CiAgICB3ZXJlIG9yaWdpbmFsbHkgbWF0Y2hlZCwgYW5kIGEgc2luZ2xlIHRva2VuIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsCiAgICBtYXRjaGVkIHRleHQgZnJvbSB0aGUgaW5wdXQgc3RyaW5nLiAgU28gaWYgdGhlIGV4cHJlc3Npb24gcGFzc2VkIHRvCiAgICA6Y2xhc3M6YG9yaWdpbmFsVGV4dEZvcmAgY29udGFpbnMgZXhwcmVzc2lvbnMgd2l0aCBkZWZpbmVkCiAgICByZXN1bHRzIG5hbWVzLCB5b3UgbXVzdCBzZXQgYGBhc1N0cmluZ2BgIHRvIGBgRmFsc2VgYCBpZiB5b3UKICAgIHdhbnQgdG8gcHJlc2VydmUgdGhvc2UgcmVzdWx0cyBuYW1lIHZhbHVlcy4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgc3JjID0gInRoaXMgaXMgdGVzdCA8Yj4gYm9sZCA8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ZSBmb3J3YXJkZWQgdG8gdGhlIGdpdmVuIGZ1bmN0aW9uIGFzIGFkZGl0aW9uYWwgYXJndW1lbnRzCiAgICBhZnRlciB0aGUgdG9rZW4sIGFzIGluCiAgICBgYGhleF9pbnRlZ2VyID0gV29yZChoZXhudW1zKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChpbnQsIDE2KSlgYCwKICAgIHdoaWNoIHdpbGwgY29udmVydCB0aGUgcGFyc2VkIGRhdGEgdG8gYW4gaW50ZWdlciB1c2luZyBiYXNlIDE2LgoKICAgIEV4YW1wbGUgKGNvbXBhcmUgdGhlIGxhc3QgdG8gZXhhbXBsZSBpbiA6Y2xhc3M6YFBhcnNlckVsZW1lbnQudHJhbnNmb3JtU3RyaW5nYDo6CgogICAgICAgIGhleF9pbnRzID0gT25lT3JNb3JlKFdvcmQoaGV4bnVtcykpLnNldFBhcnNlQWN0aW9uKHRva2VuTWFwKGludCwgMTYpKQogICAgICAgIGhleF9pbnRzLnJ1blRlc3RzKCcnJwogICAgICAgICAgICAwMCAxMSAyMiBhYSBGRiAwYSAwZCAxYQogICAgICAgICAgICAnJycpCgogICAgICAgIHVwcGVyd29yZCA9IFdvcmQoYWxwaGFzKS5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcChzdHIudXBwZXIpKQogICAgICAgIE9uZU9yTW9yZSh1cHBlcndvcmQpLnJ1blRlc3RzKCcnJwogICAgICAgICAgICBteSBraW5nZG9tIGZvciBhIGhvcnNlCiAgICAgICAgICAgICcnJykKCiAgICAgICAgd2QgPSBXb3JkKGFscGhhcykuc2V0UGFyc2VBY3Rpb24odG9rZW5NYXAoc3RyLnRpdGxlKSkKICAgICAgICBPbmVPck1vcmUod2QpLnNldFBhcnNlQWN0aW9uKCcgJy5qb2luKS5ydW5UZXN0cygnJycKICAgICAgICAgICAgbm93IGlzIHRoZSB3aW50ZXIgb2Ygb3VyIGRpc2NvbnRlbnQgbWFkZSBnbG9yaW91cyBzdW1tZXIgYnkgdGhpcyBzdW4gb2YgeW9yawogICAgICAgICAgICAnJycpCgogICAgcHJpbnRzOjoKCiAgICAgICAgMDAgMTEgMjIgYWEg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IG9yCiAgICA6Y2xhc3M6YG1ha2VIVE1MVGFnc2AuIFVzZSBgYHdpdGhBdHRyaWJ1dGVgYCB0byBxdWFsaWZ5CiAgICBhIHN0YXJ0aW5nIHRhZyB3aXRoIGEgcmVxdWlyZWQgYXR0cmlidXRlIHZhbHVlLCB0byBhdm9pZCBmYWxzZQogICAgbWF0Y2hlcyBvbiBjb21tb24gdGFncyBzdWNoIGFzIGBgPFREPmBgIG9yIGBgPERJVj5gYC4KCiAgICBDYWxsIGBgd2l0aEF0dHJpYnV0ZWBgIHdpdGggYSBzZXJpZXMgb2YgYXR0cmlidXRlIG5hbWVzIGFuZAogICAgdmFsdWVzLiBTcGVjaWZ5IHRoZSBsaXN0IG9mIGZpbHRlciBhdHRyaWJ1dGVzIG5hbWVzIGFuZCB2YWx1ZXMgYXM6CgogICAgIC0ga2V5d29yZCBhcmd1bWVudHMsIGFzIGluIGBgKGFsaWduPSJyaWdodCIpYGAsIG9yCiAgICAgLSBhcyBhbiBleHBsaWNpdCBkaWN0IHdpdGggYGAqKmBgIG9wZXJhdG9yLCB3aGVuIGFuIGF0dHJpYnV0ZQogICAgICAgbmFtZSBpcyBhbHNvIGEgUHl0aG9uIHJlc2VydmVkIHdvcmQsIGFzIGluIGBgKip7ImNsYXNzIjoiQ3VzdG9tZXIiLCAiYWxpZ24iOiJyaWdodCJ9YGAKICAgICAtIGEgbGlzdCBvZiBuYW1lLXZhbHVlIHR1cGxlcywgYXMgaW4gYGAoKCJuczE6Y2xhc3MiLCAiQ3VzdG9tZXIiKSwgKCJuczI6YWxpZ24iLCAicmlnaHQiKSlgYAoKICAgIEZvciBhdHRyaWJ1dGUgbmFtZXMgd2l0aCBhIG5hbWVzcGFjZSBwcmVmaXgsIHlvdSBtdXN0IHVzZSB0aGUgc2Vjb25kCiAgICBmb3JtLiAgQXR0cmlidXRlIG5hbWVzIGFyZSBtYXRjaGVkIGluc2Vuc2l0aXZlIHRvIHVwcGVyL2xvd2VyIGNhc2UuCgogICAgSWYganVzdCB0ZXN0aW5nIGZvciBgYGNsYXNzYGAgKHdpdGggb3Igd2l0aG91dCBhIG5hbWVzcGFjZSksIHVzZQogICAgOmNsYXNzOmB3aXRoQ2xhc3NgLgoKICAgIFRvIHZlcmlmeSB0aGF0IHRoZSBhdHRyaWJ1dGUgZXhpc3RzLCBidXQgd2l0aG91dCBzcGVjaWZ5aW5nIGEgdmFsdWUsCiAgICBwYXNzIGBgd2l0aEF0dHJpYnV0ZS5BTllfVkFMVUVgYCBhcyB0aGUgdmFsdWUuCgogICAgRXhhbXBsZTo6CgogICAgICAgIGh0bWwgPSAnJycKICAgICAgICAgICAgPGRpdj4KICAgICAgICAgICAgU29tZSB0ZXh0CiAgICAgICAgICAgIDxkaXYgdHlwZT0iZ3JpZCI+MSA0IDAgMSAwPC9kaXY+CiAgICAgICAgICAgIDxkaXYgdHlwZT0iZ3JhcGgiPjEsMyAyLDMgMSwxPC9kaXY+CiAgICAgICAgICAgIDxkaXY+dGhpcyBoYXMgbm8gdHlwZTwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgJycnCiAgICAgICAgZGl2LGRpdl9lbmQgPSBtYWtlSFRNTFRhZ3MoImRpdiIpCgogICAgICAgICMgb25seSBtYXRjaCBkaXYgdGFnIGhhdmluZyBhIHR5cGUgYXR0cmlidXRlIHdpdGggdmFsdWUgImdyaWQiCiAgICAgICAgZGl2X2dyaWQgPSBkaXYoKS5zZXRQYXJzZUFjdGlvbih3aXRoQXR0cmlidXRlKHR5cGU9ImdyaWQiKSkKICAgICAgICBncmlkX2V4cHIgPSBkaXZfZ3JpZCArIFNraXBUbyhkaXYgfCBkaXZfZW5kKSgiYm9keSIpCiAgICAgICAgZm9yIGdyaWRfaGVhZGVyIGluIGdyaWRfZXhwci5zZWFyY2hTdHJpbmcoaHRtbCk6CiAgICAgICAgICAgIHByaW50KGdyaWRfaGVhZGVyLmJvZHkpCgogICAgICAgICMgY29uc3RydWN0IGEgbWF0Y2ggd2l0aCBhbnkgZGl2IHRhZyBoYXZpbmcgYSB0eXBlIGF0dHJpYnV0ZSwgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUKICAgICAgICBkaXZfYW55X3R5cGUgPSBkaXYoKS5zZXRQYXJzZUFjdGlvbih3aXRoQXR0cmlidXRlKHR5cGU9d2l0aEF0dHJpYnV0ZS5BTllfVkFMVUUpKQogICAgICAgIGRpdl9leHByID0gZGl2X2FueV90eXBlICsgU2tpcFRvKGRpdiB8IGRpdl9lbmQpKCJib2R5IikKICAgICAgICBmb3IgZGl2X2hlYWRlciBpbiBkaXZfZXhwci5zZWFyY2hTdHJpbmcoaHRtbCk6CiAgICAgICAgICAgIHByaW50KGRpdl9oZWFkZXIuYm9keSkKCiAgICBwcmludHM6OgoKICAgICAgICAxIDQgMCAxIDAKCiAgICAgICAgMSA0IDAgMSAwCiAgICAgICAgMSwzIDIsMyAxLDEKICAgIE5jAQAAAAAAAAADAAAABAAAAFMAAABzGAAAAGcAfABdEFwCfQF9AnwBfAJmApECcQRTAHISAAAAchIAAAApA3IVAAAAchUBAAByEgEAAHISAAAAchIAAAByEwAAAHIXAAAALxcAAHMCAAAABgB6IXdpdGhBdHRyaWJ1dGUuPGxvY2Fscz4uPGxpc3Rjb21wPmMDAAAAAAAAAAUAAAAIAAAAEwAAAHNeAAAAeFiIAEQAXVBcAn0DfQR8A3wCawdyJnQAfAB8AWQBfAMXAIMDggF8BHQBagJrA3IGfAJ8AxkAfARrA3IGdAB8AHwBZAJ8A3wCfAMZAHwEZgMWAIMDggFxBlcAZABTACkDTnoWbm8gbWF0Y2hpbmcgYXR0cmlidXRlIHorYXR0cmlidXRlICclcycgaGFzIHZhbHVlICclcycsIG11c3QgYmUgJyVzJykDcjwAAABygwAAANoJQU5ZX1ZBTFVFKQVyqgAAAHK3AAAAcscBAABaCGF0dHJOYW1lWglhdHRyVmFsdWUpAdoFYXR0cnNyEgAAAHITAAAAcrsAAAAwFwAAcwwAAAAAAQ4BCAEQARYBCAF6GXdpdGhBdHRyaWJ1dGUuPGxvY2Fscz4ucGEpAXIbAQAAKQNywgAAAFoIYXR0ckRpY3RyuwAAAHISAAAAKQFy2wIAAHITAAAAcoMAAADzFgAAcwwAAAAAOAQBDgIIAQ4BDAdjAgAAAAAAAAADAAAABAAAAEMAAABzHgAAAHwBcgxkAXwBFgBuAmQCfQJ0AGYAfAJ8AGkBjgFTACkDYckDAABTaW1wbGlmaWVkIHZlcnNpb24gb2YgOmNsYXNzOmB3aXRoQXR0cmlidXRlYCB3aGVuCiAgICBtYXRjaGluZyBvbiBhIGRpdiBjbGFzcyAtIG1hZGUgZGlmZmljdWx0IGJlY2F1c2UgYGBjbGFzc2BgIGlzCiAgICBhIHJlc2VydmVkIHdvcmQgaW4gUHl0aG9uLgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBodG1sID0gJycnCiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIFNvbWUgdGV4dAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJncmlkIj4xIDQgMCAxIDA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZ3JhcGgiPjEsMyAyLDMgMSwxPC9kaXY+CiAgICAgICAgICAgIDxkaXY+dGhpcyAmbHQ7ZGl2Jmd0OyBoYXMgbm8gY2xhc3M8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICcnJwogICAgICAgIGRpdixkaXZfZW5kID0gbWFrZUhUTUxUYWdzKCJkaXYiKQogICAgICAgIGRpdl9ncmlkID0gZGl2KCkuc2V0UGFyc2VBY3Rpb24od2l0aENsYXNzKCJncmlkIikpCgogICAgICAgIGdyaWRfZXhwciA9IGRpdl9ncmlkICsgU2tpcFRvKGRpdiB8IGRpdl9lbmQpKCJib2R5IikKICAgICAgICBmb3IgZ3JpZF9oZWFkZXIgaW4gZ3JpZF9leHByLnNlYXJjaFN0cmluZyhodG1sKToKICAgICAgICAgICAgcHJpbnQoZ3JpZF9oZWFkZXIuYm9keSkKCiAgICAgICAgZGl2X2FueV90eXBlID0gZGl2KCkuc2V0UGFyc2VBY3Rpb24od2l0aENsYXNzKHdpdGhBdHRyaWJ1dGUuQU5ZX1ZBTFVFKSkKICAgICAgICBkaXZfZXhwciA9IGRpdl9hbnlfdHlwZSArIFNraXBUbyhkaXYgfCBkaXZfZW5kKSgiYm9keSIpCiAgICAgICAgZm9yIGRpdl9oZWFkZXIgaW4gZGl2X2V4cHIuc2VhcmNoU3RyaW5nKGh0bWwpOgogICAgICAgICAgICBwcmludChkaXZfaGVhZGVyLmJvZHkpCgogICAgcHJpbnRzOjoKCiAgICAgICAgMSA0IDAgMSAwCgogICAgICAgIDEgNCAwIDEgMAogICAgICAgIDEsMyAyLDMgMSwxCiAgICB6CCVzOmNsYXNz2gVjbGFzcykBcoMAAAApA1oJY2xhc3NuYW1l2gluYW1lc3BhY2VaCWNsYXNzYXR0cnISAAAAchIAAAByEwAAAHKJAAAAOhcAAHMEAAAAACMQAfoBKHJrAgAAYwQAAAAAAAAAEgAAAAcAAABDAAAAc7YCAABHAGQBZAKEAGQCdACDA30EdAGDAH0FfAB8AnwFFwB8AxcAQgB9BpACeIB0AnwBgwFEAJACXXJcAn0HfQh8CGQNFwBkA2QEhQIZAFwEfQl9Cn0LfQx8CmQFawByZGQGfAkWAG4GZAd8CRYAfQ18CmQFawJymHwJZANrCHOIdAN8CYMBZAhrA3KQdARkCYMBggF8CVwCfQ59D3QBgwBqBXwNgwF9EHwLdAZqB2sCkAFyeHwKZAprAnLWfAR8BnwJFwCDAXQIfAZ0CXwJgwEXAIMBFwB9EW6gfApkCGsCkAFyLnwJZANrCZABchB8BHwGfAkXAHwGFwCDAXQIfAZ0CXwJfAYXAIMBFwCDARcAfRFuHHwEfAZ8BhcAgwF0CHwGdAl8BoMBFwCDARcAfRFuSHwKZAVrApABcm58BHwGfA4XAHwGFwB8DxcAfAYXAIMBdAh8BnQJfA58BhcAfA8XAHwGFwCDARcAgwEXAH0Rbgh0BGQLgwGCAW7sfAt0BmoKawKQAnJcfApkCmsCkAFyvnQLfAl0DIMCkAFzonQMfAmDAX0JfAR8CWoNfBAXAIMBdAh8CXwQFwCDARcAfRFunHwKZAhrApACchZ8CWQDawmQAXL4fAR8BnwJFwB8EBcAgwF0CHwGdAl8CXwQFwCDARcAgwEXAH0Rbhx8BHwGfBAXAIMBdAh8BnQJfBCDARcAgwEXAH0RbkR8CmQFawKQAnJSfAR8BnwOFwB8EBcAfA8XAHwQFwCDAXQIfAZ8DhcAfBAXAHwPFwB8EBcAgwEXAH0Rbgh0BGQLgwGCAW4IdARkDIMBggF8DJACcpB0C3wMdA50D2YCgwKQAnKGfBFqEHwMjgABAG4KfBFqEHwMgwEBAHwQfBFqBXwNgwF8BkIASwB9EHwQfQZxMlcAfAV8BksAfQV8BVMAKQ5hbAoAAEhlbHBlciBtZXRob2QgZm9yIGNvbnN0cnVjdGluZyBncmFtbWFycyBvZiBleHByZXNzaW9ucyBtYWRlIHVwIG9mCiAgICBvcGVyYXRvcnMgd29ya2luZyBpbiBhIHByZWNlZGVuY2UgaGllcmFyY2h5LiAgT3BlcmF0b3JzIG1heSBiZSB1bmFyeQogICAgb3IgYmluYXJ5LCBsZWZ0LSBvciByaWdodC1hc3NvY2lhdGl2ZS4gIFBhcnNlIGFjdGlvbnMgY2FuIGFsc28gYmUKICAgIGF0dGFjaGVkIHRvIG9wZXJhdG9yIGV4cHJlc3Npb25zLiBUaGUgZ2VuZXJhdGVkIHBhcnNlciB3aWxsIGFsc28KICAgIHJlY29nbml6ZSB0aGUgdXNlIG9mIHBhcmVudGhlc2VzIHRvIG92ZXJyaWRlIG9wZXJhdG9yIHByZWNlZGVuY2VzCiAgICAoc2VlIGV4YW1wbGUgYmVsb3cpLgoKICAgIE5vdGU6IGlmIHlvdSBkZWZpbmUgYSBkZWVwIG9wZXJhdG9yIGxpc3QsIHlvdSBtYXkgc2VlIHBlcmZvcm1hbmNlCiAgICBpc3N1ZXMgd2hlbiB1c2luZyBpbmZpeE5vdGF0aW9uLiBTZWUKICAgIDpjbGFzczpgUGFyc2VyRWxlbWVudC5lbmFibGVQYWNrcmF0YCBmb3IgYSBtZWNoYW5pc20gdG8gcG90ZW50aWFsbHkKICAgIGltcHJvdmUgeW91ciBwYXJzZXIgcGVyZm9ybWFuY2UuCgogICAgUGFyYW1ldGVyczoKICAgICAtIGJhc2VFeHByIC0gZXhwcmVzc2lvbiByZXByZXNlbnRpbmcgdGhlIG1vc3QgYmFzaWMgZWxlbWVudCBmb3IgdGhlCiAgICAgICBuZXN0ZWQKICAgICAtIG9wTGlzdCAtIGxpc3Qgb2YgdHVwbGVzLCBvbmUgZm9yIGVhY2ggb3BlcmF0b3IgcHJlY2VkZW5jZSBsZXZlbAogICAgICAgaW4gdGhlIGV4cHJlc3Npb24gZ3JhbW1hcjsgZWFjaCB0dXBsZSBpcyBvZiB0aGUgZm9ybSBgYChvcEV4cHIsCiAgICAgICBudW1UZXJtcywgcmlnaHRMZWZ0QXNzb2MsIHBhcnNlQWN0aW9uKWBgLCB3aGVyZToKCiAgICAgICAtIG9wRXhwciBpcyB0aGUgcHlwYXJzaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBvcGVyYXRvcjsgbWF5IGFsc28KICAgICAgICAgYmUgYSBzdHJpbmcsIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIGEgTGl0ZXJhbDsgaWYgbnVtVGVybXMKICAgICAgICAgaXMgMywgb3BFeHByIGlzIGEgdHVwbGUgb2YgdHdvIGV4cHJlc3Npb25zLCBmb3IgdGhlIHR3bwogICAgICAgICBvcGVyYXRvcnMgc2VwYXJhdGluZyB0aGUgMyB0ZXJtcwogICAgICAgLSBudW1UZXJtcyBpcyB0aGUgbnVtYmVyIG9mIHRlcm1zIGZvciB0aGlzIG9wZXJhdG9yIChtdXN0IGJlIDEsCiAgICAgICAgIDIsIG9yIDMpCiAgICAgICAtIHJpZ2h0TGVmdEFzc29jIGlzIHRoZSBpbmRpY2F0b3Igd2hldGhlciB0aGUgb3BlcmF0b3IgaXMgcmlnaHQKICAgICAgICAgb3IgbGVmdCBhc3NvY2lhdGl2ZSwgdXNpbmcgdGhlIHB5cGFyc2luZy1kZWZpbmVkIGNvbnN0YW50cwogICAgICAgICBgYG9wQXNzb2MuUklHSFRgYCBhbmQgYGBvcEFzc29jLkxFRlRgYC4KICAgICAgIC0gcGFyc2VBY3Rpb24gaXMgdGhlIHBhcnNlIGFjdGlvbiB0byBiZSBhc3NvY2lhdGVkIHdpdGgKICAgICAgICAgZXhwcmVzc2lvbnMgbWF0Y2hpbmcgdGhpcyBvcGVyYXRvciBleHByZXNzaW9uICh0aGUgcGFyc2UgYWN0aW9uCiAgICAgICAgIHR1cGxlIG1lbWJlciBtYXkgYmUgb21pdHRlZCk7IGlmIHRoZSBwYXJzZSBhY3Rpb24gaXMgcGFzc2VkCiAgICAgICAgIGEgdHVwbGUgb3IgbGlzdCBvZiBmdW5jdGlvbnMsIHRoaXMgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nCiAgICAgICAgIGBgc2V0UGFyc2VBY3Rpb24oKmZuKWBgCiAgICAgICAgICg6Y2xhc3M6YFBhcnNlckVsZW1lbnQuc2V0UGFyc2VBY3Rpb25gKQogICAgIC0gbHBhciAtIGV4cHJlc3Npb24gZm9yIG1hdGNoaW5nIGxlZnQtcGFyZW50aGVzZXMKICAgICAgIChkZWZhdWx0PSBgYFN1cHByZXNzKCcoJylgYCkKICAgICAtIHJwYXIgLSBleHByZXNzaW9uIGZvciBtYXRjaGluZyByaWdodC1wYXJlbnRoZXNlcwogICAgICAgKGRlZmF1bHQ9IGBgU3VwcHJlc3MoJyknKWBgKQoKICAgIEV4YW1wbGU6OgoKICAgICAgICAjIHNpbXBsZSBleGFtcGxlIG9mIGZvdXItZnVuY3Rpb24gYXJpdGhtZXRpYyB3aXRoIGludHMgYW5kCiAgICAgICAgIyB2YXJpYWJsZSBuYW1lcwogICAgICAgIGludGVnZXIgPSBweXBhcnNpbmdfY29tbW9uLnNpZ25lZF9pbnRlZ2VyCiAgICAgICAgdmFybmFtZSA9IHB5cGFyc2luZ19jb21tb24uaWRlbnRpZmllcgoKICAgICAgICBhcml0aF9leHByID0gaW5maXhOb3RhdGlvbihpbnRlZ2VyIHwgdmFybmFtZSwKICAgICAgICAgICAgWwogICAgICAgICAgICAoJy0nLCAxLCBvcEFzc29jLlJJR0hUKSwKICAgICAgICAgICAgKG9uZU9mKCcqIC8nKSwgMiwgb3BBc3NvYy5MRUZUKSwKICAgICAgICAgICAgKG9uZU9mKCcrIC0nKSwgMiwgb3BBc3NvYy5MRUZUKSwKICAgICAgICAgICAgXSkKCiAgICAgICAgYXJpdGhfZXhwci5ydW5UZXN0cygnJycKICAgICAgICAgICAgNSszKjYKICAgICAgICAgICAgKDUrMykqNgogICAgICAgICAgICAtMi0tMTEKICAgICAgICAgICAgJycnLCBmdWxsRHVtcD1GYWxzZSkKCiAgICBwcmludHM6OgoKICAgICAgICA1KzMqNgogICAgICAgIFtbNSwgJysnLCBbMywgJyonLCA2XV1dCgogICAgICAgICg1KzMpKjYKICAgICAgICBbW1s1LCAnKycsIDNdLCAnKicsIDZdXQoKICAgICAgICAtMi0tMTEKICAgICAgICBbW1snLScsIDJdLCAnLScsIFsnLScsIDExXV1dCiAgICBjAAAAAAAAAAAAAAAAAwAAAEAAAABzFgAAAGUAWgFkAFoCZAVkAmQDhAFaA2QEUwApBnoaaW5maXhOb3RhdGlvbi48bG9jYWxzPi5fRkJUYwQAAAAAAAAABAAAAAMAAABTAAAAcxYAAAB8AGoAagF8AXwCgwIBAHwCZwBmAlMAKQFOKQJycAEA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ICAgIC0gY29udGVudCAtIGV4cHJlc3Npb24gZm9yIGl0ZW1zIHdpdGhpbiB0aGUgbmVzdGVkIGxpc3RzCiAgICAgICAoZGVmYXVsdD0gYGBOb25lYGApCiAgICAgLSBpZ25vcmVFeHByIC0gZXhwcmVzc2lvbiBmb3IgaWdub3Jpbmcgb3BlbmluZyBhbmQgY2xvc2luZwogICAgICAgZGVsaW1pdGVycyAoZGVmYXVsdD0gOmNsYXNzOmBxdW90ZWRTdHJpbmdgKQoKICAgIElmIGFuIGV4cHJlc3Npb24gaXMgbm90IHByb3ZpZGVkIGZvciB0aGUgY29udGVudCBhcmd1bWVudCwgdGhlCiAgICBuZXN0ZWQgZXhwcmVzc2lvbiB3aWxsIGNhcHR1cmUgYWxsIHdoaXRlc3BhY2UtZGVsaW1pdGVkIGNvbnRlbnQKICAgIGJldHdlZW4gZGVsaW1pdGVycyBhcyBhIGxpc3Qgb2Ygc2VwYXJhdGUgdmFsdWVzLgoKICAgIFVzZSB0aGUgYGBpZ25vcmVFeHByYGAgYXJndW1lbnQgdG8gZGVmaW5lIGV4cHJlc3Npb25zIHRoYXQgbWF5CiAgICBjb250YWluIG9wZW5pbmcgb3IgY2xvc2luZyBjaGFyYWN0ZXJzIHRoYXQgc2hvdWxkIG5vdCBiZSB0cmVhdGVkIGFzCiAgICBvcGVuaW5nIG9yIGNsb3NpbmcgY2hhcmFjdGVycyBmb3IgbmVzdGluZywgc3VjaCBhcyBxdW90ZWRTdHJpbmcgb3IKICAgIGEgY29tbWVudCBleHByZXNzaW9uLiAgU3BlY2lmeSBtdWx0aXBsZSBleHByZXNzaW9ucyB1c2luZyBhbgogICAgOmNsYXNzOmBPcmAgb3IgOmNsYXNzOmBNYXRjaEZpcnN0YC4gVGhlIGRlZmF1bHQgaXMKICAgIDpjbGFzczpgcXVvdGVkU3RyaW5nYCwgYnV0IGlmIG5vIGV4cHJlc3Npb25zIGFyZSB0byBiZSBpZ25vcmVkLCB0aGVuCiAgICBwYXNzIGBgTm9uZWBgIGZvciB0aGlzIGFyZ3VtZW50LgoKICAgIEV4YW1wbGU6OgoKICAgICAgICBkYXRhX3R5cGUgPSBvbmVPZigidm9pZCBpbnQgc2hvcnQgbG9uZyBjaGFyIGZsb2F0IGRvdWJsZSIpCiAgICAgICAgZGVjbF9kYXRhX3R5cGUgPSBDb21iaW5lKGRhdGFfdHlwZSArIE9wdGlvbmFsKFdvcmQoJyonKSkpCiAgICAgICAgaWRlbnQgPSBXb3JkKGFscGhhcysnXycsIGFscGhhbnVtcysnXycpCiAgICAgICAgbnVtYmVyID0gcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIKICAgICAgICBhcmcgPSBHcm91cChkZWNsX2RhdGFfdHlwZSArIGlkZW50KQogICAgICAgIExQQVIsIFJQQVIgPSBtYXAoU3VwcHJlc3MsICIoKSIpCgogICAgICAgIGNvZGVfYm9keSA9IG5lc3RlZEV4cHIoJ3snLCAnfScsIGlnbm9yZUV4cHI9KHF1b3RlZFN0cmluZyB8IGNTdHlsZUNvbW1lbnQpKQoKICAgICAgICBjX2Z1bmN0aW9uID0gKGRlY2xfZGF0YV90eXBlKCJ0eXBlIikKICAgICAgICAgICAgICAgICAgICAgICsgaWRlbnQoIm5hbWUiKQogICAgICAgICAgICAgICAgICAgICAgKyBMUEFSICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChhcmcpLCBbXSkoImFyZ3MiKSArIFJQQVIKICAgICAgICAgICAgICAgICAgICAgICsgY29kZV9ib2R5KCJib2R5IikpCiAgICAgICAgY19mdW5jdGlvbi5pZ25vcmUoY1N0eWxlQ29tbWVudCkKCiAgICAgICAgc291cmNlX2NvZGUgPSAnJycKICAgICAgICAgICAgaW50IGlzX29kZChpbnQgeCkgewogICAgICAgICAgICAgICAgcmV0dXJuICh4JTIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpbnQgZGVjX3RvX2hleChjaGFyIGhjaGFyKSB7CiAgICAgICAgICAgICAgICBpZiAoaGNoYXIgPj0gJzAnICYmIGhjaGFyIDw9ICc5JykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAob3JkKGhjaGFyKS1vcmQoJzAnKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAoMTArb3JkKGhjaGFy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ICAgICBncmFtbWFyIHNob3VsZCBzaGFyZSBhIGNvbW1vbiBpbmRlbnRTdGFjaykKICAgICAtIGluZGVudCAtIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGJsb2NrIG11c3QgYmUgaW5kZW50ZWQgYmV5b25kCiAgICAgICB0aGUgY3VycmVudCBsZXZlbDsgc2V0IHRvIEZhbHNlIGZvciBibG9jayBvZiBsZWZ0LW1vc3QKICAgICAgIHN0YXRlbWVudHMgKGRlZmF1bHQ9IGBgVHJ1ZWBgKQoKICAgIEEgdmFsaWQgYmxvY2sgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBgYGJsb2NrU3RhdGVtZW50YGAuCgogICAgRXhhbXBsZTo6CgogICAgICAgIGRhdGEgPSAnJycKICAgICAgICBkZWYgQSh6KToKICAgICAgICAgIEExCiAgICAgICAgICBCID0gMTAwCiAgICAgICAgICBHID0gQTIKICAgICAgICAgIEEyCiAgICAgICAgICBBMwogICAgICAgIEIKICAgICAgICBkZWYgQkIoYSxiLGMpOgogICAgICAgICAgQkIxCiAgICAgICAgICBkZWYgQkJBKCk6CiAgICAgICAgICAgIGJiYTEKICAgICAgICAgICAgYmJhMgogICAgICAgICAgICBiYmEzCiAgICAgICAgQwogICAgICAgIEQKICAgICAgICBkZWYgc3BhbSh4LHkpOgogICAgICAgICAgICAgZGVmIGVnZ3Moeik6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICcnJwoKCiAgICAgICAgaW5kZW50U3RhY2sgPSBbMV0KICAgICAgICBzdG10ID0gRm9yd2FyZCgpCgogICAgICAgIGlkZW50aWZpZXIgPSBXb3JkKGFscGhhcywgYWxwaGFudW1zKQogICAgICAgIGZ1bmNEZWNsID0gKCJkZWYiICsgaWRlbnRpZmllciArIEdyb3VwKCIoIiArIE9wdGlvbmFsKGRlbGltaXRlZExpc3QoaWRlbnRpZmllcikpICsgIikiKSArICI6IikKICAgICAgICBmdW5jX2JvZHkgPSBpbmRlbnRlZEJsb2NrKHN0bXQsIGluZGVudFN0YWNrKQogICAgICAgIGZ1bmNEZWYgPSBHcm91cChmdW5jRGVjbCArIGZ1bmNfYm9keSkKCiAgICAgICAgcnZhbHVlID0gRm9yd2FyZCgpCiAgICAgICAgZnVuY0NhbGwgPSBHcm91cChpZGVudGlmaWVyICsgIigiICsgT3B0aW9uYWwoZGVsaW1pdGVkTGlzdChydmFsdWUpKSArICIpIikKICAgICAgICBydmFsdWUgPDwgKGZ1bmNDYWxsIHwgaWRlbnRpZmllciB8IFdvcmQobnVtcykpCiAgICAgICAgYXNzaWdubWVudCA9IEdyb3VwKGlkZW50aWZpZXIgKyAiPSIgKyBydmFsdWUpCiAgICAgICAgc3RtdCA8PCAoZnVuY0RlZiB8IGFzc2lnbm1lbnQgfCBpZGVudGlmaWVyKQoKICAgICAgICBtb2R1bGVfYm9keSA9IE9uZU9yTW9yZShzdG10KQoKICAgICAgICBwYXJzZVRyZWUgPSBtb2R1bGVfYm9keS5wYXJzZVN0cmluZyhkYXRhKQogICAgICAgIHBhcnNlVHJlZS5wcHJpbnQoKQoKICAgIHByaW50czo6CgogICAgICAgIFtbJ2RlZicsCiAgICAgICAgICAnQScsCiAgICAgICAgICBbJygnLCAneicsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbWydBMSddLCBbWydCJywgJz0nLCAnMTAwJ11dLCBbWydHJywgJz0nLCAnQTInXV0sIFsnQTInXSwgWydBMyddXV0sCiAgICAgICAgICdCJywKICAgICAgICAgWydkZWYnLAogICAgICAgICAgJ0JCJywKICAgICAgICAgIFsnKCcsICdhJywgJ2InLCAnYycsICcpJ10sCiAgICAgICAgICAnOicsCiAgICAgICAgICBbWydCQjEnXSwgW1snZGVmJywgJ0JCQScsIFsnKCcsICcpJ10sICc6JywgW1snYmJhMSddLCBbJ2JiYTInXSwgWydiYmEzJ11dXV1dXSwKICAgICAgICAgJ0MnLAogICAgICAgICAnRCcsCiAgICAgICAgIFsnZGVmJywKICAgICAgICAgICdzcGFtJywKICAgICAgICAgIFsnKCcsICd4JywgJ3knLCAnKSddLAogICAgICAgICAgJzonLAogICAgICAgICAg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ZXhwcmVzc2lvbnMgdGhhdCBtYXkgYmUgdXNlZnVsIGluCiAgICBqdW1wLXN0YXJ0aW5nIHBhcnNlciBkZXZlbG9wbWVudDoKCiAgICAgLSBudW1lcmljIGZvcm1zICg6Y2xhc3M6YGludGVnZXJzPGludGVnZXI+YCwgOmNsYXNzOmByZWFsczxyZWFsPmAsCiAgICAgICA6Y2xhc3M6YHNjaWVudGlmaWMgbm90YXRpb248c2NpX3JlYWw+YCkKICAgICAtIGNvbW1vbiA6Y2xhc3M6YHByb2dyYW1taW5nIGlkZW50aWZpZXJzPGlkZW50aWZpZXI+YAogICAgIC0gbmV0d29yayBhZGRyZXNzZXMgKDpjbGFzczpgTUFDPG1hY19hZGRyZXNzPmAsCiAgICAgICA6Y2xhc3M6YElQdjQ8aXB2NF9hZGRyZXNzPmAsIDpjbGFzczpgSVB2NjxpcHY2X2FkZHJlc3M+YCkKICAgICAtIElTTzg2MDEgOmNsYXNzOmBkYXRlczxpc284NjAxX2RhdGU+YCBhbmQKICAgICAgIDpjbGFzczpgZGF0ZXRpbWU8aXNvODYwMV9kYXRldGltZT5gCiAgICAgLSA6Y2xhc3M6YFVVSUQ8dXVpZD5gCiAgICAgLSA6Y2xhc3M6YGNvbW1hLXNlcGFyYXRlZCBsaXN0PGNvbW1hX3NlcGFyYXRlZF9saXN0PmAKCiAgICBQYXJzZSBhY3Rpb25zOgoKICAgICAtIDpjbGFzczpgY29udmVydFRvSW50ZWdlcmAKICAgICAtIDpjbGFzczpgY29udmVydFRvRmxvYXRgCiAgICAgLSA6Y2xhc3M6YGNvbnZlcnRUb0RhdGVgCiAgICAgLSA6Y2xhc3M6YGNvbnZlcnRUb0RhdGV0aW1lYAogICAgIC0gOmNsYXNzOmBzdHJpcEhUTUxUYWdzYAogICAgIC0gOmNsYXNzOmB1cGNhc2VUb2tlbnNgCiAgICAgLSA6Y2xhc3M6YGRvd25jYXNlVG9rZW5zYAoKICAgIEV4YW1wbGU6OgoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLm51bWJlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyB0aGUgYXBwcm9wcmlhdGUgdHlwZQogICAgICAgICAgICAxMDAKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICArMTAwCiAgICAgICAgICAgIDMuMTQxNTkKICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uZm51bWJlci5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyBmbG9hdAogICAgICAgICAgICAxMDAKICAgICAgICAgICAgLTEwMAogICAgICAgICAgICArMTAwCiAgICAgICAgICAgIDMuMTQxNTkKICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAxZS0xMgogICAgICAgICAgICAnJycpCgogICAgICAgIHB5cGFyc2luZ19jb21tb24uaGV4X2ludGVnZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgaGV4IG51bWJlcnMKICAgICAgICAgICAgMTAwCiAgICAgICAgICAgIEZGCiAgICAgICAgICAgICcnJykKCiAgICAgICAgcHlwYXJzaW5nX2NvbW1vbi5mcmFjdGlvbi5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyBmcmFjdGlvbnMKICAgICAgICAgICAgMS8yCiAgICAgICAgICAgIC0zLzQKICAgICAgICAgICAgJycnKQoKICAgICAgICBweXBhcnNpbmdfY29tbW9uLm1peGVkX2ludGVnZXIucnVuVGVzdHMoJycnCiAgICAgICAgICAgICMgbWl4ZWQgZnJhY3Rpb25zCiAgICAgICAgICAgIDEKICAgICAgICAgICAgMS8yCiAgICAgICAgICAgIC0zLzQKICAgICAgICAgICAgMS0zLzQKICAgICAgICAgICAgJycnKQoKICAgICAgICBpbXBvcnQgdXVpZAogICAgICAgIHB5cGFyc2luZ19jb21tb24udXVpZC5zZXRQYXJzZUFjdGlvbih0b2tlbk1hcCh1dWlkLlVVSUQpKQogICAgICAgIHB5cGFyc2luZ19jb21tb24udXVpZC5ydW5UZXN0cygnJycKICAgICAgICAgICAgIyB1dWlkCiAgICAgICAgICAgIDEyMzQ1Njc4LTEyMzQtNTY3OC0xMjM0LTU2NzgxMjM0NTY3OAogICAgICAgICAgICAnJycpCgogICAgcHJpbnRzOjoKCiAgICAgICAgIyBhbnkgaW50IG9yIHJlYWwgbnVtYmVyLCByZXR1cm5lZCBhcyB0aGUgYXBwcm9wcmlhdGUgdHlwZQogICAgICAgIDEwMAogICAgICAgIFsxMDBdCgogICAgICAgIC0xMDAKICAgICAgICBbLTEwMF0KCiAgICAgICAgKzEwMAogICAgICAgIFsxMDBdCgogICAgICAgIDMuMTQxNTkKICAgICAgICBbMy4xNDE1OV0KCiAgICAgICAgNi4wMmUyMwogICAgICAgIFs2LjAyZSsyM10KCiAgICAgICAgMWUtMTIKICAgICAgICBbMWUtMTJdCgogICAgICAgICMgYW55IGludCBvciByZWFsIG51bWJlciwgcmV0dXJuZWQgYXMgZmxvYXQKICAgICAgICAxMDAKICAgICAgICBbMTAwLjBdCgogICAgICAgIC0xMDAKICAgICAgICBbLTEwMC4wXQoKICAgICAgICArMTAwCiAgICAgICAgWzEwMC4wXQoKICAgICAgICAzLjE0MTU5CiAgICAgICAgWzMuMTQxNTldCgogICAgICAgIDYuMDJlMjMKICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgIDFlLTEyCiAgICAgICAgWzFlLTEyXQoKICAgICAgICAjIGhleCBudW1iZXJzCiAgICAgICAgMTAwCiAgICAgICAgWzI1Nl0KCiAgICAgICAgRkYKICAgICAgICBbMjU1XQoKICAgICAgICAjIGZyYWN0aW9ucwogICAgICAgIDEvMgogICAgICAgIFswLjVdCgogICAgICAgIC0zLzQKICAgICAgICBbLTAuNzVdCgogICAgICAgICMgbWl4ZWQgZnJhY3Rpb25zCiAgICAgICAgMQogICAgICAgIFsxXQoKICAgICAgICAxLzIKICAgICAgICBbMC41XQoKICAgICAgICAtMy80CiAgICAgICAgWy0wLjc1XQoKICAgICAgICAxLTMvNAogICAgICAgIFsxLjc1XQoKICAg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A4MCWgRHAGQEZAWEAGQFgwJaBWQGUwApB9oOcHlwYXJzaW5nX3Rlc3R6QgogICAgbmFtZXNwYWNlIGNsYXNzIGZvciBjbGFzc2VzIHVzZWZ1bCBpbiB3cml0aW5nIHVuaXQgdGVzdHMKICAgIGMAAAAAAAAAAAAAAAACAAAAQAAAAHM4AAAAZQBaAWQAWgJkAVoDZAJkA4QAWgRkBGQFhABaBWQGZAeEAFoGZAhkCYQAWgdkCmQLhABaCGQMUwApDXomcHlwYXJzaW5nX3Rlc3QucmVzZXRfcHlwYXJzaW5nX2NvbnRleHRheAMAAAogICAgICAgIENvbnRleHQgbWFuYWdlciB0byBiZSB1c2VkIHdoZW4gd3JpdGluZyB1bml0IHRlc3RzIHRoYXQgbW9kaWZ5IHB5cGFyc2luZyBjb25maWcgdmFsdWVzOgogICAgICAgICAtIHBhY2tyYXQgcGFyc2luZwogICAgICAgICAtIGRlZmF1bHQgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLgogICAgICAgICAtIGRlZmF1bHQga2V5d29yZCBjaGFyYWN0ZXJzCiAgICAgICAgIC0gbGl0ZXJhbCBzdHJpbmcgYXV0by1jb252ZXJzaW9uIGNsYXNzCiAgICAgICAgIC0gX19kaWFnX18gc2V0dGluZ3MKCiAgICAgICAgRXhhbXBsZToKICAgICAgICAgICAgd2l0aCByZXNldF9weXBhcnNpbmdfY29udGV4dCgpOgogICAgICAgICAgICAgICAgIyB0ZXN0IHRoYXQgbGl0ZXJhbHMgdXNlZCB0byBjb25zdHJ1Y3QgYSBncmFtbWFyIGFyZSBhdXRvbWF0aWNhbGx5IHN1cHByZXNzZWQKICAgICAgICAgICAgICAgIFBhcnNlckVsZW1lbnQuaW5saW5lTGl0ZXJhbHNVc2luZyhTdXBwcmVzcykKCiAgICAgICAgICAgICAgICB0ZXJtID0gV29yZChhbHBoYXMpIHwgV29yZChudW1zKQogICAgICAgICAgICAgICAgZ3JvdXAgPSBHcm91cCgnKCcgKyB0ZXJtWy4uLl0gKyAnKScpCgogICAgICAgICAgICAgICAgIyBhc3NlcnQgdGhhdCB0aGUgJygpJyBjaGFyYWN0ZXJzIGFyZSBub3QgaW5j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AHKCAAAAcmAAAABy2QIAAHJpAAAAcmoAAABygwAAAHLaAgAAcokAAABycgAAAHLgAgAAcuECAAByhwAAAHJzAAAAclwAAAByfAAAAHJ3AAAAcoEAAABybgAAAHKEAAAAclMAAABydQAAAHJVAAAAclQAAAByDAEAAHKsAAAAcu8CAAByLAEAAHJZAAAAcnkAAAByVgAAAHJjAAAAcggCAAByewAAAHJdAAAAclsAAAByZAAAAHJ2AAAAcuIBAAByCAMAAHJYAAAAcowAAAByCQMAAHKOAAAAco0AAAByUAMAAHJJAwAAcg0DAAByTAMAAHJPAwAAcn4DAAByagMAAHJEAwAAcj8DAAByPAMAAHJtAwAAcl0DAAByYwMAAHJyAwAAcnQDAAByDwAAAFoLc2VsZWN0VG9rZW5aCWZyb21Ub2tlbtoFaWRlbnRaCmNvbHVtbk5hbWVaDmNvbHVtbk5hbWVMaXN0Wgpjb2x1bW5TcGVjWgl0YWJsZU5hbWVaDXRhYmxlTmFtZUxpc3RaCXNpbXBsZVNRTHIqAgAAcgYDAABy8wIAAHL1AgAAcgcDAAByAQMAAHISAAAAchIAAAByEgAAAHITAAAA2gg8bW9kdWxlPmAAAABzXAIAAAQCBAEEAQQCCAEMAQgBCAEIAQgBCAEIAQgBCAEIAQwBDAEIAQwBDAICAhABDgESAgIBEAEQARICAgIMARQBEAIMARYCAgEQARABAgEQARABEAICARABEAEUAwYLBgEGAgYPBgEGAQYBBgEGAQYBFAIIBQYDCgEQARABEAEKAQoBDgEMAQ4BCgEMAQwBCgEOAQoBCgEKAQwBCgEIAxIBDAEGAQYBBAEEAQQBBAMcAwYBBAIIFwQBCAIOAQIBFAEQARACFgIICgwBBAEIAQgBCAEWAwwMED8QXRAFEBUQChAKEH8AfwB/AH8AfwBICgIIDggMCAoIAwgDCAMIGwxEEH8AfwB/AH8AfwB/AH8AfwB/AH8AfwArECEQCBAKEA4QJxAGBAEGAhBOEBcQDRBFEH8AIBAKEA4QfwANEH8AGBBLEEYQBxAaEB8QFBAPEBEQFRAXEHkQbRB7EFYQfwAGEE8QIxBLECwQOhAjEB8QBxBEEHYQahAIEC0QFhBEEB0QDwgwDBUMJAgJCB4IHQgIDFcIJwwqCAYIHgwBDAEMAQwBDAIYARIBFAEaARYBOgIKIAoJCg8KDwowDgQOBQgBFiMKGAoICkUIAg4mBgEIAQgCHH8AAgQEHAEcARABHAEeAhxoDn4KAQoCIAEWASgBCgUcAxIDFgESAyADBAMSAxABAgEwASAIEH8AfwAuFhISLxJMIgMGARABEAEQARABEAEQARQBFAEUARABEAEQAxR/ADYOAgwBDAISAhwBGAEOAhwBGAIsAwgWCAIKBwgDCgcIAgoDCAIMARgBCgI=