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bnMpLgoKICAgIElmICdwbGF0X3NwZWNpZmljJyBpcyB0cnVlLCByZXR1cm4gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nCiAgICBwbGF0Zm9ybS1zcGVjaWZpYyBtb2R1bGVzLCBpLmUuIGFueSBtb2R1bGUgZnJvbSBhIG5vbi1wdXJlLVB5dGhvbgogICAgbW9kdWxlIGRpc3RyaWJ1dGlvbjsgb3RoZXJ3aXNlLCByZXR1cm4gdGhlIHBsYXRmb3JtLXNoYXJlZCBsaWJyYXJ5CiAgICBkaXJlY3RvcnkuICBJZiAnc3RhbmRhcmRfbGliJyBpcyB0cnVlLCByZXR1cm4gdGhlIGRpcmVjdG9yeQogICAgY29udGFpbmluZyBzdGFuZGFyZCBQeXRob24gbGlicmFyeSBtb2R1bGVzOyBvdGhlcndpc2UsIHJldHVybiB0aGUKICAgIGRpcmVjdG9yeSBmb3Igc2l0ZS1zcGVjaWZpYyBtb2R1bGVzLgoKICAgIElmICdwcmVmaXgnIGlzIHN1cHBsaWVkLCB1c2UgaXQgaW5zdGVhZCBvZiBzeXMuYmFzZV9wcmVmaXggb3IKICAgIHN5cy5iYXNlX2V4ZWNfcHJlZml4IC0tIGkuZS4sIGlnbm9yZSAncGxhdF9zcGVjaWZpYycuCiAgICByIgAAAE56CmxpYi1weXRob25yAQAAAHI6AAAAciEAAADaCnBsYXRsaWJkaXLaA2xpYnIoAAAAcikAAAByEgAAANoDTGliej9JIGRvbid0IGtub3cgd2hlcmUgUHl0aG9uIGluc3RhbGxzIGl0cyBsaWJyYXJ5IG9uIHBsYXRmb3JtICclcycpEHIuAAAAch4AAAByHwAAAHIWAAAAcggAAAByCQAAAHILAAAA2gd2ZXJzaW9ucisAAAByLAAAANoLRVhFQ19QUkVGSVhyLQAAANoHZ2V0YXR0cnIgAAAAcj4AAAByAwAAACkHcjQAAAByOwAAAHI1AAAAcj0AAADaBmxpYmRpcnI3AAAAcjwAAAByDgAAAHIOAAAAcg8AAADaDmdldF9weXRob25fbGlijAAAAHM6AAAADg8IAgQBBAEWAQ4BBAIIAgQBDgEMAgoCCAEOAwQDDAEKAQgBBP8OAgoBBAEOARACAgICAQQBAv8E/3JGAAAAYwEAAAAAAAAA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