REDROOM
PHP 8.0.30
Path:
Logout
Edit File
Size: 174.66 KB
Close
/opt/alt/python37/lib/python3.7/site-packages/pyparsing/__pycache__/core.cpython-37.pyc
Text
Base64
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bWV0aG9kckcAAAByKQAAAHIpAAAAcikAAAByKgAAAHJAAAAAcAAAAHMcAAAACAEEAgQBBAEEAQQBBAEEAQQBBAIQAQ4BDgICAXJAAAAAYwAAAAAAAAAAAAAAAAEAAABAAAAAczAAAABlAFoBZABaAmQBWgNkAloEZANaBWQEWgZkBVoHZAZaCGQHWglkCFoKZAlaC2QKUwApC9oLRGlhZ25vc3RpY3NhqgUAAAogICAgRGlhZ25vc3RpYyBjb25maWd1cmF0aW9uIChhbGwgZGVmYXVsdCB0byBkaXNhYmxlZCkKICAgIC0gYGB3YXJuX211bHRpcGxlX3Rva2Vuc19pbl9uYW1lZF9hbHRlcm5hdGlvbmBgIC0gZmxhZyB0byBlbmFibGUgd2FybmluZ3Mgd2hlbiBhIHJlc3VsdHMKICAgICAgbmFtZSBpcyBkZWZpbmVkIG9uIGEgOmNsYXNzOmBNYXRjaEZpcnN0YCBvciA6Y2xhc3M6YE9yYCBleHByZXNzaW9uIHdpdGggb25lIG9yIG1vcmUgOmNsYXNzOmBBbmRgIHN1YmV4cHJlc3Npb25zCiAgICAtIGBgd2Fybl91bmdyb3VwZWRfbmFtZWRfdG9rZW5zX2luX2NvbGxlY3Rpb25gYCAtIGZsYWcgdG8gZW5hYmxlIHdhcm5pbmdzIHdoZW4gYSByZXN1bHRzCiAgICAgIG5hbWUgaXMgZGVmaW5lZCBvbiBhIGNvbnRhaW5pbmcgZXhwcmVzc2lvbiB3aXRoIHVuZ3JvdXBlZCBzdWJleHByZXNzaW9ucyB0aGF0IGFsc28KICAgICAgaGF2ZSByZXN1bHRzIG5hbWVzCiAgICAtIGBgd2Fybl9uYW1lX3NldF9vbl9lbXB0eV9Gb3J3YXJkYGAgLSBmbGFnIHRvIGVuYWJsZSB3YXJuaW5ncyB3aGVuIGEgOmNsYXNzOmBGb3J3YXJkYCBpcyBkZWZpbmVkCiAgICAgIHdpdGggYSByZXN1bHRzIG5hbWUsIGJ1dCBoYXMgbm8gY29udGVudHMgZGVmaW5lZAogICAgLSBgYHdhcm5fb25fcGFyc2VfdXNpbmdfZW1wdHlfRm9yd2FyZGBgIC0gZmxhZyB0byBlbmFibGUgd2FybmluZ3Mgd2hlbiBhIDpjbGFzczpgRm9yd2FyZGAgaXMKICAgICAgZGVmaW5lZCBpbiBhIGdyYW1tYXIgYnV0IGhhcyBuZXZlciBoYWQgYW4gZXhwcmVzc2lvbiBhdHRhY2hlZCB0byBpdAogICAgLSBgYHdhcm5fb25fYXNzaWdubWVudF90b19Gb3J3YXJkYGAgLSBmbGFnIHRvIGVuYWJsZSB3YXJuaW5ncyB3aGVuIGEgOmNsYXNzOmBGb3J3YXJkYCBpcyBkZWZpbmVkCiAgICAgIGJ1dCBpcyBvdmVyd3JpdHRlbiBieSBhc3NpZ25pbmcgdXNpbmcgYGAnPSdgYCBpbnN0ZWFkIG9mIGBgJzw8PSdgYCBvciBgYCc8PCdgYAogICAgLSBgYHdhcm5fb25fbXVsdGlwbGVfc3RyaW5nX2FyZ3NfdG9fb25lb2ZgYCAtIGZsYWcgdG8gZW5hYmxlIHdhcm5pbmdzIHdoZW4gOmNsYXNzOmBvbmVfb2ZgIGlzCiAgICAgIGluY29ycmVjdGx5IGNhbGxlZCB3aXRoIG11bHRpcGxlIHN0ciBhcmd1bWVudHMKICAgIC0gYGBlbmFibGVfZGVidWdfb25fbmFtZWRfZXhwcmVzc2lvbnNgYCAtIGZsYWcgdG8gYXV0by1lbmFibGUgZGVidWcgb24gYWxsIHN1YnNlcXVlbnQKICAgICAgY2FsbHMgdG8gOmNsYXNzOmBQYXJzZXJFbGVtZW50LnNldF9uYW1lYAoKICAgIERpYWdub3N0aWNzIGFyZSBlbmFibGVkL2Rpc2FibGVkIGJ5IGNhbGxpbmcgOmNsYXNzOmBlbmFibGVfZGlhZ2AgYW5kIDpjbGFzczpgZGlzYWJsZV9kaWFnYC4KICAgIEFsbCB3YXJuaW5ncyBjYW4gYmUgZW5hYmxlZCBieSBjYWxsaW5nIDpjbGFzczpgZW5hYmxlX2FsbF93YXJuaW5nc2AuCiAgICByAQAAAHIUAAAA6QIAAAByIwAAAOkEAAAA6QUAAADpBgAAAOkHAAAATikMci0AAAByMgAAAHIzAAAAcjoAAABySAAAAHJJAAAAckoAAABySwAAAHJMAAAAck0AAAByTgAAAHJPAAAAcikAAAByKQAAAHIpAAAAcioAAAByUQAAAIYAAABzEgAAAAgVBAIEAQQBBAEEAQQBBAEEAXJRAAAAKQLaCWRpYWdfZW51bXJDAAAAYwEAAAAAAAAAAQAAAAMAAABDAAAAcxAAAAB0AKABfABqAqEBAQBkAVMAKQJ6TwogICAgRW5hYmxlIGEgZ2xvYmFsIHB5cGFyc2luZyBkaWFnbm9zdGljIGZsYWcgKHNlZSA6Y2xhc3M6YERpYWdub3N0aWNzYCkuCiAgICBOKQNyQAAAAHJFAAAAckIAAAApAXJXAAAAcikAAAByKQAAAHIqAAAA2gtlbmFibGVfZGlhZ6cAAABzAgAAAAAEclgAAABjAQAAAAAAAAABAAAAAwAAAEMAAABzEAAAAHQAoAF8AGoCoQEBAGQBUwApAnpQCiAgICBEaXNhYmxlIGEgZ2xvYmFsIHB5cGFyc2luZyBkaWFnbm9zdGljIGZsYWcgKHNlZSA6Y2xhc3M6YERpYWdub3N0aWNzYCkuCiAgICBOKQNyQAAAANoHZGlzYWJsZXJCAAAAKQFyVwAAAHIpAAAAcikAAAByKgAAANoMZGlzYWJsZV9kaWFnrgAAAHMCAAAAAARyWgAAACkBckMAAABjAAAAAAAAAAAAAAAAAgAAAEMAAABzDAAAAHQAoAGhAAEAZAFTACkCelUKICAgIEVuYWJsZSBhbGwgZ2xvYmFsIHB5cGFyc2luZyBkaWFnbm9zdGljIHdhcm5pbmdzIChzZWUgOmNsYXNzOmBEaWFnbm9zdGljc2ApLgogICAgTikCckAAAAByRwAAAHIpAAAAcikAAAByKQAAAHIqAAAAckcAAAC1AAAAcwIAAAAABHJHAAAAKQPaFWNtZF9saW5lX3dhcm5fb3B0aW9uc9oMd2Fybl9lbnZfdmFyckMAAABjAgAAAAAAAAAJAAAABgAAAEMAAABzfAAAAHQAfAGDAX0CeG58AEQAXWZ9A3wDZAEXAKABZAKhAWQAZAOFAhkAXAV9BH0FfQZ9B30IfASgAqEAoANkBKEBc1p8BXNMfAZzTHwHclR8B2QFawJyWmQGfQJxDnwEoAKhAKADZAShAXIOfAdkB2sGcg5kCH0CcQ5XAHwCUwApCU56BDo6Ojr6ATpyVAAAANoBadoJcHlwYXJzaW5nVCkCcl8AAADaAEYpBNoEYm9vbHI/AAAA2gVsb3dlcnI2AAAAKQlyWwAAAHJcAAAAckUAAABaCHdhcm5fb3B0Wgh3X2FjdGlvbloJd19tZXNzYWdlWgp3X2NhdGVnb3J5Wgh3X21vZHVsZVoGd19saW5lcikAAAByKQAAAHIqAAAA2hdfc2hvdWxkX2VuYWJsZV93YXJuaW5nc8AAAABzFgAAAAADCAEKAQgBBgESAQ4BFAIGARYBCAFyYwAAAFoaUFlQQVJTSU5HRU5BQkxFQUxMV0FSTklOR1PaDVBhcnNlckVsZW1lbnTaCjAxMjM0NTY3ODlaDEFCQ0RFRmFiY2RlZnJgAAAAYwEAAAAAAAAAAgAAAAQAAABDAAAAcxoAAABnAHwAXRJ9AXwBdABqAWsHcgR8AZECcQRTAHIpAAAAKQLaBnN0cmluZ9oKd2hpdGVzcGFjZSkCcjcAAADaAWNyKQAAAHIpAAAAcioAAAByOQAAAAEBAABzAgAAAAYAcjkAAADaFV90cmltX2FyaXR5X2NhbGxfbGluZXIjAAAAYwIAAAAAAAAABQAAAAYAAAADAAAAc44AAACIAnQAawZyFIcCZgFkAWQChAhTAGQDiQNkBIkBZBBkBWQGhAGJAGQHfQJ0AXA8dAJqA2QIZAmNAWQKGQBhAXQBZAMZAHQBZAsZAHwCFwBmAokFhwCHAYcChwOHBIcFZgZkDGQNhAh9A3QEiAJkDnQEiAJkD4MCagWDA30EfAR8A18FiAJqBnwDXwZ8A1MAKRF6QWRlY29yYXRvciB0byB0cmltIGZ1bmN0aW9uIGNhbGxzIHRvIG1hdGNoIHRoZSBhcml0eSBvZiB0aGUgdGFyZ2V0YwMAAAAAAAAAAwAAAAIAAAATAAAAcwgAAACIAHwCgwFTACkBTnIpAAAAKQPaAXPaAWzaAXQpAXIoAAAAcikAAAByKgAAANoIPGxhbWJkYT4LAQAA8wAAAAB6HV90cmltX2FyaXR5Ljxsb2NhbHM+LjxsYW1iZGE+cgEAAABGYwIAAAAAAAAABAAAAAQAAABTAAAAcyQAAAB0AGoBfAB8AWQBjQJ9AnwCZAIZAH0DfANkAGQDhQIZAGcBUwApBE4pAdoFbGltaXTp/////3JSAAAAKQLaCXRyYWNlYmFja9oKZXh0cmFjdF90YikE2gJ0YnJvAAAA2gZmcmFtZXPaDWZyYW1lX3N1bW1hcnlyKQAAAHIpAAAAcioAAABycgAAABABAABzBgAAAAABDgEIAXofX3RyaW1fYXJpdHkuPGxvY2Fscz4uZXh0cmFjdF90YnJWAAAAclIAAAApAXJvAAAAcnAAAAByFAAAAGMAAAAAAAAAAAUAAAAKAAAAFwAAAHOKAAAAeIR5GIgCfACIA2QAhQIZAI4AfQFkAYkBfAFTAAQAdABrCnKAAQB9AgEAekiIAXI0ggBuPHwCagF9A4gAfANkAmQDjQJkBBkAZABkAoUCGQCIBWsCfQR+A3wEcm6IA4gEawBybogDZAU3AIkDdwKCAFcAZABkAH0CfgJYAFkAcQJYAHECVwBkAFMAKQZOVHJSAAAAKQFybwAAAHJwAAAAchQAAAApAtoJVHlwZUVycm9y2g1fX3RyYWNlYmFja19fKQXaBGFyZ3NyMAAAANoCdGVycwAAAFoVdHJpbV9hcml0eV90eXBlX2Vycm9yKQZycgAAANoLZm91bmRfYXJpdHlyKAAAAHJvAAAA2gltYXhfbGltaXTaEnBhX2NhbGxfbGluZV9zeW50aHIpAAAAcioAAADaB3dyYXBwZXIfAQAAcyAAAAAAAgIBAgEQAQQBBAEQAgQBBAIGAhwCAgIEAQgBCAECAnocX3RyaW1fYXJpdHkuPGxvY2Fscz4ud3JhcHBlcnItAAAA2glfX2NsYXNzX18pAXIBAAAAKQfaFF9zaW5nbGVfYXJnX2J1aWx0aW5zcmkAAABycQAAANoNZXh0cmFjdF9zdGFja9oHZ2V0YXR0cnItAAAAcjoAAAApBXIoAAAAcnsAAADaCUxJTkVfRElGRnJ9AAAA2glmdW5jX25hbWVyKQAAACkGcnIAAAByegAAAHIoAAAAcm8AAAByewAAAHJ8AAAAcioAAADaC190cmltX2FyaXR5BgEAAHMaAAAAAAQIAQwCBAEEAgoJBAMUARQCFhwUAQYBCAJyhAAAAEYpBNoCZm7aB21lc3NhZ2XaBWZhdGFsckMAAABjAwAAAAAAAAAEAAAABAAAAAMAAABzQAAAAHwBZAFrCXIMfAFuAmQCiQJ8AnIYdABuAnQBiQB0AogBgwGJAXQDiAGDAYcAhwGHAmYDZANkBIQIgwF9A3wDUwApBWFDAgAACiAgICBGdW5jdGlvbiB0byBjb252ZXJ0IGEgc2ltcGxlIHByZWRpY2F0ZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYGBUcnVlYGAgb3IgYGBGYWxzZWBgCiAgICBpbnRvIGEgcGFyc2UgYWN0aW9uLiBDYW4gYmUgdXNlZCBpbiBwbGFjZXMgd2hlbiBhIHBhcnNlIGFjdGlvbiBpcyByZXF1aXJlZAogICAgYW5kIDpjbGFzczpgUGFyc2VyRWxlbWVudC5hZGRfY29uZGl0aW9uYCBjYW5ub3QgYmUgdXNlZCAoc3VjaCBhcyB3aGVuIGFkZGluZyBhIGNvbmRpdGlvbgogICAgdG8gYW4gb3BlcmF0b3IgbGV2ZWwgaW4gOmNsYXNzOmBpbmZpeF9ub3RhdGlvbmApLgoKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzOgoKICAgIC0gYGBtZXNzYWdlYGAgLSBkZWZpbmUgYSBjdXN0b20gbWVzc2FnZSB0byBiZSB1c2VkIGluIHRoZSByYWlzZWQgZXhjZXB0aW9uCiAgICAtIGBgZmF0YWxgYCAtIGlmIFRydWUsIHdpbGwgcmFpc2UgOmNsYXNzOmBQYXJzZUZhdGFsRXhjZXB0aW9uYCB0byBzdG9wIHBhcnNpbmcgaW1tZWRpYXRlbHk7CiAgICAgIG90aGVyd2lzZSB3aWxsIHJhaXNlIDpjbGFzczpgUGFyc2VFeGNlcHRpb25gCgogICAgTnodZmFpbGVkIHVzZXItZGVmaW5lZCBjb25kaXRpb25jAwAAAAAAAAADAAAABQAAABMAAABzIAAAAHQAiAF8AHwBfAKDA4MBcxyIAHwAfAGIAoMDggFkAFMAKQFOKQFyYQAAACkDcmoAAAByawAAAHJsAAAAKQPaCGV4Y190eXBlcoUAAADaA21zZ3IpAAAAcioAAADaAnBhVgEAAHMEAAAAAAIQAXolY29uZGl0aW9uX2FzX3BhcnNlX2FjdGlvbi48bG9jYWxzPi5wYSkE2hNQYXJzZUZhdGFsRXhjZXB0aW9u2g5QYXJzZUV4Y2VwdGlvbnKEAAAAchEAAAApBHKFAAAAcoYAAAByhwAAAHKKAAAAcikAAAApA3KIAAAAcoUAAAByiQAAAHIqAAAA2hljb25kaXRpb25fYXNfcGFyc2VfYWN0aW9uQgEAAHMKAAAAABAQAQwBCAIYBXKNAAAAKQTaCGluc3RyaW5n2gNsb2PaBGV4cHLaCWNhY2hlX2hpdGMEAAAAAAAAAAUAAAANAAAAQwAAAHNKAAAAfANyCGQBbgJkAn0EdABkA6ABfAR8AnwBdAJ8AXwAgwJ0A3wBfACDAnQEfAF8AIMCZAR0A3wBfACDAmQFGAAUAKEHgwEBAGQAUwApBk5yHgAAAHJgAAAAeiZ7fU1hdGNoIHt9IGF0IGxvYyB7fSh7fSx7fSkKICB7fQogIHt9XvoBIHIUAAAAKQXaBXByaW502gZmb3JtYXTaBmxpbmVub9oDY29s2gRsaW5lKQVyjgAAAHKPAAAAcpAAAABykQAAANoNY2FjaGVfaGl0X3N0cnIpAAAAcikAAAByKgAAANobX2RlZmF1bHRfc3RhcnRfZGVidWdfYWN0aW9uXgEAAHMUAAAAAAMMAQICBAECAQIBAgEIAQgBCAFymQAAACkGco4AAADaCHN0YXJ0bG9j2gZlbmRsb2NykAAAANoEdG9rc3KRAAAAYwYAAAAAAAAABwAAAAcAAABDAAAAcyYAAAB8BXIIZAFuAmQCfQZ0AGQDoAF8BnwDfASgAqEAoQODAQEAZABTACkETnIeAAAAcmAAAAB6Ent9TWF0Y2hlZCB7fSAtPiB7fSkDcpMAAABylAAAANoHYXNfbGlzdCkHco4AAABymgAAAHKbAAAAcpAAAABynAAAAHKRAAAAcpgAAAByKQAAAHIpAAAAcioAAADaHV9kZWZhdWx0X3N1Y2Nlc3NfZGVidWdfYWN0aW9ucQEAAHMEAAAAAAgMAXKeAAAAKQVyjgAAAHKPAAAAcpAAAADaA2V4Y3KRAAAAYwUAAAAAAAAABgAAAAcAAABDAAAAcyoAAAB8BHIIZAFuAmQCfQV0AGQDoAF8BXwCdAJ8A4MBagN8A6EEgwEBAGQAUwApBE5yHgAAAHJgAAAAeiB7fU1hdGNoIHt9IGZhaWxlZCwge30gcmFpc2VkOiB7fSkEcpMAAABylAAAANoEdHlwZXItAAAAKQZyjgAAAHKPAAAAcpAAAABynwAAAHKRAAAAcpgAAAByKQAAAHIpAAAAcioAAADaH19kZWZhdWx0X2V4Y2VwdGlvbl9kZWJ1Z19hY3Rpb259AQAAcwgAAAAABwwBAgEEAXKhAAAAYwAAAAAAAAAAAQAAAAEAAABHAAAAcwQAAABkAVMAKQJ6RydEby1ub3RoaW5nJyBkZWJ1ZyBhY3Rpb24sIHRvIHN1cHByZXNzIGRlYnVnZ2luZyBvdXRwdXQgZHVyaW5nIHBhcnNpbmcuTnIpAAAAKQFyeAAAAHIpAAAAcikAAAByKgAAANoRbnVsbF9kZWJ1Z19hY3Rpb26MAQAAcwIAAAAAAXKiAAAAYwAAAAAAAAAAAAAAABgAAABAAAAAc3QGAABlAFoBZABaAlUAZAFaA2QCWgRlBWUGZAM8AGQEWgdlCGUGZAU8AGQGWgllCmoLZQwZAGUGZAc8AGUNZQVkBmQInAJkCWQKhASDAVoOZQ1lDGQGZAucAmQMZA2EBIMBWg9HAGQOZA+EAGQPZRCDA1oRZL1lCGQQnAFkEWQShAVaEmUTZABkE5wCZBRkFYQEWhRkAGQWnAFkF2QYhARaFWS+ZARkGZwBZQVlCGUIZABkGpwEZBtkHIQHWhZkv2QdZB6EAVoXZMBlCGQAZCCcAmQhZCKEBVoYZRlkAGQjnAJkJGQlhARaGmUZZABkI5wCZCZkJ4QEWhtlHGQAZCOcAmQoZCmEBFodZR5kAGQqnAJkK2QshARaH2QtZC6EAFogZC9kMIQAWiFkwWQxZDKEAVoiZDNkNIQAWiNkwmUkZSVlJmYCGQBkFpwBZDVkNoQFWidkw2UFZSVlCGUlZDecBGQ4ZDmEBVooZQVlJWUIZDqcA2Q7ZDyEBFopZSqDAForaQBaLGUKai1lJGUlZD1lCGYDGQBlJGUlZS5lJmUvZgIZAGYCGQBmAhkAZQZkPjwAaQBaMGUqgwBaMWQ/ZD9nAloyZMRlJGUlZSZmAhkAZBacAWRAZEGEBVozZSdaNGUNZAZkFpwBZEJkQ4QEgwFaNWQEWjZkBFo3ZQ1kBmQWnAFkRGRFhASDAVo4ZQ1kxWQEZEacAWUKagtlJRkAZAZkR5wCZEhkSYQHgwFaOWUNZMZkBGRGnAFlJWUIZAZkS5wDZExkTYQHgwFaOmTHZARkTpwBZQVlCGUIZSZkT5wEZFBkUYQHWjtlPGQEZgJkBGU8ZFKcAmUFZSVlCGUIZSVlPWUkZSZlJWUlZgMZAGQGZAZmAxkAZFOcBmRUZFWEB1o+ZARkVpwBZQVlCGUFZFecA2RYZFmEBlo/ZTxmAWQEZTxkUpwCZQVlJWUIZSVlJmRanAVkW2RchAdaQGU8ZARmAmQEZF2cAWUFZSVlCGU9ZQVkBmQGZgMZAGRenARkX2RghAdaQWQAZBacAWRhZGKEBFpCZABkFpwBZGNkZIQEWkNkAGQWnAFkZWRmhARaRGQAZBacAWRnZGiEBFpFZABkFpwBZGlkaoQEWkZkAGQWnAFka2RshARaR2QAZBacAWRtZG6EBFpIZABkFpwBZG9kcIQEWklkAGQWnAFkcWRyhARaSmQAZBacAWRzZHSEBFpLZABkFpwBZHVkdoQEWkxkAGQWnAFkd2R4hARaTWQAZBacAWR5ZHqEBFpOZAZaT2R7ZHyEAFpQZMhlBWQAZH2cAmR+ZH+EBVpRZABkFpwBZIBkgYQEWlJkyWUIZABkgpwCZINkhIQFWlNkymUIZABkgpwCZIVkhoQFWlRky2UuZVVlBRkAZQVmAhkAZQhkAGSHnANkiGSJhAVaVmQAZBacAWSKZIuEBFpXZABkAGSMnAJkjWSOhARaWGVZZVplW2QAZI+cBGSQZJGEBFpcZMxlCGQAZJKcAmSTZJSEBVpdZV5lBWQWnAFklWSWhASDAVpfZWBkl2SYhACDAVphZQVkAGR9nAJkmWSahARaYmVeZQVkFpwBZJtknIQEgwFaY2UFZBacAWSdZJ6EBFpkZQVkFpwBZJ9koIQEWmVkAGQWnAFkoWSihARaZmVnZAAZAGQWnAFko2SkhARaaGSlZKaEAFppZM1kBmQWnAFkp2SohAVaamTOZARkTpwBZS5lBWVrZWxmAxkAZQVlCGUIZSZkqpwFZKtkrIQHWm1krWSuhABabmSvZLCEAFpvZM9kH2ROnAFlBWUIZQhlCGSxnARksmSzhAdacGTQZB9kH2QfZARkBmS1nAVlLmUFZXFlBRkAZgIZAGUIZQpqC2UuZABlBWYCGQAZAGUIZQhlCGVyZQVlJmcCZQVmAhkAZQpqC2VsGQBlCGUIZQhlCGUIZXJlBWUmZwJlBWYCGQBlJGUIZXFlJGUFZS5lJmUvZgIZAGYCGQAZAGYCGQBktpwPZLdkuIQHWnNk0WUuZWxla2UFZgMZAGUlZQhlCGQGZLqcBWS7ZLyEBVp0ZQ5adWUPWnZlFlp3ZRhaeGUaWnllG1p6ZR1ae2UfWnxlKFp9ZSlafmU1Wn9lOVqAZTpagWU7WoJlPlqDZUBahGU/WoVlVlqGZVdah2VcWohlXVqJZV9aimViWotlbVqMZXNajWVTWo5lVFqPZAZTACnScmQAAAB6KUFic3RyYWN0IGJhc2UgbGV2ZWwgcGFyc2VyIGVsZW1lbnQgY2xhc3MuegQgCgkN2hNE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c3VwcHJlc3Nfd2FybmluZyhEaWFnbm9zdGljcy53YXJuX29uX3BhcnNlX3VzaW5nX2VtcHR5X0ZvcndhcmQpCgogICAgICAgICAgICAjIHN0YXRlbWVudCB3b3VsZCBub3JtYWxseSByYWlzZSBhIHdhcm5pbmcsIGJ1dCBpcyBub3cgc3VwcHJlc3NlZAogICAgICAgICAgICBwcmludChiYXNlLnBhcnNlU3RyaW5nKCJ4IikpCgogICAgICAgICkCcssAAADaBmFwcGVuZCkCcicAAAByzAAAAHIpAAAAcikAAAByKgAAANoQc3VwcHJlc3Nfd2FybmluZ+MBAABzBAAAAAANDAF6HlBhcnNlckVsZW1lbnQuc3VwcHJlc3Nfd2FybmluZykBckMAAABjAQAAAAAAAAACAAAAAwAAAEMAAABzQAAAAHQAoAB8AKEBfQF8AGoBZAFkAYUCGQB8AV8BfABqAmQBZAGFAhkAfAFfAnwAagNyPHQEdAVqBoMBfAFfB3wBUwApAmE3AwAACiAgICAgICAgTWFrZSBhIGNvcHkgb2YgdGhpcyA6Y2xhc3M6YFBhcnNlckVsZW1lbnRgLiAgVXNlZnVsIGZvciBkZWZpbmluZwogICAgICAgIGRpZmZlcmVudCBwYXJzZSBhY3Rpb25zIGZvciB0aGUgc2FtZSBwYXJzaW5nIHBhdHRlcm4sIHVzaW5nIGNvcGllcyBvZgogICAgICAgIHRoZSBvcmlnaW5hbCBwYXJzZSBlbGVtZW50LgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpLnNldF9wYXJzZV9hY3Rpb24obGFtYmRhIHRva3M6IGludCh0b2tzWzBdKSkKICAgICAgICAgICAgaW50ZWdlcksgPSBpbnRlZ2VyLmNvcHkoKS5hZGRfcGFyc2VfYWN0aW9uKGxhbWJkYSB0b2tzOiB0b2tzWzBdICogMTAyNCkgKyBTdXBwcmVzcygiSyIpCiAgICAgICAgICAgIGludGVnZXJNID0gaW50ZWdlci5jb3B5KCkuYWRkX3BhcnNlX2FjdGlvbihsYW1iZGEgdG9rczogdG9rc1swXSAqIDEwMjQgKiAxMDI0KSArIFN1cHByZXNzKCJNIikKCiAgICAgICAgICAgIHByaW50KChpbnRlZ2VySyB8IGludGVnZXJNIHwgaW50ZWdlcilbMSwgLi4uXS5wYXJzZV9zdHJpbmcoIjVLIDEwMCA2NDBLIDI1Nk0iKSkKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIFs1MTIwLCAxMDAsIDY1NTM2MCwgMjY4NDM1NDU2XQoKICAgICAgICBFcXVpdmFsZW50IGZvcm0gb2YgYGBleHByLmNvcHkoKWBgIGlzIGp1c3QgYGBleHByKClgYDo6CgogICAgICAgICAgICBpbnRlZ2VyTSA9IGludGVnZXIoKS5hZGRfcGFyc2VfYWN0aW9uKGxhbWJkYSB0b2tzOiB0b2tzWzBdICogMTAyNCAqIDEwMjQpICsgU3VwcHJlc3MoIk0iKQogICAgICAgIE4pCNoEY29weXK5AAAAcsIAAAByqAAAAHKpAAAAcmQAAAByowAAAHKqAAAAKQJyJwAAANoDY3B5cikAAAByKQAAAHIqAAAAcs8AAADzAQAAcwwAAAAAFgoBEAEQAQYBDAF6ElBhcnNlckVsZW1lbnQuY29weSkB2g5saXN0QWxsTWF0Y2hlcykEckIAAADaEGxpc3RfYWxsX21hdGNoZXNy0QAAAHJDAAAAYwMAAAABAAAABAAAAAQAAABDAAAAcxQAAAB8A3AGfAJ9A3wAoAB8AXwDoQJTACkBYdMEAAAKICAgICAgICBEZWZpbmUgbmFtZSBmb3IgcmVmZXJlbmNpbmcgbWF0Y2hpbmcgdG9rZW5zIGFzIGEgbmVzdGVkIGF0dHJpYnV0ZQogICAgICAgIG9mIHRoZSByZXR1cm5lZCBwYXJzZSByZXN1bHRzLgoKICAgICAgICBOb3JtYWxseSwgcmVzdWx0cyBuYW1lcyBhcmUgYXNzaWduZWQgYXMgeW91IHdvdWxkIGFzc2lnbiBrZXlzIGluIGEgZGljdDoKICAgICAgICBhbnkgZXhpc3RpbmcgdmFsdWUgaXMgb3ZlcndyaXR0ZW4gYnkgbGF0ZXIgdmFsdWVzLiBJZiBpdCBpcyBuZWNlc3NhcnkgdG8KICAgICAgICBrZWVwIGFsbCB2YWx1ZXMgY2FwdHVyZWQgZm9yIGEgcGFydGljdWxhciByZXN1bHRzIG5hbWUsIGNhbGwgYGBzZXRfcmVzdWx0c19uYW1lYGAKICAgICAgICB3aXRoIGBgbGlzdF9hbGxfbWF0Y2hlc2BgID0gVHJ1ZS4KCiAgICAgICAgTk9URTogYGBzZXRfcmVzdWx0c19uYW1lYGAgcmV0dXJucyBhICpjb3B5KiBvZiB0aGUgb3JpZ2luYWwgOmNsYXNzOmBQYXJzZXJFbGVtZW50YCBvYmplY3Q7CiAgICAgICAgdGhpcyBpcyBzbyB0aGF0IHRoZSBjbGllbnQgY2FuIGRlZmluZSBhIGJhc2ljIGVsZW1lbnQsIHN1Y2ggYXMgYW4KICAgICAgICBpbnRlZ2VyLCBhbmQgcmVmZXJlbmNlIGl0IGluIG11bHRpcGxlIHBsYWNlcyB3aXRoIGRpZmZlcmVudCBuYW1lcy4KCiAgICAgICAgWW91IGNhbiBhbHNvIHNldCByZXN1bHRzIG5hbWVzIHVzaW5nIHRoZSBhYmJyZXZpYXRlZCBzeW50YXgsCiAgICAgICAgYGBleHByKCJuYW1lIilgYCBpbiBwbGFjZSBvZiBgYGV4cHIuc2V0X3Jlc3VsdHNfbmFtZSgibmFtZSIpYGAKICAgICAgICAtIHNlZSA6Y2xhc3M6YF9fY2FsbF9fYC4gSWYgYGBsaXN0X2FsbF9tYXRjaGVzYGAgaXMgcmVxdWlyZWQsIHVzZQogICAgICAgIGBgZXhwcigibmFtZSoiKWBgLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGRhdGVfc3RyID0gKGludGVnZXIuc2V0X3Jlc3VsdHNfbmFtZSgieWVhciIpICsgJy8nCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRfcmVzdWx0c19uYW1lKCJtb250aCIpICsgJy8nCiAgICAgICAgICAgICAgICAgICAgICAgICsgaW50ZWdlci5zZXRfcmVzdWx0c19uYW1lKCJkYXkiKSkKCiAgICAgICAgICAgICMgZXF1aXZhbGVudCBmb3JtOgogICAgICAgICAgICBkYXRlX3N0ciA9IGludGVnZXIoInllYXIiKSArICcvJyArIGludGVnZXIoIm1vbnRoIikgKyAnLycgKyBpbnRlZ2VyKCJkYXkiKQogICAgICAgICkB2g9fc2V0UmVzdWx0c05h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c2VkIHRva2VucyBhcmUgcGFzc2VkIHRvIHRoZSBwYXJzZSBhY3Rpb24gYXMgUGFyc2VSZXN1bHRzLiBUaGV5IGNhbiBiZQogICAgICAgIG1vZGlmaWVkIGluIHBsYWNlIHVzaW5nIGxpc3Qtc3R5bGUgYXBwZW5kLCBleHRlbmQsIGFuZCBwb3Agb3BlcmF0aW9ucyB0byB1cGRhdGUKICAgICAgICB0aGUgcGFyc2VkIGxpc3QgZWxlbWVudHM7IGFuZCB3aXRoIGRpY3Rpb25hcnktc3R5bGUgaXRlbSBzZXQgYW5kIGRlbCBvcGVyYXRpb25zCiAgICAgICAgdG8gYWRkLCB1cGRhdGUsIG9yIHJlbW92ZSBhbnkgbmFtZWQgcmVzdWx0cy4gSWYgdGhlIHRva2VucyBhcmUgbW9kaWZpZWQgaW4gcGxhY2UsCiAgICAgICAgaXQgaXMgbm90IG5lY2Vzc2FyeSB0byByZXR1cm4gdGhlbSB3aXRoIGEgcmV0dXJuIHN0YXRlbWVudC4KCiAgICAgICAgUGFyc2UgYWN0aW9ucyBjYW4gYWxzbyBjb21wbGV0ZWx5IHJlcGxhY2UgdGhlIGdpdmVuIHRva2Vucywgd2l0aCBhbm90aGVyIGBgUGFyc2VSZXN1bHRzYGAKICAgICAgICBvYmplY3QsIG9yIHdpdGggc29tZSBlbnRpcmVseSBkaWZmZXJlbnQgb2JqZWN0IChjb21tb24gZm9yIHBhcnNlIGFjdGlvbnMgdGhhdCBwZXJmb3JtIGRhdGEKICAgICAgICBjb252ZXJzaW9ucykuIEEgY29udmVuaWVudCB3YXkgdG8gYnVpbGQgYSBuZXcgcGFyc2UgcmVzdWx0IGlzIHRvIGRlZmluZSB0aGUgdmFsdWVzCiAgICAgICAgdXNpbmcgYSBkaWN0LCBhbmQgdGhlbiBjcmVhdGUgdGhlIHJldHVybiB2YWx1ZSB1c2luZyA6Y2xhc3M6YFBhcnNlUmVzdWx0cy5mcm9tX2RpY3RgLgoKICAgICAgICBJZiBOb25lIGlzIHBhc3NlZCBhcyB0aGUgYGBmbmBgIHBhcnNlIGFjdGlvbiwgYWxsIHByZXZpb3VzbHkgYWRkZWQgcGFyc2UgYWN0aW9ucyBmb3IgdGhpcwogICAgICAgIGV4cHJlc3Npb24gYXJlIGNsZWFyZWQuCgogICAgICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzOgoKICAgICAgICAtIGNhbGxfZHVyaW5nX3RyeSA9IChkZWZhdWx0PSBgYEZhbHNlYGApIGluZGljYXRlIGlmIHBhcnNlIGFjdGlvbiBzaG91bGQgYmUgcnVuIGR1cmluZwogICAgICAgICAgbG9va2FoZWFkcyBhbmQgYWx0ZXJuYXRlIHRlc3RpbmcuIEZvciBwYXJzZSBhY3Rpb25zIHRoYXQgaGF2ZSBzaWRlIGVmZmVjdHMsIGl0IGlzCiAgICAgICAgICBpbXBvcnRhbnQgdG8gb25seSBjYWxsIHRoZSBwYXJzZSBhY3Rpb24gb25jZSBpdCBpcyBkZXRlcm1pbmVkIHRoYXQgaXQgaXMgYmVpbmcKICAgICAgICAgIGNhbGxlZCBhcyBwYXJ0IG9mIGEgc3VjY2Vzc2Z1bCBwYXJzZS4gRm9yIHBhcnNlIGFjdGlvbnMgdGhhdCBwZXJmb3JtIGFkZGl0aW9uYWwKICAgICAgICAgIHZhbGlkYXRpb24sIHRoZW4gY2FsbF9kdXJpbmdfdHJ5IHNob3VsZCBiZSBwYXNzZWQgYXMgVHJ1ZSwgc28gdGhhdCB0aGUgdmFsaWRhdGlvbgogICAgICAgICAgY29kZSBpcyBpbmNsdWRlZCBpbiB0aGUgcHJlbGltaW5hcnkgInRyeSIgcGFyc2VzLgoKICAgICAgICBOb3RlOiB0aGUgZGVmYXVsdCBwYXJzaW5nIGJlaGF2aW9yIGlzIHRvIGV4cGFuZCB0YWJzIGluIHRoZSBpbnB1dCBzdHJpbmcKICAgICAgICBiZWZvcmUgc3RhcnRpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy4gIFNlZSA6Y2xhc3M6YHBhcnNlX3N0cmluZ2AgZm9yIG1vcmUKICAgICAgICBpbmZvcm1hdGlvbiBvbiBwYXJzaW5nIHN0cmluZ3MgY29udGFpbmluZyBgYDxUQUI+YGAgcywgYW5kIHN1Z2dlc3RlZAogICAgICAgIG1ldGhvZHMgdG8gbWFpbnRhaW4gYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIHBhcnNlZCBzdHJpbmcsIHRoZSBwYXJzZQogICAgICAgIGxvY2F0aW9uLCBhbmQgbGluZSBhbmQgY29sdW1uIHBvc2l0aW9ucyB3aXRoaW4gdGhlIHBhcnNlZCBzdHJpbmcuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgIyBwYXJzZSBkYXRlcyBpbiB0aGUgZm9ybSBZWVlZL01NL0RECgogICAgICAgICAgICAjIHVzZSBwYXJzZSBhY3Rpb24gdG8gY29udmVydCB0b2tzIGZyb20gc3RyIHRvIGludCBhdCBwYXJzZSB0aW1lCiAgICAgICAgICAgIGRlZiBjb252ZXJ0X3RvX2ludCh0b2tzKToKICAgICAgICAgICAgICAgIHJldHVybiBpbnQodG9rc1swXSkKCiAgICAgICAgICAgICMgdXNlIGEgcGFyc2UgYWN0aW9uIHRvIHZlcmlmeSB0aGF0IHRoZSBkYXRlIGlzIGEgdmFsaWQgZGF0ZQogICAgICAgICAgICBkZWYgaXNfdmFsaWRfZGF0ZShpbnN0cmluZywgbG9jLCB0b2tzKToKICAgICAgICAgICAgICAgIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGUKICAgICAgICAgICAgICAgIHllYXIsIG1vbnRoLCBkYXkgPSB0b2tzWzo6Ml0KICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICBkYXRlKHllYXIsIG1vbnRoLCBkYXkpCiAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKICAgICAgICAgICAgICAgICAgICByYWlzZSBQYXJzZUV4Y2VwdGlvbihpbnN0cmluZywgbG9jLCAiaW52YWxpZCBkYXRlIGdpdmVuIikKCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpCiAgICAgICAgICAgIGRhdGVfc3RyID0gaW50ZWdlciArICcvJyArIGludGVnZXIgKyAnLycgKyBpbnRlZ2VyCgogICAgICAgICAgICAjIGFkZCBwYXJzZSBhY3Rpb25zCiAgICAgICAgICAgIGludGVnZXIuc2V0X3BhcnNlX2FjdGlvbihjb252ZXJ0X3RvX2ludCkKICAgICAgICAgICAgZGF0ZV9zdHIuc2V0X3BhcnNlX2FjdGlvbihp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IGRlZmluZSBhIGN1c3RvbSBtZXNzYWdlIHRvIGJlIHVzZWQgaW4gdGhlIHJhaXNlZCBleGNlcHRpb24KICAgICAgICAtIGZhdGFsID0gaWYgVHJ1ZSwgd2lsbCByYWlzZSBQYXJzZUZhdGFsRXhjZXB0aW9uIHRvIHN0b3AgcGFyc2luZyBpbW1lZGlhdGVseTsgb3RoZXJ3aXNlIHdpbGwgcmFpc2UKICAgICAgICAgIFBhcnNlRXhjZXB0aW9uCiAgICAgICAgLSBjYWxsX2R1cmluZ190cnkgPSBib29sZWFuIHRvIGluZGljYXRlIGlmIHRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgZHVyaW5nIGludGVybmFsIHRyeVBhcnNlIGNhbGxzLAogICAgICAgICAgZGVmYXVsdD1GYWxzZQoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpLnNldF9wYXJzZV9hY3Rpb24obGFtYmRhIHRva3M6IGludCh0b2tzWzBdKSkKICAgICAgICAgICAgeWVhcl9pbnQgPSBpbnRlZ2VyLmNvcHkoKQogICAgICAgICAgICB5ZWFyX2ludC5hZGRfY29uZGl0aW9uKGxhbWJkYSB0b2tzOiB0b2tzWzBdID49IDIwMDAsIG1lc3NhZ2U9Ik9ubHkgc3VwcG9ydCB5ZWFycyAyMDAwIGFuZCBsYXRlciIpCiAgICAgICAgICAgIGRhdGVfc3RyID0geWVhcl9pbnQgKyAnLycgKyBpbnRlZ2VyICsgJy8nICsgaW50ZWdlcgoKICAgICAgICAgICAgcmVzdWx0ID0gZGF0ZV9zdHIucGFyc2Vfc3RyaW5nKCIxOTk5LzEyLzMxIikgICMgLT4gRXhjZXB0aW9uOiBPbmx5IHN1cHBvcnQgeWVhcnMgMjAwMCBhbmQgbGF0ZXIgKGF0IGNoYXIgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZToxLCBjb2w6MSkKICAgICAgICByhgAAAHKHAAAARikCcoYAAAByhwAAAHLlAAAAcsoAAAApBXK5AAAAcs0A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KQdhIwUAAAogICAgICAgIEVuYWJsZXMgImJvdW5kZWQgcmVjdXJzaW9uIiBwYXJzaW5nLCB3aGljaCBhbGxvd3MgZm9yIGJvdGggZGlyZWN0IGFuZCBpbmRpcmVjdAogICAgICAgIGxlZnQtcmVjdXJzaW9uLiBEdXJpbmcgcGFyc2luZywgbGVmdC1yZWN1cnNpdmUgOmNsYXNzOmBGb3J3YXJkYCBlbGVtZW50cyBhcmUKICAgICAgICByZXBlYXRlZGx5IG1hdGNoZWQgd2l0aCBhIGZpeGVkIHJlY3Vyc2lvbiBkZXB0aCB0aGF0IGlzIGdyYWR1YWxseSBpbmNyZWFzZWQKICAgICAgICB1bnRpbCBmaW5kaW5nIHRoZSBsb25nZXN0IG1hdGNoLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIGltcG9ydCBweXBhcnNpbmcgYXMgcHAKICAgICAgICAgICAgcHAuUGFyc2VyRWxlbWVudC5lbmFibGVfbGVmdF9yZWN1cnNpb24oKQoKICAgICAgICAgICAgRSA9IHBwLkZvcndhcmQoIkUiKQogICAgICAgICAgICBudW0gPSBwcC5Xb3JkKHBwLm51bXMpCiAgICAgICAgICAgICMgbWF0Y2ggYG51bWAsIG9yIGBudW0gJysnIG51bWAsIG9yIGBudW0gJysnIG51bSAnKycgbnVtYCwgLi4uCiAgICAgICAgICAgIEUgPDw9IEUgKyAnKycgLSBudW0gfCBudW0KCiAgICAgICAgICAgIHByaW50KEUucGFyc2Vfc3RyaW5nKCIxKzIrMyIpKQoKICAgICAgICBSZWN1cnNpb24gc2VhcmNoIG5hdHVyYWxseSBtZW1vaXplcyBtYXRjaGVzIG9mIGBgRm9yd2FyZGBgIGVsZW1lbnRzIGFuZCBtYXkKICAgICAgICB0aHVzIHNraXAgcmVldmFsdWF0aW9uIG9mIHBhcnNlIGFjdGlvbnMgZHVyaW5nIGJhY2t0cmFja2luZy4gVGhpcyBtYXkgYnJlYWsKICAgICAgICBwcm9ncmFtcyB3aXRoIHBhcnNlIGFjdGlvbnMgd2hpY2ggcmVseSBvbiBzdHJpY3Qgb3JkZXJpbmcgb2Ygc2lkZS1lZmZlY3RzLgoKICAgICAgICBQYXJhbWV0ZXJzOgoKICAgICAgICAtIGNhY2hlX3NpemVfbGltaXQgLSAoZGVmYXVsdD1gYE5vbmVgYCkgLSBtZW1vaXplIGF0IG1vc3QgdGhpcyBtYW55CiAgICAgICAgICBgYEZvcndhcmRgYCBlbGVtZW50cyBkdXJpbmcgbWF0Y2hpbmc7IGlmIGBgTm9uZWBgICh0aGUgZGVmYXVsdCksCiAgICAgICAgICBtZW1vaXplIGFsbCBgYEZvcndhcmRgYCBlbGVtZW50cy4KCiAgICAgICAgQm91bmRlZCBSZWN1cnNpb24gcGFyc2luZyB3b3JrcyBzaW1pbGFyIGJ1dCBub3QgaWRlbnRpY2FsIHRvIFBhY2tyYXQgcGFyc2luZywKICAgICAgICB0aHVzIHRoZSB0d28gY2Fubm90IGJlIHVzZWQgdG9nZXRoZXIuIFVzZSBgYGZvcmNlPVRydWVgYCB0byBkaXNhYmxlIGFueQogICAgICAgIHByZXZpb3VzLCBjb25mbGljdGluZyBzZXR0aW5ncy4KICAgICAgICB6MFBhY2tyYXQgYW5kIEJvdW5kZWQgUmVjdXJzaW9uIGFyZSBub3QgY29tcGF0aWJsZU5yAQAAACkB2ghjYXBhY2l0eXoPTWVtbyBzaXplIG9mICVzVCkJcmQAAAByGwEAAHIaAQAA2gxSdW50aW1lRXJyb3LaDl9VbmJvdW5kZWRNZW1vcgkBAADaCF9MUlVNZW1v2hNOb3RJbXBsZW1lbnRlZEVycm9ychkBAAApAnIdAQAAchwBAAByKQAAAHIpAAAAcioAAADaFWVuYWJsZV9sZWZ0X3JlY3Vyc2lvbtgDAABzFAAAAAAkBAEKAQYBCAEIAQoBCAEOAgwBeiNQYXJzZXJFbGVtZW50LmVuYWJsZV9sZWZ0X3JlY3Vyc2lvbumAAAAAKQNyHQEAAHIcAQAAckMAAABjAQAAAAEAAAACAAAAAgAAAEMAAABzUAAAAHwBcg50AKABoQABAG4OdABqAnIcdANkAYMBggF0AGoEc0xkAnQAXwR8AGQDawhyOnQFgwB0AF8Gbgp0B3wAgwF0AF8GdABqCHQAXwlkA1MAKQRhZgUAAAogICAgICAgIEVuYWJsZXMgInBhY2tyYXQiIHBhcnNpbmcsIHdoaWNoIGFkZHMgbWVtb2l6aW5nIHRvIHRoZSBwYXJzaW5nIGxvZ2ljLgogICAgICAgIFJlcGVhdGVkIHBhcnNlIGF0dGVtcHRzIGF0IHRoZSBzYW1lIHN0cmluZyBsb2NhdGlvbiAod2hpY2ggaGFwcGVucwogICAgICAgIG9mdGVuIGluIG1hbnkgY29tcGxleCBncmFtbWFycykgY2FuIGltbWVkaWF0ZWx5IHJldHVybiBhIGNhY2hlZCB2YWx1ZSwKICAgICAgICBpbnN0ZWFkIG9mIHJlLWV4ZWN1dGluZyBwYXJzaW5nL3ZhbGlkYXRpbmcgY29kZS4gIE1lbW9pemluZyBpcyBkb25lIG9mCiAgICAgICAgYm90aCB2YWxpZCByZXN1bHRzIGFuZCBwYXJzaW5nIGV4Y2VwdGlvbnMuCgogICAgICAgIFBhcmFtZXRlcnM6CgogICAgICAgIC0gY2FjaGVfc2l6ZV9saW1pdCAtIChkZWZhdWx0PSBgYDEyOGBgKSAtIGlmIGFuIGludGVnZXIgdmFsdWUgaXMgcHJvdmlkZWQKICAgICAgICAgIHdpbGwgbGltaXQgdGhlIHNpemUgb2YgdGhlIHBhY2tyYXQgY2FjaGU7IGlmIE5vbmUgaXMgcGFzc2VkLCB0aGVuCiAgICAgICAgICB0aGUgY2FjaGUgc2l6ZSB3aWxsIGJlIHVuYm91bmRlZDsgaWYgMCBpcyBwYXNzZWQsIHRoZSBjYWNoZSB3aWxsCiAgICAgICAgICBiZSBlZmZlY3RpdmVseSBkaXNhYmxlZC4KCiAgICAgICAgVGhpcyBzcGVlZHVwIG1heSBicmVhayBleGlzdGluZyBwcm9ncmFtcyB0aGF0IHVzZSBwYXJzZSBhY3Rpb25zIHRoYXQKICAgICAgICBoYXZlIHNpZGUtZWZmZWN0cy4gIEZvciB0aGlzIHJlYXNvbiwgcGFja3JhdCBwYXJzaW5nIGlzIGRpc2FibGVkIHdoZW4KICAgICAgICB5b3UgZmlyc3QgaW1wb3J0IHB5cGFyc2luZy4gIFRvIGFjdGl2YXRlIHRoZSBwYWNrcmF0IGZlYXR1cmUsIHlvdXIKICAgICAgICBwcm9ncmFtIG11c3QgY2FsbCB0aGUgY2xhc3MgbWV0aG9kIDpjbGFzczpgUGFyc2VyRWxlbWVudC5lbmFibGVfcGFja3JhdGAuCiAgICAgICAgRm9yIGJlc3QgcmVzdWx0cywgY2FsbCBgYGVuYWJsZV9wYWNrcmF0KClgYCBpbW1lZGlhdGVseSBhZnRlcgogICAgICAgIGltcG9ydGluZyBweXBhcnNpbmcuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgaW1wb3J0IHB5cGFyc2luZwogICAgICAgICAgICBweXBhcnNpbmcuUGFyc2VyRWxlbWVudC5lbmFibGVfcGFja3JhdCgpCgogICAgICAgIFBhY2tyYXQgcGFyc2luZyB3b3JrcyBzaW1pbGFyIGJ1dCBub3QgaWRlbnRpY2FsIHRvIEJvdW5kZWQgUmVjdXJzaW9uIHBhcnNpbmcsCiAgICAgICAgdGh1cyB0aGUgdHdvIGNhbm5vdCBiZSB1c2VkIHRvZ2V0aGVyLiBVc2UgYGBmb3JjZT1UcnVlYGAgdG8gZGlzYWJsZSBhbnkKICAgICAgICBwcmV2aW91cywgY29uZmxpY3Rpbmcgc2V0dGluZ3MuCiAgICAgICAgejBQYWNrcmF0IGFuZCBCb3VuZGVkIFJlY3Vyc2lvbiBhcmUgbm90IGNvbXBhdGlibGVUTikKcmQAAAByGwEAAHIZAQAAch8BAAByGgEAAHIWAAAAcgsBAAByFQAAAHIWAQAAct8AAAApAnIdAQAAchwBAAByKQAAAHIpAAAAcioAAADaDmVuYWJsZV9wYWNrcmF0CAQAAHMUAAAAACAEAQoBBgEIAQYBBgEIAQoCCgF6HFBhcnNlckVsZW1lbnQuZW5hYmxlX3BhY2tyYXQpAdoIcGFyc2VBbGwpBHKOAAAA2glwYXJzZV9hbGxyJgEAAHJDAAAAYwMAAAABAAAACQAAAAoAAABDAAAAc8AAAAB8AnAGfAN9A3QAoAGhAAEAfABqAnMefACgA6EAAQB4FnwAagREAF0MfQR8BKADoQABAHEmVwB8AGoFc0R8AaAGoQB9AXk8fACgB3wBZAGhAlwCfQV9BnwDcn58AKAIfAF8BaECfQV0CYMAdAqDABcAfQd8B6AHfAF8BaECAQBXAG42BAB0C2sKcrYBAH0IAQB6GHQAagxynIIAbgp8CKANZAKhAYIBVwBkAmQCfQh+CFgAWQBuBlgAfAZTAGQCUwApA2E2CQAACiAgICAgICAgUGFyc2UgYSBzdHJpbmcgd2l0aCByZXNwZWN0IHRvIHRoZSBwYXJzZXIgZGVmaW5pdGlvbi4gVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBhcyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UgdG8gdGhlCiAgICAgICAgY2xpZW50IGNvZGUuCgogICAgICAgIDpwYXJhbSBpbnN0cmluZzogVGhlIGlucHV0IHN0cmluZyB0byBiZSBwYXJzZWQuCiAgICAgICAgOnBhcmFtIHBhcnNlX2FsbDogSWYgc2V0LCB0aGUgZW50aXJlIGlucHV0IHN0cmluZyBtdXN0IG1hdGNoIHRoZSBncmFtbWFyLgogICAgICAgIDpwYXJhbSBwYXJzZUFsbDogcmV0YWluZWQgZm9yIHByZS1QRVA4IGNvbXBhdGliaWxpdHksIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLgogICAgICAgIDpyYWlzZXMgUGFyc2VFeGNlcHRpb246IFJhaXNlZCBpZiBgYHBhcnNlX2FsbGBgIGlzIHNldCBhbmQgdGhlIGlucHV0IHN0cmluZyBkb2VzIG5vdCBtYXRjaCB0aGUgd2hvbGUgZ3JhbW1hci4KICAgICAgICA6cmV0dXJuczogdGhlIHBhcnNlZCBkYXRhIGFzIGEgOmNsYXNzOmBQYXJzZVJlc3VsdHNgIG9iamVjdCwgd2hpY2ggbWF5IGJlIGFjY2Vzc2VkIGFzIGEgYGxpc3RgLCBhIGBkaWN0YCwgb3IKICAgICAgICAgIGFuIG9iamVjdCB3aXRoIGF0dHJpYnV0ZXMgaWYgdGhlIGdpdmVuIHBhcnNlciBpbmNsdWRlcyByZXN1bHRzIG5hbWVzLgoKICAgICAgICBJZiB0aGUgaW5wdXQgc3RyaW5nIGlzIHJlcXVpcmVkIHRvIG1hdGNoIHRoZSBlbnRpcmUgZ3JhbW1hciwgYGBwYXJzZV9hbGxgYCBmbGFnIG11c3QgYmUgc2V0IHRvIGBgVHJ1ZWBgLiBUaGlzCiAgICAgICAgaXMgYWxzbyBlcXVpdmFsZW50IHRvIGVuZGluZyB0aGUgZ3JhbW1hciB3aXRoIDpjbGFzczpgU3RyaW5nRW5kYCgpLgoKICAgICAgICBUbyByZXBvcnQgcHJvcGVyIGNvbHVtbiBudW1iZXJzLCBgYHBhcnNlX3N0cmluZ2BgIG9wZXJhdGVzIG9uIGEgY29weSBvZiB0aGUgaW5wdXQgc3RyaW5nIHdoZXJlIGFsbCB0YWJzIGFyZQogICAgICAgIGNvbnZlcnRlZCB0byBzcGFjZXMgKDggc3BhY2VzIHBlciB0YWIsIGFzIHBlciB0aGUgZGVmYXVsdCBpbiBgYHN0cmluZy5leHBhbmR0YWJzYGApLiBJZiB0aGUgaW5wdXQgc3RyaW5nCiAgICAgICAgY29udGFpbnMgdGFicyBhbmQgdGhlIGdyYW1tYXIgdXNlcyBwYXJzZSBhY3Rpb25zIHRoYXQgdXNlIHRoZSBgYGxvY2BgIGFyZ3VtZW50IHRvIGluZGV4IGludG8gdGhlIHN0cmluZwogICAgICAgIGJlaW5nIHBhcnNlZCwgb25lIGNhbiBlbnN1cmUgYSBjb25zaXN0ZW50IHZpZXcgb2YgdGhlIGlucHV0IHN0cmluZyBieSBkb2luZyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKCiAgICAgICAgLSBjYWxsaW5nIGBgcGFyc2Vfd2l0aF90YWJzYGAgb24geW91ciBncmFtbWFyIGJlZm9yZSBjYWxsaW5nIGBgcGFyc2Vfc3RyaW5nYGAgKHNlZSA6Y2xhc3M6YHBhcnNlX3dpdGhfdGFic2ApLAogICAgICAgIC0gZGVmaW5lIHlvdXIgcGFyc2UgYWN0aW9uIHVzaW5nIHRoZSBmdWxsIGBgKHMsbG9jLHRva3MpYGAgc2lnbmF0dXJlLCBhbmQgcmVmZXJlbmNlIHRoZSBpbnB1dCBzdHJpbmcgdXNpbmcgdGhlCiAgICAgICAgICBwYXJzZSBhY3Rpb24ncyBgYHNgYCBhcmd1bWVudCwgb3IKICAgICAgICAtIGV4cGxpY2l0bHkgZXhwYW5kIHRoZSB0YWJzIGluIHlvdXIgaW5wdXQgc3RyaW5nIGJlZm9yZSBjYWxsaW5nIGBgcGFyc2Vfc3RyaW5nYGAuCgogICAgICAgIEV4YW1wbGVzOgoKICAgICAgICBCeSBkZWZhdWx0LCBwYXJ0aWFsIG1hdGNoZXMgYXJlIE9LLgoKICAgICAgICA+Pj4gcmVzID0gV29yZCgnYScpLnBhcnNlX3N0cmluZygnYWFhYWFiYWFhJykKICAgICAgICA+Pj4gcHJpbnQocmVzKQogICAgICAgIFsnYWFhYWEnXQoKICAgICAgICBUaGUgcGFyc2luZyBiZWhhdmlvciB2YXJpZXMgYnkgdGhlIGluaGVyaXRpbmcgY2xhc3Mgb2YgdGhpcyBhYnN0cmFjdCBjbGFzcy4gUGxlYXNlIHJlZmVyIHRvIHRoZSBjaGlsZHJlbgogICAgICAgIGRpcmVjdGx5IHRvIHNlZSBtb3JlIGV4YW1wbGVzLgoKICAgICAgICBJdCByYWlzZXMgYW4gZXhjZXB0aW9uIGlmIHBhcnNlX2FsbCBmbGFnIGlzIHNldCBhbmQgaW5zdHJpbmcgZG9lcyBub3QgbWF0Y2ggdGhlIHdob2xlIGdyYW1tYXIuCgogICAgICAgID4+PiByZXMgPSBXb3JkKCdhJykucGFyc2Vfc3RyaW5nKCdhYWFhYWJhYWEnLCBwYXJzZV9hbGw9VHJ1ZSkKICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgLi4uCiAgICAgICAgcHlwYXJzaW5nLlBhcnNlRXhjZXB0aW9uOiBFeHBlY3RlZCBlbmQgb2YgdGV4dCwgZm91bmQgJ2InICAoYXQgY2hhciA1KSwgKGxpbmU6MSwgY29sOjYpCiAgICAgICAgcgEAAABOKQ5yZAAAAHIYAQAAcsQAAADaCnN0cmVhbWxpbmVywgAAAHLBAAAA2gpleHBhbmR0YWJzct8AAABy8wAAANoFRW1wdHnaCVN0cmluZ0VuZHIOAQAAcqQAAADaDndpdGhfdHJhY2ViYWNrKQlyJwAAAHKOAAAAcicBAAByJgEAAHLuAAAAco8AAAByAAEAANoCc2VynwAAAHIpAAAAcikAAAByKgAAANoMcGFyc2Vfc3RyaW5nNAQAAHMmAAAAAC0IAggBBgEIAQwBDAEGAQgBAgEQAQQBDAEMARABEAEGAQQDHAJ6GlBhcnNlckVsZW1lbnQucGFyc2Vfc3RyaW5nKQJywwAAANoKbWF4TWF0Y2hlcykGco4AAADaC21heF9tYXRjaGVz2gdvdmVybGFwcsMAAAByLwEAAHJDAAAAYwQAAAACAAAAEQAAAAoAAABjAAAAc3ABAAB0AHwFfAKDAn0FfABqAXMYfACgAqEAAQB4FnwAagNEAF0MfQZ8BqACoQABAHEgVwB8AGoEc0J0BXwBgwGgBqEAfQF0B3wBgwF9B2QBfQh8AGoIfQl8AGoJfQp0CqALoQABAGQBfQt5ynjEfAh8B2sBkAFyLHwLfAVrAJABcix5IHwJfAF8CIMCfQx8CnwBfAxkAmQDjQNcAn0NfQ5XAG4cBAB0DGsKcroBAAEAAQB8DGQEFwB9CFkAcWpYAHwNfAhrBJABciJ8C2QENwB9C3wEcuZ0DXwOoA6hAHwMfA1kBZwDgwEBAHwOfAx8DWYDVgABAHwDkAFyHHwJfAF8CIMCfQ98D3wIawSQAXISfA19CG4IfAhkBDcAfQhuBHwNfQhxanwMZAQXAH0IcWpXAFcAbjoEAHQPawqQAXJqAQB9EAEAehp0CmoQkAFyUIIAbgp8EKARZAahAYIBVwBkBmQGfRB+EFgAWQBuAlgAZAZTACkHYXQEAAAKICAgICAgICBTY2FuIHRoZSBpbnB1dCBzdHJpbmcgZm9yIGV4cHJlc3Npb24gbWF0Y2hlcy4gIEVhY2ggbWF0Y2ggd2lsbCByZXR1cm4gdGhlCiAgICAgICAgbWF0Y2hpbmcgdG9rZW5zLCBzdGFydCBsb2NhdGlvbiwgYW5kIGVuZCBsb2NhdGlvbi4gIE1heSBiZSBjYWxsZWQgd2l0aCBvcHRpb25hbAogICAgICAgIGBgbWF4X21hdGNoZXNgYCBhcmd1bWVudCwgdG8gY2xpcCBzY2FubmluZyBhZnRlciAnbicgbWF0Y2hlcyBhcmUgZm91bmQuICBJZgogICAgICAgIGBgb3ZlcmxhcGBgIGlzIHNwZWNpZmllZCwgdGhlbiBvdmVybGFwcGluZyBtYXRjaGVzIHdpbGwgYmUgcmVwb3J0ZWQuCgogICAgICAgIE5vdGUgdGhhdCB0aGUgc3RhcnQgYW5kIGVuZCBsb2NhdGlvbnMgYXJlIHJlcG9ydGVkIHJlbGF0aXZlIHRvIHRoZSBzdHJpbmcKICAgICAgICBiZWluZyBwYXJzZWQuICBTZWUgOmNsYXNzOmBwYXJzZV9zdHJpbmdgIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHBhcnNpbmcKICAgICAgICBzdHJpbmdzIHdpdGggZW1iZWRkZWQgdGFicy4KCiAgICAgICAgRXhhbXBsZTo6CgogICAgICAgICAgICBzb3VyY2UgPSAic2xkamYxMjNsc2RqamtmMzQ1c2xka2pmODc5bGtqc2ZkOTg3IgogICAgICAgICAgICBwcmludChzb3VyY2UpCiAgICAgICAgICAgIGZvciB0b2tlbnMsIHN0YXJ0LCBlbmQgaW4gV29yZChhbHBoYXMpLnNjYW5fc3RyaW5nKHNvdXJjZSk6CiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyAnXicqKGVuZC1zdGFydCkpCiAgICAgICAgICAgICAgICBwcmludCgnICcqc3RhcnQgKyB0b2tlbnNbMF0pCgogICAgICAgIHByaW50czo6CgogICAgICAgICAgICBzbGRqZjEyM2xzZGpqa2YzNDVzbGRramY4Nzlsa2pzZmQ5ODcKICAgICAgICAgICAgXl5eXl4KICAgICAgICAgICAgc2xkamYKICAgICAgICAgICAgICAgICAgICBeXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgbHNkamprZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xka2pmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsa2pzZmQKICAgICAgICByAQAAAEYpAXLbAAAAchQAAAApA3IAAQAA2gVzdGFydNoDZW5kTikS2gNtaW5yxAAAAHIoAQAAcsIAAABywQAAANoDc3RycikBAABy8QAAAHLzAAAAct8AAAByZAAAANoKcmVzZXRDYWNoZXKMAAAAcpMAAABy9wAAAHIOAQAAcqQAAAByLAEAACkRcicAAAByjgAAAHIwAQAAcjEBAABywwAAAHIvAQAAcu4AAABy8gAAAHKPAAAA2gpwcmVwYXJzZUZu2gdwYXJzZUZu2gdtYXRjaGVz2gZwcmVsb2PaB25leHRMb2NyAAEAANoHbmV4dGxvY3KfAAAAcikAAAByKQAAAHIqAAAA2gtzY2FuX3N0cmluZ3kEAABzTgAAAAAnCgEGAQgBDAEMAgYBDAEIAQQBBgEGAQgBBAECARYBAgEKARYBDgEOAgoBCAEEAQICBgECAQoDDAEGAQoBCgEGAgoCBgIQARIBCAEEA3oZUGFyc2VyRWxlbWVudC5zY2FuX3N0cmluZykBcsMAAAApA3KOAAAAcsMAAAByQwAAAGMCAAAAAQAAAAkAAAAKAAAAQwAAAHP8AAAAZwB9A2QBfQRkAnwAXwB5snh4fABqAXwBfAJkA40CRABdZlwDfQV9Bn0HfAOgAnwBfAR8BoUCGQChAQEAfAVygnQDfAV0BIMCclh8A3wFoAWhADcAfQNuKnQDfAV0BoMCcnh0A3wFdAeDAnN4fAOgCHwFoQEBAG4KfAOgAnwFoQEBAHwHfQRxIFcAfAOgAnwBfARkBIUCGQChAQEAZAVkBoQAfANEAIMBfQNkB6AJZAhkBoQAdAp8A4MBRACDAaEBUwAEAHQLawpy9gEAfQgBAHoYdAxqDXLcggBuCnwIoA5kBKEBggFXAGQEZAR9CH4IWABZAG4CWABkBFMAKQlhYgMAAAogICAgICAgIEV4dGVuc2lvbiB0byA6Y2xhc3M6YHNjYW5fc3RyaW5nYCwgdG8gbW9kaWZ5IG1hdGNoaW5nIHRleHQgd2l0aCBtb2RpZmllZCB0b2tlbnMgdGhhdCBtYXkKICAgICAgICBiZSByZXR1cm5lZCBmcm9tIGEgcGFyc2UgYWN0aW9uLiAgVG8gdXNlIGBgdHJhbnNmb3JtX3N0cmluZ2BgLCBkZWZpbmUgYSBncmFtbWFyIGFuZAogICAgICAgIGF0dGFjaCBhIHBhcnNlIGFjdGlvbiB0byBpdCB0aGF0IG1vZGlmaWVzIHRoZSByZXR1cm5lZCB0b2tlbiBsaXN0LgogICAgICAgIEludm9raW5nIGBgdHJhbnNmb3JtX3N0cmluZygpYGAgb24gYSB0YXJnZXQgc3RyaW5nIHdpbGwgdGhlbiBzY2FuIGZvciBtYXRjaGVzLAogICAgICAgIGFuZCByZXBsYWNlIHRoZSBtYXRjaGVkIHRleHQgcGF0dGVybnMgYWNjb3JkaW5nIHRvIHRoZSBsb2dpYyBpbiB0aGUgcGFyc2UKICAgICAgICBhY3Rpb24uICBgYHRyYW5zZm9ybV9zdHJpbmcoKWBgIHJldHVybnMgdGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBzdHJpbmcuCgogICAgICAgIEV4YW1wbGU6OgoKICAgICAgICAgICAgd2QgPSBXb3JkKGFscGhhcykKICAgICAgICAgICAgd2Quc2V0X3BhcnNlX2FjdGlvbihsYW1iZGEgdG9rczogdG9rc1swXS50aXRsZSgpKQoKICAgICAgICAgICAgcHJpbnQod2QudHJhbnNmb3JtX3N0cmluZygibm93IGlzIHRoZSB3aW50ZXIgb2Ygb3VyIGRpc2NvbnRlbnQgbWFkZSBnbG9yaW91cyBzdW1tZXIgYnkgdGhpcyBzdW4gb2YgeW9yay4iKSkKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgIE5vdyBJcyBUaGUgV2ludGVyIE9mIE91ciBEaXNjb250ZW50IE1hZGUgR2xvcmlvdXMgU3VtbWVyIEJ5IFRoaXMgU3VuIE9mIFlvcmsuCiAgICAgICAgcgEAAABUKQFywwAAAE5jAQAAAAAAAAACAAAAAwAAAFMAAABzFAAAAGcAfABdDH0BfAFyBHwBkQJxBFMAcikAAAByKQAAACkCcjcAAADaAW9yKQAAAHIpAAAAcioAAAByOQAAAPcEAABzAgAAAAYAejJQYXJzZXJFbGVtZW50LnRyYW5zZm9ybV9zdHJpbmcuPGxvY2Fscz4uPGxpc3Rjb21wPnJgAAAAYwEAAAAAAAAAAgAAAAQAAABTAAAAcxQAAABnAHwAXQx9AXQAfAGDAZECcQRTAHIpAAAAKQFyNQEAACkCcjcAAAByagAAAHIpAAAAcikAAAByKgAAAHI5AAAA+AQAAHMCAAAABgApD3LBAAAAcj0BAAByzQAAAHL7AAAAch8AAABynQAAAHIPAAAAciIAAADaBmV4dGVuZNoEam9pbnIbAAAAcg4BAAByZAAAAHKkAAAAciwBAAApCXInAAAAco4AAABywwAAANoDb3V02gVsYXN0RXJsAAAAcmoAAABy7gAAAHKfAAAAcikAAAByKQAAAHIqAAAA2hB0cmFuc2Zvcm1fc3RyaW5n0gQAAHMoAAAAABQEAQQDBgECARoBEgEEAQoBDgEUAQwCCgEIARIBDgEYARABBgEEA3oeUGFyc2VyRWxlbWVudC50cmFuc2Zvcm1fc3RyaW5nKQVyjgAAAHIwAQAAcsMAAAByLwEAAHJDAAAAYwMAAAACAAAABgAAAAoAAABDAAAAc2QAAAB0AHwEfAKDAn0EeR50AWQBZAKEAHwAagJ8AXwEfANkA40DRACDAYMBUwAEAHQDawpyXgEAfQUBAHoYdARqBXJEggBuCnwFoAZkBKEBggFXAGQEZAR9BX4FWABZAG4CWABkBFMAKQVhpAMAAAogICAgICAgIEFub3RoZXIgZXh0ZW5zaW9uIHRvIDpjbGFzczpgc2Nhbl9zdHJpbmdgLCBzaW1wbGlmeWluZyB0aGUgYWNjZXNzIHRvIHRoZSB0b2tlbnMgZm91bmQKICAgICAgICB0byBtYXRjaCB0aGUgZ2l2ZW4gcGFyc2UgZXhwcmVzc2lvbi4gIE1heSBiZSBjYWxsZWQgd2l0aCBvcHRpb25hbAogICAgICAgIGBgbWF4X21hdGNoZXNgYCBhcmd1bWVudCwgdG8gY2xpcCBzZWFyY2hpbmcgYWZ0ZXIgJ24nIG1hdGNoZXMgYXJlIGZvdW5kLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgICMgYSBjYXBpdGFsaXplZCB3b3JkIHN0YXJ0cyB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIsIGZvbGxvd2VkIGJ5IHplcm8gb3IgbW9yZSBsb3dlcmNhc2UgbGV0dGVycwogICAgICAgICAgICBjYXBfd29yZCA9IFdvcmQoYWxwaGFzLnVwcGVyKCksIGFscGhhcy5sb3dlcigpKQoKICAgICAgICAgICAgcHJpbnQoY2FwX3dvcmQuc2VhcmNoX3N0cmluZygiTW9yZSB0aGFuIElyb24sIG1vcmUgdGhhbiBMZWFkLCBtb3JlIHRoYW4gR29sZCBJIG5lZWQgRWxlY3RyaWNpdHkiKSkKCiAgICAgICAgICAgICMgdGhlIHN1bSgpIGJ1aWx0aW4gY2FuIGJlIHVzZWQgdG8gbWVyZ2UgcmVzdWx0cyBpbnRvIGEgc2luZ2xlIFBhcnNlUmVzdWx0cyBvYmplY3QKICAgICAgICAgICAgcHJpbnQoc3VtKGNhcF93b3JkLnNlYXJjaF9zdHJpbmcoIk1vcmUgdGhhbiBJcm9uLCBtb3JlIHRoYW4gTGVhZCwgbW9yZSB0aGFuIEdv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aW9ucyBtYXkgYWxzbyBiZSBtdWx0aXBsaWVkIGJ5IGEgMi1pbnRlZ2VyCiAgICAgICAgdHVwbGUsIHNpbWlsYXIgdG8gYGB7bWluLCBtYXh9YGAgbXVsdGlwbGllcnMgaW4gcmVndWxhciBleHByZXNzaW9ucy4gIFR1cGxlcwogICAgICAgIG1heSBhbHNvIGluY2x1ZGUgYGBOb25lYGAgYXMgaW46CiAgICAgICAgLSBgYGV4cHIqKG4sIE5vbmUpYGAgb3IgYGBleHByKihuLCApYGAgaXMgZXF1aXZhbGVudAogICAgICAgICAgICAgdG8gYGBleHByKm4gKyBaZXJvT3JNb3JlKGV4cHIpYGAKICAgICAgICAgICAgIChyZWFkIGFzICJhdCBsZWFzdCBuIGluc3RhbmNlcyBvZiBgYGV4cHJgYCIpCiAgICAgICAgLSBgYGV4cHIqKE5vbmUsIG4pYGAgaXMgZXF1aXZhbGVudCB0byBgYGV4cHIqKDAsIG4pYGAKICAgICAgICAgICAgIChyZWFkIGFzICIwIHRvIG4gaW5zdGFuY2VzIG9mIGBgZXhwcmBgIikKICAgICAgICAtIGBgZXhwciooTm9uZSwgTm9uZSlgYCBpcyBlcXVpdmFsZW50IHRvIGBgWmVyb09yTW9yZShleHByKWBgCiAgICAgICAgLSBgYGV4cHIqKDEsIE5vbmUpYGAgaXMgZXF1aXZhbGVudCB0byBgYE9uZU9yTW9yZShleHByKWBgCgogICAgICAgIE5vdGUgdGhhdCBgYGV4cHIqKE5vbmUsIG4pYGAgZG9lcyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uIGlmCiAgICAgICAgbW9yZSB0aGFuIG4gZXhwcnMgZXhpc3QgaW4gdGhlIGlucHV0IHN0cmVhbTsgdGhhdCBpcywKICAgICAgICBgYGV4cHIqKE5vbmUsIG4pYGAgZG9lcyBub3QgZW5mb3JjZSBhIG1heGltdW0gbnVtYmVyIG9mIGV4cHIKICAgICAgICBvY2N1cnJlbmNlcy4gIElmIHRoaXMgYmVoYXZpb3IgaXMgZGVzaXJlZCwgdGhlbiB3cml0ZQogICAgICAgIGBgZXhwciooTm9uZSwgbikgKyB+ZXhwcmBgCiAgICAgICAgKQJyAQAAAE5O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BIUCGQB0BHwBgwFkBGsEcnBkBaAFdAR8AYMBoQFuAmQGoQKDAYIBfAB0BnwBZANkAYUCGQCDARQAfQJ8AlMAKQdhewMAAAogICAgICAgIHVzZSBgYFtdYGAgaW5kZXhpbmcgbm90YXRpb24gYXMgYSBzaG9ydCBmb3JtIGZvciBleHByZXNzaW9uIHJlcGV0aXRpb246CgogICAgICAgIC0gYGBleHByW25dYGAgaXMgZXF1aXZhbGVudCB0byBgYGV4cHIqbmBgCiAgICAgICAgLSBgYGV4cHJbbSwgbl1gYCBpcyBlcXVpdmFsZW50IHRvIGBgZXhwcioobSwgbilgYAogICAgICAgIC0gYGBleHByW24sIC4uLl1gYCBvciBgYGV4cHJbbixdYGAgaXMgZXF1aXZhbGVudAogICAgICAgICAgICAgdG8gYGBleHByKm4gKyBaZXJvT3JNb3JlKGV4cHIpYGAKICAgICAgICAgICAgIChyZWFkIGFzICJhdCBsZWFzdCBuIGluc3RhbmNlcyBvZiBgYGV4cHJgYCIpCiAgICAgICAgLSBgYGV4cHJbLi4uLCBuXWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBleHByKigwLCBuKWBgCiAgICAgICAgICAgICAocmVhZCBhcyAiMCB0byBuIGluc3RhbmNlcyBvZiBgYGV4cHJgYCIpCiAgICAgICAgLSBgYGV4cHJbLi4uXWBgIGFuZCBgYGV4cHJbMCwgLi4uXWBgIGFyZSBlcXVpdmFsZW50IHRvIGBgWmVyb09yTW9yZShleHByKWBgCiAgICAgICAgLSBgYGV4cHJbMSwgLi4uXWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBPbmVPck1vcmUoZXhwcilgYAoKICAgICAgICBgYE5vbmVgYCBtYXkgYmUgdXNlZCBpbiBwbGFjZSBvZiBgYC4uLmBgLgoKICAgICAgICBOb3RlIHRoYXQgYGBleHByWy4uLiwgbl1gYCBhbmQgYGBleHByW20sIG5dYGBkbyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uCiAgICAgICAgaWYgbW9yZSB0aGFuIGBgbmBgIGBgZXhwcmBgcyBleGlzdCBpbiB0aGUgaW5wdXQgc3RyZWFtLiAgSWYgdGhpcyBiZWhhdmlvciBpcwog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cyYAAAB8AKAAfAFwCnQBfAJwEHQCfANwFnQDoQN8AF8EZAF8AF8FfABTACkCYSADAAAKICAgICAgICBDdXN0b21pemUgZGlzcGxheSBvZiBkZWJ1Z2dpbmcgbWVzc2FnZXMgd2hpbGUgZG9pbmcgcGF0dGVybiBtYXRjaGluZzoKCiAgICAgICAgLSBgYHN0YXJ0X2FjdGlvbmBgIC0gbWV0aG9kIHRvIGJlIGNhbGxlZCB3aGVuIGFuIGV4cHJlc3Npb24gaXMgYWJvdXQgdG8gYmUgcGFyc2VkOwogICAgICAgICAgc2hvdWxkIGhhdmUgdGhlIHNpZ25hdHVyZSBgYGZuKGlucHV0X3N0cmluZzogc3RyLCBsb2NhdGlvbjogaW50LCBleHByZXNzaW9uOiBQYXJzZXJFbGVtZW50LCBjYWNoZV9oaXQ6IGJvb2wpYGAKCiAgICAgICAgLSBgYHN1Y2Nlc3NfYWN0aW9uYGAgLSBtZXRob2QgdG8gYmUgY2FsbGVkIHdoZW4gYW4gZXhwcmVzc2lvbiBoYXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZDsKICAgICAgICAgIHNob3VsZCBoYXZlIHRoZSBzaWduYXR1cmUgYGBmbihpbnB1dF9zdHJpbmc6IHN0ciwgc3RhcnRfbG9jYXRpb246IGludCwgZW5kX2xvY2F0aW9uOiBpbnQsIGV4cHJlc3Npb246IFBhcnNlckVMZW1lbnQsIHBhcnNlZF90b2tlbnM6IFBhcnNlUmVzdWx0cywgY2FjaGVfaGl0OiBib29sKWBgCgogICAgICAgIC0gYGBleGNlcHRpb25fYWN0aW9uYGAgLSBtZXRob2QgdG8gYmUgY2FsbGVkIHdoZW4gZXhwcmVzc2lvbiBmYWlscyB0byBwYXJzZTsKICAgICAgICAgIHNob3VsZCBoYXZlIHRoZSBzaWduYXR1cmUgYGBmbihpbnB1dF9zdHJpbmc6IHN0ciwgbG9jYXRpb246IGludCwgZXhwcmVzc2lvbjogUGFyc2VyRWxlbWVudCwgZXhjZXB0aW9uOiBFeGNlcHRpb24sIGNhY2hlX2hpdDogYm9vbClgYAogICAgICAgIFQpBnK2AAAAcpkAAAByngAAAHKhAAAAcsgAAABywwAAACkEcicAAAByegEAAHJ7AQAAcnwBAAByKQAAAHIpAAAAcioAAADaEXNldF9kZWJ1Z19hY3Rpb25z3wYAAHMMAAAAABIEAQYBBgEMAgYBeh9QYXJzZXJFbGVtZW50LnNldF9kZWJ1Z19hY3Rpb25zKQLaBGZsYWdyQwAAAGMCAAAAAAAAAAIAAAAFAAAAQwAAAHMeAAAAfAFyFHwAoAB0AXQCdAOhAwEAbgZkAXwAXwR8AFMAKQJhoQYAAAogICAgICAgIEVuYWJsZSBkaXNwbGF5IG9mIGRlYnVnZ2luZyBtZXNzYWdlcyB3aGlsZSBkb2luZyBwYXR0ZXJuIG1hdGNoaW5nLgogICAgICAgIFNldCBgYGZsYWdgYCB0byBgYFRydWVgYCB0byBlbmFibGUsIGBgRmFsc2VgYCB0byBkaXNhYmxlLgoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIHdkID0gV29yZChhbHBoYXMpLnNldF9uYW1lKCJhbHBoYXdvcmQiKQogICAgICAgICAgICBpbnRlZ2VyID0gV29yZChudW1zKS5zZXRfbmFtZSgibnVtd29yZCIpCiAgICAgICAgICAgIHRlcm0gPSB3ZCB8IGludGVnZXIKCiAgICAgICAgICAgICMgdHVybiBvbiBkZWJ1Z2dpbmcgZm9yIHdkCiAgICAgICAgICAgIHdkLnNldF9kZWJ1ZygpCgogICAgICAgICAgICB0ZXJtWzEsIC4uLl0ucGFyc2Vfc3RyaW5nKCJhYmMgMTIzIHh5eiA4OTAiKQoKICAgICAgICBwcmludHM6OgoKICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAwKDEsMSkKICAgICAgICAgICAgTWF0Y2hlZCBhbHBoYXdvcmQgLT4gWydhYmMnXQogICAgICAgICAgICBNYXRjaCBhbHBoYXdvcmQgYXQgbG9jIDMoMSw0KQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciA0KSwgKGxpbmU6MSwgY29sOjUpCiAgICAgICAgICAgIE1hdGNoIGFscGhhd29yZCBhdCBsb2MgNygxLDgpCiAgICAgICAgICAgIE1hdGNoZWQgYWxwaGF3b3JkIC0+IFsneHl6J10KICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAxMSgxLDEyKQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciAxMiksIChsaW5lOjEsIGNvbDoxMykKICAgICAgICAgICAgTWF0Y2ggYWxwaGF3b3JkIGF0IGxvYyAxNSgxLDE2KQogICAgICAgICAgICBFeGNlcHRpb24gcmFpc2VkOkV4cGVjdGVkIGFscGhhd29yZCAoYXQgY2hhciAxNSksIChsaW5lOjEsIGNvbDoxNikKCiAgICAgICAgVGhlIG91dHB1dCBzaG93biBpcyB0aGF0IHByb2R1Y2VkIGJ5IHRoZSBkZWZhdWx0IGRlYnVnIGFjdGlvbnMgLSBjdXN0b20gZGVidWcgYWN0aW9ucyBjYW4gYmUKICAgICAgICBzcGVjaWZpZWQgdXNpbmcgOmNsYXNzOmBzZXRfZGVidWdfYWN0aW9uc2AuIFByaW9yIHRvIGF0dGVtcHRpbmcKICAgICAgICB0byBtYXRjaCB0aGUgYGB3ZGBgIGV4cHJlc3Npb24sIHRoZSBkZWJ1Z2dpbmcgbWVzc2FnZSBgYCJNYXRjaCA8ZXhwcm5hbWU+IGF0IGxvYyA8bj4oPGxpbmU+LDxjb2w+KSJgYAogICAgICAgIGlzIHNob3duLiBUaGVuIGlmIHRoZSBwYXJzZSBzdWNjZWVkcywgYSBgYCJNYXRjaGVkImBgIG1lc3NhZ2UgaXMgc2hvd24sIG9yIGFuIGBgIkV4Y2VwdGlvbiByYWlzZWQiYGAKICAgICAgICBtZXNzYWdlIGlzIHNob3duLiBBbHNvIG5vdGUgdGhlIHVzZSBvZiA6Y2xhc3M6YHNldF9uYW1lYCB0byBhc3NpZ24gYSBodW1hbi1yZWFkYWJsZSBuYW1lIHRvIHRoZSBleHByZXNzaW9uLAogICAgICAgIHdoaWNoIG1ha2VzIGRlYnVnZ2luZyBhbmQgZXhjZXB0aW9uIG1lc3NhZ2VzIGVhc2llciB0byB1bmRlcnN0YW5kIC0gZm9yIGluc3RhbmNlLCB0aGUgZGVmYXVsdAogICAgICAgIG5hbWUgY3JlYXRlZCBmb3IgdGhlIDpjbGFzczpgV29yZGAgZXhw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YWJsZSBjb21tZW50IGZpbHRlcmluZwogICAgICAgIC0gYGBmdWxsX2R1bXBgYCAtIChkZWZhdWx0PSBgYFRydWVgYCkgLSBkdW1wIHJlc3VsdHMgYXMgbGlzdCBmb2xsb3dlZCBieSByZXN1bHRzIG5hbWVzIGluIG5lc3RlZCBvdXRsaW5lOwogICAgICAgICAgaWYgRmFsc2UsIG9ubHkgZHVtcCBuZXN0ZWQgbGlzdAogICAgICAgIC0gYGBwcmludF9yZXN1bHRzYGAgLSAoZGVmYXVsdD0gYGBUcnVlYGApIHByaW50cyB0ZXN0IG91dHB1dCB0byBzdGRvdXQKICAgICAgICAtIGBgZmFpbHVyZV90ZXN0c2BgIC0gKGRlZmF1bHQ9IGBgRmFsc2VgYCkgaW5kaWNhdGVzIGlmIHRoZXNlIHRlc3RzIGFyZSBleHBlY3RlZCB0byBmYWlsIHBhcnNpbmcKICAgICAgICAtIGBgcG9zdF9wYXJzZWBgIC0gKGRlZmF1bHQ9IGBgTm9uZWBgKSBvcHRpb25hbCBjYWxsYmFjayBmb3Igc3VjY2Vzc2Z1bCBwYXJzZSByZXN1bHRzOyBjYWxsZWQgYXMKICAgICAgICAgIGBmbih0ZXN0X3N0cmluZywgcGFyc2VfcmVzdWx0cylgIGFuZCByZXR1cm5zIGEgc3RyaW5nIHRvIGJlIGFkZGVkIHRvIHRoZSB0ZXN0IG91dHB1dAogICAgICAgIC0gYGBmaWxlYGAgLSAoZGVmYXVsdD0gYGBOb25lYGApIG9wdGlvbmFsIGZpbGUtbGlrZSBvYmplY3QgdG8gd2hpY2ggdGVzdCBvdXRwdXQgd2lsbCBiZSB3cml0dGVuOwogICAgICAgICAgaWYgTm9uZSwgd2lsbCBkZWZhdWx0IHRvIGBgc3lzLnN0ZG91dGBgCiAgICAgICAgLSBgYHdpdGhfbGluZV9udW1iZXJzYGAgLSBkZWZhdWx0PSBgYEZhbHNlYGApIHNob3cgdGVzdCBzdHJpbmdzIHdpdGggbGluZSBhbmQgY29sdW1uIG51bWJlcnMKCiAgICAgICAgUmV0dXJuczogYSAoc3VjY2VzcywgcmVzdWx0cykgdHVwbGUsIHdoZXJlIHN1Y2Nlc3MgaW5kaWNhdGVzIHRoYXQgYWxsIHRlc3RzIHN1Y2NlZWRlZAogICAgICAgIChvciBmYWlsZWQgaWYgYGBmYWlsdXJlX3Rlc3RzYGAgaXMgVHJ1ZSksIGFuZCB0aGUgcmVzdWx0cyBjb250YWluIGEgbGlzdCBvZiBsaW5lcyBvZiBlYWNoCiAgICAgICAgdGVzdCdzIG91dHB1dAoKICAgICAgICBFeGFtcGxlOjoKCiAgICAgICAgICAgIG51bWJlcl9leHByID0gcHlwYXJzaW5nX2NvbW1vbi5udW1iZXIuY29weSgpCgogICAgICAgICAgICByZXN1bHQgPSBudW1iZXJfZXhwci5ydW5fdGVzdHMoJycnCiAgICAgICAgICAgICAgICAjIHVuc2lnbmVkIGludGVnZXIKICAgICAgICAgICAgICAgIDEwMAogICAgICAgICAgICAgICAgIyBuZWdhdGl2ZSBpbnRlZ2VyCiAgICAgICAgICAgICAgICAtMTAwCiAgICAgICAgICAgICAgICAjIGZsb2F0IHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICAgICAgIyBpbnRlZ2VyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbgogICAgICAgICAgICAgICAgMWUtMTIKICAgICAgICAgICAgICAgICcnJykKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKCiAgICAgICAgICAgIHJlc3VsdCA9IG51bWJlcl9leHByLnJ1bl90ZXN0cygnJycKICAgICAgICAgICAgICAgICMgc3RyYXkgY2hhcmFjdGVyCiAgICAgICAgICAgICAgICAxMDBaCiAgICAgICAgICAgICAgICAjIG1pc3NpbmcgbGVhZGluZyBkaWdpdCBiZWZvcmUgJy4nCiAgICAgICAgICAgICAgICAtLjEwMAogICAgICAgICAgICAgICAgIyB0b28gbWFueSAnLicKICAgICAgICAgICAgICAgIDMuMTQuMTU5CiAgICAgICAgICAgICAgICAnJycsIGZhaWx1cmVfdGVzdHM9VHJ1ZSkKICAgICAgICAgICAgcHJpbnQoIlN1Y2Nlc3MiIGlmIHJlc3VsdFswXSBlbHNlICJGYWlsZWQhIikKCiAgICAgICAgcHJpbnRzOjoKCiAgICAgICAgICAgICMgdW5zaWduZWQgaW50ZWdlcgogICAgICAgICAgICAxMDAKICAgICAgICAgICAgWzEwMF0KCiAgICAgICAgICAgICMgbmVnYXRpdmUgaW50ZWdlcgogICAgICAgICAgICAtMTAwCiAgICAgICAgICAgIFstMTAwXQoKICAgICAgICAgICAgIyBmbG9hdCB3aXRoIHNjaWVudGlmaWMgbm90YXRpb24KICAgICAgICAgICAgNi4wMmUyMwogICAgICAgICAgICBbNi4wMmUrMjNdCgogICAgICAgICAgICAjIGludGVnZXIgd2l0aCBzY2llbnRpZmljIG5vdGF0aW9uCiAgICAgICAgICAgIDFlLTEyCiAgICAgICAgICAgIFsxZS0xMl0KCiAgICAgICAgICAgIFN1Y2Nlc3MKCiAgICAgICAgICAgICMgc3RyYXkgY2hhcmFjdGVyCiAgICAgICAgICAgIDEwMFoKICAgICAgICAgICAgICAgXgogICAgICAgICAgICBGQUlMOiBFeHBlY3RlZCBlbmQgb2YgdGV4dCAoYXQgY2hhciAzKSwgKGxpbmU6MSwgY29sOjQpCgogICAgICAgICAgICAjIG1pc3NpbmcgbGVhZGluZyBkaWdpdCBiZWZvcmUgJy4nCiAgICAgICAgICAgIC0uMTAwCiAgICAgICAgICAgIF4KICAgICAgICAgICAgRkFJTDogRXhwZWN0ZWQge3JlYWwgbnVtYmVyIHdpdGggc2NpZW50aWZpYyBub3RhdGlvbiB8IHJlYWwgbnVtYmVyIHwgc2lnbmVkIGludGVnZXJ9IChhdCBjaGFyIDApLCAobGluZToxLCBjb2w6MSkKCiAgICAgICAgICAgICMgdG9vIG1hbnkgJy4nCiAgICAgICAgICAgIDMuMTQuMTU5CiAgICAgICAgICAgICAgICBeCiAgICAgICAgICAgIEZBSUw6IEV4cGVjdGVkIGVuZCBvZiB0ZXh0IChhdCBjaGFyIDQpLCAobGluZToxLCBjb2w6NSkKCiAgICAgICAgICAgIFN1Y2Nlc3MKCiAgICAgICAgRWFjaCB0ZXN0IHN0cmluZyBtdXN0IGJl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aGVzLAogICAgdGhhdCBpcywgc3RyaW5ncyB3aXRoIGF0IG1vc3QgJ24nIG1pc21hdGNoaW5nIGNoYXJhY3RlcnMuCiAgICA6Y2xhc3M6YENsb3NlTWF0Y2hgIHRha2VzIHBhcmFtZXRlcnM6CgogICAgLSBgYG1hdGNoX3N0cmluZ2BgIC0gc3RyaW5nIHRvIGJlIG1hdGNoZWQKICAgIC0gYGBjYXNlbGVzc2BgIC0gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBpZ25vcmUgY2FzaW5nIHdoZW4gY29tcGFyaW5nIGNoYXJhY3RlcnMKICAgIC0gYGBtYXhfbWlzbWF0Y2hlc2BgIC0gKGBgZGVmYXVsdD0xYGApIG1heGltdW0gbnVtYmVyIG9mCiAgICAgIG1pc21hdGNoZXMgYWxsb3dlZCB0byBjb3VudCBhcyBhIG1hdGNoCgogICAgVGhlIHJlc3VsdHMgZnJvbSBhIHN1Y2Nlc3NmdWwgcGFyc2Ugd2lsbCBjb250YWluIHRoZSBtYXRjaGVkIHRleHQKICAgIGZyb20gdGhlIGlucHV0IHN0cmluZyBhbmQgdGhlIGZvbGxvd2luZyBuYW1lZCByZXN1bHRzOgoKICAgIC0gYGBtaXNtYXRjaGVzYGAgLSBhIGxpc3Qgb2YgdGhlIHBvc2l0aW9ucyB3aXRoaW4gdGhlCiAgICAgIG1hdGNoX3N0cmluZyB3aGVyZSBtaXNtYXRjaGVzIHdlcmUgZm91bmQKICAgIC0gYGBvcmlnaW5hbGBgIC0gdGhlIG9yaWdpbmFsIG1hdGNoX3N0cmluZyB1c2VkIHRvIGNvbXBhcmUKICAgICAgYWdhaW5zdCB0aGUgaW5wdXQgc3RyaW5nCgogICAgSWYgYGBtaXNtYXRjaGVzYGAgaXMgYW4gZW1wdHkgbGlzdCwgdGhlbiB0aGUgbWF0Y2ggd2FzIGFuIGV4YWN0CiAgICBtYXRjaC4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgcGF0dCA9IENsb3NlTWF0Y2goIkFUQ0FUQ0dBQVRHR0EiKQogICAgICAgIHBhdHQucGFyc2Vfc3RyaW5nKCJBVENBVENHQUFYR0dBIikgIyAtPiAoWydBVENBVENHQUFYR0dBJ10sIHsnbWlzbWF0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BWoGZQQZAGUFagZlBBkAZQVqBmUEGQBlCGUFagZlBBkAZAicC4cAZgFkCWQKhA9aCWQLZAyEAFoKZBFkDmQPhAFaC4cABABaDFMAKRLaBFdvcmRhOAsAAFRva2VuIGZvciBtYXRjaGluZyB3b3JkcyBjb21wb3NlZCBvZiBhbGxvd2VkIGNoYXJhY3RlciBzZXRzLgogICAgUGFyYW1ldGVyczoKICAgIC0gYGBpbml0X2NoYXJzYGAgLSBzdHJpbmcgb2YgYWxsIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgYmUgdXNlZCB0bwogICAgICBtYXRjaCBhcyBhIHdvcmQ7ICJBQkMiIHdpbGwgbWF0Y2ggIkFBQSIsICJBQkFCIiwgIkNCQUMiLCBldGMuOwogICAgICBpZiBgYGJvZHlfY2hhcnNgYCBpcyBhbHNvIHNwZWNpZmllZCwgdGhlbiB0aGlzIGlzIHRoZSBzdHJpbmcgb2YKICAgICAgaW5pdGlhbCBjaGFyYWN0ZXJzCiAgICAtIGBgYm9keV9jaGFyc2BgIC0gc3RyaW5nIG9mIGNoYXJhY3RlcnMgdGhhdAogICAgICBjYW4gYmUgdXNlZCBmb3IgbWF0Y2hpbmcgYWZ0ZXIgYSBtYXRjaGVkIGluaXRpYWwgY2hhcmFjdGVyIGFzCiAgICAgIGdpdmVuIGluIGBgaW5pdF9jaGFyc2BgOyBpZiBvbWl0dGVkLCBzYW1lIGFzIHRoZSBpbml0aWFsIGNoYXJhY3RlcnMKICAgICAgKGRlZmF1bHQ9YGBOb25lYGApCiAgICAtIGBgbWluYGAgLSBtaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIG1hdGNoIChkZWZhdWx0PTEpCiAgICAtIGBgbWF4YGAgLSBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIG1hdGNoIChkZWZhdWx0PTApCiAgICAtIGBgZXhhY3RgYCAtIGV4YWN0IG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIG1hdGNoIChkZWZhdWx0PTApCiAgICAtIGBgYXNfa2V5d29yZGBgIC0gbWF0Y2ggYXMgYSBrZXl3b3JkIChkZWZhdWx0PWBgRmFsc2VgYCkKICAgIC0gYGBleGNsdWRlX2NoYXJzYGAgLSBjaGFyYWN0ZXJzIHRoYXQgbWlnaHQgYmUKICAgICAgZm91bmQgaW4gdGhlIGlucHV0IGBgYm9keV9jaGFyc2BgIHN0cmluZyBidXQgd2hpY2ggc2hvdWxkIG5vdCBiZQogICAgICBhY2NlcHRlZCBmb3IgbWF0Y2hpbmcgO3VzZWZ1bCB0byBkZWZpbmUgYSB3b3JkIG9mIGFsbAogICAgICBwcmludGFibGVzIGV4Y2VwdCBmb3Igb25lIG9yIHR3byBjaGFyYWN0ZXJzLCBmb3IgaW5zdGFuY2UKICAgICAgKGRlZmF1bHQ9YGBOb25lYGApCgogICAgOmNsYXNzOmBzcmFuZ2VgIGlzIHVzZWZ1bCBmb3IgZGVmaW5pbmcgY3VzdG9tIGNoYXJhY3RlciBzZXQgc3RyaW5ncwogICAgZm9yIGRlZmluaW5nIDpjbGFzczpgV29yZGAgZXhwcmVzc2lvbnMsIHVzaW5nIHJhbmdlIG5vdGF0aW9uIGZyb20KICAgIHJlZ3VsYXIgZXhwcmVzc2lvbiBjaGFyYWN0ZXIgc2V0cy4KCiAgICBBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHVzZSA6Y2xhc3M6YFdvcmRgIHRvIG1hdGNoIGEgc3BlY2lmaWMgbGl0ZXJhbAogICAgc3RyaW5nLCBhcyBpbiBgYFdvcmQoIkFkZHJlc3MiKWBgLiBSZW1lbWJlciB0aGF0IDpjbGFzczpgV29yZGAKICAgIHVzZXMgdGhlIHN0cmluZyBhcmd1bWVudCB0byBkZWZpbmUgKnNldHMqIG9mIG1hdGNoYWJsZSBjaGFyYWN0ZXJzLgogICAgVGhpcyBleHByZXNzaW9uIHdvdWxkIG1hdGNoICJBZGQiLCAiQUFBIiwgImRBcmVkIiwgb3IgYW55IG90aGVyIHdvcmQKICAgIG1hZGUgdXAgb2YgdGhlIGNoYXJhY3RlcnMgJ0EnLCAnZCcsICdyJywgJ2UnLCBhbmQgJ3MnLiBUbyBtYXRjaCBhbgogICAgZXhhY3QgbGl0ZXJhbCBzdHJpbmcsIHVzZSA6Y2xhc3M6YExpdGVyYWxgIG9yIDpjbGFzczpgS2V5d29yZGAuCgogICAgcHlwYXJzaW5nIGluY2x1ZGVzIGhlbHBlciBzdHJpbmdzIGZvciBidWlsZGluZyBXb3JkczoKCiAgICAtIDpjbGFzczpgYWxwaGFzYAogICAgLSA6Y2xhc3M6YG51bXNgCiAgICAtIDpjbGFzczpgYWxwaGFudW1zYAogICAgLSA6Y2xhc3M6YGhleG51bXNgCiAgICAtIDpjbGFzczpgYWxwaGFzOGJpdGAgKGFscGhhYmV0aWMgY2hhcmFjdGVycyBpbiBBU0NJSSByYW5nZSAxMjgtMjU1CiAgICAgIC0gYWNjZW50ZWQsIHRpbGRlZCwgdW1sYXV0ZWQsIGV0Yy4pCiAgICAtIDpjbGFzczpgcHVuYzhiaXRgIChub24tYWxwaGFiZXRpYyBjaGFyYWN0ZXJzIGluIEFTQ0lJIHJhbmdlCiAgICAgIDEyOC0yNTUgLSBjdXJyZW5jeSwgc3ltYm9scywgc3VwZXJzY3JpcHRzLCBkaWFjcml0aWNhbHMsIGV0Yy4pCiAgICAtIDpjbGFzczpgcHJpbnRhYmxlc2AgKGFueSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIpCgogICAgYGBhbHBoYXNgYCwgYGBudW1zYGAsIGFuZCBgYHByaW50YWJsZXNgYCBhcmUgYWxzbyBkZWZpbmVkIGluIHNldmVyYWwKICAgIFVuaWNvZGUgc2V0cyAtIHNlZSA6Y2xhc3M6YHB5cGFyc2luZ191bmljb2RlYGAuCgogICAgRXhhbXBsZTo6CgogICAgICAgICMgYSB3b3JkIGNvbXBvc2VkIG9mIGRpZ2l0cwogICAgICAgIGludGVnZXIgPSBXb3JkKG51bXMpICMgZXF1aXZhbGVudCB0byBXb3JkKCIwMTIzNDU2Nzg5Iikgb3IgV29yZChzcmFuZ2UoIjAtOSIpKQoKICAgICAgICAjIGEgd29yZCB3aXRoIGEgbGVhZGluZyBjYXBpdGFsLCBhbmQgemVybyBvciBtb3JlIGxvd2VyY2FzZQogICAgICAgIGNhcGl0YWxfd29yZCA9IFdvcmQoYWxwaGFzLnVwcGVyKCksIGFscGhhcy5sb3dlcigpKQoKICAgICAgICAjIGhvc3RuYW1lcyBhcmUgYWxwaGFudW1lcmljLCB3aXRoIGxlYWRpbmcgYWxwaGEsIGFuZCAnLScKICAgICAgICBob3N0bmFtZSA9IFdvcmQoYWxwaGFz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ZyB0aGUgcmVndWxhciBleHByZXNzaW9uIGluCiAgICBhIGZvcm0gcmVjb2duaXplZCBieSB0aGUgc3RkbGliIFB5dGhvbiAgYHJlIG1vZHVsZSA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3JlLmh0bWw+YF8uCiAgICBJZiB0aGUgZ2l2ZW4gcmVnZXggY29udGFpbnMgbmFtZWQgZ3JvdXBzIChkZWZpbmVkIHVzaW5nIGBgKD9QPG5hbWU+Li4uKWBgKSwKICAgIHRoZXNlIHdpbGwgYmUgcHJlc2VydmVkIGFzIG5hbWVkIDpjbGFzczpgUGFyc2VSZXN1bHRzYC4KCiAgICBJZiBpbnN0ZWFkIG9mIHRoZSBQeXRob24gc3RkbGliIGBgcmVgYCBtb2R1bGUgeW91IHdpc2ggdG8gdXNlIGEgZGlmZmVyZW50IFJFIG1vZHVsZQogICAgKHN1Y2ggYXMgdGhlIGBgcmVnZXhgYCBtb2R1bGUpLCB5b3UgY2FuIGRvIHNvIGJ5IGJ1aWxkaW5nIHlvdXIgYGBSZWdleGBgIG9iamVjdCB3aXRoCiAgICBhIGNvbXBpbGVkIFJFIHRoYXQgd2FzIGNvbXBpbGVkIHVzaW5nIGBgcmVnZXhgYC4KCiAgICBFeGFtcGxlOjoKCiAgICAgICAgcmVhbG51bSA9IFJlZ2V4KHIiWystXT9cZCtcLlxkKiIpCiAgICAgICAgIyByZWY6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI2NzM5OS9ob3ctZG8teW91LW1hdGNoLW9ubHktdmFsaWQtcm9tYW4tbnVtZXJhbHMtd2l0aC1hLXJlZ3VsYXItZXhwcmVzc2lvbgogICAgICAgIHJvbWFuID0gUmVnZXgociJNezAsNH0oQ018Q0R8RD97MCwzfSkoWEN8WEx8TD9YezAsM30pKElYfElWfFY/SXswLDN9KSIpCgogICAgICAgICMgbmFtZWQgZmllbGRzIGluIGEgcmVnZXggd2lsbCBiZSByZXR1cm5lZCBhcyBuYW1lZCByZXN1bHRzCiAgICAgICAgZGF0ZSA9IFJlZ2V4KHInKD9QPHllYXI+XGR7NH0pLSg/UDxtb250aD5cZFxkPyktKD9QPGRheT5c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AAECAgIBLCYMDAwEDAQIAwoNCgkKCXI3AgAAYwAAAAAAAAAAAAAAABAAAAAAAAAAc4oAAABlAFoBZABaAmQBWgNkAloEZA9kA2QEZARkBmQEZAZkB5wGZQVlBmoHZQUZAGUGagdlBRkAZQhlCGUGagdlBRkAZQhlBWUGagdlBRkAZQZqB2UFGQBlCGUGagdlBRkAZQhkCJwNhwBmAWQJZAqED1oJZAtkDIQAWgpkEGQNZA6EAVoLhwAEAFoMUwApEdoMUXVvdGVkU3RyaW5nYRYGAAAKICAgIFRva2VuIGZvciBtYXRjaGluZyBzdHJpbmdzIHRoYXQgYXJlIGRlbGltaXRlZCBieSBxdW90aW5nIGNoYXJhY3RlcnMuCgogICAgRGVmaW5lZCB3aXRoIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczoKCiAgICAtIGBgcXVvdGVfY2hhcmBgIC0gc3RyaW5nIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgZGVmaW5pbmcgdGhlCiAgICAgIHF1b3RlIGRlbGltaXRpbmcgc3RyaW5nCiAgICAtIGBgZXNjX2NoYXJgYCAtIGNoYXJhY3RlciB0byByZV9lc2NhcGUgcXVvdGVzLCB0eXBpY2FsbHkgYmFja3NsYXNoCiAgICAgIChkZWZhdWx0PSBgYE5vbmVgYCkKICAgIC0gYGBlc2NfcXVvdGVgYCAtIHNwZWNpYWwgcXVvdGUgc2VxdWVuY2UgdG8gcmVfZXNjYXBlIGFuIGVtYmVkZGVkIHF1b3RlCiAgICAgIHN0cmluZyAoc3VjaCBhcyBTUUwncyBgYCIiYGAgdG8gcmVfZXNjYXBlIGFuIGVtYmVkZGVkIGBgImBgKQogICAgICAoZGVmYXVsdD0gYGBOb25lYGApCiAgICAtIGBgbXVsdGlsaW5lYGAgLSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBxdW90ZXMgY2FuIHNwYW4KICAgICAgbXVsdGlwbGUgbGluZXMgKGRlZmF1bHQ9IGBgRmFsc2VgYCkKICAgIC0gYGB1bnF1b3RlX3Jlc3VsdHNgYCAtIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBtYXRjaGVkIHRleHQKICAgICAgc2hvdWxkIGJlIHVucXVvdGVkIChkZWZhdWx0PSBgYFRydWVgYCkKICAgIC0gYGBlbmRfcXVvdGVfY2hhcmBgIC0gc3RyaW5nIG9mIG9uZSBvciBtb3JlIGNoYXJhY3RlcnMgZGVmaW5pbmcgdGhlCiAgICAgIGVuZCBvZiB0aGUgcXVvdGUgZGVsaW1pdGVkIHN0cmluZyAoZGVmYXVsdD0gYGBOb25lYGAgID0+IHNhbWUgYXMKICAgICAgcXVvdGVfY2hhcikKICAgIC0gYGBjb252ZXJ0X3doaXRlc3BhY2VfZXNjYXBlc2BgIC0gY29udmVydCBlc2NhcGVkIHdoaXRlc3BhY2UKICAgICAgKGBgJ1x0J2BgLCBgYCdcbidgYCwgZXRjLikgdG8gYWN0dWFsIHdoaXRlc3BhY2UKICAgICAgKGRlZmF1bHQ9IGBgVHJ1ZWBgKQoKICAgIEV4YW1wbGU6OgoKICAgICAgICBxcyA9IFF1b3RlZFN0cmluZygnIicpCiAgICAgICAgcHJpbnQocXMuc2VhcmNoX3N0cmluZygnbHNqZGYgIlRoaXMgaXMgdGhlIHF1b3RlIiBzbGRqZicpKQogICAgICAgIGNvbXBsZXhfcXMgPSBRdW90ZWRTdHJpbmcoJ3t7JywgZW5kX3F1b3RlX2NoYXI9J319JykKICAgICAgICBwcmludChjb21wbGV4X3FzLnNlYXJjaF9zdHJpbmcoJ2xzamRmIHt7VGhpcyBpcyB0aGUgInF1b3RlIn19IHNsZGpmJykpCiAgICAgICAgc3FsX3FzID0gUXVvdGVkU3RyaW5nKCciJywgZXNjX3F1b3RlPSciIicpCiAgICAgICAgcHJpbnQoc3FsX3FzLnNlYXJjaF9zdHJpbmcoJ2xzamRmICJUaGlzIGlzIHRoZSBxdW90ZSB3aXRoICIiZW1iZWRkZWQiIiBxdW90ZXMiIHNsZGpmJykpCgogICAgcHJpbnRzOjoKCiAgICAgICAgW1snVGhpcyBpcyB0aGUgcXVvdGUnXV0KICAgICAgICBbWydUaGlzIGlzIHRoZSAicXVvdGUiJ11dCiAgICAgICAgW1snVGhpcyBpcyB0aGUgcXVvdGUgd2l0aCAiZW1iZWRkZWQiIHF1b3RlcyddXQogICAgKQQpAnoCXHT6AQkpAnoCXG5yqAEAACkCegJcZvoB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cGVfYXR0ciA9ICJzaGFwZToiICsgc2hhcGVfdHlwZSgic2hhcGUiKQogICAgICAgIHBvc25fYXR0ciA9ICJwb3NuOiIgKyBHcm91cChpbnRlZ2VyKCJ4IikgKyAnLCcgKyBpbnRlZ2VyKCJ5IikpKCJwb3NuIikKICAgICAgICBjb2xvcl9hdHRyID0gImNvbG9yOiIgKyBjb2xvcigiY29sb3IiKQogICAgICAgIHNpemVfYXR0ciA9ICJzaXplOiIgKyBpbnRlZ2VyKCJzaXplIikKCiAgICAgICAgIyB1c2UgRWFjaCAodXNpbmcgb3BlcmF0b3IgJyYnKSB0byBhY2NlcHQgYXR0cmlidXRlcyBpbiBhbnkgb3JkZXIKICAgICAgICAjIChzaGFwZSBhbmQgcG9zbiBhcmUgcmVxdWlyZWQsIGNvbG9yIGFuZCBzaXplIGFyZSBvcHRpb25hbCkKICAgICAgICBzaGFwZV9zcGVjID0gc2hhcGVfYXR0ciAmIHBvc25fYXR0ciAmIE9wdChjb2xvcl9hdHRyKSAmIE9wdChzaXplX2F0dHIpCgogICAgICAgIHNoYXBlX3NwZWMucnVuX3Rlc3RzKCcnJwogICAgICAgICAgICBzaGFwZTogU1FVQVJFIGNvbG9yOiBCTEFDSyBwb3NuOiAxMDAsIDEyMAogICAgICAgICAgICBzaGFwZTogQ0lSQ0xFIHNpemU6IDUwIGNvbG9yOiBCTFVFIHBvc246IDUwLDgwCiAgICAgICAgICAgIGNvbG9yOkdSRUVOIHNpemU6MjAgc2hhcGU6VFJJQU5HTEUgcG9zbjoyMCw0MAogICAgICAgICAgICAnJycKICAgICAgICAgICAgKQoKICAgIHByaW50czo6CgogICAgICAgIHNoYXBlOiBTUVVBUkUgY29sb3I6IEJMQUNLIHBvc246IDEwMCwgMTIwCiAgICAgICAgWydzaGFwZTonLCAnU1FVQVJFJywgJ2NvbG9yOicsICdCTEFDSycsICdwb3NuOicsIFsnMTAwJywgJywnLCAnMTIwJ11dCiAgICAgICAgLSBjb2xvcjogQkxBQ0sKICAgICAgICAtIHBvc246IFsnMTAwJywgJywnLCAnMTIwJ10KICAgICAgICAgIC0geDogMTAwCiAgICAgICAgICAtIHk6IDEyMAogICAgICAgIC0gc2hhcGU6IFNRVUFSRQoKCiAgICAgICAgc2hhcGU6IENJUkNMRSBzaXplOiA1MCBjb2xvcjogQkxVRSBwb3NuOiA1MCw4MAogICAgICAgIFsnc2hhcGU6JywgJ0NJUkNMRScsICdzaXplOicsICc1MCcsICdjb2xvcjonLCAnQkxVRScsICdwb3NuOicsIFsnNTAnLCAnLCcsICc4MCddXQogICAgICAgIC0gY29sb3I6IEJMVUUKICAgICAgICAtIHBvc246IFsnNTAnLCAnLCcsICc4MCddCiAgICAgICAgICAtIHg6IDUwCiAgICAgICAgICAtIHk6IDgwCiAgICAgICAgLSBzaGFwZTogQ0lSQ0xFCiAgICAgICAgLSBzaXplOiA1MAoKCiAgICAgICAgY29sb3I6IEdSRUVOIHNpemU6IDIwIHNoYXBlOiBUUklBTkdMRSBwb3NuOiAyMCw0MAogICAgICAgIFsnY29sb3I6JywgJ0dSRUVOJywgJ3NpemU6JywgJzIwJywgJ3NoYXBlOicsICdUUklBTkdMRScsICdwb3NuOicsIFsnMjAnLCAnLCcsICc0MCddXQogICAgICAgIC0gY29sb3I6IEdSRUVOCiAgICAgICAgLSBwb3NuOiBbJzIwJywgJywnLCAnNDAnXQogICAgICAgICAgLSB4OiAyMAogICAgICAgICAgLSB5OiA0MAogICAgICAgIC0gc2hhcGU6IFRSSUFOR0xFCiAgICAgICAgLSBzaXplOiAyMAogICAgVCkCcogCAABytwAAAGMDAAAAAAAAAAMAAAAEAAAAAwAAAHNIAAAAdACDAKABfAF8AqECAQB8AGoCcix0A2QBZAKEAHwAagJEAIMBgwF8AF8EbgZkA3wAXwRkA3wAXwVkA3wAXwZkA3wAXwdkAFMAKQROYwEAAAAAAAAAAgAAAAIAAABzAAAAcxQAAAB8AF0MfQF8AWoAVgABAHECZABTACkBTikBcsAAAAApAnI3AAAAcu4AAAByKQAAAHIpAAAAcioAAABy5AAAAI4QAABzAgAAAAQAeiBFYWNoLl9faW5pdF9fLjxsb2NhbHM+LjxnZW5leHByPlQpCHLpAQAAcisAAAByiAIAAHLmAAAAcsAAAAByvwAAANoOaW5pdEV4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KwAAAHLjAgAAcvQAAABy0wAAAHLyAQAAcikAAAByKQAAACkBcn4AAAByKgAAAHK0AgAAlRIAAHMKAAAACAQCAjgKDgYKHXK0AgAAYwAAAAAAAAAAAAAAAAIAAABAAAAAcxgAAABlAFoBZABaAmQBWgNkAmQDhABaBGQEUwApBXJbAQAAYXIEAAAKICAgIFJlcGV0aXRpb24gb2Ygb25lIG9yIG1vcmUgb2YgdGhlIGdpdmVuIGV4cHJlc3Npb24uCgogICAgUGFyYW1ldGVyczoKICAgIC0gZXhwciAtIGV4cHJlc3Npb24gdGhhdCBtdXN0IG1hdGNoIG9uZSBvciBtb3JlIHRpbWVzCiAgICAtIHN0b3Bfb24gLSAoZGVmYXVsdD0gYGBOb25lYGApIC0gZXhwcmVzc2lvbiBmb3IgYSB0ZXJtaW5hdGluZyBzZW50aW5lbAogICAgICAgICAob25seSByZXF1aXJlZCBpZiB0aGUgc2VudGluZWwgd291bGQgb3JkaW5hcmlseSBtYXRjaCB0aGUgcmVwZXRpdGlvbgogICAgICAgICBleHByZXNzaW9uKQoKICAgIEV4YW1wbGU6OgoKICAgICAgICBkYXRhX3dvcmQgPSBXb3JkKGFscGhhcykKICAgICAgICBsYWJlbCA9IGRhdGFfd29yZCArIEZvbGxvd2VkQnkoJzonKQogICAgICAgIGF0dHJfZXhwciA9IEdyb3VwKGxhYmVsICsgU3VwcHJlc3MoJzonKSArIE9uZU9yTW9yZShkYXRhX3dvcmQpLnNldF9wYXJzZV9hY3Rpb24oJyAnLmpvaW4pKQoKICAgICAgICB0ZXh0ID0gInNoYXBlOiBTUVVBUkUgcG9zbjogdXBwZXIgbGVmdCBjb2xvcjogQkxBQ0siCiAgICAgICAgYXR0cl9leHByWzEsIC4uLl0ucGFyc2Vfc3RyaW5nKHRleHQpLnBwcmludCgpICAjIEZhaWwhIHJlYWQgJ2NvbG9yJyBhcyBkYXRhIGluc3RlYWQgb2YgbmV4dCBsYWJlbCAtPiBbWydzaGFwZScsICdTUVVBUkUgY29sb3InXV0KCiAgICAgICAgIyB1c2Ugc3RvcF9vbiBhdHRyaWJ1dGUgZm9yIE9uZU9yTW9yZSB0byBhdm9pZCByZWFkaW5nIGxh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IGRlZmluZSBncmFtbWFycyAodHlwaWNhbGx5IHF1b3RlZCBzdHJpbmdzIGFuZAogICAgICBjb21tZW50cykgdGhhdCBtaWdodCBjb250YWluIGZhbHNlIG1hdGNoZXMgdG8gdGhlIHRhcmdldCBleHByZXNzaW9uCiAgICAtIGBgZmFpbF9vbmBgIC0gKGRlZmF1bHQ9IGBgTm9uZWBgKSBkZWZpbmUgZXhwcmVzc2lvbnMgdGhhdCBhcmUgbm90IGFsbG93ZWQgdG8gYmUKICAgICAgaW5jbHVkZWQgaW4gdGhlIHNraXBwZWQgdGVzdDsgaWYgZm91bmQgYmVmb3JlIHRoZSB0YXJnZXQgZXhwcmVzc2lvbiBpcyBmb3VuZCwKICAgICAgdGhlIDpjbGFzczpgU2tpcFRvYCBpcyBub3QgYSBtYXRjaAoKICAgIEV4YW1wbGU6OgoKICAgICAgICByZXBvcnQgPSAnJycKICAgICAgICAgICAgT3V0c3RhbmRpbmcgSXNzdWVzIFJlcG9ydCAtIDEgSmFuIDIwMDAKCiAgICAgICAgICAgICAgICMgfCBTZXZlcml0eSB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIERheXMgT3BlbgogICAgICAgICAgICAtLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0KICAgICAgICAgICAgIDEwMSB8IENyaXRpY2FsIHwgSW50ZXJtaXR0ZW50IHN5c3RlbSBjcmFzaCAgICAgICAgICAgICAgICAgfCAgICAgICAgICA2CiAgICAgICAgICAgICAgOTQgfCBDb3NtZXRpYyB8IFNwZWxsaW5nIGVycm9yIG9uIExvZ2luICgnbG9nfG4nKSAgICAgICAgIHwgICAgICAgICAxNAogICAgICAgICAgICAgIDc5IHwgTWlub3IgICAgfCBTeXN0ZW0gc2xvdyB3aGVuIHJ1bm5pbmcgdG9vIG1hbnkgcmVwb3J0cyB8ICAgICAgICAgNDcKICAgICAgICAgICAgJycnCiAgICAgICAgaW50ZWdlciA9IFdvcmQobnVtcykKICAgICAgICBTRVAgPSBTdXBwcmVzcygnfCcpCiAgICAgICAgIyB1c2UgU2tpcFRvIHRvIHNpbXBseSBtYXRjaCBldmVyeXRoaW5nIHVwIHVudGlsIHRoZSBuZXh0IFNFUAogICAgICAgICMgLSBpZ25vcmUgcXVvdGVkIHN0cmluZ3MsIHNvIHRoYXQgYSAnfCcgY2hhcmFjdGVyIGluc2lkZSBhIHF1b3RlZCBzdHJpbmcgZG9lcyBub3QgbWF0Y2gKICAgICAgICAjIC0gcGFyc2UgYWN0aW9uIHdpbGwgY2FsbCB0b2tlbi5zdHJpcCgpIGZvciBlYWNoIG1hdGNoZWQgdG9rZW4sIGkuZS4sIHRoZSBkZXNjcmlwdGlvbiBib2R5CiAgICAgICAgc3RyaW5nX2RhdGEgPSBTa2lwVG8oU0VQLCBpZ25vcmU9cXVvdGVkX3N0cmluZykKICAgICAgICBzdHJpbmdfZGF0YS5zZXRfcGFyc2VfYWN0aW9uKHRva2VuX21hcChzdHIuc3RyaXApKQogICAgICAgIHRpY2tldF9leHByID0gKGludGVnZXIoImlzc3VlX251bSIpICsgU0VQCiAgICAgICAgICAgICAgICAgICAgICArIHN0cmluZ19kYXRhKCJzZXYiKSArIFNFUAogICAgICAgICAgICAgICAgICAgICAgKyBzdHJpbmdfZGF0YSgiZGVzYyIpICsgU0VQCiAgICAgICAgICAgICAgICAgICAgICArIGludGVnZXIoImRheXNfb3BlbiIpKQoKICAgICAgICBmb3IgdGt0IGluIHRpY2tldF9leHByLnNlYXJjaF9zdHJpbmcocmVwb3J0KToKICAgICAgICAgICAgcHJpbnQgdGt0LmR1bXAoKQoKICAgIHByaW50czo6CgogICAgICAgIFsnMTAxJywgJ0NyaXRpY2FsJywgJ0ludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2gnLCAnNiddCiAgICAgICAgLSBkYXlzX29wZW46ICc2JwogICAgICAgIC0gZGVzYzogJ0ludGVybWl0dGVudCBzeXN0ZW0gY3Jhc2gnCiAgICAgICAgLSBpc3N1ZV9udW06ICcxMDEnCiAgICAgICAgLSBzZXY6ICdDcml0aWNhbCcKICAgICAgICBbJzk0JywgJ0Nvc21l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KHIIAQAAYXcDAAAKICAgIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgYW4gZXhwcmVzc2lvbiB0byBiZSBkZWZpbmVkIGxhdGVyIC0KICAgIHVzZWQgZm9yIHJlY3Vyc2l2ZSBncmFtbWFycywgc3VjaCBhcyBhbGdlYnJhaWMgaW5maXggbm90YXRpb24uCiAgICBXaGVuIHRoZSBleHByZXNzaW9uIGlzIGtub3duLCBpdCBpcyBhc3NpZ25lZCB0byB0aGUgYGBGb3J3YXJkYGAKICAgIHZhcmlhYmxlIHVzaW5nIHRoZSBgYCc8PCdgYCBvcGVyYXRvci4KCiAgICBOb3RlOiB0YWtlIGNhcmUgd2hlbiBhc3NpZ25pbmcgdG8gYGBGb3J3YXJkYGAgbm90IHRvIG92ZXJsb29rCiAgICBwcmVjZWRlbmNlIG9mIG9wZXJhdG9ycy4KCiAgICBTcGVjaWZpY2FsbHksIGBgJ3wnYGAgaGFzIGEgbG93ZXIgcHJlY2VkZW5jZSB0aGFuIGBgJzw8J2BgLCBzbyB0aGF0OjoKCiAgICAgICAgZndkX2V4cHIgPDwgYSB8IGIgfCBjCgogICAgd2lsbCBhY3R1YWxseSBiZSBldmFsdWF0ZWQgYXM6OgoKICAgICAgICAoZndkX2V4cHIgPDwgYSkgfCBiIHwgYwoKICAgIHRoZXJlYnkgbGVhdmluZyBiIGFuZCBjIG91dCBhcyBwYXJzZWFibGUgYWx0ZXJuYXRpdmVzLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UKICAgIGV4cGxpY2l0bHkgZ3JvdXAgdGhlIHZhbHVlcyBpbnNlcnRlZCBpbnRvIHRoZSBgYEZvcndhcmRgYDo6CgogICAgICAgIGZ3ZF9leHByIDw8IChhIHwgYiB8IGMpCgogICAgQ29udmVydGluZyB0byB1c2UgdGhlIGBgJzw8PSdgYCBvcGVyYXRvciBpbnN0ZWFkIHdpbGwgYXZvaWQgdGhpcyBwcm9ibGVtLgoKICAgIFNlZSA6Y2xhc3M6YFBhcnNlUmVzdWx0cy5wcHJpbnRgIGZvciBhbiBleGFtcGxlIG9mIGEgcmVjdXJzaXZlCiAgICBwYXJzZXIgY3JlYXRlZCB1c2luZyBgYEZvcndhcmRgYC4KICAgIE4p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ICAgICAgIHRleHQgPSAic2hhcGU6IFNRVUFSRSBwb3NuOiB1cHBlciBsZWZ0IGNvbG9yOiBsaWdodCBibHVlIHRleHR1cmU6IGJ1cmxhcCIKICAgICAgICBhdHRyX2V4cHIgPSAobGFiZWwgKyBTdXBwcmVzcygnOicpICsgT25lT3JNb3JlKGRhdGFfd29yZCwgc3RvcF9vbj1sYWJlbCkuc2V0X3BhcnNlX2FjdGlvbignICcuam9pbikpCgogICAgICAgICMgcHJpbnQgYXR0cmlidXRlcyBhcyBwbGFpbiBncm91cHMKICAgICAgICBwcmludChhdHRyX2V4cHJbMSwgLi4uXS5wYXJzZV9zdHJpbmcodGV4dCkuZHVtcCgpKQoKICAgICAgICAjIGluc3RlYWQgb2YgT25lT3JNb3JlKGV4cHIpLCBwYXJzZSB1c2luZyBEaWN0KEdyb3VwKGV4cHIpWzEsIC4uLl0pIC0gRGljdCB3aWxsIGF1dG8tYXNzaWduIG5hbWVzCiAgICAgICAgcmVzdWx0ID0gRGljdChHcm91cChhdHRyX2V4cHIpWzEsIC4uLl0pLnBhcnNlX3N0cmluZyh0ZXh0KQogICAgICAgIHByaW50KHJlc3VsdC5kdW1wKCkpCgogICAgICAgICMgYWNjZXNzIG5hbWVkIGZpZWxkcyBhcyBkaWN0IGVudHJpZXMsIG9yIG91dHB1dCBhcyBkaWN0CiAgICAgICAgcHJpbnQocmVzdWx0WydzaGFwZSddKQogICAgICAgIHByaW50KHJlc3VsdC5hc19kaWN0KCkpCgogICAgcHJpbnRzOjoKCiAgICAgICAgWydzaGFwZScsICdTUVVBUkUnLCAncG9zbicsICd1cHBlciBsZWZ0JywgJ2NvbG9yJywgJ2xpZ2h0IGJsdWUnLCAndGV4dHVyZScsICdidXJsYXAnXQogICAgICAgIFtbJ3NoYXBlJywgJ1NRVUFSRSddLCBbJ3Bvc24nLCAndXBwZXIgbGVmdCddLCBbJ2NvbG9yJywgJ2xpZ2h0IGJsdWUnXSwgWyd0ZXh0dXJlJywgJ2J1cmxhcCddXQogICAgICAgIC0gY29sb3I6ICdsaWdodCBibHVlJwogICAgICAgIC0gcG9zbjogJ3VwcGVyIGxlZnQnCiAgICAg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LnBhcnNlX3N0cmluZyhzb3VyY2UpKQoKICAgICAgICAjIFNraXBwZWQgdGV4dCAodXNpbmcgJy4uLicpIGNhbiBiZSBzdXBwcmVzc2VkIGFzIHdlbGwKICAgICAgICBzb3VyY2UgPSAibGVhZCBpbiBTVEFSVCByZWxldmFudCB0ZXh0IEVORCB0cmFpbGluZyB0ZXh0IgogICAgICAgIHN0YXJ0X21hcmtlciA9IEtleXdvcmQoIlNUQVJUIikKICAgICAgICBlbmRfbWFya2VyID0gS2V5d29yZCgiRU5EIikKICAgICAgICBmaW5kX2JvZHkgPSBTdXBwcmVzcyguLi4pICsgc3RhcnRfbWFya2VyICsgLi4uICsgZW5kX21hcmtlcgogICAgICAgIHByaW50KGZpbmRfYm9keS5wYXJzZV9zdHJpbmcoc291cmNlKQoKICAgIHByaW50czo6CgogICAgICAgIFsnYScsICcsJywgJ2InLCAnLCcsICdjJywgJywnLCAnZCddCiAgICAgICAgWydhJywgJ2InLCAnYycsICdkJ10KICAgICAgICBbJ1NUQVJUJywgJ3JlbGV2YW50IHRleHQgJywgJ0VORCddCgogICAgKFNlZSBhbHNvIDpjbGFzczpgZGVsaW1pdGVkX2xpc3RgLikKICAgIEYpAnKQAAAAcrcAAABjAwAAAAAAAAADAAAAAwAAAAMAAABzIgAAAHwBZAFrCHISdAB0AYMAgwF9AXQCgwCgA3wBoQEBAGQAUwApAk4uKQRySgEAAHL0AQAAcukBAAByKwAAACkDcicAAABykAAAAHK3AAAAKQFyfgAAAHIpAAAAcioAAAByKwAAANEVAABzBgAAAAABCAEKAXoRU3VwcHJlc3MuX19pbml0X19yZAAAACkBckMAAABjAgAAAAAAAAACAAAAAwAAAAMAAABzLAAAAHQAfABqAXQCgwJyHHQDdAR8AYMBgwF8ARcAUwB0BYMAoAZ8AaEBUwBkAFMAKQFOKQdy+wAAAHKQAAAAckoBAABycQEAAHJOAQAAcukBAAByTQEAACkCcicAAAByTAEAACkBcn4AAAByKQAAAHIqAAAAck0BAADWFQAAcwYAAAAAAQwBEAJ6EFN1cHByZXNzLl9fYWRkX19jAgAAAAAAAAACAAAAAwAAAAMAAABz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ZXMgZm9yIHVzZSBpbiA6Y2xhc3M6YFdvcmRgCiAgICBjb25zdHJ1Y3Rpb24uIEJvcnJvd3Mgc3ludGF4IGZyb20gcmVnZXhwIGBgJ1tdJ2BgIHN0cmluZyByYW5nZQogICAgZGVmaW5pdGlvbnM6OgoKICAgICAgICBzcmFuZ2UoIlswLTldIikgICAtPiAiMDEyMzQ1Njc4OSIKICAgICAgICBzcmFuZ2UoIlthLXpdIikgICAtPiAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiCiAgICAgICAgc3JhbmdlKCJbYS16JF9dIikgLT4gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JF8iCgogICAgVGhlIGlucHV0IHN0cmluZyBtdXN0IGJlIGVuY2xvc2VkIGluIFtdJ3MsIGFuZCB0aGUgcmV0dXJuZWQgc3RyaW5nCiAgICBpcyB0aGUgZXhwYW5kZWQgY2hhcmFjdGVyIHNldCBqb2luZWQgaW50byBhIHNpbmdsZSBzdHJpbmcuIFRoZQogICAgdmFsdWVzIGVuY2xvc2VkIGluIHRoZSBbXSdzIG1heSBiZToKCiAgICAtIGEgc2luZ2xlIGNoYXJhY3RlcgogICAgLSBhbiBlc2NhcGVkIGNoYXJhY3RlciB3aXRoIGEgbGVhZGluZyBiYWNrc2xhc2ggKHN1Y2ggYXMgYGBcLWBgCiAgICAgIG9yIGBgXF1gYCkKICAgIC0gYW4gZXNjYXBlZCBoZXggY2hhcmFjdGVyIHdpdGggYSBsZWFkaW5nIGBgJ1x4J2BgCiAgICAgIChgYFx4MjFgYCwgd2hpY2ggaXMgYSBgYCchJ2BgIGNoYXJhY3RlcikgKGBgXDB4IyNgYAogICAgICBpcyBhbHNvIHN1cHBvcnRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpCiAgICAtIGFuIGVzY2FwZWQgb2N0YWwgY2hhcmFjdGVyIHdpdGggYSBsZWFkaW5nIGBgJ1wwJ2BgCiAgICAgIChgYFwwNDFgYCwgd2hpY2ggaXMgYSBgYCchJ2BgIGNoYXJhY3RlcikKICAgIC0gYSByYW5nZSBvZiBhbnkgb2YgdGhlIGFib3ZlLCBzZXBhcmF0ZWQgYnkgYSBkYXNoIChgYCdhLXonYGAsCiAgICAgIGV0Yy4pCiAgICAtIGFueSBjb21iaW5hdGlvbiBvZiB0aGUgYWJvdmUgKGBgJ2FlaW91eSdgYCwKICAgICAgYGAnYS16QS1aMC05XyQnYGAsIGV0Yy4pCiAgICBjAQAAAAAAAAABAAAACAAAAFMAAABzPAAAAHQAfAB0AYMCcw58AFMAZAGgAmQCZAOEAHQDdAR8AGQEGQCDAXQEfABkBRkAgwFkBRcAgwJEAIMBoQFTACkGTnJgAAAAYwEAAAAAAAAAAgAAAAMAAABzAAAAcxYAAAB8AF0OfQF0AHwBgwFWAAEAcQJkAFMAKQFOKQFyKQMAACkCcjcAAAByaAAAAHIpAAAAcikAAAByKgAAAHLkAAAAURYAAHMCAAAABAB6K3NyYW5nZS48bG9jYWxzPi48bGFtYmRhPi48bG9jYWxzPi48Z2VuZXhwcj5yAQAAAHIUAAAAKQVy+wAAAHIfAAAAckABAAByYwIAANoDb3JkKQHaAXByKQAAAHIpAAAAcioAAABybQAAAE8WAABzBAAAAAABDgF6GHNyYW5nZS48bG9jYWxzPi48bGFtYmRhPnJgAAAAYwEAAAAAAAAAAgAAAAMAAAAzAAAAcxYAAAB8AF0OfQGIAHwBgwFWAAEAcQJkAFMAKQFOcikAAAApAnI3AAAA2gRwYXJ0KQHaCV9leHBhbmRlZHIpAAAAcioAAABy5AAAAFQWAABzAgAAAAQAehlzcmFuZ2UuPGxvY2Fscz4uPGdlbmV4cHI+TikFckABAADaDl9yZUJyYWNrZXRFeHByci4BAAByLAMAAHL6AAAAKQFyagAAAHIpAAAAKQFyMAMAAHIqAAAA2gZzcmFuZ2U0FgAAcwoAAAAAGwgEAgEgAQ4BcjIDAABjAQAAAAAAAAAEAAAABgAAAAcAAABzLAAAAIcAhwFmAmQBZAKECH0CdACIAWQDdACIAWQEgwJqAYMDfQN8A3wCXwF8AlMAKQVhXgUAAEhlbHBlciB0byBkZWZpbmUgYSBwYXJzZSBhY3Rpb24gYnkgbWFwcGluZyBhIGZ1bmN0aW9uIHRvIGFsbAogICAgZWxlbWVudHMgb2YgYSA6Y2xhc3M6YFBhcnNlUmVzdWx0c2AgbGlzdC4gSWYgYW55IGFkZGl0aW9uYWwgYXJncyBhcmUgcGFzc2VkLAogICAgdGhleSBhcmUgZm9yd2FyZGVkIHRvIHRoZSBnaXZlbiBmdW5jdGlvbiBhcyBhZGRpdGlvbmFsIGFyZ3VtZW50cwogICAgYWZ0ZXIgdGhlIHRva2VuLCBhcyBpbgogICAgYGBoZXhfaW50ZWdlciA9IFdvcmQoaGV4bnVtcykuc2V0X3BhcnNlX2FjdGlvbih0b2tlbl9tYXAoaW50LCAxNikpYGAsCiAgICB3aGljaCB3aWxsIGNvbnZlcnQgdGhlIHBhcnNlZCBkYXRhIHRvIGFuIGludGVnZXIgdXNpbmcgYmFzZSAxNi4KCiAgICBFeGFtcGxlIChjb21wYXJlIHRoZSBsYXN0IHRvIGV4YW1wbGUgaW4gOmNsYXNzOmBQYXJzZXJFbGVtZW50LnRyYW5zZm9ybV9zdHJpbmdgOjoKCiAgICAgICAgaGV4X2ludHMgPSBXb3JkKGhleG51bXMpWzEsIC4uLl0uc2V0X3BhcnNlX2FjdGlvbih0b2tlbl9tYXAoaW50LCAxNikpCiAgICAgICAgaGV4X2ludHMucnVuX3Rlc3RzKCcnJwogICAgICAgICAgICAwMCAxMSAyMiBhYSBGRiAwYSAwZCAxYQogICAgICAgICAgICAnJycpCgogICAgICAgIHVwcGVyd29yZCA9IFdvcmQoYWxwaGFzKS5zZXRfcGFyc2VfYWN0aW9uKHRva2VuX21hcChzdHIudXBwZXIpKQogICAgICAgIHVwcGVyd29yZFsxLCAuLi5dLnJ1bl90ZXN0cygnJycKICAgICAgICAgICAgbXkga2luZ2RvbSBmb3IgYSBob3JzZQogICAgICAgICAgICAnJycpCgogICAgICAgIHdkID0gV29yZChhbHBoYXMpLnNldF9wYXJzZV9hY3Rpb24odG9rZW5fbWFwKHN0ci50aXRsZSkpCiAgICAgICAgd2RbMSwgLi4uXS5zZXRfcGFyc2VfYWN0aW9uKCcgJy5qb2luKS5ydW5fdGVzdHMoJycnCiAgICAgICAgICAgIG5vdyBpcyB0aGUgd2ludGVyIG9mIG91ciBkaXNjb250ZW50IG1hZGUgZ2xvcmlvdXMgc3VtbWVyIGJ5IHRoaXMgc3VuIG9mIHlvcmsKICAgICAgICAgICAgJycnKQoKICAgIHByaW50czo6CgogICAgICAg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
Base64 mode: content will be decoded on save.
Save
Close
Exit & Reset
Directory Contents
Dirs: 0 × Files: 10
Delete Selected
Select All
Select None
Sort:
Name
Size
Modified
Enable drag-to-move
Name
Size
Perms
Modified
Actions
actions.cpython-37.pyc
6.99 KB
lrw-r--r--
2023-11-14 13:55:59
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
common.cpython-37.pyc
9.72 KB
lrw-r--r--
2023-11-14 13:55:59
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
core.cpython-37.pyc
174.66 KB
lrw-r--r--
2023-11-14 13:55:59
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
exceptions.cpython-37.pyc
9.01 KB
lrw-r--r--
2023-11-14 13:55:59
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
helpers.cpython-37.pyc
34.18 KB
lrw-r--r--
2023-11-14 13:55:59
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
results.cpython-37.pyc
24.05 KB
lrw-r--r--
2023-11-14 13:55:59
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
testing.cpython-37.pyc
11.63 KB
lrw-r--r--
2023-11-14 13:55:59
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
unicode.cpython-37.pyc
10.93 KB
lrw-r--r--
2023-11-14 13:55:59
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
util.cpython-37.pyc
8.38 KB
lrw-r--r--
2023-11-14 13:55:59
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
__init__.cpython-37.pyc
7.55 KB
lrw-r--r--
2023-11-14 13:55:59
Edit
Download
Rename
Chmod
Change Date
Delete
OK
Cancel
recursive
OK
Cancel
recursive
OK
Cancel
Zip Selected
If ZipArchive is unavailable, a
.tar
will be created (no compression).