A/MNCkxcrFFjAAAAAAAAAAALAAAAQAAAAHOlAQAAZAAAWgAAZAEAZAIAZAMAZAQAZAUAZAYAZAcAZAgAZAkAZAoAZAsAZwsAWgEAZAwAZA0AbAIAWgIAZAwAZA4AbAMAbQQAWgUAAWQMAGQPAGwGAG0HAFoHAAFlBQBkCwBkEACDAgBaCABkEQCEAABaCQBkBABmAABkEgCEAACDAABZWgoAZBMAZBQAZBUAhAIAWgsAZBYAhAAAWgwAZAUAZgAAZBcAhAAAgwAAWVoNAGQMAGQNAGwOAFoOAGUOAGoPAGQYAIMBAGoQAGQZAIQBAFoRAGQaAGQbAIQBAFoSAGQcAIQAAFoTAGQdAGQdAGQdAGQdAGQTAGQeAGQfAIQGAFoUAGQgAIQAAFoVAGQdAGQdAGQdAGQdAGQTAGQeAGQhAIQGAFoWAGUXAGUSAGQiAIQCAFoYAGUXAGUXAGUSAGQjAIQDAFoZAGQkAFoaAGQlAFobAGQmAFocAGQnAFodAGQKAGUeAGYBAGQoAIQAAIMAAFlaHwBbDgBkKQCEAABaIABkKgCEAABaIQBlIgBkKwBrAgByoQFlIQCDAAABbgAAZA0AUygsAAAAc2UDAAAKTW9kdWxlIGRpZmZsaWIgLS0gaGVscGVycyBmb3IgY29tcHV0aW5nIGRlbHRhcyBiZXR3ZWVuIG9iamVjdHMuCgpGdW5jdGlvbiBnZXRfY2xvc2VfbWF0Y2hlcyh3b3JkLCBwb3NzaWJpbGl0aWVzLCBuPTMsIGN1dG9mZj0wLjYpOgogICAgVXNlIFNlcXVlbmNlTWF0Y2hlciB0byByZXR1cm4gbGlzdCBvZiB0aGUgYmVzdCAiZ29vZCBlbm91Z2giIG1hdGNoZXMuCgpGdW5jdGlvbiBjb250ZXh0X2RpZmYoYSwgYik6CiAgICBGb3IgdHdvIGxpc3RzIG9mIHN0cmluZ3MsIHJldHVybiBhIGRlbHRhIGluIGNvbnRleHQgZGlmZiBmb3JtYXQuCgpGdW5jdGlvbiBuZGlmZihhLCBiKToKICAgIFJldHVybiBhIGRlbHRhOiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGBhYCBhbmQgYGJgIChsaXN0cyBvZiBzdHJpbmdzKS4KCkZ1bmN0aW9uIHJlc3RvcmUoZGVsdGEsIHdoaWNoKToKICAgIFJldHVybiBvbmUgb2YgdGhlIHR3byBzZXF1ZW5jZXMgdGhhdCBnZW5lcmF0ZWQgYW4gbmRpZmYgZGVsdGEuCgpGdW5jdGlvbiB1bmlmaWVkX2RpZmYoYSwgYik6CiAgICBGb3IgdHdvIGxpc3RzIG9mIHN0cmluZ3MsIHJldHVybiBhIGRlbHRhIGluIHVuaWZpZWQgZGlmZiBmb3JtYXQuCgpDbGFzcyBTZXF1ZW5jZU1hdGNoZXI6CiAgICBBIGZsZXhpYmxlIGNsYXNzIGZvciBjb21wYXJpbmcgcGFpcnMgb2Ygc2VxdWVuY2VzIG9mIGFueSB0eXBlLgoKQ2xhc3MgRGlmZmVyOgogICAgRm9yIHByb2R1Y2luZyBodW1hbi1yZWFkYWJsZSBkZWx0YXMgZnJvbSBzZXF1ZW5jZXMgb2YgbGluZXMgb2YgdGV4dC4KCkNsYXNzIEh0bWxEaWZmOgogICAgRm9yIHByb2R1Y2luZyBIVE1MIHNpZGUgYnkgc2lkZSBjb21wYXJpc29uIHdpdGggY2hhbmdlIGhpZ2hsaWdodHMuCnQRAAAAZ2V0X2Nsb3NlX21hdGNoZXN0BQAAAG5kaWZmdAcAAAByZXN0b3JldA8AAABTZXF1ZW5jZU1hdGNoZXJ0BgAAAERpZmZlcnQRAAAASVNfQ0hBUkFDVEVSX0pVTkt0DAAAAElTX0xJTkVfSlVOS3QMAAAAY29udGV4dF9kaWZmdAwAAAB1bmlmaWVkX2RpZmZ0CAAAAEh0bWxEaWZmdAUAAABNYXRjaGn/////TigBAAAAdAoAAABuYW1lZHR1cGxlKAEAAAB0BgAAAHJlZHVjZXMIAAAAYSBiIHNpemVjAgAAAAIAAAACAAAAQwAAAHMWAAAAfAEAchIAZAEAfAAAFHwBABVTZAIAUygDAAAATmcAAAAAAAAAQGcAAAAAAADwPygAAAAAKAIAAAB0BwAAAG1hdGNoZXN0BgAAAGxlbmd0aCgAAAAAKAAAAABzTwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2RpZmZsaWIucHl0EAAAAF9jYWxjdWxhdGVfcmF0aW8pAAAAcwYAAAAAAQYBDAFjAAAAAAAAAAAFAAAAQgAAAHOJAAAAZQAAWgEAZAAAWgIAZA8AZAEAZAEAZQQAZAIAhAQAWgUAZAMAhAAAWgYAZAQAhAAAWgcAZAUAhAAAWggAZAYAhAAAWgkAZAcAhAAAWgoAZAgAhAAAWgsAZAkAhAAAWgwAZAoAZAsAhAEAWg0AZAwAhAAAWg4AZA0AhAAAWg8AZA4AhAAAWhAAUlMoEAAAAHOdEAAACiAgICBTZXF1ZW5jZU1hdGNoZXIgaXMgYSBmbGV4aWJsZSBjbGFzcyBmb3IgY29tcGFyaW5nIHBhaXJzIG9mIHNlcXVlbmNlcyBvZgogICAgYW55IHR5cGUsIHNvIGxvbmcgYXMgdGhlIHNlcXVlbmNlIGVsZW1lbnRzIGFyZSBoYXNoYWJsZS4gIFRoZSBiYXNpYwogICAgYWxnb3JpdGhtIHByZWRhdGVzLCBhbmQgaXMgYSBsaXR0bGUgZmFuY2llciB0aGFuLCBhbiBhbGdvcml0aG0KICAgIHB1Ymxpc2hlZCBpbiB0aGUgbGF0ZSAxOTgwJ3MgYnkgUmF0Y2xpZmYgYW5kIE9iZXJzaGVscCB1bmRlciB0aGUKICAgIGh5cGVyYm9saWMgbmFtZSAiZ2VzdGFsdCBwYXR0ZXJuIG1hdGNoaW5nIi4gIFRoZSBiYXNpYyBpZGVhIGlzIHRvIGZpbmQKICAgIHRoZSBsb25nZXN0IGNvbnRpZ3VvdXMgbWF0Y2hpbmcgc3Vic2VxdWVuY2UgdGhhdCBjb250YWlucyBubyAianVuayIKICAgIGVsZW1lbnRzIChSLU8gZG9lc24ndCBhZGRyZXNzIGp1bmspLiAgVGhlIHNhbWUgaWRlYSBpcyB0aGVuIGFwcGxpZWQKICAgIHJlY3Vyc2l2ZWx5IHRvIHRoZSBwaWVjZXMgb2YgdGhlIHNlcXVlbmNlcyB0byB0aGUgbGVmdCBhbmQgdG8gdGhlIHJpZ2h0CiAgICBvZiB0aGUgbWF0Y2hpbmcgc3Vic2VxdWVuY2UuICBUaGlzIGRvZXMgbm90IHlpZWxkIG1pbmltYWwgZWRpdAogICAgc2VxdWVuY2VzLCBidXQgZG9lcyB0ZW5kIHRvIHlpZWxkIG1hdGNoZXMgdGhhdCAibG9vayByaWdodCIgdG8gcGVvcGxlLgoKICAgIFNlcXVlbmNlTWF0Y2hlciB0cmllcyB0byBjb21wdXRlIGEgImh1bWFuLWZyaWVuZGx5IGRpZmYiIGJldHdlZW4gdHdvCiAgICBzZXF1ZW5jZXMuICBVbmxpa2UgZS5nLiBVTklYKHRtKSBkaWZmLCB0aGUgZnVuZGFtZW50YWwgbm90aW9uIGlzIHRoZQogICAgbG9uZ2VzdCAqY29udGlndW91cyogJiBqdW5rLWZyZWUgbWF0Y2hpbmcgc3Vic2VxdWVuY2UuICBUaGF0J3Mgd2hhdAogICAgY2F0Y2hlcyBwZW9wbGVzJyBleWVzLiAgVGhlIFdpbmRvd3ModG0pIHdpbmRpZmYgaGFzIGFub3RoZXIgaW50ZXJlc3RpbmcKICAgIG5vdGlvbiwgcGFpcmluZyB1cCBlbGVtZW50cyB0aGF0IGFwcGVhciB1bmlxdWVseSBpbiBlYWNoIHNlcXVlbmNlLgogICAgVGhhdCwgYW5kIHRoZSBtZXRob2QgaGVyZSwgYXBwZWFyIHRvIHlpZWxkIG1vcmUgaW50dWl0aXZlIGRpZmZlcmVuY2UKICAgIHJlcG9ydHMgdGhhbiBkb2VzIGRpZmYuICBUaGlzIG1ldGhvZCBhcHBlYXJzIHRvIGJlIHRoZSBsZWFzdCB2dWxuZXJhYmxlCiAgICB0byBzeW5jaGluZyB1cCBvbiBibG9ja3Mgb2YgImp1bmsgbGluZXMiLCB0aG91Z2ggKGxpa2UgYmxhbmsgbGluZXMgaW4KICAgIG9yZGluYXJ5IHRleHQgZmlsZXMsIG9yIG1heWJlICI8UD4iIGxpbmVzIGluIEhUTUwgZmlsZXMpLiAgVGhhdCBtYXkgYmUKICAgIGJlY2F1c2UgdGhpcyBpcyB0aGUgb25seSBtZXRob2Qgb2YgdGhlIDMgdGhhdCBoYXMgYSAqY29uY2VwdCogb2YKICAgICJqdW5rIiA8d2luaz4uCgogICAgRXhhbXBsZSwgY29tcGFyaW5nIHR3byBzdHJpbmdzLCBhbmQgY29uc2lkZXJpbmcgYmxhbmtzIHRvIGJlICJqdW5rIjoKCiAgICA+Pj4gcyA9IFNlcXVlbmNlTWF0Y2hlcihsYW1iZGEgeDogeCA9PSAiICIsCiAgICAuLi4gICAgICAgICAgICAgICAgICAgICAicHJpdmF0ZSBUaHJlYWQgY3VycmVudFRocmVhZDsiLAogICAgLi4uICAgICAgICAgICAgICAgICAgICAgInByaXZhdGUgdm9sYXRpbGUgVGhyZWFkIGN1cnJlbnRUaHJlYWQ7IikKICAgID4+PgoKICAgIC5yYXRpbygpIHJldHVybnMgYSBmbG9hdCBpbiBbMCwgMV0sIG1lYXN1cmluZyB0aGUgInNpbWlsYXJpdHkiIG9mIHRoZQogICAgc2VxdWVuY2VzLiAgQXMgYSBydWxlIG9mIHRodW1iLCBhIC5yYXRpbygpIHZhbHVlIG92ZXIgMC42IG1lYW5zIHRoZQogICAgc2VxdWVuY2VzIGFyZSBjbG9zZSBtYXRjaGVzOgoKICAgID4+PiBwcmludCByb3VuZChzLnJhdGlvKCksIDMpCiAgICAwLjg2NgogICAgPj4+CgogICAgSWYgeW91J3JlIG9ubHkgaW50ZXJlc3RlZCBpbiB3aGVyZSB0aGUgc2VxdWVuY2VzIG1hdGNoLAogICAgLmdldF9tYXRjaGluZ19ibG9ja3MoKSBpcyBoYW5keToKCiAgICA+Pj4gZm9yIGJsb2NrIGluIHMuZ2V0X21hdGNoaW5nX2Jsb2NrcygpOgogICAgLi4uICAgICBwcmludCAiYVslZF0gYW5kIGJbJWRdIG1hdGNoIGZvciAlZCBlbGVtZW50cyIgJSBibG9jawogICAgYVswXSBhbmQgYlswXSBtYXRjaCBmb3IgOCBlbGVtZW50cwogICAgYVs4XSBhbmQgYlsxN10gbWF0Y2ggZm9yIDIxIGVsZW1lbnRzCiAgICBhWzI5XSBhbmQgYlszOF0gbWF0Y2ggZm9yIDAgZWxlbWVudHMKCiAgICBOb3RlIHRoYXQgdGhlIGxhc3QgdHVwbGUgcmV0dXJuZWQgYnkgLmdldF9tYXRjaGluZ19ibG9ja3MoKSBpcyBhbHdheXMgYQogICAgZHVtbXksIChsZW4oYSksIGxlbihiKSwgMCksIGFuZCB0aGlzIGlzIHRoZSBvbmx5IGNhc2UgaW4gd2hpY2ggdGhlIGxhc3QKICAgIHR1cGxlIGVsZW1lbnQgKG51bWJlciBvZiBlbGVtZW50cyBtYXRjaGVkKSBpcyAwLgoKICAgIElmIHlvdSB3YW50IHRvIGtub3cgaG93IHRvIGNoYW5nZSB0aGUgZmlyc3Qgc2VxdWVuY2UgaW50byB0aGUgc2Vjb25kLAogICAgdXNlIC5nZXRfb3Bjb2RlcygpOgoKICAgID4+PiBmb3Igb3Bjb2RlIGluIHMuZ2V0X29wY29kZXMoKToKICAgIC4uLiAgICAgcHJpbnQgIiU2cyBhWyVkOiVkXSBiWyVkOiVkXSIgJSBvcGNvZGUKICAgICBlcXVhbCBhWzA6OF0gYlswOjhdCiAgICBpbnNlcnQgYVs4OjhdIGJbODoxN10KICAgICBlcXVhbCBhWzg6MjldIGJbMTc6MzhdCgogICAgU2VlIHRoZSBEaWZmZXIgY2xhc3MgZm9yIGEgZmFuY3kgaHVtYW4tZnJpZW5kbHkgZmlsZSBkaWZmZXJlbmNlciwgd2hpY2gKICAgIHVzZXMgU2VxdWVuY2VNYXRjaGVyIGJvdGggdG8gY29tcGFyZSBzZXF1ZW5jZXMgb2YgbGluZXMsIGFuZCB0byBjb21wYXJlCiAgICBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycyB3aXRoaW4gc2ltaWxhciAobmVhci1tYXRjaGluZykgbGluZXMuCgogICAgU2VlIGFsc28gZnVuY3Rpb24gZ2V0X2Nsb3NlX21hdGNoZXMoKSBpbiB0aGlzIG1vZHVsZSwgd2hpY2ggc2hvd3MgaG93CiAgICBzaW1wbGUgY29kZSBidWlsZGluZyBvbiBTZXF1ZW5jZU1hdGNoZXIgY2FuIGJlIHVzZWQgdG8gZG8gdXNlZnVsIHdvcmsuCgogICAgVGltaW5nOiAgQmFzaWMgUi1PIGlzIGN1YmljIHRpbWUgd29yc3QgY2FzZSBhbmQgcXVhZHJhdGljIHRpbWUgZXhwZWN0ZWQKICAgIGNhc2UuICBTZXF1ZW5jZU1hdGNoZXIgaXMgcXVhZHJhdGljIHRpbWUgZm9yIHRoZSB3b3JzdCBjYXNlIGFuZCBoYXMKICAgIGV4cGVjdGVkLWNhc2UgYmVoYXZpb3IgZGVwZW5kZW50IGluIGEgY29tcGxpY2F0ZWQgd2F5IG9uIGhvdyBtYW55CiAgICBlbGVtZW50cyB0aGUgc2VxdWVuY2VzIGhhdmUgaW4gY29tbW9uOyBiZXN0IGNhc2UgdGltZSBpcyBsaW5lYXIuCgogICAgTWV0aG9kczoKCiAgICBfX2luaXRfXyhpc2p1bms9Tm9uZSwgYT0nJywgYj0nJykKICAgICAgICBDb25zdHJ1Y3QgYSBTZXF1ZW5jZU1hdGNoZXIuCgogICAgc2V0X3NlcXMoYSwgYikKICAgICAgICBTZXQgdGhlIHR3byBzZXF1ZW5jZXMgdG8gYmUgY29tcGFyZWQuCgogICAgc2V0X3NlcTEoYSkKICAgICAgICBTZXQgdGhlIGZpcnN0IHNlcXVlbmNlIHRvIGJlIGNvbXBhcmVkLgoKICAgIHNldF9zZXEyKGIpCiAgICAgICAgU2V0IHRoZSBzZWNvbmQgc2VxdWVuY2UgdG8gYmUgY29tcGFyZWQuCgogICAgZmluZF9sb25nZXN0X21hdGNoKGFsbywgYWhpLCBibG8sIGJoaSkKICAgICAgICBGaW5kIGxvbmdlc3QgbWF0Y2hpbmcgYmxvY2sgaW4gYVthbG86YWhpXSBhbmQgYltibG86YmhpXS4KCiAgICBnZXRfbWF0Y2hpbmdfYmxvY2tzKCkKICAgICAgICBSZXR1cm4gbGlzdCBvZiB0cmlwbGVzIGRlc2NyaWJpbmcgbWF0Y2hpbmcgc3Vic2VxdWVuY2VzLgoKICAgIGdldF9vcGNvZGVzKCkKICAgICAgICBSZXR1cm4gbGlzdCBvZiA1LXR1cGxlcyBkZXNjcmliaW5nIGhvdyB0byB0dXJuIGEgaW50byBiLgoKICAgIHJhdGlvKCkKICAgICAgICBSZXR1cm4gYSBtZWFzdXJlIG9mIHRoZSBzZXF1ZW5jZXMnIHNpbWlsYXJpdHkgKGZsb2F0IGluIFswLDFdKS4KCiAgICBxdWlja19yYXRpbygpCiAgICAgICAgUmV0dXJuIGFuIHVwcGVyIGJvdW5kIG9uIC5yYXRpbygpIHJlbGF0aXZlbHkgcXVpY2tseS4KCiAgICByZWFsX3F1aWNrX3JhdGlvKCkKICAgICAgICBSZXR1cm4gYW4gdXBwZXIgYm91bmQgb24gcmF0aW8oKSB2ZXJ5IHF1aWNrbHkuCiAgICB0AAAAAGMFAAAABQAAAAMAAABDAAAAczYAAAB8AQB8AABfAABkAQAEfAAAXwIAfAAAXwMAfAQAfAAAXwQAfAAAagUAfAIAfAMAgwIAAWQBAFMoAgAAAHMhBAAAQ29uc3RydWN0IGEgU2VxdWVuY2VNYXRjaGVyLgoKICAgICAgICBPcHRpb25hbCBhcmcgaXNqdW5rIGlzIE5vbmUgKHRoZSBkZWZhdWx0KSwgb3IgYSBvbmUtYXJndW1lbnQKICAgICAgICBmdW5jdGlvbiB0aGF0IHRha2VzIGEgc2VxdWVuY2UgZWxlbWVudCBhbmQgcmV0dXJucyB0cnVlIGlmZiB0aGUKICAgICAgICBlbGVtZW50IGlzIGp1bmsuICBOb25lIGlzIGVxdWl2YWxlbnQgdG8gcGFzc2luZyAibGFtYmRhIHg6IDAiLCBpLmUuCiAgICAgICAgbm8gZWxlbWVudHMgYXJlIGNvbnNpZGVyZWQgdG8gYmUganVuay4gIEZvciBleGFtcGxlLCBwYXNzCiAgICAgICAgICAgIGxhbWJkYSB4OiB4IGluICIgXHQiCiAgICAgICAgaWYgeW91J3JlIGNvbXBhcmluZyBsaW5lcyBhcyBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVycywgYW5kIGRvbid0CiAgICAgICAgd2FudCB0byBzeW5jaCB1cCBvbiBibGFua3Mgb3IgaGFyZCB0YWJzLgoKICAgICAgICBPcHRpb25hbCBhcmcgYSBpcyB0aGUgZmlyc3Qgb2YgdHdvIHNlcXVlbmNlcyB0byBiZSBjb21wYXJlZC4gIEJ5CiAgICAgICAgZGVmYXVsdCwgYW4gZW1wdHkgc3RyaW5nLiAgVGhlIGVsZW1lbnRzIG9mIGEgbXVzdCBiZSBoYXNoYWJsZS4gIFNlZQogICAgICAgIGFsc28gLnNldF9zZXFzKCkgYW5kIC5zZXRfc2VxMSgpLgoKICAgICAgICBPcHRpb25hbCBhcmcgYiBpcyB0aGUgc2Vjb25kIG9mIHR3byBzZXF1ZW5jZXMgdG8gYmUgY29tcGFyZWQuICBCeQogICAgICAgIGRlZmF1bHQsIGFuIGVtcHR5IHN0cmluZy4gIFRoZSBlbGVtZW50cyBvZiBiIG11c3QgYmUgaGFzaGFibGUuIFNlZQogICAgICAgIGFsc28gLnNldF9zZXFzKCkgYW5kIC5zZXRfc2VxMigpLgoKICAgICAgICBPcHRpb25hbCBhcmcgYXV0b2p1bmsgc2hvdWxkIGJlIHNldCB0byBG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c3QgaW4gYSwgYW5kIG9mIGFsbCB0aG9zZSBtYXhpbWFsIG1hdGNoaW5nIGJsb2NrcyB0aGF0CiAgICAgICAgc3RhcnQgZWFybGllc3QgaW4gYSwgcmV0dXJuIHRoZSBvbmUgdGhhdCBzdGFydHMgZWFybGllc3QgaW4gYi4KCiAgICAgICAgPj4+IHMgPSBTZXF1ZW5jZU1hdGNoZXIoTm9uZSwgIiBhYmNkIiwgImFiY2QgYWJjZCIpCiAgICAgICAgPj4+IHMuZmluZF9sb25nZXN0X21hdGNoKDAsIDUsIDAsIDkpCiAgICAgICAgTWF0Y2goYT0wLCBiPTQsIHNpemU9NSkKCiAgICAgICAgSWYgaXNqdW5rIGlzIGRlZmluZWQsIGZpcnN0IHRoZSBsb25nZXN0IG1hdGNoaW5nIGJsb2NrIGlzCiAgICAgICAgZGV0ZXJtaW5lZCBhcyBhYm92ZSwgYnV0IHdpdGggdGhlIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb24gdGhhdCBubwogICAgICAgIGp1bmsgZWxlbWVudCBhcHBlYXJzIGluIHRoZSBibG9jay4gIFRoZW4gdGhhdCBibG9jayBpcyBleHRlbmRlZCBhcwogICAgICAgIGZhciBhcyBwb3NzaWJsZSBieSBtYXRjaGluZyAob25seSkganVuayBlbGVtZW50cyBvbiBib3RoIHNpZGVzLiAgU28KICAgICAgICB0aGUgcmVzdWx0aW5nIGJsb2NrIG5ldmVyIG1hdGNoZXMgb24ganVuayBleGNlcHQgYXMgaWRlbnRpY2FsIGp1bmsKICAgICAgICBoYXBwZW5zIHRvIGJlIGFkamFjZW50IHRvIGFuICJpbnRlcmVzdGluZyIgbWF0Y2guCgogICAgICAgIEhlcmUncyB0aGUgc2FtZSBleGFtcGxlIGFzIGJlZm9yZSwgYnV0IGNvbnNpZGVyaW5nIGJsYW5rcyB0byBiZQogICAgICAgIGp1bmsuICBUaGF0IHByZXZlbnRzICIgYWJjZCIgZnJvbSBtYXRjaGluZyB0aGUgIiBhYmNkIiBhdCB0aGUgdGFpbAogICAgICAgIGVuZCBvZiB0aGUgc2Vjb25kIHNlcXVlbmNlIGRpcmVjdGx5LiAgSW5zdGVhZCBvbmx5IHRoZSAi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AHwEAIMCAH0EAGcAAHwEAERdEgBcAgB9BwB9BgB8BgBeAgBx+QBTKAYAAABzxwMAAFVzZSBTZXF1ZW5jZU1hdGNoZXIgdG8gcmV0dXJuIGxpc3Qgb2YgdGhlIGJlc3QgImdvb2QgZW5vdWdoIiBtYXRjaGVzLgoKICAgIHdvcmQgaXMgYSBzZXF1ZW5jZSBmb3Igd2hpY2ggY2xvc2UgbWF0Y2hlcyBhcmUgZGVzaXJlZCAodHlwaWNhbGx5IGEKICAgIHN0cmluZykuCgogICAgcG9zc2liaWxpdGllcyBpcyBhIGxpc3Qgb2Ygc2VxdWVuY2VzIGFnYWluc3Qgd2hpY2ggdG8gbWF0Y2ggd29yZAogICAgKHR5cGljYWxseSBhIGxpc3Qgb2Ygc3RyaW5ncykuCgogICAgT3B0aW9uYWwgYXJnIG4gKGRlZmF1bHQgMykgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNsb3NlIG1hdGNoZXMgdG8KICAgIHJldHVybi4gIG4gbXVzdCBiZSA+IDAuCgogICAgT3B0aW9uYWwgYXJnIGN1dG9mZiAoZGVmYXVsdCAwLjYpIGlzIGEgZmxvYXQgaW4gWzAsIDFdLiAgUG9zc2liaWxpdGllcwogICAgdGhhdCBkb24ndCBzY29yZSBhdCBsZWFzdCB0aGF0IHNpbWlsYXIgdG8gd29yZCBhcmUgaWdub3JlZC4KCiAgICBUaGUgYmVzdCAobm8gbW9yZSB0aGFuIG4pIG1hdGNoZXMgYW1vbmcgdGhlIHBvc3NpYmlsaXRpZXMgYXJlIHJldHVybmVkCiAgICBpbiBhIGxpc3QsIHNvcnRlZCBieSBzaW1pbGFyaXR5IHNjb3JlLCBtb3N0IHNpbWlsYXIgZmlyc3QuCgogICAgPj4+IGdldF9jbG9zZV9tYXRjaGVzKCJhcHBlbCIsIFsiYXBlIiwgImFwcGxlIiwgInBlYWNoIiwgInB1cHB5Il0pCiAgICBbJ2FwcGxlJywgJ2FwZSddCiAgICA+Pj4gaW1wb3J0IGtleXdvcmQgYXMgX2tleXdvcmQKICAgID4+PiBnZXRfY2xvc2VfbWF0Y2hlcygid2hlZWwiLCBfa2V5d29yZC5rd2xpc3QpCiAgICBbJ3doaWxlJ10KICAgID4+PiBnZXRfY2xvc2VfbWF0Y2hlcygiYXBwbGUiLCBfa2V5d29yZC5rd2xpc3QpCiAgICBbXQogICAgPj4+IGdldF9jbG9zZV9tYXRjaGVzKCJhY2NlcHQiLCBfa2V5d29yZC5rd2xpc3QpCiAgICBbJ2V4Y2VwdCddCiAgICBpAAAAAHMRAAAAbiBtdXN0IGJlID4gMDogJXJnAAAAAAAAAABnAAAAAAAA8D9zIAAAAGN1dG9mZiBtdXN0IGJlIGluIFswLjAsIDEuMF06ICVyKAoAAAB0CgAAAFZhbHVlRXJyb3JSAwAAAFIaAAAAUhkAAABSbQAAAFJsAAAAUmgAAABSIgAAAHQFAAAAaGVhcHF0CAAAAG5sYXJnZXN0KAgAAAB0BAAAAHdvcmR0DQAAAHBvc3NpYmlsaXRpZXNSMQAAAHQGAAAAY3V0b2ZmdAYAAAByZXN1bHR0AQAAAHNSTAAAAHQFAAAAc2NvcmUoAAAAACgAAAAAc08AAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9kaWZmbGliLnB5UgAAAAC/AgAAcx4AAAAAHQwBFgEcARYBBgEJAQ0BDQENARIBEgESASADEgJjAgAAAAQAAAADAAAAQwAAAHNEAAAAZAEAdAAAfAAAgwEAAn0CAH0DAHgqAHwCAHwDAGsAAHI/AHwAAHwCABl8AQBrAgByPwB8AgBkAgA3fQIAcRYAV3wCAFMoAwAAAHN9AAAACiAgICBSZXR1cm4gbnVtYmVyIG9mIGBjaGAgY2hhcmFjdGVycyBhdCB0aGUgc3RhcnQgb2YgYGxpbmVgLgoKICAgIEV4YW1wbGU6CgogICAgPj4+IF9jb3VudF9sZWFkaW5nKCcgICBhYmMnLCAnICcpCiAgICAzCiAgICBpAAAAAGkBAAAAKAEAAABSJwAAACgEAAAAdAQAAABsaW5ldAIAAABjaFIsAAAAUjEAAAAoAAAAACgAAAAAc08AAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9kaWZmbGliLnB5dA4AAABfY291bnRfbGVhZGluZ+8CAABzCAAAAAAKEwEfAQ4BYwAAAAAAAAAAAwAAAEIAAABzUwAAAGUAAFoBAGQAAFoCAGQIAGQIAGQBAIQCAFoEAGQCAIQAAFoFAGQDAIQAAFoGAGQEAIQAAFoHAGQFAIQAAFoIAGQGAIQAAFoJAGQHAIQAAFoKAFJTKAkAAABzZQ0AAAogICAgRGlmZmVyIGlzIGEgY2xhc3MgZm9yIGNvbXBhcmluZyBzZXF1ZW5jZXMgb2YgbGluZXMgb2YgdGV4dCwgYW5kCiAgICBwcm9kdWNpbmcgaHVtYW4tcmVhZGFibGUgZGlmZmVyZW5jZXMgb3IgZGVsdGFzLiAgRGlmZmVyIHVzZXMKICAgIFNlcXVlbmNlTWF0Y2hlciBib3RoIHRvIGNvbXBhcmUgc2VxdWVuY2VzIG9mIGxpbmVzLCBhbmQgdG8gY29tcGFyZQogICAgc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMgd2l0aGluIHNpbWlsYXIgKG5lYXItbWF0Y2hpbmcpIGxpbmVzLgoKICAgIEVhY2ggbGluZSBvZiBhIERpZmZlciBkZWx0YSBiZWdpbnMgd2l0aCBhIHR3by1sZXR0ZXIgY29kZToKCiAgICAgICAgJy0gJyAgICBsaW5lIHVuaXF1ZSB0byBzZXF1ZW5jZSAxCiAgICAgICAgJysgJyAgICBsaW5lIHVuaXF1ZSB0byBzZXF1ZW5jZSAyCiAgICAgICAgJyAgJyAgICBsaW5lIGNvbW1vbiB0byBib3RoIHNlcXVlbmNlcwogICAgICAgICc/ICcgICAgbGluZSBub3QgcHJlc2VudCBpbiBlaXRoZXIgaW5wdXQgc2VxdWVuY2UKCiAgICBMaW5lcyBiZWdpbm5pbmcgd2l0aCAnPyAnIGF0dGVtcHQgdG8gZ3VpZGUgdGhlIGV5ZSB0byBpbnRyYWxpbmUKICAgIGRpZmZlcmVuY2VzLCBhbmQgd2VyZSBub3QgcHJlc2VudCBpbiBlaXRoZXIgaW5wdXQgc2VxdWVuY2UuICBUaGVzZSBsaW5lcwogICAgY2FuIGJlIGNvbmZ1c2luZyBpZiB0aGUgc2VxdWVuY2VzIGNvbnRhaW4gdGFiIGNoYXJhY3RlcnMuCgogICAgTm90ZSB0aGF0IERpZmZlciBtYWtlcyBubyBjbGFpbSB0byBwcm9kdWNlIGEgKm1pbmltYWwqIGRpZmYuICBUbyB0aGUKICAgIGNvbnRyYXJ5LCBtaW5pbWFsIGRpZmZzIGFyZSBvZnRlbiBjb3VudGVyLWludHVpdGl2ZSwgYmVjYXVzZSB0aGV5IHN5bmNoCiAgICB1cCBhbnl3aGVyZSBwb3NzaWJsZSwgc29tZXRpbWVzIGFjY2lkZW50YWwgbWF0Y2hlcyAxMDAgcGFnZXMgYXBhcnQuCiAgICBSZXN0cmljdGluZyBzeW5jaCBwb2ludHMgdG8gY29udGlndW91cyBtYXRjaGVzIHByZXNlcnZlcyBzb21lIG5vdGlvbiBvZgogICAgbG9jYWxpdHksIGF0IHRoZSBvY2Nhc2lvbmFsIGNvc3Qgb2YgcHJvZHVjaW5nIGEgbG9uZ2VyIGRpZmYuCgogICAgRXhhbXBsZTogQ29tcGFyaW5nIHR3byB0ZXh0cy4KCiAgICBGaXJzdCB3ZSBzZXQgdXAgdGhlIHRleHRzLCBzZXF1ZW5jZXMgb2YgaW5kaXZpZHVhbCBzaW5nbGUtbGluZSBzdHJpbmdzCiAgICBlbmRpbmcgd2l0aCBuZXdsaW5lcyAoc3VjaCBzZXF1ZW5jZXMgY2FuIGFsc28gYmUgb2J0YWluZWQgZnJvbSB0aGUKICAgIGByZWFkbGluZXMoKWAgbWV0aG9kIG9mIGZpbGUtbGlrZSBvYmplY3RzKToKCiAgICA+Pj4gdGV4dDEgPSAnJycgIDEuIEJlYXV0aWZ1bCBpcyBiZXR0ZXIgdGhhbiB1Z2x5LgogICAgLi4uICAgMi4gRXhwbGljaXQgaXMgYmV0dGVyIHRoYW4gaW1wbGljaXQuCiAgICAuLi4gICAzLiBTaW1wbGUgaXMgYmV0dGVyIHRoYW4gY29tcGxleC4KICAgIC4uLiAgIDQuIENvbXBsZXggaXMgYmV0dGVyIHRoYW4gY29tcGxpY2F0ZWQuCiAgICAuLi4gJycnLnNwbGl0bGluZXMoMSkKICAgID4+PiBsZW4odGV4dDEpCiAgICA0CiAgICA+Pj4gdGV4dDFbMF1bLTFdCiAgICAnXG4nCiAgICA+Pj4gdGV4dDIgPSAnJycgIDEuIEJlYXV0aWZ1bCBpcyBiZXR0ZXIgdGhhbiB1Z2x5LgogICAgLi4uICAgMy4gICBTaW1wbGUgaXMgYmV0dGVyIHRoYW4gY29tcGxleC4KICAgIC4uLiAgIDQuIENvbXBsaWNhdGVkIGlzIGJldHRlciB0aGFuIGNvbXBsZXguCiAgICAuLi4gICA1LiBGbGF0IGlzIGJldHRlciB0aGFuIG5lc3RlZC4KICAgIC4uLiAnJycuc3BsaXRsaW5lcygxKQoKICAgIE5leHQgd2UgaW5zdGFudGlhdGUgYSBEaWZmZXIgb2JqZWN0OgoKICAgID4+PiBkID0gRGlmZmVyKCkKCiAgICBOb3RlIHRoYXQgd2hlbiBpbnN0YW50aWF0aW5nIGEgRGlmZmVyIG9iamVjdCB3ZSBtYXkgcGFzcyBmdW5jdGlvbnMgdG8KICAgIGZpbHRlciBvdXQgbGluZSBhbmQgY2hhcmFjdGVyICdqdW5rJy4gIFNlZSBEaWZmZXIuX19pbml0X18gZm9yIGRldGFpbHMuCgogICAgRmluYWxseSwgd2UgY29tcGFyZSB0aGUgdHdvOgoKICAgID4+PiByZXN1bHQgPSBsaXN0KGQuY29tcGFyZSh0ZXh0MSwgdGV4dDIpKQoKICAgICdyZXN1bHQnIGlzIGEgbGlzdCBvZiBzdHJpbmdzLCBzbyBsZXQncyBwcmV0dHktcHJpbnQgaXQ6CgogICAgPj4+IGZyb20gcHByaW50IGltcG9ydCBwcHJpbnQgYXMgX3BwcmludAogICAgPj4+IF9wcHJpbnQocmVzdWx0KQogICAgWycgICAgMS4gQmVhdXRpZnVsIGlzIGJldHRlciB0aGFuIHVnbHkuXG4nLAogICAgICctICAgMi4gRXhwbGljaXQgaXMgYmV0dGVyIHRoYW4gaW1wbGljaXQuXG4nLAogICAgICctICAgMy4gU2ltcGxlIGlzIGJldHRlciB0aGFuIGNvbXBsZXguXG4nLAogICAgICcrICAgMy4gICBTaW1wbGUgaXMgYmV0dGVyIHRoYW4gY29tcGxleC5cbicsCiAgICAgJz8gICAgICsrXG4nLAogICAgICctICAgNC4gQ29tcGxleCBpcyBiZXR0ZXIgdGhhbiBjb21wbGljYXRlZC5cbicsCiAgICAgJz8gICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgLS0tLSBeXG4nLAogICAgICcrICAgNC4gQ29tcGxpY2F0ZWQgaXMgYmV0dGVyIHRoYW4gY29tcGxleC5cbicsCiAgICAgJz8gICAgICAgICAgICsrKysgXiAgICAgICAgICAgICAgICAgICAgICBeXG4nLAogICAgICcrICAgNS4gRmxhdCBpcyBiZXR0ZXIgdGhhbiBuZXN0ZWQuXG4nXQoKICAgIEFzIGEgc2luZ2xlIG11bHRpLWxpbmUgc3RyaW5nIGl0IGxvb2tzIGxpa2UgdGhpczoKCiAgICA+Pj4gcHJpbnQgJycuam9pbihyZXN1bHQpLAogICAgICAgIDEuIEJlYXV0aWZ1bCBpcyBiZXR0ZXIgdGhhbiB1Z2x5LgogICAgLSAgIDIuIEV4cGxpY2l0IGlzIGJldHRlciB0aGFuIGltcGxpY2l0LgogICAgLSAgIDMuIFNpbXBsZSBpcyBiZXR0ZXIgdGhhbiBjb21wbGV4LgogICAgKyAgIDMuICAgU2ltcGxlIGlzIGJldHRlciB0aGFuIGNvbXBsZXguCiAgICA/ICAgICArKwogICAgLSAgIDQuIENvbXBsZXggaXMgYmV0dGVyIHRoYW4gY29tcGxpY2F0ZWQuCiAgICA/ICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgIC0tLS0gXgogICAgKyAgIDQuIENvbXBsaWNhdGVkIGlzIGJldHRlciB0aGFuIGNvbXBsZXguCiAgICA/ICAgICAgICAgICArKysrIF4gICAgICAgICAgICAgICAgICAgICAgXgogICAgKyAgIDUuIEZsYXQgaXMgYmV0dGVyIHRoYW4gbmVzdGVkLgoKICAgIE1ldGhvZHM6CgogICAgX19pbml0X18obGluZWp1bms9Tm9uZSwgY2hhcmp1bms9Tm9uZSkKICAgICAgICBDb25zdHJ1Y3QgYSB0ZXh0IGRpZmZlcmVuY2VyLCB3aXRoIG9wdGlvbmFsIGZpbHRlcnMuCgogICAgY29tcGFyZShhLCBiKQogICAgICAgIENvbXBhcmUgdHdvIHNlcXVlbmNlcyBvZiBsaW5lczsgZ2VuZXJhdGUgdGhlIHJlc3VsdGluZyBkZWx0YS4KICAgIGMDAAAAAwAAAAIAAABDAAAAcxYAAAB8AQB8AABfAAB8AgB8AABfAQBkAQBTKAIAAABz5wMAAAogICAgICAgIENvbnN0cnVjdCBhIHRleHQgZGlmZmVyZW5jZXIsIHdpdGggb3B0aW9uYWwgZmlsdGVycy4KCiAgICAgICAgVGhlIHR3byBvcHRpb25hbCBrZXl3b3JkIHBhcmFtZXRlcnMgYXJlIGZvciBmaWx0ZXIgZnVuY3Rpb25zOgoKICAgICAgICAtIGBsaW5lanVua2A6IEEgZnVuY3Rpb24gdGhhdCBzaG91bGQgYWNjZXB0IGEgc2luZ2xlIHN0cmluZyBhcmd1bWVudCwKICAgICAgICAgIGFuZCByZXR1cm4gdHJ1ZSBpZmYgdGhlIHN0cmluZyBpcyBqdW5rLiBUaGUgbW9kdWxlLWxldmVsIGZ1bmN0aW9uCiAgICAgICAgICBgSVNfTElORV9KVU5LYCBtYXkgYmUgdXNlZCB0byBmaWx0ZXIgb3V0IGxpbmVzIHdpdGhvdXQgdmlzaWJsZQogICAgICAgICAgY2hhcmFjdGVycywgZXhjZXB0IGZvciBhdCBtb3N0IG9uZSBzcGxhdCAoJyMnKS4gIEl0IGlzIHJlY29tbWVuZGVkCiAgICAgICAgICB0byBsZWF2ZSBsaW5lanVuayBOb25lOyBhcyBvZiBQeXRob24gMi4zLCB0aGUgdW5kZXJseWluZwogICAgICAgICAgU2VxdWVuY2VNYXRjaGVyIGNsYXNzIGhhcyBncm93biBhbiBhZGFwdGl2ZSBub3Rpb24gb2YgIm5vaXNlIiBsaW5lcwogICAgICAgICAgdGhhdCdzIGJldHRlciB0aGFuIGFueSBzdGF0aWMgZGVmaW5pdGlvbiB0aGUgYXV0aG9yIGhhcyBldmVyIGJlZW4KICAgICAgICAgIGFibGUgdG8gY3JhZnQuCgogICAgICAgIC0gYGNoYXJqdW5rYDogQSBmdW5jdGlvbiB0aGF0IHNob3VsZCBhY2NlcHQgYSBzdHJpbmcgb2YgbGVuZ3RoIDEuIFRoZQogICAgICAgICAgbW9kdWxlLWxldmVsIGZ1bmN0aW9uIGBJU19DSEFSQUNURVJfSlVOS2AgbWF5IGJlIHVzZWQgdG8gZmlsdGVyIG91dAogICAgICAgICAgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIChhIGJsYW5rIG9yIHRhYjsgKipub3RlKio6IGJh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ICAgRm9yIGlucHV0cyB0aGF0IGRvIG5vdCBoYXZlIHRyYWlsaW5nIG5ld2xpbmVzLCBzZXQgdGhlIGxpbmV0ZXJtCiAgICBhcmd1bWVudCB0byAiIiBzbyB0aGF0IHRoZSBvdXRwdXQgd2lsbCBiZSB1bmlmb3JtbHkgbmV3bGluZSBmcmVlLgoKICAgIFRoZSB1bmlkaWZmIGZvcm1hdCBub3JtYWxseSBoYXMgYSBoZWFkZXIgZm9yIGZpbGVuYW1lcyBhbmQgbW9kaWZpY2F0aW9uCiAgICB0aW1lcy4gIEFueSBvciBhbGwgb2YgdGhlc2UgbWF5IGJlIHNwZWNpZmllZCB1c2luZyBzdHJpbmdzIGZvcgogICAgJ2Zyb21maWxlJywgJ3RvZmlsZScsICdmcm9tZmlsZWRhdGUnLCBhbmQgJ3RvZmlsZWRhdGUnLgogICAgVGhlIG1vZGlmaWNhdGlvbiB0aW1lcyBhcmUgbm9ybWFsbHkgZXhwcmVzc2VkIGluIHRoZSBJU08gODYwMSBmb3JtYXQuCgogICAgRXhhbXBsZToKCiAgICA+Pj4gZm9yIGxpbmUgaW4gdW5pZmllZF9kaWZmKCdvbmUgdHdvIHRocmVlIGZvdXInLnNwbGl0KCksCiAgICAuLi4gICAgICAgICAgICAgJ3plcm8gb25lIHRyZWUgZm91cicuc3BsaXQoKSwgJ09yaWdpbmFsJywgJ0N1cnJlbnQnLAogICAgLi4uICAgICAgICAgICAgICcyMDA1LTAxLTI2IDIzOjMwOjUwJywgJzIwMTAtMDQtMDIgMTA6MjA6NTInLAogICAgLi4uICAgICAgICAgICAgIGxpbmV0ZXJtPScnKToKICAgIC4uLiAgICAgcHJpbnQgbGluZSAgICAgICAgICAgICAgICAgICMgZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCiAgICAtLS0gT3JpZ2luYWwgICAgICAgIDIwMDUtMDEtMjYgMjM6MzA6NTAKICAgICsrKyBDdXJyZW50ICAgICAgICAgMjAxMC0wNC0wMiAxMDoyMDo1MgogICAgQEAgLTEsNCArMSw0IEBACiAgICAremVybwogICAgIG9uZQogICAgLXR3bwogICAgLXRocmVlCiAgICArdHJlZQogICAg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IC0tLSkgYXJlCiAgICBjcmVhdGVkIHdpdGggYSB0cmFpbGluZyBuZXdsaW5lLiAgVGhpcyBpcyBoZWxwZnVsIHNvIHRoYXQgaW5wdXRzCiAgICBjcmVhdGVkIGZyb20gZmlsZS5yZWFkbGluZXMoKSByZXN1bHQgaW4gZGlmZnMgdGhhdCBhcmUgc3VpdGFibGUgZm9yCiAgICBmaWxlLndyaXRlbGluZXMoKSBzaW5jZSBib3RoIHRoZSBpbnB1dHMgYW5kIG91dHB1dHMgaGF2ZSB0cmFpbGluZwogICAgbmV3bGluZXMuCgogICAgRm9yIGlucHV0cyB0aGF0IGRvIG5vdCBoYXZlIHRyYWlsaW5nIG5ld2xpbmVzLCBzZXQgdGhlIGxpbmV0ZXJtCiAgICBhcmd1bWVudCB0byAiIiBzbyB0aGF0IHRoZSBvdXRwdXQgd2lsbCBiZSB1bmlmb3JtbHkgbmV3bGluZSBmcmVlLgoKICAgIFRoZSBjb250ZXh0IGRpZmYgZm9ybWF0IG5vcm1hbGx5IGhhcyBhIGhlYWRlciBmb3IgZmlsZW5hbWVzIGFuZAogICAgbW9kaWZpY2F0aW9uIHRpbWVzLiAgQW55IG9yIGFsbCBvZiB0aGVzZSBtYXkgYmUgc3BlY2lmaWVkIHVzaW5nCiAgICBzdHJpbmdzIGZvciAnZnJvbWZpbGUnLCAndG9maWxlJywgJ2Zyb21maWxlZGF0ZScsIGFuZCAndG9maWxlZGF0ZScuCiAgICBUaGUgbW9kaWZpY2F0aW9uIHRpbWVzIGFyZSBub3JtYWxseSBleHByZXNzZWQgaW4gdGhlIElTTyA4NjAxIGZvcm1hdC4KICAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBzdHJpbmdzIGRlZmF1bHQgdG8gYmxhbmtzLgoKICAgIEV4YW1wbGU6CgogICAgPj4+IHByaW50ICcnLmpvaW4oY29udGV4dF9kaWZmKCdvbmVcbnR3b1xudGhyZWVcbmZvdXJcbicuc3BsaXRsaW5lcygxKSwKICAgIC4uLiAgICAgICAnemVyb1xub25lXG50cmVlXG5mb3VyXG4nLnNwbGl0bGluZXMoMSksICdPcmlnaW5hbCcsICdDdXJyZW50JykpLAogICAgKioqIE9yaWdpbmFsCiAg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AGQIADd9CQBxzwBXfAkAfAIAawQAcjUBZAkAVgF8AgB9CABuDAB8CQB9CABkBAB9CQB4MQB8CABydAF8CQB8AgAWfQ4AfAkAZAgAN30JAHwKAHwOABlWAXwIAGQIADh9CABxRAFXfAIAZAgAGH0IAHhKAHwIAHLLAXwHAGoFAIMAAFwDAH0MAH0NAH0LAHwLAHKwAXwCAGQIABh9CABuCgB8CABkCAA4fQgAfAwAfA0AfAsAZgMAVgFxggFXcawAV2QCAFMoCgAAAHPgBQAAUmV0dXJucyBnZW5lcmF0b3IgeWllbGRpbmcgbWFya2VkIHVwIGZyb20vdG8gc2lkZSBieSBzaWRlIGRpZmZlcmVuY2VzLgoKICAgIEFyZ3VtZW50czoKICAgIGZyb21saW5lcyAtLSBsaXN0IG9mIHRleHQgbGluZXMgdG8gY29tcGFyZWQgdG8gdG9saW5lcwogICAgdG9saW5lcyAtLSBsaXN0IG9mIHRleHQgbGluZXMgdG8gYmUgY29tcGFyZWQgdG8gZnJvbWxpbmVzCiAgICBjb250ZXh0IC0tIG51bWJlciBvZiBjb250ZXh0IGxpbmVzIHRvIGRpc3BsYXkgb24gZWFjaCBzaWRlIG9mIGRpZmZlcmVuY2UsCiAgICAgICAgICAgICAgIGlmIE5vbmUsIGFsbCBmcm9tL3RvIHRleHQgbGluZXMgd2lsbCBiZSBnZW5lcmF0ZWQuCiAgICBsaW5lanVuayAtLSBwYXNzZWQgb24gdG8gbmRpZmYgKHNlZSBuZGlmZiBkb2N1bWVudGF0aW9uKQogICAgY2hhcmp1bmsgLS0gcGFzc2VkIG9uIHRvIG5kaWZmIChzZWUgbmRpZmYgZG9jdW1lbnRhdGlvbikKCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gaW50ZXJhdG9yIHdoaWNoIHJldHVybnMgYSB0dXBsZToKICAgIChmcm9tIGxpbmUgdHVwbGUsIHRvIGxpbmUgdHVwbGUsIGJvb2xlYW4gZmxhZykKCiAgICBmcm9tL3RvIGxpbmUgdHVwbGUgLS0gKGxpbmUgbnVtLCBsaW5lIHRleHQpCiAgICAgICAgbGluZSBudW0gLS0gaW50ZWdlciBvciBOb25lICh0byBpbmRpY2F0ZSBhIGNvbnRleHQgc2VwYXJhdGlvbikKICAgICAgICBsaW5lIHRleHQgLS0gb3JpZ2luYWwgbGluZSB0ZXh0IHdpdGggZm9sbG93aW5nIG1hcmtlcnMgaW5zZXJ0ZWQ6CiAgICAgICAgICAgICdcMCsnIC0tIG1hcmtzIHN0YXJ0IG9mIGFkZGVkIHRleHQKICAgICAgICAgICAgJ1wwLScgLS0gbWFya3Mgc3RhcnQgb2YgZGVsZXRlZCB0ZXh0CiAgICAgICAgICAgICdcMF4nIC0tIG1hcmtzIHN0YXJ0IG9mIGNoYW5nZWQgdGV4dAogICAgICAgICAgICAnXDEnIC0tIG1hcmtzIGVuZCBvZiBhZGRlZC9kZWxldGVkL2NoYW5nZWQgdGV4dAoKICAgIGJvb2xlYW4gZmxhZyAtLSBOb25lIGluZGljYXRlcyBjb250ZXh0IHNlcGFyYXRpb24sIFRydWUgaW5kaWNhdGVzCiAgICAgICAgZWl0aGVyICJmcm9tIiBvciAidG8iIGxpbmUgY29udGFpbnMgYSBjaGFuZ2UsIG90aGVyd2lzZSBGYWxzZS4KCiAgICBUaGlzIGZ1bmN0aW9uL2l0ZXJhdG9yIHdhcyBvcmlnaW5hbGx5IGRldmVsb3BlZCB0byBnZW5lcmF0ZSBzaWRlIGJ5IHNpZGUKICAgIGZpbGUgZGlmZmVyZW5jZSBmb3IgbWFraW5nIEhUTUwgcGFnZXMgKHNlZSBIdG1sRGlmZiBjbGFzcyBmb3IgZXhhbXBsZQogICAgdXNhZ2UpLgoKICAgIE5vdGUsIHRoaXMgZnVuY3Rpb24gdXRpbGl6ZXMgdGhlIG5kaWZmIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBzaWRlIGJ5CiAgICBzaWRlIGRpZmZlcmVuY2UgbWFya3VwLiAgT3B0aW9uYWwgbmRpZmYgYXJndW1lbnRzIG1heSBiZSBwYXNzZWQgdG8gdGhpcwogICAgZnVuY3Rpb24gYW5kIHRoZXkgaW4gdHVybiB3aWxsIGJlIHBhc3NlZCB0byBuZGlmZi4KICAgIGn/////TnMNAAAAKFwrK3xcLSt8XF4rKWkAAAAAYwQAAAALAAAABQAAABMAAABzKQEAAHwDAHwCAGMCABlkAQA3Azx8AQBkBgBrCAByNwB8AwB8AgAZfAAA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fAEAgwEAZAEAawIAc0YAdAEAfAIAgwEAZAEAawIAcqIAfAAAagIAgwAAXAMAfQMAfQQAfQUAfAMAZAIAawkAcn0AfAEAagQAfAMAfAUAZgIAgwEAAW4AAHwEAGQCAGsJAHIiAHwCAGoEAHwEAHwFAGYCAIMBAAFxIgBxIgBXfAEAagUAZAEAgwEAXAIAfQMAfQYAfAIAagUAZAEAgwEAXAIAfQQAfQcAfAMAfAQAfAYAcNwAfAcAZgMAVgFxGQBXZAIAUygDAAAAc3QCAABZaWVsZHMgZnJvbS90byBsaW5lcyBvZiB0ZXh0IHdpdGggYSBjaGFuZ2UgaW5kaWNhdGlvbi4KCiAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBhbiBpdGVyYXRvci4gIEl0IGl0c2VsZiBwdWxscyBsaW5lcyBmcm9tIHRoZSBsaW5lCiAgICAgICAgaXRlcmF0b3IuICBJdHMgZGlmZmVyZW5jZSBmcm9tIHRoYXQgaXRlcmF0b3IgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uCiAgICAgICAgYWx3YXlzIHlpZWxkcyBhIHBhaXIgb2YgZnJvbS90byB0ZXh0IGxpbmVzICh3aXRoIHRoZSBjaGFuZ2UKICAgICAgICBpbmRpY2F0aW9uKS4gIElmIG5lY2Vzc2FyeSBpdCB3aWxsIGNvbGxlY3Qgc2luZ2xlIGZyb20vdG8gbGluZXMKICAgICAgICB1bnRpbCBpdCBoYXMgYSBtYXRjaGluZyBwYWlyIGZyb20vdG8gcGFpciB0byB5aWVsZC4KCiAgICAgICAgTm90ZSwgdGhpcyBmdW5jdGlvbiBpcyBwdXJwb3NlZnVsbHkgbm90IGRlZmluZWQgYXQgdGhlIG1vZHVsZSBzY29wZSBzbwogICAgICAgIHRoYXQgZGF0YSBpdCBuZWVkcyBmcm9tIGl0cyBwYXJlbnQgZnVuY3Rpb24gKHdpdGhpbiB3aG9zZSBjb250ZXh0IGl0CiAgICAgICAgaXMgZGVmaW5lZCkgZG9lcyBub3QgbmVlZCB0byBiZSBvZiBtb2R1bGUgc2NvcGUuCiAgICAgICAgaQAAAABOKAYAAABScQAAAFInAAAAUs0AAABSEgAAAFIiAAAAUkUAAAAoCAAAAHQNAAAAbGluZV9pdGVyYXRvcnQJAAAAZnJvbWxpbmVzdAcAAAB0b2xpbmVzUtMAAABS1AAAAHQKAAAAZm91bmRfZGlmZnQIAAAAZnJvbURpZmZ0BwAAAHRvX2RpZmYoAQAAAFLWAAAAKAAAAABzTwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2RpZmZsaWIucHl0EwAAAF9saW5lX3BhaXJfaXRlcmF0b3IFBgAAcxgAAAAADQkBDQEJAicBFQEMARYBDAEaAhUBFQFpAQAAACgDAAAATk5OKAcAAAB0AgAAAHJldAcAAABjb21waWxlUgEAAABSEgAAAFJxAAAAUs0AAABSqAAAACgPAAAAUtgAAABS2QAAAHQHAAAAY29udGV4dFJ+AAAAUn8AAABS3gAAAFLdAAAAdBIAAABsaW5lX3BhaXJfaXRlcmF0b3J0DgAAAGxpbmVzX3RvX3dyaXRldAUAAABpbmRleHQMAAAAY29udGV4dExpbmVzUtoAAABS0wAAAFLUAAAAUiwAAAAoAAAAACgEAAAAUtYAAABSywAAAFLKAAAAUtUAAABzTwAAAC90bXAvbmRrLVVzZXIvYnVpbGRob3N0L2luc3RhbGwvcHJlYnVpbHQvZGFyd2luLXg4Nl82NC9saWIvcHl0aG9uMi43L2RpZmZsaWIucHl0BgAAAF9tZGlmZkgFAABzSgAAAAAiDAMPAxUCGDgSWw8eCQEMAQkBEgQKAQYBCQQUAQYBDwEVAQoBEwEOAwwBBQEJAgYBBgEJAQoBCgEJAQ4CCgEJARUCBgENAgoBc20BAAAKPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KCjxodG1sPgoKPGhlYWQ+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiCiAgICAgICAgICBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIgLz4KICAgIDx0aXRsZT48L3RpdGxlPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4lKHN0eWxlcylzCiAgICA8L3N0eWxlPgo8L2hlYWQ+Cgo8Ym9keT4KICAgICUodGFibGUpcyUobGVnZW5kKXMKPC9ib2R5PgoKPC9odG1sPnNIAQAACiAgICAgICAgdGFibGUuZGlmZiB7Zm9udC1mYW1pbHk6Q291cmllcjsgYm9yZGVyOm1lZGl1bTt9CiAgICAgICAgLmRpZmZfaGVhZGVyIHtiYWNrZ3JvdW5kLWNvbG9yOiNlMGUwZTB9CiAgICAgICAgdGQuZGlmZl9oZWFkZXIge3RleHQtYWxpZ246cmlnaHR9CiAgICAgICAgLmRpZmZfbmV4dCB7YmFja2dyb3VuZC1jb2xvcjojYzBjMGMwfQogICAgICAgIC5kaWZmX2FkZCB7YmFja2dyb3VuZC1jb2xvcjojYWFmZmFhfQogICAgICAgIC5kaWZmX2NoZyB7YmFja2dyb3VuZC1jb2xvcjojZmZmZjc3fQogICAgICAgIC5kaWZmX3N1YiB7YmFja2dyb3VuZC1jb2xvcjojZmZhYWFhfXNaAQAACiAgICA8dGFibGUgY2xhc3M9ImRpZmYiIGlkPSJkaWZmbGliX2NoZ18lKHByZWZpeClzX3RvcCIKICAgICAgICAgICBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiIHJ1bGVzPSJncm91cHMiID4KICAgICAgICA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+IDxjb2xncm91cD48L2NvbGdyb3VwPgogICAgICAgIDxjb2xncm91cD48L2NvbGdyb3VwPiA8Y29sZ3JvdXA+PC9jb2xncm91cD4gPGNvbGdyb3VwPjwvY29sZ3JvdXA+CiAgICAgICAgJShoZWFkZXJfcm93KXMKICAgICAgICA8dGJvZHk+CiUoZGF0YV9yb3dzKXMgICAgICAgIDwvdGJvZHk+CiAgICA8L3RhYmxlPnP1AgAACiAgICA8dGFibGUgY2xhc3M9ImRpZmYiIHN1bW1hcnk9IkxlZ2VuZHMiPgogICAgICAgIDx0cj4gPHRoIGNvbHNwYW49IjIiPiBMZWdlbmRzIDwvdGg+IDwvdHI+CiAgICAgICAgPHRyPiA8dGQ+IDx0YWJsZSBib3JkZXI9IiIgc3VtbWFyeT0iQ29sb3JzIj4KICAgICAgICAgICAgICAgICAgICAgIDx0cj48dGg+IENvbG9ycyA8L3RoPiA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9hZGQiPiZuYnNwO0FkZGVkJm5ic3A7PC90ZD48L3RyPgogICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9jaGciPkNoYW5nZWQ8L3RkPiA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZCBjbGFzcz0iZGlmZl9zdWIiPkRlbGV0ZWQ8L3RkPiA8L3RyPgogICAgICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ+CiAgICAgICAgICAgICA8dGQ+IDx0YWJsZSBib3JkZXI9IiIgc3VtbWFyeT0iTGlua3MiPgogICAgICAgICAgICAgICAgICAgICAgPHRyPjx0aCBjb2xzcGFuPSIyIj4gTGlua3MgPC90aD4gPC90cj4KICAgICAgICAgICAgICAgICAgICAgIDx0cj48dGQ+KGYpaXJzdCBjaGFuZ2U8L3RkPiA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgPHRyPjx0ZD4obilleHQgY2hhbmdlPC90ZD4gPC90cj4KICAgICAgICAgICAgICAgICAgICAgIDx0cj48dGQ+KHQpb3A8L3RkPiA8L3RyPgogICAgICAgICAgICAgICAgICA8L3RhYmxlPjwvdGQ+IDwvdHI+CiAgICA8L3RhYmxlPmMAAAAAAAAAAAUAAABCAAAAc6oAAABlAABaAQBkAABaAgBlAwBaAwBlBABaBABlBQBaBQBlBgBaBgBkAQBaBwBkAgBkDwBkDwBlCQBkAwCEBABaCgBkBABkBABlCwBkBQBkBgCEBABaDABkBwCEAABaDQBkCACEAABaDgBkCQCEAABaDwBkCgCEAABaEABkCwCEAABaEQBkDACEAABaEgBkDQCEAABaEwBkBABkBABlCwBkBQBkDgCEBABaFABSUygQAAAAc3sCAABGb3IgcHJvZHVjaW5nIEhUTUwgc2lkZSBieSBzaWRlIGNvbXBhcmlzb24gd2l0aCBjaGFuZ2UgaGlnaGxpZ2h0cy4KCiAgICBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhbiBIVE1MIHRhYmxlIChvciBhIGNvbXBsZXRlIEhUTUwgZmlsZQogICAgY29udGFpbmluZyB0aGUgdGFibGUpIHNob3dpbmcgYSBzaWRlIGJ5IHNpZGUsIGxpbmUgYnkgbGluZSBjb21wYXJpc29uCiAgICBvZiB0ZXh0IHdpdGggaW50ZXItbGluZSBhbmQgaW50cmEtbGluZSBjaGFuZ2UgaGlnaGxpZ2h0cy4gIFRoZSB0YWJsZSBjYW4KICAgIGJlIGdlbmVyYXRlZCBpbiBlaXRoZXIgZnVsbCBvciBjb250ZXh0dWFsIGRpZmZlcmVuY2UgbW9kZS4KCiAgICBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHByb3ZpZGVkIGZvciBIVE1MIGdlbmVyYXRpb246CgogICAgbWFrZV90YWJsZSAtLSBnZW5lcmF0ZXMgSFRNTCBmb3IgYSBzaW5nbGUgc2lkZSBieSBzaWRlIHRhYmxlCiAgICBtYWtlX2ZpbGUgLS0gZ2VuZXJhdGVzIGNvbXBsZXRlIEhUTUwgZmlsZSB3aXRoIGEgc2luZ2xlIHNpZGUgYnkgc2lkZSB0YWJsZQoKICAgIFNlZSB0b29scy9zY3JpcHRzL2RpZmYucHkgZm9yIGFuIGV4YW1wbGUgdXNhZ2Ugb2YgdGhpcyBjbGFzcy4KICAgIGkAAAAAaQgAAABjBQAAAAUAAAACAAAAQwAAAHMoAAAAfAEAfAAAXwAAfAIAfAAAXwEAfAMAfAAAXwIAfAQAfAAAXwMAZAEAUygCAAAAc9sBAABIdG1sRGlmZiBpbnN0YW5jZSBpbml0aWFsaXplcgoKICAgICAgICBBcmd1bWVudHM6CiAgICAgICAgdGFic2l6ZSAtLSB0YWIgc3RvcCBzcGFjaW5nLCBkZWZhdWx0cyB0byA4LgogICAgICAgIHdyYXBjb2x1bW4gLS0gY29sdW1uIG51bWJlciB3aGVyZSBsaW5lcyBhcmUgYnJva2VuIGFuZCB3cmFwcGVkLAogICAgICAgICAgICBkZWZhdWx0cyB0byBOb25lIHdoZXJlIGxpbmVzIGFyZSBub3Qgd3JhcHBlZC4KICAgICAgICBsaW5lanVuayxjaGFyanVuayAtLSBrZXl3b3JkIGFyZ3VtZW50cyBwYXNzZWQgaW50byBuZGlmZigpICh1c2VkIHRvIGJ5CiAgICAgICAgICAgIEh0bWxEaWZmKCkgdG8gZ2VuZXJhdGUgdGhlIHNpZGUgYnkgc2lkZSBIVE1MIGRpZmZlcmVuY2VzKS4gIFNlZQogICAgICAgICAgICBuZGlmZigpIGRvY3VtZW50YXRpb24gZm9yIGFyZ3VtZW50IGRlZmF1bHQgdmFsdWVzIGFuZCBkZXNjcmlwdGlvbnMuCiAgICAgICAgTigEAAAAdAgAAABfdGFic2l6ZXQLAAAAX3dyYXBjb2x1bW50CQAAAF9saW5lanVua3QJAAAAX2NoYXJqdW5rKAUAAABSFwAAAHQHAAAAdGFic2l6ZXQKAAAAd3JhcGNvbHVtblJ+AAAAUn8AAAAoAAAAACgAAAAAc08AAAAvdG1wL25kay1Vc2VyL2J1aWxkaG9zdC9pbnN0YWxsL3ByZWJ1aWx0L2Rhcndpbi14ODZfNjQvbGliL3B5dGhvbjIuNy9kaWZmbGliLnB5UhgAAACeBgAAcwgAAAAADAkBCQEJAVIQAAAAaQUAAABjBwAAAAcAAAAQAAAAQwAAAHNEAAAAfAAAagAAdAEAZAEAfAAAagIAZAIAfAAAagMAZAMAfAAAagQAfAEAfAIAfAMAfAQAZAQAfAUAZAUAfAYAgwQCgwADFlMoBgAAAHPtAgAAUmV0dXJucyBIVE1MIGZpbGUgb2Ygc2lkZSBieSBzaWRlIGNvbXBhcmlzb24gd2l0aCBjaGFuZ2UgaGlnaGxpZ2h0cwoKICAgICAgICBBcmd1bWVudHM6CiAgICAgICAgZnJvbWxpbmVzIC0tIGxpc3Qgb2YgImZyb20iIGxpbmVzCiAgICAgICAgdG9saW5lcyAtLSBsaXN0IG9mICJ0byIgbGluZXMKICAgICAgICBmcm9tZGVzYyAtLSAiZnJvbSIgZmlsZSBjb2x1bW4gaGVhZGVyIHN0cmluZwogICAgICAgIHRvZGVzYyAtLSAidG8iIGZpbGUgY29sdW1uIGhlYWRlciBzdHJpbmcKICAgICAgICBjb250ZXh0IC0tIHNldCB0byBUcnVlIGZvciBjb250ZXh0dWFsIGRpZmZlcmVuY2VzIChkZWZhdWx0cyB0byBGYWxzZQogICAgICAgICAgICB3aGljaCBzaG93cyBmdWxsIGRpZmZlcmVuY2VzKS4KICAgICAgICBudW1saW5lcyAtLSBudW1iZXIgb2YgY29udGV4dCBsaW5lcy4gIFdoZW4gY29udGV4dCBpcyBzZXQgVHJ1ZSwKICAgICAgICAgICAgY29udHJvbHMgbnVtYmVyIG9mIGxpbmVzIGRpc3BsYXllZCBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjaGFuZ2UuCiAgICAgICAgICAgIFdoZW4gY29udGV4dCBpcyBGYWxzZSwgY29udHJvbHMgdGhlIG51bWJlciBvZiBsaW5lcyB0byBwbGFjZQogICAgICAgICAgICB0aGUgIm5leHQiIGxpbmsgYW5jaG9ycyBiZWZvcmUgdGhlIG5leHQgY2hhbmdlIChzbyBjbGljayBvZgogICAgICAgICAgICAibmV4dCIgbGluayBqdW1wcyB0byBqdXN0IGJlZm9yZSB0aGUgY2hhbmdlKS4KICAgICAgICB0BgAAAHN0eWxlc3QGAAAAbGVnZW5kdAUAAAB0YWJsZVLgAAAAdAgAAABudW1saW5lcygFAAAAdA4AAABfZmlsZV90ZW1wbGF0ZVK3AAAAdAcAAABfc3R5bGVzdAcAAABfbGVnZW5kdAoAAABtYWtlX3RhYmxlKAcAAABSFwAAAFLYAAAAUtkAAAB0CAAAAGZyb21kZXNjdAYAAAB0b2Rlc2NS4AAAAFLvAAAAKAAAAAAoAAAAAHNPAAAAL3RtcC9uZGstVXNlci9idWlsZGhvc3QvaW5zdGFsbC9wcmVidWlsdC9kYXJ3aW4teDg2XzY0L2xpYi9weXRob24yLjcvZGlmZmxpYi5weXQJAAAAbWFrZV9maWxlrwYAAHMKAAAAABIMAQkBCQEVAWMDAAAABQAAAAQAAAADAAAAc1cAAACHAABmAQBkAQCGAAB9AwBnAAB8AQBEXRIAfQQAfAMAfAQAgwEAXgIAcRYAfQEAZwAAfAIARF0SAH0EAHwDAHwEAIMBAF4CAHE1AH0CAHwBAHwCAGYCAFMoAgAAAHMAAgAAUmV0dXJucyBmcm9tL3RvIGxpbmUgbGlzdHMgd2l0aCB0YWJzIGV4cGFuZGVkIGFuZCBu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