gASVBgABAAAAAACMDmRvY3V0aWxzLm5vZGVzlIwIZG9jdW1lbnSUk5QpgZR9lCiMCXJhd3NvdXJjZZSMAJSMCGNoaWxkcmVulF2UKGgAjAZ0YXJnZXSUk5QpgZR9lChoBWgGaAddlIwKYXR0cmlidXRlc5R9lCiMA2lkc5RdlIwzbW9kdWxlLWV0aGVyZXVtLm11aXJfZ2xhY2llci52bS5pbnN0cnVjdGlvbnMuc3lzdGVtlGGMB2NsYXNzZXOUXZSMBW5hbWVzlF2UjAhkdXBuYW1lc5RdlIwIYmFja3JlZnOUXZSMBWlzbW9klIh1jAd0YWduYW1llGgJjAZzb3VyY2WUjHQvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL211aXJfZ2xhY2llci92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdJSMBGxpbmWUSwGMBnBhcmVudJRoA4wJX2RvY3VtZW50lGgDdWKMD3NwaGlueC5hZGRub2Rlc5SMBWluZGV4lJOUKYGUfZQoaAVoBmgHXZRoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAdlbnRyaWVzlF2UKIwEcGFpcpSMNG1vZHVsZTsgZXRoZXJldW0ubXVpcl9nbGFjaWVyLnZtLmluc3RydWN0aW9ucy5zeXN0ZW2UaBJoBk50lGF1aBxoI2gdaB5oH0sCaCBoA2ghaAN1YmgAjAdzZWN0aW9ulJOUKYGUfZQoaAVoBmgHXZQoaACMBXRpdGxllJOUKYGUfZQoaAWMMkV0aGVyZXVtIFZpcnR1YWwgTWFjaGluZSAoRVZNKSBTeXN0ZW0gSW5zdHJ1Y3Rpb25zlGgHXZRoAIwEVGV4dJSTlIwyRXRoZXJldW0gVmlydHVhbCBNYWNoaW5lIChFVk0pIFN5c3RlbSBJbnN0cnVjdGlvbnOUhZSBlH2UKGgFaAZoIGg6aCFoA2gdjFwvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzLy50b3gvZG9jcy9zdGFnZTBfb3V0L2F1dG9hcGkvID0+IGRvYy9kaWZmc5RoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRo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YXJ5PpRoH05oIGrNAgAAdWKMFnNwaGlueC5leHQuYXV0b3N1bW1hcnmUjBFhdXRvc3VtbWFyeV90YWJsZZSTlCmBlH2UKGgFWI0CAAAKCgoKZ2VuZXJpY19jcmVhdGUKCkNvcmUgbG9naWMgdXNlZCBieSB0aGUgQ1JFQVRFKiBmYW1pbHkgb2Ygb3Bjb2Rlcy4KCmNyZWF0ZQoKQ3JlYXRlcyBhIG5ldyBhY2NvdW50IHdpdGggYXNzb2NpYXRlZCBjb2RlLgoKY3JlYXRlMgoKQ3JlYXRlcyBhIG5ldyBhY2NvdW50IHdpdGggYXNzb2NpYXRlZCBjb2RlLgoKcmV0dXJuXwoKSGFsdHMgZXhlY3V0aW9uIHJldHVybmluZyBvdXRwdXQgZGF0YS4KCmdlbmVyaWNfY2FsbAoKUGVyZm9ybSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgQ0FMTCogZmFtaWx5IG9mIG9wY29kZXMuCgpjYWxsCgpNZXNzYWdlLWNhbGwgaW50byBhbiBhY2NvdW50LgoKY2FsbGNvZGUKCk1lc3NhZ2UtY2FsbCBpbnRvIHRoaXMgYWNjb3VudCB3aXRoIGFsdGVybmF0aXZlIGFjY291bnTigJlzIGNvZGUuCgpzZWxmZGVzdHJ1Y3QKCkhhbHQgZXhlY3V0aW9uIGFuZCByZWdpc3RlciBhY2NvdW50IGZvciBsYXRlciBkZWxldGlvbi4KCmRlbGVnYXRlY2FsbAoKTWVzc2FnZS1jYWxsIGludG8gYW4gYWNjb3VudC4KCnN0YXRpY2NhbGwKCk1lc3NhZ2UtY2FsbCBpbnRvIGFuIGFjY291bnQuCgpyZXZlcnQKClN0b3AgZXhlY3V0aW9uIGFuZCByZXZlcnQgc3RhdGUgY2hhbmdlcywgd2l0aG91dCBjb25zdW1pbmcgYWxsIHByb3ZpZGVkIGdhc5RoB12UaACMBXRhYmxllJOUKYGUfZQoaAVoBmgHXZRoAIwGdGdyb3VwlJOUKYGUfZQoaAVoBmgHXZQoaACMB2NvbHNwZWOUk5QpgZR9lChoBWgGaAddlGgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMCGNvbHdpZHRolEsKdWgcav0CAABoHU5oH05oIGr6AgAAdWJq/gIAACmBlH2UKGgFaAZoB12UaA59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Y2llci52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNyZWF0ZZSMCHJlZnRpdGxllIwzZXRoZXJldW0ubXVpcl9nbGFjaWVyLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uY3JlYXRllHVoHGhtaB1OaB9OaCBqiwMAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIUvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL211aXJfZ2xhY2llci92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDo0MTo8YXV0b3N1bW1hcnk+lGgfSwFoIGqIAwAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGodAwAAaB1OaB9OaCBqhQMAAHViah4DAAApgZR9lChoBWgGaAddlGhpKYGUfZQoaAWMK0NyZWF0ZXMgYSBuZXcgYWNjb3VudCB3aXRoIGFzc29jaWF0ZWQgY29kZS6UaAddlGg/jCtDcmVhdGVzIGEgbmV3IGFjY291bnQgd2l0aCBhc3NvY2lhdGVkIGNvZGUulIWUgZR9lChoBWgGaCBqvAMAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIUvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL211aXJfZ2xhY2llci92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDo0MTo8YXV0b3N1bW1hcnk+lGgfSwFoIGq5AwAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGodAwAAaB1OaB9OaCBqhQMAAHViZWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxqGAMAAGgdTmgfTmggahUDAAB1YmoZAwAAKYGUfZQoaAVoBmgHXZQoah4DAAApgZR9lChoBWgGaAddlGhpKYGUfZQoaAWMRTpvYmo6YGNyZWF0ZTIgPGV0aGVyZXVtLm11aXJfZ2xhY2llci52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmNyZWF0ZTI+YJRoB12UaG4pgZR9lChoBWgGaAddlGoqAwAAKYGUfZQoaAVq3wMAAGgHXZRoP4wHY3JlYXRlMpSFlIGUfZQoaAVoBmggauQDAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UKGo1AwAAjAJweZSMBnB5LW9iapRlaBVdlGgXXZRoGV2UdWgcaikDAABoHU5oH05oIGrhAwAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlIwIaW50ZXJuYWyUiIwFcmVmaWSUjDRldGhlcmV1bS5tdWlyX2dsYWNpZXIudm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5jcmVhdGUylIwIcmVmdGl0bGWUjDRldGhlcmV1bS5tdWlyX2dsYWNpZXIudm0uaW5zdHJ1Y3Rpb25zLnN5c3RlbS5jcmVhdGUylHVoHGhtaB1OaB9OaCBq3QMAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIUvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL211aXJfZ2xhY2llci92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDo0MTo8YXV0b3N1bW1hcnk+lGgfSwFoIGraAwAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGodAwAAaB1OaB9OaCBq1wMAAHViah4DAAApgZR9lChoBWgGaAddlGhpKYGUfZQoaAWMK0NyZWF0ZXMgYSBuZXcgYWNjb3VudCB3aXRoIGFzc29jaWF0ZWQgY29kZS6UaAddlGg/jCtDcmVhdGVzIGEgbmV3IGFjY291bnQgd2l0aCBhc3NvY2lhdGVkIGNvZGUulIWUgZR9lChoBWgGaCBqDgQAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIUvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL211aXJfZ2xhY2llci92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDo0MTo8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lGhuKYGUfZQoaAVoBmgHXZRqKgMAACmBlH2UKGgFaucEAABoB12UaD+MBGNhbGyUhZSBlH2UKGgFaAZoIGrsBAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlChqNQMAAIwCcHmUjAZweS1vYmqUZWgVXZRoF12UaBldlHVoHGopAwAAaB1OaB9OaCBq6QQAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMCGludGVybmFslIiMBXJlZmlklIwxZXRoZXJldW0ubXVpcl9nbGFjaWVyLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uY2FsbJSMCHJlZnRpdGxllIwxZXRoZXJldW0ubXVpcl9nbGFjaWVyLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uY2FsbJR1aBxobWgdTmgfTmggauUEAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYyFL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2MvYXV0b2FwaS9ldGhlcmV1bS9tdWlyX2dsYWNpZXIvdm0vaW5zdHJ1Y3Rpb25zL3N5c3RlbS9pbmRleC5yc3Q6NDE6PGF1dG9zdW1tYXJ5PpRoH0sBaCBq4gQAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxqHQMAAGgdTmgfTmggat8EAAB1YmoeAwAAKYGUfZQoaAVoBmgHXZRoaSmBlH2UKGgFjB1NZXNzYWdlLWNhbGwgaW50byBhbiBhY2NvdW50LpRoB12UaD+MHU1lc3NhZ2UtY2FsbCBpbnRvIGFuIGFjY291bnQulIWUgZR9lChoBWgGaCBqFgUAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIUvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL211aXJfZ2xhY2llci92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDo0MTo8YXV0b3N1bW1hcnk+lGgfSwFoIGoTBQAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBld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aBddlGgZXZR1aBxqKQMAAGgdTmgfTmggat8FAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAhpbnRlcm5hbJSIjAVyZWZpZJSMOWV0aGVyZXVtLm11aXJfZ2xhY2llci52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLmRlbGVnYXRlY2FsbJSMCHJlZnRpdGxllIw5ZXRoZXJldW0ubXVpcl9nbGFjaWVyLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uZGVsZWdhdGVjYWxslHVoHGhtaB1OaB9OaCBq2wUAAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZR1aBxoaGgdjIUvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL2RvYy9hdXRvYXBpL2V0aGVyZXVtL211aXJfZ2xhY2llci92bS9pbnN0cnVjdGlvbnMvc3lzdGVtL2luZGV4LnJzdDo0MTo8YXV0b3N1bW1hcnk+lGgfSwFoIGrYBQAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGodAwAAaB1OaB9OaCBq1QUAAHViah4DAAApgZR9lChoBWgGaAddlGhpKYGUfZQoaAWMHU1lc3NhZ2UtY2FsbCBpbnRvIGFuIGFjY291bnQulGgHXZRoP4wdTWVzc2FnZS1jYWxsIGludG8gYW4gYWNjb3VudC6UhZSBlH2UKGgFaAZoIGoMBgAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2MhS9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vbXVpcl9nbGFjaWVyL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjQxOjxhdXRvc3VtbWFyeT6UaB9LAWggagkGAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcah0DAABoHU5oH05oIGrVBQAAdWJlaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGoYAwAAaB1OaB9OaCBqFQMAAHViahkDAAApgZR9lChoBWgGaAddlChqHgMAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYxLOm9iajpgc3RhdGljY2FsbCA8ZXRoZXJldW0ubXVpcl9nbGFjaWVyLnZtLmluc3RydWN0aW9ucy5zeXN0ZW0uc3RhdGljY2FsbD5glGgHXZRobimBlH2UKGgFaAZoB12UaioDAAApgZR9lChoBWovBgAAaAddlGg/jApzdGF0aWNjYWxslIWUgZR9lChoBWgGaCBqNAYAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZQoajUDAACMAnB5lIwGcHktb2JqlGVoFV2UaBddlGgZXZR1aBxqKQMAAGgdTmgfTmggajEGAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAhpbnRlcm5hbJSIjAVyZWZpZJSMN2V0aGVyZXVtLm11aXJfZ2xhY2llci52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLnN0YXRpY2NhbGyUjAhyZWZ0aXRsZZSMN2V0aGVyZXVtLm11aXJfZ2xhY2llci52bS5pbnN0cnVjdGlvbnMuc3lzdGVtLnN0YXRpY2NhbGyUdWgcaG1oHU5oH05oIGotBgAAdWJhaA59lChoEF2UaBNdlGgVXZRoF12UaBldlHVoHGhoaB2MhS9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvZG9jL2F1dG9hcGkvZXRoZXJldW0vbXVpcl9nbGFjaWVyL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucnN0OjQxOjxhdXRvc3VtbWFyeT6UaB9LAWggaioGAAB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcah0DAABoHU5oH05oIGonBgAAdWJqHgMAACmBlH2UKGgFaAZoB12UaGkpgZR9lChoBYwdTWVzc2FnZS1jYWxsIGludG8gYW4gYWNjb3VudC6UaAddlGg/jB1NZXNzYWdlLWNhbGwgaW50byBhbiBhY2NvdW50LpSFlIGUfZQoaAVoBmggal4GAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UdWgcaGhoHYyFL2hvbWUvcnVubmVyL3dvcmsvZXhlY3V0aW9uLXNwZWNzL2V4ZWN1dGlvbi1zcGVjcy9kb2Mv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lChoBVi1BwAAZGVmIGdlbmVyaWNfY3JlYXRlKAogICAgZXZtOiBFdm0sCiAgICBlbmRvd21lbnQ6IFUyNTYsCiAgICBjb250cmFjdF9hZGRyZXNzOiBBZGRyZXNzLAogICAgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uOiBVMjU2LAogICAgbWVtb3J5X3NpemU6IFUyNTYsCikgLT4gTm9uZToKICAgICMgVGhpcyBpbXBvcnQgY2F1c2VzIGEgY2lyY3VsYXIgaW1wb3J0IGVycm9yCiAgICAjIGlmIGl0J3Mgbm90IG1vdmVkIGluc2lkZSB0aGlzIG1ldGhvZAogICAgZnJvbSAuLi52bS5pbnRlcnByZXRlciBpbXBvcnQgU1RBQ0tfREVQVEhfTElNSVQsIHByb2Nlc3NfY3JlYXRlX21lc3NhZ2UKCiAgICBjcmVhdGVfbWVzc2FnZV9nYXMgPSBtYXhfbWVzc2FnZV9jYWxsX2dhcyhVaW50KGV2bS5nYXNfbGVmdCkpCiAgICBldm0uZ2FzX2xlZnQgLT0gVTI1NihjcmVhdGVfbWVzc2FnZV9nYXMpCgogICAgZW5zdXJlKG5vdCBldm0ubWVzc2FnZS5pc19zdGF0aWMsIFdyaXRlSW5TdGF0aWNDb250ZXh0KQogICAgZXZtLnJldHVybl9kYXRhID0gYiIiCgogICAgc2VuZGVyX2FkZHJlc3MgPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgc2VuZGVyID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgc2VuZGVyX2FkZHJlc3MpCgogICAgaWYgKAogICAgICAgIHNlbmRlci5iYWxhbmNlIDwgZW5kb3dtZW50CiAgICAgICAgb3Igc2VuZGVyLm5vbmNlID09IFVpbnQoMioqNjQgLSAxKQogICAgICAgIG9yIGV2bS5tZXNzYWdlLmRlcHRoICsgMSA+IFNUQUNLX0RFUFRIX0xJTUlUCiAgICApOgogICAgICAgIGV2bS5nYXNfbGVmdCArPSBjcmVhdGVfbWVzc2FnZV9nYXMKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICByZXR1cm4KCiAgICBpZiBhY2NvdW50X2hhc19jb2RlX29yX25vbmNlKGV2bS5lbnYuc3RhdGUsIGNvbnRyYWN0X2FkZHJlc3MpOgogICAgICAgIGluY3JlbWVudF9ub25jZShldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICByZXR1cm4KCiAgICBjYWxsX2RhdGEgPSBtZW1vcnlfcmVhZF9ieXRlcygKICAgICAgICBldm0ubWVtb3J5LCBtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplCiAgICApCgogICAgaW5jcmVtZW50X25vbmNlKGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KQoKICAgIGNoaWxkX21lc3NhZ2UgPSBNZXNzYWdlKAogICAgICAgIGNhbGxlcj1ldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICB0YXJnZXQ9Qnl0ZXMwKCksCiAgICAgICAgZ2FzPVUyNTYoY3JlYXRlX21lc3NhZ2VfZ2FzKSwKICAgICAgICB2YWx1ZT1lbmRvd21lbnQsCiAgICAgICAgZGF0YT1iIiIsCiAgICAgICAgY29kZT1jYWxsX2RhdGEsCiAgICAgICAgY3VycmVudF90YXJnZXQ9Y29udHJhY3RfYWRkcmVzcywKICAgICAgICBkZXB0aD1ldm0ubWVzc2FnZS5kZXB0aCArIDEsCiAgICAgICAgY29kZV9hZGRyZXNzPU5vbmUsCiAgICAgICAgc2hvdWxkX3RyYW5zZmVyX3ZhbHVlPVRydWUsCiAgICAgICAgaXNfc3RhdGljPUZhbHNlLAogICAgKQogICAgY2hpbGRfZXZtID0gcHJvY2Vzc19jcmVhdGVfbWVzc2FnZShjaGlsZF9tZXNzYWdlLCBldm0uZW52KQoKICAgIGlmIGNoaWxkX2V2bS5oYXNfZXJyZWQ6CiAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fZXJyb3IoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgZXZtLnJldHVybl9kYXRhID0gY2hpbGRfZXZtLm91dHB1dAogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgZWxzZToKICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9zdWNjZXNzKGV2bSwgY2hpbGRfZXZtKQogICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGIiIgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2LmZyb21fYmVfYnl0ZXMoY2hpbGRfZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpKQqUaAddlChoP1hGAQAAZGVmIGdlbmVyaWNfY3JlYXRlKAogICAgZXZtOiBFdm0sCiAgICBlbmRvd21lbnQ6IFUyNTYsCiAgICBjb250cmFjdF9hZGRyZXNzOiBBZGRyZXNzLAogICAgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uOiBVMjU2LAogICAgbWVtb3J5X3NpemU6IFUyNTYsCikgLT4gTm9uZToKICAgICMgVGhpcyBpbXBvcnQgY2F1c2VzIGEgY2lyY3VsYXIgaW1wb3J0IGVycm9yCiAgICAjIGlmIGl0J3Mgbm90IG1vdmVkIGluc2lkZSB0aGlzIG1ldGhvZAogICAgZnJvbSAuLi52bS5pbnRlcnByZXRlciBpbXBvcnQgU1RBQ0tfREVQVEhfTElNSVQsIHByb2Nlc3NfY3JlYXRlX21lc3NhZ2UKCiAgICCUhZSBlH2UKGgFaAZoIGoSCAAAaCFoA2gdaERoH0sAdWJqTQcAACmBlH2UKGgFaAZoB12UaD+MMmV2bS5hY2Nlc3NlZF9hZGRyZXNzZXMuYWRkKGNvbnRyYWN0X2FkZHJlc3MpCgogICAglIWUgZR9lChoBWgGaCBqGggAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZSMDGNoYW5nZS1hZGRlZJRhaBVdlGgXXZRoGV2UdWgcakwHAABoIGoSCAAAaCFoA2gdaERoH0sAdWJoP1jnBAAAY3JlYXRlX21lc3NhZ2VfZ2FzID0gbWF4X21lc3NhZ2VfY2FsbF9nYXMoVWludChldm0uZ2FzX2xlZnQpKQogICAgZXZtLmdhc19sZWZ0IC09IFUyNTYoY3JlYXRlX21lc3NhZ2VfZ2FzKQoKICAgIGVuc3VyZShub3QgZXZtLm1lc3NhZ2UuaXNfc3RhdGljLCBXcml0ZUluU3RhdGljQ29udGV4dCkKICAgIGV2bS5yZXR1cm5fZGF0YSA9IGIiIgoKICAgIHNlbmRlcl9hZGRyZXNzID0gZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgIHNlbmRlciA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIHNlbmRlcl9hZGRyZXNzKQoKICAgIGlmICgKICAgICAgICBzZW5kZXIuYmFsYW5jZSA8IGVuZG93bWVudAogICAgICAgIG9yIHNlbmRlci5ub25jZSA9PSBVaW50KDIqKjY0IC0gMSkKICAgICAgICBvciBldm0ubWVzc2FnZS5kZXB0aCArIDEgPiBTVEFDS19ERVBUSF9MSU1JVAogICAgKToKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gY3JlYXRlX21lc3NhZ2VfZ2FzCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgcmV0dXJuCgogICAgaWYgYWNjb3VudF9oYXNfY29kZV9vcl9ub25jZShldm0uZW52LnN0YXRlLCBjb250cmFjdF9hZGRyZXNzKToKICAgICAgICBpbmNyZW1lbnRfbm9uY2UoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpCiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMCkpCiAgICAgICAgcmV0dXJuCgogICAgY2FsbF9kYXRhID0gbWVtb3J5X3JlYWRfYnl0ZXMoCiAgICAgICAgZXZtLm1lbW9yeSwgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfc2l6ZQogICAgKQoKICAgIGluY3JlbWVudF9ub25jZShldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkKCiAgICBjaGlsZF9tZXNzYWdlID0gTWVzc2FnZSgKICAgICAgICBjYWxsZXI9ZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgdGFyZ2V0PUJ5dGVzMCgpLAogICAgICAgIGdhcz1VMjU2KGNyZWF0ZV9tZXNzYWdlX2dhcyksCiAgICAgICAgdmFsdWU9ZW5kb3dtZW50LAogICAgICAgIGRhdGE9YiIiLAogICAgICAgIGNvZGU9Y2FsbF9kYXRhLAogICAgICAgIGN1cnJlbnRfdGFyZ2V0PWNvbnRyYWN0X2FkZHJlc3MsCiAgICAgICAgZGVwdGg9ZXZtLm1lc3NhZ2UuZGVwdGggKyAxLAogICAgICAgIGNvZGVfYWRkcmVzcz1Ob25lLAogICAgICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZT1UcnVlLAogICAgICAgIGlzX3N0YXRpYz1GYWxzZSwKICAgIJSFlIGUfZQoaAVoBmggahIIAABoIWgDaB1oRGgfSwB1YmpNBwAAKYGUfZQoaAVoBmgHXZRoP4x2YWNjZXNzZWRfYWRkcmVzc2VzPWV2bS5hY2Nlc3NlZF9hZGRyZXNzZXMuY29weSgpLAogICAgICAgIGFjY2Vzc2VkX3N0b3JhZ2Vfa2V5cz1ldm0uYWNjZXNzZWRfc3RvcmFnZV9rZXlzLmNvcHkoKSwKICAgIJSFlIGUfZQoaAVoBmggaiwIAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UjAxjaGFuZ2UtYWRkZWSUYWgVXZRoF12UaBldlHVoHGpMBwAAaCBqEggAAGghaANoHWhEaB9LAHViaD9YiAEAACkKICAgIGNoaWxkX2V2bSA9IHByb2Nlc3NfY3JlYXRlX21lc3NhZ2UoY2hpbGRfbWVzc2FnZSwgZXZtLmVudikKCiAgICBpZiBjaGlsZF9ldm0uaGFzX2VycmVkOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX2Vycm9yKGV2bSwgY2hpbGRfZXZtKQogICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGNoaWxkX2V2bS5vdXRwdXQKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgIGVsc2U6CiAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fc3VjY2Vzcyhldm0sIGNoaWxkX2V2bSkKICAgICAgICBldm0ucmV0dXJuX2RhdGEgPSBiIiIKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1Ni5mcm9tX2JlX2J5dGVzKGNoaWxkX2V2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KSkKlIWUgZR9lChoBWgGaCBqEggAAGghaANoHWhEaB9L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ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIGNvbnRyYWN0X2FkZHJlc3MgPSBjb21wdXRlX2NvbnRyYWN0X2FkZHJlc3MoCiAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQpLm5vbmNlLAogICAgKQoKICAgIGdlbmVyaWNfY3JlYXRlKAogICAgICAgIGV2bSwgZW5kb3dtZW50LCBjb250cmFjdF9hZGRyZXNzLCBtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplCiAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpRoB12UaD9YvQIAAGRlZiBjcmVhdGUoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBlbmRvd21lbnQgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LCBbKG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUpXQogICAgKQoKICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfQ1JFQVRFICsgZXh0ZW5kX21lbW9yeS5jb3N0KQoKICAgICMgT1BFUkFUSU9OCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgY29udHJhY3RfYWRkcmVzcyA9IGNvbXB1dGVfY29udHJhY3RfYWRkcmVzcygKICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkubm9uY2UsCiAgICApCgogICAg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FwoAAIwIZGVzY3R5cGWUahcKAACMB25vaW5kZXiUiXVoHGogBwAAaB1OaB9OaCBqRwkAAHViahEIAAApgZR9lChoBVh2AwAAZGVmIGNyZWF0ZTIoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBlbmRvd21lbnQgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9zaXplID0gcG9wKGV2bS5zdGFjaykKICAgIHNhbHQgPSBwb3AoZXZtLnN0YWNrKS50b19iZV9ieXRlczMyKCkKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LCBbKG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUpXQogICAgKQogICAgY2FsbF9kYXRhX3dvcmRzID0gY2VpbDMyKFVpbnQobWVtb3J5X3NpemUpKSAvLyAzMgogICAgY2hhcmdlX2dhcygKICAgICAgICBldm0sCiAgICAgICAgR0FTX0NSRUFURSArIEdBU19LRUNDQUsyNTZfV09SRCAqIGNhbGxfZGF0YV93b3JkcyArIGV4dGVuZF9tZW1vcnkuY29zdCwKICAgICkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIGNvbnRyYWN0X2FkZHJlc3MgPSBjb21wdXRlX2NyZWF0ZTJfY29udHJhY3RfYWRkcmVzcygKICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICBzYWx0LAogICAgICAgIG1lbW9yeV9yZWFkX2J5dGVzKGV2bS5tZW1vcnksIG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUpLAogICAgKQoKICAgIGdlbmVyaWNfY3JlYXRlKAogICAgICAgIGV2bSwgZW5kb3dtZW50LCBjb250cmFjdF9hZGRyZXNzLCBtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplCiAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpRoB12UaD9YdgMAAGRlZiBjcmVhdGUyKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgZW5kb3dtZW50ID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBzYWx0ID0gcG9wKGV2bS5zdGFjaykudG9fYmVfYnl0ZXMzMigpCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwgWyhtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplKV0KICAgICkKICAgIGNhbGxfZGF0YV93b3JkcyA9IGNlaWwzMihVaW50KG1lbW9yeV9zaXplKSkgLy8gMzIKICAgIGNoYXJnZV9nYXMoCiAgICAgICAgZXZtLAogICAgICAgIEdBU19DUkVBVEUgKyBHQVNfS0VDQ0FLMjU2X1dPUkQgKiBjYWxsX2RhdGFfd29yZHMgKyBleHRlbmRfbWVtb3J5LmNvc3QsCiAgICApCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBjb250cmFjdF9hZGRyZXNzID0gY29tcHV0ZV9jcmVhdGUyX2NvbnRyYWN0X2FkZHJlc3MoCiAgICAgICAgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQsCiAgICAgICAgc2FsdCwKICAgICAgICBtZW1vcnlfcmVhZF9ieXRlcyhldm0ubWVtb3J5LCBtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplKSwKICAgICkKCiAgICBnZW5lcmljX2NyZWF0ZSgKICAgICAgICBldm0sIGVuZG93bWVudCwgY29udHJhY3RfYWRkcmVzcywgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uLCBt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IGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIGV2bS5vdXRwdXQgPSBtZW1vcnlfcmVhZF9ieXRlcygKICAgICAgICBldm0ubWVtb3J5LCBtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplCiAgICApCgogICAgZXZtLnJ1bm5pbmcgPSBGYWxzZQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBwYXNzCpRoB12UaD9YBwIAAGRlZiByZXR1cm5fKGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgbWVtb3J5X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LCBbKG1lbW9yeV9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X3NpemUpXQogICAgKQoKICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfWkVSTyArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIGV2bS5vdXRwdXQgPSBtZW1vcnlfcmVhZF9ieXRlcygKICAgICAgICBldm0ubWVtb3J5LCBtZW1vcnlfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9zaXplCiAgICApCgogICAgZXZtLnJ1bm5pbmcgPSBGYWxzZQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBwYXNzCpSFlIGUfZQoaAVoBmggahQLAABoIWgDaB1oRGgfSwB1YmFoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAZzb3VyY2WUjGUvaG9tZS9ydW5uZXIvd29yay9leGVjdXRpb24tc3BlY3MvZXhlY3V0aW9uLXNwZWNzL3NyYy9l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lIl1aBxqIAcAAGgdaB5oH0sAaCBqMgsAAGghaAN1YmoRCAAAKYGUfZQoaAVYhAYAAGRlZiBnZW5lcmljX2NhbGwoCiAgICBldm06IEV2bSwKICAgIGdhczogVWludCwKICAgIHZhbHVlOiBVMjU2LAogICAgY2FsbGVyOiBBZGRyZXNzLAogICAgdG86IEFkZHJlc3MsCiAgICBjb2RlX2FkZHJlc3M6IEFkZHJlc3MsCiAgICBzaG91bGRfdHJhbnNmZXJfdmFsdWU6IGJvb2wsCiAgICBpc19zdGF0aWNjYWxsOiBib29sLAogICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uOiBVMjU2LAogICAgbWVtb3J5X2lucHV0X3NpemU6IFUyNTYsCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uOiBVMjU2LAogICAgbWVtb3J5X291dHB1dF9zaXplOiBVMjU2LAopIC0+IE5vbmU6CiAgICBmcm9tIC4uLnZtLmludGVycHJldGVyIGltcG9ydCBTVEFDS19ERVBUSF9MSU1JVCwgcHJvY2Vzc19tZXNzYWdlCgogICAgZXZtLnJldHVybl9kYXRhID0gYiIiCgogICAgaWYgZXZtLm1lc3NhZ2UuZGVwdGggKyAxID4gU1RBQ0tfREVQVEhfTElNSVQ6CiAgICAgICAgZXZtLmdhc19sZWZ0ICs9IGdhcwogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIHJldHVybgoKICAgIGNhbGxfZGF0YSA9IG1lbW9yeV9yZWFkX2J5dGVzKAogICAgICAgIGV2bS5tZW1vcnksIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUKICAgICkKICAgIGNvZGUgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBjb2RlX2FkZHJlc3MpLmNvZGUKICAgIGNoaWxkX21lc3NhZ2UgPSBNZXNzYWdlKAogICAgICAgIGNhbGxlcj1jYWxsZXIsCiAgICAgICAgdGFyZ2V0PXRvLAogICAgICAgIGdhcz1VMjU2KGdhcyksCiAgICAgICAgdmFsdWU9dmFsdWUsCiAgICAgICAgZGF0YT1jYWxsX2RhdGEsCiAgICAgICAgY29kZT1jb2RlLAogICAgICAgIGN1cnJlbnRfdGFyZ2V0PXRvLAogICAgICAgIGRlcHRoPWV2bS5tZXNzYWdlLmRlcHRoICsgMSwKICAgICAgICBjb2RlX2FkZHJlc3M9Y29kZV9hZGRyZXNzLAogICAgICAgIHNob3VsZF90cmFuc2Zlcl92YWx1ZT1zaG91bGRfdHJhbnNmZXJfdmFsdWUsCiAgICAgICAgaXNfc3RhdGljPVRydWUgaWYgaXNfc3RhdGljY2FsbCBlbHNlIGV2bS5tZXNzYWdlLmlzX3N0YXRpYywKICAgICkKICAgIGNoaWxkX2V2bSA9IHByb2Nlc3NfbWVzc2FnZShjaGlsZF9tZXNzYWdlLCBldm0uZW52KQoKICAgIGlmIGNoaWxkX2V2bS5oYXNfZXJyZWQ6CiAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fZXJyb3IoZXZtLCBjaGlsZF9ldm0pCiAgICAgICAgZXZtLnJldHVybl9kYXRhID0gY2hpbGRfZXZtLm91dHB1dAogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgZWxzZToKICAgICAgICBpbmNvcnBvcmF0ZV9jaGlsZF9vbl9zdWNjZXNzKGV2bSwgY2hpbGRfZXZtKQogICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGNoaWxkX2V2bS5vdXRwdXQKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigxKSkKCiAgICBhY3R1YWxfb3V0cHV0X3NpemUgPSBtaW4obWVtb3J5X291dHB1dF9zaXplLCBVMjU2KGxlbihjaGlsZF9ldm0ub3V0cHV0KSkpCiAgICBtZW1vcnlfd3JpdGUoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgIGNoaWxkX2V2bS5vdXRwdXRbOmFjdHVhbF9vdXRwdXRfc2l6ZV0sCiAgICApCpRoB12UKGg/WFMEAABkZWYgZ2VuZXJpY19jYWxsKAogICAgZXZtOiBFdm0sCiAgICBnYXM6IFVpbnQsCiAgICB2YWx1ZTogVTI1NiwKICAgIGNhbGxlcjogQWRkcmVzcywKICAgIHRvOiBBZGRyZXNzLAogICAgY29kZV9hZGRyZXNzOiBBZGRyZXNzLAogICAgc2hvdWxkX3RyYW5zZmVyX3ZhbHVlOiBib29sLAogICAgaXNfc3RhdGljY2FsbDogYm9vbCwKICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbjogVTI1NiwKICAgIG1lbW9yeV9pbnB1dF9zaXplOiBVMjU2LAogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbjogVTI1NiwKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZTogVTI1NiwKKSAtPiBOb25lOgogICAgZnJvbSAuLi52bS5pbnRlcnByZXRlciBpbXBvcnQgU1RBQ0tfREVQVEhfTElNSVQsIHByb2Nlc3NfbWVzc2FnZQoKICAgIGV2bS5yZXR1cm5fZGF0YSA9IGIiIgoKICAgIGlmIGV2bS5tZXNzYWdlLmRlcHRoICsgMSA+IFNUQUNLX0RFUFRIX0xJTUlUOgogICAgICAgIGV2bS5nYXNfbGVmdCArPSBnYXMKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICByZXR1cm4KCiAgICBjYWxsX2RhdGEgPSBtZW1vcnlfcmVhZF9ieXRlcygKICAgICAgICBldm0ubWVtb3J5LCBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplCiAgICApCiAgICBjb2RlID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgY29kZV9hZGRyZXNzKS5jb2RlCiAgICBjaGlsZF9tZXNzYWdlID0gTWVzc2FnZSgKICAgICAgICBjYWxsZXI9Y2FsbGVyLAogICAgICAgIHRhcmdldD10bywKICAgICAgICBnYXM9VTI1NihnYXMpLAogICAgICAgIHZhbHVlPXZhbHVlLAogICAgICAgIGRhdGE9Y2FsbF9kYXRhLAogICAgICAgIGNvZGU9Y29kZSwKICAgICAgICBjdXJyZW50X3RhcmdldD10bywKICAgICAgICBkZXB0aD1ldm0ubWVzc2FnZS5kZXB0aCArIDEsCiAgICAgICAgY29kZV9hZGRyZXNzPWNvZGVfYWRkcmVzcywKICAgICAgICBzaG91bGRfdHJhbnNmZXJfdmFsdWU9c2hvdWxkX3RyYW5zZmVyX3ZhbHVlLAogICAgICAgIGlzX3N0YXRpYz1UcnVlIGlmIGlzX3N0YXRpY2NhbGwgZWxzZSBldm0ubWVzc2FnZS5pc19zdGF0aWMsCiAgICCUhZSBlH2UKGgFaAZoIGrODAAAaCFoA2gdaERoH0sAdWJqTQcAACmBlH2UKGgFaAZoB12UaD+MdmFjY2Vzc2VkX2FkZHJlc3Nlcz1ldm0uYWNjZXNzZWRfYWRkcmVzc2VzLmNvcHkoKSwKICAgICAgICBhY2Nlc3NlZF9zdG9yYWdlX2tleXM9ZXZtLmFjY2Vzc2VkX3N0b3JhZ2Vfa2V5cy5jb3B5KCksCiAgICCUhZSBlH2UKGgFaAZoIGrWDAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlIwMY2hhbmdlLWFkZGVklGFoFV2UaBddlGgZXZR1aBxqTAcAAGggas4MAABoIWgDaB1oRGgfSwB1Ymg/WDECAAApCiAgICBjaGlsZF9ldm0gPSBwcm9jZXNzX21lc3NhZ2UoY2hpbGRfbWVzc2FnZSwgZXZtLmVudikKCiAgICBpZiBjaGlsZF9ldm0uaGFzX2VycmVkOgogICAgICAgIGluY29ycG9yYXRlX2NoaWxkX29uX2Vycm9yKGV2bSwgY2hpbGRfZXZtKQogICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGNoaWxkX2V2bS5vdXRwdXQKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgIGVsc2U6CiAgICAgICAgaW5jb3Jwb3JhdGVfY2hpbGRfb25fc3VjY2Vzcyhldm0sIGNoaWxkX2V2bSkKICAgICAgICBldm0ucmV0dXJuX2RhdGEgPSBjaGlsZF9ldm0ub3V0cHV0CiAgICAgICAgcHVzaChldm0uc3RhY2ssIFUyNTYoMSkpCgogICAgYWN0dWFsX291dHB1dF9zaXplID0gbWluKG1lbW9yeV9vdXRwdXRfc2l6ZSwgVTI1NihsZW4oY2hpbGRfZXZtLm91dHB1dCkpKQogICAgbWVtb3J5X3dyaXRlKAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAg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ZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAgY3JlYXRlX2dhc19jb3N0ID0gKAogICAgICAgIFVpbnQoMCkKICAgICAgICBpZiB2YWx1ZSA9PSAwIG9yIGlzX2FjY291bnRfYWxpdmUoZXZtLmVudi5zdGF0ZSwgdG8pCiAgICAgICAgZWxzZSBHQVNfTkVXX0FDQ09VTlQKICAgICkKICAgIHRyYW5zZmVyX2dhc19jb3N0ID0gVWludCgwKSBpZiB2YWx1ZSA9PSAwIGVsc2UgR0FTX0NBTExfVkFMVUUKICAgIG1lc3NhZ2VfY2FsbF9nYXMgPSBjYWxjdWxhdGVfbWVzc2FnZV9jYWxsX2dhcygKICAgICAgICB2YWx1ZSwKICAgICAgICBnYXMsCiAgICAgICAgVWludChldm0uZ2FzX2xlZnQpLAogICAgICAgIGV4dGVuZF9tZW1vcnkuY29zdCwKICAgICAgICBHQVNfQ0FMTCArIGNyZWF0ZV9nYXNfY29zdCArIHRyYW5zZmVyX2dhc19jb3N0LAogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZW5zdXJlKG5vdCBldm0ubWVzc2FnZS5pc19zdGF0aWMgb3IgdmFsdWUgPT0gVTI1NigwKSwgV3JpdGVJblN0YXRpY0NvbnRleHQpCiAgICBldm0ubWVtb3J5ICs9IGIiXHgwMCIgKiBleHRlbmRfbWVtb3J5LmV4cGFuZF9ieQogICAgc2VuZGVyX2JhbGFuY2UgPSBnZXRfYWNjb3VudCgKICAgICAgICBldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgKS5iYWxhbmNlCiAgICBpZiBzZW5kZXJfYmFsYW5jZSA8IHZhbHVlOgogICAgICAgIHB1c2goZXZtLnN0YWNrLCBVMjU2KDApKQogICAgICAgIGV2bS5yZXR1cm5fZGF0YSA9IGIiIgogICAgICAgIGV2bS5nYXNfbGVmdCArPSBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQKICAgIGVsc2U6CiAgICAgICAgZ2VuZXJpY19jYWxsKAogICAgICAgICAgICBldm0sCiAgICAgICAgICAgIG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZCwKICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgICAgICB0bywKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIFRydWUsCiAgICAgICAgICAgIEZhbHNlLAogICAgICAgICAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICAgIG1lbW9yeV9pbnB1dF9zaXplLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgICAgICBtZW1vcnlfb3V0cHV0X3NpemUsCiAgICAgICAgKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUaAddlChoP1ggAgAAZGVmIGNhbGwoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBnYXMgPSBVaW50KHBvcChldm0uc3RhY2spKQogICAgdG8gPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQogICAgdmFsdWUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21l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jAhmdW5jdGlvbpRlaBVdlGgXXZRoGV2UjAZkb21haW6UaisPAACMB29ianR5cGWUapQPAACMCGRlc2N0eXBllGqUDwAAjAdub2luZGV4lIl1aBxqIAcAAGgdaERoH0sAaCBq0g4AAGghaAN1YmoRCAAAKYGUfZQoaAVYYwYAAGRlZiBjYWxsY29kZShldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIGdhcyA9IFVpbnQocG9wKGV2bS5zdGFjaykpCiAgICBjb2RlX2FkZHJlc3MgPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQogICAgdmFsdWUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgdG8gPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAoKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIHRyYW5zZmVyX2dhc19jb3N0ID0gVWludCgwKSBpZiB2YWx1ZSA9PSAwIGVsc2UgR0FTX0NBTExfVkFMVUUKICAgIG1lc3NhZ2VfY2FsbF9nYXMgPSBjYWxjdWxhdGVfbWVzc2FnZV9jYWxsX2dhcygKICAgICAgICB2YWx1ZSwKICAgICAgICBnYXMsCiAgICAgICAgVWludChldm0uZ2FzX2xlZnQpLAogICAgICAgIGV4dGVuZF9tZW1vcnkuY29zdCwKICAgICAgICBHQVNfQ0FMTCArIHRyYW5zZmVyX2dhc19jb3N0LAogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIHNlbmRlcl9iYWxhbmNlID0gZ2V0X2FjY291bnQoCiAgICAgICAgZXZtLmVudi5zdGF0ZSwgZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgICkuYmFsYW5jZQogICAgaWYgc2VuZGVyX2JhbGFuY2UgPCB2YWx1ZToKICAgICAgICBwdXNoKGV2bS5zdGFjaywgVTI1NigwKSkKICAgICAgICBldm0ucmV0dXJuX2RhdGEgPSBiIiIKICAgICAgICBldm0uZ2FzX2xlZnQgKz0gbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kCiAgICBlbHNlOgogICAgICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICAgICAgZXZtLAogICAgICAgICAgICBtZXNzYWdlX2NhbGxfZ2FzLnN0aXBlbmQsCiAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICAgICAgdG8sCiAgICAgICAgICAgIGNvZGVfYWRkcmVzcywKICAgICAgICAgICAgVHJ1ZSwKICAgICAgICAgICAgRmFsc2UsCiAgICAgICAgICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICAgICAgbWVtb3J5X2lucHV0X3NpemUsCiAgICAgICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSwKICAgICAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpRoB12UKGg/WFgCAABkZWYgY2FsbGNvZGUoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBnYXMgPSBVaW50KHBvcChldm0uc3RhY2spKQogICAgY29kZV9hZGRyZXNzID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKICAgIHZhbHVlID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIHRvID0gZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCiAgICCUhZSBlH2UKGgFaAZoIGqcDwAAaCFoA2gdaERoH0sAdWJqTQcAACmBlH2UKGgFaAZoB12UaD+Mx2lmIGNvZGVfYWRkcmVzcyBpbiBldm0uYWNjZXNzZWRfYWRkcmVzc2VzOgogICAgICAgIGFjY2Vzc19nYXNfY29zdCA9IEdBU19XQVJNX0FDQ0VTUwogICAgZWxzZToKICAgICAgICBldm0uYWNjZXNzZWRfYWRkcmVzc2VzLmFkZChjb2RlX2FkZHJlc3MpCiAgICAgICAgYWNjZXNzX2dhc19jb3N0ID0gR0FTX0NPTERfQUNDT1VOVF9BQ0NFU1MKCiAgICCUhZSBlH2UKGgFaAZoIGqkDwAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlIwMY2hhbmdlLWFkZGVklGFoFV2UaBdd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aCBqCBAAAHViZWgOfZQoaBBdlGgTXZQoakUQAACMCGZ1bmN0aW9ulGVoFV2UaBddlGgZXZSMBmRvbWFpbpRqRRAAAIwHb2JqdHlwZZRqrhAAAIwIZGVzY3R5cGWUaq4QAACMB25vaW5kZXiUiXVoHGogBwAAaB1oRGgfSwBoIGrsDwAAaCFoA3ViahEIAAApgZR9lChoBVgyBQAAZGVmIHNlbGZkZXN0cnVjdChldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIGJlbmVmaWNpYXJ5ID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKCiAgICAjIEdBUwogICAgaWYgKAogICAgICAgIG5vdCBpc19hY2NvdW50X2FsaXZlKGV2bS5lbnYuc3RhdGUsIGJlbmVmaWNpYXJ5KQogICAgICAgIGFuZCBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCkuYmFsYW5jZSAhPSAwCiAgICApOgogICAgICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfU0VMRl9ERVNUUlVDVCArIEdBU19TRUxGX0RFU1RSVUNUX05FV19BQ0NPVU5UKQogICAgZWxzZToKICAgICAgICBjaGFyZ2VfZ2FzKGV2bSwgR0FTX1NFTEZfREVTVFJVQ1QpCgogICAgIyBPUEVSQVRJT04KICAgIGVuc3VyZShub3QgZXZtLm1lc3NhZ2UuaXNfc3RhdGljLCBXcml0ZUluU3RhdGljQ29udGV4dCkKCiAgICBvcmlnaW5hdG9yID0gZXZtLm1lc3NhZ2UuY3VycmVudF90YXJnZXQKICAgIGJlbmVmaWNpYXJ5X2JhbGFuY2UgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSkuYmFsYW5jZQogICAgb3JpZ2luYXRvcl9iYWxhbmNlID0gZ2V0X2FjY291bnQoZXZtLmVudi5zdGF0ZSwgb3JpZ2luYXRvcikuYmFsYW5jZQoKICAgICMgRmlyc3QgVHJhbnNmZXIgdG8gYmVuZWZpY2lhcnkKICAgIHNldF9hY2NvdW50X2JhbGFuY2UoCiAgICAgICAgZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnksIGJlbmVmaWNpYXJ5X2JhbGFuY2UgKyBvcmlnaW5hdG9yX2JhbGFuY2UKICAgICkKICAgICMgTmV4dCwgWmVybyB0aGUgYmFsYW5jZSBvZiB0aGUgYWRkcmVzcyBiZWluZyBkZWxldGVkIChtdXN0IGNvbWUgYWZ0ZXIKICAgICMgc2VuZGluZyB0byBiZW5lZmljaWFyeSBpbiBjYXNlIHRoZSBjb250cmFjdCBuYW1lZCBpdHNlbGYgYXMgdGhlCiAgICAjIGJlbmVmaWNpYXJ5KS4KICAgIHNldF9hY2NvdW50X2JhbGFuY2UoZXZtLmVudi5zdGF0ZSwgb3JpZ2luYXRvciwgVTI1NigwKSkKCiAgICAjIHJlZ2lzdGVyIGFjY291bnQgZm9yIGRlbGV0aW9uCiAgICBldm0uYWNjb3VudHNfdG9fZGVsZXRlLmFkZChvcmlnaW5hdG9yKQoKICAgICMgbWFyayBiZW5lZmljaWFyeSBhcyB0b3VjaGVkCiAgICBpZiBhY2NvdW50X2V4aXN0c19hbmRfaXNfZW1wdHkoZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnkpOgogICAgICAgIGV2bS50b3VjaGVkX2FjY291bnRzLmFkZChiZW5lZmljaWFyeSkKCiAgICAjIEhBTFQgdGhlIGV4ZWN1dGlvbgogICAgZXZtLnJ1bm5pbmcgPSBGYWxzZQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBwYXNzCpRoB12UKGg/jG9kZWYgc2VsZmRlc3RydWN0KGV2bTogRXZtKSAtPiBOb25lOgogICAgIyBTVEFDSwogICAgYmVuZWZpY2lhcnkgPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQoKICAgICMgR0FTCiAgICBpZiCUhZSBlH2UKGgFaAZoIGq2EAAAaCFoA2gdaERoH0sAdWJqTQcAACmBlH2UKGgFaAZoB12UaD+MlGJlbmVmaWNpYXJ5IG5vdCBpbiBldm0uYWNjZXNzZWRfYWRkcmVzc2VzOgogICAgICAgIGV2bS5hY2Nlc3NlZF9hZGRyZXNzZXMuYWRkKGJlbmVmaWNpYXJ5KQogICAgICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfQ09MRF9BQ0NPVU5UX0FDQ0VTUykKCiAgICBpZiCUhZSBlH2UKGgFaAZoIGq+EAAAaCFoA2gdaERoH0sAdWJhaA59lChoEF2UaBNdlIwMY2hhbmdlLWFkZGVklGFoFV2UaBddlGgZXZR1aBxqTAcAAGggarYQAABoIWgDaB1oRGgfSwB1Ymg/WMMEAAAoCiAgICAgICAgbm90IGlzX2FjY291bnRfYWxpdmUoZXZtLmVudi5zdGF0ZSwgYmVuZWZpY2lhcnkpCiAgICAgICAgYW5kIGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0KS5iYWxhbmNlICE9IDAKICAgICk6CiAgICAgICAgY2hhcmdlX2dhcyhldm0sIEdBU19TRUxGX0RFU1RSVUNUICsgR0FTX1NFTEZfREVTVFJVQ1RfTkVXX0FDQ09VTlQpCiAgICBlbHNlOgogICAgICAgIGNoYXJnZV9nYXMoZXZtLCBHQVNfU0VMRl9ERVNUUlVDVCkKCiAgICAjIE9QRVJBVElPTgogICAgZW5zdXJlKG5vdCBldm0ubWVzc2FnZS5pc19zdGF0aWMsIFdyaXRlSW5TdGF0aWNDb250ZXh0KQoKICAgIG9yaWdpbmF0b3IgPSBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldAogICAgYmVuZWZpY2lhcnlfYmFsYW5jZSA9IGdldF9hY2NvdW50KGV2bS5lbnYuc3RhdGUsIGJlbmVmaWNpYXJ5KS5iYWxhbmNlCiAgICBvcmlnaW5hdG9yX2JhbGFuY2UgPSBnZXRfYWNjb3VudChldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yKS5iYWxhbmNlCgogICAgIyBGaXJzdCBUcmFuc2ZlciB0byBiZW5lZmljaWFyeQogICAgc2V0X2FjY291bnRfYmFsYW5jZSgKICAgICAgICBldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSwgYmVuZWZpY2lhcnlfYmFsYW5jZSArIG9yaWdpbmF0b3JfYmFsYW5jZQogICAgKQogICAgIyBOZXh0LCBaZXJvIHRoZSBiYWxhbmNlIG9mIHRoZSBhZGRyZXNzIGJlaW5nIGRlbGV0ZWQgKG11c3QgY29tZSBhZnRlcgogICAgIyBzZW5kaW5nIHRvIGJlbmVmaWNpYXJ5IGluIGNhc2UgdGhlIGNvbnRyYWN0IG5hbWVkIGl0c2VsZiBhcyB0aGUKICAgICMgYmVuZWZpY2lhcnkpLgogICAgc2V0X2FjY291bnRfYmFsYW5jZShldm0uZW52LnN0YXRlLCBvcmlnaW5hdG9yLCBVMjU2KDApKQoKICAgICMgcmVnaXN0ZXIgYWNjb3VudCBmb3IgZGVsZXRpb24KICAgIGV2bS5hY2NvdW50c190b19kZWxldGUuYWRkKG9yaWdpbmF0b3IpCgogICAgIyBtYXJrIGJlbmVmaWNpYXJ5IGFzIHRvdWNoZWQKICAgIGlmIGFjY291bnRfZXhpc3RzX2FuZF9pc19lbXB0eShldm0uZW52LnN0YXRlLCBiZW5lZmljaWFyeSk6CiAgICAgICAgZXZtLnRvdWNoZWRfYWNjb3VudHMuYWRkKGJlbmVmaWNpYXJ5KQoKICAgICMgSEFMVCB0aGUgZXhlY3V0aW9uCiAgICBldm0ucnVubmluZyA9IEZhbHNlCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIHBhc3MKlIWUgZR9lChoBWgGaCBqthAAAGghaANoHWhEaB9LAHViZWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZSMZS9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3Mvc3JjL2V0aGVyZXVtL211aXJfZ2xhY2llci92bS9pbnN0cnVjdGlvbnMvc3lzdGVtLnB5lIwJeG1sOnNwYWNllGq0AgAAjAVmb3JjZZSJjAhsYW5ndWFnZZSMBnB5dGhvbpSMDmhpZ2hsaWdodF9hcmdzlH2UakwIAABLAXOMB2xpbmVub3OUiXVoHGoQCAAAaB1oHmgfS7hoIGrsDwAAaCFoA3ViZWgOfZQoaBBdlGr6AQAAYWgTXZRoFV2UjAxzZWxmZGVzdHJ1Y3SUYWgXXZRoGV2UdWgcaDNoHWgeaB9Lq2ggavMGAABoIWgDdWJoNCmBlH2UKGgFaAZoB12UKGg5KYGUfZQoaAWMDGRlbGVnYXRlY2FsbJRoB12UaD+MDGRlbGVnYXRlY2FsbJSFlIGUfZQoaAVoBmggaukQAABoIWgDaB1oRGgfSwB1YmFoDn2U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lIl1aBxqIAcAAGgdaERoH0sAaCBq5hAAAGghaAN1YmoRCAAAKYGUfZQoaAVYnAQAAGRlZiBkZWxlZ2F0ZWNhbGwoZXZtOiBFdm0pIC0+IE5vbmU6CiAgICAjIFNUQUNLCiAgICBnYXMgPSBVaW50KHBvcChldm0uc3RhY2spKQogICAgY29kZV9hZGRyZXNzID0gdG9fYWRkcmVzcyhwb3AoZXZtLnN0YWNrKSkKICAgIG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfaW5wdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwKICAgICAgICBbCiAgICAgICAgICAgIChtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9pbnB1dF9zaXplKSwKICAgICAgICAgICAgKG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sIG1lbW9yeV9vdXRwdXRfc2l6ZSksCiAgICAgICAgXSwKICAgICkKICAgIG1lc3NhZ2VfY2FsbF9nYXMgPSBjYWxjdWxhdGVfbWVzc2FnZV9jYWxsX2dhcygKICAgICAgICBVMjU2KDApLCBnYXMsIFVpbnQoZXZtLmdhc19sZWZ0KSwgZXh0ZW5kX21lbW9yeS5jb3N0LCBHQVNfQ0FMTAogICAgKQogICAgY2hhcmdlX2dhcyhldm0sIG1lc3NhZ2VfY2FsbF9nYXMuY29zdCArIGV4dGVuZF9tZW1vcnkuY29zdCkKCiAgICAjIE9QRVJBVElPTgogICAgZXZtLm1lbW9yeSArPSBiIlx4MDAiICogZXh0ZW5kX21lbW9yeS5leHBhbmRfYnkKICAgIGdlbmVyaWNfY2FsbCgKICAgICAgICBldm0sCiAgICAgICAgbWVzc2FnZV9jYWxsX2dhcy5zdGlwZW5kLAogICAgICAgIGV2bS5tZXNzYWdlLnZhbHVlLAogICAgICAgIGV2bS5tZXNzYWdlLmNhbGxlciwKICAgICAgICBldm0ubWVzc2FnZS5jdXJyZW50X3RhcmdldCwKICAgICAgICBjb2RlX2FkZHJlc3MsCiAgICAgICAgRmFsc2UsCiAgICAgICAgRmFsc2UsCiAgICAgICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLAogICAgICAgIG1lbW9yeV9pbnB1dF9zaXplLAogICAgICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgbWVtb3J5X291dHB1dF9zaXplLAogICAgKQoKICAgICMgUFJPR1JBTSBDT1VOVEVSCiAgICBldm0ucGMgKz0gMQqUaAddlChoP1gcAgAAZGVmIGRlbGVnYXRlY2FsbChldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIGdhcyA9IFVpbnQocG9wKGV2bS5zdGFjaykpCiAgICBjb2RlX2FkZHJlc3MgPSB0b19hZGRyZXNzKHBvcChldm0uc3RhY2spKQogICAgbWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9pbnB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKICAgIG1lbW9yeV9vdXRwdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zaXplID0gcG9wKGV2bS5zdGFjaykKCiAgICAjIEdBUwogICAgZXh0ZW5kX21lbW9yeSA9IGNhbGN1bGF0ZV9nYXNfZXh0ZW5kX21lbW9yeSgKICAgICAgICBldm0ubWVtb3J5LAogICAgICAgIFsKICAgICAgICAgICAgKG1lbW9yeV9pbnB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X2lucHV0X3NpemUpLAogICAgICAgICAgICAobWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwgbWVtb3J5X291dHB1dF9zaXplKSwKICAgICAgICBdLAogICAgKQogICAglIWUgZR9lChoBWgGaCBqsBEA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ZWYgc3RhdGljY2FsbChldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIGdhcyA9IFVpbnQocG9wKGV2bS5zdGFjaykpCiAgICB0byA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCiAgICBtZXNzYWdlX2NhbGxfZ2FzID0gY2FsY3VsYXRlX21lc3NhZ2VfY2FsbF9nYXMoCiAgICAgICAgVTI1NigwKSwKICAgICAgICBnYXMsCiAgICAgICAgVWludChldm0uZ2FzX2xlZnQpLAogICAgICAgIGV4dGVuZF9tZW1vcnkuY29zdCwKICAgICAgICBHQVNfQ0FMTCwKICAgICkKICAgIGNoYXJnZV9nYXMoZXZtLCBtZXNzYWdlX2NhbGxfZ2FzLmNvc3QgKyBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBnZW5lcmljX2NhbGwoCiAgICAgICAgZXZtLAogICAgICAgIG1lc3NhZ2VfY2FsbF9nYXMuc3RpcGVuZCwKICAgICAgICBVMjU2KDApLAogICAgICAgIGV2bS5tZXNzYWdlLmN1cnJlbnRfdGFyZ2V0LAogICAgICAgIHRvLAogICAgICAgIHRvLAogICAgICAgIFRydWUsCiAgICAgICAgVHJ1ZSwKICAgICAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24sCiAgICAgICAgbWVtb3J5X2lucHV0X3NpemUsCiAgICAgICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiwKICAgICAgICBtZW1vcnlfb3V0cHV0X3NpemUsCiAgICApCgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIGV2bS5wYyArPSAxCpRoB12UKGg/WBACAABkZWYgc3RhdGljY2FsbChldm06IEV2bSkgLT4gTm9uZToKICAgICMgU1RBQ0sKICAgIGdhcyA9IFVpbnQocG9wKGV2bS5zdGFjaykpCiAgICB0byA9IHRvX2FkZHJlc3MocG9wKGV2bS5zdGFjaykpCiAgICBtZW1vcnlfaW5wdXRfc3RhcnRfcG9zaXRpb24gPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X2lucHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQogICAgbWVtb3J5X291dHB1dF9zdGFydF9wb3NpdGlvbiA9IHBvcChldm0uc3RhY2spCiAgICBtZW1vcnlfb3V0cHV0X3NpemUgPSBwb3AoZXZtLnN0YWNrKQoKICAgICMgR0FTCiAgICBleHRlbmRfbWVtb3J5ID0gY2FsY3VsYXRlX2dhc19leHRlbmRfbWVtb3J5KAogICAgICAgIGV2bS5tZW1vcnksCiAgICAgICAgWwogICAgICAgICAgICAobWVtb3J5X2lucHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfaW5wdXRfc2l6ZSksCiAgICAgICAgICAgIChtZW1vcnlfb3V0cHV0X3N0YXJ0X3Bvc2l0aW9uLCBtZW1vcnlfb3V0cHV0X3NpemUpLAogICAgICAgIF0sCiAgICApCiAgICCUhZSBlH2UKGgFaAZoIGrKEgAAaCFoA2gdaERoH0sAdWJqTQcAACmBlH2UKGgFaAZoB12UaD+Ms2lmIHRvIGluIGV2bS5hY2Nlc3NlZF9hZGRyZXNzZXM6CiAgICAgICAg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ZW1vcnlfc3RhcnRfaW5kZXggPSBwb3AoZXZtLnN0YWNrKQogICAgc2l6ZSA9IHBvcChldm0uc3RhY2spCgogICAgIyBHQVMKICAgIGV4dGVuZF9tZW1vcnkgPSBjYWxjdWxhdGVfZ2FzX2V4dGVuZF9tZW1vcnkoCiAgICAgICAgZXZtLm1lbW9yeSwgWyhtZW1vcnlfc3RhcnRfaW5kZXgsIHNpemUpXQogICAgKQoKICAgIGNoYXJnZV9nYXMoZXZtLCBleHRlbmRfbWVtb3J5LmNvc3QpCgogICAgIyBPUEVSQVRJT04KICAgIGV2bS5tZW1vcnkgKz0gYiJceDAwIiAqIGV4dGVuZF9tZW1vcnkuZXhwYW5kX2J5CiAgICBvdXRwdXQgPSBtZW1vcnlfcmVhZF9ieXRlcyhldm0ubWVtb3J5LCBtZW1vcnlfc3RhcnRfaW5kZXgsIHNpemUpCiAgICBldm0ub3V0cHV0ID0gYnl0ZXMob3V0cHV0KQogICAgcmFpc2UgUmV2ZXJ0CgogICAgIyBQUk9HUkFNIENPVU5URVIKICAgIHBhc3MKlIWUgZR9lChoBWgGaCBqnBMAAGghaANoHWhEaB9LAHViYWgOfZQoaBBdlGgTXZRoFV2UaBddlGgZXZSMBnNvdXJjZZSMZS9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3Mvc3JjL2V0aGVyZXVtL211aXJfZ2xhY2llci92bS9pbnN0cnVjdGlvbnMvc3lzdGVtLnB5lIwJeG1sOnNwYWNllGq0AgAAjAVmb3JjZZSJjAhsYW5ndWFnZZSMBnB5dGhvbpSMDmhpZ2hsaWdodF9hcmdzlH2UakwIAABLAXOMB2xpbmVub3OUiXVoHGoQCAAAaB1oHmgfS+5oIGoaEwAAdWJlaA59lChoEF2UamACAABhaBNdlGgVXZSMBnJldmVydJRhaBddlGgZXZR1aBxoM2gdaB5oH0vhaCBq8wYAAGghaAN1YmVoDn2UKGgQXZRo7WFoE12UaBVdlIwObW9kdWxlIGRldGFpbHOUYWgXXZRoGV2UdWgcaDNoHWgeaB9LK2ggaDVoIWgDdWJlaA59lChoEF2UjDBldGhlcmV1bS12aXJ0dWFsLW1hY2hpbmUtZXZtLXN5c3RlbS1pbnN0cnVjdGlvbnOUYWgTXZRoFV2UjDJldGhlcmV1bSB2aXJ0dWFsIG1hY2hpbmUgKGV2bSkgc3lzdGVtIGluc3RydWN0aW9uc5RhaBddlGgZXZR1aBxoM2gdaB5oH0sEaCBoA2ghaAN1YmVoDn2UKGgQXZRoE12UaBVdlGgXXZRoGV2UjAZzb3VyY2WUaER1aBxoAYwOY3VycmVudF9zb3VyY2WUaESMDGN1cnJlbnRfbGluZZRLAIwIc2V0dGluZ3OUjBFkb2N1dGlscy5mcm9udGVuZJSMBlZhbHVlc5STlCmBlH2UKIwMcmVwb3J0X2xldmVslEsCjApoYWx0X2xldmVslEsEjBFleGl0X3N0YXR1c19sZXZlbJRLBYwFZGVidWeUTowOd2FybmluZ19zdHJlYW2UTowJdHJhY2ViYWNrlE6MD291dHB1dF9lbmNvZGluZ5SMBXV0Zi04lIwdb3V0cHV0X2VuY29kaW5nX2Vycm9yX2hhbmRsZXKUjBF4bWxjaGFycmVmcmVwbGFjZZSMDmVycm9yX2VuY29kaW5nlIwFdXRmLTiUjBxlcnJvcl9lbmNvZGluZ19lcnJvcl9oYW5kbGVylIwQYmFja3NsYXNocmVwbGFjZZSME3JlY29yZF9kZXBlbmRlbmNpZXOUjA5kb2N1dGlscy51dGlsc5SMDkRlcGVuZGVuY3lMaXN0lJOUKYGUfZQojARsaXN0lF2UjARmaWxllE51YowGY29uZmlnlE6MDWR1bXBfc2V0dGluZ3OUTowOZHVtcF9pbnRlcm5hbHOUTowPZHVtcF90cmFuc2Zvcm1zlE6MD2R1bXBfcHNldWRvX3htbJROjBBleHBvc2VfaW50ZXJuYWxzlE6MDnN0cmljdF92aXNpdG9ylE6MD19kaXNhYmxlX2NvbmZpZ5ROjAdfc291cmNllE6MDF9kZXN0aW5hdGlvbpSMQ2RvYy9kaWZmcy9tdWlyX2dsYWNpZXJfYmVybGluL3ZtL2luc3RydWN0aW9ucy9zeXN0ZW0vaW5kZXgucGlja2xlNjSUjA1fY29uZmlnX2ZpbGVzlF2UjBFsaW5lX2xlbmd0aF9saW1pdJRNECeMCXRhYl93aWR0aJRLCIwQc3ludGF4X2hpZ2hsaWdodJSMBGxvbmeUjAxzbWFydF9xdW90ZXOUiYwTc21hcnRxdW90ZXNfbG9jYWxlc5ROjB1jaGFyYWN0ZXJfbGV2ZWxfaW5saW5lX21hcmt1cJSJjAZ3cml0ZXKUjAN4bWyUjBljb21wYXJlX3NlY3Rpb25zX2J5X25hbWVzlEsBjAxkdW1wX3JzdGRpZmaUTowFX2JvdGiUfZQoaDhOjAlnZW5lcmF0b3KUTowJZGF0ZXN0YW1wlE6MC3NvdXJjZV9saW5rlE6MCnNvdXJjZV91cmyUTowNdG9jX2JhY2tsaW5rc5RqHQMAAIwSZm9vdG5vdGVfYmFja2xpbmtzlEsBjA1zZWN0bnVtX3hmb3JtlEsBjA5kb2N0aXRsZV94Zm9ybZRLAYwNZG9jaW5mb194Zm9ybZRLAYwSc2VjdHN1YnRpdGxlX3hmb3JtlEsAjA5zdHJpcF9jb21tZW50c5ROjA5pbnB1dF9lbmNvZGluZ5ROjBxpbnB1dF9lbmNvZGluZ19lcnJvcl9oYW5kbGVylIwGc3RyaWN0lIwNbGFuZ3VhZ2VfY29kZZSMAmVulIwOcGVwX3JlZmVyZW5jZXOUTowMcGVwX2Jhc2VfdXJslIwfaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL5SMFXBlcF9maWxlX3VybF90ZW1wbGF0ZZSMCHBlcC0lMDRklIwOcmZjX3JlZmVyZW5jZXOUTowMcmZjX2Jhc2VfdXJslIwbaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvlIwddHJpbV9mb290bm90ZV9yZWZlcmVuY2Vfc3BhY2WUTowWZmlsZV9pbnNlcnRpb25fZW5hYmxlZJRLAYwLcmF3X2VuYWJsZWSUSwGMDmF1dG9faWRfcHJlZml4lIwCaWSUjAlpZF9wcmVmaXiUaAaMG3N0cmlwX2VsZW1lbnRzX3dpdGhfY2xhc3Nlc5ROjA1zdHJpcF9jbGFzc2VzlE51jARib3RolH2UjApfb3B0aW9uc1RvlIwFX2JvdGiUjAtfb2xkX3NvdXJjZZSMTy9ob21lL3J1bm5lci93b3JrL2V4ZWN1dGlvbi1zcGVjcy9leGVjdXRpb24tc3BlY3MvLnRveC9kb2NzL3N0YWdlMF9vdXQvYXV0b2FwaS+UjAtfbmV3X3NvdXJjZZSMCWRvYy9kaWZmc5RqFxQAAGoYFAAAjBZpZ25vcmVfaW5fc2VjdGlvbl9uYW1llF2UKIwEbXVpcpSMB2dsYWNpZXKUjAZiZXJsaW6UZXVijAhyZXBvcnRlcpROjBBpbmRpcmVjdF90YXJnZXRzlF2UjBFzdWJzdGl0dXRpb25fZGVmc5R9lIwSc3Vic3RpdHV0aW9uX25hbWVzlH2UjAhyZWZuYW1lc5R9lIwGcmVmaWRzlH2UjAduYW1laWRzlH2UjAluYW1ldHlwZXOUfZRoEH2UjA1mb290bm90ZV9yZWZzlH2UjA1jaXRhdGlvbl9yZWZzlH2UjA1hdXRvZm9vdG5vdGVzlF2UjBFhdXRvZm9vdG5vdGVfcmVmc5RdlIwQc3ltYm9sX2Zvb3Rub3Rlc5RdlIwUc3ltYm9sX2Zvb3Rub3RlX3JlZnOUXZSMCWZvb3Rub3Rlc5RdlIwJY2l0YXRpb25zlF2UjBJhdXRvZm9vdG5vdGVfc3RhcnSUSwGMFXN5bWJvbF9mb290bm90ZV9zdGFydJRLAIwKaWRfY291bnRlcpSMC2NvbGxlY3Rpb25zlIwHQ291bnRlcpSTlH2UhZRSlIwOcGFyc2VfbWVzc2FnZXOUXZSMEnRyYW5zZm9ybV9tZXNzYWdlc5RdlIwLdHJhbnNmb3JtZXKUTowLaW5jbHVkZV9sb2eUXZSMCmRlY29yYXRpb26UTmghaAN1Yi4=