gASVAgABAAAAAACMDmRvY3V0aWxzLm5vZGVzlIwIZG9jdW1lbnSUk5QpgZR9lCiMCXJhd3NvdXJjZZSMAJSMCGNoaWxkcmVulF2UKGgAjAZ0YXJnZXSUk5QpgZR9lChoBWgGaAddlIwKYXR0cmlidXRlc5R9lCiMA2lkc5RdlIw2bW9kdWxlLWV0aGVyZXVtLnNwdXJpb3VzX2RyYWdvbi52bS5pbnN0cnVjdGlvbnMuc3lzdGVtlGGMB2NsYXNzZXOUXZSMBW5hbWVzlF2UjAhkdXBuYW1lc5RdlIwIYmFja3JlZnOUXZSMBWlzbW9klIh1jAd0YWduYW1llGgJjAZzb3VyY2WUjHcvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL3NwdXJpb3VzX2RyYWdvbi92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdJSMBGxpbmWUSwGMBnBhcmVudJRoA4wJX2RvY3VtZW50lGgDdWKMD3NwaGlueC5hZGRub2Rlc5SMBWluZGV4lJOUKYGUfZQoaAVoBmgHXZRoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAdlbnRyaWVzlF2UKIwEcGFpcpSMN21vZHVsZTsgZXRoZXJldW0uc3B1cmlvdXNfZHJhZ29uLnZtLmluc3RydWN0aW9ucy5zeXN0ZW2UaBJoBk50lGF1aBxoI2gdaB5oH0sCaCBoA2ghaAN1YmgAjAdzZWN0aW9ulJOUKYGUfZQoaAVoBmgHXZQoaACMBXRpdGxllJOUKYGUfZQoaAWMMkV0aGVyZXVtIFZpcnR1YWwgTWFjaGluZSAoRVZNKSBTeXN0ZW0gSW5zdHJ1Y3Rpb25zlGgHXZRoAIwEVGV4dJSTlIwyRXRoZXJldW0gVmlydHVhbCBNYWNoaW5lIChFVk0pIFN5c3RlbSBJbnN0cnVjdGlvbnOUhZSBlH2UKGgFaAZoIGg6aCFoA2gdjFwvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzLy50b3gvZG9jcy9zdGFnZTBfb3V0L2F1dG9hcGkvID0+IGRvYy9kaWZmc5RoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGg4aB1oHmgfSwRoIGg1aCFoA3ViaACMBXRvcGljlJOUKYGUfZQoaAVoBmgHXZQoaDkpgZR9lChoBYwRVGFibGUgb2YgQ29udGVudHOUaAddlGg/jBFUYWJsZSBvZiBDb250ZW50c5SFlIGUfZQoaAVoBmggaFBoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaDhoHWgeaB9LCGggaE1oIWgDdWJoAIwLYnVsbGV0X2xpc3SUk5QpgZR9lChoBWgGaAddlChoAIwJbGlzdF9pdGVtlJOUKYGUfZQoaAVoBmgHXZRoAIwJcGFyYWdyYXBolJOUKYGUfZQoaAVoBmgHXZRoAIwJcmVmZXJlbmNllJOUKYGUfZQoaAVoBmgHXZRoP4wMSW50cm9kdWN0aW9ulIWUgZR9lChoBWgGaCBob2ghaANoHWhEaB9LAHViYWgOfZQoaBBdlIwDaWQxlGFoE12UaBVdlGgXXZRoGV2UjAVyZWZpZJSMDGludHJvZHVjdGlvbpR1aBxobWgdTmgfTmggaGp1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHU5oH05oIGhldWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhjaB1oRGgfSwBoIGhgaCFoA3ViaGQpgZR9lChoBWgGaAddlChoaSmBlH2UKGgFaAZoB12UaG4pgZR9lChoBWgGaAddlGg/jA9Nb2R1bGUgQ29udGVudHOUhZSBlH2UKGgFaAZoIGiRaCFoA2gdaERoH0sAdWJhaA59lChoEF2UjANpZDKUYWgTXZRoFV2UaBddlGgZXZSMBXJlZmlklIwPbW9kdWxlLWNvbnRlbnRzlHVoHGhtaB1OaB9OaCBojnViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdTmgfTmggaIt1YmhfKYGUfZQoaAVoBmgHXZRoZCmBlH2UKGgFaAZoB12UaGkpgZR9lChoBWgGaAddlGhuKYGUfZQoaAVoBmgHXZRoP4wJRnVuY3Rpb25zlIWUgZR9lChoBWgGaCBosGghaANoHWhEaB9LAHViYWgOfZQoaBBdlIwDaWQzlGFoE12UaBVdlGgXXZRoGV2UjAVyZWZpZJSMCWZ1bmN0aW9uc5R1aBxobWgdTmgfTmggaK11YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHU5oH05oIGiqdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhjaB1OaB9OaCBop3ViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoXmgdTmgfTmggaIt1YmVoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGNoHWhEaB9LAGggaGBoIWgDdWJoZCmBlH2UKGgFaAZoB12UKGhpKYGUfZQoaAVoBmgHXZRobimBlH2UKGgFaAZoB12UaD+MDk1vZHVsZSBEZXRhaWxzlIWUgZR9lChoBWgGaCBo3mghaANoHWhEaB9LAHViYWgOfZQoaBBdlIwDaWQ0lGFoE12UaBVdlGgXXZRoGV2UjAVyZWZpZJSMDm1vZHVsZS1kZXRhaWxzlHVoHGhtaB1OaB9OaCBo23ViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdaERoH0sAaCBo2GghaAN1YmhfKYGUfZQoaAVoBmgHXZQoaGQpgZR9lChoBWgGaAddlGhpKYGUfZQoaAVoBmgHXZRobimBlH2UKGgFaAZoB12UaD+MBmNyZWF0ZZSFlIGUfZQoaAVoBmggaP1oIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZSMA2lkNZRhaBNdlGgVXZRoF12UaBldlIwFcmVmaWSUjAZjcmVhdGWUdWgcaG1oHU5oH05oIGj6dWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB1OaB9OaCBo93ViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoY2gdaERoH0sAaCBo9GghaAN1YmhkKYGUfZQoaAVoBmgHXZRoaSmBlH2UKGgFaAZoB12UaG4pgZR9lChoBWgGaAddlGg/jAZyZXR1cm6UhZSBlH2UKGgFaAZoIGofAQAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UjANpZDaUYWgTXZRoFV2UaBddlGgZXZSMBXJlZmlklIwGcmV0dXJulHVoHGhtaB1OaB9OaCBqHAEAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdTmgfTmggahkBAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGNoHWhEaB9LAGggaPRoIWgDdWJoZCmBlH2UKGgFaAZoB12UaGkpgZR9lChoBWgGaAddlGhuKYGUfZQoaAVoBmgHXZRoP4wMZ2VuZXJpY19jYWxslIWUgZR9lChoBWgGaCBqQQEAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlIwDaWQ3lGFoE12UaBVdlGgXXZRoGV2UjAVyZWZpZJSMDGdlbmVyaWMtY2FsbJR1aBxobWgdTmgfTmggaj4BAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHU5oH05oIGo7AQAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhjaB1oRGgfSwBoIGj0aCFoA3ViaGQpgZR9lChoBWgGaAddlGhpKYGUfZQoaAVoBmgHXZRobimBlH2UKGgFaAZoB12UaD+MBGNhbGyUhZSBlH2UKGgFaAZoIGpjAQAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UjANpZDiUYWgTXZRoFV2UaBddlGgZXZSMBXJlZmlklIwEY2FsbJR1aBxobWgdTmgfTmggamABAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHU5oH05oIGpdAQAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhjaB1oRGgfSwBoIGj0aCFoA3ViaGQpgZR9lChoBWgGaAddlGhpKYGUfZQoaAVoBmgHXZRobimBlH2UKGgFaAZoB12UaD+MCGNhbGxjb2RllIWUgZR9lChoBWgGaCBqhQEAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlIwDaWQ5lGFoE12UaBVdlGgXXZRoGV2UjAVyZWZpZJSMCGNhbGxjb2RllHVoHGhtaB1OaB9OaCBqggEAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdTmgfTmggan8BAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGNoHWhEaB9LAGggaPRoIWgDdWJoZCmBlH2UKGgFaAZoB12UaGkpgZR9lChoBWgGaAddlGhuKYGUfZQoaAVoBmgHXZRoP4wMc2VsZmRlc3RydWN0lIWUgZR9lChoBWgGaCBqpwEAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlIwEaWQxMJRhaBNdlGgVXZRoF12UaBldlIwFcmVmaWSUjAxzZWxmZGVzdHJ1Y3SUdWgcaG1oHU5oH05oIGqkAQAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB1OaB9OaCBqoQEAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoY2gdaERoH0sAaCBo9GghaAN1YmhkKYGUfZQoaAVoBmgHXZRoaSmBlH2UKGgFaAZoB12UaG4pgZR9lChoBWgGaAddlGg/jAxkZWxlZ2F0ZWNhbGyUhZSBlH2UKGgFaAZoIGrJAQAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UjARpZDExlGFoE12UaBVdlGgXXZRoGV2UjAVyZWZpZJSMDGRlbGVnYXRlY2FsbJR1aBxobWgdTmgfTmggasYBAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHU5oH05oIGrDAQAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhjaB1oRGgfSwBoIGj0aCFoA3ViaGQpgZR9lChoBWgGaAddlGhpKYGUfZQoaAVoBmgHXZRobimBlH2UKGgFaAZoB12UaD+MCnN0YXRpY2NhbGyUhZSBlH2UKGgFaAZoIGrrAQAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UjARpZDEylGFoE12UaBVdlGgXXZRoGV2UjAVyZWZpZJSMCnN0YXRpY2NhbGyUdWgcaG1oHU5oH05oIGroAQAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB1OaB9OaCBq5QEAAHViYWgOfZQoaBBdlGgTXZSMDGNoYW5nZS1hZGRlZJRhaBVdlGgXXZRoGV2UdWgcaGNoHWhEaB9LAGggaPRoIWgDdWJoZCmBlH2UKGgFaAZoB12UaGkpgZR9lChoBWgGaAddlGhuKYGUfZQoaAVoBmgHXZRoP4wGcmV2ZXJ0lIWUgZR9lChoBWgGaCBqDgIAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlIwEaWQxM5RhaBNdlGgVXZRoF12UaBldlIwFcmVmaWSUjAZyZXZlcnSUdWgcaG1oHU5oH05oIGoLAgAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB1OaB9OaCBqCAIAAHViYWgOfZQoaBBdlGgTXZSMDGNoYW5nZS1hZGRlZJRhaBVdlGgXXZRoGV2UdWgcaGNoHWhEaB9LAGggaPRoIWgDdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGheaB1oRGgfSwBoIGjYaCFoA3ViZWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoY2gdaERoH0sAaCBoYGghaAN1YmVoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaF5oHWhEaB9LAGggaE1oIWgDdWJlaA59lChoEF2UjBF0YWJsZS1vZi1jb250ZW50c5RhaBNdlCiMCGNvbnRlbnRzlIwFbG9jYWyUZWgVXZSMEXRhYmxlIG9mIGNvbnRlbnRzlGFoF12UaBldlHVoHGhLaB1oHmgfSwhoIGg1aCFoA3ViaDQpgZR9lChoBWgGaAddlChoOSmBlH2UKGgFjAxJbnRyb2R1Y3Rpb26UaAddlGg/jAxJbnRyb2R1Y3Rpb26UhZSBlH2UKGgFaAZoIGpKAgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGg4aB1oHmgfSwtoIGpHAgAAdWJoaSmBlH2UKGgFjDdJbXBsZW1lbnRhdGlvbnMgb2YgdGhlIEVWTSBzeXN0ZW0gcmVsYXRlZCBpbnN0cnVjdGlvbnMulGgHXZRoP4w3SW1wbGVtZW50YXRpb25zIG9mIHRoZSBFVk0gc3lzdGVtIHJlbGF0ZWQgaW5zdHJ1Y3Rpb25zLpSFlIGUfZQoaAVoBmggalgCAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHWgeaB9LDWggakcCAAB1YmgAjAdjb21tZW50lJOUKYGUfZQoaAVoBmgHXZRoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAl4bWw6c3BhY2WUjAhwcmVzZXJ2ZZR1aBxqZgIAAGgdTmgfTmggakcCAAB1YmVoDn2UKGgQXZRofmFoE12UaBVdlIwMaW50cm9kdWN0aW9ulGFoF12UaBldlHVoHGgzaB1oHmgfSwtoIGg1aCFoA3ViaDQpgZR9lChoBWgGaAddlChoOSmBlH2UKGgFjA9Nb2R1bGUgQ29udGVudHOUaAddlGg/jA9Nb2R1bGUgQ29udGVudHOUhZSBlH2UKGgFaAZoIGp9AgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGg4aB1oHmgfSxNoIGp6AgAAaCFoA3ViaDQpgZR9lChoBWgGaAddlChoOSmBlH2UKGgFjAlGdW5jdGlvbnOUaAddlGg/jAlGdW5jdGlvbnOUhZSBlH2UKGgFaAZoIGqOAgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGg4aB1oHmgfSxdoIGqLAgAAaCFoA3ViaCKMEHRhYnVsYXJfY29sX3NwZWOUk5QpgZR9lChoBWgGaAddlGgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBHNwZWOUjBBcWHsxfXsyfVxYezF9ezJ9lHVoHGqcAgAAaB2MiC9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vc3B1cmlvdXNfZHJhZ29uL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM3OjxhdXRvc3VtbWFyeT6UaB9LAGggaosCAABoIWgDdWKMFnNwaGlueC5leHQuYXV0b3N1bW1hcnmUjBFhdXRvc3VtbWFyeV90YWJsZZSTlCmBlH2UKGgFWJQBAAAKCgoKY3JlYXRlCgpDcmVhdGVzIGEgbmV3IGFjY291bnQgd2l0aCBhc3NvY2lhdGVkIGNvZGUuCgpyZXR1cm5fCgpIYWx0cyBleGVjdXRpb24gcmV0dXJuaW5nIG91dHB1dCBkYXRhLgoKZ2VuZXJpY19jYWxsCgpQZXJmb3JtIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBDQUxMKiBmYW1pbHkgb2Ygb3Bjb2Rlcy4KCmNhbGwKCk1lc3NhZ2UtY2FsbCBpbnRvIGFuIGFjY291bnQuCgpjYWxsY29kZQoKTWVzc2FnZS1jYWxsIGludG8gdGhpcyBhY2NvdW50IHdpdGggYWx0ZXJuYXRpdmUgYWNjb3VudOKAmXMgY29kZS4KCnNl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lGgXXZRoGV2UdWgcaucCAABoHU5oH05oIGo5AwAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwIaW50ZXJuYWyUiIwFcmVmaWSUjDdldGhlcmV1bS5zcHVyaW91c19kcmFnb24udm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5yZXR1cm5flIwIcmVmdGl0bGWUjDdldGhlcmV1bS5zcHVyaW91c19kcmFnb24udm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5yZXR1cm5flHVoHGhtaB1OaB9OaCBqNQMAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIgvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL3NwdXJpb3VzX2RyYWdvbi92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDozNzo8YXV0b3N1bW1hcnk+lGgfSwFoIGoyAwAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGrbAgAAaB1OaB9OaCBqLwMAAHViatwCAAApgZR9lChoBWgGaAddlGhpKYGUfZQoaAWMJkhhbHRzIGV4ZWN1dGlvbiByZXR1cm5pbmcgb3V0cHV0IGRhdGEulGgHXZRoP4wmSGFsdHMgZXhlY3V0aW9uIHJldHVybmluZyBvdXRwdXQgZGF0YS6UhZSBlH2UKGgFaAZoIGpmAwAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2MiC9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vc3B1cmlvdXNfZHJhZ29uL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM3OjxhdXRvc3VtbWFyeT6UaB9LAWggamMDAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcatsCAABoHU5oH05oIGovAwAAdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGrWAgAAaB1oRGgfSwBoIGrTAgAAaCFoA3ViatcC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aBBdlGgTXZQoavMCAACMAnB5lIwGcHktb2JqlGVoFV2UaBddlGgZXZR1aBxq5wIAAGgdTmgfTmggakMEAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAhpbnRlcm5hbJSIjAVyZWZpZJSMOGV0aGVyZXVtLnNwdXJpb3VzX2RyYWdvbi52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNhbGxjb2RllIwIcmVmdGl0bGWUjDhldGhlcmV1bS5zcHVyaW91c19kcmFnb24udm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5jYWxsY29kZZR1aBxobWgdTmgfTmggaj8EAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYyIL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2FwaS9ldGhlcmV1bS9zcHVyaW91c19kcmFnb24vdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3Q6Mzc6PGF1dG9zdW1tYXJ5PpRoH0sBaCBqPAQAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxq2wIAAGgdTmgfTmggajkEAAB1YmrcAgAAKYGUfZQoaAVoBmgHXZRoaSmBlH2UKGgFjEFNZXNzYWdlLWNhbGwgaW50byB0aGlzIGFjY291bnQgd2l0aCBhbHRlcm5hdGl2ZSBhY2NvdW504oCZcyBjb2RlLpRoB12UaD+MQU1lc3NhZ2UtY2FsbCBpbnRvIHRoaXMgYWNjb3VudCB3aXRoIGFsdGVybmF0aXZlIGFjY291bnTigJlzIGNvZGUulIWUgZR9lChoBWgGaCBqcAQAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIgvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL3NwdXJpb3VzX2RyYWdvbi92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDozNzo8YXV0b3N1bW1hcnk+lGgfSwFoIGptBAAAdWJhaA59lChoEF2UaBNdlGgVXZRo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ZXZlcnSUhZSBlH2UKGgFaAZoIGqPBQAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlChqRQUAAIwCcHmUjAZweS1vYmqUZWgVXZRoF12UaBldlHVoHGrnAgAAaB1OaB9OaCBqjAUAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMCGludGVybmFslIiMBXJlZmlklIwwZXRoZXJldW0uYnl6YW50aXVtLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0ucmV2ZXJ0lIwIcmVmdGl0bGWUjDBldGhlcmV1bS5ieXphbnRpdW0udm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5yZXZlcnSUdWgcaG1oHU5oH05oIGqIBQAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2Mgi9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vYnl6YW50aXVtL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjM5OjxhdXRvc3VtbWFyeT6UaB9LAWggaoUFAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcatsCAABoHU5oH05oIGqCBQAAdWJq3AIAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYxLU3RvcCBleGVjdXRpb24gYW5kIHJldmVydCBzdGF0ZSBjaGFuZ2VzLCB3aXRob3V0IGNvbnN1bWluZyBhbGwgcHJvdmlkZWQgZ2FzlGgHXZRoP4xLU3RvcCBleGVjdXRpb24gYW5kIHJldmVydCBzdGF0ZSBjaGFuZ2VzLCB3aXRob3V0IGNvbnN1bWluZyBhbGwgcHJvdmlkZWQgZ2FzlIWUgZR9lChoBWgGaCBquQUAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIIvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL2J5emFudGl1bS92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDozOTo8YXV0b3N1bW1h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HGqFBgAAaB1oHmgfTmggai0GAAB1YmVoDn2UKGgQXZRoE12UKGp7BgAAjAhmdW5jdGlvbpRlaBVdlGgXXZRoGV2UjAZkb21haW6UansGAACMB29ianR5cGWUavMGAACMCGRlc2N0eXBllGrzBgAAjAdub2luZGV4lIl1aBxqKwYAAGgdaERoH0sAaCBqDwYAAGghaAN1YmgAjA1saXRlcmFsX2Jsb2NrlJOUKYGUfZQoaAVYHwkAAGRlZiBjcmVhdGUoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFRoaXMgaW1wb3J0IGNhdXNlcyBhIGNpcmN1bGFyIGltcG9ydCBlcnJvcgogICAgIyBpZiBpdCdzIG5vdCBtb3ZlZCBpbnNpZGUgdGhpcyBtZXRob2QKICAgIGZyb20gLi4udm0uaW50ZXJwcmV0ZXIgaW1wb3J0IFNUQUNLX0RFUFRIX0xJTUlULCBwcm9jZXNzX2NyZWF0ZV9tZXNzYWdlCgogICAgIyBTVEFDSwogICAgZW5kb3dtZW50ID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwgWyhtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplKV0KICAgICkKCiAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX0NSRUFURSArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICBjcmVhdGVfbWVzc2FnZV9nYXMgPSBtYXhfbWVzc2FnZV9jYWxsX2dhcyhVaW50KGV2bS5nYXNfbGVmdCkpCiAgICBldm0uZ2FzX2xlZnQgLT0gVTI1NihjcmVhdGVfbWVzc2FnZV9nYXMpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBzZW5kZXJfYWRkcmVzcyA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICBzZW5kZXIgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBzZW5kZXJfYWRkcmVzcykKCiAgICBjb250cmFjdF9hZGRyZXNzID0gY29tcHV0ZV9jb250cmFjdF9hZGRyZXNzKAogICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KS5ub25jZSwKICAgICkKCiAgICBpZiAoCiAgICAgICAgc2VuZGVyLmJhbGFuY2UgPCBlbmRvd21lbnQKICAgICAgICBvciBzZW5kZXIubm9uY2UgPT0gVWludCgyKio2NCAtIDEpCiAgICAgICAgb3IgZXZtLm1lc3NhZ2UuZGVwdGggKyAxID4gU1RBQ0tfREVQVEhfTElNSVQKICAgICk6CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IGNyZWF0ZV9tZXNzYWdlX2dhcwogICAgZWxpZiBhY2NvdW50X2hhc19jb2RlX29yX25vbmNlKGV2bS5lbnYuc3RhdGUsIGNvbnRyYWN0X2FkZHJlc3MpOgogICAgICAgIGluY3JlbWVudF9ub25jZShldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgIGVsc2U6CiAgICAgICAgY2FsbF9kYXRhID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICAgICApCgogICAgICAgIGluY3JlbWVudF9ub25jZShldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKCiAgICAgICAgY2hpbGRfbWVzc2FnZSA9IE1lc3NhZ2UoCiAgICAgICAgICAgIGNhbGxlcj1ldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICAgICAgdGFyZ2V0PUJ5dGVzMCgpLAogICAgICAgICAgICBnYXM9VTI1NihjcmVhdGVfbWVzc2FnZV9nYXMpLAogICAgICAgICAgICB2YWx1ZT1lbmRvd21lbnQsCiAgICAgICAgICAgIGRhdGE9YiIiLAogICAgICAgICAgICBjb2RlPWNhbGxfZGF0YSwKICAgICAgICAgICAgY3VycmVudF90YXJnZXQ9Y29udHJhY3RfYWRkcmVzcywKICAgICAgICAgICAgZGVwdGg9ZXZtLm1lc3NhZ2UuZGVwdGggKyAxLAogICAgICAgICAgICBjb2RlX2FkZHJlc3M9Tm9uZSwKICAgICAgICAgICAgc2hvdWxkX3RyYW5zZmVyX3ZhbHVlPVRydWUsCiAgICAgICAgKQogICAgICAgIGNoaWxkX2V2bSA9IHByb2Nlc3NfY3JlYXRlX21lc3NhZ2UoY2hpbGRfbWVzc2FnZSwgZXZtLmVudikKCiAgICAgICAgaWYgY2hpbGRfZXZtLmhhc19lcnJlZDoKICAgICAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fZXJyb3IoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX3N1Y2Nlc3MoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgICAgIHB1c2goCiAgICAgICAgICAgICAgICBldm0uc3RhY2ssIFUyNTYuZnJvbV9iZV9ieXRlcyhjaGlsZF9ldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKICAgICAgICAgICAgKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUaAddlChoP1h2AgAAZGVmIGNyZWF0ZShldm06IEV2bSkgLT4gTm9uZToKICAgICMgVGhpcyBpbXBvcnQgY2F1c2VzIGEgY2lyY3VsYXIgaW1wb3J0IGVycm9yCiAgICAjIGlmIGl0J3Mgbm90IG1vdmVkIGluc2lkZSB0aGlzIG1ldGhvZAogICAgZnJvbSAuLi52bS5pbnRlcnByZXRlciBpbXBvcnQgU1RBQ0tfREVQVEhfTElNSVQsIHByb2Nlc3NfY3JlYXRlX21lc3NhZ2UKCiAgICAjIFNUQUNLCiAgICBlbmRvd21lbnQgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LCBbKG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUpXQogICAgKQoKICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfQ1JFQVRFICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgIGNyZWF0ZV9tZXNzYWdlX2dhcyA9IG1heF9tZXNzYWdlX2NhbGxfZ2FzKFVpbnQoZXZtLmdhc19sZWZ0KSkKICAgIGV2bS5nYXNfbGVmdCAtPSBVMjU2KGNyZWF0ZV9tZXNzYWdlX2dhcykKCiAgICAjIE9QRVJBVElPTgogICAglIWUgZR9lChoBWgGaCBq/QYAAGghaANoHWhEaB9LAHVialgGAAApgZR9lChoBWgGaAddlGg/jDxlbnN1cmUobm90IGV2bS5tZXNzYWdlLmlzX3N0YXRpYywgV3JpdGVJblN0YXRpY0NvbnRleHQpCiAgICCUhZSBlH2UKGgFaAZoIGoFBwAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlIwMY2hhbmdlLWFkZGVklGFoFV2UaBddlGgZXZR1aBxqVwYAAGggav0GAABoIWgDaB1oRGgfSwB1Ymg/jDRldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAglIWUgZR9lChoBWgGaCBq/QYAAGghaANoHWhEaB9LAHVialgGAAApgZR9lChoBWgGaAddlGg/jBtldm0ucmV0dXJuX2RhdGEgPSBiIiIKCiAgICCUhZSBlH2UKGgFaAZoIGoXBwAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlIwMY2hhbmdlLWFkZGVklGFoFV2UaBddlGgZXZR1aBxqVwYAAGggav0GAABoIWgDaB1oRGgfSwB1Ymg/WNUEAABzZW5kZXJfYWRkcmVzcyA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICBzZW5kZXIgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBzZW5kZXJfYWRkcmVzcykKCiAgICBjb250cmFjdF9hZGRyZXNzID0gY29tcHV0ZV9jb250cmFjdF9hZGRyZXNzKAogICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KS5ub25jZSwKICAgICkKCiAgICBpZiAoCiAgICAgICAgc2VuZGVyLmJhbGFuY2UgPCBlbmRvd21lbnQKICAgICAgICBvciBzZW5kZXIubm9uY2UgPT0gVWludCgyKio2NCAtIDEpCiAgICAgICAgb3IgZXZtLm1lc3NhZ2UuZGVwdGggKyAxID4gU1RBQ0tfREVQVEhfTElNSVQKICAgICk6CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IGNyZWF0ZV9tZXNzYWdlX2dhcwogICAgZWxpZiBhY2NvdW50X2hhc19jb2RlX29yX25vbmNlKGV2bS5lbnYuc3RhdGUsIGNvbnRyYWN0X2FkZHJlc3MpOgogICAgICAgIGluY3JlbWVudF9ub25jZShldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgIGVsc2U6CiAgICAgICAgY2FsbF9kYXRhID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUKICAgICAgICApCgogICAgICAgIGluY3JlbWVudF9ub25jZShldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKCiAgICAgICAgY2hpbGRfbWVzc2FnZSA9IE1l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lGgZXZR1aBxqhQYAAGgdaB5oH05oIGqfBwAAdWJlaA59lChoEF2UaBNdlChq3AcAAIwIZnVuY3Rpb26UZWgVXZRoF12UaBldlIwGZG9tYWlulGrcBwAAjAdvYmp0eXBllGpFCAAAjAhkZXNjdHlwZZRqRQgAAIwHbm9pbmRleJSJdWgcaisGAABoHU5oH05oIGp2BwAAdWJq/AYAACmBlH2UKGgFWAcCAABkZWYgcmV0dXJuXyhldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIG1lbW9yeV9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwgWyhtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplKV0KICAgICkKCiAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX1pFUk8gKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBldm0ub3V0cHV0ID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZQogICAgKQoKICAgIGV2bS5ydW5uaW5nID0gRmFsc2UKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgcGFzcwqUaAddlGg/WAcCAABkZWYgcmV0dXJuXyhldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIG1lbW9yeV9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwg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dm0uaW50ZXJwcmV0ZXIgaW1wb3J0IFNUQUNLX0RFUFRIX0xJTUlULCBwcm9jZXNzX21lc3NhZ2UKCiAgICBpZiBldm0ubWVzc2FnZS5kZXB0aCArIDEgPiBTVEFDS19ERVBUSF9MSU1JVDoKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gZ2FzCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgcmV0dXJuCgogICAgY2FsbF9kYXRhID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZQogICAgKQogICAgY29kZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGNvZGVfYWRkcmVzcykuY29kZQogICAgY2hpbGRfbWVzc2FnZSA9IE1lc3NhZ2UoCiAgICAgICAgY2FsbGVyPWNhbGxlciwKICAgICAgICB0YXJnZXQ9dG8sCiAgICAgICAgZ2FzPVUyNTYoZ2FzKSwKICAgICAgICB2YWx1ZT12YWx1ZSwKICAgICAgICBkYXRhPWNhbGxfZGF0YSwKICAgICAgICBjb2RlPWNvZGUsCiAgICAgICAgY3VycmVudF90YXJnZXQ9dG8sCiAgICAgICAgZGVwdGg9ZXZtLm1lc3NhZ2UuZGVwdGggKyAxLAogICAgICAgIGNvZGVfYWRkcmVzcz1jb2RlX2FkZHJlc3MsCiAgICAgICAgc2hvdWxkX3RyYW5zZmVyX3ZhbHVlPXNob3VsZF90cmFuc2Zlcl92YWx1ZSwKICAgICkKICAgIGNoaWxkX2V2bSA9IHByb2Nlc3NfbWVzc2FnZShjaGlsZF9tZXNzYWdlLCBldm0uZW52KQoKICAgIGlmIGNoaWxkX2V2bS5oYXNfZXJyZWQ6CiAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fZXJyb3IoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICBlbHNlOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX3N1Y2Nlc3MoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMSkpCgogICAgYWN0dWFsX291dHB1dF9zaXplID0gbWluKG1lbW9yeV9vdXRwdXRfc2l6ZSwgVTI1NihsZW4oY2hpbGRfZXZtLm91dHB1dCkpKQogICAgbWVtb3J5X3dyaXRlKAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBjaGlsZF9ldm0ub3V0cHV0WzphY3R1YWxfb3V0cHV0X3NpemVdLAogICAgKQqUaAddlChoP4ymZGVmIGdlbmVyaWNfY2FsbCgKICAgIGV2bTogRXZtLAogICAgZ2FzOiBVaW50LAogICAgdmFsdWU6IFUyNTYsCiAgICBjYWxsZXI6IEFkZHJlc3MsCiAgICB0bzogQWRkcmVzcywKICAgIGNvZGVfYWRkcmVzczogQWRkcmVzcywKICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZTogYm9vbCwKICAgIJSFlIGUfZQoaAVoBmggaggKAABoIWgDaB1oRGgfSwB1YmpYBgAAKYGUfZQoaAVoBmgHXZRoP4wZaXNfc3RhdGljY2FsbDogYm9vbCwKICAgIJSFlIGUfZQoaAVoBmggahAKAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UjAxjaGFuZ2UtYWRkZWSUYWgVXZRoF12UaBldlHVoHGpXBgAAaCBqCAoAAGghaANoHWhEaB9LAHViaD+M221lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbjogVTI1NiwKICAgIG1lbW9yeV9pbnB1dF9zaXplOiBVMjU2LAogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbjogVTI1NiwKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZTogVTI1NiwKKSAtPiBOb25lOgogICAgZnJvbSAuLi52bS5pbnRlcnByZXRlciBpbXBvcnQgU1RBQ0tfREVQVEhfTElNSVQsIHByb2Nlc3NfbWVzc2FnZQoKICAgIJSFlIGUfZQoaAVoBmggaggKAABoIWgDaB1oRGgfSwB1YmpYBgAAKYGUfZQoaAVoBmgHXZRoP4wbZXZtLnJldHVybl9kYXRhID0gYiIiCgogICAglIWUgZR9lChoBWgGaCBqIgoAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZSMDGNoYW5nZS1hZGRlZJRhaBVdlGgXXZRoGV2UdWgcalcGAABoIGoICgAAaCFoA2gdaERoH0sAdWJoP1haAgAAaWYgZXZtLm1lc3NhZ2UuZGVwdGggKyAxID4gU1RBQ0tfREVQVEhfTElNSVQ6CiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IGdhcwogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIHJldHVybgoKICAgIGNhbGxfZGF0YSA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUKICAgICkKICAgIGNvZGUgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBjb2RlX2FkZHJlc3MpLmNvZGUKICAgIGNoaWxkX21lc3NhZ2UgPSBNZXNzYWdlKAogICAgICAgIGNhbGxlcj1jYWxsZXIsCiAgICAgICAgdGFyZ2V0PXRvLAogICAgICAgIGdhcz1VMjU2KGdhcyksCiAgICAgICAgdmFsdWU9dmFsdWUsCiAgICAgICAgZGF0YT1jYWxsX2RhdGEsCiAgICAgICAgY29kZT1jb2RlLAogICAgICAgIGN1cnJlbnRfdGFyZ2V0PXRvLAogICAgICAgIGRlcHRoPWV2bS5tZXNzYWdlLmRlcHRoICsgMSwKICAgICAgICBjb2RlX2FkZHJlc3M9Y29kZV9hZGRyZXNzLAogICAgICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZT1zaG91bGRfdHJhbnNmZXJfdmFsdWUsCiAgICCUhZSBlH2UKGgFaAZoIGoICgAAaCFoA2gdaERoH0sAdWJqWAYAACmBlH2UKGgFaAZoB12UaD+MQGlzX3N0YXRpYz1UcnVlIGlmIGlzX3N0YXRpY2NhbGwgZWxzZSBldm0ubWVzc2FnZS5pc19zdGF0aWMsCiAgICCUhZSBlH2UKGgFaAZoIGo0CgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlIwMY2hhbmdlLWFkZGVk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ICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIGNyZWF0ZV9nYXNfY29zdCA9ICgKICAgICAgICBVaW50KDApCiAgICAgICAgaWYgdmFsdWUgPT0gMCBvciBpc19hY2NvdW50X2FsaXZlKGV2bS5lbnYuc3RhdGUsIHRvKQogICAgICAgIGVsc2UgR0FTX05FV19BQ0NPVU5UCiAgICApCiAgICB0cmFuc2Zlcl9nYXNfY29zdCA9IFVpbnQoMCkgaWYgdmFsdWUgPT0gMCBlbHNlIEdBU19DQUxMX1ZBTFVFCiAgICBtZXNzYWdlX2NhbGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAgdmFsdWUsCiAgICAgICAgZ2FzLAogICAgICAgIFVpbnQoZXZtLmdhc19sZWZ0KSwKICAgICAgICBleHRlbmRfbWVtb3J5LmNvc3QsCiAgICAgICAgR0FTX0NBTEwgKyBjcmVhdGVfZ2FzX2Nvc3QgKyB0cmFuc2Zlcl9nYXNfY29zdCwKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBtZXNzYWdlX2NhbGxfZ2FzLmNvc3QgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBzZW5kZXJfYmFsYW5jZSA9IGdldF9hY2NvdW50KAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICApLmJhbGFuY2UKICAgIGlmIHNlbmRlcl9iYWxhbmNlIDwgdmFsdWU6CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZAogICAgZWxzZToKICAgICAgICBnZW5lcmljX2NhbGwoCiAgICAgICAgICAgIGV2bSwKICAgICAgICAgICAgbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kLAogICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgICAgIHRvLAogICAgICAgICAgICB0bywKICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBtZW1vcnlfaW5wdXRfc2l6ZSwKICAgICAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICAgICAgbWVtb3J5X291dHB1dF9zaXplLAogICAgICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlGgHXZQoaD9YBQQAAGRlZiBjYWxsKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZ2FzID0gVWludChwb3AoZXZtLnN0YWNrKSkKICAgIHRvID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKICAgIHZhbHVlID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIGNyZWF0ZV9nYXNfY29zdCA9ICgKICAgICAgICBVaW50KDApCiAgICAgICAgaWYgdmFsdWUgPT0gMCBvciBpc19hY2NvdW50X2FsaXZlKGV2bS5lbnYuc3RhdGUsIHRvKQogICAgICAgIGVsc2UgR0FTX05FV19BQ0NPVU5UCiAgICApCiAgICB0cmFuc2Zlcl9nYXNfY29zdCA9IFVpbnQoMCkgaWYgdmFsdWUgPT0gMCBlbHNlIEdBU19DQUxMX1ZBTFVFCiAgICBtZXNzYWdlX2NhbGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAgdmFsdWUsCiAgICAgICAgZ2FzLAogICAgICAgIFVpbnQoZXZtLmdhc19sZWZ0KSwKICAgICAgICBleHRlbmRfbWVtb3J5LmNvc3QsCiAgICAgICAgR0FTX0NBTEwgKyBjcmVhdGVfZ2FzX2Nvc3QgKyB0cmFuc2Zlcl9nYXNfY29zdCwKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBtZXNzYWdlX2NhbGxfZ2FzLmNvc3QgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIJSFlIGUfZQoaAVoBmggakoLAABoIWgDaB1oRGgfSwB1YmpYBgAAKYGUfZQoaAVoBmgHXZRoP4xQZW5zdXJlKG5vdCBldm0ubWVzc2FnZS5pc19zdGF0aWMgb3IgdmFsdWUgPT0gVTI1NigwKSwgV3JpdGVJblN0YXRpY0NvbnRleHQpCiAgICCUhZSBlH2UKGgFaAZoIGpSCwAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlIwMY2hhbmdlLWFkZGVklGFoFV2UaBddlGgZXZR1aBxqVwYAAGggakoLAABoIWgDaB1oRGgfSwB1Ymg/jNpldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgc2VuZGVyX2JhbGFuY2UgPSBnZXRfYWNjb3VudCgKICAgICAgICBldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgKS5iYWxhbmNlCiAgICBpZiBzZW5kZXJfYmFsYW5jZSA8IHZhbHVlOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIJSFlIGUfZQoaAVoBmggakoLAABoIWgDaB1oRGgfSwB1YmpYBgAAKYGUfZQoaAVoBmgHXZRoP4weZXZtLnJldHVybl9kYXRhID0gYiIiCiAgICAgICAglIWUgZR9lChoBWgGaCBqZAsAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZSMDGNoYW5nZS1hZGRlZJRhaBVdlGgXXZRoGV2UdWgcalcGAABoIGpKCwAAaCFoA2gdaERoH0sAdWJoP4z5ZXZtLmdhc19sZWZ0ICs9IG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZAogICAgZWxzZToKICAgICAgICBnZW5lcmljX2NhbGwoCiAgICAgICAgICAgIGV2bSwKICAgICAgICAgICAgbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kLAogICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgICAgIHRvLAogICAgICAgICAgICB0bywKICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgICAglIWUgZR9lChoBWgGaCBqSgsAAGghaANoHWhEaB9LAHVialgGAAApgZR9lChoBWgGaAddlGg/jBNGYWxzZSwKICAgICAgICAgICAglIWUgZR9lChoBWgGaCBqdgsAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZSMDGNoYW5nZS1hZGRlZJRhaBVdlGgXXZRoGV2UdWgcalcGAABoIGpKCwAAaCFoA2gdaERoH0sAdWJoP4y3bWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBtZW1vcnlfaW5wdXRfc2l6ZSwKICAgICAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICAgICAgbWVtb3J5X291dHB1dF9zaXplLAogICAgICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEKlIWUgZR9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c3NhZ2UuY3VycmVudF90YXJnZXQKCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCiAgICB0cmFuc2Zlcl9nYXNfY29zdCA9IFVpbnQoMCkgaWYgdmFsdWUgPT0gMCBlbHNlIEdBU19DQUxMX1ZBTFVFCiAgICBtZXNzYWdlX2NhbGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAgdmFsdWUsCiAgICAgICAgZ2FzLAogICAgICAgIFVpbnQoZXZtLmdhc19sZWZ0KSwKICAgICAgICBleHRlbmRfbWVtb3J5LmNvc3QsCiAgICAgICAgR0FTX0NBTEwgKyB0cmFuc2Zlcl9nYXNfY29zdCwKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBtZXNzYWdlX2NhbGxfZ2FzLmNvc3QgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBzZW5kZXJfYmFsYW5jZSA9IGdldF9hY2NvdW50KAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICApLmJhbGFuY2UKICAgIGlmIHNlbmRlcl9iYWxhbmNlIDwgdmFsdWU6CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZAogICAgZWxzZToKICAgICAgICBnZW5lcmljX2NhbGwoCiAgICAgICAgICAgIGV2bSwKICAgICAgICAgICAgbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kLAogICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgICAgIHRvLAogICAgICAgICAgICBjb2RlX2FkZHJlc3MsCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICAgICAgbWVtb3J5X2lucHV0X3NpemUsCiAgICAgICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSwKICAgICAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpRoB12UKGg/WHgEAABkZWYgY2FsbGNvZGUoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBnYXMgPSBVaW50KHBvcChldm0uc3RhY2spKQogICAgY29kZV9hZGRyZXNzID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKICAgIHZhbHVlID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIHRvID0gZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCiAgICB0cmFuc2Zlcl9nYXNfY29zdCA9IFVpbnQoMCkgaWYgdmFsdWUgPT0gMCBlbHNlIEdBU19DQUxMX1ZBTFVFCiAgICBtZXNzYWdlX2NhbGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAgdmFsdWUsCiAgICAgICAgZ2FzLAogICAgICAgIFVpbnQoZXZtLmdhc19sZWZ0KSwKICAgICAgICBleHRlbmRfbWVtb3J5LmNvc3QsCiAgICAgICAgR0FTX0NBTEwgKyB0cmFuc2Zlcl9nYXNfY29zdCwKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBtZXNzYWdlX2NhbGxfZ2FzLmNvc3QgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBzZW5kZXJfYmFsYW5jZSA9IGdldF9hY2NvdW50KAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICApLmJhbGFuY2UKICAgIGlmIHNlbmRlcl9iYWxhbmNlIDwgdmFsdWU6CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAglIWUgZR9lChoBWgGaCBqaAwAAGghaANoHWhEaB9LAHVialgGAAApgZR9lChoBWgGaAddlGg/jB5ldm0ucmV0dXJuX2RhdGEgPSBiIiIKICAgICAgICCUhZSBlH2UKGgFaAZoIGpwDAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlIwMY2hhbmdlLWFkZGVklGFoFV2UaBddlGgZXZR1aBxqVwYAAGggamgMAABoIWgDaB1oRGgfSwB1Ymg/WAMBAABldm0uZ2FzX2xlZnQgKz0gbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kCiAgICBlbHNlOgogICAgICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICAgICAgZXZtLAogICAgICAgICAgICBtZXNzYWdlX2Nh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aBldlHVoHGqFBgAAaB1oHmgfTmggasYMAAB1YmVoDn2UKGgQXZRoE12UKGoDDQAAjAhmdW5jdGlvbpRlaBVdlGgXXZRoGV2UjAZkb21haW6UagMNAACMB29ianR5cGWUamwNAACMCGRlc2N0eXBllGpsDQAAjAdub2luZGV4lIl1aBxqKwYAAGgdaERoH0sAaCBqqgwAAGghaAN1Ymr8BgAAKYGUfZQoaAVY9QQAAGRlZiBzZWxmZGVzdHJ1Y3QoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBiZW5lZmljaWFyeSA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCgogICAgIyBHQVMKICAgIGlmICgKICAgICAgICBub3QgaXNfYWNjb3VudF9hbGl2ZShldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSkKICAgICAgICBhbmQgZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpLmJhbGFuY2UgIT0gMAogICAgKToKICAgICAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX1NFTEZfREVTVFJVQ1QgKyBHQVNfU0VMRl9ERVNUUlVDVF9ORVdfQUNDT1VOVCkKICAgIGVsc2U6CiAgICAgICAgY2hhcmdlX2dhcyhldm0sIEdBU19TRUxGX0RFU1RSVUNUKQoKICAgICMgT1BFUkFUSU9OCiAgICBvcmlnaW5hdG9yID0gZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgIGJlbmVmaWNpYXJ5X2JhbGFuY2UgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSkuYmFsYW5jZQogICAgb3JpZ2luYXRvcl9iYWxhbmNlID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgb3JpZ2luYXRvcikuYmFsYW5jZQoKICAgICMgRmlyc3QgVHJhbnNmZXIgdG8gYmVuZWZpY2lhcnkKICAgIHNldF9hY2NvdW50X2JhbGFuY2UoCiAgICAgICAgZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnksIGJlbmVmaWNpYXJ5X2JhbGFuY2UgKyBvcmlnaW5hdG9yX2JhbGFuY2UKICAgICkKICAgICMgTmV4dCwgWmVybyB0aGUgYmFsYW5jZSBvZiB0aGUgYWRkcmVzcyBiZWluZyBkZWxldGVkIChtdXN0IGNvbWUgYWZ0ZXIKICAgICMgc2VuZGluZyB0byBiZW5lZmljaWFyeSBpbiBjYXNlIHRoZSBjb250cmFjdCBuYW1lZCBpdHNlbGYgYXMgdGhlCiAgICAjIGJlbmVmaWNpYXJ5KS4KICAgIHNldF9hY2NvdW50X2JhbGFuY2UoZXZtLmVudi5zdGF0ZSwgb3JpZ2luYXRvciwgVTI1NigwKSkKCiAgICAjIHJlZ2lzdGVyIGFjY291bnQgZm9yIGRlbGV0aW9uCiAgICBldm0uYWNjb3VudHNfdG9fZGVsZXRlLmFkZChvcmlnaW5hdG9yKQoKICAgICMgbWFyayBiZW5lZmljaWFyeSBhcyB0b3VjaGVkCiAgICBpZiBhY2NvdW50X2V4aXN0c19hbmRfaXNfZW1wdHkoZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnkpOgogICAgICAgIGV2bS50b3VjaGVkX2FjY291bnRzLmFkZChiZW5lZmljaWFyeSkKCiAgICAjIEhBTFQgdGhlIGV4ZWN1dGlvbgogICAgZXZtLnJ1bm5pbmcgPSBGYWxzZQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBwYXNzCpRoB12UKGg/WJYBAABkZWYgc2VsZmRlc3RydWN0KGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgYmVuZWZpY2lhcnkgPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQoKICAgICMgR0FTCiAgICBpZiAoCiAgICAgICAgbm90IGlzX2FjY291bnRfYWxpdmUoZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnkpCiAgICAgICAgYW5kIGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KS5iYWxhbmNlICE9IDAKICAgICk6CiAgICAgICAgY2hhcmdlX2dhcyhldm0sIEdBU19TRUxGX0RFU1RSVUNUICsgR0FTX1NFTEZfREVTVFJVQ1RfTkVXX0FDQ09VTlQpCiAgICBlbHNlOgogICAgICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfU0VMRl9ERVNUUlVDVCkKCiAgICAjIE9QRVJBVElPTgogICAglIWUgZR9lChoBWgGaCBqdA0AAGghaANoHWhEaB9LAHVialgGAAApgZR9lChoBWgGaAddlGg/jD1lbnN1cmUobm90IGV2bS5tZXNzYWdlLmlzX3N0YXRpYywgV3JpdGVJblN0YXRpY0NvbnRleHQpCgogICAglIWUgZR9lChoBWgGaCBqfA0AAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZSMDGNoYW5nZS1hZGRlZJRhaBVdlGgXXZRoGV2UdWgcalcGAABoIGp0DQAAaCFoA2gdaERoH0sAdWJoP1hfAwAAb3JpZ2luYXRvciA9IGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0CiAgICBiZW5lZmljaWFyeV9iYWxhbmNlID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnkpLmJhbGFuY2UKICAgIG9yaWdpbmF0b3JfYmFsYW5jZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIG9yaWdpbmF0b3IpLmJhbGFuY2UKCiAgICAjIEZpcnN0IFRyYW5zZmVyIHRvIGJlbmVmaWNpYXJ5CiAgICBzZXRfYWNjb3VudF9iYWxhbmNlKAogICAgICAgIGV2bS5lbnYuc3RhdGUsIGJlbmVmaWNpYXJ5LCBiZW5lZmljaWFyeV9iYWxhbmNlICsgb3JpZ2luYXRvcl9iYWxhbmNlCiAgICApCiAgICAjIE5leHQsIFplcm8gdGhlIGJhbGFuY2Ugb2YgdGhlIGFkZHJlc3MgYmVpbmcgZGVsZXRlZCAobXVzdCBjb21lIGFmdGVyCiAgICAjIHNlbmRpbmcgdG8gYmVuZWZpY2lhcnkgaW4gY2FzZSB0aGUgY29udHJhY3QgbmFtZWQgaXRzZWxmIGFzIHRoZQogICAgIyBiZW5lZmljaWFyeSkuCiAgICBzZXRfYWNjb3VudF9iYWxhbmNlKGV2bS5lbnYuc3RhdGUsIG9yaWdpbmF0b3IsIFUyNTYoMCkpCgogICAgIyByZWdpc3RlciBhY2NvdW50IGZvciBkZWxldGlvbgogICAgZXZtLmFjY291bnRz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b3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAgbWVzc2FnZV9jYWxsX2dhcyA9IGNhbGN1bGF0ZV9tZXNzYWdlX2NhbGxfZ2FzKAogICAgICAgIFUyNTYoMCksIGdhcywgVWludChldm0uZ2FzX2xlZnQpLCBleHRlbmRfbWVtb3J5LmNvc3QsIEdBU19DQUxMCiAgICApCiAgICBjaGFyZ2VfZ2FzKGV2bSwgbWVzc2FnZV9jYWxsX2dhcy5jb3N0ICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgZ2VuZXJpY19jYWxsKAogICAgICAgIGV2bSwKICAgICAgICBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQsCiAgICAgICAgZXZtLm1lc3NhZ2UudmFsdWUsCiAgICAgICAgZXZtLm1lc3NhZ2UuY2FsbGVyLAogICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIGNvZGVfYWRkcmVzcywKICAgICAgICBGYWxzZSwKICAgICAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgbWVtb3J5X2lucHV0X3NpemUsCiAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBtZW1vcnlfb3V0cHV0X3NpemUsCiAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpRoB12UKGg/WOYDAABkZWYgZGVsZWdhdGVjYWxsKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZ2FzID0gVWludChwb3AoZXZtLnN0YWNrKSkKICAgIGNvZGVfYWRkcmVzcyA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCiAgICBtZXNzYWdlX2NhbGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAgVTI1NigwKSwgZ2FzLCBVaW50KGV2bS5nYXNfbGVmdCksIGV4dGVuZF9tZW1vcnkuY29zdCwgR0FTX0NBTEwKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBtZXNzYWdlX2NhbGxfZ2FzLmNvc3QgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5t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bGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAgVTI1NigwKSwKICAgICAgICBnYXMsCiAgICAgICAgVWludChldm0uZ2FzX2xlZnQpLAogICAgICAgIGV4dGVuZF9tZW1vcnkuY29zdCwKICAgICAgICBHQVNfQ0FMTCwKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBtZXNzYWdlX2NhbGxfZ2FzLmNvc3QgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBnZW5lcmljX2NhbGwoCiAgICAgICAgZXZtLAogICAgICAgIG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZCwKICAgICAgICBVMjU2KDApLAogICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIHRvLAogICAgICAgIHRvLAogICAgICAgIFRydWUsCiAgICAgICAgVHJ1ZSwKICAgICAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgbWVtb3J5X2lucHV0X3NpemUsCiAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBtZW1vcnlfb3V0cHV0X3NpemUsCiAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpRoB12UaD9YiwQAAGRlZiBzdGF0aWNjYWxsKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZ2FzID0gVWludChwb3AoZXZtLnN0YWNrKSkKICAgIHRvID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIG1lc3NhZ2VfY2FsbF9nYXMgPSBjYWxjdWxhdGVfbWVzc2FnZV9jYWxsX2dhcygKICAgICAgICBVMjU2KDApLAogICAgICAgIGdhcywKICAgICAgICBVaW50KGV2bS5nYXNfbGVmdCksCiAgICAgICAgZXh0ZW5kX21lbW9yeS5jb3N0LAogICAgICAgIEdBU19DQUxMLAogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICBldm0sCiAgICAgICAgbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kLAogICAgICAgIFUyNTYoMCksCiAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgdG8sCiAgICAgICAgdG8sCiAgICAgICAgVHJ1ZSwKICAgICAgICBUcnVlLAogICAgICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBtZW1vcnlfaW5wdXRfc2l6ZSwKICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSwKICAgICkKCiAgICAjIFBST0dSQU0gQ09VTlRFUgogICAgZXZtLnBjICs9IDEK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aBVdlGgXXZRoGV2UjAZkb21haW6UaucPAACMB29ianR5cGWUaggQAACMCGRlc2N0eXBllGoIEAAAjAdub2luZGV4lIl1aBxqKwYAAGgdaq8OAABoH05oIGqODwAAdWJq/AYAACmBlH2UKGgFWOIBAABkZWYgcmV2ZXJ0KGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgbWVtb3J5X3N0YXJ0X2luZGV4ID0gcG9wKGV2bS5zdGFjaykKICAgIHNpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksIFsobWVtb3J5X3N0YXJ0X2luZGV4LCBzaXplKV0KICAgICkKCiAgICBjaGFyZ2VfZ2FzKGV2bSwgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgb3V0cHV0ID0gbWVtb3J5X3JlYWRfYnl0ZXMoZXZtLm1lbW9yeSwgbWVtb3J5X3N0YXJ0X2luZGV4LCBzaXplKQogICAgZXZtLm91dHB1dCA9IGJ5dGVzKG91dHB1dCkKICAgIHJhaXNlIFJldmVydAoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBwYXNzCpRoB12UaD9Y4gEAAGRlZiByZXZlcnQoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBtZW1vcnlfc3RhcnRfaW5kZXggPSBwb3AoZXZtLnN0YWNrKQogICAgc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwgWyhtZW1vcnlfc3RhcnRfaW5kZXgsIHNpemUpXQogICAgKQoKICAgIGNoYXJnZV9nYXMoZXZtLCBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBvdXRwdXQgPSBtZW1vcnlfcmVhZF9ieXRlcyhldm0ubWVtb3J5LCBtZW1vcnlfc3RhcnRfaW5kZXgsIHNpemUpCiAgICBldm0ub3V0cHV0ID0gYnl0ZXMob3V0cHV0KQogICAgcmFpc2UgUmV2ZXJ0CgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIHBhc3MKlIWUgZR9lChoBWgGaCBqEBAAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZSMYi9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3Mvc3JjL2V0aGVyZXVtL2J5emFudGl1bS92bS9pbnN0cnVjdGlvbnMvc3lzdGVtLnB5lIwJeG1sOnNwYWNllGpyAgAAjAVmb3JjZZSJjAhsYW5ndWFnZZSMBnB5dGhvbpSMDmhpZ2hsaWdodF9hcmdzlH2UaoQPAABLAXOMB2xpbmVub3OUiXVoHGr7BgAAaB1qrw4AAGgfS8doIGqODwAAdWJlaA59lChoEF2Uah0CAABhaBNdlIwMY2hhbmdlLWFkZGVklGFoFV2UjAZyZXZlcnSUYWgXXZRoGV2UdWgcaDNoHWqvDgAAaB9Lumggav4FAABoIWgDdWJlaA59lChoEF2UaO1haBNdlGgVXZSMDm1vZHVsZSBkZXRhaWxzlGFoF12UaBldlHVoHGgzaB1oHmgfSydoIGg1aCFoA3ViZWgOfZQoaBBdlIwwZXRoZXJldW0tdmlydHVhbC1tYWNoaW5lLWV2bS1zeXN0ZW0taW5zdHJ1Y3Rpb25zlGFoE12UaBVdlIwyZXRoZXJldW0gdmlydHVhbCBtYWNoaW5lIChldm0pIHN5c3RlbSBpbnN0cnVjdGlvbnOUYWgXXZRoGV2UdWgcaDNoHWgeaB9LBGggaANoIWgDdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwGc291cmNllGhEdWgcaAGMDmN1cnJlbnRfc291cmNllGhEjAxjdXJyZW50X2xpbmWUSwCMCHNldHRpbmdzlIwRZG9jdXRpbHMuZnJvbnRlbmSUjAZWYWx1ZXOUk5QpgZR9lCiMDHJlcG9ydF9sZXZlbJRLAowKaGFsdF9sZXZlbJRLBIwRZXhpdF9zdGF0dXNfbGV2ZWyUSwWMBWRlYnVnlE6MDndhcm5pbmdfc3RyZWFtlE6MCXRyYWNlYmFja5ROjA9vdXRwdXRfZW5jb2RpbmeUjAV1dGYtOJSMHW91dHB1dF9lbmNvZGluZ19lcnJvcl9oYW5kbGVylIwReG1sY2hhcnJlZnJlcGxhY2WUjA5lcnJvcl9lbmNvZGluZ5SMBXV0Zi04lIwcZXJyb3JfZW5jb2RpbmdfZXJyb3JfaGFuZGxlcpSMEGJhY2tzbGFzaHJlcGxhY2WUjBNyZWNvcmRfZGVwZW5kZW5jaWVzlIwOZG9jdXRpbHMudXRpbHOUjA5EZXBlbmRlbmN5TGlzdJSTlCmBlH2UKIwEbGlzdJRdlIwEZmlsZZROdWKMBmNvbmZpZ5ROjA1kdW1wX3NldHRpbmdzlE6MDmR1bXBfaW50ZXJuYWxzlE6MD2R1bXBfdHJhbnNmb3Jtc5ROjA9kdW1wX3BzZXVkb194bWyUTowQZXhwb3NlX2ludGVybmFsc5ROjA5zdHJpY3RfdmlzaXRvcpROjA9fZGlzYWJsZV9jb25maWeUTowHX3NvdXJjZZROjAxfZGVzdGluYXRpb26UjElkb2MvZGlmZnMvc3B1cmlvdXNfZHJhZ29uX2J5emFudGl1bS92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnBpY2tsZTY0lIwNX2NvbmZpZ19maWxlc5RdlIwRbGluZV9sZW5ndGhfbGltaXSUTRAnjAl0YWJfd2lkdGiUSwiMEHN5bnRheF9oaWdobGlnaHSUjARsb25nlIwMc21hcnRfcXVvdGVzlImME3NtYXJ0cXVvdGVzX2xvY2FsZXOUTowdY2hhcmFjdGVyX2xldmVsX2lubGluZV9tYXJrdXCUiYwGd3JpdGVylIwDeG1slIwZY29tcGFyZV9zZWN0aW9uc19ieV9uYW1lc5RLAYwMZHVtcF9yc3RkaWZmlE6MBV9ib3RolH2UKGg4TowJZ2VuZXJhdG9ylE6MCWRhdGVzdGFtcJROjAtzb3VyY2VfbGlua5ROjApzb3VyY2VfdXJslE6MDXRvY19iYWNrbGlua3OUatsCAACMEmZvb3Rub3RlX2JhY2tsaW5rc5RLAYwNc2VjdG51bV94Zm9ybZRLAYwOZG9jdGl0bGVfeGZvcm2USwGMDWRvY2luZm9feGZvcm2USwGMEnNlY3RzdWJ0aXRsZV94Zm9ybZRLAIwOc3RyaXBfY29tbWVudHOUTowOaW5wdXRfZW5jb2RpbmeUTowcaW5wdXRfZW5jb2RpbmdfZXJyb3JfaGFuZGxlcpSMBnN0cmljdJSMDWxhbmd1YWdlX2NvZGWUjAJlbpSMDnBlcF9yZWZlcmVuY2VzlE6MDHBlcF9iYXNlX3VybJSMH2h0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy+UjBVwZXBfZmlsZV91cmxfdGVtcGxhdGWUjAhwZXAtJTA0ZJSMDnJmY19yZWZlcmVuY2VzlE6MDHJmY19iYXNlX3VybJSMG2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL5SMHXRyaW1fZm9vdG5vdGVfcmVmZXJlbmNlX3NwYWNllE6MFmZpbGVfaW5zZXJ0aW9uX2VuYWJsZWSUSwGMC3Jhd19lbmFibGVklEsBjA5hdXRvX2lkX3ByZWZpeJSMAmlklIwJaWRfcHJlZml4lGgGjBtzdHJpcF9lbGVtZW50c193aXRoX2NsYXNzZXOUTowNc3RyaXBfY2xhc3Nlc5ROdYwEYm90aJR9lIwKX29wdGlvbnNUb5SMBV9ib3RolIwLX29sZF9zb3VyY2WUjE8vaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzLy50b3gvZG9jcy9zdGFnZTBfb3V0L2F1dG9hcGkvlIwLX25ld19zb3VyY2WUjAlkb2MvZGlmZnOUaowQAABqjRAAAIwWaWdub3JlX2luX3NlY3Rpb25fbmFtZZRdlCiMCHNwdXJpb3VzlIwGZHJhZ29ulIwJYnl6YW50aXVtlGV1YowIcmVwb3J0ZXKUTowQaW5kaXJlY3RfdGFyZ2V0c5RdlIwRc3Vic3RpdHV0aW9uX2RlZnOUfZSMEnN1YnN0aXR1dGlvbl9uYW1lc5R9lIwIcmVmbmFtZXOUfZSMBnJlZmlkc5R9lIwHbmFtZWlkc5R9lIwJbmFtZXR5cGVzlH2UaBB9lIwNZm9vdG5vdGVfcmVmc5R9lIwNY2l0YXRpb25fcmVmc5R9lIwNYXV0b2Zvb3Rub3Rlc5RdlIwRYXV0b2Zvb3Rub3RlX3JlZnOUXZSMEHN5bWJvbF9mb290bm90ZXOUXZSMFHN5bWJvbF9mb290bm90ZV9yZWZzlF2UjAlmb290bm90ZXOUXZSMCWNpdGF0aW9uc5RdlIwSYXV0b2Zvb3Rub3RlX3N0YXJ0lEsBjBVzeW1ib2xfZm9vdG5vdGVfc3RhcnSUSwCMCmlkX2NvdW50ZXKUjAtjb2xsZWN0aW9uc5SMB0NvdW50ZXKUk5R9lIWUUpSMDnBhcnNlX21lc3NhZ2VzlF2UjBJ0cmFuc2Zvcm1fbWVzc2FnZXOUXZSMC3RyYW5zZm9ybWVylE6MC2luY2x1ZGVfbG9nlF2UjApkZWNvcmF0aW9ulE5oIWgDdWIu