UEsDBAoAAAAAAHtYGDkAAAAAAAAAAAAAAAAJAAQATUVUQS1JTkYv/soAAFBLAwQKAAAAAAB6WBg5vGQOR2oAAABqAAAAFAAAAE1FVEEtSU5GL01BTklGRVNULk1GTWFuaWZlc3QtVmVyc2lvbjogMS4wDQpBbnQtVmVyc2lvbjogQXBhY2hlIEFudCAxLjcuMA0KQ3JlYXRlZC1CeTogMS41LjBfMDgtYjAzIChTdW4gTWljcm9zeXN0ZW1zIEluYy4pDQoNClBLAwQKAAAAAAB5WBg5AAAAAAAAAAAAAAAABAAAAG9yZy9QSwMECgAAAAAAelgYOQAAAAAAAAAAAAAAAAoAAABvcmcvam1vY2svUEsDBAoAAAAAAHpYGDkAAAAAAAAAAAAAAAAOAAAAb3JnL2ptb2NrL2xpYi9QSwMECgAAAAAAelgYOQAAAAAAAAAAAAAAABUAAABvcmcvam1vY2svbGliL2xlZ2FjeS9QSwMECgAAAAAAelgYOaP1n9PTAwAA0wMAAC4AAABvcmcvam1vY2svbGliL2xlZ2FjeS9DbGFzc0ltcG9zdGVyaXNlciQxLmNsYXNzyv66vgAAADEALQoACQAgBwAhCgACACAIACIKAAIAIwoACQAkCgACACUHACYHACcBAAY8aW5pdD4BAAMoKVYBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAAAEADElubmVyQ2xhc3NlcwEAKkxvcmcvam1vY2svbGliL2xlZ2FjeS9DbGFzc0ltcG9zdGVyaXNlciQxOwEADGdldENsYXNzTmFtZQEAZyhMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL1N0cmluZztMamF2YS9sYW5nL09iamVjdDtMbmV0L3NmL2NnbGliL2NvcmUvUHJlZGljYXRlOylMamF2YS9sYW5nL1N0cmluZzsBAAZwcmVmaXgBABJMamF2YS9sYW5nL1N0cmluZzsBAAZzb3VyY2UBAANrZXkBABJMamF2YS9sYW5nL09iamVjdDsBAAVuYW1lcwEAHUxuZXQvc2YvY2dsaWIvY29yZS9QcmVkaWNhdGU7AQAKU291cmNlRmlsZQEAFkNsYXNzSW1wb3N0ZXJpc2VyLmphdmEBAA9FbmNsb3NpbmdNZXRob2QHACgMAAoACwEAF2phdmEvbGFuZy9TdHJpbmdCdWlsZGVyAQASb3JnLmptb2NrLmNvZGVnZW4uDAApACoMABMAFAwAKwAsAQAob3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXIkMQEAJW5ldC9zZi9jZ2xpYi9jb3JlL0RlZmF1bHROYW1pbmdQb2xpY3kBACZvcmcvam1vY2svbGliL2xlZ2FjeS9DbGFzc0ltcG9zdGVyaXNlcgEABmFwcGVuZAEALShMamF2YS9sYW5nL1N0cmluZzspTGphdmEvbGFuZy9TdHJpbmdCdWlsZGVyOwEACHRvU3RyaW5nAQAUKClMamF2YS9sYW5nL1N0cmluZzsAIAAIAAkAAAAAAAIAAAAKAAsAAQAMAAAALwABAAEAAAAFKrcAAbEAAAACAA0AAAAGAAEAAAAnAA4AAAAMAAEAAAAFAA8AEgAAAAEAEwAUAAEADAAAAG4ABgAFAAAAHLsAAlm3AAMSBLYABSorLC0ZBLcABrYABbYAB7AAAAACAA0AAAAGAAEAAAAoAA4AAAA0AAUAAAAcAA8AEgAAAAAAHAAVABYAAQAAABwAFwAWAAIAAAAcABgAGQADAAAAHAAaABsABAADABwAAAACAB0AHgAAAAQAHwAAABEAAAAKAAEACAAAAAAACFBLAwQKAAAAAAB6WBg51f8aCqwCAACsAgAALgAAAG9yZy9qbW9jay9saWIvbGVnYWN5L0NsYXNzSW1wb3N0ZXJpc2VyJDIuY2xhc3PK/rq+AAAAMQAhCgAEABcKABgAGQcAGgcAGwcAHAEABjxpbml0PgEAAygpVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAAAQAMSW5uZXJDbGFzc2VzAQAqTG9yZy9qbW9jay9saWIvbGVnYWN5L0NsYXNzSW1wb3N0ZXJpc2VyJDI7AQAGYWNjZXB0AQAdKExqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7KUkBAAZtZXRob2QBABpMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kOwEAClNvdXJjZUZpbGUBABZDbGFzc0ltcG9zdGVyaXNlci5qYXZhAQAPRW5jbG9zaW5nTWV0aG9kBwAdDAAGAAcHAB4MAB8AIAEAKG9yZy9qbW9jay9saWIvbGVnYWN5L0NsYXNzSW1wb3N0ZXJpc2VyJDIBABBqYXZhL2xhbmcvT2JqZWN0AQAhbmV0L3NmL2NnbGliL3Byb3h5L0NhbGxiYWNrRmlsdGVyAQAmb3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXIBABhqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2QBAAhpc0JyaWRnZQEAAygpWgAgAAMABAABAAUAAAACAAAABgAHAAEACAAAAC8AAQABAAAABSq3AAGxAAAAAgAJAAAABgABAAAALQAKAAAADAABAAAABQALAA4AAAABAA8AEAABAAgAAABBAAEAAgAAAA0rtgACmQAHBKcABAOsAAAAAgAJAAAABgABAAAALgAKAAAAFgACAAAADQALAA4AAAAAAA0AEQASAAEAAwATAAAAAgAUABUAAAAEABYAAAANAAAACgABAAMAAAAAAAhQSwMECgAAAAAAelgYOa1fbvxFAwAARQMAAC4AAABvcmcvam1vY2svbGliL2xlZ2FjeS9DbGFzc0ltcG9zdGVyaXNlciQzLmNsYXNzyv66vgAAADEAIwkAAwAbCgAEABwHAB0HAB4BAAZ0aGlzJDABAChMb3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXI7AQAGPGluaXQ+AQArKExvcmcvam1vY2svbGliL2xlZ2FjeS9DbGFzc0ltcG9zdGVyaXNlcjspVgEABENvZGUBAA9MaW5lTnVtYmVyVGFibGUBABJMb2NhbFZhcmlhYmxlVGFibGUBAAR0aGlzAQAAAQAMSW5uZXJDbGFzc2VzAQAqTG9yZy9qbW9jay9saWIvbGVnYWN5L0NsYXNzSW1wb3N0ZXJpc2VyJDM7AQASZmlsdGVyQ29uc3RydWN0b3JzAQAkKExqYXZhL2xhbmcvQ2xhc3M7TGphdmEvdXRpbC9MaXN0OylWAQACc2MBABFMamF2YS9sYW5nL0NsYXNzOwEADGNvbnN0cnVjdG9ycwEAEExqYXZhL3V0aWwvTGlzdDsBAApTb3VyY2VGaWxlAQAWQ2xhc3NJbXBvc3RlcmlzZXIuamF2YQEAD0VuY2xvc2luZ01ldGhvZAcAHwwAIAAhDAAFAAYMAAcAIgEAKG9yZy9qbW9jay9saWIvbGVnYWN5L0NsYXNzSW1wb3N0ZXJpc2VyJDMBABtuZXQvc2YvY2dsaWIvcHJveHkvRW5oYW5jZXIBACZvcmcvam1vY2svbGliL2xlZ2FjeS9DbGFzc0ltcG9zdGVyaXNlcgEAEGNyZWF0ZVByb3h5Q2xhc3MBADYoTGphdmEvbGFuZy9DbGFzcztbTGphdmEvbGFuZy9DbGFzczspTGphdmEvbGFuZy9DbGFzczsBAAMoKVYAIAADAAQAAAABEBAABQAGAAAAAgAAAAcACAABAAkAAAA0AAIAAgAAAAoqK7UAASq3AAKxAAAAAgAKAAAABgABAAAAZQALAAAADAABAAAACgAMAA8AAAAEABAAEQABAAkAAAA/AAAAAwAAAAGxAAAAAgAKAAAABgABAAAAZwALAAAAIAADAAAAAQAMAA8AAAAAAAEAEgATAAEAAAABABQAFQACAAMAFgAAAAIAFwAYAAAABAAZABoADgAAAAoAAQADAAAAAAAAUEsDBAoAAAAAAHpYGDnZ93iPLQUAAC0FAAAuAAAAb3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXIkNC5jbGFzc8r+ur4AAAAxADgJAAcAJgkABwAnCgAIACgHACkKAAQAKgsAKwAsBwAtBwAuBwAvAQAOdmFsJG1vY2tPYmplY3QBABlMb3JnL2ptb2NrL2FwaS9JbnZva2FibGU7AQAGdGhpcyQwAQAoTG9yZy9qbW9jay9saWIvbGVnYWN5L0NsYXNzSW1wb3N0ZXJpc2VyOwEABjxpbml0PgEARChMb3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXI7TG9yZy9qbW9jay9hcGkvSW52b2thYmxlOylWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAAABAAxJbm5lckNsYXNzZXMBACpMb3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXIkNDsBAApFeGNlcHRpb25zBwAwAQAGaW52b2tlAQBTKExqYXZhL2xhbmcvT2JqZWN0O0xqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7W0xqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsBAAhyZWNlaXZlcgEAEkxqYXZhL2xhbmcvT2JqZWN0OwEABm1ldGhvZAEAGkxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7AQAEYXJncwEAE1tMamF2YS9sYW5nL09iamVjdDsBAApTb3VyY2VGaWxlAQAWQ2xhc3NJbXBvc3RlcmlzZXIuamF2YQEAD0VuY2xvc2luZ01ldGhvZAcAMQwAMgAzDAAMAA0MAAoACwwADgA0AQAYb3JnL2ptb2NrL2FwaS9JbnZvY2F0aW9uDAAOADUHADYMABkANwEAKG9yZy9qbW9jay9saWIvbGVnYWN5L0NsYXNzSW1wb3N0ZXJpc2VyJDQBABBqYXZhL2xhbmcvT2JqZWN0AQAkbmV0L3NmL2NnbGliL3Byb3h5L0ludm9jYXRpb25IYW5kbGVyAQATamF2YS9sYW5nL1Rocm93YWJsZQEAJm9yZy9qbW9jay9saWIvbGVnYWN5L0NsYXNzSW1wb3N0ZXJpc2VyAQALY3JlYXRlUHJveHkBAD4oTGphdmEvbGFuZy9DbGFzcztMb3JnL2ptb2NrL2FwaS9JbnZva2FibGU7KUxqYXZhL2xhbmcvT2JqZWN0OwEAAygpVgEAQihMamF2YS9sYW5nL09iamVjdDtMamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kO1tMamF2YS9sYW5nL09iamVjdDspVgEAF29yZy9qbW9jay9hcGkvSW52b2thYmxlAQAuKExvcmcvam1vY2svYXBpL0ludm9jYXRpb247KUxqYXZhL2xhbmcvT2JqZWN0OwAgAAcACAABAAkAAhAQAAoACwAAEBAADAANAAAAAgAAAA4ADwACABAAAAA5AAIAAwAAAA8qK7UAASostQACKrcAA7EAAAACABEAAAAGAAEAAACIABIAAAAMAAEAAAAPABMAFgAAABcAAAAEAAEAGAABABkAGgACABAAAABcAAYABAAAABQqtAACuwAEWSssLbcABbkABgIAsAAAAAIAEQAAAAYAAQAAAIkAEgAAACoABAAAABQAEwAWAAAAAAAUABsAHAABAAAAFAAdAB4AAgAAABQAHwAgAAMAFwAAAAQAAQAYAAMAIQAAAAIAIgAjAAAABAAkACUAFQAAAAoAAQAHAAAAAAAAUEsDBAoAAAAAAHpYGDktNH1QAwIAAAMCAABUAAAAb3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXIkQ2xhc3NXaXRoU3VwZXJjbGFzc1RvV29ya0Fyb3VuZENnbGliQnVnLmNsYXNzyv66vgAAADEAFAoAAwAPBwARBwASAQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBACdDbGFzc1dpdGhTdXBlcmNsYXNzVG9Xb3JrQXJvdW5kQ2dsaWJCdWcBAAxJbm5lckNsYXNzZXMBAFBMb3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXIkQ2xhc3NXaXRoU3VwZXJjbGFzc1RvV29ya0Fyb3VuZENnbGliQnVnOwEAClNvdXJjZUZpbGUBABZDbGFzc0ltcG9zdGVyaXNlci5qYXZhDAAEAAUHABMBAE5vcmcvam1vY2svbGliL2xlZ2FjeS9DbGFzc0ltcG9zdGVyaXNlciRDbGFzc1dpdGhTdXBlcmNsYXNzVG9Xb3JrQXJvdW5kQ2dsaWJCdWcBABBqYXZhL2xhbmcvT2JqZWN0AQAmb3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXIAIQACAAMAAAAAAAEAAQAEAAUAAQAGAAAALwABAAEAAAAFKrcAAbEAAAACAAcAAAAGAAEAAACYAAgAAAAMAAEAAAAFAAkADAAAAAIADQAAAAIADgALAAAACgABAAIAEAAKAAlQSwMECgAAAAAAelgYOVLfezCkGQAApBkAACwAAABvcmcvam1vY2svbGliL2xlZ2FjeS9DbGFzc0ltcG9zdGVyaXNlci5jbGFzc8r+ur4AAAAxARcKACQAlgcAlwoAAgCWCQBDAJgKABcAmQoAFwCaCgCbAJwKABcAnQoAQwCeBwCfBwCgCgALAJYKABcAoQoACwCiCACjCgALAKQKAAoApQoAQwCmCgBDAKcKAEMAqAoAFwCpCABwBwCqCgAXAKsKAKwAmgcArQcArggArwoAGwCwBwCxBwCyCACzCgAfALAKABcAtAoAtQC2BwC3BwC4BwC5CgAmALsKALwAvQoAvgC/CgC+AMAKAL4AwQoAQwDCCgC+AMMHAMQHAMUKAL4AxgkAQwDHCgC+AMgKABcAyQkAQwDKCgC+AMsKAL4AzAcAzQgAzgoACwDPCgAKALALANAA0QcA0gcA0wcA1AoAPgDVCQAvANYLADwA1woA2ADZBwDaCgBDAJYJAEMA2wcA3AoARgCWBwDdCgBIAJYHAN4BACdDbGFzc1dpdGhTdXBlcmNsYXNzVG9Xb3JrQXJvdW5kQ2dsaWJCdWcBAAxJbm5lckNsYXNzZXMBAAhJTlNUQU5DRQEAHExvcmcvam1vY2svYXBpL0ltcG9zdGVyaXNlcjsBAEdOQU1JTkdfUE9MSUNZX1RIQVRfQUxMT1dTX0lNUE9TVEVSSVNBVElPTl9PRl9DTEFTU0VTX0lOX1NJR05FRF9QQUNLQUdFUwEAIExuZXQvc2YvY2dsaWIvY29yZS9OYW1pbmdQb2xpY3k7AQAVSUdOT1JFX0JSSURHRV9NRVRIT0RTAQAjTG5ldC9zZi9jZ2xpYi9wcm94eS9DYWxsYmFja0ZpbHRlcjsBAAlvYmplbmVzaXMBABlMb3JnL29iamVuZXNpcy9PYmplbmVzaXM7AQAGPGluaXQ+AQADKClWAQAEQ29kZQEAD0xpbmVOdW1iZXJUYWJsZQEAEkxvY2FsVmFyaWFibGVUYWJsZQEABHRoaXMBAChMb3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXI7AQAOY2FuSW1wb3N0ZXJpc2UBABQoTGphdmEvbGFuZy9DbGFzczspWgEABHR5cGUBABFMamF2YS9sYW5nL0NsYXNzOwEAFkxvY2FsVmFyaWFibGVUeXBlVGFibGUBABRMamF2YS9sYW5nL0NsYXNzPCo+OwEACVNpZ25hdHVyZQEAFyhMamF2YS9sYW5nL0NsYXNzPCo+OylaAQALaW1wb3N0ZXJpc2UBAFAoTG9yZy9qbW9jay9hcGkvSW52b2thYmxlO0xqYXZhL2xhbmcvQ2xhc3M7W0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvT2JqZWN0OwEACnByb3h5Q2xhc3MBAAptb2NrT2JqZWN0AQAZTG9yZy9qbW9jay9hcGkvSW52b2thYmxlOwEACm1vY2tlZFR5cGUBAA9hbmNpbGxpYXJ5VHlwZXMBABJbTGphdmEvbGFuZy9DbGFzczsBABZMamF2YS9sYW5nL0NsYXNzPFRUOz47AQAVW0xqYXZhL2xhbmcvQ2xhc3M8Kj47AQBfPFQ6TGphdmEvbGFuZy9PYmplY3Q7PihMb3JnL2ptb2NrL2FwaS9JbnZva2FibGU7TGphdmEvbGFuZy9DbGFzczxUVDs+O1tMamF2YS9sYW5nL0NsYXNzPCo+OylUVDsBABV0b1N0cmluZ01ldGhvZElzRmluYWwBAAh0b1N0cmluZwEAGkxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7AQABZQEAHUxqYXZhL2xhbmcvU2VjdXJpdHlFeGNlcHRpb247AQAhTGphdmEvbGFuZy9Ob1N1Y2hNZXRob2RFeGNlcHRpb247AQAZc2V0Q29uc3RydWN0b3JzQWNjZXNzaWJsZQEAFShMamF2YS9sYW5nL0NsYXNzO1opVgEAC2NvbnN0cnVjdG9yAQAfTGphdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yOwEABGFyciQBACBbTGphdmEvbGFuZy9yZWZsZWN0L0NvbnN0cnVjdG9yOwEABGxlbiQBAAFJAQACaSQBAAphY2Nlc3NpYmxlAQABWgEAIkxqYXZhL2xhbmcvcmVmbGVjdC9Db25zdHJ1Y3RvcjwqPjsBABgoTGphdmEvbGFuZy9DbGFzczwqPjtaKVYBABBjcmVhdGVQcm94eUNsYXNzAQA2KExqYXZhL2xhbmcvQ2xhc3M7W0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvQ2xhc3M7AQArTG5ldC9zZi9jZ2xpYi9jb3JlL0NvZGVHZW5lcmF0aW9uRXhjZXB0aW9uOwEACGVuaGFuY2VyAQAdTG5ldC9zZi9jZ2xpYi9wcm94eS9FbmhhbmNlcjsBAFU8VDpMamF2YS9sYW5nL09iamVjdDs+KExqYXZhL2xhbmcvQ2xhc3M8Kj47W0xqYXZhL2xhbmcvQ2xhc3M8Kj47KUxqYXZhL2xhbmcvQ2xhc3M8Kj47AQALY3JlYXRlUHJveHkBAD4oTGphdmEvbGFuZy9DbGFzcztMb3JnL2ptb2NrL2FwaS9JbnZva2FibGU7KUxqYXZhL2xhbmcvT2JqZWN0OwEABXByb3h5AQAcTG5ldC9zZi9jZ2xpYi9wcm94eS9GYWN0b3J5OwEAQShMamF2YS9sYW5nL0NsYXNzPCo+O0xvcmcvam1vY2svYXBpL0ludm9rYWJsZTspTGphdmEvbGFuZy9PYmplY3Q7AQAHcHJlcGVuZAEANyhMamF2YS9sYW5nL0NsYXNzO1tMamF2YS9sYW5nL0NsYXNzOylbTGphdmEvbGFuZy9DbGFzczsBAAVmaXJzdAEABHJlc3QBAANhbGwBAEAoTGphdmEvbGFuZy9DbGFzczwqPjtbTGphdmEvbGFuZy9DbGFzczwqPjspW0xqYXZhL2xhbmcvQ2xhc3M8Kj47AQAIPGNsaW5pdD4BAApTb3VyY2VGaWxlAQAWQ2xhc3NJbXBvc3RlcmlzZXIuamF2YQwAVQBWAQAab3JnL29iamVuZXNpcy9PYmplbmVzaXNTdGQMAFMAVAwA3wDgDADhAOIHAOMMAOQA5QwA5gDgDABvAF0BACJqYXZhL2xhbmcvSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uAQAXamF2YS9sYW5nL1N0cmluZ0J1aWxkZXIMAOcA6AwA6QDqAQAcIGhhcyBhIGZpbmFsIHRvU3RyaW5nIG1ldGhvZAwAcADoDABVAOsMAHUAdgwAggCDDACIAIkMAOwA7QEAD2phdmEvbGFuZy9DbGFzcwwA7gDvBwDwAQAbamF2YS9sYW5nL1NlY3VyaXR5RXhjZXB0aW9uAQAfamF2YS9sYW5nL0lsbGVnYWxTdGF0ZUV4Y2VwdGlvbgEAKW5vdCBhbGxvd2VkIHRvIHJlZmxlY3Qgb24gdG9TdHJpbmcgbWV0aG9kDABVAPEBAB9qYXZhL2xhbmcvTm9TdWNoTWV0aG9kRXhjZXB0aW9uAQAPamF2YS9sYW5nL0Vycm9yAQAfbm8gcHVibGljIHRvU3RyaW5nIG1ldGhvZCBmb3VuZAwA8gDzBwD0DAD1APYBABBqYXZhL2xhbmcvT2JqZWN0AQBOb3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXIkQ2xhc3NXaXRoU3VwZXJjbGFzc1RvV29ya0Fyb3VuZENnbGliQnVnAQAob3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXIkMwEAAAwAVQD3BwD4DAD5APoHAPsMAPwA/QwA/gD2DAD/AQAMAI0AjgwBAQECAQAkbmV0L3NmL2NnbGliL3Byb3h5L0ludm9jYXRpb25IYW5kbGVyAQAXbmV0L3NmL2NnbGliL3Byb3h5L05vT3AMAQMBAgwAUQBSDAEEAQUMAQYBBwwATwBQDAEIAQkMAQoBCwEAKW5ldC9zZi9jZ2xpYi9jb3JlL0NvZGVHZW5lcmF0aW9uRXhjZXB0aW9uAQAWY291bGQgbm90IGltcG9zdGVyaXNlIAwA6QEMBwENDAEOAQ8BABpuZXQvc2YvY2dsaWIvcHJveHkvRmFjdG9yeQEAG25ldC9zZi9jZ2xpYi9wcm94eS9DYWxsYmFjawEAKG9yZy9qbW9jay9saWIvbGVnYWN5L0NsYXNzSW1wb3N0ZXJpc2VyJDQMAFUBEAwATQERDAESARMHARQMARUBFgEAJm9yZy9qbW9jay9saWIvbGVnYWN5L0NsYXNzSW1wb3N0ZXJpc2VyDABNAE4BAChvcmcvam1vY2svbGliL2xlZ2FjeS9DbGFzc0ltcG9zdGVyaXNlciQxAQAob3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXIkMgEAGm9yZy9qbW9jay9hcGkvSW1wb3N0ZXJpc2VyAQALaXNQcmltaXRpdmUBAAMoKVoBAAxnZXRNb2RpZmllcnMBAAMoKUkBABpqYXZhL2xhbmcvcmVmbGVjdC9Nb2RpZmllcgEAB2lzRmluYWwBAAQoSSlaAQALaXNJbnRlcmZhY2UBAAdnZXROYW1lAQAUKClMamF2YS9sYW5nL1N0cmluZzsBAAZhcHBlbmQBAC0oTGphdmEvbGFuZy9TdHJpbmc7KUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsBABUoTGphdmEvbGFuZy9TdHJpbmc7KVYBAARjYXN0AQAmKExqYXZhL2xhbmcvT2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsBAAlnZXRNZXRob2QBAEAoTGphdmEvbGFuZy9TdHJpbmc7W0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvcmVmbGVjdC9NZXRob2Q7AQAYamF2YS9sYW5nL3JlZmxlY3QvTWV0aG9kAQAqKExqYXZhL2xhbmcvU3RyaW5nO0xqYXZhL2xhbmcvVGhyb3dhYmxlOylWAQAXZ2V0RGVjbGFyZWRDb25zdHJ1Y3RvcnMBACIoKVtMamF2YS9sYW5nL3JlZmxlY3QvQ29uc3RydWN0b3I7AQAdamF2YS9sYW5nL3JlZmxlY3QvQ29uc3RydWN0b3IBAA1zZXRBY2Nlc3NpYmxlAQAEKFopVgEAKyhMb3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXI7KVYBACdvcmcvam1vY2svaW50ZXJuYWwvU2VhcmNoaW5nQ2xhc3NMb2FkZXIBABBjb21iaW5lTG9hZGVyc09mAQA8KExqYXZhL2xhbmcvQ2xhc3M7W0xqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvQ2xhc3NMb2FkZXI7AQAbbmV0L3NmL2NnbGliL3Byb3h5L0VuaGFuY2VyAQAOc2V0Q2xhc3NMb2FkZXIBABooTGphdmEvbGFuZy9DbGFzc0xvYWRlcjspVgEADXNldFVzZUZhY3RvcnkBAA1zZXRTdXBlcmNsYXNzAQAUKExqYXZhL2xhbmcvQ2xhc3M7KVYBAA1zZXRJbnRlcmZhY2VzAQAVKFtMamF2YS9sYW5nL0NsYXNzOylWAQAQc2V0Q2FsbGJhY2tUeXBlcwEAEXNldENhbGxiYWNrRmlsdGVyAQAmKExuZXQvc2YvY2dsaWIvcHJveHkvQ2FsbGJhY2tGaWx0ZXI7KVYBAApnZXRTaWduZXJzAQAVKClbTGphdmEvbGFuZy9PYmplY3Q7AQAPc2V0TmFtaW5nUG9saWN5AQAjKExuZXQvc2YvY2dsaWIvY29yZS9OYW1pbmdQb2xpY3k7KVYBAAtjcmVhdGVDbGFzcwEAEygpTGphdmEvbGFuZy9DbGFzczsBAC0oTGphdmEvbGFuZy9PYmplY3Q7KUxqYXZhL2xhbmcvU3RyaW5nQnVpbGRlcjsBABdvcmcvb2JqZW5lc2lzL09iamVuZXNpcwEAC25ld0luc3RhbmNlAQAlKExqYXZhL2xhbmcvQ2xhc3M7KUxqYXZhL2xhbmcvT2JqZWN0OwEARChMb3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXI7TG9yZy9qbW9jay9hcGkvSW52b2thYmxlOylWAQAZTG5ldC9zZi9jZ2xpYi9wcm94eS9Ob09wOwEADHNldENhbGxiYWNrcwEAIShbTG5ldC9z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ACUAFAAsAAIAlAAAAAIAlQBMAAAAKgAFACUAQwBLAAkAJgAAAAAAAAA+AAAAAAAAAEYAAAAAAAgASAAAAAAACFBLAwQKAAAAAACqZOM4Prv7KNUWAADVFgAAKwAAAG9yZy9qbW9jay9saWIvbGVnYWN5L0NsYXNzSW1wb3N0ZXJpc2VyLmphdmFwYWNrYWdlIG9yZy5qbW9jay5saWIubGVnYWN5OwoKaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkNvbnN0cnVjdG9yOwppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTWV0aG9kOwppbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuTW9kaWZpZXI7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKCmltcG9ydCBuZXQuc2YuY2dsaWIuY29yZS5Db2RlR2VuZXJhdGlvbkV4Y2VwdGlvbjsKaW1wb3J0IG5ldC5zZi5jZ2xpYi5jb3JlLkRlZmF1bHROYW1pbmdQb2xpY3k7CmltcG9ydCBuZXQuc2YuY2dsaWIuY29yZS5OYW1pbmdQb2xpY3k7CmltcG9ydCBuZXQuc2YuY2dsaWIuY29yZS5QcmVkaWNhdGU7CmltcG9ydCBuZXQuc2YuY2dsaWIucHJveHkuQ2FsbGJhY2s7CmltcG9ydCBuZXQuc2YuY2dsaWIucHJveHkuQ2FsbGJhY2tGaWx0ZXI7CmltcG9ydCBuZXQuc2YuY2dsaWIucHJveHkuRW5oYW5jZXI7CmltcG9ydCBuZXQuc2YuY2dsaWIucHJveHkuRmFjdG9yeTsKaW1wb3J0IG5ldC5zZi5jZ2xpYi5wcm94eS5JbnZvY2F0aW9uSGFuZGxlcjsKaW1wb3J0IG5ldC5zZi5jZ2xpYi5wcm94eS5Ob09wOwoKaW1wb3J0IG9yZy5qbW9jay5hcGkuSW1wb3N0ZXJpc2VyOwppbXBvcnQgb3JnLmptb2NrLmFwaS5JbnZvY2F0aW9uOwppbXBvcnQgb3JnLmptb2NrLmFwaS5JbnZva2FibGU7CmltcG9ydCBvcmcuam1vY2suaW50ZXJuYWwuU2VhcmNoaW5nQ2xhc3NMb2FkZXI7CmltcG9ydCBvcmcub2JqZW5lc2lzLk9iamVuZXNpczsKaW1wb3J0IG9yZy5vYmplbmVzaXMuT2JqZW5lc2lzU3RkOwoKLyoqCiAqIFRoaXMgY2xhc3MgbGV0cyB5b3UgaW1wb3N0ZXJpc2UgYWJzdHJhY3QgYW5kIGNvbmNyZXRlIGNsYXNzZXMgCiAqIDxlbT53aXRob3V0PC9lbT4gY2FsbGluZyB0aGUgY29uc3RydWN0b3JzIG9mIHRoZSBtb2NrZWQgY2xhc3MuCiAqICAgCiAqIEBhdXRob3IgbnByeWNlCiAqLwpwdWJsaWMgY2xhc3MgQ2xhc3NJbXBvc3RlcmlzZXIgaW1wbGVtZW50cyBJbXBvc3RlcmlzZXIgewogICAgcHVibGljIHN0YXRpYyBmaW5hbCBJbXBvc3RlcmlzZXIgSU5TVEFOQ0UgPSBuZXcgQ2xhc3NJbXBvc3RlcmlzZXIoKTsKICAgIAogICAgcHJpdmF0ZSBDbGFzc0ltcG9zdGVyaXNlcigpIHt9CiAgICAKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIE5hbWluZ1BvbGljeSBOQU1JTkdfUE9MSUNZX1RIQVRfQUxMT1dTX0lNUE9TVEVSSVNBVElPTl9PRl9DTEFTU0VTX0lOX1NJR05FRF9QQUNLQUdFUyA9IG5ldyBEZWZhdWx0TmFtaW5nUG9saWN5KCkgewogICAgICAgIEBPdmVycmlkZQogICAgICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2xhc3NOYW1lKFN0cmluZyBwcmVmaXgsIFN0cmluZyBzb3VyY2UsIE9iamVjdCBrZXksIFByZWRpY2F0ZSBuYW1lcykgewogICAgICAgICAgICByZXR1cm4gIm9yZy5qbW9jay5jb2RlZ2VuLiIgKyBzdXBlci5nZXRDbGFzc05hbWUocHJlZml4LCBzb3VyY2UsIGtleSwgbmFtZXMpOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIENhbGxiYWNrRmlsdGVyIElHTk9SRV9CUklER0VfTUVUSE9EUyA9IG5ldyBDYWxsYmFja0ZpbHRlcigpIHsKICAgICAgICBwdWJsaWMgaW50IGFjY2VwdChNZXRob2QgbWV0aG9kKSB7CiAgICAgICAgICAgIHJldHVybiBtZXRob2QuaXNCcmlkZ2UoKSA/IDEgOiAwOwogICAgICAgIH0KICAgIH07CiAgICAKICAgIHByaXZhdGUgZmluYWwgT2JqZW5lc2lzIG9iamVuZXNpcyA9IG5ldyBPYmplbmVzaXNTdGQoKTsKICAgIAogICAgcHVibGljIGJvb2xlYW4gY2FuSW1wb3N0ZXJpc2UoQ2xhc3M8Pz4gdHlwZSkgewogICAgICAgIHJldHVybiAhdHlwZS5pc1ByaW1pdGl2ZSgpICYmIAogICAgICAgICAgICAgICAhTW9kaWZpZXIuaXNGaW5hbCh0eXBlLmdldE1vZGlmaWVycygpKSAmJiAKICAgICAgICAgICAgICAgKHR5cGUuaXNJbnRlcmZhY2UoKSB8fCAhdG9TdHJpbmdNZXRob2RJc0ZpbmFsKHR5cGUpKTsKICAgIH0KICAgIAogICAgcHVibGljIDxUPiBUIGltcG9zdGVyaXNlKGZpbmFsIEludm9rYWJsZSBtb2NrT2JqZWN0LCBDbGFzczxUPiBtb2NrZWRUeXBlLCBDbGFzczw/Pi4uLiBhbmNpbGxpYXJ5VHlwZXMpIHsKICAgICAgICBpZiAoIW1vY2tlZFR5cGUuaXNJbnRlcmZhY2UoKSAmJiB0b1N0cmluZ01ldGhvZElzRmluYWwobW9ja2VkVHlwZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihtb2NrZWRUeXBlLmdldE5hbWUoKSArICIgaGFzIGEgZmluYWwgdG9TdHJpbmcgbWV0aG9kIik7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHNldENvbnN0cnVjdG9yc0FjY2Vzc2libGUobW9ja2VkVHlwZSwgdHJ1ZSk7CiAgICAgICAgICAgIENsYXNzPD8+IHByb3h5Q2xhc3MgPSBjcmVhdGVQcm94eUNsYXNzKG1vY2tlZFR5cGUsIGFuY2lsbGlhcnlUeXBlcyk7CiAgICAgICAgICAgIHJldHVybiBtb2NrZWRUeXBlLmNhc3QoY3JlYXRlUHJveHkocHJveHlDbGFzcywgbW9ja09iamVjdCkpOwogICAgICAgIH0KICAgICAgICBmaW5hbGx5IHsKICAgICAgICAgICAgc2V0Q29uc3RydWN0b3JzQWNjZXNzaWJsZShtb2NrZWRUeXBlLCBmYWxzZSk7CiAgICAgICAgfQoJfQogICAgCiAgICBwcml2YXRlIGJvb2xlYW4gdG9TdHJpbmdNZXRob2RJc0ZpbmFsKENsYXNzPD8+IHR5cGUpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBNZXRob2QgdG9TdHJpbmcgPSB0eXBlLmdldE1ldGhvZCgidG9TdHJpbmciKTsKICAgICAgICAgICAgcmV0dXJuIE1vZGlmaWVyLmlzRmluYWwodG9TdHJpbmcuZ2V0TW9kaWZpZXJzKCkpOwogICAgICAgICAgICAKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKFNlY3VyaXR5RXhjZXB0aW9uIGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IElsbGVnYWxTdGF0ZUV4Y2VwdGlvbigibm90IGFsbG93ZWQgdG8gcmVmbGVjdCBvbiB0b1N0cmluZyBtZXRob2QiLCBlKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2ggKE5vU3VjaE1ldGhvZEV4Y2VwdGlvbiBlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigibm8gcHVibGljIHRvU3RyaW5nIG1ldGhvZCBmb3VuZCIsIGUpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHZvaWQgc2V0Q29uc3RydWN0b3JzQWNjZXNzaWJsZShDbGFzczw/PiBtb2NrZWRUeXBlLCBib29sZWFuIGFjY2Vzc2libGUpIHsKICAgICAgICBmb3IgKENvbnN0cnVjdG9yPD8+IGNvbnN0cnVjdG9yIDogbW9ja2VkVHlwZS5nZXREZWNsYXJlZENvbnN0cnVjdG9ycygpKSB7CiAgICAgICAgICAgIGNvbnN0cnVjdG9yLnNldEFjY2Vzc2libGUoYWNjZXNzaWJsZSk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBwcml2YXRlIDxUPiBDbGFzczw/PiBjcmVhdGVQcm94eUNsYXNzKENsYXNzPD8+IG1vY2tlZFR5cGUsIENsYXNzPD8+Li4uIGFuY2lsbGlhcnlUeXBlcykgewogICAgICAgIGlmIChtb2NrZWRUeXBlID09IE9iamVjdC5jbGFzcykgewogICAgICAgICAgICBtb2NrZWRUeXBlID0gQ2xhc3NXaXRoU3VwZXJjbGFzc1RvV29ya0Fyb3VuZENnbGliQnVnLmNsYXNzOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBFbmhhbmNlciBlbmhhbmNlciA9IG5ldyBFbmhhbmNlcigpIHsKICAgICAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgICAgIEBTdXBwcmVzc1dhcm5pbmdzKCJ1bmNoZWNrZWQiKQogICAgICAgICAgICBwcm90ZWN0ZWQgdm9pZCBmaWx0ZXJDb25zdHJ1Y3RvcnMoQ2xhc3Mgc2MsIExpc3QgY29uc3RydWN0b3JzKSB7CiAgICAgICAgICAgICAgICAvLyBEb24ndCBmaWx0ZXIKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgZW5oYW5jZXIuc2V0Q2xhc3NMb2FkZXIoU2VhcmNoaW5nQ2xhc3NMb2FkZXIuY29tYmluZUxvYWRlcnNPZihtb2NrZWRUeXBlLCBhbmNpbGxpYXJ5VHlwZXMpKTsKICAgICAgICBlbmhhbmNlci5zZXRVc2VGYWN0b3J5KHRydWUpOwogICAgICAgIGlmIChtb2NrZWRUeXBlLmlzSW50ZXJmYWNlKCkpIHsKICAgICAgICAgICAgZW5oYW5jZXIuc2V0U3VwZXJjbGFzcyhPYmplY3QuY2xhc3MpOwogICAgICAgICAgICBlbmhhbmNlci5zZXRJbnRlcmZhY2VzKHByZXBlbmQobW9ja2VkVHlwZSwgYW5jaWxsaWFyeVR5cGVzKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBlbmhhbmNlci5zZXRTdXBlcmNsYXNzKG1vY2tlZFR5cGUpOwogICAgICAgICAgICBlbmhhbmNlci5zZXRJbnRlcmZhY2VzKGFuY2lsbGlhcnlUeXBlcyk7CiAgICAgICAgfQogICAgICAgIGVuaGFuY2VyLnNldENhbGxiYWNrVHlwZXMobmV3IENsYXNzW117SW52b2NhdGlvbkhhbmRsZXIuY2xhc3MsIE5vT3AuY2xhc3N9KTsKICAgICAgICBlbmhhbmNlci5zZXRDYWxsYmFja0ZpbHRlcihJR05PUkVfQlJJREdFX01FVEhPRFMpOwogICAgICAgIGlmIChtb2NrZWRUeXBlLmdldFNpZ25lcnMoKSAhPSBudWxsKSB7CiAgICAgICAgICAgIGVuaGFuY2VyLnNldE5hbWluZ1BvbGljeShOQU1JTkdfUE9MSUNZX1RIQVRfQUxMT1dTX0lNUE9TVEVSSVNBVElPTl9PRl9DTEFTU0VTX0lOX1NJR05FRF9QQUNLQUdFUyk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBlbmhhbmNlci5jcmVhdGVDbGFzcygpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoQ29kZUdlbmVyYXRpb25FeGNlcHRpb24gZSkgewogICAgICAgICAgICAvLyBOb3RlOiBJJ3ZlIG9ubHkgYmVlbiBhYmxlIHRvIG1hbnVhbGx5IHRlc3QgdGhpcy4gIEl0IGV4aXN0cyB0byBoZWxwIHBlb3BsZSB3cml0aW5nCiAgICAgICAgICAgIC8vICAgICAgIEVjbGlwc2UgcGx1Zy1pbnMgb3IgdXNpbmcgb3RoZXIgZW52aXJvbm1lbnRzIHRoYXQgaGF2ZSBzb3BoaXN0aWNhdGVkIGNsYXNzIGxvYWRlcgogICAgICAgICAgICAvLyAgICAgICBzdHJ1Y3R1cmVzLgogICAgICAgICAgICB0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKCJjb3VsZCBub3QgaW1wb3N0ZXJpc2UgIiArIG1vY2tlZFR5cGUsIGUpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcHJpdmF0ZSBPYmplY3QgY3JlYXRlUHJveHkoQ2xhc3M8Pz4gcHJveHlDbGFzcywgZmluYWwgSW52b2thYmxlIG1vY2tPYmplY3QpIHsKICAgICAgICBGYWN0b3J5IHByb3h5ID0gKEZhY3Rvcnkpb2JqZW5lc2lzLm5ld0luc3RhbmNlKHByb3h5Q2xhc3MpOwogICAgICAgIHByb3h5LnNldENhbGxiYWNrcyhuZXcgQ2FsbGJhY2tbXSB7CiAgICAgICAgICAgIG5ldyBJbnZvY2F0aW9uSGFuZGxlcigpIHsKICAgICAgICAgICAgICAgIHB1YmxpYyBPYmplY3QgaW52b2tlKE9iamVjdCByZWNlaXZlciwgTWV0aG9kIG1ldGhvZCwgT2JqZWN0W10gYXJncykgdGhyb3dzIFRocm93YWJsZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vY2tPYmplY3QuaW52b2tlKG5ldyBJbnZvY2F0aW9uKHJlY2VpdmVyLCBtZXRob2QsIGFyZ3MpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgTm9PcC5JTlNUQU5DRQogICAgICAgIH0pOwogICAgICAgIHJldHVybiBwcm94eTsKICAgIH0KICAgIAogICAgcHJpdmF0ZSBDbGFzczw/PltdIHByZXBlbmQoQ2xhc3M8Pz4gZmlyc3QsIENsYXNzPD8+Li4uIHJlc3QpIHsKICAgICAgICBDbGFzczw/PltdIGFsbCA9IG5ldyBDbGFzczw/PltyZXN0Lmxlbmd0aCsxXTsKICAgICAgICBhbGxbMF0gPSBmaXJzdDsKICAgICAgICBTeXN0ZW0uYXJyYXljb3B5KHJlc3QsIDAsIGFsbCwgMSwgcmVzdC5sZW5ndGgpOwogICAgICAgIHJldHVybiBhbGw7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ2xhc3NXaXRoU3VwZXJjbGFzc1RvV29ya0Fyb3VuZENnbGliQnVnIHt9Cn0KUEsBAhQDCgAAAAAAe1gYOQAAAAAAAAAAAAAAAAkABAAAAAAAAAAQAO1BAAAAAE1FVEEtSU5GL/7KAABQSwECFAMKAAAAAAB6WBg5vGQOR2oAAABqAAAAFAAAAAAAAAAAAAAApIErAAAATUVUQS1JTkYvTUFOSUZFU1QuTUZQSwECFAMKAAAAAAB5WBg5AAAAAAAAAAAAAAAABAAAAAAAAAAAABAA7UHHAAAAb3JnL1BLAQIUAwoAAAAAAHpYGDkAAAAAAAAAAAAAAAAKAAAAAAAAAAAAEADtQekAAABvcmcvam1vY2svUEsBAhQDCgAAAAAAelgYOQAAAAAAAAAAAAAAAA4AAAAAAAAAAAAQAO1BEQEAAG9yZy9qbW9jay9saWIvUEsBAhQDCgAAAAAAelgYOQAAAAAAAAAAAAAAABUAAAAAAAAAAAAQAO1BPQEAAG9yZy9qbW9jay9saWIvbGVnYWN5L1BLAQIUAwoAAAAAAHpYGDmj9Z/T0wMAANMDAAAuAAAAAAAAAAAAAACkgXABAABvcmcvam1vY2svbGliL2xlZ2FjeS9DbGFzc0ltcG9zdGVyaXNlciQxLmNsYXNzUEsBAhQDCgAAAAAAelgYOdX/GgqsAgAArAIAAC4AAAAAAAAAAAAAAKSBjwUAAG9yZy9qbW9jay9saWIvbGVnYWN5L0NsYXNzSW1wb3N0ZXJpc2VyJDIuY2xhc3NQSwECFAMKAAAAAAB6WBg5rV9u/EUDAABFAwAALgAAAAAAAAAAAAAApIGHCAAAb3JnL2ptb2NrL2xpYi9sZWdhY3kvQ2xhc3NJbXBvc3RlcmlzZXIkMy5jbGFzc1BLAQIUAwoAAAAAAHpYGDnZ93iPLQUAAC0FAAAuAAAAAAAAAAAAAACkgRgMAABvcmcvam1vY2svbGliL2xlZ2FjeS9DbGFzc0ltcG9zdGVyaXNlciQ0LmNsYXNzUEsBAhQDCgAAAAAAelgYOS00fVADAgAAAwIAAFQAAAAAAAAAAAAAAKSBkREAAG9yZy9qbW9jay9saWIvbGVnYWN5L0NsYXNzSW1wb3N0ZXJpc2VyJENsYXNzV2l0aFN1cGVyY2xhc3NUb1dvcmtBcm91bmRDZ2xpYkJ1Zy5jbGFzc1BLAQIUAwoAAAAAAHpYGDlS33swpBkAAKQZAAAsAAAAAAAAAAAAAACkgQYUAABvcmcvam1vY2svbGliL2xlZ2FjeS9DbGFzc0ltcG9zdGVyaXNlci5jbGFzc1BLAQIUAwoAAAAAAKpk4zg+u/so1RYAANUWAAArAAAAAAAAAAAAAACkgfQtAABvcmcvam1vY2svbGliL2xlZ2FjeS9DbGFzc0ltcG9zdGVyaXNlci5qYXZhUEsFBgAAAAANAA0ACwQAABJFAAAAAA==